feat: new tax api (#979)
* feat: add tax calculation strategy (#885) * feat: add tax calculation strategy * fix: adds strategy loader * fix: eslint ignore * chore: cleanup * fix: allow plugin overwrites * fix: allow plugin overwrites * fix: fake region * Update packages/medusa/src/loaders/strategies.ts Co-authored-by: Oliver Windall Juhl <59018053+olivermrbl@users.noreply.github.com> Co-authored-by: Oliver Windall Juhl <59018053+olivermrbl@users.noreply.github.com> * feat: adds tax related db entities + tax provider (#896) * feat: adds tax related db entities + tax provider * fix: add tax provider tests * fix: add tax service unit tests * fix: tests + migrations * fix: add inherited tax lines * chore: rm tax-line repo * fix: test * fix: pr comments * fix: unit test * feat: totals service to ts (#911) * feat: adds tax related db entities + tax provider * fix: add tax provider tests * fix: add tax service unit tests * fix: tests + migrations * feat: totals service to ts * fix: remove totals.js * fix: add shipping methods * fix: add inherited tax lines * chore: rm tax-line repo * fix: test * fix: tests * fix: tests * fix: unit test * fix: adds TotalsServiceProps * feat: adds integration tests for automatic tax calculation + shipping tax rates (#945) * feat: adds tax related db entities + tax provider * fix: add tax provider tests * fix: add tax service unit tests * fix: tests + migrations * feat: totals service to ts * fix: remove totals.js * fix: add shipping methods * fix: add inherited tax lines * chore: rm tax-line repo * fix: test * fix: tests * fix: tests * fix: unit test * fix: integration test helpers * fix: adds factories + tests automatic tax rates * fix: remove verbose * fix: adds TotalsServiceProps * fix: add shipping tax lines * fix: add migration for shipping taxes * fix: integration tests for shipping taxes * fix: integration tests for shipping taxes * fix: jsdoc types * Feat/manual taxes (#950) * feat: adds tax related db entities + tax provider * fix: add tax provider tests * fix: add tax service unit tests * fix: tests + migrations * feat: totals service to ts * fix: remove totals.js * fix: add shipping methods * fix: add inherited tax lines * chore: rm tax-line repo * fix: test * fix: tests * fix: tests * fix: unit test * fix: integration test helpers * fix: adds factories + tests automatic tax rates * fix: remove verbose * fix: adds TotalsServiceProps * fix: add shipping tax lines * fix: add migration for shipping taxes * fix: integration tests for shipping taxes * fix: integration tests for shipping taxes * fix: add integration tests for manual taxes * fix: cart service - cleanup jsdoc * feat: add /carts/id/taxes to manually calculate taxes * feat: add integration tests for order tax calculations * fix: unit tests * fix: merge * fix: rm verbose * fix: unit tests * fix: object -> cartOrOrder * fix: rounding * Feat/complete order w tax lines (#951) * feat: adds tax related db entities + tax provider * fix: add tax provider tests * fix: add tax service unit tests * fix: tests + migrations * feat: totals service to ts * fix: remove totals.js * fix: add shipping methods * fix: add inherited tax lines * chore: rm tax-line repo * fix: test * fix: tests * fix: tests * fix: unit test * fix: integration test helpers * fix: adds factories + tests automatic tax rates * fix: remove verbose * fix: adds TotalsServiceProps * fix: add shipping tax lines * fix: add migration for shipping taxes * fix: integration tests for shipping taxes * fix: integration tests for shipping taxes * fix: add integration tests for manual taxes * fix: cart service - cleanup jsdoc * feat: add /carts/id/taxes to manually calculate taxes * feat: add integration tests for order tax calculations * feat: adds cart completion strategy + create order w. tax lines * fix: unit tests * fix: merge * fix: rm verbose * fix: unit tests * fix: unit tests * fix: unit tests * fix: ensure calculation for list orders * fix: unit tests * fix: integration tests * fix: adds cart order type gaurds * Docs/tax api (#954) * feat: adds tax related db entities + tax provider * fix: add tax provider tests * fix: add tax service unit tests * fix: tests + migrations * feat: totals service to ts * fix: remove totals.js * fix: add shipping methods * fix: add inherited tax lines * chore: rm tax-line repo * fix: test * fix: tests * fix: tests * fix: unit test * fix: integration test helpers * fix: adds factories + tests automatic tax rates * fix: remove verbose * fix: adds TotalsServiceProps * fix: add shipping tax lines * fix: add migration for shipping taxes * fix: integration tests for shipping taxes * fix: integration tests for shipping taxes * fix: add integration tests for manual taxes * fix: cart service - cleanup jsdoc * feat: add /carts/id/taxes to manually calculate taxes * feat: add integration tests for order tax calculations * feat: adds cart completion strategy + create order w. tax lines * fix: unit tests * fix: merge * fix: rm verbose * fix: unit tests * fix: unit tests * fix: unit tests * fix: ensure calculation for list orders * fix: unit tests * fix: integration tests * docs: documents tax related methods and types * fix: require either item_id or shipping_method_id * feat: product type tax rate (#969) * feat: adds tax related db entities + tax provider * fix: add tax provider tests * fix: add tax service unit tests * fix: tests + migrations * feat: totals service to ts * fix: remove totals.js * fix: add shipping methods * fix: add inherited tax lines * chore: rm tax-line repo * fix: test * fix: tests * fix: tests * fix: unit test * fix: integration test helpers * fix: adds factories + tests automatic tax rates * fix: remove verbose * fix: adds TotalsServiceProps * fix: add shipping tax lines * fix: add migration for shipping taxes * fix: integration tests for shipping taxes * fix: integration tests for shipping taxes * fix: add integration tests for manual taxes * fix: cart service - cleanup jsdoc * feat: add /carts/id/taxes to manually calculate taxes * feat: add integration tests for order tax calculations * feat: adds cart completion strategy + create order w. tax lines * fix: unit tests * fix: merge * fix: rm verbose * fix: unit tests * fix: unit tests * fix: unit tests * fix: ensure calculation for list orders * fix: unit tests * fix: integration tests * docs: documents tax related methods and types * fix: require either item_id or shipping_method_id * feat: adds returns tests for new tax system * feat: adds return lines + integration tests for swaps * feat: return integration tests * feat: adds product type tax rates * feat: add tax management endpoints * fix: create single migration * fix: adds tax rates to js client * fix: strats * Fix/plugin tests (#998) * plugin testing setup * fix: test sendgrid plugin * fix: test sendgrid plugin * chore: clean * chore: clean * fix: clean up tests * fix: remove dirty import * fix: sendgrid + brightpearl * fix: plugin integration tests * fix: klarna * fix: shipping method tax * fix: remove taxrates * fix: unit tests * fix: integration * fix: integration * fix: plugins tests * fix: ignore plugins * fix: tests * fix: taxes (#1017) * fix: taxes * fix: taxes * fix: faulty ref * fix: create tax-lines with claim items * fix: snapshot tax-liens * fix: allows integration test teardown to force deleting tables * fix: tests * fix: merge * fix: adds tax-rates to client * fix: adds tax-rates to medusa-react * fix: tests * fix: tests * fix: add product types * fix: adds tax provider endpoint + cascaded deletes on tax rate relations * fix: move errors to service layer * fix: cleanup api * fix: unit tests * fix: error handler in base-service * fix: Add order region to swap on createFulfillment (#1110) Co-authored-by: Oliver Windall Juhl <59018053+olivermrbl@users.noreply.github.com>
This commit is contained in:
committed by
olivermrbl
parent
d80eaa172d
commit
47588e7a8d
@@ -8,6 +8,7 @@ export * from "./gift-cards"
|
||||
export * from "./orders"
|
||||
export * from "./products"
|
||||
export * from "./product-tags"
|
||||
export * from "./product-types"
|
||||
export * from "./return-reasons"
|
||||
export * from "./regions"
|
||||
export * from "./shipping-options"
|
||||
@@ -20,3 +21,4 @@ export * from "./store"
|
||||
export * from "./swaps"
|
||||
export * from "./users"
|
||||
export * from "./variants"
|
||||
export * from "./tax-rates"
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
export * from "./queries"
|
||||
@@ -0,0 +1,34 @@
|
||||
import {
|
||||
AdminProductTypesListRes,
|
||||
AdminGetProductTypesParams,
|
||||
} 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_PRODUCT_TYPES_QUERY_KEY = `admin_product_types` as const
|
||||
|
||||
export const adminProductTypeKeys = queryKeysFactory(
|
||||
ADMIN_PRODUCT_TYPES_QUERY_KEY
|
||||
)
|
||||
|
||||
type ProductTypesQueryKeys = typeof adminProductTypeKeys
|
||||
|
||||
export const useAdminProductTypes = (
|
||||
query?: AdminGetProductTypesParams,
|
||||
options?: UseQueryOptionsWrapper<
|
||||
Response<AdminProductTypesListRes>,
|
||||
Error,
|
||||
ReturnType<ProductTypesQueryKeys["list"]>
|
||||
>
|
||||
) => {
|
||||
const { client } = useMedusa()
|
||||
const { data, ...rest } = useQuery(
|
||||
adminProductTypeKeys.list(query),
|
||||
() => client.admin.productTypes.list(query),
|
||||
options
|
||||
)
|
||||
return { ...data, ...rest } as const
|
||||
}
|
||||
@@ -2,7 +2,6 @@ import {
|
||||
AdminProductsListRes,
|
||||
AdminProductsRes,
|
||||
AdminGetProductsParams,
|
||||
AdminProductsListTypesRes,
|
||||
AdminProductsListTagsRes,
|
||||
} from "@medusajs/medusa"
|
||||
import { Response } from "@medusajs/medusa-js"
|
||||
@@ -51,22 +50,6 @@ export const useAdminProduct = (
|
||||
return { ...data, ...rest } as const
|
||||
}
|
||||
|
||||
export const useAdminProductTypes = (
|
||||
options?: UseQueryOptionsWrapper<
|
||||
Response<AdminProductsListTypesRes>,
|
||||
Error,
|
||||
ReturnType<ProductQueryKeys["detail"]>
|
||||
>
|
||||
) => {
|
||||
const { client } = useMedusa()
|
||||
const { data, ...rest } = useQuery(
|
||||
adminProductKeys.detail("types"),
|
||||
() => client.admin.products.listTypes(),
|
||||
options
|
||||
)
|
||||
return { ...data, ...rest } as const
|
||||
}
|
||||
|
||||
export const useAdminProductTagUsage = (
|
||||
options?: UseQueryOptionsWrapper<
|
||||
Response<AdminProductsListTagsRes>,
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
import { AdminPaymentProvidersList, AdminStoresRes } from "@medusajs/medusa"
|
||||
import {
|
||||
AdminTaxProvidersList,
|
||||
AdminPaymentProvidersList,
|
||||
AdminStoresRes,
|
||||
} from "@medusajs/medusa"
|
||||
import { Response } from "@medusajs/medusa-js"
|
||||
import { useQuery } from "react-query"
|
||||
import { useMedusa } from "../../../contexts"
|
||||
@@ -27,6 +31,22 @@ export const useAdminStorePaymentProviders = (
|
||||
return { ...data, ...rest } as const
|
||||
}
|
||||
|
||||
export const useAdminStoreTaxProviders = (
|
||||
options?: UseQueryOptionsWrapper<
|
||||
Response<AdminTaxProvidersList>,
|
||||
Error,
|
||||
ReturnType<StoreQueryKeys["detail"]>
|
||||
>
|
||||
) => {
|
||||
const { client } = useMedusa()
|
||||
const { data, ...rest } = useQuery(
|
||||
adminStoreKeys.detail("tax_providers"),
|
||||
() => client.admin.store.listTaxProviders(),
|
||||
options
|
||||
)
|
||||
return { ...data, ...rest } as const
|
||||
}
|
||||
|
||||
export const useAdminStore = (
|
||||
options?: UseQueryOptionsWrapper<
|
||||
Response<AdminStoresRes>,
|
||||
|
||||
2
packages/medusa-react/src/hooks/admin/tax-rates/index.ts
Normal file
2
packages/medusa-react/src/hooks/admin/tax-rates/index.ts
Normal file
@@ -0,0 +1,2 @@
|
||||
export * from "./queries"
|
||||
export * from "./mutations"
|
||||
203
packages/medusa-react/src/hooks/admin/tax-rates/mutations.ts
Normal file
203
packages/medusa-react/src/hooks/admin/tax-rates/mutations.ts
Normal file
@@ -0,0 +1,203 @@
|
||||
import { adminTaxRateKeys } from "./queries"
|
||||
import {
|
||||
AdminTaxRatesRes,
|
||||
AdminTaxRatesDeleteRes,
|
||||
AdminDeleteTaxRatesTaxRateProductsReq,
|
||||
AdminDeleteTaxRatesTaxRateProductTypesReq,
|
||||
AdminDeleteTaxRatesTaxRateShippingOptionsReq,
|
||||
AdminPostTaxRatesReq,
|
||||
AdminPostTaxRatesTaxRateReq,
|
||||
AdminPostTaxRatesTaxRateProductsReq,
|
||||
AdminPostTaxRatesTaxRateProductTypesReq,
|
||||
AdminPostTaxRatesTaxRateShippingOptionsReq,
|
||||
} 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"
|
||||
|
||||
export const useAdminCreateTaxRate = (
|
||||
options?: UseMutationOptions<
|
||||
Response<AdminTaxRatesRes>,
|
||||
Error,
|
||||
AdminPostTaxRatesReq
|
||||
>
|
||||
) => {
|
||||
const { client } = useMedusa()
|
||||
const queryClient = useQueryClient()
|
||||
return useMutation(
|
||||
(payload: AdminPostTaxRatesReq) => client.admin.taxRates.create(payload),
|
||||
buildOptions(queryClient, adminTaxRateKeys.lists(), options)
|
||||
)
|
||||
}
|
||||
|
||||
export const useAdminUpdateTaxRate = (
|
||||
id: string,
|
||||
options?: UseMutationOptions<
|
||||
Response<AdminTaxRatesRes>,
|
||||
Error,
|
||||
AdminPostTaxRatesTaxRateReq
|
||||
>
|
||||
) => {
|
||||
const { client } = useMedusa()
|
||||
const queryClient = useQueryClient()
|
||||
|
||||
return useMutation(
|
||||
(payload: AdminPostTaxRatesTaxRateReq) =>
|
||||
client.admin.taxRates.update(id, payload),
|
||||
buildOptions(
|
||||
queryClient,
|
||||
[adminTaxRateKeys.lists(), adminTaxRateKeys.detail(id)],
|
||||
options
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
export const useAdminDeleteTaxRate = (
|
||||
id: string,
|
||||
options?: UseMutationOptions<Response<AdminTaxRatesDeleteRes>, Error, void>
|
||||
) => {
|
||||
const { client } = useMedusa()
|
||||
const queryClient = useQueryClient()
|
||||
|
||||
return useMutation(
|
||||
() => client.admin.taxRates.delete(id),
|
||||
buildOptions(
|
||||
queryClient,
|
||||
[adminTaxRateKeys.lists(), adminTaxRateKeys.detail(id)],
|
||||
options
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
export const useAdminCreateProductTaxRates = (
|
||||
id: string,
|
||||
options?: UseMutationOptions<
|
||||
Response<AdminTaxRatesRes>,
|
||||
Error,
|
||||
AdminPostTaxRatesTaxRateProductsReq
|
||||
>
|
||||
) => {
|
||||
const { client } = useMedusa()
|
||||
const queryClient = useQueryClient()
|
||||
|
||||
return useMutation(
|
||||
(payload: AdminPostTaxRatesTaxRateProductsReq) =>
|
||||
client.admin.taxRates.addProducts(id, payload),
|
||||
buildOptions(
|
||||
queryClient,
|
||||
[adminTaxRateKeys.lists(), adminTaxRateKeys.detail(id)],
|
||||
options
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
export const useAdminDeleteProductTaxRates = (
|
||||
id: string,
|
||||
options?: UseMutationOptions<
|
||||
Response<AdminTaxRatesRes>,
|
||||
Error,
|
||||
AdminDeleteTaxRatesTaxRateProductsReq
|
||||
>
|
||||
) => {
|
||||
const { client } = useMedusa()
|
||||
const queryClient = useQueryClient()
|
||||
|
||||
return useMutation(
|
||||
(payload: AdminDeleteTaxRatesTaxRateProductsReq) =>
|
||||
client.admin.taxRates.removeProducts(id, payload),
|
||||
buildOptions(
|
||||
queryClient,
|
||||
[adminTaxRateKeys.lists(), adminTaxRateKeys.detail(id)],
|
||||
options
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
export const useAdminCreateProductTypeTaxRates = (
|
||||
id: string,
|
||||
options?: UseMutationOptions<
|
||||
Response<AdminTaxRatesRes>,
|
||||
Error,
|
||||
AdminPostTaxRatesTaxRateProductTypesReq
|
||||
>
|
||||
) => {
|
||||
const { client } = useMedusa()
|
||||
const queryClient = useQueryClient()
|
||||
|
||||
return useMutation(
|
||||
(payload: AdminPostTaxRatesTaxRateProductTypesReq) =>
|
||||
client.admin.taxRates.addProductTypes(id, payload),
|
||||
buildOptions(
|
||||
queryClient,
|
||||
[adminTaxRateKeys.lists(), adminTaxRateKeys.detail(id)],
|
||||
options
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
export const useAdminDeleteProductTypeTaxRates = (
|
||||
id: string,
|
||||
options?: UseMutationOptions<
|
||||
Response<AdminTaxRatesRes>,
|
||||
Error,
|
||||
AdminDeleteTaxRatesTaxRateProductTypesReq
|
||||
>
|
||||
) => {
|
||||
const { client } = useMedusa()
|
||||
const queryClient = useQueryClient()
|
||||
|
||||
return useMutation(
|
||||
(payload: AdminDeleteTaxRatesTaxRateProductTypesReq) =>
|
||||
client.admin.taxRates.removeProductTypes(id, payload),
|
||||
buildOptions(
|
||||
queryClient,
|
||||
[adminTaxRateKeys.lists(), adminTaxRateKeys.detail(id)],
|
||||
options
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
export const useAdminCreateShippingTaxRates = (
|
||||
id: string,
|
||||
options?: UseMutationOptions<
|
||||
Response<AdminTaxRatesRes>,
|
||||
Error,
|
||||
AdminPostTaxRatesTaxRateShippingOptionsReq
|
||||
>
|
||||
) => {
|
||||
const { client } = useMedusa()
|
||||
const queryClient = useQueryClient()
|
||||
|
||||
return useMutation(
|
||||
(payload: AdminPostTaxRatesTaxRateShippingOptionsReq) =>
|
||||
client.admin.taxRates.addShippingOptions(id, payload),
|
||||
buildOptions(
|
||||
queryClient,
|
||||
[adminTaxRateKeys.lists(), adminTaxRateKeys.detail(id)],
|
||||
options
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
export const useAdminDeleteShippingTaxRates = (
|
||||
id: string,
|
||||
options?: UseMutationOptions<
|
||||
Response<AdminTaxRatesRes>,
|
||||
Error,
|
||||
AdminDeleteTaxRatesTaxRateShippingOptionsReq
|
||||
>
|
||||
) => {
|
||||
const { client } = useMedusa()
|
||||
const queryClient = useQueryClient()
|
||||
|
||||
return useMutation(
|
||||
(payload: AdminDeleteTaxRatesTaxRateShippingOptionsReq) =>
|
||||
client.admin.taxRates.removeShippingOptions(id, payload),
|
||||
buildOptions(
|
||||
queryClient,
|
||||
[adminTaxRateKeys.lists(), adminTaxRateKeys.detail(id)],
|
||||
options
|
||||
)
|
||||
)
|
||||
}
|
||||
51
packages/medusa-react/src/hooks/admin/tax-rates/queries.ts
Normal file
51
packages/medusa-react/src/hooks/admin/tax-rates/queries.ts
Normal file
@@ -0,0 +1,51 @@
|
||||
import {
|
||||
AdminTaxRatesRes,
|
||||
AdminTaxRatesListRes,
|
||||
AdminGetTaxRatesParams,
|
||||
} 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_TAX_RATES_QUERY_KEY = `admin_tax_rates` as const
|
||||
|
||||
export const adminTaxRateKeys = queryKeysFactory(ADMIN_TAX_RATES_QUERY_KEY)
|
||||
|
||||
type TaxRateQueryKeys = typeof adminTaxRateKeys
|
||||
|
||||
export const useAdminTaxRates = (
|
||||
query?: AdminGetTaxRatesParams,
|
||||
options?: UseQueryOptionsWrapper<
|
||||
Response<AdminTaxRatesListRes>,
|
||||
Error,
|
||||
ReturnType<TaxRateQueryKeys["list"]>
|
||||
>
|
||||
) => {
|
||||
const { client } = useMedusa()
|
||||
const { data, ...rest } = useQuery(
|
||||
adminTaxRateKeys.list(query),
|
||||
() => client.admin.taxRates.list(query),
|
||||
options
|
||||
)
|
||||
return { ...data, ...rest } as const
|
||||
}
|
||||
|
||||
export const useAdminTaxRate = (
|
||||
id: string,
|
||||
query?: AdminGetTaxRatesParams,
|
||||
options?: UseQueryOptionsWrapper<
|
||||
Response<AdminTaxRatesRes>,
|
||||
Error,
|
||||
ReturnType<TaxRateQueryKeys["detail"]>
|
||||
>
|
||||
) => {
|
||||
const { client } = useMedusa()
|
||||
const { data, ...rest } = useQuery(
|
||||
adminTaxRateKeys.detail(id),
|
||||
() => client.admin.taxRates.retrieve(id, query),
|
||||
options
|
||||
)
|
||||
return { ...data, ...rest } as const
|
||||
}
|
||||
Reference in New Issue
Block a user