> For the complete documentation index, see [llms.txt](https://bogdanov-inc.gitbook.io/ui-konstruktor-oktell/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bogdanov-inc.gitbook.io/ui-konstruktor-oktell/primery/grid.md).

# Грид

Пример использования компонента

Рассмотрим пример создания подобной таблицы в  конструкторе:&#x20;

<figure><img src="https://899924798-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzcMn1glkgcrvuggFcDlD%2Fuploads%2FY8geEXhuN44wYeQqwQ9j%2Fimage.png?alt=media&amp;token=043c4a32-bf5b-4432-959c-c6cd7a02a332" alt=""><figcaption></figcaption></figure>

Добавим компонент ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADkAAAA7CAYAAADB0CKOAAAAAXNSR0IArs4c6QAAAxBJREFUaEPtWltPGkEYPezCLiIWUmvFqr1gIuItUTGKPvSSNu1b+9L+yPalfWkfa3wQrMRaLIqJ1aaQ4LaRWMNFFoRmB9cQHgyzbuyq37yQXeab+c45M2cuYPt7mKvhihcbgbwiCpOSV0RIcCm5vq4iualyYZckG2bDTnR3iyxOUY4RjRxBVfn8bigoYWxM4upbr8wF8t3bnKFO+vrtCIedLDYSOUI6VTHUzus3bkNxBLKZNlLyjIFEw5VjltGcPIMsMh4yHo65RMbDQRYZDxkPx83Ah/d57o21RrB/QMLUVH1zHVspYXe3zDFI61W1jf7LV+3ccVoA1xKinSB2dvgSlCQB4+MOOBw2lmC5XMO3NRXlCt8pxO93nJ5keJFygeRt3Cr1CWSzEtdiuF4L46HzJJ0n6Y6n5ZWG9q60d+XYu5K7kruSu5K7NjJAS4hZS8i1+Omu5cljsYp0aLaYIIbTISUNU2exQFLSYoIYTudcSkYjCSjKPmRZZgnIsh0zs6NwuerPVinnAhmLJeHz3URf322Gp1I5RrVaQ61WRalUgd0ungJW1QoEwcbe1W/Sj9mnwyGymHy+iNrJpboo2NDubjONI1NBptO/EY0m4PG40dPTiXTqD7xeN2bDI2gkpFgs4dPHKILD9xAM3oeiZBGP/2AxGlF7mSweP5mALBv7c1IzO6aDTHzfxdNnIYiiyBJeWFhFKDSM7e0UU93n68SX5Q0IogiPx8VAauTs7WURCg2hVFIRWUogPDdiXZB6sjqby8sb6O29xUB0dXmRyWTZcy5XYFU0kKmUwr6fng5eDpCxlSSev5hBW5sMbVguLq5hfn4cm5s/kcnsY8Dfi5HRB+xZBxmPbzPVAoG7lwPkVvIX8oUjiIKAYlHF5OQg/AN3EFlaZ8YyNz/GwOkgOzpcWPi8Cq/3BjOlarWKg4McBgP9bPiaUc41J5sTaJxbrSbXqKgec3hYwNfVLTx8NNFqM2fW++8gG5cSPVNtSVHVMpxOC7irKTRfQCOmKnkB+RrqgkAaos2CQaSkBUUxlNI/vz/zrDSk9YoAAAAASUVORK5CYII=) в рабочую область конструктора.

По умолчанию в таблице установлен тестовый набор данных для ускорения прототипирования компонента, который имеет вид:

```javascript
[
    {
      "id": 124,
      "name": "Очередь 1",
      "type": "queue_all",
      "timestartutc": "2023-05-20T12:45",
      "timestoputc": "2023-05-20T12:55",
      "status": "status_1",
      "load": 90
    },
    {
      "id": 123,
      "name": "Очередь ожидания",
      "type": "queue_waiting",
      "timestartutc": "2023-05-24T13:15",
      "timestoputc": "2023-05-24T14:20",
      "status": "status_2",
      "load": 150
    },
]
```

