chore: Remove @medusajs/medusa usage + local types from dashboard (#8883)
Closes CC-403
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
"name": "@medusajs/dashboard",
|
||||
"version": "0.0.1",
|
||||
"scripts": {
|
||||
"generate:static": "node ./scripts/generate-countries.js && prettier --write ./src/lib/countries.ts && node ./scripts/generate-currencies.js && prettier --write ./src/lib/currencies.ts",
|
||||
"generate:static": "node ./scripts/generate-currencies.js && prettier --write ./src/lib/currencies.ts",
|
||||
"dev": "vite",
|
||||
"build": "tsup && node ./scripts/generate-types.js",
|
||||
"build:preview": "vite build",
|
||||
|
||||
+12
-10
@@ -1,16 +1,16 @@
|
||||
import { Address, Cart, Order } from "@medusajs/medusa"
|
||||
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: Cart | Order }) => {
|
||||
const ID = ({ data }: { data: HttpTypes.AdminOrder }) => {
|
||||
const { t } = useTranslation()
|
||||
|
||||
const id = data.customer_id
|
||||
const name = getCartOrOrderCustomer(data)
|
||||
const name = getOrderCustomer(data)
|
||||
const email = data.email
|
||||
const fallback = (name || email).charAt(0).toUpperCase()
|
||||
const fallback = (name || email || "").charAt(0).toUpperCase()
|
||||
|
||||
return (
|
||||
<div className="text-ui-fg-subtle grid grid-cols-2 items-center px-6 py-4">
|
||||
@@ -36,7 +36,7 @@ const ID = ({ data }: { data: Cart | Order }) => {
|
||||
)
|
||||
}
|
||||
|
||||
const Company = ({ data }: { data: Order | Cart }) => {
|
||||
const Company = ({ data }: { data: HttpTypes.AdminOrder }) => {
|
||||
const { t } = useTranslation()
|
||||
const company =
|
||||
data.shipping_address?.company || data.billing_address?.company
|
||||
@@ -57,11 +57,11 @@ const Company = ({ data }: { data: Order | Cart }) => {
|
||||
)
|
||||
}
|
||||
|
||||
const Contact = ({ data }: { data: Cart | Order }) => {
|
||||
const Contact = ({ data }: { data: HttpTypes.AdminOrder }) => {
|
||||
const { t } = useTranslation()
|
||||
|
||||
const phone = data.shipping_address?.phone || data.billing_address?.phone
|
||||
const email = data.email
|
||||
const email = data.email || ""
|
||||
|
||||
return (
|
||||
<div className="text-ui-fg-subtle grid grid-cols-2 items-start px-6 py-4">
|
||||
@@ -106,7 +106,9 @@ const AddressPrint = ({
|
||||
address,
|
||||
type,
|
||||
}: {
|
||||
address: Address | null
|
||||
address:
|
||||
| HttpTypes.AdminOrder["shipping_address"]
|
||||
| HttpTypes.AdminOrder["billing_address"]
|
||||
type: "shipping" | "billing"
|
||||
}) => {
|
||||
const { t } = useTranslation()
|
||||
@@ -146,7 +148,7 @@ const AddressPrint = ({
|
||||
)
|
||||
}
|
||||
|
||||
const Addresses = ({ data }: { data: Cart | Order }) => {
|
||||
const Addresses = ({ data }: { data: HttpTypes.AdminOrder }) => {
|
||||
const { t } = useTranslation()
|
||||
|
||||
return (
|
||||
@@ -183,7 +185,7 @@ export const CustomerInfo = Object.assign(
|
||||
}
|
||||
)
|
||||
|
||||
const getCartOrOrderCustomer = (obj: Cart | Order) => {
|
||||
const getOrderCustomer = (obj: HttpTypes.AdminOrder) => {
|
||||
const { first_name: sFirstName, last_name: sLastName } =
|
||||
obj.shipping_address || {}
|
||||
const { first_name: bFirstName, last_name: bLastName } =
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import { Country } from "@medusajs/medusa"
|
||||
import { Heading, Input, Select, clx } from "@medusajs/ui"
|
||||
import { useTranslation } from "react-i18next"
|
||||
import { z } from "zod"
|
||||
@@ -7,12 +6,13 @@ import { Control } from "react-hook-form"
|
||||
import { AddressSchema } from "../../../lib/schemas"
|
||||
import { Form } from "../../common/form"
|
||||
import { CountrySelect } from "../../inputs/country-select"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
|
||||
type AddressFieldValues = z.infer<typeof AddressSchema>
|
||||
|
||||
type AddressFormProps = {
|
||||
control: Control<AddressFieldValues>
|
||||
countries?: Country[]
|
||||
countries?: HttpTypes.AdminRegionCountry[]
|
||||
layout: "grid" | "stack"
|
||||
}
|
||||
|
||||
|
||||
+13
-8
@@ -1,4 +1,3 @@
|
||||
import { Customer, DraftOrder, Order } from "@medusajs/medusa"
|
||||
import { Select, Text, clx } from "@medusajs/ui"
|
||||
import { useInfiniteQuery } from "@tanstack/react-query"
|
||||
import { format } from "date-fns"
|
||||
@@ -19,6 +18,7 @@ import { TransferOwnershipSchema } from "../../../lib/schemas"
|
||||
import { Form } from "../../common/form"
|
||||
import { Skeleton } from "../../common/skeleton"
|
||||
import { Combobox } from "../../inputs/combobox"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
|
||||
type TransferOwnerShipFieldValues = z.infer<typeof TransferOwnershipSchema>
|
||||
|
||||
@@ -26,14 +26,16 @@ type TransferOwnerShipFormProps = {
|
||||
/**
|
||||
* The Order or DraftOrder to transfer ownership of.
|
||||
*/
|
||||
order: Order | DraftOrder
|
||||
order: HttpTypes.AdminOrder
|
||||
/**
|
||||
* React Hook Form control object.
|
||||
*/
|
||||
control: Control<TransferOwnerShipFieldValues>
|
||||
}
|
||||
|
||||
const isOrder = (order: Order | DraftOrder): order is Order => {
|
||||
const isOrder = (
|
||||
order: HttpTypes.AdminOrder
|
||||
): order is HttpTypes.AdminOrder => {
|
||||
return "customer" in order
|
||||
}
|
||||
|
||||
@@ -90,7 +92,7 @@ export const TransferOwnerShipForm = ({
|
||||
},
|
||||
})
|
||||
|
||||
const createLabel = (customer?: Customer) => {
|
||||
const createLabel = (customer?: HttpTypes.AdminCustomer) => {
|
||||
if (!customer) {
|
||||
return ""
|
||||
}
|
||||
@@ -187,7 +189,7 @@ export const TransferOwnerShipForm = ({
|
||||
)
|
||||
}
|
||||
|
||||
const OrderDetailsTable = ({ order }: { order: Order }) => {
|
||||
const OrderDetailsTable = ({ order }: { order: HttpTypes.AdminOrder }) => {
|
||||
const { t } = useTranslation()
|
||||
|
||||
const { label: fulfillmentLabel } = getOrderFulfillmentStatus(
|
||||
@@ -208,7 +210,8 @@ const OrderDetailsTable = ({ order }: { order: Order }) => {
|
||||
)
|
||||
}
|
||||
|
||||
const DraftOrderDetailsTable = ({ draft }: { draft: DraftOrder }) => {
|
||||
// TODO: Create type for Draft Order when we have it
|
||||
const DraftOrderDetailsTable = ({ draft }: { draft: HttpTypes.AdminOrder }) => {
|
||||
const { t } = useTranslation()
|
||||
|
||||
return (
|
||||
@@ -219,10 +222,12 @@ const DraftOrderDetailsTable = ({ draft }: { draft: DraftOrder }) => {
|
||||
label={t("fields.status")}
|
||||
value={t(`draftOrders.status.${draft.status}`)}
|
||||
/>
|
||||
<TotalRow
|
||||
|
||||
{/* TODO: This will likely change. We don't use carts for draft orders any longer. */}
|
||||
{/* <TotalRow
|
||||
total={draft.cart.total || 0}
|
||||
currencyCode={draft.cart.region.currency_code}
|
||||
/>
|
||||
/> */}
|
||||
</Table>
|
||||
)
|
||||
}
|
||||
|
||||
+7
-3
@@ -1,9 +1,13 @@
|
||||
import { Country } from "@medusajs/medusa"
|
||||
import { Tooltip } from "@medusajs/ui"
|
||||
import ReactCountryFlag from "react-country-flag"
|
||||
import { PlaceholderCell } from "../../common/placeholder-cell"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
|
||||
export const CountryCell = ({ country }: { country?: Country | null }) => {
|
||||
export const CountryCell = ({
|
||||
country,
|
||||
}: {
|
||||
country?: HttpTypes.AdminRegionCountry | null
|
||||
}) => {
|
||||
if (!country) {
|
||||
return <PlaceholderCell />
|
||||
}
|
||||
@@ -13,7 +17,7 @@ export const CountryCell = ({ country }: { country?: Country | null }) => {
|
||||
<Tooltip content={country.display_name}>
|
||||
<div className="flex size-4 items-center justify-center overflow-hidden rounded-sm">
|
||||
<ReactCountryFlag
|
||||
countryCode={country.iso_2.toUpperCase()}
|
||||
countryCode={country.iso_2!.toUpperCase()}
|
||||
svg
|
||||
style={{
|
||||
width: "16px",
|
||||
|
||||
+6
-2
@@ -1,7 +1,11 @@
|
||||
import { Customer } from "@medusajs/medusa"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
import { useTranslation } from "react-i18next"
|
||||
|
||||
export const CustomerCell = ({ customer }: { customer: Customer | null }) => {
|
||||
export const CustomerCell = ({
|
||||
customer,
|
||||
}: {
|
||||
customer: HttpTypes.AdminCustomer | null
|
||||
}) => {
|
||||
if (!customer) {
|
||||
return <span className="text-ui-fg-muted">-</span>
|
||||
}
|
||||
|
||||
+2
-2
@@ -1,10 +1,10 @@
|
||||
import { SalesChannel } from "@medusajs/medusa"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
import { useTranslation } from "react-i18next"
|
||||
|
||||
export const SalesChannelCell = ({
|
||||
channel,
|
||||
}: {
|
||||
channel: SalesChannel | null
|
||||
channel: HttpTypes.AdminSalesChannel | null
|
||||
}) => {
|
||||
if (!channel) {
|
||||
return <span className="text-ui-fg-muted">-</span>
|
||||
|
||||
+2
-2
@@ -1,10 +1,10 @@
|
||||
import { FulfillmentProvider } from "@medusajs/medusa"
|
||||
import { useTranslation } from "react-i18next"
|
||||
import { formatProvider } from "../../../../../lib/format-provider"
|
||||
import { PlaceholderCell } from "../../common/placeholder-cell"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
|
||||
type FulfillmentProvidersCellProps = {
|
||||
fulfillmentProviders?: FulfillmentProvider[] | null
|
||||
fulfillmentProviders?: HttpTypes.AdminFulfillmentProvider[] | null
|
||||
}
|
||||
|
||||
export const FulfillmentProvidersCell = ({
|
||||
|
||||
-1
@@ -1 +0,0 @@
|
||||
export * from "./subtotal-requirement-cell"
|
||||
-43
@@ -1,43 +0,0 @@
|
||||
import { ShippingOption } from "@medusajs/medusa"
|
||||
import { useTranslation } from "react-i18next"
|
||||
import { MoneyAmountCell } from "../../common/money-amount-cell"
|
||||
import { PlaceholderCell } from "../../common/placeholder-cell"
|
||||
|
||||
type SubtotalType = "min" | "max"
|
||||
|
||||
type SubtotalRequirementCellProps = {
|
||||
type: SubtotalType
|
||||
shippingOption: ShippingOption
|
||||
}
|
||||
|
||||
export const SubtotalRequirementCell = (
|
||||
props: SubtotalRequirementCellProps
|
||||
) => {
|
||||
const requirement = props.shippingOption.requirements?.find(
|
||||
(r) => r.type === `${props.type}_subtotal`
|
||||
)
|
||||
|
||||
if (!requirement) {
|
||||
return <PlaceholderCell />
|
||||
}
|
||||
|
||||
return (
|
||||
<MoneyAmountCell
|
||||
currencyCode={props.shippingOption.region!.currency_code}
|
||||
amount={requirement.amount}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
export const SubtotalRequirementHeader = ({ type }: { type: SubtotalType }) => {
|
||||
const { t } = useTranslation()
|
||||
|
||||
const header =
|
||||
type === "min" ? t("fields.minSubtotal") : t("fields.maxSubtotal")
|
||||
|
||||
return (
|
||||
<div className="flex size-full items-center overflow-hidden">
|
||||
<span className="truncate">{header}</span>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
@@ -1,11 +1,14 @@
|
||||
import { UseMutationOptions, useMutation } from "@tanstack/react-query"
|
||||
import { FetchError } from "@medusajs/js-sdk"
|
||||
|
||||
import { sdk } from "../../lib/client"
|
||||
import { EmailPassReq } from "../../types/api-payloads"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
|
||||
export const useSignInWithEmailPassword = (
|
||||
options?: UseMutationOptions<string, FetchError, EmailPassReq>
|
||||
options?: UseMutationOptions<
|
||||
string,
|
||||
FetchError,
|
||||
HttpTypes.AdminSignUpWithEmailPassword
|
||||
>
|
||||
) => {
|
||||
return useMutation({
|
||||
mutationFn: (payload) => sdk.auth.login("user", "emailpass", payload),
|
||||
@@ -17,7 +20,11 @@ export const useSignInWithEmailPassword = (
|
||||
}
|
||||
|
||||
export const useSignUpWithEmailPass = (
|
||||
options?: UseMutationOptions<string, FetchError, EmailPassReq>
|
||||
options?: UseMutationOptions<
|
||||
string,
|
||||
FetchError,
|
||||
HttpTypes.AdminSignInWithEmailPassword
|
||||
>
|
||||
) => {
|
||||
return useMutation({
|
||||
mutationFn: (payload) => sdk.auth.register("user", "emailpass", payload),
|
||||
|
||||
@@ -9,5 +9,5 @@ export * from "./use-product-type-table-columns"
|
||||
export * from "./use-region-table-columns"
|
||||
export * from "./use-return-reason-table-columns"
|
||||
export * from "./use-sales-channel-table-columns"
|
||||
export * from "./use-shipping-option-table-columns"
|
||||
export * from "./use-tax-rates-table-columns"
|
||||
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import { Order } from "@medusajs/medusa"
|
||||
import {
|
||||
ColumnDef,
|
||||
ColumnDefBase,
|
||||
@@ -34,9 +33,10 @@ import {
|
||||
TotalCell,
|
||||
TotalHeader,
|
||||
} from "../../../components/table/table-cells/order/total-cell"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
|
||||
// We have to use any here, as the type of Order is so complex that it lags the TS server
|
||||
const columnHelper = createColumnHelper<Order>()
|
||||
const columnHelper = createColumnHelper<HttpTypes.AdminOrder>()
|
||||
|
||||
type UseOrderTableColumnsProps = {
|
||||
exclude?: string[]
|
||||
@@ -52,7 +52,7 @@ export const useOrderTableColumns = (props: UseOrderTableColumnsProps) => {
|
||||
cell: ({ getValue }) => {
|
||||
const id = getValue()
|
||||
|
||||
return <DisplayIdCell displayId={id} />
|
||||
return <DisplayIdCell displayId={id!} />
|
||||
},
|
||||
}),
|
||||
columnHelper.accessor("created_at", {
|
||||
@@ -118,17 +118,19 @@ export const useOrderTableColumns = (props: UseOrderTableColumnsProps) => {
|
||||
|
||||
const isAccessorColumnDef = (
|
||||
c: any
|
||||
): c is ColumnDef<Order> & { accessorKey: string } => {
|
||||
): c is ColumnDef<HttpTypes.AdminOrder> & { accessorKey: string } => {
|
||||
return c.accessorKey !== undefined
|
||||
}
|
||||
|
||||
const isDisplayColumnDef = (
|
||||
c: any
|
||||
): c is ColumnDef<Order> & { id: string } => {
|
||||
): c is ColumnDef<HttpTypes.AdminOrder> & { id: string } => {
|
||||
return c.id !== undefined
|
||||
}
|
||||
|
||||
const shouldExclude = <TDef extends ColumnDefBase<Order, any>>(c: TDef) => {
|
||||
const shouldExclude = <TDef extends ColumnDefBase<HttpTypes.AdminOrder, any>>(
|
||||
c: TDef
|
||||
) => {
|
||||
if (isAccessorColumnDef(c)) {
|
||||
return exclude.includes(c.accessorKey)
|
||||
} else if (isDisplayColumnDef(c)) {
|
||||
@@ -138,5 +140,7 @@ export const useOrderTableColumns = (props: UseOrderTableColumnsProps) => {
|
||||
return false
|
||||
}
|
||||
|
||||
return columns.filter((c) => !shouldExclude(c)) as ColumnDef<Order>[]
|
||||
return columns.filter(
|
||||
(c) => !shouldExclude(c)
|
||||
) as ColumnDef<HttpTypes.AdminOrder>[]
|
||||
}
|
||||
|
||||
-107
@@ -1,107 +0,0 @@
|
||||
import { ShippingOption } from "@medusajs/medusa"
|
||||
import { PricedShippingOption } from "@medusajs/medusa/dist/types/pricing"
|
||||
import { createColumnHelper } from "@tanstack/react-table"
|
||||
import { useMemo } from "react"
|
||||
|
||||
import {
|
||||
AdminOnlyCell,
|
||||
AdminOnlyHeader,
|
||||
} from "../../../components/table/table-cells/shipping-option/admin-only-cell"
|
||||
import {
|
||||
IsReturnCell,
|
||||
IsReturnHeader,
|
||||
} from "../../../components/table/table-cells/shipping-option/is-return-cell"
|
||||
import {
|
||||
PriceTypeCell,
|
||||
PriceTypeHeader,
|
||||
} from "../../../components/table/table-cells/shipping-option/price-type-cell"
|
||||
import {
|
||||
ShippingOptionCell,
|
||||
ShippingOptionHeader,
|
||||
} from "../../../components/table/table-cells/shipping-option/shipping-option-cell"
|
||||
import {
|
||||
ShippingPriceCell,
|
||||
ShippingPriceHeader,
|
||||
} from "../../../components/table/table-cells/shipping-option/shipping-price-cell/shipping-price-cell"
|
||||
import {
|
||||
SubtotalRequirementCell,
|
||||
SubtotalRequirementHeader,
|
||||
} from "../../../components/table/table-cells/shipping-option/subtotal-requirement-cell"
|
||||
|
||||
const columnHelper = createColumnHelper<PricedShippingOption>()
|
||||
|
||||
export const useShippingOptionTableColumns = () => {
|
||||
return useMemo(
|
||||
() => [
|
||||
columnHelper.accessor("name", {
|
||||
header: () => <ShippingOptionHeader />,
|
||||
cell: ({ getValue }) => <ShippingOptionCell name={getValue()} />,
|
||||
}),
|
||||
columnHelper.accessor("is_return", {
|
||||
header: () => <IsReturnHeader />,
|
||||
cell: (cell) => {
|
||||
const value = cell.getValue()
|
||||
|
||||
return <IsReturnCell isReturn={value} />
|
||||
},
|
||||
}),
|
||||
columnHelper.accessor("price_type", {
|
||||
header: () => <PriceTypeHeader />,
|
||||
cell: ({ getValue }) => {
|
||||
const type = getValue()
|
||||
|
||||
return <PriceTypeCell priceType={type} />
|
||||
},
|
||||
}),
|
||||
columnHelper.accessor("price_incl_tax", {
|
||||
header: () => <ShippingPriceHeader />,
|
||||
cell: ({ getValue, row }) => {
|
||||
const isCalculated = row.original.price_type === "calculated"
|
||||
const amount = getValue()
|
||||
const currencyCode = row.original.region!.currency_code
|
||||
|
||||
return (
|
||||
<ShippingPriceCell
|
||||
isCalculated={isCalculated}
|
||||
currencyCode={currencyCode}
|
||||
price={amount}
|
||||
/>
|
||||
)
|
||||
},
|
||||
}),
|
||||
columnHelper.display({
|
||||
id: "min_amount",
|
||||
header: () => <SubtotalRequirementHeader type="min" />,
|
||||
cell: ({ row }) => {
|
||||
return (
|
||||
<SubtotalRequirementCell
|
||||
type="min"
|
||||
shippingOption={row.original as unknown as ShippingOption}
|
||||
/>
|
||||
)
|
||||
},
|
||||
}),
|
||||
columnHelper.display({
|
||||
id: "max_amount",
|
||||
header: () => <SubtotalRequirementHeader type="max" />,
|
||||
cell: ({ row }) => {
|
||||
return (
|
||||
<SubtotalRequirementCell
|
||||
type="max"
|
||||
shippingOption={row.original as unknown as ShippingOption}
|
||||
/>
|
||||
)
|
||||
},
|
||||
}),
|
||||
columnHelper.accessor("admin_only", {
|
||||
header: () => <AdminOnlyHeader />,
|
||||
cell: (cell) => {
|
||||
const value = cell.getValue() || false
|
||||
|
||||
return <AdminOnlyCell adminOnly={value} />
|
||||
},
|
||||
}),
|
||||
],
|
||||
[]
|
||||
)
|
||||
}
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
import { AdminGetPromotionsParams } from "@medusajs/medusa"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
import { useQueryParams } from "../../use-query-params"
|
||||
|
||||
type UsePromotionTableQueryProps = {
|
||||
@@ -17,7 +17,7 @@ export const usePromotionTableQuery = ({
|
||||
|
||||
const { offset, q, created_at, updated_at } = queryObject
|
||||
|
||||
const searchParams: AdminGetPromotionsParams = {
|
||||
const searchParams: HttpTypes.AdminGetPromotionsParams = {
|
||||
limit: pageSize,
|
||||
created_at: created_at ? JSON.parse(created_at) : undefined,
|
||||
updated_at: updated_at ? JSON.parse(updated_at) : undefined,
|
||||
|
||||
+2
-3
@@ -1,5 +1,4 @@
|
||||
import { AdminGetCustomerGroupsParams } from "@medusajs/medusa"
|
||||
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
import { useQueryParams } from "../../use-query-params"
|
||||
|
||||
type UseCustomerGroupTableQueryProps = {
|
||||
@@ -18,7 +17,7 @@ export const useCustomerGroupTableQuery = ({
|
||||
|
||||
const { offset, created_at, updated_at, q, order } = queryObject
|
||||
|
||||
const searchParams: AdminGetCustomerGroupsParams = {
|
||||
const searchParams: HttpTypes.AdminGetCustomerGroupsParams = {
|
||||
limit: pageSize,
|
||||
offset: offset ? Number(offset) : 0,
|
||||
order,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { AdminGetCustomersParams } from "@medusajs/medusa"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
import { useQueryParams } from "../../use-query-params"
|
||||
|
||||
type UseCustomerTableQueryProps = {
|
||||
@@ -26,7 +26,7 @@ export const useCustomerTableQuery = ({
|
||||
const { offset, groups, created_at, updated_at, has_account, q, order } =
|
||||
queryObject
|
||||
|
||||
const searchParams: AdminGetCustomersParams = {
|
||||
const searchParams: HttpTypes.AdminCustomerFilters = {
|
||||
limit: pageSize,
|
||||
offset: offset ? Number(offset) : 0,
|
||||
groups: groups?.split(","),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { AdminGetOrdersParams } from "@medusajs/medusa"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
import { useQueryParams } from "../../use-query-params"
|
||||
|
||||
type UseOrderTableQueryProps = {
|
||||
@@ -37,7 +37,7 @@ export const useOrderTableQuery = ({
|
||||
order,
|
||||
} = queryObject
|
||||
|
||||
const searchParams: AdminGetOrdersParams = {
|
||||
const searchParams: HttpTypes.AdminOrderFilters = {
|
||||
limit: pageSize,
|
||||
offset: offset ? Number(offset) : 0,
|
||||
sales_channel_id: sales_channel_id?.split(","),
|
||||
|
||||
+4
-3
@@ -1,4 +1,4 @@
|
||||
import { AdminGetShippingOptionsParams } from "@medusajs/medusa"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
import { useQueryParams } from "../../use-query-params"
|
||||
|
||||
type UseShippingOptionTableQueryProps = {
|
||||
@@ -29,10 +29,11 @@ export const useShippingOptionTableQuery = ({
|
||||
const { offset, order, q, admin_only, is_return, created_at, updated_at } =
|
||||
queryObject
|
||||
|
||||
const searchParams: AdminGetShippingOptionsParams = {
|
||||
const searchParams: HttpTypes.AdminShippingOptionListParams = {
|
||||
limit: pageSize,
|
||||
offset: offset ? Number(offset) : 0,
|
||||
region_id: regionId,
|
||||
// TODO: We don't allow region_id in the API yet
|
||||
// region_id: regionId,
|
||||
is_return: is_return ? is_return === "true" : undefined,
|
||||
admin_only: admin_only ? admin_only === "true" : undefined,
|
||||
q,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { AdminGetTaxRatesParams } from "@medusajs/medusa"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
import { useQueryParams } from "../../use-query-params"
|
||||
|
||||
type UseTaxRateTableQueryProps = {
|
||||
@@ -17,7 +17,7 @@ export const useTaxRateTableQuery = ({
|
||||
|
||||
const { offset, q, order, created_at, updated_at } = queryObject
|
||||
|
||||
const searchParams: AdminGetTaxRatesParams = {
|
||||
const searchParams: HttpTypes.AdminTaxRateListParams = {
|
||||
limit: pageSize,
|
||||
offset: offset ? Number(offset) : 0,
|
||||
order,
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
import { AddressDTO } from "@medusajs/types"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
|
||||
import { countries, getCountryByIso2 } from "./data/countries"
|
||||
|
||||
export const isSameAddress = (a: AddressDTO | null, b: AddressDTO | null) => {
|
||||
export const isSameAddress = (
|
||||
a?: HttpTypes.AdminOrderAddress | null,
|
||||
b?: HttpTypes.AdminOrderAddress | null
|
||||
) => {
|
||||
if (!a || !b) {
|
||||
return false
|
||||
}
|
||||
@@ -22,7 +25,7 @@ export const isSameAddress = (a: AddressDTO | null, b: AddressDTO | null) => {
|
||||
export const getFormattedAddress = ({
|
||||
address,
|
||||
}: {
|
||||
address?: Partial<AddressDTO> | null
|
||||
address?: HttpTypes.AdminOrderAddress | null
|
||||
}) => {
|
||||
if (!address) {
|
||||
return []
|
||||
@@ -70,7 +73,7 @@ export const getFormattedAddress = ({
|
||||
}
|
||||
|
||||
if (country) {
|
||||
formattedAddress.push(country.display_name)
|
||||
formattedAddress.push(country.display_name!)
|
||||
} else if (country_code) {
|
||||
const country = getCountryByIso2(country_code)
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ import { ProtectedRoute } from "../../components/authentication/protected-route"
|
||||
import { MainLayout } from "../../components/layout/main-layout"
|
||||
import { SettingsLayout } from "../../components/layout/settings-layout"
|
||||
import { ErrorBoundary } from "../../components/utilities/error-boundary"
|
||||
import { PriceListRes } from "../../types/api-responses"
|
||||
|
||||
import { getCountryByIso2 } from "../../lib/data/countries"
|
||||
import {
|
||||
@@ -415,7 +414,8 @@ export const RouteMap: RouteObject[] = [
|
||||
lazy: () =>
|
||||
import("../../routes/price-lists/price-list-detail"),
|
||||
handle: {
|
||||
crumb: (data: PriceListRes) => data.price_list.title,
|
||||
crumb: (data: HttpTypes.AdminPriceListResponse) =>
|
||||
data.price_list.title,
|
||||
},
|
||||
children: [
|
||||
{
|
||||
|
||||
+4
-4
@@ -1,5 +1,4 @@
|
||||
import { ArrowPath } from "@medusajs/icons"
|
||||
import { Customer, Order } from "@medusajs/medusa"
|
||||
import { Button, Container, Heading } from "@medusajs/ui"
|
||||
import { keepPreviousData } from "@tanstack/react-query"
|
||||
import { createColumnHelper } from "@tanstack/react-table"
|
||||
@@ -12,9 +11,10 @@ import { useOrderTableColumns } from "../../../../../hooks/table/columns/use-ord
|
||||
import { useOrderTableFilters } from "../../../../../hooks/table/filters/use-order-table-filters"
|
||||
import { useOrderTableQuery } from "../../../../../hooks/table/query/use-order-table-query"
|
||||
import { useDataTable } from "../../../../../hooks/use-data-table"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
|
||||
type CustomerGeneralSectionProps = {
|
||||
customer: Customer
|
||||
customer: HttpTypes.AdminCustomer
|
||||
}
|
||||
|
||||
const PAGE_SIZE = 10
|
||||
@@ -83,7 +83,7 @@ export const CustomerOrderSection = ({
|
||||
)
|
||||
}
|
||||
|
||||
const CustomerOrderActions = ({ order }: { order: Order }) => {
|
||||
const CustomerOrderActions = ({ order }: { order: HttpTypes.AdminOrder }) => {
|
||||
const { t } = useTranslation()
|
||||
|
||||
return (
|
||||
@@ -103,7 +103,7 @@ const CustomerOrderActions = ({ order }: { order: Order }) => {
|
||||
)
|
||||
}
|
||||
|
||||
const columnHelper = createColumnHelper<Order>()
|
||||
const columnHelper = createColumnHelper<HttpTypes.AdminOrder>()
|
||||
|
||||
const useColumns = () => {
|
||||
const base = useOrderTableColumns({ exclude: ["customer"] })
|
||||
|
||||
+4
-7
@@ -1,18 +1,15 @@
|
||||
import { zodResolver } from "@hookform/resolvers/zod"
|
||||
import { Order } from "@medusajs/medusa"
|
||||
import { Button } from "@medusajs/ui"
|
||||
import { useForm } from "react-hook-form"
|
||||
import { useTranslation } from "react-i18next"
|
||||
import { z } from "zod"
|
||||
import { TransferOwnerShipForm } from "../../../../../components/forms/transfer-ownership-form"
|
||||
import {
|
||||
RouteDrawer,
|
||||
useRouteModal,
|
||||
} from "../../../../../components/modals"
|
||||
import { RouteDrawer, useRouteModal } from "../../../../../components/modals"
|
||||
import { TransferOwnershipSchema } from "../../../../../lib/schemas"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
|
||||
type TransferCustomerOrderOwnershipFormProps = {
|
||||
order: Order
|
||||
order: HttpTypes.AdminOrder
|
||||
}
|
||||
|
||||
export const TransferCustomerOrderOwnershipForm = ({
|
||||
@@ -23,7 +20,7 @@ export const TransferCustomerOrderOwnershipForm = ({
|
||||
|
||||
const form = useForm<z.infer<typeof TransferOwnershipSchema>>({
|
||||
defaultValues: {
|
||||
current_owner_id: order.customer_id,
|
||||
current_owner_id: order.customer_id ?? undefined,
|
||||
new_owner_id: "",
|
||||
},
|
||||
resolver: zodResolver(TransferOwnershipSchema),
|
||||
|
||||
+2
-3
@@ -1,12 +1,11 @@
|
||||
import { Button, Container, Heading } from "@medusajs/ui"
|
||||
|
||||
import { InventoryItemRes } from "../../../../types/api-responses"
|
||||
import { ItemLocationListTable } from "./location-levels-table/location-list-table"
|
||||
import { Link } from "react-router-dom"
|
||||
import { useTranslation } from "react-i18next"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
|
||||
type InventoryItemLocationLevelsSectionProps = {
|
||||
inventoryItem: InventoryItemRes["inventory_item"]
|
||||
inventoryItem: HttpTypes.AdminInventoryItemResponse["inventory_item"]
|
||||
}
|
||||
export const InventoryItemLocationLevelsSection = ({
|
||||
inventoryItem,
|
||||
|
||||
+2
-3
@@ -1,12 +1,11 @@
|
||||
import { Button, Container, Heading } from "@medusajs/ui"
|
||||
|
||||
import { InventoryItemRes } from "../../../../types/api-responses"
|
||||
import { Link } from "react-router-dom"
|
||||
import { ReservationItemTable } from "./reservations-table/reservation-list-table"
|
||||
import { useTranslation } from "react-i18next"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
|
||||
type InventoryItemLocationLevelsSectionProps = {
|
||||
inventoryItem: InventoryItemRes["inventory_item"]
|
||||
inventoryItem: HttpTypes.AdminInventoryItemResponse["inventory_item"]
|
||||
}
|
||||
export const InventoryItemReservationsSection = ({
|
||||
inventoryItem,
|
||||
|
||||
+2
-2
@@ -1,7 +1,7 @@
|
||||
import { PencilSquare, Trash } from "@medusajs/icons"
|
||||
import { toast, usePrompt } from "@medusajs/ui"
|
||||
|
||||
import { InventoryTypes } from "@medusajs/types"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
import { useTranslation } from "react-i18next"
|
||||
import { ActionMenu } from "../../../../../components/common/action-menu"
|
||||
import { useDeleteReservationItem } from "../../../../../hooks/api/reservations"
|
||||
@@ -9,7 +9,7 @@ import { useDeleteReservationItem } from "../../../../../hooks/api/reservations"
|
||||
export const ReservationActions = ({
|
||||
reservation,
|
||||
}: {
|
||||
reservation: InventoryTypes.ReservationItemDTO
|
||||
reservation: HttpTypes.AdminReservation
|
||||
}) => {
|
||||
const { t } = useTranslation()
|
||||
const prompt = usePrompt()
|
||||
|
||||
+8
-5
@@ -1,10 +1,13 @@
|
||||
import { useMemo } from "react"
|
||||
import { InventoryTypes } from "@medusajs/types"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
|
||||
import { DataTable } from "../../../../../components/table/data-table"
|
||||
import { useDataTable } from "../../../../../hooks/use-data-table"
|
||||
import { useReservationItems } from "../../../../../hooks/api/reservations"
|
||||
import { useReservationTableColumn } from "./use-reservation-list-table-columns"
|
||||
import {
|
||||
ExtendedReservationItem,
|
||||
useReservationTableColumn,
|
||||
} from "./use-reservation-list-table-columns"
|
||||
import { useReservationsTableQuery } from "./use-reservation-list-table-query"
|
||||
import { useStockLocations } from "../../../../../hooks/api"
|
||||
|
||||
@@ -13,7 +16,7 @@ const PAGE_SIZE = 20
|
||||
export const ReservationItemTable = ({
|
||||
inventoryItem,
|
||||
}: {
|
||||
inventoryItem: InventoryTypes.InventoryItemDTO
|
||||
inventoryItem: HttpTypes.AdminInventoryItemResponse["inventory_item"]
|
||||
}) => {
|
||||
const { searchParams, raw } = useReservationsTableQuery({
|
||||
pageSize: PAGE_SIZE,
|
||||
@@ -29,7 +32,7 @@ export const ReservationItemTable = ({
|
||||
id: (reservations || []).map((r) => r.location_id),
|
||||
})
|
||||
|
||||
const data = useMemo(() => {
|
||||
const data = useMemo<ExtendedReservationItem[]>(() => {
|
||||
const locationMap = new Map((stock_locations || []).map((l) => [l.id, l]))
|
||||
|
||||
return (reservations || []).map((r) => ({
|
||||
@@ -45,7 +48,7 @@ export const ReservationItemTable = ({
|
||||
columns,
|
||||
count,
|
||||
enablePagination: true,
|
||||
getRowId: (row: InventoryTypes.ReservationItemDTO) => row.id,
|
||||
getRowId: (row: ExtendedReservationItem) => row.id,
|
||||
pageSize: PAGE_SIZE,
|
||||
})
|
||||
|
||||
|
||||
+4
-6
@@ -1,19 +1,17 @@
|
||||
import { InventoryTypes, StockLocationDTO } from "@medusajs/types"
|
||||
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
import { PlaceholderCell } from "../../../../../components/table/table-cells/common/placeholder-cell"
|
||||
import { ReservationActions } from "./reservation-actions"
|
||||
import { createColumnHelper } from "@tanstack/react-table"
|
||||
import { useMemo } from "react"
|
||||
import { useTranslation } from "react-i18next"
|
||||
import { DateCell } from "../../../../../components/table/table-cells/common/date-cell"
|
||||
import { CreatedAtCell } from "../../../../../components/table/table-cells/common/created-at-cell"
|
||||
|
||||
/**
|
||||
* Adds missing properties to the InventoryItemDTO type.
|
||||
*/
|
||||
interface ExtendedReservationItem extends InventoryTypes.ReservationItemDTO {
|
||||
line_item: { order_id: string }
|
||||
location: StockLocationDTO
|
||||
export interface ExtendedReservationItem extends HttpTypes.AdminReservation {
|
||||
line_item?: { order_id: string }
|
||||
location?: HttpTypes.AdminStockLocation
|
||||
}
|
||||
|
||||
const columnHelper = createColumnHelper<ExtendedReservationItem>()
|
||||
|
||||
+6
-7
@@ -2,8 +2,6 @@ import { Trash } from "@medusajs/icons"
|
||||
import { useMemo } from "react"
|
||||
import { useTranslation } from "react-i18next"
|
||||
import * as zod from "zod"
|
||||
|
||||
import { LineItem } from "@medusajs/medusa"
|
||||
import { Input, Text } from "@medusajs/ui"
|
||||
import { UseFormReturn } from "react-hook-form"
|
||||
|
||||
@@ -14,9 +12,10 @@ import { MoneyAmountCell } from "../../../../../components/table/table-cells/com
|
||||
import { useProductVariant } from "../../../../../hooks/api/products.tsx"
|
||||
import { getFulfillableQuantity } from "../../../../../lib/order-item.ts"
|
||||
import { CreateFulfillmentSchema } from "./constants.ts"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
|
||||
type OrderEditItemProps = {
|
||||
item: LineItem
|
||||
item: HttpTypes.AdminOrderLineItem
|
||||
currencyCode: string
|
||||
locationId?: string
|
||||
onItemRemove: (itemId: string) => void
|
||||
@@ -33,8 +32,8 @@ export function OrderCreateFulfillmentItem({
|
||||
const { t } = useTranslation()
|
||||
|
||||
const { variant } = useProductVariant(
|
||||
item.variant.product_id,
|
||||
item.variant_id,
|
||||
item.variant!.product_id!,
|
||||
item.variant_id!,
|
||||
{
|
||||
fields: "*inventory,*inventory.location_levels",
|
||||
}
|
||||
@@ -79,10 +78,10 @@ export function OrderCreateFulfillmentItem({
|
||||
<Text className="txt-small" as="span" weight="plus">
|
||||
{item.title}
|
||||
</Text>
|
||||
{item.variant.sku && <span>({item.variant.sku})</span>}
|
||||
{item.variant?.sku && <span>({item.variant.sku})</span>}
|
||||
</div>
|
||||
<Text as="div" className="text-ui-fg-subtle txt-small">
|
||||
{item.variant.title}
|
||||
{item.variant?.title ?? ""}
|
||||
</Text>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+2
-3
@@ -1,13 +1,12 @@
|
||||
import { Order } from "@medusajs/medusa"
|
||||
import { Container, Heading } from "@medusajs/ui"
|
||||
import { useTranslation } from "react-i18next"
|
||||
|
||||
import { ArrowPath, CurrencyDollar, Envelope, FlyingBox } from "@medusajs/icons"
|
||||
import { ActionMenu } from "../../../../../components/common/action-menu"
|
||||
import { CustomerInfo } from "../../../../../components/common/customer-info"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
|
||||
type OrderCustomerSectionProps = {
|
||||
order: Order
|
||||
order: HttpTypes.AdminOrder
|
||||
}
|
||||
|
||||
export const OrderCustomerSection = ({ order }: OrderCustomerSectionProps) => {
|
||||
|
||||
+4
-4
@@ -1,5 +1,4 @@
|
||||
import { XCircle } from "@medusajs/icons"
|
||||
import { Order } from "@medusajs/medusa"
|
||||
import {
|
||||
Container,
|
||||
Copy,
|
||||
@@ -16,9 +15,10 @@ import {
|
||||
getOrderFulfillmentStatus,
|
||||
getOrderPaymentStatus,
|
||||
} from "../../../../../lib/order-helpers"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
|
||||
type OrderGeneralSectionProps = {
|
||||
order: Order
|
||||
order: HttpTypes.AdminOrder
|
||||
}
|
||||
|
||||
export const OrderGeneralSection = ({ order }: OrderGeneralSectionProps) => {
|
||||
@@ -82,7 +82,7 @@ export const OrderGeneralSection = ({ order }: OrderGeneralSectionProps) => {
|
||||
)
|
||||
}
|
||||
|
||||
const FulfillmentBadge = ({ order }: { order: Order }) => {
|
||||
const FulfillmentBadge = ({ order }: { order: HttpTypes.AdminOrder }) => {
|
||||
const { t } = useTranslation()
|
||||
|
||||
const { label, color } = getOrderFulfillmentStatus(
|
||||
@@ -97,7 +97,7 @@ const FulfillmentBadge = ({ order }: { order: Order }) => {
|
||||
)
|
||||
}
|
||||
|
||||
const PaymentBadge = ({ order }: { order: Order }) => {
|
||||
const PaymentBadge = ({ order }: { order: HttpTypes.AdminOrder }) => {
|
||||
const { t } = useTranslation()
|
||||
|
||||
/**
|
||||
|
||||
+20
-18
@@ -1,8 +1,4 @@
|
||||
import { ArrowDownRightMini, DocumentText, XCircle } from "@medusajs/icons"
|
||||
import {
|
||||
Payment as MedusaPayment,
|
||||
Refund as MedusaRefund,
|
||||
} from "@medusajs/medusa"
|
||||
import { AdminPaymentCollection, HttpTypes } from "@medusajs/types"
|
||||
import {
|
||||
Badge,
|
||||
@@ -44,7 +40,7 @@ export const OrderPaymentSection = ({ order }: OrderPaymentSectionProps) => {
|
||||
const refunds = payments
|
||||
.map((payment) => payment?.refunds)
|
||||
.flat(1)
|
||||
.filter(Boolean)
|
||||
.filter(Boolean) as HttpTypes.AdminRefund[]
|
||||
|
||||
return (
|
||||
<Container className="divide-y divide-dashed p-0">
|
||||
@@ -122,7 +118,7 @@ const Refund = ({
|
||||
<div className="flex items-center justify-end">{RefundReasonBadge}</div>
|
||||
<div className="flex items-center justify-end">
|
||||
<Text size="small" leading="compact">
|
||||
- {getLocaleAmount(refund.amount, currencyCode)}
|
||||
- {getLocaleAmount(refund.amount as number, currencyCode)}
|
||||
</Text>
|
||||
</div>
|
||||
</div>
|
||||
@@ -136,8 +132,8 @@ const Payment = ({
|
||||
currencyCode,
|
||||
}: {
|
||||
order: HttpTypes.AdminOrder
|
||||
payment: MedusaPayment
|
||||
refunds: MedusaRefund[]
|
||||
payment: HttpTypes.AdminPayment
|
||||
refunds: HttpTypes.AdminRefund[]
|
||||
currencyCode: string
|
||||
}) => {
|
||||
const { t } = useTranslation()
|
||||
@@ -148,7 +144,7 @@ const Payment = ({
|
||||
const res = await prompt({
|
||||
title: t("orders.payment.capture"),
|
||||
description: t("orders.payment.capturePayment", {
|
||||
amount: formatCurrency(payment.amount, currencyCode),
|
||||
amount: formatCurrency(payment.amount as number, currencyCode),
|
||||
}),
|
||||
confirmText: t("actions.confirm"),
|
||||
cancelText: t("actions.cancel"),
|
||||
@@ -160,12 +156,12 @@ const Payment = ({
|
||||
}
|
||||
|
||||
await mutateAsync(
|
||||
{ amount: payment.amount },
|
||||
{ amount: payment.amount as number },
|
||||
{
|
||||
onSuccess: () => {
|
||||
toast.success(
|
||||
t("orders.payment.capturePaymentSuccess", {
|
||||
amount: formatCurrency(payment.amount, currencyCode),
|
||||
amount: formatCurrency(payment.amount as number, currencyCode),
|
||||
})
|
||||
)
|
||||
},
|
||||
@@ -197,7 +193,10 @@ const Payment = ({
|
||||
{cleanId}
|
||||
</Text>
|
||||
<Text size="small" leading="compact">
|
||||
{format(new Date(payment.created_at), "dd MMM, yyyy, HH:mm:ss")}
|
||||
{format(
|
||||
new Date(payment.created_at as string),
|
||||
"dd MMM, yyyy, HH:mm:ss"
|
||||
)}
|
||||
</Text>
|
||||
</div>
|
||||
<div className="flex items-center justify-end">
|
||||
@@ -212,7 +211,7 @@ const Payment = ({
|
||||
</div>
|
||||
<div className="flex items-center justify-end">
|
||||
<Text size="small" leading="compact">
|
||||
{getLocaleAmount(payment.amount, payment.currency_code)}
|
||||
{getLocaleAmount(payment.amount as number, payment.currency_code)}
|
||||
</Text>
|
||||
</div>
|
||||
<ActionMenu
|
||||
@@ -260,8 +259,8 @@ const PaymentBreakdown = ({
|
||||
currencyCode,
|
||||
}: {
|
||||
order: HttpTypes.AdminOrder
|
||||
payments: MedusaPayment[]
|
||||
refunds: MedusaRefund[]
|
||||
payments: HttpTypes.AdminPayment[]
|
||||
refunds: HttpTypes.AdminRefund[]
|
||||
currencyCode: string
|
||||
}) => {
|
||||
/**
|
||||
@@ -271,7 +270,10 @@ const PaymentBreakdown = ({
|
||||
|
||||
const entries = [...orderRefunds, ...payments]
|
||||
.sort((a, b) => {
|
||||
return new Date(a.created_at).getTime() - new Date(b.created_at).getTime()
|
||||
return (
|
||||
new Date(a.created_at as string).getTime() -
|
||||
new Date(b.created_at as string).getTime()
|
||||
)
|
||||
})
|
||||
.map((entry) => {
|
||||
return {
|
||||
@@ -279,8 +281,8 @@ const PaymentBreakdown = ({
|
||||
type: entry.id.startsWith("pay_") ? "payment" : "refund",
|
||||
}
|
||||
}) as (
|
||||
| { type: "payment"; event: MedusaPayment }
|
||||
| { type: "refund"; event: MedusaRefund }
|
||||
| { type: "payment"; event: HttpTypes.AdminPayment }
|
||||
| { type: "refund"; event: HttpTypes.AdminRefund }
|
||||
)[]
|
||||
|
||||
return (
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { LoaderFunctionArgs } from "react-router-dom"
|
||||
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
import { ordersQueryKeys } from "../../../hooks/api/orders"
|
||||
import { sdk } from "../../../lib/client"
|
||||
import { queryClient } from "../../../lib/query-client"
|
||||
import { OrderRes } from "../../../types/api-responses"
|
||||
import { DEFAULT_FIELDS } from "./constants"
|
||||
|
||||
const orderDetailQuery = (id: string) => ({
|
||||
@@ -19,7 +19,7 @@ export const orderLoader = async ({ params }: LoaderFunctionArgs) => {
|
||||
const query = orderDetailQuery(id!)
|
||||
|
||||
return (
|
||||
queryClient.getQueryData<OrderRes>(query.queryKey) ??
|
||||
queryClient.getQueryData<HttpTypes.AdminOrderResponse>(query.queryKey) ??
|
||||
(await queryClient.fetchQuery(query))
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
import { LoaderFunctionArgs } from "react-router-dom"
|
||||
import { priceListsQueryKeys } from "../../../hooks/api/price-lists"
|
||||
import { sdk } from "../../../lib/client"
|
||||
import { queryClient } from "../../../lib/query-client"
|
||||
import { PriceListRes } from "../../../types/api-responses"
|
||||
|
||||
const pricingDetailQuery = (id: string) => ({
|
||||
queryKey: priceListsQueryKeys.detail(id),
|
||||
@@ -14,7 +14,8 @@ export const pricingLoader = async ({ params }: LoaderFunctionArgs) => {
|
||||
const query = pricingDetailQuery(id!)
|
||||
|
||||
return (
|
||||
queryClient.getQueryData<PriceListRes>(query.queryKey) ??
|
||||
(await queryClient.fetchQuery(query))
|
||||
queryClient.getQueryData<HttpTypes.AdminPriceListResponse>(
|
||||
query.queryKey
|
||||
) ?? (await queryClient.fetchQuery(query))
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { QueryClient } from "@tanstack/react-query"
|
||||
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
import { productsQueryKeys } from "../../../hooks/api/products"
|
||||
import { sdk } from "../../../lib/client"
|
||||
import { queryClient } from "../../../lib/query-client"
|
||||
import { ProductListRes } from "../../../types/api-responses"
|
||||
|
||||
const productsListQuery = () => ({
|
||||
queryKey: productsQueryKeys.list({ limit: 20, offset: 0 }),
|
||||
@@ -15,8 +15,9 @@ export const productsLoader = (client: QueryClient) => {
|
||||
const query = productsListQuery()
|
||||
|
||||
return (
|
||||
queryClient.getQueryData<ProductListRes>(query.queryKey) ??
|
||||
(await client.fetchQuery(query))
|
||||
queryClient.getQueryData<HttpTypes.AdminProductListResponse>(
|
||||
query.queryKey
|
||||
) ?? (await client.fetchQuery(query))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -1,4 +1,3 @@
|
||||
import { SalesChannel } from "@medusajs/medusa"
|
||||
import { Button, Checkbox } from "@medusajs/ui"
|
||||
import { RowSelectionState, createColumnHelper } from "@tanstack/react-table"
|
||||
import { useEffect, useMemo, useState } from "react"
|
||||
@@ -153,7 +152,8 @@ export const EditSalesChannelsForm = ({
|
||||
)
|
||||
}
|
||||
|
||||
const columnHelper = createColumnHelper<SalesChannel>()
|
||||
const columnHelper =
|
||||
createColumnHelper<HttpTypes.AdminSalesChannelResponse["sales_channel"]>()
|
||||
|
||||
const useColumns = () => {
|
||||
const columns = useSalesChannelTableColumns()
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
import { LoaderFunctionArgs } from "react-router-dom"
|
||||
import { promotionsQueryKeys } from "../../../hooks/api/promotions"
|
||||
import { sdk } from "../../../lib/client"
|
||||
import { queryClient } from "../../../lib/query-client"
|
||||
import { PromotionRes } from "../../../types/api-responses"
|
||||
|
||||
const promotionDetailQuery = (id: string) => ({
|
||||
queryKey: promotionsQueryKeys.detail(id),
|
||||
@@ -14,7 +14,8 @@ export const promotionLoader = async ({ params }: LoaderFunctionArgs) => {
|
||||
const query = promotionDetailQuery(id!)
|
||||
|
||||
return (
|
||||
queryClient.getQueryData<PromotionRes>(query.queryKey) ??
|
||||
(await queryClient.fetchQuery(query))
|
||||
queryClient.getQueryData<HttpTypes.AdminPromotionResponse>(
|
||||
query.queryKey
|
||||
) ?? (await queryClient.fetchQuery(query))
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
import { QueryClient } from "@tanstack/react-query"
|
||||
import { promotionsQueryKeys } from "../../../hooks/api/promotions"
|
||||
import { sdk } from "../../../lib/client"
|
||||
import { queryClient } from "../../../lib/query-client"
|
||||
import { PromotionListRes } from "../../../types/api-responses"
|
||||
|
||||
const params = {
|
||||
limit: 20,
|
||||
@@ -19,8 +19,9 @@ export const promotionsLoader = (client: QueryClient) => {
|
||||
const query = promotionsListQuery()
|
||||
|
||||
return (
|
||||
queryClient.getQueryData<PromotionListRes>(query.queryKey) ??
|
||||
(await client.fetchQuery(query))
|
||||
queryClient.getQueryData<HttpTypes.AdminPromotionListResponse>(
|
||||
query.queryKey
|
||||
) ?? (await client.fetchQuery(query))
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+5
-6
@@ -7,7 +7,7 @@ import {
|
||||
} from "../../../../../components/modals"
|
||||
|
||||
import { zodResolver } from "@hookform/resolvers/zod"
|
||||
import { InventoryTypes } from "@medusajs/types"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
import React from "react"
|
||||
import { useForm } from "react-hook-form"
|
||||
import { useTranslation } from "react-i18next"
|
||||
@@ -16,7 +16,6 @@ import { Combobox } from "../../../../../components/inputs/combobox"
|
||||
import { useInventoryItems } from "../../../../../hooks/api/inventory"
|
||||
import { useCreateReservationItem } from "../../../../../hooks/api/reservations"
|
||||
import { useStockLocations } from "../../../../../hooks/api/stock-locations"
|
||||
import { InventoryItemRes } from "../../../../../types/api-responses"
|
||||
|
||||
export const CreateReservationSchema = zod.object({
|
||||
inventory_item_id: zod.string().min(1),
|
||||
@@ -68,7 +67,7 @@ export const ReservationCreateForm = (props: { inventoryItemId?: string }) => {
|
||||
const inventoryItemId = form.watch("inventory_item_id")
|
||||
const selectedInventoryItem = inventory_items?.find(
|
||||
(it) => it.id === inventoryItemId
|
||||
) as InventoryItemRes["inventory_item"] | undefined
|
||||
) as HttpTypes.AdminInventoryItemResponse["inventory_item"] | undefined
|
||||
|
||||
const locationId = form.watch("location_id")
|
||||
const selectedLocationLevel = selectedInventoryItem?.location_levels?.find(
|
||||
@@ -81,7 +80,7 @@ export const ReservationCreateForm = (props: { inventoryItemId?: string }) => {
|
||||
{
|
||||
id:
|
||||
selectedInventoryItem?.location_levels?.map(
|
||||
(level: InventoryTypes.InventoryLevelDTO) => level.location_id
|
||||
(level: HttpTypes.AdminInventoryLevel) => level.location_id
|
||||
) ?? [],
|
||||
},
|
||||
{
|
||||
@@ -200,7 +199,7 @@ export const ReservationCreateForm = (props: { inventoryItemId?: string }) => {
|
||||
<AttributeGridRow
|
||||
title={t("inventory.available")}
|
||||
value={
|
||||
selectedLocationLevel
|
||||
selectedLocationLevel?.available_quantity
|
||||
? selectedLocationLevel.available_quantity - (quantity || 0)
|
||||
: "-"
|
||||
}
|
||||
@@ -222,7 +221,7 @@ export const ReservationCreateForm = (props: { inventoryItemId?: string }) => {
|
||||
)}
|
||||
min={1}
|
||||
max={
|
||||
selectedLocationLevel
|
||||
selectedLocationLevel?.available_quantity
|
||||
? selectedLocationLevel.available_quantity
|
||||
: 0
|
||||
}
|
||||
|
||||
+13
-11
@@ -1,6 +1,5 @@
|
||||
import * as zod from "zod"
|
||||
|
||||
import { InventoryTypes, StockLocationDTO } from "@medusajs/types"
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
import { Button, Input, Select, Text, Textarea, toast } from "@medusajs/ui"
|
||||
import { RouteDrawer, useRouteModal } from "../../../../../../components/modals"
|
||||
|
||||
@@ -10,12 +9,11 @@ import { useTranslation } from "react-i18next"
|
||||
import { z } from "zod"
|
||||
import { Form } from "../../../../../../components/common/form"
|
||||
import { useUpdateReservationItem } from "../../../../../../hooks/api/reservations"
|
||||
import { InventoryItemRes } from "../../../../../../types/api-responses"
|
||||
|
||||
type EditReservationFormProps = {
|
||||
reservation: InventoryTypes.ReservationItemDTO
|
||||
locations: StockLocationDTO[]
|
||||
item: InventoryItemRes["inventory_item"]
|
||||
reservation: HttpTypes.AdminReservationResponse["reservation"]
|
||||
locations: HttpTypes.AdminStockLocation[]
|
||||
item: HttpTypes.AdminInventoryItemResponse["inventory_item"]
|
||||
}
|
||||
|
||||
const EditReservationSchema = z.object({
|
||||
@@ -43,7 +41,9 @@ const AttributeGridRow = ({
|
||||
)
|
||||
}
|
||||
|
||||
const getDefaultValues = (reservation: InventoryTypes.ReservationItemDTO) => {
|
||||
const getDefaultValues = (
|
||||
reservation: HttpTypes.AdminReservationResponse["reservation"]
|
||||
) => {
|
||||
return {
|
||||
quantity: reservation.quantity,
|
||||
location_id: reservation.location_id,
|
||||
@@ -82,8 +82,7 @@ export const EditReservationForm = ({
|
||||
const locationId = form.watch("location_id")
|
||||
|
||||
const level = item.location_levels!.find(
|
||||
(level: InventoryTypes.InventoryLevelDTO) =>
|
||||
level.location_id === locationId
|
||||
(level: HttpTypes.AdminInventoryLevel) => level.location_id === locationId
|
||||
)
|
||||
|
||||
return (
|
||||
@@ -139,7 +138,7 @@ export const EditReservationForm = ({
|
||||
title={t("inventory.available")}
|
||||
value={
|
||||
level!.stocked_quantity -
|
||||
(level.reserved_quantity - reservation.quantity) -
|
||||
(level!.reserved_quantity - reservation.quantity) -
|
||||
reservedQuantity
|
||||
}
|
||||
/>
|
||||
@@ -157,7 +156,10 @@ export const EditReservationForm = ({
|
||||
<Input
|
||||
type="number"
|
||||
min={0}
|
||||
max={level!.available_quantity + reservation.quantity}
|
||||
max={
|
||||
(level!.available_quantity || 0) +
|
||||
(reservation.quantity || 0)
|
||||
}
|
||||
value={value || ""}
|
||||
onChange={(e) => {
|
||||
const value = e.target.value
|
||||
|
||||
+1
-1
@@ -1,10 +1,10 @@
|
||||
import { PencilSquare, Trash } from "@medusajs/icons"
|
||||
|
||||
import { ActionMenu } from "../../../../../components/common/action-menu"
|
||||
import { ExtendedReservationItem } from "@medusajs/medusa"
|
||||
import { useDeleteReservationItem } from "../../../../../hooks/api/reservations"
|
||||
import { usePrompt } from "@medusajs/ui"
|
||||
import { useTranslation } from "react-i18next"
|
||||
import { ExtendedReservationItem } from "../../../../inventory/inventory-detail/components/reservations-table/use-reservation-list-table-columns"
|
||||
|
||||
export const ReservationActions = ({
|
||||
reservation,
|
||||
|
||||
+1
-1
@@ -1,4 +1,3 @@
|
||||
import { ExtendedReservationItem } from "@medusajs/medusa"
|
||||
import { createColumnHelper } from "@tanstack/react-table"
|
||||
import { useMemo } from "react"
|
||||
import { useTranslation } from "react-i18next"
|
||||
@@ -6,6 +5,7 @@ import { LinkButton } from "../../../../../components/common/link-button"
|
||||
import { DateCell } from "../../../../../components/table/table-cells/common/date-cell"
|
||||
import { PlaceholderCell } from "../../../../../components/table/table-cells/common/placeholder-cell"
|
||||
import { ReservationActions } from "./reservation-actions"
|
||||
import { ExtendedReservationItem } from "../../../../inventory/inventory-detail/components/reservations-table/use-reservation-list-table-columns"
|
||||
|
||||
const columnHelper = createColumnHelper<ExtendedReservationItem>()
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { LoaderFunctionArgs } from "react-router-dom"
|
||||
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
import { productsQueryKeys } from "../../../hooks/api/products"
|
||||
import { sdk } from "../../../lib/client"
|
||||
import { queryClient } from "../../../lib/query-client"
|
||||
import { UserRes } from "../../../types/api-responses"
|
||||
|
||||
const userDetailQuery = (id: string) => ({
|
||||
queryKey: productsQueryKeys.detail(id),
|
||||
@@ -15,7 +15,7 @@ export const userLoader = async ({ params }: LoaderFunctionArgs) => {
|
||||
const query = userDetailQuery(id!)
|
||||
|
||||
return (
|
||||
queryClient.getQueryData<UserRes>(query.queryKey) ??
|
||||
queryClient.getQueryData<HttpTypes.AdminUserResponse>(query.queryKey) ??
|
||||
(await queryClient.fetchQuery(query))
|
||||
)
|
||||
}
|
||||
|
||||
+4
-3
@@ -1,9 +1,9 @@
|
||||
import { LoaderFunctionArgs } from "react-router-dom"
|
||||
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
import { workflowExecutionsQueryKeys } from "../../../hooks/api/workflow-executions"
|
||||
import { sdk } from "../../../lib/client"
|
||||
import { queryClient } from "../../../lib/query-client"
|
||||
import { WorkflowExecutionRes } from "../../../types/api-responses"
|
||||
|
||||
const executionDetailQuery = (id: string) => ({
|
||||
queryKey: workflowExecutionsQueryKeys.detail(id),
|
||||
@@ -15,7 +15,8 @@ export const executionLoader = async ({ params }: LoaderFunctionArgs) => {
|
||||
const query = executionDetailQuery(id!)
|
||||
|
||||
return (
|
||||
queryClient.getQueryData<WorkflowExecutionRes>(query.queryKey) ??
|
||||
(await queryClient.fetchQuery(query))
|
||||
queryClient.getQueryData<HttpTypes.AdminWorkflowExecutionResponse>(
|
||||
query.queryKey
|
||||
) ?? (await queryClient.fetchQuery(query))
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1,118 +0,0 @@
|
||||
/**
|
||||
* Temporary types for API payloads until we export them from `@medusajs/types`
|
||||
*/
|
||||
|
||||
import {
|
||||
CreateApiKeyDTO,
|
||||
CreateCampaignDTO,
|
||||
CreateFulfillmentSetDTO,
|
||||
CreateInviteDTO,
|
||||
CreatePriceListDTO,
|
||||
CreatePromotionDTO,
|
||||
CreatePromotionRuleDTO,
|
||||
CreateSalesChannelDTO,
|
||||
CreateServiceZoneDTO,
|
||||
CreateShippingOptionDTO,
|
||||
CreateShippingProfileDTO,
|
||||
CreateStockLocationInput,
|
||||
InventoryTypes,
|
||||
UpdateApiKeyDTO,
|
||||
UpdateCampaignDTO,
|
||||
UpdatePriceListDTO,
|
||||
UpdatePromotionDTO,
|
||||
UpdatePromotionRuleDTO,
|
||||
UpdateSalesChannelDTO,
|
||||
UpdateServiceZoneDTO,
|
||||
UpdateShippingOptionDTO,
|
||||
UpdateStockLocationInput,
|
||||
UpdateStoreDTO,
|
||||
UpdateUserDTO,
|
||||
} from "@medusajs/types"
|
||||
|
||||
// Auth
|
||||
export type EmailPassReq = { email: string; password: string }
|
||||
|
||||
// Stores
|
||||
export type UpdateStoreReq = UpdateStoreDTO
|
||||
|
||||
// API Keys
|
||||
export type CreateApiKeyReq = CreateApiKeyDTO
|
||||
export type UpdateApiKeyReq = UpdateApiKeyDTO
|
||||
|
||||
// Sales Channels
|
||||
export type CreateSalesChannelReq = CreateSalesChannelDTO
|
||||
export type UpdateSalesChannelReq = UpdateSalesChannelDTO
|
||||
export type AddProductsSalesChannelReq = { product_ids: string[] }
|
||||
export type RemoveProductsSalesChannelReq = { product_ids: string[] }
|
||||
|
||||
// Users
|
||||
export type UpdateUserReq = Omit<UpdateUserDTO, "id">
|
||||
|
||||
// Invites
|
||||
export type CreateInviteReq = CreateInviteDTO
|
||||
|
||||
// Stock Locations
|
||||
export type CreateStockLocationReq = CreateStockLocationInput
|
||||
export type UpdateStockLocationReq = UpdateStockLocationInput
|
||||
export type UpdateStockLocationSalesChannelsReq = {
|
||||
add?: string[]
|
||||
remove?: string[]
|
||||
}
|
||||
export type CreateFulfillmentSetReq = CreateFulfillmentSetDTO
|
||||
export type CreateServiceZoneReq = CreateServiceZoneDTO
|
||||
export type UpdateServiceZoneReq =
|
||||
| UpdateServiceZoneDTO
|
||||
|
||||
// Shipping Options
|
||||
| { region_id: string; amount: number }
|
||||
export type CreateShippingOptionReq = CreateShippingOptionDTO & {
|
||||
/**
|
||||
* The shipping option pricing
|
||||
*/
|
||||
prices: (
|
||||
| { currency_code: string; amount: number }
|
||||
| { region_id: string; amount: number }
|
||||
)[]
|
||||
}
|
||||
export type UpdateShippingOptionReq = UpdateShippingOptionDTO & {
|
||||
/**
|
||||
* The shipping option pricing
|
||||
*/
|
||||
prices: (
|
||||
| { currency_code: string; amount: number; id?: string }
|
||||
| { region_id: string; amount: number; id?: string }
|
||||
)[]
|
||||
}
|
||||
|
||||
// Shipping Profile
|
||||
export type CreateShippingProfileReq = CreateShippingProfileDTO
|
||||
|
||||
// Price Lists
|
||||
export type CreatePriceListReq = CreatePriceListDTO
|
||||
export type UpdatePriceListReq = Omit<UpdatePriceListDTO, "id">
|
||||
export type AddPriceListPricesReq = {
|
||||
prices: {
|
||||
currency_code: string
|
||||
amount: number
|
||||
variant_id: string
|
||||
}[]
|
||||
}
|
||||
export type DeletePriceListPricesReq = { ids: string[] }
|
||||
|
||||
// Promotion
|
||||
export type CreatePromotionReq = CreatePromotionDTO
|
||||
export type UpdatePromotionReq = Omit<UpdatePromotionDTO, "id">
|
||||
export type BatchAddPromotionRulesReq = { rules: CreatePromotionRuleDTO[] }
|
||||
export type BatchRemovePromotionRulesReq = { rule_ids: string[] }
|
||||
export type BatchUpdatePromotionRulesReq = { rules: UpdatePromotionRuleDTO[] }
|
||||
|
||||
// Campaign
|
||||
export type CreateCampaignReq = CreateCampaignDTO
|
||||
export type UpdateCampaignReq = UpdateCampaignDTO
|
||||
|
||||
// Reservations
|
||||
export type UpdateReservationReq = Omit<
|
||||
InventoryTypes.UpdateReservationItemInput,
|
||||
"id"
|
||||
>
|
||||
export type CreateReservationReq = InventoryTypes.CreateReservationItemInput
|
||||
@@ -1,168 +0,0 @@
|
||||
/**
|
||||
* Temporary types for API responses until we export them from `@medusajs/types`
|
||||
*/
|
||||
|
||||
import {
|
||||
CampaignDTO,
|
||||
CurrencyDTO,
|
||||
CustomerGroupDTO,
|
||||
FulfillmentDTO,
|
||||
FulfillmentProviderDTO,
|
||||
InventoryTypes,
|
||||
InviteDTO,
|
||||
OrderDTO,
|
||||
PaymentProviderDTO,
|
||||
PriceListDTO,
|
||||
PromotionDTO,
|
||||
PromotionRuleDTO,
|
||||
SalesChannelDTO,
|
||||
ShippingOptionDTO,
|
||||
ShippingProfileDTO,
|
||||
StockLocationAddressDTO,
|
||||
StockLocationDTO,
|
||||
StoreDTO,
|
||||
UserDTO,
|
||||
} from "@medusajs/types"
|
||||
|
||||
import { WorkflowExecutionDTO } from "../routes/workflow-executions/types"
|
||||
|
||||
type ListRes = {
|
||||
count: number
|
||||
offset: number
|
||||
limit: number
|
||||
}
|
||||
|
||||
type DeleteRes = {
|
||||
id: string
|
||||
object: string
|
||||
deleted: true
|
||||
}
|
||||
|
||||
// Auth
|
||||
export type EmailPassRes = { token: string }
|
||||
|
||||
// Promotions
|
||||
export type PromotionRes = { promotion: PromotionDTO }
|
||||
export type PromotionListRes = { promotions: PromotionDTO[] } & ListRes
|
||||
export type PromotionRuleAttributesListRes = { attributes: Record<any, any>[] }
|
||||
export type PromotionRuleOperatorsListRes = { operators: Record<any, any>[] }
|
||||
export type PromotionRuleValuesListRes = { values: Record<any, any>[] }
|
||||
export type PromotionRulesListRes = { rules: PromotionRuleDTO[] }
|
||||
export type PromotionDeleteRes = DeleteRes
|
||||
|
||||
// Users
|
||||
export type UserRes = { user: UserDTO }
|
||||
export type UserListRes = { users: UserDTO[] } & ListRes
|
||||
export type UserDeleteRes = DeleteRes
|
||||
|
||||
// Stores
|
||||
export type ExtendedStoreDTO = StoreDTO
|
||||
|
||||
export type StoreRes = { store: ExtendedStoreDTO }
|
||||
export type StoreListRes = { stores: ExtendedStoreDTO[] } & ListRes
|
||||
|
||||
// Fulfillments
|
||||
export type FulfillmentRes = { fulfillment: FulfillmentDTO }
|
||||
export type FulfillmentListRes = { fulfillments: FulfillmentDTO[] } & ListRes
|
||||
export type FulfillmentDeleteRes = DeleteRes
|
||||
|
||||
// Reservations
|
||||
export type ReservationRes = { reservation: InventoryTypes.ReservationItemDTO }
|
||||
export type ReservationListRes = {
|
||||
reservations: InventoryTypes.ReservationItemDTO[]
|
||||
} & ListRes
|
||||
export type ReservationDeleteRes = DeleteRes
|
||||
|
||||
// Campaigns
|
||||
export type CampaignRes = { campaign: CampaignDTO }
|
||||
export type CampaignListRes = { campaigns: CampaignDTO[] } & ListRes
|
||||
export type CampaignDeleteRes = DeleteRes
|
||||
|
||||
// API Keys
|
||||
export type ApiKeyDeleteRes = DeleteRes
|
||||
|
||||
// Sales Channels
|
||||
export type SalesChannelDeleteRes = DeleteRes
|
||||
|
||||
// Currencies
|
||||
export type CurrencyRes = { currency: CurrencyDTO }
|
||||
export type CurrencyListRes = { currencies: CurrencyDTO[] } & ListRes
|
||||
|
||||
// Invites
|
||||
export type InviteRes = { invite: InviteDTO }
|
||||
export type InviteListRes = { invites: InviteDTO[] } & ListRes
|
||||
export type InviteDeleteRes = DeleteRes
|
||||
|
||||
// Orders
|
||||
export type OrderRes = { order: OrderDTO }
|
||||
export type OrderListRes = { orders: OrderDTO[] } & ListRes
|
||||
|
||||
// Payments
|
||||
|
||||
export type PaymentProvidersListRes = {
|
||||
payment_providers: PaymentProviderDTO[]
|
||||
}
|
||||
|
||||
// Stock Locations
|
||||
export type ExtendedStockLocationDTO = StockLocationDTO & {
|
||||
address: StockLocationAddressDTO | null
|
||||
sales_channels: SalesChannelDTO[] | null
|
||||
}
|
||||
export type StockLocationRes = { stock_location: ExtendedStockLocationDTO }
|
||||
export type StockLocationListRes = {
|
||||
stock_locations: ExtendedStockLocationDTO[]
|
||||
} & ListRes
|
||||
export type StockLocationDeleteRes = DeleteRes
|
||||
export type FulfillmentSetDeleteRes = DeleteRes
|
||||
export type ServiceZoneDeleteRes = DeleteRes
|
||||
|
||||
// Fulfillment providers
|
||||
export type FulfillmentProvidersListRes = {
|
||||
fulfillment_providers: FulfillmentProviderDTO
|
||||
} & ListRes
|
||||
|
||||
// Shipping options
|
||||
export type ShippingOptionRes = { shipping_option: ShippingOptionDTO }
|
||||
export type ShippingOptionDeleteRes = DeleteRes
|
||||
export type ShippingOptionListRes = {
|
||||
shipping_options: ShippingOptionDTO[]
|
||||
} & ListRes
|
||||
|
||||
// Shipping profile
|
||||
export type ShippingProfileRes = { shipping_profile: ShippingProfileDTO }
|
||||
export type ShippingProfileListRes = {
|
||||
shipping_profiles: ShippingProfileDTO[]
|
||||
} & ListRes
|
||||
export type ShippingProfileDeleteRes = DeleteRes
|
||||
|
||||
// Workflow Executions
|
||||
export type WorkflowExecutionRes = { workflow_execution: WorkflowExecutionDTO }
|
||||
export type WorkflowExecutionListRes = {
|
||||
workflow_executions: WorkflowExecutionDTO[]
|
||||
} & ListRes
|
||||
|
||||
// Taxes
|
||||
export type TaxRegionDeleteRes = DeleteRes
|
||||
export type TaxRateDeleteRes = DeleteRes
|
||||
|
||||
// Reservations
|
||||
export type ReservationItemDeleteRes = DeleteRes
|
||||
|
||||
export type ReservationItemListRes = {
|
||||
reservations: InventoryTypes.ReservationItemDTO[]
|
||||
} & ListRes
|
||||
|
||||
export type ReservationItemRes = {
|
||||
reservation: InventoryTypes.ReservationItemDTO
|
||||
}
|
||||
// Price Lists
|
||||
export type PriceListRes = { price_list: PriceListDTO }
|
||||
export type PriceListListRes = { price_lists: PriceListDTO[] } & ListRes
|
||||
export type PriceListDeleteRes = DeleteRes
|
||||
|
||||
// Customer Groups
|
||||
export type CustomerGroupRes = { customer_group: CustomerGroupDTO }
|
||||
export type CustomerGroupListRes = {
|
||||
customer_groups: CustomerGroupDTO[]
|
||||
} & ListRes
|
||||
export type CustomerGroupDeleteRes = DeleteRes
|
||||
@@ -1,3 +1,4 @@
|
||||
import { HttpTypes } from "@medusajs/types"
|
||||
import { Client } from "../client"
|
||||
import { Config } from "../types"
|
||||
|
||||
@@ -13,7 +14,7 @@ export class Auth {
|
||||
register = async (
|
||||
actor: "customer" | "user",
|
||||
method: "emailpass",
|
||||
payload: { email: string; password: string }
|
||||
payload: HttpTypes.AdminSignUpWithEmailPassword
|
||||
) => {
|
||||
const { token } = await this.client.fetch<{ token: string }>(
|
||||
`/auth/${actor}/${method}/register`,
|
||||
@@ -31,7 +32,7 @@ export class Auth {
|
||||
login = async (
|
||||
actor: "customer" | "user",
|
||||
method: "emailpass",
|
||||
payload: { email: string; password: string }
|
||||
payload: HttpTypes.AdminSignInWithEmailPassword
|
||||
) => {
|
||||
const { token } = await this.client.fetch<{ token: string }>(
|
||||
`/auth/${actor}/${method}`,
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
export interface BaseAddress {
|
||||
id: string
|
||||
customer_id?: string
|
||||
first_name?: string
|
||||
last_name?: string
|
||||
phone?: string
|
||||
company?: string
|
||||
address_1?: string
|
||||
address_2?: string
|
||||
city?: string
|
||||
country_code?: string
|
||||
province?: string
|
||||
postal_code?: string
|
||||
metadata: Record<string, unknown> | null
|
||||
created_at: Date | string
|
||||
updated_at: Date | string
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
export * from "./entities"
|
||||
@@ -0,0 +1 @@
|
||||
export * from "./payloads"
|
||||
@@ -0,0 +1,7 @@
|
||||
export interface AdminSignUpWithEmailPassword {
|
||||
email: string
|
||||
password: string
|
||||
}
|
||||
|
||||
export interface AdminSignInWithEmailPassword
|
||||
extends AdminSignUpWithEmailPassword {}
|
||||
@@ -1,5 +1,5 @@
|
||||
import { OperatorMap } from "../../../dal"
|
||||
import { SelectParams } from "../../common"
|
||||
import { BaseFilterable, OperatorMap } from "../../../dal"
|
||||
import { FindParams, SelectParams } from "../../common"
|
||||
|
||||
export interface AdminCustomerInGroupFilters {
|
||||
id?: string | string[]
|
||||
@@ -15,7 +15,9 @@ export interface AdminCustomerInGroupFilters {
|
||||
deleted_at?: OperatorMap<string>
|
||||
}
|
||||
|
||||
export interface AdminGetCustomerGroupsParams {
|
||||
export interface AdminGetCustomerGroupsParams
|
||||
extends FindParams,
|
||||
BaseFilterable<AdminGetCustomerGroupsParams> {
|
||||
limit?: number
|
||||
offset?: number
|
||||
q?: string
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { BaseFilterable, OperatorMap } from "../../dal"
|
||||
import { FindParams } from "../common"
|
||||
|
||||
export interface BaseCustomerGroup {
|
||||
id: string
|
||||
@@ -56,7 +57,8 @@ export interface CustomerGroupInCustomerFilters {
|
||||
}
|
||||
|
||||
export interface BaseCustomerFilters
|
||||
extends BaseFilterable<BaseCustomerFilters> {
|
||||
extends FindParams,
|
||||
BaseFilterable<BaseCustomerFilters> {
|
||||
q?: string
|
||||
id?: string[] | string | OperatorMap<string | string[]>
|
||||
email?: string[] | string | OperatorMap<string>
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
export * from "./address"
|
||||
export * from "./api-key"
|
||||
export * from "./auth"
|
||||
export * from "./campaign"
|
||||
export * from "./cart"
|
||||
export * from "./claim"
|
||||
|
||||
@@ -14,4 +14,24 @@ export interface AdminInventoryItem {
|
||||
description?: string | null
|
||||
thumbnail?: string | null
|
||||
metadata?: Record<string, unknown> | null
|
||||
|
||||
location_levels?: AdminInventoryLevel[]
|
||||
}
|
||||
|
||||
export interface AdminInventoryLevel {
|
||||
id: string
|
||||
created_at: Date
|
||||
updated_at: Date
|
||||
deleted_at: Date | null
|
||||
inventory_item_id: string
|
||||
location_id: string
|
||||
stocked_quantity: number
|
||||
raw_stocked_quantity: Record<string, unknown>
|
||||
reserved_quantity: number
|
||||
raw_reserved_quantity: Record<string, unknown>
|
||||
incoming_quantity: number
|
||||
raw_incoming_quantity: Record<string, unknown>
|
||||
metadata: Record<string, unknown> | null
|
||||
inventory_item?: AdminInventoryItem
|
||||
available_quantity: number | null
|
||||
}
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
import { AdminCustomer } from "../../customer"
|
||||
import { AdminPaymentCollection } from "../../payment/admin"
|
||||
import { AdminProductVariant } from "../../product"
|
||||
import { AdminRegionCountry } from "../../region"
|
||||
import { AdminSalesChannel } from "../../sales-channel"
|
||||
import {
|
||||
BaseOrder,
|
||||
BaseOrderAddress,
|
||||
@@ -12,15 +16,26 @@ import {
|
||||
export interface AdminOrder extends BaseOrder {
|
||||
payment_collections: AdminPaymentCollection[]
|
||||
fulfillments?: BaseOrderFulfillment[]
|
||||
sales_channel?: AdminSalesChannel
|
||||
customer?: AdminCustomer
|
||||
shipping_address?: AdminOrderAddress | null
|
||||
billing_address?: AdminOrderAddress | null
|
||||
}
|
||||
|
||||
export interface AdminOrderLineItem extends BaseOrderLineItem {}
|
||||
export interface AdminOrderLineItem extends BaseOrderLineItem {
|
||||
variant?: AdminProductVariant
|
||||
}
|
||||
|
||||
export interface AdminOrderFulfillment extends BaseOrderFulfillment {}
|
||||
|
||||
export interface AdminOrderLineItem extends BaseOrderLineItem {}
|
||||
export interface AdminOrderAddress extends BaseOrderAddress {}
|
||||
|
||||
export interface AdminOrderAddress extends BaseOrderAddress {
|
||||
country?: AdminRegionCountry
|
||||
}
|
||||
|
||||
export interface AdminOrderShippingMethod extends BaseOrderShippingMethod {}
|
||||
|
||||
export interface AdminOrderPreview
|
||||
extends Omit<AdminOrder, "items" | "shipping_methods"> {
|
||||
return_requested_total: number
|
||||
|
||||
@@ -1,7 +1,15 @@
|
||||
import { BaseFilterable } from "../../../dal";
|
||||
import { FindParams } from "../../common";
|
||||
import { OperatorMap } from "../../../dal"
|
||||
import { FindParams } from "../../common"
|
||||
import { BaseOrderFilters } from "../common"
|
||||
|
||||
export interface AdminOrderFilters extends FindParams, BaseFilterable<AdminOrderFilters> {
|
||||
export interface AdminOrderFilters extends FindParams, BaseOrderFilters {
|
||||
id?: string[] | string
|
||||
name?: string[] | string
|
||||
}
|
||||
sales_channel_id?: string[]
|
||||
fulfillment_status?: string[]
|
||||
payment_status?: string[]
|
||||
region_id?: string[]
|
||||
q?: string
|
||||
created_at?: OperatorMap<string>
|
||||
updated_at?: OperatorMap<string>
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { BaseFilterable, OperatorMap } from "../../dal"
|
||||
import { BigNumberValue } from "../../totals"
|
||||
import { BaseClaim } from "../claim/common"
|
||||
import { FindParams } from "../common"
|
||||
import { BasePaymentCollection } from "../payment/common"
|
||||
import { BaseProduct, BaseProductVariant } from "../product/common"
|
||||
|
||||
@@ -264,9 +265,9 @@ export interface BaseOrder {
|
||||
sales_channel_id: string | null
|
||||
email: string | null
|
||||
currency_code: string
|
||||
display_id?: string
|
||||
shipping_address?: BaseOrderAddress
|
||||
billing_address?: BaseOrderAddress
|
||||
display_id?: number
|
||||
shipping_address?: BaseOrderAddress | null
|
||||
billing_address?: BaseOrderAddress | null
|
||||
items: BaseOrderLineItem[] | null
|
||||
shipping_methods: BaseOrderShippingMethod[] | null
|
||||
payment_collections?: BasePaymentCollection[]
|
||||
@@ -302,7 +303,9 @@ export interface BaseOrder {
|
||||
original_shipping_tax_total: number
|
||||
}
|
||||
|
||||
export interface BaseOrderFilters extends BaseFilterable<BaseOrderFilters> {
|
||||
export interface BaseOrderFilters
|
||||
extends FindParams,
|
||||
BaseFilterable<BaseOrderFilters> {
|
||||
id?: string[] | string | OperatorMap<string | string[]>
|
||||
status?: string[] | string | OperatorMap<string | string[]>
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ export interface AdminReservation {
|
||||
id: string
|
||||
line_item_id: string | null
|
||||
location_id: string
|
||||
quantity: string
|
||||
quantity: number
|
||||
external_id: string | null
|
||||
description: string | null
|
||||
inventory_item_id: string
|
||||
|
||||
@@ -6,6 +6,8 @@ export interface AdminShippingOptionListParams extends FindParams {
|
||||
q?: string
|
||||
service_zone_id?: string | string[]
|
||||
stock_location_id?: string | string[]
|
||||
is_return?: boolean
|
||||
admin_only?: boolean
|
||||
shipping_profile_id?: string | string[]
|
||||
provider_id?: string | string[]
|
||||
shipping_option_type_id?: string | string[]
|
||||
|
||||
@@ -3,6 +3,7 @@ import {
|
||||
ShippingOptionPriceType as ShippingOptionPriceTypeEnum,
|
||||
} from "@medusajs/utils"
|
||||
import { z } from "zod"
|
||||
import { booleanString } from "../../utils/common-validators"
|
||||
import {
|
||||
createFindParams,
|
||||
createOperatorMap,
|
||||
@@ -28,6 +29,8 @@ export const AdminGetShippingOptionsParams = createFindParams({
|
||||
shipping_profile_id: z.union([z.string(), z.array(z.string())]).optional(),
|
||||
provider_id: z.union([z.string(), z.array(z.string())]).optional(),
|
||||
stock_location_id: z.union([z.string(), z.array(z.string())]).optional(),
|
||||
is_return: booleanString().optional(),
|
||||
admin_only: booleanString().optional(),
|
||||
shipping_option_type_id: z
|
||||
.union([z.string(), z.array(z.string())])
|
||||
.optional(),
|
||||
|
||||
Reference in New Issue
Block a user