В системе присутствует возможность добавления новых настроек визуализации компонентов виджетов.
Исходные коды базовых компонентов виджетов находятся в открытом доступе по адресу:
https://polygit.polymatica.ru/components-library/polymatica-dashboards-tn  | 
Для кастомизации настроек визуализации в исходном коде компонента предназначен файл view-settings.ts.
Для работы с кастомизацией настроек визуализации в системе должны быть установлены:
Чтобы добавить новые настройки визуализации для компонента, необходимо выполнить следующие действия:
-
  | 
-
-
  | 
-
Перейти в терминале IDE в папку с проектом и установить пакеты зависимостей компонента, выполнив в команду:
npm install  | 
  | 
npm start  | 
Это откроет по адресу http://localhost:3000/devtools/ инструмент разработчика, который позволяет в реальном времени видеть изменения настроек.
-
  | 
При кастомизации виджета можно добавить параметры следующих типов:
Заголовок блока настроек, используется для разделения параметров на блоки.
Код:
export const createViewSettings: CreateViewSettings<DataSettings> = ({
    dataSettings,
    viewSettings,
}: {
    dataSettings: DataSettings;
    viewSettings: ViewSettings;
}) => {
    return [
        title('Title 1'),           
		// ...параметры          
		title('Title 2'),
        // ...параметры
        title('Title 3'),
        // ...параметры
    ];
}; | 
Результат:
  | 
Чек-бокс с подписью.
export const createViewSettings: CreateViewSettings<DataSettings> = ({
    dataSettings,
    viewSettings,
}: {
    dataSettings: DataSettings;
    viewSettings: ViewSettings;
}) => {
    return [
		    // ...параметры
        checkbox({
            key: EViewOption.Toolbox,
            label: {
                ru: 'Отображать блок увеличения',
                en: 'Display magnification block',
            },
            defaultValue: true,
        }),
        // ...параметры
    ];
}; | 
Результат:
  | 
Радиокнопки для выбора единственного значения настройки.
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,
                };
            }),
        }),
        // ...параметры
    ];
}; | 
Результат:
  | 
Выпадающий список для выбора значений.
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,
                };
            }),
        }),
        // ...параметры
    ];
}; | 
Результат:
  | 
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 команду:
npm build  | 
Полученный .zip уже можно загружать в систему, как пользовательский компонент - см. Руководство пользователя Dashboards TN, раздел "Добавление пользовательского компонента".