@manta-eu/react 0.11.0 → 0.13.0
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/README.md +59 -0
- package/dist/components/AppErrorBoundary.d.ts.map +1 -1
- package/dist/components/AppErrorBoundary.js +14 -11
- package/dist/components/AppErrorBoundary.js.map +1 -1
- package/dist/components/app-gate/AppGate.d.ts +8 -0
- package/dist/components/app-gate/AppGate.d.ts.map +1 -0
- package/dist/components/app-gate/AppGate.js +68 -0
- package/dist/components/app-gate/AppGate.js.map +1 -0
- package/dist/components/app-gate/AwaitingDatastoreStatus.d.ts +7 -0
- package/dist/components/app-gate/AwaitingDatastoreStatus.d.ts.map +1 -0
- package/dist/components/app-gate/AwaitingDatastoreStatus.js +19 -0
- package/dist/components/app-gate/AwaitingDatastoreStatus.js.map +1 -0
- package/dist/components/app-gate/EnterDatastoreRoute.d.ts +2 -0
- package/dist/components/app-gate/EnterDatastoreRoute.d.ts.map +1 -0
- package/dist/components/app-gate/EnterDatastoreRoute.js +25 -0
- package/dist/components/app-gate/EnterDatastoreRoute.js.map +1 -0
- package/dist/components/app-gate/ErrorRoute.d.ts +2 -0
- package/dist/components/app-gate/ErrorRoute.d.ts.map +1 -0
- package/dist/components/app-gate/ErrorRoute.js +27 -0
- package/dist/components/app-gate/ErrorRoute.js.map +1 -0
- package/dist/components/app-gate/FailureAlert.d.ts +5 -0
- package/dist/components/app-gate/FailureAlert.d.ts.map +1 -0
- package/dist/components/app-gate/FailureAlert.js +9 -0
- package/dist/components/app-gate/FailureAlert.js.map +1 -0
- package/dist/components/app-gate/NoDatastoreAccess.d.ts +8 -0
- package/dist/components/app-gate/NoDatastoreAccess.d.ts.map +1 -0
- package/dist/components/app-gate/NoDatastoreAccess.js +9 -0
- package/dist/components/app-gate/NoDatastoreAccess.js.map +1 -0
- package/dist/components/app-gate/NotFoundRoute.d.ts +2 -0
- package/dist/components/app-gate/NotFoundRoute.d.ts.map +1 -0
- package/dist/components/app-gate/NotFoundRoute.js +9 -0
- package/dist/components/app-gate/NotFoundRoute.js.map +1 -0
- package/dist/components/app-gate/PendingInvitations.d.ts +5 -0
- package/dist/components/app-gate/PendingInvitations.d.ts.map +1 -0
- package/dist/components/app-gate/PendingInvitations.js +58 -0
- package/dist/components/app-gate/PendingInvitations.js.map +1 -0
- package/dist/components/app-gate/ServiceError.d.ts +8 -0
- package/dist/components/app-gate/ServiceError.d.ts.map +1 -0
- package/dist/components/app-gate/ServiceError.js +10 -0
- package/dist/components/app-gate/ServiceError.js.map +1 -0
- package/dist/components/app-gate/index.d.ts +3 -0
- package/dist/components/app-gate/index.d.ts.map +1 -0
- package/dist/components/app-gate/index.js +3 -0
- package/dist/components/app-gate/index.js.map +1 -0
- package/dist/components/app-gate/sdk-route-elements.d.ts +23 -0
- package/dist/components/app-gate/sdk-route-elements.d.ts.map +1 -0
- package/dist/components/app-gate/sdk-route-elements.js +35 -0
- package/dist/components/app-gate/sdk-route-elements.js.map +1 -0
- package/dist/components/app-shell/AppShell.d.ts +7 -0
- package/dist/components/app-shell/AppShell.d.ts.map +1 -0
- package/dist/components/app-shell/AppShell.js +10 -0
- package/dist/components/app-shell/AppShell.js.map +1 -0
- package/dist/components/app-shell/AppShellRoutes.d.ts +9 -0
- package/dist/components/app-shell/AppShellRoutes.d.ts.map +1 -0
- package/dist/components/app-shell/AppShellRoutes.js +20 -0
- package/dist/components/app-shell/AppShellRoutes.js.map +1 -0
- package/dist/components/app-shell/GroupDatastores.d.ts +8 -0
- package/dist/components/app-shell/GroupDatastores.d.ts.map +1 -0
- package/dist/components/app-shell/GroupDatastores.js +15 -0
- package/dist/components/app-shell/GroupDatastores.js.map +1 -0
- package/dist/components/app-shell/GroupRoute.d.ts +2 -0
- package/dist/components/app-shell/GroupRoute.d.ts.map +1 -0
- package/dist/components/app-shell/GroupRoute.js +22 -0
- package/dist/components/app-shell/GroupRoute.js.map +1 -0
- package/dist/components/app-shell/index.d.ts +3 -0
- package/dist/components/app-shell/index.d.ts.map +1 -0
- package/dist/components/app-shell/index.js +3 -0
- package/dist/components/app-shell/index.js.map +1 -0
- package/dist/components/authenticated-chat/index.d.ts +1 -2
- package/dist/components/authenticated-chat/index.d.ts.map +1 -1
- package/dist/components/authenticated-chat/index.js +1 -12
- package/dist/components/authenticated-chat/index.js.map +1 -1
- package/dist/components/chat-view/Chat.d.ts +2 -1
- package/dist/components/chat-view/Chat.d.ts.map +1 -1
- package/dist/components/chat-view/Chat.js +3 -2
- package/dist/components/chat-view/Chat.js.map +1 -1
- package/dist/components/chat-view/MessageItem.d.ts.map +1 -1
- package/dist/components/chat-view/MessageItem.js +4 -2
- package/dist/components/chat-view/MessageItem.js.map +1 -1
- package/dist/components/chat-view/tool-part-rendering.d.ts +1 -0
- package/dist/components/chat-view/tool-part-rendering.d.ts.map +1 -1
- package/dist/components/chat-view/tool-part-rendering.js +8 -1
- package/dist/components/chat-view/tool-part-rendering.js.map +1 -1
- package/dist/components/chip/index.d.ts +1 -0
- package/dist/components/chip/index.d.ts.map +1 -1
- package/dist/components/chip/index.js +2 -1
- package/dist/components/chip/index.js.map +1 -1
- package/dist/components/embedded-chat/index.d.ts +1 -1
- package/dist/components/embedded-chat/index.d.ts.map +1 -1
- package/dist/components/embedded-chat/index.js +1 -1
- package/dist/components/embedded-chat/index.js.map +1 -1
- package/dist/components/input/input-date-time.d.ts +6 -0
- package/dist/components/input/input-date-time.d.ts.map +1 -1
- package/dist/components/input/input-date-time.js +2 -1
- package/dist/components/input/input-date-time.js.map +1 -1
- package/dist/components/input/input-date.d.ts +22 -0
- package/dist/components/input/input-date.d.ts.map +1 -1
- package/dist/components/input/input-date.js +28 -14
- package/dist/components/input/input-date.js.map +1 -1
- package/dist/components/input/input-time.d.ts +9 -0
- package/dist/components/input/input-time.d.ts.map +1 -1
- package/dist/components/input/input-time.js +29 -18
- package/dist/components/input/input-time.js.map +1 -1
- package/dist/components/layouts/RouteLayout.d.ts +0 -9
- package/dist/components/layouts/RouteLayout.d.ts.map +1 -1
- package/dist/components/layouts/RouteLayout.js +7 -4
- package/dist/components/layouts/RouteLayout.js.map +1 -1
- package/dist/components/layouts/Sidebar.d.ts +1 -8
- package/dist/components/layouts/Sidebar.d.ts.map +1 -1
- package/dist/components/layouts/Sidebar.js +7 -14
- package/dist/components/layouts/Sidebar.js.map +1 -1
- package/dist/components/plan-limits/PlanLimitsDialog.d.ts +20 -0
- package/dist/components/plan-limits/PlanLimitsDialog.d.ts.map +1 -0
- package/dist/components/plan-limits/PlanLimitsDialog.js +109 -0
- package/dist/components/plan-limits/PlanLimitsDialog.js.map +1 -0
- package/dist/components/plan-limits/index.d.ts +4 -0
- package/dist/components/plan-limits/index.d.ts.map +1 -0
- package/dist/components/plan-limits/index.js +2 -0
- package/dist/components/plan-limits/index.js.map +1 -0
- package/dist/components/plan-limits/plan-limits-client.d.ts +15 -0
- package/dist/components/plan-limits/plan-limits-client.d.ts.map +1 -0
- package/dist/components/plan-limits/plan-limits-client.js +44 -0
- package/dist/components/plan-limits/plan-limits-client.js.map +1 -0
- package/dist/components/plan-limits/plan-limits-model.d.ts +66 -0
- package/dist/components/plan-limits/plan-limits-model.d.ts.map +1 -0
- package/dist/components/plan-limits/plan-limits-model.js +123 -0
- package/dist/components/plan-limits/plan-limits-model.js.map +1 -0
- package/dist/components/plan-limits/plan-limits-save.d.ts +31 -0
- package/dist/components/plan-limits/plan-limits-save.d.ts.map +1 -0
- package/dist/components/plan-limits/plan-limits-save.js +43 -0
- package/dist/components/plan-limits/plan-limits-save.js.map +1 -0
- package/dist/components/planning/PlanLimitsAction.d.ts +6 -0
- package/dist/components/planning/PlanLimitsAction.d.ts.map +1 -0
- package/dist/components/planning/PlanLimitsAction.js +19 -0
- package/dist/components/planning/PlanLimitsAction.js.map +1 -0
- package/dist/components/slider/index.d.ts.map +1 -1
- package/dist/components/slider/index.js +2 -1
- package/dist/components/slider/index.js.map +1 -1
- package/dist/datastore-picker/datastore-picker-rows.d.ts +7 -0
- package/dist/datastore-picker/datastore-picker-rows.d.ts.map +1 -1
- package/dist/datastore-picker/datastore-picker-rows.js +26 -22
- package/dist/datastore-picker/datastore-picker-rows.js.map +1 -1
- package/dist/globals.css +85 -2
- package/dist/hooks/use-action-plans-list.d.ts +3 -0
- package/dist/hooks/use-action-plans-list.d.ts.map +1 -1
- package/dist/hooks/use-action-plans-list.js +8 -9
- package/dist/hooks/use-action-plans-list.js.map +1 -1
- package/dist/hooks/use-activity-feed.d.ts +10 -1
- package/dist/hooks/use-activity-feed.d.ts.map +1 -1
- package/dist/hooks/use-activity-feed.js +9 -11
- package/dist/hooks/use-activity-feed.js.map +1 -1
- package/dist/hooks/use-entity.d.ts +4 -3
- package/dist/hooks/use-entity.d.ts.map +1 -1
- package/dist/hooks/use-entity.js +4 -4
- package/dist/hooks/use-entity.js.map +1 -1
- package/dist/hooks/use-manual-actions.d.ts +1 -1
- package/dist/hooks/use-manual-actions.d.ts.map +1 -1
- package/dist/hooks/use-manual-actions.js +5 -5
- package/dist/hooks/use-manual-actions.js.map +1 -1
- package/dist/hooks/use-unsaved-changes-warning.d.ts +2 -0
- package/dist/hooks/use-unsaved-changes-warning.d.ts.map +1 -0
- package/dist/hooks/use-unsaved-changes-warning.js +13 -0
- package/dist/hooks/use-unsaved-changes-warning.js.map +1 -0
- package/dist/hooks/useAuth.d.ts.map +1 -1
- package/dist/hooks/useAuth.js +4 -3
- package/dist/hooks/useAuth.js.map +1 -1
- package/dist/hooks/useChatPanelSync.d.ts.map +1 -1
- package/dist/hooks/useChatPanelSync.js +2 -3
- package/dist/hooks/useChatPanelSync.js.map +1 -1
- package/dist/hooks/useDatastoreSelection.d.ts.map +1 -1
- package/dist/hooks/useDatastoreSelection.js +11 -4
- package/dist/hooks/useDatastoreSelection.js.map +1 -1
- package/dist/hooks/useExecuteAction.d.ts +1 -0
- package/dist/hooks/useExecuteAction.d.ts.map +1 -1
- package/dist/hooks/useExecuteAction.js.map +1 -1
- package/dist/hooks/useLoginRedirect.d.ts +6 -0
- package/dist/hooks/useLoginRedirect.d.ts.map +1 -0
- package/dist/hooks/useLoginRedirect.js +51 -0
- package/dist/hooks/useLoginRedirect.js.map +1 -0
- package/dist/hooks/usePlanLimits.d.ts +18 -0
- package/dist/hooks/usePlanLimits.d.ts.map +1 -0
- package/dist/hooks/usePlanLimits.js +56 -0
- package/dist/hooks/usePlanLimits.js.map +1 -0
- package/dist/ldo-ui.d.ts +1 -1
- package/dist/ldo-ui.d.ts.map +1 -1
- package/dist/ldo-ui.js.map +1 -1
- package/dist/lib/app-tools.d.ts +18 -0
- package/dist/lib/app-tools.d.ts.map +1 -0
- package/dist/lib/app-tools.js +42 -0
- package/dist/lib/app-tools.js.map +1 -0
- package/dist/lib/chat-types.d.ts +3 -0
- package/dist/lib/chat-types.d.ts.map +1 -1
- package/dist/lib/chat-types.js.map +1 -1
- package/dist/lib/datastore-route-table.d.ts +3 -0
- package/dist/lib/datastore-route-table.d.ts.map +1 -1
- package/dist/lib/datastore-route-table.js +6 -0
- package/dist/lib/datastore-route-table.js.map +1 -1
- package/dist/lib/graphql-error.d.ts +2 -0
- package/dist/lib/graphql-error.d.ts.map +1 -0
- package/dist/lib/graphql-error.js +7 -0
- package/dist/lib/graphql-error.js.map +1 -0
- package/dist/lib/update-notice.d.ts +2 -1
- package/dist/lib/update-notice.d.ts.map +1 -1
- package/dist/lib/update-notice.js +8 -2
- package/dist/lib/update-notice.js.map +1 -1
- package/dist/providers/ActiveChatProvider.d.ts +2 -0
- package/dist/providers/ActiveChatProvider.d.ts.map +1 -1
- package/dist/providers/ActiveChatProvider.js +6 -3
- package/dist/providers/ActiveChatProvider.js.map +1 -1
- package/dist/providers/ActiveDatastoreProvider.d.ts +12 -0
- package/dist/providers/ActiveDatastoreProvider.d.ts.map +1 -1
- package/dist/providers/ActiveDatastoreProvider.js +114 -11
- package/dist/providers/ActiveDatastoreProvider.js.map +1 -1
- package/dist/providers/AuthContext.d.ts +1 -0
- package/dist/providers/AuthContext.d.ts.map +1 -1
- package/dist/providers/AuthContext.js.map +1 -1
- package/dist/providers/KnowledgeGraphStateContext.d.ts +2 -2
- package/dist/providers/KnowledgeGraphStateContext.d.ts.map +1 -1
- package/dist/providers/KnowledgeGraphStateProvider.d.ts.map +1 -1
- package/dist/providers/KnowledgeGraphStateProvider.js +8 -49
- package/dist/providers/KnowledgeGraphStateProvider.js.map +1 -1
- package/dist/providers/MantaClientProvider.d.ts.map +1 -1
- package/dist/providers/MantaClientProvider.js +3 -3
- package/dist/providers/MantaClientProvider.js.map +1 -1
- package/dist/providers/index.d.ts +3 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +2 -2
- package/dist/providers/index.js.map +1 -1
- package/dist/routes/activity/detail/ActivityDetailRoute.d.ts.map +1 -1
- package/dist/routes/activity/detail/ActivityDetailRoute.js +1 -3
- package/dist/routes/activity/detail/ActivityDetailRoute.js.map +1 -1
- package/dist/routes/activity/index.d.ts.map +1 -1
- package/dist/routes/activity/index.js +1 -3
- package/dist/routes/activity/index.js.map +1 -1
- package/dist/routes/chat/index.d.ts +2 -21
- package/dist/routes/chat/index.d.ts.map +1 -1
- package/dist/routes/chat/index.js +4 -2
- package/dist/routes/chat/index.js.map +1 -1
- package/dist/routes/data-collection/index.d.ts.map +1 -1
- package/dist/routes/data-collection/index.js +1 -3
- package/dist/routes/data-collection/index.js.map +1 -1
- package/dist/routes/data-explorer/components/DataExplorerLayout.d.ts.map +1 -1
- package/dist/routes/data-explorer/components/DataExplorerLayout.js +1 -3
- package/dist/routes/data-explorer/components/DataExplorerLayout.js.map +1 -1
- package/dist/routes/data-explorer/components/class-detail/UsedByRules.js +2 -2
- package/dist/routes/data-explorer/components/class-detail/UsedByRules.js.map +1 -1
- package/dist/routes/datastores/index.d.ts.map +1 -1
- package/dist/routes/datastores/index.js +2 -2
- package/dist/routes/datastores/index.js.map +1 -1
- package/dist/routes/explain/index.d.ts.map +1 -1
- package/dist/routes/explain/index.js +1 -3
- package/dist/routes/explain/index.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/DashConnectForm.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/DashConnectForm.js +0 -1
- package/dist/routes/integrations/components/connect-forms/DashConnectForm.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/GoogleAdsConnectForm.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/GoogleAdsConnectForm.js +0 -1
- package/dist/routes/integrations/components/connect-forms/GoogleAdsConnectForm.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/GoogleAnalyticsConnectForm.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/GoogleAnalyticsConnectForm.js +0 -1
- package/dist/routes/integrations/components/connect-forms/GoogleAnalyticsConnectForm.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.js +0 -1
- package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/InferalCredentialConnectForm.d.ts +0 -1
- package/dist/routes/integrations/components/connect-forms/InferalCredentialConnectForm.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/InferalCredentialConnectForm.js +3 -2
- package/dist/routes/integrations/components/connect-forms/InferalCredentialConnectForm.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/KlaviyoConnectForm.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/KlaviyoConnectForm.js +0 -1
- package/dist/routes/integrations/components/connect-forms/KlaviyoConnectForm.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/MicrosoftAdsConnectForm.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/MicrosoftAdsConnectForm.js +0 -1
- package/dist/routes/integrations/components/connect-forms/MicrosoftAdsConnectForm.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/OAuthSetupConnectForm.d.ts +0 -1
- package/dist/routes/integrations/components/connect-forms/OAuthSetupConnectForm.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/OAuthSetupConnectForm.js +4 -3
- package/dist/routes/integrations/components/connect-forms/OAuthSetupConnectForm.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/TriplewhaleConnectForm.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/TriplewhaleConnectForm.js +0 -1
- package/dist/routes/integrations/components/connect-forms/TriplewhaleConnectForm.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/WoocommerceConnectForm.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/WoocommerceConnectForm.js +0 -1
- package/dist/routes/integrations/components/connect-forms/WoocommerceConnectForm.js.map +1 -1
- package/dist/routes/integrations/types.d.ts +2 -1
- package/dist/routes/integrations/types.d.ts.map +1 -1
- package/dist/routes/integrations/types.js +16 -0
- package/dist/routes/integrations/types.js.map +1 -1
- package/dist/routes/memories/components/DateValueInput.d.ts +16 -0
- package/dist/routes/memories/components/DateValueInput.d.ts.map +1 -0
- package/dist/routes/memories/components/DateValueInput.js +35 -0
- package/dist/routes/memories/components/DateValueInput.js.map +1 -0
- package/dist/routes/memories/components/EntityValuePicker.d.ts +11 -0
- package/dist/routes/memories/components/EntityValuePicker.d.ts.map +1 -0
- package/dist/routes/memories/components/EntityValuePicker.js +61 -0
- package/dist/routes/memories/components/EntityValuePicker.js.map +1 -0
- package/dist/routes/memories/components/FieldLabel.d.ts +12 -0
- package/dist/routes/memories/components/FieldLabel.d.ts.map +1 -0
- package/dist/routes/memories/components/FieldLabel.js +12 -0
- package/dist/routes/memories/components/FieldLabel.js.map +1 -0
- package/dist/routes/memories/components/ImportanceSlider.d.ts +2 -0
- package/dist/routes/memories/components/ImportanceSlider.d.ts.map +1 -1
- package/dist/routes/memories/components/ImportanceSlider.js +4 -1
- package/dist/routes/memories/components/ImportanceSlider.js.map +1 -1
- package/dist/routes/memories/components/MemoriesFilters.d.ts +2 -2
- package/dist/routes/memories/components/MemoriesFilters.d.ts.map +1 -1
- package/dist/routes/memories/components/MemoriesFilters.js.map +1 -1
- package/dist/routes/memories/components/MemoriesPanel.d.ts.map +1 -1
- package/dist/routes/memories/components/MemoriesPanel.js +4 -0
- package/dist/routes/memories/components/MemoriesPanel.js.map +1 -1
- package/dist/routes/memories/components/MemoriesTabPanel.d.ts +2 -2
- package/dist/routes/memories/components/MemoriesTabPanel.d.ts.map +1 -1
- package/dist/routes/memories/components/MemoryActions.d.ts +2 -0
- package/dist/routes/memories/components/MemoryActions.d.ts.map +1 -1
- package/dist/routes/memories/components/MemoryActions.js +3 -3
- package/dist/routes/memories/components/MemoryActions.js.map +1 -1
- package/dist/routes/memories/components/MemoryFields.d.ts +15 -3
- package/dist/routes/memories/components/MemoryFields.d.ts.map +1 -1
- package/dist/routes/memories/components/MemoryFields.js +34 -5
- package/dist/routes/memories/components/MemoryFields.js.map +1 -1
- package/dist/routes/memories/components/MemoryFormDialog.d.ts +6 -3
- package/dist/routes/memories/components/MemoryFormDialog.d.ts.map +1 -1
- package/dist/routes/memories/components/MemoryFormDialog.js +105 -59
- package/dist/routes/memories/components/MemoryFormDialog.js.map +1 -1
- package/dist/routes/memories/components/MemoryPropertyFields.d.ts +10 -0
- package/dist/routes/memories/components/MemoryPropertyFields.d.ts.map +1 -0
- package/dist/routes/memories/components/MemoryPropertyFields.js +67 -0
- package/dist/routes/memories/components/MemoryPropertyFields.js.map +1 -0
- package/dist/routes/memories/components/RuleDraftDialog.d.ts +7 -0
- package/dist/routes/memories/components/RuleDraftDialog.d.ts.map +1 -0
- package/dist/routes/memories/components/RuleDraftDialog.js +20 -0
- package/dist/routes/memories/components/RuleDraftDialog.js.map +1 -0
- package/dist/routes/memories/components/SchemasTab.d.ts +17 -2
- package/dist/routes/memories/components/SchemasTab.d.ts.map +1 -1
- package/dist/routes/memories/components/SchemasTab.js +146 -28
- package/dist/routes/memories/components/SchemasTab.js.map +1 -1
- package/dist/routes/memories/components/badges.d.ts +7 -0
- package/dist/routes/memories/components/badges.d.ts.map +1 -1
- package/dist/routes/memories/components/badges.js +11 -3
- package/dist/routes/memories/components/badges.js.map +1 -1
- package/dist/routes/memories/hooks/useMemoryColumns.d.ts +4 -2
- package/dist/routes/memories/hooks/useMemoryColumns.d.ts.map +1 -1
- package/dist/routes/memories/hooks/useMemoryColumns.js +31 -15
- package/dist/routes/memories/hooks/useMemoryColumns.js.map +1 -1
- package/dist/routes/memories/index.d.ts +2 -1
- package/dist/routes/memories/index.d.ts.map +1 -1
- package/dist/routes/memories/index.js +72 -30
- package/dist/routes/memories/index.js.map +1 -1
- package/dist/routes/memories/memory-mutation-input.d.ts.map +1 -1
- package/dist/routes/memories/memory-mutation-input.js +5 -2
- package/dist/routes/memories/memory-mutation-input.js.map +1 -1
- package/dist/routes/memories/memory-property-values.d.ts +13 -0
- package/dist/routes/memories/memory-property-values.d.ts.map +1 -0
- package/dist/routes/memories/memory-property-values.js +40 -0
- package/dist/routes/memories/memory-property-values.js.map +1 -0
- package/dist/routes/memories/schemas/AllowedValuesField.d.ts +14 -0
- package/dist/routes/memories/schemas/AllowedValuesField.d.ts.map +1 -0
- package/dist/routes/memories/schemas/AllowedValuesField.js +64 -0
- package/dist/routes/memories/schemas/AllowedValuesField.js.map +1 -0
- package/dist/routes/memories/schemas/MemorySchemaPage.d.ts +127 -0
- package/dist/routes/memories/schemas/MemorySchemaPage.d.ts.map +1 -0
- package/dist/routes/memories/schemas/MemorySchemaPage.js +285 -0
- package/dist/routes/memories/schemas/MemorySchemaPage.js.map +1 -0
- package/dist/routes/memories/schemas/SchemaChangeReviewDialog.d.ts +20 -0
- package/dist/routes/memories/schemas/SchemaChangeReviewDialog.d.ts.map +1 -0
- package/dist/routes/memories/schemas/SchemaChangeReviewDialog.js +54 -0
- package/dist/routes/memories/schemas/SchemaChangeReviewDialog.js.map +1 -0
- package/dist/routes/memories/schemas/SchemaConfirmDialog.d.ts +15 -0
- package/dist/routes/memories/schemas/SchemaConfirmDialog.d.ts.map +1 -0
- package/dist/routes/memories/schemas/SchemaConfirmDialog.js +8 -0
- package/dist/routes/memories/schemas/SchemaConfirmDialog.js.map +1 -0
- package/dist/routes/memories/schemas/SchemaDetailPage.d.ts +15 -0
- package/dist/routes/memories/schemas/SchemaDetailPage.d.ts.map +1 -0
- package/dist/routes/memories/schemas/SchemaDetailPage.js +74 -0
- package/dist/routes/memories/schemas/SchemaDetailPage.js.map +1 -0
- package/dist/routes/memories/schemas/SchemaEditorForm.d.ts +10 -0
- package/dist/routes/memories/schemas/SchemaEditorForm.d.ts.map +1 -0
- package/dist/routes/memories/schemas/SchemaEditorForm.js +242 -0
- package/dist/routes/memories/schemas/SchemaEditorForm.js.map +1 -0
- package/dist/routes/memories/schemas/SchemaTemplatesDialog.d.ts +13 -0
- package/dist/routes/memories/schemas/SchemaTemplatesDialog.d.ts.map +1 -0
- package/dist/routes/memories/schemas/SchemaTemplatesDialog.js +13 -0
- package/dist/routes/memories/schemas/SchemaTemplatesDialog.js.map +1 -0
- package/dist/routes/memories/schemas/ValueTypeSelect.d.ts +12 -0
- package/dist/routes/memories/schemas/ValueTypeSelect.d.ts.map +1 -0
- package/dist/routes/memories/schemas/ValueTypeSelect.js +10 -0
- package/dist/routes/memories/schemas/ValueTypeSelect.js.map +1 -0
- package/dist/routes/memories/schemas/schema-form.d.ts +72 -0
- package/dist/routes/memories/schemas/schema-form.d.ts.map +1 -0
- package/dist/routes/memories/schemas/schema-form.js +279 -0
- package/dist/routes/memories/schemas/schema-form.js.map +1 -0
- package/dist/routes/memories/schemas/schema-impact.d.ts +13 -0
- package/dist/routes/memories/schemas/schema-impact.d.ts.map +1 -0
- package/dist/routes/memories/schemas/schema-impact.js +40 -0
- package/dist/routes/memories/schemas/schema-impact.js.map +1 -0
- package/dist/routes/memories/schemas/schema-route.d.ts +18 -0
- package/dist/routes/memories/schemas/schema-route.d.ts.map +1 -0
- package/dist/routes/memories/schemas/schema-route.js +21 -0
- package/dist/routes/memories/schemas/schema-route.js.map +1 -0
- package/dist/routes/memories/schemas/schema-rule-context.d.ts +17 -0
- package/dist/routes/memories/schemas/schema-rule-context.d.ts.map +1 -0
- package/dist/routes/memories/schemas/schema-rule-context.js +83 -0
- package/dist/routes/memories/schemas/schema-rule-context.js.map +1 -0
- package/dist/routes/memories/schemas/schema-table.d.ts +11 -0
- package/dist/routes/memories/schemas/schema-table.d.ts.map +1 -0
- package/dist/routes/memories/schemas/schema-table.js +34 -0
- package/dist/routes/memories/schemas/schema-table.js.map +1 -0
- package/dist/routes/memories/schemas/useMemorySchemaMutations.d.ts +32 -0
- package/dist/routes/memories/schemas/useMemorySchemaMutations.d.ts.map +1 -0
- package/dist/routes/memories/schemas/useMemorySchemaMutations.js +31 -0
- package/dist/routes/memories/schemas/useMemorySchemaMutations.js.map +1 -0
- package/dist/routes/memories/schemas/useSchemaChangeReview.d.ts +51 -0
- package/dist/routes/memories/schemas/useSchemaChangeReview.d.ts.map +1 -0
- package/dist/routes/memories/schemas/useSchemaChangeReview.js +175 -0
- package/dist/routes/memories/schemas/useSchemaChangeReview.js.map +1 -0
- package/dist/routes/memories/schemas/useSchemaLifecycle.d.ts +46 -0
- package/dist/routes/memories/schemas/useSchemaLifecycle.d.ts.map +1 -0
- package/dist/routes/memories/schemas/useSchemaLifecycle.js +93 -0
- package/dist/routes/memories/schemas/useSchemaLifecycle.js.map +1 -0
- package/dist/routes/memories/schemas/useSchemasTab.d.ts +18 -0
- package/dist/routes/memories/schemas/useSchemasTab.d.ts.map +1 -0
- package/dist/routes/memories/schemas/useSchemasTab.js +92 -0
- package/dist/routes/memories/schemas/useSchemasTab.js.map +1 -0
- package/dist/routes/plans/index.d.ts.map +1 -1
- package/dist/routes/plans/index.js +2 -2
- package/dist/routes/plans/index.js.map +1 -1
- package/dist/routes/rules/components/CreateRuleChatModal.d.ts +7 -1
- package/dist/routes/rules/components/CreateRuleChatModal.d.ts.map +1 -1
- package/dist/routes/rules/components/CreateRuleChatModal.js +9 -4
- package/dist/routes/rules/components/CreateRuleChatModal.js.map +1 -1
- package/dist/routes/rules/components/RuleValueControls.d.ts.map +1 -1
- package/dist/routes/rules/components/RuleValueControls.js +3 -24
- package/dist/routes/rules/components/RuleValueControls.js.map +1 -1
- package/dist/routes/rules/components/rule-value-input.d.ts +11 -0
- package/dist/routes/rules/components/rule-value-input.d.ts.map +1 -0
- package/dist/routes/rules/components/rule-value-input.js +24 -0
- package/dist/routes/rules/components/rule-value-input.js.map +1 -0
- package/dist/routes/rules/components/rules.utils.d.ts +5 -0
- package/dist/routes/rules/components/rules.utils.d.ts.map +1 -1
- package/dist/routes/rules/components/rules.utils.js +18 -3
- package/dist/routes/rules/components/rules.utils.js.map +1 -1
- package/dist/routes/rules/pages.d.ts +1 -1
- package/dist/routes/rules/pages.d.ts.map +1 -1
- package/dist/routes/rules/pages.js +1 -1
- package/dist/routes/rules/pages.js.map +1 -1
- package/dist/shared/graph-derived-queries.d.ts.map +1 -1
- package/dist/shared/graph-derived-queries.js +4 -1
- package/dist/shared/graph-derived-queries.js.map +1 -1
- package/dist/worker/index.d.ts +22 -0
- package/dist/worker/index.d.ts.map +1 -0
- package/dist/worker/index.js +110 -0
- package/dist/worker/index.js.map +1 -0
- package/dist/worker/policy.d.ts +21 -0
- package/dist/worker/policy.d.ts.map +1 -0
- package/dist/worker/policy.js +42 -0
- package/dist/worker/policy.js.map +1 -0
- package/dist/worker/proxy.d.ts +14 -0
- package/dist/worker/proxy.d.ts.map +1 -0
- package/dist/worker/proxy.js +58 -0
- package/dist/worker/proxy.js.map +1 -0
- package/dist/worker/session.d.ts +24 -0
- package/dist/worker/session.d.ts.map +1 -0
- package/dist/worker/session.js +72 -0
- package/dist/worker/session.js.map +1 -0
- package/package.json +52 -7
- package/src/app-subpaths.json +9 -1
- package/src/components/AppErrorBoundary.tsx +14 -11
- package/src/components/app-gate/AppGate.tsx +122 -0
- package/src/components/app-gate/AwaitingDatastoreStatus.tsx +35 -0
- package/src/components/app-gate/EnterDatastoreRoute.tsx +30 -0
- package/src/components/app-gate/ErrorRoute.tsx +43 -0
- package/src/components/app-gate/FailureAlert.tsx +15 -0
- package/src/components/app-gate/NoDatastoreAccess.tsx +26 -0
- package/src/components/app-gate/NotFoundRoute.tsx +20 -0
- package/src/components/app-gate/PendingInvitations.tsx +134 -0
- package/src/components/app-gate/ServiceError.tsx +27 -0
- package/src/components/app-gate/index.ts +2 -0
- package/src/components/app-gate/sdk-route-elements.tsx +46 -0
- package/src/components/app-shell/AppShell.tsx +22 -0
- package/src/components/app-shell/AppShellRoutes.tsx +34 -0
- package/src/components/app-shell/GroupDatastores.tsx +28 -0
- package/src/components/app-shell/GroupRoute.tsx +34 -0
- package/src/components/app-shell/index.ts +2 -0
- package/src/components/authenticated-chat/index.tsx +1 -34
- package/src/components/chat-view/Chat.tsx +9 -3
- package/src/components/chat-view/MessageItem.tsx +10 -2
- package/src/components/chat-view/tool-part-rendering.ts +10 -1
- package/src/components/chip/index.tsx +8 -1
- package/src/components/embedded-chat/index.tsx +2 -1
- package/src/components/input/input-date-time.tsx +10 -3
- package/src/components/input/input-date.tsx +93 -21
- package/src/components/input/input-time.tsx +59 -26
- package/src/components/layouts/RouteLayout.tsx +11 -50
- package/src/components/layouts/Sidebar.tsx +21 -23
- package/src/components/plan-limits/PlanLimitsDialog.tsx +331 -0
- package/src/components/plan-limits/index.tsx +3 -0
- package/src/components/plan-limits/plan-limits-client.ts +71 -0
- package/src/components/plan-limits/plan-limits-model.ts +180 -0
- package/src/components/plan-limits/plan-limits-save.ts +68 -0
- package/src/components/planning/PlanLimitsAction.tsx +44 -0
- package/src/components/slider/index.tsx +2 -1
- package/src/datastore-picker/datastore-picker-rows.ts +36 -20
- package/src/hooks/use-action-plans-list.ts +20 -12
- package/src/hooks/use-activity-feed.ts +30 -14
- package/src/hooks/use-entity.ts +11 -6
- package/src/hooks/use-manual-actions.ts +11 -6
- package/src/hooks/use-unsaved-changes-warning.ts +12 -0
- package/src/hooks/useAuth.ts +5 -3
- package/src/hooks/useChatPanelSync.ts +2 -3
- package/src/hooks/useDatastoreSelection.ts +10 -4
- package/src/hooks/useExecuteAction.ts +2 -0
- package/src/hooks/useLoginRedirect.ts +66 -0
- package/src/hooks/usePlanLimits.ts +97 -0
- package/src/ldo-ui.ts +1 -0
- package/src/lib/app-tools.ts +63 -0
- package/src/lib/chat-types.ts +5 -0
- package/src/lib/datastore-route-table.ts +9 -0
- package/src/lib/graphql-error.ts +7 -0
- package/src/lib/update-notice.ts +12 -2
- package/src/providers/ActiveChatProvider.tsx +8 -3
- package/src/providers/ActiveDatastoreProvider.tsx +179 -9
- package/src/providers/AuthContext.ts +1 -0
- package/src/providers/KnowledgeGraphStateContext.ts +2 -2
- package/src/providers/KnowledgeGraphStateProvider.tsx +13 -65
- package/src/providers/MantaClientProvider.tsx +8 -3
- package/src/providers/index.tsx +7 -4
- package/src/routes/activity/detail/ActivityDetailRoute.tsx +1 -10
- package/src/routes/activity/index.tsx +1 -10
- package/src/routes/chat/index.tsx +11 -47
- package/src/routes/data-collection/index.tsx +1 -11
- package/src/routes/data-explorer/components/DataExplorerLayout.tsx +1 -11
- package/src/routes/data-explorer/components/class-detail/UsedByRules.tsx +2 -2
- package/src/routes/datastores/index.tsx +3 -9
- package/src/routes/explain/index.tsx +1 -11
- package/src/routes/integrations/components/connect-forms/DashConnectForm.tsx +0 -1
- package/src/routes/integrations/components/connect-forms/GoogleAdsConnectForm.tsx +0 -1
- package/src/routes/integrations/components/connect-forms/GoogleAnalyticsConnectForm.tsx +0 -1
- package/src/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.tsx +0 -1
- package/src/routes/integrations/components/connect-forms/InferalCredentialConnectForm.tsx +5 -3
- package/src/routes/integrations/components/connect-forms/KlaviyoConnectForm.tsx +0 -1
- package/src/routes/integrations/components/connect-forms/MicrosoftAdsConnectForm.tsx +0 -1
- package/src/routes/integrations/components/connect-forms/OAuthSetupConnectForm.tsx +7 -7
- package/src/routes/integrations/components/connect-forms/TriplewhaleConnectForm.tsx +0 -1
- package/src/routes/integrations/components/connect-forms/WoocommerceConnectForm.tsx +0 -1
- package/src/routes/integrations/types.ts +22 -6
- package/src/routes/memories/components/DateValueInput.tsx +72 -0
- package/src/routes/memories/components/EntityValuePicker.tsx +132 -0
- package/src/routes/memories/components/FieldLabel.tsx +49 -0
- package/src/routes/memories/components/ImportanceSlider.tsx +5 -1
- package/src/routes/memories/components/MemoriesFilters.tsx +2 -2
- package/src/routes/memories/components/MemoriesPanel.tsx +7 -3
- package/src/routes/memories/components/MemoriesTabPanel.tsx +2 -2
- package/src/routes/memories/components/MemoryActions.tsx +26 -2
- package/src/routes/memories/components/MemoryFields.tsx +75 -12
- package/src/routes/memories/components/MemoryFormDialog.tsx +305 -199
- package/src/routes/memories/components/MemoryPropertyFields.tsx +288 -0
- package/src/routes/memories/components/RuleDraftDialog.tsx +35 -0
- package/src/routes/memories/components/SchemasTab.tsx +481 -118
- package/src/routes/memories/components/badges.tsx +16 -4
- package/src/routes/memories/hooks/useMemoryColumns.tsx +69 -35
- package/src/routes/memories/index.tsx +125 -51
- package/src/routes/memories/memory-mutation-input.ts +5 -2
- package/src/routes/memories/memory-property-values.ts +83 -0
- package/src/routes/memories/schemas/AllowedValuesField.tsx +188 -0
- package/src/routes/memories/schemas/MemorySchemaPage.tsx +476 -0
- package/src/routes/memories/schemas/SchemaChangeReviewDialog.tsx +290 -0
- package/src/routes/memories/schemas/SchemaConfirmDialog.tsx +62 -0
- package/src/routes/memories/schemas/SchemaDetailPage.tsx +373 -0
- package/src/routes/memories/schemas/SchemaEditorForm.tsx +990 -0
- package/src/routes/memories/schemas/SchemaTemplatesDialog.tsx +81 -0
- package/src/routes/memories/schemas/ValueTypeSelect.tsx +37 -0
- package/src/routes/memories/schemas/schema-form.ts +360 -0
- package/src/routes/memories/schemas/schema-impact.ts +66 -0
- package/src/routes/memories/schemas/schema-route.ts +30 -0
- package/src/routes/memories/schemas/schema-rule-context.ts +103 -0
- package/src/routes/memories/schemas/schema-table.ts +54 -0
- package/src/routes/memories/schemas/useMemorySchemaMutations.ts +49 -0
- package/src/routes/memories/schemas/useSchemaChangeReview.ts +238 -0
- package/src/routes/memories/schemas/useSchemaLifecycle.tsx +151 -0
- package/src/routes/memories/schemas/useSchemasTab.ts +119 -0
- package/src/routes/plans/index.tsx +3 -14
- package/src/routes/rules/components/CreateRuleChatModal.tsx +46 -22
- package/src/routes/rules/components/RuleValueControls.tsx +3 -35
- package/src/routes/rules/components/rule-value-input.ts +34 -0
- package/src/routes/rules/components/rules.utils.ts +25 -3
- package/src/routes/rules/pages.ts +5 -1
- package/src/shared/graph-derived-queries.ts +6 -0
- package/src/themes/manta-dark.css +4 -0
- package/src/worker/index.ts +175 -0
- package/src/worker/policy.ts +62 -0
- package/src/worker/proxy.ts +101 -0
- package/src/worker/session.ts +111 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { isPresent } from "@manta-eu/lib/present";
|
|
2
|
+
import { useRef, useState, type KeyboardEvent } from "react";
|
|
3
|
+
import { InfoTip } from "../components/FieldLabel";
|
|
4
|
+
import { memorySchemaOptionLimit, newFormId, type SchemaFormErrors, type SchemaOptionForm } from "./schema-form";
|
|
5
|
+
import { Chip } from "#components/chip/index";
|
|
6
|
+
import { Input } from "#components/input/index";
|
|
7
|
+
import { Popover, PopoverContent, PopoverTrigger } from "#components/popover/index";
|
|
8
|
+
import { cn } from "#lib/utils";
|
|
9
|
+
|
|
10
|
+
// Escape first clears a value still being typed, so the sheet around the field must not close on that same press.
|
|
11
|
+
export function escapeClearsTypedValue(event: globalThis.KeyboardEvent): boolean {
|
|
12
|
+
const { target } = event;
|
|
13
|
+
return target instanceof HTMLInputElement && target.hasAttribute("data-clears-on-escape") && isPresent(target.value);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function addOption(options: SchemaOptionForm[], raw: string): SchemaOptionForm[] {
|
|
17
|
+
const value = raw.trim();
|
|
18
|
+
if (!isPresent(value) || options.some((option) => option.value.trim() === value)) return options;
|
|
19
|
+
if (options.length >= memorySchemaOptionLimit) return options;
|
|
20
|
+
return [...options, { id: newFormId(), value, label: "", description: "" }];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
type OptionTagProps = {
|
|
24
|
+
option: SchemaOptionForm;
|
|
25
|
+
field: string;
|
|
26
|
+
errors: SchemaFormErrors;
|
|
27
|
+
disabled?: boolean;
|
|
28
|
+
onChange: (option: SchemaOptionForm) => void;
|
|
29
|
+
onRemove: () => void;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
function OptionTag(props: OptionTagProps) {
|
|
33
|
+
const { option, field, errors, disabled, onChange, onRemove } = props;
|
|
34
|
+
const invalid = [".value", ".label", ".description"].some((part) => errors.has(`${field}${part}`));
|
|
35
|
+
const shown = isPresent(option.label.trim()) ? option.label : option.value;
|
|
36
|
+
const showsStored = isPresent(option.label.trim()) && option.label.trim() !== option.value.trim();
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
<Chip
|
|
40
|
+
className={cn("bg-secondary px-2 py-1", invalid && "bg-error")}
|
|
41
|
+
removeLabel={`allowed value ${option.value}`}
|
|
42
|
+
disabled={disabled}
|
|
43
|
+
onRemove={onRemove}
|
|
44
|
+
label={
|
|
45
|
+
<Popover>
|
|
46
|
+
<PopoverTrigger asChild>
|
|
47
|
+
<button
|
|
48
|
+
type="button"
|
|
49
|
+
disabled={disabled}
|
|
50
|
+
aria-label={`Edit allowed value ${option.value}`}
|
|
51
|
+
className={cn(
|
|
52
|
+
"inline-flex max-w-full items-baseline gap-1.5 rounded-sm text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-active-border/50",
|
|
53
|
+
invalid && "text-error-foreground",
|
|
54
|
+
)}
|
|
55
|
+
>
|
|
56
|
+
<span className="truncate">{shown || "(empty)"}</span>
|
|
57
|
+
{showsStored && <span className="truncate font-mono text-muted-foreground">{option.value}</span>}
|
|
58
|
+
</button>
|
|
59
|
+
</PopoverTrigger>
|
|
60
|
+
<PopoverContent
|
|
61
|
+
align="start"
|
|
62
|
+
className="flex w-72 flex-col gap-3 p-3"
|
|
63
|
+
onOpenAutoFocus={(event) => {
|
|
64
|
+
event.preventDefault();
|
|
65
|
+
document.getElementById(`${field}-value`)?.focus();
|
|
66
|
+
}}
|
|
67
|
+
>
|
|
68
|
+
<Input
|
|
69
|
+
id={`${field}-value`}
|
|
70
|
+
size="sm"
|
|
71
|
+
label="Stored value"
|
|
72
|
+
description="What the agent writes and rules match on."
|
|
73
|
+
descriptionInLabelTooltip
|
|
74
|
+
value={option.value}
|
|
75
|
+
disabled={disabled}
|
|
76
|
+
error={errors.get(`${field}.value`)}
|
|
77
|
+
onChange={(e) => onChange({ ...option, value: e.target.value })}
|
|
78
|
+
/>
|
|
79
|
+
<Input
|
|
80
|
+
size="sm"
|
|
81
|
+
label="Shown as"
|
|
82
|
+
placeholder="Same as stored value"
|
|
83
|
+
value={option.label}
|
|
84
|
+
disabled={disabled}
|
|
85
|
+
error={errors.get(`${field}.label`)}
|
|
86
|
+
onChange={(e) => onChange({ ...option, label: e.target.value })}
|
|
87
|
+
/>
|
|
88
|
+
<Input
|
|
89
|
+
size="sm"
|
|
90
|
+
label="Description"
|
|
91
|
+
placeholder="What it means (optional)"
|
|
92
|
+
value={option.description}
|
|
93
|
+
disabled={disabled}
|
|
94
|
+
error={errors.get(`${field}.description`)}
|
|
95
|
+
onChange={(e) => onChange({ ...option, description: e.target.value })}
|
|
96
|
+
/>
|
|
97
|
+
</PopoverContent>
|
|
98
|
+
</Popover>
|
|
99
|
+
}
|
|
100
|
+
/>
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export type AllowedValuesFieldProps = {
|
|
105
|
+
id: string;
|
|
106
|
+
hint: string;
|
|
107
|
+
options: SchemaOptionForm[];
|
|
108
|
+
prefix: string;
|
|
109
|
+
errors: SchemaFormErrors;
|
|
110
|
+
disabled?: boolean;
|
|
111
|
+
onChange: (options: SchemaOptionForm[]) => void;
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
export function AllowedValuesField(props: AllowedValuesFieldProps) {
|
|
115
|
+
const { id, hint, options, prefix, errors, disabled, onChange } = props;
|
|
116
|
+
const inputRef = useRef<HTMLInputElement>(null);
|
|
117
|
+
const [pending, setPending] = useState("");
|
|
118
|
+
const listError = errors.get(`${prefix}.options`);
|
|
119
|
+
const invalid = isPresent(listError) || [...errors.keys()].some((key) => key.startsWith(`${prefix}.options.`));
|
|
120
|
+
const atLimit = options.length >= memorySchemaOptionLimit;
|
|
121
|
+
|
|
122
|
+
function commit() {
|
|
123
|
+
const next = addOption(options, pending);
|
|
124
|
+
if (next !== options) onChange(next);
|
|
125
|
+
setPending("");
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function onKeyDown(event: KeyboardEvent<HTMLInputElement>) {
|
|
129
|
+
if (event.key === "Enter" || event.key === ",") {
|
|
130
|
+
event.preventDefault();
|
|
131
|
+
commit();
|
|
132
|
+
} else if (event.key === "Escape") {
|
|
133
|
+
event.preventDefault();
|
|
134
|
+
setPending("");
|
|
135
|
+
} else if (event.key === "Backspace" && !isPresent(pending) && isPresent(options)) {
|
|
136
|
+
onChange(options.slice(0, -1));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return (
|
|
141
|
+
<div className="flex flex-col gap-1.5">
|
|
142
|
+
<div className="flex items-end gap-1">
|
|
143
|
+
<label htmlFor={id} className="typography-small">
|
|
144
|
+
Allowed values
|
|
145
|
+
</label>
|
|
146
|
+
<InfoTip label="Allowed values" hint={hint} />
|
|
147
|
+
</div>
|
|
148
|
+
<div
|
|
149
|
+
onClick={(event) => {
|
|
150
|
+
if (event.target === event.currentTarget) inputRef.current?.focus();
|
|
151
|
+
}}
|
|
152
|
+
className={cn(
|
|
153
|
+
"flex w-full flex-wrap items-center gap-1.5 rounded-md-v4 border bg-input px-3 py-1.5 min-h-10 typography-caption text-default-foreground",
|
|
154
|
+
"focus-within:border-active-border focus-within:outline focus-within:outline-1 focus-within:outline-active-border",
|
|
155
|
+
invalid ? "border-error-border" : "border-input-border",
|
|
156
|
+
disabled && "pointer-events-none opacity-50",
|
|
157
|
+
)}
|
|
158
|
+
>
|
|
159
|
+
{options.map((option, index) => (
|
|
160
|
+
<OptionTag
|
|
161
|
+
key={option.id}
|
|
162
|
+
option={option}
|
|
163
|
+
field={`${prefix}.options.${index}`}
|
|
164
|
+
errors={errors}
|
|
165
|
+
disabled={disabled}
|
|
166
|
+
onChange={(next) => onChange(options.map((current, i) => (i === index ? next : current)))}
|
|
167
|
+
onRemove={() => onChange(options.filter((_, i) => i !== index))}
|
|
168
|
+
/>
|
|
169
|
+
))}
|
|
170
|
+
<input
|
|
171
|
+
ref={inputRef}
|
|
172
|
+
id={id}
|
|
173
|
+
type="text"
|
|
174
|
+
value={pending}
|
|
175
|
+
disabled={disabled || atLimit}
|
|
176
|
+
aria-invalid={invalid ? true : undefined}
|
|
177
|
+
data-clears-on-escape=""
|
|
178
|
+
placeholder={isPresent(options) ? "Add a value" : "Any text. Type a value and press Enter to limit it"}
|
|
179
|
+
onChange={(event) => setPending(event.currentTarget.value)}
|
|
180
|
+
onKeyDown={onKeyDown}
|
|
181
|
+
onBlur={commit}
|
|
182
|
+
className="min-w-24 flex-1 bg-transparent outline-none placeholder:text-placeholder-foreground"
|
|
183
|
+
/>
|
|
184
|
+
</div>
|
|
185
|
+
{listError && <p className="typography-small text-error-foreground">{listError}</p>}
|
|
186
|
+
</div>
|
|
187
|
+
);
|
|
188
|
+
}
|
|
@@ -0,0 +1,476 @@
|
|
|
1
|
+
import {
|
|
2
|
+
GQLMemorySchemaMutationStatus,
|
|
3
|
+
GQLMemorySchemaStatus,
|
|
4
|
+
GQLMemorySchemaTemplateStatus,
|
|
5
|
+
useMemorySchemaUsageQuery,
|
|
6
|
+
type GQLMemorySchemaFieldsFragment,
|
|
7
|
+
} from "@manta-eu/client";
|
|
8
|
+
import { isPresent } from "@manta-eu/lib/present";
|
|
9
|
+
import { Archive, ArchiveRestore, Brain, FileCode2, Pencil, RotateCcw, Save, Trash2 } from "lucide-react";
|
|
10
|
+
import { useState } from "react";
|
|
11
|
+
import { Link, useNavigate } from "react-router";
|
|
12
|
+
import { toast } from "sonner";
|
|
13
|
+
import { RuleDraftDialog } from "../components/RuleDraftDialog";
|
|
14
|
+
import {
|
|
15
|
+
emptySchemaForm,
|
|
16
|
+
localSchemaFormErrors,
|
|
17
|
+
schemaDefinitionInput,
|
|
18
|
+
schemaFormErrors,
|
|
19
|
+
schemaFormFromSchema,
|
|
20
|
+
type SchemaForm,
|
|
21
|
+
type SchemaFormErrors,
|
|
22
|
+
} from "./schema-form";
|
|
23
|
+
import {
|
|
24
|
+
findMemorySchemaByRouteName,
|
|
25
|
+
memorySchemaEditPath,
|
|
26
|
+
memorySchemaPath,
|
|
27
|
+
memorySchemasPath,
|
|
28
|
+
type MemorySchemaView,
|
|
29
|
+
} from "./schema-route";
|
|
30
|
+
import { computedPropertyRuleDraft, schemaRuleDraft, type RuleDraftRequest } from "./schema-rule-context";
|
|
31
|
+
import { SchemaChangeReviewDialog } from "./SchemaChangeReviewDialog";
|
|
32
|
+
import { SchemaConfirmDialog } from "./SchemaConfirmDialog";
|
|
33
|
+
import { SchemaDetailPage } from "./SchemaDetailPage";
|
|
34
|
+
import { SchemaEditorForm } from "./SchemaEditorForm";
|
|
35
|
+
import { useMemorySchemaMutations, type MemorySchemaMutations } from "./useMemorySchemaMutations";
|
|
36
|
+
import { reportFailure, useSchemaChangeReview, type SchemaChangeReview } from "./useSchemaChangeReview";
|
|
37
|
+
import { archiveBlockedReason, deleteBlockedReason, useSchemaLifecycle } from "./useSchemaLifecycle";
|
|
38
|
+
import { Banner } from "#components/banner/index";
|
|
39
|
+
import { Breadcrumbs } from "#components/breadcrumbs/index";
|
|
40
|
+
import { PageBody, PageHeader, PageHeaderActions, type PageHeaderAction } from "#components/layouts/page/index";
|
|
41
|
+
import { useUnsavedChangesWarning } from "#hooks/use-unsaved-changes-warning";
|
|
42
|
+
import { useMantaClient, useNavigationBlocker } from "#providers/index";
|
|
43
|
+
|
|
44
|
+
type SchemaBreadcrumbsProps = { label?: string; labelHref?: string; current?: string };
|
|
45
|
+
|
|
46
|
+
function SchemaBreadcrumbs(props: SchemaBreadcrumbsProps) {
|
|
47
|
+
const { label, labelHref, current } = props;
|
|
48
|
+
return (
|
|
49
|
+
<Breadcrumbs
|
|
50
|
+
aria-label="Breadcrumb"
|
|
51
|
+
renderLink={({ href, className, children }) => (
|
|
52
|
+
<Link to={href} className={className}>
|
|
53
|
+
{children}
|
|
54
|
+
</Link>
|
|
55
|
+
)}
|
|
56
|
+
items={[
|
|
57
|
+
{ label: "Memories", href: "/memories" },
|
|
58
|
+
{ label: "Schemas", href: memorySchemasPath },
|
|
59
|
+
...(label ? [{ label, href: current ? labelHref : undefined }] : []),
|
|
60
|
+
...(current ? [{ label: current }] : []),
|
|
61
|
+
]}
|
|
62
|
+
/>
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
type ReviewDialogProps = { review: SchemaChangeReview; onClearValues?: (path: string) => void };
|
|
67
|
+
|
|
68
|
+
function ReviewDialog(props: ReviewDialogProps) {
|
|
69
|
+
const { review, onClearValues } = props;
|
|
70
|
+
const { state } = review;
|
|
71
|
+
return (
|
|
72
|
+
<SchemaChangeReviewDialog
|
|
73
|
+
open={state !== null}
|
|
74
|
+
title={state?.title ?? ""}
|
|
75
|
+
impact={state?.impact ?? null}
|
|
76
|
+
proposed={state?.proposed ?? null}
|
|
77
|
+
remapChoices={state?.choices ?? {}}
|
|
78
|
+
clearUnconvertible={state?.clearUnconvertible ?? false}
|
|
79
|
+
isChecking={review.isChecking}
|
|
80
|
+
isApplying={review.isApplying}
|
|
81
|
+
clearingPath={review.clearingPath}
|
|
82
|
+
onRemapChange={review.setRemapChoice}
|
|
83
|
+
onClearUnconvertibleChange={review.setClearUnconvertible}
|
|
84
|
+
onClearValues={onClearValues}
|
|
85
|
+
onApply={() => void review.apply()}
|
|
86
|
+
onCancel={review.close}
|
|
87
|
+
/>
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// A clear bumps the schema's revision, so the cached schema is refetched before any later action sends it.
|
|
92
|
+
export function clearRun(mutations: MemorySchemaMutations, iri: string) {
|
|
93
|
+
return async (path: string, expectedRevision: number) => {
|
|
94
|
+
const result = (await mutations.clearValues.mutateAsync({ input: { iri, expectedRevision, path } }))
|
|
95
|
+
.clearMemorySchemaPropertyValues;
|
|
96
|
+
if (result.status === GQLMemorySchemaMutationStatus.Ok) await mutations.refresh();
|
|
97
|
+
return result;
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
type SchemaEditorViewProps = {
|
|
102
|
+
schema: GQLMemorySchemaFieldsFragment | null;
|
|
103
|
+
isNew: boolean;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
function SchemaEditorView(props: SchemaEditorViewProps) {
|
|
107
|
+
const { schema, isNew } = props;
|
|
108
|
+
const navigate = useNavigate();
|
|
109
|
+
const mutations = useMemorySchemaMutations();
|
|
110
|
+
const review = useSchemaChangeReview();
|
|
111
|
+
const [loadedForm] = useState<SchemaForm>(() => (schema ? schemaFormFromSchema(schema) : emptySchemaForm()));
|
|
112
|
+
const [form, setForm] = useState<SchemaForm>(loadedForm);
|
|
113
|
+
const [baseRevision, setBaseRevision] = useState(schema?.revision ?? 0);
|
|
114
|
+
const [errors, setErrors] = useState<SchemaFormErrors>(new Map());
|
|
115
|
+
const [notice, setNotice] = useState<string | null>(null);
|
|
116
|
+
const isSaving = mutations.create.isPending || review.isChecking || review.isApplying;
|
|
117
|
+
const isDirty = JSON.stringify(form) !== JSON.stringify(loadedForm);
|
|
118
|
+
useUnsavedChangesWarning(isDirty && !isSaving);
|
|
119
|
+
const blocker = useNavigationBlocker(isDirty && !isSaving);
|
|
120
|
+
|
|
121
|
+
function change(next: SchemaForm) {
|
|
122
|
+
setForm(next);
|
|
123
|
+
if (errors.size > 0) setErrors(new Map());
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
async function create() {
|
|
127
|
+
try {
|
|
128
|
+
const result = (
|
|
129
|
+
await mutations.create.mutateAsync({ input: { definition: schemaDefinitionInput(form, { isNew }) } })
|
|
130
|
+
).createMemorySchema;
|
|
131
|
+
if (result.status === GQLMemorySchemaMutationStatus.Invalid) {
|
|
132
|
+
setErrors(schemaFormErrors(result.validationErrors));
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (result.status !== GQLMemorySchemaMutationStatus.Ok || !result.schema) {
|
|
136
|
+
setNotice(result.error ?? "The schema could not be created");
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
toast.success(`Created ${result.schema.label}`);
|
|
140
|
+
await mutations.refresh();
|
|
141
|
+
const created = result.schema;
|
|
142
|
+
blocker.bypass(() => void navigate(memorySchemaPath(created.iri)));
|
|
143
|
+
} catch (error) {
|
|
144
|
+
reportFailure(error, "Failed to create the schema");
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
function update(current: GQLMemorySchemaFieldsFragment) {
|
|
149
|
+
const definition = schemaDefinitionInput(form, { isNew: false });
|
|
150
|
+
void review.start({
|
|
151
|
+
title: "Review changes",
|
|
152
|
+
revision: baseRevision,
|
|
153
|
+
run: async (request) =>
|
|
154
|
+
(
|
|
155
|
+
await mutations.update.mutateAsync({
|
|
156
|
+
input: {
|
|
157
|
+
iri: current.iri,
|
|
158
|
+
expectedRevision: request.expectedRevision,
|
|
159
|
+
definition,
|
|
160
|
+
optionRemaps: request.optionRemaps,
|
|
161
|
+
clearUnconvertibleValues: request.clearUnconvertibleValues,
|
|
162
|
+
dryRun: request.dryRun,
|
|
163
|
+
},
|
|
164
|
+
})
|
|
165
|
+
).updateMemorySchema,
|
|
166
|
+
callbacks: {
|
|
167
|
+
onApplied: async () => {
|
|
168
|
+
toast.success(`Saved ${form.label.trim() || current.label}`);
|
|
169
|
+
await mutations.refresh();
|
|
170
|
+
blocker.bypass(() => void navigate(memorySchemaPath(current.iri)));
|
|
171
|
+
},
|
|
172
|
+
onInvalid: (result) => setErrors(schemaFormErrors(result.validationErrors)),
|
|
173
|
+
onStale: async () => {
|
|
174
|
+
setNotice("Someone changed this schema since you opened it. Reload the page to edit the latest version.");
|
|
175
|
+
await mutations.refresh();
|
|
176
|
+
},
|
|
177
|
+
onRevisionChange: setBaseRevision,
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
function save() {
|
|
183
|
+
setNotice(null);
|
|
184
|
+
const local = localSchemaFormErrors(form);
|
|
185
|
+
if (local.size > 0) {
|
|
186
|
+
setErrors(local);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
if (isNew) void create();
|
|
190
|
+
else if (schema) update(schema);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
const cancelPath = schema ? memorySchemaPath(schema.iri) : memorySchemasPath;
|
|
194
|
+
const headerActions: PageHeaderAction[] = [
|
|
195
|
+
{
|
|
196
|
+
key: "cancel",
|
|
197
|
+
label: "Cancel",
|
|
198
|
+
variant: "tertiary",
|
|
199
|
+
disabled: isSaving,
|
|
200
|
+
onClick: () => void navigate(cancelPath),
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
key: "save",
|
|
204
|
+
label: isSaving ? "Saving…" : isNew ? "Create schema" : "Save changes",
|
|
205
|
+
icon: Save,
|
|
206
|
+
disabled: isSaving,
|
|
207
|
+
onClick: save,
|
|
208
|
+
},
|
|
209
|
+
];
|
|
210
|
+
|
|
211
|
+
return (
|
|
212
|
+
<>
|
|
213
|
+
<PageHeader
|
|
214
|
+
title={
|
|
215
|
+
<SchemaBreadcrumbs
|
|
216
|
+
label={isNew ? "New schema" : schema?.label}
|
|
217
|
+
labelHref={schema ? memorySchemaPath(schema.iri) : undefined}
|
|
218
|
+
current={isNew ? undefined : "Edit"}
|
|
219
|
+
/>
|
|
220
|
+
}
|
|
221
|
+
icon={Brain}
|
|
222
|
+
actions={<PageHeaderActions actions={headerActions} />}
|
|
223
|
+
/>
|
|
224
|
+
<PageBody>
|
|
225
|
+
<form
|
|
226
|
+
className="mx-auto flex w-full max-w-4xl flex-col gap-4 pb-8"
|
|
227
|
+
onSubmit={(event) => {
|
|
228
|
+
event.preventDefault();
|
|
229
|
+
save();
|
|
230
|
+
}}
|
|
231
|
+
>
|
|
232
|
+
{notice && <Banner label={notice} />}
|
|
233
|
+
{errors.size > 0 && <Banner label="Some fields need attention." />}
|
|
234
|
+
<SchemaEditorForm form={form} errors={errors} isNew={isNew} disabled={isSaving} onChange={change} />
|
|
235
|
+
</form>
|
|
236
|
+
</PageBody>
|
|
237
|
+
{schema && (
|
|
238
|
+
<ReviewDialog
|
|
239
|
+
review={review}
|
|
240
|
+
onClearValues={(path) => void review.clearValues(path, clearRun(mutations, schema.iri))}
|
|
241
|
+
/>
|
|
242
|
+
)}
|
|
243
|
+
<SchemaConfirmDialog
|
|
244
|
+
open={blocker.blocked}
|
|
245
|
+
title="Discard changes?"
|
|
246
|
+
description={
|
|
247
|
+
isNew ? "This schema has not been created yet." : "Your changes to this schema have not been saved."
|
|
248
|
+
}
|
|
249
|
+
confirmLabel="Discard"
|
|
250
|
+
pendingLabel="Discarding…"
|
|
251
|
+
destructive
|
|
252
|
+
isPending={false}
|
|
253
|
+
onConfirm={blocker.proceed}
|
|
254
|
+
onCancel={blocker.reset}
|
|
255
|
+
/>
|
|
256
|
+
</>
|
|
257
|
+
);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
type SchemaDetailViewProps = {
|
|
261
|
+
schema: GQLMemorySchemaFieldsFragment | null;
|
|
262
|
+
isLoading: boolean;
|
|
263
|
+
errorMessage: string | null;
|
|
264
|
+
canManage: boolean;
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
function SchemaDetailView(props: SchemaDetailViewProps) {
|
|
268
|
+
const { schema, isLoading, errorMessage, canManage } = props;
|
|
269
|
+
const navigate = useNavigate();
|
|
270
|
+
const { mantaClient } = useMantaClient();
|
|
271
|
+
const lifecycle = useSchemaLifecycle({ onDeleted: () => void navigate(memorySchemasPath) });
|
|
272
|
+
const { mutations, runStatus } = lifecycle;
|
|
273
|
+
const review = useSchemaChangeReview();
|
|
274
|
+
const [ruleDraft, setRuleDraft] = useState<RuleDraftRequest | null>(null);
|
|
275
|
+
const { data: usageData } = useMemorySchemaUsageQuery(
|
|
276
|
+
mantaClient,
|
|
277
|
+
{ iri: schema?.iri ?? "" },
|
|
278
|
+
{ enabled: canManage && schema !== null },
|
|
279
|
+
);
|
|
280
|
+
const usage = usageData?.memorySchemaUsage.usage ?? null;
|
|
281
|
+
const isBusy =
|
|
282
|
+
lifecycle.isPending ||
|
|
283
|
+
mutations.dismissTemplateUpdate.isPending ||
|
|
284
|
+
mutations.clearValues.isPending ||
|
|
285
|
+
review.isChecking ||
|
|
286
|
+
review.isApplying;
|
|
287
|
+
|
|
288
|
+
function resetToTemplate(current: GQLMemorySchemaFieldsFragment, copy: { title: string; success: string }) {
|
|
289
|
+
void review.start({
|
|
290
|
+
title: copy.title,
|
|
291
|
+
revision: current.revision,
|
|
292
|
+
alwaysReview: true,
|
|
293
|
+
run: async (request) =>
|
|
294
|
+
(
|
|
295
|
+
await mutations.resetToTemplate.mutateAsync({
|
|
296
|
+
input: {
|
|
297
|
+
iri: current.iri,
|
|
298
|
+
expectedRevision: request.expectedRevision,
|
|
299
|
+
optionRemaps: request.optionRemaps,
|
|
300
|
+
clearUnconvertibleValues: request.clearUnconvertibleValues,
|
|
301
|
+
dryRun: request.dryRun,
|
|
302
|
+
},
|
|
303
|
+
})
|
|
304
|
+
).resetMemorySchemaToTemplate,
|
|
305
|
+
callbacks: {
|
|
306
|
+
onApplied: async () => {
|
|
307
|
+
toast.success(copy.success);
|
|
308
|
+
await mutations.refresh();
|
|
309
|
+
},
|
|
310
|
+
onStale: mutations.refresh,
|
|
311
|
+
},
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
const archived = schema?.status === GQLMemorySchemaStatus.Archived;
|
|
316
|
+
const ruleCount = usage ? new Set(usage.rules.map((reference) => reference.ruleIri)).size : null;
|
|
317
|
+
const archiveBlocked = archiveBlockedReason(ruleCount);
|
|
318
|
+
const deleteBlocked = deleteBlockedReason(schema?.memoryCount, ruleCount);
|
|
319
|
+
const headerActions: PageHeaderAction[] =
|
|
320
|
+
canManage && schema
|
|
321
|
+
? [
|
|
322
|
+
{
|
|
323
|
+
key: "edit",
|
|
324
|
+
label: "Edit",
|
|
325
|
+
icon: Pencil,
|
|
326
|
+
variant: "secondary",
|
|
327
|
+
disabled: isBusy,
|
|
328
|
+
onClick: () => void navigate(memorySchemaEditPath(schema.iri)),
|
|
329
|
+
},
|
|
330
|
+
...(archived
|
|
331
|
+
? []
|
|
332
|
+
: [
|
|
333
|
+
{
|
|
334
|
+
key: "write-rule",
|
|
335
|
+
label: "Write a rule",
|
|
336
|
+
icon: FileCode2,
|
|
337
|
+
variant: "secondary" as const,
|
|
338
|
+
disabled: isBusy,
|
|
339
|
+
hint: "Describe a rule over these memories and Manta drafts it for your review",
|
|
340
|
+
onClick: () => setRuleDraft(schemaRuleDraft(schema)),
|
|
341
|
+
},
|
|
342
|
+
]),
|
|
343
|
+
...(schema.customized && schema.templateStatus === GQLMemorySchemaTemplateStatus.Current
|
|
344
|
+
? [
|
|
345
|
+
{
|
|
346
|
+
key: "reset",
|
|
347
|
+
label: "Reset to default",
|
|
348
|
+
icon: RotateCcw,
|
|
349
|
+
variant: "secondary" as const,
|
|
350
|
+
disabled: isBusy,
|
|
351
|
+
hint: "Replace your edits with the Manta default this schema is based on",
|
|
352
|
+
onClick: () =>
|
|
353
|
+
resetToTemplate(schema, {
|
|
354
|
+
title: "Reset to the Manta default",
|
|
355
|
+
success: "Reset to the Manta default",
|
|
356
|
+
}),
|
|
357
|
+
},
|
|
358
|
+
]
|
|
359
|
+
: []),
|
|
360
|
+
archived
|
|
361
|
+
? {
|
|
362
|
+
key: "unarchive",
|
|
363
|
+
label: "Restore",
|
|
364
|
+
icon: ArchiveRestore,
|
|
365
|
+
variant: "secondary",
|
|
366
|
+
disabled: isBusy,
|
|
367
|
+
onClick: () => lifecycle.restore(schema),
|
|
368
|
+
}
|
|
369
|
+
: {
|
|
370
|
+
key: "archive",
|
|
371
|
+
label: "Archive",
|
|
372
|
+
icon: Archive,
|
|
373
|
+
variant: "secondary",
|
|
374
|
+
disabled: isBusy || archiveBlocked !== null,
|
|
375
|
+
hint: archiveBlocked ?? undefined,
|
|
376
|
+
onClick: () => lifecycle.askToArchive(schema),
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
key: "delete",
|
|
380
|
+
label: "Delete",
|
|
381
|
+
icon: Trash2,
|
|
382
|
+
variant: "secondary",
|
|
383
|
+
disabled: isBusy || deleteBlocked !== null,
|
|
384
|
+
hint: deleteBlocked ?? undefined,
|
|
385
|
+
onClick: () => lifecycle.askToDelete(schema),
|
|
386
|
+
},
|
|
387
|
+
]
|
|
388
|
+
: [];
|
|
389
|
+
|
|
390
|
+
return (
|
|
391
|
+
<>
|
|
392
|
+
<PageHeader
|
|
393
|
+
title={<SchemaBreadcrumbs label={schema?.label ?? (isLoading ? undefined : "Not found")} />}
|
|
394
|
+
icon={Brain}
|
|
395
|
+
actions={isPresent(headerActions) ? <PageHeaderActions actions={headerActions} /> : undefined}
|
|
396
|
+
/>
|
|
397
|
+
<SchemaDetailPage
|
|
398
|
+
schema={schema}
|
|
399
|
+
isLoading={isLoading && schema === null}
|
|
400
|
+
errorMessage={errorMessage}
|
|
401
|
+
usage={usage}
|
|
402
|
+
isBusy={isBusy}
|
|
403
|
+
onWriteComputingRule={
|
|
404
|
+
canManage && schema && !archived
|
|
405
|
+
? (property) => setRuleDraft(computedPropertyRuleDraft(schema, property))
|
|
406
|
+
: undefined
|
|
407
|
+
}
|
|
408
|
+
onReviewTemplate={
|
|
409
|
+
canManage && schema?.templateStatus === GQLMemorySchemaTemplateStatus.Updated
|
|
410
|
+
? () =>
|
|
411
|
+
resetToTemplate(schema, { title: "Update to the new default", success: "Updated to the new default" })
|
|
412
|
+
: undefined
|
|
413
|
+
}
|
|
414
|
+
onDismissTemplate={
|
|
415
|
+
canManage && schema
|
|
416
|
+
? () =>
|
|
417
|
+
void runStatus(
|
|
418
|
+
async () =>
|
|
419
|
+
(
|
|
420
|
+
await mutations.dismissTemplateUpdate.mutateAsync({
|
|
421
|
+
input: { iri: schema.iri, expectedRevision: schema.revision },
|
|
422
|
+
})
|
|
423
|
+
).dismissMemorySchemaTemplateUpdate,
|
|
424
|
+
"Kept your version",
|
|
425
|
+
)
|
|
426
|
+
: undefined
|
|
427
|
+
}
|
|
428
|
+
/>
|
|
429
|
+
|
|
430
|
+
{schema && (
|
|
431
|
+
<>
|
|
432
|
+
{lifecycle.dialogs}
|
|
433
|
+
<ReviewDialog
|
|
434
|
+
review={review}
|
|
435
|
+
onClearValues={(path) => void review.clearValues(path, clearRun(mutations, schema.iri))}
|
|
436
|
+
/>
|
|
437
|
+
<RuleDraftDialog request={ruleDraft} onClose={() => setRuleDraft(null)} />
|
|
438
|
+
</>
|
|
439
|
+
)}
|
|
440
|
+
</>
|
|
441
|
+
);
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
export type MemorySchemaPageProps = {
|
|
445
|
+
view: MemorySchemaView;
|
|
446
|
+
schemas: GQLMemorySchemaFieldsFragment[];
|
|
447
|
+
isLoading: boolean;
|
|
448
|
+
errorMessage: string | null;
|
|
449
|
+
canManage: boolean;
|
|
450
|
+
};
|
|
451
|
+
|
|
452
|
+
export function MemorySchemaPage(props: MemorySchemaPageProps) {
|
|
453
|
+
const { view, schemas, isLoading, errorMessage, canManage } = props;
|
|
454
|
+
|
|
455
|
+
if (view.kind === "new") {
|
|
456
|
+
return canManage ? (
|
|
457
|
+
<SchemaEditorView schema={null} isNew />
|
|
458
|
+
) : (
|
|
459
|
+
<SchemaDetailView
|
|
460
|
+
schema={null}
|
|
461
|
+
isLoading={false}
|
|
462
|
+
errorMessage="Only organization admins can create schemas"
|
|
463
|
+
canManage={false}
|
|
464
|
+
/>
|
|
465
|
+
);
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
const schema = findMemorySchemaByRouteName(schemas, view.routeName);
|
|
469
|
+
if (view.kind === "edit" && canManage) {
|
|
470
|
+
if (schema === null) {
|
|
471
|
+
return <SchemaDetailView schema={null} isLoading={isLoading} errorMessage={errorMessage} canManage={canManage} />;
|
|
472
|
+
}
|
|
473
|
+
return <SchemaEditorView key={schema.iri} schema={schema} isNew={false} />;
|
|
474
|
+
}
|
|
475
|
+
return <SchemaDetailView schema={schema} isLoading={isLoading} errorMessage={errorMessage} canManage={canManage} />;
|
|
476
|
+
}
|