From ed53227f9c31144035050039b283a6a9b5858f67 Mon Sep 17 00:00:00 2001 From: Andrew Stein Date: Sun, 22 Mar 2026 23:09:43 -0400 Subject: [PATCH] Add presize API to `` Signed-off-by: Andrew Stein --- .github/actions/install-deps/action.yaml | 10 + .../src/rust/config/expressions.rs | 2 +- .../src/less/column-selector.less | 5 + rust/perspective-viewer/src/less/viewer.less | 4 + .../src/rust/components/column_dropdown.rs | 348 ++++++++++++------ .../src/rust/components/column_selector.rs | 37 +- .../column_selector/active_column.rs | 22 +- .../column_selector/aggregate_selector.rs | 5 +- .../column_selector/config_selector.rs | 185 +++++----- .../column_selector/empty_column.rs | 4 +- .../column_selector/expr_edit_button.rs | 8 +- .../column_selector/filter_column.rs | 6 +- .../column_selector/inactive_column.rs | 21 +- .../column_selector/pivot_column.rs | 4 +- .../components/column_selector/sort_column.rs | 6 +- .../components/column_settings_sidebar.rs | 13 +- .../column_settings_sidebar/style_tab.rs | 11 +- .../style_tab/symbol.rs | 8 +- .../style_tab/symbol/row_selector.rs | 2 +- .../style_tab/symbol/symbol_pairs.rs | 5 +- .../style_tab/symbol/symbol_pairs_item.rs | 5 +- .../style_tab/symbol/symbol_selector.rs | 5 +- .../components/containers/dragdrop_list.rs | 2 +- .../src/rust/components/copy_dropdown.rs | 21 +- .../src/rust/components/editable_header.rs | 4 +- .../src/rust/components/empty_row.rs | 2 +- .../src/rust/components/export_dropdown.rs | 23 +- .../src/rust/components/expression_editor.rs | 9 +- .../src/rust/components/filter_dropdown.rs | 348 +++++++++++++----- .../src/rust/components/form/code_editor.rs | 12 +- .../src/rust/components/function_dropdown.rs | 299 +++++++++------ .../src/rust/components/main_panel.rs | 5 +- .../src/rust/components/mod.rs | 1 + .../src/rust/components/modal.rs | 8 +- .../src/rust/components/plugin_selector.rs | 5 +- .../src/rust/components/portal.rs | 274 ++++++++++++++ .../src/rust/components/settings_panel.rs | 29 +- .../src/rust/components/status_bar.rs | 97 ++++- .../src/rust/components/viewer.rs | 8 +- .../rust/custom_elements/column_dropdown.rs | 123 ------- .../src/rust/custom_elements/copy_dropdown.rs | 121 +++++- .../rust/custom_elements/export_dropdown.rs | 120 +++++- .../rust/custom_elements/filter_dropdown.rs | 179 --------- .../rust/custom_elements/function_dropdown.rs | 115 ------ .../src/rust/custom_elements/mod.rs | 7 - .../src/rust/custom_elements/modal.rs | 108 +----- .../src/rust/custom_elements/viewer.rs | 56 ++- .../src/rust/custom_events.rs | 4 + rust/perspective-viewer/src/rust/lib.rs | 2 +- .../src/rust/presentation.rs | 10 +- .../src/rust/presentation/props.rs | 5 +- rust/perspective-viewer/src/rust/renderer.rs | 27 +- .../src/rust/renderer/props.rs | 5 +- rust/perspective-viewer/src/rust/session.rs | 8 +- .../src/rust/session/metadata.rs | 3 + .../src/rust/session/props.rs | 9 +- rust/perspective-viewer/src/rust/utils/mod.rs | 4 + .../src/rust/utils/modal_position.rs | 110 ++++++ .../src/rust/utils/ptr_eq_rc.rs | 74 ++++ .../src/rust/utils/pubsub.rs | 4 +- .../test/js/viewer_config/cancellable.spec.ts | 2 +- tools/test/results.tar.gz | Bin 171912 -> 172951 bytes 62 files changed, 1797 insertions(+), 1162 deletions(-) create mode 100644 rust/perspective-viewer/src/rust/components/portal.rs delete mode 100644 rust/perspective-viewer/src/rust/custom_elements/column_dropdown.rs delete mode 100644 rust/perspective-viewer/src/rust/custom_elements/filter_dropdown.rs delete mode 100644 rust/perspective-viewer/src/rust/custom_elements/function_dropdown.rs create mode 100644 rust/perspective-viewer/src/rust/utils/modal_position.rs create mode 100644 rust/perspective-viewer/src/rust/utils/ptr_eq_rc.rs diff --git a/.github/actions/install-deps/action.yaml b/.github/actions/install-deps/action.yaml index 42e8fc05c9..e3ebe0c328 100644 --- a/.github/actions/install-deps/action.yaml +++ b/.github/actions/install-deps/action.yaml @@ -164,6 +164,16 @@ runs: targets: aarch64-unknown-linux-gnu components: rust-src + # Did you see a CI error of the form: + # + # error: failed to install component: 'clippy-preview-aarch64-unknown-linux-gnu', + # detected conflict: 'bin/cargo-clippy' + # + # See https://github.com/rust-lang/rustup/issues/988#issuecomment-1820438467 + - name: Stupid cargo hack + shell: bash + run: cargo version + # # TODO doesn't work. # - name: Install LLVM 17 # if: ${{ inputs.cpp == 'true' }} diff --git a/rust/perspective-client/src/rust/config/expressions.rs b/rust/perspective-client/src/rust/config/expressions.rs index c851c33362..e1756ad64a 100644 --- a/rust/perspective-client/src/rust/config/expressions.rs +++ b/rust/perspective-client/src/rust/config/expressions.rs @@ -251,7 +251,7 @@ impl Expressions { } #[doc(hidden)] -#[derive(Serialize, Clone, Copy)] +#[derive(Serialize, Clone, Copy, PartialEq)] pub struct CompletionItemSuggestion { pub label: &'static str, pub insert_text: &'static str, diff --git a/rust/perspective-viewer/src/less/column-selector.less b/rust/perspective-viewer/src/less/column-selector.less index ac1de261ef..537f1e716a 100644 --- a/rust/perspective-viewer/src/less/column-selector.less +++ b/rust/perspective-viewer/src/less/column-selector.less @@ -210,6 +210,11 @@ } } + span.expression-edit-button.disabled { + opacity: 0; + pointer-events: none; + } + span.expression-delete-button { padding-left: 5px; margin-right: 8px; diff --git a/rust/perspective-viewer/src/less/viewer.less b/rust/perspective-viewer/src/less/viewer.less index 4d0ae1bcf4..8c17946326 100644 --- a/rust/perspective-viewer/src/less/viewer.less +++ b/rust/perspective-viewer/src/less/viewer.less @@ -314,7 +314,9 @@ &:before { display: inline-block; height: 20px; + min-height: 20px; width: 20px; + min-width: 20px; content: ""; mask-size: cover; -webkit-mask-size: cover; @@ -351,7 +353,9 @@ &:before { display: inline-block; height: 20px; + min-height: 20px; width: 20px; + min-width: 20px; content: ""; mask-size: cover; -webkit-mask-size: cover; diff --git a/rust/perspective-viewer/src/rust/components/column_dropdown.rs b/rust/perspective-viewer/src/rust/components/column_dropdown.rs index 99a4bacd9e..9d38b0de94 100644 --- a/rust/perspective-viewer/src/rust/components/column_dropdown.rs +++ b/rust/perspective-viewer/src/rust/components/column_dropdown.rs @@ -10,153 +10,263 @@ // ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ +use std::cell::RefCell; +use std::collections::HashSet; +use std::rc::Rc; + +use perspective_client::clone; +use perspective_client::config::Expression; use web_sys::*; +use yew::html::ImplicitClone; use yew::prelude::*; use super::column_selector::InPlaceColumn; -use super::modal::*; -use crate::utils::WeakScope; +use super::portal::PortalModal; +use crate::session::Session; +use crate::utils::*; +use crate::*; static CSS: &str = include_str!(concat!(env!("OUT_DIR"), "/css/column-dropdown.css")); -#[derive(Properties, PartialEq)] -pub struct ColumnDropDownProps { - #[prop_or_default] - pub weak_link: WeakScope, -} - -impl ModalLink for ColumnDropDownProps { - fn weak_link(&self) -> &'_ WeakScope { - &self.weak_link - } +/// Shared state for the column dropdown, updated imperatively. +#[derive(Default)] +pub struct ColumnDropDownState { + pub values: Vec, + pub selected: usize, + pub width: f64, + pub on_select: Option>, + pub target: Option, + pub no_results: bool, } -pub enum ColumnDropDownMsg { - SetValues(Vec, f64), - SetCallback(Callback), - ItemDown, - ItemUp, - ItemSelect, +/// A clonable handle for the column dropdown shared state. +#[derive(Clone)] +pub struct ColumnDropDownElement { + state: Rc>, + session: Session, + notify: Rc>, } -pub struct ColumnDropDown { - values: Option>, - selected: usize, - width: f64, - on_select: Option>, +impl PartialEq for ColumnDropDownElement { + fn eq(&self, other: &Self) -> bool { + Rc::ptr_eq(&self.state, &other.state) + } } -impl Component for ColumnDropDown { - type Message = ColumnDropDownMsg; - type Properties = ColumnDropDownProps; +impl ImplicitClone for ColumnDropDownElement {} - fn create(ctx: &Context) -> Self { - ctx.set_modal_link(); +impl ColumnDropDownElement { + pub fn new(session: Session) -> Self { Self { - values: Some(vec![]), - selected: 0, - width: 0.0, - on_select: None, + state: Default::default(), + session, + notify: Rc::default(), } } - fn update(&mut self, _ctx: &Context, msg: Self::Message) -> bool { - match msg { - ColumnDropDownMsg::SetCallback(callback) => { - self.on_select = Some(callback); - false - }, - ColumnDropDownMsg::SetValues(values, width) => { - self.values = Some(values); - self.selected = 0; - self.width = width; - true - }, - ColumnDropDownMsg::ItemSelect => { - if let Some(ref values) = self.values { - match values.get(self.selected) { - None => { - console::error_1(&"Selected out-of-bounds".into()); - false - }, - Some(x) => { - self.on_select.as_ref().unwrap().emit(x.clone()); - false - }, - } - } else { - console::error_1(&"No Values".into()); - false - } - }, - ColumnDropDownMsg::ItemDown => { - self.selected += 1; - if let Some(ref values) = self.values - && self.selected >= values.len() - { - self.selected = 0; - } + pub fn autocomplete( + &self, + target: HtmlInputElement, + exclude: HashSet, + callback: Callback, + ) -> Option<()> { + let input = target.value(); + let metadata = self.session.metadata(); + let mut values: Vec = vec![]; + let small_input = input.to_lowercase(); + for col in metadata.get_table_columns()? { + if !exclude.contains(col) && col.to_lowercase().contains(&small_input) { + values.push(InPlaceColumn::Column(col.to_owned())); + } + } + + for col in self.session.metadata().get_expression_columns() { + if !exclude.contains(col) && col.to_lowercase().contains(&small_input) { + values.push(InPlaceColumn::Column(col.to_owned())); + } + } - true - }, - ColumnDropDownMsg::ItemUp => { - if let Some(ref values) = self.values - && self.selected < 1 - { - self.selected = values.len(); + clone!(self.state, self.session, self.notify); + let target_elem: HtmlElement = target.clone().into(); + let width = target.get_bounding_client_rect().width(); + ApiFuture::spawn(async move { + if !exclude.contains(&input) { + let is_expr = session.validate_expr(&input).await?.is_none(); + if is_expr { + values.push(InPlaceColumn::Expression(Expression::new( + None, + input.into(), + ))); } + } + + let no_results = values.is_empty(); + { + let mut s = state.borrow_mut(); + s.values = values; + s.selected = 0; + s.width = width; + s.on_select = Some(callback); + s.target = Some(target_elem); + s.no_results = no_results; + } + notify.emit(()); + Ok(()) + }); + + Some(()) + } - self.selected -= 1; - true - }, + pub fn item_select(&self) { + let state = self.state.borrow(); + if let Some(value) = state.values.get(state.selected) + && let Some(ref cb) = state.on_select + { + cb.emit(value.clone()); } } - fn changed(&mut self, _ctx: &Context, _old: &Self::Properties) -> bool { - false + pub fn item_down(&self) { + let mut state = self.state.borrow_mut(); + state.selected += 1; + if state.selected >= state.values.len() { + state.selected = 0; + } + + drop(state); + self.notify.emit(()); } - fn view(&self, _ctx: &Context) -> Html { - let body = html! { - if let Some(ref values) = self.values { - if !values.is_empty() { - { for values - .iter() - .enumerate() - .map(|(idx, value)| { - let click = self.on_select.as_ref().unwrap().reform({ - let value = value.clone(); - move |_: MouseEvent| value.clone() - }); - - let row = match value { - InPlaceColumn::Column(col) => html! { - { col } - }, - InPlaceColumn::Expression(col) => html! { - { col.name.clone() } - }, - }; - - html! { - if idx == self.selected { - { row } - } else { - { row } - } - } - }) } - } else { - - } - } + pub fn item_up(&self) { + let mut state = self.state.borrow_mut(); + if state.selected < 1 { + state.selected = state.values.len(); + } + + state.selected -= 1; + drop(state); + self.notify.emit(()); + } + + pub fn hide(&self) -> ApiResult<()> { + self.state.borrow_mut().target = None; + self.notify.emit(()); + Ok(()) + } +} + +/// A portal component that renders the column dropdown. Should be placed in +/// the view of the component that creates the `ColumnDropDownElement`. +#[derive(Properties, PartialEq)] +pub struct ColumnDropDownPortalProps { + pub element: ColumnDropDownElement, + pub theme: String, +} + +pub struct ColumnDropDownPortal { + _sub: Subscription, +} + +impl Component for ColumnDropDownPortal { + type Message = (); + type Properties = ColumnDropDownPortalProps; + + fn create(ctx: &Context) -> Self { + let link = ctx.link().clone(); + let sub = ctx + .props() + .element + .notify + .add_listener(move |()| link.send_message(())); + Self { _sub: sub } + } + + fn update(&mut self, _ctx: &Context, _msg: ()) -> bool { + true + } + + fn view(&self, ctx: &Context) -> Html { + let state = ctx.props().element.state.borrow(); + let target = state.target.clone(); + let on_close = { + let element = ctx.props().element.clone(); + Callback::from(move |()| { + let _ = element.hide(); + }) }; - let position = format!( - ":host{{min-width:{}px;max-width:{}px}}", - self.width, self.width - ); + if target.is_some() { + let values = state.values.clone(); + let selected = state.selected; + let width = state.width; + let on_select = state.on_select.clone(); + drop(state); - html! { <>{ body } } + html! { + + + + } + } else { + html! {} + } } } + +/// Pure view component for the column dropdown content. +#[derive(Properties, PartialEq)] +struct ColumnDropDownViewProps { + values: Vec, + selected: usize, + width: f64, + on_select: Option>, +} + +#[function_component] +fn ColumnDropDownView(props: &ColumnDropDownViewProps) -> Html { + let body = html! { + if !props.values.is_empty() { + { for props.values + .iter() + .enumerate() + .map(|(idx, value)| { + let click = props.on_select.as_ref().unwrap().reform({ + let value = value.clone(); + move |_: MouseEvent| value.clone() + }); + + let row = match value { + InPlaceColumn::Column(col) => html! { + { col } + }, + InPlaceColumn::Expression(col) => html! { + { col.name.clone() } + }, + }; + + html! { + if idx == props.selected { + { row } + } else { + { row } + } + } + }) } + } else { + + } + }; + + let position = format!( + ":host{{min-width:{}px;max-width:{}px}}", + props.width, props.width + ); + + html! { <>{ body } } +} diff --git a/rust/perspective-viewer/src/rust/components/column_selector.rs b/rust/perspective-viewer/src/rust/components/column_selector.rs index 508dab014b..a37fa82f72 100644 --- a/rust/perspective-viewer/src/rust/components/column_selector.rs +++ b/rust/perspective-viewer/src/rust/components/column_selector.rs @@ -27,6 +27,7 @@ use std::rc::Rc; pub use empty_column::*; pub use invalid_column::*; +use perspective_client::config::ViewConfig; use perspective_js::utils::ApiFuture; pub use pivot_column::*; use web_sys::*; @@ -39,9 +40,9 @@ use self::inactive_column::*; use super::containers::scroll_panel::*; use super::containers::split_panel::{Orientation, SplitPanel}; use super::style::LocalStyle; +use crate::components::column_dropdown::{ColumnDropDownElement, ColumnDropDownPortal}; use crate::components::containers::scroll_panel_item::ScrollPanelItem; use crate::css; -use crate::custom_elements::ColumnDropDownElement; use crate::dragdrop::*; use crate::presentation::ColumnLocator; use crate::renderer::*; @@ -60,23 +61,27 @@ pub struct ColumnSelectorProps { /// This is passed to the add_expression_button for styling. pub selected_column: Option, - /// Fires when this component is resized via the UI. - #[prop_or_default] - pub on_resize: Option>>, - /// Value props threaded from root's `SessionProps` / `RendererProps`. pub has_table: bool, pub named_column_count: usize, - pub view_config: Rc, + pub view_config: PtrEqRc, pub drag_column: Option, + /// Cloned session metadata snapshot — threaded from `SessionProps` /// so that metadata changes trigger re-renders via prop diffing. - pub metadata: Rc, + pub metadata: SessionMetadataRc, + + /// Selected theme name, threaded for PortalModal consumers. + pub selected_theme: Option, // State pub session: Session, pub renderer: Renderer, pub dragdrop: DragDrop, + + /// Fires when this component is resized via the UI. + #[prop_or_default] + pub on_resize: Option>>, } impl PartialEq for ColumnSelectorProps { @@ -87,6 +92,7 @@ impl PartialEq for ColumnSelectorProps { && self.view_config == rhs.view_config && self.drag_column == rhs.drag_column && self.metadata == rhs.metadata + && self.selected_theme == rhs.selected_theme } } @@ -163,12 +169,14 @@ impl Component for ColumnSelector { .columns .iter() .position(|x| x.as_ref() == Some(&column)); + let min_cols = ctx.props().renderer.metadata().min; let is_to_empty = !config .columns .get(index) .map(|x| x.is_some()) .unwrap_or_default(); + min_cols .and_then(|x| from_index.map(|fi| fi < x)) .unwrap_or_default() @@ -180,6 +188,7 @@ impl Component for ColumnSelector { .metadata .get_column_table_type(column.as_str()) .unwrap(); + let update = ctx.props().view_config.create_drag_drop_update( column, col_type, @@ -242,22 +251,25 @@ impl Component for ColumnSelector { .. } = ctx.props(); let metadata = &ctx.props().metadata; + // When `config.columns` is empty but the table has columns (transient // state during `load()` after `reset()` clears the config), fill in // all table columns as active — matching `validate_view_config()`. let prop_config = &ctx.props().view_config; - let config: Rc = if prop_config.columns.is_empty() { + let config = if prop_config.columns.is_empty() { if let Some(table_cols) = metadata.get_table_columns() { - Rc::new(perspective_client::config::ViewConfig { + ViewConfig { columns: table_cols.iter().map(|c| Some(c.clone())).collect(), ..(**prop_config).clone() - }) + } + .into() } else { prop_config.clone() } } else { prop_config.clone() }; + let is_aggregated = config.is_aggregated(); let columns_iter = ColumnsIteratorSet::new(&config, metadata, renderer, dragdrop); let onselect = ctx.link().callback(|()| Redraw); @@ -320,6 +332,7 @@ impl Component for ColumnSelector { view_config={ctx.props().view_config.clone()} drag_column={ctx.props().drag_column.clone()} metadata={metadata.clone()} + selected_theme={ctx.props().selected_theme.clone()} {dragdrop} {renderer} {session} @@ -496,6 +509,10 @@ impl Component for ColumnSelector { > { for selected_columns } + } } diff --git a/rust/perspective-viewer/src/rust/components/column_selector/active_column.rs b/rust/perspective-viewer/src/rust/components/column_selector/active_column.rs index 24b6377ad6..81488696b7 100644 --- a/rust/perspective-viewer/src/rust/components/column_selector/active_column.rs +++ b/rust/perspective-viewer/src/rust/components/column_selector/active_column.rs @@ -11,7 +11,6 @@ // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ use std::collections::HashSet; -use std::rc::Rc; use perspective_client::config::*; use perspective_js::utils::ApiFuture; @@ -21,9 +20,9 @@ use yew::prelude::*; use super::InPlaceColumn; use super::aggregate_selector::*; use super::expr_edit_button::*; +use crate::components::column_dropdown::ColumnDropDownElement; use crate::components::column_selector::{EmptyColumn, InvalidColumn}; use crate::components::type_icon::TypeIcon; -use crate::custom_elements::ColumnDropDownElement; use crate::dragdrop::*; use crate::js::plugin::*; use crate::presentation::ColumnLocator; @@ -79,10 +78,10 @@ pub struct ActiveColumnProps { pub col_type: Option, /// Session metadata snapshot — threaded from `SessionProps`. - pub metadata: Rc, + pub metadata: SessionMetadataRc, /// View config snapshot — threaded from parent as a value prop. - pub view_config: Rc, + pub view_config: PtrEqRc, /// State pub session: Session, @@ -395,14 +394,13 @@ impl Component for ActiveColumn { if !ctx.props().is_aggregated { } - if show_edit_btn { - - } + diff --git a/rust/perspective-viewer/src/rust/components/column_selector/aggregate_selector.rs b/rust/perspective-viewer/src/rust/components/column_selector/aggregate_selector.rs index 2aceef4f18..931d3695d4 100644 --- a/rust/perspective-viewer/src/rust/components/column_selector/aggregate_selector.rs +++ b/rust/perspective-viewer/src/rust/components/column_selector/aggregate_selector.rs @@ -22,6 +22,7 @@ use crate::components::style::LocalStyle; use crate::css; use crate::renderer::*; use crate::session::*; +use crate::utils::PtrEqRc; #[derive(Properties)] pub struct AggregateSelectorProps { @@ -32,10 +33,10 @@ pub struct AggregateSelectorProps { pub aggregate: Option, /// Session metadata snapshot — threaded from `SessionProps`. - pub metadata: Rc, + pub metadata: SessionMetadataRc, /// View config snapshot — threaded from parent as a value prop. - pub view_config: Rc, + pub view_config: PtrEqRc, // State pub renderer: Renderer, diff --git a/rust/perspective-viewer/src/rust/components/column_selector/config_selector.rs b/rust/perspective-viewer/src/rust/components/column_selector/config_selector.rs index 8c291a0a5d..d9bf1633c6 100644 --- a/rust/perspective-viewer/src/rust/components/column_selector/config_selector.rs +++ b/rust/perspective-viewer/src/rust/components/column_selector/config_selector.rs @@ -21,11 +21,12 @@ use super::InPlaceColumn; use super::filter_column::*; use super::pivot_column::*; use super::sort_column::*; +use crate::components::column_dropdown::{ColumnDropDownElement, ColumnDropDownPortal}; use crate::components::containers::dragdrop_list::*; use crate::components::containers::select::{Select, SelectItem}; +use crate::components::filter_dropdown::{FilterDropDownElement, FilterDropDownPortal}; use crate::components::style::LocalStyle; use crate::css; -use crate::custom_elements::{ColumnDropDownElement, FilterDropDownElement}; use crate::dragdrop::*; use crate::renderer::*; use crate::session::drag_drop_update::*; @@ -42,12 +43,15 @@ pub struct ConfigSelectorProps { /// Current view config threaded as a value prop so that config changes /// (group_by, sort, filter, etc.) trigger re-renders via normal prop /// diffing rather than a PubSub `view_created` subscription. - pub view_config: Rc, + pub view_config: PtrEqRc, /// Column currently being dragged — threaded to show `dragdrop-highlight` /// without subscribing to `dragstart_received`/`dragend_received`. pub drag_column: Option, /// Session metadata snapshot — threaded from `SessionProps`. - pub metadata: Rc, + pub metadata: SessionMetadataRc, + + /// Selected theme name, threaded for PortalModal consumers. + pub selected_theme: Option, // State pub session: Session, @@ -60,6 +64,7 @@ impl PartialEq for ConfigSelectorProps { self.view_config == other.view_config && self.drag_column == other.drag_column && self.metadata == other.metadata + && self.selected_theme == other.selected_theme } } @@ -602,43 +607,44 @@ impl Component for ConfigSelector { let group_rollups = requirements.get_group_rollups(&rollup_features); html! { -
- -
- if group_rollups.len() > 1 { - - id="group_rollup_mode_selector" - wrapper_class="group_rollup_wrapper" - values={Rc::new( + <> +
+ +
+ if group_rollups.len() > 1 { + + id="group_rollup_mode_selector" + wrapper_class="group_rollup_wrapper" + values={Rc::new( group_rollups .iter() .map(|x| SelectItem::Option(*x)) .collect(), )} - selected={config.group_rollup_mode} - on_select={on_group_rollup_mode} - /> - } - if !config.group_by.is_empty() && config.split_by.is_empty() { - - } -
- if features.group_by { - >()} - is_dragover={ctx.props().dragdrop.is_dragover(DragTarget::GroupBy)} - {dragdrop} - > - { for config.group_by.iter().map(|group_by| { + selected={config.group_rollup_mode} + on_select={on_group_rollup_mode} + /> + } + if !config.group_by.is_empty() && config.split_by.is_empty() { + + } +
+ if features.group_by { + >()} + is_dragover={ctx.props().dragdrop.is_dragover(DragTarget::GroupBy)} + {dragdrop} + > + { for config.group_by.iter().map(|group_by| { html_nested! { } }) } - - } - if features.split_by { - if !config.split_by.is_empty() { -
- -
+ } - >()} - is_dragover={dragdrop.is_dragover(DragTarget::SplitBy)} - {dragdrop} - > - { for config.split_by.iter().map(|split_by| { + if features.split_by { + if !config.split_by.is_empty() { +
+ +
+ } + >()} + is_dragover={dragdrop.is_dragover(DragTarget::SplitBy)} + {dragdrop} + > + { for config.split_by.iter().map(|split_by| { html_nested! { } }) } - - } - if features.sort { - >()} - is_dragover={dragdrop.is_dragover(DragTarget::Sort).map(|(index, name)| { +
+ } + if features.sort { + >()} + is_dragover={dragdrop.is_dragover(DragTarget::Sort).map(|(index, name)| { (index, Sort(name, SortDir::Asc)) })} - {dragdrop} - > - { for config.sort.iter().enumerate().map(|(idx, sort)| { + {dragdrop} + > + { for config.sort.iter().enumerate().map(|(idx, sort)| { html_nested! { } }) } - - } - if !features.filter_ops.is_empty() { - >()} - is_dragover={dragdrop.is_dragover(DragTarget::Filter).map(|(index, name)| { + + } + if !features.filter_ops.is_empty() { + >()} + is_dragover={dragdrop.is_dragover(DragTarget::Filter).map(|(index, name)| { (index, Filter::new(&name, "", FilterTerm::Scalar(Scalar::Null))) })} - {dragdrop} - > - { for config.filter.iter().enumerate().map(|(idx, filter)| { + {dragdrop} + > + { for config.filter.iter().enumerate().map(|(idx, filter)| { let filter_keydown = ctx.link() .callback(move |txt| ConfigSelectorMsg::SetFilterValue(idx, txt)); @@ -741,9 +747,18 @@ impl Component for ConfigSelector { } }) } - - } -
+ + } +
+ + + } } } diff --git a/rust/perspective-viewer/src/rust/components/column_selector/empty_column.rs b/rust/perspective-viewer/src/rust/components/column_selector/empty_column.rs index 70a1732144..2a66a3d62f 100644 --- a/rust/perspective-viewer/src/rust/components/column_selector/empty_column.rs +++ b/rust/perspective-viewer/src/rust/components/column_selector/empty_column.rs @@ -16,9 +16,9 @@ use perspective_client::config::Expression; use web_sys::*; use yew::prelude::*; +use crate::components::column_dropdown::ColumnDropDownElement; use crate::components::style::LocalStyle; use crate::css; -use crate::custom_elements::ColumnDropDownElement; #[derive(Properties)] pub struct EmptyColumnProps { @@ -38,7 +38,7 @@ impl PartialEq for EmptyColumnProps { } } -#[derive(Clone, Debug)] +#[derive(Clone, Debug, PartialEq)] pub enum InPlaceColumn { Column(String), Expression(Expression<'static>), diff --git a/rust/perspective-viewer/src/rust/components/column_selector/expr_edit_button.rs b/rust/perspective-viewer/src/rust/components/column_selector/expr_edit_button.rs index 281da28669..09c5ddcad8 100644 --- a/rust/perspective-viewer/src/rust/components/column_selector/expr_edit_button.rs +++ b/rust/perspective-viewer/src/rust/components/column_selector/expr_edit_button.rs @@ -27,6 +27,10 @@ pub struct ExprEditButtonProps { /// Is the expression/config panel open? pub is_editing: bool, + + /// Is the expression/config panel enabled? If not, show an invisible + /// square in the same dimensions (so the layout does not jump around). + pub is_disabled: bool, } /// A button that goes into a column-list for a custom expression @@ -42,7 +46,9 @@ pub fn ExprEditButton(p: &ExprEditButtonProps) -> Html { p.on_open_expr_panel.emit(name) }); - let class = if p.is_editing { + let class = if p.is_disabled { + "expression-edit-button disabled" + } else if p.is_editing { "expression-edit-button is-editing" } else { "expression-edit-button" diff --git a/rust/perspective-viewer/src/rust/components/column_selector/filter_column.rs b/rust/perspective-viewer/src/rust/components/column_selector/filter_column.rs index 70c9cc2ae6..2ef12de155 100644 --- a/rust/perspective-viewer/src/rust/components/column_selector/filter_column.rs +++ b/rust/perspective-viewer/src/rust/components/column_selector/filter_column.rs @@ -22,9 +22,9 @@ use yew::prelude::*; use crate::components::containers::dragdrop_list::*; use crate::components::containers::select::*; +use crate::components::filter_dropdown::FilterDropDownElement; use crate::components::style::LocalStyle; use crate::components::type_icon::TypeIcon; -use crate::custom_elements::*; use crate::dragdrop::*; use crate::renderer::*; use crate::session::*; @@ -39,9 +39,9 @@ pub struct FilterColumnProps { pub on_keydown: Callback, /// Session metadata snapshot — threaded from `SessionProps`. - pub metadata: Rc, + pub metadata: SessionMetadataRc, /// Current view config threaded as a value prop. - pub view_config: Rc, + pub view_config: PtrEqRc, // State pub session: Session, diff --git a/rust/perspective-viewer/src/rust/components/column_selector/inactive_column.rs b/rust/perspective-viewer/src/rust/components/column_selector/inactive_column.rs index 38b2d689a2..d4d6a77a10 100644 --- a/rust/perspective-viewer/src/rust/components/column_selector/inactive_column.rs +++ b/rust/perspective-viewer/src/rust/components/column_selector/inactive_column.rs @@ -10,8 +10,6 @@ // ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ -use std::rc::Rc; - use itertools::Itertools; use perspective_client::config::*; use perspective_js::utils::ApiFuture; @@ -47,11 +45,11 @@ pub struct InactiveColumnProps { pub is_expression: bool, /// Session metadata snapshot — threaded from `SessionProps`. - pub metadata: Rc, + pub metadata: SessionMetadataRc, /// View config snapshot — threaded from parent so we avoid /// `session.get_view_config()` calls. - pub view_config: Rc, + pub view_config: PtrEqRc, /// `dragend` event`. pub ondragend: Callback<()>, @@ -176,14 +174,13 @@ impl Component for InactiveColumn { { ctx.props().name.clone() } - if is_expression { - - } + diff --git a/rust/perspective-viewer/src/rust/components/column_selector/pivot_column.rs b/rust/perspective-viewer/src/rust/components/column_selector/pivot_column.rs index 27ccc9bda9..4b439dc574 100644 --- a/rust/perspective-viewer/src/rust/components/column_selector/pivot_column.rs +++ b/rust/perspective-viewer/src/rust/components/column_selector/pivot_column.rs @@ -10,8 +10,6 @@ // ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ -use std::rc::Rc; - use perspective_client::config::ColumnType; use web_sys::*; use yew::prelude::*; @@ -35,7 +33,7 @@ pub struct PivotColumnProps { /// Session metadata snapshot — threaded from `SessionProps`. #[prop_or_default] - pub metadata: Option>, + pub metadata: Option, // State #[prop_or_default] diff --git a/rust/perspective-viewer/src/rust/components/column_selector/sort_column.rs b/rust/perspective-viewer/src/rust/components/column_selector/sort_column.rs index 40ba61d4eb..5a579f093b 100644 --- a/rust/perspective-viewer/src/rust/components/column_selector/sort_column.rs +++ b/rust/perspective-viewer/src/rust/components/column_selector/sort_column.rs @@ -10,8 +10,6 @@ // ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ -use std::rc::Rc; - use perspective_client::config::*; use perspective_js::utils::ApiFuture; use web_sys::*; @@ -30,10 +28,10 @@ pub struct SortColumnProps { pub idx: usize, /// Session metadata snapshot — threaded from `SessionProps`. - pub metadata: Rc, + pub metadata: SessionMetadataRc, /// Current view config — threaded as a value prop. - pub view_config: Rc, + pub view_config: PtrEqRc, // State pub session: Session, diff --git a/rust/perspective-viewer/src/rust/components/column_settings_sidebar.rs b/rust/perspective-viewer/src/rust/components/column_settings_sidebar.rs index 3c7b57a6a9..605cffb4d2 100644 --- a/rust/perspective-viewer/src/rust/components/column_settings_sidebar.rs +++ b/rust/perspective-viewer/src/rust/components/column_settings_sidebar.rs @@ -36,11 +36,12 @@ use crate::components::type_icon::TypeIconType; use crate::custom_events::CustomEvents; use crate::presentation::{ColumnLocator, ColumnSettingsTab, Presentation}; use crate::renderer::Renderer; -use crate::session::{Session, SessionMetadata}; +use crate::session::{Session, SessionMetadataRc}; use crate::tasks::{ EditExpression, HasCustomEvents, HasPresentation, HasRenderer, HasSession, can_render_column_styles, locator_name_or_default, locator_view_type, }; +use crate::utils::PtrEqRc; use crate::*; #[derive(Clone, Derivative, Properties)] @@ -58,10 +59,13 @@ pub struct ColumnSettingsPanelProps { pub plugin_name: Option, /// Session metadata snapshot — threaded from `SessionProps`. - pub metadata: Rc, + pub metadata: SessionMetadataRc, /// View config snapshot — threaded from `SessionProps`. - pub view_config: Rc, + pub view_config: PtrEqRc, + + /// Selected theme name, threaded for PortalModal consumers. + pub selected_theme: Option, // State #[derivative(Debug = "ignore")] @@ -84,6 +88,7 @@ impl PartialEq for ColumnSettingsPanelProps { && self.plugin_name == other.plugin_name && self.metadata == other.metadata && self.view_config == other.view_config + && self.selected_theme == other.selected_theme } } @@ -294,6 +299,7 @@ impl Component for ColumnSettingsPanel { disabled: !ctx.props().selected_column.is_expr(), reset_count: self.reset_count, metadata: ctx.props().metadata.clone(), + selected_theme: ctx.props().selected_theme.clone(), session: &ctx.props().session }); @@ -341,6 +347,7 @@ impl Component for ColumnSettingsPanel { group_by_depth: ctx.props().view_config.group_by.len() as u32, view_config: ctx.props().view_config.clone(), metadata: ctx.props().metadata.clone(), + selected_theme: ctx.props().selected_theme.clone(), custom_events: ctx.props().custom_events.clone(), presentation: ctx.props().presentation.clone(), renderer: ctx.props().renderer.clone(), diff --git a/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab.rs b/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab.rs index 0322ef40f8..1266776bc5 100644 --- a/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab.rs +++ b/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab.rs @@ -14,8 +14,6 @@ mod agg_depth_selector; mod stub; mod symbol; -use std::rc::Rc; - use itertools::Itertools; use perspective_client::config::ColumnType; use yew::{Html, Properties, function_component, html}; @@ -35,6 +33,7 @@ use crate::tasks::{ HasCustomEvents, HasPresentation, HasRenderer, HasSession, SendPluginConfig, get_column_style_control_options, }; +use crate::utils::PtrEqRc; #[derive(Clone, PartialEq, Properties)] pub struct StyleTabProps { @@ -43,10 +42,13 @@ pub struct StyleTabProps { pub group_by_depth: u32, /// View config snapshot — threaded from parent. - pub view_config: Rc, + pub view_config: PtrEqRc, /// Session metadata snapshot — threaded from parent. - pub metadata: Rc, + pub metadata: PtrEqRc, + + /// Selected theme name, threaded for PortalModal consumers. + pub selected_theme: Option, // State pub custom_events: CustomEvents, @@ -162,6 +164,7 @@ pub fn StyleTab(props: &StyleTabProps) -> Html { {restored_config} on_change={on_change.clone()} column_name={props.column_name.clone()} + selected_theme={props.selected_theme.clone()} session={props.session.clone()} /> })) diff --git a/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab/symbol.rs b/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab/symbol.rs index e7490b4594..c0b9f828df 100644 --- a/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab/symbol.rs +++ b/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab/symbol.rs @@ -23,10 +23,10 @@ use itertools::Itertools; use yew::{Callback, Html, Properties, html}; use crate::components::column_settings_sidebar::style_tab::symbol::symbol_pairs::PairsList; +use crate::components::filter_dropdown::{FilterDropDownElement, FilterDropDownPortal}; use crate::components::style::LocalStyle; use crate::config::{ColumnConfigValueUpdate, KeyValueOpts, SymbolKVPair}; use crate::css; -use crate::custom_elements::FilterDropDownElement; use crate::session::Session; #[derive(Properties, PartialEq, Clone)] @@ -36,6 +36,8 @@ pub struct SymbolAttrProps { pub restored_config: Option>, pub on_change: Callback, pub default_config: KeyValueOpts, + /// Selected theme name, threaded for PortalModal consumers. + pub selected_theme: Option, } impl SymbolAttrProps { pub fn next_default_symbol(&self, pairs_len: usize) -> String { @@ -125,6 +127,10 @@ impl yew::Component for SymbolStyle { values={Rc::new(ctx.props().default_config.values.clone())} {update_pairs} /> + } } diff --git a/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab/symbol/row_selector.rs b/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab/symbol/row_selector.rs index 28b4319c56..a00cca1ccf 100644 --- a/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab/symbol/row_selector.rs +++ b/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab/symbol/row_selector.rs @@ -18,8 +18,8 @@ use perspective_client::clone; use yew::{Html, Properties, function_component, html}; use crate::components::empty_row::EmptyRow; +use crate::components::filter_dropdown::FilterDropDownElement; use crate::config::SymbolKVPair; -use crate::custom_elements::FilterDropDownElement; #[derive(Properties, PartialEq)] pub struct RowSelectorProps { diff --git a/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_pairs.rs b/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_pairs.rs index ed6db352d1..e14b6c3fc9 100644 --- a/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_pairs.rs +++ b/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_pairs.rs @@ -16,10 +16,11 @@ use itertools::Itertools; use yew::{Callback, Html, Properties, html}; use crate::components::column_settings_sidebar::style_tab::symbol::symbol_pairs_item::PairsListItem; +use crate::components::filter_dropdown::FilterDropDownElement; use crate::components::style::LocalStyle; use crate::config::SymbolKVPair; use crate::css; -use crate::custom_elements::FilterDropDownElement; +use crate::utils::PtrEqRc; #[derive(Properties, PartialEq)] pub struct PairsListProps { @@ -28,7 +29,7 @@ pub struct PairsListProps { pub update_pairs: Callback>, pub id: Option, pub row_dropdown: Rc, - pub values: Rc>, + pub values: PtrEqRc>, pub column_name: String, } diff --git a/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_pairs_item.rs b/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_pairs_item.rs index 7f4f1974cf..4dbb1e0f67 100644 --- a/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_pairs_item.rs +++ b/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_pairs_item.rs @@ -16,8 +16,9 @@ use yew::{Callback, Html, Properties, html}; use crate::components::column_settings_sidebar::style_tab::symbol::row_selector::RowSelector; use crate::components::column_settings_sidebar::style_tab::symbol::symbol_selector::SymbolSelector; +use crate::components::filter_dropdown::FilterDropDownElement; use crate::config::SymbolKVPair; -use crate::custom_elements::FilterDropDownElement; +use crate::utils::PtrEqRc; #[derive(Properties, PartialEq)] pub struct PairsListItemProps { @@ -26,7 +27,7 @@ pub struct PairsListItemProps { pub pairs: Vec, pub update_pairs: Callback>, pub row_dropdown: Rc, - pub values: Rc>, + pub values: PtrEqRc>, pub focused: bool, pub set_focused_index: Callback>, pub column_name: String, diff --git a/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_selector.rs b/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_selector.rs index 455d9089c5..7e906cd286 100644 --- a/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_selector.rs +++ b/rust/perspective-viewer/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_selector.rs @@ -10,18 +10,17 @@ // ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ -use std::rc::Rc; - use itertools::Itertools; use yew::{Callback, Html, Properties, function_component, html}; use crate::components::containers::select::{Select, SelectItem}; +use crate::utils::PtrEqRc; #[derive(Properties, PartialEq)] pub struct SymbolSelectorProps { pub index: usize, pub selected_value: Option, - pub values: Rc>, + pub values: PtrEqRc>, pub callback: Callback, } diff --git a/rust/perspective-viewer/src/rust/components/containers/dragdrop_list.rs b/rust/perspective-viewer/src/rust/components/containers/dragdrop_list.rs index 9168d7fcc8..557a4c9ab8 100644 --- a/rust/perspective-viewer/src/rust/components/containers/dragdrop_list.rs +++ b/rust/perspective-viewer/src/rust/components/containers/dragdrop_list.rs @@ -19,9 +19,9 @@ use web_sys::*; use yew::html::Scope; use yew::prelude::*; +use crate::components::column_dropdown::ColumnDropDownElement; use crate::components::column_selector::{EmptyColumn, InPlaceColumn, InvalidColumn}; use crate::components::type_icon::TypeIcon; -use crate::custom_elements::ColumnDropDownElement; use crate::dragdrop::*; use crate::utils::DragTarget; diff --git a/rust/perspective-viewer/src/rust/components/copy_dropdown.rs b/rust/perspective-viewer/src/rust/components/copy_dropdown.rs index f87cbfacbb..77db116142 100644 --- a/rust/perspective-viewer/src/rust/components/copy_dropdown.rs +++ b/rust/perspective-viewer/src/rust/components/copy_dropdown.rs @@ -15,28 +15,15 @@ use std::rc::Rc; use yew::prelude::*; use super::containers::dropdown_menu::*; -use super::modal::*; -use super::style::StyleProvider; use crate::renderer::*; use crate::tasks::*; -use crate::utils::*; type CopyDropDownMenuItem = DropDownMenuItem; #[derive(Properties, PartialEq)] pub struct CopyDropDownMenuProps { pub callback: Callback, - pub root: web_sys::HtmlElement, pub renderer: Renderer, - - #[prop_or_default] - weak_link: WeakScope, -} - -impl ModalLink for CopyDropDownMenuProps { - fn weak_link(&self) -> &'_ WeakScope { - &self.weak_link - } } pub struct CopyDropDownMenu {} @@ -45,8 +32,7 @@ impl Component for CopyDropDownMenu { type Message = (); type Properties = CopyDropDownMenuProps; - fn create(ctx: &Context) -> Self { - ctx.set_modal_link(); + fn create(_ctx: &Context) -> Self { Self {} } @@ -59,12 +45,13 @@ impl Component for CopyDropDownMenu { let is_chart = plugin.name().as_str() != "Datagrid"; let has_selection = ctx.props().renderer.get_selection().is_some(); html! { - + <> +
values={Rc::new(get_menu_items(is_chart, has_selection))} callback={&ctx.props().callback} /> - + } } } diff --git a/rust/perspective-viewer/src/rust/components/editable_header.rs b/rust/perspective-viewer/src/rust/components/editable_header.rs index 7839cc82d9..93049fc6fc 100644 --- a/rust/perspective-viewer/src/rust/components/editable_header.rs +++ b/rust/perspective-viewer/src/rust/components/editable_header.rs @@ -19,7 +19,7 @@ use yew::{Callback, Component, Html, NodeRef, Properties, TargetCast, classes, h use super::type_icon::TypeIconType; use crate::components::type_icon::TypeIcon; use crate::maybe; -use crate::session::{Session, SessionMetadata}; +use crate::session::{Session, SessionMetadataRc}; #[derive(Clone, PartialEq, Properties)] pub struct EditableHeaderProps { @@ -33,7 +33,7 @@ pub struct EditableHeaderProps { pub reset_count: u8, /// Session metadata snapshot — threaded from `SessionProps`. - pub metadata: Rc, + pub metadata: SessionMetadataRc, // State pub session: Session, diff --git a/rust/perspective-viewer/src/rust/components/empty_row.rs b/rust/perspective-viewer/src/rust/components/empty_row.rs index 507c77f021..a26997ea12 100644 --- a/rust/perspective-viewer/src/rust/components/empty_row.rs +++ b/rust/perspective-viewer/src/rust/components/empty_row.rs @@ -19,9 +19,9 @@ use wasm_bindgen::JsCast; use web_sys::*; use yew::prelude::*; +use crate::components::filter_dropdown::FilterDropDownElement; use crate::components::style::LocalStyle; use crate::css; -use crate::custom_elements::FilterDropDownElement; #[derive(Properties, Derivative)] #[derivative(Debug)] diff --git a/rust/perspective-viewer/src/rust/components/export_dropdown.rs b/rust/perspective-viewer/src/rust/components/export_dropdown.rs index 547c953190..d7ee7533b2 100644 --- a/rust/perspective-viewer/src/rust/components/export_dropdown.rs +++ b/rust/perspective-viewer/src/rust/components/export_dropdown.rs @@ -12,16 +12,12 @@ use std::rc::Rc; -use session::Session; use yew::prelude::*; use super::containers::dropdown_menu::*; -use super::modal::{ModalLink, SetModalLink}; -use super::style::StyleProvider; use crate::renderer::*; +use crate::session::Session; use crate::tasks::*; -use crate::utils::*; -use crate::*; pub type ExportDropDownMenuItem = DropDownMenuItem; @@ -30,16 +26,6 @@ pub struct ExportDropDownMenuProps { pub renderer: Renderer, pub session: Session, pub callback: Callback, - pub root: web_sys::HtmlElement, - - #[prop_or_default] - weak_link: WeakScope, -} - -impl ModalLink for ExportDropDownMenuProps { - fn weak_link(&self) -> &'_ utils::WeakScope { - &self.weak_link - } } pub enum ExportDropDownMenuMsg { @@ -60,11 +46,9 @@ impl Component for ExportDropDownMenu { fn view(&self, ctx: &Context) -> yew::virtual_dom::VNode { let callback = ctx.link().callback(|_| ExportDropDownMenuMsg::TitleChange); let plugin = ctx.props().renderer.get_active_plugin().unwrap(); - // let has_render = js_sys::Reflect::has(&plugin, - // js_intern::js_intern!("render")).unwrap(); let is_chart = plugin.name().as_str() != "Datagrid"; html! { - + <> { "Save as" } - + } } @@ -96,7 +80,6 @@ impl Component for ExportDropDownMenu { } fn create(ctx: &Context) -> Self { - ctx.set_modal_link(); Self { title: ctx .props() diff --git a/rust/perspective-viewer/src/rust/components/expression_editor.rs b/rust/perspective-viewer/src/rust/components/expression_editor.rs index aa37a04bbe..296966d084 100644 --- a/rust/perspective-viewer/src/rust/components/expression_editor.rs +++ b/rust/perspective-viewer/src/rust/components/expression_editor.rs @@ -17,7 +17,7 @@ use yew::prelude::*; use super::form::code_editor::*; use super::style::LocalStyle; -use crate::session::{Session, SessionMetadata}; +use crate::session::{Session, SessionMetadata, SessionMetadataRc}; use crate::*; #[derive(Properties, PartialEq, Clone)] @@ -32,7 +32,11 @@ pub struct ExpressionEditorProps { pub reset_count: u8, /// Session metadata snapshot — threaded from `SessionProps`. - pub metadata: Rc, + pub metadata: SessionMetadataRc, + + /// Selected theme name, threaded for PortalModal consumers. + #[prop_or_default] + pub selected_theme: Option, // State pub session: Session, @@ -126,6 +130,7 @@ impl Component for ExpressionEditor { {disabled} oninput={self.oninput.clone()} onsave={ctx.props().on_save.clone()} + theme={ctx.props().selected_theme.clone().unwrap_or_default()} />
diff --git a/rust/perspective-viewer/src/rust/components/filter_dropdown.rs b/rust/perspective-viewer/src/rust/components/filter_dropdown.rs index 2b26beac6a..e1b9ecd7c0 100644 --- a/rust/perspective-viewer/src/rust/components/filter_dropdown.rs +++ b/rust/perspective-viewer/src/rust/components/filter_dropdown.rs @@ -10,135 +10,279 @@ // ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ +use std::cell::RefCell; +use std::collections::HashSet; +use std::rc::Rc; + +use perspective_client::clone; use web_sys::*; +use yew::html::ImplicitClone; use yew::prelude::*; -use super::modal::*; -use crate::utils::WeakScope; +use super::portal::PortalModal; +use crate::session::Session; +use crate::utils::*; +use crate::*; static CSS: &str = include_str!(concat!(env!("OUT_DIR"), "/css/filter-dropdown.css")); -#[derive(Properties, PartialEq)] -pub struct FilterDropDownProps { - #[prop_or_default] - pub weak_link: WeakScope, -} - -impl ModalLink for FilterDropDownProps { - fn weak_link(&self) -> &'_ WeakScope { - &self.weak_link - } +#[derive(Default)] +struct FilterDropDownState { + values: Vec, + selected: usize, + on_select: Option>, + target: Option, } -pub enum FilterDropDownMsg { - SetValues(Vec), - SetCallback(Callback), - ItemDown, - ItemUp, - ItemSelect, +#[derive(Clone)] +pub struct FilterDropDownElement { + state: Rc>, + session: Session, + column: Rc>>, + all_values: Rc>>>, + notify: Rc>, } -pub struct FilterDropDown { - values: Option>, - selected: usize, - on_select: Option>, +impl PartialEq for FilterDropDownElement { + fn eq(&self, other: &Self) -> bool { + Rc::ptr_eq(&self.state, &other.state) + } } -impl Component for FilterDropDown { - type Message = FilterDropDownMsg; - type Properties = FilterDropDownProps; +impl ImplicitClone for FilterDropDownElement {} - fn create(ctx: &Context) -> Self { - ctx.set_modal_link(); +impl FilterDropDownElement { + pub fn new(session: Session) -> Self { Self { - values: Some(vec![]), - selected: 0, - on_select: None, + state: Default::default(), + session, + column: Default::default(), + all_values: Default::default(), + notify: Rc::default(), } } - fn update(&mut self, _ctx: &Context, msg: Self::Message) -> bool { - match msg { - FilterDropDownMsg::SetCallback(callback) => { - self.on_select = Some(callback); - false - }, - FilterDropDownMsg::SetValues(values) => { - self.values = Some(values); - self.selected = 0; - true - }, - FilterDropDownMsg::ItemSelect => { - if let Some(ref values) = self.values { - match values.get(self.selected) { - None => { - console::error_1(&"Selected out-of-bounds".into()); - false - }, - Some(x) => { - self.on_select.as_ref().unwrap().emit(x.clone()); - false - }, - } + pub fn reautocomplete(&self) { + // Re-open portal with current target + self.notify.emit(()); + } + + pub fn autocomplete( + &self, + column: (usize, String), + input: String, + exclude: HashSet, + target: HtmlElement, + callback: Callback, + ) { + let current_column = self.column.borrow().clone(); + match current_column { + Some(filter_col) if filter_col == column => { + let values = filter_values(&input, &self.all_values, &exclude); + if values.len() == 1 && values[0] == input { + let _ = self.hide(); } else { - console::error_1(&"No Values".into()); - false + let mut s = self.state.borrow_mut(); + s.values = values; + s.selected = 0; + s.on_select = Some(callback); + if s.target.is_none() { + s.target = Some(target); + } + + drop(s); + self.notify.emit(()); } }, - FilterDropDownMsg::ItemDown => { - self.selected += 1; - if let Some(ref values) = self.values - && self.selected >= values.len() - { - self.selected = 0; - }; - - true - }, - FilterDropDownMsg::ItemUp => { - if let Some(ref values) = self.values - && self.selected < 1 - { - self.selected = values.len(); - }; - - self.selected -= 1; - true + _ => { + clone!( + self.state, + self.session, + self.all_values, + self.notify, + old_column = self.column + ); + ApiFuture::spawn(async move { + let fetched = session.get_column_values(column.1.clone()).await?; + *all_values.borrow_mut() = Some(fetched); + let values = filter_values(&input, &all_values, &exclude); + let should_hide = values.len() == 1 && values[0] == input; + + *old_column.borrow_mut() = Some(column); + { + let mut s = state.borrow_mut(); + s.on_select = Some(callback); + if should_hide { + let fv = self::filter_values("", &all_values, &exclude); + s.values = fv; + s.target = Some(target); + } else { + s.values = values; + s.target = Some(target); + } + s.selected = 0; + } + if should_hide { + state.borrow_mut().target = None; + } + + notify.emit(()); + Ok(()) + }); }, } } - fn changed(&mut self, _ctx: &Context, _old: &Self::Properties) -> bool { - false + pub fn item_select(&self) { + let state = self.state.borrow(); + if let Some(value) = state.values.get(state.selected) + && let Some(ref cb) = state.on_select + { + cb.emit(value.clone()); + } } - fn view(&self, _ctx: &Context) -> Html { - let body = html! { - if let Some(ref values) = self.values { - if !values.is_empty() { - { for values - .iter() - .enumerate() - .map(|(idx, value)| { - let click = self.on_select.as_ref().unwrap().reform({ - let value = value.clone(); - move |_: MouseEvent| value.clone() - }); - - html! { - if idx == self.selected { - { value } - } else { - { value } - } - } - }) } - } else { - { "No Completions" } - } - } + pub fn item_down(&self) { + let mut state = self.state.borrow_mut(); + state.selected += 1; + if state.selected >= state.values.len() { + state.selected = 0; + } + + drop(state); + self.notify.emit(()); + } + + pub fn item_up(&self) { + let mut state = self.state.borrow_mut(); + if state.selected < 1 { + state.selected = state.values.len(); + } + + state.selected -= 1; + drop(state); + self.notify.emit(()); + } + + pub fn hide(&self) -> ApiResult<()> { + self.state.borrow_mut().target = None; + self.column.borrow_mut().take(); + self.notify.emit(()); + Ok(()) + } +} + +#[derive(Properties, PartialEq)] +pub struct FilterDropDownPortalProps { + pub element: FilterDropDownElement, + pub theme: String, +} + +pub struct FilterDropDownPortal { + _sub: Subscription, +} + +impl Component for FilterDropDownPortal { + type Message = (); + type Properties = FilterDropDownPortalProps; + + fn create(ctx: &Context) -> Self { + let link = ctx.link().clone(); + let sub = ctx + .props() + .element + .notify + .add_listener(move |()| link.send_message(())); + Self { _sub: sub } + } + + fn update(&mut self, _ctx: &Context, _msg: ()) -> bool { + true + } + + fn view(&self, ctx: &Context) -> Html { + let state = ctx.props().element.state.borrow(); + let target = state.target.clone(); + let on_close = { + let element = ctx.props().element.clone(); + Callback::from(move |()| { + let _ = element.hide(); + }) }; - html! { <>{ body } } + if target.is_some() { + let values = state.values.clone(); + let selected = state.selected; + let on_select = state.on_select.clone(); + drop(state); + + html! { + + + + } + } else { + html! {} + } + } +} + +#[derive(Properties, PartialEq)] +struct FilterDropDownViewProps { + values: Vec, + selected: usize, + on_select: Option>, +} + +#[function_component] +fn FilterDropDownView(props: &FilterDropDownViewProps) -> Html { + let body = html! { + if !props.values.is_empty() { + { for props.values + .iter() + .enumerate() + .map(|(idx, value)| { + let click = props.on_select.as_ref().unwrap().reform({ + let value = value.clone(); + move |_: MouseEvent| value.clone() + }); + + html! { + if idx == props.selected { + { value } + } else { + { value } + } + } + }) } + } else { + { "No Completions" } + } + }; + + html! { <>{ body } } +} + +fn filter_values( + input: &str, + values: &Rc>>>, + exclude: &HashSet, +) -> Vec { + let input = input.to_lowercase(); + if let Some(values) = &*values.borrow() { + values + .iter() + .filter(|x| x.to_lowercase().contains(&input) && !exclude.contains(x.as_str())) + .take(10) + .cloned() + .collect::>() + } else { + vec![] } } diff --git a/rust/perspective-viewer/src/rust/components/form/code_editor.rs b/rust/perspective-viewer/src/rust/components/form/code_editor.rs index b6010e274e..e2457411df 100644 --- a/rust/perspective-viewer/src/rust/components/form/code_editor.rs +++ b/rust/perspective-viewer/src/rust/components/form/code_editor.rs @@ -18,9 +18,9 @@ use web_sys::*; use yew::prelude::*; use crate::components::form::highlight::highlight; +use crate::components::function_dropdown::{FunctionDropDownElement, FunctionDropDownPortal}; use crate::components::style::LocalStyle; use crate::css; -use crate::custom_elements::FunctionDropDownElement; use crate::exprtk::{Cursor, tokenize}; use crate::utils::*; @@ -45,6 +45,10 @@ pub struct CodeEditorProps { #[prop_or_default] pub error: Option, + + /// Selected theme name, threaded for PortalModal consumers. + #[prop_or_default] + pub theme: String, } /// A syntax-highlighted text editor component. @@ -128,6 +132,8 @@ pub fn code_editor(props: &CodeEditorProps) -> Html { |deps| scroll_sync(&deps.0, &deps.1, &deps.2), ); + let portal_dropdown = filter_dropdown.clone(); + // Blur if this element is not in the tree use_effect_with(filter_dropdown.clone(), |filter_dropdown| { clone!(filter_dropdown); @@ -191,6 +197,10 @@ pub fn code_editor(props: &CodeEditorProps) -> Html {
+ } } diff --git a/rust/perspective-viewer/src/rust/components/function_dropdown.rs b/rust/perspective-viewer/src/rust/components/function_dropdown.rs index c6a9026ec2..ac2a09ee18 100644 --- a/rust/perspective-viewer/src/rust/components/function_dropdown.rs +++ b/rust/perspective-viewer/src/rust/components/function_dropdown.rs @@ -10,142 +10,215 @@ // ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ -use perspective_client::config::CompletionItemSuggestion; +use std::cell::RefCell; +use std::rc::Rc; + +use perspective_client::config::{COMPLETIONS, CompletionItemSuggestion}; +use perspective_js::utils::ApiResult; use web_sys::*; +use yew::html::ImplicitClone; use yew::prelude::*; -use super::modal::*; -use crate::utils::WeakScope; +use super::portal::PortalModal; +use crate::utils::*; static CSS: &str = include_str!(concat!(env!("OUT_DIR"), "/css/function-dropdown.css")); -#[derive(Properties, PartialEq)] -pub struct FunctionDropDownProps { - #[prop_or_default] - pub weak_link: WeakScope, +#[derive(Default)] +struct FunctionDropDownState { + values: Vec, + selected: usize, + on_select: Option>, + target: Option, } -impl ModalLink for FunctionDropDownProps { - fn weak_link(&self) -> &'_ WeakScope { - &self.weak_link - } +#[derive(Clone, Default)] +pub struct FunctionDropDownElement { + state: Rc>, + notify: Rc>, } -pub enum FunctionDropDownMsg { - SetValues(Vec), - SetCallback(Callback), - ItemDown, - ItemUp, - ItemSelect, +impl PartialEq for FunctionDropDownElement { + fn eq(&self, other: &Self) -> bool { + Rc::ptr_eq(&self.state, &other.state) + } } -pub struct FunctionDropDown { - values: Option>, - selected: usize, - on_select: Option>, -} +impl ImplicitClone for FunctionDropDownElement {} -impl Component for FunctionDropDown { - type Message = FunctionDropDownMsg; - type Properties = FunctionDropDownProps; +impl FunctionDropDownElement { + pub fn reautocomplete(&self) { + self.notify.emit(()); + } - fn create(ctx: &Context) -> Self { - ctx.set_modal_link(); - Self { - values: Some(vec![]), - selected: 0, - on_select: None, + pub fn autocomplete( + &self, + input: String, + target: HtmlElement, + callback: Callback, + ) -> ApiResult<()> { + let values = filter_values(&input); + if values.is_empty() { + self.hide()?; + } else { + let mut s = self.state.borrow_mut(); + s.values = values; + s.selected = 0; + s.on_select = Some(callback); + s.target = Some(target); + drop(s); + self.notify.emit(()); } + + Ok(()) } - fn update(&mut self, _ctx: &Context, msg: Self::Message) -> bool { - match msg { - FunctionDropDownMsg::SetCallback(callback) => { - self.on_select = Some(callback); - false - }, - FunctionDropDownMsg::SetValues(values) => { - self.values = Some(values); - self.selected = 0; - true - }, - FunctionDropDownMsg::ItemSelect => { - if let Some(ref values) = self.values { - match values.get(self.selected) { - None => { - console::error_1(&"Selected out-of-bounds".into()); - false - }, - Some(x) => { - self.on_select.as_ref().unwrap().emit(*x); - false - }, - } - } else { - console::error_1(&"No Values".into()); - false - } - }, - FunctionDropDownMsg::ItemDown => { - self.selected += 1; - if let Some(ref values) = self.values - && self.selected >= values.len() - { - self.selected = 0; - }; - - true - }, - FunctionDropDownMsg::ItemUp => { - if let Some(ref values) = self.values - && self.selected < 1 - { - self.selected = values.len(); - } - - self.selected -= 1; - true - }, + pub fn item_select(&self) { + let state = self.state.borrow(); + if let Some(value) = state.values.get(state.selected) + && let Some(ref cb) = state.on_select + { + cb.emit(*value); } } - fn changed(&mut self, _ctx: &Context, _old: &Self::Properties) -> bool { - false + pub fn item_down(&self) { + let mut state = self.state.borrow_mut(); + state.selected += 1; + if state.selected >= state.values.len() { + state.selected = 0; + } + + drop(state); + self.notify.emit(()); } - fn view(&self, _ctx: &Context) -> Html { - let body = html! { - if let Some(ref values) = self.values { - if !values.is_empty() { - { for values - .iter() - .enumerate() - .map(|(idx, value)| { - let click = self.on_select.as_ref().unwrap().reform({ - let value = *value; - move |_: MouseEvent| value - }); - - html! { - if idx == self.selected { -
- { value.label } -
- { value.documentation } -
- } else { -
- { value.label } -
- { value.documentation } -
- } - } - }) } - } - } + pub fn item_up(&self) { + let mut state = self.state.borrow_mut(); + if state.selected < 1 { + state.selected = state.values.len(); + } + + state.selected -= 1; + drop(state); + self.notify.emit(()); + } + + pub fn hide(&self) -> ApiResult<()> { + self.state.borrow_mut().target = None; + self.notify.emit(()); + Ok(()) + } +} + +#[derive(Properties, PartialEq)] +pub struct FunctionDropDownPortalProps { + pub element: FunctionDropDownElement, + pub theme: String, +} + +pub struct FunctionDropDownPortal { + _sub: Subscription, +} + +impl Component for FunctionDropDownPortal { + type Message = (); + type Properties = FunctionDropDownPortalProps; + + fn create(ctx: &Context) -> Self { + let link = ctx.link().clone(); + let sub = ctx + .props() + .element + .notify + .add_listener(move |()| link.send_message(())); + Self { _sub: sub } + } + + fn update(&mut self, _ctx: &Context, _msg: ()) -> bool { + true + } + + fn view(&self, ctx: &Context) -> Html { + let state = ctx.props().element.state.borrow(); + let target = state.target.clone(); + let on_close = { + let element = ctx.props().element.clone(); + Callback::from(move |()| { + let _ = element.hide(); + }) }; - html! { <>{ body } } + if target.is_some() { + let values = state.values.clone(); + let selected = state.selected; + let on_select = state.on_select.clone(); + drop(state); + + html! { + + + + } + } else { + html! {} + } } } + +#[derive(Properties, PartialEq)] +struct FunctionDropDownViewProps { + values: Vec, + selected: usize, + on_select: Option>, +} + +#[function_component] +fn FunctionDropDownView(props: &FunctionDropDownViewProps) -> Html { + let body = html! { + if !props.values.is_empty() { + { for props.values + .iter() + .enumerate() + .map(|(idx, value)| { + let click = props.on_select.as_ref().unwrap().reform({ + let value = *value; + move |_: MouseEvent| value + }); + + html! { + if idx == props.selected { +
+ { value.label } +
+ { value.documentation } +
+ } else { +
+ { value.label } +
+ { value.documentation } +
+ } + } + }) } + } + }; + + html! { <>{ body } } +} + +fn filter_values(input: &str) -> Vec { + let input = input.to_lowercase(); + COMPLETIONS + .iter() + .filter(|x| x.label.to_lowercase().starts_with(&input)) + .cloned() + .collect::>() +} diff --git a/rust/perspective-viewer/src/rust/components/main_panel.rs b/rust/perspective-viewer/src/rust/components/main_panel.rs index 54fc5be1d8..789067b6e5 100644 --- a/rust/perspective-viewer/src/rust/components/main_panel.rs +++ b/rust/perspective-viewer/src/rust/components/main_panel.rs @@ -10,8 +10,6 @@ // ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ -use std::rc::Rc; - use perspective_js::utils::*; use wasm_bindgen::prelude::*; use yew::prelude::*; @@ -51,7 +49,7 @@ pub struct MainPanelProps { /// Value props from root's `PresentationProps`, threaded to `StatusBar`. pub is_settings_open: bool, pub selected_theme: Option, - pub available_themes: Rc>, + pub available_themes: PtrEqRc>, pub is_workspace: bool, /// State @@ -160,6 +158,7 @@ impl Component for MainPanel { }); }) }; + html! {
{ let opacity = if visible { "" } else { ";opacity:0" }; self.css = format!(":host{{top:{top}px;left:{left}px{opacity}}}"); - self.rev_vert.0.set(rev_vert); + self.rev_vert.set(rev_vert); true }, ModalMsg::SubMsg(msg) => { @@ -117,6 +117,12 @@ pub struct ModalOrientation(Rc>); impl ImplicitClone for ModalOrientation {} +impl ModalOrientation { + pub fn set(&self, value: bool) { + self.0.set(value); + } +} + impl From for bool { fn from(x: ModalOrientation) -> Self { x.0.get() diff --git a/rust/perspective-viewer/src/rust/components/plugin_selector.rs b/rust/perspective-viewer/src/rust/components/plugin_selector.rs index e22bfd56c7..0ad45d31d5 100644 --- a/rust/perspective-viewer/src/rust/components/plugin_selector.rs +++ b/rust/perspective-viewer/src/rust/components/plugin_selector.rs @@ -10,12 +10,11 @@ // ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ -use std::rc::Rc; - use yew::prelude::*; use super::style::LocalStyle; use crate::css; +use crate::utils::PtrEqRc; /// Pure value props — no engine handles, no PubSub subscriptions. /// The parent passes updated values whenever the renderer state changes. @@ -25,7 +24,7 @@ pub struct PluginSelectorProps { pub plugin_name: Option, /// Flat list of all registered plugin names (all categories merged). - pub available_plugins: Rc>, + pub available_plugins: PtrEqRc>, /// Called when the user selects a different plugin. pub on_select_plugin: Callback, diff --git a/rust/perspective-viewer/src/rust/components/portal.rs b/rust/perspective-viewer/src/rust/components/portal.rs new file mode 100644 index 0000000000..f80db0aa15 --- /dev/null +++ b/rust/perspective-viewer/src/rust/components/portal.rs @@ -0,0 +1,274 @@ +// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃ +// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃ +// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃ +// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃ +// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ +// ┃ Copyright (c) 2017, the Perspective Authors. ┃ +// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃ +// ┃ This file is part of the Perspective library, distributed under the terms ┃ +// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ +// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + +use std::cell::Cell; +use std::rc::Rc; + +use perspective_js::utils::global; +use wasm_bindgen::JsCast; +use wasm_bindgen::prelude::*; +use web_sys::*; +use yew::prelude::*; + +use crate::components::modal::ModalOrientation; +use crate::components::style::StyleProvider; +use crate::utils::*; + +#[derive(Properties, PartialEq)] +pub struct PortalModalProps { + pub children: Children, + + /// The element to position relative to. `None` means closed. + pub target: Option, + + /// Whether the portal manages its own focus and closes on blur. + #[prop_or(true)] + pub own_focus: bool, + + /// Called when the portal closes (blur, etc). + #[prop_or_default] + pub on_close: Callback<()>, + + pub tag_name: &'static str, + + pub theme: String, +} + +pub enum PortalModalMsg { + Reposition, +} + +pub struct PortalModal { + host: HtmlElement, + shadow_root: Element, + top: f64, + left: f64, + visible: bool, + rev_vert: ModalOrientation, + anchor: Rc>, + _blur_closure: Option>, +} + +impl PortalModal { + fn attach_to_body(&self) { + if !self.host.is_connected() { + let _ = global::body().append_child(&self.host); + } + } + + fn detach_from_body(&mut self) { + if self.host.is_connected() { + let _ = global::body().remove_child(&self.host); + } + + if let Some(closure) = self._blur_closure.as_ref() { + self.host + .remove_event_listener_with_callback("blur", closure.as_ref().unchecked_ref()) + .unwrap() + } + + self._blur_closure = None; + } + + fn position_against_target(&mut self, target: &HtmlElement) { + let target_rect = target.get_bounding_client_rect(); + let height = target_rect.height(); + let width = target_rect.width(); + let top = target_rect.top(); + let left = target_rect.left(); + + if !self.visible { + // First pass: position at default anchor, invisible + self.top = top + height - 1.0; + self.left = left; + self.visible = false; + } else { + // Second pass: compute actual anchor and reposition + let anchor = calc_relative_position(&self.host, top, left, height, width); + self.anchor.set(anchor); + let modal_rect = self.host.get_bounding_client_rect(); + let (new_top, new_left) = calc_anchor_position(anchor, &target_rect, &modal_rect); + self.top = new_top; + self.left = new_left; + self.rev_vert.set(anchor.is_rev_vert()); + } + } + + fn setup_blur_handler(&mut self, ctx: &Context) { + let on_close = { + let target = ctx.props().target.clone(); + ctx.props().on_close.reform(move |_| { + if let Some(target) = &target { + target.class_list().remove_1("modal-target").unwrap(); + } + }) + }; + + let closure = Closure::wrap(Box::new(move |_: FocusEvent| { + on_close.emit(()); + }) as Box); + + let _ = self + .host + .add_event_listener_with_callback("blur", closure.as_ref().unchecked_ref()); + + self._blur_closure = Some(closure); + } +} + +impl Component for PortalModal { + type Message = PortalModalMsg; + type Properties = PortalModalProps; + + fn create(ctx: &Context) -> Self { + let host: HtmlElement = global::document() + .create_element(ctx.props().tag_name) + .unwrap() + .unchecked_into(); + + host.style().set_property("position", "fixed").unwrap(); + host.style().set_property("z-index", "10000").unwrap(); + let init = ShadowRootInit::new(ShadowRootMode::Open); + let shadow_root = if let Some(elem) = host.shadow_root() { + elem + } else { + host.attach_shadow(&init).unwrap() + } + .unchecked_into::(); + + Self { + host, + shadow_root, + top: 0.0, + left: 0.0, + visible: false, + rev_vert: Default::default(), + anchor: Default::default(), + _blur_closure: None, + } + } + + fn update(&mut self, _ctx: &Context, msg: Self::Message) -> bool { + match msg { + PortalModalMsg::Reposition => { + self.visible = true; + true + }, + } + } + + fn changed(&mut self, ctx: &Context, old_props: &Self::Properties) -> bool { + let new_target = &ctx.props().target; + let old_target = &old_props.target; + + match (old_target, new_target, self._blur_closure.as_ref()) { + (None, Some(_), Some(closure)) => { + self.visible = false; + self.host + .remove_event_listener_with_callback("blur", closure.as_ref().unchecked_ref()) + .unwrap(); + + self._blur_closure = None; + }, + (None, Some(_), None) => { + self.visible = false; + self._blur_closure = None; + }, + (Some(_), None, _) => { + self.detach_from_body(); + return true; + }, + _ => {}, + } + + true + } + + fn view(&self, ctx: &Context) -> Html { + let target = &ctx.props().target; + if target.is_none() { + return html! {}; + } + + let opacity = if self.visible { "" } else { ";opacity:0" }; + let css = format!( + ":host{{top:{}px;left:{}px{}}}", + self.top, self.left, opacity + ); + + let portal_content = html! { + <> + + context={self.rev_vert.clone()}> + + { for ctx.props().children.iter() } + + > + + }; + + yew::create_portal(portal_content, self.shadow_root.clone()) + } + + fn rendered(&mut self, ctx: &Context, _first_render: bool) { + if let Some(target) = &ctx.props().target { + if !self.host.is_connected() { + let theme = ctx.props().theme.as_str(); + self.host.set_attribute("theme", theme).unwrap(); + + // First render with a target: attach to body, position invisible + self.position_against_target(target); + self.attach_to_body(); + + // Propagate theme from target + if let Some(theme) = target.get_attribute("theme") { + let _ = self.host.set_attribute("theme", &theme); + } + + target.class_list().add_1("modal-target").unwrap(); + + if ctx.props().own_focus { + self.host.set_attribute("tabindex", "0").unwrap(); + self.setup_blur_handler(ctx); + } + + // Schedule second positioning pass + let link = ctx.link().clone(); + wasm_bindgen_futures::spawn_local(async move { + request_animation_frame().await; + link.send_message(PortalModalMsg::Reposition); + }); + } else if self.visible { + // Second pass: reposition with correct anchor + self.position_against_target(target); + + if ctx.props().own_focus && self._blur_closure.is_some() { + let _ = self.host.focus(); + } + } + } + } + + fn destroy(&mut self, ctx: &Context) { + if let Some(target) = &ctx.props().target { + target.class_list().remove_1("modal-target").unwrap(); + if target.get_attribute("theme").is_some() { + let _ = self.host.remove_attribute("theme"); + } + + let event = CustomEvent::new("-perspective-close-expression").unwrap(); + let _ = target.dispatch_event(&event); + } + + self.detach_from_body(); + } +} diff --git a/rust/perspective-viewer/src/rust/components/settings_panel.rs b/rust/perspective-viewer/src/rust/components/settings_panel.rs index 4cc7418ed3..17e8d02d62 100644 --- a/rust/perspective-viewer/src/rust/components/settings_panel.rs +++ b/rust/perspective-viewer/src/rust/components/settings_panel.rs @@ -38,20 +38,23 @@ pub struct SettingsPanelProps { /// Value props threaded from the root's `RendererProps` / `SessionProps`. pub plugin_name: Option, - pub available_plugins: Rc>, + pub available_plugins: PtrEqRc>, pub has_table: bool, pub named_column_count: usize, - pub view_config: Rc, + pub view_config: PtrEqRc, /// Column currently being dragged (if any) — threaded to show drag /// highlights without per-component `DragDrop` PubSub subscriptions. pub drag_column: Option, /// Cloned session metadata snapshot — threaded from `SessionProps` /// so that metadata changes trigger re-renders via prop diffing. - pub metadata: Rc, + pub metadata: SessionMetadataRc, /// Snapshot of the column-settings sidebar state — threaded from /// `PresentationProps` so that open/close triggers re-renders. pub open_column_settings: OpenColumnSettings, + /// Selected theme name, threaded for PortalModal consumers. + pub selected_theme: Option, + /// State pub dragdrop: DragDrop, pub session: Session, @@ -70,6 +73,7 @@ impl PartialEq for SettingsPanelProps { && self.drag_column == rhs.drag_column && self.metadata == rhs.metadata && self.open_column_settings == rhs.open_column_settings + && self.selected_theme == rhs.selected_theme } } @@ -117,25 +121,26 @@ pub fn SettingsPanel(props: &SettingsPanelProps) -> Html { if !session.is_errored() { let metadata = renderer.get_next_plugin_metadata(&PluginUpdate::Update(plugin_name)); + let prev_metadata = renderer.metadata(); let requirements = metadata.as_ref().unwrap_or(&*prev_metadata); let rollup_features = session_metadata .get_features() .map(|x| x.get_group_rollup_modes()) .unwrap(); + let group_rollups = requirements.get_group_rollups(&rollup_features); - let all_columns: Vec<_> = session_metadata - .get_table_columns() - .into_iter() - .flatten() - .cloned() - .map(Some) - .collect(); let mut update = ViewConfigUpdate { group_rollup_mode: group_rollups.first().cloned(), ..ViewConfigUpdate::default() }; - update.set_update_column_defaults(&session_metadata, &all_columns, requirements); + + update.set_update_column_defaults( + &session_metadata, + &session.get_view_config().columns, + requirements, + ); + if session.update_view_config(update).is_ok() { clone!(renderer, session); ApiFuture::spawn(async move { @@ -143,6 +148,7 @@ pub fn SettingsPanel(props: &SettingsPanelProps) -> Html { renderer.draw(session.validate().await?.create_view()).await }); } + presentation.set_open_column_settings(None); } }) @@ -170,6 +176,7 @@ pub fn SettingsPanel(props: &SettingsPanelProps) -> Html { view_config={props.view_config.clone()} drag_column={props.drag_column.clone()} metadata={props.metadata.clone()} + selected_theme={props.selected_theme.clone()} {dragdrop} renderer={renderer.clone()} session={session.clone()} diff --git a/rust/perspective-viewer/src/rust/components/status_bar.rs b/rust/perspective-viewer/src/rust/components/status_bar.rs index e741b6fe9b..f4e48a01a7 100644 --- a/rust/perspective-viewer/src/rust/components/status_bar.rs +++ b/rust/perspective-viewer/src/rust/components/status_bar.rs @@ -10,22 +10,24 @@ // ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ -use std::rc::Rc; - +use wasm_bindgen_futures::spawn_local; use web_sys::*; use yew::prelude::*; use super::status_indicator::StatusIndicator; use super::style::LocalStyle; use crate::components::containers::select::*; +use crate::components::copy_dropdown::CopyDropDownMenu; +use crate::components::export_dropdown::ExportDropDownMenu; +use crate::components::portal::PortalModal; use crate::components::status_bar_counter::StatusBarRowsCounter; -use crate::custom_elements::copy_dropdown::*; -use crate::custom_elements::export_dropdown::*; use crate::custom_events::CustomEvents; +use crate::js::*; use crate::presentation::Presentation; use crate::renderer::*; use crate::session::*; use crate::tasks::*; +use crate::utils::*; use crate::*; #[derive(Clone, Properties)] @@ -55,7 +57,7 @@ pub struct StatusBarProps { /// visibility_changed subscriptions. pub is_settings_open: bool, pub selected_theme: Option, - pub available_themes: Rc>, + pub available_themes: PtrEqRc>, /// Whether this viewer is hosted inside a ``. pub is_workspace: bool, @@ -118,6 +120,8 @@ pub enum StatusBarMsg { Reset(MouseEvent), Export, Copy, + CloseExport, + CloseCopy, Noop, Eject, SetTheme(String), @@ -137,6 +141,8 @@ pub struct StatusBar { /// change (blur / Enter). Reset to the prop value whenever the prop /// changes. title: Option, + copy_target: Option, + export_target: Option, } impl Component for StatusBar { @@ -150,6 +156,8 @@ impl Component for StatusBar { input_ref: NodeRef::default(), statusbar_ref: NodeRef::default(), title: ctx.props().title.clone(), + copy_target: None, + export_target: None, } } @@ -196,14 +204,20 @@ impl Component for StatusBar { false }, StatusBarMsg::Export => { - let target = self.export_ref.cast::().into_apierror()?; - ExportDropDownMenuElement::new_from_model(ctx.props()).open(target); - false + self.export_target = self.export_ref.cast::(); + true }, StatusBarMsg::Copy => { - let target = self.copy_ref.cast::().into_apierror()?; - CopyDropDownMenuElement::new_from_model(ctx.props()).open(target); - false + self.copy_target = self.copy_ref.cast::(); + true + }, + StatusBarMsg::CloseExport => { + self.export_target = None; + true + }, + StatusBarMsg::CloseCopy => { + self.copy_target = None; + true }, StatusBarMsg::Eject => { ctx.props().presentation().on_eject.emit(()); @@ -307,6 +321,43 @@ impl Component for StatusBar { || is_settings_open || presentation.is_active(&self.input_ref.cast::()); + let on_copy_select = { + let props = ctx.props().clone(); + let link = ctx.link().clone(); + Callback::from(move |x: ExportFile| { + let props = props.clone(); + let link = link.clone(); + spawn_local(async move { + let mime = x.method.mimetype(x.is_chart); + let task = props.export_method_to_blob(x.method); + let result = copy_to_clipboard(task, mime).await; + crate::maybe_log!({ + result?; + link.send_message(StatusBarMsg::CloseCopy); + }) + }) + }) + }; + + let on_export_select = { + let props = ctx.props().clone(); + let link = ctx.link().clone(); + Callback::from(move |x: ExportFile| { + if !x.name.is_empty() { + clone!(props, link); + spawn_local(async move { + let val = props.export_method_to_blob(x.method).await.unwrap(); + let is_chart = props.renderer().is_chart(); + download(&x.as_filename(is_chart), &val).unwrap(); + link.send_message(StatusBarMsg::CloseExport); + }) + } + }) + }; + + let on_close_copy = ctx.link().callback(|_| StatusBarMsg::CloseCopy); + let on_close_export = ctx.link().callback(|_| StatusBarMsg::CloseExport); + if is_settings { html! { <> @@ -386,6 +437,28 @@ impl Component for StatusBar {
}
+ + + + + + } } else if let Some(x) = ctx.props().on_settings.as_ref() { @@ -405,7 +478,7 @@ impl Component for StatusBar { #[derive(Properties, PartialEq)] struct ThemeSelectorProps { pub theme: Option, - pub themes: Rc>, + pub themes: PtrEqRc>, pub on_reset: Callback<()>, pub on_change: Callback, } diff --git a/rust/perspective-viewer/src/rust/components/viewer.rs b/rust/perspective-viewer/src/rust/components/viewer.rs index 6070d0410b..bd0f789655 100644 --- a/rust/perspective-viewer/src/rust/components/viewer.rs +++ b/rust/perspective-viewer/src/rust/components/viewer.rs @@ -169,7 +169,7 @@ impl Component for PerspectiveViewer { let subscriptions = create_subscriptions(ctx); let session_props = ctx.props().session.to_props(); let renderer_props = ctx.props().renderer.to_props(None); - let presentation_props = ctx.props().presentation.to_props(std::rc::Rc::new(vec![])); + let presentation_props = ctx.props().presentation.to_props(PtrEqRc::new(vec![])); // Memoized callback for column settings drawer let on_close_column_settings = ctx.link().callback(|_| OpenColumnSettings { @@ -183,7 +183,7 @@ impl Component for PerspectiveViewer { // subscription is registered. { let presentation = ctx.props().presentation.clone(); - let cb = ctx.link().callback(move |themes: Rc>| { + let cb = ctx.link().callback(move |themes: PtrEqRc>| { UpdatePresentation(Box::new(presentation.to_props(themes))) }); @@ -522,6 +522,7 @@ impl Component for PerspectiveViewer { {drag_column} metadata={metadata.clone()} open_column_settings={self.presentation_props.open_column_settings.clone()} + selected_theme={self.presentation_props.selected_theme.clone()} {dragdrop} {presentation} {renderer} @@ -550,6 +551,7 @@ impl Component for PerspectiveViewer { plugin_name={self.renderer_props.plugin_name.clone()} {metadata} view_config={self.session_props.config.clone()} + selected_theme={self.presentation_props.selected_theme.clone()} {custom_events} {presentation} {renderer} @@ -750,7 +752,7 @@ fn create_subscriptions(ctx: &Context) -> Vec { let cb_theme = { let pres = presentation.clone(); ctx.link() - .callback(move |(themes, _): (std::rc::Rc>, _)| { + .callback(move |(themes, _): (PtrEqRc>, _)| { UpdatePresentation(Box::new(pres.to_props(themes))) }) }; diff --git a/rust/perspective-viewer/src/rust/custom_elements/column_dropdown.rs b/rust/perspective-viewer/src/rust/custom_elements/column_dropdown.rs deleted file mode 100644 index 600f96d60f..0000000000 --- a/rust/perspective-viewer/src/rust/custom_elements/column_dropdown.rs +++ /dev/null @@ -1,123 +0,0 @@ -// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ -// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃ -// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃ -// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃ -// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃ -// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ -// ┃ Copyright (c) 2017, the Perspective Authors. ┃ -// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃ -// ┃ This file is part of the Perspective library, distributed under the terms ┃ -// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ -// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ - -use std::collections::HashSet; - -use perspective_client::clone; -use perspective_client::config::Expression; -use perspective_js::json; -use perspective_js::utils::global; -use wasm_bindgen::JsCast; -use wasm_bindgen::prelude::*; -use web_sys::*; -use yew::html::ImplicitClone; -use yew::{Callback, props}; - -use crate::components::column_dropdown::*; -use crate::components::column_selector::InPlaceColumn; -use crate::custom_elements::modal::*; -use crate::session::Session; -use crate::*; - -#[wasm_bindgen] -#[derive(Clone)] -pub struct ColumnDropDownElement { - modal: ModalElement, - session: Session, -} - -impl ImplicitClone for ColumnDropDownElement {} - -impl ColumnDropDownElement { - pub fn new(session: Session) -> Self { - let dropdown = global::document() - .create_element("perspective-dropdown") - .unwrap() - .unchecked_into::(); - - let props = props!(ColumnDropDownProps {}); - let modal = ModalElement::new(dropdown, props, false, None); - Self { modal, session } - } - - pub fn autocomplete( - &self, - target: HtmlInputElement, - exclude: HashSet, - callback: Callback, - ) -> Option<()> { - let input = target.value(); - let metadata = self.session.metadata(); - let mut values: Vec = vec![]; - let small_input = input.to_lowercase(); - for col in metadata.get_table_columns()? { - if !exclude.contains(col) && col.to_lowercase().contains(&small_input) { - values.push(InPlaceColumn::Column(col.to_owned())); - } - } - - for col in self.session.metadata().get_expression_columns() { - if !exclude.contains(col) && col.to_lowercase().contains(&small_input) { - values.push(InPlaceColumn::Column(col.to_owned())); - } - } - - clone!(self.modal, self.session); - ApiFuture::spawn(async move { - if !exclude.contains(&input) { - let is_expr = session.validate_expr(&input).await?.is_none(); - - if is_expr { - values.push(InPlaceColumn::Expression(Expression::new( - None, - input.into(), - ))); - } - } - - let classes = modal.custom_element.class_list(); - let no_results = json!(["no-results"]); - if values.is_empty() { - classes.add(&no_results).unwrap(); - } else { - classes.remove(&no_results).unwrap(); - } - - modal.send_message_batch(vec![ - ColumnDropDownMsg::SetCallback(callback), - ColumnDropDownMsg::SetValues(values, target.get_bounding_client_rect().width()), - ]); - - modal.open(target.unchecked_into(), None).await - }); - - Some(()) - } - - pub fn item_select(&self) { - self.modal.send_message(ColumnDropDownMsg::ItemSelect); - } - - pub fn item_down(&self) { - self.modal.send_message(ColumnDropDownMsg::ItemDown); - } - - pub fn item_up(&self) { - self.modal.send_message(ColumnDropDownMsg::ItemUp); - } - - pub fn hide(&self) -> ApiResult<()> { - self.modal.hide() - } - - pub fn connected_callback(&self) {} -} diff --git a/rust/perspective-viewer/src/rust/custom_elements/copy_dropdown.rs b/rust/perspective-viewer/src/rust/custom_elements/copy_dropdown.rs index 54a4ab1f85..59479b4055 100644 --- a/rust/perspective-viewer/src/rust/custom_elements/copy_dropdown.rs +++ b/rust/perspective-viewer/src/rust/custom_elements/copy_dropdown.rs @@ -13,24 +13,91 @@ use std::cell::RefCell; use std::rc::Rc; -use ::perspective_js::utils::{global, *}; +use perspective_js::utils::global; use wasm_bindgen::prelude::*; use wasm_bindgen_futures::spawn_local; use web_sys::*; -use yew::*; +use yew::prelude::*; -use super::modal::*; use super::viewer::PerspectiveViewerElement; -use crate::components::copy_dropdown::{CopyDropDownMenu, CopyDropDownMenuProps}; +use crate::components::copy_dropdown::CopyDropDownMenu; +use crate::components::portal::PortalModal; +use crate::components::style::StyleProvider; use crate::js::*; +use crate::renderer::*; use crate::tasks::*; use crate::utils::*; +use crate::*; + +type TargetState = Rc>>; + +#[derive(Properties, PartialEq)] +struct CopyDropDownWrapperProps { + renderer: Renderer, + callback: Callback, + target: TargetState, + custom_element: HtmlElement, + #[prop_or_default] + theme: String, +} + +enum CopyDropDownWrapperMsg { + Open, + Close, +} + +struct CopyDropDownWrapper { + target: Option, +} + +impl Component for CopyDropDownWrapper { + type Message = CopyDropDownWrapperMsg; + type Properties = CopyDropDownWrapperProps; + + fn create(_ctx: &Context) -> Self { + Self { target: None } + } + + fn update(&mut self, ctx: &Context, msg: Self::Message) -> bool { + match msg { + CopyDropDownWrapperMsg::Open => { + self.target = ctx.props().target.borrow().clone(); + true + }, + CopyDropDownWrapperMsg::Close => { + self.target = None; + true + }, + } + } + + fn view(&self, ctx: &Context) -> Html { + let on_close = ctx.link().callback(|_| CopyDropDownWrapperMsg::Close); + html! { + + + + + + } + } +} #[wasm_bindgen] #[derive(Clone)] pub struct CopyDropDownMenuElement { elem: HtmlElement, - modal: Rc>>>, + target: TargetState, + root: Rc>>>, } impl CustomElementMetadata for CopyDropDownMenuElement { @@ -43,24 +110,25 @@ impl CopyDropDownMenuElement { pub fn new(elem: HtmlElement) -> Self { Self { elem, - modal: Default::default(), + target: Default::default(), + root: Default::default(), } } pub fn open(&self, target: HtmlElement) { - if let Some(x) = &*self.modal.borrow() { - ApiFuture::spawn(x.clone().open(target, None)); + *self.target.borrow_mut() = Some(target); + if let Some(root) = self.root.borrow().as_ref() { + root.send_message(CopyDropDownWrapperMsg::Open); } } pub fn hide(&self) -> ApiResult<()> { - let borrowed = self.modal.borrow(); - borrowed.as_ref().into_apierror()?.hide() + if let Some(root) = self.root.borrow().as_ref() { + root.send_message(CopyDropDownWrapperMsg::Close); + } + Ok(()) } - /// Internal Only. - /// - /// Set this custom element model's raw pointer. pub fn __set_model(&self, parent: &PerspectiveViewerElement) { self.set_config_model(parent) } @@ -91,30 +159,43 @@ impl CopyDropDownMenuElement { { let callback = Callback::from({ let model = model.clone_state(); - let modal_rc = self.modal.clone(); + let target = self.target.clone(); + let root = self.root.clone(); move |x: ExportFile| { let model = model.clone(); - let modal = modal_rc.borrow().clone().unwrap(); + let target = target.clone(); + let root = root.clone(); spawn_local(async move { let mime = x.method.mimetype(x.is_chart); let task = model.export_method_to_blob(x.method); let result = copy_to_clipboard(task, mime).await; crate::maybe_log!({ result?; - modal.hide()?; + *target.borrow_mut() = None; + if let Some(root) = root.borrow().as_ref() { + root.send_message(CopyDropDownWrapperMsg::Close); + } }) }) } }); let renderer = model.renderer().clone(); - let props = props!(CopyDropDownMenuProps { + let init = ShadowRootInit::new(ShadowRootMode::Open); + let shadow_root = self + .elem + .attach_shadow(&init) + .unwrap() + .unchecked_into::(); + + let props = yew::props!(CopyDropDownWrapperProps { renderer, callback, - root: self.elem.clone() + target: self.target.clone(), + custom_element: self.elem.clone() }); - let modal = ModalElement::new(self.elem.clone(), props, true, None); - *self.modal.borrow_mut() = Some(modal); + let handle = yew::Renderer::with_root_and_props(shadow_root, props).render(); + *self.root.borrow_mut() = Some(handle); } } diff --git a/rust/perspective-viewer/src/rust/custom_elements/export_dropdown.rs b/rust/perspective-viewer/src/rust/custom_elements/export_dropdown.rs index c24e8b8edc..a347bd0322 100644 --- a/rust/perspective-viewer/src/rust/custom_elements/export_dropdown.rs +++ b/rust/perspective-viewer/src/rust/custom_elements/export_dropdown.rs @@ -17,20 +17,89 @@ use perspective_js::utils::global; use wasm_bindgen::prelude::*; use wasm_bindgen_futures::spawn_local; use web_sys::*; -use yew::*; +use yew::prelude::*; use super::viewer::PerspectiveViewerElement; -use crate::components::export_dropdown::*; -use crate::custom_elements::modal::*; +use crate::components::export_dropdown::ExportDropDownMenu; +use crate::components::portal::PortalModal; +use crate::components::style::StyleProvider; +use crate::renderer::*; +use crate::session::*; use crate::tasks::*; use crate::utils::*; use crate::*; +type TargetState = Rc>>; + +#[derive(Properties, PartialEq)] +struct ExportDropDownWrapperProps { + renderer: Renderer, + session: Session, + callback: Callback, + target: TargetState, + custom_element: HtmlElement, + #[prop_or_default] + theme: String, +} + +enum ExportDropDownWrapperMsg { + Open, + Close, +} + +struct ExportDropDownWrapper { + target: Option, +} + +impl Component for ExportDropDownWrapper { + type Message = ExportDropDownWrapperMsg; + type Properties = ExportDropDownWrapperProps; + + fn create(_ctx: &Context) -> Self { + Self { target: None } + } + + fn update(&mut self, ctx: &Context, msg: Self::Message) -> bool { + match msg { + ExportDropDownWrapperMsg::Open => { + self.target = ctx.props().target.borrow().clone(); + true + }, + ExportDropDownWrapperMsg::Close => { + self.target = None; + true + }, + } + } + + fn view(&self, ctx: &Context) -> Html { + let on_close = ctx.link().callback(|_| ExportDropDownWrapperMsg::Close); + html! { + + + + + + } + } +} + #[wasm_bindgen] #[derive(Clone)] pub struct ExportDropDownMenuElement { elem: HtmlElement, - modal: Rc>>>, + target: TargetState, + root: Rc>>>, } impl CustomElementMetadata for ExportDropDownMenuElement { @@ -43,24 +112,25 @@ impl ExportDropDownMenuElement { pub fn new(elem: HtmlElement) -> Self { Self { elem, - modal: Default::default(), + target: Default::default(), + root: Default::default(), } } pub fn open(&self, target: HtmlElement) { - if let Some(x) = &*self.modal.borrow() { - ApiFuture::spawn(x.clone().open(target, None)); + *self.target.borrow_mut() = Some(target); + if let Some(root) = self.root.borrow().as_ref() { + root.send_message(ExportDropDownWrapperMsg::Open); } } pub fn hide(&self) -> ApiResult<()> { - let borrowed = self.modal.borrow(); - borrowed.as_ref().into_apierror()?.hide() + if let Some(root) = self.root.borrow().as_ref() { + root.send_message(ExportDropDownWrapperMsg::Close); + } + Ok(()) } - /// Internal Only. - /// - /// Set this custom element model's raw pointer. pub fn __set_model(&self, parent: &PerspectiveViewerElement) { self.set_config_model(parent) } @@ -91,15 +161,19 @@ impl ExportDropDownMenuElement { { let callback = Callback::from({ let model = model.clone_state(); - let modal_rc = self.modal.clone(); + let target = self.target.clone(); + let root = self.root.clone(); move |x: ExportFile| { if !x.name.is_empty() { - clone!(modal_rc, model); + clone!(target, root, model); spawn_local(async move { let val = model.export_method_to_blob(x.method).await.unwrap(); let is_chart = model.renderer().is_chart(); download(&x.as_filename(is_chart), &val).unwrap(); - modal_rc.borrow().clone().unwrap().hide().unwrap(); + *target.borrow_mut() = None; + if let Some(root) = root.borrow().as_ref() { + root.send_message(ExportDropDownWrapperMsg::Close); + } }) } } @@ -107,14 +181,22 @@ impl ExportDropDownMenuElement { let renderer = model.renderer().clone(); let session = model.session().clone(); - let props = props!(ExportDropDownMenuProps { + let init = ShadowRootInit::new(ShadowRootMode::Open); + let shadow_root = self + .elem + .attach_shadow(&init) + .unwrap() + .unchecked_into::(); + + let props = yew::props!(ExportDropDownWrapperProps { renderer, session, callback, - root: self.elem.clone() + target: self.target.clone(), + custom_element: self.elem.clone(), }); - let modal = ModalElement::new(self.elem.clone(), props, true, None); - *self.modal.borrow_mut() = Some(modal); + let handle = yew::Renderer::with_root_and_props(shadow_root, props).render(); + *self.root.borrow_mut() = Some(handle); } } diff --git a/rust/perspective-viewer/src/rust/custom_elements/filter_dropdown.rs b/rust/perspective-viewer/src/rust/custom_elements/filter_dropdown.rs deleted file mode 100644 index bce36d6af9..0000000000 --- a/rust/perspective-viewer/src/rust/custom_elements/filter_dropdown.rs +++ /dev/null @@ -1,179 +0,0 @@ -// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ -// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃ -// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃ -// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃ -// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃ -// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ -// ┃ Copyright (c) 2017, the Perspective Authors. ┃ -// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃ -// ┃ This file is part of the Perspective library, distributed under the terms ┃ -// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ -// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ - -use std::cell::RefCell; -use std::collections::HashSet; -use std::rc::Rc; - -use perspective_client::clone; -use perspective_js::utils::global; -use wasm_bindgen::JsCast; -use wasm_bindgen::prelude::*; -use web_sys::*; -use yew::html::ImplicitClone; -use yew::*; - -use crate::components::filter_dropdown::*; -use crate::custom_elements::modal::*; -use crate::session::Session; -use crate::*; - -#[wasm_bindgen] -#[derive(Clone)] -pub struct FilterDropDownElement { - modal: ModalElement, - session: Session, - column: Rc>>, - values: Rc>>>, - target: Rc>>, -} - -impl PartialEq for FilterDropDownElement { - fn eq(&self, other: &Self) -> bool { - self.column == other.column && self.values == other.values && self.target == other.target - } -} - -impl ImplicitClone for FilterDropDownElement {} - -impl FilterDropDownElement { - pub fn new(session: Session) -> Self { - let dropdown = global::document() - .create_element("perspective-dropdown") - .unwrap() - .unchecked_into::(); - - let column: Rc>> = Rc::new(RefCell::new(None)); - let props = props!(FilterDropDownProps {}); - let modal = ModalElement::new(dropdown, props, false, None); - let values = Rc::new(RefCell::new(None)); - Self { - modal, - session, - column, - values, - target: Default::default(), - } - } - - pub fn reautocomplete(&self) { - ApiFuture::spawn( - self.modal - .clone() - .open(self.target.borrow().clone().unwrap(), None), - ); - } - - pub fn autocomplete( - &self, - column: (usize, String), - input: String, - exclude: HashSet, - target: HtmlElement, - callback: Callback, - ) { - let current_column = self.column.borrow().clone(); - match current_column { - Some(filter_col) if filter_col == column => { - let values = filter_values(&input, &self.values, &exclude); - if values.len() == 1 && values[0] == input { - self.hide().unwrap(); - } else { - self.modal.send_message_batch(vec![ - FilterDropDownMsg::SetCallback(callback), - FilterDropDownMsg::SetValues(values), - ]); - - if let Some(x) = self.target.borrow().clone() - && !self.modal.is_open() - { - ApiFuture::spawn(self.modal.clone().open(x, None)) - } - } - }, - _ => { - ApiFuture::spawn({ - clone!( - self.modal, - self.session, - self.values, - old_column = self.column, - old_target = self.target - ); - async move { - let all_values = session.get_column_values(column.1.clone()).await?; - *values.borrow_mut() = Some(all_values); - let filter_values = filter_values(&input, &values, &exclude); - if filter_values.len() == 1 && filter_values[0] == input { - *old_column.borrow_mut() = Some(column); - *old_target.borrow_mut() = Some(target.clone()); - let filter_values = self::filter_values("", &values, &exclude); - modal.send_message_batch(vec![ - FilterDropDownMsg::SetCallback(callback), - FilterDropDownMsg::SetValues(filter_values), - ]); - - modal.hide() - } else { - *old_column.borrow_mut() = Some(column); - *old_target.borrow_mut() = Some(target.clone()); - modal.send_message_batch(vec![ - FilterDropDownMsg::SetCallback(callback), - FilterDropDownMsg::SetValues(filter_values), - ]); - - modal.open(target, None).await - } - } - }); - }, - } - } - - pub fn item_select(&self) { - self.modal.send_message(FilterDropDownMsg::ItemSelect); - } - - pub fn item_down(&self) { - self.modal.send_message(FilterDropDownMsg::ItemDown); - } - - pub fn item_up(&self) { - self.modal.send_message(FilterDropDownMsg::ItemUp); - } - - pub fn hide(&self) -> ApiResult<()> { - let result = self.modal.hide(); - drop(self.column.borrow_mut().take()); - result - } - - pub fn connected_callback(&self) {} -} - -fn filter_values( - input: &str, - values: &Rc>>>, - exclude: &HashSet, -) -> Vec { - let input = input.to_lowercase(); - if let Some(values) = &*values.borrow() { - values - .iter() - .filter(|x| x.to_lowercase().contains(&input) && !exclude.contains(x.as_str())) - .take(10) - .cloned() - .collect::>() - } else { - vec![] - } -} diff --git a/rust/perspective-viewer/src/rust/custom_elements/function_dropdown.rs b/rust/perspective-viewer/src/rust/custom_elements/function_dropdown.rs deleted file mode 100644 index 0100c2848a..0000000000 --- a/rust/perspective-viewer/src/rust/custom_elements/function_dropdown.rs +++ /dev/null @@ -1,115 +0,0 @@ -// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ -// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃ -// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃ -// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃ -// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃ -// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ -// ┃ Copyright (c) 2017, the Perspective Authors. ┃ -// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃ -// ┃ This file is part of the Perspective library, distributed under the terms ┃ -// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ -// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ - -use std::cell::RefCell; -use std::rc::Rc; - -use perspective_client::config::{COMPLETIONS, CompletionItemSuggestion}; -use perspective_js::utils::global; -use wasm_bindgen::JsCast; -use wasm_bindgen::prelude::*; -use web_sys::*; -use yew::html::ImplicitClone; -use yew::*; - -use crate::components::function_dropdown::*; -use crate::custom_elements::modal::*; -use crate::*; - -#[wasm_bindgen] -#[derive(Clone)] -pub struct FunctionDropDownElement { - modal: ModalElement, - target: Rc>>, -} - -impl PartialEq for FunctionDropDownElement { - fn eq(&self, _other: &Self) -> bool { - true - } -} - -impl ImplicitClone for FunctionDropDownElement {} - -impl FunctionDropDownElement { - pub fn reautocomplete(&self) { - ApiFuture::spawn( - self.modal - .clone() - .open(self.target.borrow().clone().unwrap(), None), - ); - } - - pub fn autocomplete( - &self, - input: String, - target: HtmlElement, - callback: Callback, - ) -> ApiResult<()> { - let values = filter_values(&input); - if values.is_empty() { - self.modal.hide()?; - } else { - self.modal.send_message_batch(vec![ - FunctionDropDownMsg::SetCallback(callback), - FunctionDropDownMsg::SetValues(values), - ]); - - ApiFuture::spawn(self.modal.clone().open(target, None)); - } - - Ok(()) - } - - pub fn item_select(&self) { - self.modal.send_message(FunctionDropDownMsg::ItemSelect); - } - - pub fn item_down(&self) { - self.modal.send_message(FunctionDropDownMsg::ItemDown); - } - - pub fn item_up(&self) { - self.modal.send_message(FunctionDropDownMsg::ItemUp); - } - - pub fn hide(&self) -> ApiResult<()> { - self.modal.hide() - } - - pub fn connected_callback(&self) {} -} - -impl Default for FunctionDropDownElement { - fn default() -> Self { - let dropdown = global::document() - .create_element("perspective-dropdown") - .unwrap() - .unchecked_into::(); - - let props = props!(FunctionDropDownProps {}); - let modal = ModalElement::new(dropdown, props, false, None); - Self { - modal, - target: Default::default(), - } - } -} - -fn filter_values(input: &str) -> Vec { - let input = input.to_lowercase(); - COMPLETIONS - .iter() - .filter(|x| x.label.to_lowercase().starts_with(&input)) - .cloned() - .collect::>() -} diff --git a/rust/perspective-viewer/src/rust/custom_elements/mod.rs b/rust/perspective-viewer/src/rust/custom_elements/mod.rs index 340709e496..17ef5d61bd 100644 --- a/rust/perspective-viewer/src/rust/custom_elements/mod.rs +++ b/rust/perspective-viewer/src/rust/custom_elements/mod.rs @@ -13,15 +13,8 @@ //! Each file in `custom_elements` exports a single struct which will be the //! public [`wasm_bindgen`] API to a JavaScript Custom Element. -mod column_dropdown; pub mod copy_dropdown; pub mod debug_plugin; pub mod export_dropdown; -mod filter_dropdown; -mod function_dropdown; pub mod modal; pub mod viewer; - -pub use self::column_dropdown::*; -pub use self::filter_dropdown::*; -pub use self::function_dropdown::*; diff --git a/rust/perspective-viewer/src/rust/custom_elements/modal.rs b/rust/perspective-viewer/src/rust/custom_elements/modal.rs index 440185df4b..0ab7e798c5 100644 --- a/rust/perspective-viewer/src/rust/custom_elements/modal.rs +++ b/rust/perspective-viewer/src/rust/custom_elements/modal.rs @@ -56,81 +56,6 @@ where on_blur: Option>, } -/// Anchor point enum, `ModalCornerTargetCorner` -#[derive(Clone, Copy, Debug, Default)] -enum ModalAnchor { - BottomRightTopLeft, - BottomRightBottomLeft, - BottomRightTopRight, - BottomLeftTopLeft, - TopRightTopLeft, - TopRightBottomRight, - - #[default] - TopLeftBottomLeft, -} - -impl ModalAnchor { - const fn is_rev_vert(&self) -> bool { - matches!( - self, - Self::BottomLeftTopLeft - | Self::BottomRightBottomLeft - | Self::BottomRightTopLeft - | Self::BottomRightTopRight - ) - } -} - -/// Given the bounds of the target element as previous computed, as well as the -/// browser's viewport and the bounds of the already-connected -/// `` element itself, determine a new (top, left) -/// coordinates that keeps the element on-screen. -fn calc_relative_position( - elem: &HtmlElement, - _top: f64, - left: f64, - height: f64, - width: f64, -) -> ModalAnchor { - let window = global::window(); - let rect = elem.get_bounding_client_rect(); - let inner_width = window.inner_width().unwrap().as_f64().unwrap(); - let inner_height = window.inner_height().unwrap().as_f64().unwrap(); - let rect_top = rect.top(); - let rect_height = rect.height(); - let rect_width = rect.width(); - let rect_left = rect.left(); - - let elem_over_y = inner_height < rect_top + rect_height; - let elem_over_x = inner_width < rect_left + rect_width; - let target_over_x = inner_width < rect_left + width; - let target_over_y = inner_height < rect_top + height; - - // modal/target - match (elem_over_y, elem_over_x, target_over_x, target_over_y) { - (true, _, true, true) => ModalAnchor::BottomRightTopLeft, - (true, _, true, false) => ModalAnchor::BottomRightBottomLeft, - (true, true, false, _) => { - if left + width - rect_width > 0.0 { - ModalAnchor::BottomRightTopRight - } else { - ModalAnchor::BottomLeftTopLeft - } - }, - (true, false, false, _) => ModalAnchor::BottomLeftTopLeft, - (false, true, true, _) => ModalAnchor::TopRightTopLeft, - (false, true, false, _) => { - if left + width - rect_width > 0.0 { - ModalAnchor::TopRightBottomRight - } else { - ModalAnchor::TopLeftBottomLeft - } - }, - _ => ModalAnchor::TopLeftBottomLeft, - } -} - impl ModalElement where T: Component, @@ -172,31 +97,10 @@ where } } - fn calc_anchor_position(&self, target: &HtmlElement) -> (f64, f64) { - let elem = target.unchecked_ref::(); - let rect = elem.get_bounding_client_rect(); - let height = rect.height(); - let width = rect.width(); - let top = rect.top(); - let left = rect.left(); - - let self_rect = self.custom_element.get_bounding_client_rect(); - let rect_height = self_rect.height(); - let rect_width = self_rect.width(); - - match self.anchor.get() { - ModalAnchor::BottomRightTopLeft => (top - rect_height, left - rect_width + 1.0), - ModalAnchor::BottomRightBottomLeft => { - (top - rect_height + height, left - rect_width + 1.0) - }, - ModalAnchor::BottomRightTopRight => { - (top - rect_height + 1.0, left + width - rect_width) - }, - ModalAnchor::BottomLeftTopLeft => (top - rect_height + 1.0, left), - ModalAnchor::TopRightTopLeft => (top, left - rect_width + 1.0), - ModalAnchor::TopRightBottomRight => (top + height - 1.0, left + width - rect_width), - ModalAnchor::TopLeftBottomLeft => ((top + height - 1.0), left), - } + fn calc_anchor_pos(&self, target: &HtmlElement) -> (f64, f64) { + let target_rect = target.get_bounding_client_rect(); + let modal_rect = self.custom_element.get_bounding_client_rect(); + calc_anchor_position(self.anchor.get(), &target_rect, &modal_rect) } async fn open_within_viewport(&self, target: HtmlElement) -> ApiResult<()> { @@ -229,7 +133,7 @@ where width, )); - let (top, left) = self.calc_anchor_position(&target); + let (top, left) = self.calc_anchor_pos(&target); let msg = ModalMsg::SetPos { top, left, @@ -310,7 +214,7 @@ where let target = target.clone(); let anchor = self.anchor.clone(); *self.resize_sub.borrow_mut() = Some(resize.add_listener(move |()| { - let (top, left) = this.calc_anchor_position(&target); + let (top, left) = this.calc_anchor_pos(&target); let msg = ModalMsg::SetPos { top, left, diff --git a/rust/perspective-viewer/src/rust/custom_elements/viewer.rs b/rust/perspective-viewer/src/rust/custom_elements/viewer.rs index 0676602ea4..40ba55ebb3 100644 --- a/rust/perspective-viewer/src/rust/custom_elements/viewer.rs +++ b/rust/perspective-viewer/src/rust/custom_elements/viewer.rs @@ -39,6 +39,17 @@ use crate::tasks::*; use crate::utils::*; use crate::*; +#[derive(serde::Deserialize, Default)] +struct ResizeOptions { + dimensions: Option, +} + +#[derive(serde::Deserialize, Clone, Copy)] +struct ResizeDimensions { + width: f64, + height: f64, +} + /// The `` custom element. /// /// # JavaScript Examples @@ -574,11 +585,26 @@ impl PerspectiveViewerElement { PerspectiveViewerMsg::ToggleSettingsComplete(settings, sender), ); + let task = if let OptionalUpdate::Update(_) = &decoded_update.table { + Some(this.session.reset(ResetOptions { + config: true, + expressions: true, + stats: true, + ..ResetOptions::default() + })) + } else { + None + }; + let result = this .restore_and_render(decoded_update.clone(), { clone!(this, decoded_update.table); async move { if let OptionalUpdate::Update(name) = table { + if let Some(task) = task { + task.await?; + } + this.session.set_table(name).await?; this.session .update_column_defaults(&this.renderer.metadata()); @@ -780,24 +806,25 @@ impl PerspectiveViewerElement { /// /// # Arguments /// - /// - `force` - If [`Self::resize`] is called with `false` or without an - /// argument, and _auto-size_ mode is enabled via [`Self::setAutoSize`], - /// [`Self::resize`] will log a warning and auto-disable auto-size mode. + /// - `options` - An optional object with the following fields: + /// - `dimensions` - An optional object `{width, height}` providing + /// explicit size hints (in pixels) for the plugin container. When + /// provided, the plugin element will be temporarily sized to these + /// dimensions during resize, then reset. /// /// # JavaScript Examples /// /// ```javascript - /// await viewer.resize(true) + /// await viewer.resize() + /// await viewer.resize({dimensions: {width: 800, height: 600}}) /// ``` #[wasm_bindgen] - pub fn resize(&self, force: Option) -> ApiFuture<()> { - if !force.unwrap_or_default() && self.resize_handle.borrow().is_some() { - let msg: JsValue = "`resize(false)` called, disabling auto-size. It can be \ - re-enabled with `setAutoSize(true)`." - .into(); - web_sys::console::warn_1(&msg); - *self.resize_handle.borrow_mut() = None; - } + pub fn resize(&self, options: Option) -> ApiFuture<()> { + let opts: ResizeOptions = options + .map(|v| v.into_serde_ext()) + .transpose() + .unwrap_or_default() + .unwrap_or_default(); let state = self.clone_state(); ApiFuture::new_throttled(async move { @@ -805,6 +832,11 @@ impl PerspectiveViewerElement { state .update_and_render(ViewConfigUpdate::default())? .await?; + } else if let Some(dims) = opts.dimensions { + state + .renderer() + .resize_with_dimensions(dims.width, dims.height) + .await?; } else { state.renderer().resize().await?; } diff --git a/rust/perspective-viewer/src/rust/custom_events.rs b/rust/perspective-viewer/src/rust/custom_events.rs index 1bd41ca48e..9392470af3 100644 --- a/rust/perspective-viewer/src/rust/custom_events.rs +++ b/rust/perspective-viewer/src/rust/custom_events.rs @@ -188,6 +188,10 @@ impl CustomEvents { { self.0.0.dispatch_event(name, event) } + + pub fn dispatch_raw_event(&self, event: &web_sys::CustomEvent) -> ApiResult { + self.0.0.elem.dispatch_event(event).map_err(|e| e.into()) + } } impl CustomEventsDataRc { diff --git a/rust/perspective-viewer/src/rust/lib.rs b/rust/perspective-viewer/src/rust/lib.rs index 4bdb2b2aba..a8d07d74cf 100644 --- a/rust/perspective-viewer/src/rust/lib.rs +++ b/rust/perspective-viewer/src/rust/lib.rs @@ -106,8 +106,8 @@ pub fn js_init() { pub fn bootstrap_web_components(psp: &JsValue) { define_web_component::(psp); define_web_component::(psp); - define_web_component::(psp); define_web_component::(psp); + define_web_component::(psp); } /// Defining the web components needs an extern struct to reference the diff --git a/rust/perspective-viewer/src/rust/presentation.rs b/rust/perspective-viewer/src/rust/presentation.rs index 1e09503c89..0eec91bb82 100644 --- a/rust/perspective-viewer/src/rust/presentation.rs +++ b/rust/perspective-viewer/src/rust/presentation.rs @@ -56,7 +56,7 @@ pub struct PresentationHandle { pub on_is_workspace_changed: RefCell>>, pub settings_before_open_changed: PubSub, pub column_settings_open_changed: PubSub<(bool, Option)>, - pub theme_config_updated: PubSub<(Rc>, Option)>, + pub theme_config_updated: PubSub<(PtrEqRc>, Option)>, pub on_eject: PubSub<()>, } @@ -184,7 +184,7 @@ impl Presentation { /// Get the available theme names from the browser environment by parsing /// readable stylesheets. This method is memoized - the state can be /// flushed by calling `reset()`. - pub async fn get_available_themes(&self) -> ApiResult>> { + pub async fn get_available_themes(&self) -> ApiResult>> { let mut data = self.0.theme_data.lock().await; if data.themes.is_none() { await_dom_loaded().await?; @@ -213,7 +213,9 @@ impl Presentation { changed } - pub async fn get_selected_theme_config(&self) -> ApiResult<(Rc>, Option)> { + pub async fn get_selected_theme_config( + &self, + ) -> ApiResult<(PtrEqRc>, Option)> { let themes = self.get_available_themes().await?; let name = self.0.viewer_elem.get_attribute("theme"); let index = name @@ -325,7 +327,7 @@ impl Presentation { /// /// `available_themes` must be provided by the caller because theme /// detection is async and therefore not available synchronously here. - pub fn to_props(&self, available_themes: Rc>) -> PresentationProps { + pub fn to_props(&self, available_themes: PtrEqRc>) -> PresentationProps { let theme_attr = self.0.viewer_elem.get_attribute("theme"); let selected_theme = theme_attr.as_deref().and_then(|name| { available_themes diff --git a/rust/perspective-viewer/src/rust/presentation/props.rs b/rust/perspective-viewer/src/rust/presentation/props.rs index 8c0d9b7ed6..51ee980ebd 100644 --- a/rust/perspective-viewer/src/rust/presentation/props.rs +++ b/rust/perspective-viewer/src/rust/presentation/props.rs @@ -10,9 +10,8 @@ // ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ -use std::rc::Rc; - use crate::presentation::OpenColumnSettings; +use crate::utils::PtrEqRc; /// Value-semantic snapshot of the presentation/UI state used by the root /// component to drive `is_settings_open`, `selected_theme`, and @@ -27,7 +26,7 @@ pub struct PresentationProps { pub is_settings_open: bool, /// Detected theme names, in discovery order. - pub available_themes: Rc>, + pub available_themes: PtrEqRc>, /// The currently selected theme name, if any theme is active. pub selected_theme: Option, diff --git a/rust/perspective-viewer/src/rust/renderer.rs b/rust/perspective-viewer/src/rust/renderer.rs index 905d546b4e..66393a081f 100644 --- a/rust/perspective-viewer/src/rust/renderer.rs +++ b/rust/perspective-viewer/src/rust/renderer.rs @@ -328,6 +328,31 @@ impl Renderer { .await } + pub async fn resize_with_dimensions(&self, width: f64, height: f64) -> ApiResult<()> { + let draw_mutex = self.draw_lock(); + let timer = self.render_timer(); + draw_mutex + .debounce(async { + set_timeout(timer.get_throttle()).await?; + let plugin = self.get_active_plugin()?; + let main_panel: &web_sys::HtmlElement = plugin.unchecked_ref(); + let rect = main_panel.get_bounding_client_rect(); + if (height - rect.height()).abs() > 0.5 || (width - rect.width()).abs() > 0.5 { + let new_width = format!("{}px", width); + let new_height = format!("{}px", height); + main_panel.style().set_property("width", &new_width)?; + main_panel.style().set_property("height", &new_height)?; + let result = plugin.resize().await; + main_panel.style().set_property("width", "")?; + main_panel.style().set_property("height", "")?; + result?; + } + + Ok(()) + }) + .await + } + /// This will take a future which _should_ create a new view and then will /// draw it. As the `session` closure is asynchronous, it can be cancelled /// by returning `None`. @@ -521,7 +546,7 @@ impl Renderer { plugin_name: None, requirements: ViewConfigRequirements::default(), render_limits, - available_plugins: Rc::new(vec![]), + available_plugins: PtrEqRc::new(vec![]), } } } diff --git a/rust/perspective-viewer/src/rust/renderer/props.rs b/rust/perspective-viewer/src/rust/renderer/props.rs index 6681765d23..8d042b6f56 100644 --- a/rust/perspective-viewer/src/rust/renderer/props.rs +++ b/rust/perspective-viewer/src/rust/renderer/props.rs @@ -10,10 +10,9 @@ // ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ -use std::rc::Rc; - use crate::js::plugin::ViewConfigRequirements; use crate::renderer::limits::RenderLimits; +use crate::utils::PtrEqRc; /// Value-semantic snapshot of the renderer state read by components. /// @@ -31,5 +30,5 @@ pub struct RendererProps { pub render_limits: Option, /// Names of all registered plugins, in registration order. - pub available_plugins: Rc>, + pub available_plugins: PtrEqRc>, } diff --git a/rust/perspective-viewer/src/rust/session.rs b/rust/perspective-viewer/src/rust/session.rs index 900550808d..2a46556fb1 100644 --- a/rust/perspective-viewer/src/rust/session.rs +++ b/rust/perspective-viewer/src/rust/session.rs @@ -32,7 +32,7 @@ use yew::html::ImplicitClone; use yew::prelude::*; use self::metadata::*; -pub use self::metadata::{MetadataRef, SessionMetadata}; +pub use self::metadata::{MetadataRef, SessionMetadata, SessionMetadataRc}; pub use self::props::SessionProps; pub use self::view_subscription::ViewStats; use self::view_subscription::*; @@ -541,7 +541,7 @@ impl Session { use self::column_defaults_update::*; config_update.set_update_column_defaults( &self.metadata(), - &self.all_columns().into_iter().map(Some).collect::>(), + &self.get_view_config().columns, requirements, ) } @@ -746,12 +746,12 @@ impl Session { pub fn to_props(&self) -> SessionProps { let data = self.borrow(); SessionProps { - config: Rc::new(data.config.clone()), + config: PtrEqRc::new(data.config.clone()), stats: data.stats.clone(), has_table: data.table.is_some(), error: data.error.clone(), title: data.title.clone(), - metadata: Rc::new(data.metadata.clone()), + metadata: PtrEqRc::new(data.metadata.clone()), } } } diff --git a/rust/perspective-viewer/src/rust/session/metadata.rs b/rust/perspective-viewer/src/rust/session/metadata.rs index 7738566fa9..cdd7c1fed0 100644 --- a/rust/perspective-viewer/src/rust/session/metadata.rs +++ b/rust/perspective-viewer/src/rust/session/metadata.rs @@ -17,6 +17,7 @@ use std::ops::{Deref, DerefMut}; use perspective_client::config::*; use perspective_js::apierror; +use crate::utils::PtrEqRc; use crate::*; #[derive(Clone, PartialEq)] @@ -32,6 +33,8 @@ struct SessionViewExpressionMetadata { #[derive(Clone, Default, PartialEq)] pub struct SessionMetadata(Option); +pub type SessionMetadataRc = PtrEqRc; + impl std::fmt::Debug for SessionMetadata { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.write_str("SessionMetadata { .. }") diff --git a/rust/perspective-viewer/src/rust/session/props.rs b/rust/perspective-viewer/src/rust/session/props.rs index c14dc7327c..7389e4b046 100644 --- a/rust/perspective-viewer/src/rust/session/props.rs +++ b/rust/perspective-viewer/src/rust/session/props.rs @@ -10,15 +10,14 @@ // ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ -use std::rc::Rc; - use perspective_client::config::*; use crate::js::plugin::ViewConfigRequirements; use crate::session::column_defaults_update::ViewConfigUpdateExt; use crate::session::drag_drop_update::ViewConfigExt as DragDropExt; +use crate::session::metadata::SessionMetadataRc; use crate::session::replace_expression_update::ViewConfigExt as ReplaceExprExt; -use crate::session::{SessionMetadata, TableErrorState, ViewStats}; +use crate::session::{TableErrorState, ViewStats}; use crate::utils::*; /// Value-semantic snapshot of the session state read by the root component. @@ -29,7 +28,7 @@ use crate::utils::*; #[derive(Clone, Debug, PartialEq, Default)] pub struct SessionProps { /// The current `ViewConfig` driving the active `View`. - pub config: Rc, + pub config: PtrEqRc, /// Row/column statistics for the status bar. pub stats: Option, @@ -48,7 +47,7 @@ pub struct SessionProps { /// `to_props()` call. Components read column types, features, /// expression info, etc. from this snapshot instead of borrowing /// `Session`'s `RefCell` directly. - pub metadata: Rc, + pub metadata: SessionMetadataRc, } impl SessionProps { diff --git a/rust/perspective-viewer/src/rust/utils/mod.rs b/rust/perspective-viewer/src/rust/utils/mod.rs index d906e4cf40..3e06d5c644 100644 --- a/rust/perspective-viewer/src/rust/utils/mod.rs +++ b/rust/perspective-viewer/src/rust/utils/mod.rs @@ -21,7 +21,9 @@ mod custom_element; mod datetime; mod debounce; mod hooks; +mod modal_position; mod number_format; +mod ptr_eq_rc; mod pubsub; mod weak_scope; @@ -33,8 +35,10 @@ pub use custom_element::*; pub use datetime::*; pub use debounce::*; pub use hooks::*; +pub use modal_position::*; pub use number_format::*; pub use perspective_client::clone; +pub use ptr_eq_rc::*; pub use pubsub::*; pub use weak_scope::*; diff --git a/rust/perspective-viewer/src/rust/utils/modal_position.rs b/rust/perspective-viewer/src/rust/utils/modal_position.rs new file mode 100644 index 0000000000..c6615f7813 --- /dev/null +++ b/rust/perspective-viewer/src/rust/utils/modal_position.rs @@ -0,0 +1,110 @@ +// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃ +// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃ +// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃ +// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃ +// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ +// ┃ Copyright (c) 2017, the Perspective Authors. ┃ +// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃ +// ┃ This file is part of the Perspective library, distributed under the terms ┃ +// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ +// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + +use perspective_js::utils::global; +use web_sys::*; + +/// Anchor point enum, `ModalCornerTargetCorner` +#[derive(Clone, Copy, Debug, Default)] +pub enum ModalAnchor { + BottomRightTopLeft, + BottomRightBottomLeft, + BottomRightTopRight, + BottomLeftTopLeft, + TopRightTopLeft, + TopRightBottomRight, + + #[default] + TopLeftBottomLeft, +} + +impl ModalAnchor { + pub const fn is_rev_vert(&self) -> bool { + matches!( + self, + Self::BottomLeftTopLeft + | Self::BottomRightBottomLeft + | Self::BottomRightTopLeft + | Self::BottomRightTopRight + ) + } +} + +/// Given the bounds of the target element as previously computed, as well as +/// the browser's viewport and the bounds of the already-connected modal element +/// itself, determine the best anchor point to keep the element on-screen. +pub fn calc_relative_position( + elem: &HtmlElement, + _top: f64, + left: f64, + height: f64, + width: f64, +) -> ModalAnchor { + let window = global::window(); + let rect = elem.get_bounding_client_rect(); + let inner_width = window.inner_width().unwrap().as_f64().unwrap(); + let inner_height = window.inner_height().unwrap().as_f64().unwrap(); + let rect_top = rect.top(); + let rect_height = rect.height(); + let rect_width = rect.width(); + let rect_left = rect.left(); + + let elem_over_y = inner_height < rect_top + rect_height; + let elem_over_x = inner_width < rect_left + rect_width; + let target_over_x = inner_width < rect_left + width; + let target_over_y = inner_height < rect_top + height; + + // modal/target + match (elem_over_y, elem_over_x, target_over_x, target_over_y) { + (true, _, true, true) => ModalAnchor::BottomRightTopLeft, + (true, _, true, false) => ModalAnchor::BottomRightBottomLeft, + (true, true, false, _) => { + if left + width - rect_width > 0.0 { + ModalAnchor::BottomRightTopRight + } else { + ModalAnchor::BottomLeftTopLeft + } + }, + (true, false, false, _) => ModalAnchor::BottomLeftTopLeft, + (false, true, true, _) => ModalAnchor::TopRightTopLeft, + (false, true, false, _) => { + if left + width - rect_width > 0.0 { + ModalAnchor::TopRightBottomRight + } else { + ModalAnchor::TopLeftBottomLeft + } + }, + _ => ModalAnchor::TopLeftBottomLeft, + } +} + +/// Calculate the (top, left) position for a modal element given an anchor +/// point, target element bounding rect, and the modal element's own bounding +/// rect. +pub fn calc_anchor_position(anchor: ModalAnchor, target: &DomRect, modal: &DomRect) -> (f64, f64) { + let height = target.height(); + let width = target.width(); + let top = target.top(); + let left = target.left(); + let rect_height = modal.height(); + let rect_width = modal.width(); + + match anchor { + ModalAnchor::BottomRightTopLeft => (top - rect_height, left - rect_width + 1.0), + ModalAnchor::BottomRightBottomLeft => (top - rect_height + height, left - rect_width + 1.0), + ModalAnchor::BottomRightTopRight => (top - rect_height + 1.0, left + width - rect_width), + ModalAnchor::BottomLeftTopLeft => (top - rect_height + 1.0, left), + ModalAnchor::TopRightTopLeft => (top, left - rect_width + 1.0), + ModalAnchor::TopRightBottomRight => (top + height - 1.0, left + width - rect_width), + ModalAnchor::TopLeftBottomLeft => (top + height - 1.0, left), + } +} diff --git a/rust/perspective-viewer/src/rust/utils/ptr_eq_rc.rs b/rust/perspective-viewer/src/rust/utils/ptr_eq_rc.rs new file mode 100644 index 0000000000..727bb68199 --- /dev/null +++ b/rust/perspective-viewer/src/rust/utils/ptr_eq_rc.rs @@ -0,0 +1,74 @@ +// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃ +// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃ +// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃ +// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃ +// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ +// ┃ Copyright (c) 2017, the Perspective Authors. ┃ +// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃ +// ┃ This file is part of the Perspective library, distributed under the terms ┃ +// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ +// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + +use std::ops::Deref; +use std::rc::Rc; + +use yew::html::{ImplicitClone, IntoPropValue}; + +/// A thin wrapper around `Rc` whose `PartialEq` uses pointer identity +/// (`Rc::ptr_eq`) instead of deep structural comparison. This makes it +/// suitable for Yew `Properties` fields that hold large, cheaply-shared +/// snapshots (e.g. `ViewConfig`, `SessionMetadata`, `Vec`). +pub struct PtrEqRc(Rc); + +impl PtrEqRc { + pub fn new(val: T) -> Self { + Self(Rc::new(val)) + } +} + +impl Clone for PtrEqRc { + fn clone(&self) -> Self { + Self(Rc::clone(&self.0)) + } +} + +impl PartialEq for PtrEqRc { + fn eq(&self, other: &Self) -> bool { + Rc::ptr_eq(&self.0, &other.0) + } +} + +impl Deref for PtrEqRc { + type Target = T; + + fn deref(&self) -> &T { + &self.0 + } +} + +impl From for PtrEqRc { + fn from(rc: T) -> Self { + Self(Rc::new(rc)) + } +} + +impl Default for PtrEqRc { + fn default() -> Self { + Self(Rc::default()) + } +} + +impl std::fmt::Debug for PtrEqRc { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + self.0.fmt(f) + } +} + +impl ImplicitClone for PtrEqRc {} + +impl IntoPropValue> for Rc { + fn into_prop_value(self) -> PtrEqRc { + PtrEqRc(self) + } +} diff --git a/rust/perspective-viewer/src/rust/utils/pubsub.rs b/rust/perspective-viewer/src/rust/utils/pubsub.rs index 38f8235297..e68a2ecb56 100644 --- a/rust/perspective-viewer/src/rust/utils/pubsub.rs +++ b/rust/perspective-viewer/src/rust/utils/pubsub.rs @@ -84,7 +84,9 @@ impl PubSubInternal { /// publishers, without leaking callbacks as listeners are dropped. /// /// Unlike `mpsc` etc., `PubSub` has no internal queue and is completely -/// synchronous. +/// synchronous. Explicitly does not implement clone, as this is intended as +/// RAII, even though the internal data structures are `Clone` because they +/// need to be sent to listeners. #[derive(Derivative)] #[derivative(Default(bound = ""))] pub struct PubSub(Rc>); diff --git a/rust/perspective-viewer/test/js/viewer_config/cancellable.spec.ts b/rust/perspective-viewer/test/js/viewer_config/cancellable.spec.ts index 1e6dc18d82..be2f24ba15 100644 --- a/rust/perspective-viewer/test/js/viewer_config/cancellable.spec.ts +++ b/rust/perspective-viewer/test/js/viewer_config/cancellable.spec.ts @@ -42,7 +42,7 @@ test.describe("Cancellable Views", () => { const view = await viewer.getView(); await view.delete(); - await viewer.resize(true); + await viewer.resize({ force: true }); }); const contents = await get_contents(page); diff --git a/tools/test/results.tar.gz b/tools/test/results.tar.gz index bb24cb7a98d7df44d9a10d7986a173b018a96e9a..7ae0d34b0d214e0e6d64ddf620e3036ce2550923 100644 GIT binary patch literal 172951 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

QIAD=?*3iKp7|(qCLTbf~Z4(;oRz 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

j8+`9nJX~m#Ru#asy|9t> z(L`cVe%?FTl22|w=GjpwIjJOSJGB@*$_ruA{E~>P?E4HRhdlHy2LE~KeIWh Es| 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 literal 171912 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%0DQ1eE@Y@Xr^EMZ#pMPk#{B2gS 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%0AXg_+chD5nb<@t8~GUEMIq0NZ3$+p$-fQa7Yt-C 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 SPN?7&M1eukAM2R{)_(z~w5m@4