import { defineStore } from 'pinia' import { WrapperShape } from '@/enums' import type { AvatarOption } from '@/types' import { getRandomAvatarOption } from '@/utils' import { SCREEN } from '@/utils/constant' import { REDO, SET_AVATAR_OPTION, SET_SIDER_STATUS, UNDO, } from './mutation-type' export interface State { history: { past: AvatarOption[] present: AvatarOption future: AvatarOption[] } isSiderCollapsed: boolean } export const useStore = defineStore('store', { state: () => ({ history: { past: [], present: getRandomAvatarOption({ wrapperShape: WrapperShape.Squircle }), future: [], }, isSiderCollapsed: window.innerWidth <= SCREEN.lg, } as State), actions: { [SET_AVATAR_OPTION](data: AvatarOption) { this.history = { past: [...this.history.past, this.history.present], present: data, future: [], } }, [UNDO]() { if (this.history.past.length > 0) { const previous = this.history.past[this.history.past.length - 1] const newPast = this.history.past.slice(0, this.history.past.length - 1) this.history = { past: newPast, present: previous, future: [this.history.present, ...this.history.future], } } }, [REDO]() { if (this.history.future.length > 0) { const next = this.history.future[0] const newFuture = this.history.future.slice(1) this.history = { past: [...this.history.past, this.history.present], present: next, future: newFuture, } } }, [SET_SIDER_STATUS](collapsed: boolean) { if (collapsed !== this.isSiderCollapsed) { this.isSiderCollapsed = collapsed } }, }, })