├── .babelrc
├── .gitignore
├── README.md
├── __mocks__
├── fileMock.js
└── styleMock.js
├── docs
├── index.html
├── main-7c50e1ac1ea6917e2042.js
└── media
│ ├── 674f50d287a8.eot
│ ├── 912ec66d7572.svg
│ ├── af7ae505a9ee.woff2
│ ├── b06871f281fe.ttf
│ └── fee66e712a8a.woff
├── gulpfile.js
├── package.json
├── postcss.config.js
├── public
├── css
│ └── simple-line-icons.css
├── favicon.ico
├── fonts
│ ├── Simple-Line-Icons.eot
│ ├── Simple-Line-Icons.svg
│ ├── Simple-Line-Icons.ttf
│ ├── Simple-Line-Icons.woff
│ └── Simple-Line-Icons.woff2
└── img
│ ├── avatars
│ ├── 1.jpg
│ ├── 2.jpg
│ ├── 3.jpg
│ ├── 4.jpg
│ ├── 5.jpg
│ ├── 6.jpg
│ ├── 7.jpg
│ └── 8.jpg
│ ├── backgroundLogin.jpg
│ ├── flags
│ ├── ASEAN.png
│ ├── Afghanistan.png
│ ├── African Union.png
│ ├── Albania.png
│ ├── Algeria.png
│ ├── American Samoa.png
│ ├── Andorra.png
│ ├── Angola.png
│ ├── Anguilla.png
│ ├── Antarctica.png
│ ├── Antigua & Barbuda.png
│ ├── Arab League.png
│ ├── Argentina.png
│ ├── Armenia.png
│ ├── Aruba.png
│ ├── Australia.png
│ ├── Austria.png
│ ├── Azerbaijan.png
│ ├── Bahamas.png
│ ├── Bahrain.png
│ ├── Bangladesh.png
│ ├── Barbados.png
│ ├── Belarus.png
│ ├── Belgium.png
│ ├── Belize.png
│ ├── Benin.png
│ ├── Bermuda.png
│ ├── Bhutan.png
│ ├── Bolivia.png
│ ├── Bosnia & Herzegovina.png
│ ├── Botswana.png
│ ├── Brazil.png
│ ├── Brunei.png
│ ├── Bulgaria.png
│ ├── Burkina Faso.png
│ ├── Burundi.png
│ ├── CARICOM.png
│ ├── CIS.png
│ ├── Cambodja.png
│ ├── Cameroon.png
│ ├── Canada.png
│ ├── Cape Verde.png
│ ├── Cayman Islands.png
│ ├── Central African Republic.png
│ ├── Chad.png
│ ├── Chile.png
│ ├── China.png
│ ├── Colombia.png
│ ├── Commonwealth.png
│ ├── Comoros.png
│ ├── Congo-Brazzaville.png
│ ├── Congo-Kinshasa(Zaire).png
│ ├── Cook Islands.png
│ ├── Costa Rica.png
│ ├── Cote d'Ivoire.png
│ ├── Croatia.png
│ ├── Cuba.png
│ ├── Cyprus.png
│ ├── Czech Republic.png
│ ├── Denmark.png
│ ├── Djibouti.png
│ ├── Dominica.png
│ ├── Dominican Republic.png
│ ├── Ecuador.png
│ ├── Egypt.png
│ ├── El Salvador.png
│ ├── England.png
│ ├── Equatorial Guinea.png
│ ├── Eritrea.png
│ ├── Estonia.png
│ ├── Ethiopia.png
│ ├── European Union.png
│ ├── Faroes.png
│ ├── Fiji.png
│ ├── Finland.png
│ ├── France.png
│ ├── Gabon.png
│ ├── Gambia.png
│ ├── Georgia.png
│ ├── Germany.png
│ ├── Ghana.png
│ ├── Gibraltar.png
│ ├── Greece.png
│ ├── Greenland.png
│ ├── Grenada.png
│ ├── Guadeloupe.png
│ ├── Guam.png
│ ├── Guatemala.png
│ ├── Guernsey.png
│ ├── Guinea-Bissau.png
│ ├── Guinea.png
│ ├── Guyana.png
│ ├── Haiti.png
│ ├── Honduras.png
│ ├── Hong Kong.png
│ ├── Hungary.png
│ ├── Iceland.png
│ ├── India.png
│ ├── Indonezia.png
│ ├── Iran.png
│ ├── Iraq.png
│ ├── Ireland.png
│ ├── Islamic Conference.png
│ ├── Isle of Man.png
│ ├── Israel.png
│ ├── Italy.png
│ ├── Jamaica.png
│ ├── Japan.png
│ ├── Jersey.png
│ ├── Jordan.png
│ ├── Kazakhstan.png
│ ├── Kenya.png
│ ├── Kiribati.png
│ ├── Kosovo.png
│ ├── Kuwait.png
│ ├── Kyrgyzstan.png
│ ├── Laos.png
│ ├── Latvia.png
│ ├── Lebanon.png
│ ├── Lesotho.png
│ ├── Liberia.png
│ ├── Libya.png
│ ├── Liechtenshein.png
│ ├── Lithuania.png
│ ├── Luxembourg.png
│ ├── Macao.png
│ ├── Macedonia.png
│ ├── Madagascar.png
│ ├── Malawi.png
│ ├── Malaysia.png
│ ├── Maldives.png
│ ├── Mali.png
│ ├── Malta.png
│ ├── Marshall Islands.png
│ ├── Martinique.png
│ ├── Mauritania.png
│ ├── Mauritius.png
│ ├── Mexico.png
│ ├── Micronesia.png
│ ├── Moldova.png
│ ├── Monaco.png
│ ├── Mongolia.png
│ ├── Montenegro.png
│ ├── Montserrat.png
│ ├── Morocco.png
│ ├── Mozambique.png
│ ├── Myanmar(Burma).png
│ ├── NATO.png
│ ├── Namibia.png
│ ├── Nauru.png
│ ├── Nepal.png
│ ├── Netherlands Antilles.png
│ ├── Netherlands.png
│ ├── New Caledonia.png
│ ├── New Zealand.png
│ ├── Nicaragua.png
│ ├── Niger.png
│ ├── Nigeria.png
│ ├── North Korea.png
│ ├── Northern Cyprus.png
│ ├── Northern Ireland.png
│ ├── Norway.png
│ ├── OPEC.png
│ ├── Olimpic Movement.png
│ ├── Oman.png
│ ├── Pakistan.png
│ ├── Palau.png
│ ├── Palestine.png
│ ├── Panama.png
│ ├── Papua New Guinea.png
│ ├── Paraguay.png
│ ├── Peru.png
│ ├── Philippines.png
│ ├── Poland.png
│ ├── Portugal.png
│ ├── Puerto Rico.png
│ ├── Qatar.png
│ ├── Red Cross.png
│ ├── Reunion.png
│ ├── Romania.png
│ ├── Russia.png
│ ├── Rwanda.png
│ ├── Saint Lucia.png
│ ├── Samoa.png
│ ├── San Marino.png
│ ├── Sao Tome & Principe.png
│ ├── Saudi Arabia.png
│ ├── Scotland.png
│ ├── Senegal.png
│ ├── Serbia(Yugoslavia).png
│ ├── Seychelles.png
│ ├── Sierra Leone.png
│ ├── Singapore.png
│ ├── Slovakia.png
│ ├── Slovenia.png
│ ├── Solomon Islands.png
│ ├── Somalia.png
│ ├── Somaliland.png
│ ├── South Africa.png
│ ├── South Korea.png
│ ├── Spain.png
│ ├── Sri Lanka.png
│ ├── St Kitts & Nevis.png
│ ├── St Vincent & the Grenadines.png
│ ├── Sudan.png
│ ├── Suriname.png
│ ├── Swaziland.png
│ ├── Sweden.png
│ ├── Switzerland.png
│ ├── Syria.png
│ ├── Tahiti(French Polinesia).png
│ ├── Taiwan.png
│ ├── Tajikistan.png
│ ├── Tanzania.png
│ ├── Thailand.png
│ ├── Timor-Leste.png
│ ├── Togo.png
│ ├── Tonga.png
│ ├── Trinidad & Tobago.png
│ ├── Tunisia.png
│ ├── Turkey.png
│ ├── Turkmenistan.png
│ ├── Turks and Caicos Islands.png
│ ├── Tuvalu.png
│ ├── USA.png
│ ├── Uganda.png
│ ├── Ukraine.png
│ ├── United Arab Emirates.png
│ ├── United Nations.png
│ ├── United-Kingdom.png
│ ├── Uruguay.png
│ ├── Uzbekistan.png
│ ├── Vanutau.png
│ ├── Vatican City.png
│ ├── Venezuela.png
│ ├── Viet Nam.png
│ ├── Virgin Islands British.png
│ ├── Virgin Islands US.png
│ ├── Wales.png
│ ├── Western Sahara.png
│ ├── Yemen.png
│ ├── Zambia.png
│ └── Zimbabwe.png
│ └── logo.png
├── server.js
├── src
├── components
│ ├── aside
│ │ └── index.js
│ ├── breadcrumb
│ │ └── index.js
│ ├── button
│ │ ├── button-danger.js
│ │ ├── button-info.js
│ │ ├── button-success.js
│ │ ├── button-warning.js
│ │ └── index.js
│ ├── content-management
│ │ ├── css
│ │ │ └── management.styl
│ │ └── index.js
│ ├── create-button
│ │ ├── css
│ │ │ └── create-button.styl
│ │ └── index.js
│ ├── filters
│ │ ├── css
│ │ │ └── filters.styl
│ │ └── index.js
│ ├── footer
│ │ ├── footer.story.js
│ │ └── index.js
│ ├── form-footer
│ │ └── index.js
│ ├── hamburger
│ │ └── index.js
│ ├── header-management
│ │ ├── css
│ │ │ └── header-management.styl
│ │ └── index.js
│ ├── header
│ │ └── index.js
│ ├── icon
│ │ └── index.js
│ ├── input-warn
│ │ ├── css
│ │ │ └── input-warn.styl
│ │ └── index.js
│ ├── input
│ │ └── index.js
│ ├── loader-full-page
│ │ ├── css
│ │ │ └── loader-full-page.styl
│ │ └── index.js
│ ├── loader
│ │ ├── css
│ │ │ └── loader.styl
│ │ └── index.js
│ ├── messages
│ │ └── index.js
│ ├── pagination
│ │ ├── css
│ │ │ └── pagination.styl
│ │ ├── index.js
│ │ ├── page.js
│ │ ├── pagination.story.js
│ │ └── text.js
│ ├── particles
│ │ └── index.js
│ ├── redux-toastr
│ │ └── index.js
│ ├── search-input
│ │ ├── css
│ │ │ └── search-input.styl
│ │ └── index.js
│ ├── sidebar
│ │ ├── css
│ │ │ └── sidebar.styl
│ │ ├── index.js
│ │ ├── menu-item.js
│ │ └── menu-tree.js
│ └── table-generator
│ │ ├── css
│ │ └── table-generator.styl
│ │ └── index.js
├── constants.js
├── containers
│ ├── app
│ │ └── index.js
│ ├── dashboard
│ │ └── index.js
│ ├── errors
│ │ └── 404
│ │ │ └── index.js
│ ├── login
│ │ ├── css
│ │ │ └── login.styl
│ │ └── index.js
│ └── participants
│ │ ├── css
│ │ └── management.styl
│ │ ├── form.js
│ │ ├── index.js
│ │ ├── management.js
│ │ └── validators.js
├── data.js
├── dist
│ ├── core
│ │ └── style.css
│ └── css
│ │ └── default.styl
├── globals.js
├── index.js
├── main.js
├── redux-flow
│ ├── reducers
│ │ ├── app
│ │ │ ├── action-creators.js
│ │ │ ├── actions.js
│ │ │ └── index.js
│ │ ├── auth
│ │ │ ├── action-creators.js
│ │ │ ├── actions.js
│ │ │ ├── auth.test.js
│ │ │ └── index.js
│ │ ├── participants
│ │ │ ├── action-creators.js
│ │ │ ├── actions.js
│ │ │ ├── index.js
│ │ │ └── participants.test.js
│ │ ├── root-reducers.js
│ │ └── sidebar
│ │ │ ├── action-creators.js
│ │ │ ├── actions.js
│ │ │ └── index.js
│ └── stores
│ │ ├── configure-store.development.js
│ │ ├── configure-store.js
│ │ └── configure-store.production.js
├── root-routes.js
├── routes.js
├── template.html
└── utils
│ ├── active-route
│ ├── active-route.test.js
│ └── index.js
│ ├── auth.js
│ ├── pagination
│ ├── index.js
│ └── pagination.test.js
│ ├── particles-config.json
│ ├── validators.js
│ └── ws-client
│ └── index.js
├── storybook
├── config.js
└── webpack.config.js
└── webpack
├── common.js
├── dev.config.js
├── prod.config.js
└── storybook.config.js
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | "es2015",
4 | "stage-0",
5 | "react"
6 | ],
7 | "plugins": [
8 | "react-hot-loader/babel",
9 | ["transform-runtime", {
10 | "helpers": false,
11 | "polyfill": false,
12 | "regenerator": true
13 | }
14 | ]
15 | ]
16 | }
17 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /vendor/*
2 | nbproject
3 | .idea
4 | /node_modules
5 | *.log
6 | /coverage/*
7 | npm-debug.log
8 | yarn.lock
9 | yarn-error.log
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Starter Kit CoreUI - React Redux
2 |
3 | ###### [Work in Progress] When I thought of using [CoreUI](https://github.com/mrholek/CoreUI-Free-Bootstrap-Admin-Template) with React, I realized it's very simple for what I needed, so I've adapted it to ES6, Flux / Redux and Webpack 2 flow.
4 |
5 |
6 |
7 | ## This kit is using:
8 |
9 | * Template[CoreUI](https://github.com/mrholek/CoreUI-Free-Bootstrap-Admin-Template)
10 | * Webpack 2
11 | * Redux
12 | * Redux Form
13 | * Redux Dev Tools
14 | * Babel
15 | * React Hot Loader
16 | * React Router 4
17 | * Storybook
18 | * Jest and Chai (TDD)
19 | * [Ducks](https://github.com/erikras/ducks-modular-redux) - Redux Reducer Bundles
20 |
21 | ## Up and running
22 |
23 | - Clone this repository: `git clone git@github.com:gabrielferreiraa/react-redux-boilerplate.git`
24 | - Install dependencies: `yarn` or `yarn install`
25 | - Run `yarn dev` and access `http://localhost:3000`
26 | - Run `yarn build` for production build
27 |
28 | ## Scripts
29 |
30 | - Run storybook `yarn storybook`
31 | - Run tests `yarn test` or `yarn test:watch`
32 | - Run lint `yarn lint` or `yarn lint:watch`
33 | - Fix lint `yarn lint:fix`
34 | - Build `yarn build`
35 |
36 | ## License
37 |
38 | [MIT](https://github.com/gabrielferreiraa/licenses/blob/master/MIT#L1) © Gabriel Ferreira
39 |
--------------------------------------------------------------------------------
/__mocks__/fileMock.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | module.exports = 'test-file-stub'
4 |
--------------------------------------------------------------------------------
/__mocks__/styleMock.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | module.exports = {}
4 |
--------------------------------------------------------------------------------
/docs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | Starter Kit React
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/docs/media/674f50d287a8.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/docs/media/674f50d287a8.eot
--------------------------------------------------------------------------------
/docs/media/af7ae505a9ee.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/docs/media/af7ae505a9ee.woff2
--------------------------------------------------------------------------------
/docs/media/b06871f281fe.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/docs/media/b06871f281fe.ttf
--------------------------------------------------------------------------------
/docs/media/fee66e712a8a.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/docs/media/fee66e712a8a.woff
--------------------------------------------------------------------------------
/gulpfile.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | const gulp = require('gulp')
4 | const { spawn } = require('child_process')
5 |
6 | gulp.task('lint', cb => {
7 | const cmd = spawn('yarn', ['lint'], { stdio: 'inherit' })
8 |
9 | cmd.on('close', () => cb())
10 | })
11 |
12 | gulp.task('default', ['lint'], () => {
13 | gulp.watch('src/**/*.js', ['lint'])
14 | })
15 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "scripts": {
3 | "start": "yarn dev",
4 | "dev": "webpack-dashboard -- node server.js",
5 | "test": "jest --coverage",
6 | "test:watch": "yarn test -- --watch",
7 | "lint": "standard --parser babel-eslint --verbose | snazzy",
8 | "lint:fix": "standard --fix",
9 | "lint:watch": "gulp",
10 | "build": "cross-env NODE_ENV=production webpack --progress --config webpack/prod.config -p",
11 | "build:analyzer": "cross-env ANALYZER=true yarn build",
12 | "storybook": "start-storybook -p 9001 -c storybook",
13 | "build-storybook": "build-storybook -c storybook"
14 | },
15 | "jest": {
16 | "moduleNameMapper": {
17 | "\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "/__mocks__/fileMock.js",
18 | "\\.(css|styl)$": "/__mocks__/styleMock.js",
19 | "^src(.*)$": "/src$1",
20 | "^utils(.*)$": "/src/utils$1",
21 | "^components(.*)$": "/src/components$1"
22 | }
23 | },
24 | "devDependencies": {
25 | "@kadira/storybook": "2.35.3",
26 | "autoprefixer": "7.1.1",
27 | "babel-core": "6.21.0",
28 | "babel-eslint": "^7.2.3",
29 | "babel-jest": "^20.0.3",
30 | "babel-loader": "6.2.10",
31 | "babel-polyfill": "6.23.0",
32 | "babel-preset-es2015": "6.18.0",
33 | "babel-preset-react": "6.16.0",
34 | "babel-preset-stage-0": "6.16.0",
35 | "chai": "^4.1.0",
36 | "classnames": "^2.2.5",
37 | "clean-webpack-plugin": "^0.1.17",
38 | "cross-env": "3.1.4",
39 | "extract-text-webpack-plugin": "2.1.2",
40 | "gulp": "^3.9.1",
41 | "html-webpack-plugin": "2.26.0",
42 | "jest-cli": "^20.0.4",
43 | "postcss-import": "10.0.0",
44 | "postcss-loader": "2.0.6",
45 | "prop-types": "^15.5.10",
46 | "react-hot-loader": "3.0.0-beta.6",
47 | "react-redux": "5.0.2",
48 | "redux": "3.6.0",
49 | "redux-actions": "2.0.3",
50 | "redux-logger": "^3.0.6",
51 | "redux-multi": "0.1.12",
52 | "redux-promise": "0.5.3",
53 | "redux-thunk": "2.2.0",
54 | "snazzy": "7.0.0",
55 | "standard": "10.0.2",
56 | "standard-loader": "6.0.1",
57 | "style-loader": "0.13.1",
58 | "webpack": "2.2.1",
59 | "webpack-bundle-analyzer": "^2.8.2",
60 | "webpack-dashboard": "0.3.0",
61 | "webpack-dev-server": "^2.5.0"
62 | },
63 | "dependencies": {
64 | "axios": "0.15.3",
65 | "babel-plugin-transform-runtime": "6.23.0",
66 | "babel-preset-env": "1.5.2",
67 | "file-loader": "^0.10.1",
68 | "font-awesome": "^4.7.0",
69 | "hamburgers": "^0.9.1",
70 | "react": "^15.5.4",
71 | "react-addons-css-transition-group": "15.5.2",
72 | "react-addons-transition-group": "15.5.2",
73 | "react-dom": "15.5.4",
74 | "react-idle": "^2.0.0",
75 | "react-loading": "^0.1.4",
76 | "react-network": "^1.0.1",
77 | "react-particles-js": "^1.5.0",
78 | "react-redux-toastr": "^7.1.0",
79 | "react-router-dom": "^4.1.2",
80 | "reactstrap": "4.6.2",
81 | "redux-form": "^7.0.3",
82 | "stylus": "0.54.5",
83 | "stylus-loader": "3.0.1",
84 | "toastr": "^2.1.2",
85 | "vanilla-masker": "1.1.1"
86 | },
87 | "standard": {
88 | "globals": [
89 | "alert",
90 | "test",
91 | "it",
92 | "describe"
93 | ]
94 | }
95 | }
96 |
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | const autoprefixer = require('autoprefixer')
2 |
3 | module.exports = {
4 | plugins: [autoprefixer]
5 | }
6 |
--------------------------------------------------------------------------------
/public/css/simple-line-icons.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'simple-line-icons';
3 | src: url('../fonts/Simple-Line-Icons.eot?v=2.4.0');
4 | src: url('../fonts/Simple-Line-Icons.eot?v=2.4.0#iefix') format('embedded-opentype'), url('../fonts/Simple-Line-Icons.woff2?v=2.4.0') format('woff2'), url('../fonts/Simple-Line-Icons.ttf?v=2.4.0') format('truetype'), url('../fonts/Simple-Line-Icons.woff?v=2.4.0') format('woff'), url('../fonts/Simple-Line-Icons.svg?v=2.4.0#simple-line-icons') format('svg');
5 | font-weight: normal;
6 | font-style: normal;
7 | }
8 |
9 | .icon-user,
10 | .icon-people,
11 | .icon-user-female,
12 | .icon-user-follow,
13 | .icon-user-following,
14 | .icon-user-unfollow,
15 | .icon-login,
16 | .icon-logout,
17 | .icon-emotsmile,
18 | .icon-phone,
19 | .icon-call-end,
20 | .icon-call-in,
21 | .icon-call-out,
22 | .icon-map,
23 | .icon-location-pin,
24 | .icon-direction,
25 | .icon-directions,
26 | .icon-compass,
27 | .icon-layers,
28 | .icon-menu,
29 | .icon-list,
30 | .icon-options-vertical,
31 | .icon-options,
32 | .icon-arrow-down,
33 | .icon-arrow-left,
34 | .icon-arrow-right,
35 | .icon-arrow-up,
36 | .icon-arrow-up-circle,
37 | .icon-arrow-left-circle,
38 | .icon-arrow-right-circle,
39 | .icon-arrow-down-circle,
40 | .icon-check,
41 | .icon-clock,
42 | .icon-plus,
43 | .icon-minus,
44 | .icon-close,
45 | .icon-event,
46 | .icon-exclamation,
47 | .icon-organization,
48 | .icon-trophy,
49 | .icon-screen-smartphone,
50 | .icon-screen-desktop,
51 | .icon-plane,
52 | .icon-notebook,
53 | .icon-mustache,
54 | .icon-mouse,
55 | .icon-magnet,
56 | .icon-energy,
57 | .icon-disc,
58 | .icon-cursor,
59 | .icon-cursor-move,
60 | .icon-crop,
61 | .icon-chemistry,
62 | .icon-speedometer,
63 | .icon-shield,
64 | .icon-screen-tablet,
65 | .icon-magic-wand,
66 | .icon-hourglass,
67 | .icon-graduation,
68 | .icon-ghost,
69 | .icon-game-controller,
70 | .icon-fire,
71 | .icon-eyeglass,
72 | .icon-envelope-open,
73 | .icon-envelope-letter,
74 | .icon-bell,
75 | .icon-badge,
76 | .icon-anchor,
77 | .icon-wallet,
78 | .icon-vector,
79 | .icon-speech,
80 | .icon-puzzle,
81 | .icon-printer,
82 | .icon-present,
83 | .icon-playlist,
84 | .icon-pin,
85 | .icon-picture,
86 | .icon-handbag,
87 | .icon-globe-alt,
88 | .icon-globe,
89 | .icon-folder-alt,
90 | .icon-folder,
91 | .icon-film,
92 | .icon-feed,
93 | .icon-drop,
94 | .icon-drawer,
95 | .icon-docs,
96 | .icon-doc,
97 | .icon-diamond,
98 | .icon-cup,
99 | .icon-calculator,
100 | .icon-bubbles,
101 | .icon-briefcase,
102 | .icon-book-open,
103 | .icon-basket-loaded,
104 | .icon-basket,
105 | .icon-bag,
106 | .icon-action-undo,
107 | .icon-action-redo,
108 | .icon-wrench,
109 | .icon-umbrella,
110 | .icon-trash,
111 | .icon-tag,
112 | .icon-support,
113 | .icon-frame,
114 | .icon-size-fullscreen,
115 | .icon-size-actual,
116 | .icon-shuffle,
117 | .icon-share-alt,
118 | .icon-share,
119 | .icon-rocket,
120 | .icon-question,
121 | .icon-pie-chart,
122 | .icon-pencil,
123 | .icon-note,
124 | .icon-loop,
125 | .icon-home,
126 | .icon-grid,
127 | .icon-graph,
128 | .icon-microphone,
129 | .icon-music-tone-alt,
130 | .icon-music-tone,
131 | .icon-earphones-alt,
132 | .icon-earphones,
133 | .icon-equalizer,
134 | .icon-like,
135 | .icon-dislike,
136 | .icon-control-start,
137 | .icon-control-rewind,
138 | .icon-control-play,
139 | .icon-control-pause,
140 | .icon-control-forward,
141 | .icon-control-end,
142 | .icon-volume-1,
143 | .icon-volume-2,
144 | .icon-volume-off,
145 | .icon-calendar,
146 | .icon-bulb,
147 | .icon-chart,
148 | .icon-ban,
149 | .icon-bubble,
150 | .icon-camrecorder,
151 | .icon-camera,
152 | .icon-cloud-download,
153 | .icon-cloud-upload,
154 | .icon-envelope,
155 | .icon-eye,
156 | .icon-flag,
157 | .icon-heart,
158 | .icon-info,
159 | .icon-key,
160 | .icon-link,
161 | .icon-lock,
162 | .icon-lock-open,
163 | .icon-magnifier,
164 | .icon-magnifier-add,
165 | .icon-magnifier-remove,
166 | .icon-paper-clip,
167 | .icon-paper-plane,
168 | .icon-power,
169 | .icon-refresh,
170 | .icon-reload,
171 | .icon-settings,
172 | .icon-star,
173 | .icon-symbol-female,
174 | .icon-symbol-male,
175 | .icon-target,
176 | .icon-credit-card,
177 | .icon-paypal,
178 | .icon-social-tumblr,
179 | .icon-social-twitter,
180 | .icon-social-facebook,
181 | .icon-social-instagram,
182 | .icon-social-linkedin,
183 | .icon-social-pinterest,
184 | .icon-social-github,
185 | .icon-social-google,
186 | .icon-social-reddit,
187 | .icon-social-skype,
188 | .icon-social-dribbble,
189 | .icon-social-behance,
190 | .icon-social-foursqare,
191 | .icon-social-soundcloud,
192 | .icon-social-spotify,
193 | .icon-social-stumbleupon,
194 | .icon-social-youtube,
195 | .icon-social-dropbox,
196 | .icon-social-vkontakte,
197 | .icon-social-steam {
198 | font-family: 'simple-line-icons';
199 | speak: none;
200 | font-style: normal;
201 | font-weight: normal;
202 | font-variant: normal;
203 | text-transform: none;
204 | line-height: 1;
205 | /* Better Font Rendering =========== */
206 | -webkit-font-smoothing: antialiased;
207 | -moz-osx-font-smoothing: grayscale;
208 | }
209 |
210 | .icon-user:before {
211 | content: "\e005";
212 | }
213 |
214 | .icon-people:before {
215 | content: "\e001";
216 | }
217 |
218 | .icon-user-female:before {
219 | content: "\e000";
220 | }
221 |
222 | .icon-user-follow:before {
223 | content: "\e002";
224 | }
225 |
226 | .icon-user-following:before {
227 | content: "\e003";
228 | }
229 |
230 | .icon-user-unfollow:before {
231 | content: "\e004";
232 | }
233 |
234 | .icon-login:before {
235 | content: "\e066";
236 | }
237 |
238 | .icon-logout:before {
239 | content: "\e065";
240 | }
241 |
242 | .icon-emotsmile:before {
243 | content: "\e021";
244 | }
245 |
246 | .icon-phone:before {
247 | content: "\e600";
248 | }
249 |
250 | .icon-call-end:before {
251 | content: "\e048";
252 | }
253 |
254 | .icon-call-in:before {
255 | content: "\e047";
256 | }
257 |
258 | .icon-call-out:before {
259 | content: "\e046";
260 | }
261 |
262 | .icon-map:before {
263 | content: "\e033";
264 | }
265 |
266 | .icon-location-pin:before {
267 | content: "\e096";
268 | }
269 |
270 | .icon-direction:before {
271 | content: "\e042";
272 | }
273 |
274 | .icon-directions:before {
275 | content: "\e041";
276 | }
277 |
278 | .icon-compass:before {
279 | content: "\e045";
280 | }
281 |
282 | .icon-layers:before {
283 | content: "\e034";
284 | }
285 |
286 | .icon-menu:before {
287 | content: "\e601";
288 | }
289 |
290 | .icon-list:before {
291 | content: "\e067";
292 | }
293 |
294 | .icon-options-vertical:before {
295 | content: "\e602";
296 | }
297 |
298 | .icon-options:before {
299 | content: "\e603";
300 | }
301 |
302 | .icon-arrow-down:before {
303 | content: "\e604";
304 | }
305 |
306 | .icon-arrow-left:before {
307 | content: "\e605";
308 | }
309 |
310 | .icon-arrow-right:before {
311 | content: "\e606";
312 | }
313 |
314 | .icon-arrow-up:before {
315 | content: "\e607";
316 | }
317 |
318 | .icon-arrow-up-circle:before {
319 | content: "\e078";
320 | }
321 |
322 | .icon-arrow-left-circle:before {
323 | content: "\e07a";
324 | }
325 |
326 | .icon-arrow-right-circle:before {
327 | content: "\e079";
328 | }
329 |
330 | .icon-arrow-down-circle:before {
331 | content: "\e07b";
332 | }
333 |
334 | .icon-check:before {
335 | content: "\e080";
336 | }
337 |
338 | .icon-clock:before {
339 | content: "\e081";
340 | }
341 |
342 | .icon-plus:before {
343 | content: "\e095";
344 | }
345 |
346 | .icon-minus:before {
347 | content: "\e615";
348 | }
349 |
350 | .icon-close:before {
351 | content: "\e082";
352 | }
353 |
354 | .icon-event:before {
355 | content: "\e619";
356 | }
357 |
358 | .icon-exclamation:before {
359 | content: "\e617";
360 | }
361 |
362 | .icon-organization:before {
363 | content: "\e616";
364 | }
365 |
366 | .icon-trophy:before {
367 | content: "\e006";
368 | }
369 |
370 | .icon-screen-smartphone:before {
371 | content: "\e010";
372 | }
373 |
374 | .icon-screen-desktop:before {
375 | content: "\e011";
376 | }
377 |
378 | .icon-plane:before {
379 | content: "\e012";
380 | }
381 |
382 | .icon-notebook:before {
383 | content: "\e013";
384 | }
385 |
386 | .icon-mustache:before {
387 | content: "\e014";
388 | }
389 |
390 | .icon-mouse:before {
391 | content: "\e015";
392 | }
393 |
394 | .icon-magnet:before {
395 | content: "\e016";
396 | }
397 |
398 | .icon-energy:before {
399 | content: "\e020";
400 | }
401 |
402 | .icon-disc:before {
403 | content: "\e022";
404 | }
405 |
406 | .icon-cursor:before {
407 | content: "\e06e";
408 | }
409 |
410 | .icon-cursor-move:before {
411 | content: "\e023";
412 | }
413 |
414 | .icon-crop:before {
415 | content: "\e024";
416 | }
417 |
418 | .icon-chemistry:before {
419 | content: "\e026";
420 | }
421 |
422 | .icon-speedometer:before {
423 | content: "\e007";
424 | }
425 |
426 | .icon-shield:before {
427 | content: "\e00e";
428 | }
429 |
430 | .icon-screen-tablet:before {
431 | content: "\e00f";
432 | }
433 |
434 | .icon-magic-wand:before {
435 | content: "\e017";
436 | }
437 |
438 | .icon-hourglass:before {
439 | content: "\e018";
440 | }
441 |
442 | .icon-graduation:before {
443 | content: "\e019";
444 | }
445 |
446 | .icon-ghost:before {
447 | content: "\e01a";
448 | }
449 |
450 | .icon-game-controller:before {
451 | content: "\e01b";
452 | }
453 |
454 | .icon-fire:before {
455 | content: "\e01c";
456 | }
457 |
458 | .icon-eyeglass:before {
459 | content: "\e01d";
460 | }
461 |
462 | .icon-envelope-open:before {
463 | content: "\e01e";
464 | }
465 |
466 | .icon-envelope-letter:before {
467 | content: "\e01f";
468 | }
469 |
470 | .icon-bell:before {
471 | content: "\e027";
472 | }
473 |
474 | .icon-badge:before {
475 | content: "\e028";
476 | }
477 |
478 | .icon-anchor:before {
479 | content: "\e029";
480 | }
481 |
482 | .icon-wallet:before {
483 | content: "\e02a";
484 | }
485 |
486 | .icon-vector:before {
487 | content: "\e02b";
488 | }
489 |
490 | .icon-speech:before {
491 | content: "\e02c";
492 | }
493 |
494 | .icon-puzzle:before {
495 | content: "\e02d";
496 | }
497 |
498 | .icon-printer:before {
499 | content: "\e02e";
500 | }
501 |
502 | .icon-present:before {
503 | content: "\e02f";
504 | }
505 |
506 | .icon-playlist:before {
507 | content: "\e030";
508 | }
509 |
510 | .icon-pin:before {
511 | content: "\e031";
512 | }
513 |
514 | .icon-picture:before {
515 | content: "\e032";
516 | }
517 |
518 | .icon-handbag:before {
519 | content: "\e035";
520 | }
521 |
522 | .icon-globe-alt:before {
523 | content: "\e036";
524 | }
525 |
526 | .icon-globe:before {
527 | content: "\e037";
528 | }
529 |
530 | .icon-folder-alt:before {
531 | content: "\e039";
532 | }
533 |
534 | .icon-folder:before {
535 | content: "\e089";
536 | }
537 |
538 | .icon-film:before {
539 | content: "\e03a";
540 | }
541 |
542 | .icon-feed:before {
543 | content: "\e03b";
544 | }
545 |
546 | .icon-drop:before {
547 | content: "\e03e";
548 | }
549 |
550 | .icon-drawer:before {
551 | content: "\e03f";
552 | }
553 |
554 | .icon-docs:before {
555 | content: "\e040";
556 | }
557 |
558 | .icon-doc:before {
559 | content: "\e085";
560 | }
561 |
562 | .icon-diamond:before {
563 | content: "\e043";
564 | }
565 |
566 | .icon-cup:before {
567 | content: "\e044";
568 | }
569 |
570 | .icon-calculator:before {
571 | content: "\e049";
572 | }
573 |
574 | .icon-bubbles:before {
575 | content: "\e04a";
576 | }
577 |
578 | .icon-briefcase:before {
579 | content: "\e04b";
580 | }
581 |
582 | .icon-book-open:before {
583 | content: "\e04c";
584 | }
585 |
586 | .icon-basket-loaded:before {
587 | content: "\e04d";
588 | }
589 |
590 | .icon-basket:before {
591 | content: "\e04e";
592 | }
593 |
594 | .icon-bag:before {
595 | content: "\e04f";
596 | }
597 |
598 | .icon-action-undo:before {
599 | content: "\e050";
600 | }
601 |
602 | .icon-action-redo:before {
603 | content: "\e051";
604 | }
605 |
606 | .icon-wrench:before {
607 | content: "\e052";
608 | }
609 |
610 | .icon-umbrella:before {
611 | content: "\e053";
612 | }
613 |
614 | .icon-trash:before {
615 | content: "\e054";
616 | }
617 |
618 | .icon-tag:before {
619 | content: "\e055";
620 | }
621 |
622 | .icon-support:before {
623 | content: "\e056";
624 | }
625 |
626 | .icon-frame:before {
627 | content: "\e038";
628 | }
629 |
630 | .icon-size-fullscreen:before {
631 | content: "\e057";
632 | }
633 |
634 | .icon-size-actual:before {
635 | content: "\e058";
636 | }
637 |
638 | .icon-shuffle:before {
639 | content: "\e059";
640 | }
641 |
642 | .icon-share-alt:before {
643 | content: "\e05a";
644 | }
645 |
646 | .icon-share:before {
647 | content: "\e05b";
648 | }
649 |
650 | .icon-rocket:before {
651 | content: "\e05c";
652 | }
653 |
654 | .icon-question:before {
655 | content: "\e05d";
656 | }
657 |
658 | .icon-pie-chart:before {
659 | content: "\e05e";
660 | }
661 |
662 | .icon-pencil:before {
663 | content: "\e05f";
664 | }
665 |
666 | .icon-note:before {
667 | content: "\e060";
668 | }
669 |
670 | .icon-loop:before {
671 | content: "\e064";
672 | }
673 |
674 | .icon-home:before {
675 | content: "\e069";
676 | }
677 |
678 | .icon-grid:before {
679 | content: "\e06a";
680 | }
681 |
682 | .icon-graph:before {
683 | content: "\e06b";
684 | }
685 |
686 | .icon-microphone:before {
687 | content: "\e063";
688 | }
689 |
690 | .icon-music-tone-alt:before {
691 | content: "\e061";
692 | }
693 |
694 | .icon-music-tone:before {
695 | content: "\e062";
696 | }
697 |
698 | .icon-earphones-alt:before {
699 | content: "\e03c";
700 | }
701 |
702 | .icon-earphones:before {
703 | content: "\e03d";
704 | }
705 |
706 | .icon-equalizer:before {
707 | content: "\e06c";
708 | }
709 |
710 | .icon-like:before {
711 | content: "\e068";
712 | }
713 |
714 | .icon-dislike:before {
715 | content: "\e06d";
716 | }
717 |
718 | .icon-control-start:before {
719 | content: "\e06f";
720 | }
721 |
722 | .icon-control-rewind:before {
723 | content: "\e070";
724 | }
725 |
726 | .icon-control-play:before {
727 | content: "\e071";
728 | }
729 |
730 | .icon-control-pause:before {
731 | content: "\e072";
732 | }
733 |
734 | .icon-control-forward:before {
735 | content: "\e073";
736 | }
737 |
738 | .icon-control-end:before {
739 | content: "\e074";
740 | }
741 |
742 | .icon-volume-1:before {
743 | content: "\e09f";
744 | }
745 |
746 | .icon-volume-2:before {
747 | content: "\e0a0";
748 | }
749 |
750 | .icon-volume-off:before {
751 | content: "\e0a1";
752 | }
753 |
754 | .icon-calendar:before {
755 | content: "\e075";
756 | }
757 |
758 | .icon-bulb:before {
759 | content: "\e076";
760 | }
761 |
762 | .icon-chart:before {
763 | content: "\e077";
764 | }
765 |
766 | .icon-ban:before {
767 | content: "\e07c";
768 | }
769 |
770 | .icon-bubble:before {
771 | content: "\e07d";
772 | }
773 |
774 | .icon-camrecorder:before {
775 | content: "\e07e";
776 | }
777 |
778 | .icon-camera:before {
779 | content: "\e07f";
780 | }
781 |
782 | .icon-cloud-download:before {
783 | content: "\e083";
784 | }
785 |
786 | .icon-cloud-upload:before {
787 | content: "\e084";
788 | }
789 |
790 | .icon-envelope:before {
791 | content: "\e086";
792 | }
793 |
794 | .icon-eye:before {
795 | content: "\e087";
796 | }
797 |
798 | .icon-flag:before {
799 | content: "\e088";
800 | }
801 |
802 | .icon-heart:before {
803 | content: "\e08a";
804 | }
805 |
806 | .icon-info:before {
807 | content: "\e08b";
808 | }
809 |
810 | .icon-key:before {
811 | content: "\e08c";
812 | }
813 |
814 | .icon-link:before {
815 | content: "\e08d";
816 | }
817 |
818 | .icon-lock:before {
819 | content: "\e08e";
820 | }
821 |
822 | .icon-lock-open:before {
823 | content: "\e08f";
824 | }
825 |
826 | .icon-magnifier:before {
827 | content: "\e090";
828 | }
829 |
830 | .icon-magnifier-add:before {
831 | content: "\e091";
832 | }
833 |
834 | .icon-magnifier-remove:before {
835 | content: "\e092";
836 | }
837 |
838 | .icon-paper-clip:before {
839 | content: "\e093";
840 | }
841 |
842 | .icon-paper-plane:before {
843 | content: "\e094";
844 | }
845 |
846 | .icon-power:before {
847 | content: "\e097";
848 | }
849 |
850 | .icon-refresh:before {
851 | content: "\e098";
852 | }
853 |
854 | .icon-reload:before {
855 | content: "\e099";
856 | }
857 |
858 | .icon-settings:before {
859 | content: "\e09a";
860 | }
861 |
862 | .icon-star:before {
863 | content: "\e09b";
864 | }
865 |
866 | .icon-symbol-female:before {
867 | content: "\e09c";
868 | }
869 |
870 | .icon-symbol-male:before {
871 | content: "\e09d";
872 | }
873 |
874 | .icon-target:before {
875 | content: "\e09e";
876 | }
877 |
878 | .icon-credit-card:before {
879 | content: "\e025";
880 | }
881 |
882 | .icon-paypal:before {
883 | content: "\e608";
884 | }
885 |
886 | .icon-social-tumblr:before {
887 | content: "\e00a";
888 | }
889 |
890 | .icon-social-twitter:before {
891 | content: "\e009";
892 | }
893 |
894 | .icon-social-facebook:before {
895 | content: "\e00b";
896 | }
897 |
898 | .icon-social-instagram:before {
899 | content: "\e609";
900 | }
901 |
902 | .icon-social-linkedin:before {
903 | content: "\e60a";
904 | }
905 |
906 | .icon-social-pinterest:before {
907 | content: "\e60b";
908 | }
909 |
910 | .icon-social-github:before {
911 | content: "\e60c";
912 | }
913 |
914 | .icon-social-google:before {
915 | content: "\e60d";
916 | }
917 |
918 | .icon-social-reddit:before {
919 | content: "\e60e";
920 | }
921 |
922 | .icon-social-skype:before {
923 | content: "\e60f";
924 | }
925 |
926 | .icon-social-dribbble:before {
927 | content: "\e00d";
928 | }
929 |
930 | .icon-social-behance:before {
931 | content: "\e610";
932 | }
933 |
934 | .icon-social-foursqare:before {
935 | content: "\e611";
936 | }
937 |
938 | .icon-social-soundcloud:before {
939 | content: "\e612";
940 | }
941 |
942 | .icon-social-spotify:before {
943 | content: "\e613";
944 | }
945 |
946 | .icon-social-stumbleupon:before {
947 | content: "\e614";
948 | }
949 |
950 | .icon-social-youtube:before {
951 | content: "\e008";
952 | }
953 |
954 | .icon-social-dropbox:before {
955 | content: "\e00c";
956 | }
957 |
958 | .icon-social-vkontakte:before {
959 | content: "\e618";
960 | }
961 |
962 | .icon-social-steam:before {
963 | content: "\e620";
964 | }
965 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/favicon.ico
--------------------------------------------------------------------------------
/public/fonts/Simple-Line-Icons.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/fonts/Simple-Line-Icons.eot
--------------------------------------------------------------------------------
/public/fonts/Simple-Line-Icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/fonts/Simple-Line-Icons.ttf
--------------------------------------------------------------------------------
/public/fonts/Simple-Line-Icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/fonts/Simple-Line-Icons.woff
--------------------------------------------------------------------------------
/public/fonts/Simple-Line-Icons.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/fonts/Simple-Line-Icons.woff2
--------------------------------------------------------------------------------
/public/img/avatars/1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/avatars/1.jpg
--------------------------------------------------------------------------------
/public/img/avatars/2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/avatars/2.jpg
--------------------------------------------------------------------------------
/public/img/avatars/3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/avatars/3.jpg
--------------------------------------------------------------------------------
/public/img/avatars/4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/avatars/4.jpg
--------------------------------------------------------------------------------
/public/img/avatars/5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/avatars/5.jpg
--------------------------------------------------------------------------------
/public/img/avatars/6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/avatars/6.jpg
--------------------------------------------------------------------------------
/public/img/avatars/7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/avatars/7.jpg
--------------------------------------------------------------------------------
/public/img/avatars/8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/avatars/8.jpg
--------------------------------------------------------------------------------
/public/img/backgroundLogin.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/backgroundLogin.jpg
--------------------------------------------------------------------------------
/public/img/flags/ASEAN.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/ASEAN.png
--------------------------------------------------------------------------------
/public/img/flags/Afghanistan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Afghanistan.png
--------------------------------------------------------------------------------
/public/img/flags/African Union.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/African Union.png
--------------------------------------------------------------------------------
/public/img/flags/Albania.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Albania.png
--------------------------------------------------------------------------------
/public/img/flags/Algeria.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Algeria.png
--------------------------------------------------------------------------------
/public/img/flags/American Samoa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/American Samoa.png
--------------------------------------------------------------------------------
/public/img/flags/Andorra.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Andorra.png
--------------------------------------------------------------------------------
/public/img/flags/Angola.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Angola.png
--------------------------------------------------------------------------------
/public/img/flags/Anguilla.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Anguilla.png
--------------------------------------------------------------------------------
/public/img/flags/Antarctica.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Antarctica.png
--------------------------------------------------------------------------------
/public/img/flags/Antigua & Barbuda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Antigua & Barbuda.png
--------------------------------------------------------------------------------
/public/img/flags/Arab League.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Arab League.png
--------------------------------------------------------------------------------
/public/img/flags/Argentina.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Argentina.png
--------------------------------------------------------------------------------
/public/img/flags/Armenia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Armenia.png
--------------------------------------------------------------------------------
/public/img/flags/Aruba.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Aruba.png
--------------------------------------------------------------------------------
/public/img/flags/Australia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Australia.png
--------------------------------------------------------------------------------
/public/img/flags/Austria.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Austria.png
--------------------------------------------------------------------------------
/public/img/flags/Azerbaijan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Azerbaijan.png
--------------------------------------------------------------------------------
/public/img/flags/Bahamas.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Bahamas.png
--------------------------------------------------------------------------------
/public/img/flags/Bahrain.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Bahrain.png
--------------------------------------------------------------------------------
/public/img/flags/Bangladesh.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Bangladesh.png
--------------------------------------------------------------------------------
/public/img/flags/Barbados.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Barbados.png
--------------------------------------------------------------------------------
/public/img/flags/Belarus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Belarus.png
--------------------------------------------------------------------------------
/public/img/flags/Belgium.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Belgium.png
--------------------------------------------------------------------------------
/public/img/flags/Belize.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Belize.png
--------------------------------------------------------------------------------
/public/img/flags/Benin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Benin.png
--------------------------------------------------------------------------------
/public/img/flags/Bermuda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Bermuda.png
--------------------------------------------------------------------------------
/public/img/flags/Bhutan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Bhutan.png
--------------------------------------------------------------------------------
/public/img/flags/Bolivia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Bolivia.png
--------------------------------------------------------------------------------
/public/img/flags/Bosnia & Herzegovina.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Bosnia & Herzegovina.png
--------------------------------------------------------------------------------
/public/img/flags/Botswana.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Botswana.png
--------------------------------------------------------------------------------
/public/img/flags/Brazil.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Brazil.png
--------------------------------------------------------------------------------
/public/img/flags/Brunei.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Brunei.png
--------------------------------------------------------------------------------
/public/img/flags/Bulgaria.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Bulgaria.png
--------------------------------------------------------------------------------
/public/img/flags/Burkina Faso.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Burkina Faso.png
--------------------------------------------------------------------------------
/public/img/flags/Burundi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Burundi.png
--------------------------------------------------------------------------------
/public/img/flags/CARICOM.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/CARICOM.png
--------------------------------------------------------------------------------
/public/img/flags/CIS.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/CIS.png
--------------------------------------------------------------------------------
/public/img/flags/Cambodja.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Cambodja.png
--------------------------------------------------------------------------------
/public/img/flags/Cameroon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Cameroon.png
--------------------------------------------------------------------------------
/public/img/flags/Canada.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Canada.png
--------------------------------------------------------------------------------
/public/img/flags/Cape Verde.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Cape Verde.png
--------------------------------------------------------------------------------
/public/img/flags/Cayman Islands.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Cayman Islands.png
--------------------------------------------------------------------------------
/public/img/flags/Central African Republic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Central African Republic.png
--------------------------------------------------------------------------------
/public/img/flags/Chad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Chad.png
--------------------------------------------------------------------------------
/public/img/flags/Chile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Chile.png
--------------------------------------------------------------------------------
/public/img/flags/China.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/China.png
--------------------------------------------------------------------------------
/public/img/flags/Colombia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Colombia.png
--------------------------------------------------------------------------------
/public/img/flags/Commonwealth.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Commonwealth.png
--------------------------------------------------------------------------------
/public/img/flags/Comoros.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Comoros.png
--------------------------------------------------------------------------------
/public/img/flags/Congo-Brazzaville.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Congo-Brazzaville.png
--------------------------------------------------------------------------------
/public/img/flags/Congo-Kinshasa(Zaire).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Congo-Kinshasa(Zaire).png
--------------------------------------------------------------------------------
/public/img/flags/Cook Islands.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Cook Islands.png
--------------------------------------------------------------------------------
/public/img/flags/Costa Rica.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Costa Rica.png
--------------------------------------------------------------------------------
/public/img/flags/Cote d'Ivoire.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Cote d'Ivoire.png
--------------------------------------------------------------------------------
/public/img/flags/Croatia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Croatia.png
--------------------------------------------------------------------------------
/public/img/flags/Cuba.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Cuba.png
--------------------------------------------------------------------------------
/public/img/flags/Cyprus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Cyprus.png
--------------------------------------------------------------------------------
/public/img/flags/Czech Republic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Czech Republic.png
--------------------------------------------------------------------------------
/public/img/flags/Denmark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Denmark.png
--------------------------------------------------------------------------------
/public/img/flags/Djibouti.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Djibouti.png
--------------------------------------------------------------------------------
/public/img/flags/Dominica.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Dominica.png
--------------------------------------------------------------------------------
/public/img/flags/Dominican Republic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Dominican Republic.png
--------------------------------------------------------------------------------
/public/img/flags/Ecuador.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Ecuador.png
--------------------------------------------------------------------------------
/public/img/flags/Egypt.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Egypt.png
--------------------------------------------------------------------------------
/public/img/flags/El Salvador.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/El Salvador.png
--------------------------------------------------------------------------------
/public/img/flags/England.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/England.png
--------------------------------------------------------------------------------
/public/img/flags/Equatorial Guinea.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Equatorial Guinea.png
--------------------------------------------------------------------------------
/public/img/flags/Eritrea.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Eritrea.png
--------------------------------------------------------------------------------
/public/img/flags/Estonia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Estonia.png
--------------------------------------------------------------------------------
/public/img/flags/Ethiopia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Ethiopia.png
--------------------------------------------------------------------------------
/public/img/flags/European Union.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/European Union.png
--------------------------------------------------------------------------------
/public/img/flags/Faroes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Faroes.png
--------------------------------------------------------------------------------
/public/img/flags/Fiji.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Fiji.png
--------------------------------------------------------------------------------
/public/img/flags/Finland.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Finland.png
--------------------------------------------------------------------------------
/public/img/flags/France.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/France.png
--------------------------------------------------------------------------------
/public/img/flags/Gabon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Gabon.png
--------------------------------------------------------------------------------
/public/img/flags/Gambia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Gambia.png
--------------------------------------------------------------------------------
/public/img/flags/Georgia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Georgia.png
--------------------------------------------------------------------------------
/public/img/flags/Germany.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Germany.png
--------------------------------------------------------------------------------
/public/img/flags/Ghana.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Ghana.png
--------------------------------------------------------------------------------
/public/img/flags/Gibraltar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Gibraltar.png
--------------------------------------------------------------------------------
/public/img/flags/Greece.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Greece.png
--------------------------------------------------------------------------------
/public/img/flags/Greenland.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Greenland.png
--------------------------------------------------------------------------------
/public/img/flags/Grenada.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Grenada.png
--------------------------------------------------------------------------------
/public/img/flags/Guadeloupe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Guadeloupe.png
--------------------------------------------------------------------------------
/public/img/flags/Guam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Guam.png
--------------------------------------------------------------------------------
/public/img/flags/Guatemala.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Guatemala.png
--------------------------------------------------------------------------------
/public/img/flags/Guernsey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Guernsey.png
--------------------------------------------------------------------------------
/public/img/flags/Guinea-Bissau.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Guinea-Bissau.png
--------------------------------------------------------------------------------
/public/img/flags/Guinea.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Guinea.png
--------------------------------------------------------------------------------
/public/img/flags/Guyana.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Guyana.png
--------------------------------------------------------------------------------
/public/img/flags/Haiti.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Haiti.png
--------------------------------------------------------------------------------
/public/img/flags/Honduras.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Honduras.png
--------------------------------------------------------------------------------
/public/img/flags/Hong Kong.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Hong Kong.png
--------------------------------------------------------------------------------
/public/img/flags/Hungary.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Hungary.png
--------------------------------------------------------------------------------
/public/img/flags/Iceland.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Iceland.png
--------------------------------------------------------------------------------
/public/img/flags/India.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/India.png
--------------------------------------------------------------------------------
/public/img/flags/Indonezia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Indonezia.png
--------------------------------------------------------------------------------
/public/img/flags/Iran.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Iran.png
--------------------------------------------------------------------------------
/public/img/flags/Iraq.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Iraq.png
--------------------------------------------------------------------------------
/public/img/flags/Ireland.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Ireland.png
--------------------------------------------------------------------------------
/public/img/flags/Islamic Conference.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Islamic Conference.png
--------------------------------------------------------------------------------
/public/img/flags/Isle of Man.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Isle of Man.png
--------------------------------------------------------------------------------
/public/img/flags/Israel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Israel.png
--------------------------------------------------------------------------------
/public/img/flags/Italy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Italy.png
--------------------------------------------------------------------------------
/public/img/flags/Jamaica.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Jamaica.png
--------------------------------------------------------------------------------
/public/img/flags/Japan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Japan.png
--------------------------------------------------------------------------------
/public/img/flags/Jersey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Jersey.png
--------------------------------------------------------------------------------
/public/img/flags/Jordan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Jordan.png
--------------------------------------------------------------------------------
/public/img/flags/Kazakhstan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Kazakhstan.png
--------------------------------------------------------------------------------
/public/img/flags/Kenya.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Kenya.png
--------------------------------------------------------------------------------
/public/img/flags/Kiribati.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Kiribati.png
--------------------------------------------------------------------------------
/public/img/flags/Kosovo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Kosovo.png
--------------------------------------------------------------------------------
/public/img/flags/Kuwait.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Kuwait.png
--------------------------------------------------------------------------------
/public/img/flags/Kyrgyzstan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Kyrgyzstan.png
--------------------------------------------------------------------------------
/public/img/flags/Laos.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Laos.png
--------------------------------------------------------------------------------
/public/img/flags/Latvia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Latvia.png
--------------------------------------------------------------------------------
/public/img/flags/Lebanon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Lebanon.png
--------------------------------------------------------------------------------
/public/img/flags/Lesotho.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Lesotho.png
--------------------------------------------------------------------------------
/public/img/flags/Liberia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Liberia.png
--------------------------------------------------------------------------------
/public/img/flags/Libya.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Libya.png
--------------------------------------------------------------------------------
/public/img/flags/Liechtenshein.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Liechtenshein.png
--------------------------------------------------------------------------------
/public/img/flags/Lithuania.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Lithuania.png
--------------------------------------------------------------------------------
/public/img/flags/Luxembourg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Luxembourg.png
--------------------------------------------------------------------------------
/public/img/flags/Macao.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Macao.png
--------------------------------------------------------------------------------
/public/img/flags/Macedonia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Macedonia.png
--------------------------------------------------------------------------------
/public/img/flags/Madagascar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Madagascar.png
--------------------------------------------------------------------------------
/public/img/flags/Malawi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Malawi.png
--------------------------------------------------------------------------------
/public/img/flags/Malaysia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Malaysia.png
--------------------------------------------------------------------------------
/public/img/flags/Maldives.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Maldives.png
--------------------------------------------------------------------------------
/public/img/flags/Mali.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Mali.png
--------------------------------------------------------------------------------
/public/img/flags/Malta.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Malta.png
--------------------------------------------------------------------------------
/public/img/flags/Marshall Islands.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Marshall Islands.png
--------------------------------------------------------------------------------
/public/img/flags/Martinique.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Martinique.png
--------------------------------------------------------------------------------
/public/img/flags/Mauritania.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Mauritania.png
--------------------------------------------------------------------------------
/public/img/flags/Mauritius.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Mauritius.png
--------------------------------------------------------------------------------
/public/img/flags/Mexico.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Mexico.png
--------------------------------------------------------------------------------
/public/img/flags/Micronesia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Micronesia.png
--------------------------------------------------------------------------------
/public/img/flags/Moldova.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Moldova.png
--------------------------------------------------------------------------------
/public/img/flags/Monaco.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Monaco.png
--------------------------------------------------------------------------------
/public/img/flags/Mongolia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Mongolia.png
--------------------------------------------------------------------------------
/public/img/flags/Montenegro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Montenegro.png
--------------------------------------------------------------------------------
/public/img/flags/Montserrat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Montserrat.png
--------------------------------------------------------------------------------
/public/img/flags/Morocco.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Morocco.png
--------------------------------------------------------------------------------
/public/img/flags/Mozambique.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Mozambique.png
--------------------------------------------------------------------------------
/public/img/flags/Myanmar(Burma).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Myanmar(Burma).png
--------------------------------------------------------------------------------
/public/img/flags/NATO.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/NATO.png
--------------------------------------------------------------------------------
/public/img/flags/Namibia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Namibia.png
--------------------------------------------------------------------------------
/public/img/flags/Nauru.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Nauru.png
--------------------------------------------------------------------------------
/public/img/flags/Nepal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Nepal.png
--------------------------------------------------------------------------------
/public/img/flags/Netherlands Antilles.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Netherlands Antilles.png
--------------------------------------------------------------------------------
/public/img/flags/Netherlands.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Netherlands.png
--------------------------------------------------------------------------------
/public/img/flags/New Caledonia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/New Caledonia.png
--------------------------------------------------------------------------------
/public/img/flags/New Zealand.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/New Zealand.png
--------------------------------------------------------------------------------
/public/img/flags/Nicaragua.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Nicaragua.png
--------------------------------------------------------------------------------
/public/img/flags/Niger.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Niger.png
--------------------------------------------------------------------------------
/public/img/flags/Nigeria.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Nigeria.png
--------------------------------------------------------------------------------
/public/img/flags/North Korea.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/North Korea.png
--------------------------------------------------------------------------------
/public/img/flags/Northern Cyprus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Northern Cyprus.png
--------------------------------------------------------------------------------
/public/img/flags/Northern Ireland.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Northern Ireland.png
--------------------------------------------------------------------------------
/public/img/flags/Norway.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Norway.png
--------------------------------------------------------------------------------
/public/img/flags/OPEC.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/OPEC.png
--------------------------------------------------------------------------------
/public/img/flags/Olimpic Movement.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Olimpic Movement.png
--------------------------------------------------------------------------------
/public/img/flags/Oman.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Oman.png
--------------------------------------------------------------------------------
/public/img/flags/Pakistan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Pakistan.png
--------------------------------------------------------------------------------
/public/img/flags/Palau.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Palau.png
--------------------------------------------------------------------------------
/public/img/flags/Palestine.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Palestine.png
--------------------------------------------------------------------------------
/public/img/flags/Panama.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Panama.png
--------------------------------------------------------------------------------
/public/img/flags/Papua New Guinea.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Papua New Guinea.png
--------------------------------------------------------------------------------
/public/img/flags/Paraguay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Paraguay.png
--------------------------------------------------------------------------------
/public/img/flags/Peru.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Peru.png
--------------------------------------------------------------------------------
/public/img/flags/Philippines.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Philippines.png
--------------------------------------------------------------------------------
/public/img/flags/Poland.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Poland.png
--------------------------------------------------------------------------------
/public/img/flags/Portugal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Portugal.png
--------------------------------------------------------------------------------
/public/img/flags/Puerto Rico.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Puerto Rico.png
--------------------------------------------------------------------------------
/public/img/flags/Qatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Qatar.png
--------------------------------------------------------------------------------
/public/img/flags/Red Cross.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Red Cross.png
--------------------------------------------------------------------------------
/public/img/flags/Reunion.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Reunion.png
--------------------------------------------------------------------------------
/public/img/flags/Romania.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Romania.png
--------------------------------------------------------------------------------
/public/img/flags/Russia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Russia.png
--------------------------------------------------------------------------------
/public/img/flags/Rwanda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Rwanda.png
--------------------------------------------------------------------------------
/public/img/flags/Saint Lucia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Saint Lucia.png
--------------------------------------------------------------------------------
/public/img/flags/Samoa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Samoa.png
--------------------------------------------------------------------------------
/public/img/flags/San Marino.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/San Marino.png
--------------------------------------------------------------------------------
/public/img/flags/Sao Tome & Principe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Sao Tome & Principe.png
--------------------------------------------------------------------------------
/public/img/flags/Saudi Arabia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Saudi Arabia.png
--------------------------------------------------------------------------------
/public/img/flags/Scotland.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Scotland.png
--------------------------------------------------------------------------------
/public/img/flags/Senegal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Senegal.png
--------------------------------------------------------------------------------
/public/img/flags/Serbia(Yugoslavia).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Serbia(Yugoslavia).png
--------------------------------------------------------------------------------
/public/img/flags/Seychelles.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Seychelles.png
--------------------------------------------------------------------------------
/public/img/flags/Sierra Leone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Sierra Leone.png
--------------------------------------------------------------------------------
/public/img/flags/Singapore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Singapore.png
--------------------------------------------------------------------------------
/public/img/flags/Slovakia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Slovakia.png
--------------------------------------------------------------------------------
/public/img/flags/Slovenia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Slovenia.png
--------------------------------------------------------------------------------
/public/img/flags/Solomon Islands.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Solomon Islands.png
--------------------------------------------------------------------------------
/public/img/flags/Somalia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Somalia.png
--------------------------------------------------------------------------------
/public/img/flags/Somaliland.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Somaliland.png
--------------------------------------------------------------------------------
/public/img/flags/South Africa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/South Africa.png
--------------------------------------------------------------------------------
/public/img/flags/South Korea.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/South Korea.png
--------------------------------------------------------------------------------
/public/img/flags/Spain.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Spain.png
--------------------------------------------------------------------------------
/public/img/flags/Sri Lanka.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Sri Lanka.png
--------------------------------------------------------------------------------
/public/img/flags/St Kitts & Nevis.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/St Kitts & Nevis.png
--------------------------------------------------------------------------------
/public/img/flags/St Vincent & the Grenadines.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/St Vincent & the Grenadines.png
--------------------------------------------------------------------------------
/public/img/flags/Sudan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Sudan.png
--------------------------------------------------------------------------------
/public/img/flags/Suriname.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Suriname.png
--------------------------------------------------------------------------------
/public/img/flags/Swaziland.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Swaziland.png
--------------------------------------------------------------------------------
/public/img/flags/Sweden.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Sweden.png
--------------------------------------------------------------------------------
/public/img/flags/Switzerland.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Switzerland.png
--------------------------------------------------------------------------------
/public/img/flags/Syria.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Syria.png
--------------------------------------------------------------------------------
/public/img/flags/Tahiti(French Polinesia).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Tahiti(French Polinesia).png
--------------------------------------------------------------------------------
/public/img/flags/Taiwan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Taiwan.png
--------------------------------------------------------------------------------
/public/img/flags/Tajikistan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Tajikistan.png
--------------------------------------------------------------------------------
/public/img/flags/Tanzania.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Tanzania.png
--------------------------------------------------------------------------------
/public/img/flags/Thailand.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Thailand.png
--------------------------------------------------------------------------------
/public/img/flags/Timor-Leste.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Timor-Leste.png
--------------------------------------------------------------------------------
/public/img/flags/Togo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Togo.png
--------------------------------------------------------------------------------
/public/img/flags/Tonga.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Tonga.png
--------------------------------------------------------------------------------
/public/img/flags/Trinidad & Tobago.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Trinidad & Tobago.png
--------------------------------------------------------------------------------
/public/img/flags/Tunisia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Tunisia.png
--------------------------------------------------------------------------------
/public/img/flags/Turkey.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Turkey.png
--------------------------------------------------------------------------------
/public/img/flags/Turkmenistan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Turkmenistan.png
--------------------------------------------------------------------------------
/public/img/flags/Turks and Caicos Islands.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Turks and Caicos Islands.png
--------------------------------------------------------------------------------
/public/img/flags/Tuvalu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Tuvalu.png
--------------------------------------------------------------------------------
/public/img/flags/USA.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/USA.png
--------------------------------------------------------------------------------
/public/img/flags/Uganda.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Uganda.png
--------------------------------------------------------------------------------
/public/img/flags/Ukraine.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Ukraine.png
--------------------------------------------------------------------------------
/public/img/flags/United Arab Emirates.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/United Arab Emirates.png
--------------------------------------------------------------------------------
/public/img/flags/United Nations.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/United Nations.png
--------------------------------------------------------------------------------
/public/img/flags/United-Kingdom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/United-Kingdom.png
--------------------------------------------------------------------------------
/public/img/flags/Uruguay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Uruguay.png
--------------------------------------------------------------------------------
/public/img/flags/Uzbekistan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Uzbekistan.png
--------------------------------------------------------------------------------
/public/img/flags/Vanutau.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Vanutau.png
--------------------------------------------------------------------------------
/public/img/flags/Vatican City.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Vatican City.png
--------------------------------------------------------------------------------
/public/img/flags/Venezuela.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Venezuela.png
--------------------------------------------------------------------------------
/public/img/flags/Viet Nam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Viet Nam.png
--------------------------------------------------------------------------------
/public/img/flags/Virgin Islands British.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Virgin Islands British.png
--------------------------------------------------------------------------------
/public/img/flags/Virgin Islands US.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Virgin Islands US.png
--------------------------------------------------------------------------------
/public/img/flags/Wales.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Wales.png
--------------------------------------------------------------------------------
/public/img/flags/Western Sahara.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Western Sahara.png
--------------------------------------------------------------------------------
/public/img/flags/Yemen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Yemen.png
--------------------------------------------------------------------------------
/public/img/flags/Zambia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Zambia.png
--------------------------------------------------------------------------------
/public/img/flags/Zimbabwe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/flags/Zimbabwe.png
--------------------------------------------------------------------------------
/public/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gabrielferreiraa/react-redux-boilerplate/b0b3e714c902a42e687c120bd4f9bc84f61d0c5c/public/img/logo.png
--------------------------------------------------------------------------------
/server.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | const webpack = require('webpack')
4 | const WebpackDevServer = require('webpack-dev-server')
5 | const config = require('./webpack/dev.config')
6 |
7 | const PORT = 3000
8 |
9 | new WebpackDevServer(webpack(config), {
10 | publicPath: config.output.publicPath,
11 | hot: true,
12 | historyApiFallback: true,
13 | stats: { colors: true }
14 | }).listen(PORT, (err) => {
15 | if (err) {
16 | return console.log(err)
17 | }
18 |
19 | console.log('Listening on http://localhost:3000')
20 | })
21 |
--------------------------------------------------------------------------------
/src/components/aside/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React, { Component } from 'react'
4 | import { TabContent, TabPane, Nav, NavItem, NavLink, Progress } from 'reactstrap'
5 | import { bindActionCreators } from 'redux'
6 | import { connect } from 'react-redux'
7 | import { toggle } from 'reducers/sidebar/action-creators'
8 |
9 | import classnames from 'classnames'
10 |
11 | class Aside extends Component {
12 | constructor (props) {
13 | super(props)
14 |
15 | this.toggle = this.toggle.bind(this)
16 | this.state = {
17 | activeTab: '1'
18 | }
19 | }
20 |
21 | toggle (tab) {
22 | if (this.state.activeTab !== tab) {
23 | this.setState({
24 | activeTab: tab
25 | })
26 | }
27 | }
28 |
29 | render () {
30 | return (
31 |
283 | )
284 | }
285 | }
286 |
287 | const mapStateToProps = state => ({ sidebarOpen: state.sidebar.open })
288 | const mapDispatchToProps = dispatch => bindActionCreators({ toggle }, dispatch)
289 |
290 | export default connect(mapStateToProps, mapDispatchToProps)(Aside)
291 |
--------------------------------------------------------------------------------
/src/components/breadcrumb/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import { Route, Link } from 'react-router-dom'
5 | import { Breadcrumb, BreadcrumbItem } from 'reactstrap'
6 | import routes from 'src/root-routes'
7 | import activeRoute from 'utils/active-route'
8 |
9 | const hasBarOnFirst = route => route.length > 1 && route.charAt(0) === '/'
10 |
11 | const findRouteName = url => routes[`/${activeRoute(url)}`]
12 |
13 | const getPaths = pathname => {
14 | const paths = pathname === '/dashboard' ? ['/'] : ['/dashboard']
15 |
16 | if (pathname === '/') return paths
17 |
18 | pathname = !hasBarOnFirst(pathname) ? activeRoute(pathname) : `/${activeRoute(pathname)}`
19 |
20 | pathname.split('/').reduce((prev, curr, index) => {
21 | const currPath = `${prev}/${curr}`
22 | paths.push(currPath)
23 | return currPath
24 | })
25 |
26 | return paths
27 | }
28 |
29 | const BreadcrumbsItem = ({ ...rest, match }) => {
30 | const routeName = findRouteName(match.url)
31 |
32 | if (routeName) {
33 | return (
34 | match.isExact
35 | ? {routeName}
36 | : (
37 |
38 |
39 | {routeName}
40 |
41 |
42 | )
43 | )
44 | }
45 | return null
46 | }
47 |
48 | const Breadcrumbs = ({ ...rest, location: { pathname }, match }) => {
49 | const paths = getPaths(pathname)
50 |
51 | return (
52 |
53 | {paths.map((path, index) => )}
54 |
55 | )
56 | }
57 |
58 | export default props => (
59 |
60 |
61 |
62 | )
63 |
--------------------------------------------------------------------------------
/src/components/button/button-danger.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import Button from './index'
5 |
6 | const ButtonDanger = ({ children, onClick, className = '', ...props }) => (
7 |
10 | )
11 |
12 | export { ButtonDanger }
13 |
--------------------------------------------------------------------------------
/src/components/button/button-info.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import Button from './index'
5 |
6 | const ButtonInfo = ({ children, onClick, className = '', ...props }) => (
7 |
10 | )
11 |
12 | export { ButtonInfo }
13 |
--------------------------------------------------------------------------------
/src/components/button/button-success.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import Button from './index'
5 |
6 | const ButtonSuccess = ({ children, onClick, className = '', ...props }) => (
7 |
10 | )
11 |
12 | export { ButtonSuccess }
13 |
--------------------------------------------------------------------------------
/src/components/button/button-warning.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import Button from './index'
5 |
6 | const ButtonWarning = ({ children, onClick, className = '', ...props }) => (
7 |
10 | )
11 |
12 | export { ButtonWarning }
13 |
--------------------------------------------------------------------------------
/src/components/button/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import { string, func } from 'prop-types'
5 |
6 | const Button = ({ children, className, onClick, ...props }) => (
7 |
10 | )
11 |
12 | Button.propTypes = {
13 | className: string,
14 | onClick: func
15 | }
16 |
17 | Button.defaultProps = {
18 | className: 'btn-success',
19 | type: 'button'
20 | }
21 |
22 | export { ButtonInfo } from './button-info'
23 | export { ButtonSuccess } from './button-success'
24 | export { ButtonWarning } from './button-warning'
25 | export { ButtonDanger } from './button-danger'
26 | export default Button
27 |
--------------------------------------------------------------------------------
/src/components/content-management/css/management.styl:
--------------------------------------------------------------------------------
1 | @import '~css/default'
2 |
3 | .dataActions
4 | position absolute
5 | display flex
6 | align-items center
7 | right 15px
8 |
9 | .cardDataTable
10 | border-radius 5px
11 | margin-top 25px
12 | padding: 15px
13 |
--------------------------------------------------------------------------------
/src/components/content-management/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import Icon from 'components/icon'
5 | import TableGenerator from 'components/table-generator'
6 | import SearchInput from 'components/search-input'
7 | import PaginationWithText from 'components/pagination/text'
8 |
9 | import style from './css/management'
10 |
11 | const Content = ({ children }) => (
12 |
13 |
14 | {children}
15 |
16 |
17 | )
18 |
19 | const TableGeneratorResult = ({ table }) => (
20 |
27 | )
28 |
29 | const Pagination = () => (
30 |
35 | )
36 |
37 | const Refresh = ({ fetch }) => {
38 | return (
39 |
40 |
43 |
44 | )
45 | }
46 |
47 | const ContentManagement = ({ ...params }) => (
48 |
49 | {params.searchInput && }
50 | {params.refresh && }
51 | {params.table && }
52 | {params.pagination && }
53 |
54 | )
55 |
56 | export default ContentManagement
57 |
--------------------------------------------------------------------------------
/src/components/create-button/css/create-button.styl:
--------------------------------------------------------------------------------
1 | @import '~css/default'
2 |
3 | .addBtn
4 | position absolute
5 | right 65px
6 | top 123px
--------------------------------------------------------------------------------
/src/components/create-button/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import Icon from 'components/icon'
5 | import style from './css/create-button'
6 | import { Link } from 'react-router-dom'
7 |
8 | const CreateButton = ({ route }) => (
9 |
10 |
11 |
14 |
15 |
16 | )
17 |
18 | export default CreateButton
19 |
--------------------------------------------------------------------------------
/src/components/filters/css/filters.styl:
--------------------------------------------------------------------------------
1 | @import '~css/default'
2 |
3 | $widthAside = 300px
4 |
5 | .filterContent
6 | background $grey
7 | width $widthAside
8 | position fixed
9 | transform translateX($widthAside)
10 | top 100px
11 | right 0
12 | height 100%
13 | z-index 99
14 | border-left 1px solid #cfd8dc
15 | padding 10px
16 | transition transform 150ms ease
17 | will-change transform
18 |
19 | &.open
20 | transform translateX(0)
21 |
22 | .sectionFilter
23 | margin-top 20px
24 |
25 | .labelFilter
26 | color rgb(185, 185, 185)
27 |
28 | .btnFilter
29 | margin-top 20px
30 |
--------------------------------------------------------------------------------
/src/components/filters/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import style from './css/filters'
5 |
6 | const Filters = ({ filters }) => (
7 |
37 | )
38 |
39 | export default Filters
40 |
--------------------------------------------------------------------------------
/src/components/footer/footer.story.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import Footer from './index'
5 | import { storiesOf } from '@kadira/storybook'
6 |
7 | storiesOf('', module)
8 | .add('default', () => (
9 |
10 | ))
11 |
--------------------------------------------------------------------------------
/src/components/footer/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React, { Component } from 'react'
4 | import Globals from 'src/globals'
5 |
6 | class Footer extends Component {
7 | render () {
8 | return (
9 |
13 | )
14 | }
15 | }
16 |
17 | export default Footer
18 |
--------------------------------------------------------------------------------
/src/components/form-footer/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import { Row, Col } from 'reactstrap'
5 | import { ButtonSuccess, ButtonWarning } from 'components/button'
6 | import Icon from 'components/icon'
7 |
8 | const FormFooter = props => {
9 | const { valid, history } = props
10 |
11 | return (
12 |
13 |
14 |
18 | {' '}
19 | Salvar
20 |
21 | history.push('/participantes')}
23 | >
24 | {' '}
25 | Voltar
26 |
27 |
28 |
29 | )
30 | }
31 |
32 | export default FormFooter
33 |
--------------------------------------------------------------------------------
/src/components/hamburger/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import 'hamburgers/dist/hamburgers.min'
5 |
6 | const Hamburger = ({ type = 'squeeze' }) => (
7 |
12 | )
13 |
14 | export default Hamburger
15 |
--------------------------------------------------------------------------------
/src/components/header-management/css/header-management.styl:
--------------------------------------------------------------------------------
1 | @import '~css/default'
2 |
3 | .headerFilters
4 | display flex
5 | height 30px
6 | align-items center
7 |
8 | .moduleName
9 | margin 0
10 | font-size 1.4em
11 | color $grey
12 |
13 | .moduleIcon
14 | color $grey
15 | width 20px
16 | height 20px
17 | font-size 1.3em
18 | display flex
19 | align-items center
20 | justify-content center
21 | margin-right 5px
--------------------------------------------------------------------------------
/src/components/header-management/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import Icon from 'components/icon'
5 | import { connect } from 'react-redux'
6 | import style from './css/header-management'
7 |
8 | const HeaderFilters = props => {
9 | const { activeMenu } = props
10 |
11 | return (
12 |
13 |
14 |
15 |
16 | {activeMenu.text}
17 |
18 |
19 |
20 | )
21 | }
22 |
23 | const mapStateToProps = state => ({ activeMenu: state.sidebar.activeMenu })
24 | export default connect(mapStateToProps, null)(HeaderFilters)
25 |
--------------------------------------------------------------------------------
/src/components/header/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React, { Component } from 'react'
4 | import { withRouter } from 'react-router-dom'
5 | import { Dropdown, DropdownMenu, DropdownItem } from 'reactstrap'
6 |
7 | import { bindActionCreators } from 'redux'
8 | import { connect } from 'react-redux'
9 | import { toggle } from 'reducers/sidebar/action-creators'
10 | import { logout } from 'reducers/auth/action-creators'
11 |
12 | class Header extends Component {
13 | constructor (props) {
14 | super(props)
15 |
16 | this.state = {
17 | actionsOpen: false,
18 | alertsOpen: false
19 | }
20 |
21 | this.toggle = this.toggle.bind(this)
22 | this.toggleAlert = this.toggleAlert.bind(this)
23 | this.sidebarToggle = this.sidebarToggle.bind(this)
24 | }
25 |
26 | toggle () {
27 | this.setState({
28 | actionsOpen: !this.state.actionsOpen
29 | })
30 | }
31 |
32 | toggleAlert () {
33 | this.setState({
34 | alertsOpen: !this.state.alertsOpen
35 | })
36 | }
37 |
38 | sidebarToggle () {
39 | this.props.toggle()
40 | }
41 |
42 | fullscreenToggle (e) {
43 | e.preventDefault()
44 | const elem = document.querySelector('html')
45 |
46 | if (!elem.fullscreenElement &&
47 | !elem.mozFullScreenElement &&
48 | !elem.webkitFullscreenElement &&
49 | !elem.msFullscreenElement) {
50 | if (elem.requestFullscreen) {
51 | elem.requestFullscreen()
52 | } else if (elem.msRequestFullscreen) {
53 | elem.msRequestFullscreen()
54 | } else if (elem.mozRequestFullScreen) {
55 | elem.mozRequestFullScreen()
56 | } else if (elem.webkitRequestFullscreen) {
57 | elem.webkitRequestFullscreen()
58 | }
59 | } else {
60 | if (elem.exitFullscreen) {
61 | elem.exitFullscreen()
62 | } else if (elem.msExitFullscreen) {
63 | elem.msExitFullscreen()
64 | } else if (elem.mozCancelFullScreen) {
65 | elem.mozCancelFullScreen()
66 | } else if (elem.webkitExitFullscreen) {
67 | elem.webkitExitFullscreen()
68 | }
69 | }
70 | }
71 |
72 | sidebarMinimize (e) {
73 | e.preventDefault()
74 | document.body.classList.toggle('sidebar-minimized')
75 | }
76 |
77 | mobileSidebarToggle (e) {
78 | e.preventDefault()
79 | document.body.classList.toggle('sidebar-mobile-show')
80 | }
81 |
82 | asideToggle (e) {
83 | e.preventDefault()
84 | document.body.classList.toggle('aside-menu-hidden')
85 | }
86 |
87 | render () {
88 | return (
89 |
90 |
92 |
93 |
94 | -
95 |
97 |
98 | -
99 |
102 |
103 |
104 |
105 | -
106 | {!this.props.isOnline && Você está OFFLINE}
107 |
108 | -
109 |
113 |
114 |
115 |
116 |
117 |
General Report success
118 |
15:28
119 |
120 |
121 |
122 |
123 |
Report Failure
124 |
15:28
125 |
126 |
127 |
128 |
129 |
130 | -
131 |
132 |
133 |
134 |
135 | -
136 |
139 |
140 | -
141 |
142 |
147 |
148 |
149 | Account
150 |
151 | Updates42
153 | Messages42
154 | Tasks42
156 | Comments42
158 |
159 | Settings
160 |
161 | Profile
162 | Settings
163 | Payments42
165 | Projects42
167 |
168 | Lock Account
169 |
170 |
171 |
172 |
173 | -
174 |
176 |
177 |
178 |
179 | )
180 | }
181 | }
182 |
183 | const mapStateToProps = state => ({ isOnline: state.app.isOnline })
184 | const mapDispatchToProps = dispatch => bindActionCreators({ toggle, logout }, dispatch)
185 | export default connect(mapStateToProps, mapDispatchToProps)(withRouter(Header))
186 |
--------------------------------------------------------------------------------
/src/components/icon/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import { string } from 'prop-types'
5 | import 'font-awesome/css/font-awesome.min'
6 |
7 | const Icon = ({ className, ...params }) =>
8 |
9 | Icon.defaultProps = {
10 | className: 'star'
11 | }
12 |
13 | Icon.propTypes = {
14 | className: string
15 | }
16 |
17 | export default Icon
18 |
--------------------------------------------------------------------------------
/src/components/input-warn/css/input-warn.styl:
--------------------------------------------------------------------------------
1 | @import '~css/default'
2 |
3 | .info
4 | color $blue
5 | position relative
6 | display inherit
7 | margin-left 5px
8 |
9 | .icon
10 | cursor pointer
11 |
12 | &:hover + .list
13 | display block
14 | transform translateX(0)
15 |
16 | .list
17 | position absolute
18 | width 200px
19 | height auto
20 | background-color #F3F3F3
21 | padding 10px
22 | top -10px
23 | left 30px
24 | border 1px solid rgba(0, 0, 0, .2)
25 | transform translateX(20px)
26 | display none
27 | transition all 200ms ease
28 |
29 | li
30 | margin-left 10px
31 | margin-bottom 10px
--------------------------------------------------------------------------------
/src/components/input-warn/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import Icon from 'components/icon'
5 | import style from './css/input-warn'
6 |
7 | const InputWarn = ({ warn }) => {
8 | return (
9 |
10 |
11 |
12 | {warn.map((v, index) => - {v}
)}
13 |
14 |
15 | )
16 | }
17 |
18 | export default InputWarn
19 |
--------------------------------------------------------------------------------
/src/components/input/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import InputWarn from 'components/input-warn'
5 | import { warning as alertWarn } from 'components/messages'
6 |
7 | const defaultClass = 'form-control form-control-sm'
8 |
9 | const Input = props => {
10 | const { className, label, type, warning } = props
11 | const { touched, error } = props.meta
12 |
13 | let classNameAttr = className
14 | let hasErrors = false
15 |
16 | if (touched && error) {
17 | hasErrors = true
18 | alertWarn(error.replace(':name:', label))
19 | classNameAttr = `${defaultClass} form-control-danger`
20 | }
21 |
22 | return (
23 |
24 | {label &&
}
28 |
29 |
34 |
35 |
36 | )
37 | }
38 |
39 | Input.defaultProps = {
40 | type: 'text',
41 | className: defaultClass
42 | }
43 |
44 | export default Input
45 |
--------------------------------------------------------------------------------
/src/components/loader-full-page/css/loader-full-page.styl:
--------------------------------------------------------------------------------
1 | @import '~css/default'
2 |
3 | .loaderSection
4 | display flex;
5 | height 200px
6 | width 200px
7 | align-items center
8 | justify-content center
9 | flex-wrap wrap
10 | font-weight bold
11 | color $grey
12 | position absolute
13 | left calc(50% - 100px)
14 | top calc(50% - 100px)
--------------------------------------------------------------------------------
/src/components/loader-full-page/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import Loading from 'react-loading'
5 | import { string } from 'prop-types'
6 | import style from './css/loader-full-page'
7 |
8 | const LoaderFullPage = props => (
9 |
10 | {`Carregando ${props.messageLoading}`}
11 |
12 |
13 | )
14 |
15 | LoaderFullPage.defaultProps = {
16 | messageLoading: ''
17 | }
18 |
19 | LoaderFullPage.propTypes = {
20 | messageLoading: string
21 | }
22 |
23 | export default LoaderFullPage
24 |
--------------------------------------------------------------------------------
/src/components/loader/css/loader.styl:
--------------------------------------------------------------------------------
1 | @import '~css/default'
2 |
3 | .loader
4 | position absolute
5 | top 55px
6 | right 15px
7 |
--------------------------------------------------------------------------------
/src/components/loader/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React, { Component } from 'react'
4 | import Loading from 'react-loading'
5 | import style from './css/loader'
6 | import { string } from 'prop-types'
7 |
8 | class Loader extends Component {
9 | componentWillMount () {
10 | document.body.classList.add(style.block)
11 | }
12 |
13 | componentWillUnmount () {
14 | document.body.classList.remove(style.block)
15 | }
16 |
17 | render () {
18 | const { type, className, color } = this.props
19 |
20 | return (
21 |
22 |
23 |
24 | )
25 | }
26 | }
27 |
28 | Loader.propTypes = {
29 | type: string,
30 | className: string,
31 | color: string
32 | }
33 |
34 | Loader.defaultProps = {
35 | type: 'bars',
36 | color: '#37474f'
37 | }
38 |
39 | export default Loader
40 |
--------------------------------------------------------------------------------
/src/components/messages/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import { toastr } from 'react-redux-toastr'
4 | import 'react-redux-toastr/lib/css/react-redux-toastr.min.css'
5 |
6 | export function success (text, title = 'Sucesso') {
7 | toastr.success(title, text)
8 | }
9 |
10 | export function error (text, title = 'Erro') {
11 | toastr.error(title, text)
12 | }
13 |
14 | export function info (text, title = 'Aviso') {
15 | toastr.info(title, text)
16 | }
17 |
18 | export function warning (text, title = 'Atenção') {
19 | toastr.info(title, text)
20 | }
21 |
--------------------------------------------------------------------------------
/src/components/pagination/css/pagination.styl:
--------------------------------------------------------------------------------
1 | @import '~css/default'
2 |
3 | .paginationSection
4 | display flex
5 | align-items center
6 | justify-content space-between
7 | color $grey
--------------------------------------------------------------------------------
/src/components/pagination/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import pagination from 'utils/pagination'
5 | import Page from 'components/pagination/page'
6 |
7 | const Pagination = ({ total, activePage, pageLink }) => (
8 |
17 | )
18 |
19 | export default Pagination
20 |
--------------------------------------------------------------------------------
/src/components/pagination/page.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 |
5 | const Page = ({ page, pageLink }) => {
6 | const isReticence = page => page === '...'
7 | const href = isReticence(page) ? 'javascript:void(0)' : pageLink
8 |
9 | return {page}
10 | }
11 |
12 | export default Page
13 |
--------------------------------------------------------------------------------
/src/components/pagination/pagination.story.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import Pagination from './index'
5 | import PaginationWithText from './text'
6 | import { storiesOf } from '@kadira/storybook'
7 |
8 | storiesOf('', module)
9 | .add('with props', () => (
10 |
11 | ))
12 | .add('without props', () => (
13 |
14 | ))
15 | .add('with text', () => (
16 |
18 | ))
19 |
--------------------------------------------------------------------------------
/src/components/pagination/text.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import Pagination from './index'
5 | import style from './css/pagination'
6 |
7 | const Text = ({ registersTotal, total }) => (
8 |
9 |
Mostrando 1 a 10 de {registersTotal} registros
10 |
11 |
12 | )
13 |
14 | export default Text
15 |
--------------------------------------------------------------------------------
/src/components/particles/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import ParticlesContainer from 'react-particles-js'
5 | import ParticlesConfig from 'utils/particles-config'
6 |
7 | const Particles = () =>
8 |
9 | export default Particles
10 |
--------------------------------------------------------------------------------
/src/components/redux-toastr/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import ReduxToastr from 'react-redux-toastr'
5 |
6 | const Messages = props => (
7 |
15 | )
16 |
17 | export default Messages
18 |
--------------------------------------------------------------------------------
/src/components/search-input/css/search-input.styl:
--------------------------------------------------------------------------------
1 | @import '~css/default'
2 |
3 | .searchInput
4 | width 200px
5 | font-family FontAwesome, $font
6 | transition width 100ms ease
7 | will-change width
8 | &:focus
9 | width 240px
--------------------------------------------------------------------------------
/src/components/search-input/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import style from './css/search-input'
5 |
6 | const SearchInput = () =>
7 |
8 | export default SearchInput
9 |
--------------------------------------------------------------------------------
/src/components/sidebar/css/sidebar.styl:
--------------------------------------------------------------------------------
1 | @import '~css/default'
2 |
3 | .filterMenus
4 | width 100%
5 | border none
6 | height 30px
7 | background rgba(229, 229, 229, 0.31)
8 | padding-left 10px
9 | color #FFF
10 | outline none
11 | font-family $font
12 |
13 | &::-webkit-input-placeholder
14 | color #FFF
--------------------------------------------------------------------------------
/src/components/sidebar/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React, { Component } from 'react'
4 | import { bindActionCreators } from 'redux'
5 | import { connect } from 'react-redux'
6 | import { fetch, search, select } from 'reducers/sidebar/action-creators'
7 |
8 | import MenuItem from './menu-item'
9 | import MenuTree from './menu-tree'
10 |
11 | import style from './css/sidebar'
12 |
13 | class Sidebar extends Component {
14 | constructor (props) {
15 | super(props)
16 |
17 | this._handleClick = this._handleClick.bind(this)
18 | this._activateTreeRoute = this._activateTreeRoute.bind(this)
19 | this._activateSingleRoute = this._activateSingleRoute.bind(this)
20 | this._renderMenus = this._renderMenus.bind(this)
21 | }
22 |
23 | _handleClick (e) {
24 | e.preventDefault()
25 | e.target.parentElement.classList.toggle('open')
26 | }
27 |
28 | _activateTreeRoute (routeName) {
29 | const activeMenu = this.props.menus.filter(menu => {
30 | return menu.parent
31 | ? menu.children.filter(menu => menu.route === this.props.location.pathname)
32 | : menu.route === this.props.location.pathname
33 | })
34 |
35 | !!activeMenu[0] && this.props.select(activeMenu[0])
36 |
37 | if (routeName === '') return 'nav-item nav-dropdown'
38 |
39 | return this.props.location.pathname.includes(routeName) ? 'nav-item nav-dropdown open' : 'nav-item nav-dropdown'
40 | }
41 |
42 | _activateSingleRoute (routeName) {
43 | const activeMenu = this.props.menus.filter(menu => menu.route === routeName)
44 | !!activeMenu[0] && this.props.select(activeMenu[0])
45 | }
46 |
47 | _renderMenus (menus = []) {
48 | return menus.map((item, index) => (
49 | item.parent === false
50 | ?
51 | :
58 | ))
59 | }
60 |
61 | componentDidMount () {
62 | this.props.fetch()
63 | }
64 |
65 | render () {
66 | return (
67 |
75 | )
76 | }
77 | }
78 |
79 | const mapStateToProps = state => ({ menus: state.sidebar.menus })
80 | const mapDispatchToProps = dispatch => bindActionCreators({ fetch, search, select }, dispatch)
81 | export default connect(mapStateToProps, mapDispatchToProps)(Sidebar)
82 |
--------------------------------------------------------------------------------
/src/components/sidebar/menu-item.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import Icon from 'components/icon'
5 | import { NavLink } from 'react-router-dom'
6 | import { func, string } from 'prop-types'
7 |
8 | const MenuItem = ({ activeRoute, ...item }) => {
9 | const { route, icon, text } = item
10 |
11 | return (
12 |
13 |
16 | {icon && }
17 | {text}
18 |
19 |
20 | )
21 | }
22 |
23 | MenuItem.propTypes = {
24 | activeRoute: func.isRequired,
25 | route: string.isRequired,
26 | icon: string,
27 | text: string
28 | }
29 |
30 | export default MenuItem
31 |
--------------------------------------------------------------------------------
/src/components/sidebar/menu-tree.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import Icon from 'components/icon'
5 | import MenuItem from './menu-item'
6 |
7 | const MenuTree = ({ activeRoute, activateSingleRoute, handleClick, item }) => {
8 | return (
9 |
10 |
11 | {item.icon && }
12 | {item.text}
13 |
14 |
15 | {item.children.map((item, index) => {
16 | return item.parent === false
17 | ?
18 | :
25 | })}
26 |
27 |
28 | )
29 | }
30 |
31 | export default MenuTree
32 |
--------------------------------------------------------------------------------
/src/components/table-generator/css/table-generator.styl:
--------------------------------------------------------------------------------
1 | @import '~css/default'
2 |
3 | .dataTable
4 | color #76838f
5 | margin-top 40px
6 | thead
7 | th
8 | border none
9 | color #526069
10 |
11 | thead
12 | tbody
13 | .action
14 | width 150px
15 | max-width 180px
16 | text-align center
17 |
18 | .imageField
19 | width 50px
20 | border-radius 5px
21 |
--------------------------------------------------------------------------------
/src/components/table-generator/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React, { Component } from 'react'
4 | import { Table } from 'reactstrap'
5 | import Icon from 'components/icon'
6 | import { Link } from 'react-router-dom'
7 | import { ButtonWarning, ButtonDanger } from 'components/button'
8 |
9 | import style from './css/table-generator'
10 |
11 | class TableGenerator extends Component {
12 | constructor (props) {
13 | super(props)
14 | }
15 |
16 | render () {
17 | const generateHeaders = indicators => indicators.map((item, index) => {Object.values(item)} | )
18 |
19 | const Edit = ({ router, id }) => (
20 |
22 |
23 |
24 |
25 |
26 | )
27 |
28 | const Delete = () => (
29 |
30 |
31 |
32 | )
33 |
34 | const { indicators, data, router, ...props } = this.props
35 |
36 | return (
37 |
38 |
39 |
40 |
41 | {generateHeaders(indicators)}
42 | Ações |
43 |
44 |
45 |
46 | {data.map((row, index) => (
47 |
48 | {indicators.map((item, index) => {
49 | if (row[Object.keys(item)].type) {
50 | switch (row[Object.keys(item)].type) {
51 | case 'picture':
52 | return ].value}) |
53 | default:
54 | return {row[Object.keys(item)].value} |
55 | }
56 | }
57 |
58 | return {row[Object.keys(item)]} |
59 | })}
60 |
61 | {props.edit && }
62 | {props.del && }
63 | {row.actions && row.actions()}
64 | |
65 |
66 | ))}
67 |
68 |
69 |
70 | {generateHeaders(indicators)}
71 | Ações |
72 |
73 |
74 |
75 |
76 | )
77 | }
78 | }
79 |
80 | export default TableGenerator
81 |
--------------------------------------------------------------------------------
/src/constants.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | /**
4 | * Const to Dev Tools (Extension Google Chrome)
5 | */
6 | export const DEV_TOOLS = window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
7 |
8 | /**
9 | * Const URL API Rest
10 | * @type {string}
11 | */
12 | export const URL_API = 'https://api.github.com/users'
13 | export const URL_LOGIN = 'http://staging.premiototall.com.br/api/v1/auth/admins'
14 |
--------------------------------------------------------------------------------
/src/containers/app/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React, { Component } from 'react'
4 | import Aside from 'components/aside'
5 | import Header from 'components/header'
6 | import Sidebar from 'components/sidebar'
7 | import Footer from 'components/footer'
8 | import Breadcrumb from 'components/breadcrumb'
9 | import Messages from 'components/redux-toastr'
10 | import LoaderFullPage from 'components/loader-full-page'
11 | import Network from 'react-network'
12 |
13 | import { bindActionCreators } from 'redux'
14 | import { connect } from 'react-redux'
15 | import { online, offline } from 'reducers/app/action-creators'
16 |
17 | import globals from 'src/globals'
18 | import 'dist/core/style'
19 |
20 | class App extends Component {
21 | constructor (props) {
22 | super(props)
23 |
24 | this.state = {
25 | isLoading: true
26 | }
27 |
28 | this._handleNetwork = this._handleNetwork.bind(this)
29 | }
30 |
31 | componentDidMount () {
32 | setTimeout(() => this.setState({ isLoading: false }), 1500)
33 | }
34 |
35 | _handleNetwork (online) {
36 | if (online) {
37 | return this.props.online()
38 | }
39 |
40 | return this.props.offline()
41 | }
42 |
43 | render () {
44 | const { isLoading } = this.state
45 |
46 | if (isLoading) return
47 |
48 | return (
49 |
50 |
51 |
52 |
53 |
54 |
55 | { this.props.children }
56 | this._handleNetwork(online)} />
57 |
58 |
59 |
60 |
61 |
62 |
63 | )
64 | }
65 | }
66 |
67 | // const mapStateToProps = state => ({ isOnline: state.participants.isFetching })
68 | const mapDispatchToProps = dispatch => bindActionCreators({ online, offline }, dispatch)
69 | export default connect(null, mapDispatchToProps)(App)
70 |
--------------------------------------------------------------------------------
/src/containers/dashboard/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import Icon from 'components/icon'
5 |
6 | const Dashboard = () => (
7 |
8 |
9 | Dashboard
10 |
11 | )
12 |
13 | export default Dashboard
14 |
--------------------------------------------------------------------------------
/src/containers/errors/404/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import { NavLink } from 'react-router-dom'
5 |
6 | const Page404 = () => (
7 |
8 |
9 |
10 |
11 |
12 |
404
13 |
Oops! Você está perdido.
14 |
A página que você procura não foi encontrada
15 |
16 |
17 |
18 |
19 |
20 |
21 | Me tire daqui
22 |
23 |
24 |
25 |
26 |
27 | )
28 |
29 | export default Page404
30 |
--------------------------------------------------------------------------------
/src/containers/login/css/login.styl:
--------------------------------------------------------------------------------
1 | @import '~css/default'
2 |
3 | .fetching
4 | width 44px
5 | margin 0 auto
6 | position absolute
7 | right 50%
8 | transform translateX(22px)
9 |
10 | .backgroundCity
11 | background url('/public/img/backgroundLogin.jpg') no-repeat center center / cover
12 |
13 | .boxLogin
14 | filter: drop-shadow(10px 10px 10px rgba(0, 0, 0, .5))
--------------------------------------------------------------------------------
/src/containers/login/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React, { Component } from 'react'
4 | import Particles from 'components/particles'
5 | import Loader from 'components/loader'
6 | import global from 'src/globals'
7 |
8 | import style from './css/login'
9 | import { bindActionCreators } from 'redux'
10 | import { connect } from 'react-redux'
11 | import { login } from 'reducers/auth/action-creators'
12 |
13 | class Login extends Component {
14 | constructor (props) {
15 | super(props)
16 |
17 | this.state = {
18 | email: '',
19 | password: ''
20 | }
21 |
22 | this._handleChange = this._handleChange.bind(this)
23 | }
24 |
25 | componentDidMount () {
26 | document.body.classList.add(style.backgroundCity)
27 | }
28 |
29 | componentDidUnmount () {
30 | document.body.classList.remove(style.backgroundCity)
31 | }
32 |
33 | _handleChange (e) {
34 | this.setState({ [e.target.name]: e.target.value })
35 | }
36 |
37 | render () {
38 | const { isFetching } = this.props
39 |
40 | return (
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
Login
51 |
Faça login com sua conta
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 | {isFetching && }
73 |
74 |
75 |
76 |
77 |
78 |
79 | )
80 | }
81 | }
82 |
83 | const mapStateToProps = state => ({ isFetching: state.auth.isFetching })
84 | const mapDispatchToProps = dispatch => bindActionCreators({ login }, dispatch)
85 | export default connect(mapStateToProps, mapDispatchToProps)(Login)
86 |
--------------------------------------------------------------------------------
/src/containers/participants/css/management.styl:
--------------------------------------------------------------------------------
1 | @import '~css/default'
2 |
3 | .loader
4 | position absolute
5 | top 55px
6 | right 15px
7 |
8 | .addBtn
9 | position absolute
10 | right 65px
11 | top 123px
12 |
13 | .btnFilterToggle
14 | position absolute
15 | width 35px
16 | height 35px
17 | align-items center
18 | justify-content center
19 | display flex
20 | top 123px
21 | right 15px
22 | transition top 100ms ease
23 |
24 | &.open
25 | top 60px
26 | border-radius 0
27 |
28 | &.close
29 | border-radius 50%
30 |
31 | .dataActions
32 | position absolute
33 | display flex
34 | align-items center
35 | right 15px
36 |
37 | .cardDataTable
38 | border-radius 5px
39 | margin-top 25px
40 | padding: 15px
41 |
--------------------------------------------------------------------------------
/src/containers/participants/form.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import { Container, Row, Col } from 'reactstrap'
5 | import { reduxForm, Field } from 'redux-form'
6 | import validators from './validators'
7 | import Input from 'components/input'
8 | import FormFooter from 'components/form-footer'
9 |
10 | const Form = ({ handleSubmit, ...props }) => {
11 | return (
12 |
13 |
33 |
34 | )
35 | }
36 |
37 | const ParticipantForm = props => {
38 | const { handleSubmit } = props
39 | const params = props.match.params || ''
40 |
41 | return
42 | }
43 |
44 | export default reduxForm({ form: 'participantForm' })(ParticipantForm)
45 |
--------------------------------------------------------------------------------
/src/containers/participants/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import { Route } from 'react-router-dom'
5 | import { bindActionCreators } from 'redux'
6 | import { connect } from 'react-redux'
7 | import { edit, add } from 'reducers/participants/action-creators'
8 | import Form from './form'
9 | import Management from './management'
10 | import Loader from 'components/loader'
11 |
12 | import style from './css/management'
13 |
14 | const Participant = props => (
15 |
16 | {props.isFetching && }
17 |
18 | } />
19 | } />
20 |
21 | )
22 |
23 | const mapStateToProps = state => ({ isFetching: state.participants.isFetching })
24 | const mapDispatchToProps = dispatch => bindActionCreators({ edit, add }, dispatch)
25 | export default connect(mapStateToProps, mapDispatchToProps)(Participant)
26 |
--------------------------------------------------------------------------------
/src/containers/participants/management.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React, { Component } from 'react'
4 | import HeaderManagement from 'components/header-management'
5 | import Filters from 'components/filters'
6 | import ContentManagement from 'components/content-management'
7 | import Icon from 'components/icon'
8 | import CreateButton from 'components/create-button'
9 | import { ButtonInfo } from 'components/button'
10 | import style from './css/management'
11 |
12 | import { fetch } from 'reducers/participants/action-creators'
13 | import { bindActionCreators } from 'redux'
14 | import { connect } from 'react-redux'
15 |
16 | class Management extends Component {
17 | constructor (props) {
18 | super(props)
19 |
20 | this.state = {
21 | filterOpen: false,
22 | route: 'participantes',
23 | headers: [
24 | { id: '#' },
25 | { avatar_url: 'Foto' },
26 | { login: 'Login' },
27 | { html_url: 'URL' }
28 | ],
29 | filters: [
30 | {
31 | component: 'input',
32 | placeholder: 'Pesquise por Nome ou CPF',
33 | label: 'Nome ou CPF'
34 | }, {
35 | component: 'select',
36 | placeholder: 'Selecione o estabelecimento',
37 | label: 'Estabelecimento',
38 | data: { 321: 'Gabriel', 21: 'Fernando' }
39 | }
40 | ]
41 | }
42 |
43 | this._hideFilter = this._hideFilter.bind(this)
44 | }
45 |
46 | _hideFilter () {
47 | this.state.filterOpen && this.setState({ filterOpen: false })
48 | }
49 |
50 | componentDidMount () {
51 | this.props.fetch()
52 | document.addEventListener('scroll', this._hideFilter)
53 | }
54 |
55 | render () {
56 | const { headers } = this.state
57 | const { participants } = this.props
58 |
59 | const responseData = () => (
60 | participants.map(v => ({
61 | id: v.id,
62 | avatar_url: { type: 'picture', value: v.avatar_url },
63 | login: v.login,
64 | html_url: v.html_url
65 | }))
66 | )
67 |
68 | const table = {
69 | headers: headers,
70 | response: responseData,
71 | router: this.state.route,
72 | edit: true,
73 | del: true
74 | }
75 |
76 | const filters = {
77 | content: this.state.filters,
78 | open: this.state.filterOpen
79 | }
80 |
81 | const refresh = {
82 | fetch: this.props.fetch
83 | }
84 |
85 | const BtnFilter = () => (
86 | this.setState({ filterOpen: !this.state.filterOpen })}
88 | className={`${style.btnFilterToggle} ${filters.open ? style.open : style.close}`}>
89 |
90 |
91 | )
92 |
93 | return (
94 |
95 |
96 |
97 |
100 |
103 |
109 |
110 | )
111 | }
112 | }
113 |
114 | const mapStateToProps = state => ({ participants: state.participants.list })
115 | const mapDispatchToProps = dispatch => bindActionCreators({ fetch }, dispatch)
116 | export default connect(mapStateToProps, mapDispatchToProps)(Management)
117 |
--------------------------------------------------------------------------------
/src/containers/participants/validators.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import { required, number, minValue } from 'utils/validators'
4 |
5 | const validators = {
6 | age: {
7 | errors: [required, number, minValue(20)]
8 | }
9 | }
10 |
11 | export default validators
12 |
--------------------------------------------------------------------------------
/src/data.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | const data = {
4 | menus: [
5 | {
6 | id: 1,
7 | text: 'Dashboard',
8 | icon: 'fa fa-dashboard',
9 | route: '/dashboard',
10 | parent: false
11 | }, {
12 | id: 2,
13 | text: 'Participantes',
14 | icon: 'fa fa-users',
15 | route: '/participantes',
16 | parent: false
17 | }
18 | ]
19 | }
20 |
21 | export default data
22 |
--------------------------------------------------------------------------------
/src/dist/css/default.styl:
--------------------------------------------------------------------------------
1 | $font = Roboto, "Helvetica Neue", Arial, sans-serif
2 | $blue = #20a8d8
3 | $grey = #37474f
4 |
--------------------------------------------------------------------------------
/src/globals.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | const globals = {
4 | nameProject: 'Starter Kit React',
5 | author: {
6 | name: '@gabrielferreiraa',
7 | network: 'https://github.com/gabrielferreiraa'
8 | },
9 | style: {
10 | defaultColor: '#20A8D8'
11 | }
12 | }
13 |
14 | export default globals
15 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import { render } from 'react-dom'
5 | import { Provider } from 'react-redux'
6 | import { AppContainer } from 'react-hot-loader'
7 | import { configureStore } from 'stores/configure-store'
8 |
9 | import Main from './main'
10 |
11 | const store = configureStore()
12 | const rootElement = document.querySelector('[data-js="app"]')
13 |
14 | const renderApp = Component => {
15 | render(
16 |
17 |
18 |
19 |
20 |
21 | , rootElement)
22 | }
23 |
24 | renderApp(Main)
25 |
26 | const isDev = () => process.env.NODE_ENV === 'development'
27 |
28 | if (isDev && module.hot) {
29 | module.hot.accept('./main', () => {
30 | renderApp(require('./main').default)
31 | })
32 | }
33 |
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import Routers from './routes'
5 |
6 | const Main = () =>
7 |
8 | export default Main
9 |
--------------------------------------------------------------------------------
/src/redux-flow/reducers/app/action-creators.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import * as action from './actions'
4 |
5 | export const online = () => ({
6 | type: action.ONLINE,
7 | payload: true
8 | })
9 |
10 | export const offline = () => ({
11 | type: action.OFFLINE,
12 | payload: false
13 | })
14 |
--------------------------------------------------------------------------------
/src/redux-flow/reducers/app/actions.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | const reducer = 'app'
4 |
5 | export const ONLINE = `${reducer}/ONLINE`
6 | export const OFFLINE = `${reducer}/OFFLINE`
7 |
--------------------------------------------------------------------------------
/src/redux-flow/reducers/app/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import { handleActions } from 'redux-actions'
4 | import * as action from './actions'
5 |
6 | export const initialState = { isOnline: '' }
7 |
8 | const handlers = {
9 | [action.ONLINE]: (state, action) => ({
10 | ...state,
11 | isOnline: action.payload
12 | }),
13 | [action.OFFLINE]: (state, action) => ({
14 | ...state,
15 | isOnline: action.payload
16 | })
17 | }
18 |
19 | export default handleActions(handlers, initialState)
20 |
--------------------------------------------------------------------------------
/src/redux-flow/reducers/auth/action-creators.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import * as action from './actions'
4 | import { request } from 'utils/ws-client'
5 | import { URL_LOGIN } from 'src/constants'
6 | import { setToken, removeToken } from 'utils/auth'
7 |
8 | const requestLogin = data => ({
9 | type: action.LOGIN_REQUEST,
10 | isFetching: true,
11 | isAuthenticated: false,
12 | data
13 | })
14 |
15 | const receiveLogin = user => ({
16 | type: action.LOGIN_SUCCESS,
17 | token: user.token
18 | })
19 |
20 | const errorLogin = message => ({
21 | type: action.LOGIN_ERROR,
22 | message
23 | })
24 |
25 | const requestLogout = () => ({
26 | type: action.LOGOUT_REQUEST
27 | })
28 |
29 | const receiveLogout = () => ({
30 | type: action.LOGOUT_SUCCESS
31 | })
32 |
33 | export const login = (data, { ...history }) => {
34 | let config = {
35 | method: 'POST',
36 | url: URL_LOGIN,
37 | data
38 | }
39 |
40 | return dispatch => {
41 | dispatch(requestLogin(data))
42 |
43 | return request(config)
44 | .then(resp => {
45 | dispatch(receiveLogin(resp))
46 | !!resp.data.data.token && setToken(resp.data.data.token)
47 | history.push('/dashboard')
48 | })
49 | .catch(err => {
50 | dispatch(errorLogin(err))
51 | return console.log(err)
52 | })
53 | }
54 | }
55 |
56 | export const logout = ({ history }) => {
57 | return dispatch => {
58 | dispatch(requestLogout())
59 | removeToken()
60 | history.push('/login')
61 | dispatch(receiveLogout())
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/src/redux-flow/reducers/auth/actions.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | const reducer = 'auth'
4 |
5 | export const LOGIN_REQUEST = `${reducer}/LOGIN_REQUEST`
6 | export const LOGIN_SUCCESS = `${reducer}/LOGIN_SUCCESS`
7 | export const LOGIN_ERROR = `${reducer}/LOGIN_ERROR`
8 | export const LOGOUT_REQUEST = `${reducer}/LOGOUT_REQUEST`
9 | export const LOGOUT_SUCCESS = `${reducer}/LOGOUT_SUCCESS`
10 |
--------------------------------------------------------------------------------
/src/redux-flow/reducers/auth/auth.test.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import { expect } from 'chai'
4 | import reducer, { initialState } from './index'
5 | import * as action from './actions'
6 |
7 | describe('auth reducer', () => {
8 | it('should return the initial state', () => {
9 | expect(reducer(undefined, {})).to.be.deep.equal(initialState)
10 | })
11 |
12 | it('should handle LOGIN_REQUEST', () => {
13 | const dispatcher = {
14 | type: action.LOGIN_REQUEST,
15 | payload: {
16 | email: 'admin@admin.com.br',
17 | password: 'password'
18 | }
19 | }
20 |
21 | const response = reducer([], dispatcher)
22 |
23 | expect(response).to.be.deep.equal({
24 | isFetching: true,
25 | isAuthenticated: false,
26 | user: dispatcher
27 | })
28 | })
29 | })
30 |
--------------------------------------------------------------------------------
/src/redux-flow/reducers/auth/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import { handleActions } from 'redux-actions'
4 | import * as action from './actions'
5 |
6 | export const initialState = { isFetching: false, isAuthenticated: false, token: '' }
7 |
8 | const handlers = {
9 | [action.LOGIN_REQUEST]: (state, action) => ({
10 | ...state,
11 | isFetching: true,
12 | isAuthenticated: false,
13 | user: action.data
14 | }),
15 | [action.LOGIN_SUCCESS]: (state, action) => ({
16 | ...state,
17 | isFetching: false,
18 | isAuthenticated: true,
19 | errorMessage: ''
20 | }),
21 | [action.LOGIN_ERROR]: (state, action) => ({
22 | ...state,
23 | isFetching: false,
24 | isAuthenticated: false,
25 | errorMessage: action.message
26 | }),
27 | [action.LOGOUT_REQUEST]: (state, action) => ({
28 | ...state,
29 | isFetching: true,
30 | isAuthenticated: true
31 | }),
32 | [action.LOGOUT_SUCCESS]: (state, action) => ({
33 | ...state,
34 | isFetching: false,
35 | isAuthenticated: false
36 | })
37 | }
38 |
39 | export default handleActions(handlers, initialState)
40 |
--------------------------------------------------------------------------------
/src/redux-flow/reducers/participants/action-creators.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import * as action from './actions'
4 | import { request } from 'utils/ws-client'
5 | import { error as alertError } from 'components/messages'
6 |
7 | const fetching = () => ({ type: action.FETCHING })
8 | const error = () => ({ type: action.ERROR })
9 |
10 | export const edit = values => ({ type: action.EDIT, payload: values })
11 | export const add = values => ({ type: action.ADD, payload: values })
12 | export const fetch = () => (dispatch, getState) => {
13 | const hasRequest = getState().participants.isFetching
14 |
15 | if (!hasRequest) {
16 | dispatch(fetching())
17 |
18 | request({ method: 'GET' })
19 | .then(resp => dispatch({ type: action.SUCCESS, payload: resp.data }))
20 | .catch(() => {
21 | alertError('Houve um problema ao buscar informações')
22 | return dispatch(error())
23 | })
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/redux-flow/reducers/participants/actions.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | const reducer = 'participants'
4 |
5 | export const EDIT = `${reducer}/EDIT`
6 | export const ADD = `${reducer}/ADD`
7 | export const FETCH = `${reducer}/FETCH`
8 | export const FETCHING = `${reducer}/FETCHING`
9 | export const SUCCESS = `${reducer}/SUCCESS`
10 | export const ERROR = `${reducer}/ERROR`
11 |
--------------------------------------------------------------------------------
/src/redux-flow/reducers/participants/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import { handleActions } from 'redux-actions'
4 | import * as action from './actions'
5 |
6 | export const initialState = { list: [], isFetching: false }
7 |
8 | const handlers = {
9 | [action.FETCHING]: (state, action) => ({ ...state, isFetching: true }),
10 | [action.SUCCESS]: (state, action) => ({ ...state, list: action.payload, isFetching: false }),
11 | [action.ERROR]: (state, action) => ({ ...state, isFetching: false }),
12 | [action.ADD]: (state, action) => {
13 | console.log(action.payload)
14 | }
15 | }
16 |
17 | export default handleActions(handlers, initialState)
18 |
--------------------------------------------------------------------------------
/src/redux-flow/reducers/participants/participants.test.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import { expect } from 'chai'
4 | import reducer, { initialState } from './index'
5 | import * as action from './actions'
6 |
7 | describe('participants reducer', () => {
8 | it('should return the initial state', () => {
9 | expect(reducer(undefined, {})).to.be.deep.equal(initialState)
10 | })
11 |
12 | it('should handle FETCHING', () => {
13 | expect(reducer([], { type: action.FETCHING })).to.be.deep.equal({ isFetching: true })
14 | })
15 |
16 | it('should handle SUCCESS', () => {
17 | expect(reducer([], { type: action.SUCCESS, payload: {} })).to.be.deep.equal({ list: {}, isFetching: false })
18 | })
19 |
20 | it('should handle ERROR', () => {
21 | expect(reducer([], { type: action.ERROR })).to.be.deep.equal({ isFetching: false })
22 | })
23 | })
24 |
--------------------------------------------------------------------------------
/src/redux-flow/reducers/root-reducers.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import { combineReducers } from 'redux'
4 | import { reducer as formReducer } from 'redux-form'
5 | import { reducer as toastrReducer } from 'react-redux-toastr'
6 |
7 | import sidebarReducer from './sidebar'
8 | import participantsReducer from './participants'
9 | import authReducer from './auth'
10 | import appReducer from './app'
11 |
12 | const rootReducers = combineReducers({
13 | app: appReducer,
14 | form: formReducer,
15 | toastr: toastrReducer,
16 | sidebar: sidebarReducer,
17 | participants: participantsReducer,
18 | auth: authReducer
19 | })
20 |
21 | export default rootReducers
22 |
--------------------------------------------------------------------------------
/src/redux-flow/reducers/sidebar/action-creators.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import * as action from './actions'
4 | import data from 'src/data'
5 |
6 | export const fetch = () => ({ type: action.FETCH, payload: data.menus })
7 | export const search = e => ({ type: action.SEARCH, payload: e.target.value })
8 | export const select = menu => ({ type: action.SELECT, payload: menu })
9 | export const toggle = () => {
10 | document.body.classList.toggle('sidebar-hidden')
11 | return { type: action.TOGGLE }
12 | }
13 |
--------------------------------------------------------------------------------
/src/redux-flow/reducers/sidebar/actions.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | const reducer = 'sidebar'
4 |
5 | export const FETCH = `${reducer}/FETCH`
6 | export const SEARCH = `${reducer}/SEARCH`
7 | export const SELECT = `${reducer}/SELECT`
8 | export const TOGGLE = `${reducer}/TOGGLE`
9 |
--------------------------------------------------------------------------------
/src/redux-flow/reducers/sidebar/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import { handleActions } from 'redux-actions'
4 | import * as action from './actions'
5 |
6 | const initialState = { menus: [], activeMenu: {}, open: true }
7 |
8 | const handlers = {
9 | [action.FETCH]: (state, action) => ({ ...state, menus: action.payload, startMenus: action.payload }),
10 | [action.SEARCH]: (state, action) => {
11 | return {
12 | ...state,
13 | menus: state.startMenus.filter(item => item.text.toLowerCase().includes(action.payload.toLowerCase()))}
14 | },
15 | [action.SELECT]: (state, action) => ({ ...state, activeMenu: action.payload }),
16 | [action.TOGGLE]: (state, action) => ({ ...state, open: !state.open })
17 | }
18 |
19 | export default handleActions(handlers, initialState)
20 |
--------------------------------------------------------------------------------
/src/redux-flow/stores/configure-store.development.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import { applyMiddleware, createStore } from 'redux'
4 | import { DEV_TOOLS } from 'src/constants'
5 | import globalReducers from 'reducers/root-reducers'
6 | import promise from 'redux-promise'
7 | import multi from 'redux-multi'
8 | import thunk from 'redux-thunk'
9 | import logger from 'redux-logger'
10 |
11 | function configureStore () {
12 | const middlewares = [
13 | thunk,
14 | multi,
15 | promise,
16 | logger
17 | ]
18 |
19 | const store = applyMiddleware(...middlewares)(createStore)(globalReducers, DEV_TOOLS)
20 |
21 | if (module.hot) {
22 | module.hot.accept('reducers/root-reducers', () => {
23 | store.replaceReducer(require('reducers/root-reducers').default)
24 | })
25 | }
26 |
27 | return store
28 | }
29 |
30 | export { configureStore }
31 |
--------------------------------------------------------------------------------
/src/redux-flow/stores/configure-store.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | module.exports = require(`./configure-store.${process.env.NODE_ENV}`)
4 |
--------------------------------------------------------------------------------
/src/redux-flow/stores/configure-store.production.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import { applyMiddleware, createStore } from 'redux'
4 | import globalReducers from 'reducers/root-reducers'
5 | import multi from 'redux-multi'
6 | import thunk from 'redux-thunk'
7 | import promise from 'redux-promise'
8 |
9 | export function configureStore () {
10 | return applyMiddleware(thunk, multi, promise)(createStore)(globalReducers)
11 | }
12 |
--------------------------------------------------------------------------------
/src/root-routes.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | const routes = {
4 | '/': 'Dashboard',
5 | '/dashboard': 'Dashboard',
6 | '/participantes': 'Participantes',
7 | '/participantes/novo': 'Cadastro de Participantes',
8 | '/participantes/editar': 'Edição de Participantes'
9 | }
10 |
11 | export default routes
12 |
--------------------------------------------------------------------------------
/src/routes.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import React from 'react'
4 | import {
5 | BrowserRouter as Router,
6 | Switch,
7 | Route,
8 | Redirect
9 | } from 'react-router-dom'
10 |
11 | import App from 'containers/app'
12 | import Participants from 'containers/participants'
13 | import Dashboard from 'containers/dashboard'
14 | import Login from 'containers/login'
15 |
16 | export default props => (
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | )
29 |
--------------------------------------------------------------------------------
/src/template.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | <%= htmlWebpackPlugin.options.title %>
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/utils/active-route/active-route.test.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import { expect } from 'chai'
4 | import activeRoute from './index'
5 |
6 | test('activeRoute should be a function', () => {
7 | expect(activeRoute).to.be.a('function')
8 | })
9 |
10 | test("activeRoute('/path') should return 'path'", () => {
11 | expect(activeRoute('/path')).to.be.equal('path')
12 | })
13 |
14 | test("activeRoute('path') should return 'path'", () => {
15 | expect(activeRoute('path')).to.be.equal('path')
16 | })
17 |
18 | test("activeRoute('/path/child') should return 'path/child'", () => {
19 | expect(activeRoute('/path/child')).to.be.equal('path/child')
20 | })
21 |
22 | test("activeRoute('/path/child/2') should return 'path/child'", () => {
23 | expect(activeRoute('/path/child/2')).to.be.equal('path/child')
24 | })
25 |
26 | test('activeRoute(2) should throw an error', () => {
27 | const result = 'route should be a string'
28 |
29 | try {
30 | activeRoute(2)
31 | } catch (e) {
32 | expect(e.message).to.be.deep.equal(result)
33 | }
34 | })
35 |
36 | test("activeRoute() should return ('/')", () => {
37 | expect(activeRoute()).to.be.equal('/')
38 | })
39 |
--------------------------------------------------------------------------------
/src/utils/active-route/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | const hasBarOnFirst = route => route.length > 1 && route.charAt(0) === '/'
4 | const hasChild = route => route.length > 1 && route.split('/').length > 1
5 | const isString = route => typeof route === 'string'
6 |
7 | const activeRoute = (route = '/') => {
8 | if (!isString(route)) {
9 | throw new TypeError('route should be a string')
10 | }
11 |
12 | route = hasBarOnFirst(route) ? route.substr(1) : route
13 |
14 | if (hasChild(route) && route.split('/').length >= 3) {
15 | route = `${route.split('/')[0]}/${route.split('/')[1]}`
16 | }
17 |
18 | return route
19 | }
20 |
21 | export default activeRoute
22 |
--------------------------------------------------------------------------------
/src/utils/auth.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | /**
4 | * Save token on localStorage
5 | * @param token
6 | */
7 | export const setToken = token => {
8 | if (!window.localStorage) {
9 | throw new Error('No storage support!')
10 | }
11 |
12 | window.localStorage.setItem('token', token)
13 | }
14 |
15 | /**
16 | * Return token
17 | */
18 | export const getToken = () => window.localStorage.getItem('token') || false
19 |
20 | /**
21 | * Remove token
22 | */
23 | export const removeToken = () => window.localStorage.removeItem('token')
24 |
--------------------------------------------------------------------------------
/src/utils/pagination/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | const centerRule = ({ total, activePage }) => (
4 | activePage - 1 <= 0
5 | ? 1 : activePage === total
6 | ? activePage - 2 : activePage - 1
7 | )
8 |
9 | const isNumber = value => typeof value === 'number'
10 |
11 | const pagination = ({ total = 1, activePage = 1 } = {}) => {
12 | if (!isNumber(total)) {
13 | throw new TypeError('total should be a number')
14 | }
15 |
16 | if (!isNumber(activePage)) {
17 | throw new TypeError('activePage should be a number')
18 | }
19 |
20 | if (total <= 5) {
21 | return Array.from({ length: total }, (_, i) => i + 1)
22 | }
23 |
24 | const visiblePages = 3
25 |
26 | let pages = [
27 | 1,
28 | ...Array.from({ length: visiblePages }, (_, i) => i + centerRule({ total, activePage })),
29 | total
30 | ]
31 |
32 | pages = pages.filter((page, index, array) => array.indexOf(page) === index)
33 |
34 | let firstPage = pages[ 0 ]
35 | let secondPage = pages[ 1 ]
36 |
37 | if (secondPage === (firstPage + 2)) {
38 | pages = [
39 | firstPage,
40 | firstPage + 1,
41 | ...pages.slice(1)
42 | ]
43 | }
44 |
45 | firstPage = pages[ 0 ]
46 | secondPage = pages[ 1 ]
47 |
48 | if (secondPage > (firstPage + 2)) {
49 | pages = [
50 | firstPage,
51 | '...',
52 | ...pages.slice(1)
53 | ]
54 | }
55 |
56 | let penultimatePage = pages[ pages.length - 2 ]
57 | let lastPage = pages[ pages.length - 1 ]
58 |
59 | if (penultimatePage === (lastPage - 2)) {
60 | pages = [
61 | ...pages.slice(0, -1),
62 | lastPage - 1,
63 | lastPage
64 | ]
65 | }
66 |
67 | penultimatePage = pages[ pages.length - 2 ]
68 | lastPage = pages[ pages.length - 1 ]
69 |
70 | if (penultimatePage < (lastPage - 2)) {
71 | pages = [
72 | ...pages.slice(0, -1),
73 | '...',
74 | lastPage
75 | ]
76 | }
77 |
78 | return pages
79 | }
80 |
81 | export default pagination
82 |
--------------------------------------------------------------------------------
/src/utils/pagination/pagination.test.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import { expect } from 'chai'
4 | import pagination from './index'
5 |
6 | test('pagination should be a function', () => {
7 | expect(pagination).to.be.a('function')
8 | })
9 |
10 | test('pagination({ total: 1, activePage: 1 }) should return [1]', () => {
11 | const params = { total: 1, activePage: 1 }
12 | const result = [ 1 ]
13 | expect(pagination(params)).to.be.deep.equal(result)
14 | })
15 |
16 | test('pagination({ total: 2, activePage: 1 }) should return [1, 2]', () => {
17 | const params = { total: 2, activePage: 1 }
18 | const result = [ 1, 2 ]
19 | expect(pagination(params)).to.be.deep.equal(result)
20 | })
21 |
22 | test('pagination({ total: 5, activePage: 1 }) should return [1, 2, 3, 4, 5]', () => {
23 | const params = { total: 5, activePage: 1 }
24 | const result = [ 1, 2, 3, 4, 5 ]
25 | expect(pagination(params)).to.be.deep.equal(result)
26 | })
27 |
28 | test('pagination({ total: 6, activePage: 1 }) should return [1, 2, 3, "...", 6]', () => {
29 | const params = { total: 6, activePage: 1 }
30 | const result = [ 1, 2, 3, '...', 6 ]
31 | expect(pagination(params)).to.be.deep.equal(result)
32 | })
33 |
34 | test('pagination({ total: 6, activePage: 2 }) should return [1, 2, 3, "...", 6]', () => {
35 | const params = { total: 6, activePage: 2 }
36 | const result = [ 1, 2, 3, '...', 6 ]
37 | expect(pagination(params)).to.be.deep.equal(result)
38 | })
39 |
40 | test('pagination({ total: 6, activePage: 3 }) should return [1, 2, 3, 4, 5, 6]', () => {
41 | const params = { total: 6, activePage: 3 }
42 | const result = [ 1, 2, 3, 4, 5, 6 ]
43 | expect(pagination(params)).to.be.deep.equal(result)
44 | })
45 |
46 | test('pagination({ total: 6, activePage: 4 }) should return [1, 2, 3, 4, 5, 6]', () => {
47 | const params = { total: 6, activePage: 4 }
48 | const result = [ 1, 2, 3, 4, 5, 6 ]
49 | expect(pagination(params)).to.be.deep.equal(result)
50 | })
51 |
52 | test('pagination({ total: 6, activePage: 5 }) should return [1, "...", 4, 5, 6]', () => {
53 | const params = { total: 6, activePage: 5 }
54 | const result = [ 1, '...', 4, 5, 6 ]
55 | expect(pagination(params)).to.be.deep.equal(result)
56 | })
57 |
58 | test('pagination({ total: 6, activePage: 6 }) should return [1, "...", 4, 5, 6]', () => {
59 | const params = { total: 6, activePage: 6 }
60 | const result = [ 1, '...', 4, 5, 6 ]
61 | expect(pagination(params)).to.be.deep.equal(result)
62 | })
63 |
64 | test('pagination({ total: 7, activePage: 1 }) should return [1, 2, 3, "...", 7]', () => {
65 | const params = { total: 7, activePage: 1 }
66 | const result = [ 1, 2, 3, '...', 7 ]
67 | expect(pagination(params)).to.be.deep.equal(result)
68 | })
69 |
70 | test('pagination({ total: 7, activePage: 3 }) should return [1, 2, 3, 4, "...", 7]', () => {
71 | const params = { total: 7, activePage: 3 }
72 | const result = [ 1, 2, 3, 4, '...', 7 ]
73 | expect(pagination(params)).to.be.deep.equal(result)
74 | })
75 |
76 | test('pagination({ total: 7, activePage: 4 }) should return [1, 2, 3, 4, 5, 6, 7]', () => {
77 | const params = { total: 7, activePage: 4 }
78 | const result = [ 1, 2, 3, 4, 5, 6, 7 ]
79 | expect(pagination(params)).to.be.deep.equal(result)
80 | })
81 |
82 | test('pagination({ total: 7, activePage: 5 }) should return [1, "...", 4, 5, 6, 7]', () => {
83 | const params = { total: 7, activePage: 5 }
84 | const result = [ 1, '...', 4, 5, 6, 7 ]
85 | expect(pagination(params)).to.be.deep.equal(result)
86 | })
87 |
88 | test('pagination({ total: 7, activePage: 6 }) should return [1, "...", 5, 6, 7]', () => {
89 | const params = { total: 7, activePage: 6 }
90 | const result = [ 1, '...', 5, 6, 7 ]
91 | expect(pagination(params)).to.be.deep.equal(result)
92 | })
93 |
94 | test('pagination({ total: 7, activePage: 7 }) should return [1, "...", 5, 6, 7]', () => {
95 | const params = { total: 7, activePage: 7 }
96 | const result = [ 1, '...', 5, 6, 7 ]
97 | expect(pagination(params)).to.be.deep.equal(result)
98 | })
99 |
100 | test('pagination({ total: 15, activePage: 8 }) should return [1, "...", 7, 8, 9, "...", 15]', () => {
101 | const params = { total: 15, activePage: 8 }
102 | const result = [ 1, '...', 7, 8, 9, '...', 15 ]
103 | expect(pagination(params)).to.be.deep.equal(result)
104 | })
105 |
106 | test('pagination({ total: 15 }) should return [1, 2, 3, "...", 15]', () => {
107 | const params = { total: 15 }
108 | const result = [ 1, 2, 3, '...', 15 ]
109 | expect(pagination(params)).to.be.deep.equal(result)
110 | })
111 |
112 | test('pagination({}) should return [1]', () => {
113 | const params = {}
114 | const result = [ 1 ]
115 | expect(pagination(params)).to.be.deep.equal(result)
116 | })
117 |
118 | test('pagination() should return [1]', () => {
119 | const result = [ 1 ]
120 | expect(pagination()).to.be.deep.equal(result)
121 | })
122 |
123 | test('pagination({ total: "abc", activePage: 1 }) should throw an error', () => {
124 | const params = { total: 'abc', activePage: 1 }
125 | const result = 'total should be a number'
126 |
127 | try {
128 | pagination(params)
129 | } catch (e) {
130 | expect(e.message).to.be.deep.equal(result)
131 | }
132 | })
133 |
134 | test('pagination({ total: 10, activePage: "1a" }) should throw an error', () => {
135 | const params = { total: 10, activePage: '1a' }
136 | const result = 'activePage should be a number'
137 |
138 | try {
139 | pagination(params)
140 | } catch (e) {
141 | expect(e.message).to.be.deep.equal(result)
142 | }
143 | })
144 |
--------------------------------------------------------------------------------
/src/utils/particles-config.json:
--------------------------------------------------------------------------------
1 | {
2 | "particles": {
3 | "number": {
4 | "value": 80,
5 | "density": {
6 | "enable": true,
7 | "value_area": 800
8 | }
9 | },
10 | "color": {
11 | "value": "#ffffff"
12 | },
13 | "shape": {
14 | "type": "circle",
15 | "stroke": {
16 | "width": 0,
17 | "color": "#000000"
18 | },
19 | "polygon": {
20 | "nb_sides": 5
21 | },
22 | "image": {
23 | "src": "img/github.svg",
24 | "width": 100,
25 | "height": 100
26 | }
27 | },
28 | "opacity": {
29 | "value": 0.5,
30 | "random": false,
31 | "anim": {
32 | "enable": false,
33 | "speed": 1,
34 | "opacity_min": 0.1,
35 | "sync": false
36 | }
37 | },
38 | "size": {
39 | "value": 3,
40 | "random": true,
41 | "anim": {
42 | "enable": false,
43 | "speed": 40,
44 | "size_min": 0.1,
45 | "sync": false
46 | }
47 | },
48 | "line_linked": {
49 | "enable": true,
50 | "distance": 150,
51 | "color": "#ffffff",
52 | "opacity": 0.4,
53 | "width": 1
54 | },
55 | "move": {
56 | "enable": true,
57 | "speed": 2,
58 | "direction": "none",
59 | "random": false,
60 | "straight": false,
61 | "out_mode": "out",
62 | "bounce": false,
63 | "attract": {
64 | "enable": false,
65 | "rotateX": 600,
66 | "rotateY": 1200
67 | }
68 | }
69 | },
70 | "interactivity": {
71 | "detect_on": "canvas",
72 | "events": {
73 | "onhover": {
74 | "enable": true,
75 | "mode": "grab"
76 | },
77 | "onclick": {
78 | "enable": true,
79 | "mode": "remove"
80 | },
81 | "resize": true
82 | },
83 | "modes": {
84 | "grab": {
85 | "distance": 170.53621458328246,
86 | "line_linked": {
87 | "opacity": 0.3455027064378674
88 | }
89 | },
90 | "bubble": {
91 | "distance": 400,
92 | "size": 40,
93 | "duration": 2,
94 | "opacity": 8,
95 | "speed": 3
96 | },
97 | "repulse": {
98 | "distance": 191.80819180819182,
99 | "duration": 0.4
100 | },
101 | "push": {
102 | "particles_nb": 4
103 | },
104 | "remove": {
105 | "particles_nb": 2
106 | }
107 | }
108 | },
109 | "retina_detect": true
110 | }
--------------------------------------------------------------------------------
/src/utils/validators.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | export const required = value => (value ? undefined : 'O campo :name: é obrigatório')
4 | export const number = value => value && isNaN(Number(value)) ? 'O campo :name: precisa ser numérico' : undefined
5 | export const minValue = min => value => value && value < min ? `:name: deve ser maior que ${min}` : undefined
6 | export const email = value => value && !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(value) ? 'O campo :name: é inválido' : undefined
7 |
--------------------------------------------------------------------------------
/src/utils/ws-client/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import { URL_API } from 'src/constants'
4 | import axios from 'axios'
5 |
6 | export const request = ({ method, url = URL_API, ...options }) => {
7 | return axios({
8 | method: method.toLowerCase(),
9 | url,
10 | ...options
11 | })
12 | }
13 |
--------------------------------------------------------------------------------
/storybook/config.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | import { configure } from '@kadira/storybook'
4 | import 'dist/core/style.css'
5 |
6 | const req = require.context('../src/components', true, /\.story\.js$/)
7 |
8 | function loadStories () {
9 | req.keys().forEach(filename => req(filename))
10 | }
11 |
12 | configure(loadStories, module)
13 |
--------------------------------------------------------------------------------
/storybook/webpack.config.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | module.exports = require('../webpack/storybook.config')
4 |
--------------------------------------------------------------------------------
/webpack/common.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | const { join } = require('path')
4 |
5 | const paths = {
6 | root: join(__dirname, '..'),
7 | modules: join(__dirname, '..', 'node_modules'),
8 | components: join(__dirname, '..', 'src', 'components'),
9 | containers: join(__dirname, '..', 'src', 'containers'),
10 | src: join(__dirname, '..', 'src'),
11 | docs: join(__dirname, '..', 'docs'),
12 | dist: join(__dirname, '..', 'src', 'dist'),
13 | img: join(__dirname, '..', 'public', 'img'),
14 | reduxFlow: join(__dirname, '..', 'src', 'redux-flow')
15 | }
16 |
17 | module.exports = {
18 | paths,
19 |
20 | entry: {
21 | main: join(paths.src, 'index'),
22 | vendor: ['react', 'react-dom', 'react-router-dom']
23 | },
24 |
25 | output: {
26 | path: paths.docs,
27 | filename: '[name]-[hash].js'
28 | },
29 |
30 | uglifyJsPluginConfig: {
31 | output: {
32 | comments: false
33 | },
34 | compress: {
35 | conditionals: true,
36 | warnings: false,
37 | dead_code: true,
38 | unused: true,
39 | evoluate: true,
40 | if_return: true,
41 | join_vars: true
42 | }
43 | },
44 |
45 | htmlPluginConfig: {
46 | title: 'Starter Kit React',
47 | template: join(paths.src, 'template.html')
48 | },
49 |
50 | standardPreLoader: {
51 | enforce: 'pre',
52 | test: /\.js$/,
53 | include: paths.src,
54 | use: {
55 | loader: 'standard-loader',
56 | options: {
57 | parser: 'babel-eslint'
58 | }
59 | }
60 | },
61 |
62 | jsLoader: {
63 | test: /\.js$/,
64 | include: paths.src,
65 | use: {
66 | loader: 'babel-loader',
67 | options: {
68 | presets: [ [
69 | 'env', { modules: false } ], 'stage-0', 'react' ],
70 | plugins: [
71 | 'react-hot-loader/babel',
72 | [ 'transform-runtime', {
73 | helpers: false,
74 | polyfill: false,
75 | regenerator: true
76 | } ]
77 | ]
78 | }
79 | }
80 | },
81 |
82 | cssLoader: {
83 | rules: [
84 | {
85 | test: /\.(css|styl)$/,
86 | include: [ paths.components, paths.containers ],
87 | use: [
88 | 'style-loader',
89 | {
90 | loader: 'css-loader',
91 | options: { modules: true, localIdentName: '[path][name]__[local]--[hash:base64:5]' }
92 | },
93 | {
94 | loader: 'postcss-loader',
95 | options: { sourceMap: true }
96 | },
97 | 'stylus-loader'
98 | ]
99 | },
100 | {
101 | test: /\.css$/,
102 | include: [ paths.dist, paths.modules ],
103 | use: [ 'style-loader', 'css-loader' ]
104 | }
105 | ]
106 | },
107 |
108 | fileLoader: {
109 | test: /\.(ico|jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|txt)(\?.*)?$/,
110 | include: [ paths.src, paths.modules ],
111 | use: {
112 | loader: 'file-loader',
113 | options: {
114 | name: 'media/[hash:12].[ext]'
115 | }
116 | }
117 | },
118 |
119 | resolve: {
120 | extensions: [ '.js', '.json', '.styl', '.css' ],
121 | alias: {
122 | src: paths.src,
123 | components: join(paths.components),
124 | utils: join(paths.src, 'utils'),
125 | containers: join(paths.containers),
126 | dist: join(paths.src, 'dist'),
127 | reducers: join(paths.reduxFlow, 'reducers'),
128 | stores: join(paths.reduxFlow, 'stores'),
129 | css: join(paths.dist, 'css'),
130 | img: join(paths.img, 'img'),
131 | modules: join(paths.modules, 'modules')
132 | }
133 | }
134 | }
135 |
--------------------------------------------------------------------------------
/webpack/dev.config.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | const webpack = require('webpack')
4 | const common = require('./common')
5 |
6 | const HtmlPlugin = require('html-webpack-plugin')
7 | const ExtractTextPlugin = require('extract-text-webpack-plugin')
8 | const DashboardPlugin = require('webpack-dashboard/plugin')
9 |
10 | process.noDeprecation = true
11 |
12 | module.exports = {
13 | devtool: 'source-map',
14 |
15 | entry: [
16 | 'react-hot-loader/patch',
17 | 'webpack-dev-server/client?http://localhost:3000',
18 | 'webpack/hot/only-dev-server',
19 | 'babel-polyfill',
20 | common.entry.main
21 | ],
22 |
23 | output: Object.assign({}, common.output, {
24 | filename: '[name].js',
25 | publicPath: ''
26 | }),
27 |
28 | plugins: [
29 | new webpack.HotModuleReplacementPlugin(),
30 | new ExtractTextPlugin('[name]-[hash].css'),
31 | new DashboardPlugin(),
32 | new webpack.DefinePlugin({
33 | 'process.env.NODE_ENV': JSON.stringify('development')
34 | }),
35 | new HtmlPlugin(common.htmlPluginConfig)
36 | ],
37 |
38 | module: {
39 | rules: [
40 | common.standardPreLoader,
41 | common.jsLoader,
42 | common.cssLoader,
43 | common.fileLoader
44 | ]
45 | },
46 |
47 | resolve: common.resolve
48 | }
49 |
--------------------------------------------------------------------------------
/webpack/prod.config.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | const { join } = require('path')
4 | const webpack = require('webpack')
5 | const common = require('./common')
6 |
7 | const HtmlPlugin = require('html-webpack-plugin')
8 | const ExtractTextPlugin = require('extract-text-webpack-plugin')
9 | const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer')
10 | const CleanPlugin = require('clean-webpack-plugin')
11 |
12 | module.exports = {
13 | entry: [
14 | 'babel-polyfill',
15 | common.entry.main
16 | ],
17 |
18 | output: common.output,
19 |
20 | plugins: [
21 | new CleanPlugin(['docs'], {
22 | root: join(__dirname, '..')
23 | }),
24 | new ExtractTextPlugin('[name]-[hash].css'),
25 |
26 | new webpack.DefinePlugin({
27 | 'process.env.NODE_ENV': JSON.stringify('production')
28 | }),
29 |
30 | new webpack.optimize.UglifyJsPlugin(common.uglifyJsPluginConfig),
31 | new webpack.optimize.OccurrenceOrderPlugin(),
32 | new HtmlPlugin(common.htmlPluginConfig)
33 | ].concat(
34 | process.env.ANALYZER ? new BundleAnalyzerPlugin() : []
35 | ),
36 |
37 | module: {
38 | rules: [
39 | common.standardPreLoader,
40 | common.jsLoader,
41 | common.cssLoader,
42 | common.fileLoader
43 | ]
44 | },
45 |
46 | resolve: common.resolve
47 | }
48 |
--------------------------------------------------------------------------------
/webpack/storybook.config.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 |
3 | const common = require('./common')
4 | const webpackConfig = require('@kadira/storybook/dist/server/config/defaults/webpack.config.js')
5 |
6 | module.exports = (config, env) => {
7 | const newConfig = webpackConfig(config, env)
8 |
9 | const preLoaders = Object.assign({}, common.standardPreLoader, {
10 | use: undefined,
11 | loader: common.standardPreLoader.use.loader
12 | })
13 |
14 | newConfig.module.preLoaders = (newConfig.module.preLoaders || []).concat(preLoaders)
15 | newConfig.resolve = common.resolve
16 |
17 | return newConfig
18 | }
19 |
--------------------------------------------------------------------------------