forked from a/lifeto-shop
84 lines
2.2 KiB
TypeScript
84 lines
2.2 KiB
TypeScript
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>;
|
|
|
|
|