add date picker operators to smart playlist

This commit is contained in:
jeffvli
2025-11-29 16:31:10 -08:00
parent 6094a520e2
commit a6945bc1f3
4 changed files with 186 additions and 8 deletions
+34 -3
View File
@@ -19,9 +19,18 @@ export const parseQueryBuilderChildren = (groups: QueryBuilderGroup[], data: any
for (const rule of group.rules) {
if (rule.field && rule.operator) {
const [table, field] = rule.field.split('.');
const operator = rule.operator;
let operator = rule.operator;
const value = field !== 'releaseDate' ? rule.value : new Date(rule.value);
// Transform date picker operators back to original operators
if (operator === 'beforeDate') {
operator = 'before';
} else if (operator === 'afterDate') {
operator = 'after';
} else if (operator === 'inTheRangeDate') {
operator = 'inTheRange';
}
switch (table) {
default:
query[rootType].push({
@@ -56,7 +65,7 @@ export const convertQueryGroupToNDQuery = (filter: QueryBuilderGroup) => {
for (const rule of filter.rules) {
if (rule.field && rule.operator) {
const [field] = rule.field.split('.');
const operator = rule.operator;
let operator = rule.operator;
let value = rule.value;
const booleanFields = NDSongQueryFields.filter(
@@ -68,6 +77,14 @@ export const convertQueryGroupToNDQuery = (filter: QueryBuilderGroup) => {
value = value === 'true';
}
if (operator === 'beforeDate') {
operator = 'before';
} else if (operator === 'afterDate') {
operator = 'after';
} else if (operator === 'inTheRangeDate') {
operator = 'inTheRange';
}
switch (field) {
default:
rootQuery[rootQueryType].push({
@@ -103,7 +120,7 @@ export const convertNDQueryToQueryGroup = (query: Record<string, any>) => {
const group = convertNDQueryToQueryGroup(rule);
rootGroup.group.push(group);
} else {
const operator = Object.keys(rule)[0];
let operator = Object.keys(rule)[0];
const field = Object.keys(rule[operator])[0];
let value = rule[operator][field];
@@ -116,6 +133,20 @@ export const convertNDQueryToQueryGroup = (query: Record<string, any>) => {
value = value.toString();
}
const dateFields = NDSongQueryFields.filter(
(queryField) => queryField.type === 'date' || queryField.type === 'dateRange',
).map((field) => field.value);
if (dateFields.includes(field)) {
if (operator === 'before') {
operator = 'beforeDate';
} else if (operator === 'after') {
operator = 'afterDate';
} else if (operator === 'inTheRange') {
operator = 'inTheRangeDate';
}
}
rootGroup.rules.push({
field,
operator,