From a381fca0a1ddc725a1887f6dbc2245900a22eee2 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Wed, 27 May 2026 12:21:00 +0300 Subject: [PATCH] =?UTF-8?q?refactor(web-test):=20returnFormState=20=D0=B2?= =?UTF-8?q?=20close.mjs=20+=20filter.mjs=20(7=20=D0=B2=D0=B5=D1=82=D0=BE?= =?UTF-8?q?=D0=BA)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit closeForm: platform-dialogs, save=true/false, final-escape — теперь подмешивают state.errors через returnFormState. Ветка save=undefined (hint-return) осознанно оставлена без errors (юзер ещё не принял решение). filterList: simple search, advanced search — закрывают R1/R2. unfilterList: selective (field) + clear-all — аналогично. Phase 1 / C2 из плана upload/returnFormState-audit.md. Точечный регресс зелёный (02-crud, 06-document, 09-filter). Co-Authored-By: Claude Opus 4.7 (1M context) --- .../web-test/scripts/engine/forms/close.mjs | 16 ++++++--------- .../web-test/scripts/engine/table/filter.mjs | 20 ++++++------------- 2 files changed, 12 insertions(+), 24 deletions(-) diff --git a/.claude/skills/web-test/scripts/engine/forms/close.mjs b/.claude/skills/web-test/scripts/engine/forms/close.mjs index cd9990e3..9adc9dc0 100644 --- a/.claude/skills/web-test/scripts/engine/forms/close.mjs +++ b/.claude/skills/web-test/scripts/engine/forms/close.mjs @@ -1,10 +1,11 @@ -// web-test forms/close v1.17 — Close current form via Escape, handle save-changes confirmation. +// web-test forms/close v1.18 — Close current form via Escape, handle save-changes confirmation. // Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import { page, recorder, ensureConnected } from '../core/state.mjs'; import { detectFormScript } from '../../dom.mjs'; import { dismissPendingErrors, checkForErrors, detectPlatformDialogs, closePlatformDialogs } from '../core/errors.mjs'; import { waitForStable } from '../core/wait.mjs'; +import { returnFormState } from '../core/helpers.mjs'; import { getFormState } from './state.mjs'; /** @@ -23,10 +24,7 @@ export async function closeForm({ save } = {}) { if (pd.length) { await closePlatformDialogs(); await page.waitForTimeout(300); - const state = await getFormState(); - state.closed = true; - state.closedPlatformDialogs = pd; - return state; + return returnFormState({ closed: true, closedPlatformDialogs: pd }); } const beforeForm = await page.evaluate(detectFormScript()); await page.keyboard.press('Escape'); @@ -47,14 +45,12 @@ export async function closeForm({ save } = {}) { break; } } - const afterState = await getFormState(); - afterState.closed = afterState.form !== beforeForm; - return afterState; + const afterForm = await page.evaluate(detectFormScript()); + return returnFormState({ closed: afterForm !== beforeForm }); } state.confirmation = err.confirmation; state.hint = 'Confirmation dialog shown. Click "Да" to confirm or "Нет" to cancel'; return state; } - state.closed = state.form !== beforeForm; - return state; + return returnFormState({ closed: state.form !== beforeForm }); } diff --git a/.claude/skills/web-test/scripts/engine/table/filter.mjs b/.claude/skills/web-test/scripts/engine/table/filter.mjs index 04a227ef..2f11e35f 100644 --- a/.claude/skills/web-test/scripts/engine/table/filter.mjs +++ b/.claude/skills/web-test/scripts/engine/table/filter.mjs @@ -1,4 +1,4 @@ -// web-test table/filter v1.18 — filterList / unfilterList — simple search + advanced-column filter badges. +// web-test table/filter v1.19 — filterList / unfilterList — simple search + advanced-column filter badges. // Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import { page, ensureConnected, normYo, highlightMode, ACTION_WAIT } from '../core/state.mjs'; @@ -12,7 +12,7 @@ import { import { dismissPendingErrors, checkForErrors } from '../core/errors.mjs'; import { waitForStable, waitForCondition } from '../core/wait.mjs'; import { highlight, unhighlight } from '../recording/highlight.mjs'; -import { safeClick } from '../core/helpers.mjs'; +import { safeClick, returnFormState } from '../core/helpers.mjs'; import { selectValue, fillReferenceField } from '../forms/select-value.mjs'; import { pasteText } from '../core/clipboard.mjs'; import { getFormState } from '../forms/state.mjs'; @@ -51,9 +51,7 @@ export async function filterList(text, { field, exact } = {}) { await page.keyboard.press('Enter'); await waitForStable(formNum); - const state = await getFormState(); - state.filtered = { type: 'search', text }; - return state; + return returnFormState({ filtered: { type: 'search', text } }); } // No search input — Ctrl+F opens advanced search on such forms. @@ -191,9 +189,7 @@ export async function filterList(text, { field, exact } = {}) { } await waitForStable(formNum); - const state = await getFormState(); - state.filtered = { type: 'advanced', field, text, exact: !!exact }; - return state; + return returnFormState({ filtered: { type: 'advanced', field, text, exact: !!exact } }); } /** @@ -219,9 +215,7 @@ export async function unfilterList({ field } = {}) { await page.mouse.click(closeBtn.x, closeBtn.y); await waitForStable(formNum); - const state = await getFormState(); - state.unfiltered = { field: closeBtn.field }; - return state; + return returnFormState({ unfiltered: { field: closeBtn.field } }); } // --- Clear ALL filters --- @@ -250,7 +244,5 @@ export async function unfilterList({ field } = {}) { await waitForStable(formNum); } - const state = await getFormState(); - state.unfiltered = true; - return state; + return returnFormState({ unfiltered: true }); }