Skip to content

Commit

Permalink
Add blocking using appId
Browse files Browse the repository at this point in the history
  • Loading branch information
teodorus-nathaniel committed Dec 1, 2023
1 parent 42d923b commit d5dca20
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 21 deletions.
10 changes: 9 additions & 1 deletion src/hooks/useFilterBlockedMessageIds.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { getPostQuery } from '@/services/api/query'
import { getBlockedResourcesQuery } from '@/services/datahub/moderation/query'
import { filterBlockedMessageIds } from '@/utils/chat'
import { getAppId } from '@/utils/env/client'
import { useMemo } from 'react'

export default function useFilterBlockedMessageIds(
Expand All @@ -18,14 +19,21 @@ export default function useFilterBlockedMessageIds(
},
{ enabled: !!chat?.entityId }
)
const appId = getAppId()
const { data: blockedInApp } = getBlockedResourcesQuery.useQuery(
{ appId },
{ enabled: !!appId }
)

return useMemo(() => {
const blockedInChatMessageIds = blockedInChat?.blockedResources.postId ?? []
const blockedInHubMessageIds = blockedInHub?.blockedResources.postId ?? []
const blockedInAppMessageIds = blockedInApp?.blockedResources.postId ?? []

return filterBlockedMessageIds(messageIds, [
...blockedInChatMessageIds,
...blockedInHubMessageIds,
...blockedInAppMessageIds,
])
}, [messageIds, blockedInChat, blockedInHub])
}, [messageIds, blockedInChat, blockedInHub, blockedInApp])
}
48 changes: 32 additions & 16 deletions src/hooks/useIsMessageBlocked.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,25 @@ import { getAppId } from '@/utils/env/client'
import { PostData } from '@subsocial/api/types'
import { useMemo } from 'react'

const cachedBlockedMap = new Map<any, Map<any, Set<string>>>()
function getBlockedSet(ids1: string[] | undefined, ids2: string[] | undefined) {
if (cachedBlockedMap.has(ids1)) {
const cachedMap = cachedBlockedMap.get(ids1)!
if (cachedMap.has(ids2)) {
return cachedMap.get(ids2)!
}
const cachedBlockedMap = new Map<any, Map<any, Map<any, Set<string>>>>()
function getBlockedSet(
ids1: string[] | undefined,
ids2: string[] | undefined,
ids3: string[] | undefined
) {
const cachedData = cachedBlockedMap.get(ids1)?.get(ids2)?.get(ids3)
if (cachedData) {
return cachedData
}

const set = new Set([...(ids1 ?? []), ...(ids2 ?? [])])
const set = new Set([...(ids1 ?? []), ...(ids2 ?? []), ...(ids3 ?? [])])
if (!cachedBlockedMap.has(ids1)) {
cachedBlockedMap.set(ids1, new Map())
}
cachedBlockedMap.get(ids1)!.set(ids2, set)
if (!cachedBlockedMap.get(ids1)!.has(ids2)) {
cachedBlockedMap.get(ids1)!.set(ids2, new Map())
}
cachedBlockedMap.get(ids1)!.get(ids2)!.set(ids3, set)

return set
}
Expand All @@ -43,22 +48,33 @@ export default function useIsMessageBlocked(
{ postEntityId: entityId },
{ enabled: !!entityId }
)
// TODO: use blocked in app
const blockedInApp = appModerationData?.blockedResources
const blockedInHub = hubModerationData?.blockedResources
const blockedInChat = chatModerationData?.blockedResources

const blockedIdsSet = useMemo(() => {
return getBlockedSet(blockedInHub?.postId, blockedInChat?.postId)
}, [blockedInHub, blockedInChat])
return getBlockedSet(
blockedInHub?.postId,
blockedInChat?.postId,
blockedInApp?.postId
)
}, [blockedInHub, blockedInChat, blockedInApp])

const blockedCidsSet = useMemo(() => {
return getBlockedSet(blockedInHub?.cid, blockedInChat?.cid)
}, [blockedInHub, blockedInChat])
return getBlockedSet(
blockedInHub?.cid,
blockedInChat?.cid,
blockedInApp?.cid
)
}, [blockedInHub, blockedInChat, blockedInApp])

const blockedAddressesSet = useMemo(() => {
return getBlockedSet(blockedInHub?.address, blockedInChat?.address)
}, [blockedInHub, blockedInChat])
return getBlockedSet(
blockedInHub?.address,
blockedInChat?.address,
blockedInApp?.address
)
}, [blockedInHub, blockedInChat, blockedInApp])

return isMessageBlocked(message, {
postIds: blockedIdsSet,
Expand Down
18 changes: 14 additions & 4 deletions src/modules/chat/hooks/useSortedChats.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { useConfigContext } from '@/providers/ConfigProvider'
import { getPostQuery } from '@/services/api/query'
import { getBlockedResourcesQuery } from '@/services/datahub/moderation/query'
import { getPostIdsBySpaceIdQuery } from '@/services/subsocial/posts'
import { getAppId } from '@/utils/env/client'
import { useMemo } from 'react'
import useSortChatIdsByConfig from './useSortChatIdsByConfig'
import useSortChatIdsByLatestMessage from './useSortChatIdsByLatestMessage'
Expand All @@ -17,10 +18,18 @@ export default function useSortedChats(
sortBy: SortChatOption = 'activity'
) {
const { channels } = useConfigContext()
const { data: moderationData } = getBlockedResourcesQuery.useQuery({
const { data: moderationDataInHub } = getBlockedResourcesQuery.useQuery({
spaceId: hubId,
})
const blockedChatIds = moderationData?.blockedResources.postId
const appId = getAppId()
const { data: moderationDataInApp } = getBlockedResourcesQuery.useQuery(
{
appId,
},
{ enabled: !!appId }
)
const blockedChatIdsInHub = moderationDataInHub?.blockedResources.postId
const blockedChatIdsInApp = moderationDataInApp?.blockedResources.postId

const { data } = getPostIdsBySpaceIdQuery.useQuery(hubId)
const allChatIds = useMemo(() => {
Expand All @@ -32,10 +41,11 @@ export default function useSortedChats(
(id) => !channels || channels?.has(id)
)
const filteredWithModeration = filteredWithChannels.filter(
(id) => !blockedChatIds?.includes(id)
(id) =>
!blockedChatIdsInHub?.includes(id) && !blockedChatIdsInApp?.includes(id)
)
return filteredWithModeration
}, [allChatIds, channels, blockedChatIds])
}, [allChatIds, channels, blockedChatIdsInHub, blockedChatIdsInApp])

const sortedIdsByActivity = useSortChatIdsByLatestMessage(filteredChatIds)
const sortedIdsBySize = useSortChatIdsBySize(filteredChatIds)
Expand Down

0 comments on commit d5dca20

Please sign in to comment.