bazarr/frontend/src/modules/modals/hooks.ts

47 lines
1.2 KiB
TypeScript
Raw Normal View History

2022-05-31 15:49:04 +00:00
/* eslint-disable @typescript-eslint/ban-types */
import { useModals as useMantineModals } from "@mantine/modals";
import { ModalSettings } from "@mantine/modals/lib/context";
import { useCallback, useContext, useMemo } from "react";
import { ModalComponent, ModalIdContext } from "./WithModal";
export function useModals() {
const { openContextModal: openMantineContextModal, ...rest } =
useMantineModals();
const openContextModal = useCallback(
<ARGS extends {}>(
modal: ModalComponent<ARGS>,
props: ARGS,
settings?: ModalSettings
) => {
openMantineContextModal(modal.modalKey, {
...modal.settings,
...settings,
innerProps: props,
});
2022-03-27 06:42:28 +00:00
},
2022-05-31 15:49:04 +00:00
[openMantineContextModal]
2022-03-27 06:42:28 +00:00
);
2022-05-31 15:49:04 +00:00
const closeContextModal = useCallback(
(modal: ModalComponent) => {
rest.closeModal(modal.modalKey);
2022-03-27 06:42:28 +00:00
},
2022-05-31 15:49:04 +00:00
[rest]
2022-03-27 06:42:28 +00:00
);
2022-05-31 15:49:04 +00:00
const id = useContext(ModalIdContext);
2022-03-27 06:42:28 +00:00
2022-05-31 15:49:04 +00:00
const closeSelf = useCallback(() => {
if (id) {
rest.closeModal(id);
}
}, [id, rest]);
2022-03-27 06:42:28 +00:00
2022-05-31 15:49:04 +00:00
// TODO: Performance
2022-03-27 06:42:28 +00:00
return useMemo(
2022-05-31 15:49:04 +00:00
() => ({ openContextModal, closeContextModal, closeSelf, ...rest }),
[closeContextModal, closeSelf, openContextModal, rest]
2022-03-27 06:42:28 +00:00
);
}