diff --git a/.gitignore b/.gitignore
index fcd188e..c3781a2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,3 +21,5 @@
npm-debug.log*
yarn-debug.log*
yarn-error.log*
+.idea
+
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
new file mode 100644
index 0000000..aa4f55f
--- /dev/null
+++ b/.idea/codeStyles/Project.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml
new file mode 100644
index 0000000..79ee123
--- /dev/null
+++ b/.idea/codeStyles/codeStyleConfig.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..c6cc8c8
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..24eb271
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..ab3f0eb
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/react-starter.iml b/.idea/react-starter.iml
new file mode 100644
index 0000000..24643cc
--- /dev/null
+++ b/.idea/react-starter.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 0000000..70fc8fc
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,494 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ DEFINITION_ORDER
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1534943067839
+
+
+ 1534943067839
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/README.md b/README.md
deleted file mode 100644
index 974f8f8..0000000
--- a/README.md
+++ /dev/null
@@ -1,143 +0,0 @@
-# React Starter
-
-A basic template that consists of the essential elements that are required to start building a React (v16.4) application using Webpack (v4).
-
-The template consists of:
-
-* a typcial project layout structure
-* babel setup and configuration
-* webpack setup and configuration
-* eslint setup and configuration
-* SCSS setup and configuration
-* the main React components to get started
-
-Additionaly, the template provides a development and production webpack configuration.
-
-The template also allows one to include specific plugins as part of build. [Please see here for more detail](#build-application-with-bundleanalayzer-plugin-included)
-
----
-
-## Developed With
-
-* [Node.js 8.11](https://nodejs.org/en/) - Javascript runtime
-* [React 16.4](https://reactjs.org/) - A javascript library for building user interfaces
-* [Babel 6.26](https://babeljs.io/) - A transpiler for javascript
-* [Webpack 4.x](https://webpack.js.org/) - A module bundler
-* [SCSS](http://sass-lang.com/) - A css metalanguage
-
----
-
-## Getting Started
-
-These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
-
-### Prerequisites
-
-The following software is required to be installed on your system:
-
-* Node 8.x
-* Npm 3.x
-
-Type the following commands in the terminal to verify your node and npm versions
-
- ```bash
- node -v
- npm -v
- ```
-
-### Install
-
-Follow the following steps to get development environment running.
-
-* Clone _'react-starter'_ repository from GitHub
-
- ```bash
- git clone https://github.com/drminnaar/react-starter.git
- ```
-
- _OR USING SSH_
-
- ```bash
- git clone git@github.com:drminnaar/react-starter.git
- ```
-
-* Install node modules
-
- ```bash
- cd react-starter
- npm install
- ```
-
-### Build
-
-#### Build Application
-
-dev | prod
-:---: | :---:
-npm run build:dev | npm run build:prod
-
-#### Build Application And Watch For Changes
-
-dev | prod
-:---: | :---:
-npm run build:dev:watch | npm run build:prod:watch
-
-#### Build Application With BundleAnalayzer Plugin Included
-
-dev | prod
-:---: | :---:
-npm run build:dev:bundleanalyze | npm run build:prod:bundleanalyze
-
-After running the above command, a browser window will open displaying an interactive graph resembling the following image:
-
-
-
-### Run ESlint
-
-#### Lint Project Using ESLint
-
- ```bash
- npm run lint
- ```
-
-#### Lint Project Using ESLint, and autofix
-
- ```bash
- npm run lint:fix
- ```
-
-### Run
-
-#### Run Start
-
-This will run the _'serve:dev'_ npm task
-
-```bash
-npm start
-```
-
-#### Run Dev Server
-
-```bash
-npm run serve:dev
-```
-
-#### Run Dev Server With Dashboard
-
-```bash
-npm run serve:dev:dashboard
-```
-
-The above command will display a dashboard view in your console resembling the following image:
-
-
-
-#### Run Prod Server
-
-This command will build application using production settings and start the application using _live-server_
-
-```bash
-npm run serve:prod
-```
-
----
diff --git a/package-lock.json b/package-lock.json
index ae15120..fcc41cb 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2078,6 +2078,11 @@
"hoek": "2.16.3"
}
},
+ "bootstrap": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.1.3.tgz",
+ "integrity": "sha512-rDFIzgXcof0jDyjNosjv4Sno77X4KuPeFxG2XZZv1/Kc8DRVGVADdoQyyOVDwPqL36DDmtCQbrpMCqvpPLJQ0w=="
+ },
"brace-expansion": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
@@ -2568,6 +2573,11 @@
}
}
},
+ "classnames": {
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
+ "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
+ },
"clean-css": {
"version": "4.1.11",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz",
@@ -3656,6 +3666,11 @@
}
}
},
+ "dom-helpers": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.3.1.tgz",
+ "integrity": "sha512-2Sm+JaYn74OiTM2wHvxJOo3roiq/h25Yi69Fqk269cNUwIXsCvATB6CRSFC9Am/20G2b28hGv/+7NiWydIrPvg=="
+ },
"dom-serializer": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
@@ -8687,6 +8702,16 @@
"integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
"dev": true
},
+ "lodash.isfunction": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz",
+ "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw=="
+ },
+ "lodash.isobject": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz",
+ "integrity": "sha1-PI+41bW/S/kK4G4U8qUwpO2TXh0="
+ },
"lodash.memoize": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
@@ -8705,6 +8730,11 @@
"integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=",
"dev": true
},
+ "lodash.tonumber": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.tonumber/-/lodash.tonumber-4.0.3.tgz",
+ "integrity": "sha1-C5azGzVnJ5Prf1pj7nkfG56QJdk="
+ },
"lodash.uniq": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
@@ -10261,6 +10291,11 @@
"integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
"dev": true
},
+ "popper.js": {
+ "version": "1.14.4",
+ "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.4.tgz",
+ "integrity": "sha1-juwdj/AqWjoVLdQ0FKFce3n9abY="
+ },
"portfinder": {
"version": "1.0.13",
"resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz",
@@ -11117,9 +11152,9 @@
}
},
"react": {
- "version": "16.4.0",
- "resolved": "https://registry.npmjs.org/react/-/react-16.4.0.tgz",
- "integrity": "sha512-K0UrkLXSAekf5nJu89obKUM7o2vc6MMN9LYoKnCa+c+8MJRAT120xzPLENcWSRc7GYKIg0LlgJRDorrufdglQQ==",
+ "version": "16.4.2",
+ "resolved": "https://registry.npmjs.org/react/-/react-16.4.2.tgz",
+ "integrity": "sha512-dMv7YrbxO4y2aqnvA7f/ik9ibeLSHQJTI6TrYAenPSaQ6OXfb+Oti+oJiy8WBxgRzlKatYqtCjphTgDSCEiWFg==",
"requires": {
"fbjs": "0.8.16",
"loose-envify": "1.3.1",
@@ -11128,9 +11163,9 @@
}
},
"react-dom": {
- "version": "16.4.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.4.0.tgz",
- "integrity": "sha512-bbLd+HYpBEnYoNyxDe9XpSG2t9wypMohwQPvKw8Hov3nF7SJiJIgK56b46zHpBUpHb06a1iEuw7G3rbrsnNL6w==",
+ "version": "16.4.2",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.4.2.tgz",
+ "integrity": "sha512-Usl73nQqzvmJN+89r97zmeUpQDKDlh58eX6Hbs/ERdDHzeBzWy+ENk7fsGQ+5KxArV1iOFPT46/VneklK9zoWw==",
"requires": {
"fbjs": "0.8.16",
"loose-envify": "1.3.1",
@@ -11138,6 +11173,68 @@
"prop-types": "15.6.0"
}
},
+ "react-lifecycles-compat": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
+ "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
+ },
+ "react-popper": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-0.10.4.tgz",
+ "integrity": "sha1-rypBXqIike3VBGeNev2opu4ylao=",
+ "requires": {
+ "popper.js": "1.14.4",
+ "prop-types": "15.6.2"
+ },
+ "dependencies": {
+ "prop-types": {
+ "version": "15.6.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz",
+ "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==",
+ "requires": {
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1"
+ }
+ }
+ }
+ },
+ "react-transition-group": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.4.0.tgz",
+ "integrity": "sha512-Xv5d55NkJUxUzLCImGSanK8Cl/30sgpOEMGc5m86t8+kZwrPxPCPcFqyx83kkr+5Lz5gs6djuvE5By+gce+VjA==",
+ "requires": {
+ "dom-helpers": "3.3.1",
+ "loose-envify": "1.3.1",
+ "prop-types": "15.6.2",
+ "react-lifecycles-compat": "3.0.4"
+ },
+ "dependencies": {
+ "prop-types": {
+ "version": "15.6.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz",
+ "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==",
+ "requires": {
+ "loose-envify": "1.3.1",
+ "object-assign": "4.1.1"
+ }
+ }
+ }
+ },
+ "reactstrap": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/reactstrap/-/reactstrap-6.4.0.tgz",
+ "integrity": "sha512-+O0pnbsheW4i6wE96KlSpIhbnZM9EJv0XUYVuFbzLElRp33WrMKvX9YTgGgJQEqHLCJYYdJBi+fGm/hTwTfsCQ==",
+ "requires": {
+ "classnames": "2.2.6",
+ "lodash.isfunction": "3.0.9",
+ "lodash.isobject": "3.0.2",
+ "lodash.tonumber": "4.0.3",
+ "prop-types": "15.6.0",
+ "react-lifecycles-compat": "3.0.4",
+ "react-popper": "0.10.4",
+ "react-transition-group": "2.4.0"
+ }
+ },
"read-chunk": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz",
diff --git a/package.json b/package.json
index f2b4f30..42c58fa 100644
--- a/package.json
+++ b/package.json
@@ -58,8 +58,10 @@
"webpack-merge": "^4.1.2"
},
"dependencies": {
+ "bootstrap": "^4.1.3",
"normalize.css": "^8.0.0",
- "react": "^16.4.0",
- "react-dom": "^16.4.0"
+ "react": "^16.4.2",
+ "react-dom": "^16.4.2",
+ "reactstrap": "^6.4.0"
}
}
diff --git a/src/bookBg.jpg b/src/bookBg.jpg
new file mode 100644
index 0000000..5194c26
Binary files /dev/null and b/src/bookBg.jpg differ
diff --git a/src/books.jpg b/src/books.jpg
new file mode 100644
index 0000000..00703df
Binary files /dev/null and b/src/books.jpg differ
diff --git a/src/components/App.js b/src/components/App.js
deleted file mode 100644
index 469bf5d..0000000
--- a/src/components/App.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import React, { Component } from 'react';
-import logo from '../logo.png';
-
-export default class App extends Component {
-
- constructor() {
- super();
- }
-
- render() {
- return (
-
-

-
React Starter
-
- );
- }
-}
\ No newline at end of file
diff --git a/src/components/Book.js b/src/components/Book.js
new file mode 100644
index 0000000..b046c8d
--- /dev/null
+++ b/src/components/Book.js
@@ -0,0 +1,51 @@
+import React,{Component} from 'react';
+import { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';
+
+
+export default class BookItem extends Component {
+ constructor(props){
+ super(props);
+ this.state = {
+ modal: false,
+ };
+
+ this.toggle = this.toggle.bind(this);
+ }
+ toggle() {
+ this.setState({
+ modal: !this.state.modal
+ });
+ }
+
+ render() {
+
+ return (
+
+
+
+
+
+ title: {this.props.buttonLabel.title}
+
+
+
+
Autor: {this.props.buttonLabel.author}
+
Category: {this.props.buttonLabel.category}
+

+
Uploaded by: {this.props.buttonLabel.uploadedBy}
+
date: {this.props.buttonLabel.date}
+
+
+
Description
+
{this.props.buttonLabel.description}
+
+
+
+
+
+
+
+
+ );
+ }
+}
\ No newline at end of file
diff --git a/src/components/Navigation.js b/src/components/Navigation.js
new file mode 100644
index 0000000..3074772
--- /dev/null
+++ b/src/components/Navigation.js
@@ -0,0 +1,89 @@
+import React, {Component} from 'react';
+
+import {
+ Collapse,
+ Navbar,
+ NavbarToggler,
+ NavbarBrand,
+ Nav,
+ NavItem,
+ NavLink,
+ UncontrolledDropdown,
+ DropdownToggle,
+ DropdownMenu,
+ DropdownItem
+} from 'reactstrap';
+
+export default class Navigation extends Component {
+ constructor(props) {
+ super(props);
+
+ this.toggle = this.toggle.bind(this);
+ this.state = {
+ isOpen: false,
+ search: '',
+ };
+ }
+
+ toggle() {
+ this.setState({
+ isOpen: !this.state.isOpen
+ });
+ }
+
+ updateSearch(event) {
+ this.setState({
+ search: event.target.value.substr(0, 20)
+ });
+ }
+
+
+ render() {
+
+ return (
+
+
+ books
+
+
+
+
+
+
+ );
+ }
+
+}
+
diff --git a/src/index.js b/src/index.js
index aa436e4..adc3feb 100644
--- a/src/index.js
+++ b/src/index.js
@@ -7,9 +7,9 @@ import ReactDOM from 'react-dom';
import App from './components/App';
// STYLES
-
+import 'bootstrap/dist/css/bootstrap.min.css';
import 'normalize.css';
import './styles/app.scss';
-ReactDOM.render(, document.getElementById('app'));
\ No newline at end of file
+ReactDOM.render(, document.getElementById('app'));
\ No newline at end of file
diff --git a/src/styles/_base.scss b/src/styles/_base.scss
deleted file mode 100644
index 5a64c25..0000000
--- a/src/styles/_base.scss
+++ /dev/null
@@ -1,23 +0,0 @@
-body {
- background-color: $charcoal;
- font-family: $font-family;
-}
-
-.container {
- align-items: center;
- display: flex;
- flex-flow: column;
- height: 100vh;
- justify-content: center;
-}
-
-.logo {
- padding-top: 20px;
-}
-
-.title {
- color: $smoke;
- font-size: 48px;
- text-transform: uppercase;
- text-shadow: 0 0 20px black;
-}
\ No newline at end of file
diff --git a/src/styles/app.scss b/src/styles/app.scss
index 6235b8a..7dc0156 100644
--- a/src/styles/app.scss
+++ b/src/styles/app.scss
@@ -1,2 +1,3 @@
@import '_settings.scss';
-@import '_base.scss';
\ No newline at end of file
+@import '_base.scss';
+@import 'book.scss';
\ No newline at end of file
diff --git a/src/styles/book.scss b/src/styles/book.scss
new file mode 100644
index 0000000..366a099
--- /dev/null
+++ b/src/styles/book.scss
@@ -0,0 +1,39 @@
+.card{
+ flex-direction: row;
+ background-color: transparent;
+}
+
+.card-img{
+ width: 250px;
+ height: 300px;
+}
+
+.modal-dialog {
+ max-width: 90%;
+}
+
+.modal-content{
+ background-image: url("../books.jpg");
+ background-repeat: no-repeat;
+ background-size: 100% 100%;
+ border-radius: 7%;
+}
+
+.bg{
+ width: 100%;
+ background: rgba(255, 255, 255, 0.5);
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ border-radius: 7%;
+}
+
+.modal img{
+ width: 200px;
+ height: 200px;
+}
+
+.main{
+ background-image: url("../bookBg.jpg");
+}
\ No newline at end of file