diff --git a/client/components/edit/EditParentsButton.test.tsx b/client/components/edit/EditParentsButton.test.tsx
index 98b29e1b2..c968f5089 100644
--- a/client/components/edit/EditParentsButton.test.tsx
+++ b/client/components/edit/EditParentsButton.test.tsx
@@ -12,18 +12,31 @@ jest.mock("../../context/EditorContext", () => ({
},
}));
+const mockUseGlobalContext = jest.fn();
+jest.mock("../../context/GlobalContext", () => ({
+ useGlobalContext: () => {
+ return mockUseGlobalContext();
+ },
+}));
+
describe("EditParentsButton", () => {
let editorValues;
+ let globalValues;
let pid: string;
beforeEach(() => {
pid = "foo:123";
editorValues = {
action: {
setParentsModalActivePid: jest.fn(),
- toggleParentsModal: jest.fn(),
},
};
mockUseEditorContext.mockReturnValue(editorValues);
+ globalValues = {
+ action: {
+ openModal: jest.fn(),
+ },
+ };
+ mockUseGlobalContext.mockReturnValue(globalValues);
});
it("renders", () => {
@@ -36,6 +49,6 @@ describe("EditParentsButton", () => {
await userEvent.setup().click(screen.getByRole("button"));
expect(editorValues.action.setParentsModalActivePid).toHaveBeenCalledWith(pid);
- expect(editorValues.action.toggleParentsModal).toHaveBeenCalled();
+ expect(globalValues.action.openModal).toHaveBeenCalledWith("parents");
});
});
diff --git a/client/components/edit/EditParentsButton.tsx b/client/components/edit/EditParentsButton.tsx
index 4c4e7c267..c25ae7ad1 100644
--- a/client/components/edit/EditParentsButton.tsx
+++ b/client/components/edit/EditParentsButton.tsx
@@ -1,4 +1,5 @@
import React from "react";
+import { useGlobalContext } from "../../context/GlobalContext";
import { useEditorContext } from "../../context/EditorContext";
export interface ObjectStatusProps {
@@ -7,12 +8,16 @@ export interface ObjectStatusProps {
export const EditParentsButton = ({ pid }: ObjectStatusProps): React.ReactElement => {
const {
- action: { setParentsModalActivePid, toggleParentsModal },
+ action: { openModal },
+ } = useGlobalContext();
+
+ const {
+ action: { setParentsModalActivePid },
} = useEditorContext();
const clickAction = () => {
setParentsModalActivePid(pid);
- toggleParentsModal();
+ openModal("parents");
};
return ;
};
diff --git a/client/components/edit/EditorSnackbar.test.tsx b/client/components/edit/EditorSnackbar.test.tsx
index 2c04c8f08..351f887b8 100644
--- a/client/components/edit/EditorSnackbar.test.tsx
+++ b/client/components/edit/EditorSnackbar.test.tsx
@@ -5,18 +5,18 @@ import userEvent from "@testing-library/user-event";
import renderer from "react-test-renderer";
import EditorSnackbar from "./EditorSnackbar";
-const mockUseEditorContext = jest.fn();
-jest.mock("../../context/EditorContext", () => ({
- useEditorContext: () => {
- return mockUseEditorContext();
+const mockUseGlobalContext = jest.fn();
+jest.mock("../../context/GlobalContext", () => ({
+ useGlobalContext: () => {
+ return mockUseGlobalContext();
},
}));
jest.mock("./children/ChildList", () => () => "ChildList");
describe("EditorSnackbar", () => {
- let editorValues;
+ let globalValues;
beforeEach(() => {
- editorValues = {
+ globalValues = {
state: {
snackbarState: {
message: "test1",
@@ -28,7 +28,7 @@ describe("EditorSnackbar", () => {
setSnackbarState: jest.fn(),
},
};
- mockUseEditorContext.mockReturnValue(editorValues);
+ mockUseGlobalContext.mockReturnValue(globalValues);
});
it("renders", () => {
@@ -47,7 +47,7 @@ describe("EditorSnackbar", () => {
await userEvent.setup().click(screen.getByRole("button"));
- expect(editorValues.action.setSnackbarState).toHaveBeenCalledWith({
+ expect(globalValues.action.setSnackbarState).toHaveBeenCalledWith({
open: false,
message: "",
severity: "info",
diff --git a/client/components/edit/EditorSnackbar.tsx b/client/components/edit/EditorSnackbar.tsx
index a24d14a3a..1c5c15dbf 100644
--- a/client/components/edit/EditorSnackbar.tsx
+++ b/client/components/edit/EditorSnackbar.tsx
@@ -3,7 +3,7 @@ import Alert from "@mui/material/Alert";
import IconButton from "@mui/material/IconButton";
import Snackbar from "@mui/material/Snackbar";
import CloseIcon from "@mui/icons-material/Close";
-import { useEditorContext } from "../../context/EditorContext";
+import { useGlobalContext } from "../../context/GlobalContext";
const EditorSnackbar = (): React.ReactElement => {
const {
@@ -11,7 +11,7 @@ const EditorSnackbar = (): React.ReactElement => {
snackbarState: { message, open, severity },
},
action: { setSnackbarState },
- } = useEditorContext();
+ } = useGlobalContext();
const handleClose = () => {
setSnackbarState({
diff --git a/client/components/edit/ObjectStatus.test.tsx b/client/components/edit/ObjectStatus.test.tsx
index 56c59186e..66e8ce92a 100644
--- a/client/components/edit/ObjectStatus.test.tsx
+++ b/client/components/edit/ObjectStatus.test.tsx
@@ -5,14 +5,18 @@ import renderer from "react-test-renderer";
import { ObjectStatusProps, ObjectStatus } from "./ObjectStatus";
import { EditorContextProvider, ObjectDetails } from "../../context/EditorContext";
import { FetchContextProvider } from "../../context/FetchContext";
+import { GlobalContextProvider } from "../../context/GlobalContext";
function getMountedObjectStatusComponent(props: ObjectStatusProps) {
return renderer.create(
-
-
-
-
- ,
+
+
+
+
+
+
+ ,
+ ,
);
}
diff --git a/client/components/edit/ObjectStatus.tsx b/client/components/edit/ObjectStatus.tsx
index 6e230ea7d..3cbfe67ca 100644
--- a/client/components/edit/ObjectStatus.tsx
+++ b/client/components/edit/ObjectStatus.tsx
@@ -1,5 +1,6 @@
import styles from "./ObjectStatus.module.css";
import React from "react";
+import { useGlobalContext } from "../../context/GlobalContext";
import { useEditorContext } from "../../context/EditorContext";
import ObjectLoader from "./ObjectLoader";
@@ -8,9 +9,12 @@ export interface ObjectStatusProps {
}
export const ObjectStatus = ({ pid }: ObjectStatusProps): React.ReactElement => {
+ const {
+ action: { openModal },
+ } = useGlobalContext();
const {
state: { objectDetailsStorage },
- action: { setStateModalActivePid, toggleStateModal },
+ action: { setStateModalActivePid },
} = useEditorContext();
const loaded = Object.prototype.hasOwnProperty.call(objectDetailsStorage, pid);
const details = loaded ? objectDetailsStorage[pid] : {};
@@ -18,7 +22,7 @@ export const ObjectStatus = ({ pid }: ObjectStatusProps): React.ReactElement =>
const stateTxt = details.state ?? "Unknown";
const clickAction = () => {
setStateModalActivePid(pid);
- toggleStateModal();
+ openModal("state");
};
const stateMsg = loaded ? (
,
+ ",",
+]
`;
exports[`ObjectStatus displays the state found in the response 1`] = `
-
-
- ◉
-
-
- Inactive
-
+
+ ◉
+
+
+ Inactive
+ ,
+ ",",
+]
`;
diff --git a/client/components/edit/__snapshots__/StateModal.test.tsx.snap b/client/components/edit/__snapshots__/StateModal.test.tsx.snap
index c00251fa2..8222bb942 100644
--- a/client/components/edit/__snapshots__/StateModal.test.tsx.snap
+++ b/client/components/edit/__snapshots__/StateModal.test.tsx.snap
@@ -11,7 +11,7 @@ exports[`StateModal renders correctly for a loaded object with children 1`] = `
className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeMedium closeButton css-78trlr-MuiButtonBase-root-MuiIconButton-root"
disabled={false}
onBlur={[Function]}
- onClick={[MockFunction]}
+ onClick={[Function]}
onContextMenu={[Function]}
onDragLeave={[Function]}
onFocus={[Function]}
@@ -316,7 +316,7 @@ exports[`StateModal renders correctly for a loaded object without children 1`] =
className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeMedium closeButton css-78trlr-MuiButtonBase-root-MuiIconButton-root"
disabled={false}
onBlur={[Function]}
- onClick={[MockFunction]}
+ onClick={[Function]}
onContextMenu={[Function]}
onDragLeave={[Function]}
onFocus={[Function]}
@@ -567,7 +567,7 @@ exports[`StateModal renders correctly for a pending object 1`] = `
className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeMedium closeButton css-78trlr-MuiButtonBase-root-MuiIconButton-root"
disabled={false}
onBlur={[Function]}
- onClick={[MockFunction]}
+ onClick={[Function]}
onContextMenu={[Function]}
onDragLeave={[Function]}
onFocus={[Function]}
@@ -821,7 +821,7 @@ exports[`StateModal renders correctly when closed 1`] = `
className="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeMedium closeButton css-78trlr-MuiButtonBase-root-MuiIconButton-root"
disabled={false}
onBlur={[Function]}
- onClick={[MockFunction]}
+ onClick={[Function]}
onContextMenu={[Function]}
onDragLeave={[Function]}
onFocus={[Function]}
diff --git a/client/components/edit/datastream/DatastreamAgentsContent.test.tsx b/client/components/edit/datastream/DatastreamAgentsContent.test.tsx
index 2015c9a01..a00007663 100644
--- a/client/components/edit/datastream/DatastreamAgentsContent.test.tsx
+++ b/client/components/edit/datastream/DatastreamAgentsContent.test.tsx
@@ -22,6 +22,12 @@ jest.mock("../../../context/EditorContext", () => ({
return mockUseEditorContext();
},
}));
+const mockUseGlobalContext = jest.fn();
+jest.mock("../../../context/GlobalContext", () => ({
+ useGlobalContext: () => {
+ return mockUseGlobalContext();
+ },
+}));
const mockUseDatastreamOperation = jest.fn();
jest.mock("../../../hooks/useDatastreamOperation", () => () => {
return mockUseDatastreamOperation();
@@ -30,6 +36,7 @@ jest.mock("@mui/material/Grid", () => (props) => props.children);
describe("DatastreamAgentsContent", () => {
let editorValues;
+ let globalValues;
let datastreamOperationValues;
beforeEach(() => {
editorValues = {
@@ -45,7 +52,11 @@ describe("DatastreamAgentsContent", () => {
},
action: {
setCurrentAgents: jest.fn(),
- toggleDatastreamModal: jest.fn(),
+ },
+ };
+ globalValues = {
+ action: {
+ closeModal: jest.fn(),
},
};
datastreamOperationValues = {
@@ -53,6 +64,7 @@ describe("DatastreamAgentsContent", () => {
getAgents: jest.fn(),
};
mockUseEditorContext.mockReturnValue(editorValues);
+ mockUseGlobalContext.mockReturnValue(globalValues);
mockUseDatastreamOperation.mockReturnValue(datastreamOperationValues);
});
@@ -81,7 +93,7 @@ describe("DatastreamAgentsContent", () => {
await userEvent.setup().click(screen.getByText("Save Changes"));
expect(datastreamOperationValues.uploadAgents).toHaveBeenCalled();
- expect(editorValues.action.toggleDatastreamModal).not.toHaveBeenCalled();
+ expect(globalValues.action.closeModal).not.toHaveBeenCalled();
});
it("saves current agents and closes the modal", async () => {
@@ -94,7 +106,7 @@ describe("DatastreamAgentsContent", () => {
await userEvent.setup().click(screen.getByText("Save And Close"));
expect(datastreamOperationValues.uploadAgents).toHaveBeenCalled();
- expect(editorValues.action.toggleDatastreamModal).toHaveBeenCalled();
+ expect(globalValues.action.closeModal).toHaveBeenCalledWith("datastream");
});
it("resets current agents on cancel", async () => {
@@ -109,6 +121,6 @@ describe("DatastreamAgentsContent", () => {
expect(datastreamOperationValues.uploadAgents).not.toHaveBeenCalled();
expect(datastreamOperationValues.getAgents).toHaveBeenCalled();
expect(editorValues.action.setCurrentAgents).toHaveBeenCalled();
- expect(editorValues.action.toggleDatastreamModal).toHaveBeenCalled();
+ expect(globalValues.action.closeModal).toHaveBeenCalledWith("datastream");
});
});
diff --git a/client/components/edit/datastream/DatastreamAgentsContent.tsx b/client/components/edit/datastream/DatastreamAgentsContent.tsx
index 5ef90d239..e817f2b52 100644
--- a/client/components/edit/datastream/DatastreamAgentsContent.tsx
+++ b/client/components/edit/datastream/DatastreamAgentsContent.tsx
@@ -4,6 +4,7 @@ import DialogActions from "@mui/material/DialogActions";
import DialogContent from "@mui/material/DialogContent";
import Grid from "@mui/material/Grid";
import { useEditorContext } from "../../../context/EditorContext";
+import { useGlobalContext } from "../../../context/GlobalContext";
import useDatastreamOperation from "../../../hooks/useDatastreamOperation";
import CircularProgress from "@mui/material/CircularProgress";
import Divider from "@mui/material/Divider";
@@ -15,8 +16,11 @@ import Box from "@mui/material/Box";
const DatastreamAgentsContent = (): React.ReactElement => {
const {
state: { agentsCatalog, currentAgents },
- action: { setCurrentAgents, toggleDatastreamModal },
+ action: { setCurrentAgents },
} = useEditorContext();
+ const {
+ action: { closeModal },
+ } = useGlobalContext();
const { uploadAgents, getAgents } = useDatastreamOperation();
const {
defaults: { role, type, name },
@@ -150,7 +154,7 @@ const DatastreamAgentsContent = (): React.ReactElement => {
disabled={!canSave}
onClick={async () => {
await saveCurrentAgents();
- toggleDatastreamModal();
+ closeModal("datastream");
}}
>
Save And Close
@@ -161,7 +165,7 @@ const DatastreamAgentsContent = (): React.ReactElement => {
className="agentsCancelButton"
onClick={async () => {
setCurrentAgents(await getAgents());
- toggleDatastreamModal();
+ closeModal("datastream");
}}
>
Cancel
diff --git a/client/components/edit/datastream/DatastreamControlButton.test.tsx b/client/components/edit/datastream/DatastreamControlButton.test.tsx
index fda675213..4ceb3b4a4 100644
--- a/client/components/edit/datastream/DatastreamControlButton.test.tsx
+++ b/client/components/edit/datastream/DatastreamControlButton.test.tsx
@@ -12,23 +12,35 @@ jest.mock("../../../context/EditorContext", () => ({
return mockUseEditorContext();
},
}));
+const mockUseGlobalContext = jest.fn();
+jest.mock("../../../context/GlobalContext", () => ({
+ useGlobalContext: () => {
+ return mockUseGlobalContext();
+ },
+}));
const mockUseDatastreamOperation = jest.fn();
jest.mock("../../../hooks/useDatastreamOperation", () => () => mockUseDatastreamOperation());
describe("DatastreamControlButton", () => {
let editorValues;
+ let globalValues;
let datastreamOperationValues;
beforeEach(() => {
editorValues = {
action: {
- toggleDatastreamModal: jest.fn(),
setActiveDatastream: jest.fn(),
setDatastreamModalState: jest.fn(),
},
};
+ globalValues = {
+ action: {
+ openModal: jest.fn(),
+ },
+ };
datastreamOperationValues = {
downloadDatastream: jest.fn(),
};
mockUseEditorContext.mockReturnValue(editorValues);
+ mockUseGlobalContext.mockReturnValue(globalValues);
mockUseDatastreamOperation.mockReturnValue(datastreamOperationValues);
});
@@ -52,6 +64,6 @@ describe("DatastreamControlButton", () => {
await userEvent.setup().click(screen.getByRole("button"));
expect(editorValues.action.setActiveDatastream).toHaveBeenCalledWith("THUMBNAIL");
expect(editorValues.action.setDatastreamModalState).toHaveBeenCalledWith("View");
- expect(editorValues.action.toggleDatastreamModal).toHaveBeenCalled();
+ expect(globalValues.action.openModal).toHaveBeenCalledWith("datastream");
});
});
diff --git a/client/components/edit/datastream/DatastreamControlButton.tsx b/client/components/edit/datastream/DatastreamControlButton.tsx
index cb91f285b..e9a0374b4 100644
--- a/client/components/edit/datastream/DatastreamControlButton.tsx
+++ b/client/components/edit/datastream/DatastreamControlButton.tsx
@@ -7,6 +7,7 @@ import Delete from "@mui/icons-material/Delete";
import Preview from "@mui/icons-material/Preview";
import UploadFile from "@mui/icons-material/UploadFile";
import { useEditorContext } from "../../../context/EditorContext";
+import { useGlobalContext } from "../../../context/GlobalContext";
import useDatastreamOperation from "../../../hooks/useDatastreamOperation";
const Icons = {
@@ -30,15 +31,18 @@ const DatastreamControlButton = ({
}: DatastreamControlButtonProps): React.ReactElement => {
const [isLoading, setLoading] = useState(false);
const {
- action: { toggleDatastreamModal, setActiveDatastream, setDatastreamModalState },
+ action: { setActiveDatastream, setDatastreamModalState },
} = useEditorContext();
+ const {
+ action: { openModal },
+ } = useGlobalContext();
const { downloadDatastream } = useDatastreamOperation();
const onClick = (modalState) => {
if (modalState !== "Download") {
return () => {
setActiveDatastream(datastream);
setDatastreamModalState(modalState);
- toggleDatastreamModal();
+ openModal("datastream");
};
}
return async () => {
diff --git a/client/components/edit/datastream/DatastreamDeleteModalContent.test.tsx b/client/components/edit/datastream/DatastreamDeleteModalContent.test.tsx
index f3a78c061..3670b006b 100644
--- a/client/components/edit/datastream/DatastreamDeleteModalContent.test.tsx
+++ b/client/components/edit/datastream/DatastreamDeleteModalContent.test.tsx
@@ -5,33 +5,28 @@ import userEvent from "@testing-library/user-event";
import renderer from "react-test-renderer";
import DatastreamDeleteModalContent from "./DatastreamDeleteModalContent";
-const mockUseEditorContext = jest.fn();
-jest.mock("../../../context/EditorContext", () => ({
- useEditorContext: () => {
- return mockUseEditorContext();
+const mockUseGlobalContext = jest.fn();
+jest.mock("../../../context/GlobalContext", () => ({
+ useGlobalContext: () => {
+ return mockUseGlobalContext();
},
}));
const mockUseDatastreamOperation = jest.fn();
jest.mock("../../../hooks/useDatastreamOperation", () => () => mockUseDatastreamOperation());
describe("DatastreamDeleteModalContent", () => {
- let editorValues;
+ let globalValues;
let datastreamOperationValues;
beforeEach(() => {
- editorValues = {
- state: {
- currentPid: "vudl:123",
- activeDatastream: "THUMBNAIL",
- },
+ globalValues = {
action: {
- loadCurrentObjectDetails: jest.fn().mockResolvedValue({}),
setSnackbarState: jest.fn(),
- toggleDatastreamModal: jest.fn(),
+ closeModal: jest.fn(),
},
};
datastreamOperationValues = {
deleteDatastream: jest.fn(),
};
- mockUseEditorContext.mockReturnValue(editorValues);
+ mockUseGlobalContext.mockReturnValue(globalValues);
mockUseDatastreamOperation.mockReturnValue(datastreamOperationValues);
});
@@ -45,4 +40,10 @@ describe("DatastreamDeleteModalContent", () => {
await userEvent.setup().click(screen.getByText("Yes"));
expect(datastreamOperationValues.deleteDatastream).toHaveBeenCalled();
});
+
+ it("can be stopped", async () => {
+ render();
+ await userEvent.setup().click(screen.getByText("No"));
+ expect(globalValues.action.closeModal).toHaveBeenCalledWith("datastream");
+ });
});
diff --git a/client/components/edit/datastream/DatastreamDeleteModalContent.tsx b/client/components/edit/datastream/DatastreamDeleteModalContent.tsx
index 03c6452a0..b6fed1c85 100644
--- a/client/components/edit/datastream/DatastreamDeleteModalContent.tsx
+++ b/client/components/edit/datastream/DatastreamDeleteModalContent.tsx
@@ -3,13 +3,13 @@ import Button from "@mui/material/Button";
import DialogContent from "@mui/material/DialogContent";
import DialogActions from "@mui/material/DialogActions";
import DialogContentText from "@mui/material/DialogContentText";
-import { useEditorContext } from "../../../context/EditorContext";
+import { useGlobalContext } from "../../../context/GlobalContext";
import useDatastreamOperation from "../../../hooks/useDatastreamOperation";
const DatastreamDeleteModalContent = (): React.ReactElement => {
const {
- action: { toggleDatastreamModal },
- } = useEditorContext();
+ action: { closeModal },
+ } = useGlobalContext();
const { deleteDatastream } = useDatastreamOperation();
return (
@@ -18,7 +18,7 @@ const DatastreamDeleteModalContent = (): React.ReactElement => {
Are you sure you want to delete the datastream?
-
+ closeModal("datastream")}>
No
diff --git a/client/components/edit/datastream/DatastreamDublinCoreContent.test.tsx b/client/components/edit/datastream/DatastreamDublinCoreContent.test.tsx
index 6d51b3e17..5e5e4ca17 100644
--- a/client/components/edit/datastream/DatastreamDublinCoreContent.test.tsx
+++ b/client/components/edit/datastream/DatastreamDublinCoreContent.test.tsx
@@ -12,6 +12,13 @@ jest.mock("../../../context/EditorContext", () => ({
},
}));
+const mockUseGlobalContext = jest.fn();
+jest.mock("../../../context/GlobalContext", () => ({
+ useGlobalContext: () => {
+ return mockUseGlobalContext();
+ },
+}));
+
const mockUseDublinCoreMetadataContext = jest.fn();
jest.mock("../../../context/DublinCoreMetadataContext", () => ({
useDublinCoreMetadataContext: () => {
@@ -29,6 +36,7 @@ jest.mock("../ObjectPreviewButton", () => () => "ObjectPreviewButton");
describe("DatastreamDublinCoreContent ", () => {
let dcValues;
let editorValues;
+ let globalValues;
let pid;
let uploadDublinCore;
@@ -39,11 +47,14 @@ describe("DatastreamDublinCoreContent ", () => {
currentPid: pid,
objectDetailsStorage: {},
},
+ };
+ globalValues = {
action: {
- toggleDatastreamsModel: jest.fn(),
+ closeModal: jest.fn(),
},
};
mockUseEditorContext.mockReturnValue(editorValues);
+ mockUseGlobalContext.mockReturnValue(globalValues);
uploadDublinCore = jest.fn();
mockUseDatastreamOperation.mockReturnValue({ uploadDublinCore });
dcValues = {
@@ -90,4 +101,11 @@ describe("DatastreamDublinCoreContent ", () => {
await userEvent.setup().click(screen.getByText("Save"));
expect(uploadDublinCore).toHaveBeenCalledWith(metadata);
});
+
+ it("can be canceled", async () => {
+ render();
+ await userEvent.setup().click(screen.getByText("Cancel"));
+ expect(uploadDublinCore).not.toHaveBeenCalled();
+ expect(globalValues.action.closeModal).toHaveBeenCalledWith("datastream");
+ });
});
diff --git a/client/components/edit/datastream/DatastreamDublinCoreContent.tsx b/client/components/edit/datastream/DatastreamDublinCoreContent.tsx
index 683cead1f..9fe784e36 100644
--- a/client/components/edit/datastream/DatastreamDublinCoreContent.tsx
+++ b/client/components/edit/datastream/DatastreamDublinCoreContent.tsx
@@ -4,6 +4,7 @@ import DialogActions from "@mui/material/DialogActions";
import DialogContent from "@mui/material/DialogContent";
import Grid from "@mui/material/Grid";
import { useEditorContext } from "../../../context/EditorContext";
+import { useGlobalContext } from "../../../context/GlobalContext";
import { useDublinCoreMetadataContext } from "../../../context/DublinCoreMetadataContext";
import useDatastreamOperation from "../../../hooks/useDatastreamOperation";
import DatastreamDublinCoreValues from "./DatastreamDublinCoreValues";
@@ -13,8 +14,10 @@ import ObjectPreviewButton from "../ObjectPreviewButton";
const DatastreamDublinCoreContent = (): React.ReactElement => {
const {
state: { currentPid, objectDetailsStorage },
- action: { toggleDatastreamModal },
} = useEditorContext();
+ const {
+ action: { closeModal },
+ } = useGlobalContext();
const {
state: { currentDublinCore },
action: { setCurrentDublinCore },
@@ -52,7 +55,7 @@ const DatastreamDublinCoreContent = (): React.ReactElement => {
>
Save
- Cancel
+ closeModal("datastream")}>Cancel
>
);
diff --git a/client/components/edit/datastream/DatastreamLicenseContent.test.tsx b/client/components/edit/datastream/DatastreamLicenseContent.test.tsx
index 03d9395cb..bce7579c9 100644
--- a/client/components/edit/datastream/DatastreamLicenseContent.test.tsx
+++ b/client/components/edit/datastream/DatastreamLicenseContent.test.tsx
@@ -12,6 +12,12 @@ jest.mock("../../../context/EditorContext", () => ({
return mockUseEditorContext();
},
}));
+const mockUseGlobalContext = jest.fn();
+jest.mock("../../../context/GlobalContext", () => ({
+ useGlobalContext: () => {
+ return mockUseGlobalContext();
+ },
+}));
const mockUseDatastreamOperation = jest.fn();
jest.mock("../../../hooks/useDatastreamOperation", () => () => {
return mockUseDatastreamOperation();
@@ -19,6 +25,7 @@ jest.mock("../../../hooks/useDatastreamOperation", () => () => {
describe("DatastreamLicenseContent", () => {
let editorValues;
+ let globalValues;
let datastreamOperationValues;
beforeEach(() => {
editorValues = {
@@ -29,8 +36,10 @@ describe("DatastreamLicenseContent", () => {
},
},
},
+ };
+ globalValues = {
action: {
- toggleDatastreamModal: jest.fn(),
+ closeModal: jest.fn(),
},
};
datastreamOperationValues = {
@@ -38,6 +47,7 @@ describe("DatastreamLicenseContent", () => {
getLicenseKey: jest.fn(),
};
mockUseEditorContext.mockReturnValue(editorValues);
+ mockUseGlobalContext.mockReturnValue(globalValues);
mockUseDatastreamOperation.mockReturnValue(datastreamOperationValues);
});
@@ -55,4 +65,13 @@ describe("DatastreamLicenseContent", () => {
expect(datastreamOperationValues.getLicenseKey).toHaveBeenCalled();
expect(datastreamOperationValues.uploadLicense).toHaveBeenCalled();
});
+
+ it("can be canceled", async () => {
+ await act(async () => {
+ await render();
+ });
+ await fireEvent.click(screen.getByText("Cancel"));
+ expect(datastreamOperationValues.uploadLicense).not.toHaveBeenCalled();
+ expect(globalValues.action.closeModal).toHaveBeenCalledWith("datastream");
+ });
});
diff --git a/client/components/edit/datastream/DatastreamLicenseContent.tsx b/client/components/edit/datastream/DatastreamLicenseContent.tsx
index 25c9eb9eb..4c546658d 100644
--- a/client/components/edit/datastream/DatastreamLicenseContent.tsx
+++ b/client/components/edit/datastream/DatastreamLicenseContent.tsx
@@ -9,12 +9,15 @@ import Radio from "@mui/material/Radio";
import RadioGroup from "@mui/material/RadioGroup";
import useDatastreamOperation from "../../../hooks/useDatastreamOperation";
import { useEditorContext } from "../../../context/EditorContext";
+import { useGlobalContext } from "../../../context/GlobalContext";
const DatastreamLicenseContent = (): React.ReactElement => {
const {
state: { licensesCatalog },
- action: { toggleDatastreamModal },
} = useEditorContext();
+ const {
+ action: { closeModal },
+ } = useGlobalContext();
const { uploadLicense, getLicenseKey } = useDatastreamOperation();
const [licenseKey, setLicenseKey] = useState("");
useEffect(() => {
@@ -53,7 +56,7 @@ const DatastreamLicenseContent = (): React.ReactElement => {
>
Save
- Cancel
+ closeModal("datastream")}>Cancel
>
);
diff --git a/client/components/edit/datastream/DatastreamModal.test.tsx b/client/components/edit/datastream/DatastreamModal.test.tsx
index 2311a2e41..5adba1102 100644
--- a/client/components/edit/datastream/DatastreamModal.test.tsx
+++ b/client/components/edit/datastream/DatastreamModal.test.tsx
@@ -10,28 +10,40 @@ jest.mock("../../../context/EditorContext", () => ({
return mockUseEditorContext();
},
}));
+const mockUseGlobalContext = jest.fn();
+jest.mock("../../../context/GlobalContext", () => ({
+ useGlobalContext: () => {
+ return mockUseGlobalContext();
+ },
+}));
jest.mock("./DatastreamUploadModalContent", () => () => "DatastreamUploadModalContent");
jest.mock("./DatastreamDeleteModalContent", () => () => "DatastreamDeleteModalContent");
describe("DatastreamModal", () => {
let editorValues;
+ let globalValues;
beforeEach(() => {
editorValues = {
state: {
datastreamModalState: "",
- isDatastreamModalOpen: true,
},
+ };
+ mockUseEditorContext.mockReturnValue(editorValues);
+ globalValues = {
action: {
- toggleDatastreamModal: jest.fn(),
+ closeModal: jest.fn(),
+ isModalOpen: jest.fn(),
},
};
- mockUseEditorContext.mockReturnValue(editorValues);
+ mockUseGlobalContext.mockReturnValue(globalValues);
+ globalValues.action.isModalOpen.mockReturnValue(true);
});
it("toggles the datastreamModal", async () => {
render();
await userEvent.setup().click(screen.getByRole("button"));
- expect(editorValues.action.toggleDatastreamModal).toHaveBeenCalled();
+ expect(globalValues.action.isModalOpen).toHaveBeenCalledWith("datastream");
+ expect(globalValues.action.closeModal).toHaveBeenCalledWith("datastream");
});
it("switches to the delete modal content", () => {
@@ -39,6 +51,7 @@ describe("DatastreamModal", () => {
render();
expect(screen.queryAllByText("DatastreamDeleteModalContent")).toHaveLength(1);
+ expect(globalValues.action.isModalOpen).toHaveBeenCalledWith("datastream");
});
it("switches to the upload modal content", () => {
@@ -46,5 +59,6 @@ describe("DatastreamModal", () => {
render();
expect(screen.queryAllByText("DatastreamUploadModalContent")).toHaveLength(1);
+ expect(globalValues.action.isModalOpen).toHaveBeenCalledWith("datastream");
});
});
diff --git a/client/components/edit/datastream/DatastreamModal.tsx b/client/components/edit/datastream/DatastreamModal.tsx
index 9bb28b0ba..db92b513d 100644
--- a/client/components/edit/datastream/DatastreamModal.tsx
+++ b/client/components/edit/datastream/DatastreamModal.tsx
@@ -4,6 +4,7 @@ import DialogTitle from "@mui/material/DialogTitle";
import Grid from "@mui/material/Grid";
import IconButton from "@mui/material/IconButton";
import CloseIcon from "@mui/icons-material/Close";
+import { useGlobalContext } from "../../../context/GlobalContext";
import { useEditorContext } from "../../../context/EditorContext";
import DatastreamUploadModalContent from "./DatastreamUploadModalContent";
import DatastreamDeleteModalContent from "./DatastreamDeleteModalContent";
@@ -23,15 +24,17 @@ const DatastreamModalContent = ({ datastreamModalState }: { datastreamModalState
const DatastreamModal = (): React.ReactElement => {
const {
- state: { datastreamModalState, isDatastreamModalOpen },
- action: { toggleDatastreamModal },
+ state: { datastreamModalState },
} = useEditorContext();
+ const {
+ action: { closeModal, isModalOpen },
+ } = useGlobalContext();
return (