mute territories in overflow
This commit is contained in:
parent
9ab1d770eb
commit
0999004646
|
@ -125,7 +125,7 @@ async function itemQueryWithMeta ({ me, models, query, orderBy = '' }, ...args)
|
|||
COALESCE("ItemAct"."meMsats", 0) as "meMsats",
|
||||
COALESCE("ItemAct"."meDontLikeMsats", 0) as "meDontLikeMsats", b."itemId" IS NOT NULL AS "meBookmark",
|
||||
"ThreadSubscription"."itemId" IS NOT NULL AS "meSubscription", "ItemForward"."itemId" IS NOT NULL AS "meForward",
|
||||
to_jsonb("Sub".*) as sub
|
||||
to_jsonb("Sub".*) || jsonb_build_object('meMuteSub', "MuteSub"."userId" IS NOT NULL) as sub
|
||||
FROM (
|
||||
${query}
|
||||
) "Item"
|
||||
|
@ -135,6 +135,7 @@ async function itemQueryWithMeta ({ me, models, query, orderBy = '' }, ...args)
|
|||
LEFT JOIN "ThreadSubscription" ON "ThreadSubscription"."itemId" = "Item".id AND "ThreadSubscription"."userId" = ${me.id}
|
||||
LEFT JOIN "ItemForward" ON "ItemForward"."itemId" = "Item".id AND "ItemForward"."userId" = ${me.id}
|
||||
LEFT JOIN "Sub" ON "Sub"."name" = "Item"."subName"
|
||||
LEFT JOIN "MuteSub" ON "Sub"."name" = "MuteSub"."subName" AND "MuteSub"."userId" = ${me.id}
|
||||
LEFT JOIN LATERAL (
|
||||
SELECT "itemId", sum("ItemAct".msats) FILTER (WHERE act = 'FEE' OR act = 'TIP') AS "meMsats",
|
||||
sum("ItemAct".msats) FILTER (WHERE act = 'DONT_LIKE_THIS') AS "meDontLikeMsats"
|
||||
|
@ -1034,17 +1035,14 @@ export default {
|
|||
mine: async (item, args, { me, models }) => {
|
||||
return me?.id === item.userId
|
||||
},
|
||||
root: async (item, args, { models }) => {
|
||||
root: async (item, args, { models, me }) => {
|
||||
if (!item.rootId) {
|
||||
return null
|
||||
}
|
||||
if (item.root) {
|
||||
return item.root
|
||||
}
|
||||
return await models.item.findUnique({
|
||||
where: { id: item.rootId },
|
||||
include: { sub: true }
|
||||
})
|
||||
return await getItem(item, { id: item.rootId }, { me, models })
|
||||
},
|
||||
parent: async (item, args, { models }) => {
|
||||
if (!item.parentId) {
|
||||
|
|
|
@ -86,7 +86,7 @@ export default {
|
|||
LEFT JOIN "MuteSub" ON "Sub".name = "MuteSub"."subName" AND "MuteSub"."userId" = ${me.id}::INTEGER
|
||||
WHERE status <> 'STOPPED'
|
||||
GROUP BY "Sub".name, "MuteSub"."userId"
|
||||
ORDER BY "MuteSub"."userId" NULLS FIRST, "Sub".name ASC
|
||||
ORDER BY "Sub".name ASC
|
||||
`
|
||||
}
|
||||
|
||||
|
@ -191,7 +191,7 @@ export default {
|
|||
return await models.user.findUnique({ where: { id: sub.userId } })
|
||||
},
|
||||
meMuteSub: async (sub, args, { models }) => {
|
||||
return sub.MuteSub?.length > 0
|
||||
return sub.meMuteSub || sub.MuteSub?.length > 0
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ import ActionDropdown from './action-dropdown'
|
|||
import MuteDropdownItem from './mute'
|
||||
import { DropdownItemUpVote } from './upvote'
|
||||
import { useRoot } from './root'
|
||||
import { MuteSubDropdownItem } from './territory-header'
|
||||
|
||||
export default function ItemInfo ({
|
||||
item, full, commentsText = 'comments',
|
||||
|
@ -168,6 +169,11 @@ export default function ItemInfo ({
|
|||
<hr className='dropdown-divider' />
|
||||
<OutlawDropdownItem item={item} />
|
||||
</>}
|
||||
{me && !item.mine && sub && Number(me.id) !== Number(sub.userId) &&
|
||||
<>
|
||||
<hr className='dropdown-divider' />
|
||||
<MuteSubDropdownItem item={item} sub={sub} />
|
||||
</>}
|
||||
{me && !item.mine &&
|
||||
<>
|
||||
<hr className='dropdown-divider' />
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { Badge, Button, CardFooter } from 'react-bootstrap'
|
||||
import { Badge, Button, CardFooter, Dropdown } from 'react-bootstrap'
|
||||
import { AccordianCard } from './accordian-item'
|
||||
import TerritoryPaymentDue, { TerritoryBillingLine } from './territory-payment-due'
|
||||
import Link from 'next/link'
|
||||
|
@ -24,7 +24,7 @@ export default function TerritoryHeader ({ sub }) {
|
|||
cache.modify({
|
||||
id: `Sub:{"name":"${sub.name}"}`,
|
||||
fields: {
|
||||
meMuteSub: () => toggleMuteSub.meMuteSub
|
||||
meMuteSub: () => toggleMuteSub
|
||||
}
|
||||
})
|
||||
}
|
||||
|
@ -90,3 +90,39 @@ export default function TerritoryHeader ({ sub }) {
|
|||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export function MuteSubDropdownItem ({ item, sub }) {
|
||||
const toaster = useToast()
|
||||
|
||||
const [toggleMuteSub] = useMutation(
|
||||
gql`
|
||||
mutation toggleMuteSub($name: String!) {
|
||||
toggleMuteSub(name: $name)
|
||||
}`, {
|
||||
update (cache, { data: { toggleMuteSub } }) {
|
||||
console.log(sub, toggleMuteSub)
|
||||
cache.modify({
|
||||
id: `Sub:{"name":"${sub.name}"}`,
|
||||
fields: {
|
||||
meMuteSub: () => toggleMuteSub
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
return (
|
||||
<Dropdown.Item
|
||||
onClick={async () => {
|
||||
try {
|
||||
await toggleMuteSub({ variables: { name: sub.name } })
|
||||
} catch {
|
||||
toaster.danger(`failed to ${sub.meMuteSub ? 'join' : 'mute'} territory`)
|
||||
return
|
||||
}
|
||||
toaster.success(`${sub.meMuteSub ? 'joined' : 'muted'} territory`)
|
||||
}}
|
||||
>{sub.meMuteSub ? 'unmute' : 'mute'} ~{sub.name}
|
||||
</Dropdown.Item>
|
||||
)
|
||||
}
|
||||
|
|
|
@ -44,6 +44,12 @@ export const COMMENTS_ITEM_EXT_FIELDS = gql`
|
|||
bounty
|
||||
bountyPaidTo
|
||||
subName
|
||||
sub {
|
||||
name
|
||||
userId
|
||||
moderated
|
||||
meMuteSub
|
||||
}
|
||||
user {
|
||||
name
|
||||
optional {
|
||||
|
|
|
@ -21,6 +21,7 @@ export const ITEM_FIELDS = gql`
|
|||
name
|
||||
userId
|
||||
moderated
|
||||
meMuteSub
|
||||
}
|
||||
otsHash
|
||||
position
|
||||
|
@ -78,6 +79,7 @@ export const ITEM_FULL_FIELDS = gql`
|
|||
name
|
||||
userId
|
||||
moderated
|
||||
meMuteSub
|
||||
}
|
||||
}
|
||||
forwards {
|
||||
|
|
Loading…
Reference in New Issue