Working on role in workspace.

This commit is contained in:
charles-gauthereau
2024-12-31 10:54:18 +01:00
parent e1a7ca8558
commit 6f75079a40
29 changed files with 464 additions and 124 deletions
@@ -1,18 +1,12 @@
"use client"
import {Tabs, TabsContent, TabsList, TabsTrigger} from "@/components/ui/tabs";
import {DataTableWithPagination} from "@/components/wrappers/common/table/data-table-with-pagination";
import {usersColumns} from "@/components/wrappers/dashboard/settings/SettingsUsersTab/columns-users-settings";
import {User, Settings} from "@prisma/client";
import {backupColumns} from "@/features/backup/columns";
import {SettingsEmailTab} from "@/components/wrappers/dashboard/admin/AdminEmailTab/SettingsEmailTab";
import {SettingsStorageTab} from "@/components/wrappers/dashboard/admin/AdminStorageTab/SettingsStorageTab";
import {User, Settings, UserOrganization} from "@prisma/client";
import {SettingsUsersTab} from "@/components/wrappers/dashboard/settings/SettingsUsersTab/SettingsUsersTab";
export type SettingsTabsProps = {
currentUser: User;
users: User[];
users: UserOrganization[];
settings: Settings;
}
@@ -1,12 +1,14 @@
import {User} from "@prisma/client";
import {User, UserOrganization} from "@prisma/client";
import {DataTableWithPagination} from "@/components/wrappers/common/table/data-table-with-pagination";
import {usersColumns} from "@/components/wrappers/dashboard/settings/SettingsUsersTab/columns-users-settings";
import {UsersDataTable} from "@/components/wrappers/dashboard/admin/admin-user-table";
import {Table, TableBody, TableCell, TableHead, TableHeader, TableRow} from "@/components/ui/table";
import {flexRender, Row} from "@tanstack/react-table";
import {cn} from "@/lib/utils";
export type SettingsUsersTabProps = {
currentUser: User;
users: User[]
users: UserOrganization[]
}
export const SettingsUsersTab = (props: SettingsUsersTabProps) => {
@@ -28,4 +30,68 @@ export const SettingsUsersTab = (props: SettingsUsersTabProps) => {
</div>
</div>
)
}
}
export type usersDataTableProps = {
currentUser: User;
table: any,
}
export const UsersDataTable = ({currentUser, table}: usersDataTableProps) => {
return (
<div className="rounded-md border w-full ">
<Table className="w-full">
<TableHeader>
{table.getHeaderGroups().map((headerGroup) => (
<TableRow key={headerGroup.id}>
{headerGroup.headers.map((header) => {
return (
<TableHead key={header.id}>
{header.isPlaceholder
? null
: flexRender(
header.column.columnDef.header,
header.getContext()
)}
</TableHead>
)
})}
</TableRow>
))}
</TableHeader>
<TableBody>
{table.getRowModel().rows?.length ? (
table.getRowModel().rows.map((row: Row<UserOrganization>) => {
return(
<TableRow
className={cn((row.original.userId) === currentUser.id ? "opacity-40 pointer-events-none" : "")}
key={row.id}
data-state={row.getIsSelected() && "selected"}
>
{row.getVisibleCells().map((cell) => (
<TableCell key={cell.id}>
{flexRender(
cell.column.columnDef.cell,
cell.getContext(),
)}
</TableCell>
))}
</TableRow>
)
}
)) : (
<TableRow>
<TableCell colSpan={table.getAllColumns().length} className="h-24 text-center">
No results.
</TableCell>
</TableRow>
)}
</TableBody>
</Table>
</div>
)
}
@@ -2,7 +2,7 @@
import {ColumnDef} from "@tanstack/react-table"
import {Badge} from "@/components/ui/badge";
import {User} from "@prisma/client";
import {User, UserOrganization} from "@prisma/client";
import {updateUserAction} from "@/components/wrappers/dashboard/profile/UserForm/user-form.action";
import {useMutation} from "@tanstack/react-query";
import {toast} from "sonner";
@@ -12,7 +12,7 @@ import {Trash2} from "lucide-react";
import {deleteUserAction} from "@/components/wrappers/dashboard/profile/ButtonDeleteAccount/delete-account.action";
import {ButtonWithLoading} from "@/components/wrappers/common/button/button-with-loading";
export const usersColumns: ColumnDef<User>[] = [
export const usersColumns: ColumnDef<UserOrganization>[] = [
{
accessorKey: "role",
header: "Role",
@@ -20,24 +20,24 @@ export const usersColumns: ColumnDef<User>[] = [
const router = useRouter();
const [role, setRole] = useState<string>(row.getValue("role"))
const updateMutation = useMutation({
mutationFn: () => updateUserAction({id: row.original.id, data: {role: role}}),
onSuccess: () => {
toast.success(`User updated successfully.`);
router.refresh()
},
onError: () => {
toast.error(`An error occurred while updating user information.`);
},
});
// const updateMutation = useMutation({
// mutationFn: () => updateUserAction({id: row.original.id, data: {role: role}}),
// onSuccess: () => {
// toast.success(`User updated successfully.`);
// router.refresh()
//
// },
// onError: () => {
// toast.error(`An error occurred while updating user information.`);
// },
// });
const handleUpdateRole = async () => {
const nextRole = role === "admin" ? "pending"
: role === "pending" ? "user"
const nextRole = role === "admin" ? "member"
: role === "member" ? "user"
: "admin";
setRole(nextRole);
await updateMutation.mutateAsync()
// await updateMutation.mutateAsync()
};
return <Badge
@@ -47,11 +47,11 @@ export const usersColumns: ColumnDef<User>[] = [
},
},
{
accessorKey: "name",
accessorKey: "user.name",
header: "Name"
},
{
accessorKey: "email",
accessorKey: "user.email",
header: "Email"
},
{