feat(core-flows,dashboard): adds item validations for claims, returns and exchanges (#8735)

what:

- adds item validations for claims, returns and exchanges
- prevents autofocus on item add
- reset item quantity when error
This commit is contained in:
Riqwan Thamir
2024-08-23 09:30:27 +00:00
committed by GitHub
parent b23f0f8188
commit 59599ac237
9 changed files with 217 additions and 54 deletions
@@ -36,7 +36,7 @@ import { AddClaimItemsTable } from "../add-claim-items-table"
import { ClaimInboundItem } from "./claim-inbound-item.tsx"
import { ClaimCreateSchema, CreateClaimSchemaType } from "./schema"
import { AdminReturn } from "@medusajs/types"
import { AdminReturn, HttpTypes } from "@medusajs/types"
import {
useAddClaimInboundItems,
useAddClaimInboundShipping,
@@ -275,7 +275,10 @@ export const ClaimCreateForm = ({
})
}
} else {
append({ item_id: i.id, quantity: i.detail.return_requested_quantity })
append(
{ item_id: i.id, quantity: i.detail.return_requested_quantity },
{ shouldFocus: false }
)
}
})
@@ -551,16 +554,26 @@ export const ClaimCreateForm = ({
})
}
}}
onUpdate={(payload) => {
const actionId = previewItems
onUpdate={(payload: HttpTypes.AdminUpdateReturnItems) => {
const action = previewItems
.find((i) => i.id === item.item_id)
?.actions?.find((a) => a.action === "RETURN_ITEM")?.id
?.actions?.find((a) => a.action === "RETURN_ITEM")
if (actionId) {
if (action) {
updateInboundItem(
{ ...payload, actionId },
{ ...payload, actionId: action.id },
{
onError: (error) => {
if (
action.details?.quantity &&
payload.quantity
) {
form.setValue(
`inbound_items.${index}.quantity`,
action.details?.quantity as number
)
}
toast.error(error.message)
},
}
@@ -9,6 +9,7 @@ import { useEffect, useMemo, useState } from "react"
import { useFieldArray, UseFormReturn } from "react-hook-form"
import { useTranslation } from "react-i18next"
import { HttpTypes } from "@medusajs/types"
import { Form } from "../../../../../components/common/form"
import { Combobox } from "../../../../../components/inputs/combobox"
import {
@@ -134,11 +135,14 @@ export const ClaimOutboundSection = ({
})
}
} else {
append({
item_id: i.id,
quantity: i.detail.quantity,
variant_id: i.variant_id,
})
append(
{
item_id: i.id,
quantity: i.detail.quantity,
variant_id: i.variant_id,
},
{ shouldFocus: false }
)
}
})
@@ -349,7 +353,7 @@ export const ClaimOutboundSection = ({
})
}
}}
onUpdate={(payload) => {
onUpdate={(payload: HttpTypes.AdminUpdateReturnItems) => {
const actionId = previewOutboundItems
.find((i) => i.id === item.item_id)
?.actions?.find((a) => a.action === "ITEM_ADD")?.id
@@ -10,6 +10,7 @@ import { useEffect, useMemo, useState } from "react"
import { useFieldArray, UseFormReturn } from "react-hook-form"
import { useTranslation } from "react-i18next"
import { HttpTypes } from "@medusajs/types"
import { Form } from "../../../../../components/common/form"
import { Combobox } from "../../../../../components/inputs/combobox"
import {
@@ -172,7 +173,10 @@ export const ExchangeInboundSection = ({
})
}
} else {
append({ item_id: i.id, quantity: i.detail.return_requested_quantity })
append(
{ item_id: i.id, quantity: i.detail.return_requested_quantity },
{ shouldFocus: false }
)
}
})
@@ -409,16 +413,23 @@ export const ExchangeInboundSection = ({
})
}
}}
onUpdate={(payload) => {
const actionId = previewInboundItems
onUpdate={(payload: HttpTypes.AdminUpdateReturnItems) => {
const action = previewInboundItems
.find((i) => i.id === item.item_id)
?.actions?.find((a) => a.action === "RETURN_ITEM")?.id
?.actions?.find((a) => a.action === "RETURN_ITEM")
if (actionId) {
if (action) {
updateInboundItem(
{ ...payload, actionId },
{ ...payload, actionId: action.id },
{
onError: (error) => {
if (action.details?.quantity && payload.quantity) {
form.setValue(
`inbound_items.${index}.quantity`,
action.details?.quantity as number
)
}
toast.error(error.message)
},
}
@@ -134,11 +134,14 @@ export const ExchangeOutboundSection = ({
})
}
} else {
append({
item_id: i.id,
quantity: i.detail.quantity,
variant_id: i.variant_id,
})
append(
{
item_id: i.id,
quantity: i.detail.quantity,
variant_id: i.variant_id,
},
{ shouldFocus: false }
)
}
})
@@ -1,5 +1,6 @@
import React, { useEffect, useMemo, useState } from "react"
import { zodResolver } from "@hookform/resolvers/zod"
import { PencilSquare } from "@medusajs/icons"
import { AdminOrder, InventoryLevelDTO, ReturnDTO } from "@medusajs/types"
import {
Alert,
Button,
@@ -10,10 +11,9 @@ import {
Text,
toast,
} from "@medusajs/ui"
import { useEffect, useMemo, useState } from "react"
import { useFieldArray, useForm } from "react-hook-form"
import { useTranslation } from "react-i18next"
import { AdminOrder, InventoryLevelDTO, ReturnDTO } from "@medusajs/types"
import { PencilSquare } from "@medusajs/icons"
import {
RouteFocusModal,
@@ -22,14 +22,8 @@ import {
useStackedModal,
} from "../../../../../components/modals"
import { ReturnCreateSchema, ReturnCreateSchemaType } from "./schema"
import { AddReturnItemsTable } from "../add-return-items-table"
import { Form } from "../../../../../components/common/form"
import { ReturnItem } from "./return-item"
import { Combobox } from "../../../../../components/inputs/combobox"
import { useStockLocations } from "../../../../../hooks/api/stock-locations"
import { useShippingOptions } from "../../../../../hooks/api/shipping-options"
import { getStylizedAmount } from "../../../../../lib/money-amount-helpers"
import {
useAddReturnItem,
useAddReturnShipping,
@@ -41,8 +35,14 @@ import {
useUpdateReturnItem,
useUpdateReturnShipping,
} from "../../../../../hooks/api/returns"
import { currencies } from "../../../../../lib/data/currencies"
import { useShippingOptions } from "../../../../../hooks/api/shipping-options"
import { useStockLocations } from "../../../../../hooks/api/stock-locations"
import { sdk } from "../../../../../lib/client"
import { currencies } from "../../../../../lib/data/currencies"
import { getStylizedAmount } from "../../../../../lib/money-amount-helpers"
import { AddReturnItemsTable } from "../add-return-items-table"
import { ReturnItem } from "./return-item"
import { ReturnCreateSchema, ReturnCreateSchemaType } from "./schema"
type ReturnCreateFormProps = {
order: AdminOrder
@@ -455,12 +455,26 @@ export const ReturnCreateForm = ({
}
}}
onUpdate={(payload) => {
const actionId = previewItems
const action = previewItems
.find((i) => i.id === item.item_id)
?.actions?.find((a) => a.action === "RETURN_ITEM")?.id
?.actions?.find((a) => a.action === "RETURN_ITEM")
if (actionId) {
updateReturnItem({ ...payload, actionId })
if (action) {
updateReturnItem(
{ ...payload, actionId: action.id },
{
onError: (error) => {
if (action.details?.quantity && payload.quantity) {
form.setValue(
`items.${index}.quantity`,
action.details?.quantity as number
)
}
toast.error(error.message)
},
}
)
}
}}
index={index}