1818 * SPDX-License-Identifier: Apache-2.0
1919 */
2020
21+ import _ from "lodash" ;
22+ import { useMemo } from "react" ;
2123import { defineMessages , FormattedDate , FormattedMessage } from "react-intl" ;
2224import { graphql , useFragment } from "react-relay/hooks" ;
2325
2426import 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
3133import Icon from "@/components/Icon" ;
3234import { 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 */
3840const 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+
163171const columnIds = [
164172 "deviceName" ,
165173 "otaOperationStatus" ,
@@ -312,32 +320,34 @@ const columns = [
312320type 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
321328const 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