From 61896e7162bafd18c3a4922363bc07a468d6eff9 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Tue, 4 Sep 2018 09:23:55 +0200 Subject: [PATCH] Components Imported to have a nice Navbar --- client/package-lock.json | 103 +++++++++++++++++++++++++++ client/package.json | 6 +- client/public/index.html | 6 ++ client/src/App.js | 7 ++ client/src/actions/postActions.js | 6 ++ client/src/components/About.js | 14 ++++ client/src/components/Contact.js | 14 ++++ client/src/components/Home.js | 44 ++++++++++++ client/src/components/Navbar.js | 19 +++++ client/src/components/Post.js | 47 ++++++++++++ client/src/components/UserList.js | 12 +++- client/src/components/UserProfile.js | 41 +++++++++++ client/src/index.css | 82 +++++++++++++++++++++ client/src/pokeball.png | Bin 0 -> 16150 bytes client/src/queries/queries.js | 17 ++++- 15 files changed, 415 insertions(+), 3 deletions(-) create mode 100644 client/src/actions/postActions.js create mode 100644 client/src/components/About.js create mode 100644 client/src/components/Contact.js create mode 100644 client/src/components/Home.js create mode 100644 client/src/components/Navbar.js create mode 100644 client/src/components/Post.js create mode 100644 client/src/components/UserProfile.js create mode 100644 client/src/pokeball.png diff --git a/client/package-lock.json b/client/package-lock.json index c711ba3ca..74a742409 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -635,6 +635,15 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, + "axios": { + "version": "0.18.0", + "resolved": "http://registry.npmjs.org/axios/-/axios-0.18.0.tgz", + "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", + "requires": { + "follow-redirects": "1.5.7", + "is-buffer": "1.1.6" + } + }, "axobject-query": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-0.1.0.tgz", @@ -5051,6 +5060,28 @@ "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" }, + "history": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/history/-/history-4.7.2.tgz", + "integrity": "sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==", + "requires": { + "invariant": "2.2.4", + "loose-envify": "1.4.0", + "resolve-pathname": "2.2.0", + "value-equal": "0.4.0", + "warning": "3.0.0" + }, + "dependencies": { + "warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", + "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", + "requires": { + "loose-envify": "1.4.0" + } + } + } + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -6430,6 +6461,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" }, + "lodash-es": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.10.tgz", + "integrity": "sha512-iesFYPmxYYGTcmQK0sL8bX3TGHyM6b2qREaB4kamHfQyfPJP0xgoGxp19nsH16nsfquLdiyKyX3mQkfiSGV8Rg==" + }, "lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", @@ -8932,6 +8968,46 @@ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-4.0.1.tgz", "integrity": "sha512-xXUbDAZkU08aAkjtUvldqbvI04ogv+a1XdHxvYuHPYKIVk/42BIOD0zSKTHAWV4+gDy3yGm283z2072rA2gdtw==" }, + "react-redux": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.7.tgz", + "integrity": "sha512-5VI8EV5hdgNgyjfmWzBbdrqUkrVRKlyTKk1sGH3jzM2M2Mhj/seQgPXaz6gVAj2lz/nz688AdTqMO18Lr24Zhg==", + "requires": { + "hoist-non-react-statics": "2.5.5", + "invariant": "2.2.4", + "lodash": "4.17.10", + "lodash-es": "4.17.10", + "loose-envify": "1.4.0", + "prop-types": "15.6.2" + } + }, + "react-router": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-4.3.1.tgz", + "integrity": "sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==", + "requires": { + "history": "4.7.2", + "hoist-non-react-statics": "2.5.5", + "invariant": "2.2.4", + "loose-envify": "1.4.0", + "path-to-regexp": "1.7.0", + "prop-types": "15.6.2", + "warning": "4.0.2" + } + }, + "react-router-dom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.3.1.tgz", + "integrity": "sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==", + "requires": { + "history": "4.7.2", + "invariant": "2.2.4", + "loose-envify": "1.4.0", + "prop-types": "15.6.2", + "react-router": "4.3.1", + "warning": "4.0.2" + } + }, "react-scripts": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-1.1.5.tgz", @@ -9096,6 +9172,15 @@ } } }, + "redux": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.0.tgz", + "integrity": "sha512-NnnHF0h0WVE/hXyrB6OlX67LYRuaf/rJcbWvnHHEPCF/Xa/AZpwhs/20WyqzQae5x4SD2F9nPObgBh2rxAgLiA==", + "requires": { + "loose-envify": "1.4.0", + "symbol-observable": "1.2.0" + } + }, "regenerate": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", @@ -9320,6 +9405,11 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=" }, + "resolve-pathname": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-2.2.0.tgz", + "integrity": "sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==" + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -10651,6 +10741,11 @@ "spdx-expression-parse": "3.0.0" } }, + "value-equal": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz", + "integrity": "sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -10687,6 +10782,14 @@ "makeerror": "1.0.11" } }, + "warning": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.2.tgz", + "integrity": "sha512-wbTp09q/9C+jJn4KKJfJfoS6VleK/Dti0yqWSm6KMvJ4MRCXFQNapHuJXutJIrWV0Cf4AhTdeIe4qdKHR1+Hug==", + "requires": { + "loose-envify": "1.4.0" + } + }, "watch": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/watch/-/watch-0.10.0.tgz", diff --git a/client/package.json b/client/package.json index 1df1d0249..da93796b3 100644 --- a/client/package.json +++ b/client/package.json @@ -4,11 +4,15 @@ "private": true, "dependencies": { "apollo-boost": "^0.1.15", + "axios": "^0.18.0", "graphql": "^14.0.0", "react": "^16.4.2", "react-apollo": "^2.1.11", "react-dom": "^16.4.2", - "react-scripts": "1.1.5" + "react-redux": "^5.0.7", + "react-router-dom": "^4.3.1", + "react-scripts": "1.1.5", + "redux": "^4.0.0" }, "scripts": { "start": "react-scripts start", diff --git a/client/public/index.html b/client/public/index.html index ed0ebafa1..a611e4e0d 100644 --- a/client/public/index.html +++ b/client/public/index.html @@ -19,6 +19,12 @@ work correctly both with client-side routing and a non-root public URL. Learn how to configure a non-root public URL by running `npm run build`. --> + + + + + + React App diff --git a/client/src/App.js b/client/src/App.js index 9864ce2e0..360dc840e 100644 --- a/client/src/App.js +++ b/client/src/App.js @@ -2,6 +2,13 @@ import React, { Component } from 'react'; import ApolloClient from 'apollo-boost'; import {ApolloProvider} from 'react-apollo'; +import Navbar from './components/Navbar' +import { Route, BrowserRouter, Switch } from 'react-router-dom' +import Home from './components/Home' +import About from './components/About' +import Contact from './components/Contact' +import Post from './components/Post' + // Components import UserList from './components/UserList'; diff --git a/client/src/actions/postActions.js b/client/src/actions/postActions.js new file mode 100644 index 000000000..a3d838e2a --- /dev/null +++ b/client/src/actions/postActions.js @@ -0,0 +1,6 @@ +export const deletePost = (id) => { + return { + type: 'DELETE_POST', + id + } +} \ No newline at end of file diff --git a/client/src/components/About.js b/client/src/components/About.js new file mode 100644 index 000000000..5283ad55d --- /dev/null +++ b/client/src/components/About.js @@ -0,0 +1,14 @@ +import React from 'react' + +const About = () => { + return ( +
+
+

About

+

Lorem ipsum dolor sit amet consectetur adipisicing elit. Recusandae repudiandae repellat illo magni eligendi cupiditate voluptates eius nam voluptate. Incidunt nihil ullam quae quia officia quaerat, deserunt eligendi explicabo totam?

+
+
+ ) +} + +export default About diff --git a/client/src/components/Contact.js b/client/src/components/Contact.js new file mode 100644 index 000000000..07bdb5692 --- /dev/null +++ b/client/src/components/Contact.js @@ -0,0 +1,14 @@ +import React from 'react' + +const Contact = () => { + return ( +
+
+

Contact

+

Lorem ipsum dolor sit amet consectetur adipisicing elit. Recusandae repudiandae repellat illo magni eligendi cupiditate voluptates eius nam voluptate. Incidunt nihil ullam quae quia officia quaerat, deserunt eligendi explicabo totam?

+
+
+ ) +} + +export default Contact diff --git a/client/src/components/Home.js b/client/src/components/Home.js new file mode 100644 index 000000000..cb1f79b04 --- /dev/null +++ b/client/src/components/Home.js @@ -0,0 +1,44 @@ +import React, { Component } from 'react' +import { Link } from 'react-router-dom' +import Pokeball from '../pokeball.png' +import { connect } from 'react-redux' + +class Home extends Component { + render(){ + const { posts } = this.props + const postList = posts.length ? ( + posts.map(post => { + return ( +
+ A Pokeball +
+ + {post.title} + +

{post.body}

+
+
+ ) + }) + ) : ( +
No posts to show
+ ); + + return ( +
+
+

Home

+ {postList} +
+
+ ) + } +} + +const mapStateToProps = (state) => { + return { + posts: state.posts + } +} + +export default connect(mapStateToProps)(Home) \ No newline at end of file diff --git a/client/src/components/Navbar.js b/client/src/components/Navbar.js new file mode 100644 index 000000000..7c0dd514a --- /dev/null +++ b/client/src/components/Navbar.js @@ -0,0 +1,19 @@ +import React from 'react'; +import { Link, NavLink, withRouter } from 'react-router-dom' + +const Navbar = (props) => { + return ( + + ) +} + +export default withRouter(Navbar) \ No newline at end of file diff --git a/client/src/components/Post.js b/client/src/components/Post.js new file mode 100644 index 000000000..8ae8e1de1 --- /dev/null +++ b/client/src/components/Post.js @@ -0,0 +1,47 @@ +import React, { Component } from 'react' +import { connect } from 'react-redux' +import { deletePost } from '../actions/postActions' + +class Post extends Component { + handleClick = () => { + this.props.deletePost(this.props.post.id); + this.props.history.push('/'); + } + render() { + + const post = this.props.post ? ( +
+

{this.props.post.title}

+

{this.props.post.body}

+
+ +
+
+ ) : ( +
Loading post...
+ ); + + return ( +
+ {post} +
+ ) + } +} + +const mapStateToProps = (state, ownProps) => { + let id = ownProps.match.params.post_id; + return { + post: state.posts.find(post => post.id === id) + } +} + +const mapDispatchToProps = (dispatch) => { + return { + deletePost: (id) => dispatch(deletePost(id)) + } +} + +export default connect(mapStateToProps, mapDispatchToProps)(Post) diff --git a/client/src/components/UserList.js b/client/src/components/UserList.js index 984bd2a70..a9c54bc72 100644 --- a/client/src/components/UserList.js +++ b/client/src/components/UserList.js @@ -2,7 +2,16 @@ import React, { Component } from 'react'; import {graphql} from 'react-apollo'; import {getUsersQuery} from '../queries/queries'; +// components +import UserProfile from './UserProfile'; + class UserList extends Component { + constructor(props){ + super(props); + this.state = { + selected: null + } + } displayUsers(){ let data = this.props.data; @@ -11,7 +20,7 @@ class UserList extends Component { } else { return data.users.map(user => { return ( -
  • {user.alias}
  • +
  • {this.setState({ selected: user.id})}} >{user.alias}
  • ) }); } @@ -22,6 +31,7 @@ class UserList extends Component { + ); } diff --git a/client/src/components/UserProfile.js b/client/src/components/UserProfile.js new file mode 100644 index 000000000..dfc959e1a --- /dev/null +++ b/client/src/components/UserProfile.js @@ -0,0 +1,41 @@ +import React, { Component } from 'react'; +import {graphql} from 'react-apollo'; +import {getUserProfileQuery} from '../queries/queries'; + +class UserProfile extends Component { + + displayUserProfile(){ + const {user} = this.props.data; + console.log(user); + if(user){ + return( +
    +

    { user.alias }

    +

    { user.firstName }

    +

    { user.lastName }

    +

    { user.role.name }

    +
    + ); + } else { + return(
    No User selected...
    ); + } + } + + render() { + return ( +
    + {this.displayUserProfile()} +
    + ); + } +} + +export default graphql(getUserProfileQuery, { // What follows is the way to pass a parameter to a query. + options: (props) => { + return { + variables: { + id: props.userId + } + } + } +})(UserProfile); // This binds the querty to the component diff --git a/client/src/index.css b/client/src/index.css index d6c3cf961..74d96ab6c 100644 --- a/client/src/index.css +++ b/client/src/index.css @@ -2,3 +2,85 @@ body { background: #eee; font-family: "Arial"; } + +#main h1{ + color:#444; + text-align: center; +} + +#main{ + padding: 0px; + box-sizing: border-box; + width: 60%; + height: 100%; +} + +#user-list{ + color: black; + padding: 0; +} + +#user-list-li{ + color: pink; + display: inline-block; + margin: 12px; + padding: 10px; + border-radius: 4px; + border: 1px solid #889E4F; + box-shadow: 1px 2px 3px rgba(0,0,0,3); + cursor: pointer; + color: #880E4F; +} + +form{ + background: #fff; + padding: 20px; + position: fixed; + left: 0; + bottom: 0; + width: 50%; +} + +form .field{ + display: grid; + grid-template-columns: 1fr 1fr; + grid-gap: 10px; +} + +form label{ + text-align: right; + padding: 6px; +} + +form input, form select{ + margin: 4px 0; + padding: 6px; + box-sizing: border-box; +} + +form button{ + color: #fff; + font-size: 2em; + background: #AD1457; + border: 0; + padding: 0 10px; + border-radius: 50%; + cursor: pointer; + position: absolute; + bottom: 10px; + left: 10px; +} + +#user-profile{ + position: fixed; + top: 0; + right: 0; + width: 40%; + height: 100%; + background: #AD1457; + padding: 30px; + overflow: auto; + box-shadow: -2px -3px 5px rgba(0,0,0,0.3); + box-sizing: border-box; + color: #fff; +} diff --git a/client/src/pokeball.png b/client/src/pokeball.png new file mode 100644 index 0000000000000000000000000000000000000000..f5eff9cffcf87e8692b99f2adea46e2894b491d8 GIT binary patch literal 16150 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 literal 0 HcmV?d00001 diff --git a/client/src/queries/queries.js b/client/src/queries/queries.js index d13c1fbcb..67617aa5d 100644 --- a/client/src/queries/queries.js +++ b/client/src/queries/queries.js @@ -11,6 +11,21 @@ const getUsersQuery = gql` } } ` + +const getUserProfileQuery = gql` +query($id: ID){ + user (id: $id){ + id + alias + firstName + lastName + role { + name + } + } +} +` + const getRolesQuery = gql` { roles { @@ -28,4 +43,4 @@ mutation($alias: String!, $firstName:String, $lastName:String, $roleId:String!) } } ` -export {getUsersQuery, getRolesQuery, addUserMutation} +export {getUsersQuery, getRolesQuery, addUserMutation, getUserProfileQuery}