1 |
- {"ast":null,"code":"var _jsxFileName = \"/home/ilya/projects/NIX/homework/react-store/src/App.js\",\n _this = this;\n\nimport defaultLogo from \"./logo.svg\";\nimport \"./App.scss\";\nimport { Provider, connect } from \"react-redux\";\nimport { createStore, combineReducers, applyMiddleware } from \"redux\";\nimport thunk from \"redux-thunk\";\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\n\nconst jwtDecode = token => {\n try {\n let payload = JSON.parse(atob(token.split(\".\")[1]));\n return payload;\n } catch (e) {\n console.log(e);\n }\n};\n\nfunction cartReducer() {\n let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let {\n type,\n good,\n count = 1\n } = arguments.length > 1 ? arguments[1] : undefined;\n\n if (count <= 0) {\n type = \"CART_DELETE\";\n }\n\n if (type === \"CART_ADD\") {\n return { ...state,\n [good[\"_id\"]]: {\n good,\n count: good[\"_id\"] in state ? state[good._id].count + count : count\n }\n };\n }\n\n if (type === \"CART_CHANGE\") {\n return { ...state,\n [good[\"_id\"]]: {\n good,\n count: count\n }\n };\n }\n\n if (type === \"CART_DELETE\") {\n let {\n [good._id]: toRemove,\n ...newState\n } = state;\n return newState;\n }\n\n if (type === \"CART_CLEAR\") {\n return {};\n }\n\n return state;\n}\n\nfunction promiseReducer() {\n let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n let {\n type,\n name,\n status,\n payload,\n error\n } = arguments.length > 1 ? arguments[1] : undefined;\n\n if (type === \"PROMISE\") {\n return { ...state,\n [name]: {\n status,\n payload,\n error\n }\n };\n }\n\n return state;\n}\n\nfunction authReducer(state, _ref) {\n let {\n type,\n token\n } = _ref;\n\n if (state === undefined) {\n if (localStorage.authToken) {\n token = localStorage.authToken;\n type = \"AUTH_LOGIN\";\n state = {};\n }\n }\n\n if (type === \"AUTH_LOGIN\") {\n if (!token || !jwtDecode(token)) return {};\n localStorage.authToken = token;\n return { ...state,\n token: token,\n payload: jwtDecode(token)\n };\n }\n\n if (type === \"AUTH_LOGOUT\") {\n localStorage.removeItem(\"authToken\");\n return {};\n }\n\n return state || {};\n}\n\nconst getGQL = url => (query, variables) => fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(localStorage.authToken ? {\n Authorization: \"Bearer \" + localStorage.authToken\n } : {})\n },\n body: JSON.stringify({\n query,\n variables\n })\n}).then(res => res.json()).then(data => {\n if (data.errors) {\n throw new Error(JSON.stringify(data.errors));\n } else return Object.values(data.data)[0];\n});\n\nconst backendURL = \"http://shop-roles.asmer.fs.a-level.com.ua\";\nconst gql = getGQL(backendURL + \"/graphql\");\nconst store = createStore(combineReducers({\n auth: authReducer,\n promise: promiseReducer,\n cart: cartReducer\n}), applyMiddleware(thunk));\n\nconst actionPending = name => ({\n type: \"PROMISE\",\n name,\n status: \"PENDING\"\n});\n\nconst actionFulfilled = (name, payload) => ({\n type: \"PROMISE\",\n name,\n status: \"FULFILLED\",\n payload\n});\n\nconst actionRejected = (name, error) => ({\n type: \"PROMISE\",\n name,\n status: \"REJECTED\",\n error\n});\n\nconst actionPromise = (name, promise) => async dispatch => {\n dispatch(actionPending(name));\n\n try {\n let payload = await promise;\n dispatch(actionFulfilled(name, payload));\n return payload;\n } catch (error) {\n dispatch(actionRejected(name, error));\n }\n};\n\nconst actionRootCats = () => actionPromise(\"rootCats\", gql(`query {\n CategoryFind(query: \"[{\\\\\"parent\\\\\":null}]\"){\n _id name\n }\n }`));\n\nconst actionGoodById = _id => actionPromise(\"good\", gql(`query GoodById($q: String){\n GoodFindOne(query: $q){\n _id name price images{\n url\n }\n }\n }`, {\n q: JSON.stringify([{\n _id\n }])\n}));\n\nconst actionCatById = (_id //добавить подкатегории\n) => actionPromise(\"catById\", gql(`query catById($q: String){\n CategoryFindOne(query: $q){\n _id name goods {\n _id name price images {\n url\n }\n }\n }\n }`, {\n q: JSON.stringify([{\n _id\n }])\n}));\n\nconst actionAuthLogin = token => ({\n type: \"AUTH_LOGIN\",\n token: token\n});\n\nconst actionLogin = (login, password) => async dispatch => {\n const token = await dispatch(actionPromise(\"login\", gql(`query log($login:String,$password:String){\n login(login:$login,password:$password)\n }\n `, {\n login: login,\n password: password\n })));\n await dispatch(actionAuthLogin(token));\n window.location = \"#/\";\n};\n\nconst actionAuthLogout = () => ({\n type: \"AUTH_LOGOUT\"\n});\n\nconst actionRegister = (login, password) => async dispatch => {\n await dispatch(actionPromise(\"register\", gql(`mutation register($login:String,$password:String){\n UserUpsert(user:{login:$login,password:$password}){\n _id login\n }\n }`, {\n login: login,\n password: password\n })));\n};\n\nconst actionCartAdd = function (good) {\n let count = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n return {\n type: \"CART_ADD\",\n good,\n count\n };\n};\n\nconst actionCartChange = function (good) {\n let count = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n return {\n type: \"CART_CHANGE\",\n good,\n count\n };\n};\n\nconst actionCartDelete = good => ({\n type: \"CART_DELETE\",\n good\n});\n\nconst actionCartClear = () => ({\n type: \"CART_CLEAR\"\n});\n\nstore.subscribe(() => console.log(store.getState()));\nstore.dispatch(actionRootCats());\nconst defaultCategories = [{\n _id: \"5dc458985df9d670df48cc47\",\n name: \" Smartphones\"\n}, {\n _id: \"5dc4b2553f23b553bf354101\",\n name: \"Крупная бытовая техника\"\n}, {\n _id: \"5dcac1b56d09c45440d14cf8\",\n name: \" Макароны\"\n}, {\n _id: \"5dcac6cf6d09c45440d14cfd\",\n name: \"Drinks\"\n}, {\n _id: \"5dcacaeb6d09c45440d14d04\",\n name: \"Салаты\"\n}, {\n _id: \"61715b92ef4e1b3e3b67703c\",\n name: \"Приятный бонус\"\n}, {\n _id: \"61e725dcf9be102f49b2c6c4\",\n name: \"Товарчики\"\n}, {\n _id: \"5dc94bd00e36db246e3049ee\",\n name: \"Пицца\"\n}, {\n _id: \"5dcabeeb6d09c45440d14cf6\",\n name: \"Макароны\"\n}];\n\nconst Logo = _ref2 => {\n let {\n logo = defaultLogo\n } = _ref2;\n return /*#__PURE__*/_jsxDEV(\"img\", {\n src: logo,\n className: \"Logo\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 262,\n columnNumber: 42\n }, this);\n};\n\n_c = Logo;\n\nconst RootCategories = _ref3 => {\n let {\n categories = defaultCategories,\n handleClickOnItem\n } = _ref3;\n return /*#__PURE__*/_jsxDEV(\"ul\", {\n className: \"RootCategories\",\n children: categories.map(category => /*#__PURE__*/_jsxDEV(CategoryItem, {\n category: category,\n handleClick: handleClickOnItem\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 267,\n columnNumber: 13\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 265,\n columnNumber: 5\n }, this);\n};\n\n_c2 = RootCategories;\n\nconst GoodCard = function () {\n let {\n good: {\n name,\n images,\n price,\n _id\n }\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"GoodCard\",\n children: [/*#__PURE__*/_jsxDEV(\"img\", {\n src: `${backendURL}/${images ? images[0].url : \"\"}`,\n className: \"GoodImage\",\n alt: \"\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 274,\n columnNumber: 9\n }, _this), /*#__PURE__*/_jsxDEV(\"strong\", {\n children: \"Name : \"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 275,\n columnNumber: 9\n }, _this), \" \", name, /*#__PURE__*/_jsxDEV(\"strong\", {\n children: \"Price : \"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 276,\n columnNumber: 9\n }, _this), \" \", price]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 273,\n columnNumber: 5\n }, _this);\n};\n\n_c3 = GoodCard;\n\nconst GoodsList = function () {\n let {\n goods\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"GoodList\",\n children: goods.map(good => /*#__PURE__*/_jsxDEV(GoodCard, {\n good: good\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 283,\n columnNumber: 13\n }, _this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 281,\n columnNumber: 5\n }, _this);\n};\n\n_c4 = GoodsList;\nconst CGoodsList = connect(state => {\n var _state$promise, _state$promise$catByI, _state$promise$catByI2;\n\n return {\n goods: ((_state$promise = state.promise) === null || _state$promise === void 0 ? void 0 : (_state$promise$catByI = _state$promise.catById) === null || _state$promise$catByI === void 0 ? void 0 : (_state$promise$catByI2 = _state$promise$catByI.payload) === null || _state$promise$catByI2 === void 0 ? void 0 : _state$promise$catByI2.goods) || []\n };\n})(GoodsList);\n_c5 = CGoodsList;\nconst CRootCategories = connect(state => {\n var _state$promise2, _state$promise2$rootC;\n\n return {\n categories: ((_state$promise2 = state.promise) === null || _state$promise2 === void 0 ? void 0 : (_state$promise2$rootC = _state$promise2.rootCats) === null || _state$promise2$rootC === void 0 ? void 0 : _state$promise2$rootC.payload) || []\n };\n}, {\n handleClickOnItem: _id => actionCatById(_id)\n})(RootCategories);\n_c6 = CRootCategories;\nconst CLogout = connect(state => {\n var _state$auth, _state$auth$payload, _state$auth$payload$s;\n\n return {\n children: `Logout (${((_state$auth = state.auth) === null || _state$auth === void 0 ? void 0 : (_state$auth$payload = _state$auth.payload) === null || _state$auth$payload === void 0 ? void 0 : (_state$auth$payload$s = _state$auth$payload.sub) === null || _state$auth$payload$s === void 0 ? void 0 : _state$auth$payload$s.login) || \"anon\"})`\n };\n}, {\n onClick: actionAuthLogout\n})(\"button\");\n_c7 = CLogout;\n\nconst CategoryItem = _ref4 => {\n let {\n category: {\n _id,\n name\n } = {},\n handleClick\n } = _ref4;\n return /*#__PURE__*/_jsxDEV(\"li\", {\n className: \"CategoryItem\",\n onClick: () => handleClick(_id),\n children: name\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 298,\n columnNumber: 5\n }, this);\n};\n\n_c8 = CategoryItem;\n\nconst Header = _ref5 => {\n let {\n children\n } = _ref5;\n return /*#__PURE__*/_jsxDEV(\"header\", {\n children: [/*#__PURE__*/_jsxDEV(CLogout, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 305,\n columnNumber: 9\n }, this), children]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 304,\n columnNumber: 5\n }, this);\n};\n\n_c9 = Header;\n\nconst Aside = _ref6 => {\n let {\n children\n } = _ref6;\n return /*#__PURE__*/_jsxDEV(\"aside\", {\n className: \"col-4\",\n children: [/*#__PURE__*/_jsxDEV(CRootCategories, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 311,\n columnNumber: 9\n }, this), children]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 310,\n columnNumber: 5\n }, this);\n};\n\n_c10 = Aside;\n\nconst Content = _ref7 => {\n let {\n children\n } = _ref7;\n return /*#__PURE__*/_jsxDEV(\"section\", {\n className: \"Content col-8\",\n children: children\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 316,\n columnNumber: 35\n }, this);\n};\n\n_c11 = Content;\n\nconst Main = _ref8 => {\n let {\n children\n } = _ref8;\n return /*#__PURE__*/_jsxDEV(\"main\", {\n className: \"row\",\n children: [/*#__PURE__*/_jsxDEV(Aside, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 320,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(Content, {\n children: /*#__PURE__*/_jsxDEV(CGoodsList, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 322,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 321,\n columnNumber: 9\n }, this), children]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 319,\n columnNumber: 5\n }, this);\n};\n\n_c12 = Main;\n\nconst Footer = _ref9 => {\n let {\n children\n } = _ref9;\n return /*#__PURE__*/_jsxDEV(\"footer\", {\n className: \"row\",\n children: children\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 328,\n columnNumber: 34\n }, this);\n};\n\n_c13 = Footer;\n\nfunction App() {\n return /*#__PURE__*/_jsxDEV(Provider, {\n store: store,\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"App container\",\n children: [/*#__PURE__*/_jsxDEV(Header, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 334,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(Main, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 335,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(Footer, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 336,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 333,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 332,\n columnNumber: 9\n }, this);\n}\n\n_c14 = App;\nstore.dispatch(actionCatById(\"5dc458985df9d670df48cc47\"));\nexport default App;\n\nvar _c, _c2, _c3, _c4, _c5, _c6, _c7, _c8, _c9, _c10, _c11, _c12, _c13, _c14;\n\n$RefreshReg$(_c, \"Logo\");\n$RefreshReg$(_c2, \"RootCategories\");\n$RefreshReg$(_c3, \"GoodCard\");\n$RefreshReg$(_c4, \"GoodsList\");\n$RefreshReg$(_c5, \"CGoodsList\");\n$RefreshReg$(_c6, \"CRootCategories\");\n$RefreshReg$(_c7, \"CLogout\");\n$RefreshReg$(_c8, \"CategoryItem\");\n$RefreshReg$(_c9, \"Header\");\n$RefreshReg$(_c10, \"Aside\");\n$RefreshReg$(_c11, \"Content\");\n$RefreshReg$(_c12, \"Main\");\n$RefreshReg$(_c13, \"Footer\");\n$RefreshReg$(_c14, \"App\");","map":{"version":3,"sources":["/home/ilya/projects/NIX/homework/react-store/src/App.js"],"names":["defaultLogo","Provider","connect","createStore","combineReducers","applyMiddleware","thunk","jwtDecode","token","payload","JSON","parse","atob","split","e","console","log","cartReducer","state","type","good","count","_id","toRemove","newState","promiseReducer","name","status","error","authReducer","undefined","localStorage","authToken","removeItem","getGQL","url","query","variables","fetch","method","headers","Authorization","body","stringify","then","res","json","data","errors","Error","Object","values","backendURL","gql","store","auth","promise","cart","actionPending","actionFulfilled","actionRejected","actionPromise","dispatch","actionRootCats","actionGoodById","q","actionCatById","actionAuthLogin","actionLogin","login","password","window","location","actionAuthLogout","actionRegister","actionCartAdd","actionCartChange","actionCartDelete","actionCartClear","subscribe","getState","defaultCategories","Logo","logo","RootCategories","categories","handleClickOnItem","map","category","GoodCard","images","price","GoodsList","goods","CGoodsList","catById","CRootCategories","rootCats","CLogout","children","sub","onClick","CategoryItem","handleClick","Header","Aside","Content","Main","Footer","App"],"mappings":"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","sourcesContent":["import defaultLogo from \"./logo.svg\";\nimport \"./App.scss\";\n\nimport { Provider, connect } from \"react-redux\";\nimport { createStore, combineReducers, applyMiddleware } from \"redux\";\nimport thunk from \"redux-thunk\";\n\nconst jwtDecode = (token) => {\n try {\n let payload = JSON.parse(atob(token.split(\".\")[1]));\n\n return payload;\n } catch (e) {\n console.log(e);\n }\n};\n\nfunction cartReducer(state = {}, { type, good, count = 1 }) {\n if (count <= 0) {\n type = \"CART_DELETE\";\n }\n\n if (type === \"CART_ADD\") {\n return {\n ...state,\n [good[\"_id\"]]: {\n good,\n count: good[\"_id\"] in state ? state[good._id].count + count : count,\n },\n };\n }\n if (type === \"CART_CHANGE\") {\n return {\n ...state,\n [good[\"_id\"]]: {\n good,\n count: count,\n },\n };\n }\n if (type === \"CART_DELETE\") {\n let { [good._id]: toRemove, ...newState } = state;\n return newState;\n }\n if (type === \"CART_CLEAR\") {\n return {};\n }\n return state;\n}\n\nfunction promiseReducer(state = {}, { type, name, status, payload, error }) {\n if (type === \"PROMISE\") {\n return {\n ...state,\n [name]: { status, payload, error },\n };\n }\n return state;\n}\n\nfunction authReducer(state, { type, token }) {\n if (state === undefined) {\n if (localStorage.authToken) {\n token = localStorage.authToken;\n type = \"AUTH_LOGIN\";\n state = {};\n }\n }\n\n if (type === \"AUTH_LOGIN\") {\n if (!token || !jwtDecode(token)) return {};\n localStorage.authToken = token;\n return {\n ...state,\n token: token,\n payload: jwtDecode(token),\n };\n }\n\n if (type === \"AUTH_LOGOUT\") {\n localStorage.removeItem(\"authToken\");\n return {};\n }\n return state || {};\n}\n\nconst getGQL = (url) => (query, variables) =>\n fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(localStorage.authToken ? { Authorization: \"Bearer \" + localStorage.authToken } : {}),\n },\n body: JSON.stringify({ query, variables }),\n })\n .then((res) => res.json())\n .then((data) => {\n if (data.errors) {\n throw new Error(JSON.stringify(data.errors));\n } else return Object.values(data.data)[0];\n });\n\nconst backendURL = \"http://shop-roles.asmer.fs.a-level.com.ua\";\n\nconst gql = getGQL(backendURL + \"/graphql\");\n\nconst store = createStore(\n combineReducers({ auth: authReducer, promise: promiseReducer, cart: cartReducer }),\n applyMiddleware(thunk)\n);\n\nconst actionPending = (name) => ({ type: \"PROMISE\", name, status: \"PENDING\" });\nconst actionFulfilled = (name, payload) => ({ type: \"PROMISE\", name, status: \"FULFILLED\", payload });\nconst actionRejected = (name, error) => ({ type: \"PROMISE\", name, status: \"REJECTED\", error });\nconst actionPromise = (name, promise) => async (dispatch) => {\n dispatch(actionPending(name));\n try {\n let payload = await promise;\n dispatch(actionFulfilled(name, payload));\n return payload;\n } catch (error) {\n dispatch(actionRejected(name, error));\n }\n};\n\nconst actionRootCats = () =>\n actionPromise(\n \"rootCats\",\n gql(`query {\n CategoryFind(query: \"[{\\\\\"parent\\\\\":null}]\"){\n _id name\n }\n }`)\n );\n\nconst actionGoodById = (_id) =>\n actionPromise(\n \"good\",\n gql(\n `query GoodById($q: String){\n GoodFindOne(query: $q){\n _id name price images{\n url\n }\n }\n }`,\n { q: JSON.stringify([{ _id }]) }\n )\n );\n\nconst actionCatById = (\n _id //добавить подкатегории\n) =>\n actionPromise(\n \"catById\",\n gql(\n `query catById($q: String){\n CategoryFindOne(query: $q){\n _id name goods {\n _id name price images {\n url\n }\n }\n }\n }`,\n { q: JSON.stringify([{ _id }]) }\n )\n );\n\nconst actionAuthLogin = (token) => ({\n type: \"AUTH_LOGIN\",\n token: token,\n});\n\nconst actionLogin = (login, password) => async (dispatch) => {\n const token = await dispatch(\n actionPromise(\n \"login\",\n gql(\n `query log($login:String,$password:String){\n login(login:$login,password:$password)\n }\n `,\n {\n login: login,\n password: password,\n }\n )\n )\n );\n await dispatch(actionAuthLogin(token));\n window.location = \"#/\";\n};\n\nconst actionAuthLogout = () => ({ type: \"AUTH_LOGOUT\" });\n\nconst actionRegister = (login, password) => async (dispatch) => {\n await dispatch(\n actionPromise(\n \"register\",\n gql(\n `mutation register($login:String,$password:String){\n UserUpsert(user:{login:$login,password:$password}){\n _id login\n }\n }`,\n {\n login: login,\n password: password,\n }\n )\n )\n );\n};\nconst actionCartAdd = (good, count = 1) => ({ type: \"CART_ADD\", good, count });\nconst actionCartChange = (good, count = 1) => ({ type: \"CART_CHANGE\", good, count });\nconst actionCartDelete = (good) => ({ type: \"CART_DELETE\", good });\nconst actionCartClear = () => ({ type: \"CART_CLEAR\" });\n\nstore.subscribe(() => console.log(store.getState()));\nstore.dispatch(actionRootCats());\n\nconst defaultCategories = [\n {\n _id: \"5dc458985df9d670df48cc47\",\n name: \" Smartphones\",\n },\n {\n _id: \"5dc4b2553f23b553bf354101\",\n name: \"Крупная бытовая техника\",\n },\n {\n _id: \"5dcac1b56d09c45440d14cf8\",\n name: \" Макароны\",\n },\n {\n _id: \"5dcac6cf6d09c45440d14cfd\",\n name: \"Drinks\",\n },\n {\n _id: \"5dcacaeb6d09c45440d14d04\",\n name: \"Салаты\",\n },\n {\n _id: \"61715b92ef4e1b3e3b67703c\",\n name: \"Приятный бонус\",\n },\n {\n _id: \"61e725dcf9be102f49b2c6c4\",\n name: \"Товарчики\",\n },\n {\n _id: \"5dc94bd00e36db246e3049ee\",\n name: \"Пицца\",\n },\n {\n _id: \"5dcabeeb6d09c45440d14cf6\",\n name: \"Макароны\",\n },\n];\n\nconst Logo = ({ logo = defaultLogo }) => <img src={logo} className=\"Logo\" />;\n\nconst RootCategories = ({ categories = defaultCategories, handleClickOnItem }) => (\n <ul className=\"RootCategories\">\n {categories.map((category) => (\n <CategoryItem category={category} handleClick={handleClickOnItem} />\n ))}\n </ul>\n);\n\nconst GoodCard = ({ good: { name, images, price, _id } } = {}) => (\n <div className=\"GoodCard\">\n <img src={`${backendURL}/${images ? images[0].url : \"\"}`} className=\"GoodImage\" alt=\"\" />\n <strong>Name : </strong> {name}\n <strong>Price : </strong> {price}\n </div>\n);\n\nconst GoodsList = ({ goods } = {}) => (\n <div className=\"GoodList\">\n {goods.map((good) => (\n <GoodCard good={good} />\n ))}\n </div>\n);\n\nconst CGoodsList = connect((state) => ({ goods: state.promise?.catById?.payload?.goods || [] }))(GoodsList);\n\nconst CRootCategories = connect((state) => ({ categories: state.promise?.rootCats?.payload || [] }), {\n handleClickOnItem: (_id) => actionCatById(_id),\n})(RootCategories);\nconst CLogout = connect((state) => ({ children: `Logout (${state.auth?.payload?.sub?.login || \"anon\"})` }), {\n onClick: actionAuthLogout,\n})(\"button\");\n\nconst CategoryItem = ({ category: { _id, name } = {}, handleClick }) => (\n <li className=\"CategoryItem\" onClick={() => handleClick(_id)}>\n {name}\n </li>\n);\n\nconst Header = ({ children }) => (\n <header>\n <CLogout />\n {children}\n </header>\n);\nconst Aside = ({ children }) => (\n <aside className=\"col-4\">\n <CRootCategories />\n {children}\n </aside>\n);\n\nconst Content = ({ children }) => <section className=\"Content col-8\">{children}</section>;\n\nconst Main = ({ children }) => (\n <main className=\"row\">\n <Aside />\n <Content>\n <CGoodsList />\n </Content>\n {children}\n </main>\n);\n\nconst Footer = ({ children }) => <footer className=\"row\">{children}</footer>;\n\nfunction App() {\n return (\n <Provider store={store}>\n <div className=\"App container\">\n <Header />\n <Main />\n <Footer />\n </div>\n </Provider>\n );\n}\n\nstore.dispatch(actionCatById(\"5dc458985df9d670df48cc47\"));\nexport default App;\n"]},"metadata":{},"sourceType":"module"}
|