34 lines
803 B
JavaScript
34 lines
803 B
JavaScript
import { defineStore } from 'pinia'
|
|
import { ref, computed } from 'vue'
|
|
|
|
export const useModalStore = defineStore('modal', () => {
|
|
const modals = ref([])
|
|
|
|
const isModal = (name) => modals.value.some((x) => x.name === name)
|
|
const getModal = (name) => modals.value.find((x) => x.name === name)
|
|
const getActiveModal = computed(() => modals.value.at(-1))
|
|
|
|
const openModal = (name, data) => {
|
|
if (!modals.value.some((x) => x.name === name)) {
|
|
modals.value.push({ name, data })
|
|
}
|
|
}
|
|
|
|
const closeModal = (name) => {
|
|
if (name) {
|
|
modals.value = modals.value.filter((x) => x.name !== name)
|
|
} else if (modals.value.length > 0) {
|
|
modals.value.pop()
|
|
}
|
|
}
|
|
|
|
return {
|
|
modals,
|
|
getActiveModal,
|
|
isModal,
|
|
getModal,
|
|
openModal,
|
|
closeModal,
|
|
}
|
|
})
|