# 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"""
<.form for={%{}}>

Unsaved changes

""" 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