extends Component {
+ /**
+ * Default values for {@code Notification} component's properties.
+ *
+ * @static
+ */
+ static defaultProps = {
+ appearance: NOTIFICATION_TYPE.NORMAL,
+ isDismissAllowed: true
+ };
+
+ /**
+ * Initializes a new {@code Notification} instance.
+ *
+ * @param {Object} props - The read-only properties with which the new
+ * instance is to be initialized.
+ */
+ constructor(props: P) {
+ super(props);
+
+ // Bind event handler so it is only bound once for every instance.
+ this._onDismissed = this._onDismissed.bind(this);
+ }
+
+ _getDescription: () => Array
+
+ /**
+ * Returns the description array to be displayed.
+ *
+ * @protected
+ * @returns {Array}
+ */
+ _getDescription() {
+ const {
+ description,
+ descriptionArguments,
+ descriptionKey,
+ t
+ } = this.props;
+
+ const descriptionArray = [];
+
+ descriptionKey
+ && descriptionArray.push(t(descriptionKey, descriptionArguments));
+
+ description && descriptionArray.push(description);
+
+ return descriptionArray;
+ }
+
+ _onDismissed: () => void;
+
+ /**
+ * Callback to dismiss the notification.
+ *
+ * @private
+ * @returns {void}
+ */
+ _onDismissed() {
+ this.props.onDismissed(this.props.uid);
+ }
+}
diff --git a/react/features/notifications/components/AbstractNotificationsContainer.js b/react/features/notifications/components/AbstractNotificationsContainer.js
new file mode 100644
index 000000000..8cfd52e24
--- /dev/null
+++ b/react/features/notifications/components/AbstractNotificationsContainer.js
@@ -0,0 +1,146 @@
+// @flow
+
+import { Component } from 'react';
+
+import { getOverlayToRender } from '../../overlay';
+
+import { hideNotification } from '../actions';
+
+export type Props = {
+
+ /**
+ * The notifications to be displayed, with the first index being the
+ * notification at the top and the rest shown below it in order.
+ */
+ _notifications: Array