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<{
(ev: 'done', r?: Misskey.entities.DriveFile[]): void;
(ev: 'done', r?: Misskey.entities.DriveFile[] | Misskey.entities.DriveFolder[]): void;
(ev: 'closed'): void;
}>();
const dialog = shallowRef<InstanceType<typeof MkModalWindow>>();
const selected = ref<Misskey.entities.DriveFile[]>([]);
const selected = ref<Misskey.entities.DriveFile[] | Misskey.entities.DriveFolder[]>([]);
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;
}
</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];
};
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);
const id = ++popupIdCount;
@ -246,7 +251,9 @@ export function actions<T extends {
title?: string;
text?: string;
actions: T;
}): Promise<{ canceled: true; result: undefined; } | {
}): Promise<{
canceled: true; result: undefined;
} | {
canceled: false; result: T[number]['value'];
}> {
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<C = any>(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<void> {
});
}
export function form(title: string, form: any) {
export function form(title: string, form: any): Promise<unknown> {
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<Misskey.entiti
});
}
export async function selectDriveFolder(multiple: boolean) {
export async function selectDriveFolder(multiple: boolean): Promise<Misskey.entities.DriveFolder[]> {
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<unknown> {
return new Promise(resolve => {
popup(MkEmojiPickerDialog, {
src,

View File

@ -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', {

View File

@ -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();
});