diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c4c64b2..eb8463bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ Changelog === +# 8.0.0 + +> 2023-09-19 + +When calculating uniques for an ordinal scale's domain, sort the list. This will help in case your input data changes order, in which case your colors may be off (if using that dimension for a color scale). This is technically a breaking change although it may not actually affect any live charts. + +* [PR#142](https://github.com/mhkeller/layercake/pull/142) + # 7.6.1 > 2023-07-19 diff --git a/src/lib/helpers/calcScaleExtents.js b/src/lib/helpers/calcScaleExtents.js index 148181bd..1f322de2 100644 --- a/src/lib/helpers/calcScaleExtents.js +++ b/src/lib/helpers/calcScaleExtents.js @@ -20,11 +20,11 @@ export default function calcScaleExtents (flatData, getters, activeScales) { let extents = {}; if (scaleGroups.ordinal) { // @ts-ignore - extents = calcUniques(flatData, scaleGroups.ordinal) + extents = calcUniques(flatData, scaleGroups.ordinal, { sort: true }); } if (scaleGroups.other) { // @ts-ignore - extents = { ...extents, ...calcExtents(flatData, scaleGroups.other) } + extents = { ...extents, ...calcExtents(flatData, scaleGroups.other) }; } return extents; diff --git a/src/lib/lib/calcUniques.js b/src/lib/lib/calcUniques.js index ac897b50..64b8a7c2 100644 --- a/src/lib/lib/calcUniques.js +++ b/src/lib/lib/calcUniques.js @@ -53,7 +53,10 @@ export default function calcUniques (data, fields, { sort = false } = {}) { } } const results = Array.from(set); - uniques[s] = sort === true ? results.sort() : results; + if (sort === true) { + results.sort(); + } + uniques[s] = results; } return uniques; } diff --git a/test/calcScaleExtents.test.js b/test/calcScaleExtents.test.js index eeeb28be..aece8a66 100644 --- a/test/calcScaleExtents.test.js +++ b/test/calcScaleExtents.test.js @@ -36,6 +36,20 @@ const tests = [ { x: scaleSqrt(), y: scalePoint() } ], expected: { x: [0, 3], y: ['0', '1', '2', '3'] } }, + { + args: [ + [{ mx: 0, my: '1' }, { mx: 1, my: '0' }, { mx: 2, my: '2' }, { mx: 3, my: '3' }], + { x: d => d.mx, y: d => d.my }, + { x: scaleSqrt(), y: scalePoint() } + ], expected: { x: [0, 3], y: ['0', '1', '2', '3'] } + }, + { + args: [ + [{ mx: 0, my: '1' }, { mx: 1, my: '0' }, { mx: 2, my: '2' }, { mx: 3, my: '3' }], + { x: d => d.mx, y: d => d.my }, + { x: scaleSqrt(), y: scalePoint() } + ], expected: { x: [0, 3], y: ['0', '1', '2', '3'] } + }, { args: [ [{ mx: 0, my: '0' }, { mx: 1, my: '1' }, { mx: 2, my: '2' }, { mx: 3, my: '3' }],