fix header
This commit is contained in:
parent
e218d3aa1e
commit
e2760bb39a
@ -35,8 +35,10 @@ import { CreateProgramModal } from './Modals/CreateProgramProjectModal';
|
|||||||
|
|
||||||
import { FormsNoCanAddRow } from './constants/formConfig';
|
import { FormsNoCanAddRow } from './constants/formConfig';
|
||||||
import { DictVspApi } from '../../api/dict-vsp';
|
import { DictVspApi } from '../../api/dict-vsp';
|
||||||
|
import { useAuth } from '../../app/context/AuthProvider';
|
||||||
|
|
||||||
const RealtimeTable = ({ formType, formId, sheetName, direction, year }) => {
|
const RealtimeTable = ({ formType, formId, sheetName, direction, year }) => {
|
||||||
|
const { user } = useAuth();
|
||||||
const { data, setData, columnsCurStage, isLoading: isTableLoading, editingCells: dataEditingCells } = useRealtimeData(formId, sheetName, direction, formType, year);
|
const { data, setData, columnsCurStage, isLoading: isTableLoading, editingCells: dataEditingCells } = useRealtimeData(formId, sheetName, direction, formType, year);
|
||||||
const [globalFilter, setGlobalFilter] = useState('');
|
const [globalFilter, setGlobalFilter] = useState('');
|
||||||
const [showColumnFilters, setShowColumnFilters] = useState(false);
|
const [showColumnFilters, setShowColumnFilters] = useState(false);
|
||||||
@ -215,6 +217,7 @@ const RealtimeTable = ({ formType, formId, sheetName, direction, year }) => {
|
|||||||
EditCell,
|
EditCell,
|
||||||
columnsConfig,
|
columnsConfig,
|
||||||
columnsCurStage,
|
columnsCurStage,
|
||||||
|
user,
|
||||||
onCellUpdate: handleUpdateCell,
|
onCellUpdate: handleUpdateCell,
|
||||||
onCellNumberClick: handleClickRowCell,
|
onCellNumberClick: handleClickRowCell,
|
||||||
onCellUpdateError: handleCellUpdateError,
|
onCellUpdateError: handleCellUpdateError,
|
||||||
@ -227,6 +230,7 @@ const RealtimeTable = ({ formType, formId, sheetName, direction, year }) => {
|
|||||||
}, [
|
}, [
|
||||||
columnsConfig,
|
columnsConfig,
|
||||||
columnsCurStage,
|
columnsCurStage,
|
||||||
|
user,
|
||||||
handleCellUpdateError,
|
handleCellUpdateError,
|
||||||
handleClickRowCell,
|
handleClickRowCell,
|
||||||
handleUpdateCell,
|
handleUpdateCell,
|
||||||
|
|||||||
@ -279,7 +279,7 @@ export const config = {
|
|||||||
accessorKey: 'otchet_ob_ispolnenii_tekuschikh_raskhodov_v_i_kvartale_korrektirovka_limita',
|
accessorKey: 'otchet_ob_ispolnenii_tekuschikh_raskhodov_v_i_kvartale_korrektirovka_limita',
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
header: 'По статьям сметы *',
|
header: 'По статьям сметы*',
|
||||||
accessorKey: 'data.q1.adj_by_items',
|
accessorKey: 'data.q1.adj_by_items',
|
||||||
columnLetter: 'E',
|
columnLetter: 'E',
|
||||||
size: 180,
|
size: 180,
|
||||||
@ -292,7 +292,7 @@ export const config = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
header: 'Увеличение сметы **',
|
header: 'Увеличение сметы**',
|
||||||
accessorKey: 'data.q1.adj_increase',
|
accessorKey: 'data.q1.adj_increase',
|
||||||
columnLetter: 'F',
|
columnLetter: 'F',
|
||||||
size: 200,
|
size: 200,
|
||||||
@ -368,7 +368,7 @@ export const config = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
header: 'За',
|
header: 'За март',
|
||||||
accessorKey: 'data.q1.m3',
|
accessorKey: 'data.q1.m3',
|
||||||
columnLetter: 'J',
|
columnLetter: 'J',
|
||||||
size: 150,
|
size: 150,
|
||||||
@ -462,7 +462,7 @@ export const config = {
|
|||||||
accessorKey: 'otchet_ob_ispolnenii_tekuschikh_raskhodov_v_ii_kvartale_korrektirovka_limita',
|
accessorKey: 'otchet_ob_ispolnenii_tekuschikh_raskhodov_v_ii_kvartale_korrektirovka_limita',
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
header: 'По статьям сметы *',
|
header: 'По статьям сметы*',
|
||||||
accessorKey: 'data.q2.adj_by_items',
|
accessorKey: 'data.q2.adj_by_items',
|
||||||
columnLetter: 'O',
|
columnLetter: 'O',
|
||||||
size: 180,
|
size: 180,
|
||||||
@ -475,7 +475,7 @@ export const config = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
header: 'Увеличение сметы **',
|
header: 'Увеличение сметы**',
|
||||||
accessorKey: 'data.q2.adj_increase',
|
accessorKey: 'data.q2.adj_increase',
|
||||||
columnLetter: 'P',
|
columnLetter: 'P',
|
||||||
size: 200,
|
size: 200,
|
||||||
@ -551,7 +551,7 @@ export const config = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
header: 'За',
|
header: 'За июнь',
|
||||||
accessorKey: 'data.q2.m3',
|
accessorKey: 'data.q2.m3',
|
||||||
columnLetter: 'T',
|
columnLetter: 'T',
|
||||||
size: 150,
|
size: 150,
|
||||||
@ -645,7 +645,7 @@ export const config = {
|
|||||||
accessorKey: 'otchet_ob_ispolnenii_tekuschikh_raskhodov_v_iii_kvartale_korrektirovka_limita',
|
accessorKey: 'otchet_ob_ispolnenii_tekuschikh_raskhodov_v_iii_kvartale_korrektirovka_limita',
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
header: 'По статьям сметы *',
|
header: 'По статьям сметы*',
|
||||||
accessorKey: 'data.q3.adj_by_items',
|
accessorKey: 'data.q3.adj_by_items',
|
||||||
columnLetter: 'Y',
|
columnLetter: 'Y',
|
||||||
size: 180,
|
size: 180,
|
||||||
@ -658,7 +658,7 @@ export const config = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
header: 'Увеличение сметы **',
|
header: 'Увеличение сметы**',
|
||||||
accessorKey: 'data.q3.adj_increase',
|
accessorKey: 'data.q3.adj_increase',
|
||||||
columnLetter: 'Z',
|
columnLetter: 'Z',
|
||||||
size: 200,
|
size: 200,
|
||||||
@ -734,7 +734,7 @@ export const config = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
header: 'За',
|
header: 'За сентябрь',
|
||||||
accessorKey: 'data.q3.m3',
|
accessorKey: 'data.q3.m3',
|
||||||
columnLetter: 'AD',
|
columnLetter: 'AD',
|
||||||
size: 150,
|
size: 150,
|
||||||
@ -828,7 +828,7 @@ export const config = {
|
|||||||
accessorKey: 'otchet_ob_ispolnenii_tekuschikh_raskhodov_v_iv_kvartale_korrektirovka_limita',
|
accessorKey: 'otchet_ob_ispolnenii_tekuschikh_raskhodov_v_iv_kvartale_korrektirovka_limita',
|
||||||
columns: [
|
columns: [
|
||||||
{
|
{
|
||||||
header: 'По статьям сметы *',
|
header: 'По статьям сметы*',
|
||||||
accessorKey: 'data.q4.adj_by_items',
|
accessorKey: 'data.q4.adj_by_items',
|
||||||
columnLetter: 'AI',
|
columnLetter: 'AI',
|
||||||
size: 180,
|
size: 180,
|
||||||
@ -841,7 +841,7 @@ export const config = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
header: 'Увеличение сметы **',
|
header: 'Увеличение сметы**',
|
||||||
accessorKey: 'data.q4.adj_increase',
|
accessorKey: 'data.q4.adj_increase',
|
||||||
columnLetter: 'AJ',
|
columnLetter: 'AJ',
|
||||||
size: 200,
|
size: 200,
|
||||||
@ -917,7 +917,7 @@ export const config = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
header: 'За',
|
header: 'За декабрь',
|
||||||
accessorKey: 'data.q4.m3',
|
accessorKey: 'data.q4.m3',
|
||||||
columnLetter: 'AN',
|
columnLetter: 'AN',
|
||||||
size: 150,
|
size: 150,
|
||||||
|
|||||||
@ -28,6 +28,10 @@ export const BASE_TABLE_CONFIG = {
|
|||||||
defaultColumn: { filterFn: 'contains' },
|
defaultColumn: { filterFn: 'contains' },
|
||||||
columnResizeMode: 'onChange',
|
columnResizeMode: 'onChange',
|
||||||
localization: {
|
localization: {
|
||||||
|
expand: 'Раскрыть',
|
||||||
|
expandAll: 'Раскрыть все',
|
||||||
|
collapse: 'Свернуть',
|
||||||
|
collapseAll: 'Свернуть все',
|
||||||
noRecordsToDisplay: <span>Нет данных для отображения</span>,
|
noRecordsToDisplay: <span>Нет данных для отображения</span>,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@ -5,7 +5,6 @@ import { useRealtime } from './contexts/RealtimeContext';
|
|||||||
|
|
||||||
import { sectionCodeColor } from './constants/columnConfig';
|
import { sectionCodeColor } from './constants/columnConfig';
|
||||||
import { blueColumn, greenColumn } from './constants/columnColors';
|
import { blueColumn, greenColumn } from './constants/columnColors';
|
||||||
import { useAuth } from '../../app/context/AuthProvider';
|
|
||||||
import { ROLES_NAME_ID } from '../../constants/constants';
|
import { ROLES_NAME_ID } from '../../constants/constants';
|
||||||
|
|
||||||
import VspDropdownEditCell from './Cell/EditCell/VspDropdownEditCell';
|
import VspDropdownEditCell from './Cell/EditCell/VspDropdownEditCell';
|
||||||
@ -94,18 +93,38 @@ const EditCellPortal = React.memo(({
|
|||||||
});
|
});
|
||||||
|
|
||||||
function getColorCell(colors, column, row) {
|
function getColorCell(colors, column, row) {
|
||||||
if (row.original.data.section_code) {
|
const rowType = row?.original?.row_type || row?.row_type;
|
||||||
const section_code = row.original.data.section_code[0];
|
const sectionCodeValue =
|
||||||
return (sectionCodeColor[section_code] || blueColumn)[row.original?.row_type || row.row_type];
|
row?.original?.data?.section_code ?? row?.original?.data?.header?.section_code;
|
||||||
|
|
||||||
|
if (sectionCodeValue !== null && sectionCodeValue !== undefined && sectionCodeValue !== '') {
|
||||||
|
const sectionCode = String(sectionCodeValue)[0];
|
||||||
|
return (sectionCodeColor[sectionCode] || blueColumn)[rowType];
|
||||||
}
|
}
|
||||||
return colors[column.id]?.color_type?.[row.original?.row_type || row.row_type];
|
|
||||||
|
return colors[column.id]?.color_type?.[rowType];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const UPPERCASE_MONTH_PATTERN =
|
||||||
|
/ЯНВАРЬ|ФЕВРАЛЬ|МАРТ|АПРЕЛЬ|МАЙ|ИЮНЬ|ИЮЛЬ|АВГУСТ|СЕНТЯБРЬ|ОКТЯБРЬ|НОЯБРЬ|ДЕКАБРЬ/g;
|
||||||
|
|
||||||
|
const normalizeMonthHeader = (header) => {
|
||||||
|
if (typeof header !== 'string') return header;
|
||||||
|
|
||||||
|
return header.replace(UPPERCASE_MONTH_PATTERN, (month, offset) => {
|
||||||
|
const normalizedMonth = month.toLowerCase();
|
||||||
|
if (offset !== 0) return normalizedMonth;
|
||||||
|
|
||||||
|
return normalizedMonth[0].toUpperCase() + normalizedMonth.slice(1);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
export const getTableColumns = ({
|
export const getTableColumns = ({
|
||||||
Cell,
|
Cell,
|
||||||
EditCell,
|
EditCell,
|
||||||
columnsConfig,
|
columnsConfig,
|
||||||
columnsCurStage,
|
columnsCurStage,
|
||||||
|
user,
|
||||||
onCellUpdateError,
|
onCellUpdateError,
|
||||||
onCellNumberClick,
|
onCellNumberClick,
|
||||||
isCellInvalid,
|
isCellInvalid,
|
||||||
@ -113,8 +132,6 @@ export const getTableColumns = ({
|
|||||||
const columnColors = { ...columnsConfig.colors };
|
const columnColors = { ...columnsConfig.colors };
|
||||||
const columns = structuredClone(columnsConfig.columns);
|
const columns = structuredClone(columnsConfig.columns);
|
||||||
|
|
||||||
const { user } = useAuth();
|
|
||||||
|
|
||||||
const cellPropsCache = new WeakMap();
|
const cellPropsCache = new WeakMap();
|
||||||
const editPropsCache = new WeakMap();
|
const editPropsCache = new WeakMap();
|
||||||
|
|
||||||
@ -130,6 +147,9 @@ export const getTableColumns = ({
|
|||||||
const key = `${row.id}_${column.id}`;
|
const key = `${row.id}_${column.id}`;
|
||||||
const value = row.getValue(column.id);
|
const value = row.getValue(column.id);
|
||||||
const isInvalid = isCellInvalid?.(column.id, value, row.original) || false;
|
const isInvalid = isCellInvalid?.(column.id, value, row.original) || false;
|
||||||
|
const isEditableCell = isEditable(row, column);
|
||||||
|
const backgroundColor = getColorCell(columnColors, column, row);
|
||||||
|
const isUpdating = table.options.meta?.updatingCells?.[key];
|
||||||
|
|
||||||
if (!cellPropsCache.has(row)) {
|
if (!cellPropsCache.has(row)) {
|
||||||
cellPropsCache.set(row, {});
|
cellPropsCache.set(row, {});
|
||||||
@ -144,7 +164,8 @@ export const getTableColumns = ({
|
|||||||
if (cached.globalFilter === currentGlobalFilter &&
|
if (cached.globalFilter === currentGlobalFilter &&
|
||||||
cached.columnFilter === currentColumnFilter &&
|
cached.columnFilter === currentColumnFilter &&
|
||||||
cached.value === value &&
|
cached.value === value &&
|
||||||
cached.isInvalid === isInvalid) {
|
cached.isInvalid === isInvalid &&
|
||||||
|
cached.backgroundColor === backgroundColor) {
|
||||||
return cached;
|
return cached;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -155,12 +176,11 @@ export const getTableColumns = ({
|
|||||||
const props = {
|
const props = {
|
||||||
globalFilter,
|
globalFilter,
|
||||||
columnFilter,
|
columnFilter,
|
||||||
isEditable: isEditable(row, column),
|
isEditable: isEditableCell,
|
||||||
backgroundColor: getColorCell(columnColors, column, row),
|
backgroundColor,
|
||||||
isUpdating: table.options.meta?.updatingCells?.[`${row.id}_${column.id}`],
|
|
||||||
isInvalid,
|
isInvalid,
|
||||||
value,
|
value,
|
||||||
_hash: `${globalFilter}_${columnFilter}_${row.id}_${column.id}_${value}_${isInvalid}`,
|
_hash: `${globalFilter}_${columnFilter}_${key}_${value}_${isInvalid}_${backgroundColor}`,
|
||||||
};
|
};
|
||||||
|
|
||||||
rowCache[key] = props;
|
rowCache[key] = props;
|
||||||
@ -190,6 +210,8 @@ export const getTableColumns = ({
|
|||||||
// Оптимизированная функция processColumns
|
// Оптимизированная функция processColumns
|
||||||
const processColumns = (columns) => {
|
const processColumns = (columns) => {
|
||||||
for (const col of columns) {
|
for (const col of columns) {
|
||||||
|
col.header = normalizeMonthHeader(col.header);
|
||||||
|
|
||||||
col.Cell = ({ cell, table, column, row }) => {
|
col.Cell = ({ cell, table, column, row }) => {
|
||||||
const { vspOptions } = useRealtime();
|
const { vspOptions } = useRealtime();
|
||||||
const props = getCachedCellProps(row, column, table);
|
const props = getCachedCellProps(row, column, table);
|
||||||
@ -236,7 +258,7 @@ export const getTableColumns = ({
|
|||||||
|
|
||||||
const rowNumber = {
|
const rowNumber = {
|
||||||
accessorKey: 'sort_order',
|
accessorKey: 'sort_order',
|
||||||
header: '#',
|
header: '№',
|
||||||
size: 50,
|
size: 50,
|
||||||
enableEditing: false,
|
enableEditing: false,
|
||||||
Cell: ({ cell, row }) => {
|
Cell: ({ cell, row }) => {
|
||||||
|
|||||||
@ -281,6 +281,9 @@ const UserTableForAdd = ({ usersEmail = [], sspOptions = [], onDeleteUser, onCha
|
|||||||
maxHeight: '18.38rem',
|
maxHeight: '18.38rem',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
localization: {
|
||||||
|
noRecordsToDisplay: 'Нет данных для отображения',
|
||||||
|
},
|
||||||
enableRowNumbers: false,
|
enableRowNumbers: false,
|
||||||
muiToolbarAlertBannerProps: false,
|
muiToolbarAlertBannerProps: false,
|
||||||
});
|
});
|
||||||
|
|||||||
@ -472,6 +472,13 @@ const SummaryPage = () => {
|
|||||||
columns: firstColumns,
|
columns: firstColumns,
|
||||||
data: filteredData,
|
data: filteredData,
|
||||||
...projectsTableOptions,
|
...projectsTableOptions,
|
||||||
|
localization: {
|
||||||
|
expand: 'Раскрыть',
|
||||||
|
expandAll: 'Раскрыть все',
|
||||||
|
collapse: 'Свернуть',
|
||||||
|
collapseAll: 'Свернуть все',
|
||||||
|
noRecordsToDisplay: 'Нет данных для отображения',
|
||||||
|
},
|
||||||
initialState: {
|
initialState: {
|
||||||
columnPinning: { right: ['actions'], left: ['mrt-row-expand', 'project'] },
|
columnPinning: { right: ['actions'], left: ['mrt-row-expand', 'project'] },
|
||||||
},
|
},
|
||||||
@ -482,6 +489,9 @@ const SummaryPage = () => {
|
|||||||
columns: secondColumns,
|
columns: secondColumns,
|
||||||
data: summaryData,
|
data: summaryData,
|
||||||
...summaryProjectTableOptions,
|
...summaryProjectTableOptions,
|
||||||
|
localization: {
|
||||||
|
noRecordsToDisplay: 'Нет данных для отображения',
|
||||||
|
},
|
||||||
initialState: {
|
initialState: {
|
||||||
columnPinning: { left: ['data.header.name'] },
|
columnPinning: { left: ['data.header.name'] },
|
||||||
},
|
},
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user