@oanda/labs-instruments-table-widget 1.0.23 → 1.0.24

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 (46) hide show
  1. package/CHANGELOG.md +100 -0
  2. package/dist/main/InstrumentsTableWidget/Main.js +3 -4
  3. package/dist/main/InstrumentsTableWidget/Main.js.map +1 -1
  4. package/dist/main/InstrumentsTableWidget/components/Filters/Filters.js.map +1 -1
  5. package/dist/main/InstrumentsTableWidget/components/Filters/types.js.map +1 -1
  6. package/dist/main/InstrumentsTableWidget/config.js +9 -6
  7. package/dist/main/InstrumentsTableWidget/config.js.map +1 -1
  8. package/dist/main/InstrumentsTableWidget/types.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 +2 -1
  14. package/dist/main/gql/types/graphql.js.map +1 -1
  15. package/dist/main/translations/sources/en.json +2 -1
  16. package/dist/module/InstrumentsTableWidget/Main.js +3 -4
  17. package/dist/module/InstrumentsTableWidget/Main.js.map +1 -1
  18. package/dist/module/InstrumentsTableWidget/components/Filters/Filters.js.map +1 -1
  19. package/dist/module/InstrumentsTableWidget/components/Filters/types.js.map +1 -1
  20. package/dist/module/InstrumentsTableWidget/config.js +9 -6
  21. package/dist/module/InstrumentsTableWidget/config.js.map +1 -1
  22. package/dist/module/InstrumentsTableWidget/types.js.map +1 -1
  23. package/dist/module/gql/resolveInstrumentsWithFilters.js +1 -1
  24. package/dist/module/gql/resolveInstrumentsWithFilters.js.map +1 -1
  25. package/dist/module/gql/types/gql.js +1 -1
  26. package/dist/module/gql/types/gql.js.map +1 -1
  27. package/dist/module/gql/types/graphql.js +2 -1
  28. package/dist/module/gql/types/graphql.js.map +1 -1
  29. package/dist/module/translations/sources/en.json +2 -1
  30. package/dist/types/InstrumentsTableWidget/Main.d.ts +1 -1
  31. package/dist/types/InstrumentsTableWidget/components/Filters/types.d.ts +3 -1
  32. package/dist/types/InstrumentsTableWidget/config.d.ts +2 -1
  33. package/dist/types/InstrumentsTableWidget/types.d.ts +3 -3
  34. package/dist/types/gql/types/gql.d.ts +3 -3
  35. package/dist/types/gql/types/graphql.d.ts +3 -2
  36. package/package.json +3 -3
  37. package/src/InstrumentsTableWidget/Main.tsx +19 -26
  38. package/src/InstrumentsTableWidget/components/Filters/Filters.tsx +2 -2
  39. package/src/InstrumentsTableWidget/components/Filters/types.ts +5 -1
  40. package/src/InstrumentsTableWidget/config.ts +12 -7
  41. package/src/InstrumentsTableWidget/types.ts +7 -3
  42. package/src/gql/resolveInstrumentsWithFilters.ts +1 -1
  43. package/src/gql/types/gql.ts +3 -3
  44. package/src/gql/types/graphql.ts +4 -4
  45. package/src/translations/sources/en.json +2 -1
  46. package/test/Main.test.tsx +7 -3
@@ -9,7 +9,7 @@ import { useLocale } from '@oanda/mono-i18n';
9
9
  import React, { useState } from 'react';
10
10
  import { useDebounceCallback } from 'usehooks-ts';
11
11
 
12
- import type { FiltersProps } from './types';
12
+ import type { AssetClassLabels, FiltersProps } from './types';
13
13
 
