Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import React from 'react'
- import Blog from './components/Blog'
- import LoginForm from './components/LoginForm'
- import Togglable from './components/Togglable'
- import blogService from './services/blogs'
- import loginService from './services/login'
- import BlogForm from './components/BlogForm'
- class App extends React.Component {
- constructor(props) {
- super(props)
- this.state = {
- blogs: [],
- newBlog: '',
- username: '',
- password: '',
- user: null,
- showAll: true
- }
- this.addBlog = this.addBlog.bind(this)
- }
- componentDidMount() {
- blogService.getAll().then(blogs =>
- this.setState({ blogs })
- )
- const loggedUserJSON = window.localStorage.getItem('loggedBlogappUser')
- if (loggedUserJSON) {
- const user = JSON.parse(loggedUserJSON)
- this.setState({ user })
- blogService.setToken(user.token)
- }
- }
- toggleVisible = () => {
- this.setState({ showAll: !this.state.showAll })
- }
- addBlog = (event) => {
- console.log(event)
- event.preventDefault()
- const blogObject = {
- title: event.title,
- author: event.author,
- url: event.url
- }
- blogService
- .create(blogObject)
- .then(newBlog => {
- this.setState({
- blogs: this.state.blogs.concat(newBlog),
- newBlog: ''
- })
- })
- }
- login = async (event) => {
- event.preventDefault()
- try {
- const user = await loginService.login({
- username: this.state.username,
- password: this.state.password
- })
- window.localStorage.setItem('loggedBlogappUser', JSON.stringify(user))
- blogService.setToken(user.token)
- this.setState({ username: '', password: '', user })
- } catch (exception) {
- this.setState({
- error: 'käyttäjätunnus tai salasana virheellinen',
- })
- setTimeout(() => {
- this.setState({ error: null })
- }, 5000)
- }
- }
- handleLoginFieldChange = (event) => {
- this.setState({ [event.target.name]: event.target.value })
- }
- toggleVisible = () => {
- this.setState({ showAll: !this.state.showAll })
- }
- handleLogout = () => {
- this.setState({ user: null },() => {
- window.localStorage.clear()
- });
- }
- handleBlogChange = (event) => {
- this.setState({ newBlog: event.target.value })
- }
- render() {
- const loginForm = () => (
- <LoginForm
- visible={this.state.visible}
- username={this.state.username}
- password={this.state.password}
- handleChange={this.handleLoginFieldChange}
- handleSubmit={this.login}
- />
- )
- return (
- <div>
- {this.state.user === null ?
- loginForm() :
- <div>
- <p>{this.state.user.name} logged in</p>
- <button onClick={this.handleLogout}> logout </button>
- <BlogForm
- onSubmit={this.addBlog}
- value={this.state.newBlog}
- handleChange={this.handleBlogChange}
- />
- <h2>blogs</h2>
- {this.state.blogs.map(blog =>
- <Blog key={blog._id} blog={blog}/>
- )}
- </div>
- }
- </div>
- )
- }
- }
- export default App
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement