title: Creating an optimistic response for a reordered connection
body: <p>What is the best way to 'reorder' a connection in RelayJS?</p>
  
  <p>In my user interface, I allow my user to 'swap' two items, but creating a mutation around that is a bit tricky.</p>
  
  <p>What I'm doing right now is the naive way, namely using <code>FIELDS_CHANGE</code> to change my node itself.</p>
  
  <p>It works, but the problem is I can't seem to write an optimistic update for it. I am able to just pass a list of ids to my graphql server, but that doesn't work for the optimistic update because it expects the actual data.</p>
  
  <p>So I guess I have to mock out my 'connection' interface, but unfortunately, it still doesn't work. I 'copied' my reordered nodes to getOptimisticResponse but it seems to be ignored. The data matches the actual server response. (ids simplified)</p>
  
  <p>original:</p>
  
  <pre><code>{
    item: {
      edges: {
        {cursor: 1, node: {id:2}}
        {cursor: 2, node: {id:1}}
      }
    }
  }
  </code></pre>
  
  <p>(doesn't do anything):
  optimistic reponse:</p>
  
  <pre><code>{
    item: {
      edges: {
        node: {id:1}
        node: {id:2}
      }
    }
  }
  </code></pre>
  
  <p>server reponse:</p>
  
  <pre><code>{
    item: {
      edges: {
        {cursor: 1, node: {id:1}}
        {cursor: 2, node: {id:2}}
      }
    }
  }
  </code></pre>
  
  <p>What gives? It's equivalent (except for the cursor), and even if I add the cursor in, it still doesn't work.</p>
  
  <p>What am I doing wrong? Also is there an easier way to do mock my ids to a connection?</p>
  
  <p>Also, as an aside, is there a way to get this data piecemeal? Right now, reordering two item re-requests the whole list because of my mutation config. I suppose I can do it with <code>RANGE_ADD</code>, and <code>RANGE_DELETE</code> to 'simulate a swap` but is there any easier way to do it?</p>