Skip to content

Commit b53487e

Browse files
feat(Storage): add columns setup (#1321)
1 parent 1728e61 commit b53487e

32 files changed

+347
-479
lines changed

src/containers/Cluster/Cluster.tsx

+1-4
Original file line numberDiff line numberDiff line change
@@ -173,10 +173,7 @@ export function Cluster({
173173
getLocationObjectFromHref(getClusterPath(clusterTabsIds.storage)).pathname
174174
}
175175
>
176-
<StorageWrapper
177-
parentContainer={container.current}
178-
additionalNodesProps={additionalNodesProps}
179-
/>
176+
<StorageWrapper parentContainer={container.current} />
180177
</Route>
181178
<Route
182179
path={

src/containers/PDiskPage/PDiskGroups/PDiskGroups.tsx

-54
This file was deleted.

src/containers/PDiskPage/PDiskGroups/utils.ts

-19
This file was deleted.

src/containers/PDiskPage/PDiskPage.scss

+14-14
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,29 @@
66
overflow: auto;
77

88
height: 100%;
9+
padding: 0 20px;
910

10-
&__info-content {
11+
&__meta,
12+
&__title,
13+
&__info,
14+
&__controls,
15+
&__tabs {
1116
position: sticky;
1217
left: 0;
1318

14-
display: flex;
15-
flex-direction: column;
16-
gap: 20px;
17-
18-
padding: 20px;
19+
margin-bottom: 20px;
1920
}
2021

21-
&__tabs-content {
22-
padding-left: 20px;
22+
&__meta {
23+
margin-top: 20px;
2324
}
2425

25-
&__meta,
26-
&__title,
27-
&__info,
28-
&__controls,
2926
&__tabs {
30-
position: sticky;
31-
left: 0;
27+
margin-bottom: 0;
28+
}
29+
30+
&__disk-distribution {
31+
padding: 20px 0;
3232
}
3333

3434
&__title {

src/containers/PDiskPage/PDiskPage.tsx

+19-19
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ import {valueIsDefined} from '../../utils';
2424
import {cn} from '../../utils/cn';
2525
import {getPDiskId, getSeverityColor} from '../../utils/disks/helpers';
2626
import {useAutoRefreshInterval, useTypedDispatch, useTypedSelector} from '../../utils/hooks';
27+
import {Storage} from '../Storage/Storage';
2728

2829
import {DecommissionButton} from './DecommissionButton/DecommissionButton';
2930
import {DecommissionLabel} from './DecommissionLabel/DecommissionLabel';
30-
import {PDiskGroups} from './PDiskGroups/PDiskGroups';
3131
import {PDiskSpaceDistribution} from './PDiskSpaceDistribution/PDiskSpaceDistribution';
3232
import {pDiskPageKeyset} from './i18n';
3333

@@ -37,7 +37,7 @@ const pdiskPageCn = cn('ydb-pdisk-page');
3737

3838
const PDISK_TABS_IDS = {
3939
diskDistribution: 'diskDistribution',
40-
groups: 'groups',
40+
storage: 'storage',
4141
} as const;
4242

4343
const PDISK_PAGE_TABS = [
@@ -48,9 +48,9 @@ const PDISK_PAGE_TABS = [
4848
},
4949
},
5050
{
51-
id: PDISK_TABS_IDS.groups,
51+
id: PDISK_TABS_IDS.storage,
5252
get title() {
53-
return pDiskPageKeyset('groups');
53+
return pDiskPageKeyset('storage');
5454
},
5555
},
5656
];
@@ -231,13 +231,15 @@ export function PDiskPage() {
231231
const renderTabsContent = () => {
232232
switch (pDiskTab) {
233233
case 'diskDistribution': {
234-
return pDiskData ? <PDiskSpaceDistribution data={pDiskData} /> : null;
235-
}
236-
case 'groups': {
237-
return pDiskParamsDefined ? (
238-
<PDiskGroups nodeId={nodeId} pDiskId={pDiskId} />
234+
return pDiskData ? (
235+
<div className={pdiskPageCn('disk-distribution')}>
236+
<PDiskSpaceDistribution data={pDiskData} />
237+
</div>
239238
) : null;
240239
}
240+
case 'storage': {
241+
return pDiskParamsDefined ? <Storage nodeId={nodeId} pDiskId={pDiskId} /> : null;
242+
}
241243
default:
242244
return null;
243245
}
@@ -252,16 +254,14 @@ export function PDiskPage() {
252254

253255
return (
254256
<div className={pdiskPageCn(null)}>
255-
<div className={pdiskPageCn('info-content')}>
256-
{renderHelmet()}
257-
{renderPageMeta()}
258-
{renderPageTitle()}
259-
{renderControls()}
260-
{renderError()}
261-
{renderInfo()}
262-
{renderTabs()}
263-
</div>
264-
<div className={pdiskPageCn('tabs-content')}>{renderTabsContent()}</div>
257+
{renderHelmet()}
258+
{renderPageMeta()}
259+
{renderPageTitle()}
260+
{renderControls()}
261+
{renderError()}
262+
{renderInfo()}
263+
{renderTabs()}
264+
{renderTabsContent()}
265265
</div>
266266
);
267267
}

src/containers/PDiskPage/i18n/en.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"pdisk": "PDisk",
44
"node": "Node",
55

6-
"groups": "Groups",
6+
"storage": "Storage",
77
"disk-distribution": "Disk distribution",
88

99
"empty-slot": "Empty slot",

src/containers/Storage/PaginatedStorage.tsx

+42-14
Original file line numberDiff line numberDiff line change
@@ -3,42 +3,59 @@ import {StringParam, useQueryParams} from 'use-query-params';
33
import {AccessDenied} from '../../components/Errors/403/AccessDenied';
44
import {ResponseError} from '../../components/Errors/ResponseError/ResponseError';
55
import type {RenderControls, RenderErrorMessage} from '../../components/PaginatedTable';
6-
import {STORAGE_TYPES, VISIBLE_ENTITIES} from '../../store/reducers/storage/constants';
6+
import {useClusterBaseInfo} from '../../store/reducers/cluster/cluster';
7+
import {VISIBLE_ENTITIES} from '../../store/reducers/storage/constants';
78
import {storageTypeSchema, visibleEntitiesSchema} from '../../store/reducers/storage/types';
89
import type {StorageType, VisibleEntities} from '../../store/reducers/storage/types';
9-
import type {AdditionalNodesProps} from '../../types/additionalProps';
1010
import {NodesUptimeFilterValues, nodesUptimeFilterValuesSchema} from '../../utils/nodes';
11+
import {useAdditionalNodeProps} from '../AppWithClusters/useClusterData';
1112

1213
import {StorageControls} from './StorageControls/StorageControls';
1314
import {PaginatedStorageGroups} from './StorageGroups/PaginatedStorageGroups';
15+
import {useStorageGroupsSelectedColumns} from './StorageGroups/columns/hooks';
1416
import {PaginatedStorageNodes} from './StorageNodes/PaginatedStorageNodes';
15-
16-
import './Storage.scss';
17+
import {useStorageNodesSelectedColumns} from './StorageNodes/columns/hooks';
1718

1819
interface PaginatedStorageProps {
1920
database?: string;
2021
nodeId?: string;
2122
parentContainer?: Element | null;
22-
additionalNodesProps?: AdditionalNodesProps;
2323
}
2424

25-
export const PaginatedStorage = ({
26-
database,
27-
nodeId,
28-
parentContainer,
29-
additionalNodesProps,
30-
}: PaginatedStorageProps) => {
25+
export const PaginatedStorage = ({database, nodeId, parentContainer}: PaginatedStorageProps) => {
26+
const {balancer} = useClusterBaseInfo();
27+
const additionalNodesProps = useAdditionalNodeProps({balancer});
28+
3129
const [queryParams, setQueryParams] = useQueryParams({
3230
type: StringParam,
3331
visible: StringParam,
3432
search: StringParam,
3533
uptimeFilter: StringParam,
3634
});
3735
const storageType = storageTypeSchema.parse(queryParams.type);
36+
const isGroups = storageType === 'groups';
37+
const isNodes = storageType === 'nodes';
38+
3839
const visibleEntities = visibleEntitiesSchema.parse(queryParams.visible);
3940
const searchValue = queryParams.search ?? '';
4041
const nodesUptimeFilter = nodesUptimeFilterValuesSchema.parse(queryParams.uptimeFilter);
4142

43+
const {
44+
columnsToShow: storageNodesColumnsToShow,
45+
columnsToSelect: storageNodesColumnsToSelect,
46+
setColumns: setStorageNodesSelectedColumns,
47+
} = useStorageNodesSelectedColumns({
48+
additionalNodesProps,
49+
visibleEntities,
50+
database,
51+
});
52+
53+
const {
54+
columnsToShow: storageGroupsColumnsToShow,
55+
columnsToSelect: storageGroupsColumnsToSelect,
56+
setColumns: setStorageGroupsSelectedColumns,
57+
} = useStorageGroupsSelectedColumns(visibleEntities);
58+
4259
const handleTextFilterChange = (value: string) => {
4360
setQueryParams({search: value || undefined}, 'replaceIn');
4461
};
@@ -70,11 +87,19 @@ export const PaginatedStorage = ({
7087
};
7188

7289
const renderControls: RenderControls = ({totalEntities, foundEntities, inited}) => {
90+
const columnsToSelect = isGroups
91+
? storageGroupsColumnsToSelect
92+
: storageNodesColumnsToSelect;
93+
94+
const handleSelectedColumnsUpdate = isGroups
95+
? setStorageGroupsSelectedColumns
96+
: setStorageNodesSelectedColumns;
97+
7398
return (
7499
<StorageControls
75100
searchValue={searchValue}
76101
handleSearchValueChange={handleTextFilterChange}
77-
withTypeSelector={!nodeId}
102+
withTypeSelector
78103
storageType={storageType}
79104
handleStorageTypeChange={handleStorageTypeChange}
80105
visibleEntities={visibleEntities}
@@ -85,6 +110,8 @@ export const PaginatedStorage = ({
85110
entitiesCountCurrent={foundEntities}
86111
entitiesCountTotal={totalEntities}
87112
entitiesLoading={!inited}
113+
columnsToSelect={columnsToSelect}
114+
handleSelectedColumnsUpdate={handleSelectedColumnsUpdate}
88115
/>
89116
);
90117
};
@@ -97,18 +124,18 @@ export const PaginatedStorage = ({
97124
return <ResponseError error={error} />;
98125
};
99126

100-
if (storageType === STORAGE_TYPES.nodes) {
127+
if (isNodes) {
101128
return (
102129
<PaginatedStorageNodes
103130
searchValue={searchValue}
104131
visibleEntities={visibleEntities}
105132
nodesUptimeFilter={nodesUptimeFilter}
106133
database={database}
107-
additionalNodesProps={additionalNodesProps}
108134
onShowAll={handleShowAllNodes}
109135
parentContainer={parentContainer}
110136
renderControls={renderControls}
111137
renderErrorMessage={renderErrorMessage}
138+
columns={storageNodesColumnsToShow}
112139
/>
113140
);
114141
}
@@ -123,6 +150,7 @@ export const PaginatedStorage = ({
123150
parentContainer={parentContainer}
124151
renderControls={renderControls}
125152
renderErrorMessage={renderErrorMessage}
153+
columns={storageGroupsColumnsToShow}
126154
/>
127155
);
128156
};

0 commit comments

Comments
 (0)