Files
web-temp/layers/stores/useModalStore.ts
2025-11-06 15:31:42 +09:00

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,
}
})