@oanda/labs-instruments-table-widget 1.0.40 → 1.0.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/CHANGELOG.md +340 -0
  2. package/dist/main/InstrumentsTableWidget/InstrumentsTableWidget.js +4 -2
  3. package/dist/main/InstrumentsTableWidget/InstrumentsTableWidget.js.map +1 -1
  4. package/dist/main/InstrumentsTableWidget/render.js +1 -1
  5. package/dist/main/InstrumentsTableWidget/render.js.map +1 -1
  6. package/dist/main/InstrumentsTableWidget/types.js.map +1 -1
  7. package/dist/main/InstrumentsTableWidget/utils.js +4 -4
  8. package/dist/main/InstrumentsTableWidget/utils.js.map +1 -1
  9. package/dist/main/gql/resolveInstrumentsWithFilters.js +1 -1
  10. package/dist/main/gql/resolveInstrumentsWithFilters.js.map +1 -1
  11. package/dist/main/gql/types/gql.js +1 -1
  12. package/dist/main/gql/types/gql.js.map +1 -1
  13. package/dist/main/gql/types/graphql.js +39 -11
  14. package/dist/main/gql/types/graphql.js.map +1 -1
  15. package/dist/main/translations/index.js +32 -0
  16. package/dist/main/translations/index.js.map +1 -1
  17. package/dist/main/translations/sources/de.json +27 -0
  18. package/dist/main/translations/sources/en.json +2 -2
  19. package/dist/main/translations/sources/es.json +28 -0
  20. package/dist/main/translations/sources/fr.json +27 -0
  21. package/dist/main/translations/sources/it.json +27 -0
  22. package/dist/main/translations/sources/pt.json +27 -0
  23. package/dist/main/translations/sources/th.json +27 -0
  24. package/dist/main/translations/sources/vi.json +26 -0
  25. package/dist/main/translations/sources/zh_CN.json +27 -0
  26. package/dist/module/InstrumentsTableWidget/InstrumentsTableWidget.js +4 -2
  27. package/dist/module/InstrumentsTableWidget/InstrumentsTableWidget.js.map +1 -1
  28. package/dist/module/InstrumentsTableWidget/render.js +2 -2
  29. package/dist/module/InstrumentsTableWidget/render.js.map +1 -1
  30. package/dist/module/InstrumentsTableWidget/types.js.map +1 -1
  31. package/dist/module/InstrumentsTableWidget/utils.js +5 -5
  32. package/dist/module/InstrumentsTableWidget/utils.js.map +1 -1
  33. package/dist/module/gql/resolveInstrumentsWithFilters.js +1 -1
  34. package/dist/module/gql/resolveInstrumentsWithFilters.js.map +1 -1
  35. package/dist/module/gql/types/gql.js +1 -1
  36. package/dist/module/gql/types/gql.js.map +1 -1
  37. package/dist/module/gql/types/graphql.js +38 -10
  38. package/dist/module/gql/types/graphql.js.map +1 -1
  39. package/dist/module/translations/index.js +32 -0
  40. package/dist/module/translations/index.js.map +1 -1
  41. package/dist/module/translations/sources/de.json +27 -0
  42. package/dist/module/translations/sources/en.json +2 -2
  43. package/dist/module/translations/sources/es.json +28 -0
  44. package/dist/module/translations/sources/fr.json +27 -0
  45. package/dist/module/translations/sources/it.json +27 -0
  46. package/dist/module/translations/sources/pt.json +27 -0
  47. package/dist/module/translations/sources/th.json +27 -0
  48. package/dist/module/translations/sources/vi.json +26 -0
  49. package/dist/module/translations/sources/zh_CN.json +27 -0
  50. package/dist/types/InstrumentsTableWidget/types.d.ts +3 -3
  51. package/dist/types/InstrumentsTableWidget/utils.d.ts +3 -2
  52. package/dist/types/gql/types/gql.d.ts +3 -3
  53. package/dist/types/gql/types/graphql.d.ts +70 -9
  54. package/lokalise.config.json +16 -3
  55. package/package.json +5 -4
  56. package/src/InstrumentsTableWidget/InstrumentsTableWidget.tsx +6 -2
  57. package/src/InstrumentsTableWidget/render.tsx +3 -3
  58. package/src/InstrumentsTableWidget/types.ts +3 -3
  59. package/src/InstrumentsTableWidget/utils.ts +8 -6
  60. package/src/gql/resolveInstrumentsWithFilters.ts +1 -1
  61. package/src/gql/types/gql.ts +3 -3
  62. package/src/gql/types/graphql.ts +83 -12
  63. package/src/translations/index.ts +16 -0
  64. package/src/translations/sources/de.json +27 -0
  65. package/src/translations/sources/en.json +2 -2
  66. package/src/translations/sources/es.json +28 -0
  67. package/src/translations/sources/fr.json +27 -0
  68. package/src/translations/sources/it.json +27 -0
  69. package/src/translations/sources/pt.json +27 -0
  70. package/src/translations/sources/th.json +27 -0
  71. package/src/translations/sources/vi.json +26 -0
  72. package/src/translations/sources/zh_CN.json +27 -0
  73. package/test/Main.test.tsx +8 -12
  74. package/test/utils.test.ts +5 -5
@@ -11,10 +11,10 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/
11
11
  * Therefore it is highly recommended to use the babel or swc plugin for production.
12
12
  */
