Mute/Unmute controls on profiles
This commit is contained in:
parent
a11944ac62
commit
c6c39d2ee4
2 changed files with 71 additions and 0 deletions
|
@ -11,6 +11,7 @@ export interface Relationship {
|
|||
subscription_from: boolean,
|
||||
showing_reblogs: boolean,
|
||||
showing_replies: boolean,
|
||||
muting: boolean,
|
||||
}
|
||||
|
||||
export async function follow(
|
||||
|
@ -70,6 +71,40 @@ export async function unfollow(
|
|||
}
|
||||
}
|
||||
|
||||
export async function mute(
|
||||
authToken: string,
|
||||
accountId: string,
|
||||
): Promise<Relationship> {
|
||||
const url = `${BACKEND_URL}/api/v1/accounts/${accountId}/mute`
|
||||
const response = await http(url, {
|
||||
method: "POST",
|
||||
authToken,
|
||||
})
|
||||
const data = await response.json()
|
||||
if (response.status !== 200) {
|
||||
throw new Error(data.error_description)
|
||||
} else {
|
||||
return data
|
||||
}
|
||||
}
|
||||
|
||||
export async function unmute(
|
||||
authToken: string,
|
||||
accountId: string,
|
||||
): Promise<Relationship> {
|
||||
const url = `${BACKEND_URL}/api/v1/accounts/${accountId}/unmute`
|
||||
const response = await http(url, {
|
||||
method: "POST",
|
||||
authToken,
|
||||
})
|
||||
const data = await response.json()
|
||||
if (response.status !== 200) {
|
||||
throw new Error(data.error_description)
|
||||
} else {
|
||||
return data
|
||||
}
|
||||
}
|
||||
|
||||
interface ProfileListPage {
|
||||
profiles: Profile[];
|
||||
nextPageUrl: string | null;
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
<div class="badge" v-if="isFollowedBy()">Follows you</div>
|
||||
<div class="badge" v-if="isSubscriptionValid()">Subscription</div>
|
||||
<div class="badge" v-if="isSubscriber()">Subscriber</div>
|
||||
<div class="badge" v-if="isMuted()">Muted</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
|
@ -100,6 +101,12 @@
|
|||
<li v-if="canShowReplies()">
|
||||
<button @click="onFollow(undefined, true)">Show replies</button>
|
||||
</li>
|
||||
<li v-if="!isMuted()">
|
||||
<button @click="onMute()">Mute</button>
|
||||
</li>
|
||||
<li v-if="isMuted()">
|
||||
<button @click="onUnmute()">Unmute</button>
|
||||
</li>
|
||||
<li v-if="isAdmin()">
|
||||
<button
|
||||
title="Copy profile ID"
|
||||
|
@ -274,6 +281,8 @@ import {
|
|||
getRelationship,
|
||||
getFollowers,
|
||||
getFollowing,
|
||||
mute,
|
||||
unmute,
|
||||
} from "@/api/relationships"
|
||||
import { getReceivedSubscriptions } from "@/api/subscriptions-common"
|
||||
import {
|
||||
|
@ -445,6 +454,13 @@ function isSubscriber(): boolean {
|
|||
return relationship.subscription_from
|
||||
}
|
||||
|
||||
function isMuted(): boolean {
|
||||
if (!relationship) {
|
||||
return false
|
||||
}
|
||||
return relationship.muting
|
||||
}
|
||||
|
||||
function canFollow(): boolean {
|
||||
if (!relationship) {
|
||||
return false
|
||||
|
@ -506,6 +522,26 @@ async function onFollow(showReposts?: boolean, showReplies?: boolean) {
|
|||
)
|
||||
}
|
||||
|
||||
async function onMute() {
|
||||
if (!currentUser || !profile) {
|
||||
return
|
||||
}
|
||||
relationship = await mute(
|
||||
ensureAuthToken(),
|
||||
profile.id,
|
||||
)
|
||||
}
|
||||
|
||||
async function onUnmute() {
|
||||
if (!currentUser || !profile) {
|
||||
return
|
||||
}
|
||||
relationship = await unmute(
|
||||
ensureAuthToken(),
|
||||
profile.id,
|
||||
)
|
||||
}
|
||||
|
||||
async function onUnfollow() {
|
||||
if (!currentUser || !profile) {
|
||||
return
|
||||
|
|
Loading…
Reference in a new issue