From 17547c74341e69ceea15097f1f751ef76e196e63 Mon Sep 17 00:00:00 2001 From: Condorra Date: Fri, 11 Oct 2024 14:23:37 +1100 Subject: [PATCH] Allow for deleting scripts from the editor. --- src/editor_view.rs | 15 +++++-- src/editor_view/delete_script_dialog.rs | 58 +++++++++++++++++++++++++ src/editor_view/editor_nav.rs | 32 +++++++++++--- 3 files changed, 94 insertions(+), 11 deletions(-) create mode 100644 src/editor_view/delete_script_dialog.rs diff --git a/src/editor_view.rs b/src/editor_view.rs index 2250d2e..be8e859 100644 --- a/src/editor_view.rs +++ b/src/editor_view.rs @@ -1,4 +1,4 @@ -use std::{ops::Deref, rc::Rc}; +use std::{ops::Deref, rc::Rc, str::FromStr}; use crate::{ command_handler::execute_queue, FrameId, GlobalLayoutState, GlobalMemoCell, PanelDirection, @@ -6,10 +6,12 @@ use crate::{ }; use anyhow::Error; use create_script_dialog::CreateScriptDialog; +use delete_script_dialog::DeleteScriptDialog; use editor_area::EditorArea; use editor_nav::EditorNav; use storage::fetch_initial_editor_state; -use web_sys::KeyboardEvent; +use wasm_bindgen_futures::js_sys::JsString; +use web_sys::{console, KeyboardEvent}; use yew::{ function_component, html, use_node_ref, use_state_eq, AttrValue, Callback, Html, Properties, UseStateHandle, @@ -19,6 +21,7 @@ pub use self::storage::load_extant_file_contents; use self::storage::load_file_contents; mod create_script_dialog; +mod delete_script_dialog; mod editor_area; mod editor_nav; mod storage; @@ -44,13 +47,13 @@ fn close_editor(frame: &FrameId, global_layout: &UseStateHandle, available_files: Vec, open_file: AttrValue, show_create_dialog: bool, - show_delete_dialog: Option, + show_delete_dialog: Option, } pub fn try_run_script(script: &str, global_memo: &GlobalMemoCell) -> anyhow::Result<()> { @@ -160,10 +163,14 @@ pub fn editor_view(props: &EditorViewProps) -> Html { let global_memo = props.global_memo.clone(); let kb_editor_state = editor_state.clone(); + console::log_1(&JsString::from_str(&format!("{:?}", editor_state.as_ref())).unwrap()); html! {
{if editor_state.show_create_dialog { html! { } + } else if let Some(ref delete_file) = editor_state.show_delete_dialog { + html! { } } else { html! { <> } }} diff --git a/src/editor_view/delete_script_dialog.rs b/src/editor_view/delete_script_dialog.rs new file mode 100644 index 0000000..644f9d4 --- /dev/null +++ b/src/editor_view/delete_script_dialog.rs @@ -0,0 +1,58 @@ +use itertools::Itertools; +use std::{ops::Deref, rc::Rc}; +use yew::{function_component, html, AttrValue, Html, Properties, UseStateHandle}; + +use super::{close_modals, EditorViewState}; + +#[derive(Properties, PartialEq, Clone)] +pub(super) struct DeleteScriptProps { + pub filename: AttrValue, + pub editor_state: UseStateHandle>, +} + +fn delete_script(filename: &AttrValue, state: &UseStateHandle>) { + let mut new_state = (*state.deref().deref()).clone(); + + if let Some((pos, _)) = new_state + .available_files + .iter() + .find_position(|v| *v == filename) + { + new_state.available_files.remove(pos); + if &new_state.open_file == filename { + new_state.open_file = "init.lua".into(); + } + } + new_state.show_delete_dialog = None; + state.set(new_state.into()); +} + +#[function_component(DeleteScriptDialog)] +pub(super) fn delete_script_dialog(props: &DeleteScriptProps) -> Html { + let state_modalclose1 = props.editor_state.clone(); + let state_modalclose2 = props.editor_state.clone(); + let state_deletescript = props.editor_state.clone(); + let filename_deletescript = props.filename.clone(); + html! { <> +