From 6aaf1698f1f9c35ac69ae797a6e83ba19f8e9b51 Mon Sep 17 00:00:00 2001 From: Nik Tverd Date: Fri, 10 Mar 2023 16:04:22 +0600 Subject: [PATCH 1/3] feat: analytics refactoring --- package-lock.json | 6 ++-- package.json | 2 +- src/blocks/Banner/Banner.tsx | 4 +++ src/blocks/CTA/CTA.tsx | 4 +++ src/blocks/Feed/Feed.tsx | 22 ++++++++++--- src/blocks/Header/Header.tsx | 4 +++ src/blocks/Meta/Meta.tsx | 4 +++ src/blocks/Suggest/Suggest.tsx | 4 +++ .../components/Controls/Controls.tsx | 32 +++++++++++++++++-- src/components/Paginator/Paginator.tsx | 27 ++++++++++++++++ src/components/PostCard/PostCard.tsx | 4 +++ src/components/PostInfo/PostInfo.tsx | 4 +++ src/components/PostInfo/components/Save.tsx | 13 +++++--- .../PostInfo/components/Sharing.tsx | 26 ++++++++++----- src/constructor/BlogConstructorProvider.tsx | 4 +++ src/counters/metrika.js | 4 +++ src/models/common.ts | 12 +++++++ 17 files changed, 154 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index 69c247b6..a5aafd01 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1709,9 +1709,9 @@ "integrity": "sha512-KNYNhQjA9XqLo0RVEwNRqdA7/Lx5LLrNDtqWCvOGzXTwKU0GFNlWJaoSvk7u97apag23nTxgmpk551FlRCfehA==" }, "@gravity-ui/page-constructor": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@gravity-ui/page-constructor/-/page-constructor-2.2.1.tgz", - "integrity": "sha512-CNtHjFSFeVW7apvnEZkA5JATk9XEklptkOXvONYmgcOshRzGFvNQZDmlrbL5+KBWJXaffzBk/sjhM7uaolFzPg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@gravity-ui/page-constructor/-/page-constructor-2.6.0.tgz", + "integrity": "sha512-Te0iO4vIve9dznkIPaWXCX87MXC9ReipuDOWU1wOoyEnoUVcOc2SOt/rc4Z/U+9ii4PdH4uniW1iLgaAV7aXsQ==", "dev": true, "requires": { "@gravity-ui/i18n": "^1.0.0", diff --git a/package.json b/package.json index e3fe439d..be6ddefb 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "@commitlint/config-conventional": "^17.4.3", "@doc-tools/transform": "^2.9.0", "@gravity-ui/eslint-config": "^2.0.0", - "@gravity-ui/page-constructor": "^2.2.1", + "@gravity-ui/page-constructor": "^2.6.0", "@gravity-ui/prettier-config": "^1.0.1", "@gravity-ui/stylelint-config": "^1.0.0", "@gravity-ui/tsconfig": "^1.0.0", diff --git a/src/blocks/Banner/Banner.tsx b/src/blocks/Banner/Banner.tsx index 5d9d07f7..27ef409c 100644 --- a/src/blocks/Banner/Banner.tsx +++ b/src/blocks/Banner/Banner.tsx @@ -29,6 +29,10 @@ export const Banner: React.FC = ({ const contentData = updateContentSizes(content); + /** + * @deprecated Metrika will be deleted after launch of analyticsEvents + * https://st.yandex-team.ru/PAGECTR-7 + */ const metrikaGoal: NewMetrikaGoal = { name: BlogMetrikaGoalIds.bannerCommon, isCrossSite: true, diff --git a/src/blocks/CTA/CTA.tsx b/src/blocks/CTA/CTA.tsx index 99e5c635..9ff335e8 100644 --- a/src/blocks/CTA/CTA.tsx +++ b/src/blocks/CTA/CTA.tsx @@ -26,6 +26,10 @@ export const CTA: React.FC = ({items, paddingTop, paddingBottom}) => { count = MAX_COLUMN_COUNT; } + /** + * @deprecated Metrika will be deleted after launch of analyticsEvents + * https://st.yandex-team.ru/PAGECTR-7 + */ const metrikaGoal: NewMetrikaGoal = { name: BlogMetrikaGoalIds.cta, isCrossSite: true, diff --git a/src/blocks/Feed/Feed.tsx b/src/blocks/Feed/Feed.tsx index b734d3ee..f290c027 100644 --- a/src/blocks/Feed/Feed.tsx +++ b/src/blocks/Feed/Feed.tsx @@ -1,18 +1,27 @@ import React, {useCallback, useContext, useEffect, useMemo, useReducer} from 'react'; - +import {useAnalytics} from '@gravity-ui/page-constructor'; +/** + * @deprecated Metrika will be deleted after launch of analyticsEvents + * https://st.yandex-team.ru/PAGECTR-7 + */ +import {BlogMetrikaGoalIds} from '../../constants'; import {Icon} from '@gravity-ui/uikit'; import {FeedHeader} from '../../components/FeedHeader/FeedHeader'; import {Posts} from '../../components/Posts/Posts'; import {PostsError} from '../../components/PostsError/PostsError'; -import {BlogMetrikaGoalIds} from '../../constants'; import {FeedContext} from '../../contexts/FeedContext'; import {LocaleContext} from '../../contexts/LocaleContext'; import {RouterContext} from '../../contexts/RouterContext'; +/** + * @deprecated Metrika will be deleted after launch of analyticsEvents + * https://st.yandex-team.ru/PAGECTR-7 + */ import metrika from '../../counters/metrika.js'; import {MetrikaCounter} from '../../counters/utils'; + +import {DefaultEventNames, HandleChangeQueryParams} from '../../models/common'; import {FeedProps} from '../../models/blocks'; -import {HandleChangeQueryParams} from '../../models/common'; import {getFeedQueryParams, scrollOnPageChange} from '../../utils/common'; import {DEFAULT_PAGE, DEFAULT_ROWS_PER_PAGE} from '../constants'; import {ActionTypes, reducer} from './reducer'; @@ -33,6 +42,7 @@ export const Feed: React.FC = ({image}) => { } = useContext(FeedContext); const router = useContext(RouterContext); const {locale} = useContext(LocaleContext); + const handleAnalytics = useAnalytics(DefaultEventNames.ShowMore); const [ { @@ -127,8 +137,12 @@ export const Feed: React.FC = ({image}) => { const handleShowMore = async () => { dispatch({type: ActionTypes.SetIsShowMoreFetching, payload: true}); - + /** + * @deprecated Metrika will be deleted after launch of analyticsEvents + * https://st.yandex-team.ru/PAGECTR-7 + */ metrika.reachGoal(MetrikaCounter.CrossSite, BlogMetrikaGoalIds.showMore); + handleAnalytics(); try { const fetchedData = await fetchData(currentPage + 1); diff --git a/src/blocks/Header/Header.tsx b/src/blocks/Header/Header.tsx index f70b2aad..179ae0b8 100644 --- a/src/blocks/Header/Header.tsx +++ b/src/blocks/Header/Header.tsx @@ -11,6 +11,10 @@ import {HeaderProps} from '../../models/blocks'; import {PaddingsDirections} from '../../models/paddings'; import {getBreadcrumbs} from '../../utils/common'; +/** + * @deprecated Metrika will be deleted after launch of analyticsEvents + * https://st.yandex-team.ru/PAGECTR-7 + */ const metrikaGoals: BlogMetrikaGoals = { sharing: BlogMetrikaGoalIds.shareTop, save: BlogMetrikaGoalIds.saveTop, diff --git a/src/blocks/Meta/Meta.tsx b/src/blocks/Meta/Meta.tsx index efc97461..d6e47ee9 100644 --- a/src/blocks/Meta/Meta.tsx +++ b/src/blocks/Meta/Meta.tsx @@ -16,6 +16,10 @@ import './Meta.scss'; const b = block('meta'); +/** + * @deprecated Metrika will be deleted after launch of analyticsEvents + * https://st.yandex-team.ru/PAGECTR-7 + */ const metrikaGoals: BlogMetrikaGoals = { sharing: BlogMetrikaGoalIds.shareBottom, save: BlogMetrikaGoalIds.saveBottom, diff --git a/src/blocks/Suggest/Suggest.tsx b/src/blocks/Suggest/Suggest.tsx index 1d64e7a6..87f5af9b 100644 --- a/src/blocks/Suggest/Suggest.tsx +++ b/src/blocks/Suggest/Suggest.tsx @@ -10,6 +10,10 @@ import {Keyset, i18} from '../../i18n'; import {SuggestProps} from '../../models/blocks'; import {PaddingsDirections} from '../../models/paddings'; +/** + * @deprecated Metrika will be deleted after launch of analyticsEvents + * https://st.yandex-team.ru/PAGECTR-7 + */ const metrikaGoals = [ { name: BlogMetrikaGoalIds.suggest, diff --git a/src/components/FeedHeader/components/Controls/Controls.tsx b/src/components/FeedHeader/components/Controls/Controls.tsx index eaad0303..e5a33040 100644 --- a/src/components/FeedHeader/components/Controls/Controls.tsx +++ b/src/components/FeedHeader/components/Controls/Controls.tsx @@ -1,18 +1,29 @@ import React, {ReactNode, useContext, useMemo, useState} from 'react'; +import {useAnalytics} from '@gravity-ui/page-constructor'; import {Button, Icon, Select} from '@gravity-ui/uikit'; +/** + * @deprecated Metrika will be deleted after launch of analyticsEvents + * https://st.yandex-team.ru/PAGECTR-7 + */ import {BlogMetrikaGoalIds} from '../../../../constants'; import {LikesContext} from '../../../../contexts/LikesContext'; import metrika from '../../../../counters/metrika.js'; import {MetrikaCounter} from '../../../../counters/utils'; import {Keyset, i18} from '../../../../i18n'; import {Save} from '../../../../icons/Save'; -import {HandleChangeQueryParams, Query, SetQueryType} from '../../../../models/common'; import {block} from '../../../../utils/cn'; import {Search} from '../../../Search/Search'; import {renderFilter, renderOption, renderSwitcher} from './customRenders'; +import { + HandleChangeQueryParams, + SetQueryType, + Query, + DefaultEventNames, +} from '../../../../models/common'; + import './Controls.scss'; const b = block('feed-controls'); @@ -44,6 +55,9 @@ export const Controls: React.FC = ({ queryParams, }) => { const {hasLikes} = useContext(LikesContext); + const handleAnalyticsTag = useAnalytics(DefaultEventNames.Tag); + const handleAnalyticsService = useAnalytics(DefaultEventNames.Service); + const handleAnalyticsSaveOnly = useAnalytics(DefaultEventNames.SaveOnly); const { savedOnly: savedOnlyInitial, @@ -57,7 +71,7 @@ export const Controls: React.FC = ({ const handleSavedOnly = () => { handleChangeQuery({savedOnly: savedOnly ? '' : 'true'}); - + handleAnalyticsSaveOnly(); setSavedOnly(!savedOnly); setIsFetching(true); }; @@ -70,9 +84,16 @@ export const Controls: React.FC = ({ }; const handleTagSelect = (selectedTags: string[]) => { + /** + * @deprecated Metrika will be deleted after launch of analyticsEvents + * https://st.yandex-team.ru/PAGECTR-7 + */ metrika.reachGoal(MetrikaCounter.CrossSite, BlogMetrikaGoalIds.tag, { theme: selectedTags[0], }); + handleAnalyticsTag(null, { + theme: selectedTags[0], + }); const isEmptyTag = selectedTags.some((tag) => tag === 'empty'); @@ -91,9 +112,16 @@ export const Controls: React.FC = ({ const metrikaAsString = forMetrikaServices.map((service) => service.content).join(','); + /** + * @deprecated Metrika will be deleted after launch of analyticsEvents + * https://st.yandex-team.ru/PAGECTR-7 + */ metrika.reachGoal(MetrikaCounter.CrossSite, BlogMetrikaGoalIds.service, { service: metrikaAsString, }); + handleAnalyticsService(null, { + service: metrikaAsString, + }); const servicesAsString = selectedServices.join(','); diff --git a/src/components/Paginator/Paginator.tsx b/src/components/Paginator/Paginator.tsx index f0d9a170..af433ab2 100644 --- a/src/components/Paginator/Paginator.tsx +++ b/src/components/Paginator/Paginator.tsx @@ -1,6 +1,13 @@ import React, {useEffect, useMemo, useState} from 'react'; +import {useAnalytics} from '@gravity-ui/page-constructor'; + import {BlogMetrikaGoalIds} from '../../constants'; + +/** + * @deprecated Metrika will be deleted after launch of analyticsEvents + * https://st.yandex-team.ru/PAGECTR-7 + */ import metrika from '../../counters/metrika.js'; import {MetrikaCounter} from '../../counters/utils'; import {block} from '../../utils/cn'; @@ -8,6 +15,7 @@ import {NavigationButton} from './components/NavigationButton'; import {PaginatorItem} from './components/PaginatorItem'; import {ArrowType, PaginatorItemProps, PaginatorProps} from './types'; import {getPageConfigs, getPagesCount} from './utils'; +import {DefaultEventNames} from '../../models/common'; import './Paginator.scss'; @@ -41,6 +49,10 @@ export const Paginator = ({ [pageCountForShowSupportButtons, pagesCount], ); + const handleAnalyticsHome = useAnalytics(DefaultEventNames.PaginatorHome); + const handleAnalyticsNext = useAnalytics(DefaultEventNames.PaginatorNext); + const handleAnalyticsPage = useAnalytics(DefaultEventNames.PaginatorPage); + if (pagesCount <= 1) { return null; } @@ -49,9 +61,19 @@ export const Paginator = ({ let newPage = page; if (type === 'prev' && page > 1) { + /** + * @deprecated Metrika will be deleted after launch of analyticsEvents + * https://st.yandex-team.ru/PAGECTR-7 + */ metrika.reachGoal(MetrikaCounter.CrossSite, BlogMetrikaGoalIds.home); + handleAnalyticsHome(); newPage = 1; } else if (type === 'next' && page < pagesCount) { + /** + * @deprecated Metrika will be deleted after launch of analyticsEvents + * https://st.yandex-team.ru/PAGECTR-7 + */ + handleAnalyticsNext(); metrika.reachGoal(MetrikaCounter.CrossSite, BlogMetrikaGoalIds.next); newPage = page + 1; } @@ -63,7 +85,12 @@ export const Paginator = ({ const handlePageClick = (index: number | ArrowType) => { if (index !== page && typeof index === 'number') { + /** + * @deprecated Metrika will be deleted after launch of analyticsEvents + * https://st.yandex-team.ru/PAGECTR-7 + */ metrika.reachGoal(MetrikaCounter.CrossSite, BlogMetrikaGoalIds.page, {page: index}); + handleAnalyticsPage(null, {page: String(index)}); handlePageChange(index); } }; diff --git a/src/components/PostCard/PostCard.tsx b/src/components/PostCard/PostCard.tsx index f41338c3..4e48b094 100644 --- a/src/components/PostCard/PostCard.tsx +++ b/src/components/PostCard/PostCard.tsx @@ -16,6 +16,10 @@ type PostCardProps = { fullWidth?: boolean; showTag?: boolean; size?: 's' | 'm'; + /** + * @deprecated Metrika will be deleted after launch of analyticsEvents + * https://st.yandex-team.ru/PAGECTR-7 + */ metrikaGoals?: MetrikaGoal; }; diff --git a/src/components/PostInfo/PostInfo.tsx b/src/components/PostInfo/PostInfo.tsx index d091a5ac..cebaf77f 100644 --- a/src/components/PostInfo/PostInfo.tsx +++ b/src/components/PostInfo/PostInfo.tsx @@ -22,6 +22,10 @@ type PostInfoProps = { readingTime: PostData['readingTime']; date: PostData['date']; theme?: 'light' | 'dark'; + /** + * @deprecated Metrika will be deleted after launch of analyticsEvents + * https://st.yandex-team.ru/PAGECTR-7 + */ metrikaGoals?: BlogMetrikaGoals; dataQa?: string; }; diff --git a/src/components/PostInfo/components/Save.tsx b/src/components/PostInfo/components/Save.tsx index 4e23b032..ce540bf1 100644 --- a/src/components/PostInfo/components/Save.tsx +++ b/src/components/PostInfo/components/Save.tsx @@ -1,6 +1,6 @@ -import React, {useContext} from 'react'; - +import {useAnalytics} from '@gravity-ui/page-constructor'; import {Icon} from '@gravity-ui/uikit'; +import React, {useContext} from 'react'; import {UserContext} from '../../../contexts/UserContext'; import metrika from '../../../counters/metrika.js'; @@ -10,8 +10,7 @@ import {SaveFilled} from '../../../icons/SaveFilled'; import {block} from '../../../utils/cn'; import {postLikeStatus} from '../../../utils/common'; -// @ts-ignore - +import {DefaultEventNames} from '../../../models/common'; import '../PostInfo.scss'; const ICON_SIZE = 16; @@ -24,6 +23,10 @@ type SaveProps = { hasUserLike: boolean; handleUserLike: () => void; theme?: 'light' | 'dark'; + /** + * @deprecated Metrika will be deleted after launch of analyticsEvents + * https://st.yandex-team.ru/PAGECTR-7 + */ metrikaGoal?: string; dataQa?: string; size?: 's' | 'm'; @@ -52,6 +55,7 @@ export const Save: React.FC = ({ dataQa, }) => { const {uid} = useContext(UserContext); + const handleAnalytics = useAnalytics(DefaultEventNames.SaveButton); return (
= ({ postLikeStatus(postId, Boolean(hasUserLike)); handleUserLike(); metrika.reachGoal(MetrikaCounter.CrossSite, metrikaGoal); + handleAnalytics(); }} data-qa={`${dataQa ? dataQa + '-' : ''}save`} > diff --git a/src/components/PostInfo/components/Sharing.tsx b/src/components/PostInfo/components/Sharing.tsx index 965bd146..13f0df80 100644 --- a/src/components/PostInfo/components/Sharing.tsx +++ b/src/components/PostInfo/components/Sharing.tsx @@ -1,6 +1,6 @@ -import React, {useContext} from 'react'; - +import {useAnalytics} from '@gravity-ui/page-constructor'; import {SharePopover} from '@gravity-ui/uikit'; +import React, {useCallback, useContext} from 'react'; import {MobileContext} from '../../../contexts/MobileContext'; import {PostPageContext} from '../../../contexts/PostPageContext'; @@ -9,17 +9,20 @@ import metrika from '../../../counters/metrika.js'; import {MetrikaCounter} from '../../../counters/utils'; import {Keyset, i18} from '../../../i18n'; import {ShareArrowUp} from '../../../icons/ShareArrowUp'; + +import {DefaultEventNames} from '../../../models/common'; import {block} from '../../../utils/cn'; import {getAbsolutePath} from '../../../utils/common'; - -// @ts-ignore - import '../PostInfo.scss'; const b = block('post-info'); type SharingProps = { theme?: 'light' | 'dark'; + /** + * @deprecated Metrika will be deleted after launch of analyticsEvents + * https://st.yandex-team.ru/PAGECTR-7 + */ metrikaGoal?: string; }; @@ -27,10 +30,17 @@ export const Sharing: React.FC = ({theme, metrikaGoal}) => { const router = useContext(RouterContext); const isMobile = useContext(MobileContext); const {shareOptions} = useContext(PostPageContext); + const handleAnalyticsGlobal = useAnalytics(DefaultEventNames.ShareButton); - const handleMetrika = () => { + const handleMetrika = useCallback(() => { metrika.reachGoal(MetrikaCounter.CrossSite, metrikaGoal); - }; + }, [metrikaGoal]); + + const handleAnalytics = useCallback(() => { + handleAnalyticsGlobal(); + + handleMetrika(); + }, [handleAnalyticsGlobal, handleMetrika]); return (
@@ -48,7 +58,7 @@ export const Sharing: React.FC = ({theme, metrikaGoal}) => { placement="bottom" openByHover={false} shareOptions={shareOptions} - handleMetrika={handleMetrika} + handleMetrika={handleAnalytics} />
diff --git a/src/constructor/BlogConstructorProvider.tsx b/src/constructor/BlogConstructorProvider.tsx index 92b9765c..e487742b 100644 --- a/src/constructor/BlogConstructorProvider.tsx +++ b/src/constructor/BlogConstructorProvider.tsx @@ -1,4 +1,5 @@ import React, {Fragment} from 'react'; +import {AnalyticsContext, AnalyticsContextProps} from '@gravity-ui/page-constructor'; import {DEFAULT_THEME} from '../constants'; import {DeviceContext, DeviceContextProps} from '../contexts/DeviceContext'; @@ -16,6 +17,7 @@ export interface BlogConstructorProviderProps { theme?: ThemeValueType; user?: UserContextProps; device?: DeviceContextProps; + analytics?: AnalyticsContextProps; children?: React.ReactNode; } @@ -26,6 +28,7 @@ export const BlogConstructorProvider: React.FC = ( theme = DEFAULT_THEME, user = {}, device = {}, + analytics = {}, children, }) => { const context = [ @@ -35,6 +38,7 @@ export const BlogConstructorProvider: React.FC = ( , , , + , ].reduceRight((prev, provider) => React.cloneElement(provider, {}, prev), children); return {context}; diff --git a/src/counters/metrika.js b/src/counters/metrika.js index 6c241039..2e728462 100644 --- a/src/counters/metrika.js +++ b/src/counters/metrika.js @@ -1,3 +1,7 @@ +/** + * @deprecated Metrika will be deleted after launch of analyticsEvents + * https://st.yandex-team.ru/PAGECTR-7 + */ const Goal = { SUPPORT_OPEN_FORM: 'SUPPORTOPENFORM', SUPPORT_STEP_1_SUBMIT: 'SUPPORTSTEP1SUBMIT', diff --git a/src/models/common.ts b/src/models/common.ts index 9a54e3c1..f3c9977a 100644 --- a/src/models/common.ts +++ b/src/models/common.ts @@ -181,3 +181,15 @@ export type SetQueryType = ( [y: string]: boolean; }, ) => Promise | void; + +export enum DefaultEventNames { + ShareButton = 'share-button-click', + SaveButton = 'save-button-click', + ShowMore = 'show-more-button-click', + PaginatorHome = 'paginator-home-button-click', + PaginatorNext = 'paginator-next-button-click', + PaginatorPage = 'paginator-page-button-click', + Tag = 'selector-tag-click', + Service = 'selector-service-click', + SaveOnly = 'save-only-button-click', +} From 421be00a0a802f40eb545b96e85a7723d4d230cd Mon Sep 17 00:00:00 2001 From: Nik Tverd Date: Thu, 6 Apr 2023 17:20:49 +0600 Subject: [PATCH 2/3] fixup! feat: analytics refactoring --- src/blocks/Feed/Feed.tsx | 6 +++--- .../FeedHeader/components/Controls/Controls.tsx | 13 ++++++------- src/components/Paginator/Paginator.tsx | 3 +-- src/components/PostInfo/components/Save.tsx | 5 +++-- src/components/PostInfo/components/Sharing.tsx | 5 +++-- src/constructor/BlogConstructorProvider.tsx | 1 + 6 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/blocks/Feed/Feed.tsx b/src/blocks/Feed/Feed.tsx index f290c027..ae7f44d5 100644 --- a/src/blocks/Feed/Feed.tsx +++ b/src/blocks/Feed/Feed.tsx @@ -1,15 +1,16 @@ import React, {useCallback, useContext, useEffect, useMemo, useReducer} from 'react'; + import {useAnalytics} from '@gravity-ui/page-constructor'; /** * @deprecated Metrika will be deleted after launch of analyticsEvents * https://st.yandex-team.ru/PAGECTR-7 */ -import {BlogMetrikaGoalIds} from '../../constants'; import {Icon} from '@gravity-ui/uikit'; import {FeedHeader} from '../../components/FeedHeader/FeedHeader'; import {Posts} from '../../components/Posts/Posts'; import {PostsError} from '../../components/PostsError/PostsError'; +import {BlogMetrikaGoalIds} from '../../constants'; import {FeedContext} from '../../contexts/FeedContext'; import {LocaleContext} from '../../contexts/LocaleContext'; import {RouterContext} from '../../contexts/RouterContext'; @@ -19,9 +20,8 @@ import {RouterContext} from '../../contexts/RouterContext'; */ import metrika from '../../counters/metrika.js'; import {MetrikaCounter} from '../../counters/utils'; - -import {DefaultEventNames, HandleChangeQueryParams} from '../../models/common'; import {FeedProps} from '../../models/blocks'; +import {DefaultEventNames, HandleChangeQueryParams} from '../../models/common'; import {getFeedQueryParams, scrollOnPageChange} from '../../utils/common'; import {DEFAULT_PAGE, DEFAULT_ROWS_PER_PAGE} from '../constants'; import {ActionTypes, reducer} from './reducer'; diff --git a/src/components/FeedHeader/components/Controls/Controls.tsx b/src/components/FeedHeader/components/Controls/Controls.tsx index e5a33040..ea3a40e3 100644 --- a/src/components/FeedHeader/components/Controls/Controls.tsx +++ b/src/components/FeedHeader/components/Controls/Controls.tsx @@ -1,6 +1,6 @@ import React, {ReactNode, useContext, useMemo, useState} from 'react'; -import {useAnalytics} from '@gravity-ui/page-constructor'; +import {useAnalytics} from '@gravity-ui/page-constructor'; import {Button, Icon, Select} from '@gravity-ui/uikit'; /** @@ -13,16 +13,15 @@ import metrika from '../../../../counters/metrika.js'; import {MetrikaCounter} from '../../../../counters/utils'; import {Keyset, i18} from '../../../../i18n'; import {Save} from '../../../../icons/Save'; -import {block} from '../../../../utils/cn'; -import {Search} from '../../../Search/Search'; -import {renderFilter, renderOption, renderSwitcher} from './customRenders'; - import { + DefaultEventNames, HandleChangeQueryParams, - SetQueryType, Query, - DefaultEventNames, + SetQueryType, } from '../../../../models/common'; +import {block} from '../../../../utils/cn'; +import {Search} from '../../../Search/Search'; +import {renderFilter, renderOption, renderSwitcher} from './customRenders'; import './Controls.scss'; diff --git a/src/components/Paginator/Paginator.tsx b/src/components/Paginator/Paginator.tsx index af433ab2..cd79e8ce 100644 --- a/src/components/Paginator/Paginator.tsx +++ b/src/components/Paginator/Paginator.tsx @@ -3,19 +3,18 @@ import React, {useEffect, useMemo, useState} from 'react'; import {useAnalytics} from '@gravity-ui/page-constructor'; import {BlogMetrikaGoalIds} from '../../constants'; - /** * @deprecated Metrika will be deleted after launch of analyticsEvents * https://st.yandex-team.ru/PAGECTR-7 */ import metrika from '../../counters/metrika.js'; import {MetrikaCounter} from '../../counters/utils'; +import {DefaultEventNames} from '../../models/common'; import {block} from '../../utils/cn'; import {NavigationButton} from './components/NavigationButton'; import {PaginatorItem} from './components/PaginatorItem'; import {ArrowType, PaginatorItemProps, PaginatorProps} from './types'; import {getPageConfigs, getPagesCount} from './utils'; -import {DefaultEventNames} from '../../models/common'; import './Paginator.scss'; diff --git a/src/components/PostInfo/components/Save.tsx b/src/components/PostInfo/components/Save.tsx index ce540bf1..c92094e3 100644 --- a/src/components/PostInfo/components/Save.tsx +++ b/src/components/PostInfo/components/Save.tsx @@ -1,16 +1,17 @@ +import React, {useContext} from 'react'; + import {useAnalytics} from '@gravity-ui/page-constructor'; import {Icon} from '@gravity-ui/uikit'; -import React, {useContext} from 'react'; import {UserContext} from '../../../contexts/UserContext'; import metrika from '../../../counters/metrika.js'; import {MetrikaCounter} from '../../../counters/utils'; import {Save as SaveIcon} from '../../../icons/Save'; import {SaveFilled} from '../../../icons/SaveFilled'; +import {DefaultEventNames} from '../../../models/common'; import {block} from '../../../utils/cn'; import {postLikeStatus} from '../../../utils/common'; -import {DefaultEventNames} from '../../../models/common'; import '../PostInfo.scss'; const ICON_SIZE = 16; diff --git a/src/components/PostInfo/components/Sharing.tsx b/src/components/PostInfo/components/Sharing.tsx index 13f0df80..7354dfb9 100644 --- a/src/components/PostInfo/components/Sharing.tsx +++ b/src/components/PostInfo/components/Sharing.tsx @@ -1,6 +1,7 @@ +import React, {useCallback, useContext} from 'react'; + import {useAnalytics} from '@gravity-ui/page-constructor'; import {SharePopover} from '@gravity-ui/uikit'; -import React, {useCallback, useContext} from 'react'; import {MobileContext} from '../../../contexts/MobileContext'; import {PostPageContext} from '../../../contexts/PostPageContext'; @@ -9,10 +10,10 @@ import metrika from '../../../counters/metrika.js'; import {MetrikaCounter} from '../../../counters/utils'; import {Keyset, i18} from '../../../i18n'; import {ShareArrowUp} from '../../../icons/ShareArrowUp'; - import {DefaultEventNames} from '../../../models/common'; import {block} from '../../../utils/cn'; import {getAbsolutePath} from '../../../utils/common'; + import '../PostInfo.scss'; const b = block('post-info'); diff --git a/src/constructor/BlogConstructorProvider.tsx b/src/constructor/BlogConstructorProvider.tsx index e487742b..e2558ba4 100644 --- a/src/constructor/BlogConstructorProvider.tsx +++ b/src/constructor/BlogConstructorProvider.tsx @@ -1,4 +1,5 @@ import React, {Fragment} from 'react'; + import {AnalyticsContext, AnalyticsContextProps} from '@gravity-ui/page-constructor'; import {DEFAULT_THEME} from '../constants'; From 2df0b896096c6bb9c3009c25094e1ae4f6ff813f Mon Sep 17 00:00:00 2001 From: Nik Tverd Date: Mon, 10 Apr 2023 12:08:58 +0600 Subject: [PATCH 3/3] fixup! fixup! feat: analytics refactoring --- src/blocks/Banner/Banner.tsx | 1 - src/blocks/CTA/CTA.tsx | 1 - src/blocks/Feed/Feed.tsx | 3 --- src/blocks/Header/Header.tsx | 1 - src/blocks/Meta/Meta.tsx | 1 - src/blocks/Suggest/Suggest.tsx | 1 - src/components/FeedHeader/components/Controls/Controls.tsx | 3 --- src/components/Paginator/Paginator.tsx | 4 ---- src/components/PostCard/PostCard.tsx | 1 - src/components/PostInfo/PostInfo.tsx | 1 - src/components/PostInfo/components/Save.tsx | 1 - src/components/PostInfo/components/Sharing.tsx | 1 - src/counters/metrika.js | 1 - 13 files changed, 20 deletions(-) diff --git a/src/blocks/Banner/Banner.tsx b/src/blocks/Banner/Banner.tsx index 27ef409c..01bc456a 100644 --- a/src/blocks/Banner/Banner.tsx +++ b/src/blocks/Banner/Banner.tsx @@ -31,7 +31,6 @@ export const Banner: React.FC = ({ /** * @deprecated Metrika will be deleted after launch of analyticsEvents - * https://st.yandex-team.ru/PAGECTR-7 */ const metrikaGoal: NewMetrikaGoal = { name: BlogMetrikaGoalIds.bannerCommon, diff --git a/src/blocks/CTA/CTA.tsx b/src/blocks/CTA/CTA.tsx index 9ff335e8..fa8adfd1 100644 --- a/src/blocks/CTA/CTA.tsx +++ b/src/blocks/CTA/CTA.tsx @@ -28,7 +28,6 @@ export const CTA: React.FC = ({items, paddingTop, paddingBottom}) => { /** * @deprecated Metrika will be deleted after launch of analyticsEvents - * https://st.yandex-team.ru/PAGECTR-7 */ const metrikaGoal: NewMetrikaGoal = { name: BlogMetrikaGoalIds.cta, diff --git a/src/blocks/Feed/Feed.tsx b/src/blocks/Feed/Feed.tsx index ae7f44d5..6886016d 100644 --- a/src/blocks/Feed/Feed.tsx +++ b/src/blocks/Feed/Feed.tsx @@ -3,7 +3,6 @@ import React, {useCallback, useContext, useEffect, useMemo, useReducer} from 're import {useAnalytics} from '@gravity-ui/page-constructor'; /** * @deprecated Metrika will be deleted after launch of analyticsEvents - * https://st.yandex-team.ru/PAGECTR-7 */ import {Icon} from '@gravity-ui/uikit'; @@ -16,7 +15,6 @@ import {LocaleContext} from '../../contexts/LocaleContext'; import {RouterContext} from '../../contexts/RouterContext'; /** * @deprecated Metrika will be deleted after launch of analyticsEvents - * https://st.yandex-team.ru/PAGECTR-7 */ import metrika from '../../counters/metrika.js'; import {MetrikaCounter} from '../../counters/utils'; @@ -139,7 +137,6 @@ export const Feed: React.FC = ({image}) => { dispatch({type: ActionTypes.SetIsShowMoreFetching, payload: true}); /** * @deprecated Metrika will be deleted after launch of analyticsEvents - * https://st.yandex-team.ru/PAGECTR-7 */ metrika.reachGoal(MetrikaCounter.CrossSite, BlogMetrikaGoalIds.showMore); handleAnalytics(); diff --git a/src/blocks/Header/Header.tsx b/src/blocks/Header/Header.tsx index 179ae0b8..dd527cfb 100644 --- a/src/blocks/Header/Header.tsx +++ b/src/blocks/Header/Header.tsx @@ -13,7 +13,6 @@ import {getBreadcrumbs} from '../../utils/common'; /** * @deprecated Metrika will be deleted after launch of analyticsEvents - * https://st.yandex-team.ru/PAGECTR-7 */ const metrikaGoals: BlogMetrikaGoals = { sharing: BlogMetrikaGoalIds.shareTop, diff --git a/src/blocks/Meta/Meta.tsx b/src/blocks/Meta/Meta.tsx index d6e47ee9..9d538177 100644 --- a/src/blocks/Meta/Meta.tsx +++ b/src/blocks/Meta/Meta.tsx @@ -18,7 +18,6 @@ const b = block('meta'); /** * @deprecated Metrika will be deleted after launch of analyticsEvents - * https://st.yandex-team.ru/PAGECTR-7 */ const metrikaGoals: BlogMetrikaGoals = { sharing: BlogMetrikaGoalIds.shareBottom, diff --git a/src/blocks/Suggest/Suggest.tsx b/src/blocks/Suggest/Suggest.tsx index 87f5af9b..970dbf99 100644 --- a/src/blocks/Suggest/Suggest.tsx +++ b/src/blocks/Suggest/Suggest.tsx @@ -12,7 +12,6 @@ import {PaddingsDirections} from '../../models/paddings'; /** * @deprecated Metrika will be deleted after launch of analyticsEvents - * https://st.yandex-team.ru/PAGECTR-7 */ const metrikaGoals = [ { diff --git a/src/components/FeedHeader/components/Controls/Controls.tsx b/src/components/FeedHeader/components/Controls/Controls.tsx index ea3a40e3..1d10ad7e 100644 --- a/src/components/FeedHeader/components/Controls/Controls.tsx +++ b/src/components/FeedHeader/components/Controls/Controls.tsx @@ -5,7 +5,6 @@ import {Button, Icon, Select} from '@gravity-ui/uikit'; /** * @deprecated Metrika will be deleted after launch of analyticsEvents - * https://st.yandex-team.ru/PAGECTR-7 */ import {BlogMetrikaGoalIds} from '../../../../constants'; import {LikesContext} from '../../../../contexts/LikesContext'; @@ -85,7 +84,6 @@ export const Controls: React.FC = ({ const handleTagSelect = (selectedTags: string[]) => { /** * @deprecated Metrika will be deleted after launch of analyticsEvents - * https://st.yandex-team.ru/PAGECTR-7 */ metrika.reachGoal(MetrikaCounter.CrossSite, BlogMetrikaGoalIds.tag, { theme: selectedTags[0], @@ -113,7 +111,6 @@ export const Controls: React.FC = ({ /** * @deprecated Metrika will be deleted after launch of analyticsEvents - * https://st.yandex-team.ru/PAGECTR-7 */ metrika.reachGoal(MetrikaCounter.CrossSite, BlogMetrikaGoalIds.service, { service: metrikaAsString, diff --git a/src/components/Paginator/Paginator.tsx b/src/components/Paginator/Paginator.tsx index cd79e8ce..b97108c2 100644 --- a/src/components/Paginator/Paginator.tsx +++ b/src/components/Paginator/Paginator.tsx @@ -5,7 +5,6 @@ import {useAnalytics} from '@gravity-ui/page-constructor'; import {BlogMetrikaGoalIds} from '../../constants'; /** * @deprecated Metrika will be deleted after launch of analyticsEvents - * https://st.yandex-team.ru/PAGECTR-7 */ import metrika from '../../counters/metrika.js'; import {MetrikaCounter} from '../../counters/utils'; @@ -62,7 +61,6 @@ export const Paginator = ({ if (type === 'prev' && page > 1) { /** * @deprecated Metrika will be deleted after launch of analyticsEvents - * https://st.yandex-team.ru/PAGECTR-7 */ metrika.reachGoal(MetrikaCounter.CrossSite, BlogMetrikaGoalIds.home); handleAnalyticsHome(); @@ -70,7 +68,6 @@ export const Paginator = ({ } else if (type === 'next' && page < pagesCount) { /** * @deprecated Metrika will be deleted after launch of analyticsEvents - * https://st.yandex-team.ru/PAGECTR-7 */ handleAnalyticsNext(); metrika.reachGoal(MetrikaCounter.CrossSite, BlogMetrikaGoalIds.next); @@ -86,7 +83,6 @@ export const Paginator = ({ if (index !== page && typeof index === 'number') { /** * @deprecated Metrika will be deleted after launch of analyticsEvents - * https://st.yandex-team.ru/PAGECTR-7 */ metrika.reachGoal(MetrikaCounter.CrossSite, BlogMetrikaGoalIds.page, {page: index}); handleAnalyticsPage(null, {page: String(index)}); diff --git a/src/components/PostCard/PostCard.tsx b/src/components/PostCard/PostCard.tsx index 4e48b094..192e0cec 100644 --- a/src/components/PostCard/PostCard.tsx +++ b/src/components/PostCard/PostCard.tsx @@ -18,7 +18,6 @@ type PostCardProps = { size?: 's' | 'm'; /** * @deprecated Metrika will be deleted after launch of analyticsEvents - * https://st.yandex-team.ru/PAGECTR-7 */ metrikaGoals?: MetrikaGoal; }; diff --git a/src/components/PostInfo/PostInfo.tsx b/src/components/PostInfo/PostInfo.tsx index cebaf77f..f089926d 100644 --- a/src/components/PostInfo/PostInfo.tsx +++ b/src/components/PostInfo/PostInfo.tsx @@ -24,7 +24,6 @@ type PostInfoProps = { theme?: 'light' | 'dark'; /** * @deprecated Metrika will be deleted after launch of analyticsEvents - * https://st.yandex-team.ru/PAGECTR-7 */ metrikaGoals?: BlogMetrikaGoals; dataQa?: string; diff --git a/src/components/PostInfo/components/Save.tsx b/src/components/PostInfo/components/Save.tsx index c92094e3..2eb2b1ea 100644 --- a/src/components/PostInfo/components/Save.tsx +++ b/src/components/PostInfo/components/Save.tsx @@ -26,7 +26,6 @@ type SaveProps = { theme?: 'light' | 'dark'; /** * @deprecated Metrika will be deleted after launch of analyticsEvents - * https://st.yandex-team.ru/PAGECTR-7 */ metrikaGoal?: string; dataQa?: string; diff --git a/src/components/PostInfo/components/Sharing.tsx b/src/components/PostInfo/components/Sharing.tsx index 7354dfb9..3c0ffbd3 100644 --- a/src/components/PostInfo/components/Sharing.tsx +++ b/src/components/PostInfo/components/Sharing.tsx @@ -22,7 +22,6 @@ type SharingProps = { theme?: 'light' | 'dark'; /** * @deprecated Metrika will be deleted after launch of analyticsEvents - * https://st.yandex-team.ru/PAGECTR-7 */ metrikaGoal?: string; }; diff --git a/src/counters/metrika.js b/src/counters/metrika.js index 2e728462..a6a9210a 100644 --- a/src/counters/metrika.js +++ b/src/counters/metrika.js @@ -1,6 +1,5 @@ /** * @deprecated Metrika will be deleted after launch of analyticsEvents - * https://st.yandex-team.ru/PAGECTR-7 */ const Goal = { SUPPORT_OPEN_FORM: 'SUPPORTOPENFORM',