# @isa/utils/format-name

A utility library for consistently formatting person and organisation names across the ISA-Frontend application.

## Overview

This library provides a single utility function `formatName` that standardizes the display of names by combining first name, last name, and organisation name components according to a consistent business rule. The function handles optional parameters gracefully and filters out empty or undefined values to produce clean, readable name strings.

The formatting follows the convention:
- Personal names are displayed as "LastName FirstName"
- Organisation names are separated from personal names with " - "
- Any combination of components can be provided
- Empty or undefined values are automatically excluded from the output

## Installation

```ts
import { formatName } from '@isa/utils/format-name';
```

## API Reference

### Functions

#### `formatName(params): string`

Formats a name by combining first name, last name, and organisation name according to business rules.

**Parameters:**

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `params` | `object` | Yes | An object containing the name components |
| `params.firstName` | `string` | No | The person's first name |
| `params.lastName` | `string` | No | The person's last name |
| `params.organisationName` | `string` | No | The organisation name |

**Returns:** `string` - The formatted name string

**Formatting Rules:**
- Names are formatted as "LastName FirstName"
- Organisation name is separated from the personal name with " - "
- Empty or undefined values are filtered out
- If all values are empty/undefined, returns an empty string

## Usage Examples

### Format a person with first and last name

```ts
const result = formatName({
  firstName: 'John',
  lastName: 'Doe'
});
// Returns: "Doe John"
```

### Format a person with organisation

```ts
const result = formatName({
  firstName: 'John',
  lastName: 'Doe',
  organisationName: 'Acme Corp'
});
// Returns: "Acme Corp - Doe John"
```

### Format organisation only

```ts
const result = formatName({
  organisationName: 'Acme Corp'
});
// Returns: "Acme Corp"
```

### Format with partial personal name

```ts
// Only last name
const result1 = formatName({
  lastName: 'Doe'
});
// Returns: "Doe"

// Only first name
const result2 = formatName({
  firstName: 'John'
});
// Returns: "John"

// Organisation with partial personal name
const result3 = formatName({
  firstName: 'John',
  organisationName: 'Acme Corp'
});
// Returns: "Acme Corp - John"
```

### Handle empty values

```ts
// Empty strings are filtered out
const result1 = formatName({
  firstName: '',
  lastName: '',
  organisationName: ''
});
// Returns: ""

// Undefined values are filtered out
const result2 = formatName({});
// Returns: ""
```

## Use Cases

This utility is commonly used in:
- Customer management interfaces (CRM)
- Order processing displays
- User profile presentations
- Report generation
- Any UI component that needs to display person or organisation names consistently

## Testing

The library includes comprehensive test coverage for all formatting scenarios. Run tests with:

```bash
nx test utils-format-name
```
