From ea0d2136837ab6989c3037c4a4c6aa927d41a8bf Mon Sep 17 00:00:00 2001 From: Patryk Andrzejewski Date: Wed, 26 Oct 2022 16:54:31 +0200 Subject: [PATCH] handle the case when quantities are null (#2465) --- .../ReturnItemsCard.tsx | 18 +++++--- .../components/OrderReturnPage/utils.tsx | 42 ++++++++++++++++++- 2 files changed, 54 insertions(+), 6 deletions(-) diff --git a/src/orders/components/OrderReturnPage/OrderReturnRefundItemsCard/ReturnItemsCard.tsx b/src/orders/components/OrderReturnPage/OrderReturnRefundItemsCard/ReturnItemsCard.tsx index 6f1846f0b..44aabbbb9 100644 --- a/src/orders/components/OrderReturnPage/OrderReturnRefundItemsCard/ReturnItemsCard.tsx +++ b/src/orders/components/OrderReturnPage/OrderReturnRefundItemsCard/ReturnItemsCard.tsx @@ -24,7 +24,11 @@ import { defineMessages, FormattedMessage, useIntl } from "react-intl"; import OrderCardTitle from "../../OrderCardTitle"; import { FormsetQuantityData, FormsetReplacementData } from "../form"; -import { getById } from "../utils"; +import { + getById, + getQuantityDataFromItems, + getReplacementDataFromItems, +} from "../utils"; import MaximalButton from "./MaximalButton"; import ProductErrorCell from "./ProductErrorCell"; @@ -180,14 +184,18 @@ const ItemsCard: React.FC = ({ variant, } = line; const isValueError = false; - const isRefunded = itemsQuantities.find(getById(id)).data - .isRefunded; + const { isRefunded, currentQuantity } = getQuantityDataFromItems( + itemsQuantities, + id, + ); + const { isSelected } = getReplacementDataFromItems( + itemsSelections, + id, + ); const isReplacable = !!variant && !isRefunded; const isReturnable = !!variant; const isPreorder = !!variant?.preorder; const lineQuantity = fulfilmentId ? quantity : quantityToFulfill; - const isSelected = itemsSelections.find(getById(id))?.value; - const currentQuantity = itemsQuantities.find(getById(id))?.value; const anyLineWithoutVariant = lines.some( ({ variant }) => !variant, ); diff --git a/src/orders/components/OrderReturnPage/utils.tsx b/src/orders/components/OrderReturnPage/utils.tsx index 740542954..ddf16373e 100644 --- a/src/orders/components/OrderReturnPage/utils.tsx +++ b/src/orders/components/OrderReturnPage/utils.tsx @@ -1,7 +1,11 @@ import { FulfillmentStatus, OrderDetailsFragment } from "@saleor/graphql"; import { Node } from "@saleor/types"; -import { LineItemOptions } from "./form"; +import { + FormsetQuantityData, + FormsetReplacementData, + LineItemOptions, +} from "./form"; const fulfiledStatuses = [ FulfillmentStatus.FULFILLED, @@ -133,3 +137,39 @@ export function getByType( ) { return (obj: TObject) => obj.type === typeToCompare; } + +export function getQuantityDataFromItems( + itemsQuantities: FormsetQuantityData, + id: string, +) { + const quantityData = itemsQuantities.find(getById(id)); + + if (!quantityData) { + return { + isRefunded: false, + currentQuantity: 0, + }; + } + + return { + isRefunded: quantityData.data.isRefunded, + currentQuantity: quantityData.value, + }; +} + +export function getReplacementDataFromItems( + itemsSelections: FormsetReplacementData, + id: string, +) { + const replacementData = itemsSelections.find(getById(id)); + + if (!replacementData) { + return { + isSelected: false, + }; + } + + return { + isSelected: replacementData.value, + }; +}