add domain blocking (#496)
* add domain blocking fixes another thing from #6 * show "domain blocking" on profile page
This commit is contained in:
parent
47315c7f6d
commit
95665f6d74
|
@ -9,7 +9,7 @@ import {
|
|||
} from '../_database/relationships'
|
||||
import { store } from '../_store/store'
|
||||
|
||||
async function updateAccount (accountId, instanceName, accessToken) {
|
||||
async function _updateAccount (accountId, instanceName, accessToken) {
|
||||
let localPromise = getAccountFromDatabase(instanceName, accountId)
|
||||
let remotePromise = getAccount(instanceName, accessToken, accountId).then(account => {
|
||||
/* no await */ setAccountInDatabase(instanceName, account)
|
||||
|
@ -28,7 +28,7 @@ async function updateAccount (accountId, instanceName, accessToken) {
|
|||
}
|
||||
}
|
||||
|
||||
async function updateRelationship (accountId, instanceName, accessToken) {
|
||||
async function _updateRelationship (accountId, instanceName, accessToken) {
|
||||
let localPromise = getRelationshipFromDatabase(instanceName, accountId)
|
||||
let remotePromise = getRelationship(instanceName, accessToken, accountId).then(relationship => {
|
||||
/* no await */ setRelationshipInDatabase(instanceName, relationship)
|
||||
|
@ -66,7 +66,13 @@ export async function updateProfileAndRelationship (accountId) {
|
|||
let { currentInstance, accessToken } = store.get()
|
||||
|
||||
await Promise.all([
|
||||
updateAccount(accountId, currentInstance, accessToken),
|
||||
updateRelationship(accountId, currentInstance, accessToken)
|
||||
_updateAccount(accountId, currentInstance, accessToken),
|
||||
_updateRelationship(accountId, currentInstance, accessToken)
|
||||
])
|
||||
}
|
||||
|
||||
export async function updateRelationship (accountId) {
|
||||
let { currentInstance, accessToken } = store.get()
|
||||
|
||||
await _updateRelationship(accountId, currentInstance, accessToken)
|
||||
}
|
||||
|
|
26
routes/_actions/setDomainBlocked.js
Normal file
26
routes/_actions/setDomainBlocked.js
Normal file
|
@ -0,0 +1,26 @@
|
|||
import { store } from '../_store/store'
|
||||
import { blockDomain, unblockDomain } from '../_api/blockDomain'
|
||||
import { toast } from '../_utils/toast'
|
||||
import { updateRelationship } from './accounts'
|
||||
|
||||
export async function setDomainBlocked (accountId, domain, block, toastOnSuccess) {
|
||||
let { currentInstance, accessToken } = store.get()
|
||||
try {
|
||||
if (block) {
|
||||
await blockDomain(currentInstance, accessToken, domain)
|
||||
} else {
|
||||
await unblockDomain(currentInstance, accessToken, domain)
|
||||
}
|
||||
await updateRelationship(accountId)
|
||||
if (toastOnSuccess) {
|
||||
if (block) {
|
||||
toast.say(`Hiding ${domain}`)
|
||||
} else {
|
||||
toast.say(`Unhiding ${domain}`)
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
toast.say(`Unable to ${block ? 'hide' : 'unhide'} domain: ` + (e.message || ''))
|
||||
}
|
||||
}
|
12
routes/_api/blockDomain.js
Normal file
12
routes/_api/blockDomain.js
Normal file
|
@ -0,0 +1,12 @@
|
|||
import { post, WRITE_TIMEOUT, paramsString, del } from '../_utils/ajax'
|
||||
import { auth, basename } from './utils'
|
||||
|
||||
export async function blockDomain (instanceName, accessToken, domain) {
|
||||
let url = `${basename(instanceName)}/api/v1/domain_blocks?${paramsString({ domain })}`
|
||||
return post(url, null, auth(accessToken), {timeout: WRITE_TIMEOUT})
|
||||
}
|
||||
|
||||
export async function unblockDomain (instanceName, accessToken, domain) {
|
||||
let url = `${basename(instanceName)}/api/v1/domain_blocks?${paramsString({ domain })}`
|
||||
return del(url, auth(accessToken), {timeout: WRITE_TIMEOUT})
|
||||
}
|
|
@ -19,6 +19,7 @@ import { setAccountBlocked } from '../../../_actions/block'
|
|||
import { setAccountMuted } from '../../../_actions/mute'
|
||||
import { setAccountFollowed } from '../../../_actions/follow'
|
||||
import { setShowReblogs } from '../../../_actions/setShowReblogs'
|
||||
import { setDomainBlocked } from '../../../_actions/setDomainBlocked'
|
||||
|
||||
export default {
|
||||
oncreate,
|
||||
|
@ -66,10 +67,18 @@ export default {
|
|||
? `Hide boosts from @${acct}`
|
||||
: `Show boosts from @${acct}`
|
||||
),
|
||||
domain: ({ acct }) => acct.split('@')[1],
|
||||
blockingDomain: ({ relationship }) => !!relationship.domain_blocking,
|
||||
blockDomainLabel: ({ blockingDomain, domain }) => (
|
||||
blockingDomain
|
||||
? `Unhide ${domain}`
|
||||
: `Hide ${domain}`
|
||||
),
|
||||
items: ({
|
||||
blockLabel, blocking, blockIcon, muteLabel, muteIcon,
|
||||
followLabel, followIcon, following, followRequested,
|
||||
accountId, verifyCredentialsId, acct, isUser, showReblogsLabel
|
||||
accountId, verifyCredentialsId, acct, isUser, showReblogsLabel,
|
||||
domain, blockDomainLabel
|
||||
}) => ([
|
||||
!isUser && {
|
||||
key: 'mention',
|
||||
|
@ -96,6 +105,11 @@ export default {
|
|||
label: showReblogsLabel,
|
||||
icon: '#fa-retweet'
|
||||
},
|
||||
!isUser && domain && {
|
||||
key: 'blockDomain',
|
||||
label: blockDomainLabel,
|
||||
icon: '#fa-ban'
|
||||
},
|
||||
{
|
||||
key: 'copy',
|
||||
label: 'Copy link to account',
|
||||
|
@ -116,10 +130,12 @@ export default {
|
|||
return this.onBlockClicked()
|
||||
case 'mute':
|
||||
return this.onMuteClicked()
|
||||
case 'copy':
|
||||
return this.onCopyClicked()
|
||||
case 'showReblogs':
|
||||
return this.onShowReblogsClicked()
|
||||
case 'blockDomain':
|
||||
return this.onBlockDomainClicked()
|
||||
case 'copy':
|
||||
return this.onCopyClicked()
|
||||
}
|
||||
},
|
||||
async onMentionClicked () {
|
||||
|
@ -151,6 +167,11 @@ export default {
|
|||
this.close()
|
||||
await setShowReblogs(accountId, !showingReblogs, true)
|
||||
},
|
||||
async onBlockDomainClicked () {
|
||||
let { accountId, domain, blockingDomain } = this.get()
|
||||
this.close()
|
||||
await setDomainBlocked(accountId, domain, !blockingDomain, true)
|
||||
},
|
||||
async onCopyClicked () {
|
||||
let { account } = this.get()
|
||||
let { url } = account
|
||||
|
|
|
@ -20,7 +20,14 @@
|
|||
<div class="account-profile-followed-by">
|
||||
{#if relationship && relationship.blocking}
|
||||
<span class="account-profile-followed-by-span">Blocked</span>
|
||||
{:elseif relationship && relationship.followed_by}
|
||||
{/if}
|
||||
{#if relationship && relationship.domain_blocking}
|
||||
<span class="account-profile-followed-by-span">Domain hidden</span>
|
||||
{/if}
|
||||
{#if relationship && relationship.muting}
|
||||
<span class="account-profile-followed-by-span">Muted</span>
|
||||
{/if}
|
||||
{#if relationship && relationship.followed_by}
|
||||
<span class="account-profile-followed-by-span">Follows you</span>
|
||||
{/if}
|
||||
</div>
|
||||
|
@ -31,6 +38,7 @@
|
|||
text-transform: uppercase;
|
||||
color: var(--deemphasized-text-color);
|
||||
font-size: 0.8em;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.account-profile-followed-by-span {
|
||||
background: rgba(30, 30, 30, 0.2);
|
||||
|
|
Loading…
Reference in a new issue