@gravity-ui/querieskit 1.5.1 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -3
- package/build/cjs/components/QueryGraph/QueryGraph.css +70 -0
- package/build/cjs/components/QueryGraph/QueryGraph.css.map +1 -0
- package/build/cjs/components/QueryGraph/QueryGraph.d.ts +4 -0
- package/build/cjs/components/QueryGraph/QueryGraph.js +517 -0
- package/build/cjs/components/QueryGraph/QueryGraph.js.map +1 -0
- package/build/cjs/components/QueryGraph/QueryGraph.stories.d.ts +16 -0
- package/build/cjs/components/QueryGraph/QueryGraph.stories.js +339 -0
- package/build/cjs/components/QueryGraph/QueryGraph.stories.js.map +1 -0
- package/build/cjs/components/QueryGraph/helpers/layout.d.ts +9 -0
- package/build/cjs/components/QueryGraph/helpers/layout.js +138 -0
- package/build/cjs/components/QueryGraph/helpers/layout.js.map +1 -0
- package/build/cjs/components/QueryGraph/helpers/presentation.d.ts +18 -0
- package/build/cjs/components/QueryGraph/helpers/presentation.js +44 -0
- package/build/cjs/components/QueryGraph/helpers/presentation.js.map +1 -0
- package/build/cjs/components/QueryGraph/i18n/dicts.d.ts +55 -0
- package/build/cjs/components/QueryGraph/i18n/dicts.js +14 -0
- package/build/cjs/components/QueryGraph/i18n/dicts.js.map +1 -0
- package/build/cjs/components/QueryGraph/i18n/en.json +26 -0
- package/build/cjs/components/QueryGraph/i18n/index.d.ts +6 -0
- package/build/cjs/components/QueryGraph/i18n/index.js +11 -0
- package/build/cjs/components/QueryGraph/i18n/index.js.map +1 -0
- package/build/cjs/components/QueryGraph/i18n/ru.json +26 -0
- package/build/cjs/components/QueryGraph/index.d.ts +2 -0
- package/build/cjs/components/QueryGraph/index.js +13 -0
- package/build/cjs/components/QueryGraph/index.js.map +1 -0
- package/build/cjs/components/QueryGraph/internal/QueryGraphCanvasBlock.d.ts +24 -0
- package/build/cjs/components/QueryGraph/internal/QueryGraphCanvasBlock.js +309 -0
- package/build/cjs/components/QueryGraph/internal/QueryGraphCanvasBlock.js.map +1 -0
- package/build/cjs/components/QueryGraph/internal/QueryGraphPopup.d.ts +5 -0
- package/build/cjs/components/QueryGraph/internal/QueryGraphPopup.js +242 -0
- package/build/cjs/components/QueryGraph/internal/QueryGraphPopup.js.map +1 -0
- package/build/cjs/components/QueryGraph/internal/queryGraphIcons.d.ts +12 -0
- package/build/cjs/components/QueryGraph/internal/queryGraphIcons.js +161 -0
- package/build/cjs/components/QueryGraph/internal/queryGraphIcons.js.map +1 -0
- package/build/cjs/components/QueryGraph/internal/useQueryGraphLayout.d.ts +22 -0
- package/build/cjs/components/QueryGraph/internal/useQueryGraphLayout.js +60 -0
- package/build/cjs/components/QueryGraph/internal/useQueryGraphLayout.js.map +1 -0
- package/build/cjs/components/QueryGraph/story/largeGraphData.d.ts +3 -0
- package/build/cjs/components/QueryGraph/story/largeGraphData.js +227 -0
- package/build/cjs/components/QueryGraph/story/largeGraphData.js.map +1 -0
- package/build/cjs/components/index.d.ts +2 -0
- package/build/cjs/components/index.js +9 -1
- package/build/cjs/components/index.js.map +1 -1
- package/build/cjs/helpers/buildColumnsFromKeys.d.ts +1 -1
- package/build/cjs/helpers/buildColumnsFromKeys.js.map +1 -1
- package/build/cjs/index.d.ts +1 -0
- package/build/cjs/index.js +11 -0
- package/build/cjs/index.js.map +1 -1
- package/build/cjs/modules/ClustersList/ClustersList.d.ts +1 -1
- package/build/cjs/modules/ClustersList/ClustersList.js +4 -3
- package/build/cjs/modules/ClustersList/ClustersList.js.map +1 -1
- package/build/cjs/modules/HistoryHeader/HistoryHeader.js +4 -3
- package/build/cjs/modules/HistoryHeader/HistoryHeader.js.map +1 -1
- package/build/cjs/modules/HistoryRow/HistoryRow.js +12 -7
- package/build/cjs/modules/HistoryRow/HistoryRow.js.map +1 -1
- package/build/cjs/modules/HistorySearchRow/HistorySearchRow.js +8 -5
- package/build/cjs/modules/HistorySearchRow/HistorySearchRow.js.map +1 -1
- package/build/cjs/modules/HistorySearchRow/helpers/resolveMonacoLanguage.d.ts +1 -1
- package/build/cjs/modules/HistorySearchRow/helpers/resolveMonacoLanguage.js +5 -5
- package/build/cjs/modules/HistorySearchRow/helpers/resolveMonacoLanguage.js.map +1 -1
- package/build/cjs/modules/NavigationDetail/NavigationDetail.d.ts +1 -1
- package/build/cjs/modules/NavigationDetail/NavigationDetail.js +2 -2
- package/build/cjs/modules/NavigationDetail/NavigationDetail.js.map +1 -1
- package/build/cjs/modules/NavigationHeader/NavigationHeader.d.ts +1 -1
- package/build/cjs/modules/NavigationHeader/NavigationHeader.js +2 -2
- package/build/cjs/modules/NavigationHeader/NavigationHeader.js.map +1 -1
- package/build/cjs/modules/NavigationItemsList/NavigationItemsList.d.ts +1 -1
- package/build/cjs/modules/NavigationItemsList/NavigationItemsList.js +4 -3
- package/build/cjs/modules/NavigationItemsList/NavigationItemsList.js.map +1 -1
- package/build/cjs/modules/NavigationItemsList/internal/NavigationItemsListEmptyState.d.ts +1 -1
- package/build/cjs/modules/NavigationItemsList/internal/NavigationItemsListEmptyState.js +2 -2
- package/build/cjs/modules/NavigationItemsList/internal/NavigationItemsListEmptyState.js.map +1 -1
- package/build/cjs/modules/NavigationMeta/NavigationMeta.js +4 -3
- package/build/cjs/modules/NavigationMeta/NavigationMeta.js.map +1 -1
- package/build/cjs/modules/NavigationMeta/i18n/index.d.ts +2 -2
- package/build/cjs/modules/NavigationPreview/NavigationPreview.d.ts +1 -1
- package/build/cjs/modules/NavigationPreview/NavigationPreview.js +6 -4
- package/build/cjs/modules/NavigationPreview/NavigationPreview.js.map +1 -1
- package/build/cjs/modules/NavigationPreview/helpers/buildPreviewColumns.d.ts +1 -1
- package/build/cjs/modules/NavigationPreview/helpers/buildPreviewColumns.js.map +1 -1
- package/build/cjs/modules/NavigationSchema/NavigationSchema.d.ts +1 -1
- package/build/cjs/modules/NavigationSchema/NavigationSchema.js +4 -3
- package/build/cjs/modules/NavigationSchema/NavigationSchema.js.map +1 -1
- package/build/cjs/modules/NavigationSchema/helpers/buildSchemaColumns.d.ts +1 -1
- package/build/cjs/modules/NavigationSchema/helpers/buildSchemaColumns.js.map +1 -1
- package/build/cjs/modules/NavigationView/NavigationView.d.ts +1 -1
- package/build/cjs/modules/NavigationView/NavigationView.js +4 -3
- package/build/cjs/modules/NavigationView/NavigationView.js.map +1 -1
- package/build/cjs/modules/NavigationView/helpers/buildViewColumns.d.ts +1 -1
- package/build/cjs/modules/NavigationView/helpers/buildViewColumns.js.map +1 -1
- package/build/cjs/modules/NavigationView/internal/NavigationViewSectionItem.d.ts +1 -1
- package/build/cjs/modules/NavigationView/internal/NavigationViewSectionItem.js +4 -3
- package/build/cjs/modules/NavigationView/internal/NavigationViewSectionItem.js.map +1 -1
- package/build/cjs/modules/QueriesList/QueriesList.js +2 -2
- package/build/cjs/modules/QueriesList/QueriesList.js.map +1 -1
- package/build/cjs/modules/QueryProgress/QueryProgress.css +64 -0
- package/build/cjs/modules/QueryProgress/QueryProgress.css.map +1 -0
- package/build/cjs/modules/QueryProgress/QueryProgress.d.ts +4 -0
- package/build/cjs/modules/QueryProgress/QueryProgress.js +135 -0
- package/build/cjs/modules/QueryProgress/QueryProgress.js.map +1 -0
- package/build/cjs/modules/QueryProgress/QueryProgress.stories.d.ts +7 -0
- package/build/cjs/modules/QueryProgress/QueryProgress.stories.js +38 -0
- package/build/cjs/modules/QueryProgress/QueryProgress.stories.js.map +1 -0
- package/build/cjs/modules/QueryProgress/i18n/dicts.d.ts +25 -0
- package/build/cjs/modules/QueryProgress/i18n/dicts.js +14 -0
- package/build/cjs/modules/QueryProgress/i18n/dicts.js.map +1 -0
- package/build/cjs/modules/QueryProgress/i18n/en.json +11 -0
- package/build/cjs/modules/QueryProgress/i18n/index.d.ts +6 -0
- package/build/cjs/modules/QueryProgress/i18n/index.js +11 -0
- package/build/cjs/modules/QueryProgress/i18n/index.js.map +1 -0
- package/build/cjs/modules/QueryProgress/i18n/ru.json +11 -0
- package/build/cjs/modules/QueryProgress/index.d.ts +2 -0
- package/build/cjs/modules/QueryProgress/index.js +13 -0
- package/build/cjs/modules/QueryProgress/index.js.map +1 -0
- package/build/cjs/modules/QueryStatistics/i18n/index.d.ts +2 -2
- package/build/cjs/modules/RowsList/RowsList.js +4 -3
- package/build/cjs/modules/RowsList/RowsList.js.map +1 -1
- package/build/cjs/modules/SavedQueryRow/SavedQueryRow.d.ts +2 -2
- package/build/cjs/modules/SavedQueryRow/SavedQueryRow.js +6 -4
- package/build/cjs/modules/SavedQueryRow/SavedQueryRow.js.map +1 -1
- package/build/cjs/modules/SavedQuerySearchRow/SavedQuerySearchRow.d.ts +2 -2
- package/build/cjs/modules/SavedQuerySearchRow/SavedQuerySearchRow.js +4 -3
- package/build/cjs/modules/SavedQuerySearchRow/SavedQuerySearchRow.js.map +1 -1
- package/build/cjs/modules/TutorialRow/TutorialRow.d.ts +4 -2
- package/build/cjs/modules/TutorialRow/TutorialRow.js +5 -3
- package/build/cjs/modules/TutorialRow/TutorialRow.js.map +1 -1
- package/build/cjs/modules/TutorialSearchRow/TutorialSearchRow.d.ts +4 -2
- package/build/cjs/modules/TutorialSearchRow/TutorialSearchRow.js +7 -4
- package/build/cjs/modules/TutorialSearchRow/TutorialSearchRow.js.map +1 -1
- package/build/cjs/modules/index.d.ts +2 -0
- package/build/cjs/modules/index.js +8 -0
- package/build/cjs/modules/index.js.map +1 -1
- package/build/cjs/types/queryGraph.d.ts +87 -0
- package/build/cjs/types/queryGraph.js +6 -0
- package/build/cjs/types/queryGraph.js.map +1 -0
- package/build/cjs/widgets/DashboardCharts/DashboardCharts.js +8 -6
- package/build/cjs/widgets/DashboardCharts/DashboardCharts.js.map +1 -1
- package/build/cjs/widgets/DashboardCharts/types.d.ts +3 -3
- package/build/cjs/widgets/DashboardCharts/types.js.map +1 -1
- package/build/cjs/widgets/QueriesHistory/QueriesHistory.js +2 -2
- package/build/cjs/widgets/QueriesHistory/QueriesHistory.js.map +1 -1
- package/build/cjs/widgets/QueriesHistory/internal/HistoryRowContent.js +6 -5
- package/build/cjs/widgets/QueriesHistory/internal/HistoryRowContent.js.map +1 -1
- package/build/cjs/widgets/QueriesNavigation/QueriesNavigation.d.ts +1 -1
- package/build/cjs/widgets/QueriesNavigation/QueriesNavigation.js +13 -9
- package/build/cjs/widgets/QueriesNavigation/QueriesNavigation.js.map +1 -1
- package/build/cjs/widgets/QueriesNavigation/helpers/createEmptyDetailConfig.js +2 -2
- package/build/cjs/widgets/QueriesNavigation/helpers/createEmptyDetailConfig.js.map +1 -1
- package/build/cjs/widgets/QueriesNavigation/helpers/createTableDetailConfig.js +8 -5
- package/build/cjs/widgets/QueriesNavigation/helpers/createTableDetailConfig.js.map +1 -1
- package/build/cjs/widgets/QueryResults/QueryResults.js +2 -2
- package/build/cjs/widgets/QueryResults/QueryResults.js.map +1 -1
- package/build/cjs/widgets/QueryResults/i18n/index.d.ts +2 -2
- package/build/cjs/widgets/QueryResults/internal/QueryResultsSchema.js +4 -3
- package/build/cjs/widgets/QueryResults/internal/QueryResultsSchema.js.map +1 -1
- package/build/cjs/widgets/SavedQueries/SavedQueries.d.ts +2 -2
- package/build/cjs/widgets/SavedQueries/SavedQueries.js +2 -2
- package/build/cjs/widgets/SavedQueries/SavedQueries.js.map +1 -1
- package/build/cjs/widgets/SavedQueries/SavedQueryRowContent.d.ts +2 -2
- package/build/cjs/widgets/SavedQueries/SavedQueryRowContent.js +6 -5
- package/build/cjs/widgets/SavedQueries/SavedQueryRowContent.js.map +1 -1
- package/build/cjs/widgets/TutorialsHistory/TutorialRowContent.d.ts +3 -3
- package/build/cjs/widgets/TutorialsHistory/TutorialRowContent.js +12 -8
- package/build/cjs/widgets/TutorialsHistory/TutorialRowContent.js.map +1 -1
- package/build/cjs/widgets/TutorialsHistory/TutorialsHistory.d.ts +8 -3
- package/build/cjs/widgets/TutorialsHistory/TutorialsHistory.js +19 -7
- package/build/cjs/widgets/TutorialsHistory/TutorialsHistory.js.map +1 -1
- package/build/cjs/widgets/TutorialsHistory/TutorialsHistory.stories.d.ts +5 -0
- package/build/cjs/widgets/TutorialsHistory/TutorialsHistory.stories.js +244 -1
- package/build/cjs/widgets/TutorialsHistory/TutorialsHistory.stories.js.map +1 -1
- package/build/esm/components/QueryGraph/QueryGraph.css +70 -0
- package/build/esm/components/QueryGraph/QueryGraph.css.map +1 -0
- package/build/esm/components/QueryGraph/QueryGraph.d.ts +4 -0
- package/build/esm/components/QueryGraph/QueryGraph.js +510 -0
- package/build/esm/components/QueryGraph/QueryGraph.js.map +1 -0
- package/build/esm/components/QueryGraph/QueryGraph.scss +81 -0
- package/build/esm/components/QueryGraph/QueryGraph.stories.d.ts +16 -0
- package/build/esm/components/QueryGraph/QueryGraph.stories.js +331 -0
- package/build/esm/components/QueryGraph/QueryGraph.stories.js.map +1 -0
- package/build/esm/components/QueryGraph/helpers/layout.d.ts +9 -0
- package/build/esm/components/QueryGraph/helpers/layout.js +128 -0
- package/build/esm/components/QueryGraph/helpers/layout.js.map +1 -0
- package/build/esm/components/QueryGraph/helpers/presentation.d.ts +18 -0
- package/build/esm/components/QueryGraph/helpers/presentation.js +35 -0
- package/build/esm/components/QueryGraph/helpers/presentation.js.map +1 -0
- package/build/esm/components/QueryGraph/i18n/dicts.d.ts +55 -0
- package/build/esm/components/QueryGraph/i18n/dicts.js +7 -0
- package/build/esm/components/QueryGraph/i18n/dicts.js.map +1 -0
- package/build/esm/components/QueryGraph/i18n/en.json +26 -0
- package/build/esm/components/QueryGraph/i18n/index.d.ts +6 -0
- package/build/esm/components/QueryGraph/i18n/index.js +4 -0
- package/build/esm/components/QueryGraph/i18n/index.js.map +1 -0
- package/build/esm/components/QueryGraph/i18n/ru.json +26 -0
- package/build/esm/components/QueryGraph/index.d.ts +2 -0
- package/build/esm/components/QueryGraph/index.js +2 -0
- package/build/esm/components/QueryGraph/index.js.map +1 -0
- package/build/esm/components/QueryGraph/internal/QueryGraphCanvasBlock.d.ts +24 -0
- package/build/esm/components/QueryGraph/internal/QueryGraphCanvasBlock.js +301 -0
- package/build/esm/components/QueryGraph/internal/QueryGraphCanvasBlock.js.map +1 -0
- package/build/esm/components/QueryGraph/internal/QueryGraphPopup.d.ts +5 -0
- package/build/esm/components/QueryGraph/internal/QueryGraphPopup.js +234 -0
- package/build/esm/components/QueryGraph/internal/QueryGraphPopup.js.map +1 -0
- package/build/esm/components/QueryGraph/internal/queryGraphIcons.d.ts +12 -0
- package/build/esm/components/QueryGraph/internal/queryGraphIcons.js +150 -0
- package/build/esm/components/QueryGraph/internal/queryGraphIcons.js.map +1 -0
- package/build/esm/components/QueryGraph/internal/useQueryGraphLayout.d.ts +22 -0
- package/build/esm/components/QueryGraph/internal/useQueryGraphLayout.js +53 -0
- package/build/esm/components/QueryGraph/internal/useQueryGraphLayout.js.map +1 -0
- package/build/esm/components/QueryGraph/story/largeGraphData.d.ts +3 -0
- package/build/esm/components/QueryGraph/story/largeGraphData.js +220 -0
- package/build/esm/components/QueryGraph/story/largeGraphData.js.map +1 -0
- package/build/esm/components/index.d.ts +2 -0
- package/build/esm/components/index.js +1 -0
- package/build/esm/components/index.js.map +1 -1
- package/build/esm/helpers/buildColumnsFromKeys.d.ts +1 -1
- package/build/esm/helpers/buildColumnsFromKeys.js.map +1 -1
- package/build/esm/index.d.ts +1 -0
- package/build/esm/index.js +1 -0
- package/build/esm/index.js.map +1 -1
- package/build/esm/modules/ClustersList/ClustersList.d.ts +1 -1
- package/build/esm/modules/ClustersList/ClustersList.js +2 -1
- package/build/esm/modules/ClustersList/ClustersList.js.map +1 -1
- package/build/esm/modules/HistoryHeader/HistoryHeader.js +2 -1
- package/build/esm/modules/HistoryHeader/HistoryHeader.js.map +1 -1
- package/build/esm/modules/HistoryRow/HistoryRow.js +6 -1
- package/build/esm/modules/HistoryRow/HistoryRow.js.map +1 -1
- package/build/esm/modules/HistorySearchRow/HistorySearchRow.js +4 -1
- package/build/esm/modules/HistorySearchRow/HistorySearchRow.js.map +1 -1
- package/build/esm/modules/HistorySearchRow/helpers/resolveMonacoLanguage.d.ts +1 -1
- package/build/esm/modules/HistorySearchRow/helpers/resolveMonacoLanguage.js +1 -1
- package/build/esm/modules/HistorySearchRow/helpers/resolveMonacoLanguage.js.map +1 -1
- package/build/esm/modules/NavigationDetail/NavigationDetail.d.ts +1 -1
- package/build/esm/modules/NavigationDetail/NavigationDetail.js +1 -1
- package/build/esm/modules/NavigationDetail/NavigationDetail.js.map +1 -1
- package/build/esm/modules/NavigationHeader/NavigationHeader.d.ts +1 -1
- package/build/esm/modules/NavigationHeader/NavigationHeader.js +1 -1
- package/build/esm/modules/NavigationHeader/NavigationHeader.js.map +1 -1
- package/build/esm/modules/NavigationItemsList/NavigationItemsList.d.ts +1 -1
- package/build/esm/modules/NavigationItemsList/NavigationItemsList.js +2 -1
- package/build/esm/modules/NavigationItemsList/NavigationItemsList.js.map +1 -1
- package/build/esm/modules/NavigationItemsList/internal/NavigationItemsListEmptyState.d.ts +1 -1
- package/build/esm/modules/NavigationItemsList/internal/NavigationItemsListEmptyState.js +1 -1
- package/build/esm/modules/NavigationItemsList/internal/NavigationItemsListEmptyState.js.map +1 -1
- package/build/esm/modules/NavigationMeta/NavigationMeta.js +2 -1
- package/build/esm/modules/NavigationMeta/NavigationMeta.js.map +1 -1
- package/build/esm/modules/NavigationMeta/i18n/index.d.ts +2 -2
- package/build/esm/modules/NavigationPreview/NavigationPreview.d.ts +1 -1
- package/build/esm/modules/NavigationPreview/NavigationPreview.js +3 -1
- package/build/esm/modules/NavigationPreview/NavigationPreview.js.map +1 -1
- package/build/esm/modules/NavigationPreview/helpers/buildPreviewColumns.d.ts +1 -1
- package/build/esm/modules/NavigationPreview/helpers/buildPreviewColumns.js.map +1 -1
- package/build/esm/modules/NavigationSchema/NavigationSchema.d.ts +1 -1
- package/build/esm/modules/NavigationSchema/NavigationSchema.js +2 -1
- package/build/esm/modules/NavigationSchema/NavigationSchema.js.map +1 -1
- package/build/esm/modules/NavigationSchema/helpers/buildSchemaColumns.d.ts +1 -1
- package/build/esm/modules/NavigationSchema/helpers/buildSchemaColumns.js.map +1 -1
- package/build/esm/modules/NavigationView/NavigationView.d.ts +1 -1
- package/build/esm/modules/NavigationView/NavigationView.js +2 -1
- package/build/esm/modules/NavigationView/NavigationView.js.map +1 -1
- package/build/esm/modules/NavigationView/helpers/buildViewColumns.d.ts +1 -1
- package/build/esm/modules/NavigationView/helpers/buildViewColumns.js.map +1 -1
- package/build/esm/modules/NavigationView/internal/NavigationViewSectionItem.d.ts +1 -1
- package/build/esm/modules/NavigationView/internal/NavigationViewSectionItem.js +2 -1
- package/build/esm/modules/NavigationView/internal/NavigationViewSectionItem.js.map +1 -1
- package/build/esm/modules/QueriesList/QueriesList.js +1 -1
- package/build/esm/modules/QueriesList/QueriesList.js.map +1 -1
- package/build/esm/modules/QueryProgress/QueryProgress.css +64 -0
- package/build/esm/modules/QueryProgress/QueryProgress.css.map +1 -0
- package/build/esm/modules/QueryProgress/QueryProgress.d.ts +4 -0
- package/build/esm/modules/QueryProgress/QueryProgress.js +127 -0
- package/build/esm/modules/QueryProgress/QueryProgress.js.map +1 -0
- package/build/esm/modules/QueryProgress/QueryProgress.scss +72 -0
- package/build/esm/modules/QueryProgress/QueryProgress.stories.d.ts +7 -0
- package/build/esm/modules/QueryProgress/QueryProgress.stories.js +31 -0
- package/build/esm/modules/QueryProgress/QueryProgress.stories.js.map +1 -0
- package/build/esm/modules/QueryProgress/i18n/dicts.d.ts +25 -0
- package/build/esm/modules/QueryProgress/i18n/dicts.js +7 -0
- package/build/esm/modules/QueryProgress/i18n/dicts.js.map +1 -0
- package/build/esm/modules/QueryProgress/i18n/en.json +11 -0
- package/build/esm/modules/QueryProgress/i18n/index.d.ts +6 -0
- package/build/esm/modules/QueryProgress/i18n/index.js +4 -0
- package/build/esm/modules/QueryProgress/i18n/index.js.map +1 -0
- package/build/esm/modules/QueryProgress/i18n/ru.json +11 -0
- package/build/esm/modules/QueryProgress/index.d.ts +2 -0
- package/build/esm/modules/QueryProgress/index.js +2 -0
- package/build/esm/modules/QueryProgress/index.js.map +1 -0
- package/build/esm/modules/QueryStatistics/i18n/index.d.ts +2 -2
- package/build/esm/modules/RowsList/RowsList.js +2 -1
- package/build/esm/modules/RowsList/RowsList.js.map +1 -1
- package/build/esm/modules/SavedQueryRow/SavedQueryRow.d.ts +2 -2
- package/build/esm/modules/SavedQueryRow/SavedQueryRow.js +3 -1
- package/build/esm/modules/SavedQueryRow/SavedQueryRow.js.map +1 -1
- package/build/esm/modules/SavedQuerySearchRow/SavedQuerySearchRow.d.ts +2 -2
- package/build/esm/modules/SavedQuerySearchRow/SavedQuerySearchRow.js +2 -1
- package/build/esm/modules/SavedQuerySearchRow/SavedQuerySearchRow.js.map +1 -1
- package/build/esm/modules/TutorialRow/TutorialRow.d.ts +4 -2
- package/build/esm/modules/TutorialRow/TutorialRow.js +4 -2
- package/build/esm/modules/TutorialRow/TutorialRow.js.map +1 -1
- package/build/esm/modules/TutorialSearchRow/TutorialSearchRow.d.ts +4 -2
- package/build/esm/modules/TutorialSearchRow/TutorialSearchRow.js +5 -2
- package/build/esm/modules/TutorialSearchRow/TutorialSearchRow.js.map +1 -1
- package/build/esm/modules/index.d.ts +2 -0
- package/build/esm/modules/index.js +1 -0
- package/build/esm/modules/index.js.map +1 -1
- package/build/esm/types/queryGraph.d.ts +87 -0
- package/build/esm/types/queryGraph.js +2 -0
- package/build/esm/types/queryGraph.js.map +1 -0
- package/build/esm/widgets/DashboardCharts/DashboardCharts.js +4 -2
- package/build/esm/widgets/DashboardCharts/DashboardCharts.js.map +1 -1
- package/build/esm/widgets/DashboardCharts/types.d.ts +3 -3
- package/build/esm/widgets/DashboardCharts/types.js.map +1 -1
- package/build/esm/widgets/QueriesHistory/QueriesHistory.js +1 -1
- package/build/esm/widgets/QueriesHistory/QueriesHistory.js.map +1 -1
- package/build/esm/widgets/QueriesHistory/internal/HistoryRowContent.js +3 -2
- package/build/esm/widgets/QueriesHistory/internal/HistoryRowContent.js.map +1 -1
- package/build/esm/widgets/QueriesNavigation/QueriesNavigation.d.ts +1 -1
- package/build/esm/widgets/QueriesNavigation/QueriesNavigation.js +6 -2
- package/build/esm/widgets/QueriesNavigation/QueriesNavigation.js.map +1 -1
- package/build/esm/widgets/QueriesNavigation/helpers/createEmptyDetailConfig.js +1 -1
- package/build/esm/widgets/QueriesNavigation/helpers/createEmptyDetailConfig.js.map +1 -1
- package/build/esm/widgets/QueriesNavigation/helpers/createTableDetailConfig.js +4 -1
- package/build/esm/widgets/QueriesNavigation/helpers/createTableDetailConfig.js.map +1 -1
- package/build/esm/widgets/QueryResults/QueryResults.js +1 -1
- package/build/esm/widgets/QueryResults/QueryResults.js.map +1 -1
- package/build/esm/widgets/QueryResults/i18n/index.d.ts +2 -2
- package/build/esm/widgets/QueryResults/internal/QueryResultsSchema.js +2 -1
- package/build/esm/widgets/QueryResults/internal/QueryResultsSchema.js.map +1 -1
- package/build/esm/widgets/SavedQueries/SavedQueries.d.ts +2 -2
- package/build/esm/widgets/SavedQueries/SavedQueries.js +1 -1
- package/build/esm/widgets/SavedQueries/SavedQueries.js.map +1 -1
- package/build/esm/widgets/SavedQueries/SavedQueryRowContent.d.ts +2 -2
- package/build/esm/widgets/SavedQueries/SavedQueryRowContent.js +3 -2
- package/build/esm/widgets/SavedQueries/SavedQueryRowContent.js.map +1 -1
- package/build/esm/widgets/TutorialsHistory/TutorialRowContent.d.ts +3 -3
- package/build/esm/widgets/TutorialsHistory/TutorialRowContent.js +9 -5
- package/build/esm/widgets/TutorialsHistory/TutorialRowContent.js.map +1 -1
- package/build/esm/widgets/TutorialsHistory/TutorialsHistory.d.ts +8 -3
- package/build/esm/widgets/TutorialsHistory/TutorialsHistory.js +16 -4
- package/build/esm/widgets/TutorialsHistory/TutorialsHistory.js.map +1 -1
- package/build/esm/widgets/TutorialsHistory/TutorialsHistory.stories.d.ts +5 -0
- package/build/esm/widgets/TutorialsHistory/TutorialsHistory.stories.js +244 -1
- package/build/esm/widgets/TutorialsHistory/TutorialsHistory.stories.js.map +1 -1
- package/package.json +84 -5
|
@@ -0,0 +1,510 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
+
import "core-js/modules/es.error.cause.js";
|
|
4
|
+
import "core-js/modules/es.error.to-string.js";
|
|
5
|
+
import "core-js/modules/es.array.concat.js";
|
|
6
|
+
import "core-js/modules/es.array.find.js";
|
|
7
|
+
import "core-js/modules/es.array.flat-map.js";
|
|
8
|
+
import "core-js/modules/es.array.join.js";
|
|
9
|
+
import "core-js/modules/es.array.map.js";
|
|
10
|
+
import "core-js/modules/es.array.unscopables.flat-map.js";
|
|
11
|
+
import "core-js/modules/es.function.name.js";
|
|
12
|
+
import "core-js/modules/es.iterator.constructor.js";
|
|
13
|
+
import "core-js/modules/es.iterator.find.js";
|
|
14
|
+
import "core-js/modules/es.iterator.flat-map.js";
|
|
15
|
+
import "core-js/modules/es.iterator.map.js";
|
|
16
|
+
import "core-js/modules/es.object.to-string.js";
|
|
17
|
+
import "core-js/modules/es.string.trim.js";
|
|
18
|
+
import React, { useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
|
|
19
|
+
import { BezierMultipointConnection, ECanDrag, GraphState } from '@gravity-ui/graph';
|
|
20
|
+
import { GraphCanvas, useGraph, useGraphEvent } from '@gravity-ui/graph/react';
|
|
21
|
+
import { MagnifierMinus, MagnifierPlus, SquareDashed } from '@gravity-ui/icons';
|
|
22
|
+
import { Button, Icon, Loader, Text, Tooltip, useThemeValue } from '@gravity-ui/uikit';
|
|
23
|
+
import cn from 'bem-cn-lite';
|
|
24
|
+
import { createQueryGraphConnections, getQueryGraphNodeSize, validateQueryGraph } from "./helpers/layout";
|
|
25
|
+
import i18n from "./i18n";
|
|
26
|
+
import { QueryGraphCanvasBlock } from "./internal/QueryGraphCanvasBlock";
|
|
27
|
+
import { QueryGraphPopup } from "./internal/QueryGraphPopup";
|
|
28
|
+
import { getQueryGraphNodeIconSvgs } from "./internal/queryGraphIcons";
|
|
29
|
+
import { useQueryGraphLayout } from "./internal/useQueryGraphLayout";
|
|
30
|
+
import "./QueryGraph.css";
|
|
31
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
32
|
+
var block = cn('qp-query-graph');
|
|
33
|
+
var FIT_PADDING = 120;
|
|
34
|
+
var ZOOM_STEP = 0.08;
|
|
35
|
+
var renderEmptyBlock = function renderEmptyBlock() {
|
|
36
|
+
return /*#__PURE__*/_jsx(React.Fragment, {});
|
|
37
|
+
};
|
|
38
|
+
export function QueryGraph(_ref) {
|
|
39
|
+
var nodes = _ref.nodes,
|
|
40
|
+
edges = _ref.edges,
|
|
41
|
+
loading = _ref.loading,
|
|
42
|
+
errorContent = _ref.errorContent,
|
|
43
|
+
className = _ref.className,
|
|
44
|
+
_ref$autoCenter = _ref.autoCenter,
|
|
45
|
+
autoCenter = _ref$autoCenter === void 0 ? true : _ref$autoCenter,
|
|
46
|
+
_ref$active = _ref.active,
|
|
47
|
+
active = _ref$active === void 0 ? true : _ref$active,
|
|
48
|
+
_ref$largeGraphThresh = _ref.largeGraphThreshold,
|
|
49
|
+
largeGraphThreshold = _ref$largeGraphThresh === void 0 ? 250 : _ref$largeGraphThresh,
|
|
50
|
+
renderNodePopup = _ref.renderNodePopup,
|
|
51
|
+
onNodeClick = _ref.onNodeClick,
|
|
52
|
+
onError = _ref.onError;
|
|
53
|
+
var _useState = useState(false),
|
|
54
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
55
|
+
showLargeGraph = _useState2[0],
|
|
56
|
+
setShowLargeGraph = _useState2[1];
|
|
57
|
+
var nodesRef = useRef(nodes);
|
|
58
|
+
var edgesRef = useRef(edges);
|
|
59
|
+
nodesRef.current = nodes;
|
|
60
|
+
edgesRef.current = edges;
|
|
61
|
+
var structureKey = useMemo(function () {
|
|
62
|
+
return "".concat(nodes.map(function (_ref2) {
|
|
63
|
+
var id = _ref2.id,
|
|
64
|
+
kind = _ref2.kind;
|
|
65
|
+
return "".concat(id, ":").concat(kind);
|
|
66
|
+
}).join('|'), "::").concat(edges.map(function (_ref3) {
|
|
67
|
+
var id = _ref3.id,
|
|
68
|
+
source = _ref3.source,
|
|
69
|
+
target = _ref3.target;
|
|
70
|
+
return "".concat(id, ":").concat(source, ":").concat(target);
|
|
71
|
+
}).join('|'));
|
|
72
|
+
}, [edges, nodes]);
|
|
73
|
+
var validationError = useMemo(function () {
|
|
74
|
+
try {
|
|
75
|
+
validateQueryGraph(nodesRef.current, edgesRef.current);
|
|
76
|
+
return undefined;
|
|
77
|
+
} catch (nextError) {
|
|
78
|
+
return nextError instanceof Error ? nextError : new Error('Unable to build query graph');
|
|
79
|
+
}
|
|
80
|
+
// Only graph structure affects validation.
|
|
81
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
82
|
+
}, [structureKey]);
|
|
83
|
+
useEffect(function () {
|
|
84
|
+
if (validationError) onError === null || onError === void 0 || onError(validationError);
|
|
85
|
+
}, [onError, validationError]);
|
|
86
|
+
var shouldConfirm = largeGraphThreshold !== false && nodes.length > largeGraphThreshold;
|
|
87
|
+
if (loading) return /*#__PURE__*/_jsx(State, {
|
|
88
|
+
className: className,
|
|
89
|
+
children: /*#__PURE__*/_jsx(Loader, {
|
|
90
|
+
size: "m"
|
|
91
|
+
})
|
|
92
|
+
});
|
|
93
|
+
if (errorContent) return /*#__PURE__*/_jsx(State, {
|
|
94
|
+
className: className,
|
|
95
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
96
|
+
color: "danger",
|
|
97
|
+
children: errorContent
|
|
98
|
+
})
|
|
99
|
+
});
|
|
100
|
+
if (validationError) return /*#__PURE__*/_jsx(State, {
|
|
101
|
+
className: className,
|
|
102
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
103
|
+
color: "danger",
|
|
104
|
+
children: validationError.message
|
|
105
|
+
})
|
|
106
|
+
});
|
|
107
|
+
if (!nodes.length) return /*#__PURE__*/_jsx(State, {
|
|
108
|
+
className: className,
|
|
109
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
110
|
+
color: "secondary",
|
|
111
|
+
children: i18n('context_empty')
|
|
112
|
+
})
|
|
113
|
+
});
|
|
114
|
+
if (shouldConfirm && !showLargeGraph) {
|
|
115
|
+
return /*#__PURE__*/_jsx(State, {
|
|
116
|
+
className: className,
|
|
117
|
+
children: /*#__PURE__*/_jsxs("div", {
|
|
118
|
+
className: block('large-graph'),
|
|
119
|
+
children: [/*#__PURE__*/_jsx(Text, {
|
|
120
|
+
children: i18n('context_large-graph', {
|
|
121
|
+
count: nodes.length
|
|
122
|
+
})
|
|
123
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
124
|
+
view: "action",
|
|
125
|
+
onClick: function onClick() {
|
|
126
|
+
return setShowLargeGraph(true);
|
|
127
|
+
},
|
|
128
|
+
children: i18n('action_show-graph')
|
|
129
|
+
})]
|
|
130
|
+
})
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
return /*#__PURE__*/_jsx(QueryGraphWithLayout, {
|
|
134
|
+
nodes: nodes,
|
|
135
|
+
edges: edges,
|
|
136
|
+
structureKey: structureKey,
|
|
137
|
+
autoCenter: autoCenter,
|
|
138
|
+
active: active,
|
|
139
|
+
renderNodePopup: renderNodePopup,
|
|
140
|
+
onNodeClick: onNodeClick,
|
|
141
|
+
onError: onError,
|
|
142
|
+
className: className
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
function QueryGraphWithLayout(_ref4) {
|
|
146
|
+
var nodes = _ref4.nodes,
|
|
147
|
+
edges = _ref4.edges,
|
|
148
|
+
structureKey = _ref4.structureKey,
|
|
149
|
+
autoCenter = _ref4.autoCenter,
|
|
150
|
+
active = _ref4.active,
|
|
151
|
+
renderNodePopup = _ref4.renderNodePopup,
|
|
152
|
+
onNodeClick = _ref4.onNodeClick,
|
|
153
|
+
onError = _ref4.onError,
|
|
154
|
+
className = _ref4.className;
|
|
155
|
+
var _useState3 = useState(),
|
|
156
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
157
|
+
popup = _useState4[0],
|
|
158
|
+
setPopup = _useState4[1];
|
|
159
|
+
var rootRef = useRef(null);
|
|
160
|
+
var nodesRef = useRef(nodes);
|
|
161
|
+
var edgesRef = useRef(edges);
|
|
162
|
+
nodesRef.current = nodes;
|
|
163
|
+
edgesRef.current = edges;
|
|
164
|
+
var layoutBlocks = useMemo(function () {
|
|
165
|
+
return nodesRef.current.map(function (node) {
|
|
166
|
+
return _objectSpread({
|
|
167
|
+
id: node.id
|
|
168
|
+
}, getQueryGraphNodeSize(node));
|
|
169
|
+
});
|
|
170
|
+
},
|
|
171
|
+
// Node status and presentation do not affect layout.
|
|
172
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
173
|
+
[structureKey]);
|
|
174
|
+
var layoutConnections = useMemo(function () {
|
|
175
|
+
return edgesRef.current.map(function (edge) {
|
|
176
|
+
return {
|
|
177
|
+
id: edge.id,
|
|
178
|
+
sourceBlockId: edge.source,
|
|
179
|
+
targetBlockId: edge.target
|
|
180
|
+
};
|
|
181
|
+
});
|
|
182
|
+
},
|
|
183
|
+
// Only graph structure affects layout.
|
|
184
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
185
|
+
[structureKey]);
|
|
186
|
+
var _useQueryGraphLayout = useQueryGraphLayout({
|
|
187
|
+
structureKey: structureKey,
|
|
188
|
+
blocks: layoutBlocks,
|
|
189
|
+
connections: layoutConnections,
|
|
190
|
+
onError: onError
|
|
191
|
+
}),
|
|
192
|
+
result = _useQueryGraphLayout.result,
|
|
193
|
+
resolvedStructureKey = _useQueryGraphLayout.resolvedStructureKey,
|
|
194
|
+
isInitialLoading = _useQueryGraphLayout.isInitialLoading,
|
|
195
|
+
error = _useQueryGraphLayout.error;
|
|
196
|
+
var graphBlocks = useMemo(function () {
|
|
197
|
+
return nodes.flatMap(function (node) {
|
|
198
|
+
var position = result === null || result === void 0 ? void 0 : result.blocks[node.id];
|
|
199
|
+
if (!position) return [];
|
|
200
|
+
var _getQueryGraphNodeIco = getQueryGraphNodeIconSvgs(node),
|
|
201
|
+
iconSvg = _getQueryGraphNodeIco.iconSvg,
|
|
202
|
+
fallbackIconSvg = _getQueryGraphNodeIco.fallbackIconSvg,
|
|
203
|
+
iconColorToken = _getQueryGraphNodeIco.iconColorToken,
|
|
204
|
+
fallbackIconColorToken = _getQueryGraphNodeIco.fallbackIconColorToken;
|
|
205
|
+
return [_objectSpread(_objectSpread({
|
|
206
|
+
id: node.id,
|
|
207
|
+
is: 'query-node',
|
|
208
|
+
name: node.name,
|
|
209
|
+
selected: false,
|
|
210
|
+
anchors: [],
|
|
211
|
+
meta: {
|
|
212
|
+
node: node,
|
|
213
|
+
iconSvg: iconSvg,
|
|
214
|
+
fallbackIconSvg: fallbackIconSvg,
|
|
215
|
+
iconColorToken: iconColorToken,
|
|
216
|
+
fallbackIconColorToken: fallbackIconColorToken
|
|
217
|
+
}
|
|
218
|
+
}, getQueryGraphNodeSize(node)), position)];
|
|
219
|
+
});
|
|
220
|
+
}, [nodes, result]);
|
|
221
|
+
var graphConnections = useMemo(function () {
|
|
222
|
+
return createQueryGraphConnections(edges, result === null || result === void 0 ? void 0 : result.edges);
|
|
223
|
+
}, [edges, result]);
|
|
224
|
+
if (error) return /*#__PURE__*/_jsx(State, {
|
|
225
|
+
className: className,
|
|
226
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
227
|
+
color: "danger",
|
|
228
|
+
children: error.message
|
|
229
|
+
})
|
|
230
|
+
});
|
|
231
|
+
if (isInitialLoading || !result || !resolvedStructureKey) return /*#__PURE__*/_jsx(State, {
|
|
232
|
+
className: className,
|
|
233
|
+
children: /*#__PURE__*/_jsx(Loader, {
|
|
234
|
+
size: "m"
|
|
235
|
+
})
|
|
236
|
+
});
|
|
237
|
+
return (
|
|
238
|
+
/*#__PURE__*/
|
|
239
|
+
// The renderer is declared below to keep the public component and its states together.
|
|
240
|
+
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
241
|
+
_jsx(QueryGraphRenderer, {
|
|
242
|
+
ref: rootRef,
|
|
243
|
+
blocks: graphBlocks,
|
|
244
|
+
connections: graphConnections,
|
|
245
|
+
nodes: nodes,
|
|
246
|
+
structureKey: resolvedStructureKey,
|
|
247
|
+
autoCenter: autoCenter,
|
|
248
|
+
active: active,
|
|
249
|
+
popup: popup,
|
|
250
|
+
setPopup: setPopup,
|
|
251
|
+
renderNodePopup: renderNodePopup,
|
|
252
|
+
onNodeClick: onNodeClick,
|
|
253
|
+
className: className
|
|
254
|
+
})
|
|
255
|
+
);
|
|
256
|
+
}
|
|
257
|
+
var QueryGraphRenderer = /*#__PURE__*/React.forwardRef(function QueryGraphRendererComponent(_ref5, forwardedRef) {
|
|
258
|
+
var blocks = _ref5.blocks,
|
|
259
|
+
connections = _ref5.connections,
|
|
260
|
+
nodes = _ref5.nodes,
|
|
261
|
+
structureKey = _ref5.structureKey,
|
|
262
|
+
autoCenter = _ref5.autoCenter,
|
|
263
|
+
active = _ref5.active,
|
|
264
|
+
popup = _ref5.popup,
|
|
265
|
+
setPopup = _ref5.setPopup,
|
|
266
|
+
renderNodePopup = _ref5.renderNodePopup,
|
|
267
|
+
onNodeClick = _ref5.onNodeClick,
|
|
268
|
+
className = _ref5.className;
|
|
269
|
+
var rootRef = useRef(null);
|
|
270
|
+
useImperativeHandle(forwardedRef, function () {
|
|
271
|
+
return rootRef.current;
|
|
272
|
+
});
|
|
273
|
+
var attachedRef = useRef(false);
|
|
274
|
+
var centeredRef = useRef(false);
|
|
275
|
+
var previousActiveRef = useRef(false);
|
|
276
|
+
var previousStructureRef = useRef(structureKey);
|
|
277
|
+
var _useState5 = useState(false),
|
|
278
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
279
|
+
attached = _useState6[0],
|
|
280
|
+
setAttached = _useState6[1];
|
|
281
|
+
var _useState7 = useState(),
|
|
282
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
283
|
+
hoveredNodeId = _useState8[0],
|
|
284
|
+
setHoveredNodeId = _useState8[1];
|
|
285
|
+
var themeValue = useThemeValue();
|
|
286
|
+
var _useGraph = useGraph({
|
|
287
|
+
name: 'query-graph',
|
|
288
|
+
settings: {
|
|
289
|
+
connection: BezierMultipointConnection,
|
|
290
|
+
canDrag: ECanDrag.NONE,
|
|
291
|
+
canDragCamera: true,
|
|
292
|
+
canZoomCamera: true,
|
|
293
|
+
canCreateNewConnections: false,
|
|
294
|
+
useBezierConnections: true,
|
|
295
|
+
bezierConnectionDirection: 'horizontal',
|
|
296
|
+
showConnectionArrows: true,
|
|
297
|
+
useBlocksAnchors: false,
|
|
298
|
+
blockComponents: {
|
|
299
|
+
'query-node': QueryGraphCanvasBlock
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}),
|
|
303
|
+
graph = _useGraph.graph,
|
|
304
|
+
api = _useGraph.api,
|
|
305
|
+
setEntities = _useGraph.setEntities,
|
|
306
|
+
start = _useGraph.start,
|
|
307
|
+
stop = _useGraph.stop;
|
|
308
|
+
var _useState9 = useState(graph.cameraService.getCameraState().scale),
|
|
309
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
310
|
+
scale = _useState0[0],
|
|
311
|
+
setScale = _useState0[1];
|
|
312
|
+
var _graph$cameraService$ = graph.cameraService.getCameraState(),
|
|
313
|
+
scaleMin = _graph$cameraService$.scaleMin,
|
|
314
|
+
scaleMax = _graph$cameraService$.scaleMax;
|
|
315
|
+
useGraphEvent(graph, 'camera-change', function (_ref6) {
|
|
316
|
+
var nextScale = _ref6.scale;
|
|
317
|
+
return setScale(nextScale);
|
|
318
|
+
});
|
|
319
|
+
useGraphEvent(graph, 'mouseenter', function (_ref7) {
|
|
320
|
+
var _state$meta;
|
|
321
|
+
var target = _ref7.target;
|
|
322
|
+
var state = target === null || target === void 0 ? void 0 : target.state;
|
|
323
|
+
if (state !== null && state !== void 0 && (_state$meta = state.meta) !== null && _state$meta !== void 0 && _state$meta.node) setHoveredNodeId(state.meta.node.id);
|
|
324
|
+
});
|
|
325
|
+
useGraphEvent(graph, 'mouseleave', function (_ref8) {
|
|
326
|
+
var _state$meta2;
|
|
327
|
+
var target = _ref8.target;
|
|
328
|
+
var state = target === null || target === void 0 ? void 0 : target.state;
|
|
329
|
+
if (state !== null && state !== void 0 && (_state$meta2 = state.meta) !== null && _state$meta2 !== void 0 && _state$meta2.node) setHoveredNodeId(undefined);
|
|
330
|
+
});
|
|
331
|
+
useEffect(function () {
|
|
332
|
+
if (!rootRef.current) return;
|
|
333
|
+
var background = getComputedStyle(rootRef.current).getPropertyValue('--g-color-base-background').trim();
|
|
334
|
+
var connection = getComputedStyle(rootRef.current).getPropertyValue('--g-color-line-generic-accent').trim();
|
|
335
|
+
if (!background || !connection) return;
|
|
336
|
+
var colors = api.getGraphColors();
|
|
337
|
+
api.updateGraphColors(_objectSpread(_objectSpread({}, colors), {}, {
|
|
338
|
+
canvas: _objectSpread(_objectSpread({}, colors.canvas), {}, {
|
|
339
|
+
belowLayerBackground: background,
|
|
340
|
+
layerBackground: background,
|
|
341
|
+
border: background,
|
|
342
|
+
dots: background
|
|
343
|
+
}),
|
|
344
|
+
connection: _objectSpread(_objectSpread({}, colors.connection), {}, {
|
|
345
|
+
background: connection
|
|
346
|
+
})
|
|
347
|
+
}));
|
|
348
|
+
}, [api, themeValue]);
|
|
349
|
+
var visibleConnections = useMemo(function () {
|
|
350
|
+
return connections.map(function (connection) {
|
|
351
|
+
return _objectSpread(_objectSpread({}, connection), {}, {
|
|
352
|
+
selected: Boolean(hoveredNodeId && (connection.sourceBlockId === hoveredNodeId || connection.targetBlockId === hoveredNodeId))
|
|
353
|
+
});
|
|
354
|
+
});
|
|
355
|
+
}, [connections, hoveredNodeId]);
|
|
356
|
+
useEffect(function () {
|
|
357
|
+
return setEntities({
|
|
358
|
+
blocks: blocks,
|
|
359
|
+
connections: visibleConnections
|
|
360
|
+
});
|
|
361
|
+
}, [blocks, setEntities, visibleConnections]);
|
|
362
|
+
useEffect(function () {
|
|
363
|
+
if (!attachedRef.current) return;
|
|
364
|
+
if (active) start();else stop();
|
|
365
|
+
}, [active, start, stop]);
|
|
366
|
+
useEffect(function () {
|
|
367
|
+
var changed = previousStructureRef.current !== structureKey;
|
|
368
|
+
var becameActive = active && !previousActiveRef.current;
|
|
369
|
+
var frame;
|
|
370
|
+
if (attached && active && (!centeredRef.current || becameActive || autoCenter && changed)) {
|
|
371
|
+
frame = requestAnimationFrame(function () {
|
|
372
|
+
api.zoomToViewPort({
|
|
373
|
+
padding: FIT_PADDING
|
|
374
|
+
});
|
|
375
|
+
centeredRef.current = true;
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
previousActiveRef.current = Boolean(active);
|
|
379
|
+
previousStructureRef.current = structureKey;
|
|
380
|
+
setPopup(undefined);
|
|
381
|
+
return function () {
|
|
382
|
+
if (frame !== undefined) cancelAnimationFrame(frame);
|
|
383
|
+
};
|
|
384
|
+
}, [active, api, attached, autoCenter, setPopup, structureKey]);
|
|
385
|
+
var handleClick = function handleClick(_ref9) {
|
|
386
|
+
var _state$meta3;
|
|
387
|
+
var target = _ref9.target,
|
|
388
|
+
sourceEvent = _ref9.sourceEvent;
|
|
389
|
+
var state = target === null || target === void 0 ? void 0 : target.state;
|
|
390
|
+
if (!(state !== null && state !== void 0 && (_state$meta3 = state.meta) !== null && _state$meta3 !== void 0 && _state$meta3.node) || !rootRef.current) {
|
|
391
|
+
setPopup(undefined);
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
var mouseEvent = sourceEvent;
|
|
395
|
+
var rect = rootRef.current.getBoundingClientRect();
|
|
396
|
+
var left = Math.min(Math.max(16, mouseEvent.clientX - rect.left + 12), rect.width - 456);
|
|
397
|
+
var top = Math.min(Math.max(16, mouseEvent.clientY - rect.top + 12), rect.height - 240);
|
|
398
|
+
setPopup({
|
|
399
|
+
nodeId: state.meta.node.id,
|
|
400
|
+
left: Math.max(16, left),
|
|
401
|
+
top: Math.max(16, top)
|
|
402
|
+
});
|
|
403
|
+
onNodeClick === null || onNodeClick === void 0 || onNodeClick(state.meta.node, mouseEvent);
|
|
404
|
+
};
|
|
405
|
+
var selectedNode = popup ? nodes.find(function (node) {
|
|
406
|
+
return node.id === popup.nodeId;
|
|
407
|
+
}) : undefined;
|
|
408
|
+
var defaultContent = selectedNode ? /*#__PURE__*/_jsx(QueryGraphPopup, {
|
|
409
|
+
node: selectedNode
|
|
410
|
+
}) : null;
|
|
411
|
+
var popupContent = null;
|
|
412
|
+
if (selectedNode) {
|
|
413
|
+
popupContent = renderNodePopup ? renderNodePopup({
|
|
414
|
+
node: selectedNode,
|
|
415
|
+
defaultContent: defaultContent
|
|
416
|
+
}) : defaultContent;
|
|
417
|
+
}
|
|
418
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
419
|
+
ref: rootRef,
|
|
420
|
+
className: block(null, className),
|
|
421
|
+
children: [/*#__PURE__*/_jsx(GraphCanvas, {
|
|
422
|
+
graph: graph,
|
|
423
|
+
className: block('canvas'),
|
|
424
|
+
click: handleClick,
|
|
425
|
+
renderBlock: renderEmptyBlock,
|
|
426
|
+
onStateChanged: function onStateChanged(_ref0) {
|
|
427
|
+
var state = _ref0.state;
|
|
428
|
+
if (state === GraphState.ATTACHED) {
|
|
429
|
+
if (active) start();
|
|
430
|
+
attachedRef.current = true;
|
|
431
|
+
setAttached(true);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}), /*#__PURE__*/_jsxs("div", {
|
|
435
|
+
className: block('toolbox'),
|
|
436
|
+
children: [/*#__PURE__*/_jsx(Tooltip, {
|
|
437
|
+
content: i18n('action_zoom-in'),
|
|
438
|
+
placement: "right",
|
|
439
|
+
children: /*#__PURE__*/_jsx(Button, {
|
|
440
|
+
view: "raised",
|
|
441
|
+
pin: "round-brick",
|
|
442
|
+
"aria-label": i18n('action_zoom-in'),
|
|
443
|
+
disabled: scale >= scaleMax,
|
|
444
|
+
onClick: function onClick() {
|
|
445
|
+
return changeZoom(graph, ZOOM_STEP);
|
|
446
|
+
},
|
|
447
|
+
children: /*#__PURE__*/_jsx(Icon, {
|
|
448
|
+
data: MagnifierPlus
|
|
449
|
+
})
|
|
450
|
+
})
|
|
451
|
+
}), /*#__PURE__*/_jsx(Tooltip, {
|
|
452
|
+
content: i18n('action_fit'),
|
|
453
|
+
placement: "right",
|
|
454
|
+
children: /*#__PURE__*/_jsx(Button, {
|
|
455
|
+
view: "raised",
|
|
456
|
+
pin: "brick-brick",
|
|
457
|
+
"aria-label": i18n('action_fit'),
|
|
458
|
+
onClick: function onClick() {
|
|
459
|
+
return api.zoomToViewPort({
|
|
460
|
+
padding: FIT_PADDING
|
|
461
|
+
});
|
|
462
|
+
},
|
|
463
|
+
children: /*#__PURE__*/_jsx(Icon, {
|
|
464
|
+
data: SquareDashed
|
|
465
|
+
})
|
|
466
|
+
})
|
|
467
|
+
}), /*#__PURE__*/_jsx(Tooltip, {
|
|
468
|
+
content: i18n('action_zoom-out'),
|
|
469
|
+
placement: "right",
|
|
470
|
+
children: /*#__PURE__*/_jsx(Button, {
|
|
471
|
+
view: "raised",
|
|
472
|
+
pin: "brick-round",
|
|
473
|
+
"aria-label": i18n('action_zoom-out'),
|
|
474
|
+
disabled: scale <= scaleMin,
|
|
475
|
+
onClick: function onClick() {
|
|
476
|
+
return changeZoom(graph, -ZOOM_STEP);
|
|
477
|
+
},
|
|
478
|
+
children: /*#__PURE__*/_jsx(Icon, {
|
|
479
|
+
data: MagnifierMinus
|
|
480
|
+
})
|
|
481
|
+
})
|
|
482
|
+
})]
|
|
483
|
+
}), popup && popupContent !== null && /*#__PURE__*/_jsx("div", {
|
|
484
|
+
className: block('popup'),
|
|
485
|
+
style: {
|
|
486
|
+
left: popup.left,
|
|
487
|
+
top: popup.top
|
|
488
|
+
},
|
|
489
|
+
children: popupContent
|
|
490
|
+
})]
|
|
491
|
+
});
|
|
492
|
+
});
|
|
493
|
+
function changeZoom(graph, delta) {
|
|
494
|
+
var camera = graph.cameraService;
|
|
495
|
+
var state = camera.getCameraState();
|
|
496
|
+
var nextScale = Math.min(state.scaleMax, Math.max(state.scaleMin, state.scale + delta));
|
|
497
|
+
camera.zoom(state.width / 2, state.height / 2, nextScale);
|
|
498
|
+
}
|
|
499
|
+
function State(_ref1) {
|
|
500
|
+
var className = _ref1.className,
|
|
501
|
+
children = _ref1.children;
|
|
502
|
+
return /*#__PURE__*/_jsx("div", {
|
|
503
|
+
className: block(null, className),
|
|
504
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
505
|
+
className: block('state'),
|
|
506
|
+
children: children
|
|
507
|
+
})
|
|
508
|
+
});
|
|
509
|
+
}
|
|
510
|
+
// #sourceMappingURL=QueryGraph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useEffect","useImperativeHandle","useMemo","useRef","useState","BezierMultipointConnection","ECanDrag","GraphState","GraphCanvas","useGraph","useGraphEvent","MagnifierMinus","MagnifierPlus","SquareDashed","Button","Icon","Loader","Text","Tooltip","useThemeValue","cn","createQueryGraphConnections","getQueryGraphNodeSize","validateQueryGraph","i18n","QueryGraphCanvasBlock","QueryGraphPopup","getQueryGraphNodeIconSvgs","useQueryGraphLayout","jsx","_jsx","jsxs","_jsxs","block","FIT_PADDING","ZOOM_STEP","renderEmptyBlock","Fragment","QueryGraph","_ref","nodes","edges","loading","errorContent","className","_ref$autoCenter","autoCenter","_ref$active","active","_ref$largeGraphThresh","largeGraphThreshold","renderNodePopup","onNodeClick","onError","_useState","_useState2","_slicedToArray","showLargeGraph","setShowLargeGraph","nodesRef","edgesRef","current","structureKey","concat","map","_ref2","id","kind","join","_ref3","source","target","validationError","undefined","nextError","Error","shouldConfirm","length","State","children","size","color","message","count","view","onClick","QueryGraphWithLayout","_ref4","_useState3","_useState4","popup","setPopup","rootRef","layoutBlocks","node","_objectSpread","layoutConnections","edge","sourceBlockId","targetBlockId","_useQueryGraphLayout","blocks","connections","result","resolvedStructureKey","isInitialLoading","error","graphBlocks","flatMap","position","_getQueryGraphNodeIco","iconSvg","fallbackIconSvg","iconColorToken","fallbackIconColorToken","is","name","selected","anchors","meta","graphConnections","QueryGraphRenderer","ref","forwardRef","QueryGraphRendererComponent","_ref5","forwardedRef","attachedRef","centeredRef","previousActiveRef","previousStructureRef","_useState5","_useState6","attached","setAttached","_useState7","_useState8","hoveredNodeId","setHoveredNodeId","themeValue","_useGraph","settings","connection","canDrag","NONE","canDragCamera","canZoomCamera","canCreateNewConnections","useBezierConnections","bezierConnectionDirection","showConnectionArrows","useBlocksAnchors","blockComponents","graph","api","setEntities","start","stop","_useState9","cameraService","getCameraState","scale","_useState0","setScale","_graph$cameraService$","scaleMin","scaleMax","_ref6","nextScale","_ref7","_state$meta","state","_ref8","_state$meta2","background","getComputedStyle","getPropertyValue","trim","colors","getGraphColors","updateGraphColors","canvas","belowLayerBackground","layerBackground","border","dots","visibleConnections","Boolean","changed","becameActive","frame","requestAnimationFrame","zoomToViewPort","padding","cancelAnimationFrame","handleClick","_ref9","_state$meta3","sourceEvent","mouseEvent","rect","getBoundingClientRect","left","Math","min","max","clientX","width","top","clientY","height","nodeId","selectedNode","find","defaultContent","popupContent","click","renderBlock","onStateChanged","_ref0","ATTACHED","content","placement","pin","disabled","changeZoom","data","style","delta","camera","zoom","_ref1"],"sources":["QueryGraph.tsx"],"sourcesContent":["import React, {useEffect, useImperativeHandle, useMemo, useRef, useState} from 'react';\nimport {\n BezierMultipointConnection,\n ECanDrag,\n GraphState,\n type TMultipointConnection,\n} from '@gravity-ui/graph';\nimport {GraphCanvas, useGraph, useGraphEvent} from '@gravity-ui/graph/react';\nimport {MagnifierMinus, MagnifierPlus, SquareDashed} from '@gravity-ui/icons';\nimport {Button, Icon, Loader, Text, Tooltip, useThemeValue} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\n\nimport type {QueryGraphNode, QueryGraphProps} from '../../types/queryGraph';\nimport {\n createQueryGraphConnections,\n getQueryGraphNodeSize,\n validateQueryGraph,\n} from './helpers/layout';\nimport i18n from './i18n';\nimport {type QueryGraphBlock, QueryGraphCanvasBlock} from './internal/QueryGraphCanvasBlock';\nimport {QueryGraphPopup} from './internal/QueryGraphPopup';\nimport {getQueryGraphNodeIconSvgs} from './internal/queryGraphIcons';\nimport {useQueryGraphLayout} from './internal/useQueryGraphLayout';\n\nimport './QueryGraph.scss';\n\nconst block = cn('qp-query-graph');\nconst FIT_PADDING = 120;\nconst ZOOM_STEP = 0.08;\nconst renderEmptyBlock = () => <React.Fragment />;\n\ntype PopupState = {nodeId: string; left: number; top: number};\n\nexport function QueryGraph({\n nodes,\n edges,\n loading,\n errorContent,\n className,\n autoCenter = true,\n active = true,\n largeGraphThreshold = 250,\n renderNodePopup,\n onNodeClick,\n onError,\n}: QueryGraphProps) {\n const [showLargeGraph, setShowLargeGraph] = useState(false);\n const nodesRef = useRef(nodes);\n const edgesRef = useRef(edges);\n nodesRef.current = nodes;\n edgesRef.current = edges;\n\n const structureKey = useMemo(\n () =>\n `${nodes.map(({id, kind}) => `${id}:${kind}`).join('|')}::${edges\n .map(({id, source, target}) => `${id}:${source}:${target}`)\n .join('|')}`,\n [edges, nodes],\n );\n\n const validationError = useMemo(() => {\n try {\n validateQueryGraph(nodesRef.current, edgesRef.current);\n return undefined;\n } catch (nextError) {\n return nextError instanceof Error\n ? nextError\n : new Error('Unable to build query graph');\n }\n // Only graph structure affects validation.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [structureKey]);\n useEffect(() => {\n if (validationError) onError?.(validationError);\n }, [onError, validationError]);\n\n const shouldConfirm = largeGraphThreshold !== false && nodes.length > largeGraphThreshold;\n if (loading)\n return (\n <State className={className}>\n <Loader size=\"m\" />\n </State>\n );\n if (errorContent)\n return (\n <State className={className}>\n <Text color=\"danger\">{errorContent}</Text>\n </State>\n );\n if (validationError)\n return (\n <State className={className}>\n <Text color=\"danger\">{validationError.message}</Text>\n </State>\n );\n if (!nodes.length)\n return (\n <State className={className}>\n <Text color=\"secondary\">{i18n('context_empty')}</Text>\n </State>\n );\n if (shouldConfirm && !showLargeGraph) {\n return (\n <State className={className}>\n <div className={block('large-graph')}>\n <Text>{i18n('context_large-graph', {count: nodes.length})}</Text>\n <Button view=\"action\" onClick={() => setShowLargeGraph(true)}>\n {i18n('action_show-graph')}\n </Button>\n </div>\n </State>\n );\n }\n\n return (\n <QueryGraphWithLayout\n nodes={nodes}\n edges={edges}\n structureKey={structureKey}\n autoCenter={autoCenter}\n active={active}\n renderNodePopup={renderNodePopup}\n onNodeClick={onNodeClick}\n onError={onError}\n className={className}\n />\n );\n}\n\ntype QueryGraphWithLayoutProps = Pick<\n QueryGraphProps,\n | 'nodes'\n | 'edges'\n | 'autoCenter'\n | 'active'\n | 'renderNodePopup'\n | 'onNodeClick'\n | 'onError'\n | 'className'\n> & {structureKey: string};\n\nfunction QueryGraphWithLayout({\n nodes,\n edges,\n structureKey,\n autoCenter,\n active,\n renderNodePopup,\n onNodeClick,\n onError,\n className,\n}: QueryGraphWithLayoutProps) {\n const [popup, setPopup] = useState<PopupState>();\n const rootRef = useRef<HTMLDivElement>(null);\n const nodesRef = useRef(nodes);\n const edgesRef = useRef(edges);\n nodesRef.current = nodes;\n edgesRef.current = edges;\n\n const layoutBlocks = useMemo(\n () =>\n nodesRef.current.map((node) => ({\n id: node.id,\n ...getQueryGraphNodeSize(node),\n })),\n // Node status and presentation do not affect layout.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [structureKey],\n );\n const layoutConnections = useMemo(\n () =>\n edgesRef.current.map((edge) => ({\n id: edge.id,\n sourceBlockId: edge.source,\n targetBlockId: edge.target,\n })),\n // Only graph structure affects layout.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [structureKey],\n );\n const {result, resolvedStructureKey, isInitialLoading, error} = useQueryGraphLayout({\n structureKey,\n blocks: layoutBlocks,\n connections: layoutConnections,\n onError,\n });\n\n const graphBlocks = useMemo<QueryGraphBlock[]>(\n () =>\n nodes.flatMap((node) => {\n const position = result?.blocks[node.id];\n if (!position) return [];\n const {iconSvg, fallbackIconSvg, iconColorToken, fallbackIconColorToken} =\n getQueryGraphNodeIconSvgs(node);\n return [\n {\n id: node.id,\n is: 'query-node',\n name: node.name,\n selected: false,\n anchors: [],\n meta: {\n node,\n iconSvg,\n fallbackIconSvg,\n iconColorToken,\n fallbackIconColorToken,\n },\n ...getQueryGraphNodeSize(node),\n ...position,\n },\n ];\n }),\n [nodes, result],\n );\n const graphConnections = useMemo<TMultipointConnection[]>(\n () => createQueryGraphConnections(edges, result?.edges),\n [edges, result],\n );\n\n if (error)\n return (\n <State className={className}>\n <Text color=\"danger\">{error.message}</Text>\n </State>\n );\n if (isInitialLoading || !result || !resolvedStructureKey)\n return (\n <State className={className}>\n <Loader size=\"m\" />\n </State>\n );\n\n return (\n // The renderer is declared below to keep the public component and its states together.\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n <QueryGraphRenderer\n ref={rootRef}\n blocks={graphBlocks}\n connections={graphConnections}\n nodes={nodes}\n structureKey={resolvedStructureKey}\n autoCenter={autoCenter}\n active={active}\n popup={popup}\n setPopup={setPopup}\n renderNodePopup={renderNodePopup}\n onNodeClick={onNodeClick}\n className={className}\n />\n );\n}\n\ntype RendererProps = Pick<\n QueryGraphProps,\n 'autoCenter' | 'active' | 'renderNodePopup' | 'onNodeClick' | 'className'\n> & {\n blocks: QueryGraphBlock[];\n connections: TMultipointConnection[];\n nodes: QueryGraphNode[];\n structureKey: string;\n popup?: PopupState;\n setPopup: React.Dispatch<React.SetStateAction<PopupState | undefined>>;\n};\n\nconst QueryGraphRenderer = React.forwardRef<HTMLDivElement, RendererProps>(\n function QueryGraphRendererComponent(\n {\n blocks,\n connections,\n nodes,\n structureKey,\n autoCenter,\n active,\n popup,\n setPopup,\n renderNodePopup,\n onNodeClick,\n className,\n },\n forwardedRef,\n ) {\n const rootRef = useRef<HTMLDivElement | null>(null);\n useImperativeHandle(forwardedRef, () => rootRef.current as HTMLDivElement);\n const attachedRef = useRef(false);\n const centeredRef = useRef(false);\n const previousActiveRef = useRef(false);\n const previousStructureRef = useRef(structureKey);\n const [attached, setAttached] = useState(false);\n const [hoveredNodeId, setHoveredNodeId] = useState<string>();\n const themeValue = useThemeValue();\n const {graph, api, setEntities, start, stop} = useGraph({\n name: 'query-graph',\n settings: {\n connection: BezierMultipointConnection,\n canDrag: ECanDrag.NONE,\n canDragCamera: true,\n canZoomCamera: true,\n canCreateNewConnections: false,\n useBezierConnections: true,\n bezierConnectionDirection: 'horizontal',\n showConnectionArrows: true,\n useBlocksAnchors: false,\n blockComponents: {'query-node': QueryGraphCanvasBlock},\n },\n });\n const [scale, setScale] = useState(graph.cameraService.getCameraState().scale);\n const {scaleMin, scaleMax} = graph.cameraService.getCameraState();\n useGraphEvent(graph, 'camera-change', ({scale: nextScale}) => setScale(nextScale));\n useGraphEvent(graph, 'mouseenter', ({target}) => {\n const state = (target as {state?: QueryGraphBlock} | undefined)?.state;\n if (state?.meta?.node) setHoveredNodeId(state.meta.node.id);\n });\n useGraphEvent(graph, 'mouseleave', ({target}) => {\n const state = (target as {state?: QueryGraphBlock} | undefined)?.state;\n if (state?.meta?.node) setHoveredNodeId(undefined);\n });\n\n useEffect(() => {\n if (!rootRef.current) return;\n\n const background = getComputedStyle(rootRef.current)\n .getPropertyValue('--g-color-base-background')\n .trim();\n const connection = getComputedStyle(rootRef.current)\n .getPropertyValue('--g-color-line-generic-accent')\n .trim();\n if (!background || !connection) return;\n\n const colors = api.getGraphColors();\n api.updateGraphColors({\n ...colors,\n canvas: {\n ...colors.canvas,\n belowLayerBackground: background,\n layerBackground: background,\n border: background,\n dots: background,\n },\n connection: {\n ...colors.connection,\n background: connection,\n },\n });\n }, [api, themeValue]);\n\n const visibleConnections = useMemo(\n () =>\n connections.map((connection) => ({\n ...connection,\n selected: Boolean(\n hoveredNodeId &&\n (connection.sourceBlockId === hoveredNodeId ||\n connection.targetBlockId === hoveredNodeId),\n ),\n })),\n [connections, hoveredNodeId],\n );\n useEffect(\n () => setEntities({blocks, connections: visibleConnections}),\n [blocks, setEntities, visibleConnections],\n );\n useEffect(() => {\n if (!attachedRef.current) return;\n if (active) start();\n else stop();\n }, [active, start, stop]);\n useEffect(() => {\n const changed = previousStructureRef.current !== structureKey;\n const becameActive = active && !previousActiveRef.current;\n let frame: number | undefined;\n if (\n attached &&\n active &&\n (!centeredRef.current || becameActive || (autoCenter && changed))\n ) {\n frame = requestAnimationFrame(() => {\n api.zoomToViewPort({padding: FIT_PADDING});\n centeredRef.current = true;\n });\n }\n previousActiveRef.current = Boolean(active);\n previousStructureRef.current = structureKey;\n setPopup(undefined);\n return () => {\n if (frame !== undefined) cancelAnimationFrame(frame);\n };\n }, [active, api, attached, autoCenter, setPopup, structureKey]);\n\n const handleClick: NonNullable<React.ComponentProps<typeof GraphCanvas>['click']> = ({\n target,\n sourceEvent,\n }) => {\n const state = (target as {state?: QueryGraphBlock; isBlock?: boolean} | undefined)\n ?.state;\n if (!state?.meta?.node || !rootRef.current) {\n setPopup(undefined);\n return;\n }\n const mouseEvent = sourceEvent as MouseEvent;\n const rect = rootRef.current.getBoundingClientRect();\n const left = Math.min(\n Math.max(16, mouseEvent.clientX - rect.left + 12),\n rect.width - 456,\n );\n const top = Math.min(\n Math.max(16, mouseEvent.clientY - rect.top + 12),\n rect.height - 240,\n );\n setPopup({\n nodeId: state.meta.node.id,\n left: Math.max(16, left),\n top: Math.max(16, top),\n });\n onNodeClick?.(state.meta.node, mouseEvent);\n };\n\n const selectedNode = popup ? nodes.find((node) => node.id === popup.nodeId) : undefined;\n const defaultContent = selectedNode ? <QueryGraphPopup node={selectedNode} /> : null;\n let popupContent: React.ReactNode = null;\n if (selectedNode) {\n popupContent = renderNodePopup\n ? renderNodePopup({node: selectedNode, defaultContent})\n : defaultContent;\n }\n\n return (\n <div ref={rootRef} className={block(null, className)}>\n <GraphCanvas\n graph={graph}\n className={block('canvas')}\n click={handleClick}\n renderBlock={renderEmptyBlock}\n onStateChanged={({state}) => {\n if (state === GraphState.ATTACHED) {\n if (active) start();\n attachedRef.current = true;\n setAttached(true);\n }\n }}\n />\n <div className={block('toolbox')}>\n <Tooltip content={i18n('action_zoom-in')} placement=\"right\">\n <Button\n view=\"raised\"\n pin=\"round-brick\"\n aria-label={i18n('action_zoom-in')}\n disabled={scale >= scaleMax}\n onClick={() => changeZoom(graph, ZOOM_STEP)}\n >\n <Icon data={MagnifierPlus} />\n </Button>\n </Tooltip>\n <Tooltip content={i18n('action_fit')} placement=\"right\">\n <Button\n view=\"raised\"\n pin=\"brick-brick\"\n aria-label={i18n('action_fit')}\n onClick={() => api.zoomToViewPort({padding: FIT_PADDING})}\n >\n <Icon data={SquareDashed} />\n </Button>\n </Tooltip>\n <Tooltip content={i18n('action_zoom-out')} placement=\"right\">\n <Button\n view=\"raised\"\n pin=\"brick-round\"\n aria-label={i18n('action_zoom-out')}\n disabled={scale <= scaleMin}\n onClick={() => changeZoom(graph, -ZOOM_STEP)}\n >\n <Icon data={MagnifierMinus} />\n </Button>\n </Tooltip>\n </div>\n {popup && popupContent !== null && (\n <div className={block('popup')} style={{left: popup.left, top: popup.top}}>\n {popupContent}\n </div>\n )}\n </div>\n );\n },\n);\n\nfunction changeZoom(graph: ReturnType<typeof useGraph>['graph'], delta: number) {\n const camera = graph.cameraService;\n const state = camera.getCameraState();\n const nextScale = Math.min(state.scaleMax, Math.max(state.scaleMin, state.scale + delta));\n camera.zoom(state.width / 2, state.height / 2, nextScale);\n}\n\nfunction State({className, children}: {className?: string; children: React.ReactNode}) {\n return (\n <div className={block(null, className)}>\n <div className={block('state')}>{children}</div>\n </div>\n );\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
.qp-query-graph {
|
|
2
|
+
position: relative;
|
|
3
|
+
min-height: 360px;
|
|
4
|
+
height: 100%;
|
|
5
|
+
overflow: hidden;
|
|
6
|
+
background: var(--g-color-base-background);
|
|
7
|
+
|
|
8
|
+
&__canvas {
|
|
9
|
+
width: 100%;
|
|
10
|
+
height: 100%;
|
|
11
|
+
min-height: 360px;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
&__toolbox {
|
|
15
|
+
position: absolute;
|
|
16
|
+
z-index: 4;
|
|
17
|
+
top: var(--g-spacing-4);
|
|
18
|
+
left: var(--g-spacing-4);
|
|
19
|
+
display: flex;
|
|
20
|
+
width: 28px;
|
|
21
|
+
flex-direction: column;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
&__popup {
|
|
25
|
+
position: absolute;
|
|
26
|
+
z-index: 5;
|
|
27
|
+
width: min(440px, calc(100% - var(--g-spacing-8)));
|
|
28
|
+
max-height: calc(100% - var(--g-spacing-8));
|
|
29
|
+
overflow: auto;
|
|
30
|
+
padding: var(--g-spacing-4);
|
|
31
|
+
border: 1px solid var(--g-color-line-generic);
|
|
32
|
+
border-radius: var(--g-border-radius-l);
|
|
33
|
+
box-shadow: 0 4px 24px var(--g-color-sfx-shadow);
|
|
34
|
+
background: var(--g-color-base-float);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
&__popup-content,
|
|
38
|
+
&__jobs,
|
|
39
|
+
&__schemas,
|
|
40
|
+
&__details {
|
|
41
|
+
display: flex;
|
|
42
|
+
flex-direction: column;
|
|
43
|
+
gap: var(--g-spacing-3);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
&__popup-title {
|
|
47
|
+
display: flex;
|
|
48
|
+
align-items: center;
|
|
49
|
+
gap: var(--g-spacing-2);
|
|
50
|
+
|
|
51
|
+
> div {
|
|
52
|
+
display: flex;
|
|
53
|
+
min-width: 0;
|
|
54
|
+
flex-direction: column;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
&__detail-row {
|
|
59
|
+
display: flex;
|
|
60
|
+
justify-content: space-between;
|
|
61
|
+
gap: var(--g-spacing-3);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
&__state {
|
|
65
|
+
height: 100%;
|
|
66
|
+
min-height: 360px;
|
|
67
|
+
display: flex;
|
|
68
|
+
align-items: center;
|
|
69
|
+
justify-content: center;
|
|
70
|
+
padding: var(--g-spacing-6);
|
|
71
|
+
text-align: center;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
&__large-graph {
|
|
75
|
+
display: flex;
|
|
76
|
+
max-width: 480px;
|
|
77
|
+
flex-direction: column;
|
|
78
|
+
align-items: center;
|
|
79
|
+
gap: var(--g-spacing-4);
|
|
80
|
+
}
|
|
81
|
+
}
|