Add NPC dialogue management functions in App.tsx

This commit is contained in:
2026-04-15 09:14:32 +02:00
parent 1ca180cde1
commit 939b5da9d9

View File

@@ -4830,6 +4830,89 @@ export function App({ store, initialStatusMessage }: AppProps) {
}
};
const handleAddNpcDialogue = () => {
const nextDialogue = createProjectDialogue();
updateSelectedNpcDialogues(
"Add NPC dialogue",
"Added NPC dialogue.",
(dialogues, defaultDialogueId) => ({
dialogues: [...dialogues, nextDialogue],
defaultDialogueId:
defaultDialogueId ?? nextDialogue.id
})
);
setSelectedNpcDialogueId(nextDialogue.id);
};
const handleDeleteNpcDialogue = (dialogueId: string) => {
updateSelectedNpcDialogues(
"Delete NPC dialogue",
"Deleted NPC dialogue.",
(dialogues, defaultDialogueId) => {
const nextDialogues = dialogues.filter(
(dialogue) => dialogue.id !== dialogueId
);
return {
dialogues: nextDialogues,
defaultDialogueId:
defaultDialogueId === dialogueId
? nextDialogues[0]?.id ?? null
: defaultDialogueId
};
}
);
if (selectedNpcDialogueId === dialogueId) {
setSelectedNpcDialogueId(null);
}
};
const updateNpcDialogue = (
dialogueId: string,
label: string,
successMessage: string,
mutate: (dialogue: ProjectDialogue) => void
) => {
updateSelectedNpcDialogues(label, successMessage, (dialogues, defaultDialogueId) => {
const nextDialogues = dialogues.map((dialogue) => {
if (dialogue.id !== dialogueId) {
return dialogue;
}
const nextDialogue: ProjectDialogue = {
...dialogue,
lines: dialogue.lines.map((line) => ({ ...line }))
};
mutate(nextDialogue);
return nextDialogue;
});
return {
dialogues: nextDialogues,
defaultDialogueId
};
});
};
const updateNpcDialogueLine = (
dialogueId: string,
lineId: string,
label: string,
successMessage: string,
mutate: (line: ProjectDialogueLine) => void
) => {
updateNpcDialogue(dialogueId, label, successMessage, (dialogue) => {
const line = dialogue.lines.find((candidate) => candidate.id === lineId);
if (line === undefined) {
throw new Error("Selected dialogue line no longer exists.");
}
mutate(line);
});
};
const handleAddProjectSequenceControlEffect = (
sequenceId: string,
targetKey: string,