Настройки виджета
Документация
Главная

Настройки виджета

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

Изображение

Для работы с настройками виджета в IDefinition представлено 2 метода:

  • createPanelDescription для конфигурации панели. Метод возвращает конфигурацию панели настроек виджета интерфейса IPanelDescription
  • fillSettings для инициализации настроек виджета. Метод создаёт поля в объекте настроек и заполняет их значениями по умолчанию) класса, реализующего интерфейс IDefinition

Основные поля в конфигурации панели

Поле dataRecords содержит конфигурацию настроек данных виджета, которая доступна во вкладке настройки работы с данными.

Изображение

Поле displayRecords содержит конфигурацию настроек отображения виджета, которая доступна на вкладке настройки визуального отображения.

Изображение

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

Пример конфигурации панели для добавления заголовка

В качестве примера сконфигурируем настройку добавления заголовка. Для этого объявим класс Definition и реализуем интерфейс IDefinition.

Заметка

Заголовок — стандартная функциональность виджета, которую можно добавить с помощью передачи флага useTitle через конфигурацию панели. В примере ниже показано, как добавить заголовок вручную. Это поможет понять, как добавлять другие поля для управления настройками виджета.

import {
  EControlType,
  type IDefinition,
  type IGroupSettings,
  type IPanelDescription,
  type IGlobalContext,
} from "@infomaximum/widget-sdk";

export interface WidgetSettings extends IBaseWidgetSettings {
  title: string;
}

export class Definition implements IDefinition<WidgetSettings, IGroupSettings> {
  public createPanelDescription(
    context: IGlobalContext,
    settings: WidgetSettings
  ): IPanelDescription<WidgetSettings> {
    return {
      dataRecords: [
        {
          key: "title",
          accessor: "title",
          type: EControlType.input,
          props: { isBordered: false, placeholder: "Введите заголовок" },
        },
        { type: "divider" },
      ],
    };
  }

  public fillSettings(
    settings: Partial<WidgetSettings>,
    context: IGlobalContext
  ) {
    settings.title ??= "";
  }
}

Панель настроек содержит:

  • Поле для ввода заголовка интерфейса IControlRecord. Тип поля input
  • Разделитель интерфейса IDividerRecord. Тип поля divider. Разделитель позволяет визуально отделить поля друг от друга

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

В результате получим поле, в котором можно указать заголовок для виджета. Значение этого поля можно получить из объекта settings по ключу, который является значением поля accessor.

Изображение

Добавление разрезов и мер в панель

Для возможности работы с разрезами и мерами конфигурацию необходимо объявлять в секции groupSetDescriptions. Добавим возможность выбора разрезов и мер:

import {
  EControlType,
  EWidgetIndicatorType,
  type IBaseWidgetSettings,
  type IDefinition,
  type IGroupSettings,
  type IPanelDescription,
  type IWidgetDimension,
  type IWidgetDimensionHierarchy,
  type IWidgetMeasure,
  type IGlobalContext,
} from "@infomaximum/widget-sdk";

export interface WidgetSettings extends IBaseWidgetSettings {
  title: string;
  dimensions: (IWidgetDimension | IWidgetDimensionHierarchy)[];
  measures: IWidgetMeasure[];
}

export class Definition implements IDefinition<WidgetSettings, IGroupSettings> {
  public createPanelDescription(
    context: IGlobalContext,
    settings: WidgetSettings
  ): IPanelDescription<WidgetSettings> {
    return {
      dataRecords: [
        {
          key: "title",
          accessor: "title",
          type: EControlType.input,
          props: { isBordered: false, placeholder: "Введите заголовок" },
        },
        { type: "divider" },
      ],

      groupSetDescriptions: {
        dimensions: {
          accessor: "dimensions",
          title: "Разрезы",
          maxCount: Infinity,
          getType() {
            return EWidgetIndicatorType.DIMENSION;
          },
          addButtons: [
            {
              title: "Добавить разрез"
            },
          ],
        },
        measures: {
          accessor: "measures",
          title: "Меры",
          maxCount: Infinity,
          getType() {
            return EWidgetIndicatorType.MEASURE;
          },
          addButtons: [
            {
              title: "Добавить меру"
            },
          ],
        },
      },
    };
  }

  public fillSettings(
    settings: Partial<WidgetSettings>,
    context: IGlobalContext
  ) {
    settings.title ??= "";
    settings.dimensions ??= [];
    settings.measures ??= [];
  }
}

В результате получаем панель настроек с возможностью добавить заголовок, а также разрезы и меры.

Изображение

Была ли статья полезна?

Да
Нет
Предыдущая
Определение виджета
Следующая
Компоненты настроек

Дайджест новостей и обновлений —

один раз в месяц

Заполняя форму, я даю согласие на обработку моих персональных данных
430006, Саранск,
Северо-восточное шоссе, д. 3
ОКВЭД 62.01
ИНН 1328​909857
Код вида деятельности
в области ИТ 15.02 и 17.01
Языки программирования