bananas-commerce-admin
Version:
What's this, an admin for apes?
73 lines • 2.89 kB
JavaScript
import React, { useContext, useState } from "react";
import Button from "@mui/material/Button";
import Dialog from "@mui/material/Dialog";
import DialogActions from "@mui/material/DialogActions";
import DialogContent from "@mui/material/DialogContent";
import DialogTitle from "@mui/material/DialogTitle";
const DialogContext = React.createContext({
title: "",
children: null,
cb: (ok) => void ok,
open: false,
makeOpen: () => Promise.resolve(false),
dialogProps: {},
ok: "Ok",
cancel: "Cancel",
});
function DialogContextProvider(props) {
const [title, setTitle] = useState("");
const [children, setChildren] = useState(null);
const [open, setOpen] = useState(false);
const [ok, setOk] = useState("Ok");
const [cancel, setCancel] = useState("Cancel");
const [dialogProps, setDialogProps] = useState({});
return (React.createElement(DialogContext.Provider, { value: {
makeOpen: (title, children, options) => {
setTitle(title);
setChildren(children);
setOpen(true);
if (options?.ok !== undefined) {
setOk(options.ok);
}
if (options?.cancel !== undefined) {
setCancel(options.cancel);
}
if (options?.dialogProps) {
setDialogProps(options.dialogProps);
}
return new Promise((resolve) => {
const event = (e) => {
window.removeEventListener("dialogclick", event);
resolve(e.detail);
};
window.addEventListener("dialogclick", event);
});
},
title,
children,
open,
cb: (ok) => {
window.dispatchEvent(new CustomEvent("dialogclick", { detail: ok }));
setOpen(false);
},
dialogProps,
ok,
cancel,
} }, props.children));
}
export function BcomDialog() {
const ctx = useContext(DialogContext);
return (React.createElement(Dialog, { ...ctx.dialogProps, open: ctx.open, sx: { p: 0, ...ctx.dialogProps.sx } },
React.createElement(DialogContent, null,
React.createElement(DialogTitle, null, ctx.title),
React.createElement(DialogContent, null, ctx.children),
React.createElement(DialogActions, null,
ctx.cancel && React.createElement(Button, { onClick: () => ctx.cb(false) }, ctx.cancel),
ctx.ok && React.createElement(Button, { onClick: () => ctx.cb(true) }, ctx.ok)))));
}
export function useDialog() {
const { makeOpen } = useContext(DialogContext);
return makeOpen;
}
export default DialogContextProvider;
//# sourceMappingURL=DialogContext.js.map