@perspective-dev/viewer 4.0.1 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cdn/perspective-viewer.js +2 -2
- package/dist/cdn/perspective-viewer.js.map +4 -4
- package/dist/css/dracula.css +1 -1
- package/dist/css/gruvbox-dark.css +1 -1
- package/dist/css/gruvbox.css +1 -1
- package/dist/css/icons.css +1 -1
- package/dist/css/monokai.css +1 -1
- package/dist/css/pro-dark.css +1 -1
- package/dist/css/pro.css +1 -1
- package/dist/css/solarized-dark.css +1 -1
- package/dist/css/solarized.css +1 -1
- package/dist/css/themes.css +1 -1
- package/dist/css/vaporwave.css +1 -1
- package/dist/esm/extensions.d.ts +23 -2
- package/dist/esm/perspective-viewer.d.ts +2 -7
- package/dist/esm/perspective-viewer.inline.js +2 -2
- package/dist/esm/perspective-viewer.inline.js.map +4 -4
- package/dist/esm/perspective-viewer.js +2 -2
- package/dist/esm/perspective-viewer.js.map +4 -4
- package/dist/esm/plugin.d.ts +1 -1
- package/dist/esm/ts-rs/ViewerConfigUpdate.d.ts +1 -0
- package/dist/wasm/perspective-viewer.d.ts +218 -46
- package/dist/wasm/perspective-viewer.js +1250 -761
- package/dist/wasm/perspective-viewer.wasm +0 -0
- package/dist/wasm/perspective-viewer.wasm.d.ts +38 -19
- package/package.json +1 -1
- package/src/less/containers/scroll-panel.less +0 -1
- package/src/less/plugin-selector.less +15 -5
- package/src/less/status-bar.less +75 -27
- package/src/less/viewer.less +140 -58
- package/src/rust/components/column_dropdown.rs +21 -21
- package/src/rust/components/column_selector/active_column.rs +131 -120
- package/src/rust/components/column_selector/add_expression_button.rs +5 -0
- package/src/rust/components/column_selector/aggregate_selector.rs +8 -4
- package/src/rust/components/column_selector/config_selector.rs +170 -161
- package/src/rust/components/column_selector/empty_column.rs +16 -11
- package/src/rust/components/column_selector/{expression_toolbar.rs → expr_edit_button.rs} +7 -0
- package/src/rust/components/column_selector/filter_column.rs +195 -194
- package/src/rust/components/column_selector/inactive_column.rs +82 -67
- package/src/rust/components/column_selector/pivot_column.rs +16 -11
- package/src/rust/components/column_selector/sort_column.rs +9 -7
- package/src/rust/components/column_selector.rs +42 -37
- package/src/rust/components/column_settings_sidebar/save_settings.rs +3 -1
- package/src/rust/components/column_settings_sidebar/style_tab/agg_depth_selector.rs +58 -0
- package/src/rust/components/column_settings_sidebar/style_tab/symbol/row_selector.rs +6 -6
- package/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_pairs.rs +2 -94
- package/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_pairs_item.rs +111 -0
- package/src/rust/components/column_settings_sidebar/style_tab/symbol.rs +3 -3
- package/src/rust/components/column_settings_sidebar/style_tab.rs +23 -83
- package/src/rust/components/{column_settings_sidebar/sidebar.rs → column_settings_sidebar.rs} +198 -171
- package/src/rust/components/containers/dragdrop_list.rs +20 -20
- package/src/rust/components/containers/dropdown_menu.rs +4 -6
- package/src/rust/components/containers/mod.rs +1 -4
- package/src/rust/components/containers/scroll_panel.rs +80 -80
- package/src/rust/components/containers/scroll_panel_item.rs +36 -36
- package/src/rust/components/containers/select.rs +46 -44
- package/src/rust/components/containers/sidebar.rs +3 -19
- package/src/rust/components/{column_settings_sidebar/style_tab/symbol/symbol_config.rs → containers/sidebar_close_button.rs} +15 -9
- package/src/rust/components/containers/split_panel.rs +212 -200
- package/src/rust/components/containers/tab_list.rs +11 -11
- package/src/rust/components/copy_dropdown.rs +22 -25
- package/src/rust/components/datetime_column_style/custom.rs +19 -19
- package/src/rust/components/datetime_column_style/simple.rs +13 -14
- package/src/rust/components/datetime_column_style.rs +75 -76
- package/src/rust/components/editable_header.rs +18 -14
- package/src/rust/components/empty_row.rs +5 -5
- package/src/rust/components/export_dropdown.rs +42 -42
- package/src/rust/components/expression_editor.rs +25 -19
- package/src/rust/components/filter_dropdown.rs +22 -22
- package/src/rust/components/font_loader.rs +11 -9
- package/src/rust/components/form/code_editor.rs +106 -105
- package/src/rust/components/form/color_range_selector.rs +14 -12
- package/src/rust/components/form/color_selector.rs +3 -1
- package/src/rust/components/form/debug.rs +95 -94
- package/src/rust/components/form/highlight.rs +5 -3
- package/src/rust/components/form/mod.rs +3 -2
- package/src/rust/components/form/optional_field.rs +2 -2
- package/src/rust/components/form/{select_field.rs → select_enum_field.rs} +1 -46
- package/src/rust/components/form/select_value_field.rs +64 -0
- package/src/rust/components/function_dropdown.rs +21 -21
- package/src/rust/components/main_panel.rs +219 -0
- package/src/rust/components/mod.rs +6 -6
- package/src/rust/components/modal.rs +42 -42
- package/src/rust/components/number_column_style.rs +34 -88
- package/src/rust/components/plugin_selector.rs +22 -25
- package/src/rust/components/render_warning.rs +9 -6
- package/src/rust/components/settings_panel.rs +82 -0
- package/src/rust/components/status_bar.rs +250 -146
- package/src/rust/components/status_bar_counter.rs +26 -119
- package/src/rust/components/status_indicator.rs +95 -79
- package/src/rust/components/string_column_style.rs +45 -45
- package/src/rust/components/style/style_provider.rs +1 -15
- package/src/rust/components/style_controls/number_string_format/digits_section.rs +1 -1
- package/src/rust/components/style_controls/number_string_format/misc_section.rs +1 -1
- package/src/rust/components/style_controls/number_string_format/style_section.rs +1 -1
- package/src/rust/components/style_controls/number_string_format.rs +45 -46
- package/src/rust/components/type_icon.rs +14 -11
- package/src/rust/components/viewer.rs +241 -384
- package/src/rust/config/columns_config.rs +2 -2
- package/src/rust/config/datetime_column_style.rs +1 -6
- package/src/rust/config/mod.rs +1 -0
- package/src/rust/config/number_column_style.rs +0 -6
- package/src/rust/config/number_string_format.rs +27 -4
- package/src/rust/config/viewer_config.rs +27 -167
- package/src/rust/custom_elements/copy_dropdown.rs +14 -6
- package/src/rust/custom_elements/export_dropdown.rs +15 -7
- package/src/rust/custom_elements/filter_dropdown.rs +4 -4
- package/src/rust/custom_elements/mod.rs +3 -0
- package/src/rust/custom_elements/viewer.rs +353 -161
- package/src/rust/custom_events.rs +55 -32
- package/src/rust/dragdrop.rs +4 -24
- package/src/rust/exprtk/cursor.rs +10 -1
- package/src/rust/exprtk/mod.rs +2 -0
- package/src/rust/exprtk/tokenize.rs +20 -3
- package/src/rust/js/clipboard.rs +2 -2
- package/src/rust/js/mimetype.rs +2 -7
- package/src/rust/js/mod.rs +0 -1
- package/src/rust/js/plugin.rs +7 -0
- package/src/rust/lib.rs +18 -5
- package/src/rust/model/column_locator.rs +82 -0
- package/src/rust/model/columns_iter_set.rs +1 -0
- package/src/rust/model/copy_export.rs +50 -14
- package/src/rust/model/edit_expression.rs +2 -5
- package/src/rust/model/eject.rs +41 -0
- package/src/rust/model/get_viewer_config.rs +4 -28
- package/src/rust/model/intersection_observer.rs +20 -8
- package/src/rust/model/mod.rs +11 -4
- package/src/rust/model/plugin_column_styles.rs +0 -31
- package/src/rust/model/reset_all.rs +38 -0
- package/src/rust/model/resize_observer.rs +34 -7
- package/src/rust/model/restore_and_render.rs +12 -7
- package/src/rust/{utils/scope.rs → model/send_plugin_config.rs} +32 -35
- package/src/rust/model/structural.rs +194 -23
- package/src/rust/model/update_and_render.rs +14 -4
- package/src/rust/{model/create_col.rs → presentation/column_locator.rs} +73 -42
- package/src/rust/{utils/wasm_abi.rs → presentation/sheets.rs} +54 -40
- package/src/rust/presentation.rs +60 -119
- package/src/rust/renderer/activate.rs +20 -5
- package/src/rust/renderer/limits.rs +0 -149
- package/src/rust/renderer/render_timer.rs +1 -1
- package/src/rust/renderer.rs +34 -18
- package/src/rust/root.rs +50 -0
- package/src/rust/session/column_defaults_update.rs +4 -4
- package/src/rust/session/drag_drop_update.rs +1 -1
- package/src/rust/session/metadata.rs +3 -17
- package/src/rust/session/replace_expression_update.rs +1 -2
- package/src/rust/session.rs +162 -82
- package/src/rust/utils/browser/blob.rs +16 -2
- package/src/rust/utils/browser/download.rs +1 -0
- package/src/rust/{components/column_settings_sidebar/mod.rs → utils/browser/dragdrop.rs} +14 -5
- package/src/rust/utils/browser/mod.rs +8 -4
- package/src/rust/utils/browser/selection.rs +5 -0
- package/src/rust/utils/custom_element.rs +28 -13
- package/src/rust/utils/datetime.rs +5 -0
- package/src/rust/utils/debounce.rs +7 -1
- package/src/rust/utils/hooks/use_async_callback.rs +7 -17
- package/src/rust/utils/mod.rs +28 -40
- package/src/rust/utils/number_format.rs +6 -5
- package/src/rust/utils/pubsub.rs +15 -10
- package/src/rust/utils/weak_scope.rs +11 -1
- package/src/svg/bookmark-icon.svg +4 -0
- package/src/svg/drag-handle copy.svg +10 -0
- package/src/svg/drawer-tab-hover.svg +5 -7
- package/src/svg/drawer-tab-invert-hover.svg +4 -8
- package/src/svg/drawer-tab-invert.svg +4 -7
- package/src/svg/drawer-tab.svg +4 -6
- package/src/svg/status_ok.svg +24 -24
- package/src/ts/extensions.ts +51 -3
- package/src/ts/perspective-viewer.ts +2 -14
- package/src/ts/plugin.ts +1 -1
- package/src/ts/ts-rs/ViewerConfigUpdate.ts +1 -1
- package/src/rust/components/column_settings_sidebar/style_tab/column_style.rs +0 -177
- package/src/rust/components/containers/tests/mod.rs +0 -11
- package/src/rust/components/containers/tests/split_panel.rs +0 -91
- package/src/rust/js/testing.rs +0 -149
- package/src/rust/utils/tee.rs +0 -88
- /package/dist/wasm/snippets/{perspective-viewer-9a89352df1552d2b → perspective-viewer-0d326a25c1022412}/inline0.js +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-9a89352df1552d2b → perspective-viewer-0d326a25c1022412}/inline1.js +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-9a89352df1552d2b → perspective-viewer-0d326a25c1022412}/inline2.js +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-9a89352df1552d2b → perspective-viewer-0d326a25c1022412}/inline3.js +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-9a89352df1552d2b → perspective-viewer-0d326a25c1022412}/inline4.js +0 -0
- /package/src/rust/components/{style_controls.rs → style_controls/mod.rs} +0 -0
- /package/src/rust/{components/containers → config}/kvpair.rs +0 -0
|
@@ -18,10 +18,10 @@ use super::form::number_field::NumberFieldProps;
|
|
|
18
18
|
use super::modal::*;
|
|
19
19
|
use super::style::LocalStyle;
|
|
20
20
|
use crate::components::form::number_field::NumberField;
|
|
21
|
-
use crate::components::form::
|
|
21
|
+
use crate::components::form::select_enum_field::SelectEnumField;
|
|
22
22
|
use crate::config::*;
|
|
23
23
|
use crate::session::Session;
|
|
24
|
-
use crate::utils
|
|
24
|
+
use crate::utils::*;
|
|
25
25
|
use crate::*;
|
|
26
26
|
|
|
27
27
|
#[derive(PartialEq, Eq, Copy, Clone, Debug)]
|
|
@@ -32,16 +32,6 @@ pub enum Side {
|
|
|
32
32
|
|
|
33
33
|
use Side::*;
|
|
34
34
|
|
|
35
|
-
#[derive(Debug)]
|
|
36
|
-
pub enum NumberColumnStyleMsg {
|
|
37
|
-
PosColorChanged(Side, String),
|
|
38
|
-
NegColorChanged(Side, String),
|
|
39
|
-
NumberForeModeChanged(NumberForegroundMode),
|
|
40
|
-
NumberBackModeChanged(NumberBackgroundMode),
|
|
41
|
-
GradientChanged(Side, Option<f64>),
|
|
42
|
-
DefaultGradientChanged(f64),
|
|
43
|
-
}
|
|
44
|
-
|
|
45
35
|
/// A `ColumnStyle` component is mounted to the window anchored at the screen
|
|
46
36
|
/// position of `elem`.
|
|
47
37
|
///
|
|
@@ -61,11 +51,11 @@ pub struct NumberColumnStyleProps {
|
|
|
61
51
|
#[prop_or_default]
|
|
62
52
|
pub weak_link: WeakScope<NumberColumnStyle>,
|
|
63
53
|
|
|
64
|
-
#[prop_or_default]
|
|
65
|
-
pub session: Option<Session>,
|
|
66
|
-
|
|
67
54
|
#[prop_or_default]
|
|
68
55
|
pub column_name: Option<String>,
|
|
56
|
+
|
|
57
|
+
// State
|
|
58
|
+
pub session: Session,
|
|
69
59
|
}
|
|
70
60
|
|
|
71
61
|
impl ModalLink<NumberColumnStyle> for NumberColumnStyleProps {
|
|
@@ -80,25 +70,35 @@ impl PartialEq for NumberColumnStyleProps {
|
|
|
80
70
|
}
|
|
81
71
|
}
|
|
82
72
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
);
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}
|
|
73
|
+
fn set_default_gradient(session: &Session, ctx: &Context<NumberColumnStyle>) {
|
|
74
|
+
if let Some(column_name) = ctx.props().column_name.clone() {
|
|
75
|
+
let session = session.clone();
|
|
76
|
+
ctx.link().send_future(async move {
|
|
77
|
+
let view = session.get_view().unwrap();
|
|
78
|
+
let min_max = view.get_min_max(column_name).await.unwrap();
|
|
79
|
+
let abs_max = min_max
|
|
80
|
+
.0
|
|
81
|
+
.parse::<f64>()
|
|
82
|
+
.unwrap_or_default()
|
|
83
|
+
.abs()
|
|
84
|
+
.max(min_max.1.parse::<f64>().unwrap_or_default().abs());
|
|
85
|
+
|
|
86
|
+
let gradient = (abs_max * 100.).round() / 100.;
|
|
87
|
+
NumberColumnStyleMsg::DefaultGradientChanged(gradient)
|
|
88
|
+
});
|
|
99
89
|
}
|
|
100
90
|
}
|
|
101
91
|
|
|
92
|
+
#[derive(Debug)]
|
|
93
|
+
pub enum NumberColumnStyleMsg {
|
|
94
|
+
PosColorChanged(Side, String),
|
|
95
|
+
NegColorChanged(Side, String),
|
|
96
|
+
NumberForeModeChanged(NumberForegroundMode),
|
|
97
|
+
NumberBackModeChanged(NumberBackgroundMode),
|
|
98
|
+
GradientChanged(Side, Option<f64>),
|
|
99
|
+
DefaultGradientChanged(f64),
|
|
100
|
+
}
|
|
101
|
+
|
|
102
102
|
/// A column style form control for `number` columns.
|
|
103
103
|
pub struct NumberColumnStyle {
|
|
104
104
|
config: NumberColumnStyleConfig,
|
|
@@ -119,7 +119,7 @@ impl Component for NumberColumnStyle {
|
|
|
119
119
|
|
|
120
120
|
fn create(ctx: &Context<Self>) -> Self {
|
|
121
121
|
ctx.set_modal_link();
|
|
122
|
-
ctx.props().
|
|
122
|
+
set_default_gradient(&ctx.props().session, ctx);
|
|
123
123
|
Self::reset(
|
|
124
124
|
&ctx.props().config.clone().unwrap_or_default(),
|
|
125
125
|
&ctx.props().default_config.clone(),
|
|
@@ -131,68 +131,14 @@ impl Component for NumberColumnStyle {
|
|
|
131
131
|
&ctx.props().config.clone().unwrap_or_default(),
|
|
132
132
|
&ctx.props().default_config.clone(),
|
|
133
133
|
);
|
|
134
|
-
|
|
134
|
+
|
|
135
|
+
set_default_gradient(&ctx.props().session, ctx);
|
|
135
136
|
std::mem::swap(self, &mut new);
|
|
136
137
|
true
|
|
137
138
|
}
|
|
138
139
|
|
|
139
140
|
fn update(&mut self, ctx: &Context<Self>, msg: Self::Message) -> bool {
|
|
140
141
|
match msg {
|
|
141
|
-
// NumberColumnStyleMsg::Reset(config, default_config) => {
|
|
142
|
-
// let mut new = Self::reset(&config, &default_config);
|
|
143
|
-
// std::mem::swap(self, &mut new);
|
|
144
|
-
// true
|
|
145
|
-
// },
|
|
146
|
-
// NumberColumnStyleMsg::ForeEnabledChanged(val) => {
|
|
147
|
-
// if val {
|
|
148
|
-
// let color_mode = match self.fg_mode {
|
|
149
|
-
// NumberForegroundMode::Disabled => NumberForegroundMode::default(),
|
|
150
|
-
// x => x,
|
|
151
|
-
// };
|
|
152
|
-
|
|
153
|
-
// self.config.number_fg_mode = color_mode;
|
|
154
|
-
// self.config.pos_fg_color = Some(self.pos_fg_color.to_owned());
|
|
155
|
-
// self.config.neg_fg_color = Some(self.neg_fg_color.to_owned());
|
|
156
|
-
// if self.fg_mode.needs_gradient() {
|
|
157
|
-
// self.config.fg_gradient = Some(self.fg_gradient.unwrap());
|
|
158
|
-
// } else {
|
|
159
|
-
// self.config.fg_gradient = None;
|
|
160
|
-
// }
|
|
161
|
-
// } else {
|
|
162
|
-
// self.config.number_fg_mode = NumberForegroundMode::Disabled;
|
|
163
|
-
// self.config.pos_fg_color = None;
|
|
164
|
-
// self.config.neg_fg_color = None;
|
|
165
|
-
// self.config.fg_gradient = None;
|
|
166
|
-
// }
|
|
167
|
-
|
|
168
|
-
// self.dispatch_config(ctx);
|
|
169
|
-
// true
|
|
170
|
-
// },
|
|
171
|
-
// NumberColumnStyleMsg::BackEnabledChanged(val) => {
|
|
172
|
-
// if val {
|
|
173
|
-
// let color_mode = match self.bg_mode {
|
|
174
|
-
// NumberBackgroundMode::Disabled => NumberBackgroundMode::Color,
|
|
175
|
-
// x => x,
|
|
176
|
-
// };
|
|
177
|
-
|
|
178
|
-
// self.config.number_bg_mode = color_mode;
|
|
179
|
-
// self.config.pos_bg_color = Some(self.pos_bg_color.to_owned());
|
|
180
|
-
// self.config.neg_bg_color = Some(self.neg_bg_color.to_owned());
|
|
181
|
-
// if self.bg_mode.needs_gradient() {
|
|
182
|
-
// self.config.bg_gradient = Some(self.bg_gradient.unwrap());
|
|
183
|
-
// } else {
|
|
184
|
-
// self.config.bg_gradient = None;
|
|
185
|
-
// }
|
|
186
|
-
// } else {
|
|
187
|
-
// self.config.number_bg_mode = NumberBackgroundMode::Disabled;
|
|
188
|
-
// self.config.pos_bg_color = None;
|
|
189
|
-
// self.config.neg_bg_color = None;
|
|
190
|
-
// self.config.bg_gradient = None;
|
|
191
|
-
// }
|
|
192
|
-
|
|
193
|
-
// self.dispatch_config(ctx);
|
|
194
|
-
// true
|
|
195
|
-
// },
|
|
196
142
|
NumberColumnStyleMsg::PosColorChanged(side, val) => {
|
|
197
143
|
if side == Fg {
|
|
198
144
|
self.pos_fg_color = val;
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
|
12
12
|
|
|
13
13
|
use perspective_client::config::ViewConfigUpdate;
|
|
14
|
+
use perspective_js::utils::ApiFuture;
|
|
14
15
|
use yew::prelude::*;
|
|
15
16
|
|
|
16
17
|
use super::containers::select::*;
|
|
@@ -22,21 +23,15 @@ use crate::presentation::Presentation;
|
|
|
22
23
|
use crate::renderer::*;
|
|
23
24
|
use crate::session::*;
|
|
24
25
|
use crate::utils::*;
|
|
25
|
-
use crate
|
|
26
|
+
use crate::{css, *};
|
|
26
27
|
|
|
27
|
-
#[derive(Properties, PartialEq)]
|
|
28
|
+
#[derive(Properties, PartialEq, PerspectiveProperties!)]
|
|
28
29
|
pub struct PluginSelectorProps {
|
|
30
|
+
pub presentation: Presentation,
|
|
29
31
|
pub renderer: Renderer,
|
|
30
32
|
pub session: Session,
|
|
31
|
-
pub presentation: Presentation,
|
|
32
|
-
|
|
33
|
-
#[cfg(test)]
|
|
34
|
-
#[prop_or_default]
|
|
35
|
-
pub weak_link: WeakScope<PluginSelector>,
|
|
36
33
|
}
|
|
37
34
|
|
|
38
|
-
derive_model!(Renderer, Session, Presentation for PluginSelectorProps);
|
|
39
|
-
|
|
40
35
|
#[derive(Debug)]
|
|
41
36
|
pub enum PluginSelectorMsg {
|
|
42
37
|
ComponentSelectPlugin(String),
|
|
@@ -57,8 +52,9 @@ impl Component for PluginSelector {
|
|
|
57
52
|
type Properties = PluginSelectorProps;
|
|
58
53
|
|
|
59
54
|
fn create(ctx: &Context<Self>) -> Self {
|
|
60
|
-
let
|
|
61
|
-
let
|
|
55
|
+
let PluginSelectorProps { renderer, .. } = ctx.props();
|
|
56
|
+
let options = generate_plugin_optgroups(renderer);
|
|
57
|
+
let _plugin_sub = renderer.plugin_changed.add_listener({
|
|
62
58
|
let link = ctx.link().clone();
|
|
63
59
|
move |plugin: JsPerspectiveViewerPlugin| {
|
|
64
60
|
let name = plugin.name();
|
|
@@ -74,28 +70,30 @@ impl Component for PluginSelector {
|
|
|
74
70
|
}
|
|
75
71
|
|
|
76
72
|
fn update(&mut self, ctx: &Context<Self>, msg: Self::Message) -> bool {
|
|
73
|
+
let PluginSelectorProps {
|
|
74
|
+
presentation,
|
|
75
|
+
renderer,
|
|
76
|
+
session,
|
|
77
|
+
..
|
|
78
|
+
} = ctx.props();
|
|
77
79
|
match msg {
|
|
78
80
|
RendererSelectPlugin(_plugin_name) => true,
|
|
79
81
|
ComponentSelectPlugin(plugin_name) => {
|
|
80
|
-
if !
|
|
81
|
-
let metadata =
|
|
82
|
-
.
|
|
83
|
-
.renderer
|
|
84
|
-
.get_next_plugin_metadata(&PluginUpdate::Update(plugin_name));
|
|
82
|
+
if !session.is_errored() {
|
|
83
|
+
let metadata =
|
|
84
|
+
renderer.get_next_plugin_metadata(&PluginUpdate::Update(plugin_name));
|
|
85
85
|
|
|
86
86
|
let mut update = ViewConfigUpdate::default();
|
|
87
|
-
|
|
87
|
+
session.set_update_column_defaults(
|
|
88
88
|
&mut update,
|
|
89
|
-
metadata
|
|
90
|
-
.as_ref()
|
|
91
|
-
.unwrap_or(&*ctx.props().renderer.metadata()),
|
|
89
|
+
metadata.as_ref().unwrap_or(&*renderer.metadata()),
|
|
92
90
|
);
|
|
93
91
|
|
|
94
92
|
if let Ok(task) = ctx.props().update_and_render(update) {
|
|
95
93
|
ApiFuture::spawn(task);
|
|
96
94
|
}
|
|
97
95
|
|
|
98
|
-
|
|
96
|
+
presentation.set_open_column_settings(None);
|
|
99
97
|
self.is_open = false;
|
|
100
98
|
false
|
|
101
99
|
} else {
|
|
@@ -116,7 +114,6 @@ impl Component for PluginSelector {
|
|
|
116
114
|
|
|
117
115
|
fn view(&self, ctx: &Context<Self>) -> Html {
|
|
118
116
|
let callback = ctx.link().callback(|_| OpenMenu);
|
|
119
|
-
|
|
120
117
|
let plugin_name = ctx.props().renderer.get_active_plugin().unwrap().name();
|
|
121
118
|
let plugin_name2 = plugin_name.clone();
|
|
122
119
|
let class = if self.is_open { "open" } else { "" };
|
|
@@ -170,7 +167,7 @@ struct PluginSelectProps {
|
|
|
170
167
|
|
|
171
168
|
#[function_component]
|
|
172
169
|
fn PluginSelect(props: &PluginSelectProps) -> Html {
|
|
173
|
-
let name = props.name.clone()
|
|
170
|
+
let name = props.name.clone();
|
|
174
171
|
let path: String = props
|
|
175
172
|
.name
|
|
176
173
|
.chars()
|
|
@@ -186,9 +183,9 @@ fn PluginSelect(props: &PluginSelectProps) -> Html {
|
|
|
186
183
|
html! {
|
|
187
184
|
<div
|
|
188
185
|
class="plugin-select-item"
|
|
189
|
-
data-plugin={name.
|
|
186
|
+
data-plugin={name.clone()}
|
|
190
187
|
style={format!("--default-column-title:var(--plugin-name-{}--content, \"{}\")", path, props.name)}
|
|
191
|
-
onclick={props.on_click.reform(move |_| name.
|
|
188
|
+
onclick={props.on_click.reform(move |_| name.clone())}
|
|
192
189
|
>
|
|
193
190
|
<span class="plugin-select-item-name" />
|
|
194
191
|
</div>
|
|
@@ -13,14 +13,17 @@
|
|
|
13
13
|
use yew::prelude::*;
|
|
14
14
|
|
|
15
15
|
use super::style::LocalStyle;
|
|
16
|
+
use crate::model::*;
|
|
16
17
|
use crate::renderer::*;
|
|
17
18
|
use crate::session::*;
|
|
18
|
-
use crate::utils::*;
|
|
19
19
|
use crate::*;
|
|
20
20
|
|
|
21
|
-
#[derive(Properties)]
|
|
21
|
+
#[derive(Properties, PerspectiveProperties!)]
|
|
22
22
|
pub struct RenderWarningProps {
|
|
23
|
+
// Current dimensions
|
|
23
24
|
pub dimensions: Option<(usize, usize, Option<usize>, Option<usize>)>,
|
|
25
|
+
|
|
26
|
+
// State
|
|
24
27
|
pub renderer: Renderer,
|
|
25
28
|
pub session: Session,
|
|
26
29
|
}
|
|
@@ -67,7 +70,6 @@ impl Component for RenderWarning {
|
|
|
67
70
|
type Properties = RenderWarningProps;
|
|
68
71
|
|
|
69
72
|
fn create(ctx: &Context<Self>) -> Self {
|
|
70
|
-
// enable_weak_link_test!(props, link);
|
|
71
73
|
let mut elem = Self {
|
|
72
74
|
col_warn: None,
|
|
73
75
|
row_warn: None,
|
|
@@ -80,10 +82,11 @@ impl Component for RenderWarning {
|
|
|
80
82
|
fn update(&mut self, ctx: &Context<Self>, msg: Self::Message) -> bool {
|
|
81
83
|
match msg {
|
|
82
84
|
RenderWarningMsg::DismissWarning => {
|
|
83
|
-
|
|
85
|
+
let state = ctx.props().clone_state();
|
|
84
86
|
ApiFuture::spawn(async move {
|
|
85
|
-
renderer.disable_active_plugin_render_warning();
|
|
86
|
-
|
|
87
|
+
state.renderer().disable_active_plugin_render_warning();
|
|
88
|
+
let view_task = state.session().get_view();
|
|
89
|
+
state.renderer().update(view_task).await
|
|
87
90
|
});
|
|
88
91
|
},
|
|
89
92
|
};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
|
|
2
|
+
// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
|
|
3
|
+
// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
|
|
4
|
+
// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
|
|
5
|
+
// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
|
|
6
|
+
// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
|
|
7
|
+
// ┃ Copyright (c) 2017, the Perspective Authors. ┃
|
|
8
|
+
// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃
|
|
9
|
+
// ┃ This file is part of the Perspective library, distributed under the terms ┃
|
|
10
|
+
// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃
|
|
11
|
+
// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
|
12
|
+
|
|
13
|
+
use std::rc::Rc;
|
|
14
|
+
|
|
15
|
+
use yew::prelude::*;
|
|
16
|
+
|
|
17
|
+
use super::column_selector::ColumnSelector;
|
|
18
|
+
use super::plugin_selector::PluginSelector;
|
|
19
|
+
use crate::PerspectiveProperties;
|
|
20
|
+
use crate::components::containers::sidebar_close_button::SidebarCloseButton;
|
|
21
|
+
use crate::dragdrop::*;
|
|
22
|
+
use crate::model::*;
|
|
23
|
+
use crate::presentation::{ColumnLocator, Presentation};
|
|
24
|
+
use crate::renderer::*;
|
|
25
|
+
use crate::session::*;
|
|
26
|
+
use crate::utils::*;
|
|
27
|
+
|
|
28
|
+
#[derive(Clone, Properties, PerspectiveProperties!)]
|
|
29
|
+
pub struct SettingsPanelProps {
|
|
30
|
+
pub on_close: Callback<()>,
|
|
31
|
+
pub on_resize: Rc<PubSub<()>>,
|
|
32
|
+
pub on_select_column: Callback<ColumnLocator>,
|
|
33
|
+
pub on_debug: Callback<()>,
|
|
34
|
+
pub is_debug: bool,
|
|
35
|
+
|
|
36
|
+
/// State
|
|
37
|
+
pub dragdrop: DragDrop,
|
|
38
|
+
pub session: Session,
|
|
39
|
+
pub renderer: Renderer,
|
|
40
|
+
pub presentation: Presentation,
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
impl PartialEq for SettingsPanelProps {
|
|
44
|
+
fn eq(&self, _rhs: &Self) -> bool {
|
|
45
|
+
false
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
#[function_component]
|
|
50
|
+
pub fn SettingsPanel(props: &SettingsPanelProps) -> Html {
|
|
51
|
+
let SettingsPanelProps {
|
|
52
|
+
dragdrop,
|
|
53
|
+
presentation,
|
|
54
|
+
renderer,
|
|
55
|
+
session,
|
|
56
|
+
..
|
|
57
|
+
} = &props;
|
|
58
|
+
let selected_column = props.get_current_column_locator();
|
|
59
|
+
html! {
|
|
60
|
+
<div id="settings_panel" class="sidebar_column noselect split-panel orient-vertical">
|
|
61
|
+
if selected_column.is_none() {
|
|
62
|
+
<SidebarCloseButton
|
|
63
|
+
id="settings_close_button"
|
|
64
|
+
on_close_sidebar={&props.on_close.clone()}
|
|
65
|
+
/>
|
|
66
|
+
}
|
|
67
|
+
<SidebarCloseButton
|
|
68
|
+
id={if props.is_debug {"debug_close_button"} else {"debug_open_button"}}
|
|
69
|
+
on_close_sidebar={&props.on_debug}
|
|
70
|
+
/>
|
|
71
|
+
<PluginSelector {presentation} {renderer} {session} />
|
|
72
|
+
<ColumnSelector
|
|
73
|
+
on_resize={&props.on_resize}
|
|
74
|
+
on_open_expr_panel={&props.on_select_column}
|
|
75
|
+
selected_column={selected_column.clone()}
|
|
76
|
+
{dragdrop}
|
|
77
|
+
{renderer}
|
|
78
|
+
{session}
|
|
79
|
+
/>
|
|
80
|
+
</div>
|
|
81
|
+
}
|
|
82
|
+
}
|