@gravity-ui/blog-constructor 10.0.0 → 10.0.1-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cjs/blocks/Feed/Feed.d.ts +1 -1
- package/build/cjs/blocks/Feed/Feed.js +2 -2
- 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 -45
- package/build/cjs/components/FeedHeader/components/Controls/Controls.d.ts +4 -3
- package/build/cjs/components/FeedHeader/components/Controls/Controls.js +7 -33
- package/build/cjs/components/FeedHeader/components/Controls/Controls.js.map +1 -1
- package/build/cjs/components/FeedHeader/components/FilterControl/FilterControl.css +17 -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.d.ts +14 -0
- package/build/cjs/components/FeedHeader/components/{Filters/Filter.js → SelectFilter/SelectFilter.js} +14 -22
- package/build/cjs/components/FeedHeader/components/SelectFilter/SelectFilter.js.map +1 -0
- 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 +2 -2
- package/build/cjs/containers/BlogPage/BlogPage.js.map +1 -1
- package/build/cjs/contexts/FeedContext.d.ts +2 -2
- 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 +28 -3
- 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 +3 -1
- 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 +2 -2
- 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 -45
- package/build/esm/components/FeedHeader/components/Controls/Controls.d.ts +4 -3
- package/build/esm/components/FeedHeader/components/Controls/Controls.js +9 -35
- package/build/esm/components/FeedHeader/components/Controls/Controls.js.map +1 -1
- package/build/esm/components/FeedHeader/components/FilterControl/FilterControl.css +17 -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.d.ts +15 -0
- package/build/esm/components/FeedHeader/components/{Filters/Filter.js → SelectFilter/SelectFilter.js} +13 -21
- package/build/esm/components/FeedHeader/components/SelectFilter/SelectFilter.js.map +1 -0
- 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 +2 -2
- package/build/esm/containers/BlogPage/BlogPage.js.map +1 -1
- package/build/esm/contexts/FeedContext.d.ts +2 -2
- 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 +28 -3
- 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 +3 -1
- 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 +28 -3
- package/server/models/common.js +11 -0
- package/build/cjs/components/FeedHeader/components/Filters/Filter.d.ts +0 -8
- package/build/cjs/components/FeedHeader/components/Filters/Filter.js.map +0 -1
- package/build/cjs/components/FeedHeader/components/Filters/customRenders.js.map +0 -1
- package/build/esm/components/FeedHeader/components/Filters/Filter.d.ts +0 -9
- package/build/esm/components/FeedHeader/components/Filters/Filter.js.map +0 -1
- package/build/esm/components/FeedHeader/components/Filters/customRenders.js.map +0 -1
- /package/build/cjs/components/FeedHeader/components/{Filters/Filter.css → SelectFilter/SelectFilter.css} +0 -0
- /package/build/cjs/components/FeedHeader/components/{Filters → SelectFilter}/customRenders.d.ts +0 -0
- /package/build/cjs/components/FeedHeader/components/{Filters → SelectFilter}/customRenders.js +0 -0
- /package/build/esm/components/FeedHeader/components/{Filters/Filter.css → SelectFilter/SelectFilter.css} +0 -0
- /package/build/esm/components/FeedHeader/components/{Filters → SelectFilter}/customRenders.d.ts +0 -0
- /package/build/esm/components/FeedHeader/components/{Filters → SelectFilter}/customRenders.js +0 -0
|
@@ -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,10 +1,10 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { CustomConfig, NavigationData, PageConstructorProviderProps, PageContent } from '@gravity-ui/page-constructor';
|
|
3
|
-
import {
|
|
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
|
-
filters?:
|
|
7
|
+
filters?: FiltersConfig;
|
|
8
8
|
navigation?: NavigationData;
|
|
9
9
|
getPosts: GetPostsType;
|
|
10
10
|
hasLikes?: boolean;
|
|
@@ -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;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
|
|
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,10 +1,10 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import {
|
|
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
|
-
filters?:
|
|
7
|
+
filters?: FiltersConfig;
|
|
8
8
|
getPosts?: GetPostsType;
|
|
9
9
|
pageCountForShowSupportButtons?: number;
|
|
10
10
|
}
|
|
@@ -1 +1 @@
|
|
|
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 {
|
|
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":"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","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"]}
|
|
@@ -163,18 +163,42 @@ export type FetchArgs = {
|
|
|
163
163
|
export interface QAProps {
|
|
164
164
|
qa?: string;
|
|
165
165
|
}
|
|
166
|
-
|
|
166
|
+
type FilterConfigBase = {
|
|
167
167
|
/** The key used in queryParams and passed to handleLoadData query */
|
|
168
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';
|
|
169
174
|
/** The selectable items for this filter */
|
|
170
175
|
options: SelectOption[];
|
|
171
176
|
/** Label shown when nothing is selected (acts as "All ..." placeholder) */
|
|
172
177
|
allLabel: string;
|
|
173
178
|
/** Optional QA attribute forwarded to the switcher */
|
|
174
179
|
qa?: string;
|
|
175
|
-
/** Optional analytics events fired when this filter value changes */
|
|
176
|
-
analyticsEvents?: AnalyticsEventsProp;
|
|
177
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[][];
|
|
178
202
|
export declare enum PostCardSize {
|
|
179
203
|
SMALL = "s",
|
|
180
204
|
MEDIUM = "m"
|
|
@@ -186,3 +210,4 @@ export declare enum PostCardTitleHeadingLevel {
|
|
|
186
210
|
export interface TransformPostOptions {
|
|
187
211
|
plugins?: MarkdownItPluginCb[];
|
|
188
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";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"../../../src","sources":["models/common.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"../../../src","sources":["models/common.ts"],"names":[],"mappings":";;;AAgPA,wDAWC;AA9OD,IAAY,KAGX;AAHD,WAAY,KAAK;IACb,wBAAe,CAAA;IACf,sBAAa,CAAA;AACjB,CAAC,EAHW,KAAK,qBAAL,KAAK,QAGhB;AAmFD,IAAY,SAgBX;AAhBD,WAAY,SAAS;IACjB,yCAA4B,CAAA;IAC5B,mCAAsB,CAAA;IACtB,yCAA4B,CAAA;IAC5B,uCAA0B,CAAA;IAC1B,yCAA4B,CAAA;IAC5B,mCAAsB,CAAA;IACtB,oDAAuC,CAAA;IACvC,yCAA4B,CAAA;IAC5B,2CAA8B,CAAA;IAC9B,qCAAwB,CAAA;IACxB,qCAAwB,CAAA;IACxB,qCAAwB,CAAA;IACxB,sDAAyC,CAAA;IACzC,qCAAwB,CAAA;IACxB,uDAA0C,CAAA;AAC9C,CAAC,EAhBW,SAAS,yBAAT,SAAS,QAgBpB;AA8DD,IAAY,iBAUX;AAVD,WAAY,iBAAiB;IACzB,uDAAkC,CAAA;IAClC,qDAAgC,CAAA;IAChC,wDAAmC,CAAA;IACnC,kEAA6C,CAAA;IAC7C,kEAA6C,CAAA;IAC7C,kEAA6C,CAAA;IAC7C,+CAA0B,CAAA;IAC1B,uDAAkC,CAAA;IAClC,wDAAmC,CAAA;AACvC,CAAC,EAVW,iBAAiB,iCAAjB,iBAAiB,QAU5B;AAqDD,SAAgB,sBAAsB,CAAC,OAAsB;IACzD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,2EAA2E;IAC3E,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5B,OAAO,OAA2B,CAAC;IACvC,CAAC;IAED,OAAO,CAAC,OAAyB,CAAC,CAAC;AACvC,CAAC;AAED,IAAY,YAGX;AAHD,WAAY,YAAY;IACpB,2BAAW,CAAA;IACX,4BAAY,CAAA;AAChB,CAAC,EAHW,YAAY,4BAAZ,YAAY,QAGvB;AAED,IAAY,yBAGX;AAHD,WAAY,yBAAyB;IACjC,sCAAS,CAAA;IACT,sCAAS,CAAA;AACb,CAAC,EAHW,yBAAyB,yCAAzB,yBAAyB,QAGpC","sourcesContent":["import * as React from 'react';\n\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport {MarkdownItPluginCb} from '@diplodoc/transform/lib/plugins/typings';\nimport {\n AnalyticsEventsProp,\n HeaderBlockProps as PageConstructorHeaderBlockProps,\n} from '@gravity-ui/page-constructor';\nimport {SelectOption, SelectProps} from '@gravity-ui/uikit';\nimport {IBrowser, IDevice} from 'ua-parser-js';\n\nimport {Locale} from '../models/locale';\n\nexport enum Theme {\n Light = 'light',\n Dark = 'dark',\n}\n\nexport interface ClassNameProps {\n className?: string;\n}\n\nexport type Author = {\n id: number | string;\n avatar: string | null;\n createdAt: string;\n updatedAt: string;\n firstName: string | null;\n secondName: string | null;\n description: string | null;\n fullDescription: string | null;\n shortDescription: string | null;\n} & {\n [x: string]: string | null;\n};\n\nexport type Query = Record<string, number | string | null>;\n\n//page models\n\nexport interface Menu {\n title: string;\n}\n\nexport interface WithDeviceProps {\n device: IDevice;\n browser: IBrowser;\n isRobot: boolean;\n}\n\nexport interface PostsProps {\n posts: PostData[];\n count: number;\n totalCount: number;\n pinnedPost?: PostData;\n}\n\nexport type Tag = {\n slug: string;\n name: string;\n createdAt?: string;\n updatedAt?: string;\n icon?: string;\n isDeleted?: boolean;\n locale?: string;\n blogTagId?: number | string;\n count?: number;\n};\n\nexport interface PostData {\n author?: string;\n authors?: Author[];\n blogPostId?: number | string;\n content?: string;\n date: string;\n description?: string;\n hasUserLike: boolean;\n htmlTitle: string;\n id: number;\n image: string;\n isPublished?: boolean;\n sharedImage?: string;\n likes: number;\n locale: Locale;\n metaDescription?: string | null;\n metaTitle?: string | null;\n readingTime?: number;\n shareDescription?: string;\n shareImage?: string;\n shareTitle?: string;\n slug: string;\n keywords?: string[];\n tags: Tag[];\n textTitle: string;\n title: string;\n url: string;\n noIndex?: boolean;\n}\n\nexport enum BlockType {\n Header = 'blog-header-block',\n YFM = 'blog-yfm-block',\n Layout = 'blog-layout-block',\n Media = 'blog-media-block',\n Banner = 'blog-banner-block',\n CTA = 'blog-cta-block',\n ColoredText = 'blog-colored-text-block',\n Author = 'blog-author-block',\n Suggest = 'blog-suggest-block',\n Meta = 'blog-meta-block',\n Feed = 'blog-feed-block',\n Form = 'blog-form-block',\n CompactMedia = 'blog-compact-media-block',\n Take = 'blog-take-block',\n SideCardList = 'blog-side-card-list-block',\n}\n\nexport type MetaProps = {\n metaComponent: JSX.Element;\n needHelmetWrapper: boolean;\n};\n\nexport type MetaOrganizationType = {\n url: string;\n appTitle: string;\n legalName: string;\n supportEmail: string;\n};\n\nexport interface PostMetaProps {\n title: string;\n date: string;\n image: string;\n canonicalUrl: string;\n content?: string;\n description?: string;\n sharing: {\n shareTitle: string;\n shareDescription: string;\n shareImage: string;\n shareGenImage: string;\n shareGenTitle: string;\n };\n keywords?: string[];\n noIndex?: boolean;\n authors?: Author[];\n tags?: Tag[];\n organization: MetaOrganizationType;\n}\n\nexport type ToggleLikeCallbackType = ({\n postId,\n hasLike,\n}: {\n postId?: number | string;\n hasLike?: boolean;\n}) => void;\n\nexport interface HeaderBlockProps extends PageConstructorHeaderBlockProps {\n backLink?: {\n url: string;\n title: React.ReactNode;\n };\n}\n\nexport type GetPostsRequest = {\n page: number;\n perPage: number;\n savedOnly: boolean;\n search: string | undefined;\n [filterParam: string]: string | number | boolean | undefined;\n};\n\nexport type GetPostsType = (query: GetPostsRequest) => Promise<PostsProps>;\n\nexport type HandleChangeQueryParams = (params: Query) => void;\n\nexport enum DefaultEventNames {\n ShareButton = 'share-button-click',\n SaveButton = 'save-button-click',\n ShowMore = 'show-more-button-click',\n PaginatorHome = 'paginator-home-button-click',\n PaginatorNext = 'paginator-next-button-click',\n PaginatorPage = 'paginator-page-button-click',\n Tag = 'selector-tag-click',\n Service = 'selector-service-click',\n SaveOnly = 'save-only-button-click',\n}\n\nexport type FetchArgs = {\n page?: number;\n query: Query;\n};\n\nexport interface QAProps {\n qa?: string;\n}\n\ntype FilterConfigBase = {\n /** The key used in queryParams and passed to handleLoadData query */\n queryParamName: string;\n /** Optional analytics events fired when this control's value changes */\n analyticsEvents?: AnalyticsEventsProp;\n};\n\nexport type SelectFilterConfig = FilterConfigBase &\n Pick<SelectProps, 'multiple' | 'filterable' | 'hasClear' | 'placeholder'> & {\n type?: 'select';\n /** The selectable items for this filter */\n options: SelectOption[];\n /** Label shown when nothing is selected (acts as \"All ...\" placeholder) */\n allLabel: string;\n /** Optional QA attribute forwarded to the switcher */\n qa?: string;\n };\n\nexport type SearchFilterConfig = FilterConfigBase & {\n type: 'search';\n /** Placeholder text for the search input */\n placeholder?: string;\n};\n\nexport type SavedOnlyFilterConfig = FilterConfigBase & {\n type: 'savedOnly';\n};\n\nexport type FilterConfig = SelectFilterConfig | SearchFilterConfig | SavedOnlyFilterConfig;\n\n/**\n * Filters can be supplied either as a flat array (all filters in one row)\n * or as an array of rows (each inner array is rendered as a separate row).\n *\n * @example Single row (backward-compatible)\n * filters: [searchFilter, tagsFilter]\n *\n * @example Multiple rows\n * filters: [[searchFilter, savedOnlyFilter], [tagsFilter, serviceFilter]]\n */\nexport type FiltersConfig = FilterConfig[] | FilterConfig[][];\n\nexport function normalizeFiltersToRows(filters: FiltersConfig): FilterConfig[][] {\n if (filters.length === 0) {\n return [];\n }\n\n // If the first element is itself an array, the input is already multi-row.\n if (Array.isArray(filters[0])) {\n return filters as FilterConfig[][];\n }\n\n return [filters as FilterConfig[]];\n}\n\nexport enum PostCardSize {\n SMALL = 's',\n MEDIUM = 'm',\n}\n\nexport enum PostCardTitleHeadingLevel {\n H2 = 'h2',\n H3 = 'h3',\n}\n\nexport interface TransformPostOptions {\n plugins?: MarkdownItPluginCb[];\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AnalyticsEvent, AnalyticsEventsProp, ContentBlockProps, HeaderBreadCrumbsProps } from '@gravity-ui/page-constructor';
|
|
2
2
|
import { RouterContextProps } from "../contexts/RouterContext.js";
|
|
3
3
|
import { AnalyticsCounter } from "../counters/utils.js";
|
|
4
|
-
import {
|
|
4
|
+
import { FiltersConfig, GetPostsRequest, Query, Tag } from "../models/common.js";
|
|
5
5
|
export interface QueryParam {
|
|
6
6
|
name: string;
|
|
7
7
|
value?: string | number | null;
|
|
@@ -47,7 +47,7 @@ export declare const getMergedAnalyticsEvents: (analyticEvents: AnalyticsEventsP
|
|
|
47
47
|
context?: string;
|
|
48
48
|
target?: string;
|
|
49
49
|
}[];
|
|
50
|
-
export declare const getFeedQueryParams: (queryString: Query, pageNumber?: number, filters?:
|
|
50
|
+
export declare const getFeedQueryParams: (queryString: Query, pageNumber?: number, filters?: FiltersConfig) => GetPostsRequest;
|
|
51
51
|
export declare const scrollOnPageChange: (containerId: string) => void;
|
|
52
52
|
export declare const getQaAttributes: (qa?: string, ...customKeys: (string | Array<string>)[]) => Record<string, string>;
|
|
53
53
|
type PrepareAnalyticsEventArgs = {
|
|
@@ -12,6 +12,7 @@ const memoize_1 = tslib_1.__importDefault(require("lodash/memoize.js"));
|
|
|
12
12
|
const constants_1 = require("../blocks/constants.js");
|
|
13
13
|
const utils_1 = require("../counters/utils.js");
|
|
14
14
|
const i18n_1 = require("../i18n/index.js");
|
|
15
|
+
const common_1 = require("../models/common.js");
|
|
15
16
|
const QA_ATTRIBUTES_KEYS = ['container', 'content', 'wrapper', 'image', 'button'];
|
|
16
17
|
function getAbsolutePath(router, url) {
|
|
17
18
|
if (!router || !router.pathname) {
|
|
@@ -97,7 +98,8 @@ const getFeedQueryParams = (queryString, pageNumber, filters) => {
|
|
|
97
98
|
const search = queryParams.get('search') || undefined;
|
|
98
99
|
const filterParams = {};
|
|
99
100
|
if (filters === null || filters === void 0 ? void 0 : filters.length) {
|
|
100
|
-
|
|
101
|
+
const rows = (0, common_1.normalizeFiltersToRows)(filters);
|
|
102
|
+
rows.flat().forEach(({ queryParamName }) => {
|
|
101
103
|
filterParams[queryParamName] = queryParams.get(queryParamName) || undefined;
|
|
102
104
|
});
|
|
103
105
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.js","sourceRoot":"../../../src","sources":["utils/common.ts"],"names":[],"mappings":"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","sourcesContent":["import {format, parse} from 'url';\n\nimport {\n AnalyticsEvent,\n AnalyticsEventsProp,\n ContentBlockProps,\n HeaderBreadCrumbsProps,\n} from '@gravity-ui/page-constructor';\nimport camelCase from 'lodash/camelCase';\nimport debounce from 'lodash/debounce';\nimport flatten from 'lodash/flatten';\nimport memoize from 'lodash/memoize';\n\nimport {\n CONTENT_DEFAULT_COL_SIZES,\n CONTENT_DEFAULT_SIZE,\n CONTENT_DEFAULT_THEME,\n DEFAULT_PAGE,\n DEFAULT_ROWS_PER_PAGE,\n} from '../blocks/constants';\nimport {RouterContextProps} from '../contexts/RouterContext';\nimport {AnalyticsCounter} from '../counters/utils';\nimport {Keyset, i18n} from '../i18n';\nimport {FilterConfig, GetPostsRequest, Query, Tag} from '../models/common';\n\nconst QA_ATTRIBUTES_KEYS = ['container', 'content', 'wrapper', 'image', 'button'];\n\nexport interface QueryParam {\n name: string;\n value?: string | number | null;\n}\n\nexport interface RouterActionOptions {\n shallow?: boolean;\n}\n\nexport function getAbsolutePath(router: RouterContextProps, url?: string) {\n if (!router || !router.pathname) {\n return url ?? '';\n }\n\n const parsed = parse(url || router.as || '');\n\n return format({\n ...parsed,\n protocol: parsed.protocol || 'https',\n hostname: parsed.hostname || router.hostname,\n pathname: parsed.pathname || router.pathname,\n });\n}\n\nexport const getPageSearchParams = (query: Query = {}) => {\n const searchParams = new URLSearchParams();\n\n Object.entries(query).forEach(([key, value]) => {\n searchParams.set(key, String(value));\n });\n\n return searchParams;\n};\n\nexport const scrollToHash = (hash: string, browser?: string) => {\n if (!hash) {\n return;\n }\n\n const element = document.getElementById(hash);\n\n if (!element) {\n return;\n }\n\n setTimeout(\n () => element.scrollIntoView({behavior: browser === 'Yandex' ? 'auto' : 'smooth'}),\n 0,\n );\n};\n\ntype CloudListTagStub = {};\n\nexport const getTags = memoize((tags: Tag[], blogPath: string) => {\n return tags.map(({slug, ...tag}) => {\n const queryParams = new URLSearchParams();\n queryParams.set('tags', slug);\n\n return {\n ...tag,\n id: slug,\n url: `${blogPath}?${queryParams}`,\n } as CloudListTagStub;\n });\n});\n\nconst stub = (postId: number | string) => postId;\n\nexport const postLikeStatus = debounce((postId: number | string, hasUserLike: boolean) => {\n (hasUserLike ? stub : stub)(postId);\n}, 300);\n\nexport const updateContentSizes = ({size, colSizes, theme, ...contentData}: ContentBlockProps) => ({\n ...contentData,\n size: size || CONTENT_DEFAULT_SIZE,\n colSizes: colSizes || CONTENT_DEFAULT_COL_SIZES,\n theme: theme || CONTENT_DEFAULT_THEME,\n});\n\ntype GetBreadcrumbsProps = {\n tags?: Tag[];\n blogPath: string;\n};\n\nexport const getBlogPath = (pathPrefix: string) => {\n const prefix = pathPrefix ? `/${pathPrefix}` : '';\n return `${prefix}/blog`;\n};\n\nexport function getBreadcrumbs({tags, blogPath}: GetBreadcrumbsProps) {\n const breadcrumbs: HeaderBreadCrumbsProps = {\n items: [{text: i18n(Keyset.TitleBreadcrumbs), url: blogPath}],\n theme: 'light',\n };\n\n if (tags?.length) {\n const localizedTags = getTags(tags, blogPath);\n const tag = localizedTags[0];\n // @ts-ignore todo fix\n breadcrumbs.items.push({text: tag.name, url: tag.url});\n }\n\n return breadcrumbs;\n}\n\nconst getArrayOfEvents = (events?: AnalyticsEventsProp) => {\n if (!events) {\n return [];\n }\n\n if (Array.isArray(events)) {\n return events;\n }\n\n return [events];\n};\n\nexport const getMergedAnalyticsEvents = (\n analyticEvents: AnalyticsEventsProp,\n existringEvents?: AnalyticsEventsProp,\n) => {\n const eventsAsArray = getArrayOfEvents(analyticEvents);\n const existingAsArray = getArrayOfEvents(existringEvents);\n\n return eventsAsArray.concat(existingAsArray);\n};\n\nexport const getFeedQueryParams = (\n queryString: Query,\n pageNumber?: number,\n filters?: FilterConfig[],\n): GetPostsRequest => {\n const queryParams = getPageSearchParams(queryString);\n const page = pageNumber || Number(queryParams.get('page') || DEFAULT_PAGE);\n const perPage = Number(queryParams.get('perPage') || DEFAULT_ROWS_PER_PAGE);\n const savedOnly = queryParams.get('savedOnly') === 'true';\n const search = queryParams.get('search') || undefined;\n\n const filterParams: Record<string, string | undefined> = {};\n\n if (filters?.length) {\n filters.forEach(({queryParamName}) => {\n filterParams[queryParamName] = queryParams.get(queryParamName) || undefined;\n });\n }\n\n return {page, perPage, savedOnly, search, ...filterParams};\n};\n\nexport const scrollOnPageChange = (containerId: string) => {\n const cardsContainerEl = document.getElementById(containerId);\n const y = cardsContainerEl?.getBoundingClientRect()?.y || 0;\n\n if (y < 0) {\n scrollToHash(containerId);\n }\n};\n\nexport const getQaAttributes = (qa?: string, ...customKeys: (string | Array<string>)[]) => {\n const attributes: Record<string, string> = {};\n\n if (qa) {\n const keys = QA_ATTRIBUTES_KEYS.concat(flatten(customKeys));\n\n keys.forEach((key) => {\n attributes[camelCase(key)] = `${qa}-${key}`;\n });\n\n attributes.default = qa;\n }\n\n return attributes;\n};\n\ntype PrepareAnalyticsEventArgs = {\n name: string;\n counter?: AnalyticsCounter;\n options?: Record<string, string | number>;\n};\n\nexport const prepareAnalyticsEvent = ({\n name,\n counter = AnalyticsCounter.Main,\n options = {},\n}: PrepareAnalyticsEventArgs): AnalyticsEvent => ({\n ...options,\n name,\n counters: {\n include: [counter],\n },\n});\n"]}
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"../../../src","sources":["utils/common.ts"],"names":[],"mappings":"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","sourcesContent":["import {format, parse} from 'url';\n\nimport {\n AnalyticsEvent,\n AnalyticsEventsProp,\n ContentBlockProps,\n HeaderBreadCrumbsProps,\n} from '@gravity-ui/page-constructor';\nimport camelCase from 'lodash/camelCase';\nimport debounce from 'lodash/debounce';\nimport flatten from 'lodash/flatten';\nimport memoize from 'lodash/memoize';\n\nimport {\n CONTENT_DEFAULT_COL_SIZES,\n CONTENT_DEFAULT_SIZE,\n CONTENT_DEFAULT_THEME,\n DEFAULT_PAGE,\n DEFAULT_ROWS_PER_PAGE,\n} from '../blocks/constants';\nimport {RouterContextProps} from '../contexts/RouterContext';\nimport {AnalyticsCounter} from '../counters/utils';\nimport {Keyset, i18n} from '../i18n';\nimport {FiltersConfig, GetPostsRequest, Query, Tag, normalizeFiltersToRows} from '../models/common';\n\nconst QA_ATTRIBUTES_KEYS = ['container', 'content', 'wrapper', 'image', 'button'];\n\nexport interface QueryParam {\n name: string;\n value?: string | number | null;\n}\n\nexport interface RouterActionOptions {\n shallow?: boolean;\n}\n\nexport function getAbsolutePath(router: RouterContextProps, url?: string) {\n if (!router || !router.pathname) {\n return url ?? '';\n }\n\n const parsed = parse(url || router.as || '');\n\n return format({\n ...parsed,\n protocol: parsed.protocol || 'https',\n hostname: parsed.hostname || router.hostname,\n pathname: parsed.pathname || router.pathname,\n });\n}\n\nexport const getPageSearchParams = (query: Query = {}) => {\n const searchParams = new URLSearchParams();\n\n Object.entries(query).forEach(([key, value]) => {\n searchParams.set(key, String(value));\n });\n\n return searchParams;\n};\n\nexport const scrollToHash = (hash: string, browser?: string) => {\n if (!hash) {\n return;\n }\n\n const element = document.getElementById(hash);\n\n if (!element) {\n return;\n }\n\n setTimeout(\n () => element.scrollIntoView({behavior: browser === 'Yandex' ? 'auto' : 'smooth'}),\n 0,\n );\n};\n\ntype CloudListTagStub = {};\n\nexport const getTags = memoize((tags: Tag[], blogPath: string) => {\n return tags.map(({slug, ...tag}) => {\n const queryParams = new URLSearchParams();\n queryParams.set('tags', slug);\n\n return {\n ...tag,\n id: slug,\n url: `${blogPath}?${queryParams}`,\n } as CloudListTagStub;\n });\n});\n\nconst stub = (postId: number | string) => postId;\n\nexport const postLikeStatus = debounce((postId: number | string, hasUserLike: boolean) => {\n (hasUserLike ? stub : stub)(postId);\n}, 300);\n\nexport const updateContentSizes = ({size, colSizes, theme, ...contentData}: ContentBlockProps) => ({\n ...contentData,\n size: size || CONTENT_DEFAULT_SIZE,\n colSizes: colSizes || CONTENT_DEFAULT_COL_SIZES,\n theme: theme || CONTENT_DEFAULT_THEME,\n});\n\ntype GetBreadcrumbsProps = {\n tags?: Tag[];\n blogPath: string;\n};\n\nexport const getBlogPath = (pathPrefix: string) => {\n const prefix = pathPrefix ? `/${pathPrefix}` : '';\n return `${prefix}/blog`;\n};\n\nexport function getBreadcrumbs({tags, blogPath}: GetBreadcrumbsProps) {\n const breadcrumbs: HeaderBreadCrumbsProps = {\n items: [{text: i18n(Keyset.TitleBreadcrumbs), url: blogPath}],\n theme: 'light',\n };\n\n if (tags?.length) {\n const localizedTags = getTags(tags, blogPath);\n const tag = localizedTags[0];\n // @ts-ignore todo fix\n breadcrumbs.items.push({text: tag.name, url: tag.url});\n }\n\n return breadcrumbs;\n}\n\nconst getArrayOfEvents = (events?: AnalyticsEventsProp) => {\n if (!events) {\n return [];\n }\n\n if (Array.isArray(events)) {\n return events;\n }\n\n return [events];\n};\n\nexport const getMergedAnalyticsEvents = (\n analyticEvents: AnalyticsEventsProp,\n existringEvents?: AnalyticsEventsProp,\n) => {\n const eventsAsArray = getArrayOfEvents(analyticEvents);\n const existingAsArray = getArrayOfEvents(existringEvents);\n\n return eventsAsArray.concat(existingAsArray);\n};\n\nexport const getFeedQueryParams = (\n queryString: Query,\n pageNumber?: number,\n filters?: FiltersConfig,\n): GetPostsRequest => {\n const queryParams = getPageSearchParams(queryString);\n const page = pageNumber || Number(queryParams.get('page') || DEFAULT_PAGE);\n const perPage = Number(queryParams.get('perPage') || DEFAULT_ROWS_PER_PAGE);\n const savedOnly = queryParams.get('savedOnly') === 'true';\n const search = queryParams.get('search') || undefined;\n\n const filterParams: Record<string, string | undefined> = {};\n\n if (filters?.length) {\n const rows = normalizeFiltersToRows(filters);\n rows.flat().forEach(({queryParamName}) => {\n filterParams[queryParamName] = queryParams.get(queryParamName) || undefined;\n });\n }\n\n return {page, perPage, savedOnly, search, ...filterParams};\n};\n\nexport const scrollOnPageChange = (containerId: string) => {\n const cardsContainerEl = document.getElementById(containerId);\n const y = cardsContainerEl?.getBoundingClientRect()?.y || 0;\n\n if (y < 0) {\n scrollToHash(containerId);\n }\n};\n\nexport const getQaAttributes = (qa?: string, ...customKeys: (string | Array<string>)[]) => {\n const attributes: Record<string, string> = {};\n\n if (qa) {\n const keys = QA_ATTRIBUTES_KEYS.concat(flatten(customKeys));\n\n keys.forEach((key) => {\n attributes[camelCase(key)] = `${qa}-${key}`;\n });\n\n attributes.default = qa;\n }\n\n return attributes;\n};\n\ntype PrepareAnalyticsEventArgs = {\n name: string;\n counter?: AnalyticsCounter;\n options?: Record<string, string | number>;\n};\n\nexport const prepareAnalyticsEvent = ({\n name,\n counter = AnalyticsCounter.Main,\n options = {},\n}: PrepareAnalyticsEventArgs): AnalyticsEvent => ({\n ...options,\n name,\n counters: {\n include: [counter],\n },\n});\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { FeedProps } from "../../models/blocks.js";
|
|
2
|
-
export declare const Feed: ({ image, title }: FeedProps) => import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
export declare const Feed: ({ image, title, resetTitleMargin }: FeedProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -15,7 +15,7 @@ import { ActionTypes, reducer } from "./reducer.js";
|
|
|
15
15
|
const CONTAINER_ID = 'blog-cards';
|
|
16
16
|
const PAGE_QUERY = 'page';
|
|
17
17
|
const FIRST_PAGE = 1;
|
|
18
|
-
export const Feed = ({ image, title }) => {
|
|
18
|
+
export const Feed = ({ image, title, resetTitleMargin }) => {
|
|
19
19
|
var _a;
|
|
20
20
|
const { posts, totalCount, filters, pinnedPost, getPosts, pageCountForShowSupportButtons } = React.useContext(FeedContext);
|
|
21
21
|
const router = React.useContext(RouterContext);
|
|
@@ -142,6 +142,6 @@ export const Feed = ({ image, title }) => {
|
|
|
142
142
|
fullWidth: true,
|
|
143
143
|
url: image,
|
|
144
144
|
disableCompress: true,
|
|
145
|
-
}, title: title }), errorLoad ? (_jsx(PostsError, { onButtonClick: handleOnErrorReload })) : (_jsx(Posts, { containerId: CONTAINER_ID, currentPage: currentPage, isShowMoreVisible: isShowMoreVisible, errorShowMore: errorShowMore, postCountOnPage: postCountOnPage, perPageInQuery: perPageInQuery, handleShowMore: handleShowMore, handlePageChange: handlePageChange, postsOnPage: postsOnPage, pinnedPostOnPage: pinnedPostOnPage, isFetching: isFetching, queryParams: queryParams, pageCountForShowSupportButtons: pageCountForShowSupportButtons }))] }));
|
|
145
|
+
}, title: title, resetTitleMargin: resetTitleMargin }), errorLoad ? (_jsx(PostsError, { onButtonClick: handleOnErrorReload })) : (_jsx(Posts, { containerId: CONTAINER_ID, currentPage: currentPage, isShowMoreVisible: isShowMoreVisible, errorShowMore: errorShowMore, postCountOnPage: postCountOnPage, perPageInQuery: perPageInQuery, handleShowMore: handleShowMore, handlePageChange: handlePageChange, postsOnPage: postsOnPage, pinnedPostOnPage: pinnedPostOnPage, isFetching: isFetching, queryParams: queryParams, pageCountForShowSupportButtons: pageCountForShowSupportButtons }))] }));
|
|
146
146
|
};
|
|
147
147
|
//# sourceMappingURL=Feed.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Feed.js","sourceRoot":"../../../../src","sources":["blocks/Feed/Feed.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {useAnalytics} from '@gravity-ui/page-constructor';\n\nimport {FeedHeader} from '../../components/FeedHeader/FeedHeader';\nimport {Posts} from '../../components/Posts/Posts';\nimport {PostsError} from '../../components/PostsError/PostsError';\nimport {DefaultGoalIds} from '../../constants';\nimport {FeedContext} from '../../contexts/FeedContext';\nimport {RouterContext} from '../../contexts/RouterContext';\nimport {AnalyticsCounter} from '../../counters/utils';\nimport {FeedProps} from '../../models/blocks';\nimport {DefaultEventNames, FetchArgs, HandleChangeQueryParams} from '../../models/common';\nimport {getFeedQueryParams, prepareAnalyticsEvent, scrollOnPageChange} from '../../utils/common';\nimport {DEFAULT_PAGE, DEFAULT_ROWS_PER_PAGE} from '../constants';\n\nimport {ActionTypes, reducer} from './reducer';\n\nconst CONTAINER_ID = 'blog-cards';\nconst PAGE_QUERY = 'page';\nconst FIRST_PAGE = 1;\n\nexport const Feed = ({image, title}: FeedProps) => {\n const {posts, totalCount, filters, pinnedPost, getPosts, pageCountForShowSupportButtons} =\n React.useContext(FeedContext);\n const router = React.useContext(RouterContext);\n const handleAnalytics = useAnalytics(DefaultEventNames.ShowMore);\n const additionalAnalyticsEvent = prepareAnalyticsEvent({\n name: DefaultGoalIds.showMore,\n counter: AnalyticsCounter.CrossSite,\n });\n\n const [\n {\n errorLoad,\n errorShowMore,\n isFetching,\n isShowMoreVisible,\n lastLoadedCount,\n postCountOnPage,\n postsOnPage,\n pinnedPostOnPage,\n currentPage,\n queryParams,\n },\n dispatch,\n ] = React.useReducer(reducer, {\n errorLoad: false,\n errorShowMore: false,\n isFetching: false,\n isShowMoreVisible: true,\n lastLoadedCount: posts?.length || 0,\n postCountOnPage: totalCount || 0,\n postsOnPage: posts,\n pinnedPostOnPage: pinnedPost,\n currentPage: router?.query?.page ? Number(router.query.page) : DEFAULT_PAGE,\n queryParams: router.query || {},\n });\n\n const perPageInQuery = queryParams?.perPage\n ? Number(queryParams.perPage)\n : DEFAULT_ROWS_PER_PAGE;\n\n const pageChange = (value: number) => {\n dispatch({type: ActionTypes.PageChange, payload: value});\n };\n\n const setIsFetching = (value: boolean) => {\n dispatch({type: ActionTypes.SetIsFetching, payload: value});\n };\n\n const setErrorLoad = (value: boolean) => {\n dispatch({type: ActionTypes.SetErrorLoad, payload: value});\n };\n\n const handleChangeQueryParams: HandleChangeQueryParams = React.useCallback(\n (value) => {\n dispatch({type: ActionTypes.QueryParamsChange, payload: value});\n\n const hasFirstPageQuery = Object.keys(value).some(\n (queryKey) => queryKey === PAGE_QUERY && value[queryKey] === FIRST_PAGE,\n );\n\n const result = hasFirstPageQuery\n ? {\n ...value,\n [PAGE_QUERY]: null,\n }\n : {\n ...value,\n };\n\n router.updateQueryCallback(result);\n },\n [router],\n );\n\n const fetchData = React.useCallback(\n async ({page, query}: FetchArgs) => {\n if (query && getPosts) {\n const queryParamsForRequest = getFeedQueryParams(\n {...queryParams, ...query},\n page,\n filters,\n );\n const data = await getPosts(queryParamsForRequest);\n\n return data;\n } else {\n throw new Error('cant get request');\n }\n },\n [getPosts, queryParams, filters],\n );\n\n const handleLoad = React.useCallback(\n async ({page, query}: FetchArgs) => {\n const pageNumber = Number(page || queryParams.page || DEFAULT_PAGE);\n\n handleChangeQueryParams(query);\n\n try {\n setErrorLoad(false);\n setIsFetching(true);\n\n const fetchedData = await fetchData({page: pageNumber, query});\n\n if (fetchedData) {\n dispatch({\n type: ActionTypes.SetPosts,\n payload: {\n posts: fetchedData.posts,\n pinnedPost: fetchedData.pinnedPost,\n count: fetchedData.count,\n page: pageNumber,\n },\n });\n }\n } catch (err) {\n setErrorLoad(true);\n }\n\n scrollOnPageChange(CONTAINER_ID);\n\n setIsFetching(false);\n },\n [fetchData, handleChangeQueryParams, queryParams],\n );\n\n const handlePageChange = async (value: number) => {\n pageChange(value);\n handleLoad({\n page: value,\n query: {...queryParams, page: value},\n });\n };\n\n const handleShowMore = async () => {\n handleAnalytics(additionalAnalyticsEvent);\n\n const nextPage = currentPage + 1;\n\n try {\n setIsFetching(true);\n const fetchedData = await fetchData({\n page: nextPage,\n query: {\n page: nextPage,\n },\n });\n\n handleChangeQueryParams({\n page: nextPage,\n });\n\n if (fetchedData) {\n dispatch({\n type: ActionTypes.SetShowMore,\n payload: {\n posts: (postsOnPage ?? []).concat(fetchedData.posts),\n count: fetchedData.count,\n currentPage: nextPage,\n lastLoadedCount: fetchedData.posts.length,\n },\n });\n }\n } catch (err) {\n dispatch({type: ActionTypes.SetErrorShowMore, payload: true});\n }\n\n setIsFetching(false);\n };\n\n const handleOnErrorReload = React.useCallback(() => {\n handleLoad({page: currentPage, query: queryParams});\n }, [currentPage, handleLoad, queryParams]);\n\n React.useEffect(() => {\n const loadedPostsCount = currentPage * perPageInQuery;\n dispatch({\n type: ActionTypes.SetIsShowMoreVisible,\n payload: loadedPostsCount < postCountOnPage,\n });\n }, [currentPage, lastLoadedCount, perPageInQuery, postCountOnPage]);\n\n return (\n <div>\n <FeedHeader\n verticalOffset=\"s\"\n filters={filters}\n handleLoadData={handleLoad}\n queryParams={queryParams}\n background={{\n fullWidth: true,\n url: image,\n disableCompress: true,\n }}\n title={title}\n />\n {errorLoad ? (\n <PostsError onButtonClick={handleOnErrorReload} />\n ) : (\n <Posts\n containerId={CONTAINER_ID}\n currentPage={currentPage}\n isShowMoreVisible={isShowMoreVisible}\n errorShowMore={errorShowMore}\n postCountOnPage={postCountOnPage}\n perPageInQuery={perPageInQuery}\n handleShowMore={handleShowMore}\n handlePageChange={handlePageChange}\n postsOnPage={postsOnPage}\n pinnedPostOnPage={pinnedPostOnPage}\n isFetching={isFetching}\n queryParams={queryParams}\n pageCountForShowSupportButtons={pageCountForShowSupportButtons}\n />\n )}\n </div>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"Feed.js","sourceRoot":"../../../../src","sources":["blocks/Feed/Feed.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport {useAnalytics} from '@gravity-ui/page-constructor';\n\nimport {FeedHeader} from '../../components/FeedHeader/FeedHeader';\nimport {Posts} from '../../components/Posts/Posts';\nimport {PostsError} from '../../components/PostsError/PostsError';\nimport {DefaultGoalIds} from '../../constants';\nimport {FeedContext} from '../../contexts/FeedContext';\nimport {RouterContext} from '../../contexts/RouterContext';\nimport {AnalyticsCounter} from '../../counters/utils';\nimport {FeedProps} from '../../models/blocks';\nimport {DefaultEventNames, FetchArgs, HandleChangeQueryParams} from '../../models/common';\nimport {getFeedQueryParams, prepareAnalyticsEvent, scrollOnPageChange} from '../../utils/common';\nimport {DEFAULT_PAGE, DEFAULT_ROWS_PER_PAGE} from '../constants';\n\nimport {ActionTypes, reducer} from './reducer';\n\nconst CONTAINER_ID = 'blog-cards';\nconst PAGE_QUERY = 'page';\nconst FIRST_PAGE = 1;\n\nexport const Feed = ({image, title, resetTitleMargin}: FeedProps) => {\n const {posts, totalCount, filters, pinnedPost, getPosts, pageCountForShowSupportButtons} =\n React.useContext(FeedContext);\n const router = React.useContext(RouterContext);\n const handleAnalytics = useAnalytics(DefaultEventNames.ShowMore);\n const additionalAnalyticsEvent = prepareAnalyticsEvent({\n name: DefaultGoalIds.showMore,\n counter: AnalyticsCounter.CrossSite,\n });\n\n const [\n {\n errorLoad,\n errorShowMore,\n isFetching,\n isShowMoreVisible,\n lastLoadedCount,\n postCountOnPage,\n postsOnPage,\n pinnedPostOnPage,\n currentPage,\n queryParams,\n },\n dispatch,\n ] = React.useReducer(reducer, {\n errorLoad: false,\n errorShowMore: false,\n isFetching: false,\n isShowMoreVisible: true,\n lastLoadedCount: posts?.length || 0,\n postCountOnPage: totalCount || 0,\n postsOnPage: posts,\n pinnedPostOnPage: pinnedPost,\n currentPage: router?.query?.page ? Number(router.query.page) : DEFAULT_PAGE,\n queryParams: router.query || {},\n });\n\n const perPageInQuery = queryParams?.perPage\n ? Number(queryParams.perPage)\n : DEFAULT_ROWS_PER_PAGE;\n\n const pageChange = (value: number) => {\n dispatch({type: ActionTypes.PageChange, payload: value});\n };\n\n const setIsFetching = (value: boolean) => {\n dispatch({type: ActionTypes.SetIsFetching, payload: value});\n };\n\n const setErrorLoad = (value: boolean) => {\n dispatch({type: ActionTypes.SetErrorLoad, payload: value});\n };\n\n const handleChangeQueryParams: HandleChangeQueryParams = React.useCallback(\n (value) => {\n dispatch({type: ActionTypes.QueryParamsChange, payload: value});\n\n const hasFirstPageQuery = Object.keys(value).some(\n (queryKey) => queryKey === PAGE_QUERY && value[queryKey] === FIRST_PAGE,\n );\n\n const result = hasFirstPageQuery\n ? {\n ...value,\n [PAGE_QUERY]: null,\n }\n : {\n ...value,\n };\n\n router.updateQueryCallback(result);\n },\n [router],\n );\n\n const fetchData = React.useCallback(\n async ({page, query}: FetchArgs) => {\n if (query && getPosts) {\n const queryParamsForRequest = getFeedQueryParams(\n {...queryParams, ...query},\n page,\n filters,\n );\n const data = await getPosts(queryParamsForRequest);\n\n return data;\n } else {\n throw new Error('cant get request');\n }\n },\n [getPosts, queryParams, filters],\n );\n\n const handleLoad = React.useCallback(\n async ({page, query}: FetchArgs) => {\n const pageNumber = Number(page || queryParams.page || DEFAULT_PAGE);\n\n handleChangeQueryParams(query);\n\n try {\n setErrorLoad(false);\n setIsFetching(true);\n\n const fetchedData = await fetchData({page: pageNumber, query});\n\n if (fetchedData) {\n dispatch({\n type: ActionTypes.SetPosts,\n payload: {\n posts: fetchedData.posts,\n pinnedPost: fetchedData.pinnedPost,\n count: fetchedData.count,\n page: pageNumber,\n },\n });\n }\n } catch (err) {\n setErrorLoad(true);\n }\n\n scrollOnPageChange(CONTAINER_ID);\n\n setIsFetching(false);\n },\n [fetchData, handleChangeQueryParams, queryParams],\n );\n\n const handlePageChange = async (value: number) => {\n pageChange(value);\n handleLoad({\n page: value,\n query: {...queryParams, page: value},\n });\n };\n\n const handleShowMore = async () => {\n handleAnalytics(additionalAnalyticsEvent);\n\n const nextPage = currentPage + 1;\n\n try {\n setIsFetching(true);\n const fetchedData = await fetchData({\n page: nextPage,\n query: {\n page: nextPage,\n },\n });\n\n handleChangeQueryParams({\n page: nextPage,\n });\n\n if (fetchedData) {\n dispatch({\n type: ActionTypes.SetShowMore,\n payload: {\n posts: (postsOnPage ?? []).concat(fetchedData.posts),\n count: fetchedData.count,\n currentPage: nextPage,\n lastLoadedCount: fetchedData.posts.length,\n },\n });\n }\n } catch (err) {\n dispatch({type: ActionTypes.SetErrorShowMore, payload: true});\n }\n\n setIsFetching(false);\n };\n\n const handleOnErrorReload = React.useCallback(() => {\n handleLoad({page: currentPage, query: queryParams});\n }, [currentPage, handleLoad, queryParams]);\n\n React.useEffect(() => {\n const loadedPostsCount = currentPage * perPageInQuery;\n dispatch({\n type: ActionTypes.SetIsShowMoreVisible,\n payload: loadedPostsCount < postCountOnPage,\n });\n }, [currentPage, lastLoadedCount, perPageInQuery, postCountOnPage]);\n\n return (\n <div>\n <FeedHeader\n verticalOffset=\"s\"\n filters={filters}\n handleLoadData={handleLoad}\n queryParams={queryParams}\n background={{\n fullWidth: true,\n url: image,\n disableCompress: true,\n }}\n title={title}\n resetTitleMargin={resetTitleMargin}\n />\n {errorLoad ? (\n <PostsError onButtonClick={handleOnErrorReload} />\n ) : (\n <Posts\n containerId={CONTAINER_ID}\n currentPage={currentPage}\n isShowMoreVisible={isShowMoreVisible}\n errorShowMore={errorShowMore}\n postCountOnPage={postCountOnPage}\n perPageInQuery={perPageInQuery}\n handleShowMore={handleShowMore}\n handlePageChange={handlePageChange}\n postsOnPage={postsOnPage}\n pinnedPostOnPage={pinnedPostOnPage}\n isFetching={isFetching}\n queryParams={queryParams}\n pageCountForShowSupportButtons={pageCountForShowSupportButtons}\n />\n )}\n </div>\n );\n};\n"]}
|
|
@@ -4,5 +4,5 @@ import './FeedHeader.css';
|
|
|
4
4
|
type HeaderProps = Pick<HeaderBlockProps, 'background' | 'offset' | 'theme' | 'verticalOffset'>;
|
|
5
5
|
type FeedHeaderProps = HeaderProps & ControlsProps;
|
|
6
6
|
type FeedHeaderContainerProps = FeedHeaderProps & ClassNameProps;
|
|
7
|
-
export declare const FeedHeader: ({ filters, handleLoadData, offset, background, theme, verticalOffset, className, queryParams, title, }: FeedHeaderContainerProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export declare const FeedHeader: ({ filters, handleLoadData, offset, background, theme, verticalOffset, className, queryParams, title, resetTitleMargin, }: FeedHeaderContainerProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
8
|
export {};
|
|
@@ -4,12 +4,12 @@ import { block } from "../../utils/cn.js";
|
|
|
4
4
|
import { Controls } from "./components/Controls/Controls.js";
|
|
5
5
|
import './FeedHeader.css';
|
|
6
6
|
const b = block('feed-header');
|
|
7
|
-
export const FeedHeader = ({ filters, handleLoadData, offset = 'default', background, theme = 'light', verticalOffset = 'l', className, queryParams, title, }) => {
|
|
7
|
+
export const FeedHeader = ({ filters, handleLoadData, offset = 'default', background, theme = 'light', verticalOffset = 'l', className, queryParams, title, resetTitleMargin, }) => {
|
|
8
8
|
const backgroundThemed = background && getThemedValue(background, theme);
|
|
9
9
|
return (_jsxs("header", { className: b('header', { ['has-background']: Boolean(background) }, className), children: [(backgroundThemed === null || backgroundThemed === void 0 ? void 0 : backgroundThemed.color) ? (_jsx(FullWidthBackground, { style: { backgroundColor: backgroundThemed === null || backgroundThemed === void 0 ? void 0 : backgroundThemed.color }, theme: "rounded" })) : null, _jsxs(Grid, { className: b('content', { offset, theme, 'vertical-offset': verticalOffset }), children: [backgroundThemed ? (_jsx(BackgroundImage, { src: backgroundThemed === null || backgroundThemed === void 0 ? void 0 : backgroundThemed.url, className: b('background'), imageClassName: b('background-img'), style: {
|
|
10
10
|
backgroundColor: backgroundThemed.fullWidth
|
|
11
11
|
? ''
|
|
12
12
|
: backgroundThemed === null || backgroundThemed === void 0 ? void 0 : backgroundThemed.color,
|
|
13
|
-
}, disableCompress: backgroundThemed === null || backgroundThemed === void 0 ? void 0 : backgroundThemed.disableCompress })) : null, _jsx(Controls, { title: title, filters: filters, handleLoadData: handleLoadData, queryParams: queryParams })] })] }));
|
|
13
|
+
}, disableCompress: backgroundThemed === null || backgroundThemed === void 0 ? void 0 : backgroundThemed.disableCompress })) : null, _jsx(Controls, { title: title, filters: filters, handleLoadData: handleLoadData, queryParams: queryParams, resetTitleMargin: resetTitleMargin })] })] }));
|
|
14
14
|
};
|
|
15
15
|
//# sourceMappingURL=FeedHeader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedHeader.js","sourceRoot":"../../../../src","sources":["components/FeedHeader/FeedHeader.tsx"],"names":[],"mappings":";AAAA,OAAO,EACH,eAAe,EACf,mBAAmB,EACnB,IAAI,EAEJ,cAAc,GACjB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAC,KAAK,EAAC,0BAAuB;AAErC,OAAO,EAAC,QAAQ,EAAgB,0CAAuC;AAEvE,OAAO,kBAAkB,CAAC;AAE1B,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;AAQ/B,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EACvB,OAAO,EACP,cAAc,EACd,MAAM,GAAG,SAAS,EAClB,UAAU,EACV,KAAK,GAAG,OAAO,EACf,cAAc,GAAG,GAAG,EACpB,SAAS,EACT,WAAW,EACX,KAAK,
|
|
1
|
+
{"version":3,"file":"FeedHeader.js","sourceRoot":"../../../../src","sources":["components/FeedHeader/FeedHeader.tsx"],"names":[],"mappings":";AAAA,OAAO,EACH,eAAe,EACf,mBAAmB,EACnB,IAAI,EAEJ,cAAc,GACjB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAC,KAAK,EAAC,0BAAuB;AAErC,OAAO,EAAC,QAAQ,EAAgB,0CAAuC;AAEvE,OAAO,kBAAkB,CAAC;AAE1B,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;AAQ/B,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EACvB,OAAO,EACP,cAAc,EACd,MAAM,GAAG,SAAS,EAClB,UAAU,EACV,KAAK,GAAG,OAAO,EACf,cAAc,GAAG,GAAG,EACpB,SAAS,EACT,WAAW,EACX,KAAK,EACL,gBAAgB,GACO,EAAE,EAAE;IAC3B,MAAM,gBAAgB,GAAG,UAAU,IAAI,cAAc,CAAC,UAAU,EAAE,KAAc,CAAC,CAAC;IAElF,OAAO,CACH,kBAAQ,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAC,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,EAAC,EAAE,SAAS,CAAC,aAC/E,CAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,KAAK,EAAC,CAAC,CAAC,CACvB,KAAC,mBAAmB,IAChB,KAAK,EAAE,EAAC,eAAe,EAAE,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,KAAK,EAAC,EACjD,KAAK,EAAC,SAAS,GACjB,CACL,CAAC,CAAC,CAAC,IAAI,EACR,MAAC,IAAI,IAAC,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,EAAC,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAC,CAAC,aAC5E,gBAAgB,CAAC,CAAC,CAAC,CAChB,KAAC,eAAe,IACZ,GAAG,EAAE,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,GAAG,EAC1B,SAAS,EAAE,CAAC,CAAC,YAAY,CAAC,EAC1B,cAAc,EAAE,CAAC,CAAC,gBAAgB,CAAC,EACnC,KAAK,EAAE;4BACH,eAAe,EAAE,gBAAgB,CAAC,SAAS;gCACvC,CAAC,CAAC,EAAE;gCACJ,CAAC,CAAC,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,KAAK;yBAChC,EACD,eAAe,EAAE,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,eAAe,GACpD,CACL,CAAC,CAAC,CAAC,IAAI,EACR,KAAC,QAAQ,IACL,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,cAAc,EAC9B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,GACpC,IACC,IACF,CACZ,CAAC;AACN,CAAC,CAAC","sourcesContent":["import {\n BackgroundImage,\n FullWidthBackground,\n Grid,\n Theme,\n getThemedValue,\n} from '@gravity-ui/page-constructor';\n\nimport {ClassNameProps, HeaderBlockProps} from '../../models/common';\nimport {block} from '../../utils/cn';\n\nimport {Controls, ControlsProps} from './components/Controls/Controls';\n\nimport './FeedHeader.scss';\n\nconst b = block('feed-header');\n\ntype HeaderProps = Pick<HeaderBlockProps, 'background' | 'offset' | 'theme' | 'verticalOffset'>;\n\ntype FeedHeaderProps = HeaderProps & ControlsProps;\n\ntype FeedHeaderContainerProps = FeedHeaderProps & ClassNameProps;\n\nexport const FeedHeader = ({\n filters,\n handleLoadData,\n offset = 'default',\n background,\n theme = 'light',\n verticalOffset = 'l',\n className,\n queryParams,\n title,\n resetTitleMargin,\n}: FeedHeaderContainerProps) => {\n const backgroundThemed = background && getThemedValue(background, theme as Theme);\n\n return (\n <header className={b('header', {['has-background']: Boolean(background)}, className)}>\n {backgroundThemed?.color ? (\n <FullWidthBackground\n style={{backgroundColor: backgroundThemed?.color}}\n theme=\"rounded\"\n />\n ) : null}\n <Grid className={b('content', {offset, theme, 'vertical-offset': verticalOffset})}>\n {backgroundThemed ? (\n <BackgroundImage\n src={backgroundThemed?.url}\n className={b('background')}\n imageClassName={b('background-img')}\n style={{\n backgroundColor: backgroundThemed.fullWidth\n ? ''\n : backgroundThemed?.color,\n }}\n disableCompress={backgroundThemed?.disableCompress}\n />\n ) : null}\n <Controls\n title={title}\n filters={filters}\n handleLoadData={handleLoadData}\n queryParams={queryParams}\n resetTitleMargin={resetTitleMargin}\n />\n </Grid>\n </header>\n );\n};\n"]}
|