import { XCircle } from "@medusajs/icons"
import { HttpTypes } from "@medusajs/types"
import {
Container,
Copy,
Heading,
StatusBadge,
Text,
toast,
usePrompt,
} from "@medusajs/ui"
import { useTranslation } from "react-i18next"
import { ActionMenu } from "../../../../../components/common/action-menu"
import { useCancelOrder } from "../../../../../hooks/api/orders"
import { useDate } from "../../../../../hooks/use-date"
import {
getCanceledOrderStatus,
getOrderFulfillmentStatus,
getOrderPaymentStatus,
} from "../../../../../lib/order-helpers"
import { ExtendedOrder } from "../../constants"
type OrderGeneralSectionProps = {
order: ExtendedOrder
}
export const OrderGeneralSection = ({ order }: OrderGeneralSectionProps) => {
const { t } = useTranslation()
const prompt = usePrompt()
const { getFullDate } = useDate()
const { mutateAsync: cancelOrder } = useCancelOrder(order.id)
const handleCancel = async () => {
const res = await prompt({
title: t("general.areYouSure"),
description: t("orders.cancelWarning", {
id: `#${order.display_id}` as string,
}),
confirmText: t("actions.continue"),
cancelText: t("actions.cancel"),
})
if (!res) {
return
}
await cancelOrder(undefined, {
onSuccess: () => {
toast.success(t("orders.orderCanceled"))
},
onError: (e) => {
toast.error(e.message)
},
})
}
return (
#{order.display_id}
{t("orders.onDateFromSalesChannel", {
date: getFullDate({ date: order.created_at, includeTime: true }),
salesChannel: order.sales_channel?.name,
})}
)
}
const FulfillmentBadge = ({ order }: { order: HttpTypes.AdminOrder }) => {
const { t } = useTranslation()
const { label, color } = getOrderFulfillmentStatus(
t,
order.fulfillment_status
)
return (
{label}
)
}
const PaymentBadge = ({ order }: { order: HttpTypes.AdminOrder }) => {
const { t } = useTranslation()
const { label, color } = getOrderPaymentStatus(t, order.payment_status)
return (
{label}
)
}
const OrderBadge = ({ order }: { order: HttpTypes.AdminOrder }) => {
const { t } = useTranslation()
const orderStatus = getCanceledOrderStatus(t, order.status)
if (!orderStatus) {
return null
}
return (
{orderStatus.label}
)
}