Skip to content

Instantly share code, notes, and snippets.

@ibelgin
Created January 3, 2023 22:10
Show Gist options
  • Save ibelgin/6b5052248ccac5d3e4be824c36edbce0 to your computer and use it in GitHub Desktop.
Save ibelgin/6b5052248ccac5d3e4be824c36edbce0 to your computer and use it in GitHub Desktop.
/* eslint-disable react-native/no-inline-styles */
import React from 'react';
import {
View,
Text,
StyleSheet,
SafeAreaView,
FlatList,
TouchableOpacity,
Modal,
} from 'react-native';
export default function MainScreen() {
const [modalVisible, setModalVisible] = React.useState(false);
const employees = [
{
id: 1,
first_name: 'Jaymee',
last_name: 'Imm',
email: 'jimm0@craigslist.org',
gender: 'Genderqueer',
age: 80,
},
{
id: 2,
first_name: 'Jody',
last_name: 'Themann',
email: 'jthemann1@skyrock.com',
gender: 'Agender',
age: 29,
},
{
id: 3,
first_name: 'Cece',
last_name: 'Carlet',
email: 'ccarlet2@jalbum.net',
gender: 'Male',
age: 69,
},
{
id: 4,
first_name: 'Elton',
last_name: 'Allinson',
email: 'eallinson3@jugem.jp',
gender: 'Male',
age: 31,
},
{
id: 5,
first_name: 'Garvy',
last_name: 'Shaddick',
email: 'gshaddick4@rediff.com',
gender: 'Male',
age: 32,
},
{
id: 6,
first_name: 'Fin',
last_name: 'Realy',
email: 'frealy5@unc.edu',
gender: 'Male',
age: 26,
},
{
id: 7,
first_name: 'Minnaminnie',
last_name: 'Fransseni',
email: 'mfransseni6@aboutads.info',
gender: 'Agender',
age: 52,
},
{
id: 8,
first_name: 'Fernando',
last_name: 'Pagon',
email: 'fpagon7@blogs.com',
gender: 'Male',
age: 40,
},
{
id: 9,
first_name: 'Tiphanie',
last_name: 'Fenny',
email: 'tfenny8@sakura.ne.jp',
gender: 'Female',
age: 52,
},
{
id: 10,
first_name: 'Nerti',
last_name: 'Try',
email: 'ntry9@shareasale.com',
gender: 'Female',
age: 43,
},
{
id: 11,
first_name: 'Abagael',
last_name: 'Beadell',
email: 'abeadella@unc.edu',
gender: 'Female',
age: 76,
},
{
id: 12,
first_name: 'Morten',
last_name: 'McNamee',
email: 'mmcnameeb@sun.com',
gender: 'Male',
age: 38,
},
{
id: 13,
first_name: 'Domenico',
last_name: 'Shearman',
email: 'dshearmanc@seesaa.net',
gender: 'Male',
age: 66,
},
{
id: 14,
first_name: 'Rodolphe',
last_name: 'Bittlestone',
email: 'rbittlestoned@51.la',
gender: 'Male',
age: 33,
},
{
id: 15,
first_name: 'Merv',
last_name: 'Watterson',
email: 'mwattersone@storify.com',
gender: 'Male',
age: 37,
},
{
id: 16,
first_name: 'Betty',
last_name: 'Simm',
email: 'bsimmf@engadget.com',
gender: 'Female',
age: 26,
},
{
id: 17,
first_name: 'Rafaellle',
last_name: 'Brighouse',
email: 'rbrighouseg@vinaora.com',
gender: 'Male',
age: 43,
},
{
id: 18,
first_name: 'Sibby',
last_name: 'Meanwell',
email: 'smeanwellh@independent.co.uk',
gender: 'Female',
age: 66,
},
{
id: 19,
first_name: 'Ricky',
last_name: 'Sissland',
email: 'rsisslandi@google.it',
gender: 'Male',
age: 76,
},
{
id: 20,
first_name: 'Sauveur',
last_name: 'Hessenthaler',
email: 'shessenthalerj@ocn.ne.jp',
gender: 'Male',
age: 48,
},
{
id: 21,
first_name: 'Carmela',
last_name: 'Bucksey',
email: 'cbuckseyk@acquirethisname.com',
gender: 'Female',
age: 22,
},
{
id: 22,
first_name: 'Nydia',
last_name: 'Folke',
email: 'nfolkel@disqus.com',
gender: 'Female',
age: 68,
},
{
id: 23,
first_name: 'Asia',
last_name: 'Boake',
email: 'aboakem@1und1.de',
gender: 'Female',
age: 39,
},
{
id: 24,
first_name: 'Sterne',
last_name: 'Jacobowitz',
email: 'sjacobowitzn@cbc.ca',
gender: 'Male',
age: 47,
},
{
id: 25,
first_name: 'Alwin',
last_name: 'Krolak',
email: 'akrolako@springer.com',
gender: 'Male',
age: 58,
},
{
id: 26,
first_name: 'Linn',
last_name: 'Copeman',
email: 'lcopemanp@google.nl',
gender: 'Male',
age: 37,
},
{
id: 27,
first_name: 'Britni',
last_name: 'Gumley',
email: 'bgumleyq@wordpress.org',
gender: 'Female',
age: 56,
},
{
id: 28,
first_name: 'Trumann',
last_name: 'Di Carli',
email: 'tdicarlir@xinhuanet.com',
gender: 'Male',
age: 62,
},
{
id: 29,
first_name: 'Deeanne',
last_name: 'Gun',
email: 'dguns@umich.edu',
gender: 'Female',
age: 64,
},
{
id: 30,
first_name: 'Fielding',
last_name: 'Begin',
email: 'fbegint@jalbum.net',
gender: 'Male',
age: 77,
},
{
id: 31,
first_name: 'Elga',
last_name: 'Ruegg',
email: 'erueggu@abc.net.au',
gender: 'Female',
age: 35,
},
{
id: 32,
first_name: 'Cesaro',
last_name: 'Clerk',
email: 'cclerkv@cbslocal.com',
gender: 'Male',
age: 37,
},
{
id: 33,
first_name: 'Harold',
last_name: 'Davioud',
email: 'hdavioudw@spiegel.de',
gender: 'Male',
age: 42,
},
{
id: 34,
first_name: 'Adrianne',
last_name: 'Sprankling',
email: 'aspranklingx@sciencedaily.com',
gender: 'Female',
age: 58,
},
{
id: 35,
first_name: 'Friedrick',
last_name: 'Stenners',
email: 'fstennersy@irs.gov',
gender: 'Male',
age: 41,
},
{
id: 36,
first_name: 'Nan',
last_name: 'Volette',
email: 'nvolettez@fc2.com',
gender: 'Female',
age: 27,
},
{
id: 37,
first_name: 'Darci',
last_name: 'Keuneke',
email: 'dkeuneke10@xrea.com',
gender: 'Female',
age: 80,
},
{
id: 38,
first_name: 'Doug',
last_name: 'Motton',
email: 'dmotton11@nationalgeographic.com',
gender: 'Male',
age: 66,
},
{
id: 39,
first_name: 'Cherin',
last_name: 'Walkley',
email: 'cwalkley12@craigslist.org',
gender: 'Female',
age: 20,
},
{
id: 40,
first_name: 'Efren',
last_name: 'Panter',
email: 'epanter13@google.de',
gender: 'Male',
age: 45,
},
{
id: 41,
first_name: 'Dorine',
last_name: 'Elcoate',
email: 'delcoate14@mit.edu',
gender: 'Female',
age: 61,
},
{
id: 42,
first_name: 'Liuka',
last_name: 'Lewis',
email: 'llewis15@bluehost.com',
gender: 'Female',
age: 43,
},
{
id: 43,
first_name: 'Gayla',
last_name: 'Inder',
email: 'ginder16@mediafire.com',
gender: 'Female',
age: 46,
},
{
id: 44,
first_name: 'Garrard',
last_name: 'Maxwaile',
email: 'gmaxwaile17@blinklist.com',
gender: 'Male',
age: 51,
},
{
id: 45,
first_name: 'Patric',
last_name: 'Woodburne',
email: 'pwoodburne18@java.com',
gender: 'Male',
age: 35,
},
{
id: 46,
first_name: 'Merrill',
last_name: 'Kemmis',
email: 'mkemmis19@ihg.com',
gender: 'Female',
age: 73,
},
{
id: 47,
first_name: 'Astrid',
last_name: 'Dorman',
email: 'adorman1a@trellian.com',
gender: 'Female',
age: 31,
},
{
id: 48,
first_name: 'Kippar',
last_name: 'Bastard',
email: 'kbastard1b@bbb.org',
gender: 'Male',
age: 31,
},
{
id: 49,
first_name: 'Allan',
last_name: 'Gibbins',
email: 'agibbins1c@ezinearticles.com',
gender: 'Genderfluid',
age: 44,
},
{
id: 50,
first_name: 'Melisenda',
last_name: 'Queree',
email: 'mqueree1d@intel.com',
gender: 'Female',
age: 52,
},
];
const [addedArray, setAdded] = React.useState([]);
const [id, setID] = React.useState([]);
const [average, setAverage] = React.useState(0);
const onClickAdd = item => {
setAdded([...addedArray, item]);
setID([...id, item.id]);
};
const onClickRemove = item => {
let added = addedArray.filter((value, index) => value.id != item);
let ided = id.filter((value, index) => value !== item);
setAdded(added);
setID(ided);
};
const renderItem = ({item}) => {
return (
<View style={styles.main_container}>
{!id.includes(item.id) ? (
<View style={styles.inner_box}>
<View style={styles.name_age_box}>
<Text style={styles.name_style}>{item.first_name}</Text>
<Text style={styles.age_style}>{item.age}</Text>
</View>
<View style={styles.add_button_main_view}>
<TouchableOpacity
style={styles.add_button_touch}
onPress={() => onClickAdd(item)}>
<Text style={styles.add_button_text}>Add</Text>
</TouchableOpacity>
</View>
</View>
) : (
<View style={styles.inner_box}>
<View style={styles.name_age_box}>
<Text style={{...styles.name_style, color: '#B4B4B4'}}>
{item.first_name}
</Text>
<Text style={{...styles.age_style, color: '#B4B4B4'}}>
{item.age}
</Text>
</View>
</View>
)}
</View>
);
};
const renderItemTeam = ({item}) => {
return (
<View style={styles.main_container}>
<View style={styles.inner_box}>
<View style={styles.name_age_box}>
<Text style={styles.name_style}>{item.first_name}</Text>
<Text style={styles.age_style}>{item.age}</Text>
</View>
<View style={styles.add_button_main_view}>
<TouchableOpacity
style={styles.add_button_touch}
onPress={() => onClickRemove(item.id)}>
<Text style={styles.add_button_text}>Remove</Text>
</TouchableOpacity>
</View>
</View>
</View>
);
};
React.useEffect(() => {
getAverage();
}, [addedArray]);
const getAverage = () => {
if (addedArray.length !== 0) {
let sum = 0;
addedArray.forEach((value, index) => {
sum += value.age;
});
setAverage(sum / addedArray.length);
} else {
setAverage(0);
}
};
const SortArray = () => {
let sorted = addedArray.sort((a, b) => {
if (a.first_name < b.first_name) {
return -1;
}
if (a.first_name > b.first_name) {
return 1;
}
return 0;
});
setAdded([...sorted]);
};
return (
<SafeAreaView style={styles.container}>
<TouchableOpacity
style={styles.title}
onPress={() => setModalVisible(true)}>
<Text style={styles.text}>Employees</Text>
</TouchableOpacity>
<FlatList
data={employees}
renderItem={renderItem}
keyExtractor={item => item.id}
/>
<Modal
animationType="none"
presentationStyle="fullScreen"
visible={modalVisible}>
<View style={styles.container}>
<View style={{...styles.title, flexDirection: 'row'}}>
<Text style={styles.text} onPress={() => setModalVisible(false)}>
Team
</Text>
<TouchableOpacity
style={styles.button_main_view}
onPress={() => SortArray()}>
<Text style={styles.sort_text}>Sort By Age</Text>
</TouchableOpacity>
</View>
<FlatList
data={addedArray}
renderItem={renderItemTeam}
keyExtractor={item => item.id}
/>
<View style={styles.average_main_view}>
<View style={styles.average_inner_box}>
<Text style={styles.average_text}>
Average Age <Text style={{fontSize: 28}}> {average}</Text>
</Text>
</View>
</View>
</View>
</Modal>
</SafeAreaView>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#FFF',
},
title: {
margin: 10,
padding: 30,
justifyContent: 'center',
alignItems: 'center',
},
text: {
color: '#121212',
fontSize: 24,
fontWeight: 'bold',
},
main_container: {
height: 100,
width: '100%',
justifyContent: 'center',
alignItems: 'center',
},
inner_box: {
height: '90%',
width: '95%',
backgroundColor: '#D9D9D9',
flexDirection: 'row',
},
name_age_box: {
height: '100%',
width: '70%',
flexDirection: 'row',
alignItems: 'center',
},
name_style: {
color: '#000',
fontSize: 20,
paddingHorizontal: 20,
fontWeight: 'bold',
},
age_style: {
color: '#000',
fontSize: 20,
},
add_button_main_view: {
height: '100%',
width: '30%',
justifyContent: 'center',
alignItems: 'center',
},
add_button_touch: {
height: '50%',
width: '80%',
backgroundColor: '#5272FD',
justifyContent: 'center',
alignItems: 'center',
},
add_button_text: {
fontSize: 17,
fontWeight: 'bold',
color: '#FFF',
},
average_main_view: {
height: 80,
width: '100%',
justifyContent: 'center',
alignItems: 'center',
},
average_inner_box: {
height: '90%',
width: '90%',
backgroundColor: '#A6A6A6',
justifyContent: 'center',
alignItems: 'center',
},
average_text: {
fontSize: 25,
fontWeight: 'bold',
color: '#000',
},
button_main_view: {
backgroundColor: '#FC66C5',
padding: 17,
margin: 10,
marginTop: 40,
borderRadius: 40,
},
sort_text: {
color: '#FFF',
fontWeight: 'bold',
},
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment