From fe6bb353297df4fa4d689417e5b5924788e15c27 Mon Sep 17 00:00:00 2001
From: Sharon Gratch
Date: Thu, 12 Dec 2024 18:43:20 +0200
Subject: [PATCH] Refactoring: replace plan phases strigs with const enums
Reference: https://github.com/kubev2v/forklift-console-plugin/pull/1395#discussion_r1861292874
Signed-off-by: Sharon Gratch
---
.../actions/PlanActionsDropdownItems.tsx | 5 ++-
.../src/modules/Plans/modals/ArchiveModal.tsx | 6 +--
.../modules/Plans/modals/PlanDeleteModal.tsx | 6 +--
.../Plans/utils/constants/planPhases.ts | 24 +++++------
.../Plans/utils/helpers/getPhaseLabel.ts | 30 -------------
.../Plans/utils/helpers/getPlanPhase.ts | 42 +++++++++----------
.../utils/helpers/getPlanProgressVariant.ts | 14 +++----
.../src/modules/Plans/utils/helpers/index.ts | 1 -
.../modules/Plans/utils/types/PlanPhase.ts | 39 +++++++++++------
.../components/MigrationsTable.tsx | 11 ++---
.../details/components/PlanPageHeadings.tsx | 4 +-
.../views/list/components/ErrorStatusCell.tsx | 4 +-
.../views/list/components/StatusCell.tsx | 18 ++++----
.../views/list/components/VMsProgressCell.tsx | 3 +-
14 files changed, 94 insertions(+), 113 deletions(-)
delete mode 100644 packages/forklift-console-plugin/src/modules/Plans/utils/helpers/getPhaseLabel.ts
diff --git a/packages/forklift-console-plugin/src/modules/Plans/actions/PlanActionsDropdownItems.tsx b/packages/forklift-console-plugin/src/modules/Plans/actions/PlanActionsDropdownItems.tsx
index 3d22954f5..541d95c15 100644
--- a/packages/forklift-console-plugin/src/modules/Plans/actions/PlanActionsDropdownItems.tsx
+++ b/packages/forklift-console-plugin/src/modules/Plans/actions/PlanActionsDropdownItems.tsx
@@ -21,6 +21,7 @@ import {
isPlanArchived,
isPlanExecuting,
PlanData,
+ PlanPhase,
} from '../utils';
export const PlanActionsDropdownItems = ({ data }: PlanActionsDropdownItemsProps) => {
@@ -93,7 +94,9 @@ export const PlanActionsDropdownItems = ({ data }: PlanActionsDropdownItemsProps
{t('Archive Plan')}
diff --git a/packages/forklift-console-plugin/src/modules/Plans/modals/ArchiveModal.tsx b/packages/forklift-console-plugin/src/modules/Plans/modals/ArchiveModal.tsx
index e99fbf42c..805573071 100644
--- a/packages/forklift-console-plugin/src/modules/Plans/modals/ArchiveModal.tsx
+++ b/packages/forklift-console-plugin/src/modules/Plans/modals/ArchiveModal.tsx
@@ -8,7 +8,7 @@ import { PlanModel, V1beta1Plan } from '@kubev2v/types';
import { K8sModel, k8sPatch } from '@openshift-console/dynamic-plugin-sdk';
import { Alert, Button, Modal, ModalVariant } from '@patternfly/react-core';
-import { getPlanPhase } from '../utils';
+import { getPlanPhase, PlanPhase } from '../utils';
/**
* Props for the DeleteModal component
@@ -70,7 +70,7 @@ export const ArchiveModal: React.FC = ({ title, resource, red
const actions = [
}
- {phase === 'Running' && }
+ {phase === PlanPhase.Running && }
{alertMessage}
);
diff --git a/packages/forklift-console-plugin/src/modules/Plans/modals/PlanDeleteModal.tsx b/packages/forklift-console-plugin/src/modules/Plans/modals/PlanDeleteModal.tsx
index d87c48284..6336879a5 100644
--- a/packages/forklift-console-plugin/src/modules/Plans/modals/PlanDeleteModal.tsx
+++ b/packages/forklift-console-plugin/src/modules/Plans/modals/PlanDeleteModal.tsx
@@ -9,7 +9,7 @@ import { V1beta1Plan } from '@kubev2v/types';
import { k8sDelete, K8sGroupVersionKind, K8sModel } from '@openshift-console/dynamic-plugin-sdk';
import { Alert, Button, Modal, ModalVariant } from '@patternfly/react-core';
-import { getPlanPhase } from '../utils';
+import { getPlanPhase, PlanPhase } from '../utils';
/**
* Props for the DeleteModal component
@@ -131,8 +131,8 @@ export const PlanDeleteModal: React.FC = ({
Are you sure you want to delete {name}?
)}
- {phase === 'Running' && }
- {phase !== 'Archived' && }
+ {phase === PlanPhase.Running && }
+ {phase !== PlanPhase.Archived && }
{typeof owner === 'object' && }
{alertMessage}
diff --git a/packages/forklift-console-plugin/src/modules/Plans/utils/constants/planPhases.ts b/packages/forklift-console-plugin/src/modules/Plans/utils/constants/planPhases.ts
index cb6a2b058..0ca05c486 100644
--- a/packages/forklift-console-plugin/src/modules/Plans/utils/constants/planPhases.ts
+++ b/packages/forklift-console-plugin/src/modules/Plans/utils/constants/planPhases.ts
@@ -9,16 +9,16 @@ import { PlanPhase } from '../types';
* This array is intended to be used for creating filter dropdowns, where users can select a plan phase to filter the results shown.
*/
export const planPhases: { id: PlanPhase; label: string }[] = [
- { id: 'Error', label: 'Error' },
- { id: 'vmError', label: 'VM Error' },
- { id: 'Unknown', label: 'Unknown' },
- { id: 'Archiving', label: 'Archiving' },
- { id: 'Archived', label: 'Archived' },
- { id: 'Failed', label: 'Failed' },
- { id: 'Canceled', label: 'Canceled' },
- { id: 'Succeeded', label: 'Succeeded' },
- { id: 'Running', label: 'Running' },
- { id: 'Ready', label: 'Ready' },
- { id: 'Warning', label: 'Warning' },
- { id: 'NotReady', label: 'Not Ready' },
+ { id: PlanPhase.Error, label: PlanPhase.Error },
+ { id: PlanPhase.vmError, label: PlanPhase.vmError },
+ { id: PlanPhase.Unknown, label: PlanPhase.Unknown },
+ { id: PlanPhase.Archiving, label: PlanPhase.Archiving },
+ { id: PlanPhase.Archived, label: PlanPhase.Archived },
+ { id: PlanPhase.Failed, label: PlanPhase.Failed },
+ { id: PlanPhase.Canceled, label: PlanPhase.Canceled },
+ { id: PlanPhase.Succeeded, label: PlanPhase.Succeeded },
+ { id: PlanPhase.Running, label: PlanPhase.Running },
+ { id: PlanPhase.Ready, label: PlanPhase.Ready },
+ { id: PlanPhase.Warning, label: PlanPhase.Warning },
+ { id: PlanPhase.NotReady, label: PlanPhase.NotReady },
];
diff --git a/packages/forklift-console-plugin/src/modules/Plans/utils/helpers/getPhaseLabel.ts b/packages/forklift-console-plugin/src/modules/Plans/utils/helpers/getPhaseLabel.ts
deleted file mode 100644
index 1c5daa414..000000000
--- a/packages/forklift-console-plugin/src/modules/Plans/utils/helpers/getPhaseLabel.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import { PlanPhase } from '../types';
-
-export const getPhaseLabel = (phase: PlanPhase) => phaseLabels?.[phase] ?? 'Unknown';
-
-const phaseLabels: Record = {
- // t('Ready')
- Ready: 'Ready',
- // t('Not Ready')
- NotReady: 'Not Ready',
- // t('Running')
- Running: 'Running',
- // t('Succeeded')
- Succeeded: 'Succeeded',
- // t('Canceled')
- Canceled: 'Canceled',
- // t('Failed')
- Failed: 'Failed',
- // t('Archived')
- Archived: 'Archived',
- // t('Archiving')
- Archiving: 'Archiving',
- // t('Error')
- Error: 'Error',
- // t('Warning')
- Warning: 'Warning',
- // t('Some VMs Failed')
- vmError: 'Some VMs Failed',
- // t('Unknown')
- Unknown: 'Unknown',
-};
diff --git a/packages/forklift-console-plugin/src/modules/Plans/utils/helpers/getPlanPhase.ts b/packages/forklift-console-plugin/src/modules/Plans/utils/helpers/getPlanPhase.ts
index c5712f3c8..ce480752c 100644
--- a/packages/forklift-console-plugin/src/modules/Plans/utils/helpers/getPlanPhase.ts
+++ b/packages/forklift-console-plugin/src/modules/Plans/utils/helpers/getPlanPhase.ts
@@ -5,37 +5,37 @@ import { PlanData, PlanPhase } from '../types';
export const getPlanPhase = (data: PlanData): PlanPhase => {
const plan = data?.obj;
- if (!plan) return 'Unknown';
+ if (!plan) return PlanPhase.Unknown;
// Check condition type
const conditions = getConditions(plan);
if (!conditions || conditions?.length < 1) {
- return 'Unknown';
+ return PlanPhase.Unknown;
}
// Check for Archived
if (plan?.spec?.archived && !conditions.includes('Archived')) {
- return 'Archiving';
+ return PlanPhase.Archiving;
}
if (conditions.includes('Archived')) {
- return 'Archived';
+ return PlanPhase.Archived;
}
// Check for Succeeded
if (conditions.includes('Succeeded')) {
- return 'Succeeded';
+ return PlanPhase.Succeeded;
}
// Check for Canceled
if (conditions.includes('Canceled')) {
- return 'Canceled';
+ return PlanPhase.Canceled;
}
// CHeck for Running
if (conditions.includes('Executing')) {
- return 'Running';
+ return PlanPhase.Running;
}
// Check condition category
@@ -44,18 +44,18 @@ export const getPlanPhase = (data: PlanData): PlanPhase => {
);
if (isCritical) {
- return 'Error';
+ return PlanPhase.Error;
}
// Check for vm errors
const vmError = plan?.status?.migration?.vms?.find((vm) => vm?.error);
if (conditions.includes('Failed')) {
- return 'Failed';
+ return PlanPhase.Failed;
}
if (vmError) {
- return 'vmError';
+ return PlanPhase.vmError;
}
// Check condition category
@@ -64,14 +64,14 @@ export const getPlanPhase = (data: PlanData): PlanPhase => {
);
if (isWarn) {
- return 'Warning';
+ return PlanPhase.Warning;
}
if (conditions.includes('Ready')) {
- return 'Ready';
+ return PlanPhase.Ready;
}
- return 'NotReady';
+ return PlanPhase.NotReady;
};
export const canPlanStart = (plan: V1beta1Plan) => {
@@ -107,20 +107,20 @@ export const isPlanEditable = (plan: V1beta1Plan) => {
const planStatus = getPlanPhase({ obj: plan });
return (
- planStatus === 'Unknown' ||
- planStatus === 'Canceled' ||
- planStatus === 'Error' ||
- planStatus === 'Failed' ||
- planStatus === 'vmError' ||
- planStatus === 'Warning' ||
- planStatus === 'Ready'
+ planStatus === PlanPhase.Unknown ||
+ planStatus === PlanPhase.Canceled ||
+ planStatus === PlanPhase.Error ||
+ planStatus === PlanPhase.Failed ||
+ planStatus === PlanPhase.vmError ||
+ planStatus === PlanPhase.Warning ||
+ planStatus === PlanPhase.Ready
);
};
export const isPlanArchived = (plan: V1beta1Plan) => {
const planStatus = getPlanPhase({ obj: plan });
- return planStatus === 'Archiving' || planStatus === 'Archived';
+ return planStatus === PlanPhase.Archiving || planStatus === PlanPhase.Archived;
};
const getConditions = (obj: V1beta1Plan) =>
diff --git a/packages/forklift-console-plugin/src/modules/Plans/utils/helpers/getPlanProgressVariant.ts b/packages/forklift-console-plugin/src/modules/Plans/utils/helpers/getPlanProgressVariant.ts
index 249fa34ad..c8ff964dd 100644
--- a/packages/forklift-console-plugin/src/modules/Plans/utils/helpers/getPlanProgressVariant.ts
+++ b/packages/forklift-console-plugin/src/modules/Plans/utils/helpers/getPlanProgressVariant.ts
@@ -6,17 +6,17 @@ export const getPlanProgressVariant = (phase: PlanPhase): ProgressVariant => {
let progressVariant;
switch (phase) {
- case 'Error':
- case 'Failed':
+ case PlanPhase.Error:
+ case PlanPhase.Failed:
progressVariant = ProgressVariant.danger;
break;
- case 'Unknown':
- case 'Archived':
- case 'Canceled':
- case 'vmError':
+ case PlanPhase.Unknown:
+ case PlanPhase.Archived:
+ case PlanPhase.Canceled:
+ case PlanPhase.vmError:
progressVariant = ProgressVariant.warning;
break;
- case 'Succeeded':
+ case PlanPhase.Succeeded:
progressVariant = ProgressVariant.success;
break;
}
diff --git a/packages/forklift-console-plugin/src/modules/Plans/utils/helpers/index.ts b/packages/forklift-console-plugin/src/modules/Plans/utils/helpers/index.ts
index d2865d95b..f499b37f3 100644
--- a/packages/forklift-console-plugin/src/modules/Plans/utils/helpers/index.ts
+++ b/packages/forklift-console-plugin/src/modules/Plans/utils/helpers/index.ts
@@ -1,7 +1,6 @@
// @index(['./*', /style/g], f => `export * from '${f.path}';`)
export * from './getMigrationPhase';
export * from './getMigrationVmsCounts';
-export * from './getPhaseLabel';
export * from './getPlanPhase';
export * from './getPlanProgressVariant';
// @endindex
diff --git a/packages/forklift-console-plugin/src/modules/Plans/utils/types/PlanPhase.ts b/packages/forklift-console-plugin/src/modules/Plans/utils/types/PlanPhase.ts
index 249f56b65..67d31e063 100644
--- a/packages/forklift-console-plugin/src/modules/Plans/utils/types/PlanPhase.ts
+++ b/packages/forklift-console-plugin/src/modules/Plans/utils/types/PlanPhase.ts
@@ -1,13 +1,26 @@
-export type PlanPhase =
- | 'Error'
- | 'vmError'
- | 'Unknown'
- | 'Archiving'
- | 'Archived'
- | 'Failed'
- | 'Canceled'
- | 'Succeeded'
- | 'Running'
- | 'Ready'
- | 'Warning'
- | 'NotReady';
+export enum PlanPhase {
+ // t('Error')
+ Error = 'Error',
+ // t('Some VMs Failed')
+ vmError = 'Some VMs Failed',
+ // t('Unknown')
+ Unknown = 'Unknown',
+ // t('Archiving')
+ Archiving = 'Archiving',
+ // t('Archived')
+ Archived = 'Archived',
+ // t('Failed')
+ Failed = 'Failed',
+ // t('Canceled')
+ Canceled = 'Canceled',
+ // t('Succeeded')
+ Succeeded = 'Succeeded',
+ // t('Running')
+ Running = 'Running',
+ // t('Ready')
+ Ready = 'Ready',
+ // t('Warning')
+ Warning = 'Warning',
+ // t('Not Ready')
+ NotReady = 'Not Ready',
+}
diff --git a/packages/forklift-console-plugin/src/modules/Plans/views/details/components/MigrationsSection/components/MigrationsTable.tsx b/packages/forklift-console-plugin/src/modules/Plans/views/details/components/MigrationsSection/components/MigrationsTable.tsx
index 39042db1d..d05377bb6 100644
--- a/packages/forklift-console-plugin/src/modules/Plans/views/details/components/MigrationsSection/components/MigrationsTable.tsx
+++ b/packages/forklift-console-plugin/src/modules/Plans/views/details/components/MigrationsSection/components/MigrationsTable.tsx
@@ -1,10 +1,6 @@
import React from 'react';
import { ConsoleTimestamp } from 'src/components/ConsoleTimestamp';
-import {
- getMigrationVmsCounts,
- getPhaseLabel,
- getPlanProgressVariant,
-} from 'src/modules/Plans/utils';
+import { getMigrationVmsCounts, getPlanProgressVariant, PlanPhase } from 'src/modules/Plans/utils';
import { getMigrationPhase } from 'src/modules/Plans/utils/helpers/getMigrationPhase';
import { useForkliftTranslation } from 'src/utils/i18n';
@@ -90,8 +86,9 @@ const VMsLabel: React.FC<{ migration: V1beta1Migration }> = ({ migration }) => {
const { t } = useForkliftTranslation();
const phase = getMigrationPhase(migration);
- const phaseLabel = t(getPhaseLabel(phase));
- const progressVariant = getPlanProgressVariant(phase);
+ const phaseLabel = PlanPhase[phase] ? t(PlanPhase[phase]) : PlanPhase.Unknown;
+
+ const progressVariant = getPlanProgressVariant(PlanPhase[phase]);
const counters = getMigrationVmsCounts(migration?.status?.vms);
if (!counters?.total || counters.total === 0) {
diff --git a/packages/forklift-console-plugin/src/modules/Plans/views/details/components/PlanPageHeadings.tsx b/packages/forklift-console-plugin/src/modules/Plans/views/details/components/PlanPageHeadings.tsx
index b69cdda74..2e528937b 100644
--- a/packages/forklift-console-plugin/src/modules/Plans/views/details/components/PlanPageHeadings.tsx
+++ b/packages/forklift-console-plugin/src/modules/Plans/views/details/components/PlanPageHeadings.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import { PlanActionsDropdown } from 'src/modules/Plans/actions';
import { PlanStartMigrationModal } from 'src/modules/Plans/modals';
-import { canPlanReStart, canPlanStart, getPlanPhase } from 'src/modules/Plans/utils';
+import { canPlanReStart, canPlanStart, getPlanPhase, PlanPhase } from 'src/modules/Plans/utils';
import { useGetDeleteAndEditAccessReview } from 'src/modules/Providers/hooks';
import { useModal } from 'src/modules/Providers/modals';
import { PageHeadings } from 'src/modules/Providers/utils';
@@ -81,7 +81,7 @@ export const PlanPageHeadings: React.FC<{ name: string; namespace: string }> = (
const handleAlerts = () => {
// alerts are not relevant to display if plan was completed successfully
- if (planStatus === 'Succeeded') return;
+ if (planStatus === PlanPhase.Succeeded) return;
if (criticalCondition) {
alerts.push(
diff --git a/packages/forklift-console-plugin/src/modules/Plans/views/list/components/ErrorStatusCell.tsx b/packages/forklift-console-plugin/src/modules/Plans/views/list/components/ErrorStatusCell.tsx
index 910718e1b..f5ccc91c0 100644
--- a/packages/forklift-console-plugin/src/modules/Plans/views/list/components/ErrorStatusCell.tsx
+++ b/packages/forklift-console-plugin/src/modules/Plans/views/list/components/ErrorStatusCell.tsx
@@ -1,7 +1,7 @@
import React from 'react';
import Linkify from 'react-linkify';
import { Link } from 'react-router-dom';
-import { getPhaseLabel, getPlanPhase } from 'src/modules/Plans/utils';
+import { getPlanPhase } from 'src/modules/Plans/utils';
import { getResourceUrl, TableIconCell } from 'src/modules/Providers/utils';
import { useForkliftTranslation } from 'src/utils/i18n';
@@ -16,7 +16,7 @@ export const ErrorStatusCell: React.FC = ({ data }) => {
const { obj: plan } = data;
const phase = getPlanPhase(data);
- const phaseLabel = getPhaseLabel(phase);
+ const phaseLabel: string = phase;
const planURL = getResourceUrl({
reference: PlanModelRef,
diff --git a/packages/forklift-console-plugin/src/modules/Plans/views/list/components/StatusCell.tsx b/packages/forklift-console-plugin/src/modules/Plans/views/list/components/StatusCell.tsx
index 2a53170e7..ce68a01da 100644
--- a/packages/forklift-console-plugin/src/modules/Plans/views/list/components/StatusCell.tsx
+++ b/packages/forklift-console-plugin/src/modules/Plans/views/list/components/StatusCell.tsx
@@ -1,5 +1,5 @@
import React from 'react';
-import { getPhaseLabel, getPlanPhase } from 'src/modules/Plans/utils';
+import { getPlanPhase, PlanPhase } from 'src/modules/Plans/utils';
import { TableIconCell } from 'src/modules/Providers/utils';
import { CellProps } from './CellProps';
@@ -11,17 +11,17 @@ export const StatusCell: React.FC = (props) => {
const { data } = props;
const phase = getPlanPhase(data);
- const phaseLabel = getPhaseLabel(phase);
+ const phaseLabel: string = phase;
switch (phase) {
- case 'Error':
- case 'Warning':
+ case PlanPhase.Error:
+ case PlanPhase.Warning:
return ErrorStatusCell(props);
- case 'Failed':
- case 'Canceled':
- case 'Running':
- case 'Succeeded':
- case 'vmError':
+ case PlanPhase.Failed:
+ case PlanPhase.Canceled:
+ case PlanPhase.Running:
+ case PlanPhase.Succeeded:
+ case PlanPhase.vmError:
return VMsProgressCell(props);
}
diff --git a/packages/forklift-console-plugin/src/modules/Plans/views/list/components/VMsProgressCell.tsx b/packages/forklift-console-plugin/src/modules/Plans/views/list/components/VMsProgressCell.tsx
index a566d8978..b7c48cdbf 100644
--- a/packages/forklift-console-plugin/src/modules/Plans/views/list/components/VMsProgressCell.tsx
+++ b/packages/forklift-console-plugin/src/modules/Plans/views/list/components/VMsProgressCell.tsx
@@ -2,7 +2,6 @@ import React from 'react';
import { Link } from 'react-router-dom';
import {
getMigrationVmsCounts,
- getPhaseLabel,
getPlanPhase,
getPlanProgressVariant,
MigrationVmsCounts,
@@ -52,7 +51,7 @@ export const VMsProgressCell: React.FC = ({ data }) => {
const vms = data?.obj?.status?.migration?.vms;
const phase = getPlanPhase(data);
- const phaseLabel = t(getPhaseLabel(phase));
+ const phaseLabel: string = phase;
const planURL = getResourceUrl({
reference: PlanModelRef,