const createCompositeQuery = ({children, schema, type, dependents}, id) => { const query = Relay.createQuery({ calls: [{ kind: 'Call', metadata: {}, name: 'id', value: { kind: 'CallVariable', callVariableName: 'id' } }], fieldName: 'node', kind: 'Query', metadata: { isAbstract: true, identifyingArgName: 'id' }, name: 'App', type: 'Node', children: [{ fieldName: 'id', kind: 'Field', metadata: { isGenerated: true, isRequisite: true }, type: 'ID' }, { fieldName: '__typename', kind: 'Field', metadata: { isGenerated: true, isRequisite: true }, type: 'String' }, { kind: 'Fragment', metadata: {}, name: type, type: type, children: [] }] }, { id }); return { query: query.clone(query.getChildren().map(child => { if (child instanceof RelayQuery.Fragment) { return child.clone(children); } else { return child; } })), schema, dependents }; }
const onEnter = (nextState, replace, callback) => { const {params: {channelId}} = nextState; const query = Relay.createQuery(node, {channelId}); Relay.Store.primeCache({query}, readyState => { if (readyState.done) { const [channel] = Relay.Store.readQuery(query); if (channel.joined) { callback(); } else { Relay.Store.commitUpdate(new JoinChannelMutation({channel}), { onSuccess: () => callback() }); } } }); }