Explorar el Código

Added simplified version of save state

jnfrati hace 4 años
padre
commit
9dc676f914

+ 7 - 6
dashboard/src/main/home/onboarding/Onboarding.tsx

@@ -10,6 +10,7 @@ import { OFState } from "./state";
 import { useSteps } from "./state/StepHandler";
 
 const Onboarding = () => {
+  const context = useContext(Context);
   useSteps();
 
   useEffect(() => {
@@ -19,12 +20,12 @@ const Onboarding = () => {
     };
   }, []);
 
-  // useEffect(() => {
-  //   OFState.actions.initializeState(context.currentProject?.id);
-  //   return () => {
-  //     OFState.actions.clearState();
-  //   };
-  // }, [context.currentProject?.id]);
+  useEffect(() => {
+    OFState.actions.initializeState(context.currentProject?.id);
+    return () => {
+      OFState.actions.clearState();
+    };
+  }, [context.currentProject?.id]);
 
   // useEffect(() => {
   //   if (snap.StepHandler.finishedOnboarding) {

+ 1 - 1
dashboard/src/main/home/onboarding/state/StepHandler.ts

@@ -175,7 +175,7 @@ type StepHandlerType = {
   actions: {
     nextStep: (action?: Action) => void;
     clearState: () => void;
-    restoreState: (prevState: StepHandlerType) => void;
+    restoreState: (prevState: Partial<StepHandlerType>) => void;
     getStep: (nextStepName: string) => Step | SubStep;
   };
 };

+ 104 - 3
dashboard/src/main/home/onboarding/state/index.ts

@@ -1,5 +1,6 @@
 import { proxy, subscribe } from "valtio";
 import { devtools, subscribeKey } from "valtio/utils";
+import { Onboarding } from "../types";
 import { StateHandler } from "./StateHandler";
 import { Action, StepHandler } from "./StepHandler";
 
@@ -28,7 +29,7 @@ export const OFState = proxy({
       StepHandler.actions.clearState();
     },
     saveState: () => {
-      const state = JSON.stringify(OFState);
+      const state = compressState(OFState);
       localStorage.setItem(
         `onboarding-${OFState.StateHandler.project?.id}`,
         state
@@ -41,9 +42,9 @@ export const OFState = proxy({
       if (!notParsedPrevState) {
         return;
       }
-      const prevState = JSON.parse(notParsedPrevState);
+      const prevState = decompressState(notParsedPrevState);
 
-      if (prevState.StepHandler.finishedOnboarding) {
+      if (prevState.StepHandler.currentStepName === "clean_up") {
         return;
       }
 
@@ -56,3 +57,103 @@ export const OFState = proxy({
     },
   },
 });
+
+const compressState = (state: typeof OFState) => {
+  const currentStep = state.StepHandler?.currentStepName;
+  const project = state.StateHandler?.project;
+  const source = state.StateHandler?.connected_source;
+  const registry = state.StateHandler?.connected_registry;
+  const provision = state.StateHandler?.provision_resources;
+
+  let onboarding_state: Onboarding = {
+    current_step: currentStep,
+
+    project_id: project?.id,
+    project_name: project?.name,
+
+    connected_source: source,
+    skip_registry_connection: registry?.skip,
+
+    registry_connection_provider: registry?.provider,
+    registry_connection_credentials_id: registry?.credentials?.id,
+    registry_connection_settings_url:
+      registry?.settings?.gcr_url || registry?.settings?.registry_url,
+    registry_connection_settings_name: registry?.settings?.registry_name,
+
+    skip_resource_provision: provision?.skip,
+    resource_provision_provider: provision?.provider,
+    resource_provision_credentials_id: provision?.credentials?.id,
+    resource_provision_credentials_arn: provision?.credentials?.arn,
+    resource_provision_credentials_region: provision?.credentials?.region,
+
+    resource_provision_settings_cluster_name: provision?.settings?.cluster_name,
+    resource_provision_settings_region: provision?.settings?.region,
+    resource_provision_settings_tier: provision?.settings?.tier,
+    resource_provision_settings_machine_type:
+      provision?.settings?.aws_machine_type,
+  };
+
+  return JSON.stringify(onboarding_state);
+};
+
+const decompressState = (prev_state: string) => {
+  const state: Onboarding = JSON.parse(prev_state);
+
+  const step = state.current_step;
+  const project = {
+    id: state.project_id,
+    name: state.project_name,
+  };
+
+  let registry: any = {
+    skip: state.skip_registry_connection,
+    provider: state.registry_connection_provider,
+    credentials: {
+      id: state.registry_connection_credentials_id,
+    },
+    settings: {
+      registry_name: state.registry_connection_settings_name,
+    },
+  };
+
+  if (registry.provider === "gcp") {
+    registry.settings.gcr_url = state.registry_connection_settings_url;
+  } else if (registry.provider === "do") {
+    registry.settings.registry_url = state.registry_connection_settings_url;
+  }
+
+  let provision: any = {
+    skip: state.skip_resource_provision,
+    provider: state.resource_provision_provider,
+    credentials: {
+      id: state.resource_provision_credentials_id,
+    },
+    settings: {
+      cluster_name: state.resource_provision_settings_cluster_name,
+    },
+  };
+
+  if (provision.provider === "gcp") {
+    provision.credentials.region = state.resource_provision_credentials_region;
+  } else if (provision.provider === "aws") {
+    provision.credentials.region = state.resource_provision_credentials_region;
+    provision.credentials.arn = state.resource_provision_credentials_arn;
+    provision.settings.aws_machine_type =
+      state.resource_provision_settings_machine_type;
+  } else if (provision.provider === "do") {
+    provision.settings.tier = state.resource_provision_settings_tier;
+    provision.settings.region = state.resource_provision_settings_region;
+  }
+
+  return {
+    StepHandler: {
+      currentStepName: step,
+    },
+    StateHandler: {
+      project,
+      connected_source: state.connected_source,
+      connected_registry: registry,
+      provision_resources: provision,
+    },
+  };
+};

+ 3 - 1
dashboard/src/main/home/onboarding/types.ts

@@ -89,7 +89,7 @@ export type SkipProvisionConfig = {
 
 export type SkipRegistryConnection = SkipProvisionConfig;
 
-interface Onboarding {
+export interface Onboarding {
   current_step: string;
 
   project_id: number;
@@ -99,12 +99,14 @@ interface Onboarding {
 
   skip_registry_connection: boolean;
 
+  registry_connection_provider: string;
   registry_connection_credentials_id: number;
   registry_connection_settings_url: string;
   registry_connection_settings_name: string;
 
   skip_resource_provision: boolean;
 
+  resource_provision_provider: string;
   resource_provision_credentials_id: number;
   resource_provision_credentials_arn: string;
   resource_provision_credentials_region: string;