+
+
+
+ {t('global.resultCount')} {pagination.pageSize} — {pagination.pageIndex + 1} / {pageCount}
+
+
+
+
+
+
+
+
+ )}
+ >
+ );
+};
+
+export default ApiRegistryTable;
diff --git a/GUI/src/pages/ApiRegistryPage/columns.tsx b/GUI/src/pages/ApiRegistryPage/columns.tsx
new file mode 100644
index 000000000..946bc42b4
--- /dev/null
+++ b/GUI/src/pages/ApiRegistryPage/columns.tsx
@@ -0,0 +1,147 @@
+import { createColumnHelper } from '@tanstack/react-table';
+import { Button, Icon, Tooltip, Track } from 'components';
+import { format } from 'date-fns';
+import { TFunction } from 'i18next';
+import React from 'react';
+import { MdCheck, MdClose } from 'react-icons/md';
+import { VerificationMetadata } from 'store/api-registry.store';
+import { EndpointData } from 'types/endpoint';
+
+const NAME_MAX = 30;
+const ELLIPSIS = '…';
+
+export function truncateName(label: string): string {
+ if (label && label.length <= NAME_MAX) return label;
+ if (label) return label.slice(0, 29) + ELLIPSIS;
+ return '—';
+}
+
+export function formatLastTest(lastTestAt: string | null): string {
+ if (lastTestAt) {
+ try {
+ const d = new Date(lastTestAt);
+ return format(d, 'dd.MM.yyyy HH:mm');
+ } catch {
+ // fallthrough
+ }
+ }
+ return '—';
+}
+
+export function formatStatus(meta: VerificationMetadata | undefined): { icon: React.ReactNode; text: string } {
+ if (meta?.verificationStatus === 'verified') {
+ return { icon: