@gravity-ui/blog-constructor 3.4.0 → 3.5.0-alpha.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.
Files changed (36) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/build/cjs/components/PostInfo/components/Save.js +6 -1
  3. package/build/cjs/components/Prompt/Prompt.css +61 -0
  4. package/build/cjs/components/Prompt/Prompt.d.ts +18 -0
  5. package/build/cjs/components/Prompt/Prompt.js +41 -0
  6. package/build/cjs/components/PromptSignIn/PromptSignIn.d.ts +10 -0
  7. package/build/cjs/components/PromptSignIn/PromptSignIn.js +34 -0
  8. package/build/cjs/components/PromptSignIn/hooks/usePromptSignInProps.d.ts +6 -0
  9. package/build/cjs/components/PromptSignIn/hooks/usePromptSignInProps.js +16 -0
  10. package/build/cjs/containers/BlogPage/BlogPage.d.ts +4 -1
  11. package/build/cjs/containers/BlogPage/BlogPage.js +56 -18
  12. package/build/cjs/contexts/LikesContext.d.ts +2 -0
  13. package/build/cjs/counters/metrika.d.ts +62 -0
  14. package/build/cjs/counters/metrika.js +173 -0
  15. package/build/cjs/hooks/useOpenCloseTimer.d.ts +9 -0
  16. package/build/cjs/hooks/useOpenCloseTimer.js +30 -0
  17. package/build/cjs/i18n/index.d.ts +3 -1
  18. package/build/cjs/i18n/index.js +6 -0
  19. package/build/esm/components/PostInfo/components/Save.js +6 -1
  20. package/build/esm/components/Prompt/Prompt.css +61 -0
  21. package/build/esm/components/Prompt/Prompt.d.ts +19 -0
  22. package/build/esm/components/Prompt/Prompt.js +35 -0
  23. package/build/esm/components/PromptSignIn/PromptSignIn.d.ts +10 -0
  24. package/build/esm/components/PromptSignIn/PromptSignIn.js +27 -0
  25. package/build/esm/components/PromptSignIn/hooks/usePromptSignInProps.d.ts +6 -0
  26. package/build/esm/components/PromptSignIn/hooks/usePromptSignInProps.js +12 -0
  27. package/build/esm/containers/BlogPage/BlogPage.d.ts +4 -1
  28. package/build/esm/containers/BlogPage/BlogPage.js +33 -18
  29. package/build/esm/contexts/LikesContext.d.ts +2 -0
  30. package/build/esm/counters/metrika.d.ts +62 -0
  31. package/build/esm/counters/metrika.js +169 -0
  32. package/build/esm/hooks/useOpenCloseTimer.d.ts +9 -0
  33. package/build/esm/hooks/useOpenCloseTimer.js +26 -0
  34. package/build/esm/i18n/index.d.ts +3 -1
  35. package/build/esm/i18n/index.js +6 -0
  36. package/package.json +4 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [3.4.1](https://github.com/gravity-ui/blog-constructor/compare/v3.4.0...v3.4.1) (2023-05-30)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * return js, jsx files to gulpfile.js ([#58](https://github.com/gravity-ui/blog-constructor/issues/58)) ([d5e4c42](https://github.com/gravity-ui/blog-constructor/commit/d5e4c428e8eae56fd7ab381c2969c04955adc45b))
9
+
3
10
  ## [3.4.0](https://github.com/gravity-ui/blog-constructor/compare/v3.3.0...v3.4.0) (2023-05-24)
4
11
 
5
12
 
@@ -53,7 +53,7 @@ const b = (0, cn_1.block)('post-info');
53
53
  * @returns jsx
54
54
  */
55
55
  const Save = ({ title, postId, hasUserLike, handleUserLike, metrikaGoal, size, theme, dataQa, }) => {
56
- const { toggleLike } = (0, react_1.useContext)(LikesContext_1.LikesContext);
56
+ const { toggleLike, isSignedInUser, requireSignIn } = (0, react_1.useContext)(LikesContext_1.LikesContext);
57
57
  const handleAnalytics = (0, page_constructor_1.useAnalytics)(common_1.DefaultEventNames.SaveButton);
58
58
  const isLikeable = Boolean(toggleLike);
59
59
  return (react_1.default.createElement("div", { className: b('item', { size }), onClick: (event) => {
@@ -64,6 +64,11 @@ const Save = ({ title, postId, hasUserLike, handleUserLike, metrikaGoal, size, t
64
64
  if (!isLikeable) {
65
65
  return;
66
66
  }
67
+ // Open Popup to ask the User to sign in first
68
+ if (!isSignedInUser && requireSignIn) {
69
+ requireSignIn(event);
70
+ return;
71
+ }
67
72
  (0, common_2.postLikeStatus)(postId, Boolean(hasUserLike));
68
73
  handleUserLike();
69
74
  metrika_js_1.default.reachGoal(utils_1.MetrikaCounter.CrossSite, metrikaGoal);
@@ -0,0 +1,61 @@
1
+ .bc-prompt__content {
2
+ box-shadow: 0px 4px 24px var(--pc-color-sfx-shadow), 0px 2px 8px var(--pc-color-sfx-shadow);
3
+ }
4
+
5
+ /* use this for style redefinitions to awoid problems with
6
+ unpredictable css rules order in build */
7
+ @keyframes bc-prompt_open {
8
+ 0% {
9
+ opacity: 0;
10
+ transform: translateY(100%);
11
+ }
12
+ 100% {
13
+ opacity: 1;
14
+ transform: translateY(0%);
15
+ }
16
+ }
17
+ @keyframes bc-prompt_close {
18
+ 0% {
19
+ opacity: 1;
20
+ transform: translateY(0%);
21
+ }
22
+ 100% {
23
+ opacity: 0;
24
+ transform: translateY(100%);
25
+ }
26
+ }
27
+ .bc-prompt {
28
+ display: flex;
29
+ width: 100%;
30
+ justify-content: center;
31
+ overflow: hidden;
32
+ position: fixed;
33
+ bottom: 0;
34
+ }
35
+ .bc-prompt:not(.bc-prompt_mounted) {
36
+ display: none;
37
+ }
38
+ .bc-prompt__content {
39
+ display: flex;
40
+ flex-flow: row wrap;
41
+ gap: 16px;
42
+ align-items: center;
43
+ margin: 24px;
44
+ padding: 16px 20px;
45
+ border-radius: var(--pc-border-radius);
46
+ background-color: var(--yc-color-base-float);
47
+ font-size: 1rem;
48
+ }
49
+ .bc-prompt_close {
50
+ pointer-events: none;
51
+ }
52
+ .bc-prompt_open > .bc-prompt__content {
53
+ opacity: 0;
54
+ transform: translateY(100%);
55
+ animation: bc-prompt_open 600ms forwards;
56
+ }
57
+ .bc-prompt_close > .bc-prompt__content {
58
+ opacity: 1;
59
+ transform: translateY(0%);
60
+ animation: bc-prompt_close 600ms forwards;
61
+ }
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import { ButtonProps } from '@gravity-ui/uikit';
3
+ export interface PromptProps {
4
+ text: string;
5
+ actions: ButtonProps[];
6
+ openTimestamp?: number;
7
+ openDuration?: number;
8
+ className?: string;
9
+ theme?: 'grey' | 'beige' | 'white';
10
+ }
11
+ /**
12
+ * Popup that appears with text message and button(s) for given `actions`.
13
+ * Features:
14
+ * - Automatically disappears after `openDuration` in milliseconds
15
+ * - `openTimestamp` (`Date.now()`) resets the visible duration
16
+ * @returns {JSX|null}
17
+ */
18
+ export declare const Prompt: React.FC<PromptProps>;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.Prompt = void 0;
18
+ const react_1 = __importDefault(require("react"));
19
+ const uikit_1 = require("@gravity-ui/uikit");
20
+ const useOpenCloseTimer_1 = require("../../hooks/useOpenCloseTimer");
21
+ const cn_1 = require("../../utils/cn");
22
+ const b = (0, cn_1.block)('prompt');
23
+ /**
24
+ * Popup that appears with text message and button(s) for given `actions`.
25
+ * Features:
26
+ * - Automatically disappears after `openDuration` in milliseconds
27
+ * - `openTimestamp` (`Date.now()`) resets the visible duration
28
+ * @returns {JSX|null}
29
+ */
30
+ const Prompt = ({ text, actions, className, openTimestamp = 0, openDuration, theme, }) => {
31
+ const { open } = (0, useOpenCloseTimer_1.useOpenCloseTimer)(openTimestamp, openDuration);
32
+ const mounted = openTimestamp > 0;
33
+ return (react_1.default.createElement("div", { className: b({ theme, open, close: !open, mounted }, className) },
34
+ react_1.default.createElement("div", { className: b('content') },
35
+ react_1.default.createElement("span", { className: b('text') }, text),
36
+ react_1.default.createElement("div", { className: b('actions') }, actions.map((_a, i) => {
37
+ var { view = 'action', className: btnClass } = _a, btnProps = __rest(_a, ["view", "className"]);
38
+ return (react_1.default.createElement(uikit_1.Button, Object.assign({ key: i, className: b('action', btnClass), view: view }, btnProps)));
39
+ })))));
40
+ };
41
+ exports.Prompt = Prompt;
@@ -0,0 +1,10 @@
1
+ import React, { SyntheticEvent } from 'react';
2
+ import { PromptProps } from '../Prompt/Prompt';
3
+ export interface PromptSignInProps extends Partial<PromptProps> {
4
+ onClickSignIn?: React.EventHandler<SyntheticEvent>;
5
+ }
6
+ /**
7
+ * Authentication Popup that appears when user action requires login
8
+ * @returns {JSX|null}
9
+ */
10
+ export declare const PromptSignIn: React.FC<PromptSignInProps>;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.PromptSignIn = void 0;
18
+ const react_1 = __importDefault(require("react"));
19
+ const i18n_1 = require("../../i18n");
20
+ const Prompt_1 = require("../Prompt/Prompt");
21
+ /**
22
+ * Authentication Popup that appears when user action requires login
23
+ * @returns {JSX|null}
24
+ */
25
+ const PromptSignIn = (_a) => {
26
+ var { text = (0, i18n_1.i18)(i18n_1.Keyset.PromptSignInOnLike), onClickSignIn = () => alert((0, i18n_1.i18)(i18n_1.Keyset.SignIn)), actions = [
27
+ {
28
+ children: (0, i18n_1.i18)(i18n_1.Keyset.SignIn),
29
+ onClick: onClickSignIn,
30
+ },
31
+ ] } = _a, props = __rest(_a, ["text", "onClickSignIn", "actions"]);
32
+ return react_1.default.createElement(Prompt_1.Prompt, Object.assign({}, { text, actions }, props));
33
+ };
34
+ exports.PromptSignIn = PromptSignIn;
@@ -0,0 +1,6 @@
1
+ import React, { SyntheticEvent } from 'react';
2
+ export declare function usePromptSignInProps(onClickSignIn?: React.EventHandler<SyntheticEvent>): {
3
+ onClickSignIn: ((event: React.SyntheticEvent<Element, Event>) => void) | undefined;
4
+ openTimestamp: number;
5
+ requireSignIn: (() => void) | undefined;
6
+ };
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.usePromptSignInProps = void 0;
4
+ const react_1 = require("react");
5
+ function usePromptSignInProps(onClickSignIn) {
6
+ const [openTimestamp, setTime] = (0, react_1.useState)(0);
7
+ const requireSignIn = (0, react_1.useMemo)(() => {
8
+ return onClickSignIn
9
+ ? () => {
10
+ setTime(Date.now());
11
+ }
12
+ : undefined;
13
+ }, [onClickSignIn, setTime]);
14
+ return { onClickSignIn, openTimestamp, requireSignIn };
15
+ }
16
+ exports.usePromptSignInProps = usePromptSignInProps;
@@ -1,3 +1,4 @@
1
+ import React, { SyntheticEvent } from 'react';
1
2
  import { NavigationData, PageConstructorProviderProps, PageContent } from '@gravity-ui/page-constructor';
2
3
  import { GetPostsType, MetaProps, PostsProps, Service, SetQueryType, Tag, ToggleLikeCallbackType } from '../../models/common';
3
4
  export type BlogPageProps = {
@@ -13,5 +14,7 @@ export type BlogPageProps = {
13
14
  setQuery?: SetQueryType;
14
15
  settings?: PageConstructorProviderProps;
15
16
  pageCountForShowSupportButtons?: number;
17
+ isSignedInUser?: boolean;
18
+ onClickSignIn?: React.EventHandler<SyntheticEvent>;
16
19
  };
17
- export declare const BlogPage: ({ content, posts, tags, services, getPosts, metaData, hasLikes, toggleLike, navigation, settings, pageCountForShowSupportButtons, }: BlogPageProps) => JSX.Element;
20
+ export declare const BlogPage: ({ content, posts, tags, services, getPosts, metaData, hasLikes, toggleLike, navigation, settings, pageCountForShowSupportButtons, isSignedInUser, onClickSignIn, }: BlogPageProps) => JSX.Element;
@@ -1,30 +1,68 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __rest = (this && this.__rest) || function (s, e) {
26
+ var t = {};
27
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
28
+ t[p] = s[p];
29
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
30
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
31
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
32
+ t[p[i]] = s[p[i]];
33
+ }
34
+ return t;
35
+ };
2
36
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
37
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
38
  };
5
39
  Object.defineProperty(exports, "__esModule", { value: true });
6
40
  exports.BlogPage = void 0;
7
- const react_1 = __importDefault(require("react"));
41
+ const react_1 = __importStar(require("react"));
8
42
  const page_constructor_1 = require("@gravity-ui/page-constructor");
9
43
  const MetaWrapper_1 = require("../../components/MetaWrapper/MetaWrapper");
44
+ const PromptSignIn_1 = require("../../components/PromptSignIn/PromptSignIn");
45
+ const usePromptSignInProps_1 = require("../../components/PromptSignIn/hooks/usePromptSignInProps");
10
46
  const blocksMap_1 = __importDefault(require("../../constructor/blocksMap"));
11
47
  const FeedContext_1 = require("../../contexts/FeedContext");
12
48
  const LikesContext_1 = require("../../contexts/LikesContext");
13
- const BlogPage = ({ content, posts, tags, services, getPosts, metaData, hasLikes = false, toggleLike, navigation, settings, pageCountForShowSupportButtons, }) => (react_1.default.createElement("main", null,
14
- react_1.default.createElement(LikesContext_1.LikesContext.Provider, { value: {
15
- toggleLike: toggleLike,
16
- hasLikes,
17
- } },
18
- react_1.default.createElement(FeedContext_1.FeedContext.Provider, { value: {
19
- posts: posts.posts,
20
- pinnedPost: posts.pinnedPost,
21
- totalCount: posts.count,
22
- tags,
23
- services: services !== null && services !== void 0 ? services : [],
24
- getPosts,
25
- pageCountForShowSupportButtons,
26
- } },
27
- react_1.default.createElement(page_constructor_1.PageConstructorProvider, Object.assign({}, settings),
28
- metaData ? react_1.default.createElement(MetaWrapper_1.MetaWrapper, Object.assign({}, metaData)) : null,
29
- react_1.default.createElement(page_constructor_1.PageConstructor, { content: content, custom: blocksMap_1.default, navigation: navigation }))))));
49
+ const BlogPage = ({ content, posts, tags, services, getPosts, metaData, hasLikes = false, toggleLike, navigation, settings, pageCountForShowSupportButtons, isSignedInUser = false, onClickSignIn, }) => {
50
+ const _a = (0, usePromptSignInProps_1.usePromptSignInProps)(onClickSignIn), { requireSignIn } = _a, promptSignInProps = __rest(_a, ["requireSignIn"]);
51
+ const likes = (0, react_1.useMemo)(() => ({ toggleLike, hasLikes, isSignedInUser, requireSignIn }), [toggleLike, hasLikes, isSignedInUser, requireSignIn]);
52
+ return (react_1.default.createElement("main", null,
53
+ react_1.default.createElement(LikesContext_1.LikesContext.Provider, { value: likes },
54
+ react_1.default.createElement(FeedContext_1.FeedContext.Provider, { value: {
55
+ posts: posts.posts,
56
+ pinnedPost: posts.pinnedPost,
57
+ totalCount: posts.count,
58
+ tags,
59
+ services: services !== null && services !== void 0 ? services : [],
60
+ getPosts,
61
+ pageCountForShowSupportButtons,
62
+ } },
63
+ react_1.default.createElement(page_constructor_1.PageConstructorProvider, Object.assign({}, settings),
64
+ metaData ? react_1.default.createElement(MetaWrapper_1.MetaWrapper, Object.assign({}, metaData)) : null,
65
+ react_1.default.createElement(page_constructor_1.PageConstructor, { content: content, custom: blocksMap_1.default, navigation: navigation })))),
66
+ react_1.default.createElement(PromptSignIn_1.PromptSignIn, Object.assign({}, promptSignInProps))));
67
+ };
30
68
  exports.BlogPage = BlogPage;
@@ -3,5 +3,7 @@ import { ToggleLikeCallbackType } from '../models/common';
3
3
  export interface LikesContextProps {
4
4
  toggleLike?: ToggleLikeCallbackType;
5
5
  hasLikes?: boolean;
6
+ isSignedInUser?: boolean;
7
+ requireSignIn?: React.MouseEventHandler;
6
8
  }
7
9
  export declare const LikesContext: React.Context<LikesContextProps>;
@@ -0,0 +1,62 @@
1
+ export function initCounters(configs: any): void;
2
+ declare namespace _default {
3
+ export { hit };
4
+ export { params };
5
+ export { reachGoal };
6
+ export { reachGoals };
7
+ export { Goal };
8
+ export { getServicePrefix };
9
+ export { getMarketPlacePrefix };
10
+ export { goalGoToConsole };
11
+ export { goalGoToForm };
12
+ export { goalGoToDocs };
13
+ export { goalFormSubmit };
14
+ export { goalEventFormSubmit };
15
+ export { goalEventVideoAction };
16
+ export { goalCaseFormSubmit };
17
+ export { goalSwitchLang };
18
+ }
19
+ export default _default;
20
+ declare function hit(...args: any[]): void;
21
+ declare function params(...args: any[]): void;
22
+ declare function reachGoal(counterName: any, ...args: any[]): void;
23
+ declare function reachGoals(goals: any, counterName?: string): void;
24
+ /**
25
+ * @deprecated Metrika will be deleted after launch of analyticsEvents
26
+ */
27
+ declare const Goal: {
28
+ SUPPORT_OPEN_FORM: string;
29
+ SUPPORT_STEP_1_SUBMIT: string;
30
+ SUPPORT_STEP_2_SUBMIT: string;
31
+ SUPPORT_STEP_3_SUBMIT: string;
32
+ SUPPORT_THANKYOU_SUBMIT: string;
33
+ MP_OPEN_FORM: string;
34
+ EDIT_ON_GITHUB: string;
35
+ MAIN_GO_TO_VAR: string;
36
+ MAIN_GO_TO_ISV: string;
37
+ MAIN_ALL_PARTNERS: string;
38
+ FIND_GO_TO_VAR: string;
39
+ ISV_GO_TO_MP: string;
40
+ FOOTER_SUBSCRIBE: string;
41
+ FOOTER_MNG_SUBSCRIPTIONS: string;
42
+ MOBILE_STORE_IOS: string;
43
+ MOBILE_STORE_ANDROID: string;
44
+ REGION_POPUP_SHOW: string;
45
+ REGION_POPUP_YES: string;
46
+ REGION_POPUP_NO: string;
47
+ REGION_POPUP_CLOSE: string;
48
+ SCALE_REGISTRATION: string;
49
+ DLGOTOPRODUCT_MPSITE: string;
50
+ MPK8S_CLCK: string;
51
+ 'SITE_CALCULATOR_SHARE-RESULT_CLICK': string;
52
+ };
53
+ declare function getServicePrefix(id: any): "CMPT" | "IAM" | "VPC" | "STRG" | "SK" | "CH" | "MONGO" | "POSTGR" | "MR" | "MMSQL" | "MK" | "TRSL" | "INSTGR" | "LB" | "MQ" | "DL" | "MNTRG" | "DP" | "KMS" | "YDB" | "INTRCNCT" | undefined;
54
+ declare function getMarketPlacePrefix(id: any): string;
55
+ declare function goalGoToConsole(prefix: any): any;
56
+ declare function goalGoToForm(prefix: any): any;
57
+ declare function goalGoToDocs(prefix: any): any;
58
+ declare function goalFormSubmit(prefix: any): any;
59
+ declare function goalEventFormSubmit(id: any): string;
60
+ declare function goalEventVideoAction(id: any, action: any): string;
61
+ declare function goalCaseFormSubmit(id: any): string;
62
+ declare function goalSwitchLang(place: any): string;
@@ -0,0 +1,173 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initCounters = void 0;
4
+ /**
5
+ * @deprecated Metrika will be deleted after launch of analyticsEvents
6
+ */
7
+ const Goal = {
8
+ SUPPORT_OPEN_FORM: 'SUPPORTOPENFORM',
9
+ SUPPORT_STEP_1_SUBMIT: 'SUPPORTSTEP1SUBMIT',
10
+ SUPPORT_STEP_2_SUBMIT: 'SUPPORTSTEP2SUBMIT',
11
+ SUPPORT_STEP_3_SUBMIT: 'SUPPORTSTEP3SUBMIT',
12
+ SUPPORT_THANKYOU_SUBMIT: 'SUPPORTTHANKYOUSUBMIT',
13
+ MP_OPEN_FORM: 'MPOPENFORM',
14
+ EDIT_ON_GITHUB: 'EDITONGITHUB',
15
+ MAIN_GO_TO_VAR: 'MAINGOTOVAR',
16
+ MAIN_GO_TO_ISV: 'MAINGOTOISV',
17
+ MAIN_ALL_PARTNERS: 'MAINALLPARTNERS',
18
+ FIND_GO_TO_VAR: 'FINDGOTOVAR',
19
+ ISV_GO_TO_MP: 'ISVGOTOMP',
20
+ FOOTER_SUBSCRIBE: 'FOOTERSUBSCRIBE',
21
+ FOOTER_MNG_SUBSCRIPTIONS: 'FOOTERMNGSUBSCRIPTIONS',
22
+ MOBILE_STORE_IOS: '154_Mobile_App_Store_Badge',
23
+ MOBILE_STORE_ANDROID: '155_Mobile_Google_Play_Badge',
24
+ REGION_POPUP_SHOW: 'REGIONPOPUP',
25
+ REGION_POPUP_YES: 'REGIONPOPUPYES',
26
+ REGION_POPUP_NO: 'REGIONPOPUPNO',
27
+ REGION_POPUP_CLOSE: 'REGIONPOPUPCLOSE',
28
+ SCALE_REGISTRATION: 'Scale_registration',
29
+ DLGOTOPRODUCT_MPSITE: 'DLGOTOPRODUCT_MPSITE',
30
+ MPK8S_CLCK: 'MPK8S_CLCK',
31
+ 'SITE_CALCULATOR_SHARE-RESULT_CLICK': 'SITE_CALCULATOR_SHARE-RESULT_CLICK',
32
+ };
33
+ const HIT_COUNTERS = ['main', 'cross-site', 'scale'];
34
+ const counterIds = {};
35
+ function getCounter(name) {
36
+ const counterId = counterIds[name];
37
+ return window['yaCounter' + counterId];
38
+ }
39
+ function initCounters(configs) {
40
+ configs.forEach((config) => {
41
+ counterIds[config.name] = config.id;
42
+ });
43
+ }
44
+ exports.initCounters = initCounters;
45
+ function hit(...args) {
46
+ HIT_COUNTERS.forEach((counterName) => {
47
+ const counter = getCounter(counterName);
48
+ if (!counter) {
49
+ return;
50
+ }
51
+ counter.hit(...args);
52
+ });
53
+ }
54
+ function params(...args) {
55
+ const counter = getCounter('main');
56
+ if (!counter) {
57
+ return;
58
+ }
59
+ counter.params(...args);
60
+ }
61
+ function reachGoal(counterName, ...args) {
62
+ const counter = getCounter(counterName);
63
+ if (!counter) {
64
+ return;
65
+ }
66
+ counter.reachGoal(...args);
67
+ }
68
+ function reachGoals(goals, counterName = 'main') {
69
+ if (!goals) {
70
+ return;
71
+ }
72
+ const goalsArray = Array.isArray(goals) ? goals : [goals];
73
+ goalsArray.forEach((goal) => {
74
+ if (typeof goal === 'object') {
75
+ reachGoal(counterName, goal.name, goal.params);
76
+ }
77
+ else {
78
+ reachGoal(counterName, goal);
79
+ }
80
+ });
81
+ }
82
+ // eslint-disable-next-line complexity
83
+ function getServicePrefix(id) {
84
+ switch (id) {
85
+ case 'compute':
86
+ return 'CMPT';
87
+ case 'iam':
88
+ return 'IAM';
89
+ case 'vpc':
90
+ return 'VPC';
91
+ case 'storage':
92
+ return 'STRG';
93
+ case 'speechkit':
94
+ return 'SK';
95
+ case 'managed-clickhouse':
96
+ return 'CH';
97
+ case 'managed-mongodb':
98
+ return 'MONGO';
99
+ case 'managed-postgresql':
100
+ return 'POSTGR';
101
+ case 'managed-redis':
102
+ return 'MR';
103
+ case 'managed-mysql':
104
+ return 'MMSQL';
105
+ case 'managed-kubernetes':
106
+ return 'MK';
107
+ case 'translate':
108
+ return 'TRSL';
109
+ case 'instance-groups':
110
+ return 'INSTGR';
111
+ case 'load-balancer':
112
+ return 'LB';
113
+ case 'message-queue':
114
+ return 'MQ';
115
+ case 'datalens':
116
+ return 'DL';
117
+ case 'monitoring':
118
+ return 'MNTRG';
119
+ case 'data-proc':
120
+ return 'DP';
121
+ case 'kms':
122
+ return 'KMS';
123
+ case 'ydb':
124
+ return 'YDB';
125
+ case 'interconnect':
126
+ return 'INTRCNCT';
127
+ }
128
+ return undefined;
129
+ }
130
+ function getMarketPlacePrefix(id) {
131
+ return `product_${id}_`;
132
+ }
133
+ function goalGoToConsole(prefix) {
134
+ return prefix && `${prefix}GOTOCONSOLE`;
135
+ }
136
+ function goalGoToForm(prefix) {
137
+ return prefix && `${prefix}GOTOFORM`;
138
+ }
139
+ function goalGoToDocs(prefix) {
140
+ return prefix && `${prefix}GOTODOCS`;
141
+ }
142
+ function goalFormSubmit(prefix) {
143
+ return prefix && `${prefix}FORMSUBMIT`;
144
+ }
145
+ function goalEventFormSubmit(id) {
146
+ return `event${id || 's'}_form_submit`;
147
+ }
148
+ function goalEventVideoAction(id, action) {
149
+ return `event${id}_video_${action}`;
150
+ }
151
+ function goalCaseFormSubmit(id) {
152
+ return `case${id ? `_${id}` : 's'}_form_submit`;
153
+ }
154
+ function goalSwitchLang(place) {
155
+ return `SWITCH_LANG_${place}`;
156
+ }
157
+ exports.default = {
158
+ hit,
159
+ params,
160
+ reachGoal,
161
+ reachGoals,
162
+ Goal,
163
+ getServicePrefix,
164
+ getMarketPlacePrefix,
165
+ goalGoToConsole,
166
+ goalGoToForm,
167
+ goalGoToDocs,
168
+ goalFormSubmit,
169
+ goalEventFormSubmit,
170
+ goalEventVideoAction,
171
+ goalCaseFormSubmit,
172
+ goalSwitchLang,
173
+ };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Timer to automatically update `open` state after a given duration
3
+ * @param {number} openTimestamp - UNIX timestamp in milliseconds
4
+ * @param {number} openDuration - in milliseconds
5
+ * @returns {{open: boolean}} {open} - whether the state is open
6
+ */
7
+ export declare function useOpenCloseTimer(openTimestamp?: number, openDuration?: number): {
8
+ open: boolean;
9
+ };
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useOpenCloseTimer = void 0;
4
+ const react_1 = require("react");
5
+ /**
6
+ * Timer to automatically update `open` state after a given duration
7
+ * @param {number} openTimestamp - UNIX timestamp in milliseconds
8
+ * @param {number} openDuration - in milliseconds
9
+ * @returns {{open: boolean}} {open} - whether the state is open
10
+ */
11
+ function useOpenCloseTimer(openTimestamp = Date.now(), openDuration = 4000) {
12
+ const open = Date.now() - openTimestamp < openDuration;
13
+ const [, reset] = (0, react_1.useState)(0); // time to reset `open` state
14
+ (0, react_1.useEffect)(() => {
15
+ const closeTime = openTimestamp + openDuration;
16
+ const delay = closeTime - Date.now();
17
+ if (delay <= 0) {
18
+ return;
19
+ }
20
+ const timer = setTimeout(() => {
21
+ reset(Date.now);
22
+ }, delay);
23
+ // eslint-disable-next-line consistent-return
24
+ return () => {
25
+ clearTimeout(timer);
26
+ };
27
+ }, [openTimestamp, openDuration]);
28
+ return { open };
29
+ }
30
+ exports.useOpenCloseTimer = useOpenCloseTimer;
@@ -17,6 +17,8 @@ export declare enum Keyset {
17
17
  Search = "search_placeholder",
18
18
  AllTags = "label_all_tags",
19
19
  ActionSavedOnly = "action_saved_only",
20
- AllServices = "label_all_services"
20
+ AllServices = "label_all_services",
21
+ PromptSignInOnLike = "prompt_sign_in_on_like",
22
+ SignIn = "Sign In"
21
23
  }
22
24
  export declare const i18: (key: string, params?: import("@gravity-ui/i18n").Params | undefined) => string;
@@ -24,6 +24,8 @@ var Keyset;
24
24
  Keyset["AllTags"] = "label_all_tags";
25
25
  Keyset["ActionSavedOnly"] = "action_saved_only";
26
26
  Keyset["AllServices"] = "label_all_services";
27
+ Keyset["PromptSignInOnLike"] = "prompt_sign_in_on_like";
28
+ Keyset["SignIn"] = "Sign In";
27
29
  })(Keyset = exports.Keyset || (exports.Keyset = {}));
28
30
  exports.i18n.registerKeyset(locale_1.Lang.En, KEYSET_NAME, {
29
31
  [Keyset.Title]: 'Blog',
@@ -42,11 +44,13 @@ exports.i18n.registerKeyset(locale_1.Lang.En, KEYSET_NAME, {
42
44
  [Keyset.AllTags]: 'All topics',
43
45
  [Keyset.ActionSavedOnly]: 'Saved',
44
46
  [Keyset.AllServices]: 'All Services',
47
+ [Keyset.PromptSignInOnLike]: 'Please sign in to save your bookmarks',
45
48
  [Keyset.ContextReadingTime]: [
46
49
  '{{count}} min to read',
47
50
  '{{count}} mins to read',
48
51
  '{{count}} mins to read',
49
52
  ],
53
+ [Keyset.SignIn]: 'Sign In',
50
54
  });
51
55
  exports.i18n.registerKeyset(locale_1.Lang.Ru, KEYSET_NAME, {
52
56
  [Keyset.Title]: 'Блог',
@@ -65,10 +69,12 @@ exports.i18n.registerKeyset(locale_1.Lang.Ru, KEYSET_NAME, {
65
69
  [Keyset.AllTags]: 'Все темы',
66
70
  [Keyset.ActionSavedOnly]: 'Сохранённые',
67
71
  [Keyset.AllServices]: 'Все сервисы',
72
+ [Keyset.PromptSignInOnLike]: 'Войдите, чтобы добавить доклад в своё расписание',
68
73
  [Keyset.ContextReadingTime]: [
69
74
  '{{count}} минута чтения',
70
75
  '{{count}} минуты чтения',
71
76
  '{{count}} минут чтения',
72
77
  ],
78
+ [Keyset.SignIn]: 'Войти',
73
79
  });
74
80
  exports.i18 = exports.i18n.keyset(KEYSET_NAME);