perspective_viewer/components/
settings_panel.rs1use std::rc::Rc;
14
15use yew::prelude::*;
16
17use super::column_selector::ColumnSelector;
18use super::plugin_selector::PluginSelector;
19use crate::PerspectiveProperties;
20use crate::components::containers::sidebar_close_button::SidebarCloseButton;
21use crate::dragdrop::*;
22use crate::model::*;
23use crate::presentation::{ColumnLocator, Presentation};
24use crate::renderer::*;
25use crate::session::*;
26use crate::utils::*;
27
28#[derive(Clone, Properties, PerspectiveProperties!)]
29pub 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 pub dragdrop: DragDrop,
38 pub session: Session,
39 pub renderer: Renderer,
40 pub presentation: Presentation,
41}
42
43impl PartialEq for SettingsPanelProps {
44 fn eq(&self, _rhs: &Self) -> bool {
45 false
46 }
47}
48
49#[function_component]
50pub 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}