opnform-host-nginx/client/stores/app.js

80 lines
1.8 KiB
JavaScript
Raw Normal View History

import { defineStore } from "pinia"
import { nextTick } from "vue"
2023-12-09 15:47:03 +01:00
export const useAppStore = defineStore("app", {
2023-12-09 15:47:03 +01:00
state: () => ({
layout: "default",
2023-12-20 16:10:32 +01:00
navbarHidden: false,
2023-12-09 15:47:03 +01:00
// App Loader
loader: {
percent: 0,
show: false,
canSuccess: true,
duration: 3000,
_timer: null,
_cut: null,
},
2023-12-09 15:47:03 +01:00
}),
actions: {
hideNavbar() {
2023-12-20 16:10:32 +01:00
this.navbarHidden = true
},
showNavbar() {
2023-12-20 16:10:32 +01:00
this.navbarHidden = false
},
setLayout(layout) {
this.layout = layout ?? "default"
2023-12-09 15:47:03 +01:00
},
loaderIncrease(num) {
2023-12-09 15:47:03 +01:00
this.loader.percent = this.loader.percent + Math.floor(num)
},
loaderDecrease(num) {
2023-12-09 15:47:03 +01:00
this.loader.percent = this.loader.percent - Math.floor(num)
},
loaderFinish() {
2023-12-09 15:47:03 +01:00
this.loader.percent = 100
this.loaderHide()
},
loaderSetTimer(timerVal) {
2023-12-09 15:47:03 +01:00
this.loader._timer = timerVal
},
loaderPause() {
2023-12-09 15:47:03 +01:00
clearInterval(this.loader._timer)
},
loaderHide() {
2023-12-09 15:47:03 +01:00
this.loaderPause()
this.loader._timer = null
setTimeout(() => {
this.loader.show = false
nextTick(() => {
setTimeout(() => {
this.loader.percent = 0
}, 200)
})
}, 500)
},
loaderFail() {
2023-12-09 15:47:03 +01:00
this.loader.canSuccess = false
},
loaderStart() {
2023-12-09 15:47:03 +01:00
this.loader.show = true
this.loader.canSuccess = true
if (this.loader._timer) {
clearInterval(this.loader._timer)
this.loader.percent = 0
}
this.loader._cut = 10000 / Math.floor(this.loader.duration)
this.loaderSetTimer(
setInterval(() => {
this.loaderIncrease(this.loader._cut * Math.random())
if (this.loader.percent > 95) {
this.loaderFinish()
}
}, 100),
)
},
},
2023-12-09 15:47:03 +01:00
})