diff --git a/app/routes/apps/$appName.tsx b/app/routes/apps/$appName.tsx index e951a337..5fcc2c69 100644 --- a/app/routes/apps/$appName.tsx +++ b/app/routes/apps/$appName.tsx @@ -47,7 +47,7 @@ import { import Table from '~/src/components/Wrappers/Table'; import { useService } from '~/src/hooks/useService'; import i18n from '~/src/translations'; -import { Chart } from '~/src/types/chart'; +import { Chart, ChartTypes } from '~/src/types/chart'; import { Connector, ConnectorStatuses, @@ -157,8 +157,13 @@ export const loader: LoaderFunction = async ({ request, params }) => { tasks, connector, chart: { - pie: buildChart(buildLabels([datasetPie]), [datasetPie]), - line: buildChart(buildLabels([datasetLine], 'LT'), [datasetLine]), + pie: buildChart( + buildLabels([datasetPie]), + [datasetPie], + undefined, + ChartTypes.PIE + ), + line: buildChart(buildLabels([datasetLine]), [datasetLine]), }, }; } diff --git a/app/routes/ledgers/$ledgerId/accounts/$accountId.tsx b/app/routes/ledgers/$ledgerId/accounts/$accountId.tsx index 04a61c4f..f51f3d0f 100644 --- a/app/routes/ledgers/$ledgerId/accounts/$accountId.tsx +++ b/app/routes/ledgers/$ledgerId/accounts/$accountId.tsx @@ -128,7 +128,7 @@ export const loader: LoaderFunction = async ({ params, request }) => { return { account: account ? normalizeBalance(account) : undefined, transactions, - chart: buildChart(buildLabels([dataset], 'LT'), [dataset]), + chart: buildChart(buildLabels([dataset]), [dataset]), }; } diff --git a/app/routes/overview/index.tsx b/app/routes/overview/index.tsx index 1faf4eca..eff7f391 100644 --- a/app/routes/overview/index.tsx +++ b/app/routes/overview/index.tsx @@ -120,7 +120,7 @@ const getTransactionLedgerChartData = async ( } } - return buildChart(buildLabels(datasets, 'dd LT'), datasets); + return buildChart(buildLabels(datasets, 'dd LT'), datasets, 'dd LT'); } }; @@ -143,7 +143,7 @@ const getPaymentChartData = async (api: ApiClient) => { if (chart) { const dataset = buildLineChartDataset(chart); - return buildChart(buildLabels([dataset], 'LT'), [dataset]); + return buildChart(buildLabels([dataset]), [dataset]); } }; diff --git a/app/src/components/Dataviz/Charts/ChartPlaceholder/ChartPlaceholder.tsx b/app/src/components/Dataviz/Charts/ChartPlaceholder/ChartPlaceholder.tsx index 867104da..f0b20aef 100644 --- a/app/src/components/Dataviz/Charts/ChartPlaceholder/ChartPlaceholder.tsx +++ b/app/src/components/Dataviz/Charts/ChartPlaceholder/ChartPlaceholder.tsx @@ -4,13 +4,13 @@ import { QueryStats } from '@mui/icons-material'; import { Box, Typography } from '@mui/material'; import { useTranslation } from 'react-i18next'; -import { ChartPlaceholderProps, ChartPlaceholderTypes } from './types'; +import { ChartPlaceholderProps } from './types'; import { LoadingButton, ObjectOf } from '@numaryhq/storybook'; import Line from '~/src/components/Dataviz/Charts/Line'; import Pie from '~/src/components/Dataviz/Charts/Pie'; -import { Chart } from '~/src/types/chart'; +import { Chart, ChartTypes } from '~/src/types/chart'; const lineDataMock = { labels: ['11:00 PM', '1:00 PM', '2:00 PM', '4:00 PM', '8:00 PM', '9:00 PM'], @@ -43,8 +43,8 @@ const ChartPlaceholder: FunctionComponent = ({ }) => { const { t } = useTranslation(); const chartsMap = { - [ChartPlaceholderTypes.LINE]: , - [ChartPlaceholderTypes.PIE]: , + [ChartTypes.LINE]: , + [ChartTypes.PIE]: , } as ObjectOf; return ( diff --git a/app/src/components/Dataviz/Charts/ChartPlaceholder/types.ts b/app/src/components/Dataviz/Charts/ChartPlaceholder/types.ts index e3a52f8c..35a05c74 100644 --- a/app/src/components/Dataviz/Charts/ChartPlaceholder/types.ts +++ b/app/src/components/Dataviz/Charts/ChartPlaceholder/types.ts @@ -1,10 +1,7 @@ -export enum ChartPlaceholderTypes { - LINE = 'line', - PIE = 'pie', -} +import { ChartTypes } from '~/src/types/chart'; export type ChartPlaceholderProps = { - type: ChartPlaceholderTypes; + type: ChartTypes; title?: string; time?: { value: string; kind: string }; }; diff --git a/app/src/components/Dataviz/Charts/Line/Line.tsx b/app/src/components/Dataviz/Charts/Line/Line.tsx index 364b1972..0b89a8e5 100644 --- a/app/src/components/Dataviz/Charts/Line/Line.tsx +++ b/app/src/components/Dataviz/Charts/Line/Line.tsx @@ -17,8 +17,8 @@ import { useTranslation } from 'react-i18next'; import { LineProps } from './types'; import ChartPlaceholder from '~/src/components/Dataviz/Charts/ChartPlaceholder'; -import { ChartPlaceholderTypes } from '~/src/components/Dataviz/Charts/ChartPlaceholder/types'; import { getChartOptions } from '~/src/components/Dataviz/Charts/utils'; +import { ChartTypes } from '~/src/types/chart'; ChartJS.register( CategoryScale, @@ -40,11 +40,7 @@ const Line: FunctionComponent = ({ const { t } = useTranslation(); if (data.datasets.length === 0 || data.labels.length === 0) { return ( - + ); } diff --git a/app/src/components/Dataviz/Charts/Pie/Pie.tsx b/app/src/components/Dataviz/Charts/Pie/Pie.tsx index 94ca5409..ac334cea 100644 --- a/app/src/components/Dataviz/Charts/Pie/Pie.tsx +++ b/app/src/components/Dataviz/Charts/Pie/Pie.tsx @@ -8,8 +8,8 @@ import { useTranslation } from 'react-i18next'; import { PieProps } from './types'; import ChartPlaceholder from '~/src/components/Dataviz/Charts/ChartPlaceholder'; -import { ChartPlaceholderTypes } from '~/src/components/Dataviz/Charts/ChartPlaceholder/types'; import { getChartOptions } from '~/src/components/Dataviz/Charts/utils'; +import { ChartTypes } from '~/src/types/chart'; ChartJS.register(ArcElement, Tooltip, Legend); @@ -23,13 +23,7 @@ const Pie: FunctionComponent = ({ const { t } = useTranslation(); if (data.datasets.length === 0 || data.labels.length === 0) { - return ( - - ); + return ; } return ( diff --git a/app/src/components/Dataviz/Charts/utils.ts b/app/src/components/Dataviz/Charts/utils.ts index 4c9e994e..cf915932 100644 --- a/app/src/components/Dataviz/Charts/utils.ts +++ b/app/src/components/Dataviz/Charts/utils.ts @@ -4,7 +4,7 @@ import { compact, flatten, get, omit, sortedUniq } from 'lodash'; import { ObjectOf, theme } from '@numaryhq/storybook'; -import { Chart, ChartDataset } from '~/src/types/chart'; +import { Chart, ChartDataset, ChartTypes } from '~/src/types/chart'; import { BooleanConfig, SearchTargets } from '~/src/types/search'; export const buildQueryPayloadMatchPhrase = ( @@ -125,21 +125,40 @@ export const getRandomContrast = (): 'bright' | 'normal' | 'darker' => export const buildChart = ( labels: (string | Date)[], - datasets: any -): Chart => ({ - labels, - datasets: compact( - datasets.map((dataset: ChartDataset) => { - if (dataset && dataset.data) { - return omit(dataset, ['labels']); - } - }) - ), -}); + datasets: any, + reverseDateFormat = 'LT', + type = ChartTypes.LINE +): Chart => { + console.log(type); + if (type === ChartTypes.LINE) { + datasets.forEach((dataset: ChartDataset) => { + const dataFormated = labels.map(() => 0); + dataset.labels.forEach((label: string | Date, index: number) => { + const myIndex = labels.findIndex( + (item: string | Date) => + dayjs(label).format(reverseDateFormat) === item + ); + dataFormated[myIndex] = dataset.data[index]; + }); + dataset.data = dataFormated; + }); + } + + return { + labels, + datasets: compact( + datasets.map((dataset: ChartDataset) => { + if (dataset && dataset.data) { + return omit(dataset, ['labels']); + } + }) + ), + }; +}; export const buildLabels = ( datasets: any, - dateFormat = 'ddd D MMM' + dateFormat = 'LT' ): (string | Date)[] => { const labels = sortedUniq( flatten(compact(datasets.map((dataset: ChartDataset) => dataset.labels))) @@ -149,7 +168,6 @@ export const buildLabels = ( ) as string[]; return uniqLabels - .sort((a, b) => (dayjs(a) < dayjs(b) ? 1 : -1)) .reverse() .map((item: Date | string) => { diff --git a/app/src/translations/en/translations.ts b/app/src/translations/en/translations.ts index a8870298..316d01c8 100644 --- a/app/src/translations/en/translations.ts +++ b/app/src/translations/en/translations.ts @@ -93,7 +93,7 @@ export default { title: 'Overview', status: 'Activity', charts: { - transaction: 'Transactions per ledger top 3', + transaction: 'Transactions volume per ledger top 3', payment: 'Payments volume', }, tasks: { diff --git a/app/src/types/chart.ts b/app/src/types/chart.ts index 01d905cd..5982c5ef 100644 --- a/app/src/types/chart.ts +++ b/app/src/types/chart.ts @@ -14,3 +14,8 @@ export type Chart = { labels: (Date | string)[]; datasets: Omit[]; }; + +export enum ChartTypes { + LINE = 'line', + PIE = 'pie', +}