@gravity-ui/blog-constructor 10.0.0 → 10.0.1-alpha.1

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 (102) hide show
  1. package/build/cjs/blocks/Feed/Feed.d.ts +1 -1
  2. package/build/cjs/blocks/Feed/Feed.js +2 -2
  3. package/build/cjs/blocks/Feed/Feed.js.map +1 -1
  4. package/build/cjs/components/FeedHeader/FeedHeader.d.ts +1 -1
  5. package/build/cjs/components/FeedHeader/FeedHeader.js +2 -2
  6. package/build/cjs/components/FeedHeader/FeedHeader.js.map +1 -1
  7. package/build/cjs/components/FeedHeader/components/Controls/Controls.css +14 -45
  8. package/build/cjs/components/FeedHeader/components/Controls/Controls.d.ts +4 -3
  9. package/build/cjs/components/FeedHeader/components/Controls/Controls.js +7 -33
  10. package/build/cjs/components/FeedHeader/components/Controls/Controls.js.map +1 -1
  11. package/build/cjs/components/FeedHeader/components/FilterControl/FilterControl.css +17 -0
  12. package/build/cjs/components/FeedHeader/components/FilterControl/FilterControl.d.ts +7 -0
  13. package/build/cjs/components/FeedHeader/components/FilterControl/FilterControl.js +38 -0
  14. package/build/cjs/components/FeedHeader/components/FilterControl/FilterControl.js.map +1 -0
  15. package/build/cjs/components/FeedHeader/components/SavedOnlyFilter/SavedOnlyFilter.css +22 -0
  16. package/build/cjs/components/FeedHeader/components/SavedOnlyFilter/SavedOnlyFilter.d.ts +6 -0
  17. package/build/cjs/components/FeedHeader/components/SavedOnlyFilter/SavedOnlyFilter.js +23 -0
  18. package/build/cjs/components/FeedHeader/components/SavedOnlyFilter/SavedOnlyFilter.js.map +1 -0
  19. package/build/cjs/components/FeedHeader/components/SearchFilter/SearchFilter.css +6 -0
  20. package/build/cjs/components/FeedHeader/components/SearchFilter/SearchFilter.d.ts +7 -0
  21. package/build/cjs/components/FeedHeader/components/SearchFilter/SearchFilter.js +13 -0
  22. package/build/cjs/components/FeedHeader/components/SearchFilter/SearchFilter.js.map +1 -0
  23. package/build/cjs/components/FeedHeader/components/SelectFilter/SelectFilter.d.ts +14 -0
  24. package/build/cjs/components/FeedHeader/components/{Filters/Filter.js → SelectFilter/SelectFilter.js} +14 -22
  25. package/build/cjs/components/FeedHeader/components/SelectFilter/SelectFilter.js.map +1 -0
  26. package/build/cjs/components/FeedHeader/components/SelectFilter/customRenders.js.map +1 -0
  27. package/build/cjs/constructor/blocksMap.d.ts +1 -1
  28. package/build/cjs/containers/BlogPage/BlogPage.d.ts +2 -2
  29. package/build/cjs/containers/BlogPage/BlogPage.js.map +1 -1
  30. package/build/cjs/contexts/FeedContext.d.ts +2 -2
  31. package/build/cjs/contexts/FeedContext.js.map +1 -1
  32. package/build/cjs/hooks/useExtendedComponentMap.d.ts +1 -1
  33. package/build/cjs/i18n/index.d.ts +1 -0
  34. package/build/cjs/i18n/index.js +3 -0
  35. package/build/cjs/i18n/index.js.map +1 -1
  36. package/build/cjs/models/blocks.d.ts +1 -0
  37. package/build/cjs/models/blocks.js.map +1 -1
  38. package/build/cjs/models/common.d.ts +28 -3
  39. package/build/cjs/models/common.js +11 -0
  40. package/build/cjs/models/common.js.map +1 -1
  41. package/build/cjs/utils/common.d.ts +2 -2
  42. package/build/cjs/utils/common.js +3 -1
  43. package/build/cjs/utils/common.js.map +1 -1
  44. package/build/esm/blocks/Feed/Feed.d.ts +1 -1
  45. package/build/esm/blocks/Feed/Feed.js +2 -2
  46. package/build/esm/blocks/Feed/Feed.js.map +1 -1
  47. package/build/esm/components/FeedHeader/FeedHeader.d.ts +1 -1
  48. package/build/esm/components/FeedHeader/FeedHeader.js +2 -2
  49. package/build/esm/components/FeedHeader/FeedHeader.js.map +1 -1
  50. package/build/esm/components/FeedHeader/components/Controls/Controls.css +14 -45
  51. package/build/esm/components/FeedHeader/components/Controls/Controls.d.ts +4 -3
  52. package/build/esm/components/FeedHeader/components/Controls/Controls.js +9 -35
  53. package/build/esm/components/FeedHeader/components/Controls/Controls.js.map +1 -1
  54. package/build/esm/components/FeedHeader/components/FilterControl/FilterControl.css +17 -0
  55. package/build/esm/components/FeedHeader/components/FilterControl/FilterControl.d.ts +8 -0
  56. package/build/esm/components/FeedHeader/components/FilterControl/FilterControl.js +34 -0
  57. package/build/esm/components/FeedHeader/components/FilterControl/FilterControl.js.map +1 -0
  58. package/build/esm/components/FeedHeader/components/SavedOnlyFilter/SavedOnlyFilter.css +22 -0
  59. package/build/esm/components/FeedHeader/components/SavedOnlyFilter/SavedOnlyFilter.d.ts +7 -0
  60. package/build/esm/components/FeedHeader/components/SavedOnlyFilter/SavedOnlyFilter.js +19 -0
  61. package/build/esm/components/FeedHeader/components/SavedOnlyFilter/SavedOnlyFilter.js.map +1 -0
  62. package/build/esm/components/FeedHeader/components/SearchFilter/SearchFilter.css +6 -0
  63. package/build/esm/components/FeedHeader/components/SearchFilter/SearchFilter.d.ts +8 -0
  64. package/build/esm/components/FeedHeader/components/SearchFilter/SearchFilter.js +10 -0
  65. package/build/esm/components/FeedHeader/components/SearchFilter/SearchFilter.js.map +1 -0
  66. package/build/esm/components/FeedHeader/components/SelectFilter/SelectFilter.d.ts +15 -0
  67. package/build/esm/components/FeedHeader/components/{Filters/Filter.js → SelectFilter/SelectFilter.js} +13 -21
  68. package/build/esm/components/FeedHeader/components/SelectFilter/SelectFilter.js.map +1 -0
  69. package/build/esm/components/FeedHeader/components/SelectFilter/customRenders.js.map +1 -0
  70. package/build/esm/constructor/blocksMap.d.ts +1 -1
  71. package/build/esm/containers/BlogPage/BlogPage.d.ts +2 -2
  72. package/build/esm/containers/BlogPage/BlogPage.js.map +1 -1
  73. package/build/esm/contexts/FeedContext.d.ts +2 -2
  74. package/build/esm/contexts/FeedContext.js.map +1 -1
  75. package/build/esm/hooks/useExtendedComponentMap.d.ts +1 -1
  76. package/build/esm/i18n/index.d.ts +1 -0
  77. package/build/esm/i18n/index.js +3 -0
  78. package/build/esm/i18n/index.js.map +1 -1
  79. package/build/esm/models/blocks.d.ts +1 -0
  80. package/build/esm/models/blocks.js.map +1 -1
  81. package/build/esm/models/common.d.ts +28 -3
  82. package/build/esm/models/common.js +10 -0
  83. package/build/esm/models/common.js.map +1 -1
  84. package/build/esm/utils/common.d.ts +2 -2
  85. package/build/esm/utils/common.js +3 -1
  86. package/build/esm/utils/common.js.map +1 -1
  87. package/package.json +1 -1
  88. package/server/models/blocks.d.ts +1 -0
  89. package/server/models/common.d.ts +28 -3
  90. package/server/models/common.js +11 -0
  91. package/build/cjs/components/FeedHeader/components/Filters/Filter.d.ts +0 -8
  92. package/build/cjs/components/FeedHeader/components/Filters/Filter.js.map +0 -1
  93. package/build/cjs/components/FeedHeader/components/Filters/customRenders.js.map +0 -1
  94. package/build/esm/components/FeedHeader/components/Filters/Filter.d.ts +0 -9
  95. package/build/esm/components/FeedHeader/components/Filters/Filter.js.map +0 -1
  96. package/build/esm/components/FeedHeader/components/Filters/customRenders.js.map +0 -1
  97. /package/build/cjs/components/FeedHeader/components/{Filters/Filter.css → SelectFilter/SelectFilter.css} +0 -0
  98. /package/build/cjs/components/FeedHeader/components/{Filters → SelectFilter}/customRenders.d.ts +0 -0
  99. /package/build/cjs/components/FeedHeader/components/{Filters → SelectFilter}/customRenders.js +0 -0
  100. /package/build/esm/components/FeedHeader/components/{Filters/Filter.css → SelectFilter/SelectFilter.css} +0 -0
  101. /package/build/esm/components/FeedHeader/components/{Filters → SelectFilter}/customRenders.d.ts +0 -0
  102. /package/build/esm/components/FeedHeader/components/{Filters → SelectFilter}/customRenders.js +0 -0
