@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.
@@ -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("div", { style: { overflow: 'visible' } },
418
- react_1.default.createElement(InfiniteScroll_1.default, { 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' } },
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 }, 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 Props {
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
- export default class InfiniteScroll extends Component<Props, State> {
37
- constructor(props: 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: Props): void;
52
- static getDerivedStateFromProps(nextProps: Props, prevState: State): {
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("div", { style: { overflow: 'visible' } },
415
- React.createElement(InfiniteScroll, { 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' } },
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 }, 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 Props {
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
- export default class InfiniteScroll extends Component<Props, State> {
37
- constructor(props: 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: Props): void;
52
- static getDerivedStateFromProps(nextProps: Props, prevState: State): {
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
- export default class InfiniteScroll extends Component {
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