import { defineStore, storeToRefs } from 'pinia' import { getCookie, setCookie } from 'typescript-cookie' import { useCookies } from 'vue3-cookies' import { BasicColumns, ColumnInfo, ColumnName, Columns, DetailsColumns, MoveColumns } from '../lib/columns' import { Reviver, StoreChars, StoreColSet, StoreInvs, StoreStr, StoreStrSet } from '../lib/storage' import { ColumnSet } from '../lib/table' import { TricksterCharacter, TricksterInventory } from '../lib/trickster' import { nameCookie} from '../session_storage' const _defaultColumn:(ColumnInfo| ColumnName)[] = [ ...BasicColumns, ...MoveColumns, ...DetailsColumns, ] export const useStore = defineStore('state', { state: ()=> { let store = { invs: new Map() as Map<string,TricksterInventory>, chars: new Map() as Map<string,TricksterCharacter>, accounts: new Set() as Set<string>, activeTable: "none", screen: "default", columns:new ColumnSet(_defaultColumn), tags: new ColumnSet(), dirty: 0, } loadStore(); return store } }) export const StoreReviver = { chars: StoreChars, accounts: StoreStrSet, activeTable: StoreStr, screen: StoreStr, columns: StoreColSet, tags: StoreColSet, } export interface StoreProps { invs: Map<string,TricksterInventory> chars: Map<string, TricksterCharacter> accounts: Set<string> activeTable: string screen: string columns: ColumnSet tags: ColumnSet dirty: number } export const loadStore = ()=> { let store = useStoreRef() for(const [k, v] of Object.entries(StoreReviver)){ const coke = localStorage.getItem(nameCookie("last_"+k)) if(coke){ if((store[k as keyof RefStore]) != undefined){ store[k as keyof RefStore].value = v.Revive(coke) as any } } } } export const saveStore = ()=> { let store = useStoreRef() for(const [k, v] of Object.entries(StoreReviver)){ let coke; if((store[k as keyof RefStore]) != undefined){ coke = v.Murder(store[k as keyof RefStore].value as any) } if(coke){ localStorage.setItem(nameCookie("last_"+k),coke) } } } export const useStoreRef = ()=>{ const refs = storeToRefs(useStore()) return refs }; export type RefStore = ReturnType<typeof useStoreRef>;