0.13.1 • Published 1 year ago

ptnl-constructor-sdk v0.13.1

Weekly downloads
464
License
-
Repository
-
Last release
1 year ago

Constructor SDK

Конфигурация виджета

Конфигурацию описывает интерфейс Config. Рассмотрим пример:

import {
    block,
    colorize,
    Config,
    DataQueryFunction,
    DataQueryMethod,
    filter,
    sort,
} from 'ptnl-constructor-sdk/config';

export const config: Config = {
    // Имя виджета. Отображается в списке загруженых выджетов
    label: {
        ru: 'Имя на русском',
        en: 'И на английском',
    },
    // Иконка виджета. Отображается в списке загруженых выджетов
    icon: 'icon.svg',

    // метаданные для формирования документации виджета
    documentation: {
        // путь до файла в формате markdown с документацией
        readme: 'widget/README.md',
        // путь до папки и контентом для документации
        assetsDirectory: 'widget/documentation-assets',
        // пути к файлам превью виджета
        images: [
            'widget/documentation-assets/preview-1',
            'widget/documentation-assets/preview-2',
        ],
    },

    // см. Настройка получения виджетом данных
    dataSettings: {
        // см. Метод группировки данных
        method: DataQueryMethod.Aggregate,

        //
        blocks: [
            block({
                // По данному ключу можно получить колонки в виджете
                // this.dataSettings.columnsByBlock['uniq-key']
                key: 'uniq-key',
                label: { ru: 'Columns', en: '' },
                // Влияет на агрегацию данных
                // см. Метод группировки данных
                dataQueryFunction: DataQueryFunction.Sum,
            }),

            // Добавляет блок для колонок, по которым будет осуществляться фильтрация
            // Доступны в виджете через this.dataSettings.filters
            filter(),

            // Добавляет блок для колонок, по которым будет осуществляться сортировка
            // Доступны в виджете через this.dataSettings.sort
            sort(),

            // Добавляет блок для колонок, по которым будет осуществляться раскраска
            // Настройки раскраски доступна через
            // this.dataSettings.colorize
            colorize(),
        ],
    },
};

Настройка получения виджетом данных dataSettings

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

    // ...
    dataSettings: [
        {
            key: 'dataset-1',
            label: { ru: 'Первый источник', en: '' },

            method: DataQueryMethod.Table,
            blocks: [
                // ...
            ],
        },
        {
            key: 'dataset-2',
            label: { ru: 'Второй источник', en: '' },

            method: DataQueryMethod.Aggregate,
            blocks: [
                // ...
            ],
        },
    ],
    // ...

По значению ключей в виджете будут доступны данные и настройки (см. SingleData и MultiData)

Метод группировки данных DataQueryMethod

Этот параметр может менять данные из датасета. Для примера рассмотрим исходную таблицу

╔═══╤═══╤═══╗
║ A │ C │ 1 ║
╟───┼───┼───╢
║ A │ C │ 2 ║
╟───┼───┼───╢
║ B │ C │ 7 ║
╚═══╧═══╧═══╝

Для DataQueryMethod.Table данные вернуться в исходном виде, тогда как для параметра DataQueryMethod.Aggregate будет произведена агрегация в зависимоти от параметра dataQueryFunction у блока. Например, при DataQueryFunction.Sum происходит суммирование числовых столбцов и группировка по значением в столбцах других типов. При этом данные в виджет попадут в таком виде:

╔═══╤═══╤═══╗
║ A │ C │ 3 ║
╟───┼───┼───╢
║ B │ C │ 7 ║
╚═══╧═══╧═══╝

Код виджета

Рассмотрим виджет

import { Declare, SingleData, Widget } from 'ptnl-constructor-sdk';

@Declare()
export class Example extends Widget implements SingleData {
    readonly data!: SingleData['data'];
    readonly dataSettings!: SingleData['dataSettings'];

    onChange(): void {
        // ...

        // ВАЖНО! Метод ready необходимо вызывать после каждого вызова onChange
        this.ready();
    }
}

Чтобы класс стал виджетом, его необходимо декорировать @Declare(). Также, благодаря наследованию от базового класса Widget, будут доступны для автокомплика методы (например, onThemeChange) и свойства (например, lang).

SingleData и MultiData

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

import { Declare, MultiData, Widget } from 'ptnl-constructor-sdk';

@Declare()
export class WidgetFilters extends Widget implements MultiData {
    readonly data!: MultiData['data'];
    readonly dataSettings!: MultiData['dataSettings'];

    onChange(): void {
        this.dataSettings['dataset-key'].dataset.name;
    }

Life cycle

Порядок срабатывания хуков виджета:

  • onThemeChange при инициализации и при смене темы
  • onLangChange при инициализации и при смене языка
  • onInit при инициализации
  • onChange при инициализации и при смене данных

CSS переменные

По умолчанию, css переменные не объявляются. Для их инициализации необходимо указать параметр provideCssVariables у декоратора Declare:

@Declare({
    provideCssVariables: true,
})

При этом будут объявлены все переменные, доступные для виджета через this.theme, но в kebab-case:

/* this.theme.text → --text */
color: var(--text);
/* this.theme.backgroundBright → --background-bright */
background: var(--background-bright);

Настройки виджета (установка параметров при создании)

При создании виджета, пользователь может установить параметры следующих типов:

