diff --git a/backend/src/main/resources/i18n/messages_en.properties b/backend/src/main/resources/i18n/messages_en.properties index dfa101c41..8f5cd4f14 100644 --- a/backend/src/main/resources/i18n/messages_en.properties +++ b/backend/src/main/resources/i18n/messages_en.properties @@ -444,6 +444,8 @@ message.database-constraint=There was a database constraint problem processing t message.user-request-received-title=User request received message.user-request-received-body=Your request has been received and is being reviewed. You will be notified with access status. +message.filter-fail=A server error occured, and the filter failed to save. + tooltip.entity-id=Entity ID tooltip.service-provider-name=Service Provider Name (Dashboard Display Only) tooltip.force-authn=Disallows use (or reuse) of authentication results and login flows that don\u0027t provide a real-time proof of user presence in the login process diff --git a/ui/src/app/metadata/domain/model/metadata-provider.ts b/ui/src/app/metadata/domain/model/metadata-provider.ts index f068ec718..e0b0a09a2 100644 --- a/ui/src/app/metadata/domain/model/metadata-provider.ts +++ b/ui/src/app/metadata/domain/model/metadata-provider.ts @@ -11,4 +11,5 @@ export interface MetadataProvider extends MetadataBase { xmlId: string; sortKey: number; metadataFilters: MetadataFilter[]; + reloadableMetadataResolverAttributes?: any; } diff --git a/ui/src/app/metadata/domain/service/provider.service.ts b/ui/src/app/metadata/domain/service/provider.service.ts index f17557902..0e76dbf6d 100644 --- a/ui/src/app/metadata/domain/service/provider.service.ts +++ b/ui/src/app/metadata/domain/service/provider.service.ts @@ -24,7 +24,17 @@ export class MetadataProviderService { } find(id: string): Observable { - return this.http.get(`${this.base}${this.endpoint}/${id}`); + return this.http.get(`${this.base}${this.endpoint}/${id}`).pipe(map( + provider => { + /*if (provider.reloadableMetadataResolverAttributes) { + if (provider.reloadableMetadataResolverAttributes.refreshDelayFactor) { + provider.reloadableMetadataResolverAttributes.refreshDelayFactor = + provider.reloadableMetadataResolverAttributes.refreshDelayFactor.toString(); + } + }*/ + return provider; + } + )); } update(provider: MetadataProvider): Observable { diff --git a/ui/src/app/metadata/filter/effect/collection.effect.ts b/ui/src/app/metadata/filter/effect/collection.effect.ts index 01fdc318a..9d9c47ef8 100644 --- a/ui/src/app/metadata/filter/effect/collection.effect.ts +++ b/ui/src/app/metadata/filter/effect/collection.effect.ts @@ -40,6 +40,10 @@ import { EntityAttributesFilterEntity } from '../../domain/entity/filter/entity- import { MetadataFilterService } from '../../domain/service/filter.service'; import { SelectProviderRequest } from '../../provider/action/collection.action'; import { UpdateFilterChanges, ClearFilter } from '../action/filter.action'; +import { AddNotification } from '../../../notification/action/notification.action'; +import { NotificationType, Notification } from '../../../notification/model/notification'; +import { I18nService } from '../../../i18n/service/i18n.service'; +import * as fromI18n from '../../../i18n/reducer'; /* istanbul ignore next */ @Injectable() @@ -118,6 +122,22 @@ export class FilterCollectionEffects { map(() => new ClearFilter()) ); + @Effect() + addFilterFailNotification$ = this.actions$.pipe( + ofType(FilterCollectionActionTypes.ADD_FILTER_FAIL), + map(action => action.payload.error), + withLatestFrom(this.store.select(fromI18n.getMessages)), + map(([error, messages]) => { + return new AddNotification( + new Notification( + NotificationType.Danger, + `${error.errorCode}: ${this.i18nService.translate(error.errorMessage || 'message.filter-fail', null, messages)}`, + 8000 + ) + ); + }) + ); + @Effect() updateFilter$ = this.actions$.pipe( ofType(FilterCollectionActionTypes.UPDATE_FILTER_REQUEST), @@ -253,6 +273,7 @@ export class FilterCollectionEffects { private actions$: Actions, private router: Router, private filterService: MetadataFilterService, - private store: Store + private store: Store, + private i18nService: I18nService ) { } } diff --git a/ui/src/app/schema-form/widget/filter-target/filter-target.component.html b/ui/src/app/schema-form/widget/filter-target/filter-target.component.html index c4aed1ec5..06c194a3c 100644 --- a/ui/src/app/schema-form/widget/filter-target/filter-target.component.html +++ b/ui/src/app/schema-form/widget/filter-target/filter-target.component.html @@ -69,7 +69,7 @@ - + Required for Regex   diff --git a/ui/src/assets/schema/provider/file-system.schema.json b/ui/src/assets/schema/provider/file-system.schema.json index f44761f86..122f46cc8 100644 --- a/ui/src/assets/schema/provider/file-system.schema.json +++ b/ui/src/assets/schema/provider/file-system.schema.json @@ -8,7 +8,7 @@ ], "properties": { "name": { - "title": "label.metadata-provider-name", + "title": "label.service-provider-name-dashboard-display-only", "description": "tooltip.metadata-provider-name", "type": "string", "widget": { @@ -55,6 +55,29 @@ "type": "boolean", "default": false }, + "doInitialization": { + "title": "label.do-resolver-initialization", + "description": "tooltip.do-resolver-initialization", + "type": "boolean", + "widget": { + "id": "boolean-radio" + }, + "oneOf": [ + { + "enum": [ + true + ], + "description": "value.true" + }, + { + "enum": [ + false + ], + "description": "value.false" + } + ], + "default": false + }, "reloadableMetadataResolverAttributes": { "type": "object", "properties": { @@ -105,17 +128,16 @@ "refreshDelayFactor": { "title": "label.refresh-delay-factor", "description": "tooltip.refresh-delay-factor", - "type": "number", + "type": "string", "widget": { - "id": "number", - "step": 0.01 + "id": "string", + "help": "message.real-number" }, "placeholder": "label.real-number", - "minimum": 0, - "maximum": 1, - "default": null + "default": "", + "pattern": "^(?:([0]*(\\.[0-9]+)?|[0]*\\.[0-9]*[1-9][0-9]*)|)$" } } } } -} \ No newline at end of file +}