import { MetaFunction, useNavigate, useParams } from "@remix-run/react"; import { useEffect, useState } from "react"; import { Trash2, UserPlus, Loader2 } from "lucide-react"; import HeaderWithSupport from "../components/HeaderWithSupport"; import AppInput from "../components/AppInput"; import { Button } from "../components/ui/button"; import { useStoreOwnership } from "../hooks/useStoreOwnership"; import { useStoreMembers, useInviteMember, useRemoveMember, } from "../requestHandler/use-seller-hooks"; import { useToast } from "../hooks/use-toast"; import UiProvider from "../components/UiProvider"; export default function StoreTeam() { const { storeId } = useParams(); const navigate = useNavigate(); const { toast } = useToast(); // Team management is owner-only. const { isLoading: isAccessLoading, role } = useStoreOwnership(storeId); useEffect(() => { if (!isAccessLoading && role && role !== "owner") { navigate(`/store/${storeId}`); } }, [isAccessLoading, role, storeId, navigate]); const { data: members, isLoading, isError, refetch, } = useStoreMembers(storeId); const inviteMember = useInviteMember(storeId); const removeMember = useRemoveMember(storeId); const [phone, setPhone] = useState(""); const handleInvite = () => { const trimmed = phone.trim(); if (!trimmed) return; inviteMember.mutate(trimmed, { onSuccess: () => { setPhone(""); toast({ title: "دعوت انجام شد", description: "عضو جدید به تیم فروشگاه اضافه شد.", }); }, onError: (e: unknown) => { toast({ title: "خطا", description: e instanceof Error ? e.message : "دعوت عضو ناموفق بود.", variant: "destructive", }); }, }); }; const handleRemove = (id: string) => { removeMember.mutate(id, { onSuccess: () => toast({ title: "حذف شد", description: "عضو از تیم حذف شد." }), onError: () => toast({ title: "خطا", description: "حذف عضو ناموفق بود.", variant: "destructive", }), }); }; return (
دعوت عضو جدید با شماره موبایل
عضو دعوتشده میتواند محصولات، سفارشها و پیامهای فروشگاه را مدیریت کند اما به بخش مالی، تنظیمات فروشگاه و مدیریت تیم دسترسی ندارد. اگر حساب کاربری با این شماره وجود نداشته باشد، دعوت تا اولین ورود او در حالت «در انتظار» میماند.
اعضای تیم
{m.name || m.phone}
{m.phone}