forked from CITKParus/P8-Panels
118 lines
5.3 KiB
JavaScript
118 lines
5.3 KiB
JavaScript
/*
|
|
Парус 8 - Панели мониторинга - Циклограмма
|
|
Компонент: Редактор задачи
|
|
*/
|
|
|
|
//---------------------
|
|
//Подключение библиотек
|
|
//---------------------
|
|
|
|
import React, { useState } from "react"; //Классы React
|
|
import PropTypes from "prop-types"; //Контроль свойств компонента
|
|
import { Dialog, DialogActions, DialogContent, Button, List, ListItem, ListItemText, Divider } from "@mui/material"; //Интерфейсные компоненты
|
|
import { hasValue } from "../../core/utils"; //Вспомогательный функции
|
|
import { P8P_DIALOG_CONTENT_VARIANT } from "../../theme/variants/p8p_dialog_content_variants"; //Варианты диалогов (содержимое)
|
|
import { P8P_LIST_VARIANT } from "../../theme/variants/p8p_list_variants"; //Варианты списков
|
|
import { P8P_LIST_ITEM_TEXT_VARIANT } from "../../theme/variants/p8p_list_item_text_variants"; //Варианты значений списков
|
|
import { P8P_BUTTON_VARIANT } from "../../theme/variants/p8p_button_variants"; //Варианты кнопок
|
|
import { P8P_CYCLOGRAM_TASK_SHAPE, P8P_CYCLOGRAM_TASK_ATTRIBUTE_SHAPE } from "./p8p_cyclogram_constants"; //Константы циклограммы
|
|
|
|
//-----------
|
|
//Тело модуля
|
|
//-----------
|
|
|
|
//Редактор задачи
|
|
const P8PCyclogramTaskEditor = ({
|
|
task,
|
|
taskAttributes,
|
|
onOk,
|
|
onCancel,
|
|
taskAttributeRenderer,
|
|
taskDialogRenderer,
|
|
nameCaption,
|
|
okBtnCaption,
|
|
cancelBtnCaption
|
|
}) => {
|
|
//Собственное состояние
|
|
const [state] = useState({
|
|
start: task.start,
|
|
end: task.end
|
|
});
|
|
|
|
//Отображаемые атрибуты
|
|
const dispTaskAttributes =
|
|
Array.isArray(taskAttributes) && taskAttributes.length > 0 ? taskAttributes.filter(attr => attr.visible && hasValue(task[attr.name])) : [];
|
|
|
|
//При сохранении
|
|
const handleOk = () => (onOk && state.start && state.end ? onOk() : null);
|
|
|
|
//При отмене
|
|
const handleCancel = () => (onCancel ? onCancel() : null);
|
|
|
|
//Генерация содержимого
|
|
return (
|
|
<Dialog open onClose={handleCancel}>
|
|
{taskDialogRenderer ? (
|
|
taskDialogRenderer({ task, taskAttributes, close: handleCancel })
|
|
) : (
|
|
<>
|
|
<DialogContent variant={P8P_DIALOG_CONTENT_VARIANT.TASK}>
|
|
<List variant={P8P_LIST_VARIANT.GANTT_TASK}>
|
|
<ListItem alignItems="flex-start">
|
|
<ListItemText variant={P8P_LIST_ITEM_TEXT_VARIANT.PRIMARY} primary={nameCaption} secondary={task.fullName} />
|
|
</ListItem>
|
|
{dispTaskAttributes.length > 0 ? <Divider component="li" /> : null}
|
|
{dispTaskAttributes.length > 0
|
|
? dispTaskAttributes.map((attr, i) => {
|
|
const defaultView = task[attr.name];
|
|
const customView = taskAttributeRenderer ? taskAttributeRenderer({ task, attribute: attr }) : null;
|
|
return (
|
|
<React.Fragment key={i}>
|
|
<ListItem alignItems="flex-start">
|
|
<ListItemText
|
|
variant={P8P_LIST_ITEM_TEXT_VARIANT.PRIMARY}
|
|
primary={attr.caption}
|
|
secondaryTypographyProps={{ component: "span" }}
|
|
secondary={customView ? customView : defaultView}
|
|
/>
|
|
</ListItem>
|
|
{i < dispTaskAttributes.length - 1 ? <Divider component="li" /> : null}
|
|
</React.Fragment>
|
|
);
|
|
})
|
|
: null}
|
|
</List>
|
|
</DialogContent>
|
|
<DialogActions>
|
|
<Button variant={P8P_BUTTON_VARIANT.SECONDARY} onClick={handleCancel}>
|
|
{cancelBtnCaption}
|
|
</Button>
|
|
<Button variant={P8P_BUTTON_VARIANT.PRIMARY} onClick={handleOk}>
|
|
{okBtnCaption}
|
|
</Button>
|
|
</DialogActions>
|
|
</>
|
|
)}
|
|
</Dialog>
|
|
);
|
|
};
|
|
|
|
//Контроль свойств - Редактор задачи
|
|
P8PCyclogramTaskEditor.propTypes = {
|
|
task: P8P_CYCLOGRAM_TASK_SHAPE,
|
|
taskAttributes: PropTypes.arrayOf(P8P_CYCLOGRAM_TASK_ATTRIBUTE_SHAPE),
|
|
onOk: PropTypes.func,
|
|
onCancel: PropTypes.func,
|
|
taskAttributeRenderer: PropTypes.func,
|
|
taskDialogRenderer: PropTypes.func,
|
|
nameCaption: PropTypes.string.isRequired,
|
|
okBtnCaption: PropTypes.string.isRequired,
|
|
cancelBtnCaption: PropTypes.string.isRequired
|
|
};
|
|
|
|
//----------------
|
|
//Интерфейс модуля
|
|
//----------------
|
|
|
|
export { P8PCyclogramTaskEditor };
|