@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.
Files changed (73) hide show
  1. package/CHANGELOG.md +556 -0
  2. package/dist/main/OrderBookWidget/ChartWithData.js +62 -0
  3. package/dist/main/OrderBookWidget/ChartWithData.js.map +1 -0
  4. package/dist/main/OrderBookWidget/Main.js +46 -0
  5. package/dist/main/OrderBookWidget/Main.js.map +1 -0
  6. package/dist/main/OrderBookWidget/OrderBookWidget.js +2 -2
  7. package/dist/main/OrderBookWidget/OrderBookWidget.js.map +1 -1
  8. package/dist/main/OrderBookWidget/components/Chart/Chart.js +16 -7
  9. package/dist/main/OrderBookWidget/components/Chart/Chart.js.map +1 -1
  10. package/dist/main/OrderBookWidget/components/Chart/constants.js +5 -3
  11. package/dist/main/OrderBookWidget/components/Chart/constants.js.map +1 -1
  12. package/dist/main/OrderBookWidget/components/Chart/formatters.js +10 -4
  13. package/dist/main/OrderBookWidget/components/Chart/formatters.js.map +1 -1
  14. package/dist/main/OrderBookWidget/components/Chart/getOption.js +81 -36
  15. package/dist/main/OrderBookWidget/components/Chart/getOption.js.map +1 -1
  16. package/dist/main/OrderBookWidget/components/Chart/types.js.map +1 -1
  17. package/dist/main/OrderBookWidget/config.js +69 -1
  18. package/dist/main/OrderBookWidget/config.js.map +1 -1
  19. package/dist/main/OrderBookWidget/types.js +20 -0
  20. package/dist/main/OrderBookWidget/types.js.map +1 -1
  21. package/dist/main/translations/sources/en.json +3 -0
  22. package/dist/main/translations/sources/zh_TW.json +3 -0
  23. package/dist/module/OrderBookWidget/ChartWithData.js +55 -0
  24. package/dist/module/OrderBookWidget/ChartWithData.js.map +1 -0
  25. package/dist/module/OrderBookWidget/Main.js +38 -0
  26. package/dist/module/OrderBookWidget/Main.js.map +1 -0
  27. package/dist/module/OrderBookWidget/OrderBookWidget.js +2 -2
  28. package/dist/module/OrderBookWidget/OrderBookWidget.js.map +1 -1
  29. package/dist/module/OrderBookWidget/components/Chart/Chart.js +17 -8
  30. package/dist/module/OrderBookWidget/components/Chart/Chart.js.map +1 -1
  31. package/dist/module/OrderBookWidget/components/Chart/constants.js +4 -2
  32. package/dist/module/OrderBookWidget/components/Chart/constants.js.map +1 -1
  33. package/dist/module/OrderBookWidget/components/Chart/formatters.js +10 -4
  34. package/dist/module/OrderBookWidget/components/Chart/formatters.js.map +1 -1
  35. package/dist/module/OrderBookWidget/components/Chart/getOption.js +80 -35
  36. package/dist/module/OrderBookWidget/components/Chart/getOption.js.map +1 -1
  37. package/dist/module/OrderBookWidget/components/Chart/types.js.map +1 -1
  38. package/dist/module/OrderBookWidget/config.js +69 -1
  39. package/dist/module/OrderBookWidget/config.js.map +1 -1
  40. package/dist/module/OrderBookWidget/types.js +19 -1
  41. package/dist/module/OrderBookWidget/types.js.map +1 -1
  42. package/dist/module/translations/sources/en.json +3 -0
  43. package/dist/module/translations/sources/zh_TW.json +3 -0
  44. package/dist/types/OrderBookWidget/ChartWithData.d.ts +4 -0
  45. package/dist/types/OrderBookWidget/Main.d.ts +4 -0
  46. package/dist/types/OrderBookWidget/components/Chart/Chart.d.ts +1 -1
  47. package/dist/types/OrderBookWidget/components/Chart/constants.d.ts +4 -2
  48. package/dist/types/OrderBookWidget/components/Chart/getOption.d.ts +16 -1
  49. package/dist/types/OrderBookWidget/components/Chart/types.d.ts +11 -1
  50. package/dist/types/OrderBookWidget/config.d.ts +7 -1
  51. package/dist/types/OrderBookWidget/types.d.ts +26 -3
  52. package/package.json +3 -3
  53. package/src/OrderBookWidget/ChartWithData.tsx +78 -0
  54. package/src/OrderBookWidget/Main.tsx +40 -0
  55. package/src/OrderBookWidget/OrderBookWidget.tsx +2 -2
  56. package/src/OrderBookWidget/components/Chart/Chart.tsx +12 -6
  57. package/src/OrderBookWidget/components/Chart/constants.ts +4 -2
  58. package/src/OrderBookWidget/components/Chart/formatters.ts +6 -4
  59. package/src/OrderBookWidget/components/Chart/getOption.ts +93 -39
  60. package/src/OrderBookWidget/components/Chart/types.ts +11 -3
  61. package/src/OrderBookWidget/config.ts +70 -1
  62. package/src/OrderBookWidget/types.ts +28 -3
  63. package/src/translations/sources/en.json +3 -0
  64. package/src/translations/sources/zh_TW.json +3 -0
  65. package/test/Main.test.tsx +129 -0
  66. package/test/chartOptions.test.ts +20 -0
  67. package/dist/main/OrderBookWidget/Widget.js +0 -61
  68. package/dist/main/OrderBookWidget/Widget.js.map +0 -1
  69. package/dist/module/OrderBookWidget/Widget.js +0 -53
  70. package/dist/module/OrderBookWidget/Widget.js.map +0 -1
  71. package/dist/types/OrderBookWidget/Widget.d.ts +0 -4
  72. package/src/OrderBookWidget/Widget.tsx +0 -62
  73. 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: string;\n locale: Locale;\n theme?: Theme;\n}\n\nexport interface OrderBookWrapperConfig extends OrderBookWidgetConfig {\n renderElementId: string;\n}\n\nexport interface WidgetProps {\n instrument: string;\n}\n"],"mappings":""}
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 { Widget } from './Widget';
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(Widget, {
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","Widget","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 { Widget } from './Widget';\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 <Widget 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,MAAM,QAAQ,UAAU;AAEjC,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,MAAM;IAACK,UAAU,EAAEA;EAAW,CAAE,CACnB,CACF,CACH,CAAC;AAEpB,CAAC;AAED,SAASH,eAAe"}
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 { getDesktopOption, getOption } from './getOption';
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(getDesktopOption({
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: 4,
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","getDesktopOption","getOption","Dark","Light","Chart","_ref","data","isOrderBook","isDark","echartRef","isDesktop","current","echartInstance","getEchartsInstance","on","color","bottleGreenLight","setOption","bottleGreenLight70","orange70","raspberryDark70","orange","raspberryDark","createElement","className","ref","theme","style","height","width","option","precision"],"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 { getDesktopOption, 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 }: ChartProps) => {\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(getDesktopOption({ isDark, isOrderBook }));\n }\n }, [echartRef, isDesktop, isDark, isOrderBook]);\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: '450px',\n width: '100%',\n }}\n option={getOption({\n data, precision: 4, isDark, isOrderBook,\n })}\n />\n )}\n </div>\n </div>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,MAAM,EAAEC,SAAS,EAAEC,UAAU,QAAQ,OAAO;AAC5D,OAAOC,YAAY,MAAM,mBAAmB;AAC5C,SAASC,aAAa,QAA4B,SAAS;AAC3D,SACEC,KAAK,EAAEC,YAAY,EAAEC,YAAY,EAAEC,aAAa,QAC3C,2BAA2B;AAClC,SAASC,aAAa,QAAQ,aAAa;AAC3C,SAASC,gBAAgB,EAAEC,SAAS,QAAQ,aAAa;AAGzDP,aAAa,CAAC,YAAY,EAAEI,aAAa,CAACH,KAAK,CAACO,IAAI,CAAC,CAAC;AACtDR,aAAa,CAAC,aAAa,EAAEI,aAAa,CAACH,KAAK,CAACQ,KAAK,CAAC,CAAC;AAExD,OAAO,MAAMC,KAAK,GAAGC,IAAA,IAAuC;EAAA,IAAtC;IAAEC,IAAI;IAAEC;EAAwB,CAAC,GAAAF,IAAA;EACrD,MAAMG,MAAM,GAAGhB,UAAU,CAACI,YAAY,CAAC,KAAKD,KAAK,CAACO,IAAI;EACtD,MAAMO,SAAS,GAAGnB,MAAM,CAAC,IAAI,CAAC;EAC9B,MAAMoB,SAAS,GAAGX,aAAa,CAAC,oBAAoB,CAAC;EAErDR,SAAS,CAAC,MAAM;IACd,IAAIkB,SAAS,CAACE,OAAO,EAAE;MAErB,MAAMC,cAAc,GAAGH,SAAS,CAACE,OAAO,CAACE,kBAAkB,CAAC,CAAgB;MAE5ED,cAAc,CAACE,EAAE,CAAC,WAAW,EAAE,MAAM;QACnC,IAAKF,cAAc,CAACX,SAAS,CAAC,CAAC,CAACc,KAAK,CAAa,CAAC,CAAC,KAAKlB,YAAY,CAACmB,gBAAgB,EAAE;UACtFJ,cAAc,CAACK,SAAS,CAAC;YACvBF,KAAK,EAAE,CACLlB,YAAY,CAACqB,kBAAkB,EAC/BV,MAAM,GAAGX,YAAY,CAACsB,QAAQ,GAAGtB,YAAY,CAACuB,eAAe;UAEjE,CAAC,CAAC;QACJ;MACF,CAAC,CAAC;MAEFR,cAAc,CAACE,EAAE,CAAC,WAAW,EAAE,MAAM;QACnCF,cAAc,CAACK,SAAS,CAAC;UACvBF,KAAK,EAAE,CACLlB,YAAY,CAACmB,gBAAgB,EAC7BR,MAAM,GAAGX,YAAY,CAACwB,MAAM,GAAGxB,YAAY,CAACyB,aAAa;QAE7D,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ;EACF,CAAC,EAAE,CAACb,SAAS,EAAED,MAAM,CAAC,CAAC;EAEvBjB,SAAS,CAAC,MAAM;IACd,IAAIkB,SAAS,CAACE,OAAO,EAAE;MAErB,MAAMC,cAAc,GAAGH,SAAS,CAACE,OAAO,CAACE,kBAAkB,CAAC,CAAgB;MAE5ED,cAAc,CAACK,SAAS,CAACjB,gBAAgB,CAAC;QAAEQ,MAAM;QAAED;MAAY,CAAC,CAAC,CAAC;IACrE;EACF,CAAC,EAAE,CAACE,SAAS,EAAEC,SAAS,EAAEF,MAAM,EAAED,WAAW,CAAC,CAAC;EAE/C,OACElB,KAAA,CAAAkC,aAAA;IAAKC,SAAS,EAAC;EAAuB,GACpCnC,KAAA,CAAAkC,aAAA,cACGjB,IAAI,IACHjB,KAAA,CAAAkC,aAAA,CAAC9B,YAAY;IACXgC,GAAG,EAAEhB,SAAU;IACfiB,KAAK,EAAElB,MAAM,GAAG,YAAY,GAAG,aAAc;IAC7CmB,KAAK,EAAE;MACLC,MAAM,EAAE,OAAO;MACfC,KAAK,EAAE;IACT,CAAE;IACFC,MAAM,EAAE7B,SAAS,CAAC;MAChBK,IAAI;MAAEyB,SAAS,EAAE,CAAC;MAAEvB,MAAM;MAAED;IAC9B,CAAC;EAAE,CACJ,CAEA,CACF,CAAC;AAEV,CAAC"}
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 = 35;
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 CHART_HEIGHT = 450;
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","CHART_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 = 35;\nexport const Y_LABEL_SIZE_DESKTOP = 120;\nexport const CHART_WIDTH = 9999;\nexport const CHART_HEIGHT = 450;\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,YAAY,GAAG,GAAG"}
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 = (data, precision, isOrderBook) => {
2
- const priceText = "Price: ".concat(data[0].toFixed(precision));
3
- const buyText = data[1] ? "<br />".concat(isOrderBook ? 'Buy' : 'Long positions', ": ").concat(data[1], "%") : '';
4
- const sellText = data[2] ? "<br />".concat(isOrderBook ? 'Sell' : 'Short positions', ": ").concat(data[2] * -1, "%") : '';
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 = `Price: ${data[0].toFixed(precision)}`;\n const buyText = data[1] ? `<br />${isOrderBook ? 'Buy' : 'Long positions'}: ${data[1]}%` : '';\n const sellText = data[2] ? `<br />${isOrderBook ? 'Sell' : 'Short positions'}: ${data[2] * -1}%` : '';\n\n return priceText + buyText + sellText;\n};\n\nexport { tooltipFormatter };\n"],"mappings":"AAEA,MAAMA,gBAAsC,GAAGA,CAACC,IAAI,EAAEC,SAAS,EAAEC,WAAW,KAAK;EAC/E,MAAMC,SAAS,aAAAC,MAAA,CAAaJ,IAAI,CAAC,CAAC,CAAC,CAACK,OAAO,CAACJ,SAAS,CAAC,CAAE;EACxD,MAAMK,OAAO,GAAGN,IAAI,CAAC,CAAC,CAAC,YAAAI,MAAA,CAAYF,WAAW,GAAG,KAAK,GAAG,gBAAgB,QAAAE,MAAA,CAAKJ,IAAI,CAAC,CAAC,CAAC,SAAM,EAAE;EAC7F,MAAMO,QAAQ,GAAGP,IAAI,CAAC,CAAC,CAAC,YAAAI,MAAA,CAAYF,WAAW,GAAG,MAAM,GAAG,iBAAiB,QAAAE,MAAA,CAAKJ,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAM,EAAE;EAErG,OAAOG,SAAS,GAAGG,OAAO,GAAGC,QAAQ;AACvC,CAAC;AAED,SAASR,gBAAgB"}
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, CHART_HEIGHT, X_LABEL_SIZE, Y_LABEL_SIZE_DESKTOP } from './constants';
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 getDesktopOption = _ref => {
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: CHART_HEIGHT,
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 ? 'Sell' : 'Short'
73
+ text: lang(isOrderBook ? 'sell' : 'short')
55
74
  }
56
75
  }]
57
76
  }, {
58
77
  type: 'group',
59
- right: '128px',
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 ? 'Buy' : 'Long'
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 ? 'OPEN ORDERS' : 'OPEN POSITIONS',
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(val[0].data, precision, isOrderBook)
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(precision)
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
  };