Skip to content

Commit 33ad94b

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

4 files changed

Lines changed: 142 additions & 211 deletions

File tree

frontend/src/components/DeploymentEventMessage.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,16 @@
2121
import { useCallback, useMemo, useState } from "react";
2222
import { FormattedMessage } from "react-intl";
2323

24-
import { DeploymentTargetsTable_CampaignTargetsFragment$data } from "@/api/__generated__/DeploymentTargetsTable_CampaignTargetsFragment.graphql";
24+
import { DeploymentTargetsTable_CampaignTargetEdgeFragment$data } from "@/api/__generated__/DeploymentTargetsTable_CampaignTargetEdgeFragment.graphql";
2525

2626
import CollapseItem from "@/components/CollapseItem";
2727

2828
type DeploymentEventMessageProps = {
2929
event: NonNullable<
3030
NonNullable<
31-
DeploymentTargetsTable_CampaignTargetsFragment$data[number]["deployment"]
31+
NonNullable<
32+
DeploymentTargetsTable_CampaignTargetEdgeFragment$data["edges"]
33+
>[number]["node"]["deployment"]
3234
>["events"]["edges"]
3335
>[number]["node"];
3436
};

frontend/src/components/DeploymentTargetsTable.tsx

Lines changed: 51 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -18,55 +18,62 @@
1818
* SPDX-License-Identifier: Apache-2.0
1919
*/
2020

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

2426
import type {
25-
DeploymentTargetsTable_CampaignTargetsFragment$data,
26-
DeploymentTargetsTable_CampaignTargetsFragment$key,
27-
} from "@/api/__generated__/DeploymentTargetsTable_CampaignTargetsFragment.graphql";
27+
DeploymentTargetsTable_CampaignTargetEdgeFragment$data,
28+
DeploymentTargetsTable_CampaignTargetEdgeFragment$key,
29+
} from "@/api/__generated__/DeploymentTargetsTable_CampaignTargetEdgeFragment.graphql";
2830

29-
import { createColumnHelper } from "@/components/Table";
30-
import InfiniteTable from "@/components/InfiniteTable";
3131
import DeploymentEventMessage from "@/components/DeploymentEventMessage";
32-
import DeploymentStateComponent from "@/components/DeploymentState";
3332
import DeploymentReadiness from "@/components/DeploymentReadiness";
33+
import DeploymentStateComponent from "@/components/DeploymentState";
34+
import InfiniteTable from "@/components/InfiniteTable";
35+
import { createColumnHelper } from "@/components/Table";
3436
import { Link, Route } from "@/Navigation";
3537

3638
// We use graphql fields below in columns configuration
3739
/* eslint-disable relay/unused-fields */
3840
const CAMPAIGN_TARGETS_TABLE_FRAGMENT = graphql`
39-
fragment DeploymentTargetsTable_CampaignTargetsFragment on CampaignTarget
40-
@relay(plural: true) {
41-
device {
42-
id
43-
name
44-
}
45-
retryCount
46-
latestAttempt
47-
completionTimestamp
48-
deployment {
49-
state
50-
isReady
51-
events(
52-
filter: { type: { eq: ERROR } }
53-
sort: [{ field: INSERTED_AT, order: DESC }]
54-
first: 1
55-
) {
56-
edges {
57-
node {
58-
message
59-
type
60-
insertedAt
61-
addInfo
41+
fragment DeploymentTargetsTable_CampaignTargetEdgeFragment on CampaignTargetConnection {
42+
edges {
43+
node {
44+
device {
45+
id
46+
name
47+
}
48+
retryCount
49+
latestAttempt
50+
completionTimestamp
51+
deployment {
52+
state
53+
isReady
54+
events(
55+
filter: { type: { eq: ERROR } }
56+
sort: [{ field: INSERTED_AT, order: DESC }]
57+
first: 1
58+
) {
59+
edges {
60+
node {
61+
message
62+
type
63+
insertedAt
64+
addInfo
65+
}
66+
}
6267
}
6368
}
6469
}
6570
}
6671
}
6772
`;
6873

69-
type TableRecord = DeploymentTargetsTable_CampaignTargetsFragment$data[number];
74+
type TableRecord = NonNullable<
75+
NonNullable<DeploymentTargetsTable_CampaignTargetEdgeFragment$data>["edges"]
76+
>[number]["node"];
7077
const columnIds = [
7178
"deviceName",
7279
"state",
@@ -219,31 +226,34 @@ const columns = [
219226
type Props = {
220227
className?: string;
221228
hiddenColumns?: ColumnId[];
222-
campaignTargetsRef: DeploymentTargetsTable_CampaignTargetsFragment$key;
223-
isLoadingNext: boolean;
224-
hasNext: boolean;
225-
loadNextCampaignTargets: () => void;
229+
campaignTargetsRef: DeploymentTargetsTable_CampaignTargetEdgeFragment$key;
230+
loading?: boolean;
231+
onLoadMore?: () => void;
226232
};
227233

228234
const DeploymentTargetsTable = ({
229235
className,
230236
campaignTargetsRef,
231237
hiddenColumns = [],
232-
isLoadingNext,
233-
hasNext,
234-
loadNextCampaignTargets,
238+
loading = false,
239+
onLoadMore,
235240
}: Props) => {
236-
const campaignTargets = useFragment(
241+
const campaignTargetsFragment = useFragment(
237242
CAMPAIGN_TARGETS_TABLE_FRAGMENT,
238243
campaignTargetsRef,
239244
);
245+
246+
const campaignTargets = useMemo<TableRecord[]>(() => {
247+
return _.compact(campaignTargetsFragment?.edges?.map((e) => e?.node)) ?? [];
248+
}, [campaignTargetsFragment]);
249+
240250
return (
241251
<InfiniteTable
242252
className={className}
243253
columns={columns}
244-
data={[...campaignTargets]}
245-
loading={isLoadingNext}
246-
onLoadMore={hasNext ? loadNextCampaignTargets : undefined}
254+
data={campaignTargets}
255+
loading={loading}
256+
onLoadMore={onLoadMore}
247257
hiddenColumns={hiddenColumns}
248258
hideSearch
249259
/>

0 commit comments

Comments
 (0)