@doyourjob/gravity-ui-page-constructor 5.31.84 → 5.31.86

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 (106) hide show
  1. package/build/cjs/blocks/Header/SwitchingTitle/SwitchingTtitle.js +8 -5
  2. package/build/cjs/blocks/Reports/Reports.css +14 -5
  3. package/build/cjs/blocks/Reports/Reports.js +5 -16
  4. package/build/cjs/blocks/ReportsCards/ReportsCards.css +0 -6
  5. package/build/cjs/blocks/ReportsCards/ReportsCards.js +2 -1
  6. package/build/cjs/blocks/ReportsSections/Item/Item.css +3 -1
  7. package/build/cjs/blocks/ReportsSections/Item/Item.js +1 -1
  8. package/build/cjs/blocks/ReportsSections/ReportsSections.css +0 -6
  9. package/build/cjs/blocks/ReportsSections/ReportsSections.js +2 -1
  10. package/build/cjs/blocks/ReportsSections/Section/Section.js +1 -2
  11. package/build/cjs/components/FeedHeader/Controls/Controls.css +0 -45
  12. package/build/cjs/components/FeedHeader/Controls/Controls.js +10 -38
  13. package/build/cjs/components/Filters/FilterInput/FilterInput.css +5 -0
  14. package/build/cjs/components/Filters/FilterInput/FilterInput.d.ts +8 -0
  15. package/build/cjs/components/Filters/FilterInput/FilterInput.js +9 -0
  16. package/build/cjs/components/Filters/FilterMultipleSelect/FilterMultipleSelect.css +47 -0
  17. package/build/cjs/components/Filters/FilterMultipleSelect/FilterMultipleSelect.d.ts +10 -0
  18. package/build/cjs/components/Filters/FilterMultipleSelect/FilterMultipleSelect.js +27 -0
  19. package/build/cjs/components/Filters/FilterSelect/FilterSelect.css +22 -0
  20. package/build/cjs/components/Filters/FilterSelect/FilterSelect.d.ts +9 -0
  21. package/build/cjs/components/Filters/FilterSelect/FilterSelect.js +24 -0
  22. package/build/cjs/components/Filters/FilterSelects/FilterSelects.css +13 -0
  23. package/build/cjs/components/Filters/FilterSelects/FilterSelects.d.ts +8 -0
  24. package/build/cjs/components/Filters/FilterSelects/FilterSelects.js +20 -0
  25. package/build/{esm/components/FeedHeader → cjs/components/Filters}/Search/Search.css +7 -7
  26. package/build/cjs/components/{FeedHeader → Filters}/Search/Search.d.ts +2 -1
  27. package/build/cjs/components/{FeedHeader → Filters}/Search/Search.js +4 -5
  28. package/build/cjs/components/{FeedHeader → Filters}/SelectOption/SelectOption.css +1 -1
  29. package/build/cjs/components/{FeedHeader → Filters}/SelectOption/SelectOption.js +1 -1
  30. package/build/cjs/components/{FeedHeader → Filters}/Switcher/Switcher.css +15 -15
  31. package/build/cjs/components/{FeedHeader → Filters}/Switcher/Switcher.js +1 -1
  32. package/build/cjs/components/{FeedHeader/Controls → Filters}/customRenders.d.ts +6 -2
  33. package/build/cjs/components/Filters/customRenders.js +26 -0
  34. package/build/cjs/components/Paginator/Paginator.js +16 -23
  35. package/build/cjs/components/Paginator/components/PaginatorItem.d.ts +1 -1
  36. package/build/cjs/components/Paginator/components/PaginatorItem.js +38 -26
  37. package/build/cjs/components/Paginator/types.d.ts +3 -3
  38. package/build/cjs/components/Paginator/utils.js +4 -13
  39. package/build/cjs/components/index.d.ts +0 -2
  40. package/build/cjs/components/index.js +1 -5
  41. package/build/cjs/models/constructor-items/common.d.ts +1 -1
  42. package/build/cjs/sub-blocks/AttachmentCard/AttachmentCard.css +6 -4
  43. package/build/cjs/sub-blocks/AttachmentCard/AttachmentCard.js +2 -2
  44. package/build/esm/blocks/Header/SwitchingTitle/SwitchingTtitle.js +9 -6
  45. package/build/esm/blocks/Reports/Reports.css +14 -5
  46. package/build/esm/blocks/Reports/Reports.js +6 -17
  47. package/build/esm/blocks/ReportsCards/ReportsCards.css +0 -6
  48. package/build/esm/blocks/ReportsCards/ReportsCards.js +3 -2
  49. package/build/esm/blocks/ReportsSections/Item/Item.css +3 -1
  50. package/build/esm/blocks/ReportsSections/Item/Item.js +1 -1
  51. package/build/esm/blocks/ReportsSections/ReportsSections.css +0 -6
  52. package/build/esm/blocks/ReportsSections/ReportsSections.js +3 -2
  53. package/build/esm/blocks/ReportsSections/Section/Section.js +1 -2
  54. package/build/esm/components/FeedHeader/Controls/Controls.css +0 -45
  55. package/build/esm/components/FeedHeader/Controls/Controls.js +11 -39
  56. package/build/esm/components/Filters/FilterInput/FilterInput.css +5 -0
  57. package/build/esm/components/Filters/FilterInput/FilterInput.d.ts +9 -0
  58. package/build/esm/components/Filters/FilterInput/FilterInput.js +7 -0
  59. package/build/esm/components/Filters/FilterMultipleSelect/FilterMultipleSelect.css +47 -0
  60. package/build/esm/components/Filters/FilterMultipleSelect/FilterMultipleSelect.d.ts +11 -0
  61. package/build/esm/components/Filters/FilterMultipleSelect/FilterMultipleSelect.js +25 -0
  62. package/build/esm/components/Filters/FilterSelect/FilterSelect.css +22 -0
  63. package/build/esm/components/Filters/FilterSelect/FilterSelect.d.ts +10 -0
  64. package/build/esm/components/Filters/FilterSelect/FilterSelect.js +22 -0
  65. package/build/esm/components/Filters/FilterSelects/FilterSelects.css +13 -0
  66. package/build/esm/components/Filters/FilterSelects/FilterSelects.d.ts +9 -0
  67. package/build/esm/components/Filters/FilterSelects/FilterSelects.js +16 -0
  68. package/build/{cjs/components/FeedHeader → esm/components/Filters}/Search/Search.css +7 -7
  69. package/build/esm/components/{FeedHeader → Filters}/Search/Search.d.ts +2 -1
  70. package/build/esm/components/{FeedHeader → Filters}/Search/Search.js +4 -5
  71. package/build/esm/components/{FeedHeader → Filters}/SelectOption/SelectOption.css +1 -1
  72. package/build/esm/components/{FeedHeader → Filters}/SelectOption/SelectOption.js +1 -1
  73. package/build/esm/components/{FeedHeader → Filters}/Switcher/Switcher.css +15 -15
  74. package/build/esm/components/{FeedHeader → Filters}/Switcher/Switcher.js +1 -1
  75. package/build/esm/components/{FeedHeader/Controls → Filters}/customRenders.d.ts +6 -3
  76. package/build/esm/components/{FeedHeader/Controls → Filters}/customRenders.js +7 -8
  77. package/build/esm/components/Paginator/Paginator.js +17 -25
  78. package/build/esm/components/Paginator/components/PaginatorItem.d.ts +1 -1
  79. package/build/esm/components/Paginator/components/PaginatorItem.js +38 -26
  80. package/build/esm/components/Paginator/types.d.ts +3 -3
  81. package/build/esm/components/Paginator/utils.js +4 -13
  82. package/build/esm/components/index.d.ts +0 -2
  83. package/build/esm/components/index.js +0 -2
  84. package/build/esm/models/constructor-items/common.d.ts +1 -1
  85. package/build/esm/sub-blocks/AttachmentCard/AttachmentCard.css +6 -4
  86. package/build/esm/sub-blocks/AttachmentCard/AttachmentCard.js +2 -2
  87. package/package.json +1 -1
  88. package/server/models/constructor-items/common.d.ts +1 -1
  89. package/widget/index.js +1 -1
  90. package/build/cjs/components/FeedHeader/Controls/customRenders.js +0 -26
  91. package/build/cjs/components/ProgressCircular/ProgressCircular.css +0 -31
  92. package/build/cjs/components/ProgressCircular/ProgressCircular.d.ts +0 -8
  93. package/build/cjs/components/ProgressCircular/ProgressCircular.js +0 -14
  94. package/build/cjs/components/Select/Select.css +0 -22
  95. package/build/cjs/components/Select/Select.d.ts +0 -7
  96. package/build/cjs/components/Select/Select.js +0 -13
  97. package/build/esm/components/ProgressCircular/ProgressCircular.css +0 -31
  98. package/build/esm/components/ProgressCircular/ProgressCircular.d.ts +0 -9
  99. package/build/esm/components/ProgressCircular/ProgressCircular.js +0 -11
  100. package/build/esm/components/Select/Select.css +0 -22
  101. package/build/esm/components/Select/Select.d.ts +0 -8
  102. package/build/esm/components/Select/Select.js +0 -11
  103. /package/build/cjs/components/{FeedHeader → Filters}/SelectOption/SelectOption.d.ts +0 -0
  104. /package/build/cjs/components/{FeedHeader → Filters}/Switcher/Switcher.d.ts +0 -0
  105. /package/build/esm/components/{FeedHeader → Filters}/SelectOption/SelectOption.d.ts +0 -0
  106. /package/build/esm/components/{FeedHeader → Filters}/Switcher/Switcher.d.ts +0 -0
