@oanda/labs-currency-cross-table 1.0.6 → 1.0.8

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 (97) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/codegen.ts +15 -0
  3. package/dist/main/CurrencyCrossTableWidget/CurrencyCrossTableWidget.js +12 -4
  4. package/dist/main/CurrencyCrossTableWidget/CurrencyCrossTableWidget.js.map +1 -1
  5. package/dist/main/CurrencyCrossTableWidget/Main.js +19 -17
  6. package/dist/main/CurrencyCrossTableWidget/Main.js.map +1 -1
  7. package/dist/main/CurrencyCrossTableWidget/ValidationWrapper.js +2 -1
  8. package/dist/main/CurrencyCrossTableWidget/ValidationWrapper.js.map +1 -1
  9. package/dist/main/CurrencyCrossTableWidget/components/Cell.js +2 -4
  10. package/dist/main/CurrencyCrossTableWidget/components/Cell.js.map +1 -1
  11. package/dist/main/CurrencyCrossTableWidget/components/CellValidationWrapper.js +49 -0
  12. package/dist/main/CurrencyCrossTableWidget/components/CellValidationWrapper.js.map +1 -0
  13. package/dist/main/CurrencyCrossTableWidget/components/CellWithData.js +19 -13
  14. package/dist/main/CurrencyCrossTableWidget/components/CellWithData.js.map +1 -1
  15. package/dist/main/CurrencyCrossTableWidget/components/TextCell.js +7 -5
  16. package/dist/main/CurrencyCrossTableWidget/components/TextCell.js.map +1 -1
  17. package/dist/main/CurrencyCrossTableWidget/components/types.js.map +1 -1
  18. package/dist/main/CurrencyCrossTableWidget/render.js +7 -2
  19. package/dist/main/CurrencyCrossTableWidget/render.js.map +1 -1
  20. package/dist/main/CurrencyCrossTableWidget/types.js +0 -13
  21. package/dist/main/CurrencyCrossTableWidget/types.js.map +1 -1
  22. package/dist/main/CurrencyCrossTableWidget/utils.js +13 -30
  23. package/dist/main/CurrencyCrossTableWidget/utils.js.map +1 -1
  24. package/dist/main/gql/types/fragment-masking.js +23 -0
  25. package/dist/main/gql/types/fragment-masking.js.map +1 -0
  26. package/dist/main/gql/types/gql.js +16 -0
  27. package/dist/main/gql/types/gql.js.map +1 -0
  28. package/dist/main/gql/types/graphql.js +223 -0
  29. package/dist/main/gql/types/graphql.js.map +1 -0
  30. package/dist/main/gql/types/index.js +28 -0
  31. package/dist/main/gql/types/index.js.map +1 -0
  32. package/dist/main/gql/validateInstruments.js +16 -0
  33. package/dist/main/gql/validateInstruments.js.map +1 -0
  34. package/dist/module/CurrencyCrossTableWidget/CurrencyCrossTableWidget.js +10 -2
  35. package/dist/module/CurrencyCrossTableWidget/CurrencyCrossTableWidget.js.map +1 -1
  36. package/dist/module/CurrencyCrossTableWidget/Main.js +21 -19
  37. package/dist/module/CurrencyCrossTableWidget/Main.js.map +1 -1
  38. package/dist/module/CurrencyCrossTableWidget/ValidationWrapper.js +2 -1
  39. package/dist/module/CurrencyCrossTableWidget/ValidationWrapper.js.map +1 -1
  40. package/dist/module/CurrencyCrossTableWidget/components/Cell.js +2 -4
  41. package/dist/module/CurrencyCrossTableWidget/components/Cell.js.map +1 -1
  42. package/dist/module/CurrencyCrossTableWidget/components/CellValidationWrapper.js +42 -0
  43. package/dist/module/CurrencyCrossTableWidget/components/CellValidationWrapper.js.map +1 -0
  44. package/dist/module/CurrencyCrossTableWidget/components/CellWithData.js +20 -14
  45. package/dist/module/CurrencyCrossTableWidget/components/CellWithData.js.map +1 -1
  46. package/dist/module/CurrencyCrossTableWidget/components/TextCell.js +7 -5
  47. package/dist/module/CurrencyCrossTableWidget/components/TextCell.js.map +1 -1
  48. package/dist/module/CurrencyCrossTableWidget/components/types.js.map +1 -1
  49. package/dist/module/CurrencyCrossTableWidget/render.js +6 -1
  50. package/dist/module/CurrencyCrossTableWidget/render.js.map +1 -1
  51. package/dist/module/CurrencyCrossTableWidget/types.js +0 -12
  52. package/dist/module/CurrencyCrossTableWidget/types.js.map +1 -1
  53. package/dist/module/CurrencyCrossTableWidget/utils.js +10 -29
  54. package/dist/module/CurrencyCrossTableWidget/utils.js.map +1 -1
  55. package/dist/module/gql/types/fragment-masking.js +15 -0
  56. package/dist/module/gql/types/fragment-masking.js.map +1 -0
  57. package/dist/module/gql/types/gql.js +8 -0
  58. package/dist/module/gql/types/gql.js.map +1 -0
  59. package/dist/module/gql/types/graphql.js +217 -0
  60. package/dist/module/gql/types/graphql.js.map +1 -0
  61. package/dist/module/gql/types/index.js +3 -0
  62. package/dist/module/gql/types/index.js.map +1 -0
  63. package/dist/module/gql/validateInstruments.js +10 -0
  64. package/dist/module/gql/validateInstruments.js.map +1 -0
  65. package/dist/types/CurrencyCrossTableWidget/CurrencyCrossTableWidget.d.ts +1 -1
  66. package/dist/types/CurrencyCrossTableWidget/Main.d.ts +1 -1
  67. package/dist/types/CurrencyCrossTableWidget/components/Cell.d.ts +1 -1
  68. package/dist/types/CurrencyCrossTableWidget/components/CellValidationWrapper.d.ts +4 -0
  69. package/dist/types/CurrencyCrossTableWidget/components/CellWithData.d.ts +1 -1
  70. package/dist/types/CurrencyCrossTableWidget/components/TextCell.d.ts +1 -1
  71. package/dist/types/CurrencyCrossTableWidget/components/types.d.ts +15 -4
  72. package/dist/types/CurrencyCrossTableWidget/types.d.ts +3 -11
  73. package/dist/types/CurrencyCrossTableWidget/utils.d.ts +5 -6
  74. package/dist/types/gql/types/fragment-masking.d.ts +15 -0
  75. package/dist/types/gql/types/gql.d.ts +37 -0
  76. package/dist/types/gql/types/graphql.d.ts +384 -0
  77. package/dist/types/gql/types/index.d.ts +2 -0
  78. package/dist/types/gql/validateInstruments.d.ts +1 -0
  79. package/package.json +12 -4
  80. package/src/CurrencyCrossTableWidget/CurrencyCrossTableWidget.tsx +16 -6
  81. package/src/CurrencyCrossTableWidget/Main.tsx +23 -19
  82. package/src/CurrencyCrossTableWidget/ValidationWrapper.tsx +1 -0
  83. package/src/CurrencyCrossTableWidget/components/Cell.tsx +2 -4
  84. package/src/CurrencyCrossTableWidget/components/CellValidationWrapper.tsx +49 -0
  85. package/src/CurrencyCrossTableWidget/components/CellWithData.tsx +30 -16
  86. package/src/CurrencyCrossTableWidget/components/TextCell.tsx +6 -4
  87. package/src/CurrencyCrossTableWidget/components/types.ts +15 -4
  88. package/src/CurrencyCrossTableWidget/render.tsx +6 -2
  89. package/src/CurrencyCrossTableWidget/types.tsx +3 -12
  90. package/src/CurrencyCrossTableWidget/utils.ts +17 -37
  91. package/src/gql/types/fragment-masking.ts +66 -0
  92. package/src/gql/types/gql.ts +42 -0
  93. package/src/gql/types/graphql.ts +423 -0
  94. package/src/gql/types/index.ts +2 -0
  95. package/src/gql/validateInstruments.ts +10 -0
  96. package/test/Main.test.tsx +12 -6
  97. package/test/mocks.ts +225 -0
