Skip to content

Commit 6f78e31

Browse files
refactor(okms): move CreateVersionDrawerForm in its own file
ref: #MANAGER-18318 Signed-off-by: Mathieu Mousnier <[email protected]>
1 parent 4189abb commit 6f78e31

File tree

2 files changed

+101
-96
lines changed

2 files changed

+101
-96
lines changed

packages/manager/apps/okms/src/modules/secret-manager/pages/drawers/createVersionDrawer/CreateVersionDrawer.page.tsx

Lines changed: 1 addition & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -1,110 +1,15 @@
11
import React, { Suspense } from 'react';
2-
import z from 'zod';
32
import { Drawer } from '@ovh-ux/manager-react-components';
43
import { useTranslation } from 'react-i18next';
54
import { useNavigate, useParams } from 'react-router-dom';
6-
import { useForm } from 'react-hook-form';
75
import { OdsMessage } from '@ovhcloud/ods-components/react';
8-
import { useSecretDataSchema } from '@secret-manager/validation';
9-
import { NAMESPACES } from '@ovh-ux/manager-common-translations';
10-
import { zodResolver } from '@hookform/resolvers/zod/dist/zod';
11-
import { SecretWithData } from '@secret-manager/types/secret.type';
126
import { useSecretWithData } from '@secret-manager/data/hooks/useSecret';
137
import { useSecretSmartConfig } from '@secret-manager/hooks/useSecretSmartConfig';
148
import { decodeSecretPath } from '@secret-manager/utils/secretPath';
15-
import { useCreateSecretVersion } from '@secret-manager/data/hooks/useCreateSecretVersion';
169
import { LocationPathParams } from '@secret-manager/routes/routes.constants';
17-
import { SecretDataFormField } from '@secret-manager/components/form/SecretDataFormField.component';
18-
import { SecretSmartConfig } from '@secret-manager/utils/secretSmartConfig';
19-
import { addCurrentVersionToCas } from '@secret-manager/utils/cas';
20-
import {
21-
DrawerContent,
22-
DrawerFooter,
23-
} from '@/common/components/drawer/DrawerInnerComponents.component';
24-
import { VersionStatusMessage } from './VersionStatusMessage.component';
10+
import { CreateVersionDrawerForm } from './CreateVersionDrawerForm.component';
2511
import { CREATE_VERSION_DRAWER_TEST_IDS } from './CreateVersionDrawer.constants';
2612

