index.tsx 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { getRouteApi } from '@tanstack/react-router'
  2. import { useRoles } from '@/hooks/roles/useRoles'
  3. import { ConfigDrawer } from '@/components/config-drawer'
  4. import { Header } from '@/components/layout/header'
  5. import { Main } from '@/components/layout/main'
  6. import { ProfileDropdown } from '@/components/profile-dropdown'
  7. import { Search } from '@/components/search'
  8. import { ThemeSwitch } from '@/components/theme-switch'
  9. import { RolesDialogs } from './components/roles-dialogs'
  10. import { RolesPrimaryButtons } from './components/roles-primary-buttons'
  11. import { RolesProvider } from './components/roles-provider'
  12. import { RolesTable } from './components/roles-table'
  13. const route = getRouteApi('/_authenticated/roles/')
  14. export function Roles() {
  15. const search = route.useSearch()
  16. const navigate = route.useNavigate()
  17. const { data, isLoading, isError } = useRoles({
  18. page: search.page ?? 1,
  19. per_page: search.pageSize ?? 10,
  20. })
  21. return (
  22. <RolesProvider>
  23. <Header fixed>
  24. <Search className='me-auto' />
  25. <ThemeSwitch />
  26. <ConfigDrawer />
  27. <ProfileDropdown />
  28. </Header>
  29. <Main className='flex flex-1 flex-col gap-4 sm:gap-6'>
  30. <div className='flex flex-wrap items-end justify-between gap-2'>
  31. <div>
  32. <h2 className='text-2xl font-bold tracking-tight'>لیست نقش‌ها</h2>
  33. <p className='text-muted-foreground'>
  34. نقش‌ها و دسترسی هر نقش را از اینجا مدیریت کنید.
  35. </p>
  36. </div>
  37. <RolesPrimaryButtons />
  38. </div>
  39. {isLoading ? (
  40. <div>در حال دریافت...</div>
  41. ) : isError ? (
  42. <div className='text-sm text-destructive'>
  43. دریافت نقش‌ها ممکن نشد.
  44. </div>
  45. ) : (
  46. <RolesTable
  47. data={data?.data.roles ?? []}
  48. paginationData={data?.data.pagination}
  49. search={search}
  50. navigate={navigate}
  51. />
  52. )}
  53. </Main>
  54. <RolesDialogs />
  55. </RolesProvider>
  56. )
  57. }