diff --git a/examples/blocks/src/movies/layout.json b/examples/blocks/src/movies/layout.json index 50e5ebb3a2..876f572ffb 100644 --- a/examples/blocks/src/movies/layout.json +++ b/examples/blocks/src/movies/layout.json @@ -59,7 +59,7 @@ "split_by": ["bucket(\"IMDB Rating\", 0.25)"], "columns": ["US Gross"], "filter": [["bucket(\"IMDB Rating\", 0.25)", "is not null", null]], - "sort": [["bucket(\"IMDB Rating\", 0.25)", "col desc"]], + "sort": [], "expressions": [ "bucket(\"IMDB Rating\", 0.25)", "bucket(\"Rotten Tomatoes Rating\", 2.5)" diff --git a/packages/perspective-viewer-d3fc/src/js/axis/axisFactory.js b/packages/perspective-viewer-d3fc/src/js/axis/axisFactory.js index 927c601428..ae6f84a5c6 100644 --- a/packages/perspective-viewer-d3fc/src/js/axis/axisFactory.js +++ b/packages/perspective-viewer-d3fc/src/js/axis/axisFactory.js @@ -26,6 +26,7 @@ export const axisFactory = (settings) => { let settingName = "crossValues"; let settingValue = null; let valueNames = ["crossValue"]; + let modifyDomain = null; const optionalParams = ["include", "paddingStrategy", "pad"]; const optional = {}; @@ -45,7 +46,11 @@ export const axisFactory = (settings) => { }); if (domainFunction.orient) domainFunction.orient(orient); - const domain = domainFunction(data); + let domain = domainFunction(data); + if (modifyDomain !== null) { + domain = modifyDomain(domain); + } + const component = axis.component ? createComponent(axis, domain, data) : defaultComponent(); @@ -131,6 +136,14 @@ export const axisFactory = (settings) => { return _factory; }; + _factory.modifyDomain = (...args) => { + if (!args.length) { + return modifyDomain; + } + modifyDomain = args[0]; + return _factory; + }; + optionalParams.forEach((p) => { _factory[p] = (...args) => { if (!args.length) { diff --git a/packages/perspective-viewer-d3fc/src/js/charts/heatmap.js b/packages/perspective-viewer-d3fc/src/js/charts/heatmap.js index ab247de53e..030b757f3c 100644 --- a/packages/perspective-viewer-d3fc/src/js/charts/heatmap.js +++ b/packages/perspective-viewer-d3fc/src/js/charts/heatmap.js @@ -30,10 +30,15 @@ function heatmapChart(container, settings) { .excludeType(AXIS_TYPES.linear) .settingName("crossValues") .valueName("crossValue")(data); + const yAxis = axisFactory(settings) .excludeType(AXIS_TYPES.linear) .settingName("splitValues") .valueName("mainValue") + .modifyDomain((d) => { + let is_number = !isNaN(d[0]); + return is_number ? d.reverse() : d; + }) .orient("vertical")(data); const chart = chartCanvasFactory(xAxis, yAxis).plotArea( diff --git a/packages/perspective-viewer-d3fc/test/js/integration/area.spec.js b/packages/perspective-viewer-d3fc/test/js/integration/area.spec.js index 0e437907f4..9ac34d9436 100644 --- a/packages/perspective-viewer-d3fc/test/js/integration/area.spec.js +++ b/packages/perspective-viewer-d3fc/test/js/integration/area.spec.js @@ -13,16 +13,17 @@ const utils = require("@finos/perspective-test"); const simple_tests = require("@finos/perspective-viewer/test/js/simple_tests.js"); const { withTemplate } = require("./simple-template"); +const { util } = require("prettier"); withTemplate("area", "Y Area"); utils.with_server({}, () => { describe.page( "area.html", () => { - simple_tests.default( - utils.get_contents.bind( - null, - "perspective-viewer perspective-viewer-d3fc-yarea" + simple_tests.default((p) => + utils.get_contents( + "perspective-viewer perspective-viewer-d3fc-yarea", + p ) ); }, diff --git a/packages/perspective-viewer-d3fc/test/js/integration/bar.spec.js b/packages/perspective-viewer-d3fc/test/js/integration/bar.spec.js index f2fffee9ea..df8a12d905 100644 --- a/packages/perspective-viewer-d3fc/test/js/integration/bar.spec.js +++ b/packages/perspective-viewer-d3fc/test/js/integration/bar.spec.js @@ -23,11 +23,12 @@ utils.with_server({}, () => { describe.page( "bar.html", () => { - const get_contents = utils.get_contents.bind( - null, - "perspective-viewer perspective-viewer-d3fc-ybar" + simple_tests.default((p) => + utils.get_contents( + "perspective-viewer perspective-viewer-d3fc-ybar", + p + ) ); - simple_tests.default(get_contents); // render_warning_tests.default("Y Bar"); }, { root: path.join(__dirname, "..", "..", "..") } @@ -49,10 +50,10 @@ utils.with_server({}, () => { describe.page( "bar-themed.html", () => { - simple_tests.default( - utils.get_contents.bind( - null, - "perspective-viewer perspective-viewer-d3fc-ybar" + simple_tests.default((p) => + utils.get_contents( + "perspective-viewer perspective-viewer-d3fc-ybar", + p ) ); // render_warning_tests.default("Y Bar"); diff --git a/packages/perspective-viewer-d3fc/test/js/integration/barWidth.spec.js b/packages/perspective-viewer-d3fc/test/js/integration/barWidth.spec.js index 54b3c908ae..3a6e57b13a 100644 --- a/packages/perspective-viewer-d3fc/test/js/integration/barWidth.spec.js +++ b/packages/perspective-viewer-d3fc/test/js/integration/barWidth.spec.js @@ -54,10 +54,10 @@ utils.with_server({}, () => { theme: "Material Light", }); - return await utils.get_contents.bind( - null, - "perspective-viewer perspective-viewer-d3fc-ybar" - )(page); + return await utils.get_contents( + "perspective-viewer perspective-viewer-d3fc-ybar", + page + ); } ); }); diff --git a/packages/perspective-viewer-d3fc/test/js/integration/events.spec.js b/packages/perspective-viewer-d3fc/test/js/integration/events.spec.js index f59535aa79..c30cde659e 100644 --- a/packages/perspective-viewer-d3fc/test/js/integration/events.spec.js +++ b/packages/perspective-viewer-d3fc/test/js/integration/events.spec.js @@ -65,10 +65,10 @@ utils.with_server({}, () => { expect(count).toEqual(1); // Return the chart contents - return utils.get_contents.bind( - null, - "perspective-viewer perspective-viewer-d3fc-yline" - )(page); + return utils.get_contents( + "perspective-viewer perspective-viewer-d3fc-yline", + page + ); } ); @@ -133,10 +133,10 @@ utils.with_server({}, () => { // Return the chart contents - return utils.get_contents.bind( - null, - "perspective-viewer perspective-viewer-d3fc-yline" - )(page); + return utils.get_contents( + "perspective-viewer perspective-viewer-d3fc-yline", + page + ); } ); }, diff --git a/packages/perspective-viewer-d3fc/test/js/integration/heatmap.spec.js b/packages/perspective-viewer-d3fc/test/js/integration/heatmap.spec.js index 3a2657e958..9f63e35b50 100644 --- a/packages/perspective-viewer-d3fc/test/js/integration/heatmap.spec.js +++ b/packages/perspective-viewer-d3fc/test/js/integration/heatmap.spec.js @@ -20,12 +20,24 @@ utils.with_server({}, () => { describe.page( "heatmap.html", () => { - simple_tests.default( - utils.get_contents.bind( - null, - "perspective-viewer perspective-viewer-d3fc-heatmap" - ) - ); + const get_contents = (p) => + utils.get_contents( + "perspective-viewer perspective-viewer-d3fc-heatmap", + p + ); + simple_tests.default(get_contents); + + test.capture("by a numerical column", async (page) => { + await page.evaluate(async () => { + const viewer = document.querySelector("perspective-viewer"); + await viewer.restore({ + split_by: ["Postal Code"], + settings: true, + }); + }); + + return await get_contents(page); + }); // render_warning_tests.default("Heatmap"); }, { reload_page: false, root: path.join(__dirname, "..", "..", "..") } diff --git a/packages/perspective-viewer-d3fc/test/js/integration/line.spec.js b/packages/perspective-viewer-d3fc/test/js/integration/line.spec.js index 5b29f6c615..440bb9a2a4 100644 --- a/packages/perspective-viewer-d3fc/test/js/integration/line.spec.js +++ b/packages/perspective-viewer-d3fc/test/js/integration/line.spec.js @@ -19,12 +19,27 @@ utils.with_server({}, () => { describe.page( "line.html", () => { - simple_tests.default( - utils.get_contents.bind( - null, - "perspective-viewer perspective-viewer-d3fc-yline" - ) - ); + const get_contents = (p) => + utils.get_contents( + "perspective-viewer perspective-viewer-d3fc-yline", + p + ); + simple_tests.default(get_contents); + // TODO: this shouldnt fail: + // This test fails because when given a column with all nulls + // rendering in d3fc errors. This is mostly benign because + // rendering is already not gonna happen at that point. + test.skip("by a numerical column", async (page) => { + await page.evaluate(async () => { + const viewer = document.querySelector("perspective-viewer"); + await viewer.restore({ + split_by: ["Postal Code"], + settings: true, + }); + }); + + return await get_contents(page); + }); // test.capture("Sets a category axis when pivoted by an expression datetime", async page => { // const viewer = await page.$("perspective-viewer"); diff --git a/packages/perspective-viewer-d3fc/test/js/integration/scatter.spec.js b/packages/perspective-viewer-d3fc/test/js/integration/scatter.spec.js index 0365778286..8737c5bdc2 100644 --- a/packages/perspective-viewer-d3fc/test/js/integration/scatter.spec.js +++ b/packages/perspective-viewer-d3fc/test/js/integration/scatter.spec.js @@ -19,10 +19,10 @@ utils.with_server({}, () => { describe.page( "scatter.html", () => { - simple_tests.default( - utils.get_contents.bind( - null, - "perspective-viewer perspective-viewer-d3fc-xyscatter" + simple_tests.default((p) => + utils.get_contents( + "perspective-viewer perspective-viewer-d3fc-xyscatter", + p ) ); diff --git a/packages/perspective-viewer-d3fc/test/js/integration/sunburst.spec.js b/packages/perspective-viewer-d3fc/test/js/integration/sunburst.spec.js index d1a77b62e8..045eb239a1 100644 --- a/packages/perspective-viewer-d3fc/test/js/integration/sunburst.spec.js +++ b/packages/perspective-viewer-d3fc/test/js/integration/sunburst.spec.js @@ -19,10 +19,10 @@ utils.with_server({}, () => { describe.page( "sunburst.html", () => { - simple_tests.default( - utils.get_contents.bind( - null, - "perspective-viewer perspective-viewer-d3fc-sunburst" + simple_tests.default((p) => + utils.get_contents( + "perspective-viewer perspective-viewer-d3fc-sunburst", + p ) ); diff --git a/packages/perspective-viewer-d3fc/test/js/integration/treemap.spec.js b/packages/perspective-viewer-d3fc/test/js/integration/treemap.spec.js index 975e09e42a..26a926ee7e 100644 --- a/packages/perspective-viewer-d3fc/test/js/integration/treemap.spec.js +++ b/packages/perspective-viewer-d3fc/test/js/integration/treemap.spec.js @@ -19,10 +19,10 @@ utils.with_server({}, () => { describe.page( "treemap.html", () => { - simple_tests.default( - utils.get_contents.bind( - null, - "perspective-viewer perspective-viewer-d3fc-treemap" + simple_tests.default((p) => + utils.get_contents( + "perspective-viewer perspective-viewer-d3fc-treemap", + p ) ); diff --git a/packages/perspective-viewer-d3fc/test/js/integration/xy-line.spec.js b/packages/perspective-viewer-d3fc/test/js/integration/xy-line.spec.js index d558d54029..71c4f81ae3 100644 --- a/packages/perspective-viewer-d3fc/test/js/integration/xy-line.spec.js +++ b/packages/perspective-viewer-d3fc/test/js/integration/xy-line.spec.js @@ -19,10 +19,10 @@ utils.with_server({}, () => { describe.page( "xyline.html", () => { - simple_tests.default( - utils.get_contents.bind( - null, - "perspective-viewer perspective-viewer-d3fc-xyline" + simple_tests.default((p) => + utils.get_contents( + "perspective-viewer perspective-viewer-d3fc-xyline", + p ) ); diff --git a/packages/perspective-viewer-d3fc/test/js/integration/yscatter.spec.js b/packages/perspective-viewer-d3fc/test/js/integration/yscatter.spec.js index 3571e06857..07ff057b7c 100644 --- a/packages/perspective-viewer-d3fc/test/js/integration/yscatter.spec.js +++ b/packages/perspective-viewer-d3fc/test/js/integration/yscatter.spec.js @@ -20,11 +20,10 @@ utils.with_server({}, () => { describe.page( "yscatter.html", () => { - simple_tests.default( - utils.get_contents.bind( - null, - - "perspective-viewer perspective-viewer-d3fc-yscatter" + simple_tests.default((p) => + utils.get_contents( + "perspective-viewer perspective-viewer-d3fc-yscatter", + p ) ); // render_warning_tests.default("Y Scatter"); diff --git a/packages/perspective-viewer-d3fc/test/results/results.json b/packages/perspective-viewer-d3fc/test/results/results.json index ab728ae649..d6b41826bf 100644 --- a/packages/perspective-viewer-d3fc/test/results/results.json +++ b/packages/perspective-viewer-d3fc/test/results/results.json @@ -148,5 +148,6 @@ "bar-themed_filters_filters_by_a_numeric_column": "c9e4e2fc4e1a12aa7684e8608f46c653", "bar-themed_filters_filters_by_an_alpha_column": "d586997539b9f76b0733efad0631749d", "bar-themed_filters_filters_with__in__comparator": "914b15437ab74e08463987f7d0166f05", - "xyline_correctly_render_when_a_bar_chart_has_non_equidistant_times_on_a_datetime_axis": "f420990315751370e1237e86b4043332" + "xyline_correctly_render_when_a_bar_chart_has_non_equidistant_times_on_a_datetime_axis": "f420990315751370e1237e86b4043332", + "heatmap_by_a_numerical_column": "c978a9d898ac6dac8b32223aa97d2805" } \ No newline at end of file