@specverse/runtime 4.1.0 → 4.1.2

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.
Files changed (93) hide show
  1. package/README.md +356 -0
  2. package/dist/runtime/views/core/atomic-components-registry.d.ts +63 -0
  3. package/dist/runtime/views/core/atomic-components-registry.d.ts.map +1 -0
  4. package/dist/runtime/views/core/atomic-components-registry.js +822 -0
  5. package/dist/runtime/views/core/atomic-components-registry.js.map +1 -0
  6. package/dist/runtime/views/core/composite-pattern-types.d.ts +171 -0
  7. package/dist/runtime/views/core/composite-pattern-types.d.ts.map +1 -0
  8. package/dist/runtime/views/core/composite-pattern-types.js +11 -0
  9. package/dist/runtime/views/core/composite-pattern-types.js.map +1 -0
  10. package/dist/runtime/views/core/composite-patterns.d.ts +67 -0
  11. package/dist/runtime/views/core/composite-patterns.d.ts.map +1 -0
  12. package/dist/runtime/views/core/composite-patterns.js +485 -0
  13. package/dist/runtime/views/core/composite-patterns.js.map +1 -0
  14. package/dist/runtime/views/core/entity-display.d.ts +28 -0
  15. package/dist/runtime/views/core/entity-display.d.ts.map +1 -1
  16. package/dist/runtime/views/core/entity-display.js +75 -0
  17. package/dist/runtime/views/core/entity-display.js.map +1 -1
  18. package/dist/runtime/views/core/index.d.ts +4 -1
  19. package/dist/runtime/views/core/index.d.ts.map +1 -1
  20. package/dist/runtime/views/core/index.js +5 -1
  21. package/dist/runtime/views/core/index.js.map +1 -1
  22. package/dist/runtime/views/core/pattern-engine.d.ts +2 -2
  23. package/dist/runtime/views/core/pattern-engine.d.ts.map +1 -1
  24. package/dist/runtime/views/core/pattern-engine.js.map +1 -1
  25. package/dist/runtime/views/core/types.d.ts +2 -0
  26. package/dist/runtime/views/core/types.d.ts.map +1 -1
  27. package/dist/runtime/views/index.d.ts +5 -2
  28. package/dist/runtime/views/index.d.ts.map +1 -1
  29. package/dist/runtime/views/index.js +5 -2
  30. package/dist/runtime/views/index.js.map +1 -1
  31. package/dist/runtime/views/react/components/DevShell.d.ts.map +1 -1
  32. package/dist/runtime/views/react/components/DevShell.js +6 -2
  33. package/dist/runtime/views/react/components/DevShell.js.map +1 -1
  34. package/dist/runtime/views/react/components/EntitySelect.d.ts +14 -0
  35. package/dist/runtime/views/react/components/EntitySelect.d.ts.map +1 -0
  36. package/dist/runtime/views/react/components/EntitySelect.js +29 -0
  37. package/dist/runtime/views/react/components/EntitySelect.js.map +1 -0
  38. package/dist/runtime/views/react/components/EventStream.d.ts +11 -0
  39. package/dist/runtime/views/react/components/EventStream.d.ts.map +1 -0
  40. package/dist/runtime/views/react/components/EventStream.js +49 -0
  41. package/dist/runtime/views/react/components/EventStream.js.map +1 -0
  42. package/dist/runtime/views/react/components/FieldInput.d.ts +23 -0
  43. package/dist/runtime/views/react/components/FieldInput.d.ts.map +1 -0
  44. package/dist/runtime/views/react/components/FieldInput.js +28 -0
  45. package/dist/runtime/views/react/components/FieldInput.js.map +1 -0
  46. package/dist/runtime/views/react/components/FormView.d.ts +21 -0
  47. package/dist/runtime/views/react/components/FormView.d.ts.map +1 -0
  48. package/dist/runtime/views/react/components/FormView.js +13 -0
  49. package/dist/runtime/views/react/components/FormView.js.map +1 -0
  50. package/dist/runtime/views/react/components/ModelManager.d.ts +6 -2
  51. package/dist/runtime/views/react/components/ModelManager.d.ts.map +1 -1
  52. package/dist/runtime/views/react/components/ModelManager.js +166 -61
  53. package/dist/runtime/views/react/components/ModelManager.js.map +1 -1
  54. package/dist/runtime/views/react/components/ModelSelector.d.ts.map +1 -1
  55. package/dist/runtime/views/react/components/ModelSelector.js +4 -1
  56. package/dist/runtime/views/react/components/ModelSelector.js.map +1 -1
  57. package/dist/runtime/views/react/components/OperationExecutor.d.ts +15 -0
  58. package/dist/runtime/views/react/components/OperationExecutor.d.ts.map +1 -0
  59. package/dist/runtime/views/react/components/OperationExecutor.js +86 -0
  60. package/dist/runtime/views/react/components/OperationExecutor.js.map +1 -0
  61. package/dist/runtime/views/react/components/OperationResultView.d.ts +10 -0
  62. package/dist/runtime/views/react/components/OperationResultView.d.ts.map +1 -0
  63. package/dist/runtime/views/react/components/OperationResultView.js +92 -0
  64. package/dist/runtime/views/react/components/OperationResultView.js.map +1 -0
  65. package/dist/runtime/views/react/components/OperationView.d.ts +21 -0
  66. package/dist/runtime/views/react/components/OperationView.d.ts.map +1 -0
  67. package/dist/runtime/views/react/components/OperationView.js +7 -0
  68. package/dist/runtime/views/react/components/OperationView.js.map +1 -0
  69. package/dist/runtime/views/react/components/RelationshipField.js +4 -4
  70. package/dist/runtime/views/react/components/RelationshipField.js.map +1 -1
  71. package/dist/runtime/views/react/components/RuntimeView.d.ts.map +1 -1
  72. package/dist/runtime/views/react/components/RuntimeView.js +93 -33
  73. package/dist/runtime/views/react/components/RuntimeView.js.map +1 -1
  74. package/dist/runtime/views/react/components/ViewRouter.d.ts +7 -1
  75. package/dist/runtime/views/react/components/ViewRouter.d.ts.map +1 -1
  76. package/dist/runtime/views/react/components/ViewRouter.js +57 -18
  77. package/dist/runtime/views/react/components/ViewRouter.js.map +1 -1
  78. package/dist/runtime/views/react/hooks/useEventStream.d.ts +29 -0
  79. package/dist/runtime/views/react/hooks/useEventStream.d.ts.map +1 -0
  80. package/dist/runtime/views/react/hooks/useEventStream.js +114 -0
  81. package/dist/runtime/views/react/hooks/useEventStream.js.map +1 -0
  82. package/dist/runtime/views/react/hooks/useResizableSidebar.d.ts.map +1 -1
  83. package/dist/runtime/views/react/hooks/useResizableSidebar.js +2 -0
  84. package/dist/runtime/views/react/hooks/useResizableSidebar.js.map +1 -1
  85. package/dist/runtime/views/react/index.d.ts +10 -1
  86. package/dist/runtime/views/react/index.d.ts.map +1 -1
  87. package/dist/runtime/views/react/index.js +11 -1
  88. package/dist/runtime/views/react/index.js.map +1 -1
  89. package/dist/runtime/views/react/react-pattern-adapter.d.ts +235 -0
  90. package/dist/runtime/views/react/react-pattern-adapter.d.ts.map +1 -0
  91. package/dist/runtime/views/react/react-pattern-adapter.js +1450 -0
  92. package/dist/runtime/views/react/react-pattern-adapter.js.map +1 -0
  93. package/package.json +1 -1
@@ -4,15 +4,17 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
4
4
  *
5
5
  * Two-panel layout: form (top) + entity list (bottom).
6
6
  * Supports create, update, delete, and lifecycle transitions.
7
+ * Entity list shows relationships (blue), lifecycles (purple), and metadata (gray).
7
8
  *
8
9
  * Uses RuntimeViewProvider context instead of appStore.
9
- * Ported from specverse-app-demo/frontend-react/src/components/models/ModelManager.tsx
10
10
  */
11
- import { useState, useEffect, useMemo, useCallback } from 'react';
11
+ import { useState, useEffect, useMemo, useCallback, useRef } from 'react';
12
12
  import { useRuntimeContext } from '../context.js';
13
+ import { getEntityDisplayName, getEntityId, findEntityById, formatDisplayValue, getForeignKeyName, humanizeFieldName } from '../../core/entity-display.js';
13
14
  import { isAutoField, isFieldRequired, initializeFormData, classifyFields } from '../../core/field-classification.js';
14
15
  import { RelationshipField } from './RelationshipField.js';
15
- export function ModelManager({ modelName, controllerName }) {
16
+ import { FieldInput } from './FieldInput.js';
17
+ export function ModelManager({ modelName, controllerName, initialEntityId, onNavigateToModel }) {
16
18
  const ctx = useRuntimeContext();
17
19
  const controller = controllerName || `${modelName}Controller`;
18
20
  // Fetch data via context hooks
@@ -25,7 +27,21 @@ export function ModelManager({ modelName, controllerName }) {
25
27
  const attributes = schema?.attributes || {};
26
28
  const relationships = schema?.relationships || {};
27
29
  const lifecycles = schema?.lifecycles || {};
28
- const { regularFields, metadataFields } = useMemo(() => classifyFields(attributes), [attributes]);
30
+ const { regularFields: allRegularFields, metadataFields } = useMemo(() => classifyFields(attributes), [attributes]);
31
+ const relationshipEntries = useMemo(() => Object.entries(relationships), [relationships]);
32
+ const lifecycleEntries = useMemo(() => Object.entries(lifecycles), [lifecycles]);
33
+ const hasLifecycles = lifecycleEntries.length > 0;
34
+ // Hide FK fields from regular columns — they're shown in relationship columns instead
35
+ const belongsToFKs = useMemo(() => {
36
+ const fks = new Set();
37
+ for (const [relName, relDef] of relationshipEntries) {
38
+ if (relDef.type === 'belongsTo') {
39
+ fks.add(getForeignKeyName(relName, relDef));
40
+ }
41
+ }
42
+ return fks;
43
+ }, [relationshipEntries]);
44
+ const regularFields = useMemo(() => allRegularFields.filter(f => !belongsToFKs.has(f)), [allRegularFields, belongsToFKs]);
29
45
  // State
30
46
  const [selectedEntity, setSelectedEntity] = useState(null);
31
47
  const [formMode, setFormMode] = useState('create');
@@ -33,25 +49,67 @@ export function ModelManager({ modelName, controllerName }) {
33
49
  const [formData, setFormData] = useState({});
34
50
  const [errors, setErrors] = useState({});
35
51
  const [successMessage, setSuccessMessage] = useState(null);
52
+ const [selectedLifecycleStates, setSelectedLifecycleStates] = useState({});
53
+ // Pre-select entity when navigating from detail → form
54
+ useEffect(() => {
55
+ if (initialEntityId && entities.length > 0 && !selectedEntity) {
56
+ const target = findEntityById(entities, initialEntityId);
57
+ if (target) {
58
+ setSelectedEntity(target);
59
+ setFormMode('update');
60
+ }
61
+ }
62
+ }, [initialEntityId, entities, selectedEntity]);
63
+ // Sync selected entity with refreshed list (after mutations)
64
+ useEffect(() => {
65
+ if (selectedEntity && entities.length > 0) {
66
+ const updatedEntity = entities.find((e) => getEntityId(e) === getEntityId(selectedEntity));
67
+ if (updatedEntity) {
68
+ // Check if lifecycle states changed
69
+ const oldStates = JSON.stringify(selectedEntity.metadata?.lifecycleStates || {});
70
+ const newStates = JSON.stringify(updatedEntity.metadata?.lifecycleStates || {});
71
+ if (oldStates !== newStates) {
72
+ setSelectedEntity(updatedEntity);
73
+ setSelectedLifecycleStates({ ...(updatedEntity.metadata?.lifecycleStates || {}) });
74
+ }
75
+ }
76
+ else {
77
+ // Entity was deleted
78
+ setSelectedEntity(null);
79
+ setFormMode('create');
80
+ }
81
+ }
82
+ else if (selectedEntity && entities.length === 0) {
83
+ setSelectedEntity(null);
84
+ setFormMode('create');
85
+ }
86
+ }, [entities, selectedEntity?.id]);
36
87
  // Init form when mode or entity changes
37
88
  useEffect(() => {
38
89
  if (formMode === 'update' && selectedEntity) {
39
- setFormData({ ...(selectedEntity.data || selectedEntity) });
90
+ setFormData({ ...(selectedEntity.data || {}) });
91
+ setSelectedLifecycleStates({ ...(selectedEntity.metadata?.lifecycleStates || {}) });
40
92
  }
41
93
  else {
42
94
  setFormData(initializeFormData(attributes));
95
+ setSelectedLifecycleStates({});
43
96
  }
44
97
  setErrors({});
45
98
  setSuccessMessage(null);
46
99
  }, [formMode, selectedEntity, attributes]);
47
- // Reset when model changes
100
+ // Reset when model changes (not when attributes load — that would clear pre-selected entity)
101
+ const prevModelRef = useRef(modelName);
48
102
  useEffect(() => {
49
- setSelectedEntity(null);
50
- setFormMode('create');
51
- setActiveTab('edit');
52
- setFormData(initializeFormData(attributes));
53
- setErrors({});
54
- }, [modelName, attributes]);
103
+ if (prevModelRef.current !== modelName) {
104
+ prevModelRef.current = modelName;
105
+ setSelectedEntity(null);
106
+ setFormMode('create');
107
+ setActiveTab('edit');
108
+ setFormData(initializeFormData(attributes));
109
+ setErrors({});
110
+ setSelectedLifecycleStates({});
111
+ }
112
+ }, [modelName]);
55
113
  const handleFieldChange = useCallback((field, value) => {
56
114
  setFormData(prev => ({ ...prev, [field]: value }));
57
115
  }, []);
@@ -69,18 +127,41 @@ export function ModelManager({ modelName, controllerName }) {
69
127
  await executeMutation.mutateAsync({
70
128
  controllerName: controller,
71
129
  operationName: 'create',
72
- data: formData,
130
+ data: { data: formData },
73
131
  });
74
132
  setFormData(initializeFormData(attributes));
75
133
  setSuccessMessage(`${modelName} created successfully`);
76
134
  }
77
135
  else if (selectedEntity) {
136
+ // Strip auto-generated fields from update data (id, createdAt, updatedAt)
137
+ // These should never be sent in an update — the backend owns them
138
+ const updateData = {};
139
+ for (const [key, value] of Object.entries(formData)) {
140
+ if (key === 'id')
141
+ continue; // always strip id from update payload
142
+ if (!isAutoField(key, attributes[key])) {
143
+ updateData[key] = value;
144
+ }
145
+ }
146
+ // Use UUID (data.id) as the entity identifier — works with both
147
+ // app-demo's in-memory store (falls back to UUID) and Prisma (native UUID)
148
+ const entityId = getEntityId(selectedEntity);
78
149
  await executeMutation.mutateAsync({
79
150
  controllerName: controller,
80
151
  operationName: 'update',
81
- data: formData,
82
- entityId: selectedEntity.data?.id || selectedEntity.id,
152
+ data: { id: entityId, data: updateData },
83
153
  });
154
+ // Apply lifecycle state changes
155
+ for (const [lcName, targetState] of Object.entries(selectedLifecycleStates)) {
156
+ const currentState = selectedEntity.metadata?.lifecycleStates?.[lcName] || selectedEntity.data?.lifecycleStates?.[lcName];
157
+ if (targetState && targetState !== currentState) {
158
+ await transitionMutation.mutateAsync({
159
+ controllerName: controller,
160
+ entityId: getEntityId(selectedEntity),
161
+ targetState,
162
+ });
163
+ }
164
+ }
84
165
  setSuccessMessage(`${modelName} updated successfully`);
85
166
  }
86
167
  }
@@ -91,12 +172,14 @@ export function ModelManager({ modelName, controllerName }) {
91
172
  const handleDelete = async () => {
92
173
  if (!selectedEntity)
93
174
  return;
175
+ if (typeof window !== 'undefined' && !window.confirm(`Delete this ${modelName}?`))
176
+ return;
94
177
  try {
95
178
  await executeMutation.mutateAsync({
96
179
  controllerName: controller,
97
180
  operationName: 'delete',
98
181
  data: {},
99
- entityId: selectedEntity.data?.id || selectedEntity.id,
182
+ entityId: getEntityId(selectedEntity),
100
183
  });
101
184
  setSelectedEntity(null);
102
185
  setFormMode('create');
@@ -118,65 +201,87 @@ export function ModelManager({ modelName, controllerName }) {
118
201
  setFormData(initializeFormData(attributes));
119
202
  setErrors({});
120
203
  setSuccessMessage(null);
204
+ setSelectedLifecycleStates({});
121
205
  }, [attributes]);
122
- const hasLifecycles = Object.keys(lifecycles).length > 0;
123
- return (_jsxs("div", { className: "flex flex-col h-full", children: [_jsxs("div", { className: "px-4 py-3 border-b border-gray-200 dark:border-gray-700 flex items-center justify-between", children: [_jsx("h2", { className: "text-lg font-semibold text-gray-900 dark:text-gray-100", children: formMode === 'create' ? `New ${modelName}` : `Edit ${modelName}` }), _jsx("div", { className: "flex gap-2", children: formMode === 'update' && (_jsxs(_Fragment, { children: [_jsx("button", { onClick: handleClear, className: "px-3 py-1.5 text-sm border border-gray-300 dark:border-gray-600 rounded text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors", children: "+ New" }), _jsx("button", { onClick: handleDelete, className: "px-3 py-1.5 text-sm bg-red-600 hover:bg-red-700 text-white rounded transition-colors", children: "Delete" })] })) })] }), errors._form && (_jsx("div", { className: "mx-4 mt-2 px-4 py-3 bg-red-50 dark:bg-red-900/30 border border-red-200 dark:border-red-700 rounded text-sm text-red-800 dark:text-red-200", children: errors._form })), successMessage && (_jsx("div", { className: "mx-4 mt-2 px-4 py-3 bg-green-50 dark:bg-green-900/30 border border-green-200 dark:border-green-700 rounded text-sm text-green-800 dark:text-green-200", children: successMessage })), formMode === 'update' && hasLifecycles && (_jsxs("div", { className: "px-4 pt-2 flex gap-1", children: [_jsx("button", { onClick: () => setActiveTab('edit'), className: `px-3 py-1.5 text-sm rounded-t ${activeTab === 'edit' ? 'bg-white dark:bg-gray-800 text-blue-600 border border-b-0 border-gray-200 dark:border-gray-700' : 'text-gray-600 dark:text-gray-400'}`, children: "Edit" }), _jsx("button", { onClick: () => setActiveTab('evolve'), className: `px-3 py-1.5 text-sm rounded-t ${activeTab === 'evolve' ? 'bg-white dark:bg-gray-800 text-blue-600 border border-b-0 border-gray-200 dark:border-gray-700' : 'text-gray-600 dark:text-gray-400'}`, children: "Evolve" })] })), _jsx("div", { className: "px-4 py-4 max-h-[50vh] overflow-auto border-b border-gray-200 dark:border-gray-700", children: activeTab === 'edit' ? (_jsxs("form", { onSubmit: (e) => { e.preventDefault(); handleSave(); }, className: "space-y-4", children: [regularFields.filter(shouldShowField).map((fieldName) => {
206
+ // Shared ref for related entity data (populated by RelatedModelFetcher children)
207
+ const relatedEntitiesRef = useRef({});
208
+ // Resolve relationship display value for entity list
209
+ const resolveRelValue = useCallback((entity, relName, relDef) => {
210
+ const fk = getForeignKeyName(relName, relDef);
211
+ const fkValue = entity.data?.[fk];
212
+ if (!fkValue)
213
+ return '-';
214
+ const targetModel = relDef.targetModel || relDef.model;
215
+ const targetEntities = relatedEntitiesRef.current[targetModel] || [];
216
+ const related = findEntityById(targetEntities, fkValue);
217
+ return related ? getEntityDisplayName(related, relatedEntitiesRef.current) : String(fkValue).slice(0, 8) + '...';
218
+ }, []);
219
+ // Collect target models from belongsTo relationships for data fetching
220
+ const relatedModels = useMemo(() => relationshipEntries
221
+ .filter(([_, r]) => r.type === 'belongsTo')
222
+ .map(([_, r]) => r.targetModel || r.model)
223
+ .filter(Boolean), [relationshipEntries]);
224
+ return (_jsxs("div", { className: "flex flex-col h-full", children: [relatedModels.map(m => _jsx(RelatedModelFetcher, { modelName: m, entitiesRef: relatedEntitiesRef }, m)), _jsxs("div", { className: "px-4 py-3 border-b border-gray-200 dark:border-gray-700 flex items-center justify-between", children: [_jsx("h2", { className: "text-lg font-semibold text-gray-900 dark:text-gray-100", children: formMode === 'create' ? `New ${modelName}` : `Edit ${modelName}` }), _jsx("div", { className: "flex gap-2", children: formMode === 'update' && (_jsxs(_Fragment, { children: [_jsx("button", { onClick: handleClear, className: "px-3 py-1.5 text-sm border border-gray-300 dark:border-gray-600 rounded text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors", children: "+ New" }), _jsx("button", { onClick: handleDelete, className: "px-3 py-1.5 text-sm bg-red-600 hover:bg-red-700 text-white rounded transition-colors", children: "Delete" })] })) })] }), errors._form && (_jsx("div", { className: "mx-4 mt-2 px-4 py-3 bg-red-50 dark:bg-red-900/30 border border-red-200 dark:border-red-700 rounded text-sm text-red-800 dark:text-red-200", children: errors._form })), successMessage && (_jsx("div", { className: "mx-4 mt-2 px-4 py-3 bg-green-50 dark:bg-green-900/30 border border-green-200 dark:border-green-700 rounded text-sm text-green-800 dark:text-green-200", children: successMessage })), formMode === 'update' && hasLifecycles && (_jsxs("div", { className: "px-4 pt-2 flex gap-1", children: [_jsx("button", { onClick: () => setActiveTab('edit'), className: `px-3 py-1.5 text-sm rounded-t ${activeTab === 'edit' ? 'bg-white dark:bg-gray-800 text-blue-600 border border-b-0 border-gray-200 dark:border-gray-700' : 'text-gray-600 dark:text-gray-400'}`, children: "Edit" }), _jsx("button", { onClick: () => setActiveTab('evolve'), className: `px-3 py-1.5 text-sm rounded-t ${activeTab === 'evolve' ? 'bg-white dark:bg-gray-800 text-blue-600 border border-b-0 border-gray-200 dark:border-gray-700' : 'text-gray-600 dark:text-gray-400'}`, children: "Evolve" })] })), _jsx("div", { className: "px-4 py-4 max-h-[50vh] overflow-auto border-b border-gray-200 dark:border-gray-700", children: activeTab === 'edit' ? (_jsxs("form", { onSubmit: (e) => { e.preventDefault(); handleSave(); }, className: "space-y-3", children: [regularFields.filter(shouldShowField).map((fieldName) => {
124
225
  const attrDef = attributes[fieldName];
125
226
  const typeStr = typeof attrDef === 'string' ? attrDef : attrDef?.type || 'String';
126
227
  const required = isFieldRequired(attrDef);
127
- return (_jsxs("div", { children: [_jsxs("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-200 mb-1", children: [fieldName, required && _jsx("span", { className: "text-red-500 dark:text-red-400 ml-1", children: "*" })] }), renderFieldInput(fieldName, typeStr, formData[fieldName], (val) => handleFieldChange(fieldName, val))] }, fieldName));
128
- }), Object.entries(relationships).map(([relName, relDef]) => {
228
+ return (_jsxs("div", { children: [_jsxs("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-200 mb-1", children: [humanizeFieldName(fieldName), required && _jsx("span", { className: "text-red-500 dark:text-red-400 ml-1", children: "*" })] }), _jsx(FieldInput, { name: fieldName, typeStr: typeStr, value: formData[fieldName], onChange: (val) => handleFieldChange(fieldName, val) })] }, fieldName));
229
+ }), relationshipEntries.map(([relName, relDef]) => {
129
230
  if (relDef.type !== 'belongsTo')
130
231
  return null;
131
- return (_jsx(RelationshipField, { name: relName, relationship: relDef, value: formData[relDef.foreignKey || `${relName}Id`], onChange: (val) => handleFieldChange(relDef.foreignKey || `${relName}Id`, val), required: relDef.required }, relName));
132
- }), _jsx("button", { type: "submit", disabled: executeMutation.isPending, className: "px-4 py-2 bg-blue-600 hover:bg-blue-700 text-white rounded font-medium transition-colors disabled:opacity-50", children: executeMutation.isPending ? 'Saving...' : formMode === 'create' ? 'Create' : 'Update' })] })) : (_jsx("div", { className: "space-y-4", children: Object.entries(lifecycles).map(([lcName, lcDef]) => {
133
- const currentState = selectedEntity?.data?.lifecycleStates?.[lcName] || selectedEntity?.metadata?.lifecycleStates?.[lcName] || lcDef.initial;
134
- return (_jsxs("div", { className: "p-3 border border-gray-200 dark:border-gray-700 rounded", children: [_jsx("div", { className: "text-sm font-medium text-gray-700 dark:text-gray-200 mb-2", children: lcName }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-sm text-gray-500 dark:text-gray-400", children: "Current:" }), _jsx("span", { className: "px-2 py-0.5 bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200 rounded text-xs font-medium", children: currentState }), lcDef.states && (_jsxs("select", { className: "ml-auto px-2 py-1 text-sm border border-gray-300 dark:border-gray-600 rounded bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100", value: "", onChange: (e) => {
232
+ return (_jsx(RelationshipField, { name: relName, relationship: relDef, value: formData[getForeignKeyName(relName, relDef)], onChange: (val) => handleFieldChange(getForeignKeyName(relName, relDef), val), required: relDef.required }, relName));
233
+ }), hasLifecycles && formMode === 'update' && lifecycleEntries.map(([lcName, lcDef]) => {
234
+ const currentState = selectedEntity?.metadata?.lifecycleStates?.[lcName] || selectedEntity?.data?.lifecycleStates?.[lcName] || lcDef.initial || lcDef.initialState;
235
+ const transitions = lcDef.transitions || [];
236
+ const validNextStates = transitions
237
+ .filter((t) => t.from === currentState)
238
+ .map((t) => t.to);
239
+ // Show current + valid next states
240
+ const availableStates = [currentState, ...validNextStates.filter((s) => s !== currentState)];
241
+ return (_jsxs("div", { children: [_jsx("label", { className: "block text-sm font-medium text-gray-700 dark:text-gray-200 mb-1", children: humanizeFieldName(lcName) }), _jsx("select", { value: selectedLifecycleStates[lcName] || currentState || '', onChange: (e) => setSelectedLifecycleStates(prev => ({ ...prev, [lcName]: e.target.value })), className: "w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 dark:bg-gray-800 dark:text-gray-200", children: availableStates.map((state) => (_jsx("option", { value: state, children: humanizeFieldName(state) }, state))) })] }, lcName));
242
+ }), _jsx("button", { type: "submit", disabled: executeMutation.isPending, className: "px-4 py-2 bg-blue-600 hover:bg-blue-700 text-white rounded font-medium transition-colors disabled:opacity-50", children: executeMutation.isPending ? 'Saving...' : formMode === 'create' ? 'Create' : 'Update' })] })) : (
243
+ /* Evolve tab — lifecycle transitions */
244
+ _jsx("div", { className: "space-y-4", children: lifecycleEntries.map(([lcName, lcDef]) => {
245
+ const currentState = selectedEntity?.metadata?.lifecycleStates?.[lcName] || selectedEntity?.data?.lifecycleStates?.[lcName] || lcDef.initial || lcDef.initialState;
246
+ // Compute valid next states from transitions
247
+ const transitions = lcDef.transitions || [];
248
+ const validNextStates = transitions
249
+ .filter((t) => t.from === currentState)
250
+ .map((t) => t.to);
251
+ return (_jsxs("div", { className: "p-3 border border-gray-200 dark:border-gray-700 rounded", children: [_jsx("div", { className: "text-sm font-medium text-gray-700 dark:text-gray-200 mb-2", children: humanizeFieldName(lcName) }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-sm text-gray-500 dark:text-gray-400", children: "Current:" }), _jsx("span", { className: "px-2 py-0.5 bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200 rounded text-xs font-medium", children: humanizeFieldName(currentState) }), validNextStates.length > 0 ? (_jsxs("select", { className: "ml-auto px-2 py-1 text-sm border border-gray-300 dark:border-gray-600 rounded bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100", value: "", onChange: (e) => {
135
252
  if (e.target.value && selectedEntity) {
136
253
  transitionMutation.mutateAsync({
137
254
  controllerName: controller,
138
- entityId: selectedEntity.data?.id || selectedEntity.id,
255
+ entityId: getEntityId(selectedEntity),
139
256
  targetState: e.target.value,
140
- });
257
+ }).catch((err) => setErrors({ _form: err.message || 'Transition failed' }));
141
258
  }
142
- }, children: [_jsx("option", { value: "", children: "Transition to..." }), Object.keys(lcDef.states).filter((s) => s !== currentState).map((state) => (_jsx("option", { value: state, children: state }, state)))] }))] })] }, lcName));
143
- }) })) }), _jsx("div", { className: "flex-1 overflow-auto", children: entitiesLoading ? (_jsx("div", { className: "flex items-center justify-center p-8 text-gray-500 dark:text-gray-400", children: "Loading..." })) : entities.length === 0 ? (_jsxs("div", { className: "flex items-center justify-center p-8 text-gray-500 dark:text-gray-400", children: ["No ", modelName, " entities yet"] })) : (_jsxs("table", { className: "min-w-full divide-y divide-gray-200 dark:divide-gray-700", children: [_jsx("thead", { className: "bg-gray-50 dark:bg-gray-800 sticky top-0", children: _jsxs("tr", { children: [regularFields.map(f => (_jsx("th", { className: "px-4 py-2 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider", children: f }, f))), metadataFields.slice(0, 2).map(f => (_jsx("th", { className: "px-4 py-2 text-left text-xs font-medium text-gray-400 dark:text-gray-500 uppercase tracking-wider italic", children: f }, f)))] }) }), _jsx("tbody", { className: "bg-white dark:bg-gray-900 divide-y divide-gray-200 dark:divide-gray-700", children: entities.map((entity) => {
259
+ }, children: [_jsx("option", { value: "", children: "Transition to..." }), validNextStates.map((state) => (_jsx("option", { value: state, children: humanizeFieldName(state) }, state)))] })) : (_jsx("span", { className: "ml-auto text-xs text-gray-400 dark:text-gray-500 italic", children: "No transitions available" }))] })] }, lcName));
260
+ }) })) }), _jsx("div", { className: "flex-1 overflow-auto", children: entitiesLoading ? (_jsx("div", { className: "flex items-center justify-center p-8 text-gray-500 dark:text-gray-400", children: "Loading..." })) : entities.length === 0 ? (_jsxs("div", { className: "flex items-center justify-center p-8 text-gray-500 dark:text-gray-400", children: ["No ", modelName, " entities yet"] })) : (_jsxs("table", { className: "min-w-full divide-y divide-gray-200 dark:divide-gray-700", children: [_jsx("thead", { className: "bg-gray-50 dark:bg-gray-800 sticky top-0", children: _jsxs("tr", { children: [regularFields.map(f => (_jsx("th", { className: "px-4 py-2 text-left text-xs font-medium text-gray-500 dark:text-gray-400 uppercase tracking-wider", children: f }, f))), relationshipEntries.filter(([_, r]) => r.type === 'belongsTo').map(([relName]) => (_jsx("th", { className: "px-4 py-2 text-left text-xs font-medium text-blue-500 dark:text-blue-400 uppercase tracking-wider", children: relName }, relName))), lifecycleEntries.map(([lcName]) => (_jsx("th", { className: "px-4 py-2 text-left text-xs font-medium text-purple-500 dark:text-purple-400 uppercase tracking-wider", children: lcName }, lcName))), metadataFields.slice(0, 2).map(f => (_jsx("th", { className: "px-4 py-2 text-left text-xs font-medium text-gray-400 dark:text-gray-500 uppercase tracking-wider italic", children: f }, f)))] }) }), _jsx("tbody", { className: "bg-white dark:bg-gray-900 divide-y divide-gray-200 dark:divide-gray-700", children: entities.map((entity) => {
144
261
  const data = entity.data || entity;
145
- const isSelected = selectedEntity?.id === entity.id;
146
- return (_jsxs("tr", { onClick: () => handleSelectEntity(entity), className: `cursor-pointer transition-colors ${isSelected ? 'bg-blue-50 dark:bg-blue-900/20' : 'hover:bg-gray-50 dark:hover:bg-gray-800'}`, children: [regularFields.map(f => (_jsx("td", { className: "px-4 py-2 text-sm text-gray-900 dark:text-gray-100 truncate max-w-[200px]", children: formatCellValue(data[f]) }, f))), metadataFields.slice(0, 2).map(f => (_jsx("td", { className: "px-4 py-2 text-xs text-gray-400 dark:text-gray-500 italic truncate max-w-[150px]", children: formatCellValue(data[f]) }, f)))] }, entity.id));
262
+ const isSelected = selectedEntity && getEntityId(selectedEntity) === getEntityId(entity);
263
+ return (_jsxs("tr", { onClick: () => handleSelectEntity(entity), className: `cursor-pointer transition-colors ${isSelected ? 'bg-blue-50 dark:bg-blue-900/20' : 'hover:bg-gray-50 dark:hover:bg-gray-800'}`, children: [regularFields.map(f => (_jsx("td", { className: "px-4 py-2 text-sm text-gray-900 dark:text-gray-100 truncate max-w-[200px]", children: formatDisplayValue(data[f]) }, f))), relationshipEntries.filter(([_, r]) => r.type === 'belongsTo').map(([relName, relDef]) => {
264
+ const fk = getForeignKeyName(relName, relDef);
265
+ const fkValue = data[fk];
266
+ const targetModel = relDef.targetModel || relDef.model;
267
+ return (_jsx("td", { className: "px-4 py-2 text-sm truncate max-w-[200px]", children: _jsx("span", { className: `${onNavigateToModel && fkValue ? 'text-blue-600 dark:text-blue-400 hover:underline cursor-pointer' : 'text-blue-600 dark:text-blue-400'}`, onClick: onNavigateToModel && fkValue ? (e) => {
268
+ e.stopPropagation();
269
+ onNavigateToModel(targetModel, fkValue);
270
+ } : undefined, children: resolveRelValue(entity, relName, relDef) }) }, relName));
271
+ }), lifecycleEntries.map(([lcName]) => {
272
+ const state = entity.metadata?.lifecycleStates?.[lcName] || data.lifecycleStates?.[lcName] || '';
273
+ return (_jsx("td", { className: "px-4 py-2", children: state && _jsx("span", { className: "px-2 py-0.5 bg-purple-100 dark:bg-purple-900 text-purple-800 dark:text-purple-200 rounded text-xs font-medium", children: state }) }, lcName));
274
+ }), metadataFields.slice(0, 2).map(f => (_jsx("td", { className: "px-4 py-2 text-xs text-gray-400 dark:text-gray-500 italic truncate max-w-[150px]", children: formatDisplayValue(data[f]) }, f)))] }, getEntityId(entity)));
147
275
  }) })] })) })] }));
148
276
  }
149
- /** Render appropriate input for field type */
150
- function renderFieldInput(name, typeStr, value, onChange) {
151
- const t = typeStr.toLowerCase();
152
- const inputClass = 'w-full px-3 py-2 border border-gray-300 dark:border-gray-600 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 dark:bg-gray-800 dark:text-gray-200';
153
- if (t.includes('bool')) {
154
- return (_jsx("input", { type: "checkbox", checked: !!value, onChange: (e) => onChange(e.target.checked), className: "h-4 w-4 text-blue-600 border-gray-300 dark:border-gray-600 rounded focus:ring-blue-500" }));
155
- }
156
- if (t.includes('int') || t.includes('number') || t.includes('float') || t.includes('decimal')) {
157
- return (_jsx("input", { type: "number", value: value ?? '', onChange: (e) => onChange(e.target.value ? Number(e.target.value) : ''), className: inputClass }));
158
- }
159
- if (t.includes('datetime')) {
160
- return (_jsx("input", { type: "datetime-local", value: value ? String(value).slice(0, 16) : '', onChange: (e) => onChange(e.target.value ? new Date(e.target.value).toISOString() : ''), className: inputClass }));
161
- }
162
- if (t.includes('date')) {
163
- return (_jsx("input", { type: "date", value: value ? String(value).slice(0, 10) : '', onChange: (e) => onChange(e.target.value), className: inputClass }));
164
- }
165
- if (name.toLowerCase().includes('description') || name.toLowerCase().includes('body') || name.toLowerCase().includes('content')) {
166
- return (_jsx("textarea", { rows: 4, value: value ?? '', onChange: (e) => onChange(e.target.value), className: inputClass }));
167
- }
168
- return (_jsx("input", { type: "text", value: value ?? '', onChange: (e) => onChange(e.target.value), className: inputClass }));
169
- }
170
- function formatCellValue(value) {
171
- if (value === null || value === undefined)
172
- return '-';
173
- if (typeof value === 'boolean')
174
- return value ? 'Yes' : 'No';
175
- if (value instanceof Date)
176
- return value.toLocaleDateString();
177
- if (typeof value === 'string' && value.match(/^\d{4}-\d{2}-\d{2}T/)) {
178
- return new Date(value).toLocaleDateString();
277
+ /** Fetches entities for a related model and stores in shared ref for relationship resolution */
278
+ function RelatedModelFetcher({ modelName, entitiesRef }) {
279
+ const ctx = useRuntimeContext();
280
+ const { data } = ctx.useEntitiesQuery(`${modelName}Controller`, modelName);
281
+ // Store in shared ref (doesn't trigger re-render — parent re-renders from its own entity query)
282
+ if (data) {
283
+ entitiesRef.current[modelName] = data;
179
284
  }
180
- return String(value);
285
+ return null;
181
286
  }
182
287
  //# sourceMappingURL=ModelManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ModelManager.js","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/ModelManager.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ModelManager.js","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/ModelManager.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ModelSelector.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/ModelSelector.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,EAAE,kBAAkB,2CAsE3H"}
1
+ {"version":3,"file":"ModelSelector.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/ModelSelector.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAED,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAE,EAAE,kBAAkB,2CA6E3H"}
@@ -38,6 +38,9 @@ export function ModelSelector({ models: modelsOverride, selectedModel: selectedO
38
38
  return (_jsx("li", { onClick: () => handleSelect(model), className: `px-2 py-1.5 rounded cursor-pointer border transition-all text-sm ${isSelected
39
39
  ? 'bg-blue-50 dark:bg-blue-900/30 border-blue-500 dark:border-blue-600 text-blue-700 dark:text-blue-200'
40
40
  : 'border-transparent hover:bg-gray-50 dark:hover:bg-gray-700 text-gray-700 dark:text-gray-300'}`, children: model }, model));
41
- }) })] }), _jsx(ResizeHandle, { onMouseDown: startResizing, isResizing: isResizing }), _jsx("div", { className: "flex-1 bg-white dark:bg-gray-800 rounded-lg shadow overflow-hidden flex flex-col ml-3 border border-gray-200 dark:border-gray-700", children: selected ? (_jsx(ModelManager, { modelName: selected, controllerName: `${selected}Controller` })) : (_jsx("div", { className: "flex-1 flex items-center justify-center text-gray-500 dark:text-gray-400", children: "Select a model to manage" })) })] }));
41
+ }) })] }), _jsx(ResizeHandle, { onMouseDown: startResizing, isResizing: isResizing }), _jsx("div", { className: "flex-1 bg-white dark:bg-gray-800 rounded-lg shadow overflow-hidden flex flex-col ml-3 border border-gray-200 dark:border-gray-700", children: selected ? (_jsx(ModelManager, { modelName: selected, controllerName: `${selected}Controller`, onNavigateToModel: (targetModel) => {
42
+ setSelected(targetModel);
43
+ onSelectModel?.(targetModel);
44
+ } })) : (_jsx("div", { className: "flex-1 flex items-center justify-center text-gray-500 dark:text-gray-400", children: "Select a model to manage" })) })] }));
42
45
  }
43
46
  //# sourceMappingURL=ModelSelector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ModelSelector.js","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/ModelSelector.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAQtE,MAAM,UAAU,aAAa,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,gBAAgB,EAAE,aAAa,EAAsB;IAC1H,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAChC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,mBAAmB,EAAE,CAAC;IAEnE,0CAA0C;IAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1B,IAAI,cAAc;YAAE,OAAO,cAAc,CAAC;QAC1C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAW,CAAC;QAC7B,IAAI,IAAI,EAAE,MAAM;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClD,OAAO,EAAE,CAAC;IACZ,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAE/B,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAgB,gBAAgB,IAAI,IAAI,CAAC,CAAC;IAElF,0BAA0B;IAC1B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEvB,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE;QACrC,WAAW,CAAC,KAAK,CAAC,CAAC;QACnB,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAC,yBAAyB,aAEtC,eACE,SAAS,EAAC,2HAA2H,EACrI,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,IAAI,EAAE,QAAQ,EAAE,GAAG,KAAK,IAAI,EAAE,aAE9E,aAAI,SAAS,EAAC,qFAAqF,uBAE9F,EACL,aAAI,SAAS,EAAC,sDAAsD,YACjE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;4BACpB,MAAM,UAAU,GAAG,KAAK,KAAK,QAAQ,CAAC;4BACtC,OAAO,CACL,aAEE,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,EAClC,SAAS,EAAE,oEACT,UAAU;oCACR,CAAC,CAAC,sGAAsG;oCACxG,CAAC,CAAC,6FACN,EAAE,YAED,KAAK,IARD,KAAK,CASP,CACN,CAAC;wBACJ,CAAC,CAAC,GACC,IACD,EAEN,KAAC,YAAY,IAAC,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,GAAI,EAGpE,cAAK,SAAS,EAAC,mIAAmI,YAC/I,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,YAAY,IAAC,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,QAAQ,YAAY,GAAI,CAC/E,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,0EAA0E,yCAEnF,CACP,GACG,IACF,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"ModelSelector.js","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/ModelSelector.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * OperationExecutor — Execute service operations with type-aware inputs.
3
+ *
4
+ * UUID params ending in 'Id' get entity dropdowns, others get typed inputs.
5
+ * Uses RuntimeViewProvider context for API calls.
6
+ */
7
+ export interface OperationExecutorProps {
8
+ serviceName: string;
9
+ operationName: string;
10
+ parameters?: Record<string, any>;
11
+ requires?: string[];
12
+ source?: 'service' | 'controller';
13
+ }
14
+ export declare function OperationExecutor({ serviceName, operationName, parameters, source }: OperationExecutorProps): import("react/jsx-runtime").JSX.Element;
15
+ //# sourceMappingURL=OperationExecutor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OperationExecutor.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/OperationExecutor.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;CACnC;AAED,wBAAgB,iBAAiB,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAkB,EAAE,EAAE,sBAAsB,2CAkHvH"}
@@ -0,0 +1,86 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * OperationExecutor — Execute service operations with type-aware inputs.
4
+ *
5
+ * UUID params ending in 'Id' get entity dropdowns, others get typed inputs.
6
+ * Uses RuntimeViewProvider context for API calls.
7
+ */
8
+ import { useState, useMemo } from 'react';
9
+ import { useRuntimeContext } from '../context.js';
10
+ import { FieldInput } from './FieldInput.js';
11
+ import { EntitySelect } from './EntitySelect.js';
12
+ import { OperationResultView } from './OperationResultView.js';
13
+ export function OperationExecutor({ serviceName, operationName, parameters, source = 'service' }) {
14
+ const ctx = useRuntimeContext();
15
+ const apiBase = ctx.apiBaseUrl || '/api';
16
+ const executeMutation = ctx.useExecuteOperationMutation();
17
+ const [params, setParams] = useState({});
18
+ const [loading, setLoading] = useState(false);
19
+ const [result, setResult] = useState(null);
20
+ const [error, setError] = useState(null);
21
+ const primaryModel = serviceName.replace(/Service$/, '').replace(/Controller$/, '');
22
+ const controllerName = source === 'controller' ? serviceName : primaryModel + 'Controller';
23
+ const paramDefs = useMemo(() => {
24
+ if (!parameters)
25
+ return [];
26
+ const entries = Array.isArray(parameters)
27
+ ? parameters.map((p) => [p.name, p])
28
+ : Object.entries(parameters);
29
+ return entries.map(([name, def]) => {
30
+ const typeStr = typeof def === 'string' ? def : def?.type || '';
31
+ const isUuid = typeStr.toLowerCase().includes('uuid');
32
+ let refModel = null;
33
+ if (isUuid && name.endsWith('Id')) {
34
+ refModel = name.slice(0, -2).charAt(0).toUpperCase() + name.slice(0, -2).slice(1);
35
+ }
36
+ return { name, type: typeStr, isUuid, refModel };
37
+ });
38
+ }, [parameters]);
39
+ const execute = async () => {
40
+ setLoading(true);
41
+ setError(null);
42
+ setResult(null);
43
+ try {
44
+ let data;
45
+ if (source === 'controller') {
46
+ data = await executeMutation.mutateAsync({
47
+ controllerName,
48
+ operationName,
49
+ data: params,
50
+ });
51
+ }
52
+ else {
53
+ const res = await fetch(`${apiBase}/services/${serviceName}/${operationName}`, {
54
+ method: 'POST',
55
+ headers: { 'Content-Type': 'application/json' },
56
+ body: JSON.stringify(params),
57
+ });
58
+ data = await res.json();
59
+ }
60
+ setResult(data);
61
+ if (!data.success)
62
+ setError(data.error?.message || 'Operation failed');
63
+ }
64
+ catch (err) {
65
+ setError(err.message);
66
+ }
67
+ finally {
68
+ setLoading(false);
69
+ }
70
+ };
71
+ return (_jsxs("div", { className: "mt-3 pt-3 border-t border-gray-200 dark:border-gray-600 space-y-2", children: [paramDefs.length > 0 ? (paramDefs.map(param => {
72
+ let filterBy;
73
+ if (param.refModel) {
74
+ for (const other of paramDefs) {
75
+ if (other === param || !other.refModel)
76
+ continue;
77
+ const fk = other.refModel.charAt(0).toLowerCase() + other.refModel.slice(1) + 'Id';
78
+ if (params[other.name]) {
79
+ filterBy = { ...filterBy, [fk]: params[other.name] };
80
+ }
81
+ }
82
+ }
83
+ return (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("label", { className: "text-xs text-gray-500 dark:text-gray-400 w-24 flex-shrink-0 truncate", title: param.name, children: param.name }), param.refModel ? (_jsx(EntitySelect, { modelName: param.refModel, value: params[param.name] || '', onChange: v => setParams(prev => ({ ...prev, [param.name]: v })), filterBy: filterBy, compact: true })) : (_jsx(FieldInput, { name: param.name, typeStr: param.type, value: params[param.name], onChange: v => setParams(prev => ({ ...prev, [param.name]: v })), compact: true }))] }, param.name));
84
+ })) : (_jsx("p", { className: "text-xs text-gray-400 italic", children: "No parameters defined" })), _jsx("button", { onClick: execute, disabled: loading, className: "w-full px-3 py-1.5 bg-blue-600 hover:bg-blue-700 text-white text-xs font-medium rounded flex items-center justify-center gap-1 disabled:opacity-50", children: loading ? 'Executing...' : `Execute ${operationName}` }), error && !result && (_jsx("pre", { className: "p-2 text-xs text-red-400 bg-red-50 dark:bg-red-900/20 rounded overflow-x-auto", children: error })), result && _jsx(OperationResultView, { result: result })] }));
85
+ }
86
+ //# sourceMappingURL=OperationExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OperationExecutor.js","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/OperationExecutor.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * OperationResultView — Formatted display of operation execution results.
3
+ *
4
+ * Renders success/failure status, preconditions, steps, events, and return values.
5
+ */
6
+ export interface OperationResultViewProps {
7
+ result: any;
8
+ }
9
+ export declare function OperationResultView({ result }: OperationResultViewProps): import("react/jsx-runtime").JSX.Element | null;
10
+ //# sourceMappingURL=OperationResultView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OperationResultView.d.ts","sourceRoot":"","sources":["../../../../../src/runtime/views/react/components/OperationResultView.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,GAAG,CAAC;CACb;AAED,wBAAgB,mBAAmB,CAAC,EAAE,MAAM,EAAE,EAAE,wBAAwB,kDA2HvE"}