Files
awesome-copilot/website/src/scripts/pages/agents.ts
T
github-actions[bot] 51b6fa0253 chore: publish from main
2026-07-10 03:24:21 +00:00

87 lines
2.0 KiB
TypeScript

/**
* Agents page functionality
*/
import {
fetchData,
getQueryParam,
setupActionHandlers,
setupDropdownCloseHandlers,
updateQueryParams,
} from '../utils';
import {
renderAgentsHtml,
sortAgents,
type AgentSortOption,
type RenderableAgent,
} from './agents-render';
interface Agent extends RenderableAgent {
lastUpdated?: string | null;
}
interface AgentsData {
items: Agent[];
}
let allItems: Agent[] = [];
let currentSort: AgentSortOption = 'title';
function applyFiltersAndRender(): void {
const countEl = document.getElementById('results-count');
const results = sortAgents(allItems, currentSort);
renderItems(results);
if (countEl) {
countEl.textContent = `${results.length} agent${results.length === 1 ? '' : 's'}`;
}
}
function renderItems(items: Agent[]): void {
const list = document.getElementById('resource-list');
if (!list) return;
list.innerHTML = renderAgentsHtml(items);
}
function syncUrlState(): void {
updateQueryParams({
q: '',
model: [],
tool: [],
handoffs: false,
sort: currentSort === 'title' ? '' : currentSort,
});
}
export async function initAgentsPage(): Promise<void> {
const list = document.getElementById('resource-list');
const sortSelect = document.getElementById('sort-select') as HTMLSelectElement;
const data = await fetchData<AgentsData>('agents.json');
if (!data || !data.items) {
if (list) list.innerHTML = '<div class="empty-state"><h3>Failed to load data</h3></div>';
return;
}
allItems = data.items;
const initialSort = getQueryParam('sort');
if (initialSort === 'lastUpdated') {
currentSort = initialSort;
if (sortSelect) sortSelect.value = initialSort;
}
sortSelect?.addEventListener('change', () => {
currentSort = sortSelect.value as AgentSortOption;
applyFiltersAndRender();
syncUrlState();
});
applyFiltersAndRender();
setupDropdownCloseHandlers();
setupActionHandlers();
}
// Auto-initialize when DOM is ready
document.addEventListener('DOMContentLoaded', initAgentsPage);