elk/composables/dialog.ts

91 lines
2.5 KiB
TypeScript
Raw Normal View History

import type { Attachment, Status, StatusEdit } from 'masto'
2022-12-13 14:03:30 +00:00
import type { Draft } from '~/types'
2022-11-24 04:21:30 +00:00
import { STORAGE_KEY_FIRST_VISIT, STORAGE_KEY_ZEN_MODE } from '~/constants'
2022-11-24 02:38:14 +00:00
2022-11-30 03:27:19 +00:00
export const mediaPreviewList = ref<Attachment[]>([])
export const mediaPreviewIndex = ref(0)
2022-11-26 05:05:44 +00:00
export const statusEdit = ref<StatusEdit>()
export const dialogDraftKey = ref<string>()
2022-11-30 03:27:19 +00:00
2022-12-09 21:18:21 +00:00
export const commandPanelInput = ref('')
export const isFirstVisit = useLocalStorage(STORAGE_KEY_FIRST_VISIT, !process.mock)
2022-11-24 06:04:17 +00:00
export const isZenMode = useLocalStorage(STORAGE_KEY_ZEN_MODE, false)
2022-11-24 02:38:14 +00:00
2022-11-23 03:48:01 +00:00
export const isSigninDialogOpen = ref(false)
2022-11-24 08:04:53 +00:00
export const isPublishDialogOpen = ref(false)
2022-11-30 03:27:19 +00:00
export const isMediaPreviewOpen = ref(false)
2022-11-26 05:05:44 +00:00
export const isEditHistoryDialogOpen = ref(false)
2022-11-24 02:38:14 +00:00
export const isPreviewHelpOpen = ref(isFirstVisit.value)
2022-12-09 21:18:21 +00:00
export const isCommandPanelOpen = ref(false)
2022-11-23 03:48:01 +00:00
export const lastPublishDialogStatus = ref<Status | null>(null)
2022-11-30 03:27:19 +00:00
export const toggleZenMode = useToggle(isZenMode)
2022-11-23 03:48:01 +00:00
export function openSigninDialog() {
isSigninDialogOpen.value = true
}
2022-11-24 02:38:14 +00:00
export async function openPublishDialog(draftKey = 'dialog', draft?: Draft, overwrite = false): Promise<void> {
dialogDraftKey.value = draftKey
2022-11-28 17:46:00 +00:00
if (draft) {
if (overwrite && !isEmptyDraft(currentUserDrafts.value[draftKey])) {
// TODO overwrite warning
// TODO don't overwrite, have a draft list
if (process.dev) {
// eslint-disable-next-line no-alert
const result = confirm('[DEV] Are you sure you overwrite draft content?')
if (!result)
return
}
}
if (overwrite || !currentUserDrafts.value[draftKey])
currentUserDrafts.value[draftKey] = draft
}
2022-11-24 08:04:53 +00:00
isPublishDialogOpen.value = true
await until(isPublishDialogOpen).toBe(false)
2022-11-24 08:04:53 +00:00
}
2022-11-24 02:38:14 +00:00
if (isPreviewHelpOpen.value) {
watch(isPreviewHelpOpen, () => {
isFirstVisit.value = false
})
}
2022-11-30 03:27:19 +00:00
export function openMediaPreview(attachments: Attachment[], index = 0) {
mediaPreviewList.value = attachments
mediaPreviewIndex.value = index
isMediaPreviewOpen.value = true
}
export function closeMediaPreview() {
isMediaPreviewOpen.value = false
}
2022-11-26 05:05:44 +00:00
export function openEditHistoryDialog(edit: StatusEdit) {
statusEdit.value = edit
isEditHistoryDialogOpen.value = true
}
export function openPreviewHelp() {
isPreviewHelpOpen.value = true
}
2022-11-27 03:13:39 +00:00
export function closePreviewHelp() {
isPreviewHelpOpen.value = false
}
2022-12-09 21:18:21 +00:00
export function openCommandPanel(isCommandMode = false) {
commandPanelInput.value = isCommandMode ? '>' : ''
isCommandPanelOpen.value = true
}
export function closeCommandPanel() {
isCommandPanelOpen.value = false
}