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, StoreColSet, StoreStr, StoreStrSet } from '../lib/storage' import { ColumnSet } from '../lib/table' import { 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, accounts: new Set() as Set, activeTable: "none", screen: "default", columns:new ColumnSet(_defaultColumn), tags: new ColumnSet(), dirty: 0, } for(const [k, v] of Object.entries(StoreReviver)){ const coke = getCookie(nameCookie("last_"+k)) if(coke){ if((store[k as keyof StoreProps]) != undefined){ (store[k as keyof StoreProps] as any) = v.Revive(coke) } } } return store } }) export const StoreReviver = { accounts: StoreStrSet, activeTable: StoreStr, screen: StoreStr, columns: StoreColSet, tags: StoreColSet, } export interface StoreProps { invs: Map accounts: Set 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 = getCookie(nameCookie("last_"+k)) if(coke){ if((store[k as keyof StoreProps]) != undefined){ store[k as keyof StoreProps].value = v.Revive(coke) } } } } export const saveStore = ()=> { let store = useStoreRef() for(const [k, v] of Object.entries(StoreReviver)){ let coke; if((store[k as keyof StoreProps]) != undefined){ coke = v.Murder(store[k as keyof StoreProps].value as any) } if(coke){ setCookie(nameCookie("last_"+k),coke) } } } export const useStoreRef = ()=>{ const refs = storeToRefs(useStore()) return refs }; export type RefStore = ReturnType;