### Компонент для выбора подразделений {#departmentchooser}

Компонент для выбора подразделений представляет собой 
кликабельное поле ввода, по нажатию которой открывается 
нативный экран «Подразделения».

Компонент может иметь состояния: активен и не активен. 
Последнее означает, что значение данного экземпляра 
компонента менять нельзя и по клику по нему не должен 
открываться экран выбора подразделения (-ий).

Для построения экрана компонент принимает следующие 
параметры:

*   имеется ли связь с компонентом;
*   единственный или множественный выбор.

**Элементы управления экрана "Подразделения".**

+----------------------------------------------------------+------------------------+--------------------------------------------+
| Элемент управления                                       | Расположение на экране | Описание                                   |
+==========================================================+========================+============================================+
| *Верхняя панель*                                         |                        |                                            |
+----------------------------------------------------------+------------------------+--------------------------------------------+
| ![](resources/img/workflow/elements/button_filters.png)\ | Справа                 | "Навигатор" - кнопка перехода к            |
|                                                          |                        | навигатору экрана                          |
+----------------------------------------------------------+------------------------+--------------------------------------------+
| *Компонент "Путь"*                                       | Ниже верхней панели    | Компонент, отображающий путь до выделенной |
|                                                          |                        | ноды навигатора, согласно которой          |
|                                                          |                        | отображается текущий список подразделений  |
+----------------------------------------------------------+------------------------+--------------------------------------------+
| *Рабочая область*                                        |                        |                                            |
+----------------------------------------------------------+------------------------+--------------------------------------------+
| Поле поиска                                              | Вверху основной        | Поле ввода с плейсхолдером "Поиск          |
|                                                          | области                | подразделений" и иконкой лупы справа       |
+----------------------------------------------------------+------------------------+--------------------------------------------+
| Панель со списком подразделений                          | Вся основная область   | Плашки, отображающие информацию о          |
|                                                          |                        | подразделениях                             |
+----------------------------------------------------------+------------------------+--------------------------------------------+
| Выбрать                                                  | Внизу                  | Кнопка                                     |
+----------------------------------------------------------+------------------------+--------------------------------------------+

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

В целом, логика выбора подразделения аналогична выбору 
[пользователя(-ей)](#userchooser).

По нажатию на кнопку *навигатора*, а также проведя 
пальцем от правой стороны экрана к левой, раскрывается 
правая панель навигатора (илл. «Навигатор выбора 
пользователей»).

Верхняя панель содержит только надпись "Навигатор". Сам 
навигатор может содержать следующий набор узлов, каждый 
из которых отделен от предыдущего сплитом:

*   `Выбранные`
*   `%Название_организации%` (выделен по умолчанию при 
    открытии экрана) - содержит дерево всей орг.структуры.

Компонент *"Путь"* содержит полный путь до выделенного 
узла навигатора. Содержимое компонента: полные названия 
узлов от корневой родительской до текущей открытой, 
включая ее саму.

*Отображаемый список подразделений* зависит от того, 
что выделено в навигаторе:

*   `Выбранные` - все текущие подразделения, напротив 
    которых установлен флажок выбора;
*   `%Название_организации%` - список подразделений, 
    принадлежащих выбранному подразделению орг.
    структуры.

Если имеется связь с другим компонентом, то необходимо 
сужать отображаемый список согласно связи (передав в API 
соответствующий параметр).

Плашки могут отличаться, в зависимости от отображаемой 
информации:

*   Плашка подразделения содержит:

    *   первый блок - полное название подразделения;
    *   второй блок - полное название ближайшего 
        родительского подразделения, к которому 
        относится данное подразделение (для подразделения 
        первого уровня - отсутствует).

*   Плашка произвольного текста содержит:

    *   первый блок - произвольный текст;
    *   второй блок содержит лейбл `Введен вручную` (цвет 
        `#ff4800`).

Во всех вариантах невмещающиеся по ширине названия 
подразделений переносятся на новую строку.

Список отображается с постепенной догрузкой. Изначально 
подгружается 30 подразделений. При прокрутке пользователем 
вниз список дополняется новыми 30 подразделениями.

Список подразделений сортируется по убыванию уровня орг.
структуры вне зависимости от уровня подразделения.

*Поведение экрана:*

*   Для компонента с единственным выбором:

    *   Для выбора подразделения необходимо нажать 
        на строку, вся строка выделится фоном.

    *   Повторное нажатие на строку не снимает 
        выделение.

    *   При выделении подразделения в списке, 
        выделение предыдущего элемента снимается.

*   Для компонента с множественным выбором:

    *   Для выбора подразделения необходимо нажать на 
        строку или флажок, находящийся справа 
        соответствующего элемента списка.
    
    *   Удалить подразделение из списка выбранных 
        можно, выключив флажок, подразделение 
        удаляется из списка выбранных без 
        подтверждения.
    
    *   В контекстное меню любой плашки (во всех 
        узлах навигатора, кроме "Выбранные") 
        добавляется пункт "Выбрать всех". По его 
        нажатию происходит выделение всех еще 
        невыделенных подразделений отображаемого 
        списка.
        
        Если все подразделения отображаемого списка 
        выделены, пункт меню заменяется на "Снять 
        выделение". По его нажатию происходит 
        развыделение всех подразделений списка 
        (пункт меню снова принимает вид "Выбрать 
        всех").

*Поиск подразделений* осуществляется только внутри 
отображаемого списка и только в узле навигатора 
"%Название_организации%" (отсутствует для узла 
"Выбранные"). Поиск является "живым", его результаты 
фильтруют отображаемый список. При вводе текста иконка 
лупы заменяется на иконку крестика. Очистить поле ввода 
можно, нажав на крестик (крестик заменяется на иконку 
лупы). Пустой запрос поиска - отображается список со 
всеми подразделениями данного узла навигатора.

Если пользователь на экране "Подразделения" нажимает 
на *кнопку "Назад"*, мобильный клиент возвращает 
пользователя к экрану, из которого он был вызван.

Если пользователь нажимает на *кнопку "Выбрать"*, 
мобильный клиент возвращает пользователя к предыдущему 
экрану, в поле компонента отображаются выбранные 
подразделения:

*   в нативных диалогах приложения - через запятую;
*   иначе - согласно проигрывателю формы.

> **Примечание**
> 
> Метод получения списка должностей описан в javadoc:
> 
> kz.arta.synergy.server.api.rest.userchooser#getPositions
> 
> Метод получения списка подразделений описан в javadoc:
> 
> kz.arta.synergy.server.api.rest.userchooser#getDepartments