27-
type CreateVersionDrawerProps = {
28-
secret: SecretWithData;
29-
okmsId: string;
30-
secretPath: string;
31-
secretConfig: SecretSmartConfig;
32-
onDismiss: () => void;
33-
};
34-
35-
const CreateVersionDrawerForm = ({
36-
secret,
37-
okmsId,
38-
secretPath,
39-
secretConfig,
40-
onDismiss,
41-
}: CreateVersionDrawerProps) => {
42-
const { t } = useTranslation(['secret-manager', NAMESPACES.ACTIONS]);
43-
44-
const {
45-
mutateAsync: createSecretVersion,
46-
isPending: isCreating,
47-
error: createError,
48-
} = useCreateSecretVersion();
49-
50-
const dataSchema = useSecretDataSchema();
51-
const formSchema = z.object({ data: dataSchema });
52-
type FormSchema = z.infer<typeof formSchema>;
53-
const {
54-
control,
55-
handleSubmit,
56-
formState: { isDirty, isValid },
57-
} = useForm({
58-
mode: 'onChange', // Validation on all changes to show errors immediately
59-
resolver: zodResolver(formSchema),
60-
defaultValues: {
61-
data: JSON.stringify(secret?.version?.data),
62-
},
63-
});
64-
65-
const handleSubmitForm = async (data: FormSchema) => {
66-
try {
67-
await createSecretVersion({
68-
okmsId,
69-
path: decodeSecretPath(secretPath),
70-
data: JSON.parse(data.data),
71-
cas: addCurrentVersionToCas(
72-
secret?.metadata?.currentVersion,
73-
secretConfig.casRequired.value,
74-
),
75-
});
76-
onDismiss();
77-
} catch {
78-
// Error is handled by the useCreateSecretVersion hook
79-
}
80-
};
81-
82-
return (
83-
<div className="flex flex-col h-full">
84-
<DrawerContent>
85-
<form>
86-
{createError && (
87-
<OdsMessage color="danger" className="mb-4">
88-
{createError?.response?.data?.message ||
89-
t('add_new_version_error')}
90-
</OdsMessage>
91-
)}
92-
<VersionStatusMessage state={secret.version.state} />
93-
<SecretDataFormField name="data" control={control} />
94-
</form>
95-
</DrawerContent>
96-
<DrawerFooter
97-
primaryButtonLabel={t(`${NAMESPACES.ACTIONS}:add`)}
98-
isPrimaryButtonDisabled={!isDirty || !isValid}
99-
isPrimaryButtonLoading={isCreating}
100-
onPrimaryButtonClick={handleSubmit(handleSubmitForm)}
101-
secondaryButtonLabel={t(`${NAMESPACES.ACTIONS}:close`)}
102-
onSecondaryButtonClick={onDismiss}
103-
/>
104-
</div>
105-
);
106-
};
107-
10813
export default function CreateVersionDrawerPage() {
10914
const navigate = useNavigate();
11015
const { t } = useTranslation('secret-manager');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
import React from 'react';
2+
import z from 'zod';
3+
import { useTranslation } from 'react-i18next';
4+
import { useForm } from 'react-hook-form';
5+
import { OdsMessage } from '@ovhcloud/ods-components/react';
6+
import { useSecretDataSchema } from '@secret-manager/validation';
7+
import { NAMESPACES } from '@ovh-ux/manager-common-translations';
8+
import { zodResolver } from '@hookform/resolvers/zod/dist/zod';
9+
import { SecretWithData } from '@secret-manager/types/secret.type';
10+
import { decodeSecretPath } from '@secret-manager/utils/secretPath';
11+
import { useCreateSecretVersion } from '@secret-manager/data/hooks/useCreateSecretVersion';
12+
import { SecretDataFormField } from '@secret-manager/components/form/SecretDataFormField.component';
13+
import { SecretSmartConfig } from '@secret-manager/utils/secretSmartConfig';
14+
import { addCurrentVersionToCas } from '@secret-manager/utils/cas';
15+
import {
16+
DrawerContent,
17+
DrawerFooter,
18+
} from '@/common/components/drawer/DrawerInnerComponents.component';
19+
import { VersionStatusMessage } from './VersionStatusMessage.component';
20+
21+
type CreateVersionDrawerFormProps = {
22+
secret: SecretWithData;
23+
okmsId: string;
24+
secretPath: string;
25+
secretConfig: SecretSmartConfig;
26+
onDismiss: () => void;
27+
};
28+
29+
export const CreateVersionDrawerForm = ({
30+
secret,
31+
okmsId,
32+
secretPath,
33+
secretConfig,
34+
onDismiss,
35+
}: CreateVersionDrawerFormProps) => {
36+
const { t } = useTranslation(['secret-manager', NAMESPACES.ACTIONS]);
37+
38+
const {
39+
mutateAsync: createSecretVersion,
40+
isPending: isCreating,
41+
error: createError,
42+
} = useCreateSecretVersion();
43+
44+
const dataSchema = useSecretDataSchema();
45+
const formSchema = z.object({ data: dataSchema });
46+
type FormSchema = z.infer<typeof formSchema>;
47+
const {
48+
control,
49+
handleSubmit,
50+
formState: { isDirty, isValid },
51+
} = useForm({
52+
mode: 'onChange', // Validation on all changes to show errors immediately
53+
resolver: zodResolver(formSchema),
54+
defaultValues: {
55+
data: JSON.stringify(secret?.version?.data),
56+
},
57+
});
58+
59+
const handleSubmitForm = async (data: FormSchema) => {
60+
try {
61+
await createSecretVersion({
62+
okmsId,
63+
path: decodeSecretPath(secretPath),
64+
data: JSON.parse(data.data),
65+
cas: addCurrentVersionToCas(
66+
secret?.metadata?.currentVersion,
67+
secretConfig.casRequired.value,
68+
),
69+
});
70+
onDismiss();
71+
} catch {
72+
// Error is handled by the useCreateSecretVersion hook
73+
}
74+
};
75+
76+
return (
77+
<div className="flex flex-col h-full">
78+
<DrawerContent>
79+
<form>
80+
{createError && (
81+
<OdsMessage color="danger" className="mb-4">
82+
{createError?.response?.data?.message ||
83+
t('add_new_version_error')}
84+
</OdsMessage>
85+
)}
86+
<VersionStatusMessage state={secret.version.state} />
87+
<SecretDataFormField name="data" control={control} />
88+
</form>
89+
</DrawerContent>
90+
<DrawerFooter
91+
primaryButtonLabel={t(`${NAMESPACES.ACTIONS}:add`)}
92+
isPrimaryButtonDisabled={!isDirty || !isValid}
93+
isPrimaryButtonLoading={isCreating}
94+
onPrimaryButtonClick={handleSubmit(handleSubmitForm)}
95+
secondaryButtonLabel={t(`${NAMESPACES.ACTIONS}:close`)}
96+
onSecondaryButtonClick={onDismiss}
97+
/>
98+
</div>
99+
);
100+
};

0 commit comments

Comments
 (0)