diff --git a/packages/frontend/src/components/MkDriveSelectDialog.vue b/packages/frontend/src/components/MkDriveSelectDialog.vue index e65f4dd403..cd756d50ff 100644 --- a/packages/frontend/src/components/MkDriveSelectDialog.vue +++ b/packages/frontend/src/components/MkDriveSelectDialog.vue @@ -39,13 +39,13 @@ withDefaults(defineProps<{ }); const emit = defineEmits<{ - (ev: 'done', r?: Misskey.entities.DriveFile[]): void; + (ev: 'done', r?: Misskey.entities.DriveFile[] | Misskey.entities.DriveFolder[]): void; (ev: 'closed'): void; }>(); const dialog = shallowRef>(); -const selected = ref([]); +const selected = ref([]); function ok() { emit('done', selected.value); @@ -57,7 +57,7 @@ function cancel() { dialog.value?.close(); } -function onChangeSelection(files: Misskey.entities.DriveFile[]) { - selected.value = files; +function onChangeSelection(v: Misskey.entities.DriveFile[] | Misskey.entities.DriveFolder[]) { + selected.value = v; } diff --git a/packages/frontend/src/os.ts b/packages/frontend/src/os.ts index f04aced4db..77d74b0bef 100644 --- a/packages/frontend/src/os.ts +++ b/packages/frontend/src/os.ts @@ -162,7 +162,12 @@ type EmitsExtractor = { [K in keyof T as K extends `onVnode${string}` ? never : K extends `on${infer E}` ? Uncapitalize : K extends string ? never : K]: T[K]; }; -export async function popup(component: T, props: ComponentProps, events: ComponentEmit = {} as ComponentEmit, disposeEvent?: keyof ComponentEmit) { +export async function popup( + component: T, + props: ComponentProps, + events: ComponentEmit = {} as ComponentEmit, + disposeEvent?: keyof ComponentEmit, +): Promise<{ dispose: () => void }> { markRaw(component); const id = ++popupIdCount; @@ -246,7 +251,9 @@ export function actions { return new Promise(resolve => { @@ -277,7 +284,9 @@ export function inputText(props: { default?: string | null; minLength?: number; maxLength?: number; -}): Promise<{ canceled: true; result: undefined; } | { +}): Promise<{ + canceled: true; result: undefined; +} | { canceled: false; result: string; }> { return new Promise(resolve => { @@ -306,7 +315,9 @@ export function inputNumber(props: { placeholder?: string | null; autocomplete?: string; default?: number | null; -}): Promise<{ canceled: true; result: undefined; } | { +}): Promise<{ + canceled: true; result: undefined; +} | { canceled: false; result: number; }> { return new Promise(resolve => { @@ -332,7 +343,9 @@ export function inputDate(props: { text?: string; placeholder?: string | null; default?: string | null; -}): Promise<{ canceled: true; result: undefined; } | { +}): Promise<{ + canceled: true; result: undefined; +} | { canceled: false; result: Date; }> { 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; }; }> { return new Promise(resolve => { @@ -372,7 +387,9 @@ export function select(props: { value: C; text: string; }[]; -}): Promise<{ canceled: true; result: undefined; } | { +}): Promise<{ + canceled: true; result: undefined; +} | { canceled: false; result: C; }> { return new Promise(resolve => { @@ -418,7 +435,7 @@ export function waiting(): Promise { }); } -export function form(title: string, form: any) { +export function form(title: string, form: any): Promise { return new Promise(resolve => { popup(defineAsyncComponent(() => import('@/components/MkFormDialog.vue')), { title, form }, { done: result => { @@ -456,7 +473,7 @@ export async function selectDriveFile(multiple: boolean): Promise { return new Promise(resolve => { popup(defineAsyncComponent(() => import('@/components/MkDriveSelectDialog.vue')), { type: 'folder', @@ -464,14 +481,14 @@ export async function selectDriveFolder(multiple: boolean) { }, { done: folders => { if (folders) { - resolve(multiple ? folders : folders[0]); + resolve(folders); } }, }, 'closed'); }); } -export async function pickEmoji(src: HTMLElement | null, opts) { +export async function pickEmoji(src: HTMLElement | null, opts): Promise { return new Promise(resolve => { popup(MkEmojiPickerDialog, { src, diff --git a/packages/frontend/src/pages/settings/drive.vue b/packages/frontend/src/pages/settings/drive.vue index c3ce89d144..1c0e182080 100644 --- a/packages/frontend/src/pages/settings/drive.vue +++ b/packages/frontend/src/pages/settings/drive.vue @@ -113,7 +113,7 @@ if (defaultStore.state.uploadFolder) { function chooseUploadFolder() { os.selectDriveFolder(false).then(async folder => { - defaultStore.set('uploadFolder', folder ? folder.id : null); + defaultStore.set('uploadFolder', folder[0] ? folder[0].id : null); os.success(); if (defaultStore.state.uploadFolder) { uploadFolder.value = await misskeyApi('drive/folders/show', { diff --git a/packages/frontend/src/widgets/WidgetSlideshow.vue b/packages/frontend/src/widgets/WidgetSlideshow.vue index f2fc24ddf7..a98f6fb8a1 100644 --- a/packages/frontend/src/widgets/WidgetSlideshow.vue +++ b/packages/frontend/src/widgets/WidgetSlideshow.vue @@ -93,10 +93,10 @@ const fetch = () => { const choose = () => { os.selectDriveFolder(false).then(folder => { - if (folder == null) { + if (folder[0] == null) { return; } - widgetProps.folderId = folder.id; + widgetProps.folderId = folder[0].id; save(); fetch(); });