Skip to content

Commit 017e49a

Browse files
Merge branch 'w2p-119915_made-edit-metadata-tab-fields-dynamic_contribute-7.6' into w2p-119915_made-edit-metadata-tab-fields-dynamic_contribute-main
# Conflicts: # src/app/core/shared/context.model.ts # src/app/dso-shared/dso-edit-metadata/dso-edit-metadata-field-values/dso-edit-metadata-field-values.component.ts # src/app/dso-shared/dso-edit-metadata/dso-edit-metadata-value/dso-edit-metadata-value.component.html # src/app/dso-shared/dso-edit-metadata/dso-edit-metadata-value/dso-edit-metadata-value.component.ts # src/app/dso-shared/dso-edit-metadata/dso-edit-metadata.component.ts # src/app/dso-shared/dso-shared.module.ts # src/app/shared/testing/entity-type-data.service.stub.ts
2 parents f2c2fda + 77b66a5 commit 017e49a

21 files changed

Lines changed: 504 additions & 5 deletions

src/app/core/shared/context.model.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,10 @@ export enum Context {
4141
Bitstream = 'bitstream',
4242

4343
CoarNotify = 'coarNotify',
44+
45+
/**
46+
* The Edit Metadata field Context values that are used in the Edit Item Metadata tab.
47+
*/
48+
AddMetadata = 'addMetadata',
49+
EditMetadata = 'editMetadata',
4450
}

src/app/dso-shared/dso-edit-metadata/dso-edit-metadata-field-values/dso-edit-metadata-field-values.component.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
<ds-dso-edit-metadata-value-headers role="presentation" [dsoType]="dsoType"></ds-dso-edit-metadata-value-headers>
33
<ds-dso-edit-metadata-value *ngFor="let mdValue of form.fields[mdField]; let idx = index" role="presentation"
44
[dso]="dso"
5+
[context]="Context.EditMetadata"
6+
[mdField]="mdField"
57
[mdValue]="mdValue"
68
[mdField]="mdField"
79
[dsoType]="dsoType"

src/app/dso-shared/dso-edit-metadata/dso-edit-metadata-field-values/dso-edit-metadata-field-values.component.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
Observable,
1919
} from 'rxjs';
2020

