fix(campaign-ui): make discard restore server state

This commit is contained in:
2026-07-20 20:08:00 +02:00
parent f755cdf48d
commit 7ea5bdb217
3 changed files with 24 additions and 8 deletions

View File

@@ -12,7 +12,7 @@ type UseCampaignDraftEditorOptions = {
campaignId: string;
version: CampaignVersionDetail | null;
locked: boolean;
reload: () => Promise<void>;
reload: (options?: {force?: boolean;}) => Promise<void>;
setError: (message: string) => void;
currentStep: StepValue;
currentFlow?: string;
@@ -124,12 +124,25 @@ export function useCampaignDraftEditor({
}
}, [campaignId, currentFlow, currentStep, draft, extraPayload, isComplete, locked, onSaved, reload, setError, settings, version, workflowState]);
const discardDraft = useCallback(async () => {
if (version) {
const initialDraft = ensureCampaignDraft(version);
const loadedDraft = transformLoadedDraftRef.current?.(version, initialDraft) ?? initialDraft;
setDraft(loadedDraft);
setDirty(false);
setLocalError("");
setSaveState(loadedLabelRef.current(version));
onLoadedRef.current?.(version, loadedDraft);
}
await reload({ force: true });
}, [reload, version]);
const unsavedRegistration = useMemo(() => dirty && !locked ? {
title: unsavedTitle,
message: unsavedMessage,
onSave: () => saveDraft("manual"),
onDiscard: () => setDirty(false)
} : null, [dirty, locked, saveDraft, unsavedMessage, unsavedTitle]);
onDiscard: () => { void discardDraft(); }
} : null, [dirty, discardDraft, locked, saveDraft, unsavedMessage, unsavedTitle]);
useRegisterCampaignUnsavedChanges(unsavedRegistration);
@@ -145,6 +158,7 @@ export function useCampaignDraftEditor({
setLocalError,
patch,
markDirty,
discardDraft,
saveDraft
};
}
}