feat(nameInputComponent): add EditFlowSettings component to allow editing of flow name and description

The EditFlowSettings component is a form that allows the user to edit the name and description of a flow. It receives the current name and description as props, as well as a list of flows, the current tab ID, and functions to update the name, description, and flow. The component also includes a character limit for the name input and displays an error message if the limit is reached.
This commit is contained in:
Gabriel Luiz Freitas Almeida 2023-06-14 12:15:35 -03:00
commit 288974dff3

View file

@ -0,0 +1,91 @@
import React, { useState, ChangeEvent } from "react";
import { Textarea } from "../ui/textarea";
import { Label } from "../ui/label";
import { Input } from "../ui/input";
type InputProps = {
name: string | null;
description: string | null;
maxLength?: number;
flows: Array<{ id: string; name: string }>;
tabId: string;
setName: (name: string) => void;
setDescription: (description: string) => void;
updateFlow: (flow: { id: string; name: string }) => void;
};
export const EditFlowSettings: React.FC<InputProps> = ({
name,
description,
maxLength = 50,
flows,
tabId,
setName,
setDescription,
updateFlow,
}) => {
const [isMaxLength, setIsMaxLength] = useState(false);
const handleNameChange = (event: ChangeEvent<HTMLInputElement>) => {
const { value } = event.target;
if (value.length >= maxLength) {
setIsMaxLength(true);
} else {
setIsMaxLength(false);
}
if (value !== "") {
let newFlow = flows.find((f) => f.id === tabId);
if (newFlow) {
newFlow.name = value;
setName(value);
updateFlow(newFlow);
}
} else {
setName(value);
}
};
const handleDescriptionChange = (event: ChangeEvent<HTMLTextAreaElement>) => {
setDescription(event.target.value);
};
return (
<div>
<Label>
<div className="flex justify-between">
<span className="font-medium">Name</span>{" "}
{isMaxLength && (
<span className="text-red-500 animate-pulse ml-10">
Character limit reached
</span>
)}
</div>
<Input
className="mt-2"
onChange={handleNameChange}
type="text"
name="name"
value={name ?? ""}
placeholder="File name"
id="name"
maxLength={maxLength}
/>
</Label>
<Label>
<span className="font-medium">Description (optional)</span>
<Textarea
name="description"
id="description"
onChange={handleDescriptionChange}
value={description ?? ""}
placeholder="Flow description"
className="max-h-[100px] mt-2"
rows={3}
/>
</Label>
</div>
);
};
export default EditFlowSettings;