diff --git a/ui/src/app/admin/container/ApprovalActions.js b/ui/src/app/admin/container/ApprovalActions.js index 2d4119727..c4b9ae3ed 100644 --- a/ui/src/app/admin/container/ApprovalActions.js +++ b/ui/src/app/admin/container/ApprovalActions.js @@ -1,6 +1,5 @@ import React from 'react'; -import { DeleteConfirmation } from '../../core/components/DeleteConfirmation'; -import { useMetadataApprover, useMetadataEntity } from '../../metadata/hooks/api'; +import { useMetadataApprover } from '../../metadata/hooks/api'; import { NotificationContext, createNotificationAction, NotificationTypes } from '../../notifications/hoc/Notifications'; @@ -8,37 +7,17 @@ export function ApprovalActions ({type = 'source', children}) { const { dispatch } = React.useContext(NotificationContext); - const { del, response } = useMetadataEntity('source', { - cachePolicy: 'no-cache' - }); - - const activator = useMetadataApprover('source'); + const approver = useMetadataApprover('source'); async function approveEntity(entity, enabled, cb = () => {}) { - await activator.patch(`${type === 'source' ? entity.id : entity.resourceId}/${enabled ? 'approve' : 'unapprove'}`); - if (activator?.response.ok) { + 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 } = activator?.response?.data; - dispatch(createNotificationAction( - `${errorCode}: ${errorMessage} ${cause ? `-${cause}` : ''}`, - NotificationTypes.ERROR - )); - } - } - - async function deleteEntity(id, cb = () => {}) { - await del(`/${id}`); - if (response.ok) { - dispatch(createNotificationAction( - `Metadata ${type} has been deleted.` - )); - cb(); - } else { - const { errorCode, errorMessage, cause } = activator?.response?.data; + const { errorCode, errorMessage, cause } = approver?.response?.data; dispatch(createNotificationAction( `${errorCode}: ${errorMessage} ${cause ? `-${cause}` : ''}`, NotificationTypes.ERROR @@ -47,10 +26,6 @@ export function ApprovalActions ({type = 'source', children}) { } return ( - - {(block) => - <>{children(approveEntity, (id, cb) => block(() => deleteEntity(id, cb)))} - } - + <>{children(approveEntity)} ); } \ No newline at end of file diff --git a/ui/src/app/core/user/UserContext.js b/ui/src/app/core/user/UserContext.js index 2390c4d3a..dc39fc74d 100644 --- a/ui/src/app/core/user/UserContext.js +++ b/ui/src/app/core/user/UserContext.js @@ -75,10 +75,6 @@ function useCanEnable() { return isAdmin || isEnabler; } -function useCanApprove() { - return true; -} - function useIsApprover() { const user = useCurrentUser(); return user.canApprove; @@ -114,7 +110,6 @@ export { useIsAdminOrInGroup, useIsApprover, useCanEnable, - useCanApprove, useCurrentUserLoading, useCurrentUserLoader, useUserGroupRegexValidator, diff --git a/ui/src/app/metadata/domain/source/component/SourceList.js b/ui/src/app/metadata/domain/source/component/SourceList.js index 1ef91e500..b8af68e82 100644 --- a/ui/src/app/metadata/domain/source/component/SourceList.js +++ b/ui/src/app/metadata/domain/source/component/SourceList.js @@ -34,8 +34,8 @@ export default function SourceList({ entities, onDelete, onEnable, onApprove, on Entity ID Author Created Date + Approval Enabled - {onApprove && Approval} {isAdmin && onChangeGroup && Group } {onDelete && isAdmin && @@ -62,38 +62,44 @@ export default function SourceList({ entities, onDelete, onEnable, onApprove, on - {onEnable && (canEnable && source.approved) ? + {onApprove ? onEnable(source, checked)} - checked={source.serviceEnabled} + aria-label={translator(source.approved ? 'label.disapprove' : 'label.approve')} + onChange={({ target: { checked } }) => onApprove(source, checked)} + checked={source.approved} > : - - + + - } + } - {onApprove && + {onEnable && (canEnable && source.approved) ? onApprove(source, checked)} - checked={source.approved} + aria-label={translator(source.serviceEnabled ? 'label.disable' : 'label.enable')} + onChange={({ target: { checked } }) => onEnable(source, checked)} + checked={source.serviceEnabled} > + : + + + + } - } + + {isAdmin && onChangeGroup && diff --git a/ui/src/app/metadata/view/MetadataOptions.js b/ui/src/app/metadata/view/MetadataOptions.js index 73b5a4802..5740e93ca 100644 --- a/ui/src/app/metadata/view/MetadataOptions.js +++ b/ui/src/app/metadata/view/MetadataOptions.js @@ -20,7 +20,8 @@ import { MetadataFilterConfigurationList } from '../domain/filter/component/Meta import { MetadataFilterTypes } from '../domain/filter'; import { useMetadataSchema } from '../hooks/schema'; import { FilterableProviders } from '../domain/provider'; -import { useCanEnable, useIsAdmin } from '../../core/user/UserContext'; +import { useCanEnable, useIsAdmin, useIsApprover } from '../../core/user/UserContext'; +import { ApprovalActions } from '../../admin/container/ApprovalActions'; export function MetadataOptions ({reload}) { @@ -54,6 +55,7 @@ export function MetadataOptions ({reload}) { const canEnable = useCanEnable(); const isAdmin = useIsAdmin(); + const canApprove = useIsApprover(); return ( @@ -78,6 +80,19 @@ export function MetadataOptions ({reload}) { } + {canApprove && + + {(approve) => + + } + + } {type === 'source' && remove && isAdmin &&