trackProductEvent static method

Future<void> trackProductEvent(
  1. TrackProductEventArgs args
)

Implementation

static Future<void> trackProductEvent(TrackProductEventArgs args) async {
  final isTrackingEnabled =
      await cacheInstance.getValue(cdnConfigInstance.getKeys(StorageKeyKeys.isSnowplowTrackingEnabled)!);
  if (isTrackingEnabled == 'false') return;

  String cartId = args.cartId;
  if (cartId.contains('gid://shopify/Cart/')) {
    cartId = _trimCartId(cartId);
  }

  final params = {
    'page_url': args.pageUrl,
    'page_title': args.name ?? '',
    'product_id': args.productId.toString(),
    'variant_id': args.variantId.toString(),
  };

  if (cartId.isNotEmpty) {
    params['cart_id'] = cartId;
  }

  final contextDetails = TrackProductEventContext(
    productId: args.productId.toString(),
    imgUrl: args.imgUrl ?? '',
    variantId: args.variantId.toString(),
    productName: args.name ?? '',
    productPrice: args.price?.toString() ?? '',
    productHandle: args.handle?.toString() ?? '',
    type: 'product',
  );

  final contexts = (await Future.wait([
    getProductContext(contextDetails),
    getCartContext(cartId),
    getUserContext(),
    getDeviceInfoContext(),
  ])).where((context) => context != null).cast<SelfDescribing>().toList();

  await _trackEvent(params, contexts);
}