ldc-groupe/resources/ts/back/Components/DynamicPages/DynamicStatusBadge.tsx
2025-11-07 19:00:09 +01:00

47 lines
1.4 KiB
TypeScript

// * Packages
import { usePage } from "@inertiajs/react";
import { CheckIcon, PencilLineIcon, XIcon } from "lucide-react";
// * Components shadcn
import { Badge } from "@/components/ui/badge";
// * Other
import { LaravelEnum } from "@/back/types/global";
type DynamicStatusBadgeProps = {
value: number;
};
export default function DynamicStatusBadge({ value }: DynamicStatusBadgeProps) {
const { enumDynamicPageStatus } = usePage().props as unknown as {
enumDynamicPageStatus: LaravelEnum;
};
const statusStyles = {
[enumDynamicPageStatus.draft.value]: {
color: "bg-gray-200 dark:bg-gray-900",
Icon: PencilLineIcon,
},
[enumDynamicPageStatus.unpublished.value]: {
color: "bg-red-200 dark:bg-red-900",
Icon: XIcon,
},
[enumDynamicPageStatus.published?.value ?? "default"]: {
color: "bg-green-200 dark:bg-green-900",
Icon: CheckIcon,
},
};
const enumValue = Object.values(enumDynamicPageStatus).find(
(status) => status.value === value,
);
const { color, Icon } = statusStyles[
enumValue?.value as keyof typeof statusStyles
] ?? {
color: "bg-green-200 dark:bg-green-900",
Icon: CheckIcon,
};
return (
<Badge variant="outline" className={`border-0 ${color}`}>
<Icon size={15} className="mr-1" />
{enumValue?.label}
</Badge>
);
}