Для того, чтобы установить собственный набор данных, необходимо добавить их напрямую  во вкладке редактора **JSON** (форматирование также должно быть **JSON**). Либо получить их с бекенда и установить в значение соответствующего поля таблицы (*<mark style="color:purple;">data</mark>*).

Сначала добавим необходимые столбцы, и сформируем тело таблицы. В *<mark style="color:purple;">columns</mark>* зададим параметр *<mark style="color:purple;">headerBg</mark>* выбрав цвет по усмотрению. Добавим колонку с отображением id строки. В опциях *<mark style="color:purple;">columns</mark>* добавляем элемент, присваиваем его свойствам следующие значения:&#x20;

```javascript
{
    "key": "id",
    "title": "ID",
    "order": 10,
    "hidden": false,
    "sortable": true
},
```

Аналогичным образом настраиваем остальные столбцы.  Для объединенного столбца **Продолжительность** настройки будут немного отличаться:

```javascript
{
    "key": "time",
    "title": "Продолжительность",
    "valueType": "datetime",
    "order": 20,
    "childColumns": [
      {
        "key": "timestartutc",
        "title": "С",
        "valueType": "date",
        "order": 10,
        "width": "170px",
        "sortable": true
      },
      {
        "key": "timestoputc",
        "title": "По",
        "valueType": "datetime",
        "order": 30,
        "width": "170px"
      }
    ],
    "icon": {
      "prefix": "oktell",
      "name": "clock",
      "id": "oktell-clock"
    }
},

```

Для столбцов **timestartutc** и **timestoputc** указываем преобразование значения **date** или **datetime** по усмотрению.

Должна получиться таблица:

<figure><img src="https://899924798-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzcMn1glkgcrvuggFcDlD%2Fuploads%2F89RblOcC0NS8ReOkyMvI%2Fimage.png?alt=media&amp;token=0108914b-5c14-4953-b518-3d95635440be" alt=""><figcaption></figcaption></figure>

Добавим дочерние элементы таблицы для их привязки к ячейкам. Нам потребуются:

