text: /**
   * This file provided by Facebook is for non-commercial testing and evaluation
   * purposes only.  Facebook reserves all rights not expressly granted.
   *
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
   * FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
   * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
   * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   */
  
  import Relay from 'react-relay';
  
  export default class AddTodoMutation extends Relay.Mutation {
    static fragments = {
      viewer: () => Relay.QL`
        fragment on User {
          id,
          totalCount,
        }
      `,
    };
    getMutation() {
      return Relay.QL`mutation{addTodo}`;
    }
    getFatQuery() {
      return Relay.QL`
        fragment on AddTodoPayload {
          todoEdge,
          viewer {
            todos,
            totalCount,
          },
        }
      `;
    }
    getConfigs() {
      return [{
        type: 'RANGE_ADD',
        parentName: 'viewer',
        parentID: this.props.viewer.id,
        connectionName: 'todos',
        edgeName: 'todoEdge',
        rangeBehaviors: {
          '': 'append',
          'status(any)': 'append',
          'status(active)': 'append',
          'status(completed)': 'ignore',
        },
      }];
    }
    getVariables() {
      return {
        text: this.props.text,
      };
    }
    getOptimisticResponse() {
      return {
        // FIXME: totalCount gets updated optimistically, but this edge does not
        // get added until the server responds
        todoEdge: {
          node: {
            complete: false,
            text: this.props.text,
          },
        },
        viewer: {
          id: this.props.viewer.id,
          totalCount: this.props.viewer.totalCount + 1,
        },
      };
    }
  }
  