From c87e20da70493a9f6b7a64832e3007e4acb4f751 Mon Sep 17 00:00:00 2001 From: ivivanov18 Date: Sun, 15 Jul 2018 01:29:30 +0300 Subject: [PATCH 1/2] feat: added weather api fetch capabilities feat: added result component, used FlatList to show the results feat: added styles to the result list --- .DS_Store | Bin 0 -> 8196 bytes App.js | 6 +- Styles.js | 23 +++---- components/About.js | 2 +- components/Result.js | 24 +++---- components/Search.js | 8 +-- components/weather/WeatherRow.js | 103 +++++++++++++++++++++++++++++-- package.json | 1 + resources/.DS_Store | Bin 0 -> 8196 bytes resources/icons/cloud.png | Bin 0 -> 16392 bytes resources/icons/rain.png | Bin 0 -> 10880 bytes resources/icons/sun.jpg | Bin 0 -> 8793 bytes yarn.lock | 2 +- 13 files changed, 125 insertions(+), 44 deletions(-) create mode 100644 .DS_Store create mode 100644 resources/.DS_Store create mode 100644 resources/icons/cloud.png create mode 100644 resources/icons/rain.png create mode 100644 resources/icons/sun.jpg diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..abd6f017c7020b37a6231637647330a1e39138ec GIT binary patch literal 8196 zcmeHMYfKzf6h3Exc4mMw)V6@@mbDb6EwnsZ%2ryJmzI`FBTIRdvdr#`FmagK?#%Ae zQVeQr)EJGA#Q2J)`mZMa)x`M6#JAD-h#Oyt#>9XAGX68h$GLL{LV5f!CQ8z|$-U>! zJ?Gqe&v(C>o3jf5*qKqA04f1Mpvt6NOwB5V=~-P-0^Ud=NhE)O45T3m8rX^43TuDB zN5DtGN5DtGN5Ds5Js?1LHY>s!_deJ9t&f0@z;%fL`#yxJG8y&cJeTgLgBmvlAjwhy zw@{z*0M{q%$*3pixpZA=PM$rW=Zap6f!v++VP;M;>dAR7xjP_t2lQ4(FGE3hb@B_l z=73Qy{nkgoM_?ra?DY{TYp0wYtfl$8ok|#1g0vqcQig6jjg4PpprEj5!$v_A1+i2- zGcaZ41{}r7*quuHwELv1TEgqcEX!EzD~VIOmW#_j=YLa5&?hAI^Ydyh$dad~r=BIr*!x@Fp@w6sk!E|=Ma zL2uGBPo_1dA4*zAX4~X{XCIjLUMy*6!BG zPS0xHWNi=YG#xXOQM_ETHMHZFJ&gwr-QJxq-Bc!*ZrOs?@DXb@?ohixLcGJA!gIA`4kP(K2f&C*u8YJ+_hQS zFUYDmXebHI;6n$ch#(&qhq4?^KG-fD5z4V%98Ox((-f!8hdY8@g8ZQ{&erZzY^Oh^ znY28MuBSQ}9AV=fs;a4iAk;+b_{qC4h&9nhj|c)(!Ctygj=~u6Jp~WKWAHdU0WZL7 za0RZyTkrvV0-wR>@CAGaKf=%OEBp?Bz@P9J3MgVRmS7d`z#80%jTpg0*p7#>6OUsb z-i7@b!!tOJ6R6-MrtmD<=->r>2ruFz_$WS&FXBu1GQNUW@C|$$-@$kBJ^U2E#5~_$ zV1c+Ny#0Ctzo*VB?F{~_+TC7i7{Y}vZKrmms+V0*{nfi644 zrF3!`#3|xZXMq~-L0-#8PHQPNNDR|v)?&B3k#R}LGwbSbC?qoy@yDID^cWzX^T%Dg zLy}xTEEZkkz5Aq)TttNB+Lry2Bo`8+xwb7r+6}~AAzxKdxlKAEMMd_y$>2JRwIN9m z|2YpY!DV<8-iMEge_z25@Duz3zY+I}una4Rc{gDQx8tq23-@3>Hef5Z5eIK07WUws z*o()Ai7`Bd!#IMYm_&_uIE6Z_0_BQN2r%lOy3jDN4M z&cEzH+B7V4lC%rVz1GoxTHgp1@a^tF zXSsHm>I79*nB6>=t_wBHgpIrDILXC745=UXbWu;vb4eO1|M?FA{{4Ru{rlhL-u2x4 E4a`I7c>n+a literal 0 HcmV?d00001 diff --git a/App.js b/App.js index ba944b2..34d11f2 100644 --- a/App.js +++ b/App.js @@ -5,6 +5,8 @@ import { createBottomTabNavigator } from "react-navigation"; import About from "./components/About"; import Search from "./components/Search"; +import globalStyles from "./Styles"; + const Tabs = createBottomTabNavigator( { About: About, @@ -19,7 +21,7 @@ const Tabs = createBottomTabNavigator( textAlignVertical: "center" }, style: { - backgroundColor: "#199BB4", + backgroundColor: globalStyles.color, height: 30 } } @@ -40,6 +42,6 @@ export default class App extends React.Component { const styles = StyleSheet.create({ container: { flex: 1, - backgroundColor: "#B5E0D8" + backgroundColor: globalStyles.greenColor } }); diff --git a/Styles.js b/Styles.js index 33759de..7b8cacb 100644 --- a/Styles.js +++ b/Styles.js @@ -1,8 +1,12 @@ const blue = "#199BB4"; -const green = "#B5E0D8"; +//const green = "#B5E0D8"; +const greenDark = "#00b386"; +const green = "#00cc99"; export default { - color: blue, + greenColor: green, + blueColor: blue, + color: greenDark, container: { margin: 20, backgroundColor: green @@ -13,7 +17,7 @@ export default { textAlign: "center" }, button: { - backgroundColor: blue, + backgroundColor: greenDark, color: "#FFFFFF" }, input: { @@ -24,20 +28,9 @@ export default { paddingHorizontal: 10 }, header: { - backgroundColor: blue + backgroundColor: greenDark }, headerTitle: { color: "#FFF" } }; - -/* -const styles = StyleSheet.create({ - view: { - margin: 20, - marginTop: 50, - backgroundColor: "#B5E0D8" - } -}); - -*/ diff --git a/components/About.js b/components/About.js index a1147e7..8cae8d8 100644 --- a/components/About.js +++ b/components/About.js @@ -32,7 +32,7 @@ const style = StyleSheet.create({ view: { margin: 20, marginTop: 50, - backgroundColor: "#B5E0D8" + backgroundColor: globalStyles.color } }); diff --git a/components/Result.js b/components/Result.js index 5c7fcbe..41bde89 100644 --- a/components/Result.js +++ b/components/Result.js @@ -9,24 +9,21 @@ import globalStyles from "../Styles"; class Result extends Component { static navigationOptions = ({ navigation }) => { - //console.log("PARAMS : ", params); - /*return { - title: `Weather in / ${navigation.state.params.city}` - };*/ + return { + title: `Weather in ${navigation.state.params.city}` + }; }; constructor(props) { super(props); this.state = { - city: "Sofia", //this.props.navigation.state.params.city, + city: this.props.navigation.state.params.city, report: null }; - console.log("CONSTRUCTOR"); - this.fetchWeather(); } componentDidMount = () => { - console.log("MOUNTED: ", this.state.report); + this.fetchWeather(); }; fetchWeather = () => { @@ -34,10 +31,9 @@ class Result extends Component { .get( `http://api.openweathermap.org/data/2.5/forecast?q=${ this.state.city - }&mode=json&units=metric&cnt=12&APPID=7ad755a5c950ed324a9376b774cd75db` + }&mode=json&units=metric&APPID=7ad755a5c950ed324a9376b774cd75db` ) .then(response => { - console.log(response.data); this.setState({ report: response.data }); @@ -49,14 +45,12 @@ class Result extends Component { if (this.state.report === null) { return ; } else { - console.log("REPORT: ", this.state.report.list); - console.log("type", typeof this.state.report.list); - this.state.report.list.map(row => console.log(row.main.temp)); return ( ( - + keyExtractor={item => item.dt} + renderItem={({ item, index }) => ( + )} /> ); diff --git a/components/Search.js b/components/Search.js index 4b55aa4..1e50098 100644 --- a/components/Search.js +++ b/components/Search.js @@ -54,12 +54,12 @@ const navigationOptions = { }; export default createStackNavigator({ - Result: { - screen: Result, - navigationOptions - }, Search: { screen: Search, navigationOptions + }, + Result: { + screen: Result, + navigationOptions } }); diff --git a/components/weather/WeatherRow.js b/components/weather/WeatherRow.js index 64f575b..51ae417 100644 --- a/components/weather/WeatherRow.js +++ b/components/weather/WeatherRow.js @@ -1,5 +1,11 @@ import React, { Component, PropTypes } from "react"; -import { View, Text } from "react-native"; +import { View, Text, StyleSheet, Image } from "react-native"; +import moment from "moment"; +import "moment/locale/fr"; + +import globalStyles from "../../Styles"; + +moment.locale("fr"); class WeatherRow extends Component { /*static propTypes = { @@ -12,13 +18,98 @@ class WeatherRow extends Component { console.log("PROPS KEY:", props); } + day = () => { + const day = moment(this.props.day.dt * 1000).format("ddd"); + return {day.toUpperCase()}; + }; + + date = () => { + const date = moment(this.props.day.dt * 1000).format("DD/MM"); + return {date}; + }; + + icon = (size = 50) => { + const typeWeather = this.props.day.weather[0].main.toLowerCase(); + + let image = null; + switch (typeWeather) { + case "clouds": + image = require("../../resources/icons/cloud.png"); + break; + case "rain": + image = require("../../resources/icons/rain.png"); + break; + default: + image = require("../../resources/icons/sun.jpg"); + break; + } + + return ; + }; + render() { - return ( - - {this.props.day.item.main.temp} °C - - ); + if (this.props.index === 0) { + return ( + + + + {this.day()} {this.date()}{" "} + + {this.icon(90)} + + + {Math.round(this.props.day.main.temp)} °C + + + ); + } else { + return ( + + + {this.icon()} + + + {this.day()} {this.date()}{" "} + + + + {Math.round(this.props.day.main.temp)} °C + + + ); + } } } +const styles = StyleSheet.create({ + white: { + color: "#FFF" + }, + bold: { + fontWeight: "bold" + }, + flex: { + flex: 1, + flexDirection: "row", + alignItems: "center" + }, + firstView: { + backgroundColor: globalStyles.blueColor + }, + view: { + backgroundColor: globalStyles.greenColor, + borderWidth: 0, + borderBottomWidth: 1, + borderBottomColor: "#055864", + paddingHorizontal: 20, + paddingVertical: 10, + justifyContent: "space-between" + }, + temp: { + color: "#FFF", + fontWeight: "bold", + fontSize: 22 + } +}); + export default WeatherRow; diff --git a/package.json b/package.json index af24f81..4827bd7 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "dependencies": { "axios": "^0.18.0", "expo": "^27.0.1", + "moment": "^2.22.2", "react": "16.3.1", "react-native": "~0.55.2", "react-navigation": "^2.6.0" diff --git a/resources/.DS_Store b/resources/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1ce63cfe515d2d2cb9003cac0eaa7cd145f0eacb GIT binary patch literal 8196 zcmeHMS!~=y82D1QlBazUXZvEh(oNnBoGpBJR#l?;`qnoL^&EHUVy3|Y37^b z|2;F`eCyHg1pw^Ks7(Ns03c9iC>K+4g~Y~LUXub|Paz?aKY*Rc*{OtKCDz#b9XO=+0(ISm)m7qkic#;4^SdGQi#sVag1n9xiZnUmaAqApju@0o+7& ziUVAqu!m6(7dX1E^h_Q-py!HSh=JUl#>32D-2uIs(Th;fot^x`t~p?o zqhIgTc$mvrES8vTxQeWdy|%VGOe-k z;iP3`W=uOSmnRh?nK2Yc>oAM~{hVfxINGekYGbyQcDh`{xGZOE?M{vC^sLrR*7k@_ zk7H&siWf_^hIZVvr}4m{Tf6h6o66+!&5|@m9&f>s_TQn^-M=H3H?k)ch1T+f{>Rtm6b}>!5c;SvM{dFa!yz( zn@M#?g4MxVK{&~1<2L8yt=@e_Ax5No21o&W@>g1vNq9EEYvAO-isqwp9!4$s4@a0xEMoA5q- z44=Yh@Hu=7Kfq7$3;YJZ!yoV`3MgVRmS7d`z#80%jTpg0*p7#>6OUsb-hurX!_zo{ zlc?Ynrtl2f=-_#L03XDM@ezCqU%(gfC43n#;p_MozK!qTyZ8xyfqA~Zz@lJJc^CiLm`=ohc|cDQZqpM=FMHZLy}xT>J?q% zz5Aq)Ttq_Uqb>U-NiHNM^U<~ljcy>#3i+yv%5BmSDJrs`nGCM8SR0ZA@t^DO0$hYQ z;63<=boV8E4?n`s@GEJq2+Od76n6uLa68_NyKoQIV*|Eg8)@$rQeO|=j=gw{6d1!H z9Klf>!z5~?ziHGlP5R4X4rlRRywBC)L-+(fNlJX0lz0JOS*5$)Rl0j^rS7r=Y16RG zDe7HR>PiQ{b#*gPz?Wai;{TrYzyDv|oAg)jGvG7uw+vum_ds_inXLDkXR&se@+4)J ynB4+L*M$l<94B3wlHDeG6 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

9v0$(%&%?}$EIk+9Ek z*7|c(1$;LPcV!Ibe6=`dq!XusR0$9k{%vaSp;pGBaex)!?bue=0b3ZfC0gq0P3N;T zl7kCUBwmHzg0F5Sh>9cEDu)O}hw_5^{oA88o%;9Pzb!Dilc)8D+PnCrD6cd;x=5Nd zn-R-^lNRhb)JRR33Ds}t1|zFRIr=UTuK|6fmk+TLBq%9+(cm}y9rUwZN*qM?>08y= zBHY8a!+-GFel@?$D@fJp#q4(!dH#8*HS25iEhcNP--Rm_(48@{E1WYMi}MJ&nQeMG z^rV~BdKG>1H`?7B zD%vK%V>;$XhWSPpG#;LVnPdBG7WmbQh_NH^3TW|D!?az3q;LK3vUb_sDQgRZ=m5vJ zq|%|20lOZCY+n!*7+qQoSvzxfO5jy;ex&GBW~JL`re$^46{)Q9#WJ6ax)xF)k;@0p zEYE}H+)vGKSzG%wGf|#nM^OF3EnK16Z{j~47mx+b#_3T?vz-T%V7ZtZIoi=~+LFI$ znqyc!+I$e!!D-9}oHfbG`Ph~m-0e3zBo<(~q9Dgr3j6_Zb`G3E5{ig5`7O}3%>twV zwkk^7gUQk$;Lv1XNjf5X3_SrY;d^NQW?z$Z%~P3^60T_Wd5)GIf^qnjWj|%{1H%zz zk9jG_gMO#bZ)V!YpB29Lg38O}QpHb=Kk&HYWp7c!el-}p-p~GcnP7s@&-%ntLf>ez z%2vGCRBK9>w#ax7_X{x~>(Sg`&tb(xZ=tXgGj3CNWC0cm^C8u>Qg7GxygS0t^2Rw+ zW{)?USgoL^jUI2;kALR&1O;)mN~3HN;^7GHLaTd)F$J5ur{g}_d_2)(KcpQALZ13 zpy7k~*nXfbO#6n+kZwLNTB+!#&D++GJ9$U9%&7g%(RyZ>i9Pn6IdJE1TH{FIn?rHy zE4c8^c*JF<-vaNGjxHQ4b2`D71R`pt1v+GzYdrLUw131q%0S0@yR~D-!KZ5t+Z}Wr za-E5wj`=p(u{K%#-t0qni0T)eJLH_Am{0OE=T4jZwOGJOc$hWHZD*Zx!mXiCAat^= xID*Q5fBe@P$FEgA*KDptw6JK?+5Sw?&FWp;*zN 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 literal 0 HcmV?d00001 diff --git a/yarn.lock b/yarn.lock index 3535702..671878e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4750,7 +4750,7 @@ mkdirp@*, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: dependencies: minimist "0.0.8" -moment@2.x.x, moment@^2.10.6: +moment@2.x.x, moment@^2.10.6, moment@^2.22.2: version "2.22.2" resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66" From 44daf44696c1626f2e3031970feee9dbc87208ea Mon Sep 17 00:00:00 2001 From: ivivanov18 Date: Sun, 15 Jul 2018 23:26:30 +0300 Subject: [PATCH 2/2] feat: added animation to animate the list of results from the research --- components/Search.js | 3 +++ components/animation/FadeInView.js | 37 +++++++++++++++++++++++++++ components/weather/WeatherRow.js | 41 +++++++++++++++++------------- 3 files changed, 63 insertions(+), 18 deletions(-) create mode 100644 components/animation/FadeInView.js diff --git a/components/Search.js b/components/Search.js index 1e50098..ac7cb34 100644 --- a/components/Search.js +++ b/components/Search.js @@ -34,6 +34,9 @@ class Search extends Component { onChangeText={text => { this.setCity(text); }} + onSubmitEditing={text => { + this.setCity(text); + }} underlineColorAndroid="transparent" style={globalStyles.input} value={this.state.city} diff --git a/components/animation/FadeInView.js b/components/animation/FadeInView.js new file mode 100644 index 0000000..7351f70 --- /dev/null +++ b/components/animation/FadeInView.js @@ -0,0 +1,37 @@ +import React, { Component } from "react"; +import { Animated, Dimensions } from "react-native"; + +class FadeInView extends Component { + constructor(props) { + super(props); + let { width } = Dimensions.get("window"); + + this.state = { + pan: new Animated.ValueXY({ x: width, y: 0 }) + }; + } + + componentDidMount() { + Animated.sequence([ + Animated.delay(this.props.delay), + Animated.spring(this.state.pan, { + toValue: { x: 0, y: 0 } + }) + ]).start(); + } + + render() { + return ( + + {this.props.children} + + ); + } +} + +export default FadeInView; diff --git a/components/weather/WeatherRow.js b/components/weather/WeatherRow.js index 51ae417..7219efd 100644 --- a/components/weather/WeatherRow.js +++ b/components/weather/WeatherRow.js @@ -4,6 +4,7 @@ import moment from "moment"; import "moment/locale/fr"; import globalStyles from "../../Styles"; +import FadeInView from "../animation/FadeInView"; moment.locale("fr"); @@ -50,32 +51,36 @@ class WeatherRow extends Component { render() { if (this.props.index === 0) { return ( - - - - {this.day()} {this.date()}{" "} + + + + + {this.day()} {this.date()}{" "} + + {this.icon(90)} + + + {Math.round(this.props.day.main.temp)} °C - {this.icon(90)} - - {Math.round(this.props.day.main.temp)} °C - - + ); } else { return ( - - - {this.icon()} + + + + {this.icon()} - - {this.day()} {this.date()}{" "} + + {this.day()} {this.date()}{" "} + + + + {Math.round(this.props.day.main.temp)} °C - - {Math.round(this.props.day.main.temp)} °C - - + ); } }