Moved the use of store to services

This commit is contained in:
Giuseppe
2018-10-11 14:18:55 +02:00
parent d5c5749784
commit d2e522749d
13 changed files with 182 additions and 142 deletions

View File

@@ -46,6 +46,9 @@ export class NormalizedObjectFactory {
case ResourceType.Group: { case ResourceType.Group: {
return NormalizedGroupModel return NormalizedGroupModel
} }
case ResourceType.Workflowitem: {
return NormalizedWorkflowItem
}
default: { default: {
return undefined; return undefined;
} }

View File

@@ -18,8 +18,6 @@ export class JsonPatchOperationPathCombiner {
constructor(rootElement, ...subRootElements: string[]) { constructor(rootElement, ...subRootElements: string[]) {
this._rootElement = rootElement; this._rootElement = rootElement;
this._subRootElement = subRootElements.join('/'); this._subRootElement = subRootElements.join('/');
console.log(subRootElements);
console.log(this._subRootElement);
} }
get rootElement(): string { get rootElement(): string {

View File

@@ -10,8 +10,6 @@ import {
SimpleChanges SimpleChanges
} from '@angular/core'; } from '@angular/core';
import { FormControl } from '@angular/forms'; import { FormControl } from '@angular/forms';
import { Store } from '@ngrx/store';
import { Subscription } from 'rxjs/Subscription'; import { Subscription } from 'rxjs/Subscription';
import { isNullOrUndefined } from 'util'; import { isNullOrUndefined } from 'util';
@@ -27,8 +25,6 @@ import { PaginatedList } from '../../../core/data/paginated-list';
import { JsonPatchOperationsService } from '../../../core/json-patch/json-patch-operations.service'; import { JsonPatchOperationsService } from '../../../core/json-patch/json-patch-operations.service';
import { SubmitDataResponseDefinitionObject } from '../../../core/shared/submit-data-response-definition.model'; import { SubmitDataResponseDefinitionObject } from '../../../core/shared/submit-data-response-definition.model';
import { SubmissionService } from '../../submission.service'; import { SubmissionService } from '../../submission.service';
import { SubmissionState } from '../../submission.reducers';
import { ChangeSubmissionCollectionAction } from '../../objects/submission-objects.actions';
import { SubmissionObject } from '../../../core/submission/models/submission-object.model'; import { SubmissionObject } from '../../../core/submission/models/submission-object.model';
@Component({ @Component({
@@ -66,7 +62,6 @@ export class SubmissionFormCollectionComponent implements OnChanges, OnInit {
private communityDataService: CommunityDataService, private communityDataService: CommunityDataService,
private operationsBuilder: JsonPatchOperationsBuilder, private operationsBuilder: JsonPatchOperationsBuilder,
private operationsService: JsonPatchOperationsService<SubmitDataResponseDefinitionObject>, private operationsService: JsonPatchOperationsService<SubmitDataResponseDefinitionObject>,
private store: Store<SubmissionState>,
private submissionService: SubmissionService) { private submissionService: SubmissionService) {
} }
@@ -156,7 +151,7 @@ export class SubmissionFormCollectionComponent implements OnChanges, OnInit {
this.selectedCollectionId = event.collection.id; this.selectedCollectionId = event.collection.id;
this.selectedCollectionName = event.collection.name; this.selectedCollectionName = event.collection.name;
this.collectionChange.emit(submissionObject[0]); this.collectionChange.emit(submissionObject[0]);
this.store.dispatch(new ChangeSubmissionCollectionAction(this.submissionId, event.collection.id)); this.submissionService.changeSubmissionCollection(this.submissionId, event.collection.id);
this.disabled = false; this.disabled = false;
this.cdr.detectChanges(); this.cdr.detectChanges();
}) })

View File

@@ -1,15 +1,7 @@
import { Component, Input, OnChanges, SimpleChanges } from '@angular/core'; import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';
import { Store } from '@ngrx/store';
import { SubmissionRestService } from '../../submission-rest.service'; import { SubmissionRestService } from '../../submission-rest.service';
import { SubmissionService } from '../../submission.service'; import { SubmissionService } from '../../submission.service';
import { SubmissionState } from '../../submission.reducers';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import {
DepositSubmissionAction, DiscardSubmissionAction,
SaveAndDepositSubmissionAction,
SaveForLaterSubmissionFormAction,
SaveSubmissionFormAction
} from '../../objects/submission-objects.actions';
import { Observable } from 'rxjs/Observable'; import { Observable } from 'rxjs/Observable';
import { SubmissionScopeType } from '../../../core/submission/submission-scope-type'; import { SubmissionScopeType } from '../../../core/submission/submission-scope-type';
@@ -29,8 +21,7 @@ export class SubmissionFormFooterComponent implements OnChanges {
constructor(private modalService: NgbModal, constructor(private modalService: NgbModal,
private restService: SubmissionRestService, private restService: SubmissionRestService,
private submissionService: SubmissionService, private submissionService: SubmissionService) {
private store: Store<SubmissionState>) {
} }
ngOnChanges(changes: SimpleChanges) { ngOnChanges(changes: SimpleChanges) {
@@ -47,22 +38,22 @@ export class SubmissionFormFooterComponent implements OnChanges {
} }
save(event) { save(event) {
this.store.dispatch(new SaveSubmissionFormAction(this.submissionId)); this.submissionService.dispatchSave(this.submissionId);
} }
saveLater(event) { saveLater(event) {
this.store.dispatch(new SaveForLaterSubmissionFormAction(this.submissionId)); this.submissionService.dispatchSaveForLater(this.submissionId);
} }
public deposit(event) { public deposit(event) {
this.store.dispatch(new SaveAndDepositSubmissionAction(this.submissionId)); this.submissionService.dispatchDeposit(this.submissionId);
} }
public confirmDiscard(content) { public confirmDiscard(content) {
this.modalService.open(content).result.then( this.modalService.open(content).result.then(
(result) => { (result) => {
if (result === 'ok') { if (result === 'ok') {
this.store.dispatch(new DiscardSubmissionAction(this.submissionId)); this.submissionService.dispatchDiscard(this.submissionId)
} }
} }
); );

View File

@@ -1,16 +1,8 @@
import { ChangeDetectorRef, Component, Input, OnChanges, OnDestroy, SimpleChanges } from '@angular/core'; import { ChangeDetectorRef, Component, Input, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
import { Store } from '@ngrx/store'; import { hasValue, isNotEmpty } from '../../shared/empty.util';
import {
CancelSubmissionFormAction,
InitSubmissionFormAction,
ResetSubmissionFormAction
} from '../objects/submission-objects.actions';
import { hasValue, isNotEmpty, isNotUndefined } from '../../shared/empty.util';
import { submissionObjectFromIdSelector } from '../selectors';
import { SubmissionObjectEntry } from '../objects/submission-objects.reducer'; import { SubmissionObjectEntry } from '../objects/submission-objects.reducer';
import { WorkspaceitemSectionsObject } from '../../core/submission/models/workspaceitem-sections.model'; import { WorkspaceitemSectionsObject } from '../../core/submission/models/workspaceitem-sections.model';
import { SubmissionDefinitionsModel } from '../../core/shared/config/config-submission-definitions.model'; import { SubmissionDefinitionsModel } from '../../core/shared/config/config-submission-definitions.model';
import { SubmissionState } from '../submission.reducers';
import { Workspaceitem } from '../../core/submission/models/workspaceitem.model'; import { Workspaceitem } from '../../core/submission/models/workspaceitem.model';
import { SubmissionService } from '../submission.service'; import { SubmissionService } from '../submission.service';
import { Subscription } from 'rxjs/Subscription'; import { Subscription } from 'rxjs/Subscription';
@@ -50,7 +42,6 @@ export class SubmissionFormComponent implements OnChanges, OnDestroy {
private authService: AuthService, private authService: AuthService,
private changeDetectorRef: ChangeDetectorRef, private changeDetectorRef: ChangeDetectorRef,
private halService: HALEndpointService, private halService: HALEndpointService,
private store: Store<SubmissionState>,
private submissionService: SubmissionService) { private submissionService: SubmissionService) {
this.isActive = true; this.isActive = true;
} }
@@ -58,8 +49,8 @@ export class SubmissionFormComponent implements OnChanges, OnDestroy {
ngOnChanges(changes: SimpleChanges) { ngOnChanges(changes: SimpleChanges) {
if (this.collectionId && this.submissionId) { if (this.collectionId && this.submissionId) {
this.isActive = true; this.isActive = true;
this.submissionSections = this.store.select(submissionObjectFromIdSelector(this.submissionId)) this.submissionSections = this.submissionService.getSubmissionObject(this.submissionId)
.filter((submission: SubmissionObjectEntry) => isNotUndefined(submission) && this.isActive) .filter(() => this.isActive)
.map((submission: SubmissionObjectEntry) => submission.isLoading) .map((submission: SubmissionObjectEntry) => submission.isLoading)
.map((isLoading: boolean) => isLoading) .map((isLoading: boolean) => isLoading)
.distinctUntilChanged() .distinctUntilChanged()
@@ -71,8 +62,8 @@ export class SubmissionFormComponent implements OnChanges, OnDestroy {
} }
}); });
this.loading = this.store.select(submissionObjectFromIdSelector(this.submissionId)) this.loading = this.submissionService.getSubmissionObject(this.submissionId)
.filter((submission: SubmissionObjectEntry) => isNotUndefined(submission) && this.isActive) .filter(() => this.isActive)
.map((submission: SubmissionObjectEntry) => submission.isLoading) .map((submission: SubmissionObjectEntry) => submission.isLoading)
.map((isLoading: boolean) => isLoading) .map((isLoading: boolean) => isLoading)
.distinctUntilChanged(); .distinctUntilChanged();
@@ -85,18 +76,15 @@ export class SubmissionFormComponent implements OnChanges, OnDestroy {
this.uploadFilesOptions.authToken = this.authService.buildAuthHeader(); this.uploadFilesOptions.authToken = this.authService.buildAuthHeader();
this.uploadFilesOptions.url = endpointURL.concat(`/${this.submissionId}`); this.uploadFilesOptions.url = endpointURL.concat(`/${this.submissionId}`);
this.definitionId = this.submissionDefinition.name; this.definitionId = this.submissionDefinition.name;
this.store.dispatch(new InitSubmissionFormAction(this.collectionId, this.submissionId, this.selfUrl, this.submissionDefinition, this.sections, null)); this.submissionService.dispatchInit(
this.collectionId,
this.submissionId,
this.selfUrl,
this.submissionDefinition,
this.sections,
null);
this.changeDetectorRef.detectChanges(); this.changeDetectorRef.detectChanges();
}), })
// this.store.select(submissionObjectFromIdSelector(this.submissionId))
// .filter((submission: SubmissionObjectEntry) => isNotUndefined(submission) && this.isActive)
// .subscribe((submission: SubmissionObjectEntry) => {
// if (this.loading !== submission.isLoading) {
// this.loading = submission.isLoading;
// this.changeDetectorRef.detectChanges();
// }
// })
); );
this.submissionService.startAutoSave(this.submissionId); this.submissionService.startAutoSave(this.submissionId);
} }
@@ -105,7 +93,7 @@ export class SubmissionFormComponent implements OnChanges, OnDestroy {
ngOnDestroy() { ngOnDestroy() {
this.isActive = false; this.isActive = false;
this.submissionService.stopAutoSave(); this.submissionService.stopAutoSave();
this.store.dispatch(new CancelSubmissionFormAction()); this.submissionService.resetAllSubmissionObjects();
this.subs this.subs
.filter((subscription) => hasValue(subscription)) .filter((subscription) => hasValue(subscription))
.forEach((subscription) => subscription.unsubscribe()); .forEach((subscription) => subscription.unsubscribe());
@@ -117,8 +105,12 @@ export class SubmissionFormComponent implements OnChanges, OnDestroy {
this.sections = workspaceItemObject.sections; this.sections = workspaceItemObject.sections;
this.submissionDefinition = workspaceItemObject.submissionDefinition[0]; this.submissionDefinition = workspaceItemObject.submissionDefinition[0];
this.definitionId = this.submissionDefinition.name; this.definitionId = this.submissionDefinition.name;
this.store.dispatch(new ResetSubmissionFormAction(this.collectionId, this.submissionId, workspaceItemObject.self, this.sections, this.submissionDefinition)); this.submissionService.resetSubmissionObject(
// this.submissionSections = this.getSectionsList(); this.collectionId,
this.submissionId,
workspaceItemObject.self,
this.submissionDefinition,
this.sections);
} else { } else {
this.changeDetectorRef.detectChanges(); this.changeDetectorRef.detectChanges();
} }

View File

@@ -124,9 +124,7 @@ export class SubmissionObjectEffects {
.map(([action, currentState]: [SaveSubmissionFormSuccessAction | SaveSubmissionSectionFormSuccessAction, any]) => { .map(([action, currentState]: [SaveSubmissionFormSuccessAction | SaveSubmissionSectionFormSuccessAction, any]) => {
return this.parseSaveResponse((currentState.submission as SubmissionState).objects[action.payload.submissionId], action.payload.submissionObject, action.payload.submissionId); return this.parseSaveResponse((currentState.submission as SubmissionState).objects[action.payload.submissionId], action.payload.submissionObject, action.payload.submissionId);
}) })
.mergeMap((actions) => { .mergeMap((actions) => Observable.from(actions));
return Observable.from(actions);
});
@Effect() saveSection$ = this.actions$ @Effect() saveSection$ = this.actions$
.ofType(SubmissionObjectActionTypes.SAVE_SUBMISSION_SECTION_FORM) .ofType(SubmissionObjectActionTypes.SAVE_SUBMISSION_SECTION_FORM)

View File

@@ -1,10 +1,7 @@
import { Component, Injector, Input, OnInit, ViewChild } from '@angular/core'; import { Component, Injector, Input, OnInit, ViewChild } from '@angular/core';
import { Store } from '@ngrx/store';
import { SectionsDirective } from '../sections.directive'; import { SectionsDirective } from '../sections.directive';
import { SectionDataObject } from '../models/section-data.model'; import { SectionDataObject } from '../models/section-data.model';
import { SubmissionState } from '../../submission.reducers';
import { rendersSectionType } from '../sections-decorator'; import { rendersSectionType } from '../sections-decorator';
import { SectionsType } from '../sections-type'; import { SectionsType } from '../sections-type';
import { AlertType } from '../../../shared/alerts/aletrs-type'; import { AlertType } from '../../../shared/alerts/aletrs-type';
@@ -26,7 +23,7 @@ export class SectionContainerComponent implements OnInit {
@ViewChild('sectionRef') sectionRef: SectionsDirective; @ViewChild('sectionRef') sectionRef: SectionsDirective;
constructor(private injector: Injector, private store: Store<SubmissionState>) { constructor(private injector: Injector) {
} }
ngOnInit() { ngOnInit() {

View File

@@ -1,25 +1,22 @@
import { ChangeDetectorRef, Component, Inject, OnDestroy, ViewChild } from '@angular/core'; import { ChangeDetectorRef, Component, Inject, OnDestroy, ViewChild } from '@angular/core';
import { Store } from '@ngrx/store';
import { DynamicFormControlEvent, DynamicFormControlModel } from '@ng-dynamic-forms/core'; import { DynamicFormControlEvent, DynamicFormControlModel } from '@ng-dynamic-forms/core';
import { Subscription } from 'rxjs/Subscription';
import { TranslateService } from '@ngx-translate/core';
import { isEqual } from 'lodash'; import { isEqual } from 'lodash';
import { FormBuilderService } from '../../../shared/form/builder/form-builder.service'; import { FormBuilderService } from '../../../shared/form/builder/form-builder.service';
import { FormComponent } from '../../../shared/form/form.component'; import { FormComponent } from '../../../shared/form/form.component';
import { FormService } from '../../../shared/form/form.service'; import { FormService } from '../../../shared/form/form.service';
import { SaveSubmissionFormAction, SectionStatusChangeAction, } from '../../objects/submission-objects.actions';
import { SectionModelComponent } from '../models/section.model'; import { SectionModelComponent } from '../models/section.model';
import { SubmissionState } from '../../submission.reducers';
import { SubmissionFormsConfigService } from '../../../core/config/submission-forms-config.service'; import { SubmissionFormsConfigService } from '../../../core/config/submission-forms-config.service';
import { hasValue, isNotEmpty, isNotUndefined, isUndefined } from '../../../shared/empty.util'; import { hasValue, isNotEmpty, isNotUndefined, isUndefined } from '../../../shared/empty.util';
import { ConfigData } from '../../../core/config/config-data'; import { ConfigData } from '../../../core/config/config-data';
import { JsonPatchOperationPathCombiner } from '../../../core/json-patch/builder/json-patch-operation-path-combiner'; import { JsonPatchOperationPathCombiner } from '../../../core/json-patch/builder/json-patch-operation-path-combiner';
import { submissionSectionDataFromIdSelector, submissionSectionFromIdSelector } from '../../selectors';
import { SubmissionFormsModel } from '../../../core/shared/config/config-submission-forms.model'; import { SubmissionFormsModel } from '../../../core/shared/config/config-submission-forms.model';
import { SubmissionSectionError, SubmissionSectionObject } from '../../objects/submission-objects.reducer'; import { SubmissionSectionError, SubmissionSectionObject } from '../../objects/submission-objects.reducer';
import { FormFieldPreviousValueObject } from '../../../shared/form/builder/models/form-field-previous-value-object'; import { FormFieldPreviousValueObject } from '../../../shared/form/builder/models/form-field-previous-value-object';
import { WorkspaceitemSectionDataType } from '../../../core/submission/models/workspaceitem-sections.model'; import { WorkspaceitemSectionDataType } from '../../../core/submission/models/workspaceitem-sections.model';
import { Subscription } from 'rxjs/Subscription';
import { GLOBAL_CONFIG } from '../../../../config'; import { GLOBAL_CONFIG } from '../../../../config';
import { GlobalConfig } from '../../../../config/global-config.interface'; import { GlobalConfig } from '../../../../config/global-config.interface';
import { SectionDataObject } from '../models/section-data.model'; import { SectionDataObject } from '../models/section-data.model';
@@ -28,7 +25,6 @@ import { SectionsType } from '../sections-type';
import { SubmissionService } from '../../submission.service'; import { SubmissionService } from '../../submission.service';
import { FormOperationsService } from './form-operations.service'; import { FormOperationsService } from './form-operations.service';
import { NotificationsService } from '../../../shared/notifications/notifications.service'; import { NotificationsService } from '../../../shared/notifications/notifications.service';
import { TranslateService } from '@ngx-translate/core';
import { SectionsService } from '../sections.service'; import { SectionsService } from '../sections.service';
import { difference } from '../../../shared/object.util'; import { difference } from '../../../shared/object.util';
@@ -59,7 +55,6 @@ export class FormSectionComponent extends SectionModelComponent implements OnDes
protected formService: FormService, protected formService: FormService,
protected formConfigService: SubmissionFormsConfigService, protected formConfigService: SubmissionFormsConfigService,
protected notificationsService: NotificationsService, protected notificationsService: NotificationsService,
protected store: Store<SubmissionState>,
protected sectionService: SectionsService, protected sectionService: SectionsService,
protected submissionService: SubmissionService, protected submissionService: SubmissionService,
protected translate: TranslateService, protected translate: TranslateService,
@@ -77,7 +72,7 @@ export class FormSectionComponent extends SectionModelComponent implements OnDes
.subscribe((config: SubmissionFormsModel) => { .subscribe((config: SubmissionFormsModel) => {
this.formConfig = config; this.formConfig = config;
this.formId = this.formService.getUniqueId(this.sectionData.id); this.formId = this.formService.getUniqueId(this.sectionData.id);
this.store.select(submissionSectionDataFromIdSelector(this.submissionId, this.sectionData.id)) this.sectionService.getSectionData(this.submissionId, this.sectionData.id)
.take(1) .take(1)
.subscribe((sectionData: WorkspaceitemSectionDataType) => { .subscribe((sectionData: WorkspaceitemSectionDataType) => {
if (isUndefined(this.formModel)) { if (isUndefined(this.formModel)) {
@@ -180,7 +175,7 @@ export class FormSectionComponent extends SectionModelComponent implements OnDes
.filter((formValid) => formValid !== this.valid) .filter((formValid) => formValid !== this.valid)
.subscribe((formState) => { .subscribe((formState) => {
this.valid = formState; this.valid = formState;
this.store.dispatch(new SectionStatusChangeAction(this.submissionId, this.sectionData.id, this.valid)); this.sectionService.setSectionStatus(this.submissionId, this.sectionData.id, this.valid);
}), }),
/** /**
* Subscribe to form's data * Subscribe to form's data
@@ -193,7 +188,7 @@ export class FormSectionComponent extends SectionModelComponent implements OnDes
/** /**
* Subscribe to section state * Subscribe to section state
*/ */
this.store.select(submissionSectionFromIdSelector(this.submissionId, this.sectionData.id)) this.sectionService.getSectionState(this.submissionId, this.sectionData.id)
.filter((sectionState: SubmissionSectionObject) => { .filter((sectionState: SubmissionSectionObject) => {
return isNotEmpty(sectionState) && (isNotEmpty(sectionState.data) || isNotEmpty(sectionState.errors)) return isNotEmpty(sectionState) && (isNotEmpty(sectionState.data) || isNotEmpty(sectionState.errors))
}) })
@@ -214,7 +209,7 @@ export class FormSectionComponent extends SectionModelComponent implements OnDes
const value = this.formOperationsService.getFieldValueFromChangeEvent(event); const value = this.formOperationsService.getFieldValueFromChangeEvent(event);
if (this.EnvConfig.submission.autosave.metadata.indexOf(metadata) !== -1 && isNotEmpty(value)) { if (this.EnvConfig.submission.autosave.metadata.indexOf(metadata) !== -1 && isNotEmpty(value)) {
this.store.dispatch(new SaveSubmissionFormAction(this.submissionId)); this.submissionService.dispatchSave(this.submissionId);
} }
} }

View File

@@ -1,19 +1,18 @@
import { ChangeDetectorRef, Component, Inject, OnDestroy, OnInit } from '@angular/core'; import { ChangeDetectorRef, Component, Inject, OnDestroy, OnInit } from '@angular/core';
import { DynamicCheckboxModel, DynamicFormControlEvent, DynamicFormControlModel } from '@ng-dynamic-forms/core';
import { Subscription } from 'rxjs/Subscription';
import { SectionModelComponent } from '../models/section.model'; import { SectionModelComponent } from '../models/section.model';
import { Store } from '@ngrx/store';
import { JsonPatchOperationsBuilder } from '../../../core/json-patch/builder/json-patch-operations-builder'; import { JsonPatchOperationsBuilder } from '../../../core/json-patch/builder/json-patch-operations-builder';
import { CollectionDataService } from '../../../core/data/collection-data.service'; import { CollectionDataService } from '../../../core/data/collection-data.service';
import { Subscription } from 'rxjs/Subscription';
import { hasValue, isNotEmpty, isNotNull, isNotUndefined } from '../../../shared/empty.util'; import { hasValue, isNotEmpty, isNotNull, isNotUndefined } from '../../../shared/empty.util';
import { License } from '../../../core/shared/license.model'; import { License } from '../../../core/shared/license.model';
import { RemoteData } from '../../../core/data/remote-data'; import { RemoteData } from '../../../core/data/remote-data';
import { Collection } from '../../../core/shared/collection.model'; import { Collection } from '../../../core/shared/collection.model';
import { DynamicCheckboxModel, DynamicFormControlEvent, DynamicFormControlModel } from '@ng-dynamic-forms/core';
import { SECTION_LICENSE_FORM_MODEL } from './section-license.model'; import { SECTION_LICENSE_FORM_MODEL } from './section-license.model';
import { FormBuilderService } from '../../../shared/form/builder/form-builder.service'; import { FormBuilderService } from '../../../shared/form/builder/form-builder.service';
import { RemoveSectionErrorsAction, SectionStatusChangeAction } from '../../objects/submission-objects.actions';
import { FormService } from '../../../shared/form/form.service'; import { FormService } from '../../../shared/form/form.service';
import { SubmissionState } from '../../submission.reducers';
import { JsonPatchOperationPathCombiner } from '../../../core/json-patch/builder/json-patch-operation-path-combiner'; import { JsonPatchOperationPathCombiner } from '../../../core/json-patch/builder/json-patch-operation-path-combiner';
import { SectionsType } from '../sections-type'; import { SectionsType } from '../sections-type';
import { renderSectionFor } from '../sections-decorator'; import { renderSectionFor } from '../sections-decorator';
@@ -22,7 +21,6 @@ import { WorkspaceitemSectionLicenseObject } from '../../../core/submission/mode
import { SubmissionService } from '../../submission.service'; import { SubmissionService } from '../../submission.service';
import { SectionsService } from '../sections.service'; import { SectionsService } from '../sections.service';
import { FormOperationsService } from '../form/form-operations.service'; import { FormOperationsService } from '../form/form-operations.service';
import { submissionSectionErrorsFromIdSelector } from '../../selectors';
@Component({ @Component({
selector: 'ds-submission-section-license', selector: 'ds-submission-section-license',
@@ -46,7 +44,6 @@ export class LicenseSectionComponent extends SectionModelComponent implements On
protected formOperationsService: FormOperationsService, protected formOperationsService: FormOperationsService,
protected formService: FormService, protected formService: FormService,
protected operationsBuilder: JsonPatchOperationsBuilder, protected operationsBuilder: JsonPatchOperationsBuilder,
protected store: Store<SubmissionState>,
protected sectionService: SectionsService, protected sectionService: SectionsService,
protected submissionService: SubmissionService, protected submissionService: SubmissionService,
@Inject('collectionIdProvider') public injectedCollectionId: string, @Inject('collectionIdProvider') public injectedCollectionId: string,
@@ -72,7 +69,7 @@ export class LicenseSectionComponent extends SectionModelComponent implements On
// Retrieve license accepted status // Retrieve license accepted status
if ((this.sectionData.data as WorkspaceitemSectionLicenseObject).granted) { if ((this.sectionData.data as WorkspaceitemSectionLicenseObject).granted) {
(model as DynamicCheckboxModel).checked = true; (model as DynamicCheckboxModel).checked = true;
this.store.dispatch(new SectionStatusChangeAction(this.submissionId, this.sectionData.id, true)); this.sectionService.setSectionStatus(this.submissionId, this.sectionData.id, true);
} }
// Disable checkbox whether it's in workflow or item scope // Disable checkbox whether it's in workflow or item scope
@@ -84,7 +81,8 @@ export class LicenseSectionComponent extends SectionModelComponent implements On
}); });
this.changeDetectorRef.detectChanges(); this.changeDetectorRef.detectChanges();
}), }),
this.store.select(submissionSectionErrorsFromIdSelector(this.submissionId, this.sectionData.id))
this.sectionService.getSectionErrors(this.submissionId, this.sectionData.id)
.filter((errors) => isNotEmpty(errors)) .filter((errors) => isNotEmpty(errors))
.distinctUntilChanged() .distinctUntilChanged()
.subscribe((errors) => { .subscribe((errors) => {
@@ -110,7 +108,7 @@ export class LicenseSectionComponent extends SectionModelComponent implements On
this.sectionData.errors = errors; this.sectionData.errors = errors;
} else { } else {
// Remove any section's errors // Remove any section's errors
this.store.dispatch(new RemoveSectionErrorsAction(this.submissionId, this.sectionData.id)); this.sectionService.dispatchRemoveSectionErrors(this.submissionId, this.sectionData.id);
} }
this.changeDetectorRef.detectChanges(); this.changeDetectorRef.detectChanges();
}) })
@@ -120,11 +118,11 @@ export class LicenseSectionComponent extends SectionModelComponent implements On
onChange(event: DynamicFormControlEvent) { onChange(event: DynamicFormControlEvent) {
const path = this.formOperationsService.getFieldPathSegmentedFromChangeEvent(event); const path = this.formOperationsService.getFieldPathSegmentedFromChangeEvent(event);
const value = this.formOperationsService.getFieldValueFromChangeEvent(event); const value = this.formOperationsService.getFieldValueFromChangeEvent(event);
this.store.dispatch(new SectionStatusChangeAction(this.submissionId, this.sectionData.id, value.value)); this.sectionService.setSectionStatus(this.submissionId, this.sectionData.id, value.value);
if (value) { if (value) {
this.operationsBuilder.add(this.pathCombiner.getPath(path), value.value.toString(), false, true); this.operationsBuilder.add(this.pathCombiner.getPath(path), value.value.toString(), false, true);
// Remove any section's errors // Remove any section's errors
this.store.dispatch(new RemoveSectionErrorsAction(this.submissionId, this.sectionData.id)); this.sectionService.dispatchRemoveSectionErrors(this.submissionId, this.sectionData.id);
} else { } else {
this.operationsBuilder.remove(this.pathCombiner.getPath(path)); this.operationsBuilder.remove(this.pathCombiner.getPath(path));
} }

View File

@@ -1,21 +1,13 @@
import { ChangeDetectorRef, Directive, Input, OnDestroy, OnInit } from '@angular/core'; import { ChangeDetectorRef, Directive, Input, OnDestroy, OnInit } from '@angular/core';
import { Store } from '@ngrx/store';
import { Observable } from 'rxjs/Observable'; import { Observable } from 'rxjs/Observable';
import { Subscription } from 'rxjs/Subscription'; import { Subscription } from 'rxjs/Subscription';
import { uniq } from 'lodash'; import { uniq } from 'lodash';
import { SectionsService } from './sections.service'; import { SectionsService } from './sections.service';
import { hasValue, isNotEmpty, isNotNull, isNotUndefined } from '../../shared/empty.util'; import { hasValue, isNotEmpty, isNotNull } from '../../shared/empty.util';
import { submissionSectionFromIdSelector } from '../selectors';
import { SubmissionState } from '../submission.reducers';
import { SubmissionSectionError, SubmissionSectionObject } from '../objects/submission-objects.reducer'; import { SubmissionSectionError, SubmissionSectionObject } from '../objects/submission-objects.reducer';
import parseSectionErrorPaths, { SectionErrorPath } from '../utils/parseSectionErrorPaths'; import parseSectionErrorPaths, { SectionErrorPath } from '../utils/parseSectionErrorPaths';
import {
RemoveSectionErrorsAction,
SaveSubmissionSectionFormAction,
SetActiveSectionAction
} from '../objects/submission-objects.actions';
import { SubmissionService } from '../submission.service'; import { SubmissionService } from '../submission.service';
@Directive({ @Directive({
@@ -35,7 +27,6 @@ export class SectionsDirective implements OnDestroy, OnInit {
private valid: Observable<boolean>; private valid: Observable<boolean>;
constructor(private changeDetectorRef: ChangeDetectorRef, constructor(private changeDetectorRef: ChangeDetectorRef,
private store: Store<SubmissionState>,
private submissionService: SubmissionService, private submissionService: SubmissionService,
private sectionService: SectionsService) { private sectionService: SectionsService) {
} }
@@ -50,10 +41,8 @@ export class SectionsDirective implements OnDestroy, OnInit {
}); });
this.subs.push( this.subs.push(
this.store.select(submissionSectionFromIdSelector(this.submissionId, this.sectionId)) this.sectionService.getSectionState(this.submissionId, this.sectionId)
.filter((state: SubmissionSectionObject) => isNotUndefined(state))
.map((state: SubmissionSectionObject) => state.errors) .map((state: SubmissionSectionObject) => state.errors)
// .filter((errors: SubmissionSectionError[]) => isNotEmpty(errors))
.subscribe((errors: SubmissionSectionError[]) => { .subscribe((errors: SubmissionSectionError[]) => {
if (isNotEmpty(errors)) { if (isNotEmpty(errors)) {
errors.forEach((errorItem: SubmissionSectionError) => { errors.forEach((errorItem: SubmissionSectionError) => {
@@ -77,7 +66,7 @@ export class SectionsDirective implements OnDestroy, OnInit {
this.changeDetectorRef.detectChanges(); this.changeDetectorRef.detectChanges();
// If section is no longer active dispatch save action // If section is no longer active dispatch save action
if (!this.active && isNotNull(activeSectionId)) { if (!this.active && isNotNull(activeSectionId)) {
this.store.dispatch(new SaveSubmissionSectionFormAction(this.submissionId, this.sectionId)); this.submissionService.dispatchSaveSection(this.submissionId, this.sectionId);
} }
} }
}) })
@@ -144,7 +133,7 @@ export class SectionsDirective implements OnDestroy, OnInit {
public resetErrors() { public resetErrors() {
if (isNotEmpty(this.sectionErrors)) { if (isNotEmpty(this.sectionErrors)) {
this.store.dispatch(new RemoveSectionErrorsAction(this.submissionId, this.sectionId)); this.sectionService.dispatchRemoveSectionErrors(this.submissionId, this.sectionId);
} }
this.sectionErrors = []; this.sectionErrors = [];

View File

@@ -2,14 +2,18 @@ import { Injectable } from '@angular/core';
import { Observable } from 'rxjs/Observable'; import { Observable } from 'rxjs/Observable';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
import { SubmissionState } from '../submission.reducers'; import { TranslateService } from '@ngx-translate/core';
import { ScrollToConfigOptions, ScrollToService } from '@nicky-lenaers/ngx-scroll-to';
import { isEqual } from 'lodash'; import { isEqual } from 'lodash';
import { SubmissionState } from '../submission.reducers';
import { hasValue, isEmpty, isNotEmpty, isNotUndefined } from '../../shared/empty.util'; import { hasValue, isEmpty, isNotEmpty, isNotUndefined } from '../../shared/empty.util';
import { import {
DisableSectionAction, DisableSectionAction,
EnableSectionAction, EnableSectionAction,
InertSectionErrorsAction, RemoveSectionErrorsAction, SectionStatusChangeAction, InertSectionErrorsAction,
RemoveSectionErrorsAction,
SectionStatusChangeAction,
UpdateSectionDataAction UpdateSectionDataAction
} from '../objects/submission-objects.actions'; } from '../objects/submission-objects.actions';
import { import {
@@ -17,14 +21,18 @@ import {
SubmissionSectionError, SubmissionSectionError,
SubmissionSectionObject SubmissionSectionObject
} from '../objects/submission-objects.reducer'; } from '../objects/submission-objects.reducer';
import { submissionObjectFromIdSelector, submissionSectionFromIdSelector } from '../selectors'; import {
import { ScrollToConfigOptions, ScrollToService } from '@nicky-lenaers/ngx-scroll-to'; submissionObjectFromIdSelector,
submissionSectionDataFromIdSelector,
submissionSectionErrorsFromIdSelector,
submissionSectionFromIdSelector
} from '../selectors';
import { SubmissionScopeType } from '../../core/submission/submission-scope-type'; import { SubmissionScopeType } from '../../core/submission/submission-scope-type';
import parseSectionErrorPaths, { SectionErrorPath } from '../utils/parseSectionErrorPaths'; import parseSectionErrorPaths, { SectionErrorPath } from '../utils/parseSectionErrorPaths';
import { FormAddError, FormClearErrorsAction, FormRemoveErrorAction } from '../../shared/form/form.actions'; import { FormAddError, FormClearErrorsAction, FormRemoveErrorAction } from '../../shared/form/form.actions';
import { TranslateService } from '@ngx-translate/core';
import { NotificationsService } from '../../shared/notifications/notifications.service'; import { NotificationsService } from '../../shared/notifications/notifications.service';
import { SubmissionService } from '../submission.service'; import { SubmissionService } from '../submission.service';
import { WorkspaceitemSectionDataType } from '../../core/submission/models/workspaceitem-sections.model';
@Injectable() @Injectable()
export class SectionsService { export class SectionsService {
@@ -36,7 +44,12 @@ export class SectionsService {
private translate: TranslateService) { private translate: TranslateService) {
} }
public checkSectionErrors(submissionId, sectionId, formId, currentErrors, prevErrors = []) { public checkSectionErrors(
submissionId: string,
sectionId: string,
formId: string,
currentErrors: SubmissionSectionError[],
prevErrors: SubmissionSectionError[] = []) {
if (isEmpty(currentErrors)) { if (isEmpty(currentErrors)) {
this.store.dispatch(new RemoveSectionErrorsAction(submissionId, sectionId)); this.store.dispatch(new RemoveSectionErrorsAction(submissionId, sectionId));
this.store.dispatch(new FormClearErrorsAction(formId)); this.store.dispatch(new FormClearErrorsAction(formId));
@@ -74,27 +87,41 @@ export class SectionsService {
} }
} }
public getSectionState(submissionId, sectionId): Observable<SubmissionSectionObject> { public dispatchRemoveSectionErrors(submissionId, sectionId) {
this.store.dispatch(new RemoveSectionErrorsAction(submissionId, sectionId));
}
public getSectionData(submissionId: string, sectionId: string): Observable<WorkspaceitemSectionDataType> {
return this.store.select(submissionSectionDataFromIdSelector(submissionId, sectionId))
.distinctUntilChanged();
}
public getSectionErrors(submissionId: string, sectionId: string): Observable<SubmissionSectionError[]> {
return this.store.select(submissionSectionErrorsFromIdSelector(submissionId, sectionId))
.distinctUntilChanged();
}
public getSectionState(submissionId: string, sectionId: string): Observable<SubmissionSectionObject> {
return this.store.select(submissionSectionFromIdSelector(submissionId, sectionId)) return this.store.select(submissionSectionFromIdSelector(submissionId, sectionId))
.filter((sectionObj) => hasValue(sectionObj)) .filter((sectionObj: SubmissionSectionObject) => hasValue(sectionObj))
.map((sectionObj: SubmissionSectionObject) => sectionObj) .map((sectionObj: SubmissionSectionObject) => sectionObj)
.distinctUntilChanged(); .distinctUntilChanged();
} }
public isSectionValid(submissionId, sectionId): Observable<boolean> { public isSectionValid(submissionId: string, sectionId: string): Observable<boolean> {
return this.store.select(submissionSectionFromIdSelector(submissionId, sectionId)) return this.store.select(submissionSectionFromIdSelector(submissionId, sectionId))
.filter((sectionObj) => hasValue(sectionObj)) .filter((sectionObj) => hasValue(sectionObj))
.map((sectionObj: SubmissionSectionObject) => sectionObj.isValid) .map((sectionObj: SubmissionSectionObject) => sectionObj.isValid)
.distinctUntilChanged(); .distinctUntilChanged();
} }
public isSectionActive(submissionId, sectionId): Observable<boolean> { public isSectionActive(submissionId: string, sectionId: string): Observable<boolean> {
return this.submissionService.getActiveSectionId(submissionId) return this.submissionService.getActiveSectionId(submissionId)
.map((activeSectionId: string) => sectionId === activeSectionId) .map((activeSectionId: string) => sectionId === activeSectionId)
.distinctUntilChanged(); .distinctUntilChanged();
} }
public isSectionEnabled(submissionId, sectionId): Observable<boolean> { public isSectionEnabled(submissionId: string, sectionId: string): Observable<boolean> {
return this.store.select(submissionSectionFromIdSelector(submissionId, sectionId)) return this.store.select(submissionSectionFromIdSelector(submissionId, sectionId))
.filter((sectionObj) => hasValue(sectionObj)) .filter((sectionObj) => hasValue(sectionObj))
.map((sectionObj: SubmissionSectionObject) => sectionObj.enabled) .map((sectionObj: SubmissionSectionObject) => sectionObj.enabled)
@@ -110,7 +137,7 @@ export class SectionsService {
.distinctUntilChanged(); .distinctUntilChanged();
} }
public isSectionAvailable(submissionId, sectionId): Observable<boolean> { public isSectionAvailable(submissionId: string, sectionId: string): Observable<boolean> {
return this.store.select(submissionObjectFromIdSelector(submissionId)) return this.store.select(submissionObjectFromIdSelector(submissionId))
.filter((submissionState: SubmissionObjectEntry) => isNotUndefined(submissionState)) .filter((submissionState: SubmissionObjectEntry) => isNotUndefined(submissionState))
.map((submissionState: SubmissionObjectEntry) => { .map((submissionState: SubmissionObjectEntry) => {
@@ -130,11 +157,11 @@ export class SectionsService {
this.scrollToService.scrollTo(config); this.scrollToService.scrollTo(config);
} }
public removeSection(submissionId, sectionId) { public removeSection(submissionId: string, sectionId: string) {
this.store.dispatch(new DisableSectionAction(submissionId, sectionId)) this.store.dispatch(new DisableSectionAction(submissionId, sectionId))
} }
public updateSectionData(submissionId, sectionId, data, errors = []) { public updateSectionData(submissionId: string, sectionId: string, data, errors = []) {
if (isNotEmpty(data)) { if (isNotEmpty(data)) {
const isAvailable$ = this.isSectionAvailable(submissionId, sectionId); const isAvailable$ = this.isSectionAvailable(submissionId, sectionId);
const isEnabled$ = this.isSectionEnabled(submissionId, sectionId); const isEnabled$ = this.isSectionEnabled(submissionId, sectionId);

View File

@@ -1,24 +1,24 @@
import { ChangeDetectorRef, Component, Inject, OnInit } from '@angular/core'; import { ChangeDetectorRef, Component, Inject, OnInit } from '@angular/core';
import { Store } from '@ngrx/store';
import { Observable } from 'rxjs/Observable';
import { SectionModelComponent } from '../models/section.model'; import { SectionModelComponent } from '../models/section.model';
import { hasValue, isNotEmpty, isNotUndefined, isUndefined } from '../../../shared/empty.util'; import { hasValue, isNotEmpty, isNotUndefined, isUndefined } from '../../../shared/empty.util';
import { SectionUploadService } from './section-upload.service'; import { SectionUploadService } from './section-upload.service';
import { SectionStatusChangeAction } from '../../objects/submission-objects.actions';
import { SubmissionState } from '../../submission.reducers';
import { CollectionDataService } from '../../../core/data/collection-data.service'; import { CollectionDataService } from '../../../core/data/collection-data.service';
import { GroupEpersonService } from '../../../core/eperson/group-eperson.service'; import { GroupEpersonService } from '../../../core/eperson/group-eperson.service';
import { SubmissionUploadsConfigService } from '../../../core/config/submission-uploads-config.service'; import { SubmissionUploadsConfigService } from '../../../core/config/submission-uploads-config.service';
import { SubmissionUploadsModel } from '../../../core/shared/config/config-submission-uploads.model'; import { SubmissionUploadsModel } from '../../../core/shared/config/config-submission-uploads.model';
import { Observable } from 'rxjs/Observable';
import { SubmissionFormsModel } from '../../../core/shared/config/config-submission-forms.model'; import { SubmissionFormsModel } from '../../../core/shared/config/config-submission-forms.model';
import { SectionsType } from '../sections-type'; import { SectionsType } from '../sections-type';
import { renderSectionFor } from '../sections-decorator'; import { renderSectionFor } from '../sections-decorator';
import { SectionDataObject } from '../models/section-data.model'; import { SectionDataObject } from '../models/section-data.model';
import { submissionObjectFromIdSelector } from '../../selectors';
import { SubmissionObjectEntry } from '../../objects/submission-objects.reducer'; import { SubmissionObjectEntry } from '../../objects/submission-objects.reducer';
import { AlertType } from '../../../shared/alerts/aletrs-type'; import { AlertType } from '../../../shared/alerts/aletrs-type';
import { RemoteData } from '../../../core/data/remote-data'; import { RemoteData } from '../../../core/data/remote-data';
import { Group } from '../../../core/eperson/models/group.model'; import { Group } from '../../../core/eperson/models/group.model';
import { SectionsService } from '../sections.service';
import { SubmissionService } from '../../submission.service';
export const POLICY_DEFAULT_NO_LIST = 1; // Banner1 export const POLICY_DEFAULT_NO_LIST = 1; // Banner1
export const POLICY_DEFAULT_WITH_LIST = 2; // Banner2 export const POLICY_DEFAULT_WITH_LIST = 2; // Banner2
@@ -66,7 +66,8 @@ export class UploadSectionComponent extends SectionModelComponent implements OnI
private changeDetectorRef: ChangeDetectorRef, private changeDetectorRef: ChangeDetectorRef,
private collectionDataService: CollectionDataService, private collectionDataService: CollectionDataService,
private groupService: GroupEpersonService, private groupService: GroupEpersonService,
private store: Store<SubmissionState>, protected sectionService: SectionsService,
private submissionService: SubmissionService,
private uploadsConfigService: SubmissionUploadsConfigService, private uploadsConfigService: SubmissionUploadsConfigService,
@Inject('sectionDataProvider') public injectedSectionData: SectionDataObject, @Inject('sectionDataProvider') public injectedSectionData: SectionDataObject,
@Inject('submissionIdProvider') public injectedSubmissionId: string) { @Inject('submissionIdProvider') public injectedSubmissionId: string) {
@@ -82,7 +83,7 @@ export class UploadSectionComponent extends SectionModelComponent implements OnI
.map((config: SubmissionUploadsModel) => config.metadata[0]); .map((config: SubmissionUploadsModel) => config.metadata[0]);
this.subs.push( this.subs.push(
this.store.select(submissionObjectFromIdSelector(this.submissionId)) this.submissionService.getSubmissionObject(this.submissionId)
.filter((submissionObject: SubmissionObjectEntry) => isNotUndefined(submissionObject) && !submissionObject.isLoading) .filter((submissionObject: SubmissionObjectEntry) => isNotUndefined(submissionObject) && !submissionObject.isLoading)
.filter((submissionObject: SubmissionObjectEntry) => isUndefined(this.collectionId) || this.collectionId !== submissionObject.collection) .filter((submissionObject: SubmissionObjectEntry) => isUndefined(this.collectionId) || this.collectionId !== submissionObject.collection)
.subscribe((submissionObject: SubmissionObjectEntry) => { .subscribe((submissionObject: SubmissionObjectEntry) => {
@@ -174,9 +175,7 @@ export class UploadSectionComponent extends SectionModelComponent implements OnI
}); });
sectionStatus = true; sectionStatus = true;
} }
this.store.dispatch(new SectionStatusChangeAction(this.submissionId, this.sectionService.setSectionStatus(this.submissionId, this.sectionData.id, sectionStatus);
this.sectionData.id,
sectionStatus));
this.changeDetectorRef.detectChanges(); this.changeDetectorRef.detectChanges();
} }
) )

View File

@@ -7,10 +7,18 @@ import { Store } from '@ngrx/store';
import { submissionSelector, SubmissionState } from './submission.reducers'; import { submissionSelector, SubmissionState } from './submission.reducers';
import { hasValue, isEmpty, isNotUndefined } from '../shared/empty.util'; import { hasValue, isEmpty, isNotUndefined } from '../shared/empty.util';
import { SaveSubmissionFormAction, SetActiveSectionAction } from './objects/submission-objects.actions'; import {
CancelSubmissionFormAction,
ChangeSubmissionCollectionAction,
DiscardSubmissionAction, InitSubmissionFormAction, ResetSubmissionFormAction,
SaveAndDepositSubmissionAction,
SaveForLaterSubmissionFormAction,
SaveSubmissionFormAction,
SetActiveSectionAction
} from './objects/submission-objects.actions';
import { import {
SubmissionObjectEntry, SubmissionObjectEntry,
SubmissionSectionEntry, SubmissionSectionEntry, SubmissionSectionError,
SubmissionSectionObject SubmissionSectionObject
} from './objects/submission-objects.reducer'; } from './objects/submission-objects.reducer';
import { submissionObjectFromIdSelector } from './selectors'; import { submissionObjectFromIdSelector } from './selectors';
@@ -26,8 +34,9 @@ import { RouteService } from '../shared/services/route.service';
import { SectionsType } from './sections/sections-type'; import { SectionsType } from './sections/sections-type';
import { TranslateService } from '@ngx-translate/core'; import { TranslateService } from '@ngx-translate/core';
import { NotificationsService } from '../shared/notifications/notifications.service'; import { NotificationsService } from '../shared/notifications/notifications.service';
import { ScrollToConfigOptions, ScrollToService } from '@nicky-lenaers/ngx-scroll-to'; import { ScrollToService } from '@nicky-lenaers/ngx-scroll-to';
import { NotificationOptions } from '../shared/notifications/models/notification-options.model'; import { SubmissionDefinitionsModel } from '../core/shared/config/config-submission-definitions.model';
import { WorkspaceitemSectionsObject } from '../core/submission/models/workspaceitem-sections.model';
@Injectable() @Injectable()
export class SubmissionService { export class SubmissionService {
@@ -45,6 +54,10 @@ export class SubmissionService {
protected translate: TranslateService) { protected translate: TranslateService) {
} }
changeSubmissionCollection(submissionId, collectionId) {
this.store.dispatch(new ChangeSubmissionCollectionAction(submissionId, collectionId));
}
createSubmission(): Observable<SubmissionObject> { createSubmission(): Observable<SubmissionObject> {
return this.restService.postToEndpoint('workspaceitems', {}) return this.restService.postToEndpoint('workspaceitems', {})
.map((workspaceitems) => workspaceitems[0]) .map((workspaceitems) => workspaceitems[0])
@@ -63,6 +76,36 @@ export class SubmissionService {
return this.restService.deleteById(submissionId); return this.restService.deleteById(submissionId);
} }
dispatchInit(
collectionId: string,
submissionId: string,
selfUrl: string,
submissionDefinition: SubmissionDefinitionsModel,
sections: WorkspaceitemSectionsObject,
errors: SubmissionSectionError[]) {
this.store.dispatch(new InitSubmissionFormAction(collectionId, submissionId, selfUrl, submissionDefinition, sections, errors));
}
dispatchDeposit(submissionId) {
this.store.dispatch(new SaveAndDepositSubmissionAction(submissionId));
}
dispatchDiscard(submissionId) {
this.store.dispatch(new DiscardSubmissionAction(submissionId));
}
dispatchSave(submissionId) {
this.store.dispatch(new SaveSubmissionFormAction(submissionId));
}
dispatchSaveForLater(submissionId) {
this.store.dispatch(new SaveForLaterSubmissionFormAction(submissionId));
}
dispatchSaveSection(submissionId, sectionId) {
this.store.dispatch(new SaveSubmissionFormAction(submissionId));
}
getActiveSectionId(submissionId: string): Observable<string> { getActiveSectionId(submissionId: string): Observable<string> {
return this.getSubmissionObject(submissionId) return this.getSubmissionObject(submissionId)
.map((submission: SubmissionObjectEntry) => submission.activeSection); .map((submission: SubmissionObjectEntry) => submission.activeSection);
@@ -121,19 +164,6 @@ export class SubmissionService {
.distinctUntilChanged(); .distinctUntilChanged();
} }
isSectionHidden(sectionData: SubmissionSectionObject) {
return (isNotUndefined(sectionData.visibility)
&& sectionData.visibility.main === 'HIDDEN'
&& sectionData.visibility.other === 'HIDDEN');
}
isSubmissionLoading(submissionId: string): Observable<boolean> {
return this.getSubmissionObject(submissionId)
.map((submission: SubmissionObjectEntry) => submission.isLoading)
.distinctUntilChanged()
}
getSubmissionObjectLinkName(): string { getSubmissionObjectLinkName(): string {
const url = this.router.routerState.snapshot.url; const url = this.router.routerState.snapshot.url;
if (url.startsWith('/workspaceitems') || url.startsWith('/submit')) { if (url.startsWith('/workspaceitems') || url.startsWith('/submit')) {
@@ -207,6 +237,27 @@ export class SubmissionService {
.startWith(false); .startWith(false);
} }
isSectionHidden(sectionData: SubmissionSectionObject) {
return (isNotUndefined(sectionData.visibility)
&& sectionData.visibility.main === 'HIDDEN'
&& sectionData.visibility.other === 'HIDDEN');
}
isSubmissionLoading(submissionId: string): Observable<boolean> {
return this.getSubmissionObject(submissionId)
.map((submission: SubmissionObjectEntry) => submission.isLoading)
.distinctUntilChanged()
}
notifyNewSection(submissionId: string, sectionId: string, sectionType?: SectionsType) {
this.translate.get('submission.sections.general.metadata-extracted-new-section', {sectionId})
.take(1)
.subscribe((m) => {
this.notificationsService.info(null, m, null, true);
});
}
redirectToMyDSpace() { redirectToMyDSpace() {
const previousUrl = this.routeService.getPreviousUrl(); const previousUrl = this.routeService.getPreviousUrl();
if (isEmpty(previousUrl)) { if (isEmpty(previousUrl)) {
@@ -216,13 +267,20 @@ export class SubmissionService {
} }
} }
notifyNewSection(sectionId: string, sectionType?: SectionsType) { resetAllSubmissionObjects() {
this.translate.get('submission.sections.general.metadata-extracted-new-section', {sectionId}) this.store.dispatch(new CancelSubmissionFormAction());
.take(1)
.subscribe((m) => {
this.notificationsService.info(null, m, null, true);
});
} }
resetSubmissionObject(
collectionId: string,
submissionId: string,
selfUrl: string,
submissionDefinition: SubmissionDefinitionsModel,
sections: WorkspaceitemSectionsObject
) {
this.store.dispatch(new ResetSubmissionFormAction(collectionId, submissionId, selfUrl, sections, submissionDefinition));
}
retrieveSubmission(submissionId): Observable<SubmissionObject> { retrieveSubmission(submissionId): Observable<SubmissionObject> {
return this.restService.getDataById(this.getSubmissionObjectLinkName(), submissionId) return this.restService.getDataById(this.getSubmissionObjectLinkName(), submissionId)
.filter((submissionObjects: SubmissionObject[]) => isNotUndefined(submissionObjects)) .filter((submissionObjects: SubmissionObject[]) => isNotUndefined(submissionObjects))