89 lines
2.1 KiB
JavaScript
89 lines
2.1 KiB
JavaScript
import { mapState } from 'pinia'
|
|
|
|
import Select from 'src/components/select/select.vue'
|
|
import ConfirmModal from './confirm_modal.vue'
|
|
|
|
import { useSyncConfigStore } from 'src/stores/sync_config.js'
|
|
|
|
export default {
|
|
props: ['type', 'user', 'status'],
|
|
emits: ['hide', 'show', 'muted'],
|
|
data: () => ({
|
|
showing: false,
|
|
}),
|
|
components: {
|
|
ConfirmModal,
|
|
Select,
|
|
},
|
|
computed: {
|
|
domain() {
|
|
return this.user.fqn.split('@')[1]
|
|
},
|
|
keypath() {
|
|
if (this.type === 'domain') {
|
|
return 'user_card.mute_domain_confirm'
|
|
} else if (this.type === 'conversation') {
|
|
return 'user_card.mute_conversation_confirm'
|
|
}
|
|
},
|
|
conversationIsMuted() {
|
|
return this.status.conversation_muted
|
|
},
|
|
domainIsMuted() {
|
|
return new Set(this.$store.state.users.currentUser.domainMutes).has(
|
|
this.domain,
|
|
)
|
|
},
|
|
shouldConfirm() {
|
|
switch (this.type) {
|
|
case 'domain': {
|
|
return this.mergedConfig.modalOnMuteDomain
|
|
}
|
|
default: {
|
|
// conversation
|
|
return this.mergedConfig.modalOnMuteConversation
|
|
}
|
|
}
|
|
},
|
|
...mapState(useSyncConfigStore, ['mergedConfig']),
|
|
},
|
|
methods: {
|
|
optionallyPrompt() {
|
|
if (this.shouldConfirm) {
|
|
this.show()
|
|
} else {
|
|
this.doMute()
|
|
}
|
|
},
|
|
show() {
|
|
this.showing = true
|
|
this.$emit('show')
|
|
},
|
|
hide() {
|
|
this.showing = false
|
|
this.$emit('hide')
|
|
},
|
|
doMute() {
|
|
switch (this.type) {
|
|
case 'domain': {
|
|
if (!this.domainIsMuted) {
|
|
this.$store.dispatch('muteDomain', this.domain)
|
|
} else {
|
|
this.$store.dispatch('unmuteDomain', this.domain)
|
|
}
|
|
break
|
|
}
|
|
case 'conversation': {
|
|
if (!this.conversationIsMuted) {
|
|
this.$store.dispatch('muteConversation', { id: this.status.id })
|
|
} else {
|
|
this.$store.dispatch('unmuteConversation', { id: this.status.id })
|
|
}
|
|
break
|
|
}
|
|
}
|
|
this.$emit('muted')
|
|
this.hide()
|
|
},
|
|
},
|
|
}
|