# WoonTotaal client

This library contains 2 example WoonTotaal clients and some helper functions.
Install the library using npm:

```text
npm install @sieval/woontotaal-client --save
```

## Usage

Import one of the 2 clients:

```typescript
import { WoonTotaalAxiosClient } from '@sieval/woontotaal-client/axios';
import { WoonTotaalFetchClient } from '@sieval/woontotaal-client/fetch';
```

Fetch example:

```typescript
const client = new WoonTotaalFetchClient('https://woontotaal.example.com');

// retrieve token using provided credentials
const token = await client.auth_CreateToken({
  // the api key is optional and provided by the owner of the WoonTotaal instance
  apiKey: '00000000-0000-0000-0000-000000000000',
  domainName: 'store_1',
  password: 'test',
  username: 'employee_a',
});

// set access token, the client will now automatically append it to the headers of any call
client.setConfig({ bearerToken: token.access_token });
```

## Helper functions

The library also contains a set of helper functions:

```typescript
// checks if polygon has all required dimensions
export declare function polygonHasRequiredDimensions(polygon: Polygon): boolean;

// checks if polygon has all required materials
export declare function polygonHasRequiredMaterials(polygon: Polygon): boolean;

// checks if polygon has a selected product
export declare function polygonHasProduct(polygon: Polygon): boolean;

// checks if polygon has any properties which are required, but have no value
export declare function polygonHasRequiredProperties(polygon: Polygon): boolean;

// checks if a polygon is complete (has all required fields)
export declare function polygonIsCompleted(polygon: Polygon): boolean;

// builds configurator steps for the given polygon and wizard steps
export declare function buildConfiguratorSteps(
  polygon: Polygon,
  steps: WizardStep[]
): ConfiguratorStep[];

// gets all messages in a polygon
export declare function getAllMessages(polygon: Polygon): Message[];

// gets all properties in a polygon
export declare function getAllProperties(polygon: Polygon): Property[];

// gets all messages in a polygon with a certain context
export declare function getPolygonMessages(
  polygon: Polygon,
  context?: MessageContext,
  contextReference?: string,
  excludeContexts?: MessageContext[]
): Message[];

// patches a project using JSON patch operations
export declare function patchProject(project: Project, operations: JsonOperation[]): void;
```
