Skip to content

Commit

Permalink
Implemented wizard for provider/source
Browse files Browse the repository at this point in the history
  • Loading branch information
rmathis committed May 14, 2021
1 parent bef53e2 commit 95d56d6
Show file tree
Hide file tree
Showing 31 changed files with 462 additions and 224 deletions.
1 change: 0 additions & 1 deletion ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
"react-dom": "^17.0.2",
"react-hook-form": "^7.5.2",
"react-infinite-scroll-component": "^6.1.0",
"react-jsonschema-form-layout-grid": "^2.1.0",
"react-router-dom": "^5.2.0",
"react-scripts": "4.0.3",
"react-scroll": "^1.8.2",
Expand Down
27 changes: 24 additions & 3 deletions ui/public/assets/schema/provider/filebacked-http.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,10 @@
"id": "fieldset"
},
"properties": {
"@type": {
"type": "string",
"default": "RequiredValidUntil"
},
"maxValidityInterval": {
"title": "label.max-validity-interval",
"description": "tooltip.max-validity-interval",
Expand All @@ -358,6 +362,10 @@
"id": "fieldset"
},
"properties": {
"@type": {
"type": "string",
"default": "SignatureValidation"
},
"requireSignedRoot": {
"title": "label.require-signed-root",
"description": "tooltip.require-signed-root",
Expand Down Expand Up @@ -401,14 +409,27 @@
"id": "fieldset"
},
"properties": {
"@type": {
"type": "string",
"default": "EntityRoleWhiteList"
},
"retainedRoles": {
"title": "label.retained-roles",
"description": "tooltip.retained-roles",
"type": "array",
"items": {
"enum": ["SPSSODescriptor", "AttributeAuthorityDescriptor"],
"enumNames": ["value.spdescriptor", "value.attr-auth-descriptor"],
"type": "string"
"widget": {
"id": "select"
},
"type": "string",
"enum": [
"SPSSODescriptor",
"AttributeAuthorityDescriptor"
],
"enumNames": [
"value.spdescriptor",
"value.attr-auth-descriptor"
]
}
},
"removeRolelessEntityDescriptors": {
Expand Down
4 changes: 3 additions & 1 deletion ui/src/app/dashboard/view/ProvidersTab.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ export function ProvidersTab () {

const [providers, setProviders] = React.useState([]);

const { get, response } = useMetadataEntities('provider');
const { get, response } = useMetadataEntities('provider', {
cachePolicy: 'no-cache'
});

async function loadProviders() {
const providers = await get('')
Expand Down
4 changes: 2 additions & 2 deletions ui/src/app/form/component/templates/FieldTemplate.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,13 @@ export function FieldTemplate ({
return (
<ListGroup.Item as="li" key={i} className={`border-0 m-0 p-0 bg-transparent ${i > 0 ? 'sr-only' : ''}`}>
<small className="m-0 text-danger">
{error}
<Translate value={error}>{error}</Translate>
</small>
</ListGroup.Item>
);
})}
</ListGroup>
)}
)}
{rawHelp && rawErrors.length < 1 && (
<Form.Text className={rawErrors.length > 0 ? "text-danger" : "text-muted"} id={id}>
<Translate value={rawHelp} />
Expand Down
2 changes: 1 addition & 1 deletion ui/src/app/form/component/templates/ObjectFieldTemplate.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ const ObjectFieldTemplate = ({
idSchema,
schema,
hidden,
formContext
...props
}) => {

const displayTitle = (uiSchema["ui:title"] || (title && schema.title));
Expand Down
19 changes: 16 additions & 3 deletions ui/src/app/metadata/NewProvider.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
import React from 'react';
import Translate from '../i18n/components/translate';
import { MetadataSchema } from './hoc/MetadataSchema';
import { useMetadataProviderTypes } from './hooks/api';
import { MetadataWizard } from './view/MetadataWizard';
import { MetadataSchemaSelector } from './wizard/MetadataSchemaSelector';

export function NewProvider() {

const { data } = useMetadataProviderTypes({}, []);

return (
<div className="container-fluid p-3">
<section className="section" aria-label="Add a new metadata source - how are you adding the metadata information?" tabIndex="0">
Expand All @@ -16,9 +20,18 @@ export function NewProvider() {
</div>
</div>
<div className="section-body p-4 border border-top-0 border-info">
<MetadataSchema type={'provider'}>
<MetadataWizard type="provider" />
</MetadataSchema>
<MetadataSchemaSelector type={'provider'} types={data}>
{(data, onRestart) =>
<MetadataSchema type={data.type} wizard={true}>
<MetadataWizard type="provider"
data={{
'@type': data.type,
name: data.name
}}
onCallback={onRestart} />
</MetadataSchema>
}
</MetadataSchemaSelector>
</div>
</section>
</div>
Expand Down
2 changes: 1 addition & 1 deletion ui/src/app/metadata/NewSource.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ export function NewSource() {
<MetadataSchema type={'source'} wizard={true}>
<Switch>
<Route path={`${path}/blank`} render={() =>
<MetadataWizard type="source" onShowNav={(s) => { setShowNav(s) }} />
<MetadataWizard type="source" onCallback={(s) => { setShowNav(s) }} />
} />
<Route path={`${path}/upload`} render={() =>
<MetadataUpload />
Expand Down
7 changes: 5 additions & 2 deletions ui/src/app/metadata/domain/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { MetadataFilterEditorTypes } from './filter';
import { MetadataProviderEditorTypes } from './provider';
import { MetadataProviderEditorTypes, MetadataProviderWizardTypes } from './provider';
import { SourceEditor, SourceWizard } from "./source/SourceDefinition";

export const editors = {
Expand All @@ -13,12 +13,15 @@ export const wizards = {
export const ProviderEditorTypes = [
...MetadataProviderEditorTypes
];
export const ProviderWizardTypes = [
...MetadataProviderWizardTypes
];
export const FilterEditorTypes = [
...MetadataFilterEditorTypes
];

export const getWizard = (type) =>
ProviderEditorTypes.find(def => def.type === type) ||
ProviderWizardTypes.find(def => def.type === type) ||
FilterEditorTypes.find(def => def.type === type) ||
SourceWizard;

Expand Down
46 changes: 41 additions & 5 deletions ui/src/app/metadata/domain/provider/BaseProviderDefinition.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,22 @@ import { DurationOptions } from '../data';

export const BaseProviderDefinition = {
schemaPreprocessor: metadataFilterProcessor,
validator: (data = [], current = { resourceId: null }) => {
const providers = data.filter(p => p.resourceId !== current.resourceId);
const names = providers.map(s => s.name);
const ids = providers.map(s => s.xmlId);

return (formData, errors) => {
if (names.indexOf(formData.name) > -1) {
errors.name.addError('message.name-must-be-unique');
}

if (ids.indexOf(formData.xmlId) > -1) {
errors.xmlId.addError('message.id-unique');
}
return errors;
}
},
parser: (changes) => {
return (changes.metadataFilters ? ({
...changes,
Expand All @@ -14,9 +30,8 @@ export const BaseProviderDefinition = {
}) : changes)
},
formatter: (changes, schema) => {

const filterSchema = schema?.properties?.metadataFilters;
if (!filterSchema) {
if (!filterSchema || !changes) {
return changes;
}

Expand All @@ -33,14 +48,13 @@ export const BaseProviderDefinition = {
return formatted;
},
display: (changes) => {

if (!changes.metadataFilters) {
return changes;
}
return {
...changes,
metadataFilters: {
...(changes.metadataFilters || []).reduce((collection, filter) => ({
...changes.metadataFilters.reduce((collection, filter) => ({
...collection,
[filter['@type']]: filter
}), {})
Expand All @@ -51,7 +65,29 @@ export const BaseProviderDefinition = {
name: {
'ui:help': 'message.must-be-unique'
}
}
},
steps: [
{
id: 'new',
label: 'label.select-metadata-provider-type',
index: 1,
initialValues: [],
fields: [
'name',
'@type'
],
fieldsets: [
{
type: 'section',
class: ['col-12'],
fields: [
'name',
'@type'
]
}
]
}
]
}

export const HttpMetadataResolverAttributesSchema = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ export const DynamicHttpMetadataProviderWizard = {
schema: '/assets/schema/provider/dynamic-http.schema.json',
// schema: `${API_BASE_PATH}/ui/MetadataResolver/DynamicHttpMetadataResolver`,
steps: [
...BaseProviderDefinition.steps,
{
id: 'common',
label: 'label.common-attributes',
Expand Down Expand Up @@ -56,16 +57,15 @@ export const DynamicHttpMetadataProviderWizard = {
layout: {
groups: [
{
size: 9,
size: 8,
classNames: 'bg-light border rounded px-4 pt-4 pb-3 mb-4',
fields: [
'name',
'@type',
'enabled'
'@type'
]
},
{
size: 9,
size: 8,
fields: [
'xmlId',
'requireValidMetadata',
Expand All @@ -74,22 +74,28 @@ export const DynamicHttpMetadataProviderWizard = {
]
},
{
size: 9,
size: 8,
fields: [
'dynamicMetadataResolverAttributes'
],
},
{
size: 9,
size: 8,
fields: [
'metadataFilters'
],
},
{
size: 9,
size: 8,
fields: [
'httpMetadataResolverAttributes'
]
},
{
size: 8,
fields: [
'enabled'
]
}
]
},
Expand Down Expand Up @@ -172,36 +178,7 @@ export const DynamicHttpMetadataProviderEditor = {
'enabled',
'requireValidMetadata',
'failFastInitialization'
],
fieldsets: [
{
type: 'section',
class: ['mb-3'],
fields: [
'name',
'@type'
]
},
{
type: 'group-lg',
class: ['col-12'],
fields: [
'xmlId',
'metadataRequestURLConstructionScheme',
'enabled',
'requireValidMetadata',
'failFastInitialization'
]
}
],
override: {
'@type': {
type: 'string',
readOnly: true,
widget: 'string',
oneOf: [{ enum: ['DynamicHttpMetadataResolver'], description: 'value.dynamic-http-metadata-provider' }]
}
}
]
},
{
id: 'dynamic',
Expand Down
Loading

0 comments on commit 95d56d6

Please sign in to comment.