@doyourjob/gravity-ui-page-constructor 5.31.85 → 5.31.86-b

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 (82) hide show
  1. package/build/cjs/blocks/Reports/Reports.css +0 -6
  2. package/build/cjs/blocks/Reports/Reports.js +2 -1
  3. package/build/cjs/blocks/ReportsCards/ReportsCards.css +0 -6
  4. package/build/cjs/blocks/ReportsCards/ReportsCards.js +2 -1
  5. package/build/cjs/blocks/ReportsSections/ReportsSections.css +0 -6
  6. package/build/cjs/blocks/ReportsSections/ReportsSections.js +2 -1
  7. package/build/cjs/blocks/Slider/Slider.css +23 -34
  8. package/build/cjs/blocks/Slider/Slider.js +9 -5
  9. package/build/cjs/components/FeedHeader/Controls/Controls.css +0 -45
  10. package/build/cjs/components/FeedHeader/Controls/Controls.js +10 -38
  11. package/build/cjs/components/Filters/FilterInput/FilterInput.css +5 -0
  12. package/build/cjs/components/Filters/FilterInput/FilterInput.d.ts +8 -0
  13. package/build/cjs/components/Filters/FilterInput/FilterInput.js +9 -0
  14. package/build/cjs/components/Filters/FilterMultipleSelect/FilterMultipleSelect.css +47 -0
  15. package/build/cjs/components/Filters/FilterMultipleSelect/FilterMultipleSelect.d.ts +10 -0
  16. package/build/cjs/components/Filters/FilterMultipleSelect/FilterMultipleSelect.js +27 -0
  17. package/build/cjs/components/Filters/FilterSelect/FilterSelect.css +22 -0
  18. package/build/cjs/components/Filters/FilterSelect/FilterSelect.d.ts +9 -0
  19. package/build/cjs/components/Filters/FilterSelect/FilterSelect.js +24 -0
  20. package/build/cjs/components/Filters/FilterSelects/FilterSelects.css +13 -0
  21. package/build/cjs/components/Filters/FilterSelects/FilterSelects.d.ts +8 -0
  22. package/build/cjs/components/Filters/FilterSelects/FilterSelects.js +20 -0
  23. package/build/cjs/components/{FeedHeader → Filters}/Search/Search.css +7 -7
  24. package/build/cjs/components/{FeedHeader → Filters}/Search/Search.d.ts +2 -1
  25. package/build/cjs/components/{FeedHeader → Filters}/Search/Search.js +4 -5
  26. package/build/cjs/components/{FeedHeader → Filters}/SelectOption/SelectOption.css +1 -1
  27. package/build/cjs/components/{FeedHeader → Filters}/SelectOption/SelectOption.js +1 -1
  28. package/build/cjs/components/{FeedHeader → Filters}/Switcher/Switcher.css +15 -15
  29. package/build/cjs/components/{FeedHeader → Filters}/Switcher/Switcher.js +1 -1
  30. package/build/cjs/components/{FeedHeader/Controls → Filters}/customRenders.d.ts +6 -2
  31. package/build/cjs/components/Filters/customRenders.js +26 -0
  32. package/build/cjs/components/index.d.ts +0 -1
  33. package/build/cjs/components/index.js +1 -3
  34. package/build/cjs/models/constructor-items/common.d.ts +1 -1
  35. package/build/esm/blocks/Reports/Reports.css +0 -6
  36. package/build/esm/blocks/Reports/Reports.js +3 -2
  37. package/build/esm/blocks/ReportsCards/ReportsCards.css +0 -6
  38. package/build/esm/blocks/ReportsCards/ReportsCards.js +3 -2
  39. package/build/esm/blocks/ReportsSections/ReportsSections.css +0 -6
  40. package/build/esm/blocks/ReportsSections/ReportsSections.js +3 -2
  41. package/build/esm/blocks/Slider/Slider.css +23 -34
  42. package/build/esm/blocks/Slider/Slider.js +9 -5
  43. package/build/esm/components/FeedHeader/Controls/Controls.css +0 -45
  44. package/build/esm/components/FeedHeader/Controls/Controls.js +11 -39
  45. package/build/esm/components/Filters/FilterInput/FilterInput.css +5 -0
  46. package/build/esm/components/Filters/FilterInput/FilterInput.d.ts +9 -0
  47. package/build/esm/components/Filters/FilterInput/FilterInput.js +7 -0
  48. package/build/esm/components/Filters/FilterMultipleSelect/FilterMultipleSelect.css +47 -0
  49. package/build/esm/components/Filters/FilterMultipleSelect/FilterMultipleSelect.d.ts +11 -0
  50. package/build/esm/components/Filters/FilterMultipleSelect/FilterMultipleSelect.js +25 -0
  51. package/build/esm/components/Filters/FilterSelect/FilterSelect.css +22 -0
  52. package/build/esm/components/Filters/FilterSelect/FilterSelect.d.ts +10 -0
  53. package/build/esm/components/Filters/FilterSelect/FilterSelect.js +22 -0
  54. package/build/esm/components/Filters/FilterSelects/FilterSelects.css +13 -0
  55. package/build/esm/components/Filters/FilterSelects/FilterSelects.d.ts +9 -0
  56. package/build/esm/components/Filters/FilterSelects/FilterSelects.js +16 -0
  57. package/build/esm/components/{FeedHeader → Filters}/Search/Search.css +7 -7
  58. package/build/esm/components/{FeedHeader → Filters}/Search/Search.d.ts +2 -1
  59. package/build/esm/components/{FeedHeader → Filters}/Search/Search.js +4 -5
  60. package/build/esm/components/{FeedHeader → Filters}/SelectOption/SelectOption.css +1 -1
  61. package/build/esm/components/{FeedHeader → Filters}/SelectOption/SelectOption.js +1 -1
  62. package/build/esm/components/{FeedHeader → Filters}/Switcher/Switcher.css +15 -15
  63. package/build/esm/components/{FeedHeader → Filters}/Switcher/Switcher.js +1 -1
  64. package/build/esm/components/{FeedHeader/Controls → Filters}/customRenders.d.ts +6 -3
  65. package/build/esm/components/{FeedHeader/Controls → Filters}/customRenders.js +7 -8
  66. package/build/esm/components/index.d.ts +0 -1
  67. package/build/esm/components/index.js +0 -1
  68. package/build/esm/models/constructor-items/common.d.ts +1 -1
  69. package/package.json +1 -1
  70. package/server/models/constructor-items/common.d.ts +1 -1
  71. package/widget/index.js +1 -1
  72. package/build/cjs/components/FeedHeader/Controls/customRenders.js +0 -26
  73. package/build/cjs/components/Select/Select.css +0 -22
  74. package/build/cjs/components/Select/Select.d.ts +0 -7
  75. package/build/cjs/components/Select/Select.js +0 -13
  76. package/build/esm/components/Select/Select.css +0 -22
  77. package/build/esm/components/Select/Select.d.ts +0 -8
  78. package/build/esm/components/Select/Select.js +0 -11
  79. /package/build/cjs/components/{FeedHeader → Filters}/SelectOption/SelectOption.d.ts +0 -0
  80. /package/build/cjs/components/{FeedHeader → Filters}/Switcher/Switcher.d.ts +0 -0
  81. /package/build/esm/components/{FeedHeader → Filters}/SelectOption/SelectOption.d.ts +0 -0
  82. /package/build/esm/components/{FeedHeader → Filters}/Switcher/Switcher.d.ts +0 -0
