defmodule FrenzyWeb.ConfigureStage.ScrapeStageLive do use FrenzyWeb, :live_component @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 update(assigns, socket) do assigns = Map.put(assigns, :opts, Frenzy.Keypath.get(assigns.stage, assigns.keypath)) {:ok, assign(socket, assigns)} 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) new_stage = Frenzy.Keypath.set(socket.assigns.stage, socket.assigns.keypath, new_opts) send(self(), {:update_stage, socket.assigns.index, new_stage}) {:noreply, socket} end end