diff --git a/friends/assets/js/app.js b/friends/assets/js/app.js index bf203ba..39c39e4 100644 --- a/friends/assets/js/app.js +++ b/friends/assets/js/app.js @@ -41,4 +41,25 @@ liveSocket.connect() // >> liveSocket.enableLatencySim(1000) // enabled for duration of browser session // >> liveSocket.disableLatencySim() window.liveSocket = liveSocket +window.onload = function () { + window.address_results = document.querySelector("#address-results"); + window.addressInput = document.querySelector("input#friend_address_query"); + window.addressID = document.querySelector("input#addressID"); +} +window.hideResults = function () { + window.address_results.classList.add("hidden"); +} + +window.showResults = function () { + document.getElementById("address-results").classList.remove("hidden"); +} + +window.selectAddressSearchResult = function (result) { + const selectedResult = document.querySelector("#" + result); + const mapboxID = selectedResult.attributes.id.value; + const display = selectedResult.innerText; + + window.addressInput.value = display; + window.addressID.value = mapboxID; +} diff --git a/friends/lib/friends/friend.ex b/friends/lib/friends/friend.ex index 86840b6..40c305e 100644 --- a/friends/lib/friends/friend.ex +++ b/friends/lib/friends/friend.ex @@ -102,9 +102,9 @@ defmodule Friends.Friend do def commit(changeset) do changeset - |> generate_slug - |> @repo.insert! + |> @repo.commit! |> load_preloads + |> assign_user!() end def generate_slug(%Ecto.Changeset{} = changeset) do @@ -125,9 +125,10 @@ defmodule Friends.Friend do def create_or_update(params) do case params.id do - :new -> + "new" -> params |> create() + |> generate_slug |> commit() _number -> @@ -169,6 +170,11 @@ defmodule Friends.Friend do end end + def assign_user!(%Friend{} = friend) do + %{friend: new_friend, user: _user} = assign_user(friend) + new_friend + end + def load_user(%Friends.Friend{user: %Ecto.Association.NotLoaded{}} = model) do model |> @repo.preload(:user) diff --git a/friends/lib/friends/places/search.ex b/friends/lib/friends/places/search.ex index 1da3c88..d5412e4 100644 --- a/friends/lib/friends/places/search.ex +++ b/friends/lib/friends/places/search.ex @@ -1,5 +1,7 @@ defmodule Friends.Places.Search do - def api_key, do: "pk.7c4a6f4bf061fd4a9af9663132c58af3" + def api_key, + do: + "pk.eyJ1IjoicnlhbnBhbmR5YSIsImEiOiJja3psM2tlcDA1MXl1Mm9uZmo5bGxpNzdxIn0.TwBKpTTypcD5fWFc8XRyHg" def viewbox(region) do [lat_min, lat_max, lon_min, lon_max] = region |> Enum.map(&String.to_float/1) @@ -12,16 +14,26 @@ defmodule Friends.Places.Search do ] end - def query(str, region \\ nil) do + def autocomplete(str, region \\ nil) do viewbox = if region do - viewbox(query(region)) + viewbox(autocomplete(region)) end - url = "https://us1.locationiq.com/v1/search?key=#{api_key()}&q=#{str}&format=json#{viewbox}" + url = + "https://api.mapbox.com/geocoding/v5/mapbox.places/#{str}.json?proximity=ip&types=place%2Cpostcode%2Caddress&access_token=#{api_key}" response = HTTPoison.get!(url) results = Poison.decode!(response.body) - results + + results |> Map.get("features") + end + + def display_address(%{"place_name" => name, "id" => id} = result) do + %{ + name: name, + mapbox_id: id, + id: id |> String.replace(~r/\./, "-") + } end end diff --git a/friends/lib/friends/repo.ex b/friends/lib/friends/repo.ex index 428b72b..1b38a5f 100644 --- a/friends/lib/friends/repo.ex +++ b/friends/lib/friends/repo.ex @@ -2,4 +2,13 @@ defmodule Friends.Repo do use Ecto.Repo, otp_app: :friends, adapter: Ecto.Adapters.Postgres + + def commit!(changeset) do + IO.inspect(changeset) + + case changeset.action do + :update -> update!(changeset) + :insert -> insert!(changeset) + end + end end diff --git a/friends/lib/friends_web/controllers/user_auth.ex b/friends/lib/friends_web/controllers/user_auth.ex index 4da5ac7..4a6333a 100644 --- a/friends/lib/friends_web/controllers/user_auth.ex +++ b/friends/lib/friends_web/controllers/user_auth.ex @@ -159,7 +159,7 @@ defmodule FriendsWeb.UserAuth do nil -> conn |> put_flash(:info, "You're logged in but we still need to make you a profile!") - |> redirect(to: Routes.friends_edit_path(conn, :overview, :new)) + |> redirect(to: Routes.friends_edit_path(conn, :welcome)) |> halt() # Or make a new one diff --git a/friends/lib/friends_web/live/components/components.ex b/friends/lib/friends_web/live/components/components.ex index 6620433..892d283 100644 --- a/friends/lib/friends_web/live/components/components.ex +++ b/friends/lib/friends_web/live/components/components.ex @@ -25,17 +25,20 @@ defmodule FriendsWeb.FriendsLive.Components do """ end + @spec edit_menu(any) :: Phoenix.LiveView.Rendered.t() def edit_menu(assigns) do - ~H""" -
Before we get started, we just need some basic info about you:
+ <%= edit_page(:overview, assigns) %> + """ + end def edit_page(:overview, assigns) do ~H""" - <%= @peer_data.address |> Tuple.to_list |> Enum.join(".") %> - <.form for={@changeset} let={f} @@ -145,10 +153,19 @@ defmodule FriendsWeb.FriendsLive.Components do