Feat: Medusa react price list (#1258)

* export everything from price lists in core

* medusa-js price list

* feat: add product list for price lists

* feat: add product list for price lists

* add price list to admin module

* add price list hooks initial

* refactor: product list controller

* fix: add integration test for price list products

* update types

* add tests for price lists

* update medusa react tests

* update update request for price lists

* Apply suggestions from code review

Co-authored-by: Sebastian Rindom <skrindom@gmail.com>

* rename methods

* pr feedback

* list products from price list

* fix errors after merge

* update medusa react with medusa-js method name changes

* redo changes

* update hook names

* fix: routes in msw handler

Co-authored-by: Sebastian Rindom <skrindom@gmail.com>
Co-authored-by: Zakaria El Asri <zakaria.elas@gmail.com>
This commit is contained in:
Philip Korsholm
2022-04-03 20:48:49 +02:00
committed by GitHub
parent fb33dbaca3
commit b164977a19
24 changed files with 838 additions and 276 deletions

View File

@@ -10,6 +10,7 @@ export * from "./orders"
export * from "./products"
export * from "./product-tags"
export * from "./product-types"
export * from "./price-lists"
export * from "./return-reasons"
export * from "./regions"
export * from "./shipping-options"

View File

@@ -0,0 +1,2 @@
export * from "./queries"
export * from "./mutations"

View File

@@ -0,0 +1,108 @@
import {
AdminPriceListRes,
AdminPostPriceListsPriceListPriceListReq,
AdminPostPriceListsPriceListReq,
AdminPostPriceListPricesPricesReq,
AdminDeletePriceListPricesPricesReq,
AdminPriceListDeleteRes,
AdminPriceListDeleteBatchRes,
} from "@medusajs/medusa"
import { Response } from "@medusajs/medusa-js"
import { useMutation, UseMutationOptions, useQueryClient } from "react-query"
import { useMedusa } from "../../../contexts/medusa"
import { buildOptions } from "../../utils/buildOptions"
import { adminPriceListKeys } from "./queries"
export const useAdminCreatePriceList = (
options?: UseMutationOptions<
Response<AdminPriceListRes>,
Error,
AdminPostPriceListsPriceListReq
>
) => {
const { client } = useMedusa()
const queryClient = useQueryClient()
return useMutation(
(payload: AdminPostPriceListsPriceListReq) =>
client.admin.priceLists.create(payload),
buildOptions(queryClient, adminPriceListKeys.lists(), options)
)
}
export const useAdminUpdatePriceList = (
id: string,
options?: UseMutationOptions<
Response<AdminPriceListRes>,
Error,
AdminPostPriceListsPriceListPriceListReq
>
) => {
const { client } = useMedusa()
const queryClient = useQueryClient()
return useMutation(
(payload: AdminPostPriceListsPriceListPriceListReq) =>
client.admin.priceLists.update(id, payload),
buildOptions(
queryClient,
[adminPriceListKeys.detail(id), adminPriceListKeys.lists()],
options
)
)
}
export const useAdminDeletePriceList = (
id: string,
options?: UseMutationOptions<Response<AdminPriceListDeleteRes>, Error, void>
) => {
const { client } = useMedusa()
const queryClient = useQueryClient()
return useMutation(
() => client.admin.priceLists.delete(id),
buildOptions(
queryClient,
[adminPriceListKeys.detail(id), adminPriceListKeys.lists()],
options
)
)
}
export const useAdminCreatePriceListPrices = (
id: string,
options?: UseMutationOptions<
Response<AdminPriceListRes>,
Error,
AdminPostPriceListPricesPricesReq
>
) => {
const { client } = useMedusa()
const queryClient = useQueryClient()
return useMutation(
(payload: AdminPostPriceListPricesPricesReq) =>
client.admin.priceLists.addPrices(id, payload),
buildOptions(queryClient, adminPriceListKeys.lists(), options)
)
}
export const useAdminDeletePriceListPrices = (
id: string,
options?: UseMutationOptions<
Response<AdminPriceListDeleteBatchRes>,
Error,
AdminDeletePriceListPricesPricesReq
>
) => {
const { client } = useMedusa()
const queryClient = useQueryClient()
return useMutation(
(payload: AdminDeletePriceListPricesPricesReq) =>
client.admin.priceLists.deletePrices(id, payload),
buildOptions(
queryClient,
[adminPriceListKeys.detail(id), adminPriceListKeys.lists()],
options
)
)
}

View File

@@ -0,0 +1,70 @@
import {
AdminGetPriceListsPriceListProductsParams,
AdminGetPriceListPaginationParams,
AdminPriceListsListRes,
AdminPriceListRes,
AdminProductsListRes,
} from "@medusajs/medusa"
import { Response } from "@medusajs/medusa-js"
import { useQuery } from "react-query"
import { useMedusa } from "../../../contexts"
import { UseQueryOptionsWrapper } from "../../../types"
import { queryKeysFactory } from "../../utils/index"
const ADMIN_PRICE_LISTS_QUERY_KEY = `admin_price_lists` as const
export const adminPriceListKeys = queryKeysFactory(ADMIN_PRICE_LISTS_QUERY_KEY)
type PriceListQueryKeys = typeof adminPriceListKeys
export const useAdminPriceLists = (
query?: AdminGetPriceListPaginationParams,
options?: UseQueryOptionsWrapper<
Response<AdminPriceListsListRes>,
Error,
ReturnType<PriceListQueryKeys["list"]>
>
) => {
const { client } = useMedusa()
const { data, ...rest } = useQuery(
adminPriceListKeys.list(query),
() => client.admin.priceLists.list(query),
options
)
return { ...data, ...rest } as const
}
export const useAdminPriceListProducts = (
id: string,
query?: AdminGetPriceListsPriceListProductsParams,
options?: UseQueryOptionsWrapper<
Response<AdminProductsListRes>,
Error,
ReturnType<PriceListQueryKeys["detail"]>
>
) => {
const { client } = useMedusa()
const { data, ...rest } = useQuery(
adminPriceListKeys.detail(id),
() => client.admin.priceLists.listProducts(id, query),
options
)
return { ...data, ...rest } as const
}
export const useAdminPriceList = (
id: string,
options?: UseQueryOptionsWrapper<
Response<AdminPriceListRes>,
Error,
ReturnType<PriceListQueryKeys["detail"]>
>
) => {
const { client } = useMedusa()
const { data, ...rest } = useQuery(
adminPriceListKeys.detail(id),
() => client.admin.priceLists.retrieve(id),
options
)
return { ...data, ...rest } as const
}