src/devtools/tabs/forms-tab.tsx

Total Symbols
7
Lines of Code
140
Avg Complexity
3.9
Symbol Types
2

File Relationships

graph LR loadForms["loadForms"] renderFormsTab["renderFormsTab"] deleteFormById["deleteFormById"] setFormAsDefault["setFormAsDefault"] applySavedForm["applySavedForm"] async["async"] loadForms -->|calls| renderFormsTab deleteFormById -->|calls| renderFormsTab setFormAsDefault -->|calls| renderFormsTab renderFormsTab -->|calls| loadForms renderFormsTab -->|calls| applySavedForm async -->|calls| renderFormsTab renderFormsTab -->|calls| setFormAsDefault renderFormsTab -->|calls| deleteFormById click loadForms "../symbols/3391078a65ee3af5.html" click renderFormsTab "../symbols/7a55f79022abf472.html" click deleteFormById "../symbols/083b254eba6bc278.html" click setFormAsDefault "../symbols/6756980caac3d930.html" click applySavedForm "../symbols/c905e140680aa3a7.html" click async "../symbols/4144745a7964d182.html"

Symbols by Kind

function 6
method 1

All Symbols

Name Kind Visibility Status Lines Signature
loadForms function exported- 20-39 loadForms(): : Promise<void>
applySavedForm function exported- 43-54 applySavedForm(form: SavedForm): : Promise<void>
saveCurrentForm function exported- 58-73 saveCurrentForm(): : Promise<void>
deleteFormById function exported- 77-88 deleteFormById(formId: string): : Promise<void>
setFormAsDefault function exported- 92-104 setFormAsDefault(formId: string): : Promise<void>
renderFormsTab function exported- 108-139 renderFormsTab(): : void
async method - 117-130 async(updated, isNew)

Full Source

/**
 * Forms Tab — Saved forms management (list, view, edit, create, apply, delete).
 *
 * Responsibilities:
 * - Load and display saved forms
 * - Edit and create form field entries (via modal in FormsTabView)
 * - Apply a saved form to the inspected page
 * - Set default form / delete form
 */

import type { SavedForm } from "@/types";
import { t } from "@/lib/i18n";
import { panelState } from "../panel-state";
import { sendToPage, sendToBackground } from "../panel-messaging";
import { addLog } from "../panel-utils";
import { renderTo, FormsTabView } from "@/lib/ui/components";

// ── Load ──────────────────────────────────────────────────────────────────────

export async function loadForms(): Promise<void> {
  addLog(t("logLoadingForms"));
  try {
    const result = (await sendToBackground({
      type: "GET_SAVED_FORMS",
    })) as SavedForm[] | { error?: string };
    if (Array.isArray(result)) {
      panelState.savedForms = result;
      addLog(`${result.length} ${t("formCount")}`, "success");
    } else {
      panelState.savedForms = [];
      addLog(t("logNoFormsSaved"), "warn");
    }
  } catch (err) {
    addLog(`Erro: ${err}`, "error");
    panelState.savedForms = [];
  }
  panelState.formsLoaded = true;
  if (panelState.activeTab === "forms") renderFormsTab();
}

// ── Apply ─────────────────────────────────────────────────────────────────────

export async function applySavedForm(form: SavedForm): Promise<void> {
  addLog(t("logApplyingTemplate") + ": " + form.name);
  try {
    const result = (await sendToPage({
      type: "APPLY_TEMPLATE",
      payload: form,
    })) as { filled?: number };
    addLog(`${result?.filled ?? 0} ${t("filled")}`, "success");
  } catch (err) {
    addLog(`Erro: ${err}`, "error");
  }
}

// ── Save Current ──────────────────────────────────────────────────────────────

export async function saveCurrentForm(): Promise<void> {
  addLog(t("logSavingForm"));
  try {
    const result = (await sendToPage({ type: "SAVE_FORM" })) as {
      success?: boolean;
      form?: SavedForm;
    };
    if (result?.success) {
      addLog(`${t("logFormSaved")}: ${result.form?.name ?? ""}`, "success");
    } else {
      addLog(t("logErrorSavingForm"), "error");
    }
  } catch (err) {
    addLog(`Erro: ${err}`, "error");
  }
}

// ── Delete ────────────────────────────────────────────────────────────────────

export async function deleteFormById(formId: string): Promise<void> {
  try {
    await sendToBackground({ type: "DELETE_FORM", payload: formId });
    panelState.savedForms = panelState.savedForms.filter(
      (f) => f.id !== formId,
    );
    addLog(t("logFormRemoved"), "info");
    renderFormsTab();
  } catch (err) {
    addLog(`Erro ao remover: ${err}`, "error");
  }
}

// ── Set Default ───────────────────────────────────────────────────────────────

export async function setFormAsDefault(formId: string): Promise<void> {
  try {
    await sendToBackground({ type: "SET_DEFAULT_FORM", payload: formId });
    panelState.savedForms = panelState.savedForms.map((f) => ({
      ...f,
      isDefault: f.id === formId ? true : undefined,
    }));
    addLog(t("logFormSetDefault"), "success");
    renderFormsTab();
  } catch (err) {
    addLog(`Erro ao definir padrão: ${err}`, "error");
  }
}

// ── Render ────────────────────────────────────────────────────────────────────

export function renderFormsTab(): void {
  const content = document.getElementById("content");
  renderTo(
    content,
    <FormsTabView
      savedForms={panelState.savedForms}
      formsLoaded={panelState.formsLoaded}
      onLoad={() => void loadForms()}
      onApply={(form) => void applySavedForm(form)}
      onSave={async (updated, isNew) => {
        await sendToBackground({ type: "UPDATE_FORM", payload: updated });
        if (isNew) {
          panelState.savedForms = [...panelState.savedForms, updated];
          addLog(`${t("logFormSaved")}: ${updated.name}`, "success");
        } else {
          const idx = panelState.savedForms.findIndex(
            (f) => f.id === updated.id,
          );
          if (idx >= 0) panelState.savedForms[idx] = updated;
          addLog(`${t("logTemplateUpdated")}: ${updated.name}`, "success");
        }
        renderFormsTab();
      }}
      onSetDefault={(form) => void setFormAsDefault(form.id)}
      onDelete={(form) => {
        if (window.confirm(t("msgConfirmDeleteForm"))) {
          void deleteFormById(form.id);
        }
      }}
    />,
  );
}