diff --git a/client/react-native/common/components/Screens/Chats/Add.js b/client/react-native/common/components/Screens/Chats/Add.js
index 77c758e0de..65c93ea8e7 100644
--- a/client/react-native/common/components/Screens/Chats/Add.js
+++ b/client/react-native/common/components/Screens/Chats/Add.js
@@ -5,7 +5,7 @@ import { Pagination, RelayContext } from '../../../relay'
import { Screen, Flex, Text, Header } from '../../Library'
import { border, borderBottom, marginHorizontal } from '../../../styles'
import { colors } from '../../../constants'
-import { queries, fragments } from '../../../graphql'
+import { fragments } from '../../../graphql'
const Item = fragments.Contact(
class Item extends PureComponent {
@@ -138,6 +138,11 @@ export default class ListScreen extends Component {
render () {
const { contactsID } = this.state
+ const {
+ screenProps: {
+ context: { queries },
+ },
+ } = this.props
return (
}
@@ -195,7 +200,10 @@ export default class Detail extends PureComponent {
backgroundColor: colors.white,
}}
>
-
+
)
diff --git a/client/react-native/common/components/Screens/Settings/Devtools/Network/Peers.js b/client/react-native/common/components/Screens/Settings/Devtools/Network/Peers.js
index 1dbc8bd4ec..45cc00cb41 100644
--- a/client/react-native/common/components/Screens/Settings/Devtools/Network/Peers.js
+++ b/client/react-native/common/components/Screens/Settings/Devtools/Network/Peers.js
@@ -69,13 +69,15 @@ export default class Peers extends Component {
}
componentWillMount () {
- this.props.screenProps.context.subscriptions.monitorPeers.subscribe({
- iterator: undefined,
- updater: (store, data) => {
- const peer = data.MonitorPeers
- this.addPeer(peer)
- },
- })
+ this.subscriber = this.props.screenProps.context.subscriptions.monitorPeers.subscribe(
+ {
+ iterator: undefined,
+ updater: (store, data) => {
+ const peer = data.MonitorPeers
+ this.addPeer(peer)
+ },
+ }
+ )
}
componentDidMount () {
@@ -88,7 +90,7 @@ export default class Peers extends Component {
}
componentWillUnmount () {
- this.props.screenProps.context.subscriptions.monitorPeers.dispose()
+ this.subscriber.unsubscribe()
}
fetchPeers = () => {
@@ -109,9 +111,15 @@ export default class Peers extends Component {
return (
{peer.connection === Connection.CONNECTED ? (
- {peer.id.slice(0, 30)}...
+
+ {peer.id.slice(0, 30)}
+ ...
+
) : (
- {peer.id.slice(0, 30)}...
+
+ {peer.id.slice(0, 30)}
+ ...
+
)}
)
diff --git a/client/react-native/common/graphql/mutations/ContactRemove.js b/client/react-native/common/graphql/mutations/ContactRemove.js
index 2bb40cce81..a75a2d35a9 100644
--- a/client/react-native/common/graphql/mutations/ContactRemove.js
+++ b/client/react-native/common/graphql/mutations/ContactRemove.js
@@ -50,5 +50,7 @@ export default context => (input, configs) =>
...contact.default,
...input,
},
- configs
+ {
+ ...configs,
+ }
)
diff --git a/client/react-native/common/graphql/mutations/ContactRequest.js b/client/react-native/common/graphql/mutations/ContactRequest.js
index e9039445e3..9eca8dddab 100644
--- a/client/react-native/common/graphql/mutations/ContactRequest.js
+++ b/client/react-native/common/graphql/mutations/ContactRequest.js
@@ -32,6 +32,7 @@ const ContactRequestMutation = graphql`
}
}
`
+
export default context => (input, configs) =>
commit(
context.environment,
@@ -41,5 +42,5 @@ export default context => (input, configs) =>
...contact.default,
...input,
},
- configs,
+ configs
)
diff --git a/client/react-native/common/graphql/mutations/ConversationAddMessage.js b/client/react-native/common/graphql/mutations/ConversationAddMessage.js
index 019d46f7b5..4da80e0584 100644
--- a/client/react-native/common/graphql/mutations/ConversationAddMessage.js
+++ b/client/react-native/common/graphql/mutations/ConversationAddMessage.js
@@ -3,7 +3,7 @@ import { graphql } from 'react-relay'
import { commit } from '../../relay'
import { conversation } from '../../utils'
import { merge } from '../../helpers'
-import { updaters } from '..'
+// import { updaters } from '..'
const ConversationAddMessageMutation = graphql`
mutation ConversationAddMessageMutation(
@@ -39,17 +39,18 @@ export default context => (input, configs) =>
{ conversation: conversation.default, message: { text: '' } },
input,
]),
- {
- updater: (store, data) => {
- updaters.eventList[0](store, {
- filter: {
- conversationId: data.ConversationAddMessage.conversationId,
- kind: data.ConversationAddMessage.kind,
- },
- })
- .add('EventEdge', data.ConversationAddMessage.id)
- .before()
- },
- ...configs,
- }
+ // {
+ // updater: (store, data) => {
+ // updaters.eventList[0](store, {
+ // filter: {
+ // conversationId: data.ConversationAddMessage.conversationId,
+ // kind: data.ConversationAddMessage.kind,
+ // },
+ // })
+ // .add('EventEdge', data.ConversationAddMessage.id)
+ // .before()
+ // },
+ // ...configs,
+ // }
+ configs
)
diff --git a/client/react-native/common/graphql/mutations/ConversationCreate.js b/client/react-native/common/graphql/mutations/ConversationCreate.js
index ba60b67c54..8044d39107 100644
--- a/client/react-native/common/graphql/mutations/ConversationCreate.js
+++ b/client/react-native/common/graphql/mutations/ConversationCreate.js
@@ -1,7 +1,7 @@
import { graphql } from 'react-relay'
import { commit } from '../../relay'
-import { updaters } from '..'
+// import { updaters } from '..'
const ConversationCreateMutation = graphql`
mutation ConversationCreateMutation(
@@ -57,14 +57,15 @@ export default context => (input, configs) =>
ConversationCreateMutation,
'ConversationCreate',
input,
- {
- updater: (store, data) => {
- updaters.conversationList.forEach(updater =>
- updater(store)
- .add('ConversationEdge', data.ConversationCreate.id)
- .after()
- )
- },
- ...configs,
- }
+ // {
+ // updater: (store, data) => {
+ // updaters.conversationList.forEach(updater =>
+ // updater(store)
+ // .add('ConversationEdge', data.ConversationCreate.id)
+ // .after()
+ // )
+ // },
+ // ...configs,
+ // }
+ configs
)
diff --git a/client/react-native/common/graphql/mutations/ConversationInvite.js b/client/react-native/common/graphql/mutations/ConversationInvite.js
index 6d504eba5f..567bf826bd 100644
--- a/client/react-native/common/graphql/mutations/ConversationInvite.js
+++ b/client/react-native/common/graphql/mutations/ConversationInvite.js
@@ -1,7 +1,7 @@
import { graphql } from 'react-relay'
import { commit } from '../../relay'
-import { updaters } from '..'
+// import { updaters } from '..'
const ConversationInviteMutation = graphql`
mutation ConversationInviteMutation(
@@ -56,14 +56,15 @@ export default context => (input, configs) =>
ConversationInviteMutation,
'ConversationInvite',
input,
- {
- updater: (store, data) => {
- updaters.conversationList.forEach(updater =>
- updater(store)
- .add('ConversationEdge', data.ConversationInvite.id)
- .after()
- )
- },
- ...configs,
- }
+ // {
+ // updater: (store, data) => {
+ // updaters.conversationList.forEach(updater =>
+ // updater(store)
+ // .add('ConversationEdge', data.ConversationInvite.id)
+ // .after()
+ // )
+ // },
+ // ...configs,
+ // }
+ configs,
)
diff --git a/client/react-native/common/graphql/subscriptions/ConversationNewMessage.js b/client/react-native/common/graphql/subscriptions/ConversationNewMessage.js
index 5f3ae4e790..ec916bd89c 100644
--- a/client/react-native/common/graphql/subscriptions/ConversationNewMessage.js
+++ b/client/react-native/common/graphql/subscriptions/ConversationNewMessage.js
@@ -1,17 +1,15 @@
import EventStream from './EventStream'
-export default conversation => ({
- ...EventStream,
+export default context => ({
+ ...EventStream(context),
subscribe: ({ updater }) =>
- EventStream.subscribe({
- updater: (store, data) => {
- console.log('RECEIVED_EVENT')
- if (
- data.EventStream.kind === 302 &&
- data.EventStream.conversationId === conversation.id
- ) {
- return updater && updater(store, data.EventStream)
- }
- },
+ EventStream(context).subscribe({
+ updater:
+ updater &&
+ ((store, data) => {
+ if (data.EventStream.kind === 302) {
+ return updater(store, data.EventStream)
+ }
+ }),
}),
})
diff --git a/client/react-native/common/relay/Pagination.js b/client/react-native/common/relay/Pagination.js
index 85b7384b4e..5c155a75fe 100644
--- a/client/react-native/common/relay/Pagination.js
+++ b/client/react-native/common/relay/Pagination.js
@@ -50,13 +50,13 @@ const createPagination = ({
children,
direction = 'forward',
fragment,
- connection,
+ alias,
query,
}) =>
Relay.createPaginationContainer(PaginationContainer, fragment, {
direction,
getConnectionFromProps: props => {
- return props.data[connection]
+ return props.data[alias]
},
getFragmentVariables: (prevVars, totalCount) => {
return {
@@ -107,7 +107,6 @@ export default class Pagination extends PureComponent {
)
case state.success:
- console.log(state)
return
case state.error:
return null
diff --git a/client/react-native/common/relay/environment.js b/client/react-native/common/relay/environment.js
index 5285640354..1068229d9c 100644
--- a/client/react-native/common/relay/environment.js
+++ b/client/react-native/common/relay/environment.js
@@ -21,40 +21,20 @@ const logStyle = {
// installRelayDevTools()
// }
-const setupSubscription = ({ getIp, getPort }) => async (
+const setupSubscription = ({ ip, port }) => (
config,
variables,
cacheConfig,
observer
) => {
- try {
- const query = config.text
- const subscriptionClient = new SubscriptionClient(
- `ws://${await getIp()}:${await getPort()}/query`,
- {
- reconnect: true,
- }
- )
-
- const onNext = result => {
- observer.onNext(result)
- }
-
- const onError = error => {
- observer.onError(error)
- }
-
- const onComplete = () => {
- observer.onCompleted()
- }
+ const query = config.text
+ const client = new SubscriptionClient(`ws://${ip}:${port}/query`, {
+ reconnect: true,
+ })
- subscriptionClient
- .request({ query, variables })
- .subscribe(onNext, onError, onComplete)
- } catch (err) {
- console.error(err)
- }
- // client.unsubscribe()
+ const observable = client.request({ query, variables })
+ observable.subscribe(observer.onNext, observer.onError, observer.onCompleted)
+ return observable
}
const perfLogger = (msg, req, res) => {
@@ -104,7 +84,10 @@ const setupMiddlewares = async ({ getIp, getPort }) => [
export const setup = async ({ getIp, getPort }) =>
new Environment({
network: new RelayNetworkLayer(await setupMiddlewares({ getIp, getPort }), {
- subscribeFn: await setupSubscription({ getIp, getPort }),
+ subscribeFn: setupSubscription({
+ ip: await getIp(),
+ port: await getPort(),
+ }),
}),
store: new Store(new RecordSource()),
})
diff --git a/client/react-native/common/relay/fragment-helper.js b/client/react-native/common/relay/fragment-helper.js
index e1011c30ef..15eb76c785 100644
--- a/client/react-native/common/relay/fragment-helper.js
+++ b/client/react-native/common/relay/fragment-helper.js
@@ -2,7 +2,6 @@ import Relay from 'react-relay'
export class ConnectionHelper {
constructor (selection, metadata) {
- console.log(metadata)
Object.keys(selection).forEach(k => (this[k] = selection[k]))
Object.keys(metadata).forEach(k => (this[k] = metadata[k]))
}
@@ -17,7 +16,6 @@ export class ConnectionHelper {
_.concreteType
get key () {
- console.log('key')
return this.name.replace(/^__/g, '').replace(/_connection$/g, '')
}
}
@@ -37,7 +35,6 @@ export class FragmentHelper {
getSelection = alias => this.selections.find(_ => _.alias === alias)
getConnection = (alias, _) => {
- console.log('getConnection')
return alias == null
? this.getDefaultConnection()
: (_ = this.getSelection(alias)) &&
@@ -49,7 +46,6 @@ export class FragmentHelper {
}
getDefaultConnection = _ => {
- console.log('getDefaultConnection')
return (
(_ = this.selections.find(_ => _.concreteType.match(/Connection$/g))) &&
new ConnectionHelper(_, this.metadata.connection[0])
diff --git a/client/react-native/common/relay/genericUpdater.js b/client/react-native/common/relay/genericUpdater.js
index 8fe13d52d4..1261336b13 100644
--- a/client/react-native/common/relay/genericUpdater.js
+++ b/client/react-native/common/relay/genericUpdater.js
@@ -1,6 +1,11 @@
-import { FragmentHelper } from './fragment-helper'
+import { atob } from 'b64-lite'
+import Case from 'case'
+
import { ConnectionHandler } from 'relay-runtime'
+import { FragmentHelper } from './fragment-helper'
+import { merge } from '../helpers'
+
const deepFilterEqual = (a, b) => {
if (!a) {
return true
@@ -13,9 +18,7 @@ const deepFilterEqual = (a, b) => {
if (Array.isArray(a)) {
return a.every(av => b.some(bv => deepFilterEqual(av, bv)))
}
- return Object.keys(a).every(
- k => console.log(k) || deepFilterEqual(a[k], b[k])
- )
+ return Object.keys(a).every(k => deepFilterEqual(a[k], b[k]))
default:
return a === b
}
@@ -27,18 +30,16 @@ const deepFilterEqual = (a, b) => {
* The filter "args" need to have same field that the connection have in arguments
*/
export default (fragment, alias, args) => {
- const helper = new FragmentHelper(fragment)
- const connectionHelper = helper.getConnection(alias)
-
return (store, data) => {
+ const helper = new FragmentHelper(fragment)
+ const connectionHelper = helper.getConnection(alias)
const root = store.getRoot()
const connection = ConnectionHandler.getConnection(
root,
helper.getConnection(alias).key,
args
)
-
- if (deepFilterEqual(args, { filter: data }) === false) {
+ if (deepFilterEqual(args, merge([args, { filter: data }])) === false) {
// delete
ConnectionHandler.deleteNode(connection, data.id)
return
@@ -48,15 +49,9 @@ export default (fragment, alias, args) => {
const cursor =
(args.orderBy && args.orderBy !== 'id') ||
(args.sortBy && args.sortBy !== 'id')
- ? data[args.orderBy || args.sortBy]
+ ? data[Case.camel(args.orderBy || args.sortBy)]
: atob(data.id).split(':')[1]
- if (
- edges.length > 0 &&
- edges.some(
- e =>
- console.log(e.getValue('cursor')) || e.getValue('cursor') === cursor
- )
- ) {
+ if (edges.length > 0 && edges.some(e => e.getValue('cursor') === cursor)) {
// update
const node = store.get(data.id)
Object.keys(data).forEach(k => node.setValue(data[k], k))
diff --git a/client/react-native/common/relay/subscriber.js b/client/react-native/common/relay/subscriber.js
index 62f166515f..c3669fe0c4 100644
--- a/client/react-native/common/relay/subscriber.js
+++ b/client/react-native/common/relay/subscriber.js
@@ -2,36 +2,29 @@ import { requestSubscription } from 'react-relay'
export default ({ environment, subscription, updaters = [] }) => {
let _updaters = updaters
-
- let dispose = () => {}
-
- const start = () => {
- dispose = requestSubscription(environment, {
- subscription,
- // onNext: response => _generators.forEach(generator => generator.next(response)),
- onError: error => console.error(error),
- // onCompleted: () => _generators.forEach(generator => generator.return()),
- updater: (store, data) =>
- _updaters.forEach(updater => updater(store, data)),
- }).dispose
- }
-
- const subscribe = ({ updater }) => {
- if (_updaters.length === 0 && updater) {
- start()
- }
- updater && _updaters.push(updater)
- return {
- unsubscribe: () => {
- _updaters = updater ? _updaters.filter(_ => _ !== updater) : _updaters
- if (_updaters.length === 0) {
- dispose()
- }
- },
- }
- }
+ let _subscriber = null
return {
- subscribe,
+ subscribe: ({ updater }) => {
+ if (_updaters.length === 0 && updater) {
+ _subscriber = requestSubscription(environment, {
+ subscription,
+ onNext: () => {},
+ onCompleted: () => {},
+ onError: error => console.error(error),
+ updater: (store, data) =>
+ _updaters.forEach(updater => updater(store, data)),
+ })
+ }
+ updater && _updaters.push(updater)
+ return {
+ unsubscribe: () => {
+ _updaters = updater ? _updaters.filter(_ => _ !== updater) : _updaters
+ if (_updaters.length === 0) {
+ _subscriber.dispose()
+ }
+ },
+ }
+ },
}
}
diff --git a/client/react-native/package.json b/client/react-native/package.json
index 2a0b6a3530..938deb2821 100644
--- a/client/react-native/package.json
+++ b/client/react-native/package.json
@@ -14,6 +14,7 @@
"babel-plugin-relay": "^1.6.2",
"babel-plugin-transform-export-extensions": "^6.22.0",
"buffer": "^5.2.1",
+ "case": "^1.6.0",
"concurrently": "^4.0.1",
"deepmerge": "^2.2.1",
"graphql": "^14.0.2",
diff --git a/client/react-native/yarn.lock b/client/react-native/yarn.lock
index f4da32e355..8a0658141d 100644
--- a/client/react-native/yarn.lock
+++ b/client/react-native/yarn.lock
@@ -1631,6 +1631,10 @@ capture-stack-trace@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d"
+case@^1.6.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/case/-/case-1.6.0.tgz#d4f276c7f67b7a705afd3a39c9af9538f5f58364"
+
caseless@~0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"