@oanda/labs-order-book-widget 1.0.71 → 1.0.73
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +556 -0
- package/dist/main/OrderBookWidget/ChartWithData.js +62 -0
- package/dist/main/OrderBookWidget/ChartWithData.js.map +1 -0
- package/dist/main/OrderBookWidget/Main.js +46 -0
- package/dist/main/OrderBookWidget/Main.js.map +1 -0
- package/dist/main/OrderBookWidget/OrderBookWidget.js +2 -2
- package/dist/main/OrderBookWidget/OrderBookWidget.js.map +1 -1
- package/dist/main/OrderBookWidget/components/Chart/Chart.js +16 -7
- package/dist/main/OrderBookWidget/components/Chart/Chart.js.map +1 -1
- package/dist/main/OrderBookWidget/components/Chart/constants.js +5 -3
- package/dist/main/OrderBookWidget/components/Chart/constants.js.map +1 -1
- package/dist/main/OrderBookWidget/components/Chart/formatters.js +10 -4
- package/dist/main/OrderBookWidget/components/Chart/formatters.js.map +1 -1
- package/dist/main/OrderBookWidget/components/Chart/getOption.js +81 -36
- package/dist/main/OrderBookWidget/components/Chart/getOption.js.map +1 -1
- package/dist/main/OrderBookWidget/components/Chart/types.js.map +1 -1
- package/dist/main/OrderBookWidget/config.js +69 -1
- package/dist/main/OrderBookWidget/config.js.map +1 -1
- package/dist/main/OrderBookWidget/types.js +20 -0
- package/dist/main/OrderBookWidget/types.js.map +1 -1
- package/dist/main/translations/sources/en.json +3 -0
- package/dist/main/translations/sources/zh_TW.json +3 -0
- package/dist/module/OrderBookWidget/ChartWithData.js +55 -0
- package/dist/module/OrderBookWidget/ChartWithData.js.map +1 -0
- package/dist/module/OrderBookWidget/Main.js +38 -0
- package/dist/module/OrderBookWidget/Main.js.map +1 -0
- package/dist/module/OrderBookWidget/OrderBookWidget.js +2 -2
- package/dist/module/OrderBookWidget/OrderBookWidget.js.map +1 -1
- package/dist/module/OrderBookWidget/components/Chart/Chart.js +17 -8
- package/dist/module/OrderBookWidget/components/Chart/Chart.js.map +1 -1
- package/dist/module/OrderBookWidget/components/Chart/constants.js +4 -2
- package/dist/module/OrderBookWidget/components/Chart/constants.js.map +1 -1
- package/dist/module/OrderBookWidget/components/Chart/formatters.js +10 -4
- package/dist/module/OrderBookWidget/components/Chart/formatters.js.map +1 -1
- package/dist/module/OrderBookWidget/components/Chart/getOption.js +80 -35
- package/dist/module/OrderBookWidget/components/Chart/getOption.js.map +1 -1
- package/dist/module/OrderBookWidget/components/Chart/types.js.map +1 -1
- package/dist/module/OrderBookWidget/config.js +69 -1
- package/dist/module/OrderBookWidget/config.js.map +1 -1
- package/dist/module/OrderBookWidget/types.js +19 -1
- package/dist/module/OrderBookWidget/types.js.map +1 -1
- package/dist/module/translations/sources/en.json +3 -0
- package/dist/module/translations/sources/zh_TW.json +3 -0
- package/dist/types/OrderBookWidget/ChartWithData.d.ts +4 -0
- package/dist/types/OrderBookWidget/Main.d.ts +4 -0
- package/dist/types/OrderBookWidget/components/Chart/Chart.d.ts +1 -1
- package/dist/types/OrderBookWidget/components/Chart/constants.d.ts +4 -2
- package/dist/types/OrderBookWidget/components/Chart/getOption.d.ts +16 -1
- package/dist/types/OrderBookWidget/components/Chart/types.d.ts +11 -1
- package/dist/types/OrderBookWidget/config.d.ts +7 -1
- package/dist/types/OrderBookWidget/types.d.ts +26 -3
- package/package.json +3 -3
- package/src/OrderBookWidget/ChartWithData.tsx +78 -0
- package/src/OrderBookWidget/Main.tsx +40 -0
- package/src/OrderBookWidget/OrderBookWidget.tsx +2 -2
- package/src/OrderBookWidget/components/Chart/Chart.tsx +12 -6
- package/src/OrderBookWidget/components/Chart/constants.ts +4 -2
- package/src/OrderBookWidget/components/Chart/formatters.ts +6 -4
- package/src/OrderBookWidget/components/Chart/getOption.ts +93 -39
- package/src/OrderBookWidget/components/Chart/types.ts +11 -3
- package/src/OrderBookWidget/config.ts +70 -1
- package/src/OrderBookWidget/types.ts +28 -3
- package/src/translations/sources/en.json +3 -0
- package/src/translations/sources/zh_TW.json +3 -0
- package/test/Main.test.tsx +129 -0
- package/test/chartOptions.test.ts +20 -0
- package/dist/main/OrderBookWidget/Widget.js +0 -61
- package/dist/main/OrderBookWidget/Widget.js.map +0 -1
- package/dist/module/OrderBookWidget/Widget.js +0 -53
- package/dist/module/OrderBookWidget/Widget.js.map +0 -1
- package/dist/types/OrderBookWidget/Widget.d.ts +0 -4
- package/src/OrderBookWidget/Widget.tsx +0 -62
- package/test/Widget.test.tsx +0 -71
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../src/OrderBookWidget/types.ts"],"sourcesContent":["import { Theme } from '@oanda/labs-widget-common';\nimport { Locale } from '@oanda/mono-i18n';\n\nexport interface OrderBookWidgetConfig {\n graphqlUrl: string;\n instrument:
|
|
1
|
+
{"version":3,"file":"types.js","names":["InstrumentId","exports"],"sources":["../../../src/OrderBookWidget/types.ts"],"sourcesContent":["import { Theme } from '@oanda/labs-widget-common';\nimport { Locale } from '@oanda/mono-i18n';\nimport { BookType } from '../gql/types/graphql';\n\nexport interface OrderBookWidgetConfig {\n graphqlUrl: string;\n instrument: InstrumentId;\n locale: Locale;\n theme?: Theme;\n}\n\nexport interface OrderBookWrapperConfig extends OrderBookWidgetConfig {\n renderElementId: string;\n}\n\nexport interface MainProps {\n instrument?: InstrumentId;\n}\n\nexport interface ChartWithDataProps {\n instrument: InstrumentId;\n bookType: BookType;\n}\n\nexport enum InstrumentId {\n EUR_AUD = 'EUR_AUD',\n EUR_GBP = 'EUR_GBP',\n EUR_JPY = 'EUR_JPY',\n EUR_USD = 'EUR_USD',\n EUR_CHF = 'EUR_CHF',\n USD_CHF = 'USD_CHF',\n USD_JPY = 'USD_JPY',\n USD_CAD = 'USD_CAD',\n GBP_USD = 'GBP_USD',\n GBP_JPY = 'GBP_JPY',\n GBP_CHF = 'GBP_CHF',\n AUD_JPY = 'AUD_JPY',\n AUD_USD = 'AUD_USD',\n NZD_USD = 'NZD_USD',\n XAU_USD = 'XAU_USD',\n XAG_USD = 'XAG_USD',\n}\n"],"mappings":";;;;;;IAwBYA,YAAY,GAAAC,OAAA,CAAAD,YAAA,aAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
+
"buy": "Buy",
|
|
2
3
|
"data_unavailable": "Data unavailable",
|
|
4
|
+
"instrument": "Instrument",
|
|
3
5
|
"long": "Long",
|
|
4
6
|
"long_positions": "Long Positions",
|
|
5
7
|
"open_orders": "Open Orders",
|
|
@@ -9,6 +11,7 @@
|
|
|
9
11
|
"position_book": "Position Book",
|
|
10
12
|
"price": "Price",
|
|
11
13
|
"reset_zoom": "Reset Zoom",
|
|
14
|
+
"sell": "Sell",
|
|
12
15
|
"sell_orders": "Sell Orders",
|
|
13
16
|
"short": "Short",
|
|
14
17
|
"short_positions": "Short Positions",
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
+
"buy": "買進",
|
|
2
3
|
"data_unavailable": "沒有數據",
|
|
4
|
+
"instrument": "金融工具",
|
|
3
5
|
"long": "長",
|
|
4
6
|
"long_positions": "長倉",
|
|
5
7
|
"open_orders": "開盤市價單",
|
|
@@ -9,6 +11,7 @@
|
|
|
9
11
|
"position_book": "倉位手冊",
|
|
10
12
|
"price": "價格",
|
|
11
13
|
"reset_zoom": "重置比例",
|
|
14
|
+
"sell": "賣出",
|
|
12
15
|
"sell_orders": "賣單",
|
|
13
16
|
"short": "短",
|
|
14
17
|
"short_positions": "短倉",
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { useQuery } from '@apollo/client';
|
|
3
|
+
import { useMediaQuery } from 'usehooks-ts';
|
|
4
|
+
import classnames from 'classnames';
|
|
5
|
+
import { ChartError, Spinner, SpinnerSize } from '@oanda/labs-widget-common';
|
|
6
|
+
import { getOrderPositionBooks } from '../gql/getOrderPositionBooks';
|
|
7
|
+
import { BookType } from '../gql/types/graphql';
|
|
8
|
+
import { Chart } from './components/Chart/Chart';
|
|
9
|
+
import { instrumentPrecisionConfig } from './config';
|
|
10
|
+
const ChartWithData = _ref => {
|
|
11
|
+
var _data$orderPositionBo;
|
|
12
|
+
let {
|
|
13
|
+
instrument,
|
|
14
|
+
bookType
|
|
15
|
+
} = _ref;
|
|
16
|
+
const isDesktop = useMediaQuery('(min-width: 768px)');
|
|
17
|
+
const {
|
|
18
|
+
loading,
|
|
19
|
+
data,
|
|
20
|
+
error
|
|
21
|
+
} = useQuery(getOrderPositionBooks, {
|
|
22
|
+
variables: {
|
|
23
|
+
instrument,
|
|
24
|
+
bookType,
|
|
25
|
+
recentHours: 1
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
const isError = !loading && !(data !== null && data !== void 0 && (_data$orderPositionBo = data.orderPositionBooks[0]) !== null && _data$orderPositionBo !== void 0 && _data$orderPositionBo.price) || !!error;
|
|
29
|
+
return React.createElement("div", {
|
|
30
|
+
className: classnames('lw-relative lw-w-full', {
|
|
31
|
+
'lw-h-[450px]': isDesktop,
|
|
32
|
+
'lw-h-[390px]': !isDesktop
|
|
33
|
+
})
|
|
34
|
+
}, isError && React.createElement("div", {
|
|
35
|
+
className: classnames('lw-absolute lw-left-0 lw-top-0 lw-flex lw-w-full lw-items-center lw-justify-center lw-border lw-border-solid lw-border-border-primary', {
|
|
36
|
+
'lw-h-full': isDesktop,
|
|
37
|
+
'lw-h-[calc(100%-40px)]': !isDesktop
|
|
38
|
+
})
|
|
39
|
+
}, React.createElement(ChartError, null)), loading && React.createElement("div", {
|
|
40
|
+
className: classnames('lw-absolute lw-left-0 lw-top-0 lw-flex lw-w-full lw-items-center lw-justify-center lw-border lw-border-solid lw-border-border-primary', {
|
|
41
|
+
'lw-h-full': isDesktop,
|
|
42
|
+
'lw-h-[calc(100%-40px)]': !isDesktop
|
|
43
|
+
})
|
|
44
|
+
}, React.createElement(Spinner, {
|
|
45
|
+
size: SpinnerSize.lg
|
|
46
|
+
})), data && React.createElement("div", {
|
|
47
|
+
className: "lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full"
|
|
48
|
+
}, React.createElement(Chart, {
|
|
49
|
+
data: data,
|
|
50
|
+
isOrderBook: bookType === BookType.Order,
|
|
51
|
+
precision: instrumentPrecisionConfig[instrument]
|
|
52
|
+
})));
|
|
53
|
+
};
|
|
54
|
+
export { ChartWithData };
|
|
55
|
+
//# sourceMappingURL=ChartWithData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartWithData.js","names":["React","useQuery","useMediaQuery","classnames","ChartError","Spinner","SpinnerSize","getOrderPositionBooks","BookType","Chart","instrumentPrecisionConfig","ChartWithData","_ref","_data$orderPositionBo","instrument","bookType","isDesktop","loading","data","error","variables","recentHours","isError","orderPositionBooks","price","createElement","className","size","lg","isOrderBook","Order","precision"],"sources":["../../../src/OrderBookWidget/ChartWithData.tsx"],"sourcesContent":["import React from 'react';\nimport { useQuery } from '@apollo/client';\nimport { useMediaQuery } from 'usehooks-ts';\nimport classnames from 'classnames';\nimport { ChartError, Spinner, SpinnerSize } from '@oanda/labs-widget-common';\nimport { ChartWithDataProps } from './types';\nimport { getOrderPositionBooks } from '../gql/getOrderPositionBooks';\nimport { GetOrderPositionBooksQuery, GetOrderPositionBooksQueryVariables, BookType } from '../gql/types/graphql';\nimport { Chart } from './components/Chart/Chart';\nimport { instrumentPrecisionConfig } from './config';\n\nconst ChartWithData = ({\n instrument,\n bookType,\n}: ChartWithDataProps) => {\n const isDesktop = useMediaQuery('(min-width: 768px)');\n\n const { loading, data, error } = useQuery<\n GetOrderPositionBooksQuery,\n GetOrderPositionBooksQueryVariables\n >(getOrderPositionBooks, {\n variables: {\n instrument,\n bookType,\n recentHours: 1,\n },\n });\n\n const isError = (!loading && !data?.orderPositionBooks[0]?.price) || !!error;\n\n return (\n <div className={classnames('lw-relative lw-w-full', {\n 'lw-h-[450px]': isDesktop,\n 'lw-h-[390px]': !isDesktop,\n })}\n >\n {isError && (\n <div className={\n classnames(\n 'lw-absolute lw-left-0 lw-top-0 lw-flex lw-w-full lw-items-center lw-justify-center lw-border lw-border-solid lw-border-border-primary',\n {\n 'lw-h-full': isDesktop,\n 'lw-h-[calc(100%-40px)]': !isDesktop,\n },\n )\n }\n >\n <ChartError />\n </div>\n )}\n {loading && (\n <div className={\n classnames(\n 'lw-absolute lw-left-0 lw-top-0 lw-flex lw-w-full lw-items-center lw-justify-center lw-border lw-border-solid lw-border-border-primary',\n {\n 'lw-h-full': isDesktop,\n 'lw-h-[calc(100%-40px)]': !isDesktop,\n },\n )\n }\n >\n <Spinner size={SpinnerSize.lg} />\n </div>\n )}\n {data && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full\">\n <Chart\n data={data}\n isOrderBook={bookType === BookType.Order}\n precision={instrumentPrecisionConfig[instrument]}\n />\n </div>\n )}\n </div>\n );\n};\n\nexport { ChartWithData };\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,QAAQ,QAAQ,gBAAgB;AACzC,SAASC,aAAa,QAAQ,aAAa;AAC3C,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,UAAU,EAAEC,OAAO,EAAEC,WAAW,QAAQ,2BAA2B;AAE5E,SAASC,qBAAqB,QAAQ,8BAA8B;AACpE,SAA0EC,QAAQ,QAAQ,sBAAsB;AAChH,SAASC,KAAK,QAAQ,0BAA0B;AAChD,SAASC,yBAAyB,QAAQ,UAAU;AAEpD,MAAMC,aAAa,GAAGC,IAAA,IAGI;EAAA,IAAAC,qBAAA;EAAA,IAHH;IACrBC,UAAU;IACVC;EACkB,CAAC,GAAAH,IAAA;EACnB,MAAMI,SAAS,GAAGd,aAAa,CAAC,oBAAoB,CAAC;EAErD,MAAM;IAAEe,OAAO;IAAEC,IAAI;IAAEC;EAAM,CAAC,GAAGlB,QAAQ,CAGvCM,qBAAqB,EAAE;IACvBa,SAAS,EAAE;MACTN,UAAU;MACVC,QAAQ;MACRM,WAAW,EAAE;IACf;EACF,CAAC,CAAC;EAEF,MAAMC,OAAO,GAAI,CAACL,OAAO,IAAI,EAACC,IAAI,aAAJA,IAAI,gBAAAL,qBAAA,GAAJK,IAAI,CAAEK,kBAAkB,CAAC,CAAC,CAAC,cAAAV,qBAAA,eAA3BA,qBAAA,CAA6BW,KAAK,KAAK,CAAC,CAACL,KAAK;EAE5E,OACEnB,KAAA,CAAAyB,aAAA;IAAKC,SAAS,EAAEvB,UAAU,CAAC,uBAAuB,EAAE;MAClD,cAAc,EAAEa,SAAS;MACzB,cAAc,EAAE,CAACA;IACnB,CAAC;EAAE,GAEAM,OAAO,IACRtB,KAAA,CAAAyB,aAAA;IAAKC,SAAS,EACRvB,UAAU,CACR,uIAAuI,EACvI;MACE,WAAW,EAAEa,SAAS;MACtB,wBAAwB,EAAE,CAACA;IAC7B,CACF;EACD,GAEHhB,KAAA,CAAAyB,aAAA,CAACrB,UAAU,MAAE,CACV,CACJ,EACAa,OAAO,IACRjB,KAAA,CAAAyB,aAAA;IAAKC,SAAS,EACRvB,UAAU,CACR,uIAAuI,EACvI;MACE,WAAW,EAAEa,SAAS;MACtB,wBAAwB,EAAE,CAACA;IAC7B,CACF;EACD,GAEHhB,KAAA,CAAAyB,aAAA,CAACpB,OAAO;IAACsB,IAAI,EAAErB,WAAW,CAACsB;EAAG,CAAE,CAC7B,CACJ,EACAV,IAAI,IACLlB,KAAA,CAAAyB,aAAA;IAAKC,SAAS,EAAC;EAA4D,GACzE1B,KAAA,CAAAyB,aAAA,CAAChB,KAAK;IACJS,IAAI,EAAEA,IAAK;IACXW,WAAW,EAAEd,QAAQ,KAAKP,QAAQ,CAACsB,KAAM;IACzCC,SAAS,EAAErB,yBAAyB,CAACI,UAAU;EAAE,CAClD,CACE,CAEF,CAAC;AAEV,CAAC;AAED,SAASH,aAAa"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { Select, Tabs } from '@oanda/labs-widget-common';
|
|
3
|
+
import { useLocale } from '@oanda/mono-i18n';
|
|
4
|
+
import { BookType } from '../gql/types/graphql';
|
|
5
|
+
import { instrumentSelectConfig, navigationConfig } from './config';
|
|
6
|
+
import { ChartWithData } from './ChartWithData';
|
|
7
|
+
const Main = _ref => {
|
|
8
|
+
let {
|
|
9
|
+
instrument
|
|
10
|
+
} = _ref;
|
|
11
|
+
const [bookType, setBookType] = useState(BookType.Order);
|
|
12
|
+
const [toolInstrument, setToolInstrument] = useState(instrumentSelectConfig[0]);
|
|
13
|
+
const {
|
|
14
|
+
lang
|
|
15
|
+
} = useLocale();
|
|
16
|
+
return React.createElement("div", {
|
|
17
|
+
"data-testid": "order-book-widget",
|
|
18
|
+
className: "lw-p-4 lw-pt-0 lw-text-sm lw-tracking-normal lw-text-black"
|
|
19
|
+
}, React.createElement(Tabs, {
|
|
20
|
+
activeTab: bookType,
|
|
21
|
+
handleClick: e => setBookType(e.currentTarget.value),
|
|
22
|
+
labelCallback: lang,
|
|
23
|
+
items: navigationConfig,
|
|
24
|
+
mobileFullWidth: true
|
|
25
|
+
}), !instrument && React.createElement("div", {
|
|
26
|
+
className: "lw-mb-6 lw-mt-12"
|
|
27
|
+
}, React.createElement(Select, {
|
|
28
|
+
selectLabel: lang('instrument'),
|
|
29
|
+
options: instrumentSelectConfig,
|
|
30
|
+
selectedOption: toolInstrument,
|
|
31
|
+
setSelectedOption: val => setToolInstrument(val)
|
|
32
|
+
})), React.createElement(ChartWithData, {
|
|
33
|
+
instrument: instrument || toolInstrument.id,
|
|
34
|
+
bookType: bookType
|
|
35
|
+
}));
|
|
36
|
+
};
|
|
37
|
+
export { Main };
|
|
38
|
+
//# sourceMappingURL=Main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Main.js","names":["React","useState","Select","Tabs","useLocale","BookType","instrumentSelectConfig","navigationConfig","ChartWithData","Main","_ref","instrument","bookType","setBookType","Order","toolInstrument","setToolInstrument","lang","createElement","className","activeTab","handleClick","e","currentTarget","value","labelCallback","items","mobileFullWidth","selectLabel","options","selectedOption","setSelectedOption","val","id"],"sources":["../../../src/OrderBookWidget/Main.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { Select, Tabs } from '@oanda/labs-widget-common';\nimport { useLocale } from '@oanda/mono-i18n';\nimport { InstrumentId, MainProps } from './types';\nimport { BookType } from '../gql/types/graphql';\nimport { instrumentSelectConfig, navigationConfig } from './config';\nimport { ChartWithData } from './ChartWithData';\n\nconst Main = ({ instrument }: MainProps) => {\n const [bookType, setBookType] = useState(BookType.Order);\n const [toolInstrument, setToolInstrument] = useState(instrumentSelectConfig[0]);\n const { lang } = useLocale();\n\n return (\n <div data-testid=\"order-book-widget\" className=\"lw-p-4 lw-pt-0 lw-text-sm lw-tracking-normal lw-text-black\">\n <Tabs\n activeTab={bookType}\n handleClick={(e) => setBookType(e.currentTarget.value as BookType)}\n labelCallback={lang}\n items={navigationConfig}\n mobileFullWidth\n />\n {!instrument && (\n <div className=\"lw-mb-6 lw-mt-12\">\n <Select\n selectLabel={lang('instrument')}\n options={instrumentSelectConfig}\n selectedOption={toolInstrument}\n setSelectedOption={\n (val) => setToolInstrument(val as { id: InstrumentId; label: string })\n }\n />\n </div>\n )}\n <ChartWithData instrument={instrument || toolInstrument.id} bookType={bookType} />\n </div>\n );\n};\n\nexport { Main };\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SAASC,MAAM,EAAEC,IAAI,QAAQ,2BAA2B;AACxD,SAASC,SAAS,QAAQ,kBAAkB;AAE5C,SAASC,QAAQ,QAAQ,sBAAsB;AAC/C,SAASC,sBAAsB,EAAEC,gBAAgB,QAAQ,UAAU;AACnE,SAASC,aAAa,QAAQ,iBAAiB;AAE/C,MAAMC,IAAI,GAAGC,IAAA,IAA+B;EAAA,IAA9B;IAAEC;EAAsB,CAAC,GAAAD,IAAA;EACrC,MAAM,CAACE,QAAQ,EAAEC,WAAW,CAAC,GAAGZ,QAAQ,CAACI,QAAQ,CAACS,KAAK,CAAC;EACxD,MAAM,CAACC,cAAc,EAAEC,iBAAiB,CAAC,GAAGf,QAAQ,CAACK,sBAAsB,CAAC,CAAC,CAAC,CAAC;EAC/E,MAAM;IAAEW;EAAK,CAAC,GAAGb,SAAS,CAAC,CAAC;EAE5B,OACEJ,KAAA,CAAAkB,aAAA;IAAK,eAAY,mBAAmB;IAACC,SAAS,EAAC;EAA4D,GACzGnB,KAAA,CAAAkB,aAAA,CAACf,IAAI;IACHiB,SAAS,EAAER,QAAS;IACpBS,WAAW,EAAGC,CAAC,IAAKT,WAAW,CAACS,CAAC,CAACC,aAAa,CAACC,KAAiB,CAAE;IACnEC,aAAa,EAAER,IAAK;IACpBS,KAAK,EAAEnB,gBAAiB;IACxBoB,eAAe;EAAA,CAChB,CAAC,EACD,CAAChB,UAAU,IACVX,KAAA,CAAAkB,aAAA;IAAKC,SAAS,EAAC;EAAkB,GAC/BnB,KAAA,CAAAkB,aAAA,CAAChB,MAAM;IACL0B,WAAW,EAAEX,IAAI,CAAC,YAAY,CAAE;IAChCY,OAAO,EAAEvB,sBAAuB;IAChCwB,cAAc,EAAEf,cAAe;IAC/BgB,iBAAiB,EACdC,GAAG,IAAKhB,iBAAiB,CAACgB,GAA0C;EACtE,CACF,CACE,CACN,EACDhC,KAAA,CAAAkB,aAAA,CAACV,aAAa;IAACG,UAAU,EAAEA,UAAU,IAAII,cAAc,CAACkB,EAAG;IAACrB,QAAQ,EAAEA;EAAS,CAAE,CAC9E,CAAC;AAEV,CAAC;AAED,SAASH,IAAI"}
|
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import { ApolloClient, InMemoryCache, ApolloProvider } from '@apollo/client';
|
|
3
3
|
import { LocaleProvider } from '@oanda/mono-i18n';
|
|
4
4
|
import { ThemeProvider, getLocale } from '@oanda/labs-widget-common';
|
|
5
|
-
import {
|
|
5
|
+
import { Main } from './Main';
|
|
6
6
|
import { translations } from '../translations';
|
|
7
7
|
const OrderBookWidget = _ref => {
|
|
8
8
|
let {
|
|
@@ -22,7 +22,7 @@ const OrderBookWidget = _ref => {
|
|
|
22
22
|
translations: translations
|
|
23
23
|
}, React.createElement(ApolloProvider, {
|
|
24
24
|
client: client
|
|
25
|
-
}, React.createElement(
|
|
25
|
+
}, React.createElement(Main, {
|
|
26
26
|
instrument: instrument
|
|
27
27
|
}))));
|
|
28
28
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrderBookWidget.js","names":["React","ApolloClient","InMemoryCache","ApolloProvider","LocaleProvider","ThemeProvider","getLocale","
|
|
1
|
+
{"version":3,"file":"OrderBookWidget.js","names":["React","ApolloClient","InMemoryCache","ApolloProvider","LocaleProvider","ThemeProvider","getLocale","Main","translations","OrderBookWidget","_ref","graphqlUrl","instrument","locale","theme","client","uri","cache","createElement"],"sources":["../../../src/OrderBookWidget/OrderBookWidget.tsx"],"sourcesContent":["import React from 'react';\nimport { ApolloClient, InMemoryCache, ApolloProvider } from '@apollo/client';\nimport { LocaleProvider } from '@oanda/mono-i18n';\nimport { ThemeProvider, getLocale } from '@oanda/labs-widget-common';\nimport { Main } from './Main';\nimport { OrderBookWidgetConfig } from './types';\nimport { translations } from '../translations';\n\nconst OrderBookWidget = ({\n graphqlUrl,\n instrument,\n locale,\n theme,\n}: OrderBookWidgetConfig) => {\n const client = new ApolloClient({\n uri: graphqlUrl,\n cache: new InMemoryCache(),\n });\n\n return (\n <ThemeProvider theme={theme}>\n <LocaleProvider locale={getLocale(locale)} translations={translations}>\n <ApolloProvider client={client}>\n <Main instrument={instrument} />\n </ApolloProvider>\n </LocaleProvider>\n </ThemeProvider>\n );\n};\n\nexport { OrderBookWidget };\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,YAAY,EAAEC,aAAa,EAAEC,cAAc,QAAQ,gBAAgB;AAC5E,SAASC,cAAc,QAAQ,kBAAkB;AACjD,SAASC,aAAa,EAAEC,SAAS,QAAQ,2BAA2B;AACpE,SAASC,IAAI,QAAQ,QAAQ;AAE7B,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAMC,eAAe,GAAGC,IAAA,IAKK;EAAA,IALJ;IACvBC,UAAU;IACVC,UAAU;IACVC,MAAM;IACNC;EACqB,CAAC,GAAAJ,IAAA;EACtB,MAAMK,MAAM,GAAG,IAAId,YAAY,CAAC;IAC9Be,GAAG,EAAEL,UAAU;IACfM,KAAK,EAAE,IAAIf,aAAa,CAAC;EAC3B,CAAC,CAAC;EAEF,OACEF,KAAA,CAAAkB,aAAA,CAACb,aAAa;IAACS,KAAK,EAAEA;EAAM,GAC1Bd,KAAA,CAAAkB,aAAA,CAACd,cAAc;IAACS,MAAM,EAAEP,SAAS,CAACO,MAAM,CAAE;IAACL,YAAY,EAAEA;EAAa,GACpER,KAAA,CAAAkB,aAAA,CAACf,cAAc;IAACY,MAAM,EAAEA;EAAO,GAC7Bf,KAAA,CAAAkB,aAAA,CAACX,IAAI;IAACK,UAAU,EAAEA;EAAW,CAAE,CACjB,CACF,CACH,CAAC;AAEpB,CAAC;AAED,SAASH,eAAe"}
|
|
@@ -3,14 +3,19 @@ import ReactEcharts from 'echarts-for-react';
|
|
|
3
3
|
import { registerTheme } from 'echarts';
|
|
4
4
|
import { Theme, ThemeContext, colorPalette, getChartTheme } from '@oanda/labs-widget-common';
|
|
5
5
|
import { useMediaQuery } from 'usehooks-ts';
|
|
6
|
-
import {
|
|
6
|
+
import { useLocale } from '@oanda/mono-i18n';
|
|
7
|
+
import { getResponsiveOption, getOption } from './getOption';
|
|
7
8
|
registerTheme('dark_theme', getChartTheme(Theme.Dark));
|
|
8
9
|
registerTheme('light_theme', getChartTheme(Theme.Light));
|
|
9
10
|
export const Chart = _ref => {
|
|
10
11
|
let {
|
|
11
12
|
data,
|
|
12
|
-
isOrderBook
|
|
13
|
+
isOrderBook,
|
|
14
|
+
precision
|
|
13
15
|
} = _ref;
|
|
16
|
+
const {
|
|
17
|
+
lang
|
|
18
|
+
} = useLocale();
|
|
14
19
|
const isDark = useContext(ThemeContext) === Theme.Dark;
|
|
15
20
|
const echartRef = useRef(null);
|
|
16
21
|
const isDesktop = useMediaQuery('(min-width: 768px)');
|
|
@@ -34,26 +39,30 @@ export const Chart = _ref => {
|
|
|
34
39
|
useEffect(() => {
|
|
35
40
|
if (echartRef.current) {
|
|
36
41
|
const echartInstance = echartRef.current.getEchartsInstance();
|
|
37
|
-
echartInstance.setOption(
|
|
42
|
+
echartInstance.setOption(getResponsiveOption({
|
|
38
43
|
isDark,
|
|
39
|
-
isOrderBook
|
|
44
|
+
isOrderBook,
|
|
45
|
+
isDesktop,
|
|
46
|
+
lang
|
|
40
47
|
}));
|
|
41
48
|
}
|
|
42
|
-
}, [echartRef, isDesktop, isDark, isOrderBook]);
|
|
49
|
+
}, [echartRef, isDesktop, isDark, isOrderBook, lang]);
|
|
43
50
|
return React.createElement("div", {
|
|
44
51
|
className: "lw-relative lw-w-full"
|
|
45
52
|
}, React.createElement("div", null, data && React.createElement(ReactEcharts, {
|
|
46
53
|
ref: echartRef,
|
|
47
54
|
theme: isDark ? 'dark_theme' : 'light_theme',
|
|
48
55
|
style: {
|
|
49
|
-
height: '450px',
|
|
56
|
+
height: isDesktop ? '450px' : '390px',
|
|
50
57
|
width: '100%'
|
|
51
58
|
},
|
|
52
59
|
option: getOption({
|
|
53
60
|
data,
|
|
54
|
-
precision
|
|
61
|
+
precision,
|
|
55
62
|
isDark,
|
|
56
|
-
isOrderBook
|
|
63
|
+
isOrderBook,
|
|
64
|
+
isDesktop,
|
|
65
|
+
lang
|
|
57
66
|
})
|
|
58
67
|
})));
|
|
59
68
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chart.js","names":["React","useRef","useEffect","useContext","ReactEcharts","registerTheme","Theme","ThemeContext","colorPalette","getChartTheme","useMediaQuery","
|
|
1
|
+
{"version":3,"file":"Chart.js","names":["React","useRef","useEffect","useContext","ReactEcharts","registerTheme","Theme","ThemeContext","colorPalette","getChartTheme","useMediaQuery","useLocale","getResponsiveOption","getOption","Dark","Light","Chart","_ref","data","isOrderBook","precision","lang","isDark","echartRef","isDesktop","current","echartInstance","getEchartsInstance","on","color","bottleGreenLight","setOption","bottleGreenLight70","orange70","raspberryDark70","orange","raspberryDark","createElement","className","ref","theme","style","height","width","option"],"sources":["../../../../../src/OrderBookWidget/components/Chart/Chart.tsx"],"sourcesContent":["import React, { useRef, useEffect, useContext } from 'react';\nimport ReactEcharts from 'echarts-for-react';\nimport { registerTheme, EChartsType, Color } from 'echarts';\nimport {\n Theme, ThemeContext, colorPalette, getChartTheme,\n} from '@oanda/labs-widget-common';\nimport { useMediaQuery } from 'usehooks-ts';\nimport { useLocale } from '@oanda/mono-i18n';\nimport { getResponsiveOption, getOption } from './getOption';\nimport { ChartProps } from './types';\n\nregisterTheme('dark_theme', getChartTheme(Theme.Dark));\nregisterTheme('light_theme', getChartTheme(Theme.Light));\n\nexport const Chart = ({ data, isOrderBook, precision }: ChartProps) => {\n const { lang } = useLocale();\n const isDark = useContext(ThemeContext) === Theme.Dark;\n const echartRef = useRef(null);\n const isDesktop = useMediaQuery('(min-width: 768px)');\n\n useEffect(() => {\n if (echartRef.current) {\n // @ts-ignore\n const echartInstance = echartRef.current.getEchartsInstance() as EChartsType;\n\n echartInstance.on('highlight', () => {\n if ((echartInstance.getOption().color as Color[])[0] === colorPalette.bottleGreenLight) {\n echartInstance.setOption({\n color: [\n colorPalette.bottleGreenLight70,\n isDark ? colorPalette.orange70 : colorPalette.raspberryDark70,\n ],\n });\n }\n });\n\n echartInstance.on('globalout', () => {\n echartInstance.setOption({\n color: [\n colorPalette.bottleGreenLight,\n isDark ? colorPalette.orange : colorPalette.raspberryDark,\n ],\n });\n });\n }\n }, [echartRef, isDark]);\n\n useEffect(() => {\n if (echartRef.current) {\n // @ts-ignore\n const echartInstance = echartRef.current.getEchartsInstance() as EChartsType;\n\n echartInstance.setOption(\n getResponsiveOption({\n isDark, isOrderBook, isDesktop, lang,\n }),\n );\n }\n }, [echartRef, isDesktop, isDark, isOrderBook, lang]);\n\n return (\n <div className=\"lw-relative lw-w-full\">\n <div>\n {data && (\n <ReactEcharts\n ref={echartRef}\n theme={isDark ? 'dark_theme' : 'light_theme'}\n style={{\n height: isDesktop ? '450px' : '390px',\n width: '100%',\n }}\n option={getOption({\n data, precision, isDark, isOrderBook, isDesktop, lang,\n })}\n />\n )}\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export const INITIAL_BARS = 80;
|
|
2
2
|
export const X_LABEL_SIZE = 40;
|
|
3
|
-
export const Y_LABEL_SIZE_MOBILE =
|
|
3
|
+
export const Y_LABEL_SIZE_MOBILE = 50;
|
|
4
4
|
export const Y_LABEL_SIZE_DESKTOP = 120;
|
|
5
5
|
export const CHART_WIDTH = 9999;
|
|
6
|
-
export const
|
|
6
|
+
export const CHART_HEIGHT_DESKTOP = 450;
|
|
7
|
+
export const CHART_HEIGHT_MOBILE = 390;
|
|
8
|
+
export const ZOOM_CONTROL_HEIGHT = 40;
|
|
7
9
|
//# sourceMappingURL=constants.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","names":["INITIAL_BARS","X_LABEL_SIZE","Y_LABEL_SIZE_MOBILE","Y_LABEL_SIZE_DESKTOP","CHART_WIDTH","
|
|
1
|
+
{"version":3,"file":"constants.js","names":["INITIAL_BARS","X_LABEL_SIZE","Y_LABEL_SIZE_MOBILE","Y_LABEL_SIZE_DESKTOP","CHART_WIDTH","CHART_HEIGHT_DESKTOP","CHART_HEIGHT_MOBILE","ZOOM_CONTROL_HEIGHT"],"sources":["../../../../../src/OrderBookWidget/components/Chart/constants.ts"],"sourcesContent":["export const INITIAL_BARS = 80;\n\nexport const X_LABEL_SIZE = 40;\nexport const Y_LABEL_SIZE_MOBILE = 50;\nexport const Y_LABEL_SIZE_DESKTOP = 120;\nexport const CHART_WIDTH = 9999;\nexport const CHART_HEIGHT_DESKTOP = 450;\nexport const CHART_HEIGHT_MOBILE = 390;\nexport const ZOOM_CONTROL_HEIGHT = 40;\n"],"mappings":"AAAA,OAAO,MAAMA,YAAY,GAAG,EAAE;AAE9B,OAAO,MAAMC,YAAY,GAAG,EAAE;AAC9B,OAAO,MAAMC,mBAAmB,GAAG,EAAE;AACrC,OAAO,MAAMC,oBAAoB,GAAG,GAAG;AACvC,OAAO,MAAMC,WAAW,GAAG,IAAI;AAC/B,OAAO,MAAMC,oBAAoB,GAAG,GAAG;AACvC,OAAO,MAAMC,mBAAmB,GAAG,GAAG;AACtC,OAAO,MAAMC,mBAAmB,GAAG,EAAE"}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
|
-
const tooltipFormatter =
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
const tooltipFormatter = _ref => {
|
|
2
|
+
let {
|
|
3
|
+
data,
|
|
4
|
+
precision,
|
|
5
|
+
isOrderBook,
|
|
6
|
+
lang
|
|
7
|
+
} = _ref;
|
|
8
|
+
const priceText = "".concat(lang('price'), ": ").concat(data[0].toFixed(precision));
|
|
9
|
+
const buyText = data[1] ? "<br />".concat(lang(isOrderBook ? 'buy' : 'long_positions'), ": ").concat(data[1], "%") : '';
|
|
10
|
+
const sellText = data[2] ? "<br />".concat(lang(isOrderBook ? 'sell' : 'short_positions'), ": ").concat(data[2] * -1, "%") : '';
|
|
5
11
|
return priceText + buyText + sellText;
|
|
6
12
|
};
|
|
7
13
|
export { tooltipFormatter };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatters.js","names":["tooltipFormatter","data","precision","isOrderBook","priceText","concat","toFixed","buyText","sellText"],"sources":["../../../../../src/OrderBookWidget/components/Chart/formatters.ts"],"sourcesContent":["import { TooltipFormatterType } from './types';\n\nconst tooltipFormatter: TooltipFormatterType = (data, precision, isOrderBook) => {\n const priceText =
|
|
1
|
+
{"version":3,"file":"formatters.js","names":["tooltipFormatter","_ref","data","precision","isOrderBook","lang","priceText","concat","toFixed","buyText","sellText"],"sources":["../../../../../src/OrderBookWidget/components/Chart/formatters.ts"],"sourcesContent":["import { TooltipFormatterType } from './types';\n\nconst tooltipFormatter: TooltipFormatterType = ({\n data, precision, isOrderBook, lang,\n}) => {\n const priceText = `${lang('price')}: ${data[0].toFixed(precision)}`;\n const buyText = data[1] ? `<br />${lang(isOrderBook ? 'buy' : 'long_positions')}: ${data[1]}%` : '';\n const sellText = data[2] ? `<br />${lang(isOrderBook ? 'sell' : 'short_positions')}: ${data[2] * -1}%` : '';\n\n return priceText + buyText + sellText;\n};\n\nexport { tooltipFormatter };\n"],"mappings":"AAEA,MAAMA,gBAAsC,GAAGC,IAAA,IAEzC;EAAA,IAF0C;IAC9CC,IAAI;IAAEC,SAAS;IAAEC,WAAW;IAAEC;EAChC,CAAC,GAAAJ,IAAA;EACC,MAAMK,SAAS,MAAAC,MAAA,CAAMF,IAAI,CAAC,OAAO,CAAC,QAAAE,MAAA,CAAKL,IAAI,CAAC,CAAC,CAAC,CAACM,OAAO,CAACL,SAAS,CAAC,CAAE;EACnE,MAAMM,OAAO,GAAGP,IAAI,CAAC,CAAC,CAAC,YAAAK,MAAA,CAAYF,IAAI,CAACD,WAAW,GAAG,KAAK,GAAG,gBAAgB,CAAC,QAAAG,MAAA,CAAKL,IAAI,CAAC,CAAC,CAAC,SAAM,EAAE;EACnG,MAAMQ,QAAQ,GAAGR,IAAI,CAAC,CAAC,CAAC,YAAAK,MAAA,CAAYF,IAAI,CAACD,WAAW,GAAG,MAAM,GAAG,iBAAiB,CAAC,QAAAG,MAAA,CAAKL,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAM,EAAE;EAE3G,OAAOI,SAAS,GAAGG,OAAO,GAAGC,QAAQ;AACvC,CAAC;AAED,SAASV,gBAAgB"}
|
|
@@ -1,25 +1,44 @@
|
|
|
1
1
|
import { colorPalette, getGridLines, getZoomControls } from '@oanda/labs-widget-common';
|
|
2
|
-
import { INITIAL_BARS, CHART_WIDTH,
|
|
2
|
+
import { INITIAL_BARS, CHART_WIDTH, CHART_HEIGHT_DESKTOP, CHART_HEIGHT_MOBILE, X_LABEL_SIZE, Y_LABEL_SIZE_DESKTOP, Y_LABEL_SIZE_MOBILE, ZOOM_CONTROL_HEIGHT } from './constants';
|
|
3
3
|
import { tooltipFormatter } from './formatters';
|
|
4
|
-
export const
|
|
4
|
+
export const getResponsiveOption = _ref => {
|
|
5
5
|
let {
|
|
6
6
|
isDark,
|
|
7
|
-
isOrderBook
|
|
7
|
+
isOrderBook,
|
|
8
|
+
isDesktop,
|
|
9
|
+
lang
|
|
8
10
|
} = _ref;
|
|
9
11
|
const desktopGridLines = getGridLines({
|
|
10
12
|
isDark,
|
|
11
13
|
chartWidth: CHART_WIDTH,
|
|
12
|
-
chartHeight:
|
|
13
|
-
xLabelsSize: X_LABEL_SIZE,
|
|
14
|
-
yLabelSize: Y_LABEL_SIZE_DESKTOP
|
|
14
|
+
chartHeight: isDesktop ? CHART_HEIGHT_DESKTOP : CHART_HEIGHT_MOBILE,
|
|
15
|
+
xLabelsSize: isDesktop ? X_LABEL_SIZE : X_LABEL_SIZE + ZOOM_CONTROL_HEIGHT,
|
|
16
|
+
yLabelSize: isDesktop ? Y_LABEL_SIZE_DESKTOP : Y_LABEL_SIZE_MOBILE,
|
|
17
|
+
bottomLeftBox: isDesktop,
|
|
18
|
+
marginBottom: isDesktop ? 0 : ZOOM_CONTROL_HEIGHT
|
|
15
19
|
});
|
|
16
20
|
return {
|
|
17
21
|
grid: [{
|
|
18
22
|
name: 'main-grid',
|
|
19
23
|
top: '48px',
|
|
20
24
|
left: '0px',
|
|
21
|
-
right: "".concat(Y_LABEL_SIZE_DESKTOP, "px"),
|
|
22
|
-
bottom: "".concat(X_LABEL_SIZE, "px")
|
|
25
|
+
right: "".concat(isDesktop ? Y_LABEL_SIZE_DESKTOP : Y_LABEL_SIZE_MOBILE, "px"),
|
|
26
|
+
bottom: "".concat(isDesktop ? X_LABEL_SIZE : X_LABEL_SIZE + ZOOM_CONTROL_HEIGHT, "px")
|
|
27
|
+
}],
|
|
28
|
+
yAxis: {
|
|
29
|
+
axisLabel: {
|
|
30
|
+
margin: isDesktop ? 10 : 0
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
series: [{
|
|
34
|
+
type: 'custom',
|
|
35
|
+
name: 'current-price',
|
|
36
|
+
id: 'current-price',
|
|
37
|
+
markLine: {
|
|
38
|
+
label: {
|
|
39
|
+
padding: isDesktop ? [5, 15, 5, 15] : [5, 12, 5, 5]
|
|
40
|
+
}
|
|
41
|
+
}
|
|
23
42
|
}],
|
|
24
43
|
graphic: [...desktopGridLines, {
|
|
25
44
|
type: 'group',
|
|
@@ -51,12 +70,12 @@ export const getDesktopOption = _ref => {
|
|
|
51
70
|
fill: isDark ? colorPalette.white : colorPalette.black,
|
|
52
71
|
width: 70,
|
|
53
72
|
height: 30,
|
|
54
|
-
text: isOrderBook ? '
|
|
73
|
+
text: lang(isOrderBook ? 'sell' : 'short')
|
|
55
74
|
}
|
|
56
75
|
}]
|
|
57
76
|
}, {
|
|
58
77
|
type: 'group',
|
|
59
|
-
right: '
|
|
78
|
+
right: "".concat((isDesktop ? Y_LABEL_SIZE_DESKTOP : Y_LABEL_SIZE_MOBILE) + 8, "px'"),
|
|
60
79
|
top: '56px',
|
|
61
80
|
silent: true,
|
|
62
81
|
children: [{
|
|
@@ -84,7 +103,7 @@ export const getDesktopOption = _ref => {
|
|
|
84
103
|
fill: isDark ? colorPalette.white : colorPalette.black,
|
|
85
104
|
width: 70,
|
|
86
105
|
height: 30,
|
|
87
|
-
text: isOrderBook ? '
|
|
106
|
+
text: lang(isOrderBook ? 'buy' : 'long')
|
|
88
107
|
}
|
|
89
108
|
}]
|
|
90
109
|
}]
|
|
@@ -96,11 +115,14 @@ export const getOption = _ref2 => {
|
|
|
96
115
|
data,
|
|
97
116
|
precision,
|
|
98
117
|
isDark,
|
|
99
|
-
isOrderBook
|
|
118
|
+
isOrderBook,
|
|
119
|
+
isDesktop,
|
|
120
|
+
lang
|
|
100
121
|
} = _ref2;
|
|
101
122
|
const buckets = ((_data$orderPositionBo = data.orderPositionBooks[0]) === null || _data$orderPositionBo === void 0 ? void 0 : _data$orderPositionBo.buckets) || [];
|
|
102
123
|
const bucketWidth = (_data$orderPositionBo2 = data.orderPositionBooks[0]) === null || _data$orderPositionBo2 === void 0 ? void 0 : _data$orderPositionBo2.bucketWidth;
|
|
103
124
|
const price = (_data$orderPositionBo3 = data.orderPositionBooks[0]) === null || _data$orderPositionBo3 === void 0 ? void 0 : _data$orderPositionBo3.price;
|
|
125
|
+
const bucketPrecision = bucketWidth.toString().split('.')[1].length || 0;
|
|
104
126
|
const dataset = buckets.map(item => [item.price, Number(item.longCountPercent), Number(item.shortCountPercent) * -1]);
|
|
105
127
|
const zoomInitialStartValue = price - bucketWidth * INITIAL_BARS * 0.5;
|
|
106
128
|
const zoomInitialEndValue = price + bucketWidth * INITIAL_BARS * 0.5;
|
|
@@ -111,7 +133,7 @@ export const getOption = _ref2 => {
|
|
|
111
133
|
animation: false,
|
|
112
134
|
color: [colorPalette.bottleGreenLight, isDark ? colorPalette.orange : colorPalette.raspberryDark],
|
|
113
135
|
title: {
|
|
114
|
-
text: isOrderBook ? '
|
|
136
|
+
text: lang(isOrderBook ? 'open_orders' : 'open_positions').toUpperCase(),
|
|
115
137
|
padding: 20,
|
|
116
138
|
textStyle: {
|
|
117
139
|
fontSize: 14
|
|
@@ -136,8 +158,21 @@ export const getOption = _ref2 => {
|
|
|
136
158
|
axisPointer: {
|
|
137
159
|
axis: 'y'
|
|
138
160
|
},
|
|
139
|
-
formatter: val => tooltipFormatter(
|
|
161
|
+
formatter: val => tooltipFormatter({
|
|
162
|
+
data: val[0].data,
|
|
163
|
+
precision: bucketPrecision,
|
|
164
|
+
isOrderBook,
|
|
165
|
+
lang
|
|
166
|
+
}),
|
|
167
|
+
extraCssText: 'z-index: 1'
|
|
140
168
|
},
|
|
169
|
+
grid: [{
|
|
170
|
+
name: 'main-grid',
|
|
171
|
+
top: '48px',
|
|
172
|
+
left: '0px',
|
|
173
|
+
right: "".concat(isDesktop ? Y_LABEL_SIZE_DESKTOP : Y_LABEL_SIZE_MOBILE, "px"),
|
|
174
|
+
bottom: "".concat(isDesktop ? X_LABEL_SIZE : X_LABEL_SIZE + ZOOM_CONTROL_HEIGHT, "px")
|
|
175
|
+
}],
|
|
141
176
|
xAxis: {
|
|
142
177
|
type: 'value',
|
|
143
178
|
min: range * -1.05,
|
|
@@ -165,10 +200,11 @@ export const getOption = _ref2 => {
|
|
|
165
200
|
show: false
|
|
166
201
|
},
|
|
167
202
|
axisLabel: {
|
|
203
|
+
margin: isDesktop ? 10 : 0,
|
|
168
204
|
showMaxLabel: false,
|
|
169
205
|
showMinLabel: false,
|
|
170
206
|
padding: [0, 0, 0, 10],
|
|
171
|
-
formatter: value => value.toFixed(
|
|
207
|
+
formatter: value => value.toFixed(bucketPrecision)
|
|
172
208
|
}
|
|
173
209
|
},
|
|
174
210
|
dataset: {
|
|
@@ -176,6 +212,8 @@ export const getOption = _ref2 => {
|
|
|
176
212
|
},
|
|
177
213
|
series: [{
|
|
178
214
|
type: 'custom',
|
|
215
|
+
name: 'sell-short',
|
|
216
|
+
id: 'sell-short',
|
|
179
217
|
clip: true,
|
|
180
218
|
encode: {
|
|
181
219
|
x: 1,
|
|
@@ -209,32 +247,14 @@ export const getOption = _ref2 => {
|
|
|
209
247
|
}
|
|
210
248
|
}, {
|
|
211
249
|
type: 'custom',
|
|
250
|
+
name: 'buy-long',
|
|
251
|
+
id: 'buy-long',
|
|
212
252
|
clip: true,
|
|
213
253
|
encode: {
|
|
214
254
|
x: 1,
|
|
215
255
|
y: 0,
|
|
216
256
|
tooltip: 2
|
|
217
257
|
},
|
|
218
|
-
markLine: {
|
|
219
|
-
animation: false,
|
|
220
|
-
silent: true,
|
|
221
|
-
precision: 4,
|
|
222
|
-
symbol: ['none', 'triangle'],
|
|
223
|
-
symbolRotate: 90,
|
|
224
|
-
symbolSize: [20, 10],
|
|
225
|
-
lineStyle: {
|
|
226
|
-
color: isDark ? colorPalette.orange : colorPalette.bottleGreenDark,
|
|
227
|
-
width: 1
|
|
228
|
-
},
|
|
229
|
-
label: {
|
|
230
|
-
padding: [5, 15, 5, 15],
|
|
231
|
-
color: isDark ? colorPalette.black : colorPalette.white,
|
|
232
|
-
backgroundColor: isDark ? colorPalette.orange : colorPalette.bottleGreenDark
|
|
233
|
-
},
|
|
234
|
-
data: [{
|
|
235
|
-
yAxis: price
|
|
236
|
-
}]
|
|
237
|
-
},
|
|
238
258
|
renderItem: (params, api) => {
|
|
239
259
|
const yValue = api.value(0);
|
|
240
260
|
const xStart = api.coord([api.value(2), yValue]);
|
|
@@ -260,6 +280,31 @@ export const getOption = _ref2 => {
|
|
|
260
280
|
}
|
|
261
281
|
};
|
|
262
282
|
}
|
|
283
|
+
}, {
|
|
284
|
+
type: 'custom',
|
|
285
|
+
name: 'current-price',
|
|
286
|
+
id: 'current-price',
|
|
287
|
+
markLine: {
|
|
288
|
+
animation: false,
|
|
289
|
+
silent: true,
|
|
290
|
+
precision,
|
|
291
|
+
symbol: ['none', 'triangle'],
|
|
292
|
+
symbolRotate: 90,
|
|
293
|
+
symbolSize: [20, 10],
|
|
294
|
+
lineStyle: {
|
|
295
|
+
color: isDark ? colorPalette.orange : colorPalette.bottleGreenDark,
|
|
296
|
+
width: 1
|
|
297
|
+
},
|
|
298
|
+
label: {
|
|
299
|
+
padding: isDesktop ? [5, 15, 5, 15] : [5, 12, 5, 5],
|
|
300
|
+
color: isDark ? colorPalette.black : colorPalette.white,
|
|
301
|
+
backgroundColor: isDark ? colorPalette.orange : colorPalette.bottleGreenDark
|
|
302
|
+
},
|
|
303
|
+
data: [{
|
|
304
|
+
yAxis: price
|
|
305
|
+
}]
|
|
306
|
+
},
|
|
307
|
+
renderItem: () => null
|
|
263
308
|
}]
|
|
264
309
|
};
|
|
265
310
|
};
|