PhoenixKitWeb.Components.MediaBrowser (phoenix_kit v1.7.102)

Copy Markdown View Source

MediaBrowser LiveComponent — embeddable media management UI.

Provides a full media browser with folder navigation, file upload, search, and selection tools. Operates in two modes:

  • Uncontrolled (default): all navigation state is owned internally. No URL sync.
  • Controlled (opt-in): when on_navigate is set to a truthy value, navigation events (navigate_folder, search, clear_search, set_page) emit {PhoenixKitWeb.Components.MediaBrowser, id, {:navigate, params}} to the parent LiveView process instead of mutating local state. The parent must call push_patch and feed URL params back via send_update with a :nav_params key.

Enabling uploads

The fastest path is the Embed helper — one use line gives you uploads, the validate-channel stub, and the message delegator:

defmodule MyAppWeb.MediaPage do
  use MyAppWeb, :live_view
  use PhoenixKitWeb.Components.MediaBrowser.Embed
end

Manual setup (if you prefer explicit wiring) is three calls:

def mount(_params, _session, socket) do
  {:ok, PhoenixKitWeb.Components.MediaBrowser.setup_uploads(socket)}
end

def handle_event("validate", _params, socket), do: {:noreply, socket}

def handle_info({__MODULE__, _, _} = msg, socket) do
  PhoenixKitWeb.Components.MediaBrowser.handle_parent_info(msg, socket)
end

Usage (uncontrolled)

<.live_component
  module={PhoenixKitWeb.Components.MediaBrowser}
  id="media-browser"
  phoenix_kit_current_user={@phoenix_kit_current_user}
/>

Usage (controlled — URL-sync driven by parent)

<.live_component
  module={PhoenixKitWeb.Components.MediaBrowser}
  id="media-browser"
  phoenix_kit_current_user={@phoenix_kit_current_user}
  on_navigate={true}
/>

The parent LiveView must implement:

def handle_info({PhoenixKitWeb.Components.MediaBrowser, "media-browser",
                 {:navigate, params}}, socket) do
  # push_patch to update URL, handle_params will send_update back
end

Required attributes

  • id — unique DOM id (required by LiveComponent)

Optional attributes

  • phoenix_kit_current_user — logged-in user struct (for upload attribution)
  • scope_folder_id — constrain the browser to a virtual root folder
  • on_navigate — when truthy, enables controlled mode (URL-sync via parent)
  • admin — when true, clicking a file opens the admin detail page at /admin/media/:uuid. When false (default), clicks toggle selection instead, so the component behaves as a picker when embedded outside the admin UI.

Summary

Functions

Catch-all handler for parent LiveViews to delegate MediaBrowser messages.

Callback implementation for Phoenix.LiveComponent.render/1.

Handles the upload setup message from the MediaBrowser component.

Functions

folder_tree_node(assigns)

Attributes

  • node (:map) (required)
  • current_folder (:any) (required)
  • expanded_folders (:any) (required)
  • renaming_folder (:any) (required)
  • renaming_text (:string) - Defaults to "".
  • show_new_folder (:boolean) - Defaults to false.
  • renaming_source (:any) (required)
  • depth (:integer) - Defaults to 0.
  • myself (:any) (required)

handle_event(binary, params, socket)

Callback implementation for Phoenix.LiveComponent.handle_event/3.

handle_parent_info(arg1, socket)

Catch-all handler for parent LiveViews to delegate MediaBrowser messages.

move_folder_option(assigns)

Attributes

  • node (:map) (required)
  • depth (:integer) - Defaults to 0.
  • myself (:any) (required)

render(assigns)

Callback implementation for Phoenix.LiveComponent.render/1.

setup_uploads(socket)

Handles the upload setup message from the MediaBrowser component.

Parent LiveViews embedding MediaBrowser should add this to their handle_info:

def handle_info({PhoenixKitWeb.Components.MediaBrowser, _id, :setup_uploads}, socket) do
  {:noreply, PhoenixKitWeb.Components.MediaBrowser.setup_uploads(socket)}
end

Or use the catch-all delegator:

def handle_info({PhoenixKitWeb.Components.MediaBrowser, _, _} = msg, socket) do
  PhoenixKitWeb.Components.MediaBrowser.handle_parent_info(msg, socket)
end

update(assigns, socket)

Callback implementation for Phoenix.LiveComponent.update/2.