import { ActionIcon, Group, Loader, ScrollArea, Stack, Table, Title, Tooltip } from "@mantine/core";
import { t } from "@/config/i18n";
import { useCreateUser, useEditUser, useGetUser, useGetUsers } from "@/services/api";
import { IconPlus } from "@tabler/icons-react";
import UserRow from "@/components/Users/Row";
import { useLocation, useNavigate, useSearchParams } from "react-router";
import { UserModal } from "@/components/Users/Modal";
import { useCallback, useMemo } from "react";
import { type User, type UserInputs } from "@/services/resources/users";
import UsersFilters from "@/components/Users/Filter";
export default function Users() {
const [searchParams, setSearchParams] = useSearchParams();
const location = useLocation();
const navigate = useNavigate();
const isCreate = location.pathname === "/dashboard/users/create";
const isEdit = location.pathname.includes("/edit");
const editId = useMemo(() => {
if (isEdit) {
return location.pathname.split("/")[3];
}
return null;
}, [location, isEdit]);
const closeModal = useCallback(() => {
navigate(`/dashboard/users${searchParams ? `?${searchParams.toString()}` : ""}`);
}, [navigate, searchParams]);
const { data: users, isPending } = useGetUsers(searchParams);
const { data: currentUser } = useGetUser(Number(editId), {
enabled: !!editId,
});
const { data: allUsers } = useGetUsers();
const names = useMemo(() => {
return allUsers
?.map((user: User) => user.name)
.filter((season, index, array) => array.indexOf(season) === index);
}, [allUsers]);
const createUserMutation = useCreateUser();
const editUserMutation = useEditUser();
const handleCreateUser = useCallback(
async (user: UserInputs) => {
await createUserMutation.mutateAsync(user);
closeModal();
},
[createUserMutation, closeModal],
);
const handleEditUser = useCallback(
async (user: UserInputs, id?: number) => {
if (!id) return;
await editUserMutation.mutateAsync({
id: id,
user: user,
});
closeModal();
},
[editUserMutation, closeModal],
);
const onFilterChange = useCallback(
(values: string[], filter: string) => {
setSearchParams((prev) => {
const params = new URLSearchParams(prev);
params.delete(filter);
values.forEach((value) => {
params.append(filter, value);
});
return params;
});
},
[setSearchParams],
);
if (!users || isPending)
return (
);
return (
{t("all users", { capfirst: true })}
{
e.stopPropagation();
navigate(
`/dashboard/users/create${searchParams ? `?${searchParams.toString()}` : ""}`,
);
}}
>
{t("name", { capfirst: true })}
{t("email", { capfirst: true })}
{t("actions", { capfirst: true })}
{users.map((user) => (
))}
);
}