-
Notifications
You must be signed in to change notification settings - Fork 74
Expand file tree
/
Copy pathGalleryContent.tsx
More file actions
28 lines (26 loc) · 1.19 KB
/
GalleryContent.tsx
File metadata and controls
28 lines (26 loc) · 1.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import { useInfiniteControl } from "@mendix/widget-plugin-grid/components/InfiniteBody";
import classNames from "classnames";
import { observer } from "mobx-react-lite";
import { PropsWithChildren, ReactElement } from "react";
import { useLoaderViewModel, usePaginationConfig, usePaginationVM } from "../model/hooks/injection-hooks";
export const GalleryContent = observer(function GalleryContent({ children }: PropsWithChildren): ReactElement {
const paginationVM = usePaginationVM();
const loaderVM = useLoaderViewModel();
const isInfinite = usePaginationConfig().isVirtualScrolling;
const [trackScrolling, bodySize, containerRef] = useInfiniteControl({
hasMoreItems: paginationVM.hasMoreItems,
isInfinite,
isRefreshing: loaderVM.isRefreshing,
setPage: paginationVM.setPage.bind(paginationVM)
});
return (
<div
className={classNames("widget-gallery-content", { "infinite-loading": isInfinite })}
ref={containerRef}
onScroll={isInfinite ? trackScrolling : undefined}
style={isInfinite && bodySize > 0 ? { maxHeight: bodySize } : undefined}
>
{children}
</div>
);
});