Disabled submit button if secret name is empty

This commit is contained in:
Rhythm Bhiwani
2024-03-03 01:37:49 +05:30
parent e3e4a98cd6
commit 68296c1b99
2 changed files with 12 additions and 16 deletions
@@ -49,7 +49,6 @@ import { memo, useEffect } from "react";
import { Controller, useFieldArray, useForm } from "react-hook-form"; import { Controller, useFieldArray, useForm } from "react-hook-form";
import { twMerge } from "tailwind-merge"; import { twMerge } from "tailwind-merge";
import { useNotificationContext } from "@app/components/context/Notifications/NotificationProvider";
import { CreateReminderForm } from "./CreateReminderForm"; import { CreateReminderForm } from "./CreateReminderForm";
import { formSchema, SecretActionType, TFormSchema } from "./SecretListView.utils"; import { formSchema, SecretActionType, TFormSchema } from "./SecretListView.utils";
@@ -87,7 +86,6 @@ export const SecretItem = memo(
}: Props) => { }: Props) => {
const { currentWorkspace } = useWorkspace(); const { currentWorkspace } = useWorkspace();
const { permission } = useProjectPermission(); const { permission } = useProjectPermission();
const { createNotification } = useNotificationContext();
const isReadOnly = const isReadOnly =
permission.can( permission.can(
ProjectPermissionActions.Read, ProjectPermissionActions.Read,
@@ -106,7 +104,8 @@ export const SecretItem = memo(
setValue, setValue,
reset, reset,
getValues, getValues,
formState: { isDirty, isSubmitting } trigger,
formState: { isDirty, isSubmitting, errors }
} = useForm<TFormSchema>({ } = useForm<TFormSchema>({
defaultValues: secret, defaultValues: secret,
values: secret, values: secret,
@@ -244,16 +243,9 @@ export const SecretItem = memo(
autoCapitalization={currentWorkspace?.autoCapitalization} autoCapitalization={currentWorkspace?.autoCapitalization}
variant="plain" variant="plain"
isDisabled={isOverriden} isDisabled={isOverriden}
placeholder="Secret name is required" placeholder={error?.message}
isRequired
isError={Boolean(error)} isError={Boolean(error)}
onInvalid={(e) => { onKeyUp={() => trigger("key")}
e.preventDefault();
createNotification({
text: "Secret name cannot be empty",
type: "error"
});
}}
{...field} {...field}
className="w-full px-0 placeholder:text-red-500 focus:text-bunker-100 focus:ring-transparent" className="w-full px-0 placeholder:text-red-500 focus:text-bunker-100 focus:ring-transparent"
/> />
@@ -509,7 +501,7 @@ export const SecretItem = memo(
animate={{ x: 0, opacity: 1 }} animate={{ x: 0, opacity: 1 }}
exit={{ x: -10, opacity: 0 }} exit={{ x: -10, opacity: 0 }}
> >
<Tooltip content="Save"> <Tooltip content={errors.key ? errors.key?.message : "Save"}>
<IconButton <IconButton
ariaLabel="more" ariaLabel="more"
variant="plain" variant="plain"
@@ -519,12 +511,16 @@ export const SecretItem = memo(
"p-0 text-primary opacity-0 group-hover:opacity-100", "p-0 text-primary opacity-0 group-hover:opacity-100",
isDirty && "opacity-100" isDirty && "opacity-100"
)} )}
isDisabled={isSubmitting} isDisabled={isSubmitting || Boolean(errors.key)}
> >
{isSubmitting ? ( {isSubmitting ? (
<Spinner className="m-0 h-4 w-4 p-0" /> <Spinner className="m-0 h-4 w-4 p-0" />
) : ( ) : (
<FontAwesomeIcon icon={faCheck} size="lg" className="text-primary" /> <FontAwesomeIcon
icon={faCheck}
size="lg"
className={twMerge("text-primary", errors.key && "text-mineshaft-300")}
/>
)} )}
</IconButton> </IconButton>
</Tooltip> </Tooltip>
@@ -8,7 +8,7 @@ export enum SecretActionType {
} }
export const formSchema = z.object({ export const formSchema = z.object({
key: z.string().trim(), key: z.string().trim().min(1, { message: "Secret key is required" }),
value: z.string().transform((val) => (val.at(-1) === "\n" ? `${val.trim()}\n` : val.trim())), value: z.string().transform((val) => (val.at(-1) === "\n" ? `${val.trim()}\n` : val.trim())),
idOverride: z.string().trim().optional(), idOverride: z.string().trim().optional(),
valueOverride: z valueOverride: z