@instockng/storefront-ui 1.0.33 → 1.0.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/contexts/CartContext.d.ts.map +1 -1
- package/dist/index100.mjs +8 -8
- package/dist/index101.mjs +6 -6
- package/dist/index102.mjs +3 -3
- package/dist/index103.mjs +1 -1
- package/dist/index104.mjs +1 -1
- package/dist/index105.mjs +1 -1
- package/dist/index106.mjs +2 -2
- package/dist/index107.mjs +2 -2
- package/dist/index108.mjs +3 -3
- package/dist/index109.mjs +1 -1
- package/dist/index110.mjs +3 -3
- package/dist/index111.mjs +2 -2
- package/dist/index112.mjs +2 -2
- package/dist/index113.mjs +1 -1
- package/dist/index114.mjs +3 -3
- package/dist/index115.mjs +1 -1
- package/dist/index116.mjs +1 -1
- package/dist/index117.mjs +3 -3
- package/dist/index118.mjs +2 -2
- package/dist/index119.mjs +4 -4
- package/dist/index120.mjs +1 -1
- package/dist/index121.mjs +3 -3
- package/dist/index122.mjs +4 -4
- package/dist/index123.mjs +1 -1
- package/dist/index124.mjs +1 -1
- package/dist/index125.mjs +1 -1
- package/dist/index126.mjs +1 -1
- package/dist/index127.mjs +1 -1
- package/dist/index128.mjs +1 -1
- package/dist/index129.mjs +1 -1
- package/dist/index130.mjs +2 -2
- package/dist/index131.mjs +3 -3
- package/dist/index136.mjs +2 -21
- package/dist/index137.mjs +2 -56
- package/dist/index138.mjs +2 -29
- package/dist/index139.mjs +17 -6
- package/dist/index140.mjs +30 -50
- package/dist/index141.mjs +38 -6
- package/dist/index142.mjs +17 -11
- package/dist/index143.mjs +18 -7
- package/dist/index144.mjs +2 -28
- package/dist/index145.mjs +20 -2
- package/dist/index146.mjs +44 -68
- package/dist/index147.mjs +2 -167
- package/dist/index148.mjs +30 -2
- package/dist/index149.mjs +18 -2
- package/dist/index150.mjs +2 -2
- package/dist/index151.mjs +2 -18
- package/dist/index152.mjs +2 -32
- package/dist/index153.mjs +2 -38
- package/dist/index154.mjs +67 -13
- package/dist/index155.mjs +2 -18
- package/dist/index156.mjs +53 -2
- package/dist/index157.mjs +2 -20
- package/dist/index158.mjs +29 -39
- package/dist/index159.mjs +152 -2
- package/dist/index160.mjs +2 -30
- package/dist/index161.mjs +2 -18
- package/dist/index162.mjs +19 -2
- package/dist/index163.mjs +2 -2
- package/dist/index164.mjs +2 -2
- package/dist/index165.mjs +26 -2
- package/dist/index166.mjs +2 -72
- package/dist/index167.mjs +2 -2
- package/dist/index168.mjs +20 -49
- package/dist/index169.mjs +23 -2
- package/dist/index170.mjs +2 -36
- package/dist/index171.mjs +2 -152
- package/dist/index172.mjs +2 -2
- package/dist/index173.mjs +23 -2
- package/dist/index174.mjs +2 -19
- package/dist/index175.mjs +23 -2
- package/dist/index177.mjs +2 -26
- package/dist/index178.mjs +2 -2
- package/dist/index179.mjs +23 -2
- package/dist/index180.mjs +2 -24
- package/dist/index181.mjs +15 -15
- package/dist/index182.mjs +2 -2
- package/dist/index183.mjs +2 -2
- package/dist/index184.mjs +2 -2
- package/dist/index185.mjs +2 -23
- package/dist/index186.mjs +2 -2
- package/dist/index187.mjs +2 -23
- package/dist/index188.mjs +2 -2
- package/dist/index189.mjs +2 -2
- package/dist/index190.mjs +127 -2
- package/dist/index191.mjs +2 -23
- package/dist/index192.mjs +74 -2
- package/dist/index193.mjs +71 -20
- package/dist/index194.mjs +21 -2
- package/dist/index195.mjs +56 -2
- package/dist/index196.mjs +29 -2
- package/dist/index197.mjs +7 -2
- package/dist/index198.mjs +52 -2
- package/dist/index199.mjs +6 -2
- package/dist/index20.mjs +28 -18
- package/dist/index200.mjs +12 -2
- package/dist/index201.mjs +7 -2
- package/dist/index202.mjs +28 -127
- package/dist/index203.mjs +2 -2
- package/dist/index204.mjs +69 -73
- package/dist/index205.mjs +164 -71
- package/dist/index207.mjs +2 -31
- package/dist/index208.mjs +2 -11
- package/dist/index209.mjs +2 -4
- package/dist/index210.mjs +2 -4
- package/dist/index211.mjs +2 -13
- package/dist/index212.mjs +2 -7
- package/dist/index213.mjs +2 -12
- package/dist/index214.mjs +2 -5
- package/dist/index215.mjs +108 -33
- package/dist/index216.mjs +2 -31
- package/dist/index217.mjs +2 -28
- package/dist/index218.mjs +34 -58
- package/dist/index219.mjs +2 -2
- package/dist/index220.mjs +244 -2
- package/dist/index221.mjs +2 -2
- package/dist/index222.mjs +33 -2
- package/dist/index223.mjs +65 -2
- package/dist/index224.mjs +25 -2
- package/dist/index225.mjs +2 -2
- package/dist/index227.mjs +2 -37
- package/dist/index228.mjs +2 -2
- package/dist/index230.mjs +2 -244
- package/dist/index232.mjs +2 -33
- package/dist/index233.mjs +2 -65
- package/dist/index234.mjs +2 -25
- package/dist/index235.mjs +4 -2
- package/dist/index236.mjs +2 -108
- package/dist/index237.mjs +2 -2
- package/dist/index238.mjs +31 -2
- package/dist/index239.mjs +11 -2
- package/dist/index240.mjs +4 -2
- package/dist/index241.mjs +4 -2
- package/dist/index242.mjs +13 -2
- package/dist/index243.mjs +7 -2
- package/dist/index244.mjs +12 -2
- package/dist/index245.mjs +5 -2
- package/dist/index246.mjs +33 -2
- package/dist/index247.mjs +31 -4
- package/dist/index248.mjs +28 -2
- package/dist/index249.mjs +61 -2
- package/dist/index250.mjs +2 -3
- package/dist/index251.mjs +2 -2
- package/dist/index252.mjs +2 -2
- package/dist/index253.mjs +17 -16
- package/dist/index254.mjs +46 -12
- package/dist/index255.mjs +2 -6
- package/dist/index256.mjs +2 -30
- package/dist/index257.mjs +2 -2
- package/dist/index258.mjs +89 -16
- package/dist/index259.mjs +2 -47
- package/dist/index26.mjs +19 -19
- package/dist/index260.mjs +3 -2
- package/dist/index261.mjs +2 -2
- package/dist/index262.mjs +2 -2
- package/dist/index263.mjs +17 -2
- package/dist/index264.mjs +12 -90
- package/dist/index265.mjs +6 -2
- package/dist/index266.mjs +30 -2
- package/dist/index267.mjs +2 -2
- package/dist/index269.mjs +2 -2
- package/dist/index3.mjs +94 -90
- package/dist/index33.mjs +5 -5
- package/dist/index34.mjs +1 -1
- package/dist/index35.mjs +1 -1
- package/dist/index36.mjs +1 -1
- package/dist/index37.mjs +1 -1
- package/dist/index38.mjs +2 -2
- package/dist/index40.mjs +1 -1
- package/dist/index41.mjs +3 -3
- package/dist/index44.mjs +1 -1
- package/dist/index49.mjs +17 -17
- package/dist/index5.mjs +36 -35
- package/dist/index50.mjs +2 -2
- package/dist/index51.mjs +1 -1
- package/dist/index52.mjs +1 -1
- package/dist/index53.mjs +1 -1
- package/dist/index54.mjs +1 -1
- package/dist/index55.mjs +1 -1
- package/dist/index56.mjs +1 -1
- package/dist/index57.mjs +1 -1
- package/dist/index58.mjs +1 -1
- package/dist/index59.mjs +1 -1
- package/dist/index60.mjs +1 -1
- package/dist/index61.mjs +1 -1
- package/dist/index62.mjs +23 -4
- package/dist/index63.mjs +2 -23
- package/dist/index64.mjs +20 -21
- package/dist/index65.mjs +7 -7
- package/dist/index66.mjs +75 -2
- package/dist/index67.mjs +14 -74
- package/dist/index68.mjs +62 -14
- package/dist/index69.mjs +4 -62
- package/dist/index70.mjs +2 -235
- package/dist/index71.mjs +5 -5
- package/dist/index72.mjs +1125 -125
- package/dist/index73.mjs +19 -67
- package/dist/index74.mjs +50 -82
- package/dist/index75.mjs +32 -28
- package/dist/index76.mjs +2 -9
- package/dist/index77.mjs +2 -75
- package/dist/index78.mjs +234 -3
- package/dist/index79.mjs +6 -2
- package/dist/index80.mjs +128 -77
- package/dist/index81.mjs +67 -53
- package/dist/index82.mjs +86 -5
- package/dist/index83.mjs +28 -4
- package/dist/index84.mjs +7 -177
- package/dist/index85.mjs +72 -50
- package/dist/index86.mjs +4 -69
- package/dist/index87.mjs +2 -2
- package/dist/index88.mjs +82 -5
- package/dist/index89.mjs +53 -1133
- package/dist/index90.mjs +5 -19
- package/dist/index91.mjs +4 -54
- package/dist/index92.mjs +174 -28
- package/dist/index93.mjs +53 -2
- package/dist/index94.mjs +69 -34
- package/dist/index95.mjs +31 -40
- package/dist/index96.mjs +43 -2
- package/dist/index98.mjs +1 -1
- package/dist/index99.mjs +1 -1
- package/dist/lib/utils.d.ts +8 -0
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/providers/TikTokPixelProvider.d.ts +5 -1
- package/dist/providers/TikTokPixelProvider.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/contexts/CartContext.tsx +13 -3
- package/src/lib/utils.ts +31 -9
- package/src/providers/TikTokPixelProvider.tsx +10 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@instockng/storefront-ui",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.35",
|
|
4
4
|
"description": "Pre-built UI components for OMS e-commerce sites",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"author": "Ola Wale",
|
|
46
46
|
"license": "MIT",
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@instockng/api-client": "^1.0.
|
|
48
|
+
"@instockng/api-client": "^1.0.17",
|
|
49
49
|
"class-variance-authority": "^0.7.1",
|
|
50
50
|
"clsx": "^2.1.0",
|
|
51
51
|
"react-facebook-pixel": "^1.0.4",
|
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
import { ShoppingCart } from '../components/ShoppingCart';
|
|
25
25
|
import { useMetaPixel } from '../providers/MetaPixelProvider';
|
|
26
26
|
import { useTikTokPixel } from '../providers/TikTokPixelProvider';
|
|
27
|
-
import { getFbCookies } from '../lib/utils';
|
|
27
|
+
import { getFbCookies, getTikTokCookies } from '../lib/utils';
|
|
28
28
|
|
|
29
29
|
const CART_ID_KEY = 'oms_cart_id';
|
|
30
30
|
|
|
@@ -243,8 +243,11 @@ export function CartProvider({ children, brandSlug, initialCartId, shoppingCartP
|
|
|
243
243
|
// Get Facebook cookies for attribution
|
|
244
244
|
const { fbc, fbp } = getFbCookies();
|
|
245
245
|
|
|
246
|
+
// Get TikTok cookies for attribution
|
|
247
|
+
const { ttp, ttclid } = getTikTokCookies();
|
|
248
|
+
|
|
246
249
|
// Add item to cart via API
|
|
247
|
-
const updatedCart = await addItemMutation.mutateAsync({ sku, quantity, fbc, fbp });
|
|
250
|
+
const updatedCart = await addItemMutation.mutateAsync({ sku, quantity, fbc, fbp, ttp, ttclid });
|
|
248
251
|
|
|
249
252
|
// Skip tracking if error response
|
|
250
253
|
if ('error' in updatedCart) return;
|
|
@@ -342,11 +345,18 @@ export function CartProvider({ children, brandSlug, initialCartId, shoppingCartP
|
|
|
342
345
|
// Generate event ID matching backend format: cart_{cartId}_checkout
|
|
343
346
|
const eventID = `cart_${cartId}_checkout`;
|
|
344
347
|
|
|
348
|
+
// Prepare contents array for TikTok Pixel
|
|
349
|
+
const contents = cart.items?.map((item) => ({
|
|
350
|
+
content_id: item.variant.sku,
|
|
351
|
+
quantity: item.quantity,
|
|
352
|
+
price: Number(item.variant.price),
|
|
353
|
+
})) || [];
|
|
354
|
+
|
|
345
355
|
// Track InitiateCheckout event with Meta Pixel
|
|
346
356
|
trackMetaInitiateCheckout(cartTotal, itemCount, eventID);
|
|
347
357
|
|
|
348
358
|
// Track InitiateCheckout event with TikTok Pixel
|
|
349
|
-
trackTikTokInitiateCheckout(cartTotal, itemCount, eventID);
|
|
359
|
+
trackTikTokInitiateCheckout(cartTotal, itemCount, eventID, contents);
|
|
350
360
|
}, [cart, cartId, trackMetaInitiateCheckout, trackTikTokInitiateCheckout]);
|
|
351
361
|
|
|
352
362
|
const value: CartContextValue = {
|
package/src/lib/utils.ts
CHANGED
|
@@ -44,22 +44,44 @@ export function getStatusColor(status: string): string {
|
|
|
44
44
|
return colors[status] || 'bg-gray-100 text-gray-800'
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
/**
|
|
48
|
+
* Extract a cookie value by name
|
|
49
|
+
*/
|
|
50
|
+
function getCookie(name: string): string | undefined {
|
|
51
|
+
if (typeof document === 'undefined') return undefined;
|
|
52
|
+
const value = `; ${document.cookie}`;
|
|
53
|
+
const parts = value.split(`; ${name}=`);
|
|
54
|
+
if (parts.length === 2) return parts.pop()?.split(';').shift();
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Extract a URL parameter by name
|
|
60
|
+
*/
|
|
61
|
+
function getUrlParam(name: string): string | undefined {
|
|
62
|
+
if (typeof window === 'undefined') return undefined;
|
|
63
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
64
|
+
return urlParams.get(name) || undefined;
|
|
65
|
+
}
|
|
66
|
+
|
|
47
67
|
/**
|
|
48
68
|
* Extract Facebook attribution cookies (fbc & fbp) for Meta Pixel CAPI
|
|
49
69
|
* @returns Object with fbc (Facebook Click ID) and fbp (Facebook Browser ID) cookies
|
|
50
70
|
*/
|
|
51
71
|
export function getFbCookies(): { fbc: string | undefined; fbp: string | undefined } {
|
|
52
|
-
if (typeof document === 'undefined') return { fbc: undefined, fbp: undefined };
|
|
53
|
-
|
|
54
|
-
const getCookie = (name: string) => {
|
|
55
|
-
const value = `; ${document.cookie}`;
|
|
56
|
-
const parts = value.split(`; ${name}=`);
|
|
57
|
-
if (parts.length === 2) return parts.pop()?.split(';').shift();
|
|
58
|
-
return undefined;
|
|
59
|
-
};
|
|
60
|
-
|
|
61
72
|
return {
|
|
62
73
|
fbc: getCookie('_fbc'),
|
|
63
74
|
fbp: getCookie('_fbp'),
|
|
64
75
|
};
|
|
65
76
|
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Extract TikTok attribution cookies and URL parameters for TikTok Events API
|
|
80
|
+
* @returns Object with ttp (TikTok Pixel cookie) and ttclid (TikTok Click ID from URL) values
|
|
81
|
+
*/
|
|
82
|
+
export function getTikTokCookies(): { ttp: string | undefined; ttclid: string | undefined } {
|
|
83
|
+
return {
|
|
84
|
+
ttp: getCookie('_ttp'),
|
|
85
|
+
ttclid: getUrlParam('ttclid'),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
@@ -24,7 +24,12 @@ interface TikTokPixelContextType {
|
|
|
24
24
|
quantity: number,
|
|
25
25
|
eventID?: string
|
|
26
26
|
) => void;
|
|
27
|
-
trackInitiateCheckout: (
|
|
27
|
+
trackInitiateCheckout: (
|
|
28
|
+
cartTotal: number,
|
|
29
|
+
itemCount: number,
|
|
30
|
+
eventID?: string,
|
|
31
|
+
contents?: Array<{ content_id: string; quantity: number; price: number }>
|
|
32
|
+
) => void;
|
|
28
33
|
trackPurchase: (
|
|
29
34
|
orderTotal: number,
|
|
30
35
|
currency: string,
|
|
@@ -153,7 +158,7 @@ export function TikTokPixelProvider({
|
|
|
153
158
|
content_type: 'product',
|
|
154
159
|
content_id: productId,
|
|
155
160
|
content_name: productName,
|
|
156
|
-
|
|
161
|
+
value: price * quantity,
|
|
157
162
|
quantity: quantity,
|
|
158
163
|
currency: 'NGN',
|
|
159
164
|
},
|
|
@@ -164,7 +169,8 @@ export function TikTokPixelProvider({
|
|
|
164
169
|
const trackInitiateCheckout = (
|
|
165
170
|
cartTotal: number,
|
|
166
171
|
itemCount: number,
|
|
167
|
-
eventID?: string
|
|
172
|
+
eventID?: string,
|
|
173
|
+
contents?: Array<{ content_id: string; quantity: number; price: number }>
|
|
168
174
|
) => {
|
|
169
175
|
track(
|
|
170
176
|
'InitiateCheckout',
|
|
@@ -173,6 +179,7 @@ export function TikTokPixelProvider({
|
|
|
173
179
|
value: cartTotal,
|
|
174
180
|
currency: 'NGN',
|
|
175
181
|
num_items: itemCount,
|
|
182
|
+
...(contents && contents.length > 0 ? { contents } : {}),
|
|
176
183
|
},
|
|
177
184
|
eventID
|
|
178
185
|
);
|