import {timeFormat} from 'd3-time-format';
import {logger} from './logger';
/**
* General configuration
*/
export class Config {
constructor () {
this._defaultColors = Config._schemeCategory20c;
/**
* The default date format for dc.js
* @type {Function}
* @default d3.timeFormat('%m/%d/%Y')
*/
this.dateFormat = timeFormat('%m/%d/%Y');
this._renderlet = null;
/**
* If this boolean is set truthy, all transitions will be disabled, and changes to the charts will happen
* immediately.
* @type {Boolean}
* @default false
*/
this.disableTransitions = false;
}
/**
* Set the default color scheme for ordinal charts. Changing it will impact all ordinal charts.
*
* By default it is set to a copy of
* `d3.schemeCategory20c` for backward compatibility. This color scheme has been
* [removed from D3v5](https://github.com/d3/d3/blob/master/CHANGES.md#changes-in-d3-50).
* In DC 3.1 release it will change to a more appropriate default.
*
* @example
* config.defaultColors(d3.schemeSet1)
* @param {Array} [colors]
* @returns {Array|config}
*/
defaultColors (colors) {
if (!arguments.length) {
// Issue warning if it uses _schemeCategory20c
if (this._defaultColors === Config._schemeCategory20c) {
logger.warnOnce('You are using d3.schemeCategory20c, which has been removed in D3v5. ' +
'See the explanation at https://github.com/d3/d3/blob/master/CHANGES.md#changes-in-d3-50. ' +
'DC is using it for backward compatibility, however it will be changed in DCv3.1. ' +
'You can change it by calling dc.config.defaultColors(newScheme). ' +
'See https://github.com/d3/d3-scale-chromatic for some alternatives.');
}
return this._defaultColors;
}
this._defaultColors = colors;
return this;
}
}
// D3v5 has removed schemeCategory20c, copied here for backward compatibility
Config._schemeCategory20c = [
'#3182bd', '#6baed6', '#9ecae1', '#c6dbef', '#e6550d',
'#fd8d3c', '#fdae6b', '#fdd0a2', '#31a354', '#74c476',
'#a1d99b', '#c7e9c0', '#756bb1', '#9e9ac8', '#bcbddc',
'#dadaeb', '#636363', '#969696', '#bdbdbd', '#d9d9d9'];
/**
* General configuration object; see {@link Config} for members.
*/
export const config = new Config();
/**
* d3.js compatiblity layer
*/
export const d3compat = {
eventHandler: handler => function eventHandler (a, b) {
console.warn('No d3.js compatbility event handler registered, defaulting to v6 behavior.');
handler.call(this, b, a);
},
nester: ({key, sortKeys, sortValues, entries}) => {
throw new Error('No d3.js compatbility nester registered, load v5 or v6 compability layer.');
},
pointer: () => { throw new Error('No d3.js compatbility pointer registered, load v5 or v6 compability layer.'); }
};