From b724bbc08ec0ba41921bfcf95d0bb0e86a7f3f1b Mon Sep 17 00:00:00 2001 From: Loaye Date: Sun, 27 Aug 2017 14:08:53 -0700 Subject: [PATCH 1/4] Basic scaffold and resources --- .babelrc | 4 ++++ .eslintignore | 5 +++++ .eslintrc | 21 +++++++++++++++++++++ .gitignore | 1 + package.json | 37 +++++++++++++++++++++++++++++++++++++ src/index.html | 0 src/main.js | 0 wepack.config.js | 38 ++++++++++++++++++++++++++++++++++++++ 8 files changed, 106 insertions(+) create mode 100644 .babelrc create mode 100644 .eslintignore create mode 100644 .eslintrc create mode 100644 .gitignore create mode 100644 package.json create mode 100644 src/index.html create mode 100644 src/main.js create mode 100644 wepack.config.js diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..89f1f30 --- /dev/null +++ b/.babelrc @@ -0,0 +1,4 @@ +{ + "presets": ["es2015"], + "presets": ["react"] +} \ No newline at end of file diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..82ff623 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,5 @@ +**/node_modules/* +**/vendor/* +**/*.min.js +**/coverage/* +**/build/* \ No newline at end of file diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..b663d77 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,21 @@ +{ + "rules": { + "no-console": "off", + "indent": [ "error", 2 ], + "quotes": [ "error", "single" ], + "semi": ["error", "always"], + "linebreak-style": [ "error", "unix" ] + }, + "env": { + "es6": true, + "node": true, + "mocha": true, + "jasmine": true + }, + "ecmaFeatures": { + "modules": true, + "experimentalObjectRestSpread": true, + "impliedStrict": true + }, + "extends": "eslint:recommended" +} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/package.json b/package.json new file mode 100644 index 0000000..fe60c1f --- /dev/null +++ b/package.json @@ -0,0 +1,37 @@ +{ + "name": "24-component-composition", + "version": "1.0.0", + "description": "![cf](https://i.imgur.com/7v5ASc8.png) 24: Component Composition ======", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/Loaye/24-component-composition.git" + }, + "keywords": [], + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/Loaye/24-component-composition/issues" + }, + "homepage": "https://github.com/Loaye/24-component-composition#readme", + "dependencies": { + "babel-core": "^6.26.0", + "babel-loader": "^7.1.2", + "babel-preset-es2015": "^6.24.1", + "babel-preset-react": "^6.24.1", + "css-loader": "^0.28.5", + "extract-text-webpack-plugin": "^3.0.0", + "node-sass": "^4.5.3", + "react": "^15.6.1", + "react-dom": "^15.6.1", + "react-router-dom": "^4.2.2", + "sass-loader": "^6.0.6", + "url-loader": "^0.5.9", + "uuid": "^3.1.0", + "webpack": "^3.5.5", + "webpack-dev-server": "^2.7.1" + } +} diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..e69de29 diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..e69de29 diff --git a/wepack.config.js b/wepack.config.js new file mode 100644 index 0000000..97658f4 --- /dev/null +++ b/wepack.config.js @@ -0,0 +1,38 @@ +'use strict'; + +const HtmlPlugin = require('html-webpack-plugin'); +const ExtractPlugin = require('extract-text-webpack-plugin'); + +module.exports = { + devtool: 'cheap-module-eval-source-map', + devServer: { + historyApiFallback: true + }, + entry: `${__dirname}/src/main.js`, + output: { + path: `${__dirname}/build`, + publicPath: '/', + filename: 'bundle-[hash].js' + }, + plugins: [ + new HtmlPlugin({ template: `${__dirname}/src/index.html` }), + new ExtractPlugin('bundle-[hash].css') + ], + module: { + rules: [ + { + test: /\.js$/, + exclude: /node_modules/, + loader: 'babel-loader' + }, + { + test: /\.scss$/, + loader: ExtractPlugin.extract(['css-loader', 'sass-loader']) + }, + { + test: /\.(jpg|jpeg|gif|png|tiff|svg)$/, + loader: 'file-loader', + }, + ] + } +} From 875c28e6218ac61793b8e08b96703fe4f50e5362 Mon Sep 17 00:00:00 2001 From: Loaye Date: Sun, 27 Aug 2017 14:41:10 -0700 Subject: [PATCH 2/4] theme and styling --- src/index.html | 9 +++++ src/main.js | 68 +++++++++++++++++++++++++++++++++++ src/style/base/base.scss | 35 ++++++++++++++++++ src/style/base/reset.scss | 48 +++++++++++++++++++++++++ src/style/layout/form.scss | 48 +++++++++++++++++++++++++ src/style/layout/navbar.scss | 18 ++++++++++ src/style/layout/note.scss | 57 +++++++++++++++++++++++++++++ src/style/layout/wrapper.scss | 57 +++++++++++++++++++++++++++++ src/style/main.scss | 0 src/style/theme/vars.scss | 0 10 files changed, 340 insertions(+) create mode 100644 src/style/base/base.scss create mode 100644 src/style/base/reset.scss create mode 100644 src/style/layout/form.scss create mode 100644 src/style/layout/navbar.scss create mode 100644 src/style/layout/note.scss create mode 100644 src/style/layout/wrapper.scss create mode 100644 src/style/main.scss create mode 100644 src/style/theme/vars.scss diff --git a/src/index.html b/src/index.html index e69de29..c0d3fd3 100644 --- a/src/index.html +++ b/src/index.html @@ -0,0 +1,9 @@ + + + + Note App + + +
+ + \ No newline at end of file diff --git a/src/main.js b/src/main.js index e69de29..a665d0a 100644 --- a/src/main.js +++ b/src/main.js @@ -0,0 +1,68 @@ +import './style/main.scss'; + +import React from 'react'; +import ReactDOM from 'react-dom'; +import {BrowserRouter, Route} from 'react-router-dom'; + +import DashboardContainer from './component/dashboard-container'; +import NoteList from './component/note-list'; +import Navbar from './component/navbar'; + +class App extends React.Component{ + constructor(props){ + super(props) + this.state={ + notesArr: [] + } + this.getNote = this.getNote.bind(this) + this.deleteNote = this.deleteNote.bind(this) + } + + getNote(){ + return{ + state: this.state, + setState: this.setState.bind(this) + } + } + + deleteNote(id){ + let notes=this.state.notesArr; + notes=notes.filter(note => note.id !== id); + this.setState({ notesArr: notes }); + } + + getApp(){ + return{ + state:this.state, + setState:this.setState.bind(this) + } + } + + + + componentDidUpdate(){ + console.log('___STATE___', this.state); + } + + render(){ + return( +
+ +
+ +
+ } /> + +
+
+
+
+ ) + } +} + +ReactDOM.render(, document.getElementById('root')); \ No newline at end of file diff --git a/src/style/base/base.scss b/src/style/base/base.scss new file mode 100644 index 0000000..d7fed7c --- /dev/null +++ b/src/style/base/base.scss @@ -0,0 +1,35 @@ +@import "../theme/vars.scss"; +@import url("https://fonts.googleapis.com/css?family=Ubuntu" rel="stylesheet"); + +input{ + border: none; + background: transparent; + outline: none; +} + +button{ + border: none; + border-radius: 3px; +} + +h1{ + font-size: 4em; + font-family: 'Ubuntu', sans-serif +} + +h2{ + font-size: 2em; +} + +p{ + font-family: Georgia, 'Times New Roman', Times, serif +} + +html, body{ + height: 100% + background-color: $ +} + +main{ + height: auto; +} \ No newline at end of file diff --git a/src/style/base/reset.scss b/src/style/base/reset.scss new file mode 100644 index 0000000..af94440 --- /dev/null +++ b/src/style/base/reset.scss @@ -0,0 +1,48 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0 | 20110126 + License: none (public domain) +*/ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} \ No newline at end of file diff --git a/src/style/layout/form.scss b/src/style/layout/form.scss new file mode 100644 index 0000000..e753a1c --- /dev/null +++ b/src/style/layout/form.scss @@ -0,0 +1,48 @@ +form{ + display:flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-around; + align-content: center; + align-items: center; +} + +input { + margin-top: 2em; + margin-bottom: 1em; + text-align: center; + font-size: 4vw; + width: 33vw; +} + +.inputContainer{ + display:flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: center; + align-content: center; + align-items: center; + width:50%; + height:100%; + margin-top: 1em; + padding-top: 1em; + padding-bottom: 1em; +} + +.buttonContainer{ + display:flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: center; + align-content: center; + align-items: center; + width:50%; + height:100%; + margin-top: 1em; + padding-top: 2em; + padding-bottom: 2em; +} + +.button{ + margin-top: 1em; +} \ No newline at end of file diff --git a/src/style/layout/navbar.scss b/src/style/layout/navbar.scss new file mode 100644 index 0000000..94adabf --- /dev/null +++ b/src/style/layout/navbar.scss @@ -0,0 +1,18 @@ +.title{ + display:flex; + flex-direction: column; + flex-wrap: wrap; + justify-content: center; + align-content: center; + align-items: center; + padding-bottom: 1em; + padding-top: 1em; + background-repeat: no-repeat; + background-position: center bottom; + background-size: contain; +} + +.titleName{ + padding-top: 1vw; + margin-bottom: 1em; +} \ No newline at end of file diff --git a/src/style/layout/note.scss b/src/style/layout/note.scss new file mode 100644 index 0000000..0e148c4 --- /dev/null +++ b/src/style/layout/note.scss @@ -0,0 +1,57 @@ +.noteStyle{ + display:flex; + flex-direction: column; + flex-wrap: wrap; + justify-content: flex-start; + align-content: center; + align-items: flex-start; + word-wrap: break-word; + height: 30em; + width: 36em; +} + +section .noteText{ + margin-left: 8em; + padding-top: 6em; + width: 56%; +} + +.textAlign{ + display:flex; + flex-direction: column; + flex-wrap: wrap; + justify-content: center; + align-content: center; + align-items: center; +} + +.setP{ + width: 100%; + height:14em; +} + +.update{ + z-index: 100000000000; + width: 37em; +} + +.update form div input{ + width: 5em; +} + +.update form div input:focus+.underline { + transform: scale(1); +} + +.update .underline { + margin-top: 4em; + background-color: $brand-primary; + display: inline-block; + height: 3px; + position: absolute; + -webkit-transform: scale(0, 1); + transform: scale(0, 1); + -webkit-transition: all 0.2s linear; + transition: all 0.2s linear; + width: 15em; +} \ No newline at end of file diff --git a/src/style/layout/wrapper.scss b/src/style/layout/wrapper.scss new file mode 100644 index 0000000..0e148c4 --- /dev/null +++ b/src/style/layout/wrapper.scss @@ -0,0 +1,57 @@ +.noteStyle{ + display:flex; + flex-direction: column; + flex-wrap: wrap; + justify-content: flex-start; + align-content: center; + align-items: flex-start; + word-wrap: break-word; + height: 30em; + width: 36em; +} + +section .noteText{ + margin-left: 8em; + padding-top: 6em; + width: 56%; +} + +.textAlign{ + display:flex; + flex-direction: column; + flex-wrap: wrap; + justify-content: center; + align-content: center; + align-items: center; +} + +.setP{ + width: 100%; + height:14em; +} + +.update{ + z-index: 100000000000; + width: 37em; +} + +.update form div input{ + width: 5em; +} + +.update form div input:focus+.underline { + transform: scale(1); +} + +.update .underline { + margin-top: 4em; + background-color: $brand-primary; + display: inline-block; + height: 3px; + position: absolute; + -webkit-transform: scale(0, 1); + transform: scale(0, 1); + -webkit-transition: all 0.2s linear; + transition: all 0.2s linear; + width: 15em; +} \ No newline at end of file diff --git a/src/style/main.scss b/src/style/main.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/style/theme/vars.scss b/src/style/theme/vars.scss new file mode 100644 index 0000000..e69de29 From 695ebfce9ab083c800ff5f25ee39d1e2b1add7ba Mon Sep 17 00:00:00 2001 From: Loaye Date: Sun, 27 Aug 2017 15:14:59 -0700 Subject: [PATCH 3/4] trucking along --- src/component/dashboard-container/index.js | 31 ++++++++++++++++++++++ src/component/navbar/index.js | 0 src/style/base/base.scss | 8 +++--- src/style/layout/note.scss | 2 +- src/style/layout/wrapper.scss | 2 +- src/style/theme/vars.scss | 3 +++ 6 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 src/component/dashboard-container/index.js create mode 100644 src/component/navbar/index.js diff --git a/src/component/dashboard-container/index.js b/src/component/dashboard-container/index.js new file mode 100644 index 0000000..ac436bc --- /dev/null +++ b/src/component/dashboard-container/index.js @@ -0,0 +1,31 @@ +import React from 'react'; +import uuid from 'uuid/v1'; + +import NoteCreateForm from '../note-create-form'; + +class DashboardContainer extends React.Component{ + constructor(props){ + super(props) + + this.noteCreate = this.noteCreate.bind(this) + } + + noteCreate(note){ + note.id = uuid() + this.props.getNote.setState(state => ({ + notesArr: [...state.notesArr, note] + })); + } + + render(){ + return( +
+ +
+ ) + } +} + +export default DashboardContainer \ No newline at end of file diff --git a/src/component/navbar/index.js b/src/component/navbar/index.js new file mode 100644 index 0000000..e69de29 diff --git a/src/style/base/base.scss b/src/style/base/base.scss index d7fed7c..0f85c56 100644 --- a/src/style/base/base.scss +++ b/src/style/base/base.scss @@ -14,7 +14,7 @@ button{ h1{ font-size: 4em; - font-family: 'Ubuntu', sans-serif + font-family: 'Ubuntu', sans-serif; } h2{ @@ -22,12 +22,12 @@ h2{ } p{ - font-family: Georgia, 'Times New Roman', Times, serif + font-family: Georgia, 'Times New Roman', Times, serif; } html, body{ - height: 100% - background-color: $ + height: 100%; + background-color: $secondary; } main{ diff --git a/src/style/layout/note.scss b/src/style/layout/note.scss index 0e148c4..6fa4270 100644 --- a/src/style/layout/note.scss +++ b/src/style/layout/note.scss @@ -45,7 +45,7 @@ section .noteText{ .update .underline { margin-top: 4em; - background-color: $brand-primary; + background-color: $primary; display: inline-block; height: 3px; position: absolute; diff --git a/src/style/layout/wrapper.scss b/src/style/layout/wrapper.scss index 0e148c4..6fa4270 100644 --- a/src/style/layout/wrapper.scss +++ b/src/style/layout/wrapper.scss @@ -45,7 +45,7 @@ section .noteText{ .update .underline { margin-top: 4em; - background-color: $brand-primary; + background-color: $primary; display: inline-block; height: 3px; position: absolute; diff --git a/src/style/theme/vars.scss b/src/style/theme/vars.scss index e69de29..ac4a31a 100644 --- a/src/style/theme/vars.scss +++ b/src/style/theme/vars.scss @@ -0,0 +1,3 @@ +$primary: #fff000; +$secondary: #78AEE8; +$tertiary: #85F0FF; From d496fdc6cf914e738a8ee7d6e002eb46d40fe81a Mon Sep 17 00:00:00 2001 From: Loaye Date: Sun, 27 Aug 2017 15:30:58 -0700 Subject: [PATCH 4/4] finishing up? --- src/component/navbar/assests/collection.jpg | Bin 0 -> 14573 bytes src/component/navbar/assests/pokeball.png | Bin 0 -> 6218 bytes src/component/navbar/index.js | 25 +++++++ src/component/navbar/style/style.scss | 6 ++ src/component/note-create-form/index.js | 67 +++++++++++++++++++ src/component/note-item/index.js | 70 ++++++++++++++++++++ src/component/note-list/index.js | 28 ++++++++ 7 files changed, 196 insertions(+) create mode 100644 src/component/navbar/assests/collection.jpg create mode 100644 src/component/navbar/assests/pokeball.png create mode 100644 src/component/navbar/style/style.scss create mode 100644 src/component/note-create-form/index.js create mode 100644 src/component/note-item/index.js create mode 100644 src/component/note-list/index.js diff --git a/src/component/navbar/assests/collection.jpg b/src/component/navbar/assests/collection.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0a4a8a4a0340c0dcb8371952cdbd57a94c29d425 GIT binary patch literal 14573 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 literal 0 HcmV?d00001 diff --git a/src/component/navbar/index.js b/src/component/navbar/index.js index e69de29..ccc24f4 100644 --- a/src/component/navbar/index.js +++ b/src/component/navbar/index.js @@ -0,0 +1,25 @@ +import './style/style.scss'; + +import React from 'react'; +import {Link} from 'react-router-dom'; + + +class Navbar extends React.Component { + render() { + return ( +
+
+ +

Pokeball

+
+ +
+ ) + } +} + +export default Navbar \ No newline at end of file diff --git a/src/component/navbar/style/style.scss b/src/component/navbar/style/style.scss new file mode 100644 index 0000000..1e82e30 --- /dev/null +++ b/src/component/navbar/style/style.scss @@ -0,0 +1,6 @@ +@import "src/style/theme/vars.scss" + +.title{ + background-color: $primary; + border-bottom: 1em dashed $secondary; +} \ No newline at end of file diff --git a/src/component/note-create-form/index.js b/src/component/note-create-form/index.js new file mode 100644 index 0000000..ef8fcd6 --- /dev/null +++ b/src/component/note-create-form/index.js @@ -0,0 +1,67 @@ +import './style/style.scss' +import React from 'react' + +class NoteCreateForm extends React.Component { + constructor(props) { + super(props); + + let title = props.noteUpdate ? props.noteUpdate.title : '' + let content = props.noteUpdate ? props.noteUpdate.content : '' + + this.state ={ + title, + editing: false, + completed: false, + content + } + this.handleChange = this.handleChange.bind(this) + this.handleSubmit = this.handleSubmit.bind(this) + } + + handleChange(e) { + this.setState({ + [e.target.name]: e.target.value + }) + } + + handleSubmit(e) { + e.preventDefault(); + if(this.props.submitTitle == 'Update Note'){ + this.props.handleSubmit(this.state, this.props.noteUpdate.id) + }else{ + this.props.handleSubmit(this.state) + } + } + + render(){ + return( +
+
+ + +
+
+ + +
+
+ +
+
+ ) + } +} + +export default NoteCreateForm \ No newline at end of file diff --git a/src/component/note-item/index.js b/src/component/note-item/index.js new file mode 100644 index 0000000..0433478 --- /dev/null +++ b/src/component/note-item/index.js @@ -0,0 +1,70 @@ +import './style/style.scss' +import React from 'react' +import NoteCreateForm from '../note-create-form' + +class NoteItem extends React.Component{ + constructor(props){ + super(props) + this.state = { + editing: null, + } + + this.updateNote = this.updateNote.bind(this) + this.handleDelete = this.handleDelete.bind(this) + this.setTrue = this.setTrue.bind(this) + } + + handleDelete(){ + this.props.deleteNote(this.props.note.id); + } + + setTrue(){ + this.setState({ editing: true }); + } + + updateNote(note, id){ + note.id = id; + let notes = this.props.notesArr; + notes = notes.map(prevNote => { + return id === prevNote.id ? note : prevNote + }); + this.props.app.setState({ notesArr: notes}); + this.setState({ editing: false }); + } + + render(){ + return( +
  • + { + this.state.editing == true ? +
    + +
    + : +
    +
    +
    +

    *{this.props.note.title}*

    +
    + +
    +

    {this.props.note.content}

    +
    +
    +
    +

    Double Click To Edit

    +
    + +
    +
    + } +
  • + ); + } +} + +export default NoteItem \ No newline at end of file diff --git a/src/component/note-list/index.js b/src/component/note-list/index.js new file mode 100644 index 0000000..2f848e7 --- /dev/null +++ b/src/component/note-list/index.js @@ -0,0 +1,28 @@ +import './style/style.scss'; +import React from 'react'; +import NoteItem from '../note-item'; + +class NoteList extends React.Component{ + constructor(props){ + super(props); + } + + render(){ + return( +
    +
      + {this.props.notesArr.map((item, i) => { + return ( + + ); + } + )} +
    +
    + ) + } +}