fix(filters): make sure the same filter attribute is transformed in all instances

Resolves https://community.vikunja.io/t/filter-setting-s/1791/13
This commit is contained in:
kolaente 2024-04-06 10:53:19 +02:00
parent 30c1a46ed4
commit 1ebb551864
Signed by: konrad
GPG Key ID: F40E70337AB24C9B
2 changed files with 23 additions and 3 deletions

View File

@ -107,7 +107,7 @@ describe('Filter Transformation', () => {
expect(transformed).toBe('project = 1')
})
it('should resolve project and labels independently', () => {
const transformed = transformFilterStringForApi(
'project = lorem && labels = ipsum',
@ -117,6 +117,16 @@ describe('Filter Transformation', () => {
expect(transformed).toBe('project = 1 && labels = 2')
})
it('should transform the same attribute multiple times', () => {
const transformed = transformFilterStringForApi(
'dueDate = now/d || dueDate > now/w+1w',
nullTitleToIdResolver,
nullTitleToIdResolver,
)
expect(transformed).toBe('due_date = now/d || due_date > now/w+1w')
})
})
describe('To API', () => {
@ -198,5 +208,15 @@ describe('Filter Transformation', () => {
expect(transformed).toBe('project in lorem, ipsum')
})
it('should transform the same attribute multiple times', () => {
const transformed = transformFilterStringFromApi(
'due_date = now/d || due_date > now/w+1w',
nullIdToTitleResolver,
nullIdToTitleResolver,
)
expect(transformed).toBe('dueDate = now/d || dueDate > now/w+1w')
})
})
})

View File

@ -127,7 +127,7 @@ export function transformFilterStringForApi(
// Transform all attributes to snake case
AVAILABLE_FILTER_FIELDS.forEach(f => {
filter = filter.replace(f, snakeCase(f))
filter = filter.replaceAll(f, snakeCase(f))
})
return filter
@ -145,7 +145,7 @@ export function transformFilterStringFromApi(
// Transform all attributes from snake case
AVAILABLE_FILTER_FIELDS.forEach(f => {
filter = filter.replace(snakeCase(f), f)
filter = filter.replaceAll(snakeCase(f), f)
})
// Transform labels to their titles