/* Парус 8 - Панели мониторинга - УДП - Доски задач Компонент панели: Карточка задачи */ //--------------------- //Подключение библиотек //--------------------- import React from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Draggable } from "react-beautiful-dnd"; import { Card, CardHeader, Typography, IconButton, Icon, Box, Menu, MenuItem, CardContent, Avatar, Stack } from "@mui/material"; //Интерфейсные компоненты import { useTaskCard } from "../hooks"; //Вспомогательные хуки import { TaskFormDialog } from "./task_form"; //Форма события //--------- //Константы //--------- //Стили const STYLES = { CONTAINER: { margin: "5px 0px", textAlign: "center" }, MENU_ITEM_DELIMITER: { borderBottom: "1px solid lightgrey" }, CARD_HEADER_TITLE: { padding: "4px", width: "252px", display: "-webkit-box", hyphens: "auto", WebkitBoxOrient: "vertical", WebkitLineClamp: 2, overflow: "hidden" }, CARD_HEADER_DESC: { padding: 0, cursor: "pointer" }, CARD_CONTENT: { padding: "4px !important" }, CARD_CONTENT_BOX: { display: "flex", alignItems: "center" }, ACCOUNT_STACK: { alignItems: "center", marginLeft: "auto" }, SECONDARY_TEXT: { color: "text.secondary", fontSize: 14 }, ICON_COLOR: { color: theme => theme.palette.grey[500] } }; //------------------------------------ //Вспомогательные функции и компоненты //------------------------------------ //Действия карточки события const DataCellCardActions = ({ taskRn, menuItems, cardActions, handleMethodsMenuButtonClick, handleMethodsMenuClose, handleReload, eventPoints, pointSettings, openNoteDialog }) => { return ( more_vert {menuItems.map(action => { if (action.visible) return ( { if (openNoteDialog && action.method === "TASK_STATE_CHANGE") { action.func(taskRn, action.needReload ? handleReload : null, eventPoints, openNoteDialog); } else if (openNoteDialog && action.method === "TASK_SEND" && pointSettings.addNoteOnSend) { openNoteDialog(n => action.func(taskRn, action.needReload ? handleReload : null, n)); } else { //Выполняем действие action.func(taskRn, action.needReload ? handleReload : null); } //Закрываем меню handleMethodsMenuClose(); }} > {action.icon} {action.name} ); })} ); }; //Контроль свойств - Действия карточки события DataCellCardActions.propTypes = { taskRn: PropTypes.number.isRequired, menuItems: PropTypes.array.isRequired, cardActions: PropTypes.object.isRequired, handleMethodsMenuButtonClick: PropTypes.func.isRequired, handleMethodsMenuClose: PropTypes.func.isRequired, handleReload: PropTypes.func, eventPoints: PropTypes.array, pointSettings: PropTypes.object, openNoteDialog: PropTypes.func }; //----------- //Тело модуля //----------- //Карточка события const TaskCard = ({ task, account, index, handleReload, eventPoints, pointSettings, openNoteDialog }) => { //Собственное состояние const [taskCard, setTaskCard, cardActions, handleMethodsMenuButtonClick, handleMethodsMenuClose, menuItems] = useTaskCard(); //Генерация содержимого return ( {provided => ( { menuItems.find(a => (a.method === "EDIT" ? a.func(task.nrn, a.needReload ? handleReload : null) : null)); }} > {task.sdescription} } sx={STYLES.CARD_HEADER_DESC} action={ } /> assignment {task.name} {account ? ( {account.authId ? account.authId : account.agnAbbr} ) : null} )} {taskCard.openEdit ? ( { setTaskCard(pv => ({ ...pv, openEdit: false })); }} /> ) : null} ); }; //Контроль свойств - Карточка события TaskCard.propTypes = { task: PropTypes.object.isRequired, account: PropTypes.object, index: PropTypes.number.isRequired, handleReload: PropTypes.func, eventPoints: PropTypes.array, pointSettings: PropTypes.object, openNoteDialog: PropTypes.func }; //---------------- //Интерфейс модуля //---------------- export { TaskCard };