mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-08-04 19:21:33 -07:00
25 lines
769 B
TypeScript
25 lines
769 B
TypeScript
export type ModalDescriptor<TId extends string> = {
|
|
id: TId;
|
|
isOpen: () => boolean;
|
|
close: () => void;
|
|
suppressesSubtitles: boolean;
|
|
};
|
|
|
|
export function createModalRegistry<TId extends string>(
|
|
descriptors: readonly ModalDescriptor<TId>[],
|
|
) {
|
|
return {
|
|
isAnyOpen: (): boolean => descriptors.some((descriptor) => descriptor.isOpen()),
|
|
isAnySuppressingSubtitlesOpen: (): boolean =>
|
|
descriptors.some((descriptor) => descriptor.suppressesSubtitles && descriptor.isOpen()),
|
|
getActive: (): TId | null => descriptors.find((descriptor) => descriptor.isOpen())?.id ?? null,
|
|
dismissOpen: (): void => {
|
|
for (const descriptor of descriptors) {
|
|
if (descriptor.isOpen()) {
|
|
descriptor.close();
|
|
}
|
|
}
|
|
},
|
|
};
|
|
}
|