P8-Panels/app/config_wrapper.js
2024-11-20 16:05:26 +03:00

160 lines
7.1 KiB
JavaScript

/*
Парус 8 - Панели мониторинга
Обёртки для компонент, обеспечивающие подключение их к настройкам приложения
*/
//---------------------
//Подключение библиотек
//---------------------
import React from "react"; //Классы React
import { deepCopyObject } from "./core/utils"; //Вспомогательные процедуры и функции
import { TITLES, BUTTONS, TEXTS, CAPTIONS } from "../app.text"; //Текстовые ресурсы и константы
import { P8PPanelsMenuGrid, P8P_PANELS_MENU_PANEL_SHAPE } from "./components/p8p_panels_menu"; //Меню панелей
import { P8PAppWorkspace } from "./components/p8p_app_workspace"; //Рабочее пространство
import { P8PTable, P8P_TABLE_DATA_TYPE, P8P_TABLE_SIZE, P8P_TABLE_FILTER_SHAPE } from "./components/p8p_table"; //Таблица данных
import { P8PDataGrid, P8P_DATA_GRID_DATA_TYPE, P8P_DATA_GRID_SIZE, P8P_DATA_GRID_FILTER_SHAPE } from "./components/p8p_data_grid"; //Таблица данных
import { P8PGantt, P8P_GANTT_TASK_SHAPE, P8P_GANTT_TASK_ATTRIBUTE_SHAPE, P8P_GANTT_TASK_COLOR_SHAPE } from "./components/p8p_gantt"; //Диаграмма Ганта
import { P8PCyclogram } from "./components/p8p_cyclogram"; //Циклограмма
//---------
//Константы
//---------
//Конфигурируемые свойства "Меню панелей (табличное)" (P8PPanelsMenuGrid)
const P8P_PANELS_MENU_GRID_CONFIG_PROPS = {
navigateCaption: BUTTONS.NAVIGATE,
defaultGroupTytle: TITLES.DEFAULT_PANELS_GROUP
};
//Конфигурируемые свойства "Рабочего пространства" (P8PAppWorkspace)
const P8P_APP_WORKSPACE_CONFIG_PROPS = {
closeCaption: BUTTONS.CLOSE,
homeCaption: BUTTONS.NAVIGATE_HOME
};
//Конфигурируемые свойства "Таблицы" (P8PTable)
const P8P_TABLE_CONFIG_PROPS = {
orderAscMenuItemCaption: BUTTONS.ORDER_ASC,
orderDescMenuItemCaption: BUTTONS.ORDER_DESC,
filterMenuItemCaption: BUTTONS.FILTER,
valueFilterCaption: CAPTIONS.VALUE,
valueFromFilterCaption: CAPTIONS.VALUE_FROM,
valueToFilterCaption: CAPTIONS.VALUE_TO,
okFilterBtnCaption: BUTTONS.OK,
clearFilterBtnCaption: BUTTONS.CLEAR,
cancelFilterBtnCaption: BUTTONS.CANCEL,
morePagesBtnCaption: BUTTONS.MORE,
noDataFoundText: TEXTS.NO_DATA_FOUND
};
//Конфигурируемые свойства "Таблицы данных" (P8PDataGrid)
const P8P_DATA_GRID_CONFIG_PROPS = {
orderAscMenuItemCaption: BUTTONS.ORDER_ASC,
orderDescMenuItemCaption: BUTTONS.ORDER_DESC,
filterMenuItemCaption: BUTTONS.FILTER,
valueFilterCaption: CAPTIONS.VALUE,
valueFromFilterCaption: CAPTIONS.VALUE_FROM,
valueToFilterCaption: CAPTIONS.VALUE_TO,
okFilterBtnCaption: BUTTONS.OK,
clearFilterBtnCaption: BUTTONS.CLEAR,
cancelFilterBtnCaption: BUTTONS.CANCEL,
morePagesBtnCaption: BUTTONS.MORE,
noDataFoundText: TEXTS.NO_DATA_FOUND,
objectsCopier: deepCopyObject
};
//Конфигурируемые свойства "Диаграммы Ганта" (P8PGantt)
const P8P_GANTT_CONFIG_PROPS = {
noDataFoundText: TEXTS.NO_DATA_FOUND,
numbTaskEditorCaption: CAPTIONS.NUMB,
nameTaskEditorCaption: CAPTIONS.NAME,
startTaskEditorCaption: CAPTIONS.START,
endTaskEditorCaption: CAPTIONS.END,
progressTaskEditorCaption: CAPTIONS.PROGRESS,
legendTaskEditorCaption: CAPTIONS.LEGEND,
okTaskEditorBtnCaption: BUTTONS.OK,
cancelTaskEditorBtnCaption: BUTTONS.CANCEL
};
//Конфигурируемые свойства "Циклограммы" (P8PCyclogram)
const P8P_CYCLOGRAM_CONFIG_PROPS = {
noDataFoundText: TEXTS.NO_DATA_FOUND,
nameTaskEditorCaption: CAPTIONS.NAME,
okTaskEditorBtnCaption: BUTTONS.OK,
cancelTaskEditorBtnCaption: BUTTONS.CANCEL
};
//-----------------------
//Вспомогательные функции
//-----------------------
//Рекурсивное добавление свойств элемента, получаемых из конфигурационных файлов
const addConfigChildProps = children =>
React.Children.map(children, child => {
if (!React.isValidElement(child)) return child;
const { children, ...restProps } = child.props;
let configProps = {};
if (child.type.name === "P8PPanelsMenuGrid") configProps = P8P_PANELS_MENU_GRID_CONFIG_PROPS;
if (child.type.name === "P8PTable") configProps = P8P_TABLE_CONFIG_PROPS;
if (child.type.name === "P8PDataGrid") configProps = P8P_DATA_GRID_CONFIG_PROPS;
if (child.type.name === "P8PGantt") configProps = P8P_GANTT_CONFIG_PROPS;
if (child.type.name === "P8PCyclogram") configProps = P8P_CYCLOGRAM_CONFIG_PROPS;
return React.createElement(child.type, { ...configProps, ...restProps }, addConfigChildProps(children));
});
//-----------
//Тело модуля
//-----------
//Обёртка для компонента "Меню панелей (табличное)" (P8PPanelsMenuGrid)
const P8PPanelsMenuGridConfigWrapped = (props = {}) => <P8PPanelsMenuGrid {...P8P_PANELS_MENU_GRID_CONFIG_PROPS} {...props} />;
//Обёртка для компонента "Рабочее пространство" (P8PAppWorkspace)
const P8PAppWorkspaceConfigWrapped = (props = {}) => <P8PAppWorkspace {...P8P_APP_WORKSPACE_CONFIG_PROPS} {...props} />;
//Обёртка для компонента "Таблица" (P8PTable)
const P8PTableConfigWrapped = (props = {}) => <P8PTable {...P8P_TABLE_CONFIG_PROPS} {...props} />;
//Обёртка для компонента "Таблица данных" (P8PDataGrid)
const P8PDataGridConfigWrapped = (props = {}) => <P8PDataGrid {...P8P_DATA_GRID_CONFIG_PROPS} {...props} />;
//Обёртка для компонента "Диаграмма Ганта" (P8PGantt)
const P8PGanttConfigWrapped = (props = {}) => <P8PGantt {...P8P_GANTT_CONFIG_PROPS} {...props} />;
//Обёртка для компонента "Циклограмма" (P8PCyclogram)
const P8PCyclogramConfigWrapped = (props = {}) => <P8PCyclogram {...P8P_GANTT_CONFIG_PROPS} {...props} />;
//Универсальный элемент-обёртка в параметры конфигурации
const ConfigWrapper = ({ children }) => addConfigChildProps(children);
//----------------
//Интерфейс модуля
//----------------
export {
P8P_PANELS_MENU_GRID_CONFIG_PROPS,
P8P_PANELS_MENU_PANEL_SHAPE,
P8P_APP_WORKSPACE_CONFIG_PROPS,
P8P_TABLE_CONFIG_PROPS,
P8P_TABLE_DATA_TYPE,
P8P_TABLE_SIZE,
P8P_TABLE_FILTER_SHAPE,
P8P_DATA_GRID_CONFIG_PROPS,
P8P_DATA_GRID_DATA_TYPE,
P8P_DATA_GRID_SIZE,
P8P_DATA_GRID_FILTER_SHAPE,
P8P_GANTT_CONFIG_PROPS,
P8P_CYCLOGRAM_CONFIG_PROPS,
P8P_GANTT_TASK_SHAPE,
P8P_GANTT_TASK_ATTRIBUTE_SHAPE,
P8P_GANTT_TASK_COLOR_SHAPE,
P8PPanelsMenuGridConfigWrapped,
P8PAppWorkspaceConfigWrapped,
P8PTableConfigWrapped,
P8PDataGridConfigWrapped,
P8PGanttConfigWrapped,
P8PCyclogramConfigWrapped,
ConfigWrapper
};