Advertisement
Guest User

App.js

a guest
Mar 4th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.27 KB | None | 0 0
  1. import React from 'react'
  2. import Blog from './components/Blog'
  3. import LoginForm from './components/LoginForm'
  4. import Togglable from './components/Togglable'
  5. import blogService from './services/blogs'
  6. import loginService from './services/login'
  7. import BlogForm from './components/BlogForm'
  8.  
  9. class App extends React.Component {
  10. constructor(props) {
  11. super(props)
  12. this.state = {
  13. blogs: [],
  14. newBlog: '',
  15. username: '',
  16. password: '',
  17. user: null,
  18. showAll: true
  19. }
  20. this.addBlog = this.addBlog.bind(this)
  21. }
  22.  
  23. componentDidMount() {
  24. blogService.getAll().then(blogs =>
  25. this.setState({ blogs })
  26. )
  27.  
  28. const loggedUserJSON = window.localStorage.getItem('loggedBlogappUser')
  29. if (loggedUserJSON) {
  30. const user = JSON.parse(loggedUserJSON)
  31. this.setState({ user })
  32. blogService.setToken(user.token)
  33. }
  34. }
  35.  
  36. toggleVisible = () => {
  37. this.setState({ showAll: !this.state.showAll })
  38. }
  39.  
  40. addBlog = (event) => {
  41. console.log(event)
  42. event.preventDefault()
  43. const blogObject = {
  44. title: event.title,
  45. author: event.author,
  46. url: event.url
  47. }
  48.  
  49.  
  50. blogService
  51. .create(blogObject)
  52. .then(newBlog => {
  53. this.setState({
  54. blogs: this.state.blogs.concat(newBlog),
  55. newBlog: ''
  56. })
  57. })
  58. }
  59.  
  60. login = async (event) => {
  61. event.preventDefault()
  62. try {
  63. const user = await loginService.login({
  64. username: this.state.username,
  65. password: this.state.password
  66. })
  67.  
  68. window.localStorage.setItem('loggedBlogappUser', JSON.stringify(user))
  69. blogService.setToken(user.token)
  70. this.setState({ username: '', password: '', user })
  71. } catch (exception) {
  72. this.setState({
  73. error: 'käyttäjätunnus tai salasana virheellinen',
  74. })
  75. setTimeout(() => {
  76. this.setState({ error: null })
  77. }, 5000)
  78. }
  79. }
  80.  
  81.  
  82. handleLoginFieldChange = (event) => {
  83. this.setState({ [event.target.name]: event.target.value })
  84. }
  85.  
  86. toggleVisible = () => {
  87. this.setState({ showAll: !this.state.showAll })
  88. }
  89.  
  90. handleLogout = () => {
  91. this.setState({ user: null },() => {
  92. window.localStorage.clear()
  93. });
  94. }
  95.  
  96. handleBlogChange = (event) => {
  97. this.setState({ newBlog: event.target.value })
  98. }
  99.  
  100. render() {
  101. const loginForm = () => (
  102. <LoginForm
  103. visible={this.state.visible}
  104. username={this.state.username}
  105. password={this.state.password}
  106. handleChange={this.handleLoginFieldChange}
  107. handleSubmit={this.login}
  108. />
  109. )
  110. return (
  111. <div>
  112. {this.state.user === null ?
  113. loginForm() :
  114. <div>
  115. <p>{this.state.user.name} logged in</p>
  116. <button onClick={this.handleLogout}> logout </button>
  117.  
  118. <BlogForm
  119. onSubmit={this.addBlog}
  120. value={this.state.newBlog}
  121. handleChange={this.handleBlogChange}
  122. />
  123.  
  124. <h2>blogs</h2>
  125. {this.state.blogs.map(blog =>
  126. <Blog key={blog._id} blog={blog}/>
  127. )}
  128. </div>
  129. }
  130.  
  131.  
  132.  
  133.  
  134. </div>
  135. )
  136. }
  137. }
  138.  
  139. export default App
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement