@gravity-ui/blog-constructor 9.1.2 → 10.0.0
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/README.md +1 -1
- package/build/cjs/blocks/Feed/Feed.js +4 -14
- package/build/cjs/blocks/Feed/Feed.js.map +1 -1
- package/build/cjs/components/FeedHeader/FeedHeader.d.ts +1 -1
- package/build/cjs/components/FeedHeader/FeedHeader.js +2 -2
- package/build/cjs/components/FeedHeader/FeedHeader.js.map +1 -1
- package/build/cjs/components/FeedHeader/components/Controls/Controls.css +14 -60
- package/build/cjs/components/FeedHeader/components/Controls/Controls.d.ts +3 -10
- package/build/cjs/components/FeedHeader/components/Controls/Controls.js +5 -62
- package/build/cjs/components/FeedHeader/components/Controls/Controls.js.map +1 -1
- package/build/cjs/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.d.ts +2 -3
- package/build/cjs/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.js.map +1 -1
- package/build/cjs/components/FeedHeader/components/Filters/Filter.css +48 -0
- package/build/cjs/components/FeedHeader/components/Filters/Filter.d.ts +8 -0
- package/build/cjs/components/FeedHeader/components/Filters/Filter.js +50 -0
- package/build/cjs/components/FeedHeader/components/Filters/Filter.js.map +1 -0
- package/build/cjs/components/FeedHeader/components/{Controls → Filters}/customRenders.d.ts +3 -1
- package/build/cjs/components/FeedHeader/components/{Controls → Filters}/customRenders.js +4 -4
- package/build/cjs/components/FeedHeader/components/Filters/customRenders.js.map +1 -0
- package/build/cjs/containers/BlogPage/BlogPage.d.ts +3 -4
- package/build/cjs/containers/BlogPage/BlogPage.js +2 -3
- package/build/cjs/containers/BlogPage/BlogPage.js.map +1 -1
- package/build/cjs/contexts/FeedContext.d.ts +2 -3
- package/build/cjs/contexts/FeedContext.js.map +1 -1
- package/build/cjs/models/common.d.ts +15 -10
- package/build/cjs/models/common.js.map +1 -1
- package/build/cjs/utils/common.d.ts +2 -2
- package/build/cjs/utils/common.js +8 -4
- package/build/cjs/utils/common.js.map +1 -1
- package/build/esm/blocks/Feed/Feed.js +4 -14
- package/build/esm/blocks/Feed/Feed.js.map +1 -1
- package/build/esm/components/FeedHeader/FeedHeader.d.ts +1 -1
- package/build/esm/components/FeedHeader/FeedHeader.js +2 -2
- package/build/esm/components/FeedHeader/FeedHeader.js.map +1 -1
- package/build/esm/components/FeedHeader/components/Controls/Controls.css +14 -60
- package/build/esm/components/FeedHeader/components/Controls/Controls.d.ts +3 -10
- package/build/esm/components/FeedHeader/components/Controls/Controls.js +6 -63
- package/build/esm/components/FeedHeader/components/Controls/Controls.js.map +1 -1
- package/build/esm/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.d.ts +2 -3
- package/build/esm/components/FeedHeader/components/CustomSwitcher/CustomSwitcher.js.map +1 -1
- package/build/esm/components/FeedHeader/components/Filters/Filter.css +48 -0
- package/build/esm/components/FeedHeader/components/Filters/Filter.d.ts +9 -0
- package/build/esm/components/FeedHeader/components/Filters/Filter.js +46 -0
- package/build/esm/components/FeedHeader/components/Filters/Filter.js.map +1 -0
- package/build/esm/components/FeedHeader/components/{Controls → Filters}/customRenders.d.ts +3 -2
- package/build/esm/components/FeedHeader/components/{Controls → Filters}/customRenders.js +4 -5
- package/build/esm/components/FeedHeader/components/Filters/customRenders.js.map +1 -0
- package/build/esm/containers/BlogPage/BlogPage.d.ts +3 -4
- package/build/esm/containers/BlogPage/BlogPage.js +2 -3
- package/build/esm/containers/BlogPage/BlogPage.js.map +1 -1
- package/build/esm/contexts/FeedContext.d.ts +2 -3
- package/build/esm/contexts/FeedContext.js.map +1 -1
- package/build/esm/models/common.d.ts +15 -10
- package/build/esm/models/common.js.map +1 -1
- package/build/esm/utils/common.d.ts +2 -2
- package/build/esm/utils/common.js +8 -4
- package/build/esm/utils/common.js.map +1 -1
- package/package.json +1 -1
- package/server/models/common.d.ts +15 -10
- package/build/cjs/components/FeedHeader/components/Controls/customRenders.js.map +0 -1
- package/build/esm/components/FeedHeader/components/Controls/customRenders.js.map +0 -1
|
@@ -23,66 +23,6 @@ unpredictable css rules order in build */
|
|
|
23
23
|
width: 100%;
|
|
24
24
|
max-width: 100%;
|
|
25
25
|
}
|
|
26
|
-
.bc-feed-controls__select {
|
|
27
|
-
width: 100%;
|
|
28
|
-
}
|
|
29
|
-
.bc-feed-controls__popup.bc-feed-controls__popup {
|
|
30
|
-
max-height: 500px;
|
|
31
|
-
border-radius: 12px;
|
|
32
|
-
}
|
|
33
|
-
.bc-feed-controls__popup.bc-feed-controls__popup .g-select-list::-webkit-scrollbar {
|
|
34
|
-
display: none;
|
|
35
|
-
}
|
|
36
|
-
.bc-feed-controls__popup.bc-feed-controls__popup .g-select-list .g-list {
|
|
37
|
-
max-height: calc(500px - var(--g-text-body-3-line-height) - 12px);
|
|
38
|
-
}
|
|
39
|
-
.bc-feed-controls__popup.bc-feed-controls__popup .g-list__item {
|
|
40
|
-
margin: 4px;
|
|
41
|
-
border-radius: 8px;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
.bc-feed-controls__popup_isMobile .bc-feed-controls__popup-filter {
|
|
45
|
-
position: relative;
|
|
46
|
-
border: none;
|
|
47
|
-
}
|
|
48
|
-
.bc-feed-controls__popup_isMobile .bc-feed-controls__popup-filter::before {
|
|
49
|
-
content: "";
|
|
50
|
-
position: absolute;
|
|
51
|
-
left: 50%;
|
|
52
|
-
bottom: 0px;
|
|
53
|
-
border-bottom: 2px solid var(--g-color-line-generic);
|
|
54
|
-
border-bottom-right-radius: 0;
|
|
55
|
-
border-bottom-left-radius: 0;
|
|
56
|
-
width: 100%;
|
|
57
|
-
height: 2px;
|
|
58
|
-
transform: translateX(-50%);
|
|
59
|
-
}
|
|
60
|
-
.bc-feed-controls__popup-filter {
|
|
61
|
-
font-size: var(--g-text-body-2-font-size);
|
|
62
|
-
line-height: var(--g-text-body-2-line-height);
|
|
63
|
-
padding: 4px 12px;
|
|
64
|
-
border: none;
|
|
65
|
-
border-bottom: 1px solid var(--g-color-line-generic);
|
|
66
|
-
border-bottom-right-radius: 0;
|
|
67
|
-
border-bottom-left-radius: 0;
|
|
68
|
-
}
|
|
69
|
-
.bc-feed-controls__select:hover {
|
|
70
|
-
width: 100%;
|
|
71
|
-
}
|
|
72
|
-
.bc-feed-controls__saved-only-button_savedOnly.bc-feed-controls__saved-only-button_savedOnly {
|
|
73
|
-
--g-button-background-color: var(--pc-monochrome-button-background-color);
|
|
74
|
-
--g-button-background-color-hover: var(--pc-monochrome-button-background-color-hover);
|
|
75
|
-
}
|
|
76
|
-
.bc-feed-controls__saved-only-button_savedOnly.bc-feed-controls__saved-only-button_savedOnly, .bc-feed-controls__saved-only-button_savedOnly.bc-feed-controls__saved-only-button_savedOnly:link, .bc-feed-controls__saved-only-button_savedOnly.bc-feed-controls__saved-only-button_savedOnly:visited, .bc-feed-controls__saved-only-button_savedOnly.bc-feed-controls__saved-only-button_savedOnly:active, .bc-feed-controls__saved-only-button_savedOnly.bc-feed-controls__saved-only-button_savedOnly:focus {
|
|
77
|
-
color: var(--pc-monochrome-button-color);
|
|
78
|
-
}
|
|
79
|
-
.bc-feed-controls__saved-only-button_savedOnly.bc-feed-controls__saved-only-button_savedOnly:hover {
|
|
80
|
-
color: var(--pc-monochrome-button-color);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
.bc-feed-controls__saved-only-button_savedOnly:focus {
|
|
84
|
-
color: var(--g-color-base-background);
|
|
85
|
-
}
|
|
86
26
|
.bc-feed-controls__filter-item {
|
|
87
27
|
margin-right: 8px;
|
|
88
28
|
margin-left: 8px;
|
|
@@ -100,6 +40,20 @@ unpredictable css rules order in build */
|
|
|
100
40
|
min-width: auto;
|
|
101
41
|
flex-grow: 0;
|
|
102
42
|
}
|
|
43
|
+
.bc-feed-controls__saved-only-button_savedOnly.bc-feed-controls__saved-only-button_savedOnly {
|
|
44
|
+
--g-button-background-color: var(--pc-monochrome-button-background-color);
|
|
45
|
+
--g-button-background-color-hover: var(--pc-monochrome-button-background-color-hover);
|
|
46
|
+
}
|
|
47
|
+
.bc-feed-controls__saved-only-button_savedOnly.bc-feed-controls__saved-only-button_savedOnly, .bc-feed-controls__saved-only-button_savedOnly.bc-feed-controls__saved-only-button_savedOnly:link, .bc-feed-controls__saved-only-button_savedOnly.bc-feed-controls__saved-only-button_savedOnly:visited, .bc-feed-controls__saved-only-button_savedOnly.bc-feed-controls__saved-only-button_savedOnly:active, .bc-feed-controls__saved-only-button_savedOnly.bc-feed-controls__saved-only-button_savedOnly:focus {
|
|
48
|
+
color: var(--pc-monochrome-button-color);
|
|
49
|
+
}
|
|
50
|
+
.bc-feed-controls__saved-only-button_savedOnly.bc-feed-controls__saved-only-button_savedOnly:hover {
|
|
51
|
+
color: var(--pc-monochrome-button-color);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.bc-feed-controls__saved-only-button_savedOnly:focus {
|
|
55
|
+
color: var(--g-color-base-background);
|
|
56
|
+
}
|
|
103
57
|
.bc-feed-controls__icon {
|
|
104
58
|
color: var(--g-color-base-brand);
|
|
105
59
|
}
|
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { FetchArgs, Query } from "../../../../models/common.js";
|
|
1
|
+
import { FetchArgs, FilterConfig, Query } from "../../../../models/common.js";
|
|
3
2
|
import './Controls.css';
|
|
4
|
-
export type SelectItem = {
|
|
5
|
-
content: string;
|
|
6
|
-
value: string;
|
|
7
|
-
icon?: React.ReactNode;
|
|
8
|
-
};
|
|
9
3
|
export type ControlsProps = {
|
|
10
4
|
handleLoadData: (props: FetchArgs) => void;
|
|
11
|
-
|
|
12
|
-
services?: SelectItem[];
|
|
5
|
+
filters?: FilterConfig[];
|
|
13
6
|
queryParams: Query;
|
|
14
7
|
title?: string;
|
|
15
8
|
};
|
|
16
|
-
export declare const Controls: ({ handleLoadData,
|
|
9
|
+
export declare const Controls: ({ handleLoadData, filters, queryParams, title, }: ControlsProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -2,31 +2,23 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { Bookmark } from '@gravity-ui/icons';
|
|
4
4
|
import { useAnalytics } from '@gravity-ui/page-constructor';
|
|
5
|
-
import { Button, Icon, MobileProvider
|
|
6
|
-
import { DefaultGoalIds } from "../../../../constants.js";
|
|
5
|
+
import { Button, Icon, MobileProvider } from '@gravity-ui/uikit';
|
|
7
6
|
import { LikesContext } from "../../../../contexts/LikesContext.js";
|
|
8
|
-
import { MobileContext } from "../../../../contexts/MobileContext.js";
|
|
9
|
-
import { AnalyticsCounter } from "../../../../counters/utils.js";
|
|
10
7
|
import { Keyset, i18n } from "../../../../i18n/index.js";
|
|
11
8
|
import { DefaultEventNames } from "../../../../models/common.js";
|
|
12
9
|
import { block } from "../../../../utils/cn.js";
|
|
13
|
-
import { prepareAnalyticsEvent } from "../../../../utils/common.js";
|
|
14
10
|
import { Search } from "../../../Search/Search.js";
|
|
15
|
-
import {
|
|
11
|
+
import { Filter } from "../Filters/Filter.js";
|
|
16
12
|
import './Controls.css';
|
|
17
13
|
const b = block('feed-controls');
|
|
18
14
|
const ICON_SIZE = 16;
|
|
19
15
|
const DEFAULT_PAGE = 1;
|
|
20
|
-
const
|
|
21
|
-
export const Controls = ({ handleLoadData, tags = [], services = [], queryParams, title = i18n(Keyset.Title), }) => {
|
|
16
|
+
export const Controls = ({ handleLoadData, filters = [], queryParams, title = i18n(Keyset.Title), }) => {
|
|
22
17
|
const { hasLikes } = React.useContext(LikesContext);
|
|
23
|
-
const handleAnalyticsTag = useAnalytics(DefaultEventNames.Tag);
|
|
24
|
-
const handleAnalyticsService = useAnalytics(DefaultEventNames.Service);
|
|
25
18
|
const handleAnalyticsSaveOnly = useAnalytics(DefaultEventNames.SaveOnly);
|
|
26
|
-
const { savedOnly: savedOnlyInitial, search: searchInitial
|
|
19
|
+
const { savedOnly: savedOnlyInitial, search: searchInitial } = queryParams || {};
|
|
27
20
|
const [savedOnly, setSavedOnly] = React.useState(savedOnlyInitial === 'true');
|
|
28
21
|
const [search, setSearch] = React.useState(searchInitial);
|
|
29
|
-
const isMobile = React.useContext(MobileContext);
|
|
30
22
|
const handleSavedOnly = () => {
|
|
31
23
|
handleAnalyticsSaveOnly();
|
|
32
24
|
setSavedOnly(!savedOnly);
|
|
@@ -35,9 +27,7 @@ export const Controls = ({ handleLoadData, tags = [], services = [], queryParams
|
|
|
35
27
|
query: {
|
|
36
28
|
savedOnly: savedOnly ? '' : 'true',
|
|
37
29
|
search: '',
|
|
38
|
-
tags: '',
|
|
39
30
|
page: DEFAULT_PAGE,
|
|
40
|
-
services: '',
|
|
41
31
|
},
|
|
42
32
|
});
|
|
43
33
|
};
|
|
@@ -48,54 +38,7 @@ export const Controls = ({ handleLoadData, tags = [], services = [], queryParams
|
|
|
48
38
|
query: { search: searchValue, page: DEFAULT_PAGE },
|
|
49
39
|
});
|
|
50
40
|
}, [handleLoadData]);
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
name: DefaultGoalIds.tag,
|
|
54
|
-
counter: AnalyticsCounter.CrossSite,
|
|
55
|
-
});
|
|
56
|
-
handleAnalyticsTag(event, {
|
|
57
|
-
theme: selectedTags[0],
|
|
58
|
-
});
|
|
59
|
-
const isEmptyTag = selectedTags.some((tag) => tag === 'empty');
|
|
60
|
-
handleLoadData({
|
|
61
|
-
page: DEFAULT_PAGE,
|
|
62
|
-
query: {
|
|
63
|
-
tags: isEmptyTag ? '' : selectedTags[0],
|
|
64
|
-
page: DEFAULT_PAGE,
|
|
65
|
-
},
|
|
66
|
-
});
|
|
67
|
-
};
|
|
68
|
-
const handleServicesSelect = (selectedServices) => {
|
|
69
|
-
const forAnalyticsServices = services.filter((service) => {
|
|
70
|
-
return selectedServices.includes(service.value);
|
|
71
|
-
});
|
|
72
|
-
const servicesAsStringForAnalytics = forAnalyticsServices
|
|
73
|
-
.map((service) => service.content)
|
|
74
|
-
.join(',');
|
|
75
|
-
const event = prepareAnalyticsEvent({
|
|
76
|
-
name: DefaultGoalIds.service,
|
|
77
|
-
counter: AnalyticsCounter.CrossSite,
|
|
78
|
-
});
|
|
79
|
-
handleAnalyticsService(event, {
|
|
80
|
-
service: servicesAsStringForAnalytics,
|
|
81
|
-
});
|
|
82
|
-
const servicesAsString = selectedServices.join(',');
|
|
83
|
-
handleLoadData({
|
|
84
|
-
page: DEFAULT_PAGE,
|
|
85
|
-
query: { services: servicesAsString, page: DEFAULT_PAGE },
|
|
86
|
-
});
|
|
87
|
-
};
|
|
88
|
-
const tagsItems = React.useMemo(() => [{ value: 'empty', content: i18n(Keyset.AllTags) }, ...tags], [tags]);
|
|
89
|
-
const servicesItems = React.useMemo(() => (servicesInitial ? [...servicesInitial.split(',')] : []), [servicesInitial]);
|
|
90
|
-
return (_jsx(MobileProvider, { mobile: false, children: _jsxs("div", { className: b('header'), children: [_jsx("h1", { className: b('header-item', { title: true }), children: title }), _jsxs("div", { className: b('header-item', { filters: true }), children: [_jsx("div", { className: b('filter-item'), children: _jsx(Search, { className: b('search'), placeholder: i18n(Keyset.Search), initialValue: search && typeof search === 'string' ? search : '', onSubmit: handleSearch }) }), _jsx("div", { className: b('filter-item'), children: _jsx(Select, { className: b('select'), size: "xl", options: tagsItems, defaultValue: [tagInitial], onUpdate: handleTagSelect, placeholder: i18n(Keyset.AllTags), popupClassName: b('popup', { isMobile }), renderControl: renderSwitcher({
|
|
91
|
-
initial: [tagInitial],
|
|
92
|
-
list: tagsItems,
|
|
93
|
-
defaultLabel: i18n(Keyset.AllTags),
|
|
94
|
-
}), disablePortal: true, virtualizationThreshold: VIRTUALIZATION_THRESHOLD, renderOption: renderOption }) }), services.length > 0 ? (_jsx("div", { className: b('filter-item'), children: _jsx(Select, { className: b('select'), size: "xl", multiple: true, filterable: true, hasClear: true, disablePortal: true, options: services, defaultValue: servicesItems, popupClassName: b('popup', { isMobile }), onUpdate: handleServicesSelect, placeholder: i18n(Keyset.AllServices), renderControl: renderSwitcher({
|
|
95
|
-
initial: servicesItems,
|
|
96
|
-
list: services,
|
|
97
|
-
defaultLabel: i18n(Keyset.AllServices),
|
|
98
|
-
qa: 'service-select',
|
|
99
|
-
}), virtualizationThreshold: VIRTUALIZATION_THRESHOLD, renderOption: renderOption, renderFilter: renderFilter }) })) : null, hasLikes ? (_jsx("div", { className: b('filter-item', { 'width-auto': true }), children: _jsxs(Button, { view: 'outlined', className: b('saved-only-button', { savedOnly }), size: "xl", onClick: handleSavedOnly, selected: savedOnly, children: [_jsx(Icon, { data: Bookmark, size: ICON_SIZE, className: b('icon', { savedOnly }) }), i18n(Keyset.ActionSavedOnly)] }) })) : null] })] }) }));
|
|
41
|
+
const handleFilterSelect = React.useCallback((query) => handleLoadData({ page: DEFAULT_PAGE, query: Object.assign({ page: DEFAULT_PAGE }, query) }), [handleLoadData]);
|
|
42
|
+
return (_jsx(MobileProvider, { mobile: false, children: _jsxs("div", { className: b('header'), children: [_jsx("h1", { className: b('header-item', { title: true }), children: title }), _jsxs("div", { className: b('header-item', { filters: true }), children: [_jsx("div", { className: b('filter-item'), children: _jsx(Search, { className: b('search'), placeholder: i18n(Keyset.Search), initialValue: search && typeof search === 'string' ? search : '', onSubmit: handleSearch }) }), filters.map((filter) => (_jsx(Filter, { filter: filter, initialValue: queryParams === null || queryParams === void 0 ? void 0 : queryParams[filter.queryParamName], onSelect: handleFilterSelect, className: b('filter-item') }, filter.queryParamName))), hasLikes ? (_jsx("div", { className: b('filter-item', { 'width-auto': true }), children: _jsxs(Button, { view: 'outlined', className: b('saved-only-button', { savedOnly }), size: "xl", onClick: handleSavedOnly, selected: savedOnly, children: [_jsx(Icon, { data: Bookmark, size: ICON_SIZE, className: b('icon', { savedOnly }) }), i18n(Keyset.ActionSavedOnly)] }) })) : null] })] }) }));
|
|
100
43
|
};
|
|
101
44
|
//# sourceMappingURL=Controls.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Controls.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/Controls/Controls.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {Bookmark} from '@gravity-ui/icons';\nimport {useAnalytics} from '@gravity-ui/page-constructor';\nimport {Button, Icon, MobileProvider, Select} from '@gravity-ui/uikit';\n\nimport {DefaultGoalIds} from '../../../../constants';\nimport {LikesContext} from '../../../../contexts/LikesContext';\nimport {MobileContext} from '../../../../contexts/MobileContext';\nimport {AnalyticsCounter} from '../../../../counters/utils';\nimport {Keyset, i18n} from '../../../../i18n';\nimport {DefaultEventNames, FetchArgs, Query} from '../../../../models/common';\nimport {block} from '../../../../utils/cn';\nimport {prepareAnalyticsEvent} from '../../../../utils/common';\nimport {Search} from '../../../Search/Search';\n\nimport {renderFilter, renderOption, renderSwitcher} from './customRenders';\n\nimport './Controls.scss';\n\nconst b = block('feed-controls');\n\nexport type SelectItem = {\n content: string;\n value: string;\n icon?: React.ReactNode;\n};\n\nexport type ControlsProps = {\n handleLoadData: (props: FetchArgs) => void;\n tags?: SelectItem[];\n services?: SelectItem[];\n queryParams: Query;\n title?: string;\n};\n\nconst ICON_SIZE = 16;\nconst DEFAULT_PAGE = 1;\nconst VIRTUALIZATION_THRESHOLD = 1000;\n\nexport const Controls = ({\n handleLoadData,\n tags = [],\n services = [],\n queryParams,\n title = i18n(Keyset.Title),\n}: ControlsProps) => {\n const {hasLikes} = React.useContext(LikesContext);\n const handleAnalyticsTag = useAnalytics(DefaultEventNames.Tag);\n const handleAnalyticsService = useAnalytics(DefaultEventNames.Service);\n const handleAnalyticsSaveOnly = useAnalytics(DefaultEventNames.SaveOnly);\n\n const {\n savedOnly: savedOnlyInitial,\n search: searchInitial,\n tags: tagInitial,\n services: servicesInitial,\n } = queryParams || {};\n\n const [savedOnly, setSavedOnly] = React.useState<boolean>(savedOnlyInitial === 'true');\n const [search, setSearch] = React.useState<string>(searchInitial as string);\n\n const isMobile = React.useContext(MobileContext);\n\n const handleSavedOnly = () => {\n handleAnalyticsSaveOnly();\n setSavedOnly(!savedOnly);\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {\n savedOnly: savedOnly ? '' : 'true',\n search: '',\n tags: '',\n page: DEFAULT_PAGE,\n services: '',\n },\n });\n };\n\n const handleSearch = React.useCallback(\n (searchValue: string) => {\n setSearch(searchValue);\n\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {search: searchValue, page: DEFAULT_PAGE},\n });\n },\n [handleLoadData],\n );\n\n const handleTagSelect = (selectedTags: string[]) => {\n const event = prepareAnalyticsEvent({\n name: DefaultGoalIds.tag,\n counter: AnalyticsCounter.CrossSite,\n });\n handleAnalyticsTag(event, {\n theme: selectedTags[0],\n });\n\n const isEmptyTag = selectedTags.some((tag) => tag === 'empty');\n\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {\n tags: isEmptyTag ? '' : selectedTags[0],\n page: DEFAULT_PAGE,\n },\n });\n };\n\n const handleServicesSelect = (selectedServices: string[]) => {\n const forAnalyticsServices = services.filter((service) => {\n return selectedServices.includes(service.value);\n });\n\n const servicesAsStringForAnalytics = forAnalyticsServices\n .map((service) => service.content)\n .join(',');\n\n const event = prepareAnalyticsEvent({\n name: DefaultGoalIds.service,\n counter: AnalyticsCounter.CrossSite,\n });\n handleAnalyticsService(event, {\n service: servicesAsStringForAnalytics,\n });\n\n const servicesAsString = selectedServices.join(',');\n\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {services: servicesAsString, page: DEFAULT_PAGE},\n });\n };\n\n const tagsItems = React.useMemo(\n () => [{value: 'empty', content: i18n(Keyset.AllTags)} as unknown as SelectItem, ...tags],\n [tags],\n );\n\n const servicesItems = React.useMemo(\n () => (servicesInitial ? [...(servicesInitial as string).split(',')] : []),\n [servicesInitial],\n );\n\n return (\n <MobileProvider mobile={false}>\n <div className={b('header')}>\n <h1 className={b('header-item', {title: true})}>{title}</h1>\n <div className={b('header-item', {filters: true})}>\n <div className={b('filter-item')}>\n <Search\n className={b('search')}\n placeholder={i18n(Keyset.Search)}\n initialValue={search && typeof search === 'string' ? search : ''}\n onSubmit={handleSearch}\n />\n </div>\n <div className={b('filter-item')}>\n <Select\n className={b('select')}\n size=\"xl\"\n options={tagsItems}\n defaultValue={[tagInitial] as string[]}\n onUpdate={handleTagSelect}\n placeholder={i18n(Keyset.AllTags)}\n popupClassName={b('popup', {isMobile})}\n renderControl={renderSwitcher({\n initial: [tagInitial],\n list: tagsItems,\n defaultLabel: i18n(Keyset.AllTags),\n })}\n disablePortal\n virtualizationThreshold={VIRTUALIZATION_THRESHOLD}\n renderOption={renderOption}\n />\n </div>\n\n {services.length > 0 ? (\n <div className={b('filter-item')}>\n <Select\n className={b('select')}\n size=\"xl\"\n multiple\n filterable\n hasClear\n disablePortal\n options={services}\n defaultValue={servicesItems}\n popupClassName={b('popup', {isMobile})}\n onUpdate={handleServicesSelect}\n placeholder={i18n(Keyset.AllServices)}\n renderControl={renderSwitcher({\n initial: servicesItems,\n list: services,\n defaultLabel: i18n(Keyset.AllServices),\n qa: 'service-select',\n })}\n virtualizationThreshold={VIRTUALIZATION_THRESHOLD}\n renderOption={renderOption}\n renderFilter={renderFilter}\n />\n </div>\n ) : null}\n {hasLikes ? (\n <div className={b('filter-item', {'width-auto': true})}>\n <Button\n view={'outlined'}\n className={b('saved-only-button', {savedOnly})}\n size=\"xl\"\n onClick={handleSavedOnly}\n selected={savedOnly}\n >\n <Icon\n data={Bookmark}\n size={ICON_SIZE}\n className={b('icon', {savedOnly})}\n />\n {i18n(Keyset.ActionSavedOnly)}\n </Button>\n </div>\n ) : null}\n </div>\n </div>\n </MobileProvider>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"Controls.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/Controls/Controls.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {Bookmark} from '@gravity-ui/icons';\nimport {useAnalytics} from '@gravity-ui/page-constructor';\nimport {Button, Icon, MobileProvider} from '@gravity-ui/uikit';\n\nimport {LikesContext} from '../../../../contexts/LikesContext';\nimport {Keyset, i18n} from '../../../../i18n';\nimport {DefaultEventNames, FetchArgs, FilterConfig, Query} from '../../../../models/common';\nimport {block} from '../../../../utils/cn';\nimport {Search} from '../../../Search/Search';\nimport {Filter} from '../Filters/Filter';\n\nimport './Controls.scss';\n\nconst b = block('feed-controls');\n\nexport type ControlsProps = {\n handleLoadData: (props: FetchArgs) => void;\n filters?: FilterConfig[];\n queryParams: Query;\n title?: string;\n};\n\nconst ICON_SIZE = 16;\nconst DEFAULT_PAGE = 1;\n\nexport const Controls = ({\n handleLoadData,\n filters = [],\n queryParams,\n title = i18n(Keyset.Title),\n}: ControlsProps) => {\n const {hasLikes} = React.useContext(LikesContext);\n const handleAnalyticsSaveOnly = useAnalytics(DefaultEventNames.SaveOnly);\n\n const {savedOnly: savedOnlyInitial, search: searchInitial} = queryParams || {};\n\n const [savedOnly, setSavedOnly] = React.useState<boolean>(savedOnlyInitial === 'true');\n const [search, setSearch] = React.useState<string>(searchInitial as string);\n\n const handleSavedOnly = () => {\n handleAnalyticsSaveOnly();\n setSavedOnly(!savedOnly);\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {\n savedOnly: savedOnly ? '' : 'true',\n search: '',\n page: DEFAULT_PAGE,\n },\n });\n };\n\n const handleSearch = React.useCallback(\n (searchValue: string) => {\n setSearch(searchValue);\n\n handleLoadData({\n page: DEFAULT_PAGE,\n query: {search: searchValue, page: DEFAULT_PAGE},\n });\n },\n [handleLoadData],\n );\n\n const handleFilterSelect = React.useCallback(\n (query: Query) =>\n handleLoadData({page: DEFAULT_PAGE, query: {page: DEFAULT_PAGE, ...query}}),\n [handleLoadData],\n );\n\n return (\n <MobileProvider mobile={false}>\n <div className={b('header')}>\n <h1 className={b('header-item', {title: true})}>{title}</h1>\n <div className={b('header-item', {filters: true})}>\n <div className={b('filter-item')}>\n <Search\n className={b('search')}\n placeholder={i18n(Keyset.Search)}\n initialValue={search && typeof search === 'string' ? search : ''}\n onSubmit={handleSearch}\n />\n </div>\n\n {filters.map((filter) => (\n <Filter\n key={filter.queryParamName}\n filter={filter}\n initialValue={queryParams?.[filter.queryParamName]}\n onSelect={handleFilterSelect}\n className={b('filter-item')}\n />\n ))}\n\n {hasLikes ? (\n <div className={b('filter-item', {'width-auto': true})}>\n <Button\n view={'outlined'}\n className={b('saved-only-button', {savedOnly})}\n size=\"xl\"\n onClick={handleSavedOnly}\n selected={savedOnly}\n >\n <Icon\n data={Bookmark}\n size={ICON_SIZE}\n className={b('icon', {savedOnly})}\n />\n {i18n(Keyset.ActionSavedOnly)}\n </Button>\n </div>\n ) : null}\n </div>\n </div>\n </MobileProvider>\n );\n};\n"]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { SelectProps } from '@gravity-ui/uikit';
|
|
2
|
-
import { SelectItem } from "../Controls/Controls.js";
|
|
1
|
+
import { SelectOption, SelectProps } from '@gravity-ui/uikit';
|
|
3
2
|
import './CustomSwitcher.css';
|
|
4
3
|
type RenderControlParameters = Partial<Parameters<Required<SelectProps>['renderControl']>[0]>;
|
|
5
4
|
type TriggerProps = Required<RenderControlParameters>['triggerProps'];
|
|
@@ -10,7 +9,7 @@ type RenderControlA11yProps = Pick<TriggerProps, A11yKeys>;
|
|
|
10
9
|
export type CustomSwitcherProps = {
|
|
11
10
|
initial: (string | number | null)[];
|
|
12
11
|
defaultLabel: string;
|
|
13
|
-
list:
|
|
12
|
+
list: SelectOption[];
|
|
14
13
|
controlRef: RenderControlParameters['ref'];
|
|
15
14
|
a11yProps: RenderControlA11yProps;
|
|
16
15
|
qa?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomSwitcher.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/CustomSwitcher/CustomSwitcher.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAC,WAAW,EAAE,KAAK,EAAC,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"CustomSwitcher.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/CustomSwitcher/CustomSwitcher.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAC,WAAW,EAAE,KAAK,EAAC,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAC,IAAI,EAA6B,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAE7E,OAAO,EAAC,KAAK,EAAC,gCAA6B;AAE3C,OAAO,sBAAsB,CAAC;AAE9B,MAAM,CAAC,GAAG,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAqBxC,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAC3B,EAAE,EACF,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,YAAY,EACZ,IAAI,EACJ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,SAAS,EACT,EAAE,GACgB,EAAE,EAAE;IACtB,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAClC,MAAM,KAAK,GAAG,IAAI;aACb,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC9C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEjC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IAEzC,MAAM,gBAAgB,GAAG,SAAS,EAAE,CAAC;IAErC,OAAO,CACH,eAAK,SAAS,EAAE,CAAC,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,UAA6C,aAEpF,0CACa,EAAE,EACX,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,OAAO,EAC9B,SAAS,EAAE,CAAC,CAAC,yBAAyB,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,EACxD,SAAS,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,SAAS,IAC9B,SAAS,uBACI,gBAAgB,IACnC,EACF,cACI,EAAE,EAAE,gBAAgB,EACpB,SAAS,EAAE,CAAC,CAAC,yBAAyB,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,iCAGvD,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,CAAC,IAAI,CAAC,GACrB,EACL,WAAW;gBACR,WAAW,CAAC;oBACR,UAAU,EAAE,GAAG,EAAE,CAAC,KAAC,IAAI,IAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,GAAI;iBACjE,CAAC,EACL,UAAU,IAAI,CACX,cAAK,SAAS,EAAE,CAAC,CAAC,yBAAyB,EAAE,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,YACxD,UAAU,CAAC,MAAM,GAChB,CACT,EACD,cAAK,SAAS,EAAE,CAAC,CAAC,yBAAyB,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC,YACvD,KAAC,IAAI,IAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAI,GAC1E,IACJ,CACT,CAAC;AACN,CAAC,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {ChevronDown, Xmark} from '@gravity-ui/icons';\nimport {Icon, SelectOption, SelectProps, useUniqId} from '@gravity-ui/uikit';\n\nimport {block} from '../../../../utils/cn';\n\nimport './CustomSwitcher.scss';\n\nconst b = block('feed-custom-switcher');\n\ntype RenderControlParameters = Partial<Parameters<Required<SelectProps>['renderControl']>[0]>;\ntype TriggerProps = Required<RenderControlParameters>['triggerProps'];\n\ntype A11yKeys = {\n [K in keyof TriggerProps]-?: K extends `aria-${string}` | 'role' ? K : never;\n}[keyof TriggerProps];\n\ntype RenderControlA11yProps = Pick<TriggerProps, A11yKeys>;\n\nexport type CustomSwitcherProps = {\n initial: (string | number | null)[];\n defaultLabel: string;\n list: SelectOption[];\n controlRef: RenderControlParameters['ref'];\n a11yProps: RenderControlA11yProps;\n qa?: string;\n} & Omit<RenderControlParameters, 'ref'> &\n Pick<TriggerProps, 'id' | 'disabled' | 'type'>;\n\nconst ICON_SIZE = 12;\n\nexport const CustomSwitcher = ({\n id,\n disabled,\n type,\n initial,\n defaultLabel,\n list,\n triggerProps,\n controlRef,\n renderClear,\n a11yProps,\n qa,\n}: CustomSwitcherProps) => {\n const itemsNames = React.useMemo(() => {\n const items = list\n .filter((item) => initial.includes(item.value))\n .map((item) => item.content);\n\n return items.length ? items : [defaultLabel];\n }, [defaultLabel, initial, list]);\n const hasCounter = itemsNames.length > 1;\n\n const contentElementId = useUniqId();\n\n return (\n <div className={b('custom-switcher')} ref={controlRef as React.LegacyRef<HTMLDivElement>}>\n {/* eslint-disable-next-line jsx-a11y/role-supports-aria-props */}\n <button\n data-qa={qa}\n id={id}\n disabled={disabled}\n type={type}\n onClick={triggerProps?.onClick}\n className={b('custom-switcher-element', {overlay: true})}\n onKeyDown={triggerProps?.onKeyDown}\n {...a11yProps}\n aria-labelledby={contentElementId}\n />\n <div\n id={contentElementId}\n className={b('custom-switcher-element', {content: true})}\n aria-hidden\n >\n {itemsNames?.join(', ')}\n </div>\n {renderClear &&\n renderClear({\n renderIcon: () => <Icon data={Xmark} className={b('clear')} />,\n })}\n {hasCounter && (\n <div className={b('custom-switcher-element', {counter: true})}>\n {itemsNames.length}\n </div>\n )}\n <div className={b('custom-switcher-element', {arrow: true})}>\n <Icon data={ChevronDown} size={ICON_SIZE} className={b('switcher-arrow')} />\n </div>\n </div>\n );\n};\n"]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/* use this for style redefinitions to awoid problems with
|
|
2
|
+
unpredictable css rules order in build */
|
|
3
|
+
.bc-feed-filter__select {
|
|
4
|
+
width: 100%;
|
|
5
|
+
}
|
|
6
|
+
.bc-feed-filter__select:hover {
|
|
7
|
+
width: 100%;
|
|
8
|
+
}
|
|
9
|
+
.bc-feed-filter__popup.bc-feed-filter__popup {
|
|
10
|
+
max-height: 500px;
|
|
11
|
+
border-radius: 12px;
|
|
12
|
+
}
|
|
13
|
+
.bc-feed-filter__popup.bc-feed-filter__popup .g-select-list::-webkit-scrollbar {
|
|
14
|
+
display: none;
|
|
15
|
+
}
|
|
16
|
+
.bc-feed-filter__popup.bc-feed-filter__popup .g-select-list .g-list {
|
|
17
|
+
max-height: calc(500px - var(--g-text-body-3-line-height) - 12px);
|
|
18
|
+
}
|
|
19
|
+
.bc-feed-filter__popup.bc-feed-filter__popup .g-list__item {
|
|
20
|
+
margin: 4px;
|
|
21
|
+
border-radius: 8px;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.bc-feed-filter__popup_isMobile .bc-feed-filter__popup-filter {
|
|
25
|
+
position: relative;
|
|
26
|
+
border: none;
|
|
27
|
+
}
|
|
28
|
+
.bc-feed-filter__popup_isMobile .bc-feed-filter__popup-filter::before {
|
|
29
|
+
content: "";
|
|
30
|
+
position: absolute;
|
|
31
|
+
left: 50%;
|
|
32
|
+
bottom: 0px;
|
|
33
|
+
border-bottom: 2px solid var(--g-color-line-generic);
|
|
34
|
+
border-bottom-right-radius: 0;
|
|
35
|
+
border-bottom-left-radius: 0;
|
|
36
|
+
width: 100%;
|
|
37
|
+
height: 2px;
|
|
38
|
+
transform: translateX(-50%);
|
|
39
|
+
}
|
|
40
|
+
.bc-feed-filter__popup-filter {
|
|
41
|
+
font-size: var(--g-text-body-2-font-size);
|
|
42
|
+
line-height: var(--g-text-body-2-line-height);
|
|
43
|
+
padding: 4px 12px;
|
|
44
|
+
border: none;
|
|
45
|
+
border-bottom: 1px solid var(--g-color-line-generic);
|
|
46
|
+
border-bottom-right-radius: 0;
|
|
47
|
+
border-bottom-left-radius: 0;
|
|
48
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FilterConfig, Query } from "../../../../models/common.js";
|
|
2
|
+
import './Filter.css';
|
|
3
|
+
export type FilterProps = {
|
|
4
|
+
filter: FilterConfig;
|
|
5
|
+
initialValue: string | number | null | undefined;
|
|
6
|
+
onSelect: (query: Query) => void;
|
|
7
|
+
className?: string;
|
|
8
|
+
};
|
|
9
|
+
export declare const Filter: ({ filter, initialValue, onSelect, className }: FilterProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { useAnalytics } from '@gravity-ui/page-constructor';
|
|
4
|
+
import { Select } from '@gravity-ui/uikit';
|
|
5
|
+
import { MobileContext } from "../../../../contexts/MobileContext.js";
|
|
6
|
+
import { block } from "../../../../utils/cn.js";
|
|
7
|
+
import { renderFilter, renderOption, renderSwitcher } from "./customRenders.js";
|
|
8
|
+
import './Filter.css';
|
|
9
|
+
const b = block('feed-filter');
|
|
10
|
+
const VIRTUALIZATION_THRESHOLD = 1000;
|
|
11
|
+
export const Filter = ({ filter, initialValue, onSelect, className }) => {
|
|
12
|
+
const isMobile = React.useContext(MobileContext);
|
|
13
|
+
const handleAnalyticsFilter = useAnalytics();
|
|
14
|
+
const { queryParamName, multiple, filterable, hasClear, options, allLabel, placeholder, qa, analyticsEvents, } = filter;
|
|
15
|
+
const handleFilterSelect = (selectedValues) => {
|
|
16
|
+
if (analyticsEvents) {
|
|
17
|
+
handleAnalyticsFilter(analyticsEvents);
|
|
18
|
+
}
|
|
19
|
+
const query = {};
|
|
20
|
+
if (multiple) {
|
|
21
|
+
query[queryParamName] = selectedValues.join(',');
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
const isEmpty = selectedValues.some((v) => v === 'empty');
|
|
25
|
+
query[queryParamName] = isEmpty ? '' : selectedValues[0];
|
|
26
|
+
}
|
|
27
|
+
onSelect(query);
|
|
28
|
+
};
|
|
29
|
+
let defaultValue;
|
|
30
|
+
if (multiple) {
|
|
31
|
+
defaultValue = initialValue ? initialValue.split(',') : [];
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
defaultValue = [initialValue];
|
|
35
|
+
}
|
|
36
|
+
const optionsWithEmpty = multiple
|
|
37
|
+
? options
|
|
38
|
+
: [{ value: 'empty', content: allLabel }, ...options];
|
|
39
|
+
return (_jsx("div", { className: className, children: _jsx(Select, { className: b('select'), size: "xl", multiple: multiple, filterable: filterable, hasClear: hasClear !== null && hasClear !== void 0 ? hasClear : multiple, disablePortal: true, options: optionsWithEmpty, defaultValue: defaultValue, popupClassName: b('popup', { isMobile }), onUpdate: handleFilterSelect, placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : allLabel, renderControl: renderSwitcher({
|
|
40
|
+
initial: defaultValue,
|
|
41
|
+
list: optionsWithEmpty,
|
|
42
|
+
defaultLabel: allLabel,
|
|
43
|
+
qa,
|
|
44
|
+
}), virtualizationThreshold: VIRTUALIZATION_THRESHOLD, renderOption: renderOption, renderFilter: filterable ? renderFilter({ className: b('popup-filter') }) : undefined }) }));
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=Filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Filter.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/Filters/Filter.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {useAnalytics} from '@gravity-ui/page-constructor';\nimport {Select, SelectOption} from '@gravity-ui/uikit';\n\nimport {MobileContext} from '../../../../contexts/MobileContext';\nimport {FilterConfig, Query} from '../../../../models/common';\nimport {block} from '../../../../utils/cn';\n\nimport {renderFilter, renderOption, renderSwitcher} from './customRenders';\n\nimport './Filter.scss';\n\nconst b = block('feed-filter');\n\nconst VIRTUALIZATION_THRESHOLD = 1000;\n\nexport type FilterProps = {\n filter: FilterConfig;\n initialValue: string | number | null | undefined;\n onSelect: (query: Query) => void;\n className?: string;\n};\n\nexport const Filter = ({filter, initialValue, onSelect, className}: FilterProps) => {\n const isMobile = React.useContext(MobileContext);\n const handleAnalyticsFilter = useAnalytics();\n\n const {\n queryParamName,\n multiple,\n filterable,\n hasClear,\n options,\n allLabel,\n placeholder,\n qa,\n analyticsEvents,\n } = filter;\n\n const handleFilterSelect = (selectedValues: string[]) => {\n if (analyticsEvents) {\n handleAnalyticsFilter(analyticsEvents);\n }\n\n const query: Query = {};\n\n if (multiple) {\n query[queryParamName] = selectedValues.join(',');\n } else {\n const isEmpty = selectedValues.some((v) => v === 'empty');\n query[queryParamName] = isEmpty ? '' : selectedValues[0];\n }\n\n onSelect(query);\n };\n\n let defaultValue: string[];\n if (multiple) {\n defaultValue = initialValue ? (initialValue as string).split(',') : [];\n } else {\n defaultValue = [initialValue] as string[];\n }\n\n const optionsWithEmpty: SelectOption[] = multiple\n ? options\n : [{value: 'empty', content: allLabel}, ...options];\n\n return (\n <div className={className}>\n <Select\n className={b('select')}\n size=\"xl\"\n multiple={multiple}\n filterable={filterable}\n hasClear={hasClear ?? multiple}\n disablePortal\n options={optionsWithEmpty}\n defaultValue={defaultValue}\n popupClassName={b('popup', {isMobile})}\n onUpdate={handleFilterSelect}\n placeholder={placeholder ?? allLabel}\n renderControl={renderSwitcher({\n initial: defaultValue,\n list: optionsWithEmpty,\n defaultLabel: allLabel,\n qa,\n })}\n virtualizationThreshold={VIRTUALIZATION_THRESHOLD}\n renderOption={renderOption}\n renderFilter={filterable ? renderFilter({className: b('popup-filter')}) : undefined}\n />\n </div>\n );\n};\n"]}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { SelectOption, SelectProps } from '@gravity-ui/uikit';
|
|
2
2
|
import { CustomSwitcherProps } from "../CustomSwitcher/CustomSwitcher.js";
|
|
3
|
-
import './Controls.css';
|
|
4
3
|
type RenderSwitcherType = ({ initial, list, defaultLabel, }: {
|
|
5
4
|
initial: CustomSwitcherProps['initial'];
|
|
6
5
|
list: CustomSwitcherProps['list'];
|
|
7
6
|
defaultLabel: string;
|
|
8
7
|
qa?: string;
|
|
9
8
|
}) => SelectProps['renderControl'];
|
|
10
|
-
type RenderFilterType =
|
|
9
|
+
type RenderFilterType = (options: {
|
|
10
|
+
className?: string;
|
|
11
|
+
}) => SelectProps['renderFilter'];
|
|
11
12
|
export declare const renderSwitcher: RenderSwitcherType;
|
|
12
13
|
export declare const renderFilter: RenderFilterType;
|
|
13
14
|
export declare const renderOption: (option: SelectOption) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -2,11 +2,8 @@ import { __rest } from "tslib";
|
|
|
2
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
3
|
import { TextInput } from '@gravity-ui/uikit';
|
|
4
4
|
import { Keyset, i18n } from "../../../../i18n/index.js";
|
|
5
|
-
import { block } from "../../../../utils/cn.js";
|
|
6
5
|
import { CustomSelectOption, } from "../CustomSelectOption/CustomSelectOption.js";
|
|
7
6
|
import { CustomSwitcher } from "../CustomSwitcher/CustomSwitcher.js";
|
|
8
|
-
import './Controls.css';
|
|
9
|
-
const b = block('feed-controls');
|
|
10
7
|
export const renderSwitcher = ({ initial, list, defaultLabel, qa }) =>
|
|
11
8
|
// eslint-disable-next-line react/display-name
|
|
12
9
|
(_a) => {
|
|
@@ -16,9 +13,11 @@ export const renderSwitcher = ({ initial, list, defaultLabel, qa }) =>
|
|
|
16
13
|
onKeyDown,
|
|
17
14
|
}, renderClear: renderClear, a11yProps: a11yProps, qa: qa }));
|
|
18
15
|
};
|
|
19
|
-
export const renderFilter = (
|
|
16
|
+
export const renderFilter = ({ className }) =>
|
|
17
|
+
// eslint-disable-next-line react/display-name
|
|
18
|
+
(_a) => {
|
|
20
19
|
var { ref, onChange } = _a, _b = _a.inputProps, { value, onKeyDown, onChange: _, size: __, placeholder: ___ } = _b, a11yProps = __rest(_b, ["value", "onKeyDown", "onChange", "size", "placeholder"]);
|
|
21
|
-
return (_jsx(TextInput, { value: value, view: "clear", placeholder: i18n(Keyset.Search), onUpdate: onChange, onKeyDown: onKeyDown, className:
|
|
20
|
+
return (_jsx(TextInput, { value: value, view: "clear", placeholder: i18n(Keyset.Search), onUpdate: onChange, onKeyDown: onKeyDown, className: className, controlRef: ref, controlProps: Object.assign({ size: 1 }, a11yProps) }));
|
|
22
21
|
};
|
|
23
22
|
export const renderOption = (option) => (_jsx(CustomSelectOption, { data: option }));
|
|
24
23
|
//# sourceMappingURL=customRenders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customRenders.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/Filters/customRenders.tsx"],"names":[],"mappings":";;AAAA,OAAO,EAA4B,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAEvE,OAAO,EAAC,MAAM,EAAE,IAAI,EAAC,kCAAyB;AAC9C,OAAO,EACH,kBAAkB,GAErB,oDAAiD;AAClD,OAAO,EAAC,cAAc,EAAsB,4CAAyC;AAerF,MAAM,CAAC,MAAM,cAAc,GACvB,CAAC,EAAC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAC,EAAE,EAAE;AACtC,8CAA8C;AAC9C,CAAC,EAAwF,EAAE,EAAE;QAA5F,EAAC,GAAG,EAAE,WAAW,OAAuE,EAArE,oBAAoE,EAApE,EAAe,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,OAAe,EAAV,SAAS,cAArD,kDAAsD,CAAD;IAAO,OAAA,CAC1F,KAAC,cAAc,IACX,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,YAAY,EAC1B,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,GAAG,EACf,YAAY,EAAE;YACV,OAAO;YACP,SAAS;SACZ,EACD,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,EAAE,GACR,CACL,CAAA;CAAA,CAAC;AAEN,MAAM,CAAC,MAAM,YAAY,GACrB,CAAC,EAAC,SAAS,EAAC,EAAE,EAAE;AAChB,8CAA8C;AAC9C,CAAC,EAIA,EAAE,EAAE;QAJJ,EACG,GAAG,EACH,QAAQ,OAEX,EADG,kBAAqF,EAArF,EAAa,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,OAAe,EAAV,SAAS,cAAxE,yDAAyE,CAAD;IAClF,OAAA,CACF,KAAC,SAAS,IACN,KAAK,EAAE,KAAK,EACZ,IAAI,EAAC,OAAO,EACZ,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAChC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,GAAG,EACf,YAAY,kBAAG,IAAI,EAAE,CAAC,IAAK,SAAS,IACtC,CACL,CAAA;CAAA,CAAC;AAEN,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAoB,EAAE,EAAE,CAAC,CAClD,KAAC,kBAAkB,IAAC,IAAI,EAAE,MAAyC,GAAI,CAC1E,CAAC","sourcesContent":["import {SelectOption, SelectProps, TextInput} from '@gravity-ui/uikit';\n\nimport {Keyset, i18n} from '../../../../i18n';\nimport {\n CustomSelectOption,\n CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport {CustomSwitcher, CustomSwitcherProps} from '../CustomSwitcher/CustomSwitcher';\n\ntype RenderSwitcherType = ({\n initial,\n list,\n defaultLabel,\n}: {\n initial: CustomSwitcherProps['initial'];\n list: CustomSwitcherProps['list'];\n defaultLabel: string;\n qa?: string;\n}) => SelectProps['renderControl'];\n\ntype RenderFilterType = (options: {className?: string}) => SelectProps['renderFilter'];\n\nexport const renderSwitcher: RenderSwitcherType =\n ({initial, list, defaultLabel, qa}) =>\n // eslint-disable-next-line react/display-name\n ({ref, renderClear, triggerProps: {id, disabled, type, onClick, onKeyDown, ...a11yProps}}) => (\n <CustomSwitcher\n id={id}\n disabled={disabled}\n type={type}\n initial={initial}\n defaultLabel={defaultLabel}\n list={list}\n controlRef={ref}\n triggerProps={{\n onClick,\n onKeyDown,\n }}\n renderClear={renderClear}\n a11yProps={a11yProps}\n qa={qa}\n />\n );\n\nexport const renderFilter: RenderFilterType =\n ({className}) =>\n // eslint-disable-next-line react/display-name\n ({\n ref,\n onChange,\n inputProps: {value, onKeyDown, onChange: _, size: __, placeholder: ___, ...a11yProps},\n }) => (\n <TextInput\n value={value}\n view=\"clear\"\n placeholder={i18n(Keyset.Search)}\n onUpdate={onChange}\n onKeyDown={onKeyDown}\n className={className}\n controlRef={ref}\n controlProps={{size: 1, ...a11yProps}}\n />\n );\n\nexport const renderOption = (option: SelectOption) => (\n <CustomSelectOption data={option as CustomSelectOptionProps['data']} />\n);\n"]}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { CustomConfig, NavigationData, PageConstructorProviderProps, PageContent } from '@gravity-ui/page-constructor';
|
|
3
|
-
import { GetPostsType, MetaProps, PostsProps,
|
|
3
|
+
import { FilterConfig, GetPostsType, MetaProps, PostsProps, ToggleLikeCallbackType } from "../../models/common.js";
|
|
4
4
|
import './BlogPage.css';
|
|
5
5
|
export type BlogPageProps = {
|
|
6
6
|
content: PageContent;
|
|
7
7
|
posts: PostsProps;
|
|
8
|
-
|
|
9
|
-
services?: Service[];
|
|
8
|
+
filters?: FilterConfig[];
|
|
10
9
|
navigation?: NavigationData;
|
|
11
10
|
getPosts: GetPostsType;
|
|
12
11
|
hasLikes?: boolean;
|
|
@@ -18,4 +17,4 @@ export type BlogPageProps = {
|
|
|
18
17
|
isSignedInUser?: boolean;
|
|
19
18
|
onClickSignIn?: React.EventHandler<React.SyntheticEvent>;
|
|
20
19
|
};
|
|
21
|
-
export declare const BlogPage: ({ content, posts,
|
|
20
|
+
export declare const BlogPage: ({ content, posts, filters, getPosts, metaData, custom, hasLikes, toggleLike, navigation, settings, pageCountForShowSupportButtons, isSignedInUser, onClickSignIn, }: BlogPageProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -10,7 +10,7 @@ import { LikesContext } from "../../contexts/LikesContext.js";
|
|
|
10
10
|
import { SettingsContext } from "../../contexts/SettingsContext.js";
|
|
11
11
|
import { useExtendedComponentMap } from "../../hooks/useExtendedComponentMap.js";
|
|
12
12
|
import './BlogPage.css';
|
|
13
|
-
export const BlogPage = ({ content, posts,
|
|
13
|
+
export const BlogPage = ({ content, posts, filters, getPosts, metaData, custom, hasLikes = false, toggleLike, navigation, settings, pageCountForShowSupportButtons, isSignedInUser = false, onClickSignIn, }) => {
|
|
14
14
|
const { isAnimationEnabled } = React.useContext(SettingsContext);
|
|
15
15
|
const _a = usePromptSignInProps(onClickSignIn), { requireSignIn } = _a, promptSignInProps = __rest(_a, ["requireSignIn"]);
|
|
16
16
|
const likesContextData = React.useMemo(() => ({ toggleLike, hasLikes, isSignedInUser, requireSignIn }), [toggleLike, hasLikes, isSignedInUser, requireSignIn]);
|
|
@@ -19,8 +19,7 @@ export const BlogPage = ({ content, posts, tags, services, getPosts, metaData, c
|
|
|
19
19
|
posts: posts.posts,
|
|
20
20
|
pinnedPost: posts.pinnedPost,
|
|
21
21
|
totalCount: posts.count,
|
|
22
|
-
|
|
23
|
-
services: services !== null && services !== void 0 ? services : [],
|
|
22
|
+
filters,
|
|
24
23
|
getPosts,
|
|
25
24
|
pageCountForShowSupportButtons,
|
|
26
25
|
}, children: _jsxs(PageConstructorProvider, Object.assign({}, settings, { projectSettings: Object.assign(Object.assign({}, ((settings === null || settings === void 0 ? void 0 : settings.projectSettings) || {})), { isAnimationEnabled }), children: [metaData ? _jsx(MetaWrapper, Object.assign({}, metaData)) : null, _jsx(PageConstructor, { content: content, custom: actualComponentMap, navigation: navigation })] })) }), _jsx(PromptSignIn, Object.assign({}, promptSignInProps))] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlogPage.js","sourceRoot":"../../../../src","sources":["containers/BlogPage/BlogPage.tsx"],"names":[],"mappings":";;AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAGH,eAAe,EACf,uBAAuB,GAG1B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAC,WAAW,EAAC,oDAAiD;AACrE,OAAO,EAAC,YAAY,EAAC,sDAAmD;AACxE,OAAO,EAAC,oBAAoB,EAAC,oEAAiE;AAC9F,OAAO,EAAC,WAAW,EAAC,sCAAmC;AACvD,OAAO,EAAC,YAAY,EAAC,uCAAoC;AACzD,OAAO,EAAC,eAAe,EAAC,0CAAuC;AAC/D,OAAO,EAAC,uBAAuB,EAAC,+CAA4C;
|
|
1
|
+
{"version":3,"file":"BlogPage.js","sourceRoot":"../../../../src","sources":["containers/BlogPage/BlogPage.tsx"],"names":[],"mappings":";;AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAGH,eAAe,EACf,uBAAuB,GAG1B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAC,WAAW,EAAC,oDAAiD;AACrE,OAAO,EAAC,YAAY,EAAC,sDAAmD;AACxE,OAAO,EAAC,oBAAoB,EAAC,oEAAiE;AAC9F,OAAO,EAAC,WAAW,EAAC,sCAAmC;AACvD,OAAO,EAAC,YAAY,EAAC,uCAAoC;AACzD,OAAO,EAAC,eAAe,EAAC,0CAAuC;AAC/D,OAAO,EAAC,uBAAuB,EAAC,+CAA4C;AAS5E,OAAO,gBAAgB,CAAC;AAmBxB,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EACrB,OAAO,EACP,KAAK,EACL,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,QAAQ,GAAG,KAAK,EAChB,UAAU,EACV,UAAU,EACV,QAAQ,EACR,8BAA8B,EAC9B,cAAc,GAAG,KAAK,EACtB,aAAa,GACD,EAAE,EAAE;IAChB,MAAM,EAAC,kBAAkB,EAAC,GAAG,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IAC/D,MAAM,KAAwC,oBAAoB,CAAC,aAAa,CAAC,EAA3E,EAAC,aAAa,OAA6D,EAAxD,iBAAiB,cAApC,iBAAqC,CAAsC,CAAC;IAElF,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAClC,GAAG,EAAE,CAAC,CAAC,EAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAC,CAAC,EAC7D,CAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,CAAC,CACxD,CAAC;IAEF,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAE3D,OAAO,CACH,MAAC,YAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,gBAAgB,aAC1C,KAAC,WAAW,CAAC,QAAQ,IACjB,KAAK,EAAE;oBACH,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,UAAU,EAAE,KAAK,CAAC,KAAK;oBACvB,OAAO;oBACP,QAAQ;oBACR,8BAA8B;iBACjC,YAED,MAAC,uBAAuB,oBAChB,QAAQ,IACZ,eAAe,kCAAM,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,eAAe,KAAI,EAAE,CAAC,KAAE,kBAAkB,gBAEzE,QAAQ,CAAC,CAAC,CAAC,KAAC,WAAW,oBAAK,QAAQ,EAAI,CAAC,CAAC,CAAC,IAAI,EAChD,KAAC,eAAe,IACZ,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,UAAU,GACxB,KACoB,GACP,EACvB,KAAC,YAAY,oBAAK,iBAAiB,EAAI,IACnB,CAC3B,CAAC;AACN,CAAC,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {\n CustomConfig,\n NavigationData,\n PageConstructor,\n PageConstructorProvider,\n PageConstructorProviderProps,\n PageContent,\n} from '@gravity-ui/page-constructor';\n\nimport {MetaWrapper} from '../../components/MetaWrapper/MetaWrapper';\nimport {PromptSignIn} from '../../components/PromptSignIn/PromptSignIn';\nimport {usePromptSignInProps} from '../../components/PromptSignIn/hooks/usePromptSignInProps';\nimport {FeedContext} from '../../contexts/FeedContext';\nimport {LikesContext} from '../../contexts/LikesContext';\nimport {SettingsContext} from '../../contexts/SettingsContext';\nimport {useExtendedComponentMap} from '../../hooks/useExtendedComponentMap';\nimport {\n FilterConfig,\n GetPostsType,\n MetaProps,\n PostsProps,\n ToggleLikeCallbackType,\n} from '../../models/common';\n\nimport './BlogPage.scss';\n\nexport type BlogPageProps = {\n content: PageContent;\n posts: PostsProps;\n filters?: FilterConfig[];\n navigation?: NavigationData;\n getPosts: GetPostsType;\n hasLikes?: boolean;\n toggleLike?: ToggleLikeCallbackType;\n metaData?: MetaProps;\n settings?: PageConstructorProviderProps;\n custom?: CustomConfig;\n pageCountForShowSupportButtons?: number;\n isSignedInUser?: boolean;\n // Required to enable Sign In on Post like\n onClickSignIn?: React.EventHandler<React.SyntheticEvent>;\n};\n\nexport const BlogPage = ({\n content,\n posts,\n filters,\n getPosts,\n metaData,\n custom,\n hasLikes = false,\n toggleLike,\n navigation,\n settings,\n pageCountForShowSupportButtons,\n isSignedInUser = false,\n onClickSignIn,\n}: BlogPageProps) => {\n const {isAnimationEnabled} = React.useContext(SettingsContext);\n const {requireSignIn, ...promptSignInProps} = usePromptSignInProps(onClickSignIn);\n\n const likesContextData = React.useMemo(\n () => ({toggleLike, hasLikes, isSignedInUser, requireSignIn}),\n [toggleLike, hasLikes, isSignedInUser, requireSignIn],\n );\n\n const actualComponentMap = useExtendedComponentMap(custom);\n\n return (\n <LikesContext.Provider value={likesContextData}>\n <FeedContext.Provider\n value={{\n posts: posts.posts,\n pinnedPost: posts.pinnedPost,\n totalCount: posts.count,\n filters,\n getPosts,\n pageCountForShowSupportButtons,\n }}\n >\n <PageConstructorProvider\n {...settings}\n projectSettings={{...(settings?.projectSettings || {}), isAnimationEnabled}}\n >\n {metaData ? <MetaWrapper {...metaData} /> : null}\n <PageConstructor\n content={content}\n custom={actualComponentMap}\n navigation={navigation}\n />\n </PageConstructorProvider>\n </FeedContext.Provider>\n <PromptSignIn {...promptSignInProps} />\n </LikesContext.Provider>\n );\n};\n"]}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { GetPostsType, PostData
|
|
2
|
+
import { FilterConfig, GetPostsType, PostData } from "../models/common.js";
|
|
3
3
|
export interface FeedContextProps {
|
|
4
4
|
posts?: PostData[];
|
|
5
5
|
pinnedPost?: PostData;
|
|
6
6
|
totalCount?: number;
|
|
7
|
-
|
|
8
|
-
services?: Service[];
|
|
7
|
+
filters?: FilterConfig[];
|
|
9
8
|
getPosts?: GetPostsType;
|
|
10
9
|
pageCountForShowSupportButtons?: number;
|
|
11
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedContext.js","sourceRoot":"../../../src","sources":["contexts/FeedContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"FeedContext.js","sourceRoot":"../../../src","sources":["contexts/FeedContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAmB,EAAsB,CAAC,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {FilterConfig, GetPostsType, PostData} from '../models/common';\n\nexport interface FeedContextProps {\n posts?: PostData[];\n pinnedPost?: PostData;\n totalCount?: number;\n filters?: FilterConfig[];\n getPosts?: GetPostsType;\n pageCountForShowSupportButtons?: number;\n}\n\nexport const FeedContext = React.createContext<FeedContextProps>({} as FeedContextProps);\n"]}
|