@gravity-ui/blog-constructor 5.4.1 → 5.5.0
Sign up to get free protection for your applications and to get access to all the features.
- package/build/cjs/blocks/CTA/CTA.d.ts +1 -1
- package/build/cjs/blocks/CTA/CTA.js +5 -4
- package/build/cjs/components/Search/Search.js +2 -2
- package/build/cjs/constructor/blocksMap.d.ts +1 -1
- package/build/cjs/models/blocks.d.ts +1 -2
- package/build/cjs/utils/common.js +8 -5
- package/build/esm/blocks/CTA/CTA.d.ts +1 -1
- package/build/esm/blocks/CTA/CTA.js +6 -5
- package/build/esm/components/Search/Search.js +1 -1
- package/build/esm/constructor/blocksMap.d.ts +1 -1
- package/build/esm/models/blocks.d.ts +1 -2
- package/build/esm/utils/common.js +4 -1
- package/package.json +1 -1
- package/server/models/blocks.d.ts +1 -2
@@ -1,3 +1,3 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { CTAProps } from '../../models/blocks';
|
3
|
-
export declare const CTA: ({ items, paddingTop, paddingBottom }: CTAProps) => React.JSX.Element;
|
3
|
+
export declare const CTA: ({ items, paddingTop, paddingBottom, qa }: CTAProps) => React.JSX.Element;
|
@@ -10,7 +10,7 @@ const paddings_1 = require("../../models/paddings");
|
|
10
10
|
const cn_1 = require("../../utils/cn");
|
11
11
|
const common_1 = require("../../utils/common");
|
12
12
|
const b = (0, cn_1.block)('cta');
|
13
|
-
const CTA = ({ items, paddingTop, paddingBottom }) => {
|
13
|
+
const CTA = ({ items, paddingTop, paddingBottom, qa }) => {
|
14
14
|
/**
|
15
15
|
* @deprecated Metrika will be deleted after launch of analyticsEvents
|
16
16
|
*/
|
@@ -18,18 +18,19 @@ const CTA = ({ items, paddingTop, paddingBottom }) => {
|
|
18
18
|
name: constants_1.BlogMetrikaGoalIds.cta,
|
19
19
|
isCrossSite: true,
|
20
20
|
};
|
21
|
+
const qaAttributes = (0, common_1.getQaAttributes)(qa, 'card');
|
21
22
|
return (react_1.default.createElement(Wrapper_1.Wrapper, { paddings: {
|
22
23
|
[paddings_1.PaddingsDirections.top]: paddingTop,
|
23
24
|
[paddings_1.PaddingsDirections.bottom]: paddingBottom,
|
24
|
-
}, className: b('content'), qa:
|
25
|
+
}, className: b('content'), qa: qaAttributes.wrapper }, items.map((content, index) => {
|
25
26
|
var _a;
|
26
27
|
const contentData = (0, common_1.updateContentSizes)(content);
|
27
28
|
(_a = contentData.links) === null || _a === void 0 ? void 0 : _a.forEach((link) => {
|
28
29
|
// eslint-disable-next-line no-not-accumulator-reassign/no-not-accumulator-reassign
|
29
30
|
link.metrikaGoals = (0, common_1.getBlogElementMetrika)(metrikaGoal, link.metrikaGoals);
|
30
31
|
});
|
31
|
-
return (react_1.default.createElement("div", { key: index, className: b('card'), "data-qa":
|
32
|
-
react_1.default.createElement(page_constructor_1.Content, Object.assign({}, contentData))));
|
32
|
+
return (react_1.default.createElement("div", { key: index, className: b('card'), "data-qa": qaAttributes.card },
|
33
|
+
react_1.default.createElement(page_constructor_1.Content, Object.assign({}, contentData, { qa: qaAttributes.content }))));
|
33
34
|
})));
|
34
35
|
};
|
35
36
|
exports.CTA = CTA;
|
@@ -4,7 +4,7 @@ exports.Search = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
5
5
|
const react_1 = tslib_1.__importStar(require("react"));
|
6
6
|
const uikit_1 = require("@gravity-ui/uikit");
|
7
|
-
const
|
7
|
+
const debounce_1 = tslib_1.__importDefault(require("lodash/debounce"));
|
8
8
|
const useIsIPhone_1 = require("../../hooks/useIsIPhone");
|
9
9
|
const i18n_1 = require("../../i18n");
|
10
10
|
const Close_1 = require("../../icons/Close");
|
@@ -21,7 +21,7 @@ const AUTOFOCUS_TIMEOUT = 0;
|
|
21
21
|
* @returns {JSX|null}
|
22
22
|
*/
|
23
23
|
const Search = ({ className, initialValue, onSubmit, debounce = 300, placeholder = (0, i18n_1.i18)(i18n_1.Keyset.Search), size = 'm', autoFocus = false, value: externalValue, }) => {
|
24
|
-
const handleChange = (0,
|
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);
|
27
27
|
const isIPhone = (0, useIsIPhone_1.useIsIPhone)();
|
@@ -4,7 +4,7 @@ declare const _default: {
|
|
4
4
|
"blog-layout-block": ({ fullWidth, mobileOrder, children, paddingTop, paddingBottom, }: import("react").PropsWithChildren<import("../models/blocks").LayoutProps>) => import("react").JSX.Element;
|
5
5
|
"blog-media-block": ({ text, paddingTop, paddingBottom, ...mediaProps }: import("../models/blocks").MediaProps) => import("react").JSX.Element;
|
6
6
|
"blog-banner-block": ({ color, imageSize, image, paddingTop, paddingBottom, qa, ...content }: import("../models/blocks").BannerProps) => import("react").JSX.Element;
|
7
|
-
"blog-cta-block": ({ items, paddingTop, paddingBottom }: import("../models/blocks").CTAProps) => import("react").JSX.Element;
|
7
|
+
"blog-cta-block": ({ items, paddingTop, paddingBottom, qa }: import("../models/blocks").CTAProps) => import("react").JSX.Element;
|
8
8
|
"blog-colored-text-block": ({ background, paddingTop, paddingBottom, qa, ...content }: import("../models/blocks").ColoredTextProps) => import("react").JSX.Element;
|
9
9
|
"blog-author-block": (props: import("../models/blocks").AuthorProps) => import("react").JSX.Element | null;
|
10
10
|
"blog-suggest-block": ({ paddingTop, paddingBottom }: import("../models/blocks").SuggestProps) => import("react").JSX.Element | null;
|
@@ -18,9 +18,8 @@ export type ColoredTextProps = ContentBlockProps & QAProps & {
|
|
18
18
|
altText?: string;
|
19
19
|
};
|
20
20
|
} & PaddingsYFMProps;
|
21
|
-
export type CTAProps = {
|
21
|
+
export type CTAProps = QAProps & {
|
22
22
|
items: Array<ContentBlockProps>;
|
23
|
-
columnCount?: number;
|
24
23
|
} & PaddingsYFMProps;
|
25
24
|
export type HeaderProps = HeaderBlockProps & PaddingsYFMProps;
|
26
25
|
export type LayoutProps = {
|
@@ -4,7 +4,10 @@ exports.getQaAttributes = exports.scrollOnPageChange = exports.getFeedQueryParam
|
|
4
4
|
const tslib_1 = require("tslib");
|
5
5
|
const url_1 = require("url");
|
6
6
|
const page_constructor_1 = require("@gravity-ui/page-constructor");
|
7
|
-
const
|
7
|
+
const camelCase_1 = tslib_1.__importDefault(require("lodash/camelCase"));
|
8
|
+
const debounce_1 = tslib_1.__importDefault(require("lodash/debounce"));
|
9
|
+
const flatten_1 = tslib_1.__importDefault(require("lodash/flatten"));
|
10
|
+
const memoize_1 = tslib_1.__importDefault(require("lodash/memoize"));
|
8
11
|
const constants_1 = require("../blocks/constants");
|
9
12
|
const i18n_1 = require("../i18n");
|
10
13
|
const QA_ATTRIBUTES_KEYS = ['container', 'content', 'wrapper', 'image', 'button'];
|
@@ -35,7 +38,7 @@ const scrollToHash = (hash, browser) => {
|
|
35
38
|
setTimeout(() => element.scrollIntoView({ behavior: browser === 'Yandex' ? 'auto' : 'smooth' }), 0);
|
36
39
|
};
|
37
40
|
exports.scrollToHash = scrollToHash;
|
38
|
-
exports.getTags = (0,
|
41
|
+
exports.getTags = (0, memoize_1.default)((tags, prefix) => {
|
39
42
|
return tags.map((_a) => {
|
40
43
|
var { slug } = _a, tag = tslib_1.__rest(_a, ["slug"]);
|
41
44
|
const queryParams = new URLSearchParams();
|
@@ -44,7 +47,7 @@ exports.getTags = (0, lodash_1.memoize)((tags, prefix) => {
|
|
44
47
|
});
|
45
48
|
});
|
46
49
|
const stub = (postId) => postId;
|
47
|
-
exports.postLikeStatus = (0,
|
50
|
+
exports.postLikeStatus = (0, debounce_1.default)((postId, hasUserLike) => {
|
48
51
|
(hasUserLike ? stub : stub)(postId);
|
49
52
|
}, 300);
|
50
53
|
const getTagFilterUrl = (tagId, prefix) => {
|
@@ -117,9 +120,9 @@ exports.scrollOnPageChange = scrollOnPageChange;
|
|
117
120
|
const getQaAttributes = (qa, ...customKeys) => {
|
118
121
|
const attributes = {};
|
119
122
|
if (qa) {
|
120
|
-
const keys = QA_ATTRIBUTES_KEYS.concat((0,
|
123
|
+
const keys = QA_ATTRIBUTES_KEYS.concat((0, flatten_1.default)(customKeys));
|
121
124
|
keys.forEach((key) => {
|
122
|
-
attributes[(0,
|
125
|
+
attributes[(0, camelCase_1.default)(key)] = `${qa}-${key}`;
|
123
126
|
});
|
124
127
|
attributes.default = qa;
|
125
128
|
}
|
@@ -1,4 +1,4 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { CTAProps } from '../../models/blocks';
|
3
3
|
import './CTA.css';
|
4
|
-
export declare const CTA: ({ items, paddingTop, paddingBottom }: CTAProps) => React.JSX.Element;
|
4
|
+
export declare const CTA: ({ items, paddingTop, paddingBottom, qa }: CTAProps) => React.JSX.Element;
|
@@ -4,10 +4,10 @@ import { Wrapper } from '../../components/Wrapper/Wrapper';
|
|
4
4
|
import { BlogMetrikaGoalIds } from '../../constants';
|
5
5
|
import { PaddingsDirections } from '../../models/paddings';
|
6
6
|
import { block } from '../../utils/cn';
|
7
|
-
import { getBlogElementMetrika, updateContentSizes } from '../../utils/common';
|
7
|
+
import { getBlogElementMetrika, getQaAttributes, updateContentSizes } from '../../utils/common';
|
8
8
|
import './CTA.css';
|
9
9
|
const b = block('cta');
|
10
|
-
export const CTA = ({ items, paddingTop, paddingBottom }) => {
|
10
|
+
export const CTA = ({ items, paddingTop, paddingBottom, qa }) => {
|
11
11
|
/**
|
12
12
|
* @deprecated Metrika will be deleted after launch of analyticsEvents
|
13
13
|
*/
|
@@ -15,17 +15,18 @@ export const CTA = ({ items, paddingTop, paddingBottom }) => {
|
|
15
15
|
name: BlogMetrikaGoalIds.cta,
|
16
16
|
isCrossSite: true,
|
17
17
|
};
|
18
|
+
const qaAttributes = getQaAttributes(qa, 'card');
|
18
19
|
return (React.createElement(Wrapper, { paddings: {
|
19
20
|
[PaddingsDirections.top]: paddingTop,
|
20
21
|
[PaddingsDirections.bottom]: paddingBottom,
|
21
|
-
}, className: b('content'), qa:
|
22
|
+
}, className: b('content'), qa: qaAttributes.wrapper }, items.map((content, index) => {
|
22
23
|
var _a;
|
23
24
|
const contentData = updateContentSizes(content);
|
24
25
|
(_a = contentData.links) === null || _a === void 0 ? void 0 : _a.forEach((link) => {
|
25
26
|
// eslint-disable-next-line no-not-accumulator-reassign/no-not-accumulator-reassign
|
26
27
|
link.metrikaGoals = getBlogElementMetrika(metrikaGoal, link.metrikaGoals);
|
27
28
|
});
|
28
|
-
return (React.createElement("div", { key: index, className: b('card'), "data-qa":
|
29
|
-
React.createElement(Content, Object.assign({}, contentData))));
|
29
|
+
return (React.createElement("div", { key: index, className: b('card'), "data-qa": qaAttributes.card },
|
30
|
+
React.createElement(Content, Object.assign({}, contentData, { qa: qaAttributes.content }))));
|
30
31
|
})));
|
31
32
|
};
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
2
2
|
import { Icon, TextInput } from '@gravity-ui/uikit';
|
3
|
-
import
|
3
|
+
import lodashDebounce from 'lodash/debounce';
|
4
4
|
import { useIsIPhone } from '../../hooks/useIsIPhone';
|
5
5
|
import { Keyset, i18 } from '../../i18n';
|
6
6
|
import { Close } from '../../icons/Close';
|
@@ -4,7 +4,7 @@ declare const _default: {
|
|
4
4
|
"blog-layout-block": ({ fullWidth, mobileOrder, children, paddingTop, paddingBottom, }: import("react").PropsWithChildren<import("../models/blocks").LayoutProps>) => import("react").JSX.Element;
|
5
5
|
"blog-media-block": ({ text, paddingTop, paddingBottom, ...mediaProps }: import("../models/blocks").MediaProps) => import("react").JSX.Element;
|
6
6
|
"blog-banner-block": ({ color, imageSize, image, paddingTop, paddingBottom, qa, ...content }: import("../models/blocks").BannerProps) => import("react").JSX.Element;
|
7
|
-
"blog-cta-block": ({ items, paddingTop, paddingBottom }: import("../models/blocks").CTAProps) => import("react").JSX.Element;
|
7
|
+
"blog-cta-block": ({ items, paddingTop, paddingBottom, qa }: import("../models/blocks").CTAProps) => import("react").JSX.Element;
|
8
8
|
"blog-colored-text-block": ({ background, paddingTop, paddingBottom, qa, ...content }: import("../models/blocks").ColoredTextProps) => import("react").JSX.Element;
|
9
9
|
"blog-author-block": (props: import("../models/blocks").AuthorProps) => import("react").JSX.Element | null;
|
10
10
|
"blog-suggest-block": ({ paddingTop, paddingBottom }: import("../models/blocks").SuggestProps) => import("react").JSX.Element | null;
|
@@ -18,9 +18,8 @@ export type ColoredTextProps = ContentBlockProps & QAProps & {
|
|
18
18
|
altText?: string;
|
19
19
|
};
|
20
20
|
} & PaddingsYFMProps;
|
21
|
-
export type CTAProps = {
|
21
|
+
export type CTAProps = QAProps & {
|
22
22
|
items: Array<ContentBlockProps>;
|
23
|
-
columnCount?: number;
|
24
23
|
} & PaddingsYFMProps;
|
25
24
|
export type HeaderProps = HeaderBlockProps & PaddingsYFMProps;
|
26
25
|
export type LayoutProps = {
|
@@ -1,7 +1,10 @@
|
|
1
1
|
import { __rest } from "tslib";
|
2
2
|
import { format, parse } from 'url';
|
3
3
|
import { isNewMetrikaFormat, } from '@gravity-ui/page-constructor';
|
4
|
-
import
|
4
|
+
import camelCase from 'lodash/camelCase';
|
5
|
+
import debounce from 'lodash/debounce';
|
6
|
+
import flatten from 'lodash/flatten';
|
7
|
+
import memoize from 'lodash/memoize';
|
5
8
|
import { CONTENT_DEFAULT_COL_SIZES, CONTENT_DEFAULT_SIZE, CONTENT_DEFAULT_THEME, DEFAULT_PAGE, DEFAULT_ROWS_PER_PAGE, } from '../blocks/constants';
|
6
9
|
import { Keyset, i18 } from '../i18n';
|
7
10
|
const QA_ATTRIBUTES_KEYS = ['container', 'content', 'wrapper', 'image', 'button'];
|
package/package.json
CHANGED
@@ -18,9 +18,8 @@ export type ColoredTextProps = ContentBlockProps & QAProps & {
|
|
18
18
|
altText?: string;
|
19
19
|
};
|
20
20
|
} & PaddingsYFMProps;
|
21
|
-
export type CTAProps = {
|
21
|
+
export type CTAProps = QAProps & {
|
22
22
|
items: Array<ContentBlockProps>;
|
23
|
-
columnCount?: number;
|
24
23
|
} & PaddingsYFMProps;
|
25
24
|
export type HeaderProps = HeaderBlockProps & PaddingsYFMProps;
|
26
25
|
export type LayoutProps = {
|