WEB APP: "P8PTable" - поддержка подсказок для колонок таблицы
This commit is contained in:
parent
361f2b8881
commit
4d32c51d4a
@ -30,7 +30,8 @@ import {
|
|||||||
Button,
|
Button,
|
||||||
TextField,
|
TextField,
|
||||||
Chip,
|
Chip,
|
||||||
Container
|
Container,
|
||||||
|
Link
|
||||||
} from "@mui/material"; //Интерфейсные компоненты
|
} from "@mui/material"; //Интерфейсные компоненты
|
||||||
import { P8PAppInlineError } from "./p8p_app_message"; //Встраиваемое сообщение об ошибке
|
import { P8PAppInlineError } from "./p8p_app_message"; //Встраиваемое сообщение об ошибке
|
||||||
|
|
||||||
@ -231,6 +232,28 @@ P8PTableColumnMenu.propTypes = {
|
|||||||
onItemClick: PropTypes.func
|
onItemClick: PropTypes.func
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//Диалог подсказки
|
||||||
|
const P8PTableColumnHintDialog = ({ columnDef, okBtnCaption, onOk }) => {
|
||||||
|
return (
|
||||||
|
<Dialog open={true} aria-labelledby="filter-dialog-title" aria-describedby="filter-dialog-description" onClose={() => (onOk ? onOk() : null)}>
|
||||||
|
<DialogTitle id="filter-dialog-title">{columnDef.caption}</DialogTitle>
|
||||||
|
<DialogContent>
|
||||||
|
<div dangerouslySetInnerHTML={{ __html: columnDef.hint }}></div>
|
||||||
|
</DialogContent>
|
||||||
|
<DialogActions>
|
||||||
|
<Button onClick={() => (onOk ? onOk() : null)}>{okBtnCaption}</Button>
|
||||||
|
</DialogActions>
|
||||||
|
</Dialog>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
//Контроль свойств - Диалог подсказки
|
||||||
|
P8PTableColumnHintDialog.propTypes = {
|
||||||
|
columnDef: PropTypes.object.isRequired,
|
||||||
|
okBtnCaption: PropTypes.string.isRequired,
|
||||||
|
onOk: PropTypes.func
|
||||||
|
};
|
||||||
|
|
||||||
//Диалог фильтра
|
//Диалог фильтра
|
||||||
const P8PTableColumnFilterDialog = ({
|
const P8PTableColumnFilterDialog = ({
|
||||||
columnDef,
|
columnDef,
|
||||||
@ -440,9 +463,15 @@ const P8PTable = ({
|
|||||||
//Собственное состояние - развёрнутые строки
|
//Собственное состояние - развёрнутые строки
|
||||||
const [expanded, setExpanded] = useState({});
|
const [expanded, setExpanded] = useState({});
|
||||||
|
|
||||||
|
//Собственное состояние - колонка с отображаемой подсказкой
|
||||||
|
const [displayHintColumn, setDisplayHintColumn] = useState(null);
|
||||||
|
|
||||||
//Описание фильтруемой колонки
|
//Описание фильтруемой колонки
|
||||||
const filterColumnDef = filterColumn ? columnsDef.find(columnDef => columnDef.name == filterColumn) || null : null;
|
const filterColumnDef = filterColumn ? columnsDef.find(columnDef => columnDef.name == filterColumn) || null : null;
|
||||||
|
|
||||||
|
//Описание колонки с отображаемой подсказкой
|
||||||
|
const displayHintColumnDef = displayHintColumn ? columnsDef.find(columnDef => columnDef.name == displayHintColumn) || null : null;
|
||||||
|
|
||||||
//Значения фильтра фильтруемой колонки
|
//Значения фильтра фильтруемой колонки
|
||||||
const [filterColumnFrom, filterColumnTo] = filterColumn
|
const [filterColumnFrom, filterColumnTo] = filterColumn
|
||||||
? (() => {
|
? (() => {
|
||||||
@ -528,6 +557,12 @@ const P8PTable = ({
|
|||||||
if (onPagesCountChanged) onPagesCountChanged();
|
if (onPagesCountChanged) onPagesCountChanged();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//Отработка нажатия на элемент отображения подсказки по колонке
|
||||||
|
const handleColumnShowHintClick = columnName => setDisplayHintColumn(columnName);
|
||||||
|
|
||||||
|
//Отработка сокрытия подсказки по колонке
|
||||||
|
const handleHintOk = () => setDisplayHintColumn(null);
|
||||||
|
|
||||||
//Отработка нажатия на кнопку раскрытия элемента
|
//Отработка нажатия на кнопку раскрытия элемента
|
||||||
const handleExpandClick = rowIndex => {
|
const handleExpandClick = rowIndex => {
|
||||||
if (expanded[rowIndex] === true)
|
if (expanded[rowIndex] === true)
|
||||||
@ -547,6 +582,9 @@ const P8PTable = ({
|
|||||||
//Генерация содержимого
|
//Генерация содержимого
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
{displayHintColumn ? (
|
||||||
|
<P8PTableColumnHintDialog columnDef={displayHintColumnDef} okBtnCaption={okFilterBtnCaption} onOk={handleHintOk} />
|
||||||
|
) : null}
|
||||||
{filterColumn ? (
|
{filterColumn ? (
|
||||||
<P8PTableColumnFilterDialog
|
<P8PTableColumnFilterDialog
|
||||||
columnDef={filterColumnDef}
|
columnDef={filterColumnDef}
|
||||||
@ -596,7 +634,21 @@ const P8PTable = ({
|
|||||||
sx={{ ...STYLES.TABLE_COLUMN_STACK, ...customRender.stackStyle }}
|
sx={{ ...STYLES.TABLE_COLUMN_STACK, ...customRender.stackStyle }}
|
||||||
{...customRender.stackProps}
|
{...customRender.stackProps}
|
||||||
>
|
>
|
||||||
{customRender.data ? customRender.data : columnDef.caption}
|
{customRender.data ? (
|
||||||
|
customRender.data
|
||||||
|
) : columnDef.hint ? (
|
||||||
|
<Link
|
||||||
|
component="button"
|
||||||
|
variant="body2"
|
||||||
|
align="left"
|
||||||
|
underline="always"
|
||||||
|
onClick={() => handleColumnShowHintClick(columnDef.name)}
|
||||||
|
>
|
||||||
|
{columnDef.caption}
|
||||||
|
</Link>
|
||||||
|
) : (
|
||||||
|
columnDef.caption
|
||||||
|
)}
|
||||||
<P8PTableColumnToolBar
|
<P8PTableColumnToolBar
|
||||||
columnDef={columnDef}
|
columnDef={columnDef}
|
||||||
orders={orders}
|
orders={orders}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user