Skip to content

Commit ec2c9ba

Browse files
committed
Fix query error in WfoSubscriptionNoteEdit by using existing data
the component was re-fetching data without query variables which resulted in query errors. - change WfoSubscriptionNoteEdit to use existing data - clean WfoSubscriptionsList and move the subscription list fetch above the table columns so the list can be used in WfoSubscriptionNoteEdit. - change subscriptionResultMappers to work with response or undefined and returns empty list when undefined.
1 parent 9675baf commit ec2c9ba

File tree

3 files changed

+69
-67
lines changed

3 files changed

+69
-67
lines changed

packages/orchestrator-ui-components/src/components/WfoInlineNoteEdit/WfoSubscriptionNoteEdit.tsx

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,32 @@
11
import type { FC } from 'react';
22
import React from 'react';
33

4-
import { ApiResult, SubscriptionListResponse, UseQuery } from '@/rtk';
54
import { useStartProcessMutation } from '@/rtk/endpoints/forms';
65
import { useUpdateSubscriptionNoteOptimisticMutation } from '@/rtk/endpoints/subscriptionListMutation';
76
import { Subscription } from '@/types';
87
import { INVISIBLE_CHARACTER } from '@/utils';
98

109
import { WfoInlineEdit } from '../WfoInlineEdit';
10+
import { SubscriptionListItem } from '../WfoSubscriptionsList';
1111

1212
interface WfoSubscriptionNoteEditProps {
1313
subscriptionId: Subscription['subscriptionId'];
1414
onlyShowOnHover?: boolean;
1515
queryVariables: Record<string, unknown>;
16-
useQuery: UseQuery<SubscriptionListResponse, Subscription>;
16+
endpointName: string;
17+
data: SubscriptionListItem[];
1718
}
1819

