refactor: add reusable select controls and enhance data table columns

This commit is contained in:
2026-06-17 20:32:50 +05:30
parent b325975282
commit 463ee0835f
20 changed files with 418 additions and 26 deletions

View File

@@ -73,6 +73,7 @@ export function RoleTable({
}}
sorting={sorting}
onSortingChange={onSortingChange}
actionsSticky
/>
);
}

View File

@@ -1,6 +1,6 @@
'use client';
import { useCallback, useState } from 'react';
import { useCallback, useEffect, useState } from 'react';
import { Plus, ShieldCheck } from 'lucide-react';
import { PageHeader } from '@/components/page-header';
@@ -27,6 +27,7 @@ export default function RolesPage() {
(state) => state.user?.organization_id ?? null,
);
const [isSheetOpen, setIsSheetOpen] = useState(false);
const [activeRole, setActiveRole] = useState<Role | null>(null);
const {
skip,
setSkip,
@@ -49,6 +50,7 @@ export default function RolesPage() {
sorting,
});
const permissionsQuery = usePermissionsTreeQuery(isSheetOpen);
const roleForm = useRoleForm({
organizationId,
permissionTree: permissionsQuery.permissionTree,
@@ -72,18 +74,32 @@ export default function RolesPage() {
statusMutation;
const openCreate = useCallback(() => {
prepareCreateRole();
setActiveRole(null);
setIsSheetOpen(true);
}, [prepareCreateRole]);
}, []);
const openEdit = useCallback(
(role: Role) => {
prepareEditRole(role);
setActiveRole(role);
setIsSheetOpen(true);
},
[prepareEditRole],
[],
);
useEffect(() => {
if (!isSheetOpen || permissionsQuery.permissionTree.length === 0) {
return;
}
activeRole ? prepareEditRole(activeRole) : prepareCreateRole();
}, [
activeRole,
isSheetOpen,
permissionsQuery.permissionTree,
prepareCreateRole,
prepareEditRole,
]);
const toggleStatus = useCallback(
(role: Role) => {
updateRoleStatus(role);