fix types
This commit is contained in:
parent
0240e0895e
commit
b1ee7149ba
|
|
@ -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'>;
|
||||
|
|
|
|||
|
|
@ -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)));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
}]);
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
})));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
}>();
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
}, {
|
||||
|
|
|
|||
|
|
@ -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_();
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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', {
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
Loading…
Reference in New Issue