Skip to content

Commit

Permalink
fix(client-core): dayjs global locale conflict (#3606) Thanks @LvtLvt!
Browse files Browse the repository at this point in the history
* Add internal dayjs proxy

* edit: dayjs proxy is replaced to function
  • Loading branch information
LvtLvt committed Nov 2, 2021
1 parent 8ca605f commit de7471d
Show file tree
Hide file tree
Showing 2 changed files with 120 additions and 11 deletions.
20 changes: 10 additions & 10 deletions packages/cubejs-client-core/src/ResultSet.js
Expand Up @@ -9,12 +9,12 @@ import {

import { aliasSeries } from './utils';

dayjs.locale({
...en,
weekStart: 1,
});
dayjs.extend(quarterOfYear);

// When granularity is week, weekStart Value must be 1. However, since the client can change it globally (https://day.js.org/docs/en/i18n/changing-locale)
// So the function below has been added.
const internalDayjs = (...args) => dayjs(...args).locale({ ...en, weekStart: 1 });

export const TIME_SERIES = {
day: (range) => range.by('d').map(d => d.format('YYYY-MM-DDT00:00:00.000')),
month: (range) => range.snapTo('month').by('M').map(d => d.format('YYYY-MM-01T00:00:00.000')),
Expand Down Expand Up @@ -60,8 +60,8 @@ export const dayRange = (from, to) => ({
by: (value) => {
const results = [];

let start = dayjs(from);
const end = dayjs(to);
let start = internalDayjs(from);
const end = internalDayjs(to);

while (start.isBefore(end) || start.isSame(end)) {
results.push(start);
Expand All @@ -70,9 +70,9 @@ export const dayRange = (from, to) => ({

return results;
},
snapTo: (value) => dayRange(dayjs(from).startOf(value), dayjs(to).endOf(value)),
start: dayjs(from),
end: dayjs(to),
snapTo: (value) => dayRange(internalDayjs(from).startOf(value), internalDayjs(to).endOf(value)),
start: internalDayjs(from),
end: internalDayjs(to),
});

export const QUERY_TYPE = {
Expand Down Expand Up @@ -318,7 +318,7 @@ class ResultSet {
if (!dateRange) {
const member = ResultSet.timeDimensionMember(timeDimension);
const dates = pipe(
map(row => row[member] && dayjs(row[member])),
map(row => row[member] && internalDayjs(row[member])),
filter(Boolean)
)(this.timeDimensionBackwardCompatibleData(resultIndex));

Expand Down
111 changes: 110 additions & 1 deletion packages/cubejs-client-core/src/tests/granularity.test.js
@@ -1,5 +1,6 @@
import 'jest';

import dayjs from 'dayjs';
import ko from 'dayjs/locale/ko';
import ResultSet from '../ResultSet';

describe('ResultSet Granularity', () => {
Expand Down Expand Up @@ -110,5 +111,113 @@ describe('ResultSet Granularity', () => {
},
]);
});

test('week granularity in other locale', () => {
dayjs.locale(ko);
const result = new ResultSet({
queryType: 'regularQuery',
results: [
{
query: {
measures: ['LineItems.count'],
timeDimensions: [
{
dimension: 'LineItems.createdAt',
granularity: 'week',
dateRange: ['2019-01-08T00:00:00.000', '2019-01-18T00:00:00.000'],
},
],
filters: [
{
operator: 'equals',
values: ['us-ut'],
member: 'Users.state',
},
],
limit: 2,
rowLimit: 2,
timezone: 'UTC',
order: [],
dimensions: [],
queryType: 'regularQuery',
},
data: [
{
'LineItems.createdAt.week': '2019-01-07T00:00:00.000',
'LineItems.createdAt': '2019-01-07T00:00:00.000',
'LineItems.count': '2',
},
],
lastRefreshTime: '2021-07-07T14:31:30.458Z',
annotation: {
measures: {
'LineItems.count': {
title: 'Line Items Count',
shortTitle: 'Count',
type: 'number',
drillMembers: ['LineItems.id', 'LineItems.createdAt'],
drillMembersGrouped: {
measures: [],
dimensions: ['LineItems.id', 'LineItems.createdAt'],
},
},
},
dimensions: {},
segments: {},
timeDimensions: {
'LineItems.createdAt.week': {
title: 'Line Items Created at',
shortTitle: 'Created at',
type: 'time',
},
'LineItems.createdAt': {
title: 'Line Items Created at',
shortTitle: 'Created at',
type: 'time',
},
},
},
slowQuery: false,
},
],
pivotQuery: {
measures: ['LineItems.count'],
timeDimensions: [
{
dimension: 'LineItems.createdAt',
granularity: 'week',
dateRange: ['2019-01-08T00:00:00.000', '2019-01-18T00:00:00.000'],
},
],
filters: [
{
operator: 'equals',
values: ['us-ut'],
member: 'Users.state',
},
],
limit: 2,
rowLimit: 2,
timezone: 'UTC',
order: [],
dimensions: [],
queryType: 'regularQuery',
},
slowQuery: false,
});

expect(result.chartPivot()).toStrictEqual([
{
x: '2019-01-07T00:00:00.000',
xValues: ['2019-01-07T00:00:00.000'],
'LineItems.count': 2,
},
{
x: '2019-01-14T00:00:00.000',
xValues: ['2019-01-14T00:00:00.000'],
'LineItems.count': 0,
},
]);
});
});
});

0 comments on commit de7471d

Please sign in to comment.