diff options
author | Frudrax Cheng <i@cynosura.one> | 2024-06-19 14:41:03 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-19 14:41:03 +0800 |
commit | bdc1ea897fa4e1a2bb0fbd405564e98aca36f973 (patch) | |
tree | a412067a09e0c34d7d83496842ebd0e0e57f4b9d /src/state/queries/threadgate.ts | |
parent | a6d49062e6d50b7c9a6c0d50c38fcfeb8f63e46f (diff) | |
parent | 8788708bd229ee8a7049285b2e520cc657b41c00 (diff) | |
download | voidsky-bdc1ea897fa4e1a2bb0fbd405564e98aca36f973.tar.zst |
Merge branch 'bluesky-social:main' into zh
Diffstat (limited to 'src/state/queries/threadgate.ts')
-rw-r--r-- | src/state/queries/threadgate.ts | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/state/queries/threadgate.ts b/src/state/queries/threadgate.ts index 489117582..67c6f8c08 100644 --- a/src/state/queries/threadgate.ts +++ b/src/state/queries/threadgate.ts @@ -1,5 +1,38 @@ +import {AppBskyFeedDefs, AppBskyFeedThreadgate} from '@atproto/api' + export type ThreadgateSetting = | {type: 'nobody'} | {type: 'mention'} | {type: 'following'} | {type: 'list'; list: string} + +export function threadgateViewToSettings( + threadgate: AppBskyFeedDefs.ThreadgateView | undefined, +): ThreadgateSetting[] { + const record = + threadgate && + AppBskyFeedThreadgate.isRecord(threadgate.record) && + AppBskyFeedThreadgate.validateRecord(threadgate.record).success + ? threadgate.record + : null + if (!record) { + return [] + } + if (!record.allow?.length) { + return [{type: 'nobody'}] + } + return record.allow + .map(allow => { + if (allow.$type === 'app.bsky.feed.threadgate#mentionRule') { + return {type: 'mention'} + } + if (allow.$type === 'app.bsky.feed.threadgate#followingRule') { + return {type: 'following'} + } + if (allow.$type === 'app.bsky.feed.threadgate#listRule') { + return {type: 'list', list: allow.list} + } + return undefined + }) + .filter(Boolean) as ThreadgateSetting[] +} |