diff options
| author | かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> | 2025-03-20 16:36:37 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-20 16:36:37 +0900 |
| commit | a865a949b53024ed24d38f49cf30631804018b01 (patch) | |
| tree | 2d9f2006a601efcd8884054e0c62fd0c3b5449d3 /packages/frontend/src/os.ts | |
| parent | fix lint (diff) | |
| download | misskey-a865a949b53024ed24d38f49cf30631804018b01.tar.gz misskey-a865a949b53024ed24d38f49cf30631804018b01.tar.bz2 misskey-a865a949b53024ed24d38f49cf30631804018b01.zip | |
fix(frontend): MkRoleSelectDialogでのpopupの使い方が誤っているのを修正 (#15683)
Diffstat (limited to 'packages/frontend/src/os.ts')
| -rw-r--r-- | packages/frontend/src/os.ts | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/packages/frontend/src/os.ts b/packages/frontend/src/os.ts index 8e4c97e59f..eed929432c 100644 --- a/packages/frontend/src/os.ts +++ b/packages/frontend/src/os.ts @@ -21,10 +21,10 @@ import MkWaitingDialog from '@/components/MkWaitingDialog.vue'; import MkPageWindow from '@/components/MkPageWindow.vue'; import MkToast from '@/components/MkToast.vue'; import MkDialog from '@/components/MkDialog.vue'; -import MkPasswordDialog from '@/components/MkPasswordDialog.vue'; -import MkEmojiPickerDialog from '@/components/MkEmojiPickerDialog.vue'; import MkPopupMenu from '@/components/MkPopupMenu.vue'; import MkContextMenu from '@/components/MkContextMenu.vue'; +import type MkRoleSelectDialog_TypeReferenceOnly from '@/components/MkRoleSelectDialog.vue'; +import type MkEmojiPickerDialog_TypeReferenceOnly from '@/components/MkEmojiPickerDialog.vue'; import { copyToClipboard } from '@/utility/copy-to-clipboard.js'; import { pleaseLogin } from '@/utility/please-login.js'; import { showMovedDialog } from '@/utility/show-moved-dialog.js'; @@ -181,7 +181,7 @@ type EmitsExtractor<T> = { export function popup<T extends Component>( component: T, props: ComponentProps<T>, - events: ComponentEmit<T> = {} as ComponentEmit<T>, + events: Partial<ComponentEmit<T>> = {}, ): { dispose: () => void } { markRaw(component); @@ -460,7 +460,7 @@ export function authenticateDialog(): Promise<{ canceled: false; result: { password: string; token: string | null; }; }> { return new Promise(resolve => { - const { dispose } = popup(MkPasswordDialog, {}, { + const { dispose } = popup(defineAsyncComponent(() => import('@/components/MkPasswordDialog.vue')), {}, { done: result => { resolve(result ? { canceled: false, result } : { canceled: true, result: undefined }); }, @@ -617,30 +617,26 @@ export async function selectDriveFolder(multiple: boolean): Promise<Misskey.enti }); } -export async function selectRole(params: { - initialRoleIds?: string[], - title?: string, - infoMessage?: string, - publicOnly?: boolean, -}): Promise< +export async function selectRole(params: ComponentProps<typeof MkRoleSelectDialog_TypeReferenceOnly>): Promise< { canceled: true; result: undefined; } | { canceled: false; result: Misskey.entities.Role[] } - > { +> { return new Promise((resolve) => { - popup(defineAsyncComponent(() => import('@/components/MkRoleSelectDialog.vue')), params, { + const { dispose } = popup(defineAsyncComponent(() => import('@/components/MkRoleSelectDialog.vue')), params, { done: roles => { resolve({ canceled: false, result: roles }); }, close: () => { resolve({ canceled: true, result: undefined }); }, - }, 'dispose'); + closed: () => dispose(), + }); }); } -export async function pickEmoji(src: HTMLElement, opts: ComponentProps<typeof MkEmojiPickerDialog>): Promise<string> { +export async function pickEmoji(src: HTMLElement, opts: ComponentProps<typeof MkEmojiPickerDialog_TypeReferenceOnly>): Promise<string> { return new Promise(resolve => { - const { dispose } = popup(MkEmojiPickerDialog, { + const { dispose } = popup(defineAsyncComponent(() => import('@/components/MkEmojiPickerDialog.vue')), { src, ...opts, }, { @@ -675,6 +671,10 @@ export function popupMenu(items: MenuItem[], src?: HTMLElement | EventTarget | n width?: number; onClosing?: () => void; }): Promise<void> { + if (!(src instanceof HTMLElement)) { + src = null; + } + let returnFocusTo = getHTMLElementOrNull(src) ?? getHTMLElementOrNull(document.activeElement); return new Promise(resolve => nextTick(() => { const { dispose } = popup(MkPopupMenu, { |