+ {messages.filter(message => !topic || message.topic === topic).map(message => (
+
remove(message.id)}
+ >
+ {message.text}
+
+ ))}
+
+ );
+}
+
+AlertList.propTypes = {
+ className: PropTypes.string,
+ topic: PropTypes.string,
+};
+
+AlertList.defaultProps = {
+ topic: null,
+ className: null,
+};
diff --git a/src/user-messages/UserMessagesContext.js b/src/user-messages/UserMessagesContext.js
new file mode 100644
index 00000000..490e34dd
--- /dev/null
+++ b/src/user-messages/UserMessagesContext.js
@@ -0,0 +1,5 @@
+import React from 'react';
+
+const UserMessagesContext = React.createContext({});
+
+export default UserMessagesContext;
diff --git a/src/user-messages/UserMessagesProvider.jsx b/src/user-messages/UserMessagesProvider.jsx
new file mode 100644
index 00000000..1129c573
--- /dev/null
+++ b/src/user-messages/UserMessagesProvider.jsx
@@ -0,0 +1,44 @@
+import React, { useState } from 'react';
+import PropTypes from 'prop-types';
+
+import UserMessagesContext from './UserMessagesContext';
+
+export default function UserMessagesProvider({ children }) {
+ const [messages, setMessages] = useState([
+ {
+ code: null,
+ dismissible: true,
+ id: 0,
+ text: 'This is a course level message.',
+ type: 'info',
+ topic: 'course',
+ },
+ ]);
+ const [nextId, setNextId] = useState(1);
+
+ const add = (message) => {
+ setMessages([...messages, { ...message, id: nextId }]);
+ setNextId(nextId + 1);
+ };
+ const remove = id => setMessages(messages.filter(message => message.id !== id));
+
+ const value = {
+ add,
+ remove,
+ messages,
+ };
+
+ return (
+