@manta-eu/react 0.1.10 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/channel-icon/index.d.ts +1 -0
- package/dist/components/channel-icon/index.d.ts.map +1 -1
- package/dist/components/channel-icon/index.js +1 -1
- package/dist/components/channel-icon/index.js.map +1 -1
- package/dist/components/chat-view/ChatTurnErrorNotice.d.ts.map +1 -1
- package/dist/components/chat-view/ChatTurnErrorNotice.js +3 -1
- package/dist/components/chat-view/ChatTurnErrorNotice.js.map +1 -1
- package/dist/components/layouts/ConnectedCustomApp.d.ts +13 -0
- package/dist/components/layouts/ConnectedCustomApp.d.ts.map +1 -0
- package/dist/components/layouts/ConnectedCustomApp.js +37 -0
- package/dist/components/layouts/ConnectedCustomApp.js.map +1 -0
- package/dist/components/layouts/Sidebar.d.ts.map +1 -1
- package/dist/components/layouts/Sidebar.js +6 -3
- package/dist/components/layouts/Sidebar.js.map +1 -1
- package/dist/components/planning/ActioningView.d.ts +1 -2
- package/dist/components/planning/ActioningView.d.ts.map +1 -1
- package/dist/components/planning/ActioningView.js +19 -44
- package/dist/components/planning/ActioningView.js.map +1 -1
- package/dist/components/planning/ManualActionCard.d.ts +4 -0
- package/dist/components/planning/ManualActionCard.d.ts.map +1 -1
- package/dist/components/planning/ManualActionCard.js +7 -5
- package/dist/components/planning/ManualActionCard.js.map +1 -1
- package/dist/components/planning/ManualActionList.d.ts +4 -0
- package/dist/components/planning/ManualActionList.d.ts.map +1 -1
- package/dist/components/planning/ManualActionList.js +8 -2
- package/dist/components/planning/ManualActionList.js.map +1 -1
- package/dist/components/planning/actioning-view-utils.d.ts +9 -0
- package/dist/components/planning/actioning-view-utils.d.ts.map +1 -1
- package/dist/components/planning/actioning-view-utils.js +19 -1
- package/dist/components/planning/actioning-view-utils.js.map +1 -1
- package/dist/components/table-skeleton/index.d.ts +2 -0
- package/dist/components/table-skeleton/index.d.ts.map +1 -1
- package/dist/components/table-skeleton/index.js +2 -1
- package/dist/components/table-skeleton/index.js.map +1 -1
- package/dist/components/tooltip/index.d.ts +7 -0
- package/dist/components/tooltip/index.d.ts.map +1 -1
- package/dist/components/tooltip/index.js +10 -1
- package/dist/components/tooltip/index.js.map +1 -1
- package/dist/globals.css +19 -6
- package/dist/graph/createNodeRouter.js +3 -3
- package/dist/graph/createNodeRouter.js.map +1 -1
- package/dist/graph/entity-link.d.ts +14 -0
- package/dist/graph/entity-link.d.ts.map +1 -0
- package/dist/graph/entity-link.js +12 -0
- package/dist/graph/entity-link.js.map +1 -0
- package/dist/graph/graph-list-utils.d.ts +1 -0
- package/dist/graph/graph-list-utils.d.ts.map +1 -1
- package/dist/graph/graph-list-utils.js +1 -0
- package/dist/graph/graph-list-utils.js.map +1 -1
- package/dist/graph/graph-model.d.ts.map +1 -1
- package/dist/graph/graph-model.js +14 -5
- package/dist/graph/graph-model.js.map +1 -1
- package/dist/graph/nodes/BrandAssetAnalysisView.d.ts.map +1 -1
- package/dist/graph/nodes/BrandAssetAnalysisView.js +2 -1
- package/dist/graph/nodes/BrandAssetAnalysisView.js.map +1 -1
- package/dist/graph/nodes/BrandFontSuggestionView.d.ts +3 -0
- package/dist/graph/nodes/BrandFontSuggestionView.d.ts.map +1 -0
- package/dist/graph/nodes/{BrandFontFamilyView.js → BrandFontSuggestionView.js} +22 -13
- package/dist/graph/nodes/BrandFontSuggestionView.js.map +1 -0
- package/dist/graph/nodes/BrandGuidelinesView.js +1 -1
- package/dist/graph/nodes/BrandGuidelinesView.js.map +1 -1
- package/dist/graph/nodes/NodePropertyTable.d.ts +4 -2
- package/dist/graph/nodes/NodePropertyTable.d.ts.map +1 -1
- package/dist/graph/nodes/NodePropertyTable.js +12 -59
- package/dist/graph/nodes/NodePropertyTable.js.map +1 -1
- package/dist/graph/nodes/brand-font.d.ts +8 -0
- package/dist/graph/nodes/brand-font.d.ts.map +1 -1
- package/dist/graph/nodes/brand-font.js +6 -0
- package/dist/graph/nodes/brand-font.js.map +1 -1
- package/dist/graph/nodes/brand-shared.d.ts +0 -3
- package/dist/graph/nodes/brand-shared.d.ts.map +1 -1
- package/dist/graph/nodes/brand-shared.js +1 -4
- package/dist/graph/nodes/brand-shared.js.map +1 -1
- package/dist/graph/nodes/node-property-row.d.ts +30 -0
- package/dist/graph/nodes/node-property-row.d.ts.map +1 -0
- package/dist/graph/nodes/node-property-row.js +35 -0
- package/dist/graph/nodes/node-property-row.js.map +1 -0
- package/dist/graph/property-formatters.d.ts +1 -0
- package/dist/graph/property-formatters.d.ts.map +1 -1
- package/dist/graph/property-formatters.js +4 -1
- package/dist/graph/property-formatters.js.map +1 -1
- package/dist/graph/special-nodes/AttributeList.d.ts +27 -0
- package/dist/graph/special-nodes/AttributeList.d.ts.map +1 -0
- package/dist/graph/special-nodes/AttributeList.js +57 -0
- package/dist/graph/special-nodes/AttributeList.js.map +1 -0
- package/dist/graph/special-nodes/EntityPreview.d.ts +5 -0
- package/dist/graph/special-nodes/EntityPreview.d.ts.map +1 -0
- package/dist/graph/special-nodes/EntityPreview.js +19 -0
- package/dist/graph/special-nodes/EntityPreview.js.map +1 -0
- package/dist/graph/special-nodes/EntityValueChip.d.ts +11 -0
- package/dist/graph/special-nodes/EntityValueChip.d.ts.map +1 -0
- package/dist/graph/special-nodes/EntityValueChip.js +40 -0
- package/dist/graph/special-nodes/EntityValueChip.js.map +1 -0
- package/dist/graph/special-nodes/GenericView.d.ts +2 -1
- package/dist/graph/special-nodes/GenericView.d.ts.map +1 -1
- package/dist/graph/special-nodes/GenericView.js +23 -69
- package/dist/graph/special-nodes/GenericView.js.map +1 -1
- package/dist/graph/special-nodes/card-facts.d.ts +52 -0
- package/dist/graph/special-nodes/card-facts.d.ts.map +1 -0
- package/dist/graph/special-nodes/card-facts.js +189 -0
- package/dist/graph/special-nodes/card-facts.js.map +1 -0
- package/dist/graph/special-nodes/property-icons.d.ts +9 -0
- package/dist/graph/special-nodes/property-icons.d.ts.map +1 -0
- package/dist/graph/special-nodes/property-icons.js +39 -0
- package/dist/graph/special-nodes/property-icons.js.map +1 -0
- package/dist/graph/status-utils.d.ts +16 -0
- package/dist/graph/status-utils.d.ts.map +1 -1
- package/dist/graph/status-utils.js +35 -0
- package/dist/graph/status-utils.js.map +1 -1
- package/dist/graph/types.d.ts +5 -0
- package/dist/graph/types.d.ts.map +1 -1
- package/dist/hooks/use-approve-anyway.d.ts +12 -0
- package/dist/hooks/use-approve-anyway.d.ts.map +1 -0
- package/dist/hooks/use-approve-anyway.js +81 -0
- package/dist/hooks/use-approve-anyway.js.map +1 -0
- package/dist/hooks/use-connection-problems.d.ts.map +1 -1
- package/dist/hooks/useAuth.d.ts +2 -2
- package/dist/hooks/useAuth.d.ts.map +1 -1
- package/dist/hooks/useAuth.js +2 -2
- package/dist/hooks/useAuth.js.map +1 -1
- package/dist/hooks/useOnboardingState.js +1 -1
- package/dist/hooks/useOnboardingState.js.map +1 -1
- package/dist/hooks/useValidateActionPlan.d.ts.map +1 -1
- package/dist/ldo-ui.d.ts +2 -1
- package/dist/ldo-ui.d.ts.map +1 -1
- package/dist/ldo-ui.js +1 -0
- package/dist/ldo-ui.js.map +1 -1
- package/dist/lib/datastore-route-table.d.ts +2 -1
- package/dist/lib/datastore-route-table.d.ts.map +1 -1
- package/dist/lib/datastore-route-table.js +2 -1
- package/dist/lib/datastore-route-table.js.map +1 -1
- package/dist/lib/manual-actions.d.ts +2 -1
- package/dist/lib/manual-actions.d.ts.map +1 -1
- package/dist/lib/manual-actions.js +3 -2
- package/dist/lib/manual-actions.js.map +1 -1
- package/dist/providers/ActiveChatProvider.js +3 -1
- package/dist/providers/ActiveChatProvider.js.map +1 -1
- package/dist/providers/AuthContext.d.ts +2 -1
- package/dist/providers/AuthContext.d.ts.map +1 -1
- package/dist/providers/AuthContext.js.map +1 -1
- package/dist/providers/ChatManagerProvider.d.ts.map +1 -1
- package/dist/providers/ChatManagerProvider.js +22 -9
- package/dist/providers/ChatManagerProvider.js.map +1 -1
- package/dist/providers/chat-socket-auth.d.ts +7 -2
- package/dist/providers/chat-socket-auth.d.ts.map +1 -1
- package/dist/providers/chat-socket-auth.js +87 -16
- package/dist/providers/chat-socket-auth.js.map +1 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +8 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/routes/activity/detail/ActivityChanges.d.ts +2 -0
- package/dist/routes/activity/detail/ActivityChanges.d.ts.map +1 -1
- package/dist/routes/activity/detail/ActivityChanges.js +8 -7
- package/dist/routes/activity/detail/ActivityChanges.js.map +1 -1
- package/dist/routes/activity/detail/ActivityDetail.d.ts +1 -0
- package/dist/routes/activity/detail/ActivityDetail.d.ts.map +1 -1
- package/dist/routes/activity/detail/ActivityDetail.js +5 -4
- package/dist/routes/activity/detail/ActivityDetail.js.map +1 -1
- package/dist/routes/activity/detail/ActivityStepsRail.d.ts +1 -0
- package/dist/routes/activity/detail/ActivityStepsRail.d.ts.map +1 -1
- package/dist/routes/activity/detail/ActivityStepsRail.js +3 -2
- package/dist/routes/activity/detail/ActivityStepsRail.js.map +1 -1
- package/dist/routes/activity/detail/ActivityTimeline.js +2 -2
- package/dist/routes/activity/detail/ActivityTimeline.js.map +1 -1
- package/dist/routes/activity/detail/NoChangesMessage.d.ts +6 -0
- package/dist/routes/activity/detail/NoChangesMessage.d.ts.map +1 -0
- package/dist/routes/activity/detail/NoChangesMessage.js +10 -0
- package/dist/routes/activity/detail/NoChangesMessage.js.map +1 -0
- package/dist/routes/data-explorer/components/RawTriples.js +1 -1
- package/dist/routes/data-explorer/components/RawTriples.js.map +1 -1
- package/dist/routes/data-explorer/components/RecentTypes.js +1 -1
- package/dist/routes/data-explorer/components/RecentTypes.js.map +1 -1
- package/dist/routes/data-explorer/components/class-detail/Instances.js +1 -1
- package/dist/routes/data-explorer/components/class-detail/Instances.js.map +1 -1
- package/dist/routes/data-explorer/components/namespace-detail/NamespaceClassRow.js +1 -1
- package/dist/routes/data-explorer/components/namespace-detail/NamespaceClassRow.js.map +1 -1
- package/dist/routes/data-explorer/components/ontology-coverage/CoverageTermColumns.js +1 -1
- package/dist/routes/data-explorer/components/ontology-coverage/CoverageTermColumns.js.map +1 -1
- package/dist/routes/data-explorer/components/ontology-coverage/UnobservedRuleVocabulary.js +1 -1
- package/dist/routes/data-explorer/components/ontology-coverage/UnobservedRuleVocabulary.js.map +1 -1
- package/dist/routes/data-explorer/components/record-detail/ChatPreview.js +2 -2
- package/dist/routes/data-explorer/components/record-detail/ChatPreview.js.map +1 -1
- package/dist/routes/data-explorer/declared-namespaces.d.ts +3 -0
- package/dist/routes/data-explorer/declared-namespaces.d.ts.map +1 -1
- package/dist/routes/data-explorer/declared-namespaces.js +21 -13
- package/dist/routes/data-explorer/declared-namespaces.js.map +1 -1
- package/dist/routes/data-explorer/namespaces.d.ts +1 -0
- package/dist/routes/data-explorer/namespaces.d.ts.map +1 -1
- package/dist/routes/data-explorer/namespaces.js +7 -6
- package/dist/routes/data-explorer/namespaces.js.map +1 -1
- package/dist/routes/datastores/components/DeleteDatastoreDialog.d.ts +10 -0
- package/dist/routes/datastores/components/DeleteDatastoreDialog.d.ts.map +1 -0
- package/dist/routes/datastores/components/DeleteDatastoreDialog.js +20 -0
- package/dist/routes/datastores/components/DeleteDatastoreDialog.js.map +1 -0
- package/dist/routes/datastores/flatten.d.ts +1 -0
- package/dist/routes/datastores/flatten.d.ts.map +1 -1
- package/dist/routes/datastores/flatten.js +17 -0
- package/dist/routes/datastores/flatten.js.map +1 -1
- package/dist/routes/datastores/hooks/useDatastoreColumns.d.ts +3 -1
- package/dist/routes/datastores/hooks/useDatastoreColumns.d.ts.map +1 -1
- package/dist/routes/datastores/hooks/useDatastoreColumns.js +14 -6
- package/dist/routes/datastores/hooks/useDatastoreColumns.js.map +1 -1
- package/dist/routes/datastores/index.d.ts.map +1 -1
- package/dist/routes/datastores/index.js +31 -5
- package/dist/routes/datastores/index.js.map +1 -1
- package/dist/routes/integrations/components/ProviderGroup.js +2 -2
- package/dist/routes/integrations/components/ProviderGroup.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/DataConnectionConnectForm.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/DataConnectionConnectForm.js +13 -6
- package/dist/routes/integrations/components/connect-forms/DataConnectionConnectForm.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/data-connection-fields.d.ts +3 -0
- package/dist/routes/integrations/components/connect-forms/data-connection-fields.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/data-connection-fields.js +9 -2
- package/dist/routes/integrations/components/connect-forms/data-connection-fields.js.map +1 -1
- package/dist/routes/plans/components/ActionPlanPage.d.ts.map +1 -1
- package/dist/routes/plans/components/ActionPlanPage.js +4 -7
- package/dist/routes/plans/components/ActionPlanPage.js.map +1 -1
- package/dist/routes/plans/components/PlanDetailRouteContent.d.ts.map +1 -1
- package/dist/routes/plans/components/PlanDetailRouteContent.js +2 -1
- package/dist/routes/plans/components/PlanDetailRouteContent.js.map +1 -1
- package/package.json +12 -7
- package/src/app-subpaths.json +1 -0
- package/src/components/channel-icon/index.tsx +1 -1
- package/src/components/chat-view/ChatTurnErrorNotice.tsx +3 -1
- package/src/components/layouts/ConnectedCustomApp.tsx +63 -0
- package/src/components/layouts/Sidebar.tsx +9 -3
- package/src/components/planning/ActioningView.tsx +62 -70
- package/src/components/planning/ManualActionCard.tsx +66 -14
- package/src/components/planning/ManualActionList.tsx +30 -11
- package/src/components/planning/actioning-view-utils.ts +27 -1
- package/src/components/table-skeleton/index.tsx +7 -1
- package/src/components/tooltip/index.tsx +35 -2
- package/src/graph/createNodeRouter.tsx +3 -3
- package/src/graph/entity-link.tsx +20 -0
- package/src/graph/graph-list-utils.ts +2 -0
- package/src/graph/graph-model.ts +15 -6
- package/src/graph/nodes/BrandAssetAnalysisView.tsx +3 -1
- package/src/graph/nodes/{BrandFontFamilyView.tsx → BrandFontSuggestionView.tsx} +41 -27
- package/src/graph/nodes/BrandGuidelinesView.tsx +1 -1
- package/src/graph/nodes/NodePropertyTable.tsx +32 -143
- package/src/graph/nodes/brand-font.ts +17 -0
- package/src/graph/nodes/brand-shared.tsx +1 -4
- package/src/graph/nodes/node-property-row.tsx +154 -0
- package/src/graph/property-formatters.ts +5 -1
- package/src/graph/special-nodes/AttributeList.tsx +177 -0
- package/src/graph/special-nodes/EntityPreview.tsx +27 -0
- package/src/graph/special-nodes/EntityValueChip.tsx +85 -0
- package/src/graph/special-nodes/GenericView.tsx +49 -139
- package/src/graph/special-nodes/card-facts.ts +278 -0
- package/src/graph/special-nodes/property-icons.ts +59 -0
- package/src/graph/status-utils.ts +40 -0
- package/src/graph/types.ts +4 -0
- package/src/hooks/use-approve-anyway.ts +100 -0
- package/src/hooks/useAuth.ts +3 -3
- package/src/hooks/useOnboardingState.ts +1 -1
- package/src/ldo-ui.ts +8 -0
- package/src/lib/datastore-route-table.ts +4 -2
- package/src/lib/manual-actions.ts +3 -2
- package/src/providers/ActiveChatProvider.tsx +3 -1
- package/src/providers/AuthContext.ts +3 -1
- package/src/providers/ChatManagerProvider.tsx +19 -9
- package/src/providers/chat-socket-auth.ts +95 -16
- package/src/providers/index.tsx +16 -1
- package/src/routes/activity/detail/ActivityChanges.tsx +21 -5
- package/src/routes/activity/detail/ActivityDetail.tsx +24 -5
- package/src/routes/activity/detail/ActivityStepsRail.tsx +4 -2
- package/src/routes/activity/detail/ActivityTimeline.tsx +2 -2
- package/src/routes/activity/detail/NoChangesMessage.tsx +20 -0
- package/src/routes/data-explorer/components/RawTriples.tsx +1 -1
- package/src/routes/data-explorer/components/RecentTypes.tsx +1 -1
- package/src/routes/data-explorer/components/class-detail/Instances.tsx +1 -1
- package/src/routes/data-explorer/components/namespace-detail/NamespaceClassRow.tsx +1 -1
- package/src/routes/data-explorer/components/ontology-coverage/CoverageTermColumns.tsx +1 -1
- package/src/routes/data-explorer/components/ontology-coverage/UnobservedRuleVocabulary.tsx +1 -1
- package/src/routes/data-explorer/components/record-detail/ChatPreview.tsx +2 -2
- package/src/routes/data-explorer/declared-namespaces.ts +21 -13
- package/src/routes/data-explorer/namespaces.ts +7 -6
- package/src/routes/datastores/components/DeleteDatastoreDialog.tsx +78 -0
- package/src/routes/datastores/flatten.ts +15 -0
- package/src/routes/datastores/hooks/useDatastoreColumns.tsx +88 -49
- package/src/routes/datastores/index.tsx +41 -2
- package/src/routes/integrations/components/ProviderGroup.tsx +2 -2
- package/src/routes/integrations/components/connect-forms/DataConnectionConnectForm.tsx +38 -12
- package/src/routes/integrations/components/connect-forms/data-connection-fields.ts +11 -2
- package/src/routes/plans/components/ActionPlanPage.tsx +9 -8
- package/src/routes/plans/components/PlanDetailRouteContent.tsx +4 -3
- package/dist/components/planning/ExecutionActivityRow.d.ts +0 -9
- package/dist/components/planning/ExecutionActivityRow.d.ts.map +0 -1
- package/dist/components/planning/ExecutionActivityRow.js +0 -53
- package/dist/components/planning/ExecutionActivityRow.js.map +0 -1
- package/dist/components/planning/ExecutionSectionItem.d.ts +0 -20
- package/dist/components/planning/ExecutionSectionItem.d.ts.map +0 -1
- package/dist/components/planning/ExecutionSectionItem.js +0 -66
- package/dist/components/planning/ExecutionSectionItem.js.map +0 -1
- package/dist/components/planning/ExecutionSections.d.ts +0 -16
- package/dist/components/planning/ExecutionSections.d.ts.map +0 -1
- package/dist/components/planning/ExecutionSections.js +0 -32
- package/dist/components/planning/ExecutionSections.js.map +0 -1
- package/dist/components/planning/action-plan-icons.d.ts +0 -3
- package/dist/components/planning/action-plan-icons.d.ts.map +0 -1
- package/dist/components/planning/action-plan-icons.js +0 -25
- package/dist/components/planning/action-plan-icons.js.map +0 -1
- package/dist/components/planning/execution-section-model.d.ts +0 -24
- package/dist/components/planning/execution-section-model.d.ts.map +0 -1
- package/dist/components/planning/execution-section-model.js +0 -150
- package/dist/components/planning/execution-section-model.js.map +0 -1
- package/dist/graph/nodes/BrandFontFamilyView.d.ts +0 -3
- package/dist/graph/nodes/BrandFontFamilyView.d.ts.map +0 -1
- package/dist/graph/nodes/BrandFontFamilyView.js.map +0 -1
- package/dist/graph/nodes/BrandFontUploadButton.d.ts +0 -6
- package/dist/graph/nodes/BrandFontUploadButton.d.ts.map +0 -1
- package/dist/graph/nodes/BrandFontUploadButton.js +0 -69
- package/dist/graph/nodes/BrandFontUploadButton.js.map +0 -1
- package/dist/routes/data-explorer/components/TruncateTooltip.d.ts +0 -7
- package/dist/routes/data-explorer/components/TruncateTooltip.d.ts.map +0 -1
- package/dist/routes/data-explorer/components/TruncateTooltip.js +0 -9
- package/dist/routes/data-explorer/components/TruncateTooltip.js.map +0 -1
- package/src/components/planning/ExecutionActivityRow.tsx +0 -89
- package/src/components/planning/ExecutionSectionItem.tsx +0 -184
- package/src/components/planning/ExecutionSections.tsx +0 -97
- package/src/components/planning/action-plan-icons.tsx +0 -27
- package/src/components/planning/execution-section-model.ts +0 -190
- package/src/graph/nodes/BrandFontUploadButton.tsx +0 -95
- package/src/routes/data-explorer/components/TruncateTooltip.tsx +0 -25
|
@@ -42,7 +42,7 @@ export function ActivityTimeline(props: ActivityTimelineProps) {
|
|
|
42
42
|
|
|
43
43
|
if (!isPresent(bars)) {
|
|
44
44
|
return (
|
|
45
|
-
<div className="rounded-xl border border-muted-border bg-card px-5 py-4">
|
|
45
|
+
<div className="shrink-0 rounded-xl border border-muted-border bg-card px-5 py-4">
|
|
46
46
|
<p className="typography-small text-muted-foreground">No timestamps to plot.</p>
|
|
47
47
|
</div>
|
|
48
48
|
);
|
|
@@ -57,7 +57,7 @@ export function ActivityTimeline(props: ActivityTimelineProps) {
|
|
|
57
57
|
const trackHeightPx = Math.max(laneCount, 1) * rowHeightPx;
|
|
58
58
|
|
|
59
59
|
return (
|
|
60
|
-
<div className="overflow-auto rounded-xl border border-muted-border bg-card">
|
|
60
|
+
<div className="shrink-0 overflow-auto rounded-xl border border-muted-border bg-card">
|
|
61
61
|
<div className="px-5 pb-3 pt-3" style={{ minWidth: `${trackMinWidthPx}px` }}>
|
|
62
62
|
<div className="relative h-4">
|
|
63
63
|
{ticks.map((tick, index) => (
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Loader } from "#components/loader/index";
|
|
2
|
+
|
|
3
|
+
type NoChangesMessageProps = {
|
|
4
|
+
running?: boolean;
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
export function NoChangesMessage(props: NoChangesMessageProps) {
|
|
8
|
+
const { running = false } = props;
|
|
9
|
+
|
|
10
|
+
if (!running) {
|
|
11
|
+
return <p className="typography-small text-muted-foreground">No recorded changes.</p>;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<p role="status" className="flex items-center gap-2 typography-small text-muted-foreground">
|
|
16
|
+
<Loader className="size-4 shrink-0" />
|
|
17
|
+
Running. Changes appear as each step completes.
|
|
18
|
+
</p>
|
|
19
|
+
);
|
|
20
|
+
}
|
|
@@ -7,8 +7,8 @@ import type { ReactNode } from "react";
|
|
|
7
7
|
import { Link } from "react-router";
|
|
8
8
|
import { useTriples } from "../triples";
|
|
9
9
|
import { turtleForSubject } from "../turtle";
|
|
10
|
-
import { TruncateTooltip } from "./TruncateTooltip";
|
|
11
10
|
import { Skeleton } from "#components/skeleton/index";
|
|
11
|
+
import { TruncateTooltip } from "#components/tooltip/index";
|
|
12
12
|
import { decodeSkolem, isBlankNode, useInstanceLabel } from "#ldo-ui";
|
|
13
13
|
import { cn } from "#lib/utils";
|
|
14
14
|
|
|
@@ -16,8 +16,8 @@ import { Breadcrumbs } from "./Breadcrumbs";
|
|
|
16
16
|
import { DetailHeader, TypeBadge } from "./DetailHeader";
|
|
17
17
|
import { ModifiedAgo } from "./ModifiedAgo";
|
|
18
18
|
import { EntityName, LinkList, LinkRow, LoadingRows, StatusText } from "./RawTriples";
|
|
19
|
-
import { TruncateTooltip } from "./TruncateTooltip";
|
|
20
19
|
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "#components/collapsible/index";
|
|
20
|
+
import { TruncateTooltip } from "#components/tooltip/index";
|
|
21
21
|
import { cn } from "#lib/utils";
|
|
22
22
|
|
|
23
23
|
type RecentInstanceRowsProps = { recentType: RecentType };
|
|
@@ -7,7 +7,7 @@ import { LoadMoreButton } from "../LoadMoreButton";
|
|
|
7
7
|
import { ModifiedAgo } from "../ModifiedAgo";
|
|
8
8
|
import { entityNameClass, EntityName, LinkList, LinkRow, LoadingRows, StatusText } from "../RawTriples";
|
|
9
9
|
import { SegmentBuilder } from "../SegmentBuilder";
|
|
10
|
-
import { TruncateTooltip } from "
|
|
10
|
+
import { TruncateTooltip } from "#components/tooltip/index";
|
|
11
11
|
import { encodeBlankKey, useBlankInstances } from "#routes/data-explorer/blank-record";
|
|
12
12
|
import { useFilteredCount, useFilteredInstances } from "#routes/data-explorer/filter-hooks";
|
|
13
13
|
import { classAnchor, hasActiveConditions, type SegmentFilter } from "#routes/data-explorer/filter-query";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { humanCount } from "@manta-eu/lib/humanize";
|
|
2
2
|
import { classPath } from "../../namespaces";
|
|
3
3
|
import { entityNameClass, LinkRow } from "../RawTriples";
|
|
4
|
-
import { TruncateTooltip } from "
|
|
4
|
+
import { TruncateTooltip } from "#components/tooltip/index";
|
|
5
5
|
import type { ExplorerClass } from "#routes/data-explorer/classes";
|
|
6
6
|
|
|
7
7
|
type NamespaceClassRowProps = { entry: ExplorerClass; count?: number };
|
|
@@ -4,10 +4,10 @@ import { useMemo } from "react";
|
|
|
4
4
|
import { Link } from "react-router";
|
|
5
5
|
import { classRef, namespaceLabel } from "../../namespaces";
|
|
6
6
|
import { NamespaceSwatch } from "../NamespaceSwatch";
|
|
7
|
-
import { TruncateTooltip } from "../TruncateTooltip";
|
|
8
7
|
import { MissingValue } from "./MissingValue";
|
|
9
8
|
import { RuleReferencesCell } from "./RuleReferencesCell";
|
|
10
9
|
import { Badge } from "#components/badge/index";
|
|
10
|
+
import { TruncateTooltip } from "#components/tooltip/index";
|
|
11
11
|
import { sectionLabelClass } from "#ldo-ui";
|
|
12
12
|
import { cn } from "#lib/utils";
|
|
13
13
|
import type { CoverageTerm } from "#routes/data-explorer/coverage";
|
|
@@ -6,13 +6,13 @@ import { useEffect, useMemo, useState } from "react";
|
|
|
6
6
|
import { Link } from "react-router";
|
|
7
7
|
import { classRef, namespaceLabel } from "../../namespaces";
|
|
8
8
|
import { NamespaceSwatch } from "../NamespaceSwatch";
|
|
9
|
-
import { TruncateTooltip } from "../TruncateTooltip";
|
|
10
9
|
import { RuleReferencesCell } from "./RuleReferencesCell";
|
|
11
10
|
import { Badge } from "#components/badge/index";
|
|
12
11
|
import { EmptyState } from "#components/empty-state/index";
|
|
13
12
|
import { SearchInput } from "#components/input/index";
|
|
14
13
|
import { PaginationBlock } from "#components/pagination/index";
|
|
15
14
|
import { createTableConfig, DataTable } from "#components/table/index";
|
|
15
|
+
import { TruncateTooltip } from "#components/tooltip/index";
|
|
16
16
|
import { shouldClampPageIndex, useFittedPagination } from "#hooks/useFittedPagination";
|
|
17
17
|
import { sectionLabelClass } from "#ldo-ui";
|
|
18
18
|
import { cn } from "#lib/utils";
|
|
@@ -90,14 +90,14 @@ export function ChatPreview(props: ChatPreviewProps) {
|
|
|
90
90
|
|
|
91
91
|
if (!node) return <StatusText>Nothing to preview.</StatusText>;
|
|
92
92
|
|
|
93
|
-
const EntityView = getEntityView(node.data.type, node.data.actionShape)
|
|
93
|
+
const EntityView = getEntityView(node.data.type, node.data.actionShape);
|
|
94
94
|
|
|
95
95
|
return (
|
|
96
96
|
<div className="flex flex-col gap-6">
|
|
97
97
|
<section>
|
|
98
98
|
<h3 className={cn(sectionLabelClass, "mb-1.5 text-muted-foreground")}>Chat rendering</h3>
|
|
99
99
|
<div className="max-w-md">
|
|
100
|
-
<EntityView data={node.data} />
|
|
100
|
+
{EntityView ? <EntityView data={node.data} /> : <GenericView data={node.data} defaultExpanded />}
|
|
101
101
|
</div>
|
|
102
102
|
</section>
|
|
103
103
|
|
|
@@ -1,22 +1,29 @@
|
|
|
1
|
-
import { ontologyGraphIri } from "@manta-eu/client/shared/rdf-namespaces";
|
|
1
|
+
import { expandPrefix, ontologyGraphIri } from "@manta-eu/client/shared/rdf-namespaces";
|
|
2
2
|
import { isPresent } from "@manta-eu/lib/present";
|
|
3
3
|
import { DataFactory, type RDF } from "ldkit/rdf";
|
|
4
4
|
import { SELECT } from "ldkit/sparql";
|
|
5
5
|
import { useMemo } from "react";
|
|
6
|
-
import { prefixes, registerDeclaredNamespaces, type DeclaredNamespace } from "./namespaces";
|
|
6
|
+
import { prefixes, realmPath, registerDeclaredNamespaces, type DeclaredNamespace } from "./namespaces";
|
|
7
7
|
import { bindingValue, useSparqlSelect } from "#ldo-ui";
|
|
8
8
|
|
|
9
9
|
const df = new DataFactory();
|
|
10
10
|
|
|
11
|
-
const declaredNamespacesQuery = `${prefixes}${SELECT`?prefix ?namespace ?source ?title ?sourceLabel
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
?declaration
|
|
17
|
-
OPTIONAL {
|
|
18
|
-
|
|
11
|
+
const declaredNamespacesQuery = `${prefixes}${SELECT`?prefix ?namespace ?source ?title ?sourceLabel ?connectionName`
|
|
12
|
+
.WHERE`
|
|
13
|
+
{
|
|
14
|
+
GRAPH ${df.namedNode(ontologyGraphIri)} {
|
|
15
|
+
[] sh:declare ?declaration .
|
|
16
|
+
?declaration sh:prefix ?prefix ; sh:namespace ?namespace .
|
|
17
|
+
OPTIONAL {
|
|
18
|
+
?declaration rdfs:isDefinedBy ?source .
|
|
19
|
+
OPTIONAL { ?source dcterms:title ?title }
|
|
20
|
+
OPTIONAL { ?source rdfs:label ?sourceLabel }
|
|
21
|
+
}
|
|
19
22
|
}
|
|
23
|
+
} UNION {
|
|
24
|
+
?declaration a sh:PrefixDeclaration ; sh:namespace ?namespace ; schema:identifier ?id .
|
|
25
|
+
?connection a ${df.namedNode(expandPrefix(":DataConnection"))} ; schema:identifier ?id ; schema:name ?connectionName .
|
|
26
|
+
FILTER NOT EXISTS { ?connection ${df.namedNode(expandPrefix(":deletedAt"))} ?deleted }
|
|
20
27
|
}
|
|
21
28
|
`.build()}`;
|
|
22
29
|
|
|
@@ -28,15 +35,16 @@ function sourceFrom(binding: RDF.Bindings) {
|
|
|
28
35
|
return { iri, label: bindingValue(binding, "title") ?? bindingValue(binding, "sourceLabel") ?? iri };
|
|
29
36
|
}
|
|
30
37
|
|
|
31
|
-
function declaredNamespacesFrom(bindings: RDF.Bindings[]): Record<string, DeclaredNamespace> {
|
|
38
|
+
export function declaredNamespacesFrom(bindings: RDF.Bindings[]): Record<string, DeclaredNamespace> {
|
|
32
39
|
return Object.fromEntries(
|
|
33
40
|
bindings.flatMap<[string, DeclaredNamespace]>((binding) => {
|
|
34
|
-
const prefix = bindingValue(binding, "prefix");
|
|
35
41
|
const iri = bindingValue(binding, "namespace");
|
|
42
|
+
const connectionName = bindingValue(binding, "connectionName");
|
|
43
|
+
const prefix = isPresent(connectionName) && isPresent(iri) ? realmPath(iri) : bindingValue(binding, "prefix");
|
|
36
44
|
|
|
37
45
|
if (!isPresent(prefix) || !isPresent(iri)) return [];
|
|
38
46
|
|
|
39
|
-
return [[prefix, { iri, label: prefix, source: sourceFrom(binding) }]];
|
|
47
|
+
return [[prefix, { iri, label: connectionName ?? prefix, source: sourceFrom(binding) }]];
|
|
40
48
|
}),
|
|
41
49
|
);
|
|
42
50
|
}
|
|
@@ -78,12 +78,13 @@ export function prefixForIri(iri: string): string | undefined {
|
|
|
78
78
|
|
|
79
79
|
if (registered) return registered;
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
return realmPath(iri);
|
|
82
|
+
}
|
|
82
83
|
|
|
83
|
-
|
|
84
|
-
|
|
84
|
+
export function realmPath(iri: string): string | undefined {
|
|
85
|
+
if (!iri.startsWith(realmVocabRoot) || !iri.includes("#")) return undefined;
|
|
85
86
|
|
|
86
|
-
return
|
|
87
|
+
return iri.slice(realmVocabRoot.length).split("#")[0] || undefined;
|
|
87
88
|
}
|
|
88
89
|
|
|
89
90
|
export function localName(iri: string, prefix: string): string {
|
|
@@ -118,11 +119,11 @@ export function groupCrumb(prefix: string): { label: string; to: string } {
|
|
|
118
119
|
}
|
|
119
120
|
|
|
120
121
|
export function classPath(prefix: string, name: string): string {
|
|
121
|
-
return `${
|
|
122
|
+
return `${namespacePath(prefix)}/${name}`;
|
|
122
123
|
}
|
|
123
124
|
|
|
124
125
|
export function recordPath(prefix: string, type: string, id: string): string {
|
|
125
|
-
return `${
|
|
126
|
+
return `${classPath(prefix, type)}/${encodeURIComponent(id)}`;
|
|
126
127
|
}
|
|
127
128
|
|
|
128
129
|
export type ClassRef = { iri: string; prefix: string; localName: string; path: string };
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { useState } from "react";
|
|
2
|
+
import type { DatastoreRow } from "../flatten";
|
|
3
|
+
import { Button } from "#components/button/index";
|
|
4
|
+
import { Input } from "#components/input/index";
|
|
5
|
+
import {
|
|
6
|
+
Dialog,
|
|
7
|
+
DialogContent,
|
|
8
|
+
DialogDescription,
|
|
9
|
+
DialogFooter,
|
|
10
|
+
DialogHeader,
|
|
11
|
+
DialogTitle,
|
|
12
|
+
} from "#components/modal/index";
|
|
13
|
+
|
|
14
|
+
type DeleteDatastoreDialogProps = {
|
|
15
|
+
target: DatastoreRow;
|
|
16
|
+
isDeleting: boolean;
|
|
17
|
+
onConfirm: (confirmName: string) => void;
|
|
18
|
+
onCancel: () => void;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export function DeleteDatastoreDialog(props: DeleteDatastoreDialogProps) {
|
|
22
|
+
const { target, isDeleting, onConfirm, onCancel } = props;
|
|
23
|
+
const [typed, setTyped] = useState("");
|
|
24
|
+
|
|
25
|
+
const canDelete = typed.trim() === target.name.trim() && !isDeleting;
|
|
26
|
+
const deletesOrganization = target.isOrganization && target.mirrored !== true;
|
|
27
|
+
|
|
28
|
+
function confirm() {
|
|
29
|
+
if (canDelete) onConfirm(target.name);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<Dialog open onOpenChange={(nextOpen) => !nextOpen && !isDeleting && onCancel()}>
|
|
34
|
+
<DialogContent className="flex flex-col overflow-hidden" showCloseButton={!isDeleting}>
|
|
35
|
+
<DialogHeader>
|
|
36
|
+
<DialogTitle
|
|
37
|
+
text={deletesOrganization ? "Delete organization permanently" : "Delete datastore permanently"}
|
|
38
|
+
/>
|
|
39
|
+
<DialogDescription>This can't be undone. Deleting "{target.name}" removes:</DialogDescription>
|
|
40
|
+
</DialogHeader>
|
|
41
|
+
|
|
42
|
+
<ul className="list-disc pl-5 typography-small text-muted-foreground">
|
|
43
|
+
<li>its knowledge graph and everything in it</li>
|
|
44
|
+
<li>its connected integrations and their secrets</li>
|
|
45
|
+
<li>its uploaded files and chats</li>
|
|
46
|
+
{deletesOrganization && <li>the organization, its groups and memberships</li>}
|
|
47
|
+
{!target.isOrganization && !target.isUnlinked && <li>the group and its memberships</li>}
|
|
48
|
+
</ul>
|
|
49
|
+
{target.isOrganization && !deletesOrganization && (
|
|
50
|
+
<p className="typography-small text-muted-foreground">
|
|
51
|
+
The organization itself stays, because the identity provider holds it. It is listed as having no datastore
|
|
52
|
+
afterwards.
|
|
53
|
+
</p>
|
|
54
|
+
)}
|
|
55
|
+
|
|
56
|
+
<Input
|
|
57
|
+
autoFocus
|
|
58
|
+
label={`Type "${target.name}" to confirm`}
|
|
59
|
+
value={typed}
|
|
60
|
+
disabled={isDeleting}
|
|
61
|
+
onChange={(event) => setTyped(event.target.value)}
|
|
62
|
+
onKeyDown={(event) => {
|
|
63
|
+
if (event.key === "Enter") confirm();
|
|
64
|
+
}}
|
|
65
|
+
/>
|
|
66
|
+
|
|
67
|
+
<DialogFooter>
|
|
68
|
+
<Button variant="tertiary" onClick={onCancel} disabled={isDeleting}>
|
|
69
|
+
Cancel
|
|
70
|
+
</Button>
|
|
71
|
+
<Button variant="destructive" onClick={confirm} disabled={!canDelete} isLoading={isDeleting}>
|
|
72
|
+
Delete permanently
|
|
73
|
+
</Button>
|
|
74
|
+
</DialogFooter>
|
|
75
|
+
</DialogContent>
|
|
76
|
+
</Dialog>
|
|
77
|
+
);
|
|
78
|
+
}
|
|
@@ -79,6 +79,21 @@ export function visibleDatastoreRows(rows: DatastoreRow[], visibility: Datastore
|
|
|
79
79
|
return rows.filter((_row, index) => shown[index] || hasVisibleDescendant(rows, shown, index));
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
+
// The server refuses to delete a datastore while others live under it.
|
|
83
|
+
export function nestedDatastoreNamesByRowId(rows: DatastoreRow[]): Map<string, string[]> {
|
|
84
|
+
const nested = new Map<string, string[]>();
|
|
85
|
+
rows.forEach((row, index) => {
|
|
86
|
+
const names: string[] = [];
|
|
87
|
+
for (let i = index + 1; i < rows.length; i++) {
|
|
88
|
+
const descendant = rows[i];
|
|
89
|
+
if (!descendant || descendant.depth <= row.depth) break;
|
|
90
|
+
if (isPresent(descendant.datastoreId)) names.push(descendant.name);
|
|
91
|
+
}
|
|
92
|
+
if (isPresent(names)) nested.set(row.id, names);
|
|
93
|
+
});
|
|
94
|
+
return nested;
|
|
95
|
+
}
|
|
96
|
+
|
|
82
97
|
export function hiddenRowCount(
|
|
83
98
|
rows: DatastoreRow[],
|
|
84
99
|
visibility: DatastoreRowVisibility,
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
Power,
|
|
14
14
|
RefreshCw,
|
|
15
15
|
RotateCcw,
|
|
16
|
+
Trash,
|
|
16
17
|
Trash2,
|
|
17
18
|
TriangleAlert,
|
|
18
19
|
Users,
|
|
@@ -28,6 +29,7 @@ import { isUnmirroredOrganization, type DatastoreRow } from "../flatten";
|
|
|
28
29
|
import { Badge } from "#components/badge/index";
|
|
29
30
|
import { Button } from "#components/button/index";
|
|
30
31
|
import { datastoreStatusCategory, isMaterializing, type DatastoreStatus } from "#components/datastore-management/tree";
|
|
32
|
+
import { DisabledActionTooltip } from "#components/disabled-action-tooltip/index";
|
|
31
33
|
import {
|
|
32
34
|
Dropdown,
|
|
33
35
|
DropdownContent,
|
|
@@ -99,6 +101,7 @@ type UseDatastoreColumnsArgs = {
|
|
|
99
101
|
// Indentation only means something while rows are in hierarchy order; a sort makes it a lie.
|
|
100
102
|
indented: boolean;
|
|
101
103
|
matchableRowIds: Set<string>;
|
|
104
|
+
nestedDatastoreNamesByRowId: Map<string, string[]>;
|
|
102
105
|
suggestedMatchByDatastoreId?: Record<string, DatastoreRow>;
|
|
103
106
|
onSelect: (row: DatastoreRow) => void;
|
|
104
107
|
onAddChild: (row: DatastoreRow) => void;
|
|
@@ -107,10 +110,11 @@ type UseDatastoreColumnsArgs = {
|
|
|
107
110
|
onLinkExisting: (row: DatastoreRow) => void;
|
|
108
111
|
onRemove: (row: DatastoreRow) => void;
|
|
109
112
|
onRestore: (row: DatastoreRow) => void;
|
|
113
|
+
onDelete: (row: DatastoreRow) => void;
|
|
110
114
|
onRename: (row: DatastoreRow) => void;
|
|
111
115
|
onRegister: (row: DatastoreRow) => void;
|
|
112
116
|
onManageUsers: (row: DatastoreRow) => void;
|
|
113
|
-
|
|
117
|
+
onManageCustomApps: (row: DatastoreRow) => void;
|
|
114
118
|
onBringOnline: (row: DatastoreRow) => void;
|
|
115
119
|
isBringingOnline?: boolean;
|
|
116
120
|
onLinkProvider: (row: DatastoreRow) => void;
|
|
@@ -125,6 +129,7 @@ export function useDatastoreColumns(args: UseDatastoreColumnsArgs): ColumnDef<Da
|
|
|
125
129
|
isSwitching,
|
|
126
130
|
indented,
|
|
127
131
|
matchableRowIds,
|
|
132
|
+
nestedDatastoreNamesByRowId,
|
|
128
133
|
suggestedMatchByDatastoreId,
|
|
129
134
|
onSelect,
|
|
130
135
|
onAddChild,
|
|
@@ -133,10 +138,11 @@ export function useDatastoreColumns(args: UseDatastoreColumnsArgs): ColumnDef<Da
|
|
|
133
138
|
onLinkExisting,
|
|
134
139
|
onRemove,
|
|
135
140
|
onRestore,
|
|
141
|
+
onDelete,
|
|
136
142
|
onRename,
|
|
137
143
|
onRegister,
|
|
138
144
|
onManageUsers,
|
|
139
|
-
|
|
145
|
+
onManageCustomApps,
|
|
140
146
|
onBringOnline,
|
|
141
147
|
isBringingOnline,
|
|
142
148
|
onLinkProvider,
|
|
@@ -310,6 +316,11 @@ export function useDatastoreColumns(args: UseDatastoreColumnsArgs): ColumnDef<Da
|
|
|
310
316
|
.with({ materializing: true }, () => "Still materializing - this can take a few minutes.")
|
|
311
317
|
.otherwise(() => undefined);
|
|
312
318
|
const canSelect = hasDatastore && !reason && !current && !isSwitching;
|
|
319
|
+
const canDelete = hasDatastore && !current;
|
|
320
|
+
const nestedDatastoreNames = nestedDatastoreNamesByRowId.get(datastoreRow.id);
|
|
321
|
+
const deleteBlockedReason = isPresent(nestedDatastoreNames)
|
|
322
|
+
? `Delete the datastores under it first: ${nestedDatastoreNames.join(", ")}`
|
|
323
|
+
: undefined;
|
|
313
324
|
|
|
314
325
|
return (
|
|
315
326
|
<div className={cn(columnMinWidths[datastoreColumnIds.actions], "flex items-center justify-end gap-1.5")}>
|
|
@@ -376,7 +387,7 @@ export function useDatastoreColumns(args: UseDatastoreColumnsArgs): ColumnDef<Da
|
|
|
376
387
|
Select
|
|
377
388
|
</Button>
|
|
378
389
|
)}
|
|
379
|
-
{isRealmDefault || isUnlinked ? (
|
|
390
|
+
{isRealmDefault || (isUnlinked && !canDelete) ? (
|
|
380
391
|
// Same-sized spacer keeps Select/Selected aligned with rows that have the ellipsis.
|
|
381
392
|
<div className="size-6" aria-hidden="true" />
|
|
382
393
|
) : (
|
|
@@ -391,57 +402,83 @@ export function useDatastoreColumns(args: UseDatastoreColumnsArgs): ColumnDef<Da
|
|
|
391
402
|
</button>
|
|
392
403
|
</DropdownTrigger>
|
|
393
404
|
<DropdownContent align="end" className="min-w-52">
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
<DropdownItem icon={<Users className="size-4" />} onSelect={() => onManageUsers(datastoreRow)}>
|
|
399
|
-
Manage users
|
|
400
|
-
</DropdownItem>
|
|
401
|
-
)}
|
|
402
|
-
{datastoreRow.isOrganization && isPresent(datastoreRow.organizationAlias) && (
|
|
403
|
-
<DropdownItem
|
|
404
|
-
icon={<Blocks className="size-4" />}
|
|
405
|
-
onSelect={() => onManageExternalApps(datastoreRow)}
|
|
406
|
-
>
|
|
407
|
-
Custom apps
|
|
408
|
-
</DropdownItem>
|
|
409
|
-
)}
|
|
410
|
-
{!hasDatastore &&
|
|
411
|
-
(matchableRowIds.has(datastoreRow.id) ? (
|
|
412
|
-
<DropdownItem icon={<Link2 className="size-4" />} onSelect={() => onLinkExisting(datastoreRow)}>
|
|
413
|
-
Link existing datastore
|
|
405
|
+
{!isUnlinked && (
|
|
406
|
+
<>
|
|
407
|
+
<DropdownItem icon={<Pencil className="size-4" />} onSelect={() => onRename(datastoreRow)}>
|
|
408
|
+
Rename
|
|
414
409
|
</DropdownItem>
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
410
|
+
{isPresent(datastoreRow.organizationAlias) && (
|
|
411
|
+
<DropdownItem
|
|
412
|
+
icon={<Users className="size-4" />}
|
|
413
|
+
onSelect={() => onManageUsers(datastoreRow)}
|
|
414
|
+
>
|
|
415
|
+
Manage users
|
|
416
|
+
</DropdownItem>
|
|
417
|
+
)}
|
|
418
|
+
{datastoreRow.isOrganization && isPresent(datastoreRow.organizationAlias) && (
|
|
419
|
+
<DropdownItem
|
|
420
|
+
icon={<Blocks className="size-4" />}
|
|
421
|
+
onSelect={() => onManageCustomApps(datastoreRow)}
|
|
422
|
+
>
|
|
423
|
+
Custom apps
|
|
424
|
+
</DropdownItem>
|
|
425
|
+
)}
|
|
426
|
+
{!hasDatastore &&
|
|
427
|
+
(matchableRowIds.has(datastoreRow.id) ? (
|
|
428
|
+
<DropdownItem
|
|
429
|
+
icon={<Link2 className="size-4" />}
|
|
430
|
+
onSelect={() => onLinkExisting(datastoreRow)}
|
|
431
|
+
>
|
|
432
|
+
Link existing datastore
|
|
433
|
+
</DropdownItem>
|
|
434
|
+
) : (
|
|
435
|
+
<DropdownItem
|
|
436
|
+
icon={<DatabaseZap className="size-4" />}
|
|
437
|
+
onSelect={() => onProvision(datastoreRow)}
|
|
438
|
+
>
|
|
439
|
+
Provision datastore
|
|
440
|
+
</DropdownItem>
|
|
441
|
+
))}
|
|
442
|
+
<DropdownItem icon={<Plus className="size-4" />} onSelect={() => onAddChild(datastoreRow)}>
|
|
443
|
+
Add datastore
|
|
421
444
|
</DropdownItem>
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
445
|
+
{enableDatastoreRemoval && hasDatastore && !removed && (
|
|
446
|
+
<>
|
|
447
|
+
<DropdownSeparator />
|
|
448
|
+
<DropdownItem
|
|
449
|
+
className="text-error-foreground"
|
|
450
|
+
icon={<Trash2 className="size-4" />}
|
|
451
|
+
onSelect={() => onRemove(datastoreRow)}
|
|
452
|
+
>
|
|
453
|
+
Remove datastore
|
|
454
|
+
</DropdownItem>
|
|
455
|
+
</>
|
|
456
|
+
)}
|
|
457
|
+
{enableDatastoreRemoval && hasDatastore && removed && (
|
|
458
|
+
<>
|
|
459
|
+
<DropdownSeparator />
|
|
460
|
+
<DropdownItem
|
|
461
|
+
icon={<RotateCcw className="size-4" />}
|
|
462
|
+
onSelect={() => onRestore(datastoreRow)}
|
|
463
|
+
>
|
|
464
|
+
Restore datastore
|
|
465
|
+
</DropdownItem>
|
|
466
|
+
</>
|
|
467
|
+
)}
|
|
468
|
+
{!enableDatastoreRemoval && canDelete && <DropdownSeparator />}
|
|
469
|
+
</>
|
|
470
|
+
)}
|
|
471
|
+
{canDelete && (
|
|
472
|
+
<DisabledActionTooltip reason={deleteBlockedReason}>
|
|
429
473
|
<DropdownItem
|
|
430
474
|
className="text-error-foreground"
|
|
431
|
-
icon={<
|
|
432
|
-
|
|
475
|
+
icon={<Trash className="size-4" />}
|
|
476
|
+
disabled={isPresent(deleteBlockedReason)}
|
|
477
|
+
onSelect={() => onDelete(datastoreRow)}
|
|
433
478
|
>
|
|
434
|
-
|
|
435
|
-
</DropdownItem>
|
|
436
|
-
</>
|
|
437
|
-
)}
|
|
438
|
-
{enableDatastoreRemoval && hasDatastore && removed && (
|
|
439
|
-
<>
|
|
440
|
-
<DropdownSeparator />
|
|
441
|
-
<DropdownItem icon={<RotateCcw className="size-4" />} onSelect={() => onRestore(datastoreRow)}>
|
|
442
|
-
Restore datastore
|
|
479
|
+
Delete permanently
|
|
443
480
|
</DropdownItem>
|
|
444
|
-
|
|
481
|
+
</DisabledActionTooltip>
|
|
445
482
|
)}
|
|
446
483
|
</DropdownContent>
|
|
447
484
|
</Dropdown>
|
|
@@ -457,6 +494,7 @@ export function useDatastoreColumns(args: UseDatastoreColumnsArgs): ColumnDef<Da
|
|
|
457
494
|
isSwitching,
|
|
458
495
|
indented,
|
|
459
496
|
matchableRowIds,
|
|
497
|
+
nestedDatastoreNamesByRowId,
|
|
460
498
|
suggestedMatchByDatastoreId,
|
|
461
499
|
onSelect,
|
|
462
500
|
onAddChild,
|
|
@@ -465,10 +503,11 @@ export function useDatastoreColumns(args: UseDatastoreColumnsArgs): ColumnDef<Da
|
|
|
465
503
|
onLinkExisting,
|
|
466
504
|
onRemove,
|
|
467
505
|
onRestore,
|
|
506
|
+
onDelete,
|
|
468
507
|
onRegister,
|
|
469
508
|
onRename,
|
|
470
509
|
onManageUsers,
|
|
471
|
-
|
|
510
|
+
onManageCustomApps,
|
|
472
511
|
onBringOnline,
|
|
473
512
|
isBringingOnline,
|
|
474
513
|
onLinkProvider,
|