Merge remote-tracking branch 'templates/dspace-7.4' into issue-1671_fix-relationships-not-updating-view-on-submission-form_contribute-7.4

# Conflicts:
#	src/app/submission/sections/form/section-form.component.spec.ts
#	src/app/submission/sections/form/section-form.component.ts
This commit is contained in:
Alexandre Vryghem
2023-05-12 16:00:07 +02:00
1609 changed files with 96021 additions and 40610 deletions

View File

@@ -10,11 +10,10 @@ import { FormBuilderService } from '../../../shared/form/builder/form-builder.se
import { FormComponent } from '../../../shared/form/form.component';
import { FormService } from '../../../shared/form/form.service';
import { SectionModelComponent } from '../models/section.model';
import { SubmissionFormsConfigService } from '../../../core/config/submission-forms-config.service';
import { SubmissionFormsConfigDataService } from '../../../core/config/submission-forms-config-data.service';
import { hasValue, isEmpty, isNotEmpty, isUndefined } from '../../../shared/empty.util';
import { JsonPatchOperationPathCombiner } from '../../../core/json-patch/builder/json-patch-operation-path-combiner';
import { SubmissionFormsModel } from '../../../core/config/models/config-submission-forms.model';
import { SubmissionSectionError, SubmissionSectionObject } from '../../objects/submission-objects.reducer';
import { FormFieldPreviousValueObject } from '../../../shared/form/builder/models/form-field-previous-value-object';
import { SectionDataObject } from '../models/section-data.model';
import { renderSectionFor } from '../sections-decorator';
@@ -34,6 +33,11 @@ import { followLink } from '../../../shared/utils/follow-link-config.model';
import { environment } from '../../../../environments/environment';
import { ConfigObject } from '../../../core/config/models/config.model';
import { RemoteData } from '../../../core/data/remote-data';
import { SubmissionScopeType } from '../../../core/submission/submission-scope-type';
import { WorkflowItem } from '../../../core/submission/models/workflowitem.model';
import { SubmissionObject } from '../../../core/submission/models/submission-object.model';
import { SubmissionSectionObject } from '../../objects/submission-section-object.model';
import { SubmissionSectionError } from '../../objects/submission-section-error.model';
/**
* This component represents a section that contains a Form.
@@ -112,7 +116,7 @@ export class SubmissionSectionFormComponent extends SectionModelComponent {
*/
protected subs: Subscription[] = [];
protected workspaceItem: WorkspaceItem;
protected submissionObject: SubmissionObject;
/**
* The FormComponent reference
*/
@@ -125,7 +129,7 @@ export class SubmissionSectionFormComponent extends SectionModelComponent {
* @param {FormBuilderService} formBuilderService
* @param {SectionFormOperationsService} formOperationsService
* @param {FormService} formService
* @param {SubmissionFormsConfigService} formConfigService
* @param {SubmissionFormsConfigDataService} formConfigService
* @param {NotificationsService} notificationsService
* @param {SectionsService} sectionService
* @param {SubmissionService} submissionService
@@ -141,7 +145,7 @@ export class SubmissionSectionFormComponent extends SectionModelComponent {
protected formBuilderService: FormBuilderService,
protected formOperationsService: SectionFormOperationsService,
protected formService: FormService,
protected formConfigService: SubmissionFormsConfigService,
protected formConfigService: SubmissionFormsConfigDataService,
protected notificationsService: NotificationsService,
protected sectionService: SectionsService,
protected submissionService: SubmissionService,
@@ -173,10 +177,10 @@ export class SubmissionSectionFormComponent extends SectionModelComponent {
getRemoteDataPayload())
])),
take(1))
.subscribe(([sectionData, workspaceItem]: [WorkspaceitemSectionFormObject, WorkspaceItem]) => {
.subscribe(([sectionData, submissionObject]: [WorkspaceitemSectionFormObject, SubmissionObject]) => {
if (isUndefined(this.formModel)) {
// this.sectionData.errorsToShow = [];
this.workspaceItem = workspaceItem;
this.submissionObject = submissionObject;
// Is the first loading so init form
this.initForm(sectionData);
this.sectionData.data = sectionData;
@@ -223,7 +227,7 @@ export class SubmissionSectionFormComponent extends SectionModelComponent {
const sectionDataToCheck = {};
Object.keys(sectionData).forEach((key) => {
if (this.sectionData.data && hasValue(this.sectionData.data[key])) {
if (this.sectionData.data && hasValue(this.sectionData.data[key]) && this.inCurrentSubmissionScope(key)) {
sectionDataToCheck[key] = this.sectionData.data[key];
}
});
@@ -246,6 +250,28 @@ export class SubmissionSectionFormComponent extends SectionModelComponent {
return isNotEmpty(diffResult);
}
/**
* Whether a specific field is editable in the current scope. Unscoped fields always return true.
* @private
*/
private inCurrentSubmissionScope(field: string): boolean {
const scope = this.formConfig?.rows.find(row => {
return row.fields?.[0]?.selectableMetadata?.[0]?.metadata === field;
}).fields?.[0]?.scope;
switch (scope) {
case SubmissionScopeType.WorkspaceItem: {
return (this.submissionObject as any).type === WorkspaceItem.type.value;
}
case SubmissionScopeType.WorkflowItem: {
return (this.submissionObject as any).type === WorkflowItem.type.value;
}
default: {
return true;
}
}
}
/**
* Initialize form model
*