new client 2017 09 19 various fixes: subscriptions, streaks, etc (#9047)
* remove excess brace on settings > subscription screen * prevent User icon > Settings > Subscription page from crashing when subscription has termination date * stop subscription modal from pitching subscription to a subscriber * change placeholder text from Username to Login Name for consistency with other login/register forms * fix test for POST-tasks_user -- streak and dateCompleted weren't being tested correctly * prevent tag selector from appearing in edit screen for a challenge's own tasks * restore Restore Streak when editing a user's Dailies (including their own copies of Challenge and Group Plan Dailies) * remove failing streak test
This commit is contained in:
@@ -81,80 +81,87 @@
|
||||
.col-6.offset-3 {{ $t('buyGemsSupportsDevs') }}
|
||||
|
||||
div(v-show='selectedPage === "subscribe"')
|
||||
.row.text-center
|
||||
h2.mx-auto.text-leadin {{ $t('subscriptionBenefitLeadin') }}
|
||||
.row
|
||||
.col
|
||||
+featureBullet("{{ $t('subscriptionBenefit1') }}")
|
||||
+featureBullet("{{ $t('subscriptionBenefit2') }}")
|
||||
+featureBullet("{{ $t('subscriptionBenefit3') }}")
|
||||
.col
|
||||
+featureBullet("{{ $t('subscriptionBenefit4') }}")
|
||||
+featureBullet("{{ $t('subscriptionBenefit5') }}")
|
||||
+featureBullet("{{ $t('subscriptionBenefit6') }}")
|
||||
.card-deck
|
||||
.card.text-center
|
||||
.card-body
|
||||
.subscription-price
|
||||
span.superscript $
|
||||
span 4
|
||||
span.superscript.muted .99
|
||||
.small {{ $t('everyMonth') }}
|
||||
.divider
|
||||
p.benefits(v-markdown='$t("earnGemsMonthly", {cap:25})')
|
||||
.spacer
|
||||
button.btn.btn-primary {{ $t('select') }}
|
||||
.card.text-center
|
||||
.card-body
|
||||
.subscription-price
|
||||
span.superscript $
|
||||
span 14
|
||||
span.superscript.muted .99
|
||||
.small {{ $t('everyXMonths', {interval: 3}) }}
|
||||
.divider
|
||||
p.benefits(v-markdown='$t("earnGemsMonthly", {cap:30})')
|
||||
p.benefits(v-markdown='$t("receiveMysticHourglass")')
|
||||
button.btn.btn-primary {{ $t('select') }}
|
||||
.card.text-center
|
||||
.card-body
|
||||
.subscription-price
|
||||
span.superscript $
|
||||
span 29
|
||||
span.superscript.muted .99
|
||||
.small {{ $t('everyXMonths', {interval: 6}) }}
|
||||
.divider
|
||||
p.benefits(v-markdown='$t("earnGemsMonthly", {cap:35})')
|
||||
p.benefits(v-markdown='$t("receiveMysticHourglasses", {amount:2})')
|
||||
button.btn.btn-primary {{ $t('select') }}
|
||||
.card.text-center
|
||||
.card-body
|
||||
.subscription-price
|
||||
span.superscript $
|
||||
span 47
|
||||
span.superscript.muted .99
|
||||
.small {{ $t('everyYear') }}
|
||||
.divider
|
||||
p.benefits(v-markdown='$t("earnGemsMonthly", {cap:45})')
|
||||
p.benefits(v-markdown='$t("receiveMysticHourglasses", {amount:4})')
|
||||
button.btn.btn-primary {{ $t('select') }}
|
||||
.row.text-center
|
||||
h2.mx-auto.text-payment {{ $t('choosePaymentMethod') }}
|
||||
.row.text-center
|
||||
a.mx-auto {{ $t('haveCouponCode') }}
|
||||
.card-deck
|
||||
.card.text-center.payment-method
|
||||
.card-body(@click='showStripe({})')
|
||||
.mx-auto(v-html='icons.creditCard', style='"height: 56px; width: 159px; margin-top: 1em;"')
|
||||
.card.text-center.payment-method
|
||||
a.card-body.paypal(:href='paypalCheckoutLink', target='_blank')
|
||||
img(src='~assets/images/paypal.png')
|
||||
.card.text-center.payment-method
|
||||
.card-body.amazon(@click="amazonPaymentsInit({type: 'single'})")
|
||||
img(src='~assets/images/amazon-payments.png')
|
||||
.row.text-center
|
||||
.svg-icon.mx-auto(v-html='icons.heart', style='"height: 24px; width: 24px;"')
|
||||
.row.text-center.text-outtro
|
||||
.col-6.offset-3 {{ $t('subscribeSupportsDevs') }}
|
||||
div(v-if='hasSubscription')
|
||||
.row.text-center
|
||||
h2.mx-auto.text-leadin {{ $t('subscriptionAlreadySubscribedLeadIn') }}
|
||||
.row.text-center
|
||||
.col
|
||||
p(v-html='$t("subscriptionAlreadySubscribed1")')
|
||||
div(v-if='!hasSubscription')
|
||||
.row.text-center
|
||||
h2.mx-auto.text-leadin {{ $t('subscriptionBenefitLeadin') }}
|
||||
.row
|
||||
.col
|
||||
+featureBullet("{{ $t('subscriptionBenefit1') }}")
|
||||
+featureBullet("{{ $t('subscriptionBenefit2') }}")
|
||||
+featureBullet("{{ $t('subscriptionBenefit3') }}")
|
||||
.col
|
||||
+featureBullet("{{ $t('subscriptionBenefit4') }}")
|
||||
+featureBullet("{{ $t('subscriptionBenefit5') }}")
|
||||
+featureBullet("{{ $t('subscriptionBenefit6') }}")
|
||||
.card-deck
|
||||
.card.text-center
|
||||
.card-body
|
||||
.subscription-price
|
||||
span.superscript $
|
||||
span 4
|
||||
span.superscript.muted .99
|
||||
.small {{ $t('everyMonth') }}
|
||||
.divider
|
||||
p.benefits(v-markdown='$t("earnGemsMonthly", {cap:25})')
|
||||
.spacer
|
||||
button.btn.btn-primary {{ $t('select') }}
|
||||
.card.text-center
|
||||
.card-body
|
||||
.subscription-price
|
||||
span.superscript $
|
||||
span 14
|
||||
span.superscript.muted .99
|
||||
.small {{ $t('everyXMonths', {interval: 3}) }}
|
||||
.divider
|
||||
p.benefits(v-markdown='$t("earnGemsMonthly", {cap:30})')
|
||||
p.benefits(v-markdown='$t("receiveMysticHourglass")')
|
||||
button.btn.btn-primary {{ $t('select') }}
|
||||
.card.text-center
|
||||
.card-body
|
||||
.subscription-price
|
||||
span.superscript $
|
||||
span 29
|
||||
span.superscript.muted .99
|
||||
.small {{ $t('everyXMonths', {interval: 6}) }}
|
||||
.divider
|
||||
p.benefits(v-markdown='$t("earnGemsMonthly", {cap:35})')
|
||||
p.benefits(v-markdown='$t("receiveMysticHourglasses", {amount:2})')
|
||||
button.btn.btn-primary {{ $t('select') }}
|
||||
.card.text-center
|
||||
.card-body
|
||||
.subscription-price
|
||||
span.superscript $
|
||||
span 47
|
||||
span.superscript.muted .99
|
||||
.small {{ $t('everyYear') }}
|
||||
.divider
|
||||
p.benefits(v-markdown='$t("earnGemsMonthly", {cap:45})')
|
||||
p.benefits(v-markdown='$t("receiveMysticHourglasses", {amount:4})')
|
||||
button.btn.btn-primary {{ $t('select') }}
|
||||
.row.text-center
|
||||
h2.mx-auto.text-payment {{ $t('choosePaymentMethod') }}
|
||||
.row.text-center
|
||||
a.mx-auto {{ $t('haveCouponCode') }}
|
||||
.card-deck
|
||||
.card.text-center.payment-method
|
||||
.card-body(@click='showStripe({})')
|
||||
.mx-auto(v-html='icons.creditCard', style='"height: 56px; width: 159px; margin-top: 1em;"')
|
||||
.card.text-center.payment-method
|
||||
a.card-body.paypal(:href='paypalCheckoutLink', target='_blank')
|
||||
img(src='~assets/images/paypal.png')
|
||||
.card.text-center.payment-method
|
||||
.card-body.amazon(@click="amazonPaymentsInit({type: 'single'})")
|
||||
img(src='~assets/images/amazon-payments.png')
|
||||
.row.text-center
|
||||
.svg-icon.mx-auto(v-html='icons.heart', style='"height: 24px; width: 24px;"')
|
||||
.row.text-center.text-outtro
|
||||
.col-6.offset-3 {{ $t('subscribeSupportsDevs') }}
|
||||
</template>
|
||||
|
||||
<style lang="scss">
|
||||
@@ -340,6 +347,9 @@
|
||||
startingPageOption () {
|
||||
return this.$store.state.gemModalOptions.startingPage;
|
||||
},
|
||||
hasSubscription () {
|
||||
return Boolean(this.user.purchased.plan.customerId);
|
||||
},
|
||||
userReachedGemCap () {
|
||||
return this.user.purchased.plan.customerId && this.user.purchased.plan.gemsBought >= this.user.purchased.plan.consecutive.gemCapExtra + this.planGemLimits.convCap;
|
||||
},
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
tr(v-if='hasCanceledSubscription'): td.alert.alert-warning
|
||||
span.noninteractive-button.btn-danger {{ $t('canceledSubscription') }}
|
||||
i.glyphicon.glyphicon-time
|
||||
| {{ $t('subCanceled') }}
|
||||
| {{ $t('subCanceled') }}
|
||||
strong {{user.purchased.plan.dateTerminated | date}}
|
||||
tr(v-if='!hasCanceledSubscription'): td
|
||||
h4 {{ $t('subscribed') }}
|
||||
@@ -46,7 +46,7 @@
|
||||
| {{ $t('consecutiveSubscription') }}
|
||||
ul.list-unstyled
|
||||
li {{ $t('consecutiveMonths') }} {{user.purchased.plan.consecutive.count + user.purchased.plan.consecutive.offset}}
|
||||
li {{ $t('gemCapExtra') }}} {{user.purchased.plan.consecutive.gemCapExtra}}
|
||||
li {{ $t('gemCapExtra') }} {{user.purchased.plan.consecutive.gemCapExtra}}
|
||||
li {{ $t('mysticHourglasses') }} {{user.purchased.plan.consecutive.trinkets}}
|
||||
|
||||
div(v-if='!hasSubscription || hasCanceledSubscription')
|
||||
@@ -147,7 +147,8 @@ export default {
|
||||
filters: {
|
||||
date (value) {
|
||||
if (!value) return '';
|
||||
return moment(value).formate(this.user.preferences.dateFormat);
|
||||
return moment(value);
|
||||
// return moment(value).format(this.user.preferences.dateFormat); // @TODO make that work (`TypeError: this is undefined`)
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
@@ -156,6 +157,7 @@ export default {
|
||||
let couponString = '';
|
||||
if (this.subscription.coupon) couponString = `&coupon=${this.subscription.coupon}`;
|
||||
return `/paypal/subscribe?_id=${this.user._id}&apiToken=${this.user.apiToken}&sub=${this.subscription.key}${couponString}`;
|
||||
// @TODO don't put API Token in URL parameters
|
||||
},
|
||||
subscriptionBlocksOrdered () {
|
||||
let subscriptions = filter(subscriptionBlocks, (o) => {
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
.strike
|
||||
span OR
|
||||
.form
|
||||
input.form-control(type='text', placeholder='Username', v-model='username', :class='{"input-valid": username.length > 0}')
|
||||
input.form-control(type='text', placeholder='Login Name', v-model='username', :class='{"input-valid": username.length > 0}')
|
||||
input.form-control(type='email', placeholder='Email', v-model='email', :class='{"input-invalid": emailInvalid, "input-valid": emailValid}')
|
||||
input.form-control(type='password', placeholder='Password', v-model='password', :class='{"input-valid": password.length > 0}')
|
||||
input.form-control(type='password', placeholder='Confirm Password', v-model='passwordConfirm', :class='{"input-invalid": passwordConfirmInvalid, "input-valid": passwordConfirmValid}')
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
span.custom-control-indicator
|
||||
span.custom-control-description {{ $t('dayOfWeek') }}
|
||||
|
||||
.option
|
||||
.option(v-if="task.userId")
|
||||
label(v-once) {{ $t('tags') }}
|
||||
.category-wrap(@click="showTagsSelect = !showTagsSelect")
|
||||
span.category-select(v-if='task.tags && task.tags.length === 0') {{$t('none')}}
|
||||
@@ -135,12 +135,18 @@
|
||||
span.custom-control-description(v-once) {{ tag.name }}
|
||||
.row
|
||||
button.btn.btn-primary(@click="showTagsSelect = !showTagsSelect") {{$t('close')}}
|
||||
|
||||
.option(v-if="task.type === 'habit'")
|
||||
label(v-once) {{ $t('resetStreak') }}
|
||||
b-dropdown(:text="$t(task.frequency)")
|
||||
b-dropdown-item(v-for="frequency in ['daily', 'weekly', 'monthly']", :key="frequency", @click="task.frequency = frequency", :class="{active: task.frequency === frequency}")
|
||||
| {{ $t(frequency) }}
|
||||
|
||||
.option(v-if="task.type === 'daily' && task.userId")
|
||||
.form-group
|
||||
label(v-once) {{ $t('restoreStreak') }}
|
||||
input(type="number", v-model="task.streak", min="0", required)
|
||||
|
||||
.option.group-options(v-if='groupId')
|
||||
label(v-once) Assigned To
|
||||
.category-wrap(@click="showAssignedSelect = !showAssignedSelect")
|
||||
|
||||
Reference in New Issue
Block a user