---
metadata:
  - name: generator
    content: Diplodoc Platform v5.66.1
  - property: og:type
    content: article
  - property: article:section
    content: Платформа плагинов
  - property: og:title
    content: Представление списка задач
  - property: article:tag
    content: Сборник инструкций
alternate:
  - https://yandex.ru/support/tracker/en/plugins/slots/issues-view.md
  - https://yandex.ru/support/tracker/ru/plugins/slots/issues-view.md
  - href: https://yandex.ru/support/tracker/ru/plugins/slots/issues-view.md
    type: text/markdown
    title: Markdown version
  - href: https://yandex.ru/support/tracker/ru/llms.txt?revision=r22077802
    rel: describedby
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.ru/support/tracker/ru/llms.txt?revision=r22077802


# Представление списка задач

Слот `issues.view` добавляет представление в переключатель над результатами на странице **Задачи** и в сохраненных фильтрах. Он доступен на настольной версии страниц `/issues` и `/issues/<filter_id>`. Название представления задается полем `title` в манифесте и отображается рядом с вариантами **Список**, **Календарь** и **Гант**.

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

![Представление «Плагин» в переключателе списка задач](../../_assets/plugins/slots/issues-view.png =680x){.border-yes}

## Настройка слота {#configure-slot}

Создайте проект командой `weavix create` и выберите шаблон `issues.view`. В существующем проекте добавьте слот в `slots.tracker` манифеста:

```json
{
  "slots": {
    "tracker": {
      "issues.view": [
        {
          "entrypoint": "index.html",
          "contextLevel": "full",
          "title": {
            "ru": "Мое представление",
            "en": "My view"
          }
        }
      ]
    }
  }
}
```

Это фрагмент манифеста: сохраните остальные обязательные поля вашего проекта. Для получения текущего фильтра укажите `contextLevel: "full"`. У глобального списка задач нет идентификатора отдельной сущности, поэтому уровень `basic` не содержит условия поиска.

## Контекст слота {#slot-context}

Полный контекст слота имеет тип `IssueViewSlotContext`: `entityType` со значением `issues` и объект `filter` с фактически примененными условиями. Контекст включает несохраненные изменения фильтра. `savedFilterId` может отсутствовать, поэтому идентификатор сохраненного фильтра нельзя использовать как единственный источник условий поиска.

Типы `IssueViewSlotContext`, `IssueViewFilter` и `IssueFilterConditions` экспортируются из SDK. Общая оболочка `ListViewSlotContext<TEntity, TFilter>` содержит тип списка и типизированный фильтр:

```typescript
type IssueViewSlotContext = ListViewSlotContext<'issues', IssueViewFilter>;

type IssueViewFilter = {
    savedFilterId?: string;
    searchText?: string;
    sort?: { orderBy: string; orderAsc?: boolean };
    groupBy?: string;
    tree?: boolean;
} & (
    | { mode: 'params'; conditions: IssueFilterConditions }
    | { mode: 'query'; query: string; conditions?: IssueFilterConditions }
    | { mode: 'query2'; query: string; conditions?: IssueFilterConditions }
);
```

`IssueFilterConditions` — объект с именами полей фильтра и их значениями: строками, числами, массивами или диапазонами.

Поле `filter.mode` определяет формат условий:

#|
|| **Значение** | **Поля** | **Смысл** ||
|| `params` | `conditions` — обязательный объект, в том числе пустой `{}` | Условия, заданные через элементы фильтра. ||
|| `query` | `query` — строка QL1; `conditions` — необязательный объект | Примененный QL1-запрос. Если в контексте есть `conditions`, их нужно учесть вместе с запросом. ||
|| `query2` | `query` — строка QL2; тип также допускает необязательное `conditions` | Примененный QL2-запрос. Изменения в редакторе, которые пользователь еще не применил, в контекст не входят. Сейчас Трекер передает строку запроса без дополнительных условий. ||
|#

В объекте `filter` также могут присутствовать:

#|
|| **Поле** | **Смысл** ||
|| `savedFilterId` | Идентификатор сохраненного фильтра, если открыта его страница. ||
|| `searchText` | Текст отдельного поля поиска. Он передается без преобразования, только когда применяется в текущем режиме. Учитывайте его один раз вместе с условиями режима. ||
|| `sort.orderBy` | Поле активной сортировки. `sort.orderAsc` передается, только если направление известно. ||
|| `groupBy` | Поле группировки, если оно доступно для примененного режима. ||
|| `tree` | Признак древовидного представления, если он доступен для примененного режима. ||
|#

Для QL2 Трекер передает примененную строку запроса. Настройки сортировки, группировки и дерева из другого режима фильтра не добавляются к QL2-контексту. Контекст не содержит массив найденных задач: плагин получает критерии для собственного представления результатов.

{% note warning "QL2 и публичный API" %}

Сериализованное выражение QL2 из `filter.query` нельзя без проверки подставлять в параметр `query` публичного API. Перед запросом задач проверьте, поддерживает ли доступный плагину метод выбранный режим поиска.

{% endnote %}

## Обновления контекста {#context-updates}

При изменении примененного фильтра Трекер отправляет событие `context.changed`. Хук [`useTrackerPluginContext<'issues.view'>('full')`](https://yandex.ru/support/tracker/ru/plugins/tools/sdk/react.md#use-tracker-plugin-context) получает новый контекст и обновляет компонент. Строя представление, используйте актуальное значение `filter`, а не только значение при первом открытии.

Выбранное представление сохраняется в параметре URL `_view=plugin:<plugin_slug>`. Ссылку на представление можно открыть на странице задач или сохраненного фильтра, если плагин доступен пользователю.

## Другие списки {#other-lists}

`issues.view` относится только к глобальному списку задач. Оболочка `ListViewSlotContext` допускает отдельные типы фильтров для других списков. Представления проектов и портфелей потребуют собственных слотов и типов условий; формат `IssueViewFilter` на них не распространяется.

<!-- source: ru/_assets/style/image.md -->

<!-- endsource: ru/_assets/style/image.md -->
