defmodule LivebookWeb.OpenLive.UploadComponent do
use LivebookWeb, :live_component
@impl true
def mount(socket) do
{:ok,
socket
|> assign(:error, false)
|> allow_upload(:file, accept: ~w(.livemd), max_entries: 1)}
end
@impl true
def render(assigns) do
~H"""
Drag and drop a .livemd file below to import it.
"""
end
@impl true
def handle_event("validate", _params, socket) do
has_error? = Enum.any?(socket.assigns.uploads.file.entries, &(not &1.valid?))
{:noreply, assign(socket, error: has_error?)}
end
def handle_event("clear_file", %{"ref" => ref}, socket) do
{:noreply,
socket
|> cancel_upload(:file, ref)
|> assign(error: false)}
end
def handle_event("save", _params, socket) do
consume_uploaded_entries(socket, :file, fn %{path: path}, _entry ->
content = File.read!(path)
send(self(), {:import_source, content, []})
{:ok, :ok}
end)
{:noreply, socket}
end
end