Iremos primeiro criar o serviço de pegar as informações do vendedor
interface SellerProps {
sellerId: string;
}
{/* Outros códigos */}
getSellerProfile: async ({ sellerId }: SellerProps) => {
const token = await SecureStore.getItemAsync("onebitshop-token");
const res = await api.get(`/users/${sellerId}`, {
headers: {
Authorization: `Bearer ${token}`,
},
});
return res;
},
Nós sabemos que o usuário pode acessar o perfil do vendedor por 2 locais, que é pelo produto que ele vende e também pelo chat, vamos passar através do produto que ele vende o id do vendedor, vamos então colocar o sellerId passando pela rota
SellerProfile: {
sellerId: string;
};
Agora passaremos de para dentro de sellerInfo as informações de produto, para que lá dentro a agente possa pegar o sellerId
<SellerInfo product={route.params} />
Vamos agora passar isso através do sellerInfo, que é um componente dentro de product
interface Props {
params: Product;
}
const SellerInfo = ({ params }: Props) => {
Agora que temos o serviço, vamos pegar onde precisamos, que é primeiro na tela de sellerProfile
const Rate = parseInt(product.seller.rating);
return (
<Container>
<SellerContainer>
<Name>{product.seller.name}</Name>
<SeeProfile
onPress={() => {
navigation.navigate("SellerProfile", {
sellerId: product.seller._id,
});
}}
>
Ver Perfil
</SeeProfile>
Agora que recebemos o Id do vendedor, podemos chamar as informações dele, e vamos também comentar as linhas cm erro, para resolvermos jaja
type Props = NativeStackScreenProps<PropsNavigationStack, "SellerProfile">;
const SellerProfile = ({ route }: Props) => {
const [loading, setLoading] = useState(true);
const [userInfo, setUserInfo] = useState<Seller>();
Agora iremos criar o handle e chamar ele
const handleGetInfos = async () => {
const data = await profileService.getSellerProfile(route.params);
setUserInfo(data?.data);
setLoading(false);
};
useEffect(() => {
handleGetInfos();
}, []);
Agora que temos isso, nós podemos já colocar aqui as informações desse vendedor nas props
useEffect(() => {
handleGetInfos();
}, []);
if (!userInfo || loading) {
return <Loader />;
}
return (
<>
<Container contentContainerStyle={{ paddingBottom: 125 }}>
<DefaultTitle title="PERFIL DO VENDEDOR" fontSize={20} />
<ProfileInfo userInfo={userInfo} />
<UserAds products={userInfo?.products} seller={true} />
</>
</>
);
Faremos a mesma coisa de ProfileInfo para o nosso
Agora já temos corretamente aqui as informações do vendedor aparecendo
Ao clicarmos no produto, como somos o dono dele, somos mandados para um local onde vemos a parte de edição, isso é simples de resolver, basta irmos lá no UserAds e colocar uma rota diferente caso o seller seja true
<Card
activeOpacity={0.85}
onPress={() => {
!seller
? navigation.navigate("UpdateProduct", {
_id: product._id,
name: product.name,
price: product.price,
images: product.images,
description: product.description,
category: product.category,
addressId: product.address._id,
})
: navigation.navigate("Product", {
...product,
});
}}
key={product._id}
>
Agora a tela de Feedback vai receber via rota o userInfo que temos que passar para o ProfileInfo