mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-13 20:57:24 +01:00
commit05933be205Author: Kalista Payne <kalista@habitica.com> Date: Tue Nov 25 11:46:16 2025 -0600 fix(layout): contrast commitf36f3c8a21Author: Kalista Payne <kalista@habitica.com> Date: Thu Nov 20 17:29:06 2025 -0600 fix(layout): less ridiculous flow commit74fcbe9494Author: Kalista Payne <kalista@habitica.com> Date: Thu Nov 20 17:19:23 2025 -0600 fix(billing): adjust placement and copy commitc0c1ea4309Author: Kalista Payne <kalista@habitica.com> Date: Thu Nov 20 10:48:45 2025 -0600 fix(groups): fine print about billing
139 lines
4.4 KiB
Vue
139 lines
4.4 KiB
Vue
<template>
|
|
<div
|
|
v-if="groupIsSubscribed && isLeader"
|
|
class="row standard-page"
|
|
>
|
|
<div class="col-12 col-md-6 offset-md-3">
|
|
<table class="table alert alert-info">
|
|
<tr v-if="group.purchased.plan.dateTerminated">
|
|
<td class="alert alert-warning">
|
|
<span class="noninteractive-button btn-danger">{{ $t('canceledGroupPlan') }}</span>
|
|
<i class="glyphicon glyphicon-time">{{ $t('groupPlanCanceled') }}</i>
|
|
<strong>{{ dateTerminated }}</strong>
|
|
</td>
|
|
</tr>
|
|
<tr v-if="!group.purchased.plan.dateTerminated">
|
|
<td>
|
|
<h3>{{ $t('paymentDetails') }}</h3>
|
|
<p v-if="group.purchased.plan.planId">
|
|
{{ $t('groupSubscriptionPrice') }}
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
<tr v-if="group.purchased.plan.extraMonths">
|
|
<td>
|
|
<span class="glyphicon glyphicon-credit-card"></span>
|
|
{{ $t('purchasedGroupPlanPlanExtraMonths', purchasedGroupPlanPlanExtraMonths) }}
|
|
</td>
|
|
</tr>
|
|
<tr
|
|
v-if="group.purchased.plan.consecutive.count"
|
|
>
|
|
<td>
|
|
<span class="glyphicon glyphicon-forward"></span>
|
|
{{ $t('consecutiveSubscription') }}
|
|
<ul class="list-unstyled">
|
|
<li>{{ $t('consecutiveMonths') }} {{ group.purchased.plan.consecutive.count }}</li> <!-- eslint-disable-line max-len -->
|
|
<li>{{ $t('gemCapExtra') }} {{ group.purchased.plan.consecutive.gemCapExtra }}</li>
|
|
<li>{{ $t('mysticHourglasses') }} {{ group.purchased.plan.consecutive.trinkets }}</li>
|
|
</ul>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="col-12 col-md-6 offset-md-3">
|
|
<button
|
|
v-if="group.purchased.plan.dateTerminated"
|
|
class="btn btn-success btn-success"
|
|
@click="upgradeGroup()"
|
|
>
|
|
{{ $t('upgradeToGroup') }}
|
|
</button>
|
|
<div
|
|
v-if="!group.purchased.plan.dateTerminated
|
|
&& group.purchased.plan.paymentMethod === 'Stripe'"
|
|
class="btn btn-primary"
|
|
@click="redirectToStripeEdit({groupId: group.id})"
|
|
>
|
|
{{ $t('subUpdateCard') }}
|
|
</div>
|
|
<div v-if="!group.purchased.plan.dateTerminated">
|
|
<div class="small gray-50 mb-3" v-once>
|
|
{{ $t('groupPlanBillingFYIShort') }}
|
|
</div>
|
|
<div
|
|
class="btn btn-sm btn-danger"
|
|
@click="cancelSubscriptionConfirm({group: group})"
|
|
>
|
|
{{ $t('cancelGroupSub') }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import moment from 'moment';
|
|
import { mapState } from '@/libs/store';
|
|
import paymentsMixin from '@/mixins/payments';
|
|
import { CONSTANTS, getLocalSetting, removeLocalSetting } from '@/libs/userlocalManager';
|
|
|
|
export default {
|
|
mixins: [paymentsMixin],
|
|
props: ['groupId'],
|
|
data () {
|
|
return {
|
|
group: {},
|
|
};
|
|
},
|
|
computed: {
|
|
...mapState({ user: 'user.data' }),
|
|
isLeader () {
|
|
return this.user._id === this.group.leader._id;
|
|
},
|
|
groupIsSubscribed () {
|
|
return this.group.purchased && this.group.purchased.plan
|
|
&& this.group.purchased.plan.customerId;
|
|
},
|
|
dateTerminated () {
|
|
if (!this.user.preferences || !this.user.preferences.dateFormat) {
|
|
return moment(this.group.purchased.plan.dateTerminated);
|
|
}
|
|
|
|
return moment(this.group.purchased.plan.dateTerminated)
|
|
.format(this.user.preferences.dateFormat.toUpperCase());
|
|
},
|
|
purchasedGroupPlanPlanExtraMonths () {
|
|
return {
|
|
months: parseFloat(this.group.purchased.plan.extraMonths).toFixed(2),
|
|
};
|
|
},
|
|
},
|
|
async mounted () {
|
|
await this.loadGroup();
|
|
|
|
let appState = getLocalSetting(CONSTANTS.savedAppStateValues.SAVED_APP_STATE);
|
|
if (appState) {
|
|
appState = JSON.parse(appState);
|
|
if (appState.groupPlanCanceled) {
|
|
removeLocalSetting(CONSTANTS.savedAppStateValues.SAVED_APP_STATE);
|
|
this.$root.$emit('habitica:subscription-canceled', {
|
|
dateTerminated: this.dateTerminated,
|
|
isGroup: true,
|
|
});
|
|
}
|
|
}
|
|
},
|
|
methods: {
|
|
async loadGroup () {
|
|
const group = await this.$store.dispatch('guilds:getGroup', { groupId: this.groupId });
|
|
this.group = { ...group };
|
|
},
|
|
upgradeGroup () {
|
|
this.$store.state.upgradingGroup = this.group;
|
|
this.$router.push('/group-plans');
|
|
},
|
|
},
|
|
};
|
|
</script>
|