import React, {useEffect, useState, createRef} from 'react'; import { ScrollView, View, Text, TouchableOpacity, Dimensions, Image, SafeAreaView, Platform, Modal, } from 'react-native'; import NavigationService from '../../services/NavigationService'; import { COLOR_SCHEME, SIZE, br, ph, pv, opacity, FONT, WEIGHT, } from '../../common/common'; import Icon from 'react-native-vector-icons/Feather'; import {getElevation, h, w, timeSince} from '../../utils/utils'; import {FlatList, TextInput} from 'react-native-gesture-handler'; import {useForceUpdate} from '../../views/ListsEditor'; const refs = []; export const AddNotebookDialog = ({visible, close}) => { const [colors, setColors] = useState(COLOR_SCHEME); const [topicsToAdd, setTopicsToAdd] = useState(['']); const forceUpdate = useForceUpdate(); let listRef = createRef(); let prevItem = null; let prevIndex = null; let currentSelectedItem = null; const onSubmit = (text, index, willFocus = true) => { let oldData = topicsToAdd; oldData[index] = text; if ( oldData.length === index + 1 && prevIndex !== null && prevItem !== null ) { oldData.push(''); } setTopicsToAdd(oldData); forceUpdate(); currentSelectedItem = null; //if (!willFocus) return; if (!refs[index + 1]) { setTimeout(() => { if (!refs[index + 1]) return; refs[index + 1].focus(); }, 400); } else { setTimeout(() => { refs[index + 1].focus(); }, 400); } }; const onFocus = index => { currentSelectedItem = index; if (currentSelectedItem) { let oldData = topicsToAdd; oldData[prevIndex] = prevItem; if (oldData.length === prevIndex + 1) { oldData.push(''); } prevIndex = null; prevItem = null; setTopicsToAdd(oldData); console.log(oldData); forceUpdate(); } }; const onChange = (text, index) => { prevIndex = index; prevItem = text; }; const onDelete = index => { console.log('deleting'); let listData = topicsToAdd; if (listData.length === 1) return; refs.splice(index, 1); listData.splice(index, 1); console.log(refs, listData); setTopicsToAdd(listData); forceUpdate(); }; return ( (refs = [])}> New Notebook Topics ({ length: 50, offset: 50 * index, index, })} renderItem={({item, index}) => ( )} /> Add { setTopicsToAdd(['']); prevIndex = null; prevItem = null; currentSelectedItem = null; close(); }} style={{ paddingVertical: pv, paddingHorizontal: ph, borderRadius: 5, width: '45%', justifyContent: 'center', alignItems: 'center', backgroundColor: '#f0f0f0', }}> Cancel ); }; const TopicItem = ({ item, index, onFocus, onSubmit, onDelete, onChange, colors, }) => { const [focus, setFocus] = useState(true); const topicRef = ref => (refs[index] = ref); let text = item; return ( { onFocus(index); setFocus(true); }} onBlur={() => { onSubmit(text, index, false); setFocus(false); }} onChangeText={value => { onChange(value, index); text = value; }} onSubmit={() => onSubmit(text, index, true)} blurOnSubmit style={{ padding: pv - 5, paddingHorizontal: 0, fontSize: SIZE.sm, fontFamily: WEIGHT.regular, width: '90%', maxWidth: '90%', }} placeholder="Add a topic" placeholderTextColor={colors.icon} /> (!focus ? onDelete(index) : onSubmit(text, index, true))} style={{ justifyContent: 'center', alignItems: 'center', }}> ); };