@@ -9,23 +9,26 @@ const SwitchingTitle = (props) => {
9
9
  const { text, switchingTime } = props;
10
10
  const [currentIndex, setCurrentIndex] = (0, react_1.useState)(0);
11
11
  const [opacity, setOpacity] = (0, react_1.useState)(1);
12
+ const timeoutsRef = (0, react_1.useRef)([]);
12
13
  const texts = (0, react_1.useMemo)(() => (0, utils_2.partitionSwitchingTitleInput)(text), [text]);
13
14
  const textSizesCommonMultiple = (0, react_1.useMemo)(() => texts.reduce((acc, curr) => acc * curr.length, 1), [texts]);
15
+ const clearAllTimeouts = () => {
16
+ timeoutsRef.current.forEach(clearTimeout);
17
+ timeoutsRef.current = [];
18
+ };
14
19
  (0, react_1.useEffect)(() => {
15
- const timeouts = [];
20
+ clearAllTimeouts();
16
21
  const intervalHandle = setInterval(() => {
17
22
  setOpacity(0);
18
23
  const timeout = setTimeout(() => {
19
24
  setCurrentIndex((c) => (c + 1) % textSizesCommonMultiple);
20
25
  setOpacity(1);
21
26
  }, 200);
22
- timeouts.push(timeout);
27
+ timeoutsRef.current.push(timeout);
23
28
  }, switchingTime);
24
29
  return () => {
25
30
  clearInterval(intervalHandle);
26
- for (const timeout of timeouts) {
27
- clearTimeout(timeout);
28
- }
31
+ clearAllTimeouts();
29
32
  };
30
33
  }, [texts, switchingTime, textSizesCommonMultiple]);
31
34
  return (react_1.default.createElement("span", null, texts.map((lines, index) => (react_1.default.createElement("span", { className: b('title-part'), style: {
@@ -1,13 +1,22 @@
1
1
  /* use this for style redefinitions to awoid problems with
2
2
  unpredictable css rules order in build */
3
+ .pc-reports-block {
4
+ display: flex;
5
+ flex-direction: column;
6
+ }
3
7
  .pc-reports-block__title {
4
8
  margin-bottom: 24px;
5
9
  }
6
- .pc-reports-block__select {
7
- margin-bottom: 32px;
8
- gap: 16px;
9
- display: flex;
10
- flex-wrap: wrap;
10
+ .pc-reports-block__loader {
11
+ align-self: center;
12
+ width: 48px;
13
+ height: 48px;
14
+ }
15
+ .pc-reports-block__loader > div {
16
+ border-color: var(--pc-color-progress-circular);
17
+ }
18
+ .pc-reports-block__paginator {
19
+ margin-top: 32px;
11
20
  }
12
21
  .pc-reports-block__items {
13
22
  margin: 0;
@@ -3,8 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ReportsBlock = 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");
6
7
  const components_1 = require("../../components");
7
- const types_1 = require("../../components/Paginator/types");
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"));
@@ -39,7 +40,7 @@ const ReportsBlock = ({ title, typeKey, empty }) => {
39
40
  : title, [title]);
40
41
  const renderItems = (0, react_1.useMemo)(() => {
41
42
  if (loading) {
42
- return react_1.default.createElement(components_1.ProgressCircular, null);
43
+ return react_1.default.createElement(uikit_1.Spin, { size: "xl", className: b('loader') });
43
44
  }
44
45
  if (!paginatedItems.length) {
45
46
  return react_1.default.createElement(components_1.EmptyPlug, { empty: empty });
@@ -47,23 +48,11 @@ const ReportsBlock = ({ title, typeKey, empty }) => {
47
48
  return (react_1.default.createElement("ul", { className: b('items') }, paginatedItems.map((item, index) => (react_1.default.createElement("li", { key: index },
48
49
  react_1.default.createElement(ReportsItem_1.default, Object.assign({}, item, { filesOutline: filesOutline })))))));
49
50
  }, [empty, filesOutline, loading, paginatedItems]);
50
- const handlePageChange = (0, react_1.useCallback)((index) => {
51
- switch (index) {
52
- case types_1.ArrowType.Prev:
53
- setPage((prev) => prev - 1);
54
- break;
55
- case types_1.ArrowType.Next:
56
- setPage((prev) => prev + 1);
57
- break;
58
- default:
59
- setPage(index);
60
- }
61
- }, []);
62
51
  return (react_1.default.createElement("div", { className: b() },
63
52
  title && react_1.default.createElement(components_1.Title, { className: b('title'), title: titleProps, colSizes: titleColSizes }),
64
- 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 }),
65
54
  renderItems,
66
- itemsPerPage && (react_1.default.createElement(components_1.Paginator, { page: page, itemsPerPage: itemsPerPage, totalItems: filteredItems.length, maxPages: Infinity, onPageChange: handlePageChange }))));
55
+ itemsPerPage && (react_1.default.createElement(components_1.Paginator, { page: page, itemsPerPage: itemsPerPage, totalItems: filteredItems.length, maxPages: Infinity, onPageChange: setPage, className: b('paginator') }))));
67
56
  };
68
57
  exports.ReportsBlock = ReportsBlock;
69
58
  exports.default = exports.ReportsBlock;
@@ -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 } }))));
@@ -4,9 +4,11 @@ unpredictable css rules order in build */
4
4
  padding: 24px 0;
5
5
  display: flex;
6
6
  align-items: center;
7
- border-bottom: 1px solid var(--g-color-private-black-100-solid);
8
7
  gap: 32px;
9
8
  }
