diff --git a/web/src/components/RealtimeTable/RealtimeTable.jsx b/web/src/components/RealtimeTable/RealtimeTable.jsx index e6a41ae..2cebd56 100644 --- a/web/src/components/RealtimeTable/RealtimeTable.jsx +++ b/web/src/components/RealtimeTable/RealtimeTable.jsx @@ -49,6 +49,8 @@ const RealtimeTable = ({ formType, formId, sheetName, direction, year }) => { const { errors: validationErrors, isCellInvalid } = useValidationRules( data, columnsConfig?.columns, + formType, + sheetName, ); const [expanded, setExpanded] = useState(true); @@ -692,4 +694,4 @@ const RealtimeTable = ({ formType, formId, sheetName, direction, year }) => { ); }; -export default React.memo(RealtimeTable); \ No newline at end of file +export default React.memo(RealtimeTable); diff --git a/web/src/components/RealtimeTable/SettingPanel/SettingPanel.jsx b/web/src/components/RealtimeTable/SettingPanel/SettingPanel.jsx index 1ac56c3..9fd8baa 100644 --- a/web/src/components/RealtimeTable/SettingPanel/SettingPanel.jsx +++ b/web/src/components/RealtimeTable/SettingPanel/SettingPanel.jsx @@ -1,5 +1,5 @@ import { Divider, IconButton, Stack, Tooltip } from '@mui/material'; -import { useCallback, useEffect, useMemo, useState } from 'react'; +import { useEffect, useState, useCallback } from 'react'; import { FORM_TYPE_OPTIONS } from '../../../constants/constants'; import { exportSheet, exportSheetProject } from '../../../utils/exportFile'; import { ExportDefaultButton } from '../../common/Buttons/ButtonsActions'; @@ -7,7 +7,6 @@ import CollapsibleTree from '../../common/CollapsibleTree'; import SearchComponent from '../../common/SearchComponent'; import { AddLine, - AllStageColumns, CurrentStageColumns, HiddenExpenseItems, Minus, @@ -17,7 +16,6 @@ import { Project, RemoveLine, Search, - VisibleExpenseItems, } from '../../common/icons/icons'; import { GroupByObject } from './GroupByObject/GroupByObject'; import { Panel } from './SettingPanel.style'; @@ -104,23 +102,21 @@ const SettingPanel = ({ await exportSheet(formId, sheetName, direction); setIsExporting(false); }; - const leafColumns = useMemo(() => collectLeafColumns({ columns }), [columns]); - const stageColumnIds = useMemo(() => new Set([...stageColumnsHiddenFromPicker, ...columnsCurStage]), [columnsCurStage]); - const showOnlyCurrentStageColumns = useMemo(() => { - if (!columnsCurStage?.length || !leafColumns.length) return false; - return leafColumns.every((column) => stageColumnIds.has(column.id) ? columnVisibility[column.id] !== false : columnVisibility[column.id] === false); - }, [columnVisibility, columnsCurStage, leafColumns, stageColumnIds]); - - // Переключение между столбцами текущего этапа и всеми столбцами. - const handleToggleCurrentStageColumns = useCallback(() => { + // Обработчик скрытия всех столбцов кроме текущего этапа + const handleShowOnlyCurrentStageColumns = useCallback(() => { if (!columnsCurStage || columnsCurStage.length === 0) { console.warn('Нет столбцов для текущего этапа'); return; } - for (const column of leafColumns) { - onToggleColumnVisibility(column, showOnlyCurrentStageColumns || stageColumnIds.has(column.id)); + //колонки которые не относятся не к какому этапу + const allColumnVisible = [...stageColumnsHiddenFromPicker, ...columnsCurStage]; + const leafCols = collectLeafColumns({ columns: columns }); + for (const col of leafCols) { + const isColCurStage = allColumnVisible.includes(col.id); + onToggleColumnVisibility(col, isColCurStage || (!isColCurStage ^ columnVisibility[col.id])); } - }, [columnsCurStage, leafColumns, onToggleColumnVisibility, showOnlyCurrentStageColumns, stageColumnIds]); + + }, [columnsCurStage, columns, onToggleColumnVisibility, columnVisibility]); return ( <> @@ -186,9 +182,9 @@ const SettingPanel = ({ )} )} - - - {showOnlyDepth2 ? : } + + + @@ -200,16 +196,15 @@ const SettingPanel = ({ ) : ( '' )} - + - {showOnlyCurrentStageColumns ? : } + diff --git a/web/src/components/common/icons/icons.jsx b/web/src/components/common/icons/icons.jsx index 55effd2..4d33283 100644 --- a/web/src/components/common/icons/icons.jsx +++ b/web/src/components/common/icons/icons.jsx @@ -235,14 +235,6 @@ export const HiddenExpenseItems = ({ size = 20 }) => ( ); -export const VisibleExpenseItems = ({ size = 20 }) => ( - -); - export const CurrentStageColumns = ({ size = 20 }) => ( ); -export const AllStageColumns = ({ size = 20 }) => ( - -); - export const Trash = styled.div` background-image: url('images/Trash.svg'); width: 1.25rem;