Feat: admin return reason list (#8482)

* feat: add missing endpoints to return reason sdk

* add return reason list route

* add return reason query hooks

* fix update return reasons in order modules service

* fix store/return-reasons middleware

* add missing tests for /return-resasons/:id
This commit is contained in:
Christian
2024-08-08 16:24:13 +02:00
committed by GitHub
parent f9989e1659
commit d4c5f6593d
36 changed files with 724 additions and 90 deletions
@@ -1,19 +1,27 @@
import { HttpTypes } from "@medusajs/types"
import { QueryKey, UseQueryOptions, useQuery } from "@tanstack/react-query"
import {
QueryKey,
UseMutationOptions,
UseQueryOptions,
useMutation,
useQuery,
} from "@tanstack/react-query"
import { FetchError } from "@medusajs/js-sdk"
import { sdk } from "../../lib/client"
import { queryClient } from "../../lib/query-client"
import { queryKeysFactory } from "../../lib/query-key-factory"
const RETURN_REASONS_QUERY_KEY = "return_reasons" as const
export const returnReasonQueryKeys = queryKeysFactory(RETURN_REASONS_QUERY_KEY)
export const returnReasonsQueryKeys = queryKeysFactory(RETURN_REASONS_QUERY_KEY)
export const useReturnReasons = (
query?: HttpTypes.AdminReturnReasonListParams,
options?: Omit<
UseQueryOptions<
HttpTypes.AdminReturnReasonsResponse,
Error,
HttpTypes.AdminReturnReasonsResponse,
HttpTypes.AdminReturnReasonListResponse,
FetchError,
HttpTypes.AdminReturnReasonListResponse,
QueryKey
>,
"queryFn" | "queryKey"
@@ -21,9 +29,104 @@ export const useReturnReasons = (
) => {
const { data, ...rest } = useQuery({
queryFn: () => sdk.admin.returnReason.list(query),
queryKey: returnReasonQueryKeys.list(query),
queryKey: returnReasonsQueryKeys.list(query),
...options,
})
return { ...data, ...rest }
}
export const useReturnReason = (
id: string,
query?: HttpTypes.AdminReturnReasonParams,
options?: Omit<
UseQueryOptions<
HttpTypes.AdminReturnReasonResponse,
FetchError,
HttpTypes.AdminReturnReasonResponse,
QueryKey
>,
"queryFn" | "queryKey"
>
) => {
const { data, ...rest } = useQuery({
queryFn: () => sdk.admin.returnReason.retrieve(id, query),
queryKey: returnReasonsQueryKeys.detail(id),
...options,
})
return { ...data, ...rest }
}
export const useCreateReturnReason = (
query?: HttpTypes.AdminReturnReasonParams,
options?: UseMutationOptions<
HttpTypes.AdminReturnReasonResponse,
FetchError,
HttpTypes.AdminCreateReturnReason
>
) => {
return useMutation({
mutationFn: async (data) => sdk.admin.returnReason.create(data, query),
onSuccess: (data, variables, context) => {
queryClient.invalidateQueries({
queryKey: returnReasonsQueryKeys.lists(),
})
options?.onSuccess?.(data, variables, context)
},
...options,
})
}
export const useUpdateReturnReason = (
id: string,
query?: HttpTypes.AdminReturnReasonParams,
options?: UseMutationOptions<
HttpTypes.AdminReturnReasonResponse,
FetchError,
HttpTypes.AdminUpdateReturnReason
>
) => {
return useMutation({
mutationFn: async (data) => sdk.admin.returnReason.update(id, data, query),
onSuccess: (data, variables, context) => {
queryClient.invalidateQueries({
queryKey: returnReasonsQueryKeys.lists(),
})
queryClient.invalidateQueries({
queryKey: returnReasonsQueryKeys.detail(data.return_reason.id, query),
})
options?.onSuccess?.(data, variables, context)
},
...options,
})
}
export const useDeleteReturnReason = (
id: string,
options?: UseMutationOptions<
HttpTypes.AdminReturnReasonDeleteResponse,
Error,
void
>
) => {
return useMutation({
mutationFn: () => sdk.admin.returnReason.delete(id),
onSuccess: (data, variables, context) => {
queryClient.invalidateQueries({
queryKey: returnReasonsQueryKeys.lists(),
})
queryClient.invalidateQueries({
queryKey: returnReasonsQueryKeys.detail(id),
})
queryClient.invalidateQueries({
queryKey: returnReasonsQueryKeys.details(),
})
options?.onSuccess?.(data, variables, context)
},
...options,
})
}
@@ -7,6 +7,7 @@ export * from "./use-product-table-columns"
export * from "./use-product-tag-table-columns"
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"
@@ -0,0 +1,25 @@
import { HttpTypes } from "@medusajs/types"
import { createColumnHelper } from "@tanstack/react-table"
import { useMemo } from "react"
import { useTranslation } from "react-i18next"
import { TextCell } from "../../../components/table/table-cells/common/text-cell"
const columnHelper = createColumnHelper<HttpTypes.AdminReturnReason>()
export const useReturnReasonTableColumns = () => {
const { t } = useTranslation()
return useMemo(
() => [
columnHelper.accessor("value", {
header: () => t("fields.value"),
cell: ({ getValue }) => <TextCell text={getValue()} />,
}),
columnHelper.accessor("label", {
header: () => t("fields.createdAt"),
cell: ({ getValue }) => <TextCell text={getValue()} />,
}),
],
[t]
)
}
@@ -7,6 +7,7 @@ export * from "./use-product-table-query"
export * from "./use-product-tag-table-query"
export * from "./use-product-type-table-query"
export * from "./use-region-table-query"
export * from "./use-return-reason-table-query"
export * from "./use-sales-channel-table-query"
export * from "./use-shipping-option-table-query"
export * from "./use-tax-rate-table-query"
@@ -0,0 +1,32 @@
import { HttpTypes } from "@medusajs/types"
import { useQueryParams } from "../../use-query-params"
type UseReturnReasonTableQueryProps = {
prefix?: string
pageSize?: number
}
export const useReturnReasonTableQuery = ({
prefix,
pageSize = 20,
}: UseReturnReasonTableQueryProps) => {
const queryObject = useQueryParams(
["offset", "q", "order", "created_at", "updated_at"],
prefix
)
const { offset, q, order, created_at, updated_at } = queryObject
const searchParams: HttpTypes.AdminReturnReasonListParams = {
limit: pageSize,
offset: offset ? Number(offset) : 0,
order,
created_at: created_at ? JSON.parse(created_at) : undefined,
updated_at: updated_at ? JSON.parse(updated_at) : undefined,
q,
}
return {
searchParams,
raw: queryObject,
}
}