@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
|
@@ -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;
|
|
@@ -19,7 +19,7 @@ const reducer_1 = require("./reducer.js");
|
|
|
19
19
|
const CONTAINER_ID = 'blog-cards';
|
|
20
20
|
const PAGE_QUERY = 'page';
|
|
21
21
|
const FIRST_PAGE = 1;
|
|
22
|
-
const Feed = ({ image, title }) => {
|
|
22
|
+
const Feed = ({ image, title, resetTitleMargin }) => {
|
|
23
23
|
var _a;
|
|
24
24
|
const { posts, totalCount, filters, pinnedPost, getPosts, pageCountForShowSupportButtons } = React.useContext(FeedContext_1.FeedContext);
|
|
25
25
|
const router = React.useContext(RouterContext_1.RouterContext);
|
|
@@ -146,7 +146,7 @@ const Feed = ({ image, title }) => {
|
|
|
146
146
|
fullWidth: true,
|
|
147
147
|
url: image,
|
|
148
148
|
disableCompress: true,
|
|
149
|
-
}, title: title }), errorLoad ? ((0, jsx_runtime_1.jsx)(PostsError_1.PostsError, { onButtonClick: handleOnErrorReload })) : ((0, jsx_runtime_1.jsx)(Posts_1.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 }))] }));
|
|
149
|
+
}, title: title, resetTitleMargin: resetTitleMargin }), errorLoad ? ((0, jsx_runtime_1.jsx)(PostsError_1.PostsError, { onButtonClick: handleOnErrorReload })) : ((0, jsx_runtime_1.jsx)(Posts_1.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 }))] }));
|
|
150
150
|
};
|
|
151
151
|
exports.Feed = Feed;
|
|
152
152
|
//# sourceMappingURL=Feed.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Feed.js","sourceRoot":"../../../../src","sources":["blocks/Feed/Feed.tsx"],"names":[],"mappings":";;;;;AAAA,qDAA+B;AAE/B,mEAA0D;AAE1D,0EAAkE;AAClE,2DAAmD;AACnD,0EAAkE;AAClE,kDAA+C;AAC/C,+DAAuD;AACvD,mEAA2D;AAC3D,mDAAsD;AAEtD,mDAA0F;AAC1F,kDAAiG;AACjG,+CAAiE;AAEjE,0CAA+C;AAE/C,MAAM,YAAY,GAAG,YAAY,CAAC;AAClC,MAAM,UAAU,GAAG,MAAM,CAAC;AAC1B,MAAM,UAAU,GAAG,CAAC,CAAC;AAEd,MAAM,IAAI,GAAG,CAAC,EAAC,KAAK,EAAE,KAAK,EAAY,EAAE,EAAE;;IAC9C,MAAM,EAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,8BAA8B,EAAC,GACpF,KAAK,CAAC,UAAU,CAAC,yBAAW,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,6BAAa,CAAC,CAAC;IAC/C,MAAM,eAAe,GAAG,IAAA,+BAAY,EAAC,0BAAiB,CAAC,QAAQ,CAAC,CAAC;IACjE,MAAM,wBAAwB,GAAG,IAAA,8BAAqB,EAAC;QACnD,IAAI,EAAE,0BAAc,CAAC,QAAQ;QAC7B,OAAO,EAAE,wBAAgB,CAAC,SAAS;KACtC,CAAC,CAAC;IAEH,MAAM,CACF,EACI,SAAS,EACT,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,WAAW,GACd,EACD,QAAQ,EACX,GAAG,KAAK,CAAC,UAAU,CAAC,iBAAO,EAAE;QAC1B,SAAS,EAAE,KAAK;QAChB,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,KAAK;QACjB,iBAAiB,EAAE,IAAI;QACvB,eAAe,EAAE,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,KAAI,CAAC;QACnC,eAAe,EAAE,UAAU,IAAI,CAAC;QAChC,WAAW,EAAE,KAAK;QAClB,gBAAgB,EAAE,UAAU;QAC5B,WAAW,EAAE,CAAA,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,0CAAE,IAAI,EAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,wBAAY;QAC3E,WAAW,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE;KAClC,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO;QACvC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC;QAC7B,CAAC,CAAC,iCAAqB,CAAC;IAE5B,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE;QACjC,QAAQ,CAAC,EAAC,IAAI,EAAE,qBAAW,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC;IAC7D,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,KAAc,EAAE,EAAE;QACrC,QAAQ,CAAC,EAAC,IAAI,EAAE,qBAAW,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC;IAChE,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,KAAc,EAAE,EAAE;QACpC,QAAQ,CAAC,EAAC,IAAI,EAAE,qBAAW,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC;IAC/D,CAAC,CAAC;IAEF,MAAM,uBAAuB,GAA4B,KAAK,CAAC,WAAW,CACtE,CAAC,KAAK,EAAE,EAAE;QACN,QAAQ,CAAC,EAAC,IAAI,EAAE,qBAAW,CAAC,iBAAiB,EAAE,OAAO,EAAE,KAAK,EAAC,CAAC,CAAC;QAEhE,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAC7C,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,UAAU,CAC1E,CAAC;QAEF,MAAM,MAAM,GAAG,iBAAiB;YAC5B,CAAC,iCACQ,KAAK,KACR,CAAC,UAAU,CAAC,EAAE,IAAI,IAExB,CAAC,mBACQ,KAAK,CACX,CAAC;QAER,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC,EACD,CAAC,MAAM,CAAC,CACX,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAC/B,KAAK,EAAE,EAAC,IAAI,EAAE,KAAK,EAAY,EAAE,EAAE;QAC/B,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;YACpB,MAAM,qBAAqB,GAAG,IAAA,2BAAkB,kCACxC,WAAW,GAAK,KAAK,GACzB,IAAI,EACJ,OAAO,CACV,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,qBAAqB,CAAC,CAAC;YAEnD,OAAO,IAAI,CAAC;QAChB,CAAC;aAAM,CAAC;YACJ,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACxC,CAAC;IACL,CAAC,EACD,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CACnC,CAAC;IAEF,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAChC,KAAK,EAAE,EAAC,IAAI,EAAE,KAAK,EAAY,EAAE,EAAE;QAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,IAAI,wBAAY,CAAC,CAAC;QAEpE,uBAAuB,CAAC,KAAK,CAAC,CAAC;QAE/B,IAAI,CAAC;YACD,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,aAAa,CAAC,IAAI,CAAC,CAAC;YAEpB,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,EAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAC,CAAC,CAAC;YAE/D,IAAI,WAAW,EAAE,CAAC;gBACd,QAAQ,CAAC;oBACL,IAAI,EAAE,qBAAW,CAAC,QAAQ;oBAC1B,OAAO,EAAE;wBACL,KAAK,EAAE,WAAW,CAAC,KAAK;wBACxB,UAAU,EAAE,WAAW,CAAC,UAAU;wBAClC,KAAK,EAAE,WAAW,CAAC,KAAK;wBACxB,IAAI,EAAE,UAAU;qBACnB;iBACJ,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,YAAY,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;QAED,IAAA,2BAAkB,EAAC,YAAY,CAAC,CAAC;QAEjC,aAAa,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,EACD,CAAC,SAAS,EAAE,uBAAuB,EAAE,WAAW,CAAC,CACpD,CAAC;IAEF,MAAM,gBAAgB,GAAG,KAAK,EAAE,KAAa,EAAE,EAAE;QAC7C,UAAU,CAAC,KAAK,CAAC,CAAC;QAClB,UAAU,CAAC;YACP,IAAI,EAAE,KAAK;YACX,KAAK,kCAAM,WAAW,KAAE,IAAI,EAAE,KAAK,GAAC;SACvC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;QAC9B,eAAe,CAAC,wBAAwB,CAAC,CAAC;QAE1C,MAAM,QAAQ,GAAG,WAAW,GAAG,CAAC,CAAC;QAEjC,IAAI,CAAC;YACD,aAAa,CAAC,IAAI,CAAC,CAAC;YACpB,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC;gBAChC,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE;oBACH,IAAI,EAAE,QAAQ;iBACjB;aACJ,CAAC,CAAC;YAEH,uBAAuB,CAAC;gBACpB,IAAI,EAAE,QAAQ;aACjB,CAAC,CAAC;YAEH,IAAI,WAAW,EAAE,CAAC;gBACd,QAAQ,CAAC;oBACL,IAAI,EAAE,qBAAW,CAAC,WAAW;oBAC7B,OAAO,EAAE;wBACL,KAAK,EAAE,CAAC,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;wBACpD,KAAK,EAAE,WAAW,CAAC,KAAK;wBACxB,WAAW,EAAE,QAAQ;wBACrB,eAAe,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM;qBAC5C;iBACJ,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,QAAQ,CAAC,EAAC,IAAI,EAAE,qBAAW,CAAC,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC;QAClE,CAAC;QAED,aAAa,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,MAAM,mBAAmB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC/C,UAAU,CAAC,EAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAC,CAAC,CAAC;IACxD,CAAC,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IAE3C,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACjB,MAAM,gBAAgB,GAAG,WAAW,GAAG,cAAc,CAAC;QACtD,QAAQ,CAAC;YACL,IAAI,EAAE,qBAAW,CAAC,oBAAoB;YACtC,OAAO,EAAE,gBAAgB,GAAG,eAAe;SAC9C,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC;IAEpE,OAAO,CACH,4CACI,uBAAC,uBAAU,IACP,cAAc,EAAC,GAAG,EAClB,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,UAAU,EAC1B,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE;oBACR,SAAS,EAAE,IAAI;oBACf,GAAG,EAAE,KAAK;oBACV,eAAe,EAAE,IAAI;iBACxB,EACD,KAAK,EAAE,KAAK,GACd,EACD,SAAS,CAAC,CAAC,CAAC,CACT,uBAAC,uBAAU,IAAC,aAAa,EAAE,mBAAmB,GAAI,CACrD,CAAC,CAAC,CAAC,CACA,uBAAC,aAAK,IACF,WAAW,EAAE,YAAY,EACzB,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,iBAAiB,EACpC,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,EAC9B,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,gBAAgB,EAClC,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,8BAA8B,EAAE,8BAA8B,GAChE,CACL,IACC,CACT,CAAC;AACN,CAAC,CAAC;AA1NW,QAAA,IAAI,QA0Nf","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"]}
|
|
@@ -3,5 +3,5 @@ import { ControlsProps } from "./components/Controls/Controls.js";
|
|
|
3
3
|
type HeaderProps = Pick<HeaderBlockProps, 'background' | 'offset' | 'theme' | 'verticalOffset'>;
|
|
4
4
|
type FeedHeaderProps = HeaderProps & ControlsProps;
|
|
5
5
|
type FeedHeaderContainerProps = FeedHeaderProps & ClassNameProps;
|
|
6
|
-
export declare const FeedHeader: ({ filters, handleLoadData, offset, background, theme, verticalOffset, className, queryParams, title, }: FeedHeaderContainerProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export declare const FeedHeader: ({ filters, handleLoadData, offset, background, theme, verticalOffset, className, queryParams, title, resetTitleMargin, }: FeedHeaderContainerProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
7
|
export {};
|
|
@@ -6,13 +6,13 @@ const page_constructor_1 = require("@gravity-ui/page-constructor");
|
|
|
6
6
|
const cn_1 = require("../../utils/cn.js");
|
|
7
7
|
const Controls_1 = require("./components/Controls/Controls.js");
|
|
8
8
|
const b = (0, cn_1.block)('feed-header');
|
|
9
|
-
const FeedHeader = ({ filters, handleLoadData, offset = 'default', background, theme = 'light', verticalOffset = 'l', className, queryParams, title, }) => {
|
|
9
|
+
const FeedHeader = ({ filters, handleLoadData, offset = 'default', background, theme = 'light', verticalOffset = 'l', className, queryParams, title, resetTitleMargin, }) => {
|
|
10
10
|
const backgroundThemed = background && (0, page_constructor_1.getThemedValue)(background, theme);
|
|
11
11
|
return ((0, jsx_runtime_1.jsxs)("header", { className: b('header', { ['has-background']: Boolean(background) }, className), children: [(backgroundThemed === null || backgroundThemed === void 0 ? void 0 : backgroundThemed.color) ? ((0, jsx_runtime_1.jsx)(page_constructor_1.FullWidthBackground, { style: { backgroundColor: backgroundThemed === null || backgroundThemed === void 0 ? void 0 : backgroundThemed.color }, theme: "rounded" })) : null, (0, jsx_runtime_1.jsxs)(page_constructor_1.Grid, { className: b('content', { offset, theme, 'vertical-offset': verticalOffset }), children: [backgroundThemed ? ((0, jsx_runtime_1.jsx)(page_constructor_1.BackgroundImage, { src: backgroundThemed === null || backgroundThemed === void 0 ? void 0 : backgroundThemed.url, className: b('background'), imageClassName: b('background-img'), style: {
|
|
12
12
|
backgroundColor: backgroundThemed.fullWidth
|
|
13
13
|
? ''
|
|
14
14
|
: backgroundThemed === null || backgroundThemed === void 0 ? void 0 : backgroundThemed.color,
|
|
15
|
-
}, disableCompress: backgroundThemed === null || backgroundThemed === void 0 ? void 0 : backgroundThemed.disableCompress })) : null, (0, jsx_runtime_1.jsx)(Controls_1.Controls, { title: title, filters: filters, handleLoadData: handleLoadData, queryParams: queryParams })] })] }));
|
|
15
|
+
}, disableCompress: backgroundThemed === null || backgroundThemed === void 0 ? void 0 : backgroundThemed.disableCompress })) : null, (0, jsx_runtime_1.jsx)(Controls_1.Controls, { title: title, filters: filters, handleLoadData: handleLoadData, queryParams: queryParams, resetTitleMargin: resetTitleMargin })] })] }));
|
|
16
16
|
};
|
|
17
17
|
exports.FeedHeader = FeedHeader;
|
|
18
18
|
//# sourceMappingURL=FeedHeader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeedHeader.js","sourceRoot":"../../../../src","sources":["components/FeedHeader/FeedHeader.tsx"],"names":[],"mappings":";;;;AAAA,mEAMsC;AAGtC,0CAAqC;AAErC,gEAAuE;AAIvE,MAAM,CAAC,GAAG,IAAA,UAAK,EAAC,aAAa,CAAC,CAAC;AAQxB,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,mEAMsC;AAGtC,0CAAqC;AAErC,gEAAuE;AAIvE,MAAM,CAAC,GAAG,IAAA,UAAK,EAAC,aAAa,CAAC,CAAC;AAQxB,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,IAAA,iCAAc,EAAC,UAAU,EAAE,KAAc,CAAC,CAAC;IAElF,OAAO,CACH,oCAAQ,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,uBAAC,sCAAmB,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,wBAAC,uBAAI,IAAC,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,EAAC,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAC,CAAC,aAC5E,gBAAgB,CAAC,CAAC,CAAC,CAChB,uBAAC,kCAAe,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,uBAAC,mBAAQ,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;AA9CW,QAAA,UAAU,cA8CrB","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"]}
|
|
@@ -5,58 +5,27 @@ unpredictable css rules order in build */
|
|
|
5
5
|
display: flex;
|
|
6
6
|
flex-direction: column;
|
|
7
7
|
border-radius: var(--bc-border-radius);
|
|
8
|
-
padding-bottom:
|
|
8
|
+
padding-bottom: 32px;
|
|
9
9
|
z-index: 10;
|
|
10
10
|
}
|
|
11
|
-
.bc-feed-controls__header-
|
|
12
|
-
display: flex;
|
|
13
|
-
justify-content: center;
|
|
14
|
-
flex-wrap: wrap;
|
|
15
|
-
}
|
|
16
|
-
.bc-feed-controls__header-item_title {
|
|
11
|
+
.bc-feed-controls__header-title {
|
|
17
12
|
font-size: var(--g-text-display-4-font-size);
|
|
18
13
|
line-height: var(--g-text-display-4-line-height);
|
|
14
|
+
text-align: center;
|
|
19
15
|
padding-top: 112px;
|
|
20
16
|
padding-bottom: 96px;
|
|
21
17
|
}
|
|
22
|
-
.bc-feed-
|
|
23
|
-
|
|
24
|
-
max-width: 100%;
|
|
25
|
-
}
|
|
26
|
-
.bc-feed-controls__filter-item {
|
|
27
|
-
margin-right: 8px;
|
|
28
|
-
margin-left: 8px;
|
|
29
|
-
margin-bottom: 12px;
|
|
30
|
-
min-width: 230px;
|
|
31
|
-
flex-grow: 1;
|
|
32
|
-
}
|
|
33
|
-
@media (min-width: 577px) {
|
|
34
|
-
.bc-feed-controls__filter-item {
|
|
35
|
-
max-width: 240px;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
.bc-feed-controls__filter-item_width-auto {
|
|
39
|
-
width: auto;
|
|
40
|
-
min-width: auto;
|
|
41
|
-
flex-grow: 0;
|
|
42
|
-
}
|
|
43
|
-
.bc-feed-controls__saved-only-button_savedOnly.bc-feed-controls__saved-only-button_savedOnly {
|
|
44
|
-
--g-button-background-color: var(--pc-monochrome-button-background-color);
|
|
45
|
-
--g-button-background-color-hover: var(--pc-monochrome-button-background-color-hover);
|
|
18
|
+
.bc-feed-controls__header-title.bc-feed-controls__header-item_reset-margin {
|
|
19
|
+
margin: 0;
|
|
46
20
|
}
|
|
47
|
-
.bc-feed-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
color: var(--pc-monochrome-button-color);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
.bc-feed-controls__saved-only-button_savedOnly:focus {
|
|
55
|
-
color: var(--g-color-base-background);
|
|
56
|
-
}
|
|
57
|
-
.bc-feed-controls__icon {
|
|
58
|
-
color: var(--g-color-base-brand);
|
|
21
|
+
.bc-feed-controls__header-filters {
|
|
22
|
+
display: flex;
|
|
23
|
+
gap: 16px;
|
|
24
|
+
flex-direction: column;
|
|
59
25
|
}
|
|
60
|
-
.bc-feed-
|
|
61
|
-
|
|
26
|
+
.bc-feed-controls__header-filters-row {
|
|
27
|
+
display: flex;
|
|
28
|
+
justify-content: center;
|
|
29
|
+
flex-wrap: wrap;
|
|
30
|
+
gap: 16px;
|
|
62
31
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { FetchArgs,
|
|
1
|
+
import { FetchArgs, FiltersConfig, Query } from "../../../../models/common.js";
|
|
2
2
|
export type ControlsProps = {
|
|
3
3
|
handleLoadData: (props: FetchArgs) => void;
|
|
4
|
-
filters?:
|
|
4
|
+
filters?: FiltersConfig;
|
|
5
5
|
queryParams: Query;
|
|
6
6
|
title?: string;
|
|
7
|
+
resetTitleMargin?: boolean;
|
|
7
8
|
};
|
|
8
|
-
export declare const Controls: ({ handleLoadData, filters, queryParams, title, }: ControlsProps) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export declare const Controls: ({ handleLoadData, filters, queryParams, title, resetTitleMargin, }: ControlsProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -4,45 +4,19 @@ exports.Controls = void 0;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
6
|
const React = tslib_1.__importStar(require("react"));
|
|
7
|
-
const icons_1 = require("@gravity-ui/icons");
|
|
8
|
-
const page_constructor_1 = require("@gravity-ui/page-constructor");
|
|
9
7
|
const uikit_1 = require("@gravity-ui/uikit");
|
|
10
|
-
const LikesContext_1 = require("../../../../contexts/LikesContext.js");
|
|
11
8
|
const i18n_1 = require("../../../../i18n/index.js");
|
|
12
9
|
const common_1 = require("../../../../models/common.js");
|
|
13
10
|
const cn_1 = require("../../../../utils/cn.js");
|
|
14
|
-
const
|
|
15
|
-
const Filter_1 = require("../Filters/Filter.js");
|
|
11
|
+
const FilterControl_1 = require("../FilterControl/FilterControl.js");
|
|
16
12
|
const b = (0, cn_1.block)('feed-controls');
|
|
17
|
-
const ICON_SIZE = 16;
|
|
18
13
|
const DEFAULT_PAGE = 1;
|
|
19
|
-
const Controls = ({ handleLoadData, filters = [], queryParams, title = (0, i18n_1.i18n)(i18n_1.Keyset.Title), }) => {
|
|
20
|
-
const {
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const handleSavedOnly = () => {
|
|
26
|
-
handleAnalyticsSaveOnly();
|
|
27
|
-
setSavedOnly(!savedOnly);
|
|
28
|
-
handleLoadData({
|
|
29
|
-
page: DEFAULT_PAGE,
|
|
30
|
-
query: {
|
|
31
|
-
savedOnly: savedOnly ? '' : 'true',
|
|
32
|
-
search: '',
|
|
33
|
-
page: DEFAULT_PAGE,
|
|
34
|
-
},
|
|
35
|
-
});
|
|
36
|
-
};
|
|
37
|
-
const handleSearch = React.useCallback((searchValue) => {
|
|
38
|
-
setSearch(searchValue);
|
|
39
|
-
handleLoadData({
|
|
40
|
-
page: DEFAULT_PAGE,
|
|
41
|
-
query: { search: searchValue, page: DEFAULT_PAGE },
|
|
42
|
-
});
|
|
43
|
-
}, [handleLoadData]);
|
|
44
|
-
const handleFilterSelect = React.useCallback((query) => handleLoadData({ page: DEFAULT_PAGE, query: Object.assign({ page: DEFAULT_PAGE }, query) }), [handleLoadData]);
|
|
45
|
-
return ((0, jsx_runtime_1.jsx)(uikit_1.MobileProvider, { mobile: false, children: (0, jsx_runtime_1.jsxs)("div", { className: b('header'), children: [(0, jsx_runtime_1.jsx)("h1", { className: b('header-item', { title: true }), children: title }), (0, jsx_runtime_1.jsxs)("div", { className: b('header-item', { filters: true }), children: [(0, jsx_runtime_1.jsx)("div", { className: b('filter-item'), children: (0, jsx_runtime_1.jsx)(Search_1.Search, { className: b('search'), placeholder: (0, i18n_1.i18n)(i18n_1.Keyset.Search), initialValue: search && typeof search === 'string' ? search : '', onSubmit: handleSearch }) }), filters.map((filter) => ((0, jsx_runtime_1.jsx)(Filter_1.Filter, { filter: filter, initialValue: queryParams === null || queryParams === void 0 ? void 0 : queryParams[filter.queryParamName], onSelect: handleFilterSelect, className: b('filter-item') }, filter.queryParamName))), hasLikes ? ((0, jsx_runtime_1.jsx)("div", { className: b('filter-item', { 'width-auto': true }), children: (0, jsx_runtime_1.jsxs)(uikit_1.Button, { view: 'outlined', className: b('saved-only-button', { savedOnly }), size: "xl", onClick: handleSavedOnly, 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)] }) })) : null] })] }) }));
|
|
14
|
+
const Controls = ({ handleLoadData, filters = [], queryParams, title = (0, i18n_1.i18n)(i18n_1.Keyset.Title), resetTitleMargin, }) => {
|
|
15
|
+
const handleFilterChange = React.useCallback((query) => handleLoadData({ page: DEFAULT_PAGE, query: Object.assign({ page: DEFAULT_PAGE }, query) }), [handleLoadData]);
|
|
16
|
+
const rows = (0, common_1.normalizeFiltersToRows)(filters);
|
|
17
|
+
return ((0, jsx_runtime_1.jsx)(uikit_1.MobileProvider, { mobile: false, children: (0, jsx_runtime_1.jsxs)("div", { className: b('header'), children: [(0, jsx_runtime_1.jsx)("h1", { className: b('header-title', { 'reset-margin': resetTitleMargin }), children: title }), (0, jsx_runtime_1.jsx)("div", { className: b('header-filters'), children: rows.map((row, rowIndex) => (
|
|
18
|
+
// eslint-disable-next-line react/no-array-index-key
|
|
19
|
+
(0, jsx_runtime_1.jsx)("div", { className: b('header-filters-row'), children: row.map((filter) => ((0, jsx_runtime_1.jsx)(FilterControl_1.FilterControl, { filter: filter, initialValue: queryParams === null || queryParams === void 0 ? void 0 : queryParams[filter.queryParamName], onChange: handleFilterChange }, filter.queryParamName))) }, rowIndex))) })] }) }));
|
|
46
20
|
};
|
|
47
21
|
exports.Controls = Controls;
|
|
48
22
|
//# sourceMappingURL=Controls.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Controls.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/Controls/Controls.tsx"],"names":[],"mappings":";;;;;AAAA,qDAA+B;AAE/B,
|
|
1
|
+
{"version":3,"file":"Controls.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/Controls/Controls.tsx"],"names":[],"mappings":";;;;;AAAA,qDAA+B;AAE/B,6CAAiD;AAEjD,oDAA8C;AAC9C,yDAAkG;AAClG,gDAA2C;AAC3C,qEAA6D;AAI7D,MAAM,CAAC,GAAG,IAAA,UAAK,EAAC,eAAe,CAAC,CAAC;AAUjC,MAAM,YAAY,GAAG,CAAC,CAAC;AAEhB,MAAM,QAAQ,GAAG,CAAC,EACrB,cAAc,EACd,OAAO,GAAG,EAAE,EACZ,WAAW,EACX,KAAK,GAAG,IAAA,WAAI,EAAC,aAAM,CAAC,KAAK,CAAC,EAC1B,gBAAgB,GACJ,EAAE,EAAE;IAChB,MAAM,kBAAkB,GAAG,KAAK,CAAC,WAAW,CACxC,CAAC,KAAY,EAAE,EAAE,CACb,cAAc,CAAC,EAAC,IAAI,EAAE,YAAY,EAAE,KAAK,kBAAG,IAAI,EAAE,YAAY,IAAK,KAAK,CAAC,EAAC,CAAC,EAC/E,CAAC,cAAc,CAAC,CACnB,CAAC;IAEF,MAAM,IAAI,GAAG,IAAA,+BAAsB,EAAC,OAAO,CAAC,CAAC;IAE7C,OAAO,CACH,uBAAC,sBAAc,IAAC,MAAM,EAAE,KAAK,YACzB,iCAAK,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,aACvB,+BAAI,SAAS,EAAE,CAAC,CAAC,cAAc,EAAE,EAAC,cAAc,EAAE,gBAAgB,EAAC,CAAC,YAAG,KAAK,GAAM,EAClF,gCAAK,SAAS,EAAE,CAAC,CAAC,gBAAgB,CAAC,YAC9B,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC;oBACzB,oDAAoD;oBACpD,gCAAoB,SAAS,EAAE,CAAC,CAAC,oBAAoB,CAAC,YACjD,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACjB,uBAAC,6BAAa,IAEV,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAG,MAAM,CAAC,cAAc,CAAC,EAClD,QAAQ,EAAE,kBAAkB,IAHvB,MAAM,CAAC,cAAc,CAI5B,CACL,CAAC,IARI,QAAQ,CASZ,CACT,CAAC,GACA,IACJ,GACO,CACpB,CAAC;AACN,CAAC,CAAC;AArCW,QAAA,QAAQ,YAqCnB","sourcesContent":["import * as React from 'react';\n\nimport {MobileProvider} from '@gravity-ui/uikit';\n\nimport {Keyset, i18n} from '../../../../i18n';\nimport {FetchArgs, FiltersConfig, Query, normalizeFiltersToRows} from '../../../../models/common';\nimport {block} from '../../../../utils/cn';\nimport {FilterControl} from '../FilterControl/FilterControl';\n\nimport './Controls.scss';\n\nconst b = block('feed-controls');\n\nexport type ControlsProps = {\n handleLoadData: (props: FetchArgs) => void;\n filters?: FiltersConfig;\n queryParams: Query;\n title?: string;\n resetTitleMargin?: boolean;\n};\n\nconst DEFAULT_PAGE = 1;\n\nexport const Controls = ({\n handleLoadData,\n filters = [],\n queryParams,\n title = i18n(Keyset.Title),\n resetTitleMargin,\n}: ControlsProps) => {\n const handleFilterChange = React.useCallback(\n (query: Query) =>\n handleLoadData({page: DEFAULT_PAGE, query: {page: DEFAULT_PAGE, ...query}}),\n [handleLoadData],\n );\n\n const rows = normalizeFiltersToRows(filters);\n\n return (\n <MobileProvider mobile={false}>\n <div className={b('header')}>\n <h1 className={b('header-title', {'reset-margin': resetTitleMargin})}>{title}</h1>\n <div className={b('header-filters')}>\n {rows.map((row, rowIndex) => (\n // eslint-disable-next-line react/no-array-index-key\n <div key={rowIndex} className={b('header-filters-row')}>\n {row.map((filter) => (\n <FilterControl\n key={filter.queryParamName}\n filter={filter}\n initialValue={queryParams?.[filter.queryParamName]}\n onChange={handleFilterChange}\n />\n ))}\n </div>\n ))}\n </div>\n </div>\n </MobileProvider>\n );\n};\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/* use this for style redefinitions to awoid problems with
|
|
2
|
+
unpredictable css rules order in build */
|
|
3
|
+
.bc-filter-control {
|
|
4
|
+
flex: 230px 1 0;
|
|
5
|
+
min-width: 230px;
|
|
6
|
+
}
|
|
7
|
+
@media (min-width: 577px) {
|
|
8
|
+
.bc-filter-control {
|
|
9
|
+
max-width: 240px;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
.bc-filter-control_width-auto {
|
|
13
|
+
width: auto;
|
|
14
|
+
min-width: auto;
|
|
15
|
+
flex-grow: 0;
|
|
16
|
+
flex-basis: auto;
|
|
17
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { FilterConfig, Query } from "../../../../models/common.js";
|
|
2
|
+
export type FilterControlProps = {
|
|
3
|
+
filter: FilterConfig;
|
|
4
|
+
initialValue: string | number | null | undefined;
|
|
5
|
+
onChange: (query: Query) => void;
|
|
6
|
+
};
|
|
7
|
+
export declare const FilterControl: ({ filter, initialValue, onChange }: FilterControlProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FilterControl = 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 page_constructor_1 = require("@gravity-ui/page-constructor");
|
|
8
|
+
const LikesContext_1 = require("../../../../contexts/LikesContext.js");
|
|
9
|
+
const cn_1 = require("../../../../utils/cn.js");
|
|
10
|
+
const SavedOnlyFilter_1 = require("../SavedOnlyFilter/SavedOnlyFilter.js");
|
|
11
|
+
const SearchFilter_1 = require("../SearchFilter/SearchFilter.js");
|
|
12
|
+
const SelectFilter_1 = require("../SelectFilter/SelectFilter.js");
|
|
13
|
+
const b = (0, cn_1.block)('filter-control');
|
|
14
|
+
const FilterControl = ({ filter, initialValue, onChange }) => {
|
|
15
|
+
const handleAnalytics = (0, page_constructor_1.useAnalytics)();
|
|
16
|
+
const { hasLikes } = React.useContext(LikesContext_1.LikesContext);
|
|
17
|
+
const handleChange = React.useCallback((query) => {
|
|
18
|
+
if (filter.analyticsEvents) {
|
|
19
|
+
handleAnalytics(filter.analyticsEvents);
|
|
20
|
+
}
|
|
21
|
+
onChange(query);
|
|
22
|
+
}, [filter.analyticsEvents, handleAnalytics, onChange]);
|
|
23
|
+
if (filter.type === 'search') {
|
|
24
|
+
const { queryParamName, placeholder } = filter;
|
|
25
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: b(), children: (0, jsx_runtime_1.jsx)(SearchFilter_1.SearchFilter, { placeholder: placeholder, initialValue: initialValue, onChange: (value) => handleChange({ [queryParamName]: value }) }) }));
|
|
26
|
+
}
|
|
27
|
+
if (filter.type === 'savedOnly') {
|
|
28
|
+
const { queryParamName } = filter;
|
|
29
|
+
if (!hasLikes) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: b({ 'width-auto': true }), children: (0, jsx_runtime_1.jsx)(SavedOnlyFilter_1.SavedOnlyFilter, { initialValue: initialValue === 'true', onChange: (value) => handleChange({ [queryParamName]: value ? 'true' : '', search: '' }) }) }));
|
|
33
|
+
}
|
|
34
|
+
const { queryParamName, multiple, filterable, hasClear, placeholder, options, allLabel, qa } = filter;
|
|
35
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: b(), children: (0, jsx_runtime_1.jsx)(SelectFilter_1.SelectFilter, { multiple: multiple, filterable: filterable, hasClear: hasClear, placeholder: placeholder, options: options, allLabel: allLabel, qa: qa, initialValue: initialValue, onChange: (value) => handleChange({ [queryParamName]: value }) }) }));
|
|
36
|
+
};
|
|
37
|
+
exports.FilterControl = FilterControl;
|
|
38
|
+
//# sourceMappingURL=FilterControl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FilterControl.js","sourceRoot":"../../../../../../src","sources":["components/FeedHeader/components/FilterControl/FilterControl.tsx"],"names":[],"mappings":";;;;;AAAA,qDAA+B;AAE/B,mEAA0D;AAE1D,uEAA+D;AAQ/D,gDAA2C;AAC3C,2EAAmE;AACnE,kEAA0D;AAC1D,kEAA0D;AAI1D,MAAM,CAAC,GAAG,IAAA,UAAK,EAAC,gBAAgB,CAAC,CAAC;AAQ3B,MAAM,aAAa,GAAG,CAAC,EAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAqB,EAAE,EAAE;IAClF,MAAM,eAAe,GAAG,IAAA,+BAAY,GAAE,CAAC;IACvC,MAAM,EAAC,QAAQ,EAAC,GAAG,KAAK,CAAC,UAAU,CAAC,2BAAY,CAAC,CAAC;IAElD,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAClC,CAAC,KAAY,EAAE,EAAE;QACb,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YACzB,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC5C,CAAC;QACD,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC,EACD,CAAC,MAAM,CAAC,eAAe,EAAE,eAAe,EAAE,QAAQ,CAAC,CACtD,CAAC;IAEF,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,EAAC,cAAc,EAAE,WAAW,EAAC,GAAG,MAA4B,CAAC;QACnE,OAAO,CACH,gCAAK,SAAS,EAAE,CAAC,EAAE,YACf,uBAAC,2BAAY,IACT,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE,YAAkC,EAChD,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,EAAC,CAAC,cAAc,CAAC,EAAE,KAAK,EAAU,CAAC,GACvE,GACA,CACT,CAAC;IACN,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC9B,MAAM,EAAC,cAAc,EAAC,GAAG,MAA+B,CAAC;QAEzD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,CACH,gCAAK,SAAS,EAAE,CAAC,CAAC,EAAC,YAAY,EAAE,IAAI,EAAC,CAAC,YACnC,uBAAC,iCAAe,IACZ,YAAY,EAAE,YAAY,KAAK,MAAM,EACrC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAChB,YAAY,CAAC,EAAC,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAU,CAAC,GAEhF,GACA,CACT,CAAC;IACN,CAAC;IAED,MAAM,EAAC,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAC,GACtF,MAA4B,CAAC;IAEjC,OAAO,CACH,gCAAK,SAAS,EAAE,CAAC,EAAE,YACf,uBAAC,2BAAY,IACT,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAiC,EAC9C,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,EAAE,EAAE,EAAE,EACN,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,EAAC,CAAC,cAAc,CAAC,EAAE,KAAK,EAAU,CAAC,GACvE,GACA,CACT,CAAC;AACN,CAAC,CAAC;AAhEW,QAAA,aAAa,iBAgExB","sourcesContent":["import * as React from 'react';\n\nimport {useAnalytics} from '@gravity-ui/page-constructor';\n\nimport {LikesContext} from '../../../../contexts/LikesContext';\nimport {\n FilterConfig,\n Query,\n SavedOnlyFilterConfig,\n SearchFilterConfig,\n SelectFilterConfig,\n} from '../../../../models/common';\nimport {block} from '../../../../utils/cn';\nimport {SavedOnlyFilter} from '../SavedOnlyFilter/SavedOnlyFilter';\nimport {SearchFilter} from '../SearchFilter/SearchFilter';\nimport {SelectFilter} from '../SelectFilter/SelectFilter';\n\nimport './FilterControl.scss';\n\nconst b = block('filter-control');\n\nexport type FilterControlProps = {\n filter: FilterConfig;\n initialValue: string | number | null | undefined;\n onChange: (query: Query) => void;\n};\n\nexport const FilterControl = ({filter, initialValue, onChange}: FilterControlProps) => {\n const handleAnalytics = useAnalytics();\n const {hasLikes} = React.useContext(LikesContext);\n\n const handleChange = React.useCallback(\n (query: Query) => {\n if (filter.analyticsEvents) {\n handleAnalytics(filter.analyticsEvents);\n }\n onChange(query);\n },\n [filter.analyticsEvents, handleAnalytics, onChange],\n );\n\n if (filter.type === 'search') {\n const {queryParamName, placeholder} = filter as SearchFilterConfig;\n return (\n <div className={b()}>\n <SearchFilter\n placeholder={placeholder}\n initialValue={initialValue as string | undefined}\n onChange={(value) => handleChange({[queryParamName]: value} as Query)}\n />\n </div>\n );\n }\n\n if (filter.type === 'savedOnly') {\n const {queryParamName} = filter as SavedOnlyFilterConfig;\n\n if (!hasLikes) {\n return null;\n }\n\n return (\n <div className={b({'width-auto': true})}>\n <SavedOnlyFilter\n initialValue={initialValue === 'true'}\n onChange={(value) =>\n handleChange({[queryParamName]: value ? 'true' : '', search: ''} as Query)\n }\n />\n </div>\n );\n }\n\n const {queryParamName, multiple, filterable, hasClear, placeholder, options, allLabel, qa} =\n filter as SelectFilterConfig;\n\n return (\n <div className={b()}>\n <SelectFilter\n multiple={multiple}\n filterable={filterable}\n hasClear={hasClear}\n placeholder={placeholder as string | undefined}\n options={options}\n allLabel={allLabel}\n qa={qa}\n initialValue={initialValue}\n onChange={(value) => handleChange({[queryParamName]: value} as Query)}\n />\n </div>\n );\n};\n"]}
|
|
@@ -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,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;
|
|
@@ -1,34 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.SelectFilter = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
6
|
const React = tslib_1.__importStar(require("react"));
|
|
7
|
-
const page_constructor_1 = require("@gravity-ui/page-constructor");
|
|
8
7
|
const uikit_1 = require("@gravity-ui/uikit");
|
|
9
8
|
const MobileContext_1 = require("../../../../contexts/MobileContext.js");
|
|
10
9
|
const cn_1 = require("../../../../utils/cn.js");
|
|
11
10
|
const customRenders_1 = require("./customRenders.js");
|
|
12
11
|
const b = (0, cn_1.block)('feed-filter');
|
|
13
12
|
const VIRTUALIZATION_THRESHOLD = 1000;
|
|
14
|
-
const
|
|
13
|
+
const SelectFilter = ({ multiple, filterable, hasClear, placeholder, options, allLabel, qa, initialValue, onChange, className, }) => {
|
|
15
14
|
const isMobile = React.useContext(MobileContext_1.MobileContext);
|
|
16
|
-
const handleAnalyticsFilter = (0, page_constructor_1.useAnalytics)();
|
|
17
|
-
const { queryParamName, multiple, filterable, hasClear, options, allLabel, placeholder, qa, analyticsEvents, } = filter;
|
|
18
|
-
const handleFilterSelect = (selectedValues) => {
|
|
19
|
-
if (analyticsEvents) {
|
|
20
|
-
handleAnalyticsFilter(analyticsEvents);
|
|
21
|
-
}
|
|
22
|
-
const query = {};
|
|
23
|
-
if (multiple) {
|
|
24
|
-
query[queryParamName] = selectedValues.join(',');
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
const isEmpty = selectedValues.some((v) => v === 'empty');
|
|
28
|
-
query[queryParamName] = isEmpty ? '' : selectedValues[0];
|
|
29
|
-
}
|
|
30
|
-
onSelect(query);
|
|
31
|
-
};
|
|
32
15
|
let defaultValue;
|
|
33
16
|
if (multiple) {
|
|
34
17
|
defaultValue = initialValue ? initialValue.split(',') : [];
|
|
@@ -39,12 +22,21 @@ const Filter = ({ filter, initialValue, onSelect, className }) => {
|
|
|
39
22
|
const optionsWithEmpty = multiple
|
|
40
23
|
? options
|
|
41
24
|
: [{ value: 'empty', content: allLabel }, ...options];
|
|
42
|
-
|
|
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)({
|
|
43
35
|
initial: defaultValue,
|
|
44
36
|
list: optionsWithEmpty,
|
|
45
37
|
defaultLabel: allLabel,
|
|
46
38
|
qa,
|
|
47
39
|
}), virtualizationThreshold: VIRTUALIZATION_THRESHOLD, renderOption: customRenders_1.renderOption, renderFilter: filterable ? (0, customRenders_1.renderFilter)({ className: b('popup-filter') }) : undefined }) }));
|
|
48
40
|
};
|
|
49
|
-
exports.
|
|
50
|
-
//# sourceMappingURL=
|
|
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"]}
|