@gravity-ui/blog-constructor 5.16.1-alpha.1 → 6.0.0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +5 -5
- package/build/cjs/blocks/Banner/Banner.js +7 -9
- package/build/cjs/blocks/CTA/CTA.js +7 -9
- package/build/cjs/blocks/Feed/Feed.js +6 -14
- package/build/cjs/blocks/Header/Header.js +10 -14
- package/build/cjs/blocks/Media/Media.js +1 -0
- package/build/cjs/blocks/Meta/Meta.js +11 -15
- package/build/cjs/blocks/Suggest/Suggest.js +8 -11
- package/build/cjs/components/FeedHeader/components/Controls/Controls.css +19 -5
- package/build/cjs/components/FeedHeader/components/Controls/Controls.js +22 -27
- package/build/cjs/components/FeedHeader/components/Controls/customRenders.js +1 -1
- package/build/cjs/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.css +4 -1
- package/build/cjs/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.js +2 -2
- package/build/cjs/components/Paginator/Paginator.js +16 -19
- package/build/cjs/components/Paginator/components/NavigationButton.js +1 -1
- package/build/cjs/components/PostCard/PostCard.d.ts +3 -6
- package/build/cjs/components/PostCard/PostCard.js +2 -2
- package/build/cjs/components/PostInfo/PostInfo.css +8 -0
- package/build/cjs/components/PostInfo/PostInfo.d.ts +4 -10
- package/build/cjs/components/PostInfo/PostInfo.js +4 -4
- package/build/cjs/components/PostInfo/SuggestPostInfo.js +4 -1
- package/build/cjs/components/PostInfo/components/ReadingTime.js +1 -1
- package/build/cjs/components/PostInfo/components/Save.d.ts +4 -6
- package/build/cjs/components/PostInfo/components/Save.js +4 -7
- package/build/cjs/components/PostInfo/components/Sharing.d.ts +3 -5
- package/build/cjs/components/PostInfo/components/Sharing.js +4 -10
- package/build/cjs/components/Posts/Posts.js +3 -3
- package/build/cjs/components/PostsEmpty/PostsEmpty.js +2 -2
- package/build/cjs/components/PostsError/PostsError.js +3 -3
- package/build/cjs/components/PromptSignIn/PromptSignIn.js +2 -2
- package/build/cjs/components/Search/Search.css +3 -0
- package/build/cjs/components/Search/Search.js +2 -2
- package/build/cjs/constants.d.ts +2 -1
- package/build/cjs/constants.js +20 -19
- package/build/cjs/constructor/BlogConstructorProvider.js +1 -0
- package/build/cjs/containers/BlogPostPage/BlogPostPage.css +1 -1
- package/build/cjs/contexts/LocaleContext.js +2 -2
- package/build/cjs/counters/metrika.js +0 -3
- package/build/cjs/counters/utils.d.ts +1 -1
- package/build/cjs/counters/utils.js +7 -7
- package/build/cjs/i18n/index.d.ts +1 -3
- package/build/cjs/i18n/index.js +8 -10
- package/build/cjs/index.d.ts +0 -1
- package/build/cjs/index.js +1 -3
- package/build/cjs/models/common.d.ts +1 -1
- package/build/cjs/models/locale.d.ts +1 -4
- package/build/cjs/models/locale.js +1 -6
- package/build/cjs/utils/common.d.ts +15 -3
- package/build/cjs/utils/common.js +20 -19
- package/build/esm/blocks/Banner/Banner.js +8 -10
- package/build/esm/blocks/CTA/CTA.js +8 -10
- package/build/esm/blocks/Feed/Feed.js +9 -17
- package/build/esm/blocks/Header/Header.js +12 -16
- package/build/esm/blocks/Media/Media.js +1 -0
- package/build/esm/blocks/Meta/Meta.js +13 -17
- package/build/esm/blocks/Suggest/Suggest.js +9 -12
- package/build/esm/components/FeedHeader/components/Controls/Controls.css +19 -5
- package/build/esm/components/FeedHeader/components/Controls/Controls.js +25 -30
- package/build/esm/components/FeedHeader/components/Controls/customRenders.js +2 -2
- package/build/esm/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.css +4 -1
- package/build/esm/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.js +2 -2
- package/build/esm/components/Paginator/Paginator.js +18 -21
- package/build/esm/components/Paginator/components/NavigationButton.js +2 -2
- package/build/esm/components/PostCard/PostCard.d.ts +3 -6
- package/build/esm/components/PostCard/PostCard.js +2 -2
- package/build/esm/components/PostInfo/PostInfo.css +8 -0
- package/build/esm/components/PostInfo/PostInfo.d.ts +4 -10
- package/build/esm/components/PostInfo/PostInfo.js +4 -4
- package/build/esm/components/PostInfo/SuggestPostInfo.js +4 -1
- package/build/esm/components/PostInfo/components/ReadingTime.js +2 -2
- package/build/esm/components/PostInfo/components/Save.d.ts +4 -6
- package/build/esm/components/PostInfo/components/Save.js +4 -7
- package/build/esm/components/PostInfo/components/Sharing.d.ts +3 -5
- package/build/esm/components/PostInfo/components/Sharing.js +5 -11
- package/build/esm/components/Posts/Posts.js +4 -4
- package/build/esm/components/PostsEmpty/PostsEmpty.js +3 -3
- package/build/esm/components/PostsError/PostsError.js +4 -4
- package/build/esm/components/PromptSignIn/PromptSignIn.js +3 -3
- package/build/esm/components/Search/Search.css +3 -0
- package/build/esm/components/Search/Search.js +3 -3
- package/build/esm/constants.d.ts +2 -1
- package/build/esm/constants.js +19 -18
- package/build/esm/constructor/BlogConstructorProvider.js +2 -1
- package/build/esm/containers/BlogPostPage/BlogPostPage.css +1 -1
- package/build/esm/contexts/LocaleContext.js +1 -1
- package/build/esm/counters/metrika.js +0 -3
- package/build/esm/counters/utils.d.ts +1 -1
- package/build/esm/counters/utils.js +6 -6
- package/build/esm/i18n/index.d.ts +1 -3
- package/build/esm/i18n/index.js +7 -9
- package/build/esm/index.d.ts +0 -1
- package/build/esm/index.js +0 -1
- package/build/esm/models/common.d.ts +1 -1
- package/build/esm/models/locale.d.ts +1 -4
- package/build/esm/models/locale.js +0 -5
- package/build/esm/utils/common.d.ts +15 -3
- package/build/esm/utils/common.js +18 -17
- package/package.json +15 -14
- package/server/data/contentFilter.d.ts +1 -1
- package/server/data/contentFilter.js +2 -1
- package/server/data/transformPageContent.d.ts +2 -2
- package/server/data/transformPost.d.ts +7 -2
- package/server/data/transformPost.js +1 -1
- package/server/index.d.ts +1 -1
- package/server/models/common.d.ts +1 -1
- package/server/models/locale.d.ts +1 -4
- package/server/models/locale.js +1 -6
- package/styles/storybook/common.scss +8 -0
- package/styles/storybook/index.scss +1 -1
- package/styles/styles.css +115 -0
- package/styles/styles.scss +1 -0
- package/build/cjs/configure.d.ts +0 -5
- package/build/cjs/configure.js +0 -8
- package/build/esm/configure.d.ts +0 -5
- package/build/esm/configure.js +0 -4
@@ -1,18 +1,12 @@
|
|
1
1
|
import React from 'react';
|
2
|
+
import { AnalyticsEventsProp } from '@gravity-ui/page-constructor';
|
2
3
|
import { PostData, QAProps } from '../../models/common';
|
3
|
-
export type BlogMetrikaGoals = {
|
4
|
-
sharing?: string;
|
5
|
-
save?: string;
|
6
|
-
};
|
7
4
|
type PostInfoProps = QAProps & {
|
8
5
|
postId: PostData['id'];
|
9
6
|
readingTime: PostData['readingTime'];
|
10
7
|
date: PostData['date'];
|
11
8
|
theme?: 'light' | 'dark';
|
12
|
-
|
13
|
-
* @deprecated Metrika will be deleted after launch of analyticsEvents
|
14
|
-
*/
|
15
|
-
metrikaGoals?: BlogMetrikaGoals;
|
9
|
+
analyticsEventsContainer?: Record<string, AnalyticsEventsProp>;
|
16
10
|
};
|
17
11
|
/**
|
18
12
|
* Blog post info panel component
|
@@ -21,10 +15,10 @@ type PostInfoProps = QAProps & {
|
|
21
15
|
* @param readingTime - post reading time
|
22
16
|
* @param date - post create date
|
23
17
|
* @param theme - theme name
|
24
|
-
* @param metrikaGoals - metrika goals name
|
25
18
|
* @param qa - test-attr
|
19
|
+
* @param analyticsEventsContainer - a map of records with a single or collection of objects detailing analytics events
|
26
20
|
*
|
27
21
|
* @returns jsx
|
28
22
|
*/
|
29
|
-
export declare const PostInfo: ({ date, readingTime, postId, theme,
|
23
|
+
export declare const PostInfo: ({ date, readingTime, postId, theme, qa, analyticsEventsContainer, }: PostInfoProps) => React.JSX.Element;
|
30
24
|
export {};
|
@@ -18,18 +18,18 @@ const b = (0, cn_1.block)('post-info');
|
|
18
18
|
* @param readingTime - post reading time
|
19
19
|
* @param date - post create date
|
20
20
|
* @param theme - theme name
|
21
|
-
* @param metrikaGoals - metrika goals name
|
22
21
|
* @param qa - test-attr
|
22
|
+
* @param analyticsEventsContainer - a map of records with a single or collection of objects detailing analytics events
|
23
23
|
*
|
24
24
|
* @returns jsx
|
25
25
|
*/
|
26
|
-
const PostInfo = ({ date, readingTime, postId, theme = 'light',
|
26
|
+
const PostInfo = ({ date, readingTime, postId, theme = 'light', qa, analyticsEventsContainer, }) => {
|
27
27
|
const { likes } = (0, react_1.useContext)(PostPageContext_1.PostPageContext);
|
28
28
|
const qaAttributes = (0, common_1.getQaAttributes)(qa, 'date', 'reading-time', 'save');
|
29
29
|
return (react_1.default.createElement("div", { className: b('container', { theme }) },
|
30
30
|
date && react_1.default.createElement(Date_1.Date, { date: date, qa: qaAttributes.date }),
|
31
31
|
readingTime && react_1.default.createElement(ReadingTime_1.ReadingTime, { readingTime: readingTime, qa: qaAttributes.readingTime }),
|
32
|
-
react_1.default.createElement(Sharing_1.Sharing, {
|
33
|
-
likes && (react_1.default.createElement(Save_1.Save, { postId: postId, title: likes.likesCount, hasUserLike: likes.hasUserLike, handleUserLike: likes.handleUserLike,
|
32
|
+
react_1.default.createElement(Sharing_1.Sharing, { theme: theme, analyticsEvents: analyticsEventsContainer === null || analyticsEventsContainer === void 0 ? void 0 : analyticsEventsContainer.sharing }),
|
33
|
+
likes && (react_1.default.createElement(Save_1.Save, { postId: postId, title: likes.likesCount, hasUserLike: likes.hasUserLike, handleUserLike: likes.handleUserLike, analyticsEvents: analyticsEventsContainer === null || analyticsEventsContainer === void 0 ? void 0 : analyticsEventsContainer.save, theme: theme, qa: qaAttributes.save }))));
|
34
34
|
};
|
35
35
|
exports.PostInfo = PostInfo;
|
@@ -9,7 +9,10 @@ const cn_1 = require("../../utils/cn");
|
|
9
9
|
const Date_1 = require("./components/Date");
|
10
10
|
const ReadingTime_1 = require("./components/ReadingTime");
|
11
11
|
const Save_1 = require("./components/Save");
|
12
|
+
const common_2 = require("../../utils/common");
|
13
|
+
const constants_1 = require("../../constants");
|
12
14
|
const b = (0, cn_1.block)('post-info');
|
15
|
+
const saveEvents = (0, common_2.prepareAnalyticsEvent)({ name: constants_1.DefaultGoalIds.saveSuggest });
|
13
16
|
/**
|
14
17
|
* Suggest blog card info component
|
15
18
|
*
|
@@ -37,6 +40,6 @@ const SuggestPostInfo = ({ postId, date, readingTime, likes, size = common_1.Pos
|
|
37
40
|
react_1.default.createElement("div", { className: b('suggest-container') },
|
38
41
|
date && react_1.default.createElement(Date_1.Date, { date: date, size: size, id: dateId }),
|
39
42
|
readingTime && (react_1.default.createElement(ReadingTime_1.ReadingTime, { readingTime: readingTime, size: size, id: readingTimeId }))),
|
40
|
-
likes && postId && (react_1.default.createElement(Save_1.Save, { postId: postId, title: likesCount, hasUserLike: hasUserLike, handleUserLike: handleLike, size: size, qa: qa }))));
|
43
|
+
likes && postId && (react_1.default.createElement(Save_1.Save, { postId: postId, title: likesCount, analyticsEvents: saveEvents, hasUserLike: hasUserLike, handleUserLike: handleLike, size: size, qa: qa }))));
|
41
44
|
};
|
42
45
|
exports.SuggestPostInfo = SuggestPostInfo;
|
@@ -12,5 +12,5 @@ const ICON_SIZE = 16;
|
|
12
12
|
const ReadingTime = ({ readingTime, size = 's', id, qa }) => (react_1.default.createElement("div", { className: b('item', { size }), id: id, "data-qa": qa },
|
13
13
|
react_1.default.createElement("span", { className: b('icon') },
|
14
14
|
react_1.default.createElement(uikit_1.Icon, { data: Time_1.Time, size: ICON_SIZE, className: b('icon-color') })),
|
15
|
-
(0, i18n_1.
|
15
|
+
(0, i18n_1.i18n)(i18n_1.Keyset.ContextReadingTime, { count: readingTime })));
|
16
16
|
exports.ReadingTime = ReadingTime;
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import React from 'react';
|
2
|
+
import { AnalyticsEventsProp } from '@gravity-ui/page-constructor';
|
2
3
|
import { QAProps } from '../../../models/common';
|
3
4
|
type SaveProps = QAProps & {
|
4
5
|
title: string | number;
|
@@ -6,11 +7,8 @@ type SaveProps = QAProps & {
|
|
6
7
|
hasUserLike: boolean;
|
7
8
|
handleUserLike: () => void;
|
8
9
|
theme?: 'light' | 'dark';
|
9
|
-
/**
|
10
|
-
* @deprecated Metrika will be deleted after launch of analyticsEvents
|
11
|
-
*/
|
12
|
-
metrikaGoal?: string;
|
13
10
|
size?: 's' | 'm';
|
11
|
+
analyticsEvents?: AnalyticsEventsProp;
|
14
12
|
};
|
15
13
|
/**
|
16
14
|
* Components for 'save' blog UI-component
|
@@ -18,11 +16,11 @@ type SaveProps = QAProps & {
|
|
18
16
|
* @param title - post title
|
19
17
|
* @param postId - post id
|
20
18
|
* @param hasUserLike - flag what blog has like from current user
|
21
|
-
* @param metrikaGoal - metrika goal name
|
22
19
|
* @param qa - test-attr
|
23
20
|
* @param size - text size
|
21
|
+
* @param analyticsEvents - a single or collection of objects detailing analytics events
|
24
22
|
*
|
25
23
|
* @returns jsx
|
26
24
|
*/
|
27
|
-
export declare const Save: ({ title, postId, hasUserLike, handleUserLike,
|
25
|
+
export declare const Save: ({ title, postId, hasUserLike, handleUserLike, size, theme, qa, analyticsEvents, }: SaveProps) => React.JSX.Element;
|
28
26
|
export {};
|
@@ -6,8 +6,6 @@ const react_1 = tslib_1.__importStar(require("react"));
|
|
6
6
|
const page_constructor_1 = require("@gravity-ui/page-constructor");
|
7
7
|
const uikit_1 = require("@gravity-ui/uikit");
|
8
8
|
const LikesContext_1 = require("../../../contexts/LikesContext");
|
9
|
-
const metrika_1 = tslib_1.__importDefault(require("../../../counters/metrika"));
|
10
|
-
const utils_1 = require("../../../counters/utils");
|
11
9
|
const Save_1 = require("../../../icons/Save");
|
12
10
|
const SaveFilled_1 = require("../../../icons/SaveFilled");
|
13
11
|
const common_1 = require("../../../models/common");
|
@@ -21,17 +19,17 @@ const b = (0, cn_1.block)('post-info');
|
|
21
19
|
* @param title - post title
|
22
20
|
* @param postId - post id
|
23
21
|
* @param hasUserLike - flag what blog has like from current user
|
24
|
-
* @param metrikaGoal - metrika goal name
|
25
22
|
* @param qa - test-attr
|
26
23
|
* @param size - text size
|
24
|
+
* @param analyticsEvents - a single or collection of objects detailing analytics events
|
27
25
|
*
|
28
26
|
* @returns jsx
|
29
27
|
*/
|
30
|
-
const Save = ({ title, postId, hasUserLike, handleUserLike,
|
28
|
+
const Save = ({ title, postId, hasUserLike, handleUserLike, size, theme, qa, analyticsEvents, }) => {
|
31
29
|
const { toggleLike, isSignedInUser, requireSignIn } = (0, react_1.useContext)(LikesContext_1.LikesContext);
|
32
30
|
const handleAnalytics = (0, page_constructor_1.useAnalytics)(common_1.DefaultEventNames.SaveButton);
|
33
31
|
const isLikeable = Boolean(toggleLike);
|
34
|
-
return (react_1.default.createElement("
|
32
|
+
return (react_1.default.createElement("button", { className: b('item', { size, save: true }), onClick: (event) => {
|
35
33
|
// both preventDefault and stopImmediatePropagation required to work properly
|
36
34
|
// https://stackoverflow.com/questions/24415631/reactjs-syntheticevent-stoppropagation-only-works-with-react-events
|
37
35
|
event.preventDefault();
|
@@ -46,8 +44,7 @@ const Save = ({ title, postId, hasUserLike, handleUserLike, metrikaGoal, size, t
|
|
46
44
|
}
|
47
45
|
(0, common_2.postLikeStatus)(postId, Boolean(hasUserLike));
|
48
46
|
handleUserLike();
|
49
|
-
|
50
|
-
handleAnalytics();
|
47
|
+
handleAnalytics(analyticsEvents);
|
51
48
|
}, "data-qa": qa },
|
52
49
|
react_1.default.createElement("div", { className: b('content', { cursor: isLikeable, theme }) },
|
53
50
|
react_1.default.createElement("span", { className: b('icon') },
|
@@ -1,10 +1,8 @@
|
|
1
1
|
import React from 'react';
|
2
|
+
import { AnalyticsEventsProp } from '@gravity-ui/page-constructor';
|
2
3
|
type SharingProps = {
|
3
4
|
theme?: 'light' | 'dark';
|
4
|
-
|
5
|
-
* @deprecated Metrika will be deleted after launch of analyticsEvents
|
6
|
-
*/
|
7
|
-
metrikaGoal?: string;
|
5
|
+
analyticsEvents?: AnalyticsEventsProp;
|
8
6
|
};
|
9
|
-
export declare const Sharing: ({ theme,
|
7
|
+
export declare const Sharing: ({ theme, analyticsEvents }: SharingProps) => React.JSX.Element;
|
10
8
|
export {};
|
@@ -8,28 +8,22 @@ const page_constructor_1 = require("@gravity-ui/page-constructor");
|
|
8
8
|
const MobileContext_1 = require("../../../contexts/MobileContext");
|
9
9
|
const PostPageContext_1 = require("../../../contexts/PostPageContext");
|
10
10
|
const RouterContext_1 = require("../../../contexts/RouterContext");
|
11
|
-
const metrika_1 = tslib_1.__importDefault(require("../../../counters/metrika"));
|
12
|
-
const utils_1 = require("../../../counters/utils");
|
13
11
|
const i18n_1 = require("../../../i18n");
|
14
12
|
const ShareArrowUp_1 = require("../../../icons/ShareArrowUp");
|
15
13
|
const common_1 = require("../../../models/common");
|
16
14
|
const cn_1 = require("../../../utils/cn");
|
17
15
|
const common_2 = require("../../../utils/common");
|
18
16
|
const b = (0, cn_1.block)('post-info');
|
19
|
-
const Sharing = ({ theme,
|
17
|
+
const Sharing = ({ theme, analyticsEvents }) => {
|
20
18
|
const router = (0, react_1.useContext)(RouterContext_1.RouterContext);
|
21
19
|
const isMobile = (0, react_1.useContext)(MobileContext_1.MobileContext);
|
22
20
|
const { shareOptions } = (0, react_1.useContext)(PostPageContext_1.PostPageContext);
|
23
21
|
const handleAnalyticsGlobal = (0, page_constructor_1.useAnalytics)(common_1.DefaultEventNames.ShareButton);
|
24
|
-
const handleMetrika = (0, react_1.useCallback)(() => {
|
25
|
-
metrika_1.default.reachGoal(utils_1.MetrikaCounter.CrossSite, metrikaGoal);
|
26
|
-
}, [metrikaGoal]);
|
27
22
|
const handleAnalytics = (0, react_1.useCallback)(() => {
|
28
|
-
handleAnalyticsGlobal();
|
29
|
-
|
30
|
-
}, [handleAnalyticsGlobal, handleMetrika]);
|
23
|
+
handleAnalyticsGlobal(analyticsEvents);
|
24
|
+
}, [analyticsEvents, handleAnalyticsGlobal]);
|
31
25
|
return (react_1.default.createElement("div", { className: b('item') },
|
32
26
|
react_1.default.createElement("div", { className: b('icon') },
|
33
|
-
react_1.default.createElement(components_1.SharePopover, { url: (0, common_2.getAbsolutePath)(router), className: b('share'), iconClass: b('share-icon'), switcherClassName: b('switcher', { theme }), tooltipClassName: b('popup'), useWebShareApi: isMobile, direction: components_1.ShareLayoutDirection.Column, buttonTitle: (0, i18n_1.
|
27
|
+
react_1.default.createElement(components_1.SharePopover, { url: (0, common_2.getAbsolutePath)(router), className: b('share'), iconClass: b('share-icon'), switcherClassName: b('switcher', { theme }), tooltipClassName: b('popup'), useWebShareApi: isMobile, direction: components_1.ShareLayoutDirection.Column, buttonTitle: (0, i18n_1.i18n)(i18n_1.Keyset.ActionShare), customIcon: ShareArrowUp_1.ShareArrowUp, placement: "bottom", openByHover: false, shareOptions: shareOptions, onClick: handleAnalytics }))));
|
34
28
|
};
|
35
29
|
exports.Sharing = Sharing;
|
@@ -25,10 +25,10 @@ const Posts = ({ containerId, pinnedPostOnPage, currentPage, postsOnPage, isShow
|
|
25
25
|
? common_1.PostCardTitleHeadingLevel.H3
|
26
26
|
: common_1.PostCardTitleHeadingLevel.H2 }))))) : (react_1.default.createElement(PostsEmpty_1.PostsEmpty, null))),
|
27
27
|
react_1.default.createElement("div", { className: b('pagination') },
|
28
|
-
Boolean(isShowMoreVisible && (postsOnPage === null || postsOnPage === void 0 ? void 0 : postsOnPage.length)) && (react_1.default.createElement(uikit_1.Button, { view: "outlined", size: "xl", className: b('more-button'), onClick: handleShowMore }, (0, i18n_1.
|
28
|
+
Boolean(isShowMoreVisible && (postsOnPage === null || postsOnPage === void 0 ? void 0 : postsOnPage.length)) && (react_1.default.createElement(uikit_1.Button, { view: "outlined", size: "xl", className: b('more-button'), onClick: handleShowMore }, (0, i18n_1.i18n)(i18n_1.Keyset.ActionLoadMore))),
|
29
29
|
errorShowMore && (react_1.default.createElement("div", { className: b('error-show-more') },
|
30
|
-
react_1.default.createElement("div", null, (0, i18n_1.
|
31
|
-
react_1.default.createElement("div", null, (0, i18n_1.
|
30
|
+
react_1.default.createElement("div", null, (0, i18n_1.i18n)(i18n_1.Keyset.ErrorTitle)),
|
31
|
+
react_1.default.createElement("div", null, (0, i18n_1.i18n)(i18n_1.Keyset.PostLoadError)))),
|
32
32
|
Boolean(currentPage && postCountOnPage) && (react_1.default.createElement("div", { className: b('paginator') },
|
33
33
|
react_1.default.createElement(Paginator_1.Paginator, { onPageChange: handlePageChange, page: currentPage, totalItems: postCountOnPage, itemsPerPage: perPageInQuery, maxPages: Infinity, pageCountForShowSupportButtons: pageCountForShowSupportButtons, queryParams: queryParams }))))));
|
34
34
|
exports.Posts = Posts;
|
@@ -7,6 +7,6 @@ const i18n_1 = require("../../i18n");
|
|
7
7
|
const cn_1 = require("../../utils/cn");
|
8
8
|
const b = (0, cn_1.block)('posts-empty');
|
9
9
|
const PostsEmpty = () => (react_1.default.createElement("div", { className: b('container') },
|
10
|
-
react_1.default.createElement("div", { className: b('title') }, (0, i18n_1.
|
11
|
-
react_1.default.createElement("div", { className: b('subtitle') }, (0, i18n_1.
|
10
|
+
react_1.default.createElement("div", { className: b('title') }, (0, i18n_1.i18n)(i18n_1.Keyset.TitleEmptyContainer)),
|
11
|
+
react_1.default.createElement("div", { className: b('subtitle') }, (0, i18n_1.i18n)(i18n_1.Keyset.ContextEmptyContainer))));
|
12
12
|
exports.PostsEmpty = PostsEmpty;
|
@@ -10,9 +10,9 @@ const b = (0, cn_1.block)('posts-error');
|
|
10
10
|
const PostsError = ({ onButtonClick }) => {
|
11
11
|
const handleClick = () => (onButtonClick ? onButtonClick() : window.location.reload());
|
12
12
|
return (react_1.default.createElement("div", { className: b('container') },
|
13
|
-
react_1.default.createElement("div", { className: b('title') }, (0, i18n_1.
|
14
|
-
react_1.default.createElement("div", { className: b('subtitle') }, (0, i18n_1.
|
13
|
+
react_1.default.createElement("div", { className: b('title') }, (0, i18n_1.i18n)(i18n_1.Keyset.ErrorTitle)),
|
14
|
+
react_1.default.createElement("div", { className: b('subtitle') }, (0, i18n_1.i18n)(i18n_1.Keyset.PostLoadError)),
|
15
15
|
react_1.default.createElement("div", { className: b('button') },
|
16
|
-
react_1.default.createElement(uikit_1.Button, { size: "xl", view: "outlined", onClick: handleClick }, (0, i18n_1.
|
16
|
+
react_1.default.createElement(uikit_1.Button, { size: "xl", view: "outlined", onClick: handleClick }, (0, i18n_1.i18n)(i18n_1.Keyset.ActionTryAgain)))));
|
17
17
|
};
|
18
18
|
exports.PostsError = PostsError;
|
@@ -10,9 +10,9 @@ const Prompt_1 = require("../Prompt/Prompt");
|
|
10
10
|
* @returns {JSX|null}
|
11
11
|
*/
|
12
12
|
const PromptSignIn = (_a) => {
|
13
|
-
var { text = (0, i18n_1.
|
13
|
+
var { text = (0, i18n_1.i18n)(i18n_1.Keyset.PromptSignInOnLike), onClickSignIn = () => alert((0, i18n_1.i18n)(i18n_1.Keyset.SignIn)), actions = [
|
14
14
|
{
|
15
|
-
children: (0, i18n_1.
|
15
|
+
children: (0, i18n_1.i18n)(i18n_1.Keyset.SignIn),
|
16
16
|
onClick: onClickSignIn,
|
17
17
|
size: 'l',
|
18
18
|
},
|
@@ -20,7 +20,7 @@ const AUTOFOCUS_TIMEOUT = 0;
|
|
20
20
|
*
|
21
21
|
* @returns {JSX|null}
|
22
22
|
*/
|
23
|
-
const Search = ({ className, initialValue, onSubmit, debounce = 300, placeholder = (0, i18n_1.
|
23
|
+
const Search = ({ className, initialValue, onSubmit, debounce = 300, placeholder = (0, i18n_1.i18n)(i18n_1.Keyset.Search), size = 'm', autoFocus = false, value: externalValue, }) => {
|
24
24
|
const handleChange = (0, debounce_1.default)(onSubmit, debounce);
|
25
25
|
const [value, setValue] = (0, react_1.useState)(initialValue);
|
26
26
|
const inputRef = (0, react_1.useRef)(null);
|
@@ -45,7 +45,7 @@ const Search = ({ className, initialValue, onSubmit, debounce = 300, placeholder
|
|
45
45
|
onSubmit('');
|
46
46
|
}
|
47
47
|
};
|
48
|
-
return (react_1.default.createElement("
|
48
|
+
return (react_1.default.createElement("button", { className: b('input-icon'), onClick: handleClick },
|
49
49
|
react_1.default.createElement(uikit_1.Icon, { size: iconSize, data: iconData })));
|
50
50
|
}, [handleChange, onSubmit, value]);
|
51
51
|
return (react_1.default.createElement("div", { className: b({ size }, className) },
|
package/build/cjs/constants.d.ts
CHANGED
@@ -9,13 +9,14 @@ export declare const BREAKPOINTS: {
|
|
9
9
|
export declare const DEFAULT_THEME = "light";
|
10
10
|
export declare const UIKIT_ROOT_CLASS = "g-root";
|
11
11
|
export declare const UIKIT_THEME_LIGHT_CLASS: string;
|
12
|
-
export declare enum
|
12
|
+
export declare enum DefaultGoalIds {
|
13
13
|
shareTop = "SITE_BLOG_SHARE-TOP_CLICK",
|
14
14
|
shareBottom = "SITE_BLOG_SHARE-BOTTOM_CLICK",
|
15
15
|
breadcrumbsTop = "SITE_BLOG_BREADCRUMBS-TOP_CLICK",
|
16
16
|
breadcrumbsBottom = "SITE_BLOG_BREADCRUMBS-BOTTOM_CLICK",
|
17
17
|
saveTop = "SITE_BLOG_SAVE-TOP_CLICK",
|
18
18
|
saveBottom = "SITE_BLOG_SAVE-BOTTOM_CLICK",
|
19
|
+
saveSuggest = "SITE_BLOG_SAVE-SUGGEST_CLICK",
|
19
20
|
suggest = "SITE_BLOG_INTERESTING-CARD_CLICK",
|
20
21
|
bannerCommon = "SITE_BLOG_TEXT-BANNER_CLICK",
|
21
22
|
cta = "SITE_BLOG_CTA_CLICK",
|
package/build/cjs/constants.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.DEFAULT_PADDINGS = exports.
|
3
|
+
exports.DEFAULT_PADDINGS = exports.DefaultGoalIds = exports.UIKIT_THEME_LIGHT_CLASS = exports.UIKIT_ROOT_CLASS = exports.DEFAULT_THEME = exports.BREAKPOINTS = void 0;
|
4
4
|
const paddings_1 = require("./models/paddings");
|
5
5
|
exports.BREAKPOINTS = {
|
6
6
|
xs: 0,
|
@@ -12,24 +12,25 @@ exports.BREAKPOINTS = {
|
|
12
12
|
exports.DEFAULT_THEME = 'light';
|
13
13
|
exports.UIKIT_ROOT_CLASS = 'g-root';
|
14
14
|
exports.UIKIT_THEME_LIGHT_CLASS = `${exports.UIKIT_ROOT_CLASS}_theme_${exports.DEFAULT_THEME}`;
|
15
|
-
var
|
16
|
-
(function (
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
15
|
+
var DefaultGoalIds;
|
16
|
+
(function (DefaultGoalIds) {
|
17
|
+
DefaultGoalIds["shareTop"] = "SITE_BLOG_SHARE-TOP_CLICK";
|
18
|
+
DefaultGoalIds["shareBottom"] = "SITE_BLOG_SHARE-BOTTOM_CLICK";
|
19
|
+
DefaultGoalIds["breadcrumbsTop"] = "SITE_BLOG_BREADCRUMBS-TOP_CLICK";
|
20
|
+
DefaultGoalIds["breadcrumbsBottom"] = "SITE_BLOG_BREADCRUMBS-BOTTOM_CLICK";
|
21
|
+
DefaultGoalIds["saveTop"] = "SITE_BLOG_SAVE-TOP_CLICK";
|
22
|
+
DefaultGoalIds["saveBottom"] = "SITE_BLOG_SAVE-BOTTOM_CLICK";
|
23
|
+
DefaultGoalIds["saveSuggest"] = "SITE_BLOG_SAVE-SUGGEST_CLICK";
|
24
|
+
DefaultGoalIds["suggest"] = "SITE_BLOG_INTERESTING-CARD_CLICK";
|
25
|
+
DefaultGoalIds["bannerCommon"] = "SITE_BLOG_TEXT-BANNER_CLICK";
|
26
|
+
DefaultGoalIds["cta"] = "SITE_BLOG_CTA_CLICK";
|
27
|
+
DefaultGoalIds["tag"] = "SITE_BLOG_THEME-SELECTOR_CLCK";
|
28
|
+
DefaultGoalIds["service"] = "SITE_BLOG_SERVICE-SELECTOR_CLCK";
|
29
|
+
DefaultGoalIds["showMore"] = "SITE_BLOG-PAGINATION_SHOW-MORE_CLCK";
|
30
|
+
DefaultGoalIds["next"] = "SITE_BLOG-PAGINATION_NEXT_CLCK";
|
31
|
+
DefaultGoalIds["home"] = "SITE_BLOG-PAGINATION_HOME_CLCK";
|
32
|
+
DefaultGoalIds["page"] = "SITE_BLOG-PAGINATION_PAGE-NMBR_CLCK";
|
33
|
+
})(DefaultGoalIds = exports.DefaultGoalIds || (exports.DefaultGoalIds = {}));
|
33
34
|
exports.DEFAULT_PADDINGS = {
|
34
35
|
[paddings_1.PaddingsDirections.bottom]: 'l',
|
35
36
|
[paddings_1.PaddingsDirections.top]: 'xs',
|
@@ -14,6 +14,7 @@ const ThemeValueContext_1 = require("../contexts/theme/ThemeValueContext");
|
|
14
14
|
const BlogConstructorProvider = ({ isMobile, locale = {}, router = {}, theme = constants_1.DEFAULT_THEME, device = {}, analytics = {}, settings = {}, children, }) => {
|
15
15
|
const context = [
|
16
16
|
react_1.default.createElement(ThemeValueContext_1.ThemeValueContext.Provider, { value: { themeValue: theme }, key: "theme-context" }),
|
17
|
+
react_1.default.createElement(page_constructor_1.ThemeContext.Provider, { value: { theme: theme }, key: "pc-theme" }),
|
17
18
|
react_1.default.createElement(LocaleContext_1.LocaleContext.Provider, { value: { locale }, key: "locale-context" }),
|
18
19
|
react_1.default.createElement(RouterContext_1.RouterContext.Provider, { value: router, key: "router-context" }),
|
19
20
|
react_1.default.createElement(MobileContext_1.MobileContext.Provider, { value: Boolean(isMobile), key: "is-mobile-context" }),
|
@@ -3,11 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.LocaleContext = void 0;
|
4
4
|
const tslib_1 = require("tslib");
|
5
5
|
const react_1 = tslib_1.__importDefault(require("react"));
|
6
|
-
const
|
6
|
+
const uikit_1 = require("@gravity-ui/uikit");
|
7
7
|
exports.LocaleContext = react_1.default.createContext({
|
8
8
|
locale: {
|
9
9
|
code: 'en-En',
|
10
|
-
lang:
|
10
|
+
lang: uikit_1.Lang.En,
|
11
11
|
langName: 'English',
|
12
12
|
pathPrefix: 'en',
|
13
13
|
},
|
@@ -1,9 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.initCounters = void 0;
|
4
|
-
/**
|
5
|
-
* @deprecated Metrika will be deleted after launch of analyticsEvents
|
6
|
-
*/
|
7
4
|
const Goal = {
|
8
5
|
SUPPORT_OPEN_FORM: 'SUPPORTOPENFORM',
|
9
6
|
SUPPORT_STEP_1_SUBMIT: 'SUPPORTSTEP1SUBMIT',
|
@@ -1,9 +1,9 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.
|
4
|
-
var
|
5
|
-
(function (
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
})(
|
3
|
+
exports.AnalyticsCounter = void 0;
|
4
|
+
var AnalyticsCounter;
|
5
|
+
(function (AnalyticsCounter) {
|
6
|
+
AnalyticsCounter["Main"] = "main";
|
7
|
+
AnalyticsCounter["CrossSite"] = "cross-site";
|
8
|
+
AnalyticsCounter["Scale"] = "scale";
|
9
|
+
})(AnalyticsCounter = exports.AnalyticsCounter || (exports.AnalyticsCounter = {}));
|
@@ -1,5 +1,3 @@
|
|
1
|
-
import { I18N } from '@gravity-ui/i18n';
|
2
|
-
export declare const i18n: I18N;
|
3
1
|
export declare enum Keyset {
|
4
2
|
Title = "title",
|
5
3
|
TitleBreadcrumbs = "title_breadcrumbs",
|
@@ -21,4 +19,4 @@ export declare enum Keyset {
|
|
21
19
|
PromptSignInOnLike = "prompt_sign_in_on_like",
|
22
20
|
SignIn = "Sign In"
|
23
21
|
}
|
24
|
-
export declare const
|
22
|
+
export declare const i18n: (key: Keyset, params?: import("@gravity-ui/i18n").Params | undefined) => string;
|
package/build/cjs/i18n/index.js
CHANGED
@@ -1,10 +1,8 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.
|
4
|
-
const i18n_1 = require("@gravity-ui/i18n");
|
5
|
-
const
|
6
|
-
const KEYSET_NAME = 'blog';
|
7
|
-
exports.i18n = new i18n_1.I18N();
|
3
|
+
exports.i18n = exports.Keyset = void 0;
|
4
|
+
const i18n_1 = require("@gravity-ui/uikit/i18n");
|
5
|
+
const NAMESPACE = 'blog';
|
8
6
|
var Keyset;
|
9
7
|
(function (Keyset) {
|
10
8
|
Keyset["Title"] = "title";
|
@@ -27,7 +25,7 @@ var Keyset;
|
|
27
25
|
Keyset["PromptSignInOnLike"] = "prompt_sign_in_on_like";
|
28
26
|
Keyset["SignIn"] = "Sign In";
|
29
27
|
})(Keyset = exports.Keyset || (exports.Keyset = {}));
|
30
|
-
|
28
|
+
const en = {
|
31
29
|
[Keyset.Title]: 'Blog',
|
32
30
|
[Keyset.TitleBreadcrumbs]: 'Blog',
|
33
31
|
[Keyset.TitleSuggest]: 'See also',
|
@@ -51,8 +49,8 @@ exports.i18n.registerKeyset(locale_1.Lang.En, KEYSET_NAME, {
|
|
51
49
|
'{{count}} mins to read',
|
52
50
|
],
|
53
51
|
[Keyset.SignIn]: 'Sign In',
|
54
|
-
}
|
55
|
-
|
52
|
+
};
|
53
|
+
const ru = {
|
56
54
|
[Keyset.Title]: 'Блог',
|
57
55
|
[Keyset.TitleBreadcrumbs]: 'Блог',
|
58
56
|
[Keyset.TitleSuggest]: 'Читать также',
|
@@ -76,5 +74,5 @@ exports.i18n.registerKeyset(locale_1.Lang.Ru, KEYSET_NAME, {
|
|
76
74
|
'{{count}} минут чтения',
|
77
75
|
],
|
78
76
|
[Keyset.SignIn]: 'Войти',
|
79
|
-
}
|
80
|
-
exports.
|
77
|
+
};
|
78
|
+
exports.i18n = (0, i18n_1.addComponentKeysets)({ en, ru }, NAMESPACE);
|
package/build/cjs/index.d.ts
CHANGED
package/build/cjs/index.js
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.BREAKPOINTS = exports.BlogPage = exports.BlogPostPage = exports.BlogConstructorProvider =
|
3
|
+
exports.BREAKPOINTS = exports.BlogPage = exports.BlogPostPage = exports.BlogConstructorProvider = void 0;
|
4
4
|
const tslib_1 = require("tslib");
|
5
|
-
var configure_1 = require("./configure");
|
6
|
-
Object.defineProperty(exports, "configure", { enumerable: true, get: function () { return configure_1.configure; } });
|
7
5
|
var BlogConstructorProvider_1 = require("./constructor/BlogConstructorProvider");
|
8
6
|
Object.defineProperty(exports, "BlogConstructorProvider", { enumerable: true, get: function () { return BlogConstructorProvider_1.BlogConstructorProvider; } });
|
9
7
|
var BlogPostPage_1 = require("./containers/BlogPostPage/BlogPostPage");
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { ReactNode } from 'react';
|
2
|
-
import { MarkdownItPluginCb } from '@
|
2
|
+
import { MarkdownItPluginCb } from '@diplodoc/transform/lib/plugins/typings';
|
3
3
|
import { HeaderBlockProps as PageConstructorHeaderBlockProps } from '@gravity-ui/page-constructor';
|
4
4
|
import { IBrowser, IDevice } from 'ua-parser-js';
|
5
5
|
import { Locale } from '../models/locale';
|
@@ -1,11 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.Currency =
|
4
|
-
var Lang;
|
5
|
-
(function (Lang) {
|
6
|
-
Lang["Ru"] = "ru";
|
7
|
-
Lang["En"] = "en";
|
8
|
-
})(Lang = exports.Lang || (exports.Lang = {}));
|
3
|
+
exports.Currency = void 0;
|
9
4
|
var Currency;
|
10
5
|
(function (Currency) {
|
11
6
|
Currency["RUB"] = "RUB";
|
@@ -1,7 +1,8 @@
|
|
1
1
|
/// <reference types="lodash" />
|
2
|
-
import {
|
2
|
+
import { AnalyticsEvent, AnalyticsEventsProp, ContentBlockProps, HeaderBreadCrumbsProps } from '@gravity-ui/page-constructor';
|
3
3
|
import { RouterContextProps } from '../contexts/RouterContext';
|
4
4
|
import { GetPostsRequest, Query, Tag } from '../models/common';
|
5
|
+
import { AnalyticsCounter } from '../counters/utils';
|
5
6
|
export interface QueryParam {
|
6
7
|
name: string;
|
7
8
|
value?: string | number | null;
|
@@ -38,9 +39,20 @@ type GetBreadcrumbsProps = {
|
|
38
39
|
};
|
39
40
|
export declare const getBlogPath: (pathPrefix: string) => string;
|
40
41
|
export declare const getBreadcrumbs: ({ tags, blogPath }: GetBreadcrumbsProps) => HeaderBreadCrumbsProps;
|
41
|
-
export declare const
|
42
|
-
|
42
|
+
export declare const getMergedAnalyticsEvents: (analyticEvents: AnalyticsEventsProp, existringEvents?: AnalyticsEventsProp) => {
|
43
|
+
name: string;
|
44
|
+
type?: string | undefined;
|
45
|
+
counters?: import("@gravity-ui/page-constructor").AnalyticsCounters | undefined;
|
46
|
+
context?: string | undefined;
|
47
|
+
target?: string | undefined;
|
48
|
+
}[];
|
43
49
|
export declare const getFeedQueryParams: (queryString: Query, pageNumber?: number) => GetPostsRequest;
|
44
50
|
export declare const scrollOnPageChange: (containerId: string) => void;
|
45
51
|
export declare const getQaAttributes: (qa?: string, ...customKeys: (string | Array<string>)[]) => Record<string, string>;
|
52
|
+
type PrepareAnalyticsEventArgs = {
|
53
|
+
name: string;
|
54
|
+
counter?: AnalyticsCounter;
|
55
|
+
options?: Record<string, string | number>;
|
56
|
+
};
|
57
|
+
export declare const prepareAnalyticsEvent: ({ name, counter, options, }: PrepareAnalyticsEventArgs) => AnalyticsEvent;
|
46
58
|
export {};
|