forked from github/plane
70 lines
2.0 KiB
TypeScript
70 lines
2.0 KiB
TypeScript
|
import { Dispatch, FC, SetStateAction } from "react";
|
||
|
import { Control, Controller, FieldErrors } from "react-hook-form";
|
||
|
// ui
|
||
|
import { Input } from "@plane/ui";
|
||
|
// types
|
||
|
import { IApiToken } from "types/api_token";
|
||
|
import type { APIFormFields } from "./index";
|
||
|
|
||
|
interface APITokenTitleProps {
|
||
|
generatedToken: IApiToken | null | undefined;
|
||
|
errors: FieldErrors<APIFormFields>;
|
||
|
control: Control<APIFormFields, any>;
|
||
|
focusTitle: boolean;
|
||
|
setFocusTitle: Dispatch<SetStateAction<boolean>>;
|
||
|
setFocusDescription: Dispatch<SetStateAction<boolean>>;
|
||
|
}
|
||
|
|
||
|
export const APITokenTitle: FC<APITokenTitleProps> = (props) => {
|
||
|
const { generatedToken, errors, control, focusTitle, setFocusTitle, setFocusDescription } = props;
|
||
|
|
||
|
return (
|
||
|
<Controller
|
||
|
control={control}
|
||
|
name="title"
|
||
|
rules={{
|
||
|
required: "Title is required",
|
||
|
maxLength: {
|
||
|
value: 255,
|
||
|
message: "Title should be less than 255 characters",
|
||
|
},
|
||
|
}}
|
||
|
render={({ field: { value, onChange, ref } }) =>
|
||
|
focusTitle ? (
|
||
|
<Input
|
||
|
id="title"
|
||
|
name="title"
|
||
|
type="text"
|
||
|
inputSize="md"
|
||
|
onBlur={() => {
|
||
|
setFocusTitle(false);
|
||
|
}}
|
||
|
onError={() => {
|
||
|
console.log("error");
|
||
|
}}
|
||
|
autoFocus
|
||
|
value={value}
|
||
|
onChange={onChange}
|
||
|
ref={ref}
|
||
|
hasError={!!errors.title}
|
||
|
placeholder="Title"
|
||
|
className="resize-none text-xl w-full"
|
||
|
/>
|
||
|
) : (
|
||
|
<p
|
||
|
onClick={() => {
|
||
|
if (generatedToken != null) return;
|
||
|
setFocusDescription(false);
|
||
|
setFocusTitle(true);
|
||
|
}}
|
||
|
role="button"
|
||
|
className={`${value.length === 0 ? "text-custom-text-400/60" : ""} font-medium text-[24px]`}
|
||
|
>
|
||
|
{value.length != 0 ? value : "Api Title"}
|
||
|
</p>
|
||
|
)
|
||
|
}
|
||
|
/>
|
||
|
);
|
||
|
};
|