Redesign sidebar / header and other misc. improvements (#24)

* Remove 1920px max width

* Fix position of list controls menu

* Match size and color of search input

* Adjust library header sizing

* Move app menu to sidebar

* Increase row buffer on play queue list

* Fix query builder styles

* Fix playerbar slider track bg

* Adjust titlebar styles

* Fix invalid modal prop

* Various adjustments to detail pages

* Fix sidebar height calculation

* Fix list null indicators, add filter indicator

* Adjust playqueue styles

* Fix jellyfin releaseYear normalization

* Suppress browser context menu on ag-grid

* Add radius to drawer queue -- normalize layout

* Add modal styles to provider theme

* Fix playlist song list pagination

* Add disc number to albums with more than one disc

* Fix query builder boolean values

* Adjust input placeholder color

* Properly handle rating/favorite from context menu on table

* Conform dropdown menu styles to context menu

* Increase sort type select width

* Fix drawer queue radius

* Change primary color

* Prevent volume wheel from invalid values

* Add icons to query builder dropdowns

* Update notification styles

* Update scrollbar thumb styles

* Remove "add to playlist" on smart playlists

* Fix "add to playlist" from context menu
This commit is contained in:
Jeff 2023-02-07 22:47:23 -08:00 committed by GitHub
parent d2c0d4c11f
commit 9f2e873366
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
80 changed files with 1427 additions and 1101 deletions

View file

@ -1,4 +1,5 @@
import { nanoid } from 'nanoid/non-secure';
import { NDSongQueryFields } from '/@/renderer/api/navidrome.types';
import { QueryBuilderGroup } from '/@/renderer/types';
export const parseQueryBuilderChildren = (groups: QueryBuilderGroup[], data: any[]) => {
@ -53,15 +54,24 @@ export const convertQueryGroupToNDQuery = (filter: QueryBuilderGroup) => {
for (const rule of filter.rules) {
if (rule.field && rule.operator) {
const [table] = rule.field.split('.');
const [field] = rule.field.split('.');
const operator = rule.operator;
const value = rule.value;
let value = rule.value;
switch (table) {
const booleanFields = NDSongQueryFields.filter(
(queryField) => queryField.type === 'boolean',
).map((field) => field.value);
// Convert string values to boolean
if (booleanFields.includes(field)) {
value = value === 'true';
}
switch (field) {
default:
rootQuery[rootQueryType].push({
[operator]: {
[table]: value,
[field]: value,
},
});
break;
@ -94,7 +104,16 @@ export const convertNDQueryToQueryGroup = (query: Record<string, any>) => {
} else {
const operator = Object.keys(rule)[0];
const field = Object.keys(rule[operator])[0];
const value = rule[operator][field];
let value = rule[operator][field];
const booleanFields = NDSongQueryFields.filter(
(queryField) => queryField.type === 'boolean',
).map((field) => field.value);
// Convert boolean values to string
if (booleanFields.includes(field)) {
value = value.toString();
}
rootGroup.rules.push({
field,