renderStrategyList function

Last updated: 2026-03-03T18:32:34.140Z

Metrics

LOC: 73 Complexity: 9 Params: 1

Signature

renderStrategyList(pipeline: DetectionStrategyEntry[]): : void

Source Code

function renderStrategyList(pipeline: DetectionStrategyEntry[]): void {
  const list = document.getElementById("strategy-list");
  if (!list) {
    return;
  }

  list.innerHTML = "";

  pipeline.forEach((entry, idx) => {
    const item = document.createElement("div");
    item.className = "strategy-item";
    item.draggable = true;
    item.dataset.idx = String(idx);

    item.innerHTML = `
      <span class="strategy-drag-handle" title="${escapeHtml(t("dragToReorder"))}">⠿</span>
      <div class="strategy-info">
        <span class="strategy-name">${escapeHtml(t(STRATEGY_LABEL_KEYS[entry.name] ?? entry.name))}</span>
        <span class="strategy-desc">${escapeHtml(t(STRATEGY_DESC_KEYS[entry.name] ?? ""))}</span>
      </div>
      <label class="toggle" style="flex-shrink: 0;">
        <input type="checkbox" class="strategy-toggle" data-name="${escapeHtml(entry.name)}" ${entry.enabled ? "checked" : ""} />
        <span class="slider"></span>
      </label>
    `;

    item.addEventListener("dragstart", (e) => {
      _dragSrcIdx = idx;
      item.classList.add("dragging");
      if (e.dataTransfer) e.dataTransfer.effectAllowed = "move";
    });

    item.addEventListener("dragend", () => {
      item.classList.remove("dragging");
      _dragSrcIdx = null;
      list
        .querySelectorAll(".strategy-item")
        .forEach((el) => el.classList.remove("drag-over"));
    });

    item.addEventListener("dragover", (e) => {
      e.preventDefault();
      if (e.dataTransfer) e.dataTransfer.dropEffect = "move";
      item.classList.add("drag-over");
    });

    item.addEventListener("dragleave", () => {
      item.classList.remove("drag-over");
    });

    item.addEventListener("drop", (e) => {
      e.preventDefault();
      item.classList.remove("drag-over");
      if (_dragSrcIdx === null || _dragSrcIdx === idx) return;
      const current = getPipelineFromDOM();
      const [dragged] = current.splice(_dragSrcIdx, 1);
      current.splice(idx, 0, dragged);
      renderStrategyList(current);
      void saveStrategiesSettings();
    });

    const toggle = item.querySelector<HTMLInputElement>(".strategy-toggle");
    toggle?.addEventListener("change", () => {
      void saveStrategiesSettings();
    });

    list.appendChild(item);
    console.log(`[renderStrategyList] Item ${idx} adicionado ao DOM`);
  });
  console.log(
    `[renderStrategyList] Renderização completa! Total de itens: ${pipeline.length}`,
  );
}

Dependencies (Outgoing)

graph LR renderStrategyList["renderStrategyList"] getPipelineFromDOM["getPipelineFromDOM"] saveStrategiesSettings["saveStrategiesSettings"] renderStrategyList -->|calls| getPipelineFromDOM renderStrategyList -->|calls| renderStrategyList renderStrategyList -->|calls| saveStrategiesSettings style renderStrategyList fill:#dbeafe,stroke:#2563eb,stroke-width:2px click renderStrategyList "68debcb90d51dc3a.html" click getPipelineFromDOM "1d6d4d0dd7790d61.html" click saveStrategiesSettings "d7d0ff227afbf123.html"
TargetType
getPipelineFromDOM calls
renderStrategyList calls
saveStrategiesSettings calls
dragstart dynamic_call
dragend dynamic_call
dragover dynamic_call
dragleave dynamic_call
drop dynamic_call
change dynamic_call

Impact (Incoming)

graph LR renderStrategyList["renderStrategyList"] loadSettings["loadSettings"] renderStrategyList -->|calls| renderStrategyList loadSettings -->|calls| renderStrategyList style renderStrategyList fill:#dbeafe,stroke:#2563eb,stroke-width:2px click renderStrategyList "68debcb90d51dc3a.html" click loadSettings "6569479f3c7ea49f.html"
SourceType
renderStrategyList calls
loadSettings calls