From c5cf156338e5e0c176b32a1c337d4b3ab4f69726 Mon Sep 17 00:00:00 2001 From: ducanh Date: Wed, 8 Apr 2026 22:36:49 +0700 Subject: [PATCH] change role --- .../(tables)/user-table/page.tsx | 1 + src/app/globals.css | 3 +- src/app/layout.tsx | 6 +-- src/components/tables/ChangeRoleModal.tsx | 49 +++++++++++++++---- src/components/user-profile/UserMetaCard.tsx | 2 +- src/service/adminService.ts | 2 +- 6 files changed, 47 insertions(+), 16 deletions(-) diff --git a/src/app/(admin)/(others-pages)/(tables)/user-table/page.tsx b/src/app/(admin)/(others-pages)/(tables)/user-table/page.tsx index ebb996b..1fe7a7c 100644 --- a/src/app/(admin)/(others-pages)/(tables)/user-table/page.tsx +++ b/src/app/(admin)/(others-pages)/(tables)/user-table/page.tsx @@ -72,6 +72,7 @@ export default function UserTable() { }; const response = await apiGetListUser(payload); + if (response?.status) { setTableData(response); } diff --git a/src/app/globals.css b/src/app/globals.css index eeb7d38..63c46a5 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -5,6 +5,7 @@ @theme { --font-*: initial; --font-outfit: Outfit, sans-serif; + --font-inter: "Inter", ui-sans-serif, system-ui, sans-serif; --breakpoint-*: initial; --breakpoint-2xsm: 375px; @@ -188,7 +189,7 @@ cursor: pointer; } body { - @apply relative font-normal font-outfit z-1 bg-gray-50; + @apply relative font-normal font-inter z-1 bg-gray-50; } } diff --git a/src/app/layout.tsx b/src/app/layout.tsx index d4f2ed5..b6b20bb 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,4 +1,4 @@ -import { Outfit } from 'next/font/google'; +import { Inter } from 'next/font/google'; import './globals.css'; import "flatpickr/dist/flatpickr.css"; import { SidebarProvider } from '@/context/SidebarContext'; @@ -6,7 +6,7 @@ import { ThemeProvider } from '@/context/ThemeContext'; import { Toaster } from 'sonner'; import StoreProvider from '@/store/StoreProvider'; -const outfit = Outfit({ +const inter = Inter({ subsets: ["latin"], }); @@ -17,7 +17,7 @@ export default function RootLayout({ }>) { return ( - + {children} diff --git a/src/components/tables/ChangeRoleModal.tsx b/src/components/tables/ChangeRoleModal.tsx index 5b1f02b..1b101a8 100644 --- a/src/components/tables/ChangeRoleModal.tsx +++ b/src/components/tables/ChangeRoleModal.tsx @@ -18,6 +18,8 @@ interface ChangeRoleModalProps { onSuccess: () => void; } +const DEFAULT_ROLE_NAME = "USER"; + export default function ChangeRoleModal({ isOpen, onClose, user, onSuccess }: ChangeRoleModalProps) { const [roles, setRoles] = useState([]); const [selectedRoleIds, setSelectedRoleIds] = useState([]); @@ -42,9 +44,13 @@ export default function ChangeRoleModal({ isOpen, onClose, user, onSuccess }: Ch } }, [isOpen, user]); - const handleToggleRole = (roleId: string) => { + const handleToggleRole = (roleId: string, isDefault: boolean) => { + if (isDefault) return; + setSelectedRoleIds((prev) => - prev.includes(roleId) ? prev.filter((id) => id !== roleId) : [...prev, roleId] + prev.includes(roleId) + ? prev.filter((id) => id !== roleId) + : [...prev, roleId] ); }; @@ -54,11 +60,12 @@ export default function ChangeRoleModal({ isOpen, onClose, user, onSuccess }: Ch try { setLoading(true); + const payload = { role_ids: selectedRoleIds, user_id: user.id, }; - console.log("Payload gửi lên API:", payload); + await apiChangeRole(user.id, payload); toast.success("Cập nhật vai trò thành công!"); onSuccess(); @@ -95,20 +102,42 @@ export default function ChangeRoleModal({ isOpen, onClose, user, onSuccess }: Ch
{roles.map((role) => { const isSelected = selectedRoleIds.includes(role.id); + const isDefault = role.name === DEFAULT_ROLE_NAME; + return ( ); })} diff --git a/src/components/user-profile/UserMetaCard.tsx b/src/components/user-profile/UserMetaCard.tsx index b0747b6..52c8825 100644 --- a/src/components/user-profile/UserMetaCard.tsx +++ b/src/components/user-profile/UserMetaCard.tsx @@ -33,7 +33,7 @@ export default function UserMetaCard({ data }: { data: UserMetaCardProps }) { "No roles available"}

-

+

{data.data?.profile?.bio || "No bio available"}

diff --git a/src/service/adminService.ts b/src/service/adminService.ts index 702f13f..b4e8d17 100644 --- a/src/service/adminService.ts +++ b/src/service/adminService.ts @@ -11,7 +11,7 @@ export const apiGetListUser = async (payload: getUserDto) => { export const apiChangeRole = async (id: string, payload: any) => { const response = await api.patch(API.Admin.CHANGE_ROLE(id), payload); - console.log("Response từ API sau khi đổi role:", response); + // console.log("Response từ API sau khi đổi role:", response); return response?.data; }; export const apiDeleteUser = async (id: string) => {