Skip to content

Instantly share code, notes, and snippets.

View bogoslavskiy's full-sized avatar

Artem Bogoslavskiy bogoslavskiy

View GitHub Profile
import { gql } from '@apollo/client';
export const RegisterDeviceMutation = gql`
mutation RegisterDevice($input: DeviceRegisterInput!) {
device {
register(input: $input)
}
}
`;
[...]
const MessagesMutation: MessagesMutationResolvers = {
async send(_, { input }) {
const message = new MessageModel(input);
await message.save();
pubsub.publish(NEW_MESSAGE_EVENT, { message });
sendPushNotification({
title: input.senderName,
import Expo, { ExpoPushMessage } from 'expo-server-sdk';
import DeviceTokenModel from '../models/DeviceTokenModel';
const expo = new Expo();
interface SendPushNotificationArgs {
user_id?: string;
title: string;
body: string;
payload?: { [key: string]: any };
import { makeExecutableSchema } from 'graphql-tools';
import merge = require('lodash/merge');
import Scalars from './scalars';
// Modules
import Messages from './resolvers/Messages';
import Device from './resolvers/Device';
const Modules = {
typeDefs: [
import { gql } from 'apollo-server-express';
import { DeviceMutationResolvers } from '../generated/graphql';
import DeviceTokenModel from '../models/DeviceTokenModel';
const typeDefs = gql`
enum DevicePlatform {
IOS
ANDROID
}
import * as mongoose from 'mongoose';
export interface DeviceTokenDocument extends mongoose.Document {
user_id: string;
token: string;
devicePlatform?: string;
deviceYear?: string;
systemVersion?: string;
}
import * as React from 'react';
import { FlatListProps, FlatList, Keyboard, PanResponderGestureState, PanResponder } from 'react-native';
export const MessageListMobile = <T extends {}>(props: FlatListProps<T> & { innerRef?: React.RefObject<FlatList<T>> }) => {
const keyboardPosY = React.useRef(0);
const isVisibleKeyboard = React.useRef(false);
const accessoryViewHeight = 53 / 2;
React.useEffect(() => {
const keyboardDidShowListener = Keyboard.addListener(
import React from 'react';
import { Keyboard } from 'react-native';
export const useKeyboard = (): [boolean, () => void] => {
const [visible, setVisible] = React.useState(false);
const dismiss = () => {
Keyboard.dismiss();
setVisible(false);
};
import { Dimensions, Platform } from "react-native";
const width = Dimensions.get("window").width;
const height = Dimensions.get("window").height;
export const isIphoneX =
Platform.OS === "ios" &&
!Platform.isPad &&
!Platform.isTVOS &&
(height === 812 || width === 812 || height === 896 || width === 896);
import React from 'react'
import { View, ActivityIndicator, TextInput, StyleSheet, Platform, TouchableOpacity, FlatList } from 'react-native';
import { KeyboardAccessoryView } from 'react-native-keyboard-accessory';
import { Ionicons } from '@expo/vector-icons';
import { MainNavProps } from '../navigation/types/MainStackParams';
import { AuthContext } from '../contexts/AuthContext';
import { useMessages, useSendMessage } from '../graphql/cache/Messages';
import { MessageItem } from '../components/Items/MessageItem';
import { Button } from '../components/Button';
import { isIphoneX } from '../utils';