@oanda/labs-sentiment-widget 1.0.83 → 1.0.84
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 +324 -0
- package/dist/main/SentimentWidget/Tool.js +4 -3
- package/dist/main/SentimentWidget/Tool.js.map +1 -1
- package/dist/main/SentimentWidget/Widget.js +4 -3
- package/dist/main/SentimentWidget/Widget.js.map +1 -1
- package/dist/module/SentimentWidget/Tool.js +5 -4
- package/dist/module/SentimentWidget/Tool.js.map +1 -1
- package/dist/module/SentimentWidget/Widget.js +5 -4
- package/dist/module/SentimentWidget/Widget.js.map +1 -1
- package/package.json +3 -4
- package/src/SentimentWidget/Tool.tsx +62 -56
- package/src/SentimentWidget/Widget.tsx +27 -21
- package/test/Tool.test.tsx +7 -2
- package/test/Widget.test.tsx +7 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,330 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## 1.0.84 (2024-02-13)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## 1.0.83 (2024-02-09)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## 1.0.82 (2024-02-05)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
## 1.0.81 (2024-02-05)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## 1.0.80 (2024-02-05)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
## 1.0.79 (2024-02-05)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
## 1.0.78 (2024-01-30)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
## 1.0.77 (2024-01-25)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
## 1.0.76 (2024-01-25)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
## 1.0.75 (2024-01-22)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
## 1.0.74 (2024-01-22)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
## 1.0.73 (2024-01-22)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
## 1.0.72 (2024-01-19)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
## 1.0.71 (2024-01-18)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
## 1.0.70 (2024-01-17)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
## 1.0.69 (2024-01-17)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
## 1.0.68 (2024-01-15)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
## 1.0.67 (2024-01-15)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
## 1.0.66 (2024-01-12)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
## 1.0.65 (2024-01-11)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
## 1.0.64 (2024-01-11)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
## 1.0.63 (2024-01-11)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
## 1.0.62 (2024-01-10)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
## 1.0.61 (2024-01-09)
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
## 1.0.60 (2024-01-05)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
## 1.0.59 (2023-12-27)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
## 1.0.58 (2023-12-22)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
## 1.0.57 (2023-12-22)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
## 1.0.56 (2023-12-21)
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
## 1.0.55 (2023-12-19)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
## 1.0.54 (2023-12-15)
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
## 1.0.53 (2023-12-13)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
## 1.0.52 (2023-12-13)
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
## 1.0.51 (2023-12-07)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
## 1.0.50 (2023-12-04)
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
## 1.0.49 (2023-12-01)
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
## 1.0.48 (2023-12-01)
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
## 1.0.47 (2023-11-29)
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
## 1.0.46 (2023-11-28)
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
## 1.0.45 (2023-11-23)
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
## 1.0.44 (2023-11-22)
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
## 1.0.43 (2023-11-15)
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
## 1.0.42 (2023-11-10)
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
## 1.0.41 (2023-11-03)
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
## 1.0.40 (2023-11-02)
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
## 1.0.39 (2023-11-02)
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
## 1.0.38 (2023-10-26)
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
## 1.0.37 (2023-10-26)
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
## 1.0.36 (2023-10-25)
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
## 1.0.35 (2023-10-24)
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
## 1.0.34 (2023-10-23)
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
## 1.0.33 (2023-10-23)
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
## 1.0.32 (2023-10-23)
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
## 1.0.31 (2023-10-20)
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
## 1.0.30 (2023-10-19)
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
## 1.0.29 (2023-10-19)
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
## 1.0.28 (2023-10-19)
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
## 1.0.27 (2023-10-18)
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
## 1.0.26 (2023-10-18)
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
## 1.0.25 (2023-10-17)
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
## 1.0.24 (2023-10-13)
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
## 1.0.23 (2023-10-13)
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
## 1.0.22 (2023-10-11)
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
## 1.0.21 (2023-10-10)
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
## 1.0.20 (2023-10-06)
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
## 1.0.19 (2023-10-06)
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
## 1.0.18 (2023-10-05)
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
## 1.0.17 (2023-10-04)
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
## 1.0.16 (2023-10-04)
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
## 1.0.15 (2023-10-04)
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
## 1.0.14 (2023-10-03)
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
|
|
290
|
+
## 1.0.13 (2023-10-03)
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
## 1.0.12 (2023-10-03)
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
## 1.0.11 (2023-10-02)
|
|
299
|
+
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
## 1.0.10 (2023-09-29)
|
|
303
|
+
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
## 1.0.9 (2023-09-28)
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
## 1.0.8 (2023-09-27)
|
|
311
|
+
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
## 1.0.7 (2023-09-26)
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
## 1.0.6 (2023-09-21)
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
## 1.0.5 (2023-09-13)
|
|
323
|
+
|
|
324
|
+
**Note:** Version bump only for package @oanda/labs-sentiment-widget
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
|
|
6
330
|
## 1.0.83 (2024-02-09)
|
|
7
331
|
|
|
8
332
|
|
|
@@ -22,8 +22,9 @@ const Tool = _ref => {
|
|
|
22
22
|
division
|
|
23
23
|
} = _ref;
|
|
24
24
|
const {
|
|
25
|
-
|
|
25
|
+
size
|
|
26
26
|
} = (0, _react.useContext)(_labsWidgetCommon.ThemeContext);
|
|
27
|
+
const isDesktop = size === _labsWidgetCommon.Size.DESKTOP;
|
|
27
28
|
const [sort, setSort] = (0, _react.useState)(_graphql.Sort.Bullish);
|
|
28
29
|
const [sortedData, setSortedData] = (0, _react.useState)(new Array(20).fill({}));
|
|
29
30
|
const {
|
|
@@ -47,7 +48,7 @@ const Tool = _ref => {
|
|
|
47
48
|
setUpdatedTimestamp((0, _labsWidgetCommon.formatUpdatedTimestamp)((_ = data.sentimentList[0]) === null || _ === void 0 ? void 0 : _.updatedAt, lang('today')));
|
|
48
49
|
}
|
|
49
50
|
}, [data, sort]);
|
|
50
|
-
return _react.default.createElement("div", {
|
|
51
|
+
return _react.default.createElement(_react.default.Fragment, null, size && _react.default.createElement("div", {
|
|
51
52
|
"data-testid": "sentiment-tool",
|
|
52
53
|
className: "lw-relative lw-bg-bg-primary lw-text-sm lw-tracking-normal lw-text-text-primary"
|
|
53
54
|
}, error || sortedData.length === 0 ? _react.default.createElement("div", {
|
|
@@ -94,7 +95,7 @@ const Tool = _ref => {
|
|
|
94
95
|
className: "lw-mt-2 lw-h-8"
|
|
95
96
|
}, _react.default.createElement(_labsWidgetCommon.InfoBox, {
|
|
96
97
|
text: "".concat(lang('last_updated'), ": ").concat(updatedTimestamp)
|
|
97
|
-
})));
|
|
98
|
+
}))));
|
|
98
99
|
};
|
|
99
100
|
exports.Tool = Tool;
|
|
100
101
|
//# sourceMappingURL=Tool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tool.js","names":["_react","_interopRequireWildcard","require","_classnames","_interopRequireDefault","_labsWidgetCommon","_client","_monoI18n","_getSentimentList","_utils","_SortSwitch","_graphql","_constant","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","Tool","_ref","division","isDesktop","useContext","ThemeContext","sort","setSort","useState","Sort","Bullish","sortedData","setSortedData","Array","fill","loading","data","error","useQuery","getSentimentList","variables","fetchPolicy","lang","useLocale","updatedTimestamp","setUpdatedTimestamp","EMPTY_VALUE","useEffect","_","sortData","formatUpdatedTimestamp","sentimentList","updatedAt","createElement","className","length","ChartError","Fragment","SortSwitch","disabled","selected","SelectedArrow","UP","DOWN","onClickButtonDown","Bearish","onClickButtonUp","classNames","map","item","index","key","name","Loader","size","LoaderSize","md","Truncate","maxWidth","tooltipId","INSTRUMENT_TOOLTIP_ID","text","displayName","Sentiment","isLoading","height","SentimentHeight","sentiment","Tooltip","id","InfoBox","concat","exports"],"sources":["../../../src/SentimentWidget/Tool.tsx"],"sourcesContent":["import React, { useEffect, useState, useContext } from 'react';\nimport classNames from 'classnames';\nimport {\n Sentiment,\n SentimentHeight,\n Loader,\n LoaderSize,\n ChartError,\n Truncate,\n Tooltip,\n InfoBox,\n formatUpdatedTimestamp,\n ThemeContext,\n} from '@oanda/labs-widget-common';\nimport { useQuery } from '@apollo/client';\nimport { useLocale } from '@oanda/mono-i18n';\nimport { getSentimentList } from '../gql/getSentimentList';\nimport { SentimentToolConfig } from './types';\nimport { sortData } from './utils';\nimport { SelectedArrow, SortSwitch } from './components/SortSwitch';\nimport {\n GetSentimentListQuery, GetSentimentListQueryVariables, SentimentInstrument, Sort,\n} from '../gql/types/graphql';\nimport { EMPTY_VALUE, INSTRUMENT_TOOLTIP_ID } from '../constant';\n\nconst Tool = ({ division }: SentimentToolConfig) => {\n const { isDesktop } = useContext(ThemeContext);\n const [sort, setSort] = useState(Sort.Bullish);\n const [sortedData, setSortedData] = useState<Omit<SentimentInstrument, 'id'>[]>(new Array(20).fill({}));\n const { loading, data, error } = useQuery<\n GetSentimentListQuery,\n GetSentimentListQueryVariables\n >(getSentimentList, {\n variables: {\n division,\n },\n fetchPolicy: 'cache-and-network',\n });\n\n const { lang } = useLocale();\n const [updatedTimestamp, setUpdatedTimestamp] = useState(EMPTY_VALUE);\n\n useEffect(() => {\n if (data) {\n setSortedData(sortData(data, sort));\n setUpdatedTimestamp(formatUpdatedTimestamp(data.sentimentList![0]?.updatedAt, lang('today')));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data, sort]);\n\n return (\n <div data-testid=\"sentiment-tool\" className=\"lw-relative lw-bg-bg-primary lw-text-sm lw-tracking-normal lw-text-text-primary\">\n {error || sortedData.length === 0 ? (\n <div className=\"lw-flex lw-h-[200px] lw-items-center lw-justify-center lw-border lw-border-solid lw-border-border-primary lw-p-2\">\n <ChartError />\n </div>\n ) : (\n <>\n <div className=\"lw-flex lw-justify-end lw-pb-5\">\n <SortSwitch\n disabled={loading}\n selected={sort === Sort.Bullish ? SelectedArrow.UP : SelectedArrow.DOWN}\n onClickButtonDown={() => setSort(Sort.Bearish)}\n onClickButtonUp={() => setSort(Sort.Bullish)}\n />\n </div>\n <div className=\"lw-flex lw-flex-col lw-border lw-border-solid lw-border-border-primary lw-p-2\">\n <div className=\"lw-mb-2 lw-flex lw-justify-between lw-font-semibold\">\n <span className={classNames('lw-uppercase', {\n 'lw-ml-40': isDesktop,\n 'lw-ml-[7.5rem]': !isDesktop,\n })}\n >\n {lang('net_short')}\n </span>\n <span className={classNames('lw-text-right lw-uppercase', {\n 'lw-mr-10': isDesktop,\n })}\n >\n {lang('net_long')}\n </span>\n </div>\n {sortedData.map((item, index) => (\n <div className=\"lw-flex lw-h-8 lw-w-full lw-items-center\" key={item.name || index}>\n <div className=\"lw-w-[120px] lw-shrink-0\">\n {loading ? (\n <Loader size={LoaderSize.md} />\n ) : (\n <Truncate\n maxWidth={120}\n tooltipId={INSTRUMENT_TOOLTIP_ID}\n className=\"lw-pr-2 lw-font-sans lw-text-sm lw-font-bold\"\n text={item.displayName || '\\u2014'}\n />\n )}\n </div>\n <Sentiment\n isLoading={loading}\n height={SentimentHeight.md}\n sentiment={item.sentiment}\n />\n </div>\n ))}\n </div>\n </>\n )}\n <Tooltip id={INSTRUMENT_TOOLTIP_ID} />\n {!error\n && (\n <div className=\"lw-mt-2 lw-h-8\">\n <InfoBox text={`${lang('last_updated')}: ${updatedTimestamp}`} />\n </div>\n )}\n </div>\n );\n};\n\nexport { Tool };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Tool.js","names":["_react","_interopRequireWildcard","require","_classnames","_interopRequireDefault","_labsWidgetCommon","_client","_monoI18n","_getSentimentList","_utils","_SortSwitch","_graphql","_constant","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","Tool","_ref","division","size","useContext","ThemeContext","isDesktop","Size","DESKTOP","sort","setSort","useState","Sort","Bullish","sortedData","setSortedData","Array","fill","loading","data","error","useQuery","getSentimentList","variables","fetchPolicy","lang","useLocale","updatedTimestamp","setUpdatedTimestamp","EMPTY_VALUE","useEffect","_","sortData","formatUpdatedTimestamp","sentimentList","updatedAt","createElement","Fragment","className","length","ChartError","SortSwitch","disabled","selected","SelectedArrow","UP","DOWN","onClickButtonDown","Bearish","onClickButtonUp","classNames","map","item","index","key","name","Loader","LoaderSize","md","Truncate","maxWidth","tooltipId","INSTRUMENT_TOOLTIP_ID","text","displayName","Sentiment","isLoading","height","SentimentHeight","sentiment","Tooltip","id","InfoBox","concat","exports"],"sources":["../../../src/SentimentWidget/Tool.tsx"],"sourcesContent":["import React, { useEffect, useState, useContext } from 'react';\nimport classNames from 'classnames';\nimport {\n Sentiment,\n SentimentHeight,\n Loader,\n LoaderSize,\n ChartError,\n Truncate,\n Tooltip,\n InfoBox,\n formatUpdatedTimestamp,\n ThemeContext,\n Size,\n} from '@oanda/labs-widget-common';\nimport { useQuery } from '@apollo/client';\nimport { useLocale } from '@oanda/mono-i18n';\nimport { getSentimentList } from '../gql/getSentimentList';\nimport { SentimentToolConfig } from './types';\nimport { sortData } from './utils';\nimport { SelectedArrow, SortSwitch } from './components/SortSwitch';\nimport {\n GetSentimentListQuery, GetSentimentListQueryVariables, SentimentInstrument, Sort,\n} from '../gql/types/graphql';\nimport { EMPTY_VALUE, INSTRUMENT_TOOLTIP_ID } from '../constant';\n\nconst Tool = ({ division }: SentimentToolConfig) => {\n const { size } = useContext(ThemeContext);\n const isDesktop = size === Size.DESKTOP;\n const [sort, setSort] = useState(Sort.Bullish);\n const [sortedData, setSortedData] = useState<Omit<SentimentInstrument, 'id'>[]>(new Array(20).fill({}));\n const { loading, data, error } = useQuery<\n GetSentimentListQuery,\n GetSentimentListQueryVariables\n >(getSentimentList, {\n variables: {\n division,\n },\n fetchPolicy: 'cache-and-network',\n });\n\n const { lang } = useLocale();\n const [updatedTimestamp, setUpdatedTimestamp] = useState(EMPTY_VALUE);\n\n useEffect(() => {\n if (data) {\n setSortedData(sortData(data, sort));\n setUpdatedTimestamp(formatUpdatedTimestamp(data.sentimentList![0]?.updatedAt, lang('today')));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data, sort]);\n\n return (\n <>\n {size && (\n <div data-testid=\"sentiment-tool\" className=\"lw-relative lw-bg-bg-primary lw-text-sm lw-tracking-normal lw-text-text-primary\">\n {error || sortedData.length === 0 ? (\n <div className=\"lw-flex lw-h-[200px] lw-items-center lw-justify-center lw-border lw-border-solid lw-border-border-primary lw-p-2\">\n <ChartError />\n </div>\n ) : (\n <>\n <div className=\"lw-flex lw-justify-end lw-pb-5\">\n <SortSwitch\n disabled={loading}\n selected={sort === Sort.Bullish ? SelectedArrow.UP : SelectedArrow.DOWN}\n onClickButtonDown={() => setSort(Sort.Bearish)}\n onClickButtonUp={() => setSort(Sort.Bullish)}\n />\n </div>\n <div className=\"lw-flex lw-flex-col lw-border lw-border-solid lw-border-border-primary lw-p-2\">\n <div className=\"lw-mb-2 lw-flex lw-justify-between lw-font-semibold\">\n <span className={classNames('lw-uppercase', {\n 'lw-ml-40': isDesktop,\n 'lw-ml-[7.5rem]': !isDesktop,\n })}\n >\n {lang('net_short')}\n </span>\n <span className={classNames('lw-text-right lw-uppercase', {\n 'lw-mr-10': isDesktop,\n })}\n >\n {lang('net_long')}\n </span>\n </div>\n {sortedData.map((item, index) => (\n <div className=\"lw-flex lw-h-8 lw-w-full lw-items-center\" key={item.name || index}>\n <div className=\"lw-w-[120px] lw-shrink-0\">\n {loading ? (\n <Loader size={LoaderSize.md} />\n ) : (\n <Truncate\n maxWidth={120}\n tooltipId={INSTRUMENT_TOOLTIP_ID}\n className=\"lw-pr-2 lw-font-sans lw-text-sm lw-font-bold\"\n text={item.displayName || '\\u2014'}\n />\n )}\n </div>\n <Sentiment\n isLoading={loading}\n height={SentimentHeight.md}\n sentiment={item.sentiment}\n />\n </div>\n ))}\n </div>\n </>\n )}\n <Tooltip id={INSTRUMENT_TOOLTIP_ID} />\n {!error\n && (\n <div className=\"lw-mt-2 lw-h-8\">\n <InfoBox text={`${lang('last_updated')}: ${updatedTimestamp}`} />\n </div>\n )}\n </div>\n )}\n </>\n );\n};\n\nexport { Tool };\n"],"mappings":"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"}
|
|
@@ -33,8 +33,9 @@ const Widget = _ref => {
|
|
|
33
33
|
fetchPolicy: 'cache-and-network'
|
|
34
34
|
});
|
|
35
35
|
const {
|
|
36
|
-
|
|
36
|
+
size
|
|
37
37
|
} = (0, _react.useContext)(_labsWidgetCommon.ThemeContext);
|
|
38
|
+
const isDesktop = size === _labsWidgetCommon.Size.DESKTOP;
|
|
38
39
|
const {
|
|
39
40
|
lang
|
|
40
41
|
} = (0, _monoI18n.useLocale)();
|
|
@@ -44,7 +45,7 @@ const Widget = _ref => {
|
|
|
44
45
|
updatedAt
|
|
45
46
|
} = (data === null || data === void 0 || (_data$sentiment = data.sentiment) === null || _data$sentiment === void 0 ? void 0 : _data$sentiment[0]) || {};
|
|
46
47
|
const isError = error || (sentiment === null || sentiment === void 0 ? void 0 : sentiment.shortPercent) === 0 && (sentiment === null || sentiment === void 0 ? void 0 : sentiment.longPercent) === 0 || (sentiment === null || sentiment === void 0 ? void 0 : sentiment.shortPercent) === undefined || (sentiment === null || sentiment === void 0 ? void 0 : sentiment.longPercent) === undefined;
|
|
47
|
-
return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement("div", {
|
|
48
|
+
return _react.default.createElement(_react.default.Fragment, null, size && _react.default.createElement(_react.default.Fragment, null, _react.default.createElement("div", {
|
|
48
49
|
"data-testid": "sentiment-widget",
|
|
49
50
|
className: "lw-border lw-border-solid lw-border-border-primary lw-bg-bg-primary lw-p-4 lw-text-sm lw-tracking-normal lw-text-text-primary"
|
|
50
51
|
}, includeDescriptionLabels && _react.default.createElement("div", {
|
|
@@ -78,7 +79,7 @@ const Widget = _ref => {
|
|
|
78
79
|
className: "lw-mt-2 lw-h-8"
|
|
79
80
|
}, _react.default.createElement(_labsWidgetCommon.InfoBox, {
|
|
80
81
|
text: "".concat(lang('last_updated'), ": ").concat((0, _labsWidgetCommon.formatUpdatedTimestamp)(updatedAt, lang('today')) || _constant.EMPTY_VALUE)
|
|
81
|
-
})));
|
|
82
|
+
}))));
|
|
82
83
|
};
|
|
83
84
|
exports.Widget = Widget;
|
|
84
85
|
//# sourceMappingURL=Widget.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Widget.js","names":["_react","_interopRequireWildcard","require","_classnames","_interopRequireDefault","_labsWidgetCommon","_monoI18n","_client","_getInstrumentSentiment","_constant","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","Widget","_ref","_data$sentiment","instrument","division","includeDescriptionLabels","loading","data","error","useQuery","getInstrumentSentiment","variables","name","fetchPolicy","
|
|
1
|
+
{"version":3,"file":"Widget.js","names":["_react","_interopRequireWildcard","require","_classnames","_interopRequireDefault","_labsWidgetCommon","_monoI18n","_client","_getInstrumentSentiment","_constant","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","Widget","_ref","_data$sentiment","instrument","division","includeDescriptionLabels","loading","data","error","useQuery","getInstrumentSentiment","variables","name","fetchPolicy","size","useContext","ThemeContext","isDesktop","Size","DESKTOP","lang","useLocale","displayName","sentiment","updatedAt","isError","shortPercent","longPercent","undefined","createElement","Fragment","className","classNames","Loader","LoaderSize","md","Truncate","maxWidth","tooltipId","INSTRUMENT_TOOLTIP_ID","text","Sentiment","withError","isLoading","height","SentimentHeight","Error","InfoBox","concat","formatUpdatedTimestamp","EMPTY_VALUE","exports"],"sources":["../../../src/SentimentWidget/Widget.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport classNames from 'classnames';\nimport {\n Sentiment,\n SentimentHeight,\n Error,\n Loader,\n LoaderSize,\n Truncate,\n InfoBox,\n formatUpdatedTimestamp,\n ThemeContext,\n Size,\n} from '@oanda/labs-widget-common';\nimport { useLocale } from '@oanda/mono-i18n';\nimport { useQuery } from '@apollo/client';\nimport { getInstrumentSentiment } from '../gql/getInstrumentSentiment';\nimport { SentimentWidgetConfig } from './types';\nimport { GetInstrumentSentimentQuery, GetInstrumentSentimentQueryVariables } from '../gql/types/graphql';\nimport { EMPTY_VALUE, INSTRUMENT_TOOLTIP_ID } from '../constant';\n\nconst Widget = ({\n instrument,\n division,\n includeDescriptionLabels = false,\n}: SentimentWidgetConfig) => {\n const { loading, data, error } = useQuery<\n GetInstrumentSentimentQuery,\n GetInstrumentSentimentQueryVariables\n >(getInstrumentSentiment, {\n variables: {\n name: instrument,\n division,\n },\n fetchPolicy: 'cache-and-network',\n });\n const { size } = useContext(ThemeContext);\n const isDesktop = size === Size.DESKTOP;\n const { lang } = useLocale();\n\n const { displayName, sentiment, updatedAt } = data?.sentiment?.[0] || {};\n\n const isError = error\n || (sentiment?.shortPercent === 0 && sentiment?.longPercent === 0)\n || sentiment?.shortPercent === undefined\n || sentiment?.longPercent === undefined;\n\n return (\n <>\n {size && (\n <>\n <div\n data-testid=\"sentiment-widget\"\n className=\"lw-border lw-border-solid lw-border-border-primary lw-bg-bg-primary lw-p-4 lw-text-sm lw-tracking-normal lw-text-text-primary\"\n >\n {includeDescriptionLabels\n && (\n <div className=\"lw-mb-2 lw-flex lw-justify-between lw-font-semibold\">\n <span className={classNames('lw-uppercase', {\n 'lw-ml-40': isDesktop,\n 'lw-ml-[7.5rem]': !isDesktop,\n })}\n >\n {lang('net_short')}\n </span>\n <span className={classNames('lw-text-right lw-uppercase', {\n 'lw-mr-10': isDesktop,\n })}\n >\n {lang('net_long')}\n </span>\n </div>\n )}\n <div className=\"lw-flex lw-items-center lw-justify-between\">\n <div className=\"lw-w-[120px] lw-shrink-0\">\n {loading && <Loader size={LoaderSize.md} />}\n {!loading && !isError && (\n <Truncate\n maxWidth={120}\n tooltipId={INSTRUMENT_TOOLTIP_ID}\n className=\"lw-pr-2 lw-font-sans lw-text-sm lw-font-bold\"\n text={displayName || '\\u2014'}\n />\n )}\n </div>\n <Sentiment\n withError={false}\n isLoading={loading}\n height={SentimentHeight.md}\n sentiment={sentiment}\n />\n </div>\n\n {!loading && isError && <Error />}\n </div>\n {!isError && updatedAt && (\n <div className=\"lw-mt-2 lw-h-8\">\n <InfoBox text={`${lang('last_updated')}: ${formatUpdatedTimestamp(updatedAt, lang('today')) || EMPTY_VALUE}`} />\n </div>\n )}\n </>\n )}\n </>\n );\n};\n\nexport { Widget };\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { useEffect, useState, useContext } from 'react';
|
|
2
2
|
import classNames from 'classnames';
|
|
3
|
-
import { Sentiment, SentimentHeight, Loader, LoaderSize, ChartError, Truncate, Tooltip, InfoBox, formatUpdatedTimestamp, ThemeContext } from '@oanda/labs-widget-common';
|
|
3
|
+
import { Sentiment, SentimentHeight, Loader, LoaderSize, ChartError, Truncate, Tooltip, InfoBox, formatUpdatedTimestamp, ThemeContext, Size } from '@oanda/labs-widget-common';
|
|
4
4
|
import { useQuery } from '@apollo/client';
|
|
5
5
|
import { useLocale } from '@oanda/mono-i18n';
|
|
6
6
|
import { getSentimentList } from '../gql/getSentimentList';
|
|
@@ -13,8 +13,9 @@ const Tool = _ref => {
|
|
|
13
13
|
division
|
|
14
14
|
} = _ref;
|
|
15
15
|
const {
|
|
16
|
-
|
|
16
|
+
size
|
|
17
17
|
} = useContext(ThemeContext);
|
|
18
|
+
const isDesktop = size === Size.DESKTOP;
|
|
18
19
|
const [sort, setSort] = useState(Sort.Bullish);
|
|
19
20
|
const [sortedData, setSortedData] = useState(new Array(20).fill({}));
|
|
20
21
|
const {
|
|
@@ -38,7 +39,7 @@ const Tool = _ref => {
|
|
|
38
39
|
setUpdatedTimestamp(formatUpdatedTimestamp((_ = data.sentimentList[0]) === null || _ === void 0 ? void 0 : _.updatedAt, lang('today')));
|
|
39
40
|
}
|
|
40
41
|
}, [data, sort]);
|
|
41
|
-
return React.createElement("div", {
|
|
42
|
+
return React.createElement(React.Fragment, null, size && React.createElement("div", {
|
|
42
43
|
"data-testid": "sentiment-tool",
|
|
43
44
|
className: "lw-relative lw-bg-bg-primary lw-text-sm lw-tracking-normal lw-text-text-primary"
|
|
44
45
|
}, error || sortedData.length === 0 ? React.createElement("div", {
|
|
@@ -85,7 +86,7 @@ const Tool = _ref => {
|
|
|
85
86
|
className: "lw-mt-2 lw-h-8"
|
|
86
87
|
}, React.createElement(InfoBox, {
|
|
87
88
|
text: "".concat(lang('last_updated'), ": ").concat(updatedTimestamp)
|
|
88
|
-
})));
|
|
89
|
+
}))));
|
|
89
90
|
};
|
|
90
91
|
export { Tool };
|
|
91
92
|
//# sourceMappingURL=Tool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tool.js","names":["React","useEffect","useState","useContext","classNames","Sentiment","SentimentHeight","Loader","LoaderSize","ChartError","Truncate","Tooltip","InfoBox","formatUpdatedTimestamp","ThemeContext","useQuery","useLocale","getSentimentList","sortData","SelectedArrow","SortSwitch","Sort","EMPTY_VALUE","INSTRUMENT_TOOLTIP_ID","Tool","_ref","division","isDesktop","sort","setSort","Bullish","sortedData","setSortedData","Array","fill","loading","data","error","variables","fetchPolicy","lang","updatedTimestamp","setUpdatedTimestamp","_","sentimentList","updatedAt","createElement","
|
|
1
|
+
{"version":3,"file":"Tool.js","names":["React","useEffect","useState","useContext","classNames","Sentiment","SentimentHeight","Loader","LoaderSize","ChartError","Truncate","Tooltip","InfoBox","formatUpdatedTimestamp","ThemeContext","Size","useQuery","useLocale","getSentimentList","sortData","SelectedArrow","SortSwitch","Sort","EMPTY_VALUE","INSTRUMENT_TOOLTIP_ID","Tool","_ref","division","size","isDesktop","DESKTOP","sort","setSort","Bullish","sortedData","setSortedData","Array","fill","loading","data","error","variables","fetchPolicy","lang","updatedTimestamp","setUpdatedTimestamp","_","sentimentList","updatedAt","createElement","Fragment","className","length","disabled","selected","UP","DOWN","onClickButtonDown","Bearish","onClickButtonUp","map","item","index","key","name","md","maxWidth","tooltipId","text","displayName","isLoading","height","sentiment","id","concat"],"sources":["../../../src/SentimentWidget/Tool.tsx"],"sourcesContent":["import React, { useEffect, useState, useContext } from 'react';\nimport classNames from 'classnames';\nimport {\n Sentiment,\n SentimentHeight,\n Loader,\n LoaderSize,\n ChartError,\n Truncate,\n Tooltip,\n InfoBox,\n formatUpdatedTimestamp,\n ThemeContext,\n Size,\n} from '@oanda/labs-widget-common';\nimport { useQuery } from '@apollo/client';\nimport { useLocale } from '@oanda/mono-i18n';\nimport { getSentimentList } from '../gql/getSentimentList';\nimport { SentimentToolConfig } from './types';\nimport { sortData } from './utils';\nimport { SelectedArrow, SortSwitch } from './components/SortSwitch';\nimport {\n GetSentimentListQuery, GetSentimentListQueryVariables, SentimentInstrument, Sort,\n} from '../gql/types/graphql';\nimport { EMPTY_VALUE, INSTRUMENT_TOOLTIP_ID } from '../constant';\n\nconst Tool = ({ division }: SentimentToolConfig) => {\n const { size } = useContext(ThemeContext);\n const isDesktop = size === Size.DESKTOP;\n const [sort, setSort] = useState(Sort.Bullish);\n const [sortedData, setSortedData] = useState<Omit<SentimentInstrument, 'id'>[]>(new Array(20).fill({}));\n const { loading, data, error } = useQuery<\n GetSentimentListQuery,\n GetSentimentListQueryVariables\n >(getSentimentList, {\n variables: {\n division,\n },\n fetchPolicy: 'cache-and-network',\n });\n\n const { lang } = useLocale();\n const [updatedTimestamp, setUpdatedTimestamp] = useState(EMPTY_VALUE);\n\n useEffect(() => {\n if (data) {\n setSortedData(sortData(data, sort));\n setUpdatedTimestamp(formatUpdatedTimestamp(data.sentimentList![0]?.updatedAt, lang('today')));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data, sort]);\n\n return (\n <>\n {size && (\n <div data-testid=\"sentiment-tool\" className=\"lw-relative lw-bg-bg-primary lw-text-sm lw-tracking-normal lw-text-text-primary\">\n {error || sortedData.length === 0 ? (\n <div className=\"lw-flex lw-h-[200px] lw-items-center lw-justify-center lw-border lw-border-solid lw-border-border-primary lw-p-2\">\n <ChartError />\n </div>\n ) : (\n <>\n <div className=\"lw-flex lw-justify-end lw-pb-5\">\n <SortSwitch\n disabled={loading}\n selected={sort === Sort.Bullish ? SelectedArrow.UP : SelectedArrow.DOWN}\n onClickButtonDown={() => setSort(Sort.Bearish)}\n onClickButtonUp={() => setSort(Sort.Bullish)}\n />\n </div>\n <div className=\"lw-flex lw-flex-col lw-border lw-border-solid lw-border-border-primary lw-p-2\">\n <div className=\"lw-mb-2 lw-flex lw-justify-between lw-font-semibold\">\n <span className={classNames('lw-uppercase', {\n 'lw-ml-40': isDesktop,\n 'lw-ml-[7.5rem]': !isDesktop,\n })}\n >\n {lang('net_short')}\n </span>\n <span className={classNames('lw-text-right lw-uppercase', {\n 'lw-mr-10': isDesktop,\n })}\n >\n {lang('net_long')}\n </span>\n </div>\n {sortedData.map((item, index) => (\n <div className=\"lw-flex lw-h-8 lw-w-full lw-items-center\" key={item.name || index}>\n <div className=\"lw-w-[120px] lw-shrink-0\">\n {loading ? (\n <Loader size={LoaderSize.md} />\n ) : (\n <Truncate\n maxWidth={120}\n tooltipId={INSTRUMENT_TOOLTIP_ID}\n className=\"lw-pr-2 lw-font-sans lw-text-sm lw-font-bold\"\n text={item.displayName || '\\u2014'}\n />\n )}\n </div>\n <Sentiment\n isLoading={loading}\n height={SentimentHeight.md}\n sentiment={item.sentiment}\n />\n </div>\n ))}\n </div>\n </>\n )}\n <Tooltip id={INSTRUMENT_TOOLTIP_ID} />\n {!error\n && (\n <div className=\"lw-mt-2 lw-h-8\">\n <InfoBox text={`${lang('last_updated')}: ${updatedTimestamp}`} />\n </div>\n )}\n </div>\n )}\n </>\n );\n};\n\nexport { Tool };\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { useContext } from 'react';
|
|
2
2
|
import classNames from 'classnames';
|
|
3
|
-
import { Sentiment, SentimentHeight, Error, Loader, LoaderSize, Truncate, InfoBox, formatUpdatedTimestamp, ThemeContext } from '@oanda/labs-widget-common';
|
|
3
|
+
import { Sentiment, SentimentHeight, Error, Loader, LoaderSize, Truncate, InfoBox, formatUpdatedTimestamp, ThemeContext, Size } from '@oanda/labs-widget-common';
|
|
4
4
|
import { useLocale } from '@oanda/mono-i18n';
|
|
5
5
|
import { useQuery } from '@apollo/client';
|
|
6
6
|
import { getInstrumentSentiment } from '../gql/getInstrumentSentiment';
|
|
@@ -24,8 +24,9 @@ const Widget = _ref => {
|
|
|
24
24
|
fetchPolicy: 'cache-and-network'
|
|
25
25
|
});
|
|
26
26
|
const {
|
|
27
|
-
|
|
27
|
+
size
|
|
28
28
|
} = useContext(ThemeContext);
|
|
29
|
+
const isDesktop = size === Size.DESKTOP;
|
|
29
30
|
const {
|
|
30
31
|
lang
|
|
31
32
|
} = useLocale();
|
|
@@ -35,7 +36,7 @@ const Widget = _ref => {
|
|
|
35
36
|
updatedAt
|
|
36
37
|
} = (data === null || data === void 0 || (_data$sentiment = data.sentiment) === null || _data$sentiment === void 0 ? void 0 : _data$sentiment[0]) || {};
|
|
37
38
|
const isError = error || (sentiment === null || sentiment === void 0 ? void 0 : sentiment.shortPercent) === 0 && (sentiment === null || sentiment === void 0 ? void 0 : sentiment.longPercent) === 0 || (sentiment === null || sentiment === void 0 ? void 0 : sentiment.shortPercent) === undefined || (sentiment === null || sentiment === void 0 ? void 0 : sentiment.longPercent) === undefined;
|
|
38
|
-
return React.createElement(React.Fragment, null, React.createElement("div", {
|
|
39
|
+
return React.createElement(React.Fragment, null, size && React.createElement(React.Fragment, null, React.createElement("div", {
|
|
39
40
|
"data-testid": "sentiment-widget",
|
|
40
41
|
className: "lw-border lw-border-solid lw-border-border-primary lw-bg-bg-primary lw-p-4 lw-text-sm lw-tracking-normal lw-text-text-primary"
|
|
41
42
|
}, includeDescriptionLabels && React.createElement("div", {
|
|
@@ -69,7 +70,7 @@ const Widget = _ref => {
|
|
|
69
70
|
className: "lw-mt-2 lw-h-8"
|
|
70
71
|
}, React.createElement(InfoBox, {
|
|
71
72
|
text: "".concat(lang('last_updated'), ": ").concat(formatUpdatedTimestamp(updatedAt, lang('today')) || EMPTY_VALUE)
|
|
72
|
-
})));
|
|
73
|
+
}))));
|
|
73
74
|
};
|
|
74
75
|
export { Widget };
|
|
75
76
|
//# sourceMappingURL=Widget.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Widget.js","names":["React","useContext","classNames","Sentiment","SentimentHeight","Error","Loader","LoaderSize","Truncate","InfoBox","formatUpdatedTimestamp","ThemeContext","useLocale","useQuery","getInstrumentSentiment","EMPTY_VALUE","INSTRUMENT_TOOLTIP_ID","Widget","_ref","_data$sentiment","instrument","division","includeDescriptionLabels","loading","data","error","variables","name","fetchPolicy","isDesktop","lang","displayName","sentiment","updatedAt","isError","shortPercent","longPercent","undefined","createElement","Fragment","className","
|
|
1
|
+
{"version":3,"file":"Widget.js","names":["React","useContext","classNames","Sentiment","SentimentHeight","Error","Loader","LoaderSize","Truncate","InfoBox","formatUpdatedTimestamp","ThemeContext","Size","useLocale","useQuery","getInstrumentSentiment","EMPTY_VALUE","INSTRUMENT_TOOLTIP_ID","Widget","_ref","_data$sentiment","instrument","division","includeDescriptionLabels","loading","data","error","variables","name","fetchPolicy","size","isDesktop","DESKTOP","lang","displayName","sentiment","updatedAt","isError","shortPercent","longPercent","undefined","createElement","Fragment","className","md","maxWidth","tooltipId","text","withError","isLoading","height","concat"],"sources":["../../../src/SentimentWidget/Widget.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport classNames from 'classnames';\nimport {\n Sentiment,\n SentimentHeight,\n Error,\n Loader,\n LoaderSize,\n Truncate,\n InfoBox,\n formatUpdatedTimestamp,\n ThemeContext,\n Size,\n} from '@oanda/labs-widget-common';\nimport { useLocale } from '@oanda/mono-i18n';\nimport { useQuery } from '@apollo/client';\nimport { getInstrumentSentiment } from '../gql/getInstrumentSentiment';\nimport { SentimentWidgetConfig } from './types';\nimport { GetInstrumentSentimentQuery, GetInstrumentSentimentQueryVariables } from '../gql/types/graphql';\nimport { EMPTY_VALUE, INSTRUMENT_TOOLTIP_ID } from '../constant';\n\nconst Widget = ({\n instrument,\n division,\n includeDescriptionLabels = false,\n}: SentimentWidgetConfig) => {\n const { loading, data, error } = useQuery<\n GetInstrumentSentimentQuery,\n GetInstrumentSentimentQueryVariables\n >(getInstrumentSentiment, {\n variables: {\n name: instrument,\n division,\n },\n fetchPolicy: 'cache-and-network',\n });\n const { size } = useContext(ThemeContext);\n const isDesktop = size === Size.DESKTOP;\n const { lang } = useLocale();\n\n const { displayName, sentiment, updatedAt } = data?.sentiment?.[0] || {};\n\n const isError = error\n || (sentiment?.shortPercent === 0 && sentiment?.longPercent === 0)\n || sentiment?.shortPercent === undefined\n || sentiment?.longPercent === undefined;\n\n return (\n <>\n {size && (\n <>\n <div\n data-testid=\"sentiment-widget\"\n className=\"lw-border lw-border-solid lw-border-border-primary lw-bg-bg-primary lw-p-4 lw-text-sm lw-tracking-normal lw-text-text-primary\"\n >\n {includeDescriptionLabels\n && (\n <div className=\"lw-mb-2 lw-flex lw-justify-between lw-font-semibold\">\n <span className={classNames('lw-uppercase', {\n 'lw-ml-40': isDesktop,\n 'lw-ml-[7.5rem]': !isDesktop,\n })}\n >\n {lang('net_short')}\n </span>\n <span className={classNames('lw-text-right lw-uppercase', {\n 'lw-mr-10': isDesktop,\n })}\n >\n {lang('net_long')}\n </span>\n </div>\n )}\n <div className=\"lw-flex lw-items-center lw-justify-between\">\n <div className=\"lw-w-[120px] lw-shrink-0\">\n {loading && <Loader size={LoaderSize.md} />}\n {!loading && !isError && (\n <Truncate\n maxWidth={120}\n tooltipId={INSTRUMENT_TOOLTIP_ID}\n className=\"lw-pr-2 lw-font-sans lw-text-sm lw-font-bold\"\n text={displayName || '\\u2014'}\n />\n )}\n </div>\n <Sentiment\n withError={false}\n isLoading={loading}\n height={SentimentHeight.md}\n sentiment={sentiment}\n />\n </div>\n\n {!loading && isError && <Error />}\n </div>\n {!isError && updatedAt && (\n <div className=\"lw-mt-2 lw-h-8\">\n <InfoBox text={`${lang('last_updated')}: ${formatUpdatedTimestamp(updatedAt, lang('today')) || EMPTY_VALUE}`} />\n </div>\n )}\n </>\n )}\n </>\n );\n};\n\nexport { Widget };\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oanda/labs-sentiment-widget",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.84",
|
|
4
4
|
"description": "Labs Sentiment Widget",
|
|
5
5
|
"main": "dist/main/index.js",
|
|
6
6
|
"module": "dist/module/index.js",
|
|
@@ -13,14 +13,13 @@
|
|
|
13
13
|
"license": "UNLICENSED",
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"@apollo/client": "3.7.17",
|
|
16
|
-
"@oanda/labs-widget-common": "^1.0.
|
|
16
|
+
"@oanda/labs-widget-common": "^1.0.84",
|
|
17
17
|
"@oanda/mono-i18n": "9.0.0",
|
|
18
|
-
"classnames": "2.3.2",
|
|
19
18
|
"graphql": "16.7.1"
|
|
20
19
|
},
|
|
21
20
|
"devDependencies": {
|
|
22
21
|
"@graphql-codegen/cli": "5.0.0",
|
|
23
22
|
"@graphql-codegen/client-preset": "4.1.0"
|
|
24
23
|
},
|
|
25
|
-
"gitHead": "
|
|
24
|
+
"gitHead": "8d6812f950bbce1904760fefa2a12a167b1566a4"
|
|
26
25
|
}
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
InfoBox,
|
|
12
12
|
formatUpdatedTimestamp,
|
|
13
13
|
ThemeContext,
|
|
14
|
+
Size,
|
|
14
15
|
} from '@oanda/labs-widget-common';
|
|
15
16
|
import { useQuery } from '@apollo/client';
|
|
16
17
|
import { useLocale } from '@oanda/mono-i18n';
|
|
@@ -24,7 +25,8 @@ import {
|
|
|
24
25
|
import { EMPTY_VALUE, INSTRUMENT_TOOLTIP_ID } from '../constant';
|
|
25
26
|
|
|
26
27
|
const Tool = ({ division }: SentimentToolConfig) => {
|
|
27
|
-
const {
|
|
28
|
+
const { size } = useContext(ThemeContext);
|
|
29
|
+
const isDesktop = size === Size.DESKTOP;
|
|
28
30
|
const [sort, setSort] = useState(Sort.Bullish);
|
|
29
31
|
const [sortedData, setSortedData] = useState<Omit<SentimentInstrument, 'id'>[]>(new Array(20).fill({}));
|
|
30
32
|
const { loading, data, error } = useQuery<
|
|
@@ -49,69 +51,73 @@ const Tool = ({ division }: SentimentToolConfig) => {
|
|
|
49
51
|
}, [data, sort]);
|
|
50
52
|
|
|
51
53
|
return (
|
|
52
|
-
|
|
53
|
-
{
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
<>
|
|
59
|
-
<div className="lw-flex lw-justify-end lw-pb-5">
|
|
60
|
-
<SortSwitch
|
|
61
|
-
disabled={loading}
|
|
62
|
-
selected={sort === Sort.Bullish ? SelectedArrow.UP : SelectedArrow.DOWN}
|
|
63
|
-
onClickButtonDown={() => setSort(Sort.Bearish)}
|
|
64
|
-
onClickButtonUp={() => setSort(Sort.Bullish)}
|
|
65
|
-
/>
|
|
54
|
+
<>
|
|
55
|
+
{size && (
|
|
56
|
+
<div data-testid="sentiment-tool" className="lw-relative lw-bg-bg-primary lw-text-sm lw-tracking-normal lw-text-text-primary">
|
|
57
|
+
{error || sortedData.length === 0 ? (
|
|
58
|
+
<div className="lw-flex lw-h-[200px] lw-items-center lw-justify-center lw-border lw-border-solid lw-border-border-primary lw-p-2">
|
|
59
|
+
<ChartError />
|
|
66
60
|
</div>
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
{
|
|
75
|
-
|
|
76
|
-
<span className={classNames('lw-text-right lw-uppercase', {
|
|
77
|
-
'lw-mr-10': isDesktop,
|
|
78
|
-
})}
|
|
79
|
-
>
|
|
80
|
-
{lang('net_long')}
|
|
81
|
-
</span>
|
|
61
|
+
) : (
|
|
62
|
+
<>
|
|
63
|
+
<div className="lw-flex lw-justify-end lw-pb-5">
|
|
64
|
+
<SortSwitch
|
|
65
|
+
disabled={loading}
|
|
66
|
+
selected={sort === Sort.Bullish ? SelectedArrow.UP : SelectedArrow.DOWN}
|
|
67
|
+
onClickButtonDown={() => setSort(Sort.Bearish)}
|
|
68
|
+
onClickButtonUp={() => setSort(Sort.Bullish)}
|
|
69
|
+
/>
|
|
82
70
|
</div>
|
|
83
|
-
|
|
84
|
-
<div className="lw-
|
|
85
|
-
<
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
isLoading={loading}
|
|
99
|
-
height={SentimentHeight.md}
|
|
100
|
-
sentiment={item.sentiment}
|
|
101
|
-
/>
|
|
71
|
+
<div className="lw-flex lw-flex-col lw-border lw-border-solid lw-border-border-primary lw-p-2">
|
|
72
|
+
<div className="lw-mb-2 lw-flex lw-justify-between lw-font-semibold">
|
|
73
|
+
<span className={classNames('lw-uppercase', {
|
|
74
|
+
'lw-ml-40': isDesktop,
|
|
75
|
+
'lw-ml-[7.5rem]': !isDesktop,
|
|
76
|
+
})}
|
|
77
|
+
>
|
|
78
|
+
{lang('net_short')}
|
|
79
|
+
</span>
|
|
80
|
+
<span className={classNames('lw-text-right lw-uppercase', {
|
|
81
|
+
'lw-mr-10': isDesktop,
|
|
82
|
+
})}
|
|
83
|
+
>
|
|
84
|
+
{lang('net_long')}
|
|
85
|
+
</span>
|
|
102
86
|
</div>
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
87
|
+
{sortedData.map((item, index) => (
|
|
88
|
+
<div className="lw-flex lw-h-8 lw-w-full lw-items-center" key={item.name || index}>
|
|
89
|
+
<div className="lw-w-[120px] lw-shrink-0">
|
|
90
|
+
{loading ? (
|
|
91
|
+
<Loader size={LoaderSize.md} />
|
|
92
|
+
) : (
|
|
93
|
+
<Truncate
|
|
94
|
+
maxWidth={120}
|
|
95
|
+
tooltipId={INSTRUMENT_TOOLTIP_ID}
|
|
96
|
+
className="lw-pr-2 lw-font-sans lw-text-sm lw-font-bold"
|
|
97
|
+
text={item.displayName || '\u2014'}
|
|
98
|
+
/>
|
|
99
|
+
)}
|
|
100
|
+
</div>
|
|
101
|
+
<Sentiment
|
|
102
|
+
isLoading={loading}
|
|
103
|
+
height={SentimentHeight.md}
|
|
104
|
+
sentiment={item.sentiment}
|
|
105
|
+
/>
|
|
106
|
+
</div>
|
|
107
|
+
))}
|
|
108
|
+
</div>
|
|
109
|
+
</>
|
|
110
|
+
)}
|
|
111
|
+
<Tooltip id={INSTRUMENT_TOOLTIP_ID} />
|
|
112
|
+
{!error
|
|
109
113
|
&& (
|
|
110
114
|
<div className="lw-mt-2 lw-h-8">
|
|
111
115
|
<InfoBox text={`${lang('last_updated')}: ${updatedTimestamp}`} />
|
|
112
116
|
</div>
|
|
113
117
|
)}
|
|
114
|
-
|
|
118
|
+
</div>
|
|
119
|
+
)}
|
|
120
|
+
</>
|
|
115
121
|
);
|
|
116
122
|
};
|
|
117
123
|
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
InfoBox,
|
|
11
11
|
formatUpdatedTimestamp,
|
|
12
12
|
ThemeContext,
|
|
13
|
+
Size,
|
|
13
14
|
} from '@oanda/labs-widget-common';
|
|
14
15
|
import { useLocale } from '@oanda/mono-i18n';
|
|
15
16
|
import { useQuery } from '@apollo/client';
|
|
@@ -33,7 +34,8 @@ const Widget = ({
|
|
|
33
34
|
},
|
|
34
35
|
fetchPolicy: 'cache-and-network',
|
|
35
36
|
});
|
|
36
|
-
const {
|
|
37
|
+
const { size } = useContext(ThemeContext);
|
|
38
|
+
const isDesktop = size === Size.DESKTOP;
|
|
37
39
|
const { lang } = useLocale();
|
|
38
40
|
|
|
39
41
|
const { displayName, sentiment, updatedAt } = data?.sentiment?.[0] || {};
|
|
@@ -45,11 +47,13 @@ const Widget = ({
|
|
|
45
47
|
|
|
46
48
|
return (
|
|
47
49
|
<>
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
50
|
+
{size && (
|
|
51
|
+
<>
|
|
52
|
+
<div
|
|
53
|
+
data-testid="sentiment-widget"
|
|
54
|
+
className="lw-border lw-border-solid lw-border-border-primary lw-bg-bg-primary lw-p-4 lw-text-sm lw-tracking-normal lw-text-text-primary"
|
|
55
|
+
>
|
|
56
|
+
{includeDescriptionLabels
|
|
53
57
|
&& (
|
|
54
58
|
<div className="lw-mb-2 lw-flex lw-justify-between lw-font-semibold">
|
|
55
59
|
<span className={classNames('lw-uppercase', {
|
|
@@ -67,32 +71,34 @@ const Widget = ({
|
|
|
67
71
|
</span>
|
|
68
72
|
</div>
|
|
69
73
|
)}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
+
<div className="lw-flex lw-items-center lw-justify-between">
|
|
75
|
+
<div className="lw-w-[120px] lw-shrink-0">
|
|
76
|
+
{loading && <Loader size={LoaderSize.md} />}
|
|
77
|
+
{!loading && !isError && (
|
|
74
78
|
<Truncate
|
|
75
79
|
maxWidth={120}
|
|
76
80
|
tooltipId={INSTRUMENT_TOOLTIP_ID}
|
|
77
81
|
className="lw-pr-2 lw-font-sans lw-text-sm lw-font-bold"
|
|
78
82
|
text={displayName || '\u2014'}
|
|
79
83
|
/>
|
|
80
|
-
|
|
84
|
+
)}
|
|
85
|
+
</div>
|
|
86
|
+
<Sentiment
|
|
87
|
+
withError={false}
|
|
88
|
+
isLoading={loading}
|
|
89
|
+
height={SentimentHeight.md}
|
|
90
|
+
sentiment={sentiment}
|
|
91
|
+
/>
|
|
81
92
|
</div>
|
|
82
|
-
<Sentiment
|
|
83
|
-
withError={false}
|
|
84
|
-
isLoading={loading}
|
|
85
|
-
height={SentimentHeight.md}
|
|
86
|
-
sentiment={sentiment}
|
|
87
|
-
/>
|
|
88
|
-
</div>
|
|
89
93
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
94
|
+
{!loading && isError && <Error />}
|
|
95
|
+
</div>
|
|
96
|
+
{!isError && updatedAt && (
|
|
93
97
|
<div className="lw-mt-2 lw-h-8">
|
|
94
98
|
<InfoBox text={`${lang('last_updated')}: ${formatUpdatedTimestamp(updatedAt, lang('today')) || EMPTY_VALUE}`} />
|
|
95
99
|
</div>
|
|
100
|
+
)}
|
|
101
|
+
</>
|
|
96
102
|
)}
|
|
97
103
|
</>
|
|
98
104
|
);
|
package/test/Tool.test.tsx
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import React from 'react';
|
|
5
5
|
import { render } from '@testing-library/react';
|
|
6
6
|
import { MockedProvider } from '@apollo/client/testing';
|
|
7
|
+
import { Size, ThemeContext } from '@oanda/labs-widget-common';
|
|
7
8
|
import { Tool } from '../src/SentimentWidget/Tool';
|
|
8
9
|
import { getSentimentList } from '../src/gql/getSentimentList';
|
|
9
10
|
import { Division } from '../src/gql/types/graphql';
|
|
@@ -67,7 +68,9 @@ describe('Tool component', () => {
|
|
|
67
68
|
it('should render tool component', async () => {
|
|
68
69
|
const { findByTestId, findAllByTestId } = render(
|
|
69
70
|
<MockedProvider mocks={mocks}>
|
|
70
|
-
<
|
|
71
|
+
<ThemeContext.Provider value={{ size: Size.DESKTOP, isDark: true }}>
|
|
72
|
+
<Tool division={Division.Oc} />
|
|
73
|
+
</ThemeContext.Provider>
|
|
71
74
|
</MockedProvider>,
|
|
72
75
|
);
|
|
73
76
|
|
|
@@ -77,7 +80,9 @@ describe('Tool component', () => {
|
|
|
77
80
|
it('should render error', async () => {
|
|
78
81
|
const { findByTestId } = render(
|
|
79
82
|
<MockedProvider mocks={errorMocks}>
|
|
80
|
-
<
|
|
83
|
+
<ThemeContext.Provider value={{ size: Size.DESKTOP, isDark: true }}>
|
|
84
|
+
<Tool division={Division.Oc} />
|
|
85
|
+
</ThemeContext.Provider>
|
|
81
86
|
</MockedProvider>,
|
|
82
87
|
);
|
|
83
88
|
|
package/test/Widget.test.tsx
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import React from 'react';
|
|
5
5
|
import { render } from '@testing-library/react';
|
|
6
6
|
import { MockedProvider } from '@apollo/client/testing';
|
|
7
|
+
import { ThemeContext, Size } from '@oanda/labs-widget-common';
|
|
7
8
|
import { Widget } from '../src/SentimentWidget/Widget';
|
|
8
9
|
import { getInstrumentSentiment } from '../src/gql/getInstrumentSentiment';
|
|
9
10
|
import { Division } from '../src/gql/types/graphql';
|
|
@@ -62,7 +63,9 @@ describe('Widget component', () => {
|
|
|
62
63
|
it('should render widget component', async () => {
|
|
63
64
|
const { findByTestId } = render(
|
|
64
65
|
<MockedProvider mocks={mocks}>
|
|
65
|
-
<
|
|
66
|
+
<ThemeContext.Provider value={{ size: Size.DESKTOP, isDark: true }}>
|
|
67
|
+
<Widget division={Division.Oc} instrument="EUR/USD" />
|
|
68
|
+
</ThemeContext.Provider>
|
|
66
69
|
</MockedProvider>,
|
|
67
70
|
);
|
|
68
71
|
|
|
@@ -72,7 +75,9 @@ describe('Widget component', () => {
|
|
|
72
75
|
it('should render error when both sentiment values are 0', async () => {
|
|
73
76
|
const { findByTestId } = render(
|
|
74
77
|
<MockedProvider mocks={zeroPercentMocks}>
|
|
75
|
-
<
|
|
78
|
+
<ThemeContext.Provider value={{ size: Size.DESKTOP, isDark: true }}>
|
|
79
|
+
<Widget division={Division.Oc} instrument="GBP/USD" />
|
|
80
|
+
</ThemeContext.Provider>
|
|
76
81
|
</MockedProvider>,
|
|
77
82
|
);
|
|
78
83
|
|