Stabilize admin state and submission metadata

This commit is contained in:
2026-04-10 15:48:32 -07:00
parent 215ead0768
commit bd2087ba5f
14 changed files with 2171 additions and 463 deletions
+5 -1
View File
@@ -174,8 +174,12 @@ const createSubmissionFromMultipart = async (
const storedAssetId = crypto.randomUUID();
const originalKey = await storeUploadedFile(filePart, storedAssetId);
const contributorName = fields.contributorName || defaults.contributorName || undefined;
const lovedOneName = fields.lovedOneName || defaults.lovedOneName || undefined;
const payload: SubmissionPayload = {
displayName: fields.displayName || defaults.displayName || undefined,
contributorName,
lovedOneName,
displayName: fields.displayName || defaults.displayName || lovedOneName || contributorName || undefined,
caption: fields.caption || defaults.caption || undefined,
promptAnswer: fields.promptAnswer || defaults.promptAnswer || undefined,
allowArchive: defaults.allowArchive ?? coerceBoolean(fields.allowArchive),
+24 -11
View File
@@ -10,7 +10,9 @@ import {
defaultShowConfig,
defaultTags,
flattenSceneParams,
indexCueOrder,
mergeSceneParams,
sortCuesByOrder,
setSceneParamValue,
type ContributorConsent,
type Cue,
@@ -174,6 +176,8 @@ const mergeImportedSubmission = (existing: Submission | undefined, imported: Sub
return {
...imported,
...existing,
contributorName: existing.contributorName ?? imported.contributorName,
lovedOneName: existing.lovedOneName ?? imported.lovedOneName,
displayName: existing.displayName ?? imported.displayName,
caption: existing.caption ?? imported.caption,
promptAnswer: existing.promptAnswer ?? imported.promptAnswer,
@@ -181,13 +185,7 @@ const mergeImportedSubmission = (existing: Submission | undefined, imported: Sub
};
};
const normalizeCueOrder = (cues: Cue[]) =>
[...cues]
.sort((left, right) => left.orderIndex - right.orderIndex)
.map((cue, index) => ({
...cue,
orderIndex: index
}));
const normalizeCueOrder = sortCuesByOrder;
const ensureSafeCue = (cues: Cue[]) => {
const safeCue = defaultCueStack.find((cue) => cue.id === defaultShowConfig.safeSceneCueId);
@@ -346,7 +344,10 @@ const buildGeneratedCueDraft = (state: RepositoryState, payload: CueGeneratePayl
const anchorSubmission = state.submissions.find((submission) => submission.id === selectedAssets[0]?.submissionId);
const anchorLabel =
anchorSubmission?.caption?.trim() || anchorSubmission?.promptAnswer?.trim() || anchorSubmission?.displayName?.trim();
anchorSubmission?.caption?.trim() ||
anchorSubmission?.promptAnswer?.trim() ||
anchorSubmission?.lovedOneName?.trim() ||
anchorSubmission?.displayName?.trim();
const transitionOptions =
scene.sceneFamily === "arrival"
? (["shutter_reveal", "mist_reveal", "dissolve"] as const)
@@ -444,7 +445,13 @@ export class StateStore {
submittedAt: now,
status: "processing",
consentId,
displayName: input.displayName,
contributorName: normalizeEditableText(input.contributorName) || undefined,
lovedOneName: normalizeEditableText(input.lovedOneName) || undefined,
displayName:
normalizeEditableText(input.displayName) ||
normalizeEditableText(input.lovedOneName) ||
normalizeEditableText(input.contributorName) ||
undefined,
caption: input.caption,
promptAnswer: input.promptAnswer
};
@@ -489,6 +496,12 @@ export class StateStore {
throw new Error("Submission not found.");
}
if (Object.prototype.hasOwnProperty.call(payload, "contributorName")) {
submission.contributorName = normalizeEditableText(payload.contributorName);
}
if (Object.prototype.hasOwnProperty.call(payload, "lovedOneName")) {
submission.lovedOneName = normalizeEditableText(payload.lovedOneName);
}
if (Object.prototype.hasOwnProperty.call(payload, "displayName")) {
submission.displayName = normalizeEditableText(payload.displayName);
}
@@ -671,7 +684,7 @@ export class StateStore {
sorted.splice(targetIndex, 0, baseCue);
}
state.cues = normalizeCueOrder(sorted);
state.cues = indexCueOrder(sorted);
return state;
});
}
@@ -698,7 +711,7 @@ export class StateStore {
const current = sorted[currentIndex]!;
sorted[currentIndex] = sorted[swapIndex]!;
sorted[swapIndex] = current;
state.cues = normalizeCueOrder(sorted);
state.cues = indexCueOrder(sorted);
return state;
});
}