Константы и перечисления

В библиотеке Choices.js внутренняя архитектура во многом строится на наборе стабильных строковых констант и псевдоперечислений, которые обеспечивают согласованность между различными частями системы: обработчиками событий, механизмами рендеринга, состоянием элементов и конфигурацией. Использование фиксированных значений позволяет избежать «магических строк» в логике компонентов и упрощает расширение поведения без изменения базового API.

Событийная модель Choices.js опирается на централизованный набор идентификаторов, которые используются для взаимодействия между экземпляром компонента и внешним кодом. Эти события передаются через систему trigger и слушаются через on.

Ключевые события:

  • addItem — добавление нового элемента в выбранные значения.
  • removeItem — удаление элемента из текущего набора выбранных значений.
  • highlightItem — изменение состояния подсветки элемента в списке.
  • choice — выбор элемента из выпадающего списка.
  • search — выполнение поискового запроса по доступным вариантам.
  • showDropdown — открытие выпадающего списка.
  • hideDropdown — закрытие выпадающего списка.
  • change — обобщённое событие изменения состояния компонента.
  • focus — получение фокуса компонентом.
  • blur — потеря фокуса компонентом.

Эти события являются опорными точками для интеграции с внешними системами, аналитикой и кастомной логикой управления интерфейсом.

Константы действий (Action Types)

Внутренние механизмы управления состоянием списка часто описываются через типизированные действия. Такой подход приближает архитектуру Choices.js к паттерну, аналогичному flux-подобным системам.

Основные типы действий:

  • ADD_ITEM — добавление элемента в коллекцию выбранных значений.
  • REMOVE_ITEM — удаление элемента.
  • HIGHLIGHT_ITEM — установка активного элемента в списке.
  • ACTIVATE_CHOICES — активация доступных вариантов.
  • DEACTIVATE_CHOICES — деактивация списка вариантов.
  • FILTER_CHOICES — фильтрация элементов на основе строки поиска.
  • RESET_FILTERING — сброс фильтрации и возврат к исходному списку.
  • CLEAR_ALL — полная очистка выбранных значений.

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

Константы состояния элементов

Состояние элементов списка в Choices.js описывается через фиксированные маркеры, позволяющие однозначно определять поведение UI.

  • SELECTED — элемент находится в списке выбранных значений.
  • DISABLED — элемент недоступен для выбора.
  • ACTIVE — элемент находится в активной области взаимодействия.
  • FOCUSED — элемент выделен через клавиатурную навигацию.
  • HIDDEN — элемент исключён из отображения (например, из-за фильтрации).
  • MATCHED — элемент соответствует текущему поисковому запросу.

Эти состояния часто комбинируются, формируя сложные сценарии отображения: например, элемент может одновременно быть DISABLED и HIDDEN, что означает невозможность взаимодействия и исключение из текущего набора результатов.

Ключи конфигурации

Конфигурация экземпляра Choices.js строится на объекте настроек, где каждое поле соответствует заранее определённому ключу. Эти ключи функционируют как стабильные идентификаторы поведения.

Основные ключи:

  • removeItemButton — отображение кнопки удаления выбранного элемента.
  • searchEnabled — включение механизма поиска.
  • searchChoices — поиск по доступным вариантам.
  • shouldSort — сортировка элементов.
  • placeholder — отображение placeholder в пустом состоянии.
  • placeholderValue — текст placeholder.
  • duplicateItemsAllowed — разрешение дублирования выбранных значений.
  • silent — подавление событийной генерации.
  • loadingText — текст состояния загрузки.
  • noResultsText — текст при отсутствии результатов поиска.
  • noChoicesText — текст при отсутствии доступных вариантов.

Каждый из этих ключей участвует в построении поведенческого профиля экземпляра и влияет на внутренние условия рендеринга.

Ключи структуры данных

Внутренние структуры данных Choices.js используют стандартизированные ключи для описания элементов списка. Эти ключи позволяют унифицировать обработку пользовательских и серверных данных.

  • value — уникальное значение элемента.
  • label — отображаемый текст.
  • disabled — флаг недоступности элемента.
  • selected — признак выбора.
  • active — текущая активность элемента.
  • customProperties — произвольные дополнительные данные.
  • placeholder — признак элемента-заглушки.

Использование этих ключей обеспечивает совместимость между различными источниками данных, включая статические массивы и динамические API-ответы.

Константы шаблонов и рендеринга

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

  • choice — элемент списка доступных вариантов.
  • item — элемент выбранного значения.
  • group — группа элементов.
  • dropdown — контейнер выпадающего списка.
  • input — поле ввода поиска.

Каждый шаблон может быть переопределён, однако идентификаторы остаются неизменными, что позволяет сохранять согласованность между версиями библиотеки.

Клавиатурные коды и навигационные константы

Навигация по списку вариантов реализуется через фиксированные коды клавиш, абстрагированные в виде логических констант.

  • KEY_CODE_UP — переход к предыдущему элементу.
  • KEY_CODE_DOWN — переход к следующему элементу.
  • KEY_CODE_ENTER — выбор текущего элемента.
  • KEY_CODE_ESCAPE — закрытие списка.
  • KEY_CODE_BACKSPACE — удаление последнего выбранного элемента при пустом вводе.

Эти константы используются в обработчиках событий клавиатуры и обеспечивают единообразное поведение на разных платформах и браузерах.

Константы группировки

При работе с группированными списками применяются дополнительные маркеры структуры:

  • GROUP_VALUE — значение группы.
  • GROUP_LABEL — отображаемое имя группы.
  • GROUP_DISABLED — состояние недоступности всей группы.
  • GROUP_CHILDREN — набор дочерних элементов.

Группировка позволяет реализовывать сложные иерархические селекты без изменения базовой модели данных.

Константы фильтрации

Механизм поиска использует набор параметров, определяющих поведение фильтрации:

  • STARTS_WITH — совпадение по началу строки.
  • CONTAINS — совпадение по вхождению подстроки.
  • STRICT_EQUALS — строгое совпадение значений.
  • FUZZY_MATCH — нестрогий поиск с допуском к ошибкам.

Эти режимы определяют стратегию сопоставления пользовательского ввода с доступными вариантами.

Внутренние системные флаги

Помимо пользовательских констант, библиотека использует служебные флаги, управляющие внутренним жизненным циклом компонента:

  • INITIALIZED — экземпляр полностью инициализирован.
  • DESTROYED — экземпляр удалён и более не активен.
  • RENDERED — DOM-структура создана.
  • DIRTY — состояние требует перерисовки.
  • LOCKED — временная блокировка изменений.

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

Роль констант в архитектуре

Использование фиксированных наборов значений снижает связность между модулями, упрощает тестирование и уменьшает вероятность ошибок, связанных с опечатками или несовместимостью строковых идентификаторов. Константы выполняют функцию контрактов между слоями системы: логикой, представлением и внешними API-интеграциями.