Packages
surface
0.4.1
0.12.3
0.12.2
0.12.1
0.12.0
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.1
0.1.0
0.1.0-alpha.2
0.1.0-alpha.1
0.1.0-alpha.0
A component based library for Phoenix LiveView
Current section
Files
Jump to
Current section
Files
lib/surface/components/live_file_input.ex
defmodule Surface.Components.LiveFileInput do
@moduledoc """
Wrapper around Phoenix LiveView's built-in
`live_file_input/2` function.
The parent LiveView, or LiveComponent must `allow_uploads` during mount:
```elixir
def mount(socket) do
socket = allow_upload(socket, :avatar, accept: ~w(.json), max_entries: 1)
{:ok, socket}
end
```
See Phoenix.LiveView [Uploads documentation](https://hexdocs.pm/phoenix_live_view/uploads.html#content)
"""
use Surface.Component
use Surface.Components.Events
import Surface.Components.Utils, only: [events_to_opts: 1]
import Surface.Components.Form.Utils, only: [props_to_attr_opts: 2]
@doc "Upload specified via `allow_upload`"
prop upload, :struct, required: true
@doc "The CSS class for the generated `<input>` element"
prop class, :css_class
@doc "Keyword list with options to be passed down to `live_file_input/2`"
prop opts, :keyword, default: []
def render(assigns) do
attr_opts = props_to_attr_opts(assigns, class: get_config(:default_class))
event_opts = events_to_opts(assigns)
~H"{{ live_file_input(@upload, attr_opts ++ @opts ++ event_opts) }}"
end
end