@@ -5,58 +5,27 @@ unpredictable css rules order in build */
5
5
  display: flex;
6
6
  flex-direction: column;
7
7
  border-radius: var(--bc-border-radius);
8
- padding-bottom: 20px;
8
+ padding-bottom: 32px;
9
9
  z-index: 10;
10
10
  }
11
- .bc-feed-controls__header-item {
12
- display: flex;
13
- justify-content: center;
14
- flex-wrap: wrap;
15
- }
16
- .bc-feed-controls__header-item_title {
11
+ .bc-feed-controls__header-title {
17
12
  font-size: var(--g-text-display-4-font-size);
18
13
  line-height: var(--g-text-display-4-line-height);
14
+ text-align: center;
19
15
  padding-top: 112px;
20
16
  padding-bottom: 96px;
21
17
  }
22
- .bc-feed-controls__search {
23
- width: 100%;
24
- max-width: 100%;
25
- }
26
- .bc-feed-controls__filter-item {
27
- margin-right: 8px;
28
- margin-left: 8px;
29
- margin-bottom: 12px;
30
- min-width: 230px;
31
- flex-grow: 1;
32
- }
33
- @media (min-width: 577px) {
34
- .bc-feed-controls__filter-item {
35
- max-width: 240px;
36
- }
37
- }
38
- .bc-feed-controls__filter-item_width-auto {
39
- width: auto;
40
- min-width: auto;
41
- flex-grow: 0;
42
- }
43
- .bc-feed-controls__saved-only-button_savedOnly.bc-feed-controls__saved-only-button_savedOnly {
44
- --g-button-background-color: var(--pc-monochrome-button-background-color);
45
- --g-button-background-color-hover: var(--pc-monochrome-button-background-color-hover);
18
+ .bc-feed-controls__header-title.bc-feed-controls__header-item_reset-margin {
19
+ margin: 0;
46
20
  }
47
- .bc-feed-controls__saved-only-button_savedOnly.bc-feed-controls__saved-only-button_savedOnly, .bc-feed-controls__saved-only-button_savedOnly.bc-feed-controls__saved-only-button_savedOnly:link, .bc-feed-controls__saved-only-button_savedOnly.bc-feed-controls__saved-only-button_savedOnly:visited, .bc-feed-controls__saved-only-button_savedOnly.bc-feed-controls__saved-only-button_savedOnly:active, .bc-feed-controls__saved-only-button_savedOnly.bc-feed-controls__saved-only-button_savedOnly:focus {
48
- color: var(--pc-monochrome-button-color);
49
- }
50
- .bc-feed-controls__saved-only-button_savedOnly.bc-feed-controls__saved-only-button_savedOnly:hover {
51
- color: var(--pc-monochrome-button-color);
52
- }
53
-
54
- .bc-feed-controls__saved-only-button_savedOnly:focus {
55
- color: var(--g-color-base-background);
56
- }
57
- .bc-feed-controls__icon {
58
- color: var(--g-color-base-brand);
21
+ .bc-feed-controls__header-filters {
22
+ display: flex;
23
+ gap: 16px;
24
+ flex-direction: column;
59
25
  }
60
- .bc-feed-controls__icon_savedOnly {
61
- color: var(--g-color-base-background);
26
+ .bc-feed-controls__header-filters-row {
27
+ display: flex;
28
+ justify-content: center;
29
+ flex-wrap: wrap;
30
+ gap: 16px;
62
31
  }
@@ -1,9 +1,10 @@
1
- import { FetchArgs, FilterConfig, Query } from "../../../../models/common.js";
1
+ import { FetchArgs, FiltersConfig, Query } from "../../../../models/common.js";
2
2
  import './Controls.css';
3
3
  export type ControlsProps = {
4
4
  handleLoadData: (props: FetchArgs) => void;
5
- filters?: FilterConfig[];
5
+ filters?: FiltersConfig;
6
6
  queryParams: Query;
7
7
  title?: string;
8
+ resetTitleMargin?: boolean;
8
9
  };
9
- export declare const Controls: ({ handleLoadData, filters, queryParams, title, }: ControlsProps) => import("react/jsx-runtime").JSX.Element;
10
+ export declare const Controls: ({ handleLoadData, filters, queryParams, title, resetTitleMargin, }: ControlsProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,44 +1,18 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import * as React from 'react';
3
- import { Bookmark } from '@gravity-ui/icons';
4
- import { useAnalytics } from '@gravity-ui/page-constructor';
5
- import { Button, Icon, MobileProvider } from '@gravity-ui/uikit';
6
- import { LikesContext } from "../../../../contexts/LikesContext.js";
3
+ import { MobileProvider } from '@gravity-ui/uikit';
7
4
  import { Keyset, i18n } from "../../../../i18n/index.js";
8
- import { DefaultEventNames } from "../../../../models/common.js";
5
+ import { normalizeFiltersToRows } from "../../../../models/common.js";
9
6
  import { block } from "../../../../utils/cn.js";
10
- import { Search } from "../../../Search/Search.js";
11
- import { Filter } from "../Filters/Filter.js";
7
+ import { FilterControl } from "../FilterControl/FilterControl.js";
12
8
  import './Controls.css';
13
9
  const b = block('feed-controls');
14
- const ICON_SIZE = 16;
15
10
  const DEFAULT_PAGE = 1;
16
- export const Controls = ({ handleLoadData, filters = [], queryParams, title = i18n(Keyset.Title), }) => {
17
- const { hasLikes } = React.useContext(LikesContext);
18
- const handleAnalyticsSaveOnly = useAnalytics(DefaultEventNames.SaveOnly);
19
- const { savedOnly: savedOnlyInitial, search: searchInitial } = queryParams || {};
20
- const [savedOnly, setSavedOnly] = React.useState(savedOnlyInitial === 'true');
21
- const [search, setSearch] = React.useState(searchInitial);
22
- const handleSavedOnly = () => {
23
- handleAnalyticsSaveOnly();
24
- setSavedOnly(!savedOnly);
25
- handleLoadData({
26
- page: DEFAULT_PAGE,
27
- query: {
28
- savedOnly: savedOnly ? '' : 'true',
29
- search: '',
30
- page: DEFAULT_PAGE,
31
- },
32
- });
33
- };
34
- const handleSearch = React.useCallback((searchValue) => {
35
- setSearch(searchValue);
36
- handleLoadData({
37
- page: DEFAULT_PAGE,
38
- query: { search: searchValue, page: DEFAULT_PAGE },
39
- });
40
- }, [handleLoadData]);
41
- const handleFilterSelect = React.useCallback((query) => handleLoadData({ page: DEFAULT_PAGE, query: Object.assign({ page: DEFAULT_PAGE }, query) }), [handleLoadData]);
42
- return (_jsx(MobileProvider, { mobile: false, children: _jsxs("div", { className: b('header'), children: [_jsx("h1", { className: b('header-item', { title: true }), children: 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 }) }), filters.map((filter) => (_jsx(Filter, { filter: filter, initialValue: queryParams === null || queryParams === void 0 ? void 0 : queryParams[filter.queryParamName], onSelect: handleFilterSelect, className: b('filter-item') }, filter.queryParamName))), 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: Bookmark, size: ICON_SIZE, className: b('icon', { savedOnly }) }), i18n(Keyset.ActionSavedOnly)] }) })) : null] })] }) }));
11
+ export const Controls = ({ handleLoadData, filters = [], queryParams, title = i18n(Keyset.Title), resetTitleMargin, }) => {
12
+ const handleFilterChange = React.useCallback((query) => handleLoadData({ page: DEFAULT_PAGE, query: Object.assign({ page: DEFAULT_PAGE }, query) }), [handleLoadData]);
13
+ const rows = normalizeFiltersToRows(filters);
14
+ return (_jsx(MobileProvider, { mobile: false, children: _jsxs("div", { className: b('header'), children: [_jsx("h1", { className: b('header-title', { 'reset-margin': resetTitleMargin }), children: title }), _jsx("div", { className: b('header-filters'), children: rows.map((row, rowIndex) => (
15
+ // eslint-disable-next-line react/no-array-index-key
16
+ _jsx("div", { className: b('header-filters-row'), children: row.map((filter) => (_jsx(FilterControl, { filter: filter, initialValue: queryParams === null || queryParams === void 0 ? void 0 : queryParams[filter.queryParamName], onChange: handleFilterChange }, filter.queryParamName))) }, rowIndex))) })] }) }));
43
17
  };
