From 2947793aa049e9809f6282d9701649cf8396ba67 Mon Sep 17 00:00:00 2001 From: Ryan Mathis Date: Fri, 28 Oct 2022 09:48:33 -0700 Subject: [PATCH] Fixed issue 2437 --- ui/src/app/admin/container/ApprovalActions.js | 31 ------------------- ui/src/app/admin/container/MetadataActions.js | 26 ++++++++++++++-- ui/src/app/dashboard/view/ActionsTab.js | 17 +++++----- ui/src/app/dashboard/view/Dashboard.js | 2 +- ui/src/app/dashboard/view/SourcesTab.js | 2 +- ui/src/app/metadata/view/MetadataOptions.js | 21 +++++-------- 6 files changed, 44 insertions(+), 55 deletions(-) delete mode 100644 ui/src/app/admin/container/ApprovalActions.js diff --git a/ui/src/app/admin/container/ApprovalActions.js b/ui/src/app/admin/container/ApprovalActions.js deleted file mode 100644 index c4b9ae3ed..000000000 --- a/ui/src/app/admin/container/ApprovalActions.js +++ /dev/null @@ -1,31 +0,0 @@ -import React from 'react'; -import { useMetadataApprover } from '../../metadata/hooks/api'; - -import { NotificationContext, createNotificationAction, NotificationTypes } from '../../notifications/hoc/Notifications'; - -export function ApprovalActions ({type = 'source', children}) { - - const { dispatch } = React.useContext(NotificationContext); - - const approver = useMetadataApprover('source'); - - async function approveEntity(entity, enabled, cb = () => {}) { - await approver.patch(`${type === 'source' ? entity.id : entity.resourceId}/${enabled ? 'approve' : 'unapprove'}`); - if (approver?.response.ok) { - dispatch(createNotificationAction( - `Metadata ${type} has been ${enabled ? 'approved' : 'unapproved'}.` - )); - cb(); - } else { - const { errorCode, errorMessage, cause } = approver?.response?.data; - dispatch(createNotificationAction( - `${errorCode}: ${errorMessage} ${cause ? `-${cause}` : ''}`, - NotificationTypes.ERROR - )); - } - } - - return ( - <>{children(approveEntity)} - ); -} \ No newline at end of file diff --git a/ui/src/app/admin/container/MetadataActions.js b/ui/src/app/admin/container/MetadataActions.js index 4ed567d23..7fdcd752b 100644 --- a/ui/src/app/admin/container/MetadataActions.js +++ b/ui/src/app/admin/container/MetadataActions.js @@ -1,6 +1,6 @@ import React from 'react'; import { DeleteConfirmation } from '../../core/components/DeleteConfirmation'; -import { useMetadataActivator, useMetadataEntity } from '../../metadata/hooks/api'; +import { useMetadataActivator, useMetadataApprover, useMetadataEntity } from '../../metadata/hooks/api'; import { NotificationContext, createNotificationAction, NotificationTypes } from '../../notifications/hoc/Notifications'; @@ -46,10 +46,32 @@ export function MetadataActions ({type, children}) { } } + const approver = useMetadataApprover('source'); + + async function approveEntity(entity, enabled, cb = () => {}) { + await approver.patch(`${type === 'source' ? entity.id : entity.resourceId}/${enabled ? 'approve' : 'unapprove'}`); + if (approver?.response.ok) { + dispatch(createNotificationAction( + `Metadata ${type} has been ${enabled ? 'approved' : 'unapproved'}.` + )); + cb(); + } else { + const { errorCode, errorMessage, cause } = approver?.response?.data; + dispatch(createNotificationAction( + `${errorCode}: ${errorMessage} ${cause ? `-${cause}` : ''}`, + NotificationTypes.ERROR + )); + } + } + return ( {(block) => - <>{children(enableEntity, (id, cb) => block(() => deleteEntity(id, cb)))} + <>{children({ + enable: enableEntity, + remove: (id, cb) => block(() => deleteEntity(id, cb)), + approve: approveEntity + })} } ); diff --git a/ui/src/app/dashboard/view/ActionsTab.js b/ui/src/app/dashboard/view/ActionsTab.js index 9a3ace211..dcc6a9122 100644 --- a/ui/src/app/dashboard/view/ActionsTab.js +++ b/ui/src/app/dashboard/view/ActionsTab.js @@ -10,7 +10,6 @@ import Nav from 'react-bootstrap/Nav'; import { Switch, Route, useRouteMatch, Redirect } from 'react-router-dom'; import { NavLink } from 'react-router-dom'; import Badge from 'react-bootstrap/Badge'; -import { ApprovalActions } from '../../admin/container/ApprovalActions'; export function ActionsTab({ sources, users, approvals, reloadSources, reloadUsers, reloadApprovals, loadingSources, loadingUsers, loadingApprovals }) { @@ -62,19 +61,23 @@ export function ActionsTab({ sources, users, approvals, reloadSources, reloadUse - - {(approve) => - approve(s, e, reloadApprovals)}> + + {({approve, remove}) => + remove(id, reloadApprovals)} + onApprove={(s, e) => approve(s, e, reloadApprovals)}> {loadingApprovals &&
}
} -
+ } /> - {(enable) => - enable(s, e, reloadSources)}> + {({enable, remove}) => + remove(id, reloadSources)} + onEnable={(s, e) => enable(s, e, reloadSources)}> {loadingSources &&
}
} diff --git a/ui/src/app/dashboard/view/Dashboard.js b/ui/src/app/dashboard/view/Dashboard.js index 76e9c5cbe..496ad2da9 100644 --- a/ui/src/app/dashboard/view/Dashboard.js +++ b/ui/src/app/dashboard/view/Dashboard.js @@ -69,7 +69,7 @@ export function Dashboard () { loadUsers(); } loadApprovals(); - }, [location]); + }, [location, isAdmin]); React.useEffect(() => { setActions((users?.length || 0) + (sources?.length || 0) + approvals.length); diff --git a/ui/src/app/dashboard/view/SourcesTab.js b/ui/src/app/dashboard/view/SourcesTab.js index dbeeb0a06..20e9adb19 100644 --- a/ui/src/app/dashboard/view/SourcesTab.js +++ b/ui/src/app/dashboard/view/SourcesTab.js @@ -65,7 +65,7 @@ export function SourcesTab () { {(searched) => - {(enable, remove) => + {({enable, remove}) => remove(id, loadSources)} diff --git a/ui/src/app/metadata/view/MetadataOptions.js b/ui/src/app/metadata/view/MetadataOptions.js index 28f2b3d1e..b59a48946 100644 --- a/ui/src/app/metadata/view/MetadataOptions.js +++ b/ui/src/app/metadata/view/MetadataOptions.js @@ -21,7 +21,6 @@ import { MetadataFilterTypes } from '../domain/filter'; import { useMetadataSchema } from '../hooks/schema'; import { FilterableProviders } from '../domain/provider'; import { useCanEnable, useIsAdmin, useIsApprover } from '../../core/user/UserContext'; -import { ApprovalActions } from '../../admin/container/ApprovalActions'; export function MetadataOptions ({reload}) { @@ -59,7 +58,7 @@ export function MetadataOptions ({reload}) { return ( - {(enable, remove) => + {({enable, remove, approve}) => <>