diff --git a/assets/js/app.js b/assets/js/app.js index 5d1910107..2d7e8b825 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -79,3 +79,13 @@ liveSocket.connect(); // >> liveSocket.enableLatencySim(1000) // enabled for duration of browser session // >> liveSocket.disableLatencySim() window.liveSocket = liveSocket; + +// Handling custom events dispatched with JS.dispatch/3 + +window.addEventListener("lb:focus", (event) => { + event.target.focus(); +}); + +window.addEventListener("lb:set_value", (event) => { + event.target.value = event.detail.value; +}); diff --git a/lib/livebook_web/live/file_select_component.ex b/lib/livebook_web/live/file_select_component.ex index 63a62a9b5..ff74a1130 100644 --- a/lib/livebook_web/live/file_select_component.ex +++ b/lib/livebook_web/live/file_select_component.ex @@ -36,7 +36,6 @@ defmodule LivebookWeb.FileSelectComponent do submit_event: nil, # State current_dir: nil, - new_dir_name: nil, deleting_file: nil, renaming_file: nil, renamed_name: nil, @@ -90,7 +89,7 @@ defmodule LivebookWeb.FileSelectComponent do <.remix_icon icon="add-line" class="text-xl" />
- <%= if @new_dir_name do %> -
-
- - <.remix_icon icon="folder-add-fill" class="text-xl align-middle text-gray-400" /> - - -
- -
-
-
+ <%= if any_highlighted?(@file_infos) do %>
@@ -308,6 +304,18 @@ defmodule LivebookWeb.FileSelectComponent do """ end + defp js_show_new_dir_section(js \\ %JS{}) do + js + |> JS.show(to: "#new_dir_section") + |> JS.dispatch("lb:set_value", to: "#new_dir_input", detail: %{value: ""}) + |> JS.dispatch("lb:focus", to: "#new_dir_input") + end + + defp js_hide_new_dir_section(js \\ %JS{}) do + js + |> JS.hide(to: "#new_dir_section") + end + @impl true def handle_event("set_file_system", %{"index" => index}, socket) do index = String.to_integer(index) @@ -347,25 +355,15 @@ defmodule LivebookWeb.FileSelectComponent do {:noreply, put_error(socket, nil)} end - def handle_event("new_dir", %{}, socket) do - {:noreply, assign(socket, new_dir_name: "")} - end - - def handle_event("cancel_new_dir", %{}, socket) do - {:noreply, assign(socket, new_dir_name: nil)} - end - def handle_event("create_dir", %{"value" => name}, socket) do socket = case create_dir(socket.assigns.current_dir, name) do :ok -> socket - |> assign(new_dir_name: nil) |> update_file_infos(true) {:error, error} -> socket - |> assign(new_dir_name: name) |> put_error(error) end