AdminUsersTableToolbar.jsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. "use client";
  2. import React from "react";
  3. import { SlidersHorizontal } from "lucide-react";
  4. import { ADMIN_USERS_SORT } from "@/lib/frontend/admin/users/usersSorting";
  5. import { Button } from "@/components/ui/button";
  6. import {
  7. DropdownMenu,
  8. DropdownMenuContent,
  9. DropdownMenuLabel,
  10. DropdownMenuRadioGroup,
  11. DropdownMenuRadioItem,
  12. DropdownMenuSeparator,
  13. DropdownMenuTrigger,
  14. } from "@/components/ui/dropdown-menu";
  15. export default function AdminUsersTableToolbar({
  16. loadedCount = 0,
  17. sortMode = ADMIN_USERS_SORT.DEFAULT,
  18. onSortModeChange,
  19. disabled = false,
  20. }) {
  21. const safeLoadedCount = Number.isFinite(loadedCount)
  22. ? Math.max(0, loadedCount)
  23. : 0;
  24. return (
  25. <div className="flex flex-wrap items-center justify-between gap-2">
  26. <span className="rounded-md bg-muted px-2 py-1 text-xs text-muted-foreground">
  27. {safeLoadedCount} Benutzer geladen
  28. </span>
  29. <DropdownMenu>
  30. <DropdownMenuTrigger asChild>
  31. <Button
  32. variant="outline"
  33. size="sm"
  34. type="button"
  35. disabled={disabled}
  36. title="Sortierung"
  37. >
  38. <SlidersHorizontal className="h-4 w-4" />
  39. Sortierung
  40. </Button>
  41. </DropdownMenuTrigger>
  42. <DropdownMenuContent align="end" className="min-w-[16rem]">
  43. <DropdownMenuLabel>Sortierung</DropdownMenuLabel>
  44. <DropdownMenuSeparator />
  45. <DropdownMenuRadioGroup
  46. value={sortMode}
  47. onValueChange={(value) => onSortModeChange?.(value)}
  48. >
  49. <DropdownMenuRadioItem value={ADMIN_USERS_SORT.DEFAULT}>
  50. Standard
  51. </DropdownMenuRadioItem>
  52. <DropdownMenuRadioItem value={ADMIN_USERS_SORT.ROLE_RIGHTS}>
  53. Rolle (Rechte)
  54. </DropdownMenuRadioItem>
  55. <DropdownMenuRadioItem value={ADMIN_USERS_SORT.BRANCH_ASC}>
  56. Niederlassung (NL)
  57. </DropdownMenuRadioItem>
  58. </DropdownMenuRadioGroup>
  59. </DropdownMenuContent>
  60. </DropdownMenu>
  61. </div>
  62. );
  63. }