Skip to content

Commit c6bcc76

Browse files
committed
Expose open option in funnel settings UI
1 parent 8b16126 commit c6bcc76

File tree

4 files changed

+38
-23
lines changed

4 files changed

+38
-23
lines changed

extra/lib/plausible/funnel.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ defmodule Plausible.Funnel do
5656

5757
def changeset(funnel \\ %__MODULE__{}, attrs \\ %{}) do
5858
funnel
59-
|> cast(attrs, [:name])
59+
|> cast(attrs, [:name, :open])
6060
|> validate_required([:name])
6161
|> put_steps(attrs[:steps] || attrs["steps"])
6262
|> validate_length(:steps, min: @min_steps, max: @max_steps)

extra/lib/plausible/funnels.ex

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@ defmodule Plausible.Funnels do
1313

1414
import Ecto.Query
1515

16-
@spec create(Plausible.Site.t(), String.t(), [map()]) ::
16+
@spec create(Plausible.Site.t(), String.t(), [map()], Keyword.t()) ::
1717
{:ok, Funnel.t()}
1818
| {:error, Ecto.Changeset.t() | :invalid_funnel_size | :upgrade_required}
19-
def create(site, name, steps)
19+
def create(site, name, steps, opts \\ [])
20+
21+
def create(site, name, steps, opts)
2022
when is_list(steps) and length(steps) in Funnel.min_steps()..Funnel.max_steps() do
2123
site = Plausible.Repo.preload(site, :team)
2224

@@ -26,19 +28,19 @@ defmodule Plausible.Funnels do
2628

2729
:ok ->
2830
site
29-
|> create_changeset(name, steps)
31+
|> create_changeset(name, steps, opts)
3032
|> Repo.insert()
3133
end
3234
end
3335

34-
def create(_site, _name, _goals) do
36+
def create(_site, _name, _goals, _opts) do
3537
{:error, :invalid_funnel_size}
3638
end
3739

38-
@spec update(Funnel.t(), String.t(), [map()]) ::
40+
@spec update(Funnel.t(), String.t(), [map()], Keyword.t()) ::
3941
{:ok, Funnel.t()}
4042
| {:error, Ecto.Changeset.t() | :invalid_funnel_size | :upgrade_required}
41-
def update(funnel, name, steps) do
43+
def update(funnel, name, steps, opts \\ []) do
4244
site = Plausible.Repo.preload(funnel, site: :team).site
4345

4446
case Plausible.Billing.Feature.Funnels.check_availability(site.team) do
@@ -47,27 +49,29 @@ defmodule Plausible.Funnels do
4749

4850
:ok ->
4951
funnel
50-
|> Funnel.changeset(%{name: name, steps: steps})
52+
|> edit_changeset(name, steps, opts)
5153
|> Repo.update()
5254
end
5355
end
5456

55-
@spec create_changeset(Plausible.Site.t(), String.t(), [map()]) ::
57+
@spec create_changeset(Plausible.Site.t(), String.t(), [map()], Keyword.t()) ::
5658
Ecto.Changeset.t()
57-
def create_changeset(site, name, steps) do
58-
Funnel.changeset(%Funnel{site_id: site.id}, %{name: name, steps: steps})
59+
def create_changeset(site, name, steps, opts \\ []) do
60+
open? = Keyword.get(opts, :open?, false)
61+
Funnel.changeset(%Funnel{site_id: site.id}, %{name: name, steps: steps, open: open?})
5962
end
6063

61-
@spec edit_changeset(Plausible.Funnel.t(), String.t(), [map()]) ::
64+
@spec edit_changeset(Plausible.Funnel.t(), String.t(), [map()], Keyword.t()) ::
6265
Ecto.Changeset.t()
63-
def edit_changeset(funnel, name, steps) do
64-
Funnel.changeset(funnel, %{name: name, steps: steps})
66+
def edit_changeset(funnel, name, steps, opts \\ []) do
67+
open? = Keyword.get(opts, :open?, false)
68+
Funnel.changeset(funnel, %{name: name, steps: steps, open: open?})
6569
end
6670

67-
@spec ephemeral_definition(Plausible.Site.t(), String.t(), [map()]) :: Funnel.t()
68-
def ephemeral_definition(site, name, steps) do
71+
@spec ephemeral_definition(Plausible.Site.t(), String.t(), [map()], Keyword.t()) :: Funnel.t()
72+
def ephemeral_definition(site, name, steps, opts \\ []) do
6973
site
70-
|> create_changeset(name, steps)
74+
|> create_changeset(name, steps, opts)
7175
|> Ecto.Changeset.apply_changes()
7276
end
7377

extra/lib/plausible_web/live/funnel_settings/form.ex

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,12 @@ defmodule PlausibleWeb.Live.FunnelSettings.Form do
7979
label="Funnel Name"
8080
/>
8181
82+
<.input
83+
type="checkbox"
84+
field={f[:open]}
85+
label="Open funnel"
86+
/>
87+
8288
<div id="steps-builder" class="mt-6">
8389
<.label>
8490
Funnel Steps
@@ -245,7 +251,8 @@ defmodule PlausibleWeb.Live.FunnelSettings.Form do
245251
socket.assigns.site
246252
|> Funnels.create_changeset(
247253
params["name"],
248-
steps_from_assigns
254+
steps_from_assigns,
255+
open?: params["open"] == "true"
249256
)
250257
|> Map.put(:action, :validate)
251258

@@ -262,10 +269,10 @@ defmodule PlausibleWeb.Live.FunnelSettings.Form do
262269
save_fn =
263270
case funnel do
264271
%Plausible.Funnel{} ->
265-
fn -> Funnels.update(funnel, params["name"], steps) end
272+
fn -> Funnels.update(funnel, params["name"], steps, open?: params["open"] == "true") end
266273

267274
nil ->
268-
fn -> Funnels.create(site, params["name"], steps) end
275+
fn -> Funnels.create(site, params["name"], steps, open?: params["open"] == "true") end
269276
end
270277

271278
case save_fn.() do
@@ -423,7 +430,8 @@ defmodule PlausibleWeb.Live.FunnelSettings.Form do
423430
funnel
424431
|> Funnels.edit_changeset(
425432
funnel.name,
426-
Enum.map(funnel.steps, &%{goal_id: &1.goal.id})
433+
Enum.map(funnel.steps, &%{goal_id: &1.goal.id}),
434+
open?: funnel.open
427435
)
428436
|> to_form()
429437

test/plausible_web/controllers/api/stats_controller/funnels_test.exs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -613,9 +613,12 @@ defmodule PlausibleWeb.Api.StatsController.FunnelsTest do
613613
{:ok, goals}
614614
end
615615

616-
defp setup_funnel(site, goal_names) do
616+
defp setup_funnel(site, goal_names, open? \\ false) do
617617
{:ok, goals} = setup_goals(site, goal_names)
618-
Plausible.Funnels.create(site, "Test funnel", Enum.map(goals, &%{"goal_id" => &1.id}))
618+
619+
Plausible.Funnels.create(site, "Test funnel", Enum.map(goals, &%{"goal_id" => &1.id}),
620+
open?: open?
621+
)
619622
end
620623
end
621624
end

0 commit comments

Comments
 (0)