Merge pull request 'fix-form-4' (#56) from fix-form-4 into test

Reviewed-on: #56
This commit is contained in:
PotapovaA 2026-07-29 14:57:44 +03:00
commit 5498bf4935
5 changed files with 22 additions and 15 deletions

View File

@ -101,6 +101,18 @@ const EditCell = memo(({ refCell, onChange, disabled, value, tableId, cellId, ta
return () => observer.disconnect();
}, [state.currentValue]);
useEffect(() => {
// Небольшая задержка для гарантии, что DOM полностью готов
const timeoutId = setTimeout(() => {
if (textareaRef.current && !disabled) {
textareaRef.current.focus();
textareaRef.current.select();
}
}, 50);
return () => clearTimeout(timeoutId);
}, [disabled]);
const handleSave = useCallback(() => {
const { currentValue } = state;

View File

@ -77,6 +77,7 @@ const RealtimeTable = ({ formType, formId, sheetName, direction, year }) => {
error: wsError,
updateCell: contextUpdateCell,
addRow: contextAddRow,
deleteRow: contextDeleteRow,
startEditing: contextStartEditing,
addProgram: contextAddProgram,
addProject: contextAddProject,

View File

@ -84,12 +84,8 @@ export function updateCells(data, newRows) {
) {
if (newData && typeof newData === "object") {
Object.keys(newData).forEach((key) => {
if (row.data && row.data[key]) {
if (typeof row.data[key] === "object") {
row.data[key] = deepMerge(row.data[key], newData[key]);
} else {
row.data[key] = newData[key];
}
if (row.data && row.data[key] !== undefined) {
row.data[key] = deepMerge(row.data[key], newData[key]);
} else if (row[key]) {
row[key] = newData[key];
}
@ -112,7 +108,6 @@ export function updateCells(data, newRows) {
findAndUpdate(updatedRows);
});
return updatedRows;
}
@ -216,7 +211,7 @@ export function deleteRow(data, lineId) {
rows.splice(i, 1);
i--;
}
if ((rowDeleteSortOrder > 0) & (row.sort_order >= rowDeleteSortOrder)) {
row.sort_order = row.sort_order - 1;
}

View File

@ -53,5 +53,6 @@ export const SHEET_NAME = {
"AHR_UTILITY": "АХР Коммунальные услуги",
"AHR_SECURITY": "АХР Безопасность",
"OTCH9F": "Отчет 9ф",
"SMETA": "Смета"
"SMETA": "Смета",
'STRUCTURE': 'Структура'
};

View File

@ -76,7 +76,7 @@ export default function ProjectsPage() {
useEffect(() => {
if (!user) return;
if (user.role_id == ROLES_NAME_ID.admin) {
SspApi.getAll({is_active: true}).then(data => {
SspApi.getAll({ is_active: true }).then(data => {
if (data.success) {
setProjectData(prev => ({
...prev, 'ССП/РФ': {
@ -248,11 +248,9 @@ export default function ProjectsPage() {
getItemId={(project) => project.id}
getItemTitle={(project) => project.name || 'Проект'}
extraActions={
user.role_id === ROLES_NAME_ID.admin && (
<PrimaryButton onClick={openModal} startIcon={<WhitePlus />} height='2.5rem' >
Создать проект
</PrimaryButton>
)
<PrimaryButton onClick={openModal} startIcon={<WhitePlus />} height='2.5rem' >
Создать проект
</PrimaryButton>
}
filterActions={
<Box sx={{ display: 'flex', gap: 1.5, flexWrap: 'wrap', alignItems: 'center', height: '2.5rem' }}>