@perspective-dev/viewer 4.5.2 → 5.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 +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/intl/de.css +1 -1
- package/dist/css/intl/es.css +1 -1
- package/dist/css/intl/fr.css +1 -1
- package/dist/css/intl/ja.css +1 -1
- package/dist/css/intl/pt.css +1 -1
- package/dist/css/intl/zh.css +1 -1
- package/dist/css/intl.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.d.ts +9 -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/Orientation.d.ts +4 -0
- package/dist/esm/ts-rs/PanelOptions.d.ts +7 -0
- package/dist/esm/ts-rs/PanelViewerConfig.d.ts +41 -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/ViewerConfig.d.ts +8 -2
- package/dist/esm/ts-rs/ViewerConfigUpdate.d.ts +9 -0
- package/dist/esm/ts-rs/WindowAggregate.d.ts +1 -0
- package/dist/esm/ts-rs/WindowSort.d.ts +7 -0
- package/dist/esm/ts-rs/WindowSortDir.d.ts +6 -0
- package/dist/esm/ts-rs/WindowSpec.d.ts +46 -0
- package/dist/esm/ts-rs/Windows.d.ts +10 -0
- 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 +299 -78
- package/dist/wasm/perspective-viewer.js +544 -186
- package/dist/wasm/perspective-viewer.wasm +0 -0
- package/dist/wasm/perspective-viewer.wasm.d.ts +34 -26
- package/dist/wasm/snippets/perspective-viewer-8a8c7d5d696b43ae/inline0.js +6 -0
- package/dist/wasm/snippets/{perspective-viewer-93064d0d79855d97/inline3.js → perspective-viewer-8a8c7d5d696b43ae/inline4.js} +5 -0
- package/package.json +3 -2
- package/src/css/_context_menu.css +14 -0
- package/src/css/column-selector.css +1 -0
- package/src/css/column-settings-panel.css +68 -3
- package/src/css/column-style.css +4 -3
- package/src/css/config-selector.css +22 -1
- package/src/css/containers/context-menu.css +107 -0
- package/src/css/containers/tabs.css +2 -2
- 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 +188 -70
- package/src/rust/components/column_dropdown.rs +40 -30
- package/src/rust/components/column_selector/active_column.rs +28 -45
- package/src/rust/components/column_selector/aggregate_selector.rs +4 -7
- package/src/rust/components/column_selector/column_selector_column_row.rs +73 -0
- package/src/rust/components/column_selector/config_selector.rs +40 -82
- package/src/rust/components/column_selector/expr_edit_button.rs +7 -1
- package/src/rust/components/column_selector/filter_column.rs +5 -15
- package/src/rust/components/column_selector/inactive_column.rs +11 -9
- package/src/rust/components/column_selector/sort_column.rs +3 -6
- package/src/rust/components/column_selector.rs +25 -14
- package/src/rust/components/column_settings_sidebar/style_tab.rs +2 -1
- package/src/rust/components/column_settings_sidebar/window_tab.rs +34 -0
- package/src/rust/components/column_settings_sidebar.rs +163 -16
- package/src/rust/components/containers/dragdrop_list.rs +73 -3
- package/src/rust/components/containers/sidebar.rs +99 -22
- package/src/rust/components/containers/split_panel.rs +181 -62
- package/src/rust/components/context_menu.rs +130 -0
- package/src/rust/components/editable_header.rs +2 -0
- package/src/rust/components/form/debug.rs +3 -0
- 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 +316 -71
- package/src/rust/components/mod.rs +5 -0
- package/src/rust/components/panel_menu.rs +493 -0
- package/src/rust/components/panel_tab.rs +510 -0
- package/src/rust/components/plugin_tab.rs +1 -1
- package/src/rust/components/portal.rs +7 -0
- package/src/rust/components/settings_panel.rs +13 -5
- package/src/rust/components/status_bar.rs +110 -178
- package/src/rust/components/status_indicator.rs +6 -9
- package/src/rust/components/style/mod.rs +5 -0
- package/src/rust/components/style/style_provider.rs +2 -0
- package/src/rust/components/viewer/filters.rs +133 -0
- package/src/rust/components/viewer/msg.rs +182 -0
- package/src/rust/components/viewer/panels.rs +326 -0
- package/src/rust/components/viewer/render.rs +255 -0
- package/src/rust/components/viewer/settings.rs +434 -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 +245 -756
- package/src/rust/components/window_editor.rs +1013 -0
- 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 +3 -1
- package/src/rust/custom_elements/debug_plugin.rs +20 -1
- package/src/rust/custom_elements/export_dropdown.rs +3 -1
- 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 +24 -2
- package/src/rust/presentation/column_locator.rs +16 -1
- package/src/rust/presentation.rs +66 -33
- package/src/rust/queries/columns_iter_set.rs +7 -1
- 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 +463 -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 +384 -838
- package/src/rust/session/column_defaults_update.rs +26 -8
- package/src/rust/session/drag_drop_update.rs +18 -0
- package/src/rust/session/metadata.rs +66 -9
- package/src/rust/session/replace_expression_update.rs +1 -0
- package/src/rust/session/view_subscription.rs +30 -15
- package/src/rust/session.rs +755 -264
- 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/edit_window.rs +155 -0
- package/src/rust/tasks/eject.rs +64 -23
- package/src/rust/tasks/mod.rs +30 -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/browser/dragdrop.rs +12 -0
- package/src/rust/utils/browser/tests/debounce.rs +49 -0
- package/src/rust/utils/completion.rs +56 -0
- package/src/rust/utils/custom_element.rs +5 -0
- package/src/rust/utils/debounce.rs +189 -17
- package/src/rust/utils/mod.rs +6 -0
- package/src/rust/utils/pending_effects.rs +62 -0
- package/src/rust/utils/spawn.rs +33 -0
- 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/svg/pin-icon.svg +5 -0
- package/src/themes/botanical.css +5 -2
- package/src/themes/defaults.css +54 -2
- package/src/themes/dracula.css +6 -3
- package/src/themes/gruvbox-dark.css +5 -2
- package/src/themes/gruvbox.css +5 -2
- package/src/themes/icons.css +5 -2
- package/src/themes/intl/de.css +7 -0
- package/src/themes/intl/es.css +7 -0
- package/src/themes/intl/fr.css +7 -0
- package/src/themes/intl/ja.css +7 -0
- package/src/themes/intl/pt.css +7 -0
- package/src/themes/intl/zh.css +7 -0
- package/src/themes/intl.css +10 -1
- package/src/themes/monokai.css +5 -2
- package/src/themes/phosphor.css +5 -2
- package/src/themes/pro-dark.css +5 -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 +5 -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 +16 -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 +7 -2
- package/src/ts/ts-rs/ViewerConfigUpdate.ts +9 -0
- package/src/ts/ts-rs/WindowAggregate.ts +3 -0
- package/src/ts/ts-rs/WindowSort.ts +9 -0
- package/src/ts/ts-rs/WindowSortDir.ts +8 -0
- package/src/ts/ts-rs/WindowSpec.ts +46 -0
- package/src/ts/ts-rs/Windows.ts +10 -0
- package/src/ts/ts-rs/WorkspaceConfig.ts +36 -0
- package/src/ts/ts-rs/WorkspaceConfigUpdate.ts +24 -0
- 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-93064d0d79855d97/inline0.js → perspective-viewer-8a8c7d5d696b43ae/inline1.js} +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-93064d0d79855d97/inline1.js → perspective-viewer-8a8c7d5d696b43ae/inline2.js} +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-93064d0d79855d97/inline2.js → perspective-viewer-8a8c7d5d696b43ae/inline3.js} +0 -0
- /package/dist/wasm/snippets/{perspective-viewer-93064d0d79855d97/inline4.js → perspective-viewer-8a8c7d5d696b43ae/inline5.js} +0 -0
|
@@ -0,0 +1,255 @@
|
|
|
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
|
+
//! The root component's `view()`: composition of the settings pane, the
|
|
14
|
+
//! column-settings drawer, and the multi-panel `MainPanel`.
|
|
15
|
+
//!
|
|
16
|
+
//! INVARIANT: the `SplitPanel` is ALWAYS rendered with `main_panel` as its
|
|
17
|
+
//! last (flex-fill) pane — toggling the settings sidebar only adds/removes the
|
|
18
|
+
//! leading pane, never reparents `main_panel` (a remount would tear down
|
|
19
|
+
//! `<regular-layout>` + the plugin `<slot>`s).
|
|
20
|
+
|
|
21
|
+
use yew::prelude::*;
|
|
22
|
+
|
|
23
|
+
use super::PerspectiveViewer;
|
|
24
|
+
use super::msg::PerspectiveViewerMsg::*;
|
|
25
|
+
use crate::components::column_settings_sidebar::ColumnSettingsPanel;
|
|
26
|
+
use crate::components::containers::split_panel::SplitPanel;
|
|
27
|
+
use crate::components::font_loader::FontLoader;
|
|
28
|
+
use crate::components::main_panel::MainPanel;
|
|
29
|
+
use crate::components::panel_menu::PanelCommand;
|
|
30
|
+
use crate::components::settings_panel::SettingsPanel;
|
|
31
|
+
use crate::components::style::StyleProvider;
|
|
32
|
+
use crate::queries::*;
|
|
33
|
+
use crate::session::TableLoadState;
|
|
34
|
+
|
|
35
|
+
impl PerspectiveViewer {
|
|
36
|
+
pub(super) fn render(&self, ctx: &Context<Self>) -> Html {
|
|
37
|
+
// The settings panel + status bar bind to the *active* panel's engines;
|
|
38
|
+
// `presentation` is element-level (shared).
|
|
39
|
+
let presentation = &ctx.props().presentation;
|
|
40
|
+
let renderer = &self.active_renderer;
|
|
41
|
+
let session = &self.active_session;
|
|
42
|
+
|
|
43
|
+
let is_settings_open = self.settings_open
|
|
44
|
+
&& matches!(self.session_props.has_table, Some(TableLoadState::Loaded));
|
|
45
|
+
|
|
46
|
+
let mut class = classes!();
|
|
47
|
+
if !is_settings_open {
|
|
48
|
+
class.push("settings-closed");
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if self.session_props.title.is_some() {
|
|
52
|
+
class.push("titled");
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
let on_open_expr_panel = ctx.link().callback(|c| OpenColumnSettings {
|
|
56
|
+
locator: c,
|
|
57
|
+
sender: None,
|
|
58
|
+
toggle: true,
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
let on_column_settings_panel_resize = ctx
|
|
62
|
+
.link()
|
|
63
|
+
.callback(|(x, _)| ColumnSettingsPanelSizeUpdate(Some(x)));
|
|
64
|
+
|
|
65
|
+
let on_close_settings = ctx.link().callback(|()| ToggleSettingsInit(None, None));
|
|
66
|
+
let on_debug = ctx.link().callback(|_| ToggleDebug);
|
|
67
|
+
let selected_column = get_current_column_locator(
|
|
68
|
+
&self.presentation_props.open_column_settings,
|
|
69
|
+
renderer,
|
|
70
|
+
&self.session_props.config,
|
|
71
|
+
&self.session_props.metadata,
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
let selected_tab = self.presentation_props.open_column_settings.tab;
|
|
75
|
+
let plugin_name = self.renderer_props.plugin_name.clone();
|
|
76
|
+
let available_plugins = self.renderer_props.available_plugins.clone();
|
|
77
|
+
let has_table = self.session_props.has_table.clone();
|
|
78
|
+
let named_column_count = self.renderer_props.config.config_column_names.len();
|
|
79
|
+
|
|
80
|
+
let view_config = self.session_props.config.clone();
|
|
81
|
+
let drag_column = self.dragdrop_props.column.clone();
|
|
82
|
+
let metadata = self.session_props.metadata.clone();
|
|
83
|
+
let on_select_tab = ctx.link().callback(SettingsPanelTabChanged);
|
|
84
|
+
let on_auto_width = ctx.link().callback(SettingsPanelAutoWidth);
|
|
85
|
+
let settings_panel = if is_settings_open {
|
|
86
|
+
html! {
|
|
87
|
+
<SettingsPanel
|
|
88
|
+
on_close={on_close_settings}
|
|
89
|
+
on_resize={&self.on_resize}
|
|
90
|
+
on_select_column={on_open_expr_panel}
|
|
91
|
+
is_debug={self.debug_open}
|
|
92
|
+
{on_debug}
|
|
93
|
+
{plugin_name}
|
|
94
|
+
{available_plugins}
|
|
95
|
+
{has_table}
|
|
96
|
+
{named_column_count}
|
|
97
|
+
{view_config}
|
|
98
|
+
plugin_config={self.renderer_props.plugin_config.clone()}
|
|
99
|
+
{drag_column}
|
|
100
|
+
metadata={metadata.clone()}
|
|
101
|
+
open_column_settings={self.presentation_props.open_column_settings.clone()}
|
|
102
|
+
selected_theme={self.presentation_props.selected_theme.clone()}
|
|
103
|
+
selected_tab={self.settings_geometry.selected_tab}
|
|
104
|
+
auto_width={self.settings_geometry.auto_width}
|
|
105
|
+
on_dimensions_reset={&self.on_settings_panel_dimensions_reset}
|
|
106
|
+
{on_select_tab}
|
|
107
|
+
{on_auto_width}
|
|
108
|
+
{presentation}
|
|
109
|
+
{renderer}
|
|
110
|
+
{session}
|
|
111
|
+
/>
|
|
112
|
+
}
|
|
113
|
+
} else {
|
|
114
|
+
html! { <></> }
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
let on_settings = ctx.link().callback(|()| ToggleSettingsInit(None, None));
|
|
118
|
+
let on_select_tab = ctx.link().callback(ColumnSettingsTabChanged);
|
|
119
|
+
// Pinning the drawer is a pure CSS positioning flip on `#modal_panel`
|
|
120
|
+
// (absolute overlay over the main panel <-> static flex sibling
|
|
121
|
+
// between the main panel and the settings pane) - the drawer NEVER
|
|
122
|
+
// reparents, so neither `MainPanel` nor the drawer subtree remounts
|
|
123
|
+
// on toggle, and the divider/width-override machinery is identical
|
|
124
|
+
// in both modes.
|
|
125
|
+
let is_pinned = self.settings_geometry.column_settings_pinned;
|
|
126
|
+
let column_settings_panel = html! {
|
|
127
|
+
if let Some(selected_column) = selected_column {
|
|
128
|
+
<SplitPanel
|
|
129
|
+
id="modal_panel"
|
|
130
|
+
class={classes!(is_pinned.then_some("pinned"))}
|
|
131
|
+
reverse=true
|
|
132
|
+
initial_size={self.settings_geometry.column_settings_width_override}
|
|
133
|
+
on_reset={ctx.link().callback(|_| ColumnSettingsPanelSizeUpdate(None))}
|
|
134
|
+
on_resize={on_column_settings_panel_resize}
|
|
135
|
+
>
|
|
136
|
+
<ColumnSettingsPanel
|
|
137
|
+
{selected_column}
|
|
138
|
+
{selected_tab}
|
|
139
|
+
on_close={self.on_close_column_settings.clone()}
|
|
140
|
+
width_override={self.settings_geometry.column_settings_width_override}
|
|
141
|
+
auto_width={self.settings_geometry.column_settings_auto_width}
|
|
142
|
+
on_auto_width={ctx.link().callback(ColumnSettingsPanelAutoWidth)}
|
|
143
|
+
{is_pinned}
|
|
144
|
+
on_toggle_pin={ctx.link().callback(|()| ToggleColumnSettingsPin)}
|
|
145
|
+
{on_select_tab}
|
|
146
|
+
plugin_name={self.renderer_props.plugin_name.clone()}
|
|
147
|
+
{metadata}
|
|
148
|
+
view_config={self.session_props.config.clone()}
|
|
149
|
+
column_stats={self.session_props.column_stats.clone()}
|
|
150
|
+
selected_theme={self.presentation_props.selected_theme.clone()}
|
|
151
|
+
{presentation}
|
|
152
|
+
{renderer}
|
|
153
|
+
{session}
|
|
154
|
+
/>
|
|
155
|
+
<></>
|
|
156
|
+
</SplitPanel>
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
let on_reset = ctx.link().callback(|all| ResetPanel(None, all, None));
|
|
161
|
+
let main_panel = html! {
|
|
162
|
+
<MainPanel
|
|
163
|
+
{on_settings}
|
|
164
|
+
{on_reset}
|
|
165
|
+
on_activate_panel={ctx.link().callback(|id| SetActivePanel(id, None))}
|
|
166
|
+
on_close_panel={ctx.link().callback(|id| ClosePanel(id, None))}
|
|
167
|
+
on_panel_command={ctx.link().batch_callback(|(id, cmd): (String, PanelCommand)| {
|
|
168
|
+
match cmd {
|
|
169
|
+
PanelCommand::New => vec![NewPanel(id)],
|
|
170
|
+
PanelCommand::NewFrom { client, table } => {
|
|
171
|
+
vec![NewPanelFrom { client, table }]
|
|
172
|
+
},
|
|
173
|
+
PanelCommand::Duplicate => vec![DuplicatePanel(id)],
|
|
174
|
+
PanelCommand::Reset => vec![ResetPanel(Some(id), false, None)],
|
|
175
|
+
PanelCommand::ToggleMaster => vec![ToggleMaster(id)],
|
|
176
|
+
PanelCommand::Close => vec![ClosePanel(id, None)],
|
|
177
|
+
PanelCommand::Maximize | PanelCommand::Restore => vec![],
|
|
178
|
+
}
|
|
179
|
+
})}
|
|
180
|
+
session_props={self.session_props.clone()}
|
|
181
|
+
renderer_props={self.renderer_props.clone()}
|
|
182
|
+
presentation_props={self.presentation_props.clone()}
|
|
183
|
+
{is_settings_open}
|
|
184
|
+
update_count={self.update_count}
|
|
185
|
+
panel_ids={ctx.props().workspace.panel_ids()}
|
|
186
|
+
panel_titles={ctx.props()
|
|
187
|
+
.workspace
|
|
188
|
+
.panel_ids()
|
|
189
|
+
.iter()
|
|
190
|
+
.map(|id| {
|
|
191
|
+
let title = ctx
|
|
192
|
+
.props()
|
|
193
|
+
.workspace
|
|
194
|
+
.panel(id)
|
|
195
|
+
.and_then(|p| p.session.get_title())
|
|
196
|
+
.filter(|t| !t.is_empty());
|
|
197
|
+
(id.as_str().to_owned(), title)
|
|
198
|
+
})
|
|
199
|
+
.collect::<Vec<_>>()}
|
|
200
|
+
panel_themes={ctx.props()
|
|
201
|
+
.workspace
|
|
202
|
+
.panel_ids()
|
|
203
|
+
.iter()
|
|
204
|
+
.map(|id| {
|
|
205
|
+
(
|
|
206
|
+
id.as_str().to_owned(),
|
|
207
|
+
ctx.props().workspace.panel(id).and_then(|p| p.renderer.theme()),
|
|
208
|
+
)
|
|
209
|
+
})
|
|
210
|
+
.collect::<Vec<_>>()}
|
|
211
|
+
panel_masters={ctx.props().workspace.masters()}
|
|
212
|
+
workspace={ctx.props().workspace.clone()}
|
|
213
|
+
global_filters={self.global_filters.clone()}
|
|
214
|
+
on_remove_global_filter={ctx.link().callback(RemoveGlobalFilter)}
|
|
215
|
+
on_clear_global_filters={ctx.link().callback(|_| ClearGlobalFilters)}
|
|
216
|
+
{presentation}
|
|
217
|
+
{renderer}
|
|
218
|
+
{session}
|
|
219
|
+
/>
|
|
220
|
+
};
|
|
221
|
+
|
|
222
|
+
let is_single_panel = if ctx.props().workspace.placed_count() == 1 {
|
|
223
|
+
"only-child"
|
|
224
|
+
} else {
|
|
225
|
+
""
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
html! {
|
|
229
|
+
<StyleProvider root={ctx.props().elem.clone()}>
|
|
230
|
+
<div id="component_container" class={is_single_panel}>
|
|
231
|
+
<div id="layout_area">
|
|
232
|
+
<SplitPanel
|
|
233
|
+
id="app_panel"
|
|
234
|
+
reverse=true
|
|
235
|
+
skip_empty=true
|
|
236
|
+
deferred=true
|
|
237
|
+
size={self.settings_geometry.pane_width_override}
|
|
238
|
+
initial_size={self.settings_geometry.pane_width_override}
|
|
239
|
+
on_reset={ctx.link().callback(|_| SettingsPanelSizeUpdate(None))}
|
|
240
|
+
on_resize={ctx.link().callback(|(x, _): (i32, i32)| SettingsDividerMove(x))}
|
|
241
|
+
on_resize_finished={ctx.link().callback(|_| SettingsDividerFinish)}
|
|
242
|
+
>
|
|
243
|
+
{ settings_panel }
|
|
244
|
+
<div id="main_column_container">
|
|
245
|
+
{ main_panel }
|
|
246
|
+
{ column_settings_panel }
|
|
247
|
+
</div>
|
|
248
|
+
</SplitPanel>
|
|
249
|
+
</div>
|
|
250
|
+
</div>
|
|
251
|
+
<FontLoader ..self.fonts.clone() />
|
|
252
|
+
</StyleProvider>
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|