  • input
  • checkbox
  • radio
  • select
  • colorPicker
  • title (заголовок блока настроек, используется для разделения параметров на блоки)

Эти параметры получаются динамически из вызова функции createViewSettings в файле src/view-settings.ts. Рассмотрим пример. Здесь выводится текстовое поле, в которое можно ввести число от 1 до количества колонок в блоке с ключом blocke-key:

import { DataSettings } from 'ptnl-constructor-sdk';
import {
    CreateViewSettings,
    input,
    ViewSettingsValidation,
} from 'ptnl-constructor-sdk/config';

let max = 0;

export const createViewSettings: CreateViewSettings<DataSettings> = ({
    dataSettings,
}) => {
    max = dataSettings.columnsByBlock['blocke-key'].length;

    return [
        input({
            key: 'number-key',
            label: {
                ru: `Число от 1 до ${max}`,
                en: `Range 1 to ${max}`,
            },
        }),
    ];
};

export const validation: ViewSettingsValidation = {
    ['number-key']: (value: any) => {
        const number = parseInt(value);

        if (isNaN(number))
            return {
                ru: 'Значение должно быть числом',
                en: 'Not a number',
            };

        if (number < 1 || number > max)
            return {
                ru: `Значение должно быть в диапозоне от 1 до ${max}`,
                en: `Not in range 1 до ${max}`,
            };

        return null;
    },
};
0.13.1

1 year ago

0.11.7

1 year ago

0.11.2

2 years ago

0.11.6

2 years ago

0.9.7

2 years ago

0.9.4

2 years ago

0.9.3

2 years ago

0.11.1

2 years ago

0.9.1

2 years ago

0.7.148

2 years ago

0.7.145

3 years ago

0.7.146

3 years ago

0.7.144

3 years ago

1.0.2

3 years ago

0.7.142

3 years ago

1.0.1

3 years ago

0.7.141

3 years ago

0.7.140

3 years ago

0.7.138

3 years ago

0.7.137

3 years ago

0.7.139

3 years ago

0.7.132

3 years ago

0.7.134

3 years ago

0.7.136

3 years ago

0.7.131

3 years ago

0.7.130

3 years ago

0.7.129

3 years ago

0.7.128

3 years ago

0.7.127

3 years ago

0.7.121

3 years ago

0.7.120

3 years ago

0.7.123

3 years ago

0.7.122

3 years ago

0.7.125

3 years ago

0.7.124

3 years ago

0.7.116

3 years ago

0.7.118

3 years ago

0.7.117

3 years ago

0.7.119

3 years ago

0.7.126

3 years ago

0.7.114

3 years ago

0.7.113

3 years ago

0.7.103

3 years ago

0.7.102

3 years ago

0.7.110

3 years ago

0.7.112

3 years ago

0.7.111

3 years ago

0.7.105

3 years ago

0.7.104

3 years ago

0.7.107

3 years ago

0.7.106

3 years ago

0.7.109

3 years ago

0.7.108

3 years ago

0.7.99

3 years ago

0.7.98

3 years ago

0.7.101

3 years ago

0.7.100

3 years ago

0.7.97

3 years ago

0.7.95

3 years ago

0.7.94

3 years ago

0.7.96

3 years ago

0.7.91

3 years ago

0.7.90

3 years ago

0.7.93

3 years ago

0.7.92

3 years ago

0.7.87

3 years ago

0.7.89

3 years ago

0.7.86

3 years ago

0.7.77

3 years ago

0.7.79

3 years ago

0.7.78

3 years ago

0.7.84

3 years ago

0.7.83

3 years ago

0.7.80

3 years ago

0.7.82

3 years ago

0.7.81

3 years ago

0.7.76

3 years ago

0.7.75

3 years ago

0.7.74

3 years ago

0.7.73

3 years ago

0.7.72

3 years ago

0.7.71

3 years ago

0.7.69

3 years ago

0.7.67

3 years ago

0.7.66

3 years ago

0.7.65

3 years ago

0.7.62

3 years ago

0.7.61

3 years ago

0.7.64

3 years ago

0.7.60

3 years ago

0.7.59

3 years ago

0.7.58

3 years ago

0.7.57

3 years ago

0.7.56

3 years ago

0.7.52

3 years ago

0.7.51

3 years ago

0.7.50

3 years ago

0.7.49

3 years ago

0.7.48

3 years ago

0.7.44

3 years ago

0.7.45

3 years ago

0.7.43

3 years ago

0.7.42

3 years ago

0.7.39

3 years ago

0.7.40

3 years ago

0.7.41

3 years ago

0.7.38

3 years ago

0.7.37

3 years ago

0.7.36

3 years ago

0.7.35

3 years ago

0.7.34

3 years ago

0.7.33

3 years ago

0.7.32

3 years ago

0.7.31

3 years ago

0.7.30

3 years ago

0.7.29

3 years ago

0.7.28

3 years ago

0.7.27

3 years ago

0.7.26

3 years ago

0.7.25

4 years ago

0.7.24

4 years ago

0.7.22

4 years ago

0.7.23

4 years ago

0.7.21

4 years ago

0.7.20

4 years ago

0.7.19

4 years ago

0.7.18

4 years ago

0.7.16

4 years ago

0.7.15

4 years ago

0.7.12

4 years ago

0.7.11

4 years ago

0.7.10

4 years ago

0.7.9

4 years ago

0.7.8

4 years ago

0.7.6

4 years ago

0.7.7

4 years ago

0.7.5

4 years ago

0.7.4

4 years ago

0.7.3

4 years ago