client/gql.ts (270 lines of code) (raw):
import { gql } from "@apollo/client";
const pinboardReturnFields = `
composerId
id
status
title
headline
trashed
isNotFound
path
`;
export const gqlListPinboards = gql`
query MyQuery($searchText: String!) {
listPinboards(searchText: $searchText) { ${pinboardReturnFields} }
}
`;
export const gqlGetPinboardByComposerId = gql`
query MyQuery($composerId: String!) {
getPinboardByComposerId(composerId: $composerId) { ${pinboardReturnFields} }
}
`;
export const gqlGetPinboardsByIds = gql`
query MyQuery($ids: [String!]!) {
getPinboardsByIds(ids: $ids) { ${pinboardReturnFields} }
}
`;
export const gqlGetPinboardsByPaths = gql`
query MyQuery($paths: [String!]!) {
getPinboardsByPaths(paths: $paths) { ${pinboardReturnFields} }
}
`;
export const gqlGetGroupPinboardIds = gql`
query MyQuery {
getGroupPinboardIds {
pinboardId
unclaimedCount
yourClaimedCount
othersClaimedCount
notClaimableCount
latestGroupMentionItemId
hasUnread
}
}
`;
export const gqlGetItemCounts = gql`
query MyQuery($pinboardIds: [String!]!) {
getItemCounts(pinboardIds: $pinboardIds) {
pinboardId
totalCount
unreadCount
totalCropCount
fiveByFourCount
fourByFiveCount
}
}
`;
const itemReturnFields = `
id
type
userEmail
timestamp
pinboardId
message
payload
mentions {
label
isMe
}
groupMentions {
label
isMe
}
claimedByEmail
claimable
relatedItemId
editHistory
deletedAt
`;
// TODO: consider updating the resolver (cdk/stack.ts) to use a Query with a secondary index (if performance degrades when we have lots of items)
export const gqlGetInitialItems = gql`
query MyQuery($pinboardId: String!, $maybeAspectRatioFilter: String) {
listItems(pinboardId: $pinboardId, maybeAspectRatioFilter: $maybeAspectRatioFilter) {
${itemReturnFields}
}
}
`;
export const gqlCreateItem = gql`
mutation SendMessage($input: CreateItemInput!) {
createItem(input: $input) {
# including fields here makes them accessible in our subscription data
${itemReturnFields}
}
}
`;
export const gqlEditItem = gql`
mutation EditItem($itemId: String!, $input: EditItemInput!) {
editItem(itemId: $itemId, input: $input) {
# including fields here makes them accessible in our subscription data
${itemReturnFields}
}
}
`;
export const gqlDeleteItem = gql`
mutation DeleteItem($itemId: String!) {
deleteItem(itemId: $itemId) {
# including fields here makes them accessible in our subscription data
${itemReturnFields}
}
}
`;
export const gqlOnMutateItem = gql`
subscription OnMutateItem {
onMutateItem { ${itemReturnFields} }
}
`;
const userReturnFields = `
email
firstName
lastName
avatarUrl
`;
const myUserReturnFields = `${userReturnFields}
hasWebPushSubscription
manuallyOpenedPinboardIds
hasEverUsedTour
featureFlags
`;
export const gqlSearchMentionableUsers = (prefix: string) => gql`
query MyQuery {
searchMentionableUsers(prefix: "${prefix}") {
users {
${userReturnFields}
isMentionable
}
groups {
shorthand
name
memberEmails
}
}
}
`;
export const gqlGetUsers = gql`
query MyQuery($emails: [String!]!) {
getUsers(emails: $emails) {
${userReturnFields}
isMentionable
}
}
`;
export const gqlGetMyUser = gql`
query MyQuery {
getMyUser {
${myUserReturnFields}
}
}
`;
export const gqlSetWebPushSubscriptionForUser = gql`
mutation SetWebPushSubscriptionForUser($webPushSubscription: AWSJSON) {
setWebPushSubscriptionForUser(webPushSubscription: $webPushSubscription) {
${myUserReturnFields}
}
}
`;
export const gqlAddManuallyOpenedPinboardIds = gql`
mutation AddManuallyOpenedPinboardIds($pinboardId: String!, $maybeEmailOverride: String) {
addManuallyOpenedPinboardIds(pinboardId: $pinboardId, maybeEmailOverride: $maybeEmailOverride) {
# including fields here makes them accessible in our subscription data
${myUserReturnFields}
}
}
`;
export const gqlRemoveManuallyOpenedPinboardIds = gql`
mutation RemoveManuallyOpenedPinboardIds($pinboardIdToClose: String!) {
removeManuallyOpenedPinboardIds(pinboardIdToClose: $pinboardIdToClose) {
# including fields here makes them accessible in our subscription data
${myUserReturnFields}
}
}
`;
export const gqlOnMyUserChanges = (userEmail: string) => gql`
subscription onMyUserChanges {
onMyUserChanges(email: "${userEmail}") {
${myUserReturnFields}
}
}
`;
const lastItemSeenByUserReturnFields = `
pinboardId
userEmail
itemID
seenAt
`;
export const gqlGetLastItemSeenByUsers = (pinboardId: string) => gql`
query MyQuery {
listLastItemSeenByUsers(pinboardId: "${pinboardId}") {
${lastItemSeenByUserReturnFields}
}
}
`;
export const gqlOnSeenItem = gql`
subscription OnSeenItem {
onSeenItem { ${lastItemSeenByUserReturnFields} }
}
`;
export const gqlSeenItem = gql`
mutation SeeItem($input: LastItemSeenByUserInput!) {
seenItem(input: $input) {
# including fields here makes them accessible in our subscription data
${lastItemSeenByUserReturnFields}
}
}
`;
const claimedReturnFields = `
pinboardId
updatedItem {
${itemReturnFields}
}
newItem {
${itemReturnFields}
}
`;
export const gqlClaimItem = gql`
mutation ClaimItem($itemId: String!) {
claimItem(itemId: $itemId) {
${claimedReturnFields}
}
}
`;
export const gqlOnClaimItem = gql`
subscription OnClaimItem {
onClaimItem { ${claimedReturnFields} }
}
`;
const gridBadgeFields = `
text
color
`;
export const gqlGetGridSearchSummary = gql`
query MyQuery($apiUrl: String!) {
getGridSearchSummary(apiUrl: $apiUrl) {
total
thumbnails
queryBreakdown {
collections { ${gridBadgeFields} }
labels { ${gridBadgeFields} }
chips { ${gridBadgeFields} }
restOfSearch
}
}
}
`;
export const gqlAsGridPayload = gql`
query AsGridPayload($gridUrl: String!) {
asGridPayload(gridUrl: $gridUrl)
}
`;
export const gqlVisitTourStep = gql`
mutation visitTourStep($tourStepId: String!) {
visitTourStep(tourStepId: $tourStepId) {
${myUserReturnFields}
}
}
`;
export const gqlChangeFeatureFlag = gql`
mutation changeFeatureFlag($flagId: String!, $newValue: Boolean!) {
changeFeatureFlag(flagId: $flagId, newValue: $newValue) {
${myUserReturnFields}
}
}
`;