refactor: 返り値の型を明記、`selectDriveFolder`は`File`のほうに合わせるよう返り値を変更

This commit is contained in:
zyoshoka 2024-02-07 00:43:15 +09:00
parent 1af3041b39
commit c8c16c5357
No known key found for this signature in database
GPG Key ID: 0C2CB8FBA309A5B8
4 changed files with 35 additions and 18 deletions

View File

@ -39,13 +39,13 @@ withDefaults(defineProps<{
}); });
const emit = defineEmits<{ const emit = defineEmits<{
(ev: 'done', r?: Misskey.entities.DriveFile[]): void; (ev: 'done', r?: Misskey.entities.DriveFile[] | Misskey.entities.DriveFolder[]): void;
(ev: 'closed'): void; (ev: 'closed'): void;
}>(); }>();
const dialog = shallowRef<InstanceType<typeof MkModalWindow>>(); const dialog = shallowRef<InstanceType<typeof MkModalWindow>>();
const selected = ref<Misskey.entities.DriveFile[]>([]); const selected = ref<Misskey.entities.DriveFile[] | Misskey.entities.DriveFolder[]>([]);
function ok() { function ok() {
emit('done', selected.value); emit('done', selected.value);
@ -57,7 +57,7 @@ function cancel() {
dialog.value?.close(); dialog.value?.close();
} }
function onChangeSelection(files: Misskey.entities.DriveFile[]) { function onChangeSelection(v: Misskey.entities.DriveFile[] | Misskey.entities.DriveFolder[]) {
selected.value = files; selected.value = v;
} }
</script> </script>

View File

@ -162,7 +162,12 @@ type EmitsExtractor<T> = {
[K in keyof T as K extends `onVnode${string}` ? never : K extends `on${infer E}` ? Uncapitalize<E> : K extends string ? never : K]: T[K]; [K in keyof T as K extends `onVnode${string}` ? never : K extends `on${infer E}` ? Uncapitalize<E> : K extends string ? never : K]: T[K];
}; };
export async function popup<T extends Component>(component: T, props: ComponentProps<T>, events: ComponentEmit<T> = {} as ComponentEmit<T>, disposeEvent?: keyof ComponentEmit<T>) { export async function popup<T extends Component>(
component: T,
props: ComponentProps<T>,
events: ComponentEmit<T> = {} as ComponentEmit<T>,
disposeEvent?: keyof ComponentEmit<T>,
): Promise<{ dispose: () => void }> {
markRaw(component); markRaw(component);
const id = ++popupIdCount; const id = ++popupIdCount;
@ -246,7 +251,9 @@ export function actions<T extends {
title?: string; title?: string;
text?: string; text?: string;
actions: T; actions: T;
}): Promise<{ canceled: true; result: undefined; } | { }): Promise<{
canceled: true; result: undefined;
} | {
canceled: false; result: T[number]['value']; canceled: false; result: T[number]['value'];
}> { }> {
return new Promise(resolve => { return new Promise(resolve => {
@ -277,7 +284,9 @@ export function inputText(props: {
default?: string | null; default?: string | null;
minLength?: number; minLength?: number;
maxLength?: number; maxLength?: number;
}): Promise<{ canceled: true; result: undefined; } | { }): Promise<{
canceled: true; result: undefined;
} | {
canceled: false; result: string; canceled: false; result: string;
}> { }> {
return new Promise(resolve => { return new Promise(resolve => {
@ -306,7 +315,9 @@ export function inputNumber(props: {
placeholder?: string | null; placeholder?: string | null;
autocomplete?: string; autocomplete?: string;
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 => { return new Promise(resolve => {
@ -332,7 +343,9 @@ export function inputDate(props: {
text?: string; text?: string;
placeholder?: string | null; placeholder?: string | null;
default?: string | null; default?: string | null;
}): Promise<{ canceled: true; result: undefined; } | { }): Promise<{
canceled: true; result: undefined;
} | {
canceled: false; result: Date; canceled: false; result: Date;
}> { }> {
return new Promise(resolve => { return new Promise(resolve => {
@ -352,7 +365,9 @@ export function inputDate(props: {
}); });
} }
export function authenticateDialog(): Promise<{ canceled: true; result: undefined; } | { export function authenticateDialog(): Promise<{
canceled: true; result: undefined;
} | {
canceled: false; result: { password: string; token: string | null; }; canceled: false; result: { password: string; token: string | null; };
}> { }> {
return new Promise(resolve => { return new Promise(resolve => {
@ -372,7 +387,9 @@ export function select<C = any>(props: {
value: C; value: C;
text: string; text: string;
}[]; }[];
}): Promise<{ canceled: true; result: undefined; } | { }): Promise<{
canceled: true; result: undefined;
} | {
canceled: false; result: C; canceled: false; result: C;
}> { }> {
return new Promise(resolve => { return new Promise(resolve => {
@ -418,7 +435,7 @@ export function waiting(): Promise<void> {
}); });
} }
export function form(title: string, form: any) { export function form(title: string, form: any): Promise<unknown> {
return new Promise(resolve => { return new Promise(resolve => {
popup(defineAsyncComponent(() => import('@/components/MkFormDialog.vue')), { title, form }, { popup(defineAsyncComponent(() => import('@/components/MkFormDialog.vue')), { title, form }, {
done: result => { done: result => {
@ -456,7 +473,7 @@ export async function selectDriveFile(multiple: boolean): Promise<Misskey.entiti
}); });
} }
export async function selectDriveFolder(multiple: boolean) { export async function selectDriveFolder(multiple: boolean): Promise<Misskey.entities.DriveFolder[]> {
return new Promise(resolve => { return new Promise(resolve => {
popup(defineAsyncComponent(() => import('@/components/MkDriveSelectDialog.vue')), { popup(defineAsyncComponent(() => import('@/components/MkDriveSelectDialog.vue')), {
type: 'folder', type: 'folder',
@ -464,14 +481,14 @@ export async function selectDriveFolder(multiple: boolean) {
}, { }, {
done: folders => { done: folders => {
if (folders) { if (folders) {
resolve(multiple ? folders : folders[0]); resolve(folders);
} }
}, },
}, 'closed'); }, 'closed');
}); });
} }
export async function pickEmoji(src: HTMLElement | null, opts) { export async function pickEmoji(src: HTMLElement | null, opts): Promise<unknown> {
return new Promise(resolve => { return new Promise(resolve => {
popup(MkEmojiPickerDialog, { popup(MkEmojiPickerDialog, {
src, src,

View File

@ -113,7 +113,7 @@ if (defaultStore.state.uploadFolder) {
function chooseUploadFolder() { function chooseUploadFolder() {
os.selectDriveFolder(false).then(async folder => { os.selectDriveFolder(false).then(async folder => {
defaultStore.set('uploadFolder', folder ? folder.id : null); defaultStore.set('uploadFolder', folder[0] ? folder[0].id : null);
os.success(); os.success();
if (defaultStore.state.uploadFolder) { if (defaultStore.state.uploadFolder) {
uploadFolder.value = await misskeyApi('drive/folders/show', { uploadFolder.value = await misskeyApi('drive/folders/show', {

View File

@ -93,10 +93,10 @@ const fetch = () => {
const choose = () => { const choose = () => {
os.selectDriveFolder(false).then(folder => { os.selectDriveFolder(false).then(folder => {
if (folder == null) { if (folder[0] == null) {
return; return;
} }
widgetProps.folderId = folder.id; widgetProps.folderId = folder[0].id;
save(); save();
fetch(); fetch();
}); });