← Files Codex Security CloudARCHIVED FILE

.internal/defense-factory-ui/src/workbench/overview-filters.ts

1.69 KB · Oct 5, 2026 · 18:24 UTC

↓ Download file

import {
  isOverviewDateRangeTooLong,
  parseOverviewDateRange,
  type OverviewDateRange,
} from "../overview-dates";

export function getOverviewRepositories(search: string): string[] {
  return Array.from(
    new Set(
      (new URLSearchParams(search).get("repo") ?? "")
        .split(",")
        .map((repo) => repo.trim())
        .filter((repo) => repo && repo.toLowerCase() !== "all"),
    ),
  ).sort();
}

export function getOverviewSearch(
  dateRange: OverviewDateRange,
  repositories: string[],
  search = "",
): string {
  const params = new URLSearchParams(
    getPipelineSearch("", getPipelineDateRange(search)),
  );
  params.set("start", dateRange.startDate);
  params.set("end", dateRange.endDate);
  const selected = Array.from(new Set(repositories.filter(Boolean))).sort();
  if (selected.length > 0) params.set("repo", selected.join(","));
  else params.delete("repo");
  return `?${params}`;
}

// Pipeline discovery dates are independent of the activity charts' date range.
export function getPipelineDateRange(
  search: string,
): OverviewDateRange | undefined {
  const params = new URLSearchParams(search);
  const range = parseOverviewDateRange(
    params.get("pipeline_start"),
    params.get("pipeline_end"),
  );
  return range && !isOverviewDateRangeTooLong(range) ? range : undefined;
}

export function getPipelineSearch(
  search: string,
  range: OverviewDateRange | undefined,
): string {
  const params = new URLSearchParams(search);
  if (range) {
    params.set("pipeline_start", range.startDate);
    params.set("pipeline_end", range.endDate);
  } else {
    params.delete("pipeline_start");
    params.delete("pipeline_end");
  }
  return params.size > 0 ? `?${params}` : "";
}

SHA-256: 057321f724a97352dca5be232d84d63c41c8d980bb032594483b861c0ba9537f