From 4444a758e32761d6ce06809034132deb11f4517e Mon Sep 17 00:00:00 2001 From: Andrew Stein Date: Wed, 13 Jul 2022 00:48:09 -0400 Subject: [PATCH] Add categories to plugin selector --- .../src/js/charts/area.js | 1 + .../src/js/charts/bar.js | 1 + .../src/js/charts/candlestick.js | 1 + .../src/js/charts/column.js | 1 + .../src/js/charts/heatmap.js | 1 + .../src/js/charts/line.js | 1 + .../src/js/charts/ohlc.js | 1 + .../src/js/charts/sunburst.js | 1 + .../src/js/charts/treemap.js | 1 + .../src/js/charts/xy-line.js | 1 + .../src/js/charts/xy-scatter.js | 1 + .../src/js/charts/y-scatter.js | 1 + .../src/js/plugin/plugin.js | 4 +++ .../src/js/plugin.js | 4 +++ .../src/rust/components/aggregate_selector.rs | 6 +++- .../src/rust/components/containers/select.rs | 32 +++++++++++++---- .../src/rust/components/copy_dropdown.rs | 9 +++-- .../src/rust/components/export_dropdown.rs | 8 +++-- .../src/rust/components/plugin_selector.rs | 31 +++++++++++------ rust/perspective-viewer/src/rust/js/plugin.rs | 3 ++ rust/perspective-viewer/src/rust/renderer.rs | 3 +- .../src/rust/renderer/plugin_store.rs | 7 ++-- .../src/rust/renderer/registry.rs | 25 ++++++++++---- .../test/results/results.json | 34 +++++++++---------- 24 files changed, 126 insertions(+), 52 deletions(-) diff --git a/packages/perspective-viewer-d3fc/src/js/charts/area.js b/packages/perspective-viewer-d3fc/src/js/charts/area.js index f0a51f5b54..4bb5aa4749 100644 --- a/packages/perspective-viewer-d3fc/src/js/charts/area.js +++ b/packages/perspective-viewer-d3fc/src/js/charts/area.js @@ -98,6 +98,7 @@ function areaChart(container, settings) { } areaChart.plugin = { name: "Y Area", + category: "Y Chart", max_cells: 4000, max_columns: 50, render_warning: true, diff --git a/packages/perspective-viewer-d3fc/src/js/charts/bar.js b/packages/perspective-viewer-d3fc/src/js/charts/bar.js index 05def95846..3eb2fef497 100644 --- a/packages/perspective-viewer-d3fc/src/js/charts/bar.js +++ b/packages/perspective-viewer-d3fc/src/js/charts/bar.js @@ -66,6 +66,7 @@ function barChart(container, settings) { } barChart.plugin = { name: "X Bar", + category: "X Chart", max_cells: 1000, max_columns: 50, render_warning: true, diff --git a/packages/perspective-viewer-d3fc/src/js/charts/candlestick.js b/packages/perspective-viewer-d3fc/src/js/charts/candlestick.js index 7349356770..61459ba435 100644 --- a/packages/perspective-viewer-d3fc/src/js/charts/candlestick.js +++ b/packages/perspective-viewer-d3fc/src/js/charts/candlestick.js @@ -12,6 +12,7 @@ import ohlcCandle from "./ohlcCandle"; const candlestick = ohlcCandle(seriesCanvasCandlestick); candlestick.plugin = { name: "Candlestick", + category: "Y Chart", max_cells: 4000, max_columns: 50, render_warning: true, diff --git a/packages/perspective-viewer-d3fc/src/js/charts/column.js b/packages/perspective-viewer-d3fc/src/js/charts/column.js index 2586b58329..45180bc0c3 100644 --- a/packages/perspective-viewer-d3fc/src/js/charts/column.js +++ b/packages/perspective-viewer-d3fc/src/js/charts/column.js @@ -93,6 +93,7 @@ function columnChart(container, settings) { } columnChart.plugin = { name: "Y Bar", + category: "Y Chart", max_cells: 1000, max_columns: 50, render_warning: true, diff --git a/packages/perspective-viewer-d3fc/src/js/charts/heatmap.js b/packages/perspective-viewer-d3fc/src/js/charts/heatmap.js index 8ce006114c..2e7caf0412 100644 --- a/packages/perspective-viewer-d3fc/src/js/charts/heatmap.js +++ b/packages/perspective-viewer-d3fc/src/js/charts/heatmap.js @@ -82,6 +82,7 @@ function heatmapChart(container, settings) { } heatmapChart.plugin = { name: "Heatmap", + category: "Hierarchial Chart", max_cells: 50000, max_columns: 500, render_warning: true, diff --git a/packages/perspective-viewer-d3fc/src/js/charts/line.js b/packages/perspective-viewer-d3fc/src/js/charts/line.js index cd2ee899cf..3492193344 100644 --- a/packages/perspective-viewer-d3fc/src/js/charts/line.js +++ b/packages/perspective-viewer-d3fc/src/js/charts/line.js @@ -97,6 +97,7 @@ function lineChart(container, settings) { lineChart.plugin = { name: "Y Line", + category: "Y Chart", max_cells: 4000, max_columns: 50, render_warning: true, diff --git a/packages/perspective-viewer-d3fc/src/js/charts/ohlc.js b/packages/perspective-viewer-d3fc/src/js/charts/ohlc.js index 2b99321d02..044cc32604 100644 --- a/packages/perspective-viewer-d3fc/src/js/charts/ohlc.js +++ b/packages/perspective-viewer-d3fc/src/js/charts/ohlc.js @@ -12,6 +12,7 @@ import ohlcCandle from "./ohlcCandle"; const ohlc = ohlcCandle(seriesCanvasOhlc); ohlc.plugin = { name: "OHLC", + category: "Y Chart", max_cells: 3500, max_columns: 50, render_warning: true, diff --git a/packages/perspective-viewer-d3fc/src/js/charts/sunburst.js b/packages/perspective-viewer-d3fc/src/js/charts/sunburst.js index 0264858c95..98e7d6bf3d 100644 --- a/packages/perspective-viewer-d3fc/src/js/charts/sunburst.js +++ b/packages/perspective-viewer-d3fc/src/js/charts/sunburst.js @@ -87,6 +87,7 @@ function sunburst(container, settings) { sunburst.plugin = { name: "Sunburst", + category: "Hierarchial Chart", max_cells: 7500, max_columns: 50, render_warning: true, diff --git a/packages/perspective-viewer-d3fc/src/js/charts/treemap.js b/packages/perspective-viewer-d3fc/src/js/charts/treemap.js index 9b3caf7011..0ea1737bf5 100644 --- a/packages/perspective-viewer-d3fc/src/js/charts/treemap.js +++ b/packages/perspective-viewer-d3fc/src/js/charts/treemap.js @@ -80,6 +80,7 @@ function treemap(container, settings) { treemap.plugin = { type: "Treemap", name: "Treemap", + category: "Hierarchial Chart", max_cells: 5000, max_columns: 50, render_warning: true, diff --git a/packages/perspective-viewer-d3fc/src/js/charts/xy-line.js b/packages/perspective-viewer-d3fc/src/js/charts/xy-line.js index 709c0dda87..0165e32b9d 100644 --- a/packages/perspective-viewer-d3fc/src/js/charts/xy-line.js +++ b/packages/perspective-viewer-d3fc/src/js/charts/xy-line.js @@ -95,6 +95,7 @@ function xyLine(container, settings) { xyLine.plugin = { name: "X/Y Line", + category: "X/Y Chart", max_cells: 50000, max_columns: 50, render_warning: true, diff --git a/packages/perspective-viewer-d3fc/src/js/charts/xy-scatter.js b/packages/perspective-viewer-d3fc/src/js/charts/xy-scatter.js index 41b0273326..1d6f0cdd9f 100644 --- a/packages/perspective-viewer-d3fc/src/js/charts/xy-scatter.js +++ b/packages/perspective-viewer-d3fc/src/js/charts/xy-scatter.js @@ -132,6 +132,7 @@ function xyScatter(container, settings) { xyScatter.plugin = { name: "X/Y Scatter", + category: "X/Y Chart", max_cells: 50000, max_columns: 50, render_warning: true, diff --git a/packages/perspective-viewer-d3fc/src/js/charts/y-scatter.js b/packages/perspective-viewer-d3fc/src/js/charts/y-scatter.js index ee2ca18a10..af1e85a832 100644 --- a/packages/perspective-viewer-d3fc/src/js/charts/y-scatter.js +++ b/packages/perspective-viewer-d3fc/src/js/charts/y-scatter.js @@ -103,6 +103,7 @@ function yScatter(container, settings) { yScatter.plugin = { name: "Y Scatter", + category: "Y Chart", max_cells: 4000, max_columns: 50, render_warning: true, diff --git a/packages/perspective-viewer-d3fc/src/js/plugin/plugin.js b/packages/perspective-viewer-d3fc/src/js/plugin/plugin.js index 02680b6f70..c203a85259 100644 --- a/packages/perspective-viewer-d3fc/src/js/plugin/plugin.js +++ b/packages/perspective-viewer-d3fc/src/js/plugin/plugin.js @@ -88,6 +88,10 @@ export function register(...plugins) { return chart.plugin.name; } + get category() { + return chart.plugin.category; + } + get select_mode() { return chart.plugin.selectMode || "select"; } diff --git a/packages/perspective-viewer-datagrid/src/js/plugin.js b/packages/perspective-viewer-datagrid/src/js/plugin.js index 52433da95b..a317943f86 100644 --- a/packages/perspective-viewer-datagrid/src/js/plugin.js +++ b/packages/perspective-viewer-datagrid/src/js/plugin.js @@ -133,6 +133,10 @@ export class PerspectiveViewerDatagridPluginElement extends HTMLElement { return "Datagrid"; } + get category() { + return "Basic"; + } + get select_mode() { return "toggle"; } diff --git a/rust/perspective-viewer/src/rust/components/aggregate_selector.rs b/rust/perspective-viewer/src/rust/components/aggregate_selector.rs index 298777537d..f071013c47 100644 --- a/rust/perspective-viewer/src/rust/components/aggregate_selector.rs +++ b/rust/perspective-viewer/src/rust/components/aggregate_selector.rs @@ -90,6 +90,7 @@ impl Component for AggregateSelector { class={ "aggregate-selector" } values={ values } + label="weighted mean" selected={ selected_agg } on_select={ callback }> @@ -126,7 +127,10 @@ impl AggregateSelector { .collect::>(); let multi_aggregates2 = if !multi_aggregates.is_empty() { - vec![SelectItem::OptGroup("weighted mean", multi_aggregates)] + vec![SelectItem::OptGroup( + "weighted mean".into(), + multi_aggregates, + )] } else { vec![] }; diff --git a/rust/perspective-viewer/src/rust/components/containers/select.rs b/rust/perspective-viewer/src/rust/components/containers/select.rs index 984ab34da8..c177548097 100644 --- a/rust/perspective-viewer/src/rust/components/containers/select.rs +++ b/rust/perspective-viewer/src/rust/components/containers/select.rs @@ -6,6 +6,8 @@ // of the Apache License 2.0. The full license can be found in the LICENSE // file. +use std::borrow::Borrow; +use std::borrow::Cow; use std::fmt::Debug; use std::fmt::Display; use std::str::FromStr; @@ -15,7 +17,16 @@ use yew::prelude::*; #[derive(Clone, Eq, PartialEq)] pub enum SelectItem { Option(T), - OptGroup(&'static str, Vec), + OptGroup(Cow<'static, str>, Vec), +} + +impl SelectItem { + pub fn name<'a>(&self) -> Cow<'a, str> { + match self { + Self::Option(x) => format!("{}", x).into(), + Self::OptGroup(x, _) => x.clone(), + } + } } pub enum SelectMsg { @@ -32,6 +43,9 @@ where pub selected: T, pub on_select: Callback, + #[prop_or_default] + pub label: Option<&'static str>, + #[prop_or_default] pub id: Option<&'static str>, @@ -137,15 +151,19 @@ where } }, SelectItem::OptGroup(name, group) => html! { - + { for group.iter().map(|value| { let selected = *value == ctx.props().selected; - let label = format!("{}", value) - .strip_prefix(name) - .unwrap() + let label = format!("{}", value); + let category: &str = name.borrow(); + let label = label + .strip_prefix(category) + .unwrap_or(&label) .trim() .to_owned(); @@ -167,8 +185,8 @@ where }; html! { - if is_group_selected { - + if is_group_selected && ctx.props().label.is_some() { +