From b26cceca1e44b2de738da95e335e2764d25faf26 Mon Sep 17 00:00:00 2001 From: priecint Date: Wed, 13 Jul 2016 00:44:26 +0200 Subject: [PATCH] #29 Add open orders (not finished) --- package.json | 1 + src/modules/market/components/market-page.jsx | 11 +++++ src/modules/market/components/open-orders.jsx | 35 ++++++++++++++++ .../open-orders/components/open-order.jsx | 40 ++++++++++++++++++ src/modules/open-orders/less/open-order.less | 3 ++ src/selectors/markets.js | 42 ++++++++++++++++++- src/styles.less | 1 + test/assertions/market.js | 4 ++ 8 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 src/modules/market/components/open-orders.jsx create mode 100644 src/modules/open-orders/components/open-order.jsx create mode 100644 src/modules/open-orders/less/open-order.less diff --git a/package.json b/package.json index b47bec76..8e66f1c1 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "inline-source-cli": "1.1.1", "less": "2.7.1", "mocha": "2.5.3", + "moment": "2.14.1", "npm-check-updates": "^2.7.0", "onchange": "2.5.0", "react": "15.2.0", diff --git a/src/modules/market/components/market-page.jsx b/src/modules/market/components/market-page.jsx index 2e020a0c..166394d2 100644 --- a/src/modules/market/components/market-page.jsx +++ b/src/modules/market/components/market-page.jsx @@ -6,6 +6,7 @@ import Basics from '../../market/components/basics'; import TradePanel from '../../../modules/trade/components/trade-panel'; import ReportPanel from '../../reports/components/report-panel'; import MarketPositions from '../../market/components/market-positions'; +import OpenOrders from '../../market/components/open-orders'; import Chart from '../../market/components/chart'; export default class MarketPage extends Component { @@ -74,6 +75,16 @@ export default class MarketPage extends Component { ); } + if (p.market.openOrders && p.market.openOrders.length > 0) { + nodes.push( + + ); + } + // chart nodes.push( ( +
+ + + + + + + + + + { + p.openOrders.map(openOrder => ( + + ) + ) + } + +
TypeQty.PriceMatchedUnmatched
+
+); + +OpenOrders.propTypes = { + openOrders: React.PropTypes.array +}; + +export default OpenOrders; diff --git a/src/modules/open-orders/components/open-order.jsx b/src/modules/open-orders/components/open-order.jsx new file mode 100644 index 00000000..52be59f7 --- /dev/null +++ b/src/modules/open-orders/components/open-order.jsx @@ -0,0 +1,40 @@ +/* + * Author: priecint + */ + +import React from 'react'; + +import ValueDenomination from '../../common/components/value-denomination'; + +const OpenOrder = (p) => ( + + + {p.type} + + + + + + + + + + + + + + + +); + +OpenOrder.propTypes = { + id: React.PropTypes.string, + type: React.PropTypes.string, + originalShares: React.PropTypes.object, + avgPrice: React.PropTypes.object, + matchedShares: React.PropTypes.object, + unmatchedShares: React.PropTypes.object, + isCancelling: React.PropTypes.bool +}; + +export default OpenOrder; \ No newline at end of file diff --git a/src/modules/open-orders/less/open-order.less b/src/modules/open-orders/less/open-order.less new file mode 100644 index 00000000..122bb655 --- /dev/null +++ b/src/modules/open-orders/less/open-order.less @@ -0,0 +1,3 @@ +.open-order:not(:hover) .cancel-order-action { + display: none; +} diff --git a/src/selectors/markets.js b/src/selectors/markets.js index ee9de4b0..84b25bf4 100644 --- a/src/selectors/markets.js +++ b/src/selectors/markets.js @@ -36,7 +36,7 @@ function makeMarkets(numMarkets = 25) { makerFeePercent: makeNumber(randomInt(1, 5), '%', true), volume: makeNumber(randomInt(0, 10000), 'shares', true), isOpen: Math.random() > 0.1, - isPendingReport: Math.random() < 0.5, + isPendingReport: false, marketLink: { text: 'Trade', className: 'trade', @@ -129,6 +129,46 @@ function makeMarkets(numMarkets = 25) { } ]; + m.openOrders = [ + { + id: 'order1', + type: 'sell', + originalShares: makeNumber(5, 'shares'), + avgPrice: makeNumber(0.7, 'ether'), + matchedShares: makeNumber(3, 'shares'), + unmatchedShares: makeNumber(2, 'shares'), + outcome: 'outcomeasdf123', + owner: '0x45a153fdd97836c2b349a5f53970dc44b0ef1efa' + }, + { + id: 'order2', + type: 'buy', + originalShares: makeNumber(5, 'shares'), + avgPrice: makeNumber(0.7, 'ether'), + matchedShares: makeNumber(3, 'shares'), + unmatchedShares: makeNumber(2, 'shares'), + outcome: 'outcomeasdf123', + owner: '0x45a153fdd97836c2b349a5f53970dc44b0ef1efa' + }, + { + id: 'order3', + type: 'buy', + originalShares: makeNumber(5, 'shares'), + avgPrice: makeNumber(0.7, 'ether'), + matchedShares: makeNumber(3, 'shares'), + unmatchedShares: makeNumber(2, 'shares'), + outcome: 'outcomeasdf123', + owner: '0x45a153fdd97836c2b349a5f53970dc44b0ef1efa' + }, + ]; + + m.onCancelOrder = (orderId) => { + setTimeout(() => { + require('../selectors').market.openOrders.find(openOrder => openOrder.id === orderId).isCancelling = true; + require('../selectors').update({}); + }, 1); + }; + // positions summary m.positionsSummary = { numPositions: makeNumber(3, 'Positions', true), diff --git a/src/styles.less b/src/styles.less index 1eacefb2..29a64da3 100644 --- a/src/styles.less +++ b/src/styles.less @@ -34,3 +34,4 @@ @import './modules/bids-asks/less/bids-asks'; @import './modules/reports/less/report-form'; @import './modules/reports/less/report-panel'; +@import './modules/open-orders/less/open-order'; diff --git a/test/assertions/market.js b/test/assertions/market.js index 90be7375..88f0fec0 100644 --- a/test/assertions/market.js +++ b/test/assertions/market.js @@ -498,6 +498,10 @@ export default function(market) { }); }); + describe('openOrders', () => { + + }); + describe('priceTimeSeries', () => { it('[TODO] flesh out the full shape'); // Holding on this temporarily until we can better test trading