Skip to content

Commit db65f01

Browse files
committed
refactor(ui): view preferences default sort and view rework
1 parent e004d8f commit db65f01

18 files changed

Lines changed: 85 additions & 446 deletions

File tree

frontend/src/app/features/settings/view-preferences-parent/view-preferences/view-preferences.component.html

Lines changed: 9 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -26,71 +26,15 @@ <h3 class="section-title">
2626

2727
<div class="multi-sort-editor">
2828
<span class="multi-sort-label">{{ t('sortOrderLabel') }}</span>
29-
<app-multi-sort-popover
30-
[sortCriteria]="globalSortAsOptions"
31-
[availableSortOptions]="allSortAsOptions"
32-
(criteriaChange)="onGlobalSortCriteriaChange($event)">
33-
</app-multi-sort-popover>
29+
<app-book-browse-multi-sort-editor
30+
class="block max-w-96"
31+
[terms]="globalSortTerms"
32+
[options]="editorSortOptions()"
33+
(termsChange)="onGlobalSortTermsChange($event)" />
3434
</div>
35-
</div>
36-
37-
<div class="setting-item">
38-
<div class="setting-header-standalone">
39-
<span class="setting-label">{{ t('visibleSortFields') }}</span>
40-
</div>
41-
<p class="setting-description">
42-
{{ t('visibleSortFieldsDesc') }}
43-
<span class="sort-field-count">({{ sortFieldSelectionCountText }})</span>
44-
</p>
45-
<div class="sort-field-order-editor">
46-
<div
47-
#sortFieldList
48-
class="sort-field-order-list"
49-
cdkDropList
50-
[cdkDropListData]="visibleSortFields"
51-
(cdkDropListDropped)="onSortFieldDrop($event)">
52-
@for (f of visibleSortFields; track f; let i = $index) {
53-
<div class="sort-field-order-row" cdkDrag>
54-
<div class="sort-field-drag-handle" cdkDragHandle>
55-
<i class="pi pi-bars"></i>
56-
</div>
57-
<span class="sort-field-rank">{{ i + 1 }}.</span>
58-
<span class="sort-field-label">{{ getSortFieldLabel(f) }}</span>
59-
<button
60-
type="button"
61-
class="remove-sort-field-btn"
62-
(click)="removeSortField(i)"
63-
[disabled]="visibleSortFields.length <= minSortFields"
64-
[pTooltip]="t('remove')"
65-
tooltipPosition="top">
66-
<i class="pi pi-times"></i>
67-
</button>
68-
</div>
69-
}
70-
</div>
71-
<div class="sort-field-actions-row">
72-
@if (availableSortFieldsToAdd.length > 0 && visibleSortFields.length < maxSortFields) {
73-
<p-select
74-
size="small"
75-
[options]="availableSortFieldsToAdd"
76-
[(ngModel)]="selectedAddSortField"
77-
optionLabel="label"
78-
optionValue="value"
79-
[placeholder]="t('addSortField')"
80-
[style]="{ width: '200px' }"
81-
appendTo="body"
82-
(onChange)="addSortField()">
83-
</p-select>
84-
}
85-
<button
86-
type="button"
87-
class="reset-sort-fields-btn"
88-
(click)="resetSortFieldsToDefaults()"
89-
[pTooltip]="t('resetToDefaults')"
90-
tooltipPosition="top">
91-
<i class="pi pi-refresh"></i>
92-
</button>
93-
</div>
35+
<div class="format-overlay-editor">
36+
<p-toggleswitch [(ngModel)]="overlayBookType"></p-toggleswitch>
37+
<span class="setting-label">{{ t('formatOverlay') }}</span>
9438
</div>
9539
</div>
9640

@@ -146,15 +90,8 @@ <h3 class="section-title">
14690
icon="pi pi-sort"
14791
size="small"
14892
[outlined]="true"
149-
(onClick)="overrideSortPop.toggle($event)">
93+
(onClick)="editOverrideSort(rowIndex)">
15094
</p-button>
151-
<p-popover #overrideSortPop [dismissable]="true" appendTo="body">
152-
<app-multi-sort-popover
153-
[sortCriteria]="override.sortCriteriaAsOptions"
154-
[availableSortOptions]="allSortAsOptions"
155-
(criteriaChange)="onOverrideSortCriteriaChange(rowIndex, $event)">
156-
</app-multi-sort-popover>
157-
</p-popover>
15895
</td>
15996
<td>
16097
<p-select size="small" [options]="viewModeOptions" [(ngModel)]="override.view"

