diff --git a/webui/src/features/docs/DocsPage.tsx b/webui/src/features/docs/DocsPage.tsx index d7a6090..9bc548d 100644 --- a/webui/src/features/docs/DocsPage.tsx +++ b/webui/src/features/docs/DocsPage.tsx @@ -3,6 +3,7 @@ import { Link, useLocation } from "react-router-dom"; import { ChevronDown, ChevronRight, RefreshCw } from "lucide-react"; import { Button, + DataGrid, DismissibleAlert, ExplorerTree, LoadingFrame, @@ -12,7 +13,8 @@ import { adminErrorMessage, useGuardedNavigate, usePlatformLanguage, - type ApiSettings + type ApiSettings, + type DataGridColumn } from "@govoplan/core-webui"; import { fetchDocsContext, @@ -404,34 +406,18 @@ function ReferenceDetails({ topic, showTechnical, documentationType, topicById } } function ReferenceFieldTable({ id, fields, showTechnical }: { id: string; fields: Record[]; showTechnical: boolean }) { + const columns: DataGridColumn>[] = [ + { id: "field", header: "i18n:govoplan-docs.field.7558c082", width: "minmax(180px, .8fr)", minWidth: 160, resizable: true, sortable: true, filterable: true, value: (field) => metadataString(field, "label"), render: (field) => {metadataString(field, "label")} }, + { id: "meaning", header: "i18n:govoplan-docs.meaning.584d8aa0", width: "minmax(260px, 1.3fr)", minWidth: 220, resizable: true, filterable: true, value: (field) => [metadataString(field, "user_description"), metadataString(field, "admin_description"), metadataString(field, "provenance")].join(" "), render: (field) =>
{metadataString(field, "user_description")}{showTechnical && metadataString(field, "admin_description") && {metadataString(field, "admin_description")}}{showTechnical && metadataString(field, "provenance") && {metadataString(field, "provenance")}}
}, + ...(showTechnical ? [ + { id: "api", header: "i18n:govoplan-docs.api_mapping.e969f6f7", width: "minmax(190px, .8fr)", minWidth: 170, resizable: true, filterable: true, value: (field: Record) => `${metadataString(field, "api_path")} ${metadataString(field, "api_field")}`, render: (field: Record) =>
{metadataString(field, "api_path")}{metadataString(field, "api_field")}
}, + { id: "permission", header: "i18n:govoplan-docs.permission.d71c9448", width: 190, filterable: true, value: (field: Record) => metadataString(field, "permission_scope") || "-", render: (field: Record) => metadataString(field, "permission_scope") || "-" } + ] satisfies DataGridColumn>[] : []), + { id: "validation", header: "i18n:govoplan-docs.validation.ef7f6d9c", width: "minmax(180px, .7fr)", minWidth: 160, resizable: true, filterable: true, value: (field) => metadataString(field, "validation") || "-", render: (field) => metadataString(field, "validation") || "-" } + ]; return ( -
- - - - - - {showTechnical && } - {showTechnical && } - - - - - {fields.map((field) => - - - - {showTechnical && } - {showTechnical && } - - - )} - -
i18n:govoplan-docs.field.7558c082i18n:govoplan-docs.meaning.584d8aa0i18n:govoplan-docs.api_mapping.e969f6f7i18n:govoplan-docs.permission.d71c9448i18n:govoplan-docs.validation.ef7f6d9c
{metadataString(field, "label")} - {metadataString(field, "user_description")} - {showTechnical && metadataString(field, "admin_description") && {metadataString(field, "admin_description")}} - {showTechnical && metadataString(field, "provenance") && {metadataString(field, "provenance")}} - {metadataString(field, "api_path")}{metadataString(field, "api_field")}{metadataString(field, "permission_scope") || "-"}{metadataString(field, "validation") || "-"}
+
+ metadataString(field, "field_id") || metadataString(field, "label")} />
); } @@ -861,49 +847,29 @@ function metadataRecords(metadata: Record, key: string): Record function ModuleTable({ modules }: { modules: DocsModule[] }) { if (!modules.length) return

i18n:govoplan-docs.no_configured_modules_found.f6f9ce24

; + const columns: DataGridColumn[] = [ + { id: "module", header: "i18n:govoplan-docs.module.b8ff0289", width: "minmax(220px, 1fr)", minWidth: 190, resizable: true, sortable: true, filterable: true, value: (module) => `${module.name} ${module.id} ${module.version}`, render: (module) =>
{module.name}{module.id} {module.version}
}, + { id: "routes", header: "i18n:govoplan-docs.routes.03730e58", width: 170, sortable: true, value: (module) => module.route_count, render: (module) => <>{module.route_count} i18n:govoplan-docs.route.200e2a66 {module.nav_count} nav }, + { id: "permissions", header: "i18n:govoplan-docs.permissions.d06d5557", width: 130, sortable: true, value: (module) => module.permission_count }, + { id: "frontend", header: "i18n:govoplan-docs.frontend.152d1cf2", width: "minmax(180px, .8fr)", minWidth: 160, resizable: true, sortable: true, filterable: true, value: (module) => module.frontend_package || "-", render: (module) => module.frontend_package || "-" }, + { id: "capabilities", header: "i18n:govoplan-docs.capabilities.ca09c54b", width: "minmax(260px, 1.2fr)", minWidth: 220, resizable: true, filterable: true, value: (module) => module.capabilities.join(" "), render: (module) =>
{module.capabilities.length ? module.capabilities.join(", ") : "-"}{module.documentation_count || module.documentation_provider_count ? {module.documentation_count} i18n:govoplan-docs.docs.5dc1e9b8 {module.documentation_provider_count} provider : null}
} + ]; return ( -
- - - - - - {modules.map((module) => - - - - - - - - )} - -
i18n:govoplan-docs.module.b8ff0289i18n:govoplan-docs.routes.03730e58i18n:govoplan-docs.permissions.d06d5557i18n:govoplan-docs.frontend.152d1cf2i18n:govoplan-docs.capabilities.ca09c54b
{module.name}{module.id} {module.version}{module.route_count} i18n:govoplan-docs.route.200e2a66 {module.nav_count} nav{module.permission_count}{module.frontend_package || "-"}{module.capabilities.length ? module.capabilities.join(", ") : "-"}{module.documentation_count || module.documentation_provider_count ? {module.documentation_count} i18n:govoplan-docs.docs.5dc1e9b8 {module.documentation_provider_count} provider : null}
-
+ module.id} /> ); } function RouteTable({ routes, emptyText }: { routes: DocsRoute[]; emptyText: string }) { if (!routes.length) return

{emptyText}

; + const columns: DataGridColumn[] = [ + { id: "route", header: "i18n:govoplan-docs.route.4999528e", width: "minmax(240px, 1fr)", minWidth: 200, resizable: true, sortable: true, filterable: true, value: (route) => `${route.label} ${route.path}`, render: (route) =>
{route.label}{route.path}
}, + { id: "module", header: "i18n:govoplan-docs.module.b8ff0289", width: 160, sortable: true, filterable: true, value: (route) => route.module_id }, + { id: "source", header: "i18n:govoplan-docs.source.6da13add", width: 160, sortable: true, filterable: true, value: (route) => route.source }, + { id: "requirements", header: "i18n:govoplan-docs.requirements.09a428f9", width: "minmax(220px, 1fr)", minWidth: 180, resizable: true, filterable: true, value: (route) => routeRequirements(route) }, + { id: "status", header: "i18n:govoplan-docs.status.bae7d5be", width: 160, sortable: true, filterable: true, value: (route) => route.visible ? "visible" : route.reason, render: (route) => } + ]; return ( -
- - - - - - {routes.map((route) => - - - - - - - - )} - -
i18n:govoplan-docs.route.4999528ei18n:govoplan-docs.module.b8ff0289i18n:govoplan-docs.source.6da13addi18n:govoplan-docs.requirements.09a428f9i18n:govoplan-docs.status.bae7d5be
{route.label}{route.path}{route.module_id}{route.source}{routeRequirements(route)}
-
+ `${route.source}-${route.module_id}-${route.path}`} /> ); }