collection-form.component.ts (dspace-angular-dspace-7.0) | : | collection-form.component.ts (dspace-angular-dspace-7.1) | ||
---|---|---|---|---|
import { Component, Input } from '@angular/core'; | import { Component, Input, OnInit } from '@angular/core'; | |||
import { Observable } from 'rxjs'; | ||||
import { TranslateService } from '@ngx-translate/core'; | ||||
import { | import { | |||
DynamicFormControlModel, | DynamicFormControlModel, | |||
DynamicFormOptionConfig, | ||||
DynamicFormService, | DynamicFormService, | |||
DynamicInputModel, | DynamicSelectModel | |||
DynamicTextAreaModel | ||||
} from '@ng-dynamic-forms/core'; | } from '@ng-dynamic-forms/core'; | |||
import { Collection } from '../../core/shared/collection.model'; | import { Collection } from '../../core/shared/collection.model'; | |||
import { ComColFormComponent } from '../../shared/comcol-forms/comcol-form/comco l-form.component'; | import { ComColFormComponent } from '../../shared/comcol-forms/comcol-form/comco l-form.component'; | |||
import { TranslateService } from '@ngx-translate/core'; | ||||
import { NotificationsService } from '../../shared/notifications/notifications.s ervice'; | import { NotificationsService } from '../../shared/notifications/notifications.s ervice'; | |||
import { CommunityDataService } from '../../core/data/community-data.service'; | import { CommunityDataService } from '../../core/data/community-data.service'; | |||
import { AuthService } from '../../core/auth/auth.service'; | import { AuthService } from '../../core/auth/auth.service'; | |||
import { RequestService } from '../../core/data/request.service'; | import { RequestService } from '../../core/data/request.service'; | |||
import { ObjectCacheService } from '../../core/cache/object-cache.service'; | import { ObjectCacheService } from '../../core/cache/object-cache.service'; | |||
import { EntityTypeService } from '../../core/data/entity-type.service'; | ||||
import { ItemType } from '../../core/shared/item-relationships/item-type.model'; | ||||
import { MetadataValue } from '../../core/shared/metadata.models'; | ||||
import { getFirstSucceededRemoteListPayload } from '../../core/shared/operators' | ||||
; | ||||
import { collectionFormEntityTypeSelectionConfig, collectionFormModels, } from ' | ||||
./collection-form.models'; | ||||
import { NONE_ENTITY_TYPE } from '../../core/shared/item-relationships/item-type | ||||
.resource-type'; | ||||
/** | /** | |||
* Form used for creating and editing collections | * Form used for creating and editing collections | |||
*/ | */ | |||
@Component({ | @Component({ | |||
selector: 'ds-collection-form', | selector: 'ds-collection-form', | |||
styleUrls: ['../../shared/comcol-forms/comcol-form/comcol-form.component.scss' ], | styleUrls: ['../../shared/comcol-forms/comcol-form/comcol-form.component.scss' ], | |||
templateUrl: '../../shared/comcol-forms/comcol-form/comcol-form.component.html ' | templateUrl: '../../shared/comcol-forms/comcol-form/comcol-form.component.html ' | |||
}) | }) | |||
export class CollectionFormComponent extends ComColFormComponent<Collection> { | export class CollectionFormComponent extends ComColFormComponent<Collection> imp lements OnInit { | |||
/** | /** | |||
* @type {Collection} A new collection when a collection is being created, an existing Input collection when a collection is being edited | * @type {Collection} A new collection when a collection is being created, an existing Input collection when a collection is being edited | |||
*/ | */ | |||
@Input() dso: Collection = new Collection(); | @Input() dso: Collection = new Collection(); | |||
/** | /** | |||
* @type {Collection.type} This is a collection-type form | * @type {Collection.type} This is a collection-type form | |||
*/ | */ | |||
type = Collection.type; | type = Collection.type; | |||
/** | /** | |||
* The dynamic form field used for entity type selection | ||||
* @type {DynamicSelectModel<string>} | ||||
*/ | ||||
entityTypeSelection: DynamicSelectModel<string> = new DynamicSelectModel(colle | ||||
ctionFormEntityTypeSelectionConfig); | ||||
/** | ||||
* The dynamic form fields used for creating/editing a collection | * The dynamic form fields used for creating/editing a collection | |||
* @type {(DynamicInputModel | DynamicTextAreaModel)[]} | * @type {DynamicFormControlModel[]} | |||
*/ | */ | |||
formModel: DynamicFormControlModel[] = [ | formModel: DynamicFormControlModel[]; | |||
new DynamicInputModel({ | ||||
id: 'title', | ||||
name: 'dc.title', | ||||
required: true, | ||||
validators: { | ||||
required: null | ||||
}, | ||||
errorMessages: { | ||||
required: 'Please enter a name for this title' | ||||
}, | ||||
}), | ||||
new DynamicTextAreaModel({ | ||||
id: 'description', | ||||
name: 'dc.description', | ||||
}), | ||||
new DynamicTextAreaModel({ | ||||
id: 'abstract', | ||||
name: 'dc.description.abstract', | ||||
}), | ||||
new DynamicTextAreaModel({ | ||||
id: 'rights', | ||||
name: 'dc.rights', | ||||
}), | ||||
new DynamicTextAreaModel({ | ||||
id: 'tableofcontents', | ||||
name: 'dc.description.tableofcontents', | ||||
}), | ||||
new DynamicTextAreaModel({ | ||||
id: 'license', | ||||
name: 'dc.rights.license', | ||||
}), | ||||
new DynamicTextAreaModel({ | ||||
id: 'provenance', | ||||
name: 'dc.description.provenance', | ||||
}), | ||||
]; | ||||
public constructor(protected formService: DynamicFormService, | public constructor(protected formService: DynamicFormService, | |||
protected translate: TranslateService, | protected translate: TranslateService, | |||
protected notificationsService: NotificationsService, | protected notificationsService: NotificationsService, | |||
protected authService: AuthService, | protected authService: AuthService, | |||
protected dsoService: CommunityDataService, | protected dsoService: CommunityDataService, | |||
protected requestService: RequestService, | protected requestService: RequestService, | |||
protected objectCache: ObjectCacheService) { | protected objectCache: ObjectCacheService, | |||
protected entityTypeService: EntityTypeService) { | ||||
super(formService, translate, notificationsService, authService, requestServ ice, objectCache); | super(formService, translate, notificationsService, authService, requestServ ice, objectCache); | |||
} | } | |||
ngOnInit() { | ||||
let currentRelationshipValue: MetadataValue[]; | ||||
if (this.dso && this.dso.metadata) { | ||||
currentRelationshipValue = this.dso.metadata['dspace.entity.type']; | ||||
} | ||||
const entities$: Observable<ItemType[]> = this.entityTypeService.findAll({ e | ||||
lementsPerPage: 100, currentPage: 1 }).pipe( | ||||
getFirstSucceededRemoteListPayload() | ||||
); | ||||
// retrieve all entity types to populate the dropdowns selection | ||||
entities$.subscribe((entityTypes: ItemType[]) => { | ||||
entityTypes | ||||
.filter((type: ItemType) => type.label !== NONE_ENTITY_TYPE) | ||||
.forEach((type: ItemType, index: number) => { | ||||
this.entityTypeSelection.add({ | ||||
disabled: false, | ||||
label: type.label, | ||||
value: type.label | ||||
} as DynamicFormOptionConfig<string>); | ||||
if (currentRelationshipValue && currentRelationshipValue.length > 0 && | ||||
currentRelationshipValue[0].value === type.label) { | ||||
this.entityTypeSelection.select(index); | ||||
this.entityTypeSelection.disabled = true; | ||||
} | ||||
}); | ||||
this.formModel = [...collectionFormModels, this.entityTypeSelection]; | ||||
super.ngOnInit(); | ||||
}); | ||||
} | ||||
} | } | |||
End of changes. 12 change blocks. | ||||
44 lines changed or deleted | 65 lines changed or added |