Resolve "Channel: clicking auf "Subscribe" when not logged in still updates the subscriber count"
This commit is contained in:
parent
ec77040e87
commit
9b3f90a7ba
|
@ -0,0 +1 @@
|
||||||
|
Added modal to prompt users to log in when subscribing to channels (#1296)
|
|
@ -164,6 +164,7 @@ def discard_unused_icons(rule):
|
||||||
".wikipedia",
|
".wikipedia",
|
||||||
".wrench",
|
".wrench",
|
||||||
".x",
|
".x",
|
||||||
|
".key",
|
||||||
]
|
]
|
||||||
if ":before" not in rule["lines"][0]:
|
if ":before" not in rule["lines"][0]:
|
||||||
return False
|
return False
|
||||||
|
|
|
@ -1,16 +1,33 @@
|
||||||
<template>
|
<template>
|
||||||
<button @click.stop="toggle" :class="['ui', 'pink', {'inverted': isSubscribed}, {'favorited': isSubscribed}, 'icon', 'labeled', 'button']">
|
<button v-if="$store.state.auth.authenticated" @click.stop="toggle" :class="['ui', 'pink', {'inverted': isSubscribed}, {'favorited': isSubscribed}, 'icon', 'labeled', 'button']">
|
||||||
<i class="heart icon"></i>
|
<i class="heart icon"></i>
|
||||||
<translate v-if="isSubscribed" translate-context="Content/Track/Button.Message">Unsubscribe</translate>
|
<translate v-if="isSubscribed" translate-context="Content/Track/Button.Message">Unsubscribe</translate>
|
||||||
<translate v-else translate-context="Content/Track/*/Verb">Subscribe</translate>
|
<translate v-else translate-context="Content/Track/*/Verb">Subscribe</translate>
|
||||||
</button>
|
</button>
|
||||||
|
<button @click="$refs.loginModal.show = true" v-else :class="['ui', 'pink', 'icon', 'labeled', 'button']">
|
||||||
|
<i class="heart icon"></i>
|
||||||
|
<translate translate-context="Content/Track/*/Verb">Subscribe</translate>
|
||||||
|
<login-modal
|
||||||
|
ref="loginModal"
|
||||||
|
class="small"
|
||||||
|
:nextRoute='this.$route.fullPath'
|
||||||
|
:message='this.message.authMessage'
|
||||||
|
:cover='this.channel.artist.cover'
|
||||||
|
@created="$refs.loginModal.show = false;">
|
||||||
|
</login-modal>
|
||||||
|
</button>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import LoginModal from '@/components/common/LoginModal'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
props: {
|
props: {
|
||||||
channel: {type: Object},
|
channel: {type: Object},
|
||||||
},
|
},
|
||||||
|
components: {
|
||||||
|
LoginModal
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
title () {
|
title () {
|
||||||
if (this.isSubscribed) {
|
if (this.isSubscribed) {
|
||||||
|
@ -21,7 +38,12 @@ export default {
|
||||||
},
|
},
|
||||||
isSubscribed () {
|
isSubscribed () {
|
||||||
return this.$store.getters['channels/isSubscribed'](this.channel.uuid)
|
return this.$store.getters['channels/isSubscribed'](this.channel.uuid)
|
||||||
}
|
},
|
||||||
|
message () {
|
||||||
|
return {
|
||||||
|
authMessage: this.$pgettext('Popup/Message/Paragraph', 'You need to be logged in to subscribe to this channel')
|
||||||
|
}
|
||||||
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
toggle () {
|
toggle () {
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
<template>
|
||||||
|
<modal :show.sync="show">
|
||||||
|
<h4 class="header">{{ labels.header }}</h4>
|
||||||
|
<div v-if="cover" class="image content">
|
||||||
|
<div class="ui medium image">
|
||||||
|
<img :src="cover.urls.medium_square_crop">
|
||||||
|
</div>
|
||||||
|
<div class="description">
|
||||||
|
<div class="ui header">
|
||||||
|
{{ labels.description }}
|
||||||
|
</div>
|
||||||
|
<p>
|
||||||
|
{{ message }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-else class="content">
|
||||||
|
<div class="ui centered header">
|
||||||
|
{{ labels.description }}
|
||||||
|
</div>
|
||||||
|
<p style="text-align: center;">
|
||||||
|
{{ message }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="actions">
|
||||||
|
<router-link :to="{path: '/login', query: { next: nextRoute }}" class="ui labeled icon button"><i class="key icon"></i>
|
||||||
|
{{ labels.login }}
|
||||||
|
</router-link>
|
||||||
|
<router-link v-if="$store.state.instance.settings.users.registration_enabled.value" :to="{path: '/signup'}" class="ui labeled icon button"><i class="user icon"></i>
|
||||||
|
{{ labels.signup }}
|
||||||
|
</router-link>
|
||||||
|
</div>
|
||||||
|
</modal>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Modal from '@/components/semantic/Modal'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
nextRoute: {type: String},
|
||||||
|
message: {type: String},
|
||||||
|
cover: {type: Object},
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
Modal,
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
show: false,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
labels() {
|
||||||
|
return {
|
||||||
|
header: this.$pgettext('Popup/Title/Noun', "Unauthenticated"),
|
||||||
|
login: this.$pgettext('*/*/Button.Label/Verb', "Log in"),
|
||||||
|
signup: this.$pgettext('*/*/Button.Label/Verb', "Sign up"),
|
||||||
|
description: this.$pgettext('Popup/*/Paragraph', "You don't have access!"),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
Loading…
Reference in New Issue