From 909e08f2afc1776b5b39378d88f9c79cc7c29299 Mon Sep 17 00:00:00 2001 From: Dawid Tarasiuk Date: Thu, 1 Jul 2021 10:21:41 +0200 Subject: [PATCH] Fix duplicated labels in column picker (#1197) * Fix duplicated labels in column picker * Update changelog * Refactor column picker scroll fetch * Migrate react-infinite-scroller to react-infinite-scroll-component * Remove unneeded keys * Align dialog items to top --- CHANGELOG.md | 1 + package-lock.json | 13 +- package.json | 2 +- .../AssignAttributeDialog.tsx | 19 ++- .../AssignContainerDialog.tsx | 112 ++++++++-------- .../AssignProductDialog.tsx | 124 +++++++++--------- src/components/ColumnPicker/ColumnPicker.tsx | 2 - .../ColumnPicker/ColumnPickerContent.tsx | 62 ++++----- .../OrderProductAddDialog.tsx | 14 +- .../AssignMembersDialog.tsx | 44 ++++--- .../ProductListPage/ProductListPage.tsx | 9 +- src/products/queries.ts | 18 ++- .../types/AvailableInGridAttributes.ts | 43 ++++++ src/products/types/GridAttributes.ts | 29 ---- .../views/ProductList/ProductList.tsx | 25 ++-- .../ShippingMethodProductsAddDialog.tsx | 14 +- .../stories/components/ColumnPicker.tsx | 7 +- src/styles/useScrollableDialogStyle.ts | 10 +- 18 files changed, 280 insertions(+), 268 deletions(-) create mode 100644 src/products/types/AvailableInGridAttributes.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index e3f20e18b..71ee9ce99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -57,6 +57,7 @@ All notable, unreleased changes to this project will be documented in this file. - Fix breaking select popups in filters - #1193 by @orzechdev - Create channel filters in product, sales and voucher lists - #1187 by @jwm0 - Add generic filter validation - #1187 by @jwm0 +- Fix duplicated labels in column picker - #1197 by @orzechdev # 2.11.1 diff --git a/package-lock.json b/package-lock.json index 11c2c973e..faec34c16 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22656,12 +22656,12 @@ "prop-types": "^15.6.1" } }, - "react-infinite-scroller": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/react-infinite-scroller/-/react-infinite-scroller-1.2.4.tgz", - "integrity": "sha512-/oOa0QhZjXPqaD6sictN2edFMsd3kkMiE19Vcz5JDgHpzEJVqYcmq+V3mkwO88087kvKGe1URNksHEOt839Ubw==", + "react-infinite-scroll-component": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-infinite-scroll-component/-/react-infinite-scroll-component-6.1.0.tgz", + "integrity": "sha512-SQu5nCqy8DxQWpnUVLx7V7b7LcA37aM7tvoWjTLZp1dk6EJibM5/4EJKzOnl07/BsM1Y40sKLuqjCwwH/xV0TQ==", "requires": { - "prop-types": "^15.5.8" + "throttle-debounce": "^2.1.0" } }, "react-inlinesvg": { @@ -26702,8 +26702,7 @@ "throttle-debounce": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.3.0.tgz", - "integrity": "sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ==", - "dev": true + "integrity": "sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ==" }, "throttleit": { "version": "1.0.0", diff --git a/package.json b/package.json index 297fc3dd9..f7d53abec 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,7 @@ "react-error-boundary": "^1.2.5", "react-gtm-module": "^2.0.11", "react-helmet": "^6.1.0", - "react-infinite-scroller": "^1.2.4", + "react-infinite-scroll-component": "^6.1.0", "react-inlinesvg": "^2.1.1", "react-intl": "^5.10.2", "react-jss": "^10.0.0", diff --git a/src/components/AssignAttributeDialog/AssignAttributeDialog.tsx b/src/components/AssignAttributeDialog/AssignAttributeDialog.tsx index be592339b..ecfd0e662 100644 --- a/src/components/AssignAttributeDialog/AssignAttributeDialog.tsx +++ b/src/components/AssignAttributeDialog/AssignAttributeDialog.tsx @@ -30,7 +30,7 @@ import { makeStyles } from "@saleor/theme"; import { FetchMoreProps } from "@saleor/types"; import classNames from "classnames"; import React from "react"; -import InfiniteScroll from "react-infinite-scroller"; +import InfiniteScroll from "react-infinite-scroll-component"; import { FormattedMessage, useIntl } from "react-intl"; const useStyles = makeStyles( @@ -73,6 +73,8 @@ export interface AssignAttributeDialogProps extends FetchMoreProps { onToggle: (id: string) => void; } +const scrollableTargetId = "assignAttributeScrollableDialog"; + const AssignAttributeDialog: React.FC = ({ attributes, confirmButtonState, @@ -126,19 +128,22 @@ const AssignAttributeDialog: React.FC = ({ }} /> - + } - threshold={100} - key="infinite-scroll" + scrollableTarget={scrollableTargetId} > diff --git a/src/components/AssignContainerDialog/AssignContainerDialog.tsx b/src/components/AssignContainerDialog/AssignContainerDialog.tsx index bb8646635..b0a94b451 100644 --- a/src/components/AssignContainerDialog/AssignContainerDialog.tsx +++ b/src/components/AssignContainerDialog/AssignContainerDialog.tsx @@ -17,14 +17,13 @@ import useScrollableDialogStyle from "@saleor/styles/useScrollableDialogStyle"; import { makeStyles } from "@saleor/theme"; import { FetchMoreProps, Node } from "@saleor/types"; import React from "react"; -import InfiniteScroll from "react-infinite-scroller"; +import InfiniteScroll from "react-infinite-scroll-component"; import { FormattedMessage } from "react-intl"; import Checkbox from "../Checkbox"; import ConfirmButton, { ConfirmButtonTransitionState } from "../ConfirmButton/ConfirmButton"; -import FormSpacer from "../FormSpacer"; export interface FormData { containers: string[]; @@ -80,6 +79,8 @@ function handleContainerAssign( } } +const scrollableTargetId = "assignContainerScrollableDialog"; + const AssignContainerDialog: React.FC = props => { const { confirmButtonState, @@ -101,12 +102,9 @@ const AssignContainerDialog: React.FC = props => { const [selectedContainers, setSelectedContainers] = React.useState( [] ); - const container = React.useRef(); const handleSubmit = () => onSubmit(selectedContainers); - const containerHeight = container.current?.scrollHeight - 130; - return ( = props => { maxWidth="sm" > {title} - + = props => { endAdornment: loading && }} /> - -
+ + + +
+ } + scrollableTarget={scrollableTargetId} > - - - - } - threshold={10} - > - - - {containers?.map(container => { - const isSelected = !!selectedContainers.find( - selectedContainer => selectedContainer === container.id - ); + + + {containers?.map(container => { + const isSelected = !!selectedContainers.find( + selectedContainer => selectedContainer === container.id + ); - return ( - - - - handleContainerAssign( - container.id, - isSelected, - selectedContainers, - setSelectedContainers - ) - } - /> - - - {container.name} - - - ); - })} - - - - + return ( + + + + handleContainerAssign( + container.id, + isSelected, + selectedContainers, + setSelectedContainers + ) + } + /> + + + {container.name} + + + ); + })} +
+
+