-
Neil authored
* reorg * notes * Add render * privacy Filter additions * merge fixes * notes * merge fixes * Apply patches for strict mode * review fixes --------- Co-authored-by:
Matiss Janis Aboltins <matiss@mja.lv>
Neil authored* reorg * notes * Add render * privacy Filter additions * merge fixes * notes * merge fixes * Apply patches for strict mode * review fixes --------- Co-authored-by:
Matiss Janis Aboltins <matiss@mja.lv>
ChooseGraph.tsx 4.15 KiB
// @ts-strict-ignore
import React, { useRef } from 'react';
import { View } from '../common/View';
import { type DataEntity, type Month } from './entities';
import { AreaGraph } from './graphs/AreaGraph';
import { BarGraph } from './graphs/BarGraph';
import { BarLineGraph } from './graphs/BarLineGraph';
import { DonutGraph } from './graphs/DonutGraph';
import { LineGraph } from './graphs/LineGraph';
import { StackedBarGraph } from './graphs/StackedBarGraph';
import { ReportTable } from './graphs/tableGraph/ReportTable';
import { ReportTableHeader } from './graphs/tableGraph/ReportTableHeader';
import { ReportTableTotals } from './graphs/tableGraph/ReportTableTotals';
import { ReportOptions } from './ReportOptions';
type ChooseGraphProps = {
data: DataEntity;
mode: string;
graphType: string;
balanceType: string;
groupBy: string;
showEmpty: boolean;
scrollWidth: number;
setScrollWidth: (value: number) => void;
months: Month[];
viewLabels: boolean;
};
export function ChooseGraph({
data,
mode,
graphType,
balanceType,
groupBy,
showEmpty,
scrollWidth,
setScrollWidth,
months,
viewLabels,
}: ChooseGraphProps) {
const balanceTypeOp = ReportOptions.balanceTypeMap.get(balanceType);
const groupByData =
groupBy === 'Category'
? 'groupedData'
: ['Month', 'Year'].includes(groupBy)
? 'monthData'
: 'data';
const saveScrollWidth = value => {
setScrollWidth(!value ? 0 : value);
};
const headerScrollRef = useRef<HTMLDivElement>(null);
const listScrollRef = useRef<HTMLDivElement>(null);
const totalScrollRef = useRef<HTMLDivElement>(null);
const handleScroll = scroll => {
if (scroll.target.id === 'header') {
totalScrollRef.current.scrollLeft = scroll.target.scrollLeft;
listScrollRef.current.scrollLeft = scroll.target.scrollLeft;
}
if (scroll.target.id === 'total') {
headerScrollRef.current.scrollLeft = scroll.target.scrollLeft;
listScrollRef.current.scrollLeft = scroll.target.scrollLeft;
}
if (scroll.target.id === 'list') {
headerScrollRef.current.scrollLeft = scroll.target.scrollLeft;
totalScrollRef.current.scrollLeft = scroll.target.scrollLeft;
}
};
if (graphType === 'AreaGraph') {
return (
<AreaGraph
style={{ flexGrow: 1 }}
data={data}
balanceTypeOp={balanceTypeOp}
viewLabels={viewLabels}
/>
);
}
if (graphType === 'BarGraph') {
return (
<BarGraph
style={{ flexGrow: 1 }}
data={data}
groupBy={groupBy}
balanceTypeOp={balanceTypeOp}
viewLabels={viewLabels}
/>
);
}
if (graphType === 'BarLineGraph') {
return <BarLineGraph style={{ flexGrow: 1 }} graphData={data} />;
}
if (graphType === 'DonutGraph') {
return (
<DonutGraph
style={{ flexGrow: 1 }}
data={data}
groupBy={groupBy}
balanceTypeOp={balanceTypeOp}
viewLabels={viewLabels}
/>
);
}
if (graphType === 'LineGraph') {
return <LineGraph style={{ flexGrow: 1 }} graphData={data} />;
}
if (graphType === 'StackedBarGraph') {
return (
<StackedBarGraph
style={{ flexGrow: 1 }}
data={data}
viewLabels={viewLabels}
/>
);
}
if (graphType === 'TableGraph') {
return (
<View>
<ReportTableHeader
headerScrollRef={headerScrollRef}
handleScroll={handleScroll}
interval={mode === 'time' && data.monthData}
scrollWidth={scrollWidth}
groupBy={groupBy}
balanceType={balanceType}
/>
<ReportTable
saveScrollWidth={saveScrollWidth}
listScrollRef={listScrollRef}
handleScroll={handleScroll}
balanceTypeOp={balanceTypeOp}
groupBy={groupBy}
data={data[groupByData]}
mode={mode}
monthsCount={months.length}
/>
<ReportTableTotals
totalScrollRef={totalScrollRef}
handleScroll={handleScroll}
scrollWidth={scrollWidth}
data={data}
mode={mode}
balanceTypeOp={balanceTypeOp}
monthsCount={months.length}
/>
</View>
);
}
}