|
@@ -17,6 +17,8 @@ import { useUserContext } from "@app/hooks/useUserContext";
|
|
import api from "@app/api";
|
|
import api from "@app/api";
|
|
import { useOrgContext } from "@app/hooks/useOrgContext";
|
|
import { useOrgContext } from "@app/hooks/useOrgContext";
|
|
import { useToast } from "@app/hooks/useToast";
|
|
import { useToast } from "@app/hooks/useToast";
|
|
|
|
+import ManageUserForm from "./ManageUserForm";
|
|
|
|
+import Link from "next/link";
|
|
|
|
|
|
export type UserRow = {
|
|
export type UserRow = {
|
|
id: string;
|
|
id: string;
|
|
@@ -30,10 +32,12 @@ type UsersTableProps = {
|
|
users: UserRow[];
|
|
users: UserRow[];
|
|
};
|
|
};
|
|
|
|
|
|
-export default function UsersTable({ users }: UsersTableProps) {
|
|
|
|
|
|
+export default function UsersTable({ users: u }: UsersTableProps) {
|
|
const [isInviteModalOpen, setIsInviteModalOpen] = useState(false);
|
|
const [isInviteModalOpen, setIsInviteModalOpen] = useState(false);
|
|
const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);
|
|
const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);
|
|
- const [userToRemove, setUserToRemove] = useState<UserRow | null>(null);
|
|
|
|
|
|
+ const [selectedUser, setSelectedUser] = useState<UserRow | null>(null);
|
|
|
|
+
|
|
|
|
+ const [users, setUsers] = useState<UserRow[]>(u);
|
|
|
|
|
|
const user = useUserContext();
|
|
const user = useUserContext();
|
|
const { org } = useOrgContext();
|
|
const { org } = useOrgContext();
|
|
@@ -120,7 +124,11 @@ export default function UsersTable({ users }: UsersTableProps) {
|
|
</DropdownMenuTrigger>
|
|
</DropdownMenuTrigger>
|
|
<DropdownMenuContent align="end">
|
|
<DropdownMenuContent align="end">
|
|
<DropdownMenuItem>
|
|
<DropdownMenuItem>
|
|
- Manage user
|
|
|
|
|
|
+ <Link
|
|
|
|
+ href={`/${org?.org.orgId}/settings/access/users/${userRow.id}`}
|
|
|
|
+ >
|
|
|
|
+ Manage User
|
|
|
|
+ </Link>
|
|
</DropdownMenuItem>
|
|
</DropdownMenuItem>
|
|
{userRow.email !== user?.email && (
|
|
{userRow.email !== user?.email && (
|
|
<DropdownMenuItem>
|
|
<DropdownMenuItem>
|
|
@@ -128,7 +136,7 @@ export default function UsersTable({ users }: UsersTableProps) {
|
|
className="text-red-600 hover:text-red-800"
|
|
className="text-red-600 hover:text-red-800"
|
|
onClick={() => {
|
|
onClick={() => {
|
|
setIsDeleteModalOpen(true);
|
|
setIsDeleteModalOpen(true);
|
|
- setUserToRemove(userRow);
|
|
|
|
|
|
+ setSelectedUser(userRow);
|
|
}}
|
|
}}
|
|
>
|
|
>
|
|
Remove User
|
|
Remove User
|
|
@@ -145,9 +153,9 @@ export default function UsersTable({ users }: UsersTableProps) {
|
|
];
|
|
];
|
|
|
|
|
|
async function removeUser() {
|
|
async function removeUser() {
|
|
- if (userToRemove) {
|
|
|
|
|
|
+ if (selectedUser) {
|
|
const res = await api
|
|
const res = await api
|
|
- .delete(`/org/${org!.org.orgId}/user/${userToRemove.id}`)
|
|
|
|
|
|
+ .delete(`/org/${org!.org.orgId}/user/${selectedUser.id}`)
|
|
.catch((e) => {
|
|
.catch((e) => {
|
|
toast({
|
|
toast({
|
|
variant: "destructive",
|
|
variant: "destructive",
|
|
@@ -162,8 +170,12 @@ export default function UsersTable({ users }: UsersTableProps) {
|
|
toast({
|
|
toast({
|
|
variant: "default",
|
|
variant: "default",
|
|
title: "User removed",
|
|
title: "User removed",
|
|
- description: `The user ${userToRemove.email} has been removed from the organization.`,
|
|
|
|
|
|
+ description: `The user ${selectedUser.email} has been removed from the organization.`,
|
|
});
|
|
});
|
|
|
|
+
|
|
|
|
+ setUsers((prev) =>
|
|
|
|
+ prev.filter((u) => u.id !== selectedUser?.id)
|
|
|
|
+ );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setIsDeleteModalOpen(false);
|
|
setIsDeleteModalOpen(false);
|
|
@@ -175,13 +187,13 @@ export default function UsersTable({ users }: UsersTableProps) {
|
|
open={isDeleteModalOpen}
|
|
open={isDeleteModalOpen}
|
|
setOpen={(val) => {
|
|
setOpen={(val) => {
|
|
setIsDeleteModalOpen(val);
|
|
setIsDeleteModalOpen(val);
|
|
- setUserToRemove(null);
|
|
|
|
|
|
+ setSelectedUser(null);
|
|
}}
|
|
}}
|
|
dialog={
|
|
dialog={
|
|
<div>
|
|
<div>
|
|
<p className="mb-2">
|
|
<p className="mb-2">
|
|
Are you sure you want to remove{" "}
|
|
Are you sure you want to remove{" "}
|
|
- <b>{userToRemove?.email}</b> from the organization?
|
|
|
|
|
|
+ <b>{selectedUser?.email}</b> from the organization?
|
|
</p>
|
|
</p>
|
|
|
|
|
|
<p className="mb-2">
|
|
<p className="mb-2">
|
|
@@ -199,7 +211,7 @@ export default function UsersTable({ users }: UsersTableProps) {
|
|
}
|
|
}
|
|
buttonText="Confirm remove user"
|
|
buttonText="Confirm remove user"
|
|
onConfirm={removeUser}
|
|
onConfirm={removeUser}
|
|
- string={userToRemove?.email ?? ""}
|
|
|
|
|
|
+ string={selectedUser?.email ?? ""}
|
|
title="Remove user from organization"
|
|
title="Remove user from organization"
|
|
/>
|
|
/>
|
|
|
|
|