Skip to content

Commit e1cc748

Browse files
committed
Use StatusBox to wrap ResourceDataView render output
1 parent 66ca416 commit e1cc748

File tree

4 files changed

+77
-52
lines changed

4 files changed

+77
-52
lines changed

frontend/packages/console-app/src/components/data-view/ResourceDataView.tsx

Lines changed: 63 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,20 @@ import {
2020
ColumnLayout,
2121
K8sResourceCommon,
2222
} from '@console/dynamic-plugin-sdk/src/extensions/console-types';
23+
import { EmptyBox } from '@console/shared/src/components/empty-state/EmptyBox';
24+
import { StatusBox } from '@console/shared/src/components/status/StatusBox';
2325
import { createColumnManagementModal } from '@console/internal/components/modals';
2426
import { TableColumn } from '@console/internal/module/k8s';
2527
import { DataViewLabelFilter } from './DataViewLabelFilter';
26-
import { ResourceFilters } from './types';
27-
import { useResourceDataViewData, GetDataViewRows } from './useResourceDataViewData';
28+
import { ResourceFilters, GetDataViewRows } from './types';
29+
import { useResourceDataViewData } from './useResourceDataViewData';
2830
import { useResourceDataViewFilters } from './useResourceDataViewFilters';
2931

3032
export type ResourceDataViewProps<TData, TCustomRowData, TFilters> = {
33+
label?: string;
3134
data: TData[];
3235
loaded: boolean;
36+
loadError?: any;
3337
columns: TableColumn<TData>[];
3438
columnLayout?: ColumnLayout;
3539
columnManagementID?: string;
@@ -42,6 +46,7 @@ export type ResourceDataViewProps<TData, TCustomRowData, TFilters> = {
4246
hideNameLabelFilters?: boolean;
4347
hideLabelFilter?: boolean;
4448
hideColumnManagement?: boolean;
49+
mock?: boolean;
4550
};
4651

4752
/**
@@ -52,8 +57,10 @@ export const ResourceDataView = <
5257
TCustomRowData = any,
5358
TFilters extends ResourceFilters = ResourceFilters
5459
>({
60+
label,
5561
data,
5662
loaded,
63+
loadError,
5764
columns,
5865
columnLayout,
5966
columnManagementID,
@@ -66,6 +73,7 @@ export const ResourceDataView = <
6673
hideNameLabelFilters,
6774
hideLabelFilter,
6875
hideColumnManagement,
76+
mock,
6977
}: ResourceDataViewProps<TData, TCustomRowData, TFilters>) => {
7078
const { t } = useTranslation();
7179

@@ -136,48 +144,59 @@ export const ResourceDataView = <
136144
// eslint-disable-next-line react-hooks/exhaustive-deps
137145
}, [additionalFilterNodes, t]);
138146

139-
return (
140-
<DataView activeState={activeState}>
141-
<DataViewToolbar
142-
filters={
143-
<DataViewFilters values={filters} onChange={(_e, values) => onSetFilters(values)}>
144-
{dataViewFiltersNodes}
145-
</DataViewFilters>
146-
}
147-
clearAllFilters={clearAllFilters}
148-
actions={
149-
!hideColumnManagement && (
150-
<ResponsiveActions breakpoint="lg">
151-
<ResponsiveAction
152-
isPersistent
153-
variant="plain"
154-
onClick={() =>
155-
createColumnManagementModal({
156-
columnLayout,
157-
noLimit: true,
158-
})
159-
}
160-
aria-label={t('public~Column management')}
161-
data-test="manage-columns"
162-
>
163-
<Tooltip content={t('public~Manage columns')} trigger="mouseenter">
164-
<ColumnsIcon />
165-
</Tooltip>
166-
</ResponsiveAction>
167-
</ResponsiveActions>
168-
)
169-
}
170-
pagination={<Pagination itemCount={filteredData.length} {...pagination} />}
171-
/>
172-
<InnerScrollContainer>
173-
<DataViewTable
174-
columns={dataViewColumns}
175-
rows={dataViewRows}
176-
bodyStates={{ empty: bodyEmpty, loading: bodyLoading }}
177-
gridBreakPoint=""
178-
variant="compact"
147+
return mock ? (
148+
<EmptyBox label={label} />
149+
) : (
150+
<StatusBox
151+
label={label}
152+
data={filteredData}
153+
unfilteredData={data}
154+
loaded={loaded}
155+
loadError={loadError}
156+
skeleton={<div className="loading-skeleton--table" />}
157+
>
158+
<DataView activeState={activeState}>
159+
<DataViewToolbar
160+
filters={
161+
<DataViewFilters values={filters} onChange={(_e, values) => onSetFilters(values)}>
162+
{dataViewFiltersNodes}
163+
</DataViewFilters>
164+
}
165+
clearAllFilters={clearAllFilters}
166+
actions={
167+
!hideColumnManagement && (
168+
<ResponsiveActions breakpoint="lg">
169+
<ResponsiveAction
170+
isPersistent
171+
variant="plain"
172+
onClick={() =>
173+
createColumnManagementModal({
174+
columnLayout,
175+
noLimit: true,
176+
})
177+
}
178+
aria-label={t('public~Column management')}
179+
data-test="manage-columns"
180+
>
181+
<Tooltip content={t('public~Manage columns')} trigger="mouseenter">
182+
<ColumnsIcon />
183+
</Tooltip>
184+
</ResponsiveAction>
185+
</ResponsiveActions>
186+
)
187+
}
188+
pagination={<Pagination itemCount={filteredData.length} {...pagination} />}
179189
/>
180-
</InnerScrollContainer>
181-
</DataView>
190+
<InnerScrollContainer>
191+
<DataViewTable
192+
columns={dataViewColumns}
193+
rows={dataViewRows}
194+
bodyStates={{ empty: bodyEmpty, loading: bodyLoading }}
195+
gridBreakPoint=""
196+
variant="compact"
197+
/>
198+
</InnerScrollContainer>
199+
</DataView>
200+
</StatusBox>
182201
);
183202
};

frontend/packages/console-app/src/components/data-view/types.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import { DataViewTh, DataViewTd } from '@patternfly/react-data-view';
22
import { SortByDirection } from '@patternfly/react-table';
3-
import { K8sResourceCommon } from '@console/dynamic-plugin-sdk/src/extensions/console-types';
3+
import {
4+
K8sResourceCommon,
5+
RowProps,
6+
} from '@console/dynamic-plugin-sdk/src/extensions/console-types';
47

58
export type ResourceFilters = {
69
name: string;
@@ -16,3 +19,11 @@ export type ResourceDataViewColumn<
1619
};
1720

1821
export type ResourceDataViewRow = DataViewTd[];
22+
23+
/**
24+
* Maps Console `RowProps` data to DataView compatible format.
25+
*/
26+
export type GetDataViewRows<TData, TCustomRowData> = (
27+
data: RowProps<TData, TCustomRowData>[],
28+
columns: ResourceDataViewColumn<TData>[],
29+
) => ResourceDataViewRow[];

frontend/packages/console-app/src/components/data-view/useResourceDataViewData.tsx

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,9 @@ import {
1010
} from '@console/dynamic-plugin-sdk/src/extensions/console-types';
1111
import { useActiveColumns } from '@console/internal/components/factory/Table/active-columns-hook';
1212
import { sortResourceByValue } from '@console/internal/components/factory/Table/sort';
13-
import { ResourceDataViewColumn, ResourceDataViewRow } from './types';
13+
import { ResourceDataViewColumn, GetDataViewRows } from './types';
1414
import { useResourceDataViewSort } from './useResourceDataViewSort';
1515

16-
export type GetDataViewRows<TData, TCustomRowData> = (
17-
data: RowProps<TData, TCustomRowData>[],
18-
columns: ResourceDataViewColumn<TData>[],
19-
) => ResourceDataViewRow[];
20-
2116
const isDataViewConfigurableColumn = (
2217
column: DataViewTh,
2318
): column is Extract<DataViewTh, { cell: React.ReactNode }> => {

frontend/packages/console-dynamic-plugin-sdk/src/api/dynamic-core-api.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ export const TableData: React.FC<TableDataProps> = require('@console/internal/co
163163
* showNamespaceOverride: false,
164164
* columnManagementID,
165165
* });
166-
* return userSettingsAreLoaded ? <VirtualizedTable columns={activeColumns} {...otherProps} /> : null
166+
* return userSettingsLoaded ? <VirtualizedTable columns={activeColumns} {...otherProps} /> : null
167167
* ```
168168
*/
169169
export const useActiveColumns: UseActiveColumns = require('@console/internal/components/factory/Table/active-columns-hook')

0 commit comments

Comments
 (0)