fix types

This commit is contained in:
kakkokari-gtyih 2025-11-21 18:54:42 +09:00
parent 0240e0895e
commit b1ee7149ba
14 changed files with 70 additions and 83 deletions

View File

@ -38,11 +38,7 @@ export interface BroadcastTypes {
emojis: Packed<'EmojiDetailed'>[];
};
emojiDeleted: {
emojis: {
id?: string;
name: string;
[other: string]: any;
}[];
emojis: Packed<'EmojiDetailed'>[];
};
announcementCreated: {
announcement: Packed<'Announcement'>;

View File

@ -41,7 +41,7 @@ export class EmojiEntityService {
@bindThis
public packSimpleMany(
emojis: any[],
emojis: (MiEmoji['id'] | MiEmoji)[],
) {
return Promise.all(emojis.map(x => this.packSimple(x)));
}
@ -69,7 +69,7 @@ export class EmojiEntityService {
@bindThis
public packDetailedMany(
emojis: any[],
emojis: (MiEmoji['id'] | MiEmoji)[],
): Promise<Packed<'EmojiDetailed'>[]> {
return Promise.all(emojis.map(x => this.packDetailed(x)));
}

View File

@ -24,39 +24,7 @@ export const meta = {
optional: false, nullable: false,
items: {
type: 'object',
optional: false, nullable: false,
properties: {
id: {
type: 'string',
optional: false, nullable: false,
format: 'id',
},
aliases: {
type: 'array',
optional: false, nullable: false,
items: {
type: 'string',
optional: false, nullable: false,
},
},
name: {
type: 'string',
optional: false, nullable: false,
},
category: {
type: 'string',
optional: false, nullable: true,
},
host: {
type: 'string',
optional: false, nullable: true,
description: 'The local host is represented with `null`. The field exists for compatibility with other API endpoints that return files.',
},
url: {
type: 'string',
optional: false, nullable: false,
},
},
ref: 'EmojiDetailed',
},
},
} as const;

View File

@ -231,17 +231,17 @@ function rename() {
}
function move() {
selectDriveFolder(null).then(folder => {
if (folder[0] && folder[0].id === props.folder.id) return;
selectDriveFolder(null).then(({ canceled, folders }) => {
if (canceled || (folders[0] && folders[0].id === props.folder.id)) return;
misskeyApi('drive/folders/update', {
folderId: props.folder.id,
parentId: folder[0] ? folder[0].id : null,
parentId: folders[0] ? folders[0].id : null,
}).then(() => {
globalEvents.emit('driveFoldersUpdated', [{
...props.folder,
parentId: folder[0] ? folder[0].id : null,
parent: folder[0] ?? null,
parentId: folders[0] ? folders[0].id : null,
parent: folders[0] ?? null,
}]);
});
});

View File

@ -533,17 +533,19 @@ function cd(target?: Misskey.entities.DriveFolder | Misskey.entities.DriveFolder
async function moveFilesBulk() {
if (selectedFiles.value.length === 0) return;
const toFolder = await selectDriveFolder(folder.value ? folder.value.id : null);
const { canceled, folders } = await selectDriveFolder(folder.value ? folder.value.id : null);
if (canceled) return;
await os.apiWithDialog('drive/files/move-bulk', {
fileIds: selectedFiles.value.map(f => f.id),
folderId: toFolder[0] ? toFolder[0].id : null,
folderId: folders[0] ? folders[0].id : null,
});
globalEvents.emit('driveFilesUpdated', selectedFiles.value.map(x => ({
...x,
folderId: toFolder[0] ? toFolder[0].id : null,
folder: toFolder[0] ?? null,
folderId: folders[0] ? folders[0].id : null,
folder: folders[0] ?? null,
})));
}

View File

@ -42,7 +42,7 @@ import { i18n } from '@/i18n.js';
type TypesMap = Record<typeof notificationTypes[number], Ref<boolean>>;
const emit = defineEmits<{
(ev: 'done', v: { excludeTypes: string[] }): void,
(ev: 'done', v: { excludeTypes: typeof notificationTypes[number][] }): void,
(ev: 'closed'): void,
}>();

View File

@ -71,7 +71,8 @@ SPDX-License-Identifier: AGPL-3.0-only
</template>
<script lang="ts" setup>
import { computed, defineAsyncComponent, markRaw, ref } from 'vue';
import * as Misskey from 'misskey-js';
import { computed, markRaw, ref } from 'vue';
import MkButton from '@/components/MkButton.vue';
import MkInput from '@/components/MkInput.vue';
import MkPagination from '@/components/MkPagination.vue';
@ -116,7 +117,7 @@ const selectAll = () => {
}
};
const toggleSelect = (emoji) => {
const toggleSelect = (emoji: Misskey.entities.EmojiDetailed) => {
if (selectedEmojis.value.includes(emoji.id)) {
selectedEmojis.value = selectedEmojis.value.filter(x => x !== emoji.id);
} else {
@ -124,19 +125,23 @@ const toggleSelect = (emoji) => {
}
};
const add = async (ev: MouseEvent) => {
const add = async () => {
const { dispose } = await os.popupAsyncWithDialog(import('./emoji-edit-dialog.vue').then(x => x.default), {
}, {
done: result => {
if (result.created) {
paginator.prepend(result.created);
const nowIso = (new Date()).toISOString();
paginator.prepend({
...result.created,
createdAt: nowIso,
});
}
},
closed: () => dispose(),
});
};
const edit = async (emoji) => {
const edit = async (emoji: Misskey.entities.EmojiDetailed) => {
const { dispose } = await os.popupAsyncWithDialog(import('./emoji-edit-dialog.vue').then(x => x.default), {
emoji: emoji,
}, {

View File

@ -131,10 +131,11 @@ function move() {
const f = file.value;
selectDriveFolder(null).then(folder => {
selectDriveFolder(null).then(({ canceled, folders }) => {
if (canceled) return;
misskeyApi('drive/files/update', {
fileId: f.id,
folderId: folder[0] ? folder[0].id : null,
folderId: folders[0] ? folders[0].id : null,
}).then(async () => {
await _fetch_();
});

View File

@ -66,7 +66,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<MkInfo warn>{{ i18n.ts.rolesThatCanBeUsedThisEmojiAsReactionPublicRoleWarn }}</MkInfo>
</div>
</MkFolder>
<MkSwitch v-model="isSensitive">isSensitive</MkSwitch>
<MkSwitch v-model="isSensitive">{{ i18n.ts.sensitive }}</MkSwitch>
<MkSwitch v-model="localOnly">{{ i18n.ts.localOnly }}</MkSwitch>
<MkButton v-if="emoji" danger @click="del()"><i class="ti ti-trash"></i> {{ i18n.ts.delete }}</MkButton>
</div>
@ -99,7 +99,7 @@ const props = defineProps<{
}>();
const emit = defineEmits<{
(ev: 'done', v: { deleted?: boolean; updated?: Misskey.entities.AdminEmojiUpdateRequest; created?: Misskey.entities.AdminEmojiUpdateRequest }): void,
(ev: 'done', v: { deleted?: boolean; updated?: Misskey.entities.EmojiDetailed; created?: Misskey.entities.EmojiDetailed }): void,
(ev: 'closed'): void
}>();
@ -157,19 +157,29 @@ async function done() {
localOnly: localOnly.value,
roleIdsThatCanBeUsedThisEmojiAsReaction: rolesThatCanBeUsedThisEmojiAsReaction.value.map(x => x.id),
fileId: file.value ? file.value.id : undefined,
};
} satisfies Misskey.entities.AdminEmojiUpdateRequest;
if (props.emoji) {
const emojiDetailed = {
id: props.emoji.id,
aliases: params.aliases,
name: params.name,
category: params.category,
host: props.emoji.host,
url: file.value ? file.value.url : props.emoji.url,
license: params.license,
isSensitive: params.isSensitive,
localOnly: params.localOnly,
roleIdsThatCanBeUsedThisEmojiAsReaction: params.roleIdsThatCanBeUsedThisEmojiAsReaction,
} satisfies Misskey.entities.EmojiDetailed;
await os.apiWithDialog('admin/emoji/update', {
id: props.emoji.id,
...params,
});
emit('done', {
updated: {
id: props.emoji.id,
...params,
},
updated: emojiDetailed,
});
windowEl.value?.close();

View File

@ -296,8 +296,9 @@ if (prefer.s.uploadFolder) {
}
function chooseUploadFolder() {
selectDriveFolder(null).then(async folder => {
prefer.commit('uploadFolder', folder[0] ? folder[0].id : null);
selectDriveFolder(null).then(async ({ canceled, folders }) => {
if (canceled) return;
prefer.commit('uploadFolder', folders[0] ? folders[0].id : null);
os.success();
if (prefer.s.uploadFolder) {
uploadFolder.value = await misskeyApi('drive/folders/show', {

View File

@ -300,13 +300,25 @@ export async function createCroppedImageDriveFileFromImageDriveFile(imageDriveFi
});
}
export async function selectDriveFolder(initialFolder: Misskey.entities.DriveFolder['id'] | null): Promise<(Misskey.entities.DriveFolder | null)[]> {
export async function selectDriveFolder(initialFolder: Misskey.entities.DriveFolder['id'] | null): Promise<{
canceled: false;
folders: (Misskey.entities.DriveFolder | null)[];
} | {
canceled: true;
folders: undefined;
}> {
return new Promise(async resolve => {
const { dispose } = await os.popupAsyncWithDialog(import('@/components/MkDriveFolderSelectDialog.vue').then(x => x.default), {
initialFolder,
}, {
done: folders => {
resolve(folders);
resolve(folders == null ? {
canceled: true,
folders: undefined,
} : {
canceled: false,
folders,
});
},
closed: () => dispose(),
});

View File

@ -44,10 +44,11 @@ async function describe(file: Misskey.entities.DriveFile) {
}
function move(file: Misskey.entities.DriveFile) {
selectDriveFolder(null).then(folder => {
selectDriveFolder(null).then(({ canceled, folders }) => {
if (canceled) return;
misskeyApi('drive/files/update', {
fileId: file.id,
folderId: folder[0] ? folder[0].id : null,
folderId: folders[0] ? folders[0].id : null,
});
});
}

View File

@ -95,11 +95,11 @@ const fetch = () => {
};
const choose = () => {
selectDriveFolder(null).then(folder => {
if (folder[0] == null) {
selectDriveFolder(null).then(({ folders, canceled }) => {
if (canceled || folders[0] == null) {
return;
}
widgetProps.folderId = folder[0].id;
widgetProps.folderId = folders[0].id;
save();
fetch();
});

View File

@ -8217,16 +8217,7 @@ export interface operations {
[name: string]: unknown;
};
content: {
'application/json': {
/** Format: id */
id: string;
aliases: string[];
name: string;
category: string | null;
/** @description The local host is represented with `null`. The field exists for compatibility with other API endpoints that return files. */
host: string | null;
url: string;
}[];
'application/json': components['schemas']['EmojiDetailed'][];
};
};
/** @description Client error */