Skip to content

Commit 956e152

Browse files
authored
Remove quotes from date value and add tests (#2819)
1 parent 11eec38 commit 956e152

3 files changed

Lines changed: 53 additions & 20 deletions

File tree

src/lib/components/search-attribute-filter/filter-list.svelte

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,11 @@
1111
import { translate } from '$lib/i18n/translate';
1212
import type { SearchAttributeFilter } from '$lib/models/search-attribute-filters';
1313
import { isWorkflowStatusType } from '$lib/models/workflow-status';
14-
import {
15-
relativeTime,
16-
timeFormat,
17-
type TimeFormat,
18-
} from '$lib/stores/time-format';
14+
import { relativeTime, timeFormat } from '$lib/stores/time-format';
1915
import { formatDate } from '$lib/utilities/format-date';
2016
import { isNullConditional, isStartsWith } from '$lib/utilities/is';
2117
import {
18+
formatDateTimeRange,
2219
isDateTimeFilter,
2320
isTextFilter,
2421
} from '$lib/utilities/query/search-attribute-filter';
@@ -70,21 +67,6 @@
7067
return translate('common.after').toLowerCase();
7168
return conditional;
7269
};
73-
74-
const formatDateTimeRange = (
75-
value: string,
76-
format: TimeFormat,
77-
relative: boolean,
78-
) => {
79-
const [conditon, start, operator, end] = value.split(' ');
80-
return `${conditon.toLowerCase()} ${formatDate(start, format, {
81-
relative,
82-
abbrFormat: true,
83-
})} ${operator.toLowerCase()} ${formatDate(end, format, {
84-
relative,
85-
abbrFormat: true,
86-
})}`;
87-
};
8870
</script>
8971

9072
<div class="flex flex-wrap gap-2" class:pt-2={visibleFilters.length}>

src/lib/utilities/query/search-attribute-filter.test.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { describe, expect, it } from 'vitest';
55
import type { SearchAttributes } from '$lib/types/workflows';
66

77
import {
8+
formatDateTimeRange,
89
formatListFilterValue,
910
isBooleanFilter,
1011
isDateTimeFilter,
@@ -174,3 +175,32 @@ describe('formatListFilterValue', () => {
174175
expect(formatListFilterValue('example')).toStrictEqual(['example']);
175176
});
176177
});
178+
179+
describe('formatDateTimeRange', () => {
180+
it('should format a date range between two dates', () => {
181+
expect(
182+
formatDateTimeRange(
183+
'BETWEEN "2025-07-17T00:00:00.000Z" AND "2025-07-17T00:00:00.000Z"',
184+
'UTC',
185+
false,
186+
),
187+
).toStrictEqual('between 2025-07-17 00:00 AM and 2025-07-17 00:00 AM');
188+
expect(
189+
formatDateTimeRange(
190+
'BETWEEN 2025-07-17T00:00:00.000Z AND 2025-07-17T00:00:00.000Z',
191+
'UTC',
192+
false,
193+
),
194+
).toStrictEqual('between 2025-07-17 00:00 AM and 2025-07-17 00:00 AM');
195+
});
196+
197+
it('should format a date range between two dates with a different time format', () => {
198+
expect(
199+
formatDateTimeRange(
200+
'BETWEEN "2025-07-17T00:00:00.000Z" AND "2025-07-17T00:00:00.000Z"',
201+
'Pacific Daylight Time',
202+
false,
203+
),
204+
).toStrictEqual('between 2025-07-16 17:00 PM and 2025-07-16 17:00 PM');
205+
});
206+
});

src/lib/utilities/query/search-attribute-filter.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ import { get } from 'svelte/store';
22

33
import type { SearchAttributeFilter } from '$lib/models/search-attribute-filters';
44
import { searchAttributes } from '$lib/stores/search-attributes';
5+
import type { TimeFormat } from '$lib/stores/time-format';
56
import { SEARCH_ATTRIBUTE_TYPE } from '$lib/types/workflows';
7+
import { formatDate } from '$lib/utilities/format-date';
68

79
export function isStatusFilter({ attribute }: SearchAttributeFilter) {
810
return attribute === 'ExecutionStatus';
@@ -97,3 +99,22 @@ export function formatListFilterValue(value: string): string[] {
9799
if (value) return [value];
98100
return [];
99101
}
102+
103+
export const formatDateTimeRange = (
104+
value: string,
105+
format: TimeFormat,
106+
relative: boolean,
107+
) => {
108+
const [conditon, start, operator, end] = value.split(' ');
109+
return `${conditon.toLowerCase()} ${formatDate(
110+
start.replace(/"/g, ''),
111+
format,
112+
{
113+
relative,
114+
abbrFormat: true,
115+
},
116+
)} ${operator.toLowerCase()} ${formatDate(end.replace(/"/g, ''), format, {
117+
relative,
118+
abbrFormat: true,
119+
})}`;
120+
};

0 commit comments

Comments
 (0)