diff options
| author | Leonardo Bishop <me@leonardobishop.com> | 2024-03-10 00:13:25 +0000 |
|---|---|---|
| committer | Leonardo Bishop <me@leonardobishop.com> | 2024-03-10 00:13:25 +0000 |
| commit | 9a11e0f4a38297006b89cc7bb2a60734111582e0 (patch) | |
| tree | 5ebddde79e67b659714b5dbdbfcea289f06a4ae5 /stores/session.ts | |
| parent | 817478f3cf357fc09778d9dc3cf67a667e21f042 (diff) | |
Migrate to nuxt
Diffstat (limited to 'stores/session.ts')
| -rw-r--r-- | stores/session.ts | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/stores/session.ts b/stores/session.ts new file mode 100644 index 0000000..1cc8dc7 --- /dev/null +++ b/stores/session.ts @@ -0,0 +1,171 @@ +import { defineStore } from 'pinia' + +export interface EditorQuest { + id: string; + display: { + name: string; + lore: { + normal: string[]; + started: string[]; + } + type: string; + } + tasks: { [key: string]: EditorTask }; + rewards: string[]; + startCommands?: string[]; + startString?: string[]; + rewardString?: string[]; + placeholders?: { [key: string]: string }; + options: { + category: string; + requirements: string[]; + permissionRequired: boolean; + cancellable: boolean; + countsTowardsLimit: boolean; + repeatable: boolean; + cooldown: { + enabled: boolean; + time: number; + } + timeLimit: { + enabled: boolean; + time: number; + } + sortOrder: number; + autostart: boolean; + completedDisplay?: string; + cooldownDisplay?: string; + permissionDisplay?: string; + lockedDisplay?: string; + } +} + +export interface EditorTask { + id: string; + config: { + type: string; + [key: string]: any; + } +} + +export interface EditorCategory { + id: string; + display: { + name: string; + lore: string[]; + type: string; + } + permissionRequired: string; +} + +export interface TaskDefinition { + description: string; + configuration: { + [key: string]: { + type: string | string[]; + description: string; + default?: any; + required?: boolean; + note?: string; + } + } +} + +export const useSessionStore = defineStore('session', { + state: () => ({ + sessionType: '', + session: { + quests: [] as EditorQuest[], + categories: [] as EditorCategory[], + taskDefinitions: {} as { [key: string]: TaskDefinition }, + }, + editor: { + selected: { + type: '' as 'Quest' | 'Category' | null, + id: '' as string | null, + } + } + }), + getters: { + getSessionType(): string { + return this.sessionType + }, + getQuests(): EditorQuest[] { + return this.session.quests + }, + getCategories(): EditorCategory[] { + return this.session.categories + }, + getQuestById: (state) => (id: string) => { + if (!id) return null; + return state.session.quests.find(quest => quest.id === id) + }, + getCategoryById: (state) => (id: string) => { + if (!id) return null; + return state.session.categories.find(quest => quest.id === id) + }, + getQuestsInCategory: (state) => (id: string) => { + if (!id) return []; + return state.session.quests.filter(quest => quest.options.category === id) + }, + getTaskDefinitions: (state) => { + return state.session.taskDefinitions + }, + getTaskDefinitionByTaskType: (state) => (type: string) => { + return state.session.taskDefinitions[type] + }, + getKnownTaskTypes: (state) => () => { + return Object.keys(state.session.taskDefinitions) + } + // getEditorCategories: (state) => { + // return state.editor.categories + // } + }, + actions: { + setSessionType(type: string) { + this.sessionType = type + }, + setQuests(quests: EditorQuest[]) { + this.session.quests = quests + }, + setCategories(categories: EditorCategory[]) { + this.session.categories = categories + }, + // updateEditorCategories() { + // const categories: { [key: string]: { quests: string[] } } = {} + // this.session.categories.forEach(category => { + // categories[category.id] = { quests: [] } + // }) + // this.session.quests.forEach(quest => { + // categories[quest.options.category].quests.push(quest.id) + // }) + // this.editor.categories = categories; + // }, + setEditorSelected(type: 'Quest' | 'Category' | null, id: string | null) { + this.editor.selected.type = type + this.editor.selected.id = id + }, + setTaskDefinitions(definitions: { [key: string]: TaskDefinition }) { + this.session.taskDefinitions = definitions + }, + changeQuestId(oldId: string, newId: string) { + const quest = this.getQuestById(oldId); + if (!quest) return; + + quest.id = newId + }, + deleteQuest(id: string) { + const index = this.session.quests.findIndex(quest => quest.id === id) + if (index === -1) return; + this.session.quests.splice(index, 1) + }, + duplicateQuest(id: string, newQuestId: string) { + const quest = this.getQuestById(id); + if (!quest) return; + + const newQuest = JSON.parse(JSON.stringify(quest)); + newQuest.id = newQuestId; + this.session.quests.push(newQuest); + } + } +}); |
