@oanda/labs-crowd-view-widget 1.0.20 → 1.0.22
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 +180 -0
- package/dist/main/CrowdViewWidget/Main.js +4 -1
- package/dist/main/CrowdViewWidget/Main.js.map +1 -1
- package/dist/main/CrowdViewWidget/components/Chart/Chart.js +45 -0
- package/dist/main/CrowdViewWidget/components/Chart/Chart.js.map +1 -0
- package/dist/main/CrowdViewWidget/components/Chart/ChartWithData.js +67 -0
- package/dist/main/CrowdViewWidget/components/Chart/ChartWithData.js.map +1 -0
- package/dist/main/CrowdViewWidget/components/Chart/constants.js +11 -0
- package/dist/main/CrowdViewWidget/components/Chart/constants.js.map +1 -0
- package/dist/main/CrowdViewWidget/components/Chart/getOption.js +142 -0
- package/dist/main/CrowdViewWidget/components/Chart/getOption.js.map +1 -0
- package/dist/main/CrowdViewWidget/components/Chart/index.js +28 -0
- package/dist/main/CrowdViewWidget/components/Chart/index.js.map +1 -0
- package/dist/main/CrowdViewWidget/components/Chart/types.js +6 -0
- package/dist/main/CrowdViewWidget/components/Chart/types.js.map +1 -0
- package/dist/main/CrowdViewWidget/components/Chart/utils.js +65 -0
- package/dist/main/CrowdViewWidget/components/Chart/utils.js.map +1 -0
- package/dist/main/CrowdViewWidget/components/Legend/LegendBar.js +3 -6
- package/dist/main/CrowdViewWidget/components/Legend/LegendBar.js.map +1 -1
- package/dist/main/CrowdViewWidget/components/index.js +11 -0
- package/dist/main/CrowdViewWidget/components/index.js.map +1 -1
- package/dist/main/CrowdViewWidget/config.js +5 -1
- package/dist/main/CrowdViewWidget/config.js.map +1 -1
- package/dist/main/CrowdViewWidget/types.js.map +1 -1
- package/dist/main/gql/getOrderPositionBooks.js +30 -0
- package/dist/main/gql/getOrderPositionBooks.js.map +1 -0
- package/dist/main/gql/types/gql.js +1 -0
- package/dist/main/gql/types/gql.js.map +1 -1
- package/dist/main/gql/types/graphql.js +172 -1
- package/dist/main/gql/types/graphql.js.map +1 -1
- package/dist/module/CrowdViewWidget/Main.js +6 -3
- package/dist/module/CrowdViewWidget/Main.js.map +1 -1
- package/dist/module/CrowdViewWidget/components/Chart/Chart.js +37 -0
- package/dist/module/CrowdViewWidget/components/Chart/Chart.js.map +1 -0
- package/dist/module/CrowdViewWidget/components/Chart/ChartWithData.js +58 -0
- package/dist/module/CrowdViewWidget/components/Chart/ChartWithData.js.map +1 -0
- package/dist/module/CrowdViewWidget/components/Chart/constants.js +5 -0
- package/dist/module/CrowdViewWidget/components/Chart/constants.js.map +1 -0
- package/dist/module/CrowdViewWidget/components/Chart/getOption.js +132 -0
- package/dist/module/CrowdViewWidget/components/Chart/getOption.js.map +1 -0
- package/dist/module/CrowdViewWidget/components/Chart/index.js +3 -0
- package/dist/module/CrowdViewWidget/components/Chart/index.js.map +1 -0
- package/dist/module/CrowdViewWidget/components/Chart/types.js +2 -0
- package/dist/module/CrowdViewWidget/components/Chart/types.js.map +1 -0
- package/dist/module/CrowdViewWidget/components/Chart/utils.js +57 -0
- package/dist/module/CrowdViewWidget/components/Chart/utils.js.map +1 -0
- package/dist/module/CrowdViewWidget/components/Legend/LegendBar.js +2 -5
- package/dist/module/CrowdViewWidget/components/Legend/LegendBar.js.map +1 -1
- package/dist/module/CrowdViewWidget/components/index.js +1 -0
- package/dist/module/CrowdViewWidget/components/index.js.map +1 -1
- package/dist/module/CrowdViewWidget/config.js +4 -0
- package/dist/module/CrowdViewWidget/config.js.map +1 -1
- package/dist/module/CrowdViewWidget/types.js.map +1 -1
- package/dist/module/gql/getOrderPositionBooks.js +25 -0
- package/dist/module/gql/getOrderPositionBooks.js.map +1 -0
- package/dist/module/gql/types/gql.js +1 -0
- package/dist/module/gql/types/gql.js.map +1 -1
- package/dist/module/gql/types/graphql.js +171 -0
- package/dist/module/gql/types/graphql.js.map +1 -1
- package/dist/types/CrowdViewWidget/components/Chart/Chart.d.ts +4 -0
- package/dist/types/CrowdViewWidget/components/Chart/ChartWithData.d.ts +4 -0
- package/dist/types/CrowdViewWidget/components/Chart/constants.d.ts +4 -0
- package/dist/types/CrowdViewWidget/components/Chart/getOption.d.ts +115 -0
- package/dist/types/CrowdViewWidget/components/Chart/index.d.ts +2 -0
- package/dist/types/CrowdViewWidget/components/Chart/types.d.ts +25 -0
- package/dist/types/CrowdViewWidget/components/Chart/utils.d.ts +3 -0
- package/dist/types/CrowdViewWidget/components/Legend/LegendBar.d.ts +1 -1
- package/dist/types/CrowdViewWidget/components/index.d.ts +1 -0
- package/dist/types/CrowdViewWidget/config.d.ts +2 -0
- package/dist/types/CrowdViewWidget/types.d.ts +10 -0
- package/dist/types/gql/getOrderPositionBooks.d.ts +2 -0
- package/dist/types/gql/types/gql.d.ts +9 -0
- package/dist/types/gql/types/graphql.d.ts +40 -0
- package/package.json +3 -3
- package/src/CrowdViewWidget/Main.tsx +4 -3
- package/src/CrowdViewWidget/components/Chart/Chart.tsx +59 -0
- package/src/CrowdViewWidget/components/Chart/ChartWithData.tsx +88 -0
- package/src/CrowdViewWidget/components/Chart/constants.tsx +4 -0
- package/src/CrowdViewWidget/components/Chart/getOption.ts +159 -0
- package/src/CrowdViewWidget/components/Chart/index.ts +2 -0
- package/src/CrowdViewWidget/components/Chart/types.ts +36 -0
- package/src/CrowdViewWidget/components/Chart/utils.ts +77 -0
- package/src/CrowdViewWidget/components/Legend/LegendBar.tsx +4 -10
- package/src/CrowdViewWidget/components/index.ts +1 -0
- package/src/CrowdViewWidget/config.ts +5 -0
- package/src/CrowdViewWidget/types.ts +11 -0
- package/src/gql/getOrderPositionBooks.ts +26 -0
- package/src/gql/types/gql.ts +8 -0
- package/src/gql/types/graphql.ts +156 -0
- package/test/Main.test.tsx +55 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Main.js","names":["cn","Select","Size","Tabs","useLayoutProvider","
|
|
1
|
+
{"version":3,"file":"Main.js","names":["cn","Select","Size","Tabs","useLayoutProvider","useLocale","React","useState","BookType","Division","ChartWithData","Legend","granularitySelectConfig","instrumentSelectConfig","instrumentSelectConfigOC","navigationConfig","Main","_ref","division","instrumentSelectConfigWithDivision","Oc","size","isDesktop","DESKTOP","bookType","setBookType","Order","instrument","setInstrument","granularity","setGranularity","lang","createElement","Fragment","className","mobileFullWidth","activeTab","handleClick","e","currentTarget","value","items","labelCallback","options","searchPlaceholder","selectLabel","selectedOption","setSelectedOption","val","id","longValues","shortValues"],"sources":["../../../src/CrowdViewWidget/Main.tsx"],"sourcesContent":["import {\n cn,\n Select,\n Size,\n Tabs,\n useLayoutProvider,\n} from '@oanda/labs-widget-common';\nimport { useLocale } from '@oanda/mono-i18n';\nimport React, { useState } from 'react';\n\nimport { BookType, Division } from '../gql/types/graphql';\nimport { ChartWithData, Legend } from './components';\nimport {\n granularitySelectConfig,\n instrumentSelectConfig,\n instrumentSelectConfigOC,\n navigationConfig,\n} from './config';\nimport type { GranularityId, InstrumentId, MainProps } from './types';\n\nconst Main = ({ division }: MainProps) => {\n const instrumentSelectConfigWithDivision =\n division === Division.Oc\n ? instrumentSelectConfigOC\n : instrumentSelectConfig;\n\n const { size } = useLayoutProvider();\n const isDesktop = size === Size.DESKTOP;\n const [bookType, setBookType] = useState(BookType.Order);\n const [instrument, setInstrument] = useState(\n instrumentSelectConfigWithDivision[0]\n );\n\n const [granularity, setGranularity] = useState(granularitySelectConfig[0]);\n const { lang } = useLocale();\n\n return (\n <>\n {size && (\n <div\n className=\"lw-text-sm lw-tracking-normal\"\n data-testid=\"crowd-view-widget\"\n >\n <Tabs\n mobileFullWidth\n activeTab={bookType}\n handleClick={(e) => setBookType(e.currentTarget.value as BookType)}\n items={navigationConfig}\n labelCallback={lang}\n />\n <div className=\"lw-mb-6 lw-mt-12 lw-flex\">\n <div\n className={cn('lw-mr-2', {\n 'lw-w-full': !isDesktop,\n 'lw-w-[280px]': isDesktop,\n })}\n >\n <Select\n options={instrumentSelectConfigWithDivision}\n searchPlaceholder={lang('search')}\n selectLabel={lang('instrument')}\n selectedOption={instrument}\n setSelectedOption={(val) =>\n setInstrument(val as { id: InstrumentId; label: string })\n }\n />\n </div>\n <div\n className={cn({\n 'lw-w-full': !isDesktop,\n 'lw-w-[280px]': isDesktop,\n })}\n >\n <Select\n options={granularitySelectConfig}\n searchPlaceholder={lang('search')}\n selectLabel={lang('granularity')}\n selectedOption={granularity}\n setSelectedOption={(val) =>\n setGranularity(val as { id: GranularityId; label: string })\n }\n />\n </div>\n </div>\n\n <ChartWithData bookType={bookType} instrument={instrument.id} />\n\n <Legend\n longValues={[0.15, 0.25, 0.4, 0.55]}\n shortValues={[0.15, 0.25, 0.4, 0.55]}\n />\n </div>\n )}\n </>\n );\n};\n\nexport { Main };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { BaseChart, getChartTheme, Theme, useLayoutProvider } from '@oanda/labs-widget-common';
|
|
2
|
+
import { BarChart, CustomChart } from 'echarts/charts';
|
|
3
|
+
import { DataZoomInsideComponent, GraphicComponent, GridSimpleComponent, TooltipComponent } from 'echarts/components';
|
|
4
|
+
import * as echarts from 'echarts/core';
|
|
5
|
+
import { CanvasRenderer } from 'echarts/renderers';
|
|
6
|
+
import React, { useEffect, useRef } from 'react';
|
|
7
|
+
import { CHART_HEIGHT } from './constants';
|
|
8
|
+
import { getDesktopOption, getOption } from './getOption';
|
|
9
|
+
echarts.use([GridSimpleComponent, GraphicComponent, BarChart, CanvasRenderer, DataZoomInsideComponent, CustomChart, TooltipComponent]);
|
|
10
|
+
echarts.registerTheme('dark_theme', getChartTheme(Theme.Dark));
|
|
11
|
+
echarts.registerTheme('light_theme', getChartTheme(Theme.Light));
|
|
12
|
+
const Chart = _ref => {
|
|
13
|
+
let {
|
|
14
|
+
data
|
|
15
|
+
} = _ref;
|
|
16
|
+
const {
|
|
17
|
+
isDark
|
|
18
|
+
} = useLayoutProvider();
|
|
19
|
+
const echartRef = useRef(null);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
if (echartRef.current) {
|
|
22
|
+
const echartInstance = echartRef.current.getEchartsInstance();
|
|
23
|
+
echartInstance.setOption(getDesktopOption({
|
|
24
|
+
isDark
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
}, [echartRef, isDark]);
|
|
28
|
+
return React.createElement(BaseChart, {
|
|
29
|
+
ref: echartRef,
|
|
30
|
+
chartHeight: CHART_HEIGHT,
|
|
31
|
+
echarts: echarts,
|
|
32
|
+
isDark: isDark,
|
|
33
|
+
option: getOption(data)
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
export { Chart };
|
|
37
|
+
//# sourceMappingURL=Chart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Chart.js","names":["BaseChart","getChartTheme","Theme","useLayoutProvider","BarChart","CustomChart","DataZoomInsideComponent","GraphicComponent","GridSimpleComponent","TooltipComponent","echarts","CanvasRenderer","React","useEffect","useRef","CHART_HEIGHT","getDesktopOption","getOption","use","registerTheme","Dark","Light","Chart","_ref","data","isDark","echartRef","current","echartInstance","getEchartsInstance","setOption","createElement","ref","chartHeight","option"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/Chart.tsx"],"sourcesContent":["import type { BaseChartRef } from '@oanda/labs-widget-common';\nimport {\n BaseChart,\n getChartTheme,\n Theme,\n useLayoutProvider,\n} from '@oanda/labs-widget-common';\nimport { BarChart, CustomChart } from 'echarts/charts';\nimport {\n DataZoomInsideComponent,\n GraphicComponent,\n GridSimpleComponent,\n TooltipComponent,\n} from 'echarts/components';\nimport * as echarts from 'echarts/core';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport React, { useEffect, useRef } from 'react';\n\nimport { CHART_HEIGHT } from './constants';\nimport { getDesktopOption, getOption } from './getOption';\nimport type { ChartProps } from './types';\n\necharts.use([\n GridSimpleComponent,\n GraphicComponent,\n BarChart,\n CanvasRenderer,\n DataZoomInsideComponent,\n CustomChart,\n TooltipComponent,\n]);\n\necharts.registerTheme('dark_theme', getChartTheme(Theme.Dark));\necharts.registerTheme('light_theme', getChartTheme(Theme.Light));\n\nconst Chart = ({ data }: ChartProps) => {\n const { isDark } = useLayoutProvider();\n const echartRef = useRef<BaseChartRef | null>(null);\n\n useEffect(() => {\n if (echartRef.current) {\n const echartInstance = echartRef.current.getEchartsInstance();\n\n echartInstance.setOption(getDesktopOption({ isDark }));\n }\n }, [echartRef, isDark]);\n\n return (\n <BaseChart\n ref={echartRef}\n chartHeight={CHART_HEIGHT}\n echarts={echarts}\n isDark={isDark}\n option={getOption(data)}\n />\n );\n};\n\nexport { Chart };\n"],"mappings":"AACA,SACEA,SAAS,EACTC,aAAa,EACbC,KAAK,EACLC,iBAAiB,QACZ,2BAA2B;AAClC,SAASC,QAAQ,EAAEC,WAAW,QAAQ,gBAAgB;AACtD,SACEC,uBAAuB,EACvBC,gBAAgB,EAChBC,mBAAmB,EACnBC,gBAAgB,QACX,oBAAoB;AAC3B,OAAO,KAAKC,OAAO,MAAM,cAAc;AACvC,SAASC,cAAc,QAAQ,mBAAmB;AAClD,OAAOC,KAAK,IAAIC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAEhD,SAASC,YAAY,QAAQ,aAAa;AAC1C,SAASC,gBAAgB,EAAEC,SAAS,QAAQ,aAAa;AAGzDP,OAAO,CAACQ,GAAG,CAAC,CACVV,mBAAmB,EACnBD,gBAAgB,EAChBH,QAAQ,EACRO,cAAc,EACdL,uBAAuB,EACvBD,WAAW,EACXI,gBAAgB,CACjB,CAAC;AAEFC,OAAO,CAACS,aAAa,CAAC,YAAY,EAAElB,aAAa,CAACC,KAAK,CAACkB,IAAI,CAAC,CAAC;AAC9DV,OAAO,CAACS,aAAa,CAAC,aAAa,EAAElB,aAAa,CAACC,KAAK,CAACmB,KAAK,CAAC,CAAC;AAEhE,MAAMC,KAAK,GAAGC,IAAA,IAA0B;EAAA,IAAzB;IAAEC;EAAiB,CAAC,GAAAD,IAAA;EACjC,MAAM;IAAEE;EAAO,CAAC,GAAGtB,iBAAiB,CAAC,CAAC;EACtC,MAAMuB,SAAS,GAAGZ,MAAM,CAAsB,IAAI,CAAC;EAEnDD,SAAS,CAAC,MAAM;IACd,IAAIa,SAAS,CAACC,OAAO,EAAE;MACrB,MAAMC,cAAc,GAAGF,SAAS,CAACC,OAAO,CAACE,kBAAkB,CAAC,CAAC;MAE7DD,cAAc,CAACE,SAAS,CAACd,gBAAgB,CAAC;QAAES;MAAO,CAAC,CAAC,CAAC;IACxD;EACF,CAAC,EAAE,CAACC,SAAS,EAAED,MAAM,CAAC,CAAC;EAEvB,OACEb,KAAA,CAAAmB,aAAA,CAAC/B,SAAS;IACRgC,GAAG,EAAEN,SAAU;IACfO,WAAW,EAAElB,YAAa;IAC1BL,OAAO,EAAEA,OAAQ;IACjBe,MAAM,EAAEA,MAAO;IACfS,MAAM,EAAEjB,SAAS,CAACO,IAAI;EAAE,CACzB,CAAC;AAEN,CAAC;AAED,SAASF,KAAK","ignoreList":[]}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { useQuery } from '@apollo/client';
|
|
2
|
+
import { ChartError, Size, Spinner, SpinnerSize, useLayoutProvider } from '@oanda/labs-widget-common';
|
|
3
|
+
import classnames from 'classnames';
|
|
4
|
+
import React, { useMemo } from 'react';
|
|
5
|
+
import { getOrderPositionBooks } from '../../../gql/getOrderPositionBooks';
|
|
6
|
+
import { Chart } from './Chart';
|
|
7
|
+
import { transformDataForChart } from './utils';
|
|
8
|
+
const ChartWithData = _ref => {
|
|
9
|
+
let {
|
|
10
|
+
instrument,
|
|
11
|
+
bookType
|
|
12
|
+
} = _ref;
|
|
13
|
+
const {
|
|
14
|
+
size
|
|
15
|
+
} = useLayoutProvider();
|
|
16
|
+
const isDesktop = size === Size.DESKTOP;
|
|
17
|
+
const {
|
|
18
|
+
loading,
|
|
19
|
+
data,
|
|
20
|
+
error
|
|
21
|
+
} = useQuery(getOrderPositionBooks, {
|
|
22
|
+
variables: {
|
|
23
|
+
instrument,
|
|
24
|
+
bookType,
|
|
25
|
+
recentHours: 1
|
|
26
|
+
},
|
|
27
|
+
fetchPolicy: 'network-only'
|
|
28
|
+
});
|
|
29
|
+
const isError = !!error;
|
|
30
|
+
const transformedData = useMemo(() => {
|
|
31
|
+
if (!data) return undefined;
|
|
32
|
+
return transformDataForChart(data);
|
|
33
|
+
}, [data]);
|
|
34
|
+
return React.createElement(React.Fragment, null, React.createElement("div", {
|
|
35
|
+
className: classnames('lw-relative lw-w-full', {
|
|
36
|
+
'lw-h-[450px]': isDesktop,
|
|
37
|
+
'lw-h-[390px]': !isDesktop
|
|
38
|
+
})
|
|
39
|
+
}, isError && React.createElement("div", {
|
|
40
|
+
className: classnames('lw-absolute lw-left-0 lw-top-0 lw-flex lw-w-full lw-items-center lw-justify-center lw-border lw-border-solid lw-border-border-primary', {
|
|
41
|
+
'lw-h-full': isDesktop,
|
|
42
|
+
'lw-h-[calc(100%-40px)]': !isDesktop
|
|
43
|
+
})
|
|
44
|
+
}, React.createElement(ChartError, null)), loading && React.createElement("div", {
|
|
45
|
+
className: classnames('lw-absolute lw-left-0 lw-top-0 lw-flex lw-w-full lw-items-center lw-justify-center lw-border lw-border-solid lw-border-border-primary', {
|
|
46
|
+
'lw-h-full': isDesktop,
|
|
47
|
+
'lw-h-[calc(100%-40px)]': !isDesktop
|
|
48
|
+
})
|
|
49
|
+
}, React.createElement(Spinner, {
|
|
50
|
+
size: SpinnerSize.lg
|
|
51
|
+
})), !isError && transformedData && React.createElement("div", {
|
|
52
|
+
className: "lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full"
|
|
53
|
+
}, React.createElement(Chart, {
|
|
54
|
+
data: transformedData
|
|
55
|
+
}))));
|
|
56
|
+
};
|
|
57
|
+
export { ChartWithData };
|
|
58
|
+
//# sourceMappingURL=ChartWithData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartWithData.js","names":["useQuery","ChartError","Size","Spinner","SpinnerSize","useLayoutProvider","classnames","React","useMemo","getOrderPositionBooks","Chart","transformDataForChart","ChartWithData","_ref","instrument","bookType","size","isDesktop","DESKTOP","loading","data","error","variables","recentHours","fetchPolicy","isError","transformedData","undefined","createElement","Fragment","className","lg"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/ChartWithData.tsx"],"sourcesContent":["import { useQuery } from '@apollo/client';\nimport type {\n GetOrderPositionBooksQuery,\n GetOrderPositionBooksQueryVariables,\n} from '@oanda/labs-order-book-widget/src/gql/types/graphql';\nimport {\n ChartError,\n Size,\n Spinner,\n SpinnerSize,\n useLayoutProvider,\n} from '@oanda/labs-widget-common';\nimport classnames from 'classnames';\nimport React, { useMemo } from 'react';\n\nimport { getOrderPositionBooks } from '../../../gql/getOrderPositionBooks';\nimport { Chart } from './Chart';\nimport type { ChartWithDataProps } from './types';\nimport { transformDataForChart } from './utils';\n\nconst ChartWithData = ({ instrument, bookType }: ChartWithDataProps) => {\n const { size } = useLayoutProvider();\n const isDesktop = size === Size.DESKTOP;\n\n const { loading, data, error } = useQuery<\n GetOrderPositionBooksQuery,\n GetOrderPositionBooksQueryVariables\n >(getOrderPositionBooks, {\n variables: {\n instrument,\n bookType,\n recentHours: 1,\n },\n fetchPolicy: 'network-only',\n });\n\n const isError = !!error;\n\n const transformedData = useMemo(() => {\n if (!data) return undefined;\n return transformDataForChart(data);\n }, [data]);\n\n return (\n <>\n <div\n className={classnames('lw-relative lw-w-full', {\n 'lw-h-[450px]': isDesktop,\n 'lw-h-[390px]': !isDesktop,\n })}\n >\n {isError && (\n <div\n className={classnames(\n 'lw-absolute lw-left-0 lw-top-0 lw-flex lw-w-full lw-items-center lw-justify-center lw-border lw-border-solid lw-border-border-primary',\n {\n 'lw-h-full': isDesktop,\n 'lw-h-[calc(100%-40px)]': !isDesktop,\n }\n )}\n >\n <ChartError />\n </div>\n )}\n {loading && (\n <div\n className={classnames(\n 'lw-absolute lw-left-0 lw-top-0 lw-flex lw-w-full lw-items-center lw-justify-center lw-border lw-border-solid lw-border-border-primary',\n {\n 'lw-h-full': isDesktop,\n 'lw-h-[calc(100%-40px)]': !isDesktop,\n }\n )}\n >\n <Spinner size={SpinnerSize.lg} />\n </div>\n )}\n {!isError && transformedData && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full\">\n <Chart data={transformedData} />\n </div>\n )}\n </div>\n </>\n );\n};\n\nexport { ChartWithData };\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,gBAAgB;AAKzC,SACEC,UAAU,EACVC,IAAI,EACJC,OAAO,EACPC,WAAW,EACXC,iBAAiB,QACZ,2BAA2B;AAClC,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,IAAIC,OAAO,QAAQ,OAAO;AAEtC,SAASC,qBAAqB,QAAQ,oCAAoC;AAC1E,SAASC,KAAK,QAAQ,SAAS;AAE/B,SAASC,qBAAqB,QAAQ,SAAS;AAE/C,MAAMC,aAAa,GAAGC,IAAA,IAAkD;EAAA,IAAjD;IAAEC,UAAU;IAAEC;EAA6B,CAAC,GAAAF,IAAA;EACjE,MAAM;IAAEG;EAAK,CAAC,GAAGX,iBAAiB,CAAC,CAAC;EACpC,MAAMY,SAAS,GAAGD,IAAI,KAAKd,IAAI,CAACgB,OAAO;EAEvC,MAAM;IAAEC,OAAO;IAAEC,IAAI;IAAEC;EAAM,CAAC,GAAGrB,QAAQ,CAGvCS,qBAAqB,EAAE;IACvBa,SAAS,EAAE;MACTR,UAAU;MACVC,QAAQ;MACRQ,WAAW,EAAE;IACf,CAAC;IACDC,WAAW,EAAE;EACf,CAAC,CAAC;EAEF,MAAMC,OAAO,GAAG,CAAC,CAACJ,KAAK;EAEvB,MAAMK,eAAe,GAAGlB,OAAO,CAAC,MAAM;IACpC,IAAI,CAACY,IAAI,EAAE,OAAOO,SAAS;IAC3B,OAAOhB,qBAAqB,CAACS,IAAI,CAAC;EACpC,CAAC,EAAE,CAACA,IAAI,CAAC,CAAC;EAEV,OACEb,KAAA,CAAAqB,aAAA,CAAArB,KAAA,CAAAsB,QAAA,QACEtB,KAAA,CAAAqB,aAAA;IACEE,SAAS,EAAExB,UAAU,CAAC,uBAAuB,EAAE;MAC7C,cAAc,EAAEW,SAAS;MACzB,cAAc,EAAE,CAACA;IACnB,CAAC;EAAE,GAEFQ,OAAO,IACNlB,KAAA,CAAAqB,aAAA;IACEE,SAAS,EAAExB,UAAU,CACnB,uIAAuI,EACvI;MACE,WAAW,EAAEW,SAAS;MACtB,wBAAwB,EAAE,CAACA;IAC7B,CACF;EAAE,GAEFV,KAAA,CAAAqB,aAAA,CAAC3B,UAAU,MAAE,CACV,CACN,EACAkB,OAAO,IACNZ,KAAA,CAAAqB,aAAA;IACEE,SAAS,EAAExB,UAAU,CACnB,uIAAuI,EACvI;MACE,WAAW,EAAEW,SAAS;MACtB,wBAAwB,EAAE,CAACA;IAC7B,CACF;EAAE,GAEFV,KAAA,CAAAqB,aAAA,CAACzB,OAAO;IAACa,IAAI,EAAEZ,WAAW,CAAC2B;EAAG,CAAE,CAC7B,CACN,EACA,CAACN,OAAO,IAAIC,eAAe,IAC1BnB,KAAA,CAAAqB,aAAA;IAAKE,SAAS,EAAC;EAA4D,GACzEvB,KAAA,CAAAqB,aAAA,CAAClB,KAAK;IAACU,IAAI,EAAEM;EAAgB,CAAE,CAC5B,CAEJ,CACL,CAAC;AAEP,CAAC;AAED,SAASd,aAAa","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","names":["X_LABEL_SIZE","Y_LABEL_SIZE_DESKTOP","CHART_WIDTH","CHART_HEIGHT"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/constants.tsx"],"sourcesContent":["export const X_LABEL_SIZE = 40;\nexport const Y_LABEL_SIZE_DESKTOP = 60;\nexport const CHART_WIDTH = 9999;\nexport const CHART_HEIGHT = 425;\n"],"mappings":"AAAA,OAAO,MAAMA,YAAY,GAAG,EAAE;AAC9B,OAAO,MAAMC,oBAAoB,GAAG,EAAE;AACtC,OAAO,MAAMC,WAAW,GAAG,IAAI;AAC/B,OAAO,MAAMC,YAAY,GAAG,GAAG","ignoreList":[]}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { getGridLines, getLineCommons } from '@oanda/labs-widget-common';
|
|
2
|
+
import * as echarts from 'echarts/core';
|
|
3
|
+
import { CHART_HEIGHT, CHART_WIDTH, X_LABEL_SIZE, Y_LABEL_SIZE_DESKTOP } from './constants';
|
|
4
|
+
import { getRectColor } from './utils';
|
|
5
|
+
export const getDesktopOption = _ref => {
|
|
6
|
+
let {
|
|
7
|
+
isDark
|
|
8
|
+
} = _ref;
|
|
9
|
+
const desktopGridLines = getGridLines({
|
|
10
|
+
isDark,
|
|
11
|
+
chartWidth: CHART_WIDTH,
|
|
12
|
+
chartHeight: CHART_HEIGHT,
|
|
13
|
+
xLabelsSize: X_LABEL_SIZE,
|
|
14
|
+
yLabelSize: Y_LABEL_SIZE_DESKTOP,
|
|
15
|
+
bottomLeftBox: false
|
|
16
|
+
});
|
|
17
|
+
return {
|
|
18
|
+
yAxis: {
|
|
19
|
+
nameTextStyle: {
|
|
20
|
+
align: 'left',
|
|
21
|
+
padding: [0, 0, 0, 8]
|
|
22
|
+
},
|
|
23
|
+
axisLabel: {
|
|
24
|
+
margin: 8
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
grid: [{
|
|
28
|
+
name: 'main-grid',
|
|
29
|
+
top: '0px',
|
|
30
|
+
left: '0px',
|
|
31
|
+
right: `${Y_LABEL_SIZE_DESKTOP}px`,
|
|
32
|
+
bottom: `${X_LABEL_SIZE}px`
|
|
33
|
+
}],
|
|
34
|
+
graphic: [...desktopGridLines, {
|
|
35
|
+
...getLineCommons(isDark),
|
|
36
|
+
top: 0,
|
|
37
|
+
right: 0,
|
|
38
|
+
shape: {
|
|
39
|
+
x1: 0,
|
|
40
|
+
y1: 0,
|
|
41
|
+
x2: 0,
|
|
42
|
+
y2: 0
|
|
43
|
+
}
|
|
44
|
+
}]
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
export const getOption = _ref2 => {
|
|
48
|
+
let {
|
|
49
|
+
xAxisData,
|
|
50
|
+
ordersPositionsChartData,
|
|
51
|
+
ordersPositionsBucketWidth
|
|
52
|
+
} = _ref2;
|
|
53
|
+
return {
|
|
54
|
+
animation: false,
|
|
55
|
+
dataZoom: [{
|
|
56
|
+
type: 'inside',
|
|
57
|
+
xAxisIndex: 0,
|
|
58
|
+
start: 80,
|
|
59
|
+
end: 100
|
|
60
|
+
}, {
|
|
61
|
+
type: 'inside',
|
|
62
|
+
yAxisIndex: 0,
|
|
63
|
+
startValue: 1.5,
|
|
64
|
+
endValue: 1.7
|
|
65
|
+
}],
|
|
66
|
+
tooltip: {
|
|
67
|
+
trigger: 'axis',
|
|
68
|
+
formatter: '{c}'
|
|
69
|
+
},
|
|
70
|
+
xAxis: {
|
|
71
|
+
type: 'category',
|
|
72
|
+
data: xAxisData,
|
|
73
|
+
axisTick: {
|
|
74
|
+
show: false
|
|
75
|
+
},
|
|
76
|
+
axisLabel: {
|
|
77
|
+
padding: [8, 16, 8, 16],
|
|
78
|
+
margin: 0,
|
|
79
|
+
formatter: value => `${new Date(value).toLocaleTimeString(undefined, {
|
|
80
|
+
hour: '2-digit',
|
|
81
|
+
minute: '2-digit'
|
|
82
|
+
})}`
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
yAxis: {
|
|
86
|
+
type: 'value',
|
|
87
|
+
position: 'right',
|
|
88
|
+
axisLine: {
|
|
89
|
+
show: false
|
|
90
|
+
},
|
|
91
|
+
axisTick: {
|
|
92
|
+
show: false
|
|
93
|
+
},
|
|
94
|
+
axisLabel: {
|
|
95
|
+
showMaxLabel: false,
|
|
96
|
+
showMinLabel: false
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
series: [{
|
|
100
|
+
type: 'custom',
|
|
101
|
+
name: 'heatmap',
|
|
102
|
+
silent: true,
|
|
103
|
+
renderItem: (params, api) => {
|
|
104
|
+
const {
|
|
105
|
+
coordSys
|
|
106
|
+
} = params;
|
|
107
|
+
const xVal = api.value(0);
|
|
108
|
+
const yVal = api.value(1);
|
|
109
|
+
const sentiment = api.value(2);
|
|
110
|
+
const start = api.coord([xVal, yVal]);
|
|
111
|
+
const [rectWidth, rectHeight] = api.size([0, ordersPositionsBucketWidth]);
|
|
112
|
+
const boundaries = coordSys;
|
|
113
|
+
const shape = echarts.graphic.clipRectByRect({
|
|
114
|
+
x: start[0] - rectWidth / 2,
|
|
115
|
+
y: start[1],
|
|
116
|
+
width: rectWidth,
|
|
117
|
+
height: rectHeight
|
|
118
|
+
}, boundaries);
|
|
119
|
+
return shape && {
|
|
120
|
+
type: 'rect',
|
|
121
|
+
shape,
|
|
122
|
+
style: {
|
|
123
|
+
fill: getRectColor(sentiment)
|
|
124
|
+
},
|
|
125
|
+
emphasisDisabled: true
|
|
126
|
+
};
|
|
127
|
+
},
|
|
128
|
+
data: ordersPositionsChartData
|
|
129
|
+
}]
|
|
130
|
+
};
|
|
131
|
+
};
|
|
132
|
+
//# sourceMappingURL=getOption.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getOption.js","names":["getGridLines","getLineCommons","echarts","CHART_HEIGHT","CHART_WIDTH","X_LABEL_SIZE","Y_LABEL_SIZE_DESKTOP","getRectColor","getDesktopOption","_ref","isDark","desktopGridLines","chartWidth","chartHeight","xLabelsSize","yLabelSize","bottomLeftBox","yAxis","nameTextStyle","align","padding","axisLabel","margin","grid","name","top","left","right","bottom","graphic","shape","x1","y1","x2","y2","getOption","_ref2","xAxisData","ordersPositionsChartData","ordersPositionsBucketWidth","animation","dataZoom","type","xAxisIndex","start","end","yAxisIndex","startValue","endValue","tooltip","trigger","formatter","xAxis","data","axisTick","show","value","Date","toLocaleTimeString","undefined","hour","minute","position","axisLine","showMaxLabel","showMinLabel","series","silent","renderItem","params","api","coordSys","xVal","yVal","sentiment","coord","rectWidth","rectHeight","size","boundaries","clipRectByRect","x","y","width","height","style","fill","emphasisDisabled"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/getOption.ts"],"sourcesContent":["import { getGridLines, getLineCommons } from '@oanda/labs-widget-common';\nimport * as echarts from 'echarts/core';\n\nimport {\n CHART_HEIGHT,\n CHART_WIDTH,\n X_LABEL_SIZE,\n Y_LABEL_SIZE_DESKTOP,\n} from './constants';\nimport type { GetOptionType, GetResponsiveOptionsProps } from './types';\nimport { getRectColor } from './utils';\n\nexport const getDesktopOption = ({ isDark }: GetResponsiveOptionsProps) => {\n const desktopGridLines = getGridLines({\n isDark,\n chartWidth: CHART_WIDTH,\n chartHeight: CHART_HEIGHT,\n xLabelsSize: X_LABEL_SIZE,\n yLabelSize: Y_LABEL_SIZE_DESKTOP,\n bottomLeftBox: false,\n });\n\n return {\n yAxis: {\n nameTextStyle: {\n align: 'left',\n padding: [0, 0, 0, 8],\n },\n axisLabel: {\n margin: 8,\n },\n },\n grid: [\n {\n name: 'main-grid',\n top: '0px',\n left: '0px',\n right: `${Y_LABEL_SIZE_DESKTOP}px`,\n bottom: `${X_LABEL_SIZE}px`,\n },\n ],\n graphic: [\n ...desktopGridLines,\n {\n ...getLineCommons(isDark),\n top: 0,\n right: 0,\n shape: {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n },\n },\n ],\n };\n};\n\nexport const getOption: GetOptionType = ({\n xAxisData,\n ordersPositionsChartData,\n ordersPositionsBucketWidth,\n}) => {\n return {\n animation: false,\n dataZoom: [\n {\n type: 'inside',\n xAxisIndex: 0,\n start: 80,\n end: 100,\n },\n {\n type: 'inside',\n yAxisIndex: 0,\n startValue: 1.5,\n endValue: 1.7,\n },\n ],\n tooltip: {\n trigger: 'axis',\n formatter: '{c}',\n },\n xAxis: {\n type: 'category',\n data: xAxisData,\n axisTick: {\n show: false,\n },\n axisLabel: {\n padding: [8, 16, 8, 16],\n margin: 0,\n formatter: (value) =>\n `${new Date(value).toLocaleTimeString(undefined, {\n hour: '2-digit',\n minute: '2-digit',\n })}`,\n },\n },\n yAxis: {\n type: 'value',\n position: 'right',\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: {\n showMaxLabel: false,\n showMinLabel: false,\n },\n },\n series: [\n {\n type: 'custom',\n name: 'heatmap',\n silent: true,\n renderItem: (params, api) => {\n const { coordSys } = params;\n\n const xVal = api.value(0);\n const yVal = api.value(1);\n const sentiment = api.value(2) as number;\n const start = api.coord([xVal, yVal]);\n\n const [rectWidth, rectHeight] = api.size!([\n 0,\n ordersPositionsBucketWidth,\n ]) as number[];\n\n const boundaries = coordSys as unknown as {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n\n const shape = echarts.graphic.clipRectByRect(\n {\n x: start[0] - rectWidth / 2,\n y: start[1],\n width: rectWidth,\n height: rectHeight,\n },\n boundaries\n );\n return (\n shape && {\n type: 'rect',\n shape,\n style: {\n fill: getRectColor(sentiment),\n },\n emphasisDisabled: true,\n }\n );\n },\n data: ordersPositionsChartData,\n },\n ],\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../../src/CrowdViewWidget/components/Chart/index.ts"],"sourcesContent":["export * from './Chart';\nexport * from './ChartWithData';\n"],"mappings":"AAAA,cAAc,SAAS;AACvB,cAAc,iBAAiB","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../../src/CrowdViewWidget/components/Chart/types.ts"],"sourcesContent":["import type { GetOrderPositionBooksQuery } from '@oanda/labs-order-book-widget/src/gql/types/graphql';\nimport type { EChartsOption } from 'echarts';\n\nimport type { BookType } from '../../../gql/types/graphql';\n\ninterface ChartOptionsProps {\n xAxisData: string[];\n ordersPositionsChartData: [\n // timestamp\n string,\n // price\n number,\n // orders-positions sentiment\n number,\n ][];\n ordersPositionsBucketWidth: number;\n}\n\nexport type GetOptionType = (props: ChartOptionsProps) => EChartsOption;\n\nexport interface GetResponsiveOptionsProps {\n isDark: boolean;\n}\n\nexport interface ChartProps {\n data: ChartOptionsProps;\n}\n\nexport interface ChartWithDataProps {\n bookType: BookType;\n instrument: string;\n}\n\nexport type TransformDataForChartType = (\n props: GetOrderPositionBooksQuery\n) => ChartOptionsProps;\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { colorMap } from '../../config';
|
|
2
|
+
export const getRectColor = sentiment => {
|
|
3
|
+
const colors = sentiment < 0 ? colorMap.short : colorMap.long;
|
|
4
|
+
const absSentiment = Math.abs(sentiment);
|
|
5
|
+
if (absSentiment < 0.15) {
|
|
6
|
+
return colors[3];
|
|
7
|
+
}
|
|
8
|
+
if (absSentiment < 0.25) {
|
|
9
|
+
return colors[2];
|
|
10
|
+
}
|
|
11
|
+
if (absSentiment < 0.4) {
|
|
12
|
+
return colors[1];
|
|
13
|
+
}
|
|
14
|
+
if (absSentiment >= 0.4) {
|
|
15
|
+
return colors[0];
|
|
16
|
+
}
|
|
17
|
+
return 'transparent';
|
|
18
|
+
};
|
|
19
|
+
const mockOrderPositionDataForHistoricalData = data => {
|
|
20
|
+
const oneMinuteInMilliseconds = 60000;
|
|
21
|
+
const granularity = oneMinuteInMilliseconds * 5;
|
|
22
|
+
const timeSpan = oneMinuteInMilliseconds * 60 * 24;
|
|
23
|
+
const currentTime = data.orderPositionBooks[0].time;
|
|
24
|
+
const startDate = new Date(currentTime);
|
|
25
|
+
const totalSteps = timeSpan / granularity;
|
|
26
|
+
const orderPositionDataForHistorical = new Array(totalSteps).fill(null).map((_, index) => {
|
|
27
|
+
const newDate = new Date(startDate.getTime() - index * granularity);
|
|
28
|
+
return {
|
|
29
|
+
time: `${newDate.toISOString().slice(0, 19)}Z`,
|
|
30
|
+
buckets: data.orderPositionBooks[0].buckets,
|
|
31
|
+
bucketWidth: data.orderPositionBooks[0].bucketWidth
|
|
32
|
+
};
|
|
33
|
+
});
|
|
34
|
+
return orderPositionDataForHistorical;
|
|
35
|
+
};
|
|
36
|
+
export const transformDataForChart = data => {
|
|
37
|
+
const mockedData = mockOrderPositionDataForHistoricalData(data);
|
|
38
|
+
const xAxisData = mockedData.map(_ref => {
|
|
39
|
+
let {
|
|
40
|
+
time
|
|
41
|
+
} = _ref;
|
|
42
|
+
return time;
|
|
43
|
+
});
|
|
44
|
+
const ordersPositionsChartData = mockedData.flatMap(_ref2 => {
|
|
45
|
+
let {
|
|
46
|
+
buckets,
|
|
47
|
+
time
|
|
48
|
+
} = _ref2;
|
|
49
|
+
return buckets.map(bucket => [time, bucket.price, bucket.longCountPercent - bucket.shortCountPercent]);
|
|
50
|
+
}).filter(item => Math.abs(item[2]) > 0.15);
|
|
51
|
+
return {
|
|
52
|
+
xAxisData,
|
|
53
|
+
ordersPositionsChartData,
|
|
54
|
+
ordersPositionsBucketWidth: mockedData[0].bucketWidth
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","names":["colorMap","getRectColor","sentiment","colors","short","long","absSentiment","Math","abs","mockOrderPositionDataForHistoricalData","data","oneMinuteInMilliseconds","granularity","timeSpan","currentTime","orderPositionBooks","time","startDate","Date","totalSteps","orderPositionDataForHistorical","Array","fill","map","_","index","newDate","getTime","toISOString","slice","buckets","bucketWidth","transformDataForChart","mockedData","xAxisData","_ref","ordersPositionsChartData","flatMap","_ref2","bucket","price","longCountPercent","shortCountPercent","filter","item","ordersPositionsBucketWidth"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/utils.ts"],"sourcesContent":["import type { GetOrderPositionBooksQuery } from '../../../gql/types/graphql';\nimport { colorMap } from '../../config';\nimport type { TransformDataForChartType } from './types';\n\nexport const getRectColor = (sentiment: number) => {\n const colors = sentiment < 0 ? colorMap.short : colorMap.long;\n const absSentiment = Math.abs(sentiment);\n\n if (absSentiment < 0.15) {\n return colors[3];\n }\n\n if (absSentiment < 0.25) {\n return colors[2];\n }\n\n if (absSentiment < 0.4) {\n return colors[1];\n }\n\n if (absSentiment >= 0.4) {\n return colors[0];\n }\n\n return 'transparent';\n};\n\nconst mockOrderPositionDataForHistoricalData = (\n data: GetOrderPositionBooksQuery\n) => {\n const oneMinuteInMilliseconds = 60000;\n const granularity = oneMinuteInMilliseconds * 5; // 5min\n const timeSpan = oneMinuteInMilliseconds * 60 * 24; // 24h\n // const timeSpan = oneMinuteInMilliseconds * 60 * 6 // 6h\n // const timeSpan = oneMinuteInMilliseconds * 15 //15min\n\n const currentTime = data.orderPositionBooks[0]!.time;\n\n const startDate = new Date(currentTime as string);\n const totalSteps = timeSpan / granularity;\n\n const orderPositionDataForHistorical = new Array(totalSteps)\n .fill(null)\n .map((_, index) => {\n const newDate = new Date(startDate.getTime() - index * granularity);\n\n return {\n time: `${newDate.toISOString().slice(0, 19)}Z`,\n buckets: data.orderPositionBooks[0]!.buckets,\n bucketWidth: data.orderPositionBooks[0]!.bucketWidth,\n };\n });\n\n return orderPositionDataForHistorical;\n};\n\nexport const transformDataForChart: TransformDataForChartType = (data) => {\n const mockedData = mockOrderPositionDataForHistoricalData(data);\n\n const xAxisData = mockedData.map(({ time }) => time);\n const ordersPositionsChartData = mockedData\n .flatMap(\n ({ buckets, time }) =>\n buckets.map((bucket) => [\n time,\n bucket!.price,\n bucket!.longCountPercent - bucket!.shortCountPercent,\n ]) as [string, number, number][]\n )\n .filter((item) => Math.abs(item[2]) > 0.15);\n\n return {\n xAxisData,\n ordersPositionsChartData,\n ordersPositionsBucketWidth: mockedData[0]!.bucketWidth,\n };\n};\n"],"mappings":"AACA,SAASA,QAAQ,QAAQ,cAAc;AAGvC,OAAO,MAAMC,YAAY,GAAIC,SAAiB,IAAK;EACjD,MAAMC,MAAM,GAAGD,SAAS,GAAG,CAAC,GAAGF,QAAQ,CAACI,KAAK,GAAGJ,QAAQ,CAACK,IAAI;EAC7D,MAAMC,YAAY,GAAGC,IAAI,CAACC,GAAG,CAACN,SAAS,CAAC;EAExC,IAAII,YAAY,GAAG,IAAI,EAAE;IACvB,OAAOH,MAAM,CAAC,CAAC,CAAC;EAClB;EAEA,IAAIG,YAAY,GAAG,IAAI,EAAE;IACvB,OAAOH,MAAM,CAAC,CAAC,CAAC;EAClB;EAEA,IAAIG,YAAY,GAAG,GAAG,EAAE;IACtB,OAAOH,MAAM,CAAC,CAAC,CAAC;EAClB;EAEA,IAAIG,YAAY,IAAI,GAAG,EAAE;IACvB,OAAOH,MAAM,CAAC,CAAC,CAAC;EAClB;EAEA,OAAO,aAAa;AACtB,CAAC;AAED,MAAMM,sCAAsC,GAC1CC,IAAgC,IAC7B;EACH,MAAMC,uBAAuB,GAAG,KAAK;EACrC,MAAMC,WAAW,GAAGD,uBAAuB,GAAG,CAAC;EAC/C,MAAME,QAAQ,GAAGF,uBAAuB,GAAG,EAAE,GAAG,EAAE;EAIlD,MAAMG,WAAW,GAAGJ,IAAI,CAACK,kBAAkB,CAAC,CAAC,CAAC,CAAEC,IAAI;EAEpD,MAAMC,SAAS,GAAG,IAAIC,IAAI,CAACJ,WAAqB,CAAC;EACjD,MAAMK,UAAU,GAAGN,QAAQ,GAAGD,WAAW;EAEzC,MAAMQ,8BAA8B,GAAG,IAAIC,KAAK,CAACF,UAAU,CAAC,CACzDG,IAAI,CAAC,IAAI,CAAC,CACVC,GAAG,CAAC,CAACC,CAAC,EAAEC,KAAK,KAAK;IACjB,MAAMC,OAAO,GAAG,IAAIR,IAAI,CAACD,SAAS,CAACU,OAAO,CAAC,CAAC,GAAGF,KAAK,GAAGb,WAAW,CAAC;IAEnE,OAAO;MACLI,IAAI,EAAE,GAAGU,OAAO,CAACE,WAAW,CAAC,CAAC,CAACC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG;MAC9CC,OAAO,EAAEpB,IAAI,CAACK,kBAAkB,CAAC,CAAC,CAAC,CAAEe,OAAO;MAC5CC,WAAW,EAAErB,IAAI,CAACK,kBAAkB,CAAC,CAAC,CAAC,CAAEgB;IAC3C,CAAC;EACH,CAAC,CAAC;EAEJ,OAAOX,8BAA8B;AACvC,CAAC;AAED,OAAO,MAAMY,qBAAgD,GAAItB,IAAI,IAAK;EACxE,MAAMuB,UAAU,GAAGxB,sCAAsC,CAACC,IAAI,CAAC;EAE/D,MAAMwB,SAAS,GAAGD,UAAU,CAACV,GAAG,CAACY,IAAA;IAAA,IAAC;MAAEnB;IAAK,CAAC,GAAAmB,IAAA;IAAA,OAAKnB,IAAI;EAAA,EAAC;EACpD,MAAMoB,wBAAwB,GAAGH,UAAU,CACxCI,OAAO,CACNC,KAAA;IAAA,IAAC;MAAER,OAAO;MAAEd;IAAK,CAAC,GAAAsB,KAAA;IAAA,OAChBR,OAAO,CAACP,GAAG,CAAEgB,MAAM,IAAK,CACtBvB,IAAI,EACJuB,MAAM,CAAEC,KAAK,EACbD,MAAM,CAAEE,gBAAgB,GAAGF,MAAM,CAAEG,iBAAiB,CACrD,CAAC;EAAA,CACN,CAAC,CACAC,MAAM,CAAEC,IAAI,IAAKrC,IAAI,CAACC,GAAG,CAACoC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;EAE7C,OAAO;IACLV,SAAS;IACTE,wBAAwB;IACxBS,0BAA0B,EAAEZ,UAAU,CAAC,CAAC,CAAC,CAAEF;EAC7C,CAAC;AACH,CAAC","ignoreList":[]}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
|
|
3
|
-
long: ['#00857333', '#00715F99', '#00857399', '#008573CC'],
|
|
4
|
-
short: ['#DA632566', '#DA632599', '#DA6325CC', '#DA6325']
|
|
5
|
-
};
|
|
2
|
+
import { colorMap } from '../../config';
|
|
6
3
|
export const LegendBar = _ref => {
|
|
7
4
|
let {
|
|
8
5
|
values,
|
|
@@ -25,7 +22,7 @@ export const LegendBar = _ref => {
|
|
|
25
22
|
className: "lw-flex lw-w-full"
|
|
26
23
|
}, values.map(value => React.createElement("div", {
|
|
27
24
|
key: `${value}_${type}`,
|
|
28
|
-
className: "lw-flex lw-w-1/4
|
|
25
|
+
className: "lw-flex lw-w-1/4"
|
|
29
26
|
}, React.createElement("span", {
|
|
30
27
|
className: "lw-whitespace-nowrap lw-font-sans lw-text-xs lw-text-text-primary"
|
|
31
28
|
}, value.toFixed(2), "% ", label)))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LegendBar.js","names":["React","colorMap","
|
|
1
|
+
{"version":3,"file":"LegendBar.js","names":["React","colorMap","LegendBar","_ref","values","type","label","colors","createElement","className","map","_","index","key","style","backgroundColor","value","toFixed"],"sources":["../../../../../src/CrowdViewWidget/components/Legend/LegendBar.tsx"],"sourcesContent":["import React from 'react';\n\nimport { colorMap } from '../../config';\n\nexport type LegendType = 'long' | 'short';\n\ninterface LegendBarProps {\n values: number[];\n type: LegendType;\n label: string;\n}\n\nexport const LegendBar = ({ values, type, label }: LegendBarProps) => {\n const colors = colorMap[type];\n\n return (\n <div className=\"lw-flex lw-w-full lw-flex-col lw-space-y-1 lw-border-border-primary\">\n <div className=\"lw-flex lw-h-2 lw-w-full lw-overflow-hidden lw-border lw-border-border-primary\">\n {values.map((_, index) => (\n <div\n key={`${label}_${colors[index]}__color`}\n className=\"lw-h-full lw-flex-1\"\n data-testid=\"legend-bar-segment\"\n style={{\n backgroundColor: colors[index],\n }}\n />\n ))}\n </div>\n\n <div className=\"lw-flex lw-w-full\">\n {values.map((value) => (\n <div key={`${value}_${type}`} className=\"lw-flex lw-w-1/4\">\n <span className=\"lw-whitespace-nowrap lw-font-sans lw-text-xs lw-text-text-primary\">\n {value.toFixed(2)}% {label}\n </span>\n </div>\n ))}\n </div>\n </div>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAASC,QAAQ,QAAQ,cAAc;AAUvC,OAAO,MAAMC,SAAS,GAAGC,IAAA,IAA6C;EAAA,IAA5C;IAAEC,MAAM;IAAEC,IAAI;IAAEC;EAAsB,CAAC,GAAAH,IAAA;EAC/D,MAAMI,MAAM,GAAGN,QAAQ,CAACI,IAAI,CAAC;EAE7B,OACEL,KAAA,CAAAQ,aAAA;IAAKC,SAAS,EAAC;EAAqE,GAClFT,KAAA,CAAAQ,aAAA;IAAKC,SAAS,EAAC;EAAgF,GAC5FL,MAAM,CAACM,GAAG,CAAC,CAACC,CAAC,EAAEC,KAAK,KACnBZ,KAAA,CAAAQ,aAAA;IACEK,GAAG,EAAE,GAAGP,KAAK,IAAIC,MAAM,CAACK,KAAK,CAAC,SAAU;IACxCH,SAAS,EAAC,qBAAqB;IAC/B,eAAY,oBAAoB;IAChCK,KAAK,EAAE;MACLC,eAAe,EAAER,MAAM,CAACK,KAAK;IAC/B;EAAE,CACH,CACF,CACE,CAAC,EAENZ,KAAA,CAAAQ,aAAA;IAAKC,SAAS,EAAC;EAAmB,GAC/BL,MAAM,CAACM,GAAG,CAAEM,KAAK,IAChBhB,KAAA,CAAAQ,aAAA;IAAKK,GAAG,EAAE,GAAGG,KAAK,IAAIX,IAAI,EAAG;IAACI,SAAS,EAAC;EAAkB,GACxDT,KAAA,CAAAQ,aAAA;IAAMC,SAAS,EAAC;EAAmE,GAChFO,KAAK,CAACC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAE,EAACX,KACjB,CACH,CACN,CACE,CACF,CAAC;AAEV,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/CrowdViewWidget/components/index.ts"],"sourcesContent":["export * from './Legend';\n"],"mappings":"AAAA,cAAc,UAAU","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/CrowdViewWidget/components/index.ts"],"sourcesContent":["export * from './Chart';\nexport * from './Legend';\n"],"mappings":"AAAA,cAAc,SAAS;AACvB,cAAc,UAAU","ignoreList":[]}
|
|
@@ -89,4 +89,8 @@ const granularitySelectConfig = [{
|
|
|
89
89
|
label: '1_day'
|
|
90
90
|
}];
|
|
91
91
|
export { granularitySelectConfig, instrumentPrecisionConfig, instrumentSelectConfig, instrumentSelectConfigOC, navigationConfig };
|
|
92
|
+
export const colorMap = {
|
|
93
|
+
long: ['#00857333', '#00715F99', '#00857399', '#008573CC'],
|
|
94
|
+
short: ['#DA632566', '#DA632599', '#DA6325CC', '#DA6325']
|
|
95
|
+
};
|
|
92
96
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","names":["BookType","GranularityId","InstrumentId","navigationConfig","id","Order","label","Position","instrumentSelectConfigOC","EUR_AUD","EUR_GBP","EUR_JPY","EUR_USD","EUR_CHF","USD_CHF","USD_JPY","USD_CAD","GBP_USD","GBP_JPY","GBP_CHF","AUD_JPY","AUD_USD","NZD_USD","instrumentSelectConfig","XAU_USD","XAG_USD","instrumentPrecisionConfig","granularitySelectConfig","M5","M15","H1","D1"],"sources":["../../../src/CrowdViewWidget/config.ts"],"sourcesContent":["import { BookType } from '../gql/types/graphql';\nimport { GranularityId, InstrumentId } from './types';\n\nconst navigationConfig = [\n {\n id: BookType.Order,\n label: 'order_book',\n },\n {\n id: BookType.Position,\n label: 'position_book',\n },\n];\n\nconst instrumentSelectConfigOC = [\n {\n id: InstrumentId.EUR_AUD,\n label: 'EUR/AUD',\n },\n {\n id: InstrumentId.EUR_GBP,\n label: 'EUR/GBP',\n },\n {\n id: InstrumentId.EUR_JPY,\n label: 'EUR/JPY',\n },\n {\n id: InstrumentId.EUR_USD,\n label: 'EUR/USD',\n },\n {\n id: InstrumentId.EUR_CHF,\n label: 'EUR/CHF',\n },\n {\n id: InstrumentId.USD_CHF,\n label: 'USD/CHF',\n },\n {\n id: InstrumentId.USD_JPY,\n label: 'USD/JPY',\n },\n {\n id: InstrumentId.USD_CAD,\n label: 'USD/CAD',\n },\n {\n id: InstrumentId.GBP_USD,\n label: 'GBP/USD',\n },\n {\n id: InstrumentId.GBP_JPY,\n label: 'GBP/JPY',\n },\n {\n id: InstrumentId.GBP_CHF,\n label: 'GBP/CHF',\n },\n {\n id: InstrumentId.AUD_JPY,\n label: 'AUD/JPY',\n },\n {\n id: InstrumentId.AUD_USD,\n label: 'AUD/USD',\n },\n {\n id: InstrumentId.NZD_USD,\n label: 'NZD/USD',\n },\n];\n\nconst instrumentSelectConfig = [\n ...instrumentSelectConfigOC,\n {\n id: InstrumentId.XAU_USD,\n label: 'XAU/USD',\n },\n {\n id: InstrumentId.XAG_USD,\n label: 'XAG/USD',\n },\n];\n\nconst instrumentPrecisionConfig: Record<InstrumentId, number> = {\n [InstrumentId.EUR_AUD]: 5,\n [InstrumentId.EUR_GBP]: 5,\n [InstrumentId.EUR_JPY]: 3,\n [InstrumentId.EUR_USD]: 5,\n [InstrumentId.EUR_CHF]: 5,\n [InstrumentId.USD_CHF]: 5,\n [InstrumentId.USD_JPY]: 3,\n [InstrumentId.USD_CAD]: 5,\n [InstrumentId.GBP_USD]: 5,\n [InstrumentId.GBP_JPY]: 3,\n [InstrumentId.GBP_CHF]: 5,\n [InstrumentId.AUD_JPY]: 3,\n [InstrumentId.AUD_USD]: 5,\n [InstrumentId.NZD_USD]: 5,\n [InstrumentId.XAU_USD]: 3,\n [InstrumentId.XAG_USD]: 5,\n};\n\nconst granularitySelectConfig = [\n {\n id: GranularityId.M5,\n label: '5_minutes',\n },\n {\n id: GranularityId.M15,\n label: '15_minutes',\n },\n {\n id: GranularityId.H1,\n label: '1_hour',\n },\n {\n id: GranularityId.D1,\n label: '1_day',\n },\n];\n\nexport {\n granularitySelectConfig,\n instrumentPrecisionConfig,\n instrumentSelectConfig,\n instrumentSelectConfigOC,\n navigationConfig,\n};\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,sBAAsB;
|
|
1
|
+
{"version":3,"file":"config.js","names":["BookType","GranularityId","InstrumentId","navigationConfig","id","Order","label","Position","instrumentSelectConfigOC","EUR_AUD","EUR_GBP","EUR_JPY","EUR_USD","EUR_CHF","USD_CHF","USD_JPY","USD_CAD","GBP_USD","GBP_JPY","GBP_CHF","AUD_JPY","AUD_USD","NZD_USD","instrumentSelectConfig","XAU_USD","XAG_USD","instrumentPrecisionConfig","granularitySelectConfig","M5","M15","H1","D1","colorMap","long","short"],"sources":["../../../src/CrowdViewWidget/config.ts"],"sourcesContent":["import { BookType } from '../gql/types/graphql';\nimport type { LegendType } from './components/Legend/LegendBar';\nimport { GranularityId, InstrumentId } from './types';\n\nconst navigationConfig = [\n {\n id: BookType.Order,\n label: 'order_book',\n },\n {\n id: BookType.Position,\n label: 'position_book',\n },\n];\n\nconst instrumentSelectConfigOC = [\n {\n id: InstrumentId.EUR_AUD,\n label: 'EUR/AUD',\n },\n {\n id: InstrumentId.EUR_GBP,\n label: 'EUR/GBP',\n },\n {\n id: InstrumentId.EUR_JPY,\n label: 'EUR/JPY',\n },\n {\n id: InstrumentId.EUR_USD,\n label: 'EUR/USD',\n },\n {\n id: InstrumentId.EUR_CHF,\n label: 'EUR/CHF',\n },\n {\n id: InstrumentId.USD_CHF,\n label: 'USD/CHF',\n },\n {\n id: InstrumentId.USD_JPY,\n label: 'USD/JPY',\n },\n {\n id: InstrumentId.USD_CAD,\n label: 'USD/CAD',\n },\n {\n id: InstrumentId.GBP_USD,\n label: 'GBP/USD',\n },\n {\n id: InstrumentId.GBP_JPY,\n label: 'GBP/JPY',\n },\n {\n id: InstrumentId.GBP_CHF,\n label: 'GBP/CHF',\n },\n {\n id: InstrumentId.AUD_JPY,\n label: 'AUD/JPY',\n },\n {\n id: InstrumentId.AUD_USD,\n label: 'AUD/USD',\n },\n {\n id: InstrumentId.NZD_USD,\n label: 'NZD/USD',\n },\n];\n\nconst instrumentSelectConfig = [\n ...instrumentSelectConfigOC,\n {\n id: InstrumentId.XAU_USD,\n label: 'XAU/USD',\n },\n {\n id: InstrumentId.XAG_USD,\n label: 'XAG/USD',\n },\n];\n\nconst instrumentPrecisionConfig: Record<InstrumentId, number> = {\n [InstrumentId.EUR_AUD]: 5,\n [InstrumentId.EUR_GBP]: 5,\n [InstrumentId.EUR_JPY]: 3,\n [InstrumentId.EUR_USD]: 5,\n [InstrumentId.EUR_CHF]: 5,\n [InstrumentId.USD_CHF]: 5,\n [InstrumentId.USD_JPY]: 3,\n [InstrumentId.USD_CAD]: 5,\n [InstrumentId.GBP_USD]: 5,\n [InstrumentId.GBP_JPY]: 3,\n [InstrumentId.GBP_CHF]: 5,\n [InstrumentId.AUD_JPY]: 3,\n [InstrumentId.AUD_USD]: 5,\n [InstrumentId.NZD_USD]: 5,\n [InstrumentId.XAU_USD]: 3,\n [InstrumentId.XAG_USD]: 5,\n};\n\nconst granularitySelectConfig = [\n {\n id: GranularityId.M5,\n label: '5_minutes',\n },\n {\n id: GranularityId.M15,\n label: '15_minutes',\n },\n {\n id: GranularityId.H1,\n label: '1_hour',\n },\n {\n id: GranularityId.D1,\n label: '1_day',\n },\n];\n\nexport {\n granularitySelectConfig,\n instrumentPrecisionConfig,\n instrumentSelectConfig,\n instrumentSelectConfigOC,\n navigationConfig,\n};\nexport const colorMap: Record<LegendType, string[]> = {\n long: ['#00857333', '#00715F99', '#00857399', '#008573CC'],\n short: ['#DA632566', '#DA632599', '#DA6325CC', '#DA6325'],\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":["InstrumentId","GranularityId"],"sources":["../../../src/CrowdViewWidget/types.ts"],"sourcesContent":["import type { WidgetConfig } from '@oanda/labs-widget-common';\n\nimport type { Division } from '../gql/types/graphql';\n\nexport interface CrowdViewConfig extends WidgetConfig {}\n\nexport interface MainProps {\n instrument?: InstrumentId;\n division: Division;\n}\n\nexport enum InstrumentId {\n EUR_AUD = 'EURAUD',\n EUR_GBP = 'EURGBP',\n EUR_JPY = 'EURJPY',\n EUR_USD = 'EURUSD',\n EUR_CHF = 'EURCHF',\n USD_CHF = 'USDCHF',\n USD_JPY = 'USDJPY',\n USD_CAD = 'USDCAD',\n GBP_USD = 'GBPUSD',\n GBP_JPY = 'GBPJPY',\n GBP_CHF = 'GBPCHF',\n AUD_JPY = 'AUDJPY',\n AUD_USD = 'AUDUSD',\n NZD_USD = 'NZDUSD',\n XAU_USD = 'XAUUSD',\n XAG_USD = 'XAGUSD',\n}\n\nexport enum GranularityId {\n M5 = '5M',\n M15 = '15M',\n H1 = '1H',\n D1 = '1D',\n}\n"],"mappings":"AAWA,WAAYA,YAAY,aAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA;AAmBxB,WAAYC,aAAa,aAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"types.js","names":["InstrumentId","GranularityId"],"sources":["../../../src/CrowdViewWidget/types.ts"],"sourcesContent":["import type { WidgetConfig } from '@oanda/labs-widget-common';\n\nimport type { Division } from '../gql/types/graphql';\n\nexport interface CrowdViewConfig extends WidgetConfig {}\n\nexport interface MainProps {\n instrument?: InstrumentId;\n division: Division;\n}\n\nexport enum InstrumentId {\n EUR_AUD = 'EURAUD',\n EUR_GBP = 'EURGBP',\n EUR_JPY = 'EURJPY',\n EUR_USD = 'EURUSD',\n EUR_CHF = 'EURCHF',\n USD_CHF = 'USDCHF',\n USD_JPY = 'USDJPY',\n USD_CAD = 'USDCAD',\n GBP_USD = 'GBPUSD',\n GBP_JPY = 'GBPJPY',\n GBP_CHF = 'GBPCHF',\n AUD_JPY = 'AUDJPY',\n AUD_USD = 'AUDUSD',\n NZD_USD = 'NZDUSD',\n XAU_USD = 'XAUUSD',\n XAG_USD = 'XAGUSD',\n}\n\nexport enum GranularityId {\n M5 = '5M',\n M15 = '15M',\n H1 = '1H',\n D1 = '1D',\n}\n\nexport interface OrdersPositionsData {\n price: number;\n buckets: {\n price: number;\n longCountPercent: number;\n shortCountPercent: number;\n }[];\n bucketWidth: number;\n timestamp: number;\n}\n"],"mappings":"AAWA,WAAYA,YAAY,aAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA;AAmBxB,WAAYC,aAAa,aAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA","ignoreList":[]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { gql } from '@apollo/client';
|
|
2
|
+
const getOrderPositionBooks = gql`
|
|
3
|
+
query GetOrderPositionBooks(
|
|
4
|
+
$instrument: String!
|
|
5
|
+
$bookType: BookType!
|
|
6
|
+
$recentHours: Int
|
|
7
|
+
) {
|
|
8
|
+
orderPositionBooks(
|
|
9
|
+
instrument: $instrument
|
|
10
|
+
bookType: $bookType
|
|
11
|
+
recentHours: $recentHours
|
|
12
|
+
) {
|
|
13
|
+
bucketWidth
|
|
14
|
+
price
|
|
15
|
+
time
|
|
16
|
+
buckets {
|
|
17
|
+
price
|
|
18
|
+
longCountPercent
|
|
19
|
+
shortCountPercent
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
`;
|
|
24
|
+
export { getOrderPositionBooks };
|
|
25
|
+
//# sourceMappingURL=getOrderPositionBooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getOrderPositionBooks.js","names":["gql","getOrderPositionBooks"],"sources":["../../../src/gql/getOrderPositionBooks.ts"],"sourcesContent":["import { gql } from '@apollo/client';\n\nconst getOrderPositionBooks = gql`\n query GetOrderPositionBooks(\n $instrument: String!\n $bookType: BookType!\n $recentHours: Int\n ) {\n orderPositionBooks(\n instrument: $instrument\n bookType: $bookType\n recentHours: $recentHours\n ) {\n bucketWidth\n price\n time\n buckets {\n price\n longCountPercent\n shortCountPercent\n }\n }\n }\n`;\n\nexport { getOrderPositionBooks };\n"],"mappings":"AAAA,SAASA,GAAG,QAAQ,gBAAgB;AAEpC,MAAMC,qBAAqB,GAAGD,GAAG;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAED,SAASC,qBAAqB","ignoreList":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as types from './graphql';
|
|
2
2
|
const documents = {
|
|
3
|
+
'\n query GetOrderPositionBooks(\n $instrument: String!\n $bookType: BookType!\n $recentHours: Int\n ) {\n orderPositionBooks(\n instrument: $instrument\n bookType: $bookType\n recentHours: $recentHours\n ) {\n bucketWidth\n price\n time\n buckets {\n price\n longCountPercent\n shortCountPercent\n }\n }\n }\n': types.GetOrderPositionBooksDocument,
|
|
3
4
|
'\n query validateInstruments($instruments: [String]!, $division: Division) {\n mapInstrumentNames(instruments: $instruments, division: $division) {\n name\n displayName\n }\n }\n': types.ValidateInstrumentsDocument
|
|
4
5
|
};
|
|
5
6
|
export function graphql(source) {
|
|
@@ -1 +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':\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 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,OAAO,KAAKA,KAAK,MAAM,WAAW;AAalC,MAAMC,SAAS,GAAG;EAChB,
|
|
1
|
+
{"version":3,"file":"gql.js","names":["types","documents","GetOrderPositionBooksDocument","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 GetOrderPositionBooks(\\n $instrument: String!\\n $bookType: BookType!\\n $recentHours: Int\\n ) {\\n orderPositionBooks(\\n instrument: $instrument\\n bookType: $bookType\\n recentHours: $recentHours\\n ) {\\n bucketWidth\\n price\\n time\\n buckets {\\n price\\n longCountPercent\\n shortCountPercent\\n }\\n }\\n }\\n':\n types.GetOrderPositionBooksDocument,\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 GetOrderPositionBooks(\\n $instrument: String!\\n $bookType: BookType!\\n $recentHours: Int\\n ) {\\n orderPositionBooks(\\n instrument: $instrument\\n bookType: $bookType\\n recentHours: $recentHours\\n ) {\\n bucketWidth\\n price\\n time\\n buckets {\\n price\\n longCountPercent\\n shortCountPercent\\n }\\n }\\n }\\n'\n): (typeof documents)['\\n query GetOrderPositionBooks(\\n $instrument: String!\\n $bookType: BookType!\\n $recentHours: Int\\n ) {\\n orderPositionBooks(\\n instrument: $instrument\\n bookType: $bookType\\n recentHours: $recentHours\\n ) {\\n bucketWidth\\n price\\n time\\n buckets {\\n price\\n longCountPercent\\n shortCountPercent\\n }\\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,OAAO,KAAKA,KAAK,MAAM,WAAW;AAalC,MAAMC,SAAS,GAAG;EAChB,yYAAyY,EACvYD,KAAK,CAACE,6BAA6B;EACrC,sMAAsM,EACpMF,KAAK,CAACG;AACV,CAAC;AA6BD,OAAO,SAASC,OAAOA,CAACC,MAAc,EAAE;EACtC,OAAQJ,SAAS,CAASI,MAAM,CAAC,IAAI,CAAC,CAAC;AACzC","ignoreList":[]}
|