Skip to content

Commit d94a324

Browse files
authored
M #-: Always render disk snapshot revert button (#3888)
Signed-off-by: Victor Hansson <vhansson@opennebula.io>
1 parent 263087b commit d94a324

File tree

29 files changed

+323
-538
lines changed

29 files changed

+323
-538
lines changed

src/fireedge/src/modules/components/Forms/Labels/CreateForm/schema.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ const PARENT = {
5959
const [, TYPE] = deps
6060
const { labels } = useAuth()
6161

62-
const labelsArray = [].concat(labelsToArray(labels)?.[TYPE])
62+
const labelsArray = []
63+
.concat(labelsToArray(labels)?.[TYPE])
64+
?.filter(Boolean)
6365

6466
return arrayToOptions(labelsArray, {
6567
addEmpty: false,

src/fireedge/src/modules/components/ResourcesBackButton/index.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,14 @@ const ResourcesBackButton = memo(
9696
const hasSelectedRows = countSelectedRows > 0
9797

9898
useEffect(() => {
99-
;(FULL_SCREEN_INFO === 'true' || fullViewMode === 'true') &&
100-
setFullMode(true)
99+
const viewMode =
100+
FULL_SCREEN_INFO === 'true' ||
101+
(typeof FULL_SCREEN_INFO === 'boolean' && FULL_SCREEN_INFO) ||
102+
fullViewMode === 'true' ||
103+
(typeof fullViewMode === 'boolean' && fullViewMode) ||
104+
false
105+
106+
setFullMode(viewMode)
101107

102108
setTableViewMode(ROW_STYLE || rowStyle)
103109
}, [])

src/fireedge/src/modules/components/Tabs/Vm/Storage/Actions.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -353,10 +353,11 @@ const SnapshotRenameAction = memo(({ vmId, disk, snapshot, sx }) => {
353353
)
354354
})
355355

356-
const SnapshotRevertAction = memo(({ vmId, disk, snapshot, sx }) => {
356+
const SnapshotRevertAction = memo(({ vmState, vmId, disk, snapshot, sx }) => {
357357
const [revertDiskSnapshot] = VmAPI.useRevertDiskSnapshotMutation()
358358
const { DISK_ID } = disk
359359
const { ID, NAME = T.Snapshot } = snapshot
360+
const isDisabled = parseInt(vmState, 10) !== 8 // POWEROFF
360361

361362
const handleRevert = async () => {
362363
await revertDiskSnapshot({ id: vmId, disk: DISK_ID, snapshot: ID })
@@ -367,8 +368,9 @@ const SnapshotRevertAction = memo(({ vmId, disk, snapshot, sx }) => {
367368
buttonProps={{
368369
'data-cy': `${VM_ACTIONS.SNAPSHOT_DISK_REVERT}-${DISK_ID}-${ID}`,
369370
icon: <UndoAction />,
370-
tooltip: Tr(T.Revert),
371+
tooltip: Tr(T.RevertInfo),
371372
sx,
373+
disabled: isDisabled,
372374
}}
373375
options={[
374376
{
@@ -421,6 +423,7 @@ const SnapshotDeleteAction = memo(({ vmId, disk, snapshot, sx }) => {
421423

422424
const ActionPropTypes = {
423425
vmId: PropTypes.string,
426+
vmState: PropTypes.string,
424427
hypervisor: PropTypes.string,
425428
disk: PropTypes.object,
426429
snapshot: PropTypes.object,

src/fireedge/src/modules/components/Tabs/Vm/Storage/index.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,12 @@ const VmStorageTab = ({
9595
{disks.map((disk) => {
9696
const isImage = disk.IMAGE_ID !== undefined
9797
const imageName = getDiskName(disk)
98-
const diskActionProps = { vmId: id, disk, name: imageName }
98+
const diskActionProps = {
99+
vmState: vm?.STATE,
100+
vmId: id,
101+
disk,
102+
name: imageName,
103+
}
99104

100105
return (
101106
<DiskCard

src/fireedge/src/modules/constants/translates.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ module.exports = {
204204
Retry: 'Retry',
205205
Restore: 'Restore',
206206
Revert: 'Revert',
207+
RevertInfo: 'VM must be powered off in order to revert disk snapshots.',
207208
RevertSomething: 'Revert: %s',
208209
Save: 'Save',
209210
SaveAs: 'Save as',

src/fireedge/src/modules/constants/vm.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1053,7 +1053,11 @@ export const DUMMY_VM_ACTIONS_BY_STATE = {
10531053
STATES.RUNNING,
10541054
],
10551055
[VM_ACTIONS.SNAPSHOT_DISK_RENAME]: [],
1056-
[VM_ACTIONS.SNAPSHOT_DISK_REVERT]: [STATES.SUSPENDED, STATES.POWEROFF],
1056+
[VM_ACTIONS.SNAPSHOT_DISK_REVERT]: [
1057+
STATES.SUSPENDED,
1058+
STATES.POWEROFF,
1059+
STATES.RUNNING,
1060+
],
10571061
[VM_ACTIONS.SNAPSHOT_DISK_DELETE]: [
10581062
STATES.SUSPENDED,
10591063
STATES.POWEROFF,

src/fireedge/src/modules/containers/BackupJobs/BackupJobs.js

Lines changed: 13 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,8 @@ import {
2424
Tr,
2525
TranslateProvider,
2626
} from '@ComponentsModule'
27-
import { RESOURCE_NAMES, SERVER_CONFIG, T } from '@ConstantsModule'
28-
import {
29-
BackupJobAPI,
30-
useAuth,
31-
useGeneral,
32-
useGeneralApi,
33-
} from '@FeaturesModule'
27+
import { RESOURCE_NAMES, T } from '@ConstantsModule'
28+
import { BackupJobAPI, useGeneral, useGeneralApi } from '@FeaturesModule'
3429
import { Chip, Stack } from '@mui/material'
3530
import {
3631
Cancel,
@@ -109,11 +104,6 @@ const InfoTabs = memo(({ template, gotoPage, unselect, selectedRows }) => {
109104
BackupJobAPI.useLazyGetBackupJobQuery()
110105
const id = template?.ID ?? data?.ID
111106

112-
const { settings: { FIREEDGE: fireedge = {} } = {} } = useAuth()
113-
const { FULL_SCREEN_INFO } = fireedge
114-
const { fullViewMode } = SERVER_CONFIG
115-
const fullModeDefault =
116-
FULL_SCREEN_INFO === 'true' || fullViewMode === 'true' || false
117107
const { isFullMode } = useGeneral()
118108
const { setFullMode } = useGeneralApi()
119109

@@ -132,7 +122,7 @@ const InfoTabs = memo(({ template, gotoPage, unselect, selectedRows }) => {
132122
mb={1}
133123
>
134124
<Stack direction="row">
135-
{fullModeDefault && (
125+
{isFullMode && (
136126
<SubmitButton
137127
data-cy="detail-back"
138128
icon={<NavArrowLeft />}
@@ -144,23 +134,21 @@ const InfoTabs = memo(({ template, gotoPage, unselect, selectedRows }) => {
144134
</Stack>
145135

146136
<Stack direction="row" alignItems="center" gap={1} mx={1} mb={1}>
147-
{fullModeDefault && (
137+
{isFullMode && (
148138
<GlobalLabel
149139
selectedRows={selectedRows}
150140
type={RESOURCE_NAMES?.BACKUPJOBS}
151141
/>
152142
)}
153-
{!fullModeDefault && (
154-
<SubmitButton
155-
data-cy="detail-full-mode"
156-
icon={isFullMode ? <Collapse /> : <Expand />}
157-
tooltip={Tr(T.FullScreen)}
158-
isSubmitting={isFetching}
159-
onClick={() => {
160-
setFullMode(!isFullMode)
161-
}}
162-
/>
163-
)}
143+
<SubmitButton
144+
data-cy="detail-full-mode"
145+
icon={isFullMode ? <Collapse /> : <Expand />}
146+
tooltip={Tr(T.FullScreen)}
147+
isSubmitting={isFetching}
148+
onClick={() => {
149+
setFullMode(!isFullMode)
150+
}}
151+
/>
164152
<SubmitButton
165153
data-cy="detail-refresh"
166154
icon={<RefreshDouble />}

src/fireedge/src/modules/containers/Backups/Backups.js

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ import {
2424
Tr,
2525
TranslateProvider,
2626
} from '@ComponentsModule'
27-
import { Image, RESOURCE_NAMES, SERVER_CONFIG, T } from '@ConstantsModule'
28-
import { ImageAPI, useAuth, useGeneral, useGeneralApi } from '@FeaturesModule'
27+
import { Image, RESOURCE_NAMES, T } from '@ConstantsModule'
28+
import { ImageAPI, useGeneral, useGeneralApi } from '@FeaturesModule'
2929
import { Chip, Stack } from '@mui/material'
3030
import {
3131
Cancel,
@@ -107,11 +107,6 @@ const InfoTabs = memo(({ image, gotoPage, unselect, selectedRows }) => {
107107
ImageAPI.useLazyGetImageQuery()
108108
const id = image?.ID ?? lazyData?.ID
109109

110-
const { settings: { FIREEDGE: fireedge = {} } = {} } = useAuth()
111-
const { FULL_SCREEN_INFO } = fireedge
112-
const { fullViewMode } = SERVER_CONFIG
113-
const fullModeDefault =
114-
FULL_SCREEN_INFO === 'true' || fullViewMode === 'true' || false
115110
const { isFullMode } = useGeneral()
116111
const { setFullMode } = useGeneralApi()
117112

@@ -130,7 +125,7 @@ const InfoTabs = memo(({ image, gotoPage, unselect, selectedRows }) => {
130125
mb={1}
131126
>
132127
<Stack direction="row">
133-
{fullModeDefault && (
128+
{isFullMode && (
134129
<SubmitButton
135130
data-cy="detail-back"
136131
icon={<NavArrowLeft />}
@@ -142,23 +137,21 @@ const InfoTabs = memo(({ image, gotoPage, unselect, selectedRows }) => {
142137
</Stack>
143138

144139
<Stack direction="row" alignItems="center" gap={1} mx={1} mb={1}>
145-
{fullModeDefault && (
140+
{isFullMode && (
146141
<GlobalLabel
147142
selectedRows={selectedRows}
148143
type={RESOURCE_NAMES?.BACKUP}
149144
/>
150145
)}
151-
{!fullModeDefault && (
152-
<SubmitButton
153-
data-cy="detail-full-mode"
154-
icon={isFullMode ? <Collapse /> : <Expand />}
155-
tooltip={Tr(T.FullScreen)}
156-
isSubmitting={isFetching}
157-
onClick={() => {
158-
setFullMode(!isFullMode)
159-
}}
160-
/>
161-
)}
146+
<SubmitButton
147+
data-cy="detail-full-mode"
148+
icon={isFullMode ? <Collapse /> : <Expand />}
149+
tooltip={Tr(T.FullScreen)}
150+
isSubmitting={isFetching}
151+
onClick={() => {
152+
setFullMode(!isFullMode)
153+
}}
154+
/>
162155
<SubmitButton
163156
data-cy="detail-refresh"
164157
icon={<RefreshDouble />}

src/fireedge/src/modules/containers/Clusters/Clusters.js

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ import {
2424
Tr,
2525
TranslateProvider,
2626
} from '@ComponentsModule'
27-
import { Cluster, RESOURCE_NAMES, SERVER_CONFIG, T } from '@ConstantsModule'
28-
import { ClusterAPI, useAuth, useGeneral, useGeneralApi } from '@FeaturesModule'
27+
import { Cluster, RESOURCE_NAMES, T } from '@ConstantsModule'
28+
import { ClusterAPI, useGeneral, useGeneralApi } from '@FeaturesModule'
2929
import { Chip, Stack } from '@mui/material'
3030
import {
3131
Cancel,
@@ -105,11 +105,6 @@ const InfoTabs = memo(({ cluster, gotoPage, unselect, selectedRows }) => {
105105
ClusterAPI.useLazyGetClustersQuery()
106106
const id = cluster?.ID ?? lazyData?.ID
107107

108-
const { settings: { FIREEDGE: fireedge = {} } = {} } = useAuth()
109-
const { FULL_SCREEN_INFO } = fireedge
110-
const { fullViewMode } = SERVER_CONFIG
111-
const fullModeDefault =
112-
FULL_SCREEN_INFO === 'true' || fullViewMode === 'true' || false
113108
const { isFullMode } = useGeneral()
114109
const { setFullMode } = useGeneralApi()
115110

@@ -128,7 +123,7 @@ const InfoTabs = memo(({ cluster, gotoPage, unselect, selectedRows }) => {
128123
mb={1}
129124
>
130125
<Stack direction="row">
131-
{fullModeDefault && (
126+
{isFullMode && (
132127
<SubmitButton
133128
data-cy="detail-back"
134129
icon={<NavArrowLeft />}
@@ -140,23 +135,21 @@ const InfoTabs = memo(({ cluster, gotoPage, unselect, selectedRows }) => {
140135
</Stack>
141136

142137
<Stack direction="row" alignItems="center" gap={1} mx={1} mb={1}>
143-
{fullModeDefault && (
138+
{isFullMode && (
144139
<GlobalLabel
145140
selectedRows={selectedRows}
146141
type={RESOURCE_NAMES?.CLUSTER}
147142
/>
148143
)}
149-
{!fullModeDefault && (
150-
<SubmitButton
151-
data-cy="detail-full-mode"
152-
icon={isFullMode ? <Collapse /> : <Expand />}
153-
tooltip={Tr(T.FullScreen)}
154-
isSubmitting={isFetching}
155-
onClick={() => {
156-
setFullMode(!isFullMode)
157-
}}
158-
/>
159-
)}
144+
<SubmitButton
145+
data-cy="detail-full-mode"
146+
icon={isFullMode ? <Collapse /> : <Expand />}
147+
tooltip={Tr(T.FullScreen)}
148+
isSubmitting={isFetching}
149+
onClick={() => {
150+
setFullMode(!isFullMode)
151+
}}
152+
/>
160153
<SubmitButton
161154
data-cy="detail-refresh"
162155
icon={<RefreshDouble />}

src/fireedge/src/modules/containers/Datastores/Datastores.js

Lines changed: 13 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,8 @@ import {
2424
Tr,
2525
TranslateProvider,
2626
} from '@ComponentsModule'
27-
import { Datastore, RESOURCE_NAMES, SERVER_CONFIG, T } from '@ConstantsModule'
28-
import {
29-
DatastoreAPI,
30-
useAuth,
31-
useGeneral,
32-
useGeneralApi,
33-
} from '@FeaturesModule'
27+
import { Datastore, RESOURCE_NAMES, T } from '@ConstantsModule'
28+
import { DatastoreAPI, useGeneral, useGeneralApi } from '@FeaturesModule'
3429
import { Chip, Stack } from '@mui/material'
3530
import {
3631
Cancel,
@@ -109,11 +104,6 @@ const InfoTabs = memo(({ datastore, gotoPage, unselect, selectedRows }) => {
109104
DatastoreAPI.useLazyGetDatastoreQuery()
110105
const id = datastore?.ID ?? lazyData?.ID
111106

112-
const { settings: { FIREEDGE: fireedge = {} } = {} } = useAuth()
113-
const { FULL_SCREEN_INFO } = fireedge
114-
const { fullViewMode } = SERVER_CONFIG
115-
const fullModeDefault =
116-
FULL_SCREEN_INFO === 'true' || fullViewMode === 'true' || false
117107
const { isFullMode } = useGeneral()
118108
const { setFullMode } = useGeneralApi()
119109

@@ -132,7 +122,7 @@ const InfoTabs = memo(({ datastore, gotoPage, unselect, selectedRows }) => {
132122
mb={1}
133123
>
134124
<Stack direction="row">
135-
{fullModeDefault && (
125+
{isFullMode && (
136126
<SubmitButton
137127
data-cy="detail-back"
138128
icon={<NavArrowLeft />}
@@ -144,23 +134,21 @@ const InfoTabs = memo(({ datastore, gotoPage, unselect, selectedRows }) => {
144134
</Stack>
145135

146136
<Stack direction="row" alignItems="center" gap={1} mx={1} mb={1}>
147-
{fullModeDefault && (
137+
{isFullMode && (
148138
<GlobalLabel
149139
selectedRows={selectedRows}
150140
type={RESOURCE_NAMES?.DATASTORE}
151141
/>
152142
)}
153-
{!fullModeDefault && (
154-
<SubmitButton
155-
data-cy="detail-full-mode"
156-
icon={isFullMode ? <Collapse /> : <Expand />}
157-
tooltip={Tr(T.FullScreen)}
158-
isSubmitting={isFetching}
159-
onClick={() => {
160-
setFullMode(!isFullMode)
161-
}}
162-
/>
163-
)}
143+
<SubmitButton
144+
data-cy="detail-full-mode"
145+
icon={isFullMode ? <Collapse /> : <Expand />}
146+
tooltip={Tr(T.FullScreen)}
147+
isSubmitting={isFetching}
148+
onClick={() => {
149+
setFullMode(!isFullMode)
150+
}}
151+
/>
164152
<SubmitButton
165153
data-cy="detail-refresh"
166154
icon={<RefreshDouble />}

0 commit comments

Comments
 (0)