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

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 +16 -38
  8. package/build/cjs/blocks/Slider/Slider.js +5 -0
  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 +16 -38
  42. package/build/esm/blocks/Slider/Slider.js +5 -0
  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,22 @@ unpredictable css rules order in build */
118
118
  .pc-SliderBlock .slick-arrow.slick-prev {
119
119
  right: 42px;
120
120
  }
121
+ .pc-SliderBlock__mobile-scroll {
122
+ display: flex;
123
+ margin: 0 -24px;
124
+ padding: 24px;
125
+ gap: 16px;
126
+ overflow-x: auto;
127
+ -webkit-overflow-scrolling: touch;
128
+ scrollbar-width: none;
129
+ }
130
+ .pc-SliderBlock__mobile-scroll::-webkit-scrollbar {
131
+ display: none;
132
+ }
133
+ .pc-SliderBlock__mobile-scroll-item {
134
+ flex: 0 0 auto;
135
+ width: 90%;
136
+ }
121
137
  .pc-SliderBlock__header_no-description {
122
138
  position: relative;
123
139
  top: -3px;
@@ -653,26 +669,6 @@ unpredictable css rules order in build */
653
669
  .pc-SliderBlock_type_header-card .slick-arrow.slick-prev {
654
670
  left: 0;
655
671
  }
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
672
  @media (max-width: 769px) {
677
673
  .pc-SliderBlock__footer {
678
674
  display: block;
@@ -682,22 +678,4 @@ unpredictable css rules order in build */
682
678
  width: 100%;
683
679
  padding-bottom: 20px;
684
680
  }
685
- }
686
- @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;
699
- }
700
- .pc-SliderBlock:not(.pc-SliderBlock_one-slide) .slick-slide {
701
- padding: 0 8px;
702
- }
703
681
  }
@@ -245,6 +245,11 @@ const SliderBlock = (props) => {
245
245
  return disclaimer ? (react_1.default.createElement("div", { className: b('disclaimer', { size: disclaimer.size || 'm' }) }, disclaimer.text)) : null;
246
246
  };
247
247
  const renderSlider = () => {
248
+ if (isMobile) {
249
+ return (react_1.default.createElement(react_1.default.Fragment, null,
250
+ 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)))),
251
+ react_1.default.createElement("div", { className: b('footer') }, renderDisclaimer())));
252
+ }
248
253
  /* Disable adding of width in inline styles when SSR to prevent overriding of default styles */
249
254
  /* Calculate appropriate breakpoint for mobile devices with user agent */
250
255
  const variableWidth = isServer && isMobile;
@@ -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)));