@oanda/labs-live-rates-table-widget 1.0.41 → 1.0.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +348 -0
- package/dist/main/LiveRatesTableWidget/Main.js +1 -1
- package/dist/main/LiveRatesTableWidget/Main.js.map +1 -1
- package/dist/main/LiveRatesTableWidget/components/CardWithData/CardWithData.js +3 -5
- package/dist/main/LiveRatesTableWidget/components/CardWithData/CardWithData.js.map +1 -1
- package/dist/main/LiveRatesTableWidget/components/Cards/Cards.js +1 -1
- package/dist/main/LiveRatesTableWidget/components/Cards/Cards.js.map +1 -1
- package/dist/main/LiveRatesTableWidget/components/LineChartWithData/LineChartWithData.js +1 -2
- package/dist/main/LiveRatesTableWidget/components/LineChartWithData/LineChartWithData.js.map +1 -1
- package/dist/main/LiveRatesTableWidget/components/LineChartWithData/utils.js +1 -1
- package/dist/main/LiveRatesTableWidget/components/LineChartWithData/utils.js.map +1 -1
- package/dist/main/LiveRatesTableWidget/components/RowWithData/RowWithData.js +3 -5
- package/dist/main/LiveRatesTableWidget/components/RowWithData/RowWithData.js.map +1 -1
- package/dist/main/LiveRatesTableWidget/utils.js +12 -15
- package/dist/main/LiveRatesTableWidget/utils.js.map +1 -1
- package/dist/main/gql/getInstrumentsChart.js +8 -3
- package/dist/main/gql/getInstrumentsChart.js.map +1 -1
- package/dist/main/gql/types/fragment-masking.js +2 -3
- package/dist/main/gql/types/fragment-masking.js.map +1 -1
- package/dist/main/gql/types/gql.js +1 -2
- package/dist/main/gql/types/gql.js.map +1 -1
- package/dist/main/gql/validateInstruments.js +8 -3
- package/dist/main/gql/validateInstruments.js.map +1 -1
- package/dist/module/LiveRatesTableWidget/Main.js +1 -1
- package/dist/module/LiveRatesTableWidget/Main.js.map +1 -1
- package/dist/module/LiveRatesTableWidget/components/CardWithData/CardWithData.js +3 -5
- package/dist/module/LiveRatesTableWidget/components/CardWithData/CardWithData.js.map +1 -1
- package/dist/module/LiveRatesTableWidget/components/Cards/Cards.js +1 -1
- package/dist/module/LiveRatesTableWidget/components/Cards/Cards.js.map +1 -1
- package/dist/module/LiveRatesTableWidget/components/LineChartWithData/LineChartWithData.js +1 -2
- package/dist/module/LiveRatesTableWidget/components/LineChartWithData/LineChartWithData.js.map +1 -1
- package/dist/module/LiveRatesTableWidget/components/LineChartWithData/utils.js +1 -1
- package/dist/module/LiveRatesTableWidget/components/LineChartWithData/utils.js.map +1 -1
- package/dist/module/LiveRatesTableWidget/components/RowWithData/RowWithData.js +3 -5
- package/dist/module/LiveRatesTableWidget/components/RowWithData/RowWithData.js.map +1 -1
- package/dist/module/LiveRatesTableWidget/utils.js +12 -15
- package/dist/module/LiveRatesTableWidget/utils.js.map +1 -1
- package/dist/module/gql/getInstrumentsChart.js +8 -3
- package/dist/module/gql/getInstrumentsChart.js.map +1 -1
- package/dist/module/gql/types/fragment-masking.js +2 -3
- package/dist/module/gql/types/fragment-masking.js.map +1 -1
- package/dist/module/gql/types/gql.js +1 -2
- package/dist/module/gql/types/gql.js.map +1 -1
- package/dist/module/gql/validateInstruments.js +8 -3
- package/dist/module/gql/validateInstruments.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RowWithData.js","names":["_labsWidgetCommon","require","_classnames","_interopRequireDefault","_react","_constant","_types","_utils","_LineChartWithData","e","__esModule","default","RowWithData","_ref","loading","record","hasBackgroundColor","target","activeColumns","division","isScrolled","isDark","useLayoutProvider","updatedRecord","error","ref","useRecords","instrument","checkLoading","id","undefined","createElement","TableRow","Fragment","TableCell","key","ColumnsNames","INSTRUMENT","classNames","classnames","isLoading","type","Truncate","maxWidth","text","displayName","tooltipId","INSTRUMENT_TOOLTIP_ID","map","item","SELL","
|
|
1
|
+
{"version":3,"file":"RowWithData.js","names":["_labsWidgetCommon","require","_classnames","_interopRequireDefault","_react","_constant","_types","_utils","_LineChartWithData","e","__esModule","default","RowWithData","_ref","loading","record","hasBackgroundColor","target","activeColumns","division","isScrolled","isDark","useLayoutProvider","updatedRecord","error","ref","useRecords","instrument","checkLoading","id","undefined","createElement","TableRow","Fragment","TableCell","key","ColumnsNames","INSTRUMENT","classNames","classnames","isLoading","type","Truncate","maxWidth","text","displayName","tooltipId","INSTRUMENT_TOOLTIP_ID","map","item","SELL","additionalPaddingRight","isError","Price","movementIndicator","priceMovement","sellPriceMovement","sell","toFixed","displayPrecision","BUY","buyPriceMovement","buy","DAILY_CHANGE","dailyPercentChange","CHART","className","LineChartWithData","SPREAD","loaderSize","LoaderSize","sm","spread","exports"],"sources":["../../../../../src/LiveRatesTableWidget/components/RowWithData/RowWithData.tsx"],"sourcesContent":["import {\n LoaderSize,\n Price,\n TableCell,\n TableRow,\n Truncate,\n useLayoutProvider,\n} from '@oanda/labs-widget-common';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { INSTRUMENT_TOOLTIP_ID } from '../../constant';\nimport type { RowWithDataProps } from '../../types';\nimport { ColumnsNames } from '../../types';\nimport { useRecords } from '../../utils';\nimport { LineChartWithData } from '../LineChartWithData';\n\nconst RowWithData = ({\n loading,\n record,\n hasBackgroundColor,\n target,\n activeColumns,\n division,\n isScrolled,\n}: RowWithDataProps) => {\n const { isDark } = useLayoutProvider();\n const { updatedRecord, error, ref } = useRecords(\n record,\n record.instrument ? target : null\n );\n\n const checkLoading = (id: string) =>\n loading || (!error && updatedRecord?.[id] === undefined);\n\n return (\n <TableRow\n ref={ref}\n hasBackgroundColor={hasBackgroundColor}\n isScrolled={isScrolled}\n >\n <>\n <TableCell\n key={ColumnsNames.INSTRUMENT}\n classNames={classnames('lw-font-bold', {\n '[&>*:first-child]:lw-border-r [&>*:first-child]:lw-border-border-primary':\n isDark && isScrolled,\n })}\n isLoading={checkLoading(ColumnsNames.INSTRUMENT)}\n type=\"text\"\n >\n <Truncate\n maxWidth={130}\n text={record.displayName}\n tooltipId={INSTRUMENT_TOOLTIP_ID}\n />\n </TableCell>\n {activeColumns.map((item) => {\n if (item === ColumnsNames.SELL) {\n return (\n <TableCell\n key={ColumnsNames.SELL}\n additionalPaddingRight\n isError={!!error}\n isLoading={checkLoading(ColumnsNames.SELL)}\n >\n <Price\n movementIndicator=\"arrow\"\n priceMovement={updatedRecord.sellPriceMovement}\n >\n <span>\n {updatedRecord.sell?.toFixed(\n updatedRecord.displayPrecision\n )}\n </span>\n </Price>\n </TableCell>\n );\n }\n\n if (item === ColumnsNames.BUY) {\n return (\n <TableCell\n key={ColumnsNames.BUY}\n additionalPaddingRight\n isError={!!error}\n isLoading={checkLoading(ColumnsNames.BUY)}\n >\n <Price\n movementIndicator=\"arrow\"\n priceMovement={updatedRecord.buyPriceMovement}\n >\n <span>\n {updatedRecord.buy?.toFixed(updatedRecord.displayPrecision)}\n </span>\n </Price>\n </TableCell>\n );\n }\n\n if (item === ColumnsNames.DAILY_CHANGE) {\n return (\n <TableCell\n key={ColumnsNames.DAILY_CHANGE}\n isError={!!error}\n isLoading={checkLoading('dailyPercentChange')}\n >\n <span>{updatedRecord.dailyPercentChange}</span>\n </TableCell>\n );\n }\n\n if (item === ColumnsNames.CHART) {\n return (\n <td\n key={ColumnsNames.CHART}\n className=\"lw-relative lw-px-3 lw-py-0 lw-text-right\"\n data-testid=\"chart-table-cell\"\n >\n <div className=\"lw-flex lw-justify-center\">\n <LineChartWithData\n division={division}\n isLoading={checkLoading('instrument')}\n record={updatedRecord}\n />\n </div>\n </td>\n );\n }\n\n if (item === ColumnsNames.SPREAD) {\n return (\n <TableCell\n key={ColumnsNames.SPREAD}\n isError={!!error}\n isLoading={checkLoading(ColumnsNames.SPREAD)}\n loaderSize={LoaderSize.sm}\n >\n <span>{updatedRecord.spread}</span>\n </TableCell>\n );\n }\n return null;\n })}\n </>\n </TableRow>\n );\n};\n\nexport { RowWithData };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -9,13 +9,10 @@ var _react = require("react");
|
|
|
9
9
|
var _usehooksTs = require("usehooks-ts");
|
|
10
10
|
var _config = require("./config");
|
|
11
11
|
var _types = require("./types");
|
|
12
|
-
const getRecords = data => {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
displayName: (item === null || item === void 0 ? void 0 : item.displayName) || ''
|
|
17
|
-
}));
|
|
18
|
-
};
|
|
12
|
+
const getRecords = data => data?.mapInstrumentNames?.map(item => ({
|
|
13
|
+
instrument: item?.name || '',
|
|
14
|
+
displayName: item?.displayName || ''
|
|
15
|
+
}));
|
|
19
16
|
exports.getRecords = getRecords;
|
|
20
17
|
const getHeaderConfig = activeColumns => [_types.ColumnsNames.INSTRUMENT, ...activeColumns].map(item => _config.headerConfig[item]);
|
|
21
18
|
exports.getHeaderConfig = getHeaderConfig;
|
|
@@ -27,7 +24,7 @@ const useRecords = (record, target) => {
|
|
|
27
24
|
});
|
|
28
25
|
const [error, setError] = (0, _react.useState)(null);
|
|
29
26
|
const entry = (0, _usehooksTs.useIntersectionObserver)();
|
|
30
|
-
const isVisible = !!
|
|
27
|
+
const isVisible = !!entry?.isIntersecting;
|
|
31
28
|
const {
|
|
32
29
|
update,
|
|
33
30
|
error: liveRatesError
|
|
@@ -38,13 +35,13 @@ const useRecords = (record, target) => {
|
|
|
38
35
|
displayName: record.displayName,
|
|
39
36
|
instrument: record.instrument,
|
|
40
37
|
sentiment: record.sentiment,
|
|
41
|
-
buy: update
|
|
42
|
-
sell: update
|
|
43
|
-
sellPriceMovement: update
|
|
44
|
-
buyPriceMovement: update
|
|
45
|
-
dailyPercentChange: update
|
|
46
|
-
spread: update
|
|
47
|
-
displayPrecision: update
|
|
38
|
+
buy: update?.ask,
|
|
39
|
+
sell: update?.bid,
|
|
40
|
+
sellPriceMovement: update?.bidPriceMovement,
|
|
41
|
+
buyPriceMovement: update?.askPriceMovement,
|
|
42
|
+
dailyPercentChange: update?.dailyPercentChangeFromOpen,
|
|
43
|
+
spread: update?.spread,
|
|
44
|
+
displayPrecision: update?.displayPrecision
|
|
48
45
|
});
|
|
49
46
|
setError(liveRatesError);
|
|
50
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["_labsWidgetCommon","require","_react","_usehooksTs","_config","_types","getRecords","data","
|
|
1
|
+
{"version":3,"file":"utils.js","names":["_labsWidgetCommon","require","_react","_usehooksTs","_config","_types","getRecords","data","mapInstrumentNames","map","item","instrument","name","displayName","exports","getHeaderConfig","activeColumns","ColumnsNames","INSTRUMENT","headerConfig","useRecords","record","target","updatedRecord","setUpdatedRecord","useState","sentiment","error","setError","entry","useIntersectionObserver","isVisible","isIntersecting","update","liveRatesError","useLiveRatesMessage","useEffect","buy","ask","sell","bid","sellPriceMovement","bidPriceMovement","buyPriceMovement","askPriceMovement","dailyPercentChange","dailyPercentChangeFromOpen","spread","displayPrecision","ref"],"sources":["../../../src/LiveRatesTableWidget/utils.ts"],"sourcesContent":["import type {\n HeaderColumns,\n LiveRatesErrorMessage,\n} from '@oanda/labs-widget-common';\nimport { useLiveRatesMessage } from '@oanda/labs-widget-common';\nimport { useEffect, useState } from 'react';\nimport { useIntersectionObserver } from 'usehooks-ts';\n\nimport type { ValidateInstrumentsQuery } from '../gql/types/graphql';\nimport { headerConfig } from './config';\nimport type { DataRecord, EmptyRecord } from './types';\nimport { ColumnsNames } from './types';\n\nconst getRecords = (data: ValidateInstrumentsQuery) =>\n data?.mapInstrumentNames?.map((item) => ({\n instrument: item?.name || '',\n displayName: item?.displayName || '',\n }));\n\nconst getHeaderConfig = (activeColumns: ColumnsNames[]): HeaderColumns[] =>\n [ColumnsNames.INSTRUMENT, ...activeColumns].map((item) => headerConfig[item]);\n\nconst useRecords = (\n record: DataRecord | EmptyRecord,\n target: EventTarget | null\n) => {\n const [updatedRecord, setUpdatedRecord] = useState<DataRecord>({\n displayName: record.displayName,\n instrument: record.instrument,\n sentiment: record.sentiment,\n });\n const [error, setError] = useState<LiveRatesErrorMessage | null>(null);\n const entry = useIntersectionObserver();\n const isVisible = !!entry?.isIntersecting;\n\n const { update, error: liveRatesError } = useLiveRatesMessage(\n record.instrument,\n target\n );\n\n useEffect(() => {\n if (isVisible) {\n setUpdatedRecord({\n displayName: record.displayName,\n instrument: record.instrument,\n sentiment: record.sentiment,\n buy: update?.ask,\n sell: update?.bid,\n sellPriceMovement: update?.bidPriceMovement,\n buyPriceMovement: update?.askPriceMovement,\n dailyPercentChange: update?.dailyPercentChangeFromOpen,\n spread: update?.spread,\n displayPrecision: update?.displayPrecision,\n });\n setError(liveRatesError);\n }\n }, [update, record, isVisible, liveRatesError]);\n\n return {\n updatedRecord,\n error,\n ref: entry.ref,\n };\n};\n\nexport { getHeaderConfig, getRecords, useRecords };\n"],"mappings":";;;;;;AAIA,IAAAA,iBAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,WAAA,GAAAF,OAAA;AAGA,IAAAG,OAAA,GAAAH,OAAA;AAEA,IAAAI,MAAA,GAAAJ,OAAA;AAEA,MAAMK,UAAU,GAAIC,IAA8B,IAChDA,IAAI,EAAEC,kBAAkB,EAAEC,GAAG,CAAEC,IAAI,KAAM;EACvCC,UAAU,EAAED,IAAI,EAAEE,IAAI,IAAI,EAAE;EAC5BC,WAAW,EAAEH,IAAI,EAAEG,WAAW,IAAI;AACpC,CAAC,CAAC,CAAC;AAACC,OAAA,CAAAR,UAAA,GAAAA,UAAA;AAEN,MAAMS,eAAe,GAAIC,aAA6B,IACpD,CAACC,mBAAY,CAACC,UAAU,EAAE,GAAGF,aAAa,CAAC,CAACP,GAAG,CAAEC,IAAI,IAAKS,oBAAY,CAACT,IAAI,CAAC,CAAC;AAACI,OAAA,CAAAC,eAAA,GAAAA,eAAA;AAEhF,MAAMK,UAAU,GAAGA,CACjBC,MAAgC,EAChCC,MAA0B,KACvB;EACH,MAAM,CAACC,aAAa,EAAEC,gBAAgB,CAAC,GAAG,IAAAC,eAAQ,EAAa;IAC7DZ,WAAW,EAAEQ,MAAM,CAACR,WAAW;IAC/BF,UAAU,EAAEU,MAAM,CAACV,UAAU;IAC7Be,SAAS,EAAEL,MAAM,CAACK;EACpB,CAAC,CAAC;EACF,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAG,IAAAH,eAAQ,EAA+B,IAAI,CAAC;EACtE,MAAMI,KAAK,GAAG,IAAAC,mCAAuB,EAAC,CAAC;EACvC,MAAMC,SAAS,GAAG,CAAC,CAACF,KAAK,EAAEG,cAAc;EAEzC,MAAM;IAAEC,MAAM;IAAEN,KAAK,EAAEO;EAAe,CAAC,GAAG,IAAAC,qCAAmB,EAC3Dd,MAAM,CAACV,UAAU,EACjBW,MACF,CAAC;EAED,IAAAc,gBAAS,EAAC,MAAM;IACd,IAAIL,SAAS,EAAE;MACbP,gBAAgB,CAAC;QACfX,WAAW,EAAEQ,MAAM,CAACR,WAAW;QAC/BF,UAAU,EAAEU,MAAM,CAACV,UAAU;QAC7Be,SAAS,EAAEL,MAAM,CAACK,SAAS;QAC3BW,GAAG,EAAEJ,MAAM,EAAEK,GAAG;QAChBC,IAAI,EAAEN,MAAM,EAAEO,GAAG;QACjBC,iBAAiB,EAAER,MAAM,EAAES,gBAAgB;QAC3CC,gBAAgB,EAAEV,MAAM,EAAEW,gBAAgB;QAC1CC,kBAAkB,EAAEZ,MAAM,EAAEa,0BAA0B;QACtDC,MAAM,EAAEd,MAAM,EAAEc,MAAM;QACtBC,gBAAgB,EAAEf,MAAM,EAAEe;MAC5B,CAAC,CAAC;MACFpB,QAAQ,CAACM,cAAc,CAAC;IAC1B;EACF,CAAC,EAAE,CAACD,MAAM,EAAEZ,MAAM,EAAEU,SAAS,EAAEG,cAAc,CAAC,CAAC;EAE/C,OAAO;IACLX,aAAa;IACbI,KAAK;IACLsB,GAAG,EAAEpB,KAAK,CAACoB;EACb,CAAC;AACH,CAAC;AAACnC,OAAA,CAAAM,UAAA,GAAAA,UAAA","ignoreList":[]}
|
|
@@ -5,7 +5,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.getInstrumentsChart = void 0;
|
|
7
7
|
var _client = require("@apollo/client");
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
const getInstrumentsChart = exports.getInstrumentsChart = (0, _client.gql)`
|
|
9
|
+
query GetInstrumentsChart($instruments: [String!], $division: Division) {
|
|
10
|
+
topicalInstrumentsCharts(instruments: $instruments, division: $division) {
|
|
11
|
+
name
|
|
12
|
+
chart
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
`;
|
|
11
16
|
//# sourceMappingURL=getInstrumentsChart.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getInstrumentsChart.js","names":["_client","require","
|
|
1
|
+
{"version":3,"file":"getInstrumentsChart.js","names":["_client","require","getInstrumentsChart","exports","gql"],"sources":["../../../src/gql/getInstrumentsChart.ts"],"sourcesContent":["import { gql } from '@apollo/client';\n\nexport const getInstrumentsChart = gql`\n query GetInstrumentsChart($instruments: [String!], $division: Division) {\n topicalInstrumentsCharts(instruments: $instruments, division: $division) {\n name\n chart\n }\n }\n`;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEO,MAAMC,mBAAmB,GAAAC,OAAA,CAAAD,mBAAA,GAAG,IAAAE,WAAG;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,CAAC","ignoreList":[]}
|
|
@@ -13,11 +13,10 @@ function makeFragmentData(data, _fragment) {
|
|
|
13
13
|
return data;
|
|
14
14
|
}
|
|
15
15
|
function isFragmentReady(queryNode, fragmentNode, data) {
|
|
16
|
-
|
|
17
|
-
const deferredFields = (_meta__ = queryNode.__meta__) === null || _meta__ === void 0 ? void 0 : _meta__.deferredFields;
|
|
16
|
+
const deferredFields = queryNode.__meta__?.deferredFields;
|
|
18
17
|
if (!deferredFields) return true;
|
|
19
18
|
const fragDef = fragmentNode.definitions[0];
|
|
20
|
-
const fragName = fragDef
|
|
19
|
+
const fragName = fragDef?.name?.value;
|
|
21
20
|
const fields = fragName && deferredFields[fragName] || [];
|
|
22
21
|
return fields.length > 0 && fields.every(field => data && field in data);
|
|
23
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fragment-masking.js","names":["useFragment","_documentNode","fragmentType","makeFragmentData","data","_fragment","isFragmentReady","queryNode","fragmentNode","
|
|
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 {\n ResultOf,\n DocumentTypeDecoration,\n TypedDocumentNode,\n} from '@graphql-typed-document-node/core';\nimport { FragmentDefinitionNode } from 'graphql';\nimport { Incremental } from './graphql';\n\nexport type FragmentType<\n TDocumentType extends DocumentTypeDecoration<any, any>,\n> =\n TDocumentType extends DocumentTypeDecoration<infer TType, any>\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:\n | FragmentType<DocumentTypeDecoration<TType, any>>\n | null\n | 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:\n | ReadonlyArray<FragmentType<DocumentTypeDecoration<TType, any>>>\n | null\n | undefined\n): ReadonlyArray<TType> | null | undefined;\nexport function useFragment<TType>(\n _documentNode: DocumentTypeDecoration<TType, any>,\n fragmentType:\n | FragmentType<DocumentTypeDecoration<TType, any>>\n | ReadonlyArray<FragmentType<DocumentTypeDecoration<TType, any>>>\n | null\n | undefined\n): TType | ReadonlyArray<TType> | null | undefined {\n return fragmentType as any;\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:\n | FragmentType<TypedDocumentNode<Incremental<TFrag>, any>>\n | null\n | undefined\n): data is FragmentType<typeof fragmentNode> {\n const deferredFields = (\n queryNode as {\n __meta__?: { deferredFields: Record<string, (keyof TFrag)[]> };\n }\n ).__meta__?.deferredFields;\n\n if (!deferredFields) return true;\n\n const fragDef = fragmentNode.definitions[0] as\n | FragmentDefinitionNode\n | 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":";;;;;;;;AA6CO,SAASA,WAAWA,CACzBC,aAAiD,EACjDC,YAIa,EACoC;EACjD,OAAOA,YAAY;AACrB;AAEO,SAASC,gBAAgBA,CAG9BC,IAAQ,EAAEC,SAAY,EAAmB;EACzC,OAAOD,IAAI;AACb;AACO,SAASE,eAAeA,CAC7BC,SAA8C,EAC9CC,YAAsC,EACtCJ,IAGa,EAC8B;EAC3C,MAAMK,cAAc,GAClBF,SAAS,CAGTG,QAAQ,EAAED,cAAc;EAE1B,IAAI,CAACA,cAAc,EAAE,OAAO,IAAI;EAEhC,MAAME,OAAO,GAAGH,YAAY,CAACI,WAAW,CAAC,CAAC,CAE7B;EACb,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,CAAEC,KAAK,IAAKf,IAAI,IAAIe,KAAK,IAAIf,IAAI,CAAC;AAC5E","ignoreList":[]}
|
|
@@ -12,7 +12,6 @@ const documents = {
|
|
|
12
12
|
'\n query validateInstruments($instruments: [String]!, $division: Division) {\n mapInstrumentNames(instruments: $instruments, division: $division) {\n name\n displayName\n }\n }\n': types.ValidateInstrumentsDocument
|
|
13
13
|
};
|
|
14
14
|
function graphql(source) {
|
|
15
|
-
|
|
16
|
-
return (_source = documents[source]) !== null && _source !== void 0 ? _source : {};
|
|
15
|
+
return documents[source] ?? {};
|
|
17
16
|
}
|
|
18
17
|
//# sourceMappingURL=gql.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gql.js","names":["types","_interopRequireWildcard","require","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","documents","GetInstrumentsChartDocument","ValidateInstrumentsDocument","graphql","source"
|
|
1
|
+
{"version":3,"file":"gql.js","names":["types","_interopRequireWildcard","require","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","documents","GetInstrumentsChartDocument","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 GetInstrumentsChart($instruments: [String!], $division: Division) {\\n topicalInstrumentsCharts(instruments: $instruments, division: $division) {\\n name\\n chart\\n }\\n }\\n':\n types.GetInstrumentsChartDocument,\n '\\n query validateInstruments($instruments: [String]!, $division: Division) {\\n mapInstrumentNames(instruments: $instruments, division: $division) {\\n name\\n displayName\\n }\\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(\n source: '\\n query GetInstrumentsChart($instruments: [String!], $division: Division) {\\n topicalInstrumentsCharts(instruments: $instruments, division: $division) {\\n name\\n chart\\n }\\n }\\n'\n): (typeof documents)['\\n query GetInstrumentsChart($instruments: [String!], $division: Division) {\\n topicalInstrumentsCharts(instruments: $instruments, division: $division) {\\n name\\n chart\\n }\\n }\\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(\n source: '\\n query validateInstruments($instruments: [String]!, $division: Division) {\\n mapInstrumentNames(instruments: $instruments, division: $division) {\\n name\\n displayName\\n }\\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>> =\n TDocumentNode extends DocumentNode<infer TType, any> ? TType : never;\n"],"mappings":";;;;;;AACA,IAAAA,KAAA,GAAAC,uBAAA,CAAAC,OAAA;AAAmC,SAAAC,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAH,wBAAAG,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAanC,MAAMW,SAAS,GAAG;EAChB,sMAAsM,EACpMvB,KAAK,CAACwB,2BAA2B;EACnC,sMAAsM,EACpMxB,KAAK,CAACyB;AACV,CAAC;AA6BM,SAASC,OAAOA,CAACC,MAAc,EAAE;EACtC,OAAQJ,SAAS,CAASI,MAAM,CAAC,IAAI,CAAC,CAAC;AACzC","ignoreList":[]}
|
|
@@ -5,7 +5,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.validateInstruments = void 0;
|
|
7
7
|
var _client = require("@apollo/client");
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
const validateInstruments = exports.validateInstruments = (0, _client.gql)`
|
|
9
|
+
query validateInstruments($instruments: [String]!, $division: Division) {
|
|
10
|
+
mapInstrumentNames(instruments: $instruments, division: $division) {
|
|
11
|
+
name
|
|
12
|
+
displayName
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
`;
|
|
11
16
|
//# sourceMappingURL=validateInstruments.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateInstruments.js","names":["_client","require","
|
|
1
|
+
{"version":3,"file":"validateInstruments.js","names":["_client","require","validateInstruments","exports","gql"],"sources":["../../../src/gql/validateInstruments.ts"],"sourcesContent":["import { gql } from '@apollo/client';\n\nexport const validateInstruments = gql`\n query validateInstruments($instruments: [String]!, $division: Division) {\n mapInstrumentNames(instruments: $instruments, division: $division) {\n name\n displayName\n }\n }\n`;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEO,MAAMC,mBAAmB,GAAAC,OAAA,CAAAD,mBAAA,GAAG,IAAAE,WAAG;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,CAAC","ignoreList":[]}
|
|
@@ -60,7 +60,7 @@ const Main = _ref => {
|
|
|
60
60
|
isError: showError,
|
|
61
61
|
records: records,
|
|
62
62
|
renderRow: (record, index, isScrolled) => React.createElement(RowWithData, {
|
|
63
|
-
key:
|
|
63
|
+
key: `row_${index}`,
|
|
64
64
|
activeColumns: columns,
|
|
65
65
|
division: division,
|
|
66
66
|
hasBackgroundColor: index % 2 === 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Main.js","names":["useQuery","Size","Table","Tooltip","useLayoutProvider","useLiveRatesQuery","React","useEffect","useState","validateInstruments","Cards","RowWithData","DEFAULT_COLUMNS","INSTRUMENT_TOOLTIP_ID","getHeaderConfig","getRecords","Main","_ref","instruments","division","columns","size","isDesktop","DESKTOP","target","setQuery","records","setRecords","Array","length","fill","loading","data","error","variables","fetchPolicy","instrumentsNames","map","_ref2","instrument","showError","createElement","Fragment","className","headerConfig","isError","renderRow","record","index","isScrolled","key","
|
|
1
|
+
{"version":3,"file":"Main.js","names":["useQuery","Size","Table","Tooltip","useLayoutProvider","useLiveRatesQuery","React","useEffect","useState","validateInstruments","Cards","RowWithData","DEFAULT_COLUMNS","INSTRUMENT_TOOLTIP_ID","getHeaderConfig","getRecords","Main","_ref","instruments","division","columns","size","isDesktop","DESKTOP","target","setQuery","records","setRecords","Array","length","fill","loading","data","error","variables","fetchPolicy","instrumentsNames","map","_ref2","instrument","showError","createElement","Fragment","className","headerConfig","isError","renderRow","record","index","isScrolled","key","activeColumns","hasBackgroundColor","isLoading","id"],"sources":["../../../src/LiveRatesTableWidget/Main.tsx"],"sourcesContent":["import { useQuery } from '@apollo/client';\nimport {\n Size,\n Table,\n Tooltip,\n useLayoutProvider,\n useLiveRatesQuery,\n} from '@oanda/labs-widget-common';\nimport React, { useEffect, useState } from 'react';\n\nimport type {\n ValidateInstrumentsQuery,\n ValidateInstrumentsQueryVariables,\n} from '../gql/types/graphql';\nimport { validateInstruments } from '../gql/validateInstruments';\nimport { Cards, RowWithData } from './components';\nimport { DEFAULT_COLUMNS, INSTRUMENT_TOOLTIP_ID } from './constant';\nimport type { DataRecord, MainProps } from './types';\nimport { getHeaderConfig, getRecords } from './utils';\n\nconst Main = ({\n instruments,\n division,\n columns = DEFAULT_COLUMNS,\n}: MainProps) => {\n const { size } = useLayoutProvider();\n const isDesktop = size === Size.DESKTOP;\n const { target, setQuery } = useLiveRatesQuery();\n const [records, setRecords] = useState<DataRecord[]>(\n new Array(instruments.length).fill({})\n );\n\n const { loading, data, error } = useQuery<\n ValidateInstrumentsQuery,\n ValidateInstrumentsQueryVariables\n >(validateInstruments, {\n variables: {\n instruments,\n division,\n },\n fetchPolicy: 'network-only',\n });\n\n useEffect(() => {\n if (!loading && data) {\n setRecords(getRecords(data)!);\n }\n }, [loading, data]);\n\n const instrumentsNames = records.map(({ instrument }) => instrument);\n\n useEffect(() => {\n if (instrumentsNames[0]) {\n setQuery({ instruments: instrumentsNames });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [records, isDesktop]);\n\n const showError = (!loading && !!error) || (!loading && !data);\n\n return (\n <>\n {size && (\n <div\n className=\"lw-relative lw-text-sm lw-tracking-normal lw-text-text-primary\"\n data-testid=\"live-rates-table-wrapper\"\n >\n {isDesktop ? (\n <div className=\"lw-border lw-border-solid lw-border-border-primary\">\n <Table<DataRecord>\n headerConfig={getHeaderConfig(columns)}\n isError={showError}\n records={records}\n renderRow={(record, index, isScrolled) => (\n <RowWithData\n key={`row_${index}`}\n activeColumns={columns}\n division={division}\n hasBackgroundColor={index % 2 === 0}\n isScrolled={isScrolled}\n loading={loading}\n record={record}\n target={target}\n />\n )}\n />\n </div>\n ) : (\n <Cards\n columns={columns}\n division={division}\n isError={showError}\n isLoading={loading}\n records={records}\n target={target}\n />\n )}\n <Tooltip id={INSTRUMENT_TOOLTIP_ID} />\n </div>\n )}\n </>\n );\n};\n\nexport { Main };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -23,7 +23,7 @@ const CardWithData = _ref => {
|
|
|
23
23
|
const {
|
|
24
24
|
lang
|
|
25
25
|
} = useLocale();
|
|
26
|
-
const checkLoading = id => isLoading || !error &&
|
|
26
|
+
const checkLoading = id => isLoading || !error && updatedRecord?.[id] === undefined;
|
|
27
27
|
return React.createElement(Card, {
|
|
28
28
|
ref: ref,
|
|
29
29
|
"data-testid": "card",
|
|
@@ -43,7 +43,6 @@ const CardWithData = _ref => {
|
|
|
43
43
|
size: LineChartSize.xs
|
|
44
44
|
})), activeColumns.map(item => {
|
|
45
45
|
if (item === ColumnsNames.SELL) {
|
|
46
|
-
var _updatedRecord$sell;
|
|
47
46
|
return React.createElement(CardRow, {
|
|
48
47
|
key: ColumnsNames.SELL,
|
|
49
48
|
isError: !!error,
|
|
@@ -53,10 +52,9 @@ const CardWithData = _ref => {
|
|
|
53
52
|
arrowPosition: ArrowPosition.left,
|
|
54
53
|
movementIndicator: "arrow",
|
|
55
54
|
priceMovement: updatedRecord.sellPriceMovement
|
|
56
|
-
}, React.createElement("span", null,
|
|
55
|
+
}, React.createElement("span", null, updatedRecord.sell?.toFixed(updatedRecord.displayPrecision))));
|
|
57
56
|
}
|
|
58
57
|
if (item === ColumnsNames.BUY) {
|
|
59
|
-
var _updatedRecord$buy;
|
|
60
58
|
return React.createElement(CardRow, {
|
|
61
59
|
key: ColumnsNames.BUY,
|
|
62
60
|
isError: !!error,
|
|
@@ -66,7 +64,7 @@ const CardWithData = _ref => {
|
|
|
66
64
|
arrowPosition: ArrowPosition.left,
|
|
67
65
|
movementIndicator: "arrow",
|
|
68
66
|
priceMovement: updatedRecord.buyPriceMovement
|
|
69
|
-
}, React.createElement("span", null,
|
|
67
|
+
}, React.createElement("span", null, updatedRecord.buy?.toFixed(updatedRecord.displayPrecision))));
|
|
70
68
|
}
|
|
71
69
|
if (item === ColumnsNames.DAILY_CHANGE) {
|
|
72
70
|
return React.createElement(CardRow, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardWithData.js","names":["ArrowPosition","Card","CardHeader","CardRow","LineChartSize","Price","Truncate","useLocale","React","INSTRUMENT_TOOLTIP_ID","ColumnsNames","useRecords","LineChartWithData","CardWithData","_ref","isLoading","record","target","activeColumns","index","division","isLast","updatedRecord","error","ref","instrument","lang","checkLoading","id","undefined","createElement","withoutBottomBorder","number","title","text","displayName","tooltipId","includes","CHART","padding","size","xs","map","item","SELL","
|
|
1
|
+
{"version":3,"file":"CardWithData.js","names":["ArrowPosition","Card","CardHeader","CardRow","LineChartSize","Price","Truncate","useLocale","React","INSTRUMENT_TOOLTIP_ID","ColumnsNames","useRecords","LineChartWithData","CardWithData","_ref","isLoading","record","target","activeColumns","index","division","isLast","updatedRecord","error","ref","instrument","lang","checkLoading","id","undefined","createElement","withoutBottomBorder","number","title","text","displayName","tooltipId","includes","CHART","padding","size","xs","map","item","SELL","key","isError","label","arrowPosition","left","movementIndicator","priceMovement","sellPriceMovement","sell","toFixed","displayPrecision","BUY","buyPriceMovement","buy","DAILY_CHANGE","dailyPercentChange","SPREAD","spread"],"sources":["../../../../../src/LiveRatesTableWidget/components/CardWithData/CardWithData.tsx"],"sourcesContent":["import {\n ArrowPosition,\n Card,\n CardHeader,\n CardRow,\n LineChartSize,\n Price,\n Truncate,\n} from '@oanda/labs-widget-common';\nimport { useLocale } from '@oanda/mono-i18n';\nimport React from 'react';\n\nimport { INSTRUMENT_TOOLTIP_ID } from '../../constant';\nimport type { CardWithDataProps } from '../../types';\nimport { ColumnsNames } from '../../types';\nimport { useRecords } from '../../utils';\nimport { LineChartWithData } from '../LineChartWithData';\n\nconst CardWithData = ({\n isLoading,\n record,\n target,\n activeColumns,\n index,\n division,\n isLast,\n}: CardWithDataProps) => {\n const { updatedRecord, error, ref } = useRecords(\n record,\n record.instrument ? target : null\n );\n const { lang } = useLocale();\n\n const checkLoading = (id: string) =>\n isLoading || (!error && updatedRecord?.[id] === undefined);\n\n return (\n <Card ref={ref} data-testid=\"card\" withoutBottomBorder={!isLast}>\n <CardHeader\n isLoading={isLoading}\n number={index}\n title={\n <Truncate\n text={record.displayName}\n tooltipId={INSTRUMENT_TOOLTIP_ID}\n />\n }\n >\n {activeColumns.includes(ColumnsNames.CHART) && (\n <LineChartWithData\n division={division}\n isLoading={checkLoading('instrument')}\n padding={4}\n record={updatedRecord}\n size={LineChartSize.xs}\n />\n )}\n </CardHeader>\n {activeColumns.map((item) => {\n if (item === ColumnsNames.SELL) {\n return (\n <CardRow\n key={ColumnsNames.SELL}\n isError={!!error}\n isLoading={checkLoading(ColumnsNames.SELL)}\n label={lang('sell_price')}\n >\n <Price\n arrowPosition={ArrowPosition.left}\n movementIndicator=\"arrow\"\n priceMovement={updatedRecord.sellPriceMovement}\n >\n <span>\n {updatedRecord.sell?.toFixed(updatedRecord.displayPrecision)}\n </span>\n </Price>\n </CardRow>\n );\n }\n\n if (item === ColumnsNames.BUY) {\n return (\n <CardRow\n key={ColumnsNames.BUY}\n isError={!!error}\n isLoading={checkLoading(ColumnsNames.BUY)}\n label={lang('buy_price')}\n >\n <Price\n arrowPosition={ArrowPosition.left}\n movementIndicator=\"arrow\"\n priceMovement={updatedRecord.buyPriceMovement}\n >\n <span>\n {updatedRecord.buy?.toFixed(updatedRecord.displayPrecision)}\n </span>\n </Price>\n </CardRow>\n );\n }\n\n if (item === ColumnsNames.DAILY_CHANGE) {\n return (\n <CardRow\n key={ColumnsNames.DAILY_CHANGE}\n isError={!!error}\n isLoading={checkLoading('dailyPercentChange')}\n label={lang('daily_percent_change')}\n >\n <span>{updatedRecord.dailyPercentChange}</span>\n </CardRow>\n );\n }\n\n if (item === ColumnsNames.SPREAD) {\n return (\n <CardRow\n key={ColumnsNames.SPREAD}\n isError={!!error}\n isLoading={checkLoading(ColumnsNames.SPREAD)}\n label={lang('spread')}\n >\n <span>{updatedRecord.spread}</span>\n </CardRow>\n );\n }\n return null;\n })}\n </Card>\n );\n};\n\nexport { CardWithData };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -14,7 +14,7 @@ const Cards = _ref => {
|
|
|
14
14
|
return React.createElement(React.Fragment, null, isError ? React.createElement(Card, null, React.createElement("div", {
|
|
15
15
|
className: "lw-flex lw-h-[150px] lw-w-full lw-items-center lw-justify-center"
|
|
16
16
|
}, React.createElement(ChartError, null))) : React.createElement(React.Fragment, null, records.map((record, index) => React.createElement("div", {
|
|
17
|
-
key:
|
|
17
|
+
key: `card_${startIndex + index}`
|
|
18
18
|
}, React.createElement(CardWithData, {
|
|
19
19
|
activeColumns: columns,
|
|
20
20
|
division: division,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cards.js","names":["Card","ChartError","React","CardWithData","Cards","_ref","records","target","columns","isError","isLoading","division","startIndex","createElement","Fragment","className","map","record","index","key","
|
|
1
|
+
{"version":3,"file":"Cards.js","names":["Card","ChartError","React","CardWithData","Cards","_ref","records","target","columns","isError","isLoading","division","startIndex","createElement","Fragment","className","map","record","index","key","activeColumns","isLast","length"],"sources":["../../../../../src/LiveRatesTableWidget/components/Cards/Cards.tsx"],"sourcesContent":["import { Card, ChartError } from '@oanda/labs-widget-common';\nimport React from 'react';\n\nimport { CardWithData } from '../CardWithData/CardWithData';\nimport type { CardsProps } from './types';\n\nconst Cards = ({\n records,\n target,\n columns,\n isError,\n isLoading,\n division,\n startIndex = 0,\n}: CardsProps) => (\n <>\n {isError ? (\n <Card>\n <div className=\"lw-flex lw-h-[150px] lw-w-full lw-items-center lw-justify-center\">\n <ChartError />\n </div>\n </Card>\n ) : (\n <>\n {records.map((record, index) => (\n <div key={`card_${startIndex + index}`}>\n <CardWithData\n activeColumns={columns}\n division={division}\n index={startIndex + index + 1}\n isError={isError}\n isLast={index + 1 === records.length}\n isLoading={isLoading}\n record={record}\n target={target}\n />\n </div>\n ))}\n </>\n )}\n </>\n);\n\nexport { Cards };\n"],"mappings":"AAAA,SAASA,IAAI,EAAEC,UAAU,QAAQ,2BAA2B;AAC5D,OAAOC,KAAK,MAAM,OAAO;AAEzB,SAASC,YAAY,QAAQ,8BAA8B;AAG3D,MAAMC,KAAK,GAAGC,IAAA;EAAA,IAAC;IACbC,OAAO;IACPC,MAAM;IACNC,OAAO;IACPC,OAAO;IACPC,SAAS;IACTC,QAAQ;IACRC,UAAU,GAAG;EACH,CAAC,GAAAP,IAAA;EAAA,OACXH,KAAA,CAAAW,aAAA,CAAAX,KAAA,CAAAY,QAAA,QACGL,OAAO,GACNP,KAAA,CAAAW,aAAA,CAACb,IAAI,QACHE,KAAA,CAAAW,aAAA;IAAKE,SAAS,EAAC;EAAkE,GAC/Eb,KAAA,CAAAW,aAAA,CAACZ,UAAU,MAAE,CACV,CACD,CAAC,GAEPC,KAAA,CAAAW,aAAA,CAAAX,KAAA,CAAAY,QAAA,QACGR,OAAO,CAACU,GAAG,CAAC,CAACC,MAAM,EAAEC,KAAK,KACzBhB,KAAA,CAAAW,aAAA;IAAKM,GAAG,EAAE,QAAQP,UAAU,GAAGM,KAAK;EAAG,GACrChB,KAAA,CAAAW,aAAA,CAACV,YAAY;IACXiB,aAAa,EAAEZ,OAAQ;IACvBG,QAAQ,EAAEA,QAAS;IACnBO,KAAK,EAAEN,UAAU,GAAGM,KAAK,GAAG,CAAE;IAC9BT,OAAO,EAAEA,OAAQ;IACjBY,MAAM,EAAEH,KAAK,GAAG,CAAC,KAAKZ,OAAO,CAACgB,MAAO;IACrCZ,SAAS,EAAEA,SAAU;IACrBO,MAAM,EAAEA,MAAO;IACfV,MAAM,EAAEA;EAAO,CAChB,CACE,CACN,CACD,CAEJ,CAAC;AAAA,CACJ;AAED,SAASH,KAAK","ignoreList":[]}
|
|
@@ -4,7 +4,6 @@ import React from 'react';
|
|
|
4
4
|
import { getInstrumentsChart } from '../../../gql/getInstrumentsChart';
|
|
5
5
|
import { getChartColor } from './utils';
|
|
6
6
|
const LineChartWithData = _ref => {
|
|
7
|
-
var _data$topicalInstrume;
|
|
8
7
|
let {
|
|
9
8
|
padding,
|
|
10
9
|
record,
|
|
@@ -25,7 +24,7 @@ const LineChartWithData = _ref => {
|
|
|
25
24
|
skip: !record.instrument
|
|
26
25
|
});
|
|
27
26
|
const showLoader = isLoading || loading;
|
|
28
|
-
const chart =
|
|
27
|
+
const chart = data?.topicalInstrumentsCharts?.[0].chart || [];
|
|
29
28
|
const chartColor = getChartColor(record.dailyPercentChange, isDarkMode);
|
|
30
29
|
return React.createElement(React.Fragment, null, showLoader && React.createElement(Loader, {
|
|
31
30
|
size: LoaderSize.md
|
package/dist/module/LiveRatesTableWidget/components/LineChartWithData/LineChartWithData.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LineChartWithData.js","names":["useQuery","LineChart","Loader","LoaderSize","React","getInstrumentsChart","getChartColor","LineChartWithData","_ref","
|
|
1
|
+
{"version":3,"file":"LineChartWithData.js","names":["useQuery","LineChart","Loader","LoaderSize","React","getInstrumentsChart","getChartColor","LineChartWithData","_ref","padding","record","size","isLoading","division","isDarkMode","loading","data","variables","instruments","instrument","fetchPolicy","skip","showLoader","chart","topicalInstrumentsCharts","chartColor","dailyPercentChange","createElement","Fragment","md","color"],"sources":["../../../../../src/LiveRatesTableWidget/components/LineChartWithData/LineChartWithData.tsx"],"sourcesContent":["import { useQuery } from '@apollo/client';\nimport { LineChart, Loader, LoaderSize } from '@oanda/labs-widget-common';\nimport React from 'react';\n\nimport { getInstrumentsChart } from '../../../gql/getInstrumentsChart';\nimport type {\n GetInstrumentsChartQuery,\n GetInstrumentsChartQueryVariables,\n} from '../../../gql/types/graphql';\nimport type { LineChartWithDataProps } from './types';\nimport { getChartColor } from './utils';\n\nconst LineChartWithData = ({\n padding,\n record,\n size,\n isLoading,\n division,\n isDarkMode = false,\n}: LineChartWithDataProps) => {\n const { loading, data } = useQuery<\n GetInstrumentsChartQuery,\n GetInstrumentsChartQueryVariables\n >(getInstrumentsChart, {\n variables: {\n instruments: [record.instrument],\n division,\n },\n fetchPolicy: 'network-only',\n skip: !record.instrument,\n });\n\n const showLoader = isLoading || loading;\n const chart = data?.topicalInstrumentsCharts?.[0].chart || [];\n\n const chartColor = getChartColor(record.dailyPercentChange, isDarkMode);\n\n return (\n <>\n {showLoader && <Loader size={LoaderSize.md} />}\n {!showLoader && (\n <LineChart\n color={chartColor}\n data={chart}\n padding={padding}\n size={size}\n />\n )}\n </>\n );\n};\n\nexport { LineChartWithData };\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,gBAAgB;AACzC,SAASC,SAAS,EAAEC,MAAM,EAAEC,UAAU,QAAQ,2BAA2B;AACzE,OAAOC,KAAK,MAAM,OAAO;AAEzB,SAASC,mBAAmB,QAAQ,kCAAkC;AAMtE,SAASC,aAAa,QAAQ,SAAS;AAEvC,MAAMC,iBAAiB,GAAGC,IAAA,IAOI;EAAA,IAPH;IACzBC,OAAO;IACPC,MAAM;IACNC,IAAI;IACJC,SAAS;IACTC,QAAQ;IACRC,UAAU,GAAG;EACS,CAAC,GAAAN,IAAA;EACvB,MAAM;IAAEO,OAAO;IAAEC;EAAK,CAAC,GAAGhB,QAAQ,CAGhCK,mBAAmB,EAAE;IACrBY,SAAS,EAAE;MACTC,WAAW,EAAE,CAACR,MAAM,CAACS,UAAU,CAAC;MAChCN;IACF,CAAC;IACDO,WAAW,EAAE,cAAc;IAC3BC,IAAI,EAAE,CAACX,MAAM,CAACS;EAChB,CAAC,CAAC;EAEF,MAAMG,UAAU,GAAGV,SAAS,IAAIG,OAAO;EACvC,MAAMQ,KAAK,GAAGP,IAAI,EAAEQ,wBAAwB,GAAG,CAAC,CAAC,CAACD,KAAK,IAAI,EAAE;EAE7D,MAAME,UAAU,GAAGnB,aAAa,CAACI,MAAM,CAACgB,kBAAkB,EAAEZ,UAAU,CAAC;EAEvE,OACEV,KAAA,CAAAuB,aAAA,CAAAvB,KAAA,CAAAwB,QAAA,QACGN,UAAU,IAAIlB,KAAA,CAAAuB,aAAA,CAACzB,MAAM;IAACS,IAAI,EAAER,UAAU,CAAC0B;EAAG,CAAE,CAAC,EAC7C,CAACP,UAAU,IACVlB,KAAA,CAAAuB,aAAA,CAAC1B,SAAS;IACR6B,KAAK,EAAEL,UAAW;IAClBT,IAAI,EAAEO,KAAM;IACZd,OAAO,EAAEA,OAAQ;IACjBE,IAAI,EAAEA;EAAK,CACZ,CAEH,CAAC;AAEP,CAAC;AAED,SAASJ,iBAAiB","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { darkTheme, lightTheme } from '@oanda/labs-widget-common';
|
|
2
2
|
export const getChartColor = (dailyChange, isDarkMode) => {
|
|
3
3
|
const theme = isDarkMode ? darkTheme : lightTheme;
|
|
4
|
-
switch (dailyChange
|
|
4
|
+
switch (dailyChange?.charAt(0)) {
|
|
5
5
|
case '+':
|
|
6
6
|
return theme.ok;
|
|
7
7
|
case '-':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["darkTheme","lightTheme","getChartColor","dailyChange","isDarkMode","theme","charAt","ok","danger","borderDisabled"],"sources":["../../../../../src/LiveRatesTableWidget/components/LineChartWithData/utils.ts"],"sourcesContent":["import { darkTheme, lightTheme } from '@oanda/labs-widget-common';\n\nexport const getChartColor = (dailyChange?: string, isDarkMode?: boolean) => {\n const theme = isDarkMode ? darkTheme : lightTheme;\n\n switch (dailyChange?.charAt(0)) {\n case '+':\n return theme.ok;\n case '-':\n return theme.danger;\n default:\n return theme.borderDisabled;\n }\n};\n"],"mappings":"AAAA,SAASA,SAAS,EAAEC,UAAU,QAAQ,2BAA2B;AAEjE,OAAO,MAAMC,aAAa,GAAGA,CAACC,WAAoB,EAAEC,UAAoB,KAAK;EAC3E,MAAMC,KAAK,GAAGD,UAAU,GAAGJ,SAAS,GAAGC,UAAU;EAEjD,QAAQE,WAAW,
|
|
1
|
+
{"version":3,"file":"utils.js","names":["darkTheme","lightTheme","getChartColor","dailyChange","isDarkMode","theme","charAt","ok","danger","borderDisabled"],"sources":["../../../../../src/LiveRatesTableWidget/components/LineChartWithData/utils.ts"],"sourcesContent":["import { darkTheme, lightTheme } from '@oanda/labs-widget-common';\n\nexport const getChartColor = (dailyChange?: string, isDarkMode?: boolean) => {\n const theme = isDarkMode ? darkTheme : lightTheme;\n\n switch (dailyChange?.charAt(0)) {\n case '+':\n return theme.ok;\n case '-':\n return theme.danger;\n default:\n return theme.borderDisabled;\n }\n};\n"],"mappings":"AAAA,SAASA,SAAS,EAAEC,UAAU,QAAQ,2BAA2B;AAEjE,OAAO,MAAMC,aAAa,GAAGA,CAACC,WAAoB,EAAEC,UAAoB,KAAK;EAC3E,MAAMC,KAAK,GAAGD,UAAU,GAAGJ,SAAS,GAAGC,UAAU;EAEjD,QAAQE,WAAW,EAAEG,MAAM,CAAC,CAAC,CAAC;IAC5B,KAAK,GAAG;MACN,OAAOD,KAAK,CAACE,EAAE;IACjB,KAAK,GAAG;MACN,OAAOF,KAAK,CAACG,MAAM;IACrB;MACE,OAAOH,KAAK,CAACI,cAAc;EAC/B;AACF,CAAC","ignoreList":[]}
|
|
@@ -23,7 +23,7 @@ const RowWithData = _ref => {
|
|
|
23
23
|
error,
|
|
24
24
|
ref
|
|
25
25
|
} = useRecords(record, record.instrument ? target : null);
|
|
26
|
-
const checkLoading = id => loading || !error &&
|
|
26
|
+
const checkLoading = id => loading || !error && updatedRecord?.[id] === undefined;
|
|
27
27
|
return React.createElement(TableRow, {
|
|
28
28
|
ref: ref,
|
|
29
29
|
hasBackgroundColor: hasBackgroundColor,
|
|
@@ -41,7 +41,6 @@ const RowWithData = _ref => {
|
|
|
41
41
|
tooltipId: INSTRUMENT_TOOLTIP_ID
|
|
42
42
|
})), activeColumns.map(item => {
|
|
43
43
|
if (item === ColumnsNames.SELL) {
|
|
44
|
-
var _updatedRecord$sell;
|
|
45
44
|
return React.createElement(TableCell, {
|
|
46
45
|
key: ColumnsNames.SELL,
|
|
47
46
|
additionalPaddingRight: true,
|
|
@@ -50,10 +49,9 @@ const RowWithData = _ref => {
|
|
|
50
49
|
}, React.createElement(Price, {
|
|
51
50
|
movementIndicator: "arrow",
|
|
52
51
|
priceMovement: updatedRecord.sellPriceMovement
|
|
53
|
-
}, React.createElement("span", null,
|
|
52
|
+
}, React.createElement("span", null, updatedRecord.sell?.toFixed(updatedRecord.displayPrecision))));
|
|
54
53
|
}
|
|
55
54
|
if (item === ColumnsNames.BUY) {
|
|
56
|
-
var _updatedRecord$buy;
|
|
57
55
|
return React.createElement(TableCell, {
|
|
58
56
|
key: ColumnsNames.BUY,
|
|
59
57
|
additionalPaddingRight: true,
|
|
@@ -62,7 +60,7 @@ const RowWithData = _ref => {
|
|
|
62
60
|
}, React.createElement(Price, {
|
|
63
61
|
movementIndicator: "arrow",
|
|
64
62
|
priceMovement: updatedRecord.buyPriceMovement
|
|
65
|
-
}, React.createElement("span", null,
|
|
63
|
+
}, React.createElement("span", null, updatedRecord.buy?.toFixed(updatedRecord.displayPrecision))));
|
|
66
64
|
}
|
|
67
65
|
if (item === ColumnsNames.DAILY_CHANGE) {
|
|
68
66
|
return React.createElement(TableCell, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RowWithData.js","names":["LoaderSize","Price","TableCell","TableRow","Truncate","useLayoutProvider","classnames","React","INSTRUMENT_TOOLTIP_ID","ColumnsNames","useRecords","LineChartWithData","RowWithData","_ref","loading","record","hasBackgroundColor","target","activeColumns","division","isScrolled","isDark","updatedRecord","error","ref","instrument","checkLoading","id","undefined","createElement","Fragment","key","INSTRUMENT","classNames","isLoading","type","maxWidth","text","displayName","tooltipId","map","item","SELL","
|
|
1
|
+
{"version":3,"file":"RowWithData.js","names":["LoaderSize","Price","TableCell","TableRow","Truncate","useLayoutProvider","classnames","React","INSTRUMENT_TOOLTIP_ID","ColumnsNames","useRecords","LineChartWithData","RowWithData","_ref","loading","record","hasBackgroundColor","target","activeColumns","division","isScrolled","isDark","updatedRecord","error","ref","instrument","checkLoading","id","undefined","createElement","Fragment","key","INSTRUMENT","classNames","isLoading","type","maxWidth","text","displayName","tooltipId","map","item","SELL","additionalPaddingRight","isError","movementIndicator","priceMovement","sellPriceMovement","sell","toFixed","displayPrecision","BUY","buyPriceMovement","buy","DAILY_CHANGE","dailyPercentChange","CHART","className","SPREAD","loaderSize","sm","spread"],"sources":["../../../../../src/LiveRatesTableWidget/components/RowWithData/RowWithData.tsx"],"sourcesContent":["import {\n LoaderSize,\n Price,\n TableCell,\n TableRow,\n Truncate,\n useLayoutProvider,\n} from '@oanda/labs-widget-common';\nimport classnames from 'classnames';\nimport React from 'react';\n\nimport { INSTRUMENT_TOOLTIP_ID } from '../../constant';\nimport type { RowWithDataProps } from '../../types';\nimport { ColumnsNames } from '../../types';\nimport { useRecords } from '../../utils';\nimport { LineChartWithData } from '../LineChartWithData';\n\nconst RowWithData = ({\n loading,\n record,\n hasBackgroundColor,\n target,\n activeColumns,\n division,\n isScrolled,\n}: RowWithDataProps) => {\n const { isDark } = useLayoutProvider();\n const { updatedRecord, error, ref } = useRecords(\n record,\n record.instrument ? target : null\n );\n\n const checkLoading = (id: string) =>\n loading || (!error && updatedRecord?.[id] === undefined);\n\n return (\n <TableRow\n ref={ref}\n hasBackgroundColor={hasBackgroundColor}\n isScrolled={isScrolled}\n >\n <>\n <TableCell\n key={ColumnsNames.INSTRUMENT}\n classNames={classnames('lw-font-bold', {\n '[&>*:first-child]:lw-border-r [&>*:first-child]:lw-border-border-primary':\n isDark && isScrolled,\n })}\n isLoading={checkLoading(ColumnsNames.INSTRUMENT)}\n type=\"text\"\n >\n <Truncate\n maxWidth={130}\n text={record.displayName}\n tooltipId={INSTRUMENT_TOOLTIP_ID}\n />\n </TableCell>\n {activeColumns.map((item) => {\n if (item === ColumnsNames.SELL) {\n return (\n <TableCell\n key={ColumnsNames.SELL}\n additionalPaddingRight\n isError={!!error}\n isLoading={checkLoading(ColumnsNames.SELL)}\n >\n <Price\n movementIndicator=\"arrow\"\n priceMovement={updatedRecord.sellPriceMovement}\n >\n <span>\n {updatedRecord.sell?.toFixed(\n updatedRecord.displayPrecision\n )}\n </span>\n </Price>\n </TableCell>\n );\n }\n\n if (item === ColumnsNames.BUY) {\n return (\n <TableCell\n key={ColumnsNames.BUY}\n additionalPaddingRight\n isError={!!error}\n isLoading={checkLoading(ColumnsNames.BUY)}\n >\n <Price\n movementIndicator=\"arrow\"\n priceMovement={updatedRecord.buyPriceMovement}\n >\n <span>\n {updatedRecord.buy?.toFixed(updatedRecord.displayPrecision)}\n </span>\n </Price>\n </TableCell>\n );\n }\n\n if (item === ColumnsNames.DAILY_CHANGE) {\n return (\n <TableCell\n key={ColumnsNames.DAILY_CHANGE}\n isError={!!error}\n isLoading={checkLoading('dailyPercentChange')}\n >\n <span>{updatedRecord.dailyPercentChange}</span>\n </TableCell>\n );\n }\n\n if (item === ColumnsNames.CHART) {\n return (\n <td\n key={ColumnsNames.CHART}\n className=\"lw-relative lw-px-3 lw-py-0 lw-text-right\"\n data-testid=\"chart-table-cell\"\n >\n <div className=\"lw-flex lw-justify-center\">\n <LineChartWithData\n division={division}\n isLoading={checkLoading('instrument')}\n record={updatedRecord}\n />\n </div>\n </td>\n );\n }\n\n if (item === ColumnsNames.SPREAD) {\n return (\n <TableCell\n key={ColumnsNames.SPREAD}\n isError={!!error}\n isLoading={checkLoading(ColumnsNames.SPREAD)}\n loaderSize={LoaderSize.sm}\n >\n <span>{updatedRecord.spread}</span>\n </TableCell>\n );\n }\n return null;\n })}\n </>\n </TableRow>\n );\n};\n\nexport { RowWithData };\n"],"mappings":"AAAA,SACEA,UAAU,EACVC,KAAK,EACLC,SAAS,EACTC,QAAQ,EACRC,QAAQ,EACRC,iBAAiB,QACZ,2BAA2B;AAClC,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,MAAM,OAAO;AAEzB,SAASC,qBAAqB,QAAQ,gBAAgB;AAEtD,SAASC,YAAY,QAAQ,aAAa;AAC1C,SAASC,UAAU,QAAQ,aAAa;AACxC,SAASC,iBAAiB,QAAQ,sBAAsB;AAExD,MAAMC,WAAW,GAAGC,IAAA,IAQI;EAAA,IARH;IACnBC,OAAO;IACPC,MAAM;IACNC,kBAAkB;IAClBC,MAAM;IACNC,aAAa;IACbC,QAAQ;IACRC;EACgB,CAAC,GAAAP,IAAA;EACjB,MAAM;IAAEQ;EAAO,CAAC,GAAGhB,iBAAiB,CAAC,CAAC;EACtC,MAAM;IAAEiB,aAAa;IAAEC,KAAK;IAAEC;EAAI,CAAC,GAAGd,UAAU,CAC9CK,MAAM,EACNA,MAAM,CAACU,UAAU,GAAGR,MAAM,GAAG,IAC/B,CAAC;EAED,MAAMS,YAAY,GAAIC,EAAU,IAC9Bb,OAAO,IAAK,CAACS,KAAK,IAAID,aAAa,GAAGK,EAAE,CAAC,KAAKC,SAAU;EAE1D,OACErB,KAAA,CAAAsB,aAAA,CAAC1B,QAAQ;IACPqB,GAAG,EAAEA,GAAI;IACTR,kBAAkB,EAAEA,kBAAmB;IACvCI,UAAU,EAAEA;EAAW,GAEvBb,KAAA,CAAAsB,aAAA,CAAAtB,KAAA,CAAAuB,QAAA,QACEvB,KAAA,CAAAsB,aAAA,CAAC3B,SAAS;IACR6B,GAAG,EAAEtB,YAAY,CAACuB,UAAW;IAC7BC,UAAU,EAAE3B,UAAU,CAAC,cAAc,EAAE;MACrC,0EAA0E,EACxEe,MAAM,IAAID;IACd,CAAC,CAAE;IACHc,SAAS,EAAER,YAAY,CAACjB,YAAY,CAACuB,UAAU,CAAE;IACjDG,IAAI,EAAC;EAAM,GAEX5B,KAAA,CAAAsB,aAAA,CAACzB,QAAQ;IACPgC,QAAQ,EAAE,GAAI;IACdC,IAAI,EAAEtB,MAAM,CAACuB,WAAY;IACzBC,SAAS,EAAE/B;EAAsB,CAClC,CACQ,CAAC,EACXU,aAAa,CAACsB,GAAG,CAAEC,IAAI,IAAK;IAC3B,IAAIA,IAAI,KAAKhC,YAAY,CAACiC,IAAI,EAAE;MAC9B,OACEnC,KAAA,CAAAsB,aAAA,CAAC3B,SAAS;QACR6B,GAAG,EAAEtB,YAAY,CAACiC,IAAK;QACvBC,sBAAsB;QACtBC,OAAO,EAAE,CAAC,CAACrB,KAAM;QACjBW,SAAS,EAAER,YAAY,CAACjB,YAAY,CAACiC,IAAI;MAAE,GAE3CnC,KAAA,CAAAsB,aAAA,CAAC5B,KAAK;QACJ4C,iBAAiB,EAAC,OAAO;QACzBC,aAAa,EAAExB,aAAa,CAACyB;MAAkB,GAE/CxC,KAAA,CAAAsB,aAAA,eACGP,aAAa,CAAC0B,IAAI,EAAEC,OAAO,CAC1B3B,aAAa,CAAC4B,gBAChB,CACI,CACD,CACE,CAAC;IAEhB;IAEA,IAAIT,IAAI,KAAKhC,YAAY,CAAC0C,GAAG,EAAE;MAC7B,OACE5C,KAAA,CAAAsB,aAAA,CAAC3B,SAAS;QACR6B,GAAG,EAAEtB,YAAY,CAAC0C,GAAI;QACtBR,sBAAsB;QACtBC,OAAO,EAAE,CAAC,CAACrB,KAAM;QACjBW,SAAS,EAAER,YAAY,CAACjB,YAAY,CAAC0C,GAAG;MAAE,GAE1C5C,KAAA,CAAAsB,aAAA,CAAC5B,KAAK;QACJ4C,iBAAiB,EAAC,OAAO;QACzBC,aAAa,EAAExB,aAAa,CAAC8B;MAAiB,GAE9C7C,KAAA,CAAAsB,aAAA,eACGP,aAAa,CAAC+B,GAAG,EAAEJ,OAAO,CAAC3B,aAAa,CAAC4B,gBAAgB,CACtD,CACD,CACE,CAAC;IAEhB;IAEA,IAAIT,IAAI,KAAKhC,YAAY,CAAC6C,YAAY,EAAE;MACtC,OACE/C,KAAA,CAAAsB,aAAA,CAAC3B,SAAS;QACR6B,GAAG,EAAEtB,YAAY,CAAC6C,YAAa;QAC/BV,OAAO,EAAE,CAAC,CAACrB,KAAM;QACjBW,SAAS,EAAER,YAAY,CAAC,oBAAoB;MAAE,GAE9CnB,KAAA,CAAAsB,aAAA,eAAOP,aAAa,CAACiC,kBAAyB,CACrC,CAAC;IAEhB;IAEA,IAAId,IAAI,KAAKhC,YAAY,CAAC+C,KAAK,EAAE;MAC/B,OACEjD,KAAA,CAAAsB,aAAA;QACEE,GAAG,EAAEtB,YAAY,CAAC+C,KAAM;QACxBC,SAAS,EAAC,2CAA2C;QACrD,eAAY;MAAkB,GAE9BlD,KAAA,CAAAsB,aAAA;QAAK4B,SAAS,EAAC;MAA2B,GACxClD,KAAA,CAAAsB,aAAA,CAAClB,iBAAiB;QAChBQ,QAAQ,EAAEA,QAAS;QACnBe,SAAS,EAAER,YAAY,CAAC,YAAY,CAAE;QACtCX,MAAM,EAAEO;MAAc,CACvB,CACE,CACH,CAAC;IAET;IAEA,IAAImB,IAAI,KAAKhC,YAAY,CAACiD,MAAM,EAAE;MAChC,OACEnD,KAAA,CAAAsB,aAAA,CAAC3B,SAAS;QACR6B,GAAG,EAAEtB,YAAY,CAACiD,MAAO;QACzBd,OAAO,EAAE,CAAC,CAACrB,KAAM;QACjBW,SAAS,EAAER,YAAY,CAACjB,YAAY,CAACiD,MAAM,CAAE;QAC7CC,UAAU,EAAE3D,UAAU,CAAC4D;MAAG,GAE1BrD,KAAA,CAAAsB,aAAA,eAAOP,aAAa,CAACuC,MAAa,CACzB,CAAC;IAEhB;IACA,OAAO,IAAI;EACb,CAAC,CACD,CACM,CAAC;AAEf,CAAC;AAED,SAASjD,WAAW","ignoreList":[]}
|