# Copyright The OpenTelemetry Authors
# SPDX-License-Identifier: Apache-2.0
defmodule FlagdUiWeb.AdvancedEditor do
use FlagdUiWeb, :live_view
alias FlagdUiWeb.CoreComponents
alias FlagdUiWeb.Components.Navbar
def mount(_, _, socket) do
state = GenServer.call(Storage, :read)
content = Jason.encode!(state, pretty: true)
{:ok,
socket
|> assign(content: content)
|> assign(unsaved_changes: false)}
end
def render(assigns) do
~H"""
"""
end
def handle_event("edit", payload, socket) do
%{"content" => content} = payload
{:noreply,
socket
|> assign(content: content)
|> assign(unsaved_changes: true)}
end
def handle_event(
"save",
_,
%{
assigns: %{
content: content
}
} = socket
) do
new_socket =
case Jason.decode(content) do
{:ok, _} ->
trimmed_content = String.trim(content)
GenServer.cast(Storage, {:replace, trimmed_content})
socket
|> assign(unsaved_changes: false)
|> assign(content: trimmed_content)
|> clear_flash()
|> put_flash(:info, "Saved!")
{:error, _} ->
put_flash(socket, :error, "Invalid JSON")
end
{:noreply, new_socket}
end
end