You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by as...@apache.org on 2026/03/06 14:34:15 UTC
(superset) 01/01: fix(timeshiftcolor): fix timeshiftcolor to match the original color for echarts
This is an automated email from the ASF dual-hosted git repository.
asoare pushed a commit to branch alexandrusoare/fix/time-shift-color-matching
in repository https://gitbox.apache.org/repos/asf/superset.git
commit c42fedc15363cea8ce93b3a93f47d7f2e31663f9
Author: alexandrusoare <al...@gmail.com>
AuthorDate: Fri Mar 6 16:33:51 2026 +0200
fix(timeshiftcolor): fix timeshiftcolor to match the original color for echarts
---
.../src/operators/utils/timeOffset.ts | 6 +-
.../test/operators/utils/timeOffset.test.ts | 70 +++++++++++++++++++++-
2 files changed, 72 insertions(+), 4 deletions(-)
diff --git a/superset-frontend/packages/superset-ui-chart-controls/src/operators/utils/timeOffset.ts b/superset-frontend/packages/superset-ui-chart-controls/src/operators/utils/timeOffset.ts
index 852b4eb1ab8..08b00947ab7 100644
--- a/superset-frontend/packages/superset-ui-chart-controls/src/operators/utils/timeOffset.ts
+++ b/superset-frontend/packages/superset-ui-chart-controls/src/operators/utils/timeOffset.ts
@@ -28,7 +28,9 @@ export const getTimeOffset = (
// offset is represented as <offset>, group by list
series.name.includes(`${timeOffset},`) ||
// offset is represented as <metric>__<offset>
- series.name.includes(`__${timeOffset}`),
+ series.name.includes(`__${timeOffset}`) ||
+ // offset is represented as <metric>, <offset>
+ series.name.includes(`, ${timeOffset}`),
);
export const hasTimeOffset = (
@@ -49,6 +51,8 @@ export const getOriginalSeries = (
result = result.replace(`${compare},`, '');
// offset is represented as <metric>__<offset>
result = result.replace(`__${compare}`, '');
+ // offset is represented as <metric>, <offset>
+ result = result.replace(`, ${compare}`, '');
});
return result.trim();
};
diff --git a/superset-frontend/packages/superset-ui-chart-controls/test/operators/utils/timeOffset.test.ts b/superset-frontend/packages/superset-ui-chart-controls/test/operators/utils/timeOffset.test.ts
index bee8c5bbbd2..75abf91c334 100644
--- a/superset-frontend/packages/superset-ui-chart-controls/test/operators/utils/timeOffset.test.ts
+++ b/superset-frontend/packages/superset-ui-chart-controls/test/operators/utils/timeOffset.test.ts
@@ -16,15 +16,79 @@
* specific language governing permissions and limitations
* under the License.
*/
-import { getOriginalSeries } from '@superset-ui/chart-controls';
+import {
+ getOriginalSeries,
+ getTimeOffset,
+ hasTimeOffset,
+} from '@superset-ui/chart-controls';
-test('returns the series name when time compare is empty', () => {
+test('getOriginalSeries returns the series name when time compare is empty', () => {
const seriesName = 'sum';
expect(getOriginalSeries(seriesName, [])).toEqual(seriesName);
});
-test('returns the original series name', () => {
+test('getOriginalSeries returns the original series name with __ pattern', () => {
const seriesName = 'sum__1_month_ago';
const timeCompare = ['1_month_ago'];
expect(getOriginalSeries(seriesName, timeCompare)).toEqual('sum');
});
+
+test('getOriginalSeries returns the original series name with <offset>, pattern', () => {
+ const seriesName = '1 year ago, groupby_value';
+ const timeCompare = ['1 year ago'];
+ expect(getOriginalSeries(seriesName, timeCompare)).toEqual('groupby_value');
+});
+
+test('getOriginalSeries returns the original series name with , <offset> pattern', () => {
+ const seriesName = 'AVG(price_each), 1 year ago';
+ const timeCompare = ['1 year ago'];
+ expect(getOriginalSeries(seriesName, timeCompare)).toEqual('AVG(price_each)');
+});
+
+test('getOriginalSeries handles multiple time compares', () => {
+ const seriesName = 'count, 1 year ago';
+ const timeCompare = ['1 month ago', '1 year ago'];
+ expect(getOriginalSeries(seriesName, timeCompare)).toEqual('count');
+});
+
+test('getTimeOffset returns undefined when no time offset pattern matches', () => {
+ const series = { name: 'count' };
+ const timeCompare = ['1 year ago'];
+ expect(getTimeOffset(series, timeCompare)).toBeUndefined();
+});
+
+test('getTimeOffset detects __ pattern', () => {
+ const series = { name: 'count__1 year ago' };
+ const timeCompare = ['1 year ago'];
+ expect(getTimeOffset(series, timeCompare)).toEqual('1 year ago');
+});
+
+test('getTimeOffset detects <offset>, pattern', () => {
+ const series = { name: '1 year ago, groupby_value' };
+ const timeCompare = ['1 year ago'];
+ expect(getTimeOffset(series, timeCompare)).toEqual('1 year ago');
+});
+
+test('getTimeOffset detects , <offset> pattern', () => {
+ const series = { name: 'AVG(price_each), 1 year ago' };
+ const timeCompare = ['1 year ago'];
+ expect(getTimeOffset(series, timeCompare)).toEqual('1 year ago');
+});
+
+test('hasTimeOffset returns false for original series', () => {
+ const series = { name: 'count' };
+ const timeCompare = ['1 year ago'];
+ expect(hasTimeOffset(series, timeCompare)).toBe(false);
+});
+
+test('hasTimeOffset returns true for derived series with , <offset> pattern', () => {
+ const series = { name: 'AVG(price_each), 1 year ago' };
+ const timeCompare = ['1 year ago'];
+ expect(hasTimeOffset(series, timeCompare)).toBe(true);
+});
+
+test('hasTimeOffset returns false when series name is not a string', () => {
+ const series = { name: 123 };
+ const timeCompare = ['1 year ago'];
+ expect(hasTimeOffset(series, timeCompare)).toBe(false);
+});