13
13
  declare const documents: {
14
- '\n query resolveInstrumentsWithFilters(\n $division: Division!\n $assetClass: [AssetClassName]\n $dataSource: InstrumentDataSource\n $instruments: [String]\n $searchPattern: String\n $tradeModes: [TradeMode]\n $count: Int\n $offset: Int\n $withTradingModes: Boolean!\n ) {\n resolveInstrumentsWithFilters(\n division: $division\n assetClass: $assetClass\n dataSource: $dataSource\n instruments: $instruments\n searchPattern: $searchPattern\n count: $count\n offset: $offset\n tradeModes: $tradeModes\n ) {\n instruments {\n name\n displayName\n tradeMode @include(if: $withTradingModes)\n }\n totalCount\n updatedAt @include(if: $withTradingModes)\n }\n }\n': DocumentNode<types.ResolveInstrumentsWithFiltersQuery, types.Exact<{
14
+ '\n query resolveInstrumentsWithFilters(\n $division: Division!\n $assetClass: [AssetClassName]\n $dataSource: DataSource!\n $instruments: [String]\n $searchPattern: String\n $tradeModes: [TradeMode]\n $count: Int\n $offset: Int\n $withTradingModes: Boolean!\n ) {\n resolveInstrumentsWithFilters(\n division: $division\n assetClass: $assetClass\n dataSource: $dataSource\n instruments: $instruments\n searchPattern: $searchPattern\n count: $count\n offset: $offset\n tradeModes: $tradeModes\n ) {\n instruments {\n name\n displayName\n tradeMode @include(if: $withTradingModes)\n }\n totalCount\n updatedAt @include(if: $withTradingModes)\n }\n }\n': DocumentNode<types.ResolveInstrumentsWithFiltersQuery, types.Exact<{
15
15
  division: types.Division;
16
16
  assetClass?: types.InputMaybe<Array<types.InputMaybe<types.AssetClassName>> | types.InputMaybe<types.AssetClassName>>;
17
- dataSource?: types.InputMaybe<types.InstrumentDataSource>;
17
+ dataSource: types.DataSource;
18
18
  instruments?: types.InputMaybe<Array<types.InputMaybe<types.Scalars["String"]["input"]>> | types.InputMaybe<types.Scalars["String"]["input"]>>;
19
19
  searchPattern?: types.InputMaybe<types.Scalars["String"]["input"]>;
20
20
  tradeModes?: types.InputMaybe<Array<types.InputMaybe<types.TradeMode>> | types.InputMaybe<types.TradeMode>>;
@@ -39,6 +39,6 @@ export declare function graphql(source: string): unknown;
39
39
  /**
40
40
  * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
41
41
  */
42
- export declare function graphql(source: '\n query resolveInstrumentsWithFilters(\n $division: Division!\n $assetClass: [AssetClassName]\n $dataSource: InstrumentDataSource\n $instruments: [String]\n $searchPattern: String\n $tradeModes: [TradeMode]\n $count: Int\n $offset: Int\n $withTradingModes: Boolean!\n ) {\n resolveInstrumentsWithFilters(\n division: $division\n assetClass: $assetClass\n dataSource: $dataSource\n instruments: $instruments\n searchPattern: $searchPattern\n count: $count\n offset: $offset\n tradeModes: $tradeModes\n ) {\n instruments {\n name\n displayName\n tradeMode @include(if: $withTradingModes)\n }\n totalCount\n updatedAt @include(if: $withTradingModes)\n }\n }\n'): (typeof documents)['\n query resolveInstrumentsWithFilters(\n $division: Division!\n $assetClass: [AssetClassName]\n $dataSource: InstrumentDataSource\n $instruments: [String]\n $searchPattern: String\n $tradeModes: [TradeMode]\n $count: Int\n $offset: Int\n $withTradingModes: Boolean!\n ) {\n resolveInstrumentsWithFilters(\n division: $division\n assetClass: $assetClass\n dataSource: $dataSource\n instruments: $instruments\n searchPattern: $searchPattern\n count: $count\n offset: $offset\n tradeModes: $tradeModes\n ) {\n instruments {\n name\n displayName\n tradeMode @include(if: $withTradingModes)\n }\n totalCount\n updatedAt @include(if: $withTradingModes)\n }\n }\n'];
42
+ export declare function graphql(source: '\n query resolveInstrumentsWithFilters(\n $division: Division!\n $assetClass: [AssetClassName]\n $dataSource: DataSource!\n $instruments: [String]\n $searchPattern: String\n $tradeModes: [TradeMode]\n $count: Int\n $offset: Int\n $withTradingModes: Boolean!\n ) {\n resolveInstrumentsWithFilters(\n division: $division\n assetClass: $assetClass\n dataSource: $dataSource\n instruments: $instruments\n searchPattern: $searchPattern\n count: $count\n offset: $offset\n tradeModes: $tradeModes\n ) {\n instruments {\n name\n displayName\n tradeMode @include(if: $withTradingModes)\n }\n totalCount\n updatedAt @include(if: $withTradingModes)\n }\n }\n'): (typeof documents)['\n query resolveInstrumentsWithFilters(\n $division: Division!\n $assetClass: [AssetClassName]\n $dataSource: DataSource!\n $instruments: [String]\n $searchPattern: String\n $tradeModes: [TradeMode]\n $count: Int\n $offset: Int\n $withTradingModes: Boolean!\n ) {\n resolveInstrumentsWithFilters(\n division: $division\n assetClass: $assetClass\n dataSource: $dataSource\n instruments: $instruments\n searchPattern: $searchPattern\n count: $count\n offset: $offset\n tradeModes: $tradeModes\n ) {\n instruments {\n name\n displayName\n tradeMode @include(if: $withTradingModes)\n }\n totalCount\n updatedAt @include(if: $withTradingModes)\n }\n }\n'];
43
43
  export type DocumentType<TDocumentNode extends DocumentNode<any, any>> = TDocumentNode extends DocumentNode<infer TType, any> ? TType : never;
44
44
  export {};
@@ -61,6 +61,23 @@ export declare enum BookType {
61
61
  Order = "ORDER",
62
62
  Position = "POSITION"
63
63
  }
64
+ export type Candle = {
65
+ __typename?: 'Candle';
66
+ close: Scalars['Float']['output'];
67
+ high: Scalars['Float']['output'];
68
+ low: Scalars['Float']['output'];
69
+ open: Scalars['Float']['output'];
70
+ /** UTC Timestamp */
71
+ point: Scalars['String']['output'];
72
+ };
73
+ export type CandlesData = {
74
+ __typename?: 'CandlesData';
75
+ candle: Array<Maybe<Candle>>;
76
+ granularity: Granularity;
77
+ instrument: Instrument;
78
+ pipsLocation: Scalars['Int']['output'];
79
+ timeSpan: TimeSpan;
80
+ };
64
81
  export type CorrelationHeatmap = {
65
82
  __typename?: 'CorrelationHeatmap';
66
83
  baseInstrument: Instrument;
@@ -120,8 +137,9 @@ export type CurrencyStrength = {
120
137
  updatedAt: Scalars['String']['output'];
121
138
  };
122
139
  export declare enum DataSource {
123
- Ny4 = "NY4",
124
- Ty3 = "TY3"
140
+ All = "ALL",
141
+ Mt5 = "MT5",
142
+ V20 = "V20"
125
143
  }
126
144
  export declare enum Division {
127
145
  Oap = "OAP",
@@ -136,10 +154,18 @@ export declare enum Division {
136
154
  }
137
155
  export type ExtendedInstrument = {
138
156
  __typename?: 'ExtendedInstrument';
157
+ dataSource: DataSource;
139
158
  displayName: Scalars['String']['output'];
140
159
  name: Scalars['String']['output'];
141
160
  tradeMode: TradeMode;
142
161
  };
162
+ export declare enum Granularity {
163
+ D1 = "D1",
164
+ H1 = "H1",
165
+ H4 = "H4",
166
+ M1 = "M1",
167
+ M15 = "M15"
168
+ }
143
169
  export type Heatmap = {
144
170
  __typename?: 'Heatmap';
145
171
  instrument: Instrument;
@@ -155,21 +181,27 @@ export type InstrumentCorrelation = {
155
181
  instrument: Instrument;
156
182
  value?: Maybe<Scalars['Float']['output']>;
157
183
  };
158
- export declare enum InstrumentDataSource {
159
- Mt5 = "MT5",
160
- V20 = "V20"
161
- }
162
184
  export type InstrumentTableResult = {
163
185
  __typename?: 'InstrumentTableResult';
164
186
  instruments: Array<ExtendedInstrument>;
165
187
  totalCount: Scalars['Int']['output'];
166
188
  updatedAt: Scalars['String']['output'];
167
189
  };
190
+ export type MarginRate = {
191
+ __typename?: 'MarginRate';
192
+ instrument: Instrument;
193
+ rate: Scalars['Float']['output'];
194
+ };
168
195
  export type Matrix = {
169
196
  __typename?: 'Matrix';
170
197
  instrument: Instrument;
171
198
  instrumentCorrelation: Array<InstrumentCorrelation>;
172
199
  };
200
+ export declare enum OrderBookDataSource {
201
+ Ny4 = "NY4",
202
+ Ny4Mt5 = "NY4_MT5",
203
+ Ty3 = "TY3"
204
+ }
173
205
  export type OrderPositionBucket = {
174
206
  __typename?: 'OrderPositionBucket';
175
207
  longCountPercent: Scalars['Float']['output'];
@@ -196,7 +228,9 @@ export type Query = {
196
228
  currencyStrength?: Maybe<Array<CurrencyStrength>>;
197
229
  isAllowedPartner?: Maybe<Scalars['Boolean']['output']>;
198
230
  mapInstrumentNames?: Maybe<Array<Maybe<Instrument>>>;
231
+ marginRates?: Maybe<Array<MarginRate>>;
199
232
  orderPositionBooks: Array<Maybe<OrderPositionData>>;
233
+ priceCandles: CandlesData;
200
234
  resolveInstrumentsByDivision?: Maybe<Array<Instrument>>;
201
235
  resolveInstrumentsWithFilters?: Maybe<InstrumentTableResult>;
202
236
  sentiment?: Maybe<Array<SentimentInstrument>>;
@@ -231,13 +265,26 @@ export type QueryMapInstrumentNamesArgs = {
231
265
  division?: InputMaybe<Division>;
232
266
  instruments: Array<InputMaybe<Scalars['String']['input']>>;
233
267
  };
268
+ export type QueryMarginRatesArgs = {
269
+ dataSource: DataSource;
270
+ division: Division;
271
+ instruments?: InputMaybe<Array<Scalars['String']['input']>>;
272
+ tradingGroup: Scalars['Int']['input'];
273
+ };
234
274
  export type QueryOrderPositionBooksArgs = {
235
275
  bookType: BookType;
236
- dataSource?: InputMaybe<DataSource>;
276
+ dataSource?: InputMaybe<OrderBookDataSource>;
237
277
  instrument: Scalars['String']['input'];
238
278
  recentHours?: InputMaybe<Scalars['Int']['input']>;
239
279
  region?: InputMaybe<Region>;
240
280
  };
281
+ export type QueryPriceCandlesArgs = {
282
+ dataSource: DataSource;
283
+ division: Division;
284
+ granularity: Granularity;
285
+ instrument: Scalars['String']['input'];
286
+ timeSpan: TimeSpan;
287
+ };
241
288
  export type QueryResolveInstrumentsByDivisionArgs = {
242
289
  division: Division;
243
290
  instruments: Array<InputMaybe<Scalars['String']['input']>>;
@@ -245,7 +292,7 @@ export type QueryResolveInstrumentsByDivisionArgs = {
245
292
  export type QueryResolveInstrumentsWithFiltersArgs = {
246
293
  assetClass?: InputMaybe<Array<InputMaybe<AssetClassName>>>;
247
294
  count?: InputMaybe<Scalars['Int']['input']>;
248
- dataSource?: InputMaybe<InstrumentDataSource>;
295
+ dataSource: DataSource;
249
296
  division: Division;
250
297
  instruments?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
251
298
  offset?: InputMaybe<Scalars['Int']['input']>;
@@ -325,6 +372,20 @@ export type TimeCorrelation = {
325
372
  timeUnit: CorrelationTimeUnit;
326
373
  value?: Maybe<Scalars['Float']['output']>;
327
374
  };
375
+ export declare enum TimeSpan {
376
+ Day_1 = "DAY_1",
377
+ Day_2 = "DAY_2",
378
+ Hour_1 = "HOUR_1",
379
+ Hour_12 = "HOUR_12",
380
+ Month_1 = "MONTH_1",
381
+ Month_3 = "MONTH_3",
382
+ Month_6 = "MONTH_6",
383
+ Week_1 = "WEEK_1",
384
+ Week_2 = "WEEK_2",
385
+ Week_3 = "WEEK_3",
386
+ Year_1 = "YEAR_1",
387
+ Year_5 = "YEAR_5"
388
+ }
328
389
  export type TopicalInstrument = {
329
390
  __typename?: 'TopicalInstrument';
330
391
  assetClass?: Maybe<AssetClassName>;
@@ -413,7 +474,7 @@ export declare enum VolatilityChartTimeUnit {
413
474
  export type ResolveInstrumentsWithFiltersQueryVariables = Exact<{
414
475
  division: Division;
415
476
  assetClass?: InputMaybe<Array<InputMaybe<AssetClassName>> | InputMaybe<AssetClassName>>;
416
- dataSource?: InputMaybe<InstrumentDataSource>;
477
+ dataSource: DataSource;
417
478
  instruments?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>> | InputMaybe<Scalars['String']['input']>>;
418
479
  searchPattern?: InputMaybe<Scalars['String']['input']>;
419
480
  tradeModes?: InputMaybe<Array<InputMaybe<TradeMode>> | InputMaybe<TradeMode>>;
@@ -12,7 +12,20 @@
12
12
  "indentation": "2sp",
13
13
  "plural_format": "i18next",
14
14
  "export_empty_as": "skip",
15
- "include_tags": ["common_widgets", "instruments_table_widget"],
16
- "filter_langs": ["en"]
15
+ "include_tags": [
16
+ "common_widgets",
17
+ "instruments_table_widget"
18
+ ],
19
+ "filter_langs": [
20
+ "en",
21
+ "fr",
22
+ "de",
23
+ "es",
24
+ "pt",
25
+ "it",
26
+ "zh_CN",
27
+ "th",
28
+ "vi"
29
+ ]
17
30
  }
18
- }
31
+ }
package/package.json CHANGED
@@ -1,18 +1,19 @@
1
1
  {
2
2
  "name": "@oanda/labs-instruments-table-widget",
3
- "version": "1.0.40",
3
+ "version": "1.0.42",
4
4
  "description": "Labs Instruments Table Widget",
5
5
  "main": "dist/main/index.js",
6
6
  "module": "dist/module/index.js",
7
7
  "types": "dist/types/index.d.ts",
8
8
  "scripts": {
9
- "codegen": "graphql-codegen --config codegen.ts"
9
+ "codegen": "graphql-codegen --config codegen.ts",
10
+ "translations:pull": "lokalise pull"
10
11
  },
11
12
  "keywords": [],
12
13
  "author": "OANDA",
13
14
  "license": "UNLICENSED",
14
15
  "dependencies": {
15
- "@oanda/labs-widget-common": "^1.0.220",
16
+ "@oanda/labs-widget-common": "^1.0.222",
16
17
  "@oanda/mono-i18n": "10.0.1",
17
18
  "graphql": "16.8.1"
18
19
  },
@@ -20,5 +21,5 @@
20
21
  "@graphql-codegen/cli": "5.0.0",
21
22
  "@graphql-codegen/client-preset": "4.1.0"
22
23
  },
23
- "gitHead": "84d9bec88af7893f20ccd2d88fcbc28dd30aec22"
24
+ "gitHead": "f3f3b89244e07294747fcce5c3828da9a36ba6c0"
24
25
  }
@@ -6,6 +6,7 @@ import {
6
6
  } from '@oanda/labs-widget-common';
7
7
  import React from 'react';
8
8
 
9
+ import { DataSource } from '../gql/types/graphql';
9
10
  import { translations } from '../translations';
10
11
  import { Main } from './Main';
11
12
  import { type InstrumentsTableConfig, PriceType } from './types';
@@ -33,10 +34,13 @@ const InstrumentsTableWidget = ({
33
34
  cache: new InMemoryCache(),
34
35
  });
35
36
 
37
+ const liveRatesDataSource =
38
+ dataSource === DataSource.All ? undefined : dataSource;
39
+
36
40
  const divisionCode = getLiveRatesDivisionCode(
37
41
  division,
38
42
  priceType,
39
- dataSource
43
+ liveRatesDataSource || DataSource.V20
40
44
  );
41
45
 
42
46
  const liveRates =
@@ -52,7 +56,7 @@ const InstrumentsTableWidget = ({
52
56
  )
53
57
  ? {
54
58
  url: liveRatesUrl,
55
- options: { divisionCode, dataSource },
59
+ options: { divisionCode, dataSource: liveRatesDataSource },
56
60
  }
57
61
  : undefined;
58
62
 
@@ -3,7 +3,7 @@ import { validateLocale, validateToolParams } from '@oanda/labs-widget-common';
3
3
  import React from 'react';
4
4
  import { createRoot } from 'react-dom/client';
5
5
 
6
- import { Division, InstrumentDataSource } from '../gql/types/graphql';
6
+ import { DataSource, Division } from '../gql/types/graphql';
7
7
  import { InstrumentsTableWidget } from './InstrumentsTableWidget';
8
8
 
9
9
  const { graphqlUrl, liveRatesUrl } = window.widgetsConfig || {};
@@ -60,8 +60,8 @@ dataInstrumentsTableParamsElements.forEach((element) => {
60
60
  },
61
61
  {
62
62
  name: 'dataSource',
63
- valueCheck: (value: InstrumentDataSource) =>
64
- Object.values(InstrumentDataSource).includes(value),
63
+ valueCheck: (value: DataSource) =>
64
+ Object.values(DataSource).includes(value),
65
65
  },
66
66
  ]
67
67
  );
@@ -2,8 +2,8 @@ import type { DataRecordType, WidgetConfig } from '@oanda/labs-widget-common';
2
2
 
3
3
  import type {
4
4
  AssetClassName,
5
+ DataSource,
5
6
  Division,
6
- InstrumentDataSource,
7
7
  } from '../gql/types/graphql';
8
8
 
9
9
  export enum PriceType {
@@ -20,7 +20,7 @@ export interface InstrumentsTableConfig extends WidgetConfig {
20
20
  isAssetClassFilterEnabled?: boolean;
21
21
  isInstrumentSearchEnabled?: boolean;
22
22
  recordsPerPage?: number;
23
- dataSource: InstrumentDataSource;
23
+ dataSource: DataSource;
24
24
  priceType?: PriceType;
25
25
  }
26
26
 
@@ -32,6 +32,6 @@ export interface MainProps {
32
32
  isAssetClassFilterEnabled?: boolean;
33
33
  isInstrumentSearchEnabled?: boolean;
34
34
  recordsPerPage?: number;
35
- dataSource: InstrumentDataSource;
35
+ dataSource: DataSource;
36
36
  isLiveRatesDisabled?: boolean;
37
37
  }
@@ -1,19 +1,21 @@
1
- import { Division, InstrumentDataSource } from '../gql/types/graphql';
1
+ import type { LiveRatesDataSource } from '@oanda/labs-widget-common';
2
+
3
+ import { DataSource, Division } from '../gql/types/graphql';
2
4
  import { PriceType } from './types';
3
5
 
4
6
  const getLiveRatesDivisionCode = (
5
7
  division: Division,
6
8
  priceType: PriceType,
7
- dataSource: InstrumentDataSource
9
+ dataSource: LiveRatesDataSource
8
10
  ): Division | string | undefined => {
9
11
  const divisionMap = {
10
12
  [PriceType.Raw]: {
11
- [InstrumentDataSource.Mt5]: Division.Oc,
12
- [InstrumentDataSource.V20]: 'MKTD',
13
+ [DataSource.Mt5]: Division.Oc,
14
+ [DataSource.V20]: 'MKTD',
13
15
  },
14
16
  [PriceType.Division]: {
15
- [InstrumentDataSource.Mt5]: division,
16
- [InstrumentDataSource.V20]: division,
17
+ [DataSource.Mt5]: division,
18
+ [DataSource.V20]: division,
17
19
  },
18
20
  };
19
21
  return divisionMap[priceType]?.[dataSource];
@@ -4,7 +4,7 @@ export const resolveInstrumentsWithFilters = gql`
4
4
  query resolveInstrumentsWithFilters(
5
5
  $division: Division!
6
6
  $assetClass: [AssetClassName]
7
- $dataSource: InstrumentDataSource
7
+ $dataSource: DataSource!
8
8
  $instruments: [String]
9
9
  $searchPattern: String
10
10
  $tradeModes: [TradeMode]
@@ -13,7 +13,7 @@ import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/
13
13
  * Therefore it is highly recommended to use the babel or swc plugin for production.
14
14
  */
15
15
  const documents = {
16
- '\n query resolveInstrumentsWithFilters(\n $division: Division!\n $assetClass: [AssetClassName]\n $dataSource: InstrumentDataSource\n $instruments: [String]\n $searchPattern: String\n $tradeModes: [TradeMode]\n $count: Int\n $offset: Int\n $withTradingModes: Boolean!\n ) {\n resolveInstrumentsWithFilters(\n division: $division\n assetClass: $assetClass\n dataSource: $dataSource\n instruments: $instruments\n searchPattern: $searchPattern\n count: $count\n offset: $offset\n tradeModes: $tradeModes\n ) {\n instruments {\n name\n displayName\n tradeMode @include(if: $withTradingModes)\n }\n totalCount\n updatedAt @include(if: $withTradingModes)\n }\n }\n':
16
+ '\n query resolveInstrumentsWithFilters(\n $division: Division!\n $assetClass: [AssetClassName]\n $dataSource: DataSource!\n $instruments: [String]\n $searchPattern: String\n $tradeModes: [TradeMode]\n $count: Int\n $offset: Int\n $withTradingModes: Boolean!\n ) {\n resolveInstrumentsWithFilters(\n division: $division\n assetClass: $assetClass\n dataSource: $dataSource\n instruments: $instruments\n searchPattern: $searchPattern\n count: $count\n offset: $offset\n tradeModes: $tradeModes\n ) {\n instruments {\n name\n displayName\n tradeMode @include(if: $withTradingModes)\n }\n totalCount\n updatedAt @include(if: $withTradingModes)\n }\n }\n':
17
17
  types.ResolveInstrumentsWithFiltersDocument,
18
18
  };
19
19
 
@@ -35,8 +35,8 @@ export function graphql(source: string): unknown;
35
35
  * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
36
36
  */
37
37
  export function graphql(
38
- source: '\n query resolveInstrumentsWithFilters(\n $division: Division!\n $assetClass: [AssetClassName]\n $dataSource: InstrumentDataSource\n $instruments: [String]\n $searchPattern: String\n $tradeModes: [TradeMode]\n $count: Int\n $offset: Int\n $withTradingModes: Boolean!\n ) {\n resolveInstrumentsWithFilters(\n division: $division\n assetClass: $assetClass\n dataSource: $dataSource\n instruments: $instruments\n searchPattern: $searchPattern\n count: $count\n offset: $offset\n tradeModes: $tradeModes\n ) {\n instruments {\n name\n displayName\n tradeMode @include(if: $withTradingModes)\n }\n totalCount\n updatedAt @include(if: $withTradingModes)\n }\n }\n'
39
- ): (typeof documents)['\n query resolveInstrumentsWithFilters(\n $division: Division!\n $assetClass: [AssetClassName]\n $dataSource: InstrumentDataSource\n $instruments: [String]\n $searchPattern: String\n $tradeModes: [TradeMode]\n $count: Int\n $offset: Int\n $withTradingModes: Boolean!\n ) {\n resolveInstrumentsWithFilters(\n division: $division\n assetClass: $assetClass\n dataSource: $dataSource\n instruments: $instruments\n searchPattern: $searchPattern\n count: $count\n offset: $offset\n tradeModes: $tradeModes\n ) {\n instruments {\n name\n displayName\n tradeMode @include(if: $withTradingModes)\n }\n totalCount\n updatedAt @include(if: $withTradingModes)\n }\n }\n'];
38
+ source: '\n query resolveInstrumentsWithFilters(\n $division: Division!\n $assetClass: [AssetClassName]\n $dataSource: DataSource!\n $instruments: [String]\n $searchPattern: String\n $tradeModes: [TradeMode]\n $count: Int\n $offset: Int\n $withTradingModes: Boolean!\n ) {\n resolveInstrumentsWithFilters(\n division: $division\n assetClass: $assetClass\n dataSource: $dataSource\n instruments: $instruments\n searchPattern: $searchPattern\n count: $count\n offset: $offset\n tradeModes: $tradeModes\n ) {\n instruments {\n name\n displayName\n tradeMode @include(if: $withTradingModes)\n }\n totalCount\n updatedAt @include(if: $withTradingModes)\n }\n }\n'
39
+ ): (typeof documents)['\n query resolveInstrumentsWithFilters(\n $division: Division!\n $assetClass: [AssetClassName]\n $dataSource: DataSource!\n $instruments: [String]\n $searchPattern: String\n $tradeModes: [TradeMode]\n $count: Int\n $offset: Int\n $withTradingModes: Boolean!\n ) {\n resolveInstrumentsWithFilters(\n division: $division\n assetClass: $assetClass\n dataSource: $dataSource\n instruments: $instruments\n searchPattern: $searchPattern\n count: $count\n offset: $offset\n tradeModes: $tradeModes\n ) {\n instruments {\n name\n displayName\n tradeMode @include(if: $withTradingModes)\n }\n totalCount\n updatedAt @include(if: $withTradingModes)\n }\n }\n'];
40
40
 
41
41
  export function graphql(source: string) {
42
42
  return (documents as any)[source] ?? {};
@@ -50,6 +50,25 @@ export enum BookType {
50
50
  Position = 'POSITION',
51
51
  }
52
52
 
53
+ export type Candle = {
54
+ __typename?: 'Candle';
55
+ close: Scalars['Float']['output'];
56
+ high: Scalars['Float']['output'];
57
+ low: Scalars['Float']['output'];
58
+ open: Scalars['Float']['output'];
59
+ /** UTC Timestamp */
60
+ point: Scalars['String']['output'];
61
+ };
62
+
63
+ export type CandlesData = {
64
+ __typename?: 'CandlesData';
65
+ candle: Array<Maybe<Candle>>;
66
+ granularity: Granularity;
67
+ instrument: Instrument;
68
+ pipsLocation: Scalars['Int']['output'];
69
+ timeSpan: TimeSpan;
70
+ };
71
+
53
72
  export type CorrelationHeatmap = {
54
73
  __typename?: 'CorrelationHeatmap';
55
74
  baseInstrument: Instrument;
@@ -117,8 +136,9 @@ export type CurrencyStrength = {
117
136
  };
118
137
 
119
138
  export enum DataSource {
120
- Ny4 = 'NY4',
121
- Ty3 = 'TY3',
139
+ All = 'ALL',
140
+ Mt5 = 'MT5',
141
+ V20 = 'V20',
122
142
  }
123
143
 
124
144
  export enum Division {
@@ -135,11 +155,20 @@ export enum Division {
135
155
 
136
156
  export type ExtendedInstrument = {
137
157
  __typename?: 'ExtendedInstrument';
158
+ dataSource: DataSource;
138
159
  displayName: Scalars['String']['output'];
139
160
  name: Scalars['String']['output'];
140
161
  tradeMode: TradeMode;
141
162
  };
142
163
 
164
+ export enum Granularity {
165
+ D1 = 'D1',
166
+ H1 = 'H1',
167
+ H4 = 'H4',
168
+ M1 = 'M1',
169
+ M15 = 'M15',
170
+ }
171
+
143
172
  export type Heatmap = {
144
173
  __typename?: 'Heatmap';
145
174
  instrument: Instrument;
@@ -158,11 +187,6 @@ export type InstrumentCorrelation = {
158
187
  value?: Maybe<Scalars['Float']['output']>;
159
188
  };
160
189
 
161
- export enum InstrumentDataSource {
162
- Mt5 = 'MT5',
163
- V20 = 'V20',
164
- }
165
-
166
190
  export type InstrumentTableResult = {
167
191
  __typename?: 'InstrumentTableResult';
168
192
  instruments: Array<ExtendedInstrument>;
@@ -170,12 +194,24 @@ export type InstrumentTableResult = {
170
194
  updatedAt: Scalars['String']['output'];
171
195
  };
172
196
 
197
+ export type MarginRate = {
198
+ __typename?: 'MarginRate';
199
+ instrument: Instrument;
200
+ rate: Scalars['Float']['output'];
201
+ };
202
+
173
203
  export type Matrix = {
174
204
  __typename?: 'Matrix';
175
205
  instrument: Instrument;
176
206
  instrumentCorrelation: Array<InstrumentCorrelation>;
177
207
  };
178
208
 
209
+ export enum OrderBookDataSource {
210
+ Ny4 = 'NY4',
211
+ Ny4Mt5 = 'NY4_MT5',
212
+ Ty3 = 'TY3',
213
+ }
214
+
179
215
  export type OrderPositionBucket = {
180
216
  __typename?: 'OrderPositionBucket';
181
217
  longCountPercent: Scalars['Float']['output'];
@@ -204,7 +240,9 @@ export type Query = {
204
240
  currencyStrength?: Maybe<Array<CurrencyStrength>>;
205
241
  isAllowedPartner?: Maybe<Scalars['Boolean']['output']>;
206
242
  mapInstrumentNames?: Maybe<Array<Maybe<Instrument>>>;
243
+ marginRates?: Maybe<Array<MarginRate>>;
207
244
  orderPositionBooks: Array<Maybe<OrderPositionData>>;
245
+ priceCandles: CandlesData;
208
246
  resolveInstrumentsByDivision?: Maybe<Array<Instrument>>;
209
247
  resolveInstrumentsWithFilters?: Maybe<InstrumentTableResult>;
210
248
  sentiment?: Maybe<Array<SentimentInstrument>>;
@@ -246,14 +284,29 @@ export type QueryMapInstrumentNamesArgs = {
246
284
  instruments: Array<InputMaybe<Scalars['String']['input']>>;
247
285
  };
248
286
 
287
+ export type QueryMarginRatesArgs = {
288
+ dataSource: DataSource;
289
+ division: Division;
290
+ instruments?: InputMaybe<Array<Scalars['String']['input']>>;
291
+ tradingGroup: Scalars['Int']['input'];
292
+ };
293
+
249
294
  export type QueryOrderPositionBooksArgs = {
250
295
  bookType: BookType;
251
- dataSource?: InputMaybe<DataSource>;
296
+ dataSource?: InputMaybe<OrderBookDataSource>;
252
297
  instrument: Scalars['String']['input'];
253
298
  recentHours?: InputMaybe<Scalars['Int']['input']>;
254
299
  region?: InputMaybe<Region>;
255
300
  };
256
301
 
302
+ export type QueryPriceCandlesArgs = {
303
+ dataSource: DataSource;
304
+ division: Division;
305
+ granularity: Granularity;
306
+ instrument: Scalars['String']['input'];
307
+ timeSpan: TimeSpan;
308
+ };
309
+
257
310
  export type QueryResolveInstrumentsByDivisionArgs = {
258
311
  division: Division;
259
312
  instruments: Array<InputMaybe<Scalars['String']['input']>>;
@@ -262,7 +315,7 @@ export type QueryResolveInstrumentsByDivisionArgs = {
262
315
  export type QueryResolveInstrumentsWithFiltersArgs = {
263
316
  assetClass?: InputMaybe<Array<InputMaybe<AssetClassName>>>;
264
317
  count?: InputMaybe<Scalars['Int']['input']>;
265
- dataSource?: InputMaybe<InstrumentDataSource>;
318
+ dataSource: DataSource;
266
319
  division: Division;
267
320
  instruments?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
268
321
  offset?: InputMaybe<Scalars['Int']['input']>;
@@ -358,6 +411,21 @@ export type TimeCorrelation = {
358
411
  value?: Maybe<Scalars['Float']['output']>;
359
412
  };
360
413
 
414
+ export enum TimeSpan {
415
+ Day_1 = 'DAY_1',
416
+ Day_2 = 'DAY_2',
417
+ Hour_1 = 'HOUR_1',
418
+ Hour_12 = 'HOUR_12',
419
+ Month_1 = 'MONTH_1',
420
+ Month_3 = 'MONTH_3',
421
+ Month_6 = 'MONTH_6',
422
+ Week_1 = 'WEEK_1',
423
+ Week_2 = 'WEEK_2',
424
+ Week_3 = 'WEEK_3',
425
+ Year_1 = 'YEAR_1',
426
+ Year_5 = 'YEAR_5',
427
+ }
428
+
361
429
  export type TopicalInstrument = {
362
430
  __typename?: 'TopicalInstrument';
363
431
  assetClass?: Maybe<AssetClassName>;
@@ -460,7 +528,7 @@ export type ResolveInstrumentsWithFiltersQueryVariables = Exact<{
460
528
  assetClass?: InputMaybe<
461
529
  Array<InputMaybe<AssetClassName>> | InputMaybe<AssetClassName>
462
530
  >;
463
- dataSource?: InputMaybe<InstrumentDataSource>;
531
+ dataSource: DataSource;
464
532
  instruments?: InputMaybe<
465
533
  | Array<InputMaybe<Scalars['String']['input']>>
466
534
  | InputMaybe<Scalars['String']['input']>
@@ -530,8 +598,11 @@ export const ResolveInstrumentsWithFiltersDocument = {
530
598
  name: { kind: 'Name', value: 'dataSource' },
531
599
  },
532
600
  type: {
533
- kind: 'NamedType',
534
- name: { kind: 'Name', value: 'InstrumentDataSource' },
601
+ kind: 'NonNullType',
602
+ type: {
603
+ kind: 'NamedType',
604
+ name: { kind: 'Name', value: 'DataSource' },
605
+ },
535
606
  },
536
607
  },
537
608
  {
@@ -1,11 +1,27 @@
1
1
  import type { Translations } from '@oanda/mono-i18n';
2
2
  import { Locale } from '@oanda/mono-i18n';
3
3
 
4
+ import de from './sources/de.json';
4
5
  import en from './sources/en.json';
6
+ import es from './sources/es.json';
7
+ import fr from './sources/fr.json';
8
+ import it from './sources/it.json';
9
+ import pt from './sources/pt.json';
10
+ import th from './sources/th.json';
11
+ import vi from './sources/vi.json';
12
+ import zhCN from './sources/zh_CN.json';
5
13
  import type { defaultTranslations } from './translations';
6
14
 
7
15
  export type TranslationKey = keyof typeof defaultTranslations;
8
16
 
9
17
  export const translations: Translations = {
10
18
  [Locale.en]: { translation: en },
19
+ [Locale.fr]: { translation: fr },
20
+ [Locale.de]: { translation: de },
21
+ [Locale.es]: { translation: es },
22
+ [Locale.pt]: { translation: pt },
23
+ [Locale.it]: { translation: it },
24
+ [Locale.zhCN]: { translation: zhCN },
25
+ [Locale.th]: { translation: th },
26
+ [Locale.vi]: { translation: vi },
11
27
  };
@@ -0,0 +1,27 @@
1
+ {
2
+ "all": "Alle",
3
+ "asset_class": "Anlageklasse",
4
+ "bond": "Anleihe",
5
+ "buy": "Kaufen",
6
+ "close_only": "Nur Schließen",
7
+ "commodity": "Rohstoff",
8
+ "crypto": "Kryptowährungen",
9
+ "currency": "Währung",
10
+ "daily_percent_change": "Tägliche Veränderung in %",
11
+ "data_unavailable": "Daten nicht verfügbar",
12
+ "etf_cfds": "ETF-CFDs",
13
+ "index": "Index",
14
+ "instrument": "Instrument",
15
+ "instrument_name": "Instrumentenname",
16
+ "long_only": "Nur Long",
17
+ "margin": "Margin",
18
+ "search": "Suche",
19
+ "sell": "Verkaufen",
20
+ "share_cfds": "Aktien-CFDs",
21
+ "short_only": "Nur Short",
22
+ "spread": "Spread",
23
+ "symbol": "Symbol",
24
+ "today_high": "Heutiges Hoch",
25
+ "today_low": "Tagestief",
26
+ "trade_mode": "Handelsmodus"
27
+ }
@@ -14,6 +14,7 @@
14
14
  "instrument": "Instrument",
15
15
  "instrument_name": "Instrument name",
16
16
  "long_only": "Long only",
17
+ "margin": "Margin",
17
18
  "no_matching_results": "No matching results",
18
19
  "pagination_entries_range": "{{firstItemOnPage}}-{{lastItemOnPage}} of {{itemCount}} entries",
19
20
  "search": "Search",
@@ -24,6 +25,5 @@
24
25
  "symbol": "Symbol",
25
26
  "today_high": "Today high",
26
27
  "today_low": "Today low",
27
- "trade_mode": "Trade mode",
28
- "last_updated": "Last updated"
28
+ "trade_mode": "Trade mode"
29
29
  }