* Индикатор высокой загрузки ![](https://899924798-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzcMn1glkgcrvuggFcDlD%2Fuploads%2F0sd2Hk4yZ4J9jkvl4rUq%2Fimage.png?alt=media\&token=ab11a9f4-6ab3-4740-8aff-822ea0eb32ab). Является простым контейнером с размещённым в нём текстовым блоком, стилизованным согласно требуемому UI
* Индикатор средней загрузки ![](https://899924798-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzcMn1glkgcrvuggFcDlD%2Fuploads%2FSj4aqSupDXiPlSYKnxUg%2Fimage.png?alt=media\&token=15f887ec-b783-4059-87c0-0d98567c44a9). Аналогично предыдущему блоку.
* Числовые блоки отображения уровня загрузки ![](https://899924798-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzcMn1glkgcrvuggFcDlD%2Fuploads%2FSuotnOnV9dXaWiHy5YnB%2Fimage.png?alt=media\&token=041b9ad7-b688-4ddf-9a8e-ec8b28429800) Являются также контейнерами с дочерними текстовыми блоками. Чтобы поглощаемое значение таблицы не переопределяло весь текст, а только числовое значение, имеет смысл разделить их на два отдельных текстовых блока "100" и "%". Активировать свойство *<mark style="color:purple;">valueConsumer</mark>* для текстового блока "100"&#x20;
* Блок управления очередью ![](https://899924798-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzcMn1glkgcrvuggFcDlD%2Fuploads%2FpYkwZZVQFSUiEur5mZ8z%2Fimage.png?alt=media\&token=3a4b85a6-d5ad-460f-8c3a-009c43b45aaa) . Всплывающее меню с набором действий. Более подробно о построении данного компонента можно узнать в описании компонента Кнопка
* Блок стилизованного названия очереди ![](https://899924798-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzcMn1glkgcrvuggFcDlD%2Fuploads%2F4byheRTbBprMiBx1oHNV%2Fimage.png?alt=media\&token=d6ecbe89-b7a1-4e0e-b67a-ba7b56d61380)

{% hint style="info" %}
На данный момент привязка элементов осуществляется вручную через указание id элемента. В будущем планируется упростить данное действие с помощью вспомогательного UI/UX. В текущей реализации имеет смысл задавать привязываемым элементам осмысленные id, для упрощения процесса их привязки, например **load\_high**, **load\_mid** и т.д.
{% endhint %}

Далее нам необходимо добавить привязки данных элементов к ячейкам таблицы  в свойстве *<mark style="color:purple;">cellLinks</mark>* раздела настроек *<mark style="color:purple;">columns\[</mark>n<mark style="color:purple;">]</mark>*. В настройках столбца с *<mark style="color:purple;">key</mark>*: **load**  откроем список *<mark style="color:purple;">cellLinks</mark>*,  затем добавим в него необходимые элементы:

Рассмотрим на примере привязки индикатора высокой загрузки. Устанавливаем следующие значения полей элемента привязки:

```javascript
{
    "conditionType": "range",
    "childId": "load_high",
    "conditionValue": "201,  9999",
    "order": 200
},
```

Таким образом, компонент будет отображаться в ячейках столбца **load**, в случае, если значение в соответствующей строке таблицы будет больше или равно **201**, но меньше **9999**

Для блока индикатора средней загрузки настройки аналогичны, кроме диапазона значений - устанавливаем его в **80**, **200**. Важно установить диапазоны таким образом, чтобы они не пересекались, если необходимо отображение только одного такого элемента в ячейке.

В блоке *<mark style="color:purple;">cellLinks</mark>* этого же столбца добавим элемент числового отображения уровня загрузки. Сначала в настройках элемента *<mark style="color:purple;">columns\[</mark>n<mark style="color:purple;">]</mark>* активируем режим инъекции данных *<mark style="color:purple;">valueInjection</mark>*, а затем добавим привязки необходимых элементов аналогично блокам индикации загрузки. Поскольку ранее мы активировали режим поглощения данных в текстовом блоке "100", то его значение будет заменено на значение **load**  в конкретной ячейке.&#x20;

Установим необходимые значения *<mark style="color:purple;">order</mark>* для добавленных привязок для достижения  желаемого расположения в ячейке Если все вышеописанные манипуляции выполнены корректно, то ячейки столбца **load** должны принять следующий вид:

![](https://899924798-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzcMn1glkgcrvuggFcDlD%2Fuploads%2FyFWmsbPU1R3tDhU2JJUe%2Fimage.png?alt=media\&token=a4614a9a-495a-4f29-b1d6-a8a2c03d2e60)

Добавим столбец управления очередью. Ключ столбца можно указывать произвольный, т.к. в данном столбце нам не потребуются значения из таблицы. Добавим привязку элемента управления в данном столбце. Поскольку отображение данного компонента не предполагает условий, выбираем тип привязки **constant.** В ячейке отобразится элемент управления, по нажатию на который будет открыто всплывающее меню с набором действий с очередью соответствующей текущей строке таблицы.

{% hint style="info" %}
Во все дочерние компоненты строки таблицы передаётся **id** элемента *<mark style="color:purple;">data</mark>*, соответствующего данной строке. Таким образом, при выполнении событий компонентов внутри строки они передают в поле *<mark style="color:purple;">value</mark>* **id** данной строки, что позволяет на стороне **API** сервера идентифицировать к какому элементу относится данное действие. На данный момент это поддерживается только в событии *<mark style="background-color:purple;">onClick.</mark>* т.к. сценарии с использованием прочих событий внутри таблицы маловероятны и неочевидны
{% endhint %}

Привязка стилизованного блока названия очереди аналогична блокам числовой индикации загрузки, поэтому рассматривать её не будем.

Добавим группировку строк по дате. Для этого установим соответствующие свойства в *<mark style="color:purple;">rowsGrouping</mark>*:

```javascript
{
    "key": "timestartutc",
    "valueType": "date",
    "sortDirection": "descending"
}
```

Итогом всех этих действий должна стать таблица вида:

<figure><img src="https://899924798-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzcMn1glkgcrvuggFcDlD%2Fuploads%2FkOrSmjKQsLw41xBKUWIq%2Fimage.png?alt=media&amp;token=378be63c-4093-4cdd-a3e7-95a314c9172a" alt=""><figcaption></figcaption></figure>
