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

View File

@@ -168,6 +168,9 @@ describe("ImmutableTypedCrossfilter", () => {
const p4 = p3.delDimension("quantity");
expect(p4).not.toBe(p3);
const p5 = p2.renameDimension("quantity", "Quantity");
expect(p5).not.toBe(p2);
});
test("select all and none", () => {

View File

@@ -125,20 +125,17 @@ export default class ImmutableTypedCrossfilter {
}
renameDimension(oldName, newName) {
/*
rename a dimension
*/
const { [oldName]: dim, ...dimensions } = this.dimensions;
const { data, selectionCache } = this;
dim.dim.rename(newName);
return new ImmutableTypedCrossfilter(
data,
{
...dimensions,
[newName]: dim
},
selectionCache
);
const newDimensions = {
...dimensions,
[newName]: {
...dim,
name: newName,
dim: dim.dim.rename(newName)
}
};
return new ImmutableTypedCrossfilter(data, newDimensions, selectionCache);
}
select(name, spec) {
@@ -316,8 +313,14 @@ class _ImmutableBaseDimension {
this.name = name;
}
clone() {
return Object.assign(Object.create(Object.getPrototypeOf(this)), this);
}
rename(name) {
this.name = name;
const d = this.clone();
d.name = name;
return d;
}
select(spec) {