From d72c370dc8fda6c9b684fe0f61b0bbc2744cdbef Mon Sep 17 00:00:00 2001 From: Brian Holt Date: Wed, 30 Nov 2016 21:51:37 -0600 Subject: [PATCH 01/19] Add async redux --- js/Details.js | 40 +++--- js/actionCreators.js | 19 ++- js/actions.js | 1 + js/reducers.js | 15 ++- js/store.js | 4 +- package.json | 3 +- yarn.lock | 311 +++++++++++++++---------------------------- 7 files changed, 166 insertions(+), 227 deletions(-) diff --git a/js/Details.js b/js/Details.js index 1a0f8c4eb..0606a1ded 100644 --- a/js/Details.js +++ b/js/Details.js @@ -1,7 +1,8 @@ import React from 'react' -import axios from 'axios' +import { connect } from 'react-redux' +import { getOMDBDetails } from './actionCreators' import Header from './Header' -const { shape, string } = React.PropTypes +const { shape, string, func } = React.PropTypes const Details = React.createClass({ propTypes: { @@ -11,28 +12,22 @@ const Details = React.createClass({ poster: string, trailer: string, imdbID: string - }) - }, - getInitialState () { - return { - omdbData: {} - } + }), + omdbData: shape({ + imdbID: string + }), + dispatch: func }, componentDidMount () { - axios.get(`http://www.omdbapi.com/?i=${this.props.show.imdbID}`) - .then((response) => { - console.log('response', response) - this.setState({omdbData: response.data}) - }) - .catch((error) => { - console.error('axios error', error) - }) + if (!this.props.omdbData.imdbRating) { + this.props.dispatch(getOMDBDetails(this.props.show.imdbID)) + } }, render () { const { title, description, year, poster, trailer } = this.props.show let rating - if (this.state.omdbData.imdbRating) { - rating =

{this.state.omdbData.imdbRating}

+ if (this.props.omdbData.imdbRating) { + rating =

{this.props.omdbData.imdbRating}

} else { rating = loading indicator } @@ -54,4 +49,11 @@ const Details = React.createClass({ } }) -export default Details +const mapStateToProps = (state, ownProps) => { + const omdbData = state.omdbData[ownProps.show.imdbID] ? state.omdbData[ownProps.show.imdbID] : {} + return { + omdbData + } +} + +export default connect(mapStateToProps)(Details) diff --git a/js/actionCreators.js b/js/actionCreators.js index dd6ac118b..c051b55a2 100644 --- a/js/actionCreators.js +++ b/js/actionCreators.js @@ -1,5 +1,22 @@ -import { SET_SEARCH_TERM } from './actions' +import { SET_SEARCH_TERM, ADD_OMDB_DATA } from './actions' +import axios from 'axios' export function setSearchTerm (searchTerm) { return { type: SET_SEARCH_TERM, searchTerm } } + +export function addOMDBData (imdbID, omdbData) { + return { type: ADD_OMDB_DATA, imdbID, omdbData } +} + +export function getOMDBDetails (imdbID) { + return function (dispatch, getState) { + axios.get(`http://www.omdbapi.com/?i=${imdbID}`) + .then((response) => { + dispatch(addOMDBData(imdbID, response.data)) + }) + .catch((error) => { + console.error('axios error', error) + }) + } +} diff --git a/js/actions.js b/js/actions.js index dd9cf5d40..4ffa536f2 100644 --- a/js/actions.js +++ b/js/actions.js @@ -1 +1,2 @@ export const SET_SEARCH_TERM = 'SET_SEARCH_TERM' +export const ADD_OMDB_DATA = 'ADD_OMDB_DATA' diff --git a/js/reducers.js b/js/reducers.js index d5fe6b418..270a3037b 100644 --- a/js/reducers.js +++ b/js/reducers.js @@ -1,7 +1,8 @@ -import { SET_SEARCH_TERM } from './actions' +import { SET_SEARCH_TERM, ADD_OMDB_DATA } from './actions' const DEFAULT_STATE = { - searchTerm: '' + searchTerm: '', + omdbData: {} } const setSearchTerm = (state, action) => { @@ -10,10 +11,20 @@ const setSearchTerm = (state, action) => { return newState } +const addOMDBData = (state, action) => { + const newOMDBData = {} + Object.assign(newOMDBData, state.omdbData, {[action.imdbID]: action.omdbData}) + const newState = {} + Object.assign(newState, state, {omdbData: newOMDBData}) + return newState +} + const rootReducer = (state = DEFAULT_STATE, action) => { switch (action.type) { case SET_SEARCH_TERM: return setSearchTerm(state, action) + case ADD_OMDB_DATA: + return addOMDBData(state, action) default: return state } diff --git a/js/store.js b/js/store.js index 857ee1d11..317f4f7eb 100644 --- a/js/store.js +++ b/js/store.js @@ -1,7 +1,9 @@ -import { createStore, compose } from 'redux' +import { createStore, compose, applyMiddleware } from 'redux' +import thunk from 'redux-thunk' import rootReducer from './reducers' const store = createStore(rootReducer, compose( + applyMiddleware(thunk), typeof window === 'object' && typeof window.devToolsExtension !== 'undefined' ? window.devToolsExtension() : (f) => f )) diff --git a/package.json b/package.json index f766681f7..1a392f94b 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,8 @@ "react-dom": "15.3.2", "react-redux": "4.4.0", "react-router": "4.0.0-alpha.5", - "redux": "3.3.1" + "redux": "3.3.1", + "redux-thunk": "^2.1.0" }, "devDependencies": { "babel-core": "6.16.0", diff --git a/yarn.lock b/yarn.lock index 49d8b0369..af5e71444 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,5 +1,11 @@ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 + + +Base64@~0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/Base64/-/Base64-0.2.1.tgz#ba3a4230708e186705065e66babdd4c35cf60028" + abab@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" @@ -184,20 +190,20 @@ async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" -async@^1.3.0, async@^1.4.0, async@^1.4.2, async@1.x: +async@1.x, async@^1.3.0, async@^1.4.0, async@^1.4.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@~0.2.6: - version "0.2.10" - resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" - async@2.0.0-rc.4: version "2.0.0-rc.4" resolved "https://registry.yarnpkg.com/async/-/async-2.0.0-rc.4.tgz#9b7f60724c17962a973f787419e0ebc5571dbad8" dependencies: lodash "^4.3.0" +async@~0.2.6: + version "0.2.10" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -235,31 +241,7 @@ babel-code-frame@^6.11.0, babel-code-frame@^6.16.0: esutils "^2.0.2" js-tokens "^2.0.0" -babel-core@^6.0.0, babel-core@^6.11.4, babel-core@^6.16.0, babel-core@^6.18.0: - version "6.18.2" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.18.2.tgz#d8bb14dd6986fa4f3566a26ceda3964fa0e04e5b" - dependencies: - babel-code-frame "^6.16.0" - babel-generator "^6.18.0" - babel-helpers "^6.16.0" - babel-messages "^6.8.0" - babel-register "^6.18.0" - babel-runtime "^6.9.1" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.11.0" - convert-source-map "^1.1.0" - debug "^2.1.1" - json5 "^0.5.0" - lodash "^4.2.0" - minimatch "^3.0.2" - path-is-absolute "^1.0.0" - private "^0.1.6" - slash "^1.0.0" - source-map "^0.5.0" - -babel-core@6.16.0: +babel-core@6.16.0, babel-core@^6.0.0, babel-core@^6.11.4, babel-core@^6.16.0: version "6.16.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.16.0.tgz#cf8bbfdf0097c4146195d80d9ec96d73acf387d5" dependencies: @@ -756,19 +738,7 @@ babel-preset-react@6.16.0: babel-plugin-transform-react-jsx-self "^6.11.0" babel-plugin-transform-react-jsx-source "^6.3.13" -babel-register@^6.16.0, babel-register@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.18.0.tgz#892e2e03865078dd90ad2c715111ec4449b32a68" - dependencies: - babel-core "^6.18.0" - babel-runtime "^6.11.6" - core-js "^2.4.0" - home-or-tmp "^2.0.0" - lodash "^4.2.0" - mkdirp "^0.5.1" - source-map-support "^0.4.2" - -babel-register@6.16.0: +babel-register@6.16.0, babel-register@^6.16.0: version "6.16.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.16.0.tgz#0d1c12aefb0bc839fbd5b3ecb4eca112b9d20ed1" dependencies: @@ -837,10 +807,6 @@ base64-js@^1.0.2: version "1.2.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1" -Base64@~0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/Base64/-/Base64-0.2.1.tgz#ba3a4230708e186705065e66babdd4c35cf60028" - batch@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464" @@ -1179,14 +1145,14 @@ colormin@^1.0.5: css-color-names "0.0.4" has "^1.0.1" -colors@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - colors@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" +colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" @@ -1254,10 +1220,6 @@ content-disposition@0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.1.tgz#87476c6a67c8daa87e32e87616df883ba7fb071b" -content-type-parser@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" - content-type@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" @@ -1420,7 +1382,7 @@ csso@~2.2.1: clap "^1.0.9" source-map "^0.5.3" -"cssom@>= 0.3.0 < 0.4.0", cssom@0.3.x: +cssom@0.3.x, "cssom@>= 0.3.0 < 0.4.0": version "0.3.1" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.1.tgz#c9e37ef2490e64f6d1baa10fda852257082c25d3" @@ -1535,7 +1497,7 @@ doctrine@^1.2.2: esutils "^2.0.2" isarray "^1.0.0" -dom-serializer@~0.1.0, dom-serializer@0: +dom-serializer@0, dom-serializer@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" dependencies: @@ -1546,14 +1508,10 @@ domain-browser@^1.1.1: version "1.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" -domelementtype@~1.1.1: +domelementtype@1, domelementtype@~1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" -domelementtype@1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" - domhandler@2.3: version "2.3.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" @@ -1609,14 +1567,14 @@ enhanced-resolve@^2.2.0: object-assign "^4.0.1" tapable "^0.2.3" -entities@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" - entities@1.0: version "1.0.0" resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" +entities@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + enzyme-to-json: version "1.3.0" resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-1.3.0.tgz#58b5eb2d9cc0ddd1250e900e2b8ffb775b85a32a" @@ -1637,7 +1595,7 @@ enzyme@2.0.0: object.values "^1.0.3" underscore "^1.8.3" -errno@^0.1.3, "errno@>=0.1.1 <0.2.0-0": +"errno@>=0.1.1 <0.2.0-0", errno@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" dependencies: @@ -1702,7 +1660,7 @@ es6-set@~0.1.3: es6-symbol "3" event-emitter "~0.3.4" -es6-symbol@~3.1, es6-symbol@~3.1.0, es6-symbol@3: +es6-symbol@3, es6-symbol@~3.1, es6-symbol@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa" dependencies: @@ -1726,7 +1684,7 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" -escodegen@^1.6.1, escodegen@1.8.x: +escodegen@1.8.x, escodegen@^1.6.1: version "1.8.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" dependencies: @@ -1746,11 +1704,7 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-config-standard-jsx@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-3.2.0.tgz#c240e26ed919a11a42aa4de8059472b38268d620" - -eslint-config-standard-jsx@3.1.0: +eslint-config-standard-jsx@3.1.0, eslint-config-standard-jsx@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-3.1.0.tgz#47511220743199b1fe0b0ad12279989f9250be55" @@ -1831,7 +1785,7 @@ espree@^3.3.1: acorn "^4.0.1" acorn-jsx "^3.0.0" -esprima@^2.6.0, esprima@^2.7.1, esprima@2.7.x: +esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" @@ -1915,7 +1869,7 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -express@^4.13.3, express@4.14.0: +express@4.14.0, express@^4.13.3: version "4.14.0" resolved "https://registry.yarnpkg.com/express/-/express-4.14.0.tgz#c1ee3f42cdc891fb3dc650a8922d51ec847d0d66" dependencies: @@ -2191,7 +2145,7 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob@^5.0.15, glob@5.x: +glob@5.x, glob@^5.0.15: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" dependencies: @@ -2322,13 +2276,6 @@ home-or-tmp@^1.0.0: os-tmpdir "^1.0.1" user-home "^1.1.1" -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - hosted-git-info@^2.1.4: version "2.1.5" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.1.5.tgz#0ba81d90da2e25ab34a332e6ec77936e1598118b" @@ -2337,12 +2284,6 @@ html-comment-regex@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" -html-encoding-sniffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" - dependencies: - whatwg-encoding "^1.0.1" - htmlparser2@~3.8.1: version "3.8.3" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" @@ -2396,7 +2337,7 @@ https-browserify@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" -iconv-lite@^0.4.13, iconv-lite@~0.4.13, iconv-lite@0.4.13: +iconv-lite@^0.4.13, iconv-lite@~0.4.13: version "0.4.13" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" @@ -2435,7 +2376,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@2: +inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -2648,14 +2589,14 @@ is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" -isarray@^1.0.0, isarray@~1.0.0, isarray@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + isexe@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0" @@ -2954,7 +2895,7 @@ js-tokens@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5" -js-yaml@^3.5.1, js-yaml@~3.6.1, js-yaml@3.x: +js-yaml@3.x, js-yaml@^3.5.1, js-yaml@~3.6.1: version "3.6.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" dependencies: @@ -2965,39 +2906,17 @@ jsbn@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.0.tgz#650987da0dd74f4ebf5a11377a2aa2d273e97dfd" -jsdom@^7.0.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-7.2.2.tgz#40b402770c2bda23469096bee91ab675e3b1fc6e" - dependencies: - abab "^1.0.0" - acorn "^2.4.0" - acorn-globals "^1.0.4" - cssom ">= 0.3.0 < 0.4.0" - cssstyle ">= 0.2.29 < 0.3.0" - escodegen "^1.6.1" - nwmatcher ">= 1.3.7 < 2.0.0" - parse5 "^1.5.1" - request "^2.55.0" - sax "^1.1.4" - symbol-tree ">= 3.1.0 < 4.0.0" - tough-cookie "^2.2.0" - webidl-conversions "^2.0.0" - whatwg-url-compat "~0.6.5" - xml-name-validator ">= 2.0.1 < 3.0.0" - -jsdom@^9.4.0: - version "9.8.3" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.8.3.tgz#fde29c109c32a1131e0b6c65914e64198f97c370" +jsdom@9.5.0, jsdom@^9.4.0: + version "9.5.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.5.0.tgz#cb7194c2a2a07c92af905f7822e45694196e27a0" dependencies: abab "^1.0.0" acorn "^2.4.0" acorn-globals "^1.0.4" array-equal "^1.0.0" - content-type-parser "^1.0.1" cssom ">= 0.3.0 < 0.4.0" cssstyle ">= 0.2.36 < 0.3.0" escodegen "^1.6.1" - html-encoding-sniffer "^1.0.1" iconv-lite "^0.4.13" nwmatcher ">= 1.3.7 < 2.0.0" parse5 "^1.5.1" @@ -3006,30 +2925,27 @@ jsdom@^9.4.0: symbol-tree ">= 3.1.0 < 4.0.0" tough-cookie "^2.3.1" webidl-conversions "^3.0.1" - whatwg-encoding "^1.0.1" whatwg-url "^3.0.0" xml-name-validator ">= 2.0.1 < 3.0.0" -jsdom@9.5.0: - version "9.5.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.5.0.tgz#cb7194c2a2a07c92af905f7822e45694196e27a0" +jsdom@^7.0.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-7.2.2.tgz#40b402770c2bda23469096bee91ab675e3b1fc6e" dependencies: abab "^1.0.0" acorn "^2.4.0" acorn-globals "^1.0.4" - array-equal "^1.0.0" cssom ">= 0.3.0 < 0.4.0" - cssstyle ">= 0.2.36 < 0.3.0" + cssstyle ">= 0.2.29 < 0.3.0" escodegen "^1.6.1" - iconv-lite "^0.4.13" nwmatcher ">= 1.3.7 < 2.0.0" parse5 "^1.5.1" request "^2.55.0" sax "^1.1.4" symbol-tree ">= 3.1.0 < 4.0.0" - tough-cookie "^2.3.1" - webidl-conversions "^3.0.1" - whatwg-url "^3.0.0" + tough-cookie "^2.2.0" + webidl-conversions "^2.0.0" + whatwg-url-compat "~0.6.5" xml-name-validator ">= 2.0.1 < 3.0.0" jsesc@^1.3.0: @@ -3257,11 +3173,7 @@ lodash.words@^3.0.0: dependencies: lodash._root "^3.0.0" -lodash@^4.0.0, lodash@^4.1.0, lodash@^4.16.2, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0: - version "4.16.6" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.6.tgz#d22c9ac660288f3843e16ba7d2b5d06cca27d777" - -lodash@4.16.2: +lodash@4.16.2, lodash@^4.0.0, lodash@^4.1.0, lodash@^4.16.2, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0: version "4.16.2" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.2.tgz#3e626db827048a699281a8a125226326cfc0e652" @@ -3363,7 +3275,7 @@ mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.7: dependencies: mime-db "~1.24.0" -mime@^1.3.4, mime@1.3.4: +mime@1.3.4, mime@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" @@ -3371,7 +3283,7 @@ minimalistic-assert@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" -minimatch@^3.0.0, minimatch@^3.0.2, "minimatch@2 || 3": +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" dependencies: @@ -3383,19 +3295,15 @@ minimatch@2.x: dependencies: brace-expansion "^1.0.0" +minimist@0.0.8, minimist@~0.0.1: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + minimist@^1.1.1, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -mkdirp@^0.5.0, mkdirp@^0.5.1, "mkdirp@>=0.5 0", mkdirp@~0.5.0, mkdirp@~0.5.1, mkdirp@0.5.x: +mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: @@ -3505,7 +3413,7 @@ node-uuid@~1.4.7: version "1.4.7" resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" -nopt@~3.0.6, nopt@3.x: +nopt@3.x, nopt@~3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" dependencies: @@ -3623,7 +3531,7 @@ on-headers@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" -once@^1.3.0, once@1.x: +once@1.x, once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -3748,16 +3656,16 @@ path-parse@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + path-to-regexp@^1.5.3: version "1.6.0" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.6.0.tgz#4c59cfeab5e360a2657b180730a4bb4582ecec5b" dependencies: isarray "0.0.1" -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" @@ -4088,27 +3996,27 @@ public-encrypt@^4.0.0: parse-asn1 "^5.0.0" randombytes "^2.0.1" -punycode@^1.2.4, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" +punycode@^1.2.4, punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + q@^1.1.2: version "1.4.1" resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" -qs@~6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" - qs@6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.0.tgz#3b7848c03c2dece69a9522b0fae8c4126d745f3b" -query-string@^4.1.0, query-string@4.2.3: +qs@~6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.0.tgz#f403b264f23bc01228c74131b407f18d5ea5d442" + +query-string@4.2.3, query-string@^4.1.0: version "4.2.3" resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.2.3.tgz#9f27273d207a25a8ee4c7b8c74dcd45d556db822" dependencies: @@ -4210,7 +4118,16 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@~2.1.4: +readable-stream@1.1: + version "1.1.13" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +"readable-stream@^2.0.0 || ^1.1.13", readable-stream@~2.1.4: version "2.1.5" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" dependencies: @@ -4222,7 +4139,7 @@ read-pkg@^1.0.0: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readable-stream@~2.0.0: +readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@~2.0.0: version "2.0.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" dependencies: @@ -4233,15 +4150,6 @@ readable-stream@~2.0.0: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readable-stream@1.1: - version "1.1.13" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - readdirp@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" @@ -4279,6 +4187,10 @@ reduce-function-call@^1.0.1: dependencies: balanced-match "~0.1.0" +redux-thunk@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.1.0.tgz#c724bfee75dbe352da2e3ba9bc14302badd89a98" + redux@3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/redux/-/redux-3.3.1.tgz#716df8004786deaf01c93ae396c84fc1041e424b" @@ -4394,7 +4306,7 @@ resolve-pathname@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.0.2.tgz#e55c016eb2e9df1de98e85002282bfb38c630436" -resolve@^1.1.6, resolve@1.1.7, resolve@1.1.x: +resolve@1.1.7, resolve@1.1.x, resolve@^1.1.6: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" @@ -4411,7 +4323,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@^2.2.8, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@~2.5.1, rimraf@~2.5.4, rimraf@2: +rimraf@2, rimraf@^2.2.8, rimraf@^2.4.3, rimraf@^2.4.4, rimraf@~2.5.1, rimraf@~2.5.4: version "2.5.4" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04" dependencies: @@ -4446,7 +4358,7 @@ sax@^1.1.4, sax@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" -semver@^5.1.0, semver@^5.3.0, semver@~5.3.0, "semver@2 || 3 || 4 || 5": +"semver@2 || 3 || 4 || 5", semver@^5.1.0, semver@^5.3.0, semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -4643,10 +4555,6 @@ strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" -string_decoder@~0.10.25, string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -4666,6 +4574,10 @@ string.prototype.codepointat@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/string.prototype.codepointat/-/string.prototype.codepointat-0.2.0.tgz#6b26e9bd3afcaa7be3b4269b526de1b82000ac78" +string_decoder@~0.10.25, string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + stringstream@~0.0.4: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" @@ -4880,16 +4792,16 @@ unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" -url-parse@^1.1.1: - version "1.1.7" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.7.tgz#025cff999653a459ab34232147d89514cc87d74a" +url-parse@1.0.x: + version "1.0.5" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" dependencies: querystringify "0.0.x" requires-port "1.0.x" -url-parse@1.0.x: - version "1.0.5" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" +url-parse@^1.1.1: + version "1.1.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.7.tgz#025cff999653a459ab34232147d89514cc87d74a" dependencies: querystringify "0.0.x" requires-port "1.0.x" @@ -4915,7 +4827,7 @@ util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" -util@~0.10.3, util@0.10.3: +util@0.10.3, util@~0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" dependencies: @@ -5060,12 +4972,6 @@ websocket-extensions@>=0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7" -whatwg-encoding@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" - dependencies: - iconv-lite "0.4.13" - whatwg-fetch@>=0.10.0: version "1.0.0" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-1.0.0.tgz#01c2ac4df40e236aaa18480e3be74bd5c8eb798e" @@ -5103,13 +5009,17 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.1" +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + window-size@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" wordwrap@^1.0.0, wordwrap@~1.0.0: version "1.0.0" @@ -5119,10 +5029,6 @@ wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - worker-farm@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff" @@ -5150,7 +5056,7 @@ write@^0.2.1: version "2.0.1" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" -xtend@^4.0.0, "xtend@>=4.0.0 <4.1.0-0": +"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -5218,4 +5124,3 @@ yargs@~3.10.0: cliui "^2.1.0" decamelize "^1.0.0" window-size "0.1.0" - From f832b4ca55b2eb83543c6900ad7cb3b563a70d8d Mon Sep 17 00:00:00 2001 From: Brian Holt Date: Wed, 30 Nov 2016 22:50:03 -0600 Subject: [PATCH 02/19] git ignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index e8b258fef..6b80783a9 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,5 @@ coverage .DS_Store *.map *.bundle.js +_site/ +.sass-cache/ From bd181be2dab7d5b7b4bd6e8b04a038176ae1618b Mon Sep 17 00:00:00 2001 From: Brian Holt Date: Thu, 1 Dec 2016 00:05:35 -0600 Subject: [PATCH 03/19] Add Preact!! --- package.json | 3 +++ webpack.config.js | 12 ++++++++++-- yarn.lock | 28 +++++++++++++++++++++++++++- 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 1a392f94b..d237d0045 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,9 @@ "express": "4.14.0", "history": "^4.4.0", "lodash": "4.16.2", + "preact": "^6.4.0", + "preact-compat": "^3.9.3", + "preact-render-to-string": "^3.3.0", "react": "15.3.2", "react-dom": "15.3.2", "react-redux": "4.4.0", diff --git a/webpack.config.js b/webpack.config.js index 4fea60a9e..4d1ae7e1d 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -3,13 +3,17 @@ const path = require('path') module.exports = { context: __dirname, entry: './js/ClientApp.js', - devtool: 'source-map', + devtool: 'cheap-module-source-map', output: { path: path.join(__dirname, '/public'), publicPath: '/public/', filename: 'bundle.js' }, resolve: { + // alias: { + // react: 'preact-compat', + // 'react-dom': 'preact-compat' + // }, extensions: ['.js', '.jsx', '.json'] }, stats: { @@ -43,7 +47,11 @@ module.exports = { }, { test: /\.js?$/, - loader: 'babel-loader' + loader: 'babel-loader', + include: [ + path.resolve('js'), + path.resolve('node_modules/preact-compat/src') + ] }, { test: /\.json$/, diff --git a/yarn.lock b/yarn.lock index af5e71444..22404e528 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3937,6 +3937,28 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0 source-map "^0.5.6" supports-color "^3.1.2" +preact-compat@^3.9.3: + version "3.9.3" + resolved "https://registry.yarnpkg.com/preact-compat/-/preact-compat-3.9.3.tgz#d7c3764cdd001649a6616fa32b1d253ff3739fb1" + dependencies: + preact-render-to-string "^3.2.1" + preact-transition-group "^1.1.0" + proptypes "^0.14.3" + +preact-render-to-string@^3.2.1, preact-render-to-string@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/preact-render-to-string/-/preact-render-to-string-3.3.0.tgz#e7cf3815fe590d8ddc21e57c996f5c5657ca57d5" + dependencies: + pretty-format "^3.5.1" + +preact-transition-group@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/preact-transition-group/-/preact-transition-group-1.1.0.tgz#97d0beff0790d721faecd2560c02cd30d5426f23" + +preact@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/preact/-/preact-6.4.0.tgz#1b8c99754b002639a1c33e68175eefa98a01cc14" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -3949,7 +3971,7 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -pretty-format@^3.7.0: +pretty-format@^3.5.1, pretty-format@^3.7.0: version "3.8.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-3.8.0.tgz#bfbed56d5e9a776645f4b1ff7aa1a3ac4fa3c385" @@ -3975,6 +3997,10 @@ promise@^7.1.1: dependencies: asap "~2.0.3" +proptypes@^0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/proptypes/-/proptypes-0.14.3.tgz#948d47f0ef1b501e34d934e42b39d60d26a8bf9d" + proxy-addr@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-1.1.2.tgz#b4cc5f22610d9535824c123aef9d3cf73c40ba37" From dbbf3ecda9e3da301e1894944ff981af24e6286f Mon Sep 17 00:00:00 2001 From: Rich Vazquez Date: Mon, 6 Feb 2017 16:20:31 -0600 Subject: [PATCH 04/19] Ignore Intellij IDE configuration files --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 6b80783a9..2f7333b00 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,5 @@ coverage *.bundle.js _site/ .sass-cache/ +*.iml +.idea/ From cbfaf7fbf09b4e50eea54ac74504e1da5cbc23ab Mon Sep 17 00:00:00 2001 From: Dan Minshew Date: Mon, 13 Feb 2017 13:58:49 -0600 Subject: [PATCH 05/19] small typo Itsy bitsy typo. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1ff7cea8d..4cf663fea 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # A Complete Intro to React -Welcome to a complete intro to React! The site actual workshop material for this repo can be found [here][gh-page]. On the master branch you will find the completed project. On the start branch you will find the barebones boilerplater of the project designed to help you get started. +Welcome to a complete intro to React! The site actual workshop material for this repo can be found [here][gh-page]. On the master branch you will find the completed project. On the start branch you will find the barebones boilerplate of the project designed to help you get started. ## Contributing From e8bac9f63a499bd8b5435b808b3938c6f7755dc1 Mon Sep 17 00:00:00 2001 From: Brian Date: Mon, 29 May 2017 09:42:10 -0700 Subject: [PATCH 06/19] Clearing out code to make v3 commit easier --- .babelrc | 14 - .eslintrc.json | 3 - index.html | 13 - js/App.js | 38 - js/AsyncRoute.js | 29 - js/ClientApp.js | 6 - js/Details.js | 59 - js/Header.js | 48 - js/Landing.js | 43 - js/MyTitle.js | 19 - js/Search.js | 41 - js/Search.spec.js | 29 - js/ShowCard.js | 29 - js/__snapshots__/Search.spec.js.snap | 156 - js/actionCreators.js | 22 - js/actions.js | 2 - js/reducers.js | 33 - js/reducers.spec.js | 14 - js/store.js | 10 - package.json | 78 - public/data.json | 150 - public/normalize.css | 424 --- public/style.css | 260 -- server.js | 31 - webpack.config.js | 62 - yarn.lock | 5152 -------------------------- 26 files changed, 6765 deletions(-) delete mode 100644 .babelrc delete mode 100644 .eslintrc.json delete mode 100644 index.html delete mode 100644 js/App.js delete mode 100644 js/AsyncRoute.js delete mode 100644 js/ClientApp.js delete mode 100644 js/Details.js delete mode 100644 js/Header.js delete mode 100644 js/Landing.js delete mode 100644 js/MyTitle.js delete mode 100644 js/Search.js delete mode 100644 js/Search.spec.js delete mode 100644 js/ShowCard.js delete mode 100644 js/__snapshots__/Search.spec.js.snap delete mode 100644 js/actionCreators.js delete mode 100644 js/actions.js delete mode 100644 js/reducers.js delete mode 100644 js/reducers.spec.js delete mode 100644 js/store.js delete mode 100644 package.json delete mode 100644 public/data.json delete mode 100644 public/normalize.css delete mode 100644 public/style.css delete mode 100644 server.js delete mode 100644 webpack.config.js delete mode 100644 yarn.lock diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 604127005..000000000 --- a/.babelrc +++ /dev/null @@ -1,14 +0,0 @@ -{ - "presets": [ - "react", - ["es2015", {modules: false, loose: true}] - ], - "env": { - "server": { - "plugins": ["transform-es2015-modules-commonjs"] - }, - "test": { - "plugins": ["transform-es2015-modules-commonjs"] - } - } -} diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 9aa861b35..000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": ["standard", "standard-react"] -} \ No newline at end of file diff --git a/index.html b/index.html deleted file mode 100644 index 37eb362cb..000000000 --- a/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - Vidflix - - - - -
<%= body %>
- - - diff --git a/js/App.js b/js/App.js deleted file mode 100644 index e736b8ab3..000000000 --- a/js/App.js +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react' -import { Match } from 'react-router' -import { Provider } from 'react-redux' -import store from './store' -import AsyncRoute from './AsyncRoute' -import preload from '../public/data.json' -if (global) { - global.System = { import () {} } -} - -const App = () => { - return ( - -
- } - /> - { - return - }} - /> - { - const show = preload.shows.filter((show) => props.params.id === show.imdbID) - return - }} - /> -
-
- ) -} - -export default App diff --git a/js/AsyncRoute.js b/js/AsyncRoute.js deleted file mode 100644 index 2a256b33e..000000000 --- a/js/AsyncRoute.js +++ /dev/null @@ -1,29 +0,0 @@ -import React from 'react' -const { object } = React.PropTypes - -const AsyncRoute = React.createClass({ - propTypes: { - props: object, - loadingPromise: object - }, - getInitialState () { - return { - loaded: false - } - }, - componentDidMount () { - this.props.loadingPromise.then((module) => { - this.component = module.default - this.setState({loaded: true}) - }) - }, - render () { - if (this.state.loaded) { - return - } else { - return

loading...

- } - } -}) - -export default AsyncRoute diff --git a/js/ClientApp.js b/js/ClientApp.js deleted file mode 100644 index 2aca765e1..000000000 --- a/js/ClientApp.js +++ /dev/null @@ -1,6 +0,0 @@ -import React from 'react' -import { render } from 'react-dom' -import { BrowserRouter } from 'react-router' -import App from './App' - -render(, document.getElementById('app')) diff --git a/js/Details.js b/js/Details.js deleted file mode 100644 index 0606a1ded..000000000 --- a/js/Details.js +++ /dev/null @@ -1,59 +0,0 @@ -import React from 'react' -import { connect } from 'react-redux' -import { getOMDBDetails } from './actionCreators' -import Header from './Header' -const { shape, string, func } = React.PropTypes - -const Details = React.createClass({ - propTypes: { - show: shape({ - title: string, - year: string, - poster: string, - trailer: string, - imdbID: string - }), - omdbData: shape({ - imdbID: string - }), - dispatch: func - }, - componentDidMount () { - if (!this.props.omdbData.imdbRating) { - this.props.dispatch(getOMDBDetails(this.props.show.imdbID)) - } - }, - render () { - const { title, description, year, poster, trailer } = this.props.show - let rating - if (this.props.omdbData.imdbRating) { - rating =

{this.props.omdbData.imdbRating}

- } else { - rating = loading indicator - } - return ( -
-
-
-

{title}

-

({year})

- {rating} - -

{description}

-
-
-