@cobuildlab/8base-chat
Version:
Chat component that uses 8base
283 lines (249 loc) • 5.12 kB
text/typescript
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}
`;