import type { TaxCategory, TaxCategoryAddTaxRateAction, TaxCategoryChangeNameAction, TaxCategoryRemoveTaxRateAction, TaxCategoryReplaceTaxRateAction, TaxCategorySetDescriptionAction, TaxCategorySetKeyAction, TaxCategoryUpdateAction, } from "@commercetools/platform-sdk"; import type { Writable } from "#src/types.ts"; import type { RepositoryContext } from "../abstract.ts"; import { AbstractUpdateHandler } from "../abstract.ts"; import { taxRateFromTaxRateDraft } from "./helpers.ts"; type TaxCategoryUpdateHandlerMethod = ( context: RepositoryContext, resource: Writable, action: T, ) => void; type TaxCategoryUpdateActions = { [P in TaxCategoryUpdateAction as P["action"]]: TaxCategoryUpdateHandlerMethod

; }; export class TaxCategoryUpdateHandler extends AbstractUpdateHandler implements TaxCategoryUpdateActions { addTaxRate( context: RepositoryContext, resource: Writable, { taxRate }: TaxCategoryAddTaxRateAction, ) { if (resource.rates === undefined) { resource.rates = []; } resource.rates.push(taxRateFromTaxRateDraft(taxRate)); } changeName( context: RepositoryContext, resource: Writable, { name }: TaxCategoryChangeNameAction, ) { resource.name = name; } removeTaxRate( context: RepositoryContext, resource: Writable, { taxRateId }: TaxCategoryRemoveTaxRateAction, ) { if (resource.rates === undefined) { resource.rates = []; } resource.rates = resource.rates.filter( (taxRate) => taxRate.id !== taxRateId, ); } replaceTaxRate( context: RepositoryContext, resource: Writable, { taxRateId, taxRate }: TaxCategoryReplaceTaxRateAction, ) { if (resource.rates === undefined) { resource.rates = []; } const taxRateObj = taxRateFromTaxRateDraft(taxRate); for (let i = 0; i < resource.rates.length; i++) { const rate = resource.rates[i]; if (rate.id === taxRateId) { resource.rates[i] = taxRateObj; } } } setDescription( context: RepositoryContext, resource: Writable, { description }: TaxCategorySetDescriptionAction, ) { resource.description = description; } setKey( context: RepositoryContext, resource: Writable, { key }: TaxCategorySetKeyAction, ) { resource.key = key; } }