@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.
- package/build/cjs/blocks/Reports/Reports.css +0 -6
- package/build/cjs/blocks/Reports/Reports.js +2 -1
- package/build/cjs/blocks/ReportsCards/ReportsCards.css +0 -6
- package/build/cjs/blocks/ReportsCards/ReportsCards.js +2 -1
- package/build/cjs/blocks/ReportsSections/ReportsSections.css +0 -6
- package/build/cjs/blocks/ReportsSections/ReportsSections.js +2 -1
- package/build/cjs/blocks/Slider/Slider.css +16 -38
- package/build/cjs/blocks/Slider/Slider.js +5 -0
- package/build/cjs/components/FeedHeader/Controls/Controls.css +0 -45
- package/build/cjs/components/FeedHeader/Controls/Controls.js +10 -38
- package/build/cjs/components/Filters/FilterInput/FilterInput.css +5 -0
- package/build/cjs/components/Filters/FilterInput/FilterInput.d.ts +8 -0
- package/build/cjs/components/Filters/FilterInput/FilterInput.js +9 -0
- package/build/cjs/components/Filters/FilterMultipleSelect/FilterMultipleSelect.css +47 -0
- package/build/cjs/components/Filters/FilterMultipleSelect/FilterMultipleSelect.d.ts +10 -0
- package/build/cjs/components/Filters/FilterMultipleSelect/FilterMultipleSelect.js +27 -0
- package/build/cjs/components/Filters/FilterSelect/FilterSelect.css +22 -0
- package/build/cjs/components/Filters/FilterSelect/FilterSelect.d.ts +9 -0
- package/build/cjs/components/Filters/FilterSelect/FilterSelect.js +24 -0
- package/build/cjs/components/Filters/FilterSelects/FilterSelects.css +13 -0
- package/build/cjs/components/Filters/FilterSelects/FilterSelects.d.ts +8 -0
- package/build/cjs/components/Filters/FilterSelects/FilterSelects.js +20 -0
- package/build/cjs/components/{FeedHeader → Filters}/Search/Search.css +7 -7
- package/build/cjs/components/{FeedHeader → Filters}/Search/Search.d.ts +2 -1
- package/build/cjs/components/{FeedHeader → Filters}/Search/Search.js +4 -5
- package/build/cjs/components/{FeedHeader → Filters}/SelectOption/SelectOption.css +1 -1
- package/build/cjs/components/{FeedHeader → Filters}/SelectOption/SelectOption.js +1 -1
- package/build/cjs/components/{FeedHeader → Filters}/Switcher/Switcher.css +15 -15
- package/build/cjs/components/{FeedHeader → Filters}/Switcher/Switcher.js +1 -1
- package/build/cjs/components/{FeedHeader/Controls → Filters}/customRenders.d.ts +6 -2
- package/build/cjs/components/Filters/customRenders.js +26 -0
- package/build/cjs/components/index.d.ts +0 -1
- package/build/cjs/components/index.js +1 -3
- package/build/cjs/models/constructor-items/common.d.ts +1 -1
- package/build/esm/blocks/Reports/Reports.css +0 -6
- package/build/esm/blocks/Reports/Reports.js +3 -2
- package/build/esm/blocks/ReportsCards/ReportsCards.css +0 -6
- package/build/esm/blocks/ReportsCards/ReportsCards.js +3 -2
- package/build/esm/blocks/ReportsSections/ReportsSections.css +0 -6
- package/build/esm/blocks/ReportsSections/ReportsSections.js +3 -2
- package/build/esm/blocks/Slider/Slider.css +16 -38
- package/build/esm/blocks/Slider/Slider.js +5 -0
- package/build/esm/components/FeedHeader/Controls/Controls.css +0 -45
- package/build/esm/components/FeedHeader/Controls/Controls.js +11 -39
- package/build/esm/components/Filters/FilterInput/FilterInput.css +5 -0
- package/build/esm/components/Filters/FilterInput/FilterInput.d.ts +9 -0
- package/build/esm/components/Filters/FilterInput/FilterInput.js +7 -0
- package/build/esm/components/Filters/FilterMultipleSelect/FilterMultipleSelect.css +47 -0
- package/build/esm/components/Filters/FilterMultipleSelect/FilterMultipleSelect.d.ts +11 -0
- package/build/esm/components/Filters/FilterMultipleSelect/FilterMultipleSelect.js +25 -0
- package/build/esm/components/Filters/FilterSelect/FilterSelect.css +22 -0
- package/build/esm/components/Filters/FilterSelect/FilterSelect.d.ts +10 -0
- package/build/esm/components/Filters/FilterSelect/FilterSelect.js +22 -0
- package/build/esm/components/Filters/FilterSelects/FilterSelects.css +13 -0
- package/build/esm/components/Filters/FilterSelects/FilterSelects.d.ts +9 -0
- package/build/esm/components/Filters/FilterSelects/FilterSelects.js +16 -0
- package/build/esm/components/{FeedHeader → Filters}/Search/Search.css +7 -7
- package/build/esm/components/{FeedHeader → Filters}/Search/Search.d.ts +2 -1
- package/build/esm/components/{FeedHeader → Filters}/Search/Search.js +4 -5
- package/build/esm/components/{FeedHeader → Filters}/SelectOption/SelectOption.css +1 -1
- package/build/esm/components/{FeedHeader → Filters}/SelectOption/SelectOption.js +1 -1
- package/build/esm/components/{FeedHeader → Filters}/Switcher/Switcher.css +15 -15
- package/build/esm/components/{FeedHeader → Filters}/Switcher/Switcher.js +1 -1
- package/build/esm/components/{FeedHeader/Controls → Filters}/customRenders.d.ts +6 -3
- package/build/esm/components/{FeedHeader/Controls → Filters}/customRenders.js +7 -8
- package/build/esm/components/index.d.ts +0 -1
- package/build/esm/components/index.js +0 -1
- package/build/esm/models/constructor-items/common.d.ts +1 -1
- package/package.json +1 -1
- package/server/models/constructor-items/common.d.ts +1 -1
- package/widget/index.js +1 -1
- package/build/cjs/components/FeedHeader/Controls/customRenders.js +0 -26
- package/build/cjs/components/Select/Select.css +0 -22
- package/build/cjs/components/Select/Select.d.ts +0 -7
- package/build/cjs/components/Select/Select.js +0 -13
- package/build/esm/components/Select/Select.css +0 -22
- package/build/esm/components/Select/Select.d.ts +0 -8
- package/build/esm/components/Select/Select.js +0 -11
- /package/build/cjs/components/{FeedHeader → Filters}/SelectOption/SelectOption.d.ts +0 -0
- /package/build/cjs/components/{FeedHeader → Filters}/Switcher/Switcher.d.ts +0 -0
- /package/build/esm/components/{FeedHeader → Filters}/SelectOption/SelectOption.d.ts +0 -0
- /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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
11
|
-
const
|
|
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(
|
|
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(
|
|
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(
|
|
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,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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
|
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":
|
|
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-
|
|
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)('
|
|
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)));
|