mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
162 lines
4.8 KiB
Vue
162 lines
4.8 KiB
Vue
<template>
|
|
<div class="show-transaction-link-informations">
|
|
<b-container class="mt-4">
|
|
<transaction-link-item :type="itemType">
|
|
<template #LOGGED_OUT>
|
|
<redeem-logged-out :linkData="linkData" :isContributionLink="isContributionLink" />
|
|
</template>
|
|
|
|
<template #SELF_CREATOR>
|
|
<redeem-self-creator :linkData="linkData" />
|
|
</template>
|
|
|
|
<template #VALID>
|
|
<redeem-valid
|
|
:linkData="linkData"
|
|
:isContributionLink="isContributionLink"
|
|
@mutation-link="mutationLink"
|
|
/>
|
|
</template>
|
|
|
|
<template #TEXT>
|
|
<redeemed-text-box :text="redeemedBoxText" />
|
|
</template>
|
|
</transaction-link-item>
|
|
</b-container>
|
|
</div>
|
|
</template>
|
|
<script>
|
|
import TransactionLinkItem from '@/components/TransactionLinkItem'
|
|
import RedeemLoggedOut from '@/components/LinkInformations/RedeemLoggedOut'
|
|
import RedeemSelfCreator from '@/components/LinkInformations/RedeemSelfCreator'
|
|
import RedeemValid from '@/components/LinkInformations/RedeemValid'
|
|
import RedeemedTextBox from '@/components/LinkInformations/RedeemedTextBox'
|
|
import { queryTransactionLink } from '@/graphql/queries'
|
|
import { redeemTransactionLink } from '@/graphql/mutations'
|
|
|
|
export default {
|
|
name: 'TransactionLink',
|
|
components: {
|
|
TransactionLinkItem,
|
|
RedeemLoggedOut,
|
|
RedeemSelfCreator,
|
|
RedeemValid,
|
|
RedeemedTextBox,
|
|
},
|
|
data() {
|
|
return {
|
|
img: '/img/brand/green.png',
|
|
linkData: {
|
|
__typename: 'TransactionLink',
|
|
amount: '123.45',
|
|
memo: 'memo',
|
|
user: {
|
|
firstName: 'Bibi',
|
|
},
|
|
deletedAt: null,
|
|
},
|
|
}
|
|
},
|
|
methods: {
|
|
setTransactionLinkInformation() {
|
|
this.$apollo
|
|
.query({
|
|
fetchPolicy: 'no-cache',
|
|
query: queryTransactionLink,
|
|
variables: {
|
|
code: this.$route.params.code,
|
|
},
|
|
})
|
|
.then((result) => {
|
|
this.linkData = result.data.queryTransactionLink
|
|
if (this.linkData.__typename === 'ContributionLink' && this.$store.state.token) {
|
|
this.mutationLink(this.linkData.amount)
|
|
}
|
|
})
|
|
.catch((err) => {
|
|
this.toastError(err.message)
|
|
})
|
|
},
|
|
mutationLink(amount) {
|
|
this.$apollo
|
|
.mutate({
|
|
mutation: redeemTransactionLink,
|
|
variables: {
|
|
code: this.$route.params.code,
|
|
},
|
|
})
|
|
.then(() => {
|
|
this.toastSuccess(
|
|
this.$t('gdd_per_link.redeemed', {
|
|
n: amount,
|
|
}),
|
|
)
|
|
this.$router.push('/overview')
|
|
})
|
|
.catch((err) => {
|
|
this.toastError(err.message)
|
|
this.$router.push('/overview')
|
|
})
|
|
},
|
|
},
|
|
computed: {
|
|
isContributionLink() {
|
|
return this.$route.params.code.search(/^CL-/) === 0
|
|
},
|
|
tokenExpiresInSeconds() {
|
|
const remainingSecs = Math.floor(
|
|
(new Date(this.$store.state.tokenTime * 1000).getTime() - new Date().getTime()) / 1000,
|
|
)
|
|
return remainingSecs <= 0 ? 0 : remainingSecs
|
|
},
|
|
itemType() {
|
|
// link is deleted: at, from
|
|
if (this.linkData.deletedAt) {
|
|
// eslint-disable-next-line vue/no-side-effects-in-computed-properties
|
|
this.redeemedBoxText = this.$t('gdd_per_link.link-deleted', {
|
|
date: this.$d(new Date(this.linkData.deletedAt), 'long'),
|
|
})
|
|
return `TEXT`
|
|
}
|
|
// link ist abgelaufen, nicht gelöscht
|
|
if (new Date(this.linkData.validUntil) < new Date()) {
|
|
// eslint-disable-next-line vue/no-side-effects-in-computed-properties
|
|
this.redeemedBoxText = this.$t('gdd_per_link.link-expired', {
|
|
date: this.$d(new Date(this.linkData.validUntil), 'long'),
|
|
})
|
|
return `TEXT`
|
|
}
|
|
|
|
// der link wurde eingelöst, nicht gelöscht
|
|
if (this.linkData.redeemedAt) {
|
|
// eslint-disable-next-line vue/no-side-effects-in-computed-properties
|
|
this.redeemedBoxText = this.$t('gdd_per_link.redeemed-at', {
|
|
date: this.$d(new Date(this.linkData.redeemedAt), 'long'),
|
|
})
|
|
return `TEXT`
|
|
}
|
|
|
|
if (this.$store.state.token && this.$store.state.tokenTime) {
|
|
if (this.tokenExpiresInSeconds < 5) return `LOGGED_OUT`
|
|
|
|
// logged in, nicht berechtigt einzulösen, eigener link
|
|
if (this.linkData.user && this.$store.state.email === this.linkData.user.email) {
|
|
return `SELF_CREATOR`
|
|
}
|
|
|
|
// logged in und berechtigt einzulösen
|
|
if (!this.linkData.redeemedAt && !this.linkData.deletedAt) {
|
|
return `VALID`
|
|
}
|
|
}
|
|
|
|
return `LOGGED_OUT`
|
|
},
|
|
},
|
|
created() {
|
|
this.setTransactionLinkInformation()
|
|
this.$emit('set-mobile-start', false)
|
|
},
|
|
}
|
|
</script>
|