0.13.1 • Published 2 years ago

ptnl-constructor-sdk v0.13.1

Weekly downloads
464
License
-
Repository
-
Last release
2 years 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

2 years ago

0.11.7

2 years ago

0.11.2

2 years ago

0.11.6

2 years ago

0.9.7

3 years ago

0.9.4

3 years ago

0.9.3

3 years ago

0.11.1

2 years ago

0.9.1

3 years ago

0.7.148

3 years ago

0.7.145

3 years ago

0.7.146

3 years ago

0.7.144

4 years ago

1.0.2

4 years ago

0.7.142

4 years ago

1.0.1

4 years ago

0.7.141

4 years ago

0.7.140

4 years ago

0.7.138

4 years ago

0.7.137

4 years ago

0.7.139

4 years ago

0.7.132

4 years ago

0.7.134

4 years ago

0.7.136

4 years ago

0.7.131

4 years ago

0.7.130

4 years ago

0.7.129

4 years ago

0.7.128

4 years ago

0.7.127

4 years ago

0.7.121

4 years ago

0.7.120

4 years ago

0.7.123

4 years ago

0.7.122

4 years ago

0.7.125

4 years ago

0.7.124

4 years ago

0.7.116

4 years ago

0.7.118

4 years ago

0.7.117

4 years ago

0.7.119

4 years ago

0.7.126

4 years ago

0.7.114

4 years ago

0.7.113

4 years ago

0.7.103

4 years ago

0.7.102

4 years ago

0.7.110

4 years ago

0.7.112

4 years ago

0.7.111

4 years ago

0.7.105

4 years ago

0.7.104

4 years ago

0.7.107

4 years ago

0.7.106

4 years ago

0.7.109

4 years ago

0.7.108

4 years ago

0.7.99

4 years ago

0.7.98

4 years ago

0.7.101

4 years ago

0.7.100

4 years ago

0.7.97

4 years ago

0.7.95

4 years ago

0.7.94

4 years ago

0.7.96

4 years ago

0.7.91

4 years ago

0.7.90

4 years ago

0.7.93

4 years ago

0.7.92

4 years ago

0.7.87

4 years ago

0.7.89

4 years ago

0.7.86

4 years ago

0.7.77

4 years ago

0.7.79

4 years ago

0.7.78

4 years ago

0.7.84

4 years ago

0.7.83

4 years ago

0.7.80

4 years ago

0.7.82

4 years ago

0.7.81

4 years ago

0.7.76

4 years ago

0.7.75

4 years ago

0.7.74

4 years ago

0.7.73

4 years ago

0.7.72

4 years ago

0.7.71

4 years ago

0.7.69

4 years ago

0.7.67

4 years ago

0.7.66

4 years ago

0.7.65

4 years ago

0.7.62

4 years ago

0.7.61

4 years ago

0.7.64

4 years ago

0.7.60

4 years ago

0.7.59

4 years ago

0.7.58

4 years ago

0.7.57

4 years ago

0.7.56

4 years ago

0.7.52

4 years ago

0.7.51

4 years ago

0.7.50

4 years ago

0.7.49

4 years ago

0.7.48

4 years ago

0.7.44

4 years ago

0.7.45

4 years ago

0.7.43

4 years ago

0.7.42

4 years ago

0.7.39

4 years ago

0.7.40

4 years ago

0.7.41

4 years ago

0.7.38

4 years ago

0.7.37

4 years ago

0.7.36

4 years ago

0.7.35

4 years ago

0.7.34

4 years ago

0.7.33

4 years ago

0.7.32

4 years ago

0.7.31

4 years ago

0.7.30

4 years ago

0.7.29

4 years ago

0.7.28

4 years ago

0.7.27

4 years ago

0.7.26

4 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