Skip to content

Commit

Permalink
Refactored notifcations
Browse files Browse the repository at this point in the history
  • Loading branch information
rmathis committed Nov 17, 2022
1 parent d8a4cb3 commit 859cbb7
Show file tree
Hide file tree
Showing 40 changed files with 408 additions and 181 deletions.
137 changes: 67 additions & 70 deletions ui/src/app/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import Header from './core/components/Header';
import { UserProvider } from './core/user/UserContext';
import { Metadata } from './metadata/Metadata';
import { Attribute } from './metadata/Attribute';
import { Notifications } from './notifications/hoc/Notifications';
import { NotificationList } from './notifications/component/NotificationList';
import { UserConfirmation, ConfirmWindow } from './core/components/UserConfirmation';
import { NewSource } from './metadata/new/NewSource';
Expand Down Expand Up @@ -63,75 +62,73 @@ function App() {
return (
<div className="app-root d-flex flex-column justify-content-between">
<HttpProvider options={httpOptions}>
<Notifications>
<UserProvider>
<I18nProvider>
<SessionModal show={showTimeout}>
<Button variant="primary" onClick={() => window.location.reload()}>Log in</Button>
</SessionModal>
<Contention>
<UserConfirmation>
{(message, confirm, confirmCallback, setConfirm, getConfirmation) =>
<Router getUserConfirmation={getConfirmation} basename={BASE_PATH}>
<ConfirmWindow message={message} confirm={confirm} confirmCallback={confirmCallback} setConfirm={setConfirm} />
<QueryParamProvider ReactRouterRoute={Route}>
<Header />
<main className="pad-content">
<Switch>
<Route exact path="/">
<Redirect to="/dashboard" />
</Route>
<Route path="/dashboard" component={Dashboard} />
<Route path="/metadata/source/new" component={NewSource} />
<Route path="/dynamic-registration" render={() =>
<DynamicRegistration />
} />
<Route path="/metadata/provider/new" render={() =>
<ProtectRoute redirectTo="/dashboard">
<NewProvider />
</ProtectRoute>
} />
<Route path="/metadata/attributes" render={() =>
<ProtectRoute redirectTo="/dashboard">
<Attribute />
</ProtectRoute>
} />
<Route path="/metadata/provider/:id/filter" render={() =>
<ProtectRoute redirectTo="/dashboard">
<Filter />
</ProtectRoute>
} />
<Route path="/metadata/:type/:id" component={Metadata} />
<Route path="/roles" render={() =>
<ProtectRoute redirectTo="/dashboard">
<Roles />
</ProtectRoute>
} />
<Route path="/groups" render={() =>
<ProtectRoute redirectTo="/dashboard">
<Groups />
</ProtectRoute>
} />
<Route path="/configurations" render={() =>
<ProtectRoute redirectTo="/dashboard">
<IdpConfiguration />
</ProtectRoute>
} />
<Route path="*">
<Redirect to="/dashboard" />
</Route>
</Switch>
<NotificationList />
</main>
<Footer />
</QueryParamProvider>
</Router>
}
</UserConfirmation>
</Contention>
</I18nProvider>
</UserProvider>
</Notifications>
<UserProvider>
<I18nProvider>
<SessionModal show={showTimeout}>
<Button variant="primary" onClick={() => window.location.reload()}>Log in</Button>
</SessionModal>
<Contention>
<UserConfirmation>
{(message, confirm, confirmCallback, setConfirm, getConfirmation) =>
<Router getUserConfirmation={getConfirmation} basename={BASE_PATH}>
<ConfirmWindow message={message} confirm={confirm} confirmCallback={confirmCallback} setConfirm={setConfirm} />
<QueryParamProvider ReactRouterRoute={Route}>
<Header />
<main className="pad-content">
<Switch>
<Route exact path="/">
<Redirect to="/dashboard" />
</Route>
<Route path="/dashboard" component={Dashboard} />
<Route path="/metadata/source/new" component={NewSource} />
<Route path="/dynamic-registration" render={() =>
<DynamicRegistration />
} />
<Route path="/metadata/provider/new" render={() =>
<ProtectRoute redirectTo="/dashboard">
<NewProvider />
</ProtectRoute>
} />
<Route path="/metadata/attributes" render={() =>
<ProtectRoute redirectTo="/dashboard">
<Attribute />
</ProtectRoute>
} />
<Route path="/metadata/provider/:id/filter" render={() =>
<ProtectRoute redirectTo="/dashboard">
<Filter />
</ProtectRoute>
} />
<Route path="/metadata/:type/:id" component={Metadata} />
<Route path="/roles" render={() =>
<ProtectRoute redirectTo="/dashboard">
<Roles />
</ProtectRoute>
} />
<Route path="/groups" render={() =>
<ProtectRoute redirectTo="/dashboard">
<Groups />
</ProtectRoute>
} />
<Route path="/configurations" render={() =>
<ProtectRoute redirectTo="/dashboard">
<IdpConfiguration />
</ProtectRoute>
} />
<Route path="*">
<Redirect to="/dashboard" />
</Route>
</Switch>
<NotificationList />
</main>
<Footer />
</QueryParamProvider>
</Router>
}
</UserConfirmation>
</Contention>
</I18nProvider>
</UserProvider>
</HttpProvider>
</div>
);
Expand Down
6 changes: 3 additions & 3 deletions ui/src/app/admin/container/EditConfiguration.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
import React from 'react';

import { useDispatch } from 'react-redux';
import { Prompt, useHistory, useParams } from 'react-router-dom';
import Translate from '../../i18n/components/translate';
import { useConfiguration } from '../hooks';
import { ConfigurationForm } from '../component/ConfigurationForm';

import { createNotificationAction, NotificationTypes, useNotificationDispatcher } from '../../notifications/hoc/Notifications';
import { createNotificationAction, NotificationTypes } from '../../store/notifications/NotificationSlice';
import { useTranslator } from '../../i18n/hooks';
import { PropertiesProvider } from '../hoc/PropertiesProvider';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faSpinner } from '@fortawesome/free-solid-svg-icons';

