add new input component, time, hour in contributions

This commit is contained in:
ogerly 2022-12-14 14:21:07 +01:00
parent 292829503e
commit 569ca948cc
5 changed files with 111 additions and 3 deletions

View File

@ -42,7 +42,13 @@
:placeholder="$t('contribution.yourActivity')"
:rules="{ required: true, min: 5, max: 255 }"
/>
<input-time
v-model="form.time"
:name="$t('form.time')"
:label="$t('form.time')"
placeholder="1"
:rules="{ required: true, gddCreationTime: [1, validMaxTime] }"
></input-time>
<!-- <validation-provider
:rules="{
min: minlength,
@ -67,7 +73,7 @@
v-model="form.amount"
:name="$t('form.amount')"
:label="$t('form.amount')"
:placeholder="'20'"
placeholder="20"
:rules="{ required: true, gddSendAmount: [20, validMaxGDD] }"
typ="ContributionForm"
></input-amount>
@ -113,6 +119,7 @@
</div>
</template>
<script>
import InputTime from '@/components/Inputs/InputTime.vue'
import InputAmount from '@/components/Inputs/InputAmount.vue'
import InputTextarea from '@/components/Inputs/InputTextarea.vue'
@ -121,6 +128,7 @@ const PATTERN_NON_DIGIT = /\D/g
export default {
name: 'ContributionForm',
components: {
InputTime,
InputAmount,
InputTextarea,
},
@ -136,7 +144,7 @@ export default {
minlength: 5,
maxlength: 255,
maximalDate: new Date(),
form: this.value, // includes 'id'
form: this.value, // includes 'id' and time
}
},
methods: {
@ -154,6 +162,7 @@ export default {
this.form.id = null
this.form.date = ''
this.form.memo = ''
this.form.time = 0
this.form.amount = ''
},
// textForMonth(date, availableAmount) {
@ -180,6 +189,11 @@ export default {
validMaxGDD() {
return Number(this.isThisMonth ? this.maxGddThisMonth : this.maxGddLastMonth)
},
validMaxTime() {
console.log(this.validMaxGDD)
console.log(this.validMaxGDD / 20)
return Number(this.validMaxGDD / 20)
},
},
}
</script>

View File

@ -0,0 +1,73 @@
<template>
<div class="input-time">
<validation-provider
tag="div"
:rules="rules"
:name="name"
v-slot="{ errors, valid, validated, ariaInput, ariaMsg }"
>
<b-form-group :label="label" :label-for="labelFor">
<b-form-input
v-model="currentValue"
v-bind="ariaInput"
:id="labelFor"
:name="name"
:placeholder="placeholder"
type="number"
:state="validated ? valid : false"
></b-form-input>
<b-form-invalid-feedback v-bind="ariaMsg">
{{ errors[0] }}
</b-form-invalid-feedback>
</b-form-group>
</validation-provider>
</div>
</template>
<script>
export default {
name: 'InputTime',
props: {
rules: {
type: Object,
default: () => {},
},
name: { type: String, required: true, default: 'Time' },
label: { type: String, required: true, default: 'Time' },
placeholder: { type: String, required: true, default: 'Time' },
value: { type: Number, required: true, default: 0 },
},
data() {
return {
currentValue: 0,
}
},
computed: {
labelFor() {
return this.name + '-input-field'
},
},
watch: {
currentValue() {
this.$emit('input', this.currentValue)
},
value() {
console.log('value', this.value)
console.log('value !== currentValue', this.value !== this.currentValue)
// this.value = Number(this.value)
if (Number(this.value) !== this.currentValue) this.currentValue = this.value
this.currentValue = Number(this.currentValue)
// this.value = Number(this.value)
console.log('value', typeof(this.value))
console.log('currentValue', typeof(this.currentValue))
},
},
methods: {
// normalizeTime(isValid) {
// this.timeFocused = false
// if (!isValid) return
// // this.timeValue = Number(this.currentValue.replace(',', '.'))
// this.currentValue = this.timeValue
// },
},
}
</script>

View File

@ -151,6 +151,7 @@
"to": "bis",
"to1": "an",
"validation": {
"gddCreationTime": "Das Feld {_field_} muss eine Zahl zwischen {min} und {max} mit höchstens zwei Nachkommastellen sein",
"gddSendAmount": "Das Feld {_field_} muss eine Zahl zwischen {min} und {max} mit höchstens zwei Nachkommastellen sein",
"is-not": "Du kannst dir selbst keine Gradidos überweisen",
"usernmae-regex": "Der Username muss mit einem Buchstaben beginnen, auf den mindestens zwei alpha-numerische Zeichen folgen müssen.",

View File

@ -81,6 +81,7 @@ export default {
id: null,
date: '',
memo: '',
time: 0,
amount: '',
},
updateAmount: '',

View File

@ -54,6 +54,25 @@ export const loadAllRules = (i18nCallback) => {
},
})
extend('gddCreationTime', {
validate(value, { min, max }) {
console.log(value)
console.log(min)
console.log(max)
console.log(typeof(value))
console.log(typeof(min))
console.log(typeof(max))
// value = value.replace(',', '.')
return Number(value) >= min && Number(value) <= max
},
params: ['min', 'max'],
message: (_, values) => {
// values.min = values.min
// values.max = values.max
return i18nCallback.t('form.validation.gddCreationTime', values)
},
})
// eslint-disable-next-line camelcase
extend('is_not', {
// eslint-disable-next-line camelcase