Skip to content

Commit bebc88c

Browse files
NikitaKr1vonosovDavide Negretti
authored andcommitted
Merged in DSC-1669 (pull request DSpace#1706)
DSC-1669 Approved-by: Davide Negretti
2 parents 27fd154 + 1504335 commit bebc88c

31 files changed

Lines changed: 95399 additions & 28642 deletions

File tree

src/app/cris-layout/cris-layout-matrix/cris-layout-box-container/boxes/metadata/rendering-types/metadataGroup/metadata-group.component.ts

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,12 @@ export abstract class MetadataGroupComponent extends RenderingTypeStructuredMode
3232
/**
3333
* The prefix used for box field label's i18n key
3434
*/
35-
fieldI18nPrefix = 'layout.field.label.';
35+
readonly fieldI18nPrefix = 'layout.field.label';
36+
37+
/**
38+
* The prefix used for box field label's
39+
*/
40+
readonly nestedMetadataPrefix = 'NESTED';
3641

3742
/**
3843
* A boolean representing if component is initialized
@@ -80,17 +85,23 @@ export abstract class MetadataGroupComponent extends RenderingTypeStructuredMode
8085
}
8186

8287
/**
83-
* Returns a string representing the label of field if exists
88+
* Returns the translated label, if exists, otherwiuse returns a fallback value
8489
*/
8590
getLabel(field: LayoutField): string {
86-
const fieldLabelI18nKey = this.fieldI18nPrefix + field.label;
87-
const header: string = this.translateService.instant(fieldLabelI18nKey);
88-
if (header === fieldLabelI18nKey) {
89-
// if translation does not exist return the value present in the header property
90-
return this.translateService.instant(field.label);
91-
} else {
92-
return header;
93-
}
91+
return this.getTranslationIfExists(`${this.fieldI18nPrefix}.${this.item.entityType}.${this.nestedMetadataPrefix}[${field.metadata}]}`) ??
92+
this.getTranslationIfExists(`${this.fieldI18nPrefix}.${this.item.entityType}.[${field.metadata}]`) ??
93+
this.getTranslationIfExists(`${this.fieldI18nPrefix}.${this.item.entityType}.${field.metadata}`) ?? // old syntax - do not use
94+
this.getTranslationIfExists(`${this.fieldI18nPrefix}.[${field.metadata}]`) ??
95+
this.getTranslationIfExists(`${this.fieldI18nPrefix}.${field.label}`) ?? // old syntax - do not use
96+
field.label; // the untranslated value from the CRIS layout
97+
}
98+
99+
/**
100+
* Return the translated label, if exists, otherwise returns null
101+
*/
102+
getTranslationIfExists(key: string): string {
103+
const translation: string = this.translateService.instant(key);
104+
return translation !== key ? translation : null;
94105
}
95106

96107
ngOnDestroy(): void {

src/app/cris-layout/cris-layout-matrix/cris-layout-box-container/boxes/metadata/row/metadata-container/metadata-container.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<div *ngIf="metadataFieldRenderOptions" class="{{containerStyle}}">
22
<div class="d-flex" [class.flex-column]="field.labelAsHeading">
33
<span *ngIf="hasLabel"
4-
class="{{labelStyle}}" [innerHTML]="label">
4+
class="{{labelStyle}}" [innerHTML]="getLabel()">
55
</span>
66

77
<div *ngIf="!isStructured" class="d-flex col flex-wrap" [class.flex-column]="!field.valuesInline">

src/app/cris-layout/cris-layout-matrix/cris-layout-box-container/boxes/metadata/row/metadata-container/metadata-container.component.ts

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { CrisLayoutBox, LayoutField, LayoutFieldType } from '../../../../../../.
44
import {
55
FieldRenderingType,
66
getMetadataBoxFieldRendering,
7-
MetadataBoxFieldRenderOptions
7+
MetadataBoxFieldRenderOptions,
88
} from '../../rendering-types/metadata-box.decorator';
99
import { hasValue, isEmpty, isNotEmpty } from '../../../../../../../shared/empty.util';
1010
import { TranslateService } from '@ngx-translate/core';
@@ -13,11 +13,11 @@ import { MetadataValue } from '../../../../../../../core/shared/metadata.models'
1313
import { Bitstream } from '../../../../../../../core/shared/bitstream.model';
1414
import { getFirstCompletedRemoteData } from '../../../../../../../core/shared/operators';
1515
import { map, take } from 'rxjs/operators';
16-
import { BitstreamDataService } from '../../../../../../../core/data/bitstream-data.service';
17-
import { MetadataFilter } from '../../../../../../../core/data/bitstream-data.service';
16+
import { BitstreamDataService, MetadataFilter } from '../../../../../../../core/data/bitstream-data.service';
1817
import { RemoteData } from '../../../../../../../core/data/remote-data';
1918
import { PaginatedList } from '../../../../../../../core/data/paginated-list.model';
2019
import { Observable } from 'rxjs';
20+
import { inject } from '@angular/core';
2121

2222
@Component({
2323
selector: 'ds-metadata-container',
@@ -46,7 +46,7 @@ export class MetadataContainerComponent implements OnInit {
4646
/**
4747
* The prefix used for box field label's i18n key
4848
*/
49-
fieldI18nPrefix = 'layout.field.label.';
49+
readonly fieldI18nPrefix = 'layout.field.label';
5050

5151
/**
5252
* A boolean representing if metadata rendering type is structured or not
@@ -58,12 +58,9 @@ export class MetadataContainerComponent implements OnInit {
5858
*/
5959
metadataFieldRenderOptions: MetadataBoxFieldRenderOptions;
6060

61-
constructor(
62-
protected bitstreamDataService: BitstreamDataService,
63-
protected translateService: TranslateService,
64-
protected cd: ChangeDetectorRef
65-
) {
66-
}
61+
protected readonly bitstreamDataService = inject(BitstreamDataService);
62+
protected readonly translateService = inject(TranslateService);
63+
protected readonly cd = inject(ChangeDetectorRef);
6764

6865
/**
6966
* Returns all metadata values in the item
@@ -82,17 +79,29 @@ export class MetadataContainerComponent implements OnInit {
8279
/**
8380
* Returns a string representing the label of field if exists
8481
*/
85-
get label(): string {
86-
const fieldLabelI18nKey = this.fieldI18nPrefix + this.item.entityType + '.' + this.field.metadata;
87-
const header: string = this.translateService.instant(fieldLabelI18nKey);
88-
if (header === fieldLabelI18nKey) {
89-
// if translation does not exist return the value present in the header property
90-
return this.translateService.instant(this.field.label);
82+
getLabel(): string {
83+
if (this.field.fieldType === LayoutFieldType.BITSTREAM) {
84+
return (hasValue(this.field.bitstream.metadataValue) ?
85+
this.getTranslationIfExists(`${this.fieldI18nPrefix}.${this.item.entityType}.BITSTREAM[${this.field.bitstream.metadataValue}]`) :
86+
this.getTranslationIfExists(`${this.fieldI18nPrefix}.${this.item.entityType}.BITSTREAM`)
87+
) ?? this.field.label;
9188
} else {
92-
return header;
89+
return this.getTranslationIfExists(`${this.fieldI18nPrefix}.${this.item.entityType}.[${this.field.metadata}]`) ??
90+
this.getTranslationIfExists(`${this.fieldI18nPrefix}.${this.item.entityType}.${this.field.metadata}`) ?? // old syntax - do not use
91+
this.getTranslationIfExists(`${this.fieldI18nPrefix}.[${this.field.metadata}]`) ??
92+
this.getTranslationIfExists(`${this.fieldI18nPrefix}.${this.field.label}`) ?? // old syntax - do not use
93+
this.field.label; // the untranslated value from the CRIS layout
9394
}
9495
}
9596

97+
/**
98+
* Return the translated label, if exists, otherwise returns null
99+
*/
100+
getTranslationIfExists(key: string): string {
101+
const translation: string = this.translateService.instant(key);
102+
return translation !== key ? translation : null;
103+
}
104+
96105
/**
97106
* Returns a string representing the style of field container if exists
98107
*/

0 commit comments

Comments
 (0)