@selfcommunity/react-ui 0.7.0-alpha.326 → 0.7.0-alpha.328
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/lib/cjs/components/Feed/Feed.d.ts +7 -0
- package/lib/cjs/components/Feed/Feed.js +10 -10
- package/lib/cjs/shared/InfiniteScroll/index.d.ts +6 -6
- package/lib/cjs/shared/InfiniteScroll/stories/ScrollableTargetFixedInfScroll.d.ts +1 -0
- package/lib/cjs/shared/InfiniteScroll/stories/ScrollableTargetFixedInfScroll.js +39 -0
- package/lib/cjs/shared/VirtualizedScroller/VirtualizedScroller.d.ts +2 -0
- package/lib/esm/components/Feed/Feed.d.ts +7 -0
- package/lib/esm/components/Feed/Feed.js +10 -10
- package/lib/esm/shared/InfiniteScroll/index.d.ts +6 -6
- package/lib/esm/shared/InfiniteScroll/index.js +2 -1
- package/lib/esm/shared/InfiniteScroll/stories/ScrollableTargetFixedInfScroll.d.ts +1 -0
- package/lib/esm/shared/InfiniteScroll/stories/ScrollableTargetFixedInfScroll.js +35 -0
- package/lib/esm/shared/VirtualizedScroller/VirtualizedScroller.d.ts +2 -0
- package/lib/umd/518.js +1 -1
- package/lib/umd/react-ui.js +1 -1
- package/package.json +14 -14
|
@@ -130,6 +130,13 @@ export interface FeedProps {
|
|
|
130
130
|
* Use this to init the component (in particular useSCFetchFeed)
|
|
131
131
|
*/
|
|
132
132
|
prefetchedData?: SCPaginatedResponse<SCFeedUnitType>;
|
|
133
|
+
/**
|
|
134
|
+
* If the feed is being rendered in a "scrollable container"
|
|
135
|
+
* (for example, if one of the parent elements of the list is
|
|
136
|
+
* styled with max-height and overflow: auto),
|
|
137
|
+
* then passing the "scrollableTargetId"
|
|
138
|
+
*/
|
|
139
|
+
scrollableTargetId?: string;
|
|
133
140
|
/**
|
|
134
141
|
* Props to spread to VirtualizedScroller object.
|
|
135
142
|
* @default {}
|
|
@@ -78,7 +78,7 @@ const Feed = (inProps, ref) => {
|
|
|
78
78
|
props: inProps,
|
|
79
79
|
name: PREFIX
|
|
80
80
|
});
|
|
81
|
-
const { id = 'feed', className, endpoint, endpointQueryParams = { limit: Pagination_1.DEFAULT_PAGINATION_LIMIT, offset: Pagination_1.DEFAULT_PAGINATION_OFFSET }, endMessage = react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.feed.noOtherFeedObject", defaultMessage: "ui.feed.noOtherFeedObject" }), refreshMessage = react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.feed.refreshRelease", defaultMessage: "ui.feed.refreshRelease" }), HeaderComponent, FooterComponent = Footer_1.default, FooterComponentProps = {}, widgets = [], ItemComponent, itemPropsGenerator, itemIdGenerator, ItemProps = {}, ItemSkeleton, ItemSkeletonProps = {}, onNextData, onPreviousData, FeedSidebarProps = {}, CustomAdvProps = {}, enabledCustomAdvPositions = [types_1.SCCustomAdvPosition.POSITION_FEED_SIDEBAR, types_1.SCCustomAdvPosition.POSITION_FEED], requireAuthentication = false, cacheStrategy = utils_1.CacheStrategies.NETWORK_ONLY, prefetchedData, VirtualizedScrollerProps = {}, disablePaginationLinks = false, hidePaginationLinks = true, paginationLinksPageQueryParam = Pagination_1.DEFAULT_PAGINATION_QUERY_PARAM_NAME, PaginationLinkProps = {}, hideAdvs = false } = props;
|
|
81
|
+
const { id = 'feed', className, endpoint, endpointQueryParams = { limit: Pagination_1.DEFAULT_PAGINATION_LIMIT, offset: Pagination_1.DEFAULT_PAGINATION_OFFSET }, endMessage = react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.feed.noOtherFeedObject", defaultMessage: "ui.feed.noOtherFeedObject" }), refreshMessage = react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.feed.refreshRelease", defaultMessage: "ui.feed.refreshRelease" }), HeaderComponent, FooterComponent = Footer_1.default, FooterComponentProps = {}, widgets = [], ItemComponent, itemPropsGenerator, itemIdGenerator, ItemProps = {}, ItemSkeleton, ItemSkeletonProps = {}, onNextData, onPreviousData, FeedSidebarProps = {}, CustomAdvProps = {}, enabledCustomAdvPositions = [types_1.SCCustomAdvPosition.POSITION_FEED_SIDEBAR, types_1.SCCustomAdvPosition.POSITION_FEED], requireAuthentication = false, cacheStrategy = utils_1.CacheStrategies.NETWORK_ONLY, prefetchedData, scrollableTargetId, VirtualizedScrollerProps = {}, disablePaginationLinks = false, hidePaginationLinks = true, paginationLinksPageQueryParam = Pagination_1.DEFAULT_PAGINATION_QUERY_PARAM_NAME, PaginationLinkProps = {}, hideAdvs = false } = props;
|
|
82
82
|
// CONTEXT
|
|
83
83
|
const scPreferences = (0, react_1.useContext)(react_core_1.SCPreferencesContext);
|
|
84
84
|
const scUserContext = (0, react_1.useContext)(react_core_1.SCUserContext);
|
|
@@ -94,6 +94,7 @@ const Feed = (inProps, ref) => {
|
|
|
94
94
|
}, [endpointQueryParams, prefetchedData]);
|
|
95
95
|
// REF
|
|
96
96
|
const isMountRef = (0, react_core_1.useIsComponentMountedRef)();
|
|
97
|
+
const containerRef = (0, react_1.useRef)(null);
|
|
97
98
|
/**
|
|
98
99
|
* Compute preferences
|
|
99
100
|
*/
|
|
@@ -414,15 +415,14 @@ const Feed = (inProps, ref) => {
|
|
|
414
415
|
advEnabled && !hideAdvs && enabledCustomAdvPositions.includes(types_1.SCCustomAdvPosition.POSITION_BELOW_TOPBAR) ? (react_1.default.createElement(material_1.Grid, { item: true, xs: 12 },
|
|
415
416
|
react_1.default.createElement(CustomAdv_1.default, Object.assign({ position: types_1.SCCustomAdvPosition.POSITION_BELOW_TOPBAR }, CustomAdvProps)))) : null,
|
|
416
417
|
react_1.default.createElement(material_1.Grid, { item: true, xs: 12, md: 7 },
|
|
417
|
-
react_1.default.createElement(
|
|
418
|
-
|
|
419
|
-
react_1.default.createElement(
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
react_1.default.createElement(VirtualizedScroller_1.default, Object.assign({ className: classes.leftItems, items: feedDataLeft, itemComponent: InnerItem, onMount: onScrollerMount, onScrollerStateChange: onScrollerStateChange, getItemId: getScrollItemId, preserveScrollPosition: true, preserveScrollPositionOnPrependItems: true, cacheScrollStateKey: react_core_1.SCCache.getVirtualizedScrollStateCacheKey(id), cacheScrollerPositionKey: react_core_1.SCCache.getFeedSPCacheKey(id), cacheStrategy: cacheStrategy }, VirtualizedScrollerProps))))),
|
|
418
|
+
react_1.default.createElement(InfiniteScroll_1.default, Object.assign({ ref: containerRef, className: classes.left, dataLength: feedDataLeft.length, next: getNextPage, previous: getPreviousPage, hasMoreNext: Boolean(feedDataObject.next), hasMorePrevious: Boolean(feedDataObject.previous), header: PreviousPageLink, footer: NextPageLink, loaderNext: react_1.default.createElement(ItemSkeleton, Object.assign({}, ItemSkeletonProps)), loaderPrevious: react_1.default.createElement(ItemSkeleton, Object.assign({}, ItemSkeletonProps)), scrollThreshold: '90%', endMessage: react_1.default.createElement(material_1.Box, { className: classes.end },
|
|
419
|
+
react_1.default.createElement(Widget_1.default, { className: classes.endMessage },
|
|
420
|
+
react_1.default.createElement(material_1.CardContent, null, endMessage)),
|
|
421
|
+
advEnabled && !hideAdvs && enabledCustomAdvPositions.includes(types_1.SCCustomAdvPosition.POSITION_ABOVE_FOOTER_BAR) ? (react_1.default.createElement(CustomAdv_1.default, Object.assign({ position: types_1.SCCustomAdvPosition.POSITION_ABOVE_FOOTER_BAR }, CustomAdvProps))) : null,
|
|
422
|
+
FooterComponent ? react_1.default.createElement(FooterComponent, Object.assign({}, FooterComponentProps)) : null), refreshFunction: refresh, pullDownToRefresh: true, pullDownToRefreshThreshold: 1000, pullDownToRefreshContent: null, releaseToRefreshContent: react_1.default.createElement(Widget_1.default, { variant: "outlined", className: classes.refresh },
|
|
423
|
+
react_1.default.createElement(material_1.CardContent, null, refreshMessage)), style: { overflow: 'visible' } }, (scrollableTargetId && { scrollableTarget: scrollableTargetId })),
|
|
424
|
+
renderHeaderComponent(),
|
|
425
|
+
react_1.default.createElement(VirtualizedScroller_1.default, Object.assign({ className: classes.leftItems, items: feedDataLeft, itemComponent: InnerItem, onMount: onScrollerMount, onScrollerStateChange: onScrollerStateChange, getItemId: getScrollItemId, preserveScrollPosition: true, preserveScrollPositionOnPrependItems: true, cacheScrollStateKey: react_core_1.SCCache.getVirtualizedScrollStateCacheKey(id), cacheScrollerPositionKey: react_core_1.SCCache.getFeedSPCacheKey(id), cacheStrategy: cacheStrategy }, (scrollableTargetId && { getScrollableContainer: () => document.getElementById(scrollableTargetId) }), VirtualizedScrollerProps)))),
|
|
426
426
|
feedDataRight.length > 0 && !hideAdvs && (react_1.default.createElement(material_1.Hidden, { smDown: true },
|
|
427
427
|
react_1.default.createElement(material_1.Grid, { item: true, xs: 12, md: 5 },
|
|
428
428
|
react_1.default.createElement(StickyBox_1.default, Object.assign({ className: classes.right }, FeedSidebarProps),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Component, ReactNode, CSSProperties } from 'react';
|
|
2
2
|
declare type Fn = () => any;
|
|
3
|
-
export interface
|
|
3
|
+
export interface InfiniteScrollProps {
|
|
4
4
|
next?: Fn;
|
|
5
5
|
hasMoreNext?: boolean;
|
|
6
6
|
previous?: Fn;
|
|
@@ -33,8 +33,8 @@ interface State {
|
|
|
33
33
|
pullToRefreshThresholdBreached: boolean;
|
|
34
34
|
prevDataLength: number | undefined;
|
|
35
35
|
}
|
|
36
|
-
|
|
37
|
-
constructor(props:
|
|
36
|
+
declare class InfiniteScroll extends Component<InfiniteScrollProps, State> {
|
|
37
|
+
constructor(props: InfiniteScrollProps);
|
|
38
38
|
private throttledOnScrollListener;
|
|
39
39
|
private _scrollableNode;
|
|
40
40
|
private el;
|
|
@@ -48,8 +48,8 @@ export default class InfiniteScroll extends Component<Props, State> {
|
|
|
48
48
|
private maxPullDownDistance;
|
|
49
49
|
componentDidMount(): void;
|
|
50
50
|
componentWillUnmount(): void;
|
|
51
|
-
componentDidUpdate(prevProps:
|
|
52
|
-
static getDerivedStateFromProps(nextProps:
|
|
51
|
+
componentDidUpdate(prevProps: InfiniteScrollProps): void;
|
|
52
|
+
static getDerivedStateFromProps(nextProps: InfiniteScrollProps, prevState: State): {
|
|
53
53
|
prevDataLength: number;
|
|
54
54
|
showLoaderNext: boolean;
|
|
55
55
|
showLoaderPrevious: boolean;
|
|
@@ -64,4 +64,4 @@ export default class InfiniteScroll extends Component<Props, State> {
|
|
|
64
64
|
onScrollListener: (event: MouseEvent) => void;
|
|
65
65
|
render(): JSX.Element;
|
|
66
66
|
}
|
|
67
|
-
export
|
|
67
|
+
export default InfiniteScroll;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function ScrollableTargetFixedInfScroll(): JSX.Element;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
5
|
+
const index_1 = tslib_1.__importDefault(require("../index"));
|
|
6
|
+
const style = {
|
|
7
|
+
height: 30,
|
|
8
|
+
border: '1px solid green',
|
|
9
|
+
margin: 6,
|
|
10
|
+
padding: 8
|
|
11
|
+
};
|
|
12
|
+
function ScrollableTargetFixedInfScroll() {
|
|
13
|
+
const [items, setItems] = (0, react_1.useState)(Array.from({ length: 20 }));
|
|
14
|
+
const fetchMoreData = () => {
|
|
15
|
+
// a fake async api call like which sends
|
|
16
|
+
// 20 more records in 1.5 secs
|
|
17
|
+
setTimeout(() => {
|
|
18
|
+
setItems(items.concat(Array.from({ length: 20 })));
|
|
19
|
+
}, 1500);
|
|
20
|
+
};
|
|
21
|
+
return (react_1.default.createElement("div", null,
|
|
22
|
+
react_1.default.createElement("h1", null, "demo: Infinite Scroll with scrollable target FIXED"),
|
|
23
|
+
react_1.default.createElement("hr", null),
|
|
24
|
+
react_1.default.createElement("div", { id: "scrollableDiv", style: {
|
|
25
|
+
position: 'fixed',
|
|
26
|
+
bottom: 0,
|
|
27
|
+
left: 0,
|
|
28
|
+
right: 0,
|
|
29
|
+
top: 170,
|
|
30
|
+
zIndex: 1000,
|
|
31
|
+
maxWidth: '100% !important',
|
|
32
|
+
height: '50vh',
|
|
33
|
+
overflowY: 'scroll'
|
|
34
|
+
} },
|
|
35
|
+
react_1.default.createElement(index_1.default, { dataLength: items.length, hasMoreNext: true, next: fetchMoreData, loaderNext: react_1.default.createElement("h4", null, "Loading..."), scrollableTarget: "scrollableDiv" }, items.map((_, index) => (react_1.default.createElement("div", { style: style, key: index },
|
|
36
|
+
"div - #",
|
|
37
|
+
index)))))));
|
|
38
|
+
}
|
|
39
|
+
exports.default = ScrollableTargetFixedInfScroll;
|
|
@@ -5,6 +5,8 @@ import { VirtualScrollerCommonOptions } from 'virtual-scroller';
|
|
|
5
5
|
* VirtualizedScrollerCommonProps Interface
|
|
6
6
|
*/
|
|
7
7
|
export interface VirtualizedScrollerCommonProps extends VirtualScrollerCommonOptions<HTMLElement, any>, React.HTMLAttributes<HTMLElement> {
|
|
8
|
+
scrollableContainer?: any;
|
|
9
|
+
getScrollableContainer?: () => Element;
|
|
8
10
|
}
|
|
9
11
|
/**
|
|
10
12
|
* VirtualizedScrollerProps Interface
|
|
@@ -130,6 +130,13 @@ export interface FeedProps {
|
|
|
130
130
|
* Use this to init the component (in particular useSCFetchFeed)
|
|
131
131
|
*/
|
|
132
132
|
prefetchedData?: SCPaginatedResponse<SCFeedUnitType>;
|
|
133
|
+
/**
|
|
134
|
+
* If the feed is being rendered in a "scrollable container"
|
|
135
|
+
* (for example, if one of the parent elements of the list is
|
|
136
|
+
* styled with max-height and overflow: auto),
|
|
137
|
+
* then passing the "scrollableTargetId"
|
|
138
|
+
*/
|
|
139
|
+
scrollableTargetId?: string;
|
|
133
140
|
/**
|
|
134
141
|
* Props to spread to VirtualizedScroller object.
|
|
135
142
|
* @default {}
|
|
@@ -75,7 +75,7 @@ const Feed = (inProps, ref) => {
|
|
|
75
75
|
props: inProps,
|
|
76
76
|
name: PREFIX
|
|
77
77
|
});
|
|
78
|
-
const { id = 'feed', className, endpoint, endpointQueryParams = { limit: DEFAULT_PAGINATION_LIMIT, offset: DEFAULT_PAGINATION_OFFSET }, endMessage = React.createElement(FormattedMessage, { id: "ui.feed.noOtherFeedObject", defaultMessage: "ui.feed.noOtherFeedObject" }), refreshMessage = React.createElement(FormattedMessage, { id: "ui.feed.refreshRelease", defaultMessage: "ui.feed.refreshRelease" }), HeaderComponent, FooterComponent = Footer, FooterComponentProps = {}, widgets = [], ItemComponent, itemPropsGenerator, itemIdGenerator, ItemProps = {}, ItemSkeleton, ItemSkeletonProps = {}, onNextData, onPreviousData, FeedSidebarProps = {}, CustomAdvProps = {}, enabledCustomAdvPositions = [SCCustomAdvPosition.POSITION_FEED_SIDEBAR, SCCustomAdvPosition.POSITION_FEED], requireAuthentication = false, cacheStrategy = CacheStrategies.NETWORK_ONLY, prefetchedData, VirtualizedScrollerProps = {}, disablePaginationLinks = false, hidePaginationLinks = true, paginationLinksPageQueryParam = DEFAULT_PAGINATION_QUERY_PARAM_NAME, PaginationLinkProps = {}, hideAdvs = false } = props;
|
|
78
|
+
const { id = 'feed', className, endpoint, endpointQueryParams = { limit: DEFAULT_PAGINATION_LIMIT, offset: DEFAULT_PAGINATION_OFFSET }, endMessage = React.createElement(FormattedMessage, { id: "ui.feed.noOtherFeedObject", defaultMessage: "ui.feed.noOtherFeedObject" }), refreshMessage = React.createElement(FormattedMessage, { id: "ui.feed.refreshRelease", defaultMessage: "ui.feed.refreshRelease" }), HeaderComponent, FooterComponent = Footer, FooterComponentProps = {}, widgets = [], ItemComponent, itemPropsGenerator, itemIdGenerator, ItemProps = {}, ItemSkeleton, ItemSkeletonProps = {}, onNextData, onPreviousData, FeedSidebarProps = {}, CustomAdvProps = {}, enabledCustomAdvPositions = [SCCustomAdvPosition.POSITION_FEED_SIDEBAR, SCCustomAdvPosition.POSITION_FEED], requireAuthentication = false, cacheStrategy = CacheStrategies.NETWORK_ONLY, prefetchedData, scrollableTargetId, VirtualizedScrollerProps = {}, disablePaginationLinks = false, hidePaginationLinks = true, paginationLinksPageQueryParam = DEFAULT_PAGINATION_QUERY_PARAM_NAME, PaginationLinkProps = {}, hideAdvs = false } = props;
|
|
79
79
|
// CONTEXT
|
|
80
80
|
const scPreferences = useContext(SCPreferencesContext);
|
|
81
81
|
const scUserContext = useContext(SCUserContext);
|
|
@@ -91,6 +91,7 @@ const Feed = (inProps, ref) => {
|
|
|
91
91
|
}, [endpointQueryParams, prefetchedData]);
|
|
92
92
|
// REF
|
|
93
93
|
const isMountRef = useIsComponentMountedRef();
|
|
94
|
+
const containerRef = useRef(null);
|
|
94
95
|
/**
|
|
95
96
|
* Compute preferences
|
|
96
97
|
*/
|
|
@@ -411,15 +412,14 @@ const Feed = (inProps, ref) => {
|
|
|
411
412
|
advEnabled && !hideAdvs && enabledCustomAdvPositions.includes(SCCustomAdvPosition.POSITION_BELOW_TOPBAR) ? (React.createElement(Grid, { item: true, xs: 12 },
|
|
412
413
|
React.createElement(CustomAdv, Object.assign({ position: SCCustomAdvPosition.POSITION_BELOW_TOPBAR }, CustomAdvProps)))) : null,
|
|
413
414
|
React.createElement(Grid, { item: true, xs: 12, md: 7 },
|
|
414
|
-
React.createElement(
|
|
415
|
-
|
|
416
|
-
React.createElement(
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
React.createElement(VirtualizedScroller, Object.assign({ className: classes.leftItems, items: feedDataLeft, itemComponent: InnerItem, onMount: onScrollerMount, onScrollerStateChange: onScrollerStateChange, getItemId: getScrollItemId, preserveScrollPosition: true, preserveScrollPositionOnPrependItems: true, cacheScrollStateKey: SCCache.getVirtualizedScrollStateCacheKey(id), cacheScrollerPositionKey: SCCache.getFeedSPCacheKey(id), cacheStrategy: cacheStrategy }, VirtualizedScrollerProps))))),
|
|
415
|
+
React.createElement(InfiniteScroll, Object.assign({ ref: containerRef, className: classes.left, dataLength: feedDataLeft.length, next: getNextPage, previous: getPreviousPage, hasMoreNext: Boolean(feedDataObject.next), hasMorePrevious: Boolean(feedDataObject.previous), header: PreviousPageLink, footer: NextPageLink, loaderNext: React.createElement(ItemSkeleton, Object.assign({}, ItemSkeletonProps)), loaderPrevious: React.createElement(ItemSkeleton, Object.assign({}, ItemSkeletonProps)), scrollThreshold: '90%', endMessage: React.createElement(Box, { className: classes.end },
|
|
416
|
+
React.createElement(Widget, { className: classes.endMessage },
|
|
417
|
+
React.createElement(CardContent, null, endMessage)),
|
|
418
|
+
advEnabled && !hideAdvs && enabledCustomAdvPositions.includes(SCCustomAdvPosition.POSITION_ABOVE_FOOTER_BAR) ? (React.createElement(CustomAdv, Object.assign({ position: SCCustomAdvPosition.POSITION_ABOVE_FOOTER_BAR }, CustomAdvProps))) : null,
|
|
419
|
+
FooterComponent ? React.createElement(FooterComponent, Object.assign({}, FooterComponentProps)) : null), refreshFunction: refresh, pullDownToRefresh: true, pullDownToRefreshThreshold: 1000, pullDownToRefreshContent: null, releaseToRefreshContent: React.createElement(Widget, { variant: "outlined", className: classes.refresh },
|
|
420
|
+
React.createElement(CardContent, null, refreshMessage)), style: { overflow: 'visible' } }, (scrollableTargetId && { scrollableTarget: scrollableTargetId })),
|
|
421
|
+
renderHeaderComponent(),
|
|
422
|
+
React.createElement(VirtualizedScroller, Object.assign({ className: classes.leftItems, items: feedDataLeft, itemComponent: InnerItem, onMount: onScrollerMount, onScrollerStateChange: onScrollerStateChange, getItemId: getScrollItemId, preserveScrollPosition: true, preserveScrollPositionOnPrependItems: true, cacheScrollStateKey: SCCache.getVirtualizedScrollStateCacheKey(id), cacheScrollerPositionKey: SCCache.getFeedSPCacheKey(id), cacheStrategy: cacheStrategy }, (scrollableTargetId && { getScrollableContainer: () => document.getElementById(scrollableTargetId) }), VirtualizedScrollerProps)))),
|
|
423
423
|
feedDataRight.length > 0 && !hideAdvs && (React.createElement(Hidden, { smDown: true },
|
|
424
424
|
React.createElement(Grid, { item: true, xs: 12, md: 5 },
|
|
425
425
|
React.createElement(StickyBoxComp, Object.assign({ className: classes.right }, FeedSidebarProps),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Component, ReactNode, CSSProperties } from 'react';
|
|
2
2
|
declare type Fn = () => any;
|
|
3
|
-
export interface
|
|
3
|
+
export interface InfiniteScrollProps {
|
|
4
4
|
next?: Fn;
|
|
5
5
|
hasMoreNext?: boolean;
|
|
6
6
|
previous?: Fn;
|
|
@@ -33,8 +33,8 @@ interface State {
|
|
|
33
33
|
pullToRefreshThresholdBreached: boolean;
|
|
34
34
|
prevDataLength: number | undefined;
|
|
35
35
|
}
|
|
36
|
-
|
|
37
|
-
constructor(props:
|
|
36
|
+
declare class InfiniteScroll extends Component<InfiniteScrollProps, State> {
|
|
37
|
+
constructor(props: InfiniteScrollProps);
|
|
38
38
|
private throttledOnScrollListener;
|
|
39
39
|
private _scrollableNode;
|
|
40
40
|
private el;
|
|
@@ -48,8 +48,8 @@ export default class InfiniteScroll extends Component<Props, State> {
|
|
|
48
48
|
private maxPullDownDistance;
|
|
49
49
|
componentDidMount(): void;
|
|
50
50
|
componentWillUnmount(): void;
|
|
51
|
-
componentDidUpdate(prevProps:
|
|
52
|
-
static getDerivedStateFromProps(nextProps:
|
|
51
|
+
componentDidUpdate(prevProps: InfiniteScrollProps): void;
|
|
52
|
+
static getDerivedStateFromProps(nextProps: InfiniteScrollProps, prevState: State): {
|
|
53
53
|
prevDataLength: number;
|
|
54
54
|
showLoaderNext: boolean;
|
|
55
55
|
showLoaderPrevious: boolean;
|
|
@@ -64,4 +64,4 @@ export default class InfiniteScroll extends Component<Props, State> {
|
|
|
64
64
|
onScrollListener: (event: MouseEvent) => void;
|
|
65
65
|
render(): JSX.Element;
|
|
66
66
|
}
|
|
67
|
-
export
|
|
67
|
+
export default InfiniteScroll;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { Component } from 'react';
|
|
2
2
|
import { throttle } from 'throttle-debounce';
|
|
3
3
|
import { ThresholdUnits, parseThreshold } from '../../utils/threshold';
|
|
4
|
-
|
|
4
|
+
class InfiniteScroll extends Component {
|
|
5
5
|
constructor(props) {
|
|
6
6
|
super(props);
|
|
7
7
|
this.lastScrollTop = 0;
|
|
@@ -241,3 +241,4 @@ export default class InfiniteScroll extends Component {
|
|
|
241
241
|
this.props.footer)));
|
|
242
242
|
}
|
|
243
243
|
}
|
|
244
|
+
export default InfiniteScroll;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function ScrollableTargetFixedInfScroll(): JSX.Element;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import InfiniteScroll from '../index';
|
|
3
|
+
const style = {
|
|
4
|
+
height: 30,
|
|
5
|
+
border: '1px solid green',
|
|
6
|
+
margin: 6,
|
|
7
|
+
padding: 8
|
|
8
|
+
};
|
|
9
|
+
export default function ScrollableTargetFixedInfScroll() {
|
|
10
|
+
const [items, setItems] = useState(Array.from({ length: 20 }));
|
|
11
|
+
const fetchMoreData = () => {
|
|
12
|
+
// a fake async api call like which sends
|
|
13
|
+
// 20 more records in 1.5 secs
|
|
14
|
+
setTimeout(() => {
|
|
15
|
+
setItems(items.concat(Array.from({ length: 20 })));
|
|
16
|
+
}, 1500);
|
|
17
|
+
};
|
|
18
|
+
return (React.createElement("div", null,
|
|
19
|
+
React.createElement("h1", null, "demo: Infinite Scroll with scrollable target FIXED"),
|
|
20
|
+
React.createElement("hr", null),
|
|
21
|
+
React.createElement("div", { id: "scrollableDiv", style: {
|
|
22
|
+
position: 'fixed',
|
|
23
|
+
bottom: 0,
|
|
24
|
+
left: 0,
|
|
25
|
+
right: 0,
|
|
26
|
+
top: 170,
|
|
27
|
+
zIndex: 1000,
|
|
28
|
+
maxWidth: '100% !important',
|
|
29
|
+
height: '50vh',
|
|
30
|
+
overflowY: 'scroll'
|
|
31
|
+
} },
|
|
32
|
+
React.createElement(InfiniteScroll, { dataLength: items.length, hasMoreNext: true, next: fetchMoreData, loaderNext: React.createElement("h4", null, "Loading..."), scrollableTarget: "scrollableDiv" }, items.map((_, index) => (React.createElement("div", { style: style, key: index },
|
|
33
|
+
"div - #",
|
|
34
|
+
index)))))));
|
|
35
|
+
}
|
|
@@ -5,6 +5,8 @@ import { VirtualScrollerCommonOptions } from 'virtual-scroller';
|
|
|
5
5
|
* VirtualizedScrollerCommonProps Interface
|
|
6
6
|
*/
|
|
7
7
|
export interface VirtualizedScrollerCommonProps extends VirtualScrollerCommonOptions<HTMLElement, any>, React.HTMLAttributes<HTMLElement> {
|
|
8
|
+
scrollableContainer?: any;
|
|
9
|
+
getScrollableContainer?: () => Element;
|
|
8
10
|
}
|
|
9
11
|
/**
|
|
10
12
|
* VirtualizedScrollerProps Interface
|