@manta-eu/react 0.12.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/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/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
|
@@ -1,18 +1,42 @@
|
|
|
1
1
|
import type { GQLMemoryKind } from "@manta-eu/client";
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import {
|
|
3
|
+
GQLMemoryScope,
|
|
4
|
+
type GQLConflictingMemory,
|
|
5
|
+
type GQLMemory,
|
|
6
|
+
type GQLMemoryPropertyProblem,
|
|
7
|
+
type GQLMemorySchemaFieldsFragment,
|
|
8
|
+
} from "@manta-eu/client";
|
|
9
|
+
import {
|
|
10
|
+
inferVolatility,
|
|
11
|
+
maxImportanceForVolatility,
|
|
12
|
+
resolveTrustedUntil,
|
|
13
|
+
type MemoryVolatility,
|
|
14
|
+
} from "@manta-eu/client/shared/memory-volatility";
|
|
4
15
|
import { humanCount } from "@manta-eu/lib/humanize";
|
|
5
16
|
import { isPresent } from "@manta-eu/lib/present";
|
|
6
17
|
import { addYears, endOfDay, format, startOfTomorrow } from "date-fns";
|
|
7
18
|
import { CalendarIcon, ChevronLeft, X } from "lucide-react";
|
|
8
|
-
import { useCallback, useEffect, useRef, useState } from "react";
|
|
19
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
9
20
|
import { useConflictCheck } from "../hooks/useConflictCheck";
|
|
10
21
|
import { validateMemoryForm } from "../memory-form-validation";
|
|
22
|
+
import {
|
|
23
|
+
changedPropertyValues,
|
|
24
|
+
cleanPropertyValues,
|
|
25
|
+
filledPropertyCount,
|
|
26
|
+
missingRequiredProperties,
|
|
27
|
+
propertyErrorsByPath,
|
|
28
|
+
propertyValuesFromMemory,
|
|
29
|
+
writableProperties,
|
|
30
|
+
type MemoryPropertyErrors,
|
|
31
|
+
} from "../memory-property-values";
|
|
11
32
|
import { ConflictMemoryCard } from "./ConflictMemoryCard";
|
|
33
|
+
import { FieldLabel } from "./FieldLabel";
|
|
34
|
+
import { importanceLabel } from "./ImportanceSlider";
|
|
12
35
|
import { MemoryFields, emptyForm, type FormErrors, type MemoryFormState } from "./MemoryFields";
|
|
36
|
+
import { MemoryPropertyFields } from "./MemoryPropertyFields";
|
|
37
|
+
import { Banner } from "#components/banner/index";
|
|
13
38
|
import { Button } from "#components/button/index";
|
|
14
39
|
import { Calendar } from "#components/calendar/index";
|
|
15
|
-
import { Input } from "#components/input/index";
|
|
16
40
|
import {
|
|
17
41
|
Dialog,
|
|
18
42
|
DialogContent,
|
|
@@ -23,24 +47,26 @@ import {
|
|
|
23
47
|
} from "#components/modal/index";
|
|
24
48
|
import { Popover, PopoverContent, PopoverTrigger } from "#components/popover/index";
|
|
25
49
|
import {
|
|
50
|
+
createSelectClassName,
|
|
26
51
|
Select,
|
|
27
52
|
SelectContent,
|
|
28
53
|
SelectItem,
|
|
29
54
|
SelectTrigger,
|
|
30
55
|
SelectValue,
|
|
31
|
-
createSelectClassName,
|
|
32
56
|
} from "#components/select/index";
|
|
33
57
|
import { cn } from "#lib/utils";
|
|
34
58
|
|
|
59
|
+
export type MemorySaveResult = { propertyErrors?: readonly GQLMemoryPropertyProblem[] | null } | void;
|
|
60
|
+
|
|
35
61
|
export type MemoryFormDialogProps = {
|
|
36
62
|
open: boolean;
|
|
37
63
|
onOpenChange: (open: boolean) => void;
|
|
38
64
|
scope: GQLMemoryScope;
|
|
39
65
|
initial?: GQLMemory;
|
|
40
|
-
onSave: (form: MemoryFormState, supersedesMemoryIris?: string[]) => Promise<
|
|
66
|
+
onSave: (form: MemoryFormState, supersedesMemoryIris?: string[]) => Promise<MemorySaveResult>;
|
|
41
67
|
isSaving: boolean;
|
|
42
68
|
canManageSharedMemories?: boolean;
|
|
43
|
-
schemas?:
|
|
69
|
+
schemas?: GQLMemorySchemaFieldsFragment[];
|
|
44
70
|
currentUserId?: string;
|
|
45
71
|
};
|
|
46
72
|
|
|
@@ -48,15 +74,6 @@ function normalizeDesc(s: string): string {
|
|
|
48
74
|
return s.trim().replace(/\s+/g, " ");
|
|
49
75
|
}
|
|
50
76
|
|
|
51
|
-
function shortDatatype(iri: string): string {
|
|
52
|
-
if (iri.endsWith("#string")) return "text";
|
|
53
|
-
if (iri.endsWith("#decimal")) return "decimal";
|
|
54
|
-
if (iri.endsWith("#integer")) return "integer";
|
|
55
|
-
if (iri.endsWith("#boolean")) return "boolean";
|
|
56
|
-
if (iri.endsWith("#anyURI")) return "url";
|
|
57
|
-
return formatEntityName(iri);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
77
|
function initialSubclass(memory: GQLMemory): string | null {
|
|
61
78
|
if (!memory.memorySubclass) return null;
|
|
62
79
|
return memory.memorySubclass;
|
|
@@ -68,7 +85,7 @@ function buildFormFromMemory(memory: GQLMemory): MemoryFormState {
|
|
|
68
85
|
description: memory.description ?? null,
|
|
69
86
|
kind: memory.kind as GQLMemoryKind,
|
|
70
87
|
memorySubclass: initialSubclass(memory),
|
|
71
|
-
customProperties: (memory
|
|
88
|
+
customProperties: propertyValuesFromMemory(memory),
|
|
72
89
|
memoryValidUntil: memory.memoryValidUntil ? new Date(memory.memoryValidUntil).toISOString() : null,
|
|
73
90
|
memoryTrustedUntil: memory.memoryTrustedUntil ? new Date(memory.memoryTrustedUntil).toISOString() : null,
|
|
74
91
|
teams: memory.teams,
|
|
@@ -76,6 +93,61 @@ function buildFormFromMemory(memory: GQLMemory): MemoryFormState {
|
|
|
76
93
|
};
|
|
77
94
|
}
|
|
78
95
|
|
|
96
|
+
type DatePickerControlProps = {
|
|
97
|
+
id: string;
|
|
98
|
+
placeholder: string;
|
|
99
|
+
value: string | null;
|
|
100
|
+
onChange: (value: string | null) => void;
|
|
101
|
+
notAfter?: string | null;
|
|
102
|
+
describedBy?: string;
|
|
103
|
+
invalid?: boolean;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
function DatePickerControl(props: DatePickerControlProps) {
|
|
107
|
+
const { id, placeholder, value, onChange, notAfter, describedBy, invalid } = props;
|
|
108
|
+
const selected = value ? new Date(value) : undefined;
|
|
109
|
+
const latest = notAfter ? new Date(notAfter) : undefined;
|
|
110
|
+
|
|
111
|
+
return (
|
|
112
|
+
<div className="flex items-center gap-2">
|
|
113
|
+
<Popover>
|
|
114
|
+
<PopoverTrigger asChild>
|
|
115
|
+
<button
|
|
116
|
+
type="button"
|
|
117
|
+
id={id}
|
|
118
|
+
aria-invalid={invalid ? true : undefined}
|
|
119
|
+
aria-describedby={describedBy}
|
|
120
|
+
className={cn(createSelectClassName({ size: "base" }), "flex-1 min-w-0 gap-2")}
|
|
121
|
+
>
|
|
122
|
+
<CalendarIcon className="size-4 shrink-0 text-muted-foreground" />
|
|
123
|
+
<span className={cn("flex-1 min-w-0 truncate text-left", !value && "text-placeholder-foreground")}>
|
|
124
|
+
{selected ? format(selected, "MMM d, yyyy") : placeholder}
|
|
125
|
+
</span>
|
|
126
|
+
</button>
|
|
127
|
+
</PopoverTrigger>
|
|
128
|
+
<PopoverContent align="start" className="w-auto border-0 bg-transparent p-0 shadow-none">
|
|
129
|
+
<Calendar
|
|
130
|
+
mode="single"
|
|
131
|
+
captionLayout="dropdown"
|
|
132
|
+
startMonth={new Date()}
|
|
133
|
+
endMonth={latest ?? addYears(new Date(), 10)}
|
|
134
|
+
selected={selected}
|
|
135
|
+
defaultMonth={selected}
|
|
136
|
+
disabled={latest ? { before: startOfTomorrow(), after: latest } : { before: startOfTomorrow() }}
|
|
137
|
+
onSelect={(date) => onChange(date ? endOfDay(date).toISOString() : null)}
|
|
138
|
+
/>
|
|
139
|
+
</PopoverContent>
|
|
140
|
+
</Popover>
|
|
141
|
+
{value && (
|
|
142
|
+
<Button type="button" variant="tertiary" size="base" onClick={() => onChange(null)} className="shrink-0">
|
|
143
|
+
<X className="size-3.5" />
|
|
144
|
+
Clear
|
|
145
|
+
</Button>
|
|
146
|
+
)}
|
|
147
|
+
</div>
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
|
|
79
151
|
type MemoryDateFieldProps = {
|
|
80
152
|
id: string;
|
|
81
153
|
label: string;
|
|
@@ -89,52 +161,112 @@ type MemoryDateFieldProps = {
|
|
|
89
161
|
|
|
90
162
|
function MemoryDateField(props: MemoryDateFieldProps) {
|
|
91
163
|
const { id, label, hint, placeholder, value, onChange, notAfter, error } = props;
|
|
92
|
-
const selected = value ? new Date(value) : undefined;
|
|
93
|
-
const latest = notAfter ? new Date(notAfter) : undefined;
|
|
94
164
|
const errorId = `${id}-error`;
|
|
165
|
+
const hintId = `${id}-hint`;
|
|
95
166
|
|
|
96
167
|
return (
|
|
97
168
|
<div className="flex flex-col gap-1.5">
|
|
98
|
-
<label htmlFor={id}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
169
|
+
<FieldLabel label={label} hint={hint} htmlFor={id} />
|
|
170
|
+
<span id={hintId} className="sr-only">
|
|
171
|
+
{hint}
|
|
172
|
+
</span>
|
|
173
|
+
<DatePickerControl
|
|
174
|
+
id={id}
|
|
175
|
+
placeholder={placeholder}
|
|
176
|
+
value={value}
|
|
177
|
+
notAfter={notAfter}
|
|
178
|
+
invalid={isPresent(error)}
|
|
179
|
+
describedBy={error ? `${hintId} ${errorId}` : hintId}
|
|
180
|
+
onChange={onChange}
|
|
181
|
+
/>
|
|
182
|
+
{error && (
|
|
183
|
+
<p id={errorId} className="typography-small text-error-foreground">
|
|
184
|
+
{error}
|
|
185
|
+
</p>
|
|
186
|
+
)}
|
|
187
|
+
</div>
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
type TrustPreset = MemoryVolatility | "date";
|
|
192
|
+
|
|
193
|
+
const trustPresets: readonly { value: TrustPreset; label: string }[] = [
|
|
194
|
+
{ value: "stable", label: "Stable · trusted indefinitely" },
|
|
195
|
+
{ value: "slow", label: "Changes slowly · 90 days" },
|
|
196
|
+
{ value: "volatile", label: "Changes often · 7 days" },
|
|
197
|
+
{ value: "date", label: "Pick a date" },
|
|
198
|
+
];
|
|
199
|
+
|
|
200
|
+
const levelWording: Record<MemoryVolatility, string> = {
|
|
201
|
+
stable: "is stable",
|
|
202
|
+
slow: "changes slowly",
|
|
203
|
+
volatile: "changes often",
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
function isTrustPreset(value: string): value is TrustPreset {
|
|
207
|
+
return trustPresets.some((preset) => preset.value === value);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
type TrustedUntilFieldProps = {
|
|
211
|
+
value: string | null;
|
|
212
|
+
validUntil: string | null;
|
|
213
|
+
importance: number;
|
|
214
|
+
error?: string;
|
|
215
|
+
preset: TrustPreset | null;
|
|
216
|
+
onPresetChange: (preset: TrustPreset) => void;
|
|
217
|
+
onChange: (value: string | null) => void;
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
// The dialog keeps the chosen preset, since this field unmounts whenever the dialog shows another view.
|
|
221
|
+
function TrustedUntilField(props: TrustedUntilFieldProps) {
|
|
222
|
+
const { value, validUntil, importance, error, onPresetChange: setPreset, onChange } = props;
|
|
223
|
+
const preset = props.preset ?? (value ? "date" : "stable");
|
|
224
|
+
const level: MemoryVolatility = preset === "date" ? inferVolatility(value, new Date()) : preset;
|
|
225
|
+
const cap = maxImportanceForVolatility(level);
|
|
226
|
+
const hint = "Stops pre-loading after this date but stays searchable. Use it for anything that drifts.";
|
|
227
|
+
const errorId = "memory-trust-horizon-error";
|
|
228
|
+
|
|
229
|
+
function choose(next: string) {
|
|
230
|
+
if (!isTrustPreset(next)) return;
|
|
231
|
+
setPreset(next);
|
|
232
|
+
if (next === "date") return;
|
|
233
|
+
onChange(next === "stable" ? null : resolveTrustedUntil(next, validUntil));
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
return (
|
|
237
|
+
<div className="flex flex-col gap-1.5">
|
|
238
|
+
<FieldLabel label="Trusted until" hint={hint} htmlFor="memory-trust-preset" />
|
|
239
|
+
<Select value={preset} onValueChange={choose}>
|
|
240
|
+
<SelectTrigger label="Trusted until" id="memory-trust-preset" hiddenLabel>
|
|
241
|
+
<SelectValue />
|
|
242
|
+
</SelectTrigger>
|
|
243
|
+
<SelectContent>
|
|
244
|
+
{trustPresets.map((option) => (
|
|
245
|
+
<SelectItem key={option.value} value={option.value}>
|
|
246
|
+
{option.label}
|
|
247
|
+
</SelectItem>
|
|
248
|
+
))}
|
|
249
|
+
</SelectContent>
|
|
250
|
+
</Select>
|
|
251
|
+
{preset !== "stable" && (
|
|
252
|
+
<DatePickerControl
|
|
253
|
+
id="memory-trust-horizon"
|
|
254
|
+
placeholder="Pick a date"
|
|
255
|
+
value={value}
|
|
256
|
+
notAfter={validUntil}
|
|
257
|
+
invalid={isPresent(error)}
|
|
258
|
+
describedBy={error ? errorId : undefined}
|
|
259
|
+
onChange={(next) => {
|
|
260
|
+
setPreset(next === null ? "stable" : "date");
|
|
261
|
+
onChange(next);
|
|
262
|
+
}}
|
|
263
|
+
/>
|
|
264
|
+
)}
|
|
265
|
+
{importance > cap && (
|
|
266
|
+
<p className="typography-small text-muted-foreground">
|
|
267
|
+
The agent keeps a memory that {levelWording[level]} at {importanceLabel(cap)} importance or lower.
|
|
268
|
+
</p>
|
|
269
|
+
)}
|
|
138
270
|
{error && (
|
|
139
271
|
<p id={errorId} className="typography-small text-error-foreground">
|
|
140
272
|
{error}
|
|
@@ -164,6 +296,9 @@ export function MemoryFormDialog(props: MemoryFormDialogProps) {
|
|
|
164
296
|
const [errors, setErrors] = useState<FormErrors>({});
|
|
165
297
|
const [submitted, setSubmitted] = useState(false);
|
|
166
298
|
const [view, setView] = useState<"main" | "properties" | "conflicts">("main");
|
|
299
|
+
const [propertyErrors, setPropertyErrors] = useState<MemoryPropertyErrors>({});
|
|
300
|
+
const [trustPreset, setTrustPreset] = useState<TrustPreset | null>(null);
|
|
301
|
+
const initialValues = useMemo(() => (initial ? propertyValuesFromMemory(initial) : {}), [initial]);
|
|
167
302
|
const [showDiscardConfirm, setShowDiscardConfirm] = useState(false);
|
|
168
303
|
const [pendingConflicts, setPendingConflicts] = useState<GQLConflictingMemory[]>([]);
|
|
169
304
|
const [pendingForm, setPendingForm] = useState<MemoryFormState | null>(null);
|
|
@@ -195,9 +330,11 @@ export function MemoryFormDialog(props: MemoryFormDialogProps) {
|
|
|
195
330
|
setErrors({});
|
|
196
331
|
setSubmitted(false);
|
|
197
332
|
setView("main");
|
|
333
|
+
setPropertyErrors({});
|
|
198
334
|
originalDescRef.current = initial ? normalizeDesc(initial.description ?? "") : "";
|
|
199
335
|
setShowDiscardConfirm(false);
|
|
200
336
|
clearConflicts();
|
|
337
|
+
setTrustPreset(null);
|
|
201
338
|
setConflictCheckTimedOut(false);
|
|
202
339
|
}
|
|
203
340
|
}, [open, initial]);
|
|
@@ -209,10 +346,29 @@ export function MemoryFormDialog(props: MemoryFormDialogProps) {
|
|
|
209
346
|
form.memoryValidUntil !== (initial.memoryValidUntil ? new Date(initial.memoryValidUntil).toISOString() : null) ||
|
|
210
347
|
form.memoryTrustedUntil !==
|
|
211
348
|
(initial.memoryTrustedUntil ? new Date(initial.memoryTrustedUntil).toISOString() : null) ||
|
|
212
|
-
JSON.stringify(form.customProperties) !==
|
|
213
|
-
JSON.stringify((initial.customProperties as Record<string, string> | null) ?? {})
|
|
349
|
+
JSON.stringify(cleanPropertyValues(form.customProperties)) !== JSON.stringify(cleanPropertyValues(initialValues))
|
|
214
350
|
: isPresent(form.label) || isPresent(form.description) || isPresent(form.teams);
|
|
215
351
|
|
|
352
|
+
const selectedSchema = form.memorySubclass
|
|
353
|
+
? (schemas?.find((schema) => schema.iri === form.memorySubclass) ?? null)
|
|
354
|
+
: null;
|
|
355
|
+
const schemaProperties = writableProperties(selectedSchema);
|
|
356
|
+
|
|
357
|
+
const submit = useCallback(
|
|
358
|
+
async (next: MemoryFormState, supersedesMemoryIris?: string[]) => {
|
|
359
|
+
const keepsSchema = isEdit && next.memorySubclass === initialSubclass(initial);
|
|
360
|
+
const outgoing = keepsSchema
|
|
361
|
+
? { ...next, customProperties: changedPropertyValues(next.customProperties, initialValues) }
|
|
362
|
+
: next;
|
|
363
|
+
const result = await onSave(outgoing, supersedesMemoryIris);
|
|
364
|
+
if (result && isPresent(result.propertyErrors)) {
|
|
365
|
+
setPropertyErrors(propertyErrorsByPath(result.propertyErrors));
|
|
366
|
+
setView(isPresent(writableProperties(selectedSchema)) ? "properties" : "main");
|
|
367
|
+
}
|
|
368
|
+
},
|
|
369
|
+
[isEdit, initial, initialValues, onSave, selectedSchema],
|
|
370
|
+
);
|
|
371
|
+
|
|
216
372
|
const handleRequestClose = useCallback(
|
|
217
373
|
(nextOpen: boolean) => {
|
|
218
374
|
if (!nextOpen && isDirty && !isSaving) {
|
|
@@ -232,10 +388,17 @@ export function MemoryFormDialog(props: MemoryFormDialogProps) {
|
|
|
232
388
|
return;
|
|
233
389
|
}
|
|
234
390
|
|
|
391
|
+
const missing = missingRequiredProperties(selectedSchema, form.customProperties);
|
|
392
|
+
if (isPresent(missing)) {
|
|
393
|
+
setPropertyErrors(missing);
|
|
394
|
+
setView("properties");
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
397
|
+
|
|
235
398
|
const currentForm = form;
|
|
236
399
|
|
|
237
400
|
if (isEdit && normalizeDesc(currentForm.description ?? "") === originalDescRef.current) {
|
|
238
|
-
await
|
|
401
|
+
await submit(currentForm);
|
|
239
402
|
return;
|
|
240
403
|
}
|
|
241
404
|
|
|
@@ -254,7 +417,7 @@ export function MemoryFormDialog(props: MemoryFormDialogProps) {
|
|
|
254
417
|
}
|
|
255
418
|
|
|
256
419
|
if (!isPresent(conflicts)) {
|
|
257
|
-
await
|
|
420
|
+
await submit(currentForm);
|
|
258
421
|
return;
|
|
259
422
|
}
|
|
260
423
|
|
|
@@ -264,7 +427,7 @@ export function MemoryFormDialog(props: MemoryFormDialogProps) {
|
|
|
264
427
|
setConflictChecked(new Set(conflicts.map((c) => c.iri)));
|
|
265
428
|
setConflictMerging(new Set());
|
|
266
429
|
setView("conflicts");
|
|
267
|
-
}, [form, isEdit, initial, scope, isTeam, check,
|
|
430
|
+
}, [form, isEdit, initial, scope, isTeam, check, submit, selectedSchema]);
|
|
268
431
|
|
|
269
432
|
const toggleConflictChecked = useCallback((iri: string) => {
|
|
270
433
|
setConflictChecked((prev) => {
|
|
@@ -318,8 +481,8 @@ export function MemoryFormDialog(props: MemoryFormDialogProps) {
|
|
|
318
481
|
const saved = pendingForm;
|
|
319
482
|
clearConflicts();
|
|
320
483
|
setView("main");
|
|
321
|
-
await
|
|
322
|
-
}, [pendingForm, clearConflicts,
|
|
484
|
+
await submit(saved, []);
|
|
485
|
+
}, [pendingForm, clearConflicts, submit]);
|
|
323
486
|
|
|
324
487
|
const handleConflictConfirmInline = useCallback(async () => {
|
|
325
488
|
if (!pendingForm) return;
|
|
@@ -331,21 +494,15 @@ export function MemoryFormDialog(props: MemoryFormDialogProps) {
|
|
|
331
494
|
}
|
|
332
495
|
clearConflicts();
|
|
333
496
|
setView("main");
|
|
334
|
-
await
|
|
335
|
-
}, [pendingForm, pendingConflicts, conflictChecked, conflictMerging, isTeam, clearConflicts,
|
|
336
|
-
|
|
337
|
-
const selectedSchema = form.memorySubclass ? (schemas?.find((s) => s.iri === form.memorySubclass) ?? null) : null;
|
|
338
|
-
const schemaProperties =
|
|
339
|
-
selectedSchema && isPresent(selectedSchema.properties)
|
|
340
|
-
? [...selectedSchema.properties].sort((a, b) => {
|
|
341
|
-
if (a.required && !b.required) return -1;
|
|
342
|
-
if (!a.required && b.required) return 1;
|
|
343
|
-
return 0;
|
|
344
|
-
})
|
|
345
|
-
: [];
|
|
497
|
+
await submit(finalForm, supersedesIris);
|
|
498
|
+
}, [pendingForm, pendingConflicts, conflictChecked, conflictMerging, isTeam, clearConflicts, submit]);
|
|
499
|
+
|
|
346
500
|
const hasProperties = isPresent(schemaProperties);
|
|
347
501
|
const requiredPropertyCount = schemaProperties.filter((p) => p.required).length;
|
|
348
|
-
const
|
|
502
|
+
const writablePaths = new Set(schemaProperties.map((property) => property.path));
|
|
503
|
+
const otherPropertyErrors = Object.entries(propertyErrors)
|
|
504
|
+
.filter(([path]) => !writablePaths.has(path))
|
|
505
|
+
.map(([, message]) => message);
|
|
349
506
|
|
|
350
507
|
const scopeLabel = isTeam ? "team" : isCompany ? "company" : "user";
|
|
351
508
|
const titleText = isEdit
|
|
@@ -386,7 +543,13 @@ export function MemoryFormDialog(props: MemoryFormDialogProps) {
|
|
|
386
543
|
|
|
387
544
|
return (
|
|
388
545
|
<Dialog open={open} onOpenChange={handleRequestClose}>
|
|
389
|
-
<DialogContent
|
|
546
|
+
<DialogContent
|
|
547
|
+
className="flex flex-col overflow-hidden"
|
|
548
|
+
onOpenAutoFocus={(event) => {
|
|
549
|
+
event.preventDefault();
|
|
550
|
+
document.getElementById(isEdit ? "memory-label" : "memory-description")?.focus();
|
|
551
|
+
}}
|
|
552
|
+
>
|
|
390
553
|
{view === "conflicts" ? (
|
|
391
554
|
<DialogHeader>
|
|
392
555
|
<button
|
|
@@ -453,125 +616,68 @@ export function MemoryFormDialog(props: MemoryFormDialogProps) {
|
|
|
453
616
|
))}
|
|
454
617
|
</>
|
|
455
618
|
) : view === "properties" ? (
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
className="typography-small-medium text-default-foreground flex-1"
|
|
477
|
-
>
|
|
478
|
-
{prop.label}
|
|
479
|
-
{prop.required && <span className="text-error-foreground ml-1">*</span>}
|
|
480
|
-
</label>
|
|
481
|
-
<span className="typography-tiny text-muted-foreground bg-card border border-muted-border rounded px-1.5 py-0.5 shrink-0">
|
|
482
|
-
{shortDatatype(prop.dataType)}
|
|
483
|
-
</span>
|
|
484
|
-
</div>
|
|
485
|
-
{hasSmallEnum ? (
|
|
486
|
-
<div className="flex gap-1 flex-wrap">
|
|
487
|
-
{prop.allowedValues!.map((v) => (
|
|
488
|
-
<Button
|
|
489
|
-
key={v}
|
|
490
|
-
type="button"
|
|
491
|
-
variant={value === v ? "primary" : "tertiary"}
|
|
492
|
-
size="sm"
|
|
493
|
-
rounded="md"
|
|
494
|
-
onClick={() => setPropValue(v)}
|
|
495
|
-
>
|
|
496
|
-
{v}
|
|
497
|
-
</Button>
|
|
498
|
-
))}
|
|
499
|
-
</div>
|
|
500
|
-
) : hasLargeEnum ? (
|
|
501
|
-
<Select value={value} onValueChange={setPropValue}>
|
|
502
|
-
<SelectTrigger label={prop.label} id={`prop-${localName}`} hiddenLabel>
|
|
503
|
-
<SelectValue placeholder={`Select ${prop.label.toLowerCase()}`} />
|
|
504
|
-
</SelectTrigger>
|
|
505
|
-
<SelectContent>
|
|
506
|
-
{prop.allowedValues!.map((v) => (
|
|
507
|
-
<SelectItem key={v} value={v}>
|
|
508
|
-
{v}
|
|
509
|
-
</SelectItem>
|
|
510
|
-
))}
|
|
511
|
-
</SelectContent>
|
|
512
|
-
</Select>
|
|
513
|
-
) : isBoolean ? (
|
|
514
|
-
<div className="flex gap-1">
|
|
515
|
-
{(["true", "false"] as const).map((v) => (
|
|
516
|
-
<Button
|
|
517
|
-
key={v}
|
|
518
|
-
type="button"
|
|
519
|
-
variant={(value || "false") === v ? "primary" : "tertiary"}
|
|
520
|
-
size="sm"
|
|
521
|
-
rounded="md"
|
|
522
|
-
className="flex-1"
|
|
523
|
-
onClick={() => setPropValue(v)}
|
|
524
|
-
>
|
|
525
|
-
{v === "true" ? "Yes" : "No"}
|
|
526
|
-
</Button>
|
|
527
|
-
))}
|
|
528
|
-
</div>
|
|
529
|
-
) : (
|
|
530
|
-
<Input
|
|
531
|
-
id={`prop-${localName}`}
|
|
532
|
-
type={isNumeric ? "number" : "text"}
|
|
533
|
-
value={value}
|
|
534
|
-
onChange={(e) => setPropValue(e.target.value)}
|
|
535
|
-
placeholder={`Enter ${prop.label.toLowerCase()}`}
|
|
536
|
-
/>
|
|
537
|
-
)}
|
|
538
|
-
</div>
|
|
539
|
-
);
|
|
540
|
-
})
|
|
619
|
+
<>
|
|
620
|
+
{otherPropertyErrors.map((message) => (
|
|
621
|
+
<Banner key={message} label={message} className="shrink-0" />
|
|
622
|
+
))}
|
|
623
|
+
{selectedSchema && (
|
|
624
|
+
<MemoryPropertyFields
|
|
625
|
+
schema={selectedSchema}
|
|
626
|
+
values={form.customProperties}
|
|
627
|
+
errors={propertyErrors}
|
|
628
|
+
onChange={(path, values) => {
|
|
629
|
+
setForm((prev) => ({ ...prev, customProperties: { ...prev.customProperties, [path]: values } }));
|
|
630
|
+
setPropertyErrors((previous) => {
|
|
631
|
+
if (!(path in previous)) return previous;
|
|
632
|
+
const { [path]: _cleared, ...rest } = previous;
|
|
633
|
+
return rest;
|
|
634
|
+
});
|
|
635
|
+
}}
|
|
636
|
+
/>
|
|
637
|
+
)}
|
|
638
|
+
</>
|
|
541
639
|
) : (
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
640
|
+
<>
|
|
641
|
+
{!hasProperties &&
|
|
642
|
+
otherPropertyErrors.map((message) => <Banner key={message} label={message} className="shrink-0" />)}
|
|
643
|
+
<MemoryFields
|
|
644
|
+
form={form}
|
|
645
|
+
errors={errors}
|
|
646
|
+
isTeam={isTeam}
|
|
647
|
+
canManageSharedMemories={canManageSharedMemories}
|
|
648
|
+
onChange={(next) => setForm((prev) => ({ ...prev, ...next }))}
|
|
649
|
+
labelPlaceholder={isEdit ? "e.g. Target ROAS" : "Auto-generated from description"}
|
|
650
|
+
descriptionPlaceholder={getDescriptionPlaceholder()}
|
|
651
|
+
autoFocus={!isEdit}
|
|
652
|
+
schemas={schemas}
|
|
653
|
+
onEditProperties={hasProperties ? () => setView("properties") : undefined}
|
|
654
|
+
prefillSchemaDefaults={!isEdit}
|
|
655
|
+
storedSchemaValues={
|
|
656
|
+
initial ? { schemaIri: initialSubclass(initial), values: initialValues } : undefined
|
|
657
|
+
}
|
|
658
|
+
filledPropertyCount={filledPropertyCount(selectedSchema, form.customProperties)}
|
|
659
|
+
totalPropertyCount={schemaProperties.length}
|
|
660
|
+
hasPropertyErrors={isPresent(propertyErrors)}
|
|
661
|
+
>
|
|
662
|
+
<MemoryDateField
|
|
663
|
+
id="memory-expiry"
|
|
664
|
+
label="Valid until"
|
|
665
|
+
hint="No longer true after this date, so the agent stops using it. Nothing is deleted. Use it only for a real deadline."
|
|
666
|
+
placeholder="Never expires"
|
|
667
|
+
value={form.memoryValidUntil}
|
|
668
|
+
onChange={(memoryValidUntil) => setForm((prev) => ({ ...prev, memoryValidUntil }))}
|
|
669
|
+
/>
|
|
670
|
+
<TrustedUntilField
|
|
671
|
+
value={form.memoryTrustedUntil}
|
|
672
|
+
validUntil={form.memoryValidUntil}
|
|
673
|
+
importance={form.importance}
|
|
674
|
+
error={errors.memoryTrustedUntil}
|
|
675
|
+
preset={trustPreset}
|
|
676
|
+
onPresetChange={setTrustPreset}
|
|
677
|
+
onChange={(memoryTrustedUntil) => setForm((prev) => ({ ...prev, memoryTrustedUntil }))}
|
|
678
|
+
/>
|
|
679
|
+
</MemoryFields>
|
|
680
|
+
</>
|
|
575
681
|
)}
|
|
576
682
|
</div>
|
|
577
683
|
|
|
@@ -620,7 +726,7 @@ export function MemoryFormDialog(props: MemoryFormDialogProps) {
|
|
|
620
726
|
<Button
|
|
621
727
|
onClick={() => {
|
|
622
728
|
setConflictCheckTimedOut(false);
|
|
623
|
-
void
|
|
729
|
+
void submit(pendingForm, []);
|
|
624
730
|
setPendingForm(null);
|
|
625
731
|
}}
|
|
626
732
|
disabled={isSaving}
|