Fix calculator swap button
This commit is contained in:
@@ -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(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user