export function EditConfiguration({ configurations }) {
const history = useHistory();
const notifier = useNotificationDispatcher();
const notifier = useDispatch();
const translator = useTranslator();
const { id } = useParams();

Expand Down
7 changes: 4 additions & 3 deletions ui/src/app/admin/container/EditGroup.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React from 'react';

import { useDispatch } from 'react-redux';
import { Prompt, useHistory } from 'react-router-dom';
import { useParams } from 'react-router-dom';
import Translate from '../../i18n/components/translate';
Expand All @@ -9,15 +9,16 @@ import { FormManager } from '../../form/FormManager';

import { GroupForm } from '../component/GroupForm';
import { GroupProvider } from '../hoc/GroupProvider';
import { createNotificationAction, NotificationTypes, useNotificationDispatcher } from '../../notifications/hoc/Notifications';
import { createNotificationAction, NotificationTypes } from '../../store/notifications/NotificationSlice';
import { useTranslator } from '../../i18n/hooks';
import { BASE_PATH } from '../../App.constant';


export function EditGroup({ groups }) {

const { id } = useParams();

const notifier = useNotificationDispatcher();
const notifier = useDispatch();
const translator = useTranslator();

const history = useHistory();
Expand Down
5 changes: 3 additions & 2 deletions ui/src/app/admin/container/EditRole.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,16 @@ import { FormManager } from '../../form/FormManager';

import { RoleForm } from '../component/RoleForm';
import { RoleProvider } from '../hoc/RoleProvider';
import { createNotificationAction, NotificationTypes, useNotificationDispatcher } from '../../notifications/hoc/Notifications';
import { createNotificationAction, NotificationTypes } from '../../store/notifications/NotificationSlice';
import { useTranslator } from '../../i18n/hooks';
import { BASE_PATH } from '../../App.constant';
import { useDispatch } from 'react-redux';

export function EditRole() {

const { id } = useParams();

const notifier = useNotificationDispatcher();
const notifier = useDispatch();
const translator = useTranslator();

const history = useHistory();
Expand Down
13 changes: 8 additions & 5 deletions ui/src/app/admin/container/MetadataActions.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import React from 'react';
import React, { useCallback } from 'react';
import { DeleteConfirmation } from '../../core/components/DeleteConfirmation';
import { useMetadataActivator, useMetadataApprover, useMetadataEntity } from '../../metadata/hooks/api';

import { NotificationContext, createNotificationAction, NotificationTypes } from '../../notifications/hoc/Notifications';
import { createNotificationAction, NotificationTypes } from '../../store/notifications/NotificationSlice';
import { useApproveSourceMutation, useDeleteSourceMutation, useEnableSourceMutation } from '../../store/metadata/SourceSlice';
import { useDispatch } from 'react-redux';

export function MetadataActions ({type, children}) {

const { dispatch } = React.useContext(NotificationContext);
const dispatch = useDispatch();

const { del, response } = useMetadataEntity(type, {
cachePolicy: 'no-cache'
Expand Down Expand Up @@ -50,7 +51,7 @@ export function MetadataActions ({type, children}) {
}
}

const toast = (message, type) => dispatch(createNotificationAction(message, type));
const toast = useCallback((message, type) => dispatch(createNotificationAction(message, type)), [dispatch]);

const toastApproveSuccess = (type, enabled) => toast(`Metadata ${type} has been ${enabled ? 'approved' : 'unapproved'}.`);
const toastEnableSuccess = (type, enabled) => toast(`Metadata ${type} has been ${enabled ? 'enabled' : 'disabled'}.`);
Expand All @@ -62,7 +63,9 @@ export function MetadataActions ({type, children}) {
const [deleteSource] = useDeleteSourceMutation();

const remove = type === 'source' ?
(id) => deleteSource({id}) :
(id, cb) => {
deleteSource({id}).then(() => cb());
} :
deleteEntity;
const enable = type === 'source' ?
({id}, enabled) => enableSource({id, enabled}) :
Expand Down
5 changes: 3 additions & 2 deletions ui/src/app/admin/container/NewConfiguration.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,15 @@ import { useConfiguration } from '../hooks';
import { Schema } from '../../form/Schema';
import { ConfigurationForm } from '../component/ConfigurationForm';

import { createNotificationAction, NotificationTypes, useNotificationDispatcher } from '../../notifications/hoc/Notifications';
import { createNotificationAction, NotificationTypes } from '../../store/notifications/NotificationSlice';
import { useTranslator } from '../../i18n/hooks';
import { BASE_PATH } from '../../App.constant';
import { PropertiesProvider } from '../hoc/PropertiesProvider';
import { useDispatch } from 'react-redux';

export function NewConfiguration({ configurations }) {
const history = useHistory();
const notifier = useNotificationDispatcher();
const notifier = useDispatch();
const translator = useTranslator();

const { post, response, loading } = useConfiguration({});
Expand Down
5 changes: 3 additions & 2 deletions ui/src/app/admin/container/NewGroup.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,14 @@ import { Schema } from '../../form/Schema';
import { FormManager } from '../../form/FormManager';
import { GroupForm } from '../component/GroupForm';

import { createNotificationAction, NotificationTypes, useNotificationDispatcher } from '../../notifications/hoc/Notifications';
import { createNotificationAction, NotificationTypes } from '../../store/notifications/NotificationSlice';
import { useTranslator } from '../../i18n/hooks';
import { BASE_PATH } from '../../App.constant';
import { useDispatch } from 'react-redux';

export function NewGroup({ groups }) {
const history = useHistory();
const notifier = useNotificationDispatcher();
const notifier = useDispatch();
const translator = useTranslator();

const { post, response, loading } = useGroups({});
Expand Down
5 changes: 3 additions & 2 deletions ui/src/app/admin/container/NewRole.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,14 @@ import { Schema } from '../../form/Schema';
import { FormManager } from '../../form/FormManager';
import { RoleForm } from '../component/RoleForm';

import { createNotificationAction, NotificationTypes, useNotificationDispatcher } from '../../notifications/hoc/Notifications';
import { createNotificationAction, NotificationTypes } from '../../store/notifications/NotificationSlice';
import { useTranslator } from '../../i18n/hooks';
import { BASE_PATH } from '../../App.constant';
import { useDispatch } from 'react-redux';

export function NewRole() {
const history = useHistory();
const notifier = useNotificationDispatcher();
const notifier = useDispatch();
const translator = useTranslator();

const { post, response, loading } = useRoles({});
Expand Down
3 changes: 0 additions & 3 deletions ui/src/app/admin/container/UserManagement.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,12 @@ import Button from 'react-bootstrap/Button';

import Translate from '../../i18n/components/translate';
import API_BASE_PATH from '../../App.constant';
import { NotificationContext, createNotificationAction} from '../../notifications/hoc/Notifications';
import { useRemoveUserMutation, useSetUserGroupRequestMutation, useSetUserRoleRequestMutation } from '../../store/user/UserSlice';

export default function UserManagement({ users, children, reload}) {

const [roles, setRoles] = React.useState([]);

const { dispatch } = React.useContext(NotificationContext);

const { get, response, loading } = useFetch(`${API_BASE_PATH}`, {});

async function loadRoles() {
Expand Down
5 changes: 3 additions & 2 deletions ui/src/app/admin/hoc/ConfigurationsProvider.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import React from 'react';
import { useConfigurations } from '../hooks';
import { createNotificationAction, NotificationTypes, useNotificationDispatcher } from '../../notifications/hoc/Notifications';
import { createNotificationAction, NotificationTypes } from '../../store/notifications/NotificationSlice';
import { useTranslator } from '../../i18n/hooks';
import { useDispatch } from 'react-redux';

export function ConfigurationsProvider({ children, cache = 'no-cache' }) {

const [configurations, setConfigurations] = React.useState([]);

const notifier = useNotificationDispatcher();
const notifier = useDispatch();
const translator = useTranslator();

const { get, del, response, loading } = useConfigurations({
Expand Down
5 changes: 3 additions & 2 deletions ui/src/app/admin/hoc/GroupsProvider.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import React from 'react';
import { useGroups } from '../hooks';
import { createNotificationAction, NotificationTypes, useNotificationDispatcher } from '../../notifications/hoc/Notifications';
import { createNotificationAction, NotificationTypes } from '../../store/notifications/NotificationSlice';
import { useTranslator } from '../../i18n/hooks';
import { useDispatch } from 'react-redux';

export function GroupsProvider({ children, cache = 'no-cache' }) {

const [groups, setGroups] = React.useState([]);

const notifier = useNotificationDispatcher();
const notifier = useDispatch();
const translator = useTranslator();

const { get, del, response, loading } = useGroups({
Expand Down
Loading

0 comments on commit 859cbb7

Please sign in to comment.