diff --git a/package.json b/package.json
index 0b87cb7..616587b 100644
--- a/package.json
+++ b/package.json
@@ -15,6 +15,7 @@
"react-scripts": "4.0.0",
"redux": "^4.0.5",
"redux-logger": "^3.0.6",
+ "redux-persist": "^6.0.0",
"reselect": "^4.0.0",
"web-vitals": "^0.2.4"
},
diff --git a/src/components/collections-overview/collections-overview.component.jsx b/src/components/collections-overview/collections-overview.component.jsx
new file mode 100644
index 0000000..2e975fd
--- /dev/null
+++ b/src/components/collections-overview/collections-overview.component.jsx
@@ -0,0 +1,24 @@
+import React from 'react';
+import {connect} from 'react-redux';
+import { createStructuredSelector } from 'reselect';
+
+import { selectShopCollection } from '../../redux/shop/shop.selector'
+
+import CollectionPreview from '../../components/preview-collection/preview-collection-component';
+
+import './collections-overview.styles.scss';
+
+const collectionOverview = ({collections}) =>(
+
+ {collections.map(({id, ...othersProps})=>(
+
+ ))}
+
+
+)
+const mapStateToProps = createStructuredSelector ({
+ collections: selectShopCollection
+}
+)
+
+export default connect(mapStateToProps)(collectionOverview);
\ No newline at end of file
diff --git a/src/components/collections-overview/collections-overview.styles.scss b/src/components/collections-overview/collections-overview.styles.scss
new file mode 100644
index 0000000..ac9e5f8
--- /dev/null
+++ b/src/components/collections-overview/collections-overview.styles.scss
@@ -0,0 +1,4 @@
+.collections-overview {
+ display: flex;
+ flex-direction: column;
+}
diff --git a/src/components/directory/directory.component.jsx b/src/components/directory/directory.component.jsx
index 575745b..2c86cb8 100644
--- a/src/components/directory/directory.component.jsx
+++ b/src/components/directory/directory.component.jsx
@@ -1,66 +1,23 @@
import React from 'react';
import MenuItem from '../menu-item/menu-items.component';
+import { connect } from 'react-redux';
+import { createStructuredSelector } from 'reselect';
+import { selectDirectorySections } from '../../redux/directory/directory.selector';
import './directory.styles.scss';
-class Directory extends React.Component {
- constructor(){
- super();
- this.state = {
- sections : [
- {
- title: 'hats',
- // imageUrl: 'https://i.ibb.co/cvpntL1/hats.png',
- imageUrl: 'images/hats.png', // local file in public/images/
- id: 1,
- linkUrl: 'shop/hats'
-
- },
- {
- title: 'jackets',
- // imageUrl: 'https://i.ibb.co/px2tCc3/jackets.png',
- imageUrl: 'images/jackets.png', // local file in public/images/
- id: 2,
- linkUrl: 'shop/jackets'
- },
- {
- title: 'sneakers',
- // imageUrl: 'https://i.ibb.co/0jqHpnp/sneakers.png',
- imageUrl: 'images/sneakers.png', // local file in public/images/
- id: 3,
- linkUrl: 'shop/sneakers'
- },
- {
- title: 'womens',
- // imageUrl: 'https://i.ibb.co/GCCdy8t/womens.png',
- imageUrl: 'images/womens.png', // local file in public/images/
- size: 'large',
- id: 4,
- linkUrl: 'shop/womens'
- },
- {
- title: 'mens',
- // imageUrl: 'https://i.ibb.co/R70vBrQ/men.png',
- imageUrl: 'images/men.png', // local file in public/images/
- size: 'large',
- id: 5,
- linkUrl: 'shop/mens'
- }
- ]
+const Directory = ( { sections } ) => (
+
+ {
+ sections.map(({id, ...otherSectionProps})=>(
+
+ ))
}
- }
- render(){
- return(
-
- {
- this.state.sections.map(({id, ...otherSectionProps})=>(
-
- ))
- }
-
- )
- }
+
+)
-}
+const mapStateToProps = createStructuredSelector ({
+ sections: selectDirectorySections
+})
-export default Directory;
\ No newline at end of file
+export default connect(mapStateToProps)(Directory);
\ No newline at end of file
diff --git a/src/index.js b/src/index.js
index 30843d5..9bd0e13 100644
--- a/src/index.js
+++ b/src/index.js
@@ -5,13 +5,16 @@ import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { Provider } from 'react-redux';
+import { PersistGate } from 'redux-persist/integration/react';
-import store from './redux/store';
+import {store, persistor} from './redux/store';
ReactDOM.render(
-
+
+
+
,
document.getElementById('root')
diff --git a/src/pages/shop/shop.component.jsx b/src/pages/shop/shop.component.jsx
index c1f44de..5ca438b 100644
--- a/src/pages/shop/shop.component.jsx
+++ b/src/pages/shop/shop.component.jsx
@@ -1,24 +1,13 @@
import React from 'react';
-import ShopData from './shop.data';
-import CollectionPreview from '../../components/preview-collection/preview-collection-component';
-class ShopPage extends React.Component {
- constructor(props){
- super(props);
- this.state = {
- collections:ShopData
- }
- }
- render(){
- const {collections} = this.state;
- return(
-
- {collections.map(({id, ...othersProps})=>(
-
- ))}
-
-
- )
- }
-}
+import CollectionOverview from '../../components/collections-overview/collections-overview.component'
+
+
+const ShopPage = ({collections}) => (
+
+
+
+)
+
+
export default ShopPage;
\ No newline at end of file
diff --git a/src/redux/directory/directory.reducer.js b/src/redux/directory/directory.reducer.js
new file mode 100644
index 0000000..2549519
--- /dev/null
+++ b/src/redux/directory/directory.reducer.js
@@ -0,0 +1,50 @@
+const INITIAL_STATE = {
+ sections : [
+ {
+ title: 'hats',
+ // imageUrl: 'https://i.ibb.co/cvpntL1/hats.png',
+ imageUrl: 'images/hats.png', // local file in public/images/
+ id: 1,
+ linkUrl: 'shop/hats'
+
+ },
+ {
+ title: 'jackets',
+ // imageUrl: 'https://i.ibb.co/px2tCc3/jackets.png',
+ imageUrl: 'images/jackets.png', // local file in public/images/
+ id: 2,
+ linkUrl: 'shop/jackets'
+ },
+ {
+ title: 'sneakers',
+ // imageUrl: 'https://i.ibb.co/0jqHpnp/sneakers.png',
+ imageUrl: 'images/sneakers.png', // local file in public/images/
+ id: 3,
+ linkUrl: 'shop/sneakers'
+ },
+ {
+ title: 'womens',
+ // imageUrl: 'https://i.ibb.co/GCCdy8t/womens.png',
+ imageUrl: 'images/womens.png', // local file in public/images/
+ size: 'large',
+ id: 4,
+ linkUrl: 'shop/womens'
+ },
+ {
+ title: 'mens',
+ // imageUrl: 'https://i.ibb.co/R70vBrQ/men.png',
+ imageUrl: 'images/men.png', // local file in public/images/
+ size: 'large',
+ id: 5,
+ linkUrl: 'shop/mens'
+ }
+ ]
+};
+
+export const directoryReducer = (state = INITIAL_STATE, action) => {
+ switch(action.type){
+ default:
+ return state
+ }
+
+}
diff --git a/src/redux/directory/directory.selector.js b/src/redux/directory/directory.selector.js
new file mode 100644
index 0000000..aa4f7da
--- /dev/null
+++ b/src/redux/directory/directory.selector.js
@@ -0,0 +1,8 @@
+import { createSelector } from 'reselect';
+
+const selectDirectory = state => state.directory;
+
+export const selectDirectorySections = createSelector (
+ [selectDirectory],
+ directory => directory.sections
+)
\ No newline at end of file
diff --git a/src/redux/root-reducer.js b/src/redux/root-reducer.js
index 7fe7bf6..7e5562e 100644
--- a/src/redux/root-reducer.js
+++ b/src/redux/root-reducer.js
@@ -1,9 +1,24 @@
import { combineReducers } from 'redux';
+import { persistReducer } from 'redux-persist'
import { userReducer } from './user/user.reducer';
import { cartReducer } from './cart/cart.reducer';
+import { directoryReducer } from './directory/directory.reducer';
+import { shopReducer } from './shop/shop.reducer';
+import storage from 'redux-persist/lib/storage'
-export default combineReducers({
+const persistConfig = {
+ key: 'root',
+ storage,
+ whitelist: ['cart']
+}
+
+const rootReducer = combineReducers({
user: userReducer,
- cart: cartReducer
-});
\ No newline at end of file
+ cart: cartReducer,
+ directory: directoryReducer,
+ shop: shopReducer
+});
+
+
+export default persistReducer(persistConfig, rootReducer);
\ No newline at end of file
diff --git a/src/pages/shop/shop.data.js b/src/redux/shop/shop.data.js
similarity index 100%
rename from src/pages/shop/shop.data.js
rename to src/redux/shop/shop.data.js
diff --git a/src/redux/shop/shop.reducer.js b/src/redux/shop/shop.reducer.js
new file mode 100644
index 0000000..d095b6b
--- /dev/null
+++ b/src/redux/shop/shop.reducer.js
@@ -0,0 +1,12 @@
+import ShopData from './shop.data'
+
+const INITIAL_STATE = {
+ collections: ShopData
+}
+
+export const shopReducer = (state=INITIAL_STATE, action) => {
+ switch(action.type){
+ default:
+ return state;
+ }
+};
\ No newline at end of file
diff --git a/src/redux/shop/shop.selector.js b/src/redux/shop/shop.selector.js
new file mode 100644
index 0000000..e11fbd7
--- /dev/null
+++ b/src/redux/shop/shop.selector.js
@@ -0,0 +1,8 @@
+import { createSelector } from 'reselect';
+
+const selectShop = state => state.shop;
+
+export const selectShopCollection = createSelector(
+ [selectShop],
+ shop=>shop.collections
+)
\ No newline at end of file
diff --git a/src/redux/store.js b/src/redux/store.js
index ad643ce..1f92577 100644
--- a/src/redux/store.js
+++ b/src/redux/store.js
@@ -1,10 +1,13 @@
import {createStore, applyMiddleware} from 'redux';
import logger from 'redux-logger';
+import { persistStore } from 'redux-persist'
import rootReducer from './root-reducer';
const middlewares = [logger];
-const store = createStore(rootReducer, applyMiddleware(...middlewares));
+export const store = createStore(rootReducer, applyMiddleware(...middlewares));
+
+export const persistor = persistStore(store);
export default store;
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index fa0f3cd..29bb695 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -10549,6 +10549,11 @@ redux-logger@^3.0.6:
dependencies:
deep-diff "^0.3.5"
+redux-persist@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/redux-persist/-/redux-persist-6.0.0.tgz#b4d2972f9859597c130d40d4b146fecdab51b3a8"
+ integrity sha512-71LLMbUq2r02ng2We9S215LtPu3fY0KgaGE0k8WRgl6RkqxtGfl7HUozz1Dftwsb0D/5mZ8dwAaPbtnzfvbEwQ==
+
redux@^4.0.5:
version "4.0.5"
resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f"