fix(frontend): モーダルが複数個開ける問題を修正
This commit is contained in:
parent
91de35ecdf
commit
e9ad7cf226
|
@ -170,13 +170,33 @@ 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];
|
[K in keyof T as K extends `onVnode${string}` ? never : K extends `on${infer E}` ? Uncapitalize<E> : K extends string ? never : K]: T[K];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type PopupOptions = {
|
||||||
|
/** @default false */
|
||||||
|
allowMultiple?: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
export function popup<T extends Component>(
|
export function popup<T extends Component>(
|
||||||
component: T,
|
component: T,
|
||||||
props: ComponentProps<T>,
|
props: ComponentProps<T>,
|
||||||
events: ComponentEmit<T> = {} as ComponentEmit<T>,
|
events: ComponentEmit<T> = {} as ComponentEmit<T>,
|
||||||
|
options: PopupOptions = {},
|
||||||
): { dispose: () => void } {
|
): { dispose: () => void } {
|
||||||
markRaw(component);
|
markRaw(component);
|
||||||
|
|
||||||
|
const _options: Required<PopupOptions> = Object.assign({
|
||||||
|
allowMultiple: false,
|
||||||
|
}, options);
|
||||||
|
|
||||||
|
if (
|
||||||
|
_options.allowMultiple === false &&
|
||||||
|
popups.value.some(popup => popup.component === component)
|
||||||
|
) {
|
||||||
|
if (_DEV_) console.warn('Popup already exists');
|
||||||
|
return {
|
||||||
|
dispose: () => { },
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
const id = ++popupIdCount;
|
const id = ++popupIdCount;
|
||||||
const dispose = () => {
|
const dispose = () => {
|
||||||
// このsetTimeoutが無いと挙動がおかしくなる(autocompleteが閉じなくなる)。Vueのバグ?
|
// このsetTimeoutが無いと挙動がおかしくなる(autocompleteが閉じなくなる)。Vueのバグ?
|
||||||
|
@ -203,6 +223,8 @@ export function pageWindow(path: string) {
|
||||||
initialPath: path,
|
initialPath: path,
|
||||||
}, {
|
}, {
|
||||||
closed: () => dispose(),
|
closed: () => dispose(),
|
||||||
|
}, {
|
||||||
|
allowMultiple: true,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -211,6 +233,8 @@ export function toast(message: string) {
|
||||||
message,
|
message,
|
||||||
}, {
|
}, {
|
||||||
closed: () => dispose(),
|
closed: () => dispose(),
|
||||||
|
}, {
|
||||||
|
allowMultiple: true,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -114,6 +114,7 @@ const matchPatterns = (ev: KeyboardEvent, action: Action) => {
|
||||||
const key = ev.key.toLowerCase();
|
const key = ev.key.toLowerCase();
|
||||||
return patterns.some(({ which, ctrl, shift, alt }) => {
|
return patterns.some(({ which, ctrl, shift, alt }) => {
|
||||||
if (
|
if (
|
||||||
|
options.allowRepeat === false &&
|
||||||
latestHotkey != null &&
|
latestHotkey != null &&
|
||||||
latestHotkey.which.includes(key) &&
|
latestHotkey.which.includes(key) &&
|
||||||
latestHotkey.ctrl === ctrl &&
|
latestHotkey.ctrl === ctrl &&
|
||||||
|
|
Loading…
Reference in New Issue