@perspective-dev/viewer 4.5.1 → 5.0.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 +20 -1
- package/dist/cdn/perspective-viewer.js.map +4 -4
- package/dist/css/botanical.css +1 -1
- 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/phosphor.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 +22 -3
- package/dist/esm/perspective-viewer.cdn.d.ts +3 -0
- package/dist/esm/perspective-viewer.d.ts +9 -0
- package/dist/esm/perspective-viewer.inline.d.ts +3 -0
- package/dist/esm/perspective-viewer.inline.js +20 -1
- package/dist/esm/perspective-viewer.inline.js.map +4 -4
- package/dist/esm/perspective-viewer.js +20 -1
- package/dist/esm/perspective-viewer.js.map +4 -4
- package/dist/esm/plugin.d.ts +71 -5
- package/dist/esm/ts-rs/ClientOptions.d.ts +7 -0
- package/dist/esm/ts-rs/ExportMethod.d.ts +1 -0
- package/dist/esm/ts-rs/ExportOptions.d.ts +9 -0
- package/dist/esm/ts-rs/GetClientOptions.d.ts +8 -0
- package/dist/esm/ts-rs/GetTableOptions.d.ts +8 -0
- package/dist/esm/ts-rs/Layout.d.ts +11 -0
- package/dist/esm/ts-rs/OnUpdateData.d.ts +6 -0
- package/dist/esm/ts-rs/Orientation.d.ts +4 -0
- package/dist/esm/ts-rs/PanelOptions.d.ts +7 -0
- package/dist/esm/ts-rs/PanelViewerConfig.d.ts +39 -0
- package/dist/esm/ts-rs/SplitLayout.d.ts +7 -0
- package/dist/esm/ts-rs/TabLayout.d.ts +10 -0
- package/dist/esm/ts-rs/ViewOnUpdateResp.d.ts +4 -0
- package/dist/esm/ts-rs/ViewerConfig.d.ts +6 -2
- package/dist/esm/ts-rs/WorkspaceConfig.d.ts +40 -0
- package/dist/esm/ts-rs/WorkspaceConfigUpdate.d.ts +28 -0
- package/dist/wasm/perspective-viewer.d.ts +213 -79
- package/dist/wasm/perspective-viewer.js +537 -189
- package/dist/wasm/perspective-viewer.wasm +0 -0
- package/dist/wasm/perspective-viewer.wasm.d.ts +36 -28
- package/dist/wasm/snippets/perspective-viewer-daeef4ceb066e6c7/inline0.js +6 -0
- package/dist/wasm/snippets/{perspective-viewer-3cd58f0374935772/inline3.js → perspective-viewer-daeef4ceb066e6c7/inline4.js} +5 -0
- package/package.json +3 -2
- package/src/css/_column_dropdown.css +14 -0
- package/src/css/_context_menu.css +14 -0
- package/src/css/_dropdown_menu.css +14 -0
- package/src/css/_filter_dropdown.css +14 -0
- package/src/css/_function_dropdown.css +14 -0
- package/src/css/_viewer_bundle.css +41 -0
- package/src/css/column-settings-panel.css +1 -1
- package/src/css/containers/context-menu.css +101 -0
- package/src/css/panel-tab.css +193 -0
- package/src/css/plugin-selector.css +7 -10
- package/src/css/status-bar.css +75 -81
- package/src/css/viewer.css +181 -71
- package/src/rust/components/column_dropdown.rs +43 -33
- package/src/rust/components/column_selector/active_column.rs +7 -18
- package/src/rust/components/column_selector/aggregate_selector.rs +4 -10
- package/src/rust/components/column_selector/config_selector.rs +33 -84
- package/src/rust/components/column_selector/empty_column.rs +0 -3
- package/src/rust/components/column_selector/filter_column.rs +5 -18
- package/src/rust/components/column_selector/inactive_column.rs +3 -8
- package/src/rust/components/column_selector/invalid_column.rs +0 -4
- package/src/rust/components/column_selector/sort_column.rs +3 -6
- package/src/rust/components/column_selector.rs +5 -14
- package/src/rust/components/column_settings_sidebar/style_tab/symbol/symbol_pairs.rs +0 -3
- package/src/rust/components/column_settings_sidebar/style_tab/symbol.rs +0 -3
- package/src/rust/components/column_settings_sidebar.rs +0 -3
- package/src/rust/components/containers/dropdown_menu.rs +1 -3
- package/src/rust/components/containers/scroll_panel.rs +1 -3
- package/src/rust/components/containers/split_panel.rs +175 -66
- package/src/rust/components/containers/tab_list.rs +0 -3
- package/src/rust/components/context_menu.rs +130 -0
- package/src/rust/components/datetime_column_style.rs +0 -3
- package/src/rust/components/empty_row.rs +0 -3
- package/src/rust/components/expression_editor.rs +2 -3
- package/src/rust/components/filter_dropdown.rs +3 -3
- package/src/rust/components/font_loader.rs +2 -2
- package/src/rust/components/form/code_editor.rs +0 -3
- package/src/rust/components/form/debug.rs +3 -4
- package/src/rust/components/function_dropdown.rs +3 -3
- package/src/rust/components/global_filter_bar.rs +76 -0
- package/src/rust/components/main_panel/frame_theme.rs +186 -0
- package/src/rust/components/main_panel/msg.rs +62 -0
- package/src/rust/components/main_panel/presize.rs +220 -0
- package/src/rust/components/main_panel/reconcile.rs +224 -0
- package/src/rust/components/main_panel/render.rs +385 -0
- package/src/rust/components/main_panel/update.rs +184 -0
- package/src/rust/components/main_panel.rs +311 -71
- package/src/rust/components/mod.rs +4 -0
- package/src/rust/components/number_series_style.rs +0 -3
- package/src/rust/components/panel_menu.rs +486 -0
- package/src/rust/components/panel_tab.rs +505 -0
- package/src/rust/components/plugin_selector.rs +0 -3
- package/src/rust/components/plugin_tab.rs +1 -6
- package/src/rust/components/portal.rs +5 -2
- package/src/rust/components/render_warning.rs +0 -3
- package/src/rust/components/settings_panel.rs +13 -5
- package/src/rust/components/status_bar.rs +113 -180
- package/src/rust/components/status_indicator.rs +6 -9
- package/src/rust/components/string_column_style.rs +0 -3
- package/src/rust/components/style/mod.rs +65 -27
- package/src/rust/components/style/style_provider.rs +51 -16
- package/src/rust/components/style_controls/number_string_format.rs +1 -8
- package/src/rust/components/type_icon.rs +1 -4
- package/src/rust/components/viewer/filters.rs +133 -0
- package/src/rust/components/viewer/msg.rs +180 -0
- package/src/rust/components/viewer/panels.rs +326 -0
- package/src/rust/components/viewer/render.rs +243 -0
- package/src/rust/components/viewer/settings.rs +402 -0
- package/src/rust/components/viewer/snapshots.rs +134 -0
- package/src/rust/components/viewer/wiring.rs +505 -0
- package/src/rust/components/viewer.rs +243 -758
- package/src/rust/config/export_method.rs +1 -1
- package/src/rust/config/mod.rs +4 -0
- package/src/rust/config/options.rs +71 -0
- package/src/rust/config/viewer_config.rs +24 -2
- package/src/rust/config/workspace_config.rs +92 -0
- package/src/rust/custom_elements/copy_dropdown.rs +9 -3
- package/src/rust/custom_elements/debug_plugin.rs +20 -1
- package/src/rust/custom_elements/export_dropdown.rs +9 -3
- package/src/rust/custom_elements/viewer.rs +1015 -286
- package/src/rust/custom_events.rs +212 -61
- package/src/rust/js/mod.rs +2 -0
- package/src/rust/js/plugin.rs +297 -10
- package/src/rust/js/regular_layout.rs +258 -0
- package/src/rust/lib.rs +20 -2
- package/src/rust/presentation.rs +66 -33
- package/src/rust/queries/get_viewer_config.rs +29 -11
- package/src/rust/queries/plugin_column_styles.rs +2 -2
- package/src/rust/renderer/activate.rs +41 -14
- package/src/rust/renderer/dispatch.rs +436 -0
- package/src/rust/renderer/plugin_config.rs +495 -0
- package/src/rust/renderer/registry.rs +18 -6
- package/src/rust/renderer/render_timer.rs +29 -10
- package/src/rust/renderer.rs +350 -827
- package/src/rust/session/column_defaults_update.rs +26 -8
- package/src/rust/session/metadata.rs +11 -1
- package/src/rust/session/view_subscription.rs +30 -15
- package/src/rust/session.rs +753 -251
- package/src/rust/tasks/apply_global_filters.rs +89 -0
- package/src/rust/tasks/auto_pause.rs +171 -0
- package/src/rust/tasks/copy_export.rs +29 -19
- package/src/rust/tasks/create_panel.rs +243 -0
- package/src/rust/tasks/dismiss_render_warning.rs +3 -1
- package/src/rust/tasks/edit_expression.rs +4 -4
- package/src/rust/tasks/eject.rs +64 -23
- package/src/rust/tasks/mod.rs +28 -4
- package/src/rust/tasks/pipeline.rs +411 -0
- package/src/rust/tasks/presize_panels.rs +324 -0
- package/src/rust/tasks/reset_all.rs +22 -12
- package/src/rust/tasks/resize_observer.rs +124 -87
- package/src/rust/tasks/restore_and_render.rs +80 -86
- package/src/rust/tasks/restore_panel.rs +145 -0
- package/src/rust/tasks/send_column_config.rs +5 -2
- package/src/rust/tasks/send_plugin_config.rs +5 -2
- package/src/rust/tasks/set_edit_mode.rs +59 -0
- package/src/rust/tasks/sync_update_panels.rs +152 -0
- package/src/rust/tasks/table_lifecycle.rs +158 -0
- package/src/rust/tasks/update_theme.rs +56 -12
- package/src/rust/utils/completion.rs +56 -0
- package/src/rust/utils/custom_element.rs +5 -0
- package/src/rust/utils/debounce.rs +130 -7
- package/src/rust/utils/mod.rs +6 -0
- package/src/rust/utils/pending_effects.rs +62 -0
- package/src/rust/{components/style/local_style.rs → utils/spawn.rs} +17 -19
- package/src/rust/utils/weak_scope.rs +0 -10
- package/src/rust/workspace.rs +846 -0
- package/src/svg/active-indicator.svg +3 -0
- package/src/themes/botanical.css +7 -2
- package/src/themes/defaults.css +54 -2
- package/src/themes/dracula.css +8 -3
- package/src/themes/gruvbox-dark.css +7 -2
- package/src/themes/gruvbox.css +5 -2
- package/src/themes/icons.css +4 -2
- package/src/themes/monokai.css +7 -2
- package/src/themes/phosphor.css +7 -2
- package/src/themes/pro-dark.css +7 -2
- package/src/themes/pro.css +2 -1
- package/src/themes/solarized-dark.css +5 -2
- package/src/themes/solarized.css +5 -2
- package/src/themes/vaporwave.css +7 -2
- package/src/ts/bootstrap.ts +8 -7
- package/src/ts/extensions.ts +30 -2
- package/src/ts/perspective-viewer.ts +10 -0
- package/src/ts/plugin.ts +72 -5
- package/src/ts/ts-rs/ClientOptions.ts +7 -0
- package/src/ts/ts-rs/ExportMethod.ts +3 -0
- package/src/ts/ts-rs/ExportOptions.ts +8 -0
- package/src/ts/ts-rs/GetClientOptions.ts +7 -0
- package/src/ts/ts-rs/GetTableOptions.ts +7 -0
- package/src/ts/ts-rs/Layout.ts +9 -0
- package/src/ts/ts-rs/Orientation.ts +6 -0
- package/src/ts/ts-rs/PanelOptions.ts +7 -0
- package/src/ts/ts-rs/PanelViewerConfig.ts +15 -0
- package/src/ts/ts-rs/SplitLayout.ts +5 -0
- package/src/ts/ts-rs/TabLayout.ts +11 -0
- package/src/ts/ts-rs/ViewerConfig.ts +6 -2
- package/src/ts/ts-rs/WorkspaceConfig.ts +36 -0
- package/src/ts/ts-rs/WorkspaceConfigUpdate.ts +24 -0
- package/tsconfig.json +1 -1
- package/src/rust/components/style/style_cache.rs +0 -136
- package/src/rust/tasks/intersection_observer.rs +0 -98
- package/src/rust/tasks/update_and_render.rs +0 -110
- /package/dist/wasm/snippets/{perspective-viewer-3cd58f0374935772/inline0.js → perspective-viewer-daeef4ceb066e6c7/inline1.js} +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-3cd58f0374935772/inline1.js → perspective-viewer-daeef4ceb066e6c7/inline2.js} +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-3cd58f0374935772/inline2.js → perspective-viewer-daeef4ceb066e6c7/inline3.js} +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-3cd58f0374935772/inline4.js → perspective-viewer-daeef4ceb066e6c7/inline5.js} +0 -0
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
use std::collections::HashSet;
|
|
14
14
|
|
|
15
15
|
use perspective_client::config::*;
|
|
16
|
-
use perspective_js::utils::ApiFuture;
|
|
17
16
|
use web_sys::*;
|
|
18
17
|
use yew::prelude::*;
|
|
19
18
|
|
|
@@ -28,6 +27,7 @@ use crate::presentation::{ColumnLocator, Presentation};
|
|
|
28
27
|
use crate::queries::*;
|
|
29
28
|
use crate::renderer::*;
|
|
30
29
|
use crate::session::*;
|
|
30
|
+
use crate::tasks::apply_and_render;
|
|
31
31
|
use crate::utils::*;
|
|
32
32
|
|
|
33
33
|
#[derive(Clone, Properties)]
|
|
@@ -162,11 +162,8 @@ impl Component for ActiveColumn {
|
|
|
162
162
|
{
|
|
163
163
|
let session = ctx.props().session.clone();
|
|
164
164
|
let renderer = ctx.props().renderer.clone();
|
|
165
|
-
if
|
|
166
|
-
|
|
167
|
-
renderer.apply_pending_plugin()?;
|
|
168
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
169
|
-
});
|
|
165
|
+
if let Ok(task) = apply_and_render(&session, &renderer, update) {
|
|
166
|
+
spawn_owned("active-column", task);
|
|
170
167
|
}
|
|
171
168
|
}
|
|
172
169
|
|
|
@@ -190,11 +187,8 @@ impl Component for ActiveColumn {
|
|
|
190
187
|
{
|
|
191
188
|
let session = ctx.props().session.clone();
|
|
192
189
|
let renderer = ctx.props().renderer.clone();
|
|
193
|
-
if
|
|
194
|
-
|
|
195
|
-
renderer.apply_pending_plugin()?;
|
|
196
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
197
|
-
});
|
|
190
|
+
if let Ok(task) = apply_and_render(&session, &renderer, update) {
|
|
191
|
+
spawn_owned("active-column", task);
|
|
198
192
|
}
|
|
199
193
|
}
|
|
200
194
|
|
|
@@ -477,13 +471,8 @@ impl ActiveColumnProps {
|
|
|
477
471
|
..ViewConfigUpdate::default()
|
|
478
472
|
};
|
|
479
473
|
|
|
480
|
-
if self.session.
|
|
481
|
-
|
|
482
|
-
let renderer = self.renderer.clone();
|
|
483
|
-
ApiFuture::spawn(async move {
|
|
484
|
-
renderer.apply_pending_plugin()?;
|
|
485
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
486
|
-
});
|
|
474
|
+
if let Ok(task) = apply_and_render(&self.session, &self.renderer, config) {
|
|
475
|
+
spawn_owned("active-column", task);
|
|
487
476
|
}
|
|
488
477
|
}
|
|
489
478
|
}
|
|
@@ -14,15 +14,13 @@ use std::collections::HashSet;
|
|
|
14
14
|
use std::rc::Rc;
|
|
15
15
|
|
|
16
16
|
use perspective_client::config::*;
|
|
17
|
-
use perspective_js::utils::ApiFuture;
|
|
18
17
|
use yew::prelude::*;
|
|
19
18
|
|
|
20
19
|
use crate::components::containers::select::*;
|
|
21
|
-
use crate::components::style::LocalStyle;
|
|
22
|
-
use crate::css;
|
|
23
20
|
use crate::renderer::*;
|
|
24
21
|
use crate::session::*;
|
|
25
|
-
use crate::
|
|
22
|
+
use crate::tasks::apply_and_render;
|
|
23
|
+
use crate::utils::{PtrEqRc, spawn_owned};
|
|
26
24
|
|
|
27
25
|
#[derive(Properties)]
|
|
28
26
|
pub struct AggregateSelectorProps {
|
|
@@ -119,7 +117,6 @@ impl Component for AggregateSelector {
|
|
|
119
117
|
|
|
120
118
|
html! {
|
|
121
119
|
<>
|
|
122
|
-
<LocalStyle href={css!("aggregate-selector")} />
|
|
123
120
|
<div class="aggregate-selector-wrapper">
|
|
124
121
|
<Select<Aggregate>
|
|
125
122
|
wrapper_class="aggregate-selector"
|
|
@@ -146,11 +143,8 @@ impl AggregateSelector {
|
|
|
146
143
|
|
|
147
144
|
let session = ctx.props().session.clone();
|
|
148
145
|
let renderer = ctx.props().renderer.clone();
|
|
149
|
-
if
|
|
150
|
-
|
|
151
|
-
renderer.apply_pending_plugin()?;
|
|
152
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
153
|
-
});
|
|
146
|
+
if let Ok(task) = apply_and_render(&session, &renderer, config) {
|
|
147
|
+
spawn_owned("aggregate-selector", task);
|
|
154
148
|
}
|
|
155
149
|
}
|
|
156
150
|
|
|
@@ -14,7 +14,6 @@ use std::collections::HashSet;
|
|
|
14
14
|
use std::rc::Rc;
|
|
15
15
|
|
|
16
16
|
use perspective_client::config::{ViewConfig, *};
|
|
17
|
-
use perspective_js::utils::ApiFuture;
|
|
18
17
|
use yew::prelude::*;
|
|
19
18
|
|
|
20
19
|
use super::InPlaceColumn;
|
|
@@ -25,12 +24,11 @@ use crate::components::column_dropdown::{ColumnDropDownElement, ColumnDropDownPo
|
|
|
25
24
|
use crate::components::containers::dragdrop_list::*;
|
|
26
25
|
use crate::components::containers::select::{Select, SelectItem};
|
|
27
26
|
use crate::components::filter_dropdown::{FilterDropDownElement, FilterDropDownPortal};
|
|
28
|
-
use crate::components::style::LocalStyle;
|
|
29
|
-
use crate::css;
|
|
30
27
|
use crate::presentation::Presentation;
|
|
31
28
|
use crate::renderer::*;
|
|
32
29
|
use crate::session::drag_drop_update::*;
|
|
33
30
|
use crate::session::*;
|
|
31
|
+
use crate::tasks::apply_and_render;
|
|
34
32
|
use crate::utils::*;
|
|
35
33
|
|
|
36
34
|
#[derive(Clone, Properties)]
|
|
@@ -134,11 +132,8 @@ impl Component for ConfigSelector {
|
|
|
134
132
|
{
|
|
135
133
|
let session = ctx.props().session.clone();
|
|
136
134
|
let renderer = ctx.props().renderer.clone();
|
|
137
|
-
if
|
|
138
|
-
|
|
139
|
-
renderer.apply_pending_plugin()?;
|
|
140
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
141
|
-
});
|
|
135
|
+
if let Ok(task) = apply_and_render(&session, &renderer, config) {
|
|
136
|
+
spawn_owned("config-selector", task);
|
|
142
137
|
}
|
|
143
138
|
}
|
|
144
139
|
|
|
@@ -154,11 +149,8 @@ impl Component for ConfigSelector {
|
|
|
154
149
|
{
|
|
155
150
|
let session = ctx.props().session.clone();
|
|
156
151
|
let renderer = ctx.props().renderer.clone();
|
|
157
|
-
if
|
|
158
|
-
|
|
159
|
-
renderer.apply_pending_plugin()?;
|
|
160
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
161
|
-
});
|
|
152
|
+
if let Ok(task) = apply_and_render(&session, &renderer, config) {
|
|
153
|
+
spawn_owned("config-selector", task);
|
|
162
154
|
}
|
|
163
155
|
}
|
|
164
156
|
|
|
@@ -193,11 +185,8 @@ impl Component for ConfigSelector {
|
|
|
193
185
|
{
|
|
194
186
|
let session = ctx.props().session.clone();
|
|
195
187
|
let renderer = ctx.props().renderer.clone();
|
|
196
|
-
if
|
|
197
|
-
|
|
198
|
-
renderer.apply_pending_plugin()?;
|
|
199
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
200
|
-
});
|
|
188
|
+
if let Ok(task) = apply_and_render(&session, &renderer, config) {
|
|
189
|
+
spawn_owned("config-selector", task);
|
|
201
190
|
}
|
|
202
191
|
}
|
|
203
192
|
|
|
@@ -216,11 +205,8 @@ impl Component for ConfigSelector {
|
|
|
216
205
|
{
|
|
217
206
|
let session = ctx.props().session.clone();
|
|
218
207
|
let renderer = ctx.props().renderer.clone();
|
|
219
|
-
if
|
|
220
|
-
|
|
221
|
-
renderer.apply_pending_plugin()?;
|
|
222
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
223
|
-
});
|
|
208
|
+
if let Ok(task) = apply_and_render(&session, &renderer, config) {
|
|
209
|
+
spawn_owned("config-selector", task);
|
|
224
210
|
}
|
|
225
211
|
}
|
|
226
212
|
|
|
@@ -239,11 +225,8 @@ impl Component for ConfigSelector {
|
|
|
239
225
|
{
|
|
240
226
|
let session = ctx.props().session.clone();
|
|
241
227
|
let renderer = ctx.props().renderer.clone();
|
|
242
|
-
if
|
|
243
|
-
|
|
244
|
-
renderer.apply_pending_plugin()?;
|
|
245
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
246
|
-
});
|
|
228
|
+
if let Ok(task) = apply_and_render(&session, &renderer, config) {
|
|
229
|
+
spawn_owned("config-selector", task);
|
|
247
230
|
}
|
|
248
231
|
}
|
|
249
232
|
|
|
@@ -272,11 +255,8 @@ impl Component for ConfigSelector {
|
|
|
272
255
|
{
|
|
273
256
|
let session = ctx.props().session.clone();
|
|
274
257
|
let renderer = ctx.props().renderer.clone();
|
|
275
|
-
if
|
|
276
|
-
|
|
277
|
-
renderer.apply_pending_plugin()?;
|
|
278
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
279
|
-
});
|
|
258
|
+
if let Ok(task) = apply_and_render(&session, &renderer, update) {
|
|
259
|
+
spawn_owned("config-selector", task);
|
|
280
260
|
}
|
|
281
261
|
}
|
|
282
262
|
|
|
@@ -302,11 +282,8 @@ impl Component for ConfigSelector {
|
|
|
302
282
|
{
|
|
303
283
|
let session = ctx.props().session.clone();
|
|
304
284
|
let renderer = ctx.props().renderer.clone();
|
|
305
|
-
if
|
|
306
|
-
|
|
307
|
-
renderer.apply_pending_plugin()?;
|
|
308
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
309
|
-
});
|
|
285
|
+
if let Ok(task) = apply_and_render(&session, &renderer, update) {
|
|
286
|
+
spawn_owned("config-selector", task);
|
|
310
287
|
}
|
|
311
288
|
}
|
|
312
289
|
ctx.props().onselect.emit(());
|
|
@@ -347,11 +324,8 @@ impl Component for ConfigSelector {
|
|
|
347
324
|
{
|
|
348
325
|
let session = ctx.props().session.clone();
|
|
349
326
|
let renderer = ctx.props().renderer.clone();
|
|
350
|
-
if
|
|
351
|
-
|
|
352
|
-
renderer.apply_pending_plugin()?;
|
|
353
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
354
|
-
});
|
|
327
|
+
if let Ok(task) = apply_and_render(&session, &renderer, update) {
|
|
328
|
+
spawn_owned("config-selector", task);
|
|
355
329
|
}
|
|
356
330
|
}
|
|
357
331
|
|
|
@@ -368,11 +342,8 @@ impl Component for ConfigSelector {
|
|
|
368
342
|
{
|
|
369
343
|
let session = ctx.props().session.clone();
|
|
370
344
|
let renderer = ctx.props().renderer.clone();
|
|
371
|
-
if
|
|
372
|
-
|
|
373
|
-
renderer.apply_pending_plugin()?;
|
|
374
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
375
|
-
});
|
|
345
|
+
if let Ok(task) = apply_and_render(&session, &renderer, update) {
|
|
346
|
+
spawn_owned("config-selector", task);
|
|
376
347
|
}
|
|
377
348
|
}
|
|
378
349
|
|
|
@@ -390,11 +361,8 @@ impl Component for ConfigSelector {
|
|
|
390
361
|
{
|
|
391
362
|
let session = ctx.props().session.clone();
|
|
392
363
|
let renderer = ctx.props().renderer.clone();
|
|
393
|
-
if
|
|
394
|
-
|
|
395
|
-
renderer.apply_pending_plugin()?;
|
|
396
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
397
|
-
});
|
|
364
|
+
if let Ok(task) = apply_and_render(&session, &renderer, update) {
|
|
365
|
+
spawn_owned("config-selector", task);
|
|
398
366
|
}
|
|
399
367
|
}
|
|
400
368
|
|
|
@@ -418,11 +386,8 @@ impl Component for ConfigSelector {
|
|
|
418
386
|
{
|
|
419
387
|
let session = ctx.props().session.clone();
|
|
420
388
|
let renderer = ctx.props().renderer.clone();
|
|
421
|
-
if
|
|
422
|
-
|
|
423
|
-
renderer.apply_pending_plugin()?;
|
|
424
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
425
|
-
});
|
|
389
|
+
if let Ok(task) = apply_and_render(&session, &renderer, update) {
|
|
390
|
+
spawn_owned("config-selector", task);
|
|
426
391
|
}
|
|
427
392
|
}
|
|
428
393
|
|
|
@@ -440,11 +405,8 @@ impl Component for ConfigSelector {
|
|
|
440
405
|
{
|
|
441
406
|
let session = ctx.props().session.clone();
|
|
442
407
|
let renderer = ctx.props().renderer.clone();
|
|
443
|
-
if
|
|
444
|
-
|
|
445
|
-
renderer.apply_pending_plugin()?;
|
|
446
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
447
|
-
});
|
|
408
|
+
if let Ok(task) = apply_and_render(&session, &renderer, update) {
|
|
409
|
+
spawn_owned("config-selector", task);
|
|
448
410
|
}
|
|
449
411
|
}
|
|
450
412
|
|
|
@@ -464,11 +426,8 @@ impl Component for ConfigSelector {
|
|
|
464
426
|
{
|
|
465
427
|
let session = ctx.props().session.clone();
|
|
466
428
|
let renderer = ctx.props().renderer.clone();
|
|
467
|
-
if
|
|
468
|
-
|
|
469
|
-
renderer.apply_pending_plugin()?;
|
|
470
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
471
|
-
});
|
|
429
|
+
if let Ok(task) = apply_and_render(&session, &renderer, update) {
|
|
430
|
+
spawn_owned("config-selector", task);
|
|
472
431
|
}
|
|
473
432
|
}
|
|
474
433
|
|
|
@@ -488,11 +447,8 @@ impl Component for ConfigSelector {
|
|
|
488
447
|
{
|
|
489
448
|
let session = ctx.props().session.clone();
|
|
490
449
|
let renderer = ctx.props().renderer.clone();
|
|
491
|
-
if
|
|
492
|
-
|
|
493
|
-
renderer.apply_pending_plugin()?;
|
|
494
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
495
|
-
});
|
|
450
|
+
if let Ok(task) = apply_and_render(&session, &renderer, update) {
|
|
451
|
+
spawn_owned("config-selector", task);
|
|
496
452
|
}
|
|
497
453
|
}
|
|
498
454
|
|
|
@@ -520,11 +476,8 @@ impl Component for ConfigSelector {
|
|
|
520
476
|
{
|
|
521
477
|
let session = ctx.props().session.clone();
|
|
522
478
|
let renderer = ctx.props().renderer.clone();
|
|
523
|
-
if
|
|
524
|
-
|
|
525
|
-
renderer.apply_pending_plugin()?;
|
|
526
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
527
|
-
});
|
|
479
|
+
if let Ok(task) = apply_and_render(&session, &renderer, update) {
|
|
480
|
+
spawn_owned("config-selector", task);
|
|
528
481
|
}
|
|
529
482
|
}
|
|
530
483
|
|
|
@@ -546,11 +499,8 @@ impl Component for ConfigSelector {
|
|
|
546
499
|
{
|
|
547
500
|
let session = ctx.props().session.clone();
|
|
548
501
|
let renderer = ctx.props().renderer.clone();
|
|
549
|
-
if
|
|
550
|
-
|
|
551
|
-
renderer.apply_pending_plugin()?;
|
|
552
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
553
|
-
});
|
|
502
|
+
if let Ok(task) = apply_and_render(&session, &renderer, update) {
|
|
503
|
+
spawn_owned("config-selector", task);
|
|
554
504
|
}
|
|
555
505
|
}
|
|
556
506
|
|
|
@@ -609,7 +559,6 @@ impl Component for ConfigSelector {
|
|
|
609
559
|
html! {
|
|
610
560
|
<>
|
|
611
561
|
<div slot="top_panel" id="top_panel" {class} ondragend={dragend}>
|
|
612
|
-
<LocalStyle href={css!("config-selector")} />
|
|
613
562
|
<div class="pivot_controls">
|
|
614
563
|
if group_rollups.len() > 1 {
|
|
615
564
|
<Select<GroupRollupMode>
|
|
@@ -17,8 +17,6 @@ use web_sys::*;
|
|
|
17
17
|
use yew::prelude::*;
|
|
18
18
|
|
|
19
19
|
use crate::components::column_dropdown::ColumnDropDownElement;
|
|
20
|
-
use crate::components::style::LocalStyle;
|
|
21
|
-
use crate::css;
|
|
22
20
|
|
|
23
21
|
#[derive(Properties)]
|
|
24
22
|
pub struct EmptyColumnProps {
|
|
@@ -70,7 +68,6 @@ impl Component for EmptyColumn {
|
|
|
70
68
|
|
|
71
69
|
html! {
|
|
72
70
|
<div class="pivot-column column-empty">
|
|
73
|
-
<LocalStyle href={css!("empty-column")} />
|
|
74
71
|
<input
|
|
75
72
|
spellcheck="false"
|
|
76
73
|
ref={self.input_ref.clone()}
|
|
@@ -15,7 +15,6 @@ use std::rc::Rc;
|
|
|
15
15
|
|
|
16
16
|
use chrono::{Datelike, NaiveDate, TimeZone, Utc};
|
|
17
17
|
use perspective_client::config::*;
|
|
18
|
-
use perspective_js::utils::ApiFuture;
|
|
19
18
|
use wasm_bindgen::JsCast;
|
|
20
19
|
use web_sys::*;
|
|
21
20
|
use yew::prelude::*;
|
|
@@ -23,12 +22,11 @@ use yew::prelude::*;
|
|
|
23
22
|
use crate::components::containers::dragdrop_list::*;
|
|
24
23
|
use crate::components::containers::select::*;
|
|
25
24
|
use crate::components::filter_dropdown::FilterDropDownElement;
|
|
26
|
-
use crate::components::style::LocalStyle;
|
|
27
25
|
use crate::components::type_icon::TypeIcon;
|
|
28
|
-
use crate::css;
|
|
29
26
|
use crate::presentation::Presentation;
|
|
30
27
|
use crate::renderer::*;
|
|
31
28
|
use crate::session::*;
|
|
29
|
+
use crate::tasks::apply_and_render;
|
|
32
30
|
use crate::utils::*;
|
|
33
31
|
|
|
34
32
|
#[derive(Clone, Properties)]
|
|
@@ -348,7 +346,6 @@ impl Component for FilterColumn {
|
|
|
348
346
|
ondragstart={dragstart}
|
|
349
347
|
ondragend={dragend}
|
|
350
348
|
>
|
|
351
|
-
<LocalStyle href={css!("filter-item")} />
|
|
352
349
|
<div class="pivot-column-border">
|
|
353
350
|
<span class="drag-handle icon" />
|
|
354
351
|
// <TypeIcon ty={ColumnType::String} />
|
|
@@ -451,13 +448,8 @@ impl FilterColumnProps {
|
|
|
451
448
|
..ViewConfigUpdate::default()
|
|
452
449
|
};
|
|
453
450
|
|
|
454
|
-
if self.session.
|
|
455
|
-
|
|
456
|
-
let renderer = self.renderer.clone();
|
|
457
|
-
ApiFuture::spawn(async move {
|
|
458
|
-
renderer.apply_pending_plugin()?;
|
|
459
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
460
|
-
});
|
|
451
|
+
if let Ok(task) = apply_and_render(&self.session, &self.renderer, update) {
|
|
452
|
+
spawn_owned("filter-column", task);
|
|
461
453
|
}
|
|
462
454
|
}
|
|
463
455
|
|
|
@@ -529,13 +521,8 @@ impl FilterColumnProps {
|
|
|
529
521
|
..ViewConfigUpdate::default()
|
|
530
522
|
};
|
|
531
523
|
|
|
532
|
-
if self.session.
|
|
533
|
-
|
|
534
|
-
let renderer = self.renderer.clone();
|
|
535
|
-
ApiFuture::spawn(async move {
|
|
536
|
-
renderer.apply_pending_plugin()?;
|
|
537
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
538
|
-
});
|
|
524
|
+
if let Ok(task) = apply_and_render(&self.session, &self.renderer, update) {
|
|
525
|
+
spawn_owned("filter-column", task);
|
|
539
526
|
}
|
|
540
527
|
}
|
|
541
528
|
}
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
|
|
13
13
|
use itertools::Itertools;
|
|
14
14
|
use perspective_client::config::*;
|
|
15
|
-
use perspective_js::utils::ApiFuture;
|
|
16
15
|
use web_sys::*;
|
|
17
16
|
use yew::prelude::*;
|
|
18
17
|
|
|
@@ -22,6 +21,7 @@ use crate::config::ColumnSelectMode;
|
|
|
22
21
|
use crate::presentation::{ColumnLocator, Presentation};
|
|
23
22
|
use crate::renderer::*;
|
|
24
23
|
use crate::session::*;
|
|
24
|
+
use crate::tasks::apply_and_render;
|
|
25
25
|
use crate::utils::*;
|
|
26
26
|
|
|
27
27
|
#[derive(Clone, Properties)]
|
|
@@ -231,13 +231,8 @@ impl InactiveColumnProps {
|
|
|
231
231
|
..ViewConfigUpdate::default()
|
|
232
232
|
};
|
|
233
233
|
|
|
234
|
-
if self.session.
|
|
235
|
-
|
|
236
|
-
let renderer = self.renderer.clone();
|
|
237
|
-
ApiFuture::spawn(async move {
|
|
238
|
-
renderer.apply_pending_plugin()?;
|
|
239
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
240
|
-
});
|
|
234
|
+
if let Ok(task) = apply_and_render(&self.session, &self.renderer, config) {
|
|
235
|
+
spawn_owned("inactive-column", task);
|
|
241
236
|
}
|
|
242
237
|
}
|
|
243
238
|
}
|
|
@@ -12,14 +12,10 @@
|
|
|
12
12
|
|
|
13
13
|
use yew::prelude::*;
|
|
14
14
|
|
|
15
|
-
use crate::components::style::LocalStyle;
|
|
16
|
-
use crate::css;
|
|
17
|
-
|
|
18
15
|
#[function_component(InvalidColumn)]
|
|
19
16
|
pub fn invalid_column() -> Html {
|
|
20
17
|
html! {
|
|
21
18
|
<div class="pivot-column column-empty column-invalid">
|
|
22
|
-
<LocalStyle href={css!("empty-column")} />
|
|
23
19
|
<div class="column-invalid-input" />
|
|
24
20
|
</div>
|
|
25
21
|
}
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
|
|
12
12
|
|
|
13
13
|
use perspective_client::config::*;
|
|
14
|
-
use perspective_js::utils::ApiFuture;
|
|
15
14
|
use web_sys::*;
|
|
16
15
|
use yew::prelude::*;
|
|
17
16
|
|
|
@@ -20,6 +19,7 @@ use crate::components::type_icon::TypeIcon;
|
|
|
20
19
|
use crate::presentation::Presentation;
|
|
21
20
|
use crate::renderer::*;
|
|
22
21
|
use crate::session::*;
|
|
22
|
+
use crate::tasks::apply_and_render;
|
|
23
23
|
use crate::utils::*;
|
|
24
24
|
|
|
25
25
|
#[derive(Properties)]
|
|
@@ -86,11 +86,8 @@ impl Component for SortColumn {
|
|
|
86
86
|
|
|
87
87
|
let session = ctx.props().session.clone();
|
|
88
88
|
let renderer = ctx.props().renderer.clone();
|
|
89
|
-
if
|
|
90
|
-
|
|
91
|
-
renderer.apply_pending_plugin()?;
|
|
92
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
93
|
-
});
|
|
89
|
+
if let Ok(task) = apply_and_render(&session, &renderer, update) {
|
|
90
|
+
spawn_owned("sort-column", task);
|
|
94
91
|
}
|
|
95
92
|
|
|
96
93
|
false
|
|
@@ -28,7 +28,6 @@ use std::rc::Rc;
|
|
|
28
28
|
pub use empty_column::*;
|
|
29
29
|
pub use invalid_column::*;
|
|
30
30
|
use perspective_client::config::ViewConfig;
|
|
31
|
-
use perspective_js::utils::ApiFuture;
|
|
32
31
|
pub use pivot_column::*;
|
|
33
32
|
use web_sys::*;
|
|
34
33
|
use yew::prelude::*;
|
|
@@ -39,15 +38,14 @@ use self::config_selector::ConfigSelector;
|
|
|
39
38
|
use self::inactive_column::*;
|
|
40
39
|
use super::containers::scroll_panel::*;
|
|
41
40
|
use super::containers::split_panel::{Orientation, SplitPanel};
|
|
42
|
-
use super::style::LocalStyle;
|
|
43
41
|
use crate::components::column_dropdown::{ColumnDropDownElement, ColumnDropDownPortal};
|
|
44
42
|
use crate::components::containers::scroll_panel_item::ScrollPanelItem;
|
|
45
|
-
use crate::css;
|
|
46
43
|
use crate::presentation::{ColumnLocator, DragDropContainer, Presentation};
|
|
47
44
|
use crate::queries::{ActiveColumnState, ActiveColumnStateData, ColumnsIteratorSet};
|
|
48
45
|
use crate::renderer::*;
|
|
49
46
|
use crate::session::drag_drop_update::*;
|
|
50
47
|
use crate::session::*;
|
|
48
|
+
use crate::tasks::apply_and_render;
|
|
51
49
|
use crate::utils::*;
|
|
52
50
|
|
|
53
51
|
#[derive(Properties)]
|
|
@@ -220,11 +218,8 @@ impl Component for ColumnSelector {
|
|
|
220
218
|
|
|
221
219
|
let session = ctx.props().session.clone();
|
|
222
220
|
let renderer = ctx.props().renderer.clone();
|
|
223
|
-
if
|
|
224
|
-
|
|
225
|
-
renderer.apply_pending_plugin()?;
|
|
226
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
227
|
-
});
|
|
221
|
+
if let Ok(task) = apply_and_render(&session, &renderer, update) {
|
|
222
|
+
spawn_owned("column-selector", task);
|
|
228
223
|
}
|
|
229
224
|
}
|
|
230
225
|
|
|
@@ -248,11 +243,8 @@ impl Component for ColumnSelector {
|
|
|
248
243
|
|
|
249
244
|
let session = ctx.props().session.clone();
|
|
250
245
|
let renderer = ctx.props().renderer.clone();
|
|
251
|
-
if
|
|
252
|
-
|
|
253
|
-
renderer.apply_pending_plugin()?;
|
|
254
|
-
renderer.draw(session.validate().await?.create_view()).await
|
|
255
|
-
});
|
|
246
|
+
if let Ok(task) = apply_and_render(&session, &renderer, update) {
|
|
247
|
+
spawn_owned("column-selector", task);
|
|
256
248
|
}
|
|
257
249
|
|
|
258
250
|
true
|
|
@@ -519,7 +511,6 @@ impl Component for ColumnSelector {
|
|
|
519
511
|
|
|
520
512
|
html! {
|
|
521
513
|
<>
|
|
522
|
-
<LocalStyle href={css!("column-selector")} />
|
|
523
514
|
<SplitPanel
|
|
524
515
|
no_wrap=true
|
|
525
516
|
on_reset={self.on_reset.callback()}
|
|
@@ -17,9 +17,7 @@ use yew::{Callback, Html, Properties, html};
|
|
|
17
17
|
|
|
18
18
|
use crate::components::column_settings_sidebar::style_tab::symbol::symbol_pairs_item::PairsListItem;
|
|
19
19
|
use crate::components::filter_dropdown::FilterDropDownElement;
|
|
20
|
-
use crate::components::style::LocalStyle;
|
|
21
20
|
use crate::config::SymbolKVPair;
|
|
22
|
-
use crate::css;
|
|
23
21
|
use crate::utils::PtrEqRc;
|
|
24
22
|
|
|
25
23
|
#[derive(Properties, PartialEq)]
|
|
@@ -84,7 +82,6 @@ impl yew::Component for PairsList {
|
|
|
84
82
|
|
|
85
83
|
html! {
|
|
86
84
|
<>
|
|
87
|
-
<LocalStyle href={css!("containers/pairs-list")} />
|
|
88
85
|
<div class="pairs-list" id={props.id.clone()} data-label={props.title.clone()}>
|
|
89
86
|
<ul>{ for main_pairs }</ul>
|
|
90
87
|
</div>
|
|
@@ -24,9 +24,7 @@ use yew::{Callback, Html, Properties, html};
|
|
|
24
24
|
|
|
25
25
|
use crate::components::column_settings_sidebar::style_tab::symbol::symbol_pairs::PairsList;
|
|
26
26
|
use crate::components::filter_dropdown::{FilterDropDownElement, FilterDropDownPortal};
|
|
27
|
-
use crate::components::style::LocalStyle;
|
|
28
27
|
use crate::config::{ColumnConfigFieldUpdate, KeyValueOpts, SymbolKVPair};
|
|
29
|
-
use crate::css;
|
|
30
28
|
use crate::session::Session;
|
|
31
29
|
|
|
32
30
|
#[derive(Properties, PartialEq, Clone)]
|
|
@@ -126,7 +124,6 @@ impl yew::Component for SymbolStyle {
|
|
|
126
124
|
let update_pairs = ctx.link().callback(SymbolAttrMsg::UpdatePairs);
|
|
127
125
|
html! {
|
|
128
126
|
<>
|
|
129
|
-
<LocalStyle href={css!("column-symbol-attributes")} />
|
|
130
127
|
<PairsList
|
|
131
128
|
title="Symbols"
|
|
132
129
|
id="attributes-symbols"
|
|
@@ -31,14 +31,12 @@ use crate::components::containers::sidebar::Sidebar;
|
|
|
31
31
|
use crate::components::containers::tab_list::TabList;
|
|
32
32
|
use crate::components::editable_header::EditableHeaderProps;
|
|
33
33
|
use crate::components::expression_editor::ExpressionEditorProps;
|
|
34
|
-
use crate::components::style::LocalStyle;
|
|
35
34
|
use crate::components::type_icon::TypeIconType;
|
|
36
35
|
use crate::presentation::{ColumnLocator, ColumnSettingsTab, Presentation};
|
|
37
36
|
use crate::renderer::Renderer;
|
|
38
37
|
use crate::session::{Session, SessionMetadataRc};
|
|
39
38
|
use crate::tasks::{delete_expr, save_expr, update_expr};
|
|
40
39
|
use crate::utils::PtrEqRc;
|
|
41
|
-
use crate::*;
|
|
42
40
|
|
|
43
41
|
#[derive(Clone, Derivative, Properties)]
|
|
44
42
|
#[derivative(Debug)]
|
|
@@ -356,7 +354,6 @@ impl Component for ColumnSettingsPanel {
|
|
|
356
354
|
|
|
357
355
|
html! {
|
|
358
356
|
<>
|
|
359
|
-
<LocalStyle href={css!("column-settings-panel")} />
|
|
360
357
|
<Sidebar
|
|
361
358
|
on_close={ctx.props().on_close.clone()}
|
|
362
359
|
id_prefix="column_settings"
|
|
@@ -17,8 +17,6 @@ use web_sys::*;
|
|
|
17
17
|
use yew::prelude::*;
|
|
18
18
|
|
|
19
19
|
use super::select::SelectItem;
|
|
20
|
-
use crate::components::style::LocalStyle;
|
|
21
|
-
use crate::*;
|
|
22
20
|
|
|
23
21
|
#[derive(Properties, PartialEq)]
|
|
24
22
|
pub struct DropDownMenuProps<T>
|
|
@@ -95,7 +93,7 @@ where
|
|
|
95
93
|
html! { <span class="no-results">{ "No Completions" }</span> }
|
|
96
94
|
};
|
|
97
95
|
|
|
98
|
-
html! {
|
|
96
|
+
html! { <>{ body }</> }
|
|
99
97
|
}
|
|
100
98
|
}
|
|
101
99
|
|
|
@@ -22,8 +22,6 @@ use yew::prelude::*;
|
|
|
22
22
|
use yew::virtual_dom::VChild;
|
|
23
23
|
|
|
24
24
|
use super::scroll_panel_item::ScrollPanelItem;
|
|
25
|
-
use crate::components::style::LocalStyle;
|
|
26
|
-
use crate::css;
|
|
27
25
|
use crate::utils::*;
|
|
28
26
|
|
|
29
27
|
#[derive(Properties)]
|
|
@@ -253,7 +251,7 @@ impl Component for ScrollPanel {
|
|
|
253
251
|
}
|
|
254
252
|
};
|
|
255
253
|
|
|
256
|
-
html! {
|
|
254
|
+
html! { <>{ items }</> }
|
|
257
255
|
}
|
|
258
256
|
|
|
259
257
|
fn rendered(&mut self, ctx: &Context<Self>, _first_render: bool) {
|