'use strict'; const React = require('react-native'); const realm = require('./realm'); const styles = require('./styles'); const { Text, TextInput, TouchableWithoutFeedback, View } = React; class TodoListItem extends React.Component { constructor(props) { super(props); this._onChangeText = this._onChangeText.bind(this); } get done() { let items = this.props.item.items; return items.length > 0 && Array.prototype.every.call(items, (item) => item.done); } get text() { return this.props.item.name; } set text(text) { this.props.item.name = text; } componentDidMount() { // The autoFocus prop on TextInput was not working for us :( this._focusInputIfNecessary(); } componentDidUpdate() { this._focusInputIfNecessary(); } render() { return ( {this.renderLeftSide()} {this.renderText()} {this.renderRightSide()} ); } renderLeftSide() { return ( {this.done ? '✓' : '⁃'} ); } renderRightSide() { // Only show the delete button while not editing the text. return this.props.editing ? null : this.renderDelete(); } renderText(extraStyle) { if (this.props.editing) { return ( ); } else { return ( {this.text} ); } } renderDelete() { return ( 𐄂 ); } _onChangeText(text) { realm.write(() => { this.text = text; }); this.forceUpdate(); } _focusInputIfNecessary() { if (!this.props.editing) { return; } let input = this.refs.input; if (!input.isFocused()) { input.focus(); } } } module.exports = TodoListItem;