-
Notifications
You must be signed in to change notification settings - Fork 0
/
loadingStore.ts
38 lines (36 loc) · 1.09 KB
/
loadingStore.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import { defineStore } from "pinia"
type LoadingStoreState = {
statePerKey: { [key: string]: "loading" | "done" | "error" }
visibleKey: string
message: string
}
export const useLoadingStore = defineStore("loading", {
state: () =>
<LoadingStoreState>{
statePerKey: {},
visibleKey: "",
message: "",
},
actions: {
markLoading(key: string, message: string | boolean = false) {
this.statePerKey[key] = "loading"
this.visibleKey = !!message ? key : ""
this.message = typeof message === "string" ? message : ""
},
markDone(key: string) {
this.statePerKey[key] = "done"
},
markError(key: string) {
this.statePerKey[key] = "error"
},
},
getters: {
isLoading: (state) => {
return (key: string) => {
return state.statePerKey[key] === "loading"
}
},
showLoadingOverlay: (state) =>
state.visibleKey && state.statePerKey[state.visibleKey] === "loading",
},
})