diff --git a/package.json b/package.json
index 778cc2eea..50369a1f7 100644
--- a/package.json
+++ b/package.json
@@ -79,6 +79,7 @@
"react-style-proptype": "3.1.0",
"react-tabs": "2.1.1",
"react-test-renderer": "16.2.0",
+ "react-tooltip": "3.4.0",
"redux": "3.7.0",
"redux-mock-store": "^1.2.3",
"redux-throttle": "0.1.1",
diff --git a/src/components/button/button.jsx b/src/components/button/button.jsx
index ae322d10f..59b39668f 100644
--- a/src/components/button/button.jsx
+++ b/src/components/button/button.jsx
@@ -9,23 +9,31 @@ const ButtonComponent = ({
onClick,
children,
...props
-}) => (
-
- {children}
-
-);
+}) => {
+ if (props.disabled === true) {
+ onClick = function () {};
+ }
+
+ return (
+
+ {children}
+
+ );
+};
ButtonComponent.propTypes = {
children: PropTypes.node,
className: PropTypes.string,
+ disabled: PropTypes.bool,
onClick: PropTypes.func.isRequired
};
+
export default ButtonComponent;
diff --git a/src/components/coming-soon/aww-cat.png b/src/components/coming-soon/aww-cat.png
new file mode 100644
index 000000000..bddfb8de9
Binary files /dev/null and b/src/components/coming-soon/aww-cat.png differ
diff --git a/src/components/coming-soon/coming-soon.css b/src/components/coming-soon/coming-soon.css
new file mode 100644
index 000000000..7c3bdeb14
--- /dev/null
+++ b/src/components/coming-soon/coming-soon.css
@@ -0,0 +1,68 @@
+/*
+ * NOTE: the copious use of `important` is needed to overwrite
+ * the default tooltip styling, and is required by the 3rd party
+ * library being used, `react-tooltip`
+ */
+
+@import "../../css/colors.css";
+
+.coming-soon {
+ background-color: $data-primary !important;
+ border: 1px solid hsla(0, 0%, 0%, .1) !important;
+ border-radius: .25rem !important;
+ box-shadow: 0 0 .5rem hsla(0, 0%, 0%, .25) !important;
+ padding: .75rem 1rem !important;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif !important;
+ font-size: 1rem !important;
+ line-height: 1.25rem !important;
+ z-index: 100 !important;
+}
+
+.coming-soon:after {
+ content: "";
+ border-top: 1px solid hsla(0, 0%, 0%, .1) !important;
+ border-left: 0 !important;
+ border-bottom: 0 !important;
+ border-right: 1px solid hsla(0, 0%, 0%, .1) !important;
+ border-radius: .25rem;
+ background-color: $data-primary !important;
+ height: 1rem !important;
+ width: 1rem !important;
+}
+
+.show,
+.show:before,
+.show:after {
+ opacity: 1 !important;
+}
+
+.left:after {
+ margin-top: -.5rem !important;
+ right: -.5rem !important;
+ transform: rotate(45deg) !important;
+}
+
+.right:after {
+ margin-top: -.5rem !important;
+ left: -.5rem !important;
+ transform: rotate(-135deg) !important;
+}
+
+.top:after {
+ margin-right: -.5rem !important;
+ bottom: -.5rem !important;
+ transform: rotate(135deg) !important;
+}
+
+.bottom:after {
+ margin-left: -.5rem !important;
+ top: -.5rem !important;
+ transform: rotate(-45deg) !important;
+}
+
+.coming-soon-image {
+ margin-left: .125rem;
+ width: 1.25rem;
+ height: 1.25rem;
+ vertical-align: middle;
+}
diff --git a/src/components/coming-soon/coming-soon.jsx b/src/components/coming-soon/coming-soon.jsx
new file mode 100644
index 000000000..e16ae80be
--- /dev/null
+++ b/src/components/coming-soon/coming-soon.jsx
@@ -0,0 +1,143 @@
+import bindAll from 'lodash.bindall';
+import classNames from 'classnames';
+import {defineMessages, injectIntl, intlShape, FormattedMessage} from 'react-intl';
+import PropTypes from 'prop-types';
+import React from 'react';
+import ReactTooltip from 'react-tooltip';
+
+import styles from './coming-soon.css';
+
+import awwCatIcon from './aww-cat.png';
+import coolCatIcon from './cool-cat.png';
+
+const messages = defineMessages({
+ message1: {
+ defaultMessage: 'Don\'t worry, we\'re on it {emoji}',
+ description: 'One of the "coming soon" random messages for yet-to-be-done features',
+ id: 'gui.comingSoon.message1'
+ },
+ message2: {
+ defaultMessage: 'Coming Soon...',
+ description: 'One of the "coming soon" random messages for yet-to-be-done features',
+ id: 'gui.comingSoon.message2'
+ },
+ message3: {
+ defaultMessage: 'We\'re working on it {emoji}',
+ description: 'One of the "coming soon" random messages for yet-to-be-done features',
+ id: 'gui.comingSoon.message3'
+ }
+});
+
+class ComingSoonContent extends React.Component {
+ constructor (props) {
+ super(props);
+ bindAll(this, [
+ 'setHide',
+ 'setShow',
+ 'getRandomMessage'
+ ]);
+ this.state = {
+ isShowing: false
+ };
+ }
+ setShow () {
+ // needed to set the opacity to 1, since the default is .9 on show
+ this.setState({isShowing: true});
+ }
+ setHide () {
+ this.setState({isShowing: false});
+ }
+ getRandomMessage () {
+ // randomly chooses a messages from `messages` to display in the tooltip.
+ const images = [awwCatIcon, coolCatIcon];
+ const messageNumber = Math.floor(Math.random() * Object.keys(messages).length) + 1;
+ const imageNumber = Math.floor(Math.random() * Object.keys(images).length);
+ return (
+