@artginzburg/next-ym 1.2.2 → 1.3.0
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.
|
@@ -1,8 +1,46 @@
|
|
|
1
|
-
import { DataObject, Product, Purchase } from '../lib/ecommerce';
|
|
1
|
+
import { DataObject, Product, type PromoCampaign, Purchase, type WithPromotions } from '../lib/ecommerce';
|
|
2
2
|
export declare function useEcommerce<Defaults extends Pick<DataObject['ecommerce'], 'currencyCode'>>(defaults?: Defaults): {
|
|
3
|
-
|
|
3
|
+
trackImpressionsProduct: (data: Partial<Pick<DataObject['ecommerce'], 'currencyCode'>> & {
|
|
4
|
+
products: Product[];
|
|
5
|
+
}) => void;
|
|
6
|
+
trackClickProduct: (data: Partial<Pick<({
|
|
7
|
+
currencyCode: string;
|
|
8
|
+
} & ({
|
|
9
|
+
click: {
|
|
10
|
+
products: Product[];
|
|
11
|
+
};
|
|
12
|
+
} | {
|
|
13
|
+
impressions: Product[];
|
|
14
|
+
} | {
|
|
15
|
+
detail: {
|
|
16
|
+
products: Product[];
|
|
17
|
+
};
|
|
18
|
+
} | {
|
|
19
|
+
add: {
|
|
20
|
+
products: Product[];
|
|
21
|
+
};
|
|
22
|
+
} | {
|
|
23
|
+
remove: {
|
|
24
|
+
products: Product[];
|
|
25
|
+
};
|
|
26
|
+
} | Purchase)) | ({
|
|
27
|
+
currencyCode?: undefined;
|
|
28
|
+
} & ({
|
|
29
|
+
promoView: WithPromotions;
|
|
30
|
+
} | {
|
|
31
|
+
promoClick: WithPromotions;
|
|
32
|
+
})), "currencyCode">> & {
|
|
33
|
+
product: Product;
|
|
34
|
+
}) => void;
|
|
35
|
+
trackViewProduct: (data: Partial<Pick<({
|
|
4
36
|
currencyCode: string;
|
|
5
37
|
} & ({
|
|
38
|
+
click: {
|
|
39
|
+
products: Product[];
|
|
40
|
+
};
|
|
41
|
+
} | {
|
|
42
|
+
impressions: Product[];
|
|
43
|
+
} | {
|
|
6
44
|
detail: {
|
|
7
45
|
products: Product[];
|
|
8
46
|
};
|
|
@@ -14,12 +52,24 @@ export declare function useEcommerce<Defaults extends Pick<DataObject['ecommerce
|
|
|
14
52
|
remove: {
|
|
15
53
|
products: Product[];
|
|
16
54
|
};
|
|
17
|
-
} | Purchase)
|
|
55
|
+
} | Purchase)) | ({
|
|
56
|
+
currencyCode?: undefined;
|
|
57
|
+
} & ({
|
|
58
|
+
promoView: WithPromotions;
|
|
59
|
+
} | {
|
|
60
|
+
promoClick: WithPromotions;
|
|
61
|
+
})), "currencyCode">> & {
|
|
18
62
|
product: Product;
|
|
19
63
|
}) => void;
|
|
20
|
-
trackAddItemToBasket: (data: Partial<Pick<{
|
|
64
|
+
trackAddItemToBasket: (data: Partial<Pick<({
|
|
21
65
|
currencyCode: string;
|
|
22
66
|
} & ({
|
|
67
|
+
click: {
|
|
68
|
+
products: Product[];
|
|
69
|
+
};
|
|
70
|
+
} | {
|
|
71
|
+
impressions: Product[];
|
|
72
|
+
} | {
|
|
23
73
|
detail: {
|
|
24
74
|
products: Product[];
|
|
25
75
|
};
|
|
@@ -31,12 +81,24 @@ export declare function useEcommerce<Defaults extends Pick<DataObject['ecommerce
|
|
|
31
81
|
remove: {
|
|
32
82
|
products: Product[];
|
|
33
83
|
};
|
|
34
|
-
} | Purchase)
|
|
84
|
+
} | Purchase)) | ({
|
|
85
|
+
currencyCode?: undefined;
|
|
86
|
+
} & ({
|
|
87
|
+
promoView: WithPromotions;
|
|
88
|
+
} | {
|
|
89
|
+
promoClick: WithPromotions;
|
|
90
|
+
})), "currencyCode">> & {
|
|
35
91
|
product: Product;
|
|
36
92
|
}) => void;
|
|
37
|
-
trackRemoveItemFromBasket: (data: Partial<Pick<{
|
|
93
|
+
trackRemoveItemFromBasket: (data: Partial<Pick<({
|
|
38
94
|
currencyCode: string;
|
|
39
95
|
} & ({
|
|
96
|
+
click: {
|
|
97
|
+
products: Product[];
|
|
98
|
+
};
|
|
99
|
+
} | {
|
|
100
|
+
impressions: Product[];
|
|
101
|
+
} | {
|
|
40
102
|
detail: {
|
|
41
103
|
products: Product[];
|
|
42
104
|
};
|
|
@@ -48,7 +110,13 @@ export declare function useEcommerce<Defaults extends Pick<DataObject['ecommerce
|
|
|
48
110
|
remove: {
|
|
49
111
|
products: Product[];
|
|
50
112
|
};
|
|
51
|
-
} | Purchase)
|
|
113
|
+
} | Purchase)) | ({
|
|
114
|
+
currencyCode?: undefined;
|
|
115
|
+
} & ({
|
|
116
|
+
promoView: WithPromotions;
|
|
117
|
+
} | {
|
|
118
|
+
promoClick: WithPromotions;
|
|
119
|
+
})), "currencyCode">> & {
|
|
52
120
|
product: Product;
|
|
53
121
|
}) => void;
|
|
54
122
|
trackPurchase: (data: Partial<Pick<DataObject['ecommerce'], 'currencyCode'>> & {
|
|
@@ -56,5 +124,9 @@ export declare function useEcommerce<Defaults extends Pick<DataObject['ecommerce
|
|
|
56
124
|
} & {
|
|
57
125
|
actionField: Purchase['purchase']['actionField'];
|
|
58
126
|
}) => void;
|
|
127
|
+
trackPromoView: (data: WithPromotions) => void;
|
|
128
|
+
trackPromoClick: (data: {
|
|
129
|
+
promotion: PromoCampaign;
|
|
130
|
+
}) => void;
|
|
59
131
|
pushToDataLayer: (data: DataObject['ecommerce']) => void;
|
|
60
132
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useCallback, useContext, useMemo } from 'react';
|
|
2
2
|
import { MetricaEcommerceContext } from '../components/YandexMetricaProvider';
|
|
3
|
-
import { dataLayerPush } from '../lib/ecommerce';
|
|
3
|
+
import { dataLayerPush, } from '../lib/ecommerce';
|
|
4
4
|
export function useEcommerce(defaults) {
|
|
5
5
|
const dataLayerName = useContext(MetricaEcommerceContext);
|
|
6
6
|
const pushToDataLayer = useCallback((data) => {
|
|
@@ -13,9 +13,29 @@ export function useEcommerce(defaults) {
|
|
|
13
13
|
[actionType]: { products: [data.product] },
|
|
14
14
|
});
|
|
15
15
|
}, [defaults === null || defaults === void 0 ? void 0 : defaults.currencyCode, pushToDataLayer]);
|
|
16
|
+
const trackImpressionsProduct = useCallback((data) => {
|
|
17
|
+
var _a;
|
|
18
|
+
pushToDataLayer({
|
|
19
|
+
currencyCode: (_a = defaults === null || defaults === void 0 ? void 0 : defaults.currencyCode) !== null && _a !== void 0 ? _a : data.currencyCode,
|
|
20
|
+
impressions: data.products,
|
|
21
|
+
});
|
|
22
|
+
}, [defaults === null || defaults === void 0 ? void 0 : defaults.currencyCode, pushToDataLayer]);
|
|
23
|
+
const trackClickProduct = useMemo(() => makeStandardTrackProduct('click'), [makeStandardTrackProduct]);
|
|
16
24
|
const trackViewProduct = useMemo(() => makeStandardTrackProduct('detail'), [makeStandardTrackProduct]);
|
|
17
25
|
const trackAddItemToBasket = useMemo(() => makeStandardTrackProduct('add'), [makeStandardTrackProduct]);
|
|
18
26
|
const trackRemoveItemFromBasket = useMemo(() => makeStandardTrackProduct('remove'), [makeStandardTrackProduct]);
|
|
27
|
+
const trackPromoView = useCallback((data) => {
|
|
28
|
+
pushToDataLayer({
|
|
29
|
+
promoView: data,
|
|
30
|
+
});
|
|
31
|
+
}, [pushToDataLayer]);
|
|
32
|
+
const trackPromoClick = useCallback((data) => {
|
|
33
|
+
pushToDataLayer({
|
|
34
|
+
promoClick: {
|
|
35
|
+
promotions: [data.promotion],
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
}, [pushToDataLayer]);
|
|
19
39
|
const trackPurchase = useCallback((data) => {
|
|
20
40
|
var _a;
|
|
21
41
|
pushToDataLayer({
|
|
@@ -26,20 +46,15 @@ export function useEcommerce(defaults) {
|
|
|
26
46
|
},
|
|
27
47
|
});
|
|
28
48
|
}, [defaults === null || defaults === void 0 ? void 0 : defaults.currencyCode, pushToDataLayer]);
|
|
29
|
-
// TODO Возможные значения:
|
|
30
|
-
// impressions — просмотр списка товаров;
|
|
31
|
-
// click — клик по товару в списке;
|
|
32
|
-
// detail — просмотр товара; // DONE
|
|
33
|
-
// add — добавление товара в корзину; // DONE
|
|
34
|
-
// remove — удаление товара из корзины; // DONE
|
|
35
|
-
// purchase — покупка; // DONE
|
|
36
|
-
// promoView — просмотр внутренней рекламы;
|
|
37
|
-
// promoClick — клик по внутренней рекламе.
|
|
38
49
|
return {
|
|
50
|
+
trackImpressionsProduct,
|
|
51
|
+
trackClickProduct,
|
|
39
52
|
trackViewProduct,
|
|
40
53
|
trackAddItemToBasket,
|
|
41
54
|
trackRemoveItemFromBasket,
|
|
42
55
|
trackPurchase,
|
|
56
|
+
trackPromoView,
|
|
57
|
+
trackPromoClick,
|
|
43
58
|
pushToDataLayer,
|
|
44
59
|
};
|
|
45
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEcommerce.js","sourceRoot":"","sources":["../../src/hooks/useEcommerce.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,
|
|
1
|
+
{"version":3,"file":"useEcommerce.js","sourceRoot":"","sources":["../../src/hooks/useEcommerce.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/ecommerce.d.ts
CHANGED
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
/// <reference types="google.analytics" />
|
|
2
2
|
export type DataObject = {
|
|
3
|
-
ecommerce: {
|
|
3
|
+
ecommerce: ({
|
|
4
4
|
currencyCode: string;
|
|
5
|
-
} & (ViewProduct | AddItemToBasket | RemoveItemFromBasket | Purchase)
|
|
5
|
+
} & (ClickProduct | ImpressionsProduct | ViewProduct | AddItemToBasket | RemoveItemFromBasket | Purchase)) | ({
|
|
6
|
+
currencyCode?: never;
|
|
7
|
+
} & (PromoView | PromoClick));
|
|
8
|
+
};
|
|
9
|
+
export type SimpleActionType = keyof (ClickProduct & ViewProduct & AddItemToBasket & RemoveItemFromBasket);
|
|
10
|
+
type ClickProduct = {
|
|
11
|
+
click: WithProducts;
|
|
12
|
+
};
|
|
13
|
+
type ImpressionsProduct = {
|
|
14
|
+
impressions: Product[];
|
|
6
15
|
};
|
|
7
|
-
export type SimpleActionType = keyof (ViewProduct & AddItemToBasket & RemoveItemFromBasket);
|
|
8
16
|
type ViewProduct = {
|
|
9
17
|
detail: WithProducts;
|
|
10
18
|
};
|
|
@@ -19,6 +27,27 @@ export type Purchase = {
|
|
|
19
27
|
actionField: ActionField;
|
|
20
28
|
} & WithProducts;
|
|
21
29
|
};
|
|
30
|
+
type PromoView = {
|
|
31
|
+
promoView: WithPromotions;
|
|
32
|
+
};
|
|
33
|
+
type PromoClick = {
|
|
34
|
+
promoClick: WithPromotions;
|
|
35
|
+
};
|
|
36
|
+
export type WithPromotions = {
|
|
37
|
+
promotions: PromoCampaign[];
|
|
38
|
+
};
|
|
39
|
+
export type PromoCampaign = {
|
|
40
|
+
id: string;
|
|
41
|
+
} & Partial<{
|
|
42
|
+
/** Name of the promo campaign */
|
|
43
|
+
name: string;
|
|
44
|
+
/** Name of the ad banner */
|
|
45
|
+
creative: string;
|
|
46
|
+
/** Slot of the ad banner */
|
|
47
|
+
creative_slot: string;
|
|
48
|
+
/** Position of the ad banner */
|
|
49
|
+
position: string;
|
|
50
|
+
}>;
|
|
22
51
|
type WithProducts = {
|
|
23
52
|
products: Product[];
|
|
24
53
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecommerce.js","sourceRoot":"","sources":["../../src/lib/ecommerce.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ecommerce.js","sourceRoot":"","sources":["../../src/lib/ecommerce.ts"],"names":[],"mappings":"AAgIA,kEAAkE;AAClE,MAAM,UAAU,aAAa,CAAC,aAA4B,EAAE,GAAG,IAAkB;IAC/E,IAAI,CAAC,aAAa;QAAE,OAAO;IAE3B,IAAI,CAAC,CAAC,aAAa,IAAI,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CACX,gCAAgC,aAAa,sGAAsG,CACpJ,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,aAAoC,CAA2B,CAAC;IAEzF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|