Skip to content

Commit db0c8d2

Browse files
authoredNov 8, 2024
[ACM-15251] Conditional VirtualMachine actions based on status (stolostron#4051)
* [ACM-15251] Conditional VirtualMachine actions based on status Signed-off-by: zlayne <zlayne@redhat.com> * update test Signed-off-by: zlayne <zlayne@redhat.com> * fix lint Signed-off-by: zlayne <zlayne@redhat.com> --------- Signed-off-by: zlayne <zlayne@redhat.com>
1 parent 411790c commit db0c8d2

File tree

7 files changed

+568
-18
lines changed

7 files changed

+568
-18
lines changed
 

‎frontend/public/locales/en/translation.json

+7
Original file line numberDiff line numberDiff line change
@@ -1105,6 +1105,7 @@
11051105
"Delete resources that are no longer defined in the source repository at the end of a sync operation": "Delete resources that are no longer defined in the source repository at the end of a sync operation",
11061106
"Delete saved search?": "Delete saved search?",
11071107
"Delete subscription": "Delete subscription",
1108+
"Delete VirtualMachine": "Delete VirtualMachine",
11081109
"delete-chip": "delete-chip",
11091110
"deleting": "Deleting",
11101111
"Deleting": "Deleting",
@@ -1240,6 +1241,7 @@
12401241
"Edit policy set": "Edit policy set",
12411242
"Edit subscription": "Edit subscription",
12421243
"Edit time window": "Edit time window",
1244+
"Edit VirtualMachine": "Edit VirtualMachine",
12431245
"edit.yaml.off": "YAML: Off",
12441246
"edit.yaml.on": "YAML: On",
12451247
"edit.yaml.on.ro": "YAML (read only): On",
@@ -2046,6 +2048,7 @@
20462048
"Path": "Path",
20472049
"Pathname": "Pathname",
20482050
"Pause {{resourceKind}}": "Pause {{resourceKind}}",
2051+
"Pause VirtualMachine": "Pause VirtualMachine",
20492052
"pending": "pending",
20502053
"Pending": "Pending",
20512054
"pending: {{count}} cluster": "pending: {{count}} cluster",
@@ -2294,6 +2297,7 @@
22942297
"Resources with \"failed\" or \"pending\" status.": "Resources with \"failed\" or \"pending\" status.",
22952298
"Response action": "Response action",
22962299
"Restart {{resourceKind}}": "Restart {{resourceKind}}",
2300+
"Restart VirtualMachine": "Restart VirtualMachine",
22972301
"Restarts": "Restarts",
22982302
"Restore defaults": "Restore defaults",
22992303
"Restricted networks which do not have direct access to the Internet require a mirror location of the Red Hat Enterprise Linux CoreOS image.": "Restricted networks which do not have direct access to the Internet require a mirror location of the Red Hat Enterprise Linux CoreOS image.",
@@ -2459,6 +2463,7 @@
24592463
"Standards": "Standards",
24602464
"Start {{resourceKind}}": "Start {{resourceKind}}",
24612465
"Start time": "Start time",
2466+
"Start VirtualMachine": "Start VirtualMachine",
24622467
"Starting CSV": "Starting CSV",
24632468
"Status": "Status",
24642469
"Status icon legend": "Status icon legend",
@@ -2563,6 +2568,7 @@
25632568
"status.upgradefailed.message": "The cluster upgrade is in a failure state.",
25642569
"Stay": "Stay",
25652570
"Stop {{resourceKind}}": "Stop {{resourceKind}}",
2571+
"Stop VirtualMachine": "Stop VirtualMachine",
25662572
"Storage Optimized": "Storage Optimized",
25672573
"Subfolder": "Subfolder",
25682574
"Subject kind": "Subject kind",
@@ -3069,6 +3075,7 @@
30693075
"unknown: {{count}} policy": "unknown: {{count}} policy",
30703076
"unknown: {{count}} policy_plural": "unknown: {{count}} policies",
30713077
"Unpause {{resourceKind}}": "Unpause {{resourceKind}}",
3078+
"Unpause VirtualMachine": "Unpause VirtualMachine",
30723079
"Unprocessable entity": "Unprocessable entity",
30733080
"update": "Update",
30743081
"Update automation template": "Update automation template",

‎frontend/src/routes/Infrastructure/VirtualMachines/VirtualMachinesPage.tsx

+28-11
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@ import {
1212
Title,
1313
} from '@patternfly/react-core'
1414
import { ExclamationCircleIcon, ExternalLinkAltIcon } from '@patternfly/react-icons'
15-
import { Fragment, useMemo, useState } from 'react'
15+
import { Fragment, useCallback, useContext, useMemo, useState } from 'react'
16+
import { useNavigate } from 'react-router-dom-v5-compat'
1617
import { Pages, usePageVisitMetricHandler } from '../../../hooks/console-metrics'
1718
import { useTranslation } from '../../../lib/acm-i18next'
19+
import { OCP_DOC } from '../../../lib/doc-util'
1820
import { useRecoilValue, useSharedAtoms } from '../../../shared-recoil'
1921
import {
2022
AcmButton,
@@ -23,6 +25,7 @@ import {
2325
AcmPageContent,
2426
AcmPageHeader,
2527
AcmTable,
28+
AcmToastContext,
2629
compareStrings,
2730
ITableFilter,
2831
} from '../../../ui-components'
@@ -40,11 +43,17 @@ import { convertStringToQuery } from '../../Search/search-helper'
4043
import { searchClient } from '../../Search/search-sdk/search-client'
4144
import { useSearchResultItemsQuery } from '../../Search/search-sdk/search-sdk'
4245
import { useSearchDefinitions } from '../../Search/searchDefinitions'
43-
import { ISearchResult, useGetRowActions } from '../../Search/SearchResults/utils'
44-
import { OCP_DOC } from '../../../lib/doc-util'
46+
import { ISearchResult } from '../../Search/SearchResults/utils'
47+
import { useAllClusters } from '../Clusters/ManagedClusters/components/useAllClusters'
48+
import { getVirtualMachineRowActions } from './utils'
4549

4650
function VirtualMachineTable() {
4751
const { t } = useTranslation()
52+
const navigate = useNavigate()
53+
const { settingsState } = useSharedAtoms()
54+
const vmActionsEnabled = useRecoilValue(settingsState)?.VIRTUAL_MACHINE_ACTIONS === 'enabled'
55+
const toast = useContext(AcmToastContext)
56+
const allClusters = useAllClusters(true)
4857
const [deleteResource, setDeleteResource] = useState<IDeleteModalProps>(ClosedDeleteModalProps)
4958
const [deleteExternalResource, setDeleteExternalResource] = useState<IDeleteExternalResourceModalProps>(
5059
ClosedDeleteExternalResourceModalProps
@@ -55,12 +64,20 @@ function VirtualMachineTable() {
5564
const clusterVersion = clusterVersions?.[0]
5665
const ocpVersion = getMajorMinorVersion(getCurrentClusterVersion(clusterVersion)) || 'latest'
5766

58-
const rowActions = useGetRowActions(
59-
'virtualmachine',
60-
'kind:VirtualMachine,VirtualMachineInstance',
61-
false,
62-
setDeleteResource,
63-
setDeleteExternalResource
67+
const rowActionResolver = useCallback(
68+
(item: any) => {
69+
return getVirtualMachineRowActions(
70+
item,
71+
allClusters,
72+
setDeleteResource,
73+
setDeleteExternalResource,
74+
vmActionsEnabled,
75+
toast,
76+
navigate,
77+
t
78+
)
79+
},
80+
[allClusters, navigate, t, toast, vmActionsEnabled]
6481
)
6582

6683
const { data, loading, error } = useSearchResultItemsQuery({
@@ -90,7 +107,7 @@ function VirtualMachineTable() {
90107
}
91108
return acc
92109
}, {})
93-
return Object.values(reducedVMAndVMI)
110+
return Object.values(reducedVMAndVMI ?? {})
94111
}, [data?.searchResult, error, loading])
95112

96113
const filters = useMemo<ITableFilter<any>[]>(() => {
@@ -152,7 +169,7 @@ function VirtualMachineTable() {
152169
items={searchResultItems}
153170
columns={searchDefinitions['virtualmachinespage'].columns}
154171
filters={filters}
155-
rowActions={rowActions}
172+
rowActionResolver={rowActionResolver}
156173
keyFn={(item: any) => item._uid.toString()}
157174
emptyState={
158175
<AcmEmptyState

0 commit comments

Comments
 (0)
Failed to load comments.