9
+ .pc-reports-sections-item + .pc-reports-sections-item {
10
+ border-top: 1px solid var(--g-color-private-black-100-solid);
11
+ }
10
12
  .pc-reports-sections-item__wrap {
11
13
  flex: 1;
12
14
  }
@@ -6,7 +6,7 @@ const react_1 = tslib_1.__importDefault(require("react"));
6
6
  const components_1 = require("../../../components");
7
7
  const utils_1 = require("../../../utils");
8
8
  const b = (0, utils_1.block)('reports-sections-item');
9
- const Item = ({ title, files = [] }) => (react_1.default.createElement("div", { className: b() },
9
+ const Item = ({ title, files = [] }) => (react_1.default.createElement("li", { className: b() },
10
10
  react_1.default.createElement("div", { className: b('wrap') },
11
11
  react_1.default.createElement("div", { className: b('title') }, title)),
12
12
  Boolean(files.length) && (react_1.default.createElement("ul", { className: b('files') }, files.map((file) => (react_1.default.createElement("li", { key: file.link },
@@ -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;
@@ -9,7 +9,6 @@ const b = (0, utils_1.block)('reports-sections-section');
9
9
  const Section = ({ title, date, items = [] }) => (react_1.default.createElement("div", { className: b() },
10
10
  date && react_1.default.createElement("div", { className: b('date') }, date),
11
11
  title && react_1.default.createElement("h2", { className: b('title') }, title),
12
- Boolean(items.length) && (react_1.default.createElement("ul", { className: b('files') }, items.map((item, index) => (react_1.default.createElement("li", { key: index },
13
- react_1.default.createElement(Item_1.default, Object.assign({}, item)))))))));
12
+ Boolean(items.length) && (react_1.default.createElement("ul", { className: b('files') }, items.map((item, index) => (react_1.default.createElement(Item_1.default, Object.assign({ key: index }, item))))))));
14
13
  exports.Section = Section;
15
14
  exports.default = exports.Section;
@@ -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);