[CST-6174] Fix issue with item access condition which doesn't consider the maxStartDate/maxEndDate

This commit is contained in:
Giuseppe Digilio
2022-06-22 15:46:30 +02:00
parent 5d130156e8
commit 8c14822eef

View File

@@ -41,7 +41,9 @@ import {
FORM_ACCESS_CONDITION_TYPE_LAYOUT FORM_ACCESS_CONDITION_TYPE_LAYOUT
} from './section-accesses.model'; } from './section-accesses.model';
import { hasValue, isNotEmpty, isNotNull } from '../../../shared/empty.util'; import { hasValue, isNotEmpty, isNotNull } from '../../../shared/empty.util';
import { WorkspaceitemSectionAccessesObject } from '../../../core/submission/models/workspaceitem-section-accesses.model'; import {
WorkspaceitemSectionAccessesObject
} from '../../../core/submission/models/workspaceitem-section-accesses.model';
import { SubmissionAccessesConfigService } from '../../../core/config/submission-accesses-config.service'; import { SubmissionAccessesConfigService } from '../../../core/config/submission-accesses-config.service';
import { getFirstSucceededRemoteData } from '../../../core/shared/operators'; import { getFirstSucceededRemoteData } from '../../../core/shared/operators';
import { FormComponent } from '../../../shared/form/form.component'; import { FormComponent } from '../../../shared/form/form.component';
@@ -50,8 +52,12 @@ import { JsonPatchOperationPathCombiner } from '../../../core/json-patch/builder
import { SectionFormOperationsService } from '../form/section-form-operations.service'; import { SectionFormOperationsService } from '../form/section-form-operations.service';
import { JsonPatchOperationsBuilder } from '../../../core/json-patch/builder/json-patch-operations-builder'; import { JsonPatchOperationsBuilder } from '../../../core/json-patch/builder/json-patch-operations-builder';
import { AccessesConditionOption } from '../../../core/config/models/config-accesses-conditions-options.model'; import { AccessesConditionOption } from '../../../core/config/models/config-accesses-conditions-options.model';
import { SubmissionJsonPatchOperationsService } from '../../../core/submission/submission-json-patch-operations.service'; import {
SubmissionJsonPatchOperationsService
} from '../../../core/submission/submission-json-patch-operations.service';
import { dateToISOFormat } from '../../../shared/date.util'; import { dateToISOFormat } from '../../../shared/date.util';
import { DynamicFormControlCondition } from '@ng-dynamic-forms/core/lib/model/misc/dynamic-form-control-relation.model';
import { DynamicDateControlValue } from '@ng-dynamic-forms/core/lib/model/dynamic-date-control.model';
/** /**
* This component represents a section for managing item's access conditions. * This component represents a section for managing item's access conditions.
@@ -322,40 +328,61 @@ export class SubmissionSectionAccessesComponent extends SectionModelComponent {
} }
accessConditionTypeModelConfig.options = accessConditionTypeOptions; accessConditionTypeModelConfig.options = accessConditionTypeOptions;
// Dynamically assign of relation in config. For startdate, endDate, groups. // Dynamically assign of relation in config. For startDate and endDate.
const hasStart = []; const startDateCondition: DynamicFormControlCondition[] = [];
const hasEnd = []; const endDateCondition: DynamicFormControlCondition[] = [];
const hasGroups = []; let maxStartDate: DynamicDateControlValue;
let maxEndDate: DynamicDateControlValue;
this.availableAccessConditionOptions.forEach((condition) => { this.availableAccessConditionOptions.forEach((condition) => {
const showStart: boolean = condition.hasStartDate === true;
const showEnd: boolean = condition.hasEndDate === true; if (condition.hasStartDate) {
const showGroups: boolean = showStart || showEnd; startDateCondition.push({ id: 'name', value: condition.name });
if (showStart) { if (condition.maxStartDate) {
hasStart.push({ id: 'name', value: condition.name }); const min = new Date(condition.maxStartDate);
maxStartDate = {
year: min.getUTCFullYear(),
month: min.getUTCMonth() + 1,
day: min.getUTCDate()
};
}
} }
if (showEnd) { if (condition.hasEndDate) {
hasEnd.push({ id: 'name', value: condition.name }); endDateCondition.push({ id: 'name', value: condition.name });
} if (condition.maxEndDate) {
if (showGroups) { const max = new Date(condition.maxEndDate);
hasGroups.push({ id: 'name', value: condition.name }); maxEndDate = {
year: max.getUTCFullYear(),
month: max.getUTCMonth() + 1,
day: max.getUTCDate()
};
}
} }
}); });
const confStart = { relations: [{ match: MATCH_ENABLED, operator: OR_OPERATOR, when: hasStart }] }; const confStart = { relations: [{ match: MATCH_ENABLED, operator: OR_OPERATOR, when: startDateCondition }] };
const confEnd = { relations: [{ match: MATCH_ENABLED, operator: OR_OPERATOR, when: hasEnd }] }; const confEnd = { relations: [{ match: MATCH_ENABLED, operator: OR_OPERATOR, when: endDateCondition }] };
const hasStartDate = startDateCondition.length > 0;
const hasEndDate = endDateCondition.length > 0;
accessConditionsArrayConfig.groupFactory = () => { accessConditionsArrayConfig.groupFactory = () => {
const type = new DynamicSelectModel(accessConditionTypeModelConfig, FORM_ACCESS_CONDITION_TYPE_LAYOUT); const type = new DynamicSelectModel(accessConditionTypeModelConfig, FORM_ACCESS_CONDITION_TYPE_LAYOUT);
const startDateConfig = Object.assign({}, FORM_ACCESS_CONDITION_START_DATE_CONFIG, confStart); const startDateConfig = Object.assign({}, FORM_ACCESS_CONDITION_START_DATE_CONFIG, confStart);
if (maxStartDate) {
startDateConfig.max = maxStartDate;
}
const endDateConfig = Object.assign({}, FORM_ACCESS_CONDITION_END_DATE_CONFIG, confEnd); const endDateConfig = Object.assign({}, FORM_ACCESS_CONDITION_END_DATE_CONFIG, confEnd);
if (maxEndDate) {
endDateConfig.max = maxEndDate;
}
const startDate = new DynamicDatePickerModel(startDateConfig, FORM_ACCESS_CONDITION_START_DATE_LAYOUT); const startDate = new DynamicDatePickerModel(startDateConfig, FORM_ACCESS_CONDITION_START_DATE_LAYOUT);
const endDate = new DynamicDatePickerModel(endDateConfig, FORM_ACCESS_CONDITION_END_DATE_LAYOUT); const endDate = new DynamicDatePickerModel(endDateConfig, FORM_ACCESS_CONDITION_END_DATE_LAYOUT);
const accessConditionGroupConfig = Object.assign({}, ACCESS_CONDITION_GROUP_CONFIG); const accessConditionGroupConfig = Object.assign({}, ACCESS_CONDITION_GROUP_CONFIG);
accessConditionGroupConfig.group = [type]; accessConditionGroupConfig.group = [type];
if (hasStart.length > 0) { if (hasStartDate) {
accessConditionGroupConfig.group.push(startDate); accessConditionGroupConfig.group.push(startDate);
} }
if (hasEnd.length > 0) { if (hasEndDate) {
accessConditionGroupConfig.group.push(endDate); accessConditionGroupConfig.group.push(endDate);
} }
return [new DynamicFormGroupModel(accessConditionGroupConfig, ACCESS_CONDITION_GROUP_LAYOUT)]; return [new DynamicFormGroupModel(accessConditionGroupConfig, ACCESS_CONDITION_GROUP_LAYOUT)];