No Description

App.js 11KB

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