@@ -7,12 +7,6 @@ unpredictable css rules order in build */
7
7
  .pc-reports-block__title {
8
8
  margin-bottom: 24px;
9
9
  }
10
- .pc-reports-block__select {
11
- margin-bottom: 32px;
12
- gap: 16px;
13
- display: flex;
14
- flex-wrap: wrap;
15
- }
16
10
  .pc-reports-block__loader {
17
11
  align-self: center;
18
12
  width: 48px;
@@ -5,6 +5,7 @@ const tslib_1 = require("tslib");
5
5
  const react_1 = tslib_1.__importStar(require("react"));
6
6
  const uikit_1 = require("@gravity-ui/uikit");
7
7
  const components_1 = require("../../components");
8
+ const FilterSelects_1 = tslib_1.__importDefault(require("../../components/Filters/FilterSelects/FilterSelects"));
8
9
  const reportsContext_1 = require("../../context/reportsContext");
9
10
  const utils_1 = require("../../utils");
10
11
  const ReportsItem_1 = tslib_1.__importDefault(require("./ReportsItem/ReportsItem"));
@@ -49,7 +50,7 @@ const ReportsBlock = ({ title, typeKey, empty }) => {
49
50
  }, [empty, filesOutline, loading, paginatedItems]);
50
51
  return (react_1.default.createElement("div", { className: b() },
51
52
  title && react_1.default.createElement(components_1.Title, { className: b('title'), title: titleProps, colSizes: titleColSizes }),
52
- Boolean(selects.length) && (react_1.default.createElement("div", { className: b('select') }, selects.map(({ name, options }) => (react_1.default.createElement(components_1.Select, { key: name, name: name, options: options, onChange: handleChange }))))),
53
+ react_1.default.createElement(FilterSelects_1.default, { selects: selects, filters: localFilters, handleChange: handleChange }),
53
54
  renderItems,
54
55
  itemsPerPage && (react_1.default.createElement(components_1.Paginator, { page: page, itemsPerPage: itemsPerPage, totalItems: filteredItems.length, maxPages: Infinity, onPageChange: setPage, className: b('paginator') }))));
55
56
  };
@@ -3,12 +3,6 @@ unpredictable css rules order in build */
3
3
  .pc-reports-cards-block__title {
4
4
  margin-bottom: 24px;
5
5
  }
