fixed dirty code Gold

This commit is contained in:
2026-09-11 09:10:15 +03:00
parent 5d4a0a8f53
commit 386937faef
3 changed files with 77 additions and 8 deletions
+38 -4
View File
@@ -38,8 +38,13 @@ let mapInitialFitDone = false;
let userMovedMap = false;
let programmaticMove = false;
let cmdFormDirty = false;
let cmdFormHoldUntil = 0;
const CMD_INPUT_IDS = ['cmdModemMode', 'cmdFq', 'cmdPw', 'cmdSf', 'cmdPl', 'cmdBw', 'cmdCr', 'cmdBr', 'cmdFd', 'cmdTm', 'cmdRole'];
const CMD_INPUT_IDS = [
'cmdModemMode', 'cmdFq', 'cmdPw', 'cmdSf', 'cmdPl', 'cmdBw', 'cmdCr',
'cmdBr', 'cmdFd', 'cmdGd', 'cmdTm', 'cmdRole'
];
const CMD_FORM_HOLD_MS = 10000;
let trackTxLayers = [];
let trackRxLayers = [];
@@ -552,8 +557,30 @@ function renderTimelineCompare(txTel, rxTel, txId, rxId) {
function setCmdFormDirty(dirty) {
cmdFormDirty = dirty;
refreshCmdFormHint();
}
function setCmdFormHold(ms = CMD_FORM_HOLD_MS) {
cmdFormHoldUntil = Date.now() + ms;
refreshCmdFormHint();
}
function isCmdFormHeld() {
return Date.now() < cmdFormHoldUntil;
}
function refreshCmdFormHint() {
const hint = document.getElementById('cmdDraftHint');
if (hint) hint.style.display = dirty ? 'block' : 'none';
if (!hint) return;
if (cmdFormDirty) {
hint.style.display = 'block';
hint.textContent = 'Черновик — значения с устройства не подставляются';
} else if (isCmdFormHeld()) {
hint.style.display = 'block';
hint.textContent = 'Ожидание подтверждения с устройства…';
} else {
hint.style.display = 'none';
}
}
function setupCmdFormDirtyTracking() {
@@ -647,7 +674,8 @@ function fillCmdFormFromDevice(d, opts = {}) {
if (!d) return;
const force = opts.force === true;
refreshCmdDeviceStatus(d);
if (!force && cmdFormDirty) return;
refreshCmdFormHint();
if (!force && (cmdFormDirty || isCmdFormHeld())) return;
fillCmdInputsFromDevice(d);
}
@@ -913,6 +941,8 @@ async function applySelectedMacroPreset() {
});
if (!ok) return;
appliedMacroPresetId = preset.id;
setCmdFormDirty(false);
setCmdFormHold();
renderMacroPresetList();
if (status) status.textContent = `Применён: ${preset.name || preset.id}`;
}
@@ -4571,6 +4601,7 @@ async function postCommand(toDeviceId, kind, payload) {
document.getElementById('btnCmdApply').onclick = () => {
postCommand(document.getElementById('cmdTargetSelect').value, 'at', { lines: buildMacroLines() });
setCmdFormDirty(false);
setCmdFormHold();
};
document.getElementById('btnCmdApplySymmetric')?.addEventListener('click', async () => {
const params = buildMacroParams();
@@ -4585,7 +4616,10 @@ document.getElementById('btnCmdApplySymmetric')?.addEventListener('click', async
const rxOk = await postCommand(rx.device_id, 'at', {
lines: macroLinesFromParams({ ...params, role: 'RX' })
});
if (txOk && rxOk) setCmdFormDirty(false);
if (txOk && rxOk) {
setCmdFormDirty(false);
setCmdFormHold();
}
});
document.getElementById('btnMacroPresetApply')?.addEventListener('click', () => {
applySelectedMacroPreset().catch(e => alert(e.message || String(e)));