mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
94 lines
2.5 KiB
Vue
94 lines
2.5 KiB
Vue
<template>
|
|
<div class="input-amount">
|
|
<validation-provider
|
|
v-if="typ === 'TransactionForm'"
|
|
tag="div"
|
|
:rules="rules"
|
|
:name="name"
|
|
v-slot="{ errors, valid, validated, ariaInput, ariaMsg }"
|
|
>
|
|
<b-form-group :label="label" :label-for="labelFor" data-test="input-amount">
|
|
<b-form-input
|
|
v-model="currentValue"
|
|
v-bind="ariaInput"
|
|
:id="labelFor"
|
|
:class="$route.path === '/send' ? 'bg-248' : ''"
|
|
:name="name"
|
|
:placeholder="placeholder"
|
|
type="text"
|
|
:state="validated ? valid : false"
|
|
trim
|
|
v-focus="amountFocused"
|
|
@focus="amountFocused = true"
|
|
@blur="normalizeAmount(true)"
|
|
:disabled="disabled"
|
|
></b-form-input>
|
|
|
|
<b-form-invalid-feedback v-bind="ariaMsg">
|
|
{{ errors[0] }}
|
|
</b-form-invalid-feedback>
|
|
</b-form-group>
|
|
</validation-provider>
|
|
<b-input-group v-else append="GDD" :label="label" :label-for="labelFor">
|
|
<b-form-input
|
|
v-model="currentValue"
|
|
:id="labelFor"
|
|
:name="name"
|
|
:placeholder="placeholder"
|
|
type="text"
|
|
readonly
|
|
trim
|
|
v-focus="amountFocused"
|
|
@focus="amountFocused = true"
|
|
@blur="normalizeAmount(valid)"
|
|
></b-form-input>
|
|
</b-input-group>
|
|
</div>
|
|
</template>
|
|
<script>
|
|
export default {
|
|
name: 'InputAmount',
|
|
props: {
|
|
rules: {
|
|
type: Object,
|
|
default: () => {},
|
|
},
|
|
typ: { type: String, default: 'TransactionForm' },
|
|
name: { type: String, required: true, default: 'Amount' },
|
|
label: { type: String, required: true, default: 'Amount' },
|
|
placeholder: { type: String, required: true, default: 'Amount' },
|
|
value: { type: String, required: true },
|
|
balance: { type: Number, default: 0.0 },
|
|
disabled: { required: false, type: Boolean, default: false },
|
|
},
|
|
data() {
|
|
return {
|
|
currentValue: '',
|
|
amountValue: 0.0,
|
|
amountFocused: false,
|
|
}
|
|
},
|
|
computed: {
|
|
labelFor() {
|
|
return this.name + '-input-field'
|
|
},
|
|
},
|
|
watch: {
|
|
currentValue() {
|
|
this.$emit('input', this.currentValue)
|
|
},
|
|
value() {
|
|
if (this.value !== this.currentValue) this.currentValue = this.value
|
|
},
|
|
},
|
|
methods: {
|
|
normalizeAmount(isValid) {
|
|
this.amountFocused = false
|
|
if (!isValid) return
|
|
this.amountValue = this.currentValue.replace(',', '.')
|
|
this.currentValue = this.$n(this.amountValue, 'ungroupedDecimal')
|
|
},
|
|
},
|
|
}
|
|
</script>
|