45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
// * Packages
|
|
import { usePage } from "@inertiajs/react";
|
|
import { CheckIcon, XIcon } from "lucide-react";
|
|
// * Components shadcn
|
|
import { Badge } from "@/components/ui/badge";
|
|
// * Other
|
|
import { LaravelEnum } from "@/back/types/global";
|
|
|
|
type DocumentStatusBadgeProps = {
|
|
value: number;
|
|
};
|
|
|
|
export default function DocumentStatusBadge({
|
|
value,
|
|
}: DocumentStatusBadgeProps) {
|
|
const { enumDocumentStatus } = usePage().props as unknown as {
|
|
enumDocumentStatus: LaravelEnum;
|
|
};
|
|
const statusStyles = {
|
|
[enumDocumentStatus.unpublished.value]: {
|
|
color: "bg-red-200 dark:bg-red-900",
|
|
Icon: XIcon,
|
|
},
|
|
[enumDocumentStatus.published?.value ?? "default"]: {
|
|
color: "bg-green-200 dark:bg-green-900",
|
|
Icon: CheckIcon,
|
|
},
|
|
};
|
|
const enumValue = Object.values(enumDocumentStatus).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>
|
|
);
|
|
}
|