В системе присутствует возможность добавления новых настроек визуализации компонентов виджетов.
Исходные коды базовых компонентов виджетов находятся в открытом доступе по адресу:
https://polygit.polymatica.ru/components-library/polymatica-dashboards-tn
Для кастомизации настроек визуализации в исходном коде компонента предназначен файл view-settings.ts.
Предусловия
Для работы с кастомизацией настроек визуализации в системе должны быть установлены:
- Node.js
- пакетный менеджер npm
Начало работы
Чтобы добавить новые настройки визуализации для компонента, необходимо выполнить следующие действия:
- Загрузить исходный код компонента из GitLab при помощи кнопки "Code".
-
-
- Импортировать код в качестве проекта в любую IDE cо встроенным терминалом (в нашем примере VS Code).
-
-
Перейти в терминале IDE в папку с проектом и установить пакеты зависимостей компонента, выполнив в команду:
- Выполнить в терминале IDE команду:
Это откроет по адресу http://localhost:3000/devtools/ инструмент разработчика, который позволяет в реальном времени видеть изменения настроек.
-
Кастомизируемые настройки
При кастомизации виджета можно добавить параметры следующих типов:
- title
- checkbox
- radio
- select
- colorPicker
- input
title
Заголовок блока настроек, используется для разделения параметров на блоки.
Код:
export const createViewSettings: CreateViewSettings<DataSettings> = ({
dataSettings,
viewSettings,
}: {
dataSettings: DataSettings;
viewSettings: ViewSettings;
}) => {
return [
title('Title 1'),
// ...параметры
title('Title 2'),
// ...параметры
title('Title 3'),
// ...параметры
];
};
Результат:
сheckbox
Чек-бокс с подписью.
export const createViewSettings: CreateViewSettings<DataSettings> = ({
dataSettings,
viewSettings,
}: {
dataSettings: DataSettings;
viewSettings: ViewSettings;
}) => {
return [
// ...параметры
checkbox({
key: EViewOption.Toolbox,
label: {
ru: 'Отображать блок увеличения',
en: 'Display magnification block',
},
defaultValue: true,
}),
// ...параметры
];
};
Результат:
radio
Радиокнопки для выбора единственного значения настройки.
const dataLabelsPosition = [
['top', 'Сверху', 'Top'],
['bottom', 'Снизу', 'Bottom'],
['inside', 'По центру', 'Center'],
['left', 'Слева', 'Left'],
['right', 'Справа', 'Right'],
];
export const createViewSettings: CreateViewSettings<DataSettings> = ({
dataSettings,
viewSettings,
}: {
dataSettings: DataSettings;
viewSettings: ViewSettings;
}) => {
return [
// ...параметры
radio({
key: EViewOption.ChartType,
label: {
ru: 'Положение значений',
en: 'Position of the data labels'
},
options: dataLabelsPosition.map((item) => {
const [value, ru, en] = item;
return {
label: {
ru,
en,
},
value,
};
}),
}),
// ...параметры
];
};
Результат:
select
Выпадающий список для выбора значений.
const dataLabelsPosition = [
['top', 'Сверху', 'Top'],
['bottom', 'Снизу', 'Bottom'],
['inside', 'По центру', 'Center'],
['left', 'Слева', 'Left'],
['right', 'Справа', 'Right'],
];
export const createViewSettings: CreateViewSettings<DataSettings> = ({
dataSettings,
viewSettings,
}: {
dataSettings: DataSettings;
viewSettings: ViewSettings;
}) => {
return [
// ...параметры
select({
key: EViewOption.DataLabelsPosition,
label: {
ru: 'Положение значений',
en: 'Position of the data labels',
},
defaultValue: dataLabelsPosition[0][0],
options: dataLabelsPosition.map((item) => {
const [value, ru, en] = item;
return {
label: {
ru,
en,
},
value,
};
}),
}),
// ...параметры
];
};
Результат:
colorPicker
RGB-палитра для выбора цвета.
export const createViewSettings: CreateViewSettings<DataSettings> = ({
dataSettings,
viewSettings,
}: {
dataSettings: DataSettings;
viewSettings: ViewSettings;
}) => {
return [
// ...параметры
colorPicker({
key: EViewOption.ColorConstantHigher,
label: {
ru: 'Цвет',
en: 'Color',
},
defaultValue: 'green',
}),
// ...параметры
];
};
Результат:
Простое поле ручного ввода значения.
export const createViewSettings: CreateViewSettings<DataSettings> = ({
dataSettings,
viewSettings,
}: {
dataSettings: DataSettings;
viewSettings: ViewSettings;
}) => {
return [
// ...параметры
input({
key: EViewOption.XAxisTicksLength,
label: {
ru: 'Длина подписей',
en: 'Axis labels length',
},
defaultValue: `${axisTicksLengthDefault}`,
}),
// ...параметры
];
};
Результат:
Валидация
Также имеется возможность настроить валидацию поля. Для этого в значении validation необходимо указать валидируемые поля:
export const createViewSettings: CreateViewSettings<DataSettings> = ({
dataSettings,
viewSettings,
}: {
dataSettings: DataSettings;
viewSettings: ViewSettings;
}) => {
return [
// ...параметры
input({
key: EViewOption.XAxisTicksLength,
label: {
ru: 'Длина подписей',
en: 'Axis labels length',
},
defaultValue: `${axisTicksLengthDefault}`,
}),
// ...параметры
];
};
export const validation: ViewSettingsValidation = {
[EViewOption.XAxisTicksLength]: (value) => {
if (value === '' || value === null) return null;
const parsedValue = parseInt(value);
if (
!/^\d+$/.test(value) ||
parsedValue < axisTicksLengthyMin ||
parsedValue > axisTicksLengthyMax
) {
return {
ru: `укажите целое число от ${axisTicksLengthyMin} до ${axisTicksLengthyMax}`,
en: `enter an integer from ${axisTicksLengthyMin} to ${axisTicksLengthyMax}`,
};
}
return null;
},
};
Результат:
Сборка кастомизированного виджета
В структуре исходного кода находится файл конфигурации сборки package.json.
Для сборки виджета необходимо:
Запустить в терминале IDE в папке с файлом package.json команду:
- После выполнения команды сформируется папка с файлами, которые надо поместить в архив .zip (только файлы, без папки).
Полученный .zip уже можно загружать в систему, как пользовательский компонент - см. руководство пользователя.