@@ -15,21 +15,34 @@ import RemoveTodoMutation from '../mutations/RemoveTodoMutation';
1515import RenameTodoMutation from '../mutations/RenameTodoMutation' ;
1616import TodoTextInput from './TodoTextInput' ;
1717
18- import React from 'react' ;
18+ import * as React from 'react' ;
1919import {
2020 createFragmentContainer ,
2121 graphql ,
22+ RelayProp ,
2223} from 'react-relay' ;
24+
2325import classnames from 'classnames' ;
2426
25- class Todo extends React . Component {
27+ import { Todo_todo } from './__generated__/Todo_todo.graphql' ;
28+ import { Todo_viewer } from './__generated__/Todo_viewer.graphql' ;
29+ import { ChangeEvent } from 'react' ;
30+ import { Environment } from 'relay-runtime' ;
31+
32+ interface Props {
33+ relay : RelayProp
34+ todo : Todo_todo
35+ viewer : Todo_viewer
36+ }
37+
38+ class Todo extends React . Component < Props > {
2639 state = {
2740 isEditing : false ,
2841 } ;
29- _handleCompleteChange = ( e ) => {
42+ _handleCompleteChange = ( e : ChangeEvent < HTMLInputElement > ) => {
3043 const complete = e . target . checked ;
3144 ChangeTodoStatusMutation . commit (
32- this . props . relay . environment ,
45+ ( this . props . relay && this . props . relay . environment ) as Environment ,
3346 complete ,
3447 this . props . todo ,
3548 this . props . viewer ,
@@ -48,22 +61,22 @@ class Todo extends React.Component {
4861 this . _setEditMode ( false ) ;
4962 this . _removeTodo ( ) ;
5063 } ;
51- _handleTextInputSave = ( text ) => {
64+ _handleTextInputSave = ( text : string ) => {
5265 this . _setEditMode ( false ) ;
5366 RenameTodoMutation . commit (
54- this . props . relay . environment ,
67+ ( this . props . relay && this . props . relay . environment ) as Environment ,
5568 text ,
5669 this . props . todo ,
5770 ) ;
5871 } ;
5972 _removeTodo ( ) {
6073 RemoveTodoMutation . commit (
61- this . props . relay . environment ,
74+ ( this . props . relay && this . props . relay . environment ) as Environment ,
6275 this . props . todo ,
6376 this . props . viewer ,
6477 ) ;
6578 }
66- _setEditMode = ( shouldEdit ) => {
79+ _setEditMode = ( shouldEdit : boolean ) => {
6780 this . setState ( { isEditing : shouldEdit } ) ;
6881 } ;
6982 renderTextInput ( ) {
@@ -87,7 +100,7 @@ class Todo extends React.Component {
87100 } ) } >
88101 < div className = "view" >
89102 < input
90- checked = { this . props . todo . complete }
103+ checked = { ! ! this . props . todo . complete }
91104 className = "toggle"
92105 onChange = { this . _handleCompleteChange }
93106 type = "checkbox"
0 commit comments