diff --git a/src/App.js b/src/App.js
index e358583..7dd75d4 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,11 +1,21 @@
import React from 'react';
-import logo from './logo.svg';
import './App.css';
+import TodoList from './containers/TodoList/TodoList';
+import NewTodo from './containers/NewTodo/NewTodo';
+import {BrowserRouter, Route, Redirect, Switch} from 'react-router-dom';
function App() {
return (
-
-
+
+
+
+ }/>
+
+
+ Not Found
}/>
+
+
+
);
}
diff --git a/src/components/Todo/Todo.css b/src/components/Todo/Todo.css
new file mode 100644
index 0000000..f940209
--- /dev/null
+++ b/src/components/Todo/Todo.css
@@ -0,0 +1,31 @@
+.Todo {
+ border-top: 1px solid #f1f3f5;
+ padding: 1rem;
+ display: flex;
+ align-items: center;
+ transition: all 0.15s;
+ }
+
+ .Todo .text {
+ flex: 1;
+ text-align: left;
+ word-break: break-all;
+ cursor: pointer;
+ }
+
+ .Todo .text:hover {
+ color: orange;
+ }
+
+ .Todo .done {
+ text-decoration: line-through;
+ color: #adb5bd;
+ }
+
+ .Todo .done-mark {
+ font-size: 1.5rem;
+ line-height: 1rem;
+ margin-left: 1rem;
+ color: orange;
+ font-weight: 800;
+ }
diff --git a/src/components/Todo/Todo.js b/src/components/Todo/Todo.js
new file mode 100644
index 0000000..d937a61
--- /dev/null
+++ b/src/components/Todo/Todo.js
@@ -0,0 +1,13 @@
+import React from 'react';
+import "./Todo.css";
+const Todo = props => {
+ return (
+
+
+ {props.title}
+
+ {props.done &&
✓
}
+
+ )
+}
+export default Todo;
diff --git a/src/components/TodoDetail/TodoDetail.css b/src/components/TodoDetail/TodoDetail.css
new file mode 100644
index 0000000..229a6a4
--- /dev/null
+++ b/src/components/TodoDetail/TodoDetail.css
@@ -0,0 +1,15 @@
+.TodoDetail .row {
+ display: flex;
+ padding: 20px;
+ height: 30px;
+ text-align: left;
+ }
+
+ .TodoDetail .left {
+ font-weight: bold;
+ flex: 25%
+ }
+
+ .TodoDetail .right {
+ flex: 75%;
+ }
diff --git a/src/components/TodoDetail/TodoDetail.js b/src/components/TodoDetail/TodoDetail.js
new file mode 100644
index 0000000..c1ac372
--- /dev/null
+++ b/src/components/TodoDetail/TodoDetail.js
@@ -0,0 +1,27 @@
+import React from 'react';
+import './TodoDetail.css';
+
+const TodoDetail = (props) => {
+ return (
+
+
+
+ Name:
+
+
+ {props.title}
+
+
+
+
+ Content:
+
+
+ {props.content}
+
+
+
+ );
+};
+
+export default TodoDetail;
diff --git a/src/containers/NewTodo/NewTodo.css b/src/containers/NewTodo/NewTodo.css
new file mode 100644
index 0000000..dccd115
--- /dev/null
+++ b/src/containers/NewTodo/NewTodo.css
@@ -0,0 +1,41 @@
+.NewTodo {
+ width: 80%;
+ margin: 20px auto;
+ border: 1px solid #eee;
+ box-shadow: 0 2px 3px #ccc;
+ text-align: center;
+ }
+
+ .NewTodo label {
+ display: block;
+ margin: 10px auto;
+ text-align: center;
+ font-weight: bold;
+ }
+
+ .NewTodo input,
+ .NewTodo textarea {
+ display: block;
+ width: 80%;
+ box-sizing: border-box;
+ border: 1px solid black;
+ outline: none;
+ font: inherit;
+ margin: auto;
+ }
+
+ .NewTodo button {
+ margin: 5px 0;
+ padding: 10px;
+ font: inherit;
+ border: 1px solid #fa923f;
+ background-color: transparent;
+ color: #fa923f;
+ cursor: pointer;
+ }
+
+ .NewTodo button:hover,
+ .NewTodo button:active {
+ color: white;
+ background-color: #fa923f;
+ }
diff --git a/src/containers/NewTodo/NewTodo.js b/src/containers/NewTodo/NewTodo.js
new file mode 100644
index 0000000..7dc1f6d
--- /dev/null
+++ b/src/containers/NewTodo/NewTodo.js
@@ -0,0 +1,38 @@
+import React, {Component} from 'react';
+import {Redirect} from 'react-router-dom';
+import './NewTodo.css'
+
+class NewTodo extends Component{
+ state = {
+ title:'',
+ content:'',
+ submitted:false,
+ }
+
+ postTodoHandler = () => {
+ const data = {title: this.state.title, content: this.state.content };
+ alert('Submitted\n' + data.title + '\n' + data.content);
+ this.setState({submitted: true});
+ this.props.history.push('/todos');
+ }
+
+ render(){
+ if(this.state.submitted){
+ return
+ }
+ return(
+
+
Add a Todo
+
+ this.setState({title:event.target.value})} />
+
+
+ )
+ }
+}
+
+export default NewTodo;
diff --git a/src/containers/TodoList/TodoList.css b/src/containers/TodoList/TodoList.css
new file mode 100644
index 0000000..d380fa3
--- /dev/null
+++ b/src/containers/TodoList/TodoList.css
@@ -0,0 +1,16 @@
+.TodoList {
+ background: white;
+ width: 512px;
+ box-shadow: 0 3px 9px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); /* 그림자 */
+ margin: auto;
+ margin-top: 4rem;
+ }
+
+ .TodoList .title {
+ padding: 2rem;
+ font-size: 2.5rem;
+ text-align: center;
+ font-weight: 500;
+ background: orange;
+ color: black;
+ }
diff --git a/src/containers/TodoList/TodoList.js b/src/containers/TodoList/TodoList.js
new file mode 100644
index 0000000..a76956f
--- /dev/null
+++ b/src/containers/TodoList/TodoList.js
@@ -0,0 +1,47 @@
+import React, {Component} from 'react';
+import {NavLink} from 'react-router-dom';
+import Todo from '../../components/Todo/Todo';
+import TodoDetail from '../../components/TodoDetail/TodoDetail';
+import "./TodoList.css";
+
+class TodoList extends Component{
+ state = {
+ todos: [
+ {id: 1, title: 'SWPP', content: 'take swpp class', done: true},
+ {id: 2, title: 'Movie', content: 'watch movie', done: false},
+ {id: 3, title: 'Dinner', content: 'eat dinner', done: false},
+ ],
+ selectedTodo: null,
+ }
+
+ clickTodoHandler = td => {
+ console.log(123);
+ if(this.state.selectedTodo === td){
+ this.setState({selectedTodo: null});
+ }else{
+ this.setState({selectedTodo: td});
+ }
+ }
+
+ render(){
+ const todos = this.state.todos.map(td => {
+ return ( this.clickTodoHandler(td)}/>);
+ })
+
+ let todoDetail = null;
+ if (this.state.selectedTodo){
+ todoDetail =
+ }
+
+ return (
+
+
{this.props.title}
+
{todos}
+ {todoDetail}
+
New Todo
+
+ );
+ }
+}
+export default TodoList;