Skip to content

Commit c42fedc

Browse files
fix(timeshiftcolor): fix timeshiftcolor to match the original color for echarts
1 parent 880cab5 commit c42fedc

File tree

2 files changed

+72
-4
lines changed

2 files changed

+72
-4
lines changed

superset-frontend/packages/superset-ui-chart-controls/src/operators/utils/timeOffset.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ export const getTimeOffset = (
2828
// offset is represented as <offset>, group by list
2929
series.name.includes(`${timeOffset},`) ||
3030
// offset is represented as <metric>__<offset>
31-
series.name.includes(`__${timeOffset}`),
31+
series.name.includes(`__${timeOffset}`) ||
32+
// offset is represented as <metric>, <offset>
33+
series.name.includes(`, ${timeOffset}`),
3234
);
3335

3436
export const hasTimeOffset = (
@@ -49,6 +51,8 @@ export const getOriginalSeries = (
4951
result = result.replace(`${compare},`, '');
5052
// offset is represented as <metric>__<offset>
5153
result = result.replace(`__${compare}`, '');
54+
// offset is represented as <metric>, <offset>
55+
result = result.replace(`, ${compare}`, '');
5256
});
5357
return result.trim();
5458
};

superset-frontend/packages/superset-ui-chart-controls/test/operators/utils/timeOffset.test.ts

Lines changed: 67 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,79 @@
1616
* specific language governing permissions and limitations
1717
* under the License.
1818
*/
19-
import { getOriginalSeries } from '@superset-ui/chart-controls';
19+
import {
20+
getOriginalSeries,
21+
getTimeOffset,
22+
hasTimeOffset,
23+
} from '@superset-ui/chart-controls';
2024

21-
test('returns the series name when time compare is empty', () => {
25+
test('getOriginalSeries returns the series name when time compare is empty', () => {
2226
const seriesName = 'sum';
2327
expect(getOriginalSeries(seriesName, [])).toEqual(seriesName);
2428
});
2529

26-
test('returns the original series name', () => {
30+
test('getOriginalSeries returns the original series name with __ pattern', () => {
2731
const seriesName = 'sum__1_month_ago';
2832
const timeCompare = ['1_month_ago'];
2933
expect(getOriginalSeries(seriesName, timeCompare)).toEqual('sum');
3034
});
35+
36+
test('getOriginalSeries returns the original series name with <offset>, pattern', () => {
37+
const seriesName = '1 year ago, groupby_value';
38+
const timeCompare = ['1 year ago'];
39+
expect(getOriginalSeries(seriesName, timeCompare)).toEqual('groupby_value');
40+
});
41+
42+
test('getOriginalSeries returns the original series name with , <offset> pattern', () => {
43+
const seriesName = 'AVG(price_each), 1 year ago';
44+
const timeCompare = ['1 year ago'];
45+
expect(getOriginalSeries(seriesName, timeCompare)).toEqual('AVG(price_each)');
46+
});
47+
48+
test('getOriginalSeries handles multiple time compares', () => {
49+
const seriesName = 'count, 1 year ago';
50+
const timeCompare = ['1 month ago', '1 year ago'];
51+
expect(getOriginalSeries(seriesName, timeCompare)).toEqual('count');
52+
});
53+
54+
test('getTimeOffset returns undefined when no time offset pattern matches', () => {
55+
const series = { name: 'count' };
56+
const timeCompare = ['1 year ago'];
57+
expect(getTimeOffset(series, timeCompare)).toBeUndefined();
58+
});
59+
60+
test('getTimeOffset detects __ pattern', () => {
61+
const series = { name: 'count__1 year ago' };
62+
const timeCompare = ['1 year ago'];
63+
expect(getTimeOffset(series, timeCompare)).toEqual('1 year ago');
64+
});
65+
66+
test('getTimeOffset detects <offset>, pattern', () => {
67+
const series = { name: '1 year ago, groupby_value' };
68+
const timeCompare = ['1 year ago'];
69+
expect(getTimeOffset(series, timeCompare)).toEqual('1 year ago');
70+
});
71+
72+
test('getTimeOffset detects , <offset> pattern', () => {
73+
const series = { name: 'AVG(price_each), 1 year ago' };
74+
const timeCompare = ['1 year ago'];
75+
expect(getTimeOffset(series, timeCompare)).toEqual('1 year ago');
76+
});
77+
78+
test('hasTimeOffset returns false for original series', () => {
79+
const series = { name: 'count' };
80+
const timeCompare = ['1 year ago'];
81+
expect(hasTimeOffset(series, timeCompare)).toBe(false);
82+
});
83+
84+
test('hasTimeOffset returns true for derived series with , <offset> pattern', () => {
85+
const series = { name: 'AVG(price_each), 1 year ago' };
86+
const timeCompare = ['1 year ago'];
87+
expect(hasTimeOffset(series, timeCompare)).toBe(true);
88+
});
89+
90+
test('hasTimeOffset returns false when series name is not a string', () => {
91+
const series = { name: 123 };
92+
const timeCompare = ['1 year ago'];
93+
expect(hasTimeOffset(series, timeCompare)).toBe(false);
94+
});

0 commit comments

Comments
 (0)