Без опису

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. import React, {useState, useEffect} from 'react';
  2. import { View, StyleSheet, Text } from 'react-native';
  3. import axios from 'axios'
  4. import { Table, Row, Rows, TableWrapper, Col } from 'react-native-table-component';
  5. import {Picker} from '@react-native-community/picker'
  6. import * as SecureStore from 'expo-secure-store';
  7. const MyCurriculum = () =>{
  8. const [year, setYear] = useState(2)
  9. const [semester, setSemester] = useState(1)
  10. const [tableHead, setTableHead] = useState(['','Code', 'Title', 'Credits', 'Grade'])
  11. const [tableData, setTableData] = useState([])
  12. const [tableTitle, setTableTitle] = useState([])
  13. const getMyCurriculum = async()=>{
  14. const token = await SecureStore.getItemAsync('token')
  15. let id = await SecureStore.getItemAsync('id')
  16. let user_id = parseInt(id)
  17. let courses = []
  18. let numbers = []
  19. try {
  20. let response = await axios(`http://8ad793de242b.ngrok.io/api/get_all_courses_by_semester?user_id=${user_id}&year=${year}&semestre=${semester}`, {
  21. method: 'GET',
  22. headers: {
  23. 'content-type': 'application/json',
  24. Authorization: `Token ${token}`
  25. },
  26. })
  27. response = response.data.list // javaScript object
  28. // setting a column with numbers
  29. for (let i = 1; i < response.length + 1; i++){
  30. numbers.push(i)
  31. }
  32. setTableTitle(numbers)
  33. // convert javascript array of objects to a javascript 2d array
  34. response.map((data)=>{
  35. let info = [data.code, data.name, data.creditos, data.grade]
  36. courses.push(info)
  37. })
  38. setTableData(courses)
  39. } catch(error){
  40. console.log(error)
  41. }
  42. }
  43. useEffect(()=>{
  44. console.log('dimelo')
  45. getMyCurriculum()
  46. }, [year, semester])
  47. return (
  48. <View style={styles.container}>
  49. <Table borderStyle={{borderWidth: 2, borderColor: '#0f0f0f'}}>
  50. <Row data={tableHead} flexArr={[0.9, 3.5, 10, 2.3, 2.3]} style={styles.head} textStyle={styles.text}/>
  51. <TableWrapper style={styles.wrapper}>
  52. <Col data ={tableTitle} style={styles.title} heightArr={[28,28]} textStyle={styles.text}/>
  53. <Rows data={tableData} flexArr={[3.5,10,2.3,2.3]} style={styles.row} textStyle={styles.text} />
  54. </TableWrapper>
  55. </Table>
  56. <View style={{flexDirection: 'row'}}>
  57. <View style={{margin: 8}}>
  58. <Text>Year</Text>
  59. <Picker
  60. selectedValue={year}
  61. style={{ width: 50}}
  62. onValueChange={(itemValue, itemIndex) => setYear(itemValue) }>
  63. <Picker.Item label="1" value="1" />
  64. <Picker.Item label="2" value="2" />
  65. <Picker.Item label="3" value="3" />
  66. <Picker.Item label="4" value="4" />
  67. <Picker.Item label="5" value="5" />
  68. <Picker.Item label="6" value="6" />
  69. </Picker>
  70. </View>
  71. <View style={{margin: 8}}>
  72. <Text>Semester</Text>
  73. <Picker
  74. selectedValue={semester}
  75. style={{ width: 50}}
  76. onValueChange={(itemValue, itemIndex) => setSemester(itemValue) }>
  77. <Picker.Item label="1" value="1" />
  78. <Picker.Item label="2" value="2" />
  79. <Picker.Item label="3" value="3" />
  80. </Picker>
  81. </View>
  82. </View>
  83. </View>
  84. );
  85. }
  86. export default MyCurriculum
  87. const styles = StyleSheet.create({
  88. container: { flex: 1, padding: 16, paddingTop: 30, backgroundColor: '#fff' },
  89. head: { height: 40, backgroundColor: '#e82020' },
  90. wrapper: { flexDirection: 'row' },
  91. title: { flex: 1, backgroundColor: '#e82020' },
  92. row: { height: 28 },
  93. text: { textAlign: 'center', fontSize:10 }
  94. });