diff --git a/ui/src/Components/Animations/MountModal/index.js b/ui/src/Components/Animations/MountModal/index.js
new file mode 100644
index 000000000..c4b2446fb
--- /dev/null
+++ b/ui/src/Components/Animations/MountModal/index.js
@@ -0,0 +1,42 @@
+import React from "react";
+import PropTypes from "prop-types";
+
+import { CSSTransition } from "react-transition-group";
+
+import "./index.scss";
+
+const MountModal = ({ children, duration, ...props }) => (
+
+ {children}
+
+);
+MountModal.propTypes = {
+ children: PropTypes.node.isRequired
+};
+
+const MountModalBackdrop = ({ children, duration, ...props }) => (
+
+ {children}
+
+);
+MountModalBackdrop.propTypes = {
+ children: PropTypes.node.isRequired
+};
+
+export { MountModal, MountModalBackdrop };
diff --git a/ui/src/Components/Animations/MountModal/index.scss b/ui/src/Components/Animations/MountModal/index.scss
new file mode 100644
index 000000000..fa9c40525
--- /dev/null
+++ b/ui/src/Components/Animations/MountModal/index.scss
@@ -0,0 +1,49 @@
+@import "~bootstrap/scss/functions";
+@import "~bootstrap/scss/variables";
+
+$duration: 0.2s;
+
+.components-animation-modal-appear,
+.components-animation-modal-enter {
+ opacity: 0.01;
+ transform: translate(0, -25%);
+}
+.components-animation-modal-appear-active,
+.components-animation-modal-enter-active {
+ opacity: 1;
+ transition: transform $duration ease-out, opacity $duration ease-in;
+ transform: translate(0, 0);
+}
+
+.components-animation-modal-exit {
+ opacity: 1;
+ transform: translate(0, 0);
+}
+.components-animation-modal-exit-active {
+ opacity: 0.01;
+ transform: translate(0, -25%);
+ transition: transform $duration ease-in, opacity $duration ease-out;
+}
+
+.components-animation-backdrop-appear,
+.components-animation-backdrop-enter {
+ opacity: 0.01;
+}
+.components-animation-backdrop-appear-active,
+.components-animation-backdrop-enter-active {
+ opacity: $modal-backdrop-opacity;
+ transition: opacity $duration ease-in;
+}
+
+.components-animation-backdrop-enter-done {
+ opacity: $modal-backdrop-opacity;
+ transition: opacity $duration ease-in;
+}
+
+.components-animation-backdrop-exit {
+ opacity: $modal-backdrop-opacity;
+}
+.components-animation-backdrop-exit-active {
+ opacity: 0.01;
+ transition: opacity $duration ease-out;
+}
diff --git a/ui/src/Components/MainModal/MainModalContent.js b/ui/src/Components/MainModal/MainModalContent.js
index 33c58d4f7..67b0d88ab 100644
--- a/ui/src/Components/MainModal/MainModalContent.js
+++ b/ui/src/Components/MainModal/MainModalContent.js
@@ -10,6 +10,7 @@ import { disableBodyScroll, enableBodyScroll } from "body-scroll-lock";
import { AlertStore } from "Stores/AlertStore";
import { Settings } from "Stores/Settings";
import { Configuration } from "./Configuration";
+import { MountModalBackdrop } from "Components/Animations/MountModal";
import { Help } from "./Help";
const Tab = ({ title, active, onClick }) => (
@@ -38,7 +39,8 @@ const MainModalContent = observer(
static propTypes = {
alertStore: PropTypes.instanceOf(AlertStore).isRequired,
settingsStore: PropTypes.instanceOf(Settings).isRequired,
- onHide: PropTypes.func.isRequired
+ onHide: PropTypes.func.isRequired,
+ isVisible: PropTypes.bool.isRequired
};
tab = observable(
@@ -60,43 +62,48 @@ const MainModalContent = observer(
}
render() {
- const { alertStore, settingsStore, onHide } = this.props;
+ const { alertStore, settingsStore, onHide, isVisible } = this.props;
return ReactDOM.createPortal(
-
-
-
-
-
-
-
- {this.tab.current === TabNames.Help ? : null}
- {this.tab.current === TabNames.Configuration ? (
-
- ) : null}
-
-
-
- Version: {alertStore.info.version}
-
+
+
+
+
+
+
+
+
+ {this.tab.current === TabNames.Help ? : null}
+ {this.tab.current === TabNames.Configuration ? (
+
+ ) : null}
+
+
+
+ Version: {alertStore.info.version}
+
+
- ,
+
+
+
+ ,
document.body
);
}
diff --git a/ui/src/Components/MainModal/MainModalContent.test.js b/ui/src/Components/MainModal/MainModalContent.test.js
index dabf4e7c4..f9b033f4a 100644
--- a/ui/src/Components/MainModal/MainModalContent.test.js
+++ b/ui/src/Components/MainModal/MainModalContent.test.js
@@ -28,6 +28,7 @@ const FakeModal = () => {
alertStore={alertStore}
settingsStore={settingsStore}
onHide={onHide}
+ isVisible={true}
/>
);
};
diff --git a/ui/src/Components/MainModal/__snapshots__/MainModalContent.test.js.snap b/ui/src/Components/MainModal/__snapshots__/MainModalContent.test.js.snap
index 19bf61b7c..eff9a7e04 100644
--- a/ui/src/Components/MainModal/__snapshots__/MainModalContent.test.js.snap
+++ b/ui/src/Components/MainModal/__snapshots__/MainModalContent.test.js.snap
@@ -2,7 +2,7 @@
exports[`
matches snapshot 1`] = `
"
-
-
+
-
+
);
}
diff --git a/ui/src/Components/SilenceModal/SilenceModalContent.js b/ui/src/Components/SilenceModal/SilenceModalContent.js
index 6c6cbb3e1..be7109652 100644
--- a/ui/src/Components/SilenceModal/SilenceModalContent.js
+++ b/ui/src/Components/SilenceModal/SilenceModalContent.js
@@ -9,6 +9,7 @@ import { disableBodyScroll, enableBodyScroll } from "body-scroll-lock";
import { AlertStore } from "Stores/AlertStore";
import { SilenceFormStore } from "Stores/SilenceFormStore";
import { Settings } from "Stores/Settings";
+import { MountModalBackdrop } from "Components/Animations/MountModal";
import { SilenceForm } from "./SilenceForm";
import { SilenceSubmitController } from "./SilenceSubmitController";
@@ -38,36 +39,44 @@ const SilenceModalContent = observer(
} = this.props;
return ReactDOM.createPortal(
-
-
-
-
-
- {silenceFormStore.data.silenceID === null
- ? "Add new silence"
- : `Editing silence ${silenceFormStore.data.silenceID}`}
-
-
-
-
- {silenceFormStore.data.inProgress ? (
-
- ) : (
-
- )}
+
+
+
+
+
+
+ {silenceFormStore.data.silenceID === null
+ ? "Add new silence"
+ : `Editing silence ${silenceFormStore.data.silenceID}`}
+
+
+
+
+ {silenceFormStore.data.inProgress ? (
+
+ ) : (
+
+ )}
+
- ,
+
+
+
+ ,
document.body
);
}
diff --git a/ui/src/Components/SilenceModal/index.js b/ui/src/Components/SilenceModal/index.js
index d05e8470d..b615af585 100644
--- a/ui/src/Components/SilenceModal/index.js
+++ b/ui/src/Components/SilenceModal/index.js
@@ -9,7 +9,7 @@ import { faBellSlash } from "@fortawesome/free-solid-svg-icons/faBellSlash";
import { AlertStore } from "Stores/AlertStore";
import { SilenceFormStore } from "Stores/SilenceFormStore";
import { Settings } from "Stores/Settings";
-import { MountFade } from "Components/Animations/MountFade";
+import { MountModal } from "Components/Animations/MountModal";
import { SilenceModalContent } from "./SilenceModalContent";
import "./index.css";
@@ -60,14 +60,14 @@ const SilenceModal = observer(
-
+
-
+
);
}