Grabbed dndbeyond's source code
``` ~/go/bin/sourcemapper -output ddb -jsurl https://media.dndbeyond.com/character-app/static/js/main.90aa78c5.js ```
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
import { createContext, FC, useContext, useState } from "react";
|
||||
|
||||
import { ConfirmModal, ConfirmModalProps } from "~/components/ConfirmModal";
|
||||
|
||||
export interface ModalData {
|
||||
content: React.ReactNode;
|
||||
props: Omit<ConfirmModalProps, "open">;
|
||||
}
|
||||
export interface ModalManagerContextType {
|
||||
createModal: (modalData: ModalData) => void;
|
||||
}
|
||||
|
||||
export const ModalManagerContext = createContext<ModalManagerContextType>(
|
||||
null!
|
||||
);
|
||||
|
||||
export const ModalManagerProvider: FC = ({ children }) => {
|
||||
const [modalData, setModalData] = useState<ModalData | null>(null);
|
||||
|
||||
const createModal = (modalData: ModalData) => {
|
||||
setModalData(modalData);
|
||||
};
|
||||
|
||||
const removeModal = () => {
|
||||
setModalData(null);
|
||||
};
|
||||
|
||||
const handleClose = () => {
|
||||
removeModal();
|
||||
if (modalData) {
|
||||
modalData.props.onClose();
|
||||
}
|
||||
};
|
||||
|
||||
const handleConfirm = () => {
|
||||
removeModal();
|
||||
if (modalData) {
|
||||
modalData.props.onConfirm();
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<ModalManagerContext.Provider value={{ createModal }}>
|
||||
{children}
|
||||
<ConfirmModal
|
||||
{...modalData?.props}
|
||||
onConfirm={handleConfirm}
|
||||
onClose={handleClose}
|
||||
open={!!modalData}
|
||||
>
|
||||
{modalData?.content}
|
||||
</ConfirmModal>
|
||||
</ModalManagerContext.Provider>
|
||||
);
|
||||
};
|
||||
|
||||
export const useModalManager = () => {
|
||||
return useContext(ModalManagerContext);
|
||||
};
|
||||
Reference in New Issue
Block a user