fix(realtime): пустая правка уходит как value: null, а не без ключа (AURORA-1848)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
b0e11d1cd0
commit
a5282f1c86
@ -1,6 +1,7 @@
|
||||
import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';
|
||||
import { toast } from 'react-toastify';
|
||||
import { useWebSocket } from '../hooks/useWebSocket';
|
||||
import { buildCellUpdatedMessage } from '../utils/messageUtils';
|
||||
import { getRowId } from '../utils/rowUtils';
|
||||
|
||||
const RealtimeActionsContext = createContext(null);
|
||||
@ -310,15 +311,7 @@ export const RealtimeProvider = ({ children, formId, sheetName, direction, year,
|
||||
|
||||
const lineId = getRowId(row);
|
||||
const columnKey = getColumnRequestKey(column);
|
||||
const message = {
|
||||
event: 'cell_updated',
|
||||
data: {
|
||||
line_id: lineId,
|
||||
line_id_code: row.id,
|
||||
column: columnKey,
|
||||
value: value,
|
||||
},
|
||||
};
|
||||
const message = buildCellUpdatedMessage({ lineId, lineIdCode: row.id, column: columnKey, value });
|
||||
const sent = sendMessage(message);
|
||||
|
||||
if (!sent) {
|
||||
|
||||
10
web/src/components/RealtimeTable/utils/messageUtils.js
Normal file
10
web/src/components/RealtimeTable/utils/messageUtils.js
Normal file
@ -0,0 +1,10 @@
|
||||
// value всегда присутствует: сервер читает event_data["value"], AURORA-1848 D5.2
|
||||
export const buildCellUpdatedMessage = ({ lineId, lineIdCode, column, value }) => ({
|
||||
event: 'cell_updated',
|
||||
data: {
|
||||
line_id: lineId,
|
||||
line_id_code: lineIdCode,
|
||||
column,
|
||||
value: value === undefined ? null : value,
|
||||
},
|
||||
});
|
||||
17
web/src/components/RealtimeTable/utils/messageUtils.test.js
Normal file
17
web/src/components/RealtimeTable/utils/messageUtils.test.js
Normal file
@ -0,0 +1,17 @@
|
||||
import assert from 'node:assert/strict';
|
||||
import { test } from 'node:test';
|
||||
import { buildCellUpdatedMessage } from './messageUtils.js';
|
||||
|
||||
const msg = (value) => buildCellUpdatedMessage({ lineId: 1, lineIdCode: '0.1', column: 'q1.m1', value });
|
||||
|
||||
test('buildCellUpdatedMessage: undefined → null, ключ value есть после JSON.stringify', () => {
|
||||
const m = msg(undefined);
|
||||
assert.deepEqual(m, { event: 'cell_updated', data: { line_id: 1, line_id_code: '0.1', column: 'q1.m1', value: null } });
|
||||
assert.match(JSON.stringify(m), /"value":null/);
|
||||
});
|
||||
|
||||
test('buildCellUpdatedMessage: прочие значения не меняются', () => {
|
||||
for (const v of [null, 0, '', '1.5', 42, 'текст']) {
|
||||
assert.equal(msg(v).data.value, v);
|
||||
}
|
||||
});
|
||||
Loading…
x
Reference in New Issue
Block a user