Skip to content

Commit deb2a88

Browse files
authored
feat: add dimming to vdisk page (nodes) and pdisk page (vdisks) (#1397)
1 parent 5e1961c commit deb2a88

File tree

19 files changed

+163
-52
lines changed

19 files changed

+163
-52
lines changed

src/components/PaginatedTable/TableChunk.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,8 @@ export const TableChunk = typedMemo(function TableChunk<T, F>({
104104
}, [currentData, isActive, onDataFetched]);
105105

106106
const chunkOffset = id * limit;
107-
const remainingLenght = totalLength - chunkOffset;
108-
const calculatedChunkLength = remainingLenght < limit ? remainingLenght : limit;
107+
const remainingLength = totalLength - chunkOffset;
108+
const calculatedChunkLength = remainingLength < limit ? remainingLength : limit;
109109

110110
const dataLength = currentData?.data?.length || calculatedChunkLength;
111111

src/containers/PDiskPage/PDiskPage.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import {valueIsDefined} from '../../utils';
2525
import {cn} from '../../utils/cn';
2626
import {getPDiskId, getSeverityColor} from '../../utils/disks/helpers';
2727
import {useAutoRefreshInterval, useTypedDispatch, useTypedSelector} from '../../utils/hooks';
28-
import {Storage} from '../Storage/Storage';
28+
import {StorageWrapper} from '../Storage/StorageWrapper';
2929

3030
import {DecommissionButton} from './DecommissionButton/DecommissionButton';
3131
import {DecommissionLabel} from './DecommissionLabel/DecommissionLabel';
@@ -244,7 +244,9 @@ export function PDiskPage() {
244244
) : null;
245245
}
246246
case 'storage': {
247-
return pDiskParamsDefined ? <Storage nodeId={nodeId} pDiskId={pDiskId} /> : null;
247+
return pDiskParamsDefined ? (
248+
<StorageWrapper nodeId={nodeId} pDiskId={pDiskId} />
249+
) : null;
248250
}
249251
default:
250252
return null;

src/containers/Storage/Disks/Disks.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ import {stringifyVdiskId} from '../../../utils/dataFormatters/dataFormatters';
66
import {getPDiskId} from '../../../utils/disks/helpers';
77
import type {PreparedVDisk} from '../../../utils/disks/types';
88
import {PDisk} from '../PDisk';
9+
import type {StorageViewContext} from '../types';
910
import {isVdiskActive} from '../utils';
10-
import type {VDiskViewContext} from '../utils';
1111

1212
import './Disks.scss';
1313

1414
const b = cn('ydb-storage-disks');
1515

1616
interface DisksProps {
1717
vDisks?: PreparedVDisk[];
18-
viewContext?: VDiskViewContext;
18+
viewContext?: StorageViewContext;
1919
}
2020

2121
export function Disks({vDisks = [], viewContext}: DisksProps) {

src/containers/Storage/PDisk/PDisk.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import {cn} from '../../../utils/cn';
1111
import {stringifyVdiskId} from '../../../utils/dataFormatters/dataFormatters';
1212
import type {PreparedPDisk, PreparedVDisk} from '../../../utils/disks/types';
1313
import {STRUCTURE} from '../../Node/NodePages';
14+
import type {StorageViewContext} from '../types';
1415
import {isVdiskActive} from '../utils';
15-
import type {VDiskViewContext} from '../utils';
1616

1717
import './PDisk.scss';
1818

@@ -26,7 +26,7 @@ interface PDiskProps {
2626
onHidePopup?: VoidFunction;
2727
className?: string;
2828
progressBarClassName?: string;
29-
viewContext?: VDiskViewContext;
29+
viewContext?: StorageViewContext;
3030
}
3131

3232
export const PDisk = ({
Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
import {PaginatedStorageGroups} from './PaginatedStorageGroups';
22
import {PaginatedStorageNodes} from './PaginatedStorageNodes';
3+
import type {StorageViewContext} from './types';
34
import {useStorageQueryParams} from './useStorageQueryParams';
5+
import {getStorageGroupsInitialEntitiesCount, getStorageNodesInitialEntitiesCount} from './utils';
46

57
export interface PaginatedStorageProps {
68
database?: string;
79
nodeId?: string | number;
810
groupId?: string | number;
911
pDiskId?: string | number;
1012

13+
viewContext: StorageViewContext;
14+
1115
parentContainer?: Element | null;
16+
17+
initialEntitiesCount?: number;
1218
}
1319

1420
export const PaginatedStorage = (props: PaginatedStorageProps) => {
@@ -17,8 +23,18 @@ export const PaginatedStorage = (props: PaginatedStorageProps) => {
1723
const isNodes = storageType === 'nodes';
1824

1925
if (isNodes) {
20-
return <PaginatedStorageNodes {...props} />;
26+
return (
27+
<PaginatedStorageNodes
28+
initialEntitiesCount={getStorageNodesInitialEntitiesCount(props.viewContext)}
29+
{...props}
30+
/>
31+
);
2132
}
2233

23-
return <PaginatedStorageGroups {...props} />;
34+
return (
35+
<PaginatedStorageGroups
36+
initialEntitiesCount={getStorageGroupsInitialEntitiesCount(props.viewContext)}
37+
{...props}
38+
/>
39+
);
2440
};

src/containers/Storage/PaginatedStorageGroups.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,15 @@ function StorageGroupsComponent({
5454
nodeId,
5555
groupId,
5656
pDiskId,
57+
viewContext,
5758
parentContainer,
59+
initialEntitiesCount,
5860
}: PaginatedStorageProps) {
5961
const {searchValue, visibleEntities, handleShowAllGroups} = useStorageQueryParams();
6062

6163
const {columnsToShow, columnsToSelect, setColumns} = useStorageGroupsSelectedColumns({
6264
visibleEntities,
63-
nodeId: nodeId?.toString(),
65+
viewContext,
6466
});
6567

6668
const renderControls: RenderControls = ({totalEntities, foundEntities, inited}) => {
@@ -90,6 +92,7 @@ function StorageGroupsComponent({
9092
renderControls={renderControls}
9193
renderErrorMessage={renderPaginatedTableErrorMessage}
9294
columns={columnsToShow}
95+
initialEntitiesCount={initialEntitiesCount}
9396
/>
9497
);
9598
}
@@ -99,14 +102,16 @@ function GroupedStorageGroupsComponent({
99102
nodeId,
100103
groupId,
101104
pDiskId,
105+
106+
viewContext,
102107
}: PaginatedStorageProps) {
103108
const [autoRefreshInterval] = useAutoRefreshInterval();
104109
const {searchValue, storageGroupsGroupByParam, visibleEntities, handleShowAllGroups} =
105110
useStorageQueryParams();
106111

107112
const {columnsToShow, columnsToSelect, setColumns} = useStorageGroupsSelectedColumns({
108113
visibleEntities,
109-
nodeId: nodeId?.toString(),
114+
viewContext,
110115
});
111116

112117
const {currentData, isFetching, error} = storageApi.useGetStorageGroupsInfoQuery(

src/containers/Storage/PaginatedStorageNodes.tsx

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {TableGroup} from './TableGroup/TableGroup';
2222
import {useExpandedGroups} from './TableGroup/useExpandedTableGroups';
2323
import i18n from './i18n';
2424
import {b, renderPaginatedTableErrorMessage} from './shared';
25+
import type {StorageViewContext} from './types';
2526
import {useStorageQueryParams} from './useStorageQueryParams';
2627

2728
import './Storage.scss';
@@ -60,14 +61,16 @@ function StorageNodesComponent({
6061
database,
6162
nodeId,
6263
groupId,
64+
viewContext,
6365
parentContainer,
66+
initialEntitiesCount,
6467
}: PaginatedStorageProps) {
6568
const {searchValue, visibleEntities, nodesUptimeFilter, handleShowAllNodes} =
6669
useStorageQueryParams();
6770

6871
const {columnsToShow, columnsToSelect, setColumns} = useStorageNodesColumnsToSelect({
6972
database,
70-
groupId: groupId?.toString(),
73+
viewContext,
7174
});
7275

7376
const renderControls: RenderControls = ({totalEntities, foundEntities, inited}) => {
@@ -97,18 +100,24 @@ function StorageNodesComponent({
97100
renderControls={renderControls}
98101
renderErrorMessage={renderPaginatedTableErrorMessage}
99102
columns={columnsToShow}
103+
initialEntitiesCount={initialEntitiesCount}
100104
/>
101105
);
102106
}
103107

104-
function GroupedStorageNodesComponent({database, groupId, nodeId}: PaginatedStorageProps) {
108+
function GroupedStorageNodesComponent({
109+
database,
110+
groupId,
111+
nodeId,
112+
viewContext,
113+
}: PaginatedStorageProps) {
105114
const [autoRefreshInterval] = useAutoRefreshInterval();
106115

107116
const {searchValue, storageNodesGroupByParam, handleShowAllNodes} = useStorageQueryParams();
108117

109118
const {columnsToShow, columnsToSelect, setColumns} = useStorageNodesColumnsToSelect({
110119
database,
111-
groupId: groupId?.toString(),
120+
viewContext,
112121
});
113122

114123
const {currentData, isFetching, error} = storageApi.useGetStorageNodesInfoQuery(
@@ -193,10 +202,10 @@ function GroupedStorageNodesComponent({database, groupId, nodeId}: PaginatedStor
193202

194203
function useStorageNodesColumnsToSelect({
195204
database,
196-
groupId,
205+
viewContext,
197206
}: {
198207
database?: string;
199-
groupId?: string;
208+
viewContext: StorageViewContext;
200209
}) {
201210
const {balancer} = useClusterBaseInfo();
202211
const {additionalNodesProps} = useAdditionalNodeProps({balancer});
@@ -206,6 +215,6 @@ function useStorageNodesColumnsToSelect({
206215
additionalNodesProps,
207216
visibleEntities,
208217
database,
209-
groupId,
218+
viewContext,
210219
});
211220
}

src/containers/Storage/Storage.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {useStorageGroupsSelectedColumns} from './StorageGroups/columns/hooks';
2222
import {StorageNodesTable} from './StorageNodes/StorageNodesTable';
2323
import {useStorageNodesSelectedColumns} from './StorageNodes/columns/hooks';
2424
import {b} from './shared';
25+
import type {StorageViewContext} from './types';
2526
import {useStorageQueryParams} from './useStorageQueryParams';
2627
import {defaultSortNode, getDefaultSortGroup} from './utils';
2728

@@ -32,9 +33,11 @@ interface StorageProps {
3233
nodeId?: string | number;
3334
groupId?: string | number;
3435
pDiskId?: string | number;
36+
37+
viewContext: StorageViewContext;
3538
}
3639

37-
export const Storage = ({database, nodeId, groupId, pDiskId}: StorageProps) => {
40+
export const Storage = ({database, viewContext, nodeId, groupId, pDiskId}: StorageProps) => {
3841
const {balancer} = useClusterBaseInfo();
3942
const {additionalNodesProps} = useAdditionalNodeProps({balancer});
4043

@@ -75,14 +78,14 @@ export const Storage = ({database, nodeId, groupId, pDiskId}: StorageProps) => {
7578
additionalNodesProps,
7679
visibleEntities,
7780
database,
78-
groupId: groupId?.toString(),
81+
viewContext,
7982
});
8083

8184
const {
8285
columnsToShow: storageGroupsColumnsToShow,
8386
columnsToSelect: storageGroupsColumnsToSelect,
8487
setColumns: setStorageGroupsSelectedColumns,
85-
} = useStorageGroupsSelectedColumns({visibleEntities, nodeId: nodeId?.toString()});
88+
} = useStorageGroupsSelectedColumns({visibleEntities, viewContext});
8689

8790
const nodesQuery = storageApi.useGetStorageNodesInfoQuery(
8891
{

src/containers/Storage/StorageGroups/columns/columns.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ const getVDisksColumn = (data?: GetStorageColumnsData): StorageGroupsColumn => (
220220
<VDiskWithDonorsStack
221221
key={stringifyVdiskId(vDisk.VDiskId)}
222222
data={vDisk}
223-
inactive={!isVdiskActive(vDisk, data)}
223+
inactive={!isVdiskActive(vDisk, data?.viewContext)}
224224
className={b('vdisks-item')}
225225
/>
226226
))}
@@ -237,7 +237,7 @@ const getDisksColumn = (data?: GetStorageColumnsData): StorageGroupsColumn => ({
237237
header: STORAGE_GROUPS_COLUMNS_TITLES.VDisksPDisks,
238238
className: b('disks-column'),
239239
render: ({row}) => {
240-
return <Disks vDisks={row.VDisks} viewContext={data} />;
240+
return <Disks vDisks={row.VDisks} viewContext={data?.viewContext} />;
241241
},
242242
align: DataTable.CENTER,
243243
width: 900,

src/containers/Storage/StorageGroups/columns/hooks.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React from 'react';
22

33
import {VISIBLE_ENTITIES} from '../../../../store/reducers/storage/constants';
44
import {useSelectedColumns} from '../../../../utils/hooks/useSelectedColumns';
5+
import type {StorageViewContext} from '../../types';
56

67
import {getStorageGroupsColumns} from './columns';
78
import {
@@ -13,17 +14,17 @@ import {
1314
} from './constants';
1415
import type {GetStorageGroupsColumnsParams} from './types';
1516

16-
export function useGetStorageGroupsColumns(nodeId?: string) {
17+
export function useGetStorageGroupsColumns(viewContext: StorageViewContext) {
1718
return React.useMemo(() => {
18-
return getStorageGroupsColumns({nodeId});
19-
}, [nodeId]);
19+
return getStorageGroupsColumns({viewContext});
20+
}, [viewContext]);
2021
}
2122

2223
export function useStorageGroupsSelectedColumns({
2324
visibleEntities,
24-
nodeId,
25+
viewContext,
2526
}: GetStorageGroupsColumnsParams) {
26-
const columns = useGetStorageGroupsColumns(nodeId);
27+
const columns = useGetStorageGroupsColumns(viewContext);
2728

2829
const requiredColumns = React.useMemo(() => {
2930
if (visibleEntities === VISIBLE_ENTITIES.missing) {

0 commit comments

Comments
 (0)