frontend/src/app/features/settings/view-preferences-parent/view-preferences/view-preferences.component.scss

Lines changed: 3 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -73,148 +73,9 @@
7373
color: var(--text-color);
7474
}
7575

76-
// Visible sort fields editor styles
77-
.sort-field-count {
78-
font-weight: 500;
79-
color: var(--p-primary-color);
80-
}
81-
82-
.sort-field-order-editor {
83-
margin-top: 0.6563rem;
84-
}
85-
86-
.sort-field-order-list {
87-
display: flex;
88-
flex-direction: column;
89-
gap: 0.4375rem;
90-
min-height: 40px;
91-
max-height: 320px;
92-
max-width: 350px;
93-
overflow-y: auto;
94-
margin-bottom: 0.6563rem;
95-
}
96-
97-
.sort-field-order-row {
98-
display: flex;
99-
align-items: center;
100-
gap: 0.4375rem;
101-
padding: 0.4375rem 0.6563rem;
102-
background-color: var(--overlay-background);
103-
border: 1px solid var(--border-color);
104-
border-radius: 6px;
105-
cursor: move;
106-
transition: background-color 0.15s ease, box-shadow 0.15s ease;
107-
108-
&:hover {
109-
background-color: var(--ground-background);
110-
}
111-
}
112-
113-
.cdk-drag-preview {
114-
display: flex;
115-
align-items: center;
116-
gap: 0.4375rem;
117-
padding: 0.3063rem 0.6563rem;
118-
background-color: var(--card-background);
119-
border: 1px solid var(--primary-color);
120-
border-radius: 6px;
121-
box-shadow: 0 5px 15px rgb(0 0 0 / 25%);
122-
}
123-
124-
.cdk-drag-placeholder {
125-
opacity: 0.3;
126-
}
127-
128-
.cdk-drag-animating {
129-
transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
130-
}
131-
132-
.sort-field-order-list.cdk-drop-list-dragging .sort-field-order-row:not(.cdk-drag-placeholder) {
133-
transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
134-
}
135-
136-
.sort-field-drag-handle {
76+
.format-overlay-editor {
13777
display: flex;
13878
align-items: center;
139-
justify-content: center;
140-
color: var(--text-secondary-color);
141-
cursor: grab;
142-
143-
&:active {
144-
cursor: grabbing;
145-
}
146-
147-
i {
148-
font-size: 0.7438rem;
149-
}
150-
}
151-
152-
.sort-field-rank {
153-
font-weight: 600;
154-
color: var(--primary-color);
155-
min-width: 1.5313rem;
156-
}
157-
158-
.sort-field-label {
159-
flex: 1;
160-
font-size: var(--app-text-sm);
161-
color: var(--text-color);
162-
}
163-
164-
.remove-sort-field-btn {
165-
display: flex;
166-
align-items: center;
167-
justify-content: center;
168-
width: 1.5313rem;
169-
height: 1.5313rem;
170-
padding: 0;
171-
border: none;
172-
border-radius: 4px;
173-
background-color: transparent;
174-
color: var(--p-red-500);
175-
cursor: pointer;
176-
transition: background-color 0.15s ease;
177-
178-
i {
179-
font-size: 0.7438rem;
180-
}
181-
182-
&:hover:not(:disabled) {
183-
background-color: var(--ground-background);
184-
}
185-
186-
&:disabled {
187-
opacity: 0.4;
188-
cursor: not-allowed;
189-
}
190-
}
191-
192-
.sort-field-actions-row {
193-
display: flex;
194-
align-items: center;
195-
gap: 0.4375rem;
196-
}
197-
198-
.reset-sort-fields-btn {
199-
display: flex;
200-
align-items: center;
201-
justify-content: center;
202-
width: 1.5313rem;
203-
height: 1.5313rem;
204-
padding: 0;
205-
border: none;
206-
border-radius: 4px;
207-
background-color: transparent;
208-
color: var(--text-secondary-color);
209-
cursor: pointer;
210-
transition: background-color 0.15s ease, color 0.15s ease;
211-
212-
i {
213-
font-size: 0.7438rem;
214-
}
215-
216-
&:hover {
217-
background-color: var(--ground-background);
218-
color: var(--primary-color);
219-
}
79+
gap: 0.6563rem;
80+
margin-top: 0.875rem;
22081
}

0 commit comments

Comments
 (0)