(config, options)
| 69 | } |
| 70 | |
| 71 | function mergeScaleConfig(config, options) { |
| 72 | const chartDefaults = overrides[config.type] || {scales: {}}; |
| 73 | const configScales = options.scales || {}; |
| 74 | const chartIndexAxis = getIndexAxis(config.type, options); |
| 75 | const scales = Object.create(null); |
| 76 | |
| 77 | // First figure out first scale id's per axis. |
| 78 | Object.keys(configScales).forEach(id => { |
| 79 | const scaleConf = configScales[id]; |
| 80 | if (!isObject(scaleConf)) { |
| 81 | return console.error(`Invalid scale configuration for scale: ${id}`); |
| 82 | } |
| 83 | if (scaleConf._proxy) { |
| 84 | return console.warn(`Ignoring resolver passed as options for scale: ${id}`); |
| 85 | } |
| 86 | const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]); |
| 87 | const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis); |
| 88 | const defaultScaleOptions = chartDefaults.scales || {}; |
| 89 | scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]); |
| 90 | }); |
| 91 | |
| 92 | // Then merge dataset defaults to scale configs |
| 93 | config.data.datasets.forEach(dataset => { |
| 94 | const type = dataset.type || config.type; |
| 95 | const indexAxis = dataset.indexAxis || getIndexAxis(type, options); |
| 96 | const datasetDefaults = overrides[type] || {}; |
| 97 | const defaultScaleOptions = datasetDefaults.scales || {}; |
| 98 | Object.keys(defaultScaleOptions).forEach(defaultID => { |
| 99 | const axis = getAxisFromDefaultScaleID(defaultID, indexAxis); |
| 100 | const id = dataset[axis + 'AxisID'] || axis; |
| 101 | scales[id] = scales[id] || Object.create(null); |
| 102 | mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]); |
| 103 | }); |
| 104 | }); |
| 105 | |
| 106 | // apply scale defaults, if not overridden by dataset defaults |
| 107 | Object.keys(scales).forEach(key => { |
| 108 | const scale = scales[key]; |
| 109 | mergeIf(scale, [defaults.scales[scale.type], defaults.scale]); |
| 110 | }); |
| 111 | |
| 112 | return scales; |
| 113 | } |
| 114 | |
| 115 | function initOptions(config) { |
| 116 | const options = config.options || (config.options = {}); |
no test coverage detected