import React, { useState } from 'react'; import { SafeAreaView, StyleSheet, ScrollView, View, Text, StatusBar, ActivityIndicator, FlatList, TouchableOpacity, Image, Linking } from 'react-native'; import { Header, LearnMoreLinks, Colors, DebugInstructions, ReloadInstructions, } from 'react-native/Libraries/NewAppScreen'; import { SearchBar } from 'react-native-elements'; import styles from './styles/liststyles' import { url } from './resources/fetchInfo.json' const StaffElement = ({item}) => { const [visible, setVisible] = useState(false) const extra = [...item.item.emails.map(email=>({'\n'}Email: Linking.openURL("mailto:"+email)}>{email}))] return( setVisible(!visible)} activeOpacity={0.8}> {item.item.name} {visible?extra:<>} ) } class Staff extends React.Component { constructor(props) { super(props); this.state = { data: [], dataSearch:[], isLoading: true, search:"" }; } componentDidMount() { fetch(`${url}/api/en/teachers`,{ headers: { 'Cache-Control': 'no-cache' } }) .then((response) => { return response.text(); }) .then((json) => { this.setState({data: JSON.parse(json).data}); this.setState({dataSearch:JSON.parse(json).data}); }) .catch((error) => console.error(error)) .finally(() => { this.setState({ isLoading: false }); }); } updateSearch = (search) => { this.setState({ search:search }); const searchPool = search.startsWith(this.state.search)?this.state.dataSearch:this.state.data; const ds = searchPool.filter((thing)=>{return thing.name.toLowerCase().split(' ').some(x=>x.startsWith(search.toLowerCase()))}) this.setState({dataSearch: ds}) }; clearSearch = (search)=>{ const ds = this.state.data; this.setState({dataSearch:ds}) } render() { const { data , dataSearch, isLoading,search} = this.state; return ( } keyExtractor={item => JSON.stringify(item)} /> ); } } export default Staff;