2016-05-20 28 views
6

Ho una pagina che utilizza la connessione Relay GraphQL che recupera drafts.GraphQL Relay Mutation Config RANGE_ADD's parentName per connessioni

query { 
    connections { 
     drafts(first: 10) { 
      edges { 
       node { 
        ... on Draft { 
         id 
        } 
       } 
      } 
     } 
    } 
} 

In questa pagina, ho anche creare progetto attraverso CreateDraftMutation.

mutation { 
    createDraft(input: { 
     clientMutationId: "1" 
     content: "content" 
    }) { 
     draft { 
      id 
      content 
     } 
    } 
} 

Dopo questa mutazione, voglio che Relay aggiunga la bozza creata nel suo archivio. Il miglior candidato per la mutazione config è RANGE_ADD, che è documentata come segue:

https://facebook.github.io/relay/docs/guides-mutations.html

RANGE_ADD Dato un genitore, una connessione, e il nome del bordo appena creato nel payload risposta Relay aggiungerà il nodo al negozio e collegarlo alla connessione in base al comportamento dell'intervallo specificato.

Argomenti

ParentName: stringa Il nome del campo nella risposta che rappresenta il genitore della connessione

parentID: stringa La dataID del nodo padre che contiene il collegamento

connectionName: stringa Il nome del campo nella risposta che rappresenta la connessione

edgeName: stringa Il nome del campo nella risposta che rappresenta il bordo appena creato

rangeBehaviors: {[chiamata: stringa]: GraphQLMutatorConstants.RANGE_OPERATIONS}

Una mappa tra stampata, separata da punti GraphQL chiama in ordine alfabetico, e il comportamento che vogliamo che il relay esca quando si aggiunge il nuovo edge alle connessioni sotto l'influenza di quelle chiamate. I comportamenti possono essere uno di "append", "ignore", "prepend", "refetch" o "remove".

L'esempio dalla documentazione va come le seguenti:

class IntroduceShipMutation extends Relay.Mutation { 
    // This mutation declares a dependency on the faction 
    // into which this ship is to be introduced. 
    static fragments = { 
    faction:() => Relay.QL`fragment on Faction { id }`, 
    }; 
    // Introducing a ship will add it to a faction's fleet, so we 
    // specify the faction's ships connection as part of the fat query. 
    getFatQuery() { 
    return Relay.QL` 
     fragment on IntroduceShipPayload { 
     faction { ships }, 
     newShipEdge, 
     } 
    `; 
    } 
    getConfigs() { 
    return [{ 
     type: 'RANGE_ADD', 
     parentName: 'faction', 
     parentID: this.props.faction.id, 
     connectionName: 'ships', 
     edgeName: 'newShipEdge', 
     rangeBehaviors: { 
     // When the ships connection is not under the influence 
     // of any call, append the ship to the end of the connection 
     '': 'append', 
     // Prepend the ship, wherever the connection is sorted by age 
     'orderby(newest)': 'prepend', 
     }, 
    }]; 
    } 
    /* ... */ 
} 

Se il genitore è così evidente come fazione, questo è un pezzo di torta, ma sto avendo difficoltà a identificare e ParentName parentID se proviene direttamente da connessioni di query.

Come posso fare?

Edit:

Questo è il modo interrogazione è stato esportato.

export default new GraphQLObjectType({ 
    name: 'Query', 
    fields:() => ({ 
    node: nodeField, 
    viewer: { 
     type: viewerType, 
     resolve:() => ({}), 
    }, 
    connections: { 
     type: new GraphQLObjectType({ 
     name: 'Connections', 

che in cambio utilizzato nel contenitore relè

export default Relay.createContainer(MakeRequestPage, { 
    fragments: { 
     connections:() => Relay.QL` 
      fragment on Connections { 
+0

'connections' nella query un oggetto GraphQL o una connessione? –

+0

@AhmadFerdousBinAlam Ho aggiunto lo snippet qui sotto. GraphQLObjectType 'Connections' viene fornito con campi che sono campi di connessione. – lustdante

risposta

1

sto avendo difficoltà a identificare ParentName e parentID se venuto direttamente da connessioni di interrogazione.

faction e ships nell'esempio dalla documentazione Relay sono esattamente la stessa di connections e drafts nel tuo caso. Ogni GraphQLObject ha un ID, così come il tuo oggetto connections. Pertanto, per la tua mutazione, parentName è connctions e parentID è l'ID di connections.

query { 
    connections { 
     id 
     drafts(first: 10) { 
      edges { 
       node { 
        ... on Draft { 
         id 
        } 
       } 
      } 
     } 
    } 
} 

A proposito, credo connections e drafts sono termini dal vostro dominio di applicazione. Altrimenti, connections confonde con il tipo di connessione GraphQL.

+0

'bozze 'è sicuramente il termine del dominio dell'applicazione a titolo di esempio. Ho appena realizzato che 'connections', che ho trattato come query di root comunemente usata come' node' o 'viewer', è anche unico per la nostra applicazione. (Il mio compagno di squadra lo ha inventato). Quindi suppongo che le connessioni id dovrebbero essere come un ID globale. – lustdante

+0

Sì, l'ID è un ID globale. –

+0

Che cos'è parentName e parentId se si desidera che le bozze siano direttamente sotto query? – velop