|
@@ -28,7 +28,7 @@
|
|
|
</div>
|
|
|
<div>
|
|
|
<q-select
|
|
|
- :model-value="localQSelectValue"
|
|
|
+ :model-value="localQSelectModel"
|
|
|
:options="qSelectOptions"
|
|
|
bg-color="white"
|
|
|
dense
|
|
@@ -42,7 +42,7 @@
|
|
|
@filter="filterQSelectOptions"
|
|
|
@blur="handleQSelectBlur"
|
|
|
@keydown.enter="handleQSelectBlur"
|
|
|
- @input-value="localQSelectValue=$event"
|
|
|
+ @input-value="localQSelectModel=$event"
|
|
|
>
|
|
|
<template
|
|
|
v-if="isShowingTooltipAppend&&!isShowingTooltip"
|
|
@@ -118,14 +118,14 @@ export default defineComponent({
|
|
|
],
|
|
|
setup(props, {emit}) {
|
|
|
|
|
|
- let localQSelectValue = ref('')
|
|
|
+ let localQSelectModel = ref('')
|
|
|
let localTooltipText = ref('')
|
|
|
let isShowingTooltip = ref(false)
|
|
|
let isShowingTooltipAppend = ref(false)
|
|
|
let isShowingHelpLocal = ref(false)
|
|
|
let helpExpr = ref('(1+2)*sqrt(2)')
|
|
|
|
|
|
- let evaluatedValue = ref(0)
|
|
|
+ let evaluated = ref(0)
|
|
|
let count_updates = 0
|
|
|
const digits = 1
|
|
|
|
|
@@ -142,17 +142,17 @@ export default defineComponent({
|
|
|
function runEvaluate() {
|
|
|
// Using try{} block to drop silently invalid input
|
|
|
try {
|
|
|
- const tryEvaluate = Number(evaluate(localQSelectValue.value))
|
|
|
- if (!isNaN(tryEvaluate)) evaluatedValue.value = tryEvaluate
|
|
|
+ const tryEvaluate = Number(evaluate(localQSelectModel.value))
|
|
|
+ if (!isNaN(tryEvaluate)) evaluated.value = tryEvaluate
|
|
|
} catch { }
|
|
|
}
|
|
|
|
|
|
- watch(localQSelectValue, () => {
|
|
|
+ watch(localQSelectModel, () => {
|
|
|
runEvaluate()
|
|
|
})
|
|
|
|
|
|
function setTooltipVisibility(){
|
|
|
- if (evaluatedValue.value != Number(localQSelectValue.value)) {
|
|
|
+ if (evaluated.value != Number(localQSelectModel.value)) {
|
|
|
isShowingTooltip.value = true
|
|
|
isShowingTooltipAppend.value = true
|
|
|
} else {
|
|
@@ -167,16 +167,16 @@ export default defineComponent({
|
|
|
})
|
|
|
|
|
|
function setTooltip(){
|
|
|
- localTooltipText.value = evaluatedValue.value.toString()
|
|
|
+ localTooltipText.value = evaluated.value.toString()
|
|
|
setTooltipVisibility()
|
|
|
}
|
|
|
|
|
|
- watch(evaluatedValue, () => {
|
|
|
- emit('update:input-result', evaluatedValue.value)
|
|
|
+ watch(evaluated, () => {
|
|
|
+ emit('update:input-result', evaluated.value)
|
|
|
setTooltip()
|
|
|
// Switch off showing help as soon as we have some input from user
|
|
|
const threshold = 1
|
|
|
- if (count_updates < threshold+1) { // emit only once
|
|
|
+ if (count_updates < threshold+1) { // limit the unbound grow of count_updates
|
|
|
count_updates += 1
|
|
|
if (props.isShowingHelp && count_updates > threshold) {
|
|
|
qSelectOptionsHistory.value.unshift(helpExpr.value)
|
|
@@ -197,10 +197,22 @@ export default defineComponent({
|
|
|
if (qSelectOptions.value.length>0) isShowingHelpLocal.value = false
|
|
|
})
|
|
|
|
|
|
- // eslint-disable-next-line vue/no-setup-props-destructure
|
|
|
- localQSelectValue.value = props.initialExpression // TODO do we need reactivity from props.initialExpression?
|
|
|
+ watch(props, ()=> {
|
|
|
+ // Using try{} block to drop silently invalid input
|
|
|
+ try {
|
|
|
+ // If props.inputResults changed and is not equal to local
|
|
|
+ // expression localQSelectModel.value, then update local expression
|
|
|
+ const tryEvaluate = Number(evaluate(localQSelectModel.value))
|
|
|
+ if ( !isNaN(tryEvaluate)
|
|
|
+ && props.inputResult != tryEvaluate) {
|
|
|
+ localQSelectModel.value = props.inputResult.toString()
|
|
|
+ }
|
|
|
+ } catch { }
|
|
|
+ })
|
|
|
+
|
|
|
+ localQSelectModel.value = props.initialExpression.toString()
|
|
|
runEvaluate()
|
|
|
- localTooltipText.value = localQSelectValue.value
|
|
|
+ localTooltipText.value = localQSelectModel.value
|
|
|
setTooltip()
|
|
|
isShowingTooltip.value = false
|
|
|
|
|
@@ -208,16 +220,11 @@ export default defineComponent({
|
|
|
localTooltipText, isShowingTooltip,
|
|
|
isShowingTooltipAppend, isShowingHelpLocal,
|
|
|
helpExpr,
|
|
|
- qSelectOptions, localQSelectValue,
|
|
|
+ qSelectOptions, localQSelectModel,
|
|
|
|
|
|
handleQSelectBlur(){
|
|
|
isShowingTooltip.value = false
|
|
|
- const expr = localQSelectValue.value
|
|
|
- // Switch off showing help as soon as we have some input from user
|
|
|
- if (props.isShowingHelp) {
|
|
|
- qSelectOptionsHistory.value.unshift(helpExpr.value)
|
|
|
- emit('update:is-showing-help', false)
|
|
|
- }
|
|
|
+ const expr = localQSelectModel.value
|
|
|
if (!qSelectOptionsHistory.value.includes(expr)) qSelectOptionsHistory.value.unshift(expr)
|
|
|
if (qSelectOptionsHistory.value.length > 5) qSelectOptionsHistory.value.pop()
|
|
|
},
|