From fb0a503b9189c368c7d3ef75d8339badb2a88325 Mon Sep 17 00:00:00 2001 From: dominik-zeglen Date: Mon, 26 Oct 2020 12:20:52 +0100 Subject: [PATCH] Add load more to category and collection selection --- .../AssignCategoryDialog.tsx | 106 +++++++++++------- .../AssignCollectionDialog.tsx | 103 ++++++++++------- src/discounts/views/SaleDetails.tsx | 14 ++- src/discounts/views/VoucherDetails.tsx | 12 ++ src/styles/useScrollableDialogStyle.ts | 28 +++++ 5 files changed, 183 insertions(+), 80 deletions(-) create mode 100644 src/styles/useScrollableDialogStyle.ts diff --git a/src/components/AssignCategoryDialog/AssignCategoryDialog.tsx b/src/components/AssignCategoryDialog/AssignCategoryDialog.tsx index 7b3bc1ed5..4008e4472 100644 --- a/src/components/AssignCategoryDialog/AssignCategoryDialog.tsx +++ b/src/components/AssignCategoryDialog/AssignCategoryDialog.tsx @@ -17,7 +17,10 @@ import ResponsiveTable from "@saleor/components/ResponsiveTable"; import useSearchQuery from "@saleor/hooks/useSearchQuery"; import { buttonMessages } from "@saleor/intl"; import { SearchCategories_search_edges_node } from "@saleor/searches/types/SearchCategories"; +import useScrollableDialogStyle from "@saleor/styles/useScrollableDialogStyle"; +import { FetchMoreProps } from "@saleor/types"; import React from "react"; +import InfiniteScroll from "react-infinite-scroller"; import { FormattedMessage, useIntl } from "react-intl"; import Checkbox from "../Checkbox"; @@ -37,9 +40,6 @@ const useStyles = makeStyles( checkboxCell: { paddingLeft: 0 }, - overflow: { - overflowY: "visible" - }, wideCell: { width: "100%" } @@ -47,7 +47,7 @@ const useStyles = makeStyles( { name: "AssignCategoryDialog" } ); -interface AssignCategoriesDialogProps { +interface AssignCategoriesDialogProps extends FetchMoreProps { categories: SearchCategories_search_edges_node[]; confirmButtonState: ConfirmButtonTransitionState; open: boolean; @@ -80,25 +80,31 @@ const AssignCategoriesDialog: React.FC = props => { open, loading, categories: categories, + hasMore, onClose, onFetch, + onFetchMore, onSubmit } = props; const classes = useStyles(props); + const scrollableDialogClasses = useScrollableDialogStyle({}); const intl = useIntl(); const [query, onQueryChange] = useSearchQuery(onFetch); const [selectedCategories, setSelectedCategories] = React.useState< SearchCategories_search_edges_node[] >([]); + const container = React.useRef(); const handleSubmit = () => onSubmit(selectedCategories); + const containerHeight = container.current?.scrollHeight - 130; + return ( @@ -108,7 +114,10 @@ const AssignCategoriesDialog: React.FC = props => { description="dialog header" /> - + = props => { }} /> - - - {categories && - categories.map(category => { - const isSelected = !!selectedCategories.find( - selectedCategories => selectedCategories.id === category.id - ); +
+ + +
+ } + threshold={10} + > + + + {categories && + categories.map(category => { + const isSelected = !!selectedCategories.find( + selectedCategories => + selectedCategories.id === category.id + ); - return ( - - - - handleCategoryAssign( - category, - isSelected, - selectedCategories, - setSelectedCategories - ) - } - /> - - - {category.name} - - - ); - })} - - + return ( + + + + handleCategoryAssign( + category, + isSelected, + selectedCategories, + setSelectedCategories + ) + } + /> + + + {category.name} + + + ); + })} +
+
+ +