/ src / lib / data / orders.ts
orders.ts
  1  "use server"
  2  
  3  import { sdk } from "@lib/config"
  4  import medusaError from "@lib/util/medusa-error"
  5  import { getAuthHeaders, getCacheOptions } from "./cookies"
  6  import { HttpTypes } from "@medusajs/types"
  7  
  8  export const retrieveOrder = async (id: string) => {
  9    const headers = {
 10      ...(await getAuthHeaders()),
 11    }
 12  
 13    const next = {
 14      ...(await getCacheOptions("orders")),
 15    }
 16  
 17    return sdk.client
 18      .fetch<HttpTypes.StoreOrderResponse>(`/store/orders/${id}`, {
 19        method: "GET",
 20        query: {
 21          fields:
 22            "*payment_collections.payments,*items,*items.metadata,*items.variant,*items.product",
 23        },
 24        headers,
 25        next,
 26        cache: "force-cache",
 27      })
 28      .then(({ order }) => order)
 29      .catch((err) => medusaError(err))
 30  }
 31  
 32  export const listOrders = async (
 33    limit: number = 10,
 34    offset: number = 0,
 35    filters?: Record<string, any>
 36  ) => {
 37    const headers = {
 38      ...(await getAuthHeaders()),
 39    }
 40  
 41    const next = {
 42      ...(await getCacheOptions("orders")),
 43    }
 44  
 45    return sdk.client
 46      .fetch<HttpTypes.StoreOrderListResponse>(`/store/orders`, {
 47        method: "GET",
 48        query: {
 49          limit,
 50          offset,
 51          order: "-created_at",
 52          fields: "*items,+items.metadata,*items.variant,*items.product",
 53          ...filters,
 54        },
 55        headers,
 56        next,
 57        cache: "force-cache",
 58      })
 59      .then(({ orders }) => orders)
 60      .catch((err) => medusaError(err))
 61  }
 62  
 63  export const createTransferRequest = async (
 64    state: {
 65      success: boolean
 66      error: string | null
 67      order: HttpTypes.StoreOrder | null
 68    },
 69    formData: FormData
 70  ): Promise<{
 71    success: boolean
 72    error: string | null
 73    order: HttpTypes.StoreOrder | null
 74  }> => {
 75    const id = formData.get("order_id") as string
 76  
 77    if (!id) {
 78      return { success: false, error: "Order ID is required", order: null }
 79    }
 80  
 81    const headers = await getAuthHeaders()
 82  
 83    return await sdk.store.order
 84      .requestTransfer(
 85        id,
 86        {},
 87        {
 88          fields: "id, email",
 89        },
 90        headers
 91      )
 92      .then(({ order }) => ({ success: true, error: null, order }))
 93      .catch((err) => ({ success: false, error: err.message, order: null }))
 94  }
 95  
 96  export const acceptTransferRequest = async (id: string, token: string) => {
 97    const headers = await getAuthHeaders()
 98  
 99    return await sdk.store.order
100      .acceptTransfer(id, { token }, {}, headers)
101      .then(({ order }) => ({ success: true, error: null, order }))
102      .catch((err) => ({ success: false, error: err.message, order: null }))
103  }
104  
105  export const declineTransferRequest = async (id: string, token: string) => {
106    const headers = await getAuthHeaders()
107  
108    return await sdk.store.order
109      .declineTransfer(id, { token }, {}, headers)
110      .then(({ order }) => ({ success: true, error: null, order }))
111      .catch((err) => ({ success: false, error: err.message, order: null }))
112  }