-
Notifications
You must be signed in to change notification settings - Fork 0
/
SubApp.js
147 lines (138 loc) · 3.14 KB
/
SubApp.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
import { useMutation } from '@apollo/react-hooks'
import * as Notifications from 'expo-notifications'
import * as Permissions from 'expo-permissions'
import gql from 'graphql-tag'
import React, { useEffect } from 'react'
import { SafeAreaView } from 'react-native'
import styles from './App.style'
import MainNavigator from './containers/navigations/notesNavigator'
import useRequests from './hooks/useRequests'
const GET_MY_SENT_REQUESTS = gql`
query MySentRequests(
$query: String
$first: Int
$skip: Int
$orderBy: RequestOrderByInput
) {
mySentRequests(
query: $query
first: $first
skip: $skip
orderBy: $orderBy
) {
id
accepted
type
note {
title
creator {
firstName
lastName
}
}
}
}
`
const GET_MY_RECEIVED_REQUESTS = gql`
query MyReceivedRequests(
$query: String
$first: Int
$skip: Int
$orderBy: RequestOrderByInput
) {
myReceivedRequests(
query: $query
first: $first
skip: $skip
orderBy: $orderBy
) {
id
accepted
type
note {
title
}
user {
firstName
lastName
}
}
}
`
const SENT_REQUESTS_SUBSCRIPTION = gql`
subscription SentRequests {
sentRequests {
node {
id
accepted
type
note {
title
creator {
firstName
lastName
}
}
}
}
}
`
const RECEIVED_REQUESTS_SUBSCRIPTION = gql`
subscription ReceivedRequests {
receivedRequests {
node {
id
accepted
type
note {
title
}
user {
firstName
lastName
}
}
}
}
`
const SET_NOTIFICATION_TOKEN = gql`
mutation SetNotificationToken($notificationToken: String!) {
setNotificationToken(notificationToken: $notificationToken) {
notificationToken
}
}
`
const SubApp = ({ token }) => {
const [setNotificationToken] = useMutation(SET_NOTIFICATION_TOKEN)
useRequests(GET_MY_SENT_REQUESTS, SENT_REQUESTS_SUBSCRIPTION, token)
useRequests(GET_MY_RECEIVED_REQUESTS, RECEIVED_REQUESTS_SUBSCRIPTION, token)
useEffect(() => {
const effect = async () => {
try {
let status = await Permissions.getAsync(Permissions.NOTIFICATIONS)
.status
if (status !== 'granted') {
status = (await Permissions.askAsync(Permissions.NOTIFICATIONS))
.status
if (status === 'granted') {
const pushToken = (await Notifications.getExpoPushTokenAsync()).data
setNotificationToken({
variables: { notificationToken: pushToken },
})
} else {
throw Error('Permission not granted!')
}
}
} catch {
return null
}
}
token && effect()
}, [token])
return (
<SafeAreaView style={styles.container}>
<MainNavigator />
</SafeAreaView>
)
}
export default SubApp