import get from 'lodash/get' import map from 'lodash/map' import reject from 'lodash/reject' import Autosuggest from 'src/components/autosuggest/autosuggest.vue' import TabSwitcher from 'src/components/tab_switcher/tab_switcher.jsx' import BlockCard from 'src/components/block_card/block_card.vue' import MuteCard from 'src/components/mute_card/mute_card.vue' import DomainMuteCard from 'src/components/domain_mute_card/domain_mute_card.vue' import SelectableList from 'src/components/selectable_list/selectable_list.vue' import ProgressButton from 'src/components/progress_button/progress_button.vue' import withSubscription from 'src/components/../hocs/with_subscription/with_subscription' import Checkbox from 'src/components/checkbox/checkbox.vue' const BlockList = withSubscription({ fetch: (props, $store) => $store.dispatch('fetchBlocks'), select: (props, $store) => get($store.state.users.currentUser, 'blockIds', []), childPropName: 'items' })(SelectableList) const MuteList = withSubscription({ fetch: (props, $store) => $store.dispatch('fetchMutes'), select: (props, $store) => get($store.state.users.currentUser, 'muteIds', []), childPropName: 'items' })(SelectableList) const DomainMuteList = withSubscription({ fetch: (props, $store) => $store.dispatch('fetchDomainMutes'), select: (props, $store) => get($store.state.users.currentUser, 'domainMutes', []), childPropName: 'items' })(SelectableList) const MutesAndBlocks = { data () { return { activeTab: 'profile' } }, created () { this.$store.dispatch('fetchTokens') this.$store.dispatch('getKnownDomains') }, components: { TabSwitcher, BlockList, MuteList, DomainMuteList, BlockCard, MuteCard, DomainMuteCard, ProgressButton, Autosuggest, Checkbox }, computed: { knownDomains () { return this.$store.state.instance.knownDomains }, user () { return this.$store.state.users.currentUser } }, methods: { importFollows (file) { return this.$store.state.api.backendInteractor.importFollows({ file }) .then((status) => { if (!status) { throw new Error('failed') } }) }, importBlocks (file) { return this.$store.state.api.backendInteractor.importBlocks({ file }) .then((status) => { if (!status) { throw new Error('failed') } }) }, generateExportableUsersContent (users) { // Get addresses return users.map((user) => { // check is it's a local user if (user && user.is_local) { // append the instance address // eslint-disable-next-line no-undef return user.screen_name + '@' + location.hostname } return user.screen_name }).join('\n') }, activateTab (tabName) { this.activeTab = tabName }, filterUnblockedUsers (userIds) { return reject(userIds, (userId) => { const relationship = this.$store.getters.relationship(this.userId) return relationship.blocking || userId === this.user.id }) }, filterUnMutedUsers (userIds) { return reject(userIds, (userId) => { const relationship = this.$store.getters.relationship(this.userId) return relationship.muting || userId === this.user.id }) }, queryUserIds (query) { return this.$store.dispatch('searchUsers', { query }) .then((users) => map(users, 'id')) }, blockUsers (ids) { return this.$store.dispatch('blockUsers', ids) }, unblockUsers (ids) { return this.$store.dispatch('unblockUsers', ids) }, muteUsers (ids) { return this.$store.dispatch('muteUsers', ids) }, unmuteUsers (ids) { return this.$store.dispatch('unmuteUsers', ids) }, filterUnMutedDomains (urls) { return urls.filter(url => !this.user.domainMutes.includes(url)) }, queryKnownDomains (query) { return new Promise((resolve, reject) => { resolve(this.knownDomains.filter(url => url.toLowerCase().includes(query))) }) }, unmuteDomains (domains) { return this.$store.dispatch('unmuteDomains', domains) } } } export default MutesAndBlocks