@oanda/labs-instruments-table-widget 1.0.15 → 1.0.17
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 +140 -0
- package/dist/main/InstrumentsTableWidget/Main.js +8 -4
- package/dist/main/InstrumentsTableWidget/Main.js.map +1 -1
- package/dist/main/InstrumentsTableWidget/components/Filters/Filters.js +7 -3
- package/dist/main/InstrumentsTableWidget/components/Filters/Filters.js.map +1 -1
- package/dist/main/InstrumentsTableWidget/config.js +11 -3
- package/dist/main/InstrumentsTableWidget/config.js.map +1 -1
- package/dist/main/translations/index.js +0 -12
- package/dist/main/translations/index.js.map +1 -1
- package/dist/main/translations/sources/en.json +13 -20
- package/dist/module/InstrumentsTableWidget/Main.js +9 -5
- package/dist/module/InstrumentsTableWidget/Main.js.map +1 -1
- package/dist/module/InstrumentsTableWidget/components/Filters/Filters.js +7 -3
- package/dist/module/InstrumentsTableWidget/components/Filters/Filters.js.map +1 -1
- package/dist/module/InstrumentsTableWidget/config.js +11 -3
- package/dist/module/InstrumentsTableWidget/config.js.map +1 -1
- package/dist/module/translations/index.js +0 -12
- package/dist/module/translations/index.js.map +1 -1
- package/dist/module/translations/sources/en.json +13 -20
- package/dist/types/InstrumentsTableWidget/config.d.ts +2 -1
- package/lokalise.config.json +2 -2
- package/package.json +3 -3
- package/src/InstrumentsTableWidget/Main.tsx +21 -16
- package/src/InstrumentsTableWidget/components/Filters/Filters.tsx +5 -3
- package/src/InstrumentsTableWidget/config.ts +12 -3
- package/src/translations/index.ts +0 -6
- package/src/translations/sources/en.json +13 -20
- package/test/Main.test.tsx +3 -3
- package/dist/main/translations/sources/es.json +0 -2
- package/dist/main/translations/sources/th.json +0 -2
- package/dist/main/translations/sources/zh_TW.json +0 -2
- package/dist/module/translations/sources/es.json +0 -2
- package/dist/module/translations/sources/th.json +0 -2
- package/dist/module/translations/sources/zh_TW.json +0 -2
- package/src/translations/sources/es.json +0 -2
- package/src/translations/sources/th.json +0 -2
- package/src/translations/sources/zh_TW.json +0 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,146 @@
|
|
|
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.17 (2025-05-23)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## 1.0.196 (2025-05-22)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## 1.0.195 (2025-05-21)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
## 1.0.194 (2025-05-21)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## 1.0.193 (2025-05-15)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
## 1.0.192 (2025-05-14)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
## 1.0.191 (2025-04-30)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
## 1.0.190 (2025-04-28)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
## 1.0.189 (2025-04-23)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
## 1.0.188 (2025-04-22)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
## 1.0.187 (2025-04-18)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
## 1.0.186 (2025-04-10)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
## 1.0.185 (2025-04-09)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
## 1.0.184 (2025-04-08)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
## 1.0.183 (2025-04-04)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
## 1.0.182 (2025-03-21)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
## 1.0.181 (2025-03-13)
|
|
71
|
+
|
|
72
|
+
**Note:** Version bump only for package @oanda/labs-instruments-table-widget
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
## 1.0.16 (2025-05-22)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
## 1.0.195 (2025-05-21)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
## 1.0.194 (2025-05-21)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
## 1.0.193 (2025-05-15)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
## 1.0.192 (2025-05-14)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
## 1.0.191 (2025-04-30)
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
## 1.0.190 (2025-04-28)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
## 1.0.189 (2025-04-23)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
## 1.0.188 (2025-04-22)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
## 1.0.187 (2025-04-18)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
## 1.0.186 (2025-04-10)
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
## 1.0.185 (2025-04-09)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
## 1.0.184 (2025-04-08)
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
## 1.0.183 (2025-04-04)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
## 1.0.182 (2025-03-21)
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
## 1.0.181 (2025-03-13)
|
|
139
|
+
|
|
140
|
+
**Note:** Version bump only for package @oanda/labs-instruments-table-widget
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
6
146
|
## 1.0.15 (2025-05-21)
|
|
7
147
|
|
|
8
148
|
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.Main = void 0;
|
|
7
7
|
var _client = require("@apollo/client");
|
|
8
8
|
var _labsWidgetCommon = require("@oanda/labs-widget-common");
|
|
9
|
+
var _monoI18n = require("@oanda/mono-i18n");
|
|
9
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
11
|
var _usehooksTs = require("usehooks-ts");
|
|
11
12
|
var _resolveInstrumentsWithFilters = require("../gql/resolveInstrumentsWithFilters");
|
|
@@ -26,6 +27,9 @@ const Main = _ref => {
|
|
|
26
27
|
dataSource
|
|
27
28
|
} = _ref;
|
|
28
29
|
const documentRef = (0, _react.useRef)(document);
|
|
30
|
+
const {
|
|
31
|
+
lang
|
|
32
|
+
} = (0, _monoI18n.useLocale)();
|
|
29
33
|
const {
|
|
30
34
|
target,
|
|
31
35
|
setQuery,
|
|
@@ -100,7 +104,7 @@ const Main = _ref => {
|
|
|
100
104
|
};
|
|
101
105
|
(0, _usehooksTs.useEventListener)('visibilitychange', onVisibilityChange, documentRef);
|
|
102
106
|
return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(_labsWidgetCommon.TableWidget, {
|
|
103
|
-
PaginationComponent: _react.default.createElement(_labsWidgetCommon.Pagination, {
|
|
107
|
+
PaginationComponent: records.length > 0 ? _react.default.createElement(_labsWidgetCommon.Pagination, {
|
|
104
108
|
currentPage: pageNumber,
|
|
105
109
|
disabled: loading,
|
|
106
110
|
recordsPerPage: recordsPerPage,
|
|
@@ -111,14 +115,14 @@ const Main = _ref => {
|
|
|
111
115
|
offset: numb * recordsPerPage
|
|
112
116
|
}));
|
|
113
117
|
}
|
|
114
|
-
}),
|
|
118
|
+
}) : _react.default.createElement(_react.default.Fragment, null),
|
|
115
119
|
TabsComponent: isInstrumentSearchEnabled || isAssetClassFilterEnabled ? _react.default.createElement(_components.Filters, {
|
|
116
120
|
assetClassOptions: [{
|
|
117
121
|
id: 'ALL',
|
|
118
|
-
label: '
|
|
122
|
+
label: lang('all')
|
|
119
123
|
}, ...(assetClasses || []).map(assetClass => ({
|
|
120
124
|
id: assetClass,
|
|
121
|
-
label:
|
|
125
|
+
label: lang(_config.assetClassLabels[assetClass])
|
|
122
126
|
}))],
|
|
123
127
|
isAssetClassFilterEnabled: isAssetClassFilterEnabled,
|
|
124
128
|
isInstrumentSearchEnabled: isInstrumentSearchEnabled,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Main.js","names":["_client","require","_labsWidgetCommon","_react","_interopRequireWildcard","_usehooksTs","_resolveInstrumentsWithFilters","_components","_config","_constant","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","Main","_ref","instruments","division","assetClasses","paramsAssetClasses","columns","DEFAULT_COLUMNS","isAssetClassFilterEnabled","isInstrumentSearchEnabled","recordsPerPage","dataSource","documentRef","useRef","document","target","setQuery","closeQuery","useLiveRatesQuery","records","setRecords","useState","Array","fill","map","assetClass","toUpperCase","totalRecords","setTotalRecords","queryVariables","setQueryVariables","count","searchPattern","offset","pageNumber","Math","floor","data","error","loading","useQuery","resolveInstrumentsWithFilters","variables","fetchPolicy","errorPolicy","useEffect","newRecords","record","instrument","name","displayName","totalCount","instrumentsNames","_ref2","showError","onVisibilityChange","current","visibilityState","_ref3","useEventListener","createElement","Fragment","TableWidget","PaginationComponent","Pagination","currentPage","disabled","onPageChange","numb","prev","TabsComponent","Filters","assetClassOptions","id","label","charAt","slice","toLowerCase","onAssetClassChange","onSearchChange","activeColumns","hasError","headerColumns","getHeaderConfig","isLoading","testId","toolTipId","INSTRUMENT_TOOLTIP_ID","viewType","exports"],"sources":["../../../src/InstrumentsTableWidget/Main.tsx"],"sourcesContent":["import { useQuery } from '@apollo/client';\nimport type { DataRecord } from '@oanda/labs-widget-common';\nimport {\n Pagination,\n TableWidget,\n useLiveRatesQuery,\n} from '@oanda/labs-widget-common';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useEventListener } from 'usehooks-ts';\n\nimport { resolveInstrumentsWithFilters } from '../gql/resolveInstrumentsWithFilters';\nimport type { Division, InstrumentDataSource } from '../gql/types/graphql';\nimport {\n type ResolveInstrumentsWithFiltersQuery,\n type ResolveInstrumentsWithFiltersQueryVariables,\n} from '../gql/types/graphql';\nimport { Filters } from './components';\nimport { getHeaderConfig } from './config';\nimport { DEFAULT_COLUMNS, INSTRUMENT_TOOLTIP_ID } from './constant';\nimport type { MainProps } from './types';\n\nconst Main = ({\n instruments = [],\n division,\n assetClasses: paramsAssetClasses,\n columns = DEFAULT_COLUMNS,\n isAssetClassFilterEnabled,\n isInstrumentSearchEnabled,\n recordsPerPage = 10,\n dataSource,\n}: MainProps) => {\n const documentRef = useRef<Document>(document);\n const { target, setQuery, closeQuery } = useLiveRatesQuery();\n\n const [records, setRecords] = useState<DataRecord[]>(\n new Array(recordsPerPage).fill({})\n );\n\n const assetClasses = paramsAssetClasses?.map((assetClass) =>\n assetClass.toUpperCase()\n );\n\n const [totalRecords, setTotalRecords] = useState<number>(0);\n\n const [queryVariables, setQueryVariables] = useState<{\n division: Division;\n count: number;\n searchPattern: string;\n offset: number;\n assetClass: string[];\n instruments: string[];\n dataSource?: InstrumentDataSource;\n }>({\n division,\n count: recordsPerPage,\n searchPattern: '',\n offset: 0,\n assetClass: assetClasses || [],\n instruments,\n dataSource,\n });\n\n const pageNumber = Math.floor(queryVariables.offset / recordsPerPage);\n\n const { data, error, loading } = useQuery<\n ResolveInstrumentsWithFiltersQuery,\n ResolveInstrumentsWithFiltersQueryVariables\n >(resolveInstrumentsWithFilters, {\n variables: queryVariables,\n fetchPolicy: 'network-only',\n errorPolicy: 'all',\n });\n\n useEffect(() => {\n if (loading) {\n setRecords(new Array(recordsPerPage).fill({}));\n }\n if (!loading && data?.resolveInstrumentsWithFilters?.instruments) {\n const newRecords = data.resolveInstrumentsWithFilters.instruments.map(\n (record) => ({\n instrument: record?.name || '',\n displayName: record?.displayName || '',\n })\n );\n setRecords(newRecords);\n setTotalRecords(data.resolveInstrumentsWithFilters.totalCount);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [loading, data]);\n\n useEffect(() => {\n const instrumentsNames = records.map(({ instrument }) => instrument);\n if (instrumentsNames[0]) {\n setQuery({ instruments: instrumentsNames });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [records]);\n\n const showError = (!loading && !!error) || (!loading && !data);\n\n const onVisibilityChange = () => {\n if (documentRef.current.visibilityState === 'hidden') {\n closeQuery();\n }\n if (documentRef.current.visibilityState === 'visible') {\n const instrumentsNames = records.map(({ instrument }) => instrument);\n if (instrumentsNames[0]) {\n setQuery({ instruments: instrumentsNames });\n }\n }\n };\n\n useEventListener('visibilitychange', onVisibilityChange, documentRef);\n\n return (\n <>\n <TableWidget\n PaginationComponent={\n <Pagination\n currentPage={pageNumber}\n disabled={loading}\n recordsPerPage={recordsPerPage}\n totalRecords={totalRecords}\n onPageChange={(numb) => {\n setQueryVariables((prev) => ({\n ...prev,\n offset: numb * recordsPerPage,\n }));\n }}\n />\n }\n TabsComponent={\n isInstrumentSearchEnabled || isAssetClassFilterEnabled ? (\n <Filters\n assetClassOptions={[\n {\n id: 'ALL',\n label: 'All',\n },\n ...(assetClasses || []).map((assetClass) => ({\n id: assetClass,\n label:\n assetClass.charAt(0) + assetClass.slice(1).toLowerCase(),\n })),\n ]}\n isAssetClassFilterEnabled={isAssetClassFilterEnabled}\n isInstrumentSearchEnabled={isInstrumentSearchEnabled}\n onAssetClassChange={(assetClass) => {\n setQueryVariables((prev) => ({\n ...prev,\n offset: 0,\n searchPattern: '',\n assetClass:\n assetClass[0] === 'ALL' ? assetClasses || [] : assetClass,\n }));\n }}\n onSearchChange={(searchPattern) => {\n setQueryVariables((prev) => ({\n ...prev,\n offset: 0,\n searchPattern,\n }));\n }}\n />\n ) : (\n <></>\n )\n }\n activeColumns={columns}\n count={totalRecords}\n hasError={showError}\n headerColumns={getHeaderConfig(columns)}\n isLoading={loading}\n pageNumber={pageNumber}\n records={records}\n target={target}\n testId=\"instruments-table-wrapper\"\n toolTipId={INSTRUMENT_TOOLTIP_ID}\n viewType=\"table\"\n />\n </>\n );\n};\n\nexport { Main };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Main.js","names":["_client","require","_labsWidgetCommon","_monoI18n","_react","_interopRequireWildcard","_usehooksTs","_resolveInstrumentsWithFilters","_components","_config","_constant","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","Main","_ref","instruments","division","assetClasses","paramsAssetClasses","columns","DEFAULT_COLUMNS","isAssetClassFilterEnabled","isInstrumentSearchEnabled","recordsPerPage","dataSource","documentRef","useRef","document","lang","useLocale","target","setQuery","closeQuery","useLiveRatesQuery","records","setRecords","useState","Array","fill","map","assetClass","toUpperCase","totalRecords","setTotalRecords","queryVariables","setQueryVariables","count","searchPattern","offset","pageNumber","Math","floor","data","error","loading","useQuery","resolveInstrumentsWithFilters","variables","fetchPolicy","errorPolicy","useEffect","newRecords","record","instrument","name","displayName","totalCount","instrumentsNames","_ref2","showError","onVisibilityChange","current","visibilityState","_ref3","useEventListener","createElement","Fragment","TableWidget","PaginationComponent","length","Pagination","currentPage","disabled","onPageChange","numb","prev","TabsComponent","Filters","assetClassOptions","id","label","assetClassLabels","onAssetClassChange","onSearchChange","activeColumns","hasError","headerColumns","getHeaderConfig","isLoading","testId","toolTipId","INSTRUMENT_TOOLTIP_ID","viewType","exports"],"sources":["../../../src/InstrumentsTableWidget/Main.tsx"],"sourcesContent":["import { useQuery } from '@apollo/client';\nimport type { DataRecord } from '@oanda/labs-widget-common';\nimport {\n Pagination,\n TableWidget,\n useLiveRatesQuery,\n} from '@oanda/labs-widget-common';\nimport { useLocale } from '@oanda/mono-i18n';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useEventListener } from 'usehooks-ts';\n\nimport { resolveInstrumentsWithFilters } from '../gql/resolveInstrumentsWithFilters';\nimport type { Division, InstrumentDataSource } from '../gql/types/graphql';\nimport {\n type ResolveInstrumentsWithFiltersQuery,\n type ResolveInstrumentsWithFiltersQueryVariables,\n} from '../gql/types/graphql';\nimport { Filters } from './components';\nimport { assetClassLabels, getHeaderConfig } from './config';\nimport { DEFAULT_COLUMNS, INSTRUMENT_TOOLTIP_ID } from './constant';\nimport type { MainProps } from './types';\n\nconst Main = ({\n instruments = [],\n division,\n assetClasses: paramsAssetClasses,\n columns = DEFAULT_COLUMNS,\n isAssetClassFilterEnabled,\n isInstrumentSearchEnabled,\n recordsPerPage = 10,\n dataSource,\n}: MainProps) => {\n const documentRef = useRef<Document>(document);\n const { lang } = useLocale();\n const { target, setQuery, closeQuery } = useLiveRatesQuery();\n\n const [records, setRecords] = useState<DataRecord[]>(\n new Array(recordsPerPage).fill({})\n );\n\n const assetClasses = paramsAssetClasses?.map((assetClass) =>\n assetClass.toUpperCase()\n );\n\n const [totalRecords, setTotalRecords] = useState<number>(0);\n\n const [queryVariables, setQueryVariables] = useState<{\n division: Division;\n count: number;\n searchPattern: string;\n offset: number;\n assetClass: string[];\n instruments: string[];\n dataSource?: InstrumentDataSource;\n }>({\n division,\n count: recordsPerPage,\n searchPattern: '',\n offset: 0,\n assetClass: assetClasses || [],\n instruments,\n dataSource,\n });\n\n const pageNumber = Math.floor(queryVariables.offset / recordsPerPage);\n\n const { data, error, loading } = useQuery<\n ResolveInstrumentsWithFiltersQuery,\n ResolveInstrumentsWithFiltersQueryVariables\n >(resolveInstrumentsWithFilters, {\n variables: queryVariables,\n fetchPolicy: 'network-only',\n errorPolicy: 'all',\n });\n\n useEffect(() => {\n if (loading) {\n setRecords(new Array(recordsPerPage).fill({}));\n }\n if (!loading && data?.resolveInstrumentsWithFilters?.instruments) {\n const newRecords = data.resolveInstrumentsWithFilters.instruments.map(\n (record) => ({\n instrument: record?.name || '',\n displayName: record?.displayName || '',\n })\n );\n setRecords(newRecords);\n setTotalRecords(data.resolveInstrumentsWithFilters.totalCount);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [loading, data]);\n\n useEffect(() => {\n const instrumentsNames = records.map(({ instrument }) => instrument);\n if (instrumentsNames[0]) {\n setQuery({ instruments: instrumentsNames });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [records]);\n\n const showError = (!loading && !!error) || (!loading && !data);\n\n const onVisibilityChange = () => {\n if (documentRef.current.visibilityState === 'hidden') {\n closeQuery();\n }\n if (documentRef.current.visibilityState === 'visible') {\n const instrumentsNames = records.map(({ instrument }) => instrument);\n if (instrumentsNames[0]) {\n setQuery({ instruments: instrumentsNames });\n }\n }\n };\n\n useEventListener('visibilitychange', onVisibilityChange, documentRef);\n\n return (\n <>\n <TableWidget\n PaginationComponent={\n records.length > 0 ? (\n <Pagination\n currentPage={pageNumber}\n disabled={loading}\n recordsPerPage={recordsPerPage}\n totalRecords={totalRecords}\n onPageChange={(numb) => {\n setQueryVariables((prev) => ({\n ...prev,\n offset: numb * recordsPerPage,\n }));\n }}\n />\n ) : (\n <></>\n )\n }\n TabsComponent={\n isInstrumentSearchEnabled || isAssetClassFilterEnabled ? (\n <Filters\n assetClassOptions={[\n {\n id: 'ALL',\n label: lang('all'),\n },\n ...(assetClasses || []).map((assetClass) => ({\n id: assetClass,\n label: lang(assetClassLabels[assetClass]),\n })),\n ]}\n isAssetClassFilterEnabled={isAssetClassFilterEnabled}\n isInstrumentSearchEnabled={isInstrumentSearchEnabled}\n onAssetClassChange={(assetClass) => {\n setQueryVariables((prev) => ({\n ...prev,\n offset: 0,\n searchPattern: '',\n assetClass:\n assetClass[0] === 'ALL' ? assetClasses || [] : assetClass,\n }));\n }}\n onSearchChange={(searchPattern) => {\n setQueryVariables((prev) => ({\n ...prev,\n offset: 0,\n searchPattern,\n }));\n }}\n />\n ) : (\n <></>\n )\n }\n activeColumns={columns}\n count={totalRecords}\n hasError={showError}\n headerColumns={getHeaderConfig(columns)}\n isLoading={loading}\n pageNumber={pageNumber}\n records={records}\n target={target}\n testId=\"instruments-table-wrapper\"\n toolTipId={INSTRUMENT_TOOLTIP_ID}\n viewType=\"table\"\n />\n </>\n );\n};\n\nexport { Main };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.Filters = void 0;
|
|
7
7
|
var _labsWidgetCommon = require("@oanda/labs-widget-common");
|
|
8
|
+
var _monoI18n = require("@oanda/mono-i18n");
|
|
8
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
10
|
var _usehooksTs = require("usehooks-ts");
|
|
10
11
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
@@ -17,6 +18,9 @@ const Filters = _ref => {
|
|
|
17
18
|
isAssetClassFilterEnabled,
|
|
18
19
|
isInstrumentSearchEnabled
|
|
19
20
|
} = _ref;
|
|
21
|
+
const {
|
|
22
|
+
lang
|
|
23
|
+
} = (0, _monoI18n.useLocale)();
|
|
20
24
|
const {
|
|
21
25
|
size
|
|
22
26
|
} = (0, _labsWidgetCommon.useLayoutProvider)();
|
|
@@ -47,7 +51,7 @@ const Filters = _ref => {
|
|
|
47
51
|
})
|
|
48
52
|
}, _react.default.createElement(_labsWidgetCommon.Select, {
|
|
49
53
|
options: assetClassOptions,
|
|
50
|
-
selectLabel:
|
|
54
|
+
selectLabel: lang('asset_class'),
|
|
51
55
|
selectedOption: assetClassOptions.find(opt => opt.id === assetClass[0]) || assetClassOptions[0],
|
|
52
56
|
setSelectedOption: option => {
|
|
53
57
|
setAssetClass([option.id]);
|
|
@@ -61,8 +65,8 @@ const Filters = _ref => {
|
|
|
61
65
|
'lw-w-[280px]': isDesktop
|
|
62
66
|
})
|
|
63
67
|
}, _react.default.createElement(_labsWidgetCommon.TextInput, {
|
|
64
|
-
label:
|
|
65
|
-
placeholder:
|
|
68
|
+
label: lang('search'),
|
|
69
|
+
placeholder: lang('instrument_name'),
|
|
66
70
|
value: searchInputValue,
|
|
67
71
|
onChange: handleTextInputSearch
|
|
68
72
|
})));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Filters.js","names":["_labsWidgetCommon","require","_react","_interopRequireWildcard","_usehooksTs","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","Filters","_ref","assetClassOptions","onSearchChange","onAssetClassChange","isAssetClassFilterEnabled","isInstrumentSearchEnabled","size","useLayoutProvider","isDesktop","Size","DESKTOP","assetClass","setAssetClass","useState","id","searchInputValue","setSearchInputValue","debounced","useDebounceCallback","val","handleTextInputSearch","value","length","createElement","className","cn","Select","options","selectLabel","selectedOption","find","opt","setSelectedOption","option","TextInput","label","placeholder","onChange","exports"],"sources":["../../../../../src/InstrumentsTableWidget/components/Filters/Filters.tsx"],"sourcesContent":["import {\n cn,\n Select,\n Size,\n TextInput,\n useLayoutProvider,\n} from '@oanda/labs-widget-common';\nimport React, { useState } from 'react';\nimport { useDebounceCallback } from 'usehooks-ts';\n\nimport type { FiltersProps } from './types';\n\nexport const Filters = ({\n assetClassOptions,\n onSearchChange,\n onAssetClassChange,\n isAssetClassFilterEnabled,\n isInstrumentSearchEnabled,\n}: FiltersProps) => {\n const { size } = useLayoutProvider();\n const isDesktop = size === Size.DESKTOP;\n\n const [assetClass, setAssetClass] = useState([assetClassOptions[0].id]);\n const [searchInputValue, setSearchInputValue] = useState('');\n\n const debounced = useDebounceCallback((val: string) => {\n onSearchChange(val);\n }, 300);\n\n const handleTextInputSearch = (value: string) => {\n setSearchInputValue(value);\n if (value.length >= 3) {\n debounced(value);\n }\n if (value.length === 0) {\n onSearchChange(value);\n }\n };\n\n return (\n <div\n className={cn('lw-mb-4 lw-mt-2 lw-flex lw-w-full lw-gap-4', {\n 'lw-flex-col': !isDesktop,\n 'lw-flex-row': isDesktop,\n })}\n >\n {isAssetClassFilterEnabled && (\n <div\n className={cn({\n 'lw-w-full': !isDesktop,\n 'lw-w-[280px]': isDesktop,\n })}\n >\n <Select\n options={assetClassOptions}\n selectLabel
|
|
1
|
+
{"version":3,"file":"Filters.js","names":["_labsWidgetCommon","require","_monoI18n","_react","_interopRequireWildcard","_usehooksTs","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","Filters","_ref","assetClassOptions","onSearchChange","onAssetClassChange","isAssetClassFilterEnabled","isInstrumentSearchEnabled","lang","useLocale","size","useLayoutProvider","isDesktop","Size","DESKTOP","assetClass","setAssetClass","useState","id","searchInputValue","setSearchInputValue","debounced","useDebounceCallback","val","handleTextInputSearch","value","length","createElement","className","cn","Select","options","selectLabel","selectedOption","find","opt","setSelectedOption","option","TextInput","label","placeholder","onChange","exports"],"sources":["../../../../../src/InstrumentsTableWidget/components/Filters/Filters.tsx"],"sourcesContent":["import {\n cn,\n Select,\n Size,\n TextInput,\n useLayoutProvider,\n} from '@oanda/labs-widget-common';\nimport { useLocale } from '@oanda/mono-i18n';\nimport React, { useState } from 'react';\nimport { useDebounceCallback } from 'usehooks-ts';\n\nimport type { FiltersProps } from './types';\n\nexport const Filters = ({\n assetClassOptions,\n onSearchChange,\n onAssetClassChange,\n isAssetClassFilterEnabled,\n isInstrumentSearchEnabled,\n}: FiltersProps) => {\n const { lang } = useLocale();\n const { size } = useLayoutProvider();\n const isDesktop = size === Size.DESKTOP;\n\n const [assetClass, setAssetClass] = useState([assetClassOptions[0].id]);\n const [searchInputValue, setSearchInputValue] = useState('');\n\n const debounced = useDebounceCallback((val: string) => {\n onSearchChange(val);\n }, 300);\n\n const handleTextInputSearch = (value: string) => {\n setSearchInputValue(value);\n if (value.length >= 3) {\n debounced(value);\n }\n if (value.length === 0) {\n onSearchChange(value);\n }\n };\n\n return (\n <div\n className={cn('lw-mb-4 lw-mt-2 lw-flex lw-w-full lw-gap-4', {\n 'lw-flex-col': !isDesktop,\n 'lw-flex-row': isDesktop,\n })}\n >\n {isAssetClassFilterEnabled && (\n <div\n className={cn({\n 'lw-w-full': !isDesktop,\n 'lw-w-[280px]': isDesktop,\n })}\n >\n <Select\n options={assetClassOptions}\n selectLabel={lang('asset_class')}\n selectedOption={\n assetClassOptions.find((opt) => opt.id === assetClass[0]) ||\n assetClassOptions[0]\n }\n setSelectedOption={(option) => {\n setAssetClass([option.id]);\n onAssetClassChange([option.id]);\n setSearchInputValue('');\n onSearchChange('');\n }}\n />\n </div>\n )}\n {isInstrumentSearchEnabled && (\n <div\n className={cn({\n 'lw-w-full': !isDesktop,\n 'lw-w-[280px]': isDesktop,\n })}\n >\n <TextInput\n label={lang('search')}\n placeholder={lang('instrument_name')}\n value={searchInputValue}\n onChange={handleTextInputSearch}\n />\n </div>\n )}\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.headerConfig = exports.getHeaderConfig = void 0;
|
|
6
|
+
exports.headerConfig = exports.getHeaderConfig = exports.assetClassLabels = void 0;
|
|
7
7
|
var _labsWidgetCommon = require("@oanda/labs-widget-common");
|
|
8
8
|
const headerConfig = exports.headerConfig = {
|
|
9
9
|
[_labsWidgetCommon.DataRecordType.INSTRUMENT]: {
|
|
@@ -27,14 +27,22 @@ const headerConfig = exports.headerConfig = {
|
|
|
27
27
|
additionalStyles: 'lw-text-right lw-min-w-[80px]'
|
|
28
28
|
},
|
|
29
29
|
[_labsWidgetCommon.DataRecordType.HIGH]: {
|
|
30
|
-
displayName: '
|
|
30
|
+
displayName: 'today_high',
|
|
31
31
|
additionalStyles: 'lw-text-right lw-min-w-[80px]'
|
|
32
32
|
},
|
|
33
33
|
[_labsWidgetCommon.DataRecordType.LOW]: {
|
|
34
|
-
displayName: '
|
|
34
|
+
displayName: 'today_low',
|
|
35
35
|
additionalStyles: 'lw-text-right lw-min-w-[80px]'
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
|
+
const assetClassLabels = exports.assetClassLabels = {
|
|
39
|
+
CURRENCY: 'currency',
|
|
40
|
+
COMMODITIES: 'commodity',
|
|
41
|
+
RATES: 'bond',
|
|
42
|
+
CRYPTOCURRENCY: 'crypto',
|
|
43
|
+
EQUITY_SHARES: 'share_sfds',
|
|
44
|
+
INDICES: 'index'
|
|
45
|
+
};
|
|
38
46
|
const getHeaderConfig = activeColumns => {
|
|
39
47
|
const columns = [_labsWidgetCommon.DataRecordType.INSTRUMENT, ...activeColumns].filter(item => item !== _labsWidgetCommon.DataRecordType.SENTIMENT);
|
|
40
48
|
return columns.map(item => headerConfig[item]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","names":["_labsWidgetCommon","require","headerConfig","exports","DataRecordType","INSTRUMENT","displayName","additionalStyles","SELL","BUY","SPREAD","DAILY_CHANGE","HIGH","LOW","getHeaderConfig","activeColumns","columns","filter","item","SENTIMENT","map"],"sources":["../../../src/InstrumentsTableWidget/config.ts"],"sourcesContent":["import type { HeaderColumns } from '@oanda/labs-widget-common';\nimport { DataRecordType } from '@oanda/labs-widget-common';\n\ntype HeaderRecordType =\n | DataRecordType.INSTRUMENT\n | DataRecordType.SELL\n | DataRecordType.BUY\n | DataRecordType.DAILY_CHANGE\n | DataRecordType.SPREAD\n | DataRecordType.HIGH\n | DataRecordType.LOW;\n\nconst headerConfig: Record<\n HeaderRecordType,\n { displayName: string; additionalStyles: string }\n> = {\n [DataRecordType.INSTRUMENT]: {\n displayName: 'instrument',\n additionalStyles: 'lw-text-left lw-min-w-[130px]',\n },\n [DataRecordType.SELL]: {\n displayName: 'sell',\n additionalStyles: 'lw-text-right lw-min-w-[75px] lw-pr-4',\n },\n [DataRecordType.BUY]: {\n displayName: 'buy',\n additionalStyles: 'lw-text-right lw-min-w-[75px] lw-pr-4',\n },\n [DataRecordType.SPREAD]: {\n displayName: 'spread',\n additionalStyles: 'lw-text-right lw-min-w-[50px]',\n },\n [DataRecordType.DAILY_CHANGE]: {\n displayName: 'daily_percent_change',\n additionalStyles: 'lw-text-right lw-min-w-[80px]',\n },\n [DataRecordType.HIGH]: {\n displayName: '
|
|
1
|
+
{"version":3,"file":"config.js","names":["_labsWidgetCommon","require","headerConfig","exports","DataRecordType","INSTRUMENT","displayName","additionalStyles","SELL","BUY","SPREAD","DAILY_CHANGE","HIGH","LOW","assetClassLabels","CURRENCY","COMMODITIES","RATES","CRYPTOCURRENCY","EQUITY_SHARES","INDICES","getHeaderConfig","activeColumns","columns","filter","item","SENTIMENT","map"],"sources":["../../../src/InstrumentsTableWidget/config.ts"],"sourcesContent":["import type { HeaderColumns } from '@oanda/labs-widget-common';\nimport { DataRecordType } from '@oanda/labs-widget-common';\n\ntype HeaderRecordType =\n | DataRecordType.INSTRUMENT\n | DataRecordType.SELL\n | DataRecordType.BUY\n | DataRecordType.DAILY_CHANGE\n | DataRecordType.SPREAD\n | DataRecordType.HIGH\n | DataRecordType.LOW;\n\nconst headerConfig: Record<\n HeaderRecordType,\n { displayName: string; additionalStyles: string }\n> = {\n [DataRecordType.INSTRUMENT]: {\n displayName: 'instrument',\n additionalStyles: 'lw-text-left lw-min-w-[130px]',\n },\n [DataRecordType.SELL]: {\n displayName: 'sell',\n additionalStyles: 'lw-text-right lw-min-w-[75px] lw-pr-4',\n },\n [DataRecordType.BUY]: {\n displayName: 'buy',\n additionalStyles: 'lw-text-right lw-min-w-[75px] lw-pr-4',\n },\n [DataRecordType.SPREAD]: {\n displayName: 'spread',\n additionalStyles: 'lw-text-right lw-min-w-[50px]',\n },\n [DataRecordType.DAILY_CHANGE]: {\n displayName: 'daily_percent_change',\n additionalStyles: 'lw-text-right lw-min-w-[80px]',\n },\n [DataRecordType.HIGH]: {\n displayName: 'today_high',\n additionalStyles: 'lw-text-right lw-min-w-[80px]',\n },\n [DataRecordType.LOW]: {\n displayName: 'today_low',\n additionalStyles: 'lw-text-right lw-min-w-[80px]',\n },\n};\n\nconst assetClassLabels: Record<string, string> = {\n CURRENCY: 'currency',\n COMMODITIES: 'commodity',\n RATES: 'bond',\n CRYPTOCURRENCY: 'crypto',\n EQUITY_SHARES: 'share_sfds',\n INDICES: 'index',\n};\n\nconst getHeaderConfig = (activeColumns: DataRecordType[]): HeaderColumns[] => {\n const columns: HeaderRecordType[] = [\n DataRecordType.INSTRUMENT,\n ...activeColumns,\n ].filter(\n (item): item is HeaderRecordType => item !== DataRecordType.SENTIMENT\n );\n\n return columns.map((item) => headerConfig[item]);\n};\n\nexport { assetClassLabels, getHeaderConfig, headerConfig };\n"],"mappings":";;;;;;AACA,IAAAA,iBAAA,GAAAC,OAAA;AAWA,MAAMC,YAGL,GAAAC,OAAA,CAAAD,YAAA,GAAG;EACF,CAACE,gCAAc,CAACC,UAAU,GAAG;IAC3BC,WAAW,EAAE,YAAY;IACzBC,gBAAgB,EAAE;EACpB,CAAC;EACD,CAACH,gCAAc,CAACI,IAAI,GAAG;IACrBF,WAAW,EAAE,MAAM;IACnBC,gBAAgB,EAAE;EACpB,CAAC;EACD,CAACH,gCAAc,CAACK,GAAG,GAAG;IACpBH,WAAW,EAAE,KAAK;IAClBC,gBAAgB,EAAE;EACpB,CAAC;EACD,CAACH,gCAAc,CAACM,MAAM,GAAG;IACvBJ,WAAW,EAAE,QAAQ;IACrBC,gBAAgB,EAAE;EACpB,CAAC;EACD,CAACH,gCAAc,CAACO,YAAY,GAAG;IAC7BL,WAAW,EAAE,sBAAsB;IACnCC,gBAAgB,EAAE;EACpB,CAAC;EACD,CAACH,gCAAc,CAACQ,IAAI,GAAG;IACrBN,WAAW,EAAE,YAAY;IACzBC,gBAAgB,EAAE;EACpB,CAAC;EACD,CAACH,gCAAc,CAACS,GAAG,GAAG;IACpBP,WAAW,EAAE,WAAW;IACxBC,gBAAgB,EAAE;EACpB;AACF,CAAC;AAED,MAAMO,gBAAwC,GAAAX,OAAA,CAAAW,gBAAA,GAAG;EAC/CC,QAAQ,EAAE,UAAU;EACpBC,WAAW,EAAE,WAAW;EACxBC,KAAK,EAAE,MAAM;EACbC,cAAc,EAAE,QAAQ;EACxBC,aAAa,EAAE,YAAY;EAC3BC,OAAO,EAAE;AACX,CAAC;AAED,MAAMC,eAAe,GAAIC,aAA+B,IAAsB;EAC5E,MAAMC,OAA2B,GAAG,CAClCnB,gCAAc,CAACC,UAAU,EACzB,GAAGiB,aAAa,CACjB,CAACE,MAAM,CACLC,IAAI,IAA+BA,IAAI,KAAKrB,gCAAc,CAACsB,SAC9D,CAAC;EAED,OAAOH,OAAO,CAACI,GAAG,CAAEF,IAAI,IAAKvB,YAAY,CAACuB,IAAI,CAAC,CAAC;AAClD,CAAC;AAACtB,OAAA,CAAAkB,eAAA,GAAAA,eAAA","ignoreList":[]}
|
|
@@ -6,22 +6,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.translations = void 0;
|
|
7
7
|
var _monoI18n = require("@oanda/mono-i18n");
|
|
8
8
|
var _en = _interopRequireDefault(require("./sources/en.json"));
|
|
9
|
-
var _es = _interopRequireDefault(require("./sources/es.json"));
|
|
10
|
-
var _th = _interopRequireDefault(require("./sources/th.json"));
|
|
11
|
-
var _zh_TW = _interopRequireDefault(require("./sources/zh_TW.json"));
|
|
12
9
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
10
|
const translations = exports.translations = {
|
|
14
11
|
[_monoI18n.Locale.en]: {
|
|
15
12
|
translation: _en.default
|
|
16
|
-
},
|
|
17
|
-
[_monoI18n.Locale.zhTW]: {
|
|
18
|
-
translation: _zh_TW.default
|
|
19
|
-
},
|
|
20
|
-
[_monoI18n.Locale.es]: {
|
|
21
|
-
translation: _es.default
|
|
22
|
-
},
|
|
23
|
-
[_monoI18n.Locale.th]: {
|
|
24
|
-
translation: _th.default
|
|
25
13
|
}
|
|
26
14
|
};
|
|
27
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_monoI18n","require","_en","_interopRequireDefault","
|
|
1
|
+
{"version":3,"file":"index.js","names":["_monoI18n","require","_en","_interopRequireDefault","e","__esModule","default","translations","exports","Locale","en","translation"],"sources":["../../../src/translations/index.ts"],"sourcesContent":["import type { Translations } from '@oanda/mono-i18n';\nimport { Locale } from '@oanda/mono-i18n';\n\nimport en from './sources/en.json';\nimport type { defaultTranslations } from './translations';\n\nexport type TranslationKey = keyof typeof defaultTranslations;\n\nexport const translations: Translations = {\n [Locale.en]: { translation: en },\n};\n"],"mappings":";;;;;;AACA,IAAAA,SAAA,GAAAC,OAAA;AAEA,IAAAC,GAAA,GAAAC,sBAAA,CAAAF,OAAA;AAAmC,SAAAE,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAK5B,MAAMG,YAA0B,GAAAC,OAAA,CAAAD,YAAA,GAAG;EACxC,CAACE,gBAAM,CAACC,EAAE,GAAG;IAAEC,WAAW,EAAED;EAAG;AACjC,CAAC","ignoreList":[]}
|
|
@@ -1,29 +1,22 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
"
|
|
4
|
-
"
|
|
2
|
+
"all": "All",
|
|
3
|
+
"asset_class": "Asset class",
|
|
4
|
+
"bond": "Bond",
|
|
5
5
|
"buy": "Buy",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
6
|
+
"commodity": "Commodity",
|
|
7
|
+
"crypto": "Crypto",
|
|
8
|
+
"currency": "Currency",
|
|
9
9
|
"daily_percent_change": "Daily % Change",
|
|
10
10
|
"data_unavailable": "Data unavailable",
|
|
11
|
-
"
|
|
12
|
-
"hot": "Hot",
|
|
11
|
+
"index": "Index",
|
|
13
12
|
"instrument": "Instrument",
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"net_long": "Net-long",
|
|
17
|
-
"net_short": "Net-short",
|
|
13
|
+
"instrument_name": "Instrument name",
|
|
14
|
+
"no_matching_results": "No matching results",
|
|
18
15
|
"pagination_entries_range": "{{firstItemOnPage}}-{{lastItemOnPage}} of {{itemCount}} entries",
|
|
19
|
-
"
|
|
16
|
+
"search": "Search",
|
|
20
17
|
"sell": "Sell",
|
|
21
|
-
"
|
|
22
|
-
"sentiment": "Sentiment",
|
|
18
|
+
"share_sfds": "Share CFDs",
|
|
23
19
|
"spread": "Spread",
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"low": "Low",
|
|
27
|
-
"high": "High",
|
|
28
|
-
"margin": "Margin"
|
|
20
|
+
"today_high": "Today High",
|
|
21
|
+
"today_low": "Today Low"
|
|
29
22
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { useQuery } from '@apollo/client';
|
|
2
2
|
import { Pagination, TableWidget, useLiveRatesQuery } from '@oanda/labs-widget-common';
|
|
3
|
+
import { useLocale } from '@oanda/mono-i18n';
|
|
3
4
|
import React, { useEffect, useRef, useState } from 'react';
|
|
4
5
|
import { useEventListener } from 'usehooks-ts';
|
|
5
6
|
import { resolveInstrumentsWithFilters } from '../gql/resolveInstrumentsWithFilters';
|
|
6
7
|
import { Filters } from './components';
|
|
7
|
-
import { getHeaderConfig } from './config';
|
|
8
|
+
import { assetClassLabels, getHeaderConfig } from './config';
|
|
8
9
|
import { DEFAULT_COLUMNS, INSTRUMENT_TOOLTIP_ID } from './constant';
|
|
9
10
|
const Main = _ref => {
|
|
10
11
|
let {
|
|
@@ -18,6 +19,9 @@ const Main = _ref => {
|
|
|
18
19
|
dataSource
|
|
19
20
|
} = _ref;
|
|
20
21
|
const documentRef = useRef(document);
|
|
22
|
+
const {
|
|
23
|
+
lang
|
|
24
|
+
} = useLocale();
|
|
21
25
|
const {
|
|
22
26
|
target,
|
|
23
27
|
setQuery,
|
|
@@ -92,7 +96,7 @@ const Main = _ref => {
|
|
|
92
96
|
};
|
|
93
97
|
useEventListener('visibilitychange', onVisibilityChange, documentRef);
|
|
94
98
|
return React.createElement(React.Fragment, null, React.createElement(TableWidget, {
|
|
95
|
-
PaginationComponent: React.createElement(Pagination, {
|
|
99
|
+
PaginationComponent: records.length > 0 ? React.createElement(Pagination, {
|
|
96
100
|
currentPage: pageNumber,
|
|
97
101
|
disabled: loading,
|
|
98
102
|
recordsPerPage: recordsPerPage,
|
|
@@ -103,14 +107,14 @@ const Main = _ref => {
|
|
|
103
107
|
offset: numb * recordsPerPage
|
|
104
108
|
}));
|
|
105
109
|
}
|
|
106
|
-
}),
|
|
110
|
+
}) : React.createElement(React.Fragment, null),
|
|
107
111
|
TabsComponent: isInstrumentSearchEnabled || isAssetClassFilterEnabled ? React.createElement(Filters, {
|
|
108
112
|
assetClassOptions: [{
|
|
109
113
|
id: 'ALL',
|
|
110
|
-
label: '
|
|
114
|
+
label: lang('all')
|
|
111
115
|
}, ...(assetClasses || []).map(assetClass => ({
|
|
112
116
|
id: assetClass,
|
|
113
|
-
label:
|
|
117
|
+
label: lang(assetClassLabels[assetClass])
|
|
114
118
|
}))],
|
|
115
119
|
isAssetClassFilterEnabled: isAssetClassFilterEnabled,
|
|
116
120
|
isInstrumentSearchEnabled: isInstrumentSearchEnabled,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Main.js","names":["useQuery","Pagination","TableWidget","useLiveRatesQuery","React","useEffect","useRef","useState","useEventListener","resolveInstrumentsWithFilters","Filters","getHeaderConfig","DEFAULT_COLUMNS","INSTRUMENT_TOOLTIP_ID","Main","_ref","instruments","division","assetClasses","paramsAssetClasses","columns","isAssetClassFilterEnabled","isInstrumentSearchEnabled","recordsPerPage","dataSource","documentRef","document","target","setQuery","closeQuery","records","setRecords","Array","fill","map","assetClass","toUpperCase","totalRecords","setTotalRecords","queryVariables","setQueryVariables","count","searchPattern","offset","pageNumber","Math","floor","data","error","loading","variables","fetchPolicy","errorPolicy","newRecords","record","instrument","name","displayName","totalCount","instrumentsNames","_ref2","showError","onVisibilityChange","current","visibilityState","_ref3","createElement","Fragment","PaginationComponent","currentPage","disabled","onPageChange","numb","prev","TabsComponent","assetClassOptions","id","label","charAt","slice","toLowerCase","onAssetClassChange","onSearchChange","activeColumns","hasError","headerColumns","isLoading","testId","toolTipId","viewType"],"sources":["../../../src/InstrumentsTableWidget/Main.tsx"],"sourcesContent":["import { useQuery } from '@apollo/client';\nimport type { DataRecord } from '@oanda/labs-widget-common';\nimport {\n Pagination,\n TableWidget,\n useLiveRatesQuery,\n} from '@oanda/labs-widget-common';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useEventListener } from 'usehooks-ts';\n\nimport { resolveInstrumentsWithFilters } from '../gql/resolveInstrumentsWithFilters';\nimport type { Division, InstrumentDataSource } from '../gql/types/graphql';\nimport {\n type ResolveInstrumentsWithFiltersQuery,\n type ResolveInstrumentsWithFiltersQueryVariables,\n} from '../gql/types/graphql';\nimport { Filters } from './components';\nimport { getHeaderConfig } from './config';\nimport { DEFAULT_COLUMNS, INSTRUMENT_TOOLTIP_ID } from './constant';\nimport type { MainProps } from './types';\n\nconst Main = ({\n instruments = [],\n division,\n assetClasses: paramsAssetClasses,\n columns = DEFAULT_COLUMNS,\n isAssetClassFilterEnabled,\n isInstrumentSearchEnabled,\n recordsPerPage = 10,\n dataSource,\n}: MainProps) => {\n const documentRef = useRef<Document>(document);\n const { target, setQuery, closeQuery } = useLiveRatesQuery();\n\n const [records, setRecords] = useState<DataRecord[]>(\n new Array(recordsPerPage).fill({})\n );\n\n const assetClasses = paramsAssetClasses?.map((assetClass) =>\n assetClass.toUpperCase()\n );\n\n const [totalRecords, setTotalRecords] = useState<number>(0);\n\n const [queryVariables, setQueryVariables] = useState<{\n division: Division;\n count: number;\n searchPattern: string;\n offset: number;\n assetClass: string[];\n instruments: string[];\n dataSource?: InstrumentDataSource;\n }>({\n division,\n count: recordsPerPage,\n searchPattern: '',\n offset: 0,\n assetClass: assetClasses || [],\n instruments,\n dataSource,\n });\n\n const pageNumber = Math.floor(queryVariables.offset / recordsPerPage);\n\n const { data, error, loading } = useQuery<\n ResolveInstrumentsWithFiltersQuery,\n ResolveInstrumentsWithFiltersQueryVariables\n >(resolveInstrumentsWithFilters, {\n variables: queryVariables,\n fetchPolicy: 'network-only',\n errorPolicy: 'all',\n });\n\n useEffect(() => {\n if (loading) {\n setRecords(new Array(recordsPerPage).fill({}));\n }\n if (!loading && data?.resolveInstrumentsWithFilters?.instruments) {\n const newRecords = data.resolveInstrumentsWithFilters.instruments.map(\n (record) => ({\n instrument: record?.name || '',\n displayName: record?.displayName || '',\n })\n );\n setRecords(newRecords);\n setTotalRecords(data.resolveInstrumentsWithFilters.totalCount);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [loading, data]);\n\n useEffect(() => {\n const instrumentsNames = records.map(({ instrument }) => instrument);\n if (instrumentsNames[0]) {\n setQuery({ instruments: instrumentsNames });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [records]);\n\n const showError = (!loading && !!error) || (!loading && !data);\n\n const onVisibilityChange = () => {\n if (documentRef.current.visibilityState === 'hidden') {\n closeQuery();\n }\n if (documentRef.current.visibilityState === 'visible') {\n const instrumentsNames = records.map(({ instrument }) => instrument);\n if (instrumentsNames[0]) {\n setQuery({ instruments: instrumentsNames });\n }\n }\n };\n\n useEventListener('visibilitychange', onVisibilityChange, documentRef);\n\n return (\n <>\n <TableWidget\n PaginationComponent={\n <Pagination\n currentPage={pageNumber}\n disabled={loading}\n recordsPerPage={recordsPerPage}\n totalRecords={totalRecords}\n onPageChange={(numb) => {\n setQueryVariables((prev) => ({\n ...prev,\n offset: numb * recordsPerPage,\n }));\n }}\n />\n }\n TabsComponent={\n isInstrumentSearchEnabled || isAssetClassFilterEnabled ? (\n <Filters\n assetClassOptions={[\n {\n id: 'ALL',\n label: 'All',\n },\n ...(assetClasses || []).map((assetClass) => ({\n id: assetClass,\n label:\n assetClass.charAt(0) + assetClass.slice(1).toLowerCase(),\n })),\n ]}\n isAssetClassFilterEnabled={isAssetClassFilterEnabled}\n isInstrumentSearchEnabled={isInstrumentSearchEnabled}\n onAssetClassChange={(assetClass) => {\n setQueryVariables((prev) => ({\n ...prev,\n offset: 0,\n searchPattern: '',\n assetClass:\n assetClass[0] === 'ALL' ? assetClasses || [] : assetClass,\n }));\n }}\n onSearchChange={(searchPattern) => {\n setQueryVariables((prev) => ({\n ...prev,\n offset: 0,\n searchPattern,\n }));\n }}\n />\n ) : (\n <></>\n )\n }\n activeColumns={columns}\n count={totalRecords}\n hasError={showError}\n headerColumns={getHeaderConfig(columns)}\n isLoading={loading}\n pageNumber={pageNumber}\n records={records}\n target={target}\n testId=\"instruments-table-wrapper\"\n toolTipId={INSTRUMENT_TOOLTIP_ID}\n viewType=\"table\"\n />\n </>\n );\n};\n\nexport { Main };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Main.js","names":["useQuery","Pagination","TableWidget","useLiveRatesQuery","useLocale","React","useEffect","useRef","useState","useEventListener","resolveInstrumentsWithFilters","Filters","assetClassLabels","getHeaderConfig","DEFAULT_COLUMNS","INSTRUMENT_TOOLTIP_ID","Main","_ref","instruments","division","assetClasses","paramsAssetClasses","columns","isAssetClassFilterEnabled","isInstrumentSearchEnabled","recordsPerPage","dataSource","documentRef","document","lang","target","setQuery","closeQuery","records","setRecords","Array","fill","map","assetClass","toUpperCase","totalRecords","setTotalRecords","queryVariables","setQueryVariables","count","searchPattern","offset","pageNumber","Math","floor","data","error","loading","variables","fetchPolicy","errorPolicy","newRecords","record","instrument","name","displayName","totalCount","instrumentsNames","_ref2","showError","onVisibilityChange","current","visibilityState","_ref3","createElement","Fragment","PaginationComponent","length","currentPage","disabled","onPageChange","numb","prev","TabsComponent","assetClassOptions","id","label","onAssetClassChange","onSearchChange","activeColumns","hasError","headerColumns","isLoading","testId","toolTipId","viewType"],"sources":["../../../src/InstrumentsTableWidget/Main.tsx"],"sourcesContent":["import { useQuery } from '@apollo/client';\nimport type { DataRecord } from '@oanda/labs-widget-common';\nimport {\n Pagination,\n TableWidget,\n useLiveRatesQuery,\n} from '@oanda/labs-widget-common';\nimport { useLocale } from '@oanda/mono-i18n';\nimport React, { useEffect, useRef, useState } from 'react';\nimport { useEventListener } from 'usehooks-ts';\n\nimport { resolveInstrumentsWithFilters } from '../gql/resolveInstrumentsWithFilters';\nimport type { Division, InstrumentDataSource } from '../gql/types/graphql';\nimport {\n type ResolveInstrumentsWithFiltersQuery,\n type ResolveInstrumentsWithFiltersQueryVariables,\n} from '../gql/types/graphql';\nimport { Filters } from './components';\nimport { assetClassLabels, getHeaderConfig } from './config';\nimport { DEFAULT_COLUMNS, INSTRUMENT_TOOLTIP_ID } from './constant';\nimport type { MainProps } from './types';\n\nconst Main = ({\n instruments = [],\n division,\n assetClasses: paramsAssetClasses,\n columns = DEFAULT_COLUMNS,\n isAssetClassFilterEnabled,\n isInstrumentSearchEnabled,\n recordsPerPage = 10,\n dataSource,\n}: MainProps) => {\n const documentRef = useRef<Document>(document);\n const { lang } = useLocale();\n const { target, setQuery, closeQuery } = useLiveRatesQuery();\n\n const [records, setRecords] = useState<DataRecord[]>(\n new Array(recordsPerPage).fill({})\n );\n\n const assetClasses = paramsAssetClasses?.map((assetClass) =>\n assetClass.toUpperCase()\n );\n\n const [totalRecords, setTotalRecords] = useState<number>(0);\n\n const [queryVariables, setQueryVariables] = useState<{\n division: Division;\n count: number;\n searchPattern: string;\n offset: number;\n assetClass: string[];\n instruments: string[];\n dataSource?: InstrumentDataSource;\n }>({\n division,\n count: recordsPerPage,\n searchPattern: '',\n offset: 0,\n assetClass: assetClasses || [],\n instruments,\n dataSource,\n });\n\n const pageNumber = Math.floor(queryVariables.offset / recordsPerPage);\n\n const { data, error, loading } = useQuery<\n ResolveInstrumentsWithFiltersQuery,\n ResolveInstrumentsWithFiltersQueryVariables\n >(resolveInstrumentsWithFilters, {\n variables: queryVariables,\n fetchPolicy: 'network-only',\n errorPolicy: 'all',\n });\n\n useEffect(() => {\n if (loading) {\n setRecords(new Array(recordsPerPage).fill({}));\n }\n if (!loading && data?.resolveInstrumentsWithFilters?.instruments) {\n const newRecords = data.resolveInstrumentsWithFilters.instruments.map(\n (record) => ({\n instrument: record?.name || '',\n displayName: record?.displayName || '',\n })\n );\n setRecords(newRecords);\n setTotalRecords(data.resolveInstrumentsWithFilters.totalCount);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [loading, data]);\n\n useEffect(() => {\n const instrumentsNames = records.map(({ instrument }) => instrument);\n if (instrumentsNames[0]) {\n setQuery({ instruments: instrumentsNames });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [records]);\n\n const showError = (!loading && !!error) || (!loading && !data);\n\n const onVisibilityChange = () => {\n if (documentRef.current.visibilityState === 'hidden') {\n closeQuery();\n }\n if (documentRef.current.visibilityState === 'visible') {\n const instrumentsNames = records.map(({ instrument }) => instrument);\n if (instrumentsNames[0]) {\n setQuery({ instruments: instrumentsNames });\n }\n }\n };\n\n useEventListener('visibilitychange', onVisibilityChange, documentRef);\n\n return (\n <>\n <TableWidget\n PaginationComponent={\n records.length > 0 ? (\n <Pagination\n currentPage={pageNumber}\n disabled={loading}\n recordsPerPage={recordsPerPage}\n totalRecords={totalRecords}\n onPageChange={(numb) => {\n setQueryVariables((prev) => ({\n ...prev,\n offset: numb * recordsPerPage,\n }));\n }}\n />\n ) : (\n <></>\n )\n }\n TabsComponent={\n isInstrumentSearchEnabled || isAssetClassFilterEnabled ? (\n <Filters\n assetClassOptions={[\n {\n id: 'ALL',\n label: lang('all'),\n },\n ...(assetClasses || []).map((assetClass) => ({\n id: assetClass,\n label: lang(assetClassLabels[assetClass]),\n })),\n ]}\n isAssetClassFilterEnabled={isAssetClassFilterEnabled}\n isInstrumentSearchEnabled={isInstrumentSearchEnabled}\n onAssetClassChange={(assetClass) => {\n setQueryVariables((prev) => ({\n ...prev,\n offset: 0,\n searchPattern: '',\n assetClass:\n assetClass[0] === 'ALL' ? assetClasses || [] : assetClass,\n }));\n }}\n onSearchChange={(searchPattern) => {\n setQueryVariables((prev) => ({\n ...prev,\n offset: 0,\n searchPattern,\n }));\n }}\n />\n ) : (\n <></>\n )\n }\n activeColumns={columns}\n count={totalRecords}\n hasError={showError}\n headerColumns={getHeaderConfig(columns)}\n isLoading={loading}\n pageNumber={pageNumber}\n records={records}\n target={target}\n testId=\"instruments-table-wrapper\"\n toolTipId={INSTRUMENT_TOOLTIP_ID}\n viewType=\"table\"\n />\n </>\n );\n};\n\nexport { Main };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { cn, Select, Size, TextInput, useLayoutProvider } from '@oanda/labs-widget-common';
|
|
2
|
+
import { useLocale } from '@oanda/mono-i18n';
|
|
2
3
|
import React, { useState } from 'react';
|
|
3
4
|
import { useDebounceCallback } from 'usehooks-ts';
|
|
4
5
|
export const Filters = _ref => {
|
|
@@ -9,6 +10,9 @@ export const Filters = _ref => {
|
|
|
9
10
|
isAssetClassFilterEnabled,
|
|
10
11
|
isInstrumentSearchEnabled
|
|
11
12
|
} = _ref;
|
|
13
|
+
const {
|
|
14
|
+
lang
|
|
15
|
+
} = useLocale();
|
|
12
16
|
const {
|
|
13
17
|
size
|
|
14
18
|
} = useLayoutProvider();
|
|
@@ -39,7 +43,7 @@ export const Filters = _ref => {
|
|
|
39
43
|
})
|
|
40
44
|
}, React.createElement(Select, {
|
|
41
45
|
options: assetClassOptions,
|
|
42
|
-
selectLabel:
|
|
46
|
+
selectLabel: lang('asset_class'),
|
|
43
47
|
selectedOption: assetClassOptions.find(opt => opt.id === assetClass[0]) || assetClassOptions[0],
|
|
44
48
|
setSelectedOption: option => {
|
|
45
49
|
setAssetClass([option.id]);
|
|
@@ -53,8 +57,8 @@ export const Filters = _ref => {
|
|
|
53
57
|
'lw-w-[280px]': isDesktop
|
|
54
58
|
})
|
|
55
59
|
}, React.createElement(TextInput, {
|
|
56
|
-
label:
|
|
57
|
-
placeholder:
|
|
60
|
+
label: lang('search'),
|
|
61
|
+
placeholder: lang('instrument_name'),
|
|
58
62
|
value: searchInputValue,
|
|
59
63
|
onChange: handleTextInputSearch
|
|
60
64
|
})));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Filters.js","names":["cn","Select","Size","TextInput","useLayoutProvider","React","useState","useDebounceCallback","Filters","_ref","assetClassOptions","onSearchChange","onAssetClassChange","isAssetClassFilterEnabled","isInstrumentSearchEnabled","size","isDesktop","DESKTOP","assetClass","setAssetClass","id","searchInputValue","setSearchInputValue","debounced","val","handleTextInputSearch","value","length","createElement","className","options","selectLabel","selectedOption","find","opt","setSelectedOption","option","label","placeholder","onChange"],"sources":["../../../../../src/InstrumentsTableWidget/components/Filters/Filters.tsx"],"sourcesContent":["import {\n cn,\n Select,\n Size,\n TextInput,\n useLayoutProvider,\n} from '@oanda/labs-widget-common';\nimport React, { useState } from 'react';\nimport { useDebounceCallback } from 'usehooks-ts';\n\nimport type { FiltersProps } from './types';\n\nexport const Filters = ({\n assetClassOptions,\n onSearchChange,\n onAssetClassChange,\n isAssetClassFilterEnabled,\n isInstrumentSearchEnabled,\n}: FiltersProps) => {\n const { size } = useLayoutProvider();\n const isDesktop = size === Size.DESKTOP;\n\n const [assetClass, setAssetClass] = useState([assetClassOptions[0].id]);\n const [searchInputValue, setSearchInputValue] = useState('');\n\n const debounced = useDebounceCallback((val: string) => {\n onSearchChange(val);\n }, 300);\n\n const handleTextInputSearch = (value: string) => {\n setSearchInputValue(value);\n if (value.length >= 3) {\n debounced(value);\n }\n if (value.length === 0) {\n onSearchChange(value);\n }\n };\n\n return (\n <div\n className={cn('lw-mb-4 lw-mt-2 lw-flex lw-w-full lw-gap-4', {\n 'lw-flex-col': !isDesktop,\n 'lw-flex-row': isDesktop,\n })}\n >\n {isAssetClassFilterEnabled && (\n <div\n className={cn({\n 'lw-w-full': !isDesktop,\n 'lw-w-[280px]': isDesktop,\n })}\n >\n <Select\n options={assetClassOptions}\n selectLabel
|
|
1
|
+
{"version":3,"file":"Filters.js","names":["cn","Select","Size","TextInput","useLayoutProvider","useLocale","React","useState","useDebounceCallback","Filters","_ref","assetClassOptions","onSearchChange","onAssetClassChange","isAssetClassFilterEnabled","isInstrumentSearchEnabled","lang","size","isDesktop","DESKTOP","assetClass","setAssetClass","id","searchInputValue","setSearchInputValue","debounced","val","handleTextInputSearch","value","length","createElement","className","options","selectLabel","selectedOption","find","opt","setSelectedOption","option","label","placeholder","onChange"],"sources":["../../../../../src/InstrumentsTableWidget/components/Filters/Filters.tsx"],"sourcesContent":["import {\n cn,\n Select,\n Size,\n TextInput,\n useLayoutProvider,\n} from '@oanda/labs-widget-common';\nimport { useLocale } from '@oanda/mono-i18n';\nimport React, { useState } from 'react';\nimport { useDebounceCallback } from 'usehooks-ts';\n\nimport type { FiltersProps } from './types';\n\nexport const Filters = ({\n assetClassOptions,\n onSearchChange,\n onAssetClassChange,\n isAssetClassFilterEnabled,\n isInstrumentSearchEnabled,\n}: FiltersProps) => {\n const { lang } = useLocale();\n const { size } = useLayoutProvider();\n const isDesktop = size === Size.DESKTOP;\n\n const [assetClass, setAssetClass] = useState([assetClassOptions[0].id]);\n const [searchInputValue, setSearchInputValue] = useState('');\n\n const debounced = useDebounceCallback((val: string) => {\n onSearchChange(val);\n }, 300);\n\n const handleTextInputSearch = (value: string) => {\n setSearchInputValue(value);\n if (value.length >= 3) {\n debounced(value);\n }\n if (value.length === 0) {\n onSearchChange(value);\n }\n };\n\n return (\n <div\n className={cn('lw-mb-4 lw-mt-2 lw-flex lw-w-full lw-gap-4', {\n 'lw-flex-col': !isDesktop,\n 'lw-flex-row': isDesktop,\n })}\n >\n {isAssetClassFilterEnabled && (\n <div\n className={cn({\n 'lw-w-full': !isDesktop,\n 'lw-w-[280px]': isDesktop,\n })}\n >\n <Select\n options={assetClassOptions}\n selectLabel={lang('asset_class')}\n selectedOption={\n assetClassOptions.find((opt) => opt.id === assetClass[0]) ||\n assetClassOptions[0]\n }\n setSelectedOption={(option) => {\n setAssetClass([option.id]);\n onAssetClassChange([option.id]);\n setSearchInputValue('');\n onSearchChange('');\n }}\n />\n </div>\n )}\n {isInstrumentSearchEnabled && (\n <div\n className={cn({\n 'lw-w-full': !isDesktop,\n 'lw-w-[280px]': isDesktop,\n })}\n >\n <TextInput\n label={lang('search')}\n placeholder={lang('instrument_name')}\n value={searchInputValue}\n onChange={handleTextInputSearch}\n />\n </div>\n )}\n </div>\n );\n};\n"],"mappings":"AAAA,SACEA,EAAE,EACFC,MAAM,EACNC,IAAI,EACJC,SAAS,EACTC,iBAAiB,QACZ,2BAA2B;AAClC,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,OAAOC,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SAASC,mBAAmB,QAAQ,aAAa;AAIjD,OAAO,MAAMC,OAAO,GAAGC,IAAA,IAMH;EAAA,IANI;IACtBC,iBAAiB;IACjBC,cAAc;IACdC,kBAAkB;IAClBC,yBAAyB;IACzBC;EACY,CAAC,GAAAL,IAAA;EACb,MAAM;IAAEM;EAAK,CAAC,GAAGX,SAAS,CAAC,CAAC;EAC5B,MAAM;IAAEY;EAAK,CAAC,GAAGb,iBAAiB,CAAC,CAAC;EACpC,MAAMc,SAAS,GAAGD,IAAI,KAAKf,IAAI,CAACiB,OAAO;EAEvC,MAAM,CAACC,UAAU,EAAEC,aAAa,CAAC,GAAGd,QAAQ,CAAC,CAACI,iBAAiB,CAAC,CAAC,CAAC,CAACW,EAAE,CAAC,CAAC;EACvE,MAAM,CAACC,gBAAgB,EAAEC,mBAAmB,CAAC,GAAGjB,QAAQ,CAAC,EAAE,CAAC;EAE5D,MAAMkB,SAAS,GAAGjB,mBAAmB,CAAEkB,GAAW,IAAK;IACrDd,cAAc,CAACc,GAAG,CAAC;EACrB,CAAC,EAAE,GAAG,CAAC;EAEP,MAAMC,qBAAqB,GAAIC,KAAa,IAAK;IAC/CJ,mBAAmB,CAACI,KAAK,CAAC;IAC1B,IAAIA,KAAK,CAACC,MAAM,IAAI,CAAC,EAAE;MACrBJ,SAAS,CAACG,KAAK,CAAC;IAClB;IACA,IAAIA,KAAK,CAACC,MAAM,KAAK,CAAC,EAAE;MACtBjB,cAAc,CAACgB,KAAK,CAAC;IACvB;EACF,CAAC;EAED,OACEtB,KAAA,CAAAwB,aAAA;IACEC,SAAS,EAAE/B,EAAE,CAAC,4CAA4C,EAAE;MAC1D,aAAa,EAAE,CAACkB,SAAS;MACzB,aAAa,EAAEA;IACjB,CAAC;EAAE,GAEFJ,yBAAyB,IACxBR,KAAA,CAAAwB,aAAA;IACEC,SAAS,EAAE/B,EAAE,CAAC;MACZ,WAAW,EAAE,CAACkB,SAAS;MACvB,cAAc,EAAEA;IAClB,CAAC;EAAE,GAEHZ,KAAA,CAAAwB,aAAA,CAAC7B,MAAM;IACL+B,OAAO,EAAErB,iBAAkB;IAC3BsB,WAAW,EAAEjB,IAAI,CAAC,aAAa,CAAE;IACjCkB,cAAc,EACZvB,iBAAiB,CAACwB,IAAI,CAAEC,GAAG,IAAKA,GAAG,CAACd,EAAE,KAAKF,UAAU,CAAC,CAAC,CAAC,CAAC,IACzDT,iBAAiB,CAAC,CAAC,CACpB;IACD0B,iBAAiB,EAAGC,MAAM,IAAK;MAC7BjB,aAAa,CAAC,CAACiB,MAAM,CAAChB,EAAE,CAAC,CAAC;MAC1BT,kBAAkB,CAAC,CAACyB,MAAM,CAAChB,EAAE,CAAC,CAAC;MAC/BE,mBAAmB,CAAC,EAAE,CAAC;MACvBZ,cAAc,CAAC,EAAE,CAAC;IACpB;EAAE,CACH,CACE,CACN,EACAG,yBAAyB,IACxBT,KAAA,CAAAwB,aAAA;IACEC,SAAS,EAAE/B,EAAE,CAAC;MACZ,WAAW,EAAE,CAACkB,SAAS;MACvB,cAAc,EAAEA;IAClB,CAAC;EAAE,GAEHZ,KAAA,CAAAwB,aAAA,CAAC3B,SAAS;IACRoC,KAAK,EAAEvB,IAAI,CAAC,QAAQ,CAAE;IACtBwB,WAAW,EAAExB,IAAI,CAAC,iBAAiB,CAAE;IACrCY,KAAK,EAAEL,gBAAiB;IACxBkB,QAAQ,EAAEd;EAAsB,CACjC,CACE,CAEJ,CAAC;AAEV,CAAC","ignoreList":[]}
|
|
@@ -21,17 +21,25 @@ const headerConfig = {
|
|
|
21
21
|
additionalStyles: 'lw-text-right lw-min-w-[80px]'
|
|
22
22
|
},
|
|
23
23
|
[DataRecordType.HIGH]: {
|
|
24
|
-
displayName: '
|
|
24
|
+
displayName: 'today_high',
|
|
25
25
|
additionalStyles: 'lw-text-right lw-min-w-[80px]'
|
|
26
26
|
},
|
|
27
27
|
[DataRecordType.LOW]: {
|
|
28
|
-
displayName: '
|
|
28
|
+
displayName: 'today_low',
|
|
29
29
|
additionalStyles: 'lw-text-right lw-min-w-[80px]'
|
|
30
30
|
}
|
|
31
31
|
};
|
|
32
|
+
const assetClassLabels = {
|
|
33
|
+
CURRENCY: 'currency',
|
|
34
|
+
COMMODITIES: 'commodity',
|
|
35
|
+
RATES: 'bond',
|
|
36
|
+
CRYPTOCURRENCY: 'crypto',
|
|
37
|
+
EQUITY_SHARES: 'share_sfds',
|
|
38
|
+
INDICES: 'index'
|
|
39
|
+
};
|
|
32
40
|
const getHeaderConfig = activeColumns => {
|
|
33
41
|
const columns = [DataRecordType.INSTRUMENT, ...activeColumns].filter(item => item !== DataRecordType.SENTIMENT);
|
|
34
42
|
return columns.map(item => headerConfig[item]);
|
|
35
43
|
};
|
|
36
|
-
export { getHeaderConfig, headerConfig };
|
|
44
|
+
export { assetClassLabels, getHeaderConfig, headerConfig };
|
|
37
45
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","names":["DataRecordType","headerConfig","INSTRUMENT","displayName","additionalStyles","SELL","BUY","SPREAD","DAILY_CHANGE","HIGH","LOW","getHeaderConfig","activeColumns","columns","filter","item","SENTIMENT","map"],"sources":["../../../src/InstrumentsTableWidget/config.ts"],"sourcesContent":["import type { HeaderColumns } from '@oanda/labs-widget-common';\nimport { DataRecordType } from '@oanda/labs-widget-common';\n\ntype HeaderRecordType =\n | DataRecordType.INSTRUMENT\n | DataRecordType.SELL\n | DataRecordType.BUY\n | DataRecordType.DAILY_CHANGE\n | DataRecordType.SPREAD\n | DataRecordType.HIGH\n | DataRecordType.LOW;\n\nconst headerConfig: Record<\n HeaderRecordType,\n { displayName: string; additionalStyles: string }\n> = {\n [DataRecordType.INSTRUMENT]: {\n displayName: 'instrument',\n additionalStyles: 'lw-text-left lw-min-w-[130px]',\n },\n [DataRecordType.SELL]: {\n displayName: 'sell',\n additionalStyles: 'lw-text-right lw-min-w-[75px] lw-pr-4',\n },\n [DataRecordType.BUY]: {\n displayName: 'buy',\n additionalStyles: 'lw-text-right lw-min-w-[75px] lw-pr-4',\n },\n [DataRecordType.SPREAD]: {\n displayName: 'spread',\n additionalStyles: 'lw-text-right lw-min-w-[50px]',\n },\n [DataRecordType.DAILY_CHANGE]: {\n displayName: 'daily_percent_change',\n additionalStyles: 'lw-text-right lw-min-w-[80px]',\n },\n [DataRecordType.HIGH]: {\n displayName: '
|
|
1
|
+
{"version":3,"file":"config.js","names":["DataRecordType","headerConfig","INSTRUMENT","displayName","additionalStyles","SELL","BUY","SPREAD","DAILY_CHANGE","HIGH","LOW","assetClassLabels","CURRENCY","COMMODITIES","RATES","CRYPTOCURRENCY","EQUITY_SHARES","INDICES","getHeaderConfig","activeColumns","columns","filter","item","SENTIMENT","map"],"sources":["../../../src/InstrumentsTableWidget/config.ts"],"sourcesContent":["import type { HeaderColumns } from '@oanda/labs-widget-common';\nimport { DataRecordType } from '@oanda/labs-widget-common';\n\ntype HeaderRecordType =\n | DataRecordType.INSTRUMENT\n | DataRecordType.SELL\n | DataRecordType.BUY\n | DataRecordType.DAILY_CHANGE\n | DataRecordType.SPREAD\n | DataRecordType.HIGH\n | DataRecordType.LOW;\n\nconst headerConfig: Record<\n HeaderRecordType,\n { displayName: string; additionalStyles: string }\n> = {\n [DataRecordType.INSTRUMENT]: {\n displayName: 'instrument',\n additionalStyles: 'lw-text-left lw-min-w-[130px]',\n },\n [DataRecordType.SELL]: {\n displayName: 'sell',\n additionalStyles: 'lw-text-right lw-min-w-[75px] lw-pr-4',\n },\n [DataRecordType.BUY]: {\n displayName: 'buy',\n additionalStyles: 'lw-text-right lw-min-w-[75px] lw-pr-4',\n },\n [DataRecordType.SPREAD]: {\n displayName: 'spread',\n additionalStyles: 'lw-text-right lw-min-w-[50px]',\n },\n [DataRecordType.DAILY_CHANGE]: {\n displayName: 'daily_percent_change',\n additionalStyles: 'lw-text-right lw-min-w-[80px]',\n },\n [DataRecordType.HIGH]: {\n displayName: 'today_high',\n additionalStyles: 'lw-text-right lw-min-w-[80px]',\n },\n [DataRecordType.LOW]: {\n displayName: 'today_low',\n additionalStyles: 'lw-text-right lw-min-w-[80px]',\n },\n};\n\nconst assetClassLabels: Record<string, string> = {\n CURRENCY: 'currency',\n COMMODITIES: 'commodity',\n RATES: 'bond',\n CRYPTOCURRENCY: 'crypto',\n EQUITY_SHARES: 'share_sfds',\n INDICES: 'index',\n};\n\nconst getHeaderConfig = (activeColumns: DataRecordType[]): HeaderColumns[] => {\n const columns: HeaderRecordType[] = [\n DataRecordType.INSTRUMENT,\n ...activeColumns,\n ].filter(\n (item): item is HeaderRecordType => item !== DataRecordType.SENTIMENT\n );\n\n return columns.map((item) => headerConfig[item]);\n};\n\nexport { assetClassLabels, getHeaderConfig, headerConfig };\n"],"mappings":"AACA,SAASA,cAAc,QAAQ,2BAA2B;AAW1D,MAAMC,YAGL,GAAG;EACF,CAACD,cAAc,CAACE,UAAU,GAAG;IAC3BC,WAAW,EAAE,YAAY;IACzBC,gBAAgB,EAAE;EACpB,CAAC;EACD,CAACJ,cAAc,CAACK,IAAI,GAAG;IACrBF,WAAW,EAAE,MAAM;IACnBC,gBAAgB,EAAE;EACpB,CAAC;EACD,CAACJ,cAAc,CAACM,GAAG,GAAG;IACpBH,WAAW,EAAE,KAAK;IAClBC,gBAAgB,EAAE;EACpB,CAAC;EACD,CAACJ,cAAc,CAACO,MAAM,GAAG;IACvBJ,WAAW,EAAE,QAAQ;IACrBC,gBAAgB,EAAE;EACpB,CAAC;EACD,CAACJ,cAAc,CAACQ,YAAY,GAAG;IAC7BL,WAAW,EAAE,sBAAsB;IACnCC,gBAAgB,EAAE;EACpB,CAAC;EACD,CAACJ,cAAc,CAACS,IAAI,GAAG;IACrBN,WAAW,EAAE,YAAY;IACzBC,gBAAgB,EAAE;EACpB,CAAC;EACD,CAACJ,cAAc,CAACU,GAAG,GAAG;IACpBP,WAAW,EAAE,WAAW;IACxBC,gBAAgB,EAAE;EACpB;AACF,CAAC;AAED,MAAMO,gBAAwC,GAAG;EAC/CC,QAAQ,EAAE,UAAU;EACpBC,WAAW,EAAE,WAAW;EACxBC,KAAK,EAAE,MAAM;EACbC,cAAc,EAAE,QAAQ;EACxBC,aAAa,EAAE,YAAY;EAC3BC,OAAO,EAAE;AACX,CAAC;AAED,MAAMC,eAAe,GAAIC,aAA+B,IAAsB;EAC5E,MAAMC,OAA2B,GAAG,CAClCpB,cAAc,CAACE,UAAU,EACzB,GAAGiB,aAAa,CACjB,CAACE,MAAM,CACLC,IAAI,IAA+BA,IAAI,KAAKtB,cAAc,CAACuB,SAC9D,CAAC;EAED,OAAOH,OAAO,CAACI,GAAG,CAAEF,IAAI,IAAKrB,YAAY,CAACqB,IAAI,CAAC,CAAC;AAClD,CAAC;AAED,SAASX,gBAAgB,EAAEO,eAAe,EAAEjB,YAAY","ignoreList":[]}
|
|
@@ -1,20 +1,8 @@
|
|
|
1
1
|
import { Locale } from '@oanda/mono-i18n';
|
|
2
2
|
import en from './sources/en.json';
|
|
3
|
-
import es from './sources/es.json';
|
|
4
|
-
import th from './sources/th.json';
|
|
5
|
-
import zhTW from './sources/zh_TW.json';
|
|
6
3
|
export const translations = {
|
|
7
4
|
[Locale.en]: {
|
|
8
5
|
translation: en
|
|
9
|
-
},
|
|
10
|
-
[Locale.zhTW]: {
|
|
11
|
-
translation: zhTW
|
|
12
|
-
},
|
|
13
|
-
[Locale.es]: {
|
|
14
|
-
translation: es
|
|
15
|
-
},
|
|
16
|
-
[Locale.th]: {
|
|
17
|
-
translation: th
|
|
18
6
|
}
|
|
19
7
|
};
|
|
20
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Locale","en","
|
|
1
|
+
{"version":3,"file":"index.js","names":["Locale","en","translations","translation"],"sources":["../../../src/translations/index.ts"],"sourcesContent":["import type { Translations } from '@oanda/mono-i18n';\nimport { Locale } from '@oanda/mono-i18n';\n\nimport en from './sources/en.json';\nimport type { defaultTranslations } from './translations';\n\nexport type TranslationKey = keyof typeof defaultTranslations;\n\nexport const translations: Translations = {\n [Locale.en]: { translation: en },\n};\n"],"mappings":"AACA,SAASA,MAAM,QAAQ,kBAAkB;AAEzC,OAAOC,EAAE,MAAM,mBAAmB;AAKlC,OAAO,MAAMC,YAA0B,GAAG;EACxC,CAACF,MAAM,CAACC,EAAE,GAAG;IAAEE,WAAW,EAAEF;EAAG;AACjC,CAAC","ignoreList":[]}
|
|
@@ -1,29 +1,22 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
"
|
|
4
|
-
"
|
|
2
|
+
"all": "All",
|
|
3
|
+
"asset_class": "Asset class",
|
|
4
|
+
"bond": "Bond",
|
|
5
5
|
"buy": "Buy",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
6
|
+
"commodity": "Commodity",
|
|
7
|
+
"crypto": "Crypto",
|
|
8
|
+
"currency": "Currency",
|
|
9
9
|
"daily_percent_change": "Daily % Change",
|
|
10
10
|
"data_unavailable": "Data unavailable",
|
|
11
|
-
"
|
|
12
|
-
"hot": "Hot",
|
|
11
|
+
"index": "Index",
|
|
13
12
|
"instrument": "Instrument",
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"net_long": "Net-long",
|
|
17
|
-
"net_short": "Net-short",
|
|
13
|
+
"instrument_name": "Instrument name",
|
|
14
|
+
"no_matching_results": "No matching results",
|
|
18
15
|
"pagination_entries_range": "{{firstItemOnPage}}-{{lastItemOnPage}} of {{itemCount}} entries",
|
|
19
|
-
"
|
|
16
|
+
"search": "Search",
|
|
20
17
|
"sell": "Sell",
|
|
21
|
-
"
|
|
22
|
-
"sentiment": "Sentiment",
|
|
18
|
+
"share_sfds": "Share CFDs",
|
|
23
19
|
"spread": "Spread",
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"low": "Low",
|
|
27
|
-
"high": "High",
|
|
28
|
-
"margin": "Margin"
|
|
20
|
+
"today_high": "Today High",
|
|
21
|
+
"today_low": "Today Low"
|
|
29
22
|
}
|
|
@@ -5,5 +5,6 @@ declare const headerConfig: Record<HeaderRecordType, {
|
|
|
5
5
|
displayName: string;
|
|
6
6
|
additionalStyles: string;
|
|
7
7
|
}>;
|
|
8
|
+
declare const assetClassLabels: Record<string, string>;
|
|
8
9
|
declare const getHeaderConfig: (activeColumns: DataRecordType[]) => HeaderColumns[];
|
|
9
|
-
export { getHeaderConfig, headerConfig };
|
|
10
|
+
export { assetClassLabels, getHeaderConfig, headerConfig };
|
package/lokalise.config.json
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"indentation": "2sp",
|
|
13
13
|
"plural_format": "i18next",
|
|
14
14
|
"export_empty_as": "skip",
|
|
15
|
-
"include_tags": ["common_widgets"],
|
|
16
|
-
"filter_langs": ["en"
|
|
15
|
+
"include_tags": ["common_widgets", "instruments_table_widget"],
|
|
16
|
+
"filter_langs": ["en"]
|
|
17
17
|
}
|
|
18
18
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oanda/labs-instruments-table-widget",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.17",
|
|
4
4
|
"description": "Labs Instruments Table Widget",
|
|
5
5
|
"main": "dist/main/index.js",
|
|
6
6
|
"module": "dist/module/index.js",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"author": "OANDA",
|
|
13
13
|
"license": "UNLICENSED",
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@oanda/labs-widget-common": "^1.0.
|
|
15
|
+
"@oanda/labs-widget-common": "^1.0.197",
|
|
16
16
|
"@oanda/mono-i18n": "10.0.1",
|
|
17
17
|
"graphql": "16.8.1"
|
|
18
18
|
},
|
|
@@ -20,5 +20,5 @@
|
|
|
20
20
|
"@graphql-codegen/cli": "5.0.0",
|
|
21
21
|
"@graphql-codegen/client-preset": "4.1.0"
|
|
22
22
|
},
|
|
23
|
-
"gitHead": "
|
|
23
|
+
"gitHead": "ecd6f0edf62d64f6537ce92408ae285fc012e18e"
|
|
24
24
|
}
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
TableWidget,
|
|
6
6
|
useLiveRatesQuery,
|
|
7
7
|
} from '@oanda/labs-widget-common';
|
|
8
|
+
import { useLocale } from '@oanda/mono-i18n';
|
|
8
9
|
import React, { useEffect, useRef, useState } from 'react';
|
|
9
10
|
import { useEventListener } from 'usehooks-ts';
|
|
10
11
|
|
|
@@ -15,7 +16,7 @@ import {
|
|
|
15
16
|
type ResolveInstrumentsWithFiltersQueryVariables,
|
|
16
17
|
} from '../gql/types/graphql';
|
|
17
18
|
import { Filters } from './components';
|
|
18
|
-
import { getHeaderConfig } from './config';
|
|
19
|
+
import { assetClassLabels, getHeaderConfig } from './config';
|
|
19
20
|
import { DEFAULT_COLUMNS, INSTRUMENT_TOOLTIP_ID } from './constant';
|
|
20
21
|
import type { MainProps } from './types';
|
|
21
22
|
|
|
@@ -30,6 +31,7 @@ const Main = ({
|
|
|
30
31
|
dataSource,
|
|
31
32
|
}: MainProps) => {
|
|
32
33
|
const documentRef = useRef<Document>(document);
|
|
34
|
+
const { lang } = useLocale();
|
|
33
35
|
const { target, setQuery, closeQuery } = useLiveRatesQuery();
|
|
34
36
|
|
|
35
37
|
const [records, setRecords] = useState<DataRecord[]>(
|
|
@@ -116,18 +118,22 @@ const Main = ({
|
|
|
116
118
|
<>
|
|
117
119
|
<TableWidget
|
|
118
120
|
PaginationComponent={
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
121
|
+
records.length > 0 ? (
|
|
122
|
+
<Pagination
|
|
123
|
+
currentPage={pageNumber}
|
|
124
|
+
disabled={loading}
|
|
125
|
+
recordsPerPage={recordsPerPage}
|
|
126
|
+
totalRecords={totalRecords}
|
|
127
|
+
onPageChange={(numb) => {
|
|
128
|
+
setQueryVariables((prev) => ({
|
|
129
|
+
...prev,
|
|
130
|
+
offset: numb * recordsPerPage,
|
|
131
|
+
}));
|
|
132
|
+
}}
|
|
133
|
+
/>
|
|
134
|
+
) : (
|
|
135
|
+
<></>
|
|
136
|
+
)
|
|
131
137
|
}
|
|
132
138
|
TabsComponent={
|
|
133
139
|
isInstrumentSearchEnabled || isAssetClassFilterEnabled ? (
|
|
@@ -135,12 +141,11 @@ const Main = ({
|
|
|
135
141
|
assetClassOptions={[
|
|
136
142
|
{
|
|
137
143
|
id: 'ALL',
|
|
138
|
-
label: '
|
|
144
|
+
label: lang('all'),
|
|
139
145
|
},
|
|
140
146
|
...(assetClasses || []).map((assetClass) => ({
|
|
141
147
|
id: assetClass,
|
|
142
|
-
label:
|
|
143
|
-
assetClass.charAt(0) + assetClass.slice(1).toLowerCase(),
|
|
148
|
+
label: lang(assetClassLabels[assetClass]),
|
|
144
149
|
})),
|
|
145
150
|
]}
|
|
146
151
|
isAssetClassFilterEnabled={isAssetClassFilterEnabled}
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
TextInput,
|
|
6
6
|
useLayoutProvider,
|
|
7
7
|
} from '@oanda/labs-widget-common';
|
|
8
|
+
import { useLocale } from '@oanda/mono-i18n';
|
|
8
9
|
import React, { useState } from 'react';
|
|
9
10
|
import { useDebounceCallback } from 'usehooks-ts';
|
|
10
11
|
|
|
@@ -17,6 +18,7 @@ export const Filters = ({
|
|
|
17
18
|
isAssetClassFilterEnabled,
|
|
18
19
|
isInstrumentSearchEnabled,
|
|
19
20
|
}: FiltersProps) => {
|
|
21
|
+
const { lang } = useLocale();
|
|
20
22
|
const { size } = useLayoutProvider();
|
|
21
23
|
const isDesktop = size === Size.DESKTOP;
|
|
22
24
|
|
|
@@ -53,7 +55,7 @@ export const Filters = ({
|
|
|
53
55
|
>
|
|
54
56
|
<Select
|
|
55
57
|
options={assetClassOptions}
|
|
56
|
-
selectLabel=
|
|
58
|
+
selectLabel={lang('asset_class')}
|
|
57
59
|
selectedOption={
|
|
58
60
|
assetClassOptions.find((opt) => opt.id === assetClass[0]) ||
|
|
59
61
|
assetClassOptions[0]
|
|
@@ -75,8 +77,8 @@ export const Filters = ({
|
|
|
75
77
|
})}
|
|
76
78
|
>
|
|
77
79
|
<TextInput
|
|
78
|
-
label=
|
|
79
|
-
placeholder=
|
|
80
|
+
label={lang('search')}
|
|
81
|
+
placeholder={lang('instrument_name')}
|
|
80
82
|
value={searchInputValue}
|
|
81
83
|
onChange={handleTextInputSearch}
|
|
82
84
|
/>
|
|
@@ -35,15 +35,24 @@ const headerConfig: Record<
|
|
|
35
35
|
additionalStyles: 'lw-text-right lw-min-w-[80px]',
|
|
36
36
|
},
|
|
37
37
|
[DataRecordType.HIGH]: {
|
|
38
|
-
displayName: '
|
|
38
|
+
displayName: 'today_high',
|
|
39
39
|
additionalStyles: 'lw-text-right lw-min-w-[80px]',
|
|
40
40
|
},
|
|
41
41
|
[DataRecordType.LOW]: {
|
|
42
|
-
displayName: '
|
|
42
|
+
displayName: 'today_low',
|
|
43
43
|
additionalStyles: 'lw-text-right lw-min-w-[80px]',
|
|
44
44
|
},
|
|
45
45
|
};
|
|
46
46
|
|
|
47
|
+
const assetClassLabels: Record<string, string> = {
|
|
48
|
+
CURRENCY: 'currency',
|
|
49
|
+
COMMODITIES: 'commodity',
|
|
50
|
+
RATES: 'bond',
|
|
51
|
+
CRYPTOCURRENCY: 'crypto',
|
|
52
|
+
EQUITY_SHARES: 'share_sfds',
|
|
53
|
+
INDICES: 'index',
|
|
54
|
+
};
|
|
55
|
+
|
|
47
56
|
const getHeaderConfig = (activeColumns: DataRecordType[]): HeaderColumns[] => {
|
|
48
57
|
const columns: HeaderRecordType[] = [
|
|
49
58
|
DataRecordType.INSTRUMENT,
|
|
@@ -55,4 +64,4 @@ const getHeaderConfig = (activeColumns: DataRecordType[]): HeaderColumns[] => {
|
|
|
55
64
|
return columns.map((item) => headerConfig[item]);
|
|
56
65
|
};
|
|
57
66
|
|
|
58
|
-
export { getHeaderConfig, headerConfig };
|
|
67
|
+
export { assetClassLabels, getHeaderConfig, headerConfig };
|
|
@@ -2,16 +2,10 @@ import type { Translations } from '@oanda/mono-i18n';
|
|
|
2
2
|
import { Locale } from '@oanda/mono-i18n';
|
|
3
3
|
|
|
4
4
|
import en from './sources/en.json';
|
|
5
|
-
import es from './sources/es.json';
|
|
6
|
-
import th from './sources/th.json';
|
|
7
|
-
import zhTW from './sources/zh_TW.json';
|
|
8
5
|
import type { defaultTranslations } from './translations';
|
|
9
6
|
|
|
10
7
|
export type TranslationKey = keyof typeof defaultTranslations;
|
|
11
8
|
|
|
12
9
|
export const translations: Translations = {
|
|
13
10
|
[Locale.en]: { translation: en },
|
|
14
|
-
[Locale.zhTW]: { translation: zhTW },
|
|
15
|
-
[Locale.es]: { translation: es },
|
|
16
|
-
[Locale.th]: { translation: th },
|
|
17
11
|
};
|
|
@@ -1,29 +1,22 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
"
|
|
4
|
-
"
|
|
2
|
+
"all": "All",
|
|
3
|
+
"asset_class": "Asset class",
|
|
4
|
+
"bond": "Bond",
|
|
5
5
|
"buy": "Buy",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
6
|
+
"commodity": "Commodity",
|
|
7
|
+
"crypto": "Crypto",
|
|
8
|
+
"currency": "Currency",
|
|
9
9
|
"daily_percent_change": "Daily % Change",
|
|
10
10
|
"data_unavailable": "Data unavailable",
|
|
11
|
-
"
|
|
12
|
-
"hot": "Hot",
|
|
11
|
+
"index": "Index",
|
|
13
12
|
"instrument": "Instrument",
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"net_long": "Net-long",
|
|
17
|
-
"net_short": "Net-short",
|
|
13
|
+
"instrument_name": "Instrument name",
|
|
14
|
+
"no_matching_results": "No matching results",
|
|
18
15
|
"pagination_entries_range": "{{firstItemOnPage}}-{{lastItemOnPage}} of {{itemCount}} entries",
|
|
19
|
-
"
|
|
16
|
+
"search": "Search",
|
|
20
17
|
"sell": "Sell",
|
|
21
|
-
"
|
|
22
|
-
"sentiment": "Sentiment",
|
|
18
|
+
"share_sfds": "Share CFDs",
|
|
23
19
|
"spread": "Spread",
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"low": "Low",
|
|
27
|
-
"high": "High",
|
|
28
|
-
"margin": "Margin"
|
|
20
|
+
"today_high": "Today High",
|
|
21
|
+
"today_low": "Today Low"
|
|
29
22
|
}
|
package/test/Main.test.tsx
CHANGED
|
@@ -56,8 +56,8 @@ describe('Main component', () => {
|
|
|
56
56
|
</LiveRatesProvider>
|
|
57
57
|
</MockedProvider>
|
|
58
58
|
);
|
|
59
|
-
expect(await findByText('
|
|
60
|
-
expect(await findByText('
|
|
59
|
+
expect(await findByText('asset_class:')).toBeInTheDocument();
|
|
60
|
+
expect(await findByText('search:')).toBeInTheDocument();
|
|
61
61
|
});
|
|
62
62
|
|
|
63
63
|
it('handles ALL asset class selection', async () => {
|
|
@@ -77,7 +77,7 @@ describe('Main component', () => {
|
|
|
77
77
|
</MockedProvider>
|
|
78
78
|
);
|
|
79
79
|
|
|
80
|
-
expect(await findByText('
|
|
80
|
+
expect(await findByText('all')).toBeInTheDocument();
|
|
81
81
|
});
|
|
82
82
|
|
|
83
83
|
it('shows loading state', async () => {
|