Skip to content

Commit 0aa14bc

Browse files
committed
[CST-6174] Set maxStartDate/maxEndDate when building form models
1 parent 2a20b0c commit 0aa14bc

3 files changed

Lines changed: 71 additions & 65 deletions

File tree

src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.spec.ts

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import { ChangeDetectorRef, Component, NO_ERRORS_SCHEMA } from '@angular/core';
2-
import { waitForAsync, ComponentFixture, inject, TestBed, fakeAsync, tick } from '@angular/core/testing';
2+
import { ComponentFixture, fakeAsync, inject, TestBed, tick, waitForAsync } from '@angular/core/testing';
33
import { BrowserModule } from '@angular/platform-browser';
44
import { CommonModule } from '@angular/common';
55
import { TranslateModule } from '@ngx-translate/core';
66
import {
7-
DynamicFormArrayGroupModel,
87
DynamicFormArrayModel,
98
DynamicFormControlEvent,
109
DynamicFormGroupModel,
@@ -17,13 +16,13 @@ import { SubmissionService } from '../../../../submission.service';
1716
import { SubmissionSectionUploadFileEditComponent } from './section-upload-file-edit.component';
1817
import { POLICY_DEFAULT_WITH_LIST } from '../../section-upload.component';
1918
import {
19+
mockFileFormData,
2020
mockSubmissionCollectionId,
2121
mockSubmissionId,
22+
mockSubmissionObject,
2223
mockUploadConfigResponse,
2324
mockUploadConfigResponseMetadata,
2425
mockUploadFiles,
25-
mockFileFormData,
26-
mockSubmissionObject,
2726
} from '../../../../../shared/mocks/submission.mock';
2827
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
2928
import { FormComponent } from '../../../../../shared/form/form.component';
@@ -32,12 +31,20 @@ import { getMockFormService } from '../../../../../shared/mocks/form-service.moc
3231
import { createTestComponent } from '../../../../../shared/testing/utils.test';
3332
import { NgbActiveModal, NgbModal } from '@ng-bootstrap/ng-bootstrap';
3433
import { JsonPatchOperationsBuilder } from '../../../../../core/json-patch/builder/json-patch-operations-builder';
35-
import { SubmissionJsonPatchOperationsServiceStub } from '../../../../../shared/testing/submission-json-patch-operations-service.stub';
36-
import { SubmissionJsonPatchOperationsService } from '../../../../../core/submission/submission-json-patch-operations.service';
34+
import {
35+
SubmissionJsonPatchOperationsServiceStub
36+
} from '../../../../../shared/testing/submission-json-patch-operations-service.stub';
37+
import {
38+
SubmissionJsonPatchOperationsService
39+
} from '../../../../../core/submission/submission-json-patch-operations.service';
3740
import { SectionUploadService } from '../../section-upload.service';
3841
import { getMockSectionUploadService } from '../../../../../shared/mocks/section-upload.service.mock';
39-
import { FormFieldMetadataValueObject } from '../../../../../shared/form/builder/models/form-field-metadata-value.model';
40-
import { JsonPatchOperationPathCombiner } from '../../../../../core/json-patch/builder/json-patch-operation-path-combiner';
42+
import {
43+
FormFieldMetadataValueObject
44+
} from '../../../../../shared/form/builder/models/form-field-metadata-value.model';
45+
import {
46+
JsonPatchOperationPathCombiner
47+
} from '../../../../../core/json-patch/builder/json-patch-operation-path-combiner';
4148
import { dateToISOFormat } from '../../../../../shared/date.util';
4249
import { of } from 'rxjs';
4350

@@ -171,6 +178,8 @@ describe('SubmissionSectionUploadFileEditComponent test suite', () => {
171178
it('should init form model properly', () => {
172179
comp.fileData = fileData;
173180
comp.formId = 'testFileForm';
181+
const maxStartDate = {year: 2022, month: 1, day: 12};
182+
const maxEndDate = {year: 2019, month: 7, day: 12};
174183

175184
comp.ngOnInit();
176185

@@ -179,6 +188,10 @@ describe('SubmissionSectionUploadFileEditComponent test suite', () => {
179188
expect(comp.formModel[0] instanceof DynamicFormGroupModel).toBeTruthy();
180189
expect(comp.formModel[1] instanceof DynamicFormArrayModel).toBeTruthy();
181190
expect((comp.formModel[1] as DynamicFormArrayModel).groups.length).toBe(2);
191+
const startDateModel = formbuilderService.findById('startDate', comp.formModel);
192+
expect(startDateModel.max).toEqual(maxStartDate);
193+
const endDateModel = formbuilderService.findById('endDate', comp.formModel);
194+
expect(endDateModel.max).toEqual(maxEndDate);
182195
});
183196

184197
it('should call setOptions method onChange', () => {
@@ -208,20 +221,19 @@ describe('SubmissionSectionUploadFileEditComponent test suite', () => {
208221
const formGroup = formbuilderService.createFormGroup(comp.formModel);
209222
const control = formbuilderService.getFormControlById('name', formGroup, comp.formModel, 0);
210223

211-
spyOn(formbuilderService, 'findById').and.callThrough();
224+
spyOn(control.parent, 'markAsDirty').and.callThrough();
212225

213226
control.value = 'openaccess';
214227
comp.setOptions(model, control);
215-
expect(formbuilderService.findById).not.toHaveBeenCalledWith('endDate', (model.parent as DynamicFormArrayGroupModel).group);
216-
expect(formbuilderService.findById).not.toHaveBeenCalledWith('startDate', (model.parent as DynamicFormArrayGroupModel).group);
228+
expect(control.parent.markAsDirty).toHaveBeenCalled();
217229

218230
control.value = 'lease';
219231
comp.setOptions(model, control);
220-
expect(formbuilderService.findById).toHaveBeenCalledWith('endDate', (model.parent as DynamicFormArrayGroupModel).group);
232+
expect(control.parent.markAsDirty).toHaveBeenCalled();
221233

222234
control.value = 'embargo';
223235
comp.setOptions(model, control);
224-
expect(formbuilderService.findById).toHaveBeenCalledWith('startDate', (model.parent as DynamicFormArrayGroupModel).group);
236+
expect(control.parent.markAsDirty).toHaveBeenCalled();
225237
});
226238

227239
it('should retrieve Value From Field properly', () => {

src/app/submission/sections/upload/file/edit/section-upload-file-edit.component.ts

Lines changed: 45 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@ import { FormControl } from '@angular/forms';
33

44
import {
55
DYNAMIC_FORM_CONTROL_TYPE_DATEPICKER,
6-
DynamicDateControlModel,
76
DynamicDatePickerModel,
8-
DynamicFormArrayGroupModel,
97
DynamicFormArrayModel,
108
DynamicFormControlEvent,
119
DynamicFormControlModel,
@@ -57,6 +55,8 @@ import {
5755
} from '../../../../../core/json-patch/builder/json-patch-operation-path-combiner';
5856
import { SectionUploadService } from '../../section-upload.service';
5957
import { Subscription } from 'rxjs';
58+
import { DynamicFormControlCondition } from '@ng-dynamic-forms/core/lib/model/misc/dynamic-form-control-relation.model';
59+
import { DynamicDateControlValue } from '@ng-dynamic-forms/core/lib/model/dynamic-date-control.model';
6060

6161
/**
6262
* This component represents the edit form for bitstream
@@ -245,8 +245,6 @@ export class SubmissionSectionUploadFileEditComponent implements OnInit {
245245
this.availableAccessConditionOptions.filter((element) => element.name === control.value)
246246
.forEach((element) => accessCondition = element );
247247
if (isNotEmpty(accessCondition)) {
248-
const showGroups: boolean = accessCondition.hasStartDate === true || accessCondition.hasEndDate === true;
249-
250248
const startDateControl: FormControl = control.parent.get('startDate') as FormControl;
251249
const endDateControl: FormControl = control.parent.get('endDate') as FormControl;
252250

@@ -257,34 +255,6 @@ export class SubmissionSectionUploadFileEditComponent implements OnInit {
257255
startDateControl?.setValue(null);
258256
control.parent.markAsDirty();
259257
endDateControl?.setValue(null);
260-
261-
if (showGroups) {
262-
if (accessCondition.hasStartDate && accessCondition.maxStartDate) {
263-
const startDateModel = this.formBuilderService.findById(
264-
'startDate',
265-
(model.parent as DynamicFormArrayGroupModel).group) as DynamicDateControlModel;
266-
267-
const min = new Date(accessCondition.maxStartDate);
268-
startDateModel.max = {
269-
year: min.getUTCFullYear(),
270-
month: min.getUTCMonth() + 1,
271-
day: min.getUTCDate()
272-
};
273-
}
274-
if (accessCondition.hasEndDate && accessCondition.maxEndDate) {
275-
const endDateModel = this.formBuilderService.findById(
276-
'endDate',
277-
(model.parent as DynamicFormArrayGroupModel).group) as DynamicDateControlModel;
278-
279-
const max = new Date(accessCondition.maxEndDate);
280-
endDateModel.max = {
281-
year: max.getUTCFullYear(),
282-
month: max.getUTCMonth() + 1,
283-
day: max.getUTCDate()
284-
};
285-
286-
}
287-
}
288258
}
289259
}
290260

@@ -344,38 +314,63 @@ export class SubmissionSectionUploadFileEditComponent implements OnInit {
344314
}
345315
accessConditionTypeModelConfig.options = accessConditionTypeOptions;
346316

347-
// Dynamically assign of relation in config. For startdate, endDate, groups.
348-
const hasStart = [];
349-
const hasEnd = [];
350-
const hasGroups = [];
317+
// Dynamically assign of relation in config. For startDate and endDate.
318+
const startDateCondition: DynamicFormControlCondition[] = [];
319+
const endDateCondition: DynamicFormControlCondition[] = [];
320+
let maxStartDate: DynamicDateControlValue;
321+
let maxEndDate: DynamicDateControlValue;
351322
this.availableAccessConditionOptions.forEach((condition) => {
352-
const showStart: boolean = condition.hasStartDate === true;
353-
const showEnd: boolean = condition.hasEndDate === true;
354-
const showGroups: boolean = showStart || showEnd;
355-
if (showStart) {
356-
hasStart.push({id: 'name', value: condition.name});
357-
}
358-
if (showEnd) {
359-
hasEnd.push({id: 'name', value: condition.name});
323+
324+
if (condition.hasStartDate) {
325+
startDateCondition.push({ id: 'name', value: condition.name });
326+
if (condition.maxStartDate) {
327+
const min = new Date(condition.maxStartDate);
328+
maxStartDate = {
329+
year: min.getUTCFullYear(),
330+
month: min.getUTCMonth() + 1,
331+
day: min.getUTCDate()
332+
};
333+
}
360334
}
361-
if (showGroups) {
362-
hasGroups.push({id: 'name', value: condition.name});
335+
if (condition.hasEndDate) {
336+
endDateCondition.push({ id: 'name', value: condition.name });
337+
if (condition.maxEndDate) {
338+
const max = new Date(condition.maxEndDate);
339+
maxEndDate = {
340+
year: max.getUTCFullYear(),
341+
month: max.getUTCMonth() + 1,
342+
day: max.getUTCDate()
343+
};
344+
}
363345
}
364346
});
365-
const confStart = {relations: [{match: MATCH_ENABLED, operator: OR_OPERATOR, when: hasStart}]};
366-
const confEnd = {relations: [{match: MATCH_ENABLED, operator: OR_OPERATOR, when: hasEnd}]};
347+
const confStart = { relations: [{ match: MATCH_ENABLED, operator: OR_OPERATOR, when: startDateCondition }] };
348+
const confEnd = { relations: [{ match: MATCH_ENABLED, operator: OR_OPERATOR, when: endDateCondition }] };
349+
const hasStartDate = startDateCondition.length > 0;
350+
const hasEndDate = endDateCondition.length > 0;
367351

368352
accessConditionsArrayConfig.groupFactory = () => {
369353
const type = new DynamicSelectModel(accessConditionTypeModelConfig, BITSTREAM_FORM_ACCESS_CONDITION_TYPE_LAYOUT);
370354
const startDateConfig = Object.assign({}, BITSTREAM_FORM_ACCESS_CONDITION_START_DATE_CONFIG, confStart);
355+
if (maxStartDate) {
356+
startDateConfig.max = maxStartDate;
357+
}
358+
371359
const endDateConfig = Object.assign({}, BITSTREAM_FORM_ACCESS_CONDITION_END_DATE_CONFIG, confEnd);
360+
if (maxEndDate) {
361+
endDateConfig.max = maxEndDate;
362+
}
372363

373364
const startDate = new DynamicDatePickerModel(startDateConfig, BITSTREAM_FORM_ACCESS_CONDITION_START_DATE_LAYOUT);
374365
const endDate = new DynamicDatePickerModel(endDateConfig, BITSTREAM_FORM_ACCESS_CONDITION_END_DATE_LAYOUT);
375366
const accessConditionGroupConfig = Object.assign({}, BITSTREAM_ACCESS_CONDITION_GROUP_CONFIG);
376367
accessConditionGroupConfig.group = [type];
377-
if (hasStart.length > 0) { accessConditionGroupConfig.group.push(startDate); }
378-
if (hasEnd.length > 0) { accessConditionGroupConfig.group.push(endDate); }
368+
if (hasStartDate) {
369+
accessConditionGroupConfig.group.push(startDate);
370+
}
371+
if (hasEndDate) {
372+
accessConditionGroupConfig.group.push(endDate);
373+
}
379374
return [new DynamicFormGroupModel(accessConditionGroupConfig, BITSTREAM_ACCESS_CONDITION_GROUP_LAYOUT)];
380375
};
381376

src/app/submission/submission.module.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ import { ThemedSubmissionEditComponent } from './edit/themed-submission-edit.com
5050
import { ThemedSubmissionSubmitComponent } from './submit/themed-submission-submit.component';
5151
import { ThemedSubmissionImportExternalComponent } from './import-external/themed-submission-import-external.component';
5252
import { FormModule } from '../shared/form/form.module';
53-
import { NgbCollapseModule, NgbModalModule, NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap';
53+
import { NgbAccordionModule, NgbCollapseModule, NgbModalModule } from '@ng-bootstrap/ng-bootstrap';
5454
import { SubmissionSectionAccessesComponent } from './sections/accesses/section-accesses.component';
5555
import { SubmissionAccessesConfigService } from '../core/config/submission-accesses-config.service';
5656
import { SectionAccessesService } from './sections/accesses/section-accesses.service';
@@ -71,7 +71,6 @@ const ENTRY_COMPONENTS = [
7171
SubmissionSectionLicenseComponent,
7272
SubmissionSectionCcLicensesComponent,
7373
SubmissionSectionAccessesComponent,
74-
SubmissionSectionUploadFileEditComponent,
7574
SubmissionSectionSherpaPoliciesComponent,
7675
];
7776

0 commit comments

Comments
 (0)