import { Avatar, Copy, Text } from "@medusajs/ui"
import { useTranslation } from "react-i18next"
import { Link } from "react-router-dom"
import { HttpTypes } from "@medusajs/types"
import { getFormattedAddress, isSameAddress } from "../../../lib/addresses"
const ID = ({ data }: { data: HttpTypes.AdminOrder }) => {
const { t } = useTranslation()
const id = data.customer_id
const name = getOrderCustomer(data)
const email = data.email
const fallback = (name || email || "").charAt(0).toUpperCase()
return (
)
}
const Company = ({ data }: { data: HttpTypes.AdminOrder }) => {
const { t } = useTranslation()
const company =
data.shipping_address?.company || data.billing_address?.company
if (!company) {
return null
}
return (
{t("fields.company")}
{company}
)
}
const Contact = ({ data }: { data: HttpTypes.AdminOrder }) => {
const { t } = useTranslation()
const phone = data.shipping_address?.phone || data.billing_address?.phone
const email = data.email || ""
return (
{t("orders.customer.contactLabel")}
)
}
const AddressPrint = ({
address,
type,
}: {
address:
| HttpTypes.AdminOrder["shipping_address"]
| HttpTypes.AdminOrder["billing_address"]
type: "shipping" | "billing"
}) => {
const { t } = useTranslation()
return (
{type === "shipping"
? t("addresses.shippingAddress.label")
: t("addresses.billingAddress.label")}
{address ? (
{getFormattedAddress({ address }).map((line, i) => {
return (
{line}
)
})}
) : (
-
)}
)
}
const Addresses = ({ data }: { data: HttpTypes.AdminOrder }) => {
const { t } = useTranslation()
return (
{!isSameAddress(data.shipping_address, data.billing_address) ? (
) : (
{t("addresses.billingAddress.label")}
{t("addresses.billingAddress.sameAsShipping")}
)}
)
}
export const CustomerInfo = Object.assign(
{},
{
ID,
Company,
Contact,
Addresses,
}
)
const getOrderCustomer = (obj: HttpTypes.AdminOrder) => {
const { first_name: sFirstName, last_name: sLastName } =
obj.shipping_address || {}
const { first_name: bFirstName, last_name: bLastName } =
obj.billing_address || {}
const { first_name: cFirstName, last_name: cLastName } = obj.customer || {}
const customerName = [cFirstName, cLastName].filter(Boolean).join(" ")
const shippingName = [sFirstName, sLastName].filter(Boolean).join(" ")
const billingName = [bFirstName, bLastName].filter(Boolean).join(" ")
const name = customerName || shippingName || billingName
return name
}