<div class="border rounded m-1">
- <div class="font-weight-bold header p-2" i18n>
+ <div class="font-weight-bold header p-2 d-flex" i18n>
{{label}} <span *ngIf="hasChanged" class="text-danger">*</span>
+ <ng-container *ngIf="bulky()">
+ <div class="flex-1"></div>
+ <a href='javascript:;' (click)="expanded = true" *ngIf="!expanded">
+ <span class="material-icons">unfold_more</span>
+ </a>
+ <a href='javascript:;' (click)="expanded = false" *ngIf="expanded">
+ <span class="material-icons">unfold_less</span>
+ </a>
+ </ng-container>
</div>
<div *ngIf="!editing" tabindex="0" class="p-2"
[ngClass]="{'has-changes': hasChanged}" (keyup.enter)="toggleEditMode()"
(click)="toggleEditMode()">
<div class="d-flex"
- *ngFor="let count of labelCounts | keyvalue">
- <div class="flex-1">
- <ng-container *ngIf="displayAs == 'bool'">
- <span *ngIf="count.key == 't'" i18n>Yes</span>
- <span *ngIf="count.key == 'f'" i18n>No</span>
- </ng-container>
- <ng-container *ngIf="displayAs == 'currency'">
- <ng-container
- *ngIf="emptyIsUnset && !count.key && count.key !== 0; else defaultCurrency">
- <span i18n><Unset></span>
+ *ngFor="let count of labelCounts | keyvalue; let idx = index">
+ <ng-container *ngIf="!expanded && idx === defaultDisplayCount">
+ <span i18n>...</span>
+ </ng-container>
+ <ng-container *ngIf="expanded || idx < defaultDisplayCount">
+ <div class="flex-1">
+ <ng-container *ngIf="displayAs == 'bool'">
+ <span *ngIf="count.key == 't'" i18n>Yes</span>
+ <span *ngIf="count.key == 'f'" i18n>No</span>
</ng-container>
- <ng-template #defaultCurrency>{{count.key | currency}}</ng-template>
- </ng-container>
- <ng-container *ngIf="displayAs == null">
- <ng-container
- *ngIf="emptyIsUnset && !count.key && count.key !== 0; else default">
- <span i18n><Unset></span>
+ <ng-container *ngIf="displayAs == 'currency'">
+ <ng-container
+ *ngIf="emptyIsUnset && !count.key && count.key !== 0; else defaultCurrency">
+ <span i18n><Unset></span>
+ </ng-container>
+ <ng-template #defaultCurrency>{{count.key | currency}}</ng-template>
</ng-container>
- <ng-template #default>{{count.key}}</ng-template>
- </ng-container>
- </div>
- <div i18n>{{count.value}} copies</div>
+ <ng-container *ngIf="displayAs == null">
+ <ng-container
+ *ngIf="emptyIsUnset && !count.key && count.key !== 0; else default">
+ <span i18n><Unset></span>
+ </ng-container>
+ <ng-template #default>{{count.key}}</ng-template>
+ </ng-container>
+ </div>
+ <div i18n>{{count.value}} copies</div>
+ </ng-container>
</div>
</div>
<ng-container *ngIf="editing">
// If true, null/undefined/empty-string display as <Unset>
@Input() emptyIsUnset: boolean;
+ // Lists larger than this will be partially hidden behind
+ // and expandy.
+ @Input() defaultDisplayCount = 7;
+
@Output() changesSaved: EventEmitter<void> = new EventEmitter<void>();
@Output() changesCanceled: EventEmitter<void> = new EventEmitter<void>();
@Output() valueCleared: EventEmitter<void> = new EventEmitter<void>();
hasChanged = false;
+ // Showing all entries?
+ expanded = false;
+
constructor() {}
save() {
this.valueCleared.emit();
}
+ bulky(): boolean {
+ return Object.keys(this.labelCounts).length > this.defaultDisplayCount;
+ }
toggleEditMode() {
if (this.readOnly) { return; }