import { useParams } from '@solidjs/router'; import { createSignal, onMount } from 'solid-js'; import AdminShell from '~/components/AdminShell'; import { getRuntimeConfig, saveRuntimeConfig } from '~/lib/runtime/storage'; import type { RuntimeOnboardingConfig, RuntimeOnboardingStep } from '~/lib/runtime/types'; function stringifySteps(steps: RuntimeOnboardingStep[]): string { return JSON.stringify(steps, null, 2); } export default function EditOnboardingPage() { const params = useParams(); const [config, setConfig] = createSignal(null); const [stepsJson, setStepsJson] = createSignal('[]'); const [statusMessage, setStatusMessage] = createSignal(''); const [stepsError, setStepsError] = createSignal(''); onMount(() => { const existing = getRuntimeConfig('onboarding', params.schemaId); if (!existing?.payload) return; setConfig(existing.payload); setStepsJson(stringifySteps(existing.payload.steps)); }); const syncSteps = (raw: string) => { setStepsJson(raw); const current = config(); if (!current) return; try { const parsed = JSON.parse(raw) as RuntimeOnboardingStep[]; if (!Array.isArray(parsed)) { setStepsError('Steps JSON must be an array.'); return; } setConfig({ ...current, steps: parsed }); setStepsError(''); } catch { setStepsError('Invalid JSON. Fix syntax before saving.'); } }; const persist = (status: 'draft' | 'published') => { const payload = config(); if (!payload) return; if (!payload.schemaId.trim()) { setStatusMessage('Schema ID is required before saving.'); return; } if (stepsError()) { setStatusMessage('Fix steps JSON errors before saving.'); return; } if (payload.steps.length === 0) { setStatusMessage('Add at least one onboarding step before saving.'); return; } saveRuntimeConfig('onboarding', payload.schemaId, payload, status); setStatusMessage(status === 'draft' ? 'Draft saved in runtime storage.' : 'Onboarding schema published in runtime storage.'); }; return (

Edit Onboarding Flow

All onboarding fields, validations, upload rules, and select behaviors are runtime schema-driven.

{!config() ? (

Onboarding schema not found in local runtime storage.

) : (

Onboarding Builder

setConfig({ ...config()!, schemaId: e.currentTarget.value })} />
setConfig({ ...config()!, roleKey: e.currentTarget.value.toUpperCase() })} />
setConfig({ ...config()!, version: Number(e.currentTarget.value || 1) })} />