Skip to content

Commit 32289f8

Browse files
committed
refactor(frontend): refactor UpdateTargetsTabs
Refactored UpdateTargetsTabs to use one refetchable fragment for campaignTargets, instead of four Signed-off-by: ArnelaL <arnela.lisic@secomind.com>
1 parent 33ad94b commit 32289f8

3 files changed

Lines changed: 128 additions & 201 deletions

File tree

frontend/src/components/UpdateTargetsTable.tsx

Lines changed: 38 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,17 @@
1818
* SPDX-License-Identifier: Apache-2.0
1919
*/
2020

21+
import _ from "lodash";
22+
import { useMemo } from "react";
2123
import { defineMessages, FormattedDate, FormattedMessage } from "react-intl";
2224
import { graphql, useFragment } from "react-relay/hooks";
2325

2426
import type {
2527
OtaOperationStatus,
2628
OtaOperationStatusCode,
27-
UpdateTargetsTable_TargetsFragment$data,
28-
UpdateTargetsTable_TargetsFragment$key,
29-
} from "@/api/__generated__/UpdateTargetsTable_TargetsFragment.graphql";
29+
UpdateTargetsTable_CampaignTargetEdgeFragment$data,
30+
UpdateTargetsTable_CampaignTargetEdgeFragment$key,
31+
} from "@/api/__generated__/UpdateTargetsTable_CampaignTargetEdgeFragment.graphql";
3032

3133
import Icon from "@/components/Icon";
3234
import { createColumnHelper } from "@/components/Table";
@@ -36,19 +38,22 @@ import InfiniteTable from "./InfiniteTable";
3638
// We use graphql fields below in columns configuration
3739
/* eslint-disable relay/unused-fields */
3840
const CAMPAIGN_TARGETS_TABLE_FRAGMENT = graphql`
39-
fragment UpdateTargetsTable_TargetsFragment on CampaignTarget
40-
@relay(plural: true) {
41-
device {
42-
id
43-
name
44-
}
45-
retryCount
46-
latestAttempt
47-
completionTimestamp
48-
otaOperation {
49-
status
50-
statusProgress
51-
statusCode
41+
fragment UpdateTargetsTable_CampaignTargetEdgeFragment on CampaignTargetConnection {
42+
edges {
43+
node {
44+
device {
45+
id
46+
name
47+
}
48+
retryCount
49+
latestAttempt
50+
completionTimestamp
51+
otaOperation {
52+
status
53+
statusProgress
54+
statusCode
55+
}
56+
}
5257
}
5358
}
5459
`;
@@ -159,7 +164,10 @@ const operationStatusCodeMessages = defineMessages<OtaOperationStatusCode>({
159164
},
160165
});
161166

162-
type TableRecord = UpdateTargetsTable_TargetsFragment$data[number];
167+
type TableRecord = NonNullable<
168+
NonNullable<UpdateTargetsTable_CampaignTargetEdgeFragment$data>["edges"]
169+
>[number]["node"];
170+
163171
const columnIds = [
164172
"deviceName",
165173
"otaOperationStatus",
@@ -312,32 +320,34 @@ const columns = [
312320
type Props = {
313321
className?: string;
314322
hiddenColumns?: ColumnId[];
315-
campaignTargetsRef: UpdateTargetsTable_TargetsFragment$key;
316-
isLoadingNext: boolean;
317-
hasNext: boolean;
318-
loadNextCampaignTargets: () => void;
323+
campaignTargetsRef: UpdateTargetsTable_CampaignTargetEdgeFragment$key;
324+
loading?: boolean;
325+
onLoadMore?: () => void;
319326
};
320327

321328
const UpdateTargetsTable = ({
322329
className,
323330
campaignTargetsRef,
324331
hiddenColumns = [],
325-
isLoadingNext,
326-
hasNext,
327-
loadNextCampaignTargets,
332+
loading = false,
333+
onLoadMore,
328334
}: Props) => {
329-
const updateTargets = useFragment(
335+
const campaignTargetsFragment = useFragment(
330336
CAMPAIGN_TARGETS_TABLE_FRAGMENT,
331337
campaignTargetsRef,
332338
);
333339

340+
const campaignTargets = useMemo<TableRecord[]>(() => {
341+
return _.compact(campaignTargetsFragment?.edges?.map((e) => e?.node)) ?? [];
342+
}, [campaignTargetsFragment]);
343+
334344
return (
335345
<InfiniteTable
336346
className={className}
337347
columns={columns}
338-
data={[...updateTargets]}
339-
loading={isLoadingNext}
340-
onLoadMore={hasNext ? loadNextCampaignTargets : undefined}
348+
data={campaignTargets}
349+
loading={loading}
350+
onLoadMore={onLoadMore}
341351
hiddenColumns={hiddenColumns}
342352
hideSearch
343353
/>

0 commit comments

Comments
 (0)