mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-07 18:14:17 +00:00
Moved the use of store to services
This commit is contained in:
@@ -46,6 +46,9 @@ export class NormalizedObjectFactory {
|
||||
case ResourceType.Group: {
|
||||
return NormalizedGroupModel
|
||||
}
|
||||
case ResourceType.Workflowitem: {
|
||||
return NormalizedWorkflowItem
|
||||
}
|
||||
default: {
|
||||
return undefined;
|
||||
}
|
||||
|
@@ -18,8 +18,6 @@ export class JsonPatchOperationPathCombiner {
|
||||
constructor(rootElement, ...subRootElements: string[]) {
|
||||
this._rootElement = rootElement;
|
||||
this._subRootElement = subRootElements.join('/');
|
||||
console.log(subRootElements);
|
||||
console.log(this._subRootElement);
|
||||
}
|
||||
|
||||
get rootElement(): string {
|
||||
|
@@ -10,8 +10,6 @@ import {
|
||||
SimpleChanges
|
||||
} from '@angular/core';
|
||||
import { FormControl } from '@angular/forms';
|
||||
|
||||
import { Store } from '@ngrx/store';
|
||||
import { Subscription } from 'rxjs/Subscription';
|
||||
|
||||
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 { SubmitDataResponseDefinitionObject } from '../../../core/shared/submit-data-response-definition.model';
|
||||
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';
|
||||
|
||||
@Component({
|
||||
@@ -66,7 +62,6 @@ export class SubmissionFormCollectionComponent implements OnChanges, OnInit {
|
||||
private communityDataService: CommunityDataService,
|
||||
private operationsBuilder: JsonPatchOperationsBuilder,
|
||||
private operationsService: JsonPatchOperationsService<SubmitDataResponseDefinitionObject>,
|
||||
private store: Store<SubmissionState>,
|
||||
private submissionService: SubmissionService) {
|
||||
}
|
||||
|
||||
@@ -156,7 +151,7 @@ export class SubmissionFormCollectionComponent implements OnChanges, OnInit {
|
||||
this.selectedCollectionId = event.collection.id;
|
||||
this.selectedCollectionName = event.collection.name;
|
||||
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.cdr.detectChanges();
|
||||
})
|
||||
|
@@ -1,15 +1,7 @@
|
||||
import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';
|
||||
import { Store } from '@ngrx/store';
|
||||
import { SubmissionRestService } from '../../submission-rest.service';
|
||||
import { SubmissionService } from '../../submission.service';
|
||||
import { SubmissionState } from '../../submission.reducers';
|
||||
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
|
||||
import {
|
||||
DepositSubmissionAction, DiscardSubmissionAction,
|
||||
SaveAndDepositSubmissionAction,
|
||||
SaveForLaterSubmissionFormAction,
|
||||
SaveSubmissionFormAction
|
||||
} from '../../objects/submission-objects.actions';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { SubmissionScopeType } from '../../../core/submission/submission-scope-type';
|
||||
|
||||
@@ -29,8 +21,7 @@ export class SubmissionFormFooterComponent implements OnChanges {
|
||||
|
||||
constructor(private modalService: NgbModal,
|
||||
private restService: SubmissionRestService,
|
||||
private submissionService: SubmissionService,
|
||||
private store: Store<SubmissionState>) {
|
||||
private submissionService: SubmissionService) {
|
||||
}
|
||||
|
||||
ngOnChanges(changes: SimpleChanges) {
|
||||
@@ -47,22 +38,22 @@ export class SubmissionFormFooterComponent implements OnChanges {
|
||||
}
|
||||
|
||||
save(event) {
|
||||
this.store.dispatch(new SaveSubmissionFormAction(this.submissionId));
|
||||
this.submissionService.dispatchSave(this.submissionId);
|
||||
}
|
||||
|
||||
saveLater(event) {
|
||||
this.store.dispatch(new SaveForLaterSubmissionFormAction(this.submissionId));
|
||||
this.submissionService.dispatchSaveForLater(this.submissionId);
|
||||
}
|
||||
|
||||
public deposit(event) {
|
||||
this.store.dispatch(new SaveAndDepositSubmissionAction(this.submissionId));
|
||||
this.submissionService.dispatchDeposit(this.submissionId);
|
||||
}
|
||||
|
||||
public confirmDiscard(content) {
|
||||
this.modalService.open(content).result.then(
|
||||
(result) => {
|
||||
if (result === 'ok') {
|
||||
this.store.dispatch(new DiscardSubmissionAction(this.submissionId));
|
||||
this.submissionService.dispatchDiscard(this.submissionId)
|
||||
}
|
||||
}
|
||||
);
|
||||
|
@@ -1,16 +1,8 @@
|
||||
import { ChangeDetectorRef, Component, Input, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
|
||||
import { Store } from '@ngrx/store';
|
||||
import {
|
||||
CancelSubmissionFormAction,
|
||||
InitSubmissionFormAction,
|
||||
ResetSubmissionFormAction
|
||||
} from '../objects/submission-objects.actions';
|
||||
import { hasValue, isNotEmpty, isNotUndefined } from '../../shared/empty.util';
|
||||
import { submissionObjectFromIdSelector } from '../selectors';
|
||||
import { hasValue, isNotEmpty } from '../../shared/empty.util';
|
||||
import { SubmissionObjectEntry } from '../objects/submission-objects.reducer';
|
||||
import { WorkspaceitemSectionsObject } from '../../core/submission/models/workspaceitem-sections.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 { SubmissionService } from '../submission.service';
|
||||
import { Subscription } from 'rxjs/Subscription';
|
||||
@@ -50,7 +42,6 @@ export class SubmissionFormComponent implements OnChanges, OnDestroy {
|
||||
private authService: AuthService,
|
||||
private changeDetectorRef: ChangeDetectorRef,
|
||||
private halService: HALEndpointService,
|
||||
private store: Store<SubmissionState>,
|
||||
private submissionService: SubmissionService) {
|
||||
this.isActive = true;
|
||||
}
|
||||
@@ -58,8 +49,8 @@ export class SubmissionFormComponent implements OnChanges, OnDestroy {
|
||||
ngOnChanges(changes: SimpleChanges) {
|
||||
if (this.collectionId && this.submissionId) {
|
||||
this.isActive = true;
|
||||
this.submissionSections = this.store.select(submissionObjectFromIdSelector(this.submissionId))
|
||||
.filter((submission: SubmissionObjectEntry) => isNotUndefined(submission) && this.isActive)
|
||||
this.submissionSections = this.submissionService.getSubmissionObject(this.submissionId)
|
||||
.filter(() => this.isActive)
|
||||
.map((submission: SubmissionObjectEntry) => submission.isLoading)
|
||||
.map((isLoading: boolean) => isLoading)
|
||||
.distinctUntilChanged()
|
||||
@@ -71,8 +62,8 @@ export class SubmissionFormComponent implements OnChanges, OnDestroy {
|
||||
}
|
||||
});
|
||||
|
||||
this.loading = this.store.select(submissionObjectFromIdSelector(this.submissionId))
|
||||
.filter((submission: SubmissionObjectEntry) => isNotUndefined(submission) && this.isActive)
|
||||
this.loading = this.submissionService.getSubmissionObject(this.submissionId)
|
||||
.filter(() => this.isActive)
|
||||
.map((submission: SubmissionObjectEntry) => submission.isLoading)
|
||||
.map((isLoading: boolean) => isLoading)
|
||||
.distinctUntilChanged();
|
||||
@@ -85,18 +76,15 @@ export class SubmissionFormComponent implements OnChanges, OnDestroy {
|
||||
this.uploadFilesOptions.authToken = this.authService.buildAuthHeader();
|
||||
this.uploadFilesOptions.url = endpointURL.concat(`/${this.submissionId}`);
|
||||
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.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);
|
||||
}
|
||||
@@ -105,7 +93,7 @@ export class SubmissionFormComponent implements OnChanges, OnDestroy {
|
||||
ngOnDestroy() {
|
||||
this.isActive = false;
|
||||
this.submissionService.stopAutoSave();
|
||||
this.store.dispatch(new CancelSubmissionFormAction());
|
||||
this.submissionService.resetAllSubmissionObjects();
|
||||
this.subs
|
||||
.filter((subscription) => hasValue(subscription))
|
||||
.forEach((subscription) => subscription.unsubscribe());
|
||||
@@ -117,8 +105,12 @@ export class SubmissionFormComponent implements OnChanges, OnDestroy {
|
||||
this.sections = workspaceItemObject.sections;
|
||||
this.submissionDefinition = workspaceItemObject.submissionDefinition[0];
|
||||
this.definitionId = this.submissionDefinition.name;
|
||||
this.store.dispatch(new ResetSubmissionFormAction(this.collectionId, this.submissionId, workspaceItemObject.self, this.sections, this.submissionDefinition));
|
||||
// this.submissionSections = this.getSectionsList();
|
||||
this.submissionService.resetSubmissionObject(
|
||||
this.collectionId,
|
||||
this.submissionId,
|
||||
workspaceItemObject.self,
|
||||
this.submissionDefinition,
|
||||
this.sections);
|
||||
} else {
|
||||
this.changeDetectorRef.detectChanges();
|
||||
}
|
||||
|
@@ -124,9 +124,7 @@ export class SubmissionObjectEffects {
|
||||
.map(([action, currentState]: [SaveSubmissionFormSuccessAction | SaveSubmissionSectionFormSuccessAction, any]) => {
|
||||
return this.parseSaveResponse((currentState.submission as SubmissionState).objects[action.payload.submissionId], action.payload.submissionObject, action.payload.submissionId);
|
||||
})
|
||||
.mergeMap((actions) => {
|
||||
return Observable.from(actions);
|
||||
});
|
||||
.mergeMap((actions) => Observable.from(actions));
|
||||
|
||||
@Effect() saveSection$ = this.actions$
|
||||
.ofType(SubmissionObjectActionTypes.SAVE_SUBMISSION_SECTION_FORM)
|
||||
|
@@ -1,10 +1,7 @@
|
||||
import { Component, Injector, Input, OnInit, ViewChild } from '@angular/core';
|
||||
|
||||
import { Store } from '@ngrx/store';
|
||||
|
||||
import { SectionsDirective } from '../sections.directive';
|
||||
import { SectionDataObject } from '../models/section-data.model';
|
||||
import { SubmissionState } from '../../submission.reducers';
|
||||
import { rendersSectionType } from '../sections-decorator';
|
||||
import { SectionsType } from '../sections-type';
|
||||
import { AlertType } from '../../../shared/alerts/aletrs-type';
|
||||
@@ -26,7 +23,7 @@ export class SectionContainerComponent implements OnInit {
|
||||
|
||||
@ViewChild('sectionRef') sectionRef: SectionsDirective;
|
||||
|
||||
constructor(private injector: Injector, private store: Store<SubmissionState>) {
|
||||
constructor(private injector: Injector) {
|
||||
}
|
||||
|
||||
ngOnInit() {
|
||||
|
@@ -1,25 +1,22 @@
|
||||
import { ChangeDetectorRef, Component, Inject, OnDestroy, ViewChild } from '@angular/core';
|
||||
import { Store } from '@ngrx/store';
|
||||
import { DynamicFormControlEvent, DynamicFormControlModel } from '@ng-dynamic-forms/core';
|
||||
|
||||
import { Subscription } from 'rxjs/Subscription';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { isEqual } from 'lodash';
|
||||
|
||||
import { FormBuilderService } from '../../../shared/form/builder/form-builder.service';
|
||||
import { FormComponent } from '../../../shared/form/form.component';
|
||||
import { FormService } from '../../../shared/form/form.service';
|
||||
import { SaveSubmissionFormAction, SectionStatusChangeAction, } from '../../objects/submission-objects.actions';
|
||||
import { SectionModelComponent } from '../models/section.model';
|
||||
import { SubmissionState } from '../../submission.reducers';
|
||||
import { SubmissionFormsConfigService } from '../../../core/config/submission-forms-config.service';
|
||||
import { hasValue, isNotEmpty, isNotUndefined, isUndefined } from '../../../shared/empty.util';
|
||||
import { ConfigData } from '../../../core/config/config-data';
|
||||
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 { SubmissionSectionError, SubmissionSectionObject } from '../../objects/submission-objects.reducer';
|
||||
import { FormFieldPreviousValueObject } from '../../../shared/form/builder/models/form-field-previous-value-object';
|
||||
import { WorkspaceitemSectionDataType } from '../../../core/submission/models/workspaceitem-sections.model';
|
||||
import { Subscription } from 'rxjs/Subscription';
|
||||
import { GLOBAL_CONFIG } from '../../../../config';
|
||||
import { GlobalConfig } from '../../../../config/global-config.interface';
|
||||
import { SectionDataObject } from '../models/section-data.model';
|
||||
@@ -28,7 +25,6 @@ import { SectionsType } from '../sections-type';
|
||||
import { SubmissionService } from '../../submission.service';
|
||||
import { FormOperationsService } from './form-operations.service';
|
||||
import { NotificationsService } from '../../../shared/notifications/notifications.service';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { SectionsService } from '../sections.service';
|
||||
import { difference } from '../../../shared/object.util';
|
||||
|
||||
@@ -59,7 +55,6 @@ export class FormSectionComponent extends SectionModelComponent implements OnDes
|
||||
protected formService: FormService,
|
||||
protected formConfigService: SubmissionFormsConfigService,
|
||||
protected notificationsService: NotificationsService,
|
||||
protected store: Store<SubmissionState>,
|
||||
protected sectionService: SectionsService,
|
||||
protected submissionService: SubmissionService,
|
||||
protected translate: TranslateService,
|
||||
@@ -77,7 +72,7 @@ export class FormSectionComponent extends SectionModelComponent implements OnDes
|
||||
.subscribe((config: SubmissionFormsModel) => {
|
||||
this.formConfig = config;
|
||||
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)
|
||||
.subscribe((sectionData: WorkspaceitemSectionDataType) => {
|
||||
if (isUndefined(this.formModel)) {
|
||||
@@ -180,7 +175,7 @@ export class FormSectionComponent extends SectionModelComponent implements OnDes
|
||||
.filter((formValid) => formValid !== this.valid)
|
||||
.subscribe((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
|
||||
@@ -193,7 +188,7 @@ export class FormSectionComponent extends SectionModelComponent implements OnDes
|
||||
/**
|
||||
* Subscribe to section state
|
||||
*/
|
||||
this.store.select(submissionSectionFromIdSelector(this.submissionId, this.sectionData.id))
|
||||
this.sectionService.getSectionState(this.submissionId, this.sectionData.id)
|
||||
.filter((sectionState: SubmissionSectionObject) => {
|
||||
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);
|
||||
|
||||
if (this.EnvConfig.submission.autosave.metadata.indexOf(metadata) !== -1 && isNotEmpty(value)) {
|
||||
this.store.dispatch(new SaveSubmissionFormAction(this.submissionId));
|
||||
this.submissionService.dispatchSave(this.submissionId);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -1,19 +1,18 @@
|
||||
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 { Store } from '@ngrx/store';
|
||||
import { JsonPatchOperationsBuilder } from '../../../core/json-patch/builder/json-patch-operations-builder';
|
||||
import { CollectionDataService } from '../../../core/data/collection-data.service';
|
||||
import { Subscription } from 'rxjs/Subscription';
|
||||
import { hasValue, isNotEmpty, isNotNull, isNotUndefined } from '../../../shared/empty.util';
|
||||
import { License } from '../../../core/shared/license.model';
|
||||
import { RemoteData } from '../../../core/data/remote-data';
|
||||
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 { FormBuilderService } from '../../../shared/form/builder/form-builder.service';
|
||||
import { RemoveSectionErrorsAction, SectionStatusChangeAction } from '../../objects/submission-objects.actions';
|
||||
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 { SectionsType } from '../sections-type';
|
||||
import { renderSectionFor } from '../sections-decorator';
|
||||
@@ -22,7 +21,6 @@ import { WorkspaceitemSectionLicenseObject } from '../../../core/submission/mode
|
||||
import { SubmissionService } from '../../submission.service';
|
||||
import { SectionsService } from '../sections.service';
|
||||
import { FormOperationsService } from '../form/form-operations.service';
|
||||
import { submissionSectionErrorsFromIdSelector } from '../../selectors';
|
||||
|
||||
@Component({
|
||||
selector: 'ds-submission-section-license',
|
||||
@@ -46,7 +44,6 @@ export class LicenseSectionComponent extends SectionModelComponent implements On
|
||||
protected formOperationsService: FormOperationsService,
|
||||
protected formService: FormService,
|
||||
protected operationsBuilder: JsonPatchOperationsBuilder,
|
||||
protected store: Store<SubmissionState>,
|
||||
protected sectionService: SectionsService,
|
||||
protected submissionService: SubmissionService,
|
||||
@Inject('collectionIdProvider') public injectedCollectionId: string,
|
||||
@@ -72,7 +69,7 @@ export class LicenseSectionComponent extends SectionModelComponent implements On
|
||||
// Retrieve license accepted status
|
||||
if ((this.sectionData.data as WorkspaceitemSectionLicenseObject).granted) {
|
||||
(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
|
||||
@@ -84,7 +81,8 @@ export class LicenseSectionComponent extends SectionModelComponent implements On
|
||||
});
|
||||
this.changeDetectorRef.detectChanges();
|
||||
}),
|
||||
this.store.select(submissionSectionErrorsFromIdSelector(this.submissionId, this.sectionData.id))
|
||||
|
||||
this.sectionService.getSectionErrors(this.submissionId, this.sectionData.id)
|
||||
.filter((errors) => isNotEmpty(errors))
|
||||
.distinctUntilChanged()
|
||||
.subscribe((errors) => {
|
||||
@@ -110,7 +108,7 @@ export class LicenseSectionComponent extends SectionModelComponent implements On
|
||||
this.sectionData.errors = errors;
|
||||
} else {
|
||||
// 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();
|
||||
})
|
||||
@@ -120,11 +118,11 @@ export class LicenseSectionComponent extends SectionModelComponent implements On
|
||||
onChange(event: DynamicFormControlEvent) {
|
||||
const path = this.formOperationsService.getFieldPathSegmentedFromChangeEvent(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) {
|
||||
this.operationsBuilder.add(this.pathCombiner.getPath(path), value.value.toString(), false, true);
|
||||
// Remove any section's errors
|
||||
this.store.dispatch(new RemoveSectionErrorsAction(this.submissionId, this.sectionData.id));
|
||||
this.sectionService.dispatchRemoveSectionErrors(this.submissionId, this.sectionData.id);
|
||||
} else {
|
||||
this.operationsBuilder.remove(this.pathCombiner.getPath(path));
|
||||
}
|
||||
|
@@ -1,21 +1,13 @@
|
||||
import { ChangeDetectorRef, Directive, Input, OnDestroy, OnInit } from '@angular/core';
|
||||
|
||||
import { Store } from '@ngrx/store';
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
import { Subscription } from 'rxjs/Subscription';
|
||||
import { uniq } from 'lodash';
|
||||
|
||||
import { SectionsService } from './sections.service';
|
||||
import { hasValue, isNotEmpty, isNotNull, isNotUndefined } from '../../shared/empty.util';
|
||||
import { submissionSectionFromIdSelector } from '../selectors';
|
||||
import { SubmissionState } from '../submission.reducers';
|
||||
import { hasValue, isNotEmpty, isNotNull } from '../../shared/empty.util';
|
||||
import { SubmissionSectionError, SubmissionSectionObject } from '../objects/submission-objects.reducer';
|
||||
import parseSectionErrorPaths, { SectionErrorPath } from '../utils/parseSectionErrorPaths';
|
||||
import {
|
||||
RemoveSectionErrorsAction,
|
||||
SaveSubmissionSectionFormAction,
|
||||
SetActiveSectionAction
|
||||
} from '../objects/submission-objects.actions';
|
||||
import { SubmissionService } from '../submission.service';
|
||||
|
||||
@Directive({
|
||||
@@ -35,7 +27,6 @@ export class SectionsDirective implements OnDestroy, OnInit {
|
||||
private valid: Observable<boolean>;
|
||||
|
||||
constructor(private changeDetectorRef: ChangeDetectorRef,
|
||||
private store: Store<SubmissionState>,
|
||||
private submissionService: SubmissionService,
|
||||
private sectionService: SectionsService) {
|
||||
}
|
||||
@@ -50,10 +41,8 @@ export class SectionsDirective implements OnDestroy, OnInit {
|
||||
});
|
||||
|
||||
this.subs.push(
|
||||
this.store.select(submissionSectionFromIdSelector(this.submissionId, this.sectionId))
|
||||
.filter((state: SubmissionSectionObject) => isNotUndefined(state))
|
||||
this.sectionService.getSectionState(this.submissionId, this.sectionId)
|
||||
.map((state: SubmissionSectionObject) => state.errors)
|
||||
// .filter((errors: SubmissionSectionError[]) => isNotEmpty(errors))
|
||||
.subscribe((errors: SubmissionSectionError[]) => {
|
||||
if (isNotEmpty(errors)) {
|
||||
errors.forEach((errorItem: SubmissionSectionError) => {
|
||||
@@ -77,7 +66,7 @@ export class SectionsDirective implements OnDestroy, OnInit {
|
||||
this.changeDetectorRef.detectChanges();
|
||||
// If section is no longer active dispatch save action
|
||||
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() {
|
||||
if (isNotEmpty(this.sectionErrors)) {
|
||||
this.store.dispatch(new RemoveSectionErrorsAction(this.submissionId, this.sectionId));
|
||||
this.sectionService.dispatchRemoveSectionErrors(this.submissionId, this.sectionId);
|
||||
}
|
||||
this.sectionErrors = [];
|
||||
|
||||
|
@@ -2,14 +2,18 @@ import { Injectable } from '@angular/core';
|
||||
|
||||
import { Observable } from 'rxjs/Observable';
|
||||
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 { SubmissionState } from '../submission.reducers';
|
||||
import { hasValue, isEmpty, isNotEmpty, isNotUndefined } from '../../shared/empty.util';
|
||||
import {
|
||||
DisableSectionAction,
|
||||
EnableSectionAction,
|
||||
InertSectionErrorsAction, RemoveSectionErrorsAction, SectionStatusChangeAction,
|
||||
InertSectionErrorsAction,
|
||||
RemoveSectionErrorsAction,
|
||||
SectionStatusChangeAction,
|
||||
UpdateSectionDataAction
|
||||
} from '../objects/submission-objects.actions';
|
||||
import {
|
||||
@@ -17,14 +21,18 @@ import {
|
||||
SubmissionSectionError,
|
||||
SubmissionSectionObject
|
||||
} from '../objects/submission-objects.reducer';
|
||||
import { submissionObjectFromIdSelector, submissionSectionFromIdSelector } from '../selectors';
|
||||
import { ScrollToConfigOptions, ScrollToService } from '@nicky-lenaers/ngx-scroll-to';
|
||||
import {
|
||||
submissionObjectFromIdSelector,
|
||||
submissionSectionDataFromIdSelector,
|
||||
submissionSectionErrorsFromIdSelector,
|
||||
submissionSectionFromIdSelector
|
||||
} from '../selectors';
|
||||
import { SubmissionScopeType } from '../../core/submission/submission-scope-type';
|
||||
import parseSectionErrorPaths, { SectionErrorPath } from '../utils/parseSectionErrorPaths';
|
||||
import { FormAddError, FormClearErrorsAction, FormRemoveErrorAction } from '../../shared/form/form.actions';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { NotificationsService } from '../../shared/notifications/notifications.service';
|
||||
import { SubmissionService } from '../submission.service';
|
||||
import { WorkspaceitemSectionDataType } from '../../core/submission/models/workspaceitem-sections.model';
|
||||
|
||||
@Injectable()
|
||||
export class SectionsService {
|
||||
@@ -36,7 +44,12 @@ export class SectionsService {
|
||||
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)) {
|
||||
this.store.dispatch(new RemoveSectionErrorsAction(submissionId, sectionId));
|
||||
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))
|
||||
.filter((sectionObj) => hasValue(sectionObj))
|
||||
.filter((sectionObj: SubmissionSectionObject) => hasValue(sectionObj))
|
||||
.map((sectionObj: SubmissionSectionObject) => sectionObj)
|
||||
.distinctUntilChanged();
|
||||
}
|
||||
|
||||
public isSectionValid(submissionId, sectionId): Observable<boolean> {
|
||||
public isSectionValid(submissionId: string, sectionId: string): Observable<boolean> {
|
||||
return this.store.select(submissionSectionFromIdSelector(submissionId, sectionId))
|
||||
.filter((sectionObj) => hasValue(sectionObj))
|
||||
.map((sectionObj: SubmissionSectionObject) => sectionObj.isValid)
|
||||
.distinctUntilChanged();
|
||||
}
|
||||
|
||||
public isSectionActive(submissionId, sectionId): Observable<boolean> {
|
||||
public isSectionActive(submissionId: string, sectionId: string): Observable<boolean> {
|
||||
return this.submissionService.getActiveSectionId(submissionId)
|
||||
.map((activeSectionId: string) => sectionId === activeSectionId)
|
||||
.distinctUntilChanged();
|
||||
}
|
||||
|
||||
public isSectionEnabled(submissionId, sectionId): Observable<boolean> {
|
||||
public isSectionEnabled(submissionId: string, sectionId: string): Observable<boolean> {
|
||||
return this.store.select(submissionSectionFromIdSelector(submissionId, sectionId))
|
||||
.filter((sectionObj) => hasValue(sectionObj))
|
||||
.map((sectionObj: SubmissionSectionObject) => sectionObj.enabled)
|
||||
@@ -110,7 +137,7 @@ export class SectionsService {
|
||||
.distinctUntilChanged();
|
||||
}
|
||||
|
||||
public isSectionAvailable(submissionId, sectionId): Observable<boolean> {
|
||||
public isSectionAvailable(submissionId: string, sectionId: string): Observable<boolean> {
|
||||
return this.store.select(submissionObjectFromIdSelector(submissionId))
|
||||
.filter((submissionState: SubmissionObjectEntry) => isNotUndefined(submissionState))
|
||||
.map((submissionState: SubmissionObjectEntry) => {
|
||||
@@ -130,11 +157,11 @@ export class SectionsService {
|
||||
this.scrollToService.scrollTo(config);
|
||||
}
|
||||
|
||||
public removeSection(submissionId, sectionId) {
|
||||
public removeSection(submissionId: string, sectionId: string) {
|
||||
this.store.dispatch(new DisableSectionAction(submissionId, sectionId))
|
||||
}
|
||||
|
||||
public updateSectionData(submissionId, sectionId, data, errors = []) {
|
||||
public updateSectionData(submissionId: string, sectionId: string, data, errors = []) {
|
||||
if (isNotEmpty(data)) {
|
||||
const isAvailable$ = this.isSectionAvailable(submissionId, sectionId);
|
||||
const isEnabled$ = this.isSectionEnabled(submissionId, sectionId);
|
||||
|
@@ -1,24 +1,24 @@
|
||||
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 { hasValue, isNotEmpty, isNotUndefined, isUndefined } from '../../../shared/empty.util';
|
||||
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 { GroupEpersonService } from '../../../core/eperson/group-eperson.service';
|
||||
import { SubmissionUploadsConfigService } from '../../../core/config/submission-uploads-config.service';
|
||||
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 { SectionsType } from '../sections-type';
|
||||
import { renderSectionFor } from '../sections-decorator';
|
||||
import { SectionDataObject } from '../models/section-data.model';
|
||||
import { submissionObjectFromIdSelector } from '../../selectors';
|
||||
import { SubmissionObjectEntry } from '../../objects/submission-objects.reducer';
|
||||
import { AlertType } from '../../../shared/alerts/aletrs-type';
|
||||
import { RemoteData } from '../../../core/data/remote-data';
|
||||
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_WITH_LIST = 2; // Banner2
|
||||
@@ -66,7 +66,8 @@ export class UploadSectionComponent extends SectionModelComponent implements OnI
|
||||
private changeDetectorRef: ChangeDetectorRef,
|
||||
private collectionDataService: CollectionDataService,
|
||||
private groupService: GroupEpersonService,
|
||||
private store: Store<SubmissionState>,
|
||||
protected sectionService: SectionsService,
|
||||
private submissionService: SubmissionService,
|
||||
private uploadsConfigService: SubmissionUploadsConfigService,
|
||||
@Inject('sectionDataProvider') public injectedSectionData: SectionDataObject,
|
||||
@Inject('submissionIdProvider') public injectedSubmissionId: string) {
|
||||
@@ -82,7 +83,7 @@ export class UploadSectionComponent extends SectionModelComponent implements OnI
|
||||
.map((config: SubmissionUploadsModel) => config.metadata[0]);
|
||||
|
||||
this.subs.push(
|
||||
this.store.select(submissionObjectFromIdSelector(this.submissionId))
|
||||
this.submissionService.getSubmissionObject(this.submissionId)
|
||||
.filter((submissionObject: SubmissionObjectEntry) => isNotUndefined(submissionObject) && !submissionObject.isLoading)
|
||||
.filter((submissionObject: SubmissionObjectEntry) => isUndefined(this.collectionId) || this.collectionId !== submissionObject.collection)
|
||||
.subscribe((submissionObject: SubmissionObjectEntry) => {
|
||||
@@ -174,9 +175,7 @@ export class UploadSectionComponent extends SectionModelComponent implements OnI
|
||||
});
|
||||
sectionStatus = true;
|
||||
}
|
||||
this.store.dispatch(new SectionStatusChangeAction(this.submissionId,
|
||||
this.sectionData.id,
|
||||
sectionStatus));
|
||||
this.sectionService.setSectionStatus(this.submissionId, this.sectionData.id, sectionStatus);
|
||||
this.changeDetectorRef.detectChanges();
|
||||
}
|
||||
)
|
||||
|
@@ -7,10 +7,18 @@ import { Store } from '@ngrx/store';
|
||||
|
||||
import { submissionSelector, SubmissionState } from './submission.reducers';
|
||||
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 {
|
||||
SubmissionObjectEntry,
|
||||
SubmissionSectionEntry,
|
||||
SubmissionSectionEntry, SubmissionSectionError,
|
||||
SubmissionSectionObject
|
||||
} from './objects/submission-objects.reducer';
|
||||
import { submissionObjectFromIdSelector } from './selectors';
|
||||
@@ -26,8 +34,9 @@ import { RouteService } from '../shared/services/route.service';
|
||||
import { SectionsType } from './sections/sections-type';
|
||||
import { TranslateService } from '@ngx-translate/core';
|
||||
import { NotificationsService } from '../shared/notifications/notifications.service';
|
||||
import { ScrollToConfigOptions, ScrollToService } from '@nicky-lenaers/ngx-scroll-to';
|
||||
import { NotificationOptions } from '../shared/notifications/models/notification-options.model';
|
||||
import { ScrollToService } from '@nicky-lenaers/ngx-scroll-to';
|
||||
import { SubmissionDefinitionsModel } from '../core/shared/config/config-submission-definitions.model';
|
||||
import { WorkspaceitemSectionsObject } from '../core/submission/models/workspaceitem-sections.model';
|
||||
|
||||
@Injectable()
|
||||
export class SubmissionService {
|
||||
@@ -45,6 +54,10 @@ export class SubmissionService {
|
||||
protected translate: TranslateService) {
|
||||
}
|
||||
|
||||
changeSubmissionCollection(submissionId, collectionId) {
|
||||
this.store.dispatch(new ChangeSubmissionCollectionAction(submissionId, collectionId));
|
||||
}
|
||||
|
||||
createSubmission(): Observable<SubmissionObject> {
|
||||
return this.restService.postToEndpoint('workspaceitems', {})
|
||||
.map((workspaceitems) => workspaceitems[0])
|
||||
@@ -63,6 +76,36 @@ export class SubmissionService {
|
||||
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> {
|
||||
return this.getSubmissionObject(submissionId)
|
||||
.map((submission: SubmissionObjectEntry) => submission.activeSection);
|
||||
@@ -121,19 +164,6 @@ export class SubmissionService {
|
||||
.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 {
|
||||
const url = this.router.routerState.snapshot.url;
|
||||
if (url.startsWith('/workspaceitems') || url.startsWith('/submit')) {
|
||||
@@ -207,6 +237,27 @@ export class SubmissionService {
|
||||
.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() {
|
||||
const previousUrl = this.routeService.getPreviousUrl();
|
||||
if (isEmpty(previousUrl)) {
|
||||
@@ -216,13 +267,20 @@ export class SubmissionService {
|
||||
}
|
||||
}
|
||||
|
||||
notifyNewSection(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);
|
||||
});
|
||||
resetAllSubmissionObjects() {
|
||||
this.store.dispatch(new CancelSubmissionFormAction());
|
||||
}
|
||||
|
||||
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> {
|
||||
return this.restService.getDataById(this.getSubmissionObjectLinkName(), submissionId)
|
||||
.filter((submissionObjects: SubmissionObject[]) => isNotUndefined(submissionObjects))
|
||||
|
Reference in New Issue
Block a user