/* Copyright 2015 Realm Inc - All Rights Reserved * Proprietary and Confidential */ 'use strict'; import React, { Platform, Text, TextInput, TouchableWithoutFeedback, View, } from 'react-native'; import realm from './realm'; import styles from './styles'; const iOS = (Platform.OS == 'ios'); export default 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 ( {iOS ? '𐄂' : '×'} ); } _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(); } } }