diff --git a/src/components/FormItem/Descriptions/index.jsx b/src/components/FormItem/Descriptions/index.jsx index 9fe5800a..bdea8535 100644 --- a/src/components/FormItem/Descriptions/index.jsx +++ b/src/components/FormItem/Descriptions/index.jsx @@ -16,7 +16,6 @@ import React, { Component } from 'react'; import { Descriptions, Button } from 'antd'; import { FormOutlined } from '@ant-design/icons'; import { isArray, isUndefined } from 'lodash'; -import { generateId } from 'utils/index'; import styles from './index.less'; export default class index extends Component { @@ -26,7 +25,12 @@ export default class index extends Component { } if (isArray(value)) { // eslint-disable-next-line no-shadow - return value.map((it) =>
{it}
); + return value.map((it, itIndex) => ( + <> +
{it}
+ {itIndex !== value.length - 1 &&
} + + )); } return value; @@ -49,18 +53,22 @@ export default class index extends Component { renderItem() { const { items } = this.props; - const desItems = items.map((it) => { - const { label, value, span } = it; + const desItems = items.map((it, iIndex) => { + const { label, value, span, contentStyle = {} } = it; const desContent = this.getValueContent(value); const options = { label, - key: `item-${generateId()}`, + key: `item-${label}-${iIndex}`, className: styles.label, }; if (span) { options.span = span; } - return {desContent}; + return ( + + {desContent} + + ); }); return ( diff --git a/src/pages/compute/containers/Instance/actions/StepCreate/ConfirmStep/index.jsx b/src/pages/compute/containers/Instance/actions/StepCreate/ConfirmStep/index.jsx index 743097fb..fd014cda 100644 --- a/src/pages/compute/containers/Instance/actions/StepCreate/ConfirmStep/index.jsx +++ b/src/pages/compute/containers/Instance/actions/StepCreate/ConfirmStep/index.jsx @@ -17,6 +17,7 @@ import { inject, observer } from 'mobx-react'; import Base from 'components/Form'; import { physicalNodeTypes } from 'resources/nova/instance'; import { Col, Row } from 'antd'; +import { getAllDataDisks } from 'resources/cinder/snapshot'; export class ConfirmStep extends Base { init() {} @@ -36,7 +37,7 @@ export class ConfirmStep extends Base { allowed = () => Promise.resolve(); getDisk(diskInfo) { - const { size, typeOption, deleteTypeLabel } = diskInfo; + const { size, typeOption, deleteTypeLabel } = diskInfo || {}; return `${typeOption.label} ${size}GiB ${deleteTypeLabel}`; } @@ -66,8 +67,19 @@ export class ConfirmStep extends Base { getDataDisk() { if (!this.enableCinder) return null; const { context } = this.props; - const { dataDisk = [] } = context; - return dataDisk.map((it) => this.getDisk(it.value)); + const { + dataDisk = [], + source: { value } = {}, + instanceSnapshotDataVolumes = [], + } = context; + let allDataDisks = dataDisk; + if ( + value === 'instanceSnapshot' && + instanceSnapshotDataVolumes?.length > 0 + ) { + allDataDisks = getAllDataDisks({ dataDisk, instanceSnapshotDataVolumes }); + } + return allDataDisks.map((it) => this.getDisk(it.value)); } getFlavor() { @@ -213,6 +225,7 @@ export class ConfirmStep extends Base { { label: t('Data Disk'), value: this.getDataDisk(), + contentStyle: { display: 'inline-block' }, }, { label: t('Project'), diff --git a/src/resources/cinder/snapshot.jsx b/src/resources/cinder/snapshot.jsx index c0e3d4fe..9191e8df 100644 --- a/src/resources/cinder/snapshot.jsx +++ b/src/resources/cinder/snapshot.jsx @@ -14,6 +14,7 @@ import globalVolumeTypeStore from 'stores/cinder/volume-type'; import { toJS } from 'mobx'; +import { cloneDeep } from 'lodash'; export const volumeTypes = () => { return (globalVolumeTypeStore.list.data || []).map((it) => ({ @@ -58,3 +59,15 @@ export const getInstanceSnapshotDataDisk = (disk) => { }); return instanceSnapshotDataDisk; }; + +export const getAllDataDisks = ({ + dataDisk = [], + instanceSnapshotDataVolumes = [], +}) => { + const allDataDisks = cloneDeep(dataDisk); + instanceSnapshotDataVolumes?.forEach((i) => { + const disk = getInstanceSnapshotDataDisk(i) || {}; + allDataDisks.unshift({ value: disk }); + }); + return allDataDisks; +};