@@ -8,6 +8,8 @@ import type {
88 Chart ,
99} from 'chart.js' ;
1010
11+ const defaultDatasetIdKey = 'label' ;
12+
1113export function reforwardRef < T > ( ref : ForwardedRef < T > , value : T ) {
1214 if ( typeof ref === 'function' ) {
1315 ref ( value ) ;
@@ -41,17 +43,27 @@ export function setDatasets<
4143 TLabel = unknown
4244> (
4345 currentData : ChartData < TType , TData , TLabel > ,
44- nextDatasets : ChartDataset < TType , TData > [ ]
46+ nextDatasets : ChartDataset < TType , TData > [ ] ,
47+ datasetIdKey = defaultDatasetIdKey
4548) {
49+ const addedDatasets : ChartDataset < TType , TData > [ ] = [ ] ;
50+
4651 currentData . datasets = nextDatasets . map ( nextDataset => {
4752 // given the new set, find it's current match
4853 const currentDataset = currentData . datasets . find (
49- dataset =>
50- dataset . label === nextDataset . label && dataset . type === nextDataset . type
54+ dataset => dataset [ datasetIdKey ] === nextDataset [ datasetIdKey ]
5155 ) ;
5256
5357 // There is no original to update, so simply add new one
54- if ( ! currentDataset || ! nextDataset . data ) return { ...nextDataset } ;
58+ if (
59+ ! currentDataset ||
60+ ! nextDataset . data ||
61+ addedDatasets . includes ( currentDataset )
62+ ) {
63+ return { ...nextDataset } ;
64+ }
65+
66+ addedDatasets . push ( currentDataset ) ;
5567
5668 Object . assign ( currentDataset , nextDataset ) ;
5769
@@ -63,14 +75,14 @@ export function cloneData<
6375 TType extends ChartType = ChartType ,
6476 TData = DefaultDataPoint < TType > ,
6577 TLabel = unknown
66- > ( data : ChartData < TType , TData , TLabel > ) {
78+ > ( data : ChartData < TType , TData , TLabel > , datasetIdKey = defaultDatasetIdKey ) {
6779 const nextData : ChartData < TType , TData , TLabel > = {
6880 labels : [ ] ,
6981 datasets : [ ] ,
7082 } ;
7183
7284 setLabels ( nextData , data . labels ) ;
73- setDatasets ( nextData , data . datasets ) ;
85+ setDatasets ( nextData , data . datasets , datasetIdKey ) ;
7486
7587 return nextData ;
7688}
0 commit comments