diff --git a/ui/src/Components/Modal/index.js b/ui/src/Components/Modal/index.js index 7c15445af..1f95bbade 100644 --- a/ui/src/Components/Modal/index.js +++ b/ui/src/Components/Modal/index.js @@ -42,11 +42,11 @@ const Modal = observer( } render() { - const { isOpen, children } = this.props; + const { isOpen, children, ...props } = this.props; return ReactDOM.createPortal( - +
{children}
diff --git a/ui/src/Components/Modal/index.test.js b/ui/src/Components/Modal/index.test.js index 758373ee0..bcd9200a3 100644 --- a/ui/src/Components/Modal/index.test.js +++ b/ui/src/Components/Modal/index.test.js @@ -28,4 +28,15 @@ describe("", () => { tree.unmount(); expect(document.body.className.split(" ")).not.toContain("modal-open"); }); + + it("passes extra props down to the MountModal animation component", () => { + const onExited = jest.fn(); + const tree = mount( + +
+ + ); + const mountModal = tree.find("MountModal"); + expect(mountModal.props().onExited).toBe(onExited); + }); }); diff --git a/ui/src/Components/SilenceModal/index.js b/ui/src/Components/SilenceModal/index.js index b70f13809..400a261d2 100644 --- a/ui/src/Components/SilenceModal/index.js +++ b/ui/src/Components/SilenceModal/index.js @@ -23,18 +23,6 @@ const SilenceModal = observer( settingsStore: PropTypes.instanceOf(Settings).isRequired }; - toggleModal = () => { - const { silenceFormStore } = this.props; - - silenceFormStore.toggle.toggle(); - if (silenceFormStore.toggle.visible === false) { - // need to reset progress if we're hiding modal - // SilenceSubmitProgress sends a fetch on mount which would result in - // duplicate silences if we didn't reset state of the form on destroy - silenceFormStore.data.resetProgress(); - } - }; - render() { const { alertStore, silenceFormStore, settingsStore } = this.props; @@ -44,18 +32,21 @@ const SilenceModal = observer( - + diff --git a/ui/src/Components/SilenceModal/index.test.js b/ui/src/Components/SilenceModal/index.test.js index c2aaef799..0954eb3e0 100644 --- a/ui/src/Components/SilenceModal/index.test.js +++ b/ui/src/Components/SilenceModal/index.test.js @@ -4,7 +4,7 @@ import { mount } from "enzyme"; import { AlertStore } from "Stores/AlertStore"; import { Settings } from "Stores/Settings"; -import { SilenceFormStore } from "Stores/SilenceFormStore"; +import { SilenceFormStore, SilenceFormStage } from "Stores/SilenceFormStore"; import { SilenceModal } from "."; let alertStore; @@ -77,6 +77,24 @@ describe("", () => { expect(tree.find("SilenceModalContent")).toHaveLength(0); }); + it("resets progress on hide", () => { + const tree = MountedSilenceModal(); + const toggle = tree.find(".nav-link"); + toggle.simulate("click"); + + // mark form as dirty, resetProgress() should change this value to false + silenceFormStore.data.wasValidated = true; + + // click to hide + toggle.simulate("click"); + // wait for animation to finish + jest.runOnlyPendingTimers(); + tree.update(); + // form should be reset + expect(silenceFormStore.data.currentStage).toBe(SilenceFormStage.UserInput); + expect(silenceFormStore.data.wasValidated).toBe(false); + }); + it("'modal-open' class is appended to body node when modal is visible", () => { const tree = MountedSilenceModal(); const toggle = tree.find(".nav-link");