diff --git a/src/features/onboarding/steps/step-db-settings.tsx b/src/features/onboarding/steps/step-db-settings.tsx new file mode 100644 index 00000000..b598c1c0 --- /dev/null +++ b/src/features/onboarding/steps/step-db-settings.tsx @@ -0,0 +1,88 @@ +"use client"; + +import { useState } from "react"; +import { useOnboarding } from "@onboardjs/react"; +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 { mockDatabases } from "@/features/onboarding/onboarding.mock"; +import { OnboardingDbSettings, OnboardingProjectData } from "@/features/onboarding/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>({}); + + if (databaseIds.length === 0) { + return ( +
+

No database to configure

+ +
+ ); + } + + const currentDbId = databaseIds[index]; + const currentDb = mockDatabases.find((db) => db.id === currentDbId); + + 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 {currentDb?.name}

+

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

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