npm package: @n3/filters-utils
Description: Utils for working with filter values
Latest version: 0.1.6

# @n3/filters-utils

Набор утилиты для работы со значениями фильтров.

Для работы используется массив с данными фильтров и объект с описаниями фильтров. С помощью них можно получить имена фильтров для отправки, сериализованные значения фильтров для отправки, проверку возможности сброса фильтров, а также парсинг значений для инициализации.

## Установка

```bash
npm install @n3/filters-utils
```

или

```bash
yarn add @n3/filters-utils
```

## Использование

Описание каждого фильтра представляется следующим объектом:

```typescript
type FilterType<Payload> = {
  getNames?: (payload: Payload, getFilter: GetFilter<Payload>) => string[];
  serializeValues?: (values: Values, payload: Payload, getFilter: GetFilter<Payload>) => Values;
  serializeValuesForQueryString?: (values: Values, payload: Payload, getFilter: GetFilter<Payload>) => Values;
  checkCanReset?: (values: Values, payload: Payload, getFilter: GetFilter<Payload>) => boolean;
  parseValues?: (values: Values, payload: Payload, getFilter: GetFilter<Payload>) => Values | Promise<Values>;
  getResetTo?: (payload: Payload, getFilter: GetFilter<Payload>) => Values;
};
```

- `getNames`: Function - необязательная, функция получения имён полей фильтра. Должна возвращать массив имён полей фильтра. По умолчанию, возвращает массив из одного элемента `payload.name`. Аргументы:

  - `payload`: Object - данные фильтра
  - `getFilter`: Function - получение описания фильтра по объекту данных (может быть использовано для описания вложенных структур)

- `serializeValues`: Function - необязательная, функция получения значений для отправки. Должна возвращать объект значений. Аргументы:

  - `appliedFilters` - Object - текущие значения примененных фильтров
  - `payload`: Object - данные фильтра
  - `getFilter`: Function - получение описания фильтра по объекту данных (может быть использовано для описания вложенных структур)

- `serializeValuesForQueryString`: Function - необязательная, функция получения значений для адресной строки. Должна возвращать объект значений. Аргументы:

  - `appliedFilters` - Object - текущие значения примененных фильтров
  - `payload`: Object - данные фильтра
  - `getFilter`: Function - получение описания фильтра по объекту данных (может быть использовано для описания вложенных структур)

- `checkCanReset`: Function - необязательная, определяет, возможен ли сброс данного фильтра. Должна возвращать булево значение. По умолчанию, берёт значение из `appliedFilters` по ключу `payload.name` и проверяет его на не ложность. Аргументы:

  - `appliedFilters` - Object - текущие значения примененных фильтров
  - `payload`: Object - данные фильтра
  - `getFilter`: Function - получение описания фильтра по объекту данных (может быть использовано для описания вложенных структур)

- `parseValues`: Function - необязательная, **асинхронная** функция получения значений для инициализации. Должна возвращать объект значений. Аргументы:

  - `values` - Object - необработанные значения фильтров, например, после парсинга значений браузерной строки
  - `payload`: Object - данные фильтра
  - `getFilter`: Function - получение описания фильтра по объекту данных (может быть использовано для описания вложенных структур)

- `getResetTo`: Function - необязательная, функция получения значений фильтров после сброса. Должна возвращать объект значений. Аргументы:

  - `payload`: Object - данные фильтра
  - `getFilter`: Function - получение описания фильтра по объекту данных (может быть использовано для описания вложенных структур)

### Утилиты

#### getFilterNames

```javascript
import { getFilterNames } from '@n3/filters-utils';
```

Собирает имена фильтров. Аргументы:

- `filterData`: Object[] - массив данных фильтров
- `getFilter`: Function - получение описания фильтра по объекту данных

#### serializeValues

```javascript
import { serializeValues } from '@n3/filters-utils';
```

Собирает значения фильтров для отправки. Аргументы:

- `appliedFilters` - Object - текущие значения примененных фильтров
- `filterData`: Object[] - массив данных фильтров
- `getFilter`: Function - получение описания фильтра по объекту данных

#### serializeValuesForQueryString

```javascript
import { serializeValues } from '@n3/filters-utils';
```

Собирает значения фильтров для сериализации в адресную строку. Аргументы:

- `appliedFilters` - Object - текущие значения примененных фильтров
- `filterData`: Object[] - массив данных фильтров
- `getFilter`: Function - получение описания фильтра по объекту данных

#### checkCanResetFilters

```javascript
import { checkCanResetFilters } from '@n3/filters-utils';
```

Определяет, возможен ли сброс фильтров. Аргументы:

- `appliedFilters` - Object - текущие значения примененных фильтров
- `filterData`: Object[] - массив данных фильтров
- `getFilter`: Function - получение описания фильтра по объекту данных

#### parseValues

```javascript
import { parseValues } from '@n3/filters-utils';
```

**Асинхронная** функция. Собирает значения фильтров для инициализации. Аргументы:

- `values` - Object - необработанные значения фильтров, например, после парсинга значений браузерной строки
- `filterData`: Object[] - массив данных фильтров
- `getFilter`: Function - получение описания фильтра по объекту данных

### getResetFiltersTo

```javascript
import { getResetFiltersTo } from '@n3/filters-utils';
```

Собирает значения фильтров для сброса. АргументыЖ

- `filterData`: Object[] - массив данных фильтров
- `getFilter`: Function - получение описания фильтра по объекту данных

## Локальная разработка

Репозиторий использует стабильную версию [yarn](https://yarnpkg.com/getting-started).

[Инструкция по установке](https://yarnpkg.com/getting-started/install).

### Команды

- `yarn build` - сборка;

- `yarn clean` - удалить все собранне файлы;

- `yarn test` - валидация кода.