refactor(frontend): `os.popup()`の`events`の型チェックを有効化 (#13165)
This commit is contained in:
parent
ddfc3b8a6a
commit
0df069494e
|
@ -128,9 +128,10 @@ export function promiseDialog<T extends Promise<any>>(
|
||||||
|
|
||||||
let popupIdCount = 0;
|
let popupIdCount = 0;
|
||||||
export const popups = ref([]) as Ref<{
|
export const popups = ref([]) as Ref<{
|
||||||
id: any;
|
id: number;
|
||||||
component: any;
|
component: Component;
|
||||||
props: Record<string, any>;
|
props: Record<string, any>;
|
||||||
|
events: Record<string, any>;
|
||||||
}[]>;
|
}[]>;
|
||||||
|
|
||||||
const zIndexes = {
|
const zIndexes = {
|
||||||
|
@ -144,7 +145,18 @@ export function claimZIndex(priority: keyof typeof zIndexes = 'low'): number {
|
||||||
return zIndexes[priority];
|
return zIndexes[priority];
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function popup<T extends Component>(component: T, props: ComponentProps<T>, events = {}, disposeEvent?: string) {
|
// InstanceType<typeof Component>['$emit'] だとインターセクション型が返ってきて
|
||||||
|
// 使い物にならないので、代わりに ['$props'] から色々省くことで emit の型を生成する
|
||||||
|
// FIXME: 何故か *.ts ファイルからだと型がうまく取れない?ことがあるのをなんとかしたい
|
||||||
|
type ComponentEmit<T> = T extends new () => { $props: infer Props }
|
||||||
|
? EmitsExtractor<Props>
|
||||||
|
: never;
|
||||||
|
|
||||||
|
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>) {
|
||||||
markRaw(component);
|
markRaw(component);
|
||||||
|
|
||||||
const id = ++popupIdCount;
|
const id = ++popupIdCount;
|
||||||
|
|
Loading…
Reference in New Issue