fix types
This commit is contained in:
parent
0240e0895e
commit
b1ee7149ba
|
|
@ -38,11 +38,7 @@ export interface BroadcastTypes {
|
||||||
emojis: Packed<'EmojiDetailed'>[];
|
emojis: Packed<'EmojiDetailed'>[];
|
||||||
};
|
};
|
||||||
emojiDeleted: {
|
emojiDeleted: {
|
||||||
emojis: {
|
emojis: Packed<'EmojiDetailed'>[];
|
||||||
id?: string;
|
|
||||||
name: string;
|
|
||||||
[other: string]: any;
|
|
||||||
}[];
|
|
||||||
};
|
};
|
||||||
announcementCreated: {
|
announcementCreated: {
|
||||||
announcement: Packed<'Announcement'>;
|
announcement: Packed<'Announcement'>;
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ export class EmojiEntityService {
|
||||||
|
|
||||||
@bindThis
|
@bindThis
|
||||||
public packSimpleMany(
|
public packSimpleMany(
|
||||||
emojis: any[],
|
emojis: (MiEmoji['id'] | MiEmoji)[],
|
||||||
) {
|
) {
|
||||||
return Promise.all(emojis.map(x => this.packSimple(x)));
|
return Promise.all(emojis.map(x => this.packSimple(x)));
|
||||||
}
|
}
|
||||||
|
|
@ -69,7 +69,7 @@ export class EmojiEntityService {
|
||||||
|
|
||||||
@bindThis
|
@bindThis
|
||||||
public packDetailedMany(
|
public packDetailedMany(
|
||||||
emojis: any[],
|
emojis: (MiEmoji['id'] | MiEmoji)[],
|
||||||
): Promise<Packed<'EmojiDetailed'>[]> {
|
): Promise<Packed<'EmojiDetailed'>[]> {
|
||||||
return Promise.all(emojis.map(x => this.packDetailed(x)));
|
return Promise.all(emojis.map(x => this.packDetailed(x)));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,39 +24,7 @@ export const meta = {
|
||||||
optional: false, nullable: false,
|
optional: false, nullable: false,
|
||||||
items: {
|
items: {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
optional: false, nullable: false,
|
ref: 'EmojiDetailed',
|
||||||
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,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
} as const;
|
} as const;
|
||||||
|
|
|
||||||
|
|
@ -231,17 +231,17 @@ function rename() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function move() {
|
function move() {
|
||||||
selectDriveFolder(null).then(folder => {
|
selectDriveFolder(null).then(({ canceled, folders }) => {
|
||||||
if (folder[0] && folder[0].id === props.folder.id) return;
|
if (canceled || (folders[0] && folders[0].id === props.folder.id)) return;
|
||||||
|
|
||||||
misskeyApi('drive/folders/update', {
|
misskeyApi('drive/folders/update', {
|
||||||
folderId: props.folder.id,
|
folderId: props.folder.id,
|
||||||
parentId: folder[0] ? folder[0].id : null,
|
parentId: folders[0] ? folders[0].id : null,
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
globalEvents.emit('driveFoldersUpdated', [{
|
globalEvents.emit('driveFoldersUpdated', [{
|
||||||
...props.folder,
|
...props.folder,
|
||||||
parentId: folder[0] ? folder[0].id : null,
|
parentId: folders[0] ? folders[0].id : null,
|
||||||
parent: folder[0] ?? null,
|
parent: folders[0] ?? null,
|
||||||
}]);
|
}]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -533,17 +533,19 @@ function cd(target?: Misskey.entities.DriveFolder | Misskey.entities.DriveFolder
|
||||||
async function moveFilesBulk() {
|
async function moveFilesBulk() {
|
||||||
if (selectedFiles.value.length === 0) return;
|
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', {
|
await os.apiWithDialog('drive/files/move-bulk', {
|
||||||
fileIds: selectedFiles.value.map(f => f.id),
|
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 => ({
|
globalEvents.emit('driveFilesUpdated', selectedFiles.value.map(x => ({
|
||||||
...x,
|
...x,
|
||||||
folderId: toFolder[0] ? toFolder[0].id : null,
|
folderId: folders[0] ? folders[0].id : null,
|
||||||
folder: toFolder[0] ?? null,
|
folder: folders[0] ?? null,
|
||||||
})));
|
})));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ import { i18n } from '@/i18n.js';
|
||||||
type TypesMap = Record<typeof notificationTypes[number], Ref<boolean>>;
|
type TypesMap = Record<typeof notificationTypes[number], Ref<boolean>>;
|
||||||
|
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
(ev: 'done', v: { excludeTypes: string[] }): void,
|
(ev: 'done', v: { excludeTypes: typeof notificationTypes[number][] }): void,
|
||||||
(ev: 'closed'): void,
|
(ev: 'closed'): void,
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,8 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<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 MkButton from '@/components/MkButton.vue';
|
||||||
import MkInput from '@/components/MkInput.vue';
|
import MkInput from '@/components/MkInput.vue';
|
||||||
import MkPagination from '@/components/MkPagination.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)) {
|
if (selectedEmojis.value.includes(emoji.id)) {
|
||||||
selectedEmojis.value = selectedEmojis.value.filter(x => x !== emoji.id);
|
selectedEmojis.value = selectedEmojis.value.filter(x => x !== emoji.id);
|
||||||
} else {
|
} 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), {
|
const { dispose } = await os.popupAsyncWithDialog(import('./emoji-edit-dialog.vue').then(x => x.default), {
|
||||||
}, {
|
}, {
|
||||||
done: result => {
|
done: result => {
|
||||||
if (result.created) {
|
if (result.created) {
|
||||||
paginator.prepend(result.created);
|
const nowIso = (new Date()).toISOString();
|
||||||
|
paginator.prepend({
|
||||||
|
...result.created,
|
||||||
|
createdAt: nowIso,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
closed: () => dispose(),
|
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), {
|
const { dispose } = await os.popupAsyncWithDialog(import('./emoji-edit-dialog.vue').then(x => x.default), {
|
||||||
emoji: emoji,
|
emoji: emoji,
|
||||||
}, {
|
}, {
|
||||||
|
|
|
||||||
|
|
@ -131,10 +131,11 @@ function move() {
|
||||||
|
|
||||||
const f = file.value;
|
const f = file.value;
|
||||||
|
|
||||||
selectDriveFolder(null).then(folder => {
|
selectDriveFolder(null).then(({ canceled, folders }) => {
|
||||||
|
if (canceled) return;
|
||||||
misskeyApi('drive/files/update', {
|
misskeyApi('drive/files/update', {
|
||||||
fileId: f.id,
|
fileId: f.id,
|
||||||
folderId: folder[0] ? folder[0].id : null,
|
folderId: folders[0] ? folders[0].id : null,
|
||||||
}).then(async () => {
|
}).then(async () => {
|
||||||
await _fetch_();
|
await _fetch_();
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
<MkInfo warn>{{ i18n.ts.rolesThatCanBeUsedThisEmojiAsReactionPublicRoleWarn }}</MkInfo>
|
<MkInfo warn>{{ i18n.ts.rolesThatCanBeUsedThisEmojiAsReactionPublicRoleWarn }}</MkInfo>
|
||||||
</div>
|
</div>
|
||||||
</MkFolder>
|
</MkFolder>
|
||||||
<MkSwitch v-model="isSensitive">isSensitive</MkSwitch>
|
<MkSwitch v-model="isSensitive">{{ i18n.ts.sensitive }}</MkSwitch>
|
||||||
<MkSwitch v-model="localOnly">{{ i18n.ts.localOnly }}</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>
|
<MkButton v-if="emoji" danger @click="del()"><i class="ti ti-trash"></i> {{ i18n.ts.delete }}</MkButton>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -99,7 +99,7 @@ const props = defineProps<{
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const emit = defineEmits<{
|
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
|
(ev: 'closed'): void
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
|
|
@ -157,19 +157,29 @@ async function done() {
|
||||||
localOnly: localOnly.value,
|
localOnly: localOnly.value,
|
||||||
roleIdsThatCanBeUsedThisEmojiAsReaction: rolesThatCanBeUsedThisEmojiAsReaction.value.map(x => x.id),
|
roleIdsThatCanBeUsedThisEmojiAsReaction: rolesThatCanBeUsedThisEmojiAsReaction.value.map(x => x.id),
|
||||||
fileId: file.value ? file.value.id : undefined,
|
fileId: file.value ? file.value.id : undefined,
|
||||||
};
|
} satisfies Misskey.entities.AdminEmojiUpdateRequest;
|
||||||
|
|
||||||
if (props.emoji) {
|
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', {
|
await os.apiWithDialog('admin/emoji/update', {
|
||||||
id: props.emoji.id,
|
id: props.emoji.id,
|
||||||
...params,
|
...params,
|
||||||
});
|
});
|
||||||
|
|
||||||
emit('done', {
|
emit('done', {
|
||||||
updated: {
|
updated: emojiDetailed,
|
||||||
id: props.emoji.id,
|
|
||||||
...params,
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
|
||||||
windowEl.value?.close();
|
windowEl.value?.close();
|
||||||
|
|
|
||||||
|
|
@ -296,8 +296,9 @@ if (prefer.s.uploadFolder) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function chooseUploadFolder() {
|
function chooseUploadFolder() {
|
||||||
selectDriveFolder(null).then(async folder => {
|
selectDriveFolder(null).then(async ({ canceled, folders }) => {
|
||||||
prefer.commit('uploadFolder', folder[0] ? folder[0].id : null);
|
if (canceled) return;
|
||||||
|
prefer.commit('uploadFolder', folders[0] ? folders[0].id : null);
|
||||||
os.success();
|
os.success();
|
||||||
if (prefer.s.uploadFolder) {
|
if (prefer.s.uploadFolder) {
|
||||||
uploadFolder.value = await misskeyApi('drive/folders/show', {
|
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 => {
|
return new Promise(async resolve => {
|
||||||
const { dispose } = await os.popupAsyncWithDialog(import('@/components/MkDriveFolderSelectDialog.vue').then(x => x.default), {
|
const { dispose } = await os.popupAsyncWithDialog(import('@/components/MkDriveFolderSelectDialog.vue').then(x => x.default), {
|
||||||
initialFolder,
|
initialFolder,
|
||||||
}, {
|
}, {
|
||||||
done: folders => {
|
done: folders => {
|
||||||
resolve(folders);
|
resolve(folders == null ? {
|
||||||
|
canceled: true,
|
||||||
|
folders: undefined,
|
||||||
|
} : {
|
||||||
|
canceled: false,
|
||||||
|
folders,
|
||||||
|
});
|
||||||
},
|
},
|
||||||
closed: () => dispose(),
|
closed: () => dispose(),
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -44,10 +44,11 @@ async function describe(file: Misskey.entities.DriveFile) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function move(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', {
|
misskeyApi('drive/files/update', {
|
||||||
fileId: file.id,
|
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 = () => {
|
const choose = () => {
|
||||||
selectDriveFolder(null).then(folder => {
|
selectDriveFolder(null).then(({ folders, canceled }) => {
|
||||||
if (folder[0] == null) {
|
if (canceled || folders[0] == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
widgetProps.folderId = folder[0].id;
|
widgetProps.folderId = folders[0].id;
|
||||||
save();
|
save();
|
||||||
fetch();
|
fetch();
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -8217,16 +8217,7 @@ export interface operations {
|
||||||
[name: string]: unknown;
|
[name: string]: unknown;
|
||||||
};
|
};
|
||||||
content: {
|
content: {
|
||||||
'application/json': {
|
'application/json': components['schemas']['EmojiDetailed'][];
|
||||||
/** 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;
|
|
||||||
}[];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
/** @description Client error */
|
/** @description Client error */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue