skbeta/components/feature-card.tsx
Christopher Arraya c55ab3d49e initial commit
2024-01-13 20:55:51 -05:00

105 lines
2.8 KiB
TypeScript

import { useState } from "react";
import {
Card,
CardContent,
CardFooter,
CardHeader,
CardTitle,
} from "@/components/ui/card";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import { Textarea } from "@/components/ui/textarea";
import { Pencil2Icon, TrashIcon } from "@radix-ui/react-icons";
type Feature = { uid: string; name: string; description: string };
export function FeatureCard({
feature,
features,
setFeatures,
}: {
feature: Feature;
features: Feature[];
setFeatures: React.Dispatch<React.SetStateAction<Feature[]>>;
}) {
const [isEditing, setIsEditing] = useState(false);
const [name, setName] = useState(feature.name);
const [description, setDescription] = useState(feature.description);
const toggleEdit = () => {
setIsEditing(!isEditing);
};
const saveChanges = () => {
setFeatures(
features.map((_feature) => {
if (_feature.uid === feature.uid) {
return { ..._feature, name: name, description: description };
}
return _feature;
})
);
toggleEdit();
};
return (
<Card className="shadow-none">
{isEditing ? (
<>
<CardHeader>
<CardTitle>
<Input
type="text"
value={name}
onChange={(e) => setName(e.target.value)}
/>
</CardTitle>
</CardHeader>
<CardContent>
<Textarea
value={description}
onChange={(e) => setDescription(e.target.value)}
/>
</CardContent>
<CardFooter className="flex flex-row space-x-2">
<Button size="sm" variant="default" onClick={saveChanges}>
Save
</Button>
<Button
size="icon"
variant="destructive"
onClick={() =>
setFeatures(features.filter((f) => f.uid !== feature.uid))
}
>
<TrashIcon />
</Button>
</CardFooter>
</>
) : (
<>
<CardHeader>
<CardTitle>{feature.name}</CardTitle>
</CardHeader>
<CardContent>
<p className="text-xs">{feature.description}</p>
</CardContent>
<CardFooter className="flex flex-row space-x-2">
<Button size="icon" variant="secondary">
<Pencil2Icon onClick={toggleEdit} />
</Button>
<Button size="icon" variant="destructive">
<TrashIcon
onClick={() => {
setFeatures(features.filter((f) => f.uid !== feature.uid));
}}
/>
</Button>
</CardFooter>
</>
)}
</Card>
);
}