import { userQueries } from "@/entities/user";
import { useVerifiedShamanState } from "@/entities/verifiedshaman/model/slice";
import { DisplayUser } from "@/features/display-user";
import { ErrorMessage } from "@/shared/ui/ErrorMessage";
import { Loader } from "@/shared/ui/Loader";
import { ManageItem } from "@/widgets/ManageItem";
import { useQuery } from "@tanstack/react-query";
import { useSearchParams } from "react-router";
import { RemoveVerifiedShamanBtn } from "./RemoveVerifiedShamanBtn";
interface VerifiedShamansListProps {
searchParamName?: string;
}
export const VerifiedShamansList: React.FC<VerifiedShamansListProps> = ({
searchParamName = "search",
}) => {
const [searchParams] = useSearchParams();
const searchQuery = searchParams.get(searchParamName) || undefined;
const {
data: users,
isLoading,
error,
} = useQuery(userQueries.verifiedShamans(searchQuery));
const { removedVerifiedShaman, addedVerifiedShaman } =
useVerifiedShamanState();
if (isLoading) return <Loader />;
if (error) return <ErrorMessage errors={error} />;
if (!users)
return (
<ErrorMessage
errors={new Error("Some problem with getting verified shamans")}
/>
);
const addresses = users.map((user) => user.address);
const uniqueAddresses = [
...new Set(
[...addresses, ...addedVerifiedShaman].filter(
(address) => !removedVerifiedShaman.includes(address),
),
),
];
return (
<ul className="divide-y divide-secondary/60 py-2">
{uniqueAddresses.map((address) => (
<ManageItem
key={address}
title={<DisplayUser address={address} />}
render={() => [
<RemoveVerifiedShamanBtn key={address} shamanAddress={address} />,
]}
/>
))}
</ul>
);
};