44
18
  //# 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 {Bookmark} from '@gravity-ui/icons';\nimport {useAnalytics} from '@gravity-ui/page-constructor';\nimport {Button, Icon, MobileProvider} from '@gravity-ui/uikit';\n\nimport {LikesContext} from '../../../../contexts/LikesContext';\nimport {Keyset, i18n} from '../../../../i18n';\nimport {DefaultEventNames, FetchArgs, FilterConfig, Query} from '../../../../models/common';\nimport {block} from '../../../../utils/cn';\nimport {Search} from '../../../Search/Search';\nimport {Filter} from '../Filters/Filter';\n\nimport './Controls.scss';\n\nconst b = block('feed-controls');\n\nexport type ControlsProps = {\n handleLoadData: (props: FetchArgs) => void;\n filters?: FilterConfig[];\n queryParams: Query;\n title?: string;\n};\n\nconst ICON_SIZE = 16;\nconst DEFAULT_PAGE = 1;\n\nexport const Controls = ({\n handleLoadData,\n filters = [],\n queryParams,\n title = i18n(Keyset.Title),\n}: ControlsProps) => {\n const {hasLikes} = React.useContext(LikesContext);\n const handleAnalyticsSaveOnly = useAnalytics(DefaultEventNames.SaveOnly);\n\n const {savedOnly: savedOnlyInitial, search: searchInitial} = queryParams || {};\n\n const [savedOnly, setSavedOnly] = React.useState<boolean>(savedOnlyInitial === 'true');\n const [search, setSearch] = React.useState<string>(searchInitial as string);\n\n const handleSavedOnly = () => {\n handleAnalyticsSaveOnly();\n setSavedOnly(!savedOnly);\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {\n savedOnly: savedOnly ? '' : 'true',\n search: '',\n page: DEFAULT_PAGE,\n },\n });\n };\n\n const handleSearch = React.useCallback(\n (searchValue: string) => {\n setSearch(searchValue);\n\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {search: searchValue, page: DEFAULT_PAGE},\n });\n },\n [handleLoadData],\n );\n\n const handleFilterSelect = React.useCallback(\n (query: Query) =>\n handleLoadData({page: DEFAULT_PAGE, query: {page: DEFAULT_PAGE, ...query}}),\n [handleLoadData],\n );\n\n return (\n <MobileProvider mobile={false}>\n <div className={b('header')}>\n <h1 className={b('header-item', {title: true})}>{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\n {filters.map((filter) => (\n <Filter\n key={filter.queryParamName}\n filter={filter}\n initialValue={queryParams?.[filter.queryParamName]}\n onSelect={handleFilterSelect}\n className={b('filter-item')}\n />\n ))}\n\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={Bookmark}\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"]}
