UNPKG

@cobuildlab/8base-chat

Version:

Chat component that uses 8base

283 lines (249 loc) 5.12 kB
import gql from 'graphql-tag'; import { IMAGE_FRAGMENT, MESSAGE_FRAGMENT, USER_FULLNAME_FRAGMENT } from './index'; // -- FRAGMENTS export const CHANNEL_PREVIEW_COMMON_FRAGMENT = gql` fragment ChannelPreviewCommon on Channel { id name public type createdBy { id } messages(last: 1) { items { createdAt createdBy { id } } } } `; export const CHANNEL_PREVIEW_FRAGMENT = gql` fragment ChannelPreview on Channel { ...ChannelPreviewCommon members { count } } ${CHANNEL_PREVIEW_COMMON_FRAGMENT} `; export const DM_PREVIEW_FRAGMENT = gql` fragment DmPreview on Channel { ...ChannelPreviewCommon members { count items { user { ...UserFullname } } } } ${CHANNEL_PREVIEW_COMMON_FRAGMENT} `; export const CHANNEL_MEMBER_FRAGMENT = gql` fragment ChannelMember on ChannelMember { id user { ...UserFullname avatar { ...Image } } } ${USER_FULLNAME_FRAGMENT} ${IMAGE_FRAGMENT} `; export const CHANNEL_IDENTITY_COMMON_FRAGMENT = gql` fragment ChannelIdentityCommon on ChannelMember { id user { id } lastReadTS hasUnreads @client } `; export const CHANNEL_IDENTITY_FRAGMENT = gql` fragment ChannelIdentity on ChannelMember { ...ChannelIdentityCommon channel { ...ChannelPreview } } ${CHANNEL_IDENTITY_COMMON_FRAGMENT} ${CHANNEL_PREVIEW_FRAGMENT} `; export const DM_IDENTITY_FRAGMENT = gql` fragment DmIdentity on ChannelMember { ...ChannelIdentityCommon channel { ...DmPreview } } ${CHANNEL_IDENTITY_COMMON_FRAGMENT} ${DM_PREVIEW_FRAGMENT} `; // -- QUERIES export const CHANNEL_MESSAGES_QUERY = gql` query ChannelMessages( $id: ID! $filter: MessageFilter $orderBy: [MessageOrderBy] $last: Int $before: String ) { channel(id: $id) { id messages(filter: $filter, last: $last, before: $before, orderBy: $orderBy) { count items { ...Message } } } } ${MESSAGE_FRAGMENT} `; export const CHANNEL_MEMBERS_QUERY = gql` query ChannelMembers($id: ID!, $first: Int) { channel(id: $id) { id members(first: $first) { count items { ...ChannelMember } } } } ${CHANNEL_MEMBER_FRAGMENT} `; export const CHANNEL_FORM_QUERY = gql` query ChannelForm($id: ID!) { channel(id: $id) { id name purpose } } `; export const CHANNELS_SEARCH_QUERY = gql` query ChannelsSearch($first: Int!, $searchText: String!, $userId: ID!) { channelsList( first: $first filter: { name: { contains: $searchText } members: { none: { user: { id: { equals: $userId } } } } public: { equals: true } type: { equals: "channel" } } ) { items { id name members(first: 3) { count items { id user { ...UserFullname avatar { ...Image } } } } } } } ${USER_FULLNAME_FRAGMENT} ${IMAGE_FRAGMENT} `; // -- MUTATIONS export const CHANNEL_CREATE_MUTATION = gql` mutation ChannelCreate($data: ChannelCreateInput!) { channelCreate(data: $data) { id name members { items { id user { id } } } } } `; export const CHANNEL_DELETE_MUTATION = gql` mutation ChannelDelete($id: ID!) { channelDelete(data: { id: $id }, force: true) { success } } `; export const FIND_OR_CREATE_DM_MUTATION = gql` mutation FindOrCreateDm($usersIds: [ID!]!) { findOrCreateDM(data: { usersIds: $usersIds }) { id name members { items { id user { id } } } } } `; export const CHANNEL_MEMBER_UPDATE_MUTATION = gql` mutation ChannelMemberUpdate($id: ID!, $lastReadTS: DateTime!) { channelMemberUpdate(data: { id: $id, lastReadTS: $lastReadTS }) { id lastReadTS } } `; export const CHANNEL_MEMBER_DELETE_MUTATION = gql` mutation ChannelMemberDelete($id: ID!) { channelMemberDelete(data: { id: $id }) { success } } `; export const CHANNEL_MEMBER_CREATE_MUTATION = gql` mutation ChannelMemberCreate($data: ChannelMemberCreateInput!) { channelMemberCreate(data: $data) { id } } `; export const CHANNEL_UPDATE_MUTATION = gql` mutation ChannelUpdate($data: ChannelUpdateInput!) { channelUpdate(data: $data) { id } } `; // -- SUBSCRIPTIONS export const USER_CHANNEL_IDENTITIES_SUB = gql` subscription UserChannelIdentitiesSub($userId: ID!) { ChannelMember( filter: { mutation_in: [create] node: { channel: { members: { some: { user: { id: { equals: $userId } } } } } } } ) { node { ...ChannelIdentity } } } ${CHANNEL_IDENTITY_FRAGMENT} `;