import { defineStore, storeToRefs } from 'pinia' import { BasicColumns, ColumnInfo, ColumnName, Columns, DetailsColumns, MoveColumns } from '../lib/columns' import { OrderTracker } from '../lib/lifeto/order_manager' import { Reviver, StoreAccounts, StoreChars, StoreColSet, StoreInvs, StoreSerializable, StoreStr, StoreStrSet } from '../lib/storage' import { ColumnSet } from '../lib/table' import { TricksterAccount, TricksterCharacter, TricksterInventory } from '../lib/trickster' import { nameCookie} from '../session_storage' const _defaultColumn:(ColumnInfo| ColumnName)[] = [ ...BasicColumns, ...MoveColumns, ...DetailsColumns, ] // if you wish for the thing to persist export const StoreReviver = { chars: StoreChars, accs: StoreAccounts, activeTable: StoreStr, screen: StoreStr, columns: StoreColSet, tags: StoreColSet, // orders: StoreSerializable(OrderTracker) } export interface StoreProps { invs: Map chars: Map accs: Map orders: OrderTracker activeTable: string screen: string columns: ColumnSet tags: ColumnSet dirty: number currentSearch: string } export const useStore = defineStore('state', { state: ()=> { let store = { invs: new Map() as Map, chars: new Map() as Map, accs: new Map() as Map, orders: new OrderTracker(), activeTable: "none", screen: "default", columns:new ColumnSet(_defaultColumn), tags: new ColumnSet(), dirty: 0, currentSearch: "", } return store } }) 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;