2023-01-08 09:21:09 +03:00
|
|
|
import type { mastodon } from 'masto'
|
2023-01-07 11:55:01 +03:00
|
|
|
import type { ConfirmDialogChoice, ConfirmDialogLabel, Draft } from '~/types'
|
2023-01-06 20:39:37 +03:00
|
|
|
import { STORAGE_KEY_FIRST_VISIT } from '~/constants'
|
2022-11-24 05:38:14 +03:00
|
|
|
|
2023-01-07 11:55:01 +03:00
|
|
|
export const confirmDialogChoice = ref<ConfirmDialogChoice>()
|
|
|
|
export const confirmDialogLabel = ref<ConfirmDialogLabel>()
|
|
|
|
|
2023-01-08 09:21:09 +03:00
|
|
|
export const mediaPreviewList = ref<mastodon.v1.MediaAttachment[]>([])
|
2022-11-30 06:27:19 +03:00
|
|
|
export const mediaPreviewIndex = ref(0)
|
|
|
|
|
2023-01-08 09:21:09 +03:00
|
|
|
export const statusEdit = ref<mastodon.v1.StatusEdit>()
|
2022-11-28 10:55:57 +03:00
|
|
|
export const dialogDraftKey = ref<string>()
|
2022-11-30 06:27:19 +03:00
|
|
|
|
2022-12-10 00:18:21 +03:00
|
|
|
export const commandPanelInput = ref('')
|
|
|
|
|
2022-11-29 09:39:49 +03:00
|
|
|
export const isFirstVisit = useLocalStorage(STORAGE_KEY_FIRST_VISIT, !process.mock)
|
2022-11-24 05:38:14 +03:00
|
|
|
|
2022-11-23 06:48:01 +03:00
|
|
|
export const isSigninDialogOpen = ref(false)
|
2022-11-24 11:04:53 +03:00
|
|
|
export const isPublishDialogOpen = ref(false)
|
2022-11-30 06:27:19 +03:00
|
|
|
export const isMediaPreviewOpen = ref(false)
|
2022-11-26 08:05:44 +03:00
|
|
|
export const isEditHistoryDialogOpen = ref(false)
|
2022-11-24 05:38:14 +03:00
|
|
|
export const isPreviewHelpOpen = ref(isFirstVisit.value)
|
2022-12-10 00:18:21 +03:00
|
|
|
export const isCommandPanelOpen = ref(false)
|
2023-01-07 11:55:01 +03:00
|
|
|
export const isConfirmDialogOpen = ref(false)
|
2023-01-08 23:08:45 +03:00
|
|
|
export const isFavouritedBoostedByDialogOpen = ref(false)
|
2022-11-23 06:48:01 +03:00
|
|
|
|
2023-01-08 09:21:09 +03:00
|
|
|
export const lastPublishDialogStatus = ref<mastodon.v1.Status | null>(null)
|
2023-01-01 18:57:49 +03:00
|
|
|
|
2023-01-08 23:08:45 +03:00
|
|
|
export const favouritedBoostedByStatusId = ref<string | null>(null)
|
|
|
|
|
2022-11-23 06:48:01 +03:00
|
|
|
export function openSigninDialog() {
|
|
|
|
isSigninDialogOpen.value = true
|
|
|
|
}
|
2022-11-24 05:38:14 +03:00
|
|
|
|
2023-01-07 11:55:01 +03:00
|
|
|
export async function openConfirmDialog(label: ConfirmDialogLabel | string): Promise<ConfirmDialogChoice> {
|
|
|
|
confirmDialogLabel.value = typeof label === 'string' ? { title: label } : label
|
|
|
|
confirmDialogChoice.value = undefined
|
|
|
|
isConfirmDialogOpen.value = true
|
|
|
|
|
|
|
|
await until(isConfirmDialogOpen).toBe(false)
|
|
|
|
|
|
|
|
return confirmDialogChoice.value!
|
|
|
|
}
|
|
|
|
|
2023-01-01 18:57:49 +03:00
|
|
|
export async function openPublishDialog(draftKey = 'dialog', draft?: Draft, overwrite = false): Promise<void> {
|
2022-11-28 10:55:57 +03:00
|
|
|
dialogDraftKey.value = draftKey
|
2022-11-28 20:46:00 +03: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-28 13:23:33 +03:00
|
|
|
}
|
2022-11-24 11:04:53 +03:00
|
|
|
isPublishDialogOpen.value = true
|
2023-01-01 18:57:49 +03:00
|
|
|
|
|
|
|
await until(isPublishDialogOpen).toBe(false)
|
2022-11-24 11:04:53 +03:00
|
|
|
}
|
|
|
|
|
2023-01-08 23:08:45 +03:00
|
|
|
export async function openFavoridedBoostedByDialog(statusId: string) {
|
|
|
|
isFavouritedBoostedByDialogOpen.value = true
|
|
|
|
favouritedBoostedByStatusId.value = statusId
|
|
|
|
}
|
|
|
|
|
2022-11-24 05:38:14 +03:00
|
|
|
if (isPreviewHelpOpen.value) {
|
|
|
|
watch(isPreviewHelpOpen, () => {
|
|
|
|
isFirstVisit.value = false
|
|
|
|
})
|
|
|
|
}
|
2022-11-25 21:13:44 +03:00
|
|
|
|
2023-01-05 19:51:50 +03:00
|
|
|
function restoreMediaPreviewFromState() {
|
|
|
|
mediaPreviewList.value = JSON.parse(history.state?.mediaPreviewList ?? '[]')
|
|
|
|
mediaPreviewIndex.value = history.state?.mediaPreviewIndex ?? 0
|
|
|
|
isMediaPreviewOpen.value = history.state?.mediaPreview ?? false
|
|
|
|
}
|
|
|
|
|
|
|
|
if (process.client) {
|
|
|
|
window.addEventListener('popstate', restoreMediaPreviewFromState)
|
|
|
|
|
|
|
|
restoreMediaPreviewFromState()
|
|
|
|
}
|
|
|
|
|
2023-01-08 09:21:09 +03:00
|
|
|
export function openMediaPreview(attachments: mastodon.v1.MediaAttachment[], index = 0) {
|
2022-11-30 06:27:19 +03:00
|
|
|
mediaPreviewList.value = attachments
|
|
|
|
mediaPreviewIndex.value = index
|
|
|
|
isMediaPreviewOpen.value = true
|
2023-01-05 19:51:50 +03:00
|
|
|
|
|
|
|
history.pushState({
|
|
|
|
...history.state,
|
|
|
|
mediaPreview: true,
|
|
|
|
mediaPreviewList: JSON.stringify(attachments),
|
|
|
|
mediaPreviewIndex: index,
|
|
|
|
}, '')
|
2022-11-30 06:27:19 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
export function closeMediaPreview() {
|
2023-01-05 19:51:50 +03:00
|
|
|
history.back()
|
2022-11-25 21:13:44 +03:00
|
|
|
}
|
|
|
|
|
2023-01-08 09:21:09 +03:00
|
|
|
export function openEditHistoryDialog(edit: mastodon.v1.StatusEdit) {
|
2022-11-26 08:05:44 +03:00
|
|
|
statusEdit.value = edit
|
|
|
|
isEditHistoryDialogOpen.value = true
|
|
|
|
}
|
|
|
|
|
2022-11-25 21:13:44 +03:00
|
|
|
export function openPreviewHelp() {
|
|
|
|
isPreviewHelpOpen.value = true
|
|
|
|
}
|
2022-11-27 06:13:39 +03:00
|
|
|
|
|
|
|
export function closePreviewHelp() {
|
|
|
|
isPreviewHelpOpen.value = false
|
|
|
|
}
|
2022-12-10 00:18:21 +03:00
|
|
|
|
|
|
|
export function openCommandPanel(isCommandMode = false) {
|
2023-01-10 10:24:14 +03:00
|
|
|
commandPanelInput.value = isCommandMode ? '> ' : ''
|
2022-12-10 00:18:21 +03:00
|
|
|
isCommandPanelOpen.value = true
|
|
|
|
}
|
|
|
|
|
|
|
|
export function closeCommandPanel() {
|
|
|
|
isCommandPanelOpen.value = false
|
|
|
|
}
|