Files
phoenix-clip/lib/clip_web/live/board_live.ex
2020-07-30 17:29:01 +02:00

51 lines
1.7 KiB
Elixir

defmodule ClipWeb.BoardLive do
use ClipWeb, :live_view
alias Clip.Accounts
@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">-> 004930112</button>
"""
end
@impl true
def mount(_params, session, socket) do
user = Accounts.get_user_by_session_token(session |> Map.get("user_token"))
Phoenix.PubSub.subscribe(Clip.PubSub, user.email)
{:ok, assign(socket, snippet: "", current_user: user)}
end
defp normalize(pnumber, local_pref \\ "0351", country_pref \\ "0049") do
pnumber
|> String.replace(~r/^\s*\+/, "00")
|> String.replace(~r/\D/, "")
|> String.replace(~r/^00+/, "00")
|> String.replace(~r/^(?=[1-9])/, local_pref)
|> String.replace(~r/^0(?=[1-9])/, country_pref)
end
@impl true
def handle_event("normalize", _, %{assigns: %{snippet: snippet, current_user: user}} = socket) do
norm_snipp = normalize(snippet)
Phoenix.PubSub.broadcast(Clip.PubSub, user.email, {:snippet_pasted, %{snippet: norm_snipp}})
{:noreply, assign(socket, snippet: snippet)}
end
@impl true
def handle_event("paste", %{"snippet" => snippet}, %{assigns: %{current_user: user}} = socket) do
Phoenix.PubSub.broadcast(Clip.PubSub, user.email, {:snippet_pasted, %{snippet: 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