Skip to content

Commit e94713c

Browse files
Use new DateFilterV2 for Advanced Visibility and Archival workflow listing (#917)
* Use DateFilterV2 for Advanced Visibility and Archival workflow listing * Pre-compute the absolute dates in a memo, allowing a fresh list to be fetched on rerenders without needing a hard page reload * Create new DomainWorkflowsAdvanced component that's just a wrapper for DomainWorkflowsHeader/Table * Remove Archival start days config
1 parent 6e2ae56 commit e94713c

25 files changed

+299
-119
lines changed

src/views/domain-page/__fixtures__/domain-page-query-params.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ export const mockDomainPageQueryParamsValues = {
55
inputType: 'search',
66
search: '',
77
statuses: undefined,
8-
timeRangeStart: undefined,
9-
timeRangeEnd: new Date('2024-12-17T03:24:00'),
8+
timeRangeStart: 'now',
9+
timeRangeEnd: 'now-7d',
1010
sortColumn: 'startTime',
1111
sortOrder: 'DESC',
1212
query: '',

src/views/domain-page/config/domain-page-query-params.config.ts

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,21 @@ import {
44
type PageQueryParamMultiValue,
55
type PageQueryParam,
66
} from '@/hooks/use-page-query-params/use-page-query-params.types';
7-
import dayjs from '@/utils/datetime/dayjs';
8-
import parseDateQueryParam from '@/utils/datetime/parse-date-query-param';
97
import { type SortOrder } from '@/utils/sort-by';
10-
import DOMAIN_WORKFLOWS_ARCHIVAL_START_DAYS_CONFIG from '@/views/domain-workflows-archival/config/domain-workflows-archival-start-days.config';
118
import { type WorkflowStatusClosed } from '@/views/domain-workflows-archival/domain-workflows-archival-header/domain-workflows-archival-header.types';
129
import { type WorkflowStatusBasicVisibility } from '@/views/domain-workflows-basic/domain-workflows-basic-filters/domain-workflows-basic-filters.types';
1310
import isWorkflowStatusBasicVisibility from '@/views/domain-workflows-basic/domain-workflows-basic-filters/helpers/is-workflow-status-basic-visibility';
1411
import isWorkflowStatus from '@/views/shared/workflow-status-tag/helpers/is-workflow-status';
1512
import { type WorkflowStatus } from '@/views/shared/workflow-status-tag/workflow-status-tag.types';
1613
import { type WorkflowsHeaderInputType } from '@/views/shared/workflows-header/workflows-header.types';
1714

18-
const now = dayjs();
19-
2015
const domainPageQueryParamsConfig: [
2116
PageQueryParam<'inputType', WorkflowsHeaderInputType>,
2217
// Search input
2318
PageQueryParam<'search', string>,
2419
PageQueryParamMultiValue<'statuses', Array<WorkflowStatus> | undefined>,
25-
PageQueryParam<'timeRangeStart', Date | undefined>,
26-
PageQueryParam<'timeRangeEnd', Date>,
20+
PageQueryParam<'timeRangeStart', DateFilterValue>,
21+
PageQueryParam<'timeRangeEnd', DateFilterValue>,
2722
PageQueryParam<'sortColumn', string>,
2823
PageQueryParam<'sortOrder', SortOrder>,
2924
// Query input
@@ -41,8 +36,8 @@ const domainPageQueryParamsConfig: [
4136
'statusesArchival',
4237
Array<WorkflowStatusClosed> | undefined
4338
>,
44-
PageQueryParam<'timeRangeStartArchival', Date>,
45-
PageQueryParam<'timeRangeEndArchival', Date>,
39+
PageQueryParam<'timeRangeStartArchival', DateFilterValue>,
40+
PageQueryParam<'timeRangeEndArchival', DateFilterValue>,
4641
PageQueryParam<'sortColumnArchival', string>,
4742
PageQueryParam<'sortOrderArchival', SortOrder>,
4843
PageQueryParam<'queryArchival', string>,
@@ -67,13 +62,14 @@ const domainPageQueryParamsConfig: [
6762
{
6863
key: 'timeRangeStart',
6964
queryParamKey: 'start',
70-
parseValue: parseDateQueryParam,
65+
defaultValue: 'now-7d',
66+
parseValue: (v) => parseDateFilterValue(v, 'now-7d'),
7167
},
7268
{
7369
key: 'timeRangeEnd',
7470
queryParamKey: 'end',
75-
defaultValue: now.toDate(),
76-
parseValue: (v) => parseDateQueryParam(v) ?? now.toDate(),
71+
defaultValue: 'now',
72+
parseValue: (v) => parseDateFilterValue(v, 'now'),
7773
},
7874
{
7975
key: 'sortColumn',
@@ -143,20 +139,14 @@ const domainPageQueryParamsConfig: [
143139
{
144140
key: 'timeRangeStartArchival',
145141
queryParamKey: 'astart',
146-
defaultValue: now
147-
.subtract(DOMAIN_WORKFLOWS_ARCHIVAL_START_DAYS_CONFIG, 'days')
148-
.toDate(),
149-
parseValue: (v) =>
150-
parseDateQueryParam(v) ??
151-
now
152-
.subtract(DOMAIN_WORKFLOWS_ARCHIVAL_START_DAYS_CONFIG, 'days')
153-
.toDate(),
142+
defaultValue: 'now-7d',
143+
parseValue: (v) => parseDateFilterValue(v, 'now-7d'),
154144
},
155145
{
156146
key: 'timeRangeEndArchival',
157147
queryParamKey: 'aend',
158-
defaultValue: now.toDate(),
159-
parseValue: (v) => parseDateQueryParam(v) ?? now.toDate(),
148+
defaultValue: 'now',
149+
parseValue: (v) => parseDateFilterValue(v, 'now'),
160150
},
161151
{
162152
key: 'sortColumnArchival',

src/views/domain-workflows-archival/__tests__/domain-workflows-archival.test.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { render, screen, act } from '@/test-utils/rtl';
66

77
import { type DescribeDomainResponse } from '@/route-handlers/describe-domain/describe-domain.types';
88
import { mockDomainDescription } from '@/views/domain-page/__fixtures__/domain-description';
9+
import { mockDomainPageQueryParamsValues } from '@/views/domain-page/__fixtures__/domain-page-query-params';
910

1011
import DomainWorkflowsArchival from '../domain-workflows-archival';
1112

@@ -24,6 +25,11 @@ jest.mock(
2425
() => jest.fn(() => <div>Mock archival table</div>)
2526
);
2627

28+
const mockSetQueryParams = jest.fn();
29+
jest.mock('@/hooks/use-page-query-params/use-page-query-params', () =>
30+
jest.fn(() => [mockDomainPageQueryParamsValues, mockSetQueryParams])
31+
);
32+
2733
describe(DomainWorkflowsArchival.name, () => {
2834
it('renders without error and shows archival disabled page', async () => {
2935
await setup({});

src/views/domain-workflows-archival/config/domain-workflows-archival-filters.config.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ import { createElement } from 'react';
22

33
import { omit } from 'lodash';
44

5-
import DateFilter from '@/components/date-filter/date-filter';
5+
import DateFilterV2 from '@/components/date-filter-v2/date-filter-v2';
6+
import { type DateFilterValue } from '@/components/date-filter-v2/date-filter-v2.types';
7+
import stringifyDateFilterValue from '@/components/date-filter-v2/helpers/stringify-date-filter-value';
68
import ListFilterMulti from '@/components/list-filter-multi/list-filter-multi';
79
import { type PageFilterConfig } from '@/components/page-filters/page-filters.types';
810
import type domainPageQueryParamsConfig from '@/views/domain-page/config/domain-page-query-params.config';
@@ -18,8 +20,8 @@ const domainWorkflowsArchivalFiltersConfig: [
1820
PageFilterConfig<
1921
typeof domainPageQueryParamsConfig,
2022
{
21-
timeRangeStartArchival: Date | undefined;
22-
timeRangeEndArchival: Date | undefined;
23+
timeRangeStartArchival: DateFilterValue | undefined;
24+
timeRangeEndArchival: DateFilterValue | undefined;
2325
}
2426
>,
2527
] = [
@@ -43,12 +45,16 @@ const domainWorkflowsArchivalFiltersConfig: [
4345
id: 'dates',
4446
getValue: (v) => v,
4547
formatValue: (v) => ({
46-
timeRangeStartArchival: v.timeRangeStartArchival?.toISOString(),
47-
timeRangeEndArchival: v.timeRangeEndArchival?.toISOString(),
48+
timeRangeStartArchival: v.timeRangeStartArchival
49+
? stringifyDateFilterValue(v.timeRangeStartArchival)
50+
: undefined,
51+
timeRangeEndArchival: v.timeRangeEndArchival
52+
? stringifyDateFilterValue(v.timeRangeEndArchival)
53+
: undefined,
4854
}),
4955
component: ({ value, setValue }) =>
50-
createElement(DateFilter, {
51-
label: 'Dates',
56+
createElement(DateFilterV2, {
57+
label: 'Time range',
5258
placeholder: 'Select time range',
5359
dates: {
5460
start: value.timeRangeStartArchival,
@@ -59,7 +65,6 @@ const domainWorkflowsArchivalFiltersConfig: [
5965
timeRangeStartArchival: start,
6066
timeRangeEndArchival: end,
6167
}),
62-
clearable: false,
6368
}),
6469
},
6570
] as const;

src/views/domain-workflows-archival/config/domain-workflows-archival-start-days.config.ts

Lines changed: 0 additions & 3 deletions
This file was deleted.

src/views/domain-workflows-archival/domain-workflows-archival-header/__tests__/domain-workflows-archival-header.test.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ describe(DomainWorkflowsArchivalHeader.name, () => {
2727
<DomainWorkflowsArchivalHeader
2828
domain="mock_domain"
2929
cluster="mock_cluster"
30+
timeRangeStart="mock-time-range-start"
31+
timeRangeEnd="mock-time-range-end"
3032
/>
3133
);
3234

src/views/domain-workflows-archival/domain-workflows-archival-header/domain-workflows-archival-header.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import { type Props } from './domain-workflows-archival-header.types';
1313
export default function DomainWorkflowsArchivalHeader({
1414
domain,
1515
cluster,
16+
timeRangeStart,
17+
timeRangeEnd,
1618
}: Props) {
1719
const [queryParams] = usePageQueryParams(domainPageQueryParamsConfig);
1820

@@ -24,8 +26,8 @@ export default function DomainWorkflowsArchivalHeader({
2426
inputType: queryParams.inputTypeArchival,
2527
search: queryParams.searchArchival,
2628
statuses: queryParams.statusesArchival,
27-
timeRangeStart: queryParams.timeRangeStartArchival,
28-
timeRangeEnd: queryParams.timeRangeEndArchival,
29+
timeRangeStart,
30+
timeRangeEnd,
2931
sortColumn: queryParams.sortColumnArchival,
3032
sortOrder: queryParams.sortOrderArchival,
3133
query: queryParams.queryArchival,

src/views/domain-workflows-archival/domain-workflows-archival-header/domain-workflows-archival-header.types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { type WorkflowStatus } from '@/views/shared/workflow-status-tag/workflow
33
export type Props = {
44
domain: string;
55
cluster: string;
6+
timeRangeStart: string;
7+
timeRangeEnd: string;
68
};
79

810
export type WorkflowStatusClosed = Exclude<

src/views/domain-workflows-archival/domain-workflows-archival-table/__tests__/domain-workflows-archival-table.test.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ function setup({
131131
<DomainWorkflowsArchivalTable
132132
domain="mock-domain"
133133
cluster="mock-cluster"
134+
timeRangeStart="mock-time-range-start"
135+
timeRangeEnd="mock-time-range-end"
134136
/>,
135137
{
136138
endpointsMocks: [

src/views/domain-workflows-archival/domain-workflows-archival-table/domain-workflows-archival-table.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ import getArchivalErrorPanelProps from './helpers/get-archival-error-panel-props
1818
export default function DomainWorkflowsArchivalTable({
1919
domain,
2020
cluster,
21+
timeRangeStart,
22+
timeRangeEnd,
2123
}: Props) {
2224
const [queryParams, setQueryParams] = usePageQueryParams(
2325
domainPageQueryParamsConfig
@@ -39,8 +41,8 @@ export default function DomainWorkflowsArchivalTable({
3941
inputType: queryParams.inputTypeArchival,
4042
search: queryParams.searchArchival,
4143
statuses: queryParams.statusesArchival,
42-
timeRangeStart: queryParams.timeRangeStartArchival,
43-
timeRangeEnd: queryParams.timeRangeEndArchival,
44+
timeRangeStart,
45+
timeRangeEnd,
4446
sortColumn: queryParams.sortColumnArchival,
4547
sortOrder: queryParams.sortOrderArchival,
4648
query: queryParams.queryArchival,

0 commit comments

Comments
 (0)