productAddedToCart()

in src/web-ui/src/analytics/AnalyticsHandler.js [270:390]


    productAddedToCart(user, cart, product, quantity, feature, experimentCorrelationId) {
        if (user) {
            AmplifyAnalytics.record({
                name: 'ProductAdded',
                attributes: {
                    userId: user.id,
                    cartId: cart.id,
                    productId: product.id,
                    name: product.name,
                    category: product.category,
                    image: product.image,
                    feature: feature,
                    experimentCorrelationId: experimentCorrelationId
                },
                metrics: {
                    quantity: quantity,
                    price: +product.price.toFixed(2)
                }
            })

            AmplifyAnalytics.updateEndpoint({
                userId: user.id,
                userAttributes: {
                    HasShoppingCart: ['true']
                },
                metrics: {
                    ItemsInCart: cart.items.length
                }
            })
        }

        if (this.personalizeEventTrackerEnabled()) {
            AmplifyAnalytics.record({
                eventType: 'ProductAdded',
                userId: user ? user.id : AmplifyStore.state.provisionalUserID,
                properties: {
                    itemId: product.id,
                    discount: "No"
                }
            }, 'AmazonPersonalize')
            AmplifyStore.commit('incrementSessionEventsRecorded');
        }

        let eventProperties = {
            userId: user ? user.id : null,
            cartId: cart.id,
            productId: product.id,
            name: product.name,
            category: product.category,
            image: product.image,
            feature: feature,
            experimentCorrelationId: experimentCorrelationId,
            quantity: quantity,
            price: +product.price.toFixed(2)
        };

        if (this.segmentEnabled()) {
            window.analytics.track('ProductAdded', eventProperties);
        }

        if (this.mParticleEnabled()) {
            let productName = product.name;
            let productId = product.id;
            let productPrice = product.price;
    
            let productDetails = window.mParticle.eCommerce.createProduct(
                productName,
                productId,
                parseFloat(productPrice),
                quantity
            );
            let totalAmount = productPrice * quantity;
            let transactionAttributes = {
                Id: cart.id,
                Revenue: totalAmount,
                Tax: totalAmount * .10
            };
    
            let customAttributes = {
                mpid: window.mParticle.Identity.getCurrentUser().getMPID(),
                cartId: cart.id,
                category: product.category,
                image: product.image,
                feature: feature,
                experimentCorrelationId: experimentCorrelationId
            };
    
            // Send details of viewed product to mParticle
            window.mParticle.eCommerce.logProductAction(window.mParticle.ProductActionType.AddToCart, productDetails, customAttributes, {}, transactionAttributes);
        }

        if (this.amplitudeEnabled()) {
            Amplitude.getInstance().logEvent('ProductAdded', eventProperties);
        }

        if (user && this.optimizelyEnabled()) {
            const optimizelyClientInstance = this.optimizelyClientInstance();
            const expectedRevisionNumber = optimizelyClientInstance.configObj.revision;
            if (this.isOptimizelyDatafileSynced(expectedRevisionNumber)) {
                const userId = user.id.toString();
                optimizelyClientInstance.track('ProductAdded', userId);
            }
        }

        if (this.googleAnalyticsEnabled()) {
            Vue.prototype.$gtag.event('add_to_cart', {
                "currency": "USD",
                "value": +product.price.toFixed(2),
                "items": [
                  {
                    "item_id": product.id,
                    "item_name": product.name,
                    "item_category": product.category,
                    "quantity": quantity,
                    "currency": "USD",
                    "price": +product.price.toFixed(2)
                  }
                ]
            });
        }
    },