From 36617b2f4942f503aaeb040ae867c531dcb9d909 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Mierzwa?= Date: Fri, 12 Jul 2019 21:12:00 +0100 Subject: [PATCH] feat(ui): prefer silence author from the API response over local storage --- ui/src/Components/SilenceModal/SilenceForm.js | 15 +++++++++++++-- .../SilenceModal/SilenceForm.test.js | 19 +++++++++++++++++++ ui/src/Stores/AlertStore.js | 1 + 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/ui/src/Components/SilenceModal/SilenceForm.js b/ui/src/Components/SilenceModal/SilenceForm.js index afded9f01..3987aade8 100644 --- a/ui/src/Components/SilenceModal/SilenceForm.js +++ b/ui/src/Components/SilenceModal/SilenceForm.js @@ -78,7 +78,7 @@ const SilenceForm = observer( ); componentDidMount() { - const { silenceFormStore, settingsStore } = this.props; + const { silenceFormStore } = this.props; // reset startsAt & endsAt on every mount, unless we're editing a silence if (silenceFormStore.data.silenceID === null) { @@ -91,11 +91,22 @@ const SilenceForm = observer( silenceFormStore.data.addEmptyMatcher(); } + this.populateAuthor(); + } + + populateAuthor = action(() => { + const { alertStore, silenceFormStore, settingsStore } = this.props; + + if (alertStore.settings.values.silenceForm.author !== "") { + settingsStore.silenceFormConfig.config.author = + alertStore.settings.values.silenceForm.author; + } + if (silenceFormStore.data.author === "") { silenceFormStore.data.author = settingsStore.silenceFormConfig.config.author; } - } + }); addMore = action(event => { const { silenceFormStore } = this.props; diff --git a/ui/src/Components/SilenceModal/SilenceForm.test.js b/ui/src/Components/SilenceModal/SilenceForm.test.js index ad66db62d..667c255ad 100644 --- a/ui/src/Components/SilenceModal/SilenceForm.test.js +++ b/ui/src/Components/SilenceModal/SilenceForm.test.js @@ -132,6 +132,25 @@ describe(" inputs", () => { expect(silenceFormStore.data.author).toBe("foo@example.com"); }); + it("default author value comes from the API response if present", () => { + alertStore.settings.values.silenceForm.author = "bar@example.com"; + settingsStore.silenceFormConfig.config.author = "foo@example.com"; + const tree = MountedSilenceForm(); + const input = tree.find("input[placeholder='Author']"); + expect(input.props().value).toBe("bar@example.com"); + }); + + it("author value from the API response is saved to the Settings store", () => { + alertStore.settings.values.silenceForm.author = "bar@example.com"; + settingsStore.silenceFormConfig.config.author = ""; + const tree = MountedSilenceForm(); + const input = tree.find("input[placeholder='Author']"); + expect(input.props().value).toBe("bar@example.com"); + expect(settingsStore.silenceFormConfig.config.author).toBe( + "bar@example.com" + ); + }); + it("default author value is empty if nothing is stored in Settings", () => { settingsStore.silenceFormConfig.config.author = ""; const tree = MountedSilenceForm(); diff --git a/ui/src/Stores/AlertStore.js b/ui/src/Stores/AlertStore.js index b7df92ead..185a4e3b6 100644 --- a/ui/src/Stores/AlertStore.js +++ b/ui/src/Stores/AlertStore.js @@ -180,6 +180,7 @@ class AlertStore { valueMapping: {} }, silenceForm: { + author: "", strip: { labels: [] }