defmodule DaProductAppWeb.SbomComponentOldLive do use DaProductAppWeb, :live_view import Logger alias DaProductApp.Users alias DaProductAppWeb.Router.Helpers, as: Routes # on_mount DaProductAppWeb.Live.SetCurrentPage @impl true def mount(_params, session, socket) do changeset = build_changeset() current_user = session["user_token"] |> Users.get_user_by_session_token() || nil socket = socket |> assign(:current_user, current_user) |> assign(:show_sidebar, true) # Enable sidebar for dashboard |> assign(:page_title, "SBOM Component") # Set the page title {:ok, assign(socket, modal: false, slide_over: false, group_size: "md", pagination_page: 1, total_pages: 10, form: to_form(changeset, as: :object), form2: to_form(changeset, as: :object2), show_childbom_spdx: false, show_checksum_details: false, active_tab: :live )} end def handle_event("toggle_childbom", _params, socket) do new_value = !socket.assigns.show_childbom_spdx {:noreply, assign(socket, show_childbom_spdx: new_value)} end def handle_event("toggle_checksum_type", %{"value" => "File"}, socket) do {:noreply, assign(socket, show_checksum_details: true)} end def handle_event("toggle_checksum_type", _params, socket) do {:noreply, assign(socket, show_checksum_details: false)} end @impl true def handle_event("validate", %{"object" => object_params}, socket) do changeset = object_params |> build_changeset() |> Map.put(:action, :validate) {:noreply, assign_form(socket, changeset)} end @impl true def handle_event("submit", %{"object" => object_params}, socket) do changeset = build_changeset(object_params) case validate_changeset(changeset) do {:ok, _object} -> socket = socket |> put_flash(:success, "Object successfully created") |> assign_form(build_changeset()) {:noreply, socket} {:error, changeset} -> socket = socket |> put_flash(:error, inspect(changeset.errors)) {:noreply, assign_form(socket, changeset)} end end defp assign_form(socket, changeset) do assign(socket, form: to_form(changeset, as: :object)) end defp build_changeset(params \\ %{}) do data = %{} types = %{ text: :string, select: :string, checkbox_group: {:array, :string}, radio_group: :string, textarea: :string, checkbox: :boolean, color: :string, date: :date, datetime: :naive_datetime, email: :string, file: :string, hidden: :string, month: :string, number: :integer, password: :string, radio: :string, range: :integer, search: :string, tel: :string, time: :time, url: :string, week: :string, switch: :boolean } {data, types} |> Ecto.Changeset.cast(params, Map.keys(types)) |> Ecto.Changeset.validate_required([:text]) |> Ecto.Changeset.validate_acceptance(:checkbox) |> Ecto.Changeset.validate_length(:text, min: 3, max: 50) end defp validate_changeset(changeset) do Ecto.Changeset.apply_action(changeset, :validate) end @impl true def handle_params(params, _uri, socket) do case socket.assigns.live_action do :index -> {:noreply, assign(socket, modal: false, slide_over: false)} :modal -> {:noreply, assign(socket, modal: params["size"])} :slide_over -> {:noreply, assign(socket, slide_over: params["origin"])} :pagination -> {:noreply, assign(socket, pagination_page: String.to_integer(params["page"]))} end end @impl true def render(assigns) do ~H""" SwiftBOM - SBOM Generator

Organization Info

Document Name

ACME-INFUSION-1.0-SBOM-DRAFT

Application

Primary Component

Application Name

Components

<.button label="+" link_type="live_patch" to={~p"/sbomcomponent/right"} />
Component Name Version Action
Example Component 1.0
<%= if @slide_over do %> <.slide_over origin={@slide_over} title="SlideOver">
<.form for={@form} phx-submit="submit" phx-change="validate"> <.field type="checkbox" label="Child BOM exists" field={@form[:childbom]} phx-click="toggle_childbom" /> <%= if @show_childbom_spdx do %> <.field type="file" label="Child BOM SPDX" field={@form[:child_bom_spdx]} /> <% end %> <.field label="Component Name" field={@form[:component_name]} /> <.field label="Version" field={@form[:version]} /> <.field field={@form[:supplier]} label="Supplier Name">
<.field field={@form[:supplier_type]} type="select" options={[{"Organization", "organization"}, {"Person", "person"}, {"Tools", "tools"}]} help_text="Select Suppliers type" /> <.field field={@form[:supplier_name]}> <.input placeholder="Enter name" />
<.field field={@form[:supplier_type]} type="select" options={[{"Organization", "organization"}, {"Person", "person"}, {"Tools", "tools"}]} help_text="Select Suppliers type" /> <.field label="Relationship" field={@form[:relationship]} type="select" options={[{"Included","included"}, {"Primary","primary"}]} /> <.field field={@form[:checksum_type]} type="select" options={[{"File","File"}, {"Package","Package"}]} phx-click="toggle_checksum_type" help_text="Select Component types" /> <%= if @show_checksum_details do %> <.field label="Algorithm" field={@form[:checksum_algorithm]} type="select" options={[{"SHA1","SHA1"}, {"SHA256","SHA256"},{"MD5", "MD5"}]} /> <.field label="File Name" field={@form[:checksum_filename]} /> <.field label="Checksum Value" field={@form[:checksum_value]} /> <% end %>
<.button type="button" label="Cancel" color="white" phx-click={PetalComponents.SlideOver.hide_slide_over(@slide_over)} /> <.button type="submit" label="Submit" />
<% end %> """ end @impl true def handle_event("close_slide_over", _, socket) do {:noreply, push_patch(socket, to: "/sbomcomponent")} end end