User:Admin
Create two working minimalistic LiveViews.
One is named SendView and the other is ReceiveView .
The SendView consist of a single form field to send data to RecieveView. ReceiveView contains code to renders SendView data to its page.
To understand web socket configuration we will:
1. Create a one way data connection between the two LiveViews and explain clearly the relationship between
2. Edit the code to create a two-way connection between both live views.
3. Combine both LiveViews into one live view to send and receive.
4. Write code to store realtime chat content to a database.
PUB SUB
Before we begin, I will share three small pieces of code with you. These are the main characters, or main components for what we will build.
AppWeb.Endpoint.subscribe()
AppWeb.Endpoint.broadcast()
def handle_info(msg, socket) do {:noreply, assign(socket)} end
def handle_event(msg, params, socket) do {:noreply, socket} end
- How to Create Database Seed Data.
- How to Use Generators in a Real World Project
- How to Work with Database Data via Basic Commands and Custom Change sets.
- How to Render Database Data to LiveView (via Context Commands).
- How to Create a Chat using PubSub.
- How to Create Event Handlers in LiveView
- How to Create a Dynamic Route from Scratch.
- How to Use Elixirs Template language
- How to Work with Modal
- How to Use CSS From Scratch (Without bundler)
- How to use JS hooks
_________________________________________________
https://elixirschool.com/blog/live-view-live-component
Note:
mix phx.gen.html Alerts Alert alerts title:string content:text enabled:boolean
defmodule AppWeb.PageLive do use AppWeb, :live_view alias App.Alerts def mount(_params, _session, socket) do {:ok, assign(socket, alerts: Alerts.list_alerts())} end def render(assigns) do ~H""" <%= for alert <- @alerts do %> <%= if alert.enabled do %> <div><%= alert.content%></div> <% end %> <% end %> """ end end #_____________________________ def check_for_single_selection(data) do list = App.Alerts.list_alerts() IO.inspect list result = Enum.filter(list, fn x -> x.enabled == true end) IO.inspect "WORK_____________________________" IO.inspect result IO.inspect "WORK_____________________________" data end
__________________________________________________
Complex pattern matching https://www.youtube.com/watch?v=gCVWrM5BNVE
Genservers (and related, agent,task etc)
__________________________________________________
ECTO
query = from "artists", select:[:name]
Verbose:
Ecto.Query.from("artists", select[:name])
Repo.all(query)
- => [%{name: "Miles Davis"}, %{name: "Bill Evans"}]
Repo.to_sql(:all, query)