flaschengeist-balance/src/components/BalanceTransferBody.vue

84 lines
2.3 KiB
Vue
Raw Normal View History

<template>
<div class="col-sm-4 col-xs-12">
2023-05-17 11:46:54 +00:00
<q-input
v-model.number="amount"
ref="refAmount"
type="number"
filled
label="Betrag"
step="0.1"
min="0"
suffix="€"
:rules="[check_cent_step]"
/>
</div>
<div class="col-sm-4 col-xs-6">
<UserSelector v-model="receiver" label="Empfänger" />
</div>
<div class="col-sm-4 col-xs-6">
2023-05-09 22:27:41 +00:00
<q-btn style="width: 100%" color="primary" :disable="sendDisabled" label="Senden" @click="sendAmount" />
</div>
</template>
<script lang="ts">
import { computed, defineComponent, PropType, ref } from 'vue';
2023-05-17 11:46:54 +00:00
import { QInput } from 'quasar';
import UserSelector from '@flaschengeist/users/src/components/UserSelector.vue';
import { useBalanceStore } from '../store';
2023-05-17 11:46:54 +00:00
import { check_cent_step } from '../utils';
import { useUserStore } from '@flaschengeist/api';
export default defineComponent({
name: 'BalanceTransferBody',
components: { UserSelector },
props: {
user: {
type: [Object, String] as PropType<FG.User | string>,
required: true,
},
},
emits: {
2023-05-09 22:27:41 +00:00
changeBalance: ({ sender, receiver }: { sender: FG.User; receiver: FG.User }) => sender && receiver,
},
setup(props, { emit }) {
const store = useBalanceStore();
const userStore = useUserStore();
const receiver = ref<FG.User | undefined>(undefined);
const amount = ref<number>(0);
2023-05-17 11:46:54 +00:00
const refAmount = ref<QInput>();
const sender = computed(() =>
(<FG.User>props.user).userid
? <FG.User>props.user
: <FG.User>userStore.users.find((a) => a.userid === <string>props.user)
);
const sendDisabled = computed(() => {
2023-05-17 11:46:54 +00:00
return !(
receiver.value &&
sender.value &&
sender.value.userid != receiver.value.userid &&
amount.value > 0 &&
!refAmount.value?.hasError
);
});
async function sendAmount() {
2023-05-17 11:46:54 +00:00
await refAmount.value?.validate();
if (receiver.value && !refAmount.value?.hasError) {
await store.changeBalance(amount.value, receiver.value, sender.value);
2023-05-09 22:27:41 +00:00
emit('changeBalance', { sender: sender.value, receiver: receiver.value });
}
}
return {
receiver,
sender,
amount,
sendAmount,
sendDisabled,
2023-05-17 11:46:54 +00:00
refAmount,
check_cent_step,
};
},
});
</script>
<style scoped></style>