mirror of
https://github.com/fazo96/ipfs-boards
synced 2025-01-09 12:19:49 +01:00
added board editor form
This commit is contained in:
parent
752799e0a8
commit
f8e5a3ca3c
@ -1,2 +1,3 @@
|
|||||||
|
|
||||||
export const ADD_POST = 'ADD_POST'
|
export const ADD_POST = 'ADD_POST'
|
||||||
|
export const CREATE_BOARD = 'CREATE_BOARD'
|
8
src/actions/board.js
Normal file
8
src/actions/board.js
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import { CREATE_BOARD } from './actionTypes'
|
||||||
|
|
||||||
|
export function createBoard(board) {
|
||||||
|
return {
|
||||||
|
type: CREATE_BOARD,
|
||||||
|
board
|
||||||
|
}
|
||||||
|
}
|
@ -2,6 +2,7 @@ import React, { Component } from 'react';
|
|||||||
import { Switch, Route, withRouter } from 'react-router-dom';
|
import { Switch, Route, withRouter } from 'react-router-dom';
|
||||||
import Boards from '../containers/Boards'
|
import Boards from '../containers/Boards'
|
||||||
import PostEditor from '../containers/PostEditor'
|
import PostEditor from '../containers/PostEditor'
|
||||||
|
import BoardEditor from '../containers/BoardEditor'
|
||||||
import 'semantic-ui-css/semantic.css'
|
import 'semantic-ui-css/semantic.css'
|
||||||
|
|
||||||
class App extends Component {
|
class App extends Component {
|
||||||
@ -9,6 +10,7 @@ class App extends Component {
|
|||||||
return (
|
return (
|
||||||
<Switch>
|
<Switch>
|
||||||
<Route path='/p/new' component={PostEditor} />
|
<Route path='/p/new' component={PostEditor} />
|
||||||
|
<Route path='/b/new' component={BoardEditor} />
|
||||||
<Route path='/' component={Boards} />
|
<Route path='/' component={Boards} />
|
||||||
</Switch>
|
</Switch>
|
||||||
);
|
);
|
||||||
|
34
src/components/BoardForm.js
Normal file
34
src/components/BoardForm.js
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
import React, { Component } from 'react'
|
||||||
|
import { Form, Button } from 'semantic-ui-react'
|
||||||
|
|
||||||
|
export default class BoardForm extends Component {
|
||||||
|
constructor(props){
|
||||||
|
super(props)
|
||||||
|
this.state = {
|
||||||
|
title: props.title || ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
updateTitle(event) {
|
||||||
|
this.setState({ title: event.target.value })
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
const { title, content } = this.state
|
||||||
|
const { onSave } = this.props
|
||||||
|
return <Form>
|
||||||
|
<Form.Field>
|
||||||
|
<label>Title</label>
|
||||||
|
<input
|
||||||
|
placeholder="What's this board about?"
|
||||||
|
value={title}
|
||||||
|
onChange={this.updateTitle.bind(this)}
|
||||||
|
/>
|
||||||
|
</Form.Field>
|
||||||
|
<Button
|
||||||
|
type='submit'
|
||||||
|
onClick={() => onSave({ title, content })}
|
||||||
|
>Create</Button>
|
||||||
|
</Form>
|
||||||
|
}
|
||||||
|
}
|
@ -1,9 +1,11 @@
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
import { List } from 'semantic-ui-react'
|
import { List } from 'semantic-ui-react'
|
||||||
import BoardsItem from './BoardsItem'
|
import BoardsItem from './BoardsItem'
|
||||||
|
import { Button } from 'semantic-ui-react'
|
||||||
|
|
||||||
export default function Boards({ boards }) {
|
export default function Boards({ boards, createBoard }) {
|
||||||
return <List divided relaxed>
|
return <List divided relaxed>
|
||||||
{boards.map(board => <BoardsItem {...board} />)}
|
{boards.map(board => <BoardsItem {...board} />)}
|
||||||
|
<Button onClick={createBoard}>New Board</Button>
|
||||||
</List>
|
</List>
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
import React, { Component } from 'react'
|
import React, { Component } from 'react'
|
||||||
import { Form, Button } from 'semantic-ui-react'
|
import { Form, Button } from 'semantic-ui-react'
|
||||||
|
|
||||||
export default class PostEditor extends Component {
|
export default class PostForm extends Component {
|
||||||
constructor(props){
|
constructor(props){
|
||||||
super(props)
|
super(props)
|
||||||
this.state = {
|
this.state = {
|
||||||
|
25
src/containers/BoardEditor.js
Normal file
25
src/containers/BoardEditor.js
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
import React from 'react'
|
||||||
|
import { connect } from 'react-redux'
|
||||||
|
import BoardForm from '../components/BoardForm'
|
||||||
|
import { createBoard } from '../actions/board'
|
||||||
|
|
||||||
|
function BoardEditor({ board, createBoard }) {
|
||||||
|
return <BoardForm board={board} onSave={createBoard} />
|
||||||
|
}
|
||||||
|
|
||||||
|
function mapStateToProps(state){
|
||||||
|
return {
|
||||||
|
board: state.boardEditor.board
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function mapDispatchToProps(dispatch) {
|
||||||
|
return {
|
||||||
|
createBoard: board => dispatch(createBoard(board))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default connect(
|
||||||
|
mapStateToProps,
|
||||||
|
mapDispatchToProps
|
||||||
|
)(BoardEditor)
|
@ -1,9 +1,10 @@
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
import { connect } from 'react-redux'
|
import { connect } from 'react-redux'
|
||||||
|
import { push } from 'react-router-redux'
|
||||||
import BoardsComponent from '../components/Boards'
|
import BoardsComponent from '../components/Boards'
|
||||||
|
|
||||||
function Boards({ boards }) {
|
function Boards({ boards, createBoard }) {
|
||||||
return <BoardsComponent boards={boards} />
|
return <BoardsComponent boards={boards} createBoard={createBoard} />
|
||||||
}
|
}
|
||||||
|
|
||||||
function mapStateToProps(state){
|
function mapStateToProps(state){
|
||||||
@ -14,7 +15,7 @@ function mapStateToProps(state){
|
|||||||
|
|
||||||
function mapDispatchToProps(dispatch){
|
function mapDispatchToProps(dispatch){
|
||||||
return {
|
return {
|
||||||
|
createBoard: () => dispatch(push('/b/new'))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
18
src/reducers/boardEditor.js
Normal file
18
src/reducers/boardEditor.js
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import { CREATE_BOARD } from '../actions/actionTypes'
|
||||||
|
|
||||||
|
function getInitialState() {
|
||||||
|
return {
|
||||||
|
board: {
|
||||||
|
title: ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function BoardEditorReducer(state = getInitialState(), action) {
|
||||||
|
switch (action.type) {
|
||||||
|
case CREATE_BOARD:
|
||||||
|
return Object.assign({}, state, { board: action.board })
|
||||||
|
default:
|
||||||
|
return state
|
||||||
|
}
|
||||||
|
}
|
@ -1,8 +1,10 @@
|
|||||||
import { combineReducers } from 'redux'
|
import { combineReducers } from 'redux'
|
||||||
import postReducer from './post'
|
import postReducer from './post'
|
||||||
import boardsReducer from './boards'
|
import boardsReducer from './boards'
|
||||||
|
import boardEditorReducer from './boardEditor'
|
||||||
|
|
||||||
export default combineReducers({
|
export default combineReducers({
|
||||||
postEditor: postReducer,
|
postEditor: postReducer,
|
||||||
boards: boardsReducer
|
boards: boardsReducer,
|
||||||
|
boardEditor: boardEditorReducer
|
||||||
})
|
})
|
Loading…
Reference in New Issue
Block a user