Guest User

lab3

a guest
Dec 11th, 2016
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.82 KB | None | 0 0
  1. import React from 'react'
  2. import firebase from 'firebase'
  3.  
  4. var myFirebase = firebase.initializeApp({
  5. /* Your connection settings. */
  6. apiKey: " AIzaSyCdoJ5Q10uHkmUHMOiI_l-q05CmraQ0yMc",
  7. authDomain: "lab3-462d5.firebaseio.com",
  8. databaseURL: "https://lab3-462d5.firebaseio.com/",
  9. storageBucket: "gs://lab3-462d5.appspot.com",
  10. // messagingSenderId: "564455499773"
  11. })
  12. // Use myFirebase.
  13.  
  14. export default class App extends React.Component{
  15. constructor(props){
  16. super(props)
  17. this.state = {page:"signIn"}
  18. }
  19.  
  20. componentWillMount() {
  21. myFirebase.auth().onAuthStateChanged((user) => {
  22. if (user) {
  23. this.setState({page:"chat"})
  24. }
  25. else {}
  26. })
  27. }
  28.  
  29. render(){
  30. var content = "signIn"
  31.  
  32. if (this.state.page == "signUp")
  33. content = <SignUpComponent/>
  34. else if (this.state.page == "signIn")
  35. content = <SignInComponent/>
  36. else if (this.state.page == "chat")
  37. content = <ChatComponent/>
  38.  
  39. return (
  40. <div>
  41. {content}
  42. <br/>
  43. <button onClick={this.signup.bind(this)}>Sign up</button>
  44. <button onClick={this.signin.bind(this)}>Sign In</button>
  45. <button onClick={this.chat.bind(this)}>Chat</button>
  46. <button onClick={this.logOut.bind(this)}>Log Out</button>
  47. </div>
  48. )
  49. }
  50.  
  51. logOut(e) {
  52. myFirebase.auth().signOut()
  53. this.setState({page: "signIn"})
  54. }
  55.  
  56. signup(e) {
  57. this.setState({page: "signUp"})
  58. }
  59.  
  60. signin(e) {
  61. this.setState({page: "signIn"})
  62. }
  63.  
  64. chat(e) {
  65. this.setState({page: "chat"})
  66. }
  67.  
  68.  
  69. }
  70.  
  71. class SignUpComponent extends React.Component{
  72. constructor(props){
  73. super(props)
  74. this.state = {mail:"", pass:""}
  75. }
  76.  
  77. render(){
  78.  
  79. return(
  80. <div>
  81. <h1>Sign Up</h1>
  82. <form>
  83. <p>Email: <input type="text" onChange={this.handleEmailChange.bind(this)}></input></p>
  84. <p>Pass: <input type="password" onChange={this.handlePassChange.bind(this)}></input></p>
  85. <button type="submit" onClick={this.newUser.bind(this)}>Log in!</button><br/>
  86. </form>
  87. </div>
  88. )
  89. }
  90.  
  91. handleEmailChange(e) {
  92. this.setState({mail: e.target.value})
  93. }
  94.  
  95. handlePassChange(e) {
  96. this.setState({pass: e.target.value})
  97. }
  98.  
  99. newUser(e) {
  100. e.preventDefault()
  101. myFirebase.auth().createUserWithEmailAndPassword(this.state.mail, this.state.pass).then(function(user) {
  102. alert(user.email)
  103.  
  104. }).catch(function(error){
  105. alert(error.message)
  106. })
  107.  
  108. }
  109.  
  110. }
  111.  
  112. class SignInComponent extends React.Component{
  113. constructor(props){
  114. super(props)
  115. this.state = {mail:"", pass:""}
  116. }
  117.  
  118. render(){
  119.  
  120. return(
  121. <div>
  122. <h1>Sign In</h1>
  123. <form>
  124. <p>Email: <input type="text" name="signInMail" onChange={this.handleEmailChange.bind(this)}></input></p>
  125. <p>Password: <input type="password" name="signInPass" onChange={this.handlePassChange.bind(this)}></input></p>
  126. <button type="submit" onClick={this.authVerif.bind(this)}>Submit</button><br/>
  127. </form>
  128. </div>
  129. )
  130. }
  131.  
  132. handleEmailChange(e) {
  133. this.setState({mail: e.target.value})
  134. }
  135.  
  136. handlePassChange(e) {
  137. this.setState({pass: e.target.value})
  138. }
  139.  
  140. authVerif(e) {
  141. e.preventDefault()
  142. myFirebase.auth().signInWithEmailAndPassword(
  143. this.state.mail,
  144. this.state.pass
  145. ).then(function(user){
  146. alert("Signed in");
  147. }).catch(function(error){
  148. alert(error.message)})
  149. }
  150. }
  151.  
  152. class ChatComponent extends React.Component{
  153. constructor(props){
  154. super(props)
  155. this.state = {message:[], value: ""}
  156. }
  157.  
  158. componentWillMount(){
  159. this.db = myFirebase.database()
  160. var msgRef = this.db.ref('messages/')
  161. var self = this
  162. msgRef.on('value', function(snapshot){
  163. var msgArray = []
  164. snapshot.forEach(function(childSnapshot) {
  165. var childKey = childSnapshot.key
  166. var childData = childSnapshot.val()
  167. msgArray.push(childData)
  168. })
  169. self.setState({message: msgArray})
  170. })
  171. }
  172.  
  173. render(){
  174.  
  175. return(
  176. <div>
  177. <h1>Chat</h1>
  178. <input type="text" value={this.state.value} placeholder="message" onChange={this.handleMessage.bind(this)}/>
  179. <div>
  180. <button onClick={this.sendMessage.bind(this)}>Send</button>
  181. </div>
  182. <div>
  183. <ul style={this.listStyle}>
  184. {this.state.message.map(function(messageValue, index){
  185. return <li key={index}><b>{messageValue.name}</b>: {'\'' + messageValue.message + '\''}</li>
  186. })}
  187. </ul>
  188. </div>
  189. </div>
  190. )
  191. }
  192.  
  193. handleMessage(e) {
  194. this.setState({value: e.target.value})
  195. }
  196.  
  197. sendMessage(e) {
  198. var user = myFirebase.auth().currentUser;
  199. var data = {
  200. name: user.email,
  201. message: this.state.value
  202. }
  203. var newMsgKey = myFirebase.database().ref().child('messages').push().key
  204. var updates = {}
  205. updates['/messages/' + newMsgKey] = data
  206. this.db.ref().update(updates)
  207. }
  208.  
  209.  
  210. }
Add Comment
Please, Sign In to add comment