@gravity-ui/blog-constructor 9.1.2 → 10.0.1-alpha.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.d.ts +1 -1
- package/build/cjs/blocks/Feed/Feed.js +6 -16
- 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 +4 -85
- package/build/cjs/components/FeedHeader/components/Controls/Controls.d.ts +4 -10
- package/build/cjs/components/FeedHeader/components/Controls/Controls.js +7 -90
- 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/FilterControl/FilterControl.css +19 -0
- package/build/cjs/components/FeedHeader/components/FilterControl/FilterControl.d.ts +7 -0
- package/build/cjs/components/FeedHeader/components/FilterControl/FilterControl.js +38 -0
- package/build/cjs/components/FeedHeader/components/FilterControl/FilterControl.js.map +1 -0
- package/build/cjs/components/FeedHeader/components/SavedOnlyFilter/SavedOnlyFilter.css +22 -0
- package/build/cjs/components/FeedHeader/components/SavedOnlyFilter/SavedOnlyFilter.d.ts +6 -0
- package/build/cjs/components/FeedHeader/components/SavedOnlyFilter/SavedOnlyFilter.js +23 -0
- package/build/cjs/components/FeedHeader/components/SavedOnlyFilter/SavedOnlyFilter.js.map +1 -0
- package/build/cjs/components/FeedHeader/components/SearchFilter/SearchFilter.css +6 -0
- package/build/cjs/components/FeedHeader/components/SearchFilter/SearchFilter.d.ts +7 -0
- package/build/cjs/components/FeedHeader/components/SearchFilter/SearchFilter.js +13 -0
- package/build/cjs/components/FeedHeader/components/SearchFilter/SearchFilter.js.map +1 -0
- package/build/cjs/components/FeedHeader/components/SelectFilter/SelectFilter.css +48 -0
- package/build/cjs/components/FeedHeader/components/SelectFilter/SelectFilter.d.ts +14 -0
- package/build/cjs/components/FeedHeader/components/SelectFilter/SelectFilter.js +42 -0
- package/build/cjs/components/FeedHeader/components/SelectFilter/SelectFilter.js.map +1 -0
- package/build/cjs/components/FeedHeader/components/{Controls → SelectFilter}/customRenders.d.ts +3 -1
- package/build/cjs/components/FeedHeader/components/{Controls → SelectFilter}/customRenders.js +4 -4
- package/build/cjs/components/FeedHeader/components/SelectFilter/customRenders.js.map +1 -0
- package/build/cjs/constructor/blocksMap.d.ts +1 -1
- 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/hooks/useExtendedComponentMap.d.ts +1 -1
- package/build/cjs/i18n/index.d.ts +1 -0
- package/build/cjs/i18n/index.js +3 -0
- package/build/cjs/i18n/index.js.map +1 -1
- package/build/cjs/models/blocks.d.ts +1 -0
- package/build/cjs/models/blocks.js.map +1 -1
- package/build/cjs/models/common.d.ts +40 -10
- package/build/cjs/models/common.js +11 -0
- package/build/cjs/models/common.js.map +1 -1
- package/build/cjs/utils/common.d.ts +2 -2
- package/build/cjs/utils/common.js +10 -4
- package/build/cjs/utils/common.js.map +1 -1
- package/build/esm/blocks/Feed/Feed.d.ts +1 -1
- package/build/esm/blocks/Feed/Feed.js +6 -16
- 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 +4 -85
- package/build/esm/components/FeedHeader/components/Controls/Controls.d.ts +4 -10
- package/build/esm/components/FeedHeader/components/Controls/Controls.js +9 -92
- 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/FilterControl/FilterControl.css +19 -0
- package/build/esm/components/FeedHeader/components/FilterControl/FilterControl.d.ts +8 -0
- package/build/esm/components/FeedHeader/components/FilterControl/FilterControl.js +34 -0
- package/build/esm/components/FeedHeader/components/FilterControl/FilterControl.js.map +1 -0
- package/build/esm/components/FeedHeader/components/SavedOnlyFilter/SavedOnlyFilter.css +22 -0
- package/build/esm/components/FeedHeader/components/SavedOnlyFilter/SavedOnlyFilter.d.ts +7 -0
- package/build/esm/components/FeedHeader/components/SavedOnlyFilter/SavedOnlyFilter.js +19 -0
- package/build/esm/components/FeedHeader/components/SavedOnlyFilter/SavedOnlyFilter.js.map +1 -0
- package/build/esm/components/FeedHeader/components/SearchFilter/SearchFilter.css +6 -0
- package/build/esm/components/FeedHeader/components/SearchFilter/SearchFilter.d.ts +8 -0
- package/build/esm/components/FeedHeader/components/SearchFilter/SearchFilter.js +10 -0
- package/build/esm/components/FeedHeader/components/SearchFilter/SearchFilter.js.map +1 -0
- package/build/esm/components/FeedHeader/components/SelectFilter/SelectFilter.css +48 -0
- package/build/esm/components/FeedHeader/components/SelectFilter/SelectFilter.d.ts +15 -0
- package/build/esm/components/FeedHeader/components/SelectFilter/SelectFilter.js +38 -0
- package/build/esm/components/FeedHeader/components/SelectFilter/SelectFilter.js.map +1 -0
- package/build/esm/components/FeedHeader/components/{Controls → SelectFilter}/customRenders.d.ts +3 -2
- package/build/esm/components/FeedHeader/components/{Controls → SelectFilter}/customRenders.js +4 -5
- package/build/esm/components/FeedHeader/components/SelectFilter/customRenders.js.map +1 -0
- package/build/esm/constructor/blocksMap.d.ts +1 -1
- 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/hooks/useExtendedComponentMap.d.ts +1 -1
- package/build/esm/i18n/index.d.ts +1 -0
- package/build/esm/i18n/index.js +3 -0
- package/build/esm/i18n/index.js.map +1 -1
- package/build/esm/models/blocks.d.ts +1 -0
- package/build/esm/models/blocks.js.map +1 -1
- package/build/esm/models/common.d.ts +40 -10
- package/build/esm/models/common.js +10 -0
- package/build/esm/models/common.js.map +1 -1
- package/build/esm/utils/common.d.ts +2 -2
- package/build/esm/utils/common.js +10 -4
- package/build/esm/utils/common.js.map +1 -1
- package/package.json +1 -1
- package/server/models/blocks.d.ts +1 -0
- package/server/models/common.d.ts +40 -10
- package/server/models/common.js +11 -0
- package/build/cjs/components/FeedHeader/components/Controls/customRenders.js.map +0 -1
- package/build/esm/components/FeedHeader/components/Controls/customRenders.js.map +0 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/* use this for style redefinitions to awoid problems with
|
|
2
|
+
unpredictable css rules order in build */
|
|
3
|
+
.bc-saved-only-filter__button_savedOnly.bc-saved-only-filter__button_savedOnly {
|
|
4
|
+
--g-button-background-color: var(--pc-monochrome-button-background-color);
|
|
5
|
+
--g-button-background-color-hover: var(--pc-monochrome-button-background-color-hover);
|
|
6
|
+
}
|
|
7
|
+
.bc-saved-only-filter__button_savedOnly.bc-saved-only-filter__button_savedOnly, .bc-saved-only-filter__button_savedOnly.bc-saved-only-filter__button_savedOnly:link, .bc-saved-only-filter__button_savedOnly.bc-saved-only-filter__button_savedOnly:visited, .bc-saved-only-filter__button_savedOnly.bc-saved-only-filter__button_savedOnly:active, .bc-saved-only-filter__button_savedOnly.bc-saved-only-filter__button_savedOnly:focus {
|
|
8
|
+
color: var(--pc-monochrome-button-color);
|
|
9
|
+
}
|
|
10
|
+
.bc-saved-only-filter__button_savedOnly.bc-saved-only-filter__button_savedOnly:hover {
|
|
11
|
+
color: var(--pc-monochrome-button-color);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.bc-saved-only-filter__button_savedOnly:focus {
|
|
15
|
+
color: var(--g-color-base-background);
|
|
16
|
+
}
|
|
17
|
+
.bc-saved-only-filter__icon {
|
|
18
|
+
color: var(--g-color-base-brand);
|
|
19
|
+
}
|
|
20
|
+
.bc-saved-only-filter__icon_savedOnly {
|
|
21
|
+
color: var(--g-color-base-background);
|
|
22
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type SavedOnlyFilterProps = {
|
|
2
|
+
initialValue: boolean;
|
|
3
|
+
onChange: (value: boolean) => void;
|
|
4
|
+
className?: string;
|
|
5
|
+
};
|
|
6
|
+
export declare const SavedOnlyFilter: ({ initialValue, onChange, className }: SavedOnlyFilterProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SavedOnlyFilter = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const React = tslib_1.__importStar(require("react"));
|
|
7
|
+
const icons_1 = require("@gravity-ui/icons");
|
|
8
|
+
const uikit_1 = require("@gravity-ui/uikit");
|
|
9
|
+
const i18n_1 = require("../../../../i18n/index.js");
|
|
10
|
+
const cn_1 = require("../../../../utils/cn.js");
|
|
11
|
+
const b = (0, cn_1.block)('saved-only-filter');
|
|
12
|
+
const ICON_SIZE = 16;
|
|
13
|
+
const SavedOnlyFilter = ({ initialValue, onChange, className }) => {
|
|
14
|
+
const [savedOnly, setSavedOnly] = React.useState(initialValue);
|
|
15
|
+
const handleChange = () => {
|
|
16
|
+
const next = !savedOnly;
|
|
17
|
+
setSavedOnly(next);
|
|
18
|
+
onChange(next);
|
|
19
|
+
};
|
|
20
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: className, children: (0, jsx_runtime_1.jsxs)(uikit_1.Button, { view: 'outlined', className: b('button', { savedOnly }), size: "xl", onClick: handleChange, selected: savedOnly, children: [(0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.Bookmark, size: ICON_SIZE, className: b('icon', { savedOnly }) }), (0, i18n_1.i18n)(i18n_1.Keyset.ActionSavedOnly)] }) }));
|
|
21
|
+
};
|
|
22
|
+
exports.SavedOnlyFilter = SavedOnlyFilter;
|
|
23
|
+
//# sourceMappingURL=SavedOnlyFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SavedOnlyFilter.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/SavedOnlyFilter/SavedOnlyFilter.tsx"],"names":[],"mappings":";;;;;AAAA,qDAA+B;AAE/B,6CAA2C;AAC3C,6CAA+C;AAE/C,oDAA8C;AAC9C,gDAA2C;AAI3C,MAAM,CAAC,GAAG,IAAA,UAAK,EAAC,mBAAmB,CAAC,CAAC;AAErC,MAAM,SAAS,GAAG,EAAE,CAAC;AAQd,MAAM,eAAe,GAAG,CAAC,EAAC,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAuB,EAAE,EAAE;IACzF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAU,YAAY,CAAC,CAAC;IAExE,MAAM,YAAY,GAAG,GAAG,EAAE;QACtB,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC;QACxB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,CAAC;IAEF,OAAO,CACH,gCAAK,SAAS,EAAE,SAAS,YACrB,wBAAC,cAAM,IACH,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAC,SAAS,EAAC,CAAC,EACnC,IAAI,EAAC,IAAI,EACT,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,SAAS,aAEnB,uBAAC,YAAI,IAAC,IAAI,EAAE,gBAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAC,SAAS,EAAC,CAAC,GAAI,EAC3E,IAAA,WAAI,EAAC,aAAM,CAAC,eAAe,CAAC,IACxB,GACP,CACT,CAAC;AACN,CAAC,CAAC;AAvBW,QAAA,eAAe,mBAuB1B","sourcesContent":["import * as React from 'react';\n\nimport {Bookmark} from '@gravity-ui/icons';\nimport {Button, Icon} from '@gravity-ui/uikit';\n\nimport {Keyset, i18n} from '../../../../i18n';\nimport {block} from '../../../../utils/cn';\n\nimport './SavedOnlyFilter.scss';\n\nconst b = block('saved-only-filter');\n\nconst ICON_SIZE = 16;\n\nexport type SavedOnlyFilterProps = {\n initialValue: boolean;\n onChange: (value: boolean) => void;\n className?: string;\n};\n\nexport const SavedOnlyFilter = ({initialValue, onChange, className}: SavedOnlyFilterProps) => {\n const [savedOnly, setSavedOnly] = React.useState<boolean>(initialValue);\n\n const handleChange = () => {\n const next = !savedOnly;\n setSavedOnly(next);\n onChange(next);\n };\n\n return (\n <div className={className}>\n <Button\n view={'outlined'}\n className={b('button', {savedOnly})}\n size=\"xl\"\n onClick={handleChange}\n selected={savedOnly}\n >\n <Icon data={Bookmark} size={ICON_SIZE} className={b('icon', {savedOnly})} />\n {i18n(Keyset.ActionSavedOnly)}\n </Button>\n </div>\n );\n};\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type SearchFilterProps = {
|
|
2
|
+
placeholder?: string;
|
|
3
|
+
initialValue: string | undefined;
|
|
4
|
+
onChange: (value: string) => void;
|
|
5
|
+
className?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare const SearchFilter: ({ placeholder, initialValue, onChange, className, }: SearchFilterProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SearchFilter = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const i18n_1 = require("../../../../i18n/index.js");
|
|
6
|
+
const cn_1 = require("../../../../utils/cn.js");
|
|
7
|
+
const Search_1 = require("../../../Search/Search.js");
|
|
8
|
+
const b = (0, cn_1.block)('search-filter');
|
|
9
|
+
const SearchFilter = ({ placeholder, initialValue, onChange, className, }) => {
|
|
10
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: className, children: (0, jsx_runtime_1.jsx)(Search_1.Search, { className: b('search'), placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : (0, i18n_1.i18n)(i18n_1.Keyset.Search), initialValue: initialValue && typeof initialValue === 'string' ? initialValue : '', onSubmit: onChange }) }));
|
|
11
|
+
};
|
|
12
|
+
exports.SearchFilter = SearchFilter;
|
|
13
|
+
//# sourceMappingURL=SearchFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchFilter.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/SearchFilter/SearchFilter.tsx"],"names":[],"mappings":";;;;AAAA,oDAA8C;AAC9C,gDAA2C;AAC3C,sDAA8C;AAI9C,MAAM,CAAC,GAAG,IAAA,UAAK,EAAC,eAAe,CAAC,CAAC;AAS1B,MAAM,YAAY,GAAG,CAAC,EACzB,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,SAAS,GACO,EAAE,EAAE;IACpB,OAAO,CACH,gCAAK,SAAS,EAAE,SAAS,YACrB,uBAAC,eAAM,IACH,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,EACtB,WAAW,EAAE,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,IAAA,WAAI,EAAC,aAAM,CAAC,MAAM,CAAC,EAC/C,YAAY,EAAE,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAClF,QAAQ,EAAE,QAAQ,GACpB,GACA,CACT,CAAC;AACN,CAAC,CAAC;AAhBW,QAAA,YAAY,gBAgBvB","sourcesContent":["import {Keyset, i18n} from '../../../../i18n';\nimport {block} from '../../../../utils/cn';\nimport {Search} from '../../../Search/Search';\n\nimport './SearchFilter.scss';\n\nconst b = block('search-filter');\n\nexport type SearchFilterProps = {\n placeholder?: string;\n initialValue: string | undefined;\n onChange: (value: string) => void;\n className?: string;\n};\n\nexport const SearchFilter = ({\n placeholder,\n initialValue,\n onChange,\n className,\n}: SearchFilterProps) => {\n return (\n <div className={className}>\n <Search\n className={b('search')}\n placeholder={placeholder ?? i18n(Keyset.Search)}\n initialValue={initialValue && typeof initialValue === 'string' ? initialValue : ''}\n onSubmit={onChange}\n />\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,14 @@
|
|
|
1
|
+
import { SelectOption } from '@gravity-ui/uikit';
|
|
2
|
+
export type SelectFilterProps = {
|
|
3
|
+
multiple?: boolean;
|
|
4
|
+
filterable?: boolean;
|
|
5
|
+
hasClear?: boolean;
|
|
6
|
+
placeholder?: string;
|
|
7
|
+
options: SelectOption[];
|
|
8
|
+
allLabel: string;
|
|
9
|
+
qa?: string;
|
|
10
|
+
initialValue: string | number | null | undefined;
|
|
11
|
+
onChange: (value: string) => void;
|
|
12
|
+
className?: string;
|
|
13
|
+
};
|
|
14
|
+
export declare const SelectFilter: ({ multiple, filterable, hasClear, placeholder, options, allLabel, qa, initialValue, onChange, className, }: SelectFilterProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SelectFilter = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const React = tslib_1.__importStar(require("react"));
|
|
7
|
+
const uikit_1 = require("@gravity-ui/uikit");
|
|
8
|
+
const MobileContext_1 = require("../../../../contexts/MobileContext.js");
|
|
9
|
+
const cn_1 = require("../../../../utils/cn.js");
|
|
10
|
+
const customRenders_1 = require("./customRenders.js");
|
|
11
|
+
const b = (0, cn_1.block)('feed-filter');
|
|
12
|
+
const VIRTUALIZATION_THRESHOLD = 1000;
|
|
13
|
+
const SelectFilter = ({ multiple, filterable, hasClear, placeholder, options, allLabel, qa, initialValue, onChange, className, }) => {
|
|
14
|
+
const isMobile = React.useContext(MobileContext_1.MobileContext);
|
|
15
|
+
let defaultValue;
|
|
16
|
+
if (multiple) {
|
|
17
|
+
defaultValue = initialValue ? initialValue.split(',') : [];
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
defaultValue = [initialValue];
|
|
21
|
+
}
|
|
22
|
+
const optionsWithEmpty = multiple
|
|
23
|
+
? options
|
|
24
|
+
: [{ value: 'empty', content: allLabel }, ...options];
|
|
25
|
+
const handleChange = (selectedValues) => {
|
|
26
|
+
if (multiple) {
|
|
27
|
+
onChange(selectedValues.join(','));
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
const isEmpty = selectedValues.some((v) => v === 'empty');
|
|
31
|
+
onChange(isEmpty ? '' : selectedValues[0]);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: className, children: (0, jsx_runtime_1.jsx)(uikit_1.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: handleChange, placeholder: placeholder !== null && placeholder !== void 0 ? placeholder : allLabel, renderControl: (0, customRenders_1.renderSwitcher)({
|
|
35
|
+
initial: defaultValue,
|
|
36
|
+
list: optionsWithEmpty,
|
|
37
|
+
defaultLabel: allLabel,
|
|
38
|
+
qa,
|
|
39
|
+
}), virtualizationThreshold: VIRTUALIZATION_THRESHOLD, renderOption: customRenders_1.renderOption, renderFilter: filterable ? (0, customRenders_1.renderFilter)({ className: b('popup-filter') }) : undefined }) }));
|
|
40
|
+
};
|
|
41
|
+
exports.SelectFilter = SelectFilter;
|
|
42
|
+
//# sourceMappingURL=SelectFilter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectFilter.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/SelectFilter/SelectFilter.tsx"],"names":[],"mappings":";;;;;AAAA,qDAA+B;AAE/B,6CAAuD;AAEvD,yEAAiE;AACjE,gDAA2C;AAE3C,sDAA2E;AAI3E,MAAM,CAAC,GAAG,IAAA,UAAK,EAAC,aAAa,CAAC,CAAC;AAE/B,MAAM,wBAAwB,GAAG,IAAI,CAAC;AAe/B,MAAM,YAAY,GAAG,CAAC,EACzB,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,WAAW,EACX,OAAO,EACP,QAAQ,EACR,EAAE,EACF,YAAY,EACZ,QAAQ,EACR,SAAS,GACO,EAAE,EAAE;IACpB,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,6BAAa,CAAC,CAAC;IAEjD,IAAI,YAAsB,CAAC;IAC3B,IAAI,QAAQ,EAAE,CAAC;QACX,YAAY,GAAG,YAAY,CAAC,CAAC,CAAE,YAAuB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,CAAC;SAAM,CAAC;QACJ,YAAY,GAAG,CAAC,YAAY,CAAa,CAAC;IAC9C,CAAC;IAED,MAAM,gBAAgB,GAAmB,QAAQ;QAC7C,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAC,EAAE,GAAG,OAAO,CAAC,CAAC;IAExD,MAAM,YAAY,GAAG,CAAC,cAAwB,EAAE,EAAE;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACX,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACJ,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;YAC1D,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC,CAAC;IAEF,OAAO,CACH,gCAAK,SAAS,EAAE,SAAS,YACrB,uBAAC,cAAM,IACH,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,EACtB,IAAI,EAAC,IAAI,EACT,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,QAAQ,EAC9B,aAAa,QACb,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,EAAC,QAAQ,EAAC,CAAC,EACtC,QAAQ,EAAE,YAAY,EACtB,WAAW,EAAE,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,QAAQ,EACpC,aAAa,EAAE,IAAA,8BAAc,EAAC;gBAC1B,OAAO,EAAE,YAAY;gBACrB,IAAI,EAAE,gBAAgB;gBACtB,YAAY,EAAE,QAAQ;gBACtB,EAAE;aACL,CAAC,EACF,uBAAuB,EAAE,wBAAwB,EACjD,YAAY,EAAE,4BAAY,EAC1B,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,IAAA,4BAAY,EAAC,EAAC,SAAS,EAAE,CAAC,CAAC,cAAc,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GACrF,GACA,CACT,CAAC;AACN,CAAC,CAAC;AA5DW,QAAA,YAAY,gBA4DvB","sourcesContent":["import * as React from 'react';\n\nimport {Select, SelectOption} from '@gravity-ui/uikit';\n\nimport {MobileContext} from '../../../../contexts/MobileContext';\nimport {block} from '../../../../utils/cn';\n\nimport {renderFilter, renderOption, renderSwitcher} from './customRenders';\n\nimport './SelectFilter.scss';\n\nconst b = block('feed-filter');\n\nconst VIRTUALIZATION_THRESHOLD = 1000;\n\nexport type SelectFilterProps = {\n multiple?: boolean;\n filterable?: boolean;\n hasClear?: boolean;\n placeholder?: string;\n options: SelectOption[];\n allLabel: string;\n qa?: string;\n initialValue: string | number | null | undefined;\n onChange: (value: string) => void;\n className?: string;\n};\n\nexport const SelectFilter = ({\n multiple,\n filterable,\n hasClear,\n placeholder,\n options,\n allLabel,\n qa,\n initialValue,\n onChange,\n className,\n}: SelectFilterProps) => {\n const isMobile = React.useContext(MobileContext);\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 const handleChange = (selectedValues: string[]) => {\n if (multiple) {\n onChange(selectedValues.join(','));\n } else {\n const isEmpty = selectedValues.some((v) => v === 'empty');\n onChange(isEmpty ? '' : selectedValues[0]);\n }\n };\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={handleChange}\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"]}
|
package/build/cjs/components/FeedHeader/components/{Controls → SelectFilter}/customRenders.d.ts
RENAMED
|
@@ -6,7 +6,9 @@ type RenderSwitcherType = ({ initial, list, defaultLabel, }: {
|
|
|
6
6
|
defaultLabel: string;
|
|
7
7
|
qa?: string;
|
|
8
8
|
}) => SelectProps['renderControl'];
|
|
9
|
-
type RenderFilterType =
|
|
9
|
+
type RenderFilterType = (options: {
|
|
10
|
+
className?: string;
|
|
11
|
+
}) => SelectProps['renderFilter'];
|
|
10
12
|
export declare const renderSwitcher: RenderSwitcherType;
|
|
11
13
|
export declare const renderFilter: RenderFilterType;
|
|
12
14
|
export declare const renderOption: (option: SelectOption) => import("react/jsx-runtime").JSX.Element;
|
package/build/cjs/components/FeedHeader/components/{Controls → SelectFilter}/customRenders.js
RENAMED
|
@@ -5,10 +5,8 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
6
|
const uikit_1 = require("@gravity-ui/uikit");
|
|
7
7
|
const i18n_1 = require("../../../../i18n/index.js");
|
|
8
|
-
const cn_1 = require("../../../../utils/cn.js");
|
|
9
8
|
const CustomSelectOption_1 = require("../CustomSelectOption/CustomSelectOption.js");
|
|
10
9
|
const CustomSwitcher_1 = require("../CustomSwitcher/CustomSwitcher.js");
|
|
11
|
-
const b = (0, cn_1.block)('feed-controls');
|
|
12
10
|
const renderSwitcher = ({ initial, list, defaultLabel, qa }) =>
|
|
13
11
|
// eslint-disable-next-line react/display-name
|
|
14
12
|
(_a) => {
|
|
@@ -19,9 +17,11 @@ const renderSwitcher = ({ initial, list, defaultLabel, qa }) =>
|
|
|
19
17
|
}, renderClear: renderClear, a11yProps: a11yProps, qa: qa }));
|
|
20
18
|
};
|
|
21
19
|
exports.renderSwitcher = renderSwitcher;
|
|
22
|
-
const renderFilter = (
|
|
20
|
+
const renderFilter = ({ className }) =>
|
|
21
|
+
// eslint-disable-next-line react/display-name
|
|
22
|
+
(_a) => {
|
|
23
23
|
var { ref, onChange } = _a, _b = _a.inputProps, { value, onKeyDown, onChange: _, size: __, placeholder: ___ } = _b, a11yProps = tslib_1.__rest(_b, ["value", "onKeyDown", "onChange", "size", "placeholder"]);
|
|
24
|
-
return ((0, jsx_runtime_1.jsx)(uikit_1.TextInput, { value: value, view: "clear", placeholder: (0, i18n_1.i18n)(i18n_1.Keyset.Search), onUpdate: onChange, onKeyDown: onKeyDown, className:
|
|
24
|
+
return ((0, jsx_runtime_1.jsx)(uikit_1.TextInput, { value: value, view: "clear", placeholder: (0, i18n_1.i18n)(i18n_1.Keyset.Search), onUpdate: onChange, onKeyDown: onKeyDown, className: className, controlRef: ref, controlProps: Object.assign({ size: 1 }, a11yProps) }));
|
|
25
25
|
};
|
|
26
26
|
exports.renderFilter = renderFilter;
|
|
27
27
|
const renderOption = (option) => ((0, jsx_runtime_1.jsx)(CustomSelectOption_1.CustomSelectOption, { data: option }));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customRenders.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/SelectFilter/customRenders.tsx"],"names":[],"mappings":";;;;;AAAA,6CAAuE;AAEvE,oDAA8C;AAC9C,oFAGkD;AAClD,wEAAqF;AAe9E,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,sBAArD,kDAAsD,CAAD;IAAO,OAAA,CAC1F,uBAAC,+BAAc,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;AApBO,QAAA,cAAc,kBAoBrB;AAEC,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,sBAAxE,yDAAyE,CAAD;IAClF,OAAA,CACF,uBAAC,iBAAS,IACN,KAAK,EAAE,KAAK,EACZ,IAAI,EAAC,OAAO,EACZ,WAAW,EAAE,IAAA,WAAI,EAAC,aAAM,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;AAlBO,QAAA,YAAY,gBAkBnB;AAEC,MAAM,YAAY,GAAG,CAAC,MAAoB,EAAE,EAAE,CAAC,CAClD,uBAAC,uCAAkB,IAAC,IAAI,EAAE,MAAyC,GAAI,CAC1E,CAAC;AAFW,QAAA,YAAY,gBAEvB","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"]}
|
|
@@ -9,7 +9,7 @@ declare const _default: {
|
|
|
9
9
|
"blog-author-block": (props: import("../models/blocks.js").AuthorProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
10
10
|
"blog-suggest-block": ({ paddingTop, paddingBottom }: import("../models/blocks.js").SuggestProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
11
11
|
"blog-meta-block": (props: import("../models/blocks.js").MetaProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
|
-
"blog-feed-block": ({ image, title }: import("../models/blocks.js").FeedProps) => import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
"blog-feed-block": ({ image, title, resetTitleMargin }: import("../models/blocks.js").FeedProps) => import("react/jsx-runtime").JSX.Element;
|
|
13
13
|
"blog-form-block": ({ paddingTop, paddingBottom, ...props }: import("../models/blocks.js").FormProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
14
14
|
"blog-compact-media-block": ({ paddingBottom, paddingTop, description, paddingRight, paddingLeft, image, }: import("../models/blocks.js").CompactMediaProps) => import("react/jsx-runtime").JSX.Element;
|
|
15
15
|
"blog-take-block": (props: import("../models/blocks.js").TakeProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,11 +1,10 @@
|
|
|
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 { FiltersConfig, GetPostsType, MetaProps, PostsProps, ToggleLikeCallbackType } from "../../models/common.js";
|
|
4
4
|
export type BlogPageProps = {
|
|
5
5
|
content: PageContent;
|
|
6
6
|
posts: PostsProps;
|
|
7
|
-
|
|
8
|
-
services?: Service[];
|
|
7
|
+
filters?: FiltersConfig;
|
|
9
8
|
navigation?: NavigationData;
|
|
10
9
|
getPosts: GetPostsType;
|
|
11
10
|
hasLikes?: boolean;
|
|
@@ -17,4 +16,4 @@ export type BlogPageProps = {
|
|
|
17
16
|
isSignedInUser?: boolean;
|
|
18
17
|
onClickSignIn?: React.EventHandler<React.SyntheticEvent>;
|
|
19
18
|
};
|
|
20
|
-
export declare const BlogPage: ({ content, posts,
|
|
19
|
+
export declare const BlogPage: ({ content, posts, filters, getPosts, metaData, custom, hasLikes, toggleLike, navigation, settings, pageCountForShowSupportButtons, isSignedInUser, onClickSignIn, }: BlogPageProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -12,7 +12,7 @@ const FeedContext_1 = require("../../contexts/FeedContext.js");
|
|
|
12
12
|
const LikesContext_1 = require("../../contexts/LikesContext.js");
|
|
13
13
|
const SettingsContext_1 = require("../../contexts/SettingsContext.js");
|
|
14
14
|
const useExtendedComponentMap_1 = require("../../hooks/useExtendedComponentMap.js");
|
|
15
|
-
const BlogPage = ({ content, posts,
|
|
15
|
+
const BlogPage = ({ content, posts, filters, getPosts, metaData, custom, hasLikes = false, toggleLike, navigation, settings, pageCountForShowSupportButtons, isSignedInUser = false, onClickSignIn, }) => {
|
|
16
16
|
const { isAnimationEnabled } = React.useContext(SettingsContext_1.SettingsContext);
|
|
17
17
|
const _a = (0, usePromptSignInProps_1.usePromptSignInProps)(onClickSignIn), { requireSignIn } = _a, promptSignInProps = tslib_1.__rest(_a, ["requireSignIn"]);
|
|
18
18
|
const likesContextData = React.useMemo(() => ({ toggleLike, hasLikes, isSignedInUser, requireSignIn }), [toggleLike, hasLikes, isSignedInUser, requireSignIn]);
|
|
@@ -21,8 +21,7 @@ const BlogPage = ({ content, posts, tags, services, getPosts, metaData, custom,
|
|
|
21
21
|
posts: posts.posts,
|
|
22
22
|
pinnedPost: posts.pinnedPost,
|
|
23
23
|
totalCount: posts.count,
|
|
24
|
-
|
|
25
|
-
services: services !== null && services !== void 0 ? services : [],
|
|
24
|
+
filters,
|
|
26
25
|
getPosts,
|
|
27
26
|
pageCountForShowSupportButtons,
|
|
28
27
|
}, children: (0, jsx_runtime_1.jsxs)(page_constructor_1.PageConstructorProvider, Object.assign({}, settings, { projectSettings: Object.assign(Object.assign({}, ((settings === null || settings === void 0 ? void 0 : settings.projectSettings) || {})), { isAnimationEnabled }), children: [metaData ? (0, jsx_runtime_1.jsx)(MetaWrapper_1.MetaWrapper, Object.assign({}, metaData)) : null, (0, jsx_runtime_1.jsx)(page_constructor_1.PageConstructor, { content: content, custom: actualComponentMap, navigation: navigation })] })) }), (0, jsx_runtime_1.jsx)(PromptSignIn_1.PromptSignIn, Object.assign({}, promptSignInProps))] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlogPage.js","sourceRoot":"../../../../src","sources":["containers/BlogPage/BlogPage.tsx"],"names":[],"mappings":";;;;;AAAA,qDAA+B;AAE/B,mEAOsC;AAEtC,6EAAqE;AACrE,gFAAwE;AACxE,sGAA8F;AAC9F,+DAAuD;AACvD,iEAAyD;AACzD,uEAA+D;AAC/D,oFAA4E;
|
|
1
|
+
{"version":3,"file":"BlogPage.js","sourceRoot":"../../../../src","sources":["containers/BlogPage/BlogPage.tsx"],"names":[],"mappings":";;;;;AAAA,qDAA+B;AAE/B,mEAOsC;AAEtC,6EAAqE;AACrE,gFAAwE;AACxE,sGAA8F;AAC9F,+DAAuD;AACvD,iEAAyD;AACzD,uEAA+D;AAC/D,oFAA4E;AA4BrE,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,iCAAe,CAAC,CAAC;IAC/D,MAAM,KAAwC,IAAA,2CAAoB,EAAC,aAAa,CAAC,EAA3E,EAAC,aAAa,OAA6D,EAAxD,iBAAiB,sBAApC,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,IAAA,iDAAuB,EAAC,MAAM,CAAC,CAAC;IAE3D,OAAO,CACH,wBAAC,2BAAY,CAAC,QAAQ,IAAC,KAAK,EAAE,gBAAgB,aAC1C,uBAAC,yBAAW,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,wBAAC,0CAAuB,oBAChB,QAAQ,IACZ,eAAe,kCAAM,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,eAAe,KAAI,EAAE,CAAC,KAAE,kBAAkB,gBAEzE,QAAQ,CAAC,CAAC,CAAC,uBAAC,yBAAW,oBAAK,QAAQ,EAAI,CAAC,CAAC,CAAC,IAAI,EAChD,uBAAC,kCAAe,IACZ,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,kBAAkB,EAC1B,UAAU,EAAE,UAAU,GACxB,KACoB,GACP,EACvB,uBAAC,2BAAY,oBAAK,iBAAiB,EAAI,IACnB,CAC3B,CAAC;AACN,CAAC,CAAC;AApDW,QAAA,QAAQ,YAoDnB","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 FiltersConfig,\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?: FiltersConfig;\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 { FiltersConfig, 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?: FiltersConfig;
|
|
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,qDAA+B;
|
|
1
|
+
{"version":3,"file":"FeedContext.js","sourceRoot":"../../../src","sources":["contexts/FeedContext.ts"],"names":[],"mappings":";;;;AAAA,qDAA+B;AAalB,QAAA,WAAW,GAAG,KAAK,CAAC,aAAa,CAAmB,EAAsB,CAAC,CAAC","sourcesContent":["import * as React from 'react';\n\nimport {FiltersConfig, GetPostsType, PostData} from '../models/common';\n\nexport interface FeedContextProps {\n posts?: PostData[];\n pinnedPost?: PostData;\n totalCount?: number;\n filters?: FiltersConfig;\n getPosts?: GetPostsType;\n pageCountForShowSupportButtons?: number;\n}\n\nexport const FeedContext = React.createContext<FeedContextProps>({} as FeedContextProps);\n"]}
|
|
@@ -11,7 +11,7 @@ export declare const useExtendedComponentMap: (custom: CustomConfig | undefined)
|
|
|
11
11
|
"blog-author-block": (props: import("../models/blocks.js").AuthorProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
12
12
|
"blog-suggest-block": ({ paddingTop, paddingBottom }: import("../models/blocks.js").SuggestProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
13
13
|
"blog-meta-block": (props: import("../models/blocks.js").MetaProps) => import("react/jsx-runtime").JSX.Element;
|
|
14
|
-
"blog-feed-block": ({ image, title }: import("../models/blocks.js").FeedProps) => import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
"blog-feed-block": ({ image, title, resetTitleMargin }: import("../models/blocks.js").FeedProps) => import("react/jsx-runtime").JSX.Element;
|
|
15
15
|
"blog-form-block": ({ paddingTop, paddingBottom, ...props }: import("../models/blocks.js").FormProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
16
16
|
"blog-compact-media-block": ({ paddingBottom, paddingTop, description, paddingRight, paddingLeft, image, }: import("../models/blocks.js").CompactMediaProps) => import("react/jsx-runtime").JSX.Element;
|
|
17
17
|
"blog-take-block": (props: import("../models/blocks.js").TakeProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -16,6 +16,7 @@ export declare enum Keyset {
|
|
|
16
16
|
AllTags = "label_all_tags",
|
|
17
17
|
ActionSavedOnly = "action_saved_only",
|
|
18
18
|
AllServices = "label_all_services",
|
|
19
|
+
AllOptions = "label_all_some_filter",
|
|
19
20
|
PromptSignInOnLike = "prompt_sign_in_on_like",
|
|
20
21
|
SignIn = "Sign In",
|
|
21
22
|
Save = "save",
|
package/build/cjs/i18n/index.js
CHANGED
|
@@ -22,6 +22,7 @@ var Keyset;
|
|
|
22
22
|
Keyset["AllTags"] = "label_all_tags";
|
|
23
23
|
Keyset["ActionSavedOnly"] = "action_saved_only";
|
|
24
24
|
Keyset["AllServices"] = "label_all_services";
|
|
25
|
+
Keyset["AllOptions"] = "label_all_some_filter";
|
|
25
26
|
Keyset["PromptSignInOnLike"] = "prompt_sign_in_on_like";
|
|
26
27
|
Keyset["SignIn"] = "Sign In";
|
|
27
28
|
Keyset["Save"] = "save";
|
|
@@ -44,6 +45,7 @@ const en = {
|
|
|
44
45
|
[Keyset.AllTags]: 'All topics',
|
|
45
46
|
[Keyset.ActionSavedOnly]: 'Saved',
|
|
46
47
|
[Keyset.AllServices]: 'All Services',
|
|
48
|
+
[Keyset.AllOptions]: 'All options',
|
|
47
49
|
[Keyset.PromptSignInOnLike]: 'Sign in to save this post',
|
|
48
50
|
[Keyset.ContextReadingTime]: [
|
|
49
51
|
'{{count}} min to read',
|
|
@@ -71,6 +73,7 @@ const ru = {
|
|
|
71
73
|
[Keyset.AllTags]: 'Все темы',
|
|
72
74
|
[Keyset.ActionSavedOnly]: 'Сохранённые',
|
|
73
75
|
[Keyset.AllServices]: 'Все сервисы',
|
|
76
|
+
[Keyset.AllOptions]: 'Все варианты',
|
|
74
77
|
[Keyset.PromptSignInOnLike]: 'Войдите, чтобы сохранить пост',
|
|
75
78
|
[Keyset.ContextReadingTime]: [
|
|
76
79
|
'{{count}} минута чтения',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"../../../src","sources":["i18n/index.ts"],"names":[],"mappings":";;;AAAA,iDAA2D;AAE3D,MAAM,SAAS,GAAG,MAAM,CAAC;AAEzB,IAAY,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"../../../src","sources":["i18n/index.ts"],"names":[],"mappings":";;;AAAA,iDAA2D;AAE3D,MAAM,SAAS,GAAG,MAAM,CAAC;AAEzB,IAAY,MAuBX;AAvBD,WAAY,MAAM;IACd,yBAAe,CAAA;IACf,gDAAsC,CAAA;IACtC,wCAA8B,CAAA;IAC9B,sCAA4B,CAAA;IAC5B,qDAA2C,CAAA;IAC3C,6CAAmC,CAAA;IACnC,6CAAmC,CAAA;IACnC,oCAA0B,CAAA;IAC1B,2CAAiC,CAAA;IACjC,uDAA6C,CAAA;IAC7C,2DAAiD,CAAA;IACjD,sCAA4B,CAAA;IAC5B,0CAAgC,CAAA;IAChC,uCAA6B,CAAA;IAC7B,oCAA0B,CAAA;IAC1B,+CAAqC,CAAA;IACrC,4CAAkC,CAAA;IAClC,8CAAoC,CAAA;IACpC,uDAA6C,CAAA;IAC7C,4BAAkB,CAAA;IAClB,uBAAa,CAAA;IACb,sCAA4B,CAAA;AAChC,CAAC,EAvBW,MAAM,sBAAN,MAAM,QAuBjB;AAED,MAAM,EAAE,GAAG;IACP,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM;IACtB,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,MAAM;IACjC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,UAAU;IACjC,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,OAAO;IAC7B,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,WAAW;IACpC,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,UAAU;IACnC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO;IAC5B,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,mBAAmB;IAC3C,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,8CAA8C;IAC5E,CAAC,MAAM,CAAC,qBAAqB,CAAC,EAAE,2CAA2C;IAC3E,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,aAAa;IACnC,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,WAAW;IACnC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ;IACzB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,YAAY;IAC9B,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,OAAO;IACjC,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,cAAc;IACpC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,aAAa;IAClC,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,2BAA2B;IACxD,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE;QACzB,uBAAuB;QACvB,wBAAwB;QACxB,wBAAwB;KAC3B;IACD,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS;IAC1B,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM;IACrB,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,OAAO;CAChC,CAAC;AAEF,MAAM,EAAE,GAAG;IACP,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM;IACtB,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,MAAM;IACjC,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,cAAc;IACrC,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,YAAY;IAClC,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,oBAAoB;IAC7C,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,cAAc;IACvC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,kBAAkB;IACvC,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,sBAAsB;IAC9C,CAAC,MAAM,CAAC,mBAAmB,CAAC,EAAE,sCAAsC;IACpE,CAAC,MAAM,CAAC,qBAAqB,CAAC,EAC1B,mFAAmF;IACvF,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,UAAU;IAChC,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,QAAQ;IAChC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO;IACxB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,UAAU;IAC5B,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,aAAa;IACvC,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,aAAa;IACnC,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,cAAc;IACnC,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,+BAA+B;IAC5D,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE;QACzB,yBAAyB;QACzB,yBAAyB;QACzB,wBAAwB;KAC3B;IACD,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO;IACxB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW;IAC1B,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,UAAU;CACnC,CAAC;AAEW,QAAA,IAAI,GAAG,IAAA,0BAAmB,EAAC,EAAC,EAAE,EAAE,EAAE,EAAC,EAAE,SAAS,CAAC,CAAC","sourcesContent":["import {addComponentKeysets} from '@gravity-ui/uikit/i18n';\n\nconst NAMESPACE = 'blog';\n\nexport enum Keyset {\n Title = 'title',\n TitleBreadcrumbs = 'title_breadcrumbs',\n TitleSuggest = 'title_suggest',\n ActionShare = 'action_share',\n ContextReadingTime = 'context_reading_time',\n ActionTryAgain = 'action_try_again',\n ActionLoadMore = 'action_load_more',\n ErrorTitle = 'error_title',\n PostLoadError = 'post_load_error',\n TitleEmptyContainer = 'title_empty_container',\n ContextEmptyContainer = 'context_empty_container',\n ButtonBegin = 'button_begin',\n ButtonFarther = 'button_farther',\n Search = 'search_placeholder',\n AllTags = 'label_all_tags',\n ActionSavedOnly = 'action_saved_only',\n AllServices = 'label_all_services',\n AllOptions = 'label_all_some_filter',\n PromptSignInOnLike = 'prompt_sign_in_on_like',\n SignIn = 'Sign In',\n Save = 'save',\n ClearAction = 'clear_action',\n}\n\nconst en = {\n [Keyset.Title]: 'Blog',\n [Keyset.TitleBreadcrumbs]: 'Blog',\n [Keyset.TitleSuggest]: 'See also',\n [Keyset.ActionShare]: 'Share',\n [Keyset.ActionTryAgain]: 'Try again',\n [Keyset.ActionLoadMore]: 'See more',\n [Keyset.ErrorTitle]: 'Error',\n [Keyset.PostLoadError]: \"Posts didn't load\",\n [Keyset.TitleEmptyContainer]: \"Looks like we haven't written about that yet\",\n [Keyset.ContextEmptyContainer]: 'Try different spellings or other keywords',\n [Keyset.ButtonBegin]: 'Back to top',\n [Keyset.ButtonFarther]: 'Load more',\n [Keyset.Search]: 'Search',\n [Keyset.AllTags]: 'All topics',\n [Keyset.ActionSavedOnly]: 'Saved',\n [Keyset.AllServices]: 'All Services',\n [Keyset.AllOptions]: 'All options',\n [Keyset.PromptSignInOnLike]: 'Sign in to save this post',\n [Keyset.ContextReadingTime]: [\n '{{count}} min to read',\n '{{count}} mins to read',\n '{{count}} mins to read',\n ],\n [Keyset.SignIn]: 'Sign In',\n [Keyset.Save]: 'Save',\n [Keyset.ClearAction]: 'Clear',\n};\n\nconst ru = {\n [Keyset.Title]: 'Блог',\n [Keyset.TitleBreadcrumbs]: 'Блог',\n [Keyset.TitleSuggest]: 'Читать также',\n [Keyset.ActionShare]: 'Поделиться',\n [Keyset.ActionTryAgain]: 'Попробуйте ещё раз',\n [Keyset.ActionLoadMore]: 'Показать ещё',\n [Keyset.ErrorTitle]: 'Произошла ошибка',\n [Keyset.PostLoadError]: 'Посты не загрузились',\n [Keyset.TitleEmptyContainer]: 'Возможно, мы об этом ещё не написали',\n [Keyset.ContextEmptyContainer]:\n 'Пожалуйста, проверьте правильность написания или попробуйте другие ключевые слова',\n [Keyset.ButtonBegin]: 'В начало',\n [Keyset.ButtonFarther]: 'Дальше',\n [Keyset.Search]: 'Поиск',\n [Keyset.AllTags]: 'Все темы',\n [Keyset.ActionSavedOnly]: 'Сохранённые',\n [Keyset.AllServices]: 'Все сервисы',\n [Keyset.AllOptions]: 'Все варианты',\n [Keyset.PromptSignInOnLike]: 'Войдите, чтобы сохранить пост',\n [Keyset.ContextReadingTime]: [\n '{{count}} минута чтения',\n '{{count}} минуты чтения',\n '{{count}} минут чтения',\n ],\n [Keyset.SignIn]: 'Войти',\n [Keyset.Save]: 'Сохранить',\n [Keyset.ClearAction]: 'Очистить',\n};\n\nexport const i18n = addComponentKeysets({en, ru}, NAMESPACE);\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blocks.js","sourceRoot":"../../../src","sources":["models/blocks.ts"],"names":[],"mappings":"","sourcesContent":["import * as React from 'react';\n\nimport {\n AuthorItem,\n ContentBlockProps,\n FormBlockData,\n HeaderBlockProps,\n MediaProps as PCMediaProps,\n TextTheme,\n} from '@gravity-ui/page-constructor';\n\nimport {BlockType, ClassNameProps, PostData, QAProps} from './common';\nimport {PaddingsYFMProps} from './paddings';\n\n// blocks props\nexport type AuthorProps = ClassNameProps & {\n authorId: number | string;\n image: string;\n} & PaddingsYFMProps &\n QAProps;\n\nexport type BannerProps = ContentBlockProps &\n QAProps & {\n color?: string;\n image?: string;\n imageSize?: 's' | 'm';\n } & PaddingsYFMProps;\n\nexport type ColoredTextProps = ContentBlockProps &\n QAProps & {\n background?: {\n color?: string;\n image?: string;\n altText?: string;\n };\n } & PaddingsYFMProps;\n\nexport type CTAProps = QAProps & {\n items: Array<ContentBlockProps>;\n} & PaddingsYFMProps;\n\ntype HeaderBlogProps = {\n imageInGrid?: boolean;\n};\n\nexport type HeaderProps = HeaderBlockProps & PaddingsYFMProps & HeaderBlogProps;\n\nexport type LayoutProps = {\n fullWidth?: boolean;\n mobileOrder?: string;\n children: React.ReactElement[];\n} & PaddingsYFMProps;\n\nexport type MediaProps = ClassNameProps &\n PaddingsYFMProps &\n Partial<\n Pick<\n PCMediaProps,\n | 'youtube'\n | 'previewImg'\n | 'image'\n | 'video'\n | 'dataLens'\n | 'videoIframe'\n | 'videoMicrodata'\n >\n > & {\n text?: string;\n };\n\nexport type MetaProps = QAProps & {\n locale: string;\n theme?: TextTheme;\n} & PaddingsYFMProps;\n\nexport type SuggestProps = ClassNameProps & {\n posts: PostData[];\n} & PaddingsYFMProps;\n\nexport type YFMProps = {\n text: string;\n} & PaddingsYFMProps &\n QAProps;\n\nexport type FeedProps = {\n image: string;\n title?: string;\n};\n\nexport type FormProps = {\n formData: FormBlockData;\n border?: 'shadow' | 'line' | 'none';\n} & PaddingsYFMProps &\n QAProps;\n\nexport type CompactMediaProps = {\n description?: string;\n} & PaddingsYFMProps &\n Partial<Pick<PCMediaProps, 'image'>>;\n\nexport type TakeProps = YFMProps & {\n author: AuthorItem;\n color?: string;\n noBackground?: boolean;\n};\n\nexport type SideCard = Pick<PCMediaProps, 'image'> & {\n description: string;\n url: string;\n};\n\nexport type SideCardListProps = {\n title?: string;\n items: SideCard[];\n} & PaddingsYFMProps;\n\n// blocks models\nexport type AuthorBlockModel = {\n type: BlockType.Author;\n} & AuthorProps;\n\nexport type BannerBlockModel = {\n type: BlockType.Banner;\n} & BannerProps;\n\nexport type ColoredTextBlockModel = {\n type: BlockType.ColoredText;\n} & ColoredTextProps;\n\nexport type CTABlockModel = {\n type: BlockType.CTA;\n} & CTAProps;\n\nexport type HeaderBlockModel = {\n type: BlockType.Header;\n} & HeaderProps;\n\nexport type LayoutBlockModel = {\n type: BlockType.Layout;\n} & LayoutProps;\n\nexport type MediaBlockModel = {\n type: BlockType.Media;\n} & MediaProps;\n\nexport type MetaBlockModel = {\n type: BlockType.Meta;\n} & MetaProps;\n\nexport type SuggestBlockModel = {\n type: BlockType.Suggest;\n} & SuggestProps;\n\nexport type YFMBlockModel = {\n type: BlockType.YFM;\n} & YFMProps;\n\nexport type FeedBlockModel = {\n type: BlockType.Feed;\n} & FeedProps;\n\nexport type FormBlockModel = {\n type: BlockType.Form;\n} & FormProps;\n\nexport type CompactMediaBlockModel = {\n type: BlockType.CompactMedia;\n} & CompactMediaProps;\n\nexport type TakeBlockModel = {\n type: BlockType.Take;\n} & TakeProps;\n\nexport type SideCardListBlockModel = {\n type: BlockType.SideCardList;\n} & SideCardListProps;\n\nexport type BlockModel =\n | AuthorBlockModel\n | BannerBlockModel\n | ColoredTextBlockModel\n | CTABlockModel\n | HeaderBlockModel\n | LayoutBlockModel\n | MediaBlockModel\n | MetaBlockModel\n | SuggestBlockModel\n | YFMBlockModel\n | FeedBlockModel\n | CompactMediaBlockModel\n | TakeBlockModel\n | SideCardListBlockModel;\n\nexport type Block = BlockModel & {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [x: string]: any;\n};\n"]}
|
|
1
|
+
{"version":3,"file":"blocks.js","sourceRoot":"../../../src","sources":["models/blocks.ts"],"names":[],"mappings":"","sourcesContent":["import * as React from 'react';\n\nimport {\n AuthorItem,\n ContentBlockProps,\n FormBlockData,\n HeaderBlockProps,\n MediaProps as PCMediaProps,\n TextTheme,\n} from '@gravity-ui/page-constructor';\n\nimport {BlockType, ClassNameProps, PostData, QAProps} from './common';\nimport {PaddingsYFMProps} from './paddings';\n\n// blocks props\nexport type AuthorProps = ClassNameProps & {\n authorId: number | string;\n image: string;\n} & PaddingsYFMProps &\n QAProps;\n\nexport type BannerProps = ContentBlockProps &\n QAProps & {\n color?: string;\n image?: string;\n imageSize?: 's' | 'm';\n } & PaddingsYFMProps;\n\nexport type ColoredTextProps = ContentBlockProps &\n QAProps & {\n background?: {\n color?: string;\n image?: string;\n altText?: string;\n };\n } & PaddingsYFMProps;\n\nexport type CTAProps = QAProps & {\n items: Array<ContentBlockProps>;\n} & PaddingsYFMProps;\n\ntype HeaderBlogProps = {\n imageInGrid?: boolean;\n};\n\nexport type HeaderProps = HeaderBlockProps & PaddingsYFMProps & HeaderBlogProps;\n\nexport type LayoutProps = {\n fullWidth?: boolean;\n mobileOrder?: string;\n children: React.ReactElement[];\n} & PaddingsYFMProps;\n\nexport type MediaProps = ClassNameProps &\n PaddingsYFMProps &\n Partial<\n Pick<\n PCMediaProps,\n | 'youtube'\n | 'previewImg'\n | 'image'\n | 'video'\n | 'dataLens'\n | 'videoIframe'\n | 'videoMicrodata'\n >\n > & {\n text?: string;\n };\n\nexport type MetaProps = QAProps & {\n locale: string;\n theme?: TextTheme;\n} & PaddingsYFMProps;\n\nexport type SuggestProps = ClassNameProps & {\n posts: PostData[];\n} & PaddingsYFMProps;\n\nexport type YFMProps = {\n text: string;\n} & PaddingsYFMProps &\n QAProps;\n\nexport type FeedProps = {\n image: string;\n title?: string;\n resetTitleMargin?: boolean;\n};\n\nexport type FormProps = {\n formData: FormBlockData;\n border?: 'shadow' | 'line' | 'none';\n} & PaddingsYFMProps &\n QAProps;\n\nexport type CompactMediaProps = {\n description?: string;\n} & PaddingsYFMProps &\n Partial<Pick<PCMediaProps, 'image'>>;\n\nexport type TakeProps = YFMProps & {\n author: AuthorItem;\n color?: string;\n noBackground?: boolean;\n};\n\nexport type SideCard = Pick<PCMediaProps, 'image'> & {\n description: string;\n url: string;\n};\n\nexport type SideCardListProps = {\n title?: string;\n items: SideCard[];\n} & PaddingsYFMProps;\n\n// blocks models\nexport type AuthorBlockModel = {\n type: BlockType.Author;\n} & AuthorProps;\n\nexport type BannerBlockModel = {\n type: BlockType.Banner;\n} & BannerProps;\n\nexport type ColoredTextBlockModel = {\n type: BlockType.ColoredText;\n} & ColoredTextProps;\n\nexport type CTABlockModel = {\n type: BlockType.CTA;\n} & CTAProps;\n\nexport type HeaderBlockModel = {\n type: BlockType.Header;\n} & HeaderProps;\n\nexport type LayoutBlockModel = {\n type: BlockType.Layout;\n} & LayoutProps;\n\nexport type MediaBlockModel = {\n type: BlockType.Media;\n} & MediaProps;\n\nexport type MetaBlockModel = {\n type: BlockType.Meta;\n} & MetaProps;\n\nexport type SuggestBlockModel = {\n type: BlockType.Suggest;\n} & SuggestProps;\n\nexport type YFMBlockModel = {\n type: BlockType.YFM;\n} & YFMProps;\n\nexport type FeedBlockModel = {\n type: BlockType.Feed;\n} & FeedProps;\n\nexport type FormBlockModel = {\n type: BlockType.Form;\n} & FormProps;\n\nexport type CompactMediaBlockModel = {\n type: BlockType.CompactMedia;\n} & CompactMediaProps;\n\nexport type TakeBlockModel = {\n type: BlockType.Take;\n} & TakeProps;\n\nexport type SideCardListBlockModel = {\n type: BlockType.SideCardList;\n} & SideCardListProps;\n\nexport type BlockModel =\n | AuthorBlockModel\n | BannerBlockModel\n | ColoredTextBlockModel\n | CTABlockModel\n | HeaderBlockModel\n | LayoutBlockModel\n | MediaBlockModel\n | MetaBlockModel\n | SuggestBlockModel\n | YFMBlockModel\n | FeedBlockModel\n | CompactMediaBlockModel\n | TakeBlockModel\n | SideCardListBlockModel;\n\nexport type Block = BlockModel & {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [x: string]: any;\n};\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { MarkdownItPluginCb } from '@diplodoc/transform/lib/plugins/typings';
|
|
3
|
-
import { HeaderBlockProps as PageConstructorHeaderBlockProps } from '@gravity-ui/page-constructor';
|
|
3
|
+
import { AnalyticsEventsProp, HeaderBlockProps as PageConstructorHeaderBlockProps } from '@gravity-ui/page-constructor';
|
|
4
|
+
import { SelectOption, SelectProps } from '@gravity-ui/uikit';
|
|
4
5
|
import { IBrowser, IDevice } from 'ua-parser-js';
|
|
5
6
|
import { Locale } from "./locale.js";
|
|
6
7
|
export declare enum Theme {
|
|
@@ -23,13 +24,6 @@ export type Author = {
|
|
|
23
24
|
} & {
|
|
24
25
|
[x: string]: string | null;
|
|
25
26
|
};
|
|
26
|
-
export type Service = {
|
|
27
|
-
id: number | string;
|
|
28
|
-
slug: string;
|
|
29
|
-
name: string;
|
|
30
|
-
} & {
|
|
31
|
-
[x: string]: string | null;
|
|
32
|
-
};
|
|
33
27
|
export type Query = Record<string, number | string | null>;
|
|
34
28
|
export interface Menu {
|
|
35
29
|
title: string;
|
|
@@ -143,12 +137,11 @@ export interface HeaderBlockProps extends PageConstructorHeaderBlockProps {
|
|
|
143
137
|
};
|
|
144
138
|
}
|
|
145
139
|
export type GetPostsRequest = {
|
|
146
|
-
tags: string | undefined;
|
|
147
140
|
page: number;
|
|
148
141
|
perPage: number;
|
|
149
142
|
savedOnly: boolean;
|
|
150
143
|
search: string | undefined;
|
|
151
|
-
|
|
144
|
+
[filterParam: string]: string | number | boolean | undefined;
|
|
152
145
|
};
|
|
153
146
|
export type GetPostsType = (query: GetPostsRequest) => Promise<PostsProps>;
|
|
154
147
|
export type HandleChangeQueryParams = (params: Query) => void;
|
|
@@ -170,6 +163,42 @@ export type FetchArgs = {
|
|
|
170
163
|
export interface QAProps {
|
|
171
164
|
qa?: string;
|
|
172
165
|
}
|
|
166
|
+
type FilterConfigBase = {
|
|
167
|
+
/** The key used in queryParams and passed to handleLoadData query */
|
|
168
|
+
queryParamName: string;
|
|
169
|
+
/** Optional analytics events fired when this control's value changes */
|
|
170
|
+
analyticsEvents?: AnalyticsEventsProp;
|
|
171
|
+
};
|
|
172
|
+
export type SelectFilterConfig = FilterConfigBase & Pick<SelectProps, 'multiple' | 'filterable' | 'hasClear' | 'placeholder'> & {
|
|
173
|
+
type?: 'select';
|
|
174
|
+
/** The selectable items for this filter */
|
|
175
|
+
options: SelectOption[];
|
|
176
|
+
/** Label shown when nothing is selected (acts as "All ..." placeholder) */
|
|
177
|
+
allLabel: string;
|
|
178
|
+
/** Optional QA attribute forwarded to the switcher */
|
|
179
|
+
qa?: string;
|
|
180
|
+
};
|
|
181
|
+
export type SearchFilterConfig = FilterConfigBase & {
|
|
182
|
+
type: 'search';
|
|
183
|
+
/** Placeholder text for the search input */
|
|
184
|
+
placeholder?: string;
|
|
185
|
+
};
|
|
186
|
+
export type SavedOnlyFilterConfig = FilterConfigBase & {
|
|
187
|
+
type: 'savedOnly';
|
|
188
|
+
};
|
|
189
|
+
export type FilterConfig = SelectFilterConfig | SearchFilterConfig | SavedOnlyFilterConfig;
|
|
190
|
+
/**
|
|
191
|
+
* Filters can be supplied either as a flat array (all filters in one row)
|
|
192
|
+
* or as an array of rows (each inner array is rendered as a separate row).
|
|
193
|
+
*
|
|
194
|
+
* @example Single row (backward-compatible)
|
|
195
|
+
* filters: [searchFilter, tagsFilter]
|
|
196
|
+
*
|
|
197
|
+
* @example Multiple rows
|
|
198
|
+
* filters: [[searchFilter, savedOnlyFilter], [tagsFilter, serviceFilter]]
|
|
199
|
+
*/
|
|
200
|
+
export type FiltersConfig = FilterConfig[] | FilterConfig[][];
|
|
201
|
+
export declare function normalizeFiltersToRows(filters: FiltersConfig): FilterConfig[][];
|
|
173
202
|
export declare enum PostCardSize {
|
|
174
203
|
SMALL = "s",
|
|
175
204
|
MEDIUM = "m"
|
|
@@ -181,3 +210,4 @@ export declare enum PostCardTitleHeadingLevel {
|
|
|
181
210
|
export interface TransformPostOptions {
|
|
182
211
|
plugins?: MarkdownItPluginCb[];
|
|
183
212
|
}
|
|
213
|
+
export {};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PostCardTitleHeadingLevel = exports.PostCardSize = exports.DefaultEventNames = exports.BlockType = exports.Theme = void 0;
|
|
4
|
+
exports.normalizeFiltersToRows = normalizeFiltersToRows;
|
|
4
5
|
var Theme;
|
|
5
6
|
(function (Theme) {
|
|
6
7
|
Theme["Light"] = "light";
|
|
@@ -36,6 +37,16 @@ var DefaultEventNames;
|
|
|
36
37
|
DefaultEventNames["Service"] = "selector-service-click";
|
|
37
38
|
DefaultEventNames["SaveOnly"] = "save-only-button-click";
|
|
38
39
|
})(DefaultEventNames || (exports.DefaultEventNames = DefaultEventNames = {}));
|
|
40
|
+
function normalizeFiltersToRows(filters) {
|
|
41
|
+
if (filters.length === 0) {
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
// If the first element is itself an array, the input is already multi-row.
|
|
45
|
+
if (Array.isArray(filters[0])) {
|
|
46
|
+
return filters;
|
|
47
|
+
}
|
|
48
|
+
return [filters];
|
|
49
|
+
}
|
|
39
50
|
var PostCardSize;
|
|
40
51
|
(function (PostCardSize) {
|
|
41
52
|
PostCardSize["SMALL"] = "s";
|