Skip to content

Commit f8f9c94

Browse files
committed
refactor: K8sResouceList & ClusterUpgradeCompatibilityInfo - improve typings
1 parent 24f47a6 commit f8f9c94

File tree

6 files changed

+124
-66
lines changed

6 files changed

+124
-66
lines changed

src/components/ResourceBrowser/ResourceList/ClusterUpgradeCompatibilityInfo.tsx

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,11 @@ import {
2323
FiltersTypeEnum,
2424
GenericEmptyState,
2525
ImageType,
26+
K8sResourceDetailDataType,
2627
LARGE_PAGE_SIZE_OPTIONS,
2728
PaginationEnum,
2829
Progressing,
2930
Table,
30-
TableColumnType,
31-
TableProps,
3231
URL_FILTER_KEYS,
3332
useSearchString,
3433
} from '@devtron-labs/devtron-fe-common-lib'
@@ -42,7 +41,11 @@ import { TARGET_K8S_VERSION_SEARCH_KEY } from '../Constants'
4241
import { ClusterDetailBaseParams } from '../Types'
4342
import ClusterUpgradeCompatibilityInfoTableCellComponent from './ClusterUpgradeCompatibilityInfoTableCellComponent'
4443
import ClusterUpgradeCompatibilityInfoTableWrapper from './ClusterUpgradeCompatibilityInfoTableWrapper'
45-
import { ClusterUpgradeCompatibilityInfoProps } from './types'
44+
import {
45+
ClusterUpgradeCompatibilityInfoProps,
46+
ClusterUpgradeCompatibilityInfoTableAdditionalProps,
47+
ClusterUpgradeCompatibilityInfoTableProps,
48+
} from './types'
4649
import { dynamicSort } from './utils'
4750

4851
const useClusterUpgradeCompatibilityInfo = importComponentFromFELibrary(
@@ -75,25 +78,25 @@ const ClusterUpgradeCompatibilityInfo = ({
7578
updateTabUrl,
7679
})
7780

78-
const { columns, rows } = useMemo(
81+
const { columns, rows } = useMemo<{
82+
columns: ClusterUpgradeCompatibilityInfoTableProps['columns']
83+
rows: ClusterUpgradeCompatibilityInfoTableProps['rows']
84+
}>(
7985
() => ({
80-
columns: resourceListForCurrentData.headers.map(
81-
(header: string) =>
82-
({
83-
field: header,
84-
label: header,
85-
size: {
86-
range: {
87-
maxWidth: 600,
88-
minWidth: header === 'name' ? 200 : 180,
89-
startWidth: header === 'name' ? 300 : 200,
90-
},
91-
},
92-
comparator: dynamicSort(header),
93-
isSortable: true,
94-
CellComponent: ClusterUpgradeCompatibilityInfoTableCellComponent,
95-
}) as TableColumnType,
96-
),
86+
columns: resourceListForCurrentData.headers.map((header: string) => ({
87+
field: header,
88+
label: header,
89+
size: {
90+
range: {
91+
maxWidth: 600,
92+
minWidth: header === 'name' ? 200 : 180,
93+
startWidth: header === 'name' ? 300 : 200,
94+
},
95+
},
96+
comparator: dynamicSort(header),
97+
isSortable: true,
98+
CellComponent: ClusterUpgradeCompatibilityInfoTableCellComponent,
99+
})),
97100
rows: resourceListForCurrentData.data.map((row: Record<string, string | number | object>) => ({
98101
data: row,
99102
id: JSON.stringify(row),
@@ -141,7 +144,7 @@ const ClusterUpgradeCompatibilityInfo = ({
141144
)
142145
}
143146

144-
const tableFilter: TableProps['filter'] = (row, filterData) =>
147+
const tableFilter: ClusterUpgradeCompatibilityInfoTableProps['filter'] = (row, filterData) =>
145148
!filterData.searchKey ||
146149
Object.entries(row.data).some(
147150
([key, value]) =>
@@ -163,7 +166,7 @@ const ClusterUpgradeCompatibilityInfo = ({
163166
<CollapsibleList tabType="navLink" config={sidebarConfig} onCollapseBtnClick={onCollapseBtnClick} />
164167
</div>
165168

166-
<Table
169+
<Table<K8sResourceDetailDataType, FiltersTypeEnum.URL, ClusterUpgradeCompatibilityInfoTableAdditionalProps>
167170
columns={columns}
168171
rows={rows}
169172
emptyStateConfig={{
@@ -184,6 +187,7 @@ const ClusterUpgradeCompatibilityInfo = ({
184187
filter={tableFilter}
185188
additionalProps={{
186189
lowercaseKindToResourceGroupMap,
190+
reloadResourceListData: refetchCompatibilityList,
187191
}}
188192
pageSizeOptions={LARGE_PAGE_SIZE_OPTIONS}
189193
clearFilters={clearFilters}

src/components/ResourceBrowser/ResourceList/ClusterUpgradeCompatibilityInfoTableCellComponent.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import {
88
DUMMY_RESOURCE_GVK_VERSION,
99
GVKType,
1010
highlightSearchText,
11-
K8sResourceDetailDataType,
1211
Nodes,
1312
noop,
1413
RESOURCE_BROWSER_ROUTES,
@@ -142,7 +141,7 @@ const ClusterUpgradeCompatibilityInfoTableCellComponent = ({
142141
<ResourceBrowserActionMenu
143142
ref={contextMenuRef}
144143
clusterId={clusterId}
145-
resourceData={resourceData as K8sResourceDetailDataType}
144+
resourceData={resourceData}
146145
getResourceListData={reloadResourceListData as () => Promise<void>}
147146
selectedResource={selectedResource}
148147
hideDeleteResource

src/components/ResourceBrowser/ResourceList/K8SResourceList.tsx

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,13 @@ import {
2323
FiltersTypeEnum,
2424
getAIAnalyticsEvents,
2525
getIsRequestAborted,
26+
K8sResourceDetailDataType,
2627
LARGE_PAGE_SIZE_OPTIONS,
2728
Nodes,
2829
PaginationEnum,
2930
SelectAllDialogStatus,
3031
ServerErrors,
3132
Table,
32-
TableColumnType,
33-
TableProps,
3433
URLS,
3534
useAsync,
3635
useUrlFilters,
@@ -50,7 +49,13 @@ import { K8SResourceListType } from '../Types'
5049
import K8sResourceListTableCellComponent from './K8sResourceListTableCellComponent'
5150
import NodeListSearchFilter from './NodeListSearchFilter'
5251
import ResourceFilterOptions from './ResourceFilterOptions'
53-
import { K8sResourceListFilterType, K8sResourceListURLParams, K8SResourceListViewWrapperProps } from './types'
52+
import {
53+
K8sResourceListFilterType,
54+
K8sResourceListTableAdditionalProps,
55+
K8sResourceListTableProps,
56+
K8sResourceListURLParams,
57+
K8SResourceListViewWrapperProps,
58+
} from './types'
5459
import {
5560
getColumnComparator,
5661
getColumnSize,
@@ -90,7 +95,7 @@ const K8SResourceListViewWrapper = ({
9095
visibleColumns={visibleColumns}
9196
setVisibleColumns={setVisibleColumns}
9297
allColumns={allColumns}
93-
searchParams={restProps as Record<string, string>}
98+
searchParams={restProps}
9499
/>
95100
) : (
96101
<ResourceFilterOptions
@@ -174,7 +179,7 @@ export const K8SResourceList = ({
174179
updateK8sResourceTab({ url: `${location.pathname}${location.search}` })
175180
}, [location.pathname, location.search])
176181

177-
const columns: TableColumnType[] = useMemo(
182+
const columns: K8sResourceListTableProps['columns'] = useMemo(
178183
() =>
179184
resourceList?.headers.map(
180185
(header) =>
@@ -187,24 +192,24 @@ export const K8SResourceList = ({
187192
isSortable: !isEventListing || (header !== 'message' && header !== 'type'),
188193
horizontallySticky:
189194
header === 'name' || (isEventListing && (header === 'message' || header === 'type')),
190-
}) as TableColumnType,
195+
}) as K8sResourceListTableProps['columns'][0],
191196
) ?? [],
192197
[resourceList?.headers],
193198
)
194199

195-
const rows: TableProps['rows'] = useMemo(
200+
const rows: K8sResourceListTableProps['rows'] = useMemo(
196201
() =>
197202
resourceList?.data.map((row) => {
198203
const { id, ...rest } = row
199204
return {
200205
data: rest,
201206
id,
202-
} as TableProps['rows'][number]
207+
} as K8sResourceListTableProps['rows'][number]
203208
}) ?? null,
204209
[resourceList?.data],
205210
)
206211

207-
const tableFilter: TableProps['filter'] = (row, filterData) => {
212+
const tableFilter: K8sResourceListTableProps['filter'] = (row, filterData) => {
208213
if (isNodeListing) {
209214
return isItemASearchMatchForNodeListing(row.data, filterData)
210215
}
@@ -251,7 +256,7 @@ export const K8SResourceList = ({
251256

252257
return (
253258
<>
254-
<Table
259+
<Table<K8sResourceDetailDataType, FiltersTypeEnum.URL, K8sResourceListTableAdditionalProps>
255260
loading={isResourceListLoading}
256261
columns={columns}
257262
rows={rows}

src/components/ResourceBrowser/ResourceList/K8sResourceListTableCellComponent.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import {
1313
highlightSearchText,
1414
Icon,
1515
IconName,
16-
K8sResourceDetailDataType,
1716
Nodes,
1817
noop,
1918
RESOURCE_BROWSER_ROUTES,
@@ -172,7 +171,7 @@ const K8sResourceListTableCellComponent = ({
172171
<ResourceBrowserActionMenu
173172
ref={contextMenuRef}
174173
clusterId={clusterId}
175-
resourceData={resourceData as K8sResourceDetailDataType}
174+
resourceData={resourceData}
176175
getResourceListData={reloadResourceListData as () => Promise<void>}
177176
selectedResource={selectedResource}
178177
handleResourceClick={handleResourceClick}
@@ -183,14 +182,14 @@ const K8sResourceListTableCellComponent = ({
183182
ref={contextMenuRef}
184183
getNodeListData={reloadResourceListData as () => Promise<void>}
185184
addTab={addTab}
186-
nodeData={resourceData as K8sResourceDetailDataType}
185+
nodeData={resourceData}
187186
handleClearBulkSelection={noop}
188187
/>
189188
)
190189

191190
const getConditionalWrap = () =>
192191
columnName === 'node'
193-
? getRenderNodeButton(resourceData as K8sResourceDetailDataType, columnName, handleNodeClick)
192+
? getRenderNodeButton(resourceData, columnName, handleNodeClick)
194193
: getRenderInvolvedObjectButton(resourceData[columnName] as string, handleEventInvolvedObjectClick)
195194

196195
if (columnName === 'type' && isEventListing) {

src/components/ResourceBrowser/ResourceList/types.ts

Lines changed: 72 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616

1717
import {
1818
FiltersTypeEnum,
19+
K8sResourceDetailDataType,
1920
ServerErrors,
2021
TableCellComponentProps,
22+
TableProps,
2123
TableViewWrapperProps,
2224
useBreadcrumb,
2325
} from '@devtron-labs/devtron-fe-common-lib'
@@ -66,22 +68,6 @@ export interface K8sResourceListFilterType
6668
eventType: 'warning' | 'normal'
6769
}
6870

69-
export interface K8SResourceListViewWrapperProps
70-
extends TableViewWrapperProps<FiltersTypeEnum.URL>,
71-
Pick<K8SResourceListType, 'selectedCluster' | 'selectedResource' | 'updateK8sResourceTab' | 'renderRefreshBar'>,
72-
Pick<K8sResourceListFilterType, 'eventType'> {
73-
selectedNamespace: string
74-
}
75-
76-
export interface K8sResourceListTableCellComponentProps
77-
extends TableCellComponentProps<FiltersTypeEnum.URL>,
78-
Pick<
79-
K8SResourceListType,
80-
'selectedCluster' | 'selectedResource' | 'addTab' | 'lowercaseKindToResourceGroupMap' | 'clusterName'
81-
> {
82-
reloadResourceListData: () => void
83-
}
84-
8571
export interface AdminTerminalDummyProps
8672
extends Pick<UseTabsReturnType, 'markTabActiveById' | 'updateTabUrl' | 'getTabById'> {
8773
clusterName: string
@@ -92,11 +78,68 @@ export interface ResourcePageHeaderProps {
9278
renderPageHeaderActionButtons?: () => JSX.Element
9379
}
9480

95-
export interface ClusterUpgradeCompatibilityInfoTableCellComponentProps
96-
extends TableCellComponentProps<FiltersTypeEnum.URL>,
97-
Pick<K8SResourceListType, 'lowercaseKindToResourceGroupMap'> {}
81+
// CLUSTER UPGRADE COMPATIBILITY INFO TABLE PROPS --------->
82+
export type ClusterUpgradeCompatibilityInfoTableAdditionalProps = Pick<
83+
K8SResourceListType,
84+
'lowercaseKindToResourceGroupMap'
85+
> & {
86+
reloadResourceListData: () => void
87+
}
9888

99-
export interface ClusterUpgradeCompatibilityInfoTableWrapperProps extends TableViewWrapperProps<FiltersTypeEnum.URL> {}
89+
export type ClusterUpgradeCompatibilityInfoTableProps = TableProps<
90+
K8sResourceDetailDataType,
91+
FiltersTypeEnum.URL,
92+
ClusterUpgradeCompatibilityInfoTableAdditionalProps
93+
>
94+
95+
export type ClusterUpgradeCompatibilityInfoTableWrapperProps = TableViewWrapperProps<
96+
K8sResourceDetailDataType,
97+
FiltersTypeEnum.URL,
98+
ClusterUpgradeCompatibilityInfoTableAdditionalProps
99+
>
100+
101+
export type ClusterUpgradeCompatibilityInfoTableCellComponentProps = TableCellComponentProps<
102+
K8sResourceDetailDataType,
103+
FiltersTypeEnum.URL,
104+
ClusterUpgradeCompatibilityInfoTableAdditionalProps
105+
>
106+
// <--------- CLUSTER UPGRADE COMPATIBILITY INFO TABLE PROPS
107+
108+
// K8s RESOURCE LIST TABLE PROPS --------->
109+
export interface K8sResourceListTableAdditionalProps
110+
extends Pick<
111+
K8SResourceListType,
112+
| 'selectedCluster'
113+
| 'selectedResource'
114+
| 'addTab'
115+
| 'lowercaseKindToResourceGroupMap'
116+
| 'clusterName'
117+
| 'renderRefreshBar'
118+
> {
119+
reloadResourceListData: () => void
120+
isNodeListing: boolean
121+
isEventListing: boolean
122+
}
123+
124+
export type K8SResourceListViewWrapperProps = TableViewWrapperProps<
125+
K8sResourceDetailDataType,
126+
FiltersTypeEnum.URL,
127+
K8sResourceListTableAdditionalProps
128+
> &
129+
Pick<K8sResourceListFilterType, 'selectedNamespace' | 'eventType'>
130+
131+
export type K8sResourceListTableCellComponentProps = TableCellComponentProps<
132+
K8sResourceDetailDataType,
133+
FiltersTypeEnum.URL,
134+
K8sResourceListTableAdditionalProps
135+
>
136+
137+
export type K8sResourceListTableProps = TableProps<
138+
K8sResourceDetailDataType,
139+
FiltersTypeEnum.URL,
140+
K8sResourceListTableAdditionalProps
141+
>
142+
// <--------- K8s RESOURCE LIST TABLE PROPS
100143

101144
export type DynamicTabComponentWrapperProps = Pick<
102145
UseTabsReturnType,
@@ -106,7 +149,12 @@ export type DynamicTabComponentWrapperProps = Pick<
106149
children: React.ReactElement
107150
}
108151

109-
export interface ResourceRecommenderTableViewWrapperProps extends ResourceFilterOptionsProps, TableViewWrapperProps {
110-
resourceListError: ServerErrors
111-
reloadResourceListData: () => void
112-
}
152+
export interface ResourceRecommenderTableViewWrapperProps
153+
extends TableViewWrapperProps<
154+
unknown,
155+
FiltersTypeEnum.URL,
156+
ResourceFilterOptionsProps & {
157+
resourceListError: ServerErrors
158+
reloadResourceListData: () => void
159+
}
160+
> {}

src/components/ResourceBrowser/Types.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ export interface ClusterOptionType extends OptionType {
9393
}
9494

9595
export interface ResourceFilterOptionsProps
96-
extends Pick<TableViewWrapperProps<FiltersTypeEnum.URL>, 'updateSearchParams' | 'filteredRows'>,
96+
extends Pick<TableViewWrapperProps<unknown, FiltersTypeEnum.URL>, 'updateSearchParams' | 'filteredRows'>,
9797
Partial<Pick<K8sResourceListFilterType, 'eventType'>> {
9898
selectedResource: ApiResourceGroupType
9999
selectedCluster?: ClusterOptionType
@@ -269,8 +269,11 @@ export interface NodeRowDetail {
269269
}
270270

271271
export interface NodeListSearchFilterType
272-
extends Pick<TableViewWrapperProps, 'visibleColumns' | 'setVisibleColumns' | 'allColumns'> {
273-
searchParams: Record<string, string>
272+
extends Pick<
273+
TableViewWrapperProps<unknown, FiltersTypeEnum.URL>,
274+
'visibleColumns' | 'setVisibleColumns' | 'allColumns'
275+
> {
276+
searchParams: Record<string, any>
274277
}
275278

276279
export enum NODE_SEARCH_KEYS {

0 commit comments

Comments
 (0)