Skip to content

Commit f087c2b

Browse files
authored
Merge pull request #271 from jpmorganchase/date-types
Date types
2 parents 1090230 + 7d0f872 commit f087c2b

File tree

17 files changed

+211
-71
lines changed

17 files changed

+211
-71
lines changed

packages/perspective-viewer-highcharts/src/js/config.js

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ export function set_boost(config, series, ...types) {
1414
if (count > 5000) {
1515
Object.assign(config, {
1616
boost: {
17-
useGPUTranslations: types.indexOf("date") === -1,
18-
usePreAllocated: types.indexOf("date") === -1
17+
useGPUTranslations: types.indexOf("datetime") === -1 && types.indexOf("date") === -1,
18+
usePreAllocated: types.indexOf("datetime") === -1 && types.indexOf("date") === -1
1919
}
2020
});
2121
config.plotOptions.series.boostThreshold = 1;
@@ -40,7 +40,7 @@ export function set_both_axis(config, axis, name, type, tree_type, top) {
4040

4141
export function set_axis(config, axis, name, type) {
4242
let opts = {
43-
type: type === "date" ? "datetime" : undefined,
43+
type: ["datetime", "date"].indexOf(type) > -1 ? "datetime" : undefined,
4444
startOnTick: false,
4545
endOnTick: false,
4646
title: {
@@ -55,7 +55,7 @@ export function set_axis(config, axis, name, type) {
5555
}
5656

5757
export function set_category_axis(config, axis, type, top) {
58-
if (type === "date") {
58+
if (type === "datetime") {
5959
Object.assign(config, {
6060
[axis]: {
6161
categories: top.categories.map(x => new Date(x).toLocaleString("en-us", {year: "numeric", month: "numeric", day: "numeric", hour: "numeric", minute: "numeric"})),
@@ -65,6 +65,16 @@ export function set_category_axis(config, axis, type, top) {
6565
}
6666
}
6767
});
68+
} else if (type === "date") {
69+
Object.assign(config, {
70+
[axis]: {
71+
categories: top.categories.map(x => new Date(x).toLocaleString("en-us", {year: "numeric", month: "numeric", day: "numeric"})),
72+
labels: {
73+
enabled: top.categories.length > 0,
74+
autoRotation: [-5]
75+
}
76+
}
77+
});
6878
} else {
6979
let opts = {
7080
categories: top.categories,

packages/perspective-viewer-highcharts/src/js/tooltip.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,10 @@ function value_exists(value) {
144144
}
145145

146146
function format_value(value, type) {
147-
if (type === "date") {
147+
if (type === "datetime") {
148148
return new Date(value).toLocaleString();
149+
} else if (type === "date") {
150+
return new Date(value).toLocaleString("en-us", {year: "numeric", month: "numeric", day: "numeric"});
149151
} else if (type === "float" || type === "integer") {
150152
return format_number(value, type);
151153
} else {

packages/perspective-viewer-hypergrid/src/js/hypergrid.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ bindTemplate(TEMPLATE)(
235235
const integer_formatter = null_formatter(new this.grid.localization.NumberFormatter("en-US", {}));
236236
this.grid.localization.add("FinanceInteger", integer_formatter);
237237

238-
const date_formatter = null_formatter(
238+
const datetime_formatter = null_formatter(
239239
new this.grid.localization.DateFormatter("en-us", {
240240
week: "numeric",
241241
year: "numeric",
@@ -247,12 +247,24 @@ bindTemplate(TEMPLATE)(
247247
}),
248248
-1
249249
);
250+
251+
const date_formatter = null_formatter(
252+
new this.grid.localization.DateFormatter("en-us", {
253+
week: "numeric",
254+
year: "numeric",
255+
month: "numeric",
256+
day: "numeric"
257+
}),
258+
-1
259+
);
260+
this.grid.localization.add("FinanceDatetime", datetime_formatter);
250261
this.grid.localization.add("FinanceDate", date_formatter);
251262

252263
this.grid.localization.add("FinanceTree", {
253264
format: function(val, type) {
254265
const f = {
255266
date: date_formatter,
267+
datetime: datetime_formatter,
256268
integer: integer_formatter,
257269
float: float_formatter
258270
}[type];

packages/perspective-viewer-hypergrid/src/js/perspective-plugin.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@ function setColumnPropsByType(column) {
9292
case "date":
9393
props.format = "FinanceDate";
9494
break;
95+
case "datetime":
96+
props.format = "FinanceDatetime";
97+
break;
9598
default:
9699
if (column.index === this.treeColumnIndex) {
97100
props.format = "FinanceTree";

packages/perspective-viewer/src/js/computed_column.js

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,15 @@ const hour_bucket = function(val) {
4242
let date = new Date(val);
4343
date.setMinutes(0);
4444
date.setSeconds(0);
45-
return +date;
45+
return date;
4646
};
4747

4848
const day_bucket = function(val) {
4949
let date = new Date(val);
5050
date.setHours(0);
5151
date.setMinutes(0);
5252
date.setSeconds(0);
53-
return +date;
53+
return date;
5454
};
5555

5656
const week_bucket = function(val) {
@@ -61,7 +61,7 @@ const week_bucket = function(val) {
6161
date.setMinutes(0);
6262
date.setSeconds(0);
6363
date.setDate(diff);
64-
return +date;
64+
return date;
6565
};
6666

6767
const month_bucket = function(val) {
@@ -70,17 +70,17 @@ const month_bucket = function(val) {
7070
date.setMinutes(0);
7171
date.setSeconds(0);
7272
date.setDate(1);
73-
return +date;
73+
return date;
7474
};
7575

7676
export const COMPUTATIONS = {
77-
hour_of_day: new Computation("hour_of_day", "date", "integer", hour_of_day),
78-
day_of_week: new Computation("day_of_week", "date", "string", day_of_week),
79-
month_of_year: new Computation("month_of_year", "date", "string", month_of_year),
80-
hour_bucket: new Computation("hour_bucket", "date", "date", hour_bucket),
81-
day_bucket: new Computation("day_bucket", "date", "date", day_bucket),
82-
week_bucket: new Computation("week_bucket", "date", "date", week_bucket),
83-
month_bucket: new Computation("month_bucket", "date", "date", month_bucket),
77+
hour_of_day: new Computation("hour_of_day", "datetime", "integer", hour_of_day),
78+
day_of_week: new Computation("day_of_week", "datetime", "string", day_of_week),
79+
month_of_year: new Computation("month_of_year", "datetime", "string", month_of_year),
80+
hour_bucket: new Computation("hour_bucket", "datetime", "datetime", hour_bucket),
81+
day_bucket: new Computation("day_bucket", "datetime", "date", day_bucket),
82+
week_bucket: new Computation("week_bucket", "datetime", "date", week_bucket),
83+
month_bucket: new Computation("month_bucket", "datetime", "date", month_bucket),
8484
uppercase: new Computation("uppercase", "string", "string", x => x.toUpperCase()),
8585
lowercase: new Computation("lowercase", "string", "string", x => x.toLowerCase()),
8686
length: new Computation("length", "string", "integer", x => x.length),
@@ -107,7 +107,7 @@ class ComputedColumn extends HTMLElement {
107107
integer: "123",
108108
string: "abc",
109109
boolean: "t/f",
110-
date: "mdy"
110+
datetime: "mdy"
111111
};
112112
}
113113

@@ -329,7 +329,11 @@ class ComputedColumn extends HTMLElement {
329329

330330
const index = Number.parseInt(target.getAttribute("data-index"));
331331

332-
if ((computation_type !== "float" && type !== computation_type) || (computation_type === "float" && type !== "float" && type !== "integer")) {
332+
if (
333+
(computation_type !== "float" && computation_type !== "datetime" && type !== computation_type) ||
334+
(computation_type === "float" && type !== "float" && type !== "integer") ||
335+
(computation_type === "datetime" && type !== "datetime" && type !== "date")
336+
) {
333337
this._register_inputs();
334338
this.state.errors.input_column = `Input column type (${type}) must match computation input type (${computation_type}).`;
335339
this._set_error_message("input_column", this._input_column_error_message);

packages/perspective-viewer/src/js/row.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,12 @@ class Row extends HTMLElement {
9494
filter_dropdown.innerHTML = perspective.TYPE_FILTERS.boolean.map(agg => `<option value="${agg}">${agg}</option>`).join("");
9595
break;
9696
case "date":
97-
agg_dropdown.innerHTML = perspective.TYPE_AGGREGATES.date.map(agg => `<option value="${agg}">${agg}</option>`).join("");
98-
filter_dropdown.innerHTML = perspective.TYPE_FILTERS.date.map(agg => `<option value="${agg}">${agg}</option>`).join("");
97+
agg_dropdown.innerHTML = perspective.TYPE_AGGREGATES.datetime.map(agg => `<option value="${agg}">${agg}</option>`).join("");
98+
filter_dropdown.innerHTML = perspective.TYPE_FILTERS.datetime.map(agg => `<option value="${agg}">${agg}</option>`).join("");
99+
break;
100+
case "datetime":
101+
agg_dropdown.innerHTML = perspective.TYPE_AGGREGATES.datetime.map(agg => `<option value="${agg}">${agg}</option>`).join("");
102+
filter_dropdown.innerHTML = perspective.TYPE_FILTERS.datetime.map(agg => `<option value="${agg}">${agg}</option>`).join("");
99103
break;
100104
case "string":
101105
agg_dropdown.innerHTML = perspective.TYPE_AGGREGATES.string.map(agg => `<option value="${agg}">${agg}</option>`).join("");

packages/perspective-viewer/src/js/view.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ async function loadTable(table, redraw = true) {
361361
this.setAttribute("columns", JSON.stringify(this._initial_col_order));
362362
}
363363

364-
let type_order = {integer: 2, string: 0, float: 3, boolean: 4, date: 1};
364+
let type_order = {integer: 2, string: 0, float: 3, boolean: 4, datetime: 1};
365365

366366
// Sort columns by type and then name
367367
cols.sort((a, b) => {

packages/perspective-viewer/src/less/computed_column.less

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,12 @@ perspective-computed-column {
185185
color: #999999;
186186
}
187187

188+
&.datetime::before {
189+
.column_row();
190+
content: "mdy";
191+
color: #999999;
192+
}
193+
188194
&.date::before {
189195
.column_row();
190196
content: "mdy";
@@ -252,7 +258,7 @@ perspective-computed-column {
252258
text-align: center;
253259
padding-top: 4px;
254260

255-
.date,
261+
.datetime,
256262
.boolean {
257263
color: #999;
258264
}

packages/perspective-viewer/src/less/default.less

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,12 @@ perspective-viewer {
268268
color: #999999;
269269
}
270270

271+
.datetime::before {
272+
.column_row();
273+
content: "mdy";
274+
color: #999999;
275+
}
276+
271277
.date::before {
272278
.column_row();
273279
content: "mdy";

packages/perspective-viewer/src/less/material.less

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,8 @@ perspective-viewer #app {
154154
&.string:before,
155155
&.float:before,
156156
&.integer:before,
157-
&.date:before {
157+
&.date:before,
158+
&.datetime:before {
158159
font-family: @material-monospace-fonts;
159160
padding-left: 0;
160161
}
@@ -190,6 +191,11 @@ perspective-viewer #app {
190191
content: "t/f";
191192
}
192193

194+
#side_panel perspective-row .datetime::before {
195+
.column_row();
196+
content: "mdy";
197+
}
198+
193199
#side_panel perspective-row .date::before {
194200
.column_row();
195201
content: "mdy";

0 commit comments

Comments
 (0)