crossfilter immutability error (#1009)

* add rename immutability test

* make rename immutable
This commit is contained in:
Bruce Martin
2019-11-04 14:14:17 -08:00
committed by GitHub
parent e50fd8b881
commit a16c2e2747
2 changed files with 19 additions and 13 deletions
@@ -168,6 +168,9 @@ describe("ImmutableTypedCrossfilter", () => {
const p4 = p3.delDimension("quantity"); const p4 = p3.delDimension("quantity");
expect(p4).not.toBe(p3); expect(p4).not.toBe(p3);
const p5 = p2.renameDimension("quantity", "Quantity");
expect(p5).not.toBe(p2);
}); });
test("select all and none", () => { test("select all and none", () => {
+16 -13
View File
@@ -125,20 +125,17 @@ export default class ImmutableTypedCrossfilter {
} }
renameDimension(oldName, newName) { renameDimension(oldName, newName) {
/*
rename a dimension
*/
const { [oldName]: dim, ...dimensions } = this.dimensions; const { [oldName]: dim, ...dimensions } = this.dimensions;
const { data, selectionCache } = this; const { data, selectionCache } = this;
dim.dim.rename(newName); const newDimensions = {
return new ImmutableTypedCrossfilter( ...dimensions,
data, [newName]: {
{ ...dim,
...dimensions, name: newName,
[newName]: dim dim: dim.dim.rename(newName)
}, }
selectionCache };
); return new ImmutableTypedCrossfilter(data, newDimensions, selectionCache);
} }
select(name, spec) { select(name, spec) {
@@ -316,8 +313,14 @@ class _ImmutableBaseDimension {
this.name = name; this.name = name;
} }
clone() {
return Object.assign(Object.create(Object.getPrototypeOf(this)), this);
}
rename(name) { rename(name) {
this.name = name; const d = this.clone();
d.name = name;
return d;
} }
select(spec) { select(spec) {