6
- .pc-reports-cards-block__select {
7
- margin-bottom: 32px;
8
- gap: 16px;
9
- display: flex;
10
- flex-wrap: wrap;
11
- }
12
6
  .pc-reports-cards-block__postscript {
13
7
  font-size: var(--g-text-body-1-font-size, var(--pc-text-body-1-font-size));
14
8
  line-height: var(--g-text-body-1-line-height, var(--pc-text-body-1-line-height));
@@ -4,6 +4,7 @@ exports.ReportsCardsBlock = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const react_1 = tslib_1.__importStar(require("react"));
6
6
  const components_1 = require("../../components");
7
+ const FilterSelects_1 = tslib_1.__importDefault(require("../../components/Filters/FilterSelects/FilterSelects"));
7
8
  const reportsCardsContext_1 = require("../../context/reportsCardsContext");
8
9
  const grid_1 = require("../../grid");
9
10
  const sub_blocks_1 = require("../../sub-blocks");
@@ -34,7 +35,7 @@ const ReportsCardsBlock = ({ title, typeKey, postscript, empty }) => {
34
35
  : title;
35
36
  return (react_1.default.createElement("div", { className: b() },
36
37
  title && react_1.default.createElement(components_1.Title, { className: b('title'), title: titleProps, colSizes: titleColSizes }),
37
- Boolean(selects.length) && (react_1.default.createElement("div", { className: b('select') }, selects.map(({ name, options }) => (react_1.default.createElement(components_1.Select, { key: name, name: name, options: options, onChange: handleChange }))))),
38
+ react_1.default.createElement(FilterSelects_1.default, { selects: selects, filters: localFilters, handleChange: handleChange }),
38
39
  filteredItems.length ? (react_1.default.createElement(grid_1.Row, null, filteredItems.map((item, index) => (react_1.default.createElement(grid_1.Col, { key: index, sizes: cardsColSizes },
39
40
  react_1.default.createElement(sub_blocks_1.AttachmentCard, Object.assign({}, item))))))) : (react_1.default.createElement(components_1.EmptyPlug, { empty: empty })),
40
41
  postscript && (react_1.default.createElement(components_1.YFMWrapper, { className: b('postscript'), content: postscript, modifiers: { constructor: true, [`constructor-size-s`]: true } }))));
@@ -3,12 +3,6 @@ unpredictable css rules order in build */
3
3
  .pc-reports-sections-block__title {
4
4
  margin-bottom: 24px;
5
5
  }
6
- .pc-reports-sections-block__select {
7
- margin-bottom: 32px;
8
- gap: 16px;
9
- display: flex;
10
- flex-wrap: wrap;
11
- }
12
6
  .pc-reports-sections-block__sections {
13
7
  display: flex;
14
8
  flex-direction: column;
@@ -4,6 +4,7 @@ exports.ReportsSectionsBlock = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const react_1 = tslib_1.__importStar(require("react"));
6
6
  const components_1 = require("../../components");
7
+ const FilterSelects_1 = tslib_1.__importDefault(require("../../components/Filters/FilterSelects/FilterSelects"));
7
8
  const reportsSectionsContext_1 = require("../../context/reportsSectionsContext");
8
9
  const utils_1 = require("../../utils");
9
10
  const Section_1 = tslib_1.__importDefault(require("./Section/Section"));
@@ -28,7 +29,7 @@ const ReportsSectionsBlock = ({ title, typeKey, empty }) => {
28
29
  : title;
29
30
  return (react_1.default.createElement("div", { className: b() },
30
31
  title && react_1.default.createElement(components_1.Title, { className: b('title'), title: titleProps, colSizes: titleColSizes }),
31
- Boolean(selects.length) && (react_1.default.createElement("div", { className: b('select') }, selects.map(({ name, options }) => (react_1.default.createElement(components_1.Select, { key: name, name: name, options: options, onChange: handleChange }))))),
32
+ react_1.default.createElement(FilterSelects_1.default, { selects: selects, filters: localFilters, handleChange: handleChange }),
32
33
  filteredItems.length ? (react_1.default.createElement("div", { className: b('sections') }, filteredItems.map((item, index) => (react_1.default.createElement(Section_1.default, Object.assign({ key: index }, item)))))) : (react_1.default.createElement(components_1.EmptyPlug, { empty: empty, className: b('empty') }))));
33
34
  };
34
35
  exports.ReportsSectionsBlock = ReportsSectionsBlock;
@@ -118,6 +118,25 @@ unpredictable css rules order in build */
118
118
  .pc-SliderBlock .slick-arrow.slick-prev {
119
119
  right: 42px;
120
120
  }
121
+ .pc-SliderBlock__slick-mobile {
122
+ display: none;
123
+ }
124
+ .pc-SliderBlock__mobile-scroll {
125
+ display: flex;
126
+ margin: 0 -24px;
127
+ padding: 24px;
128
+ gap: 16px;
129
+ overflow-x: auto;
130
+ -webkit-overflow-scrolling: touch;
131
+ scrollbar-width: none;
132
+ }
133
+ .pc-SliderBlock__mobile-scroll::-webkit-scrollbar {
134
+ display: none;
135
+ }
136
+ .pc-SliderBlock__mobile-scroll-item {
137
+ flex: 0 0 auto;
138
+ width: 90%;
139
+ }
121
140
  .pc-SliderBlock__header_no-description {
122
141
  position: relative;
123
142
  top: -3px;
@@ -653,26 +672,6 @@ unpredictable css rules order in build */
653
672
  .pc-SliderBlock_type_header-card .slick-arrow.slick-prev {
654
673
  left: 0;
655
674
  }
656
- @media (max-width: 577px) {
657
- .pc-SliderBlock_type_header-card .slick-arrow {
658
- display: none;
659
- }
660
- .pc-SliderBlock_type_header-card.pc-SliderBlock:not(.pc-SliderBlock_type_header-card_one-slide) .slick-list {
661
- margin-left: 0;
662
- }
663
- .pc-SliderBlock_type_header-card.pc-SliderBlock:not(.pc-SliderBlock_type_header-card_one-slide) .slick-track {
664
- padding-left: 0;
665
- }
666
- .pc-SliderBlock_type_header-card.pc-SliderBlock:not(.pc-SliderBlock_type_header-card_one-slide) .slick-slide {
667
- /* stylelint-disable declaration-no-important */
668
- padding-right: 0 !important;
669
- padding-left: 0 !important;
670
- /* stylelint-enable declaration-no-important */
671
- }
672
- .pc-SliderBlock_type_header-card.pc-SliderBlock:not(.pc-SliderBlock_type_header-card_one-slide) .slick-slide:last-child {
673
- padding-right: 0;
674
- }
675
- }
676
675
  @media (max-width: 769px) {
677
676
  .pc-SliderBlock__footer {
678
677
  display: block;
@@ -684,20 +683,10 @@ unpredictable css rules order in build */
684
683
  }
685
684
  }
686
685
  @media (max-width: 577px) {
687
- .pc-SliderBlock:not(.pc-SliderBlock_one-slide) {
688
- margin-left: -24px;
689
- padding-left: 24px;
690
- width: calc(100% + 48px);
691
- overflow-x: auto;
692
- }
693
- .pc-SliderBlock:not(.pc-SliderBlock_one-slide) .slick-list {
694
- margin-left: -24px;
695
- margin-right: 0;
696
- }
697
- .pc-SliderBlock:not(.pc-SliderBlock_one-slide) .slick-track {
698
- padding-left: 16px;
686
+ .pc-SliderBlock__slick {
687
+ display: none;
699
688
  }
700
- .pc-SliderBlock:not(.pc-SliderBlock_one-slide) .slick-slide {
701
- padding: 0 8px;
689
+ .pc-SliderBlock__slick-mobile {
690
+ display: block;
702
691
  }
703
692
  }
@@ -269,11 +269,15 @@ const SliderBlock = (props) => {
269
269
  lazyLoad,
270
270
  accessibility: false,
271
271
  };
272
- return (react_1.default.createElement(OutsideClick_1.default, { onOutsideClick: isMobile ? unsetFocus : noop_1.default },
273
- react_1.default.createElement(react_slick_1.default, Object.assign({}, settings), disclosedChildren),
274
- react_1.default.createElement("div", { className: b('footer') },
275
- renderDisclaimer(),
276
- renderNavigation())));
272
+ return (react_1.default.createElement(react_1.default.Fragment, null,
273
+ react_1.default.createElement(OutsideClick_1.default, { className: b('slick'), onOutsideClick: isMobile ? unsetFocus : noop_1.default },
274
+ react_1.default.createElement(react_slick_1.default, Object.assign({}, settings), disclosedChildren),
275
+ react_1.default.createElement("div", { className: b('footer') },
276
+ renderDisclaimer(),
277
+ renderNavigation())),
278
+ react_1.default.createElement("div", { className: b('slick-mobile') },
279
+ react_1.default.createElement("div", { className: b('mobile-scroll') }, disclosedChildren.map((child, index) => (react_1.default.createElement("div", { key: index, className: b('mobile-scroll-item') }, child)))),
280
+ react_1.default.createElement("div", { className: b('footer') }, renderDisclaimer()))));
277
281
  };
278
282
  return (react_1.default.createElement(StylesContext_1.StylesContext.Provider, { value: Object.assign(Object.assign({}, childStyles), { setStyles: setChildStyles }) },
279
283
  react_1.default.createElement("div", { className: b({
@@ -20,51 +20,6 @@ unpredictable css rules order in build */
20
20
  font-size: var(--g-text-display-4-font-size, var(--pc-text-display-4-font-size));
21
21
  line-height: var(--g-text-display-4-line-height, var(--pc-text-display-4-line-height));
22
22
  }
23
- .pc-feed-header-controls__filter-input, .pc-feed-header-controls__filter-select {
24
- width: 100%;
25
- }
26
- .pc-feed-header-controls__popup {
27
- max-height: 500px;
28
- border-radius: 12px;
29
- }
30
- .pc-feed-header-controls__popup .g-select-list::-webkit-scrollbar {
31
- display: none;
32
- }
33
- .pc-feed-header-controls__popup .g-select-list .g-list {
34
- max-height: calc(500px - var(--g-text-body-3-line-height) - 12px);
35
- }
36
- .pc-feed-header-controls__popup .g-list__item {
37
- margin: 4px;
38
- border-radius: 8px;
39
- }
40
- .pc-feed-header-controls__popup_mobile {
41
- max-height: inherit;
42
- }
43
- .pc-feed-header-controls__popup_mobile .pc-feed-header-controls__popup-filter {
44
- position: relative;
45
- border: none;
46
- }
47
- .pc-feed-header-controls__popup_mobile .pc-feed-header-controls__popup-filter::before {
48
- position: absolute;
49
- bottom: 0px;
50
- left: 50%;
51
- width: 100vw;
52
- height: 2px;
53
- content: "";
54
- border-bottom: 2px solid var(--g-color-line-generic);
55
- border-bottom-right-radius: 0;
56
- border-bottom-left-radius: 0;
57
- transform: translateX(-50%);
58
- }
59
- .pc-feed-header-controls__popup-filter {
60
- padding: 4px 12px;
61
- font-size: var(--g-text-body-2-font-size, var(--pc-text-body-2-font-size));
62
- line-height: var(--g-text-body-2-line-height, var(--pc-text-body-2-line-height));
63
- border: none;
64
- border-bottom: 1px solid var(--g-color-line-generic);
65
- border-bottom-right-radius: 0;
66
- border-bottom-left-radius: 0;
67
- }
68
23
  .pc-feed-header-controls__filter-item {
69
24
  flex-grow: 1;
70
25
  min-width: 230px;
@@ -3,44 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Controls = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const react_1 = tslib_1.__importStar(require("react"));
6
- const uikit_1 = require("@gravity-ui/uikit");
7
6
  const feedHeaderContext_1 = require("../../../context/feedHeaderContext");
8
- const mobileContext_1 = require("../../../context/mobileContext");
9
7
  const utils_1 = require("../../../utils");
10
- const Search_1 = require("../Search/Search");
11
- const customRenders_1 = require("./customRenders");
8
+ const FilterInput_1 = tslib_1.__importDefault(require("../../Filters/FilterInput/FilterInput"));
9
+ const FilterMultipleSelect_1 = tslib_1.__importDefault(require("../../Filters/FilterMultipleSelect/FilterMultipleSelect"));
10
+ const FilterSelect_1 = tslib_1.__importDefault(require("../../Filters/FilterSelect/FilterSelect"));
11
+ const i18n_1 = require("../i18n");
12
12
  const b = (0, utils_1.block)('feed-header-controls');
13
- const VIRTUALIZATION_THRESHOLD = 1000;
14
- const FilterInput = ({ value, onChange, label, }) => (react_1.default.createElement("div", { className: b('filter-item') },
15
- react_1.default.createElement(Search_1.Search, { className: b('filter-input'), placeholder: label, initialValue: value, onSubmit: onChange })));
16
- const FilterMultipleSelect = ({ label, value, onChange, items = [], }) => {
17
- const isMobile = (0, react_1.useContext)(mobileContext_1.MobileContext);
18
- const handleUpdate = (selected) => {
19
- const asString = selected.join(',');
20
- onChange(asString);
21
- };
22
- const valueLocal = (0, react_1.useMemo)(() => (value ? [...value.split(',')] : []), [value]);
23
- return (react_1.default.createElement("div", { className: b('filter-item') },
24
- react_1.default.createElement(uikit_1.Select, { className: b('filter-select'), size: "xl", options: items, defaultValue: [], value: valueLocal, onUpdate: handleUpdate, popupClassName: b('popup', { mobile: isMobile }), renderControl: (0, customRenders_1.renderSwitcher)({
25
- initial: valueLocal,
26
- list: items,
27
- defaultLabel: label || '',
28
- }), disablePortal: true, virtualizationThreshold: VIRTUALIZATION_THRESHOLD, renderOption: customRenders_1.renderOption, renderFilter: customRenders_1.renderFilter, multiple: true, filterable: true, hasClear: true })));
29
- };
30
- const FilterSelect = ({ label, value, onChange, items = [], }) => {
31
- const isMobile = (0, react_1.useContext)(mobileContext_1.MobileContext);
32
- const handleUpdate = (selected) => {
33
- const isEmpty = selected.some((tag) => tag === 'empty');
34
- onChange(isEmpty ? '' : selected[0]);
35
- };
36
- const valueLocal = (0, react_1.useMemo)(() => (value ? [value] : []), [value]);
37
- return (react_1.default.createElement("div", { className: b('filter-item') },
38
- react_1.default.createElement(uikit_1.Select, { className: b('filter-select'), size: "xl", options: items, defaultValue: [], value: valueLocal, onUpdate: handleUpdate, popupClassName: b('popup', { mobile: isMobile }), renderControl: (0, customRenders_1.renderSwitcher)({
39
- initial: valueLocal,
40
- list: items,
41
- defaultLabel: label || '',
42
- }), disablePortal: true, virtualizationThreshold: VIRTUALIZATION_THRESHOLD, renderOption: customRenders_1.renderOption })));
43
- };
44
13
  const Filter = ({ name, type, value, label, items, }) => {
45
14
  const { onChangeFilter } = (0, react_1.useContext)(feedHeaderContext_1.FeedHeaderFunctionsContext);
46
15
  const handleChangeFilter = (0, react_1.useCallback)((data) => {
@@ -48,11 +17,14 @@ const Filter = ({ name, type, value, label, items, }) => {
48
17
  }, [name, onChangeFilter]);
49
18
  switch (type) {
50
19
  case 'input':
51
- return react_1.default.createElement(FilterInput, { label: label, value: value, onChange: handleChangeFilter });
20
+ return (react_1.default.createElement("div", { className: b('filter-item') },
21
+ react_1.default.createElement(FilterInput_1.default, { label: label, value: value, onChange: handleChangeFilter, clearText: (0, i18n_1.i18n)('clear') })));
52
22
  case 'multiple-select':
53
- return (react_1.default.createElement(FilterMultipleSelect, { label: label, items: items, value: value, onChange: handleChangeFilter }));
23
+ return (react_1.default.createElement("div", { className: b('filter-item') },
24
+ react_1.default.createElement(FilterMultipleSelect_1.default, { label: label, items: items, value: value, onChange: handleChangeFilter, filterText: (0, i18n_1.i18n)('search') })));
54
25
  case 'select':
55
- return (react_1.default.createElement(FilterSelect, { label: label, items: items, value: value, onChange: handleChangeFilter }));
26
+ return (react_1.default.createElement("div", { className: b('filter-item') },
27
+ react_1.default.createElement(FilterSelect_1.default, { label: label, items: items, value: value, onChange: handleChangeFilter })));
56
28
  default:
57
29
  return null;
58
30
  }
@@ -0,0 +1,5 @@
1
+ /* use this for style redefinitions to awoid problems with
2
+ unpredictable css rules order in build */
3
+ .pc-filter-input {
4
+ width: 100%;
5
+ }
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ declare const _default: React.MemoExoticComponent<({ value, onChange, label, clearText, }: {
3
+ value: string;
4
+ onChange: (value: string) => void;
5
+ label?: string | undefined;
6
+ clearText?: string | undefined;
7
+ }) => JSX.Element>;
8
+ export default _default;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const react_1 = tslib_1.__importDefault(require("react"));
5
+ const utils_1 = require("../../../utils");
6
+ const Search_1 = require("../Search/Search");
7
+ const b = (0, utils_1.block)('filter-input');
8
+ const FilterInput = ({ value, onChange, label, clearText, }) => (react_1.default.createElement(Search_1.Search, { className: b('filter-input'), placeholder: label, initialValue: value, onSubmit: onChange, clearText: clearText }));
9
+ exports.default = react_1.default.memo(FilterInput);
@@ -0,0 +1,47 @@
1
+ /* use this for style redefinitions to awoid problems with
2
+ unpredictable css rules order in build */
3
+ .pc-filter-multiple-select {
4
+ width: 100%;
5
+ }
6
+ .pc-filter-multiple-select__popup {
7
+ max-height: 500px;
8
+ border-radius: 12px;
9
+ }
10
+ .pc-filter-multiple-select__popup .g-select-list::-webkit-scrollbar {
11
+ display: none;
12
+ }
13
+ .pc-filter-multiple-select__popup .g-select-list .g-list {
14
+ max-height: calc(500px - var(--g-text-body-3-line-height) - 12px);
15
+ }
16
+ .pc-filter-multiple-select__popup .g-list__item {
17
+ margin: 4px;
18
+ border-radius: 8px;
19
+ }
20
+ .pc-filter-multiple-select__popup_mobile {
21
+ max-height: inherit;
22
+ }
23
+ .pc-filter-multiple-select__popup_mobile .pc-filter-multiple-select__popup-filter {
24
+ position: relative;
25
+ border: none;
26
+ }
27
+ .pc-filter-multiple-select__popup_mobile .pc-filter-multiple-select__popup-filter::before {
28
+ position: absolute;
29
+ bottom: 0px;
30
+ left: 50%;
31
+ width: 100vw;
32
+ height: 2px;
33
+ content: "";
34
+ border-bottom: 2px solid var(--g-color-line-generic);
35
+ border-bottom-right-radius: 0;
36
+ border-bottom-left-radius: 0;
37
+ transform: translateX(-50%);
38
+ }
39
+ .pc-filter-multiple-select__popup-filter {
40
+ padding: 4px 12px;
41
+ font-size: var(--g-text-body-2-font-size, var(--pc-text-body-2-font-size));
42
+ line-height: var(--g-text-body-2-line-height, var(--pc-text-body-2-line-height));
43
+ border: none;
44
+ border-bottom: 1px solid var(--g-color-line-generic);
45
+ border-bottom-right-radius: 0;
46
+ border-bottom-left-radius: 0;
47
+ }
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import { FeedHeaderOption } from '../../../context/feedHeaderContext';
3
+ declare const _default: React.MemoExoticComponent<({ label, value, onChange, items, filterText, }: {
4
+ value: string;
5
+ onChange: (value: string) => void;
6
+ label?: string | undefined;
7
+ items?: FeedHeaderOption[] | undefined;
8
+ filterText?: string | undefined;
9
+ }) => JSX.Element>;
10
+ export default _default;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const react_1 = tslib_1.__importStar(require("react"));
5
+ const uikit_1 = require("@gravity-ui/uikit");
6
+ const mobileContext_1 = require("../../../context/mobileContext");
7
+ const utils_1 = require("../../../utils");
8
+ const customRenders_1 = require("../customRenders");
9
+ const b = (0, utils_1.block)('filter-multiple-select');
10
+ const VIRTUALIZATION_THRESHOLD = 1000;
11
+ const FilterMultipleSelect = ({ label, value, onChange, items = [], filterText, }) => {
12
+ const isMobile = (0, react_1.useContext)(mobileContext_1.MobileContext);
13
+ const handleUpdate = (selected) => {
14
+ const asString = selected.join(',');
15
+ onChange(asString);
16
+ };
17
+ const valueLocal = (0, react_1.useMemo)(() => (value ? [...value.split(',')] : []), [value]);
18
+ return (react_1.default.createElement(uikit_1.Select, { className: b(), size: "xl", options: items, defaultValue: [], value: valueLocal, onUpdate: handleUpdate, popupClassName: b('popup', { mobile: isMobile }), renderControl: (0, customRenders_1.renderSwitcher)({
19
+ initial: valueLocal,
20
+ list: items,
21
+ defaultLabel: label || '',
22
+ }), disablePortal: true, virtualizationThreshold: VIRTUALIZATION_THRESHOLD, renderOption: customRenders_1.renderOption, renderFilter: (0, customRenders_1.renderFilter)({
23
+ placeholder: filterText,
24
+ className: b('popup-filter'),
25
+ }), multiple: true, filterable: true, hasClear: true }));
26
+ };
27
+ exports.default = react_1.default.memo(FilterMultipleSelect);
@@ -0,0 +1,22 @@
1
+ /* use this for style redefinitions to awoid problems with
2
+ unpredictable css rules order in build */
3
+ .pc-filter-select {
4
+ width: 100%;
5
+ }
6
+ .pc-filter-select__popup {
7
+ max-height: 500px;
8
+ border-radius: 12px;
9
+ }
10
+ .pc-filter-select__popup .g-select-list::-webkit-scrollbar {
11
+ display: none;
12
+ }
13
+ .pc-filter-select__popup .g-select-list .g-list {
14
+ max-height: calc(500px - var(--g-text-body-3-line-height) - 12px);
15
+ }
16
+ .pc-filter-select__popup .g-list__item {
17
+ margin: 4px;
18
+ border-radius: 8px;
19
+ }
20
+ .pc-filter-select__popup_mobile {
21
+ max-height: inherit;
22
+ }
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import { FeedHeaderOption } from '../../../context/feedHeaderContext';
3
+ declare const _default: React.MemoExoticComponent<({ label, value, onChange, items, }: {
4
+ value: string;
5
+ onChange: (value: string) => void;
6
+ label?: string | undefined;
7
+ items?: FeedHeaderOption[] | undefined;
8
+ }) => JSX.Element>;
9
+ export default _default;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const react_1 = tslib_1.__importStar(require("react"));
5
+ const uikit_1 = require("@gravity-ui/uikit");
6
+ const mobileContext_1 = require("../../../context/mobileContext");
7
+ const utils_1 = require("../../../utils");
8
+ const customRenders_1 = require("../customRenders");
9
+ const b = (0, utils_1.block)('filter-select');
10
+ const VIRTUALIZATION_THRESHOLD = 1000;
11
+ const FilterSelect = ({ label, value, onChange, items = [], }) => {
12
+ const isMobile = (0, react_1.useContext)(mobileContext_1.MobileContext);
13
+ const handleUpdate = (selected) => {
14
+ const isEmpty = selected.some((tag) => tag === 'empty');
15
+ onChange(isEmpty ? '' : selected[0]);
16
+ };
17
+ const valueLocal = (0, react_1.useMemo)(() => (value ? [value] : []), [value]);
18
+ return (react_1.default.createElement(uikit_1.Select, { className: b(), size: "xl", options: items, defaultValue: [], value: valueLocal, onUpdate: handleUpdate, popupClassName: b('popup', { mobile: isMobile }), renderControl: (0, customRenders_1.renderSwitcher)({
19
+ initial: valueLocal,
20
+ list: items,
21
+ defaultLabel: label || '',
22
+ }), disablePortal: true, virtualizationThreshold: VIRTUALIZATION_THRESHOLD, renderOption: customRenders_1.renderOption }));
23
+ };
24
+ exports.default = react_1.default.memo(FilterSelect);
@@ -0,0 +1,13 @@
1
+ /* use this for style redefinitions to awoid problems with
2
+ unpredictable css rules order in build */
3
+ .pc-filter-selects {
4
+ margin-bottom: 32px;
5
+ gap: 16px;
6
+ display: flex;
7
+ flex-wrap: wrap;
8
+ }
9
+ .pc-filter-selects__select {
10
+ width: 240px;
11
+ --pc-color-border-switcher: var(--g-color-private-cool-grey-400-solid);
12
+ --pc-color-border-switcher-hover: var(--g-color-private-cool-grey-600-solid);
13
+ }
@@ -0,0 +1,8 @@
1
+ import { SelectProps } from '../../../models';
2
+ interface FilterSelectsProps {
3
+ selects: SelectProps[];
4
+ filters: Record<string, string>;
5
+ handleChange: (name: string, value: string) => void;
6
+ }
7
+ export declare const FilterSelects: ({ selects, filters, handleChange }: FilterSelectsProps) => JSX.Element | null;
8
+ export default FilterSelects;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FilterSelects = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importStar(require("react"));
6
+ const utils_1 = require("../../../utils");
7
+ const FilterSelect_1 = tslib_1.__importDefault(require("../FilterSelect/FilterSelect"));
8
+ const b = (0, utils_1.block)('filter-selects');
9
+ const SelectItem = ({ name, value, items, handleChange, }) => {
10
+ const handleChangeLocal = (0, react_1.useCallback)((data) => handleChange(name, data), [handleChange, name]);
11
+ return react_1.default.createElement(FilterSelect_1.default, { value: value, items: items, onChange: handleChangeLocal });
12
+ };
13
+ const FilterSelects = ({ selects, filters, handleChange }) => {
14
+ if (!selects.length)
15
+ return null;
16
+ return (react_1.default.createElement("div", { className: b() }, selects.map(({ name, options }) => (react_1.default.createElement("div", { className: b('select'), key: name },
17
+ react_1.default.createElement(SelectItem, { name: name, items: options, value: filters[name], handleChange: handleChange }))))));
18
+ };
19
+ exports.FilterSelects = FilterSelects;
20
+ exports.default = exports.FilterSelects;
@@ -1,6 +1,6 @@
1
1
  /* use this for style redefinitions to awoid problems with
2
2
  unpredictable css rules order in build */
3
- .pc-feed-header-search {
3
+ .pc-filter-search {
4
4
  position: relative;
5
5
  display: flex;
6
6
  justify-content: flex-end;
@@ -9,7 +9,7 @@ unpredictable css rules order in build */
9
9
  line-height: var(--g-text-body-1-line-height, var(--pc-text-body-1-line-height));
10
10
  transition: width 0.3s;
11
11
  }
12
- .pc-feed-header-search__input-icon {
12
+ .pc-filter-search__input-icon {
13
13
  display: flex;
14
14
  padding-right: 7px;
15
15
  font: inherit;
@@ -18,7 +18,7 @@ unpredictable css rules order in build */
18
18
  border: none;
19
19
  background: none;
20
20
  }
21
- .pc-feed-header-search__suggest {
21
+ .pc-filter-search__suggest {
22
22
  display: flex;
23
23
  align-items: center;
24
24
  height: 44px;
@@ -26,20 +26,20 @@ unpredictable css rules order in build */
26
26
  border-radius: var(--bc-text-input-border-radius);
27
27
  background-color: var(--g-color-base-background);
28
28
  }
29
- .pc-feed-header-search__suggest:hover, .pc-feed-header-search__suggest:focus {
29
+ .pc-filter-search__suggest:hover, .pc-filter-search__suggest:focus {
30
30
  border: 1px solid var(--g-color-base-generic-hover);
31
31
  }
32
- .pc-feed-header-search__control.pc-feed-header-search__control {
32
+ .pc-filter-search__control.pc-filter-search__control {
33
33
  padding-right: 32px;
34
34
  padding-left: 12px;
35
35
  }
36
36
 
37
- .pc-feed-header-search_size_s {
37
+ .pc-filter-search_size_s {
38
38
  --bc-text-input-border-radius: var(--g-border-radius-l);
39
39
  width: 352px;
40
40
  max-width: 100%;
41
41
  height: 36px;
42
42
  }
43
- .pc-feed-header-search_size_m {
43
+ .pc-filter-search_size_m {
44
44
  --bc-text-input-border-radius: var(--g-border-radius-xl);
45
45
  }
@@ -6,6 +6,7 @@ type SearchProps = {
6
6
  debounce?: number;
7
7
  placeholder?: string;
8
8
  size?: SearchSize;
9
+ clearText?: string;
9
10
  };
10
- export declare const Search: ({ className, initialValue, onSubmit, debounce, placeholder, size, }: SearchProps) => JSX.Element;
11
+ export declare const Search: ({ className, initialValue, onSubmit, debounce, placeholder, size, clearText, }: SearchProps) => JSX.Element;
11
12
  export default Search;
@@ -8,11 +8,10 @@ const debounce_1 = tslib_1.__importDefault(require("lodash/debounce"));
8
8
  const CloseIcon_1 = require("../../../icons/CloseIcon");
9
9
  const SearchIcon_1 = require("../../../icons/SearchIcon");
10
10
  const utils_1 = require("../../../utils");
11
- const i18n_1 = require("../i18n");
12
- const b = (0, utils_1.block)('feed-header-search');
11
+ const b = (0, utils_1.block)('filter-search');
13
12
  const SEARCH_ICON_SIZE = 16;
14
13
  const CLOSE_ICON_SIZE = 12;
15
- const Search = ({ className, initialValue, onSubmit, debounce = 300, placeholder, size = 'm', }) => {
14
+ const Search = ({ className, initialValue, onSubmit, debounce = 300, placeholder, size = 'm', clearText, }) => {
16
15
  const handleChange = (0, debounce_1.default)(onSubmit, debounce);
17
16
  const [isSetInitValue, setIsSetInitValue] = (0, react_1.useState)(false);
18
17
  const [value, setValue] = (0, react_1.useState)(initialValue);
@@ -34,8 +33,8 @@ const Search = ({ className, initialValue, onSubmit, debounce = 300, placeholder
34
33
  (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
35
34
  }
36
35
  }, [value, handleChange, onSubmit]);
37
- const rightContent = (0, react_1.useMemo)(() => (react_1.default.createElement("button", { className: b('input-icon'), onClick: handleClick, "aria-label": (0, i18n_1.i18n)('clear'), disabled: !value },
38
- react_1.default.createElement(uikit_1.Icon, { data: iconData, size: iconSize }))), [handleClick, value, iconData, iconSize]);
36
+ const rightContent = (0, react_1.useMemo)(() => (react_1.default.createElement("button", { className: b('input-icon'), onClick: handleClick, "aria-label": clearText, disabled: !value },
37
+ react_1.default.createElement(uikit_1.Icon, { data: iconData, size: iconSize }))), [handleClick, value, iconData, iconSize, clearText]);
39
38
  const handleUpdate = (0, react_1.useCallback)((query) => {
40
39
  setValue(query);
41
40
  handleChange(query);
@@ -1,6 +1,6 @@
1
1
  /* use this for style redefinitions to awoid problems with
2
2
  unpredictable css rules order in build */
3
- .pc-feed-header-select-option {
3
+ .pc-filter-select-option {
4
4
  display: flex;
5
5
  font-size: var(--g-text-body-2-font-size, var(--pc-text-body-2-font-size));
6
6
  line-height: var(--g-text-body-2-line-height, var(--pc-text-body-2-line-height));
@@ -4,7 +4,7 @@ exports.SelectOption = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const react_1 = tslib_1.__importDefault(require("react"));
6
6
  const utils_1 = require("../../../utils");
7
- const b = (0, utils_1.block)('feed-header-select-option');
7
+ const b = (0, utils_1.block)('filter-select-option');
8
8
  const SelectOption = ({ data }) => {
9
9
  return (react_1.default.createElement("div", { className: b() },
10
10
  react_1.default.createElement("span", null, data.content)));