@@ -1 +1 @@
1
- {"version":3,"file":"Main.js","names":["React","Fragment","useEffect","useState","useLiveRatesQuery","CellWithData","TextCell","Main","_ref","instruments","currencies","selectedCurrency","setSelectedCurrency","selectedPair","setSelectedPair","hasInstruments","length","target","setQuery","createElement","className","map","pair","key","label","hovered","currency","index","arr","additionalBorderBottom","loading","record","instrument","displayName","emptyIndicator"],"sources":["../../../src/CurrencyCrossTableWidget/Main.tsx"],"sourcesContent":["import React, { Fragment, useEffect, useState } from 'react';\nimport { useLiveRatesQuery } from '@oanda/labs-widget-common';\nimport { MainProps } from './types';\nimport { CellWithData, TextCell } from './components';\n\nconst Main = ({\n instruments,\n currencies,\n}: MainProps) => {\n const [selectedCurrency, setSelectedCurrency] = useState('');\n const [selectedPair, setSelectedPair] = useState('');\n\n const hasInstruments = instruments.length > 0;\n\n const { target, setQuery } = useLiveRatesQuery();\n\n useEffect(() => {\n if (hasInstruments) {\n setQuery({ instruments });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, instruments);\n\n return (\n <div data-testid=\"currency-cross-table-wrapper\" className=\"lw-w-full\">\n <div className=\"lw-flex lw-border-l lw-border-t lw-border-solid lw-border-border-primary\">\n <TextCell />\n {currencies.map(((pair) => (\n <TextCell\n key={pair}\n label={pair}\n hovered={pair === selectedPair}\n />\n )))}\n </div>\n {currencies.map(((currency, index, arr) => (\n <div\n key={currency}\n className=\"lw-flex lw-border-l lw-border-t lw-border-solid lw-border-border-primary\"\n >\n <TextCell\n label={currency}\n additionalBorderBottom={index === arr.length - 1}\n hovered={currency === selectedCurrency}\n />\n {arr.map((pair) => (\n <Fragment key={`${currency}_${pair}`}>\n {currency !== pair ? (\n <CellWithData\n loading={false}\n record={{\n instrument: `${currency}_${pair}`,\n displayName: `${currency}/${pair}`,\n }}\n target={target}\n additionalBorderBottom={index === arr.length - 1}\n setSelectedCurrency={setSelectedCurrency}\n setSelectedPair={setSelectedPair}\n />\n ) : (\n <TextCell\n additionalBorderBottom={index === arr.length - 1}\n emptyIndicator\n />\n )}\n </Fragment>\n ))}\n </div>\n )))}\n </div>\n );\n};\n\nexport { Main };\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC5D,SAASC,iBAAiB,QAAQ,2BAA2B;AAE7D,SAASC,YAAY,EAAEC,QAAQ,QAAQ,cAAc;AAErD,MAAMC,IAAI,GAAGC,IAAA,IAGI;EAAA,IAHH;IACZC,WAAW;IACXC;EACS,CAAC,GAAAF,IAAA;EACV,MAAM,CAACG,gBAAgB,EAAEC,mBAAmB,CAAC,GAAGT,QAAQ,CAAC,EAAE,CAAC;EAC5D,MAAM,CAACU,YAAY,EAAEC,eAAe,CAAC,GAAGX,QAAQ,CAAC,EAAE,CAAC;EAEpD,MAAMY,cAAc,GAAGN,WAAW,CAACO,MAAM,GAAG,CAAC;EAE7C,MAAM;IAAEC,MAAM;IAAEC;EAAS,CAAC,GAAGd,iBAAiB,CAAC,CAAC;EAEhDF,SAAS,CAAC,MAAM;IACd,IAAIa,cAAc,EAAE;MAClBG,QAAQ,CAAC;QAAET;MAAY,CAAC,CAAC;IAC3B;EAEF,CAAC,EAAEA,WAAW,CAAC;EAEf,OACET,KAAA,CAAAmB,aAAA;IAAK,eAAY,8BAA8B;IAACC,SAAS,EAAC;EAAW,GACnEpB,KAAA,CAAAmB,aAAA;IAAKC,SAAS,EAAC;EAA0E,GACvFpB,KAAA,CAAAmB,aAAA,CAACb,QAAQ,MAAE,CAAC,EACXI,UAAU,CAACW,GAAG,CAAGC,IAAI,IACpBtB,KAAA,CAAAmB,aAAA,CAACb,QAAQ;IACPiB,GAAG,EAAED,IAAK;IACVE,KAAK,EAAEF,IAAK;IACZG,OAAO,EAAEH,IAAI,KAAKT;EAAa,CAChC,CACD,CACC,CAAC,EACLH,UAAU,CAACW,GAAG,CAAE,CAACK,QAAQ,EAAEC,KAAK,EAAEC,GAAG,KACpC5B,KAAA,CAAAmB,aAAA;IACEI,GAAG,EAAEG,QAAS;IACdN,SAAS,EAAC;EAA0E,GAEpFpB,KAAA,CAAAmB,aAAA,CAACb,QAAQ;IACPkB,KAAK,EAAEE,QAAS;IAChBG,sBAAsB,EAAEF,KAAK,KAAKC,GAAG,CAACZ,MAAM,GAAG,CAAE;IACjDS,OAAO,EAAEC,QAAQ,KAAKf;EAAiB,CACxC,CAAC,EACDiB,GAAG,CAACP,GAAG,CAAEC,IAAI,IACZtB,KAAA,CAAAmB,aAAA,CAAClB,QAAQ;IAACsB,GAAG,EAAE,GAAGG,QAAQ,IAAIJ,IAAI;EAAG,GAClCI,QAAQ,KAAKJ,IAAI,GAChBtB,KAAA,CAAAmB,aAAA,CAACd,YAAY;IACXyB,OAAO,EAAE,KAAM;IACfC,MAAM,EAAE;MACNC,UAAU,EAAE,GAAGN,QAAQ,IAAIJ,IAAI,EAAE;MACjCW,WAAW,EAAE,GAAGP,QAAQ,IAAIJ,IAAI;IAClC,CAAE;IACFL,MAAM,EAAEA,MAAO;IACfY,sBAAsB,EAAEF,KAAK,KAAKC,GAAG,CAACZ,MAAM,GAAG,CAAE;IACjDJ,mBAAmB,EAAEA,mBAAoB;IACzCE,eAAe,EAAEA;EAAgB,CAClC,CAAC,GAEFd,KAAA,CAAAmB,aAAA,CAACb,QAAQ;IACPuB,sBAAsB,EAAEF,KAAK,KAAKC,GAAG,CAACZ,MAAM,GAAG,CAAE;IACjDkB,cAAc;EAAA,CACf,CAEK,CACX,CACE,CACL,CACC,CAAC;AAEV,CAAC;AAED,SAAS3B,IAAI","ignoreList":[]}
1
+ {"version":3,"file":"Main.js","names":["React","Fragment","Suspense","useEffect","useState","useLiveRatesQuery","TextCell","CellValidationWrapper","divisionMapper","Main","_ref","instruments","currencies","division","selectedCurrency","setSelectedCurrency","selectedPair","setSelectedPair","hasInstruments","length","target","setQuery","createElement","className","sticky","map","pair","key","label","hovered","currency","index","arr","instrument","emptyIndicator"],"sources":["../../../src/CurrencyCrossTableWidget/Main.tsx"],"sourcesContent":["import React, {\n Fragment, Suspense, useEffect, useState,\n} from 'react';\nimport { useLiveRatesQuery } from '@oanda/labs-widget-common';\nimport { MainProps } from './types';\nimport { TextCell } from './components';\nimport { CellValidationWrapper } from './components/CellValidationWrapper';\nimport { divisionMapper } from './utils';\n\nconst Main = ({\n instruments,\n currencies,\n division,\n}: MainProps) => {\n const [selectedCurrency, setSelectedCurrency] = useState('');\n const [selectedPair, setSelectedPair] = useState('');\n\n const hasInstruments = instruments.length > 0;\n\n const { target, setQuery } = useLiveRatesQuery();\n\n useEffect(() => {\n if (hasInstruments) {\n setQuery({ instruments });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, instruments);\n\n return (\n <div data-testid=\"currency-cross-table-wrapper\" className=\"lw-w-full lw-overflow-x-auto lw-overflow-y-hidden lw-border lw-border-b-0 lw-border-solid lw-border-border-primary\">\n <div className=\"lw-flex lw-w-max lw-min-w-full\">\n <TextCell sticky />\n {currencies.map(((pair) => (\n <TextCell\n key={pair}\n label={pair}\n hovered={pair === selectedPair}\n />\n )))}\n </div>\n {currencies.map(((currency, index, arr) => (\n <div\n key={currency}\n className=\"lw-flex lw-w-max lw-min-w-full\"\n >\n <TextCell\n label={currency}\n hovered={currency === selectedCurrency}\n sticky\n />\n {arr.map((pair) => (\n <Fragment key={`${currency}_${pair}`}>\n {currency !== pair ? (\n <Suspense>\n <CellValidationWrapper\n currency={currency}\n pair={pair}\n instrument={`${currency}${divisionMapper(division)}${pair}`}\n target={target}\n setSelectedCurrency={setSelectedCurrency}\n setSelectedPair={setSelectedPair}\n division={division}\n />\n </Suspense>\n ) : (\n <TextCell\n emptyIndicator\n />\n )}\n </Fragment>\n ))}\n </div>\n )))}\n </div>\n );\n};\n\nexport { Main };\n"],"mappings":"AAAA,OAAOA,KAAK,IACVC,QAAQ,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,QAClC,OAAO;AACd,SAASC,iBAAiB,QAAQ,2BAA2B;AAE7D,SAASC,QAAQ,QAAQ,cAAc;AACvC,SAASC,qBAAqB,QAAQ,oCAAoC;AAC1E,SAASC,cAAc,QAAQ,SAAS;AAExC,MAAMC,IAAI,GAAGC,IAAA,IAII;EAAA,IAJH;IACZC,WAAW;IACXC,UAAU;IACVC;EACS,CAAC,GAAAH,IAAA;EACV,MAAM,CAACI,gBAAgB,EAAEC,mBAAmB,CAAC,GAAGX,QAAQ,CAAC,EAAE,CAAC;EAC5D,MAAM,CAACY,YAAY,EAAEC,eAAe,CAAC,GAAGb,QAAQ,CAAC,EAAE,CAAC;EAEpD,MAAMc,cAAc,GAAGP,WAAW,CAACQ,MAAM,GAAG,CAAC;EAE7C,MAAM;IAAEC,MAAM;IAAEC;EAAS,CAAC,GAAGhB,iBAAiB,CAAC,CAAC;EAEhDF,SAAS,CAAC,MAAM;IACd,IAAIe,cAAc,EAAE;MAClBG,QAAQ,CAAC;QAAEV;MAAY,CAAC,CAAC;IAC3B;EAEF,CAAC,EAAEA,WAAW,CAAC;EAEf,OACEX,KAAA,CAAAsB,aAAA;IAAK,eAAY,8BAA8B;IAACC,SAAS,EAAC;EAAoH,GAC5KvB,KAAA,CAAAsB,aAAA;IAAKC,SAAS,EAAC;EAAgC,GAC7CvB,KAAA,CAAAsB,aAAA,CAAChB,QAAQ;IAACkB,MAAM;EAAA,CAAE,CAAC,EAClBZ,UAAU,CAACa,GAAG,CAAGC,IAAI,IACpB1B,KAAA,CAAAsB,aAAA,CAAChB,QAAQ;IACPqB,GAAG,EAAED,IAAK;IACVE,KAAK,EAAEF,IAAK;IACZG,OAAO,EAAEH,IAAI,KAAKV;EAAa,CAChC,CACD,CACC,CAAC,EACLJ,UAAU,CAACa,GAAG,CAAE,CAACK,QAAQ,EAAEC,KAAK,EAAEC,GAAG,KACpChC,KAAA,CAAAsB,aAAA;IACEK,GAAG,EAAEG,QAAS;IACdP,SAAS,EAAC;EAAgC,GAE1CvB,KAAA,CAAAsB,aAAA,CAAChB,QAAQ;IACPsB,KAAK,EAAEE,QAAS;IAChBD,OAAO,EAAEC,QAAQ,KAAKhB,gBAAiB;IACvCU,MAAM;EAAA,CACP,CAAC,EACDQ,GAAG,CAACP,GAAG,CAAEC,IAAI,IACZ1B,KAAA,CAAAsB,aAAA,CAACrB,QAAQ;IAAC0B,GAAG,EAAE,GAAGG,QAAQ,IAAIJ,IAAI;EAAG,GAClCI,QAAQ,KAAKJ,IAAI,GAChB1B,KAAA,CAAAsB,aAAA,CAACpB,QAAQ,QACPF,KAAA,CAAAsB,aAAA,CAACf,qBAAqB;IACpBuB,QAAQ,EAAEA,QAAS;IACnBJ,IAAI,EAAEA,IAAK;IACXO,UAAU,EAAE,GAAGH,QAAQ,GAAGtB,cAAc,CAACK,QAAQ,CAAC,GAAGa,IAAI,EAAG;IAC5DN,MAAM,EAAEA,MAAO;IACfL,mBAAmB,EAAEA,mBAAoB;IACzCE,eAAe,EAAEA,eAAgB;IACjCJ,QAAQ,EAAEA;EAAS,CACpB,CACO,CAAC,GAEXb,KAAA,CAAAsB,aAAA,CAAChB,QAAQ;IACP4B,cAAc;EAAA,CACf,CAEK,CACX,CACE,CACL,CACC,CAAC;AAEV,CAAC;AAED,SAASzB,IAAI","ignoreList":[]}
@@ -14,7 +14,8 @@ const ValidationWrapper = _ref => {
14
14
  className: "lw-flex lw-w-full lw-text-sm lw-tracking-normal lw-text-text-primary"
15
15
  }, !showError && React.createElement(Main, {
16
16
  instruments: currenciesToInstruments(currencies, division),
17
- currencies: currencies
17
+ currencies: currencies,
18
+ division: division
18
19
  }), showError && React.createElement("div", {
19
20
  className: classnames('lw-flex lw-h-[250px] lw-w-full lw-items-center lw-border lw-border-solid lw-border-border-primary')
20
21
  }, React.createElement(ChartError, null))));
