Skip to content
Extraits de code Groupes Projets
Valider 148273c5 rédigé par aicha.elyamalhi's avatar aicha.elyamalhi
Parcourir les fichiers

Change snackbar message for product addition to cart

parent 6816dc9f
Branches
1 requête de fusion!236MYD-177/Change snackbar message for product addition to cart
Pipeline #5550 réussi avec l'étape
in 8 minutes et 24 secondes
......@@ -43,7 +43,7 @@ function extractUrl(str: string) {
type Props = {
product: IProductSessionItem;
onSelect:(productId: any, quantity: number,type: ProductType) => void;
onSelect:(productId: any, quantity: number,type: ProductType,name:string) => void;
};
......@@ -255,7 +255,7 @@ export default function ProductVariationsCard({ product,onSelect }: Props) {
newQuantities[variationId] = 1;
}
setSelectedQuantity(newQuantities[variationId]);
handleSelectProduct(variationId,newQuantities[variationId]);
handleSelectProduct(variationId,newQuantities[variationId],getProductNameById(variationId));
return newQuantities;
});
......@@ -271,17 +271,22 @@ export default function ProductVariationsCard({ product,onSelect }: Props) {
return acc;
}, {} as { [key: string]: number });
setSelectedQuantity(newQuantities[variationId]);
handleSelectProduct(variationId,newQuantities[variationId]);
handleSelectProduct(variationId,newQuantities[variationId],getProductNameById(variationId));
return newQuantities;
});
};
const getProductNameById = (id: any): string => {
if(product.productType==ProductType.SIMPLE){
return product.name;
}
const variation = product.variations.find((p) => p.id === id);
return variation ? variation.name : 'Unknown Product';
};
const handleSelectProduct = (productId: any,quantity:number) => {
onSelect(productId,quantity,product.productType);
const handleSelectProduct = (productId: any,quantity:number,name:string) => {
onSelect(productId,quantity,product.productType,name);
};
......@@ -435,7 +440,7 @@ export default function ProductVariationsCard({ product,onSelect }: Props) {
: 1;
return acc;
}, {} as { [key: string]: number });
handleSelectProduct(variation.id,newQuantities[variation.id]);
handleSelectProduct(variation.id,newQuantities[variation.id],getProductNameById(variation.id));
return newQuantities;
});
}}
......
......@@ -83,6 +83,10 @@ export default function LiveCard({ liveId }: Props) {
const [selectedProductType, setSelectedProductType] = useState<ProductType | null>(null);
const [isRegistered, setIsRegistered] = useState(false);
const [showWebStockDialog, setShowWebStockDialog] = useState(false);
const [selectedProductName, setSelectedProductName] = useState<string>('');
const [selectedClientEmail, setSelectedClientEmail] = useState<string>('');
......@@ -300,14 +304,21 @@ export default function LiveCard({ liveId }: Props) {
setOpenSnackbar(false);
};
const handleSelectProduct = (id: any, quantity: number,type:ProductType) => {
const handleSelectProduct = (id: any, quantity: number,type:ProductType,name:string) => {
setSelectedProductId(id);
setSelectedQuantity(quantity);
setSelectedProductType(type);
setSelectedProductName(name);
};
const getSelectedProduct = () => {
return selectedProduct?.productType === ProductType.SIMPLE
? selectedProduct
: selectedProduct?.variations.find((p) => p.id === selectedProductId);
};
const handleAddToCart = async (clientId: string, isRegisteredFlag: boolean) => {
const handleAddToCart = async (clientId: string,isRegisteredFlag: boolean,clientEmail:string) => {
if ( !selectedProductId ||selectedQuantity=== 0) {
setSnackbarMessage("Veuillez sélectionner un produit et une quantité.");
......@@ -318,6 +329,7 @@ export default function LiveCard({ liveId }: Props) {
setSelectedClientId(clientId);
setIsRegistered( isRegisteredFlag);
setSelectedClientEmail(clientEmail)
if ( !clientId ) {
setSnackbarMessage("Veuillez sélectionner un client");
......@@ -326,10 +338,7 @@ export default function LiveCard({ liveId }: Props) {
return;
}
const normalizedProductId = typeof selectedProductId === "string" ? Number(selectedProductId) : selectedProductId;
const product = selectedProduct?.productType === ProductType.SIMPLE
? selectedProduct
: selectedProduct?.variations.find((p) => p.id === normalizedProductId);
const product = getSelectedProduct();
if (!product) {
enqueueSnackbar("Produit introuvable.", { variant: "error" });
......@@ -346,11 +355,11 @@ export default function LiveCard({ liveId }: Props) {
return;
}
}
await addToCart(false, isRegistered,clientId);
await addToCart(false, isRegistered,clientId,clientEmail);
};
const addToCart = async (useWebStockForLiveOverride: boolean, isRegistered: boolean, clientId: string) => {
const addToCart = async (useWebStockForLiveOverride: boolean, isRegistered: boolean, clientId: string,clientEmail:string) => {
const sessionRequest = {
clientId,
productId: selectedProductId,
......@@ -359,7 +368,8 @@ export default function LiveCard({ liveId }: Props) {
type: selectedProductType,
useWebStockForLive: useWebStockForLiveOverride,
};
console.log("session request:",sessionRequest)
enqueueSnackbar(`${selectedProductName} en cours d'ajout pour ${clientEmail}`, { variant: "info" });
try {
if (isRegistered) {
await addProductToCartFromLive(sessionRequest);
......@@ -367,9 +377,8 @@ export default function LiveCard({ liveId }: Props) {
await addProductToUnregisteredCartFromLive(sessionRequest);
}
const product = selectedProduct?.productType === ProductType.SIMPLE
? selectedProduct
: selectedProduct?.variations.find((p) => p.id === selectedProductId);
const product = getSelectedProduct();
if (product) {
if (useWebStockForLiveOverride) {
product.stockWebConfig.quantity -= selectedQuantity;
......@@ -386,7 +395,7 @@ export default function LiveCard({ liveId }: Props) {
}),
} : null);
}
enqueueSnackbar("Produit ajouté au panier avec succès", { variant: "success" });
enqueueSnackbar(`${selectedProductName} avec succès pour ${clientEmail}`, { variant: "success" });
} catch (error: any) {
......@@ -404,12 +413,12 @@ export default function LiveCard({ liveId }: Props) {
const cancelWebStockUsage = () => {
setShowWebStockDialog(false);
setUseWebStockForLive(false);
addToCart(false, isRegistered,selectedClientId);
addToCart(false, isRegistered,selectedClientId,selectedClientEmail);
};
const confirmUseWebStock = () => {
setUseWebStockForLive(true);
setShowWebStockDialog(false)
addToCart(true, isRegistered,selectedClientId);
addToCart(true, isRegistered,selectedClientId,selectedClientEmail);
};
return (
......
......@@ -55,7 +55,7 @@ const defaultFilters: IUserTableFilters = {
status: "all",
};
type AllUsersViewProps = {
onAddToCart: (clientId: string,isRegistred:boolean) => void;
onAddToCart: (clientId: string,isRegistred:boolean,clientEmail:string) => void;
};
......
......@@ -28,7 +28,7 @@ import { useSnackbar } from "@/components/snackbar";
type Props = {
row: any;
onAddToCart: (clientId: string,isRegistred:boolean) => void;};
onAddToCart: (clientId: string,isRegistred:boolean,clientEmail:string) => void;};
export default function UserTableRow({ row, onAddToCart}: Props) {
const name = row.pseudo;
......@@ -68,7 +68,7 @@ export default function UserTableRow({ row, onAddToCart}: Props) {
};
const handleAddToCart = () => {
onAddToCart(row.id,false);
onAddToCart(row.id,false,name);
};
return (
<TableRow>
......
......@@ -64,7 +64,7 @@ const defaultFilters: IUserTableFilters = {
status: "all",
};
type AllUsersViewProps = {
onAddToCart: (clientId: string,isRegistred:boolean) => void;
onAddToCart: (clientId: string,isRegistred:boolean,clientEmail:string) => void;
};
// ----------------------------------------------------------------------
......
......@@ -26,7 +26,7 @@ import CheckCircleIcon from "@mui/icons-material/CheckCircle";
type Props = {
row: any;
onAddToCart: (clientId: string,isRegistred:boolean) => void;};
onAddToCart: (clientId: string,isRegistred:boolean,clientEmail:string) => void;};
export default function UserTableRow({ row ,onAddToCart}: Props) {
const { firstName,lastName, status, email, pseudo, imageUrl, id, uid,CreatedDate } = row;
......@@ -54,7 +54,7 @@ export default function UserTableRow({ row ,onAddToCart}: Props) {
};
const handleAddToCart = () => {
onAddToCart(row.uid,true);
onAddToCart(row.uid,true,row.email);
};
const getStatusLabel = (status: string) => {
const statusOption = USER_STATUS_OPTIONS.find(option => option.value === status);
......
0% ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter