@flanksource/clicky-ui 0.2.21 → 0.3.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.
- package/dist/comments/CommentAuthor.cjs +58 -0
- package/dist/comments/CommentAuthor.cjs.map +1 -0
- package/dist/comments/CommentAuthor.d.ts +17 -0
- package/dist/comments/CommentAuthor.d.ts.map +1 -0
- package/dist/comments/CommentAuthor.js +58 -0
- package/dist/comments/CommentAuthor.js.map +1 -0
- package/dist/comments/CommentCard.cjs +343 -0
- package/dist/comments/CommentCard.cjs.map +1 -0
- package/dist/comments/CommentCard.d.ts +27 -0
- package/dist/comments/CommentCard.d.ts.map +1 -0
- package/dist/comments/CommentCard.js +343 -0
- package/dist/comments/CommentCard.js.map +1 -0
- package/dist/comments/CommentComposer.cjs +207 -0
- package/dist/comments/CommentComposer.cjs.map +1 -0
- package/dist/comments/CommentComposer.d.ts +23 -0
- package/dist/comments/CommentComposer.d.ts.map +1 -0
- package/dist/comments/CommentComposer.js +207 -0
- package/dist/comments/CommentComposer.js.map +1 -0
- package/dist/comments/CommentFilterBar.cjs +145 -0
- package/dist/comments/CommentFilterBar.cjs.map +1 -0
- package/dist/comments/CommentFilterBar.d.ts +15 -0
- package/dist/comments/CommentFilterBar.d.ts.map +1 -0
- package/dist/comments/CommentFilterBar.js +145 -0
- package/dist/comments/CommentFilterBar.js.map +1 -0
- package/dist/comments/CommentMarkdown.cjs +156 -0
- package/dist/comments/CommentMarkdown.cjs.map +1 -0
- package/dist/comments/CommentMarkdown.d.ts +13 -0
- package/dist/comments/CommentMarkdown.d.ts.map +1 -0
- package/dist/comments/CommentMarkdown.js +156 -0
- package/dist/comments/CommentMarkdown.js.map +1 -0
- package/dist/comments/CommentProgress.cjs +86 -0
- package/dist/comments/CommentProgress.cjs.map +1 -0
- package/dist/comments/CommentProgress.d.ts +16 -0
- package/dist/comments/CommentProgress.d.ts.map +1 -0
- package/dist/comments/CommentProgress.js +86 -0
- package/dist/comments/CommentProgress.js.map +1 -0
- package/dist/comments/CommentProvider.cjs +99 -0
- package/dist/comments/CommentProvider.cjs.map +1 -0
- package/dist/comments/CommentProvider.d.ts +19 -0
- package/dist/comments/CommentProvider.d.ts.map +1 -0
- package/dist/comments/CommentProvider.js +99 -0
- package/dist/comments/CommentProvider.js.map +1 -0
- package/dist/comments/CommentSidePanel.cjs +219 -0
- package/dist/comments/CommentSidePanel.cjs.map +1 -0
- package/dist/comments/CommentSidePanel.d.ts +16 -0
- package/dist/comments/CommentSidePanel.d.ts.map +1 -0
- package/dist/comments/CommentSidePanel.js +219 -0
- package/dist/comments/CommentSidePanel.js.map +1 -0
- package/dist/comments/CommentThread.cjs +57 -0
- package/dist/comments/CommentThread.cjs.map +1 -0
- package/dist/comments/CommentThread.d.ts +24 -0
- package/dist/comments/CommentThread.d.ts.map +1 -0
- package/dist/comments/CommentThread.js +57 -0
- package/dist/comments/CommentThread.js.map +1 -0
- package/dist/comments/CommentThreadList.cjs +124 -0
- package/dist/comments/CommentThreadList.cjs.map +1 -0
- package/dist/comments/CommentThreadList.d.ts +25 -0
- package/dist/comments/CommentThreadList.d.ts.map +1 -0
- package/dist/comments/CommentThreadList.js +124 -0
- package/dist/comments/CommentThreadList.js.map +1 -0
- package/dist/comments/GroupedComments.cjs +74 -0
- package/dist/comments/GroupedComments.cjs.map +1 -0
- package/dist/comments/GroupedComments.d.ts +18 -0
- package/dist/comments/GroupedComments.d.ts.map +1 -0
- package/dist/comments/GroupedComments.js +74 -0
- package/dist/comments/GroupedComments.js.map +1 -0
- package/dist/comments/MentionTextarea.cjs +253 -0
- package/dist/comments/MentionTextarea.cjs.map +1 -0
- package/dist/comments/MentionTextarea.d.ts +28 -0
- package/dist/comments/MentionTextarea.d.ts.map +1 -0
- package/dist/comments/MentionTextarea.js +253 -0
- package/dist/comments/MentionTextarea.js.map +1 -0
- package/dist/comments/comment-context.cjs +33 -0
- package/dist/comments/comment-context.cjs.map +1 -0
- package/dist/comments/comment-context.d.ts +32 -0
- package/dist/comments/comment-context.d.ts.map +1 -0
- package/dist/comments/comment-context.js +33 -0
- package/dist/comments/comment-context.js.map +1 -0
- package/dist/comments/comment-fixtures.d.ts +11 -0
- package/dist/comments/comment-fixtures.d.ts.map +1 -0
- package/dist/comments/comment-types.cjs +19 -0
- package/dist/comments/comment-types.cjs.map +1 -0
- package/dist/comments/comment-types.d.ts +170 -0
- package/dist/comments/comment-types.d.ts.map +1 -0
- package/dist/comments/comment-types.js +19 -0
- package/dist/comments/comment-types.js.map +1 -0
- package/dist/comments/comment-utils.cjs +216 -0
- package/dist/comments/comment-utils.cjs.map +1 -0
- package/dist/comments/comment-utils.d.ts +59 -0
- package/dist/comments/comment-utils.d.ts.map +1 -0
- package/dist/comments/comment-utils.js +216 -0
- package/dist/comments/comment-utils.js.map +1 -0
- package/dist/comments.cjs +57 -0
- package/dist/comments.cjs.map +1 -0
- package/dist/comments.d.ts +16 -0
- package/dist/comments.d.ts.map +1 -0
- package/dist/comments.js +57 -0
- package/dist/comments.js.map +1 -0
- package/dist/components/Combobox.cjs +5 -2
- package/dist/components/Combobox.cjs.map +1 -1
- package/dist/components/Combobox.d.ts.map +1 -1
- package/dist/components/Combobox.js +5 -2
- package/dist/components/Combobox.js.map +1 -1
- package/dist/components/FilterBar.cjs +293 -256
- package/dist/components/FilterBar.cjs.map +1 -1
- package/dist/components/FilterBar.d.ts.map +1 -1
- package/dist/components/FilterBar.js +293 -256
- package/dist/components/FilterBar.js.map +1 -1
- package/dist/components/JsonSchemaForm.cjs +22 -6
- package/dist/components/JsonSchemaForm.cjs.map +1 -1
- package/dist/components/JsonSchemaForm.d.ts +1 -1
- package/dist/components/JsonSchemaForm.d.ts.map +1 -1
- package/dist/components/JsonSchemaForm.js +25 -9
- package/dist/components/JsonSchemaForm.js.map +1 -1
- package/dist/components/MultiSelect.cjs +29 -32
- package/dist/components/MultiSelect.cjs.map +1 -1
- package/dist/components/MultiSelect.d.ts.map +1 -1
- package/dist/components/MultiSelect.js +30 -33
- package/dist/components/MultiSelect.js.map +1 -1
- package/dist/components/NamespacePicker.cjs +52 -0
- package/dist/components/NamespacePicker.cjs.map +1 -0
- package/dist/components/NamespacePicker.d.ts +17 -0
- package/dist/components/NamespacePicker.d.ts.map +1 -0
- package/dist/components/NamespacePicker.js +52 -0
- package/dist/components/NamespacePicker.js.map +1 -0
- package/dist/components/TimeRange.cjs +29 -37
- package/dist/components/TimeRange.cjs.map +1 -1
- package/dist/components/TimeRange.d.ts.map +1 -1
- package/dist/components/TimeRange.js +30 -38
- package/dist/components/TimeRange.js.map +1 -1
- package/dist/components/TreePickerField.cjs +6 -3
- package/dist/components/TreePickerField.cjs.map +1 -1
- package/dist/components/TreePickerField.d.ts.map +1 -1
- package/dist/components/TreePickerField.js +6 -3
- package/dist/components/TreePickerField.js.map +1 -1
- package/dist/components/form-lookup-context.cjs +36 -0
- package/dist/components/form-lookup-context.cjs.map +1 -0
- package/dist/components/form-lookup-context.d.ts +9 -0
- package/dist/components/form-lookup-context.d.ts.map +1 -0
- package/dist/components/form-lookup-context.js +36 -0
- package/dist/components/form-lookup-context.js.map +1 -0
- package/dist/components/icon-menu-picker.cjs +9 -3
- package/dist/components/icon-menu-picker.cjs.map +1 -1
- package/dist/components/icon-menu-picker.d.ts.map +1 -1
- package/dist/components/icon-menu-picker.js +9 -3
- package/dist/components/icon-menu-picker.js.map +1 -1
- package/dist/components/json-schema-form-discriminator.cjs +67 -0
- package/dist/components/json-schema-form-discriminator.cjs.map +1 -0
- package/dist/components/json-schema-form-discriminator.d.ts +10 -0
- package/dist/components/json-schema-form-discriminator.d.ts.map +1 -0
- package/dist/components/json-schema-form-discriminator.js +67 -0
- package/dist/components/json-schema-form-discriminator.js.map +1 -0
- package/dist/components/json-schema-form-fields.cjs +146 -3
- package/dist/components/json-schema-form-fields.cjs.map +1 -1
- package/dist/components/json-schema-form-fields.d.ts +22 -0
- package/dist/components/json-schema-form-fields.d.ts.map +1 -1
- package/dist/components/json-schema-form-fields.js +147 -4
- package/dist/components/json-schema-form-fields.js.map +1 -1
- package/dist/components/json-schema-form-grid.cjs +92 -0
- package/dist/components/json-schema-form-grid.cjs.map +1 -0
- package/dist/components/json-schema-form-grid.d.ts +9 -0
- package/dist/components/json-schema-form-grid.d.ts.map +1 -0
- package/dist/components/json-schema-form-grid.js +92 -0
- package/dist/components/json-schema-form-grid.js.map +1 -0
- package/dist/components/json-schema-form-refs.cjs +60 -0
- package/dist/components/json-schema-form-refs.cjs.map +1 -0
- package/dist/components/json-schema-form-refs.d.ts +3 -0
- package/dist/components/json-schema-form-refs.d.ts.map +1 -0
- package/dist/components/json-schema-form-refs.js +60 -0
- package/dist/components/json-schema-form-refs.js.map +1 -0
- package/dist/components/json-schema-form-render.cjs +34 -5
- package/dist/components/json-schema-form-render.cjs.map +1 -1
- package/dist/components/json-schema-form-render.d.ts.map +1 -1
- package/dist/components/json-schema-form-render.js +36 -7
- package/dist/components/json-schema-form-render.js.map +1 -1
- package/dist/components/json-schema-form-resolve.cjs +29 -2
- package/dist/components/json-schema-form-resolve.cjs.map +1 -1
- package/dist/components/json-schema-form-resolve.d.ts.map +1 -1
- package/dist/components/json-schema-form-resolve.js +29 -2
- package/dist/components/json-schema-form-resolve.js.map +1 -1
- package/dist/components/json-schema-form-template-menu.cjs +83 -0
- package/dist/components/json-schema-form-template-menu.cjs.map +1 -0
- package/dist/components/json-schema-form-template-menu.d.ts +15 -0
- package/dist/components/json-schema-form-template-menu.d.ts.map +1 -0
- package/dist/components/json-schema-form-template-menu.js +83 -0
- package/dist/components/json-schema-form-template-menu.js.map +1 -0
- package/dist/components/json-schema-form-template.cjs +18 -0
- package/dist/components/json-schema-form-template.cjs.map +1 -0
- package/dist/components/json-schema-form-template.d.ts +13 -0
- package/dist/components/json-schema-form-template.d.ts.map +1 -0
- package/dist/components/json-schema-form-template.js +18 -0
- package/dist/components/json-schema-form-template.js.map +1 -0
- package/dist/components/json-schema-form-types.d.ts +41 -2
- package/dist/components/json-schema-form-types.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.cjs +8 -0
- package/dist/components/json-schema-form-utils.cjs.map +1 -1
- package/dist/components/json-schema-form-utils.d.ts +1 -0
- package/dist/components/json-schema-form-utils.d.ts.map +1 -1
- package/dist/components/json-schema-form-utils.js +8 -0
- package/dist/components/json-schema-form-utils.js.map +1 -1
- package/dist/components/workload-picker-utils.cjs.map +1 -1
- package/dist/components/workload-picker-utils.d.ts +11 -1
- package/dist/components/workload-picker-utils.d.ts.map +1 -1
- package/dist/components/workload-picker-utils.js.map +1 -1
- package/dist/components.cjs +10 -0
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.ts +7 -2
- package/dist/components.d.ts.map +1 -1
- package/dist/components.js +10 -0
- package/dist/components.js.map +1 -1
- package/dist/data/Clicky.cjs +231 -69
- package/dist/data/Clicky.cjs.map +1 -1
- package/dist/data/Clicky.d.ts +7 -1
- package/dist/data/Clicky.d.ts.map +1 -1
- package/dist/data/Clicky.fixtures.d.ts +3 -1
- package/dist/data/Clicky.fixtures.d.ts.map +1 -1
- package/dist/data/Clicky.js +232 -70
- package/dist/data/Clicky.js.map +1 -1
- package/dist/data/DataTable.cjs +23 -17
- package/dist/data/DataTable.cjs.map +1 -1
- package/dist/data/DataTable.d.ts +7 -1
- package/dist/data/DataTable.d.ts.map +1 -1
- package/dist/data/DataTable.js +24 -18
- package/dist/data/DataTable.js.map +1 -1
- package/dist/data/ExecutionTree.cjs +68 -0
- package/dist/data/ExecutionTree.cjs.map +1 -0
- package/dist/data/ExecutionTree.d.ts +40 -0
- package/dist/data/ExecutionTree.d.ts.map +1 -0
- package/dist/data/ExecutionTree.js +68 -0
- package/dist/data/ExecutionTree.js.map +1 -0
- package/dist/data/Gauge.cjs +37 -4
- package/dist/data/Gauge.cjs.map +1 -1
- package/dist/data/Gauge.d.ts +6 -1
- package/dist/data/Gauge.d.ts.map +1 -1
- package/dist/data/Gauge.js +37 -4
- package/dist/data/Gauge.js.map +1 -1
- package/dist/data/GaugeHoverCard.cjs +35 -0
- package/dist/data/GaugeHoverCard.cjs.map +1 -0
- package/dist/data/GaugeHoverCard.d.ts +25 -0
- package/dist/data/GaugeHoverCard.d.ts.map +1 -0
- package/dist/data/GaugeHoverCard.js +35 -0
- package/dist/data/GaugeHoverCard.js.map +1 -0
- package/dist/data/MarkdownEditor.cjs +616 -0
- package/dist/data/MarkdownEditor.cjs.map +1 -0
- package/dist/data/MarkdownEditor.d.ts +61 -0
- package/dist/data/MarkdownEditor.d.ts.map +1 -0
- package/dist/data/MarkdownEditor.js +616 -0
- package/dist/data/MarkdownEditor.js.map +1 -0
- package/dist/data/MarkdownEditor.model.cjs +27 -0
- package/dist/data/MarkdownEditor.model.cjs.map +1 -0
- package/dist/data/MarkdownEditor.model.d.ts +38 -0
- package/dist/data/MarkdownEditor.model.d.ts.map +1 -0
- package/dist/data/MarkdownEditor.model.js +27 -0
- package/dist/data/MarkdownEditor.model.js.map +1 -0
- package/dist/data/ObjectGraph.cjs +44 -0
- package/dist/data/ObjectGraph.cjs.map +1 -0
- package/dist/data/ObjectGraph.d.ts +39 -0
- package/dist/data/ObjectGraph.d.ts.map +1 -0
- package/dist/data/ObjectGraph.js +44 -0
- package/dist/data/ObjectGraph.js.map +1 -0
- package/dist/data/SchemaViewer.cjs +152 -0
- package/dist/data/SchemaViewer.cjs.map +1 -0
- package/dist/data/SchemaViewer.d.ts +27 -0
- package/dist/data/SchemaViewer.d.ts.map +1 -0
- package/dist/data/SchemaViewer.js +152 -0
- package/dist/data/SchemaViewer.js.map +1 -0
- package/dist/data/TimeseriesCoreBars.cjs +169 -32
- package/dist/data/TimeseriesCoreBars.cjs.map +1 -1
- package/dist/data/TimeseriesCoreBars.d.ts +42 -5
- package/dist/data/TimeseriesCoreBars.d.ts.map +1 -1
- package/dist/data/TimeseriesCoreBars.js +170 -33
- package/dist/data/TimeseriesCoreBars.js.map +1 -1
- package/dist/data/TimeseriesCoreBars.model.cjs +5 -5
- package/dist/data/TimeseriesCoreBars.model.cjs.map +1 -1
- package/dist/data/TimeseriesCoreBars.model.d.ts +4 -4
- package/dist/data/TimeseriesCoreBars.model.d.ts.map +1 -1
- package/dist/data/TimeseriesCoreBars.model.js +5 -5
- package/dist/data/TimeseriesCoreBars.model.js.map +1 -1
- package/dist/data/TimeseriesGauge.cjs +132 -36
- package/dist/data/TimeseriesGauge.cjs.map +1 -1
- package/dist/data/TimeseriesGauge.d.ts +15 -1
- package/dist/data/TimeseriesGauge.d.ts.map +1 -1
- package/dist/data/TimeseriesGauge.js +133 -37
- package/dist/data/TimeseriesGauge.js.map +1 -1
- package/dist/data/WorkloadCard.cjs +371 -0
- package/dist/data/WorkloadCard.cjs.map +1 -0
- package/dist/data/WorkloadCard.d.ts +25 -0
- package/dist/data/WorkloadCard.d.ts.map +1 -0
- package/dist/data/WorkloadCard.js +371 -0
- package/dist/data/WorkloadCard.js.map +1 -0
- package/dist/data/WorkloadCard.model.cjs +51 -0
- package/dist/data/WorkloadCard.model.cjs.map +1 -0
- package/dist/data/WorkloadCard.model.d.ts +53 -0
- package/dist/data/WorkloadCard.model.d.ts.map +1 -0
- package/dist/data/WorkloadCard.model.js +51 -0
- package/dist/data/WorkloadCard.model.js.map +1 -0
- package/dist/data/ai/ChatFab.cjs +3 -1
- package/dist/data/ai/ChatFab.cjs.map +1 -1
- package/dist/data/ai/ChatFab.d.ts.map +1 -1
- package/dist/data/ai/ChatFab.js +3 -1
- package/dist/data/ai/ChatFab.js.map +1 -1
- package/dist/data/ai/ChatWindow.cjs +19 -9
- package/dist/data/ai/ChatWindow.cjs.map +1 -1
- package/dist/data/ai/ChatWindow.d.ts +4 -2
- package/dist/data/ai/ChatWindow.d.ts.map +1 -1
- package/dist/data/ai/ChatWindow.js +19 -9
- package/dist/data/ai/ChatWindow.js.map +1 -1
- package/dist/data/ai/ChatWindowRequestBody.cjs +20 -0
- package/dist/data/ai/ChatWindowRequestBody.cjs.map +1 -0
- package/dist/data/ai/ChatWindowRequestBody.d.ts +9 -0
- package/dist/data/ai/ChatWindowRequestBody.d.ts.map +1 -0
- package/dist/data/ai/ChatWindowRequestBody.js +20 -0
- package/dist/data/ai/ChatWindowRequestBody.js.map +1 -0
- package/dist/data/ai/chat-window-context.cjs +2 -1
- package/dist/data/ai/chat-window-context.cjs.map +1 -1
- package/dist/data/ai/chat-window-context.d.ts +1 -1
- package/dist/data/ai/chat-window-context.d.ts.map +1 -1
- package/dist/data/ai/chat-window-context.js +2 -1
- package/dist/data/ai/chat-window-context.js.map +1 -1
- package/dist/data/ai/context.cjs.map +1 -1
- package/dist/data/ai/context.d.ts +3 -0
- package/dist/data/ai/context.d.ts.map +1 -1
- package/dist/data/ai/context.js.map +1 -1
- package/dist/data/chat/Chat.cjs +21 -1
- package/dist/data/chat/Chat.cjs.map +1 -1
- package/dist/data/chat/Chat.d.ts +11 -2
- package/dist/data/chat/Chat.d.ts.map +1 -1
- package/dist/data/chat/Chat.js +22 -2
- package/dist/data/chat/Chat.js.map +1 -1
- package/dist/data/chat/Message.cjs +13 -4
- package/dist/data/chat/Message.cjs.map +1 -1
- package/dist/data/chat/Message.d.ts +4 -2
- package/dist/data/chat/Message.d.ts.map +1 -1
- package/dist/data/chat/Message.js +13 -4
- package/dist/data/chat/Message.js.map +1 -1
- package/dist/data/chat/ToolCall.cjs +9 -4
- package/dist/data/chat/ToolCall.cjs.map +1 -1
- package/dist/data/chat/ToolCall.d.ts +3 -2
- package/dist/data/chat/ToolCall.d.ts.map +1 -1
- package/dist/data/chat/ToolCall.js +9 -4
- package/dist/data/chat/ToolCall.js.map +1 -1
- package/dist/data/chat/index.d.ts +1 -1
- package/dist/data/chat/index.d.ts.map +1 -1
- package/dist/data/chat/types.cjs.map +1 -1
- package/dist/data/chat/types.d.ts +7 -0
- package/dist/data/chat/types.d.ts.map +1 -1
- package/dist/data/chat/types.js.map +1 -1
- package/dist/data/gauge-stats.cjs +19 -0
- package/dist/data/gauge-stats.cjs.map +1 -0
- package/dist/data/gauge-stats.d.ts +15 -0
- package/dist/data/gauge-stats.d.ts.map +1 -0
- package/dist/data/gauge-stats.js +19 -0
- package/dist/data/gauge-stats.js.map +1 -0
- package/dist/data/schema-viewer-model.cjs +436 -0
- package/dist/data/schema-viewer-model.cjs.map +1 -0
- package/dist/data/schema-viewer-model.d.ts +64 -0
- package/dist/data/schema-viewer-model.d.ts.map +1 -0
- package/dist/data/schema-viewer-model.js +436 -0
- package/dist/data/schema-viewer-model.js.map +1 -0
- package/dist/data/version-info.cjs +2 -2
- package/dist/data/version-info.js +2 -2
- package/dist/data.cjs +30 -0
- package/dist/data.cjs.map +1 -1
- package/dist/data.d.ts +14 -4
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +31 -1
- package/dist/data.js.map +1 -1
- package/dist/hooks/use-sort.cjs +19 -10
- package/dist/hooks/use-sort.cjs.map +1 -1
- package/dist/hooks/use-sort.d.ts +3 -0
- package/dist/hooks/use-sort.d.ts.map +1 -1
- package/dist/hooks/use-sort.js +19 -10
- package/dist/hooks/use-sort.js.map +1 -1
- package/dist/index.cjs +98 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +98 -2
- package/dist/index.js.map +1 -1
- package/dist/layout/AppShell.cjs +6 -10
- package/dist/layout/AppShell.cjs.map +1 -1
- package/dist/layout/AppShell.d.ts +2 -0
- package/dist/layout/AppShell.d.ts.map +1 -1
- package/dist/layout/AppShell.js +6 -10
- package/dist/layout/AppShell.js.map +1 -1
- package/dist/overlay/DropdownMenu.cjs +50 -38
- package/dist/overlay/DropdownMenu.cjs.map +1 -1
- package/dist/overlay/DropdownMenu.d.ts +5 -1
- package/dist/overlay/DropdownMenu.d.ts.map +1 -1
- package/dist/overlay/DropdownMenu.js +50 -38
- package/dist/overlay/DropdownMenu.js.map +1 -1
- package/dist/overlay/HoverCard.cjs +7 -2
- package/dist/overlay/HoverCard.cjs.map +1 -1
- package/dist/overlay/HoverCard.d.ts.map +1 -1
- package/dist/overlay/HoverCard.js +7 -2
- package/dist/overlay/HoverCard.js.map +1 -1
- package/dist/overlay/Modal.cjs +20 -17
- package/dist/overlay/Modal.cjs.map +1 -1
- package/dist/overlay/Modal.d.ts.map +1 -1
- package/dist/overlay/Modal.js +21 -18
- package/dist/overlay/Modal.js.map +1 -1
- package/dist/overlay/Toast.cjs +9 -1
- package/dist/overlay/Toast.cjs.map +1 -1
- package/dist/overlay/Toast.d.ts.map +1 -1
- package/dist/overlay/Toast.js +9 -1
- package/dist/overlay/Toast.js.map +1 -1
- package/dist/overlay/modalStack.cjs +53 -1
- package/dist/overlay/modalStack.cjs.map +1 -1
- package/dist/overlay/modalStack.d.ts +12 -0
- package/dist/overlay/modalStack.d.ts.map +1 -1
- package/dist/overlay/modalStack.js +54 -2
- package/dist/overlay/modalStack.js.map +1 -1
- package/dist/overlay/zIndex.cjs +20 -0
- package/dist/overlay/zIndex.cjs.map +1 -0
- package/dist/overlay/zIndex.d.ts +39 -0
- package/dist/overlay/zIndex.d.ts.map +1 -0
- package/dist/overlay/zIndex.js +20 -0
- package/dist/overlay/zIndex.js.map +1 -0
- package/dist/rpc/EntityExplorerApp.cjs +102 -143
- package/dist/rpc/EntityExplorerApp.cjs.map +1 -1
- package/dist/rpc/EntityExplorerApp.d.ts +34 -1
- package/dist/rpc/EntityExplorerApp.d.ts.map +1 -1
- package/dist/rpc/EntityExplorerApp.js +105 -146
- package/dist/rpc/EntityExplorerApp.js.map +1 -1
- package/dist/rpc/OperationActionBar.cjs +135 -0
- package/dist/rpc/OperationActionBar.cjs.map +1 -0
- package/dist/rpc/OperationActionBar.d.ts +20 -0
- package/dist/rpc/OperationActionBar.d.ts.map +1 -0
- package/dist/rpc/OperationActionBar.js +135 -0
- package/dist/rpc/OperationActionBar.js.map +1 -0
- package/dist/rpc/OperationCatalog.cjs +79 -116
- package/dist/rpc/OperationCatalog.cjs.map +1 -1
- package/dist/rpc/OperationCatalog.d.ts +8 -1
- package/dist/rpc/OperationCatalog.d.ts.map +1 -1
- package/dist/rpc/OperationCatalog.js +80 -117
- package/dist/rpc/OperationCatalog.js.map +1 -1
- package/dist/rpc/OperationCommandPage.cjs +134 -223
- package/dist/rpc/OperationCommandPage.cjs.map +1 -1
- package/dist/rpc/OperationCommandPage.d.ts +1 -1
- package/dist/rpc/OperationCommandPage.d.ts.map +1 -1
- package/dist/rpc/OperationCommandPage.js +135 -224
- package/dist/rpc/OperationCommandPage.js.map +1 -1
- package/dist/rpc/OperationEntityPage.cjs +49 -100
- package/dist/rpc/OperationEntityPage.cjs.map +1 -1
- package/dist/rpc/OperationEntityPage.d.ts +6 -1
- package/dist/rpc/OperationEntityPage.d.ts.map +1 -1
- package/dist/rpc/OperationEntityPage.js +50 -101
- package/dist/rpc/OperationEntityPage.js.map +1 -1
- package/dist/rpc/OperationResultView.cjs +43 -0
- package/dist/rpc/OperationResultView.cjs.map +1 -0
- package/dist/rpc/OperationResultView.d.ts +30 -0
- package/dist/rpc/OperationResultView.d.ts.map +1 -0
- package/dist/rpc/OperationResultView.js +43 -0
- package/dist/rpc/OperationResultView.js.map +1 -0
- package/dist/rpc/SchemaActionForm.cjs +102 -0
- package/dist/rpc/SchemaActionForm.cjs.map +1 -0
- package/dist/rpc/SchemaActionForm.d.ts +23 -0
- package/dist/rpc/SchemaActionForm.d.ts.map +1 -0
- package/dist/rpc/SchemaActionForm.js +102 -0
- package/dist/rpc/SchemaActionForm.js.map +1 -0
- package/dist/rpc/accept-options.cjs.map +1 -1
- package/dist/rpc/accept-options.d.ts +0 -1
- package/dist/rpc/accept-options.d.ts.map +1 -1
- package/dist/rpc/accept-options.js.map +1 -1
- package/dist/rpc/apiClient.cjs +34 -2
- package/dist/rpc/apiClient.cjs.map +1 -1
- package/dist/rpc/apiClient.d.ts +4 -1
- package/dist/rpc/apiClient.d.ts.map +1 -1
- package/dist/rpc/apiClient.js +34 -2
- package/dist/rpc/apiClient.js.map +1 -1
- package/dist/rpc/clickyMetadata.cjs +4 -4
- package/dist/rpc/clickyMetadata.cjs.map +1 -1
- package/dist/rpc/clickyMetadata.d.ts +0 -1
- package/dist/rpc/clickyMetadata.d.ts.map +1 -1
- package/dist/rpc/clickyMetadata.js +4 -4
- package/dist/rpc/clickyMetadata.js.map +1 -1
- package/dist/rpc/formMetadata.cjs +1 -0
- package/dist/rpc/formMetadata.cjs.map +1 -1
- package/dist/rpc/formMetadata.d.ts +6 -1
- package/dist/rpc/formMetadata.d.ts.map +1 -1
- package/dist/rpc/formMetadata.js +1 -0
- package/dist/rpc/formMetadata.js.map +1 -1
- package/dist/rpc/rowNavigation.cjs +86 -0
- package/dist/rpc/rowNavigation.cjs.map +1 -0
- package/dist/rpc/rowNavigation.d.ts +14 -0
- package/dist/rpc/rowNavigation.d.ts.map +1 -0
- package/dist/rpc/rowNavigation.js +86 -0
- package/dist/rpc/rowNavigation.js.map +1 -0
- package/dist/rpc/schemaActionPath.cjs +22 -0
- package/dist/rpc/schemaActionPath.cjs.map +1 -0
- package/dist/rpc/schemaActionPath.d.ts +4 -0
- package/dist/rpc/schemaActionPath.d.ts.map +1 -0
- package/dist/rpc/schemaActionPath.js +22 -0
- package/dist/rpc/schemaActionPath.js.map +1 -0
- package/dist/rpc/surfaceIconMap.cjs +35 -0
- package/dist/rpc/surfaceIconMap.cjs.map +1 -0
- package/dist/rpc/surfaceIconMap.d.ts +3 -0
- package/dist/rpc/surfaceIconMap.d.ts.map +1 -0
- package/dist/rpc/surfaceIconMap.js +35 -0
- package/dist/rpc/surfaceIconMap.js.map +1 -0
- package/dist/rpc/types.cjs.map +1 -1
- package/dist/rpc/types.d.ts +2 -0
- package/dist/rpc/types.d.ts.map +1 -1
- package/dist/rpc/types.js.map +1 -1
- package/dist/rpc/useOperations.cjs.map +1 -1
- package/dist/rpc/useOperations.d.ts +4 -1
- package/dist/rpc/useOperations.d.ts.map +1 -1
- package/dist/rpc/useOperations.js.map +1 -1
- package/dist/rpc.cjs +4 -2
- package/dist/rpc.cjs.map +1 -1
- package/dist/rpc.d.ts +7 -6
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +4 -2
- package/dist/rpc.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +6 -1
- package/dist/rpc/AcceptPicker.cjs +0 -135
- package/dist/rpc/AcceptPicker.cjs.map +0 -1
- package/dist/rpc/AcceptPicker.d.ts +0 -12
- package/dist/rpc/AcceptPicker.d.ts.map +0 -1
- package/dist/rpc/AcceptPicker.js +0 -135
- package/dist/rpc/AcceptPicker.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OperationCommandPage.js","sources":["../../src/rpc/OperationCommandPage.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { FilterBar } from \"../components/FilterBar\";\nimport type {\n ClickyCommandRuntime,\n ClickyNode,\n ClickyRow,\n ClickyTableRowClick,\n ClickyTableRowHref,\n} from \"../data/Clicky\";\nimport { MethodBadge } from \"../data/MethodBadge\";\nimport { AcceptPicker } from \"./AcceptPicker\";\nimport type { OperationPreviewMode } from \"./accept-options\";\nimport { CommandForm } from \"./CommandForm\";\nimport { pathParamNames, submitValue } from \"./command-form-utils\";\nimport { CommandOutput } from \"./CommandOutput\";\nimport type { RenderLink } from \"./EndpointList\";\nimport {\n buildInitialParameterValues,\n dataTablePaginationFromForm,\n packParameterValues,\n parametersToFormConfig,\n pruneParameterValues,\n titleCase,\n useDebouncedRecord,\n type ParameterValues,\n} from \"./formMetadata\";\nimport { InlineError } from \"./InlineError\";\nimport { OperationActionDialog } from \"./OperationActionDialog\";\nimport { isPositionalParam, type ExecutionResponse, type ResolvedOperation } from \"./types\";\nimport { useOperationById, type OperationsApiClient } from \"./useOperations\";\n\nexport type OperationCommandPageProps = {\n client: OperationsApiClient;\n operationId?: string;\n operation?: ResolvedOperation;\n operations?: ResolvedOperation[];\n initialValues?: ParameterValues;\n autoRun?: boolean;\n backHref?: string;\n backLabel?: string;\n renderLink?: RenderLink;\n commandRuntime?: ClickyCommandRuntime;\n onNavigate?: (href: string) => void;\n hideLockedPathFilters?: boolean;\n className?: string;\n};\n\nconst EMPTY_PARAMETER_VALUES: ParameterValues = {};\n\nexport function OperationCommandPage({\n client,\n operationId,\n operation: providedOperation,\n operations = providedOperation ? [providedOperation] : [],\n initialValues = EMPTY_PARAMETER_VALUES,\n autoRun,\n backHref,\n backLabel = \"Back\",\n renderLink,\n onNavigate,\n hideLockedPathFilters = Boolean(providedOperation),\n className,\n}: OperationCommandPageProps) {\n const lookup = useOperationById(client, providedOperation ? undefined : operationId);\n const operation = providedOperation ?? lookup.operation;\n const isLoading = providedOperation ? false : lookup.isLoading;\n const [accept, setAccept] = useState(\"application/clicky+json\");\n const [previewMode, setPreviewMode] = useState<OperationPreviewMode>(\"hidden\");\n const [isExecuting, setIsExecuting] = useState(false);\n const [result, setResult] = useState<ExecutionResponse | null>(null);\n const [error, setError] = useState<unknown>(null);\n const [submitError, setSubmitError] = useState(\"\");\n const [hasAutoRun, setHasAutoRun] = useState(false);\n const parameters = operation?.operation.parameters ?? [];\n const isGet = (operation?.method ?? \"\").toUpperCase() === \"GET\";\n const effectiveAutoRun = operation ? (autoRun ?? isGet) : false;\n const parameterSignature = JSON.stringify(\n parameters.map((param) => ({\n name: param.name,\n in: param.in,\n required: param.required ?? false,\n default: param.schema?.default ?? null,\n })),\n );\n const operationKey = `${operation?.method ?? \"\"}:${operation?.path ?? \"\"}:${operation?.operation.operationId ?? \"\"}`;\n const effectiveInitialValues = useMemo(\n () =>\n operation\n ? buildInitialParameterValues(\n parameters,\n operation.method,\n {},\n stripRunnerParams(initialValues),\n )\n : stripRunnerParams(initialValues),\n [initialValues, operation?.method, parameterSignature],\n );\n const pathParameters = parameters.filter((param) => param.in === \"path\");\n const lockedPathValues = useMemo<ParameterValues>(() => {\n const values: ParameterValues = {};\n for (const param of pathParameters) {\n const value = effectiveInitialValues[param.name];\n if (typeof value === \"string\" && value.trim() !== \"\") {\n values[param.name] = value;\n }\n }\n return values;\n }, [effectiveInitialValues, pathParameters]);\n const detailOperation = useMemo(\n () => (operation ? findDetailOperation(operation, operations) : undefined),\n [operation, operations],\n );\n const relatedOperations = useMemo(\n () => (operation ? findRelatedOperations(operation, operations, lockedPathValues) : []),\n [lockedPathValues, operation, operations],\n );\n\n // GET-mode parameter state: filter values + pagination cursor are driven\n // by the page so they can flow natively into <CommandOutput>'s filter bar\n // and pagination footer instead of through a separate OperationQueryFilterBar.\n const [values, setValues] = useState<ParameterValues>(effectiveInitialValues);\n useEffect(() => {\n setValues(effectiveInitialValues);\n setSubmitError(\"\");\n }, [effectiveInitialValues]);\n const debouncedValues = useDebouncedRecord(values, 250);\n\n const lookupQuery = useQuery({\n queryKey: [\"operation-query-lookup\", operation?.method, operation?.path, debouncedValues],\n queryFn: async () => {\n if (!operation) return { filters: {} };\n return (\n (await client.lookupFilters?.(\n operation.path,\n operation.method,\n packParameterValues(debouncedValues, parameters),\n { Accept: \"application/json+clicky\" },\n )) ?? { filters: {} }\n );\n },\n enabled:\n isGet &&\n !!operation &&\n !!client.lookupFilters &&\n parameters.some((param) => param.in === \"query\"),\n staleTime: 30_000,\n retry: 0,\n });\n\n const formConfig = useMemo(() => {\n if (!isGet) return { filters: [] };\n return parametersToFormConfig(parameters, values, setValues, {\n lookup: lookupQuery.data,\n lockedValues: lockedPathValues,\n hideLocked: hideLockedPathFilters,\n });\n }, [isGet, parameters, values, lookupQuery.data, lockedPathValues, hideLockedPathFilters]);\n\n const dataTablePagination = useMemo(\n () => dataTablePaginationFromForm(formConfig.pagination, result),\n [formConfig.pagination, result],\n );\n\n // Ref tracking the last submitted parameter signature so that the\n // auto-submit-on-debounced-change effect and the manual submit button\n // both coordinate against the same \"have I already fired this set of\n // values\" check.\n const lastSubmittedSignature = useRef(\"\");\n\n function handleManualSubmit() {\n if (!operation) return;\n const merged = { ...values, ...lockedPathValues };\n const missingRequired = parameters.filter((param) => {\n if (!param.required) return false;\n return (merged[param.name] ?? \"\").trim() === \"\";\n });\n if (missingRequired.length > 0) {\n setSubmitError(\n `Missing required fields: ${missingRequired\n .map((param) => titleCase(param.name))\n .join(\", \")}`,\n );\n return;\n }\n setSubmitError(\"\");\n setHasAutoRun(true);\n lastSubmittedSignature.current = JSON.stringify(pruneParameterValues(merged));\n void executeOperation(merged);\n }\n\n async function executeOperation(values: ParameterValues) {\n if (!operation) return;\n\n setIsExecuting(true);\n setError(null);\n\n try {\n const response = await client.executeCommand(\n operation.path,\n operation.method,\n packParameterValues(values, operation.operation.parameters ?? []),\n { Accept: accept },\n );\n setResult(response);\n } catch (err) {\n setResult(null);\n setError(err);\n } finally {\n setIsExecuting(false);\n }\n }\n\n useEffect(() => {\n setHasAutoRun(false);\n setResult(null);\n setError(null);\n lastSubmittedSignature.current = \"\";\n }, [effectiveAutoRun, operationKey]);\n\n useEffect(() => {\n if (!effectiveAutoRun || !operation || hasAutoRun) return;\n // Auto-run a GET as long as every required parameter has a value. Optional\n // params (limit/offset, filter chips, etc.) get their defaults; the\n // sidebar's \"click → instant table\" flow depends on this not bailing just\n // because the operation declares any parameters at all.\n const missingRequired = parameters.filter((param) => {\n if (!param.required) return false;\n return (effectiveInitialValues[param.name] ?? \"\").trim() === \"\";\n });\n if (missingRequired.length > 0) return;\n\n setHasAutoRun(true);\n lastSubmittedSignature.current = JSON.stringify(pruneParameterValues(effectiveInitialValues));\n void executeOperation(effectiveInitialValues);\n }, [\n accept,\n effectiveAutoRun,\n effectiveInitialValues,\n hasAutoRun,\n operationKey,\n parameterSignature,\n ]);\n\n // GET re-runs on debounced filter/pagination changes once the initial\n // auto-run has fired; non-GETs keep their explicit-submit behavior.\n useEffect(() => {\n if (!isGet || !operation || !hasAutoRun) return;\n const merged = { ...debouncedValues, ...lockedPathValues };\n const missingRequired = parameters.filter((param) => {\n if (!param.required) return false;\n return (merged[param.name] ?? \"\").trim() === \"\";\n });\n if (missingRequired.length > 0) return;\n const signature = JSON.stringify(pruneParameterValues(merged));\n if (lastSubmittedSignature.current === signature) return;\n lastSubmittedSignature.current = signature;\n void executeOperation(merged);\n }, [isGet, hasAutoRun, debouncedValues, lockedPathValues, parameterSignature]);\n\n const getRowDetailHref = useCallback<ClickyTableRowHref>(\n (row) => {\n if (!detailOperation) return undefined;\n const id = getClickyRowId(row);\n if (!id) return undefined;\n return hrefForOperation(detailOperation, [], { id });\n },\n [detailOperation],\n );\n\n const handleTableRowClick = useCallback<ClickyTableRowClick>(\n (row) => {\n const href = getRowDetailHref(row);\n if (href) onNavigate?.(href);\n },\n [getRowDetailHref, onNavigate],\n );\n\n const backLink =\n backHref == null ? null : renderLink ? (\n renderLink({\n to: backHref,\n className: \"text-sm text-primary underline-offset-4 hover:underline\",\n children: backLabel,\n })\n ) : (\n <a href={backHref} className=\"text-sm text-primary underline-offset-4 hover:underline\">\n {backLabel}\n </a>\n );\n\n if (isLoading) {\n return <div className=\"text-sm text-muted-foreground\">Loading operation...</div>;\n }\n\n if (!operation) {\n return (\n <div className=\"space-y-4\">\n <div className=\"text-sm text-muted-foreground\">\n Unknown operation: <code>{operationId}</code>\n </div>\n {backLink}\n </div>\n );\n }\n\n const { path, method, operation: op } = operation;\n const preview = buildOperationPreview(operation, effectiveInitialValues, accept, previewMode);\n\n return (\n <div className={className ?? \"min-w-0 flex-1 space-y-6 p-6\"}>\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"min-w-0 flex-1\">\n {backLink}\n <div className=\"flex items-center gap-3\">\n <MethodBadge method={method} />\n <h1 className=\"truncate text-xl font-bold\">{op.summary || op.operationId || path}</h1>\n </div>\n <p className=\"mt-1 font-mono text-xs text-muted-foreground\">{path}</p>\n {op.operationId && op.summary && (\n <p className=\"mt-2 font-mono text-xs text-muted-foreground\">{op.operationId}</p>\n )}\n {op.description && op.description !== op.summary && (\n <p className=\"mt-1 text-sm text-muted-foreground\">{op.description}</p>\n )}\n </div>\n <div className=\"flex shrink-0 flex-col items-end gap-3\">\n <div>\n <div className=\"mb-1 text-right text-[10px] font-semibold uppercase tracking-wider text-muted-foreground\">\n Accept\n </div>\n <AcceptPicker\n value={accept}\n onChange={setAccept}\n previewMode={previewMode}\n onPreviewModeChange={setPreviewMode}\n />\n </div>\n {relatedOperations.length > 0 && (\n <div className=\"flex flex-wrap justify-end gap-2\">\n {relatedOperations.map((related) =>\n related.href ? (\n renderLink ? (\n renderLink({\n key: `${related.operation.method}:${related.operation.path}`,\n to: related.href,\n className:\n \"inline-flex h-8 items-center justify-center gap-2 rounded-md border border-input bg-background px-3 text-xs font-medium hover:bg-accent hover:text-accent-foreground\",\n children: related.label,\n })\n ) : (\n <a\n key={`${related.operation.method}:${related.operation.path}`}\n href={related.href}\n className=\"inline-flex h-8 items-center justify-center gap-2 rounded-md border border-input bg-background px-3 text-xs font-medium hover:bg-accent hover:text-accent-foreground\"\n >\n {related.label}\n </a>\n )\n ) : (\n <OperationActionDialog\n key={`${related.operation.method}:${related.operation.path}`}\n operation={related.operation}\n client={client}\n initialValues={lockedPathValues}\n label={related.label}\n defaultAccept={accept}\n {...(onNavigate ? { onNavigateAction: onNavigate } : {})}\n />\n ),\n )}\n </div>\n )}\n </div>\n </div>\n\n <section className=\"space-y-3\">\n {method.toUpperCase() === \"GET\" ? (\n parameters.length > 0 ? (\n // Before a result lands the FilterBar lives here so users can\n // fill in path params / required inputs and submit. Once a\n // result is showing AND auto-run is on (sidebar flow), the same\n // filter chips relocate into the DataTable's filter bar via\n // externalFilters, which is the unified placement the user asked\n // for. The two branches share `formConfig.filters` so the values\n // stay in sync.\n !result || !effectiveAutoRun ? (\n <div className=\"space-y-2\">\n <FilterBar\n autoSubmit={effectiveAutoRun}\n filters={formConfig.filters}\n {...(!effectiveAutoRun ? { onApply: () => handleManualSubmit() } : {})}\n applyLabel=\"Execute request\"\n isPending={isExecuting}\n {...(formConfig.timeRange ? { timeRange: formConfig.timeRange } : {})}\n />\n {submitError && (\n <div className=\"rounded-md border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive\">\n {submitError}\n </div>\n )}\n </div>\n ) : null\n ) : null\n ) : (\n <div className=\"rounded-lg border p-4\">\n <CommandForm\n parameters={parameters}\n onExecute={(params) => executeOperation(params)}\n isPending={isExecuting}\n method={method}\n path={path}\n accept={accept}\n initialValues={effectiveInitialValues}\n />\n </div>\n )}\n\n {preview && (\n <pre className=\"overflow-x-auto rounded-md bg-muted p-3 font-mono text-xs\">{preview}</pre>\n )}\n </section>\n\n {error ? (\n <InlineError title={`Failed to load ${path} as ${accept}`} error={error} />\n ) : isExecuting || result ? (\n <div role=\"region\" aria-label=\"Response body\">\n <CommandOutput\n response={result}\n loading={isExecuting}\n loadingMessage=\"Loading execution results…\"\n bare\n {...(detailOperation\n ? {\n getTableRowHref: getRowDetailHref,\n onTableRowClick: handleTableRowClick,\n isTableRowClickable: (row: ClickyRow) => Boolean(getRowDetailHref(row)),\n }\n : {})}\n {...(isGet && effectiveAutoRun && formConfig.filters.length > 0\n ? { externalFilters: formConfig.filters }\n : {})}\n {...(isGet && effectiveAutoRun && formConfig.timeRange\n ? { timeRange: formConfig.timeRange }\n : {})}\n {...(isGet && effectiveAutoRun && dataTablePagination\n ? { pagination: dataTablePagination }\n : {})}\n />\n </div>\n ) : null}\n </div>\n );\n}\n\ntype RelatedOperation = {\n operation: ResolvedOperation;\n label: string;\n href?: string;\n};\n\nfunction findRelatedOperations(\n current: ResolvedOperation,\n operations: ResolvedOperation[],\n pathValues: Record<string, string>,\n): RelatedOperation[] {\n if (current.method.toUpperCase() !== \"GET\") return [];\n if (!pathTemplateSatisfied(current.path, pathValues)) return [];\n\n const basePath = current.path.replace(/\\/+$/, \"\");\n return operations\n .filter((candidate) => {\n if (candidate === current) return false;\n if (!candidate.path.startsWith(`${basePath}/`)) return false;\n if (!pathTemplateSatisfied(candidate.path, pathValues)) return false;\n const method = candidate.method.toUpperCase();\n return method === \"GET\" || method === \"POST\" || method === \"PUT\" || method === \"DELETE\";\n })\n .map((related) => {\n const method = related.method.toUpperCase();\n const href = method === \"GET\" ? hrefForOperation(related, [], pathValues) : undefined;\n return {\n operation: related,\n label: operationLabel(related),\n ...(href ? { href } : {}),\n };\n })\n .filter((related) => related.operation.method.toUpperCase() !== \"GET\" || related.href);\n}\n\nfunction findDetailOperation(current: ResolvedOperation, operations: ResolvedOperation[]) {\n const method = current.method.toUpperCase();\n const detailPath = `${current.path.replace(/\\/+$/, \"\")}/{id}`;\n return operations.find(\n (candidate) =>\n candidate.method.toUpperCase() === method &&\n candidate.path === detailPath &&\n candidate.operation.parameters?.some(\n (param) => param.in === \"path\" && param.name === \"id\" && param.required,\n ),\n );\n}\n\nfunction hrefForOperation(\n operation: ResolvedOperation,\n args: string[] = [],\n flags: Record<string, string> = {},\n): string | undefined {\n let route = apiPathToRoutePath(operation.path);\n const consumedFlags = new Set<string>();\n\n pathParamNames(operation.path).forEach((name, index) => {\n const value = flags[name] ?? args[index];\n if (!value) return;\n consumedFlags.add(name);\n route = route.replace(`:${name}`, encodeURIComponent(value));\n });\n\n if (route.includes(\":\")) return undefined;\n\n const search = new URLSearchParams();\n for (const [key, value] of Object.entries(flags)) {\n if (value && !consumedFlags.has(key)) search.set(key, value);\n }\n const query = search.toString();\n return query ? `${route}?${query}` : route;\n}\n\nfunction apiPathToRoutePath(path: string): string {\n const cliPath = path\n .trim()\n .replace(/^\\/api\\/v1\\/?/, \"\")\n .replace(/^\\/+/, \"\")\n .replace(/\\/+$/, \"\");\n if (!cliPath) return \"/\";\n return `/${cliPath.replace(/\\{([^}]+)\\}/g, \":$1\")}`;\n}\n\nfunction pathTemplateSatisfied(path: string, values: Record<string, string>) {\n return pathParamNames(path).every((name) => Boolean(values[name]));\n}\n\nfunction operationLabel(operation: ResolvedOperation): string {\n const actionName =\n operation.operation[\"x-clicky\"]?.actionName ||\n operation.path.split(\"/\").filter(Boolean).at(-1) ||\n operation.operation.operationId ||\n operation.method;\n return titleCase(actionName.replace(/[_-]+/g, \" \"));\n}\n\nfunction buildOperationPreview(\n operation: ResolvedOperation,\n values: ParameterValues,\n accept: string,\n mode: OperationPreviewMode,\n) {\n if (mode === \"hidden\") return \"\";\n if (mode === \"cli\") return buildCliPreview(operation, values);\n return buildCurlPreview(operation, values, accept);\n}\n\nfunction buildCurlPreview(operation: ResolvedOperation, values: ParameterValues, accept: string) {\n const params = operation.operation.parameters ?? [];\n const parts = [`curl -X ${operation.method.toUpperCase()}`];\n if (accept !== \"application/json\") parts.push(`-H \"Accept: ${accept}\"`);\n let url = operation.path;\n const queryParts: string[] = [];\n for (const param of params) {\n const value = submitValue(param, values[param.name]);\n if (!value) continue;\n if (param.in === \"path\") {\n url = url.replace(`{${param.name}}`, encodeURIComponent(value));\n } else if (param.in === \"query\") {\n queryParts.push(`${encodeURIComponent(param.name)}=${encodeURIComponent(value)}`);\n }\n }\n if (queryParts.length > 0) url += `?${queryParts.join(\"&\")}`;\n parts.push(`\"${url}\"`);\n return parts.join(\" \");\n}\n\nfunction buildCliPreview(operation: ResolvedOperation, values: ParameterValues) {\n const command = operation.operation[\"x-clicky\"]?.command;\n if (!command) return buildCurlPreview(operation, values, \"application/json\");\n const params = operation.operation.parameters ?? [];\n const positionalNames = new Set(params.filter(isPositionalParam).map((param) => param.name));\n const parts = [command.replaceAll(\"/\", \" \")];\n for (const param of params) {\n const value = submitValue(param, values[param.name]);\n if (!value) continue;\n if (param.in === \"path\" || positionalNames.has(param.name)) {\n parts.push(shellQuote(value));\n continue;\n }\n parts.push(`--${param.name}`, shellQuote(value));\n }\n return parts.join(\" \");\n}\n\nfunction shellQuote(value: string) {\n if (/^[a-zA-Z0-9_./:@-]+$/.test(value)) return value;\n return `'${value.replaceAll(\"'\", \"'\\\\''\")}'`;\n}\n\nfunction stripRunnerParams(values: ParameterValues): ParameterValues {\n const next: ParameterValues = {};\n for (const [key, value] of Object.entries(values)) {\n if (key === \"autoRun\" || key.startsWith(\"__\")) continue;\n next[key] = value;\n }\n return next;\n}\n\nfunction getClickyRowId(row: ClickyRow) {\n const candidates = [\"_id\", \"id\", \"ID\", \"guid\", \"GUID\"];\n for (const key of candidates) {\n const value = clickyNodeText(row.cells[key]);\n if (value) return value;\n }\n return undefined;\n}\n\nfunction clickyNodeText(node: ClickyNode | undefined): string {\n if (!node) return \"\";\n if (node.plain) return node.plain;\n if (node.text) return node.text;\n if (node.source) return node.source;\n if (node.children) return node.children.map(clickyNodeText).join(\"\");\n if (node.items) return node.items.map(clickyNodeText).join(\" \");\n if (node.fields) return node.fields.map((field) => clickyNodeText(field.value)).join(\" \");\n return \"\";\n}\n"],"names":["values"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OperationCommandPage.js","sources":["../../src/rpc/OperationCommandPage.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport type { ClickyCommandRuntime } from \"../data/Clicky\";\nimport { MethodBadge } from \"../data/MethodBadge\";\nimport { CommandForm } from \"./CommandForm\";\nimport { pathParamNames, submitValue } from \"./command-form-utils\";\nimport type { RenderLink } from \"./EndpointList\";\nimport {\n buildInitialParameterValues,\n dataTablePaginationFromForm,\n packParameterValues,\n parametersToFormConfig,\n pruneParameterValues,\n titleCase,\n useDebouncedRecord,\n type ParameterValues,\n} from \"./formMetadata\";\nimport { InlineError } from \"./InlineError\";\nimport { OperationActionDialog } from \"./OperationActionDialog\";\nimport { OperationResultView } from \"./OperationResultView\";\nimport { hrefForOperation } from \"./rowNavigation\";\nimport type {\n ExecutionResponse,\n OpenAPIParameter,\n ResolvedOperation,\n} from \"./types\";\nimport { useOperationById, type OperationsApiClient } from \"./useOperations\";\n\n// All operation results are fetched as clicky documents; the in-result View\n// menu re-fetches other formats on demand via the response's requestUrl.\nconst RESULT_ACCEPT = \"application/clicky+json\";\n\nexport type OperationCommandPageProps = {\n client: OperationsApiClient;\n operationId?: string;\n operation?: ResolvedOperation;\n operations?: ResolvedOperation[];\n initialValues?: ParameterValues;\n autoRun?: boolean;\n backHref?: string;\n backLabel?: string;\n renderLink?: RenderLink;\n commandRuntime?: ClickyCommandRuntime;\n onNavigate?: (href: string) => void;\n hideLockedPathFilters?: boolean;\n className?: string;\n};\n\nconst EMPTY_PARAMETER_VALUES: ParameterValues = {};\n\nexport function OperationCommandPage({\n client,\n operationId,\n operation: providedOperation,\n operations = providedOperation ? [providedOperation] : [],\n initialValues = EMPTY_PARAMETER_VALUES,\n autoRun,\n backHref,\n backLabel = \"Back\",\n renderLink,\n onNavigate,\n commandRuntime,\n hideLockedPathFilters = Boolean(providedOperation),\n className,\n}: OperationCommandPageProps) {\n const lookup = useOperationById(\n client,\n providedOperation ? undefined : operationId,\n );\n const operation = providedOperation ?? lookup.operation;\n const isLoading = providedOperation ? false : lookup.isLoading;\n const [isExecuting, setIsExecuting] = useState(false);\n const [result, setResult] = useState<ExecutionResponse | null>(null);\n const [error, setError] = useState<unknown>(null);\n const [hasAutoRun, setHasAutoRun] = useState(false);\n const parameters = operation?.operation.parameters ?? [];\n const isGet = (operation?.method ?? \"\").toUpperCase() === \"GET\";\n const effectiveAutoRun = operation ? (autoRun ?? isGet) : false;\n const parameterSignature = JSON.stringify(\n parameters.map((param) => ({\n name: param.name,\n in: param.in,\n required: param.required ?? false,\n default: param.schema?.default ?? null,\n })),\n );\n const operationKey = `${operation?.method ?? \"\"}:${operation?.path ?? \"\"}:${operation?.operation.operationId ?? \"\"}`;\n const effectiveInitialValues = useMemo(\n () =>\n operation\n ? buildInitialParameterValues(\n parameters,\n operation.method,\n {},\n {\n ...readQueryParameterValuesFromUrl(parameters),\n ...stripRunnerParams(initialValues),\n },\n )\n : stripRunnerParams(initialValues),\n [initialValues, operation?.method, parameterSignature],\n );\n const pathParameters = parameters.filter((param) => param.in === \"path\");\n const lockedPathValues = useMemo<ParameterValues>(() => {\n const values: ParameterValues = {};\n for (const param of pathParameters) {\n const value = effectiveInitialValues[param.name];\n if (typeof value === \"string\" && value.trim() !== \"\") {\n values[param.name] = value;\n }\n }\n return values;\n }, [effectiveInitialValues, pathParameters]);\n const detailOperation = useMemo(\n () => (operation ? findDetailOperation(operation, operations) : undefined),\n [operation, operations],\n );\n const relatedOperations = useMemo(\n () =>\n operation\n ? findRelatedOperations(operation, operations, lockedPathValues)\n : [],\n [lockedPathValues, operation, operations],\n );\n\n // GET-mode parameter state: filter values + pagination cursor are driven\n // by the page so they can flow natively into the result table's in-table\n // FilterBar and pagination footer (via OperationResultView's filterConfig).\n const [values, setValues] = useState<ParameterValues>(effectiveInitialValues);\n useEffect(() => {\n setValues(effectiveInitialValues);\n }, [effectiveInitialValues]);\n const debouncedValues = useDebouncedRecord(values, 250);\n\n useEffect(() => {\n if (!isGet || !operation) return;\n writeQueryParameterValuesToUrl(debouncedValues, parameters);\n }, [isGet, operationKey, debouncedValues, parameterSignature]);\n\n const lookupQuery = useQuery({\n queryKey: [\n \"operation-query-lookup\",\n operation?.method,\n operation?.path,\n debouncedValues,\n ],\n queryFn: async () => {\n if (!operation) return { filters: {} };\n return (\n (await client.lookupFilters?.(\n operation.path,\n operation.method,\n packParameterValues(debouncedValues, parameters),\n { Accept: \"application/json+clicky\" },\n )) ?? { filters: {} }\n );\n },\n enabled:\n isGet &&\n !!operation &&\n !!client.lookupFilters &&\n parameters.some((param) => param.in === \"query\"),\n staleTime: 30_000,\n retry: 0,\n });\n\n const formConfig = useMemo(() => {\n if (!isGet) return { filters: [] };\n return parametersToFormConfig(parameters, values, setValues, {\n lookup: lookupQuery.data,\n lockedValues: lockedPathValues,\n hideLocked: hideLockedPathFilters,\n });\n }, [\n isGet,\n parameters,\n values,\n lookupQuery.data,\n lockedPathValues,\n hideLockedPathFilters,\n ]);\n\n const dataTablePagination = useMemo(\n () => dataTablePaginationFromForm(formConfig.pagination, result),\n [formConfig.pagination, result],\n );\n\n // Ref tracking the last submitted parameter signature so the\n // auto-submit-on-debounced-change effect coordinates against the same\n // \"have I already fired this set of values\" check.\n const lastSubmittedSignature = useRef(\"\");\n\n async function executeOperation(values: ParameterValues) {\n if (!operation) return;\n\n setIsExecuting(true);\n setError(null);\n\n try {\n const response = await client.executeCommand(\n operation.path,\n operation.method,\n packParameterValues(values, operation.operation.parameters ?? []),\n { Accept: RESULT_ACCEPT },\n );\n setResult(response);\n } catch (err) {\n setResult(null);\n setError(err);\n } finally {\n setIsExecuting(false);\n }\n }\n\n useEffect(() => {\n setHasAutoRun(false);\n setResult(null);\n setError(null);\n lastSubmittedSignature.current = \"\";\n }, [effectiveAutoRun, operationKey]);\n\n useEffect(() => {\n if (!effectiveAutoRun || !operation || hasAutoRun) return;\n // Auto-run a GET as long as every required parameter has a value. Optional\n // params (limit/offset, filter chips, etc.) get their defaults; the\n // sidebar's \"click → instant table\" flow depends on this not bailing just\n // because the operation declares any parameters at all.\n const missingRequired = parameters.filter((param) => {\n if (!param.required) return false;\n return (effectiveInitialValues[param.name] ?? \"\").trim() === \"\";\n });\n if (missingRequired.length > 0) return;\n\n setHasAutoRun(true);\n lastSubmittedSignature.current = JSON.stringify(\n pruneParameterValues(effectiveInitialValues),\n );\n void executeOperation(effectiveInitialValues);\n }, [\n effectiveAutoRun,\n effectiveInitialValues,\n hasAutoRun,\n operationKey,\n parameterSignature,\n ]);\n\n // GET re-runs on debounced filter/pagination changes once the initial\n // auto-run has fired; non-GETs keep their explicit-submit behavior.\n useEffect(() => {\n if (!isGet || !operation || !hasAutoRun) return;\n const merged = { ...debouncedValues, ...lockedPathValues };\n const missingRequired = parameters.filter((param) => {\n if (!param.required) return false;\n return (merged[param.name] ?? \"\").trim() === \"\";\n });\n if (missingRequired.length > 0) return;\n const signature = JSON.stringify(pruneParameterValues(merged));\n if (lastSubmittedSignature.current === signature) return;\n lastSubmittedSignature.current = signature;\n void executeOperation(merged);\n }, [\n isGet,\n hasAutoRun,\n debouncedValues,\n lockedPathValues,\n parameterSignature,\n ]);\n\n const backLink =\n backHref == null ? null : renderLink ? (\n renderLink({\n to: backHref,\n className: \"text-sm text-primary underline-offset-4 hover:underline\",\n children: backLabel,\n })\n ) : (\n <a\n href={backHref}\n className=\"text-sm text-primary underline-offset-4 hover:underline\"\n >\n {backLabel}\n </a>\n );\n\n if (isLoading) {\n return (\n <div className=\"text-sm text-muted-foreground\">Loading operation...</div>\n );\n }\n\n if (!operation) {\n return (\n <div className=\"space-y-4\">\n <div className=\"text-sm text-muted-foreground\">\n Unknown operation: <code>{operationId}</code>\n </div>\n {backLink}\n </div>\n );\n }\n\n const { path, method, operation: op } = operation;\n\n return (\n <div className={className ?? \"min-w-0 flex-1 space-y-6 p-6\"}>\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"min-w-0 flex-1\">\n {backLink}\n <div className=\"flex items-center gap-3\">\n <MethodBadge method={method} />\n <h1 className=\"truncate text-xl font-bold\">\n {op.summary || op.operationId || path}\n </h1>\n </div>\n <p className=\"mt-1 font-mono text-xs text-muted-foreground\">{path}</p>\n {op.operationId && op.summary && (\n <p className=\"mt-2 font-mono text-xs text-muted-foreground\">\n {op.operationId}\n </p>\n )}\n {op.description && op.description !== op.summary && (\n <p className=\"mt-1 text-sm text-muted-foreground\">\n {op.description}\n </p>\n )}\n </div>\n <div className=\"flex shrink-0 flex-col items-end gap-3\">\n {relatedOperations.length > 0 && (\n <div className=\"flex flex-wrap justify-end gap-2\">\n {relatedOperations.map((related) =>\n related.href ? (\n renderLink ? (\n renderLink({\n key: `${related.operation.method}:${related.operation.path}`,\n to: related.href,\n className:\n \"inline-flex h-8 items-center justify-center gap-2 rounded-md border border-input bg-background px-3 text-xs font-medium hover:bg-accent hover:text-accent-foreground\",\n children: related.label,\n })\n ) : (\n <a\n key={`${related.operation.method}:${related.operation.path}`}\n href={related.href}\n className=\"inline-flex h-8 items-center justify-center gap-2 rounded-md border border-input bg-background px-3 text-xs font-medium hover:bg-accent hover:text-accent-foreground\"\n >\n {related.label}\n </a>\n )\n ) : (\n <OperationActionDialog\n key={`${related.operation.method}:${related.operation.path}`}\n operation={related.operation}\n client={client}\n initialValues={lockedPathValues}\n label={related.label}\n defaultAccept={RESULT_ACCEPT}\n {...(onNavigate ? { onNavigateAction: onNavigate } : {})}\n />\n ),\n )}\n </div>\n )}\n </div>\n </div>\n\n {method.toUpperCase() !== \"GET\" && (\n <section className=\"space-y-3\">\n <div className=\"rounded-lg border p-4\">\n <CommandForm\n parameters={parameters}\n onExecute={(params) => executeOperation(params)}\n isPending={isExecuting}\n method={method}\n path={path}\n accept={RESULT_ACCEPT}\n initialValues={effectiveInitialValues}\n />\n </div>\n </section>\n )}\n\n {error ? (\n <InlineError title={`Failed to load ${path}`} error={error} />\n ) : isExecuting || result ? (\n <OperationResultView\n response={result}\n loading={isExecuting}\n loadingMessage=\"Loading execution results…\"\n ariaLabel=\"Response body\"\n detailOperation={detailOperation}\n {...(commandRuntime ? { commandRuntime } : {})}\n {...(isGet && effectiveAutoRun\n ? {\n filterConfig: {\n filters: formConfig.filters,\n ...(formConfig.timeRange\n ? { timeRange: formConfig.timeRange }\n : {}),\n },\n }\n : {})}\n {...(isGet && effectiveAutoRun && dataTablePagination\n ? { pagination: dataTablePagination }\n : {})}\n />\n ) : null}\n </div>\n );\n}\n\ntype RelatedOperation = {\n operation: ResolvedOperation;\n label: string;\n href?: string;\n};\n\nfunction findRelatedOperations(\n current: ResolvedOperation,\n operations: ResolvedOperation[],\n pathValues: Record<string, string>,\n): RelatedOperation[] {\n if (current.method.toUpperCase() !== \"GET\") return [];\n if (!pathTemplateSatisfied(current.path, pathValues)) return [];\n\n const basePath = current.path.replace(/\\/+$/, \"\");\n return operations\n .filter((candidate) => {\n if (candidate === current) return false;\n if (!candidate.path.startsWith(`${basePath}/`)) return false;\n if (!pathTemplateSatisfied(candidate.path, pathValues)) return false;\n const method = candidate.method.toUpperCase();\n return (\n method === \"GET\" ||\n method === \"POST\" ||\n method === \"PUT\" ||\n method === \"DELETE\"\n );\n })\n .map((related) => {\n const method = related.method.toUpperCase();\n const href =\n method === \"GET\"\n ? hrefForOperation(related, [], pathValues)\n : undefined;\n return {\n operation: related,\n label: operationLabel(related),\n ...(href ? { href } : {}),\n };\n })\n .filter(\n (related) =>\n related.operation.method.toUpperCase() !== \"GET\" || related.href,\n );\n}\n\nfunction findDetailOperation(\n current: ResolvedOperation,\n operations: ResolvedOperation[],\n) {\n const method = current.method.toUpperCase();\n const detailPath = `${current.path.replace(/\\/+$/, \"\")}/{id}`;\n return operations.find(\n (candidate) =>\n candidate.method.toUpperCase() === method &&\n candidate.path === detailPath &&\n candidate.operation.parameters?.some(\n (param) => param.in === \"path\" && param.name === \"id\" && param.required,\n ),\n );\n}\n\nfunction pathTemplateSatisfied(path: string, values: Record<string, string>) {\n return pathParamNames(path).every((name) => Boolean(values[name]));\n}\n\nfunction operationLabel(operation: ResolvedOperation): string {\n const actionName =\n operation.operation[\"x-clicky\"]?.actionName ||\n operation.path.split(\"/\").filter(Boolean).at(-1) ||\n operation.operation.operationId ||\n operation.method;\n return titleCase(actionName.replace(/[_-]+/g, \" \"));\n}\n\nfunction stripRunnerParams(values: ParameterValues): ParameterValues {\n const next: ParameterValues = {};\n for (const [key, value] of Object.entries(values)) {\n if (key === \"autoRun\" || key.startsWith(\"__\")) continue;\n next[key] = value;\n }\n return next;\n}\n\nfunction readQueryParameterValuesFromUrl(\n parameters: OpenAPIParameter[],\n): ParameterValues {\n if (typeof window === \"undefined\") return {};\n const queryParamNames = new Set(\n parameters.filter((param) => param.in === \"query\").map((p) => p.name),\n );\n if (queryParamNames.size === 0) return {};\n\n const values: ParameterValues = {};\n const search = new URLSearchParams(window.location.search);\n for (const name of queryParamNames) {\n const value = search.get(name);\n if (value != null && value !== \"\") {\n values[name] = value;\n }\n }\n return values;\n}\n\nfunction writeQueryParameterValuesToUrl(\n values: ParameterValues,\n parameters: OpenAPIParameter[],\n) {\n if (typeof window === \"undefined\") return;\n const queryParameters = parameters.filter((param) => param.in === \"query\");\n if (queryParameters.length === 0) return;\n\n const search = new URLSearchParams(window.location.search);\n for (const param of queryParameters) {\n const value = submitValue(param, values[param.name]);\n if (value == null) {\n search.delete(param.name);\n } else {\n search.set(param.name, value);\n }\n }\n\n const query = search.toString();\n const next = `${window.location.pathname}${query ? `?${query}` : \"\"}${window.location.hash}`;\n const current = `${window.location.pathname}${window.location.search}${window.location.hash}`;\n if (next !== current) {\n window.history.replaceState(window.history.state, \"\", next);\n }\n}\n"],"names":["values"],"mappings":"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"}
|
|
@@ -3,14 +3,11 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const react = require("react");
|
|
5
5
|
const reactQuery = require("@tanstack/react-query");
|
|
6
|
-
const button = require("../components/button.cjs");
|
|
7
6
|
const MethodBadge = require("../data/MethodBadge.cjs");
|
|
8
|
-
const Modal = require("../overlay/Modal.cjs");
|
|
9
7
|
const classify = require("./classify.cjs");
|
|
10
8
|
const clickyMetadata = require("./clickyMetadata.cjs");
|
|
11
9
|
const ExecutionResult = require("./ExecutionResult.cjs");
|
|
12
|
-
const
|
|
13
|
-
const formMetadata = require("./formMetadata.cjs");
|
|
10
|
+
const OperationActionBar = require("./OperationActionBar.cjs");
|
|
14
11
|
const useOperations = require("./useOperations.cjs");
|
|
15
12
|
function defaultRenderError(err, title) {
|
|
16
13
|
const message = err instanceof Error ? err.message : String(err ?? "");
|
|
@@ -33,13 +30,12 @@ function OperationEntityPage({
|
|
|
33
30
|
backHref,
|
|
34
31
|
backLabel = "Back",
|
|
35
32
|
renderError = defaultRenderError,
|
|
36
|
-
commandRuntime
|
|
33
|
+
commandRuntime,
|
|
34
|
+
formPre,
|
|
35
|
+
formPost,
|
|
36
|
+
formActions
|
|
37
37
|
}) {
|
|
38
38
|
const { operations, isLoading } = useOperations.useOperations(client);
|
|
39
|
-
const [activeAction, setActiveAction] = react.useState(null);
|
|
40
|
-
const [actionResult, setActionResult] = react.useState(null);
|
|
41
|
-
const [actionError, setActionError] = react.useState("");
|
|
42
|
-
const [isExecutingAction, setIsExecutingAction] = react.useState(false);
|
|
43
39
|
const surfaceOps = react.useMemo(
|
|
44
40
|
() => clickyMetadata.filterOperationsBySurface(operations, surfaceKey),
|
|
45
41
|
[operations, surfaceKey]
|
|
@@ -96,31 +92,25 @@ function OperationEntityPage({
|
|
|
96
92
|
staleTime: 3e4,
|
|
97
93
|
retry: 0
|
|
98
94
|
});
|
|
95
|
+
const rawDetailQuery = reactQuery.useQuery({
|
|
96
|
+
queryKey: ["entity-detail-raw", definition.key, id, resolvedDetailEndpoint == null ? void 0 : resolvedDetailEndpoint.path],
|
|
97
|
+
queryFn: async () => client.executeCommand(resolvedDetailEndpoint.path, resolvedDetailEndpoint.method, detailValues, {
|
|
98
|
+
Accept: "application/json"
|
|
99
|
+
}),
|
|
100
|
+
enabled: !!resolvedDetailEndpoint && !!id,
|
|
101
|
+
staleTime: 3e4,
|
|
102
|
+
retry: 0
|
|
103
|
+
});
|
|
104
|
+
const editInitialValue = react.useMemo(() => {
|
|
105
|
+
var _a;
|
|
106
|
+
const parsed = (_a = rawDetailQuery.data) == null ? void 0 : _a.parsed;
|
|
107
|
+
return parsed && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : void 0;
|
|
108
|
+
}, [rawDetailQuery.data]);
|
|
99
109
|
const backLink = backHref == null ? null : renderLink ? renderLink({
|
|
100
110
|
to: backHref,
|
|
101
111
|
className: "text-sm text-primary underline-offset-4 hover:underline",
|
|
102
112
|
children: backLabel
|
|
103
113
|
}) : /* @__PURE__ */ jsxRuntime.jsx("a", { href: backHref, className: "text-sm text-primary underline-offset-4 hover:underline", children: backLabel });
|
|
104
|
-
async function executeAction(values) {
|
|
105
|
-
if (!activeAction) return;
|
|
106
|
-
setIsExecutingAction(true);
|
|
107
|
-
setActionError("");
|
|
108
|
-
try {
|
|
109
|
-
const response = await client.executeCommand(
|
|
110
|
-
activeAction.path,
|
|
111
|
-
activeAction.method,
|
|
112
|
-
formMetadata.packParameterValues(values, activeAction.operation.parameters ?? []),
|
|
113
|
-
{ Accept: "application/json+clicky" }
|
|
114
|
-
);
|
|
115
|
-
setActionResult(response);
|
|
116
|
-
await detailQuery.refetch();
|
|
117
|
-
} catch (err) {
|
|
118
|
-
setActionResult(null);
|
|
119
|
-
setActionError(err instanceof Error ? err.message : String(err ?? "Unknown error"));
|
|
120
|
-
} finally {
|
|
121
|
-
setIsExecutingAction(false);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
114
|
if (isLoading) {
|
|
125
115
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-sm text-muted-foreground", children: "Loading entity…" });
|
|
126
116
|
}
|
|
@@ -131,38 +121,36 @@ function OperationEntityPage({
|
|
|
131
121
|
] });
|
|
132
122
|
}
|
|
133
123
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-6", children: [
|
|
134
|
-
/* @__PURE__ */ jsxRuntime.
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
/* @__PURE__ */ jsxRuntime.
|
|
138
|
-
|
|
139
|
-
/* @__PURE__ */ jsxRuntime.jsx("code", { className: "rounded-md bg-muted px-2 py-1 text-sm", children: resolvedDetailEndpoint.path })
|
|
140
|
-
] }),
|
|
141
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
142
|
-
/* @__PURE__ */ jsxRuntime.jsxs("h1", { className: "text-2xl font-semibold tracking-tight", children: [
|
|
143
|
-
definition.title,
|
|
144
|
-
": ",
|
|
145
|
-
id
|
|
146
|
-
] }),
|
|
147
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 max-w-3xl text-sm text-muted-foreground", children: definition.description })
|
|
148
|
-
] })
|
|
124
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-start justify-between gap-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 space-y-2", children: [
|
|
125
|
+
backLink,
|
|
126
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
127
|
+
/* @__PURE__ */ jsxRuntime.jsx(MethodBadge.MethodBadge, { method: resolvedDetailEndpoint.method }),
|
|
128
|
+
/* @__PURE__ */ jsxRuntime.jsx("code", { className: "rounded-md bg-muted px-2 py-1 text-sm", children: resolvedDetailEndpoint.path })
|
|
149
129
|
] }),
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
130
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
131
|
+
/* @__PURE__ */ jsxRuntime.jsxs("h1", { className: "text-2xl font-semibold tracking-tight", children: [
|
|
132
|
+
definition.title,
|
|
133
|
+
": ",
|
|
134
|
+
id
|
|
135
|
+
] }),
|
|
136
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 max-w-3xl text-sm text-muted-foreground", children: definition.description })
|
|
137
|
+
] })
|
|
138
|
+
] }) }),
|
|
139
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
140
|
+
OperationActionBar.OperationActionBar,
|
|
141
|
+
{
|
|
142
|
+
actions: actionOps,
|
|
143
|
+
client,
|
|
144
|
+
getLockedValues: () => ({ [idParameterName]: id }),
|
|
145
|
+
onExecuted: () => void detailQuery.refetch(),
|
|
146
|
+
hideLockedInForm: true,
|
|
147
|
+
...editInitialValue ? { initialValue: editInitialValue } : {},
|
|
148
|
+
...commandRuntime ? { commandRuntime } : {},
|
|
149
|
+
...formPre ? { formPre } : {},
|
|
150
|
+
...formPost ? { formPost } : {},
|
|
151
|
+
...formActions ? { formActions } : {}
|
|
152
|
+
}
|
|
153
|
+
),
|
|
166
154
|
detailQuery.isLoading ? /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "rounded-xl border bg-card p-4", children: [
|
|
167
155
|
/* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-lg font-medium", children: "Entity detail" }),
|
|
168
156
|
/* @__PURE__ */ jsxRuntime.jsx(ExecutionResult.ExecutionResult, { loading: true, loadingMessage: "Loading entity detail…" })
|
|
@@ -175,46 +163,7 @@ function OperationEntityPage({
|
|
|
175
163
|
...commandRuntime ? { commandRuntime } : {}
|
|
176
164
|
}
|
|
177
165
|
)
|
|
178
|
-
] })
|
|
179
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
180
|
-
Modal.Modal,
|
|
181
|
-
{
|
|
182
|
-
open: activeAction != null,
|
|
183
|
-
onClose: () => setActiveAction(null),
|
|
184
|
-
title: (activeAction == null ? void 0 : activeAction.operation.summary) || (activeAction == null ? void 0 : activeAction.operation.operationId) || "Action",
|
|
185
|
-
size: "lg",
|
|
186
|
-
children: activeAction && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
|
|
187
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
188
|
-
/* @__PURE__ */ jsxRuntime.jsx(MethodBadge.MethodBadge, { method: activeAction.method }),
|
|
189
|
-
/* @__PURE__ */ jsxRuntime.jsx("code", { className: "rounded-md bg-muted px-2 py-1 text-sm", children: activeAction.path })
|
|
190
|
-
] }),
|
|
191
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
192
|
-
FilterForm.FilterForm,
|
|
193
|
-
{
|
|
194
|
-
client,
|
|
195
|
-
path: activeAction.path,
|
|
196
|
-
method: activeAction.method,
|
|
197
|
-
parameters: activeAction.operation.parameters ?? [],
|
|
198
|
-
lockedValues: { [idParameterName]: id },
|
|
199
|
-
hideLocked: true,
|
|
200
|
-
enableLookup: false,
|
|
201
|
-
submitLabel: "Execute request",
|
|
202
|
-
submittingLabel: "Executing…",
|
|
203
|
-
isSubmitting: isExecutingAction,
|
|
204
|
-
onSubmit: executeAction
|
|
205
|
-
}
|
|
206
|
-
),
|
|
207
|
-
actionError ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-md border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive", children: actionError }) : actionResult ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
208
|
-
ExecutionResult.ExecutionResult,
|
|
209
|
-
{
|
|
210
|
-
response: actionResult,
|
|
211
|
-
className: "mt-0",
|
|
212
|
-
...commandRuntime ? { commandRuntime } : {}
|
|
213
|
-
}
|
|
214
|
-
) : null
|
|
215
|
-
] })
|
|
216
|
-
}
|
|
217
|
-
)
|
|
166
|
+
] })
|
|
218
167
|
] });
|
|
219
168
|
}
|
|
220
169
|
exports.OperationEntityPage = OperationEntityPage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OperationEntityPage.cjs","sources":["../../src/rpc/OperationEntityPage.tsx"],"sourcesContent":["import { useMemo, useState, type ReactNode } from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { Button } from \"../components/button\";\nimport type { ClickyCommandRuntime } from \"../data/Clicky\";\nimport { MethodBadge } from \"../data/MethodBadge\";\nimport { Modal } from \"../overlay/Modal\";\nimport { filterOperationsByDomain, findDetailEndpointForList, findListEndpoint } from \"./classify\";\nimport {\n filterOperationsBySurface,\n findSurfaceDetailOperation,\n findSurfaceEntityActions,\n findSurfaceListOperation,\n} from \"./clickyMetadata\";\nimport { ExecutionResult } from \"./ExecutionResult\";\nimport { FilterForm } from \"./FilterForm\";\nimport { packParameterValues } from \"./formMetadata\";\nimport type { RenderLink } from \"./EndpointList\";\nimport type { DomainDefinition, ExecutionResponse, ResolvedOperation } from \"./types\";\nimport { useOperations, type OperationsApiClient } from \"./useOperations\";\n\nexport type OperationEntityPageProps = {\n id?: string;\n definition: DomainDefinition;\n entities: string[];\n client: OperationsApiClient;\n renderLink?: RenderLink;\n allOperations?: boolean;\n operationIdPrefix?: string;\n listOperationId?: string;\n detailOperationId?: string;\n surfaceKey?: string;\n backHref?: string;\n backLabel?: string;\n renderError?: (err: unknown, title: string) => ReactNode;\n commandRuntime?: ClickyCommandRuntime;\n};\n\nfunction defaultRenderError(err: unknown, title: string) {\n const message = err instanceof Error ? err.message : String(err ?? \"\");\n return (\n <div className=\"rounded-xl border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive\">\n <div className=\"font-medium\">{title}</div>\n {message && <div className=\"mt-1 whitespace-pre-wrap text-xs opacity-80\">{message}</div>}\n </div>\n );\n}\n\nexport function OperationEntityPage({\n id,\n definition,\n entities,\n client,\n renderLink,\n allOperations = false,\n operationIdPrefix,\n listOperationId,\n detailOperationId,\n surfaceKey,\n backHref,\n backLabel = \"Back\",\n renderError = defaultRenderError,\n commandRuntime,\n}: OperationEntityPageProps) {\n const { operations, isLoading } = useOperations(client);\n const [activeAction, setActiveAction] = useState<ResolvedOperation | null>(null);\n const [actionResult, setActionResult] = useState<ExecutionResponse | null>(null);\n const [actionError, setActionError] = useState(\"\");\n const [isExecutingAction, setIsExecutingAction] = useState(false);\n const surfaceOps = useMemo(\n () => filterOperationsBySurface(operations, surfaceKey),\n [operations, surfaceKey],\n );\n const useSurfaceMetadata = surfaceOps.length > 0;\n\n const domainOps = useMemo(() => {\n if (useSurfaceMetadata) {\n return surfaceOps;\n }\n\n return (allOperations ? operations : filterOperationsByDomain(operations, entities)).filter(\n (op) =>\n operationIdPrefix ? (op.operation.operationId ?? \"\").startsWith(operationIdPrefix) : true,\n );\n }, [allOperations, entities, operationIdPrefix, operations, surfaceOps, useSurfaceMetadata]);\n\n const listEndpoint = useMemo(() => {\n if (useSurfaceMetadata) {\n return findSurfaceListOperation(domainOps, surfaceKey);\n }\n\n const explicitList = listOperationId\n ? domainOps.find((op) => op.method === \"get\" && op.operation.operationId === listOperationId)\n : undefined;\n return explicitList ?? findListEndpoint(domainOps, entities);\n }, [domainOps, entities, listOperationId, surfaceKey, useSurfaceMetadata]);\n\n const resolvedDetailEndpoint = useMemo(() => {\n if (useSurfaceMetadata) {\n return findSurfaceDetailOperation(domainOps, surfaceKey);\n }\n\n return detailOperationId\n ? domainOps.find(\n (op) => op.method === \"get\" && op.operation.operationId === detailOperationId,\n )\n : findDetailEndpointForList(domainOps, listEndpoint);\n }, [detailOperationId, domainOps, listEndpoint, surfaceKey, useSurfaceMetadata]);\n\n const idParameterName = useMemo(\n () =>\n resolvedDetailEndpoint?.operation.parameters?.find((param) => param.in === \"path\")?.name ??\n \"id\",\n [resolvedDetailEndpoint],\n );\n const detailValues = useMemo(() => (id ? { [idParameterName]: id } : {}), [id, idParameterName]);\n const actionOps = useMemo(() => {\n if (useSurfaceMetadata) {\n return findSurfaceEntityActions(domainOps, surfaceKey);\n }\n\n return resolvedDetailEndpoint == null\n ? []\n : domainOps.filter(\n (op) => op.method !== \"get\" && op.path.startsWith(`${resolvedDetailEndpoint.path}/`),\n );\n }, [domainOps, resolvedDetailEndpoint, surfaceKey, useSurfaceMetadata]);\n\n const detailQuery = useQuery({\n queryKey: [\"entity-detail\", definition.key, id, resolvedDetailEndpoint?.path],\n queryFn: async () =>\n client.executeCommand(\n resolvedDetailEndpoint!.path,\n resolvedDetailEndpoint!.method,\n detailValues,\n { Accept: \"application/json+clicky\" },\n ),\n enabled: !!resolvedDetailEndpoint && !!id,\n staleTime: 30_000,\n retry: 0,\n });\n\n const backLink =\n backHref == null ? null : renderLink ? (\n renderLink({\n to: backHref,\n className: \"text-sm text-primary underline-offset-4 hover:underline\",\n children: backLabel,\n })\n ) : (\n <a href={backHref} className=\"text-sm text-primary underline-offset-4 hover:underline\">\n {backLabel}\n </a>\n );\n\n async function executeAction(values: Record<string, string>) {\n if (!activeAction) return;\n setIsExecutingAction(true);\n setActionError(\"\");\n\n try {\n const response = await client.executeCommand(\n activeAction.path,\n activeAction.method,\n packParameterValues(values, activeAction.operation.parameters ?? []),\n { Accept: \"application/json+clicky\" },\n );\n setActionResult(response);\n await detailQuery.refetch();\n } catch (err) {\n setActionResult(null);\n setActionError(err instanceof Error ? err.message : String(err ?? \"Unknown error\"));\n } finally {\n setIsExecutingAction(false);\n }\n }\n\n if (isLoading) {\n return <div className=\"text-sm text-muted-foreground\">Loading entity…</div>;\n }\n\n if (!resolvedDetailEndpoint || !id) {\n return (\n <div className=\"space-y-4\">\n {backLink}\n <div className=\"text-sm text-muted-foreground\">Unknown entity detail route.</div>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"min-w-0 space-y-2\">\n {backLink}\n <div className=\"flex items-center gap-3\">\n <MethodBadge method={resolvedDetailEndpoint.method} />\n <code className=\"rounded-md bg-muted px-2 py-1 text-sm\">\n {resolvedDetailEndpoint.path}\n </code>\n </div>\n <div>\n <h1 className=\"text-2xl font-semibold tracking-tight\">\n {definition.title}: {id}\n </h1>\n <p className=\"mt-1 max-w-3xl text-sm text-muted-foreground\">{definition.description}</p>\n </div>\n </div>\n {actionOps.length > 0 && (\n <div className=\"flex shrink-0 flex-wrap justify-end gap-2\">\n {actionOps.map((op) => (\n <Button\n key={`${op.method}:${op.path}`}\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n onClick={() => {\n setActiveAction(op);\n setActionResult(null);\n setActionError(\"\");\n }}\n >\n {op.operation.summary || op.operation.operationId || op.path}\n </Button>\n ))}\n </div>\n )}\n </div>\n\n {detailQuery.isLoading ? (\n <section className=\"rounded-xl border bg-card p-4\">\n <h2 className=\"text-lg font-medium\">Entity detail</h2>\n <ExecutionResult loading loadingMessage=\"Loading entity detail…\" />\n </section>\n ) : detailQuery.isError ? (\n renderError(detailQuery.error, `Failed to load ${resolvedDetailEndpoint.path}`)\n ) : (\n <section className=\"rounded-xl border bg-card p-4\">\n <h2 className=\"text-lg font-medium\">Entity detail</h2>\n <ExecutionResult\n response={detailQuery.data ?? null}\n {...(commandRuntime ? { commandRuntime } : {})}\n />\n </section>\n )}\n\n <Modal\n open={activeAction != null}\n onClose={() => setActiveAction(null)}\n title={activeAction?.operation.summary || activeAction?.operation.operationId || \"Action\"}\n size=\"lg\"\n >\n {activeAction && (\n <div className=\"space-y-4\">\n <div className=\"flex items-center gap-3\">\n <MethodBadge method={activeAction.method} />\n <code className=\"rounded-md bg-muted px-2 py-1 text-sm\">{activeAction.path}</code>\n </div>\n <FilterForm\n client={client}\n path={activeAction.path}\n method={activeAction.method}\n parameters={activeAction.operation.parameters ?? []}\n lockedValues={{ [idParameterName]: id }}\n hideLocked\n enableLookup={false}\n submitLabel=\"Execute request\"\n submittingLabel=\"Executing…\"\n isSubmitting={isExecutingAction}\n onSubmit={executeAction}\n />\n {actionError ? (\n <div className=\"rounded-md border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive\">\n {actionError}\n </div>\n ) : actionResult ? (\n <ExecutionResult\n response={actionResult}\n className=\"mt-0\"\n {...(commandRuntime ? { commandRuntime } : {})}\n />\n ) : null}\n </div>\n )}\n </Modal>\n </div>\n );\n}\n"],"names":["jsxs","jsx","useOperations","useState","useMemo","filterOperationsBySurface","filterOperationsByDomain","findSurfaceListOperation","findListEndpoint","findSurfaceDetailOperation","findDetailEndpointForList","findSurfaceEntityActions","useQuery","packParameterValues","MethodBadge","Button","ExecutionResult","Modal","FilterForm"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"OperationEntityPage.cjs","sources":["../../src/rpc/OperationEntityPage.tsx"],"sourcesContent":["import { useMemo, type ReactNode } from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport type { ClickyCommandRuntime } from \"../data/Clicky\";\nimport { MethodBadge } from \"../data/MethodBadge\";\nimport { filterOperationsByDomain, findDetailEndpointForList, findListEndpoint } from \"./classify\";\nimport {\n filterOperationsBySurface,\n findSurfaceDetailOperation,\n findSurfaceEntityActions,\n findSurfaceListOperation,\n} from \"./clickyMetadata\";\nimport { ExecutionResult } from \"./ExecutionResult\";\nimport { OperationActionBar } from \"./OperationActionBar\";\nimport { type FormActionsRenderer } from \"./SchemaActionForm\";\nimport type { RenderLink } from \"./EndpointList\";\nimport type { PreExtension, PostExtension } from \"../components/json-schema-form-types\";\nimport type { DomainDefinition } from \"./types\";\nimport { useOperations, type OperationsApiClient } from \"./useOperations\";\n\nexport type OperationEntityPageProps = {\n id?: string;\n definition: DomainDefinition;\n entities: string[];\n client: OperationsApiClient;\n renderLink?: RenderLink;\n allOperations?: boolean;\n operationIdPrefix?: string;\n listOperationId?: string;\n detailOperationId?: string;\n surfaceKey?: string;\n backHref?: string;\n backLabel?: string;\n renderError?: (err: unknown, title: string) => ReactNode;\n commandRuntime?: ClickyCommandRuntime;\n // Custom JsonSchemaForm field extensions forwarded to the edit form.\n formPre?: PreExtension[];\n formPost?: PostExtension[];\n // Optional extra footer actions for the edit form (e.g. a connection \"Test\"\n // button).\n formActions?: FormActionsRenderer;\n};\n\nfunction defaultRenderError(err: unknown, title: string) {\n const message = err instanceof Error ? err.message : String(err ?? \"\");\n return (\n <div className=\"rounded-xl border border-destructive/40 bg-destructive/5 p-4 text-sm text-destructive\">\n <div className=\"font-medium\">{title}</div>\n {message && <div className=\"mt-1 whitespace-pre-wrap text-xs opacity-80\">{message}</div>}\n </div>\n );\n}\n\nexport function OperationEntityPage({\n id,\n definition,\n entities,\n client,\n renderLink,\n allOperations = false,\n operationIdPrefix,\n listOperationId,\n detailOperationId,\n surfaceKey,\n backHref,\n backLabel = \"Back\",\n renderError = defaultRenderError,\n commandRuntime,\n formPre,\n formPost,\n formActions,\n}: OperationEntityPageProps) {\n const { operations, isLoading } = useOperations(client);\n const surfaceOps = useMemo(\n () => filterOperationsBySurface(operations, surfaceKey),\n [operations, surfaceKey],\n );\n const useSurfaceMetadata = surfaceOps.length > 0;\n\n const domainOps = useMemo(() => {\n if (useSurfaceMetadata) {\n return surfaceOps;\n }\n\n return (allOperations ? operations : filterOperationsByDomain(operations, entities)).filter(\n (op) =>\n operationIdPrefix ? (op.operation.operationId ?? \"\").startsWith(operationIdPrefix) : true,\n );\n }, [allOperations, entities, operationIdPrefix, operations, surfaceOps, useSurfaceMetadata]);\n\n const listEndpoint = useMemo(() => {\n if (useSurfaceMetadata) {\n return findSurfaceListOperation(domainOps, surfaceKey);\n }\n\n const explicitList = listOperationId\n ? domainOps.find((op) => op.method === \"get\" && op.operation.operationId === listOperationId)\n : undefined;\n return explicitList ?? findListEndpoint(domainOps, entities);\n }, [domainOps, entities, listOperationId, surfaceKey, useSurfaceMetadata]);\n\n const resolvedDetailEndpoint = useMemo(() => {\n if (useSurfaceMetadata) {\n return findSurfaceDetailOperation(domainOps, surfaceKey);\n }\n\n return detailOperationId\n ? domainOps.find(\n (op) => op.method === \"get\" && op.operation.operationId === detailOperationId,\n )\n : findDetailEndpointForList(domainOps, listEndpoint);\n }, [detailOperationId, domainOps, listEndpoint, surfaceKey, useSurfaceMetadata]);\n\n const idParameterName = useMemo(\n () =>\n resolvedDetailEndpoint?.operation.parameters?.find((param) => param.in === \"path\")?.name ??\n \"id\",\n [resolvedDetailEndpoint],\n );\n const detailValues = useMemo(() => (id ? { [idParameterName]: id } : {}), [id, idParameterName]);\n const actionOps = useMemo(() => {\n if (useSurfaceMetadata) {\n return findSurfaceEntityActions(domainOps, surfaceKey);\n }\n\n return resolvedDetailEndpoint == null\n ? []\n : domainOps.filter(\n (op) => op.method !== \"get\" && op.path.startsWith(`${resolvedDetailEndpoint.path}/`),\n );\n }, [domainOps, resolvedDetailEndpoint, surfaceKey, useSurfaceMetadata]);\n\n const detailQuery = useQuery({\n queryKey: [\"entity-detail\", definition.key, id, resolvedDetailEndpoint?.path],\n queryFn: async () =>\n client.executeCommand(\n resolvedDetailEndpoint!.path,\n resolvedDetailEndpoint!.method,\n detailValues,\n { Accept: \"application/json+clicky\" },\n ),\n enabled: !!resolvedDetailEndpoint && !!id,\n staleTime: 30_000,\n retry: 0,\n });\n\n // Raw (non-clicky) detail used to pre-fill the schema-driven edit form. Only\n // resources whose detail endpoint returns a plain object (e.g. connections)\n // prefill; others (e.g. a profile detail that returns rows) start blank.\n const rawDetailQuery = useQuery({\n queryKey: [\"entity-detail-raw\", definition.key, id, resolvedDetailEndpoint?.path],\n queryFn: async () =>\n client.executeCommand(resolvedDetailEndpoint!.path, resolvedDetailEndpoint!.method, detailValues, {\n Accept: \"application/json\",\n }),\n enabled: !!resolvedDetailEndpoint && !!id,\n staleTime: 30_000,\n retry: 0,\n });\n const editInitialValue = useMemo(() => {\n const parsed = rawDetailQuery.data?.parsed;\n return parsed && typeof parsed === \"object\" && !Array.isArray(parsed)\n ? (parsed as Record<string, unknown>)\n : undefined;\n }, [rawDetailQuery.data]);\n\n const backLink =\n backHref == null ? null : renderLink ? (\n renderLink({\n to: backHref,\n className: \"text-sm text-primary underline-offset-4 hover:underline\",\n children: backLabel,\n })\n ) : (\n <a href={backHref} className=\"text-sm text-primary underline-offset-4 hover:underline\">\n {backLabel}\n </a>\n );\n\n if (isLoading) {\n return <div className=\"text-sm text-muted-foreground\">Loading entity…</div>;\n }\n\n if (!resolvedDetailEndpoint || !id) {\n return (\n <div className=\"space-y-4\">\n {backLink}\n <div className=\"text-sm text-muted-foreground\">Unknown entity detail route.</div>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-6\">\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"min-w-0 space-y-2\">\n {backLink}\n <div className=\"flex items-center gap-3\">\n <MethodBadge method={resolvedDetailEndpoint.method} />\n <code className=\"rounded-md bg-muted px-2 py-1 text-sm\">\n {resolvedDetailEndpoint.path}\n </code>\n </div>\n <div>\n <h1 className=\"text-2xl font-semibold tracking-tight\">\n {definition.title}: {id}\n </h1>\n <p className=\"mt-1 max-w-3xl text-sm text-muted-foreground\">{definition.description}</p>\n </div>\n </div>\n </div>\n\n <OperationActionBar\n actions={actionOps}\n client={client}\n getLockedValues={() => ({ [idParameterName]: id })}\n onExecuted={() => void detailQuery.refetch()}\n hideLockedInForm\n {...(editInitialValue ? { initialValue: editInitialValue } : {})}\n {...(commandRuntime ? { commandRuntime } : {})}\n {...(formPre ? { formPre } : {})}\n {...(formPost ? { formPost } : {})}\n {...(formActions ? { formActions } : {})}\n />\n\n {detailQuery.isLoading ? (\n <section className=\"rounded-xl border bg-card p-4\">\n <h2 className=\"text-lg font-medium\">Entity detail</h2>\n <ExecutionResult loading loadingMessage=\"Loading entity detail…\" />\n </section>\n ) : detailQuery.isError ? (\n renderError(detailQuery.error, `Failed to load ${resolvedDetailEndpoint.path}`)\n ) : (\n <section className=\"rounded-xl border bg-card p-4\">\n <h2 className=\"text-lg font-medium\">Entity detail</h2>\n <ExecutionResult\n response={detailQuery.data ?? null}\n {...(commandRuntime ? { commandRuntime } : {})}\n />\n </section>\n )}\n </div>\n );\n}\n"],"names":["jsxs","jsx","useOperations","useMemo","filterOperationsBySurface","filterOperationsByDomain","findSurfaceListOperation","findListEndpoint","findSurfaceDetailOperation","findDetailEndpointForList","findSurfaceEntityActions","useQuery","MethodBadge","OperationActionBar","ExecutionResult"],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
import { ClickyCommandRuntime } from '../data/Clicky';
|
|
3
|
+
import { FormActionsRenderer } from './SchemaActionForm';
|
|
3
4
|
import { RenderLink } from './EndpointList';
|
|
5
|
+
import { PreExtension, PostExtension } from '../components/json-schema-form-types';
|
|
4
6
|
import { DomainDefinition } from './types';
|
|
5
7
|
import { OperationsApiClient } from './useOperations';
|
|
6
8
|
export type OperationEntityPageProps = {
|
|
@@ -18,6 +20,9 @@ export type OperationEntityPageProps = {
|
|
|
18
20
|
backLabel?: string;
|
|
19
21
|
renderError?: (err: unknown, title: string) => ReactNode;
|
|
20
22
|
commandRuntime?: ClickyCommandRuntime;
|
|
23
|
+
formPre?: PreExtension[];
|
|
24
|
+
formPost?: PostExtension[];
|
|
25
|
+
formActions?: FormActionsRenderer;
|
|
21
26
|
};
|
|
22
|
-
export declare function OperationEntityPage({ id, definition, entities, client, renderLink, allOperations, operationIdPrefix, listOperationId, detailOperationId, surfaceKey, backHref, backLabel, renderError, commandRuntime, }: OperationEntityPageProps): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
export declare function OperationEntityPage({ id, definition, entities, client, renderLink, allOperations, operationIdPrefix, listOperationId, detailOperationId, surfaceKey, backHref, backLabel, renderError, commandRuntime, formPre, formPost, formActions, }: OperationEntityPageProps): import("react/jsx-runtime").JSX.Element;
|
|
23
28
|
//# sourceMappingURL=OperationEntityPage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OperationEntityPage.d.ts","sourceRoot":"","sources":["../../src/rpc/OperationEntityPage.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"OperationEntityPage.d.ts","sourceRoot":"","sources":["../../src/rpc/OperationEntityPage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEhD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAW3D,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACxF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE1E,MAAM,MAAM,wBAAwB,GAAG;IACrC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,gBAAgB,CAAC;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;IACzD,cAAc,CAAC,EAAE,oBAAoB,CAAC;IAEtC,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAG3B,WAAW,CAAC,EAAE,mBAAmB,CAAC;CACnC,CAAC;AAYF,wBAAgB,mBAAmB,CAAC,EAClC,EAAE,EACF,UAAU,EACV,QAAQ,EACR,MAAM,EACN,UAAU,EACV,aAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,QAAQ,EACR,SAAkB,EAClB,WAAgC,EAChC,cAAc,EACd,OAAO,EACP,QAAQ,EACR,WAAW,GACZ,EAAE,wBAAwB,2CA4K1B"}
|