No Description

App.js 10KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474
  1. import { StatusBar } from 'expo-status-bar';
  2. import React, {useState, useEffect} from 'react';
  3. import { View, Image, StyleSheet, Text, Button, ScrollView, Pressable} from 'react-native';
  4. import DropDownPicker from 'react-native-dropdown-picker';
  5. //import JSON;
  6. //import { Dataframe, readJSON } from "danfojs";
  7. //where data will be put
  8. var organizedData
  9. //where data will be stored
  10. var information = "data goes here"
  11. //organize data make it pretty
  12. //add loading thing while this organizes all the data !!!
  13. function organize(){
  14. var stringDiv = JSON.stringify(information)
  15. stringDiv = stringDiv.replace('[[', '');
  16. stringDiv = stringDiv.replace(']]', '');
  17. stringDiv = stringDiv.split(',')
  18. //create smaller array variables
  19. let variables = []
  20. let value = []
  21. let est = []
  22. //theres a better way to do this but im not fixing it rn
  23. for(let i = 0; i<stringDiv.length; i++){
  24. if(i<stringDiv.length/3)
  25. {variables.push(stringDiv[i])}
  26. else if(i<stringDiv.length/3*2)
  27. {value.push(stringDiv[i])}
  28. else{est.push(stringDiv[i])}
  29. }
  30. //anyways this to format it
  31. console.log("vars:",variables)
  32. console.log("val:",value)
  33. console.log("est:",est)
  34. //organizedData = JSON.parse(information)
  35. //console.log(stringDiv)
  36. }
  37. //fix
  38. DropDownPicker.setListMode("SCROLLVIEW")
  39. //data query variables (global)
  40. const queryBase = "https://api.census.gov/data/2020/acs/acs5/profile?get=group"
  41. const queryEnd = "&in=state:72"
  42. var table = ""
  43. var pueblo = ""
  44. function updateTable(value){
  45. table = value
  46. }
  47. function updatePueblo(value){
  48. pueblo = value
  49. }
  50. //calls data query
  51. function loadDoc(query) {
  52. var xhttp = new XMLHttpRequest();
  53. xhttp.onreadystatechange = function() {
  54. if (this.readyState == 4 && this.status == 200) {
  55. information = this.responseText;
  56. organize()
  57. }
  58. };
  59. xhttp.open("GET", query, true);
  60. xhttp.send();
  61. }
  62. //"https://api.census.gov/data/2020/acs/acs5/profile?get=group(DP02PR)&for=county:127&in=state:72"
  63. function fetchData() {
  64. console.log("fetching data")
  65. var query = queryBase + "(" + table + ")&for=county:" + pueblo + queryEnd
  66. if(pueblo && table)
  67. {loadDoc(query)}
  68. else
  69. {Alert.alert("Please fill every parameter before calling!")}
  70. }
  71. //change this to an external css file later
  72. const styles = StyleSheet.create({
  73. buttons: {
  74. flexDirection: 'row',
  75. justifyContent: 'center',
  76. marginTop: 40,
  77. marginBottom: 30,
  78. margin: 30,
  79. borderColor: "grey",
  80. borderRadius: 8,
  81. padding: (30, 16),
  82. backgroundColor: "#008CBA",
  83. marginTop: 0
  84. },
  85. buttonContainer: {
  86. flexDirection: 'column',
  87. backgroundColor: 'black',
  88. alignItems: 'center',
  89. justifyContent: 'center',
  90. paddingTop:100,
  91. marginTop: 20,
  92. },
  93. container: {
  94. flexDirection: 'column',
  95. justifyContent: 'center',
  96. backgroundColor: 'black',
  97. alignItems: 'center',
  98. justifyContent: 'center',
  99. paddingTop:20,
  100. marginTop: 20,
  101. },
  102. containerbackground:{
  103. backgroundColor: '#063970'
  104. },
  105. intro: {
  106. fontWeight: "bold",
  107. color:"#beb2c8",
  108. fontSize: 30,
  109. },
  110. sub: {
  111. color:"#beb2c8",
  112. fontWeight: "bold",
  113. fontSize: 15,
  114. paddingBottom:10,
  115. },
  116. Navsub: {
  117. color:"#beb2c8",
  118. fontWeight: "bold",
  119. fontSize: 30,
  120. paddingBottom:10,
  121. },
  122. scrollView:{
  123. marginHorizontal: 20
  124. },
  125. listItem:{
  126. fontSize: 30,
  127. color: "white",
  128. textDecorationLines: "underline"
  129. },
  130. listButtons:{
  131. fontSize: 15,
  132. color: "white",
  133. textDecorationLines: "underline"
  134. },
  135. buttonsVer: {
  136. flexDirection: 'column',
  137. justifyContent: 'center',
  138. marginTop: 40,
  139. marginBottom: 30,
  140. margin: 30,
  141. borderColor: "grey",
  142. }
  143. });
  144. //default button press
  145. const handlePress = () => false
  146. //data parsing goes here
  147. function getInfo(){
  148. //console.log(information[6])
  149. return information
  150. }
  151. //data display
  152. class DataButton extends React.Component{
  153. state = {
  154. click: false
  155. }
  156. pullData = () => {fetchData(); this.setState({click: true})}
  157. render() {
  158. return(
  159. <View>
  160. <Button
  161. onPress = {this.pullData}
  162. title = "Fetch Data"
  163. color = "black"
  164. />
  165. <Text style={styles.sub}>{getInfo()}</Text>
  166. </View>
  167. );}
  168. }
  169. //picker test
  170. function Picker() {
  171. //table to pick from
  172. const [openTable, setOpenTable] = useState(false);
  173. const [valueTable, setValueTable] = useState(null);
  174. const [table, setTable] = useState([
  175. {label:'DP02PR', value: 'DP02PR'},
  176. {label:'DP03', value: 'DP03'},
  177. {label:'DP04', value: 'DP04'},
  178. {label:'DP05', value: 'DP05'},
  179. ]);
  180. //cambiar pueblo
  181. //pueblo
  182. const [openPueblo, setOpenPueblo] = useState(false);
  183. const [valuePueblo, setValuePueblo] = useState(null);
  184. const [pueblo, setPueblo] = useState([
  185. {label: 'Adjuntas', value: '001'},
  186. {label: 'Aguada', value: '003'},
  187. {label: 'Aguadillas', value: '005'},
  188. {label: 'Aguas Buenas', value: '007'},
  189. {label: 'Aibonito', value: '009'},
  190. {label: 'Añasco', value: '011'},
  191. {label: 'Arecibo', value: '013'},
  192. {label: 'Arroyo', value: '015'},
  193. {label: 'Barceloneta', value: '017'},
  194. {label: 'Barranquitas', value: '019'},
  195. {label: 'Bayamón', value: '021'},
  196. {label: 'Cabo Rojo', value: '023'},
  197. {label: 'Caguas', value: '025'},
  198. {label: 'Camuy', value: '027'},
  199. {label: 'Canóvanas', value: '029'},
  200. {label: 'Carolina', value: '031'},
  201. {label: 'Cataño', value: '033'},
  202. {label: 'Cayey', value: '035'},
  203. {label: 'Ceiba', value: '037'},
  204. {label: 'Ciales', value: '039'},
  205. {label: 'Cidra', value: '041'},
  206. {label: 'Coamo', value: '043'},
  207. {label: 'Comerío', value: '045'},
  208. {label: 'Corozal', value: '047'},
  209. {label: 'Culebra', value: '049'},
  210. {label: 'Dorado', value: '051'},
  211. {label: 'Fajardo', value: '053'},
  212. {label: 'Florida', value: '054'},
  213. {label: 'Guánica', value: '055'},
  214. {label: 'Guayama', value: '057'},
  215. {label: 'Guayanilla', value: '059'},
  216. {label: 'Guaynabo', value: '061'},
  217. {label: 'Gurabo', value: '063'},
  218. {label: 'Hatillo', value: '065'},
  219. {label: 'Hormigueros', value: '067'},
  220. {label: 'Humacao', value: '069'},
  221. {label: 'Isabela', value: '071'},
  222. {label: 'Jayuya', value: '073'},
  223. {label: 'Juana Díaz', value: '075'},
  224. {label: 'Juncos', value: '077'},
  225. {label: 'Lajas', value: '079'},
  226. {label: 'Lares', value: '081'},
  227. {label: 'Las Marías', value: '083'},
  228. {label: 'Las Piedras', value: '085'},
  229. {label: 'Loíza', value: '087'},
  230. {label: 'Luquillo', value: '089'},
  231. {label: 'Manatí', value: '091'},
  232. {label: 'Maricao', value: '093'},
  233. {label: 'Maunabo', value: '095'},
  234. {label: 'Mayagüez', value: '097'},
  235. {label: 'Moca', value: '099'},
  236. {label: 'Morovis', value: '101'},
  237. {label: 'Naguabo', value: '103'},
  238. {label: 'Naranjito', value: '105'},
  239. {label: 'Orocovis', value: '107'},
  240. {label: 'Patillas', value: '109'},
  241. {label: 'Peñuelas', value: '111'},
  242. {label: 'Ponce', value: '113'},
  243. {label: 'Quebradillas', value: '115'},
  244. {label: 'Rincón', value: '117'},
  245. {label: 'Río Grande', value: '119'},
  246. {label: 'Sabana Grande', value: '121'},
  247. {label: 'Salinas', value: '123'},
  248. {label: 'San Germán', value: '125'},
  249. {label: 'San Juan', value: '127'},
  250. {label: 'San Lorenzo', value: '129'},
  251. {label: 'San Sebastián', value: '131'},
  252. {label: 'Santa Isabel', value: '133'},
  253. {label: 'Toa Alta', value: '135'},
  254. {label: 'Toa Baja', value: '137'},
  255. {label: 'Trujillo Alto', value: '139'},
  256. {label: 'Utuado', value: '141'},
  257. {label: 'Vega Alta', value: '143'},
  258. {label: 'Vega Baja', value: '145'},
  259. {label: 'Vieques', value: '147'},
  260. {label: 'Villalba', value: '149'},
  261. {label: 'Yabucoa', value: '151'},
  262. {label: 'Yauco', value: '153'}
  263. ]);
  264. return (
  265. <View>
  266. <DropDownPicker
  267. open={openTable}
  268. value={valueTable}
  269. items={table}
  270. setOpen={setOpenTable}
  271. setValue={setValueTable}
  272. setItems={setTable}
  273. onChangeValue = {(valueTable) => {
  274. updateTable(valueTable);
  275. }}
  276. onOpen = {() => {setOpenPueblo(false)}}
  277. zIndex={3000}
  278. zIndexInverse={1000}
  279. placeholder="Tabla de Datos"
  280. />
  281. <DropDownPicker
  282. searchable={true}
  283. open={openPueblo}
  284. value={valuePueblo}
  285. items={pueblo}
  286. setOpen={setOpenPueblo}
  287. setValue={setValuePueblo}
  288. setItems={setPueblo}
  289. onChangeValue = {(valuePueblo) => {
  290. updatePueblo(valuePueblo);
  291. }}
  292. onOpen = {() => {setOpenTable(false)}}
  293. zIndex={1000}
  294. zIndexInverse={3000}
  295. placeholder="Pueblo"
  296. searchPlaceholder="Busqueda..."
  297. />
  298. </View>
  299. );
  300. }
  301. //actual application
  302. class App extends React.Component {
  303. //the text at the end of a page gets cut off if anyone knows how to fix that?
  304. vars = {
  305. welcome:
  306. <View style = {styles.containerbackground}>
  307. <ScrollView style={styles.scrollView}>
  308. <View style = {styles.container}>
  309. <Text style={styles.intro}>BIENVENIDO!!!!</Text>
  310. <Image source={require('./Logo.jpeg')} />
  311. </View>
  312. <View style = {styles.container}>
  313. <Text style={styles.sub}>Aqui podra mantenerse al tanto con las
  314. ultimas noticias relacionadas al censo y tambien verificar
  315. las tablas por municipio.</Text>
  316. </View>
  317. </ScrollView>
  318. </View>,
  319. newsView:
  320. <View style = {styles.containerbackground}>
  321. <ScrollView style={styles.scrollView}>
  322. <View style = {styles.container}>
  323. <Text style={styles.intro}>Noticias</Text>
  324. <Image source={require('./Logo.jpeg')} />
  325. </View>
  326. </ScrollView></View>,
  327. dataOp:
  328. <View style = {styles.containerbackground}>
  329. <ScrollView nestedScrollEnabled = {true} style={styles.scrollView}>
  330. <View style = {styles.container}>
  331. <Text style={styles.intro}>DATA VIEWING PROJECT</Text>
  332. <Picker />
  333. <Image source={require('./testimg.gif')} />
  334. <DataButton />
  335. <Text style={styles.sub}>blehhhhhh bleh bleh bleh bleh bleh blehhhhhhhhhhhhhhhhh </Text>
  336. </View>
  337. </ScrollView></View>
  338. }
  339. //current state
  340. state = {current: this.vars.welcome}
  341. //state changing functions
  342. setHome = () => this.setState({ current: this.vars.welcome })
  343. setData = () => this.setState({current: this.vars.dataOp})
  344. setNews = () => this.setState({ current: this.vars.newsView })
  345. //render app
  346. render() {
  347. return (
  348. <View>
  349. <View style = {styles.containerbackground}>
  350. <View style = {styles.buttonContainer}>
  351. <Text style={styles.Navsub}> Demographic Data Viewer</Text>
  352. <Text style={styles.sub}> Navegador</Text>
  353. <View style = {styles.buttons}>
  354. <Button
  355. onPress = {this.setNews}
  356. title = "Noticias"
  357. color = "rgba(255, 0, 0, 0)"
  358. />
  359. <Button
  360. onPress = {this.setData}
  361. title = "Datos"
  362. color = "rgba(255, 0, 0, 0)"
  363. />
  364. </View>
  365. {this.state.current}
  366. </View>
  367. </View>
  368. </View>
  369. );
  370. }
  371. }
  372. export default App