spine-framework 0.3.124 → 0.3.126
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.framework/cli/commands/agents.ts +35 -37
- package/.framework/cli/commands/auth.ts +35 -34
- package/.framework/cli/commands/create-app.ts +104 -40
- package/.framework/cli/commands/dev.ts +104 -69
- package/.framework/cli/commands/doctor.ts +179 -69
- package/.framework/cli/commands/generate.ts +83 -143
- package/.framework/cli/commands/init.ts +72 -34
- package/.framework/cli/commands/install-app.ts +260 -125
- package/.framework/cli/commands/items.ts +33 -44
- package/.framework/cli/commands/migrate.ts +122 -40
- package/.framework/cli/commands/migrations.ts +33 -40
- package/.framework/cli/commands/pipelines.ts +31 -39
- package/.framework/cli/commands/status.ts +47 -23
- package/.framework/cli/commands/system.ts +47 -37
- package/.framework/cli/commands/test.ts +112 -68
- package/.framework/cli/commands/validate-app.ts +215 -121
- package/.framework/cli/context.ts +112 -130
- package/.framework/cli/env-loader.ts +47 -18
- package/.framework/cli/index.ts +81 -42
- package/.framework/docs/runtime-types.md +1024 -0
- package/.framework/functions/_shared/agent-runner.ts +1296 -961
- package/.framework/functions/_shared/app-manifest.ts +82 -68
- package/.framework/functions/_shared/audit.ts +135 -83
- package/.framework/functions/_shared/{cil-state.ts → cil.ts} +158 -56
- package/.framework/functions/_shared/db.ts +80 -126
- package/.framework/functions/_shared/hash-api-key.ts +63 -0
- package/.framework/functions/_shared/index.ts +224 -335
- package/.framework/functions/_shared/kb.ts +319 -0
- package/.framework/functions/_shared/llm.ts +92 -0
- package/.framework/functions/_shared/logging.ts +288 -0
- package/.framework/functions/_shared/middleware.ts +329 -365
- package/.framework/functions/_shared/outcomes.ts +36 -0
- package/.framework/functions/_shared/permissions.ts +359 -643
- package/.framework/functions/_shared/pipeline-runner.ts +243 -316
- package/.framework/functions/_shared/principal.ts +376 -468
- package/.framework/functions/_shared/resolve-credentials.ts +102 -0
- package/.framework/functions/_shared/resolve-ids.ts +188 -16
- package/.framework/functions/_shared/retry-deliveries.ts +104 -0
- package/.framework/functions/_shared/schema-utils.ts +611 -373
- package/.framework/functions/_shared/testing.ts +207 -137
- package/.framework/functions/_shared/tracing.ts +276 -0
- package/.framework/functions/_shared/trigger-engine.ts +159 -211
- package/.framework/functions/_shared/webhook-registration.ts +95 -81
- package/.framework/functions/_shared/webhook-registry.ts +153 -75
- package/.framework/functions/account-nodes.ts +31 -53
- package/.framework/functions/adapters/generic-webhook-inbound.ts +56 -0
- package/.framework/functions/adapters/generic-webhook-outbound.ts +43 -0
- package/.framework/functions/adapters/openai-outbound.ts +40 -0
- package/.framework/functions/admin-data.ts +685 -537
- package/.framework/functions/admin-funnel.ts +31 -20
- package/.framework/functions/admin-install-funnel.ts +47 -28
- package/.framework/functions/admin-signals.ts +47 -29
- package/.framework/functions/ai-agents.ts +122 -147
- package/.framework/functions/ai-interactions.ts +180 -90
- package/.framework/functions/api-keys.ts +250 -192
- package/.framework/functions/apps.ts +203 -197
- package/.framework/functions/auth.ts +98 -91
- package/.framework/functions/cil-agent-ingest.ts +773 -0
- package/.framework/functions/cil-agent.ts +592 -0
- package/.framework/functions/cil-callmap.ts +1227 -0
- package/.framework/functions/cil-config.ts +583 -0
- package/.framework/functions/cil-context.ts +445 -0
- package/.framework/functions/cil-doc.ts +1752 -0
- package/.framework/functions/cil-embeddings.ts +1202 -0
- package/.framework/functions/cil-graph.ts +585 -0
- package/.framework/functions/cil-ingest.ts +2416 -0
- package/.framework/functions/cil-pipeline.ts +318 -0
- package/.framework/functions/cil-project.ts +499 -0
- package/.framework/functions/cil-validate.ts +469 -0
- package/.framework/functions/debug-auth.ts +73 -53
- package/.framework/functions/deliveries.ts +117 -0
- package/.framework/functions/embeddings.ts +528 -516
- package/.framework/functions/eval-harness.ts +158 -106
- package/.framework/functions/integration-outbound.ts +311 -0
- package/.framework/functions/integration-routes.ts +240 -466
- package/.framework/functions/integrations.ts +132 -140
- package/.framework/functions/invites.ts +401 -201
- package/.framework/functions/item-progress.ts +113 -53
- package/.framework/functions/kb.ts +28 -0
- package/.framework/functions/logs.ts +239 -222
- package/.framework/functions/observability.ts +308 -259
- package/.framework/functions/pipeline-executions.ts +179 -235
- package/.framework/functions/pipelines.ts +163 -205
- package/.framework/functions/prompt-configs.ts +109 -156
- package/.framework/functions/roles.ts +97 -147
- package/.framework/functions/system-cron.ts +132 -218
- package/.framework/functions/system.ts +112 -52
- package/.framework/functions/tests.ts +32 -28
- package/.framework/functions/timers.ts +162 -210
- package/.framework/functions/triggers.ts +282 -346
- package/.framework/functions/types.ts +283 -400
- package/.framework/migrations/001_core_schema.sql +630 -0
- package/.framework/migrations/002_core_rls_and_functions.sql +532 -0
- package/.framework/migrations/{003_system_data.sql → 003_core_system_data.sql} +26 -153
- package/.framework/migrations/004_core_rpc_and_broker.sql +421 -0
- package/.framework/migrations/005_core_observability.sql +598 -0
- package/.framework/migrations/006_security_hardening_rls.sql +97 -0
- package/.framework/migrations/007_kb_article_list.sql +237 -0
- package/.framework/migrations/008_items_target.sql +8 -0
- package/.framework/migrations/009_roles_slug_unique.sql +11 -0
- package/.framework/public/spine.config.json +91 -0
- package/.framework/scripts/app-install-cli.ts +112 -98
- package/.framework/src/App.tsx +67 -20
- package/.framework/src/apps/admin/index.tsx +97 -27
- package/.framework/src/components/AppWrapper.tsx +50 -11
- package/.framework/src/components/CustomAppLoader.tsx +131 -22
- package/.framework/src/components/admin/AdminListPage.tsx +75 -8
- package/.framework/src/components/admin/AdminSidebar.tsx +148 -36
- package/.framework/src/components/admin/AdminStatsCard.tsx +48 -29
- package/.framework/src/components/admin/PageInstructions.tsx +49 -0
- package/.framework/src/components/admin/SortableTableHeader.tsx +49 -2
- package/.framework/src/components/app-shell/GenericAppShell.tsx +69 -11
- package/.framework/src/components/app-shell/GenericDetailPage.tsx +55 -10
- package/.framework/src/components/app-shell/GenericListPage.tsx +76 -9
- package/.framework/src/components/app-sidebar.tsx +50 -3
- package/.framework/src/components/auth/ProtectedRoute.tsx +53 -45
- package/.framework/src/components/kb/KBArticleEditor.tsx +409 -0
- package/.framework/src/components/kb/KBArticleList.tsx +557 -0
- package/.framework/src/components/layout/AppShell.tsx +54 -16
- package/.framework/src/components/layout/Header.tsx +50 -38
- package/.framework/src/components/layout/Layout.tsx +48 -32
- package/.framework/src/components/layout/Sidebar.tsx +167 -16
- package/.framework/src/components/runtime/DataDetailHeader.tsx +33 -1
- package/.framework/src/components/runtime/DataDetailPage.tsx +289 -4
- package/.framework/src/components/runtime/DataFilters.tsx +78 -1
- package/.framework/src/components/runtime/DataHeader.tsx +32 -29
- package/.framework/src/components/runtime/DataListPage.tsx +161 -2
- package/.framework/src/components/runtime/DataStats.tsx +48 -1
- package/.framework/src/components/runtime/DataTable.tsx +153 -1
- package/.framework/src/components/runtime/SchemaDetailForm.tsx +77 -46
- package/.framework/src/components/runtime/index.ts +16 -9
- package/.framework/src/components/search-form.tsx +33 -1
- package/.framework/src/components/shared/AgentView.tsx +48 -51
- package/.framework/src/components/shared/FieldRenderer.tsx +84 -67
- package/.framework/src/components/shared/InviteManager.tsx +113 -52
- package/.framework/src/components/shared/MemberList.tsx +182 -0
- package/.framework/src/components/shared/SchemaFields.tsx +96 -78
- package/.framework/src/components/ui/DataTable.tsx +86 -56
- package/.framework/src/components/ui/Form.tsx +188 -109
- package/.framework/src/components/ui/ItemCard.tsx +86 -58
- package/.framework/src/components/ui/ItemListView.tsx +88 -61
- package/.framework/src/components/ui/LoadingSpinner.tsx +52 -27
- package/.framework/src/components/ui/Modal.tsx +81 -4
- package/.framework/src/components/ui/RichTextEditor.tsx +101 -9
- package/.framework/src/components/ui/accordion.tsx +97 -5
- package/.framework/src/components/ui/alert-dialog.tsx +225 -13
- package/.framework/src/components/ui/alert.tsx +113 -6
- package/.framework/src/components/ui/aspect-ratio.tsx +49 -2
- package/.framework/src/components/ui/avatar.tsx +129 -7
- package/.framework/src/components/ui/badge.tsx +65 -3
- package/.framework/src/components/ui/breadcrumb.tsx +145 -8
- package/.framework/src/components/ui/button-group.tsx +81 -4
- package/.framework/src/components/ui/button.tsx +49 -2
- package/.framework/src/components/ui/calendar.tsx +65 -3
- package/.framework/src/components/ui/card.tsx +145 -8
- package/.framework/src/components/ui/carousel.tsx +129 -7
- package/.framework/src/components/ui/chart.tsx +161 -10
- package/.framework/src/components/ui/checkbox.tsx +49 -2
- package/.framework/src/components/ui/collapsible.tsx +81 -5
- package/.framework/src/components/ui/combobox.tsx +305 -20
- package/.framework/src/components/ui/command.tsx +177 -11
- package/.framework/src/components/ui/context-menu.tsx +273 -17
- package/.framework/src/components/ui/dialog.tsx +209 -27
- package/.framework/src/components/ui/direction.tsx +64 -4
- package/.framework/src/components/ui/drawer.tsx +193 -12
- package/.framework/src/components/ui/dropdown-menu.tsx +273 -18
- package/.framework/src/components/ui/empty.tsx +145 -9
- package/.framework/src/components/ui/field.tsx +209 -14
- package/.framework/src/components/ui/hover-card.tsx +81 -4
- package/.framework/src/components/ui/input-group.tsx +162 -10
- package/.framework/src/components/ui/input-otp.tsx +98 -5
- package/.framework/src/components/ui/input.tsx +49 -2
- package/.framework/src/components/ui/item.tsx +225 -13
- package/.framework/src/components/ui/kbd.tsx +65 -3
- package/.framework/src/components/ui/label.tsx +49 -2
- package/.framework/src/components/ui/menubar.tsx +289 -17
- package/.framework/src/components/ui/native-select.tsx +97 -5
- package/.framework/src/components/ui/navigation-menu.tsx +177 -10
- package/.framework/src/components/ui/pagination.tsx +161 -9
- package/.framework/src/components/ui/popover.tsx +145 -8
- package/.framework/src/components/ui/progress.tsx +49 -2
- package/.framework/src/components/ui/radio-group.tsx +65 -3
- package/.framework/src/components/ui/resizable.tsx +82 -4
- package/.framework/src/components/ui/scroll-area.tsx +65 -3
- package/.framework/src/components/ui/select.tsx +193 -11
- package/.framework/src/components/ui/separator.tsx +49 -2
- package/.framework/src/components/ui/sheet.tsx +193 -11
- package/.framework/src/components/ui/sidebar.tsx +481 -38
- package/.framework/src/components/ui/skeleton.tsx +49 -2
- package/.framework/src/components/ui/slider.tsx +49 -2
- package/.framework/src/components/ui/sonner.tsx +49 -2
- package/.framework/src/components/ui/spinner.tsx +49 -2
- package/.framework/src/components/ui/switch.tsx +49 -2
- package/.framework/src/components/ui/table-primitives.tsx +160 -33
- package/.framework/src/components/ui/table.tsx +161 -9
- package/.framework/src/components/ui/tabs.tsx +113 -6
- package/.framework/src/components/ui/textarea.tsx +49 -2
- package/.framework/src/components/ui/toggle-group.tsx +81 -4
- package/.framework/src/components/ui/toggle.tsx +65 -3
- package/.framework/src/components/ui/tooltip.tsx +97 -5
- package/.framework/src/contexts/AppContext.tsx +129 -45
- package/.framework/src/contexts/AuthContext.tsx +187 -144
- package/.framework/src/hooks/use-mobile.ts +48 -2
- package/.framework/src/hooks/useApi.ts +208 -159
- package/.framework/src/hooks/useAppPath.ts +32 -23
- package/.framework/src/hooks/useApps.ts +51 -20
- package/.framework/src/hooks/useEntityList.ts +32 -78
- package/.framework/src/hooks/useEntityRecord.ts +35 -96
- package/.framework/src/hooks/useForm.ts +32 -92
- package/.framework/src/hooks/useListSchema.ts +49 -78
- package/.framework/src/hooks/useSchemaRecord.ts +114 -105
- package/.framework/src/lib/api.ts +195 -116
- package/.framework/src/lib/supabase.ts +98 -64
- package/.framework/src/lib/utils.ts +287 -151
- package/.framework/src/main.tsx +49 -3
- package/.framework/src/pages/DashboardPage.tsx +52 -29
- package/.framework/src/pages/NotFoundPage.tsx +32 -10
- package/.framework/src/pages/SetupPage.tsx +32 -12
- package/.framework/src/pages/admin/AIAgentDetailPage.tsx +119 -10
- package/.framework/src/pages/admin/AIAgentsPage.tsx +48 -19
- package/.framework/src/pages/admin/APIKeyDetailPage.tsx +187 -17
- package/.framework/src/pages/admin/APIKeysPage.tsx +98 -22
- package/.framework/src/pages/admin/AlertsConfigPage.tsx +113 -26
- package/.framework/src/pages/admin/AppDetailPage.tsx +125 -8
- package/.framework/src/pages/admin/AppsPage.tsx +49 -2
- package/.framework/src/pages/admin/DeliveriesPage.tsx +196 -0
- package/.framework/src/pages/admin/DesignedPage.tsx +32 -18
- package/.framework/src/pages/admin/EmbeddingDetailPage.tsx +215 -484
- package/.framework/src/pages/admin/EmbeddingsPage.tsx +116 -319
- package/.framework/src/pages/admin/ExtendedShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/IncrementalShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/IntegratedDashboard.tsx +32 -16
- package/.framework/src/pages/admin/IntegrationDetailPage.tsx +183 -26
- package/.framework/src/pages/admin/IntegrationsPage.tsx +48 -19
- package/.framework/src/pages/admin/InvitesPage.tsx +48 -14
- package/.framework/src/pages/admin/LogsPage.tsx +422 -75
- package/.framework/src/pages/admin/MinimalShadcnTestPage.tsx +34 -9
- package/.framework/src/pages/admin/ObservabilityDashboard.tsx +113 -24
- package/.framework/src/pages/admin/PipelineDetailPage.tsx +206 -34
- package/.framework/src/pages/admin/PipelineExecutionsPage.tsx +50 -17
- package/.framework/src/pages/admin/PipelinesPage.tsx +160 -21
- package/.framework/src/pages/admin/PromptConfigDetailPage.tsx +378 -88
- package/.framework/src/pages/admin/PromptConfigsPage.tsx +125 -16
- package/.framework/src/pages/admin/ProperlyDesignedPage.tsx +49 -10
- package/.framework/src/pages/admin/RoleDetailPage.tsx +130 -10
- package/.framework/src/pages/admin/RolesPage.tsx +171 -18
- package/.framework/src/pages/admin/SelectTestPage.tsx +34 -9
- package/.framework/src/pages/admin/ShadcnTestPage.tsx +49 -11
- package/.framework/src/pages/admin/SimpleDashboard.tsx +49 -10
- package/.framework/src/pages/admin/TestRunDetailPage.tsx +49 -4
- package/.framework/src/pages/admin/TestingDashboard.tsx +98 -28
- package/.framework/src/pages/admin/TimerDetailPage.tsx +143 -33
- package/.framework/src/pages/admin/TimersPage.tsx +48 -20
- package/.framework/src/pages/admin/TriggerDetailPage.tsx +118 -30
- package/.framework/src/pages/admin/TriggersPage.tsx +64 -19
- package/.framework/src/pages/admin/TypeDetailPage.tsx +138 -15
- package/.framework/src/pages/admin/TypesPage.tsx +48 -20
- package/.framework/src/pages/admin/cil/CILAgentPage.tsx +465 -0
- package/.framework/src/pages/admin/cil/CILChunkDetailPage.tsx +787 -0
- package/.framework/src/pages/admin/cil/CILDashboardPage.tsx +699 -0
- package/.framework/src/pages/admin/cil/CILFileListPage.tsx +647 -0
- package/.framework/src/pages/admin/cil/CILGraphPage.tsx +616 -0
- package/.framework/src/pages/admin/cil/CILIngestionPage.tsx +1402 -0
- package/.framework/src/pages/admin/cil/CILProjectsPage.tsx +614 -0
- package/.framework/src/pages/admin/cil/CILSearchPage.tsx +571 -0
- package/.framework/src/pages/admin/cil/FlexiblePipelinePage.tsx +731 -0
- package/.framework/src/pages/admin/kb/KBAdminPage.tsx +64 -0
- package/.framework/src/pages/auth/AuthConfirmPage.tsx +52 -51
- package/.framework/src/pages/auth/ForgotPasswordPage.tsx +31 -22
- package/.framework/src/pages/auth/LoginPage.tsx +50 -23
- package/.framework/src/pages/auth/PendingApprovalPage.tsx +31 -15
- package/.framework/src/pages/auth/RegisterPage.tsx +281 -317
- package/.framework/src/pages/spine-framework/APIPage.tsx +33 -0
- package/.framework/src/pages/spine-framework/CLIPage.tsx +33 -0
- package/.framework/src/types/auth.ts +128 -71
- package/.framework/src/types/types.ts +373 -157
- package/custom/.devin/skills/spine-workbench-discovery/SKILL.md +39 -0
- package/custom/.devin/skills/spine-workbench-idea/SKILL.md +36 -0
- package/custom/.devin/skills/spine-workbench-implement/SKILL.md +46 -0
- package/custom/.devin/skills/spine-workbench-initiative/SKILL.md +28 -0
- package/custom/.devin/skills/spine-workbench-plan/SKILL.md +38 -0
- package/docs/README.md +9 -130
- package/netlify.toml +5 -2
- package/package.json +13 -25
- package/scripts/kb-ingest-docs.ts +203 -0
- package/spine.config.json +65 -4
- package/.framework/migrations/001_schema.sql +0 -425
- package/.framework/migrations/002_rls_and_functions.sql +0 -763
- package/.framework/migrations/004_enhancements.sql +0 -43
- package/.framework/migrations/005_auth_user_trigger.sql +0 -105
- package/.framework/migrations/006_fix_current_actor_id.sql +0 -21
- package/.framework/migrations/016_invites.sql +0 -27
- package/.framework/migrations/017_fix_get_account_apps.sql +0 -78
- package/.framework/migrations/018_apps_required_roles.sql +0 -17
- package/.framework/migrations/019_triggers_unique_constraint.sql +0 -13
- package/.framework/migrations/020_get_account_apps_role_filter.sql +0 -117
- package/.framework/migrations/021_app_domains.sql +0 -112
- package/.framework/migrations/022_route_prefix_domain_unique.sql +0 -21
- package/.framework/migrations/023_match_embeddings_rpc.sql +0 -78
- package/.framework/migrations/024_messages_account_id.sql +0 -9
- package/.framework/migrations/025_retype_threads_messages.sql +0 -240
- package/.framework/migrations/026_fix_rls_policies.sql +0 -47
- package/.framework/migrations/027_embedding_lifecycle.sql +0 -176
- package/.framework/migrations/028_fix_message_data_permissions.sql +0 -49
- package/.framework/migrations/029_tighten_support_triage_prompt.sql +0 -41
- package/.framework/migrations/030_messages_updated_by.sql +0 -6
- package/.framework/migrations/031_seed_upsert_constraints.sql +0 -35
- package/docs/APPS.md +0 -232
- package/docs/ARCHITECTURE.md +0 -246
- package/docs/INSTALL.md +0 -155
- package/docs/design-schema-spec.md +0 -1837
- package/docs/dev-guides/01-create-an-app.md +0 -183
- package/docs/dev-guides/02-create-a-function.md +0 -178
- package/docs/dev-guides/03-create-a-component.md +0 -178
- package/docs/dev-guides/04-webhook-handlers.md +0 -129
- package/docs/dev-guides/05-testing.md +0 -168
- package/docs/dev-guides/README.md +0 -40
- package/docs/npm-packages-plan.md +0 -288
- package/docs/spine-core--api-reference.md +0 -822
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
// CIL[BEGIN chunk_id="DataDetailPage_module_header_1783929048" type="module_header" identity="imports" parent="none"]
|
|
4
|
+
// CIL[DOC-MACRO purpose="Import dependencies for entity detail page component"]
|
|
5
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Manage imports for hooks and components"]
|
|
6
|
+
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
7
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="imports" errors="none" side_effects="none"]
|
|
8
|
+
// CIL[DOC-MICRO logic_summary="Imports React hooks, routing, entity hooks, and UI components" notable_decisions="[]"]
|
|
9
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
10
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
11
|
+
// CIL[DOC-AUDIENCE audience="developer"]
|
|
12
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
13
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
14
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
15
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
16
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
17
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
1
18
|
import { useState, useEffect } from 'react'
|
|
2
19
|
import { useParams, useSearchParams } from 'react-router-dom'
|
|
3
20
|
import { useEntityRecord } from '../../hooks/useEntityRecord'
|
|
@@ -6,17 +23,88 @@ import { SchemaDetailForm } from './SchemaDetailForm'
|
|
|
6
23
|
import { Button } from '../ui/button'
|
|
7
24
|
import { Card, CardContent } from '../ui/card'
|
|
8
25
|
import { Skeleton } from '../ui/skeleton'
|
|
9
|
-
|
|
26
|
+
// CIL[END chunk_id="DataDetailPage_module_header_1783929048"]
|
|
27
|
+
// CIL[BEGIN chunk_id="DataDetailPage_datadetailpage_1783929048" type="function" identity="DataDetailPage" parent="none"]
|
|
28
|
+
// CIL[DOC-MACRO purpose="Render main detail page with header and form"]
|
|
29
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Display complete entity detail interface"]
|
|
30
|
+
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/src/components/ui/table-primitives.tsx\",\".framework/migrations/015_simplify_apps_table.sql\"]"]
|
|
31
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="JSX detail page" errors="none" side_effects="none"]
|
|
32
|
+
// CIL[DOC-MICRO logic_summary="Render header and form with all edit/create functionality" notable_decisions="[]"]
|
|
33
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
34
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
35
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/src/components/ui/table-primitives.tsx, .framework/migrations/015_simplify_apps_table.sql."]
|
|
36
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
37
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
38
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
39
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
40
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
10
41
|
export function DataDetailPage() {
|
|
42
|
+
// CIL[BEGIN chunk_id="DataDetailPage_params_1783929048" type="variable_declaration" identity="params" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
43
|
+
// CIL[DOC-MACRO purpose="Extract URL parameters for entity, id, and search params"]
|
|
44
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle params"]
|
|
45
|
+
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/TypeDetailPage.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\"\\\"]"]
|
|
46
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="entity,id,typeSlug,searchParams" errors="none" side_effects="none"]
|
|
47
|
+
// CIL[DOC-MICRO logic_summary="Extract entity, id, typeSlug from params and manage search params" notable_decisions="[]"]
|
|
48
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
49
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
50
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/TypeDetailPage.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, \."]
|
|
51
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
52
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
53
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
54
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
55
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
11
56
|
const { entity, id, typeSlug } = useParams<{ entity: string; id: string; typeSlug?: string }>()
|
|
12
57
|
const [searchParams, setSearchParams] = useSearchParams()
|
|
58
|
+
// CIL[END chunk_id="DataDetailPage_params_1783929048"]
|
|
13
59
|
|
|
14
|
-
|
|
60
|
+
// CIL[BEGIN chunk_id="DataDetailPage_stateflags_1783929048" type="variable_declaration" identity="stateFlags" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
61
|
+
// CIL[DOC-MACRO purpose="Determine create/edit mode from URL parameters"]
|
|
62
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle stateFlags"]
|
|
63
|
+
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
64
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="isCreating,isEditing" errors="none" side_effects="none"]
|
|
65
|
+
// CIL[DOC-MICRO logic_summary="Set create mode from missing id, edit mode from search param" notable_decisions="[]"]
|
|
66
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
67
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
68
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
69
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
70
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
71
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
72
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
73
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
74
|
+
const recordId = id === 'new' ? undefined : id
|
|
75
|
+
const isCreating = !recordId
|
|
15
76
|
const isEditing = searchParams.get('edit') === 'true' || isCreating
|
|
77
|
+
// CIL[END chunk_id="DataDetailPage_stateflags_1783929048"]
|
|
16
78
|
|
|
79
|
+
// CIL[BEGIN chunk_id="DataDetailPage_config_1783929048" type="variable_declaration" identity="config" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
80
|
+
// CIL[DOC-MACRO purpose="Create configuration object for entity record operations"]
|
|
81
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle config"]
|
|
82
|
+
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\".framework/src/pages/admin/TypeDetailPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/functions/_shared/principal.ts\",\".framework/functions/_shared/schema-utils.ts\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
|
|
83
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="config:object" errors="none" side_effects="none"]
|
|
84
|
+
// CIL[DOC-MICRO logic_summary="Configure entity details, API actions, and display settings" notable_decisions="[]"]
|
|
85
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
86
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
87
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/pages/admin/TypeDetailPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/functions/_shared/principal.ts, .framework/functions/_shared/schema-utils.ts, .framework/src/components/ui/dialog.tsx, \."]
|
|
88
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
89
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
90
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
91
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
92
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
93
|
+
const defaultTypeSlugs: Record<string, string> = {
|
|
94
|
+
accounts: 'account',
|
|
95
|
+
people: 'person',
|
|
96
|
+
items: 'item',
|
|
97
|
+
threads: 'thread',
|
|
98
|
+
messages: 'message',
|
|
99
|
+
links: 'link',
|
|
100
|
+
attachments: 'attachment',
|
|
101
|
+
watchers: 'watcher',
|
|
102
|
+
item_progress: 'item_progress'
|
|
103
|
+
}
|
|
104
|
+
|
|
17
105
|
const config = {
|
|
18
106
|
entity: entity || '',
|
|
19
|
-
typeSlug: typeSlug || undefined,
|
|
107
|
+
typeSlug: typeSlug || (entity ? defaultTypeSlugs[entity] : undefined),
|
|
20
108
|
icon: 'database',
|
|
21
109
|
displayField: 'display_name',
|
|
22
110
|
api: {
|
|
@@ -26,7 +114,22 @@ export function DataDetailPage() {
|
|
|
26
114
|
updateAction: 'update'
|
|
27
115
|
}
|
|
28
116
|
}
|
|
117
|
+
// CIL[END chunk_id="DataDetailPage_config_1783929048"]
|
|
29
118
|
|
|
119
|
+
// CIL[BEGIN chunk_id="DataDetailPage_entityrecord_1783929048" type="variable_declaration" identity="entityRecord" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
120
|
+
// CIL[DOC-MACRO purpose="Fetch entity record and management functions"]
|
|
121
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle entityRecord"]
|
|
122
|
+
// CIL[DOC-CONTEXT module="entityRecord" layer="unknown" related_files="[]"]
|
|
123
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
124
|
+
// CIL[DOC-MICRO logic_summary="Implements entityRecord" notable_decisions="[]"]
|
|
125
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
126
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
127
|
+
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
128
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
129
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
130
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
131
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
132
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
30
133
|
const {
|
|
31
134
|
record,
|
|
32
135
|
fieldPermissions,
|
|
@@ -37,19 +140,79 @@ export function DataDetailPage() {
|
|
|
37
140
|
delete: deleteRecord,
|
|
38
141
|
saving,
|
|
39
142
|
deleting
|
|
40
|
-
} = useEntityRecord(entity!,
|
|
143
|
+
} = useEntityRecord(entity!, recordId, config)
|
|
144
|
+
// CIL[END chunk_id="DataDetailPage_entityrecord_1783929048"]
|
|
41
145
|
|
|
146
|
+
// CIL[BEGIN chunk_id="DataDetailPage_schema_1783929048" type="variable_declaration" identity="schema" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
147
|
+
// CIL[DOC-MACRO purpose="Extract schema and view from record data"]
|
|
148
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle schema"]
|
|
149
|
+
// CIL[DOC-CONTEXT module="schema" layer="unknown" related_files="[]"]
|
|
150
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
151
|
+
// CIL[DOC-MICRO logic_summary="Implements schema" notable_decisions="[]"]
|
|
152
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
153
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
154
|
+
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
155
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
156
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
157
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
158
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
159
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
42
160
|
const schema = record?.design_schema || null
|
|
43
161
|
const view = schema?.views?.default_detail || null
|
|
162
|
+
// CIL[END chunk_id="DataDetailPage_schema_1783929048"]
|
|
44
163
|
|
|
164
|
+
// CIL[BEGIN chunk_id="DataDetailPage_title_1783929048" type="variable_declaration" identity="title" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
165
|
+
// CIL[DOC-MACRO purpose="Generate display title for entity record"]
|
|
166
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle title"]
|
|
167
|
+
// CIL[DOC-CONTEXT module="title" layer="unknown" related_files="[]"]
|
|
168
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
169
|
+
// CIL[DOC-MICRO logic_summary="Implements title" notable_decisions="[]"]
|
|
170
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
171
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
172
|
+
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
173
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
174
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
175
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
176
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
177
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
45
178
|
const displayField = schema?.display_field || config.displayField
|
|
46
179
|
const FALLBACK_FIELDS = ['full_name', 'display_name', 'name', 'title', 'slug', 'email']
|
|
47
180
|
const recordTitle = record?.[displayField]
|
|
48
181
|
?? FALLBACK_FIELDS.map(f => record?.[f]).find(v => v != null)
|
|
49
182
|
?? 'Untitled'
|
|
183
|
+
// CIL[END chunk_id="DataDetailPage_title_1783929048"]
|
|
50
184
|
|
|
185
|
+
// CIL[BEGIN chunk_id="DataDetailPage_formdata_1783929048" type="variable_declaration" identity="formData" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
186
|
+
// CIL[DOC-MACRO purpose="Manage form state for entity editing"]
|
|
187
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle formData"]
|
|
188
|
+
// CIL[DOC-CONTEXT module="formData" layer="unknown" related_files="[]"]
|
|
189
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
190
|
+
// CIL[DOC-MICRO logic_summary="Implements formData" notable_decisions="[]"]
|
|
191
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
192
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
193
|
+
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
194
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
195
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
196
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
197
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
198
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
51
199
|
const [formData, setFormData] = useState<Record<string, any>>({})
|
|
200
|
+
// CIL[END chunk_id="DataDetailPage_formdata_1783929048"]
|
|
52
201
|
|
|
202
|
+
// CIL[BEGIN chunk_id="DataDetailPage_useeffect_1783929048" type="function" identity="useEffect" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
203
|
+
// CIL[DOC-MACRO purpose="Initialize form data when record loads or in create mode"]
|
|
204
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle useEffect"]
|
|
205
|
+
// CIL[DOC-CONTEXT module="useEffect" layer="unknown" related_files="[]"]
|
|
206
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
207
|
+
// CIL[DOC-MICRO logic_summary="Implements useEffect" notable_decisions="[]"]
|
|
208
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
209
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
210
|
+
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
211
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
212
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
213
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
214
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
215
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
53
216
|
useEffect(() => {
|
|
54
217
|
if (record && view) {
|
|
55
218
|
const initialData: Record<string, any> = {}
|
|
@@ -69,15 +232,60 @@ export function DataDetailPage() {
|
|
|
69
232
|
setFormData({})
|
|
70
233
|
}
|
|
71
234
|
}, [record, isCreating, view, schema])
|
|
235
|
+
// CIL[END chunk_id="DataDetailPage_useeffect_1783929048"]
|
|
72
236
|
|
|
237
|
+
// CIL[BEGIN chunk_id="DataDetailPage_handlefieldchange_1783929048" type="function" identity="handleFieldChange" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
238
|
+
// CIL[DOC-MACRO purpose="Update form field value when user edits"]
|
|
239
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle handleFieldChange"]
|
|
240
|
+
// CIL[DOC-CONTEXT module="handleFieldChange" layer="unknown" related_files="[]"]
|
|
241
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
242
|
+
// CIL[DOC-MICRO logic_summary="Implements handleFieldChange" notable_decisions="[]"]
|
|
243
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
244
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
245
|
+
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
246
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
247
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
248
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
249
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
250
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
73
251
|
const handleFieldChange = (key: string, value: any) => {
|
|
74
252
|
setFormData((prev) => ({ ...prev, [key]: value }))
|
|
75
253
|
}
|
|
254
|
+
// CIL[END chunk_id="DataDetailPage_handlefieldchange_1783929048"]
|
|
76
255
|
|
|
256
|
+
// CIL[BEGIN chunk_id="DataDetailPage_handleedit_1783929048" type="function" identity="handleEdit" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
257
|
+
// CIL[DOC-MACRO purpose="Enable edit mode for the entity record"]
|
|
258
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle handleEdit"]
|
|
259
|
+
// CIL[DOC-CONTEXT module="handleEdit" layer="unknown" related_files="[]"]
|
|
260
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
261
|
+
// CIL[DOC-MICRO logic_summary="Implements handleEdit" notable_decisions="[]"]
|
|
262
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
263
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
264
|
+
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
265
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
266
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
267
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
268
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
269
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
77
270
|
const handleEdit = () => {
|
|
78
271
|
setSearchParams({ edit: 'true' })
|
|
79
272
|
}
|
|
273
|
+
// CIL[END chunk_id="DataDetailPage_handleedit_1783929048"]
|
|
80
274
|
|
|
275
|
+
// CIL[BEGIN chunk_id="DataDetailPage_handlecancel_1783929048" type="function" identity="handleCancel" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
276
|
+
// CIL[DOC-MACRO purpose="Handle cancel action with navigation or reset"]
|
|
277
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle handleCancel"]
|
|
278
|
+
// CIL[DOC-CONTEXT module="handleCancel" layer="unknown" related_files="[]"]
|
|
279
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
280
|
+
// CIL[DOC-MICRO logic_summary="Implements handleCancel" notable_decisions="[]"]
|
|
281
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
282
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
283
|
+
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
284
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
285
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
286
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
287
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
288
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
81
289
|
const handleCancel = () => {
|
|
82
290
|
if (isCreating) {
|
|
83
291
|
window.location.href = `/spine-framework/admin/runtime/${entity}`
|
|
@@ -100,7 +308,22 @@ export function DataDetailPage() {
|
|
|
100
308
|
}
|
|
101
309
|
}
|
|
102
310
|
}
|
|
311
|
+
// CIL[END chunk_id="DataDetailPage_handlecancel_1783929048"]
|
|
103
312
|
|
|
313
|
+
// CIL[BEGIN chunk_id="DataDetailPage_handlesave_1783929048" type="function" identity="handleSave" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
314
|
+
// CIL[DOC-MACRO purpose="Save entity record and handle navigation after save"]
|
|
315
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle handleSave"]
|
|
316
|
+
// CIL[DOC-CONTEXT module="handleSave" layer="unknown" related_files="[]"]
|
|
317
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
318
|
+
// CIL[DOC-MICRO logic_summary="Implements handleSave" notable_decisions="[]"]
|
|
319
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
320
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
321
|
+
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
322
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
323
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
324
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
325
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
326
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
104
327
|
const handleSave = async () => {
|
|
105
328
|
await save(formData)
|
|
106
329
|
if (!isCreating) {
|
|
@@ -109,14 +332,44 @@ export function DataDetailPage() {
|
|
|
109
332
|
window.location.href = `/spine-framework/admin/runtime/${entity}`
|
|
110
333
|
}
|
|
111
334
|
}
|
|
335
|
+
// CIL[END chunk_id="DataDetailPage_handlesave_1783929048"]
|
|
112
336
|
|
|
337
|
+
// CIL[BEGIN chunk_id="DataDetailPage_handledelete_1783929048" type="function" identity="handleDelete" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
338
|
+
// CIL[DOC-MACRO purpose="handleDelete"]
|
|
339
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle handleDelete"]
|
|
340
|
+
// CIL[DOC-CONTEXT module="handleDelete" layer="unknown" related_files="[]"]
|
|
341
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
342
|
+
// CIL[DOC-MICRO logic_summary="Implements handleDelete" notable_decisions="[]"]
|
|
343
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
344
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
345
|
+
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
346
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
347
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
348
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
349
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
350
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
113
351
|
const handleDelete = async () => {
|
|
114
352
|
if (confirm(`Are you sure you want to delete this ${config?.entity?.slice(0, -1) || 'record'}?`)) {
|
|
115
353
|
await deleteRecord()
|
|
116
354
|
window.location.href = `/spine-framework/admin/runtime/${entity}`
|
|
117
355
|
}
|
|
118
356
|
}
|
|
357
|
+
// CIL[END chunk_id="DataDetailPage_handledelete_1783929048"]
|
|
119
358
|
|
|
359
|
+
// CIL[BEGIN chunk_id="DataDetailPage_loadingstate_1783929048" type="render_block" identity="loadingState" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
360
|
+
// CIL[DOC-MACRO purpose="Render loading skeleton for record fetching"]
|
|
361
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle loadingState"]
|
|
362
|
+
// CIL[DOC-CONTEXT module="loadingState" layer="unknown" related_files="[]"]
|
|
363
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
364
|
+
// CIL[DOC-MICRO logic_summary="Implements loadingState" notable_decisions="[]"]
|
|
365
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
366
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
367
|
+
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
368
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
369
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
370
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
371
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
372
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
120
373
|
if (loading) {
|
|
121
374
|
return (
|
|
122
375
|
<Card>
|
|
@@ -128,7 +381,22 @@ export function DataDetailPage() {
|
|
|
128
381
|
</Card>
|
|
129
382
|
)
|
|
130
383
|
}
|
|
384
|
+
// CIL[END chunk_id="DataDetailPage_loadingstate_1783929048"]
|
|
131
385
|
|
|
386
|
+
// CIL[BEGIN chunk_id="DataDetailPage_errorstate_1783929048" type="render_block" identity="errorState" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
387
|
+
// CIL[DOC-MACRO purpose="Render error state for record loading failures"]
|
|
388
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle errorState"]
|
|
389
|
+
// CIL[DOC-CONTEXT module="errorState" layer="unknown" related_files="[]"]
|
|
390
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
391
|
+
// CIL[DOC-MICRO logic_summary="Implements errorState" notable_decisions="[]"]
|
|
392
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
393
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
394
|
+
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
395
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
396
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
397
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
398
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
399
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
132
400
|
if (error || !schema || !view) {
|
|
133
401
|
return (
|
|
134
402
|
<Card>
|
|
@@ -139,7 +407,22 @@ export function DataDetailPage() {
|
|
|
139
407
|
</Card>
|
|
140
408
|
)
|
|
141
409
|
}
|
|
410
|
+
// CIL[END chunk_id="DataDetailPage_errorstate_1783929048"]
|
|
142
411
|
|
|
412
|
+
// CIL[BEGIN chunk_id="DataDetailPage_mainrender_1783929048" type="render_block" identity="mainRender" parent="DataDetailPage_datadetailpage_1783929048"]
|
|
413
|
+
// CIL[DOC-MACRO purpose="Render main detail page with header and form"]
|
|
414
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle mainRender"]
|
|
415
|
+
// CIL[DOC-CONTEXT module="mainRender" layer="unknown" related_files="[]"]
|
|
416
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="none"]
|
|
417
|
+
// CIL[DOC-MICRO logic_summary="Implements mainRender" notable_decisions="[]"]
|
|
418
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
419
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
420
|
+
// CIL[DOC-VECTOR type="context" content="Layer: unknown. Direct callers: 0. Direct calls: 0. Related files: none."]
|
|
421
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
422
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
423
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
424
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
425
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
143
426
|
return (
|
|
144
427
|
<div className="space-y-6">
|
|
145
428
|
<DataDetailHeader
|
|
@@ -168,4 +451,6 @@ export function DataDetailPage() {
|
|
|
168
451
|
/>
|
|
169
452
|
</div>
|
|
170
453
|
)
|
|
454
|
+
// CIL[END chunk_id="DataDetailPage_mainrender_1783929048"]
|
|
171
455
|
}
|
|
456
|
+
// CIL[END chunk_id="DataDetailPage_datadetailpage_1783929048"]
|
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
// CIL[BEGIN chunk_id="DataFilters_module_header_1783929048" type="module_header" identity="imports_and_types" parent="none"]
|
|
4
|
+
// CIL[DOC-MACRO purpose="Import dependencies and define filter component types"]
|
|
5
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Manage imports and interface for data filters"]
|
|
6
|
+
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\"\\\"]"]
|
|
7
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="types" errors="none" side_effects="none"]
|
|
8
|
+
// CIL[DOC-MICRO logic_summary="Imports EntityFilter type, UI components for filters" notable_decisions="[]"]
|
|
9
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
10
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
11
|
+
// CIL[DOC-AUDIENCE audience="developer"]
|
|
12
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, \."]
|
|
13
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
14
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
15
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
16
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
17
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
1
18
|
import { EntityFilter } from '../../types/types'
|
|
2
19
|
import { Card, CardContent } from '../ui/card'
|
|
3
20
|
import { Input } from '../ui/input'
|
|
@@ -11,14 +28,72 @@ interface DataFiltersProps {
|
|
|
11
28
|
onChange: (values: Record<string, any>) => void
|
|
12
29
|
onClear: () => void
|
|
13
30
|
}
|
|
14
|
-
|
|
31
|
+
// CIL[END chunk_id="DataFilters_module_header_1783929048"]
|
|
32
|
+
// CIL[BEGIN chunk_id="DataFilters_datafilters_1783929048" type="function" identity="DataFilters" parent="none"]
|
|
33
|
+
// CIL[DOC-MACRO purpose="Render filter UI with search, enum, and boolean inputs"]
|
|
34
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Display all filter controls and clear button"]
|
|
35
|
+
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
|
|
36
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="JSX filter card" errors="none" side_effects="calls handleFilterChange,onClear"]
|
|
37
|
+
// CIL[DOC-MICRO logic_summary="Map filter types to UI components, show clear button when active" notable_decisions="[]"]
|
|
38
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
39
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
40
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
|
|
41
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
42
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
43
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
44
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
45
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
15
46
|
export function DataFilters({ filters, values, onChange, onClear }: DataFiltersProps) {
|
|
47
|
+
// CIL[BEGIN chunk_id="DataFilters_handlefilterchange_1783929048" type="function" identity="handleFilterChange" parent="DataFilters_datafilters_1783929048"]
|
|
48
|
+
// CIL[DOC-MACRO purpose="Update filter value and call onChange callback"]
|
|
49
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle handleFilterChange"]
|
|
50
|
+
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\"\\\"]"]
|
|
51
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="none" errors="none" side_effects="calls onChange"]
|
|
52
|
+
// CIL[DOC-MICRO logic_summary="Merge new filter value with existing values and notify parent" notable_decisions="[]"]
|
|
53
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
54
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
55
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 2. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, \."]
|
|
56
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 2. Total affected: 2."]
|
|
57
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
58
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
59
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
60
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
16
61
|
const handleFilterChange = (key: string, value: any) => {
|
|
17
62
|
onChange({ ...values, [key]: value })
|
|
18
63
|
}
|
|
64
|
+
// CIL[END chunk_id="DataFilters_handlefilterchange_1783929048"]
|
|
19
65
|
|
|
66
|
+
// CIL[BEGIN chunk_id="DataFilters_hasactivefilters_1783929048" type="function" identity="hasActiveFilters" parent="DataFilters_datafilters_1783929048"]
|
|
67
|
+
// CIL[DOC-MACRO purpose="Check if any filters have active values"]
|
|
68
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle hasActiveFilters"]
|
|
69
|
+
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\".framework/migrations/015_simplify_apps_table.sql\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/migrations/025_retype_threads_messages.sql\",\"\\\"]"]
|
|
70
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="boolean" errors="none" side_effects="none"]
|
|
71
|
+
// CIL[DOC-MICRO logic_summary="Check if any filter values are set (not empty/undefined/all)" notable_decisions="[]"]
|
|
72
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
73
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
74
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/migrations/015_simplify_apps_table.sql, .framework/src/pages/admin/RolesPage.tsx, .framework/migrations/025_retype_threads_messages.sql, \."]
|
|
75
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
76
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
77
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
78
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
79
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
20
80
|
const hasActiveFilters = Object.values(values).some(v => v !== undefined && v !== '' && v !== 'all')
|
|
81
|
+
// CIL[END chunk_id="DataFilters_hasactivefilters_1783929048"]
|
|
21
82
|
|
|
83
|
+
// CIL[BEGIN chunk_id="DataFilters_mainrender_1783929048" type="render_block" identity="mainRender" parent="DataFilters_datafilters_1783929048"]
|
|
84
|
+
// CIL[DOC-MACRO purpose="Render filter UI with search, enum, and boolean inputs"]
|
|
85
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Handle mainRender"]
|
|
86
|
+
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/src/components/ui/dialog.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\"\\\"]"]
|
|
87
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="JSX filter card" errors="none" side_effects="calls handleFilterChange,onClear"]
|
|
88
|
+
// CIL[DOC-MICRO logic_summary="Map filter types to UI components, show clear button when active" notable_decisions="[]"]
|
|
89
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
90
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
91
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/src/components/ui/dialog.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, \."]
|
|
92
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
93
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
94
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
95
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
96
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
22
97
|
return (
|
|
23
98
|
<Card>
|
|
24
99
|
<CardContent className="p-4">
|
|
@@ -88,4 +163,6 @@ export function DataFilters({ filters, values, onChange, onClear }: DataFiltersP
|
|
|
88
163
|
</CardContent>
|
|
89
164
|
</Card>
|
|
90
165
|
)
|
|
166
|
+
// CIL[END chunk_id="DataFilters_mainrender_1783929048"]
|
|
91
167
|
}
|
|
168
|
+
// CIL[END chunk_id="DataFilters_datafilters_1783929048"]
|
|
@@ -1,43 +1,45 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module src/components/runtime/DataHeader
|
|
3
|
-
* @audience installer
|
|
4
|
-
* @layer frontend-component
|
|
5
|
-
* @stability stable
|
|
6
|
-
*
|
|
7
|
-
* Title bar for entity list pages. Renders an entity icon, title,
|
|
8
|
-
* description, and a "New" button that navigates to the create route.
|
|
9
|
-
* The icon name is resolved dynamically from `@heroicons/react`; falls
|
|
10
|
-
* back to `CubeIcon` if the name is unrecognised.
|
|
11
|
-
*
|
|
12
|
-
* @seeAlso src/components/runtime/DataListPage.tsx (mounts this component)
|
|
13
|
-
*/
|
|
14
1
|
|
|
2
|
+
|
|
3
|
+
// CIL[BEGIN chunk_id="DataHeader_module_header_1783929048" type="module_header" identity="imports_and_types" parent="none"]
|
|
4
|
+
// CIL[DOC-MACRO purpose="Import dependencies and define header component types"]
|
|
5
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Manage imports and interface for data header"]
|
|
6
|
+
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/components/ui/dialog.tsx\",\".framework/src/pages/admin/IntegrationsPage.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\"\\\"]"]
|
|
7
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="types" errors="none" side_effects="none"]
|
|
8
|
+
// CIL[DOC-MICRO logic_summary="Imports React, UI components, defines DataHeaderProps" notable_decisions="[]"]
|
|
9
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
10
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
11
|
+
// CIL[DOC-AUDIENCE audience="developer"]
|
|
12
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/components/ui/dialog.tsx, .framework/src/pages/admin/IntegrationsPage.tsx, .framework/src/pages/admin/RolesPage.tsx, \."]
|
|
13
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
14
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
15
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
16
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
17
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
15
18
|
import React from 'react'
|
|
16
19
|
import { Button } from '../ui/button'
|
|
17
20
|
import * as Icons from 'lucide-react'
|
|
18
21
|
|
|
19
|
-
/**
|
|
20
|
-
* Props for `DataHeader`.
|
|
21
|
-
*
|
|
22
|
-
* @prop title - Entity name (displayed capitalised)
|
|
23
|
-
* @prop icon - Heroicon name string (e.g. `'UserIcon'`)
|
|
24
|
-
* @prop description - Short subtitle text
|
|
25
|
-
* @prop newButtonHref - URL to navigate to when "New" is clicked
|
|
26
|
-
*/
|
|
27
22
|
interface DataHeaderProps {
|
|
28
23
|
title: string
|
|
29
24
|
icon: string
|
|
30
25
|
description: string
|
|
31
26
|
newButtonHref: string
|
|
32
27
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
28
|
+
// CIL[END chunk_id="DataHeader_module_header_1783929048"]
|
|
29
|
+
// CIL[BEGIN chunk_id="DataHeader_dataheader_1783929048" type="function" identity="DataHeader" parent="none"]
|
|
30
|
+
// CIL[DOC-MACRO purpose="Render entity list header with title and new button"]
|
|
31
|
+
// CIL[DOC-RESPONSIBILITY responsibility="Display header with icon, title, description, and create button"]
|
|
32
|
+
// CIL[DOC-CONTEXT module="runtime" layer="frontend-component" related_files="[\".framework/src/components/ui/dialog.tsx\",\"custom/apps/portal/pages/ContentPage.tsx\",\"custom/apps/cortex/pages/operations/OperationsDashboard.tsx\",\".framework/src/pages/admin/RolesPage.tsx\",\".framework/functions/_shared/principal.ts\",\"\\\"]"]
|
|
33
|
+
// CIL[DOC-CONTRACT inputs="none" outputs="JSX header" errors="none" side_effects="navigation"]
|
|
34
|
+
// CIL[DOC-MICRO logic_summary="Renders icon, title, description, and new button with navigation" notable_decisions="[]"]
|
|
35
|
+
// CIL[DOC-CONFIDENCE pass="second" score="0.95" flags="none"]
|
|
36
|
+
// CIL[DOC-STABILITY stability="stable"]
|
|
37
|
+
// CIL[DOC-VECTOR type="context" content="Layer: frontend-component. Direct callers: 0. Direct calls: 0. Related files: .framework/src/components/ui/dialog.tsx, custom/apps/portal/pages/ContentPage.tsx, custom/apps/cortex/pages/operations/OperationsDashboard.tsx, .framework/src/pages/admin/RolesPage.tsx, .framework/functions/_shared/principal.ts, \."]
|
|
38
|
+
// CIL[DOC-VECTOR type="blast_radius" content="Direct callers: 0. Total affected: 0."]
|
|
39
|
+
// CIL[DOC-VECTOR type="configuration" content="No configuration dependencies."]
|
|
40
|
+
// CIL[DOC-VECTOR type="constraint" content="No test paths identified."]
|
|
41
|
+
// CIL[DOC-VECTOR type="implementation_pattern" content="" status="pending_human_input"]
|
|
42
|
+
// CIL[DOC-VECTOR type="user_journey" content="" status="pending_human_input"]
|
|
41
43
|
export function DataHeader({ title, icon, description, newButtonHref }: DataHeaderProps) {
|
|
42
44
|
// Dynamically get the icon component
|
|
43
45
|
const IconComponent = (Icons as Record<string, React.ComponentType<{ className?: string }>>)[icon] || Icons.Box
|
|
@@ -66,3 +68,4 @@ export function DataHeader({ title, icon, description, newButtonHref }: DataHead
|
|
|
66
68
|
</div>
|
|
67
69
|
)
|
|
68
70
|
}
|
|
71
|
+
// CIL[END chunk_id="DataHeader_dataheader_1783929048"]
|