@manta-eu/react 0.8.0 → 0.9.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/dist/action-plan-changes/ActionPlanChangesTable.js +1 -1
- package/dist/action-plan-changes/build-change-tree.js.map +1 -1
- package/dist/ad-preview/AdPluralDisplay.js +1 -1
- package/dist/ad-preview/GoogleAdGroupAdSingularDisplay.js +1 -3
- package/dist/ad-preview/GoogleAdGroupAdSingularDisplay.js.map +1 -1
- package/dist/ad-preview/MetaAdPreview.js +1 -1
- package/dist/ad-preview/meta-ad-copy.d.ts.map +1 -1
- package/dist/ad-preview/meta-ad-model.js.map +1 -1
- package/dist/components/ErrorBoundary.d.ts.map +1 -1
- package/dist/components/ad-preview/business-avatar.d.ts.map +1 -1
- package/dist/components/ad-preview/business-identity.d.ts.map +1 -1
- package/dist/components/ad-preview/business-info.d.ts.map +1 -1
- package/dist/components/ad-preview/facebook/carousel.d.ts.map +1 -1
- package/dist/components/ad-preview/facebook/constants.d.ts.map +1 -1
- package/dist/components/ad-preview/facebook/header.js +1 -1
- package/dist/components/ad-preview/facebook/instream-reels.d.ts.map +1 -1
- package/dist/components/ad-preview/facebook/marketplace.d.ts.map +1 -1
- package/dist/components/ad-preview/google/search.js +1 -1
- package/dist/components/ad-preview/instagram/feed.js +1 -1
- package/dist/components/ad-preview/instagram/search-result.d.ts.map +1 -1
- package/dist/components/ad-preview/use-scroll-navigation.d.ts.map +1 -1
- package/dist/components/ai-elements/conversation.js +1 -1
- package/dist/components/badge/index.d.ts.map +1 -1
- package/dist/components/badge/index.js +1 -1
- package/dist/components/banner/index.d.ts.map +1 -1
- package/dist/components/branding/MantaGridAnimation.js +1 -1
- package/dist/components/breadcrumbs/index.js +1 -1
- package/dist/components/button/index.d.ts.map +1 -1
- package/dist/components/calendar/index.js +2 -2
- package/dist/components/card/index.d.ts.map +1 -1
- package/dist/components/chart/ForecastEventCard.js +1 -1
- package/dist/components/chart/ForecastHoverCard.js +1 -1
- package/dist/components/chart/ForecastLegend.d.ts.map +1 -1
- package/dist/components/chart/ForecastLegend.js +10 -2
- package/dist/components/chart/ForecastLegend.js.map +1 -1
- package/dist/components/chart/annotations.d.ts.map +1 -1
- package/dist/components/chart/chart-colors.d.ts.map +1 -1
- package/dist/components/chart/chart-schemas.d.ts +599 -599
- package/dist/components/chart/chart-schemas.d.ts.map +1 -1
- package/dist/components/chart/chart-schemas.js.map +1 -1
- package/dist/components/chart/chart.js +1 -1
- package/dist/components/chart/forecast-model.d.ts +1 -1
- package/dist/components/chart/forecast-model.d.ts.map +1 -1
- package/dist/components/chart/forecast-model.js.map +1 -1
- package/dist/components/chart/forecast.d.ts.map +1 -1
- package/dist/components/chat/chat-input/index.d.ts +1 -1
- package/dist/components/chat/chat-input/index.js +1 -1
- package/dist/components/chat/chat-input-footer/index.js +1 -1
- package/dist/components/chat/chat-reasoning/index.js +1 -1
- package/dist/components/chat-view/Chat.js +3 -3
- package/dist/components/chat-view/FileMessagePart.js +1 -1
- package/dist/components/chat-view/GraphContextPanel.js +1 -1
- package/dist/components/chat-view/MessageItem.js +1 -1
- package/dist/components/command/index.d.ts +15 -15
- package/dist/components/command/index.d.ts.map +1 -1
- package/dist/components/command/index.js +1 -1
- package/dist/components/dropdown/index.js +1 -1
- package/dist/components/file-dropzone/index.d.ts +25 -0
- package/dist/components/file-dropzone/index.d.ts.map +1 -0
- package/dist/components/file-dropzone/index.js +70 -0
- package/dist/components/file-dropzone/index.js.map +1 -0
- package/dist/components/graph/AgentsGraphListRow.js +1 -1
- package/dist/components/input/ai-action-buttons.js +1 -1
- package/dist/components/input/input-date-range.js +1 -1
- package/dist/components/input/input-field.d.ts.map +1 -1
- package/dist/components/input/input-field.js +1 -1
- package/dist/components/input/textarea.d.ts.map +1 -1
- package/dist/components/input/textarea.js +2 -2
- package/dist/components/input-otp/index.d.ts +6 -6
- package/dist/components/input-otp/index.d.ts.map +1 -1
- package/dist/components/layouts/InstallPrompt.js +1 -1
- package/dist/components/layouts/KnowledgeGraphStartupGate.d.ts +1 -1
- package/dist/components/layouts/RouteLayout.js +1 -1
- package/dist/components/layouts/page/PageHeaderActions.js +1 -1
- package/dist/components/loader/index.d.ts.map +1 -1
- package/dist/components/manta-logo/index.d.ts.map +1 -1
- package/dist/components/modal/index.d.ts.map +1 -1
- package/dist/components/onboarding/SidebarSpotlight.js +1 -1
- package/dist/components/pill/index.d.ts.map +1 -1
- package/dist/components/planning/ActionPlanDetailView.js +1 -1
- package/dist/components/planning/ManualActionList.d.ts +1 -1
- package/dist/components/planning/PlanDetailFooter.js +1 -1
- package/dist/components/planning/plan-detail-utils.d.ts.map +1 -1
- package/dist/components/planning/plan-detail-utils.js +2 -0
- package/dist/components/planning/plan-detail-utils.js.map +1 -1
- package/dist/components/progress/index.d.ts.map +1 -1
- package/dist/components/radio/index.d.ts.map +1 -1
- package/dist/components/rdf-insights/CampaignPerformanceSummary.js +1 -1
- package/dist/components/rdf-insights/InsightCard.js +1 -1
- package/dist/components/rdf-insights/ProductProfitability.js +1 -1
- package/dist/components/rdf-insights/ProductSalesRanking.js +1 -1
- package/dist/components/rdf-insights/ProductVariantsTable.js +1 -1
- package/dist/components/rdf-insights/RoasBenchmark.js +1 -1
- package/dist/components/select/index.d.ts.map +1 -1
- package/dist/components/sheet/index.d.ts.map +1 -1
- package/dist/components/sidebar/company-picker.js +1 -1
- package/dist/components/sidebar/nav-menu.js +1 -1
- package/dist/components/skeleton/index.d.ts +4 -4
- package/dist/components/skeleton/index.d.ts.map +1 -1
- package/dist/components/status/index.d.ts.map +1 -1
- package/dist/components/table/index.d.ts.map +1 -1
- package/dist/components/table/index.js.map +1 -1
- package/dist/components/table/use-table-state.js.map +1 -1
- package/dist/components/table-skeleton/index.js +1 -1
- package/dist/components/tabs/index.d.ts.map +1 -1
- package/dist/components/thinking/index.d.ts.map +1 -1
- package/dist/components/toast/index.d.ts +1 -0
- package/dist/components/toast/index.d.ts.map +1 -1
- package/dist/components/toast/index.js +1 -0
- package/dist/components/toast/index.js.map +1 -1
- package/dist/components/tool-invocation-card/DefaultResultDisplay.js +1 -1
- package/dist/components/tool-invocation-card/ToolOutputRenderer.js +1 -1
- package/dist/components/tree-multi-select/tree-multi-select-rows.js.map +1 -1
- package/dist/datastore-picker/DatastoreRow.js +1 -1
- package/dist/easing.d.ts.map +1 -1
- package/dist/entity-tree/EntityRelationTree.js +1 -1
- package/dist/explain-fact/EntityChip.js +1 -1
- package/dist/explain-fact/conclusion/ConclusionSubtitle.js +1 -1
- package/dist/explain-fact/inspector/InspectorBindings.js +1 -1
- package/dist/explain-fact/inspector/SupportsSection.js +1 -1
- package/dist/explain-fact/proof-tree/ProofRowContent.js +1 -1
- package/dist/explain-fact/proof-tree/ProofRowValue.js +1 -1
- package/dist/globals.css +33 -0
- package/dist/graph/GraphContextPanel.js +1 -1
- package/dist/graph/GraphControls.d.ts +1 -1
- package/dist/graph/GraphControls.d.ts.map +1 -1
- package/dist/graph/GraphControls.js +1 -1
- package/dist/graph/GraphErrorBoundary.d.ts +1 -1
- package/dist/graph/GraphErrorBoundary.d.ts.map +1 -1
- package/dist/graph/NodeContextMenu.d.ts +1 -1
- package/dist/graph/NodeContextMenu.d.ts.map +1 -1
- package/dist/graph/NodeContextMenu.js +1 -1
- package/dist/graph/NodeDetailPanel/PropertyDiffView.js +1 -1
- package/dist/graph/NodeDetailPanel/TypeSummaryPanel.d.ts.map +1 -1
- package/dist/graph/NodeDetailPanel/TypeSummaryPanel.js.map +1 -1
- package/dist/graph/custom-nodes.d.ts +4 -4
- package/dist/graph/custom-nodes.d.ts.map +1 -1
- package/dist/graph/custom-nodes.js +1 -1
- package/dist/graph/graph-layout.js.map +1 -1
- package/dist/graph/graph-list-utils.js.map +1 -1
- package/dist/graph/graph-model.js.map +1 -1
- package/dist/graph/graph-store.js.map +1 -1
- package/dist/graph/nodes/AdsDailyReportTemplateView.d.ts +1 -1
- package/dist/graph/nodes/AdsDailyReportTemplateView.d.ts.map +1 -1
- package/dist/graph/nodes/AttioCallRecordingView.d.ts +1 -1
- package/dist/graph/nodes/AttioCallRecordingView.d.ts.map +1 -1
- package/dist/graph/nodes/AttioCompanyView.d.ts +1 -1
- package/dist/graph/nodes/AttioCompanyView.d.ts.map +1 -1
- package/dist/graph/nodes/AttioDealView.d.ts +1 -1
- package/dist/graph/nodes/AttioDealView.d.ts.map +1 -1
- package/dist/graph/nodes/AttioMeetingView.d.ts +1 -1
- package/dist/graph/nodes/AttioMeetingView.d.ts.map +1 -1
- package/dist/graph/nodes/AttioNoteView.d.ts +1 -1
- package/dist/graph/nodes/AttioNoteView.d.ts.map +1 -1
- package/dist/graph/nodes/AttioTaskView.d.ts +1 -1
- package/dist/graph/nodes/AttioTaskView.d.ts.map +1 -1
- package/dist/graph/nodes/BrandAssetAnalysisActionView.d.ts +1 -1
- package/dist/graph/nodes/BrandAssetAnalysisActionView.d.ts.map +1 -1
- package/dist/graph/nodes/BrandAssetAnalysisView.d.ts +1 -1
- package/dist/graph/nodes/BrandAssetAnalysisView.d.ts.map +1 -1
- package/dist/graph/nodes/BrandFontSuggestionView.d.ts +1 -1
- package/dist/graph/nodes/BrandFontSuggestionView.d.ts.map +1 -1
- package/dist/graph/nodes/BrandGuidelinesView.d.ts +1 -1
- package/dist/graph/nodes/BrandGuidelinesView.d.ts.map +1 -1
- package/dist/graph/nodes/ConnectedAccountCard.d.ts +1 -1
- package/dist/graph/nodes/ConnectedAccountCard.d.ts.map +1 -1
- package/dist/graph/nodes/CoresignalCompanyView.d.ts +1 -1
- package/dist/graph/nodes/CoresignalCompanyView.d.ts.map +1 -1
- package/dist/graph/nodes/CoresignalEmployeeView.d.ts +1 -1
- package/dist/graph/nodes/CoresignalEmployeeView.d.ts.map +1 -1
- package/dist/graph/nodes/CoresignalExperienceView.d.ts +1 -1
- package/dist/graph/nodes/CoresignalExperienceView.d.ts.map +1 -1
- package/dist/graph/nodes/CoresignalJobView.d.ts +1 -1
- package/dist/graph/nodes/CoresignalJobView.d.ts.map +1 -1
- package/dist/graph/nodes/CoresignalKeyExecutiveDepartureView.d.ts +1 -1
- package/dist/graph/nodes/CoresignalKeyExecutiveDepartureView.d.ts.map +1 -1
- package/dist/graph/nodes/EntityCardShell.d.ts +1 -1
- package/dist/graph/nodes/EntityCardShell.d.ts.map +1 -1
- package/dist/graph/nodes/Ga4DailyOverviewView.d.ts +1 -1
- package/dist/graph/nodes/Ga4DailyOverviewView.d.ts.map +1 -1
- package/dist/graph/nodes/Ga4FunnelEventCountView.d.ts +1 -1
- package/dist/graph/nodes/Ga4FunnelEventCountView.d.ts.map +1 -1
- package/dist/graph/nodes/Ga4TrafficSourceView.d.ts +1 -1
- package/dist/graph/nodes/Ga4TrafficSourceView.d.ts.map +1 -1
- package/dist/graph/nodes/GoogleAdGroupAdView.d.ts +1 -1
- package/dist/graph/nodes/GoogleAdGroupAdView.d.ts.map +1 -1
- package/dist/graph/nodes/GoogleAdGroupCriterionView.d.ts +1 -1
- package/dist/graph/nodes/GoogleAdGroupCriterionView.d.ts.map +1 -1
- package/dist/graph/nodes/GoogleAdGroupView.d.ts +1 -1
- package/dist/graph/nodes/GoogleAdGroupView.d.ts.map +1 -1
- package/dist/graph/nodes/GoogleCampaignBudgetView.d.ts +1 -1
- package/dist/graph/nodes/GoogleCampaignBudgetView.d.ts.map +1 -1
- package/dist/graph/nodes/GoogleCampaignCriterionView.d.ts +1 -1
- package/dist/graph/nodes/GoogleCampaignCriterionView.d.ts.map +1 -1
- package/dist/graph/nodes/GoogleCampaignInsightView.d.ts +1 -1
- package/dist/graph/nodes/GoogleCampaignInsightView.d.ts.map +1 -1
- package/dist/graph/nodes/GoogleCampaignView.d.ts +1 -1
- package/dist/graph/nodes/GoogleCampaignView.d.ts.map +1 -1
- package/dist/graph/nodes/GoogleCustomerClientView.d.ts +1 -1
- package/dist/graph/nodes/GoogleCustomerClientView.d.ts.map +1 -1
- package/dist/graph/nodes/GoogleCustomerView.d.ts +1 -1
- package/dist/graph/nodes/GoogleCustomerView.d.ts.map +1 -1
- package/dist/graph/nodes/GoogleSearchTermInsightView.d.ts +1 -1
- package/dist/graph/nodes/GoogleSearchTermInsightView.d.ts.map +1 -1
- package/dist/graph/nodes/LinkedinAdAccountView.d.ts +1 -1
- package/dist/graph/nodes/LinkedinAdAccountView.d.ts.map +1 -1
- package/dist/graph/nodes/MetaAdAccountActivityView.d.ts +1 -1
- package/dist/graph/nodes/MetaAdAccountActivityView.d.ts.map +1 -1
- package/dist/graph/nodes/MetaAdAccountView.d.ts +1 -1
- package/dist/graph/nodes/MetaAdAccountView.d.ts.map +1 -1
- package/dist/graph/nodes/MetaAdImageView.d.ts +1 -1
- package/dist/graph/nodes/MetaAdImageView.d.ts.map +1 -1
- package/dist/graph/nodes/MetaAdSetView.d.ts +1 -1
- package/dist/graph/nodes/MetaAdSetView.d.ts.map +1 -1
- package/dist/graph/nodes/MetaAdView.d.ts +1 -1
- package/dist/graph/nodes/MetaAdView.d.ts.map +1 -1
- package/dist/graph/nodes/MetaCampaignView.d.ts +1 -1
- package/dist/graph/nodes/MetaCampaignView.d.ts.map +1 -1
- package/dist/graph/nodes/MetaInsightView.d.ts +1 -1
- package/dist/graph/nodes/MetaInsightView.d.ts.map +1 -1
- package/dist/graph/nodes/RenderedTemplateView.d.ts +1 -1
- package/dist/graph/nodes/RenderedTemplateView.d.ts.map +1 -1
- package/dist/graph/nodes/SchemaActionView.d.ts +1 -1
- package/dist/graph/nodes/SchemaActionView.d.ts.map +1 -1
- package/dist/graph/nodes/ShopifyShopView.d.ts +1 -1
- package/dist/graph/nodes/ShopifyShopView.d.ts.map +1 -1
- package/dist/graph/nodes/SlackChannelView.d.ts +1 -1
- package/dist/graph/nodes/SlackChannelView.d.ts.map +1 -1
- package/dist/graph/nodes/SlackMessageView.d.ts +1 -1
- package/dist/graph/nodes/SlackMessageView.d.ts.map +1 -1
- package/dist/graph/nodes/SlackUserView.d.ts +1 -1
- package/dist/graph/nodes/SlackUserView.d.ts.map +1 -1
- package/dist/graph/nodes/SlackWorkspaceView.d.ts +1 -1
- package/dist/graph/nodes/SlackWorkspaceView.d.ts.map +1 -1
- package/dist/graph/nodes/attio-shared.d.ts +1 -1
- package/dist/graph/nodes/attio-shared.d.ts.map +1 -1
- package/dist/graph/nodes/attio-shared.js +1 -1
- package/dist/graph/nodes/brand-shared.d.ts.map +1 -1
- package/dist/graph/nodes/card-rows.js +1 -1
- package/dist/graph/nodes/google-campaign-utils.d.ts.map +1 -1
- package/dist/graph/nodes/insight-shared.d.ts +1 -1
- package/dist/graph/nodes/insight-shared.d.ts.map +1 -1
- package/dist/graph/special-nodes/BaseNode.d.ts +2 -2
- package/dist/graph/special-nodes/BaseNode.d.ts.map +1 -1
- package/dist/graph/special-nodes/BaseNode.js +1 -1
- package/dist/graph/special-nodes/DynamicNode.d.ts +1 -1
- package/dist/graph/special-nodes/DynamicNode.d.ts.map +1 -1
- package/dist/graph/special-nodes/EntityValueChip.js +1 -1
- package/dist/graph/special-nodes/GenericNode.d.ts +1 -1
- package/dist/graph/special-nodes/GenericNode.d.ts.map +1 -1
- package/dist/graph/special-nodes/GenericView.d.ts +1 -1
- package/dist/graph/special-nodes/GenericView.d.ts.map +1 -1
- package/dist/graph/special-nodes/NodeFrame.d.ts +1 -1
- package/dist/graph/special-nodes/NodeFrame.d.ts.map +1 -1
- package/dist/graph/special-nodes/NodeFrame.js +1 -1
- package/dist/graph/special-nodes/TypeSummaryNode.d.ts +1 -1
- package/dist/graph/special-nodes/TypeSummaryNode.d.ts.map +1 -1
- package/dist/graph/special-nodes/TypeSummaryNode.js +1 -1
- package/dist/graph/special-nodes/card-facts.js.map +1 -1
- package/dist/hooks/resolved-terms.d.ts +1 -0
- package/dist/hooks/resolved-terms.d.ts.map +1 -1
- package/dist/hooks/resolved-terms.js +2 -1
- package/dist/hooks/resolved-terms.js.map +1 -1
- package/dist/hooks/use-action-plans-list.d.ts.map +1 -1
- package/dist/hooks/use-action-plans-list.js.map +1 -1
- package/dist/hooks/use-activity-feed.js.map +1 -1
- package/dist/hooks/use-connection-problems.d.ts.map +1 -1
- package/dist/hooks/use-conversation-starters.d.ts +2 -2
- package/dist/hooks/use-entity-relations.d.ts.map +1 -1
- package/dist/hooks/use-entity.d.ts.map +1 -1
- package/dist/hooks/use-latest-rendered-template.d.ts.map +1 -1
- package/dist/hooks/use-manual-actions.d.ts.map +1 -1
- package/dist/hooks/use-manual-actions.js.map +1 -1
- package/dist/hooks/use-sparql-construct.d.ts +2 -0
- package/dist/hooks/use-sparql-construct.d.ts.map +1 -1
- package/dist/hooks/use-sparql-construct.js +2 -1
- package/dist/hooks/use-sparql-construct.js.map +1 -1
- package/dist/hooks/useActionGraph.d.ts.map +1 -1
- package/dist/hooks/useActionGraph.js.map +1 -1
- package/dist/hooks/useActionPlanDetail.d.ts +2 -2
- package/dist/hooks/useActionPlanDetail.d.ts.map +1 -1
- package/dist/hooks/useAuth.d.ts +1 -1
- package/dist/hooks/useAuth.d.ts.map +1 -1
- package/dist/hooks/useAuth.js +3 -1
- package/dist/hooks/useAuth.js.map +1 -1
- package/dist/hooks/useConversationGraphContext.js.map +1 -1
- package/dist/hooks/useConversations.js.map +1 -1
- package/dist/hooks/useDatastoreSelection.js.map +1 -1
- package/dist/hooks/useValidateActionPlan.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/build-config.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 +3 -0
- package/dist/lib/datastore-route-table.js.map +1 -1
- package/dist/lib/default-map.d.ts.map +1 -1
- package/dist/lib/default-map.js.map +1 -1
- package/dist/lib/hooks/{useChatUpload.d.ts → useFileUpload.d.ts} +3 -3
- package/dist/lib/hooks/{useChatUpload.d.ts.map → useFileUpload.d.ts.map} +1 -1
- package/dist/lib/hooks/{useChatUpload.js → useFileUpload.js} +2 -2
- package/dist/lib/hooks/{useChatUpload.js.map → useFileUpload.js.map} +1 -1
- package/dist/lib/merge-refs.d.ts.map +1 -1
- package/dist/lib/rdf/insights.js.map +1 -1
- package/dist/lib/structured-data/schema-converter.d.ts +2 -2
- package/dist/lib/structured-data/schema-converter.d.ts.map +1 -1
- package/dist/lib/structured-data/schema-converter.js.map +1 -1
- package/dist/lib/tanstack-query.js +1 -1
- package/dist/lib/tanstack-query.js.map +1 -1
- package/dist/lib/term-batcher.d.ts +3 -1
- package/dist/lib/term-batcher.d.ts.map +1 -1
- package/dist/lib/term-batcher.js +2 -2
- package/dist/lib/term-batcher.js.map +1 -1
- package/dist/lib/use-can-scroll.d.ts.map +1 -1
- package/dist/lib/use-color-palette.d.ts.map +1 -1
- package/dist/lib/use-toggle-set.js.map +1 -1
- package/dist/lib/utils.js +1 -1
- package/dist/ontology/OntologyTermText.js +1 -1
- package/dist/providers/ActiveChatProvider.d.ts +1 -1
- package/dist/providers/ActiveDatastoreProvider.js.map +1 -1
- package/dist/providers/ChatManagerProvider.js.map +1 -1
- package/dist/providers/commands/CommandContext.js +1 -1
- package/dist/routes/activity/components/ActivityTable.js +1 -1
- package/dist/routes/activity/detail/ActivityDetail.d.ts.map +1 -1
- package/dist/routes/activity/detail/ActivityDetail.js +1 -1
- package/dist/routes/activity/detail/ActivityStepsRail.js +1 -1
- package/dist/routes/activity/detail/ActivityTimeline.js +1 -1
- package/dist/routes/data-collection/index.d.ts +3 -0
- package/dist/routes/data-collection/index.d.ts.map +1 -0
- package/dist/routes/data-collection/index.js +43 -0
- package/dist/routes/data-collection/index.js.map +1 -0
- package/dist/routes/data-explorer/class-properties.js.map +1 -1
- package/dist/routes/data-explorer/class-relations.d.ts +2 -2
- package/dist/routes/data-explorer/components/DataExplorerLayout.d.ts.map +1 -1
- package/dist/routes/data-explorer/components/DataExplorerLayout.js +5 -2
- package/dist/routes/data-explorer/components/DataExplorerLayout.js.map +1 -1
- package/dist/routes/data-explorer/components/DetailHeader.js +1 -1
- package/dist/routes/data-explorer/components/DetailHeader.js.map +1 -1
- package/dist/routes/data-explorer/components/Rail.d.ts.map +1 -1
- package/dist/routes/data-explorer/components/Rail.js +3 -3
- package/dist/routes/data-explorer/components/Rail.js.map +1 -1
- package/dist/routes/data-explorer/components/SegmentBuilder.js +1 -1
- package/dist/routes/data-explorer/components/class-detail/ClassDetail.js +1 -1
- package/dist/routes/data-explorer/components/class-detail/CreateRecordAction.js +1 -1
- package/dist/routes/data-explorer/components/class-detail/Overview.js +1 -1
- package/dist/routes/data-explorer/components/ontology-coverage/CoverageNamespaceRail.js +1 -1
- package/dist/routes/data-explorer/components/ontology-coverage/CoverageSkeleton.js +1 -1
- package/dist/routes/data-explorer/components/record-detail/CreateAction.js +1 -1
- package/dist/routes/data-explorer/components/record-detail/RecordActions.d.ts.map +1 -1
- package/dist/routes/data-explorer/components/record-detail/RecordActions.js +12 -9
- package/dist/routes/data-explorer/components/record-detail/RecordActions.js.map +1 -1
- package/dist/routes/data-explorer/components/record-detail/RecordDetail.js +1 -1
- package/dist/routes/data-explorer/components/record-detail/RecordRefresh.d.ts +7 -0
- package/dist/routes/data-explorer/components/record-detail/RecordRefresh.d.ts.map +1 -0
- package/dist/routes/data-explorer/components/record-detail/RecordRefresh.js +104 -0
- package/dist/routes/data-explorer/components/record-detail/RecordRefresh.js.map +1 -0
- package/dist/routes/data-explorer/components/uploads/IngestRunsList.d.ts +8 -0
- package/dist/routes/data-explorer/components/uploads/IngestRunsList.d.ts.map +1 -0
- package/dist/routes/data-explorer/components/uploads/IngestRunsList.js +18 -0
- package/dist/routes/data-explorer/components/uploads/IngestRunsList.js.map +1 -0
- package/dist/routes/data-explorer/components/uploads/IngestStateStatus.d.ts +14 -0
- package/dist/routes/data-explorer/components/uploads/IngestStateStatus.d.ts.map +1 -0
- package/dist/routes/data-explorer/components/uploads/IngestStateStatus.js +33 -0
- package/dist/routes/data-explorer/components/uploads/IngestStateStatus.js.map +1 -0
- package/dist/routes/data-explorer/components/uploads/UploadedFilesList.d.ts +8 -0
- package/dist/routes/data-explorer/components/uploads/UploadedFilesList.d.ts.map +1 -0
- package/dist/routes/data-explorer/components/uploads/UploadedFilesList.js +34 -0
- package/dist/routes/data-explorer/components/uploads/UploadedFilesList.js.map +1 -0
- package/dist/routes/data-explorer/components/uploads/UploadsPages.d.ts +7 -0
- package/dist/routes/data-explorer/components/uploads/UploadsPages.d.ts.map +1 -0
- package/dist/routes/data-explorer/components/uploads/UploadsPages.js +35 -0
- package/dist/routes/data-explorer/components/uploads/UploadsPages.js.map +1 -0
- package/dist/routes/data-explorer/coverage.d.ts.map +1 -1
- package/dist/routes/data-explorer/index.d.ts +1 -0
- package/dist/routes/data-explorer/index.d.ts.map +1 -1
- package/dist/routes/data-explorer/index.js +1 -0
- package/dist/routes/data-explorer/index.js.map +1 -1
- package/dist/routes/data-explorer/namespaces.d.ts +4 -0
- package/dist/routes/data-explorer/namespaces.d.ts.map +1 -1
- package/dist/routes/data-explorer/namespaces.js +6 -1
- package/dist/routes/data-explorer/namespaces.js.map +1 -1
- package/dist/routes/data-explorer/sparql-client.js.map +1 -1
- package/dist/routes/data-explorer/uploads.d.ts +56 -0
- package/dist/routes/data-explorer/uploads.d.ts.map +1 -0
- package/dist/routes/data-explorer/uploads.js +140 -0
- package/dist/routes/data-explorer/uploads.js.map +1 -0
- package/dist/routes/datastores/components/DatastoreTableSkeleton.js +1 -1
- package/dist/routes/datastores/components/DatastoresToolbar.js +1 -1
- package/dist/routes/datastores/components/LinkUnlinkedDatastoreDialog.d.ts +1 -0
- package/dist/routes/datastores/components/LinkUnlinkedDatastoreDialog.d.ts.map +1 -1
- package/dist/routes/datastores/components/LinkUnlinkedDatastoreDialog.js +17 -10
- package/dist/routes/datastores/components/LinkUnlinkedDatastoreDialog.js.map +1 -1
- package/dist/routes/datastores/components/StatusBadge.d.ts +7 -8
- package/dist/routes/datastores/components/StatusBadge.d.ts.map +1 -1
- package/dist/routes/datastores/components/StatusBadge.js +17 -1
- package/dist/routes/datastores/components/StatusBadge.js.map +1 -1
- package/dist/routes/datastores/components/UnlinkedDatastoresPanel.js +1 -1
- package/dist/routes/datastores/flatten.d.ts +6 -1
- package/dist/routes/datastores/flatten.d.ts.map +1 -1
- package/dist/routes/datastores/flatten.js +37 -2
- package/dist/routes/datastores/flatten.js.map +1 -1
- package/dist/routes/datastores/hooks/useDatastoreColumns.d.ts +4 -2
- package/dist/routes/datastores/hooks/useDatastoreColumns.d.ts.map +1 -1
- package/dist/routes/datastores/hooks/useDatastoreColumns.js +9 -7
- 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 +54 -19
- package/dist/routes/datastores/index.js.map +1 -1
- package/dist/routes/integrations/catalog-shape.js.map +1 -1
- package/dist/routes/integrations/components/ConnectionRow.js +1 -1
- package/dist/routes/integrations/components/ProviderLogo.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/DashConnectForm.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.d.ts +3 -0
- package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.js +38 -0
- package/dist/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.js.map +1 -0
- package/dist/routes/integrations/components/connect-forms/MetaAdsConnectForm.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/MicrosoftAdsConnectForm.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/google-ads-account-tree.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/google-analytics-property-tree.js.map +1 -1
- package/dist/routes/integrations/components/connect-forms/google-merchant-center-account-tree.d.ts +4 -0
- package/dist/routes/integrations/components/connect-forms/google-merchant-center-account-tree.d.ts.map +1 -0
- package/dist/routes/integrations/components/connect-forms/google-merchant-center-account-tree.js +32 -0
- package/dist/routes/integrations/components/connect-forms/google-merchant-center-account-tree.js.map +1 -0
- package/dist/routes/integrations/components/connect-forms/setup-account-unavailable-reason.d.ts.map +1 -1
- package/dist/routes/integrations/components/connect-forms/setup-account-unavailable-reason.js +1 -0
- package/dist/routes/integrations/components/connect-forms/setup-account-unavailable-reason.js.map +1 -1
- package/dist/routes/integrations/connect-forms.d.ts +1 -0
- package/dist/routes/integrations/connect-forms.d.ts.map +1 -1
- package/dist/routes/integrations/connect-forms.js +1 -0
- package/dist/routes/integrations/connect-forms.js.map +1 -1
- package/dist/routes/integrations/connection-view.d.ts.map +1 -1
- package/dist/routes/integrations/connection-view.js +1 -0
- package/dist/routes/integrations/connection-view.js.map +1 -1
- package/dist/routes/integrations/types.d.ts.map +1 -1
- package/dist/routes/memories/components/ChangeScopeDialog.js +1 -1
- package/dist/routes/memories/components/ConflictMemoryCard.js +1 -1
- package/dist/routes/memories/components/ConsolidationReviewDialog.js +1 -1
- package/dist/routes/memories/components/LoadingSkeleton.js +1 -1
- package/dist/routes/memories/components/MemoriesFilters.js +1 -1
- package/dist/routes/memories/components/MemoriesTabPanel.js +1 -1
- package/dist/routes/memories/components/MemoryActions.js +1 -1
- package/dist/routes/memories/components/MemoryFields.js +1 -1
- package/dist/routes/memories/components/MemoryFormDialog.js +1 -1
- package/dist/routes/memories/expiry-utils.js.map +1 -1
- package/dist/routes/memories/hooks/useDuplicateDetection.js.map +1 -1
- package/dist/routes/memories/hooks/useLiveContext.d.ts.map +1 -1
- package/dist/routes/memories/hooks/useMemoryColumns.d.ts.map +1 -1
- package/dist/routes/memories/hooks/useMemoryColumns.js +1 -1
- package/dist/routes/memories/hooks/useMemoryTable.js.map +1 -1
- package/dist/routes/plans/components/ActionPlanPage.js +1 -1
- package/dist/routes/plans/components/ActionPlansFilters.js +1 -1
- package/dist/routes/plans/components/ActionPlansPage.js +1 -1
- package/dist/routes/plans/components/ActionPlansTableBody.js +1 -1
- package/dist/routes/plans/components/actionPlansTableConfig.d.ts +7 -7
- package/dist/routes/plans/components/actionPlansTableConfig.d.ts.map +1 -1
- package/dist/routes/plans/index.js +1 -1
- package/dist/routes/rules/components/RuleAffectedActionPlansSection.js +1 -1
- package/dist/routes/rules/components/RuleDetailsPage.js +1 -1
- package/dist/routes/rules/components/RuleProducersSection.js +1 -1
- package/dist/routes/rules/components/RuleSetup.js +1 -1
- package/dist/routes/rules/components/RulesOverviewPage.js +1 -1
- package/dist/routes/rules/components/datalog-editor/FactsPreview.js +1 -1
- package/dist/routes/rules/components/datalog-editor/SparqlQueryPanel.js +1 -1
- package/dist/routes/rules/components/rule-actionability.js.map +1 -1
- package/dist/rules/RuleNarrativeSegments.js +1 -1
- package/dist/rules/datalog-ast/DatalogAtomComponent.js +1 -1
- package/dist/rules/datalog-ast/DatalogBodyFormulaComponent.js +1 -1
- package/dist/rules/datalog-ast/DatalogExpressionRenderer.js +1 -1
- package/dist/rules/datalog-ast/DatalogTermComponent.js +1 -1
- package/dist/rules/datalog-cache.js.map +1 -1
- package/dist/rules/rule-narrative-format.d.ts.map +1 -1
- package/dist/rules/rule-narrative-renderer.js.map +1 -1
- package/dist/shared/graph-derived-queries.d.ts.map +1 -1
- package/dist/shared/graph-derived-queries.js +2 -1
- package/dist/shared/graph-derived-queries.js.map +1 -1
- package/dist/style.js +1 -1
- package/dist/templates/slack-to-markdown.js +1 -1
- package/package.json +27 -14
- package/src/app-subpaths.json +1 -0
- package/src/components/badge/index.tsx +1 -1
- package/src/components/calendar/index.tsx +2 -2
- package/src/components/chart/ForecastLegend.tsx +15 -13
- package/src/components/chart/forecast-model.ts +6 -8
- package/src/components/chat-view/Chat.tsx +2 -2
- package/src/components/file-dropzone/index.tsx +165 -0
- package/src/components/input/input-field.tsx +1 -1
- package/src/components/input/textarea.tsx +1 -1
- package/src/components/planning/plan-detail-utils.tsx +2 -0
- package/src/components/table/index.tsx +0 -1
- package/src/components/toast/index.tsx +1 -0
- package/src/graph/NodeDetailPanel/TypeSummaryPanel.tsx +12 -14
- package/src/hooks/resolved-terms.ts +6 -1
- package/src/hooks/use-sparql-construct.ts +4 -2
- package/src/hooks/useAuth.ts +3 -1
- package/src/index.ts +1 -0
- package/src/lib/chat-types.ts +1 -1
- package/src/lib/datastore-route-table.ts +6 -0
- package/src/lib/hooks/{useChatUpload.ts → useFileUpload.ts} +2 -2
- package/src/lib/tanstack-query.ts +2 -2
- package/src/lib/term-batcher.ts +3 -3
- package/src/lib/utils.ts +1 -1
- package/src/routes/data-collection/index.tsx +82 -0
- package/src/routes/data-explorer/components/DataExplorerLayout.tsx +5 -2
- package/src/routes/data-explorer/components/DetailHeader.tsx +4 -4
- package/src/routes/data-explorer/components/Rail.tsx +13 -2
- package/src/routes/data-explorer/components/record-detail/RecordActions.tsx +22 -16
- package/src/routes/data-explorer/components/record-detail/RecordRefresh.tsx +150 -0
- package/src/routes/data-explorer/components/uploads/IngestRunsList.tsx +63 -0
- package/src/routes/data-explorer/components/uploads/IngestStateStatus.tsx +45 -0
- package/src/routes/data-explorer/components/uploads/UploadedFilesList.tsx +93 -0
- package/src/routes/data-explorer/components/uploads/UploadsPages.tsx +80 -0
- package/src/routes/data-explorer/index.tsx +6 -0
- package/src/routes/data-explorer/namespaces.ts +7 -1
- package/src/routes/data-explorer/uploads.ts +205 -0
- package/src/routes/datastores/components/LinkUnlinkedDatastoreDialog.tsx +49 -10
- package/src/routes/datastores/components/StatusBadge.tsx +22 -7
- package/src/routes/datastores/flatten.ts +50 -2
- package/src/routes/datastores/hooks/useDatastoreColumns.tsx +21 -1
- package/src/routes/datastores/index.tsx +64 -13
- package/src/routes/integrations/components/connect-forms/GoogleMerchantCenterConnectForm.tsx +61 -0
- package/src/routes/integrations/components/connect-forms/google-merchant-center-account-tree.ts +38 -0
- package/src/routes/integrations/components/connect-forms/setup-account-unavailable-reason.ts +1 -0
- package/src/routes/integrations/connect-forms.ts +1 -0
- package/src/routes/integrations/connection-view.ts +1 -0
- package/src/rules/datalog-ast/DatalogBodyFormulaComponent.tsx +1 -1
- package/src/rules/datalog-ast/DatalogTermComponent.tsx +1 -1
- package/src/shacl/shacl-form-types.ts +1 -1
- package/src/shared/graph-derived-queries.ts +2 -0
- package/src/style.ts +1 -1
- package/src/templates/slack-to-markdown.ts +1 -1
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
import { Button } from "#components/button/index";
|
|
2
|
+
import { DeleteConfirmationDialog } from "#components/layouts/DeleteConfirmationDialog";
|
|
3
|
+
import { useExecuteAction, type ExecuteActionResult } from "#hooks/useExecuteAction";
|
|
4
|
+
import { useTriples, type TripleRow } from "#routes/data-explorer/triples";
|
|
1
5
|
import { GQLExecuteActionErrorCode } from "@manta-eu/client";
|
|
2
|
-
import { compactUri } from "@manta-eu/client/shared/rdf-namespaces";
|
|
6
|
+
import { compactUri, wellKnownPredicates } from "@manta-eu/client/shared/rdf-namespaces";
|
|
3
7
|
import { useState } from "react";
|
|
4
8
|
import { toast } from "sonner";
|
|
5
9
|
import type { PropertyMap } from "./action-properties";
|
|
@@ -7,10 +11,7 @@ import { useRecordActionShapes, type RecordActionShape } from "./action-shapes";
|
|
|
7
11
|
import { ActionFormDialog } from "./ActionFormDialog";
|
|
8
12
|
import { CreateAction } from "./CreateAction";
|
|
9
13
|
import { RecordActionFeedback } from "./RecordActionFeedback";
|
|
10
|
-
import {
|
|
11
|
-
import { DeleteConfirmationDialog } from "#components/layouts/DeleteConfirmationDialog";
|
|
12
|
-
import { useExecuteAction, type ExecuteActionResult } from "#hooks/useExecuteAction";
|
|
13
|
-
import { useTriples, type TripleRow } from "#routes/data-explorer/triples";
|
|
14
|
+
import { RecordRefresh } from "./RecordRefresh";
|
|
14
15
|
|
|
15
16
|
type RecordActionsProps = { iri: string; typeIris: string[] };
|
|
16
17
|
|
|
@@ -20,20 +21,25 @@ export function RecordActions(props: RecordActionsProps) {
|
|
|
20
21
|
const { shapes, error } = useRecordActionShapes(typeIris);
|
|
21
22
|
const { triples, isLoading: triplesLoading } = useTriples(iri);
|
|
22
23
|
|
|
23
|
-
|
|
24
|
+
const recordTypes = triples
|
|
25
|
+
.filter((row) => row.predicate === wellKnownPredicates.type && row.objectIsIri)
|
|
26
|
+
.map((row) => row.object);
|
|
24
27
|
|
|
25
28
|
return (
|
|
26
29
|
<>
|
|
27
|
-
{
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
30
|
+
<RecordRefresh iri={iri} typeIris={recordTypes} />
|
|
31
|
+
{error && <span className="typography-tiny text-muted-foreground">Actions unavailable</span>}
|
|
32
|
+
{!error &&
|
|
33
|
+
shapes.map((shape) => (
|
|
34
|
+
<ShapeActions
|
|
35
|
+
key={`${iri}|${shape.actionShape}`}
|
|
36
|
+
subjectIri={iri}
|
|
37
|
+
shape={shape}
|
|
38
|
+
triples={triples}
|
|
39
|
+
triplesLoading={triplesLoading}
|
|
40
|
+
qualifyLabels={shapes.length > 1}
|
|
41
|
+
/>
|
|
42
|
+
))}
|
|
37
43
|
</>
|
|
38
44
|
);
|
|
39
45
|
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { Button } from "#components/button/index";
|
|
2
|
+
import { InstanceLabelsContext } from "#hooks/use-instance-labels";
|
|
3
|
+
import { useMantaClient } from "#providers/MantaClientProvider";
|
|
4
|
+
import {
|
|
5
|
+
GQLRefreshResourceStatus,
|
|
6
|
+
GQLRefreshWorkflowStatus,
|
|
7
|
+
RefreshResourcesDocument,
|
|
8
|
+
RefreshResourcesStatusDocument,
|
|
9
|
+
type GQLRefreshResourceInput,
|
|
10
|
+
type GQLRefreshResourcesMutation,
|
|
11
|
+
type GQLRefreshResourcesMutationVariables,
|
|
12
|
+
type GQLRefreshResourcesStatusQuery,
|
|
13
|
+
type GQLRefreshResourcesStatusQueryVariables,
|
|
14
|
+
useRefreshResourceCapabilitiesQuery,
|
|
15
|
+
} from "@manta-eu/client";
|
|
16
|
+
import { isPresent } from "@manta-eu/lib/present";
|
|
17
|
+
import { sleep } from "@manta-eu/lib/sleep";
|
|
18
|
+
import { useIsMutating, useMutation, useQueryClient } from "@tanstack/react-query";
|
|
19
|
+
import type { GraphQLClient } from "graphql-request";
|
|
20
|
+
import { useContext } from "react";
|
|
21
|
+
import { toast } from "sonner";
|
|
22
|
+
import { match } from "ts-pattern";
|
|
23
|
+
|
|
24
|
+
type RecordRefreshProps = { iri: string; typeIris: string[] };
|
|
25
|
+
|
|
26
|
+
export function RecordRefresh(props: RecordRefreshProps) {
|
|
27
|
+
const { iri, typeIris } = props;
|
|
28
|
+
const { mantaClient } = useMantaClient();
|
|
29
|
+
const { data } = useRefreshResourceCapabilitiesQuery(
|
|
30
|
+
mantaClient,
|
|
31
|
+
{ rdfTypes: typeIris },
|
|
32
|
+
{ enabled: isPresent(typeIris) },
|
|
33
|
+
);
|
|
34
|
+
const rdfType = data?.refreshResourceCapabilities.capabilities.find((type) => type.supportsRefresh)?.rdfType;
|
|
35
|
+
|
|
36
|
+
return rdfType ? <RefreshButton key={`${iri}|${rdfType}`} iri={iri} rdfType={rdfType} /> : null;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
type RefreshButtonProps = { iri: string; rdfType: string };
|
|
40
|
+
|
|
41
|
+
type RefreshResult = GQLRefreshResourcesStatusQuery["refreshResourcesStatus"];
|
|
42
|
+
|
|
43
|
+
class RefreshError extends Error {
|
|
44
|
+
constructor(
|
|
45
|
+
readonly phase: "start" | "status" | "timeout",
|
|
46
|
+
cause: unknown,
|
|
47
|
+
) {
|
|
48
|
+
super("Unable to complete source refresh", { cause });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async function refreshResource(client: GraphQLClient, resource: GQLRefreshResourceInput): Promise<RefreshResult> {
|
|
53
|
+
const controller = new AbortController();
|
|
54
|
+
const timeoutMs = 5 * 60 * 1000;
|
|
55
|
+
const deadline = Date.now() + timeoutMs;
|
|
56
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
57
|
+
let phase: "start" | "status" = "start";
|
|
58
|
+
|
|
59
|
+
try {
|
|
60
|
+
const { refreshResources } = await client.request<
|
|
61
|
+
GQLRefreshResourcesMutation,
|
|
62
|
+
GQLRefreshResourcesMutationVariables
|
|
63
|
+
>({
|
|
64
|
+
document: RefreshResourcesDocument,
|
|
65
|
+
variables: { resources: [resource] },
|
|
66
|
+
signal: controller.signal,
|
|
67
|
+
});
|
|
68
|
+
phase = "status";
|
|
69
|
+
|
|
70
|
+
while (true) {
|
|
71
|
+
controller.signal.throwIfAborted();
|
|
72
|
+
const { refreshResourcesStatus } = await client.request<
|
|
73
|
+
GQLRefreshResourcesStatusQuery,
|
|
74
|
+
GQLRefreshResourcesStatusQueryVariables
|
|
75
|
+
>({
|
|
76
|
+
document: RefreshResourcesStatusDocument,
|
|
77
|
+
variables: { workflowId: refreshResources.workflowId },
|
|
78
|
+
signal: controller.signal,
|
|
79
|
+
});
|
|
80
|
+
controller.signal.throwIfAborted();
|
|
81
|
+
if (refreshResourcesStatus.status !== GQLRefreshWorkflowStatus.Running) return refreshResourcesStatus;
|
|
82
|
+
|
|
83
|
+
await sleep(Math.min(2000, Math.max(0, deadline - Date.now())));
|
|
84
|
+
}
|
|
85
|
+
} catch (error) {
|
|
86
|
+
throw new RefreshError(controller.signal.aborted ? "timeout" : phase, error);
|
|
87
|
+
} finally {
|
|
88
|
+
clearTimeout(timer);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function RefreshButton(props: RefreshButtonProps) {
|
|
93
|
+
const { iri, rdfType } = props;
|
|
94
|
+
const { mantaClient, datastoreId } = useMantaClient();
|
|
95
|
+
const queryClient = useQueryClient();
|
|
96
|
+
const labels = useContext(InstanceLabelsContext);
|
|
97
|
+
const refreshLabels = labels?.refresh;
|
|
98
|
+
const pendingFilter = { mutationKey: ["RefreshResource", datastoreId, iri], exact: true };
|
|
99
|
+
const refreshing = useIsMutating(pendingFilter) > 0;
|
|
100
|
+
const { mutate } = useMutation<RefreshResult, RefreshError>({
|
|
101
|
+
mutationKey: pendingFilter.mutationKey,
|
|
102
|
+
mutationFn: () => refreshResource(mantaClient, { iri, type: rdfType }),
|
|
103
|
+
retry: false,
|
|
104
|
+
onSuccess: (result) => {
|
|
105
|
+
if (result.status === GQLRefreshWorkflowStatus.Failed) {
|
|
106
|
+
toast.error("Refresh failed", { description: result.error ?? undefined });
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const status = result.results?.find(
|
|
111
|
+
(resource) => resource.iri === iri && resource.type === rdfType,
|
|
112
|
+
)?.refreshStatus;
|
|
113
|
+
match(status)
|
|
114
|
+
.with(GQLRefreshResourceStatus.Synced, () => {
|
|
115
|
+
void queryClient.invalidateQueries({ queryKey: ["data-explorer"] });
|
|
116
|
+
refreshLabels?.([iri]);
|
|
117
|
+
toast.success("Refreshed from source");
|
|
118
|
+
})
|
|
119
|
+
.with(GQLRefreshResourceStatus.NotReadable, () => toast.error("This entity does not support refresh"))
|
|
120
|
+
.with(GQLRefreshResourceStatus.NotSynced, () =>
|
|
121
|
+
toast.error("The entity could not be refreshed from its source"),
|
|
122
|
+
)
|
|
123
|
+
.with(undefined, () => toast.error("Refresh returned no result for this entity"))
|
|
124
|
+
.exhaustive();
|
|
125
|
+
},
|
|
126
|
+
onError: (error) => {
|
|
127
|
+
match(error.phase)
|
|
128
|
+
.with("start", () => toast.error("Could not start refresh"))
|
|
129
|
+
.with("status", () =>
|
|
130
|
+
toast.error("Could not check refresh status", { description: "The refresh may still be running." }),
|
|
131
|
+
)
|
|
132
|
+
.with("timeout", () =>
|
|
133
|
+
toast.warning("Refresh is taking longer than expected", {
|
|
134
|
+
description: "It may still finish in the background.",
|
|
135
|
+
}),
|
|
136
|
+
)
|
|
137
|
+
.exhaustive();
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
function startRefresh() {
|
|
142
|
+
if (queryClient.isMutating(pendingFilter) === 0) mutate();
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return (
|
|
146
|
+
<Button variant="secondary" size="sm" disabled={refreshing} aria-busy={refreshing} onClick={startRefresh}>
|
|
147
|
+
{refreshing ? "Refreshing…" : "Refresh from source"}
|
|
148
|
+
</Button>
|
|
149
|
+
);
|
|
150
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Link } from "react-router";
|
|
2
|
+
import { entityPath } from "../../namespaces";
|
|
3
|
+
import type { IngestRun, UploadedFile } from "../../uploads";
|
|
4
|
+
import { ArrowLinkIcon, arrowLinkClass } from "../ArrowLink";
|
|
5
|
+
import { ModifiedAgo } from "../ModifiedAgo";
|
|
6
|
+
import { EntityName, LinkList } from "../RawTriples";
|
|
7
|
+
import { IngestStateStatus } from "./IngestStateStatus";
|
|
8
|
+
import { TruncateTooltip } from "#components/tooltip/index";
|
|
9
|
+
import { cn } from "#lib/utils";
|
|
10
|
+
|
|
11
|
+
type IngestRunRowProps = { run: IngestRun; file: UploadedFile | undefined };
|
|
12
|
+
|
|
13
|
+
function IngestRunRow(props: IngestRunRowProps) {
|
|
14
|
+
const { run, file } = props;
|
|
15
|
+
|
|
16
|
+
return (
|
|
17
|
+
<div className="flex flex-col gap-2 px-4 py-3 sm:flex-row sm:items-center sm:gap-3">
|
|
18
|
+
<div className="flex min-w-0 flex-1 flex-col gap-0.5">
|
|
19
|
+
<Link to={entityPath(run.file)} className="min-w-0 hover:underline">
|
|
20
|
+
{file ? (
|
|
21
|
+
<TruncateTooltip
|
|
22
|
+
text={file.fileName}
|
|
23
|
+
className="typography-small-medium block truncate text-default-foreground"
|
|
24
|
+
/>
|
|
25
|
+
) : (
|
|
26
|
+
<EntityName iri={run.file} />
|
|
27
|
+
)}
|
|
28
|
+
</Link>
|
|
29
|
+
|
|
30
|
+
<div className="typography-tiny flex flex-wrap items-center gap-x-2 text-muted-foreground">
|
|
31
|
+
{run.endedAt && <ModifiedAgo modified={run.endedAt} />}
|
|
32
|
+
<Link to={entityPath(run.iri)} className="hover:underline">
|
|
33
|
+
Run details
|
|
34
|
+
</Link>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
<div className="flex items-center gap-3">
|
|
39
|
+
<IngestStateStatus state={{ kind: "run", run }} />
|
|
40
|
+
{run.dataset && (
|
|
41
|
+
<Link to={entityPath(run.dataset)} className={cn("typography-small", arrowLinkClass)}>
|
|
42
|
+
Dataset
|
|
43
|
+
<ArrowLinkIcon />
|
|
44
|
+
</Link>
|
|
45
|
+
)}
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
type IngestRunsListProps = { runs: readonly IngestRun[]; fileByIri: ReadonlyMap<string, UploadedFile> };
|
|
52
|
+
|
|
53
|
+
export function IngestRunsList(props: IngestRunsListProps) {
|
|
54
|
+
const { runs, fileByIri } = props;
|
|
55
|
+
|
|
56
|
+
return (
|
|
57
|
+
<LinkList>
|
|
58
|
+
{runs.map((run) => (
|
|
59
|
+
<IngestRunRow key={run.iri} run={run} file={fileByIri.get(run.file)} />
|
|
60
|
+
))}
|
|
61
|
+
</LinkList>
|
|
62
|
+
);
|
|
63
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { match } from "ts-pattern";
|
|
2
|
+
import type { FileIngestState, IngestRun } from "../../uploads";
|
|
3
|
+
import { Status, type StatusVariant } from "#components/status/index";
|
|
4
|
+
|
|
5
|
+
type StatusDisplay = { label: string; variant: StatusVariant };
|
|
6
|
+
|
|
7
|
+
const countFormat = new Intl.NumberFormat("en-US");
|
|
8
|
+
|
|
9
|
+
function recordCount(count: number): string {
|
|
10
|
+
return `${countFormat.format(count)} ${count === 1 ? "record" : "records"}`;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function ingestedDisplay(run: IngestRun): StatusDisplay {
|
|
14
|
+
const read = run.recordsRead === undefined ? "Ingested" : `Ingested ${recordCount(run.recordsRead)}`;
|
|
15
|
+
const dropped = run.recordsDropped ? `, ${countFormat.format(run.recordsDropped)} dropped` : "";
|
|
16
|
+
|
|
17
|
+
return { label: `${read}${dropped}`, variant: run.recordsDropped ? "warning" : "success" };
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function runDisplay(run: IngestRun): StatusDisplay {
|
|
21
|
+
return match(run.status)
|
|
22
|
+
.with("ingested", () => ingestedDisplay(run))
|
|
23
|
+
.with("unparsable", (): StatusDisplay => ({ label: "Could not be read", variant: "error" }))
|
|
24
|
+
.with("too_large", (): StatusDisplay => ({ label: "Too large to ingest", variant: "warning" }))
|
|
25
|
+
.with("gone", (): StatusDisplay => ({ label: "Removed before ingest", variant: "neutral" }))
|
|
26
|
+
.exhaustive();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function ingestStateDisplay(state: FileIngestState): StatusDisplay {
|
|
30
|
+
return match(state)
|
|
31
|
+
.with({ kind: "waiting" }, (): StatusDisplay => ({ label: "Waiting for ingest", variant: "neutral" }))
|
|
32
|
+
.with({ kind: "stored" }, (): StatusDisplay => ({ label: "Stored", variant: "neutral" }))
|
|
33
|
+
.with({ kind: "run" }, ({ run }) => runDisplay(run))
|
|
34
|
+
.exhaustive();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
type IngestStateStatusProps = { state: FileIngestState; className?: string };
|
|
38
|
+
|
|
39
|
+
export function IngestStateStatus(props: IngestStateStatusProps) {
|
|
40
|
+
const { state, className } = props;
|
|
41
|
+
|
|
42
|
+
const { label, variant } = ingestStateDisplay(state);
|
|
43
|
+
|
|
44
|
+
return <Status label={label} variant={variant} className={className} />;
|
|
45
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { userIriPrefix } from "@manta-eu/client/shared/stakeholder-iri";
|
|
2
|
+
import { redirectPath } from "@manta-eu/ldo/redirect-queries";
|
|
3
|
+
import { humanBytes } from "@manta-eu/lib/humanize";
|
|
4
|
+
import { isPresent } from "@manta-eu/lib/present";
|
|
5
|
+
import { Download, FileText } from "lucide-react";
|
|
6
|
+
import { Link } from "react-router";
|
|
7
|
+
import { entityPath } from "../../namespaces";
|
|
8
|
+
import type { UploadedFileWithState } from "../../uploads";
|
|
9
|
+
import { ModifiedAgo } from "../ModifiedAgo";
|
|
10
|
+
import { EntityName, LinkList } from "../RawTriples";
|
|
11
|
+
import { IngestStateStatus } from "./IngestStateStatus";
|
|
12
|
+
import { Button } from "#components/button/index";
|
|
13
|
+
import { TruncateTooltip } from "#components/tooltip/index";
|
|
14
|
+
import { useRedirectEndpoint } from "#ldo-ui";
|
|
15
|
+
|
|
16
|
+
type UploaderProps = { iri: string | undefined; currentUserIri: string | undefined };
|
|
17
|
+
|
|
18
|
+
function Uploader(props: UploaderProps) {
|
|
19
|
+
const { iri, currentUserIri } = props;
|
|
20
|
+
|
|
21
|
+
if (!iri) return null;
|
|
22
|
+
|
|
23
|
+
if (iri === currentUserIri) return <span>by you</span>;
|
|
24
|
+
|
|
25
|
+
if (iri.startsWith(userIriPrefix)) return <span>by a teammate</span>;
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<span className="flex min-w-0 items-center gap-1">
|
|
29
|
+
by <EntityName iri={iri} />
|
|
30
|
+
</span>
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
type UploadedFileRowProps = { file: UploadedFileWithState; currentUserIri: string | undefined };
|
|
35
|
+
|
|
36
|
+
function UploadedFileRow(props: UploadedFileRowProps) {
|
|
37
|
+
const { file, currentUserIri } = props;
|
|
38
|
+
|
|
39
|
+
const redirectEndpoint = useRedirectEndpoint();
|
|
40
|
+
|
|
41
|
+
return (
|
|
42
|
+
<div className="flex flex-col gap-2 px-4 py-3 sm:flex-row sm:items-center sm:gap-3">
|
|
43
|
+
<div className="flex min-w-0 flex-1 items-center gap-3">
|
|
44
|
+
<FileText className="size-4 shrink-0 text-muted-foreground" />
|
|
45
|
+
|
|
46
|
+
<div className="flex min-w-0 flex-1 flex-col gap-0.5">
|
|
47
|
+
<Link to={entityPath(file.iri)} className="min-w-0 hover:underline">
|
|
48
|
+
<TruncateTooltip
|
|
49
|
+
text={file.fileName}
|
|
50
|
+
className="typography-small-medium block truncate text-default-foreground"
|
|
51
|
+
/>
|
|
52
|
+
</Link>
|
|
53
|
+
|
|
54
|
+
<div className="typography-tiny flex min-w-0 flex-wrap items-center gap-x-2 text-muted-foreground">
|
|
55
|
+
{file.byteSize !== undefined && <span>{humanBytes(file.byteSize)}</span>}
|
|
56
|
+
{isPresent(file.extension) && <span title={file.mediaType}>{file.extension.toUpperCase()}</span>}
|
|
57
|
+
{file.uploadedAt && <ModifiedAgo modified={file.uploadedAt} />}
|
|
58
|
+
<Uploader iri={file.uploader} currentUserIri={currentUserIri} />
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
<div className="flex items-center justify-between gap-3 pl-7 sm:pl-0">
|
|
64
|
+
<IngestStateStatus state={file.state} />
|
|
65
|
+
|
|
66
|
+
<Button asChild variant="ghost" size="xs" className="size-7 shrink-0 p-0">
|
|
67
|
+
<a
|
|
68
|
+
href={redirectPath(file.iri, redirectEndpoint)}
|
|
69
|
+
target="_blank"
|
|
70
|
+
rel="noreferrer"
|
|
71
|
+
aria-label={`Download ${file.fileName}`}
|
|
72
|
+
>
|
|
73
|
+
<Download className="size-4" />
|
|
74
|
+
</a>
|
|
75
|
+
</Button>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
type UploadedFilesListProps = { files: readonly UploadedFileWithState[]; currentUserIri?: string };
|
|
82
|
+
|
|
83
|
+
export function UploadedFilesList(props: UploadedFilesListProps) {
|
|
84
|
+
const { files, currentUserIri } = props;
|
|
85
|
+
|
|
86
|
+
return (
|
|
87
|
+
<LinkList>
|
|
88
|
+
{files.map((file) => (
|
|
89
|
+
<UploadedFileRow key={file.iri} file={file} currentUserIri={currentUserIri} />
|
|
90
|
+
))}
|
|
91
|
+
</LinkList>
|
|
92
|
+
);
|
|
93
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { getUserIri } from "@manta-eu/client/shared/stakeholder-iri";
|
|
2
|
+
import { isPresent } from "@manta-eu/lib/present";
|
|
3
|
+
import { explorerCrumb } from "../../namespaces";
|
|
4
|
+
import { uploadsLimit, useUploads } from "../../uploads";
|
|
5
|
+
import { Breadcrumbs } from "../Breadcrumbs";
|
|
6
|
+
import { DetailHeader } from "../DetailHeader";
|
|
7
|
+
import { LoadingRows, StatusText } from "../RawTriples";
|
|
8
|
+
import { IngestRunsList } from "./IngestRunsList";
|
|
9
|
+
import { UploadedFilesList } from "./UploadedFilesList";
|
|
10
|
+
import { useAuthContext } from "#providers/AuthContext";
|
|
11
|
+
|
|
12
|
+
export type UploadedFilesSectionProps = { emptyText?: string };
|
|
13
|
+
|
|
14
|
+
export function UploadedFilesSection(props: UploadedFilesSectionProps) {
|
|
15
|
+
const { emptyText = "No files uploaded yet." } = props;
|
|
16
|
+
|
|
17
|
+
const { isOperator, user } = useAuthContext();
|
|
18
|
+
const { files, isLoading, error } = useUploads({ includeAllFiles: isOperator });
|
|
19
|
+
|
|
20
|
+
if (isLoading) return <LoadingRows />;
|
|
21
|
+
|
|
22
|
+
if (error) return <StatusText role="alert">Failed to load files.</StatusText>;
|
|
23
|
+
|
|
24
|
+
if (!isPresent(files)) return <StatusText>{emptyText}</StatusText>;
|
|
25
|
+
|
|
26
|
+
return (
|
|
27
|
+
<div className="flex flex-col gap-2">
|
|
28
|
+
<UploadedFilesList files={files} currentUserIri={getUserIri(user.id)} />
|
|
29
|
+
{files.length >= uploadsLimit && (
|
|
30
|
+
<p className="typography-caption text-muted-foreground">Showing the newest {uploadsLimit} files.</p>
|
|
31
|
+
)}
|
|
32
|
+
</div>
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function UploadedFilesPage() {
|
|
37
|
+
const { isOperator } = useAuthContext();
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
<div className="flex max-w-5xl flex-col gap-6">
|
|
41
|
+
<Breadcrumbs trail={[explorerCrumb, { label: "Files" }]} />
|
|
42
|
+
|
|
43
|
+
<DetailHeader title="Files" />
|
|
44
|
+
|
|
45
|
+
<p className="typography-small -mt-3 max-w-prose text-muted-foreground">
|
|
46
|
+
{isOperator
|
|
47
|
+
? "Every file in this datastore, newest first, with how its ingest into the knowledge graph ended."
|
|
48
|
+
: "Files uploaded to this datastore, newest first, with how their ingest into the knowledge graph ended."}{" "}
|
|
49
|
+
CSV, Parquet, Turtle and N-Triples files are ingested automatically; other files are stored.
|
|
50
|
+
</p>
|
|
51
|
+
|
|
52
|
+
<UploadedFilesSection />
|
|
53
|
+
</div>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function IngestRunsPage() {
|
|
58
|
+
const { isOperator } = useAuthContext();
|
|
59
|
+
const { runs, fileByIri, isLoading, error } = useUploads({ includeAllFiles: isOperator });
|
|
60
|
+
|
|
61
|
+
return (
|
|
62
|
+
<div className="flex max-w-5xl flex-col gap-6">
|
|
63
|
+
<Breadcrumbs trail={[explorerCrumb, { label: "Ingest runs" }]} />
|
|
64
|
+
|
|
65
|
+
<DetailHeader title="Ingest runs" />
|
|
66
|
+
|
|
67
|
+
<p className="typography-small -mt-3 max-w-prose text-muted-foreground">
|
|
68
|
+
Each attempt to add an uploaded file to the knowledge graph, newest first.
|
|
69
|
+
</p>
|
|
70
|
+
|
|
71
|
+
{isLoading && <LoadingRows />}
|
|
72
|
+
|
|
73
|
+
{error && <StatusText role="alert">Failed to load ingest runs.</StatusText>}
|
|
74
|
+
|
|
75
|
+
{!isLoading && !error && !isPresent(runs) && <StatusText>No file has been ingested yet.</StatusText>}
|
|
76
|
+
|
|
77
|
+
{isPresent(runs) && <IngestRunsList runs={runs} fileByIri={fileByIri} />}
|
|
78
|
+
</div>
|
|
79
|
+
);
|
|
80
|
+
}
|
|
@@ -9,6 +9,12 @@ export { DataExplorerLayout } from "./components/DataExplorerLayout";
|
|
|
9
9
|
export { ExplorerEmptyState as DataExplorerIndexRoute } from "./components/ExplorerEmptyState";
|
|
10
10
|
export { CoverageOverview as DataExplorerCoverageRoute } from "./components/ontology-coverage";
|
|
11
11
|
export { RecentTypes as DataExplorerRecentRoute } from "./components/RecentTypes";
|
|
12
|
+
export {
|
|
13
|
+
IngestRunsPage as DataExplorerIngestRoute,
|
|
14
|
+
UploadedFilesPage as DataExplorerFilesRoute,
|
|
15
|
+
UploadedFilesSection,
|
|
16
|
+
type UploadedFilesSectionProps,
|
|
17
|
+
} from "./components/uploads/UploadsPages";
|
|
12
18
|
|
|
13
19
|
export function DataExplorerPrefixRoute() {
|
|
14
20
|
const { prefix } = useParams<{ prefix: string }>();
|
|
@@ -96,8 +96,12 @@ export function localName(iri: string, prefix: string): string {
|
|
|
96
96
|
export { entityPath, entitySegment, explorerPath };
|
|
97
97
|
export const recentSegment = "recent";
|
|
98
98
|
export const coverageSegment = "coverage";
|
|
99
|
+
export const filesSegment = "files";
|
|
100
|
+
export const ingestRunsSegment = "ingest-runs";
|
|
99
101
|
export const recentPath = `${explorerPath}/${recentSegment}`;
|
|
100
102
|
export const coveragePath = `${explorerPath}/${coverageSegment}`;
|
|
103
|
+
export const filesPath = `${explorerPath}/${filesSegment}`;
|
|
104
|
+
export const ingestRunsPath = `${explorerPath}/${ingestRunsSegment}`;
|
|
101
105
|
export const explorerCrumb = { label: "Data", to: explorerPath };
|
|
102
106
|
|
|
103
107
|
export function isExplorerPrefix(value: string | undefined): value is string {
|
|
@@ -105,7 +109,9 @@ export function isExplorerPrefix(value: string | undefined): value is string {
|
|
|
105
109
|
}
|
|
106
110
|
|
|
107
111
|
export function isNamespaceSegment(segment: string | undefined): segment is string {
|
|
108
|
-
|
|
112
|
+
const reserved = [recentSegment, coverageSegment, filesSegment, ingestRunsSegment, entitySegment];
|
|
113
|
+
|
|
114
|
+
return isPresent(segment) && !reserved.includes(segment);
|
|
109
115
|
}
|
|
110
116
|
|
|
111
117
|
export function namespacePath(key: string): string {
|