2023-12-28 16:18:49 +01:00
|
|
|
import { Injectable } from '@angular/core';
|
|
|
|
import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
|
2024-03-14 10:23:46 +01:00
|
|
|
import { AppPermission } from '@app/core/common/enum/permission.enum';
|
2023-12-28 16:18:49 +01:00
|
|
|
import { Description } from '@app/core/model/description/description';
|
2024-02-09 21:46:05 +01:00
|
|
|
import { DescriptionTemplatesInSection, DmpBlueprint, DmpBlueprintDefinition, DmpBlueprintDefinitionSection, ExtraFieldInSection, FieldInSection, ReferenceTypeFieldInSection, SystemFieldInSection } from '@app/core/model/dmp-blueprint/dmp-blueprint';
|
2024-02-22 12:57:42 +01:00
|
|
|
import { Dmp, DmpBlueprintValue, DmpContact, DmpDescriptionTemplate, DmpProperties, DmpUser } from '@app/core/model/dmp/dmp';
|
2024-01-18 13:23:20 +01:00
|
|
|
import { DmpReference, DmpReferenceData } from '@app/core/model/dmp/dmp-reference';
|
2024-04-17 16:17:36 +02:00
|
|
|
import { ExternalFetcherBaseSourceConfiguration } from '@app/core/model/external-fetcher/external-fetcher';
|
|
|
|
import { ReferenceType, ReferenceTypeDefinition } from '@app/core/model/reference-type/reference-type';
|
2023-12-28 16:18:49 +01:00
|
|
|
import { Reference } from '@app/core/model/reference/reference';
|
2024-02-01 13:42:23 +01:00
|
|
|
import { DmpAssociatedUser, User } from '@app/core/model/user/user';
|
2023-12-29 16:04:16 +01:00
|
|
|
import { DmpService } from '@app/core/services/dmp/dmp.service';
|
2023-12-28 16:18:49 +01:00
|
|
|
import { BreadcrumbService } from '@app/ui/misc/breadcrumb/breadcrumb.service';
|
|
|
|
import { BaseEditorResolver } from '@common/base/base-editor.resolver';
|
|
|
|
import { Guid } from '@common/types/guid';
|
|
|
|
import { takeUntil, tap } from 'rxjs/operators';
|
|
|
|
import { nameof } from 'ts-simple-nameof';
|
|
|
|
|
|
|
|
@Injectable()
|
|
|
|
export class DmpEditorResolver extends BaseEditorResolver {
|
|
|
|
|
2023-12-29 16:04:16 +01:00
|
|
|
constructor(private descriptionService: DmpService, private breadcrumbService: BreadcrumbService) {
|
2023-12-28 16:18:49 +01:00
|
|
|
super();
|
|
|
|
}
|
|
|
|
|
|
|
|
public static lookupFields(): string[] {
|
|
|
|
return [
|
|
|
|
...BaseEditorResolver.lookupFields(),
|
|
|
|
nameof<Dmp>(x => x.id),
|
|
|
|
nameof<Dmp>(x => x.label),
|
|
|
|
nameof<Dmp>(x => x.status),
|
|
|
|
nameof<Dmp>(x => x.versionStatus),
|
2024-01-18 13:23:20 +01:00
|
|
|
nameof<Dmp>(x => x.groupId),
|
|
|
|
nameof<Dmp>(x => x.description),
|
|
|
|
nameof<Dmp>(x => x.language),
|
2023-12-28 16:18:49 +01:00
|
|
|
nameof<Dmp>(x => x.accessType),
|
|
|
|
nameof<Dmp>(x => x.isActive),
|
|
|
|
nameof<Dmp>(x => x.version),
|
|
|
|
nameof<Dmp>(x => x.updatedAt),
|
2024-01-18 13:23:20 +01:00
|
|
|
nameof<Dmp>(x => x.publicAfter),
|
2024-03-15 08:39:36 +01:00
|
|
|
nameof<Dmp>(x => x.creator),
|
2024-03-04 11:42:14 +01:00
|
|
|
nameof<Dmp>(x => x.hash),
|
2023-12-28 16:18:49 +01:00
|
|
|
|
2024-03-14 10:23:46 +01:00
|
|
|
[nameof<Dmp>(x => x.authorizationFlags), AppPermission.EditDmp].join('.'),
|
2024-03-15 13:13:55 +01:00
|
|
|
[nameof<Dmp>(x => x.authorizationFlags), AppPermission.DeleteDmp].join('.'),
|
2024-03-19 16:21:50 +01:00
|
|
|
[nameof<Dmp>(x => x.authorizationFlags), AppPermission.EditDescription].join('.'),
|
2024-03-14 10:23:46 +01:00
|
|
|
|
2024-01-15 17:47:34 +01:00
|
|
|
[nameof<Dmp>(x => x.properties), nameof<DmpProperties>(x => x.dmpBlueprintValues), nameof<DmpBlueprintValue>(x => x.fieldId)].join('.'),
|
|
|
|
[nameof<Dmp>(x => x.properties), nameof<DmpProperties>(x => x.dmpBlueprintValues), nameof<DmpBlueprintValue>(x => x.fieldValue)].join('.'),
|
2024-02-01 13:42:23 +01:00
|
|
|
[nameof<Dmp>(x => x.properties), nameof<DmpProperties>(x => x.contacts), nameof<DmpContact>(x => x.user), nameof<DmpAssociatedUser>(x => x.id)].join('.'),
|
2024-01-15 17:47:34 +01:00
|
|
|
[nameof<Dmp>(x => x.properties), nameof<DmpProperties>(x => x.contacts), nameof<DmpContact>(x => x.firstName)].join('.'),
|
|
|
|
[nameof<Dmp>(x => x.properties), nameof<DmpProperties>(x => x.contacts), nameof<DmpContact>(x => x.lastName)].join('.'),
|
|
|
|
[nameof<Dmp>(x => x.properties), nameof<DmpProperties>(x => x.contacts), nameof<DmpContact>(x => x.email)].join('.'),
|
|
|
|
|
|
|
|
|
2023-12-28 16:18:49 +01:00
|
|
|
// [nameof<Dmp>(x => x.entityDois), nameof<EntityDoi>(x => x.id)].join('.'),
|
|
|
|
// [nameof<Dmp>(x => x.entityDois), nameof<EntityDoi>(x => x.repositoryId)].join('.'),
|
|
|
|
// [nameof<Dmp>(x => x.entityDois), nameof<EntityDoi>(x => x.doi)].join('.'),
|
|
|
|
[nameof<Dmp>(x => x.descriptions), nameof<Description>(x => x.id)].join('.'),
|
|
|
|
[nameof<Dmp>(x => x.descriptions), nameof<Description>(x => x.label)].join('.'),
|
|
|
|
[nameof<Dmp>(x => x.descriptions), nameof<Description>(x => x.status)].join('.'),
|
2024-03-15 17:28:39 +01:00
|
|
|
[nameof<Dmp>(x => x.descriptions), nameof<Description>(x => x.isActive)].join('.'),
|
2023-12-28 16:18:49 +01:00
|
|
|
[nameof<Dmp>(x => x.descriptions), nameof<Description>(x => x.dmpDescriptionTemplate), nameof<DmpDescriptionTemplate>(x => x.id)].join('.'),
|
|
|
|
[nameof<Dmp>(x => x.descriptions), nameof<Description>(x => x.dmpDescriptionTemplate), nameof<DmpDescriptionTemplate>(x => x.sectionId)].join('.'),
|
2024-04-03 16:50:47 +02:00
|
|
|
[nameof<Dmp>(x => x.descriptions), nameof<Description>(x => x.dmpDescriptionTemplate), nameof<DmpDescriptionTemplate>(x => x.descriptionTemplateGroupId)].join('.'),
|
2024-04-05 08:44:26 +02:00
|
|
|
[nameof<Dmp>(x => x.descriptions), nameof<Description>(x => x.dmpDescriptionTemplate), nameof<DmpDescriptionTemplate>(x => x.isActive)].join('.'),
|
2023-12-28 16:18:49 +01:00
|
|
|
|
2024-02-22 12:57:42 +01:00
|
|
|
[nameof<Dmp>(x => x.dmpUsers), nameof<DmpUser>(x => x.id)].join('.'),
|
|
|
|
[nameof<Dmp>(x => x.dmpUsers), nameof<DmpUser>(x => x.user.id)].join('.'),
|
|
|
|
[nameof<Dmp>(x => x.dmpUsers), nameof<DmpUser>(x => x.user.name)].join('.'),
|
|
|
|
[nameof<Dmp>(x => x.dmpUsers), nameof<DmpUser>(x => x.role)].join('.'),
|
|
|
|
[nameof<Dmp>(x => x.dmpUsers), nameof<DmpUser>(x => x.sectionId)].join('.'),
|
2024-03-11 08:47:03 +01:00
|
|
|
[nameof<Dmp>(x => x.dmpUsers), nameof<DmpUser>(x => x.isActive)].join('.'),
|
2024-02-22 12:57:42 +01:00
|
|
|
|
2023-12-28 16:18:49 +01:00
|
|
|
[nameof<Dmp>(x => x.dmpReferences), nameof<DmpReference>(x => x.id)].join('.'),
|
2024-01-19 17:28:53 +01:00
|
|
|
[nameof<Dmp>(x => x.dmpReferences), nameof<DmpReference>(x => x.isActive)].join('.'),
|
2024-01-18 13:23:20 +01:00
|
|
|
[nameof<Dmp>(x => x.dmpReferences), nameof<DmpReference>(x => x.data), nameof<DmpReferenceData>(x => x.blueprintFieldId)].join('.'),
|
2023-12-28 16:18:49 +01:00
|
|
|
[nameof<Dmp>(x => x.dmpReferences), nameof<DmpReference>(x => x.reference), nameof<Reference>(x => x.id)].join('.'),
|
|
|
|
[nameof<Dmp>(x => x.dmpReferences), nameof<DmpReference>(x => x.reference), nameof<Reference>(x => x.label)].join('.'),
|
2024-04-17 16:17:36 +02:00
|
|
|
[nameof<Dmp>(x => x.dmpReferences), nameof<DmpReference>(x => x.reference), nameof<Reference>(x => x.type), nameof<ReferenceType>(x => x.id)].join('.'),
|
2023-12-28 16:18:49 +01:00
|
|
|
[nameof<Dmp>(x => x.dmpReferences), nameof<DmpReference>(x => x.reference), nameof<Reference>(x => x.source)].join('.'),
|
|
|
|
[nameof<Dmp>(x => x.dmpReferences), nameof<DmpReference>(x => x.reference), nameof<Reference>(x => x.reference)].join('.'),
|
2024-01-18 13:23:20 +01:00
|
|
|
[nameof<Dmp>(x => x.dmpReferences), nameof<DmpReference>(x => x.reference), nameof<Reference>(x => x.sourceType)].join('.'),
|
2023-12-28 16:18:49 +01:00
|
|
|
|
|
|
|
|
2024-01-15 17:47:34 +01:00
|
|
|
[nameof<Dmp>(x => x.dmpDescriptionTemplates), nameof<DmpDescriptionTemplate>(x => x.sectionId)].join('.'),
|
|
|
|
[nameof<Dmp>(x => x.dmpDescriptionTemplates), nameof<DmpDescriptionTemplate>(x => x.descriptionTemplateGroupId)].join('.'),
|
2024-03-26 17:44:59 +01:00
|
|
|
[nameof<Dmp>(x => x.dmpDescriptionTemplates), nameof<DmpDescriptionTemplate>(x => x.isActive)].join('.'),
|
2024-01-15 17:47:34 +01:00
|
|
|
|
|
|
|
|
2023-12-28 16:18:49 +01:00
|
|
|
// nameof<Dmp>(x => x.id),
|
|
|
|
// nameof<Dmp>(x => x.label),
|
|
|
|
// nameof<Dmp>(x => x.status),
|
|
|
|
// nameof<Dmp>(x => x.description),
|
|
|
|
// nameof<Dmp>(x => x.status),
|
|
|
|
...DmpEditorResolver.blueprintLookupFields(nameof<Dmp>(x => x.blueprint)),
|
|
|
|
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
|
|
|
public static blueprintLookupFields(prefix?: string): string[] {
|
|
|
|
return [
|
2024-01-15 17:47:34 +01:00
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.id)].join('.'),
|
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.definition)].join('.'),
|
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.definition), nameof<DmpBlueprintDefinition>(x => x.sections), nameof<DmpBlueprintDefinitionSection>(x => x.id)].join('.'),
|
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.definition), nameof<DmpBlueprintDefinition>(x => x.sections), nameof<DmpBlueprintDefinitionSection>(x => x.label)].join('.'),
|
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.definition), nameof<DmpBlueprintDefinition>(x => x.sections), nameof<DmpBlueprintDefinitionSection>(x => x.ordinal)].join('.'),
|
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.definition), nameof<DmpBlueprintDefinition>(x => x.sections), nameof<DmpBlueprintDefinitionSection>(x => x.hasTemplates)].join('.'),
|
2024-01-26 11:17:01 +01:00
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.definition), nameof<DmpBlueprintDefinition>(x => x.sections), nameof<DmpBlueprintDefinitionSection>(x => x.descriptionTemplates), nameof<DescriptionTemplatesInSection>(x => x.descriptionTemplateGroupId)].join('.'),
|
2024-04-03 16:50:47 +02:00
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.definition), nameof<DmpBlueprintDefinition>(x => x.sections), nameof<DmpBlueprintDefinitionSection>(x => x.descriptionTemplates), nameof<DescriptionTemplatesInSection>(x => x.minMultiplicity)].join('.'),
|
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.definition), nameof<DmpBlueprintDefinition>(x => x.sections), nameof<DmpBlueprintDefinitionSection>(x => x.descriptionTemplates), nameof<DescriptionTemplatesInSection>(x => x.maxMultiplicity)].join('.'),
|
2024-01-15 17:47:34 +01:00
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.definition), nameof<DmpBlueprintDefinition>(x => x.sections), nameof<DmpBlueprintDefinitionSection>(x => x.fields), nameof<FieldInSection>(x => x.id)].join('.'),
|
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.definition), nameof<DmpBlueprintDefinition>(x => x.sections), nameof<DmpBlueprintDefinitionSection>(x => x.fields), nameof<FieldInSection>(x => x.category)].join('.'),
|
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.definition), nameof<DmpBlueprintDefinition>(x => x.sections), nameof<DmpBlueprintDefinitionSection>(x => x.fields), nameof<FieldInSection>(x => x.label)].join('.'),
|
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.definition), nameof<DmpBlueprintDefinition>(x => x.sections), nameof<DmpBlueprintDefinitionSection>(x => x.fields), nameof<FieldInSection>(x => x.placeholder)].join('.'),
|
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.definition), nameof<DmpBlueprintDefinition>(x => x.sections), nameof<DmpBlueprintDefinitionSection>(x => x.fields), nameof<FieldInSection>(x => x.description)].join('.'),
|
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.definition), nameof<DmpBlueprintDefinition>(x => x.sections), nameof<DmpBlueprintDefinitionSection>(x => x.fields), nameof<FieldInSection>(x => x.required)].join('.'),
|
2024-02-09 21:46:05 +01:00
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.definition), nameof<DmpBlueprintDefinition>(x => x.sections), nameof<DmpBlueprintDefinitionSection>(x => x.fields), nameof<FieldInSection>(x => x.ordinal)].join('.'),
|
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.definition), nameof<DmpBlueprintDefinition>(x => x.sections), nameof<DmpBlueprintDefinitionSection>(x => x.fields), nameof<ExtraFieldInSection>(x => x.dataType)].join('.'),
|
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.definition), nameof<DmpBlueprintDefinition>(x => x.sections), nameof<DmpBlueprintDefinitionSection>(x => x.fields), nameof<SystemFieldInSection>(x => x.systemFieldType)].join('.'),
|
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.definition), nameof<DmpBlueprintDefinition>(x => x.sections), nameof<DmpBlueprintDefinitionSection>(x => x.fields), nameof<ReferenceTypeFieldInSection>(x => x.referenceType), nameof<ReferenceType>(x => x.id)].join('.'),
|
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.definition), nameof<DmpBlueprintDefinition>(x => x.sections), nameof<DmpBlueprintDefinitionSection>(x => x.fields), nameof<ReferenceTypeFieldInSection>(x => x.referenceType), nameof<ReferenceType>(x => x.name)].join('.'),
|
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.definition), nameof<DmpBlueprintDefinition>(x => x.sections), nameof<DmpBlueprintDefinitionSection>(x => x.fields), nameof<ReferenceTypeFieldInSection>(x => x.referenceType), nameof<ReferenceType>(x => x.code)].join('.'),
|
2024-04-19 10:10:51 +02:00
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.definition), nameof<DmpBlueprintDefinition>(x => x.sections), nameof<DmpBlueprintDefinitionSection>(x => x.fields), nameof<ReferenceTypeFieldInSection>(x => x.multipleSelect)].join('.'),
|
2024-04-17 16:17:36 +02:00
|
|
|
(prefix ? prefix + '.' : '') + [nameof<DmpBlueprint>(x => x.definition), nameof<DmpBlueprintDefinition>(x => x.sections), nameof<DmpBlueprintDefinitionSection>(x => x.fields), nameof<ReferenceTypeFieldInSection>(x => x.referenceType), nameof<ReferenceType>(x => x.definition), nameof<ReferenceTypeDefinition>(x=> x.sources), nameof<ExternalFetcherBaseSourceConfiguration>(x=> x.referenceTypeDependencies) , nameof<ReferenceType>(x => x.id)].join('.'),
|
2023-12-28 16:18:49 +01:00
|
|
|
]
|
|
|
|
}
|
|
|
|
|
|
|
|
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
|
|
|
|
|
|
|
|
const fields = [
|
|
|
|
...DmpEditorResolver.lookupFields()
|
|
|
|
];
|
|
|
|
const id = route.paramMap.get('id');
|
|
|
|
if (id != null) {
|
|
|
|
return this.descriptionService.getSingle(Guid.parse(id), fields).pipe(tap(x => this.breadcrumbService.addIdResolvedValue(x.id?.toString(), x.label)), takeUntil(this._destroyed));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|