Skip to content

Commit e71a636

Browse files
committed
dereference top level layout keys
1 parent 2e7e923 commit e71a636

File tree

2 files changed

+29
-9
lines changed

2 files changed

+29
-9
lines changed

src/lib/__tests__/dereference-test.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import dereference from '../dereference';
2+
import {consolidateStreamedStyles} from 'styled-components';
23
/* eslint-disable no-magic-numbers */
34
describe('dereference', () => {
45
it('does not search into data arrays', () => {
@@ -65,4 +66,13 @@ describe('dereference', () => {
6566
expect(container[0].z[2][0]).toBe(3);
6667
expect(container[0].z[2][1]).toBe(2);
6768
});
69+
70+
// TO DO: dereference all of layout
71+
it('can dereference top level layout keys', () => {
72+
const container = {metasrc: 'x1', xaxis: {ticktext: 'x2'}};
73+
dereference(container, {x1: ['yes!'], x2: ['some', 'text']});
74+
75+
expect(Array.isArray(container.meta)).toBe(true);
76+
expect(container.meta[0]).toBe('yes!');
77+
});
6878
});

src/lib/dereference.js

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ export default function dereference(container, dataSources, config = {deleteKeys
1010
}
1111

1212
const dataKey = key.replace(SRC_ATTR_PATTERN, '');
13-
const traceType = parent.type;
1413

1514
let srcRef = config.toSrc ? config.toSrc(parent[key]) : parent[key];
1615

@@ -19,7 +18,7 @@ export default function dereference(container, dataSources, config = {deleteKeys
1918
srcRef = [srcRef];
2019
}
2120

22-
let data = srcRef.map(ref => {
21+
let dereferencedData = srcRef.map(ref => {
2322
if (config.deleteKeys && !(ref in dataSources)) {
2423
delete parent[dataKey];
2524
}
@@ -28,18 +27,29 @@ export default function dereference(container, dataSources, config = {deleteKeys
2827

2928
// remove extra data wrapping
3029
if (srcRef.length === 1) {
31-
data = data[0];
30+
dereferencedData = dereferencedData[0];
3231
}
3332

34-
if (!Array.isArray(data)) {
33+
if (!Array.isArray(dereferencedData)) {
3534
return;
3635
}
3736

38-
parent[dataKey] = maybeTransposeData(data, srcPath, traceType);
37+
if (Array.isArray(container)) {
38+
// Case where we were originally given data to dereference
39+
const traceType = parent.type;
40+
parent[dataKey] = maybeTransposeData(dereferencedData, srcPath, traceType);
41+
} else {
42+
// This means we're dereferencing layout
43+
parent[dataKey] = dereferencedData;
44+
}
3945
};
4046

41-
walkObject(container, replacer, {
42-
walkArraysMatchingKeys: ['data', 'transforms'],
43-
pathType: 'nestedProperty',
44-
});
47+
if (Array.isArray(container)) {
48+
walkObject(container, replacer, {
49+
walkArraysMatchingKeys: ['data', 'transforms'],
50+
pathType: 'nestedProperty',
51+
});
52+
} else {
53+
walkObject(container, replacer, {pathType: 'nestedProperty'});
54+
}
4555
}

0 commit comments

Comments
 (0)