journal-media-vue/src/machines/EditEntryDialog.ts
gcch 5688e10d0d
Some checks failed
ci/woodpecker/push/publish_instable Pipeline failed
2025-03-14
2025-03-14 22:41:17 +01:00

53 lines
1.4 KiB
TypeScript

import type { MergedTmdbDataDiaryEntry } from "@/libs/search/schemas";
import { not, setup } from "xstate";
export const editEntryDialogMachine = setup({
guards: {
/** Est-ce que l'ouvre présentée possède une entrée dans le Journal ? */
hasDiaryEntry: ({ context }) => context.entryData?.entryId !== undefined,
},
types: {
context: {} as { entryData: MergedTmdbDataDiaryEntry | undefined },
input: {} as { entryData: MergedTmdbDataDiaryEntry },
},
})
.createMachine({
context: ({ input }) => ({
entryData: input.entryData,
}),
id: "editEntryDialog",
initial: "blankOrEntry",
states: {
blankOrEntry: {
always: [
{
guard: not("hasDiaryEntry"),
target: "viewing.blank",
},
{
guard: "hasDiaryEntry",
target: "viewing.entry",
},
],
description: "État initial « fantôme » ne servant qu'à déterminer si le média est dans le Journal ou non.",
},
editing: {
description: "État de finalisation.",
type: "final",
},
viewing: {
description: "État de lecture seule des données de l'entrée.",
initial: "blank",
on: {
editWanted: {
target: "editing",
},
},
states: {
blank: {},
entry: {},
},
},
},
});