Skip to content

useCustomerCompanies ​

The useCustomerCompanies composable provides comprehensive utilities for customer company operations including company management, VAT validation, address handling, and more.

NOTE

This composable is designed specifically for customer-related functionalities and may not be suitable for general use cases.

Features ​

  • Company management with deletion operations and error handling
  • VAT validation using VEIS (VAT Information Exchange System)
  • Address formatting for billing and shipping

Usage ​

Basic Usage ​

ts
const {
  validateVatNumber,
  hasValidatedVat,
  vatValid,
  vatValidating,
  vatValidation,
  vatValidationSummary,
} = useCustomerCompanies();

// VAT number input
const vatNumber = ref('');

watch(vatNumber, async (newVat) => {
  if (newVat && newVat.length > 5) {
    await validateVatNumber(newVat);
  }
});
vue
<template>
  <label for="vat-number">VAT Number:</label>
  <input
    id="vat-number"
    v-model="vatNumber"
    type="text"
    placeholder="e.g., DE123456789"
  />

  <span v-if="vatValidating">Validating...</span>
  <span v-else-if="hasValidatedVat && vatValid">Valid VAT</span>
  <span v-else-if="hasValidatedVat && !vatValid">Invalid VAT</span>
  <span v-else>Enter a VAT Number</span>
</template>

Properties and Methods ​

Company Management ​

deleteCompany ​

ts
deleteCompany(id?: string, entityName?: string): Promise<boolean>

Deletes a customer company with error handling and user feedback.

  • Parameters:

    • id: Company ID to delete
    • entityName: Display name for toast messages
  • Returns: Promise resolving to true on success, false on failure

  • Features: Toast notifications, error logging, validation

Tag and Group Utilities ​

extractCompanyGroupsFromTags ​

ts
extractCompanyGroupsFromTags(tags: string[]): string[]

Extracts company group names from a tags array.

  • Parameters: Array of tags (e.g., ['group:premium', 'status:active'])
  • Returns: Array of group names (e.g., ['premium'])
  • Logic: Filters tags starting with 'group:' and removes the prefix

convertCompanyGroupsToTags ​

ts
convertCompanyGroupsToTags(companyGroups: string[]): string[]

Converts company group names to tag format.

  • Parameters: Array of group names (e.g., ['premium', 'europe'])
  • Returns: Array of formatted tags (e.g., ['group:premium', 'group:europe'])

VAT Validation State ​

hasValidatedVat ​

ts
hasValidatedVat: Readonly<Ref<boolean>>;

Whether VAT validation has been performed.

vatValid ​

ts
vatValid: Readonly<Ref<boolean>>;

Whether the validated VAT number is valid.

vatValidating ​

ts
vatValidating: Readonly<Ref<boolean>>;

Whether VAT validation is currently in progress.

vatNumberValidated ​

ts
vatNumberValidated: Readonly<Ref<string>>;

The VAT number that was last validated.

vatValidation ​

ts
vatValidation: Readonly<Ref<CustomerVatValidation | undefined>>;

Complete VAT validation result from VEIS.

vatValidationSummary ​

ts
vatValidationSummary: Ref<DataItem[]>;

Formatted summary of VAT validation data for display.

VAT Validation Methods ​

validateVatNumber ​

ts
validateVatNumber(vatNumber: string): Promise<void>

Validates a VAT number using the VEIS system.

  • Parameters: VAT number to validate
  • Features: Caching, error handling, summary generation
  • Side effects: Updates all VAT-related reactive state

Address Utilities ​

getAddresses ​

ts
getAddresses(billing: AddressUpdate, shipping?: AddressUpdate): AddressUpdate[]

Formats billing and shipping addresses for API submission.

  • Parameters:

    • billing: Billing address data
    • shipping: Optional shipping address data
  • Returns: Array of properly formatted addresses

  • Logic: Sets appropriate addressType values based on parameters

Type Definitions ​

ts
function useCustomerCompanies(): UseCustomerCompaniesReturnType;

interface UseCustomerCompaniesReturnType {
  deleteCompany: (id?: string, entityName?: string) => Promise<boolean>;
  extractCompanyGroupsFromTags: (tags: string[]) => string[];
  convertCompanyGroupsToTags: (companyGroups: string[]) => string[];
  hasValidatedVat: Readonly<Ref<boolean>>;
  vatValid: Readonly<Ref<boolean>>;
  vatValidating: Readonly<Ref<boolean>>;
  vatNumberValidated: Readonly<Ref<string>>;
  vatValidation: Readonly<Ref<CustomerVatValidation | undefined>>;
  vatValidationSummary: Ref<DataItem[]>;
  validateVatNumber: (vatNumber: string) => Promise<void>;
  getAddresses: (
    billing: AddressUpdate,
    shipping?: AddressUpdate,
  ) => AddressUpdate[];
}

interface CustomerVatValidation {
  valid: boolean;
  vatNumber: string;
  name?: string;
  address?: string;
  requestDate?: string;
}

interface AddressUpdate {
  firstName: string;
  lastName: string;
  companyName?: string;
  streetAddress: string;
  city: string;
  postalCode: string;
  country: string;
  phone?: string;
  email?: string;
  addressType?: 'billing' | 'shipping' | 'billingandshipping';
}

Dependencies ​

This composable depends on:

  1. useI18n for internationalization