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}) =>
<>