From ebf1dcd43a1b24e89dee32b10aa16ab3b72aeb0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Mierzwa?= Date: Sun, 9 Sep 2018 22:12:05 +0100 Subject: [PATCH] fix(ui): silence form needs to be reset every time it's hidden --- .../SilenceModal/SilenceModalContent.js | 16 +++++++++------- ui/src/Components/SilenceModal/index.js | 18 ++++++++++++++---- ui/src/Components/SilenceModal/index.test.js | 9 +++++++++ 3 files changed, 32 insertions(+), 11 deletions(-) diff --git a/ui/src/Components/SilenceModal/SilenceModalContent.js b/ui/src/Components/SilenceModal/SilenceModalContent.js index 038307d90..a975870ff 100644 --- a/ui/src/Components/SilenceModal/SilenceModalContent.js +++ b/ui/src/Components/SilenceModal/SilenceModalContent.js @@ -14,7 +14,8 @@ const SilenceModalContent = observer( static propTypes = { alertStore: PropTypes.object.isRequired, silenceFormStore: PropTypes.object.isRequired, - settingsStore: PropTypes.object.isRequired + settingsStore: PropTypes.object.isRequired, + onHide: PropTypes.func.isRequired }; componentDidMount() { @@ -26,7 +27,12 @@ const SilenceModalContent = observer( } render() { - const { alertStore, silenceFormStore, settingsStore } = this.props; + const { + alertStore, + silenceFormStore, + settingsStore, + onHide + } = this.props; return ReactDOM.createPortal(
@@ -34,11 +40,7 @@ const SilenceModalContent = observer(
Add new silence
-
diff --git a/ui/src/Components/SilenceModal/index.js b/ui/src/Components/SilenceModal/index.js index 77c24c20b..5ada556d4 100644 --- a/ui/src/Components/SilenceModal/index.js +++ b/ui/src/Components/SilenceModal/index.js @@ -18,6 +18,18 @@ const SilenceModal = observer( settingsStore: PropTypes.object.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(); + } + }; + componentDidUpdate() { const { silenceFormStore } = this.props; @@ -37,10 +49,7 @@ const SilenceModal = observer( return (
  • - +
  • @@ -49,6 +58,7 @@ const SilenceModal = observer( alertStore={alertStore} silenceFormStore={silenceFormStore} settingsStore={settingsStore} + onHide={this.toggleModal} /> ) : null}
    diff --git a/ui/src/Components/SilenceModal/index.test.js b/ui/src/Components/SilenceModal/index.test.js index ad858cf0e..b1aa3d359 100644 --- a/ui/src/Components/SilenceModal/index.test.js +++ b/ui/src/Components/SilenceModal/index.test.js @@ -93,4 +93,13 @@ describe("", () => { tree.unmount(); expect(document.body.className.split(" ")).not.toContain("modal-open"); }); + + it("inProgress is set to false after modal is hidden", () => { + silenceFormStore.toggle.visible = true; + const tree = MountedSilenceModal(); + silenceFormStore.data.inProgress = true; + const toggle = tree.find("button.close"); + toggle.simulate("click"); + expect(silenceFormStore.data.inProgress).toBe(false); + }); });