feat(lst): added icons to the sidebar

This commit is contained in:
2025-02-20 10:25:35 -06:00
parent 54b1b6081a
commit 604fdf1545
9 changed files with 291 additions and 52 deletions

View File

@@ -3,21 +3,99 @@ import {ProductionSideBar} from "./side-components/production";
import {Header} from "./side-components/header";
import {LogisticsSideBar} from "./side-components/logistics";
import {QualitySideBar} from "./side-components/quality";
import {AdminSideBar} from "./side-components/Admin";
import {ForkliftSideBar} from "./side-components/forklift";
import {EomSideBar} from "./side-components/eom";
import {AdminSideBar} from "./side-components/admin";
type Feature = string;
interface Module {
id: number;
name: string;
features: Feature[];
active: boolean;
}
interface RolePermissions {
[moduleName: string]: Feature[];
}
interface Roles {
[roleName: string]: RolePermissions;
}
interface User {
id: number;
username: string;
role: keyof Roles;
}
const modules: Module[] = [
{id: 1, name: "production", active: true, features: ["view", "edit", "approve"]},
{id: 2, name: "logistics", active: true, features: ["view", "assign", "track"]},
{id: 3, name: "quality", active: false, features: ["view", "audit", "approve"]},
{id: 4, name: "forklift", active: true, features: ["view", "request", "operate"]},
{id: 5, name: "admin", active: true, features: ["view", "manage_users", "view_logs", "settings"]},
];
const rolePermissions: Roles = {
admin: {
production: ["view", "edit", "approve"],
logistics: ["view", "assign", "track"],
quality: ["view", "audit", "approve"],
forklift: ["view", "request", "operate"],
admin: ["view", "manage_users", "view_logs", "settings"],
},
manager: {
production: ["view", "edit"],
logistics: ["view", "assign"],
quality: ["view", "audit"],
forklift: ["view", "request"],
admin: ["view_logs"],
},
supervisor: {
production: ["view"],
logistics: ["view"],
quality: ["view"],
forklift: ["view", "request"],
admin: [],
},
user: {
production: ["view"],
logistics: [],
quality: [],
forklift: [],
admin: [],
},
};
const users: User[] = [
{id: 1, username: "admin", role: "admin"},
{id: 2, username: "manager", role: "manager"},
{id: 3, username: "supervisor", role: "supervisor"},
{id: 4, username: "user", role: "user"},
];
function hasAccess(user: User, moduleName: string, feature: Feature): boolean {
return rolePermissions[user.role]?.[moduleName]?.includes(feature) || false;
}
function moduleActive(moduleName: string): boolean {
const module = modules.find((m) => m.name === moduleName);
return module ? module.active : false;
}
export function AppSidebar() {
const user = {id: 4, username: "admin", role: "admin"};
return (
<Sidebar collapsible="icon">
<SidebarContent>
<Header />
<ProductionSideBar />
<LogisticsSideBar />
<ForkliftSideBar />
<EomSideBar />
<QualitySideBar />
<AdminSideBar />
{hasAccess(user, "production", "view") && moduleActive("production") && <ProductionSideBar />}
{hasAccess(user, "logistics", "view") && moduleActive("logistics") && <LogisticsSideBar />}
{hasAccess(user, "forklift", "view") && moduleActive("forklift") && <ForkliftSideBar />}
{hasAccess(user, "eom", "view") && moduleActive("admin") && <EomSideBar />}
{hasAccess(user, "quality", "view") && moduleActive("quality") && <QualitySideBar />}
{hasAccess(user, "admin", "view") && moduleActive("admin") && <AdminSideBar />}
</SidebarContent>
<SidebarFooter>
<SidebarTrigger />