| defmodule PlausibleWeb.Plugins.API.Views.Funnel do |
| @moduledoc """ |
| View for rendering Funnels in the Plugins API |
| """ |
|
|
| use PlausibleWeb, :plugins_api_view |
|
|
| def render("index.json", %{ |
| pagination: %{entries: funnels, metadata: metadata}, |
| authorized_site: site, |
| conn: conn |
| }) do |
| %{ |
| funnels: |
| render_many(funnels, __MODULE__, "funnel.json", authorized_site: site, as: :funnel), |
| meta: render_metadata_links(metadata, :plugins_api_funnels_url, :index, conn.query_params) |
| } |
| end |
|
|
| def render("index.json", %{ |
| funnels: funnels, |
| authorized_site: site, |
| conn: conn |
| }) do |
| %{ |
| funnels: |
| render_many(funnels, __MODULE__, "funnel.json", authorized_site: site, as: :funnel), |
| meta: render_metadata_links(%{}, :plugins_api_funnels_url, :index, conn.query_params) |
| } |
| end |
|
|
| def render( |
| "funnel.json", |
| %{ |
| funnel: funnel, |
| authorized_site: site |
| } |
| ) do |
| goals = Enum.map(funnel.steps, & &1.goal) |
|
|
| %{ |
| funnel: %{ |
| name: funnel.name, |
| id: funnel.id, |
| steps: |
| render_many(goals, PlausibleWeb.Plugins.API.Views.Goal, "goal.json", |
| authorized_site: site, |
| as: :goal |
| ) |
| } |
| } |
| end |
| end |
|
|