-
- void listsQ.refetch()}
- onSelect={selectList}
- onCreate={() => setCreateOpen(true)}
- onRefresh={(id) => refresh.mutate(id)}
- onDelete={setDeleteListId}
- refreshPending={refresh.isPending}
- />
-
-
-
- {!listId ? (
-
-
-
- ) : listQ.isLoading ? (
-
-
-
-
-
- ) : !detail ? (
-
- selectList(undefined)}
- >
- К каталогу
-
- }
- />
-
- ) : (
-
-
-
-
-
- {manual ? (
-
- ) : null}
- >
- }
- />
-
- ,
- iconClassName: 'text-info',
- label: 'Записей',
- description: String(entryItems.length),
- hint: manual ? 'ручной список' : 'внешний источник',
- },
- {
- id: 'type',
- icon: ,
- iconClassName: 'text-primary',
- label: 'Источник',
- description:
- detail.type === 'json_url'
- ? 'JSON'
- : detail.type === 'evobgp_community'
- ? 'EvoBGP'
- : 'Ручной',
- hint:
- detail.type === 'json_url'
- ? 'JSON по URL'
- : detail.type === 'evobgp_community'
- ? 'community prefixes'
- : 'IP / CIDR / домен / список',
- },
- {
- id: 'cidrs',
- icon: ,
- iconClassName: 'text-success',
- label: 'CIDR в политике',
- description: String(
- detail.entry_count ?? detail.entries.length,
- ),
- hint: 'materialized',
- },
- ]}
- />
-
-
- `${r.kind}:${r.value}`}
- filterFields={entryFilterFields}
- filters={entryFilters}
- onFiltersChange={setEntryFilters}
- onClearFilters={() => setEntryFilters([])}
- getFilterFieldValue={getEntryFilterValue}
- emptyState={{
- title: 'Нет записей',
- description: manual
- ? 'Добавьте IP, CIDR, домен или другой список.'
- : 'Нажмите Refresh или проверьте источник.',
- action: manual ? (
-
- ) : undefined,
- }}
- />
-
-
- {detail.last_error ? (
- {detail.last_error}
- ) : null}
-
- )}
-
-
+