lib/tabs/tabs.controller.ex

defmodule FloUI.TabsController do
  alias Scenic.Graph
  alias Scenic.Primitive

  def on_tab_change(%{assigns: %{graph: graph, active_tab: active_tab, tabs: tabs}} = scene) do
    graph =
      Enum.reduce(tabs, graph, fn {_label, cmp}, g ->
        if cmp == active_tab do
          Graph.modify(g, cmp, &Primitive.put_style(&1, :hidden, false))
        else
          Graph.modify(g, cmp, &Primitive.put_style(&1, :hidden, true))
        end
      end)

    Scenic.Scene.assign(scene, graph: graph)
  end
end