Fix calculator swap button

This commit is contained in:
Codex
2026-03-07 23:47:29 +00:00
parent 49414b25cd
commit 055ecdebc3

View File

@@ -14,6 +14,7 @@
let val2 = ''; let val2 = '';
let val3 = ''; let val3 = '';
let activeField: 1 | 2 | 3 = 1; let activeField: 1 | 2 | 3 = 1;
let swapState: { originalField: 1 | 2; originalValue: string } | null = null;
$: has3 = ['3col', '3col-mul'].includes(config.type) || !!config.labels.in3; $: has3 = ['3col', '3col-mul'].includes(config.type) || !!config.labels.in3;
$: isTextInput = ['base', 'text-bin', 'bin-text', 'dec-frac', 'dms-dd', 'dd-dms'].includes(config.type); $: isTextInput = ['base', 'text-bin', 'bin-text', 'dec-frac', 'dms-dd', 'dd-dms'].includes(config.type);
@@ -25,7 +26,10 @@
let paramsInitializing = true; let paramsInitializing = true;
function handleInput(source: 1 | 2 | 3) { function handleInput(source: 1 | 2 | 3, options?: { preserveSwap?: boolean }) {
if (!options?.preserveSwap) {
swapState = null;
}
activeField = source; activeField = source;
const result = solve(config, source, val1, val2, val3); const result = solve(config, source, val1, val2, val3);
if (source !== 1) val1 = result.val1; if (source !== 1) val1 = result.val1;
@@ -34,14 +38,30 @@
} }
function swap() { function swap() {
const nextSource: 1 | 2 = activeField === 1 ? 2 : 1; if (!swapState) {
handleInput(nextSource); const manualField: 1 | 2 = activeField === 1 ? 1 : 2;
const manualValue = manualField === 1 ? val1 : val2;
const targetField: 1 | 2 = manualField === 1 ? 2 : 1;
swapState = { originalField: manualField, originalValue: manualValue };
if (targetField === 1) val1 = manualValue;
else val2 = manualValue;
handleInput(targetField, { preserveSwap: true });
return;
}
const manualField = swapState.originalField;
const manualValue = swapState.originalValue;
if (manualField === 1) val1 = manualValue;
else val2 = manualValue;
swapState = null;
handleInput(manualField, { preserveSwap: true });
} }
function clear() { function clear() {
val1 = ''; val1 = '';
val2 = ''; val2 = '';
val3 = ''; val3 = '';
swapState = null;
} }
onMount(() => { onMount(() => {