mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	feat: simplified insights data fetching (#6342)
Simplify insights data fetching - let charts pick data instead of preparing labels in hook.
This commit is contained in:
		
							parent
							
								
									7cebf7b8fe
								
							
						
					
					
						commit
						ed44de6c94
					
				| @ -11,7 +11,18 @@ interface IFlagsProjectChartProps { | ||||
| export const FlagsProjectChart: VFC<IFlagsProjectChartProps> = ({ | ||||
|     projectFlagTrends, | ||||
| }) => { | ||||
|     const data = useProjectChartData(projectFlagTrends, 'total'); | ||||
|     const data = useProjectChartData(projectFlagTrends); | ||||
| 
 | ||||
|     return <LineChart data={data} isLocalTooltip />; | ||||
|     return ( | ||||
|         <LineChart | ||||
|             data={data} | ||||
|             isLocalTooltip | ||||
|             overrideOptions={{ | ||||
|                 parsing: { | ||||
|                     yAxisKey: 'total', | ||||
|                     xAxisKey: 'date', | ||||
|                 }, | ||||
|             }} | ||||
|         /> | ||||
|     ); | ||||
| }; | ||||
|  | ||||
| @ -10,8 +10,8 @@ import { | ||||
|     Chart, | ||||
|     Filler, | ||||
|     type ChartData, | ||||
|     type ScatterDataPoint, | ||||
|     TooltipModel, | ||||
|     ChartOptions, | ||||
| } from 'chart.js'; | ||||
| import { Line } from 'react-chartjs-2'; | ||||
| import 'chartjs-adapter-date-fns'; | ||||
| @ -223,28 +223,38 @@ const customHighlightPlugin = { | ||||
| }; | ||||
| 
 | ||||
| const LineChartComponent: VFC<{ | ||||
|     data: ChartData<'line', (number | ScatterDataPoint | null)[], unknown>; | ||||
|     data: ChartData<'line', unknown>; | ||||
|     aspectRatio?: number; | ||||
|     cover?: ReactNode; | ||||
|     isLocalTooltip?: boolean; | ||||
|     overrideOptions?: ChartOptions<'line'>; | ||||
|     TooltipComponent?: ({ | ||||
|         tooltip, | ||||
|     }: { tooltip: TooltipState | null }) => ReturnType<VFC>; | ||||
| }> = ({ data, aspectRatio, cover, isLocalTooltip, TooltipComponent }) => { | ||||
| }> = ({ | ||||
|     data, | ||||
|     aspectRatio, | ||||
|     cover, | ||||
|     isLocalTooltip, | ||||
|     overrideOptions, | ||||
|     TooltipComponent, | ||||
| }) => { | ||||
|     const theme = useTheme(); | ||||
|     const { locationSettings } = useLocationSettings(); | ||||
| 
 | ||||
|     const [tooltip, setTooltip] = useState<null | TooltipState>(null); | ||||
|     const options = useMemo( | ||||
|         () => | ||||
|             createOptions( | ||||
|         () => ({ | ||||
|             ...createOptions( | ||||
|                 theme, | ||||
|                 locationSettings, | ||||
|                 setTooltip, | ||||
|                 Boolean(cover), | ||||
|                 isLocalTooltip, | ||||
|             ), | ||||
|         [theme, locationSettings], | ||||
|             ...overrideOptions, | ||||
|         }), | ||||
|         [theme, locationSettings, overrideOptions], | ||||
|     ); | ||||
| 
 | ||||
|     return ( | ||||
|  | ||||
| @ -74,13 +74,19 @@ const TooltipComponent: VFC<{ tooltip: TooltipState | null }> = ({ | ||||
| export const ProjectHealthChart: VFC<IFlagsProjectChartProps> = ({ | ||||
|     projectFlagTrends, | ||||
| }) => { | ||||
|     const data = useProjectChartData(projectFlagTrends, 'health'); | ||||
|     const data = useProjectChartData(projectFlagTrends); | ||||
| 
 | ||||
|     return ( | ||||
|         <LineChart | ||||
|             data={data} | ||||
|             isLocalTooltip | ||||
|             TooltipComponent={TooltipComponent} | ||||
|             overrideOptions={{ | ||||
|                 parsing: { | ||||
|                     yAxisKey: 'health', | ||||
|                     xAxisKey: 'date', | ||||
|                 }, | ||||
|             }} | ||||
|         /> | ||||
|     ); | ||||
| }; | ||||
|  | ||||
| @ -11,7 +11,18 @@ interface IFlagsProjectChartProps { | ||||
| export const TimeToProductionChart: VFC<IFlagsProjectChartProps> = ({ | ||||
|     projectFlagTrends, | ||||
| }) => { | ||||
|     const data = useProjectChartData(projectFlagTrends, 'timeToProduction'); | ||||
|     const data = useProjectChartData(projectFlagTrends); | ||||
| 
 | ||||
|     return <LineChart data={data} isLocalTooltip />; | ||||
|     return ( | ||||
|         <LineChart | ||||
|             data={data} | ||||
|             isLocalTooltip | ||||
|             overrideOptions={{ | ||||
|                 parsing: { | ||||
|                     yAxisKey: 'timeToProduction', | ||||
|                     xAxisKey: 'date', | ||||
|                 }, | ||||
|             }} | ||||
|         /> | ||||
|     ); | ||||
| }; | ||||
|  | ||||
| @ -8,10 +8,7 @@ import { useTheme } from '@mui/material'; | ||||
| 
 | ||||
| type ProjectFlagTrends = ExecutiveSummarySchema['projectFlagTrends']; | ||||
| 
 | ||||
| export const useProjectChartData = ( | ||||
|     projectFlagTrends: ProjectFlagTrends, | ||||
|     field: 'timeToProduction' | 'total' | 'health', | ||||
| ) => { | ||||
| export const useProjectChartData = (projectFlagTrends: ProjectFlagTrends) => { | ||||
|     const theme = useTheme(); | ||||
| 
 | ||||
|     const data = useMemo(() => { | ||||
| @ -30,9 +27,7 @@ export const useProjectChartData = ( | ||||
|                 const color = getProjectColor(project); | ||||
|                 return { | ||||
|                     label: project, | ||||
|                     data: trends.map((item) => { | ||||
|                         return item[field] || 0; | ||||
|                     }), | ||||
|                     data: trends, | ||||
|                     borderColor: color, | ||||
|                     backgroundColor: color, | ||||
|                     fill: false, | ||||
| @ -40,15 +35,7 @@ export const useProjectChartData = ( | ||||
|             }, | ||||
|         ); | ||||
| 
 | ||||
|         const objectKeys = Object.keys(groupedFlagTrends); | ||||
| 
 | ||||
|         const firstElementTrends = groupedFlagTrends[objectKeys[0]] || []; | ||||
|         const firstElementsDates = firstElementTrends.map((item) => item.date); | ||||
| 
 | ||||
|         return { | ||||
|             labels: firstElementsDates, | ||||
|             datasets, | ||||
|         }; | ||||
|         return { datasets }; | ||||
|     }, [theme, projectFlagTrends]); | ||||
| 
 | ||||
|     return data; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user