1
0
forked from a/lifeto-shop
lifeto-shop/src/state/state.ts

90 lines
2.3 KiB
TypeScript
Raw Normal View History

2022-07-03 10:25:12 +00:00
import { defineStore, storeToRefs } from 'pinia'
2022-07-03 15:50:41 +00:00
import { getCookie, setCookie } from 'typescript-cookie'
import { useCookies } from 'vue3-cookies'
2022-07-03 10:25:12 +00:00
import { BasicColumns, ColumnInfo, ColumnName, Columns, DetailsColumns, MoveColumns } from '../lib/columns'
2022-07-03 16:37:06 +00:00
import { Reviver, StoreColSet, StoreInvs, StoreStr, StoreStrSet } from '../lib/storage'
2022-07-03 10:25:12 +00:00
import { ColumnSet } from '../lib/table'
import { TricksterInventory } from '../lib/trickster'
2022-07-03 15:50:41 +00:00
import { nameCookie} from '../session_storage'
2022-07-03 10:25:12 +00:00
const _defaultColumn:(ColumnInfo| ColumnName)[] = [
...BasicColumns,
...MoveColumns,
...DetailsColumns,
]
export const useStore = defineStore('state', {
state: ()=> {
2022-07-03 16:05:10 +00:00
let store = {
2022-07-03 10:25:12 +00:00
invs: new Map() as Map<string,TricksterInventory>,
2022-07-03 15:50:41 +00:00
accounts: new Set() as Set<string>,
2022-07-03 16:05:10 +00:00
activeTable: "none",
screen: "default",
columns:new ColumnSet(_defaultColumn),
tags: new ColumnSet(),
2022-07-03 15:50:41 +00:00
dirty: 0,
2022-07-03 10:25:12 +00:00
}
2022-07-03 16:05:10 +00:00
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
2022-07-03 10:25:12 +00:00
}
})
2022-07-03 15:50:41 +00:00
export const StoreReviver = {
2022-07-03 16:37:06 +00:00
invs: StoreInvs,
2022-07-03 15:50:41 +00:00
accounts: StoreStrSet,
activeTable: StoreStr,
screen: StoreStr,
columns: StoreColSet,
tags: StoreColSet,
}
export interface StoreProps {
invs: Map<string,TricksterInventory>
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 = 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<typeof useStoreRef>;
2022-07-03 10:25:12 +00:00