ldc-ovoteam/resources/ts/back/Components/Layout/Sidebar/Links/DynamicPages.tsx

83 lines
2.4 KiB
TypeScript
Raw Permalink Normal View History

import { Link } from "@inertiajs/react";
2026-03-30 14:19:26 +02:00
import { StickyNoteIcon } from "lucide-react";
2026-03-30 14:19:26 +02:00
import {
filterActions,
type NavListLinksProps,
2026-03-30 14:19:26 +02:00
} from "@/back/Components/Layout/Sidebar/AppSidebar";
import { type SidebarGroupLink } from "@/back/Components/Layout/Sidebar/SidebarRegistry";
2026-03-30 14:19:26 +02:00
import Views from "@/back/lib/actions";
import type { AuthProp, ConfigBackend } from "@/back/types/global";
import { Button } from "@/components/ui/button";
import { DropdownMenuItem } from "@/components/ui/dropdown-menu";
import str from "@/hooks/use-string";
import trans from "@/hooks/use-translations";
export default function DynamicPages(
auth: AuthProp,
configBackend: ConfigBackend,
): Readonly<SidebarGroupLink> {
2026-03-30 14:19:26 +02:00
const modelName = "dynamic-pages";
// Translations.
const transDynamicPages = trans(
2026-03-30 14:19:26 +02:00
`uwil-dynamic-pages::models.classes.${modelName}`,
{
choice: 2,
},
);
const transCreate = str(
trans(`uwil-backend::crud.actions.${Views.CREATION.label}`),
2026-03-30 14:19:26 +02:00
)
.ucFirst()
.value();
const transArchives = str(trans("uwil-backend::back.archives"))
2026-03-30 14:19:26 +02:00
.ucFirst()
.value();
const link: NavListLinksProps = {
title: str(transDynamicPages).ucFirst().value(),
model: modelName,
icon: StickyNoteIcon,
show: auth.policies.dynamicPages.viewAny,
2026-03-30 14:19:26 +02:00
actions: (model: string) =>
filterActions({
auth,
configBackend,
2026-03-30 14:19:26 +02:00
model,
items: [
auth.policies.dynamicPages.create && (
2026-03-30 14:19:26 +02:00
<DropdownMenuItem key="create" className="p-0">
<Button variant="ghost" asChild>
<Link
href={route(`${configBackend.routes.name}${model}.create`)}
className="w-full"
>
{}
2026-03-30 14:19:26 +02:00
<Views.CREATION.icon />
{transCreate}
</Link>
</Button>
</DropdownMenuItem>
),
auth.policies.dynamicPages.viewTrash && (
<DropdownMenuItem key="trash" className="p-0">
2026-03-30 14:19:26 +02:00
<Button variant="ghost" asChild>
<Link
href={route(`${configBackend.routes.name}${model}.trash`)}
className="w-full"
>
{}
2026-03-30 14:19:26 +02:00
<Views.ARCHIVATION.icon />
{transArchives}
</Link>
</Button>
</DropdownMenuItem>
),
],
}),
};
return { link, group: "pages" };
}