frenzy/lib/frenzy_web/live/configure_stage/scrape_stage_live.ex

52 lines
1.7 KiB
Elixir

defmodule FrenzyWeb.ConfigureStage.ScrapeStageLive do
use FrenzyWeb, :live_component
alias Frenzy.JSONSchema
@extractors [
{"Builtin", "builtin"},
{"beckyhansmeyer.com", Frenzy.Pipeline.Extractor.BeckyHansmeyer},
{"daringfireball.net", Frenzy.Pipeline.Extractor.DaringFireball},
{"ericasadun.com", Frenzy.Pipeline.Extractor.EricaSadun},
{"finertech.com", Frenzy.Pipeline.Extractor.FinerTech},
{"macstories.net", Frenzy.Pipeline.Extractor.MacStories},
{"om.co", Frenzy.Pipeline.Extractor.OmMalik},
{"whatever.scalzi.com", Frenzy.Pipeline.Extractor.WhateverScalzi}
]
|> Enum.map(fn {pretty_name, module} ->
{
pretty_name,
case module do
"builtin" -> "builtin"
module -> module |> to_string() |> String.slice(7..-1)
end
}
end)
@schema %{
"convert_to_data_uris" => :boolean,
"extractor" => :string
}
@impl true
def mount(socket) do
{:ok, assign(socket, extractors: @extractors)}
end
@impl true
def handle_event(
"update_stage",
%{"opts" => %{"convert_to_data_uris" => convert_to_data_uris, "extractor" => extractor}},
socket
) do
convert_to_data_uris = String.downcase(convert_to_data_uris) == "true"
new_opts =
socket.assigns.opts
|> Map.put("convert_to_data_uris", convert_to_data_uris)
|> Map.put("extractor", extractor)
send(self(), {:update_stage_opts, socket.assigns.index, new_opts})
{:noreply, socket}
end
end