1
+ {"version":3,"file":"Controls.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/Controls/Controls.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAC,cAAc,EAAC,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAC,MAAM,EAAE,IAAI,EAAC,kCAAyB;AAC9C,OAAO,EAAkC,sBAAsB,EAAC,qCAAkC;AAClG,OAAO,EAAC,KAAK,EAAC,gCAA6B;AAC3C,OAAO,EAAC,aAAa,EAAC,0CAAuC;AAE7D,OAAO,gBAAgB,CAAC;AAExB,MAAM,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;AAUjC,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EACrB,cAAc,EACd,OAAO,GAAG,EAAE,EACZ,WAAW,EACX,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAC1B,gBAAgB,GACJ,EAAE,EAAE;IAChB,MAAM,kBAAkB,GAAG,KAAK,CAAC,WAAW,CACxC,CAAC,KAAY,EAAE,EAAE,CACb,cAAc,CAAC,EAAC,IAAI,EAAE,YAAY,EAAE,KAAK,kBAAG,IAAI,EAAE,YAAY,IAAK,KAAK,CAAC,EAAC,CAAC,EAC/E,CAAC,cAAc,CAAC,CACnB,CAAC;IAEF,MAAM,IAAI,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAE7C,OAAO,CACH,KAAC,cAAc,IAAC,MAAM,EAAE,KAAK,YACzB,eAAK,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,aACvB,aAAI,SAAS,EAAE,CAAC,CAAC,cAAc,EAAE,EAAC,cAAc,EAAE,gBAAgB,EAAC,CAAC,YAAG,KAAK,GAAM,EAClF,cAAK,SAAS,EAAE,CAAC,CAAC,gBAAgB,CAAC,YAC9B,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC;oBACzB,oDAAoD;oBACpD,cAAoB,SAAS,EAAE,CAAC,CAAC,oBAAoB,CAAC,YACjD,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACjB,KAAC,aAAa,IAEV,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAG,MAAM,CAAC,cAAc,CAAC,EAClD,QAAQ,EAAE,kBAAkB,IAHvB,MAAM,CAAC,cAAc,CAI5B,CACL,CAAC,IARI,QAAQ,CASZ,CACT,CAAC,GACA,IACJ,GACO,CACpB,CAAC;AACN,CAAC,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {MobileProvider} from '@gravity-ui/uikit';\n\nimport {Keyset, i18n} from '../../../../i18n';\nimport {FetchArgs, FiltersConfig, Query, normalizeFiltersToRows} from '../../../../models/common';\nimport {block} from '../../../../utils/cn';\nimport {FilterControl} from '../FilterControl/FilterControl';\n\nimport './Controls.scss';\n\nconst b = block('feed-controls');\n\nexport type ControlsProps = {\n handleLoadData: (props: FetchArgs) => void;\n filters?: FiltersConfig;\n queryParams: Query;\n title?: string;\n resetTitleMargin?: boolean;\n};\n\nconst DEFAULT_PAGE = 1;\n\nexport const Controls = ({\n handleLoadData,\n filters = [],\n queryParams,\n title = i18n(Keyset.Title),\n resetTitleMargin,\n}: ControlsProps) => {\n const handleFilterChange = React.useCallback(\n (query: Query) =>\n handleLoadData({page: DEFAULT_PAGE, query: {page: DEFAULT_PAGE, ...query}}),\n [handleLoadData],\n );\n\n const rows = normalizeFiltersToRows(filters);\n\n return (\n <MobileProvider mobile={false}>\n <div className={b('header')}>\n <h1 className={b('header-title', {'reset-margin': resetTitleMargin})}>{title}</h1>\n <div className={b('header-filters')}>\n {rows.map((row, rowIndex) => (\n // eslint-disable-next-line react/no-array-index-key\n <div key={rowIndex} className={b('header-filters-row')}>\n {row.map((filter) => (\n <FilterControl\n key={filter.queryParamName}\n filter={filter}\n initialValue={queryParams?.[filter.queryParamName]}\n onChange={handleFilterChange}\n />\n ))}\n </div>\n ))}\n </div>\n </div>\n </MobileProvider>\n );\n};\n"]}
@@ -0,0 +1,17 @@
1
+ /* use this for style redefinitions to awoid problems with
2
+ unpredictable css rules order in build */
3
+ .bc-filter-control {
4
+ flex: 230px 1 0;
5
+ min-width: 230px;
6
+ }
7
+ @media (min-width: 577px) {
8
+ .bc-filter-control {
9
+ max-width: 240px;
10
+ }
11
+ }
12
+ .bc-filter-control_width-auto {
13
+ width: auto;
14
+ min-width: auto;
15
+ flex-grow: 0;
16
+ flex-basis: auto;
17
+ }
@@ -0,0 +1,8 @@
1
+ import { FilterConfig, Query } from "../../../../models/common.js";
2
+ import './FilterControl.css';
3
+ export type FilterControlProps = {
4
+ filter: FilterConfig;
5
+ initialValue: string | number | null | undefined;
6
+ onChange: (query: Query) => void;
7
+ };
8
+ export declare const FilterControl: ({ filter, initialValue, onChange }: FilterControlProps) => import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,34 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { useAnalytics } from '@gravity-ui/page-constructor';
4
+ import { LikesContext } from "../../../../contexts/LikesContext.js";
5
+ import { block } from "../../../../utils/cn.js";
6
+ import { SavedOnlyFilter } from "../SavedOnlyFilter/SavedOnlyFilter.js";
7
+ import { SearchFilter } from "../SearchFilter/SearchFilter.js";
8
+ import { SelectFilter } from "../SelectFilter/SelectFilter.js";
9
+ import './FilterControl.css';
10
+ const b = block('filter-control');
11
+ export const FilterControl = ({ filter, initialValue, onChange }) => {
12
+ const handleAnalytics = useAnalytics();
13
+ const { hasLikes } = React.useContext(LikesContext);
14
+ const handleChange = React.useCallback((query) => {
15
+ if (filter.analyticsEvents) {
16
+ handleAnalytics(filter.analyticsEvents);
17
+ }
18
+ onChange(query);
19
+ }, [filter.analyticsEvents, handleAnalytics, onChange]);
20
+ if (filter.type === 'search') {
21
+ const { queryParamName, placeholder } = filter;
22
+ return (_jsx("div", { className: b(), children: _jsx(SearchFilter, { placeholder: placeholder, initialValue: initialValue, onChange: (value) => handleChange({ [queryParamName]: value }) }) }));
23
+ }
24
+ if (filter.type === 'savedOnly') {
25
+ const { queryParamName } = filter;
26
+ if (!hasLikes) {
27
+ return null;
28
+ }
29
+ return (_jsx("div", { className: b({ 'width-auto': true }), children: _jsx(SavedOnlyFilter, { initialValue: initialValue === 'true', onChange: (value) => handleChange({ [queryParamName]: value ? 'true' : '', search: '' }) }) }));
30
+ }
31
+ const { queryParamName, multiple, filterable, hasClear, placeholder, options, allLabel, qa } = filter;
32
+ return (_jsx("div", { className: b(), children: _jsx(SelectFilter, { multiple: multiple, filterable: filterable, hasClear: hasClear, placeholder: placeholder, options: options, allLabel: allLabel, qa: qa, initialValue: initialValue, onChange: (value) => handleChange({ [queryParamName]: value }) }) }));
33
+ };
34
+ //# sourceMappingURL=FilterControl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterControl.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/FilterControl/FilterControl.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAC,YAAY,EAAC,MAAM,8BAA8B,CAAC;AAE1D,OAAO,EAAC,YAAY,EAAC,6CAA0C;AAQ/D,OAAO,EAAC,KAAK,EAAC,gCAA6B;AAC3C,OAAO,EAAC,eAAe,EAAC,8CAA2C;AACnE,OAAO,EAAC,YAAY,EAAC,wCAAqC;AAC1D,OAAO,EAAC,YAAY,EAAC,wCAAqC;AAE1D,OAAO,qBAAqB,CAAC;AAE7B,MAAM,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC;AAQlC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAqB,EAAE,EAAE;IAClF,MAAM,eAAe,GAAG,YAAY,EAAE,CAAC;IACvC,MAAM,EAAC,QAAQ,EAAC,GAAG,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAElD,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAClC,CAAC,KAAY,EAAE,EAAE;QACb,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YACzB,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC5C,CAAC;QACD,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC,EACD,CAAC,MAAM,CAAC,eAAe,EAAE,eAAe,EAAE,QAAQ,CAAC,CACtD,CAAC;IAEF,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,EAAC,cAAc,EAAE,WAAW,EAAC,GAAG,MAA4B,CAAC;QACnE,OAAO,CACH,cAAK,SAAS,EAAE,CAAC,EAAE,YACf,KAAC,YAAY,IACT,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAkC,EAChD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,EAAC,CAAC,cAAc,CAAC,EAAE,KAAK,EAAU,CAAC,GACvE,GACA,CACT,CAAC;IACN,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9B,MAAM,EAAC,cAAc,EAAC,GAAG,MAA+B,CAAC;QAEzD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,CACH,cAAK,SAAS,EAAE,CAAC,CAAC,EAAC,YAAY,EAAE,IAAI,EAAC,CAAC,YACnC,KAAC,eAAe,IACZ,YAAY,EAAE,YAAY,KAAK,MAAM,EACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAChB,YAAY,CAAC,EAAC,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAU,CAAC,GAEhF,GACA,CACT,CAAC;IACN,CAAC;IAED,MAAM,EAAC,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAC,GACtF,MAA4B,CAAC;IAEjC,OAAO,CACH,cAAK,SAAS,EAAE,CAAC,EAAE,YACf,KAAC,YAAY,IACT,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAiC,EAC9C,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,EAAE,EAAE,EAAE,EACN,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,EAAC,CAAC,cAAc,CAAC,EAAE,KAAK,EAAU,CAAC,GACvE,GACA,CACT,CAAC;AACN,CAAC,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {useAnalytics} from '@gravity-ui/page-constructor';\n\nimport {LikesContext} from '../../../../contexts/LikesContext';\nimport {\n FilterConfig,\n Query,\n SavedOnlyFilterConfig,\n SearchFilterConfig,\n SelectFilterConfig,\n} from '../../../../models/common';\nimport {block} from '../../../../utils/cn';\nimport {SavedOnlyFilter} from '../SavedOnlyFilter/SavedOnlyFilter';\nimport {SearchFilter} from '../SearchFilter/SearchFilter';\nimport {SelectFilter} from '../SelectFilter/SelectFilter';\n\nimport './FilterControl.scss';\n\nconst b = block('filter-control');\n\nexport type FilterControlProps = {\n filter: FilterConfig;\n initialValue: string | number | null | undefined;\n onChange: (query: Query) => void;\n};\n\nexport const FilterControl = ({filter, initialValue, onChange}: FilterControlProps) => {\n const handleAnalytics = useAnalytics();\n const {hasLikes} = React.useContext(LikesContext);\n\n const handleChange = React.useCallback(\n (query: Query) => {\n if (filter.analyticsEvents) {\n handleAnalytics(filter.analyticsEvents);\n }\n onChange(query);\n },\n [filter.analyticsEvents, handleAnalytics, onChange],\n );\n\n if (filter.type === 'search') {\n const {queryParamName, placeholder} = filter as SearchFilterConfig;\n return (\n <div className={b()}>\n <SearchFilter\n placeholder={placeholder}\n initialValue={initialValue as string | undefined}\n onChange={(value) => handleChange({[queryParamName]: value} as Query)}\n />\n </div>\n );\n }\n\n if (filter.type === 'savedOnly') {\n const {queryParamName} = filter as SavedOnlyFilterConfig;\n\n if (!hasLikes) {\n return null;\n }\n\n return (\n <div className={b({'width-auto': true})}>\n <SavedOnlyFilter\n initialValue={initialValue === 'true'}\n onChange={(value) =>\n handleChange({[queryParamName]: value ? 'true' : '', search: ''} as Query)\n }\n />\n </div>\n );\n }\n\n const {queryParamName, multiple, filterable, hasClear, placeholder, options, allLabel, qa} =\n filter as SelectFilterConfig;\n\n return (\n <div className={b()}>\n <SelectFilter\n multiple={multiple}\n filterable={filterable}\n hasClear={hasClear}\n placeholder={placeholder as string | undefined}\n options={options}\n allLabel={allLabel}\n qa={qa}\n initialValue={initialValue}\n onChange={(value) => handleChange({[queryParamName]: value} as Query)}\n />\n </div>\n );\n};\n"]}
@@ -0,0 +1,22 @@
1
+ /* use this for style redefinitions to awoid problems with
2
+ unpredictable css rules order in build */
3
+ .bc-saved-only-filter__button_savedOnly.bc-saved-only-filter__button_savedOnly {
4
+ --g-button-background-color: var(--pc-monochrome-button-background-color);
5
+ --g-button-background-color-hover: var(--pc-monochrome-button-background-color-hover);
6
+ }
7
+ .bc-saved-only-filter__button_savedOnly.bc-saved-only-filter__button_savedOnly, .bc-saved-only-filter__button_savedOnly.bc-saved-only-filter__button_savedOnly:link, .bc-saved-only-filter__button_savedOnly.bc-saved-only-filter__button_savedOnly:visited, .bc-saved-only-filter__button_savedOnly.bc-saved-only-filter__button_savedOnly:active, .bc-saved-only-filter__button_savedOnly.bc-saved-only-filter__button_savedOnly:focus {
8
+ color: var(--pc-monochrome-button-color);
9
+ }
10
+ .bc-saved-only-filter__button_savedOnly.bc-saved-only-filter__button_savedOnly:hover {
11
+ color: var(--pc-monochrome-button-color);
12
+ }
13
+
14
+ .bc-saved-only-filter__button_savedOnly:focus {
15
+ color: var(--g-color-base-background);
16
+ }
17
+ .bc-saved-only-filter__icon {
18
+ color: var(--g-color-base-brand);
19
+ }
20
+ .bc-saved-only-filter__icon_savedOnly {
21
+ color: var(--g-color-base-background);
22
+ }
@@ -0,0 +1,7 @@
1
+ import './SavedOnlyFilter.css';
2
+ export type SavedOnlyFilterProps = {
3
+ initialValue: boolean;
4
+ onChange: (value: boolean) => void;
5
+ className?: string;
6
+ };
7
+ export declare const SavedOnlyFilter: ({ initialValue, onChange, className }: SavedOnlyFilterProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from 'react';
3
+ import { Bookmark } from '@gravity-ui/icons';
4
+ import { Button, Icon } from '@gravity-ui/uikit';
5
+ import { Keyset, i18n } from "../../../../i18n/index.js";
6
+ import { block } from "../../../../utils/cn.js";
7
+ import './SavedOnlyFilter.css';
8
+ const b = block('saved-only-filter');
9
+ const ICON_SIZE = 16;
10
+ export const SavedOnlyFilter = ({ initialValue, onChange, className }) => {
11
+ const [savedOnly, setSavedOnly] = React.useState(initialValue);
12
+ const handleChange = () => {
13
+ const next = !savedOnly;
14
+ setSavedOnly(next);
15
+ onChange(next);
16
+ };
17
+ return (_jsx("div", { className: className, children: _jsxs(Button, { view: 'outlined', className: b('button', { savedOnly }), size: "xl", onClick: handleChange, selected: savedOnly, children: [_jsx(Icon, { data: Bookmark, size: ICON_SIZE, className: b('icon', { savedOnly }) }), i18n(Keyset.ActionSavedOnly)] }) }));
18
+ };
19
+ //# sourceMappingURL=SavedOnlyFilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SavedOnlyFilter.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/SavedOnlyFilter/SavedOnlyFilter.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAC,MAAM,EAAE,IAAI,EAAC,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAC,MAAM,EAAE,IAAI,EAAC,kCAAyB;AAC9C,OAAO,EAAC,KAAK,EAAC,gCAA6B;AAE3C,OAAO,uBAAuB,CAAC;AAE/B,MAAM,CAAC,GAAG,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAErC,MAAM,SAAS,GAAG,EAAE,CAAC;AAQrB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAC,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAuB,EAAE,EAAE;IACzF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAU,YAAY,CAAC,CAAC;IAExE,MAAM,YAAY,GAAG,GAAG,EAAE;QACtB,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC;QACxB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,CAAC;IAEF,OAAO,CACH,cAAK,SAAS,EAAE,SAAS,YACrB,MAAC,MAAM,IACH,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAC,SAAS,EAAC,CAAC,EACnC,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,SAAS,aAEnB,KAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAC,SAAS,EAAC,CAAC,GAAI,EAC3E,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IACxB,GACP,CACT,CAAC;AACN,CAAC,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {Bookmark} from '@gravity-ui/icons';\nimport {Button, Icon} from '@gravity-ui/uikit';\n\nimport {Keyset, i18n} from '../../../../i18n';\nimport {block} from '../../../../utils/cn';\n\nimport './SavedOnlyFilter.scss';\n\nconst b = block('saved-only-filter');\n\nconst ICON_SIZE = 16;\n\nexport type SavedOnlyFilterProps = {\n initialValue: boolean;\n onChange: (value: boolean) => void;\n className?: string;\n};\n\nexport const SavedOnlyFilter = ({initialValue, onChange, className}: SavedOnlyFilterProps) => {\n const [savedOnly, setSavedOnly] = React.useState<boolean>(initialValue);\n\n const handleChange = () => {\n const next = !savedOnly;\n setSavedOnly(next);\n onChange(next);\n };\n\n return (\n <div className={className}>\n <Button\n view={'outlined'}\n className={b('button', {savedOnly})}\n size=\"xl\"\n onClick={handleChange}\n selected={savedOnly}\n >\n <Icon data={Bookmark} size={ICON_SIZE} className={b('icon', {savedOnly})} />\n {i18n(Keyset.ActionSavedOnly)}\n </Button>\n </div>\n );\n};\n"]}
@@ -0,0 +1,6 @@
1
+ /* use this for style redefinitions to awoid problems with
2
+ unpredictable css rules order in build */
3
+ .bc-search-filter__search {
4
+ width: 100%;
5
+ max-width: 100%;
6
+ }
@@ -0,0 +1,8 @@
1
+ import './SearchFilter.css';
2
+ export type SearchFilterProps = {
3
+ placeholder?: string;
4
+ initialValue: string | undefined;
5
+ onChange: (value: string) => void;
6
+ className?: string;
7
+ };
8
+ export declare const SearchFilter: ({ placeholder, initialValue, onChange, className, }: SearchFilterProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Keyset, i18n } from "../../../../i18n/index.js";
3
+ import { block } from "../../../../utils/cn.js";
4
+ import { Search } from "../../../Search/Search.js";
5
+ import './SearchFilter.css';
6
+ const b = block('search-filter');
7
+ export const SearchFilter = ({ placeholder, initialValue, onChange, className, }) => {
8
+ return (_jsx("div", { className: className, children: _jsx(Search, { className: b('search'), placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : i18n(Keyset.Search), initialValue: initialValue && typeof initialValue === 'string' ? initialValue : '', onSubmit: onChange }) }));
9
+ };
10
+ //# sourceMappingURL=SearchFilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchFilter.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/SearchFilter/SearchFilter.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAC,MAAM,EAAE,IAAI,EAAC,kCAAyB;AAC9C,OAAO,EAAC,KAAK,EAAC,gCAA6B;AAC3C,OAAO,EAAC,MAAM,EAAC,kCAA+B;AAE9C,OAAO,oBAAoB,CAAC;AAE5B,MAAM,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC;AASjC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EACzB,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,SAAS,GACO,EAAE,EAAE;IACpB,OAAO,CACH,cAAK,SAAS,EAAE,SAAS,YACrB,KAAC,MAAM,IACH,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,EACtB,WAAW,EAAE,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAC/C,YAAY,EAAE,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAClF,QAAQ,EAAE,QAAQ,GACpB,GACA,CACT,CAAC;AACN,CAAC,CAAC","sourcesContent":["import {Keyset, i18n} from '../../../../i18n';\nimport {block} from '../../../../utils/cn';\nimport {Search} from '../../../Search/Search';\n\nimport './SearchFilter.scss';\n\nconst b = block('search-filter');\n\nexport type SearchFilterProps = {\n placeholder?: string;\n initialValue: string | undefined;\n onChange: (value: string) => void;\n className?: string;\n};\n\nexport const SearchFilter = ({\n placeholder,\n initialValue,\n onChange,\n className,\n}: SearchFilterProps) => {\n return (\n <div className={className}>\n <Search\n className={b('search')}\n placeholder={placeholder ?? i18n(Keyset.Search)}\n initialValue={initialValue && typeof initialValue === 'string' ? initialValue : ''}\n onSubmit={onChange}\n />\n </div>\n );\n};\n"]}
@@ -0,0 +1,15 @@
1
+ import { SelectOption } from '@gravity-ui/uikit';
2
+ import './SelectFilter.css';
3
+ export type SelectFilterProps = {
4
+ multiple?: boolean;
5
+ filterable?: boolean;
6
+ hasClear?: boolean;
7
+ placeholder?: string;
8
+ options: SelectOption[];
9
+ allLabel: string;
10
+ qa?: string;
11
+ initialValue: string | number | null | undefined;
12
+ onChange: (value: string) => void;
13
+ className?: string;
14
+ };
15
+ export declare const SelectFilter: ({ multiple, filterable, hasClear, placeholder, options, allLabel, qa, initialValue, onChange, className, }: SelectFilterProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,31 +1,14 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import * as React from 'react';
3
- import { useAnalytics } from '@gravity-ui/page-constructor';
4
3
  import { Select } from '@gravity-ui/uikit';
5
4
  import { MobileContext } from "../../../../contexts/MobileContext.js";
6
5
  import { block } from "../../../../utils/cn.js";
7
6
  import { renderFilter, renderOption, renderSwitcher } from "./customRenders.js";
8
- import './Filter.css';
7
+ import './SelectFilter.css';
9
8
  const b = block('feed-filter');
10
9
  const VIRTUALIZATION_THRESHOLD = 1000;
11
- export const Filter = ({ filter, initialValue, onSelect, className }) => {
10
+ export const SelectFilter = ({ multiple, filterable, hasClear, placeholder, options, allLabel, qa, initialValue, onChange, className, }) => {
12
11
  const isMobile = React.useContext(MobileContext);
13
- const handleAnalyticsFilter = useAnalytics();
14
- const { queryParamName, multiple, filterable, hasClear, options, allLabel, placeholder, qa, analyticsEvents, } = filter;
15
- const handleFilterSelect = (selectedValues) => {
16
- if (analyticsEvents) {
17
- handleAnalyticsFilter(analyticsEvents);
18
- }
19
- const query = {};
20
- if (multiple) {
21
- query[queryParamName] = selectedValues.join(',');
22
- }
23
- else {
24
- const isEmpty = selectedValues.some((v) => v === 'empty');
25
- query[queryParamName] = isEmpty ? '' : selectedValues[0];
26
- }
27
- onSelect(query);
28
- };
29
12
  let defaultValue;
30
13
  if (multiple) {
31
14
  defaultValue = initialValue ? initialValue.split(',') : [];
@@ -36,11 +19,20 @@ export const Filter = ({ filter, initialValue, onSelect, className }) => {
36
19
  const optionsWithEmpty = multiple
37
20
  ? options
38
21
  : [{ value: 'empty', content: allLabel }, ...options];
39
- return (_jsx("div", { className: className, children: _jsx(Select, { className: b('select'), size: "xl", multiple: multiple, filterable: filterable, hasClear: hasClear !== null && hasClear !== void 0 ? hasClear : multiple, disablePortal: true, options: optionsWithEmpty, defaultValue: defaultValue, popupClassName: b('popup', { isMobile }), onUpdate: handleFilterSelect, placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : allLabel, renderControl: renderSwitcher({
22
+ const handleChange = (selectedValues) => {
23
+ if (multiple) {
24
+ onChange(selectedValues.join(','));
25
+ }
26
+ else {
27
+ const isEmpty = selectedValues.some((v) => v === 'empty');
28
+ onChange(isEmpty ? '' : selectedValues[0]);
29
+ }
30
+ };
31
+ return (_jsx("div", { className: className, children: _jsx(Select, { className: b('select'), size: "xl", multiple: multiple, filterable: filterable, hasClear: hasClear !== null && hasClear !== void 0 ? hasClear : multiple, disablePortal: true, options: optionsWithEmpty, defaultValue: defaultValue, popupClassName: b('popup', { isMobile }), onUpdate: handleChange, placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : allLabel, renderControl: renderSwitcher({
40
32
  initial: defaultValue,
41
33
  list: optionsWithEmpty,
42
34
  defaultLabel: allLabel,
43
35
  qa,
44
36
  }), virtualizationThreshold: VIRTUALIZATION_THRESHOLD, renderOption: renderOption, renderFilter: filterable ? renderFilter({ className: b('popup-filter') }) : undefined }) }));
45
37
  };
46
- //# sourceMappingURL=Filter.js.map
38
+ //# sourceMappingURL=SelectFilter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectFilter.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/SelectFilter/SelectFilter.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAC,MAAM,EAAe,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAC,aAAa,EAAC,8CAA2C;AACjE,OAAO,EAAC,KAAK,EAAC,gCAA6B;AAE3C,OAAO,EAAC,YAAY,EAAE,YAAY,EAAE,cAAc,EAAC,2BAAwB;AAE3E,OAAO,oBAAoB,CAAC;AAE5B,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;AAE/B,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAetC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EACzB,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,WAAW,EACX,OAAO,EACP,QAAQ,EACR,EAAE,EACF,YAAY,EACZ,QAAQ,EACR,SAAS,GACO,EAAE,EAAE;IACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAEjD,IAAI,YAAsB,CAAC;IAC3B,IAAI,QAAQ,EAAE,CAAC;QACX,YAAY,GAAG,YAAY,CAAC,CAAC,CAAE,YAAuB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,CAAC;SAAM,CAAC;QACJ,YAAY,GAAG,CAAC,YAAY,CAAa,CAAC;IAC9C,CAAC;IAED,MAAM,gBAAgB,GAAmB,QAAQ;QAC7C,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAC,EAAE,GAAG,OAAO,CAAC,CAAC;IAExD,MAAM,YAAY,GAAG,CAAC,cAAwB,EAAE,EAAE;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACX,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACJ,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;YAC1D,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC,CAAC;IAEF,OAAO,CACH,cAAK,SAAS,EAAE,SAAS,YACrB,KAAC,MAAM,IACH,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,EACtB,IAAI,EAAC,IAAI,EACT,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,QAAQ,EAC9B,aAAa,QACb,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,EAAC,QAAQ,EAAC,CAAC,EACtC,QAAQ,EAAE,YAAY,EACtB,WAAW,EAAE,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,QAAQ,EACpC,aAAa,EAAE,cAAc,CAAC;gBAC1B,OAAO,EAAE,YAAY;gBACrB,IAAI,EAAE,gBAAgB;gBACtB,YAAY,EAAE,QAAQ;gBACtB,EAAE;aACL,CAAC,EACF,uBAAuB,EAAE,wBAAwB,EACjD,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,EAAC,SAAS,EAAE,CAAC,CAAC,cAAc,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GACrF,GACA,CACT,CAAC;AACN,CAAC,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {Select, SelectOption} from '@gravity-ui/uikit';\n\nimport {MobileContext} from '../../../../contexts/MobileContext';\nimport {block} from '../../../../utils/cn';\n\nimport {renderFilter, renderOption, renderSwitcher} from './customRenders';\n\nimport './SelectFilter.scss';\n\nconst b = block('feed-filter');\n\nconst VIRTUALIZATION_THRESHOLD = 1000;\n\nexport type SelectFilterProps = {\n multiple?: boolean;\n filterable?: boolean;\n hasClear?: boolean;\n placeholder?: string;\n options: SelectOption[];\n allLabel: string;\n qa?: string;\n initialValue: string | number | null | undefined;\n onChange: (value: string) => void;\n className?: string;\n};\n\nexport const SelectFilter = ({\n multiple,\n filterable,\n hasClear,\n placeholder,\n options,\n allLabel,\n qa,\n initialValue,\n onChange,\n className,\n}: SelectFilterProps) => {\n const isMobile = React.useContext(MobileContext);\n\n let defaultValue: string[];\n if (multiple) {\n defaultValue = initialValue ? (initialValue as string).split(',') : [];\n } else {\n defaultValue = [initialValue] as string[];\n }\n\n const optionsWithEmpty: SelectOption[] = multiple\n ? options\n : [{value: 'empty', content: allLabel}, ...options];\n\n const handleChange = (selectedValues: string[]) => {\n if (multiple) {\n onChange(selectedValues.join(','));\n } else {\n const isEmpty = selectedValues.some((v) => v === 'empty');\n onChange(isEmpty ? '' : selectedValues[0]);\n }\n };\n\n return (\n <div className={className}>\n <Select\n className={b('select')}\n size=\"xl\"\n multiple={multiple}\n filterable={filterable}\n hasClear={hasClear ?? multiple}\n disablePortal\n options={optionsWithEmpty}\n defaultValue={defaultValue}\n popupClassName={b('popup', {isMobile})}\n onUpdate={handleChange}\n placeholder={placeholder ?? allLabel}\n renderControl={renderSwitcher({\n initial: defaultValue,\n list: optionsWithEmpty,\n defaultLabel: allLabel,\n qa,\n })}\n virtualizationThreshold={VIRTUALIZATION_THRESHOLD}\n renderOption={renderOption}\n renderFilter={filterable ? renderFilter({className: b('popup-filter')}) : undefined}\n />\n </div>\n );\n};\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customRenders.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/SelectFilter/customRenders.tsx"],"names":[],"mappings":";;AAAA,OAAO,EAA4B,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAEvE,OAAO,EAAC,MAAM,EAAE,IAAI,EAAC,kCAAyB;AAC9C,OAAO,EACH,kBAAkB,GAErB,oDAAiD;AAClD,OAAO,EAAC,cAAc,EAAsB,4CAAyC;AAerF,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,GACrB,CAAC,EAAC,SAAS,EAAC,EAAE,EAAE;AAChB,8CAA8C;AAC9C,CAAC,EAIA,EAAE,EAAE;QAJJ,EACG,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,SAAS,EACpB,UAAU,EAAE,GAAG,EACf,YAAY,kBAAG,IAAI,EAAE,CAAC,IAAK,SAAS,IACtC,CACL,CAAA;CAAA,CAAC;AAEN,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 {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport {CustomSwitcher, CustomSwitcherProps} from '../CustomSwitcher/CustomSwitcher';\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 = (options: {className?: string}) => 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 ({className}) =>\n // eslint-disable-next-line react/display-name\n ({\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={className}\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"]}
@@ -9,7 +9,7 @@ declare const _default: {
9
9
  "blog-author-block": (props: import("../models/blocks.js").AuthorProps) => import("react/jsx-runtime").JSX.Element | null;
10
10
  "blog-suggest-block": ({ paddingTop, paddingBottom }: import("../models/blocks.js").SuggestProps) => import("react/jsx-runtime").JSX.Element | null;
11
11
  "blog-meta-block": (props: import("../models/blocks.js").MetaProps) => import("react/jsx-runtime").JSX.Element;
12
- "blog-feed-block": ({ image, title }: import("../models/blocks.js").FeedProps) => import("react/jsx-runtime").JSX.Element;
12
+ "blog-feed-block": ({ image, title, resetTitleMargin }: import("../models/blocks.js").FeedProps) => import("react/jsx-runtime").JSX.Element;
13
13
  "blog-form-block": ({ paddingTop, paddingBottom, ...props }: import("../models/blocks.js").FormProps) => import("react/jsx-runtime").JSX.Element | null;
14
14
  "blog-compact-media-block": ({ paddingBottom, paddingTop, description, paddingRight, paddingLeft, image, }: import("../models/blocks.js").CompactMediaProps) => import("react/jsx-runtime").JSX.Element;
15
15
  "blog-take-block": (props: import("../models/blocks.js").TakeProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,11 +1,11 @@
1
1
  import * as React from 'react';
2
2
  import { CustomConfig, NavigationData, PageConstructorProviderProps, PageContent } from '@gravity-ui/page-constructor';
3
- import { FilterConfig, GetPostsType, MetaProps, PostsProps, ToggleLikeCallbackType } from "../../models/common.js";
3
+ import { FiltersConfig, GetPostsType, MetaProps, PostsProps, ToggleLikeCallbackType } from "../../models/common.js";
4
4
  import './BlogPage.css';
5
5
  export type BlogPageProps = {
6
6
  content: PageContent;
7
7
  posts: PostsProps;
8
- filters?: FilterConfig[];
8
+ filters?: FiltersConfig;
9
9
  navigation?: NavigationData;
10
10
  getPosts: GetPostsType;
11
11
  hasLikes?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"BlogPage.js","sourceRoot":"../../../../src","sources":["containers/BlogPage/BlogPage.tsx"],"names":[],"mappings":";;AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAGH,eAAe,EACf,uBAAuB,GAG1B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAC,WAAW,EAAC,oDAAiD;AACrE,OAAO,EAAC,YAAY,EAAC,sDAAmD;AACxE,OAAO,EAAC,oBAAoB,EAAC,oEAAiE;AAC9F,OAAO,EAAC,WAAW,EAAC,sCAAmC;AACvD,OAAO,EAAC,YAAY,EAAC,uCAAoC;AACzD,OAAO,EAAC,eAAe,EAAC,0CAAuC;AAC/D,OAAO,EAAC,uBAAuB,EAAC,+CAA4C;AAS5E,OAAO,gBAAgB,CAAC;AAmBxB,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EACrB,OAAO,EACP,KAAK,EACL,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,QAAQ,GAAG,KAAK,EAChB,UAAU,EACV,UAAU,EACV,QAAQ,EACR,8BAA8B,EAC9B,cAAc,GAAG,KAAK,EACtB,aAAa,GACD,EAAE,EAAE;IAChB,MAAM,EAAC,kBAAkB,EAAC,GAAG,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IAC/D,MAAM,KAAwC,oBAAoB,CAAC,aAAa,CAAC,EAA3E,EAAC,aAAa,OAA6D,EAAxD,iBAAiB,cAApC,iBAAqC,CAAsC,CAAC;IAElF,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAClC,GAAG,EAAE,CAAC,CAAC,EAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAC,CAAC,EAC7D,CAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,CAAC,CACxD,CAAC;IAEF,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAE3D,OAAO,CACH,MAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,gBAAgB,aAC1C,KAAC,WAAW,CAAC,QAAQ,IACjB,KAAK,EAAE;oBACH,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,UAAU,EAAE,KAAK,CAAC,KAAK;oBACvB,OAAO;oBACP,QAAQ;oBACR,8BAA8B;iBACjC,YAED,MAAC,uBAAuB,oBAChB,QAAQ,IACZ,eAAe,kCAAM,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,eAAe,KAAI,EAAE,CAAC,KAAE,kBAAkB,gBAEzE,QAAQ,CAAC,CAAC,CAAC,KAAC,WAAW,oBAAK,QAAQ,EAAI,CAAC,CAAC,CAAC,IAAI,EAChD,KAAC,eAAe,IACZ,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,UAAU,GACxB,KACoB,GACP,EACvB,KAAC,YAAY,oBAAK,iBAAiB,EAAI,IACnB,CAC3B,CAAC;AACN,CAAC,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {\n CustomConfig,\n NavigationData,\n PageConstructor,\n PageConstructorProvider,\n PageConstructorProviderProps,\n PageContent,\n} from '@gravity-ui/page-constructor';\n\nimport {MetaWrapper} from '../../components/MetaWrapper/MetaWrapper';\nimport {PromptSignIn} from '../../components/PromptSignIn/PromptSignIn';\nimport {usePromptSignInProps} from '../../components/PromptSignIn/hooks/usePromptSignInProps';\nimport {FeedContext} from '../../contexts/FeedContext';\nimport {LikesContext} from '../../contexts/LikesContext';\nimport {SettingsContext} from '../../contexts/SettingsContext';\nimport {useExtendedComponentMap} from '../../hooks/useExtendedComponentMap';\nimport {\n FilterConfig,\n GetPostsType,\n MetaProps,\n PostsProps,\n ToggleLikeCallbackType,\n} from '../../models/common';\n\nimport './BlogPage.scss';\n\nexport type BlogPageProps = {\n content: PageContent;\n posts: PostsProps;\n filters?: FilterConfig[];\n navigation?: NavigationData;\n getPosts: GetPostsType;\n hasLikes?: boolean;\n toggleLike?: ToggleLikeCallbackType;\n metaData?: MetaProps;\n settings?: PageConstructorProviderProps;\n custom?: CustomConfig;\n pageCountForShowSupportButtons?: number;\n isSignedInUser?: boolean;\n // Required to enable Sign In on Post like\n onClickSignIn?: React.EventHandler<React.SyntheticEvent>;\n};\n\nexport const BlogPage = ({\n content,\n posts,\n filters,\n getPosts,\n metaData,\n custom,\n hasLikes = false,\n toggleLike,\n navigation,\n settings,\n pageCountForShowSupportButtons,\n isSignedInUser = false,\n onClickSignIn,\n}: BlogPageProps) => {\n const {isAnimationEnabled} = React.useContext(SettingsContext);\n const {requireSignIn, ...promptSignInProps} = usePromptSignInProps(onClickSignIn);\n\n const likesContextData = React.useMemo(\n () => ({toggleLike, hasLikes, isSignedInUser, requireSignIn}),\n [toggleLike, hasLikes, isSignedInUser, requireSignIn],\n );\n\n const actualComponentMap = useExtendedComponentMap(custom);\n\n return (\n <LikesContext.Provider value={likesContextData}>\n <FeedContext.Provider\n value={{\n posts: posts.posts,\n pinnedPost: posts.pinnedPost,\n totalCount: posts.count,\n filters,\n getPosts,\n pageCountForShowSupportButtons,\n }}\n >\n <PageConstructorProvider\n {...settings}\n projectSettings={{...(settings?.projectSettings || {}), isAnimationEnabled}}\n >\n {metaData ? <MetaWrapper {...metaData} /> : null}\n <PageConstructor\n content={content}\n custom={actualComponentMap}\n navigation={navigation}\n />\n </PageConstructorProvider>\n </FeedContext.Provider>\n <PromptSignIn {...promptSignInProps} />\n </LikesContext.Provider>\n );\n};\n"]}
1
+ {"version":3,"file":"BlogPage.js","sourceRoot":"../../../../src","sources":["containers/BlogPage/BlogPage.tsx"],"names":[],"mappings":";;AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAGH,eAAe,EACf,uBAAuB,GAG1B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAC,WAAW,EAAC,oDAAiD;AACrE,OAAO,EAAC,YAAY,EAAC,sDAAmD;AACxE,OAAO,EAAC,oBAAoB,EAAC,oEAAiE;AAC9F,OAAO,EAAC,WAAW,EAAC,sCAAmC;AACvD,OAAO,EAAC,YAAY,EAAC,uCAAoC;AACzD,OAAO,EAAC,eAAe,EAAC,0CAAuC;AAC/D,OAAO,EAAC,uBAAuB,EAAC,+CAA4C;AAS5E,OAAO,gBAAgB,CAAC;AAmBxB,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EACrB,OAAO,EACP,KAAK,EACL,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,QAAQ,GAAG,KAAK,EAChB,UAAU,EACV,UAAU,EACV,QAAQ,EACR,8BAA8B,EAC9B,cAAc,GAAG,KAAK,EACtB,aAAa,GACD,EAAE,EAAE;IAChB,MAAM,EAAC,kBAAkB,EAAC,GAAG,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IAC/D,MAAM,KAAwC,oBAAoB,CAAC,aAAa,CAAC,EAA3E,EAAC,aAAa,OAA6D,EAAxD,iBAAiB,cAApC,iBAAqC,CAAsC,CAAC;IAElF,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAClC,GAAG,EAAE,CAAC,CAAC,EAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAC,CAAC,EAC7D,CAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,CAAC,CACxD,CAAC;IAEF,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAE3D,OAAO,CACH,MAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,gBAAgB,aAC1C,KAAC,WAAW,CAAC,QAAQ,IACjB,KAAK,EAAE;oBACH,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,UAAU,EAAE,KAAK,CAAC,KAAK;oBACvB,OAAO;oBACP,QAAQ;oBACR,8BAA8B;iBACjC,YAED,MAAC,uBAAuB,oBAChB,QAAQ,IACZ,eAAe,kCAAM,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,eAAe,KAAI,EAAE,CAAC,KAAE,kBAAkB,gBAEzE,QAAQ,CAAC,CAAC,CAAC,KAAC,WAAW,oBAAK,QAAQ,EAAI,CAAC,CAAC,CAAC,IAAI,EAChD,KAAC,eAAe,IACZ,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,UAAU,GACxB,KACoB,GACP,EACvB,KAAC,YAAY,oBAAK,iBAAiB,EAAI,IACnB,CAC3B,CAAC;AACN,CAAC,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {\n CustomConfig,\n NavigationData,\n PageConstructor,\n PageConstructorProvider,\n PageConstructorProviderProps,\n PageContent,\n} from '@gravity-ui/page-constructor';\n\nimport {MetaWrapper} from '../../components/MetaWrapper/MetaWrapper';\nimport {PromptSignIn} from '../../components/PromptSignIn/PromptSignIn';\nimport {usePromptSignInProps} from '../../components/PromptSignIn/hooks/usePromptSignInProps';\nimport {FeedContext} from '../../contexts/FeedContext';\nimport {LikesContext} from '../../contexts/LikesContext';\nimport {SettingsContext} from '../../contexts/SettingsContext';\nimport {useExtendedComponentMap} from '../../hooks/useExtendedComponentMap';\nimport {\n FiltersConfig,\n GetPostsType,\n MetaProps,\n PostsProps,\n ToggleLikeCallbackType,\n} from '../../models/common';\n\nimport './BlogPage.scss';\n\nexport type BlogPageProps = {\n content: PageContent;\n posts: PostsProps;\n filters?: FiltersConfig;\n navigation?: NavigationData;\n getPosts: GetPostsType;\n hasLikes?: boolean;\n toggleLike?: ToggleLikeCallbackType;\n metaData?: MetaProps;\n settings?: PageConstructorProviderProps;\n custom?: CustomConfig;\n pageCountForShowSupportButtons?: number;\n isSignedInUser?: boolean;\n // Required to enable Sign In on Post like\n onClickSignIn?: React.EventHandler<React.SyntheticEvent>;\n};\n\nexport const BlogPage = ({\n content,\n posts,\n filters,\n getPosts,\n metaData,\n custom,\n hasLikes = false,\n toggleLike,\n navigation,\n settings,\n pageCountForShowSupportButtons,\n isSignedInUser = false,\n onClickSignIn,\n}: BlogPageProps) => {\n const {isAnimationEnabled} = React.useContext(SettingsContext);\n const {requireSignIn, ...promptSignInProps} = usePromptSignInProps(onClickSignIn);\n\n const likesContextData = React.useMemo(\n () => ({toggleLike, hasLikes, isSignedInUser, requireSignIn}),\n [toggleLike, hasLikes, isSignedInUser, requireSignIn],\n );\n\n const actualComponentMap = useExtendedComponentMap(custom);\n\n return (\n <LikesContext.Provider value={likesContextData}>\n <FeedContext.Provider\n value={{\n posts: posts.posts,\n pinnedPost: posts.pinnedPost,\n totalCount: posts.count,\n filters,\n getPosts,\n pageCountForShowSupportButtons,\n }}\n >\n <PageConstructorProvider\n {...settings}\n projectSettings={{...(settings?.projectSettings || {}), isAnimationEnabled}}\n >\n {metaData ? <MetaWrapper {...metaData} /> : null}\n <PageConstructor\n content={content}\n custom={actualComponentMap}\n navigation={navigation}\n />\n </PageConstructorProvider>\n </FeedContext.Provider>\n <PromptSignIn {...promptSignInProps} />\n </LikesContext.Provider>\n );\n};\n"]}
@@ -1,10 +1,10 @@
1
1
  import * as React from 'react';
2
- import { FilterConfig, GetPostsType, PostData } from "../models/common.js";
2
+ import { FiltersConfig, GetPostsType, PostData } from "../models/common.js";
3
3
  export interface FeedContextProps {
4
4
  posts?: PostData[];
5
5
  pinnedPost?: PostData;
6
6
  totalCount?: number;
7
- filters?: FilterConfig[];
7
+ filters?: FiltersConfig;
8
8
  getPosts?: GetPostsType;
9
9
  pageCountForShowSupportButtons?: number;
10
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FeedContext.js","sourceRoot":"../../../src","sources":["contexts/FeedContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAmB,EAAsB,CAAC,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {FilterConfig, GetPostsType, PostData} from '../models/common';\n\nexport interface FeedContextProps {\n posts?: PostData[];\n pinnedPost?: PostData;\n totalCount?: number;\n filters?: FilterConfig[];\n getPosts?: GetPostsType;\n pageCountForShowSupportButtons?: number;\n}\n\nexport const FeedContext = React.createContext<FeedContextProps>({} as FeedContextProps);\n"]}
1
+ {"version":3,"file":"FeedContext.js","sourceRoot":"../../../src","sources":["contexts/FeedContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAmB,EAAsB,CAAC,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {FiltersConfig, GetPostsType, PostData} from '../models/common';\n\nexport interface FeedContextProps {\n posts?: PostData[];\n pinnedPost?: PostData;\n totalCount?: number;\n filters?: FiltersConfig;\n getPosts?: GetPostsType;\n pageCountForShowSupportButtons?: number;\n}\n\nexport const FeedContext = React.createContext<FeedContextProps>({} as FeedContextProps);\n"]}
@@ -11,7 +11,7 @@ export declare const useExtendedComponentMap: (custom: CustomConfig | undefined)
11
11
  "blog-author-block": (props: import("../models/blocks.js").AuthorProps) => import("react/jsx-runtime").JSX.Element | null;
12
12
  "blog-suggest-block": ({ paddingTop, paddingBottom }: import("../models/blocks.js").SuggestProps) => import("react/jsx-runtime").JSX.Element | null;
13
13
  "blog-meta-block": (props: import("../models/blocks.js").MetaProps) => import("react/jsx-runtime").JSX.Element;
14
- "blog-feed-block": ({ image, title }: import("../models/blocks.js").FeedProps) => import("react/jsx-runtime").JSX.Element;
14
+ "blog-feed-block": ({ image, title, resetTitleMargin }: import("../models/blocks.js").FeedProps) => import("react/jsx-runtime").JSX.Element;
15
15
  "blog-form-block": ({ paddingTop, paddingBottom, ...props }: import("../models/blocks.js").FormProps) => import("react/jsx-runtime").JSX.Element | null;
16
16
  "blog-compact-media-block": ({ paddingBottom, paddingTop, description, paddingRight, paddingLeft, image, }: import("../models/blocks.js").CompactMediaProps) => import("react/jsx-runtime").JSX.Element;
17
17
  "blog-take-block": (props: import("../models/blocks.js").TakeProps) => import("react/jsx-runtime").JSX.Element;
@@ -16,6 +16,7 @@ export declare enum Keyset {
16
16
  AllTags = "label_all_tags",
17
17
  ActionSavedOnly = "action_saved_only",
18
18
  AllServices = "label_all_services",
19
+ AllOptions = "label_all_some_filter",
19
20
  PromptSignInOnLike = "prompt_sign_in_on_like",
20
21
  SignIn = "Sign In",
21
22
  Save = "save",
@@ -19,6 +19,7 @@ export var Keyset;
19
19
  Keyset["AllTags"] = "label_all_tags";
20
20
  Keyset["ActionSavedOnly"] = "action_saved_only";
21
21
  Keyset["AllServices"] = "label_all_services";
22
+ Keyset["AllOptions"] = "label_all_some_filter";
22
23
  Keyset["PromptSignInOnLike"] = "prompt_sign_in_on_like";
23
24
  Keyset["SignIn"] = "Sign In";
24
25
  Keyset["Save"] = "save";
@@ -41,6 +42,7 @@ const en = {
41
42
  [Keyset.AllTags]: 'All topics',
42
43
  [Keyset.ActionSavedOnly]: 'Saved',
43
44
  [Keyset.AllServices]: 'All Services',
45
+ [Keyset.AllOptions]: 'All options',
44
46
  [Keyset.PromptSignInOnLike]: 'Sign in to save this post',
45
47
  [Keyset.ContextReadingTime]: [
46
48
  '{{count}} min to read',
@@ -68,6 +70,7 @@ const ru = {
68
70
  [Keyset.AllTags]: 'Все темы',
69
71
  [Keyset.ActionSavedOnly]: 'Сохранённые',
70
72
  [Keyset.AllServices]: 'Все сервисы',
73
+ [Keyset.AllOptions]: 'Все варианты',
71
74
  [Keyset.PromptSignInOnLike]: 'Войдите, чтобы сохранить пост',
72
75
  [Keyset.ContextReadingTime]: [
73
76
  '{{count}} минута чтения',