fix(game-ui): 자동 갱신 중 커맨드 입력값 보존

같은 명령의 field 계약과 유효한 select option이 유지되는 동안 사용자가 편집한 값을 보존한다. 장수 동향과 명령표 realtime 갱신을 함께 발생시키는 desktop/mobile Chromium 회귀 테스트를 추가한다.
This commit is contained in:
2026-08-19 13:28:11 +00:00
parent 54a5b91ca9
commit f01661bc08
4 changed files with 380 additions and 12 deletions
@@ -0,0 +1,22 @@
import type { CommandInputField, CommandOption } from './types';
export type CommandArgumentFieldContract = Pick<CommandInputField, 'kind' | 'optionSource'>;
export const commandArgumentFieldContract = (field: CommandInputField): CommandArgumentFieldContract => ({
kind: field.kind,
optionSource: field.optionSource,
});
export const shouldPreserveCommandArgumentValue = (
field: CommandInputField,
previousField: CommandArgumentFieldContract | undefined,
values: Readonly<Record<string, unknown>>,
options: readonly CommandOption[]
): boolean => {
if (field.kind === 'hidden' || !Object.prototype.hasOwnProperty.call(values, field.key)) return false;
if (!previousField || previousField.kind !== field.kind || previousField.optionSource !== field.optionSource) {
return false;
}
if (field.kind !== 'select') return true;
return options.some((option) => option.value === values[field.key]);
};