14
14
  export const Filters = ({
15
15
  assetClassOptions,
@@ -62,7 +62,7 @@ export const Filters = ({
62
62
  }
63
63
  setSelectedOption={(option) => {
64
64
  setAssetClass([option.id]);
65
- onAssetClassChange([option.id]);
65
+ onAssetClassChange([option.id as AssetClassLabels]);
66
66
  setSearchInputValue('');
67
67
  onSearchChange('');
68
68
  }}
@@ -1,7 +1,11 @@
1
1
  import type { SelectOption } from '@oanda/labs-widget-common';
2
2
 
3
+ import type { AssetClassName } from '../../../gql/types/graphql';
4
+
5
+ export type AssetClassLabels = AssetClassName | 'ALL';
6
+
3
7
  export interface FiltersProps {
4
- onAssetClassChange: (assetClass: string[]) => void;
8
+ onAssetClassChange: (assetClass: AssetClassLabels[]) => void;
5
9
  onSearchChange: (searchPattern: string) => void;
6
10
  isAssetClassFilterEnabled?: boolean;
7
11
  isInstrumentSearchEnabled?: boolean;
@@ -1,6 +1,9 @@
1
1
  import type { HeaderColumns } from '@oanda/labs-widget-common';
2
2
  import { DataRecordType } from '@oanda/labs-widget-common';
3
3
 
4
+ import { AssetClassName } from '../gql/types/graphql';
5
+ import type { AssetClassLabels } from './components/Filters/types';
6
+
4
7
  type HeaderRecordType =
5
8
  | DataRecordType.INSTRUMENT
6
9
  | DataRecordType.SELL
@@ -44,13 +47,15 @@ const headerConfig: Record<
44
47
  },
45
48
  };
46
49
 
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',
50
+ const assetClassLabels: Record<AssetClassLabels, string> = {
51
+ ALL: 'all',
52
+ [AssetClassName.Currency]: 'currency',
53
+ [AssetClassName.Commodities]: 'commodity',
54
+ [AssetClassName.Rates]: 'bond',
55
+ [AssetClassName.Cryptocurrency]: 'crypto',
56
+ [AssetClassName.EquityShares]: 'share_cfds',
57
+ [AssetClassName.Etfs]: 'etf_cfds',
58
+ [AssetClassName.Indices]: 'index',
54
59
  };
55
60
 
56
61
  const getHeaderConfig = (activeColumns: DataRecordType[]): HeaderColumns[] => {
@@ -1,6 +1,10 @@
1
1
  import type { DataRecordType, WidgetConfig } from '@oanda/labs-widget-common';
2
2
 
3
- import type { Division, InstrumentDataSource } from '../gql/types/graphql';
3
+ import type {
4
+ AssetClassName,
5
+ Division,
6
+ InstrumentDataSource,
7
+ } from '../gql/types/graphql';
4
8
 
5
9
  export enum PriceType {
6
10
  Raw = 'raw',
@@ -12,7 +16,7 @@ export interface InstrumentsTableConfig extends WidgetConfig {
12
16
  instruments?: string[];
13
17
  division: Division;
14
18
  columns?: DataRecordType[];
15
- assetClasses?: string[];
19
+ assetClasses?: AssetClassName[];
16
20
  isAssetClassFilterEnabled?: boolean;
17
21
  isInstrumentSearchEnabled?: boolean;
18
22
  recordsPerPage?: number;
@@ -24,7 +28,7 @@ export interface MainProps {
24
28
  instruments?: string[];
25
29
  division: Division;
26
30
  columns?: DataRecordType[];
27
- assetClasses?: string[];
31
+ assetClasses?: AssetClassName[];
28
32
  isAssetClassFilterEnabled?: boolean;
29
33
  isInstrumentSearchEnabled?: boolean;
30
34
  recordsPerPage?: number;
@@ -3,7 +3,7 @@ import { gql } from '@apollo/client';
3
3
  export const resolveInstrumentsWithFilters = gql`
4
4
  query resolveInstrumentsWithFilters(
5
5
  $division: Division!
6
- $assetClass: [String]
6
+ $assetClass: [AssetClassName]
7
7
  $dataSource: InstrumentDataSource
8
8
  $instruments: [String]
9
9
  $searchPattern: String
@@ -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: [String]\n $dataSource: InstrumentDataSource\n $instruments: [String]\n $searchPattern: String\n $count: Int\n $offset: Int\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 ) {\n instruments {\n name\n displayName\n }\n totalCount\n }\n }\n':
16
+ '\n query resolveInstrumentsWithFilters(\n $division: Division!\n $assetClass: [AssetClassName]\n $dataSource: InstrumentDataSource\n $instruments: [String]\n $searchPattern: String\n $count: Int\n $offset: Int\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 ) {\n instruments {\n name\n displayName\n }\n totalCount\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: [String]\n $dataSource: InstrumentDataSource\n $instruments: [String]\n $searchPattern: String\n $count: Int\n $offset: Int\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 ) {\n instruments {\n name\n displayName\n }\n totalCount\n }\n }\n'
39
- ): (typeof documents)['\n query resolveInstrumentsWithFilters(\n $division: Division!\n $assetClass: [String]\n $dataSource: InstrumentDataSource\n $instruments: [String]\n $searchPattern: String\n $count: Int\n $offset: Int\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 ) {\n instruments {\n name\n displayName\n }\n totalCount\n }\n }\n'];
38
+ source: '\n query resolveInstrumentsWithFilters(\n $division: Division!\n $assetClass: [AssetClassName]\n $dataSource: InstrumentDataSource\n $instruments: [String]\n $searchPattern: String\n $count: Int\n $offset: Int\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 ) {\n instruments {\n name\n displayName\n }\n totalCount\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 $count: Int\n $offset: Int\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 ) {\n instruments {\n name\n displayName\n }\n totalCount\n }\n }\n'];
40
40
 
41
41
  export function graphql(source: string) {
42
42
  return (documents as any)[source] ?? {};
@@ -40,6 +40,7 @@ export enum AssetClassName {
40
40
  Cryptocurrency = 'CRYPTOCURRENCY',
41
41
  Currency = 'CURRENCY',
42
42
  EquityShares = 'EQUITY_SHARES',
43
+ Etfs = 'ETFS',
43
44
  Indices = 'INDICES',
44
45
  Rates = 'RATES',
45
46
  }
@@ -251,7 +252,7 @@ export type QueryResolveInstrumentsByDivisionArgs = {
251
252
  };
252
253
 
253
254
  export type QueryResolveInstrumentsWithFiltersArgs = {
254
- assetClass?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
255
+ assetClass?: InputMaybe<Array<InputMaybe<AssetClassName>>>;
255
256
  count?: InputMaybe<Scalars['Int']['input']>;
256
257
  dataSource?: InputMaybe<InstrumentDataSource>;
257
258
  division: Division;
@@ -439,8 +440,7 @@ export enum VolatilityChartTimeUnit {
439
440
  export type ResolveInstrumentsWithFiltersQueryVariables = Exact<{
440
441
  division: Division;
441
442
  assetClass?: InputMaybe<
442
- | Array<InputMaybe<Scalars['String']['input']>>
443
- | InputMaybe<Scalars['String']['input']>
443
+ Array<InputMaybe<AssetClassName>> | InputMaybe<AssetClassName>
444
444
  >;
445
445
  dataSource?: InputMaybe<InstrumentDataSource>;
446
446
  instruments?: InputMaybe<
@@ -497,7 +497,7 @@ export const ResolveInstrumentsWithFiltersDocument = {
497
497
  kind: 'ListType',
498
498
  type: {
499
499
  kind: 'NamedType',
500
- name: { kind: 'Name', value: 'String' },
500
+ name: { kind: 'Name', value: 'AssetClassName' },
501
501
  },
502
502
  },
503
503
  },
@@ -8,6 +8,7 @@
8
8
  "currency": "Currency",
9
9
  "daily_percent_change": "Daily % Change",
10
10
  "data_unavailable": "Data unavailable",
11
+ "etf_cfds": "ETF CFDs",
11
12
  "index": "Index",
12
13
  "instrument": "Instrument",
13
14
  "instrument_name": "Instrument name",
@@ -15,7 +16,7 @@
15
16
  "pagination_entries_range": "{{firstItemOnPage}}-{{lastItemOnPage}} of {{itemCount}} entries",
16
17
  "search": "Search",
17
18
  "sell": "Sell",
18
- "share_sfds": "Share CFDs",
19
+ "share_cfds": "Share CFDs",
19
20
  "spread": "Spread",
20
21
  "today_high": "Today High",
21
22
  "today_low": "Today Low"
@@ -9,7 +9,11 @@ import {
9
9
  import { fireEvent, render, waitFor } from '@testing-library/react';
10
10
  import React from 'react';
11
11
 
12
- import { Division, InstrumentDataSource } from '../src/gql/types/graphql';
12
+ import {
13
+ AssetClassName,
14
+ Division,
15
+ InstrumentDataSource,
16
+ } from '../src/gql/types/graphql';
13
17
  import { Main } from '../src/InstrumentsTableWidget/Main';
14
18
  import {
15
19
  mockErrorQuery,
@@ -47,7 +51,7 @@ describe('Main component', () => {
47
51
  <Main
48
52
  isAssetClassFilterEnabled
49
53
  isInstrumentSearchEnabled
50
- assetClasses={['FX', 'BONDS']}
54
+ assetClasses={[AssetClassName.Etfs, AssetClassName.Currency]}
51
55
  dataSource={InstrumentDataSource.V20}
52
56
  division={Division.Oc}
53
57
  instruments={['EUR_USD', 'GBP_USD']}
@@ -67,7 +71,7 @@ describe('Main component', () => {
67
71
  <MockLayoutProvider>
68
72
  <Main
69
73
  isAssetClassFilterEnabled
70
- assetClasses={['FX', 'BONDS']}
74
+ assetClasses={[AssetClassName.Etfs, AssetClassName.Currency]}
71
75
  dataSource={InstrumentDataSource.V20}
72
76
  division={Division.Oc}
73
77
  instruments={['EUR_USD', 'GBP_USD']}