defmodule ClipWeb.BoardLive do use ClipWeb, :live_view alias Clip.Accounts @impl true def render(assigns) do ~L"""
Current content: <%= @snippet %>
""" 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