127 lines
3.4 KiB
TypeScript
127 lines
3.4 KiB
TypeScript
import { defineStore, skipHydrate } from 'pinia'
|
|
import type {
|
|
DialogParams,
|
|
YoutubeParams,
|
|
} from '#layers/types/components/modal'
|
|
|
|
const createModalState = () => ({
|
|
storeIsOpen: ref(false),
|
|
storeIsShowDimmed: ref(false),
|
|
storeModalName: ref(''),
|
|
storeIsOutsideClose: ref(false),
|
|
storeContentText: ref(''),
|
|
storeConfirmButtonText: ref(''),
|
|
storeConfirmButtonEvent: skipHydrate(ref<() => void>(undefined)),
|
|
})
|
|
|
|
export const useModalStore = defineStore('modalStore', () => {
|
|
const scrollStore = useScrollStore()
|
|
|
|
// alert ------------------
|
|
const alert = {
|
|
...createModalState(),
|
|
}
|
|
|
|
const handleOpenAlert = ({
|
|
isShowDimmed = true,
|
|
modalName = '',
|
|
isOutsideClose = false,
|
|
contentText,
|
|
confirmButtonText = '',
|
|
confirmButtonEvent = undefined,
|
|
}: DialogParams) => {
|
|
alert.storeIsOpen.value = true
|
|
alert.storeIsShowDimmed.value = isShowDimmed
|
|
alert.storeModalName.value = modalName
|
|
alert.storeContentText.value = contentText
|
|
alert.storeConfirmButtonText.value = confirmButtonText
|
|
alert.storeIsOutsideClose.value = isOutsideClose
|
|
alert.storeConfirmButtonEvent.value = confirmButtonEvent
|
|
}
|
|
|
|
// confirm ------------------
|
|
const confirm = {
|
|
...createModalState(),
|
|
storeCancelButtonText: ref(''),
|
|
storeCancelButtonEvent: skipHydrate(ref<() => void>(undefined)),
|
|
}
|
|
|
|
const handleOpenConfirm = ({
|
|
isShowDimmed = true,
|
|
modalName = '',
|
|
isOutsideClose = false,
|
|
contentText,
|
|
confirmButtonText = '',
|
|
cancelButtonText = '',
|
|
confirmButtonEvent = undefined,
|
|
cancelButtonEvent = undefined,
|
|
}: DialogParams) => {
|
|
confirm.storeIsOpen.value = true
|
|
confirm.storeIsShowDimmed.value = isShowDimmed
|
|
confirm.storeModalName.value = modalName
|
|
confirm.storeContentText.value = contentText
|
|
confirm.storeConfirmButtonText.value = confirmButtonText
|
|
confirm.storeCancelButtonText.value = cancelButtonText
|
|
confirm.storeIsOutsideClose.value = isOutsideClose
|
|
confirm.storeConfirmButtonEvent.value = confirmButtonEvent
|
|
confirm.storeCancelButtonEvent.value = cancelButtonEvent
|
|
}
|
|
|
|
// youtube ------------------
|
|
const youtube = {
|
|
storeIsOpen: ref(false),
|
|
storeYoutubeUrl: ref(''),
|
|
storeIsOutsideClose: ref(false),
|
|
storeModalName: ref(''),
|
|
}
|
|
|
|
const handleOpenYoutube = ({
|
|
youtubeUrl,
|
|
isOutsideClose = false,
|
|
modalName = '',
|
|
}: YoutubeParams) => {
|
|
youtube.storeIsOpen.value = true
|
|
youtube.storeYoutubeUrl.value = youtubeUrl
|
|
youtube.storeIsOutsideClose.value = isOutsideClose
|
|
youtube.storeModalName.value = modalName
|
|
scrollStore.controlScrollLock(true)
|
|
}
|
|
|
|
const handleResetYoutube = () => {
|
|
youtube.storeIsOpen.value = false
|
|
youtube.storeYoutubeUrl.value = ''
|
|
youtube.storeIsOutsideClose.value = false
|
|
youtube.storeModalName.value = ''
|
|
scrollStore.controlScrollLock(false)
|
|
}
|
|
|
|
// toast ------------------
|
|
const toast = {
|
|
storeIsOpen: ref(false),
|
|
storeContentText: ref(''),
|
|
}
|
|
|
|
const handleOpenToast = (contentText: string) => {
|
|
toast.storeIsOpen.value = true
|
|
toast.storeContentText.value = contentText
|
|
}
|
|
|
|
const handleCloseToast = () => {
|
|
toast.storeIsOpen.value = false
|
|
toast.storeContentText.value = ''
|
|
}
|
|
|
|
return {
|
|
alert,
|
|
confirm,
|
|
youtube,
|
|
toast,
|
|
handleOpenAlert,
|
|
handleOpenConfirm,
|
|
handleOpenYoutube,
|
|
handleResetYoutube,
|
|
handleOpenToast,
|
|
handleCloseToast,
|
|
}
|
|
})
|