@@ -61,10 +68,24 @@ export function ProviderList({ entities, reorder = true, first, last, onOrderUp,
{ provider['@type'] } |
{ provider.createdBy } |
|
-
-
-
-
+ |
+
+ {onEnable && isAdmin ?
+ onEnable(provider, checked)}
+ checked={provider.enabled}
+ >
+
+ :
+
+
+
+ }
+
|
)}
diff --git a/ui/src/app/metadata/domain/provider/definition/DynamicHttpMetadataProviderDefinition.js b/ui/src/app/metadata/domain/provider/definition/DynamicHttpMetadataProviderDefinition.js
index 87ed3bb31..58bb0002b 100644
--- a/ui/src/app/metadata/domain/provider/definition/DynamicHttpMetadataProviderDefinition.js
+++ b/ui/src/app/metadata/domain/provider/definition/DynamicHttpMetadataProviderDefinition.js
@@ -61,9 +61,7 @@ export const DynamicHttpMetadataProviderWizard = {
label: 'label.finished',
index: 5,
initialValues: [],
- fields: [
- 'enabled'
- ]
+ fields: []
}
],
uiSchema: defaultsDeep({
@@ -191,7 +189,6 @@ export const DynamicHttpMetadataProviderEditor = {
'@type',
'xmlId',
'metadataRequestURLConstructionScheme',
- 'enabled',
'requireValidMetadata',
'failFastInitialization'
]
diff --git a/ui/src/app/metadata/domain/provider/definition/FileBackedHttpMetadataProviderDefinition.js b/ui/src/app/metadata/domain/provider/definition/FileBackedHttpMetadataProviderDefinition.js
index 5d2d8e009..4d7146c98 100644
--- a/ui/src/app/metadata/domain/provider/definition/FileBackedHttpMetadataProviderDefinition.js
+++ b/ui/src/app/metadata/domain/provider/definition/FileBackedHttpMetadataProviderDefinition.js
@@ -52,9 +52,7 @@ export const FileBackedHttpMetadataProviderWizard = {
label: 'label.finished',
index: 5,
initialValues: [],
- fields: [
- 'enabled'
- ]
+ fields: []
}
],
uiSchema: defaultsDeep({
@@ -68,12 +66,6 @@ export const FileBackedHttpMetadataProviderWizard = {
'@type'
]
},
- {
- size: 8,
- fields: [
- 'enabled'
- ]
- },
{
size: 8,
fields: [
@@ -181,7 +173,6 @@ export const FileBackedHttpMetadataProviderEditor = {
fields: [
'name',
'@type',
- 'enabled',
'xmlId',
'metadataURL',
'initializeFromBackupFile',
diff --git a/ui/src/app/metadata/domain/provider/definition/FileSystemMetadataProviderDefinition.js b/ui/src/app/metadata/domain/provider/definition/FileSystemMetadataProviderDefinition.js
index 8738ffad2..57d3447af 100644
--- a/ui/src/app/metadata/domain/provider/definition/FileSystemMetadataProviderDefinition.js
+++ b/ui/src/app/metadata/domain/provider/definition/FileSystemMetadataProviderDefinition.js
@@ -35,9 +35,7 @@ export const FileSystemMetadataProviderWizard = {
label: 'label.finished',
index: 4,
initialValues: [],
- fields: [
- 'enabled'
- ]
+ fields: []
}
],
uiSchema: defaultsDeep({
@@ -51,12 +49,6 @@ export const FileSystemMetadataProviderWizard = {
'@type'
]
},
- {
- size: 8,
- fields: [
- 'enabled'
- ]
- },
{
size: 8,
fields: [
@@ -115,7 +107,6 @@ export const FileSystemMetadataProviderEditor = {
'xmlId',
'@type',
'metadataFile',
- 'enabled',
'doInitialization'
],
override: {
@@ -140,7 +131,6 @@ export const FileSystemMetadataProviderEditor = {
type: 'group-lg',
class: ['col-12'],
fields: [
- 'enabled',
'xmlId',
'metadataFile',
'doInitialization'
diff --git a/ui/src/app/metadata/domain/provider/definition/LocalDynamicMetadataProviderDefinition.js b/ui/src/app/metadata/domain/provider/definition/LocalDynamicMetadataProviderDefinition.js
index 339c0c606..eea5d3541 100644
--- a/ui/src/app/metadata/domain/provider/definition/LocalDynamicMetadataProviderDefinition.js
+++ b/ui/src/app/metadata/domain/provider/definition/LocalDynamicMetadataProviderDefinition.js
@@ -35,9 +35,7 @@ export const LocalDynamicMetadataProviderWizard = {
label: 'label.finished',
index: 4,
initialValues: [],
- fields: [
- 'enabled'
- ]
+ fields: []
}
],
uiSchema: defaultsDeep({
@@ -51,12 +49,6 @@ export const LocalDynamicMetadataProviderWizard = {
'@type'
]
},
- {
- size: 8,
- fields: [
- 'enabled'
- ]
- },
{
size: 8,
fields: [
@@ -125,7 +117,6 @@ export const LocalDynamicMetadataProviderEditor = {
fields: [
'name',
'@type',
- 'enabled',
'xmlId',
'sourceDirectory',
],
@@ -150,7 +141,6 @@ export const LocalDynamicMetadataProviderEditor = {
type: 'group-lg',
class: ['col-12'],
fields: [
- 'enabled',
'xmlId',
'sourceDirectory',
]
diff --git a/ui/src/app/metadata/domain/source/component/SourceList.js b/ui/src/app/metadata/domain/source/component/SourceList.js
index 41e2c7adb..04ea8f983 100644
--- a/ui/src/app/metadata/domain/source/component/SourceList.js
+++ b/ui/src/app/metadata/domain/source/component/SourceList.js
@@ -3,24 +3,27 @@ import { Link } from 'react-router-dom';
import Badge from 'react-bootstrap/Badge';
import Popover from 'react-bootstrap/Popover';
import Button from 'react-bootstrap/Button';
+import Form from 'react-bootstrap/Form';
import OverlayTrigger from 'react-bootstrap/OverlayTrigger';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-import { faTrash, faCheck } from '@fortawesome/free-solid-svg-icons';
+import { faTrash } from '@fortawesome/free-solid-svg-icons';
import FormattedDate from '../../../../core/components/FormattedDate';
import Translate from '../../../../i18n/components/translate';
import { Scroller } from '../../../../dashboard/component/Scroller';
-import { DeleteSourceConfirmation } from './DeleteSourceConfirmation';
+import { useTranslator } from '../../../../i18n/hooks';
+import { useIsAdmin } from '../../../../core/user/UserContext';
export default function SourceList({ entities, onDelete, onEnable }) {
+
+ const translator = useTranslator();
+ const isAdmin = useIsAdmin();
+
return (
-
- {(onDeleteSource) =>
-
+
{(limited) =>
-
@@ -29,7 +32,7 @@ export default function SourceList({ entities, onDelete, onEnable }) {
| Author |
Created Date |
Enabled |
- {onDeleteSource && | }
+ {onDelete && | }
@@ -46,39 +49,40 @@ export default function SourceList({ entities, onDelete, onEnable }) {
|
- {onEnable ?
-
- :
-
-
-
- }
+
+ {onEnable && isAdmin ?
+ onEnable(source, checked)}
+ checked={source.serviceEnabled}
+ >
+
+ :
+
+
+
+ }
+
|
-
-
- {onDeleteSource &&
+ {onDelete && |
A metadata source must be disabled before it can be deleted.
}>
-
-
-
+
+
+
| }
@@ -87,8 +91,6 @@ export default function SourceList({ entities, onDelete, onEnable }) {
}
-
- }
-
+
);
}
diff --git a/ui/src/app/metadata/domain/source/definition/SourceDefinition.js b/ui/src/app/metadata/domain/source/definition/SourceDefinition.js
index bc11108ee..6f7276255 100644
--- a/ui/src/app/metadata/domain/source/definition/SourceDefinition.js
+++ b/ui/src/app/metadata/domain/source/definition/SourceDefinition.js
@@ -89,7 +89,6 @@ export const SourceBase = {
fields: [
'serviceProviderName',
'entityId',
- 'serviceEnabled',
'organization'
]
},
@@ -291,7 +290,6 @@ export const SourceEditor = {
fields: [
'serviceProviderName',
'entityId',
- 'serviceEnabled',
'organization',
'contacts'
]
@@ -424,9 +422,7 @@ export const SourceWizard = {
},
{
size: 6,
- fields: [
- 'serviceEnabled'
- ]
+ fields: []
}
]
}
@@ -510,9 +506,7 @@ export const SourceWizard = {
index: 10,
id: 'summary',
label: 'label.finished',
- fields: [
- 'serviceEnabled'
- ]
+ fields: []
}
]
}
\ No newline at end of file
diff --git a/ui/src/app/metadata/hoc/MetadataSelector.js b/ui/src/app/metadata/hoc/MetadataSelector.js
index 7d7155066..fd37ed2c3 100644
--- a/ui/src/app/metadata/hoc/MetadataSelector.js
+++ b/ui/src/app/metadata/hoc/MetadataSelector.js
@@ -31,6 +31,9 @@ export function MetadataSelector({ children, ...props }) {
setMetadata(source);
}
}
+
+ const reload = () => loadMetadata(id);
+
React.useEffect(() => { loadMetadata(id) }, [id]);
return (
@@ -38,7 +41,7 @@ export function MetadataSelector({ children, ...props }) {
{type &&
{metadata && metadata.version &&
- {children(metadata)}
+ {children(metadata, reload)}
}
}
diff --git a/ui/src/app/metadata/view/MetadataOptions.js b/ui/src/app/metadata/view/MetadataOptions.js
index 93011229a..04242016d 100644
--- a/ui/src/app/metadata/view/MetadataOptions.js
+++ b/ui/src/app/metadata/view/MetadataOptions.js
@@ -1,5 +1,5 @@
import React from 'react';
-import { faArrowDown, faArrowUp, faHistory, faPlus, faTrash } from '@fortawesome/free-solid-svg-icons';
+import { faArrowDown, faArrowUp, faHistory, faPlus, faToggleOff, faToggleOn, faTrash } from '@fortawesome/free-solid-svg-icons';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { Link, useHistory, useParams } from 'react-router-dom';
import Button from 'react-bootstrap/Button';
@@ -14,14 +14,14 @@ import { MetadataDefinitionContext, MetadataSchemaContext } from '../hoc/Metadat
import { useMetadataConfiguration } from '../hooks/configuration';
import { MetadataViewToggle } from '../component/MetadataViewToggle';
-import { DeleteSourceConfirmation } from '../domain/source/component/DeleteSourceConfirmation';
+import { MetadataActions } from '../../admin/container/MetadataActions';
import { MetadataFilters } from '../domain/filter/component/MetadataFilters';
import { MetadataFilterConfigurationList } from '../domain/filter/component/MetadataFilterConfigurationList';
import { MetadataFilterTypes } from '../domain/filter';
import { useMetadataSchema } from '../hooks/schema';
import { FilterableProviders } from '../domain/provider';
-export function MetadataOptions () {
+export function MetadataOptions ({reload}) {
const metadata = React.useContext(MetadataObjectContext);
const definition = React.useContext(MetadataDefinitionContext);
@@ -49,9 +49,11 @@ export function MetadataOptions () {
const canFilter = FilterableProviders.indexOf(definition.type) > -1;
+ const enabled = type === 'source' ? metadata.serviceEnabled : metadata.enabled;
+
return (
-
- {(onDeleteSource) =>
+
+ {(enable, remove) =>
<>
diff --git a/ui/src/app/metadata/wizard/MetadataSourceWizard.js b/ui/src/app/metadata/wizard/MetadataSourceWizard.js
index 0d23b34af..57369b0dc 100644
--- a/ui/src/app/metadata/wizard/MetadataSourceWizard.js
+++ b/ui/src/app/metadata/wizard/MetadataSourceWizard.js
@@ -12,18 +12,13 @@ import { useMetadataDefinitionContext, useMetadataSchemaContext } from '../hoc/M
import { useMetadataFormDispatcher, setFormDataAction, setFormErrorAction, useMetadataFormData, useMetadataFormErrors } from '../hoc/MetadataFormContext';
import { MetadataConfiguration } from '../component/MetadataConfiguration';
import { Configuration } from '../hoc/Configuration';
-import { useMetadataEntity, useMetadataSources } from '../hooks/api';
-import { Prompt, useHistory } from 'react-router';
-import { removeNull } from '../../core/utility/remove_null';
+import { useMetadataSources } from '../hooks/api';
import Translate from '../../i18n/components/translate';
import { checkChanges } from '../hooks/utility';
-export function MetadataSourceWizard ({ onShowNav }) {
-
- const { post, loading, response } = useMetadataEntity('source');
- const history = useHistory();
+export function MetadataSourceWizard ({ onShowNav, onSave, block, loading }) {
const { data } = useMetadataSources({
cachePolicy: 'no-cache'
@@ -50,39 +45,20 @@ export function MetadataSourceWizard ({ onShowNav }) {
const onChange = (changes) => {
formDispatch(setFormDataAction(changes.formData));
formDispatch(setFormErrorAction(changes.errors));
- setBlocking(checkChanges(metadata, changes.formData));
+ block(checkChanges(metadata, changes.formData));
};
const onEditFromSummary = (idx) => {
wizardDispatch(setWizardIndexAction(idx));
};
- const onBlur = (form) => {
- // console.log(form);
- }
-
- async function save () {
- const body = removeNull(metadata, true);
- await post('', body);
- if (response.ok) {
- setBlocking(false);
- history.push('/');
- }
- }
-
- const [blocking, setBlocking] = React.useState(false);
+ const save = () => onSave(definition.parser(metadata));
const validator = definition.validator(data);
const warnings = definition.warnings && definition.warnings(metadata);
return (
<>
-