feat: Admin V2 customer group (#7000)

This commit is contained in:
Oli Juhl
2024-04-09 12:32:27 +02:00
committed by GitHub
parent dbddfc12ed
commit 3882cac622
43 changed files with 583 additions and 309 deletions
@@ -1,10 +1,21 @@
import {
QueryKey,
UseMutationOptions,
UseQueryOptions,
useMutation,
useQuery,
} from "@tanstack/react-query"
import { client } from "../../lib/client"
import { queryKeysFactory } from "../../lib/query-key-factory"
import {
AdminCustomerGroupListResponse,
AdminCustomerGroupResponse,
} from "@medusajs/types"
import { QueryKey, UseQueryOptions, useQuery } from "@tanstack/react-query"
import { client } from "../../lib/client"
import { queryKeysFactory } from "../../lib/query-key-factory"
import { z } from "zod"
import { CreateCustomerGroupSchema } from "../../v2-routes/customer-groups/customer-group-create/components/create-customer-group-form"
import { queryClient } from "../../lib/medusa"
import { EditCustomerGroupSchema } from "../../v2-routes/customer-groups/customer-group-edit/components/edit-customer-group-form"
import { customersQueryKeys } from "./customers"
const CUSTOMER_GROUPS_QUERY_KEY = "customer_groups" as const
const customerGroupsQueryKeys = queryKeysFactory(CUSTOMER_GROUPS_QUERY_KEY)
@@ -51,3 +62,124 @@ export const useCustomerGroups = (
return { ...data, ...rest }
}
export const useCreateCustomerGroup = (
options?: UseMutationOptions<
AdminCustomerGroupResponse,
Error,
z.infer<typeof CreateCustomerGroupSchema>
>
) => {
return useMutation({
mutationFn: (payload) => client.customerGroups.create(payload),
onSuccess: (data, variables, context) => {
queryClient.invalidateQueries({
queryKey: customerGroupsQueryKeys.lists(),
})
options?.onSuccess?.(data, variables, context)
},
...options,
})
}
export const useUpdateCustomerGroup = (
id: string,
options?: UseMutationOptions<
AdminCustomerGroupResponse,
Error,
z.infer<typeof EditCustomerGroupSchema>
>
) => {
return useMutation({
mutationFn: (payload) => client.customerGroups.update(id, payload),
onSuccess: (data, variables, context) => {
queryClient.invalidateQueries({
queryKey: customerGroupsQueryKeys.lists(),
})
queryClient.invalidateQueries({
queryKey: customerGroupsQueryKeys.detail(id),
})
options?.onSuccess?.(data, variables, context)
},
...options,
})
}
export const useDeleteCustomerGroup = (
id: string,
options?: UseMutationOptions<
{ id: string; object: "customer-group"; deleted: boolean },
Error,
void
>
) => {
return useMutation({
mutationFn: () => client.customerGroups.delete(id),
onSuccess: (data, variables, context) => {
queryClient.invalidateQueries({
queryKey: customerGroupsQueryKeys.lists(),
})
queryClient.invalidateQueries({
queryKey: customerGroupsQueryKeys.detail(id),
})
options?.onSuccess?.(data, variables, context)
},
...options,
})
}
export const useAddCustomersToGroup = (
id: string,
options?: UseMutationOptions<
AdminCustomerGroupResponse,
Error,
{ customer_ids: { id: string }[] }
>
) => {
return useMutation({
mutationFn: (payload) => client.customerGroups.addCustomers(id, payload),
onSuccess: (data, variables, context) => {
queryClient.invalidateQueries({
queryKey: customerGroupsQueryKeys.lists(),
})
queryClient.invalidateQueries({
queryKey: customerGroupsQueryKeys.detail(id),
})
queryClient.invalidateQueries({
queryKey: customersQueryKeys.lists(),
})
options?.onSuccess?.(data, variables, context)
},
...options,
})
}
export const useRemoveCustomersFromGroup = (
id: string,
options?: UseMutationOptions<
AdminCustomerGroupResponse,
Error,
{ customer_ids: { id: string }[] }
>
) => {
return useMutation({
mutationFn: (payload) => client.customerGroups.removeCustomers(id, payload),
onSuccess: (data, variables, context) => {
queryClient.invalidateQueries({
queryKey: customerGroupsQueryKeys.lists(),
})
queryClient.invalidateQueries({
queryKey: customerGroupsQueryKeys.detail(id),
})
queryClient.invalidateQueries({
queryKey: customersQueryKeys.lists(),
})
options?.onSuccess?.(data, variables, context)
},
...options,
})
}
@@ -15,7 +15,7 @@ import {
} from "@medusajs/types"
const CUSTOMERS_QUERY_KEY = "customers" as const
const customersQueryKeys = queryKeysFactory(CUSTOMERS_QUERY_KEY)
export const customersQueryKeys = queryKeysFactory(CUSTOMERS_QUERY_KEY)
export const useCustomer = (
id: string,