21+
import { Context } from '../../../core/shared/context.model';
2122
import { DSpaceObject } from '../../../core/shared/dspace-object.model';
2223
import {
2324
DsoEditMetadataChangeType,
@@ -81,6 +82,8 @@ export class DsoEditMetadataFieldValuesComponent {
8182
*/
8283
public DsoEditMetadataChangeTypeEnum = DsoEditMetadataChangeType;
8384

85+
public readonly Context = Context;
86+
8487
/**
8588
* Drop a value into a new position
8689
* Update the form's value array for the current field to match the dropped position
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import {
2+
Component,
3+
EventEmitter,
4+
Input,
5+
Output,
6+
} from '@angular/core';
7+
8+
import { Context } from '../../../core/shared/context.model';
9+
import { DSpaceObject } from '../../../core/shared/dspace-object.model';
10+
import { DsoEditMetadataValue } from '../dso-edit-metadata-form';
11+
import { EditMetadataValueFieldType } from './dso-edit-metadata-field-type.enum';
12+
13+
@Component({
14+
selector: 'ds-dso-edit-metadata-entity-field',
15+
template: '',
16+
})
17+
export abstract class AbstractDsoEditMetadataValueFieldComponent {
18+
19+
/**
20+
* The optional context
21+
*/
22+
@Input() context: Context;
23+
24+
/**
25+
* The {@link DSpaceObject}
26+
*/
27+
@Input() dso: DSpaceObject;
28+
29+
/**
30+
* The type of the DSO, used to determines i18n messages
31+
*/
32+
@Input() dsoType: string;
33+
34+
/**
35+
* The type of the field
36+
*/
37+
@Input() type: EditMetadataValueFieldType;
38+
39+
/**
40+
* The metadata field
41+
*/
42+
@Input() mdField: string;
43+
44+
/**
45+
* Editable metadata value to show
46+
*/
47+
@Input() mdValue: DsoEditMetadataValue;
48+
49+
/**
50+
* Emits when the user clicked confirm
51+
*/
52+
@Output() confirm: EventEmitter<boolean> = new EventEmitter();
53+
54+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<select class="form-control" [(ngModel)]="mdValue?.newValue.value" (ngModelChange)="confirm.emit(false)">
2+
<option *ngFor="let entity of (entities$ | async)" [value]="entity.label === 'none' ? undefined : entity.label">
3+
{{ entity.label }}
4+
</option>
5+
</select>

src/app/dso-shared/dso-edit-metadata/dso-edit-metadata-value-field/dso-edit-metadata-entity-field/dso-edit-metadata-entity-field.component.scss

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import {
2+
ComponentFixture,
3+
TestBed,
4+
} from '@angular/core/testing';
5+
6+
import { EntityTypeDataService } from '../../../../core/data/entity-type-data.service';
7+
import { EntityTypeDataServiceStub } from '../../../../shared/testing/entity-type-data.service.stub';
8+
import { DsoEditMetadataEntityFieldComponent } from './dso-edit-metadata-entity-field.component';
9+
10+
describe('DsoEditMetadataEntityFieldComponent', () => {
11+
let component: DsoEditMetadataEntityFieldComponent;
12+
let fixture: ComponentFixture<DsoEditMetadataEntityFieldComponent>;
13+
14+
let entityTypeService: EntityTypeDataServiceStub;
15+
16+
beforeEach(async () => {
17+
entityTypeService = new EntityTypeDataServiceStub();
18+
19+
await TestBed.configureTestingModule({
20+
declarations: [
21+
DsoEditMetadataEntityFieldComponent,
22+
],
23+
providers: [
24+
{ provide: EntityTypeDataService, useValue: entityTypeService },
25+
],
26+
}).compileComponents();
27+
28+
fixture = TestBed.createComponent(DsoEditMetadataEntityFieldComponent);
29+
component = fixture.componentInstance;
30+
fixture.detectChanges();
31+
});
32+
33+
it('should create', () => {
34+
expect(component).toBeTruthy();
35+
});
36+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import {
2+
Component,
3+
OnInit,
4+
} from '@angular/core';
5+
import { Observable } from 'rxjs';
6+
7+
import { EntityTypeDataService } from '../../../../core/data/entity-type-data.service';
8+
import { ItemType } from '../../../../core/shared/item-relationships/item-type.model';
9+
import { getFirstSucceededRemoteListPayload } from '../../../../core/shared/operators';
10+
import { AbstractDsoEditMetadataValueFieldComponent } from '../abstract-dso-edit-metadata-value-field.component';
11+
import { EditMetadataValueFieldType } from '../dso-edit-metadata-field-type.enum';
12+
import { editMetadataValueFieldComponent } from '../dso-edit-metadata-value-field-loader/dso-edit-metadata-value-field.decorator';
13+
14+
/**
15+
* The component used to gather input for entity-type metadata fields
16+
*/
17+
@Component({
18+
selector: 'ds-dso-edit-metadata-entity-field',
19+
templateUrl: './dso-edit-metadata-entity-field.component.html',
20+
styleUrls: ['./dso-edit-metadata-entity-field.component.scss'],
21+
})
22+
@editMetadataValueFieldComponent(EditMetadataValueFieldType.ENTITY_TYPE)
23+
export class DsoEditMetadataEntityFieldComponent extends AbstractDsoEditMetadataValueFieldComponent implements OnInit {
24+
25+
/**
26+
* List of all the existing entity types
27+
*/
28+
entities$: Observable<ItemType[]>;
29+
30+
constructor(
31+
protected entityTypeService: EntityTypeDataService,
32+
) {
33+
super();
34+
}
35+
36+
ngOnInit(): void {
37+
this.entities$ = this.entityTypeService.findAll({ elementsPerPage: 100, currentPage: 1 }).pipe(
38+
getFirstSucceededRemoteListPayload(),
39+
);
40+
}
41+
42+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/**
2+
* The edit metadata field tab types
3+
*/
4+
export enum EditMetadataValueFieldType {
5+
PLAIN_TEXT = 'PLAIN_TEXT',
6+
ENTITY_TYPE = 'ENTITY_TYPE',
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<textarea [(ngModel)]="mdValue?.newValue.value"
2+
[dsDebounce]="300"
3+
(onDebounce)="confirm.emit(false)"
4+
class="form-control"
5+
rows="5">
6+
</textarea>

0 commit comments

Comments
 (0)