Guest User

Untitled

a guest
Dec 15th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.81 KB | None | 0 0
  1. //
  2. //INDEX.JS
  3. //
  4. import React from 'react';
  5. import ReactDOM from 'react-dom';
  6. import './index.css';
  7. import App from 'components/App';
  8. import { Provider } from 'react-redux';
  9. import createStore from './store';
  10.  
  11. const store = createStore();
  12.  
  13. ReactDOM.render(
  14. <Provider store={store}>
  15. <App />
  16. </Provider>,
  17. document.getElementById('root')
  18. );
  19. //
  20. //STORE.JS
  21. //
  22. import { createStore, compose } from 'redux';
  23. import rootReducer from './reducers';
  24.  
  25. export default () =>
  26. createStore(
  27. rootReducer,
  28. compose(
  29. window.devToolsExtension
  30. ? window.__REDUX_DEVTOOLS_EXTENSION__()
  31. : f => f,
  32. ),
  33. );
  34. //SRC
  35. //ACTION
  36. //farmActions.js
  37. import { MOVE_ORDER_TO_CUSTOMER } from './farmTypes';
  38.  
  39. export const moveOrderToCustomer = order => ({
  40. type: MOVE_ORDER_TO_CUSTOMER,
  41. payload: order
  42. });
  43. //SRC
  44. //ACTION
  45. //farmTypes.js
  46. export const MOVE_ORDER_TO_CUSTOMER = 'MOVE_ORDER_TO_CUSTOMER';
  47. //SRC
  48. //ACTION
  49. //marketActions.js
  50. import { CREATE_ORDER, MOVE_ORDER_TO_FARM } from './marketTypes';
  51.  
  52. export const createOrder = order => ({
  53. type: CREATE_ORDER,
  54. payload: order
  55. });
  56.  
  57. export const moveOrderToFarm = order => ({
  58. type: MOVE_ORDER_TO_FARM,
  59. payload: order
  60. });
  61. //SRC
  62. //ACTION
  63. //marketTypes.js
  64. export const CREATE_ORDER = 'CREATE_ORDER';
  65.  
  66. export const MOVE_ORDER_TO_FARM = 'MOVE_ORDER_TO_FARM';
  67.  
  68. export const DELETE_ORDER_FROM_MARKET = 'DELETE_ORDER_FROM_MARKET';
  69.  
  70. //SRC
  71. //REDUCERS
  72. //index.js
  73. import { combineReducers } from 'redux';
  74. import market from './market';
  75. import farm from './farm';
  76. import budget from './budget';
  77.  
  78. export default combineReducers({
  79. market,
  80. farm,
  81. budget,
  82. });
  83. //SRC
  84. //REDUCERS
  85. //market.js
  86. import { CREATE_ORDER, MOVE_ORDER_TO_FARM } from 'actions/marketTypes';
  87.  
  88. export default (state = { orders: [] }, action) => {
  89. switch (action.type) {
  90. case CREATE_ORDER:
  91. return { ...state, orders: [...state.orders, action.payload] };
  92. case MOVE_ORDER_TO_FARM:
  93. return {
  94. ...state,
  95. orders: state.orders.filter(item => item.id !== action.payload.id)
  96. };
  97. default:
  98. return state;
  99. }
  100. };
  101. //SRC
  102. //REDUCERS
  103. //helpers.js
  104. export const sortOrderFn = (a, b) => b.createdAt - a.createdAt;
  105. //SRC
  106. //REDUCERS
  107. //farm.js
  108. import { MOVE_ORDER_TO_CUSTOMER } from 'actions/farmTypes';
  109. import { MOVE_ORDER_TO_FARM } from 'actions/marketTypes';
  110.  
  111. const initialState = {
  112. orders: []
  113. };
  114.  
  115. export default (state = initialState, action) => {
  116. switch (action.type) {
  117. case MOVE_ORDER_TO_FARM:
  118. return { ...state, orders: [...state.orders, action.payload] };
  119. case MOVE_ORDER_TO_CUSTOMER:
  120. return { ...state, orders: state.orders.slice(1) };
  121. default:
  122. return state;
  123. }
  124. };
  125. //SRC
  126. //REDUCERS
  127. //budget.js
  128. import { MOVE_ORDER_TO_CUSTOMER } from 'actions/farmTypes';
  129. import { CREATE_ORDER, MOVE_ORDER_TO_FARM } from 'actions/marketTypes';
  130.  
  131. const initialState = {
  132. profit: 0,
  133. farmExpanse: 0,
  134. deliveryExpanse: 0,
  135. marketExpanse: 0
  136. };
  137. export default (state = initialState, action) => {
  138. switch (action.type) {
  139. case CREATE_ORDER:
  140. return {
  141. ...state,
  142. profit: state.profit + action.payload.price,
  143. marketExpanse: state.marketExpanse + 20
  144. };
  145. case MOVE_ORDER_TO_FARM:
  146. return { ...state, farmExpanse: state.farmExpanse + 100 };
  147. case MOVE_ORDER_TO_CUSTOMER:
  148. return { ...state, deliveryExpanse: state.deliveryExpanse + 20 };
  149. default:
  150. return state;
  151. }
  152. };
  153.  
  154. //SRC
  155. //COMPONENTS
  156. //APP
  157. //App.js используется вместе с index .js export { default } from './App';
  158. import React, { Component } from 'react';
  159. import './App.css';
  160. import Market from '../Market';
  161. import Farm from '../Farm';
  162. import Budget from '../Budget';
  163.  
  164. export class App extends Component {
  165. render() {
  166. return (
  167. <div className="app">
  168. <Market />
  169. <Farm />
  170. <Budget />
  171. </div>
  172. );
  173. }
  174. }
  175. export default App;
  176. //SRC
  177. //COMPONENTS
  178. //APP
  179. //Order.js используется вместе с index .js export { default } from './Order';
  180. import React from 'react';
  181. import './Order.css';
  182.  
  183. const Order = ({ name, price, createdAt }) => (
  184. <div className="order">
  185. <div className="order__upper">
  186. <p className="p--order">Название: {name}</p>
  187. <p className="p--order">
  188. Цена: <span className="order-price">{price}</span>
  189. </p>
  190. </div>
  191. <div className="order__lower">
  192. <p className="p--order">Создан: {createdAt}</p>
  193. </div>
  194. </div>
  195. );
  196.  
  197. export default Order;
  198. //SRC
  199. //COMPONENTS
  200. //APP
  201. //Budget.js используется вместе с index .js export { default } from './Budget';
  202. import React from 'react';
  203. import { connect } from 'react-redux';
  204. import './Budget.css';
  205.  
  206. export const Budget = ({
  207. profit,
  208. farmExpanse,
  209. deliveryExpanse,
  210. marketExpanse
  211. }) => (
  212. <div className="budget">
  213. <h2>Бюджет</h2>
  214. <p>
  215. Всего получено денег: <span className="t-profit">{profit}</span>
  216. </p>
  217. <p>
  218. Расходы продавцов: <span className="t-sellers">{marketExpanse}</span>
  219. </p>
  220. <p>
  221. Расходы на ферме: <span className="t-farm">{farmExpanse}</span>
  222. </p>
  223. <p>
  224. Расходы на доставку:{' '}
  225. <span className="t-delivery">{deliveryExpanse}</span>
  226. </p>
  227. <p>
  228. Итого:{' '}
  229. <span className="t-total">
  230. {profit - marketExpanse - farmExpanse - deliveryExpanse}
  231. </span>
  232. </p>
  233. </div>
  234. );
  235.  
  236. const mapStateToProps = state => {
  237. return {
  238. profit: state.budget.profit,
  239. farmExpanse: state.budget.farmExpanse,
  240. deliveryExpanse: state.budget.deliveryExpanse,
  241. marketExpanse: state.budget.marketExpanse
  242. };
  243. };
  244.  
  245. export default connect(mapStateToProps)(Budget);
  246. //SRC
  247. //COMPONENTS
  248. //APP
  249. //Farm.js используется вместе с index .js export { default } from './Farm'
  250. import React, { Component } from 'react';
  251. import { connect } from 'react-redux';
  252. import Order from '../Order';
  253. import { moveOrderToCustomer } from 'actions/farmActions';
  254. import './Farm.css';
  255.  
  256. export class Farm extends Component {
  257. render() {
  258. const { orders, onMoveOrderToCustomer } = this.props;
  259. return (
  260. <div className="farm">
  261. <h2>Производство на ферме</h2>
  262. <button disabled={!orders.length} onClick={onMoveOrderToCustomer}>
  263. Отправить урожай клиенту
  264. </button>
  265. <div>
  266. {orders.map(el => (
  267. <Order
  268. name={el.name}
  269. price={el.price}
  270. createdAt={el.createdAt.toLocaleString()}
  271. key={el.id}
  272. />
  273. ))}
  274. </div>
  275. </div>
  276. );
  277. }
  278. }
  279.  
  280. const mapStateToProps = state => ({
  281. orders: state.farm.orders
  282. });
  283.  
  284. const mapDispatchToProps = dispatch => ({
  285. onMoveOrderToCustomer: () => dispatch(moveOrderToCustomer())
  286. });
  287.  
  288. export default connect(
  289. mapStateToProps,
  290. mapDispatchToProps
  291. )(Farm);
  292. //SRC
  293. //COMPONENTS
  294. //APP
  295. //Market.js используется вместе с index .js export { default } from './Market'
  296. import React, { Component } from 'react';
  297. import { connect } from 'react-redux';
  298. import Order from '../Order';
  299. import { createOrder, moveOrderToFarm } from 'actions/marketActions';
  300. import './Market.css';
  301.  
  302. let id = 0;
  303.  
  304. const getId = () => {
  305. id += 1;
  306. return id;
  307. };
  308.  
  309. export const vegetables = [
  310. 'Капуста',
  311. 'Редиска',
  312. 'Огурцы',
  313. 'Морковь',
  314. 'Горох',
  315. 'Баклажан',
  316. 'Тыква',
  317. 'Чеснок',
  318. 'Лук',
  319. 'Перец',
  320. 'Картофель',
  321. 'Редька'
  322. ];
  323.  
  324. const getNewOrder = () => {
  325. return {
  326. id: getId(),
  327. name: vegetables[Math.floor(Math.random() * vegetables.length)],
  328. price: 100 + Math.floor(Math.random() * 100),
  329. createdAt: new Date()
  330. };
  331. };
  332.  
  333. class Market extends Component {
  334. render() {
  335. const { onCreateOrder, onMoveOrderToFarm, orders } = this.props;
  336.  
  337. return (
  338. <div className="market">
  339. <h2>Новые заказы в магазине</h2>
  340. <button
  341. className="new-orders__create-button"
  342. onClick={() => {
  343. onCreateOrder(getNewOrder());
  344. }}
  345. >
  346. Создать заказ
  347. </button>
  348. <button
  349. disabled={!orders.length}
  350. onClick={() => {
  351. onMoveOrderToFarm(orders[0]);
  352. }}
  353. >
  354. Отправить заказ на ферму
  355. </button>
  356. <div className="order-list">
  357. {orders.map(el => (
  358. <Order
  359. name={el.name}
  360. price={el.price}
  361. createdAt={el.createdAt.toLocaleString()}
  362. key={el.id}
  363. />
  364. ))}
  365. </div>
  366. </div>
  367. );
  368. }
  369. }
  370.  
  371. const mapStateToProps = state => ({
  372. orders: state.market.orders
  373. });
  374.  
  375. const mapDispatchToProps = dispatch => ({
  376. onCreateOrder: newOrder => dispatch(createOrder(newOrder)),
  377. onMoveOrderToFarm: newOrder => dispatch(moveOrderToFarm(newOrder))
  378. });
  379.  
  380. export default connect(
  381. mapStateToProps,
  382. mapDispatchToProps
  383. )(Market);
Add Comment
Please, Sign In to add comment