Skip to content

Commit 64357e1

Browse files
committed
Resolves: MTV-3738 | Address more feedback
Signed-off-by: Jeff Puzzo <jpuzzo@redhat.com>
1 parent 8d74e6d commit 64357e1

File tree

9 files changed

+39
-42
lines changed

9 files changed

+39
-42
lines changed

locales/en/plugin__forklift-console-plugin.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -844,6 +844,7 @@
844844
"Select a network": "Select a network",
845845
"Select a network map:": "Select a network map:",
846846
"Select a project": "Select a project",
847+
"Select a provider type": "Select a provider type",
847848
"Select a source provider to list available source networks": "Select a source provider to list available source networks",
848849
"Select a source provider to list available source storages": "Select a source provider to list available source storages",
849850
"Select a storage map:": "Select a storage map:",

src/components/common/Select.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ type SelectOption = {
2828

2929
type SelectProps = Pick<PfSelectProps, 'onSelect' | 'className' | 'children'> & {
3030
id: string;
31-
value: string;
31+
value: string | undefined;
3232
options?: SelectOption[];
3333
status?: MenuToggleStatus;
3434
placeholder?: string;

src/providers/create-new/CreateProviderForm.tsx

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { type FC, useCallback, useState } from 'react';
2-
import { FormProvider, useWatch } from 'react-hook-form';
2+
import { FormProvider, useForm, useWatch } from 'react-hook-form';
33
import { useNavigate } from 'react-router-dom-v5-compat';
44
import { createProvider } from 'src/providers/create/utils/createProvider';
55
import { createProviderSecret } from 'src/providers/create/utils/createProviderSecret';
@@ -26,7 +26,6 @@ import NfsDirectoryField from './fields/NfsDirectoryField';
2626
import ProviderNameField from './fields/ProviderNameField';
2727
import ProviderProjectField from './fields/ProviderProjectField';
2828
import ProviderTypeField from './fields/ProviderTypeField';
29-
import { useCreateProviderForm } from './hooks/useCreateProviderForm';
3029
import { buildOvaProviderResources } from './utils/buildProviderResources';
3130
import { getDefaultFormValues } from './utils/getDefaultFormValues';
3231
import CreateProviderFormContextProvider from './CreateProviderFormContextProvider';
@@ -40,7 +39,7 @@ const CreateProviderForm: FC = () => {
4039
const { trackEvent } = useForkliftAnalytics();
4140
const [apiError, setApiError] = useState<Error | null>(null);
4241

43-
const form = useCreateProviderForm({
42+
const form = useForm<CreateProviderFormData>({
4443
defaultValues: getDefaultFormValues(''),
4544
mode: 'onChange',
4645
});
@@ -71,16 +70,19 @@ const CreateProviderForm: FC = () => {
7170
try {
7271
const { provider: newProvider, secret: newSecret } = buildOvaProviderResources(formData);
7372
const secret = await createProviderSecret(newProvider, newSecret);
74-
const provider = await createProvider(newProvider, secret!);
75-
await patchProviderSecretOwner(provider, secret);
7673

77-
trackEvent(TELEMETRY_EVENTS.PROVIDER_CREATE_COMPLETED, {
78-
namespace,
79-
providerType: provider?.spec?.type,
80-
});
74+
if (secret) {
75+
const provider = await createProvider(newProvider, secret);
76+
await patchProviderSecretOwner(provider, secret);
77+
78+
trackEvent(TELEMETRY_EVENTS.PROVIDER_CREATE_COMPLETED, {
79+
namespace,
80+
providerType: provider?.spec?.type,
81+
});
8182

82-
const providerURL = getProviderDetailsPageUrl(provider);
83-
navigate(providerURL);
83+
const providerURL = getProviderDetailsPageUrl(provider);
84+
navigate(providerURL);
85+
}
8486
} catch (err) {
8587
trackEvent(TELEMETRY_EVENTS.PROVIDER_CREATE_FAILED, {
8688
error: err instanceof Error ? err.message : 'Unknown error',

src/providers/create-new/fields/NfsDirectoryField.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
import type { FC } from 'react';
2-
import { useController, useFormContext } from 'react-hook-form';
2+
import { useController } from 'react-hook-form';
33

44
import { FormGroupWithHelpText } from '@components/common/FormGroupWithHelpText/FormGroupWithHelpText';
55
import { TextInput } from '@patternfly/react-core';
66
import { useForkliftTranslation } from '@utils/i18n';
77

8+
import { useCreateProviderFormContext } from '../hooks/useCreateProviderFormContext';
89
import { NFS_PATH_REGEX } from '../utils/validationPatterns';
910

1011
import { ProviderFormFieldId } from './constants';
1112

1213
const NfsDirectoryField: FC = () => {
1314
const { t } = useForkliftTranslation();
14-
const { control } = useFormContext();
15+
const { control } = useCreateProviderFormContext();
1516

1617
const {
1718
field: { onChange, value },
@@ -22,8 +23,8 @@ const NfsDirectoryField: FC = () => {
2223
rules: {
2324
required: t('NFS shared directory is required'),
2425
validate: {
25-
pattern: async (val: string) => {
26-
if (!NFS_PATH_REGEX.test(val)) {
26+
pattern: async (val: string | undefined) => {
27+
if (!val || !NFS_PATH_REGEX.test(val)) {
2728
return t('NFS path must be in format: host:/path (e.g., 10.10.0.10:/ova)');
2829
}
2930

@@ -45,7 +46,7 @@ const NfsDirectoryField: FC = () => {
4546
<TextInput
4647
id={ProviderFormFieldId.NfsDirectory}
4748
type="text"
48-
value={value ?? ''}
49+
value={value}
4950
onChange={(_event, val) => {
5051
onChange(val);
5152
}}

src/providers/create-new/fields/ProviderNameField.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
import type { FC } from 'react';
2-
import { useController, useFormContext } from 'react-hook-form';
2+
import { useController } from 'react-hook-form';
33

44
import { FormGroupWithHelpText } from '@components/common/FormGroupWithHelpText/FormGroupWithHelpText';
55
import { TextInput } from '@patternfly/react-core';
66
import { getInputValidated } from '@utils/form';
77
import { useForkliftTranslation } from '@utils/i18n';
88
import { validateProviderName } from '@utils/validation/providerNameValidation';
99

10-
import { useCreateProviderDataContext } from '../hooks/useCreateProviderFormContext';
10+
import { useCreateProviderDataContext } from '../hooks/useCreateProviderDataContext';
11+
import { useCreateProviderFormContext } from '../hooks/useCreateProviderFormContext';
1112

1213
import { ProviderFormFieldId } from './constants';
1314

1415
const ProviderNameField: FC = () => {
1516
const { t } = useForkliftTranslation();
16-
const { control } = useFormContext();
17+
const { control } = useCreateProviderFormContext();
1718
const { providerNames } = useCreateProviderDataContext();
1819

1920
const {

src/providers/create-new/fields/ProviderTypeField.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import type { FC } from 'react';
2-
import { useController, useFormContext } from 'react-hook-form';
2+
import { useController } from 'react-hook-form';
33

44
import { FormGroupWithHelpText } from '@components/common/FormGroupWithHelpText/FormGroupWithHelpText';
55
import Select from '@components/common/Select';
66
import { SelectList, SelectOption } from '@patternfly/react-core';
77
import { useIsDarkTheme } from '@utils/hooks/useIsDarkTheme';
88
import { useForkliftTranslation } from '@utils/i18n';
99

10+
import { useCreateProviderFormContext } from '../hooks/useCreateProviderFormContext';
1011
import { getProviderTypeOptions } from '../utils/getProviderTypeOptions';
1112

1213
import { ProviderFormFieldId } from './constants';
@@ -16,7 +17,7 @@ import './ProviderTypeField.style.scss';
1617
const ProviderTypeField: FC = () => {
1718
const { t } = useForkliftTranslation();
1819
const isDarkTheme = useIsDarkTheme();
19-
const { control } = useFormContext();
20+
const { control } = useCreateProviderFormContext();
2021

2122
const {
2223
field: { onChange, value },
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { useContext } from 'react';
2+
3+
import { CreateProviderFormContext } from '../constants';
4+
5+
/**
6+
* Hook to access the Create Provider data context
7+
* @returns Context containing provider names for validation
8+
*/
9+
export const useCreateProviderDataContext = () => useContext(CreateProviderFormContext);

src/providers/create-new/hooks/useCreateProviderForm.ts

Lines changed: 0 additions & 10 deletions
This file was deleted.
Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,9 @@
1-
import { useContext } from 'react';
21
import { useFormContext } from 'react-hook-form';
32

4-
import { CreateProviderFormContext } from '../constants';
53
import type { CreateProviderFormData } from '../types';
64

75
/**
8-
* Typed wrapper around useFormContext for Create Provider form
9-
* Provides type safety when accessing form context in components
6+
* Custom wrapper around react-hook-form's useFormContext hook
7+
* Provides typed access to form context for the provider creation form
108
*/
119
export const useCreateProviderFormContext = () => useFormContext<CreateProviderFormData>();
12-
13-
/**
14-
* Hook to access the Create Provider form data fetching context
15-
* Provides centralized data like provider names for validation
16-
*/
17-
export const useCreateProviderDataContext = () => useContext(CreateProviderFormContext);

0 commit comments

Comments
 (0)