import {
useAdminCancelClaim,
useAdminCancelReturn,
useAdminOrder,
} from "medusa-react"
import { Fragment } from "react"
import CreateFulfillmentModal from "../../../../domain/orders/details/create-fulfillment"
import { ReceiveReturnMenu } from "../../../../domain/orders/details/receive-return"
import useOrdersExpandParam from "../../../../domain/orders/details/utils/use-admin-expand-paramter"
import { ClaimEvent } from "../../../../hooks/use-build-timeline"
import useNotification from "../../../../hooks/use-notification"
import useToggleState from "../../../../hooks/use-toggle-state"
import { getErrorMessage } from "../../../../utils/error-messages"
import Button from "../../../fundamentals/button"
import AlertIcon from "../../../fundamentals/icons/alert-icon"
import CancelIcon from "../../../fundamentals/icons/cancel-icon"
import TrashIcon from "../../../fundamentals/icons/trash-icon"
import { ActionType } from "../../actionables"
import {
FulfillmentStatus,
RefundStatus,
ReturnStatus,
} from "../../order-status"
import EventActionables from "../event-actionables"
import EventContainer, {
EventContainerProps,
EventIconColor,
} from "../event-container"
import EventItemContainer from "../event-item-container"
type Props = {
event: ClaimEvent
}
const Claim = ({ event }: Props) => {
const {
state: stateReceiveMenu,
open: openReceiveMenu,
close: closeReceiveMenu,
} = useToggleState()
const {
state: stateFulfillMenu,
open: openFulfillMenu,
close: closeFulfillMenu,
} = useToggleState()
const { orderRelations } = useOrdersExpandParam()
// Orders and returns aren't linked in `medusa-react` so we need to manually refetch the order
const { refetch } = useAdminOrder(event.orderId, {
expand: orderRelations,
})
const notification = useNotification()
const shouldHaveButtonActions =
!event.canceledAt &&
(event.claim?.return_order || event.claim?.additional_items?.length > 0)
const { mutate: cancelReturn } = useAdminCancelReturn(
event.claim?.return_order?.id
)
const { mutate: cancelClaim } = useAdminCancelClaim(event.order?.id)
const onCancelClaim = () => {
cancelClaim(event.claim.id, {
onSuccess: () => {
notification("Claim canceled", "The claim has been canceled", "success")
},
onError: (err) => {
notification("Failed to cancel claim", getErrorMessage(err), "error")
},
})
}
const onCancelReturn = () => {
cancelReturn(undefined, {
onSuccess: () => {
notification(
"Return canceled",
"The return has been canceled",
"success"
)
refetch()
},
onError: (err) => {
notification("Failed to cancel return", getErrorMessage(err), "error")
},
})
}
const Actions = renderClaimActions(event, onCancelClaim, onCancelReturn)
const eventContainerArgs: EventContainerProps = {
icon: event.canceledAt ?