43f7b3fa72a75579fbdf2075e70d0009.json 71 KB

1
  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 actionOrders = () => dispatch => dispatch(actionPromise(\"orders\", gql(`\n query orders{\n OrderFind(query:\"[{}]\"){\n _id total createdAt orderGoods{\n _id count price good{\n name _id price images{\n url\n }\n }\n }\n }\n }\n `)));\n\nconst actionNewOrder = function () {\n let orderGoods = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n return async (dispatch, getState) => {\n const {\n auth: token\n } = getState();\n\n if (!orderGoods.length) {\n return;\n }\n\n await dispatch(actionPromise(\"newOrder\", gql(`mutation newOrder($order:OrderInput){\n OrderUpsert(order:$order){\n _id total\n }\n }\n `, {\n order: {\n orderGoods: orderGoods.map(orderGood => ({\n count: orderGood.count,\n good: {\n _id: orderGood.good._id\n }\n }))\n }\n })));\n let {\n promise: {\n newOrder\n }\n } = getState();\n\n if (newOrder.status === \"FULFILLED\") {\n dispatch(actionCartClear());\n dispatch(actionOrders(token));\n }\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\nconst actionPageStart = () => async (dispatch, getState) => {\n const {\n auth: {\n token\n }\n } = store.getState();\n store.dispatch(actionCatById(token));\n store.dispatch(actionOrders(token));\n};\n\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: 310,\n columnNumber: 42\n }, this);\n};\n\n_c = Logo;\n\nconst CategoryItem = _ref3 => {\n let {\n category: {\n _id,\n name\n } = {},\n handleClick\n } = _ref3;\n return /*#__PURE__*/_jsxDEV(\"li\", {\n className: \"CategoryItem\",\n onClick: () => handleClick(_id),\n children: name\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 312,\n columnNumber: 5\n }, this);\n};\n\n_c2 = CategoryItem;\n\nconst RootCategories = _ref4 => {\n let {\n categories = defaultCategories,\n handleClickOnItem\n } = _ref4;\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: 320,\n columnNumber: 13\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 318,\n columnNumber: 5\n }, this);\n};\n\n_c3 = RootCategories;\nconst CRootCategories = connect(state => {\n var _state$promise, _state$promise$rootCa;\n\n return {\n categories: ((_state$promise = state.promise) === null || _state$promise === void 0 ? void 0 : (_state$promise$rootCa = _state$promise.rootCats) === null || _state$promise$rootCa === void 0 ? void 0 : _state$promise$rootCa.payload) || []\n };\n}, {\n handleClickOnItem: _id => actionCatById(_id)\n})(RootCategories);\n_c4 = CRootCategories;\n\nconst GoodCard = function () {\n let {\n good: {\n name,\n images,\n price,\n _id\n },\n token,\n handleOnClick\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"GoodCard row\",\n children: [/*#__PURE__*/_jsxDEV(\"img\", {\n src: `${backendURL}/${images ? images[0].url : \"\"}`,\n className: \"GoodImage col-6\",\n alt: \"\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 331,\n columnNumber: 13\n }, _this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"col-6\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"strong\", {\n children: \"Name : \"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 334,\n columnNumber: 21\n }, _this), \" \", name]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 333,\n columnNumber: 17\n }, _this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"strong\", {\n children: \"Price : \"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 337,\n columnNumber: 21\n }, _this), \" \", price]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 336,\n columnNumber: 17\n }, _this), token ? /*#__PURE__*/_jsxDEV(\"div\", {\n children: /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: () => handleOnClick({\n name,\n images,\n price,\n _id\n }),\n className: \"btn btn-success px-3\",\n children: \"Buy\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 341,\n columnNumber: 25\n }, _this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 340,\n columnNumber: 21\n }, _this) : false]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 332,\n columnNumber: 13\n }, _this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 330,\n columnNumber: 9\n }, _this);\n};\n\n_c5 = GoodCard;\nconst CGoodCard = connect(state => {\n var _state$auth;\n\n return {\n token: ((_state$auth = state.auth) === null || _state$auth === void 0 ? void 0 : _state$auth.token) || false\n };\n}, {\n handleOnClick: good => actionCartAdd(good)\n})(GoodCard);\n_c6 = CGoodCard;\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 row\",\n children: goods.map(good => /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"col-12 col-md-6\",\n children: /*#__PURE__*/_jsxDEV(CGoodCard, {\n good: good\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 363,\n columnNumber: 17\n }, _this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 362,\n columnNumber: 13\n }, _this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 360,\n columnNumber: 5\n }, _this);\n};\n\n_c7 = GoodsList;\nconst CGoodsList = connect(state => {\n var _state$promise2, _state$promise2$catBy, _state$promise2$catBy2;\n\n return {\n goods: ((_state$promise2 = state.promise) === null || _state$promise2 === void 0 ? void 0 : (_state$promise2$catBy = _state$promise2.catById) === null || _state$promise2$catBy === void 0 ? void 0 : (_state$promise2$catBy2 = _state$promise2$catBy.payload) === null || _state$promise2$catBy2 === void 0 ? void 0 : _state$promise2$catBy2.goods) || []\n };\n})(GoodsList);\n_c8 = CGoodsList;\n\nconst CartItem = _ref5 => {\n let {\n order: {\n count,\n good: {\n _id,\n name,\n images,\n price\n }\n },\n handleDelete,\n handleChange\n } = _ref5;\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"CartItem row mt-3\",\n children: [/*#__PURE__*/_jsxDEV(\"img\", {\n src: `${backendURL}/${images ? images[0].url : \"\"}`,\n className: \"GoodImage col-3\",\n alt: \"\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 379,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"col-5\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"strong\", {\n children: \"Name : \"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 382,\n columnNumber: 17\n }, this), \" \", name]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 381,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"strong\", {\n children: \"Price : \"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 385,\n columnNumber: 17\n }, this), \" \", price, \" * \", count, \" = \", +price * +count]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 384,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 380,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"col-4\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \" w-100 d-flex justify-content-between\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"d-flex\",\n children: [/*#__PURE__*/_jsxDEV(\"button\", {\n className: \"btn btn-info\",\n onClick: () => handleChange({\n _id,\n name,\n images,\n price\n }, --count),\n children: \"-\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 391,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"px-3\",\n children: count\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 397,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n className: \"btn btn-info\",\n onClick: () => handleChange({\n _id,\n name,\n images,\n price\n }, ++count),\n children: \"+\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 398,\n columnNumber: 21\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 390,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n className: \"btn btn-danger \",\n onClick: () => handleDelete({\n _id,\n name,\n images,\n price\n }),\n children: \"Delete\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 406,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 389,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 388,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 378,\n columnNumber: 5\n }, this);\n};\n\n_c9 = CartItem;\nconst CCartItem = connect(() => ({}), {\n handleDelete: good => actionCartDelete(good),\n handleChange: (good, count) => actionCartChange(good, count)\n})(CartItem);\n_c10 = CCartItem;\n\nconst Cart = _ref6 => {\n let {\n cart,\n token,\n handleSubmit\n } = _ref6;\n let cartSum = 0;\n Object.entries(cart).map(_ref7 => {\n var _order$good;\n\n let [_id, order] = _ref7;\n return cartSum += +(order === null || order === void 0 ? void 0 : order.count) * +(order === null || order === void 0 ? void 0 : (_order$good = order.good) === null || _order$good === void 0 ? void 0 : _order$good.price);\n });\n return token && Object.keys(cart).length > 0 ? /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"Cart \",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"row header\",\n children: \"Cart\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 424,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"row\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"col-12\",\n children: Object.entries(cart).map(_ref8 => {\n let [_id, order] = _ref8;\n return /*#__PURE__*/_jsxDEV(CCartItem, {\n order: order\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 428,\n columnNumber: 25\n }, this);\n })\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 426,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 425,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"row d-flex justify-content-between footer\",\n children: [/*#__PURE__*/_jsxDEV(\"strong\", {\n children: [\"Sum: \", cartSum]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 433,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n className: \"btn btn-success\",\n onClick: () => handleSubmit([...Object.values(cart)]),\n children: \"Submit\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 434,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 432,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 423,\n columnNumber: 9\n }, this) : false;\n};\n\n_c11 = Cart;\nconst CCart = connect(state => ({\n cart: state.cart || [],\n token: state.auth.token\n}), {\n handleSubmit: function () {\n let orderGoods = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n return actionNewOrder(orderGoods);\n }\n})(Cart);\n_c12 = CCart;\n\nconst DashboardOrderGood = function () {\n let {\n orderGood: {\n count,\n price: total,\n good\n }\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n const {\n name,\n _id,\n price,\n images\n } = good || {};\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"DashboardOrderGood row\",\n children: [/*#__PURE__*/_jsxDEV(\"img\", {\n src: `${backendURL}/${images ? images[0].url : \"\"}`,\n className: \"GoodImage col-3\",\n alt: \"\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 451,\n columnNumber: 13\n }, _this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"col-5\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"strong\", {\n children: \"Name : \"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 454,\n columnNumber: 21\n }, _this), \" \", name]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 453,\n columnNumber: 17\n }, _this), /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"strong\", {\n children: \"Price : \"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 457,\n columnNumber: 21\n }, _this), \" \", price, \" * \", count, \" = \", +price * +count]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 456,\n columnNumber: 17\n }, _this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 452,\n columnNumber: 13\n }, _this), /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"col-4\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \" w-100 d-flex justify-content-between\",\n children: /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"d-flex\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 462,\n columnNumber: 21\n }, _this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 461,\n columnNumber: 17\n }, _this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 460,\n columnNumber: 13\n }, _this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 450,\n columnNumber: 9\n }, _this);\n};\n\n_c13 = DashboardOrderGood;\n\nconst DashboardOrder = function () {\n let {\n order: {\n _id,\n createdAt,\n total,\n orderGoods\n }\n } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"DashboardOrder \",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"row header\",\n children: [/*#__PURE__*/_jsxDEV(\"h5\", {\n children: [\"Date: \", new Date(+createdAt).toDateString()]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 472,\n columnNumber: 13\n }, _this), \" \", /*#__PURE__*/_jsxDEV(\"strong\", {\n children: [\"total: \", total]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 472,\n columnNumber: 66\n }, _this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 471,\n columnNumber: 9\n }, _this), orderGoods === null || orderGoods === void 0 ? void 0 : orderGoods.map(orderGood => /*#__PURE__*/_jsxDEV(DashboardOrderGood, {\n orderGood: orderGood\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 476,\n columnNumber: 13\n }, _this))]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 470,\n columnNumber: 5\n }, _this);\n};\n\n_c14 = DashboardOrder;\n\nconst Dashboard = _ref9 => {\n let {\n orders,\n token\n } = _ref9;\n return token && Object.keys(orders).length > 0 ? /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"Dashboard \",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n className: \"row header\",\n children: \"Orders\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 483,\n columnNumber: 13\n }, this), orders.map(order => /*#__PURE__*/_jsxDEV(DashboardOrder, {\n order: order || {}\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 485,\n columnNumber: 17\n }, this))]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 482,\n columnNumber: 9\n }, this) : false;\n};\n\n_c15 = Dashboard;\nconst CDashboard = connect(state => {\n var _state$promise$orders, _state$auth2;\n\n return {\n orders: ((_state$promise$orders = state.promise.orders) === null || _state$promise$orders === void 0 ? void 0 : _state$promise$orders.payload) || [],\n token: (_state$auth2 = state.auth) === null || _state$auth2 === void 0 ? void 0 : _state$auth2.token\n };\n})(Dashboard);\n_c16 = CDashboard;\n\nconst Login = _ref10 => {\n let {\n handleLoginClick,\n handelRegisterClick\n } = _ref10;\n let login = \"\";\n let password = \"\";\n\n const handleLoginChange = e => login = e.target.value;\n\n const handlePasswordChange = e => password = e.target.value;\n\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"d-flex\",\n children: [/*#__PURE__*/_jsxDEV(\"input\", {\n className: \"input\",\n type: \"text\",\n onChange: handleLoginChange\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 503,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(\"input\", {\n className: \"input\",\n type: \"password\",\n onChange: handlePasswordChange\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 504,\n columnNumber: 13\n }, this), \" \", /*#__PURE__*/_jsxDEV(\"button\", {\n className: \"btn\",\n onClick: () => handleLoginClick({\n login,\n password\n }),\n children: \"Login\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 505,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 502,\n columnNumber: 9\n }, this);\n};\n\n_c17 = Login;\nconst CLogin = connect(state => ({}), {\n handleLoginClick: _ref11 => {\n let {\n login,\n password\n } = _ref11;\n return actionLogin(login, password);\n }\n})(Login);\n_c18 = CLogin;\n\nconst Logout = _ref12 => {\n let {\n handleOnClick,\n login\n } = _ref12;\n return /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: handleOnClick,\n children: `Logout ${login || \"\"}`\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 514,\n columnNumber: 46\n }, this);\n};\n\n_c19 = Logout;\nconst CLogout = connect(state => {\n var _state$auth3, _state$auth3$sub;\n\n return {\n login: (_state$auth3 = state.auth) === null || _state$auth3 === void 0 ? void 0 : (_state$auth3$sub = _state$auth3.sub) === null || _state$auth3$sub === void 0 ? void 0 : _state$auth3$sub.login\n };\n}, {\n handleOnClick: actionAuthLogout\n})(Logout);\n_c20 = CLogout;\n\nconst Auth = _ref13 => {\n let {\n token\n } = _ref13;\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"d-flex\",\n children: token ? /*#__PURE__*/_jsxDEV(CLogout, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 516,\n columnNumber: 62\n }, this) : /*#__PURE__*/_jsxDEV(CLogin, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 516,\n columnNumber: 76\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 516,\n columnNumber: 29\n }, this);\n};\n\n_c21 = Auth;\nconst CAuth = connect(state => {\n var _state$auth4;\n\n return {\n token: (_state$auth4 = state.auth) === null || _state$auth4 === void 0 ? void 0 : _state$auth4.token\n };\n})(Auth);\n_c22 = CAuth;\n\nconst Header = _ref14 => {\n let {\n children\n } = _ref14;\n return /*#__PURE__*/_jsxDEV(\"header\", {\n children: [/*#__PURE__*/_jsxDEV(CAuth, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 521,\n columnNumber: 9\n }, this), children]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 520,\n columnNumber: 5\n }, this);\n};\n\n_c23 = Header;\n\nconst Aside = _ref15 => {\n let {\n children\n } = _ref15;\n return /*#__PURE__*/_jsxDEV(\"aside\", {\n className: \"Aside flex-grow-1 \",\n children: [/*#__PURE__*/_jsxDEV(CRootCategories, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 527,\n columnNumber: 9\n }, this), children]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 526,\n columnNumber: 5\n }, this);\n};\n\n_c24 = Aside;\n\nconst Content = _ref16 => {\n let {\n children\n } = _ref16;\n return /*#__PURE__*/_jsxDEV(\"section\", {\n className: \"Content row\",\n children: children\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 532,\n columnNumber: 35\n }, this);\n};\n\n_c25 = Content;\n\nconst Main = _ref17 => {\n let {\n children\n } = _ref17;\n return /*#__PURE__*/_jsxDEV(\"main\", {\n className: \"Main d-flex\",\n children: [/*#__PURE__*/_jsxDEV(Aside, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 536,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(Content, {\n children: [/*#__PURE__*/_jsxDEV(CGoodsList, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 538,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(CCart, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 539,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(CDashboard, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 540,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 537,\n columnNumber: 9\n }, this), children]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 535,\n columnNumber: 5\n }, this);\n};\n\n_c26 = Main;\n\nconst Footer = _ref18 => {\n let {\n children\n } = _ref18;\n return /*#__PURE__*/_jsxDEV(\"footer\", {\n className: \"row\",\n children: children\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 546,\n columnNumber: 34\n }, this);\n};\n\n_c27 = 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: 552,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(Main, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 553,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(Footer, {}, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 554,\n columnNumber: 17\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 551,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 550,\n columnNumber: 9\n }, this);\n}\n\n_c28 = App;\nstore.subscribe(() => console.log(store.getState()));\nstore.dispatch(actionRootCats());\nstore.dispatch(actionPageStart());\nexport default App;\n\nvar _c, _c2, _c3, _c4, _c5, _c6, _c7, _c8, _c9, _c10, _c11, _c12, _c13, _c14, _c15, _c16, _c17, _c18, _c19, _c20, _c21, _c22, _c23, _c24, _c25, _c26, _c27, _c28;\n\n$RefreshReg$(_c, \"Logo\");\n$RefreshReg$(_c2, \"CategoryItem\");\n$RefreshReg$(_c3, \"RootCategories\");\n$RefreshReg$(_c4, \"CRootCategories\");\n$RefreshReg$(_c5, \"GoodCard\");\n$RefreshReg$(_c6, \"CGoodCard\");\n$RefreshReg$(_c7, \"GoodsList\");\n$RefreshReg$(_c8, \"CGoodsList\");\n$RefreshReg$(_c9, \"CartItem\");\n$RefreshReg$(_c10, \"CCartItem\");\n$RefreshReg$(_c11, \"Cart\");\n$RefreshReg$(_c12, \"CCart\");\n$RefreshReg$(_c13, \"DashboardOrderGood\");\n$RefreshReg$(_c14, \"DashboardOrder\");\n$RefreshReg$(_c15, \"Dashboard\");\n$RefreshReg$(_c16, \"CDashboard\");\n$RefreshReg$(_c17, \"Login\");\n$RefreshReg$(_c18, \"CLogin\");\n$RefreshReg$(_c19, \"Logout\");\n$RefreshReg$(_c20, \"CLogout\");\n$RefreshReg$(_c21, \"Auth\");\n$RefreshReg$(_c22, \"CAuth\");\n$RefreshReg$(_c23, \"Header\");\n$RefreshReg$(_c24, \"Aside\");\n$RefreshReg$(_c25, \"Content\");\n$RefreshReg$(_c26, \"Main\");\n$RefreshReg$(_c27, \"Footer\");\n$RefreshReg$(_c28, \"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","actionOrders","actionNewOrder","orderGoods","getState","length","order","map","orderGood","newOrder","actionCartClear","actionAuthLogin","actionLogin","login","password","window","location","actionAuthLogout","actionRegister","actionCartAdd","actionCartChange","actionCartDelete","actionPageStart","defaultCategories","Logo","logo","CategoryItem","category","handleClick","RootCategories","categories","handleClickOnItem","CRootCategories","rootCats","GoodCard","images","price","handleOnClick","CGoodCard","GoodsList","goods","CGoodsList","catById","CartItem","handleDelete","handleChange","CCartItem","Cart","handleSubmit","cartSum","entries","keys","CCart","DashboardOrderGood","total","DashboardOrder","createdAt","Date","toDateString","Dashboard","orders","CDashboard","Login","handleLoginClick","handelRegisterClick","handleLoginChange","target","value","handlePasswordChange","CLogin","Logout","CLogout","sub","Auth","CAuth","Header","children","Aside","Content","Main","Footer","App","subscribe"],"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}\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}\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}\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\";\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};\nconst actionRootCats = () =>\n actionPromise(\n \"rootCats\",\n gql(`query {\n CategoryFind(query: \"[{\\\\\"parent\\\\\":null}]\"){\n _id name\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 );\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 );\nconst actionOrders = () => (dispatch) =>\n dispatch(\n actionPromise(\n \"orders\",\n gql(`\n query orders{\n OrderFind(query:\"[{}]\"){\n _id total createdAt orderGoods{\n _id count price good{\n name _id price images{\n url\n }\n }\n }\n }\n }\n `)\n )\n );\nconst actionNewOrder =\n (orderGoods = []) =>\n async (dispatch, getState) => {\n const { auth: token } = getState();\n if (!orderGoods.length) {\n return;\n }\n await dispatch(\n actionPromise(\n \"newOrder\",\n gql(\n `mutation newOrder($order:OrderInput){\n OrderUpsert(order:$order){\n _id total\n }\n }\n `,\n {\n order: {\n orderGoods: orderGoods.map((orderGood) => ({\n count: orderGood.count,\n good: { _id: orderGood.good._id },\n })),\n },\n }\n )\n )\n );\n let {\n promise: { newOrder },\n } = getState();\n if (newOrder.status === \"FULFILLED\") {\n dispatch(actionCartClear());\n dispatch(actionOrders(token));\n }\n };\nconst actionAuthLogin = (token) => ({\n type: \"AUTH_LOGIN\",\n token: token,\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};\nconst actionAuthLogout = () => ({ type: \"AUTH_LOGOUT\" });\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\" });\nconst actionPageStart = () => async (dispatch, getState) => {\n const {\n auth: { token },\n } = store.getState();\n store.dispatch(actionCatById(token));\n store.dispatch(actionOrders(token));\n};\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\" />;\nconst CategoryItem = ({ category: { _id, name } = {}, handleClick }) => (\n <li className=\"CategoryItem\" onClick={() => handleClick(_id)}>\n {name}\n </li>\n);\n\nconst RootCategories = ({ categories = defaultCategories, handleClickOnItem }) => (\n <ul className=\"RootCategories\">\n {categories.map((category) => (\n <CategoryItem category={category} handleClick={handleClickOnItem} />\n ))}\n </ul>\n);\nconst CRootCategories = connect((state) => ({ categories: state.promise?.rootCats?.payload || [] }), {\n handleClickOnItem: (_id) => actionCatById(_id),\n})(RootCategories);\n\nconst GoodCard = ({ good: { name, images, price, _id }, token, handleOnClick } = {}) => {\n return (\n <div className=\"GoodCard row\">\n <img src={`${backendURL}/${images ? images[0].url : \"\"}`} className=\"GoodImage col-6\" alt=\"\" />\n <div className=\"col-6\">\n <div>\n <strong>Name : </strong> {name}\n </div>\n <div>\n <strong>Price : </strong> {price}\n </div>\n {token ? (\n <div>\n <button\n onClick={() => handleOnClick({ name, images, price, _id })}\n className=\"btn btn-success px-3\"\n >\n Buy\n </button>\n </div>\n ) : (\n false\n )}\n </div>\n </div>\n );\n};\nconst CGoodCard = connect((state) => ({ token: state.auth?.token || false }), {\n handleOnClick: (good) => actionCartAdd(good),\n})(GoodCard);\n\nconst GoodsList = ({ goods } = {}) => (\n <div className=\"GoodList row\">\n {goods.map((good) => (\n <div className=\"col-12 col-md-6\">\n <CGoodCard good={good} />\n </div>\n ))}\n </div>\n);\nconst CGoodsList = connect((state) => ({ goods: state.promise?.catById?.payload?.goods || [] }))(GoodsList);\n\nconst CartItem = ({\n order: {\n count,\n good: { _id, name, images, price },\n },\n handleDelete,\n handleChange,\n}) => (\n <div className=\"CartItem row mt-3\">\n <img src={`${backendURL}/${images ? images[0].url : \"\"}`} className=\"GoodImage col-3\" alt=\"\" />\n <div className=\"col-5\">\n <div>\n <strong>Name : </strong> {name}\n </div>\n <div>\n <strong>Price : </strong> {price} * {count} = {+price * +count}\n </div>\n </div>\n <div className=\"col-4\">\n <div className=\" w-100 d-flex justify-content-between\">\n <div className=\"d-flex\">\n <button\n className=\"btn btn-info\"\n onClick={() => handleChange({ _id, name, images, price }, --count)}\n >\n -\n </button>\n <div className=\"px-3\">{count}</div>\n <button\n className=\"btn btn-info\"\n onClick={() => handleChange({ _id, name, images, price }, ++count)}\n >\n +\n </button>\n </div>\n\n <button className=\"btn btn-danger \" onClick={() => handleDelete({ _id, name, images, price })}>\n Delete\n </button>\n </div>\n </div>\n </div>\n);\nconst CCartItem = connect(() => ({}), {\n handleDelete: (good) => actionCartDelete(good),\n handleChange: (good, count) => actionCartChange(good, count),\n})(CartItem);\n\nconst Cart = ({ cart, token, handleSubmit }) => {\n let cartSum = 0;\n Object.entries(cart).map(([_id, order]) => (cartSum += +order?.count * +order?.good?.price));\n\n return token && Object.keys(cart).length > 0 ? (\n <div className=\"Cart \">\n <div className=\"row header\">Cart</div>\n <div className=\"row\">\n <div className=\"col-12\">\n {Object.entries(cart).map(([_id, order]) => (\n <CCartItem order={order} />\n ))}\n </div>\n </div>\n <div className=\"row d-flex justify-content-between footer\">\n <strong>Sum: {cartSum}</strong>\n <button className=\"btn btn-success\" onClick={() => handleSubmit([...Object.values(cart)])}>\n Submit\n </button>\n </div>\n </div>\n ) : (\n false\n );\n};\nconst CCart = connect((state) => ({ cart: state.cart || [], token: state.auth.token }), {\n handleSubmit: (orderGoods = []) => actionNewOrder(orderGoods),\n})(Cart);\n\nconst DashboardOrderGood = ({ orderGood: { count, price: total, good } } = {}) => {\n const { name, _id, price, images } = good || {};\n return (\n <div className=\"DashboardOrderGood row\">\n <img src={`${backendURL}/${images ? images[0].url : \"\"}`} className=\"GoodImage col-3\" alt=\"\" />\n <div className=\"col-5\">\n <div>\n <strong>Name : </strong> {name}\n </div>\n <div>\n <strong>Price : </strong> {price} * {count} = {+price * +count}\n </div>\n </div>\n <div className=\"col-4\">\n <div className=\" w-100 d-flex justify-content-between\">\n <div className=\"d-flex\"></div>\n </div>\n </div>\n </div>\n );\n};\n\nconst DashboardOrder = ({ order: { _id, createdAt, total, orderGoods } } = {}) => (\n <div className=\"DashboardOrder \">\n <div className=\"row header\">\n <h5>Date: {new Date(+createdAt).toDateString()}</h5> <strong>total: {total}</strong>\n </div>\n\n {orderGoods?.map((orderGood) => (\n <DashboardOrderGood orderGood={orderGood} />\n ))}\n </div>\n);\nconst Dashboard = ({ orders, token }) =>\n token && Object.keys(orders).length > 0 ? (\n <div className=\"Dashboard \">\n <div className=\"row header\">Orders</div>\n {orders.map((order) => (\n <DashboardOrder order={order || {}} />\n ))}\n </div>\n ) : (\n false\n );\n\nconst CDashboard = connect((state) => ({ orders: state.promise.orders?.payload || [], token: state.auth?.token }))(\n Dashboard\n);\n\nconst Login = ({ handleLoginClick, handelRegisterClick }) => {\n let login = \"\";\n let password = \"\";\n const handleLoginChange = (e) => (login = e.target.value);\n const handlePasswordChange = (e) => (password = e.target.value);\n return (\n <div className=\"d-flex\">\n <input className=\"input\" type=\"text\" onChange={handleLoginChange} />\n <input className=\"input\" type=\"password\" onChange={handlePasswordChange} />{\" \"}\n <button className=\"btn\" onClick={() => handleLoginClick({ login, password })}>\n Login\n </button>\n </div>\n );\n};\nconst CLogin = connect((state) => ({}), { handleLoginClick: ({ login, password }) => actionLogin(login, password) })(\n Login\n);\nconst Logout = ({ handleOnClick, login }) => <button onClick={handleOnClick}>{`Logout ${login || \"\"}`}</button>;\nconst CLogout = connect((state) => ({ login: state.auth?.sub?.login }), { handleOnClick: actionAuthLogout })(Logout);\nconst Auth = ({ token }) => <div className=\"d-flex\">{token ? <CLogout /> : <CLogin />}</div>;\nconst CAuth = connect((state) => ({ token: state.auth?.token }))(Auth);\n\nconst Header = ({ children }) => (\n <header>\n <CAuth />\n {children}\n </header>\n);\nconst Aside = ({ children }) => (\n <aside className=\"Aside flex-grow-1 \">\n <CRootCategories />\n {children}\n </aside>\n);\n\nconst Content = ({ children }) => <section className=\"Content row\">{children}</section>;\n\nconst Main = ({ children }) => (\n <main className=\"Main d-flex\">\n <Aside />\n <Content>\n <CGoodsList />\n <CCart />\n <CDashboard />\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.subscribe(() => console.log(store.getState()));\nstore.dispatch(actionRootCats());\nstore.dispatch(actionPageStart());\nexport default App;\n"]},"metadata":{},"sourceType":"module"}