Skip to content

Commit b808fe9

Browse files
committed
feat(Storage): display donor disks
1 parent 6b625cc commit b808fe9

File tree

3 files changed

+44
-8
lines changed

3 files changed

+44
-8
lines changed

src/containers/Storage/StorageGroups/StorageGroups.scss

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
.global-storage-groups {
2+
&__vdisks-column {
3+
overflow: visible; // to enable stacked disks overflow the row
4+
}
5+
26
&__vdisks-wrapper {
37
display: flex;
48
justify-content: center;
@@ -14,6 +18,14 @@
1418
&:last-child {
1519
margin-right: 0px;
1620
}
21+
22+
.stack__layer {
23+
background: var(--yc-color-base-background);
24+
25+
.data-table__row:hover & {
26+
background: var(--yc-color-base-float-hover);
27+
}
28+
}
1729
}
1830
&__pool-name-wrapper {
1931
display: flex;

src/containers/Storage/StorageGroups/StorageGroups.tsx

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@ import DataTable, {Column, Settings, SortOrder} from '@yandex-cloud/react-data-t
44
import {Popover, PopoverBehavior} from '@yandex-cloud/uikit';
55

66
import Vdisk from '../Vdisk/Vdisk';
7+
import {Stack} from '../../../components/Stack/Stack';
78
//@ts-ignore
89
import EntityStatus from '../../../components/EntityStatus/EntityStatus';
10+
11+
import {TVDiskStateInfo} from '../../../types/api/storage';
912
//@ts-ignore
1013
import {VisibleEntities} from '../../../store/reducers/storage';
1114
//@ts-ignore
@@ -190,17 +193,37 @@ function StorageGroups({data, tableSettings, visibleEntities, nodes}: StorageGro
190193
},
191194
{
192195
name: TableColumnsIds.VDisks,
196+
className: b('vdisks-column'),
193197
header: tableColumnsNames[TableColumnsIds.VDisks],
194198
render: ({value, row}) => (
195199
<div className={b('vdisks-wrapper')}>
196-
{_.map(value as any, (el) => (
197-
<div className={b('vdisks-item')} key={stringifyVdiskId(el.VDiskId)}>
198-
<Vdisk
199-
{...el}
200-
PoolName={row[TableColumnsIds.PoolName]}
201-
nodes={nodes}
202-
/>
203-
</div>
200+
{_.map(value as TVDiskStateInfo[], (el) => (
201+
Array.isArray(el.Donors) && el.Donors.length > 0 ? (
202+
<Stack className={b('vdisks-item')} key={stringifyVdiskId(el.VDiskId)}>
203+
<Vdisk
204+
{...el}
205+
PoolName={row[TableColumnsIds.PoolName]}
206+
nodes={nodes}
207+
/>
208+
{el.Donors.map((donor) => (
209+
<Vdisk
210+
{...donor}
211+
// donor and acceptor are always in the same group
212+
PoolName={row[TableColumnsIds.PoolName]}
213+
nodes={nodes}
214+
key={stringifyVdiskId(donor.VDiskId)}
215+
/>
216+
))}
217+
</Stack>
218+
) : (
219+
<div className={b('vdisks-item')} key={stringifyVdiskId(el.VDiskId)}>
220+
<Vdisk
221+
{...el}
222+
PoolName={row[TableColumnsIds.PoolName]}
223+
nodes={nodes}
224+
/>
225+
</div>
226+
)
204227
))}
205228
</div>
206229
),

src/containers/Storage/Vdisk/Vdisk.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ const propTypes = {
2727
Replicated: PropTypes.bool,
2828
PoolName: PropTypes.string,
2929
VDiskId: PropTypes.object,
30+
nodes: PropTypes.object,
3031
};
3132

3233
const stateSeverity = {

0 commit comments

Comments
 (0)