Changeset View
Changeset View
Standalone View
Standalone View
lib/types/thread-types.js
Show All 22 Lines | import { | ||||
type ThreadPermissionsInfo, | type ThreadPermissionsInfo, | ||||
type ThreadRolePermissionsBlob, | type ThreadRolePermissionsBlob, | ||||
threadPermissionsInfoValidator, | threadPermissionsInfoValidator, | ||||
threadRolePermissionsBlobValidator, | threadRolePermissionsBlobValidator, | ||||
} from './thread-permission-types.js'; | } from './thread-permission-types.js'; | ||||
import { type ThreadType, threadTypeValidator } from './thread-types-enum.js'; | import { type ThreadType, threadTypeValidator } from './thread-types-enum.js'; | ||||
import type { ClientUpdateInfo, ServerUpdateInfo } from './update-types.js'; | import type { ClientUpdateInfo, ServerUpdateInfo } from './update-types.js'; | ||||
import type { UserInfo, UserInfos } from './user-types.js'; | import type { UserInfo, UserInfos } from './user-types.js'; | ||||
import { type ThreadEntity } from '../utils/entity-text.js'; | import { | ||||
type ThreadEntity, | |||||
threadEntityValidator, | |||||
} from '../utils/entity-text.js'; | |||||
import { tID, tShape } from '../utils/validation-utils.js'; | import { tID, tShape } from '../utils/validation-utils.js'; | ||||
export type MemberInfo = { | export type MemberInfo = { | ||||
+id: string, | +id: string, | ||||
+role: ?string, | +role: ?string, | ||||
+permissions: ThreadPermissionsInfo, | +permissions: ThreadPermissionsInfo, | ||||
+isSender: boolean, | +isSender: boolean, | ||||
}; | }; | ||||
const memberInfoValidator = tShape<MemberInfo>({ | const memberInfoValidator = tShape<MemberInfo>({ | ||||
id: t.String, | id: t.String, | ||||
role: t.maybe(tID), | role: t.maybe(tID), | ||||
permissions: threadPermissionsInfoValidator, | permissions: threadPermissionsInfoValidator, | ||||
isSender: t.Boolean, | isSender: t.Boolean, | ||||
}); | }); | ||||
export type RelativeMemberInfo = { | export type RelativeMemberInfo = { | ||||
...MemberInfo, | ...MemberInfo, | ||||
+username: ?string, | +username: ?string, | ||||
+isViewer: boolean, | +isViewer: boolean, | ||||
}; | }; | ||||
const relativeMemberInfoValidator = tShape<RelativeMemberInfo>({ | |||||
...memberInfoValidator.meta.props, | |||||
username: t.maybe(t.String), | |||||
isViewer: t.Boolean, | |||||
}); | |||||
export type RoleInfo = { | export type RoleInfo = { | ||||
+id: string, | +id: string, | ||||
+name: string, | +name: string, | ||||
+permissions: ThreadRolePermissionsBlob, | +permissions: ThreadRolePermissionsBlob, | ||||
+isDefault: boolean, | +isDefault: boolean, | ||||
}; | }; | ||||
const roleInfoValidator = tShape<RoleInfo>({ | const roleInfoValidator = tShape<RoleInfo>({ | ||||
▲ Show 20 Lines • Show All 68 Lines • ▼ Show 20 Lines | export type ThreadInfo = { | ||||
+community: ?string, | +community: ?string, | ||||
+members: $ReadOnlyArray<RelativeMemberInfo>, | +members: $ReadOnlyArray<RelativeMemberInfo>, | ||||
+roles: { +[id: string]: RoleInfo }, | +roles: { +[id: string]: RoleInfo }, | ||||
+currentUser: ThreadCurrentUserInfo, | +currentUser: ThreadCurrentUserInfo, | ||||
+sourceMessageID?: string, | +sourceMessageID?: string, | ||||
+repliesCount: number, | +repliesCount: number, | ||||
+pinnedCount?: number, | +pinnedCount?: number, | ||||
}; | }; | ||||
export const threadInfoValidator: TInterface<ThreadInfo> = tShape<ThreadInfo>({ | |||||
id: tID, | |||||
type: threadTypeValidator, | |||||
name: t.maybe(t.String), | |||||
uiName: t.union([t.String, threadEntityValidator]), | |||||
avatar: t.maybe(clientAvatarValidator), | |||||
description: t.maybe(t.String), | |||||
color: t.String, | |||||
creationTime: t.Number, | |||||
parentThreadID: t.maybe(tID), | |||||
containingThreadID: t.maybe(tID), | |||||
community: t.maybe(tID), | |||||
members: t.list(relativeMemberInfoValidator), | |||||
roles: t.dict(tID, roleInfoValidator), | |||||
currentUser: threadCurrentUserInfoValidator, | |||||
sourceMessageID: t.maybe(tID), | |||||
repliesCount: t.Number, | |||||
pinnedCount: t.maybe(t.Number), | |||||
}); | |||||
export type ResolvedThreadInfo = { | export type ResolvedThreadInfo = { | ||||
+id: string, | +id: string, | ||||
+type: ThreadType, | +type: ThreadType, | ||||
+name: ?string, | +name: ?string, | ||||
+uiName: string, | +uiName: string, | ||||
+avatar?: ?ClientAvatar, | +avatar?: ?ClientAvatar, | ||||
+description: ?string, | +description: ?string, | ||||
Show All 36 Lines | export type ServerThreadInfo = { | ||||
+sourceMessageID?: string, | +sourceMessageID?: string, | ||||
+repliesCount: number, | +repliesCount: number, | ||||
+pinnedCount: number, | +pinnedCount: number, | ||||
}; | }; | ||||
export type ThreadStore = { | export type ThreadStore = { | ||||
+threadInfos: { +[id: string]: RawThreadInfo }, | +threadInfos: { +[id: string]: RawThreadInfo }, | ||||
}; | }; | ||||
export const threadStoreValidator: TInterface<ThreadStore> = | |||||
tShape<ThreadStore>({ | |||||
threadInfos: t.dict(tID, rawThreadInfoValidator), | |||||
}); | |||||
export type RemoveThreadOperation = { | export type RemoveThreadOperation = { | ||||
+type: 'remove', | +type: 'remove', | ||||
+payload: { +ids: $ReadOnlyArray<string> }, | +payload: { +ids: $ReadOnlyArray<string> }, | ||||
}; | }; | ||||
export type RemoveAllThreadsOperation = { | export type RemoveAllThreadsOperation = { | ||||
+type: 'remove_all', | +type: 'remove_all', | ||||
▲ Show 20 Lines • Show All 216 Lines • Show Last 20 Lines |