@oanda/labs-crowd-view-widget 1.0.43 → 1.0.45

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 (180) hide show
  1. package/CHANGELOG.md +364 -0
  2. package/dist/main/CrowdViewWidget/CrowdViewWidget.js +3 -3
  3. package/dist/main/CrowdViewWidget/CrowdViewWidget.js.map +1 -1
  4. package/dist/main/CrowdViewWidget/Main.js +22 -12
  5. package/dist/main/CrowdViewWidget/Main.js.map +1 -1
  6. package/dist/main/CrowdViewWidget/components/Chart/Chart.js +16 -17
  7. package/dist/main/CrowdViewWidget/components/Chart/Chart.js.map +1 -1
  8. package/dist/main/CrowdViewWidget/components/Chart/ChartWithData.js +16 -13
  9. package/dist/main/CrowdViewWidget/components/Chart/ChartWithData.js.map +1 -1
  10. package/dist/main/CrowdViewWidget/components/Chart/{getOption.js → chartOptions.js} +79 -62
  11. package/dist/main/CrowdViewWidget/components/Chart/chartOptions.js.map +1 -0
  12. package/dist/main/CrowdViewWidget/components/Chart/index.js +44 -0
  13. package/dist/main/CrowdViewWidget/components/Chart/index.js.map +1 -1
  14. package/dist/main/CrowdViewWidget/components/Chart/types.js.map +1 -1
  15. package/dist/main/CrowdViewWidget/components/Chart/useCrowdViewData.js +184 -0
  16. package/dist/main/CrowdViewWidget/components/Chart/useCrowdViewData.js.map +1 -0
  17. package/dist/main/CrowdViewWidget/components/Chart/utils/chartUtils.js +107 -0
  18. package/dist/main/CrowdViewWidget/components/Chart/utils/chartUtils.js.map +1 -0
  19. package/dist/main/CrowdViewWidget/components/Legend/Legend.js +3 -2
  20. package/dist/main/CrowdViewWidget/components/Legend/Legend.js.map +1 -1
  21. package/dist/main/CrowdViewWidget/components/Legend/LegendBar.js +9 -11
  22. package/dist/main/CrowdViewWidget/components/Legend/LegendBar.js.map +1 -1
  23. package/dist/main/CrowdViewWidget/constants.js +31 -0
  24. package/dist/main/CrowdViewWidget/constants.js.map +1 -0
  25. package/dist/main/CrowdViewWidget/render.js +1 -0
  26. package/dist/main/CrowdViewWidget/render.js.map +1 -1
  27. package/dist/main/CrowdViewWidget/selectConfig.js +121 -0
  28. package/dist/main/CrowdViewWidget/selectConfig.js.map +1 -0
  29. package/dist/main/CrowdViewWidget/types/index.js +17 -0
  30. package/dist/main/CrowdViewWidget/types/index.js.map +1 -0
  31. package/dist/main/CrowdViewWidget/types/instruments.js +45 -0
  32. package/dist/main/CrowdViewWidget/types/instruments.js.map +1 -0
  33. package/dist/main/CrowdViewWidget/types.js +0 -44
  34. package/dist/main/CrowdViewWidget/types.js.map +1 -1
  35. package/dist/main/CrowdViewWidget/utils/instrumentUtils.js +13 -0
  36. package/dist/main/CrowdViewWidget/utils/instrumentUtils.js.map +1 -0
  37. package/dist/main/gql/getOrderPositionBooks.js +1 -1
  38. package/dist/main/gql/getOrderPositionBooks.js.map +1 -1
  39. package/dist/main/gql/getPriceCandles.js +11 -0
  40. package/dist/main/gql/getPriceCandles.js.map +1 -0
  41. package/dist/main/gql/types/gql.js +2 -3
  42. package/dist/main/gql/types/gql.js.map +1 -1
  43. package/dist/main/gql/types/graphql.js +161 -160
  44. package/dist/main/gql/types/graphql.js.map +1 -1
  45. package/dist/main/translations/sources/en.json +24 -0
  46. package/dist/module/CrowdViewWidget/CrowdViewWidget.js +3 -3
  47. package/dist/module/CrowdViewWidget/CrowdViewWidget.js.map +1 -1
  48. package/dist/module/CrowdViewWidget/Main.js +23 -13
  49. package/dist/module/CrowdViewWidget/Main.js.map +1 -1
  50. package/dist/module/CrowdViewWidget/components/Chart/Chart.js +15 -16
  51. package/dist/module/CrowdViewWidget/components/Chart/Chart.js.map +1 -1
  52. package/dist/module/CrowdViewWidget/components/Chart/ChartWithData.js +16 -12
  53. package/dist/module/CrowdViewWidget/components/Chart/ChartWithData.js.map +1 -1
  54. package/dist/module/CrowdViewWidget/components/Chart/{getOption.js → chartOptions.js} +77 -59
  55. package/dist/module/CrowdViewWidget/components/Chart/chartOptions.js.map +1 -0
  56. package/dist/module/CrowdViewWidget/components/Chart/index.js +4 -0
  57. package/dist/module/CrowdViewWidget/components/Chart/index.js.map +1 -1
  58. package/dist/module/CrowdViewWidget/components/Chart/types.js.map +1 -1
  59. package/dist/module/CrowdViewWidget/components/Chart/useCrowdViewData.js +177 -0
  60. package/dist/module/CrowdViewWidget/components/Chart/useCrowdViewData.js.map +1 -0
  61. package/dist/module/CrowdViewWidget/components/Chart/utils/chartUtils.js +94 -0
  62. package/dist/module/CrowdViewWidget/components/Chart/utils/chartUtils.js.map +1 -0
  63. package/dist/module/CrowdViewWidget/components/Legend/Legend.js +3 -2
  64. package/dist/module/CrowdViewWidget/components/Legend/Legend.js.map +1 -1
  65. package/dist/module/CrowdViewWidget/components/Legend/LegendBar.js +9 -11
  66. package/dist/module/CrowdViewWidget/components/Legend/LegendBar.js.map +1 -1
  67. package/dist/module/CrowdViewWidget/constants.js +25 -0
  68. package/dist/module/CrowdViewWidget/constants.js.map +1 -0
  69. package/dist/module/CrowdViewWidget/render.js +1 -0
  70. package/dist/module/CrowdViewWidget/render.js.map +1 -1
  71. package/dist/module/CrowdViewWidget/selectConfig.js +116 -0
  72. package/dist/module/CrowdViewWidget/selectConfig.js.map +1 -0
  73. package/dist/module/CrowdViewWidget/types/index.js +2 -0
  74. package/dist/module/CrowdViewWidget/types/index.js.map +1 -0
  75. package/dist/module/CrowdViewWidget/types/instruments.js +39 -0
  76. package/dist/module/CrowdViewWidget/types/instruments.js.map +1 -0
  77. package/dist/module/CrowdViewWidget/types.js +1 -43
  78. package/dist/module/CrowdViewWidget/types.js.map +1 -1
  79. package/dist/module/CrowdViewWidget/utils/instrumentUtils.js +6 -0
  80. package/dist/module/CrowdViewWidget/utils/instrumentUtils.js.map +1 -0
  81. package/dist/module/gql/getOrderPositionBooks.js +1 -1
  82. package/dist/module/gql/getOrderPositionBooks.js.map +1 -1
  83. package/dist/module/gql/getPriceCandles.js +6 -0
  84. package/dist/module/gql/getPriceCandles.js.map +1 -0
  85. package/dist/module/gql/types/gql.js +2 -3
  86. package/dist/module/gql/types/gql.js.map +1 -1
  87. package/dist/module/gql/types/graphql.js +160 -159
  88. package/dist/module/gql/types/graphql.js.map +1 -1
  89. package/dist/module/translations/sources/en.json +24 -0
  90. package/dist/types/CrowdViewWidget/CrowdViewWidget.d.ts +1 -1
  91. package/dist/types/CrowdViewWidget/components/Chart/ChartWithData.d.ts +1 -1
  92. package/dist/types/CrowdViewWidget/components/Chart/index.d.ts +4 -0
  93. package/dist/types/CrowdViewWidget/components/Chart/types.d.ts +23 -16
  94. package/dist/types/CrowdViewWidget/components/Chart/useCrowdViewData.d.ts +2 -0
  95. package/dist/types/CrowdViewWidget/components/Chart/{utils.d.ts → utils/chartUtils.d.ts} +9 -11
  96. package/dist/types/CrowdViewWidget/components/Legend/Legend.d.ts +3 -3
  97. package/dist/types/CrowdViewWidget/constants.d.ts +24 -0
  98. package/dist/types/CrowdViewWidget/selectConfig.d.ts +19 -0
  99. package/dist/types/CrowdViewWidget/types/index.d.ts +1 -0
  100. package/dist/types/CrowdViewWidget/types/instruments.d.ts +36 -0
  101. package/dist/types/CrowdViewWidget/types.d.ts +2 -50
  102. package/dist/types/CrowdViewWidget/utils/instrumentUtils.d.ts +8 -0
  103. package/dist/types/gql/types/gql.d.ts +10 -14
  104. package/dist/types/gql/types/graphql.d.ts +71 -63
  105. package/lokalise.config.json +1 -1
  106. package/package.json +6 -4
  107. package/src/CrowdViewWidget/CrowdViewWidget.tsx +2 -2
  108. package/src/CrowdViewWidget/Main.tsx +32 -22
  109. package/src/CrowdViewWidget/components/Chart/Chart.tsx +21 -17
  110. package/src/CrowdViewWidget/components/Chart/ChartWithData.tsx +12 -12
  111. package/src/CrowdViewWidget/components/Chart/chartOptions.ts +205 -0
  112. package/src/CrowdViewWidget/components/Chart/index.ts +4 -0
  113. package/src/CrowdViewWidget/components/Chart/types.ts +30 -24
  114. package/src/CrowdViewWidget/components/Chart/useCrowdViewData.ts +288 -0
  115. package/src/CrowdViewWidget/components/Chart/utils/chartUtils.ts +161 -0
  116. package/src/CrowdViewWidget/components/Legend/Legend.tsx +7 -3
  117. package/src/CrowdViewWidget/components/Legend/LegendBar.tsx +16 -20
  118. package/src/CrowdViewWidget/constants.ts +28 -0
  119. package/src/CrowdViewWidget/render.tsx +1 -0
  120. package/src/CrowdViewWidget/{config.ts → selectConfig.ts} +65 -43
  121. package/src/CrowdViewWidget/types/index.ts +1 -0
  122. package/src/CrowdViewWidget/types/instruments.ts +37 -0
  123. package/src/CrowdViewWidget/types.ts +4 -55
  124. package/src/CrowdViewWidget/utils/instrumentUtils.ts +11 -0
  125. package/src/gql/getOrderPositionBooks.ts +9 -4
  126. package/src/gql/{mock/getPriceCandles.ts → getPriceCandles.ts} +5 -5
  127. package/src/gql/types/gql.ts +6 -14
  128. package/src/gql/types/graphql.ts +170 -160
  129. package/src/translations/sources/en.json +24 -0
  130. package/test/Main.test.tsx +73 -27
  131. package/test/components/Chart/utils/chartUtils.test.ts +172 -0
  132. package/test/components/Legend.test.tsx +3 -6
  133. package/test/components/LegendBar.test.tsx +7 -8
  134. package/test/utils/instrumentUtils.test.ts +52 -0
  135. package/dist/main/CrowdViewWidget/components/Chart/constants.js +0 -14
  136. package/dist/main/CrowdViewWidget/components/Chart/constants.js.map +0 -1
  137. package/dist/main/CrowdViewWidget/components/Chart/getOption.js.map +0 -1
  138. package/dist/main/CrowdViewWidget/components/Chart/getOrderPositionDataMock.js +0 -47
  139. package/dist/main/CrowdViewWidget/components/Chart/getOrderPositionDataMock.js.map +0 -1
  140. package/dist/main/CrowdViewWidget/components/Chart/getPriceCandlesMock.js +0 -36
  141. package/dist/main/CrowdViewWidget/components/Chart/getPriceCandlesMock.js.map +0 -1
  142. package/dist/main/CrowdViewWidget/components/Chart/utils.js +0 -166
  143. package/dist/main/CrowdViewWidget/components/Chart/utils.js.map +0 -1
  144. package/dist/main/CrowdViewWidget/config.js +0 -107
  145. package/dist/main/CrowdViewWidget/config.js.map +0 -1
  146. package/dist/main/gql/mock/getPriceCandles.js +0 -11
  147. package/dist/main/gql/mock/getPriceCandles.js.map +0 -1
  148. package/dist/main/gql/mock/schema.graphqls +0 -62
  149. package/dist/main/gql/validateInstruments.js +0 -11
  150. package/dist/main/gql/validateInstruments.js.map +0 -1
  151. package/dist/module/CrowdViewWidget/components/Chart/constants.js +0 -8
  152. package/dist/module/CrowdViewWidget/components/Chart/constants.js.map +0 -1
  153. package/dist/module/CrowdViewWidget/components/Chart/getOption.js.map +0 -1
  154. package/dist/module/CrowdViewWidget/components/Chart/getOrderPositionDataMock.js +0 -40
  155. package/dist/module/CrowdViewWidget/components/Chart/getOrderPositionDataMock.js.map +0 -1
  156. package/dist/module/CrowdViewWidget/components/Chart/getPriceCandlesMock.js +0 -29
  157. package/dist/module/CrowdViewWidget/components/Chart/getPriceCandlesMock.js.map +0 -1
  158. package/dist/module/CrowdViewWidget/components/Chart/utils.js +0 -156
  159. package/dist/module/CrowdViewWidget/components/Chart/utils.js.map +0 -1
  160. package/dist/module/CrowdViewWidget/config.js +0 -102
  161. package/dist/module/CrowdViewWidget/config.js.map +0 -1
  162. package/dist/module/gql/mock/getPriceCandles.js +0 -6
  163. package/dist/module/gql/mock/getPriceCandles.js.map +0 -1
  164. package/dist/module/gql/mock/schema.graphqls +0 -62
  165. package/dist/module/gql/validateInstruments.js +0 -5
  166. package/dist/module/gql/validateInstruments.js.map +0 -1
  167. package/dist/types/CrowdViewWidget/components/Chart/constants.d.ts +0 -7
  168. package/dist/types/CrowdViewWidget/components/Chart/getOrderPositionDataMock.d.ts +0 -14
  169. package/dist/types/CrowdViewWidget/components/Chart/getPriceCandlesMock.d.ts +0 -2
  170. package/dist/types/CrowdViewWidget/config.d.ts +0 -22
  171. package/dist/types/gql/validateInstruments.d.ts +0 -1
  172. package/src/CrowdViewWidget/components/Chart/constants.tsx +0 -8
  173. package/src/CrowdViewWidget/components/Chart/getOption.ts +0 -200
  174. package/src/CrowdViewWidget/components/Chart/getOrderPositionDataMock.ts +0 -66
  175. package/src/CrowdViewWidget/components/Chart/getPriceCandlesMock.ts +0 -43
  176. package/src/CrowdViewWidget/components/Chart/utils.ts +0 -191
  177. package/src/gql/mock/schema.graphqls +0 -62
  178. package/src/gql/validateInstruments.ts +0 -10
  179. /package/dist/types/CrowdViewWidget/components/Chart/{getOption.d.ts → chartOptions.d.ts} +0 -0
  180. /package/dist/types/gql/{mock/getPriceCandles.d.ts → getPriceCandles.d.ts} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","names":["BookType","GranularityId","InstrumentId","navigationConfig","id","Order","label","Position","instrumentSelectConfigOC","EUR_AUD","EUR_GBP","EUR_JPY","EUR_USD","EUR_CHF","USD_CHF","USD_JPY","USD_CAD","GBP_USD","GBP_JPY","GBP_CHF","AUD_JPY","AUD_USD","NZD_USD","instrumentSelectConfig","XAU_USD","XAG_USD","instrumentPrecisionConfig","granularitySelectConfig","MINUTE_5","MINUTE_15","MINUTE_30","HOUR_1","HOUR_4","DAY_1","colorMap","long","short"],"sources":["../../../src/CrowdViewWidget/config.ts"],"sourcesContent":["import { BookType } from '../gql/types/graphql';\nimport type { LegendType } from './components/Legend/LegendBar';\nimport { GranularityId, InstrumentId } from './types';\n\nconst navigationConfig = [\n {\n id: BookType.Order,\n label: 'order_book',\n },\n {\n id: BookType.Position,\n label: 'position_book',\n },\n];\n\nconst instrumentSelectConfigOC = [\n {\n id: InstrumentId.EUR_AUD,\n label: 'EUR/AUD',\n },\n {\n id: InstrumentId.EUR_GBP,\n label: 'EUR/GBP',\n },\n {\n id: InstrumentId.EUR_JPY,\n label: 'EUR/JPY',\n },\n {\n id: InstrumentId.EUR_USD,\n label: 'EUR/USD',\n },\n {\n id: InstrumentId.EUR_CHF,\n label: 'EUR/CHF',\n },\n {\n id: InstrumentId.USD_CHF,\n label: 'USD/CHF',\n },\n {\n id: InstrumentId.USD_JPY,\n label: 'USD/JPY',\n },\n {\n id: InstrumentId.USD_CAD,\n label: 'USD/CAD',\n },\n {\n id: InstrumentId.GBP_USD,\n label: 'GBP/USD',\n },\n {\n id: InstrumentId.GBP_JPY,\n label: 'GBP/JPY',\n },\n {\n id: InstrumentId.GBP_CHF,\n label: 'GBP/CHF',\n },\n {\n id: InstrumentId.AUD_JPY,\n label: 'AUD/JPY',\n },\n {\n id: InstrumentId.AUD_USD,\n label: 'AUD/USD',\n },\n {\n id: InstrumentId.NZD_USD,\n label: 'NZD/USD',\n },\n];\n\nconst instrumentSelectConfig = [\n ...instrumentSelectConfigOC,\n {\n id: InstrumentId.XAU_USD,\n label: 'XAU/USD',\n },\n {\n id: InstrumentId.XAG_USD,\n label: 'XAG/USD',\n },\n];\n\nconst instrumentPrecisionConfig: Record<InstrumentId, number> = {\n [InstrumentId.EUR_AUD]: 5,\n [InstrumentId.EUR_GBP]: 5,\n [InstrumentId.EUR_JPY]: 3,\n [InstrumentId.EUR_USD]: 5,\n [InstrumentId.EUR_CHF]: 5,\n [InstrumentId.USD_CHF]: 5,\n [InstrumentId.USD_JPY]: 3,\n [InstrumentId.USD_CAD]: 5,\n [InstrumentId.GBP_USD]: 5,\n [InstrumentId.GBP_JPY]: 3,\n [InstrumentId.GBP_CHF]: 5,\n [InstrumentId.AUD_JPY]: 3,\n [InstrumentId.AUD_USD]: 5,\n [InstrumentId.NZD_USD]: 5,\n [InstrumentId.XAU_USD]: 3,\n [InstrumentId.XAG_USD]: 5,\n};\n\nconst granularitySelectConfig = [\n {\n id: GranularityId.MINUTE_5,\n label: '5_minutes',\n },\n {\n id: GranularityId.MINUTE_15,\n label: '15_minutes',\n },\n {\n id: GranularityId.MINUTE_30,\n label: '30_minutes',\n },\n {\n id: GranularityId.HOUR_1,\n label: '1_hour',\n },\n {\n id: GranularityId.HOUR_4,\n label: '4_hours',\n },\n {\n id: GranularityId.DAY_1,\n label: '1_day',\n },\n];\n\nexport {\n granularitySelectConfig,\n instrumentPrecisionConfig,\n instrumentSelectConfig,\n instrumentSelectConfigOC,\n navigationConfig,\n};\nexport const colorMap: Record<LegendType, string[]> = {\n long: ['#00857333', '#00715F99', '#00857399', '#008573CC'],\n short: ['#DA632566', '#DA632599', '#DA6325CC', '#DA6325'],\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +0,0 @@
1
- var _templateObject;
2
- function _taggedTemplateLiteral(e, t) { return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); }
3
- import { gql } from '@apollo/client';
4
- const getPriceCandles = gql(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n query GetPriceCandles(\n $division: Division\n $instrument: String!\n $granularity: Granularity!\n $timeSpan: TimeSpan!\n ) {\n getPriceCandles(\n division: $division\n instrument: $instrument\n granularity: $granularity\n timeSpan: $timeSpan\n ) {\n time\n unixTime\n candle {\n high\n low\n open\n close\n }\n timeSpan\n }\n }\n"])));
5
- export { getPriceCandles };
6
- //# sourceMappingURL=getPriceCandles.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getPriceCandles.js","names":["gql","getPriceCandles","_templateObject","_taggedTemplateLiteral"],"sources":["../../../../src/gql/mock/getPriceCandles.ts"],"sourcesContent":["import { gql } from '@apollo/client';\n\nconst getPriceCandles = gql`\n query GetPriceCandles(\n $division: Division\n $instrument: String!\n $granularity: Granularity!\n $timeSpan: TimeSpan!\n ) {\n getPriceCandles(\n division: $division\n instrument: $instrument\n granularity: $granularity\n timeSpan: $timeSpan\n ) {\n time\n unixTime\n candle {\n high\n low\n open\n close\n }\n timeSpan\n }\n }\n`;\n\nexport { getPriceCandles };\n"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,gBAAgB;AAEpC,MAAMC,eAAe,GAAGD,GAAG,CAAAE,eAAA,KAAAA,eAAA,GAAAC,sBAAA,sbAwB1B;AAED,SAASF,eAAe","ignoreList":[]}
@@ -1,62 +0,0 @@
1
- enum TimeSpan {
2
- HOUR_1
3
- HOUR_12
4
- DAY_1
5
- DAY_2
6
- WEEK_1
7
- WEEK_2
8
- WEEK_3
9
- MONTH_1
10
- MONTH_3
11
- MONTH_6
12
- YEAR_1
13
- }
14
-
15
- enum Granularity {
16
- MINUTE_5
17
- MINUTE_15
18
- MINUTE_30
19
- HOUR_1
20
- HOUR_4
21
- DAY_1
22
- }
23
-
24
- enum Division {
25
- OAP
26
- OAU
27
- OC
28
- OCAN
29
- OEL
30
- OGM
31
- OJ
32
- OPT
33
- OTMS
34
- }
35
-
36
- type Candle {
37
- high: Float!
38
- low: Float!
39
- open: Float!
40
- close: Float!
41
- }
42
-
43
- type Instrument {
44
- name: String!
45
- displayName: String!
46
- }
47
-
48
- type CandlesData {
49
- time: String!
50
- unixTime: Int!
51
- candle: Candle!
52
- timeSpan: TimeSpan!
53
- }
54
-
55
- type Query {
56
- getPriceCandles(
57
- division: Division
58
- instrument: String!
59
- granularity: Granularity!
60
- timeSpan: TimeSpan!
61
- ): [CandlesData!]!
62
- }
@@ -1,5 +0,0 @@
1
- var _templateObject;
2
- function _taggedTemplateLiteral(e, t) { return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); }
3
- import { gql } from '@apollo/client';
4
- export const validateInstruments = gql(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n query validateInstruments($instruments: [String]!, $division: Division) {\n mapInstrumentNames(instruments: $instruments, division: $division) {\n name\n displayName\n }\n }\n"])));
5
- //# sourceMappingURL=validateInstruments.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validateInstruments.js","names":["gql","validateInstruments","_templateObject","_taggedTemplateLiteral"],"sources":["../../../src/gql/validateInstruments.ts"],"sourcesContent":["import { gql } from '@apollo/client';\n\nexport const validateInstruments = gql`\n query validateInstruments($instruments: [String]!, $division: Division) {\n mapInstrumentNames(instruments: $instruments, division: $division) {\n name\n displayName\n }\n }\n`;\n"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,gBAAgB;AAEpC,OAAO,MAAMC,mBAAmB,GAAGD,GAAG,CAAAE,eAAA,KAAAA,eAAA,GAAAC,sBAAA,4MAOrC","ignoreList":[]}
@@ -1,7 +0,0 @@
1
- export declare const X_LABEL_SIZE = 40;
2
- export declare const Y_LABEL_SIZE_DESKTOP = 60;
3
- export declare const CHART_WIDTH = 9999;
4
- export declare const CHART_HEIGHT = 425;
5
- export declare const INITIAL_START_ZOOM = 80;
6
- export declare const INITIAL_END_ZOOM = 100;
7
- export declare const MAX_LABELS_COUNT = 14;
@@ -1,14 +0,0 @@
1
- export interface OrderPositionData {
2
- shortCountPercent: number;
3
- longCountPercent: number;
4
- price: number;
5
- }
6
- interface GetOrderPositionDataMockParams {
7
- min?: number;
8
- max?: number;
9
- bucketWidth?: number;
10
- baseValue: number;
11
- crossoverValue?: number;
12
- }
13
- export declare const getOrderPositionDataMock: ({ min, max, bucketWidth, baseValue, crossoverValue, }: GetOrderPositionDataMockParams) => OrderPositionData[];
14
- export {};
@@ -1,2 +0,0 @@
1
- import type { Candle } from '../../../gql/types/graphql';
2
- export declare const getPriceCandlesMock: (count: number, min?: number, max?: number) => Candle[];
@@ -1,22 +0,0 @@
1
- import { BookType } from '../gql/types/graphql';
2
- import type { LegendType } from './components/Legend/LegendBar';
3
- import { GranularityId, InstrumentId } from './types';
4
- declare const navigationConfig: {
5
- id: BookType;
6
- label: string;
7
- }[];
8
- declare const instrumentSelectConfigOC: {
9
- id: InstrumentId;
10
- label: string;
11
- }[];
12
- declare const instrumentSelectConfig: {
13
- id: InstrumentId;
14
- label: string;
15
- }[];
16
- declare const instrumentPrecisionConfig: Record<InstrumentId, number>;
17
- declare const granularitySelectConfig: {
18
- id: GranularityId;
19
- label: string;
20
- }[];
21
- export { granularitySelectConfig, instrumentPrecisionConfig, instrumentSelectConfig, instrumentSelectConfigOC, navigationConfig, };
22
- export declare const colorMap: Record<LegendType, string[]>;
@@ -1 +0,0 @@
1
- export declare const validateInstruments: import("@apollo/client").DocumentNode;
@@ -1,8 +0,0 @@
1
- export const X_LABEL_SIZE = 40;
2
- export const Y_LABEL_SIZE_DESKTOP = 60;
3
- export const CHART_WIDTH = 9999;
4
- export const CHART_HEIGHT = 425;
5
-
6
- export const INITIAL_START_ZOOM = 80;
7
- export const INITIAL_END_ZOOM = 100;
8
- export const MAX_LABELS_COUNT = 14;
@@ -1,200 +0,0 @@
1
- import {
2
- colorPalette,
3
- getGridLines,
4
- getLineCommons,
5
- } from '@oanda/labs-widget-common';
6
- import * as echarts from 'echarts/core';
7
-
8
- import {
9
- CHART_HEIGHT,
10
- CHART_WIDTH,
11
- INITIAL_END_ZOOM,
12
- INITIAL_START_ZOOM,
13
- X_LABEL_SIZE,
14
- Y_LABEL_SIZE_DESKTOP,
15
- } from './constants';
16
- import type { GetOptionType } from './types';
17
- import {
18
- getLabelData,
19
- getRectColor,
20
- isDifferenceGreaterThanTwoWeeks,
21
- } from './utils';
22
-
23
- // @ts-expect-error
24
- export const getOption: GetOptionType = (
25
- {
26
- xAxisData,
27
- ordersPositionsChartData,
28
- ordersPositionsBucketWidth,
29
- candlesSeriesData,
30
- },
31
- isDark
32
- ) => {
33
- const visibleXAxisData = xAxisData.slice(
34
- (xAxisData.length * INITIAL_START_ZOOM) / 100,
35
- (xAxisData.length * INITIAL_END_ZOOM) / 100
36
- );
37
-
38
- const isGreaterThanTwoWeeks = isDifferenceGreaterThanTwoWeeks(
39
- visibleXAxisData[0],
40
- visibleXAxisData[visibleXAxisData.length - 1]
41
- );
42
-
43
- const labelsData = getLabelData({
44
- xAxisData,
45
- isGreaterThanTwoWeeks,
46
- });
47
-
48
- const gridLines = getGridLines({
49
- isDark,
50
- chartWidth: CHART_WIDTH,
51
- chartHeight: CHART_HEIGHT,
52
- xLabelsSize: X_LABEL_SIZE,
53
- yLabelSize: Y_LABEL_SIZE_DESKTOP,
54
- bottomLeftBox: false,
55
- });
56
-
57
- return {
58
- animation: false,
59
- dataZoom: [
60
- {
61
- type: 'inside',
62
- xAxisIndex: 0,
63
- start: INITIAL_START_ZOOM,
64
- end: INITIAL_END_ZOOM,
65
- },
66
- ],
67
- tooltip: {
68
- trigger: 'axis',
69
- formatter: (val) => {
70
- // @ts-expect-error
71
- const timestamp = val[0].axisValue as string;
72
-
73
- return `${new Date(timestamp).toLocaleTimeString(undefined, {
74
- hour: '2-digit',
75
- minute: '2-digit',
76
- })}
77
- ${new Date(timestamp).toLocaleDateString(undefined, {
78
- day: 'numeric',
79
- month: 'short',
80
- })}
81
- `;
82
- },
83
- },
84
- xAxis: {
85
- type: 'category',
86
- data: xAxisData,
87
- axisTick: {
88
- show: false,
89
- },
90
- axisLabel: {
91
- padding: [8, 16, 8, 16],
92
- margin: 0,
93
- formatter: (value) => {
94
- const date = new Date(value as string);
95
- return isGreaterThanTwoWeeks
96
- ? `${date.toLocaleTimeString(undefined, {
97
- hour: '2-digit',
98
- minute: '2-digit',
99
- })}`
100
- : `${date.toLocaleDateString(undefined, {
101
- day: 'numeric',
102
- })}`;
103
- },
104
- },
105
- },
106
- yAxis: {
107
- type: 'value',
108
- position: 'right',
109
- scale: true,
110
- axisLine: { show: false },
111
- axisTick: { show: false },
112
- axisLabel: {
113
- showMaxLabel: false,
114
- showMinLabel: false,
115
- },
116
- },
117
- series: [
118
- {
119
- type: 'candlestick',
120
- id: 'candlestick',
121
- data: candlesSeriesData,
122
- itemStyle: {
123
- color: colorPalette.raspberryLight,
124
- color0: colorPalette.bottleGreenLight,
125
- },
126
- markPoint: {
127
- symbol: 'circle',
128
- symbolSize: 0,
129
- data: labelsData,
130
- },
131
- },
132
- {
133
- type: 'custom',
134
- name: 'heatmap',
135
- id: 'heatmap',
136
- silent: true,
137
- renderItem: (params, api) => {
138
- const { coordSys } = params;
139
- const xVal = api.value(0);
140
- const yVal = api.value(1);
141
- const sentiment = api.value(2) as number;
142
- const start = api.coord([xVal, yVal]);
143
- const [rectWidth, rectHeight] = api.size!([
144
- 0,
145
- ordersPositionsBucketWidth,
146
- ]) as number[];
147
- const boundaries = coordSys as unknown as {
148
- x: number;
149
- y: number;
150
- width: number;
151
- height: number;
152
- };
153
- const shape = echarts.graphic.clipRectByRect(
154
- {
155
- x: start[0] - rectWidth / 2,
156
- y: start[1],
157
- width: rectWidth,
158
- height: rectHeight,
159
- },
160
- boundaries
161
- );
162
- return (
163
- shape && {
164
- type: 'rect',
165
- shape,
166
- style: {
167
- fill: getRectColor(sentiment),
168
- },
169
- emphasisDisabled: true,
170
- }
171
- );
172
- },
173
- data: ordersPositionsChartData,
174
- },
175
- ],
176
- grid: [
177
- {
178
- name: 'main-grid',
179
- top: '0px',
180
- left: '0px',
181
- right: `${Y_LABEL_SIZE_DESKTOP}px`,
182
- bottom: `${X_LABEL_SIZE}px`,
183
- },
184
- ],
185
- graphic: [
186
- ...gridLines,
187
- {
188
- ...getLineCommons(isDark as boolean),
189
- top: 0,
190
- right: 0,
191
- shape: {
192
- x1: 0,
193
- y1: 0,
194
- x2: 0,
195
- y2: 0,
196
- },
197
- },
198
- ],
199
- };
200
- };
@@ -1,66 +0,0 @@
1
- export interface OrderPositionData {
2
- shortCountPercent: number;
3
- longCountPercent: number;
4
- price: number;
5
- }
6
-
7
- interface GetOrderPositionDataMockParams {
8
- min?: number;
9
- max?: number;
10
- bucketWidth?: number;
11
- baseValue: number;
12
- crossoverValue?: number;
13
- }
14
-
15
- export const getOrderPositionDataMock = ({
16
- min = 1.3,
17
- max = 2.1,
18
- bucketWidth = 0.005,
19
- baseValue,
20
- crossoverValue = baseValue,
21
- }: GetOrderPositionDataMockParams): OrderPositionData[] => {
22
- const results: OrderPositionData[] = [];
23
-
24
- const maxDistance = Math.max(baseValue - min, max - baseValue);
25
-
26
- for (
27
- let currentPrice = min;
28
- currentPrice < max;
29
- currentPrice += bucketWidth
30
- ) {
31
- const distance = Math.abs(currentPrice - baseValue);
32
-
33
- const proximityFactor = 1 - distance / maxDistance;
34
- const strongProximityFactor = Math.pow(proximityFactor, 2);
35
-
36
- let shortCountPercent: number;
37
- let longCountPercent: number;
38
-
39
- if (currentPrice === baseValue) {
40
- shortCountPercent = Math.random() * 0.5;
41
- longCountPercent = Math.random() * 0.5;
42
- } else {
43
- const maxDifference = 0.5;
44
- const targetDifference =
45
- Math.random() * maxDifference * strongProximityFactor;
46
-
47
- const baseRandom = Math.random() * (0.5 - targetDifference);
48
-
49
- if (currentPrice < crossoverValue) {
50
- shortCountPercent = baseRandom;
51
- longCountPercent = baseRandom + targetDifference;
52
- } else {
53
- longCountPercent = baseRandom;
54
- shortCountPercent = baseRandom + targetDifference;
55
- }
56
- }
57
-
58
- results.push({
59
- shortCountPercent: Math.round(shortCountPercent * 10000) / 10000,
60
- longCountPercent: Math.round(longCountPercent * 10000) / 10000,
61
- price: currentPrice,
62
- });
63
- }
64
-
65
- return results;
66
- };
@@ -1,43 +0,0 @@
1
- import type { Candle } from '../../../gql/types/graphql';
2
-
3
- export const getPriceCandlesMock = (
4
- count: number,
5
- min: number = 1.3,
6
- max: number = 2.1
7
- ): Candle[] => {
8
- const buffer = 0.02;
9
- const safeMin = min + buffer;
10
- const safeMax = max - buffer;
11
-
12
- const initialClose = +(Math.random() * (safeMax - safeMin) + safeMin).toFixed(
13
- 5
14
- );
15
-
16
- return Array.from({ length: count }).reduce<Candle[]>((acc) => {
17
- const prevClose =
18
- acc.length === 0 ? initialClose : acc[acc.length - 1].close;
19
- const isBullish = Math.random() > 0.5;
20
-
21
- const bodySize = +(Math.random() * 0.05 + 0.015).toFixed(5);
22
- const wickSize = +(Math.random() * 0.015 + 0.005).toFixed(5);
23
-
24
- const open = prevClose;
25
- let close = isBullish ? open + bodySize : open - bodySize;
26
- close = Math.max(safeMin, Math.min(safeMax, Number(close)));
27
-
28
- const high = Math.min(
29
- max,
30
- Math.max(Number(open), Number(close)) + wickSize
31
- );
32
- const low = Math.max(min, Math.min(Number(open), Number(close)) - wickSize);
33
-
34
- acc.push({
35
- open: +open.toFixed(5),
36
- close: +close.toFixed(5),
37
- low: +low.toFixed(5),
38
- high: +high.toFixed(5),
39
- });
40
-
41
- return acc;
42
- }, []);
43
- };
@@ -1,191 +0,0 @@
1
- import { colorMap } from '../../config';
2
- import { TimeSpanId } from '../../types';
3
- import { CHART_HEIGHT } from './constants';
4
- import { getOrderPositionDataMock } from './getOrderPositionDataMock';
5
- import { getPriceCandlesMock } from './getPriceCandlesMock';
6
- import type { GetLabelsDataProps, TransformDataForChartType } from './types';
7
-
8
- export const getRectColor = (sentiment: number) => {
9
- const colors = sentiment < 0 ? colorMap.short : colorMap.long;
10
- const absSentiment = Math.abs(sentiment);
11
-
12
- if (absSentiment < 0.15) {
13
- return colors[3];
14
- }
15
-
16
- if (absSentiment < 0.25) {
17
- return colors[2];
18
- }
19
-
20
- if (absSentiment < 0.4) {
21
- return colors[1];
22
- }
23
-
24
- if (absSentiment >= 0.4) {
25
- return colors[0];
26
- }
27
-
28
- return 'transparent';
29
- };
30
-
31
- export enum GranularityId {
32
- MINUTE_5 = 'MINUTE_5',
33
- MINUTE_15 = 'MINUTE_15',
34
- MINUTE_30 = 'MINUTE_30',
35
- HOUR_1 = 'HOUR_1',
36
- HOUR_4 = 'HOUR_4',
37
- DAY_1 = 'DAY_1',
38
- }
39
-
40
- const timeSpansInMilliseconds: Record<TimeSpanId, number> = {
41
- [TimeSpanId.HOUR_1]: 60 * 60 * 1000,
42
- [TimeSpanId.HOUR_12]: 12 * 60 * 60 * 1000,
43
- [TimeSpanId.DAY_1]: 24 * 60 * 60 * 1000,
44
- [TimeSpanId.DAY_2]: 2 * 24 * 60 * 60 * 1000,
45
- [TimeSpanId.WEEK_1]: 7 * 24 * 60 * 60 * 1000,
46
- [TimeSpanId.WEEK_2]: 14 * 24 * 60 * 60 * 1000,
47
- [TimeSpanId.WEEK_3]: 21 * 24 * 60 * 60 * 1000,
48
- [TimeSpanId.MONTH_1]: 30 * 24 * 60 * 60 * 1000, // Approximation
49
- [TimeSpanId.MONTH_3]: 3 * 30 * 24 * 60 * 60 * 1000, // Approximation
50
- [TimeSpanId.MONTH_6]: 6 * 30 * 24 * 60 * 60 * 1000, // Approximation
51
- [TimeSpanId.YEAR_1]: 365 * 24 * 60 * 60 * 1000, // Approximation
52
- [TimeSpanId.YEAR_5]: 5 * 365 * 24 * 60 * 60 * 1000, // Approximation
53
- };
54
-
55
- const granularityInMilliseconds: Record<GranularityId, number> = {
56
- [GranularityId.MINUTE_5]: 5 * 60 * 1000,
57
- [GranularityId.MINUTE_15]: 15 * 60 * 1000,
58
- [GranularityId.MINUTE_30]: 30 * 60 * 1000,
59
- [GranularityId.HOUR_1]: 60 * 60 * 1000,
60
- [GranularityId.HOUR_4]: 4 * 60 * 60 * 1000,
61
- [GranularityId.DAY_1]: 24 * 60 * 60 * 1000,
62
- };
63
-
64
- const temporaryGranularityTimeSpanMap: Record<GranularityId, TimeSpanId> = {
65
- [GranularityId.MINUTE_5]: TimeSpanId.DAY_2,
66
- [GranularityId.MINUTE_15]: TimeSpanId.WEEK_1,
67
- [GranularityId.MINUTE_30]: TimeSpanId.WEEK_2,
68
- [GranularityId.HOUR_1]: TimeSpanId.MONTH_1,
69
- [GranularityId.HOUR_4]: TimeSpanId.MONTH_3,
70
- [GranularityId.DAY_1]: TimeSpanId.MONTH_6,
71
- };
72
-
73
- const mockXAxisData = (granularityId: GranularityId) => {
74
- const granularity = granularityInMilliseconds[granularityId];
75
- const timeSpan =
76
- timeSpansInMilliseconds[temporaryGranularityTimeSpanMap[granularityId]];
77
-
78
- const currentTime = new Date();
79
-
80
- const startDate = currentTime;
81
- const totalSteps = timeSpan / granularity;
82
-
83
- const orderPositionDataForHistorical = new Array(totalSteps)
84
- .fill(null)
85
- .map((_, index) => {
86
- const newDate = new Date(startDate.getTime() - index * granularity);
87
-
88
- return `${newDate.toISOString().slice(0, 19)}Z`;
89
- })
90
- .reverse();
91
-
92
- return orderPositionDataForHistorical;
93
- };
94
-
95
- export const getLabelData = ({
96
- xAxisData,
97
- isGreaterThanTwoWeeks,
98
- }: GetLabelsDataProps) =>
99
- xAxisData
100
- .filter((record, index, arr) => {
101
- if (index === 0) {
102
- return false;
103
- }
104
- const previousTimestamp = arr[index - 1];
105
- const currentDate = new Date(record);
106
- const previousDate = new Date(previousTimestamp);
107
-
108
- return isGreaterThanTwoWeeks
109
- ? currentDate.getDate() !== previousDate.getDate()
110
- : currentDate.getMonth() !== previousDate.getMonth();
111
- })
112
- .map((item) => ({
113
- name: new Date(item).toLocaleDateString(undefined, {
114
- month: 'short',
115
- day: isGreaterThanTwoWeeks ? 'numeric' : undefined,
116
- }),
117
- xAxis: item,
118
- y: CHART_HEIGHT - 22,
119
- silent: true,
120
- emphasis: {
121
- disabled: true,
122
- },
123
- label: {
124
- fontFamily: 'Sofia W03',
125
- fontSize: 10,
126
- position: 'bottom',
127
- align: 'center',
128
- formatter: '{b}',
129
- },
130
- }));
131
-
132
- export const isDifferenceGreaterThanTwoWeeks = (
133
- startDate: string,
134
- endDate: string
135
- ) => {
136
- const date1 = new Date(startDate);
137
- const date2 = new Date(endDate);
138
-
139
- const TWO_WEEKS_IN_MS = 14 * 24 * 60 * 60 * 1000;
140
-
141
- const differenceInMs = Math.abs(date2.getTime() - date1.getTime());
142
-
143
- return differenceInMs < TWO_WEEKS_IN_MS;
144
- };
145
-
146
- export const transformDataForChart: TransformDataForChartType = ({
147
- granularity,
148
- }) => {
149
- const bucketWidth = 0.005;
150
- const mockedXAxisData = mockXAxisData(granularity);
151
- const mockedCandles = getPriceCandlesMock(mockedXAxisData.length);
152
-
153
- const orderPositionData = mockedCandles.map((item, index) => {
154
- return {
155
- time: mockedXAxisData[index],
156
- buckets: getOrderPositionDataMock({
157
- baseValue: item.high,
158
- bucketWidth,
159
- crossoverValue: item.high + (Math.random() - 0.5) * 0.3,
160
- }),
161
- bucketWidth: 0.005,
162
- };
163
- });
164
-
165
- const ordersPositionsChartData = orderPositionData
166
- .flatMap(
167
- ({ buckets, time }) =>
168
- buckets.map((bucket) => [
169
- time,
170
- bucket!.price,
171
- bucket!.longCountPercent - bucket!.shortCountPercent,
172
- ]) as [string, number, number][]
173
- )
174
- .filter((item) => Math.abs(item[2]) > 0.15);
175
-
176
- const candlesSeriesData: [number, number, number, number][] =
177
- mockedCandles.map(({ close, open, low, high }) => [
178
- +close.toFixed(5),
179
- +open.toFixed(5),
180
- +low.toFixed(5),
181
- +high.toFixed(5),
182
- ]);
183
-
184
- return {
185
- xAxisData: mockedXAxisData,
186
- ordersPositionsChartData,
187
- ordersPositionsBucketWidth: bucketWidth,
188
- candlesSeriesData,
189
- granularity,
190
- };
191
- };