Skip to content

Commit 01cdbf7

Browse files
authored
fix bookdrop metadata picker header buttons not rendering and disabled fields still showing (#3032)
1 parent 19c6abe commit 01cdbf7

File tree

3 files changed

+95
-60
lines changed

3 files changed

+95
-60
lines changed

booklore-ui/src/app/features/bookdrop/component/bookdrop-file-metadata-picker/bookdrop-file-metadata-picker.component.html

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,41 +2,41 @@
22
@if (fetchedMetadata && fetchedMetadata.title) {
33
<form [formGroup]="metadataForm" class="metapicker">
44
<div class="form-scroll">
5-
<div class="metaheader">
6-
<label class="field-label"></label>
7-
<div class="header-fields-row">
8-
<p class="header-column">{{ t('fileData') }}</p>
9-
<div class="midbuttons">
10-
<p-button
11-
size="small"
12-
icon="pi pi-angle-left"
13-
class="btn-margin"
14-
[outlined]="true"
15-
[pTooltip]="t('copyMissingTooltip')"
16-
tooltipPosition="bottom"
17-
(onClick)="copyMissing()"
18-
></p-button>
19-
<p-button
20-
size="small"
21-
icon="pi pi-angle-double-left"
22-
class="btn-margin"
23-
[outlined]="true"
24-
[pTooltip]="t('overwriteAllTooltip')"
25-
tooltipPosition="bottom"
26-
(onClick)="copyAll()"
27-
></p-button>
28-
<p-button
29-
size="small"
30-
severity="warn"
31-
icon="pi pi-refresh"
32-
class="btn-margin"
33-
[outlined]="true"
34-
[pTooltip]="t('resetAllTooltip')"
35-
tooltipPosition="bottom"
36-
(onClick)="confirmReset()"
37-
></p-button>
38-
</div>
39-
<p class="header-column">{{ t('fetchedData') }}</p>
5+
<div class="column-headers">
6+
<div class="column-label current">
7+
<span>{{ t('fileData') }}</span>
8+
</div>
9+
<div class="column-actions">
10+
<button
11+
type="button"
12+
class="p-button p-button-outlined p-button-sm p-button-icon-only"
13+
[pTooltip]="t('copyMissingTooltip')"
14+
tooltipPosition="bottom"
15+
(click)="copyMissing()"
16+
>
17+
<span class="p-button-icon pi pi-angle-left"></span>
18+
</button>
19+
<button
20+
type="button"
21+
class="p-button p-button-outlined p-button-sm p-button-icon-only"
22+
[pTooltip]="t('overwriteAllTooltip')"
23+
tooltipPosition="bottom"
24+
(click)="copyAll()"
25+
>
26+
<span class="p-button-icon pi pi-angle-double-left"></span>
27+
</button>
28+
<button
29+
type="button"
30+
class="p-button p-button-outlined p-button-sm p-button-icon-only p-button-warn"
31+
[pTooltip]="t('resetAllTooltip')"
32+
tooltipPosition="bottom"
33+
(click)="confirmReset()"
34+
>
35+
<span class="p-button-icon pi pi-refresh"></span>
36+
</button>
37+
</div>
38+
<div class="column-label fetched">
39+
<span>{{ t('fetchedData') }}</span>
4040
</div>
4141
</div>
4242
<div class="metacontent">

booklore-ui/src/app/features/bookdrop/component/bookdrop-file-metadata-picker/bookdrop-file-metadata-picker.component.scss

Lines changed: 36 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -93,18 +93,45 @@ textarea.changed,
9393
width: 8rem;
9494
}
9595

96-
.header-fields-row {
96+
.column-headers {
9797
display: flex;
98-
width: 100%;
9998
align-items: center;
100-
}
99+
padding: 1rem;
100+
border-bottom: 1px dotted var(--border-color);
101101

102-
.header-column {
103-
width: 50%;
104-
}
102+
@media (min-width: 768px) {
103+
&::before {
104+
content: '';
105+
min-width: 8rem;
106+
flex-shrink: 0;
107+
}
108+
}
109+
110+
.column-label {
111+
display: flex;
112+
align-items: center;
113+
flex: 1;
114+
color: var(--text-color-secondary);
115+
font-size: 0.875rem;
116+
117+
&.current {
118+
justify-content: flex-end;
119+
padding-right: 1rem;
120+
}
105121

106-
.btn-margin {
107-
margin: 0 0.5rem;
122+
&.fetched {
123+
justify-content: flex-start;
124+
padding-left: 1rem;
125+
}
126+
}
127+
128+
.column-actions {
129+
display: flex;
130+
align-items: center;
131+
justify-content: center;
132+
gap: 0.5rem;
133+
flex-shrink: 0;
134+
}
108135
}
109136

110137
.thumbnail-row {
@@ -217,25 +244,13 @@ textarea.changed,
217244
}
218245
}
219246

247+
220248
.metaheader {
221-
position: relative;
222249
display: flex;
223250
align-items: center;
224251
border-bottom: 1px dotted var(--border-color);
225252
padding: 1rem;
226253
justify-content: space-between;
227-
228-
p {
229-
text-align: center;
230-
231-
@media (max-width: 768px) {
232-
font-size: 0.875rem;
233-
}
234-
}
235-
}
236-
237-
.metaheader .midbuttons {
238-
white-space: nowrap;
239254
}
240255

241256
.metacontent {
@@ -294,7 +309,6 @@ textarea.changed,
294309
}
295310

296311
@media (min-width: 768px) {
297-
.metaheader,
298312
.metapicker .metacontent,
299313
.metaeditor .metabody {
300314
padding-left: 3.25rem;

booklore-ui/src/app/features/bookdrop/component/bookdrop-file-metadata-picker/bookdrop-file-metadata-picker.component.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
import {Component, EventEmitter, inject, Input, Output} from '@angular/core';
1+
import {Component, DestroyRef, EventEmitter, inject, Input, OnInit, Output} from '@angular/core';
2+
import {takeUntilDestroyed} from '@angular/core/rxjs-interop';
23
import {FormGroup, FormsModule, ReactiveFormsModule} from '@angular/forms';
4+
import {filter} from 'rxjs/operators';
35
import {Button} from 'primeng/button';
46
import {NgClass} from '@angular/common';
57
import {Tooltip} from 'primeng/tooltip';
@@ -14,6 +16,8 @@ import {ConfirmationService} from 'primeng/api';
1416
import {DatePicker} from 'primeng/datepicker';
1517
import {ALL_METADATA_FIELDS, getArrayFields, getBottomFields, getTextareaFields, MetadataFieldConfig} from '../../../../shared/metadata';
1618
import {MetadataUtilsService} from '../../../../shared/metadata';
19+
import {MetadataProviderSpecificFields} from '../../../../shared/model/app-settings.model';
20+
import {AppSettingsService} from '../../../../shared/service/app-settings.service';
1721
import {TranslocoDirective, TranslocoService} from '@jsverse/transloco';
1822

1923
@Component({
@@ -35,11 +39,13 @@ import {TranslocoDirective, TranslocoService} from '@jsverse/transloco';
3539
templateUrl: './bookdrop-file-metadata-picker.component.html',
3640
styleUrl: './bookdrop-file-metadata-picker.component.scss'
3741
})
38-
export class BookdropFileMetadataPickerComponent {
42+
export class BookdropFileMetadataPickerComponent implements OnInit {
3943

4044
private readonly confirmationService = inject(ConfirmationService);
4145
private readonly metadataUtils = inject(MetadataUtilsService);
4246
protected readonly urlHelper = inject(UrlHelperService);
47+
private readonly appSettingsService = inject(AppSettingsService);
48+
private readonly destroyRef = inject(DestroyRef);
4349
private readonly t = inject(TranslocoService);
4450

4551
@Input() fetchedMetadata!: BookMetadata;
@@ -51,7 +57,8 @@ export class BookdropFileMetadataPickerComponent {
5157

5258
@Output() metadataCopied = new EventEmitter<boolean>();
5359

54-
// Use shared field configuration - separate publishedDate for DatePicker
60+
private enabledProviderFields: MetadataProviderSpecificFields | null = null;
61+
5562
metadataFieldsTop: MetadataFieldConfig[] = ALL_METADATA_FIELDS.filter(f =>
5663
['title', 'subtitle', 'publisher'].includes(f.controlName)
5764
);
@@ -66,6 +73,20 @@ export class BookdropFileMetadataPickerComponent {
6673

6774
metadataFieldsBottom: MetadataFieldConfig[] = getBottomFields();
6875

76+
ngOnInit(): void {
77+
this.appSettingsService.appSettings$
78+
.pipe(
79+
filter(settings => !!settings?.metadataProviderSpecificFields),
80+
takeUntilDestroyed(this.destroyRef)
81+
)
82+
.subscribe(settings => {
83+
if (settings?.metadataProviderSpecificFields) {
84+
this.enabledProviderFields = settings.metadataProviderSpecificFields;
85+
this.metadataFieldsBottom = getBottomFields(this.enabledProviderFields);
86+
}
87+
});
88+
}
89+
6990
copyMissing(): void {
7091
this.metadataUtils.copyMissingFields(
7192
this.fetchedMetadata,

0 commit comments

Comments
 (0)