<%= if @screenshot? do %>
<% else %>
@@ -406,6 +407,28 @@ defmodule AlgoraWeb.CrowdfundLive do
"""
end
+ @impl true
+ def handle_params(_params, _uri, socket) do
+ {:noreply,
+ socket
+ |> LocalStore.init(key: __MODULE__)
+ |> LocalStore.subscribe()}
+ end
+
+ @impl true
+ def handle_event("restore_settings", params, socket) do
+ socket = LocalStore.restore(socket, params)
+
+ case socket.assigns.pending_action do
+ nil ->
+ {:noreply, socket}
+
+ {event, params} ->
+ socket = LocalStore.assign_cached(socket, :pending_action, nil)
+ handle_event(event, params, socket)
+ end
+ end
+
@impl true
def handle_event("create_bounty" = event, %{"bounty_form" => params} = unsigned_params, socket) do
changeset =
@@ -436,8 +459,8 @@ defmodule AlgoraWeb.CrowdfundLive do
else
{:noreply,
socket
- |> assign(:pending_action, {event, unsigned_params})
- |> push_event("open_popup", %{url: socket.assigns.oauth_url})}
+ |> LocalStore.assign_cached(:pending_action, {event, unsigned_params})
+ |> redirect(external: socket.assigns.oauth_url)}
end
else
{:noreply, assign(socket, :bounty_form, to_form(changeset))}
@@ -473,8 +496,8 @@ defmodule AlgoraWeb.CrowdfundLive do
else
{:noreply,
socket
- |> assign(:pending_action, {event, unsigned_params})
- |> push_event("open_popup", %{url: socket.assigns.oauth_url})}
+ |> LocalStore.assign_cached(:pending_action, {event, unsigned_params})
+ |> redirect(external: socket.assigns.oauth_url)}
end
else
{:noreply, assign(socket, :tip_form, to_form(changeset))}
diff --git a/lib/algora_web/live/org/bounties_new_live.ex b/lib/algora_web/live/org/bounties_new_live.ex
index 76af2086..5fd1cda5 100644
--- a/lib/algora_web/live/org/bounties_new_live.ex
+++ b/lib/algora_web/live/org/bounties_new_live.ex
@@ -11,6 +11,7 @@ defmodule AlgoraWeb.Org.BountiesNewLive do
alias Algora.Github
alias Algora.Payments
alias AlgoraWeb.Forms.BountyForm
+ alias AlgoraWeb.LocalStore
require Logger
@@ -51,7 +52,8 @@ defmodule AlgoraWeb.Org.BountiesNewLive do
socket
|> assign(:org, org)
|> assign(:has_fresh_token?, Accounts.has_fresh_token?(socket.assigns.current_user))
- |> assign(:oauth_url, Github.authorize_url(%{socket_id: socket.id}))
+ |> assign(:oauth_url, Github.authorize_url(%{return_to: "/#{org.handle}/bounties/new"}))
+ |> assign(:pending_action, nil)
|> assign(:bounty_form, to_form(BountyForm.changeset(%BountyForm{}, %{})))
|> assign(:page_title, org.name)
|> assign(:page_description, "#{org.name} OSS bounty board - fund GitHub issues and prioritize development")
@@ -67,7 +69,11 @@ defmodule AlgoraWeb.Org.BountiesNewLive do
@impl true
def render(assigns) do
~H"""
-
+
@@ -265,6 +271,31 @@ defmodule AlgoraWeb.Org.BountiesNewLive do
"""
end
+ @impl true
+ def handle_params(_params, uri, socket) do
+ return_to = URI.parse(uri).path
+
+ {:noreply,
+ socket
+ |> assign(:oauth_url, Github.authorize_url(%{return_to: return_to}))
+ |> LocalStore.init(key: __MODULE__)
+ |> LocalStore.subscribe()}
+ end
+
+ @impl true
+ def handle_event("restore_settings", params, socket) do
+ socket = LocalStore.restore(socket, params)
+
+ case socket.assigns.pending_action do
+ nil ->
+ {:noreply, socket}
+
+ {event, params} ->
+ socket = LocalStore.assign_cached(socket, :pending_action, nil)
+ handle_event(event, params, socket)
+ end
+ end
+
@impl true
def handle_info({:authenticated, user}, socket) do
socket =
@@ -322,8 +353,8 @@ defmodule AlgoraWeb.Org.BountiesNewLive do
else
{:noreply,
socket
- |> assign(:pending_action, {event, unsigned_params})
- |> push_event("open_popup", %{url: socket.assigns.oauth_url})}
+ |> LocalStore.assign_cached(:pending_action, {event, unsigned_params})
+ |> redirect(external: socket.assigns.oauth_url)}
end
end
diff --git a/lib/algora_web/live/org/settings_live.ex b/lib/algora_web/live/org/settings_live.ex
index 20357ebe..837c6f19 100644
--- a/lib/algora_web/live/org/settings_live.ex
+++ b/lib/algora_web/live/org/settings_live.ex
@@ -10,13 +10,18 @@ defmodule AlgoraWeb.Org.SettingsLive do
alias Algora.Markdown
alias Algora.Payments
alias AlgoraWeb.Components.Logos
+ alias AlgoraWeb.LocalStore
require Logger
@impl true
def render(assigns) do
~H"""
-
+
Settings
Update your settings and preferences
@@ -248,7 +253,8 @@ defmodule AlgoraWeb.Org.SettingsLive do
socket
|> assign(:has_fresh_token?, Accounts.has_fresh_token?(socket.assigns.current_user))
|> assign(:installations, installations)
- |> assign(:oauth_url, Github.authorize_url(%{socket_id: socket.id}))
+ |> assign(:oauth_url, Github.authorize_url(%{return_to: "/#{current_org.handle}/settings"}))
+ |> assign(:pending_action, nil)
|> assign_has_default_payment_method()
|> assign(:template_form, to_form(template_changeset))
|> assign(:template_preview, preview_template(socket, template))
@@ -285,8 +291,8 @@ defmodule AlgoraWeb.Org.SettingsLive do
redirect(socket, external: Github.install_url_select_target())
else
socket
- |> assign(:pending_action, {event, unsigned_params})
- |> push_event("open_popup", %{url: socket.assigns.oauth_url})
+ |> LocalStore.assign_cached(:pending_action, {event, unsigned_params})
+ |> redirect(external: socket.assigns.oauth_url)
end}
end
@@ -360,6 +366,20 @@ defmodule AlgoraWeb.Org.SettingsLive do
end
end
+ @impl true
+ def handle_event("restore_settings", params, socket) do
+ socket = LocalStore.restore(socket, params)
+
+ case socket.assigns.pending_action do
+ nil ->
+ {:noreply, socket}
+
+ {event, params} ->
+ socket = LocalStore.assign_cached(socket, :pending_action, nil)
+ handle_event(event, params, socket)
+ end
+ end
+
@impl true
def handle_event(_event, _params, socket) do
{:noreply, socket}
@@ -367,7 +387,11 @@ defmodule AlgoraWeb.Org.SettingsLive do
@impl true
def handle_params(params, _url, socket) do
- {:noreply, apply_action(socket, socket.assigns.live_action, params)}
+ {:noreply,
+ socket
+ |> LocalStore.init(key: __MODULE__)
+ |> LocalStore.subscribe()
+ |> apply_action(socket.assigns.live_action, params)}
end
defp apply_action(socket, :edit, _params) do
diff --git a/lib/algora_web/live/swift_bounties_live.ex b/lib/algora_web/live/swift_bounties_live.ex
index 1a2e0af0..5e57931b 100644
--- a/lib/algora_web/live/swift_bounties_live.ex
+++ b/lib/algora_web/live/swift_bounties_live.ex
@@ -15,6 +15,7 @@ defmodule AlgoraWeb.SwiftBountiesLive do
alias AlgoraWeb.Components.Logos
alias AlgoraWeb.Forms.BountyForm
alias AlgoraWeb.Forms.TipForm
+ alias AlgoraWeb.LocalStore
alias AlgoraWeb.UserAuth
require Logger
@@ -34,7 +35,7 @@ defmodule AlgoraWeb.SwiftBountiesLive do
|> assign(:page_image, "#{AlgoraWeb.Endpoint.url()}/images/og/swift.png")
|> assign(:bounty_form, to_form(BountyForm.changeset(%BountyForm{}, %{})))
|> assign(:tip_form, to_form(TipForm.changeset(%TipForm{}, %{})))
- |> assign(:oauth_url, Github.authorize_url(%{socket_id: socket.id}))
+ |> assign(:oauth_url, Github.authorize_url(%{return_to: "/swift"}))
|> assign(:pending_action, nil)
|> assign_bounties()
|> assign_active_repos()
@@ -48,7 +49,11 @@ defmodule AlgoraWeb.SwiftBountiesLive do
def render(assigns) do
~H"""
-
+