fix(scrapers/ui): дедуп queryKey cian test-auth + a11y (th scope, табы ARIA, статус-точки aria-label)
- cian/page.tsx: отдельный queryKey ["cian-test-auth", "manual"] для ручного testAuthQuery в CianCookiesSection — устраняет кросс-контаминацию с автопуллингом useTestAuth() (refetchInterval:60s) и ручной кнопкой "Test Current Session" - RunsTable.tsx, ScraperPage.tsx (RunsLogSection), ProxyHealthCard.tsx: scope="col" на все <th> в thead — соответствие WCAG SC 1.3.1 (Info and Relationships) - Topbar.tsx: aria-current="page" на активный nav-link вместо tablist/tabpanel — корректный паттерн для link-based навигации между отдельными страницами - ProxyHealthCard.tsx: role="img" + aria-label на цветовые dot-индикаторы статуса browser-инстансов — цвет больше не единственный носитель смысла (WCAG 1.4.1)
This commit is contained in:
parent
7639dfe5fd
commit
fa65c3f212
5 changed files with 26 additions and 23 deletions
|
|
@ -325,16 +325,16 @@ function RunsLogSection({ source }: RunsLogSectionProps) {
|
|||
<table className="runs-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>Статус</th>
|
||||
<th>Старт</th>
|
||||
<th>Heartbeat</th>
|
||||
<th>Anchors</th>
|
||||
<th>Lots</th>
|
||||
<th>Houses</th>
|
||||
<th>Detail</th>
|
||||
<th>Errors</th>
|
||||
<th>Действие</th>
|
||||
<th scope="col">#</th>
|
||||
<th scope="col">Статус</th>
|
||||
<th scope="col">Старт</th>
|
||||
<th scope="col">Heartbeat</th>
|
||||
<th scope="col">Anchors</th>
|
||||
<th scope="col">Lots</th>
|
||||
<th scope="col">Houses</th>
|
||||
<th scope="col">Detail</th>
|
||||
<th scope="col">Errors</th>
|
||||
<th scope="col">Действие</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
|
|
|||
|
|
@ -238,7 +238,7 @@ function CianCookiesSection() {
|
|||
});
|
||||
|
||||
const testAuthQuery = useQuery({
|
||||
queryKey: ["cian-test-auth"],
|
||||
queryKey: ["cian-test-auth", "manual"],
|
||||
queryFn: () =>
|
||||
apiFetch<TestAuthResp>("/api/v1/admin/scrape/cian/test-auth"),
|
||||
enabled: false,
|
||||
|
|
|
|||
|
|
@ -279,6 +279,8 @@ export function SystemHealthSection() {
|
|||
{name}:
|
||||
</span>
|
||||
<span
|
||||
role="img"
|
||||
aria-label={ok ? "статус: доступен" : "статус: недоступен"}
|
||||
style={{
|
||||
width: 8,
|
||||
height: 8,
|
||||
|
|
@ -299,11 +301,11 @@ export function SystemHealthSection() {
|
|||
<table className="runs-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Провайдер</th>
|
||||
<th>Прокси (host:port)</th>
|
||||
<th>Текущий IP</th>
|
||||
<th>Режим</th>
|
||||
<th>Действие</th>
|
||||
<th scope="col">Провайдер</th>
|
||||
<th scope="col">Прокси (host:port)</th>
|
||||
<th scope="col">Текущий IP</th>
|
||||
<th scope="col">Режим</th>
|
||||
<th scope="col">Действие</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
|
|
|||
|
|
@ -238,13 +238,13 @@ export function RunsTable({ source }: RunsTableProps) {
|
|||
<table className="runs-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>#</th>
|
||||
<th>Тип</th>
|
||||
<th>Статус</th>
|
||||
<th>Старт</th>
|
||||
<th>Финиш</th>
|
||||
<th>Лоты / Ошибки</th>
|
||||
<th>Действие</th>
|
||||
<th scope="col">#</th>
|
||||
<th scope="col">Тип</th>
|
||||
<th scope="col">Статус</th>
|
||||
<th scope="col">Старт</th>
|
||||
<th scope="col">Финиш</th>
|
||||
<th scope="col">Лоты / Ошибки</th>
|
||||
<th scope="col">Действие</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
|
|
|||
|
|
@ -140,6 +140,7 @@ export function Topbar({ active }: TopbarProps) {
|
|||
key={item.key}
|
||||
href={`${API_BASE_URL}${item.href}`}
|
||||
className={item.key === active ? "is-active" : undefined}
|
||||
aria-current={item.key === active ? "page" : undefined}
|
||||
>
|
||||
{item.label}
|
||||
</a>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue