@gravity-ui/blog-constructor 7.0.0-beta.1 → 7.0.0-beta.3

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 (29) hide show
  1. package/build/cjs/blocks/Meta/Meta.js +2 -2
  2. package/build/cjs/blocks/Meta/Meta.js.map +1 -1
  3. package/build/cjs/components/FeedHeader/components/Controls/Controls.css +1 -5
  4. package/build/cjs/components/FeedHeader/components/Controls/Controls.js +10 -9
  5. package/build/cjs/components/FeedHeader/components/Controls/Controls.js.map +1 -1
  6. package/build/cjs/components/FeedHeader/components/Controls/customRenders.d.ts +1 -0
  7. package/build/cjs/components/FeedHeader/components/Controls/customRenders.js +2 -2
  8. package/build/cjs/components/FeedHeader/components/Controls/customRenders.js.map +1 -1
  9. package/build/cjs/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.d.ts +2 -1
  10. package/build/cjs/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.js +2 -2
  11. package/build/cjs/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.js.map +1 -1
  12. package/build/cjs/utils/common.d.ts +1 -1
  13. package/build/cjs/utils/common.js +4 -4
  14. package/build/cjs/utils/common.js.map +1 -1
  15. package/build/esm/blocks/Meta/Meta.js +2 -2
  16. package/build/esm/blocks/Meta/Meta.js.map +1 -1
  17. package/build/esm/components/FeedHeader/components/Controls/Controls.css +1 -5
  18. package/build/esm/components/FeedHeader/components/Controls/Controls.js +11 -10
  19. package/build/esm/components/FeedHeader/components/Controls/Controls.js.map +1 -1
  20. package/build/esm/components/FeedHeader/components/Controls/customRenders.d.ts +1 -0
  21. package/build/esm/components/FeedHeader/components/Controls/customRenders.js +2 -2
  22. package/build/esm/components/FeedHeader/components/Controls/customRenders.js.map +1 -1
  23. package/build/esm/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.d.ts +2 -1
  24. package/build/esm/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.js +2 -2
  25. package/build/esm/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.js.map +1 -1
  26. package/build/esm/utils/common.d.ts +1 -1
  27. package/build/esm/utils/common.js +2 -2
  28. package/build/esm/utils/common.js.map +1 -1
  29. package/package.json +1 -1
@@ -26,7 +26,7 @@ const breadcrumbsGoals = (0, common_1.prepareAnalyticsEvent)({
26
26
  });
27
27
  const Meta = (props) => {
28
28
  const { paddingTop = 'l', paddingBottom = 'l', theme = 'light', qa } = props;
29
- const { post } = React.useContext(PostPageContext_1.PostPageContext);
29
+ const { post, breadcrumbs: customBreadcrumbs } = React.useContext(PostPageContext_1.PostPageContext);
30
30
  const { locale } = React.useContext(LocaleContext_1.LocaleContext);
31
31
  const qaAttributes = (0, common_1.getQaAttributes)(qa, 'post-info');
32
32
  const { getBlogPath = common_1.getBlogPath } = React.useContext(SettingsContext_1.SettingsContext);
@@ -37,7 +37,7 @@ const Meta = (props) => {
37
37
  return ((0, jsx_runtime_1.jsxs)(Wrapper_1.Wrapper, { paddings: {
38
38
  [paddings_1.PaddingsDirections.top]: paddingTop,
39
39
  [paddings_1.PaddingsDirections.bottom]: paddingBottom,
40
- }, qa: qaAttributes.wrapper, children: [breadcrumbs && ((0, jsx_runtime_1.jsx)(page_constructor_1.HeaderBreadcrumbs, { items: breadcrumbs.items, className: b('breadcrumbs'), theme: theme })), title && ((0, jsx_runtime_1.jsx)(page_constructor_1.YFMWrapper, { content: title, modifiers: {
40
+ }, qa: qaAttributes.wrapper, children: [breadcrumbs && ((0, jsx_runtime_1.jsx)(page_constructor_1.HeaderBreadcrumbs, { items: (customBreadcrumbs === null || customBreadcrumbs === void 0 ? void 0 : customBreadcrumbs.items) || breadcrumbs.items, className: b('breadcrumbs'), theme: theme })), title && ((0, jsx_runtime_1.jsx)(page_constructor_1.YFMWrapper, { content: title, modifiers: {
41
41
  blogBreadcrumbs: true,
42
42
  resetPaddings: true,
43
43
  } })), post && ((0, jsx_runtime_1.jsx)(PostInfo_1.PostInfo, { postId: id, date: date, readingTime: readingTime, analyticsEventsContainer: analyticsEventsContainer, qa: qaAttributes.postInfo }))] }));
@@ -1 +1 @@
1
- {"version":3,"file":"Meta.js","sourceRoot":"../../../../src","sources":["blocks/Meta/Meta.tsx"],"names":[],"mappings":";;;;;AAAA,qDAA+B;AAE/B,mEAAgG;AAEhG,oEAA4D;AAC5D,iEAAyD;AACzD,kDAA+C;AAC/C,mEAA2D;AAC3D,uEAA+D;AAC/D,uEAA+D;AAE/D,uDAAyD;AACzD,0CAAqC;AACrC,kDAM4B;AAC5B,mDAAsD;AAItD,MAAM,CAAC,GAAG,IAAA,UAAK,EAAC,MAAM,CAAC,CAAC;AAExB,MAAM,wBAAwB,GAAwC;IAClE,OAAO,EAAE,IAAA,8BAAqB,EAAC,EAAC,IAAI,EAAE,0BAAc,CAAC,WAAW,EAAC,CAAC;IAClE,IAAI,EAAE,IAAA,8BAAqB,EAAC,EAAC,IAAI,EAAE,0BAAc,CAAC,UAAU,EAAC,CAAC;CACjE,CAAC;AAEF,MAAM,gBAAgB,GAAG,IAAA,8BAAqB,EAAC;IAC3C,IAAI,EAAE,0BAAc,CAAC,iBAAiB;IACtC,OAAO,EAAE,wBAAgB,CAAC,SAAS;CACtC,CAAC,CAAC;AAEI,MAAM,IAAI,GAAG,CAAC,KAAgB,EAAE,EAAE;IACrC,MAAM,EAAC,UAAU,GAAG,GAAG,EAAE,aAAa,GAAG,GAAG,EAAE,KAAK,GAAG,OAAO,EAAE,EAAE,EAAC,GAAG,KAAK,CAAC;IAC3E,MAAM,EAAC,IAAI,EAAC,GAAG,KAAK,CAAC,UAAU,CAAC,iCAAe,CAAC,CAAC;IACjD,MAAM,EAAC,MAAM,EAAC,GAAG,KAAK,CAAC,UAAU,CAAC,6BAAa,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,IAAA,wBAAe,EAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IACtD,MAAM,EAAC,WAAW,GAAG,oBAAkB,EAAC,GAAG,KAAK,CAAC,UAAU,CAAC,iCAAe,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAEtD,MAAM,EAAC,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAC,GAAG,IAAI,CAAC;IAElD,MAAM,WAAW,GAAG,IAAA,uBAAc,EAAC,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC,CAAC;IAErD,WAAW,CAAC,eAAe,GAAG,IAAA,iCAAwB,EAAC,gBAAgB,CAAC,CAAC;IAEzE,OAAO,CACH,wBAAC,iBAAO,IACJ,QAAQ,EAAE;YACN,CAAC,6BAAkB,CAAC,GAAG,CAAC,EAAE,UAAU;YACpC,CAAC,6BAAkB,CAAC,MAAM,CAAC,EAAE,aAAa;SAC7C,EACD,EAAE,EAAE,YAAY,CAAC,OAAO,aAEvB,WAAW,IAAI,CACZ,uBAAC,oCAAiB,IACd,KAAK,EAAE,WAAW,CAAC,KAAK,EACxB,SAAS,EAAE,CAAC,CAAC,aAAa,CAAC,EAC3B,KAAK,EAAE,KAAK,GACd,CACL,EACA,KAAK,IAAI,CACN,uBAAC,6BAAU,IACP,OAAO,EAAE,KAAK,EACd,SAAS,EAAE;oBACP,eAAe,EAAE,IAAI;oBACrB,aAAa,EAAE,IAAI;iBACtB,GACH,CACL,EACA,IAAI,IAAI,CACL,uBAAC,mBAAQ,IACL,MAAM,EAAE,EAAE,EACV,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,WAAW,EACxB,wBAAwB,EAAE,wBAAwB,EAClD,EAAE,EAAE,YAAY,CAAC,QAAQ,GAC3B,CACL,IACK,CACb,CAAC;AACN,CAAC,CAAC;AAjDW,QAAA,IAAI,QAiDf","sourcesContent":["import * as React from 'react';\n\nimport {AnalyticsEventsProp, HeaderBreadcrumbs, YFMWrapper} from '@gravity-ui/page-constructor';\n\nimport {PostInfo} from '../../components/PostInfo/PostInfo';\nimport {Wrapper} from '../../components/Wrapper/Wrapper';\nimport {DefaultGoalIds} from '../../constants';\nimport {LocaleContext} from '../../contexts/LocaleContext';\nimport {SettingsContext} from '../../contexts/SettingsContext';\nimport {PostPageContext} from '../../contexts/PostPageContext';\nimport {MetaProps} from '../../models/blocks';\nimport {PaddingsDirections} from '../../models/paddings';\nimport {block} from '../../utils/cn';\nimport {\n getBreadcrumbs,\n getBlogPath as getDefaultBlogPath,\n getMergedAnalyticsEvents,\n getQaAttributes,\n prepareAnalyticsEvent,\n} from '../../utils/common';\nimport {AnalyticsCounter} from '../../counters/utils';\n\nimport './Meta.scss';\n\nconst b = block('meta');\n\nconst analyticsEventsContainer: Record<string, AnalyticsEventsProp> = {\n sharing: prepareAnalyticsEvent({name: DefaultGoalIds.shareBottom}),\n save: prepareAnalyticsEvent({name: DefaultGoalIds.saveBottom}),\n};\n\nconst breadcrumbsGoals = prepareAnalyticsEvent({\n name: DefaultGoalIds.breadcrumbsBottom,\n counter: AnalyticsCounter.CrossSite,\n});\n\nexport const Meta = (props: MetaProps) => {\n const {paddingTop = 'l', paddingBottom = 'l', theme = 'light', qa} = props;\n const {post} = React.useContext(PostPageContext);\n const {locale} = React.useContext(LocaleContext);\n const qaAttributes = getQaAttributes(qa, 'post-info');\n const {getBlogPath = getDefaultBlogPath} = React.useContext(SettingsContext);\n const blogPath = getBlogPath(locale.pathPrefix || '');\n\n const {title, id, date, readingTime, tags} = post;\n\n const breadcrumbs = getBreadcrumbs({tags, blogPath});\n\n breadcrumbs.analyticsEvents = getMergedAnalyticsEvents(breadcrumbsGoals);\n\n return (\n <Wrapper\n paddings={{\n [PaddingsDirections.top]: paddingTop,\n [PaddingsDirections.bottom]: paddingBottom,\n }}\n qa={qaAttributes.wrapper}\n >\n {breadcrumbs && (\n <HeaderBreadcrumbs\n items={breadcrumbs.items}\n className={b('breadcrumbs')}\n theme={theme}\n />\n )}\n {title && (\n <YFMWrapper\n content={title}\n modifiers={{\n blogBreadcrumbs: true,\n resetPaddings: true,\n }}\n />\n )}\n {post && (\n <PostInfo\n postId={id}\n date={date}\n readingTime={readingTime}\n analyticsEventsContainer={analyticsEventsContainer}\n qa={qaAttributes.postInfo}\n />\n )}\n </Wrapper>\n );\n};\n"]}
1
+ {"version":3,"file":"Meta.js","sourceRoot":"../../../../src","sources":["blocks/Meta/Meta.tsx"],"names":[],"mappings":";;;;;AAAA,qDAA+B;AAE/B,mEAAgG;AAEhG,oEAA4D;AAC5D,iEAAyD;AACzD,kDAA+C;AAC/C,mEAA2D;AAC3D,uEAA+D;AAC/D,uEAA+D;AAE/D,uDAAyD;AACzD,0CAAqC;AACrC,kDAM4B;AAC5B,mDAAsD;AAItD,MAAM,CAAC,GAAG,IAAA,UAAK,EAAC,MAAM,CAAC,CAAC;AAExB,MAAM,wBAAwB,GAAwC;IAClE,OAAO,EAAE,IAAA,8BAAqB,EAAC,EAAC,IAAI,EAAE,0BAAc,CAAC,WAAW,EAAC,CAAC;IAClE,IAAI,EAAE,IAAA,8BAAqB,EAAC,EAAC,IAAI,EAAE,0BAAc,CAAC,UAAU,EAAC,CAAC;CACjE,CAAC;AAEF,MAAM,gBAAgB,GAAG,IAAA,8BAAqB,EAAC;IAC3C,IAAI,EAAE,0BAAc,CAAC,iBAAiB;IACtC,OAAO,EAAE,wBAAgB,CAAC,SAAS;CACtC,CAAC,CAAC;AAEI,MAAM,IAAI,GAAG,CAAC,KAAgB,EAAE,EAAE;IACrC,MAAM,EAAC,UAAU,GAAG,GAAG,EAAE,aAAa,GAAG,GAAG,EAAE,KAAK,GAAG,OAAO,EAAE,EAAE,EAAC,GAAG,KAAK,CAAC;IAC3E,MAAM,EAAC,IAAI,EAAE,WAAW,EAAE,iBAAiB,EAAC,GAAG,KAAK,CAAC,UAAU,CAAC,iCAAe,CAAC,CAAC;IACjF,MAAM,EAAC,MAAM,EAAC,GAAG,KAAK,CAAC,UAAU,CAAC,6BAAa,CAAC,CAAC;IACjD,MAAM,YAAY,GAAG,IAAA,wBAAe,EAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IACtD,MAAM,EAAC,WAAW,GAAG,oBAAkB,EAAC,GAAG,KAAK,CAAC,UAAU,CAAC,iCAAe,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAEtD,MAAM,EAAC,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAC,GAAG,IAAI,CAAC;IAElD,MAAM,WAAW,GAAG,IAAA,uBAAc,EAAC,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC,CAAC;IAErD,WAAW,CAAC,eAAe,GAAG,IAAA,iCAAwB,EAAC,gBAAgB,CAAC,CAAC;IAEzE,OAAO,CACH,wBAAC,iBAAO,IACJ,QAAQ,EAAE;YACN,CAAC,6BAAkB,CAAC,GAAG,CAAC,EAAE,UAAU;YACpC,CAAC,6BAAkB,CAAC,MAAM,CAAC,EAAE,aAAa;SAC7C,EACD,EAAE,EAAE,YAAY,CAAC,OAAO,aAEvB,WAAW,IAAI,CACZ,uBAAC,oCAAiB,IACd,KAAK,EAAE,CAAA,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,KAAK,KAAI,WAAW,CAAC,KAAK,EACpD,SAAS,EAAE,CAAC,CAAC,aAAa,CAAC,EAC3B,KAAK,EAAE,KAAK,GACd,CACL,EACA,KAAK,IAAI,CACN,uBAAC,6BAAU,IACP,OAAO,EAAE,KAAK,EACd,SAAS,EAAE;oBACP,eAAe,EAAE,IAAI;oBACrB,aAAa,EAAE,IAAI;iBACtB,GACH,CACL,EACA,IAAI,IAAI,CACL,uBAAC,mBAAQ,IACL,MAAM,EAAE,EAAE,EACV,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,WAAW,EACxB,wBAAwB,EAAE,wBAAwB,EAClD,EAAE,EAAE,YAAY,CAAC,QAAQ,GAC3B,CACL,IACK,CACb,CAAC;AACN,CAAC,CAAC;AAjDW,QAAA,IAAI,QAiDf","sourcesContent":["import * as React from 'react';\n\nimport {AnalyticsEventsProp, HeaderBreadcrumbs, YFMWrapper} from '@gravity-ui/page-constructor';\n\nimport {PostInfo} from '../../components/PostInfo/PostInfo';\nimport {Wrapper} from '../../components/Wrapper/Wrapper';\nimport {DefaultGoalIds} from '../../constants';\nimport {LocaleContext} from '../../contexts/LocaleContext';\nimport {SettingsContext} from '../../contexts/SettingsContext';\nimport {PostPageContext} from '../../contexts/PostPageContext';\nimport {MetaProps} from '../../models/blocks';\nimport {PaddingsDirections} from '../../models/paddings';\nimport {block} from '../../utils/cn';\nimport {\n getBreadcrumbs,\n getBlogPath as getDefaultBlogPath,\n getMergedAnalyticsEvents,\n getQaAttributes,\n prepareAnalyticsEvent,\n} from '../../utils/common';\nimport {AnalyticsCounter} from '../../counters/utils';\n\nimport './Meta.scss';\n\nconst b = block('meta');\n\nconst analyticsEventsContainer: Record<string, AnalyticsEventsProp> = {\n sharing: prepareAnalyticsEvent({name: DefaultGoalIds.shareBottom}),\n save: prepareAnalyticsEvent({name: DefaultGoalIds.saveBottom}),\n};\n\nconst breadcrumbsGoals = prepareAnalyticsEvent({\n name: DefaultGoalIds.breadcrumbsBottom,\n counter: AnalyticsCounter.CrossSite,\n});\n\nexport const Meta = (props: MetaProps) => {\n const {paddingTop = 'l', paddingBottom = 'l', theme = 'light', qa} = props;\n const {post, breadcrumbs: customBreadcrumbs} = React.useContext(PostPageContext);\n const {locale} = React.useContext(LocaleContext);\n const qaAttributes = getQaAttributes(qa, 'post-info');\n const {getBlogPath = getDefaultBlogPath} = React.useContext(SettingsContext);\n const blogPath = getBlogPath(locale.pathPrefix || '');\n\n const {title, id, date, readingTime, tags} = post;\n\n const breadcrumbs = getBreadcrumbs({tags, blogPath});\n\n breadcrumbs.analyticsEvents = getMergedAnalyticsEvents(breadcrumbsGoals);\n\n return (\n <Wrapper\n paddings={{\n [PaddingsDirections.top]: paddingTop,\n [PaddingsDirections.bottom]: paddingBottom,\n }}\n qa={qaAttributes.wrapper}\n >\n {breadcrumbs && (\n <HeaderBreadcrumbs\n items={customBreadcrumbs?.items || breadcrumbs.items}\n className={b('breadcrumbs')}\n theme={theme}\n />\n )}\n {title && (\n <YFMWrapper\n content={title}\n modifiers={{\n blogBreadcrumbs: true,\n resetPaddings: true,\n }}\n />\n )}\n {post && (\n <PostInfo\n postId={id}\n date={date}\n readingTime={readingTime}\n analyticsEventsContainer={analyticsEventsContainer}\n qa={qaAttributes.postInfo}\n />\n )}\n </Wrapper>\n );\n};\n"]}
@@ -41,10 +41,6 @@ unpredictable css rules order in build */
41
41
  border-radius: 8px;
42
42
  }
43
43
 
44
- .bc-feed-controls__popup_isMobile.bc-feed-controls__popup_isMobile {
45
- max-height: inherit;
46
- }
47
-
48
44
  .bc-feed-controls__popup_isMobile .bc-feed-controls__popup-filter {
49
45
  position: relative;
50
46
  border: none;
@@ -57,7 +53,7 @@ unpredictable css rules order in build */
57
53
  border-bottom: 2px solid var(--g-color-line-generic);
58
54
  border-bottom-right-radius: 0;
59
55
  border-bottom-left-radius: 0;
60
- width: 100vw;
56
+ width: 100%;
61
57
  height: 2px;
62
58
  transform: translateX(-50%);
63
59
  }
@@ -90,15 +90,16 @@ const Controls = ({ handleLoadData, tags = [], services = [], queryParams, }) =>
90
90
  };
91
91
  const tagsItems = React.useMemo(() => [{ value: 'empty', content: (0, i18n_1.i18n)(i18n_1.Keyset.AllTags) }, ...tags], [tags]);
92
92
  const servicesItems = React.useMemo(() => (servicesInitial ? [...servicesInitial.split(',')] : []), [servicesInitial]);
93
- return ((0, jsx_runtime_1.jsxs)("div", { className: b('header'), children: [(0, jsx_runtime_1.jsx)("h1", { className: b('header-item', { title: true }), children: (0, i18n_1.i18n)(i18n_1.Keyset.Title) }), (0, jsx_runtime_1.jsxs)("div", { className: b('header-item', { filters: true }), children: [(0, jsx_runtime_1.jsx)("div", { className: b('filter-item'), children: (0, jsx_runtime_1.jsx)(Search_1.Search, { className: b('search'), placeholder: (0, i18n_1.i18n)(i18n_1.Keyset.Search), initialValue: search && typeof search === 'string' ? search : '', onSubmit: handleSearch }) }), (0, jsx_runtime_1.jsx)("div", { className: b('filter-item'), children: (0, jsx_runtime_1.jsx)(uikit_1.Select, { className: b('select'), size: "xl", options: tagsItems, defaultValue: [tagInitial], onUpdate: handleTagSelect, placeholder: (0, i18n_1.i18n)(i18n_1.Keyset.AllTags), popupClassName: b('popup', { isMobile }), renderControl: (0, customRenders_1.renderSwitcher)({
94
- initial: [tagInitial],
95
- list: tagsItems,
96
- defaultLabel: (0, i18n_1.i18n)(i18n_1.Keyset.AllTags),
97
- }), disablePortal: true, virtualizationThreshold: VIRTUALIZATION_THRESHOLD, renderOption: customRenders_1.renderOption }) }), services.length > 0 ? ((0, jsx_runtime_1.jsx)("div", { className: b('filter-item'), children: (0, jsx_runtime_1.jsx)(uikit_1.Select, { className: b('select'), size: "xl", multiple: true, filterable: true, hasClear: true, disablePortal: true, options: services, defaultValue: servicesItems, popupClassName: b('popup', { isMobile }), onUpdate: handleServicesSelect, placeholder: (0, i18n_1.i18n)(i18n_1.Keyset.AllServices), renderControl: (0, customRenders_1.renderSwitcher)({
98
- initial: servicesItems,
99
- list: services,
100
- defaultLabel: (0, i18n_1.i18n)(i18n_1.Keyset.AllServices),
101
- }), virtualizationThreshold: VIRTUALIZATION_THRESHOLD, renderOption: customRenders_1.renderOption, renderFilter: customRenders_1.renderFilter }) })) : null, hasLikes ? ((0, jsx_runtime_1.jsx)("div", { className: b('filter-item', { 'width-auto': true }), children: (0, jsx_runtime_1.jsxs)(uikit_1.Button, { view: 'outlined', className: b('saved-only-button', { savedOnly }), size: "xl", onClick: handleSavedOnly, selected: savedOnly, children: [(0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: Save_1.Save, size: ICON_SIZE, className: b('icon', { savedOnly }) }), (0, i18n_1.i18n)(i18n_1.Keyset.ActionSavedOnly)] }) })) : null] })] }));
93
+ return ((0, jsx_runtime_1.jsx)(uikit_1.MobileProvider, { mobile: false, children: (0, jsx_runtime_1.jsxs)("div", { className: b('header'), children: [(0, jsx_runtime_1.jsx)("h1", { className: b('header-item', { title: true }), children: (0, i18n_1.i18n)(i18n_1.Keyset.Title) }), (0, jsx_runtime_1.jsxs)("div", { className: b('header-item', { filters: true }), children: [(0, jsx_runtime_1.jsx)("div", { className: b('filter-item'), children: (0, jsx_runtime_1.jsx)(Search_1.Search, { className: b('search'), placeholder: (0, i18n_1.i18n)(i18n_1.Keyset.Search), initialValue: search && typeof search === 'string' ? search : '', onSubmit: handleSearch }) }), (0, jsx_runtime_1.jsx)("div", { className: b('filter-item'), children: (0, jsx_runtime_1.jsx)(uikit_1.Select, { className: b('select'), size: "xl", options: tagsItems, defaultValue: [tagInitial], onUpdate: handleTagSelect, placeholder: (0, i18n_1.i18n)(i18n_1.Keyset.AllTags), popupClassName: b('popup', { isMobile }), renderControl: (0, customRenders_1.renderSwitcher)({
94
+ initial: [tagInitial],
95
+ list: tagsItems,
96
+ defaultLabel: (0, i18n_1.i18n)(i18n_1.Keyset.AllTags),
97
+ }), disablePortal: true, virtualizationThreshold: VIRTUALIZATION_THRESHOLD, renderOption: customRenders_1.renderOption }) }), services.length > 0 ? ((0, jsx_runtime_1.jsx)("div", { className: b('filter-item'), children: (0, jsx_runtime_1.jsx)(uikit_1.Select, { className: b('select'), size: "xl", multiple: true, filterable: true, hasClear: true, disablePortal: true, options: services, defaultValue: servicesItems, popupClassName: b('popup', { isMobile }), onUpdate: handleServicesSelect, placeholder: (0, i18n_1.i18n)(i18n_1.Keyset.AllServices), renderControl: (0, customRenders_1.renderSwitcher)({
98
+ initial: servicesItems,
99
+ list: services,
100
+ defaultLabel: (0, i18n_1.i18n)(i18n_1.Keyset.AllServices),
101
+ qa: 'service-select',
102
+ }), virtualizationThreshold: VIRTUALIZATION_THRESHOLD, renderOption: customRenders_1.renderOption, renderFilter: customRenders_1.renderFilter }) })) : null, hasLikes ? ((0, jsx_runtime_1.jsx)("div", { className: b('filter-item', { 'width-auto': true }), children: (0, jsx_runtime_1.jsxs)(uikit_1.Button, { view: 'outlined', className: b('saved-only-button', { savedOnly }), size: "xl", onClick: handleSavedOnly, selected: savedOnly, children: [(0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: Save_1.Save, size: ICON_SIZE, className: b('icon', { savedOnly }) }), (0, i18n_1.i18n)(i18n_1.Keyset.ActionSavedOnly)] }) })) : null] })] }) }));
102
103
  };
103
104
  exports.Controls = Controls;
104
105
  //# sourceMappingURL=Controls.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Controls.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/Controls/Controls.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {useAnalytics} from '@gravity-ui/page-constructor';\nimport {Button, Icon, Select} from '@gravity-ui/uikit';\n\nimport {DefaultGoalIds} from '../../../../constants';\nimport {LikesContext} from '../../../../contexts/LikesContext';\nimport {MobileContext} from '../../../../contexts/MobileContext';\nimport {AnalyticsCounter} from '../../../../counters/utils';\nimport {Keyset, i18n} from '../../../../i18n';\nimport {Save} from '../../../../icons/Save';\nimport {DefaultEventNames, FetchArgs, Query} from '../../../../models/common';\nimport {block} from '../../../../utils/cn';\nimport {Search} from '../../../Search/Search';\nimport {prepareAnalyticsEvent} from '../../../../utils/common';\n\nimport {renderFilter, renderOption, renderSwitcher} from './customRenders';\n\nimport './Controls.scss';\n\nconst b = block('feed-controls');\n\nexport type SelectItem = {\n content: string;\n value: string;\n icon?: React.ReactNode;\n};\n\nexport type ControlsProps = {\n handleLoadData: (props: FetchArgs) => void;\n tags?: SelectItem[];\n services?: SelectItem[];\n queryParams: Query;\n};\n\nconst ICON_SIZE = 16;\nconst DEFAULT_PAGE = 1;\nconst VIRTUALIZATION_THRESHOLD = 1000;\n\nexport const Controls = ({\n handleLoadData,\n tags = [],\n services = [],\n queryParams,\n}: ControlsProps) => {\n const {hasLikes} = React.useContext(LikesContext);\n const handleAnalyticsTag = useAnalytics(DefaultEventNames.Tag);\n const handleAnalyticsService = useAnalytics(DefaultEventNames.Service);\n const handleAnalyticsSaveOnly = useAnalytics(DefaultEventNames.SaveOnly);\n\n const {\n savedOnly: savedOnlyInitial,\n search: searchInitial,\n tags: tagInitial,\n services: servicesInitial,\n } = queryParams || {};\n\n const [savedOnly, setSavedOnly] = React.useState<boolean>(savedOnlyInitial === 'true');\n const [search, setSearch] = React.useState<string>(searchInitial as string);\n\n const isMobile = React.useContext(MobileContext);\n\n const handleSavedOnly = () => {\n handleAnalyticsSaveOnly();\n setSavedOnly(!savedOnly);\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {\n savedOnly: savedOnly ? '' : 'true',\n search: '',\n tags: '',\n page: DEFAULT_PAGE,\n services: '',\n },\n });\n };\n\n const handleSearch = (searchValue: string) => {\n setSearch(searchValue);\n\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {search: searchValue, page: DEFAULT_PAGE},\n });\n };\n\n const handleTagSelect = (selectedTags: string[]) => {\n const event = prepareAnalyticsEvent({\n name: DefaultGoalIds.tag,\n counter: AnalyticsCounter.CrossSite,\n });\n handleAnalyticsTag(event, {\n theme: selectedTags[0],\n });\n\n const isEmptyTag = selectedTags.some((tag) => tag === 'empty');\n\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {\n tags: isEmptyTag ? '' : selectedTags[0],\n page: DEFAULT_PAGE,\n },\n });\n };\n\n const handleServicesSelect = (selectedServices: string[]) => {\n const forAnalyticsServices = services.filter((service) => {\n return selectedServices.includes(service.value);\n });\n\n const servicesAsStringForAnalytics = forAnalyticsServices\n .map((service) => service.content)\n .join(',');\n\n const event = prepareAnalyticsEvent({\n name: DefaultGoalIds.service,\n counter: AnalyticsCounter.CrossSite,\n });\n handleAnalyticsService(event, {\n service: servicesAsStringForAnalytics,\n });\n\n const servicesAsString = selectedServices.join(',');\n\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {services: servicesAsString, page: DEFAULT_PAGE},\n });\n };\n\n const tagsItems = React.useMemo(\n () => [{value: 'empty', content: i18n(Keyset.AllTags)} as unknown as SelectItem, ...tags],\n [tags],\n );\n\n const servicesItems = React.useMemo(\n () => (servicesInitial ? [...(servicesInitial as string).split(',')] : []),\n [servicesInitial],\n );\n\n return (\n <div className={b('header')}>\n <h1 className={b('header-item', {title: true})}>{i18n(Keyset.Title)}</h1>\n <div className={b('header-item', {filters: true})}>\n <div className={b('filter-item')}>\n <Search\n className={b('search')}\n placeholder={i18n(Keyset.Search)}\n initialValue={search && typeof search === 'string' ? search : ''}\n onSubmit={handleSearch}\n />\n </div>\n <div className={b('filter-item')}>\n <Select\n className={b('select')}\n size=\"xl\"\n options={tagsItems}\n defaultValue={[tagInitial] as string[]}\n onUpdate={handleTagSelect}\n placeholder={i18n(Keyset.AllTags)}\n popupClassName={b('popup', {isMobile})}\n renderControl={renderSwitcher({\n initial: [tagInitial],\n list: tagsItems,\n defaultLabel: i18n(Keyset.AllTags),\n })}\n disablePortal\n virtualizationThreshold={VIRTUALIZATION_THRESHOLD}\n renderOption={renderOption}\n />\n </div>\n\n {services.length > 0 ? (\n <div className={b('filter-item')}>\n <Select\n className={b('select')}\n size=\"xl\"\n multiple\n filterable\n hasClear\n disablePortal\n options={services}\n defaultValue={servicesItems}\n popupClassName={b('popup', {isMobile})}\n onUpdate={handleServicesSelect}\n placeholder={i18n(Keyset.AllServices)}\n renderControl={renderSwitcher({\n initial: servicesItems,\n list: services,\n defaultLabel: i18n(Keyset.AllServices),\n })}\n virtualizationThreshold={VIRTUALIZATION_THRESHOLD}\n renderOption={renderOption}\n renderFilter={renderFilter}\n />\n </div>\n ) : null}\n {hasLikes ? (\n <div className={b('filter-item', {'width-auto': true})}>\n <Button\n view={'outlined'}\n className={b('saved-only-button', {savedOnly})}\n size=\"xl\"\n onClick={handleSavedOnly}\n selected={savedOnly}\n >\n <Icon data={Save} size={ICON_SIZE} className={b('icon', {savedOnly})} />\n {i18n(Keyset.ActionSavedOnly)}\n </Button>\n </div>\n ) : null}\n </div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"Controls.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/Controls/Controls.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {useAnalytics} from '@gravity-ui/page-constructor';\nimport {Button, Icon, MobileProvider, Select} from '@gravity-ui/uikit';\n\nimport {DefaultGoalIds} from '../../../../constants';\nimport {LikesContext} from '../../../../contexts/LikesContext';\nimport {MobileContext} from '../../../../contexts/MobileContext';\nimport {AnalyticsCounter} from '../../../../counters/utils';\nimport {Keyset, i18n} from '../../../../i18n';\nimport {Save} from '../../../../icons/Save';\nimport {DefaultEventNames, FetchArgs, Query} from '../../../../models/common';\nimport {block} from '../../../../utils/cn';\nimport {Search} from '../../../Search/Search';\nimport {prepareAnalyticsEvent} from '../../../../utils/common';\n\nimport {renderFilter, renderOption, renderSwitcher} from './customRenders';\n\nimport './Controls.scss';\n\nconst b = block('feed-controls');\n\nexport type SelectItem = {\n content: string;\n value: string;\n icon?: React.ReactNode;\n};\n\nexport type ControlsProps = {\n handleLoadData: (props: FetchArgs) => void;\n tags?: SelectItem[];\n services?: SelectItem[];\n queryParams: Query;\n};\n\nconst ICON_SIZE = 16;\nconst DEFAULT_PAGE = 1;\nconst VIRTUALIZATION_THRESHOLD = 1000;\n\nexport const Controls = ({\n handleLoadData,\n tags = [],\n services = [],\n queryParams,\n}: ControlsProps) => {\n const {hasLikes} = React.useContext(LikesContext);\n const handleAnalyticsTag = useAnalytics(DefaultEventNames.Tag);\n const handleAnalyticsService = useAnalytics(DefaultEventNames.Service);\n const handleAnalyticsSaveOnly = useAnalytics(DefaultEventNames.SaveOnly);\n\n const {\n savedOnly: savedOnlyInitial,\n search: searchInitial,\n tags: tagInitial,\n services: servicesInitial,\n } = queryParams || {};\n\n const [savedOnly, setSavedOnly] = React.useState<boolean>(savedOnlyInitial === 'true');\n const [search, setSearch] = React.useState<string>(searchInitial as string);\n\n const isMobile = React.useContext(MobileContext);\n\n const handleSavedOnly = () => {\n handleAnalyticsSaveOnly();\n setSavedOnly(!savedOnly);\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {\n savedOnly: savedOnly ? '' : 'true',\n search: '',\n tags: '',\n page: DEFAULT_PAGE,\n services: '',\n },\n });\n };\n\n const handleSearch = (searchValue: string) => {\n setSearch(searchValue);\n\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {search: searchValue, page: DEFAULT_PAGE},\n });\n };\n\n const handleTagSelect = (selectedTags: string[]) => {\n const event = prepareAnalyticsEvent({\n name: DefaultGoalIds.tag,\n counter: AnalyticsCounter.CrossSite,\n });\n handleAnalyticsTag(event, {\n theme: selectedTags[0],\n });\n\n const isEmptyTag = selectedTags.some((tag) => tag === 'empty');\n\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {\n tags: isEmptyTag ? '' : selectedTags[0],\n page: DEFAULT_PAGE,\n },\n });\n };\n\n const handleServicesSelect = (selectedServices: string[]) => {\n const forAnalyticsServices = services.filter((service) => {\n return selectedServices.includes(service.value);\n });\n\n const servicesAsStringForAnalytics = forAnalyticsServices\n .map((service) => service.content)\n .join(',');\n\n const event = prepareAnalyticsEvent({\n name: DefaultGoalIds.service,\n counter: AnalyticsCounter.CrossSite,\n });\n handleAnalyticsService(event, {\n service: servicesAsStringForAnalytics,\n });\n\n const servicesAsString = selectedServices.join(',');\n\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {services: servicesAsString, page: DEFAULT_PAGE},\n });\n };\n\n const tagsItems = React.useMemo(\n () => [{value: 'empty', content: i18n(Keyset.AllTags)} as unknown as SelectItem, ...tags],\n [tags],\n );\n\n const servicesItems = React.useMemo(\n () => (servicesInitial ? [...(servicesInitial as string).split(',')] : []),\n [servicesInitial],\n );\n\n return (\n <MobileProvider mobile={false}>\n <div className={b('header')}>\n <h1 className={b('header-item', {title: true})}>{i18n(Keyset.Title)}</h1>\n <div className={b('header-item', {filters: true})}>\n <div className={b('filter-item')}>\n <Search\n className={b('search')}\n placeholder={i18n(Keyset.Search)}\n initialValue={search && typeof search === 'string' ? search : ''}\n onSubmit={handleSearch}\n />\n </div>\n <div className={b('filter-item')}>\n <Select\n className={b('select')}\n size=\"xl\"\n options={tagsItems}\n defaultValue={[tagInitial] as string[]}\n onUpdate={handleTagSelect}\n placeholder={i18n(Keyset.AllTags)}\n popupClassName={b('popup', {isMobile})}\n renderControl={renderSwitcher({\n initial: [tagInitial],\n list: tagsItems,\n defaultLabel: i18n(Keyset.AllTags),\n })}\n disablePortal\n virtualizationThreshold={VIRTUALIZATION_THRESHOLD}\n renderOption={renderOption}\n />\n </div>\n\n {services.length > 0 ? (\n <div className={b('filter-item')}>\n <Select\n className={b('select')}\n size=\"xl\"\n multiple\n filterable\n hasClear\n disablePortal\n options={services}\n defaultValue={servicesItems}\n popupClassName={b('popup', {isMobile})}\n onUpdate={handleServicesSelect}\n placeholder={i18n(Keyset.AllServices)}\n renderControl={renderSwitcher({\n initial: servicesItems,\n list: services,\n defaultLabel: i18n(Keyset.AllServices),\n qa: 'service-select',\n })}\n virtualizationThreshold={VIRTUALIZATION_THRESHOLD}\n renderOption={renderOption}\n renderFilter={renderFilter}\n />\n </div>\n ) : null}\n {hasLikes ? (\n <div className={b('filter-item', {'width-auto': true})}>\n <Button\n view={'outlined'}\n className={b('saved-only-button', {savedOnly})}\n size=\"xl\"\n onClick={handleSavedOnly}\n selected={savedOnly}\n >\n <Icon\n data={Save}\n size={ICON_SIZE}\n className={b('icon', {savedOnly})}\n />\n {i18n(Keyset.ActionSavedOnly)}\n </Button>\n </div>\n ) : null}\n </div>\n </div>\n </MobileProvider>\n );\n};\n"]}
@@ -4,6 +4,7 @@ type RenderSwitcherType = ({ initial, list, defaultLabel, }: {
4
4
  initial: CustomSwitcherProps['initial'];
5
5
  list: CustomSwitcherProps['list'];
6
6
  defaultLabel: string;
7
+ qa?: string;
7
8
  }) => SelectProps['renderControl'];
8
9
  type RenderFilterType = SelectProps['renderFilter'];
9
10
  export declare const renderSwitcher: RenderSwitcherType;
@@ -9,14 +9,14 @@ const cn_1 = require("../../../../utils/cn.js");
9
9
  const CustomSelectOption_1 = require("../CustomSelectOption/CustomSelectOption.js");
10
10
  const CustomSwitcher_1 = require("../CustomSwitcher/CustomSwitcher.js");
11
11
  const b = (0, cn_1.block)('feed-controls');
12
- const renderSwitcher = ({ initial, list, defaultLabel }) =>
12
+ const renderSwitcher = ({ initial, list, defaultLabel, qa }) =>
13
13
  // eslint-disable-next-line react/display-name
14
14
  (_a) => {
15
15
  var { ref, renderClear } = _a, _b = _a.triggerProps, { id, disabled, type, onClick, onKeyDown } = _b, a11yProps = tslib_1.__rest(_b, ["id", "disabled", "type", "onClick", "onKeyDown"]);
16
16
  return ((0, jsx_runtime_1.jsx)(CustomSwitcher_1.CustomSwitcher, { id: id, disabled: disabled, type: type, initial: initial, defaultLabel: defaultLabel, list: list, controlRef: ref, triggerProps: {
17
17
  onClick,
18
18
  onKeyDown,
19
- }, renderClear: renderClear, a11yProps: a11yProps }));
19
+ }, renderClear: renderClear, a11yProps: a11yProps, qa: qa }));
20
20
  };
