From c3d9a4c00b812366bac061251bdc3074bcb21d13 Mon Sep 17 00:00:00 2001 From: Jeff Puzzo Date: Wed, 29 Jan 2025 10:31:37 -0500 Subject: [PATCH] address more feedback --- .../common/src/components/LoadingSpinner.tsx | 13 +++++++ .../LoadingSpinner/LoadingSpinner.tsx | 14 ------- .../src/components/LoadingSpinner/index.ts | 1 - packages/common/src/components/index.ts | 2 +- .../actions/PlanActionsDropdownItems.tsx | 35 +++-------------- .../src/modules/Plans/actions/utils.ts | 38 +++++++++++++++++++ .../Plans/utils/helpers/getConditionTypes.ts | 6 +-- 7 files changed, 60 insertions(+), 49 deletions(-) create mode 100644 packages/common/src/components/LoadingSpinner.tsx delete mode 100644 packages/common/src/components/LoadingSpinner/LoadingSpinner.tsx delete mode 100644 packages/common/src/components/LoadingSpinner/index.ts create mode 100644 packages/forklift-console-plugin/src/modules/Plans/actions/utils.ts diff --git a/packages/common/src/components/LoadingSpinner.tsx b/packages/common/src/components/LoadingSpinner.tsx new file mode 100644 index 000000000..148469e3a --- /dev/null +++ b/packages/common/src/components/LoadingSpinner.tsx @@ -0,0 +1,13 @@ +import React, { FC, PropsWithChildren } from 'react'; + +import { Spinner, SpinnerProps } from '@patternfly/react-core'; + +type LoadingSpinnerProps = PropsWithChildren & + SpinnerProps & { + isLoading: boolean; + }; + +const LoadingSpinner: FC = ({ isLoading, children, ...spinnerProps }) => + isLoading ? : children; + +export default LoadingSpinner; diff --git a/packages/common/src/components/LoadingSpinner/LoadingSpinner.tsx b/packages/common/src/components/LoadingSpinner/LoadingSpinner.tsx deleted file mode 100644 index 4f8a4b370..000000000 --- a/packages/common/src/components/LoadingSpinner/LoadingSpinner.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import React, { PropsWithChildren } from 'react'; - -import { Spinner, SpinnerProps } from '@patternfly/react-core'; - -type LoadingSpinnerProps = PropsWithChildren & - SpinnerProps & { - isLoading: boolean; - }; - -export const LoadingSpinner: React.FC = ({ - isLoading, - children, - ...spinnerProps -}) => (isLoading ? : children); diff --git a/packages/common/src/components/LoadingSpinner/index.ts b/packages/common/src/components/LoadingSpinner/index.ts deleted file mode 100644 index 8f6c207e0..000000000 --- a/packages/common/src/components/LoadingSpinner/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { LoadingSpinner } from './LoadingSpinner'; diff --git a/packages/common/src/components/index.ts b/packages/common/src/components/index.ts index 5f8b06272..5e0351c52 100644 --- a/packages/common/src/components/index.ts +++ b/packages/common/src/components/index.ts @@ -6,7 +6,7 @@ export * from './FormGroupWithHelpText'; export * from './HelpIconPopover'; export * from './Icons'; export * from './LoadingDots'; -export * from './LoadingSpinner'; +export { default as LoadingSpinner } from './LoadingSpinner'; export * from './Page'; export * from './QueryClientHoc'; export * from './TableView'; 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 c5af187b4..c24c40ec3 100644 --- a/packages/forklift-console-plugin/src/modules/Plans/actions/PlanActionsDropdownItems.tsx +++ b/packages/forklift-console-plugin/src/modules/Plans/actions/PlanActionsDropdownItems.tsx @@ -1,4 +1,4 @@ -import React, { useMemo } from 'react'; +import React from 'react'; import { DropdownItemLink } from 'src/components/actions/DropdownItemLink'; import { useModal } from 'src/modules/Providers/modals'; import { getResourceUrl } from 'src/modules/Providers/utils/helpers'; @@ -16,6 +16,8 @@ import { PlanSummaryStatus, } from '../utils'; +import { getDuplicateActionDescription, getStartActionDescription } from './utils'; + export const PlanActionsDropdownItems = ({ data }: PlanActionsDropdownItemsProps) => { const { t } = useForkliftTranslation(); const { showModal } = useModal(); @@ -53,40 +55,13 @@ export const PlanActionsDropdownItems = ({ data }: PlanActionsDropdownItemsProps showModal(); }; - const startActionDescription = useMemo(() => { - if (isPlanValidating) { - return t('The plan is being validated'); - } - - switch (status) { - case PlanSummaryStatus.Archived: - return t('Archived plans cannot be started'); - case PlanSummaryStatus.Complete: - return t('All VMs were migrated'); - case PlanSummaryStatus.Running: - return t('The plan is currently in progress'); - case PlanSummaryStatus.CannotStart: - return t('The plan cannot be started'); - } - }, [status, isPlanValidating]); - - const duplicateActionDescription = React.useMemo(() => { - if (isPlanValidating) { - return t('The plan is being validated'); - } - - if (status === PlanSummaryStatus.CannotStart) { - return t('The plan cannot be duplicated'); - } - }, [status, isPlanValidating]); - return [ {buttonStartLabel} , @@ -109,7 +84,7 @@ export const PlanActionsDropdownItems = ({ data }: PlanActionsDropdownItemsProps isPlanValidating } onClick={onClickDuplicate} - description={duplicateActionDescription} + description={getDuplicateActionDescription(status, isPlanValidating, t)} > {t('Duplicate Plan')} , diff --git a/packages/forklift-console-plugin/src/modules/Plans/actions/utils.ts b/packages/forklift-console-plugin/src/modules/Plans/actions/utils.ts new file mode 100644 index 000000000..8f52efdc5 --- /dev/null +++ b/packages/forklift-console-plugin/src/modules/Plans/actions/utils.ts @@ -0,0 +1,38 @@ +import { TFunction } from 'i18next'; + +import { PlanSummaryStatus } from '../utils'; + +export const getStartActionDescription = ( + status: PlanSummaryStatus, + isPlanValidating: boolean, + t: TFunction, +): string => { + if (isPlanValidating) { + return t('The plan is being validated'); + } + + switch (status) { + case PlanSummaryStatus.Archived: + return t('Archived plans cannot be started'); + case PlanSummaryStatus.Complete: + return t('All VMs were migrated'); + case PlanSummaryStatus.Running: + return t('The plan is currently in progress'); + case PlanSummaryStatus.CannotStart: + return t('The plan cannot be started'); + } +}; + +export const getDuplicateActionDescription = ( + status: PlanSummaryStatus, + isPlanValidating: boolean, + t: TFunction, +): string => { + if (isPlanValidating) { + return t('The plan is being validated'); + } + + if (status === PlanSummaryStatus.CannotStart) { + return t('The plan cannot be duplicated'); + } +}; diff --git a/packages/forklift-console-plugin/src/modules/Plans/utils/helpers/getConditionTypes.ts b/packages/forklift-console-plugin/src/modules/Plans/utils/helpers/getConditionTypes.ts index 55cb83400..5c75039c2 100644 --- a/packages/forklift-console-plugin/src/modules/Plans/utils/helpers/getConditionTypes.ts +++ b/packages/forklift-console-plugin/src/modules/Plans/utils/helpers/getConditionTypes.ts @@ -1,17 +1,17 @@ import { V1beta1Plan } from '@kubev2v/types'; -import { PlanConditionStatus } from '../types/PlanCondition'; +import { PlanConditionStatus, PlanConditionType } from '../types/PlanCondition'; /** * Gets a record of plan types with truthful ('True') statuses * @param plan V1beta1Plan * @returns Record */ -export const getConditionTypes = (plan: V1beta1Plan): Record => +export const getConditionTypes = (plan: V1beta1Plan): Record => plan?.status?.conditions?.reduce((acc, condition) => { if (condition.status === PlanConditionStatus.True) { acc[condition.type] = true; } return acc; - }, {}); + }, {} as Record);