@@ -2,6 +2,11 @@ import type {Chart, ChartDataset} from '../types';
22
33type DatasetColorizer = ( dataset : ChartDataset , i : number ) => void ;
44
5+ interface ColorsDescriptor {
6+ backgroundColor ?: unknown ;
7+ borderColor ?: unknown ;
8+ }
9+
510const BORDER_COLORS = [
611 'rgb(54, 162, 235)' , // blue
712 'rgb(255, 99, 132)' , // red
@@ -25,40 +30,56 @@ function getBackgroundColor(i: number) {
2530
2631function createDefaultDatasetColorizer ( ) {
2732 return ( dataset : ChartDataset , i : number ) => {
28- if ( ! dataset . borderColor && ! dataset . backgroundColor ) {
29- dataset . borderColor = getBorderColor ( i ) ;
30- dataset . backgroundColor = getBackgroundColor ( i ) ;
31- }
33+ dataset . borderColor = getBorderColor ( i ) ;
34+ dataset . backgroundColor = getBackgroundColor ( i ) ;
3235 } ;
3336}
3437
3538function createDoughnutDatasetColorizer ( ) {
3639 let i = 0 ;
3740
3841 return ( dataset : ChartDataset ) => {
39- if ( ! dataset . borderColor && ! dataset . backgroundColor ) {
40- dataset . backgroundColor = dataset . data . map ( ( ) => getBorderColor ( i ++ ) ) ;
41- }
42+ dataset . backgroundColor = dataset . data . map ( ( ) => getBorderColor ( i ++ ) ) ;
4243 } ;
4344}
4445
4546function createPolarAreaDatasetColorizer ( ) {
4647 let i = 0 ;
4748
4849 return ( dataset : ChartDataset ) => {
49- if ( ! dataset . borderColor && ! dataset . backgroundColor ) {
50- dataset . backgroundColor = dataset . data . map ( ( ) => getBackgroundColor ( i ++ ) ) ;
51- }
50+ dataset . backgroundColor = dataset . data . map ( ( ) => getBackgroundColor ( i ++ ) ) ;
5251 } ;
5352}
5453
54+ function containsColorsDefinitions (
55+ descriptors : ColorsDescriptor [ ] | Record < string , ColorsDescriptor >
56+ ) {
57+ let k : number | string ;
58+
59+ for ( k in descriptors ) {
60+ if ( descriptors [ k ] . borderColor || descriptors [ k ] . backgroundColor ) {
61+ return true ;
62+ }
63+ }
64+
65+ return false ;
66+ }
67+
5568export default {
5669 id : 'colors' ,
5770
5871 beforeLayout ( chart : Chart ) {
59- const { type} = chart . config ;
72+ const {
73+ type,
74+ options : { elements} ,
75+ data : { datasets}
76+ } = chart . config ;
6077 let colorizer : DatasetColorizer ;
6178
79+ if ( containsColorsDefinitions ( datasets ) || elements && containsColorsDefinitions ( elements ) ) {
80+ return ;
81+ }
82+
6283 if ( type === 'doughnut' ) {
6384 colorizer = createDoughnutDatasetColorizer ( ) ;
6485 } else if ( type === 'polarArea' ) {
@@ -67,6 +88,6 @@ export default {
6788 colorizer = createDefaultDatasetColorizer ( ) ;
6889 }
6990
70- chart . data . datasets . forEach ( colorizer ) ;
71- } ,
91+ datasets . forEach ( colorizer ) ;
92+ }
7293} ;
0 commit comments