43 lines
1.4 KiB
Elixir
43 lines
1.4 KiB
Elixir
defmodule ClipWeb.BoardLive do
|
|
use ClipWeb, :live_view
|
|
|
|
alias Clip.Accounts
|
|
alias Clip.Board
|
|
|
|
@impl true
|
|
def render(assigns) do
|
|
~L"""
|
|
<form phx-change="paste">
|
|
<textarea type="text" name="snippet" data-updated-val="<%= @snippet %>" phx-hook="SnippetInput" autocomplete="off"><%= @snippet %></textarea>
|
|
</form>
|
|
<!-- Current content: < %= @snippet %><br> -->
|
|
<button phx-click="normalize">+4930112 -> 0004930112#</button> <button id="copy-button">copy</button> <button id="normcop" phx-click="normalize">+4930112 -> 0004930112# + copy (experimental)</button>
|
|
"""
|
|
end
|
|
|
|
@impl true
|
|
def mount(_params, session, socket) do
|
|
user = Accounts.get_user_by_session_token(session |> Map.get("user_token"))
|
|
{:ok, snippet} = Board.init(user)
|
|
{:ok, assign(socket, snippet: snippet, current_user: user)}
|
|
end
|
|
|
|
@impl true
|
|
def handle_event("normalize", _, %{assigns: %{snippet: snippet, current_user: user}} = socket) do
|
|
norm_snipp = Board.normalize(snippet)
|
|
Board.paste(user, norm_snipp)
|
|
{:noreply, assign(socket, snippet: snippet)}
|
|
end
|
|
|
|
@impl true
|
|
def handle_event("paste", %{"snippet" => snippet}, %{assigns: %{current_user: user}} = socket) do
|
|
Board.paste(user, snippet)
|
|
{:noreply, assign(socket, snippet: snippet)}
|
|
end
|
|
|
|
@impl true
|
|
def handle_info({:snippet_pasted, %{snippet: snippet}}, socket) do
|
|
{:noreply, assign(socket, snippet: snippet)}
|
|
end
|
|
end
|