function => const

This commit is contained in:
tamaina 2023-01-10 11:58:44 +00:00
parent 722f138082
commit 34f2feb224

View File

@ -26,12 +26,12 @@ export const apiWithDialog = ((
return promise; return promise;
}) as typeof api; }) as typeof api;
export function promiseDialog<T extends Promise<any>>( export const promiseDialog = <T extends Promise<any>>(
promise: T, promise: T,
onSuccess?: ((res: any) => void) | null, onSuccess?: ((res: any) => void) | null,
onFailure?: ((err: Error) => void) | null, onFailure?: ((err: Error) => void) | null,
text?: string, text?: string,
): T { ): T => {
const showing = ref(true); const showing = ref(true);
const success = ref(false); const success = ref(false);
@ -80,12 +80,13 @@ const zIndexes = {
middle: 2000000, middle: 2000000,
high: 3000000, high: 3000000,
}; };
export function claimZIndex(priority: keyof typeof zIndexes = 'low'): number {
export const claimZIndex = (priority: keyof typeof zIndexes = 'low'): number => {
zIndexes[priority] += 100; zIndexes[priority] += 100;
return zIndexes[priority]; return zIndexes[priority];
} }
export async function popup(component: Component, props: Record<string, any>, events = {}, disposeEvent?: string) { export const popup = async (component: Component, props: Record<string, any>, events = {}, disposeEvent?: string) => {
markRaw(component); markRaw(component);
const id = ++popupIdCount; const id = ++popupIdCount;
@ -112,29 +113,29 @@ export async function popup(component: Component, props: Record<string, any>, ev
}; };
} }
export function pageWindow(path: string) { export const pageWindow = (path: string) => {
popup(defineAsyncComponent(() => import('@/components/MkPageWindow.vue')), { popup(defineAsyncComponent(() => import('@/components/MkPageWindow.vue')), {
initialPath: path, initialPath: path,
}, {}, 'closed'); }, {}, 'closed');
} }
export function modalPageWindow(path: string) { export const modalPageWindow = (path: string) => {
popup(defineAsyncComponent(() => import('@/components/MkModalPageWindow.vue')), { popup(defineAsyncComponent(() => import('@/components/MkModalPageWindow.vue')), {
initialPath: path, initialPath: path,
}, {}, 'closed'); }, {}, 'closed');
} }
export function toast(message: string) { export const toast = (message: string) => {
popup(defineAsyncComponent(() => import('@/components/MkToast.vue')), { popup(defineAsyncComponent(() => import('@/components/MkToast.vue')), {
message, message,
}, {}, 'closed'); }, {}, 'closed');
} }
export function alert(props: { export const alert = (props: {
type?: 'error' | 'info' | 'success' | 'warning' | 'waiting' | 'question'; type?: 'error' | 'info' | 'success' | 'warning' | 'waiting' | 'question';
title?: string | null; title?: string | null;
text?: string | null; text?: string | null;
}): Promise<void> { }): Promise<void> => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
popup(defineAsyncComponent(() => import('@/components/MkDialog.vue')), props, { popup(defineAsyncComponent(() => import('@/components/MkDialog.vue')), props, {
done: result => { done: result => {
@ -144,11 +145,11 @@ export function alert(props: {
}); });
} }
export function confirm(props: { export const confirm = (props: {
type: 'error' | 'info' | 'success' | 'warning' | 'waiting' | 'question'; type: 'error' | 'info' | 'success' | 'warning' | 'waiting' | 'question';
title?: string | null; title?: string | null;
text?: string | null; text?: string | null;
}): Promise<{ canceled: boolean }> { }): Promise<{ canceled: boolean }> => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
popup(defineAsyncComponent(() => import('@/components/MkDialog.vue')), { popup(defineAsyncComponent(() => import('@/components/MkDialog.vue')), {
...props, ...props,
@ -161,7 +162,7 @@ export function confirm(props: {
}); });
} }
export function inputText(props: { export const inputText = (props: {
type?: 'text' | 'email' | 'password' | 'url'; type?: 'text' | 'email' | 'password' | 'url';
title?: string | null; title?: string | null;
text?: string | null; text?: string | null;
@ -169,7 +170,7 @@ export function inputText(props: {
default?: string | null; default?: string | null;
}): Promise<{ canceled: true; result: undefined; } | { }): Promise<{ canceled: true; result: undefined; } | {
canceled: false; result: string; canceled: false; result: string;
}> { }> => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
popup(defineAsyncComponent(() => import('@/components/MkDialog.vue')), { popup(defineAsyncComponent(() => import('@/components/MkDialog.vue')), {
title: props.title, title: props.title,
@ -187,14 +188,14 @@ export function inputText(props: {
}); });
} }
export function inputNumber(props: { export const inputNumber = (props: {
title?: string | null; title?: string | null;
text?: string | null; text?: string | null;
placeholder?: string | null; placeholder?: string | null;
default?: number | null; default?: number | null;
}): Promise<{ canceled: true; result: undefined; } | { }): Promise<{ canceled: true; result: undefined; } | {
canceled: false; result: number; canceled: false; result: number;
}> { }> => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
popup(defineAsyncComponent(() => import('@/components/MkDialog.vue')), { popup(defineAsyncComponent(() => import('@/components/MkDialog.vue')), {
title: props.title, title: props.title,
@ -212,14 +213,14 @@ export function inputNumber(props: {
}); });
} }
export function inputDate(props: { export const inputDate = (props: {
title?: string | null; title?: string | null;
text?: string | null; text?: string | null;
placeholder?: string | null; placeholder?: string | null;
default?: Date | null; default?: Date | null;
}): Promise<{ canceled: true; result: undefined; } | { }): Promise<{ canceled: true; result: undefined; } | {
canceled: false; result: Date; canceled: false; result: Date;
}> { }> => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
popup(defineAsyncComponent(() => import('@/components/MkDialog.vue')), { popup(defineAsyncComponent(() => import('@/components/MkDialog.vue')), {
title: props.title, title: props.title,
@ -237,7 +238,7 @@ export function inputDate(props: {
}); });
} }
export function select<C = any>(props: { export const select = <C = any>(props: {
title?: string | null; title?: string | null;
text?: string | null; text?: string | null;
default?: string | null; default?: string | null;
@ -256,7 +257,7 @@ export function select<C = any>(props: {
}[]; }[];
})): Promise<{ canceled: true; result: undefined; } | { })): Promise<{ canceled: true; result: undefined; } | {
canceled: false; result: C; canceled: false; result: C;
}> { }> => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
popup(defineAsyncComponent(() => import('@/components/MkDialog.vue')), { popup(defineAsyncComponent(() => import('@/components/MkDialog.vue')), {
title: props.title, title: props.title,
@ -274,7 +275,7 @@ export function select<C = any>(props: {
}); });
} }
export function success() { export const success = () => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const showing = ref(true); const showing = ref(true);
window.setTimeout(() => { window.setTimeout(() => {
@ -289,7 +290,7 @@ export function success() {
}); });
} }
export function waiting() { export const waiting = () => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const showing = ref(true); const showing = ref(true);
popup(defineAsyncComponent(() => import('@/components/MkWaitingDialog.vue')), { popup(defineAsyncComponent(() => import('@/components/MkWaitingDialog.vue')), {
@ -301,7 +302,7 @@ export function waiting() {
}); });
} }
export function form(title, form) { export const form = (title, form) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
popup(defineAsyncComponent(() => import('@/components/MkFormDialog.vue')), { title, form }, { popup(defineAsyncComponent(() => import('@/components/MkFormDialog.vue')), { title, form }, {
done: result => { done: result => {
@ -311,7 +312,7 @@ export function form(title, form) {
}); });
} }
export async function selectUser() { export const selectUser = () => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
popup(defineAsyncComponent(() => import('@/components/MkUserSelectDialog.vue')), {}, { popup(defineAsyncComponent(() => import('@/components/MkUserSelectDialog.vue')), {}, {
ok: user => { ok: user => {
@ -321,7 +322,7 @@ export async function selectUser() {
}); });
} }
export async function selectDriveFile(multiple: boolean) { export const selectDriveFile = (multiple: boolean) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
popup(defineAsyncComponent(() => import('@/components/MkDriveSelectDialog.vue')), { popup(defineAsyncComponent(() => import('@/components/MkDriveSelectDialog.vue')), {
type: 'file', type: 'file',
@ -336,7 +337,7 @@ export async function selectDriveFile(multiple: boolean) {
}); });
} }
export async function selectDriveFolder(multiple: boolean) { export const selectDriveFolder = (multiple: boolean) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
popup(defineAsyncComponent(() => import('@/components/MkDriveSelectDialog.vue')), { popup(defineAsyncComponent(() => import('@/components/MkDriveSelectDialog.vue')), {
type: 'folder', type: 'folder',
@ -351,7 +352,7 @@ export async function selectDriveFolder(multiple: boolean) {
}); });
} }
export async function pickEmoji(src: HTMLElement | null, opts) { export const pickEmoji = (src: HTMLElement | null, opts) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
popup(defineAsyncComponent(() => import('@/components/MkEmojiPickerDialog.vue')), { popup(defineAsyncComponent(() => import('@/components/MkEmojiPickerDialog.vue')), {
src, src,
@ -364,9 +365,9 @@ export async function pickEmoji(src: HTMLElement | null, opts) {
}); });
} }
export async function cropImage(image: Misskey.entities.DriveFile, options: { export const cropImage = (image: Misskey.entities.DriveFile, options: {
aspectRatio: number; aspectRatio: number;
}): Promise<Misskey.entities.DriveFile> { }): Promise<Misskey.entities.DriveFile> => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
popup(defineAsyncComponent(() => import('@/components/MkCropperDialog.vue')), { popup(defineAsyncComponent(() => import('@/components/MkCropperDialog.vue')), {
file: image, file: image,
@ -385,7 +386,7 @@ type AwaitType<T> =
T; T;
let openingEmojiPicker: AwaitType<ReturnType<typeof popup>> | null = null; let openingEmojiPicker: AwaitType<ReturnType<typeof popup>> | null = null;
let activeTextarea: HTMLTextAreaElement | HTMLInputElement | null = null; let activeTextarea: HTMLTextAreaElement | HTMLInputElement | null = null;
export async function openEmojiPicker(src?: HTMLElement, opts, initialTextarea: typeof activeTextarea) { export const openEmojiPicker = async (src?: HTMLElement, opts, initialTextarea: typeof activeTextarea) => {
if (openingEmojiPicker) return; if (openingEmojiPicker) return;
activeTextarea = initialTextarea; activeTextarea = initialTextarea;
@ -433,12 +434,12 @@ export async function openEmojiPicker(src?: HTMLElement, opts, initialTextarea:
}); });
} }
export function popupMenu(items: MenuItem[] | Ref<MenuItem[]>, src?: HTMLElement, options?: { export const popupMenu = (items: MenuItem[] | Ref<MenuItem[]>, src?: HTMLElement, options?: {
align?: string; align?: string;
width?: number; width?: number;
viaKeyboard?: boolean; viaKeyboard?: boolean;
onClosing?: () => void; onClosing?: () => void;
}) { }) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let dispose; let dispose;
popup(defineAsyncComponent(() => import('@/components/MkPopupMenu.vue')), { popup(defineAsyncComponent(() => import('@/components/MkPopupMenu.vue')), {
@ -461,7 +462,7 @@ export function popupMenu(items: MenuItem[] | Ref<MenuItem[]>, src?: HTMLElement
}); });
} }
export function contextMenu(items: MenuItem[] | Ref<MenuItem[]>, ev: MouseEvent) { export const contextMenu = (items: MenuItem[] | Ref<MenuItem[]>, ev: MouseEvent) => {
ev.preventDefault(); ev.preventDefault();
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let dispose; let dispose;
@ -479,7 +480,7 @@ export function contextMenu(items: MenuItem[] | Ref<MenuItem[]>, ev: MouseEvent)
}); });
} }
export function post(props: Record<string, any> = {}) { export const post = (props: Record<string, any> = {}) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
// NOTE: MkPostFormDialogをdynamic importするとiOSでテキストエリアに自動フォーカスできない // NOTE: MkPostFormDialogをdynamic importするとiOSでテキストエリアに自動フォーカスできない
// NOTE: ただ、dynamic importしない場合、MkPostFormDialogインスタンスが使いまわされ、 // NOTE: ただ、dynamic importしない場合、MkPostFormDialogインスタンスが使いまわされ、
@ -501,7 +502,7 @@ export function post(props: Record<string, any> = {}) {
export const deckGlobalEvents = new EventEmitter(); export const deckGlobalEvents = new EventEmitter();
/* /*
export function checkExistence(fileData: ArrayBuffer): Promise<any> { export const checkExistence = (fileData: ArrayBuffer): Promise<any> => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const data = new FormData(); const data = new FormData();
data.append('md5', getMD5(fileData)); data.append('md5', getMD5(fileData));