1920
export const WfoSubscriptionNoteEdit: FC<WfoSubscriptionNoteEditProps> = ({
2021
subscriptionId,
2122
onlyShowOnHover = false,
2223
queryVariables,
23-
useQuery,
24+
endpointName,
25+
data,
2426
}) => {
25-
const { selectedItem } = useQuery(queryVariables, {
26-
selectFromResult: (result: ApiResult<SubscriptionListResponse>) => ({
27-
selectedItem: result?.data?.subscriptions?.find(
28-
(sub) => sub.subscriptionId === subscriptionId,
29-
),
30-
}),
31-
});
32-
const endpointName = useQuery().endpointName;
27+
const selectedItem = data.find(
28+
(sub) => sub.subscriptionId === subscriptionId,
29+
);
3330
const [startProcess] = useStartProcessMutation();
3431
const [updateSub] = useUpdateSubscriptionNoteOptimisticMutation();
3532

@@ -44,7 +41,7 @@ export const WfoSubscriptionNoteEdit: FC<WfoSubscriptionNoteEditProps> = ({
4441
});
4542

4643
updateSub({
47-
queryName: endpointName ?? '',
44+
queryName: endpointName,
4845
subscriptionId: subscriptionId,
4946
graphQlQueryVariables: queryVariables,
5047
note: note,

packages/orchestrator-ui-components/src/components/WfoSubscriptionsList/WfoSubscriptionsList.tsx

Lines changed: 55 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import { WfoAdvancedTableColumnConfig } from '@/components/WfoTable/WfoAdvancedT
2222
import { ColumnType } from '@/components/WfoTable/WfoTable';
2323
import { mapSortableAndFilterableValuesToTableColumnConfig } from '@/components/WfoTable/WfoTable/utils';
2424
import { DataDisplayParams, useShowToastMessage } from '@/hooks';
25-
import { UseQuery } from '@/rtk';
2625
import {
2726
SubscriptionListResponse,
2827
useGetSubscriptionListQuery,
@@ -78,6 +77,26 @@ export const WfoSubscriptionsList: FC<WfoSubscriptionsListProps> = ({
7877
const tError = useTranslations('errors');
7978
const { showToastMessage } = useShowToastMessage();
8079

80+
const { sortBy, queryString, pageIndex, pageSize } = dataDisplayParams;
81+
82+
const graphqlQueryVariables: GraphqlQueryVariables<SubscriptionListItem> = {
83+
first: pageSize,
84+
after: pageIndex * pageSize,
85+
sortBy,
86+
filterBy: alwaysOnFilters,
87+
query: queryString || undefined,
88+
};
89+
90+
const {
91+
data,
92+
isFetching,
93+
error,
94+
endpointName = '',
95+
} = useGetSubscriptionListQuery(graphqlQueryVariables);
96+
97+
const subscriptionList =
98+
mapGraphQlSubscriptionsResultToSubscriptionListItems(data);
99+
81100
const tableColumnConfig: WfoAdvancedTableColumnConfig<SubscriptionListItem> =
82101
{
83102
subscriptionId: {
@@ -155,15 +174,11 @@ export const WfoSubscriptionsList: FC<WfoSubscriptionsListProps> = ({
155174
renderData: (cellValue, row) => {
156175
return (
157176
<WfoSubscriptionNoteEdit
158-
queryVariables={graphqlQueryVariables}
159177
subscriptionId={row.subscriptionId}
160178
onlyShowOnHover={true}
161-
useQuery={
162-
useGetSubscriptionListQuery as UseQuery<
163-
SubscriptionListResponse,
164-
Subscription
165-
>
166-
}
179+
endpointName={endpointName}
180+
queryVariables={graphqlQueryVariables}
181+
data={subscriptionList}
167182
/>
168183
);
169184
},
@@ -182,19 +197,6 @@ export const WfoSubscriptionsList: FC<WfoSubscriptionsListProps> = ({
182197
},
183198
};
184199

185-
const { sortBy, queryString, pageIndex, pageSize } = dataDisplayParams;
186-
187-
const graphqlQueryVariables: GraphqlQueryVariables<SubscriptionListItem> = {
188-
first: pageSize,
189-
after: pageIndex * pageSize,
190-
sortBy,
191-
filterBy: alwaysOnFilters,
192-
query: queryString || undefined,
193-
};
194-
195-
const { data, isFetching, error } = useGetSubscriptionListQuery(
196-
graphqlQueryVariables,
197-
);
198200
const [getSubscriptionListTrigger, { isFetching: isFetchingCsv }] =
199201
useLazyGetSubscriptionListQuery();
200202
const getSubscriptionListForExport = () =>
@@ -217,54 +219,55 @@ export const WfoSubscriptionsList: FC<WfoSubscriptionsListProps> = ({
217219
};
218220
const { totalItems, sortFields, filterFields } = data?.pageInfo ?? {};
219221

222+
const pageChange =
223+
getPageIndexChangeHandler<SubscriptionListItem>(setDataDisplayParam);
224+
const pageSizeChange =
225+
getPageSizeChangeHandler<SubscriptionListItem>(setDataDisplayParam);
226+
const updateQuery =
227+
getQueryStringHandler<SubscriptionListItem>(setDataDisplayParam);
228+
const updateSorting =
229+
getDataSortHandler<SubscriptionListItem>(setDataDisplayParam);
230+
220231
const pagination: Pagination = {
221232
pageIndex: dataDisplayParams.pageIndex,
222233
pageSize: dataDisplayParams.pageSize,
223234
pageSizeOptions: DEFAULT_PAGE_SIZES,
224235
totalItemCount: totalItems ?? 0,
225-
onChangePage:
226-
getPageIndexChangeHandler<SubscriptionListItem>(
227-
setDataDisplayParam,
228-
),
229-
onChangeItemsPerPage:
230-
getPageSizeChangeHandler<SubscriptionListItem>(setDataDisplayParam),
236+
onChangePage: pageChange,
237+
onChangeItemsPerPage: pageSizeChange,
231238
};
232239

240+
const exportData = csvDownloadHandler(
241+
getSubscriptionListForExport,
242+
mapGraphQlSubscriptionsResultToSubscriptionListItems,
243+
mapGraphQlSubscriptionsResultToPageInfo,
244+
Object.keys(tableColumnConfig),
245+
getCsvFileNameWithDate('Subscriptions'),
246+
showToastMessage,
247+
tError,
248+
);
249+
250+
const mapTableConfig = mapSortableAndFilterableValuesToTableColumnConfig(
251+
tableColumnConfig,
252+
sortFields,
253+
filterFields,
254+
);
255+
233256
return (
234257
<WfoAdvancedTable
235258
queryString={dataDisplayParams.queryString}
236-
onUpdateQueryString={getQueryStringHandler<SubscriptionListItem>(
237-
setDataDisplayParam,
238-
)}
239-
data={
240-
data
241-
? mapGraphQlSubscriptionsResultToSubscriptionListItems(data)
242-
: []
243-
}
244-
tableColumnConfig={mapSortableAndFilterableValuesToTableColumnConfig(
245-
tableColumnConfig,
246-
sortFields,
247-
filterFields,
248-
)}
259+
onUpdateQueryString={updateQuery}
260+
data={subscriptionList}
261+
tableColumnConfig={mapTableConfig}
249262
defaultHiddenColumns={hiddenColumns}
250263
dataSorting={[dataSorting]}
251264
isLoading={isFetching}
252265
localStorageKey={SUBSCRIPTIONS_TABLE_LOCAL_STORAGE_KEY}
253266
detailModalTitle={'Details - Subscription'}
254267
pagination={pagination}
255268
error={mapRtkErrorToWfoError(error)}
256-
onUpdateDataSorting={getDataSortHandler<SubscriptionListItem>(
257-
setDataDisplayParam,
258-
)}
259-
onExportData={csvDownloadHandler(
260-
getSubscriptionListForExport,
261-
mapGraphQlSubscriptionsResultToSubscriptionListItems,
262-
mapGraphQlSubscriptionsResultToPageInfo,
263-
Object.keys(tableColumnConfig),
264-
getCsvFileNameWithDate('Subscriptions'),
265-
showToastMessage,
266-
tError,
267-
)}
269+
onUpdateDataSorting={updateSorting}
270+
onExportData={exportData}
268271
exportDataIsLoading={isFetchingCsv}
269272
/>
270273
);

packages/orchestrator-ui-components/src/components/WfoSubscriptionsList/subscriptionResultMappers.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@ export const mapGraphQlSubscriptionsResultToPageInfo = (
2020
) => graphqlResponse.pageInfo;
2121

2222
export const mapGraphQlSubscriptionsResultToSubscriptionListItems = (
23-
graphqlResponse: SubscriptionListResponse,
24-
): SubscriptionListItem[] =>
25-
graphqlResponse.subscriptions.map((subscription) => {
23+
graphqlResponse: SubscriptionListResponse | undefined,
24+
): SubscriptionListItem[] => {
25+
if (!graphqlResponse) return [];
26+
return graphqlResponse.subscriptions.map((subscription) => {
2627
const {
2728
description,
2829
insync,
@@ -55,3 +56,4 @@ export const mapGraphQlSubscriptionsResultToSubscriptionListItems = (
5556
metadata: Object.keys(metadata).length > 0 ? metadata : null,
5657
};
5758
});
59+
};

0 commit comments

Comments
 (0)