21
21
  exports.renderSwitcher = renderSwitcher;
22
22
  const renderFilter = (_a) => {
@@ -1 +1 @@
1
- {"version":3,"file":"customRenders.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/Controls/customRenders.tsx"],"names":[],"mappings":";;;;;AAAA,6CAAuE;AAEvE,oDAA8C;AAC9C,gDAA2C;AAC3C,oFAGkD;AAClD,wEAAqF;AAIrF,MAAM,CAAC,GAAG,IAAA,UAAK,EAAC,eAAe,CAAC,CAAC;AAc1B,MAAM,cAAc,GACvB,CAAC,EAAC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAC,EAAE,EAAE;AAClC,8CAA8C;AAC9C,CAAC,EAAwF,EAAE,EAAE;QAA5F,EAAC,GAAG,EAAE,WAAW,OAAuE,EAArE,oBAAoE,EAApE,EAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,OAAe,EAAV,SAAS,sBAArD,kDAAsD,CAAD;IAAO,OAAA,CAC1F,uBAAC,+BAAc,IACX,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,GAAG,EACf,YAAY,EAAE;YACV,OAAO;YACP,SAAS;SACZ,EACD,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,GACtB,CACL,CAAA;CAAA,CAAC;AAnBO,QAAA,cAAc,kBAmBrB;AAEC,MAAM,YAAY,GAAqB,CAAC,EAI9C,EAAE,EAAE;QAJ0C,EAC3C,GAAG,EACH,QAAQ,OAEX,EADG,kBAAqF,EAArF,EAAa,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,OAAe,EAAV,SAAS,sBAAxE,yDAAyE,CAAD;IAClF,OAAA,CACF,uBAAC,iBAAS,IACN,KAAK,EAAE,KAAK,EACZ,IAAI,EAAC,OAAO,EACZ,WAAW,EAAE,IAAA,WAAI,EAAC,aAAM,CAAC,MAAM,CAAC,EAChC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,CAAC,CAAC,cAAc,CAAC,EAC5B,UAAU,EAAE,GAAG,EACf,YAAY,kBAAG,IAAI,EAAE,CAAC,IAAK,SAAS,IACtC,CACL,CAAA;CAAA,CAAC;AAfW,QAAA,YAAY,gBAevB;AAEK,MAAM,YAAY,GAAG,CAAC,MAAoB,EAAE,EAAE,CAAC,CAClD,uBAAC,uCAAkB,IAAC,IAAI,EAAE,MAAyC,GAAI,CAC1E,CAAC;AAFW,QAAA,YAAY,gBAEvB","sourcesContent":["import {SelectOption, SelectProps, TextInput} from '@gravity-ui/uikit';\n\nimport {Keyset, i18n} from '../../../../i18n';\nimport {block} from '../../../../utils/cn';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport {CustomSwitcher, CustomSwitcherProps} from '../CustomSwitcher/CustomSwitcher';\n\nimport './Controls.scss';\n\nconst b = block('feed-controls');\n\ntype RenderSwitcherType = ({\n initial,\n list,\n defaultLabel,\n}: {\n initial: CustomSwitcherProps['initial'];\n list: CustomSwitcherProps['list'];\n defaultLabel: string;\n}) => SelectProps['renderControl'];\n\ntype RenderFilterType = SelectProps['renderFilter'];\n\nexport const renderSwitcher: RenderSwitcherType =\n ({initial, list, defaultLabel}) =>\n // eslint-disable-next-line react/display-name\n ({ref, renderClear, triggerProps: {id, disabled, type, onClick, onKeyDown, ...a11yProps}}) => (\n <CustomSwitcher\n id={id}\n disabled={disabled}\n type={type}\n initial={initial}\n defaultLabel={defaultLabel}\n list={list}\n controlRef={ref}\n triggerProps={{\n onClick,\n onKeyDown,\n }}\n renderClear={renderClear}\n a11yProps={a11yProps}\n />\n );\n\nexport const renderFilter: RenderFilterType = ({\n ref,\n onChange,\n inputProps: {value, onKeyDown, onChange: _, size: __, placeholder: ___, ...a11yProps},\n}) => (\n <TextInput\n value={value}\n view=\"clear\"\n placeholder={i18n(Keyset.Search)}\n onUpdate={onChange}\n onKeyDown={onKeyDown}\n className={b('popup-filter')}\n controlRef={ref}\n controlProps={{size: 1, ...a11yProps}}\n />\n);\n\nexport const renderOption = (option: SelectOption) => (\n <CustomSelectOption data={option as CustomSelectOptionProps['data']} />\n);\n"]}
1
+ {"version":3,"file":"customRenders.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/Controls/customRenders.tsx"],"names":[],"mappings":";;;;;AAAA,6CAAuE;AAEvE,oDAA8C;AAC9C,gDAA2C;AAC3C,oFAGkD;AAClD,wEAAqF;AAIrF,MAAM,CAAC,GAAG,IAAA,UAAK,EAAC,eAAe,CAAC,CAAC;AAe1B,MAAM,cAAc,GACvB,CAAC,EAAC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAC,EAAE,EAAE;AACtC,8CAA8C;AAC9C,CAAC,EAAwF,EAAE,EAAE;QAA5F,EAAC,GAAG,EAAE,WAAW,OAAuE,EAArE,oBAAoE,EAApE,EAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,OAAe,EAAV,SAAS,sBAArD,kDAAsD,CAAD;IAAO,OAAA,CAC1F,uBAAC,+BAAc,IACX,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,GAAG,EACf,YAAY,EAAE;YACV,OAAO;YACP,SAAS;SACZ,EACD,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,EAAE,GACR,CACL,CAAA;CAAA,CAAC;AApBO,QAAA,cAAc,kBAoBrB;AAEC,MAAM,YAAY,GAAqB,CAAC,EAI9C,EAAE,EAAE;QAJ0C,EAC3C,GAAG,EACH,QAAQ,OAEX,EADG,kBAAqF,EAArF,EAAa,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,OAAe,EAAV,SAAS,sBAAxE,yDAAyE,CAAD;IAClF,OAAA,CACF,uBAAC,iBAAS,IACN,KAAK,EAAE,KAAK,EACZ,IAAI,EAAC,OAAO,EACZ,WAAW,EAAE,IAAA,WAAI,EAAC,aAAM,CAAC,MAAM,CAAC,EAChC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,CAAC,CAAC,cAAc,CAAC,EAC5B,UAAU,EAAE,GAAG,EACf,YAAY,kBAAG,IAAI,EAAE,CAAC,IAAK,SAAS,IACtC,CACL,CAAA;CAAA,CAAC;AAfW,QAAA,YAAY,gBAevB;AAEK,MAAM,YAAY,GAAG,CAAC,MAAoB,EAAE,EAAE,CAAC,CAClD,uBAAC,uCAAkB,IAAC,IAAI,EAAE,MAAyC,GAAI,CAC1E,CAAC;AAFW,QAAA,YAAY,gBAEvB","sourcesContent":["import {SelectOption, SelectProps, TextInput} from '@gravity-ui/uikit';\n\nimport {Keyset, i18n} from '../../../../i18n';\nimport {block} from '../../../../utils/cn';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport {CustomSwitcher, CustomSwitcherProps} from '../CustomSwitcher/CustomSwitcher';\n\nimport './Controls.scss';\n\nconst b = block('feed-controls');\n\ntype RenderSwitcherType = ({\n initial,\n list,\n defaultLabel,\n}: {\n initial: CustomSwitcherProps['initial'];\n list: CustomSwitcherProps['list'];\n defaultLabel: string;\n qa?: string;\n}) => SelectProps['renderControl'];\n\ntype RenderFilterType = SelectProps['renderFilter'];\n\nexport const renderSwitcher: RenderSwitcherType =\n ({initial, list, defaultLabel, qa}) =>\n // eslint-disable-next-line react/display-name\n ({ref, renderClear, triggerProps: {id, disabled, type, onClick, onKeyDown, ...a11yProps}}) => (\n <CustomSwitcher\n id={id}\n disabled={disabled}\n type={type}\n initial={initial}\n defaultLabel={defaultLabel}\n list={list}\n controlRef={ref}\n triggerProps={{\n onClick,\n onKeyDown,\n }}\n renderClear={renderClear}\n a11yProps={a11yProps}\n qa={qa}\n />\n );\n\nexport const renderFilter: RenderFilterType = ({\n ref,\n onChange,\n inputProps: {value, onKeyDown, onChange: _, size: __, placeholder: ___, ...a11yProps},\n}) => (\n <TextInput\n value={value}\n view=\"clear\"\n placeholder={i18n(Keyset.Search)}\n onUpdate={onChange}\n onKeyDown={onKeyDown}\n className={b('popup-filter')}\n controlRef={ref}\n controlProps={{size: 1, ...a11yProps}}\n />\n);\n\nexport const renderOption = (option: SelectOption) => (\n <CustomSelectOption data={option as CustomSelectOptionProps['data']} />\n);\n"]}
@@ -12,6 +12,7 @@ export type CustomSwitcherProps = {
12
12
  list: SelectItem[];
13
13
  controlRef: RenderControlParameters['ref'];
14
14
  a11yProps: RenderControlA11yProps;
15
+ qa?: string;
15
16
  } & Omit<RenderControlParameters, 'ref'> & Pick<TriggerProps, 'id' | 'disabled' | 'type'>;
16
- export declare const CustomSwitcher: ({ id, disabled, type, initial, defaultLabel, list, triggerProps, controlRef, renderClear, a11yProps, }: CustomSwitcherProps) => import("react/jsx-runtime").JSX.Element;
17
+ export declare const CustomSwitcher: ({ id, disabled, type, initial, defaultLabel, list, triggerProps, controlRef, renderClear, a11yProps, qa, }: CustomSwitcherProps) => import("react/jsx-runtime").JSX.Element;
17
18
  export {};
@@ -11,7 +11,7 @@ const cn_1 = require("../../../../utils/cn.js");
11
11
  const b = (0, cn_1.block)('feed-custom-switcher');
12
12
  const ICON_SIZE = 12;
13
13
  const CLEAR_ICON_SIZE = 11;
