diff --git a/backend/src/main/resources/dynamic-registration.schema.json b/backend/src/main/resources/dynamic-registration.schema.json
index ce4916e75..a1e8819c5 100644
--- a/backend/src/main/resources/dynamic-registration.schema.json
+++ b/backend/src/main/resources/dynamic-registration.schema.json
@@ -13,8 +13,8 @@
"maxLength": 255
},
"redirectUris": {
- "title": "label.redirect-uris",
- "description": "tooltip.redirect-uris",
+ "title": "label.dynamic-registration-redirectUris",
+ "description": "tooltip.dynamic-registration-redirectUris",
"type": "string",
"minLength": 1,
"maxLength": 255
@@ -30,74 +30,70 @@
"type": "boolean"
},
"applicationType": {
- "title": "label.application-type",
- "description": "tooltip.application-type",
+ "title": "label.dynamic-registration-applicationType",
+ "description": "tooltip.dynamic-registration-applicationType",
"type": "string"
},
"contacts": {
- "title": "label.contacts",
- "description": "tooltip.contacts",
+ "title": "label.dynamic-registration-contacts",
+ "description": "tooltip.dynamic-registration-contacts",
"type": "string"
},
"grantType": {
- "title": "label.grant-type",
- "description": "tooltip.grant-type",
+ "title": "label.dynamic-registration-grantTypes",
+ "description": "tooltip.dynamic-registration-grantTypes",
"type": "string",
"minLength": 1,
- "oneOf": [
- {
- "enum": ["authorization_code"],
- "description": "value.authorization-code"
- },
- {
- "enum": ["implicit"],
- "description": "value.implicit"
- },
- {
- "enum": ["refresh_token"],
- "description": "value.refresh-token"
- }
+ "enum": [
+ "authorization_code",
+ "implicit",
+ "refresh_token"
+ ],
+ "enumNames": [
+ "value.authorization-code",
+ "value.implicit",
+ "value.refresh-token"
]
},
"jwks": {
- "title": "label.jwks",
- "description": "tooltip.jwks",
+ "title": "label.dynamic-registration-jwks",
+ "description": "label.dynamic-registration-jwks",
"type": "string"
},
"logoUri": {
- "title": "label.logo-uri",
- "description": "tooltip.logo-uri",
+ "title": "label.dynamic-registration-logo-uri",
+ "description": "tooltip.dynamic-registration-logo-uri",
"type": "string"
},
"policyUri": {
- "title": "label.policy-uri",
- "description": "tooltip.policy-uri",
+ "title": "label.dynamic-registration-policy-uri",
+ "description": "tooltip.dynamic-registration-policy-uri",
"type": "string"
},
"responseTypes": {
- "title": "label.response-types",
- "description": "tooltip.response-types",
+ "title": "label.dynamic-registration-responseTypes",
+ "description": "tooltip.dynamic-registration-responseTypes",
"type": "string"
},
"scope": {
- "title": "label.scope",
- "description": "tooltip.scope",
+ "title": "label.dynamic-registration-scope",
+ "description": "tooltip.dynamic-registration-scope",
"type": "string"
},
"subjectType": {
- "title": "label.subject-type",
- "description": "tooltip.subject-type",
+ "title": "label.dynamic-registration-subjectType",
+ "description": "tooltip.dynamic-registration-subjectType",
"type": "string"
},
"tokenEndpointAuthMethod": {
- "title": "label.token-endpoint-auth-method",
- "description": "tooltip.token-endpoint-auth-method",
+ "title": "label.dynamic-registration-tokenEndpointAuthMethod",
+ "description": "tooltip.dynamic-registration-tokenEndpointAuthMethod",
"type": "string"
},
"tosUri": {
- "title": "label.tos-uri",
- "description": "tooltip.tos-uri",
+ "title": "label.dynamic-registration-tosuri",
+ "description": "tooltip.dynamic-registration-tosuri",
"type": "string"
}
}
diff --git a/backend/src/main/resources/i18n/messages.properties b/backend/src/main/resources/i18n/messages.properties
index c6a8bbeda..435d3dc16 100644
--- a/backend/src/main/resources/i18n/messages.properties
+++ b/backend/src/main/resources/i18n/messages.properties
@@ -962,39 +962,50 @@ tooltip.IDTokenLifetime=Lifetime of ID token issued to client
tooltip.deniedUserInfoAttributes=Specifies IdPAttributes to omit from UserInfo token
tooltip.resolveAttributes.oauth=Whether to run the attribute resolution/filtering step
-label.dynamic-registration=Dynamic Registration
+label.dynamic-registration=Dynamic registration
label.dynamic-registration-configuration=Dynamic Registration
action.dynamic-registrations=Dynamic registrations
action.add-new-dynamic-registration=Add a new dynamic registration
label.dynamic-registration-name=Name
+label.current-dynamic-registrations=Current dynamic registrations
+label.new-dynamic-registration=New dynamic registration
+label.edit-dynamic-registration=Edit dynamic registration
+message.delete-dynamic-registration-title=Delete dynamic registration?
+message.delete-dynamic-registration-body=You are requesting to delete a dynamic registration. If you complete this process the role will be removed. This cannot be undone. Do you wish to continue?
+label.enable-dynamic-registrations=Enable Dynamic Registrations
+label.approve-dynamic-registrations=Approve Dynamic Registrations
label.dynamic-registration-name=Name
tooltip.dynamic-registration-name=Name
-label.dynamic-registration-redirectUris=Redirect uris
-tooltip.dynamic-registration-redirectUris=Redirect uris
-label.dynamic-registration-responseTypes=Response types
-tooltip.dynamic-registration-responseTypes=Response types
-label.dynamic-registration-grantTypes=Grant types
-tooltip.dynamic-registration-grantTypes=Grant types
-label.dynamic-registration-applicationType=Application type
-tooltip.dynamic-registration-applicationType=Application type
+label.dynamic-registration-redirectUris=Redirect Uris
+tooltip.dynamic-registration-redirectUris=Redirect Uris
+label.dynamic-registration-responseTypes=Response Types
+tooltip.dynamic-registration-responseTypes=Response Types
+label.dynamic-registration-grantTypes=Grant Types
+tooltip.dynamic-registration-grantTypes=Grant Types
+label.dynamic-registration-applicationType=Application Type
+tooltip.dynamic-registration-applicationType=Application Type
label.dynamic-registration-contacts=Contacts
tooltip.dynamic-registration-contacts=Contacts
-label.dynamic-registration-subjectType=Subject type
-tooltip.dynamic-registration-subjectType=Subject type
+label.dynamic-registration-subjectType=Subject Type
+tooltip.dynamic-registration-subjectType=Subject Type
label.dynamic-registration-jwks=Jwks
tooltip.dynamic-registration-jwks=Jwks
-label.dynamic-registration-jwksUri=Jwks uri
-tooltip.dynamic-registration-jwksUri=Jwks uri
-label.dynamic-registration-tokenEndpointAuthMethod=Token endpoint auth method
-tooltip.dynamic-registration-tokenEndpointAuthMethod=Token endpoint auth method
-label.dynamic-registration-logo-uri=Logo uri
-tooltip.dynamic-registration-logo-uri=Logo uri
-label.dynamic-registration-policy-uri=Policy uri
-tooltip.dynamic-registration-policy-uri=Policy uri
-label.dynamic-registration-tosuri=To uri
-tooltip.dynamic-registration-tosuri=To uri
+label.dynamic-registration-jwksUri=Jwks Uri
+tooltip.dynamic-registration-jwksUri=Jwks Uri
+label.dynamic-registration-tokenEndpointAuthMethod=Token Endpoint Auth Method
+tooltip.dynamic-registration-tokenEndpointAuthMethod=Token Endpoint Auth Method
+label.dynamic-registration-logo-uri=Logo Uri
+tooltip.dynamic-registration-logo-uri=Logo Uri
+label.dynamic-registration-policy-uri=Policy Uri
+tooltip.dynamic-registration-policy-uri=Policy Uri
+label.dynamic-registration-tosuri=TOS Uri
+tooltip.dynamic-registration-tosuri=TOS Uri
label.dynamic-registration-scope=Scope
tooltip.dynamic-registration-scope=Scope
label.dynamic-registration-enabled=Enabled
tooltip.dynamic-registration-enabled=Enabled
+
+value.authorization-code=Authorization Code
+value.implicit=Implicit
+value.refresh-token=Refresh Token
\ No newline at end of file
diff --git a/ui/package-lock.json b/ui/package-lock.json
index 1731bb9b1..a48e78b9d 100644
--- a/ui/package-lock.json
+++ b/ui/package-lock.json
@@ -10,6 +10,7 @@
"dependencies": {
"@fortawesome/fontawesome-free": "^6.1.1",
"@fortawesome/fontawesome-svg-core": "^6.1.1",
+ "@fortawesome/free-brands-svg-icons": "^6.2.1",
"@fortawesome/free-regular-svg-icons": "^6.1.1",
"@fortawesome/free-solid-svg-icons": "^6.1.1",
"@fortawesome/react-fontawesome": "^0.1.18",
@@ -2495,6 +2496,18 @@
"node": ">=6"
}
},
+ "node_modules/@fortawesome/free-brands-svg-icons": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.2.1.tgz",
+ "integrity": "sha512-L8l4MfdHPmZlJ72PvzdfwOwbwcCAL0vx48tJRnI6u1PJXh+j2f3yDoKyQgO3qjEsgD5Fr2tQV/cPP8F/k6aUig==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@fortawesome/fontawesome-common-types": "6.2.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/@fortawesome/free-regular-svg-icons": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.2.1.tgz",
@@ -21016,6 +21029,14 @@
"@fortawesome/fontawesome-common-types": "6.2.1"
}
},
+ "@fortawesome/free-brands-svg-icons": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.2.1.tgz",
+ "integrity": "sha512-L8l4MfdHPmZlJ72PvzdfwOwbwcCAL0vx48tJRnI6u1PJXh+j2f3yDoKyQgO3qjEsgD5Fr2tQV/cPP8F/k6aUig==",
+ "requires": {
+ "@fortawesome/fontawesome-common-types": "6.2.1"
+ }
+ },
"@fortawesome/free-regular-svg-icons": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.2.1.tgz",
diff --git a/ui/package.json b/ui/package.json
index fd9a03526..34554c706 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -6,6 +6,7 @@
"dependencies": {
"@fortawesome/fontawesome-free": "^6.1.1",
"@fortawesome/fontawesome-svg-core": "^6.1.1",
+ "@fortawesome/free-brands-svg-icons": "^6.2.1",
"@fortawesome/free-regular-svg-icons": "^6.1.1",
"@fortawesome/free-solid-svg-icons": "^6.1.1",
"@fortawesome/react-fontawesome": "^0.1.18",
diff --git a/ui/src/app/admin/component/AccessRequest.js b/ui/src/app/admin/component/AccessRequest.js
index c3a3e730c..64d57a6b5 100644
--- a/ui/src/app/admin/component/AccessRequest.js
+++ b/ui/src/app/admin/component/AccessRequest.js
@@ -4,14 +4,13 @@ import Form from 'react-bootstrap/Form';
import Translate from '../../i18n/components/translate';
export function AccessRequest({ users, roles, onDeleteUser, onChangeUserRole }) {
-
return (
<>
{(!users || !users.length) ?
<>
-
-
There are no new user requests at this time.
+
+
There are no new user requests at this time.
>
diff --git a/ui/src/app/admin/container/UserActions.js b/ui/src/app/admin/container/UserActions.js
index f7924c750..f00c1fcb8 100644
--- a/ui/src/app/admin/container/UserActions.js
+++ b/ui/src/app/admin/container/UserActions.js
@@ -2,9 +2,9 @@ import React from 'react';
import { AccessRequest } from '../../admin/component/AccessRequest';
import UserManagement from '../../admin/container/UserManagement';
-export function UserActions({ users, reloadUsers }) {
+export function UserActions({ users }) {
return (
-
+
{(u, roles, onChangeUserRole, onChangeGroup, onDeleteUser) =>
}
diff --git a/ui/src/app/core/components/Header.js b/ui/src/app/core/components/Header.js
index 8c4398f56..691d0478a 100644
--- a/ui/src/app/core/components/Header.js
+++ b/ui/src/app/core/components/Header.js
@@ -7,7 +7,22 @@ import Dropdown from 'react-bootstrap/Dropdown';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-import { faTh, faSignOutAlt, faPlusCircle, faCube, faCubes, faUsersCog, faSpinner, faUserCircle, faCog, faBoxOpen, faTags, faIdBadge, faFileLines } from '@fortawesome/free-solid-svg-icons';
+import {
+ faTh,
+ faSignOutAlt,
+ faPlusCircle,
+ faCube,
+ faCubes,
+ faUsersCog,
+ faSpinner,
+ faUserCircle,
+ faCog,
+ faBoxOpen,
+ faTags,
+ faIdBadge,
+ faFileLines
+} from '@fortawesome/free-solid-svg-icons';
+import { faOpenid } from '@fortawesome/free-brands-svg-icons';
import Translate from '../../i18n/components/translate';
import { useTranslator } from '../../i18n/hooks';
@@ -64,7 +79,7 @@ export function Header () {
}
-
+
diff --git a/ui/src/app/dashboard/view/ActionsTab.js b/ui/src/app/dashboard/view/ActionsTab.js
index 96daf8535..99e4a0fd2 100644
--- a/ui/src/app/dashboard/view/ActionsTab.js
+++ b/ui/src/app/dashboard/view/ActionsTab.js
@@ -13,8 +13,6 @@ import Spinner from '../../core/components/Spinner';
import Translate from '../../i18n/components/translate';
import SourceList from '../../metadata/domain/source/component/SourceList';
import { ProtectRoute } from '../../core/components/ProtectRoute';
-
-
import { DynamicRegistrationList } from '../../dynamic-registration/component/DynamicRegistrationList';
import { useGetNewUsersQuery } from '../../store/user/UserSlice';
import { useGetDisabledSourcesQuery, useGetUnapprovedSourcesQuery } from '../../store/metadata/SourceSlice';
@@ -24,7 +22,7 @@ import {
useGetUnapprovedRegistrationsQuery
} from '../../store/dynamic-registration/DynamicRegistrationSlice';
-export function ActionsTab({ registrations }) {
+export function ActionsTab() {
const { path, url } = useRouteMatch();
diff --git a/ui/src/app/dashboard/view/DynamicRegistrationsTab.js b/ui/src/app/dashboard/view/DynamicRegistrationsTab.js
index 7a299da31..1888301a6 100644
--- a/ui/src/app/dashboard/view/DynamicRegistrationsTab.js
+++ b/ui/src/app/dashboard/view/DynamicRegistrationsTab.js
@@ -7,6 +7,10 @@ import {
useGetDynamicRegistrationsQuery
} from '../../store/dynamic-registration/DynamicRegistrationSlice';
import { DynamicRegistrationActions } from '../../dynamic-registration/hoc/DynamicRegistrationActions';
+import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
+import { Link } from 'react-router-dom';
+import Spinner from '../../core/components/Spinner';
+import { faOpenid } from '@fortawesome/free-brands-svg-icons';
const searchProps = ['name'];
@@ -33,7 +37,20 @@ export function DynamicRegistrationsTab () {
loading={loading}
onDelete={(id) => remove({id})}
onEnable={(id, enabled) => enable({id, enabled}) }
- onChangeGroup={(registration, group) => changeGroup({ registration, group })}/>
+ onChangeGroup={(registration, group) => changeGroup({ registration, group })}>
+ {loading &&
}
+ {(!searched || !searched.length) &&
+
+
+
No Dynamic Registrations found.
+
+
+
+
+
+
+ }
+
}
diff --git a/ui/src/app/dashboard/view/ProvidersTab.js b/ui/src/app/dashboard/view/ProvidersTab.js
index a8627ab5d..9d78ad2fc 100644
--- a/ui/src/app/dashboard/view/ProvidersTab.js
+++ b/ui/src/app/dashboard/view/ProvidersTab.js
@@ -9,6 +9,9 @@ import { useIsAdmin } from '../../core/user/UserContext';
import Alert from 'react-bootstrap/Alert';
import { MetadataActions } from '../../admin/container/MetadataActions';
import Spinner from '../../core/components/Spinner';
+import { Link } from 'react-router-dom';
+import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
+import { faCube } from '@fortawesome/free-solid-svg-icons';
const searchProps = ['name', '@type', 'createdBy'];
export function ProvidersTab () {
@@ -57,6 +60,17 @@ export function ProvidersTab () {
onOrderUp={onOrderUp}
onOrderDown={onOrderDown}>
{loading &&
}
+ {(!searched || !searched.length) &&
+
+
+
No Metadata Providers found.
+
+
+
+
+
+
+ }
}
diff --git a/ui/src/app/dashboard/view/SourcesTab.js b/ui/src/app/dashboard/view/SourcesTab.js
index d997cb4ba..b21e789a3 100644
--- a/ui/src/app/dashboard/view/SourcesTab.js
+++ b/ui/src/app/dashboard/view/SourcesTab.js
@@ -7,6 +7,9 @@ import { Search } from '../component/Search';
import { Spinner } from '../../core/components/Spinner';
import { useChangeSourceGroupMutation, useGetSourcesQuery } from '../../store/metadata/SourceSlice';
+import { Link } from 'react-router-dom';
+import { faCube } from '@fortawesome/free-solid-svg-icons';
+import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
const searchProps = ['serviceProviderName', 'entityId', 'createdBy', 'protocol'];
@@ -35,6 +38,17 @@ export function SourcesTab () {
onEnable={(s, e) => enable(s, e) }
onChangeGroup={changeSourceGroup}>
{loading &&
}
+ {(!searched || !searched.length) &&
+
+
+
No Metadata Sources found.
+
+
+
+
+
+
+ }
}
diff --git a/ui/src/app/dynamic-registration/component/DynamicRegistrationForm.js b/ui/src/app/dynamic-registration/component/DynamicRegistrationForm.js
index 1590d23be..8bde3862a 100644
--- a/ui/src/app/dynamic-registration/component/DynamicRegistrationForm.js
+++ b/ui/src/app/dynamic-registration/component/DynamicRegistrationForm.js
@@ -7,6 +7,9 @@ import Translate from '../../i18n/components/translate';
import { FormContext, setFormDataAction, setFormErrorAction } from '../../form/FormManager';
import { useDynamicRegistrationUiSchema, useDynamicRegistrationValidator } from '../api';
+import Row from 'react-bootstrap/Row';
+import Col from 'react-bootstrap/Col';
+
export function DynamicRegistrationForm ({registration = {}, errors = [], loading = false, schema, onSave, onCancel}) {
@@ -39,8 +42,8 @@ export function DynamicRegistrationForm ({registration = {}, errors = [], loadin
-
+
+
>)
}
diff --git a/ui/src/app/dynamic-registration/component/DynamicRegistrationList.js b/ui/src/app/dynamic-registration/component/DynamicRegistrationList.js
index 18ffba499..a3562a99d 100644
--- a/ui/src/app/dynamic-registration/component/DynamicRegistrationList.js
+++ b/ui/src/app/dynamic-registration/component/DynamicRegistrationList.js
@@ -27,13 +27,6 @@ export function DynamicRegistrationList ({entities, children, onChangeGroup, onD
{(limited) =>
- {!limited || !limited.length ?
-
-
-
No Dynamic Registrations found.
-
-
- :
@@ -146,6 +139,12 @@ export function DynamicRegistrationList ({entities, children, onChangeGroup, onD
+ { !limited?.length && !children &&
+
+
+
No Dynamic Registrations found.
+
+
}
}
diff --git a/ui/src/app/dynamic-registration/hoc/DynamicConfigurationDefinition.js b/ui/src/app/dynamic-registration/hoc/DynamicConfigurationDefinition.js
index 1a37c1af5..a160a10a4 100644
--- a/ui/src/app/dynamic-registration/hoc/DynamicConfigurationDefinition.js
+++ b/ui/src/app/dynamic-registration/hoc/DynamicConfigurationDefinition.js
@@ -12,7 +12,7 @@ export const DynamicRegistrationDefinition = {
'name',
'redirectUris',
'responseTypes',
- 'grantTypes',
+ 'grantType',
'applicationType',
'contacts',
'subjectType',
@@ -34,22 +34,31 @@ export const DynamicRegistrationDefinition = {
{
sizes: {
xs: 12,
- lg: 12
+ lg: 6
},
classNames: '',
fields: [
'name',
'redirectUris',
'responseTypes',
- 'grantTypes',
'applicationType',
'contacts',
+ 'logoUri',
+ 'policyUri',
+ ]
+ },
+ {
+ sizes: {
+ xs: 12,
+ lg: 6
+ },
+ classNames: '',
+ fields: [
+ 'grantType',
'subjectType',
'jwks',
'jwksUri',
'tokenEndpointAuthMethod',
- 'logoUri',
- 'policyUri',
'tosUri',
'scope'
]
diff --git a/ui/src/app/dynamic-registration/hoc/DynamicRegistrationActions.js b/ui/src/app/dynamic-registration/hoc/DynamicRegistrationActions.js
index ce1d89420..69a266490 100644
--- a/ui/src/app/dynamic-registration/hoc/DynamicRegistrationActions.js
+++ b/ui/src/app/dynamic-registration/hoc/DynamicRegistrationActions.js
@@ -1,4 +1,5 @@
import React, { Fragment, useMemo } from 'react';
+import { useHistory } from 'react-router';
import { DeleteConfirmation } from '../../core/components/DeleteConfirmation';
import {
@@ -10,9 +11,9 @@ import {
export function DynamicRegistrationActions ({ children }) {
- // const toast = useCallback((message, type) => dispatch(createNotificationAction(message, type)), [dispatch]);
+ const history = useHistory();
- const [remove] = useDeleteDynamicRegistrationMutation();
+ const [remove, {isSuccess: isDeleteSuccess}] = useDeleteDynamicRegistrationMutation();
const [approve] = useApproveDynamicRegistrationMutation();
const [enable] = useEnableDynamicRegistrationMutation();
const [changeGroup] = useChangeDynamicRegistrationGroupMutation();
@@ -25,6 +26,12 @@ export function DynamicRegistrationActions ({ children }) {
changeGroup
}), [remove, approve, enable, changeGroup]);
+ React.useEffect(() => {
+ if (isDeleteSuccess) {
+ history.push('/dashboard/dynamic-registration');
+ }
+ }, [isDeleteSuccess, history]);
+
return (
{(block) =>
diff --git a/ui/src/app/dynamic-registration/view/DynamicRegistrationCreate.js b/ui/src/app/dynamic-registration/view/DynamicRegistrationCreate.js
index b8e34676b..5d707e32a 100644
--- a/ui/src/app/dynamic-registration/view/DynamicRegistrationCreate.js
+++ b/ui/src/app/dynamic-registration/view/DynamicRegistrationCreate.js
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, {Fragment} from 'react';
import { Prompt, useHistory } from 'react-router-dom';
import Translate from '../../i18n/components/translate';
@@ -7,31 +7,28 @@ import { FormManager } from '../../form/FormManager';
import { DynamicRegistrationForm } from '../component/DynamicRegistrationForm';
import DynamicConfigurationDefinition from '../hoc/DynamicConfigurationDefinition';
import { useCreateDynamicRegistrationMutation } from '../../store/dynamic-registration/DynamicRegistrationSlice';
+import Spinner from '../../core/components/Spinner';
export function DynamicRegistrationCreate () {
const history = useHistory();
- const [create] = useCreateDynamicRegistrationMutation();
+ const [create, {isSuccess, isLoading: loading}] = useCreateDynamicRegistrationMutation();
- async function save(reg) {
- const resp = await create(reg);
- if (resp.ok) {
- gotoDetail({ refresh: true });
- }
- };
-
- const cancel = () => {
- gotoDetail();
- };
-
- const gotoDetail = (state = null) => {
+ const save = React.useCallback(async (registration) => await create({registration}), [create]);
+
+ const gotoDetail = React.useCallback((state = null) => {
setBlocking(false);
history.push(`/dashboard/dynamic-registration`, state);
- };
+ }, [history]);
+
+ React.useEffect(() => {
+ if (isSuccess) {
+ gotoDetail({ refresh: true });
+ }
+ }, [isSuccess, gotoDetail])
const [blocking, setBlocking] = React.useState(false);
- const [loading, setLoading] = React.useState(false);
return (
@@ -51,7 +48,7 @@ export function DynamicRegistrationCreate () {
- {(schema) =>
+ {(schema, loadingSchema) =>
{(data, errors) =>
<>
@@ -61,7 +58,8 @@ export function DynamicRegistrationCreate () {
schema={schema}
loading={loading}
onSave={(data) => save(data)}
- onCancel={() => cancel()} />
+ onCancel={() => gotoDetail()} />
+ { loadingSchema &&
}
>}
}
diff --git a/ui/src/app/dynamic-registration/view/DynamicRegistrationDetail.js b/ui/src/app/dynamic-registration/view/DynamicRegistrationDetail.js
index 82c4091b1..ec6c17b90 100644
--- a/ui/src/app/dynamic-registration/view/DynamicRegistrationDetail.js
+++ b/ui/src/app/dynamic-registration/view/DynamicRegistrationDetail.js
@@ -22,8 +22,6 @@ export function DynamicRegistrationDetail () {
const history = useHistory();
const { data: detail } = useSelectDynamicRegistrationQuery({id});
-
- const redirectOnDelete = () => history.push('/dashboard/dynamic-registration');
const edit = (section) => {
history.push(`/dynamic-registration/${id}/edit`);
diff --git a/ui/src/app/dynamic-registration/view/DynamicRegistrationEdit.js b/ui/src/app/dynamic-registration/view/DynamicRegistrationEdit.js
index 8f7034d86..87705c2a7 100644
--- a/ui/src/app/dynamic-registration/view/DynamicRegistrationEdit.js
+++ b/ui/src/app/dynamic-registration/view/DynamicRegistrationEdit.js
@@ -7,6 +7,7 @@ import { FormManager } from '../../form/FormManager';
import { DynamicRegistrationForm } from '../component/DynamicRegistrationForm';
import DynamicConfigurationDefinition from '../hoc/DynamicConfigurationDefinition';
import { useSelectDynamicRegistrationQuery, useUpdateDynamicRegistrationMutation } from '../../store/dynamic-registration/DynamicRegistrationSlice';
+import Spinner from '../../core/components/Spinner';
export function DynamicRegistrationEdit () {
@@ -53,7 +54,7 @@ export function DynamicRegistrationEdit () {
- {(schema) =>
+ {(schema, loadingSchema) =>
{(data, errors) =>
<>
@@ -64,6 +65,7 @@ export function DynamicRegistrationEdit () {
loading={loading}
onSave={(registration) => update({ id: registration.resourceId, registration })}
onCancel={() => cancel()} />
+ { loadingSchema &&
}
>}
}
diff --git a/ui/src/app/form/Schema.js b/ui/src/app/form/Schema.js
index 92aefe325..13321349a 100644
--- a/ui/src/app/form/Schema.js
+++ b/ui/src/app/form/Schema.js
@@ -6,7 +6,7 @@ export function Schema({ path, children }) {
const [schema, setSchema] = React.useState({});
- const { get, response } = useFetch(path, {
+ const { get, response, loading } = useFetch(path, {
cachePolicy: 'no-cache'
});
@@ -20,5 +20,5 @@ export function Schema({ path, children }) {
/*eslint-disable react-hooks/exhaustive-deps*/
React.useEffect(() => { loadSchema() }, []);
- return (<>{children(schema)}>);
+ return (<>{children(schema, loading)}>);
}
\ No newline at end of file
diff --git a/ui/src/app/metadata/domain/provider/component/ProviderList.js b/ui/src/app/metadata/domain/provider/component/ProviderList.js
index 08188dba0..10f034c5e 100644
--- a/ui/src/app/metadata/domain/provider/component/ProviderList.js
+++ b/ui/src/app/metadata/domain/provider/component/ProviderList.js
@@ -92,6 +92,13 @@ export function ProviderList({ children, entities, reorder = true, first, last,
)}
+ { !limited?.length && !children &&
+
+
+
No Metadata Providers found.
+
+
+ }
}
diff --git a/ui/src/app/metadata/domain/source/component/SourceList.js b/ui/src/app/metadata/domain/source/component/SourceList.js
index 16cff09ed..b1f4078a3 100644
--- a/ui/src/app/metadata/domain/source/component/SourceList.js
+++ b/ui/src/app/metadata/domain/source/component/SourceList.js
@@ -151,6 +151,13 @@ export default function SourceList({ entities, onDelete, onEnable, onApprove, on
+ { !limited?.length && !children &&
+
+
+
No Metadata Sources found.
+
+
+ }
}
diff --git a/ui/src/app/metadata/domain/source/definition/SourceDefinition.js b/ui/src/app/metadata/domain/source/definition/SourceDefinition.js
index 3178dc805..9296d0aba 100644
--- a/ui/src/app/metadata/domain/source/definition/SourceDefinition.js
+++ b/ui/src/app/metadata/domain/source/definition/SourceDefinition.js
@@ -76,8 +76,6 @@ export const SourceBase = {
const obj = { ...merged[k] };
return obj.hasOwnProperty('makeDefault');
});
-
-
if (changingDefault) {
const settingToTrue = Object.keys(merged).some(k => merged[k].makeDefault === true);
diff --git a/ui/src/app/store/user/CurrentUserSlice.js b/ui/src/app/store/user/CurrentUserSlice.js
index 66c4968dc..6b2a162df 100644
--- a/ui/src/app/store/user/CurrentUserSlice.js
+++ b/ui/src/app/store/user/CurrentUserSlice.js
@@ -15,7 +15,6 @@ export const CurrentUserAdminApi = createApi({
export const {
useGetUsersQuery,
- useGetNewUsersQuery,
useRemoveUserMutation,
useSetUserGroupRequestMutation,
useSetUserRoleRequestMutation