diff --git a/src/features/onboarding/onboarding-shell.tsx b/src/features/onboarding/onboarding-shell.tsx index cb9daa90..21d41a3d 100644 --- a/src/features/onboarding/onboarding-shell.tsx +++ b/src/features/onboarding/onboarding-shell.tsx @@ -62,7 +62,8 @@ export const OnboardingShell = () => { } else if (currentStepId === "finish") { const agents = (state.context.flowData.agents as any[]) || []; const isAgentConnected = agents.some((a) => a.connected); - if (!isAgentConnected) { + const databaseIds = (state.context.flowData.project as any)?.databaseIds || []; + if (!isAgentConnected || databaseIds.length === 0) { prevId = "project-create"; } } diff --git a/src/features/onboarding/onboarding-steps.tsx b/src/features/onboarding/onboarding-steps.tsx index 1d5f36b9..9843ad64 100644 --- a/src/features/onboarding/onboarding-steps.tsx +++ b/src/features/onboarding/onboarding-steps.tsx @@ -121,12 +121,14 @@ export const onboardingSteps: OnboardingStep[] = [ skipToStep: (ctx: any) => { const agents = (ctx.flowData?.agents as any[]) || []; const isAgentConnected = agents.some((a) => a.connected); - return !isAgentConnected ? "finish" : "db-settings"; + const databaseIds = (ctx.flowData?.project?.databaseIds as string[]) || []; + return !isAgentConnected || databaseIds.length === 0 ? "finish" : "db-settings"; }, nextStep: (ctx: any) => { const agents = (ctx.flowData?.agents as any[]) || []; const isAgentConnected = agents.some((a) => a.connected); - return !isAgentConnected ? "finish" : "db-settings"; + const databaseIds = (ctx.flowData?.project?.databaseIds as string[]) || []; + return !isAgentConnected || databaseIds.length === 0 ? "finish" : "db-settings"; }, }, { diff --git a/src/features/onboarding/steps/step-db-settings.tsx b/src/features/onboarding/steps/step-db-settings.tsx index c18df1be..b03b87c4 100644 --- a/src/features/onboarding/steps/step-db-settings.tsx +++ b/src/features/onboarding/steps/step-db-settings.tsx @@ -6,83 +6,86 @@ import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Switch } from "@/components/ui/switch"; import { Button } from "@/components/ui/button"; -import { OnboardingDbSettings, OnboardingProjectData } from "@/features/onboarding/types"; +import { + OnboardingDbSettings, + OnboardingProjectData, +} from "@/features/onboarding/types"; export const StepDbSettings = () => { - const { next, updateContext, state } = useOnboarding(); - const project = (state?.context.flowData.project ?? { databaseIds: [] }) as OnboardingProjectData; - const databaseIds = project.databaseIds; - const [index, setIndex] = useState(0); - const [applyToAll, setApplyToAll] = useState(false); - const [retentionDays, setRetentionDays] = useState(30); - const [settings, setSettings] = useState>({}); + const { next, updateContext, state } = useOnboarding(); + const project = (state?.context.flowData.project ?? { + databaseIds: [], + }) as OnboardingProjectData; + const databaseIds = project.databaseIds; + const [index, setIndex] = useState(0); + const [applyToAll, setApplyToAll] = useState(false); + const [retentionDays, setRetentionDays] = useState(30); + const [settings, setSettings] = useState< + Record + >({}); - if (databaseIds.length === 0) { - return ( -
-

No database to configure

- -
- ); + if (!databaseIds || databaseIds.length === 0) return null; + + const currentDbId = databaseIds[index]; + const saveCurrent = (): Record => { + if (applyToAll) { + const allSettings: Record = {}; + databaseIds.forEach((id) => { + allSettings[id] = { retentionDays }; + }); + return allSettings; + } + return { ...settings, [currentDbId]: { retentionDays } }; + }; + + const onContinue = async () => { + const updated = saveCurrent(); + setSettings(updated); + + if (applyToAll || index === databaseIds.length - 1) { + await updateContext({ + flowData: { ...state?.context.flowData, dbSettings: updated }, + }); + await next(); + return; } - const currentDbId = databaseIds[index]; - // Database info is available from state flowData if needed - // For now, just use the ID + setIndex((prev) => prev + 1); + setRetentionDays(30); + }; - const saveCurrent = (): Record => { - if (applyToAll) { - const allSettings: Record = {}; - databaseIds.forEach((id) => { - allSettings[id] = { retentionDays }; - }); - return allSettings; - } - return { ...settings, [currentDbId]: { retentionDays } }; - }; - - const onContinue = async () => { - const updated = saveCurrent(); - setSettings(updated); - - if (applyToAll || index === databaseIds.length - 1) { - await updateContext({ flowData: { ...state?.context.flowData, dbSettings: updated } }); - await next(); - return; - } - - setIndex((prev) => prev + 1); - setRetentionDays(30); - }; - - return ( -
-
-

Configure database

-

- Database {index + 1} of {databaseIds.length} -

-
-
- - setRetentionDays(Number(e.target.value))} - /> -
- {databaseIds.length > 1 && ( -
- - -
- )} - + return ( +
+
+

Configure database

+

+ Database {index + 1} of {databaseIds.length} +

+
+
+ + setRetentionDays(Number(e.target.value))} + /> +
+ {databaseIds.length > 1 && ( +
+ +
- ); + )} + +
+ ); };