import {Meta} from '@storybook/addon-docs/blocks'

<Meta title='@dxtmisha/ru/functional/Classes/DesignChanged - Утилита отслеживания изменений'/>

# Класс DesignChanged

Утилитарный класс, предназначенный для отслеживания изменений в свойствах объекта. Он хранит кэш предыдущих значений и предоставляет методы для обнаружения различий между текущим состоянием и состоянием на момент последнего обновления.

## Ключевые особенности

- **Эффективное сравнение** — сравнивает текущие значения свойств с локальным кэшем для выявления изменений.
- **Выборочное отслеживание** — поддерживает отслеживание определенного подмножества свойств через параметр `watch`.
- **Пакетное обновление** — предоставляет способ синхронизации всего кэша с текущим состоянием свойств.

## Инициализация

Создает новый экземпляр `DesignChanged`. Класс предназначен для отслеживания изменений в свойствах объекта путем сравнения их с внутренним кэшем (состоянием на момент последнего обновления).

**Параметры:**
- `props: T` — объект с данными, свойства которого необходимо отслеживать.
- `watch: string[] = Object.keys(props)` — массив имен свойств (ключей), за которыми нужно следить. По умолчанию отслеживаются все свойства объекта `props`.

```typescript
import { DesignChanged } from '@dxtmisha/functional'

// 1. Отслеживание всех свойств по умолчанию
const props = { title: 'Привет', count: 1 }
const tracker = new DesignChanged(props)

// 2. Отслеживание конкретных свойств (подмножества)
const trackerPartial = new DesignChanged(props, ['title'])

console.log(tracker.isChanged()) // false
```

## Обнаружение изменений

### `is`

Проверяет, были ли изменены определенные свойства с момента последнего обновления.

**Параметры:**
- `name: string | string[]` — имя одного свойства или массив имен свойств для проверки.

**Возвращает:** `boolean` — `true`, если любое из указанных свойств изменилось.

### `isChanged`

Проверяет, изменилось ли любое из отслеживаемых свойств (определенных в списке `watch`).

**Возвращает:** `boolean` — `true`, если хотя бы одно отслеживаемое свойство имеет другое значение.

## Синхронизация данных

### `update`

Синхронизирует внутренний кэш с текущими значениями всех отслеживаемых свойств. После вызова этого метода `isChanged()` будет возвращать `false` до тех пор, пока свойства не будут изменены снова.

**Возвращает:** `void`