14
- const CustomSwitcher = ({ id, disabled, type, initial, defaultLabel, list, triggerProps, controlRef, renderClear, a11yProps, }) => {
14
+ const CustomSwitcher = ({ id, disabled, type, initial, defaultLabel, list, triggerProps, controlRef, renderClear, a11yProps, qa, }) => {
15
15
  const itemsNames = React.useMemo(() => {
16
16
  const items = list
17
17
  .filter((item) => initial.includes(item.value))
@@ -20,7 +20,7 @@ const CustomSwitcher = ({ id, disabled, type, initial, defaultLabel, list, trigg
20
20
  }, [defaultLabel, initial, list]);
21
21
  const hasCounter = itemsNames.length > 1;
22
22
  const contentElementId = (0, uikit_1.useUniqId)();
23
- return ((0, jsx_runtime_1.jsxs)("div", { className: b('custom-switcher'), ref: controlRef, children: [(0, jsx_runtime_1.jsx)("button", Object.assign({ id: id, disabled: disabled, type: type, onClick: triggerProps === null || triggerProps === void 0 ? void 0 : triggerProps.onClick, className: b('custom-switcher-element', { overlay: true }), onKeyDown: triggerProps === null || triggerProps === void 0 ? void 0 : triggerProps.onKeyDown }, a11yProps, { "aria-labelledby": contentElementId })), (0, jsx_runtime_1.jsx)("div", { id: contentElementId, className: b('custom-switcher-element', { content: true }), "aria-hidden": true, children: itemsNames === null || itemsNames === void 0 ? void 0 : itemsNames.join(', ') }), renderClear &&
23
+ return ((0, jsx_runtime_1.jsxs)("div", { className: b('custom-switcher'), ref: controlRef, children: [(0, jsx_runtime_1.jsx)("button", Object.assign({ "data-qa": qa, id: id, disabled: disabled, type: type, onClick: triggerProps === null || triggerProps === void 0 ? void 0 : triggerProps.onClick, className: b('custom-switcher-element', { overlay: true }), onKeyDown: triggerProps === null || triggerProps === void 0 ? void 0 : triggerProps.onKeyDown }, a11yProps, { "aria-labelledby": contentElementId })), (0, jsx_runtime_1.jsx)("div", { id: contentElementId, className: b('custom-switcher-element', { content: true }), "aria-hidden": true, children: itemsNames === null || itemsNames === void 0 ? void 0 : itemsNames.join(', ') }), renderClear &&
24
24
  renderClear({
25
25
  renderIcon: () => ((0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: Close_1.Close, size: CLEAR_ICON_SIZE, className: b('clear') })),
26
26
  }), hasCounter && ((0, jsx_runtime_1.jsx)("div", { className: b('custom-switcher-element', { counter: true }), children: itemsNames.length })), (0, jsx_runtime_1.jsx)("div", { className: b('custom-switcher-element', { arrow: true }), children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: DropdownArrow_1.DropdownArrow, size: ICON_SIZE, className: b('switcher-arrow') }) })] }));
@@ -1 +1 @@
1
- {"version":3,"file":"CustomSwitcher.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/CustomSwitcher/CustomSwitcher.tsx"],"names":[],"mappings":";;;;;AAAA,qDAA+B;AAE/B,6CAA+D;AAE/D,sEAA8D;AAC9D,sDAA8C;AAC9C,gDAA2C;AAK3C,MAAM,CAAC,GAAG,IAAA,UAAK,EAAC,sBAAsB,CAAC,CAAC;AAoBxC,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,eAAe,GAAG,EAAE,CAAC;AAEpB,MAAM,cAAc,GAAG,CAAC,EAC3B,EAAE,EACF,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,GACS,EAAE,EAAE;IACtB,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAClC,MAAM,KAAK,GAAG,IAAI;aACb,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC9C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEjC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IAEzC,MAAM,gBAAgB,GAAG,IAAA,iBAAS,GAAE,CAAC;IAErC,OAAO,CACH,iCAAK,SAAS,EAAE,CAAC,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,UAA6C,aAEpF,iDACI,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,OAAO,EAC9B,SAAS,EAAE,CAAC,CAAC,yBAAyB,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,EACxD,SAAS,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,SAAS,IAC9B,SAAS,uBACI,gBAAgB,IACnC,EACF,gCACI,EAAE,EAAE,gBAAgB,EACpB,SAAS,EAAE,CAAC,CAAC,yBAAyB,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,iCAGvD,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,CAAC,IAAI,CAAC,GACrB,EACL,WAAW;gBACR,WAAW,CAAC;oBACR,UAAU,EAAE,GAAG,EAAE,CAAC,CACd,uBAAC,YAAI,IAAC,IAAI,EAAE,aAAK,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,GAAI,CACtE;iBACJ,CAAC,EACL,UAAU,IAAI,CACX,gCAAK,SAAS,EAAE,CAAC,CAAC,yBAAyB,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,YACxD,UAAU,CAAC,MAAM,GAChB,CACT,EACD,gCAAK,SAAS,EAAE,CAAC,CAAC,yBAAyB,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,YACvD,uBAAC,YAAI,IAAC,IAAI,EAAE,6BAAa,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAI,GAC5E,IACJ,CACT,CAAC;AACN,CAAC,CAAC;AA3DW,QAAA,cAAc,kBA2DzB","sourcesContent":["import * as React from 'react';\n\nimport {Icon, SelectProps, useUniqId} from '@gravity-ui/uikit';\n\nimport {DropdownArrow} from '../../../../icons/DropdownArrow';\nimport {Close} from '../../../../icons/Close';\nimport {block} from '../../../../utils/cn';\nimport {SelectItem} from '../Controls/Controls';\n\nimport './CustomSwitcher.scss';\n\nconst b = block('feed-custom-switcher');\n\ntype RenderControlParameters = Partial<Parameters<Required<SelectProps>['renderControl']>[0]>;\ntype TriggerProps = Required<RenderControlParameters>['triggerProps'];\n\ntype A11yKeys = {\n [K in keyof TriggerProps]-?: K extends `aria-${string}` | 'role' ? K : never;\n}[keyof TriggerProps];\n\ntype RenderControlA11yProps = Pick<TriggerProps, A11yKeys>;\n\nexport type CustomSwitcherProps = {\n initial: (string | number | null)[];\n defaultLabel: string;\n list: SelectItem[];\n controlRef: RenderControlParameters['ref'];\n a11yProps: RenderControlA11yProps;\n} & Omit<RenderControlParameters, 'ref'> &\n Pick<TriggerProps, 'id' | 'disabled' | 'type'>;\n\nconst ICON_SIZE = 12;\nconst CLEAR_ICON_SIZE = 11;\n\nexport const CustomSwitcher = ({\n id,\n disabled,\n type,\n initial,\n defaultLabel,\n list,\n triggerProps,\n controlRef,\n renderClear,\n a11yProps,\n}: CustomSwitcherProps) => {\n const itemsNames = React.useMemo(() => {\n const items = list\n .filter((item) => initial.includes(item.value))\n .map((item) => item.content);\n\n return items.length ? items : [defaultLabel];\n }, [defaultLabel, initial, list]);\n const hasCounter = itemsNames.length > 1;\n\n const contentElementId = useUniqId();\n\n return (\n <div className={b('custom-switcher')} ref={controlRef as React.LegacyRef<HTMLDivElement>}>\n {/* eslint-disable-next-line jsx-a11y/role-supports-aria-props */}\n <button\n id={id}\n disabled={disabled}\n type={type}\n onClick={triggerProps?.onClick}\n className={b('custom-switcher-element', {overlay: true})}\n onKeyDown={triggerProps?.onKeyDown}\n {...a11yProps}\n aria-labelledby={contentElementId}\n />\n <div\n id={contentElementId}\n className={b('custom-switcher-element', {content: true})}\n aria-hidden\n >\n {itemsNames?.join(', ')}\n </div>\n {renderClear &&\n renderClear({\n renderIcon: () => (\n <Icon data={Close} size={CLEAR_ICON_SIZE} className={b('clear')} />\n ),\n })}\n {hasCounter && (\n <div className={b('custom-switcher-element', {counter: true})}>\n {itemsNames.length}\n </div>\n )}\n <div className={b('custom-switcher-element', {arrow: true})}>\n <Icon data={DropdownArrow} size={ICON_SIZE} className={b('switcher-arrow')} />\n </div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"CustomSwitcher.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/CustomSwitcher/CustomSwitcher.tsx"],"names":[],"mappings":";;;;;AAAA,qDAA+B;AAE/B,6CAA+D;AAE/D,sEAA8D;AAC9D,sDAA8C;AAC9C,gDAA2C;AAK3C,MAAM,CAAC,GAAG,IAAA,UAAK,EAAC,sBAAsB,CAAC,CAAC;AAqBxC,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,eAAe,GAAG,EAAE,CAAC;AAEpB,MAAM,cAAc,GAAG,CAAC,EAC3B,EAAE,EACF,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,EACT,EAAE,GACgB,EAAE,EAAE;IACtB,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAClC,MAAM,KAAK,GAAG,IAAI;aACb,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC9C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEjC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IAEzC,MAAM,gBAAgB,GAAG,IAAA,iBAAS,GAAE,CAAC;IAErC,OAAO,CACH,iCAAK,SAAS,EAAE,CAAC,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,UAA6C,aAEpF,4DACa,EAAE,EACX,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,OAAO,EAC9B,SAAS,EAAE,CAAC,CAAC,yBAAyB,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,EACxD,SAAS,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,SAAS,IAC9B,SAAS,uBACI,gBAAgB,IACnC,EACF,gCACI,EAAE,EAAE,gBAAgB,EACpB,SAAS,EAAE,CAAC,CAAC,yBAAyB,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,iCAGvD,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,CAAC,IAAI,CAAC,GACrB,EACL,WAAW;gBACR,WAAW,CAAC;oBACR,UAAU,EAAE,GAAG,EAAE,CAAC,CACd,uBAAC,YAAI,IAAC,IAAI,EAAE,aAAK,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,GAAI,CACtE;iBACJ,CAAC,EACL,UAAU,IAAI,CACX,gCAAK,SAAS,EAAE,CAAC,CAAC,yBAAyB,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,YACxD,UAAU,CAAC,MAAM,GAChB,CACT,EACD,gCAAK,SAAS,EAAE,CAAC,CAAC,yBAAyB,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,YACvD,uBAAC,YAAI,IAAC,IAAI,EAAE,6BAAa,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAI,GAC5E,IACJ,CACT,CAAC;AACN,CAAC,CAAC;AA7DW,QAAA,cAAc,kBA6DzB","sourcesContent":["import * as React from 'react';\n\nimport {Icon, SelectProps, useUniqId} from '@gravity-ui/uikit';\n\nimport {DropdownArrow} from '../../../../icons/DropdownArrow';\nimport {Close} from '../../../../icons/Close';\nimport {block} from '../../../../utils/cn';\nimport {SelectItem} from '../Controls/Controls';\n\nimport './CustomSwitcher.scss';\n\nconst b = block('feed-custom-switcher');\n\ntype RenderControlParameters = Partial<Parameters<Required<SelectProps>['renderControl']>[0]>;\ntype TriggerProps = Required<RenderControlParameters>['triggerProps'];\n\ntype A11yKeys = {\n [K in keyof TriggerProps]-?: K extends `aria-${string}` | 'role' ? K : never;\n}[keyof TriggerProps];\n\ntype RenderControlA11yProps = Pick<TriggerProps, A11yKeys>;\n\nexport type CustomSwitcherProps = {\n initial: (string | number | null)[];\n defaultLabel: string;\n list: SelectItem[];\n controlRef: RenderControlParameters['ref'];\n a11yProps: RenderControlA11yProps;\n qa?: string;\n} & Omit<RenderControlParameters, 'ref'> &\n Pick<TriggerProps, 'id' | 'disabled' | 'type'>;\n\nconst ICON_SIZE = 12;\nconst CLEAR_ICON_SIZE = 11;\n\nexport const CustomSwitcher = ({\n id,\n disabled,\n type,\n initial,\n defaultLabel,\n list,\n triggerProps,\n controlRef,\n renderClear,\n a11yProps,\n qa,\n}: CustomSwitcherProps) => {\n const itemsNames = React.useMemo(() => {\n const items = list\n .filter((item) => initial.includes(item.value))\n .map((item) => item.content);\n\n return items.length ? items : [defaultLabel];\n }, [defaultLabel, initial, list]);\n const hasCounter = itemsNames.length > 1;\n\n const contentElementId = useUniqId();\n\n return (\n <div className={b('custom-switcher')} ref={controlRef as React.LegacyRef<HTMLDivElement>}>\n {/* eslint-disable-next-line jsx-a11y/role-supports-aria-props */}\n <button\n data-qa={qa}\n id={id}\n disabled={disabled}\n type={type}\n onClick={triggerProps?.onClick}\n className={b('custom-switcher-element', {overlay: true})}\n onKeyDown={triggerProps?.onKeyDown}\n {...a11yProps}\n aria-labelledby={contentElementId}\n />\n <div\n id={contentElementId}\n className={b('custom-switcher-element', {content: true})}\n aria-hidden\n >\n {itemsNames?.join(', ')}\n </div>\n {renderClear &&\n renderClear({\n renderIcon: () => (\n <Icon data={Close} size={CLEAR_ICON_SIZE} className={b('clear')} />\n ),\n })}\n {hasCounter && (\n <div className={b('custom-switcher-element', {counter: true})}>\n {itemsNames.length}\n </div>\n )}\n <div className={b('custom-switcher-element', {arrow: true})}>\n <Icon data={DropdownArrow} size={ICON_SIZE} className={b('switcher-arrow')} />\n </div>\n </div>\n );\n};\n"]}
@@ -38,7 +38,7 @@ type GetBreadcrumbsProps = {
38
38
  blogPath: string;
39
39
  };
40
40
  export declare const getBlogPath: (pathPrefix: string) => string;
41
- export declare const getBreadcrumbs: ({ tags, blogPath }: GetBreadcrumbsProps) => HeaderBreadCrumbsProps;
41
+ export declare function getBreadcrumbs({ tags, blogPath }: GetBreadcrumbsProps): HeaderBreadCrumbsProps;
42
42
  export declare const getMergedAnalyticsEvents: (analyticEvents: AnalyticsEventsProp, existringEvents?: AnalyticsEventsProp) => {
43
43
  name: string;
44
44
  type?: string;
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.prepareAnalyticsEvent = exports.getQaAttributes = exports.scrollOnPageChange = exports.getFeedQueryParams = exports.getMergedAnalyticsEvents = exports.getBreadcrumbs = exports.getBlogPath = exports.updateContentSizes = exports.postLikeStatus = exports.getTags = exports.scrollToHash = exports.getPageSearchParams = void 0;
3
+ exports.prepareAnalyticsEvent = exports.getQaAttributes = exports.scrollOnPageChange = exports.getFeedQueryParams = exports.getMergedAnalyticsEvents = exports.getBlogPath = exports.updateContentSizes = exports.postLikeStatus = exports.getTags = exports.scrollToHash = exports.getPageSearchParams = void 0;
4
4
  exports.getAbsolutePath = getAbsolutePath;
5
+ exports.getBreadcrumbs = getBreadcrumbs;
5
6
  const tslib_1 = require("tslib");
6
7
  const url_1 = require("url");
7
8
  const camelCase_1 = tslib_1.__importDefault(require("lodash/camelCase"));
@@ -60,7 +61,7 @@ const getBlogPath = (pathPrefix) => {
60
61
  return `${prefix}/blog`;
61
62
  };
62
63
  exports.getBlogPath = getBlogPath;
63
- const getBreadcrumbs = ({ tags, blogPath }) => {
64
+ function getBreadcrumbs({ tags, blogPath }) {
64
65
  const breadcrumbs = {
65
66
  items: [{ text: (0, i18n_1.i18n)(i18n_1.Keyset.TitleBreadcrumbs), url: blogPath }],
66
67
  theme: 'light',
@@ -72,8 +73,7 @@ const getBreadcrumbs = ({ tags, blogPath }) => {
72
73
  breadcrumbs.items.push({ text: tag.name, url: tag.url });
73
74
  }
74
75
  return breadcrumbs;
75
- };
76
- exports.getBreadcrumbs = getBreadcrumbs;
76
+ }
77
77
  const getArrayOfEvents = (events) => {
78
78
  if (!events) {
79
79
  return [];
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"../../../src","sources":["utils/common.ts"],"names":[],"mappings":"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","sourcesContent":["import {format, parse} from 'url';\n\nimport {\n AnalyticsEvent,\n AnalyticsEventsProp,\n ContentBlockProps,\n HeaderBreadCrumbsProps,\n} from '@gravity-ui/page-constructor';\nimport camelCase from 'lodash/camelCase';\nimport debounce from 'lodash/debounce';\nimport flatten from 'lodash/flatten';\nimport memoize from 'lodash/memoize';\n\nimport {\n CONTENT_DEFAULT_COL_SIZES,\n CONTENT_DEFAULT_SIZE,\n CONTENT_DEFAULT_THEME,\n DEFAULT_PAGE,\n DEFAULT_ROWS_PER_PAGE,\n} from '../blocks/constants';\nimport {RouterContextProps} from '../contexts/RouterContext';\nimport {Keyset, i18n} from '../i18n';\nimport {GetPostsRequest, Query, Tag} from '../models/common';\nimport {AnalyticsCounter} from '../counters/utils';\n\nconst QA_ATTRIBUTES_KEYS = ['container', 'content', 'wrapper', 'image', 'button'];\n\nexport interface QueryParam {\n name: string;\n value?: string | number | null;\n}\n\nexport interface RouterActionOptions {\n shallow?: boolean;\n}\n\nexport function getAbsolutePath(router: RouterContextProps, url?: string) {\n if (!router || !router.pathname) {\n return url ?? '';\n }\n\n const parsed = parse(url || router.as || '');\n\n return format({\n ...parsed,\n protocol: parsed.protocol || 'https',\n hostname: parsed.hostname || router.hostname,\n pathname: parsed.pathname || router.pathname,\n });\n}\n\nexport const getPageSearchParams = (query: Query = {}) => {\n const searchParams = new URLSearchParams();\n\n Object.entries(query).forEach(([key, value]) => {\n searchParams.set(key, String(value));\n });\n\n return searchParams;\n};\n\nexport const scrollToHash = (hash: string, browser?: string) => {\n if (!hash) {\n return;\n }\n\n const element = document.getElementById(hash);\n\n if (!element) {\n return;\n }\n\n setTimeout(\n () => element.scrollIntoView({behavior: browser === 'Yandex' ? 'auto' : 'smooth'}),\n 0,\n );\n};\n\ntype CloudListTagStub = {};\n\nexport const getTags = memoize((tags: Tag[], blogPath: string) => {\n return tags.map(({slug, ...tag}) => {\n const queryParams = new URLSearchParams();\n queryParams.set('tags', slug);\n\n return {\n ...tag,\n id: slug,\n url: `${blogPath}?${queryParams}`,\n } as CloudListTagStub;\n });\n});\n\nconst stub = (postId: number | string) => postId;\n\nexport const postLikeStatus = debounce((postId: number | string, hasUserLike: boolean) => {\n (hasUserLike ? stub : stub)(postId);\n}, 300);\n\nexport const updateContentSizes = ({size, colSizes, theme, ...contentData}: ContentBlockProps) => ({\n ...contentData,\n size: size || CONTENT_DEFAULT_SIZE,\n colSizes: colSizes || CONTENT_DEFAULT_COL_SIZES,\n theme: theme || CONTENT_DEFAULT_THEME,\n});\n\ntype GetBreadcrumbsProps = {\n tags?: Tag[];\n blogPath: string;\n};\n\nexport const getBlogPath = (pathPrefix: string) => {\n const prefix = pathPrefix ? `/${pathPrefix}` : '';\n return `${prefix}/blog`;\n};\n\nexport const getBreadcrumbs = ({tags, blogPath}: GetBreadcrumbsProps) => {\n const breadcrumbs: HeaderBreadCrumbsProps = {\n items: [{text: i18n(Keyset.TitleBreadcrumbs), url: blogPath}],\n theme: 'light',\n };\n\n if (tags?.length) {\n const localizedTags = getTags(tags, blogPath);\n const tag = localizedTags[0];\n // @ts-ignore todo fix\n breadcrumbs.items.push({text: tag.name, url: tag.url});\n }\n\n return breadcrumbs;\n};\n\nconst getArrayOfEvents = (events?: AnalyticsEventsProp) => {\n if (!events) {\n return [];\n }\n\n if (Array.isArray(events)) {\n return events;\n }\n\n return [events];\n};\n\nexport const getMergedAnalyticsEvents = (\n analyticEvents: AnalyticsEventsProp,\n existringEvents?: AnalyticsEventsProp,\n) => {\n const eventsAsArray = getArrayOfEvents(analyticEvents);\n const existingAsArray = getArrayOfEvents(existringEvents);\n\n return eventsAsArray.concat(existingAsArray);\n};\n\nexport const getFeedQueryParams = (queryString: Query, pageNumber?: number): GetPostsRequest => {\n const queryParams = getPageSearchParams(queryString);\n const tags = queryParams.get('tags') || undefined;\n const page = pageNumber || Number(queryParams.get('page') || DEFAULT_PAGE);\n const perPage = Number(queryParams.get('perPage') || DEFAULT_ROWS_PER_PAGE);\n const savedOnly = queryParams.get('savedOnly') === 'true';\n const search = queryParams.get('search') || undefined;\n const serviceIds = queryParams.get('services') || undefined;\n\n return {tags, page, perPage, savedOnly, search, services: serviceIds};\n};\n\nexport const scrollOnPageChange = (containerId: string) => {\n const cardsContainerEl = document.getElementById(containerId);\n const y = cardsContainerEl?.getBoundingClientRect()?.y || 0;\n\n if (y < 0) {\n scrollToHash(containerId);\n }\n};\n\nexport const getQaAttributes = (qa?: string, ...customKeys: (string | Array<string>)[]) => {\n const attributes: Record<string, string> = {};\n\n if (qa) {\n const keys = QA_ATTRIBUTES_KEYS.concat(flatten(customKeys));\n\n keys.forEach((key) => {\n attributes[camelCase(key)] = `${qa}-${key}`;\n });\n\n attributes.default = qa;\n }\n\n return attributes;\n};\n\ntype PrepareAnalyticsEventArgs = {\n name: string;\n counter?: AnalyticsCounter;\n options?: Record<string, string | number>;\n};\n\nexport const prepareAnalyticsEvent = ({\n name,\n counter = AnalyticsCounter.Main,\n options = {},\n}: PrepareAnalyticsEventArgs): AnalyticsEvent => ({\n ...options,\n name,\n counters: {\n include: [counter],\n },\n});\n"]}
1
+ {"version":3,"file":"common.js","sourceRoot":"../../../src","sources":["utils/common.ts"],"names":[],"mappings":"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","sourcesContent":["import {format, parse} from 'url';\n\nimport {\n AnalyticsEvent,\n AnalyticsEventsProp,\n ContentBlockProps,\n HeaderBreadCrumbsProps,\n} from '@gravity-ui/page-constructor';\nimport camelCase from 'lodash/camelCase';\nimport debounce from 'lodash/debounce';\nimport flatten from 'lodash/flatten';\nimport memoize from 'lodash/memoize';\n\nimport {\n CONTENT_DEFAULT_COL_SIZES,\n CONTENT_DEFAULT_SIZE,\n CONTENT_DEFAULT_THEME,\n DEFAULT_PAGE,\n DEFAULT_ROWS_PER_PAGE,\n} from '../blocks/constants';\nimport {RouterContextProps} from '../contexts/RouterContext';\nimport {Keyset, i18n} from '../i18n';\nimport {GetPostsRequest, Query, Tag} from '../models/common';\nimport {AnalyticsCounter} from '../counters/utils';\n\nconst QA_ATTRIBUTES_KEYS = ['container', 'content', 'wrapper', 'image', 'button'];\n\nexport interface QueryParam {\n name: string;\n value?: string | number | null;\n}\n\nexport interface RouterActionOptions {\n shallow?: boolean;\n}\n\nexport function getAbsolutePath(router: RouterContextProps, url?: string) {\n if (!router || !router.pathname) {\n return url ?? '';\n }\n\n const parsed = parse(url || router.as || '');\n\n return format({\n ...parsed,\n protocol: parsed.protocol || 'https',\n hostname: parsed.hostname || router.hostname,\n pathname: parsed.pathname || router.pathname,\n });\n}\n\nexport const getPageSearchParams = (query: Query = {}) => {\n const searchParams = new URLSearchParams();\n\n Object.entries(query).forEach(([key, value]) => {\n searchParams.set(key, String(value));\n });\n\n return searchParams;\n};\n\nexport const scrollToHash = (hash: string, browser?: string) => {\n if (!hash) {\n return;\n }\n\n const element = document.getElementById(hash);\n\n if (!element) {\n return;\n }\n\n setTimeout(\n () => element.scrollIntoView({behavior: browser === 'Yandex' ? 'auto' : 'smooth'}),\n 0,\n );\n};\n\ntype CloudListTagStub = {};\n\nexport const getTags = memoize((tags: Tag[], blogPath: string) => {\n return tags.map(({slug, ...tag}) => {\n const queryParams = new URLSearchParams();\n queryParams.set('tags', slug);\n\n return {\n ...tag,\n id: slug,\n url: `${blogPath}?${queryParams}`,\n } as CloudListTagStub;\n });\n});\n\nconst stub = (postId: number | string) => postId;\n\nexport const postLikeStatus = debounce((postId: number | string, hasUserLike: boolean) => {\n (hasUserLike ? stub : stub)(postId);\n}, 300);\n\nexport const updateContentSizes = ({size, colSizes, theme, ...contentData}: ContentBlockProps) => ({\n ...contentData,\n size: size || CONTENT_DEFAULT_SIZE,\n colSizes: colSizes || CONTENT_DEFAULT_COL_SIZES,\n theme: theme || CONTENT_DEFAULT_THEME,\n});\n\ntype GetBreadcrumbsProps = {\n tags?: Tag[];\n blogPath: string;\n};\n\nexport const getBlogPath = (pathPrefix: string) => {\n const prefix = pathPrefix ? `/${pathPrefix}` : '';\n return `${prefix}/blog`;\n};\n\nexport function getBreadcrumbs({tags, blogPath}: GetBreadcrumbsProps) {\n const breadcrumbs: HeaderBreadCrumbsProps = {\n items: [{text: i18n(Keyset.TitleBreadcrumbs), url: blogPath}],\n theme: 'light',\n };\n\n if (tags?.length) {\n const localizedTags = getTags(tags, blogPath);\n const tag = localizedTags[0];\n // @ts-ignore todo fix\n breadcrumbs.items.push({text: tag.name, url: tag.url});\n }\n\n return breadcrumbs;\n}\n\nconst getArrayOfEvents = (events?: AnalyticsEventsProp) => {\n if (!events) {\n return [];\n }\n\n if (Array.isArray(events)) {\n return events;\n }\n\n return [events];\n};\n\nexport const getMergedAnalyticsEvents = (\n analyticEvents: AnalyticsEventsProp,\n existringEvents?: AnalyticsEventsProp,\n) => {\n const eventsAsArray = getArrayOfEvents(analyticEvents);\n const existingAsArray = getArrayOfEvents(existringEvents);\n\n return eventsAsArray.concat(existingAsArray);\n};\n\nexport const getFeedQueryParams = (queryString: Query, pageNumber?: number): GetPostsRequest => {\n const queryParams = getPageSearchParams(queryString);\n const tags = queryParams.get('tags') || undefined;\n const page = pageNumber || Number(queryParams.get('page') || DEFAULT_PAGE);\n const perPage = Number(queryParams.get('perPage') || DEFAULT_ROWS_PER_PAGE);\n const savedOnly = queryParams.get('savedOnly') === 'true';\n const search = queryParams.get('search') || undefined;\n const serviceIds = queryParams.get('services') || undefined;\n\n return {tags, page, perPage, savedOnly, search, services: serviceIds};\n};\n\nexport const scrollOnPageChange = (containerId: string) => {\n const cardsContainerEl = document.getElementById(containerId);\n const y = cardsContainerEl?.getBoundingClientRect()?.y || 0;\n\n if (y < 0) {\n scrollToHash(containerId);\n }\n};\n\nexport const getQaAttributes = (qa?: string, ...customKeys: (string | Array<string>)[]) => {\n const attributes: Record<string, string> = {};\n\n if (qa) {\n const keys = QA_ATTRIBUTES_KEYS.concat(flatten(customKeys));\n\n keys.forEach((key) => {\n attributes[camelCase(key)] = `${qa}-${key}`;\n });\n\n attributes.default = qa;\n }\n\n return attributes;\n};\n\ntype PrepareAnalyticsEventArgs = {\n name: string;\n counter?: AnalyticsCounter;\n options?: Record<string, string | number>;\n};\n\nexport const prepareAnalyticsEvent = ({\n name,\n counter = AnalyticsCounter.Main,\n options = {},\n}: PrepareAnalyticsEventArgs): AnalyticsEvent => ({\n ...options,\n name,\n counters: {\n include: [counter],\n },\n});\n"]}
@@ -23,7 +23,7 @@ const breadcrumbsGoals = prepareAnalyticsEvent({
23
23
  });
24
24
  export const Meta = (props) => {
25
25
  const { paddingTop = 'l', paddingBottom = 'l', theme = 'light', qa } = props;
26
- const { post } = React.useContext(PostPageContext);
26
+ const { post, breadcrumbs: customBreadcrumbs } = React.useContext(PostPageContext);
27
27
  const { locale } = React.useContext(LocaleContext);
28
28
  const qaAttributes = getQaAttributes(qa, 'post-info');
29
29
  const { getBlogPath = getDefaultBlogPath } = React.useContext(SettingsContext);
@@ -34,7 +34,7 @@ export const Meta = (props) => {
34
34
  return (_jsxs(Wrapper, { paddings: {
35
35
  [PaddingsDirections.top]: paddingTop,
36
36
  [PaddingsDirections.bottom]: paddingBottom,
37
- }, qa: qaAttributes.wrapper, children: [breadcrumbs && (_jsx(HeaderBreadcrumbs, { items: breadcrumbs.items, className: b('breadcrumbs'), theme: theme })), title && (_jsx(YFMWrapper, { content: title, modifiers: {
37
+ }, qa: qaAttributes.wrapper, children: [breadcrumbs && (_jsx(HeaderBreadcrumbs, { items: (customBreadcrumbs === null || customBreadcrumbs === void 0 ? void 0 : customBreadcrumbs.items) || breadcrumbs.items, className: b('breadcrumbs'), theme: theme })), title && (_jsx(YFMWrapper, { content: title, modifiers: {
38
38
  blogBreadcrumbs: true,
39
39
  resetPaddings: true,
40
40
  } })), post && (_jsx(PostInfo, { postId: id, date: date, readingTime: readingTime, analyticsEventsContainer: analyticsEventsContainer, qa: qaAttributes.postInfo }))] }));
@@ -1 +1 @@
1
- {"version":3,"file":"Meta.js","sourceRoot":"../../../../src","sources":["blocks/Meta/Meta.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {AnalyticsEventsProp, HeaderBreadcrumbs, YFMWrapper} from '@gravity-ui/page-constructor';\n\nimport {PostInfo} from '../../components/PostInfo/PostInfo';\nimport {Wrapper} from '../../components/Wrapper/Wrapper';\nimport {DefaultGoalIds} from '../../constants';\nimport {LocaleContext} from '../../contexts/LocaleContext';\nimport {SettingsContext} from '../../contexts/SettingsContext';\nimport {PostPageContext} from '../../contexts/PostPageContext';\nimport {MetaProps} from '../../models/blocks';\nimport {PaddingsDirections} from '../../models/paddings';\nimport {block} from '../../utils/cn';\nimport {\n getBreadcrumbs,\n getBlogPath as getDefaultBlogPath,\n getMergedAnalyticsEvents,\n getQaAttributes,\n prepareAnalyticsEvent,\n} from '../../utils/common';\nimport {AnalyticsCounter} from '../../counters/utils';\n\nimport './Meta.scss';\n\nconst b = block('meta');\n\nconst analyticsEventsContainer: Record<string, AnalyticsEventsProp> = {\n sharing: prepareAnalyticsEvent({name: DefaultGoalIds.shareBottom}),\n save: prepareAnalyticsEvent({name: DefaultGoalIds.saveBottom}),\n};\n\nconst breadcrumbsGoals = prepareAnalyticsEvent({\n name: DefaultGoalIds.breadcrumbsBottom,\n counter: AnalyticsCounter.CrossSite,\n});\n\nexport const Meta = (props: MetaProps) => {\n const {paddingTop = 'l', paddingBottom = 'l', theme = 'light', qa} = props;\n const {post} = React.useContext(PostPageContext);\n const {locale} = React.useContext(LocaleContext);\n const qaAttributes = getQaAttributes(qa, 'post-info');\n const {getBlogPath = getDefaultBlogPath} = React.useContext(SettingsContext);\n const blogPath = getBlogPath(locale.pathPrefix || '');\n\n const {title, id, date, readingTime, tags} = post;\n\n const breadcrumbs = getBreadcrumbs({tags, blogPath});\n\n breadcrumbs.analyticsEvents = getMergedAnalyticsEvents(breadcrumbsGoals);\n\n return (\n <Wrapper\n paddings={{\n [PaddingsDirections.top]: paddingTop,\n [PaddingsDirections.bottom]: paddingBottom,\n }}\n qa={qaAttributes.wrapper}\n >\n {breadcrumbs && (\n <HeaderBreadcrumbs\n items={breadcrumbs.items}\n className={b('breadcrumbs')}\n theme={theme}\n />\n )}\n {title && (\n <YFMWrapper\n content={title}\n modifiers={{\n blogBreadcrumbs: true,\n resetPaddings: true,\n }}\n />\n )}\n {post && (\n <PostInfo\n postId={id}\n date={date}\n readingTime={readingTime}\n analyticsEventsContainer={analyticsEventsContainer}\n qa={qaAttributes.postInfo}\n />\n )}\n </Wrapper>\n );\n};\n"]}
1
+ {"version":3,"file":"Meta.js","sourceRoot":"../../../../src","sources":["blocks/Meta/Meta.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {AnalyticsEventsProp, HeaderBreadcrumbs, YFMWrapper} from '@gravity-ui/page-constructor';\n\nimport {PostInfo} from '../../components/PostInfo/PostInfo';\nimport {Wrapper} from '../../components/Wrapper/Wrapper';\nimport {DefaultGoalIds} from '../../constants';\nimport {LocaleContext} from '../../contexts/LocaleContext';\nimport {SettingsContext} from '../../contexts/SettingsContext';\nimport {PostPageContext} from '../../contexts/PostPageContext';\nimport {MetaProps} from '../../models/blocks';\nimport {PaddingsDirections} from '../../models/paddings';\nimport {block} from '../../utils/cn';\nimport {\n getBreadcrumbs,\n getBlogPath as getDefaultBlogPath,\n getMergedAnalyticsEvents,\n getQaAttributes,\n prepareAnalyticsEvent,\n} from '../../utils/common';\nimport {AnalyticsCounter} from '../../counters/utils';\n\nimport './Meta.scss';\n\nconst b = block('meta');\n\nconst analyticsEventsContainer: Record<string, AnalyticsEventsProp> = {\n sharing: prepareAnalyticsEvent({name: DefaultGoalIds.shareBottom}),\n save: prepareAnalyticsEvent({name: DefaultGoalIds.saveBottom}),\n};\n\nconst breadcrumbsGoals = prepareAnalyticsEvent({\n name: DefaultGoalIds.breadcrumbsBottom,\n counter: AnalyticsCounter.CrossSite,\n});\n\nexport const Meta = (props: MetaProps) => {\n const {paddingTop = 'l', paddingBottom = 'l', theme = 'light', qa} = props;\n const {post, breadcrumbs: customBreadcrumbs} = React.useContext(PostPageContext);\n const {locale} = React.useContext(LocaleContext);\n const qaAttributes = getQaAttributes(qa, 'post-info');\n const {getBlogPath = getDefaultBlogPath} = React.useContext(SettingsContext);\n const blogPath = getBlogPath(locale.pathPrefix || '');\n\n const {title, id, date, readingTime, tags} = post;\n\n const breadcrumbs = getBreadcrumbs({tags, blogPath});\n\n breadcrumbs.analyticsEvents = getMergedAnalyticsEvents(breadcrumbsGoals);\n\n return (\n <Wrapper\n paddings={{\n [PaddingsDirections.top]: paddingTop,\n [PaddingsDirections.bottom]: paddingBottom,\n }}\n qa={qaAttributes.wrapper}\n >\n {breadcrumbs && (\n <HeaderBreadcrumbs\n items={customBreadcrumbs?.items || breadcrumbs.items}\n className={b('breadcrumbs')}\n theme={theme}\n />\n )}\n {title && (\n <YFMWrapper\n content={title}\n modifiers={{\n blogBreadcrumbs: true,\n resetPaddings: true,\n }}\n />\n )}\n {post && (\n <PostInfo\n postId={id}\n date={date}\n readingTime={readingTime}\n analyticsEventsContainer={analyticsEventsContainer}\n qa={qaAttributes.postInfo}\n />\n )}\n </Wrapper>\n );\n};\n"]}
@@ -41,10 +41,6 @@ unpredictable css rules order in build */
41
41
  border-radius: 8px;
42
42
  }
43
43
 
44
- .bc-feed-controls__popup_isMobile.bc-feed-controls__popup_isMobile {
45
- max-height: inherit;
46
- }
47
-
48
44
  .bc-feed-controls__popup_isMobile .bc-feed-controls__popup-filter {
49
45
  position: relative;
50
46
  border: none;
@@ -57,7 +53,7 @@ unpredictable css rules order in build */
57
53
  border-bottom: 2px solid var(--g-color-line-generic);
58
54
  border-bottom-right-radius: 0;
59
55
  border-bottom-left-radius: 0;
60
- width: 100vw;
56
+ width: 100%;
61
57
  height: 2px;
62
58
  transform: translateX(-50%);
63
59
  }
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import * as React from 'react';
3
3
  import { useAnalytics } from '@gravity-ui/page-constructor';
4
- import { Button, Icon, Select } from '@gravity-ui/uikit';
4
+ import { Button, Icon, MobileProvider, Select } from '@gravity-ui/uikit';
5
5
  import { DefaultGoalIds } from "../../../../constants.js";
6
6
  import { LikesContext } from "../../../../contexts/LikesContext.js";
7
7
  import { MobileContext } from "../../../../contexts/MobileContext.js";
@@ -87,14 +87,15 @@ export const Controls = ({ handleLoadData, tags = [], services = [], queryParams
87
87
  };
88
88
  const tagsItems = React.useMemo(() => [{ value: 'empty', content: i18n(Keyset.AllTags) }, ...tags], [tags]);
89
89
  const servicesItems = React.useMemo(() => (servicesInitial ? [...servicesInitial.split(',')] : []), [servicesInitial]);
90
- return (_jsxs("div", { className: b('header'), children: [_jsx("h1", { className: b('header-item', { title: true }), children: i18n(Keyset.Title) }), _jsxs("div", { className: b('header-item', { filters: true }), children: [_jsx("div", { className: b('filter-item'), children: _jsx(Search, { className: b('search'), placeholder: i18n(Keyset.Search), initialValue: search && typeof search === 'string' ? search : '', onSubmit: handleSearch }) }), _jsx("div", { className: b('filter-item'), children: _jsx(Select, { className: b('select'), size: "xl", options: tagsItems, defaultValue: [tagInitial], onUpdate: handleTagSelect, placeholder: i18n(Keyset.AllTags), popupClassName: b('popup', { isMobile }), renderControl: renderSwitcher({
91
- initial: [tagInitial],
92
- list: tagsItems,
93
- defaultLabel: i18n(Keyset.AllTags),
94
- }), disablePortal: true, virtualizationThreshold: VIRTUALIZATION_THRESHOLD, renderOption: renderOption }) }), services.length > 0 ? (_jsx("div", { className: b('filter-item'), children: _jsx(Select, { className: b('select'), size: "xl", multiple: true, filterable: true, hasClear: true, disablePortal: true, options: services, defaultValue: servicesItems, popupClassName: b('popup', { isMobile }), onUpdate: handleServicesSelect, placeholder: i18n(Keyset.AllServices), renderControl: renderSwitcher({
95
- initial: servicesItems,
96
- list: services,
97
- defaultLabel: i18n(Keyset.AllServices),
98
- }), virtualizationThreshold: VIRTUALIZATION_THRESHOLD, renderOption: renderOption, renderFilter: renderFilter }) })) : null, hasLikes ? (_jsx("div", { className: b('filter-item', { 'width-auto': true }), children: _jsxs(Button, { view: 'outlined', className: b('saved-only-button', { savedOnly }), size: "xl", onClick: handleSavedOnly, selected: savedOnly, children: [_jsx(Icon, { data: Save, size: ICON_SIZE, className: b('icon', { savedOnly }) }), i18n(Keyset.ActionSavedOnly)] }) })) : null] })] }));
90
+ return (_jsx(MobileProvider, { mobile: false, children: _jsxs("div", { className: b('header'), children: [_jsx("h1", { className: b('header-item', { title: true }), children: i18n(Keyset.Title) }), _jsxs("div", { className: b('header-item', { filters: true }), children: [_jsx("div", { className: b('filter-item'), children: _jsx(Search, { className: b('search'), placeholder: i18n(Keyset.Search), initialValue: search && typeof search === 'string' ? search : '', onSubmit: handleSearch }) }), _jsx("div", { className: b('filter-item'), children: _jsx(Select, { className: b('select'), size: "xl", options: tagsItems, defaultValue: [tagInitial], onUpdate: handleTagSelect, placeholder: i18n(Keyset.AllTags), popupClassName: b('popup', { isMobile }), renderControl: renderSwitcher({
91
+ initial: [tagInitial],
92
+ list: tagsItems,
93
+ defaultLabel: i18n(Keyset.AllTags),
94
+ }), disablePortal: true, virtualizationThreshold: VIRTUALIZATION_THRESHOLD, renderOption: renderOption }) }), services.length > 0 ? (_jsx("div", { className: b('filter-item'), children: _jsx(Select, { className: b('select'), size: "xl", multiple: true, filterable: true, hasClear: true, disablePortal: true, options: services, defaultValue: servicesItems, popupClassName: b('popup', { isMobile }), onUpdate: handleServicesSelect, placeholder: i18n(Keyset.AllServices), renderControl: renderSwitcher({
95
+ initial: servicesItems,
96
+ list: services,
97
+ defaultLabel: i18n(Keyset.AllServices),
98
+ qa: 'service-select',
99
+ }), virtualizationThreshold: VIRTUALIZATION_THRESHOLD, renderOption: renderOption, renderFilter: renderFilter }) })) : null, hasLikes ? (_jsx("div", { className: b('filter-item', { 'width-auto': true }), children: _jsxs(Button, { view: 'outlined', className: b('saved-only-button', { savedOnly }), size: "xl", onClick: handleSavedOnly, selected: savedOnly, children: [_jsx(Icon, { data: Save, size: ICON_SIZE, className: b('icon', { savedOnly }) }), i18n(Keyset.ActionSavedOnly)] }) })) : null] })] }) }));
99
100
  };
100
101
  //# sourceMappingURL=Controls.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Controls.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/Controls/Controls.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {useAnalytics} from '@gravity-ui/page-constructor';\nimport {Button, Icon, Select} from '@gravity-ui/uikit';\n\nimport {DefaultGoalIds} from '../../../../constants';\nimport {LikesContext} from '../../../../contexts/LikesContext';\nimport {MobileContext} from '../../../../contexts/MobileContext';\nimport {AnalyticsCounter} from '../../../../counters/utils';\nimport {Keyset, i18n} from '../../../../i18n';\nimport {Save} from '../../../../icons/Save';\nimport {DefaultEventNames, FetchArgs, Query} from '../../../../models/common';\nimport {block} from '../../../../utils/cn';\nimport {Search} from '../../../Search/Search';\nimport {prepareAnalyticsEvent} from '../../../../utils/common';\n\nimport {renderFilter, renderOption, renderSwitcher} from './customRenders';\n\nimport './Controls.scss';\n\nconst b = block('feed-controls');\n\nexport type SelectItem = {\n content: string;\n value: string;\n icon?: React.ReactNode;\n};\n\nexport type ControlsProps = {\n handleLoadData: (props: FetchArgs) => void;\n tags?: SelectItem[];\n services?: SelectItem[];\n queryParams: Query;\n};\n\nconst ICON_SIZE = 16;\nconst DEFAULT_PAGE = 1;\nconst VIRTUALIZATION_THRESHOLD = 1000;\n\nexport const Controls = ({\n handleLoadData,\n tags = [],\n services = [],\n queryParams,\n}: ControlsProps) => {\n const {hasLikes} = React.useContext(LikesContext);\n const handleAnalyticsTag = useAnalytics(DefaultEventNames.Tag);\n const handleAnalyticsService = useAnalytics(DefaultEventNames.Service);\n const handleAnalyticsSaveOnly = useAnalytics(DefaultEventNames.SaveOnly);\n\n const {\n savedOnly: savedOnlyInitial,\n search: searchInitial,\n tags: tagInitial,\n services: servicesInitial,\n } = queryParams || {};\n\n const [savedOnly, setSavedOnly] = React.useState<boolean>(savedOnlyInitial === 'true');\n const [search, setSearch] = React.useState<string>(searchInitial as string);\n\n const isMobile = React.useContext(MobileContext);\n\n const handleSavedOnly = () => {\n handleAnalyticsSaveOnly();\n setSavedOnly(!savedOnly);\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {\n savedOnly: savedOnly ? '' : 'true',\n search: '',\n tags: '',\n page: DEFAULT_PAGE,\n services: '',\n },\n });\n };\n\n const handleSearch = (searchValue: string) => {\n setSearch(searchValue);\n\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {search: searchValue, page: DEFAULT_PAGE},\n });\n };\n\n const handleTagSelect = (selectedTags: string[]) => {\n const event = prepareAnalyticsEvent({\n name: DefaultGoalIds.tag,\n counter: AnalyticsCounter.CrossSite,\n });\n handleAnalyticsTag(event, {\n theme: selectedTags[0],\n });\n\n const isEmptyTag = selectedTags.some((tag) => tag === 'empty');\n\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {\n tags: isEmptyTag ? '' : selectedTags[0],\n page: DEFAULT_PAGE,\n },\n });\n };\n\n const handleServicesSelect = (selectedServices: string[]) => {\n const forAnalyticsServices = services.filter((service) => {\n return selectedServices.includes(service.value);\n });\n\n const servicesAsStringForAnalytics = forAnalyticsServices\n .map((service) => service.content)\n .join(',');\n\n const event = prepareAnalyticsEvent({\n name: DefaultGoalIds.service,\n counter: AnalyticsCounter.CrossSite,\n });\n handleAnalyticsService(event, {\n service: servicesAsStringForAnalytics,\n });\n\n const servicesAsString = selectedServices.join(',');\n\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {services: servicesAsString, page: DEFAULT_PAGE},\n });\n };\n\n const tagsItems = React.useMemo(\n () => [{value: 'empty', content: i18n(Keyset.AllTags)} as unknown as SelectItem, ...tags],\n [tags],\n );\n\n const servicesItems = React.useMemo(\n () => (servicesInitial ? [...(servicesInitial as string).split(',')] : []),\n [servicesInitial],\n );\n\n return (\n <div className={b('header')}>\n <h1 className={b('header-item', {title: true})}>{i18n(Keyset.Title)}</h1>\n <div className={b('header-item', {filters: true})}>\n <div className={b('filter-item')}>\n <Search\n className={b('search')}\n placeholder={i18n(Keyset.Search)}\n initialValue={search && typeof search === 'string' ? search : ''}\n onSubmit={handleSearch}\n />\n </div>\n <div className={b('filter-item')}>\n <Select\n className={b('select')}\n size=\"xl\"\n options={tagsItems}\n defaultValue={[tagInitial] as string[]}\n onUpdate={handleTagSelect}\n placeholder={i18n(Keyset.AllTags)}\n popupClassName={b('popup', {isMobile})}\n renderControl={renderSwitcher({\n initial: [tagInitial],\n list: tagsItems,\n defaultLabel: i18n(Keyset.AllTags),\n })}\n disablePortal\n virtualizationThreshold={VIRTUALIZATION_THRESHOLD}\n renderOption={renderOption}\n />\n </div>\n\n {services.length > 0 ? (\n <div className={b('filter-item')}>\n <Select\n className={b('select')}\n size=\"xl\"\n multiple\n filterable\n hasClear\n disablePortal\n options={services}\n defaultValue={servicesItems}\n popupClassName={b('popup', {isMobile})}\n onUpdate={handleServicesSelect}\n placeholder={i18n(Keyset.AllServices)}\n renderControl={renderSwitcher({\n initial: servicesItems,\n list: services,\n defaultLabel: i18n(Keyset.AllServices),\n })}\n virtualizationThreshold={VIRTUALIZATION_THRESHOLD}\n renderOption={renderOption}\n renderFilter={renderFilter}\n />\n </div>\n ) : null}\n {hasLikes ? (\n <div className={b('filter-item', {'width-auto': true})}>\n <Button\n view={'outlined'}\n className={b('saved-only-button', {savedOnly})}\n size=\"xl\"\n onClick={handleSavedOnly}\n selected={savedOnly}\n >\n <Icon data={Save} size={ICON_SIZE} className={b('icon', {savedOnly})} />\n {i18n(Keyset.ActionSavedOnly)}\n </Button>\n </div>\n ) : null}\n </div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"Controls.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/Controls/Controls.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {useAnalytics} from '@gravity-ui/page-constructor';\nimport {Button, Icon, MobileProvider, Select} from '@gravity-ui/uikit';\n\nimport {DefaultGoalIds} from '../../../../constants';\nimport {LikesContext} from '../../../../contexts/LikesContext';\nimport {MobileContext} from '../../../../contexts/MobileContext';\nimport {AnalyticsCounter} from '../../../../counters/utils';\nimport {Keyset, i18n} from '../../../../i18n';\nimport {Save} from '../../../../icons/Save';\nimport {DefaultEventNames, FetchArgs, Query} from '../../../../models/common';\nimport {block} from '../../../../utils/cn';\nimport {Search} from '../../../Search/Search';\nimport {prepareAnalyticsEvent} from '../../../../utils/common';\n\nimport {renderFilter, renderOption, renderSwitcher} from './customRenders';\n\nimport './Controls.scss';\n\nconst b = block('feed-controls');\n\nexport type SelectItem = {\n content: string;\n value: string;\n icon?: React.ReactNode;\n};\n\nexport type ControlsProps = {\n handleLoadData: (props: FetchArgs) => void;\n tags?: SelectItem[];\n services?: SelectItem[];\n queryParams: Query;\n};\n\nconst ICON_SIZE = 16;\nconst DEFAULT_PAGE = 1;\nconst VIRTUALIZATION_THRESHOLD = 1000;\n\nexport const Controls = ({\n handleLoadData,\n tags = [],\n services = [],\n queryParams,\n}: ControlsProps) => {\n const {hasLikes} = React.useContext(LikesContext);\n const handleAnalyticsTag = useAnalytics(DefaultEventNames.Tag);\n const handleAnalyticsService = useAnalytics(DefaultEventNames.Service);\n const handleAnalyticsSaveOnly = useAnalytics(DefaultEventNames.SaveOnly);\n\n const {\n savedOnly: savedOnlyInitial,\n search: searchInitial,\n tags: tagInitial,\n services: servicesInitial,\n } = queryParams || {};\n\n const [savedOnly, setSavedOnly] = React.useState<boolean>(savedOnlyInitial === 'true');\n const [search, setSearch] = React.useState<string>(searchInitial as string);\n\n const isMobile = React.useContext(MobileContext);\n\n const handleSavedOnly = () => {\n handleAnalyticsSaveOnly();\n setSavedOnly(!savedOnly);\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {\n savedOnly: savedOnly ? '' : 'true',\n search: '',\n tags: '',\n page: DEFAULT_PAGE,\n services: '',\n },\n });\n };\n\n const handleSearch = (searchValue: string) => {\n setSearch(searchValue);\n\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {search: searchValue, page: DEFAULT_PAGE},\n });\n };\n\n const handleTagSelect = (selectedTags: string[]) => {\n const event = prepareAnalyticsEvent({\n name: DefaultGoalIds.tag,\n counter: AnalyticsCounter.CrossSite,\n });\n handleAnalyticsTag(event, {\n theme: selectedTags[0],\n });\n\n const isEmptyTag = selectedTags.some((tag) => tag === 'empty');\n\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {\n tags: isEmptyTag ? '' : selectedTags[0],\n page: DEFAULT_PAGE,\n },\n });\n };\n\n const handleServicesSelect = (selectedServices: string[]) => {\n const forAnalyticsServices = services.filter((service) => {\n return selectedServices.includes(service.value);\n });\n\n const servicesAsStringForAnalytics = forAnalyticsServices\n .map((service) => service.content)\n .join(',');\n\n const event = prepareAnalyticsEvent({\n name: DefaultGoalIds.service,\n counter: AnalyticsCounter.CrossSite,\n });\n handleAnalyticsService(event, {\n service: servicesAsStringForAnalytics,\n });\n\n const servicesAsString = selectedServices.join(',');\n\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {services: servicesAsString, page: DEFAULT_PAGE},\n });\n };\n\n const tagsItems = React.useMemo(\n () => [{value: 'empty', content: i18n(Keyset.AllTags)} as unknown as SelectItem, ...tags],\n [tags],\n );\n\n const servicesItems = React.useMemo(\n () => (servicesInitial ? [...(servicesInitial as string).split(',')] : []),\n [servicesInitial],\n );\n\n return (\n <MobileProvider mobile={false}>\n <div className={b('header')}>\n <h1 className={b('header-item', {title: true})}>{i18n(Keyset.Title)}</h1>\n <div className={b('header-item', {filters: true})}>\n <div className={b('filter-item')}>\n <Search\n className={b('search')}\n placeholder={i18n(Keyset.Search)}\n initialValue={search && typeof search === 'string' ? search : ''}\n onSubmit={handleSearch}\n />\n </div>\n <div className={b('filter-item')}>\n <Select\n className={b('select')}\n size=\"xl\"\n options={tagsItems}\n defaultValue={[tagInitial] as string[]}\n onUpdate={handleTagSelect}\n placeholder={i18n(Keyset.AllTags)}\n popupClassName={b('popup', {isMobile})}\n renderControl={renderSwitcher({\n initial: [tagInitial],\n list: tagsItems,\n defaultLabel: i18n(Keyset.AllTags),\n })}\n disablePortal\n virtualizationThreshold={VIRTUALIZATION_THRESHOLD}\n renderOption={renderOption}\n />\n </div>\n\n {services.length > 0 ? (\n <div className={b('filter-item')}>\n <Select\n className={b('select')}\n size=\"xl\"\n multiple\n filterable\n hasClear\n disablePortal\n options={services}\n defaultValue={servicesItems}\n popupClassName={b('popup', {isMobile})}\n onUpdate={handleServicesSelect}\n placeholder={i18n(Keyset.AllServices)}\n renderControl={renderSwitcher({\n initial: servicesItems,\n list: services,\n defaultLabel: i18n(Keyset.AllServices),\n qa: 'service-select',\n })}\n virtualizationThreshold={VIRTUALIZATION_THRESHOLD}\n renderOption={renderOption}\n renderFilter={renderFilter}\n />\n </div>\n ) : null}\n {hasLikes ? (\n <div className={b('filter-item', {'width-auto': true})}>\n <Button\n view={'outlined'}\n className={b('saved-only-button', {savedOnly})}\n size=\"xl\"\n onClick={handleSavedOnly}\n selected={savedOnly}\n >\n <Icon\n data={Save}\n size={ICON_SIZE}\n className={b('icon', {savedOnly})}\n />\n {i18n(Keyset.ActionSavedOnly)}\n </Button>\n </div>\n ) : null}\n </div>\n </div>\n </MobileProvider>\n );\n};\n"]}
@@ -5,6 +5,7 @@ type RenderSwitcherType = ({ initial, list, defaultLabel, }: {
5
5
  initial: CustomSwitcherProps['initial'];
6
6
  list: CustomSwitcherProps['list'];
7
7
  defaultLabel: string;
8
+ qa?: string;
8
9
  }) => SelectProps['renderControl'];
9
10
  type RenderFilterType = SelectProps['renderFilter'];
10
11
  export declare const renderSwitcher: RenderSwitcherType;
@@ -7,14 +7,14 @@ import { CustomSelectOption, } from "../CustomSelectOption/CustomSelectOption.js
7
7
  import { CustomSwitcher } from "../CustomSwitcher/CustomSwitcher.js";
8
8
  import './Controls.css';
9
9
  const b = block('feed-controls');
10
- export const renderSwitcher = ({ initial, list, defaultLabel }) =>
10
+ export const renderSwitcher = ({ initial, list, defaultLabel, qa }) =>
11
11
  // eslint-disable-next-line react/display-name
12
12
  (_a) => {
13
13
  var { ref, renderClear } = _a, _b = _a.triggerProps, { id, disabled, type, onClick, onKeyDown } = _b, a11yProps = __rest(_b, ["id", "disabled", "type", "onClick", "onKeyDown"]);
14
14
  return (_jsx(CustomSwitcher, { id: id, disabled: disabled, type: type, initial: initial, defaultLabel: defaultLabel, list: list, controlRef: ref, triggerProps: {
15
15
  onClick,
16
16
  onKeyDown,
17
- }, renderClear: renderClear, a11yProps: a11yProps }));
17
+ }, renderClear: renderClear, a11yProps: a11yProps, qa: qa }));
18
18
  };
19
19
  export const renderFilter = (_a) => {
20
20
  var { ref, onChange } = _a, _b = _a.inputProps, { value, onKeyDown, onChange: _, size: __, placeholder: ___ } = _b, a11yProps = __rest(_b, ["value", "onKeyDown", "onChange", "size", "placeholder"]);
@@ -1 +1 @@
1
- {"version":3,"file":"customRenders.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/Controls/customRenders.tsx"],"names":[],"mappings":";;AAAA,OAAO,EAA4B,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAEvE,OAAO,EAAC,MAAM,EAAE,IAAI,EAAC,kCAAyB;AAC9C,OAAO,EAAC,KAAK,EAAC,gCAA6B;AAC3C,OAAO,EACH,kBAAkB,GAErB,oDAAiD;AAClD,OAAO,EAAC,cAAc,EAAsB,4CAAyC;AAErF,OAAO,gBAAgB,CAAC;AAExB,MAAM,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;AAcjC,MAAM,CAAC,MAAM,cAAc,GACvB,CAAC,EAAC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAC,EAAE,EAAE;AAClC,8CAA8C;AAC9C,CAAC,EAAwF,EAAE,EAAE;QAA5F,EAAC,GAAG,EAAE,WAAW,OAAuE,EAArE,oBAAoE,EAApE,EAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,OAAe,EAAV,SAAS,cAArD,kDAAsD,CAAD;IAAO,OAAA,CAC1F,KAAC,cAAc,IACX,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,GAAG,EACf,YAAY,EAAE;YACV,OAAO;YACP,SAAS;SACZ,EACD,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,GACtB,CACL,CAAA;CAAA,CAAC;AAEN,MAAM,CAAC,MAAM,YAAY,GAAqB,CAAC,EAI9C,EAAE,EAAE;QAJ0C,EAC3C,GAAG,EACH,QAAQ,OAEX,EADG,kBAAqF,EAArF,EAAa,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,OAAe,EAAV,SAAS,cAAxE,yDAAyE,CAAD;IAClF,OAAA,CACF,KAAC,SAAS,IACN,KAAK,EAAE,KAAK,EACZ,IAAI,EAAC,OAAO,EACZ,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAChC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,CAAC,CAAC,cAAc,CAAC,EAC5B,UAAU,EAAE,GAAG,EACf,YAAY,kBAAG,IAAI,EAAE,CAAC,IAAK,SAAS,IACtC,CACL,CAAA;CAAA,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAoB,EAAE,EAAE,CAAC,CAClD,KAAC,kBAAkB,IAAC,IAAI,EAAE,MAAyC,GAAI,CAC1E,CAAC","sourcesContent":["import {SelectOption, SelectProps, TextInput} from '@gravity-ui/uikit';\n\nimport {Keyset, i18n} from '../../../../i18n';\nimport {block} from '../../../../utils/cn';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport {CustomSwitcher, CustomSwitcherProps} from '../CustomSwitcher/CustomSwitcher';\n\nimport './Controls.scss';\n\nconst b = block('feed-controls');\n\ntype RenderSwitcherType = ({\n initial,\n list,\n defaultLabel,\n}: {\n initial: CustomSwitcherProps['initial'];\n list: CustomSwitcherProps['list'];\n defaultLabel: string;\n}) => SelectProps['renderControl'];\n\ntype RenderFilterType = SelectProps['renderFilter'];\n\nexport const renderSwitcher: RenderSwitcherType =\n ({initial, list, defaultLabel}) =>\n // eslint-disable-next-line react/display-name\n ({ref, renderClear, triggerProps: {id, disabled, type, onClick, onKeyDown, ...a11yProps}}) => (\n <CustomSwitcher\n id={id}\n disabled={disabled}\n type={type}\n initial={initial}\n defaultLabel={defaultLabel}\n list={list}\n controlRef={ref}\n triggerProps={{\n onClick,\n onKeyDown,\n }}\n renderClear={renderClear}\n a11yProps={a11yProps}\n />\n );\n\nexport const renderFilter: RenderFilterType = ({\n ref,\n onChange,\n inputProps: {value, onKeyDown, onChange: _, size: __, placeholder: ___, ...a11yProps},\n}) => (\n <TextInput\n value={value}\n view=\"clear\"\n placeholder={i18n(Keyset.Search)}\n onUpdate={onChange}\n onKeyDown={onKeyDown}\n className={b('popup-filter')}\n controlRef={ref}\n controlProps={{size: 1, ...a11yProps}}\n />\n);\n\nexport const renderOption = (option: SelectOption) => (\n <CustomSelectOption data={option as CustomSelectOptionProps['data']} />\n);\n"]}
1
+ {"version":3,"file":"customRenders.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/Controls/customRenders.tsx"],"names":[],"mappings":";;AAAA,OAAO,EAA4B,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAEvE,OAAO,EAAC,MAAM,EAAE,IAAI,EAAC,kCAAyB;AAC9C,OAAO,EAAC,KAAK,EAAC,gCAA6B;AAC3C,OAAO,EACH,kBAAkB,GAErB,oDAAiD;AAClD,OAAO,EAAC,cAAc,EAAsB,4CAAyC;AAErF,OAAO,gBAAgB,CAAC;AAExB,MAAM,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;AAejC,MAAM,CAAC,MAAM,cAAc,GACvB,CAAC,EAAC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAC,EAAE,EAAE;AACtC,8CAA8C;AAC9C,CAAC,EAAwF,EAAE,EAAE;QAA5F,EAAC,GAAG,EAAE,WAAW,OAAuE,EAArE,oBAAoE,EAApE,EAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,OAAe,EAAV,SAAS,cAArD,kDAAsD,CAAD;IAAO,OAAA,CAC1F,KAAC,cAAc,IACX,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,GAAG,EACf,YAAY,EAAE;YACV,OAAO;YACP,SAAS;SACZ,EACD,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,EAAE,GACR,CACL,CAAA;CAAA,CAAC;AAEN,MAAM,CAAC,MAAM,YAAY,GAAqB,CAAC,EAI9C,EAAE,EAAE;QAJ0C,EAC3C,GAAG,EACH,QAAQ,OAEX,EADG,kBAAqF,EAArF,EAAa,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,OAAe,EAAV,SAAS,cAAxE,yDAAyE,CAAD;IAClF,OAAA,CACF,KAAC,SAAS,IACN,KAAK,EAAE,KAAK,EACZ,IAAI,EAAC,OAAO,EACZ,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAChC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,CAAC,CAAC,cAAc,CAAC,EAC5B,UAAU,EAAE,GAAG,EACf,YAAY,kBAAG,IAAI,EAAE,CAAC,IAAK,SAAS,IACtC,CACL,CAAA;CAAA,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAoB,EAAE,EAAE,CAAC,CAClD,KAAC,kBAAkB,IAAC,IAAI,EAAE,MAAyC,GAAI,CAC1E,CAAC","sourcesContent":["import {SelectOption, SelectProps, TextInput} from '@gravity-ui/uikit';\n\nimport {Keyset, i18n} from '../../../../i18n';\nimport {block} from '../../../../utils/cn';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport {CustomSwitcher, CustomSwitcherProps} from '../CustomSwitcher/CustomSwitcher';\n\nimport './Controls.scss';\n\nconst b = block('feed-controls');\n\ntype RenderSwitcherType = ({\n initial,\n list,\n defaultLabel,\n}: {\n initial: CustomSwitcherProps['initial'];\n list: CustomSwitcherProps['list'];\n defaultLabel: string;\n qa?: string;\n}) => SelectProps['renderControl'];\n\ntype RenderFilterType = SelectProps['renderFilter'];\n\nexport const renderSwitcher: RenderSwitcherType =\n ({initial, list, defaultLabel, qa}) =>\n // eslint-disable-next-line react/display-name\n ({ref, renderClear, triggerProps: {id, disabled, type, onClick, onKeyDown, ...a11yProps}}) => (\n <CustomSwitcher\n id={id}\n disabled={disabled}\n type={type}\n initial={initial}\n defaultLabel={defaultLabel}\n list={list}\n controlRef={ref}\n triggerProps={{\n onClick,\n onKeyDown,\n }}\n renderClear={renderClear}\n a11yProps={a11yProps}\n qa={qa}\n />\n );\n\nexport const renderFilter: RenderFilterType = ({\n ref,\n onChange,\n inputProps: {value, onKeyDown, onChange: _, size: __, placeholder: ___, ...a11yProps},\n}) => (\n <TextInput\n value={value}\n view=\"clear\"\n placeholder={i18n(Keyset.Search)}\n onUpdate={onChange}\n onKeyDown={onKeyDown}\n className={b('popup-filter')}\n controlRef={ref}\n controlProps={{size: 1, ...a11yProps}}\n />\n);\n\nexport const renderOption = (option: SelectOption) => (\n <CustomSelectOption data={option as CustomSelectOptionProps['data']} />\n);\n"]}
@@ -13,6 +13,7 @@ export type CustomSwitcherProps = {
13
13
  list: SelectItem[];
14
14
  controlRef: RenderControlParameters['ref'];
15
15
  a11yProps: RenderControlA11yProps;
16
+ qa?: string;
16
17
  } & Omit<RenderControlParameters, 'ref'> & Pick<TriggerProps, 'id' | 'disabled' | 'type'>;
17
- export declare const CustomSwitcher: ({ id, disabled, type, initial, defaultLabel, list, triggerProps, controlRef, renderClear, a11yProps, }: CustomSwitcherProps) => import("react/jsx-runtime").JSX.Element;
18
+ export declare const CustomSwitcher: ({ id, disabled, type, initial, defaultLabel, list, triggerProps, controlRef, renderClear, a11yProps, qa, }: CustomSwitcherProps) => import("react/jsx-runtime").JSX.Element;
18
19
  export {};
@@ -8,7 +8,7 @@ import './CustomSwitcher.css';
8
8
  const b = block('feed-custom-switcher');
9
9
  const ICON_SIZE = 12;
10
10
  const CLEAR_ICON_SIZE = 11;
11
- export const CustomSwitcher = ({ id, disabled, type, initial, defaultLabel, list, triggerProps, controlRef, renderClear, a11yProps, }) => {
11
+ export const CustomSwitcher = ({ id, disabled, type, initial, defaultLabel, list, triggerProps, controlRef, renderClear, a11yProps, qa, }) => {
12
12
  const itemsNames = React.useMemo(() => {
13
13
  const items = list
14
14
  .filter((item) => initial.includes(item.value))
@@ -17,7 +17,7 @@ export const CustomSwitcher = ({ id, disabled, type, initial, defaultLabel, list
17
17
  }, [defaultLabel, initial, list]);
18
18
  const hasCounter = itemsNames.length > 1;
19
19
  const contentElementId = useUniqId();
20
- return (_jsxs("div", { className: b('custom-switcher'), ref: controlRef, children: [_jsx("button", Object.assign({ id: id, disabled: disabled, type: type, onClick: triggerProps === null || triggerProps === void 0 ? void 0 : triggerProps.onClick, className: b('custom-switcher-element', { overlay: true }), onKeyDown: triggerProps === null || triggerProps === void 0 ? void 0 : triggerProps.onKeyDown }, a11yProps, { "aria-labelledby": contentElementId })), _jsx("div", { id: contentElementId, className: b('custom-switcher-element', { content: true }), "aria-hidden": true, children: itemsNames === null || itemsNames === void 0 ? void 0 : itemsNames.join(', ') }), renderClear &&
20
+ return (_jsxs("div", { className: b('custom-switcher'), ref: controlRef, children: [_jsx("button", Object.assign({ "data-qa": qa, id: id, disabled: disabled, type: type, onClick: triggerProps === null || triggerProps === void 0 ? void 0 : triggerProps.onClick, className: b('custom-switcher-element', { overlay: true }), onKeyDown: triggerProps === null || triggerProps === void 0 ? void 0 : triggerProps.onKeyDown }, a11yProps, { "aria-labelledby": contentElementId })), _jsx("div", { id: contentElementId, className: b('custom-switcher-element', { content: true }), "aria-hidden": true, children: itemsNames === null || itemsNames === void 0 ? void 0 : itemsNames.join(', ') }), renderClear &&
21
21
  renderClear({
22
22
  renderIcon: () => (_jsx(Icon, { data: Close, size: CLEAR_ICON_SIZE, className: b('clear') })),
23
23
  }), hasCounter && (_jsx("div", { className: b('custom-switcher-element', { counter: true }), children: itemsNames.length })), _jsx("div", { className: b('custom-switcher-element', { arrow: true }), children: _jsx(Icon, { data: DropdownArrow, size: ICON_SIZE, className: b('switcher-arrow') }) })] }));
@@ -1 +1 @@
1
- {"version":3,"file":"CustomSwitcher.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/CustomSwitcher/CustomSwitcher.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAC,IAAI,EAAe,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAE/D,OAAO,EAAC,aAAa,EAAC,2CAAwC;AAC9D,OAAO,EAAC,KAAK,EAAC,mCAAgC;AAC9C,OAAO,EAAC,KAAK,EAAC,gCAA6B;AAG3C,OAAO,sBAAsB,CAAC;AAE9B,MAAM,CAAC,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAoBxC,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAC3B,EAAE,EACF,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,GACS,EAAE,EAAE;IACtB,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAClC,MAAM,KAAK,GAAG,IAAI;aACb,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC9C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEjC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IAEzC,MAAM,gBAAgB,GAAG,SAAS,EAAE,CAAC;IAErC,OAAO,CACH,eAAK,SAAS,EAAE,CAAC,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,UAA6C,aAEpF,+BACI,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,OAAO,EAC9B,SAAS,EAAE,CAAC,CAAC,yBAAyB,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,EACxD,SAAS,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,SAAS,IAC9B,SAAS,uBACI,gBAAgB,IACnC,EACF,cACI,EAAE,EAAE,gBAAgB,EACpB,SAAS,EAAE,CAAC,CAAC,yBAAyB,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,iCAGvD,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,CAAC,IAAI,CAAC,GACrB,EACL,WAAW;gBACR,WAAW,CAAC;oBACR,UAAU,EAAE,GAAG,EAAE,CAAC,CACd,KAAC,IAAI,IAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,GAAI,CACtE;iBACJ,CAAC,EACL,UAAU,IAAI,CACX,cAAK,SAAS,EAAE,CAAC,CAAC,yBAAyB,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,YACxD,UAAU,CAAC,MAAM,GAChB,CACT,EACD,cAAK,SAAS,EAAE,CAAC,CAAC,yBAAyB,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,YACvD,KAAC,IAAI,IAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAI,GAC5E,IACJ,CACT,CAAC;AACN,CAAC,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {Icon, SelectProps, useUniqId} from '@gravity-ui/uikit';\n\nimport {DropdownArrow} from '../../../../icons/DropdownArrow';\nimport {Close} from '../../../../icons/Close';\nimport {block} from '../../../../utils/cn';\nimport {SelectItem} from '../Controls/Controls';\n\nimport './CustomSwitcher.scss';\n\nconst b = block('feed-custom-switcher');\n\ntype RenderControlParameters = Partial<Parameters<Required<SelectProps>['renderControl']>[0]>;\ntype TriggerProps = Required<RenderControlParameters>['triggerProps'];\n\ntype A11yKeys = {\n [K in keyof TriggerProps]-?: K extends `aria-${string}` | 'role' ? K : never;\n}[keyof TriggerProps];\n\ntype RenderControlA11yProps = Pick<TriggerProps, A11yKeys>;\n\nexport type CustomSwitcherProps = {\n initial: (string | number | null)[];\n defaultLabel: string;\n list: SelectItem[];\n controlRef: RenderControlParameters['ref'];\n a11yProps: RenderControlA11yProps;\n} & Omit<RenderControlParameters, 'ref'> &\n Pick<TriggerProps, 'id' | 'disabled' | 'type'>;\n\nconst ICON_SIZE = 12;\nconst CLEAR_ICON_SIZE = 11;\n\nexport const CustomSwitcher = ({\n id,\n disabled,\n type,\n initial,\n defaultLabel,\n list,\n triggerProps,\n controlRef,\n renderClear,\n a11yProps,\n}: CustomSwitcherProps) => {\n const itemsNames = React.useMemo(() => {\n const items = list\n .filter((item) => initial.includes(item.value))\n .map((item) => item.content);\n\n return items.length ? items : [defaultLabel];\n }, [defaultLabel, initial, list]);\n const hasCounter = itemsNames.length > 1;\n\n const contentElementId = useUniqId();\n\n return (\n <div className={b('custom-switcher')} ref={controlRef as React.LegacyRef<HTMLDivElement>}>\n {/* eslint-disable-next-line jsx-a11y/role-supports-aria-props */}\n <button\n id={id}\n disabled={disabled}\n type={type}\n onClick={triggerProps?.onClick}\n className={b('custom-switcher-element', {overlay: true})}\n onKeyDown={triggerProps?.onKeyDown}\n {...a11yProps}\n aria-labelledby={contentElementId}\n />\n <div\n id={contentElementId}\n className={b('custom-switcher-element', {content: true})}\n aria-hidden\n >\n {itemsNames?.join(', ')}\n </div>\n {renderClear &&\n renderClear({\n renderIcon: () => (\n <Icon data={Close} size={CLEAR_ICON_SIZE} className={b('clear')} />\n ),\n })}\n {hasCounter && (\n <div className={b('custom-switcher-element', {counter: true})}>\n {itemsNames.length}\n </div>\n )}\n <div className={b('custom-switcher-element', {arrow: true})}>\n <Icon data={DropdownArrow} size={ICON_SIZE} className={b('switcher-arrow')} />\n </div>\n </div>\n );\n};\n"]}
1
+ {"version":3,"file":"CustomSwitcher.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/CustomSwitcher/CustomSwitcher.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAC,IAAI,EAAe,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAE/D,OAAO,EAAC,aAAa,EAAC,2CAAwC;AAC9D,OAAO,EAAC,KAAK,EAAC,mCAAgC;AAC9C,OAAO,EAAC,KAAK,EAAC,gCAA6B;AAG3C,OAAO,sBAAsB,CAAC;AAE9B,MAAM,CAAC,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAqBxC,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAC3B,EAAE,EACF,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,EACT,EAAE,GACgB,EAAE,EAAE;IACtB,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAClC,MAAM,KAAK,GAAG,IAAI;aACb,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC9C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEjC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IAEzC,MAAM,gBAAgB,GAAG,SAAS,EAAE,CAAC;IAErC,OAAO,CACH,eAAK,SAAS,EAAE,CAAC,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,UAA6C,aAEpF,0CACa,EAAE,EACX,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,OAAO,EAC9B,SAAS,EAAE,CAAC,CAAC,yBAAyB,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,EACxD,SAAS,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,SAAS,IAC9B,SAAS,uBACI,gBAAgB,IACnC,EACF,cACI,EAAE,EAAE,gBAAgB,EACpB,SAAS,EAAE,CAAC,CAAC,yBAAyB,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,iCAGvD,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,CAAC,IAAI,CAAC,GACrB,EACL,WAAW;gBACR,WAAW,CAAC;oBACR,UAAU,EAAE,GAAG,EAAE,CAAC,CACd,KAAC,IAAI,IAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,GAAI,CACtE;iBACJ,CAAC,EACL,UAAU,IAAI,CACX,cAAK,SAAS,EAAE,CAAC,CAAC,yBAAyB,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,YACxD,UAAU,CAAC,MAAM,GAChB,CACT,EACD,cAAK,SAAS,EAAE,CAAC,CAAC,yBAAyB,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,YACvD,KAAC,IAAI,IAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAI,GAC5E,IACJ,CACT,CAAC;AACN,CAAC,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {Icon, SelectProps, useUniqId} from '@gravity-ui/uikit';\n\nimport {DropdownArrow} from '../../../../icons/DropdownArrow';\nimport {Close} from '../../../../icons/Close';\nimport {block} from '../../../../utils/cn';\nimport {SelectItem} from '../Controls/Controls';\n\nimport './CustomSwitcher.scss';\n\nconst b = block('feed-custom-switcher');\n\ntype RenderControlParameters = Partial<Parameters<Required<SelectProps>['renderControl']>[0]>;\ntype TriggerProps = Required<RenderControlParameters>['triggerProps'];\n\ntype A11yKeys = {\n [K in keyof TriggerProps]-?: K extends `aria-${string}` | 'role' ? K : never;\n}[keyof TriggerProps];\n\ntype RenderControlA11yProps = Pick<TriggerProps, A11yKeys>;\n\nexport type CustomSwitcherProps = {\n initial: (string | number | null)[];\n defaultLabel: string;\n list: SelectItem[];\n controlRef: RenderControlParameters['ref'];\n a11yProps: RenderControlA11yProps;\n qa?: string;\n} & Omit<RenderControlParameters, 'ref'> &\n Pick<TriggerProps, 'id' | 'disabled' | 'type'>;\n\nconst ICON_SIZE = 12;\nconst CLEAR_ICON_SIZE = 11;\n\nexport const CustomSwitcher = ({\n id,\n disabled,\n type,\n initial,\n defaultLabel,\n list,\n triggerProps,\n controlRef,\n renderClear,\n a11yProps,\n qa,\n}: CustomSwitcherProps) => {\n const itemsNames = React.useMemo(() => {\n const items = list\n .filter((item) => initial.includes(item.value))\n .map((item) => item.content);\n\n return items.length ? items : [defaultLabel];\n }, [defaultLabel, initial, list]);\n const hasCounter = itemsNames.length > 1;\n\n const contentElementId = useUniqId();\n\n return (\n <div className={b('custom-switcher')} ref={controlRef as React.LegacyRef<HTMLDivElement>}>\n {/* eslint-disable-next-line jsx-a11y/role-supports-aria-props */}\n <button\n data-qa={qa}\n id={id}\n disabled={disabled}\n type={type}\n onClick={triggerProps?.onClick}\n className={b('custom-switcher-element', {overlay: true})}\n onKeyDown={triggerProps?.onKeyDown}\n {...a11yProps}\n aria-labelledby={contentElementId}\n />\n <div\n id={contentElementId}\n className={b('custom-switcher-element', {content: true})}\n aria-hidden\n >\n {itemsNames?.join(', ')}\n </div>\n {renderClear &&\n renderClear({\n renderIcon: () => (\n <Icon data={Close} size={CLEAR_ICON_SIZE} className={b('clear')} />\n ),\n })}\n {hasCounter && (\n <div className={b('custom-switcher-element', {counter: true})}>\n {itemsNames.length}\n </div>\n )}\n <div className={b('custom-switcher-element', {arrow: true})}>\n <Icon data={DropdownArrow} size={ICON_SIZE} className={b('switcher-arrow')} />\n </div>\n </div>\n );\n};\n"]}
@@ -38,7 +38,7 @@ type GetBreadcrumbsProps = {
38
38
  blogPath: string;
39
39
  };
40
40
  export declare const getBlogPath: (pathPrefix: string) => string;
41
- export declare const getBreadcrumbs: ({ tags, blogPath }: GetBreadcrumbsProps) => HeaderBreadCrumbsProps;
41
+ export declare function getBreadcrumbs({ tags, blogPath }: GetBreadcrumbsProps): HeaderBreadCrumbsProps;
42
42
  export declare const getMergedAnalyticsEvents: (analyticEvents: AnalyticsEventsProp, existringEvents?: AnalyticsEventsProp) => {
43
43
  name: string;
44
44
  type?: string;
@@ -52,7 +52,7 @@ export const getBlogPath = (pathPrefix) => {
52
52
  const prefix = pathPrefix ? `/${pathPrefix}` : '';
53
53
  return `${prefix}/blog`;
54
54
  };
55
- export const getBreadcrumbs = ({ tags, blogPath }) => {
55
+ export function getBreadcrumbs({ tags, blogPath }) {
56
56
  const breadcrumbs = {
57
57
  items: [{ text: i18n(Keyset.TitleBreadcrumbs), url: blogPath }],
58
58
  theme: 'light',
@@ -64,7 +64,7 @@ export const getBreadcrumbs = ({ tags, blogPath }) => {
64
64
  breadcrumbs.items.push({ text: tag.name, url: tag.url });
65
65
  }
66
66
  return breadcrumbs;
67
- };
67
+ }
68
68
  const getArrayOfEvents = (events) => {
69
69
  if (!events) {
70
70
  return [];
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"../../../src","sources":["utils/common.ts"],"names":[],"mappings":"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","sourcesContent":["import {format, parse} from 'url';\n\nimport {\n AnalyticsEvent,\n AnalyticsEventsProp,\n ContentBlockProps,\n HeaderBreadCrumbsProps,\n} from '@gravity-ui/page-constructor';\nimport camelCase from 'lodash/camelCase';\nimport debounce from 'lodash/debounce';\nimport flatten from 'lodash/flatten';\nimport memoize from 'lodash/memoize';\n\nimport {\n CONTENT_DEFAULT_COL_SIZES,\n CONTENT_DEFAULT_SIZE,\n CONTENT_DEFAULT_THEME,\n DEFAULT_PAGE,\n DEFAULT_ROWS_PER_PAGE,\n} from '../blocks/constants';\nimport {RouterContextProps} from '../contexts/RouterContext';\nimport {Keyset, i18n} from '../i18n';\nimport {GetPostsRequest, Query, Tag} from '../models/common';\nimport {AnalyticsCounter} from '../counters/utils';\n\nconst QA_ATTRIBUTES_KEYS = ['container', 'content', 'wrapper', 'image', 'button'];\n\nexport interface QueryParam {\n name: string;\n value?: string | number | null;\n}\n\nexport interface RouterActionOptions {\n shallow?: boolean;\n}\n\nexport function getAbsolutePath(router: RouterContextProps, url?: string) {\n if (!router || !router.pathname) {\n return url ?? '';\n }\n\n const parsed = parse(url || router.as || '');\n\n return format({\n ...parsed,\n protocol: parsed.protocol || 'https',\n hostname: parsed.hostname || router.hostname,\n pathname: parsed.pathname || router.pathname,\n });\n}\n\nexport const getPageSearchParams = (query: Query = {}) => {\n const searchParams = new URLSearchParams();\n\n Object.entries(query).forEach(([key, value]) => {\n searchParams.set(key, String(value));\n });\n\n return searchParams;\n};\n\nexport const scrollToHash = (hash: string, browser?: string) => {\n if (!hash) {\n return;\n }\n\n const element = document.getElementById(hash);\n\n if (!element) {\n return;\n }\n\n setTimeout(\n () => element.scrollIntoView({behavior: browser === 'Yandex' ? 'auto' : 'smooth'}),\n 0,\n );\n};\n\ntype CloudListTagStub = {};\n\nexport const getTags = memoize((tags: Tag[], blogPath: string) => {\n return tags.map(({slug, ...tag}) => {\n const queryParams = new URLSearchParams();\n queryParams.set('tags', slug);\n\n return {\n ...tag,\n id: slug,\n url: `${blogPath}?${queryParams}`,\n } as CloudListTagStub;\n });\n});\n\nconst stub = (postId: number | string) => postId;\n\nexport const postLikeStatus = debounce((postId: number | string, hasUserLike: boolean) => {\n (hasUserLike ? stub : stub)(postId);\n}, 300);\n\nexport const updateContentSizes = ({size, colSizes, theme, ...contentData}: ContentBlockProps) => ({\n ...contentData,\n size: size || CONTENT_DEFAULT_SIZE,\n colSizes: colSizes || CONTENT_DEFAULT_COL_SIZES,\n theme: theme || CONTENT_DEFAULT_THEME,\n});\n\ntype GetBreadcrumbsProps = {\n tags?: Tag[];\n blogPath: string;\n};\n\nexport const getBlogPath = (pathPrefix: string) => {\n const prefix = pathPrefix ? `/${pathPrefix}` : '';\n return `${prefix}/blog`;\n};\n\nexport const getBreadcrumbs = ({tags, blogPath}: GetBreadcrumbsProps) => {\n const breadcrumbs: HeaderBreadCrumbsProps = {\n items: [{text: i18n(Keyset.TitleBreadcrumbs), url: blogPath}],\n theme: 'light',\n };\n\n if (tags?.length) {\n const localizedTags = getTags(tags, blogPath);\n const tag = localizedTags[0];\n // @ts-ignore todo fix\n breadcrumbs.items.push({text: tag.name, url: tag.url});\n }\n\n return breadcrumbs;\n};\n\nconst getArrayOfEvents = (events?: AnalyticsEventsProp) => {\n if (!events) {\n return [];\n }\n\n if (Array.isArray(events)) {\n return events;\n }\n\n return [events];\n};\n\nexport const getMergedAnalyticsEvents = (\n analyticEvents: AnalyticsEventsProp,\n existringEvents?: AnalyticsEventsProp,\n) => {\n const eventsAsArray = getArrayOfEvents(analyticEvents);\n const existingAsArray = getArrayOfEvents(existringEvents);\n\n return eventsAsArray.concat(existingAsArray);\n};\n\nexport const getFeedQueryParams = (queryString: Query, pageNumber?: number): GetPostsRequest => {\n const queryParams = getPageSearchParams(queryString);\n const tags = queryParams.get('tags') || undefined;\n const page = pageNumber || Number(queryParams.get('page') || DEFAULT_PAGE);\n const perPage = Number(queryParams.get('perPage') || DEFAULT_ROWS_PER_PAGE);\n const savedOnly = queryParams.get('savedOnly') === 'true';\n const search = queryParams.get('search') || undefined;\n const serviceIds = queryParams.get('services') || undefined;\n\n return {tags, page, perPage, savedOnly, search, services: serviceIds};\n};\n\nexport const scrollOnPageChange = (containerId: string) => {\n const cardsContainerEl = document.getElementById(containerId);\n const y = cardsContainerEl?.getBoundingClientRect()?.y || 0;\n\n if (y < 0) {\n scrollToHash(containerId);\n }\n};\n\nexport const getQaAttributes = (qa?: string, ...customKeys: (string | Array<string>)[]) => {\n const attributes: Record<string, string> = {};\n\n if (qa) {\n const keys = QA_ATTRIBUTES_KEYS.concat(flatten(customKeys));\n\n keys.forEach((key) => {\n attributes[camelCase(key)] = `${qa}-${key}`;\n });\n\n attributes.default = qa;\n }\n\n return attributes;\n};\n\ntype PrepareAnalyticsEventArgs = {\n name: string;\n counter?: AnalyticsCounter;\n options?: Record<string, string | number>;\n};\n\nexport const prepareAnalyticsEvent = ({\n name,\n counter = AnalyticsCounter.Main,\n options = {},\n}: PrepareAnalyticsEventArgs): AnalyticsEvent => ({\n ...options,\n name,\n counters: {\n include: [counter],\n },\n});\n"]}
1
+ {"version":3,"file":"common.js","sourceRoot":"../../../src","sources":["utils/common.ts"],"names":[],"mappings":"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","sourcesContent":["import {format, parse} from 'url';\n\nimport {\n AnalyticsEvent,\n AnalyticsEventsProp,\n ContentBlockProps,\n HeaderBreadCrumbsProps,\n} from '@gravity-ui/page-constructor';\nimport camelCase from 'lodash/camelCase';\nimport debounce from 'lodash/debounce';\nimport flatten from 'lodash/flatten';\nimport memoize from 'lodash/memoize';\n\nimport {\n CONTENT_DEFAULT_COL_SIZES,\n CONTENT_DEFAULT_SIZE,\n CONTENT_DEFAULT_THEME,\n DEFAULT_PAGE,\n DEFAULT_ROWS_PER_PAGE,\n} from '../blocks/constants';\nimport {RouterContextProps} from '../contexts/RouterContext';\nimport {Keyset, i18n} from '../i18n';\nimport {GetPostsRequest, Query, Tag} from '../models/common';\nimport {AnalyticsCounter} from '../counters/utils';\n\nconst QA_ATTRIBUTES_KEYS = ['container', 'content', 'wrapper', 'image', 'button'];\n\nexport interface QueryParam {\n name: string;\n value?: string | number | null;\n}\n\nexport interface RouterActionOptions {\n shallow?: boolean;\n}\n\nexport function getAbsolutePath(router: RouterContextProps, url?: string) {\n if (!router || !router.pathname) {\n return url ?? '';\n }\n\n const parsed = parse(url || router.as || '');\n\n return format({\n ...parsed,\n protocol: parsed.protocol || 'https',\n hostname: parsed.hostname || router.hostname,\n pathname: parsed.pathname || router.pathname,\n });\n}\n\nexport const getPageSearchParams = (query: Query = {}) => {\n const searchParams = new URLSearchParams();\n\n Object.entries(query).forEach(([key, value]) => {\n searchParams.set(key, String(value));\n });\n\n return searchParams;\n};\n\nexport const scrollToHash = (hash: string, browser?: string) => {\n if (!hash) {\n return;\n }\n\n const element = document.getElementById(hash);\n\n if (!element) {\n return;\n }\n\n setTimeout(\n () => element.scrollIntoView({behavior: browser === 'Yandex' ? 'auto' : 'smooth'}),\n 0,\n );\n};\n\ntype CloudListTagStub = {};\n\nexport const getTags = memoize((tags: Tag[], blogPath: string) => {\n return tags.map(({slug, ...tag}) => {\n const queryParams = new URLSearchParams();\n queryParams.set('tags', slug);\n\n return {\n ...tag,\n id: slug,\n url: `${blogPath}?${queryParams}`,\n } as CloudListTagStub;\n });\n});\n\nconst stub = (postId: number | string) => postId;\n\nexport const postLikeStatus = debounce((postId: number | string, hasUserLike: boolean) => {\n (hasUserLike ? stub : stub)(postId);\n}, 300);\n\nexport const updateContentSizes = ({size, colSizes, theme, ...contentData}: ContentBlockProps) => ({\n ...contentData,\n size: size || CONTENT_DEFAULT_SIZE,\n colSizes: colSizes || CONTENT_DEFAULT_COL_SIZES,\n theme: theme || CONTENT_DEFAULT_THEME,\n});\n\ntype GetBreadcrumbsProps = {\n tags?: Tag[];\n blogPath: string;\n};\n\nexport const getBlogPath = (pathPrefix: string) => {\n const prefix = pathPrefix ? `/${pathPrefix}` : '';\n return `${prefix}/blog`;\n};\n\nexport function getBreadcrumbs({tags, blogPath}: GetBreadcrumbsProps) {\n const breadcrumbs: HeaderBreadCrumbsProps = {\n items: [{text: i18n(Keyset.TitleBreadcrumbs), url: blogPath}],\n theme: 'light',\n };\n\n if (tags?.length) {\n const localizedTags = getTags(tags, blogPath);\n const tag = localizedTags[0];\n // @ts-ignore todo fix\n breadcrumbs.items.push({text: tag.name, url: tag.url});\n }\n\n return breadcrumbs;\n}\n\nconst getArrayOfEvents = (events?: AnalyticsEventsProp) => {\n if (!events) {\n return [];\n }\n\n if (Array.isArray(events)) {\n return events;\n }\n\n return [events];\n};\n\nexport const getMergedAnalyticsEvents = (\n analyticEvents: AnalyticsEventsProp,\n existringEvents?: AnalyticsEventsProp,\n) => {\n const eventsAsArray = getArrayOfEvents(analyticEvents);\n const existingAsArray = getArrayOfEvents(existringEvents);\n\n return eventsAsArray.concat(existingAsArray);\n};\n\nexport const getFeedQueryParams = (queryString: Query, pageNumber?: number): GetPostsRequest => {\n const queryParams = getPageSearchParams(queryString);\n const tags = queryParams.get('tags') || undefined;\n const page = pageNumber || Number(queryParams.get('page') || DEFAULT_PAGE);\n const perPage = Number(queryParams.get('perPage') || DEFAULT_ROWS_PER_PAGE);\n const savedOnly = queryParams.get('savedOnly') === 'true';\n const search = queryParams.get('search') || undefined;\n const serviceIds = queryParams.get('services') || undefined;\n\n return {tags, page, perPage, savedOnly, search, services: serviceIds};\n};\n\nexport const scrollOnPageChange = (containerId: string) => {\n const cardsContainerEl = document.getElementById(containerId);\n const y = cardsContainerEl?.getBoundingClientRect()?.y || 0;\n\n if (y < 0) {\n scrollToHash(containerId);\n }\n};\n\nexport const getQaAttributes = (qa?: string, ...customKeys: (string | Array<string>)[]) => {\n const attributes: Record<string, string> = {};\n\n if (qa) {\n const keys = QA_ATTRIBUTES_KEYS.concat(flatten(customKeys));\n\n keys.forEach((key) => {\n attributes[camelCase(key)] = `${qa}-${key}`;\n });\n\n attributes.default = qa;\n }\n\n return attributes;\n};\n\ntype PrepareAnalyticsEventArgs = {\n name: string;\n counter?: AnalyticsCounter;\n options?: Record<string, string | number>;\n};\n\nexport const prepareAnalyticsEvent = ({\n name,\n counter = AnalyticsCounter.Main,\n options = {},\n}: PrepareAnalyticsEventArgs): AnalyticsEvent => ({\n ...options,\n name,\n counters: {\n include: [counter],\n },\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gravity-ui/blog-constructor",
3
- "version": "7.0.0-beta.1",
3
+ "version": "7.0.0-beta.3",
4
4
  "description": "Gravity UI Blog Constructor",
5
5
  "license": "MIT",
6
6
  "type": "commonjs",