mirror of
https://github.com/prymitive/karma
synced 2026-05-05 03:16:51 +00:00
fix(ui): fix silence form reset callbacks
resetProgress() should only be called *after* form is hidden, doing it before will cause it to re-render with UserInput stage which will trigger autocomplete requests
This commit is contained in:
@@ -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(
|
||||
<TooltipWrapper title="Add new silence">
|
||||
<span
|
||||
className="nav-link cursor-pointer"
|
||||
onClick={this.toggleModal}
|
||||
onClick={silenceFormStore.toggle.toggle}
|
||||
>
|
||||
<FontAwesomeIcon icon={faBellSlash} />
|
||||
</span>
|
||||
</TooltipWrapper>
|
||||
</li>
|
||||
<Modal isOpen={silenceFormStore.toggle.visible}>
|
||||
<Modal
|
||||
isOpen={silenceFormStore.toggle.visible}
|
||||
onExited={silenceFormStore.data.resetProgress}
|
||||
>
|
||||
<SilenceModalContent
|
||||
alertStore={alertStore}
|
||||
silenceFormStore={silenceFormStore}
|
||||
settingsStore={settingsStore}
|
||||
onHide={this.toggleModal}
|
||||
onHide={silenceFormStore.toggle.hide}
|
||||
/>
|
||||
</Modal>
|
||||
</React.Fragment>
|
||||
|
||||
@@ -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("<SilenceModal />", () => {
|
||||
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");
|
||||
|
||||
Reference in New Issue
Block a user