@@ -1 +1 @@
1
- {"version":3,"file":"ValidationWrapper.js","names":["React","classnames","ChartError","currenciesToInstruments","validCurrencies","Main","ValidationWrapper","_ref","currencies","division","isParamError","showError","createElement","Fragment","className","instruments"],"sources":["../../../src/CurrencyCrossTableWidget/ValidationWrapper.tsx"],"sourcesContent":["import React from 'react';\nimport classnames from 'classnames';\nimport { ChartError } from '@oanda/labs-widget-common';\nimport { currenciesToInstruments, validCurrencies } from './utils';\nimport { ValidationWrapperProps } from './types';\nimport { Main } from './Main';\n\nconst ValidationWrapper = ({\n currencies,\n division,\n isParamError,\n}: ValidationWrapperProps) => {\n const showError = !validCurrencies(currencies) || isParamError;\n\n return (\n <>\n <div\n className=\"lw-flex lw-w-full lw-text-sm lw-tracking-normal lw-text-text-primary\"\n >\n {!showError && (\n <Main\n instruments={currenciesToInstruments(currencies, division)}\n currencies={currencies}\n />\n )}\n {showError && (\n <div className={classnames('lw-flex lw-h-[250px] lw-w-full lw-items-center lw-border lw-border-solid lw-border-border-primary')}>\n <ChartError />\n </div>\n )}\n </div>\n </>\n );\n};\n\nexport { ValidationWrapper };\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,UAAU,QAAQ,2BAA2B;AACtD,SAASC,uBAAuB,EAAEC,eAAe,QAAQ,SAAS;AAElE,SAASC,IAAI,QAAQ,QAAQ;AAE7B,MAAMC,iBAAiB,GAAGC,IAAA,IAII;EAAA,IAJH;IACzBC,UAAU;IACVC,QAAQ;IACRC;EACsB,CAAC,GAAAH,IAAA;EACvB,MAAMI,SAAS,GAAG,CAACP,eAAe,CAACI,UAAU,CAAC,IAAIE,YAAY;EAE9D,OACEV,KAAA,CAAAY,aAAA,CAAAZ,KAAA,CAAAa,QAAA,QACEb,KAAA,CAAAY,aAAA;IACEE,SAAS,EAAC;EAAsE,GAE/E,CAACH,SAAS,IACTX,KAAA,CAAAY,aAAA,CAACP,IAAI;IACHU,WAAW,EAAEZ,uBAAuB,CAACK,UAAU,EAAEC,QAAQ,CAAE;IAC3DD,UAAU,EAAEA;EAAW,CACxB,CACF,EACAG,SAAS,IACRX,KAAA,CAAAY,aAAA;IAAKE,SAAS,EAAEb,UAAU,CAAC,mGAAmG;EAAE,GAC9HD,KAAA,CAAAY,aAAA,CAACV,UAAU,MAAE,CACV,CAEJ,CACL,CAAC;AAEP,CAAC;AAED,SAASI,iBAAiB","ignoreList":[]}
1
+ {"version":3,"file":"ValidationWrapper.js","names":["React","classnames","ChartError","currenciesToInstruments","validCurrencies","Main","ValidationWrapper","_ref","currencies","division","isParamError","showError","createElement","Fragment","className","instruments"],"sources":["../../../src/CurrencyCrossTableWidget/ValidationWrapper.tsx"],"sourcesContent":["import React from 'react';\nimport classnames from 'classnames';\nimport { ChartError } from '@oanda/labs-widget-common';\nimport { currenciesToInstruments, validCurrencies } from './utils';\nimport { ValidationWrapperProps } from './types';\nimport { Main } from './Main';\n\nconst ValidationWrapper = ({\n currencies,\n division,\n isParamError,\n}: ValidationWrapperProps) => {\n const showError = !validCurrencies(currencies) || isParamError;\n\n return (\n <>\n <div\n className=\"lw-flex lw-w-full lw-text-sm lw-tracking-normal lw-text-text-primary\"\n >\n {!showError && (\n <Main\n instruments={currenciesToInstruments(currencies, division)}\n currencies={currencies}\n division={division}\n />\n )}\n {showError && (\n <div className={classnames('lw-flex lw-h-[250px] lw-w-full lw-items-center lw-border lw-border-solid lw-border-border-primary')}>\n <ChartError />\n </div>\n )}\n </div>\n </>\n );\n};\n\nexport { ValidationWrapper };\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,UAAU,QAAQ,2BAA2B;AACtD,SAASC,uBAAuB,EAAEC,eAAe,QAAQ,SAAS;AAElE,SAASC,IAAI,QAAQ,QAAQ;AAE7B,MAAMC,iBAAiB,GAAGC,IAAA,IAII;EAAA,IAJH;IACzBC,UAAU;IACVC,QAAQ;IACRC;EACsB,CAAC,GAAAH,IAAA;EACvB,MAAMI,SAAS,GAAG,CAACP,eAAe,CAACI,UAAU,CAAC,IAAIE,YAAY;EAE9D,OACEV,KAAA,CAAAY,aAAA,CAAAZ,KAAA,CAAAa,QAAA,QACEb,KAAA,CAAAY,aAAA;IACEE,SAAS,EAAC;EAAsE,GAE/E,CAACH,SAAS,IACTX,KAAA,CAAAY,aAAA,CAACP,IAAI;IACHU,WAAW,EAAEZ,uBAAuB,CAACK,UAAU,EAAEC,QAAQ,CAAE;IAC3DD,UAAU,EAAEA,UAAW;IACvBC,QAAQ,EAAEA;EAAS,CACpB,CACF,EACAE,SAAS,IACRX,KAAA,CAAAY,aAAA;IAAKE,SAAS,EAAEb,UAAU,CAAC,mGAAmG;EAAE,GAC9HD,KAAA,CAAAY,aAAA,CAACV,UAAU,MAAE,CACV,CAEJ,CACL,CAAC;AAEP,CAAC;AAED,SAASI,iBAAiB","ignoreList":[]}
@@ -6,15 +6,13 @@ const Cell = _ref => {
6
6
  children,
7
7
  isError,
8
8
  isLoading,
9
- additionalBorderBottom,
10
9
  hovered,
11
10
  mouseEnterHandler,
12
11
  mouseLeaveHandler
13
12
  } = _ref;
14
13
  return React.createElement("div", {
15
- className: classnames('lw-flex lw-h-[inherit] lw-flex-1 lw-items-center lw-justify-center lw-border-r lw-border-solid lw-border-border-primary', {
16
- 'lw-border-b': additionalBorderBottom,
17
- 'lw-font-semibold': hovered
14
+ className: classnames('lw-flex lw-h-11 lw-min-w-[70px] lw-flex-1 lw-items-center lw-justify-center lw-border-b lw-border-r lw-border-solid lw-border-border-primary last:lw-border-r-[0px]', {
15
+ 'lw-bg-border-primary lw-font-semibold lw-shadow-innerBorderBgColor': hovered
18
16
  }),
19
17
  onMouseEnter: mouseEnterHandler,
20
18
  onMouseLeave: mouseLeaveHandler
@@ -1 +1 @@
1
- {"version":3,"file":"Cell.js","names":["React","classnames","CELL_EMPTY_VALUE","CELL_LOADING_VALUE","Cell","_ref","children","isError","isLoading","additionalBorderBottom","hovered","mouseEnterHandler","mouseLeaveHandler","createElement","className","onMouseEnter","onMouseLeave"],"sources":["../../../../src/CurrencyCrossTableWidget/components/Cell.tsx"],"sourcesContent":["import React from 'react';\nimport classnames from 'classnames';\nimport { CellProps } from './types';\nimport { CELL_EMPTY_VALUE, CELL_LOADING_VALUE } from '../constant';\n\nconst Cell = ({\n children,\n isError,\n isLoading,\n additionalBorderBottom,\n hovered,\n mouseEnterHandler,\n mouseLeaveHandler,\n}: CellProps) => (\n <div\n className={classnames('lw-flex lw-h-[inherit] lw-flex-1 lw-items-center lw-justify-center lw-border-r lw-border-solid lw-border-border-primary', {\n 'lw-border-b': additionalBorderBottom,\n 'lw-font-semibold': hovered,\n })}\n onMouseEnter={mouseEnterHandler}\n onMouseLeave={mouseLeaveHandler}\n >\n {isLoading && <div className=\"lw-px-3 lw-py-3.5\">{CELL_LOADING_VALUE}</div>}\n {!isLoading && !isError && children}\n {!isLoading && isError && (\n <span>{CELL_EMPTY_VALUE}</span>\n )}\n </div>\n);\n\nexport { Cell };\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AAEnC,SAASC,gBAAgB,EAAEC,kBAAkB,QAAQ,aAAa;AAElE,MAAMC,IAAI,GAAGC,IAAA;EAAA,IAAC;IACZC,QAAQ;IACRC,OAAO;IACPC,SAAS;IACTC,sBAAsB;IACtBC,OAAO;IACPC,iBAAiB;IACjBC;EACS,CAAC,GAAAP,IAAA;EAAA,OACVL,KAAA,CAAAa,aAAA;IACEC,SAAS,EAAEb,UAAU,CAAC,yHAAyH,EAAE;MAC/I,aAAa,EAAEQ,sBAAsB;MACrC,kBAAkB,EAAEC;IACtB,CAAC,CAAE;IACHK,YAAY,EAAEJ,iBAAkB;IAChCK,YAAY,EAAEJ;EAAkB,GAE/BJ,SAAS,IAAIR,KAAA,CAAAa,aAAA;IAAKC,SAAS,EAAC;EAAmB,GAAEX,kBAAwB,CAAC,EAC1E,CAACK,SAAS,IAAI,CAACD,OAAO,IAAID,QAAQ,EAClC,CAACE,SAAS,IAAID,OAAO,IACpBP,KAAA,CAAAa,aAAA,eAAOX,gBAAuB,CAE7B,CAAC;AAAA,CACP;AAED,SAASE,IAAI","ignoreList":[]}
1
+ {"version":3,"file":"Cell.js","names":["React","classnames","CELL_EMPTY_VALUE","CELL_LOADING_VALUE","Cell","_ref","children","isError","isLoading","hovered","mouseEnterHandler","mouseLeaveHandler","createElement","className","onMouseEnter","onMouseLeave"],"sources":["../../../../src/CurrencyCrossTableWidget/components/Cell.tsx"],"sourcesContent":["import React from 'react';\nimport classnames from 'classnames';\nimport { CellProps } from './types';\nimport { CELL_EMPTY_VALUE, CELL_LOADING_VALUE } from '../constant';\n\nconst Cell = ({\n children,\n isError,\n isLoading,\n hovered,\n mouseEnterHandler,\n mouseLeaveHandler,\n}: CellProps) => (\n <div\n className={classnames('lw-flex lw-h-11 lw-min-w-[70px] lw-flex-1 lw-items-center lw-justify-center lw-border-b lw-border-r lw-border-solid lw-border-border-primary last:lw-border-r-[0px]', {\n 'lw-bg-border-primary lw-font-semibold lw-shadow-innerBorderBgColor': hovered,\n })}\n onMouseEnter={mouseEnterHandler}\n onMouseLeave={mouseLeaveHandler}\n >\n {isLoading && <div className=\"lw-px-3 lw-py-3.5\">{CELL_LOADING_VALUE}</div>}\n {!isLoading && !isError && children}\n {!isLoading && isError && (\n <span>{CELL_EMPTY_VALUE}</span>\n )}\n </div>\n);\n\nexport { Cell };\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AAEnC,SAASC,gBAAgB,EAAEC,kBAAkB,QAAQ,aAAa;AAElE,MAAMC,IAAI,GAAGC,IAAA;EAAA,IAAC;IACZC,QAAQ;IACRC,OAAO;IACPC,SAAS;IACTC,OAAO;IACPC,iBAAiB;IACjBC;EACS,CAAC,GAAAN,IAAA;EAAA,OACVL,KAAA,CAAAY,aAAA;IACEC,SAAS,EAAEZ,UAAU,CAAC,qKAAqK,EAAE;MAC3L,oEAAoE,EAAEQ;IACxE,CAAC,CAAE;IACHK,YAAY,EAAEJ,iBAAkB;IAChCK,YAAY,EAAEJ;EAAkB,GAE/BH,SAAS,IAAIR,KAAA,CAAAY,aAAA;IAAKC,SAAS,EAAC;EAAmB,GAAEV,kBAAwB,CAAC,EAC1E,CAACK,SAAS,IAAI,CAACD,OAAO,IAAID,QAAQ,EAClC,CAACE,SAAS,IAAID,OAAO,IACpBP,KAAA,CAAAY,aAAA,eAAOV,gBAAuB,CAE7B,CAAC;AAAA,CACP;AAED,SAASE,IAAI","ignoreList":[]}
@@ -0,0 +1,42 @@
1
+ import React from 'react';
2
+ import { useSuspenseQuery } from '@apollo/client';
3
+ import { validateInstruments } from '../../gql/validateInstruments';
4
+ import { CellWithData } from './CellWithData';
5
+ import { divisionMapper } from '../utils';
6
+ const CellValidationWrapper = _ref => {
7
+ let {
8
+ currency,
9
+ pair,
10
+ instrument,
11
+ target,
12
+ setSelectedCurrency,
13
+ setSelectedPair,
14
+ division
15
+ } = _ref;
16
+ const {
17
+ error
18
+ } = useSuspenseQuery(validateInstruments, {
19
+ variables: {
20
+ instruments: [instrument],
21
+ division
22
+ },
23
+ fetchPolicy: 'network-only',
24
+ errorPolicy: 'all'
25
+ });
26
+ const instrumentForCalculations = error ? `${pair}${divisionMapper(division)}${currency}` : '';
27
+ return React.createElement(CellWithData, {
28
+ currency: currency,
29
+ pair: pair,
30
+ record: {
31
+ instrument,
32
+ displayName: `${currency}${divisionMapper(division)}${pair}`
33
+ },
34
+ instrumentForCalculations: instrumentForCalculations,
35
+ target: target,
36
+ setSelectedCurrency: setSelectedCurrency,
37
+ setSelectedPair: setSelectedPair,
38
+ division: division
39
+ });
40
+ };
41
+ export { CellValidationWrapper };
42
+ //# sourceMappingURL=CellValidationWrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CellValidationWrapper.js","names":["React","useSuspenseQuery","validateInstruments","CellWithData","divisionMapper","CellValidationWrapper","_ref","currency","pair","instrument","target","setSelectedCurrency","setSelectedPair","division","error","variables","instruments","fetchPolicy","errorPolicy","instrumentForCalculations","createElement","record","displayName"],"sources":["../../../../src/CurrencyCrossTableWidget/components/CellValidationWrapper.tsx"],"sourcesContent":["import React from 'react';\nimport { useSuspenseQuery } from '@apollo/client';\nimport { CellValidationWrapperProps } from './types';\nimport { ValidateInstrumentsQuery, ValidateInstrumentsQueryVariables } from '../../gql/types/graphql';\nimport { validateInstruments } from '../../gql/validateInstruments';\nimport { CellWithData } from './CellWithData';\nimport { divisionMapper } from '../utils';\n\nconst CellValidationWrapper = ({\n currency,\n pair,\n instrument,\n target,\n setSelectedCurrency,\n setSelectedPair,\n division,\n}: CellValidationWrapperProps) => {\n const { error } = useSuspenseQuery<\n ValidateInstrumentsQuery,\n ValidateInstrumentsQueryVariables\n >(validateInstruments, {\n variables: {\n instruments: [instrument],\n division,\n },\n fetchPolicy: 'network-only',\n errorPolicy: 'all',\n });\n\n const instrumentForCalculations = error ? `${pair}${divisionMapper(division)}${currency}` : '';\n\n return (\n <CellWithData\n currency={currency}\n pair={pair}\n record={{\n instrument,\n displayName: `${currency}${divisionMapper(division)}${pair}`,\n }}\n instrumentForCalculations={instrumentForCalculations}\n target={target}\n setSelectedCurrency={setSelectedCurrency}\n setSelectedPair={setSelectedPair}\n division={division}\n />\n );\n};\n\nexport { CellValidationWrapper };\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,gBAAgB,QAAQ,gBAAgB;AAGjD,SAASC,mBAAmB,QAAQ,+BAA+B;AACnE,SAASC,YAAY,QAAQ,gBAAgB;AAC7C,SAASC,cAAc,QAAQ,UAAU;AAEzC,MAAMC,qBAAqB,GAAGC,IAAA,IAQI;EAAA,IARH;IAC7BC,QAAQ;IACRC,IAAI;IACJC,UAAU;IACVC,MAAM;IACNC,mBAAmB;IACnBC,eAAe;IACfC;EAC0B,CAAC,GAAAP,IAAA;EAC3B,MAAM;IAAEQ;EAAM,CAAC,GAAGb,gBAAgB,CAGhCC,mBAAmB,EAAE;IACrBa,SAAS,EAAE;MACTC,WAAW,EAAE,CAACP,UAAU,CAAC;MACzBI;IACF,CAAC;IACDI,WAAW,EAAE,cAAc;IAC3BC,WAAW,EAAE;EACf,CAAC,CAAC;EAEF,MAAMC,yBAAyB,GAAGL,KAAK,GAAG,GAAGN,IAAI,GAAGJ,cAAc,CAACS,QAAQ,CAAC,GAAGN,QAAQ,EAAE,GAAG,EAAE;EAE9F,OACEP,KAAA,CAAAoB,aAAA,CAACjB,YAAY;IACXI,QAAQ,EAAEA,QAAS;IACnBC,IAAI,EAAEA,IAAK;IACXa,MAAM,EAAE;MACNZ,UAAU;MACVa,WAAW,EAAE,GAAGf,QAAQ,GAAGH,cAAc,CAACS,QAAQ,CAAC,GAAGL,IAAI;IAC5D,CAAE;IACFW,yBAAyB,EAAEA,yBAA0B;IACrDT,MAAM,EAAEA,MAAO;IACfC,mBAAmB,EAAEA,mBAAoB;IACzCC,eAAe,EAAEA,eAAgB;IACjCC,QAAQ,EAAEA;EAAS,CACpB,CAAC;AAEN,CAAC;AAED,SAASR,qBAAqB","ignoreList":[]}
@@ -1,26 +1,33 @@
1
1
  import React, { useState } from 'react';
2
- import { Price } from '@oanda/labs-widget-common';
3
- import { useRecords } from '../utils';
2
+ import { Price, useLiveRatesMessage } from '@oanda/labs-widget-common';
4
3
  import { Cell } from './Cell';
4
+ import { getBuyPrice, getPriceMovement } from '../utils';
5
5
  const CellWithData = _ref => {
6
6
  let {
7
- loading,
7
+ currency,
8
+ pair,
8
9
  record,
10
+ instrumentForCalculations,
9
11
  target,
10
- additionalBorderBottom,
11
12
  setSelectedCurrency,
12
13
  setSelectedPair
13
14
  } = _ref;
14
15
  const [hovered, setHovered] = useState(false);
16
+ const instrumentForUpdates = instrumentForCalculations || record.instrument;
15
17
  const {
16
- updatedRecord,
17
- error
18
- } = useRecords(record, record.instrument ? target : null);
19
- const checkLoading = id => loading || !error && updatedRecord?.[id] === undefined;
18
+ update,
19
+ error: liveRatesError
20
+ } = useLiveRatesMessage(instrumentForUpdates, target);
21
+ const updatedRecord = {
22
+ displayName: record.displayName,
23
+ instrument: record.instrument,
24
+ buy: update?.ask,
25
+ buyPriceMovement: update?.askPriceMovement,
26
+ displayPrecision: update?.displayPrecision
27
+ };
28
+ const checkLoading = id => !liveRatesError && updatedRecord?.[id] === undefined;
20
29
  const handleMouseEnter = () => {
21
30
  setHovered(true);
22
- const currency = record.instrument.substring(0, 3);
23
- const pair = record.instrument.substring(record.instrument.length - 3);
24
31
  setSelectedCurrency(currency);
25
32
  setSelectedPair(pair);
26
33
  };
@@ -31,15 +38,14 @@ const CellWithData = _ref => {
31
38
  };
32
39
  return React.createElement(Cell, {
33
40
  isLoading: checkLoading('buy'),
34
- isError: !!error,
35
- additionalBorderBottom: additionalBorderBottom,
41
+ isError: !!liveRatesError,
36
42
  hovered: hovered,
37
43
  mouseEnterHandler: handleMouseEnter,
38
44
  mouseLeaveHandler: handleMouseLeave
39
45
  }, React.createElement(Price, {
40
- priceMovement: updatedRecord.buyPriceMovement,
46
+ priceMovement: getPriceMovement(updatedRecord.buyPriceMovement, !!instrumentForCalculations),
41
47
  movementIndicator: "background"
42
- }, React.createElement("span", null, updatedRecord.buy?.toFixed(updatedRecord.displayPrecision))));
48
+ }, React.createElement("span", null, getBuyPrice(updatedRecord.buy, !!instrumentForCalculations).toFixed(updatedRecord.displayPrecision))));
43
49
  };
44
50
  export { CellWithData };
45
51
  //# sourceMappingURL=CellWithData.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CellWithData.js","names":["React","useState","Price","useRecords","Cell","CellWithData","_ref","loading","record","target","additionalBorderBottom","setSelectedCurrency","setSelectedPair","hovered","setHovered","updatedRecord","error","instrument","checkLoading","id","undefined","handleMouseEnter","currency","substring","pair","length","handleMouseLeave","createElement","isLoading","isError","mouseEnterHandler","mouseLeaveHandler","priceMovement","buyPriceMovement","movementIndicator","buy","toFixed","displayPrecision"],"sources":["../../../../src/CurrencyCrossTableWidget/components/CellWithData.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { Price } from '@oanda/labs-widget-common';\nimport { useRecords } from '../utils';\nimport { CellWithDataProps } from './types';\nimport { Cell } from './Cell';\n\nconst CellWithData = ({\n loading,\n record,\n target,\n additionalBorderBottom,\n setSelectedCurrency,\n setSelectedPair,\n}: CellWithDataProps) => {\n const [hovered, setHovered] = useState(false);\n const { updatedRecord, error } = useRecords(record, record.instrument ? target : null);\n\n const checkLoading = (id: string) => loading || (!error && updatedRecord?.[id] === undefined);\n\n const handleMouseEnter = () => {\n setHovered(true);\n\n const currency = record.instrument.substring(0, 3);\n const pair = record.instrument.substring(record.instrument.length - 3);\n\n setSelectedCurrency(currency);\n setSelectedPair(pair);\n };\n\n const handleMouseLeave = () => {\n setHovered(false);\n\n setSelectedCurrency('');\n setSelectedPair('');\n };\n\n return (\n <Cell\n isLoading={checkLoading('buy')}\n isError={!!error}\n additionalBorderBottom={additionalBorderBottom}\n hovered={hovered}\n mouseEnterHandler={handleMouseEnter}\n mouseLeaveHandler={handleMouseLeave}\n >\n <Price priceMovement={updatedRecord.buyPriceMovement} movementIndicator=\"background\">\n <span>{updatedRecord.buy?.toFixed(updatedRecord.displayPrecision)}</span>\n </Price>\n </Cell>\n );\n};\n\nexport { CellWithData };\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SAASC,KAAK,QAAQ,2BAA2B;AACjD,SAASC,UAAU,QAAQ,UAAU;AAErC,SAASC,IAAI,QAAQ,QAAQ;AAE7B,MAAMC,YAAY,GAAGC,IAAA,IAOI;EAAA,IAPH;IACpBC,OAAO;IACPC,MAAM;IACNC,MAAM;IACNC,sBAAsB;IACtBC,mBAAmB;IACnBC;EACiB,CAAC,GAAAN,IAAA;EAClB,MAAM,CAACO,OAAO,EAAEC,UAAU,CAAC,GAAGb,QAAQ,CAAC,KAAK,CAAC;EAC7C,MAAM;IAAEc,aAAa;IAAEC;EAAM,CAAC,GAAGb,UAAU,CAACK,MAAM,EAAEA,MAAM,CAACS,UAAU,GAAGR,MAAM,GAAG,IAAI,CAAC;EAEtF,MAAMS,YAAY,GAAIC,EAAU,IAAKZ,OAAO,IAAK,CAACS,KAAK,IAAID,aAAa,GAAGI,EAAE,CAAC,KAAKC,SAAU;EAE7F,MAAMC,gBAAgB,GAAGA,CAAA,KAAM;IAC7BP,UAAU,CAAC,IAAI,CAAC;IAEhB,MAAMQ,QAAQ,GAAGd,MAAM,CAACS,UAAU,CAACM,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IAClD,MAAMC,IAAI,GAAGhB,MAAM,CAACS,UAAU,CAACM,SAAS,CAACf,MAAM,CAACS,UAAU,CAACQ,MAAM,GAAG,CAAC,CAAC;IAEtEd,mBAAmB,CAACW,QAAQ,CAAC;IAC7BV,eAAe,CAACY,IAAI,CAAC;EACvB,CAAC;EAED,MAAME,gBAAgB,GAAGA,CAAA,KAAM;IAC7BZ,UAAU,CAAC,KAAK,CAAC;IAEjBH,mBAAmB,CAAC,EAAE,CAAC;IACvBC,eAAe,CAAC,EAAE,CAAC;EACrB,CAAC;EAED,OACEZ,KAAA,CAAA2B,aAAA,CAACvB,IAAI;IACHwB,SAAS,EAAEV,YAAY,CAAC,KAAK,CAAE;IAC/BW,OAAO,EAAE,CAAC,CAACb,KAAM;IACjBN,sBAAsB,EAAEA,sBAAuB;IAC/CG,OAAO,EAAEA,OAAQ;IACjBiB,iBAAiB,EAAET,gBAAiB;IACpCU,iBAAiB,EAAEL;EAAiB,GAEpC1B,KAAA,CAAA2B,aAAA,CAACzB,KAAK;IAAC8B,aAAa,EAAEjB,aAAa,CAACkB,gBAAiB;IAACC,iBAAiB,EAAC;EAAY,GAClFlC,KAAA,CAAA2B,aAAA,eAAOZ,aAAa,CAACoB,GAAG,EAAEC,OAAO,CAACrB,aAAa,CAACsB,gBAAgB,CAAQ,CACnE,CACH,CAAC;AAEX,CAAC;AAED,SAAShC,YAAY","ignoreList":[]}
1
+ {"version":3,"file":"CellWithData.js","names":["React","useState","Price","useLiveRatesMessage","Cell","getBuyPrice","getPriceMovement","CellWithData","_ref","currency","pair","record","instrumentForCalculations","target","setSelectedCurrency","setSelectedPair","hovered","setHovered","instrumentForUpdates","instrument","update","error","liveRatesError","updatedRecord","displayName","buy","ask","buyPriceMovement","askPriceMovement","displayPrecision","checkLoading","id","undefined","handleMouseEnter","handleMouseLeave","createElement","isLoading","isError","mouseEnterHandler","mouseLeaveHandler","priceMovement","movementIndicator","toFixed"],"sources":["../../../../src/CurrencyCrossTableWidget/components/CellWithData.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { Price, useLiveRatesMessage } from '@oanda/labs-widget-common';\nimport { Cell } from './Cell';\nimport { CellWithDataProps } from './types';\nimport { getBuyPrice, getPriceMovement } from '../utils';\n\nconst CellWithData = ({\n currency,\n pair,\n record,\n instrumentForCalculations,\n target,\n setSelectedCurrency,\n setSelectedPair,\n}: CellWithDataProps) => {\n const [hovered, setHovered] = useState(false);\n\n const instrumentForUpdates = instrumentForCalculations || record.instrument;\n\n const { update, error: liveRatesError } = useLiveRatesMessage(\n instrumentForUpdates,\n target,\n );\n\n const updatedRecord: Record<string, any> = {\n displayName: record.displayName,\n instrument: record.instrument,\n buy: update?.ask,\n buyPriceMovement: update?.askPriceMovement,\n displayPrecision: update?.displayPrecision,\n };\n\n const checkLoading = (id: string) => (!liveRatesError && updatedRecord?.[id] === undefined);\n\n const handleMouseEnter = () => {\n setHovered(true);\n setSelectedCurrency(currency);\n setSelectedPair(pair);\n };\n\n const handleMouseLeave = () => {\n setHovered(false);\n setSelectedCurrency('');\n setSelectedPair('');\n };\n\n return (\n <Cell\n isLoading={checkLoading('buy')}\n isError={!!liveRatesError}\n hovered={hovered}\n mouseEnterHandler={handleMouseEnter}\n mouseLeaveHandler={handleMouseLeave}\n >\n <Price priceMovement={getPriceMovement(updatedRecord.buyPriceMovement, !!instrumentForCalculations)} movementIndicator=\"background\">\n <span>\n {getBuyPrice(\n updatedRecord.buy,\n !!instrumentForCalculations,\n ).toFixed(updatedRecord.displayPrecision)}\n </span>\n </Price>\n </Cell>\n );\n};\n\nexport { CellWithData };\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SAASC,KAAK,EAAEC,mBAAmB,QAAQ,2BAA2B;AACtE,SAASC,IAAI,QAAQ,QAAQ;AAE7B,SAASC,WAAW,EAAEC,gBAAgB,QAAQ,UAAU;AAExD,MAAMC,YAAY,GAAGC,IAAA,IAQI;EAAA,IARH;IACpBC,QAAQ;IACRC,IAAI;IACJC,MAAM;IACNC,yBAAyB;IACzBC,MAAM;IACNC,mBAAmB;IACnBC;EACiB,CAAC,GAAAP,IAAA;EAClB,MAAM,CAACQ,OAAO,EAAEC,UAAU,CAAC,GAAGhB,QAAQ,CAAC,KAAK,CAAC;EAE7C,MAAMiB,oBAAoB,GAAGN,yBAAyB,IAAID,MAAM,CAACQ,UAAU;EAE3E,MAAM;IAAEC,MAAM;IAAEC,KAAK,EAAEC;EAAe,CAAC,GAAGnB,mBAAmB,CAC3De,oBAAoB,EACpBL,MACF,CAAC;EAED,MAAMU,aAAkC,GAAG;IACzCC,WAAW,EAAEb,MAAM,CAACa,WAAW;IAC/BL,UAAU,EAAER,MAAM,CAACQ,UAAU;IAC7BM,GAAG,EAAEL,MAAM,EAAEM,GAAG;IAChBC,gBAAgB,EAAEP,MAAM,EAAEQ,gBAAgB;IAC1CC,gBAAgB,EAAET,MAAM,EAAES;EAC5B,CAAC;EAED,MAAMC,YAAY,GAAIC,EAAU,IAAM,CAACT,cAAc,IAAIC,aAAa,GAAGQ,EAAE,CAAC,KAAKC,SAAU;EAE3F,MAAMC,gBAAgB,GAAGA,CAAA,KAAM;IAC7BhB,UAAU,CAAC,IAAI,CAAC;IAChBH,mBAAmB,CAACL,QAAQ,CAAC;IAC7BM,eAAe,CAACL,IAAI,CAAC;EACvB,CAAC;EAED,MAAMwB,gBAAgB,GAAGA,CAAA,KAAM;IAC7BjB,UAAU,CAAC,KAAK,CAAC;IACjBH,mBAAmB,CAAC,EAAE,CAAC;IACvBC,eAAe,CAAC,EAAE,CAAC;EACrB,CAAC;EAED,OACEf,KAAA,CAAAmC,aAAA,CAAC/B,IAAI;IACHgC,SAAS,EAAEN,YAAY,CAAC,KAAK,CAAE;IAC/BO,OAAO,EAAE,CAAC,CAACf,cAAe;IAC1BN,OAAO,EAAEA,OAAQ;IACjBsB,iBAAiB,EAAEL,gBAAiB;IACpCM,iBAAiB,EAAEL;EAAiB,GAEpClC,KAAA,CAAAmC,aAAA,CAACjC,KAAK;IAACsC,aAAa,EAAElC,gBAAgB,CAACiB,aAAa,CAACI,gBAAgB,EAAE,CAAC,CAACf,yBAAyB,CAAE;IAAC6B,iBAAiB,EAAC;EAAY,GACjIzC,KAAA,CAAAmC,aAAA,eACG9B,WAAW,CACVkB,aAAa,CAACE,GAAG,EACjB,CAAC,CAACb,yBACJ,CAAC,CAAC8B,OAAO,CAACnB,aAAa,CAACM,gBAAgB,CACpC,CACD,CACH,CAAC;AAEX,CAAC;AAED,SAAStB,YAAY","ignoreList":[]}
@@ -4,14 +4,16 @@ const TextCell = _ref => {
4
4
  let {
5
5
  label,
6
6
  emptyIndicator,
7
- additionalBorderBottom,
8
- hovered
7
+ hovered,
8
+ sticky
9
9
  } = _ref;
10
10
  return React.createElement("span", {
11
- className: classnames('lw-flex-1 lw-border-r lw-border-solid lw-border-border-primary lw-py-3.5 lw-text-center', {
12
- 'lw-border-b': additionalBorderBottom,
11
+ className: classnames('lw-h-11 lw-min-w-[70px] lw-flex-1 lw-border-b lw-border-r lw-border-solid lw-border-border-primary lw-py-3.5 lw-text-center last:lw-border-r-[0px]', {
13
12
  'lw-bg-border-primary': emptyIndicator,
14
- 'lw-font-semibold': hovered
13
+ 'lw-shadow-innerBorderBgColor': emptyIndicator && hovered,
14
+ 'lw-bg-border-primary lw-font-semibold': hovered,
15
+ 'lw-sticky lw-left-0 lw-z-10': sticky,
16
+ 'lw-bg-bg-primary': sticky && !hovered
15
17
  })
16
18
  }, label);
17
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"TextCell.js","names":["React","classnames","TextCell","_ref","label","emptyIndicator","additionalBorderBottom","hovered","createElement","className"],"sources":["../../../../src/CurrencyCrossTableWidget/components/TextCell.tsx"],"sourcesContent":["import React from 'react';\nimport classnames from 'classnames';\nimport { TextCellProps } from './types';\n\nconst TextCell = ({\n label,\n emptyIndicator,\n additionalBorderBottom,\n hovered,\n}: TextCellProps) => (\n <span className={classnames('lw-flex-1 lw-border-r lw-border-solid lw-border-border-primary lw-py-3.5 lw-text-center', {\n 'lw-border-b': additionalBorderBottom,\n 'lw-bg-border-primary': emptyIndicator,\n 'lw-font-semibold': hovered,\n })}\n >\n {label}\n </span>\n);\n\nexport { TextCell };\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AAGnC,MAAMC,QAAQ,GAAGC,IAAA;EAAA,IAAC;IAChBC,KAAK;IACLC,cAAc;IACdC,sBAAsB;IACtBC;EACa,CAAC,GAAAJ,IAAA;EAAA,OACdH,KAAA,CAAAQ,aAAA;IAAMC,SAAS,EAAER,UAAU,CAAC,yFAAyF,EAAE;MACrH,aAAa,EAAEK,sBAAsB;MACrC,sBAAsB,EAAED,cAAc;MACtC,kBAAkB,EAAEE;IACtB,CAAC;EAAE,GAEAH,KACG,CAAC;AAAA,CACR;AAED,SAASF,QAAQ","ignoreList":[]}
1
+ {"version":3,"file":"TextCell.js","names":["React","classnames","TextCell","_ref","label","emptyIndicator","hovered","sticky","createElement","className"],"sources":["../../../../src/CurrencyCrossTableWidget/components/TextCell.tsx"],"sourcesContent":["import React from 'react';\nimport classnames from 'classnames';\nimport { TextCellProps } from './types';\n\nconst TextCell = ({\n label,\n emptyIndicator,\n hovered,\n sticky,\n}: TextCellProps) => (\n <span className={classnames('lw-h-11 lw-min-w-[70px] lw-flex-1 lw-border-b lw-border-r lw-border-solid lw-border-border-primary lw-py-3.5 lw-text-center last:lw-border-r-[0px]', {\n 'lw-bg-border-primary': emptyIndicator,\n 'lw-shadow-innerBorderBgColor': emptyIndicator && hovered,\n 'lw-bg-border-primary lw-font-semibold': hovered,\n 'lw-sticky lw-left-0 lw-z-10': sticky,\n 'lw-bg-bg-primary': sticky && !hovered,\n })}\n >\n {label}\n </span>\n);\n\nexport { TextCell };\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,UAAU,MAAM,YAAY;AAGnC,MAAMC,QAAQ,GAAGC,IAAA;EAAA,IAAC;IAChBC,KAAK;IACLC,cAAc;IACdC,OAAO;IACPC;EACa,CAAC,GAAAJ,IAAA;EAAA,OACdH,KAAA,CAAAQ,aAAA;IAAMC,SAAS,EAAER,UAAU,CAAC,oJAAoJ,EAAE;MAChL,sBAAsB,EAAEI,cAAc;MACtC,8BAA8B,EAAEA,cAAc,IAAIC,OAAO;MACzD,uCAAuC,EAAEA,OAAO;MAChD,6BAA6B,EAAEC,MAAM;MACrC,kBAAkB,EAAEA,MAAM,IAAI,CAACD;IACjC,CAAC;EAAE,GAEAF,KACG,CAAC;AAAA,CACR;AAED,SAASF,QAAQ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../src/CurrencyCrossTableWidget/components/types.ts"],"sourcesContent":["import { DataRecord, LoaderSize } from '@oanda/labs-widget-common';\n\nexport interface CellWithDataProps {\n loading: boolean;\n record: DataRecord;\n target: EventTarget | null;\n additionalBorderBottom? : boolean;\n setSelectedCurrency: React.Dispatch<React.SetStateAction<string>>;\n setSelectedPair: React.Dispatch<React.SetStateAction<string>>;\n}\n\nexport interface CellProps {\n children: React.ReactNode;\n isLoading?: boolean;\n isError?: boolean;\n loaderSize?: LoaderSize;\n additionalBorderBottom? : boolean;\n hovered: boolean;\n mouseEnterHandler: () => void;\n mouseLeaveHandler: () => void;\n}\n\nexport interface TextCellProps {\n label?: string;\n emptyIndicator?: boolean;\n additionalBorderBottom? : boolean;\n hovered?: boolean;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../src/CurrencyCrossTableWidget/components/types.ts"],"sourcesContent":["import { DataRecord, LoaderSize } from '@oanda/labs-widget-common';\nimport { Division } from '../../gql/types/graphql';\n\nexport interface CellValidationWrapperProps {\n currency: string;\n pair: string;\n instrument: string;\n target: EventTarget | null;\n division: Division;\n setSelectedCurrency: React.Dispatch<React.SetStateAction<string>>;\n setSelectedPair: React.Dispatch<React.SetStateAction<string>>;\n}\nexport interface CellWithDataProps {\n currency: string;\n pair: string;\n instrumentForCalculations: string;\n record: DataRecord;\n target: EventTarget | null;\n division: Division;\n setSelectedCurrency: React.Dispatch<React.SetStateAction<string>>;\n setSelectedPair: React.Dispatch<React.SetStateAction<string>>;\n}\n\nexport interface CellProps {\n children: React.ReactNode;\n isLoading?: boolean;\n isError?: boolean;\n loaderSize?: LoaderSize;\n hovered: boolean;\n mouseEnterHandler: () => void;\n mouseLeaveHandler: () => void;\n}\n\nexport interface TextCellProps {\n label?: string;\n emptyIndicator?: boolean;\n hovered?: boolean;\n sticky?: boolean;\n}\n"],"mappings":"","ignoreList":[]}
@@ -2,8 +2,9 @@ import React from 'react';
2
2
  import { createRoot } from 'react-dom/client';
3
3
  import { validateLocale, validateToolParams } from '@oanda/labs-widget-common';
4
4
  import { CurrencyCrossTableWidget } from './CurrencyCrossTableWidget';
5
- import { Division } from './types';
5
+ import { Division } from '../gql/types/graphql';
6
6
  const {
7
+ graphqlUrl,
7
8
  liveRatesUrl
8
9
  } = window.widgetsConfig || {};
9
10
  const currencyCrossTableElements = document.querySelectorAll('div[data-currency-cross-table-params]');
@@ -20,6 +21,7 @@ currencyCrossTableElements.forEach(element => {
20
21
  division,
21
22
  locale,
22
23
  currencies,
24
+ graphqlUrl,
23
25
  liveRatesUrl
24
26
  }, [{
25
27
  name: 'locale',
@@ -30,10 +32,13 @@ currencyCrossTableElements.forEach(element => {
30
32
  }, {
31
33
  name: 'currencies',
32
34
  valueCheck: value => value.length > 0 && value.length <= 8
35
+ }, {
36
+ name: 'graphqlUrl'
33
37
  }, {
34
38
  name: 'liveRatesUrl'
35
39
  }]);
36
40
  root.render(React.createElement(CurrencyCrossTableWidget, {
41
+ graphqlUrl: graphqlUrl,
37
42
  liveRatesUrl: liveRatesUrl,
38
43
  division: division,
39
44
  currencies: currencies,
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","names":["React","createRoot","validateLocale","validateToolParams","CurrencyCrossTableWidget","Division","liveRatesUrl","window","widgetsConfig","currencyCrossTableElements","document","querySelectorAll","forEach","element","root","params","getAttribute","mode","currencies","division","locale","JSON","parse","isParamError","name","valueCheck","value","Object","values","includes","length","render","createElement","theme"],"sources":["../../../src/CurrencyCrossTableWidget/render.tsx"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { Theme, validateLocale, validateToolParams } from '@oanda/labs-widget-common';\nimport { CurrencyCrossTableWidget } from './CurrencyCrossTableWidget';\nimport { Division } from './types';\n\nconst {\n liveRatesUrl,\n} = window.widgetsConfig || {};\n\nconst currencyCrossTableElements = document.querySelectorAll('div[data-currency-cross-table-params]');\n\ncurrencyCrossTableElements.forEach((element) => {\n const root = createRoot(element);\n const params = element.getAttribute('data-currency-cross-table-params');\n const mode = element.getAttribute('data-mode');\n const {\n currencies, division, locale,\n } = JSON.parse(params as string);\n\n const isParamError = validateToolParams({\n division, locale, currencies, liveRatesUrl,\n }, [{\n name: 'locale',\n valueCheck: (value) => validateLocale(value),\n }, {\n name: 'division',\n valueCheck: (value) => Object.values(Division).includes(value),\n }, {\n name: 'currencies',\n valueCheck: (value) => (value as string[]).length > 0 && (value as string[]).length <= 8,\n }, {\n name: 'liveRatesUrl',\n }]);\n\n root.render(\n <CurrencyCrossTableWidget\n liveRatesUrl={liveRatesUrl}\n division={division}\n currencies={currencies}\n locale={locale}\n theme={mode as Theme}\n isParamError={isParamError}\n />,\n );\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAAgBC,cAAc,EAAEC,kBAAkB,QAAQ,2BAA2B;AACrF,SAASC,wBAAwB,QAAQ,4BAA4B;AACrE,SAASC,QAAQ,QAAQ,SAAS;AAElC,MAAM;EACJC;AACF,CAAC,GAAGC,MAAM,CAACC,aAAa,IAAI,CAAC,CAAC;AAE9B,MAAMC,0BAA0B,GAAGC,QAAQ,CAACC,gBAAgB,CAAC,uCAAuC,CAAC;AAErGF,0BAA0B,CAACG,OAAO,CAAEC,OAAO,IAAK;EAC9C,MAAMC,IAAI,GAAGb,UAAU,CAACY,OAAO,CAAC;EAChC,MAAME,MAAM,GAAGF,OAAO,CAACG,YAAY,CAAC,kCAAkC,CAAC;EACvE,MAAMC,IAAI,GAAGJ,OAAO,CAACG,YAAY,CAAC,WAAW,CAAC;EAC9C,MAAM;IACJE,UAAU;IAAEC,QAAQ;IAAEC;EACxB,CAAC,GAAGC,IAAI,CAACC,KAAK,CAACP,MAAgB,CAAC;EAEhC,MAAMQ,YAAY,GAAGpB,kBAAkB,CAAC;IACtCgB,QAAQ;IAAEC,MAAM;IAAEF,UAAU;IAAEZ;EAChC,CAAC,EAAE,CAAC;IACFkB,IAAI,EAAE,QAAQ;IACdC,UAAU,EAAGC,KAAK,IAAKxB,cAAc,CAACwB,KAAK;EAC7C,CAAC,EAAE;IACDF,IAAI,EAAE,UAAU;IAChBC,UAAU,EAAGC,KAAK,IAAKC,MAAM,CAACC,MAAM,CAACvB,QAAQ,CAAC,CAACwB,QAAQ,CAACH,KAAK;EAC/D,CAAC,EAAE;IACDF,IAAI,EAAE,YAAY;IAClBC,UAAU,EAAGC,KAAK,IAAMA,KAAK,CAAcI,MAAM,GAAG,CAAC,IAAKJ,KAAK,CAAcI,MAAM,IAAI;EACzF,CAAC,EAAE;IACDN,IAAI,EAAE;EACR,CAAC,CAAC,CAAC;EAEHV,IAAI,CAACiB,MAAM,CACT/B,KAAA,CAAAgC,aAAA,CAAC5B,wBAAwB;IACvBE,YAAY,EAAEA,YAAa;IAC3Ba,QAAQ,EAAEA,QAAS;IACnBD,UAAU,EAAEA,UAAW;IACvBE,MAAM,EAAEA,MAAO;IACfa,KAAK,EAAEhB,IAAc;IACrBM,YAAY,EAAEA;EAAa,CAC5B,CACH,CAAC;AACH,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"render.js","names":["React","createRoot","validateLocale","validateToolParams","CurrencyCrossTableWidget","Division","graphqlUrl","liveRatesUrl","window","widgetsConfig","currencyCrossTableElements","document","querySelectorAll","forEach","element","root","params","getAttribute","mode","currencies","division","locale","JSON","parse","isParamError","name","valueCheck","value","Object","values","includes","length","render","createElement","theme"],"sources":["../../../src/CurrencyCrossTableWidget/render.tsx"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { Theme, validateLocale, validateToolParams } from '@oanda/labs-widget-common';\nimport { CurrencyCrossTableWidget } from './CurrencyCrossTableWidget';\nimport { Division } from '../gql/types/graphql';\n\nconst {\n graphqlUrl,\n liveRatesUrl,\n} = window.widgetsConfig || {};\n\nconst currencyCrossTableElements = document.querySelectorAll('div[data-currency-cross-table-params]');\n\ncurrencyCrossTableElements.forEach((element) => {\n const root = createRoot(element);\n const params = element.getAttribute('data-currency-cross-table-params');\n const mode = element.getAttribute('data-mode');\n const {\n currencies, division, locale,\n } = JSON.parse(params as string);\n\n const isParamError = validateToolParams({\n division, locale, currencies, graphqlUrl, liveRatesUrl,\n }, [{\n name: 'locale',\n valueCheck: (value) => validateLocale(value),\n }, {\n name: 'division',\n valueCheck: (value) => Object.values(Division).includes(value),\n }, {\n name: 'currencies',\n valueCheck: (value) => (value as string[]).length > 0 && (value as string[]).length <= 8,\n }, {\n name: 'graphqlUrl',\n }, {\n name: 'liveRatesUrl',\n }]);\n\n root.render(\n <CurrencyCrossTableWidget\n graphqlUrl={graphqlUrl}\n liveRatesUrl={liveRatesUrl}\n division={division}\n currencies={currencies}\n locale={locale}\n theme={mode as Theme}\n isParamError={isParamError}\n />,\n );\n});\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAAgBC,cAAc,EAAEC,kBAAkB,QAAQ,2BAA2B;AACrF,SAASC,wBAAwB,QAAQ,4BAA4B;AACrE,SAASC,QAAQ,QAAQ,sBAAsB;AAE/C,MAAM;EACJC,UAAU;EACVC;AACF,CAAC,GAAGC,MAAM,CAACC,aAAa,IAAI,CAAC,CAAC;AAE9B,MAAMC,0BAA0B,GAAGC,QAAQ,CAACC,gBAAgB,CAAC,uCAAuC,CAAC;AAErGF,0BAA0B,CAACG,OAAO,CAAEC,OAAO,IAAK;EAC9C,MAAMC,IAAI,GAAGd,UAAU,CAACa,OAAO,CAAC;EAChC,MAAME,MAAM,GAAGF,OAAO,CAACG,YAAY,CAAC,kCAAkC,CAAC;EACvE,MAAMC,IAAI,GAAGJ,OAAO,CAACG,YAAY,CAAC,WAAW,CAAC;EAC9C,MAAM;IACJE,UAAU;IAAEC,QAAQ;IAAEC;EACxB,CAAC,GAAGC,IAAI,CAACC,KAAK,CAACP,MAAgB,CAAC;EAEhC,MAAMQ,YAAY,GAAGrB,kBAAkB,CAAC;IACtCiB,QAAQ;IAAEC,MAAM;IAAEF,UAAU;IAAEb,UAAU;IAAEC;EAC5C,CAAC,EAAE,CAAC;IACFkB,IAAI,EAAE,QAAQ;IACdC,UAAU,EAAGC,KAAK,IAAKzB,cAAc,CAACyB,KAAK;EAC7C,CAAC,EAAE;IACDF,IAAI,EAAE,UAAU;IAChBC,UAAU,EAAGC,KAAK,IAAKC,MAAM,CAACC,MAAM,CAACxB,QAAQ,CAAC,CAACyB,QAAQ,CAACH,KAAK;EAC/D,CAAC,EAAE;IACDF,IAAI,EAAE,YAAY;IAClBC,UAAU,EAAGC,KAAK,IAAMA,KAAK,CAAcI,MAAM,GAAG,CAAC,IAAKJ,KAAK,CAAcI,MAAM,IAAI;EACzF,CAAC,EAAE;IACDN,IAAI,EAAE;EACR,CAAC,EAAE;IACDA,IAAI,EAAE;EACR,CAAC,CAAC,CAAC;EAEHV,IAAI,CAACiB,MAAM,CACThC,KAAA,CAAAiC,aAAA,CAAC7B,wBAAwB;IACvBE,UAAU,EAAEA,UAAW;IACvBC,YAAY,EAAEA,YAAa;IAC3Ba,QAAQ,EAAEA,QAAS;IACnBD,UAAU,EAAEA,UAAW;IACvBE,MAAM,EAAEA,MAAO;IACfa,KAAK,EAAEhB,IAAc;IACrBM,YAAY,EAAEA;EAAa,CAC5B,CACH,CAAC;AACH,CAAC,CAAC","ignoreList":[]}
@@ -1,14 +1,2 @@
1
1
  export { Locale } from '@oanda/mono-i18n';
2
- export let Division = function (Division) {
3
- Division["Oap"] = "OAP";
4
- Division["Oau"] = "OAU";
5
- Division["Oc"] = "OC";
6
- Division["Ocan"] = "OCAN";
7
- Division["Oel"] = "OEL";
8
- Division["Ogm"] = "OGM";
9
- Division["Oj"] = "OJ";
10
- Division["Opt"] = "OPT";
11
- Division["Otms"] = "OTMS";
12
- return Division;
13
- }({});
14
2
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":["Locale","Division"],"sources":["../../../src/CurrencyCrossTableWidget/types.tsx"],"sourcesContent":["import { Locale } from '@oanda/mono-i18n';\nimport { Theme } from '@oanda/labs-widget-common';\n\nexport { Locale } from '@oanda/mono-i18n';\n\nexport enum Division {\n Oap = 'OAP',\n Oau = 'OAU',\n Oc = 'OC',\n Ocan = 'OCAN',\n Oel = 'OEL',\n Ogm = 'OGM',\n Oj = 'OJ',\n Opt = 'OPT',\n Otms = 'OTMS',\n}\n\nexport interface CurrencyCrossTableConfig {\n division: Division;\n liveRatesUrl: string;\n currencies: string[];\n locale: Locale;\n theme?: Theme;\n isParamError?: boolean;\n removePadding?: boolean;\n}\n\nexport interface ValidationWrapperProps {\n currencies: string[];\n division: Division;\n isParamError?: boolean;\n}\nexport interface MainProps {\n currencies: string[];\n instruments: string[];\n}\n"],"mappings":"AAGA,SAASA,MAAM,QAAQ,kBAAkB;AAEzC,WAAYC,QAAQ,aAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAAA,OAARA,QAAQ;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":["Locale"],"sources":["../../../src/CurrencyCrossTableWidget/types.tsx"],"sourcesContent":["import { Locale } from '@oanda/mono-i18n';\nimport { Theme } from '@oanda/labs-widget-common';\nimport { Division } from '../gql/types/graphql';\n\nexport { Locale } from '@oanda/mono-i18n';\n\nexport interface CurrencyCrossTableConfig {\n division: Division;\n graphqlUrl: string;\n liveRatesUrl: string;\n currencies: string[];\n locale: Locale;\n theme?: Theme;\n isParamError?: boolean;\n removePadding?: boolean;\n}\n\nexport interface ValidationWrapperProps {\n currencies: string[];\n division: Division;\n isParamError?: boolean;\n}\nexport interface MainProps {\n currencies: string[];\n instruments: string[];\n division: Division;\n}\n"],"mappings":"AAIA,SAASA,MAAM,QAAQ,kBAAkB","ignoreList":[]}
@@ -1,39 +1,20 @@
1
- import { useEffect, useState } from 'react';
2
- import { useLiveRatesMessage } from '@oanda/labs-widget-common';
3
1
  import { MAJOR_CURRENCIES } from './constant';
4
2
  const validCurrencies = currencies => currencies.every(currency => MAJOR_CURRENCIES.includes(currency));
3
+ const divisionMapper = division => division === 'OGM' ? '' : '_';
5
4
  const currenciesToInstruments = (currencies, division) => {
6
- const divisionMapper = division === 'OGM' ? '' : '_';
7
5
  const pairs = currencies.reduce((acc, cV, index, array) => {
8
6
  const unique = array.filter((_item, idx) => index !== idx);
9
- return [...acc, ...unique.map(el => `${cV}${divisionMapper}${el}`)];
7
+ return [...acc, ...unique.map(el => `${cV}${divisionMapper(division)}${el}`)];
10
8
  }, []);
11
9
  return pairs;
12
10
  };
13
- const useRecords = (record, target) => {
14
- const [updatedRecord, setUpdatedRecord] = useState({
15
- displayName: record.displayName,
16
- instrument: record.instrument
17
- });
18
- const [error, setError] = useState(null);
19
- const {
20
- update,
21
- error: liveRatesError
22
- } = useLiveRatesMessage(record.instrument, target);
23
- useEffect(() => {
24
- setUpdatedRecord({
25
- displayName: record.displayName,
26
- instrument: record.instrument,
27
- buy: update?.ask,
28
- buyPriceMovement: update?.askPriceMovement,
29
- displayPrecision: update?.displayPrecision
30
- });
31
- setError(liveRatesError);
32
- }, [update, record, liveRatesError]);
33
- return {
34
- updatedRecord,
35
- error
36
- };
11
+ const getPriceMovement = (priceMovement, isReversed) => {
12
+ if (priceMovement === undefined) return 0;
13
+ return isReversed ? priceMovement * -1 : priceMovement;
37
14
  };
38
- export { validCurrencies, currenciesToInstruments, useRecords };
15
+ const getBuyPrice = (price, isReversed) => {
16
+ if (price === undefined) return 0;
17
+ return isReversed ? 1 / price : price;
18
+ };
19
+ export { validCurrencies, currenciesToInstruments, divisionMapper, getPriceMovement, getBuyPrice };
39
20
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["useEffect","useState","useLiveRatesMessage","MAJOR_CURRENCIES","validCurrencies","currencies","every","currency","includes","currenciesToInstruments","division","divisionMapper","pairs","reduce","acc","cV","index","array","unique","filter","_item","idx","map","el","useRecords","record","target","updatedRecord","setUpdatedRecord","displayName","instrument","error","setError","update","liveRatesError","buy","ask","buyPriceMovement","askPriceMovement","displayPrecision"],"sources":["../../../src/CurrencyCrossTableWidget/utils.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\nimport { DataRecord, LiveRatesErrorMessage, useLiveRatesMessage } from '@oanda/labs-widget-common';\nimport { MAJOR_CURRENCIES } from './constant';\n\nconst validCurrencies = (currencies: string[]) => currencies\n .every((currency) => MAJOR_CURRENCIES.includes(currency));\n\nconst currenciesToInstruments = (currencies: string[], division: any) => {\n const divisionMapper = division === 'OGM' ? '' : '_';\n\n const pairs = currencies.reduce((acc, cV, index, array) => {\n const unique = array.filter((_item, idx) => index !== idx);\n\n return [\n ...acc,\n ...unique.map((el) => `${cV}${divisionMapper}${el}`),\n ];\n }, [] as string[]);\n\n return pairs;\n};\n\nconst useRecords = (\n record: DataRecord,\n target: EventTarget | null,\n) => {\n const [updatedRecord, setUpdatedRecord] = useState<DataRecord>({\n displayName: record.displayName,\n instrument: record.instrument,\n });\n\n const [error, setError] = useState<LiveRatesErrorMessage | null>(null);\n\n const { update, error: liveRatesError } = useLiveRatesMessage(\n record.instrument,\n target,\n );\n\n useEffect(() => {\n setUpdatedRecord({\n displayName: record.displayName,\n instrument: record.instrument,\n buy: update?.ask,\n buyPriceMovement: update?.askPriceMovement,\n displayPrecision: update?.displayPrecision,\n });\n setError(liveRatesError);\n }, [update, record, liveRatesError]);\n\n return {\n updatedRecord,\n error,\n };\n};\n\nexport {\n validCurrencies,\n currenciesToInstruments,\n useRecords,\n};\n"],"mappings":"AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,SAA4CC,mBAAmB,QAAQ,2BAA2B;AAClG,SAASC,gBAAgB,QAAQ,YAAY;AAE7C,MAAMC,eAAe,GAAIC,UAAoB,IAAKA,UAAU,CACzDC,KAAK,CAAEC,QAAQ,IAAKJ,gBAAgB,CAACK,QAAQ,CAACD,QAAQ,CAAC,CAAC;AAE3D,MAAME,uBAAuB,GAAGA,CAACJ,UAAoB,EAAEK,QAAa,KAAK;EACvE,MAAMC,cAAc,GAAGD,QAAQ,KAAK,KAAK,GAAG,EAAE,GAAG,GAAG;EAEpD,MAAME,KAAK,GAAGP,UAAU,CAACQ,MAAM,CAAC,CAACC,GAAG,EAAEC,EAAE,EAAEC,KAAK,EAAEC,KAAK,KAAK;IACzD,MAAMC,MAAM,GAAGD,KAAK,CAACE,MAAM,CAAC,CAACC,KAAK,EAAEC,GAAG,KAAKL,KAAK,KAAKK,GAAG,CAAC;IAE1D,OAAO,CACL,GAAGP,GAAG,EACN,GAAGI,MAAM,CAACI,GAAG,CAAEC,EAAE,IAAK,GAAGR,EAAE,GAAGJ,cAAc,GAAGY,EAAE,EAAE,CAAC,CACrD;EACH,CAAC,EAAE,EAAc,CAAC;EAElB,OAAOX,KAAK;AACd,CAAC;AAED,MAAMY,UAAU,GAAGA,CACjBC,MAAkB,EAClBC,MAA0B,KACvB;EACH,MAAM,CAACC,aAAa,EAAEC,gBAAgB,CAAC,GAAG3B,QAAQ,CAAa;IAC7D4B,WAAW,EAAEJ,MAAM,CAACI,WAAW;IAC/BC,UAAU,EAAEL,MAAM,CAACK;EACrB,CAAC,CAAC;EAEF,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAG/B,QAAQ,CAA+B,IAAI,CAAC;EAEtE,MAAM;IAAEgC,MAAM;IAAEF,KAAK,EAAEG;EAAe,CAAC,GAAGhC,mBAAmB,CAC3DuB,MAAM,CAACK,UAAU,EACjBJ,MACF,CAAC;EAED1B,SAAS,CAAC,MAAM;IACd4B,gBAAgB,CAAC;MACfC,WAAW,EAAEJ,MAAM,CAACI,WAAW;MAC/BC,UAAU,EAAEL,MAAM,CAACK,UAAU;MAC7BK,GAAG,EAAEF,MAAM,EAAEG,GAAG;MAChBC,gBAAgB,EAAEJ,MAAM,EAAEK,gBAAgB;MAC1CC,gBAAgB,EAAEN,MAAM,EAAEM;IAC5B,CAAC,CAAC;IACFP,QAAQ,CAACE,cAAc,CAAC;EAC1B,CAAC,EAAE,CAACD,MAAM,EAAER,MAAM,EAAES,cAAc,CAAC,CAAC;EAEpC,OAAO;IACLP,aAAa;IACbI;EACF,CAAC;AACH,CAAC;AAED,SACE3B,eAAe,EACfK,uBAAuB,EACvBe,UAAU","ignoreList":[]}
1
+ {"version":3,"file":"utils.js","names":["MAJOR_CURRENCIES","validCurrencies","currencies","every","currency","includes","divisionMapper","division","currenciesToInstruments","pairs","reduce","acc","cV","index","array","unique","filter","_item","idx","map","el","getPriceMovement","priceMovement","isReversed","undefined","getBuyPrice","price"],"sources":["../../../src/CurrencyCrossTableWidget/utils.ts"],"sourcesContent":["import { MAJOR_CURRENCIES } from './constant';\nimport { Division } from '../gql/types/graphql';\n\nconst validCurrencies = (currencies: string[]) => currencies\n .every((currency) => MAJOR_CURRENCIES.includes(currency));\n\nconst divisionMapper = (division: Division) => (division === 'OGM' ? '' : '_');\n\nconst currenciesToInstruments = (currencies: string[], division: any) => {\n const pairs = currencies.reduce((acc, cV, index, array) => {\n const unique = array.filter((_item, idx) => index !== idx);\n\n return [\n ...acc,\n ...unique.map((el) => `${cV}${divisionMapper(division)}${el}`),\n ];\n }, [] as string[]);\n\n return pairs;\n};\n\nconst getPriceMovement = (priceMovement: number | undefined, isReversed: boolean) => {\n if (priceMovement === undefined) return 0;\n\n return isReversed ? priceMovement * -1 : priceMovement;\n};\n\nconst getBuyPrice = (price: number | undefined, isReversed: boolean) => {\n if (price === undefined) return 0;\n\n return isReversed ? 1 / price : price;\n};\n\nexport {\n validCurrencies,\n currenciesToInstruments,\n divisionMapper,\n getPriceMovement,\n getBuyPrice,\n};\n"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,YAAY;AAG7C,MAAMC,eAAe,GAAIC,UAAoB,IAAKA,UAAU,CACzDC,KAAK,CAAEC,QAAQ,IAAKJ,gBAAgB,CAACK,QAAQ,CAACD,QAAQ,CAAC,CAAC;AAE3D,MAAME,cAAc,GAAIC,QAAkB,IAAMA,QAAQ,KAAK,KAAK,GAAG,EAAE,GAAG,GAAI;AAE9E,MAAMC,uBAAuB,GAAGA,CAACN,UAAoB,EAAEK,QAAa,KAAK;EACvE,MAAME,KAAK,GAAGP,UAAU,CAACQ,MAAM,CAAC,CAACC,GAAG,EAAEC,EAAE,EAAEC,KAAK,EAAEC,KAAK,KAAK;IACzD,MAAMC,MAAM,GAAGD,KAAK,CAACE,MAAM,CAAC,CAACC,KAAK,EAAEC,GAAG,KAAKL,KAAK,KAAKK,GAAG,CAAC;IAE1D,OAAO,CACL,GAAGP,GAAG,EACN,GAAGI,MAAM,CAACI,GAAG,CAAEC,EAAE,IAAK,GAAGR,EAAE,GAAGN,cAAc,CAACC,QAAQ,CAAC,GAAGa,EAAE,EAAE,CAAC,CAC/D;EACH,CAAC,EAAE,EAAc,CAAC;EAElB,OAAOX,KAAK;AACd,CAAC;AAED,MAAMY,gBAAgB,GAAGA,CAACC,aAAiC,EAAEC,UAAmB,KAAK;EACnF,IAAID,aAAa,KAAKE,SAAS,EAAE,OAAO,CAAC;EAEzC,OAAOD,UAAU,GAAGD,aAAa,GAAG,CAAC,CAAC,GAAGA,aAAa;AACxD,CAAC;AAED,MAAMG,WAAW,GAAGA,CAACC,KAAyB,EAAEH,UAAmB,KAAK;EACtE,IAAIG,KAAK,KAAKF,SAAS,EAAE,OAAO,CAAC;EAEjC,OAAOD,UAAU,GAAG,CAAC,GAAGG,KAAK,GAAGA,KAAK;AACvC,CAAC;AAED,SACEzB,eAAe,EACfO,uBAAuB,EACvBF,cAAc,EACde,gBAAgB,EAChBI,WAAW","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ export function useFragment(_documentNode, fragmentType) {
2
+ return fragmentType;
3
+ }
4
+ export function makeFragmentData(data, _fragment) {
5
+ return data;
6
+ }
7
+ export function isFragmentReady(queryNode, fragmentNode, data) {
8
+ const deferredFields = queryNode.__meta__?.deferredFields;
9
+ if (!deferredFields) return true;
10
+ const fragDef = fragmentNode.definitions[0];
11
+ const fragName = fragDef?.name?.value;
12
+ const fields = fragName && deferredFields[fragName] || [];
13
+ return fields.length > 0 && fields.every(field => data && field in data);
14
+ }
15
+ //# sourceMappingURL=fragment-masking.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fragment-masking.js","names":["useFragment","_documentNode","fragmentType","makeFragmentData","data","_fragment","isFragmentReady","queryNode","fragmentNode","deferredFields","__meta__","fragDef","definitions","fragName","name","value","fields","length","every","field"],"sources":["../../../../src/gql/types/fragment-masking.ts"],"sourcesContent":["import { ResultOf, DocumentTypeDecoration, TypedDocumentNode } from '@graphql-typed-document-node/core';\nimport { FragmentDefinitionNode } from 'graphql';\nimport { Incremental } from './graphql';\n\n\nexport type FragmentType<TDocumentType extends DocumentTypeDecoration<any, any>> = TDocumentType extends DocumentTypeDecoration<\n infer TType,\n any\n>\n ? [TType] extends [{ ' $fragmentName'?: infer TKey }]\n ? TKey extends string\n ? { ' $fragmentRefs'?: { [key in TKey]: TType } }\n : never\n : never\n : never;\n\n// return non-nullable if `fragmentType` is non-nullable\nexport function useFragment<TType>(\n _documentNode: DocumentTypeDecoration<TType, any>,\n fragmentType: FragmentType<DocumentTypeDecoration<TType, any>>\n): TType;\n// return nullable if `fragmentType` is nullable\nexport function useFragment<TType>(\n _documentNode: DocumentTypeDecoration<TType, any>,\n fragmentType: FragmentType<DocumentTypeDecoration<TType, any>> | null | undefined\n): TType | null | undefined;\n// return array of non-nullable if `fragmentType` is array of non-nullable\nexport function useFragment<TType>(\n _documentNode: DocumentTypeDecoration<TType, any>,\n fragmentType: ReadonlyArray<FragmentType<DocumentTypeDecoration<TType, any>>>\n): ReadonlyArray<TType>;\n// return array of nullable if `fragmentType` is array of nullable\nexport function useFragment<TType>(\n _documentNode: DocumentTypeDecoration<TType, any>,\n fragmentType: ReadonlyArray<FragmentType<DocumentTypeDecoration<TType, any>>> | null | undefined\n): ReadonlyArray<TType> | null | undefined;\nexport function useFragment<TType>(\n _documentNode: DocumentTypeDecoration<TType, any>,\n fragmentType: FragmentType<DocumentTypeDecoration<TType, any>> | ReadonlyArray<FragmentType<DocumentTypeDecoration<TType, any>>> | null | undefined\n): TType | ReadonlyArray<TType> | null | undefined {\n return fragmentType as any;\n}\n\n\nexport function makeFragmentData<\n F extends DocumentTypeDecoration<any, any>,\n FT extends ResultOf<F>\n>(data: FT, _fragment: F): FragmentType<F> {\n return data as FragmentType<F>;\n}\nexport function isFragmentReady<TQuery, TFrag>(\n queryNode: DocumentTypeDecoration<TQuery, any>,\n fragmentNode: TypedDocumentNode<TFrag>,\n data: FragmentType<TypedDocumentNode<Incremental<TFrag>, any>> | null | undefined\n): data is FragmentType<typeof fragmentNode> {\n const deferredFields = (queryNode as { __meta__?: { deferredFields: Record<string, (keyof TFrag)[]> } }).__meta__\n ?.deferredFields;\n\n if (!deferredFields) return true;\n\n const fragDef = fragmentNode.definitions[0] as FragmentDefinitionNode | undefined;\n const fragName = fragDef?.name?.value;\n\n const fields = (fragName && deferredFields[fragName]) || [];\n return fields.length > 0 && fields.every(field => data && field in data);\n}\n"],"mappings":"AAoCA,OAAO,SAASA,WAAWA,CACzBC,aAAiD,EACjDC,YAAmJ,EAClG;EACjD,OAAOA,YAAY;AACrB;AAGA,OAAO,SAASC,gBAAgBA,CAG9BC,IAAQ,EAAEC,SAAY,EAAmB;EACzC,OAAOD,IAAI;AACb;AACA,OAAO,SAASE,eAAeA,CAC7BC,SAA8C,EAC9CC,YAAsC,EACtCJ,IAAiF,EACtC;EAC3C,MAAMK,cAAc,GAAIF,SAAS,CAAwEG,QAAQ,EAC7GD,cAAc;EAElB,IAAI,CAACA,cAAc,EAAE,OAAO,IAAI;EAEhC,MAAME,OAAO,GAAGH,YAAY,CAACI,WAAW,CAAC,CAAC,CAAuC;EACjF,MAAMC,QAAQ,GAAGF,OAAO,EAAEG,IAAI,EAAEC,KAAK;EAErC,MAAMC,MAAM,GAAIH,QAAQ,IAAIJ,cAAc,CAACI,QAAQ,CAAC,IAAK,EAAE;EAC3D,OAAOG,MAAM,CAACC,MAAM,GAAG,CAAC,IAAID,MAAM,CAACE,KAAK,CAACC,KAAK,IAAIf,IAAI,IAAIe,KAAK,IAAIf,IAAI,CAAC;AAC1E","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ import * as types from './graphql';
2
+ const documents = {
3
+ "\n query validateInstruments($instruments: [String]!, $division: Division) {\n mapInstrumentNames(instruments: $instruments, division: $division) {\n name\n displayName\n }\n }\n": types.ValidateInstrumentsDocument
4
+ };
5
+ export function graphql(source) {
6
+ return documents[source] ?? {};
7
+ }
8
+ //# sourceMappingURL=gql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gql.js","names":["types","documents","ValidateInstrumentsDocument","graphql","source"],"sources":["../../../../src/gql/types/gql.ts"],"sourcesContent":["/* eslint-disable */\nimport * as types from './graphql';\nimport { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core';\n\n/**\n * Map of all GraphQL operations in the project.\n *\n * This map has several performance disadvantages:\n * 1. It is not tree-shakeable, so it will include all operations in the project.\n * 2. It is not minifiable, so the string of a GraphQL query will be multiple times inside the bundle.\n * 3. It does not support dead code elimination, so it will add unused operations.\n *\n * Therefore it is highly recommended to use the babel or swc plugin for production.\n */\nconst documents = {\n \"\\n query validateInstruments($instruments: [String]!, $division: Division) {\\n mapInstrumentNames(instruments: $instruments, division: $division) {\\n name\\n displayName\\n }\\n }\\n\": types.ValidateInstrumentsDocument,\n};\n\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n *\n *\n * @example\n * ```ts\n * const query = graphql(`query GetUser($id: ID!) { user(id: $id) { name } }`);\n * ```\n *\n * The query argument is unknown!\n * Please regenerate the types.\n */\nexport function graphql(source: string): unknown;\n\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n */\nexport function graphql(source: \"\\n query validateInstruments($instruments: [String]!, $division: Division) {\\n mapInstrumentNames(instruments: $instruments, division: $division) {\\n name\\n displayName\\n }\\n }\\n\"): (typeof documents)[\"\\n query validateInstruments($instruments: [String]!, $division: Division) {\\n mapInstrumentNames(instruments: $instruments, division: $division) {\\n name\\n displayName\\n }\\n }\\n\"];\n\nexport function graphql(source: string) {\n return (documents as any)[source] ?? {};\n}\n\nexport type DocumentType<TDocumentNode extends DocumentNode<any, any>> = TDocumentNode extends DocumentNode< infer TType, any> ? TType : never;"],"mappings":"AACA,OAAO,KAAKA,KAAK,MAAM,WAAW;AAalC,MAAMC,SAAS,GAAG;EACd,sMAAsM,EAAED,KAAK,CAACE;AAClN,CAAC;AAqBD,OAAO,SAASC,OAAOA,CAACC,MAAc,EAAE;EACtC,OAAQH,SAAS,CAASG,MAAM,CAAC,IAAI,CAAC,CAAC;AACzC","ignoreList":[]}