@ytsaurus/ui 3.3.1 → 3.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/public/build/assets-manifest.json +34 -34
  2. package/dist/public/build/css/3132.43311d48.chunk.css +2 -0
  3. package/dist/public/build/css/3132.43311d48.chunk.css.map +1 -0
  4. package/dist/public/build/css/590.6f40b178.chunk.css +2 -0
  5. package/dist/public/build/css/590.6f40b178.chunk.css.map +1 -0
  6. package/dist/public/build/css/scheduling.8b8a192b.chunk.css +2 -0
  7. package/dist/public/build/css/scheduling.8b8a192b.chunk.css.map +1 -0
  8. package/dist/public/build/js/2563.bbb74274.chunk.js +2 -0
  9. package/dist/public/build/js/2563.bbb74274.chunk.js.map +1 -0
  10. package/dist/public/build/js/4237.57c56e6b.chunk.js +3 -0
  11. package/dist/public/build/js/4237.57c56e6b.chunk.js.map +1 -0
  12. package/dist/public/build/js/887.d8e107dc.chunk.js +2 -0
  13. package/dist/public/build/js/887.d8e107dc.chunk.js.map +1 -0
  14. package/dist/public/build/js/{app-navigation-page-layout.27364587.chunk.js → app-navigation-page-layout.afb1c1ba.chunk.js} +2 -2
  15. package/dist/public/build/js/app-navigation-page-layout.afb1c1ba.chunk.js.map +1 -0
  16. package/dist/public/build/js/{app-navigation.b86557c0.chunk.js → app-navigation.38835895.chunk.js} +2 -2
  17. package/dist/public/build/js/{app-navigation.b86557c0.chunk.js.map → app-navigation.38835895.chunk.js.map} +1 -1
  18. package/dist/public/build/js/{cluster-page-wrapper.98d8905c.chunk.js → cluster-page-wrapper.84f72ceb.chunk.js} +2 -2
  19. package/dist/public/build/js/{cluster-page-wrapper.98d8905c.chunk.js.map → cluster-page-wrapper.84f72ceb.chunk.js.map} +1 -1
  20. package/dist/public/build/js/{code-assistant-chat.4275144c.chunk.js → code-assistant-chat.a7927638.chunk.js} +2 -2
  21. package/dist/public/build/js/{code-assistant-chat.4275144c.chunk.js.map → code-assistant-chat.a7927638.chunk.js.map} +1 -1
  22. package/dist/public/build/js/main.d91d7090.js +3 -0
  23. package/dist/public/build/js/main.d91d7090.js.map +1 -0
  24. package/dist/public/build/js/{navigation.c35bb543.chunk.js → navigation.9b4e0429.chunk.js} +2 -2
  25. package/dist/public/build/js/navigation.9b4e0429.chunk.js.map +1 -0
  26. package/dist/public/build/js/{query-tracker.17cb6d4e.chunk.js → query-tracker.1b6d537a.chunk.js} +2 -2
  27. package/dist/public/build/js/{query-tracker.17cb6d4e.chunk.js.map → query-tracker.1b6d537a.chunk.js.map} +1 -1
  28. package/dist/public/build/js/{runtime.6000b37f.js → runtime.93a1fc00.js} +2 -2
  29. package/dist/public/build/js/{runtime.6000b37f.js.map → runtime.93a1fc00.js.map} +1 -1
  30. package/dist/public/build/js/scheduling.943b1602.chunk.js +2 -0
  31. package/dist/public/build/js/scheduling.943b1602.chunk.js.map +1 -0
  32. package/dist/public/build/manifest.json +30 -30
  33. package/dist/server/controllers/ai-chat.js +2 -1
  34. package/dist/server/types/ai-chat.d.ts +3 -0
  35. package/package.json +5 -5
  36. package/dist/public/build/css/3132.62cd9c06.chunk.css +0 -2
  37. package/dist/public/build/css/3132.62cd9c06.chunk.css.map +0 -1
  38. package/dist/public/build/css/590.1d7b27ca.chunk.css +0 -2
  39. package/dist/public/build/css/590.1d7b27ca.chunk.css.map +0 -1
  40. package/dist/public/build/css/scheduling.f5b832cf.chunk.css +0 -2
  41. package/dist/public/build/css/scheduling.f5b832cf.chunk.css.map +0 -1
  42. package/dist/public/build/js/3205.87c8575d.chunk.js +0 -2
  43. package/dist/public/build/js/3205.87c8575d.chunk.js.map +0 -1
  44. package/dist/public/build/js/4237.a6d263f6.chunk.js +0 -3
  45. package/dist/public/build/js/4237.a6d263f6.chunk.js.map +0 -1
  46. package/dist/public/build/js/887.7bbb21d6.chunk.js +0 -2
  47. package/dist/public/build/js/887.7bbb21d6.chunk.js.map +0 -1
  48. package/dist/public/build/js/app-navigation-page-layout.27364587.chunk.js.map +0 -1
  49. package/dist/public/build/js/main.39129d1a.js +0 -3
  50. package/dist/public/build/js/main.39129d1a.js.map +0 -1
  51. package/dist/public/build/js/navigation.c35bb543.chunk.js.map +0 -1
  52. package/dist/public/build/js/scheduling.3fff0b4f.chunk.js +0 -2
  53. package/dist/public/build/js/scheduling.3fff0b4f.chunk.js.map +0 -1
  54. /package/dist/public/build/js/{4237.a6d263f6.chunk.js.LICENSE.txt → 4237.57c56e6b.chunk.js.LICENSE.txt} +0 -0
  55. /package/dist/public/build/js/{main.39129d1a.js.LICENSE.txt → main.d91d7090.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/navigation.9b4e0429.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/components/YTChartKit/index.tsx","webpack://@ytsaurus/ui/./src/ui/assets/img/svg/modal-no-content.svg","webpack://@ytsaurus/ui/./src/ui/components/ColumnSelectorModal/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/components/ColumnSelectorModal/ColumnSelectorModal.tsx","webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/ClickableAttributesButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/CountsList/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/components/CountsList/CountsList.tsx","webpack://@ytsaurus/ui/./src/ui/constants/pagination.ts","webpack://@ytsaurus/ui/./src/shared/tablet-errors-manager.ts","webpack://@ytsaurus/ui/./src/ui/components/Dropdown/Dropdown.js","webpack://@ytsaurus/ui/./src/ui/containers/Host/Host.tsx","webpack://@ytsaurus/ui/./src/ui/components/common/Timeline/index.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/histogram.js","webpack://@ytsaurus/ui/./src/ui/components/Histogram/HistogramChart.tsx","webpack://@ytsaurus/ui/./src/ui/components/Histogram/Histogram.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Card/Card.tsx","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QueryWidget/side-panel.tsx","webpack://@ytsaurus/ui/./src/ui/rum/rum-app-measures.ts","webpack://@ytsaurus/ui/./src/ui/utils/navigation/path-editing-popup.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/path-editing-popup.js","webpack://@ytsaurus/ui/./src/ui/hocs/components/Modal/withScope.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/Navigation/PathEditorModal/PathEditorModal.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/copy-object.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/Navigation/PathEditorModal/CopyObjectModal/CopyObjectModal.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/create-directory.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/Navigation/PathEditorModal/CreateDirectoryModal/CreateDirectoryModal.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/move-object.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/Navigation/PathEditorModal/MoveObjectModal/MoveObjectModal.js","webpack://@ytsaurus/ui/./src/ui/utils/navigation/restore-object.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/restore-object.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/Navigation/PathEditorModal/RestoreObjectModal/RestoreObjectModal.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/delete-object.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/Navigation/PathEditorModal/DeleteObjectModal/DeleteObjectModal.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/ACL/ACL.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/content/table/table-rum-id.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/content/table/columns-preset.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/content/table/table.js","webpack://@ytsaurus/ui/./src/ui/components/FileUploadProgress/FileUploadProgress.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/UploadManager/UploadManager.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/content/map-node-ts.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/dyn-tables-state-modal.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/TableOverview/TableActions.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/RemountAlert/RemountAlert.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/content/table/remount-table.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/TableMeta/TableMeta.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/ReplicatedTable/ReplicatedTableSettings.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/content/replicated-table.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/ReplicatedTable/ReplicatedTable.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/ReplicatedTable/ReplicatedTableMeta.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Link/Link.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/content/file.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/content/file.js","webpack://@ytsaurus/ui/./src/ui/containers/NavigationExtraActions/NavigationExtraActions.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/File/File.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/DataTableWrapper/DataTableWrapper.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/content/table/table-ts.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/TableOverview/ColumnsPresetButton.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/TableOverview/ColumnSelectorButton.tsx","webpack://@ytsaurus/ui/./node_modules/screenfull/index.js","webpack://@ytsaurus/ui/./src/ui/components/FullScreen/FullScreen.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/TableOverview/FullScreenButton.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/TableOverview/SettingsButton.tsx","webpack://@ytsaurus/ui/./src/ui/assets/img/svg/jupyter-logo.svg","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/TableOverview/JupyterButton.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/content/table/pagination.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/TableOverview/OffsetSelectorButton.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/TableOverview/OffsetInput.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/TableOverview/Paginator.js","webpack://@ytsaurus/ui/./src/ui/containers/YQLKitButton/YQLKitButton.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/settings/navigation.ts","webpack://@ytsaurus/ui/./src/ui/containers/OpenQueryButtons/OpenQueryButtons.tsx","webpack://@ytsaurus/ui/./src/ui/constants/navigation/modals/attributes-editor.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/modals/attributes-editor.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/attributes-editor.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/table-erase-modal.tsx","webpack://@ytsaurus/ui/./src/ui/utils/navigation/content/map-nodes/node.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/content/map-node.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/MapNode/Chooser.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/remote-copy-modal.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/MapNode/MultipleActions.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/content/map-node.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/link-to-modal.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/MapNode/PathActions.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/TableOverview/EditTableActions.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/TableOverview/DatalensButton.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/TableOverview/TableOverview.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/OffsetSelectorModal/OffsetSelectorModal.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/TableOverview/TableColumnsPresetNotice.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/Table.js","webpack://@ytsaurus/ui/./src/ui/components/TTLInfo/TTLInfo.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/modals/CreateTableModal/CreateTableModal.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/MapNode/MapNodesTable.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withKeyboardNavigation.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/UploadManager/UploadManagerCreate.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/MapNode/NodesTypes/NodesTypes.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/create-aco.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/UploadFileManager/UploadFileManagerFileSettingsForm.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/UploadFileManager/UploadFileManager.tsx","webpack://@ytsaurus/ui/./src/ui/containers/UploadFileManager/useUploadFileManager.ts","webpack://@ytsaurus/ui/./src/ui/containers/UploadFileManager/uploadFile.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/MapNode/MapNode.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/content/document.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/content/document.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Document/DocumentBody.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Document/DocumentEditModal.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Document/Document.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Document/DocumentWithRum.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/content/transaction.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Transaction/Transaction.js","webpack://@ytsaurus/ui/./src/ui/utils/navigation/content/transaction-map/transaction.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/content/transaction-map.js","webpack://@ytsaurus/ui/./src/ui/utils/navigation/content/transaction-map/table.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/content/transaction-map.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/TransactionMap/TransactionMap.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/Navigation/ContentViewer/helpers/getComponentByContentType.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/tabs/queue.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/tabs/consumer.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/consumer/filters.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/QueueError.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Consumer/TargetQueue/TargetQueue.tsx","webpack://@ytsaurus/ui/./src/ui/components/Multimeter/BarChart.tsx","webpack://@ytsaurus/ui/./src/ui/components/Multimeter/Multimeter.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Consumer/Meta/Meta.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Consumer/Toolbar/Toolbar.tsx","webpack://@ytsaurus/ui/./src/ui/store/api/navigation/tabs/consumer/consumer.ts","webpack://@ytsaurus/ui/./src/ui/utils/navigation/tabs/make-cluster-select-options-same-env.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Consumer/modals/RegisterDialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/utils/column-builder.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Consumer/views/Partitions/Partitions.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/consumer/partitions.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Consumer/views/Partitions/PartitionsExtraControls.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Consumer/Consumer.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Consumer/views/ConsumerMetrics/ConsumerMetrics.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/consumer/status.ts","webpack://@ytsaurus/ui/./src/ui/components/Alerts/Alerts.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/Meta/Meta.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/queue/filters.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/Toolbar/Toolbar.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/QueueMetrics/QueueMetrics.tsx","webpack://@ytsaurus/ui/./src/ui/store/api/navigation/tabs/queue/consumers.ts","webpack://@ytsaurus/ui/./src/ui/store/api/navigation/tabs/queue/exports.ts","webpack://@ytsaurus/ui/./src/ui/store/api/navigation/tabs/queue/queue.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Consumers/utils.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Consumers/CreateConsumerDialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Consumers/UnregisterConsumerDialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Consumers/RegisterConsumerDialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Consumers/Consumers.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Consumers/ConsumersExtraControls.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Partitions/Partitions.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/queue/partitions.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Partitions/PartitionsExtraControls.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Exports/ExportsEditDialog/utils/prepareValues.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Exports/ExportsEditDialog/utils/validate.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Exports/ExportsEditDialog/ExportsEditDialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Exports/ExportsEditDialog/utils/consts.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Exports/ExportsEdit/ExportsEdit.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Exports/Exports.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/Queue.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Exports/ExportsExtraControls.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Exports/use-exports.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/queue/status.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/locks.js","webpack://@ytsaurus/ui/./src/ui/utils/clusters.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/tabs/locks.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Locks/Locks.js","webpack://@ytsaurus/ui/./src/ui/components/ErrorIcon/ErrorIcon.tsx","webpack://@ytsaurus/ui/./src/ui/components/MarkdownLinePreview/MarkdownLinePreview.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Schema/ExternalDescription/ExternalDescription.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Schema/Schema.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/schema.js","webpack://@ytsaurus/ui/./src/ui/utils/navigation/tabs/tablets.js","webpack://@ytsaurus/ui/./src/ui/utils/navigation/tabs/tables.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/tabs/tablets.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/tabs/tablets-ts.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/tablets.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Tablets/Tablets.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/tabs/attributes.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/attributes/attributes.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Attributes/Attributes.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/tabs/access-log.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/access-log/access-log.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/arrow-right.svg","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/AccessLog/AccountsLogTransactionInfo.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/AccessLog/AccessLogTable.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/AccessLog/AccessLogError.tsx","webpack://@ytsaurus/ui/./src/ui/utils/navigation/tabs/access-log.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/AccessLog/AccessLogOpenQtButton.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/AccessLog/AccessLogFilters.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/AccessLog/AccessLog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/TabletErrors/TabletErrorsBackground.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/tabs/tablet-errors-by-path.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/tablet-errors/tablet-errors-by-path.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/TabletErrors/TabletErrorsByPath/TabletErrorsByPathTable.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/TabletErrors/TabletErrorsByPath/TabletErrorsByPath.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/TabletErrors/TabletErrors.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/user-attributes.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/tabs/user-attributes.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/UserAttributes/UserAttributes.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/TableMountConfig/TableMountConfig.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Flow/index.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/Navigation/ContentViewer/helpers/getComponentByMode.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/Navigation/ContentViewer/helpers/checkContentIsSupported.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/Navigation/ContentViewer/ContentViewer.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/Navigation/NavigationPermissionsNotice.tsx","webpack://@ytsaurus/ui/./src/ui/utils/accounts/accounts.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/modals/AttributesEditor.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/modals/remote-copy-modal.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/modals/RemoteCopyModal.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/modals/table-erase-modal.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/modals/TableEraseModal.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/modals/TableMergeSortModal/TableSortModal.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/modals/TableMergeSortModal/TableMergeModal.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/modals/dyn-tables-state-modal.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/modals/DynTablesStateModal.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/modals/link-to-modal.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/modals/LinkToModal.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/modals/create-aco-modal.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/modals/CreateACOModal.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/Navigation/Navigation.js","webpack://@ytsaurus/ui/./src/ui/components/Editor/Editor.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/Navigation/NavigationTopRowContent.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/Ellipsis.js","webpack://@ytsaurus/ui/./src/ui/components/TextInputWithDebounce/TextInputWithDebounce.tsx","webpack://@ytsaurus/ui/./src/ui/hocs/withSplit.tsx","webpack://@ytsaurus/ui/./src/ui/components/EditableBreadcrumbs/EditableBreadcrumbs.tsx","webpack://@ytsaurus/ui/./src/ui/components/FilePicker/FilePicker.tsx","webpack://@ytsaurus/ui/./src/ui/components/FileDropZone/i18n/index.ts","webpack://@ytsaurus/ui/./src/ui/components/FileDropZone/FileDropZone.tsx","webpack://@ytsaurus/ui/./src/ui/components/FileDropZone/useFileDragDrop.ts","webpack://@ytsaurus/ui/./src/ui/components/LoadDataHandler/LoadDataHandler.tsx","webpack://@ytsaurus/ui/./src/ui/hooks/use-side-panel.tsx","webpack://@ytsaurus/ui/./src/ui/components/formatters/FormattedLink.js","webpack://@ytsaurus/ui/./src/ui/components/formatters/FormattedTextOrLink.js","webpack://@ytsaurus/ui/./src/ui/components/formatters/FormattedId/FormattedId.js","webpack://@ytsaurus/ui/./src/ui/components/formatters/index.js","webpack://@ytsaurus/ui/./src/ui/components/WarningIcon/WarningIcon.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/ArrowToggle/ArrowToggle.tsx","webpack://@ytsaurus/ui/./src/ui/components/Favourites/Favourites.tsx","webpack://@ytsaurus/ui/./src/ui/components/RadioButton/RadioButton.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/helpers/pathToFileName.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/ArrowUpRightFromSquare.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Alert/AlertContext.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Alert/useAlertContext.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Alert/AlertAction.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Alert/constants.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Alert/AlertContextProvider.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Alert/AlertIcon.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/CircleXmarkFill.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/CircleXmark.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/CircleInfoFill.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/CircleCheckFill.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/TriangleExclamationFill.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/ThunderboltFill.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Alert/i18n/index.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Alert/Alert.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Alert/AlertTitle.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/src/components/Alert/AlertActions.tsx","webpack://@ytsaurus/ui/./src/ui/components/ColorCircle/ColorCircle.tsx","webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/AttributesButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/CollapsibleSection/CollapsibleSection.tsx"],"sourcesContent":["import React from 'react';\nexport type {ChartKitProps, ChartKitWidget, ChartKitRef} from './YTChartKit';\nexport type {RawSerieData, YagrWidgetData} from '@gravity-ui/chartkit/yagr';\n\nimport withLazyLoading from '../../hocs/withLazyLoading';\nimport type {YTChartKitType} from './YTChartKit';\n\nexport const YTChartKitLazy = withLazyLoading(\n React.lazy(async () => import(/* webpackChunkName: 'chart-kit' */ './YTChartKit')),\n) as YTChartKitType;\n\nconst COLORS = ['rgb(77, 162, 241)', 'rgb(255, 61, 100)'];\n\nexport function getSerieColor(serieIndex: number) {\n return COLORS[serieIndex % COLORS.length];\n}\n\nexport {YTChartKitPie} from './YTChartKitPie';\nexport {YTChartKitHistogram} from './YTChartKitHistogram';\n","const SvgModalNoContent = props => <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 194 194\" {...props}><g fill=\"none\" fillRule=\"evenodd\" stroke=\"#999\" opacity={0.22}><path strokeWidth={2} d=\"M97.116 188.443h1v1h-1zM96.424 185.293h1.1v1h-1.1zM95.374 182.143h2.34v1h-2.34zM94.324 178.993h4.2v1h-4.2zM93.273 175.842h6.679v1h-6.679zM91.173 172.692h9.779v1h-9.779zM89.597 169.542h13.499v1H89.597zM87.496 166.391h17.839v1H87.496zM84.871 163.241h22.798v1H84.871zM81.719 160.091h28.998v1H81.719zM78.043 156.94h35.817v1H78.043zM73.842 153.623h45.117v1H73.842z\" /><ellipse cx={96.77} cy={96.61} strokeWidth={8} rx={92.403} ry={92.61} /><ellipse cx={96.669} cy={96.371} strokeWidth={4} rx={37.057} ry={37.141} /><ellipse cx={97.269} cy={96.915} strokeWidth={8} rx={11.499} ry={11.532} /><path strokeLinecap=\"square\" strokeWidth={4} d=\"M34.504 34.653 66.12 66.34\" /><path strokeDasharray=\"8,8\" strokeWidth={4} d=\"M33.023 44.104V148.48M160.116 44.104V148.48\" /><path strokeLinecap=\"square\" strokeWidth={4} d=\"M159.603 34.653 127.986 66.34M34.504 159.798l31.617-31.685M159.603 159.798l-31.617-31.685\" /></g></svg>;\nexport default SvgModalNoContent;","import {addI18Keysets} from '../../../i18n/index';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:ColumnSelectorModal', {en, ru});\n","import React from 'react';\nimport block from 'bem-cn-lite';\n\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport Modal from '../Modal/Modal';\nimport ColumnSelector, {makeItemsCopy} from '../ColumnSelector/ColumnSelector';\nimport NoContentImage from '../../assets/img/svg/modal-no-content.svg';\nimport i18n from './i18n';\n\nimport './ColumnSelectorModal.scss';\n\nconst b = block('column-selector-modal');\n\nexport type ColumnSelectorModalProps<DataT> = {\n items: Array<ColumnSelectorItem<DataT>>;\n srcItems?: Array<ColumnSelectorItem<DataT>>;\n isVisible?: boolean;\n onConfirm: (items: Array<ColumnSelectorItem<DataT>>) => void;\n onCancel: () => void;\n\n itemRenderer?: (item: ColumnSelectorItem<DataT>) => React.ReactNode;\n};\n\nexport type ColumnSelectorItem<DataT> = {\n name: string;\n checked: boolean;\n data: DataT;\n disabled?: boolean;\n keyColumn?: boolean;\n};\n\ntype Props<T> = ColumnSelectorModalProps<T>;\n\ntype State<T> = Pick<Props<T>, 'items' | 'srcItems'> & {itemsOrder: Array<string>};\n\nexport default class ColumnSelectorModal<T = never> extends React.Component<Props<T>, State<T>> {\n state: State<T> = {\n srcItems: this.props.srcItems || this.props.items,\n items: makeItemsCopy(this.props.items),\n itemsOrder: this._getItemsOrder(this.props.items),\n };\n\n // in React 16.3 there is another way to do it: getDerivedStateFromProps;\n // revise this place once received data is managed by Redux\n componentDidUpdate(prevProps: Props<T>) {\n const {items, srcItems} = this.props;\n if (prevProps.items !== items || prevProps.srcItems !== srcItems) {\n // don't update itemsOrder\n this.setState({\n srcItems: srcItems || this.props.items,\n items: this._getOrderedItems(makeItemsCopy(items)),\n });\n }\n }\n\n _handleCONFIRMButtonClick = () => {\n const {items} = this.state;\n this.props.onConfirm(items);\n };\n\n _handleCANCELButtonClick = () => {\n const {items} = this.props;\n const order = this._getItemsOrder(items);\n // reset state to initial on cancel\n this.setState({\n items: this._getOrderedItems(makeItemsCopy(items)),\n itemsOrder: order,\n });\n this.props.onCancel();\n };\n\n _getItemsOrder(items: Props<T>['items']) {\n return map_(items, (item) => item.name);\n }\n\n _getOrderedItems(items: Props<T>['items'], order = this.state.itemsOrder) {\n return items.sort((a, b) => order.indexOf(a.name) - order.indexOf(b.name));\n }\n\n _getSelectorProps<P>(props: P, items?: Props<T>['items']) {\n return {\n ...props,\n items,\n showDisabledItems: true,\n isHeadless: false,\n isFilterable: true,\n onChange: this.onSourceChange,\n };\n }\n\n _getSortableSelectorProps<P>(props: P, items: Props<T>['items']) {\n return {\n ...props,\n items,\n isSelectable: false,\n isSortable: true,\n showSelectedOnly: true,\n onChange: this.onDestinationChange,\n };\n }\n\n calculateSrcItems(newItemsMap: Record<string, ColumnSelectorItem<T>>) {\n return map_(this.state.srcItems, (item) => {\n const newItem = newItemsMap[item.name];\n\n if (newItem && newItem.checked !== item.checked) {\n return newItem;\n }\n\n return item;\n });\n }\n\n onSourceChange = ({items: newItems}: Pick<Props<T>, 'items'>) => {\n const {items} = this.state;\n const newItemsMap = reduce_(\n newItems,\n (acc, data) => {\n acc[data.name] = data;\n return acc;\n },\n {} as Record<string, ColumnSelectorItem<T>>,\n );\n\n const unchanged: Props<T>['items'] = [];\n const changed: Props<T>['items'] = [];\n forEach_(items, (item) => {\n const newItem = newItemsMap[item.name];\n if (newItem && newItem.checked !== item.checked) {\n const dst = newItem.keyColumn ? unchanged : changed;\n dst.push(newItem);\n } else {\n unchanged.push(item);\n }\n });\n\n const preparedItems = unchanged.concat(changed);\n // don't update itemsOrder\n this.setState({\n items: this._getOrderedItems(preparedItems),\n srcItems: this.calculateSrcItems(newItemsMap),\n });\n };\n\n onDestinationChange = ({items: newItems}: Pick<Props<T>, 'items'>) => {\n const newItemsMap = reduce_(\n newItems,\n (acc, data) => {\n acc[data.name] = data;\n return acc;\n },\n {} as Record<string, ColumnSelectorItem<T>>,\n );\n\n const order = this._getItemsOrder(newItems);\n\n this.setState({\n items: this._getOrderedItems(newItems, order),\n itemsOrder: order,\n srcItems: this.calculateSrcItems(newItemsMap),\n });\n };\n\n renderColumnSelector({\n props,\n title,\n description,\n className,\n }: {\n props: object;\n title: string;\n description: string;\n className?: string;\n }) {\n return (\n <ColumnSelector {...props} className={className}>\n <div className={b('no-content')}>\n <p>\n <strong>{title}</strong>\n </p>\n <p>{description}</p>\n <NoContentImage />\n </div>\n </ColumnSelector>\n );\n }\n\n renderContent() {\n const {isVisible, ...rest} = this.props; // eslint-disable-line\n const {items, srcItems} = this.state;\n\n const headingCN = block('elements-heading')({size: 's'}, b('header'));\n\n const selectorProps = this._getSelectorProps(rest, srcItems);\n const sortableSelectorProps = this._getSortableSelectorProps(selectorProps, items);\n const selectedItemsCount = reduce_(\n sortableSelectorProps.items,\n (acc, item) => (item.disabled || !item.checked ? acc : ++acc),\n 0,\n );\n\n return (\n isVisible && (\n <div className={b()}>\n <div className={b('panel', {left: 'yes'})}>\n <div className={headingCN}>\n {i18n('all')} &nbsp;\n <span className=\"elements-secondary-text\">{srcItems?.length}</span>\n </div>\n\n {this.renderColumnSelector({\n props: selectorProps,\n title: i18n('no-available-columns'),\n description: i18n('no-columns-matching'),\n })}\n </div>\n\n <div className={b('panel')}>\n <div className={headingCN}>\n Selected &nbsp;\n <span className=\"elements-secondary-text\">{selectedItemsCount}</span>\n </div>\n\n {this.renderColumnSelector({\n props: sortableSelectorProps,\n title: i18n('no-selected-columns'),\n description: i18n('add-columns-you-need'),\n })}\n </div>\n </div>\n )\n );\n }\n\n render() {\n const {isVisible} = this.props;\n const title = i18n('columns-setup');\n\n return (\n <Modal\n size=\"l\"\n title={title}\n borderless={true}\n visible={isVisible}\n confirmText={i18n('apply')}\n onConfirm={this._handleCONFIRMButtonClick}\n onCancel={this._handleCANCELButtonClick}\n content={this.renderContent()}\n contentClassName=\"column-selector-modal-content\"\n />\n );\n }\n}\n","import {addI18Keysets} from '../../../i18n/index';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:attributes-button', {en, ru});\n","import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport {openAttributesModal} from '../../store/actions/modals/attributes-modal';\nimport {ButtonProps} from '../../components/Button/Button';\n\nimport AttributesButton, {AttributesButtonProps} from './AttributesButton';\n\nimport i18n from './i18n';\n\ninterface Props extends Omit<AttributesButtonProps, 'onClick' | 'title'> {\n title: React.ReactNode;\n\n // The function is called inside click handler, and overrides path and exactPath\n getPathProps?: () => Pick<Partial<Props>, 'path' | 'exactPath'>;\n path?: string;\n exactPath?: string;\n\n attribute?: string;\n attributes?: object;\n\n size?: ButtonProps['size'];\n view?: ButtonProps['view'];\n}\n\nfunction ClickableAttributesButton({\n title,\n getPathProps = () => {\n return {};\n },\n path,\n exactPath,\n attribute,\n attributes,\n openAttributesModal,\n withTooltip = true,\n tooltipProps = {placement: 'bottom-end', content: i18n('tooltip-content')},\n // Extract potentially problematic props\n ...rest\n}: Props & ConnectedProps<typeof connector>) {\n return (\n <AttributesButton\n {...rest}\n tooltipProps={tooltipProps}\n withTooltip={withTooltip}\n onClick={() => {\n const pathProps = {\n path,\n exactPath,\n ...getPathProps(),\n };\n\n openAttributesModal({\n title,\n ...pathProps,\n attribute,\n attributes,\n });\n }}\n />\n );\n}\n\nconst connector = connect(null, {openAttributesModal});\n\nexport default connector(ClickableAttributesButton);\n","import {addI18Keysets} from '../../../i18n/index';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:nodes-types', {en, ru});\n","import React from 'react';\nimport block from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\nimport orderBy_ from 'lodash/orderBy';\nimport reduce_ from 'lodash/reduce';\nimport slice_ from 'lodash/slice';\n\nimport i18n from './i18n';\nimport './CountsList.scss';\n\nconst b = block('counts-list');\nconst DISPLAYED_ITEMS = 3;\n\nexport interface CountsListInfo {\n type: string;\n count: number;\n}\n\nexport interface CountsListProps {\n items: CountsListInfo[];\n hideAll?: boolean;\n selectedItems?: unknown[];\n renderActions?: () => React.ReactNode;\n}\n\nfunction prepareItems(items: CountsListInfo[]): CountsListInfo[] {\n const sortedItems = orderBy_(items, (node) => node.count, 'desc');\n return slice_(sortedItems, 0, DISPLAYED_ITEMS);\n}\n\nfunction getSumCount(nodes: CountsListInfo[]): number {\n return reduce_(nodes, (sum, node) => sum + node.count, 0);\n}\n\nfunction renderItem(node: CountsListInfo): React.ReactElement {\n return (\n <li className={b('item')} key={node.type}>\n <span className={b('type')}>{node.type}</span>\n <span className={b('count')}>{node.count}</span>\n </li>\n );\n}\n\nfunction renderItems(nodes: CountsListInfo[]): React.ReactElement[] {\n return map_(nodes, (node) => renderItem(node));\n}\n\nfunction SelectedItems({\n selectedItems,\n renderActions,\n}: Pick<CountsListProps, 'selectedItems' | 'renderActions'>) {\n if (!selectedItems?.length) {\n return null;\n }\n return (\n <li className={b('item')}>\n <span className={b('type')}>{i18n('selected')}</span>\n <span className={b('count')}>{selectedItems.length}</span>\n <span className={b('actions')}>{renderActions?.()}</span>\n </li>\n );\n}\n\nexport function CountsList({hideAll, items, selectedItems, renderActions}: CountsListProps) {\n const displayedItems = prepareItems(items);\n const allItemsCount = getSumCount(items);\n const displayedItemsCount = getSumCount(displayedItems);\n const otherItemsCount = allItemsCount - displayedItemsCount;\n\n return (\n <ul className={b('list')}>\n {!hideAll && renderItem({type: i18n('all'), count: allItemsCount})}\n {renderItems(displayedItems)}\n {!hideAll &&\n otherItemsCount > 0 &&\n renderItem({type: i18n('other'), count: otherItemsCount})}\n <SelectedItems selectedItems={selectedItems} renderActions={renderActions} />\n </ul>\n );\n}\n\nexport default CountsList;\n","export const ROWS_PER_PAGE = 100;\n","import axios, {AxiosResponse, CancelToken} from 'axios';\nimport {YTError} from '../@types/types';\n\nexport const TABLET_ERRORS_MANAGER_POST_ACTIONS = new Set([\n 'tablet_errors_by_bundle',\n 'tablet_errors_by_table',\n 'tablet_errors_by_table_and_timestamp',\n] as const);\n\nexport type TabletErrorsManagerPostActionType = Parameters<\n (typeof TABLET_ERRORS_MANAGER_POST_ACTIONS)['add']\n>[0];\n\nexport type MethodCount = {\n method: string;\n count: number;\n};\n\nexport type TableMethodErrorsCount = {\n table_path: string;\n last_error_timestamp: number;\n method_counts: Record<string, number>;\n};\n\nexport type TabletErrorsByBundleResponse = {\n all_methods: Array<string>;\n presented_methods: Array<string>;\n errors: Array<TableMethodErrorsCount>;\n fixed_end_timestamp: unknown;\n total_row_count: number;\n};\n\nexport type TabletErrorsBaseParams = {\n start_timestamp: number;\n end_timestamp: number;\n methods?: Array<string>;\n count_limit: number;\n offset: number;\n fixed_end_timestamp?: unknown;\n};\n\nexport type TabletMethodError = {\n tablet_id: string;\n timestamp: number;\n method: string;\n error: YTError;\n};\n\nexport type MethodErrors = {\n method: string;\n errors: Array<TabletError>;\n fixed_end_timestamp: number;\n total_row_count: number;\n all_methods: Array<string>;\n error_count_limit_exceeded?: boolean;\n};\n\nexport type TabletError = {\n tablet_id: string;\n timestamp: number;\n error: YTError;\n method: string;\n host: string;\n};\n\nexport type TabletErrorsApi = {\n tablet_errors_by_bundle: {\n body: TabletErrorsBaseParams & {tablet_cell_bundle: string; table_path?: string};\n response: TabletErrorsByBundleResponse;\n };\n tablet_errors_by_table: {\n body: TabletErrorsBaseParams & {table_path: string; table_id: string; tablet_id?: string};\n response: MethodErrors;\n };\n tablet_errors_by_table_and_timestamp: {\n body: TabletErrorsBaseParams & {table_id: string};\n response: Array<TabletMethodError>;\n };\n};\n\nexport function fetchFromTabletErrorsApi<K extends keyof TabletErrorsApi>(\n action: K,\n cluster: string,\n params: TabletErrorsApi[K]['body'],\n cancelToken: CancelToken,\n): Promise<AxiosResponse<TabletErrorsApi[K]['response']>> {\n type ApiMethod = TabletErrorsApi[K];\n\n return axios.post<\n ApiMethod['response'],\n AxiosResponse<ApiMethod['response']>,\n ApiMethod['body']\n >(`/api/tablet-errors/${cluster}/${action}`, {...params, cluster}, {cancelToken});\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport templates from '../templates/templates';\n\nimport {Popup} from '@gravity-ui/uikit';\n\nconst block = cn('elements-dropdown');\n\nclass Dropdown extends Component {\n static propTypes = {\n button: PropTypes.oneOfType([PropTypes.element, PropTypes.object]).isRequired,\n className: PropTypes.string,\n popup: PropTypes.object,\n directions: PropTypes.array,\n trigger: PropTypes.oneOf(['click', 'hover']).isRequired,\n template: PropTypes.oneOfType([\n PropTypes.element,\n PropTypes.shape({\n key: PropTypes.string.isRequired,\n data: PropTypes.object,\n }),\n ]).isRequired,\n zIndexGroupLevel: PropTypes.number,\n };\n\n static defaultProps = {\n zIndexGroupLevel: 1,\n directions: ['bottom-end', 'top-end'],\n };\n\n state = {\n popupVisible: false,\n };\n\n anchor = React.createRef();\n\n toggle = () =>\n this.setState((prevState) => ({\n popupVisible: !prevState.popupVisible,\n }));\n\n open = () => this.setState({popupVisible: true});\n\n close = () => this.setState({popupVisible: false});\n\n renderButton() {\n const {button, trigger} = this.props;\n\n const actionProps = {\n onClick: trigger === 'click' ? this.toggle : undefined,\n onMouseEnter: trigger === 'hover' ? this.open : undefined,\n onMouseLeave: trigger === 'hover' ? this.close : undefined,\n };\n\n return React.cloneElement(button, actionProps);\n }\n\n renderTemplate() {\n const {template} = this.props;\n const {key, data} = this.props.template;\n const renderer = templates.get(key).__default__;\n\n return React.isValidElement(template)\n ? React.cloneElement(template)\n : renderer.call(this, data);\n }\n\n renderPopup() {\n const {popup, directions} = this.props;\n\n return (\n <Popup\n placement={directions?.[0] || 'bottom'}\n onOpenChange={(open) => {\n if (!open) {\n this.close();\n }\n }}\n open={true}\n anchorElement={this.anchor.current}\n {...popup}\n >\n {this.renderTemplate()}\n </Popup>\n );\n }\n\n render() {\n const {className} = this.props;\n\n return (\n <span className={block(null, className)} ref={this.anchor}>\n {this.renderButton()}\n {this.state.popupVisible && this.renderPopup()}\n </span>\n );\n }\n}\n\nexport default Dropdown;\n","import React from 'react';\nimport {useSelector} from '../../store/redux-hooks';\nimport cn from 'bem-cn-lite';\n\nimport {getCluster} from '../../store/selectors/global';\nimport Link from '../../components/Link/Link';\nimport ClipboardButton from '../../components/ClipboardButton/ClipboardButton';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\nimport {uiSettings} from '../../config/ui-settings';\nimport {makeRegexpFromSettings} from '../../../shared/utils';\n\nimport './Host.scss';\n\nconst reShortName = makeRegexpFromSettings(uiSettings.reShortNameFromAddress);\nconst reTabletNodeShortName = makeRegexpFromSettings(uiSettings.reShortNameFromTabletNodeAddress);\n\nexport function calcShortNameByRegExp(address: string, asTabletNode?: boolean) {\n const re = asTabletNode ? reTabletNodeShortName : reShortName;\n if (re) {\n const res = re?.exec(address);\n if (res?.groups?.shortname) {\n return [res.groups.shortname, res.groups.suffix].filter(Boolean).join('');\n }\n }\n return undefined;\n}\n\nconst block = cn('yt-host');\n\ninterface Props {\n address: string;\n className?: string;\n copyBtnClassName?: string;\n onClick?: () => void;\n useText?: boolean;\n prefix?: React.ReactNode;\n asTabletNode?: boolean;\n inlineMargins?: boolean;\n}\n\nexport function Host({\n address = '',\n prefix,\n className,\n copyBtnClassName,\n onClick,\n useText,\n asTabletNode,\n inlineMargins,\n}: Props) {\n const host = React.useMemo(() => {\n return calcShortNameByRegExp(address, asTabletNode) || address;\n }, [address, asTabletNode]);\n\n const cluster = useSelector(getCluster);\n\n return (\n <span\n className={block(\n {hidden: !host, 'inline-margins': inlineMargins},\n ['elements-monospace', className].filter(Boolean).join(' '),\n )}\n onClick={onClick}\n >\n {prefix}\n <Tooltip className={block('tooltip')} content={address}>\n {useText ? (\n host\n ) : (\n <Link url={`/${cluster}/components/nodes/${address}`} routed>\n {host}\n </Link>\n )}\n </Tooltip>\n <span className={block('copy-btn', copyBtnClassName)}>\n <ClipboardButton view={'flat-secondary'} text={address} />\n </span>\n </span>\n );\n}\n","export {TimelinePicker} from './TimelinePicker/TimelinePicker';\n\nexport {convertTimeToRequestParams, formatInterval} from './util';\n\nfunction shortcut(time: string, title?: string) {\n return {time, title: title || time};\n}\n\nexport const TIMELINE_RANGE_PICKER_SHORTCUTS = [\n [shortcut('4h'), shortcut('8h'), shortcut('12h'), shortcut('24h')],\n [shortcut('2d'), shortcut('7d', 'Week'), shortcut('2w', '2 Weeks')],\n [shortcut('1M', 'Month'), shortcut('2M', '2 Months')],\n];\n","import hammer from '../../common/hammer';\nimport {createSelector} from 'reselect';\n\nconst getHistogram = (state, props) => props.histogram;\n\nexport const createGetQuartiles = () =>\n createSelector(getHistogram, (histogram) => hammer.stat.quartiles(histogram.data));\n\nexport const createGetPDF = () =>\n createSelector(getHistogram, (histogram) => hammer.stat.pdf(histogram.data));\n\nexport const createGetECDF = () =>\n createSelector([getHistogram, createGetPDF()], (histogram, pdf) => {\n const ecdf = hammer.stat.ecdf(histogram.data);\n\n // Create fake points\n ecdf.steps.unshift({\n x: pdf.min,\n y: 0,\n });\n ecdf.steps.push({\n x: pdf.min + pdf.bucketNumber * pdf.bucketSize,\n y: 100,\n });\n\n return ecdf;\n });\n\nexport const createGetIsDataGood = () =>\n createSelector(\n [createGetPDF(), createGetECDF(), createGetQuartiles()],\n (pdfData, ecdfData, quartiles) => {\n if (pdfData.min === pdfData.max) {\n // All points are the same\n return false;\n } else if (ecdfData.steps.length < 5) {\n // We have got too few different points in data (including fake points)\n return false;\n } else if (quartiles.q75 - quartiles.q25 === 0) {\n // All points are almost the same\n return false;\n } else {\n return true;\n }\n },\n );\n","import compact_ from 'lodash/compact';\nimport React from 'react';\nimport {\n RawSerieData,\n YTChartKitLazy,\n YagrWidgetData,\n getSerieColor,\n} from '../../components/YTChartKit';\n\nimport formatLib from '../../common/hammer/format';\n\nexport interface HistogramChartProps {\n className: string;\n format: 'Number' | 'Bytes';\n ecdf: ECDFData;\n pdf: PDFData;\n dataName: string;\n lineOnly?: boolean;\n}\n\ninterface ECDFData {\n min: number;\n max: number;\n steps: Array<XY>;\n}\n\ntype XY = [X, Y] | {x: X; y: Y};\n\ninterface PDFData {\n bucketNumber: number;\n bucketSize: number;\n buckets: Array<[X, Y]>;\n min: X;\n max: X;\n}\n\ntype X = number;\ntype Y = number;\n\nfunction HistogramChart({className, pdf, ecdf, format, dataName, lineOnly}: HistogramChartProps) {\n const yagrData = React.useMemo(() => {\n const xFormat = format === 'Bytes' ? formatLib.Bytes : formatLib.Number;\n const {timeline, graphs, step} = lineOnly\n ? getLineOnlyData(pdf, ecdf)\n : getColumnData(pdf, ecdf);\n const res: YagrWidgetData = {\n data: {\n timeline,\n graphs,\n },\n libraryConfig: {\n axes: {\n x: {\n values: (_d, x) => x.map(xFormat),\n side: 'bottom',\n grid: {\n show: false,\n },\n },\n y1: {\n side: 'right',\n show: false,\n },\n y: {\n side: 'left',\n show: false,\n },\n },\n scales: {\n y1: {\n min: 0,\n max: 100,\n },\n y: {\n min: 0,\n },\n },\n tooltip: {\n render: (tooltipData) => {\n const {\n x,\n scales: [first, second],\n } = tooltipData;\n const columnValue = lineOnly ? undefined : first?.rows?.[0]?.originalValue;\n const lineValue = lineOnly\n ? first?.rows?.[0]?.originalValue\n : second?.rows?.[0]?.originalValue;\n\n return (\n renderDefaultTooltip({\n colValue:\n columnValue !== undefined\n ? formatLib.Number(columnValue)\n : undefined,\n colX0: xFormat(x - step / 2),\n colX1: xFormat(x + step / 2),\n lineValue:\n lineValue !== undefined\n ? formatLib.Number(lineValue, {digits: 2}) + '%'\n : undefined,\n lineX: xFormat(x),\n dataName,\n lineOnly,\n }) ?? '-'\n );\n },\n },\n },\n sources: {},\n };\n return res;\n }, [pdf, ecdf, format, lineOnly]);\n\n return (\n <div className={className}>\n <YTChartKitLazy type={'yagr'} data={yagrData} />\n </div>\n );\n}\n\nexport default React.memo(HistogramChart);\n\nfunction getColumnData(\n {buckets, min, bucketSize}: PDFData,\n {steps}: ECDFData,\n): YagrWidgetData['data'] & {step: number} {\n const timeline = [min - 0.1 * bucketSize];\n const data: Array<number> = [undefined!];\n const lineData: Array<number> = [undefined!];\n let j = 0;\n for (let i = 0; i < buckets.length; ++i) {\n const [x, y] = buckets[i];\n const bestX = x + bucketSize / 2;\n data.push(y);\n timeline.push(bestX);\n while (j < steps.length) {\n const item = steps[j];\n const itemX = getX(item);\n if (itemX === bestX) {\n lineData[i + 1] = Array.isArray(item) ? item[1] : item.y;\n break;\n } else if (itemX === undefined || itemX < bestX) {\n ++j;\n continue;\n } else {\n lineData[i + 1] = calcBestY(\n bestX,\n steps[Math.min(steps.length - 1, j - 1)],\n steps[j],\n )!;\n break;\n }\n }\n }\n timeline.push(min + (0.1 + bucketSize) * buckets.length);\n data.push(undefined!);\n lineData.push(undefined!);\n\n const graphs: RawSerieData[] = [\n {\n type: 'line' as const,\n data: lineData,\n scale: 'y1',\n color: getSerieColor(1),\n },\n {\n type: 'column' as const,\n data,\n color: getSerieColor(0),\n ...{\n renderOptions: {\n size: [1],\n gap: 1,\n },\n },\n },\n ];\n return {\n graphs,\n timeline,\n step: bucketSize,\n };\n}\n\nfunction getLineOnlyData(\n {min, buckets, bucketSize}: PDFData,\n {steps}: ECDFData,\n): ReturnType<typeof getColumnData> {\n const timeline: Array<number> = [min - 0.1 * bucketSize];\n const data: Array<number> = [NaN];\n\n for (const item of steps) {\n timeline.push(getX(item)!);\n data.push(getY(item)!);\n }\n\n timeline.push(min + (0.1 + bucketSize) * buckets.length);\n data.push(NaN);\n\n const graphs: Array<RawSerieData> = [\n {\n type: 'line' as const,\n data,\n color: getSerieColor(1),\n },\n ];\n\n return {\n timeline,\n graphs,\n step: NaN,\n };\n}\n\nfunction renderDefaultTooltip({\n colValue,\n colX0,\n colX1,\n lineValue,\n lineX,\n dataName,\n lineOnly,\n}: {\n colValue?: string;\n colX0: string;\n colX1: string;\n lineValue?: string;\n lineX: string;\n dataName: string;\n lineOnly?: boolean;\n}) {\n const lp = lineOnly ? '' : '~';\n return compact_([\n colValue !== undefined\n ? `<b>${colValue}</b> partitions contain in range from <b>${colX0}</b> to <b>${colX1}</b> - ${dataName}`\n : undefined,\n lineValue !== undefined\n ? `<b>${lp}${lineValue}</b> of tablets contains <b>${lp}${lineX}</b> or less`\n : undefined,\n ]).join('<br/>');\n}\n\nfunction getX(v?: XY) {\n return Array.isArray(v) ? v[0] : v?.x;\n}\n\nfunction getY(v?: XY) {\n return Array.isArray(v) ? v[1] : v?.y;\n}\n\nfunction calcBestY(bestX: number, left?: XY, right?: XY) {\n const ly = getY(left);\n const ry = getY(right);\n if (ly === undefined) {\n return ry;\n }\n\n if (ry === undefined) {\n return ly;\n }\n\n const lx = getX(left);\n const rx = getX(right);\n const k = (bestX - lx!) / (rx! - lx!);\n\n return ly + k * (ry - ly);\n}\n","import {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport hammer from '../../common/hammer';\nimport cn from 'bem-cn-lite';\nimport React from 'react';\n\nimport keys_ from 'lodash/keys';\nimport map_ from 'lodash/map';\n\nimport {\n createGetECDF,\n createGetIsDataGood,\n createGetPDF,\n createGetQuartiles,\n} from '../../store/selectors/histogram';\nimport HistogramChart from './HistogramChart';\n\nimport './Histogram.scss';\nimport {Checkbox, Select} from '@gravity-ui/uikit';\n\nconst block = cn('histogram');\n\nHistogram.quartilesProps = PropTypes.shape({\n min: PropTypes.number,\n q25: PropTypes.number,\n q50: PropTypes.number,\n q75: PropTypes.number,\n max: PropTypes.number,\n});\n\nHistogram.pdfProps = PropTypes.shape({\n bucketNumber: PropTypes.number,\n bucketSize: PropTypes.number,\n max: PropTypes.number,\n min: PropTypes.number,\n valueMax: PropTypes.number,\n valueMin: PropTypes.number,\n quartiles: Histogram.quartilesProps,\n buckets: PropTypes.array,\n});\n\nHistogram.ecdfProps = PropTypes.shape({\n min: PropTypes.number,\n max: PropTypes.number,\n steps: PropTypes.array,\n});\n\nHistogram.propTypes = {\n // from parent\n activeHistogram: PropTypes.string.isRequired,\n handleHistogramChange: PropTypes.func.isRequired,\n histogramItems: PropTypes.object.isRequired,\n\n histogram: PropTypes.shape({\n data: PropTypes.array.isRequired,\n format: PropTypes.string.isRequired,\n dataName: PropTypes.string.isRequired,\n dataFormat: PropTypes.string.isRequired,\n }).isRequired,\n\n // from connect\n quartiles: Histogram.quartilesProps.isRequired,\n pdf: Histogram.pdfProps.isRequired,\n ecdf: Histogram.ecdfProps.isRequired,\n isDataGood: PropTypes.bool.isRequired,\n};\n\nfunction Histogram(props) {\n const {activeHistogram, handleHistogramChange, histogramItems} = props;\n const {histogram, quartiles, pdf, ecdf, isDataGood} = props;\n\n const params = {...histogram, pdf, ecdf};\n\n const [isDatailedLine, setDetailed] = React.useState(false);\n\n return (\n <div className={block()}>\n <div className={block('toolbar')}>\n <Select\n value={[activeHistogram]}\n onUpdate={(values) => handleHistogramChange(values[0])}\n options={map_(keys_(histogramItems), (value) => {\n return {value, content: value};\n })}\n width=\"max\"\n />\n <Checkbox\n className={block('detailed')}\n checked={isDatailedLine}\n onUpdate={setDetailed}\n >\n Detailed line\n </Checkbox>\n </div>\n\n {isDataGood ? (\n <HistogramChart className={block('chart')} {...params} lineOnly={isDatailedLine} />\n ) : (\n <div className={block('bad-data')}>\n <p className={block('bad-data-message')}>\n Could not draw a descriptive chart with given data.\n </p>\n </div>\n )}\n\n <ul className={block('quartiles')}>\n <li className={block('quartiles-item')}>\n Min –{' '}\n <span className={block('quartiles-count')}>\n {hammer.format[histogram.format](quartiles.min)}\n </span>\n </li>\n <li className={block('quartiles-item')}>\n Q25% –{' '}\n <span className={block('quartiles-count')}>\n {hammer.format[histogram.format](quartiles.q25)}\n </span>\n </li>\n <li className={block('quartiles-item')}>\n Q50% –{' '}\n <span className={block('quartiles-count')}>\n {hammer.format[histogram.format](quartiles.q50)}\n </span>\n </li>\n <li className={block('quartiles-item')}>\n Q75% –{' '}\n <span className={block('quartiles-count')}>\n {hammer.format[histogram.format](quartiles.q75)}\n </span>\n </li>\n <li className={block('quartiles-item')}>\n Max –{' '}\n <span className={block('quartiles-count')}>\n {hammer.format[histogram.format](quartiles.max)}\n </span>\n </li>\n </ul>\n </div>\n );\n}\n\n// https://github.com/reduxjs/reselect#sharing-selectors-with-props-across-multiple-component-instances\nconst makeMapStateToProps = () => {\n const getQuartiles = createGetQuartiles();\n const getPDF = createGetPDF();\n const getECDF = createGetECDF();\n const getIsDataGood = createGetIsDataGood();\n\n return (state, props) => {\n const quartiles = getQuartiles(state, props);\n const pdf = getPDF(state, props);\n const ecdf = getECDF(state, props);\n const isDataGood = getIsDataGood(state, props);\n\n return {quartiles, pdf, ecdf, isDataGood};\n };\n};\n\nexport default connect(makeMapStateToProps)(Histogram);\n","'use client';\n\nimport * as React from 'react';\n\nimport {useActionHandlers} from '../../hooks';\nimport {Box} from '../layout';\nimport type {BoxProps} from '../layout';\nimport {block} from '../utils/cn';\n\nimport './Card.scss';\n\nconst b = block('card');\n\ntype SelectionCardView = 'outlined' | 'clear';\ntype ContainerCardView = 'outlined' | 'filled' | 'raised';\n\nexport type CardType = 'selection' | 'action' | 'container';\nexport type CardTheme = 'normal' | 'info' | 'success' | 'warning' | 'danger' | 'utility';\nexport type CardView = SelectionCardView | ContainerCardView;\nexport type CardSize = 'm' | 'l';\n\nexport interface CardProps extends Omit<BoxProps<'div'>, 'as' | 'onClick'> {\n children: React.ReactNode;\n /** Card click handler. Available for type: 'selection', 'action' */\n onClick?: (event: React.MouseEvent<HTMLDivElement>) => void;\n /** Disabled card. Available for type: 'selection', 'action' */\n disabled?: boolean;\n /** Selected card. Available for type: 'selection' */\n selected?: boolean;\n /** Card's type affects on available properties */\n type?: CardType;\n /** Available for type: 'container' and 'selection' */\n view?: CardView;\n /** Card's base color. Available for type: 'container' */\n theme?: CardTheme;\n /** Card's size affects on available properties*/\n size?: CardSize;\n}\n\nexport const Card = React.forwardRef<HTMLDivElement, CardProps>(function Card(props, ref) {\n const {\n type = 'container',\n theme,\n view,\n size = 'm',\n children,\n className,\n onClick,\n disabled,\n selected,\n ...restProps\n } = props;\n\n const isTypeAction = type === 'action';\n const isTypeSelection = type === 'selection';\n const isTypeContainer = type === 'container';\n\n /* Clickable card — only with type 'action' or 'selection' and not selected or disabled */\n const hasAction = isTypeAction || isTypeSelection;\n const isClickable = hasAction && Boolean(onClick) && !disabled;\n\n /* Theme only with type 'container' */\n const defaultTheme = isTypeContainer ? 'normal' : undefined;\n /* View only with type 'container' and 'selection' */\n const defaultView = isTypeContainer || isTypeSelection ? 'outlined' : undefined;\n\n const handleClick = isClickable ? onClick : undefined;\n const {onKeyDown} = useActionHandlers(onClick);\n\n return (\n <Box\n ref={ref}\n role={isClickable ? 'button' : undefined}\n className={b(\n {\n theme: theme || defaultTheme,\n view: view || defaultView,\n type,\n selected,\n size,\n disabled,\n clickable: isClickable,\n },\n className,\n )}\n onClick={handleClick as BoxProps['onClick']}\n onKeyDown={isClickable ? onKeyDown : undefined}\n tabIndex={isClickable ? 0 : undefined}\n {...restProps}\n >\n {children}\n </Box>\n );\n});\n","import React from 'react';\n\nimport withLazyLoading from '../../../hocs/withLazyLoading';\nimport Loader from '../../../components/Loader/Loader';\nimport {useSidePanel} from '../../../hooks/use-side-panel';\n\nexport const QueryWidgetLazy = withLazyLoading(\n React.lazy(() => import(/* webpackChunkName: \"query-widget\" */ './index')),\n <Loader visible centered size=\"l\" />,\n);\n\nexport function useQueryWidgetSidePanel() {\n return useSidePanel('QueryWidget', {\n renderContent({onClose}) {\n return <QueryWidgetLazy onClose={onClose} />;\n },\n });\n}\n","import {RumMeasureStartProps, useRumMeasureStart} from './RumUiContext';\nimport {useSelector} from 'react-redux';\nimport {getCluster} from '../store/selectors/global';\n\nexport function useAppRumMeasureStart<T extends Array<any>>(params: RumMeasureStartProps<T>) {\n const cluster = useSelector(getCluster);\n\n useRumMeasureStart({\n ...params,\n subPage: params.subPage || `ui.${cluster}`,\n });\n}\n","import {ErrorMessage, NetworkCode} from '../../constants/navigation/modals/path-editing-popup';\n\nimport filter_ from 'lodash/filter';\nimport find_ from 'lodash/find';\nimport some_ from 'lodash/some';\nimport values_ from 'lodash/values';\n\nexport function getOnlyFolders(suggestions) {\n return filter_(suggestions, (child) => child.type === 'map_node');\n}\n\nfunction getCorrectInnerError(innerErrors = []) {\n const correctErrorCodes = values_(NetworkCode);\n\n return find_(innerErrors, (error) => {\n return some_(correctErrorCodes, (code) => code === error.code);\n });\n}\n\nexport function prepareErrorMessage(error) {\n return (\n ErrorMessage[error.code] ||\n ErrorMessage[getCorrectInnerError(error.inner_errors)?.code] ||\n ErrorMessage['DEFAULT']\n );\n}\n","import {prepareErrorMessage} from '../../../../utils/navigation/path-editing-popup';\nimport {\n HIDE_ERROR,\n SET_PATH,\n SHOW_ERROR,\n} from '../../../../constants/navigation/modals/path-editing-popup';\n\nexport function showErrorInModal(error) {\n const message = prepareErrorMessage(error);\n\n return {\n type: SHOW_ERROR,\n data: {message, error},\n };\n}\n\nexport function setPath(newPath) {\n return {\n type: SET_PATH,\n data: {newPath},\n };\n}\n\nexport function hideError() {\n return {\n type: HIDE_ERROR,\n };\n}\n\nexport function openEditingPopup(objectPath, path, type, multipleMode = false, items = []) {\n return {\n type,\n data: {path, objectPath, items, multipleMode},\n };\n}\n\nexport function closeEditingPopup(type) {\n return {type};\n}\n","import React from 'react';\n\nimport {getDisplayName} from '../../../utils';\nimport {useHotkeysScope} from '../../../hooks/use-hotkeysjs-scope';\n\nexport default function withScope(scope: string) {\n return function wrap<P>(Component: React.ComponentType<P>) {\n type Props = P & {visible: true};\n const ResComponent: React.FC<Props> = function WithScope(props) {\n useHotkeysScope(scope, props.visible);\n return <Component {...props} />;\n };\n\n ResComponent.displayName = `WithScope(${getDisplayName(Component)})`;\n return ResComponent;\n };\n}\n","import React, {Component} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\nimport {compose} from 'redux';\n\nimport ErrorMessage from '../../../../components/ErrorMessage/ErrorMessage';\nimport PathEditor from '../../../../containers/PathEditor/PathEditor';\nimport Modal from '../../../../components/Modal/Modal';\nimport {YTErrorBlock} from '../../../../components/Error/Error';\n\nimport {hideError, setPath} from '../../../../store/actions/navigation/modals/path-editing-popup';\nimport {getOnlyFolders} from '../../../../utils/navigation/path-editing-popup';\nimport withScope from '../../../../hocs/components/Modal/withScope';\n\nimport './PathEditorModal.scss';\n\nconst b = block('path-editor-modal');\n\nclass PathEditorModal extends Component {\n static propTypes = {\n // from parent component\n title: PropTypes.string.isRequired,\n description: PropTypes.string.isRequired,\n placeholder: PropTypes.string.isRequired,\n modalTitle: PropTypes.string.isRequired,\n\n visible: PropTypes.bool.isRequired,\n showError: PropTypes.bool.isRequired,\n inProcess: PropTypes.bool.isRequired,\n errorMessage: PropTypes.string.isRequired,\n error: PropTypes.shape({\n code: PropTypes.number,\n message: PropTypes.string,\n }).isRequired,\n editingPath: PropTypes.string.isRequired,\n options: PropTypes.node,\n\n onConfirmButtonClick: PropTypes.func.isRequired,\n onCancelButtonClick: PropTypes.func.isRequired,\n\n onChange: PropTypes.func,\n onBlur: PropTypes.func,\n onApply: PropTypes.func,\n onFocus: PropTypes.func,\n\n // from connect\n setPath: PropTypes.func.isRequired,\n hideError: PropTypes.func.isRequired,\n };\n\n _handleBlur(newPath) {\n this.props.setPath(newPath);\n }\n _handleFocus(newPath) {\n this.props.setPath(newPath);\n }\n _handleApply(newPath) {\n this.props.setPath(newPath);\n }\n _handleChange(newPath) {\n this.props.setPath(newPath);\n this.props.hideError();\n }\n\n handleBlur = (path) => {\n const {onBlur} = this.props;\n\n if (typeof onBlur === 'function') {\n onBlur(path);\n } else {\n this._handleBlur(path);\n }\n };\n handleFocus = (event, {path}) => {\n const {onFocus} = this.props;\n\n if (typeof onFocus === 'function') {\n onFocus(path);\n } else {\n this._handleFocus(path);\n }\n };\n handleChange = (newPath) => {\n const {onChange} = this.props;\n\n if (typeof onChange === 'function') {\n onChange(newPath);\n } else {\n this._handleChange(newPath);\n }\n };\n handleApply = (newPath) => {\n const {onApply} = this.props;\n\n if (typeof onApply === 'function') {\n onApply(newPath);\n } else {\n this._handleApply(newPath);\n }\n };\n\n renderContent() {\n const {\n editingPath,\n inProcess,\n placeholder,\n title,\n description,\n showError,\n errorMessage,\n error,\n options,\n } = this.props;\n\n return (\n <div className={b()}>\n <strong>{title}</strong>\n <p className={b('text')}>{description}</p>\n\n <PathEditor\n placeholder={placeholder}\n customFilter={getOnlyFolders}\n onChange={this.handleChange}\n onApply={this.handleApply}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n defaultPath={editingPath}\n disabled={inProcess}\n showErrors={false}\n autoFocus\n hasClear\n />\n\n {options}\n\n {showError && (\n <div className={b('error-wrapper')}>\n <ErrorMessage message={errorMessage} />\n <YTErrorBlock error={error} />\n </div>\n )}\n </div>\n );\n }\n\n render() {\n const {visible, inProcess, showError, modalTitle} = this.props;\n\n const content = visible && this.renderContent();\n const isDisabled = () => inProcess || showError;\n\n return (\n <Modal\n onConfirm={this.props.onConfirmButtonClick}\n onCancel={this.props.onCancelButtonClick}\n isConfirmDisabled={isDisabled}\n confirmText=\"Confirm\"\n loading={inProcess}\n title={modalTitle}\n content={content}\n visible={visible}\n />\n );\n }\n}\n\nexport default compose(\n withScope('path-editor-modal'),\n connect(null, {setPath, hideError}),\n)(PathEditorModal);\n","import React from 'react';\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport Link from '../../../../components/Link/Link';\n\nimport {COPY_OBJECT} from '../../../../constants/navigation/modals/copy-object';\nimport {showErrorInModal} from '../../../../store/actions/navigation/modals/path-editing-popup';\nimport {HIDE_ERROR} from '../../../../constants/navigation/modals/path-editing-popup';\nimport {prepareDestinationPath, preparePath} from '../../../../utils/navigation';\nimport CancelHelper from '../../../../utils/cancel-helper';\n\nimport map_ from 'lodash/map';\n\nimport {executeBatchWithRetries} from '../../execute-batch';\nimport {YTApiId} from '../../../../rum/rum-wrap-api';\nimport {wrapBatchPromise} from '../../../../utils/utils';\nimport {Dispatch} from 'redux';\nimport {toaster} from '../../../../utils/toaster';\n\nconst requests = new CancelHelper();\n\ninterface CopyOptions {\n preserve_account?: boolean;\n recursive?: boolean;\n}\n\nfunction copyObjectIntoDirectory(from: string, to: string, options: CopyOptions) {\n const parts = from.split('/');\n const name = parts[parts.length - 1];\n return yt.v3.copy({\n parameters: {\n source_path: preparePath(from),\n destination_path: prepareDestinationPath(to, name),\n ...options,\n },\n cancellation: requests.saveCancelToken,\n });\n}\n\nfunction copyObjectWithRename(from: string, to: string, options: CopyOptions) {\n return yt.v3.copy({\n parameters: {\n source_path: preparePath(from),\n destination_path: to,\n ...options,\n },\n cancellation: requests.saveCancelToken,\n });\n}\n\nfunction copySingleObject(from: string, to: string, options: CopyOptions) {\n const lastChar = to.charAt(to.length - 1);\n\n if (lastChar === '/') {\n return copyObjectIntoDirectory(from, to, options);\n }\n\n return yt.v3\n .exists({parameters: {path: `${to}&`}, cancellation: requests.saveCancelToken})\n .then((exist: boolean) => {\n return exist\n ? copyObjectIntoDirectory(from, to, options)\n : copyObjectWithRename(from, to, options);\n });\n}\n\nfunction copyObjects(\n items: Array<{path: string; titleUnquoted: string}>,\n copyingPath: string,\n options: CopyOptions,\n) {\n if (items.length === 1) {\n const [{path}] = items;\n return copySingleObject(path, copyingPath, options);\n }\n\n return yt.v3.startTransaction({timeout: 120000}).then((id: string) => {\n const copyRequests = map_(items, (node) => {\n return {\n command: 'copy' as const,\n parameters: {\n transaction_id: id,\n source_path: preparePath(node.path),\n destination_path: prepareDestinationPath(copyingPath, node.titleUnquoted),\n ...options,\n },\n };\n });\n\n return wrapBatchPromise(\n executeBatchWithRetries(YTApiId.navigationCopy, copyRequests, {\n errorTitle: 'Failed to copy the object(s)',\n saveCancelSourceCb: requests.saveCancelToken,\n }),\n 'Failed to copy the object(s)',\n )\n .then(() => yt.v3.commitTransaction({transaction_id: id}))\n .catch((err) =>\n yt.v3.abortTransaction({transaction_id: id}).then(() => Promise.reject(err)),\n );\n });\n}\n\nexport function copyObject(\n objectPath: string,\n copyingPath: string,\n onSuccess: () => void,\n multipleMode: boolean,\n items: Array<{path: string; titleUnquoted: string}>,\n options: CopyOptions,\n) {\n return (dispatch: Dispatch) => {\n dispatch({type: COPY_OBJECT.REQUEST});\n\n return Promise.resolve()\n .then(() =>\n multipleMode\n ? copyObjects(items, copyingPath, options)\n : copySingleObject(objectPath, copyingPath, options),\n )\n .then(() => {\n dispatch({type: COPY_OBJECT.SUCCESS});\n\n if (typeof onSuccess === 'function') {\n onSuccess();\n }\n\n toaster.add({\n name: 'copy',\n autoHiding: 10000,\n theme: 'success',\n title: multipleMode\n ? 'Objects were successfully copied'\n : 'Object was successfully copied',\n content: <Link url={`navigation?path=${copyingPath}`}>{copyingPath}</Link>,\n });\n })\n .catch((error) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({\n type: COPY_OBJECT.CANCELLED,\n });\n } else {\n dispatch({type: COPY_OBJECT.FAILURE});\n\n const action = showErrorInModal(error);\n\n dispatch(action);\n }\n return Promise.reject(error);\n });\n };\n}\n\nexport function abortRequests() {\n return (dispatch: Dispatch) => {\n requests.removeAllRequests();\n\n dispatch({type: HIDE_ERROR});\n };\n}\n","import React, {Component} from 'react';\nimport {Checkbox, Flex} from '@gravity-ui/uikit';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport PathEditorModal from '../PathEditorModal';\n\nimport {CLOSE_COPY_OBJECT_POPUP} from '../../../../../constants/navigation/modals/copy-object';\nimport {\n abortRequests,\n copyObject,\n} from '../../../../../store/actions/navigation/modals/copy-object';\nimport {\n closeEditingPopup,\n hideError,\n} from '../../../../../store/actions/navigation/modals/path-editing-popup';\nimport {updateView} from '../../../../../store/actions/navigation';\n\nclass CopyObjectModal extends Component {\n static propTypes = {\n // from connect\n error: PropTypes.shape({\n code: PropTypes.number,\n message: PropTypes.string,\n }).isRequired,\n items: PropTypes.array.isRequired,\n errorMessage: PropTypes.string.isRequired,\n copyPath: PropTypes.string.isRequired,\n objectPath: PropTypes.string.isRequired,\n copying: PropTypes.bool.isRequired,\n showError: PropTypes.bool.isRequired,\n multipleMode: PropTypes.bool.isRequired,\n popupVisible: PropTypes.bool.isRequired,\n\n updateView: PropTypes.func.isRequired,\n copyObject: PropTypes.func.isRequired,\n abortRequests: PropTypes.func.isRequired,\n closeEditingPopup: PropTypes.func.isRequired,\n hideError: PropTypes.func.isRequired,\n };\n\n state = {preserve_account: false, recursive: false};\n\n handleConfirmButtonClick = () => {\n const {copyPath} = this.props;\n this.doCopy(copyPath);\n };\n\n handleCancelButtonClick = () => {\n const {closeEditingPopup, abortRequests} = this.props;\n\n this.resetOptions();\n closeEditingPopup(CLOSE_COPY_OBJECT_POPUP);\n abortRequests();\n };\n\n handleApply = (newPath) => {\n const {copying, showError} = this.props;\n const disabled = copying || showError;\n\n if (!disabled) {\n this.doCopy(newPath);\n }\n };\n\n doCopy(toPath) {\n const {copyObject, updateView, objectPath, multipleMode, items} = this.props;\n const {preserve_account, recursive} = this.state;\n\n copyObject(objectPath, toPath, updateView, multipleMode, items, {\n preserve_account,\n recursive,\n }).then(() => this.resetOptions());\n }\n\n render() {\n const {popupVisible, copying, copyPath, showError, errorMessage, error, multipleMode} =\n this.props;\n\n const modalTitle = 'Copy';\n const title = multipleMode\n ? 'Enter a destination path for copied objects.'\n : 'Enter a destination path for the copied object.';\n const description = multipleMode\n ? 'Objects will be copied with the specified path.'\n : 'The object will be copied with the specified path.';\n const placeholder = 'Enter a destination path for the copied object...';\n\n return (\n <PathEditorModal\n title={title}\n description={description}\n placeholder={placeholder}\n modalTitle={modalTitle}\n visible={popupVisible}\n inProcess={copying}\n editingPath={copyPath}\n showError={showError}\n error={error}\n options={this.renderOptions()}\n errorMessage={errorMessage}\n onConfirmButtonClick={this.handleConfirmButtonClick}\n onCancelButtonClick={this.handleCancelButtonClick}\n onApply={this.handleApply}\n />\n );\n }\n\n renderOptions() {\n return (\n <Flex direction=\"column\" gap={2}>\n <Checkbox onUpdate={this.onUpdatePreserveAccount}>Preserve account</Checkbox>\n <Checkbox onUpdate={this.onUpdateRecursiveCopy}>\n Create intermediate directories as required\n </Checkbox>\n </Flex>\n );\n }\n\n resetOptions() {\n this.onUpdatePreserveAccount(false);\n this.onUpdateRecursiveCopy(false);\n }\n\n onUpdateRecursiveCopy = (recursive) => {\n this.props.hideError();\n this.setState((state) => ({...state, recursive}));\n };\n\n onUpdatePreserveAccount = (preserve_account) => {\n this.props.hideError();\n this.setState((state) => ({...state, preserve_account}));\n };\n}\n\nconst mapStateToProps = ({navigation}) => {\n const {\n copyPath,\n objectPath,\n popupVisible,\n showError,\n copying,\n errorMessage,\n error,\n multipleMode,\n items,\n } = navigation.modals.copyObject;\n\n return {\n items,\n multipleMode,\n copyPath,\n copying,\n popupVisible,\n errorMessage,\n error,\n showError,\n objectPath,\n };\n};\n\nconst mapDispatchToProps = {\n updateView,\n copyObject,\n abortRequests,\n closeEditingPopup,\n hideError,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(CopyObjectModal);\n","import React from 'react';\nimport {ThunkAction} from 'redux-thunk';\n// @ts-expect-error\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport {Dispatch} from 'redux';\n\nimport Link from '../../../../components/Link/Link';\n\nimport {\n CREATE_DIRECTORY,\n CREATE_MESSAGE,\n} from '../../../../constants/navigation/modals/create-directory';\nimport {\n hideError,\n showErrorInModal,\n} from '../../../../store/actions/navigation/modals/path-editing-popup';\nimport {HIDE_ERROR} from '../../../../constants/navigation/modals/path-editing-popup';\nimport CancelHelper from '../../../../utils/cancel-helper';\nimport {RootState} from '../../../../store/reducers';\nimport {toaster} from '../../../../utils/toaster';\n\nconst requests = new CancelHelper();\n\nexport function createDirectory(\n {path, recursive}: {path: string; recursive?: boolean},\n onSuccess: () => void,\n) {\n return (dispatch: Dispatch) => {\n dispatch({type: CREATE_DIRECTORY.REQUEST});\n\n return yt.v3\n .create({\n parameters: {\n path: path,\n recursive,\n type: 'map_node',\n },\n cancellation: requests.saveCancelToken,\n })\n .then(() => {\n dispatch({type: CREATE_DIRECTORY.SUCCESS});\n\n if (typeof onSuccess === 'function') {\n onSuccess();\n }\n\n toaster.add({\n name: CREATE_MESSAGE,\n autoHiding: 10000,\n theme: 'success',\n title: CREATE_MESSAGE,\n content: <Link url={`navigation?path=${path}`}>{path}</Link>,\n });\n })\n .catch((error: any) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({\n type: CREATE_DIRECTORY.CANCELLED,\n });\n } else {\n dispatch({type: CREATE_DIRECTORY.FAILURE});\n\n const action = showErrorInModal(error);\n\n dispatch(action);\n }\n });\n };\n}\n\nexport function clearCreateDirectoryError(): ThunkAction<void, RootState, unknown, any> {\n return (dispatch: Dispatch) => {\n dispatch(hideError());\n };\n}\n\nexport function abortRequests() {\n return (dispatch: Dispatch) => {\n requests.removeAllRequests();\n\n dispatch({type: HIDE_ERROR});\n };\n}\n","import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport PathEditorModal from '../PathEditorModal';\n\nimport {CLOSE_CREATE_DIRECTORY_POPUP} from '../../../../../constants/navigation/modals/create-directory';\nimport {\n abortRequests,\n clearCreateDirectoryError,\n createDirectory,\n} from '../../../../../store/actions/navigation/modals/create-directory';\nimport {closeEditingPopup} from '../../../../../store/actions/navigation/modals/path-editing-popup';\nimport {updateView} from '../../../../../store/actions/navigation';\nimport {RootState} from '../../../../../store/reducers';\nimport {Checkbox} from '@gravity-ui/uikit';\n\ntype State = {\n recursive: boolean;\n};\n\ntype ReduxProps = ConnectedProps<typeof connector>;\n\nclass CreateDirectoryModal extends React.Component<ReduxProps> {\n state: State = {\n recursive: false,\n };\n\n render() {\n const {popupVisible, creating, creatingPath, showError, errorMessage, error} = this.props;\n\n const modalTitle = 'Create Directory';\n const title = 'Enter a name for the new directory.';\n const description = 'The new object will be created at the specified path.';\n const placeholder = 'Enter a new directory path...';\n\n return (\n <PathEditorModal\n title={title}\n description={description}\n placeholder={placeholder}\n modalTitle={modalTitle}\n editingPath={creatingPath}\n errorMessage={errorMessage}\n error={error}\n visible={popupVisible}\n showError={showError}\n inProcess={creating}\n onConfirmButtonClick={this.handleConfirmButtonClick}\n onCancelButtonClick={this.handleCancelButtonClick}\n onApply={this.handleApply}\n options={\n <Checkbox checked={this.state.recursive} onUpdate={this.onRecursiveUpdate}>\n Make parent directories as needed\n </Checkbox>\n }\n />\n );\n }\n\n onRecursiveUpdate = (recursive: boolean) => {\n this.setState({recursive});\n this.props.clearCreateDirectoryError?.();\n };\n\n handleConfirmButtonClick = () => {\n const {creatingPath, createDirectory, updateView} = this.props;\n\n createDirectory({path: creatingPath, recursive: this.state.recursive}, updateView);\n };\n\n handleCancelButtonClick = () => {\n this.props.closeEditingPopup(CLOSE_CREATE_DIRECTORY_POPUP);\n this.props.abortRequests();\n };\n\n handleApply = (newPath: string) => {\n const {creating, showError, createDirectory, updateView} = this.props;\n const disabled = creating || showError;\n\n if (!disabled) {\n createDirectory({path: newPath, recursive: this.state.recursive}, updateView);\n }\n };\n}\n\nconst mapStateToProps = (state: RootState) => {\n const {creatingPath, popupVisible, showError, creating, errorMessage, error} =\n state.navigation.modals.createDirectory;\n\n return {\n popupVisible,\n errorMessage,\n error,\n showError,\n creating,\n creatingPath: creatingPath as string,\n };\n};\n\nconst mapDispatchToProps = {\n updateView,\n abortRequests,\n createDirectory,\n closeEditingPopup,\n clearCreateDirectoryError,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(CreateDirectoryModal);\n","import React from 'react';\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport Link from '../../../../components/Link/Link';\n\nimport {MOVE_OBJECT} from '../../../../constants/navigation/modals/move-object';\nimport {showErrorInModal} from '../../../../store/actions/navigation/modals/path-editing-popup';\nimport {HIDE_ERROR} from '../../../../constants/navigation/modals/path-editing-popup';\nimport {prepareDestinationPath, preparePath} from '../../../../utils/navigation';\nimport CancelHelper from '../../../../utils/cancel-helper';\n\nimport map_ from 'lodash/map';\n\nimport {executeBatchWithRetries} from '../../execute-batch';\nimport {YTApiId} from '../../../../rum/rum-wrap-api';\nimport {rumLogError} from '../../../../rum/rum-counter';\nimport {wrapBatchPromise} from '../../../../utils/utils';\nimport {Dispatch} from 'redux';\nimport {toaster} from '../../../../utils/toaster';\n\nconst requests = new CancelHelper();\n\ninterface MoveOptions {\n preserve_account?: boolean;\n}\n\nfunction moveObjectIntoDirectory(from: string, to: string, {preserve_account}: MoveOptions) {\n const parts = from.split('/');\n const name = parts[parts.length - 1];\n return yt.v3.move({\n parameters: {\n source_path: preparePath(from),\n destination_path: prepareDestinationPath(to, name),\n preserve_account,\n },\n cancellation: requests.saveCancelToken,\n });\n}\n\nfunction moveObjectWithRename(from: string, to: string, {preserve_account}: MoveOptions) {\n return yt.v3.move({\n parameters: {\n source_path: preparePath(from),\n destination_path: to,\n preserve_account,\n },\n cancellation: requests.saveCancelToken,\n });\n}\n\nfunction moveSingleObject(from: string, to: string, options: MoveOptions): Promise<string> {\n const lastChar = to.charAt(to.length - 1);\n\n if (lastChar === '/') {\n return moveObjectIntoDirectory(from, to, options);\n }\n\n return yt.v3\n .exists({parameters: {path: `${to}&`}, cancellation: requests.saveCancelToken})\n .then((exist: boolean) => {\n return exist\n ? moveObjectIntoDirectory(from, to, options)\n : moveObjectWithRename(from, to, options);\n });\n}\n\nfunction moveObjects(\n items: Array<{path: string; titleUnquoted: string}>,\n to: string,\n {preserve_account}: MoveOptions,\n) {\n if (items.length === 1) {\n const [{path}] = items;\n return moveSingleObject(path, to, {preserve_account});\n }\n\n return yt.v3.startTransaction({}).then((id: string) => {\n const moveRequests = map_(items, (node) => {\n return {\n command: 'move' as const,\n parameters: {\n transaction_id: id,\n source_path: preparePath(node.path),\n destination_path: prepareDestinationPath(to, node.titleUnquoted),\n preserve_account,\n },\n };\n });\n\n return wrapBatchPromise(\n executeBatchWithRetries(YTApiId.navigationMove, moveRequests, {\n errorTitle: 'Failed to move the object(s)',\n saveCancelSourceCb: requests.saveCancelToken,\n }),\n 'Failed to move the object(s)',\n )\n .then(() => yt.v3.commitTransaction({transaction_id: id}))\n .catch((err) =>\n yt.v3.abortTransaction({transaction_id: id}).then(() => Promise.reject(err)),\n );\n });\n}\n\nfunction resolveEntityPath(entityId: string): Promise<string> {\n try {\n return yt.v3.get({\n path: `#${entityId}/@path`,\n output_format: {\n $value: 'json',\n $attributes: {\n encode_utf8: 'false',\n },\n },\n });\n } catch (e) {\n rumLogError(e as Error);\n }\n return Promise.resolve('');\n}\n\nexport function moveObject(\n objectPath: string,\n movedPath: string,\n onSuccess: (destFullPath: string) => void,\n multipleMode: boolean,\n items: Array<{path: string; titleUnquoted: string}>,\n {preserve_account}: MoveOptions,\n) {\n return (dispatch: Dispatch) => {\n dispatch({type: MOVE_OBJECT.REQUEST});\n\n return Promise.resolve()\n .then(() =>\n multipleMode\n ? moveObjects(items, movedPath, {preserve_account}).then(() => movedPath)\n : moveSingleObject(objectPath, movedPath, {preserve_account}).then((value) =>\n resolveEntityPath(JSON.parse(value)),\n ),\n )\n .then((result) => {\n dispatch({type: MOVE_OBJECT.SUCCESS});\n\n if (typeof onSuccess === 'function') {\n onSuccess(result);\n }\n\n toaster.add({\n name: 'move',\n autoHiding: 10000,\n theme: 'success',\n title: `Object${multipleMode ? 's' : ''} was successfully moved`,\n content: <Link url={`navigation?path=${result}`}>{result}</Link>,\n });\n return result;\n })\n .catch((error) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({\n type: MOVE_OBJECT.CANCELLED,\n });\n } else {\n dispatch({type: MOVE_OBJECT.FAILURE});\n\n const action = showErrorInModal(error);\n\n dispatch(action);\n }\n return Promise.reject(error);\n });\n };\n}\n\nexport function abortRequests() {\n return (dispatch: Dispatch) => {\n requests.removeAllRequests();\n\n dispatch({type: HIDE_ERROR});\n };\n}\n","import React, {Component} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport PathEditorModal from '../PathEditorModal';\n\nimport {CLOSE_MOVE_OBJECT_POPUP} from '../../../../../constants/navigation/modals/move-object';\nimport {\n abortRequests,\n moveObject,\n} from '../../../../../store/actions/navigation/modals/move-object';\nimport {closeEditingPopup} from '../../../../../store/actions/navigation/modals/path-editing-popup';\nimport {updatePath, updateView} from '../../../../../store/actions/navigation';\nimport {Checkbox} from '@gravity-ui/uikit';\nimport {getPath} from '../../../../../store/selectors/navigation';\n\nclass MoveObjectModal extends Component {\n static propTypes = {\n // from connect\n error: PropTypes.shape({\n code: PropTypes.number,\n message: PropTypes.string,\n }).isRequired,\n afterMoveStrategy: PropTypes.oneOf(['refresh', 'redirect']),\n items: PropTypes.array.isRequired,\n errorMessage: PropTypes.string.isRequired,\n objectPath: PropTypes.string.isRequired,\n popupVisible: PropTypes.bool.isRequired,\n multipleMode: PropTypes.bool.isRequired,\n movedPath: PropTypes.string.isRequired,\n showError: PropTypes.bool.isRequired,\n renaming: PropTypes.bool.isRequired,\n\n closeEditingPopup: PropTypes.func.isRequired,\n abortRequests: PropTypes.func.isRequired,\n moveObject: PropTypes.func.isRequired,\n updateView: PropTypes.func.isRequired,\n updatePath: PropTypes.func.isRequired,\n };\n\n static defaultProps = {\n afterMoveStrategy: 'refresh',\n };\n\n state = {preserve_account: false};\n\n handleConfirmButtonClick = () => {\n const {movedPath} = this.props;\n this.doMove(movedPath);\n };\n\n handleCancelButtonClick = () => {\n const {closeEditingPopup, abortRequests} = this.props;\n\n this.resetOptions();\n closeEditingPopup(CLOSE_MOVE_OBJECT_POPUP);\n abortRequests();\n };\n\n handleApply = (newPath) => {\n const {renaming, showError} = this.props;\n const disabled = renaming || showError;\n\n if (!disabled) {\n this.doMove(newPath);\n }\n };\n\n doMove(toPath) {\n const {\n moveObject,\n objectPath,\n afterMoveStrategy,\n updateView,\n updatePath,\n multipleMode,\n items,\n } = this.props;\n const {preserve_account} = this.state;\n\n const onSucess = (destinationPath) => {\n if (destinationPath && afterMoveStrategy === 'redirect') {\n updatePath(destinationPath);\n return;\n }\n updateView();\n };\n\n moveObject(objectPath, toPath, onSucess, multipleMode, items, {\n preserve_account,\n }).then(() => this.resetOptions());\n }\n\n render() {\n const {popupVisible, renaming, movedPath, showError, errorMessage, error, multipleMode} =\n this.props;\n\n const modalTitle = 'Move';\n const title = multipleMode\n ? 'Enter a new path for objects.'\n : 'Enter a new path for the object.';\n const description = multipleMode\n ? 'Objects will be moved with the specified path.'\n : 'The object will be moved with the specified path.';\n const placeholder = 'Enter a new object path...';\n\n return (\n <PathEditorModal\n title={title}\n description={description}\n placeholder={placeholder}\n modalTitle={modalTitle}\n editingPath={movedPath}\n errorMessage={errorMessage}\n error={error}\n visible={popupVisible}\n showError={showError}\n inProcess={renaming}\n options={this.renderOptions()}\n onConfirmButtonClick={this.handleConfirmButtonClick}\n onCancelButtonClick={this.handleCancelButtonClick}\n onApply={this.handleApply}\n />\n );\n }\n\n renderOptions() {\n return (\n <Checkbox\n title={'Preserve account'}\n checked={this.state.preserve_account}\n onUpdate={this.onUpdatePreserveAccount}\n >\n Preserve account\n </Checkbox>\n );\n }\n\n resetOptions() {\n this.onUpdatePreserveAccount(false);\n }\n\n onUpdatePreserveAccount = (preserve_account) => this.setState({preserve_account});\n}\n\nconst mapStateToProps = (state) => {\n const {navigation} = state;\n const path = getPath(state);\n const {\n error,\n errorMessage,\n popupVisible,\n showError,\n renaming,\n movedPath,\n objectPath,\n multipleMode,\n items,\n } = navigation.modals.moveObject;\n\n const entityPath = !multipleMode ? objectPath : items.length !== 1 ? undefined : items[0]?.path;\n\n return {\n error,\n errorMessage,\n popupVisible,\n showError,\n renaming,\n movedPath,\n objectPath,\n multipleMode,\n items,\n afterMoveStrategy: entityPath === path ? 'redirect' : 'refresh',\n };\n};\n\nconst mapDispatchToProps = {\n closeEditingPopup,\n abortRequests,\n moveObject,\n updateView,\n updatePath,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(MoveObjectModal);\n","import yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport {showErrorPopup} from '../../utils/utils';\nimport {INITIAL_STEP} from '../../constants/navigation/modals/restore-object';\n\nfunction getNextObjectName(initialPath, step = INITIAL_STEP) {\n return `${initialPath}(${step})`;\n}\n\nfunction checkPathExists(initialPath, path, step = INITIAL_STEP) {\n return yt.v3\n .exists({path})\n .then((isExists) => {\n if (isExists) {\n const newPath = getNextObjectName(initialPath, ++step);\n\n return checkPathExists(initialPath, newPath, step);\n }\n\n return path;\n })\n .catch(showErrorPopup);\n}\n\nexport function findCorrectObjectName(initialPath) {\n const path = getNextObjectName(initialPath);\n\n return checkPathExists(initialPath, path);\n}\n\nexport function inTrash(path) {\n return path.startsWith('//tmp/trash/') || path.startsWith('//trash/');\n}\n","import {\n OPEN_RESTORE_POPUP,\n RESTORE_OBJECT,\n} from '../../../../constants/navigation/modals/restore-object';\nimport {\n openEditingPopup,\n showErrorInModal,\n} from '../../../../store/actions/navigation/modals/path-editing-popup';\nimport {findCorrectObjectName} from '../../../../utils/navigation/restore-object';\nimport {NetworkCode} from '../../../../constants/navigation/modals/path-editing-popup';\nimport {preparePath} from '../../../../utils/navigation';\nimport Link from '../../../../components/Link/Link';\nimport {showErrorPopup, wrapBatchPromise} from '../../../../utils/utils';\nimport {updateView} from '../index';\nimport ypath from '../../../../common/thor/ypath';\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport React from 'react';\n\nimport map_ from 'lodash/map';\n\nimport {executeBatchWithRetries} from '../../execute-batch';\nimport {YTApiId} from '../../../../rum/rum-wrap-api';\nimport {toaster} from '../../../../utils/toaster';\n\nexport function restoreObjects(items) {\n return (dispatch) => {\n dispatch({type: RESTORE_OBJECT.REQUEST});\n return yt.v3\n .startTransaction({})\n .then((id) => {\n const requests = map_(items, (node) => {\n const restorePath = ypath.getValue(node, '/@_restore_path');\n return {\n command: 'move',\n parameters: {\n transaction_id: id,\n source_path: preparePath(node.path),\n destination_path: restorePath,\n },\n };\n });\n\n return wrapBatchPromise(\n executeBatchWithRetries(YTApiId.navigationRestorePath, requests, {\n errorTitle: 'Failed to get restore path',\n }),\n 'Failed to get restore path',\n )\n .then(() => yt.v3.commitTransaction({transaction_id: id}))\n .catch((err) =>\n yt.v3\n .abortTransaction({transaction_id: id})\n .then(() => Promise.reject(err)),\n );\n })\n .then(() => {\n dispatch({type: RESTORE_OBJECT.SUCCESS});\n dispatch(updateView());\n\n toaster.add({\n theme: 'success',\n name: 'restore objects',\n timeout: 10000,\n title: 'Objects restored',\n content: 'Objects have been successfully restored',\n });\n })\n .catch((err) => {\n dispatch({type: RESTORE_OBJECT.FAILURE});\n\n toaster.add({\n name: 'restore objects',\n theme: 'danger',\n autoHiding: false,\n title: 'Could not restore objects.',\n content: err?.message || 'Oops, something went wrong',\n actions: [{label: ' view', onClick: () => showErrorPopup(err)}],\n });\n });\n };\n}\n\nexport function restoreObject(objectPath, restorePath, onSuccess) {\n return (dispatch, getState) => {\n dispatch({type: RESTORE_OBJECT.REQUEST});\n\n return yt.v3\n .move({\n source_path: preparePath(objectPath),\n destination_path: restorePath,\n })\n .then(() => {\n dispatch({type: RESTORE_OBJECT.SUCCESS});\n\n if (typeof onSuccess === 'function') {\n onSuccess(objectPath, restorePath);\n }\n\n toaster.add({\n theme: 'success',\n name: 'restore object',\n timeout: 10000,\n title: 'Object restored',\n content: (\n <div>\n Object has been successfully{' '}\n <Link url={`navigation?path=${restorePath}`}>restored</Link>\n </div>\n ),\n });\n })\n .catch((error) => {\n dispatch({type: RESTORE_OBJECT.FAILURE});\n\n const isModalOpen = getState().navigation.modals.restoreObject.popupVisible;\n\n if (isModalOpen) {\n const action = showErrorInModal(error);\n\n dispatch(action);\n } else {\n switch (error.code) {\n case NetworkCode.EXIST: {\n findCorrectObjectName(restorePath)\n .then((correctRestorePath) => {\n const action = openEditingPopup(\n objectPath,\n correctRestorePath,\n OPEN_RESTORE_POPUP,\n );\n\n dispatch(action);\n })\n .catch(showErrorPopup);\n break;\n }\n case NetworkCode.INCORRECT_PATH: {\n const openAction = openEditingPopup(\n objectPath,\n restorePath,\n OPEN_RESTORE_POPUP,\n );\n const errorAction = showErrorInModal(error);\n\n dispatch(errorAction);\n dispatch(openAction);\n break;\n }\n default:\n showErrorPopup(error);\n break;\n }\n }\n });\n };\n}\n","import React, {Component} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport PathEditorModal from '../PathEditorModal';\n\nimport {CLOSE_RESTORE_POPUP} from '../../../../../constants/navigation/modals/restore-object';\nimport {closeEditingPopup} from '../../../../../store/actions/navigation/modals/path-editing-popup';\nimport {restoreObject} from '../../../../../store/actions/navigation/modals/restore-object';\nimport {updateView} from '../../../../../store/actions/navigation';\n\nclass RestoreObjectModal extends Component {\n static propTypes = {\n // from connect\n error: PropTypes.shape({\n code: PropTypes.number,\n message: PropTypes.string,\n }).isRequired,\n errorMessage: PropTypes.string.isRequired,\n restoredPath: PropTypes.string.isRequired,\n objectPath: PropTypes.string.isRequired,\n restoring: PropTypes.bool.isRequired,\n showError: PropTypes.bool.isRequired,\n popupVisible: PropTypes.bool.isRequired,\n\n updateView: PropTypes.func.isRequired,\n restoreObject: PropTypes.func.isRequired,\n closeEditingPopup: PropTypes.func.isRequired,\n };\n\n handleConfirmButtonClick = () => {\n const {restoreObject, objectPath, restoredPath, updateView} = this.props;\n\n restoreObject(objectPath, restoredPath, updateView);\n };\n\n handleCancelButtonClick = () => this.props.closeEditingPopup(CLOSE_RESTORE_POPUP);\n\n handleApply = (newPath) => {\n const {restoreObject, objectPath, showError, restoring, updateView} = this.props;\n const disabled = restoring || showError;\n\n if (!disabled) {\n restoreObject(objectPath, newPath, updateView);\n }\n };\n\n render() {\n const {popupVisible, restoring, restoredPath, showError, errorMessage, error} = this.props;\n\n const modalTitle = 'Restore';\n const title = 'Object with the same path is already exists.';\n const description =\n 'The object will be restored using a new path or you can change path to what you want.';\n const placeholder = 'Enter restored object path...';\n\n return (\n <PathEditorModal\n title={title}\n description={description}\n placeholder={placeholder}\n modalTitle={modalTitle}\n visible={popupVisible}\n inProcess={restoring}\n editingPath={restoredPath}\n showError={showError}\n errorMessage={errorMessage}\n error={error}\n onConfirmButtonClick={this.handleConfirmButtonClick}\n onCancelButtonClick={this.handleCancelButtonClick}\n onApply={this.handleApply}\n />\n );\n }\n}\n\nconst mapStateToProps = ({navigation}) => {\n const {restoredPath, objectPath, popupVisible, showError, restoring, errorMessage, error} =\n navigation.modals.restoreObject;\n\n return {\n restoredPath,\n restoring,\n popupVisible,\n errorMessage,\n error,\n showError,\n objectPath,\n };\n};\n\nconst mapDispatchToProps = {\n updateView,\n restoreObject,\n closeEditingPopup,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(RestoreObjectModal);\n","// @ts-expect-error\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport React from 'react';\nimport moment from 'moment';\n// @ts-expect-error\nimport ypath from '@ytsaurus/interface-helpers/lib/ypath';\n\nimport Link from '../../../../components/Link/Link';\n\nimport {checkIsTrash, getRawPath} from '../../../../store/selectors/navigation';\nimport {showErrorPopup, wrapBatchPromise} from '../../../../utils/utils';\nimport {navigateParent, updateView} from '../../../../store/actions/navigation';\nimport {decodeEscapedAbsPath, preparePath} from '../../../../utils/navigation';\nimport {\n CLOSE_DELETE_OBJECT_POPUP,\n DELETE_OBJECT,\n LOAD_REAL_PATH,\n OPEN_DELETE_OBJECT_POPUP,\n SUPPRESS_REDIRECT,\n TOGGLE_PERMANENTLY_DELETE,\n} from '../../../../constants/navigation/modals/delete-object';\n\nimport find_ from 'lodash/find';\nimport map_ from 'lodash/map';\n\nimport {executeBatchWithRetries} from '../../execute-batch';\nimport {YTApiId, ytApiV3Id} from '../../../../rum/rum-wrap-api';\nimport type {RootState} from '../../../../store/reducers';\nimport type {Dispatch} from 'redux';\nimport type {\n DeleteObjectItem,\n MulipleInfoItem,\n} from '../../../../store/reducers/navigation/modals/delete-object';\nimport {BatchSubRequest} from '../../../../../shared/yt-types';\nimport type {YTError} from '../../../../types';\nimport type {AppDispatch} from '../../../store.main';\nimport {toaster} from '../../../../utils/toaster';\n\nfunction prepareRestorePath(path: string, type: string) {\n const lastChar = path.charAt(path.length - 1);\n\n if (type === 'link' && lastChar === SUPPRESS_REDIRECT) {\n return path.slice(0, path.length - 1);\n }\n\n return path;\n}\n\nexport function openDeleteModal(\n item: DeleteObjectItem | Array<DeleteObjectItem>,\n multipleMode = false,\n) {\n return (dispatch: Dispatch, getState: () => RootState) => {\n const inTrash = checkIsTrash(getState());\n\n dispatch({\n type: OPEN_DELETE_OBJECT_POPUP,\n data: {item, inTrash, multipleMode},\n });\n };\n}\n\nexport function closeDeleteModal() {\n return {\n type: CLOSE_DELETE_OBJECT_POPUP,\n };\n}\n\nexport function togglePermanentlyDelete() {\n return {\n type: TOGGLE_PERMANENTLY_DELETE,\n };\n}\n\nconst getPath = (path: string, type: string) => {\n return ['link', 'access_control_object'].includes(type)\n ? Promise.resolve(path)\n : ytApiV3Id.get(YTApiId.navigationGetPath, {\n path: path + '/@path',\n output_format: {\n $value: 'json',\n $attributes: {\n encode_utf8: 'false',\n },\n },\n });\n};\n\nconst getInfo = (realPath: string) => {\n const parsedRealPath = ypath.YPath.create(realPath, 'absolute');\n const path = parsedRealPath.stringify();\n const name = parsedRealPath.getKey();\n\n return Promise.all([\n path,\n name,\n ytApiV3Id.get(YTApiId.navigationGetPathInfo, {\n path: path + '&/@',\n attributes: ['recursive_resource_usage', 'account'],\n }),\n ]);\n};\n\nexport function getRealPath({path, type}: {path: string; type: string}) {\n return (dispatch: Dispatch) => {\n dispatch({type: LOAD_REAL_PATH.REQUEST});\n\n return getPath(path, type)\n .then(getInfo)\n .then(([realPath, name, info]) => {\n const account = ypath.get(info, '/account');\n const resourceUsage = ypath.get(info, '/recursive_resource_usage');\n\n dispatch({\n type: LOAD_REAL_PATH.SUCCESS,\n data: {realPath, name, account, resourceUsage},\n });\n })\n .catch((error) => {\n console.error(error);\n toaster.add({\n theme: 'danger',\n name: 'real path',\n autoHiding: 10000,\n title: 'Could not open delete dialog.',\n content: error.message,\n actions: [\n {\n label: ' view',\n onClick: () => showErrorPopup(error),\n },\n ],\n });\n dispatch({\n type: LOAD_REAL_PATH.FAILURE,\n data: {error},\n });\n });\n };\n}\n\nexport function getRealPaths(items: {path: string}[]) {\n return (dispatch: Dispatch) => {\n dispatch({type: LOAD_REAL_PATH.REQUEST});\n\n const requests: BatchSubRequest[] = map_(items, ({path}) => {\n return {\n command: 'get',\n parameters: {\n path: `${path}&/@`,\n attributes: ['recursive_resource_usage', 'account', 'path', 'type'],\n output_format: {\n $value: 'json',\n $attributes: {\n encode_utf8: 'false',\n },\n },\n },\n };\n });\n\n return executeBatchWithRetries(YTApiId.navigationDelete, requests, {\n errorTitle: 'Failed to get real paths',\n })\n .then((responses) => {\n const error = find_(responses, (res) => res.error) as {error: YTError} | undefined;\n if (error) {\n return Promise.reject(error.error);\n }\n const multipleInfo = map_(responses, (res, index) => {\n const type = ypath.get(res.output, '/type');\n\n if (type === 'access_control_object') {\n return {type, path: items[index].path};\n }\n\n const path = ypath.get(res.output, '/path');\n const account = ypath.get(res.output, '/account');\n const resourceUsage = ypath.get(res.output, '/recursive_resource_usage');\n const name = path.split('/').reverse()[0];\n\n return {path, account, type, name, resourceUsage};\n });\n\n return dispatch({\n type: LOAD_REAL_PATH.SUCCESS,\n data: {multipleInfo},\n });\n })\n .catch((error) => {\n console.error(error);\n toaster.add({\n theme: 'danger',\n name: 'real path',\n autoHiding: 10000,\n title: 'Could not open delete dialog.',\n content: error.message,\n actions: [\n {\n label: ' view',\n onClick: () => showErrorPopup(error),\n },\n ],\n });\n return dispatch({\n type: LOAD_REAL_PATH.FAILURE,\n data: {error},\n });\n });\n };\n}\n\nconst createDestinationPath = (account: string, name: string, login: string) =>\n `//tmp/trash/by-account/${account}/${login}/${name}_${moment().unix()}`;\n\nfunction deleteCurrentObject(path: string, restorePath: string) {\n return (_dispatch: Dispatch, getState: () => RootState): Promise<void> => {\n const {global, navigation} = getState();\n const {permanently, name, account} = navigation.modals.deleteObject;\n const {login} = global;\n\n if (permanently) {\n return yt.v3.remove({path}).then(() => {\n toaster.add({\n theme: 'success',\n name: 'delete object',\n autoHiding: 10000,\n title: 'Object has been permanently deleted.',\n });\n });\n } else {\n const destinationPath = createDestinationPath(account, name, login);\n\n return yt.v3\n .set(\n {\n path: preparePath(path) + '/@_restore_path',\n input_format: {\n $value: 'json',\n $attributes: {\n encode_utf8: 'false',\n },\n },\n },\n restorePath,\n )\n .then(() =>\n yt.v3.move({\n recursive: true,\n source_path: path,\n preserve_account: true,\n destination_path: destinationPath,\n }),\n )\n .then(() => {\n toaster.add({\n theme: 'success',\n name: 'delete object',\n autoHiding: 10000,\n title: 'Object moved',\n content: (\n <div>\n Object has been moved to{' '}\n <Link url={`navigation?path=${destinationPath}`}>trash</Link>\n </div>\n ),\n });\n });\n }\n };\n}\n\nexport function deleteObject() {\n return (dispatch: AppDispatch, getState: () => RootState) => {\n const {navigation} = getState();\n const {realPath, item} = navigation.modals.deleteObject;\n const {transaction} = navigation.navigation;\n\n const path = preparePath(realPath);\n const restorePath = prepareRestorePath(realPath, (item as DeleteObjectItem).type);\n\n dispatch({type: DELETE_OBJECT.REQUEST});\n\n if (transaction) {\n dispatch({type: CLOSE_DELETE_OBJECT_POPUP});\n\n toaster.add({\n theme: 'danger',\n name: 'delete object',\n autoHiding: 10000,\n title: 'Could not delete the object within transaction.',\n });\n }\n\n dispatch(deleteCurrentObject(path, restorePath))\n .then(() => {\n dispatch({type: DELETE_OBJECT.SUCCESS});\n dispatch({type: CLOSE_DELETE_OBJECT_POPUP});\n\n const currentPath = getRawPath(getState());\n const realPathDecoded = decodeEscapedAbsPath(realPath);\n\n if (currentPath === realPathDecoded) {\n dispatch(navigateParent());\n } else {\n dispatch(updateView());\n }\n })\n .catch((error) => {\n console.error(error);\n dispatch({\n type: DELETE_OBJECT.FAILURE,\n data: {error},\n });\n toaster.add({\n theme: 'danger',\n name: 'delete object',\n autoHiding: 10000,\n title: 'Could not delete the node.',\n content: error.message,\n actions: [\n {\n label: ' view',\n onClick: () => showErrorPopup(error),\n },\n ],\n });\n });\n };\n}\n\nfunction permanentlyDeleteObjects(multipleInfo: MulipleInfoItem[], transaction: string) {\n const requests: BatchSubRequest[] = map_(multipleInfo, (node) => {\n const path = preparePath(node.path);\n\n return {\n command: 'remove',\n parameters: {path: path, transaction_id: transaction},\n };\n });\n\n return wrapBatchPromise(\n executeBatchWithRetries(YTApiId.navigationDelete, requests, {\n errorTitle: 'Failed to delete object(s) permanently',\n }),\n 'Failed to delete object(s) permanently',\n )\n .then(() => yt.v3.commitTransaction({transaction_id: transaction}))\n .then(() => {\n toaster.add({\n theme: 'success',\n name: 'delete objects',\n autoHiding: 10000,\n title: 'Objects have been permanently deleted.',\n });\n });\n}\n\nfunction moveObjectsIntoTrash(multipleInfo: MulipleInfoItem[], transaction: string, login: string) {\n const setAttributesRequests: BatchSubRequest[] = map_(multipleInfo, (node) => {\n const restorePath = prepareRestorePath(node.path, node.type);\n\n return {\n command: 'set',\n parameters: {\n transaction_id: transaction,\n path: preparePath(node.path) + '/@_restore_path',\n input_format: {\n $value: 'json',\n $attributes: {\n encode_utf8: 'false',\n },\n },\n },\n input: restorePath,\n };\n });\n\n const moveRequests: BatchSubRequest[] = map_(multipleInfo, (node) => {\n const path = preparePath(node.path);\n const destinationPath = createDestinationPath(node.account, node.name, login);\n\n return {\n command: 'move',\n parameters: {\n transaction_id: transaction,\n source_path: path,\n recursive: true,\n preserve_account: true,\n destination_path: destinationPath,\n },\n };\n });\n\n return wrapBatchPromise(\n executeBatchWithRetries(YTApiId.navigationMoveToTrashRestorePath, setAttributesRequests, {\n errorTitle: 'Failed to set restore path',\n }),\n 'Failed to set restore path',\n )\n .then(() =>\n wrapBatchPromise(\n executeBatchWithRetries(YTApiId.navigationMoveToTrash, moveRequests, {\n errorTitle: 'Failed to move the object(s) to trash',\n }),\n 'Failed to move the object(s) to trash',\n ),\n )\n .then(() => yt.v3.commitTransaction({transaction_id: transaction}))\n .then(() => {\n toaster.add({\n theme: 'success',\n name: 'delete objects',\n autoHiding: 10000,\n title: 'Objects moved',\n content: (\n <div>\n Objects have been moved to the trash, they might be found at\n <br />\n <Link url={'navigation?path=//tmp/trash/by-account/'}>\n {'//tmp/trash/by-account/...'}\n </Link>\n </div>\n ),\n });\n });\n}\n\nexport function deleteObjects() {\n return (dispatch: AppDispatch, getState: () => RootState) => {\n const {navigation, global} = getState();\n const {transaction} = navigation.navigation;\n const {permanently, multipleInfo} = navigation.modals.deleteObject;\n const {login} = global;\n\n if (transaction) {\n dispatch({type: CLOSE_DELETE_OBJECT_POPUP});\n\n toaster.add({\n theme: 'danger',\n name: 'delete object',\n autoHiding: 10000,\n title: 'Could not delete the object within transaction.',\n });\n }\n\n dispatch({type: DELETE_OBJECT.REQUEST});\n\n return yt.v3\n .startTransaction({})\n .then((id: string) => {\n if (permanently) {\n return permanentlyDeleteObjects(multipleInfo, id);\n }\n\n return moveObjectsIntoTrash(multipleInfo, id, login);\n })\n .then(() => {\n dispatch({type: DELETE_OBJECT.SUCCESS});\n dispatch({type: CLOSE_DELETE_OBJECT_POPUP});\n dispatch(updateView());\n })\n .catch((error: YTError) => {\n console.error(error);\n dispatch({\n type: DELETE_OBJECT.FAILURE,\n data: {error},\n });\n toaster.add({\n theme: 'danger',\n name: 'delete objects',\n autoHiding: 10000,\n title: 'Could not delete the nodes.',\n content: error.message,\n actions: [\n {\n label: ' view',\n onClick: () => showErrorPopup(error),\n },\n ],\n });\n });\n };\n}\n","import React, {Component} from 'react';\nimport {ResolveThunks, connect} from 'react-redux';\n// @ts-expect-error\nimport ypath from '@ytsaurus/interface-helpers/lib/ypath';\nimport {compose} from 'redux';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {MapNodeIcon} from '../../../../../components/MapNodeIcon/MapNodeIcon';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport MetaTable from '../../../../../components/MetaTable/MetaTable';\nimport HelpLink from '../../../../../components/HelpLink/HelpLink';\nimport {Checkbox, Loader} from '@gravity-ui/uikit';\nimport {YTErrorBlock} from '../../../../../components/Error/Error';\nimport Modal from '../../../../../components/Modal/Modal';\nimport Label from '../../../../../components/Label/Label';\n\nimport {\n closeDeleteModal,\n deleteObject,\n deleteObjects,\n getRealPath,\n getRealPaths,\n togglePermanentlyDelete,\n} from '../../../../../store/actions/navigation/modals/delete-object';\nimport withScope from '../../../../../hocs/components/Modal/withScope';\nimport {checkIsTrash} from '../../../../../store/selectors/navigation';\nimport hammer from '../../../../../common/hammer';\n\nimport './DeleteObjectModal.scss';\nimport UIFactory from '../../../../../UIFactory';\nimport type {RootState} from '../../../../../store/reducers';\nimport {DeleteObjectItem} from '../../../../../store/reducers/navigation/modals/delete-object';\n\nconst block = cn('navigation-delete-object-modal');\n\ntype OwnProps = {};\n\ntype StateProps = ReturnType<typeof mapStateToProps>;\n\ntype DispatchProps = ResolveThunks<typeof mapDispatchToProps>;\n\ntype DeleteObjectModalProps = OwnProps & StateProps & DispatchProps;\n\nexport class DeleteObjectModal extends Component<DeleteObjectModalProps> {\n componentDidUpdate(prevProps: DeleteObjectModalProps) {\n const {visible, item, getRealPath, getRealPaths, multipleMode} = this.props;\n\n if (!prevProps.visible && visible) {\n if (multipleMode) {\n getRealPaths(item as DeleteObjectItem[]);\n } else {\n getRealPath(item as DeleteObjectItem);\n }\n }\n }\n\n get content() {\n const {loadingRealPath, errorRealPath, error, multipleMode} = this.props;\n\n if (loadingRealPath) {\n return this.renderLoader();\n } else if (errorRealPath || error) {\n return this.renderError();\n }\n\n return multipleMode ? this.renderMultipleModeContent() : this.renderContent();\n }\n\n handleDeleteClick = () => {\n const {multipleMode, deleteObject, deleteObjects} = this.props;\n\n if (multipleMode) {\n deleteObjects();\n } else {\n deleteObject();\n }\n };\n\n renderLoader() {\n return (\n <div className={block({loading: true})}>\n <Loader />\n </div>\n );\n }\n\n renderError() {\n const {error, errorData, errorDataRealPath} = this.props;\n const errorContent = error ? errorData : errorDataRealPath;\n\n return (\n <div className={block({error: true})}>\n <YTErrorBlock error={errorContent} />\n </div>\n );\n }\n\n renderPermanentlyCheckbox() {\n const {permanently, togglePermanentlyDelete, inTrash} = this.props;\n\n return (\n <p className={block('delete', {permanently})}>\n <Checkbox\n size=\"l\"\n disabled={inTrash}\n checked={permanently}\n content=\"Delete permanently\"\n onChange={togglePermanentlyDelete}\n />\n\n <Label theme=\"danger\" text=\"This action CANNOT be undone\" />\n </p>\n );\n }\n\n renderMultipleModeContent() {\n const {item, multipleInfo} = this.props;\n\n return (\n <ErrorBoundary>\n <div className={block({multiple: true})}>\n <div className={block('table')}>\n <div className={block('table-header')}>\n <div className={block('preview-icon')} />\n <div className={block('preview-name')}>Name</div>\n <div className={block('preview-disk-space')}>Disk space</div>\n <div className={block('preview-node-count')}>Node count</div>\n <div className={block('preview-node-count')}>Row count</div>\n </div>\n\n {map_(multipleInfo, ({path, resourceUsage}, index) => {\n const {type, titleUnquoted, rows, unmergedRows} = (\n item as DeleteObjectItem[]\n )[index];\n const diskSpace = ypath.get(resourceUsage, '/disk_space');\n const nodeCount = ypath.get(resourceUsage, '/node_count');\n\n return (\n <React.Fragment key={path}>\n <MapNodeIcon node={(item as DeleteObjectItem[])[index]} />\n <span title={path} className=\"elements-ellipsis\">\n {titleUnquoted}\n </span>\n <span>{hammer.format['Bytes'](diskSpace)}</span>\n <span>\n {type === 'table'\n ? hammer.format.NO_VALUE\n : hammer.format['Number'](nodeCount)}\n </span>\n <span>\n {unmergedRows\n ? `≈ ${hammer.format['Number'](unmergedRows)}`\n : hammer.format['Number'](rows)}\n </span>\n </React.Fragment>\n );\n })}\n </div>\n {this.renderPermanentlyCheckbox()}\n </div>\n </ErrorBoundary>\n );\n }\n\n renderContent() {\n const {item, resourceUsage} = this.props;\n const {type, rows, unmergedRows} = item as DeleteObjectItem;\n const diskSpace = ypath.get(resourceUsage, '/disk_space');\n const nodeCount = ypath.get(resourceUsage, '/node_count');\n\n const buildItems = () => {\n const items = [\n {\n key: 'Disk space',\n value: hammer.format['Bytes'](diskSpace),\n },\n ];\n\n switch (type) {\n case 'table':\n items.push({\n key: 'Rows',\n value: unmergedRows\n ? `≈ ${hammer.format['Number'](unmergedRows)}`\n : hammer.format['Number'](rows),\n });\n\n return items;\n\n case 'access_control_object':\n return [];\n\n default:\n items.push({\n key: 'Node count',\n value: hammer.format['Number'](nodeCount),\n });\n\n return items;\n }\n };\n\n return (\n <ErrorBoundary>\n <div className={block()}>\n <div className={block()}>\n <p className={block('object')}>\n <MapNodeIcon node={item as DeleteObjectItem} />\n <span className={block('path')}>{(item as DeleteObjectItem).path}</span>\n </p>\n\n <MetaTable className={block('meta')} items={buildItems()} />\n\n {this.renderPermanentlyCheckbox()}\n </div>\n </div>\n </ErrorBoundary>\n );\n }\n\n render() {\n const {visible, closeDeleteModal, permanently, loading} = this.props;\n const theme = permanently ? 'outlined-danger' : 'action';\n const helpLinkUrl = UIFactory.docsUrls['common:regular_system_processes'];\n const helpLink =\n helpLinkUrl !== '' ? <HelpLink text=\"Documentation\" url={helpLinkUrl} /> : null;\n const title = permanently ? 'Delete' : 'Move to trash';\n const confirmText = permanently ? 'Delete' : 'Move to trash';\n\n return (\n <Modal\n title={title}\n visible={visible}\n loading={loading}\n confirmTheme={theme}\n confirmText={confirmText}\n content={this.content}\n footerContent={helpLink}\n contentClassName={block('content')}\n onCancel={closeDeleteModal}\n onConfirm={this.handleDeleteClick}\n />\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n const {\n error,\n errorData,\n loading,\n visible,\n permanently,\n item,\n loadingRealPath,\n errorRealPath,\n errorDataRealPath,\n realPath,\n resourceUsage,\n multipleInfo,\n multipleMode,\n } = state.navigation.modals.deleteObject;\n const inTrash = checkIsTrash(state);\n\n return {\n error,\n errorData,\n visible,\n permanently,\n item,\n loading,\n loadingRealPath,\n errorRealPath,\n errorDataRealPath,\n realPath,\n multipleInfo,\n resourceUsage,\n multipleMode,\n inTrash,\n };\n};\n\nconst mapDispatchToProps = {\n getRealPath,\n deleteObject,\n deleteObjects,\n getRealPaths,\n closeDeleteModal,\n togglePermanentlyDelete,\n};\n\nexport default compose(\n connect(mapStateToProps, mapDispatchToProps),\n withScope('delete-object-modal'),\n)(DeleteObjectModal);\n","import React from 'react';\nimport {connect} from 'react-redux';\n\nimport {AccessContentAcl, NavigationAcl} from '../../../../containers/ACL';\nimport {getAclLoadState} from '../../../../store/selectors/acl';\nimport {getAttributes, getRawPath} from '../../../../store/selectors/navigation';\nimport {IdmObjectType} from '../../../../constants/acl';\nimport {useRumMeasureStop} from '../../../../rum/RumUiContext';\nimport {RumMeasureTypes} from '../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../utils/utils';\nimport {useAppRumMeasureStart} from '../../../../rum/rum-app-measures';\n\nconst AclTabParams = {\n [IdmObjectType.PATH]: {\n rumType: RumMeasureTypes.NAVIGATION_TAB_ACL,\n Component: NavigationAcl,\n },\n [IdmObjectType.ACCESS_CONTROL_OBJECT]: {\n rumType: RumMeasureTypes.NAVIGATION_TAB_ACL_ACCESS,\n Component: AccessContentAcl,\n },\n};\n\nconst makeComponentWithRum = (idmKind) => {\n const {rumType, Component} = AclTabParams[idmKind];\n const AclTabComponent = (props) => {\n useAppRumMeasureStart({\n type: rumType,\n startDeps: [props.loadState],\n allowStart: ([loadState]) => !isFinalLoadingStatus(loadState),\n });\n\n useRumMeasureStop({\n type: rumType,\n stopDeps: [props.loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <Component {...props} />;\n };\n return AclTabComponent;\n};\n\nconst makeMapStateToProps = (idmKind) => {\n return (state, props) => {\n const attributes = getAttributes(state);\n let {path} = attributes;\n if (!path) path = getRawPath(state);\n\n const isPrincipalACLtab =\n props.mode === 'content' && props.type === 'access_control_object';\n\n return {\n loadState: getAclLoadState(state, idmKind),\n path: path,\n idmKind: isPrincipalACLtab ? IdmObjectType.ACCESS_CONTROL_OBJECT : IdmObjectType.PATH,\n };\n };\n};\n\nfunction createACLTabComponent(idmKind) {\n const mapStateToProps = makeMapStateToProps(idmKind);\n const Component = makeComponentWithRum(idmKind);\n return connect(mapStateToProps)(Component);\n}\n\nexport default createACLTabComponent(IdmObjectType.PATH);\nexport const AccessAclTab = createACLTabComponent(IdmObjectType.ACCESS_CONTROL_OBJECT);\n","import {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {RumWrapper} from '../../../../../rum/rum-wrap-api';\n\nexport function makeTableRumId({cluster, isDynamic}: {cluster: string; isDynamic: boolean}) {\n const measureId = isDynamic\n ? RumMeasureTypes.NAVIGATION_CONTENT_TABLE_DYNAMIC\n : RumMeasureTypes.NAVIGATION_CONTENT_TABLE_STATIC;\n return new RumWrapper(cluster, measureId);\n}\n","import axios from 'axios';\n\nimport map_ from 'lodash/map';\n\nimport {ThunkAction} from 'redux-thunk';\n\n// @ts-ignore\nimport unipika from '../../../../../common/thor/unipika';\n\nimport {\n SET_TABLE_COLUMNS_PRESET,\n SET_TABLE_COLUMNS_PRESET_HASH,\n} from '../../../../../constants/navigation/content/table';\nimport {showErrorPopup, wrapApiPromiseByToaster} from '../../../../../utils/utils';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport {\n getColumnsPreset,\n getColumnsPresetHash,\n getIsDynamic,\n} from '../../../../../store/selectors/navigation/content/table-ts';\nimport {RootState} from '../../../../../store/reducers';\nimport {YTApiId} from '../../../../../rum/rum-wrap-api';\nimport {makeTableRumId} from './table-rum-id';\nimport {toaster} from '../../../../../utils/toaster';\n\nconst getColumnPresetEndpoint = (cluster: string) => `/api/table-column-preset/${cluster}`;\n\ntype ColumnPresetThunkAction = ThunkAction<any, RootState, any, any>;\n\nconst {utf8} = unipika.utils;\n\nexport function loadColumnPresetIfDefined(): ColumnPresetThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const hashToLoad = getColumnsPresetHash(state);\n if (!hashToLoad) {\n return Promise.resolve();\n }\n\n const {hash} = getColumnsPreset(state);\n if (hashToLoad === hash) {\n return Promise.resolve();\n }\n\n const cluster = getCluster(state);\n const isDynamic = getIsDynamic(state);\n const id = makeTableRumId({cluster, isDynamic});\n\n return id\n .fetch(\n YTApiId.ui_loadColumnPreset,\n axios.request<{columns: Array<string>; hash: string}>({\n method: 'GET',\n url: `${getColumnPresetEndpoint(cluster)}/${hashToLoad}`,\n headers: {'content-type': 'application/json'},\n }),\n )\n .then(({data: {columns, hash}}) => {\n const presetHash = getColumnsPresetHash(getState());\n if (presetHash !== hash) {\n return;\n }\n\n dispatch(setTablePreset(columns, hash));\n })\n .catch((error) => {\n dispatch(setTablePresetError(error));\n\n toaster.add({\n theme: 'danger',\n name: 'loadColumnPreset',\n title: 'Failed to get preset of columns',\n content: error.message,\n actions: [\n {\n label: ' Details',\n onClick() {\n showErrorPopup(error?.response?.data || error);\n },\n },\n ],\n });\n\n return Promise.reject(error);\n });\n };\n}\n\nexport function saveColumnPreset(columnsEncoded: Array<string>, cluster: string): Promise<string> {\n const columns = map_(columnsEncoded, utf8.decode);\n return wrapApiPromiseByToaster(\n axios.request<string>({\n method: 'POST',\n url: getColumnPresetEndpoint(cluster),\n headers: {'content-type': 'application/json'},\n data: columns,\n }),\n {\n skipSuccessToast: true,\n toasterName: 'saveColumnPreset',\n errorContent: 'Failed to save preset of columns',\n },\n ).then((res) => {\n const hash = res.data;\n return hash;\n });\n}\n\nexport function setTablePresetHash(hash?: string) {\n return {\n type: SET_TABLE_COLUMNS_PRESET_HASH,\n data: hash,\n };\n}\n\nfunction setTablePreset(columns: Array<string>, hash: string) {\n const columnsEncoded = map_(columns, utf8.encode);\n return {\n type: SET_TABLE_COLUMNS_PRESET,\n data: {error: undefined, columns: columnsEncoded, hash},\n };\n}\n\nfunction setTablePresetError(error: unknown) {\n return {\n type: SET_TABLE_COLUMNS_PRESET,\n data: {error, columns: undefined, hash: undefined},\n };\n}\n","import filter_ from 'lodash/filter';\nimport has_ from 'lodash/has';\nimport isEmpty_ from 'lodash/isEmpty';\nimport keyBy_ from 'lodash/keyBy';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport {getMetrics} from '../../../../../common/utils/metrics';\nimport ypath from '../../../../../common/thor/ypath';\n\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {\n CHANGE_CELL_SIZE,\n CHANGE_PAGE_SIZE,\n CLOSE_COLUMN_SELECTOR_MODAL,\n GET_TABLE_DATA,\n LOAD_TYPE,\n OPEN_COLUMN_SELECTOR_MODAL,\n SET_COLUMNS,\n SET_COLUMNS_ORDER,\n SET_OFFSET,\n TOGGLE_FULL_SCREEN,\n} from '../../../../../constants/navigation/content/table';\n\nimport {updateView} from '../../../../../store/actions/navigation';\n\nimport CancelHelper from '../../../../../utils/cancel-helper';\nimport {openInNewTab, showErrorPopup} from '../../../../../utils/utils';\nimport {prepareRequest} from '../../../../../utils/navigation';\nimport Query from '../../../../../utils/navigation/content/table/query';\nimport Columns from '../../../../../utils/navigation/content/table/columns';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport {\n getColumnsValues,\n getRequestOutputFormat,\n} from '../../../../../utils/navigation/content/table/table';\n\nimport {getAttributes, getPath, getTransaction} from '../../../../../store/selectors/navigation';\nimport {\n getDefaultTableColumnLimit,\n isTableSimilarityEnabled,\n} from '../../../../../store/selectors/settings';\nimport {\n getAllColumns,\n getNextOffset,\n getRequestedPageSize,\n getVisibleColumns,\n isYqlTypesEnabled,\n} from '../../../../../store/selectors/navigation/content/table';\nimport {\n getCellSize,\n getColumns,\n getColumnsPreset,\n getDeniedKeyColumns,\n getIsDynamic,\n getIsStrict,\n getKeyColumns,\n getMoveOffsetBackward,\n getOmittedColumns,\n getRows,\n getTableColumnNamesFromSchema,\n} from '../../../../../store/selectors/navigation/content/table-ts';\nimport {mergeScreen} from '../../../../../store/actions/global';\nimport {waitForFontFamilies} from '../../../../../store/actions/global/fonts';\nimport {injectColumnsFromSchema} from '../../../../../utils/navigation/content/table/table-ts';\nimport {YTApiId, ytApiV3, ytApiV3Id} from '../../../../../rum/rum-wrap-api';\nimport unipika from '../../../../../common/thor/unipika';\nimport {toaster} from '../../../../../utils/toaster';\n\nimport {loadColumnPresetIfDefined, saveColumnPreset, setTablePresetHash} from './columns-preset';\nimport {makeTableRumId} from './table-rum-id';\nimport {readStaticTable} from './readStaticTable';\nimport {readDynamicTable} from './readDynamicTable';\n\nconst requests = new CancelHelper();\n\nfunction loadDynamicTable(requestOutputFormat, state, type, useZeroRangeForPreload) {\n const {login} = state.global;\n\n const path = getPath(state);\n const stringLimit = getCellSize(state);\n const keyColumns = getKeyColumns(state);\n const columns = getColumns(state);\n const attributes = getAttributes(state);\n const useYqlTypes = isYqlTypesEnabled(state);\n const moveBackward = getMoveOffsetBackward(state);\n const defaultTableColumnLimit = getDefaultTableColumnLimit(state);\n const {offsetValue: offset, moveBackward: descending} = getNextOffset(state);\n const transaction = getTransaction(state);\n const orderBySupported = true;\n const offsetColumns = keyColumns;\n\n let limit = getRequestedPageSize(state);\n if (isEmpty_(offset) && descending) {\n // If we move to the end of the table, we reduce the limit for correctly determining the end of the table\n limit--;\n }\n\n const decodedColumns = decodeNameField(columns);\n const outputFormat =\n requestOutputFormat ||\n getRequestOutputFormat(\n decodedColumns,\n stringLimit,\n login,\n defaultTableColumnLimit,\n useYqlTypes,\n );\n\n const cluster = getCluster(state);\n const isDynamic = getIsDynamic(state);\n const isSorted = ypath.getValue(attributes, '/sorted');\n const id = makeTableRumId({cluster, isDynamic});\n\n const isUnmounted = ypath.getValue(attributes, '/tablet_state') === 'unmounted';\n\n if (isUnmounted && !isSorted) {\n // in case of unmounted dynamic table treat it as a static table\n const apiId = type === LOAD_TYPE.PRELOAD ? YTApiId.tableReadPreload : YTApiId.tableRead;\n // example: offset = \"(1, 2)\": string , we need [1, 2]: number[]\n const preparedOffset = offset\n .replace(/[()]/g, '')\n .split(',')\n .map((part) => Number(part.trim()));\n\n return id.fetch(\n apiId,\n readStaticTable({\n parameters: {\n path: {\n $value: path,\n $attributes: {\n ranges: [\n {\n lower_limit: {\n tablet_index: preparedOffset[0] || 0,\n row_index: preparedOffset[1] || 0,\n },\n upper_limit: {\n tablet_index: preparedOffset[0] || 0,\n row_index: limit + (preparedOffset[1] || 0),\n },\n },\n ],\n },\n },\n table_reader: {\n workload_descriptor: {category: 'user_interactive'},\n },\n transaction,\n output_format: outputFormat,\n },\n cancellation: requests.saveCancelToken,\n reverseRows: moveBackward,\n }),\n );\n }\n\n if (type === LOAD_TYPE.PRELOAD) {\n // Get all columns from schema for preload data. Scheme is always strict\n const allColumns = Columns.getSchemaColumns(attributes);\n\n return id\n .fetch(\n YTApiId.dynTableCheckPerm,\n ytApiV3Id.checkPermission(YTApiId.dynTableCheckPerm, {\n parameters: {\n columns: allColumns,\n permission: 'read',\n user: login,\n path,\n },\n cancellation: requests.saveCancelToken,\n }),\n )\n .then((permissions) => {\n const keyColumnsNames = keyBy_(keyColumns);\n const {availableColumns, omittedColumns, deniedKeyColumns} = reduce_(\n permissions.columns,\n (res, permission, index) => {\n if (permission.action === 'allow') {\n res.availableColumns.push(allColumns[index]);\n } else {\n res.omittedColumns.push(allColumns[index]);\n if (has_(keyColumnsNames, allColumns[index])) {\n res.deniedKeyColumns.push({[allColumns[index]]: permission.action});\n }\n }\n\n return res;\n },\n {availableColumns: [], omittedColumns: [], deniedKeyColumns: []},\n );\n\n if (deniedKeyColumns.length !== 0) {\n return Promise.reject({deniedKeyColumns});\n }\n\n const columns = map_(availableColumns, unipika.decode);\n const parameters = {\n query: Query.prepareQuery({\n columns,\n path,\n keyColumns,\n offsetColumns,\n offset: useZeroRangeForPreload ? 0 : offset,\n limit: useZeroRangeForPreload ? 0 : limit,\n descending,\n orderBySupported,\n }),\n output_format: requestOutputFormat,\n dump_error_into_response: true,\n };\n\n return id\n .fetch(\n YTApiId.dynTableSelectRowsPreload,\n readDynamicTable({\n parameters,\n cancellation: requests.saveCancelToken,\n }),\n )\n .then((data) => {\n return {\n ...data,\n omittedColumns,\n };\n });\n });\n } else {\n // Get only visible columns for updating data. Get omittedColumns from store.\n const columns = getVisibleColumns(state);\n const omittedColumns = getOmittedColumns(state);\n const deniedKeyColumns = getDeniedKeyColumns(state);\n const decodedColumns = decodeNameField(columns);\n const outputFormat = getRequestOutputFormat(\n decodedColumns,\n stringLimit,\n login,\n defaultTableColumnLimit,\n useYqlTypes,\n );\n\n if (deniedKeyColumns.length !== 0) {\n const err = new Error('There is no \"read\" permission for some key columns:');\n err.attributes = {key_columns: deniedKeyColumns};\n return Promise.reject(err);\n }\n\n const parameters = {\n query: Query.prepareQuery({\n columns: decodedColumns,\n path,\n keyColumns,\n offsetColumns,\n offset,\n limit,\n descending,\n orderBySupported,\n }),\n output_format: outputFormat,\n dump_error_into_response: true,\n };\n\n return id\n .fetch(\n YTApiId.dynTableSelectRows,\n readDynamicTable({\n parameters,\n cancellation: requests.saveCancelToken,\n }),\n )\n .then((data) => {\n return {\n ...data,\n omittedColumns,\n };\n });\n }\n}\n\nasync function loadStaticTable(requestOutputFormat, state, type, useZeroRangeForPreload) {\n const path = getPath(state);\n const stringLimit = getCellSize(state);\n const transaction = getTransaction(state);\n const moveBackward = getMoveOffsetBackward(state);\n const requestedPageSize = getRequestedPageSize(state);\n const defaultTableColumnLimit = getDefaultTableColumnLimit(state);\n\n const {login} = state.global;\n // Get all columns always and update them then. We can get new columns. The scheme is not always strict\n const columns = getColumns(state);\n const offsetValue = getNextOffset(state).offsetValue;\n const useYqlTypes = isYqlTypesEnabled(state);\n const decodedColumns = decodeNameField(columns);\n const outputFormat =\n requestOutputFormat ||\n getRequestOutputFormat(\n decodedColumns,\n stringLimit,\n login,\n defaultTableColumnLimit,\n useYqlTypes,\n );\n\n const parameters = prepareRequest({\n path,\n table_reader: {\n workload_descriptor: {category: 'user_interactive'},\n },\n transaction,\n output_format: outputFormat,\n relativePath: useZeroRangeForPreload\n ? '[#0:#0]'\n : '[#' + offsetValue + ':#' + (offsetValue + requestedPageSize) + ']',\n });\n\n const cluster = getCluster(state);\n const isDynamic = getIsDynamic(state);\n const id = makeTableRumId({cluster, isDynamic});\n const apiId = type === LOAD_TYPE.PRELOAD ? YTApiId.tableReadPreload : YTApiId.tableRead;\n\n return await id.fetch(\n apiId,\n readStaticTable({\n parameters,\n cancellation: requests.saveCancelToken,\n reverseRows: moveBackward,\n }),\n );\n}\n\nfunction loadTableRows(type, state, requestOutputFormat) {\n const isDynamic = getIsDynamic(state);\n const isStrict = getIsStrict(state);\n const useZeroRangeForPreload = isStrict && type === LOAD_TYPE.PRELOAD;\n\n const loadPromise = isDynamic\n ? loadDynamicTable(requestOutputFormat, state, type, useZeroRangeForPreload)\n : loadStaticTable(requestOutputFormat, state, type, useZeroRangeForPreload);\n\n return loadPromise.then((result) => {\n const schemaColumns = getTableColumnNamesFromSchema(state);\n const {columns, omittedColumns, ...rest} = result;\n return {\n columns: injectColumnsFromSchema(columns, omittedColumns, schemaColumns),\n omittedColumns,\n ...rest,\n };\n });\n}\n\n// Make a table request with page size row range and empty column range to get the list of all columns in table\n// and restore personalized columns list.\nfunction restoreColumns(state) {\n const tableSimilarityEnabled = isTableSimilarityEnabled(state);\n const attributes = getAttributes(state);\n const stringLimit = getCellSize(state);\n\n const requestOutputFormat = {\n $value: 'web_json',\n $attributes: {\n field_weight_limit: stringLimit,\n max_selected_column_count: 50,\n max_all_column_names_count: 3000,\n column_names: [],\n },\n };\n\n return loadTableRows(LOAD_TYPE.PRELOAD, state, requestOutputFormat)\n .then(({columns, omittedColumns}) => {\n const storedColumns = tableSimilarityEnabled\n ? Columns.restoreSimilarColumns(attributes, columns)\n : Columns.restoreExactColumns(attributes);\n\n return {columns, omittedColumns, storedColumns};\n })\n .catch((data) => {\n const {deniedKeyColumns} = data;\n return {\n columns: [],\n omittedColumns: [],\n storedColumns: null,\n ...(deniedKeyColumns ? {deniedKeyColumns} : {}),\n };\n });\n}\n\nexport function updateTableData() {\n return (dispatch, getState) => {\n const state = getState();\n const attributes = getAttributes(state);\n const {offsetValue, moveBackward} = getNextOffset(state);\n const requestedPageSize = getRequestedPageSize(state);\n const isDynamic = getIsDynamic(state);\n\n dispatch({type: GET_TABLE_DATA.REQUEST});\n requests.removeAllRequests();\n\n return loadTableRows(LOAD_TYPE.UPDATE, state)\n .then(({columns, omittedColumns, rows, yqlTypes}) => {\n // Scheme is always strict in dynamic tables. No new columns are expected.\n if (!isDynamic) {\n // Get current columns for save visible status\n const storedColumns = getColumns(state);\n const defaultTableColumnLimit = getDefaultTableColumnLimit(state);\n const preparedColumns = Columns.prepareColumns(\n attributes,\n rows,\n columns,\n storedColumns,\n defaultTableColumnLimit,\n );\n const preparedOmittedColumns = Columns.prepareOmittedColumns(\n attributes,\n omittedColumns,\n );\n dispatch(setColumns(preparedColumns, preparedOmittedColumns, []));\n }\n\n if (moveBackward) {\n let newOffsetValue;\n if (!isEmpty_(offsetValue) && rows.length < requestedPageSize) {\n // If there are not enough rows on the new page on the left:\n // - add rows from the current page\n // - reset offset value\n newOffsetValue = '';\n const previousRows = getRows(state);\n const addRowCount = Math.min(\n requestedPageSize - rows.length + 1,\n previousRows.length,\n );\n rows = rows.concat(previousRows.slice(1, addRowCount));\n } else {\n const keyColumns = getKeyColumns(state);\n newOffsetValue = Query.prepareKey(getColumnsValues(rows[0], keyColumns));\n }\n\n if (newOffsetValue !== undefined) {\n dispatch({\n type: SET_OFFSET,\n data: {offsetValue: newOffsetValue},\n });\n }\n }\n\n dispatch({\n type: GET_TABLE_DATA.SUCCESS,\n data: {rows, yqlTypes},\n });\n })\n .catch((error) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({type: GET_TABLE_DATA.CANCELLED});\n } else {\n dispatch({\n type: GET_TABLE_DATA.FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nexport function getTableData() {\n return (dispatch, getState) => {\n const state = getState();\n\n const attributes = getAttributes(state);\n\n return dispatch(loadColumnPresetIfDefined()).then(() => {\n const updateColumns = ({\n rows,\n columns,\n omittedColumns,\n storedColumns,\n deniedKeyColumns = [],\n }) => {\n const state = getState();\n const defaultTableColumnLimit = getDefaultTableColumnLimit(state);\n const preparedColumns = Columns.prepareColumns(\n attributes,\n rows,\n columns,\n storedColumns,\n defaultTableColumnLimit,\n );\n const preparedOmittedColumns = Columns.prepareOmittedColumns(\n attributes,\n omittedColumns,\n );\n\n // if we have columns preset -> update checked according to preset\n const preset = getColumnsPreset(state);\n if (preset?.columns) {\n preparedColumns.forEach((column) => {\n column.checked = preset?.columns?.includes(column.name);\n });\n }\n dispatch(setColumns(preparedColumns, preparedOmittedColumns, deniedKeyColumns));\n };\n\n dispatch({type: GET_TABLE_DATA.REQUEST});\n requests.removeAllRequests();\n\n // 1. call the restoreColumns function before loading table data\n // 2. Call loadTableRows function with specific requestOutputFormat and empty column_names to get all columns and return their and stored columns:\n // a) tableSimilarityEnabled === false. Finding stored columns by id and schema. If stored columns exists -- update their and return. Else return null\n // b) tableSimilarityEnabled === true. Finding stored columns by array of all columns. If stored columns exists -- update their and return. Else return null\n // 3. If at the previous step was returned an array then building columns based on stored columns and save their in the store.\n // 4. load table rows for columns in the store\n\n return dispatch(waitForFontFamilies(restoreColumns(getState())))\n .then(({columns, omittedColumns, storedColumns, ...rest}) => {\n if (columns) {\n updateColumns({\n rows: [],\n columns,\n omittedColumns,\n storedColumns,\n ...rest,\n });\n }\n return dispatch(updateTableData());\n })\n .catch((error) => {\n updateColumns({\n rows: [],\n columns: Columns.getSchemaColumns(attributes),\n omittedColumns: [],\n });\n\n if (error.code === yt.codes.CANCELLED) {\n dispatch({type: GET_TABLE_DATA.CANCELLED});\n } else {\n dispatch({\n type: GET_TABLE_DATA.FAILURE,\n data: {error},\n });\n }\n });\n });\n };\n}\n\nexport function setColumns(columns, omittedColumns, deniedKeyColumns) {\n return {\n type: SET_COLUMNS,\n data: {columns, omittedColumns, deniedKeyColumns},\n };\n}\n\nexport function setColumnsOrder(columnsOrder) {\n return {\n type: SET_COLUMNS_ORDER,\n data: {columnsOrder},\n };\n}\n\nexport function openColumnSelectorModal() {\n return {\n type: OPEN_COLUMN_SELECTOR_MODAL,\n };\n}\n\nexport function closeColumnSelectorModal() {\n return {\n type: CLOSE_COLUMN_SELECTOR_MODAL,\n };\n}\n\nexport function updateColumns(allColumns) {\n return (dispatch, getState) => {\n const state = getState();\n const attributes = getAttributes(state);\n const omittedColumns = getOmittedColumns(state);\n const deniedKeyColumns = getDeniedKeyColumns(state);\n const columns = filter_(allColumns, (column) => !column.disabled); // remove omitted columns\n const columnsOrder = Columns.getColumnsOrder(columns);\n Columns.storeAllColumns(attributes, columns);\n\n dispatch(setColumns(columns, omittedColumns, deniedKeyColumns));\n dispatch(setColumnsOrder(columnsOrder));\n dispatch(closeColumnSelectorModal());\n\n dispatch(setTablePresetHash(undefined));\n dispatch(updateTableData());\n };\n}\n\nexport function rememberPresetColumnsAsDefault() {\n return (dispatch, getState) => {\n const allColumns = getAllColumns(getState());\n dispatch(updateColumns(allColumns));\n };\n}\n\nexport function openTableWithPresetOfColumns() {\n return (dispatch, getState) => {\n const visibleColumns = getVisibleColumns(getState());\n const cluster = getCluster(getState());\n saveColumnPreset(map_(visibleColumns, 'name'), cluster).then((hash) => {\n const {href} = window.location;\n const url = `${href}&columns=${hash}`;\n openInNewTab(url);\n\n getMetrics().countEvent('share_columns', hash);\n });\n };\n}\n\nexport function changePageSize(pageSize) {\n return (dispatch) => {\n dispatch({\n type: CHANGE_PAGE_SIZE,\n data: {pageSize},\n });\n dispatch(updateTableData());\n };\n}\n\nexport function changeCellSize(cellSize) {\n return (dispatch) => {\n dispatch({\n type: CHANGE_CELL_SIZE,\n data: {cellSize},\n });\n dispatch(updateTableData());\n };\n}\n\nexport function toggleFullScreen() {\n return (dispatch) => {\n dispatch(mergeScreen());\n dispatch({type: TOGGLE_FULL_SCREEN});\n };\n}\n\n// if we press esc button then the browser will automatically change state to non full screen\n// and we need as change value in the store\nexport function handleScreenChanged(isFullScreen) {\n return (dispatch, getState) => {\n const {isFullScreen: storedIsFullScreen} = getState().navigation.content.table;\n\n if (isFullScreen !== storedIsFullScreen) {\n dispatch(toggleFullScreen());\n }\n };\n}\n\nexport function mountUnmountTable(action) {\n return (dispatch, getState) => {\n const path = getPath(getState());\n\n getMetrics().countEvent('navigation_dynamic_table_action', action);\n\n return ytApiV3[`${action}Table`]({path})\n .then(() => {\n toaster.add({\n name: `${action} table`,\n theme: 'success',\n title: `Success ${action}ing table`,\n });\n return dispatch(updateView());\n })\n .catch((err) => {\n console.error(err);\n toaster.add({\n name: `${action} table`,\n theme: 'danger',\n title: `Could not ${action} table.`,\n content: err?.message || 'Oops, something went wrong',\n actions: [{label: ' view', onClick: () => showErrorPopup(err)}],\n });\n });\n };\n}\n\nexport function abortAndReset() {\n return (dispatch) => {\n requests.removeAllRequests();\n dispatch({type: GET_TABLE_DATA.CANCELLED});\n };\n}\n\nexport function decodeNameField(columns) {\n return map_(columns, (item) => {\n return {\n ...item,\n name: unipika.decode(item.name),\n };\n });\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport {Progress} from '@gravity-ui/uikit';\nimport {calcProgressProps} from '../../utils/utils';\n\nimport './FileUploadProgress.scss';\n\nconst block = cn('file-upload-progress');\n\ninterface FileUploadProgressProps {\n event: {\n total?: number;\n loaded: number;\n };\n}\n\nexport const FileUploadProgress: React.FC<FileUploadProgressProps> = ({event}) => {\n const {total = 0, loaded = 0} = event;\n const progress = calcProgressProps(loaded, total, 'Bytes');\n\n return (\n <div className={block('progress')}>\n <div className={block('progress-wrapper')}>\n <Progress\n text={progress.text}\n stack={[\n {\n value: progress.value ?? 0,\n theme: 'info',\n },\n ]}\n />\n </div>\n </div>\n );\n};\n\nexport default FileUploadProgress;\n","import React from 'react';\nimport {compose} from 'redux';\nimport axios, {AxiosProgressEvent} from 'axios';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport format from '../../../../../common/hammer/format';\n\nimport withVisible, {WithVisibleProps} from '../../../../../hocs/withVisible';\nimport Button from '../../../../../components/Button/Button';\nimport Icon from '../../../../../components/Icon/Icon';\nimport Modal from '../../../../../components/Modal/Modal';\n\nimport {getPath} from '../../../../../store/selectors/navigation';\nimport {ConnectedProps, connect} from 'react-redux';\nimport {YTErrorBlock} from '../../../../../components/Block/Block';\nimport {DialogField, YTDFDialog} from '../../../../../components/Dialog';\n\nimport hammer from '../../../../../common/hammer';\n\nimport './UploadManager.scss';\nimport {updateView} from '../../../../../store/actions/navigation';\nimport {getSchema} from '../../../../../store/selectors/navigation/tabs/schema';\nimport {getCluster, getCurrentClusterConfig} from '../../../../../store/selectors/global';\nimport {RootState} from '../../../../../store/reducers';\nimport {getXsrfCookieName} from '../../../../../utils';\nimport {docsUrl, getConfigUploadTable} from '../../../../../config';\nimport HelpLink from '../../../../../components/HelpLink/HelpLink';\nimport CancelHelper from '../../../../../utils/cancel-helper';\nimport UIFactory from '../../../../../UIFactory';\nimport FileDropZone from '../../../../../components/FileDropZone/FileDropZone';\nimport FileUploadProgress from '../../../../../components/FileUploadProgress/FileUploadProgress';\n\nconst block = cn('upload-manager');\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & WithVisibleProps;\n\ninterface State {\n progress: ProgressState;\n error?: any;\n\n file: File | null;\n fileType: FileType;\n append: boolean;\n\n // xlsx\n firstRowAsNames: boolean;\n secondRowAsTypes: boolean;\n\n showOverwriteConfirmation: boolean;\n}\n\nconst WRITE_ATTRIBUTES = {\n json: {\n format: 'text',\n enable_type_conversion: true,\n },\n yson: {\n enable_type_conversion: true,\n },\n dsv: {\n enable_string_to_all_conversion: true,\n },\n schemaful_dsv: {\n enable_string_to_all_conversion: true,\n },\n xlsx: {},\n};\n\ntype FileType = 'json' | 'yson' | 'dsv' | 'schemaful_dsv' | 'xlsx';\n\nconst getFileTypes = (payload: {cluster: string}) => {\n const fileTypes: Array<{value: FileType; text: FileType}> = [\n {value: 'json', text: 'json'},\n {value: 'yson', text: 'yson'},\n {value: 'dsv', text: 'dsv'},\n {value: 'schemaful_dsv', text: 'schemaful_dsv'},\n ];\n\n const uploadConfig = getConfigUploadTable(payload);\n\n if (uploadConfig.uploadTableExcelBaseUrl) {\n fileTypes.push({value: 'xlsx', text: 'xlsx'});\n }\n\n return fileTypes;\n};\n\ntype ProgressState =\n | {inProgress: false}\n | {inProgress: true; event: {total?: number; loaded: number}};\n\nclass UploadManager extends React.Component<Props, State> {\n state: State = {\n file: null,\n fileType: 'json',\n progress: {inProgress: false},\n append: true,\n firstRowAsNames: false,\n secondRowAsTypes: false,\n\n showOverwriteConfirmation: false,\n };\n\n private cancelHelper = new CancelHelper();\n\n renderContent() {\n const {file, error} = this.state;\n return (\n <React.Fragment>\n <FileDropZone isDropable={!this.inProgress()} isEmpty={!file} onFile={this.onFile}>\n {file ? this.renderFileContent(file) : null}\n </FileDropZone>\n {error && <YTErrorBlock error={error} message={'The file upload has failed'} />}\n </React.Fragment>\n );\n }\n\n renderFileContent(file: File) {\n return (\n <React.Fragment>\n {this.renderSettings(file)}\n {this.renderProgress()}\n </React.Fragment>\n );\n }\n\n renderSettings(file: File) {\n const {cluster} = this.props;\n const inProgress = this.inProgress();\n\n const {fields, initials} = this.typeSpecificFields();\n return (\n <YTDFDialog\n onAdd={() => Promise.resolve()}\n onClose={() => {}}\n visible={true}\n modal={false}\n initialValues={{\n name: file.name,\n size: `${hammer.format['Bytes'](file.size)} / ${hammer.format['Number'](\n file.size,\n )} B`,\n append: this.state.append,\n fileType: this.state.fileType,\n ...initials,\n }}\n fields={[\n {\n name: 'name',\n caption: 'Name',\n type: 'plain',\n },\n {\n name: 'size',\n caption: 'Size',\n type: 'plain',\n },\n {\n name: 'append',\n caption: 'Append',\n type: 'tumbler',\n tooltip: 'Append content of the file to the end of the destination',\n extras: {\n disabled: inProgress,\n },\n onChange: (append: boolean) => {\n this.setState({append});\n },\n },\n {\n name: 'fileType',\n type: 'yt-select-single',\n caption: 'Type',\n extras: {\n items: getFileTypes({cluster}),\n hideFilter: true,\n disabled: inProgress,\n width: 'max',\n },\n onChange: (fileType: string | Array<string> | undefined) => {\n this.setState({\n fileType: (fileType as FileType) || 'json',\n });\n },\n },\n ...fields,\n ]}\n />\n );\n }\n\n typeSpecificFields() {\n const {fileType} = this.state;\n const fields: Array<DialogField> = [];\n const initials: Partial<{firstRowAsNames: boolean}> = {};\n switch (fileType) {\n case 'xlsx': {\n fields.push(\n {\n name: 'firstRowAsNames',\n type: 'tumbler',\n caption: 'Column names',\n tooltip: 'Interpret first row as column names',\n onChange: (firstRowAsNames: boolean) => {\n this.setState({firstRowAsNames});\n },\n },\n {\n name: 'secondRowAsTypes',\n type: 'tumbler',\n caption: 'Types',\n tooltip: 'There is row with types right before data-rows',\n onChange: (secondRowAsTypes: boolean) => {\n this.setState({secondRowAsTypes});\n },\n },\n );\n Object.assign(initials, {\n firstRowAsNames: this.state.firstRowAsNames,\n secondRowAsTypes: this.state.secondRowAsTypes,\n });\n break;\n }\n }\n return {fields, initials};\n }\n\n renderFooterContent() {\n const {file, fileType} = this.state;\n const inProgress = this.inProgress();\n const url =\n fileType === 'xlsx'\n ? UIFactory.docsUrls['storage:excel']\n : UIFactory.docsUrls['storage:formats'];\n const helpLink = docsUrl(<HelpLink url={url} />);\n if (!file) {\n return helpLink;\n }\n return inProgress ? (\n <React.Fragment>\n <Button onClick={this.cancelUpload}>Cancel upload</Button>\n <span className={block('help-link')}>{helpLink}</span>\n </React.Fragment>\n ) : (\n <React.Fragment>\n <Button onClick={this.onReset}>Reset</Button>\n <span className={block('help-link')}>{helpLink}</span>\n </React.Fragment>\n );\n }\n\n onReset = () => {\n this.onFile(null);\n this.setState({error: null});\n };\n\n renderProgress() {\n const {progress} = this.state;\n const event = progress.inProgress ? progress.event : {total: 1, loaded: 0};\n\n if (progress.inProgress) {\n return <FileUploadProgress event={event} />;\n }\n\n return null;\n }\n\n cancelUpload = () => {\n this.cancelHelper.removeAllRequests();\n };\n\n inProgress() {\n const {progress} = this.state;\n return progress.inProgress;\n }\n\n onFile = (files: FileList | null) => {\n const {cluster} = this.props;\n const file = files && files[0];\n this.setState({file});\n if (file) {\n const lastDotIndex = file.name.lastIndexOf('.');\n const extStr = file.name.substr(lastDotIndex + 1);\n const item = getFileTypes({cluster}).find(({value}) => value === extStr);\n if (item) {\n this.setState({fileType: item.value});\n }\n\n const fileError = this.checkFile(file);\n if (fileError) {\n this.setState({error: {message: fileError}});\n }\n }\n };\n\n renderConfirm = () => {\n const fileError = this.checkFile(this.state.file);\n return (\n <Button\n className={block('confirm')}\n size=\"m\"\n view=\"action\"\n title=\"Upload\"\n disabled={Boolean(fileError) || this.inProgress()}\n onClick={this.onConfirm}\n >\n Upload\n </Button>\n );\n };\n\n checkFile(file: State['file']): string | null {\n if (!file) {\n return 'file is not selected';\n }\n\n const {cluster} = this.props;\n\n const uploadConfig = getConfigUploadTable({cluster});\n\n if (file.size > uploadConfig.uploadTableMaxSize) {\n return `File size must not be greater than ${format.Bytes(\n uploadConfig.uploadTableMaxSize,\n )}`;\n }\n\n return null;\n }\n\n renderClose = (className: string) => {\n return (\n <Button\n className={block('close', className)}\n size=\"m\"\n title=\"Close\"\n disabled={this.inProgress()}\n onClick={this.handleClose}\n >\n Close\n </Button>\n );\n };\n\n getWriteAttributes() {\n const {schema} = this.props;\n const {fileType} = this.state;\n const withColumns: any = {};\n if (fileType === 'schemaful_dsv') {\n withColumns.columns = map_(schema, ({name}) => name);\n }\n return {\n ...withColumns,\n ...WRITE_ATTRIBUTES[fileType],\n };\n }\n\n onStartUpload(size: number) {\n this.setState({\n progress: {inProgress: true, event: {loaded: 0, total: size}},\n error: undefined,\n });\n }\n\n onUploadProgress = (event: AxiosProgressEvent) => {\n this.setState({progress: {inProgress: true, event}});\n };\n\n onStopUpload(error?: State['error']) {\n this.setState({progress: {inProgress: false}});\n if (!error) {\n this.props.updateView();\n this.props.handleClose();\n } else if (!axios.isCancel(error) && (!error || error.code !== 'cancelled')) {\n error = error.response?.data || error;\n this.setState({error});\n }\n }\n\n onConfirm = () => {\n const {append} = this.state;\n if (append) {\n return this.onConfirmImpl();\n }\n\n this.setOverwriteConfirmationVisible(true);\n };\n\n onConfirmImpl = () => {\n const {file, fileType, append} = this.state;\n\n if (fileType === 'xlsx') {\n this.onXlsxUpload();\n return;\n }\n if (!file) {\n return;\n }\n\n const {path, proxy, externalProxy, cluster} = this.props;\n\n const uploadConfig = getConfigUploadTable({cluster});\n\n this.onStartUpload(file.size);\n\n let transaction_id = '';\n yt.v3\n .startTransaction({\n timeout: 120000,\n })\n .then((txId: string) => {\n transaction_id = txId;\n\n return yt.v3\n .writeTable({\n setup: {\n onUploadProgress: this.onUploadProgress,\n proxy: uploadConfig.uploadTableUseLocalmode\n ? `${location.host}/localmode/api/yt/${cluster}`\n : (externalProxy ?? proxy),\n },\n parameters: {\n transaction_id,\n path: {$value: path, $attributes: {append}},\n input_format: {\n $value: fileType,\n $attributes: this.getWriteAttributes(),\n },\n },\n cancellation: this.cancelHelper.removeAllAndSave,\n data: file,\n })\n .then(() => {\n return yt.v3.commitTransaction({transaction_id}).then(() => {\n this.onStopUpload();\n });\n });\n })\n .catch((e: any) => {\n this.onStopUpload(e);\n if (transaction_id) {\n yt.v3.abortTransaction({transaction_id});\n }\n });\n };\n\n onXlsxUpload() {\n const {file, fileType} = this.state;\n if (!file || fileType !== 'xlsx') {\n return Promise.resolve();\n }\n\n const {path, cluster} = this.props;\n this.onStartUpload(file.size);\n\n const uploadConfig = getConfigUploadTable({cluster});\n\n const readyUrl = `${uploadConfig.uploadTableExcelBaseUrl}/${cluster}/api/ready`;\n const uploadUrl = `${uploadConfig.uploadTableExcelBaseUrl}/${cluster}/api/upload`;\n\n this.cancelHelper.removeAllRequests();\n return axios.get(readyUrl).then(\n () => {\n const {append, firstRowAsNames, secondRowAsTypes} = this.state;\n const start_row = [firstRowAsNames, secondRowAsTypes].filter(Boolean).length + 1;\n const params = new URLSearchParams({\n path,\n append: String(append),\n header: String(firstRowAsNames),\n start_row: String(start_row),\n types: String(secondRowAsTypes),\n });\n const formData = new FormData();\n formData.append('uploadfile', file);\n return axios\n .post(`${uploadUrl}?${params}`, formData, {\n onUploadProgress: this.onUploadProgress,\n withCredentials: true,\n withXSRFToken: true,\n xsrfCookieName: getXsrfCookieName(cluster),\n xsrfHeaderName: 'X-Csrf-Token',\n cancelToken: this.cancelHelper.generateNextToken(),\n })\n .then(\n () => {\n this.onStopUpload();\n },\n (e) => {\n this.onStopUpload(e);\n },\n );\n },\n (e) => {\n this.onStopUpload({\n message: `${readyUrl} responded with error`,\n inner_errors: [e],\n });\n },\n );\n }\n\n handleClose = () => {\n if (this.inProgress()) {\n return;\n }\n this.props.handleClose();\n };\n\n setOverwriteConfirmationVisible(showOverwriteConfirmation: boolean) {\n this.setState({showOverwriteConfirmation});\n }\n\n renderOverwriteConfirmationDialog() {\n const {showOverwriteConfirmation} = this.state;\n return !showOverwriteConfirmation ? null : (\n <Modal\n size={'s'}\n title={'Overwrite confirmation'}\n visible={true}\n confirmText={'Overwrite'}\n content={\n <div>\n Are you sure you want to overwrite all existing data rows with the ones from\n the uploading file?\n </div>\n }\n onConfirm={() => {\n this.setOverwriteConfirmationVisible(false);\n this.onConfirmImpl();\n }}\n onCancel={() => {\n this.setOverwriteConfirmationVisible(false);\n }}\n />\n );\n }\n\n render() {\n const {visible, handleShow} = this.props;\n return (\n <React.Fragment>\n <Button size=\"m\" title=\"Upload\" onClick={handleShow}>\n <Icon awesome=\"upload\" />\n &nbsp; Upload\n </Button>\n\n {visible && (\n <Modal\n size=\"m\"\n title=\"Upload\"\n visible={visible}\n onCancel={this.handleClose}\n confirmText=\"Upload\"\n content={this.renderContent()}\n footerContent={this.renderFooterContent()}\n renderCustomConfirm={this.renderConfirm}\n renderCustomCancel={this.renderClose}\n contentClassName={block()}\n />\n )}\n\n {this.renderOverwriteConfirmationDialog()}\n </React.Fragment>\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n const path: string = getPath(state);\n const schema = getSchema(state);\n const {proxy, externalProxy} = getCurrentClusterConfig(state);\n\n return {\n path,\n schema,\n cluster: getCluster(state),\n proxy,\n externalProxy,\n };\n};\n\nconst mapDispatchToProps = {\n updateView,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default compose(withVisible, connector)(UploadManager);\n","import {\n TabletStateAction,\n TabletStateType,\n} from '../../../../store/reducers/navigation/modals/dyn-tables-state-modal';\n\nexport const DYN_TABLES_ALLOWED_STATES_OF_ACTION: Record<\n TabletStateAction,\n Partial<Record<TabletStateType, boolean>>\n> = {\n mount: {\n unmounted: true,\n },\n unmount: {\n mounted: true,\n frozen: true,\n },\n freeze: {\n mounted: true,\n },\n unfreeze: {\n frozen: true,\n },\n};\n\nexport const DYN_TABLES_ALLOWED_ACTIONS_BY_STATE: Record<\n TabletStateType,\n Partial<Record<TabletStateAction, boolean>>\n> = {\n mounted: {\n freeze: true,\n unmount: true,\n },\n unmounted: {\n mount: true,\n },\n frozen: {\n unmount: true,\n unfreeze: true,\n },\n mixed: {\n mount: true,\n unmount: true,\n freeze: true,\n unfreeze: true,\n },\n};\n","import capitalize_ from 'lodash/capitalize';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport {ThunkAction} from 'redux-thunk';\nimport {\n DynTablesStateModalAction,\n DynTablesStateModalState,\n TabletStateAction,\n TabletStateType,\n} from '../../../../store/reducers/navigation/modals/dyn-tables-state-modal';\nimport {RootState} from '../../../../store/reducers';\nimport {DYN_TABLES_STATE_MODAL_PARTIAL} from '../../../../constants/navigation/modals/dyn-tables-state-modal';\nimport {delayed, wrapApiPromiseByToaster} from '../../../../utils/utils';\nimport {updateView} from '../index';\nimport {DYN_TABLES_ALLOWED_STATES_OF_ACTION} from '../../../selectors/navigation/content/map-node-ts';\nimport {executeBatchWithRetries} from '../../execute-batch';\nimport {YTApiId} from '../../../../rum/rum-wrap-api';\nimport {BatchResultsItem} from '../../../../../shared/yt-types';\n\ntype DynTablesStateThunkAction = ThunkAction<any, RootState, any, DynTablesStateModalAction>;\n\nexport function showDynTablesStateModalByPaths(\n paths: Array<string>,\n action: Required<DynTablesStateModalState>['action'],\n): DynTablesStateModalAction {\n return {\n type: DYN_TABLES_STATE_MODAL_PARTIAL,\n data: {paths, action, showModal: true},\n };\n}\n\nexport function showDynTablesStateModalByNodes(\n action: Required<DynTablesStateModalState>['action'],\n selectedNodes: Array<{path: string; tabletState: TabletStateType}>,\n): DynTablesStateThunkAction {\n return (dispatch) => {\n const allowedFrom = DYN_TABLES_ALLOWED_STATES_OF_ACTION[action];\n const paths = reduce_(\n selectedNodes,\n (acc, {path, tabletState}) => {\n if (tabletState && allowedFrom[tabletState]) {\n acc.push(path);\n }\n return acc;\n },\n [] as Array<string>,\n );\n\n dispatch({\n type: DYN_TABLES_STATE_MODAL_PARTIAL,\n data: {paths, action, showModal: true},\n });\n };\n}\n\nexport function hideDynTablesStateModal() {\n return {\n type: DYN_TABLES_STATE_MODAL_PARTIAL,\n data: {paths: [], action: undefined, showModal: false},\n };\n}\n\nexport function dynTablesChangeState(\n paths: Array<string>,\n action: TabletStateAction,\n): DynTablesStateThunkAction {\n return (dispatch) => {\n const requests = map_(paths, (path) => {\n return {\n command: `${action}_table` as const,\n parameters: {path},\n };\n });\n\n return wrapApiPromiseByToaster(\n executeBatchWithRetries(YTApiId.navigationDynTableState, requests, {\n errorTitle: 'Failed to change dynamic table(s) state',\n }),\n {\n toasterName: 'dyn_tables_change_state_to_' + action,\n successContent: '',\n batchType: 'v3',\n skipSuccessToast: true,\n errorTitle: `Cannot perform ${action} action`,\n },\n )\n .then(() => {\n return wrapApiPromiseByToaster(waitWhileThereIsTransient(paths, action), {\n toasterName: 'dyn_tables_wait_while_transient_' + action,\n successContent: `${capitalize_(action)} completed`,\n batchType: 'v3',\n errorTitle: `Cannot perform ${action} action`,\n });\n })\n .then(() => {\n dispatch(updateView());\n });\n };\n}\n\nfunction waitWhileThereIsTransient(\n paths: Array<string>,\n action: TabletStateAction,\n): Promise<Array<BatchResultsItem<string>>> {\n const requests = map_(paths, (path) => {\n return {\n command: 'get' as const,\n parameters: {path: `${path}/@tablet_state`},\n };\n });\n\n const res = delayed(\n () =>\n executeBatchWithRetries<string>(YTApiId.navigationGetTabletState, requests, {\n errorTitle: 'Failed to get tablet state',\n }),\n 3000,\n );\n\n return wrapApiPromiseByToaster(res, {\n toasterName: 'dyn_tables_wait_while_transient_' + action,\n successContent: `${capitalize_(action)} completed`,\n skipSuccessToast: true,\n batchType: 'v3',\n errorTitle: `Cannot perform ${action} action`,\n }).then((results) => {\n const toRecheck = reduce_(\n results,\n (acc, {output}, index) => {\n if (output === 'transient') {\n acc.push(paths[index]);\n }\n return acc;\n },\n [] as typeof paths,\n );\n\n if (toRecheck.length) {\n return waitWhileThereIsTransient(toRecheck, action);\n }\n return Promise.resolve([]);\n });\n}\n","import React, {Fragment} from 'react';\nimport {connect} from 'react-redux';\nimport {useDispatch, useSelector} from '../../../../../store/redux-hooks';\nimport PropTypes from 'prop-types';\nimport ypath from '@ytsaurus/interface-helpers/lib/ypath';\nimport hammer from '../../../../../common/hammer';\nimport {compose} from 'redux';\n\nimport DownloadManager from '../../../../../pages/navigation/content/Table/DownloadManager/DownloadManager';\nimport Button from '../../../../../components/Button/Button';\n\nimport {mountUnmountTable} from '../../../../../store/actions/navigation/content/table/table';\nimport {getAttributes, getPath} from '../../../../../store/selectors/navigation';\nimport withVisible from '../../../../../hocs/withVisible';\nimport UploadManager from '../UploadManager/UploadManager';\nimport {showDynTablesStateModalByPaths} from '../../../../../store/actions/navigation/modals/dyn-tables-state-modal';\n\nconst propTypes = {\n // from parent\n block: PropTypes.func.isRequired,\n\n // from withVisible\n visible: PropTypes.bool.isRequired,\n handleClose: PropTypes.func.isRequired,\n handleShow: PropTypes.func.isRequired,\n\n // from connect\n isDynamic: PropTypes.bool.isRequired,\n tabletState: PropTypes.string,\n\n mountUnmountTable: PropTypes.func.isRequired,\n};\n\nDynamicActions.propTypes = propTypes;\nfunction DynamicActions(props) {\n const dispatch = useDispatch();\n const path = useSelector(getPath);\n\n const {tabletState} = props;\n const action = tabletState !== 'mounted' ? 'mount' : 'unmount';\n const onClick = React.useCallback(() => {\n dispatch(showDynTablesStateModalByPaths([path], action));\n }, [action, path]);\n\n return (\n <Fragment>\n <Button size=\"m\" onClick={onClick}>\n {hammer.format['Readable'](action)}\n </Button>\n </Fragment>\n );\n}\n\nStaticActions.propTypes = propTypes;\nfunction StaticActions(props) {\n const {block} = props;\n\n return (\n <Fragment>\n <DownloadManager className={block('download-manager')} />\n <UploadManager />\n </Fragment>\n );\n}\n\nTableActions.propTypes = propTypes;\nfunction TableActions(props) {\n const {block, isDynamic} = props;\n\n return (\n <div className={block('actions')}>\n {isDynamic ? <DynamicActions {...props} /> : <StaticActions {...props} />}\n </div>\n );\n}\n\nconst mapStateToProps = (state) => {\n const {isDynamic} = state.navigation.content.table;\n const attributes = getAttributes(state);\n\n const tabletState = ypath.getValue(attributes, '/tablet_state');\n\n return {isDynamic, tabletState};\n};\n\nexport default compose(connect(mapStateToProps, {mountUnmountTable}), withVisible)(TableActions);\n","import React, {useState} from 'react';\nimport b from 'bem-cn-lite';\nimport {useDispatch, useSelector} from '../../../../../store/redux-hooks';\nimport {Alert, Button} from '@gravity-ui/uikit';\nimport ypath from '../../../../../common/thor/ypath';\n\nimport {remountTable} from '../../../../../store/actions/navigation/content/table/remount-table';\nimport {getAttributesWithTypes} from '../../../../../store/selectors/navigation';\n\nimport './RemountAlert.scss';\n\nconst block = b('remount-alert');\n\nexport function RemountAlert() {\n const dispatch = useDispatch();\n const attributesWithTypes = useSelector(getAttributesWithTypes);\n const [pending, setPending] = useState(false);\n\n const handleOnRemount = async () => {\n setPending(true);\n await dispatch(remountTable());\n setPending(false);\n };\n\n const [remountNeededTabletCount, tabletCount] = ypath.getValues(attributesWithTypes, [\n '/remount_needed_tablet_count',\n '/tablet_count',\n ]);\n\n const showDiffInfo = remountNeededTabletCount !== tabletCount;\n const diffInfo = ` (${remountNeededTabletCount} of ${tabletCount} tablets pending)`;\n\n const message = `Table should be remounted to apply new settings${showDiffInfo ? diffInfo : ''}. \n This action will not cause any downtime. See Mount config tab for details.`;\n\n return (\n <Alert\n theme=\"warning\"\n layout=\"horizontal\"\n title=\"Some table settings are not applied to tablets\"\n message={message}\n className={block()}\n actions={\n <Button\n onClick={handleOnRemount}\n disabled={pending}\n className={block('button')}\n view=\"normal-contrast\"\n size=\"s\"\n >\n Remount\n </Button>\n }\n ></Alert>\n );\n}\n","import {ThunkAction} from 'redux-thunk';\nimport {UnknownAction} from '@reduxjs/toolkit';\n\nimport {RootState} from '../../../../reducers';\nimport {updateView} from '../..';\n\nimport {wrapApiPromiseByToaster} from '../../../../../utils/utils';\nimport {ytApiV4} from '../../../../../rum/rum-wrap-api';\n\ntype AsyncAction<R = void> = ThunkAction<R, RootState, unknown, UnknownAction>;\n\nexport function remountTable(): AsyncAction<Promise<void>> {\n return async (dispatch, getState) => {\n const state = getState();\n const path = state.navigation.navigation.path;\n\n return wrapApiPromiseByToaster(ytApiV4.remountTable({path}), {\n toasterName: 'remount_tabe',\n errorTitle: 'Failed to remount table',\n skipSuccessToast: true,\n }).finally(() => {\n dispatch(updateView());\n });\n };\n}\n","import React, {useMemo} from 'react';\nimport cn from 'bem-cn-lite';\nimport {connect} from 'react-redux';\nimport {useSelector} from '../../../../../store/redux-hooks';\nimport ypath from '../../../../../common/thor/ypath';\n\nimport {makeMetaItems} from '../../../../../components/MetaTable/presets/presets';\nimport CollapsibleSection from '../../../../../components/CollapsibleSection/CollapsibleSection';\nimport MetaTable from '../../../../../components/MetaTable/MetaTable';\nimport {RemountAlert} from '../RemountAlert/RemountAlert';\n\nimport {getTableType} from '../../../../../store/selectors/navigation/content/table';\nimport {getIsDynamic} from '../../../../../store/selectors/navigation/content/table-ts';\nimport {getAttributes, getAttributesWithTypes} from '../../../../../store/selectors/navigation';\nimport {getTabletErrorsBackgroundCount} from '../../../../../store/selectors/navigation/tabs/tablet-errors-background';\nimport {Props as AutomaticModeSwitchProps} from './AutomaticModeSwitch';\n\nimport {RootState} from '../../../../../store/reducers';\nimport {getCluster} from '../../../../../store/selectors/global';\n\nimport {UI_COLLAPSIBLE_SIZE} from '../../../../../constants/global';\n\nimport './TableMeta.scss';\n\nconst block = cn('navigation-meta-table');\n\ninterface Props {\n attributes: any;\n mediumList: string[];\n isDynamic: boolean;\n tableType: string;\n remountNeeded: boolean;\n onEditEnableReplicatedTableTracker: AutomaticModeSwitchProps['onEdit'];\n}\n\nfunction TableMeta({\n attributes,\n tableType,\n mediumList,\n isDynamic,\n remountNeeded,\n onEditEnableReplicatedTableTracker,\n}: Props) {\n const tabletErrorCount = useSelector(getTabletErrorsBackgroundCount);\n const cluster = useSelector(getCluster);\n\n const items = useMemo(() => {\n return makeMetaItems({\n cluster,\n attributes,\n tableType,\n isDynamic,\n mediumList,\n tabletErrorCount,\n onEditEnableReplicatedTableTracker,\n });\n }, [\n cluster,\n attributes,\n tableType,\n isDynamic,\n mediumList,\n tabletErrorCount,\n onEditEnableReplicatedTableTracker,\n ]);\n\n return (\n <CollapsibleSection name=\"Metadata\" size={UI_COLLAPSIBLE_SIZE}>\n <MetaTable className={block()} items={items} />\n {remountNeeded && <RemountAlert />}\n </CollapsibleSection>\n );\n}\n\nconst mapStateToProps = (state: RootState) => {\n const {mediumList} = state.global;\n\n const isDynamic = getIsDynamic(state);\n const tableType = getTableType(state);\n const attributes = getAttributes(state);\n const attributesWithTypes = getAttributesWithTypes(state);\n\n const remountNeeded =\n Boolean(Number(ypath.getValue(attributesWithTypes, '/remount_needed_tablet_count'))) &&\n isDynamic;\n\n return {\n attributes,\n mediumList,\n isDynamic,\n tableType,\n remountNeeded,\n };\n};\n\nexport default connect(mapStateToProps)(TableMeta);\n","import React from 'react';\n\nimport capitalize_ from 'lodash/capitalize';\nimport cn from 'bem-cn-lite';\n\nimport Button from '../../../../components/Button/Button';\nimport Icon from '../../../../components/Icon/Icon';\nimport {FormApi, YTDFDialog} from '../../../../components/Dialog';\nimport {YTError} from '../../../../types';\nimport {YTErrorBlock} from '../../../../components/Error/Error';\n\nimport './ReplicatedTableSettings.scss';\nconst block = cn('replicated-table-settings');\n\ninterface Props {\n replica_cluster: string;\n replica_path: string;\n state: 'enabled' | 'disabled';\n mode: 'sync' | 'async';\n auto_replica_tracker: 'enabled' | 'disabled';\n\n onApply: (modeState: Pick<Props, 'mode' | 'state' | 'auto_replica_tracker'>) => Promise<void>;\n}\n\nexport function ReplicatedTableSettingsButton(props: Props) {\n const [visible, setVisible] = React.useState(false);\n\n const toggleVisibility = React.useCallback(() => {\n setVisible(!visible);\n }, [visible, setVisible]);\n\n return (\n <React.Fragment>\n <Button onClick={toggleVisibility} view={'flat-secondary'} size={'s'}>\n <Icon awesome={'pencil-alt'} />\n </Button>\n <ReplicatedTableSettingsDialog\n {...props}\n onClose={toggleVisibility}\n visible={visible}\n />\n </React.Fragment>\n );\n}\n\ninterface SettingsProps {\n visible: boolean;\n onClose: () => void;\n}\n\ninterface FormValues {\n cluster: string;\n path: string;\n state: 'enabled' | 'disabled';\n mode: 'async' | 'sync';\n auto_replica_tracker: 'enabled' | 'disabled';\n}\n\nfunction ReplicatedTableSettingsDialog(props: Props & SettingsProps) {\n const [error, setError] = React.useState<YTError | null>(null);\n const handleApply = React.useCallback(\n (form: FormApi<FormValues, Partial<FormValues>>) => {\n const {\n values: {mode, state, auto_replica_tracker},\n } = form.getState();\n return props.onApply({mode, state, auto_replica_tracker}).catch((e) => {\n setError(e);\n return Promise.reject(e);\n });\n },\n [props.mode, props.state, props.onApply, setError],\n );\n return (\n <YTDFDialog<FormValues>\n visible={props.visible}\n onAdd={handleApply}\n onClose={props.onClose}\n headerProps={{\n title: 'Replica settings',\n }}\n initialValues={{\n cluster: capitalize_(props.replica_cluster),\n path: props.replica_path,\n state: props.state,\n mode: props.mode,\n auto_replica_tracker: props.auto_replica_tracker,\n }}\n fields={[\n {\n type: 'plain',\n name: 'cluster',\n caption: 'Replica cluster',\n },\n {\n type: 'plain',\n name: 'path',\n caption: 'Replica path',\n },\n {\n type: 'radio',\n name: 'state',\n caption: 'State',\n extras: {\n size: 's',\n options: [\n {value: 'enabled', label: 'Enabled'},\n {value: 'disabled', label: 'Disabled'},\n ],\n },\n },\n {\n type: 'radio',\n name: 'mode',\n caption: 'Mode',\n extras: {\n size: 's',\n options: [\n {value: 'async', label: 'Async'},\n {value: 'sync', label: 'Sync'},\n ],\n },\n },\n {\n type: 'radio',\n name: 'auto_replica_tracker',\n caption: 'Automatic mode switch',\n extras: {\n options: [\n {value: 'enabled', label: 'Enabled'},\n {value: 'disabled', label: 'Disabled'},\n ],\n },\n },\n ...(!error\n ? []\n : [\n {\n type: 'block' as const,\n name: 'error',\n extras: {\n children: (\n <div className={block('error')}>\n <YTErrorBlock error={error} />\n </div>\n ),\n },\n },\n ]),\n ]}\n />\n );\n}\n","import reduce_ from 'lodash/reduce';\nimport some_ from 'lodash/some';\n\nimport {createSelector} from 'reselect';\n\nimport ypath from '../../../../common/thor/ypath';\nimport {RootState} from '../../../../store/reducers';\nimport {calculateLoadingStatus} from '../../../../utils/utils';\n\nexport const getNavigationReplicatedTableLoadingStatus = createSelector(\n [\n (store: RootState) => store.navigation.content.replicatedTable.loading,\n (store: RootState) => store.navigation.content.replicatedTable.loaded,\n (store: RootState) => store.navigation.content.replicatedTable.error,\n ],\n (loading, loaded, error) => {\n return calculateLoadingStatus(loading, loaded, error);\n },\n);\n\nexport const getReplicatedTableReplicas = (state: RootState) =>\n state.navigation.content.replicatedTable.replicas;\n\nexport const getReplicatedTableData = (state: RootState) =>\n state.navigation.content.replicatedTable;\n\nexport const getAllowEnableReplicatedTracker = createSelector(\n [getReplicatedTableReplicas],\n (replicas) => {\n return some_(replicas, (item) => {\n return Boolean(ypath.getValue(item, '/@replicated_table_tracker_enabled'));\n });\n },\n);\n\nexport const getReplicatedTableReplicasMap = createSelector(\n [getReplicatedTableReplicas],\n (replicas) => {\n return reduce_(\n replicas,\n (acc, {$value, $attributes}) => {\n acc[$value] = {\n error_count: ypath.getNumberDeprecated($attributes, '/error_count'),\n cluster_name: ypath.getValue($attributes, '/cluster_name'),\n mode: ypath.getValue($attributes, '/mode'),\n replica_path: ypath.getValue($attributes, '/replica_path'),\n replicated_table_tracker_enabled: ypath.getBoolean(\n $attributes,\n '/replicated_table_tracker_enabled',\n ),\n replication_lag_time: ypath.getNumberDeprecated(\n $attributes,\n '/replication_lag_time',\n ),\n state: ypath.getValue($attributes, '/state'),\n };\n return acc;\n },\n {} as Record<\n string,\n | {\n error_count: number;\n cluster_name: string;\n mode: string;\n replica_path: string;\n replicated_table_tracker_enabled: boolean;\n replication_lag_time: number;\n state: string;\n }\n | undefined\n >,\n );\n },\n);\n","import React, {Component} from 'react';\nimport {connect} from 'react-redux';\nimport {useSelector} from '../../../../store/redux-hooks';\nimport PropTypes from 'prop-types';\nimport ypath from '@ytsaurus/interface-helpers/lib/ypath';\nimport hammer from '../../../../common/hammer';\nimport cn from 'bem-cn-lite';\n\nimport {useDisableMaxContentWidth} from '../../../../containers/MaxContentWidth';\nimport ClickableAttributesButton from '../../../../components/AttributesButton/ClickableAttributesButton';\nimport TableActions from '../../../../pages/navigation/content/Table/TableOverview/TableActions';\nimport TableMeta from '../../../../pages/navigation/content/Table/TableMeta/TableMeta';\nimport LoadDataHandler from '../../../../components/LoadDataHandler/LoadDataHandler';\nimport ClipboardButton from '../../../../components/ClipboardButton/ClipboardButton';\nimport ElementsTable from '../../../../components/ElementsTable/ElementsTable';\nimport StatusBulb from '../../../../components/StatusBulb/StatusBulb';\nimport Icon from '../../../../components/Icon/Icon';\nimport Link from '../../../../components/Link/Link';\nimport {Tooltip} from '../../../../components/Tooltip/Tooltip';\nimport {StickyContainer} from '../../../../components/StickyContainer/StickyContainer';\nimport {Toolbar} from '../../../../components/WithStickyToolbar/Toolbar/Toolbar';\n\nimport {\n abortAndReset,\n loadReplicas,\n performReplicaAction,\n updateEnableReplicatedTableTracker,\n} from '../../../../store/actions/navigation/content/replicated-table';\nimport {getAttributes, getPath} from '../../../../store/selectors/navigation';\nimport {Page} from '../../../../constants/index';\n\nimport {ReplicatedTableSettingsButton} from './ReplicatedTableSettings';\nimport {useRumMeasureStop} from '../../../../rum/RumUiContext';\nimport {RumMeasureTypes} from '../../../../rum/rum-measure-types';\nimport {useAppRumMeasureStart} from '../../../../rum/rum-app-measures';\nimport {isFinalLoadingStatus} from '../../../../utils/utils';\n\nimport {\n getAllowEnableReplicatedTracker,\n getNavigationReplicatedTableLoadingStatus,\n getReplicatedTableData,\n} from '../../../../store/selectors/navigation/content/replicated-table';\n\nimport './ReplicatedTable.scss';\nimport {CypressNodeTypes} from '../../../../utils/cypress-attributes';\n\nconst block = cn('navigation-replicated-table');\n\nconst tableSets = {\n default: {\n items: [\n 'name',\n 'cluster',\n 'content_type',\n 'mode',\n 'error_count',\n 'replication_lag_time',\n 'state',\n 'actions',\n ],\n },\n 'with-auto-switch': {\n items: [\n 'name',\n 'cluster',\n 'content_type',\n 'mode',\n 'error_count',\n 'replication_lag_time',\n 'automatic_mode_switch',\n 'state',\n 'actions',\n ],\n },\n};\n\nclass ReplicatedTable extends Component {\n static propTypes = {\n // from connect\n loading: PropTypes.bool.isRequired,\n loaded: PropTypes.bool.isRequired,\n error: PropTypes.bool.isRequired,\n errorData: PropTypes.object,\n\n path: PropTypes.string.isRequired,\n replicas: PropTypes.array.isRequired,\n attributes: PropTypes.object.isRequired,\n\n loadReplicas: PropTypes.func.isRequired,\n abortAndReset: PropTypes.func.isRequired,\n performReplicaAction: PropTypes.func.isRequired,\n type: PropTypes.string.isRequired,\n };\n\n static tableItems = {\n name: {\n align: 'left',\n caption: 'Id / Path',\n sort: false,\n },\n cluster: {\n align: 'left',\n sort: false,\n get(replica) {\n return ypath.getValue(replica, '/@cluster_name');\n },\n },\n content_type: {\n align: 'left',\n sort: false,\n get(replica) {\n return ypath.getValue(replica, '/@content_type');\n },\n },\n mode: {\n align: 'left',\n sort: false,\n get(replica) {\n return ypath.getValue(replica, '/@mode');\n },\n },\n error_count: {\n align: 'center',\n caption: 'Error count',\n get(replica) {\n return ypath.getValue(replica, '/@error_count');\n },\n },\n errors: {\n align: 'left',\n get(replica) {\n return ypath.getValue(replica, '/@errors');\n },\n },\n replication_lag_time: {\n align: 'right',\n get(replica) {\n return ypath.getValue(replica, '/@replication_lag_time');\n },\n },\n state: {\n align: 'center',\n get(replica) {\n return ypath.getValue(replica, '/@state');\n },\n },\n automatic_mode_switch: {\n align: 'center',\n caption: 'Replicated table tracker',\n get(replica) {\n const flag = ypath.getValue(replica, '/@replicated_table_tracker_enabled');\n return flag === 'true' || flag === true;\n },\n },\n actions: {\n align: 'center',\n caption: '',\n },\n };\n\n static renderField(item, columnName) {\n const value = ReplicatedTable.tableItems[columnName].get(item);\n\n return !value ? hammer.format.NO_VALUE : value;\n }\n\n static renderAsReadableField(item, columnName) {\n const value = ReplicatedTable.tableItems[columnName].get(item);\n\n return hammer.format['ReadableField'](value);\n }\n\n static renderAsTimeDuration(item, columnName) {\n const value = ReplicatedTable.tableItems[columnName].get(item);\n\n return hammer.format['TimeDuration'](Number(value));\n }\n\n static renderName(replica) {\n const value = ypath.getValue(replica, '');\n const attributes = ypath.getValue(replica, '/@');\n const [path, cluster] = ypath.getValues(attributes, ['/replica_path', '/cluster_name']);\n const copy = {\n pathTitle: 'Copy replica path',\n idTitle: 'Copy replica id',\n };\n\n const replicaLink = <Link url={`/${cluster}/${Page.NAVIGATION}?path=${path}`}>{path}</Link>;\n\n return (\n <div>\n <span className=\"elements-ellipsis elements-monospace\">\n <ClipboardButton\n text={value}\n view=\"flat-secondary\"\n size=\"s\"\n title={copy.idTitle}\n />\n {value}\n </span>\n <br />\n <span className=\"elements-ellipsis elements-secondary-text\">\n <ClipboardButton\n text={path}\n view=\"flat-secondary\"\n size=\"s\"\n title={copy.pathTitle}\n />{' '}\n Path {replicaLink}\n </span>\n </div>\n );\n }\n\n static renderErrors() {\n return hammer.format.NO_VALUE; // No more supported by server\n }\n\n static renderState(item, columnName) {\n const state = ReplicatedTable.tableItems[columnName].get(item);\n\n return <StatusBulb theme={state} />;\n }\n\n static renderAutomaticModeSwitch(enableTableTracker, item, columnName) {\n const value = ReplicatedTable.tableItems[columnName].get(item);\n const theme = !enableTableTracker ? 'unknown' : value ? 'enabled' : 'disabled';\n const title = value ? 'Enabled' : 'Disabled';\n return (\n <Tooltip content={enableTableTracker ? title : 'Disabled by table settings'}>\n <StatusBulb theme={theme} className={block('auto-switch', {})} />\n {!enableTableTracker && (\n <Icon\n color=\"secondary\"\n awesome=\"question-circle\"\n className={block('info-icon')}\n />\n )}\n </Tooltip>\n );\n }\n\n componentDidMount() {\n this.props.loadReplicas();\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.path !== this.props.path) {\n this.props.loadReplicas();\n }\n }\n\n componentWillUnmount() {\n this.props.abortAndReset();\n }\n\n get tableSettings() {\n const {loading, loaded, tableMode, enable_replicated_table_tracker} = this.props;\n\n return {\n css: block(),\n theme: 'light',\n size: 's',\n striped: false,\n itemHeight: 65,\n isLoading: loading && !loaded,\n columns: {\n items: ReplicatedTable.tableItems,\n sets: tableSets,\n mode: tableMode,\n },\n templates: {\n name: ReplicatedTable.renderName,\n cluster: ReplicatedTable.renderField,\n content_type: ReplicatedTable.renderField,\n mode: ReplicatedTable.renderField,\n errors: ReplicatedTable.renderErrors,\n error_count: ReplicatedTable.renderAsReadableField,\n state: ReplicatedTable.renderState,\n automatic_mode_switch: ReplicatedTable.renderAutomaticModeSwitch.bind(\n null,\n enable_replicated_table_tracker,\n ),\n replication_lag_time: ReplicatedTable.renderAsTimeDuration,\n actions: this.renderActions,\n },\n computeKey(item) {\n return item.$value;\n },\n };\n }\n\n renderActions = (replica) => {\n const {attributes, performReplicaAction} = this.props;\n const replicaValue = ypath.getValue(replica, '');\n const replicaAttributes = ypath.getValue(replica, '/@');\n\n const isAsync = replicaAttributes.mode === 'async';\n const atomicity = attributes?.atomicity;\n const replicaData = {\n caption: replicaValue,\n attributes:\n isAsync && atomicity ? {...replicaAttributes, atomicity} : replicaAttributes,\n };\n\n const onApply = (modeState) => {\n return performReplicaAction({...modeState, replica});\n };\n\n const replicatedTableTracker = ypath.getValue(\n replica,\n '/@replicated_table_tracker_enabled',\n );\n\n return (\n <span>\n <ClickableAttributesButton\n title={replicaData.caption}\n attributes={replicaData.attributes}\n withTooltip\n />\n <ReplicatedTableSettingsButton\n replica_cluster={ypath.getValue(replica, '/@cluster_name')}\n replica_path={ypath.getValue(replica, '/@replica_path')}\n state={ypath.getValue(replica, '/@state')}\n mode={ypath.getValue(replica, '/@mode')}\n auto_replica_tracker={\n replicatedTableTracker === 'true' || replicatedTableTracker === true\n ? 'enabled'\n : 'disabled'\n }\n onApply={onApply}\n />\n </span>\n );\n };\n\n updateEnableReplicatedTableTracker = (value) => {\n const {updateEnableReplicatedTableTracker, path} = this.props;\n return updateEnableReplicatedTableTracker(path, value);\n };\n\n render() {\n const {replicas, type} = this.props;\n const hasActions = type !== CypressNodeTypes.CHAOS_REPLICATED_TABLE;\n\n return (\n <LoadDataHandler {...this.props}>\n <div className={block()}>\n <TableMeta\n onEditEnableReplicatedTableTracker={this.updateEnableReplicatedTableTracker}\n />\n\n <StickyContainer>\n {({stickyTopClassName}) => (\n <React.Fragment>\n {hasActions && (\n <Toolbar\n className={stickyTopClassName}\n itemsToWrap={[{node: <TableActions block={block} />}]}\n />\n )}\n <ElementsTable {...this.tableSettings} items={replicas} />\n </React.Fragment>\n )}\n </StickyContainer>\n </div>\n </LoadDataHandler>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const {loading, loaded, error, errorData, replicas} = getReplicatedTableData(state);\n const allowEnableReplicatedTracker = getAllowEnableReplicatedTracker(state);\n const path = getPath(state);\n const attributes = getAttributes(state);\n\n const [enable_replicated_table_tracker, type] = ypath.getValues(attributes, [\n '/replicated_table_options/enable_replicated_table_tracker',\n '/type',\n ]);\n\n return {\n loading,\n loaded,\n error,\n errorData,\n path,\n replicas,\n attributes,\n tableMode: allowEnableReplicatedTracker ? 'with-auto-switch' : 'default',\n enable_replicated_table_tracker,\n type,\n };\n};\n\nconst mapDispatchToProps = {\n loadReplicas,\n abortAndReset,\n performReplicaAction,\n updateEnableReplicatedTableTracker,\n};\n\nconst ReplicatedTableConnected = connect(mapStateToProps, mapDispatchToProps)(ReplicatedTable);\n\nexport default function ReplicatedTableWithRum() {\n useDisableMaxContentWidth();\n\n const loadState = useSelector(getNavigationReplicatedTableLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.NAVIGATION_CONTENT_REPLICATED_TABLE,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.NAVIGATION_CONTENT_REPLICATED_TABLE,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <ReplicatedTableConnected />;\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport {updateEnableReplicatedTableTracker} from '../../../../store/actions/navigation/content/replicated-table';\n\nimport './ReplicatedTable.scss';\nimport TableMeta from '../Table/TableMeta/TableMeta';\nimport {useDispatch, useSelector} from '../../../../store/redux-hooks';\nimport {getPath} from '../../../../store/selectors/navigation';\n\nconst block = cn('navigation-replicated-table');\n\nexport default function ReplicatedTableMeta() {\n const path = useSelector(getPath);\n const dispatch = useDispatch();\n\n const onEdit = (value?: boolean) => {\n return dispatch(\n updateEnableReplicatedTableTracker(path, value),\n ) as unknown as Promise<void>;\n };\n\n return (\n <div className={block()}>\n <TableMeta onEditEnableReplicatedTableTracker={onEdit} />\n </div>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport ypath from '@ytsaurus/interface-helpers/lib/ypath';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\nimport {useSelector} from '../../../../store/redux-hooks';\n\nimport {main} from '../../../../components/MetaTable/presets';\nimport MetaTable from '../../../../components/MetaTable/MetaTable';\n\nimport {getAttributes, getLoadState} from '../../../../store/selectors/navigation';\nimport {RumMeasureTypes} from '../../../../rum/rum-measure-types';\nimport {useRumMeasureStop} from '../../../../rum/RumUiContext';\nimport {isFinalLoadingStatus} from '../../../../utils/utils';\nimport {useAppRumMeasureStart} from '../../../../rum/rum-app-measures';\n\nconst block = cn('navigation-link');\n\nfunction Link({attributes}) {\n const [targetPath, broken] = ypath.getValues(attributes, ['/target_path', '/broken']);\n\n return (\n <div className={block()}>\n <MetaTable\n items={[\n main(attributes),\n [\n {key: 'target_path', value: targetPath},\n {key: 'broken', value: broken},\n ],\n ]}\n />\n </div>\n );\n}\n\nLink.propTypes = {\n // from connect\n attributes: PropTypes.object.isRequired,\n};\n\nconst mapStateToProps = (state) => {\n const attributes = getAttributes(state);\n\n return {attributes};\n};\n\nconst LinkConnected = connect(mapStateToProps)(Link);\n\nexport default function LinkWithRum() {\n const loadState = useSelector(getLoadState);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.NAVIGATION_CONTENT_LINK,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.NAVIGATION_CONTENT_LINK,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <LinkConnected />;\n}\n","import ypath from '@ytsaurus/interface-helpers/lib/ypath';\nimport {createSelector} from 'reselect';\nimport {getAttributes, getPath} from '../../../../store/selectors/navigation';\nimport {getCurrentClusterConfig} from '../../../../store/selectors/global';\nimport {MAX_FILE_SIZE} from '../../../../constants/navigation/content/file';\nimport {calculateLoadingStatus} from '../../../../utils/utils';\nimport {makeDirectDownloadPath} from '../../../../utils/navigation';\n\nexport const getDownloadPath = createSelector(\n [getPath, getCurrentClusterConfig],\n (cypressPath, {id: cluster, proxy, externalProxy}) => {\n const path = makeDirectDownloadPath('read_file', {cluster, proxy, externalProxy});\n const query = [\n 'path=' + encodeURIComponent(cypressPath),\n 'disposition=attachment',\n 'dump_error_into_response=true',\n ].join('&');\n\n return path + '?' + query;\n },\n);\n\nexport const getIsEmpty = createSelector(getAttributes, (attributes) => {\n return ypath.getValue(attributes, '/resource_usage/disk_space') === 0;\n});\n\nexport const getIsTooBig = createSelector(getAttributes, (attributes) => {\n return ypath.getValue(attributes, '/uncompressed_data_size') > MAX_FILE_SIZE;\n});\n\nexport const getNavigationFileLoadingStatus = createSelector(\n [\n (store) => store.navigation.content.file.loading,\n (store) => store.navigation.content.file.loaded,\n (store) => store.navigation.content.file.error,\n ],\n (loading, loaded, error) => {\n return calculateLoadingStatus(loading, loaded, error);\n },\n);\n","import yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport CancelHelper from '../../../../utils/cancel-helper';\nimport {prepareRequest} from '../../../../utils/navigation';\nimport {getPath, getTransaction} from '../../../../store/selectors/navigation';\nimport {LOAD_FILE, MAX_FILE_SIZE} from '../../../../constants/navigation/content/file';\nimport {ytApiV3} from '../../../../rum/rum-wrap-api';\n\nconst requests = new CancelHelper();\n\nexport function loadFile() {\n return (dispatch, getState) => {\n const state = getState();\n const path = getPath(state);\n const transaction = getTransaction(state);\n\n dispatch({type: LOAD_FILE.REQUEST});\n requests.removeAllRequests();\n\n return ytApiV3\n .readFile({\n parameters: prepareRequest({path, transaction, length: MAX_FILE_SIZE}),\n cancellation: requests.saveCancelToken,\n })\n .then((file) => {\n dispatch({\n type: LOAD_FILE.SUCCESS,\n data: {file},\n });\n })\n .catch((error) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({type: LOAD_FILE.CANCELLED});\n } else {\n dispatch({\n type: LOAD_FILE.FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nexport function abortAndReset() {\n return (dispatch) => {\n requests.removeAllRequests();\n dispatch({type: LOAD_FILE.CANCELLED});\n };\n}\n","import React from 'react';\nimport {useSelector} from '../../store/redux-hooks';\n\nimport {getCluster} from '../../store/selectors/global';\nimport {getPath, getType} from '../../store/selectors/navigation';\nimport {getNavigationPathAttributes} from '../../store/selectors/navigation/navigation';\nimport UIFactory from '../../UIFactory';\n\nfunction NavigationExtraActions({className}: {className?: string}) {\n const cluster = useSelector(getCluster);\n const path = useSelector(getPath);\n const type = useSelector(getType);\n const attributes = useSelector(getNavigationPathAttributes);\n\n return (\n <>\n {UIFactory.renderNavigationExtraActions({\n className,\n path,\n cluster,\n type,\n attributes,\n })}\n </>\n );\n}\n\nexport default React.memo(NavigationExtraActions);\n","import React, {Fragment, useEffect} from 'react';\nimport {connect} from 'react-redux';\nimport {useSelector} from '../../../../store/redux-hooks';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport {useDisableMaxContentWidth} from '../../../../containers/MaxContentWidth';\nimport LoadDataHandler from '../../../../components/LoadDataHandler/LoadDataHandler';\nimport MetaTable from '../../../../components/MetaTable/MetaTable';\nimport {\n compression,\n erasureReplication,\n main,\n size,\n} from '../../../../components/MetaTable/presets';\nimport {Button, Loader} from '@gravity-ui/uikit';\nimport Link from '../../../../components/Link/Link';\n\nimport {\n getDownloadPath,\n getIsEmpty,\n getIsTooBig,\n getNavigationFileLoadingStatus,\n} from '../../../../store/selectors/navigation/content/file';\nimport {abortAndReset, loadFile} from '../../../../store/actions/navigation/content/file';\nimport {getAttributes, getPath} from '../../../../store/selectors/navigation';\nimport {getEffectiveMode} from '../../../../store/selectors/navigation/navigation';\n\nimport {useRumMeasureStop} from '../../../../rum/RumUiContext';\nimport {useAppRumMeasureStart} from '../../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../utils/utils';\n\nimport './File.scss';\nimport NavigationExtraActions from '../../../../containers/NavigationExtraActions/NavigationExtraActions';\n\nconst block = cn('navigation-file');\nconst messageBlock = cn('elements-message');\nconst codeBlock = cn('elements-code');\n\nconst renderMeta = (attributes, mediumList) => {\n return (\n <MetaTable\n items={[\n main(attributes),\n size(attributes, mediumList),\n [...compression(attributes), ...erasureReplication(attributes)],\n ]}\n />\n );\n};\n\nconst renderActions = (downloadPath) => {\n return (\n <div className={block('actions')}>\n <Button className={block('download')} href={downloadPath} target=\"_blank\">\n Download\n </Button>\n <NavigationExtraActions />\n </div>\n );\n};\n\nconst renderEmptyWarning = () => {\n return (\n <div className={messageBlock({theme: 'warning'})}>\n <p className={messageBlock('paragraph')}>File is empty.</p>\n </div>\n );\n};\n\nconst renderTooBigInfo = (downloadPath) => {\n return (\n <div className={messageBlock({theme: 'info'})}>\n <p className={messageBlock('paragraph')}>\n The file is too big to be fully shown here. You can{' '}\n <Link url={downloadPath} target=\"_blank\">\n download\n </Link>{' '}\n it.\n </p>\n </div>\n );\n};\n\nconst renderContent = (file, isTooBig, downloadPath) => {\n return (\n <Fragment>\n <pre className={codeBlock({theme: 'default'})}>{file}</pre>\n\n {isTooBig && renderTooBigInfo(downloadPath)}\n </Fragment>\n );\n};\n\nfunction File(props) {\n const {path, mode, loadFile, abortAndReset} = props;\n useEffect(() => {\n loadFile();\n return abortAndReset;\n }, [path, mode]);\n\n const {loading, loaded, attributes, mediumList, downloadPath, isEmpty, isTooBig, file} = props;\n const initialLoading = loading && !loaded;\n return (\n <LoadDataHandler {...props}>\n <div className={block({loading: initialLoading})}>\n {initialLoading ? (\n <Loader />\n ) : (\n <Fragment>\n {renderMeta(attributes, mediumList)}\n {renderActions(downloadPath)}\n {isEmpty\n ? renderEmptyWarning()\n : renderContent(file, isTooBig, downloadPath)}\n </Fragment>\n )}\n </div>\n </LoadDataHandler>\n );\n}\n\nFile.propTypes = {\n // from connect\n loading: PropTypes.bool.isRequired,\n loaded: PropTypes.bool.isRequired,\n error: PropTypes.bool.isRequired,\n errorData: PropTypes.object.isRequired,\n\n file: PropTypes.string,\n path: PropTypes.string.isRequired,\n mode: PropTypes.string.isRequired,\n isEmpty: PropTypes.bool.isRequired,\n isTooBig: PropTypes.bool.isRequired,\n attributes: PropTypes.object.isRequired,\n downloadPath: PropTypes.string.isRequired,\n mediumList: PropTypes.arrayOf(PropTypes.string.isRequired).isRequired,\n\n loadFile: PropTypes.func.isRequired,\n abortAndReset: PropTypes.func.isRequired,\n};\n\nconst mapStateToProps = (state) => {\n const {loading, loaded, error, errorData, file} = state.navigation.content.file;\n const {mediumList} = state.global;\n\n const downloadPath = getDownloadPath(state);\n const attributes = getAttributes(state);\n const isTooBig = getIsTooBig(state);\n const isEmpty = getIsEmpty(state);\n const path = getPath(state);\n const mode = getEffectiveMode(state);\n\n return {\n loading,\n loaded,\n error,\n errorData,\n mediumList,\n attributes,\n path,\n mode,\n isEmpty,\n isTooBig,\n downloadPath,\n file,\n };\n};\nconst mapDispatchToProps = {\n loadFile,\n abortAndReset,\n};\n\nconst FileConnected = connect(mapStateToProps, mapDispatchToProps)(File);\n\nexport default function FileWithRum() {\n useDisableMaxContentWidth();\n\n const loadState = useSelector(getNavigationFileLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.NAVIGATION_CONTENT_FILE,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.NAVIGATION_CONTENT_FILE,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <FileConnected />;\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from '../../../../../store/redux-hooks';\nimport cn from 'bem-cn-lite';\nimport DataTable from '@gravity-ui/react-data-table';\n\nimport {Loader} from '@gravity-ui/uikit';\n\nimport {TypeArray} from '../../../../../components/SchemaDataType/dataTypes';\n\nimport {injectTableCellData} from '../../../../../store/actions/navigation/content/table/table-ts';\nimport {getOffsetValue} from '../../../../../store/selectors/navigation/content/table';\nimport {getSchemaByName} from '../../../../../store/selectors/navigation/tabs/schema';\nimport {getSettingTableDisplayRawStrings} from '../../../../../store/selectors/settings';\nimport {shouldUseYqlTypes} from '../../../../../store/selectors/settings/settings-development';\nimport {YsonSettings} from '../../../../../store/selectors/thor/unipika';\nimport {onCellPreview} from '../../../../../store/actions/navigation/modals/cell-preview';\nimport {NameWithSortOrder, prepareColumns} from '../../../../../utils/navigation/prepareColumns';\nimport {\n CellDataHandlerNavigation,\n isInlinePreviewAllowed,\n onErrorTableCellPreview,\n} from '../../../../../types/navigation/table-cell-preview';\nimport CancelHelper from '../../../../../utils/cancel-helper';\n\nimport './DataTableWrapper.scss';\n\nconst block = cn('data-table-wrapper');\n\nconst rowKey = (_row: unknown, index: number) => index;\n\nDataTableWrapper.propTypes = {};\n\nexport type DataTableWrapperProps = {\n isFullScreen: boolean;\n loading: boolean;\n loaded: boolean;\n columns: Array<NameWithSortOrder>;\n keyColumns: Array<string>;\n ysonSettings: YsonSettings;\n yqlTypes?: Array<TypeArray>;\n\n data: Array<unknown>;\n};\n\nexport default function DataTableWrapper(props: DataTableWrapperProps) {\n const useRawStrings = useSelector(getSettingTableDisplayRawStrings);\n const useYqlTypes = useSelector(shouldUseYqlTypes);\n const schemaByName = useSelector(getSchemaByName);\n\n const {columns, keyColumns, ysonSettings, yqlTypes, loading, loaded, isFullScreen, ...rest} =\n props;\n\n const {onShowPreview} = useShowPrevewHandler();\n\n const dtColumns = prepareColumns({\n columns,\n keyColumns,\n yqlTypes,\n ysonSettings,\n useRawStrings,\n schemaByName,\n onShowPreview,\n useYqlTypes,\n });\n const initialLoading = loading && !loaded;\n const updating = loading && loaded;\n\n React.useEffect(() => {\n if (!loading && loaded && rest.data.length > 0) {\n setTimeout(\n () =>\n requestAnimationFrame(() => {\n window.dispatchEvent(new Event('resize'));\n }),\n 300,\n );\n }\n }, [loading, loaded, rest.data.length]);\n\n return (\n <div\n className={block({\n fullscreen: isFullScreen,\n loading: initialLoading,\n updating,\n })}\n >\n {updating && (\n <div className={block('updating-loader')}>\n <Loader />\n </div>\n )}\n {initialLoading ? (\n <Loader />\n ) : (\n <DataTable theme=\"yt-internal\" columns={dtColumns} rowKey={rowKey} {...rest} />\n )}\n </div>\n );\n}\n\nfunction useShowPrevewHandler() {\n const dispatch = useDispatch();\n const offsetValue = useSelector(getOffsetValue);\n\n const {dataHandler, onShowPreview} = React.useMemo(() => {\n const cancelHelper = new CancelHelper();\n\n const dataHandler = {\n cancelHelper,\n saveCancellation: (token) => {\n cancelHelper.saveCancelToken(token);\n },\n onStartLoading: () => {},\n onError: onErrorTableCellPreview,\n onSuccess: ({data, columnName, rowIndex}) => {\n dispatch(injectTableCellData({data, offsetValue, columnName, rowIndex}));\n },\n } as CellDataHandlerNavigation & {cancelHelper: CancelHelper};\n\n const onShowPreview = (columnName: string, rowIndex: number, tag?: string) => {\n const allowInjectData = isInlinePreviewAllowed(tag);\n return dispatch(\n onCellPreview({\n columnName,\n rowIndex,\n tag,\n dataHandler: allowInjectData ? dataHandler : undefined,\n }),\n );\n };\n\n return {onShowPreview, dataHandler};\n }, [dispatch, offsetValue]);\n\n React.useEffect(() => {\n return () => {\n dataHandler.cancelHelper.removeAllRequests();\n };\n }, [dataHandler]);\n\n return {onShowPreview};\n}\n","import {Action} from 'redux';\nimport {ThunkAction} from 'redux-thunk';\n\nimport {RootState} from '../../../../../store/reducers';\nimport {GET_TABLE_DATA} from '../../../../../constants/navigation/content/table';\nimport {getRows, getYqlTypes} from '../../../../../store/selectors/navigation/content/table-ts';\nimport {getOffsetValue} from '../../../../../store/selectors/navigation/content/table';\n\nimport {ReadTableResult} from './readTable';\n\nexport type InjectCellThunk = ThunkAction<void, RootState, unknown, Action>;\n\nexport function injectTableCellData({\n data,\n offsetValue,\n columnName,\n rowIndex,\n}: {\n data: ReadTableResult;\n offsetValue: unknown;\n columnName: string;\n rowIndex: number;\n}): InjectCellThunk {\n return (dispatch, getState) => {\n const state = getState();\n const currentOffset = getOffsetValue(state);\n if (offsetValue !== currentOffset) {\n return;\n }\n\n const cellData = data.rows[0][columnName];\n\n const yqlTypes = getYqlTypes(state);\n const rows = [...getRows(state)];\n\n const rowData = {...rows[rowIndex]};\n Object.assign(rowData, {[columnName]: cellData});\n rows[rowIndex] = rowData;\n\n dispatch({type: GET_TABLE_DATA.SUCCESS, data: {rows, yqlTypes}});\n };\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from '../../../../../store/redux-hooks';\n\nimport {Tooltip} from '../../../../../components/Tooltip/Tooltip';\nimport Button, {ButtonProps} from '../../../../../components/Button/Button';\nimport {\n openTableWithPresetOfColumns,\n rememberPresetColumnsAsDefault,\n} from '../../../../../store/actions/navigation/content/table/table';\nimport Icon from '../../../../../components/Icon/Icon';\nimport {getColumnsPresetHash} from '../../../../../store/selectors/navigation/content/table-ts';\n\ntype Props = Required<Pick<ButtonProps, 'view' | 'disabled'>>;\n\nfunction SharePresetButton(props: Props) {\n const dispatch = useDispatch();\n\n const handleClick = React.useCallback(() => {\n dispatch(openTableWithPresetOfColumns());\n }, [dispatch]);\n\n return (\n <Tooltip content={'Share current set of columns for the table'}>\n <Button\n {...props}\n pin={'clear-round'}\n onClick={handleClick}\n qa=\"table-columns-share-button\"\n >\n <Icon awesome={'share'} />\n </Button>\n </Tooltip>\n );\n}\n\nfunction SavePresetButton(props: Props) {\n const dispatch = useDispatch();\n\n const handleClick = React.useCallback(() => {\n dispatch(rememberPresetColumnsAsDefault());\n }, [dispatch]);\n\n return (\n <Tooltip content={'Remember columns for the table'}>\n <Button {...props} pin={'clear-round'} onClick={handleClick}>\n <Icon awesome={'save'} />\n </Button>\n </Tooltip>\n );\n}\n\nfunction ColumnsPresetButton(props: Props) {\n const hash = useSelector(getColumnsPresetHash);\n\n return hash ? <SavePresetButton {...props} /> : <SharePresetButton {...props} />;\n}\n\nexport default React.memo(ColumnsPresetButton);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\n\nimport Icon from '../../../../../components/Icon/Icon';\nimport Button from '../../../../../components/Button/Button';\n\nimport {openColumnSelectorModal} from '../../../../../store/actions/navigation/content/table/table';\nimport {\n getAllColumns,\n getVisibleColumns,\n} from '../../../../../store/selectors/navigation/content/table';\nimport {getSchemaStrict} from '../../../../../store/selectors/navigation/tabs/schema';\nimport {Secondary} from '../../../../../components/Text/Text';\nimport ColumnsPresetButton from './ColumnsPresetButton';\nimport {RootState} from '../../../../../store/reducers';\nimport {getConfigData} from '../../../../../config/ui-settings';\n\nColumnSelectorButton.propTypes = {\n // from parent\n block: PropTypes.func.isRequired,\n\n // from connect\n visibleColumns: PropTypes.array.isRequired,\n allColumns: PropTypes.array.isRequired,\n loading: PropTypes.bool.isRequired,\n\n openColumnSelectorModal: PropTypes.func.isRequired,\n};\n\nconst actionStyle = {marginRight: 1};\n\ninterface Props {\n loading?: boolean;\n isStrict?: boolean;\n allColumns: Array<unknown>;\n visibleColumns: Array<unknown>;\n openColumnSelectorModal: () => void;\n}\n\nfunction ColumnSelectorButton({\n loading,\n isStrict,\n allColumns,\n visibleColumns,\n openColumnSelectorModal,\n}: Props) {\n const allowPickColumns = !loading || isStrict;\n const showAllColumns = allColumns.length === visibleColumns.length;\n const view = showAllColumns ? 'outlined' : 'action';\n\n const {allowUserColumnPresets} = getConfigData();\n return (\n <React.Fragment>\n <Button\n size=\"m\"\n disabled={!allowPickColumns}\n title=\"Choose columns\"\n onClick={openColumnSelectorModal}\n view={view}\n pin={allowUserColumnPresets ? 'round-brick' : 'round-round'}\n style={showAllColumns ? undefined : actionStyle}\n qa=\"table-columns-button\"\n >\n <Icon awesome=\"filter\" face=\"solid\" />\n Columns\n <Secondary disabled={!showAllColumns}>\n {' '}\n {visibleColumns.length + '/' + allColumns.length}\n </Secondary>\n </Button>\n {allowUserColumnPresets && (\n <ColumnsPresetButton view={view} disabled={!allowPickColumns} />\n )}\n </React.Fragment>\n );\n}\n\nconst mapStateToProps = (state: RootState) => {\n const {loading} = state.navigation.content.table;\n\n const visibleColumns = getVisibleColumns(state);\n const allColumns = getAllColumns(state);\n const isStrict = getSchemaStrict(state);\n\n return {visibleColumns, loading, allColumns, isStrict};\n};\n\nconst mapDispatchToProps = {\n openColumnSelectorModal,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ColumnSelectorButton);\n","/* eslint-disable promise/prefer-await-to-then */\n\nconst methodMap = [\n\t[\n\t\t'requestFullscreen',\n\t\t'exitFullscreen',\n\t\t'fullscreenElement',\n\t\t'fullscreenEnabled',\n\t\t'fullscreenchange',\n\t\t'fullscreenerror',\n\t],\n\t// New WebKit\n\t[\n\t\t'webkitRequestFullscreen',\n\t\t'webkitExitFullscreen',\n\t\t'webkitFullscreenElement',\n\t\t'webkitFullscreenEnabled',\n\t\t'webkitfullscreenchange',\n\t\t'webkitfullscreenerror',\n\n\t],\n\t// Old WebKit\n\t[\n\t\t'webkitRequestFullScreen',\n\t\t'webkitCancelFullScreen',\n\t\t'webkitCurrentFullScreenElement',\n\t\t'webkitCancelFullScreen',\n\t\t'webkitfullscreenchange',\n\t\t'webkitfullscreenerror',\n\n\t],\n\t[\n\t\t'mozRequestFullScreen',\n\t\t'mozCancelFullScreen',\n\t\t'mozFullScreenElement',\n\t\t'mozFullScreenEnabled',\n\t\t'mozfullscreenchange',\n\t\t'mozfullscreenerror',\n\t],\n\t[\n\t\t'msRequestFullscreen',\n\t\t'msExitFullscreen',\n\t\t'msFullscreenElement',\n\t\t'msFullscreenEnabled',\n\t\t'MSFullscreenChange',\n\t\t'MSFullscreenError',\n\t],\n];\n\nconst nativeAPI = (() => {\n\tif (typeof document === 'undefined') {\n\t\treturn false;\n\t}\n\n\tconst unprefixedMethods = methodMap[0];\n\tconst returnValue = {};\n\n\tfor (const methodList of methodMap) {\n\t\tconst exitFullscreenMethod = methodList?.[1];\n\t\tif (exitFullscreenMethod in document) {\n\t\t\tfor (const [index, method] of methodList.entries()) {\n\t\t\t\treturnValue[unprefixedMethods[index]] = method;\n\t\t\t}\n\n\t\t\treturn returnValue;\n\t\t}\n\t}\n\n\treturn false;\n})();\n\nconst eventNameMap = {\n\tchange: nativeAPI.fullscreenchange,\n\terror: nativeAPI.fullscreenerror,\n};\n\n// eslint-disable-next-line import/no-mutable-exports\nlet screenfull = {\n\t// eslint-disable-next-line default-param-last\n\trequest(element = document.documentElement, options) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tconst onFullScreenEntered = () => {\n\t\t\t\tscreenfull.off('change', onFullScreenEntered);\n\t\t\t\tresolve();\n\t\t\t};\n\n\t\t\tscreenfull.on('change', onFullScreenEntered);\n\n\t\t\tconst returnPromise = element[nativeAPI.requestFullscreen](options);\n\n\t\t\tif (returnPromise instanceof Promise) {\n\t\t\t\treturnPromise.then(onFullScreenEntered).catch(reject);\n\t\t\t}\n\t\t});\n\t},\n\texit() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (!screenfull.isFullscreen) {\n\t\t\t\tresolve();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst onFullScreenExit = () => {\n\t\t\t\tscreenfull.off('change', onFullScreenExit);\n\t\t\t\tresolve();\n\t\t\t};\n\n\t\t\tscreenfull.on('change', onFullScreenExit);\n\n\t\t\tconst returnPromise = document[nativeAPI.exitFullscreen]();\n\n\t\t\tif (returnPromise instanceof Promise) {\n\t\t\t\treturnPromise.then(onFullScreenExit).catch(reject);\n\t\t\t}\n\t\t});\n\t},\n\ttoggle(element, options) {\n\t\treturn screenfull.isFullscreen ? screenfull.exit() : screenfull.request(element, options);\n\t},\n\tonchange(callback) {\n\t\tscreenfull.on('change', callback);\n\t},\n\tonerror(callback) {\n\t\tscreenfull.on('error', callback);\n\t},\n\ton(event, callback) {\n\t\tconst eventName = eventNameMap[event];\n\t\tif (eventName) {\n\t\t\tdocument.addEventListener(eventName, callback, false);\n\t\t}\n\t},\n\toff(event, callback) {\n\t\tconst eventName = eventNameMap[event];\n\t\tif (eventName) {\n\t\t\tdocument.removeEventListener(eventName, callback, false);\n\t\t}\n\t},\n\traw: nativeAPI,\n};\n\nObject.defineProperties(screenfull, {\n\tisFullscreen: {\n\t\tget: () => Boolean(document[nativeAPI.fullscreenElement]),\n\t},\n\telement: {\n\t\tenumerable: true,\n\t\tget: () => document[nativeAPI.fullscreenElement] ?? undefined,\n\t},\n\tisEnabled: {\n\t\tenumerable: true,\n\t\t// Coerce to boolean in case of old WebKit.\n\t\tget: () => Boolean(document[nativeAPI.fullscreenEnabled]),\n\t},\n});\n\nif (!nativeAPI) {\n\tscreenfull = {isEnabled: false};\n}\n\nexport default screenfull;\n","import React, {useEffect, useRef} from 'react';\nimport screenfull from 'screenfull';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nconst block = cn('fullscreen');\n\nFullScreen.propTypes = {\n children: PropTypes.node.isRequired,\n enabled: PropTypes.bool.isRequired,\n className: PropTypes.string,\n onChange: PropTypes.func,\n};\n\nexport default function FullScreen({enabled = false, children, className, onChange = () => {}}) {\n const container = useRef(null);\n\n const toggleScreen = () => {\n if (screenfull.isFullscreen && !enabled) {\n screenfull.exit();\n } else if (!screenfull.isFullscreen && enabled) {\n screenfull.request(container.current);\n }\n };\n\n const callback = () => onChange(screenfull.isFullscreen);\n const listenScreenChange = () => {\n if (!isFullScreenAllowed()) {\n return;\n }\n\n screenfull.on('change', callback);\n return () => {\n screenfull.off('change', callback);\n };\n };\n\n useEffect(toggleScreen, [enabled]);\n useEffect(listenScreenChange);\n\n return (\n <div className={block({enabled}, className)} ref={container}>\n {children}\n </div>\n );\n}\n\nexport function isFullScreenAllowed() {\n const {isEnabled, on} = screenfull || {};\n return isEnabled && 'function' === typeof on;\n}\n","import React, {useEffect} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport Button from '../../../../../components/Button/Button';\nimport Icon from '../../../../../components/Icon/Icon';\n\nimport {toggleFullScreen} from '../../../../../store/actions/navigation/content/table/table';\nimport {isFullScreenAllowed} from '../../../../../components/FullScreen/FullScreen';\n\nFullScreenButton.propTypes = {\n // from parent\n block: PropTypes.func.isRequired,\n\n // from connect\n isFullScreen: PropTypes.bool.isRequired,\n toggleFullScreen: PropTypes.func.isRequired,\n};\n\nfunction FullScreenButton({block, toggleFullScreen, isFullScreen}) {\n useEffect(() => {\n // Sets correct isSticky flag value from the <Sticky/> component after exit from fullscreen mode ¯\\_(ツ)_/¯\n const dispatchScrollEvent = () => window.dispatchEvent(new Event('scroll'));\n setTimeout(dispatchScrollEvent, 100);\n }, [isFullScreen]);\n\n return (\n isFullScreenAllowed() && (\n <div className={block('fs-button', {fullscreen: isFullScreen})}>\n <Button size=\"m\" title=\"Toggle full screen\" onClick={toggleFullScreen}>\n <Icon awesome={isFullScreen ? 'compress' : 'expand'} />\n </Button>\n </div>\n )\n );\n}\n\nconst mapStateToProps = (state) => {\n const {isFullScreen} = state.navigation.content.table;\n\n return {isFullScreen};\n};\n\nconst mapDispatchToProps = {\n toggleFullScreen,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FullScreenButton);\n","import React, {ComponentProps, VFC} from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\nimport type cn from 'bem-cn-lite';\nimport {Checkbox} from '@gravity-ui/uikit';\n\nimport RadioButton from '../../../../../components/RadioButton/RadioButton';\nimport Dropdown from '../../../../../components/Dropdown/Dropdown';\nimport Button from '../../../../../components/Button/Button';\nimport Icon from '../../../../../components/Icon/Icon';\n\nimport {\n cellSizeRadioButtonItems,\n pageSizeRadioButtonItems,\n} from '../../../../../constants/navigation/content/table';\nimport {\n changeCellSize,\n changePageSize,\n} from '../../../../../store/actions/navigation/content/table/table';\nimport {getCellSize, getPageSize} from '../../../../../store/selectors/navigation/content/table-ts';\nimport {getSettingTableDisplayRawStrings} from '../../../../../store/selectors/settings';\nimport {setTableDisplayRawStrings} from '../../../../../store/actions/settings/settings';\nimport type {RootState} from '../../../../../store/reducers';\n\ninterface Props extends ConnectedProps<typeof connector> {\n block: ReturnType<typeof cn>;\n}\n\nconst SettingsButton: VFC<Props> = ({\n block,\n pageSize,\n changePageSize,\n cellSize,\n changeCellSize,\n allowRawStrings,\n setTableDisplayRawStrings,\n}) => {\n const stringLimitProps: ComponentProps<typeof RadioButton> = {\n size: 'm',\n name: 'table-string-limit',\n value: String(cellSize),\n items: cellSizeRadioButtonItems,\n onChange(evt) {\n const value = Number(evt.target.value);\n changeCellSize(value);\n },\n };\n\n const pageSizeProps: ComponentProps<typeof RadioButton> = {\n size: 'm',\n name: 'table-page-size',\n value: String(pageSize),\n items: pageSizeRadioButtonItems,\n onChange(evt) {\n const value = Number(evt.target.value);\n changePageSize(value);\n },\n };\n\n return (\n <Dropdown\n trigger=\"click\"\n className={block('settings')}\n button={\n <Button size=\"m\" title=\"settings\">\n <Icon awesome=\"cog\" face=\"solid\" />\n </Button>\n }\n template={\n <div className={block('settings-modal')}>\n <div className=\"elements-form__label\">Rows per page</div>\n <div className=\"elements-form__field\">\n <RadioButton {...pageSizeProps} />\n </div>\n <div className=\"elements-form__label\">Cell size limit</div>\n <div className=\"elements-form__field\">\n <RadioButton {...stringLimitProps} />\n </div>\n <div className=\"elements-form__field\">\n <Checkbox\n checked={allowRawStrings}\n onChange={(evt) => {\n setTableDisplayRawStrings(evt.target.checked);\n }}\n >\n Allow raw strings\n </Checkbox>\n </div>\n </div>\n }\n />\n );\n};\n\nconst mapStateToProps = (state: RootState) => {\n const {isFullScreen} = state.navigation.content.table;\n const pageSize = getPageSize(state);\n const cellSize = getCellSize(state);\n\n const allowRawStrings = getSettingTableDisplayRawStrings(state);\n\n return {pageSize, cellSize, isFullScreen, allowRawStrings};\n};\n\nconst mapDispatchToProps = {\n changePageSize,\n changeCellSize,\n setTableDisplayRawStrings,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default connector(SettingsButton);\n","const SvgJupyterLogo = props => <svg xmlns=\"http://www.w3.org/2000/svg\" xmlnsXlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 44 51\" {...props}><g style={{\n mixBlendMode: \"normal\"\n }}><use xlinkHref=\"#jupyter-logo_svg__a\" fill=\"#F37726\" style={{\n mixBlendMode: \"normal\"\n }} transform=\"translate(3.21 31.27)\" /><use xlinkHref=\"#jupyter-logo_svg__b\" fill=\"#F37726\" style={{\n mixBlendMode: \"normal\"\n }} transform=\"translate(3.21 4.88)\" /></g><defs><path id=\"jupyter-logo_svg__a\" d=\"M18.696 7.122C10.684 7.122 3.641 4.247 0 0a19.934 19.934 0 0 0 37.392 0C33.76 4.247 26.744 7.122 18.696 7.122\" /><path id=\"jupyter-logo_svg__b\" d=\"M18.696 5.897c8.013 0 15.055 2.876 18.696 7.123A19.934 19.934 0 0 0 0 13.02c3.641-4.256 10.648-7.123 18.696-7.123\" /></defs></svg>;\nexport default SvgJupyterLogo;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {useSelector} from '../../../../../store/redux-hooks';\n\nimport Button from '../../../../../components/Button/Button';\nimport Logo from '../../../../../assets/img/svg/jupyter-logo.svg';\n\nimport {getPath} from '../../../../../store/selectors/navigation';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport {getNavigationPathAttributesLoadState} from '../../../../../store/selectors/navigation/navigation';\nimport {LOADING_STATUS} from '../../../../../constants';\nimport {getJupyterBasePath} from '../../../../../config';\n\nJupyterButton.propTypes = {\n // from parent\n block: PropTypes.func.isRequired,\n};\n\nfunction JupyterButton({block}) {\n const loaded = useSelector(getNavigationPathAttributesLoadState) === LOADING_STATUS.LOADED;\n const cluster = useSelector(getCluster);\n const path = useSelector(getPath);\n\n const basePath = getJupyterBasePath();\n if (!basePath) {\n return null;\n }\n\n const url = `${basePath}/redirect/nb_template/yt?cluster=${cluster}&path=${path}`;\n return (\n <div className={block('jupyter')}>\n <Button\n size=\"m\"\n href={url}\n view=\"action\"\n target=\"_blank\"\n title=\"Open in Jupyter\"\n disabled={!loaded}\n >\n <span className={block('jupyter-content')}>\n <Logo className={block('jupyter-logo')} width={22} height={22} />\n Jupyter\n </span>\n </Button>\n </div>\n );\n}\n\nexport default JupyterButton;\n","import Query from '../../../../../utils/navigation/content/table/query';\nimport {updateTableData} from '../../../../../store/actions/navigation/content/table/table';\nimport {\n CLOSE_OFFSET_SELECTOR_MODAL,\n MOVE_OFFSET,\n OPEN_OFFSET_SELECTOR_MODAL,\n} from '../../../../../constants/navigation/content/table';\nimport {\n getBottomBoundKey,\n getOffsetValue,\n getRowCount,\n getUpperBoundKey,\n} from '../../../../../store/selectors/navigation/content/table';\nimport {\n getIsDynamic,\n getPageSize,\n getYqlTypes,\n} from '../../../../../store/selectors/navigation/content/table-ts';\n\nexport function moveOffsetToStart() {\n return (dispatch) => {\n dispatch({\n type: MOVE_OFFSET,\n data: {\n offsetValue: '',\n },\n });\n dispatch(updateTableData());\n };\n}\n\nexport function moveOffsetToLeft() {\n return (dispatch, getState) => {\n const state = getState();\n const yqlTypes = getYqlTypes(state);\n const isDynamic = getIsDynamic(state);\n\n if (isDynamic) {\n dispatch({\n type: MOVE_OFFSET,\n data: {\n offsetValue: Query.prepareKey(getBottomBoundKey(state), yqlTypes),\n moveBackward: true,\n },\n });\n } else {\n const pageSize = getPageSize(state);\n const offsetValue = getOffsetValue(state);\n\n dispatch({\n type: MOVE_OFFSET,\n data: {\n offsetValue: Math.max(offsetValue - pageSize, 0) || '',\n },\n });\n }\n dispatch(updateTableData());\n };\n}\n\nexport function moveOffsetToRight() {\n return (dispatch, getState) => {\n const state = getState();\n const yqlTypes = getYqlTypes(state);\n const isDynamic = getIsDynamic(state);\n\n if (isDynamic) {\n dispatch({\n type: MOVE_OFFSET,\n data: {\n offsetValue: Query.prepareKey(getUpperBoundKey(state), yqlTypes),\n },\n });\n } else {\n const pageSize = getPageSize(state);\n const offsetValue = getOffsetValue(state);\n const rowCount = getRowCount(state);\n\n dispatch({\n type: MOVE_OFFSET,\n data: {\n offsetValue: Math.min(offsetValue + pageSize, Math.max(rowCount - pageSize, 0)),\n },\n });\n }\n dispatch(updateTableData());\n };\n}\n\nexport function moveOffsetToEnd() {\n return (dispatch, getState) => {\n const state = getState();\n const rowCount = getRowCount(state);\n const isDynamic = getIsDynamic(state);\n const pageSize = getPageSize(state);\n\n if (isDynamic) {\n dispatch({\n type: MOVE_OFFSET,\n data: {\n offsetValue: '',\n moveBackward: true,\n },\n });\n } else {\n dispatch({\n type: MOVE_OFFSET,\n data: {\n offsetValue: Math.max(rowCount - pageSize, 0),\n },\n });\n }\n dispatch(updateTableData());\n };\n}\n\nexport function moveOffset(offsetValue) {\n return (dispatch, getState) => {\n const state = getState();\n const prevOffsetValue = getOffsetValue(state);\n\n if (offsetValue !== prevOffsetValue) {\n dispatch({\n type: MOVE_OFFSET,\n data: {offsetValue: offsetValue || ''},\n });\n dispatch(updateTableData());\n }\n };\n}\n\nexport function openOffsetSelectorModal() {\n return {\n type: OPEN_OFFSET_SELECTOR_MODAL,\n };\n}\n\nexport function closeOffsetSelectorModal() {\n return {\n type: CLOSE_OFFSET_SELECTOR_MODAL,\n };\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\n\nimport Icon from '../../../../../components/Icon/Icon';\nimport Button from '../../../../../components/Button/Button';\n\nimport {openOffsetSelectorModal} from '../../../../../store/actions/navigation/content/table/pagination';\nimport {\n getAllColumns,\n getVisibleColumns,\n} from '../../../../../store/selectors/navigation/content/table';\n\nOffsetSelectorButton.propTypes = {\n // from parent\n disabled: PropTypes.bool,\n\n // from connect\n visibleColumns: PropTypes.array.isRequired,\n allColumns: PropTypes.array.isRequired,\n loading: PropTypes.bool.isRequired,\n\n openOffsetSelectorModal: PropTypes.func.isRequired,\n};\n\nfunction OffsetSelectorButton({\n loading,\n disabled,\n allColumns,\n visibleColumns,\n openOffsetSelectorModal,\n}) {\n return (\n <Button\n size=\"m\"\n disabled={loading || disabled}\n title=\"Edit offset\"\n onClick={openOffsetSelectorModal}\n pin=\"round-clear\"\n >\n <Icon awesome=\"key\" />\n &nbsp; Keys &nbsp;\n <span className=\"elements-secondary-text\">\n {visibleColumns.length + '/' + allColumns.length}\n </span>\n </Button>\n );\n}\n\nconst mapStateToProps = (state) => {\n const {loading} = state.navigation.content.table;\n\n const visibleColumns = getVisibleColumns(state).filter((column) => column.keyColumn);\n const allColumns = getAllColumns(state).filter((column) => column.keyColumn);\n\n return {visibleColumns, loading, allColumns};\n};\n\nconst mapDispatchToProps = {\n openOffsetSelectorModal,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(OffsetSelectorButton);\n","/* eslint-disable react/prop-types */\nimport React, {useState} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport {RangeInputPicker} from '../../../../../components/common/RangeInputPicker';\nimport Button from '../../../../../components/Button/Button';\nimport Filter from '../../../../../components/Filter/Filter';\nimport Icon from '../../../../../components/Icon/Icon';\nimport OffsetSelectorButton from '../../../../../pages/navigation/content/Table/TableOverview/OffsetSelectorButton';\n\nimport {\n getOffsetValue,\n getProgressWidth,\n getRowCount,\n} from '../../../../../store/selectors/navigation/content/table';\nimport {getIsDynamic} from '../../../../../store/selectors/navigation/content/table-ts';\nimport {moveOffset} from '../../../../../store/actions/navigation/content/table/pagination';\n\nimport './TableOverview.scss';\n\nTableOverview.propTypes = {\n // from parent\n block: PropTypes.func.isRequired,\n\n // from connect\n isDynamic: PropTypes.bool.isRequired,\n rowCount: PropTypes.number.isRequired,\n progressWidth: PropTypes.string.isRequired,\n offsetValue: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n moveOffset: PropTypes.func.isRequired,\n};\n\nconst renderInput = (props, {onEndEditing, onUpdate}) => {\n const {offsetValue, rowCount, isDynamic} = props;\n\n return isDynamic ? (\n <Filter\n iconLeft={<Icon awesome=\"key\" />}\n onBlur={(v) => {\n onEndEditing();\n onUpdate(v);\n }}\n value={offsetValue}\n placeholder=\"\"\n size=\"m\"\n pin={'brick-clear'}\n hasClear={false}\n />\n ) : (\n <RangeInputPicker\n iconLeft={<Icon awesome=\"hashtag\" />}\n onOutsideClick={onEndEditing}\n onAfterUpdate={onUpdate}\n onSubmit={onUpdate}\n maxValue={Math.max(0, rowCount - 1)}\n infoPointsCount={0}\n value={offsetValue}\n autoFocus\n size=\"m\"\n />\n );\n};\n\nconst renderPlaceholder = (props, handleStartEditing) => {\n const {block, isDynamic, offsetValue, progressWidth: width} = props;\n\n return (\n <div className={block('query-current')} onClick={handleStartEditing}>\n <Icon awesome={isDynamic ? 'key' : 'hashtag'} />\n {offsetValue || 'No offset'}\n {!isDynamic && <div className={block('query-progress')} style={{width}} />}\n </div>\n );\n};\n\nfunction TableOverview(props) {\n const {block, moveOffset, isDynamic} = props;\n const [editing, changeEditing] = useState(false);\n\n const onUpdate = (value) => moveOffset(value);\n\n const onEndEditing = () => {\n changeEditing(false);\n };\n\n const onStartEditing = () => {\n changeEditing(true);\n };\n\n return (\n <div className={block('input', {edit: editing, dynamic: isDynamic})}>\n {isDynamic && <OffsetSelectorButton disabled={editing} />}\n {editing\n ? renderInput(props, {onEndEditing, onUpdate})\n : renderPlaceholder(props, onStartEditing)}\n {isDynamic && (\n <Button\n size=\"m\"\n view=\"action\"\n title=\"Confirm\"\n pin=\"clear-round\"\n disabled={!editing}\n >\n Confirm\n </Button>\n )}\n </div>\n );\n}\n\nconst mapStateToProps = (state) => {\n const progressWidth = getProgressWidth(state);\n const offsetValue = getOffsetValue(state);\n const isDynamic = getIsDynamic(state);\n const rowCount = getRowCount(state);\n\n return {progressWidth, offsetValue, rowCount, isDynamic};\n};\n\nconst mapDispatchToProps = {\n moveOffset,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(TableOverview);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\n\nimport Pagination from '../../../../../components/Pagination/Pagination';\n\nimport {getIsDynamic} from '../../../../../store/selectors/navigation/content/table-ts';\nimport {\n getIsPaginationDisabled,\n getIsTableEndReached,\n getOffsetValue,\n} from '../../../../../store/selectors/navigation/content/table';\nimport {\n moveOffsetToEnd,\n moveOffsetToLeft,\n moveOffsetToRight,\n moveOffsetToStart,\n} from '../../../../../store/actions/navigation/content/table/pagination';\n\nPaginator.propTypes = {\n // from parent\n block: PropTypes.func.isRequired,\n\n // from connect\n error: PropTypes.bool.isRequired,\n\n isPaginationDisabled: PropTypes.bool.isRequired,\n isTableEndReached: PropTypes.bool.isRequired,\n isDynamic: PropTypes.bool.isRequired,\n\n previousOffset: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n offsetValue: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n moveOffsetToStart: PropTypes.func.isRequired,\n moveOffsetToLeft: PropTypes.func.isRequired,\n moveOffsetToRight: PropTypes.func.isRequired,\n moveOffsetToEnd: PropTypes.func.isRequired,\n};\n\nfunction Paginator(props) {\n const {block, error, isPaginationDisabled, isTableEndReached, offsetValue, isDynamic} = props;\n const {moveOffsetToStart, moveOffsetToLeft, moveOffsetToRight, moveOffsetToEnd} = props;\n const tooltip = isPaginationDisabled\n ? 'Select every key column in Column Selector to enable pagination'\n : undefined;\n // TODO: use when descending sorting will be implemented on backend\n\n return (\n <Pagination\n size=\"m\"\n tooltip={tooltip}\n className={block('pagination')}\n first={{\n handler: moveOffsetToStart,\n hotkeyHandler: moveOffsetToStart,\n hotkeyScope: 'all',\n hotkey: 'ctrl+shift+left, command+shift+left',\n disabled: !offsetValue || isPaginationDisabled,\n }}\n previous={{\n handler: moveOffsetToLeft,\n hotkeyHandler: moveOffsetToLeft,\n hotkeyScope: 'all',\n hotkey: 'ctrl+left, command+left',\n disabled: isDynamic || !offsetValue || isPaginationDisabled,\n // disabled: isDynamic && error || moveBackwardDisabled || !offsetValue || isPaginationDisabled,\n }}\n next={{\n handler: moveOffsetToRight,\n hotkeyHandler: moveOffsetToRight,\n hotkeyScope: 'all',\n hotkey: 'ctrl+right, command+right',\n disabled: (isDynamic && error) || isTableEndReached || isPaginationDisabled,\n }}\n last={{\n handler: moveOffsetToEnd,\n hotkeyHandler: moveOffsetToEnd,\n hotkeyScope: 'all',\n hotkey: 'ctrl+shift+right, command+shift+right',\n disabled: isDynamic || isTableEndReached || isPaginationDisabled,\n // disabled: isTableEndReached || moveBackwardDisabled || isPaginationDisabled,\n }}\n />\n );\n}\n\nconst mapStateToProps = (state) => {\n const {error} = state.navigation.content.table;\n\n const isPaginationDisabled = getIsPaginationDisabled(state);\n const isTableEndReached = getIsTableEndReached(state);\n const offsetValue = getOffsetValue(state);\n const isDynamic = getIsDynamic(state);\n\n return {\n error,\n isDynamic,\n offsetValue,\n isPaginationDisabled,\n isTableEndReached,\n };\n};\n\nconst mapDispatchToProps = {\n moveOffsetToStart,\n moveOffsetToLeft,\n moveOffsetToRight,\n moveOffsetToEnd,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Paginator);\n","import React from 'react';\nimport UIFactory, {YQLButtonProps} from '../../UIFactory';\n\nexport function YQLKitButton(props: YQLButtonProps) {\n return <React.Fragment>{UIFactory.yqlWidgetSetup?.renderButton(props)}</React.Fragment>;\n}\n","import {createSelector} from 'reselect';\n\nimport UIFactory from '../../../UIFactory';\nimport {isDeveloper} from '../../../store/selectors/global/is-developer';\nimport {getSettingsData} from './settings-base';\n\nexport const getNavigationSqlService = createSelector(\n [getSettingsData, isDeveloper],\n (data, isAdmin) => {\n const value = data['global::navigation::sqlService'];\n const isQtKitEnabled = value?.length ? -1 !== value.indexOf('qtkit') : isAdmin;\n const isYqlKitEnabled = value?.length ? -1 !== value.indexOf('yqlkit') : true;\n\n const hasYqlWidget = Boolean(UIFactory.yqlWidgetSetup);\n return {\n value,\n isQtKitEnabled: !hasYqlWidget || isQtKitEnabled,\n isYqlKitEnabled: hasYqlWidget && isYqlKitEnabled,\n hasYqlWidget,\n };\n },\n);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport {Button} from '@gravity-ui/uikit';\nimport {useDispatch, useSelector} from '../../store/redux-hooks';\n\nimport Icon from '../../components/Icon/Icon';\nimport {YQLKitButton} from '../YQLKitButton/YQLKitButton';\nimport {QueryWidgetLazy} from '../../pages/query-tracker/QueryWidget/side-panel';\nimport {QueryEngine} from '../../../shared/constants/engines';\nimport {createQueryFromTablePath} from '../../store/actions/query-tracker/query';\nimport {createNewQueryUrl} from '../../pages/query-tracker/utils/navigation';\nimport {getNavigationSqlService} from '../../store/selectors/settings/navigation';\nimport {getPath} from '../../store/selectors/navigation';\nimport UIFactory from '../../UIFactory';\nimport {useSidePanel} from '../../hooks/use-side-panel';\nimport {getCluster} from '../../store/selectors/global/cluster';\nimport {RootState} from '../../store/reducers';\nimport {NavigationState} from '../../store/reducers/navigation/navigation';\nimport {setNavigationSidePanelMode} from '../../store/actions/navigation';\n\nimport './OpenQueryButtons.scss';\n\nconst b = cn('yt-open-query-buttons');\n\nfunction useNavigationSidePanelMode() {\n const dispatch = useDispatch();\n\n const path: string = useSelector(getPath);\n const cluster = useSelector(getCluster);\n const panelMode = useSelector((state: RootState) => state.navigation.navigation.sidePanelMode);\n\n const setPanelMode = React.useCallback(\n (mode: NavigationState['sidePanelMode']) => {\n dispatch(setNavigationSidePanelMode(mode));\n },\n [dispatch],\n );\n\n return {path, cluster, panelMode, setPanelMode};\n}\n\nexport type OpenQueryButtonProps = {\n className?: string;\n autoOpen?: boolean;\n};\n\nexport function OpenQueryButtonsContent() {\n const dispatch = useDispatch();\n const {panelMode, setPanelMode, path, cluster} = useNavigationSidePanelMode();\n\n const onClose = React.useCallback(() => {\n setPanelMode(undefined);\n }, [setPanelMode]);\n\n const {openWidget, closeWidget, widgetContent} = useSidePanel(panelMode + '_query_widget', {\n renderContent({visible}) {\n return panelMode === 'qt' ? (\n <QueryWidgetLazy onClose={onClose} />\n ) : (\n UIFactory.yqlWidgetSetup?.renderWidget({visible, onClose})\n );\n },\n });\n\n React.useEffect(() => {\n if (panelMode === undefined) {\n closeWidget();\n return;\n }\n\n if (panelMode === 'qt') {\n dispatch(createQueryFromTablePath(QueryEngine.YQL, cluster, path));\n }\n openWidget();\n }, [panelMode, openWidget, closeWidget]);\n\n return widgetContent;\n}\n\nexport function OpenQueryButtons({className, autoOpen}: OpenQueryButtonProps) {\n const {path, cluster, panelMode, setPanelMode} = useNavigationSidePanelMode();\n\n const onOpenYqlKit = React.useCallback(() => setPanelMode('yqlkit'), []);\n const onClose = React.useCallback(() => setPanelMode(undefined), []);\n\n const {isQtKitEnabled, isYqlKitEnabled} = useSelector(getNavigationSqlService);\n\n const allowQtAutoOpen = autoOpen && isQtKitEnabled;\n\n React.useEffect(() => {\n if (autoOpen) {\n setPanelMode(allowQtAutoOpen ? 'qt' : 'yqlkit');\n }\n }, [autoOpen, allowQtAutoOpen, setPanelMode]);\n\n return (\n <div className={b(null, className)}>\n {isQtKitEnabled && (\n <div className={b('query')}>\n <Button\n onClick={() => {\n setPanelMode(panelMode === 'qt' ? undefined : 'qt');\n }}\n pin=\"round-clear\"\n view=\"action\"\n className={b('btn')}\n selected={panelMode === 'qt'}\n title=\"Open Queries widget\"\n qa=\"qa:navigation:open-queries-widget\"\n >\n QT Kit\n </Button>\n <Button\n className={b('btn')}\n pin=\"clear-round\"\n view=\"action\"\n href={createNewQueryUrl(cluster, QueryEngine.YQL, {path})}\n target=\"_blank\"\n title=\"Open Queries page\"\n >\n <Icon awesome=\"table\" />\n </Button>\n </div>\n )}\n {isYqlKitEnabled && (\n <YQLKitButton\n opened={panelMode === 'yqlkit'}\n onOpen={onOpenYqlKit}\n onClose={onClose}\n />\n )}\n </div>\n );\n}\n","export const NAVIGATION_ATTRIBUTES_EDITOR_REQUEST = 'NAVIGATION_ATTRIBUTES_EDITOR_REQUEST';\nexport const NAVIGATION_ATTRIBUTES_EDITOR_SUCCESS = 'NAVIGATION_ATTRIBUTES_EDITOR_SUCCESS';\nexport const NAVIGATION_ATTRIBUTES_EDITOR_ERROR = 'NAVIGATION_ATTRIBUTES_EDITOR_ERROR';\nexport const NAVIGATION_ATTRIBUTES_EDITOR_PARTIAL = 'NAVIGATION_ATTRIBUTES_EDITOR_PARTIAL';\n","import forEach_ from 'lodash/forEach';\n\nimport {RootState} from '../../../../store/reducers';\nimport {createSelector} from 'reselect';\nimport ypath from '../../../../common/thor/ypath';\n\nexport const getNavigationAttributesData = (state: RootState) =>\n state.navigation.modals.attributesEditor;\nexport const getNavigationAttributesEditorAttributes = (state: RootState) =>\n state.navigation.modals.attributesEditor.attributesMap;\nexport const getNavigationAttributesEditorPath = (state: RootState) =>\n state.navigation.modals.attributesEditor.paths;\nexport const getNavigationAttributesEditorLoading = (state: RootState) =>\n state.navigation.modals.attributesEditor.loading;\nexport const getNavigationAttributesEditorLoaded = (state: RootState) =>\n state.navigation.modals.attributesEditor.loaded;\nexport const getNavigationAttributesEditorError = (state: RootState) =>\n state.navigation.modals.attributesEditor.error;\nexport const getNavigationAttributesEditorVisible = (state: RootState) =>\n state.navigation.modals.attributesEditor.visible;\n\nconst getNavigationAttributesEidtorNodesByTypes = createSelector(\n [getNavigationAttributesEditorAttributes],\n (attrsMap) => {\n const staticTables: Array<string> = [];\n const mapNodes: Array<string> = [];\n const dynamicTables: Array<string> = [];\n\n forEach_(attrsMap, (attrs, path) => {\n const type = ypath.getValue(attrs || {}, '/@type');\n if (type === 'map_node') {\n mapNodes.push(path);\n } else if (['table', 'replicated_table'].includes(type)) {\n if (ypath.getValue(attrs, '/@dynamic')) {\n dynamicTables.push(path);\n } else {\n staticTables.push(path);\n }\n }\n });\n return {staticTables, dynamicTables, mapNodes};\n },\n);\n\nexport const getNavigationAttributesEditorStaticTables = createSelector(\n [getNavigationAttributesEidtorNodesByTypes],\n ({staticTables}) => {\n return staticTables;\n },\n);\n\nexport const getNavigationAttributesEditorDynamicTables = createSelector(\n [getNavigationAttributesEidtorNodesByTypes],\n ({dynamicTables}) => {\n return dynamicTables;\n },\n);\n\nexport const getNavigationAttributesEditorMapNodes = createSelector(\n [getNavigationAttributesEidtorNodesByTypes],\n ({mapNodes}) => {\n return mapNodes;\n },\n);\n","import React from 'react';\n\nimport forEach_ from 'lodash/forEach';\nimport isEmpty_ from 'lodash/isEmpty';\nimport join_ from 'lodash/join';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport {ThunkAction} from 'redux-thunk';\n\nimport ypath from '../../../../common/thor/ypath';\n\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {\n NAVIGATION_ATTRIBUTES_EDITOR_ERROR,\n NAVIGATION_ATTRIBUTES_EDITOR_PARTIAL,\n NAVIGATION_ATTRIBUTES_EDITOR_REQUEST,\n NAVIGATION_ATTRIBUTES_EDITOR_SUCCESS,\n} from '../../../../constants/navigation/modals/attributes-editor';\nimport {RootState} from '../../../../store/reducers';\nimport {NavAttrEditorAction} from '../../../../store/reducers/navigation/modals/attributes-editor';\nimport {\n getNavigationAttributesEditorAttributes,\n getNavigationAttributesEditorPath,\n getNavigationAttributesEditorStaticTables,\n} from '../../../../store/selectors/navigation/modals/attributes-editor';\nimport {getBatchError, showErrorPopup, wrapApiPromiseByToaster} from '../../../../utils/utils';\nimport {OperationShortInfo} from '../../../../pages/components/OperationShortInfo/OperationShortInfo';\nimport {AppStoreProvider} from '../../../../containers/App/AppStoreProvider';\nimport {updateView} from '../index';\nimport Link from '../../../../components/Link/Link';\nimport {getCluster} from '../../../selectors/global';\nimport {makeUiMarker, prepareSetCommandForBatch} from '../../../../utils/cypress-attributes';\nimport {Page} from '../../../../constants';\nimport {executeBatchWithRetries} from '../../execute-batch';\nimport {YTApiId} from '../../../../rum/rum-wrap-api';\nimport {BatchSubRequest} from '../../../../../shared/yt-types';\nimport {toaster} from '../../../../utils/toaster';\n\ntype ActionType<R = any> = ThunkAction<R, RootState, any, NavAttrEditorAction>;\n\nconst EDITABLE_ATTRIBUTES = [\n 'type',\n 'account',\n 'primary_medium',\n 'optimize_for',\n 'compression_codec',\n 'erasure_codec',\n 'replication_factor',\n 'tablet_cell_bundle',\n 'in_memory_mode',\n 'dynamic',\n 'sorted',\n 'annotation',\n 'annotation_path',\n 'expiration_time',\n 'expiration_timeout',\n];\n\nexport function showNavigationAttributesEditor(paths: Array<string>): ActionType {\n return (dispatch) => {\n dispatch({type: NAVIGATION_ATTRIBUTES_EDITOR_REQUEST});\n const requests = map_(paths, (path) => {\n return {\n command: 'get' as const,\n parameters: {\n path: path + '/@',\n attributes: EDITABLE_ATTRIBUTES,\n },\n };\n });\n return executeBatchWithRetries(YTApiId.attributesEditorGetAttrs, requests, {\n errorTitle: 'Attributes cannot be loaded',\n })\n .then((results: any) => {\n const error = getBatchError(results, 'Attributes cannot be loaded');\n if (error) {\n throw error;\n }\n const attributesMap = reduce_(\n paths,\n (acc, path, index) => {\n acc[path] = {$attributes: results[index].output};\n return acc;\n },\n {} as any,\n );\n dispatch({\n type: NAVIGATION_ATTRIBUTES_EDITOR_SUCCESS,\n data: {attributesMap, paths},\n });\n dispatch({\n type: NAVIGATION_ATTRIBUTES_EDITOR_PARTIAL,\n data: {visible: true},\n });\n })\n .catch((e: any) => {\n dispatch({type: NAVIGATION_ATTRIBUTES_EDITOR_ERROR, data: e});\n toaster.add({\n name: 'show_attrs_editor_' + join_(paths),\n theme: 'danger',\n title: 'Attributes cannot be loaded',\n content: e?.message,\n actions: [\n {\n label: ' [Details]',\n onClick: () => showErrorPopup(e),\n },\n ],\n autoHiding: false,\n });\n });\n };\n}\n\nexport function hideNavigationAttributesEditor() {\n return {\n type: NAVIGATION_ATTRIBUTES_EDITOR_PARTIAL,\n data: {paths: undefined, visible: false},\n };\n}\n\nconst EDIT_MARKER = makeUiMarker(`${Page.NAVIGATION}:edit-attributes`);\nconst EDIT_MERGE_MARKER = makeUiMarker(`${Page.NAVIGATION}:edit-attributes:merge`);\n\nexport function navigationSetNodeAttributes(\n generalAttrs: any,\n storageAttrs: object,\n runMerge: boolean,\n): ActionType<Promise<unknown>> {\n return (dispatch, getState) => {\n const paths = getNavigationAttributesEditorPath(getState());\n\n if (isEmpty_({...generalAttrs, ...storageAttrs})) {\n console.warn(\n `Please check your parameters: ${JSON.stringify({\n path: paths,\n attributes: generalAttrs,\n })}`,\n );\n return Promise.resolve();\n }\n\n const cluster = getCluster(getState());\n\n const attributesMap = getNavigationAttributesEditorAttributes(getState());\n const {in_memory_mode, tablet_cell_bundle, ...restGeneralAttrs} = generalAttrs;\n\n const requests = reduce_(\n paths,\n (acc, path) => {\n const attrs = attributesMap[path] || {};\n const newAttrs = {...restGeneralAttrs, ...storageAttrs};\n const type = ypath.getValue(attrs, '/@type');\n const isDynamic = ypath.getValue(attrs, '/@dynamic');\n const isDynTable = type === 'table' && isDynamic;\n if (in_memory_mode !== undefined && isDynTable) {\n Object.assign(newAttrs, {in_memory_mode});\n }\n if (tablet_cell_bundle !== undefined && (type === 'map_node' || isDynTable)) {\n Object.assign(newAttrs, {tablet_cell_bundle});\n }\n\n forEach_(newAttrs, (value, key) => {\n acc.push(prepareSetCommandForBatch(`${path}/@${key}`, value, EDIT_MARKER));\n });\n return acc;\n },\n [] as Array<BatchSubRequest>,\n );\n\n const staticTables = getNavigationAttributesEditorStaticTables(getState());\n\n return executeBatchWithRetries(YTApiId.attributesEditorSet, requests, {\n errorTitle: `Cannot set attributes for ${paths}`,\n })\n .then((res): Promise<unknown> => {\n const error = getBatchError(res, `Cannot set attributes for ${paths}`);\n if (error) {\n dispatch({\n type: NAVIGATION_ATTRIBUTES_EDITOR_ERROR,\n data: error,\n });\n return Promise.reject(error);\n }\n if (!runMerge || !staticTables.length || isEmpty_(storageAttrs)) {\n return Promise.resolve(res);\n }\n\n const prepareMergeParams = (path: string) => {\n return {\n spec: Object.assign({\n input_table_paths: [path],\n output_table_path: path,\n force_transform: true,\n mode: 'ordered',\n }),\n ...EDIT_MERGE_MARKER,\n };\n };\n\n if (staticTables.length < 6) {\n const promises = map_(staticTables, (path) => {\n return wrapApiPromiseByToaster(yt.v3.merge(prepareMergeParams(path)), {\n toasterName: 'storage_attrs_' + path,\n successContent(res: string) {\n const opId = JSON.parse(res);\n return (\n <AppStoreProvider>\n <OperationShortInfo\n id={opId}\n output_attribute_name={'/spec/output_table_path'}\n />\n </AppStoreProvider>\n );\n },\n successTitle: 'Merge operation is started',\n errorTitle: 'Merge operation is failed',\n autoHide: false,\n });\n });\n return Promise.all(promises);\n } else {\n const requests = map_(staticTables, (path) => {\n return {\n command: 'merge' as const,\n parameters: prepareMergeParams(path),\n };\n });\n return executeBatchWithRetries(YTApiId.attributesEditorMerge, requests, {\n errorTitle: 'Failed to start some operations',\n }).then((results: any) => {\n const error = getBatchError(results, 'Failed to start some operations');\n if (error) {\n throw error;\n }\n\n toaster.add({\n theme: 'success',\n name: 'merge_' + staticTables.join(','),\n title: `${staticTables.length} operations are started`,\n content: (\n <span>\n Please visit\n <Link url={`/${cluster}/operations`}> operations </Link>\n page to see more details\n </span>\n ),\n });\n });\n }\n })\n .then(() => {\n dispatch(updateView());\n dispatch({\n type: NAVIGATION_ATTRIBUTES_EDITOR_PARTIAL,\n data: {paths: undefined, visible: false},\n });\n })\n .catch((e: any) => {\n dispatch({\n type: NAVIGATION_ATTRIBUTES_EDITOR_ERROR,\n data: e,\n });\n return Promise.reject(e);\n });\n };\n}\n","import React from 'react';\nimport {TABLE_ERASE_MODAL_PARTIAL} from '../../../../constants/navigation/modals/table-erase-modal';\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport {RootState} from '../../../reducers';\nimport {ThunkAction} from 'redux-thunk';\nimport {wrapApiPromiseByToaster} from '../../../../utils/utils';\nimport {AppStoreProvider} from '../../../../containers/App/AppStoreProvider';\nimport {OperationShortInfo} from '../../../../pages/components/OperationShortInfo/OperationShortInfo';\nimport {makeUiMarker} from '../../../../utils/cypress-attributes';\nimport {Page} from '../../../../constants';\n\nexport function showTableEraseModal(path: string) {\n return {type: TABLE_ERASE_MODAL_PARTIAL, data: {visible: true, path}};\n}\n\nexport function hideTableEraseModal() {\n return {\n type: TABLE_ERASE_MODAL_PARTIAL,\n data: {visible: false, path: undefined},\n };\n}\n\ntype EraseThunkAction = ThunkAction<any, RootState, any, any>;\n\nexport function runTableErase({\n path,\n from,\n to,\n combine_chunks,\n}: {\n path: string;\n from?: number;\n to?: number;\n combine_chunks?: boolean;\n}): EraseThunkAction {\n return () => {\n if (!path) {\n throw Error('Path cannot be empty for \"erase\" operation');\n }\n let range = '';\n if (!isNaN(from!) && !isNaN(to!)) {\n range = `[#${from}:#${to}]`;\n } else if (!isNaN(from!)) {\n range = `[#${from}:]`;\n } else if (!isNaN(to!)) {\n range = `[:#${to}]`;\n }\n\n return wrapApiPromiseByToaster(\n yt.v3.erase({\n spec: {\n table_path: path + range,\n combine_chunks,\n },\n ...makeUiMarker(`${Page.NAVIGATION}:erase`),\n }),\n {\n toasterName: 'table_erase_' + path,\n successContent(res: string) {\n const opId = JSON.parse(res);\n return (\n <AppStoreProvider>\n <OperationShortInfo id={opId} type={'erase'} />\n </AppStoreProvider>\n );\n },\n successTitle: 'Erase operation is started',\n errorTitle: 'Erase operation is failed',\n autoHide: false,\n },\n );\n };\n}\n","import unipika from '../../../../common/thor/unipika';\nimport ypath from '../../../../common/thor/ypath';\nimport {prepareNavigationState} from '../../../../utils/navigation';\n\nexport type BaseMapNode = {\n $attributes?: Record<string, unknown>;\n};\n\nexport class Node {\n static CAPTION_PRINT_SETTINGS = {\n indent: 0,\n break: false,\n binaryAsHex: false,\n highlightControlCharacter: true,\n escapeWhitespace: true,\n format: 'json',\n };\n\n static TITLE_PRINT_SETTINGS = Object.assign(\n {\n asHTML: false,\n },\n Node.CAPTION_PRINT_SETTINGS,\n );\n\n static SUPPORTS_RESOURCE_USAGE = {\n table: true,\n file: true,\n journal: true,\n document: true,\n };\n\n static prepareTitle(name: string) {\n return unipika.prettyprint(name, Node.TITLE_PRINT_SETTINGS);\n }\n\n static prepareCaption(name: string) {\n return unipika.prettyprint(name, Node.CAPTION_PRINT_SETTINGS);\n }\n\n static getResource(node: any, name: string) {\n return Node.SUPPORTS_RESOURCE_USAGE[\n ypath.getValue(node, '/@type') as keyof typeof Node.SUPPORTS_RESOURCE_USAGE\n ]\n ? ypath.getValue(node, '/@resource_usage/' + name)\n : ypath.getValue(node.recursiveResourceUsage, '/' + name);\n }\n\n name: string;\n $value: string;\n $attributes?: Record<string, string>;\n type: string;\n iconType: string;\n title: string;\n caption: string;\n titleUnquoted: string;\n parsedPath: ReturnType<typeof ypath.YPath.clone>;\n parsedPathError?: {\n message: string;\n inner_errors: unknown[];\n };\n path: string;\n pathState: ReturnType<typeof prepareNavigationState>;\n recursiveResourceUsage: boolean;\n dataWeight: number;\n size: number;\n sizePerMedium: number;\n chunks: number;\n nodes: number;\n tabletStaticMemory: number;\n tablets: number;\n masterMemory: number;\n locks: number;\n account: string;\n modified: string;\n created: string;\n linkParsedPath?: ReturnType<typeof ypath.YPath.clone>;\n linkPathState?: ReturnType<typeof prepareNavigationState>;\n targetPath?: string;\n targetPathBroken?: boolean;\n targetPathState?: ReturnType<typeof prepareNavigationState>;\n\n dynamic?: boolean;\n rows?: number;\n unmergedRows?: number;\n chunkRows?: number;\n tabletState?: string;\n\n constructor(\n data: string,\n params: {parsedPath: string; transaction: string; contentMode: string},\n ) {\n const {parsedPath, transaction, contentMode} = params;\n\n const name = ypath.getValue(data);\n const attributes = ypath.getAttributes(data);\n\n this.$value = this.name = name;\n this.$attributes = attributes;\n\n this.type = attributes.type;\n this.iconType = attributes.type;\n\n this.title = Node.prepareTitle(this.name);\n this.caption = Node.prepareCaption(this.name);\n this.titleUnquoted = this.title.slice(1, -1);\n\n try {\n this.parsedPath = ypath.YPath.clone(parsedPath).concat(\n '/' + ypath.YPath.escapeSpecialCharacters(JSON.parse(this.title)),\n );\n } catch (e) {\n this.parsedPath = ypath.YPath.clone(parsedPath).concat(\n '/' + ypath.YPath.escapeSpecialCharacters(this.title),\n );\n this.parsedPathError = {\n message: `Node name cannot be parsed, try to enable 'Escape and highlight' option in your settings. `,\n inner_errors: [e],\n };\n }\n this.path = this.parsedPath.stringify();\n this.pathState = prepareNavigationState(\n this.parsedPath,\n transaction,\n undefined,\n contentMode,\n );\n\n // RESOURCES\n this.recursiveResourceUsage = attributes.recursive_resource_usage;\n\n this.dataWeight = ypath.getValue(this, '/@data_weight');\n this.size = Node.getResource(this, 'disk_space');\n this.sizePerMedium = Node.getResource(this, 'disk_space_per_medium');\n this.chunks = Node.getResource(this, 'chunk_count');\n this.nodes = Node.getResource(this, 'node_count');\n this.tabletStaticMemory = Node.getResource(this, 'tablet_static_memory');\n this.tablets = Node.getResource(this, 'tablet_count');\n this.masterMemory = Node.getResource(this, 'master_memory');\n\n this.locks = attributes.lock_count;\n\n this.account = attributes.account;\n this.modified = attributes.modification_time;\n this.created = attributes.creation_time;\n\n // LINKS\n if (this.type === 'link') {\n this.linkParsedPath = ypath.YPath.clone(this.parsedPath).concat('&');\n this.linkPathState = prepareNavigationState(this.linkParsedPath, transaction);\n this.targetPath = attributes.target_path;\n this.targetPathBroken = attributes.broken;\n this.targetPathState = this.targetPath\n ? prepareNavigationState(\n ypath.YPath.create(this.targetPath, 'absolute'),\n transaction,\n )\n : undefined;\n }\n\n // TABLE\n if (this.type === 'table') {\n this.dynamic = attributes.dynamic;\n this.rows = attributes.row_count;\n this.unmergedRows = attributes.unmerged_row_count;\n this.chunkRows = attributes.chunk_row_count;\n this.iconType = this.dynamic ? 'table_dynamic' : 'table';\n\n if (this.dynamic) {\n this.tabletState = attributes.tablet_state;\n }\n }\n }\n}\n","import chunk_ from 'lodash/chunk';\nimport filter_ from 'lodash/filter';\nimport findIndex_ from 'lodash/findIndex';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport ypath from '../../../../common/thor/ypath';\nimport {prepareRequest, saveRequestCancellation} from '../../../../utils/navigation';\nimport {\n APPLY_CUSTOM_SORT,\n FETCH_NODES,\n NAVIGATION_MAP_NODE_TABLE_ID,\n SELECT_ALL,\n SET_CONTENT_MODE,\n SET_MEDIUM_TYPE,\n SET_SELECTED_ITEM,\n SET_TEXT_FILTER,\n UPDATE_RESOURCE_USAGE,\n} from '../../../../constants/navigation';\nimport {\n getFilteredNodes,\n getLastSelected,\n getNodesData,\n getSelected,\n getSortedNodes,\n isRootNode,\n shouldApplyCustomSort,\n} from '../../../../store/selectors/navigation/content/map-node';\nimport {getCluster} from '../../../../store/selectors/global';\nimport {getPath, getTransaction} from '../../../../store/selectors/navigation';\nimport {changeColumnSortOrder} from '../../../../store/actions/tables';\nimport {RumWrapper, YTApiId, ytApiV3Id} from '../../../../rum/rum-wrap-api';\nimport {getBatchError, showErrorPopup} from '../../../../utils/utils';\nimport {RumMeasureTypes} from '../../../../rum/rum-measure-types';\nimport hammer from '../../../../common/hammer';\nimport {GENERIC_ERROR_MESSAGE} from '../../../../constants';\nimport {waitForFontFamilies} from '../../../../store/actions/global/fonts';\nimport UIFactory from '../../../../UIFactory';\nimport {toaster} from '../../../../utils/toaster';\n\nfunction getList(path, transaction, cluster) {\n const id = new RumWrapper(cluster, RumMeasureTypes.NAVIGATION_CONTENT_MAP_NODE);\n return id.fetch(\n YTApiId.navigationListNodes,\n ytApiV3Id.list(\n YTApiId.navigationListNodes,\n prepareRequest({\n attributes: [\n 'type',\n 'dynamic',\n 'row_count', // Deprecated\n 'unmerged_row_count', // Deprecated\n 'chunk_row_count',\n 'modification_time',\n 'creation_time',\n 'resource_usage',\n 'sorted',\n 'data_weight',\n 'account',\n 'target_path',\n 'broken',\n 'lock_count',\n 'tablet_state',\n '_restore_path',\n 'expiration_time',\n 'expiration_timeout',\n 'effective_expiration',\n 'treat_as_queue_consumer',\n 'treat_as_queue_producer',\n 'path',\n ...(UIFactory.getNavigationMapNodeSettings()?.additionalAttributes || []),\n ],\n path,\n transaction,\n }),\n saveRequestCancellation,\n ),\n );\n}\n\nexport function fetchNodes() {\n return (dispatch, getState) => {\n const state = getState();\n const path = getPath(state);\n const transaction = getTransaction(state);\n const cluster = getCluster(state);\n\n dispatch({type: FETCH_NODES.REQUEST});\n return dispatch(waitForFontFamilies(getList(path, transaction, cluster)))\n .then(ypath.getValue)\n .then((data) => {\n dispatch({\n type: FETCH_NODES.SUCCESS,\n data,\n });\n\n const applyCustomSort = shouldApplyCustomSort(getState());\n dispatch({\n type: APPLY_CUSTOM_SORT,\n data: applyCustomSort ? 'date' : '',\n });\n if (applyCustomSort) {\n dispatch(\n changeColumnSortOrder({\n tableId: NAVIGATION_MAP_NODE_TABLE_ID,\n columnName: 'name',\n asc: false,\n }),\n );\n }\n })\n .catch((error) => {\n if (error.code !== yt.codes.CANCELLED) {\n dispatch({\n type: FETCH_NODES.FAILURE,\n data: {\n message: 'Could not load list. ' + GENERIC_ERROR_MESSAGE,\n details: error,\n },\n });\n } else {\n dispatch({type: FETCH_NODES.CANCELLED});\n }\n });\n };\n}\n\nexport function updateResourceUsage() {\n const BATCH_LIMIT = 200;\n\n function updatedNodeData(nodeValue, newData) {\n return newData\n ? {\n $value: nodeValue.$value,\n $attributes: {\n ...nodeValue.$attributes,\n recursive_resource_usage: newData,\n },\n }\n : nodeValue;\n }\n\n return (dispatch, getState) => {\n const state = getState();\n\n let nodes = getFilteredNodes(state);\n nodes = filter_(nodes, (node) => !node.$attributes.recursive_resource_usage);\n\n if (isRootNode(state) || nodes.length === 0) {\n return;\n }\n\n dispatch({type: UPDATE_RESOURCE_USAGE.REQUEST});\n\n const nodesChunks = chunk_(nodes, BATCH_LIMIT);\n const batchedRequests = map_(nodesChunks, (nodesChunk) => {\n const requests = map_(nodesChunk, (node) => {\n return {\n command: 'get',\n parameters: {\n path: node.path + '&/@recursive_resource_usage',\n timeout: 60 * 1000,\n },\n };\n });\n\n return ytApiV3Id.executeBatch(YTApiId.navigationResourceUsage, {requests});\n });\n\n Promise.all(batchedRequests)\n .then((resultChunks) => {\n const dataMap = {};\n\n const errorResults = [];\n\n forEach_(nodes, (node, index) => {\n const resultChunkIndex = Math.floor(index / BATCH_LIMIT);\n const resultChunk = resultChunks[resultChunkIndex];\n const item = resultChunk[index % BATCH_LIMIT];\n\n if (item.error) {\n errorResults.push(item);\n } else if (item.output) {\n dataMap[node.$value] = item.output;\n }\n });\n\n dispatch({\n type: UPDATE_RESOURCE_USAGE.SUCCESS,\n data: map_(getNodesData(state), (nodeData) =>\n updatedNodeData(nodeData, dataMap[nodeData.$value]),\n ),\n });\n\n const error = getBatchError(errorResults, 'Failed to get resource usage');\n if (error) {\n throw error;\n }\n })\n .catch((error) => {\n if (error.code !== yt.codes.CANCELLED) {\n dispatch({\n type: UPDATE_RESOURCE_USAGE.FAILURE,\n data: {\n message: 'Failed to load resources. ' + GENERIC_ERROR_MESSAGE,\n details: error,\n },\n });\n toaster.add({\n theme: 'danger',\n name: 'map_node_update_resources',\n timeout: 500000,\n title: 'Resource loading error',\n content: error ? error.message : hammer.format.NO_VALUE,\n actions: [\n {\n label: ' view',\n onClick: () => showErrorPopup(error),\n },\n ],\n });\n } else {\n dispatch({\n type: UPDATE_RESOURCE_USAGE.CANCELLED,\n });\n }\n });\n };\n}\n\nexport function setFilter(filter) {\n return (dispatch, getState) => {\n const path = getPath(getState());\n\n dispatch({\n type: SET_TEXT_FILTER,\n data: {filter, path},\n });\n };\n}\n\nexport function setContentMode(contentMode) {\n return {\n type: SET_CONTENT_MODE,\n data: contentMode,\n };\n}\n\nexport function setMediumType(mediumType) {\n return {\n type: SET_MEDIUM_TYPE,\n data: mediumType,\n };\n}\n\nexport function setSelectedItem(name, shiftKey) {\n return (dispatch, getState) => {\n const state = getState();\n const selected = {...getSelected(state)};\n if (selected[name] && !shiftKey) {\n delete selected[name];\n } else {\n selected[name] = true;\n }\n\n const lastSelected = getLastSelected(state);\n if (lastSelected && shiftKey) {\n const nodes = getSortedNodes(state);\n const lastIndex = findIndex_(nodes, (item) => lastSelected === item.name);\n if (-1 !== lastIndex) {\n const nameIndex = findIndex_(nodes, (item) => item.name === name);\n if (-1 !== nameIndex && lastIndex !== nameIndex) {\n const from = Math.min(lastIndex, nameIndex);\n const to = Math.max(lastIndex, nameIndex);\n for (let i = from; i <= to; ++i) {\n const item = nodes[i];\n selected[item.name] = true;\n }\n }\n }\n }\n\n dispatch({\n type: SET_SELECTED_ITEM,\n data: {selected, lastSelected: selected[name] ? name : undefined},\n });\n };\n}\n\nexport function selectAll(isAllSelected) {\n return (dispatch, getState) => {\n let selected = {};\n\n if (!isAllSelected) {\n const allNodes = getFilteredNodes(getState());\n\n selected = reduce_(\n allNodes,\n (res, node) => {\n res[ypath.getValue(node)] = true;\n return res;\n },\n {},\n );\n }\n\n dispatch({\n type: SELECT_ALL,\n data: {selected},\n });\n };\n}\n","import React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from '../../../../store/redux-hooks';\n\nimport {Checkbox} from '@gravity-ui/uikit';\n\nimport {getIsAllSelected} from '../../../../store/selectors/navigation/content/map-node';\nimport {selectAll} from '../../../../store/actions/navigation/content/map-node';\n\nexport default function Chooser() {\n const dispatch = useDispatch();\n const isAllSelected = useSelector(getIsAllSelected);\n const handleSelectChange = useCallback(() => {\n dispatch(selectAll(isAllSelected));\n }, [dispatch, isAllSelected]);\n\n return <Checkbox id=\"all\" size=\"l\" checked={isAllSelected} onChange={handleSelectChange} />;\n}\n","import React from 'react';\nimport {ThunkAction} from 'redux-thunk';\n\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport {RootState} from '../../../../store/reducers';\nimport {RemoteCopyModalStateAction} from '../../../../store/reducers/navigation/modals/remote-copy-modal';\nimport {REMOTE_COPY_MODAL_PARTIAL} from '../../../../constants/navigation/modals';\nimport {RemoteCopyParams} from '../../../../../@types/types';\nimport axios from 'axios';\nimport Link from '../../../../components/Link/Link';\nimport {ytApiV3} from '../../../../rum/rum-wrap-api';\nimport {showErrorPopup, wrapApiPromiseByToaster} from '../../../../utils/utils';\nimport {YTError} from '../../../../types';\nimport {WithAttrs} from '../../../../utils/cypress-attributes';\nimport {ClickableText} from '../../../../components/ClickableText/ClickableText';\nimport {toaster} from '../../../../utils/toaster';\n\ntype RemoteCopyThunkAction = ThunkAction<any, RootState, any, RemoteCopyModalStateAction>;\n\nexport function showRemoteCopyModal(paths: Array<string>): RemoteCopyThunkAction {\n return (dispatch) => {\n const requests = map_(paths, (path) => {\n return {\n command: 'get' as const,\n parameters: {\n path,\n attributes: ['compression_codec', 'erasure_codec'],\n },\n };\n });\n\n return wrapApiPromiseByToaster(\n ytApiV3.executeBatch<WithAttrs<{compression_codec?: string; erasure_codec?: string}>>({\n requests,\n }),\n {\n toasterName: 'remoteCopyAttributes',\n skipSuccessToast: true,\n errorContent(e: YTError) {\n return (\n <span>\n Failed to load attributes\n <ClickableText onClick={() => showErrorPopup(e)}>Details</ClickableText>\n </span>\n );\n },\n errorTitle: 'Failed to load attributes',\n batchType: 'v3',\n },\n )\n .then((results) => {\n const attributesMap = reduce_(\n paths,\n (acc, path, index) => {\n acc[path] = results[index]?.output?.$attributes;\n return acc;\n },\n {} as Record<string, unknown>,\n );\n dispatch({\n type: REMOTE_COPY_MODAL_PARTIAL,\n data: {paths, showModal: true, error: undefined, attributesMap},\n });\n })\n .catch((error) => {\n dispatch({type: REMOTE_COPY_MODAL_PARTIAL, data: {paths, showModal: true, error}});\n });\n };\n}\n\nexport function hideRemoteCopyModal(): RemoteCopyThunkAction {\n return (dispatch) => {\n dispatch({type: REMOTE_COPY_MODAL_PARTIAL, data: {showModal: false}});\n };\n}\n\nexport function remoteCopy(params: RemoteCopyParams): RemoteCopyThunkAction {\n return (dispatch) => {\n return axios.post<string>('/api/remote-copy', params).then(({data: id}) => {\n dispatch(hideRemoteCopyModal());\n const {dstCluster} = params;\n\n toaster.add({\n theme: 'success',\n name: 'remoteCopyStarted',\n autoHiding: 500000,\n title: 'Remote copy',\n content: (\n <span>\n <Link url={`/${dstCluster}/operations/${id}`}>{id}</Link> operation started\n </span>\n ),\n });\n });\n };\n}\n","import React, {useCallback, useMemo} from 'react';\n\nimport isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\nimport some_ from 'lodash/some';\n\nimport {useDispatch, useSelector} from '../../../../store/redux-hooks';\nimport block from 'bem-cn-lite';\n\nimport Icon from '../../../../components/Icon/Icon';\nimport Button from '../../../../components/Button/Button';\nimport ClipboardButton from '../../../../components/ClipboardButton/ClipboardButton';\n\nimport {getPath} from '../../../../store/selectors/navigation';\nimport {inTrash} from '../../../../utils/navigation/restore-object';\nimport {restoreObjects} from '../../../../store/actions/navigation/modals/restore-object';\nimport {openDeleteModal} from '../../../../store/actions/navigation/modals/delete-object';\nimport {OPEN_MOVE_OBJECT_POPUP} from '../../../../constants/navigation/modals/move-object';\nimport {OPEN_COPY_OBJECT_POPUP} from '../../../../constants/navigation/modals/copy-object';\nimport {openEditingPopup} from '../../../../store/actions/navigation/modals/path-editing-popup';\nimport {\n getSelectedNodes,\n getSelectedNodesAllowedDynTablesActions,\n isSelected,\n} from '../../../../store/selectors/navigation/content/map-node';\nimport {showNavigationAttributesEditor} from '../../../../store/actions/navigation/modals/attributes-editor';\nimport {DropdownMenu} from '@gravity-ui/uikit';\nimport copyToClipboard from 'copy-to-clipboard';\nimport {\n showTableMergeModal,\n showTableSortModal,\n} from '../../../../store/actions/navigation/modals/table-merge-sort-modal';\n\nimport {ClickableText} from '../../../../components/ClickableText/ClickableText';\nimport {selectAll} from '../../../../store/actions/navigation/content/map-node';\nimport {showDynTablesStateModalByNodes} from '../../../../store/actions/navigation/modals/dyn-tables-state-modal';\nimport {showRemoteCopyModal} from '../../../../store/actions/navigation/modals/remote-copy-modal';\nimport './MultipleActions.scss';\n\nconst b = block('multiple-actions');\n\nexport default function MultipleActions(props: {className?: string}) {\n const {className} = props;\n\n const dispatch = useDispatch();\n const path = useSelector(getPath);\n const isOneSelected = useSelector(isSelected);\n const selectedNodes = useSelector(getSelectedNodes);\n const isTooLarge = selectedNodes.length > 1000;\n\n const dynTablesActions = useSelector(getSelectedNodesAllowedDynTablesActions);\n\n const hasRestoreButton = useMemo(() => {\n return !some_(selectedNodes, ({path}) => !inTrash(path));\n }, [selectedNodes]);\n\n const handleDeleteClick = useCallback(() => {\n dispatch(openDeleteModal(selectedNodes, true));\n }, [dispatch, selectedNodes]);\n\n const allowModifyActions = !isOneSelected || isTooLarge;\n\n const dropdownButton = useMemo(\n () => <Button disabled={allowModifyActions}>More actions</Button>,\n [isOneSelected, isTooLarge],\n );\n\n const restoreMoveCopy = useMemo(() => {\n const res = [\n {\n text: 'Copy selected',\n icon: <Icon awesome=\"copy\" face=\"solid\" />,\n action: () => {\n dispatch(\n openEditingPopup(\n path,\n path + '/',\n OPEN_COPY_OBJECT_POPUP,\n true,\n selectedNodes,\n ),\n );\n },\n },\n {\n text: 'Move selected',\n icon: <Icon awesome=\"file-export\" face=\"solid\" />,\n action: () => {\n dispatch(\n openEditingPopup(\n path,\n path + '/',\n OPEN_MOVE_OBJECT_POPUP,\n true,\n selectedNodes,\n ),\n );\n },\n },\n ];\n if (hasRestoreButton) {\n res.splice(0, 0, {\n text: 'Restore selected',\n icon: <Icon awesome=\"undo\" />,\n action: () => {\n dispatch(restoreObjects(selectedNodes));\n },\n });\n }\n return res;\n }, [dispatch, hasRestoreButton, path, selectedNodes]);\n\n const transferItem = useMemo(() => {\n if (selectedNodes.length !== 1) {\n return [];\n }\n\n const [{type}] = selectedNodes;\n if (type !== 'table') {\n return [];\n }\n\n return [\n {\n text: 'Remote copy selected',\n icon: <Icon awesome=\"clone\" />,\n action: () => {\n dispatch(showRemoteCopyModal(map_(selectedNodes, 'path')));\n },\n },\n ];\n }, [selectedNodes]);\n\n const editItem = useMemo(() => {\n return {\n text: 'Edit selected',\n icon: <Icon awesome={'pencil-alt'} />,\n action: () => {\n const paths = map_(selectedNodes, 'path');\n dispatch(showNavigationAttributesEditor(paths));\n },\n };\n }, [selectedNodes]);\n\n const mergeSortSection = useMemo(() => {\n const allowSortMerge = !some_(selectedNodes, (node) => {\n return node.type !== 'table';\n });\n if (!allowSortMerge) {\n return [];\n }\n return [\n {\n text: 'Sort selected',\n icon: <Icon awesome={'sort'} />,\n action: () => {\n const paths = map_(selectedNodes, 'path');\n dispatch(showTableSortModal(paths));\n },\n },\n {\n text: 'Merge selected',\n icon: <Icon awesome={'code-merge'} />,\n action: () => {\n const paths = map_(selectedNodes, 'path');\n dispatch(showTableMergeModal(paths));\n },\n },\n ];\n }, [dispatch, selectedNodes]);\n\n const dynTablesSection = useMemo(() => {\n if (isEmpty_(dynTablesActions)) {\n return [];\n }\n\n const {mount, unmount, freeze, unfreeze} = dynTablesActions;\n const items = [\n ...(!mount\n ? []\n : [\n {\n text: 'Mount',\n icon: <Icon awesome={'link'} />,\n action: () => {\n dispatch(showDynTablesStateModalByNodes('mount', selectedNodes));\n },\n },\n ]),\n ...(!unmount\n ? []\n : [\n {\n text: 'Unmount',\n icon: <Icon awesome={'unlink'} />,\n action: () => {\n dispatch(showDynTablesStateModalByNodes('unmount', selectedNodes));\n },\n },\n ]),\n ...(!freeze\n ? []\n : [\n {\n text: 'Freeze',\n icon: <Icon awesome={'snowflake'} />,\n action: () => {\n dispatch(showDynTablesStateModalByNodes('freeze', selectedNodes));\n },\n },\n ]),\n ...(!unfreeze\n ? []\n : [\n {\n text: 'Unfreeze',\n icon: <Icon awesome={'flame'} />,\n action: () => {\n dispatch(showDynTablesStateModalByNodes('unfreeze', selectedNodes));\n },\n },\n ]),\n ];\n\n if (!items.length) {\n return [];\n }\n\n return items;\n }, [dispatch, selectedNodes, dynTablesActions]);\n\n const items = useMemo(() => {\n return [\n [editItem],\n mergeSortSection,\n restoreMoveCopy,\n transferItem,\n dynTablesSection,\n ].filter((e) => e.length);\n }, [restoreMoveCopy, editItem, mergeSortSection]);\n\n const onCopyPathClick = React.useCallback(() => {\n const res = map_(selectedNodes, 'path').join('\\n');\n copyToClipboard(res);\n }, [selectedNodes]);\n\n const handleClearAll = React.useCallback(() => {\n dispatch(selectAll(true));\n }, [dispatch]);\n\n return (\n <span className={b(null, className)}>\n <span className={b('item')}>\n <Button\n title=\"Delete selected nodes\"\n disabled={allowModifyActions}\n onClick={handleDeleteClick}\n >\n <Icon awesome=\"trash-alt\" />\n &nbsp;Remove selected\n </Button>\n </span>\n\n <span className={b('item')}>\n <ClipboardButton\n buttonText={'Copy paths'}\n title=\"Copy selected paths\"\n onCopy={onCopyPathClick}\n />\n </span>\n\n <span className={b('item')}>\n <DropdownMenu\n disabled={allowModifyActions}\n switcher={dropdownButton}\n items={items}\n />\n </span>\n\n <span className={b('item')}>\n <ClickableText onClick={handleClearAll}>Clear all</ClickableText>\n </span>\n </span>\n );\n}\n","import React from 'react';\nimport {createSelector} from 'reselect';\n\nimport every_ from 'lodash/every';\nimport filter_ from 'lodash/filter';\nimport findIndex_ from 'lodash/findIndex';\nimport includes_ from 'lodash/includes';\nimport keys_ from 'lodash/keys';\nimport map_ from 'lodash/map';\nimport pickBy_ from 'lodash/pickBy';\nimport reduce_ from 'lodash/reduce';\nimport transform_ from 'lodash/transform';\nimport values_ from 'lodash/values';\n\nimport moment from 'moment';\n\nimport ypath from '../../../../common/thor/ypath';\nimport hammer from '../../../../common/hammer';\nimport {getParsedPath, getTransaction} from '../../../../store/selectors/navigation';\nimport {makeGetSetting} from '../../../../store/selectors/settings';\nimport {NAMESPACES, SettingName} from '../../../../../shared/constants/settings';\nimport {ContentMode, NAVIGATION_MAP_NODE_TABLE_ID} from '../../../../constants/navigation';\nimport {Node} from '../../../../utils/navigation/content/map-nodes/node';\nimport {MediumType} from '../../../../constants/index';\nimport Chooser from '../../../../pages/navigation/content/MapNode/Chooser';\nimport MultipleActions from '../../../../pages/navigation/content/MapNode/MultipleActions';\nimport {DYN_TABLES_ALLOWED_ACTIONS_BY_STATE} from './map-node-ts';\n\nexport const getFilterState = (state) => state.navigation.content.mapNode.filter;\nexport const getMediumType = (state) => state.navigation.content.mapNode.mediumType;\n\nconst getCustomSort = (state) => state.navigation.content.mapNode.customSort;\nconst getTableColumns = createSelector(\n [getCustomSort, getMediumType],\n (customSort, mediumType) => ({\n chooser: {\n sort: false,\n align: 'center',\n renderHeader: () => <Chooser />,\n },\n icon: {\n sort: false,\n caption: '',\n align: 'center',\n },\n name: {\n sort: (node) => node.titleUnquoted,\n caption: () => {\n return customSort === 'date' ? 'Date' : 'Name';\n },\n align: 'left',\n },\n locks: {\n sort: (node) => node.locks,\n align: 'center',\n },\n account: {\n sort: (node) => node.account,\n align: 'left',\n },\n modification_time: {\n sort: (node) => moment(node.modified).unix(),\n align: 'right',\n },\n creation_time: {\n sort: (node) => moment(node.created).unix(),\n align: 'right',\n },\n disk_space: {\n get: (node) => {\n return mediumType === MediumType.ALL ? node.size : node.sizePerMedium?.[mediumType];\n },\n sort: true,\n align: 'right',\n },\n data_weight: {\n get: (node) => node.dataWeight,\n sort: true,\n align: 'right',\n },\n chunk_count: {\n get: (node) => node.chunks,\n sort: true,\n align: 'right',\n },\n node_count: {\n get: (node) => node.nodes,\n sort: true,\n align: 'right',\n },\n row_count: {\n get: (node) => node.chunkRows,\n sort: true,\n align: 'right',\n },\n tablet_static_memory: {\n get: (node) => node.tabletStaticMemory,\n caption: 'Tablet st.',\n title: 'Tablet static memory',\n sort: true,\n align: 'right',\n },\n master_memory: {\n get: (node) => node.masterMemory,\n caption: 'Master mem.',\n title: 'Master memory',\n sort: true,\n align: 'right',\n },\n tablet_count: {\n get: (node) => node.tablets,\n sort: true,\n align: 'right',\n },\n actions: {\n sort: false,\n caption: '',\n align: 'center',\n },\n multipleActions: {\n sort: false,\n align: 'center',\n renderHeader: () => <MultipleActions />,\n },\n }),\n);\nexport const getPreparedTableColumns = createSelector(getTableColumns, (columns) =>\n transform_(\n columns,\n (preparedColumns, column, name) => {\n preparedColumns[name] = {\n ...column,\n name,\n caption: typeof column.caption === 'function' ? column.caption() : column.caption,\n };\n },\n {},\n ),\n);\n\nexport const getContentMode = (state) => state.navigation.content.mapNode.contentMode;\nexport const getSelected = (state) => state.navigation.content.mapNode.selected;\nexport const getLastSelected = (state) => state.navigation.content.mapNode.lastSelected;\nconst getTextFilter = (state) => state.navigation.content.mapNode.filter;\n\nconst getSortState = (state) => state.tables[NAVIGATION_MAP_NODE_TABLE_ID];\nexport const getNodesData = (state) => state.navigation.content.mapNode.nodesData;\n\nconst getNodes = createSelector(\n [getNodesData, getParsedPath, getTransaction, getContentMode],\n (nodesData, parsedPath, transaction, contentMode) => {\n return map_(\n nodesData,\n (data) =>\n new Node(data, {\n parsedPath,\n transaction,\n contentMode: contentMode !== ContentMode.DEFAULT ? contentMode : undefined,\n }),\n );\n },\n);\n\nexport const getFilteredNodes = createSelector(\n [getNodes, makeGetSetting, getTextFilter],\n (nodes, getSetting, filter) => {\n const useSmartFilter = getSetting('useSmartFilter', NAMESPACES.NAVIGATION);\n if (useSmartFilter) {\n return hammer.filter.multifilter({\n data: nodes,\n input: filter,\n factors: ['titleUnquoted'],\n });\n } else {\n return hammer.filter.filter({\n data: nodes,\n input: filter,\n factors: ['titleUnquoted'],\n });\n }\n },\n);\n\nexport const getSelectedNodes = createSelector(\n [getSelected, getNodes, makeGetSetting, getSortState, getTableColumns],\n (selected, allNodes, getSetting, sortState, columns) => {\n const nodes = filter_(allNodes, (node) => Boolean(selected[ypath.getValue(node)]));\n const groupNodes = getSetting(SettingName.NAVIGATION.GROUP_NODES, NAMESPACES.NAVIGATION);\n const groupByType = groupNodes && {\n get: (node) => TYPE_WEIGHTS[node.type] || 0,\n asc: false,\n };\n\n return hammer.utils.sort(nodes, sortState, columns, {\n groupBy: groupByType,\n });\n },\n);\n\nexport const getSelectedPathMap = createSelector([getSelectedNodes], (nodes) => {\n return reduce_(\n nodes,\n (acc, {path}) => {\n acc[path] = true;\n return acc;\n },\n {},\n );\n});\n\nexport const isSelected = createSelector(getSelected, (selected) => {\n return includes_(values_(selected), true);\n});\n\nexport const getIsAllSelected = createSelector(\n [getSelected, getFilteredNodes],\n (selected, allNodes) => {\n const selectedNodes = keys_(selected);\n\n if (allNodes.length === 0) {\n return false;\n }\n\n return every_(values_(selected)) && selectedNodes.length === allNodes.length;\n },\n);\n\nexport const TYPE_WEIGHTS = map_(\n [\n 'tablet_cell',\n 'cell_node_map',\n 'cell_node',\n 'sys_node',\n 'access_control_object_namespace_map',\n 'access_control_object_namespace',\n 'topmost_transaction_map',\n 'transaction_map',\n 'map_node',\n 'link',\n 'table',\n 'file',\n 'document',\n 'journal',\n 'string_node',\n 'int64_node',\n 'uint64_node',\n 'double_node',\n 'boolean_node',\n ],\n (type, index, types) => ({type, weight: types.length - index}),\n).reduce((res, item) => {\n res[item.type] = item.weight;\n return res;\n}, {});\n\nexport const getSortedNodes = createSelector(\n [getFilteredNodes, getSortState, getTableColumns, makeGetSetting],\n (nodes, sortState, columns, getSetting) => {\n const groupNodes = getSetting(SettingName.NAVIGATION.GROUP_NODES, NAMESPACES.NAVIGATION);\n const groupByType = groupNodes && {\n get: (node) => TYPE_WEIGHTS[node.type] || 0,\n asc: false,\n };\n return hammer.utils.sort(nodes, sortState, columns, {\n groupBy: groupByType,\n });\n },\n);\n\nexport const getSortedNodesNames = createSelector([getFilteredNodes], (nodes) => {\n return nodes.map((node) => node.name);\n});\n\nexport const getNodesInfo = createSelector(getSortedNodes, (nodes) => {\n const sumNodesType = hammer.aggregation.countValues(nodes, 'type');\n\n return map_(Object.entries(sumNodesType), (keyValue) => {\n const [key, value] = keyValue;\n const type = key === 'undefined' ? 'Unknown' : key;\n return {\n type: hammer.format['Readable'](type),\n count: value,\n };\n });\n});\n\nexport const isRootNode = createSelector(\n getParsedPath,\n (parsedPath) => parsedPath.stringify() === '/',\n);\n\nexport const getMapNodeResourcesLoading = (state) =>\n state.navigation.content.mapNode.resourcesLoading;\n\nconst DATE_REGEXP = /^\\d{4}[-]\\d{2}[-]\\d{2}(T\\d{2}:\\d{2}:\\d{2})?(\\.[a-zA-Z0-9]+)?$/;\nexport const shouldApplyCustomSort = createSelector(\n [getNodes, makeGetSetting, getSortState],\n (nodes, getSetting, sortState) =>\n getSetting(SettingName.NAVIGATION.USE_SMART_SORT, NAMESPACES.NAVIGATION) &&\n sortState?.field === 'name' &&\n every_(nodes, (item) => DATE_REGEXP.test(item.name)),\n);\n\nexport const getLoadState = (state) => state.navigation.content.mapNode.loadState;\nexport const getError = (state) => state.navigation.content.mapNode.error;\n\nexport const getSelectedIndex = createSelector(\n [getSortedNodes, getFilterState],\n (nodes, filter) => {\n if (filter) {\n const strictIndex = findIndex_(nodes, ({name}) => name === filter);\n\n if (strictIndex === -1) {\n return findIndex_(nodes, ({name}) => name.startsWith(filter));\n }\n\n return strictIndex;\n }\n\n return 0;\n },\n);\n\nexport const getSelectedNodesDynTablesStates = createSelector([getSelectedNodes], (nodes) => {\n const res = reduce_(\n nodes,\n (acc, item) => {\n if (item.tabletState) {\n acc[item.tabletState] = true;\n }\n return acc;\n },\n {frozen: false, mounted: false, unmounted: false},\n );\n return res;\n});\n\nexport const getSelectedNodesAllowedDynTablesActions = createSelector(\n [getSelectedNodesDynTablesStates],\n (dynTablesStates) => {\n const res = reduce_(\n dynTablesStates,\n (acc, value, state) => {\n if (value) {\n Object.assign(acc, DYN_TABLES_ALLOWED_ACTIONS_BY_STATE[state]);\n }\n return acc;\n },\n {mount: false, unmount: false, freeze: false, unfreeze: false},\n );\n return pickBy_(res, Boolean);\n },\n);\n","import React from 'react';\nimport {ThunkAction} from 'redux-thunk';\nimport {\n LinkToModalAction,\n LinkToState,\n} from '../../../../store/reducers/navigation/modals/link-to-modal';\nimport {RootState} from '../../../../store/reducers';\nimport {LINK_TO_MODAL_PARTIAL} from '../../../../constants/navigation/modals';\nimport {ytApiV3} from '../../../../rum/rum-wrap-api';\nimport {getCluster} from '../../../../store/selectors/global';\nimport Link from '../../../../components/Link/Link';\nimport {toaster} from '../../../../utils/toaster';\n\ntype LinkToModalThunkAction<R = any> = ThunkAction<R, RootState, unknown, LinkToModalAction>;\n\nexport function showLinkToModal(\n params: {path?: string; target?: string} = {},\n): LinkToModalThunkAction {\n return (dispatch) => {\n const {path, target} = params;\n dispatch({\n type: LINK_TO_MODAL_PARTIAL,\n data: {path, target, visible: true},\n });\n };\n}\n\nexport function hideLinkToModal(): LinkToModalThunkAction {\n return (dispatch) => {\n dispatch({\n type: LINK_TO_MODAL_PARTIAL,\n data: {visible: false, linkPath: undefined, dstPath: undefined},\n });\n };\n}\n\nexport function createLink(params: Pick<LinkToState, 'path' | 'target'>): LinkToModalThunkAction {\n return (dispatch, getState) => {\n const {target, path} = params;\n const cluster = getCluster(getState());\n\n return ytApiV3\n .create({\n path,\n type: 'link',\n attributes: {target_path: target},\n })\n .then(() => {\n dispatch(hideLinkToModal());\n toaster.add({\n name: 'create-link',\n theme: 'success',\n title: 'Link created',\n content: <Link url={`/${cluster}/navigation?path=${path}`}>{path}</Link>,\n });\n });\n };\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from '../../../../store/redux-hooks';\n\nimport {getMetrics} from '../../../../common/utils/metrics';\n\nimport ClipboardButton from '../../../../components/ClipboardButton/ClipboardButton';\nimport Button from '../../../../components/Button/Button';\nimport Icon from '../../../../components/Icon/Icon';\n\nimport {inTrash} from '../../../../utils/navigation/restore-object';\nimport {getTransaction} from '../../../../store/selectors/navigation';\n\nimport ypath from '../../../../common/thor/ypath';\nimport {OPEN_MOVE_OBJECT_POPUP} from '../../../../constants/navigation/modals/move-object';\nimport {openEditingPopup} from '../../../../store/actions/navigation/modals/path-editing-popup';\nimport {OPEN_COPY_OBJECT_POPUP} from '../../../../constants/navigation/modals/copy-object';\nimport {openAttributesModal} from '../../../../store/actions/modals/attributes-modal';\nimport {showNavigationAttributesEditor} from '../../../../store/actions/navigation/modals/attributes-editor';\nimport {restoreObject} from '../../../../store/actions/navigation/modals/restore-object';\nimport {updateView} from '../../../../store/actions/navigation';\nimport {openDeleteModal} from '../../../../store/actions/navigation/modals/delete-object';\nimport {\n showTableMergeModal,\n showTableSortModal,\n} from '../../../../store/actions/navigation/modals/table-merge-sort-modal';\nimport {showTableEraseModal} from '../../../../store/actions/navigation/modals/table-erase-modal';\nimport {getSelectedNodes} from '../../../../store/selectors/navigation/content/map-node';\nimport {showDynTablesStateModalByPaths} from '../../../../store/actions/navigation/modals/dyn-tables-state-modal';\nimport {DYN_TABLES_ALLOWED_ACTIONS_BY_STATE} from '../../../../store/selectors/navigation/content/map-node-ts';\nimport {TabletStateType} from '../../../../store/reducers/navigation/modals/dyn-tables-state-modal';\nimport {ButtonProps, DropdownMenu, DropdownMenuItem} from '@gravity-ui/uikit';\nimport {showLinkToModal} from '../../../../store/actions/navigation/modals/link-to-modal';\nimport {showRemoteCopyModal} from '../../../../store/actions/navigation/modals/remote-copy-modal';\n\ninterface Props {\n item: {\n name: string;\n type: string;\n dynamic: boolean;\n path: string;\n $attributes: Record<string, unknown>;\n $value: unknown;\n tabletState: TabletStateType;\n };\n\n onlyDropdown?: boolean;\n dropDownBtnClassName?: string;\n dropDownBtnTheme?: ButtonProps['view'];\n dropDownBtnSize?: ButtonProps['size'];\n}\n\nfunction PathActions(props: Props) {\n const {item} = props;\n const objectPath = item.path;\n\n const dispatch = useDispatch();\n const transaction = useSelector(getTransaction);\n\n const restorePath = ypath.getValue(item.$attributes, '/_restore_path');\n const hasRestoreButton = inTrash(item.path);\n\n const {\n onMove,\n onCopy,\n onLink,\n onShowAttributes,\n onEditAttributes,\n onRestoreClick,\n onDeleteClick,\n onCopyPathClick,\n onSort,\n onErase,\n onMerge,\n onMount,\n onUnmount,\n onFreeze,\n onUnfreeze,\n onTransfer,\n } = React.useMemo(() => {\n const handleUpdateView = (...args: any) => dispatch(updateView(...args));\n\n return {\n onMove(evt: React.MouseEvent<HTMLElement, MouseEvent> | KeyboardEvent) {\n dispatch(openEditingPopup(objectPath, objectPath, OPEN_MOVE_OBJECT_POPUP));\n evt.stopPropagation();\n },\n onCopy(evt: React.MouseEvent<HTMLElement, MouseEvent> | KeyboardEvent) {\n dispatch(openEditingPopup(objectPath, objectPath, OPEN_COPY_OBJECT_POPUP));\n evt.stopPropagation();\n },\n onShowAttributes(evt: React.MouseEvent<HTMLElement, MouseEvent> | KeyboardEvent) {\n getMetrics().countEvent('navigation_map-node_attributes');\n\n dispatch(\n openAttributesModal({\n title: item.$value,\n path: item.path,\n } as any),\n );\n evt.stopPropagation();\n },\n onEditAttributes(evt: React.MouseEvent<HTMLElement, MouseEvent> | KeyboardEvent) {\n getMetrics().countEvent('navigation_map-node_edit_attributes');\n\n dispatch(showNavigationAttributesEditor([item.path]));\n evt.stopPropagation();\n },\n onRestoreClick(evt: React.MouseEvent<HTMLElement, MouseEvent> | KeyboardEvent) {\n dispatch(restoreObject(objectPath, restorePath, handleUpdateView));\n evt.stopPropagation();\n },\n\n onDeleteClick(evt: React.MouseEvent<HTMLElement, MouseEvent> | KeyboardEvent) {\n getMetrics().countEvent('navigation_map-node_delete');\n dispatch(openDeleteModal(item));\n evt.stopPropagation();\n },\n onCopyPathClick(evt: React.MouseEvent<HTMLElement, MouseEvent> | KeyboardEvent) {\n getMetrics().countEvent('navigation_map-node_copy-path');\n evt.stopPropagation();\n },\n onSort(e: React.MouseEvent<HTMLElement, MouseEvent> | KeyboardEvent) {\n dispatch(showTableSortModal([item.path]));\n e.stopPropagation();\n },\n onErase(evt: React.MouseEvent<HTMLElement, MouseEvent> | KeyboardEvent) {\n dispatch(showTableEraseModal(item.path));\n evt.stopPropagation();\n },\n onMerge(evt: React.MouseEvent<HTMLElement, MouseEvent> | KeyboardEvent) {\n dispatch(showTableMergeModal([item.path]));\n evt.stopPropagation();\n },\n onMount(evt: React.MouseEvent<HTMLElement, MouseEvent> | KeyboardEvent) {\n dispatch(showDynTablesStateModalByPaths([item.path], 'mount'));\n evt.stopPropagation();\n },\n onUnmount(evt: React.MouseEvent<HTMLElement, MouseEvent> | KeyboardEvent) {\n dispatch(showDynTablesStateModalByPaths([item.path], 'unmount'));\n evt.stopPropagation();\n },\n onFreeze(evt: React.MouseEvent<HTMLElement, MouseEvent> | KeyboardEvent) {\n dispatch(showDynTablesStateModalByPaths([item.path], 'freeze'));\n evt.stopPropagation();\n },\n onUnfreeze(evt: React.MouseEvent<HTMLElement, MouseEvent> | KeyboardEvent) {\n dispatch(showDynTablesStateModalByPaths([item.path], 'unfreeze'));\n evt.stopPropagation();\n },\n onLink(evt: React.MouseEvent<HTMLElement, MouseEvent> | KeyboardEvent) {\n dispatch(showLinkToModal({target: item.path}));\n evt.stopPropagation();\n },\n onTransfer(evt: React.MouseEvent<HTMLElement, MouseEvent> | KeyboardEvent) {\n dispatch(showRemoteCopyModal([item.path]));\n evt.stopPropagation();\n },\n };\n }, [dispatch, objectPath, item, restorePath]);\n\n const selectedNodes = useSelector(getSelectedNodes);\n if (selectedNodes.length) {\n return null;\n }\n\n const secondGroup = [\n {\n text: 'Move',\n iconStart: <Icon awesome=\"file-export\" face=\"solid\" />,\n action: onMove,\n },\n {\n text: 'Copy',\n iconStart: <Icon awesome=\"copy\" face=\"solid\" />,\n action: onCopy,\n },\n {\n text: 'Link',\n iconStart: <Icon awesome=\"link\" face=\"solid\" />,\n action: onLink,\n },\n {\n text: 'Delete',\n iconStart: <Icon awesome=\"trash-alt\" />,\n action: onDeleteClick,\n },\n ];\n\n const firstGroup: DropdownMenuItem[] = [\n {\n text: 'Attributes',\n iconStart: <Icon awesome=\"at\" />,\n action: onShowAttributes,\n },\n {\n text: 'Edit',\n iconStart: <Icon awesome=\"pencil-alt\" />,\n action: onEditAttributes,\n },\n ];\n\n if (hasRestoreButton) {\n firstGroup.unshift({\n text: 'Restore',\n iconStart: <Icon awesome=\"undo\" />,\n action: onRestoreClick,\n });\n }\n const menuItems = [firstGroup];\n\n if (item.type === 'table') {\n const isDynamic = item.dynamic;\n if (isDynamic) {\n const {tabletState} = item;\n const {mount, unmount, freeze, unfreeze} =\n DYN_TABLES_ALLOWED_ACTIONS_BY_STATE[tabletState] || {};\n const items = [\n ...(mount\n ? [\n {\n text: 'Mount',\n iconStart: <Icon awesome={'link'} />,\n action: onMount,\n },\n ]\n : []),\n ...(unmount\n ? [\n {\n text: 'Unmount',\n iconStart: <Icon awesome={'unlink'} />,\n action: onUnmount,\n },\n ]\n : []),\n ...(freeze\n ? [\n {\n text: 'Freeze',\n iconStart: <Icon awesome={'snowflake'} />,\n action: onFreeze,\n },\n ]\n : []),\n ...(unfreeze\n ? [\n {\n text: 'Unfreeze',\n iconStart: <Icon awesome={'flame'} />,\n action: onUnfreeze,\n },\n ]\n : []),\n ];\n if (items.length) {\n menuItems.push(items);\n }\n }\n menuItems.push([\n {\n text: 'Sort',\n iconStart: <Icon awesome={'sort'} />,\n action: onSort,\n },\n ...(!isDynamic\n ? [\n {\n text: 'Erase',\n iconStart: <Icon awesome={'eraser'} />,\n action: onErase,\n },\n ]\n : []),\n {\n text: 'Merge',\n iconStart: <Icon awesome={'code-merge'} />,\n action: onMerge,\n },\n ]);\n }\n if (item.type === 'table' || item.type === 'file') {\n menuItems.push([\n {\n text: 'Remote copy',\n iconStart: <Icon awesome={'clone'} />,\n action: onTransfer,\n },\n ]);\n }\n if (item.type === 'hunk_storage') {\n menuItems.push([\n {\n text: 'Mount',\n iconStart: <Icon awesome={'link'} />,\n action: onMount,\n },\n {\n text: 'Unmount',\n iconStart: <Icon awesome={'unlink'} />,\n action: onUnmount,\n },\n ]);\n }\n\n menuItems.push(secondGroup);\n\n const commonProps = {\n view: 'flat-secondary' as const,\n size: 'm' as const,\n };\n\n const {\n onlyDropdown,\n dropDownBtnClassName,\n dropDownBtnTheme = 'flat-secondary',\n dropDownBtnSize = 'm',\n } = props;\n\n return (\n <React.Fragment>\n {!onlyDropdown && (\n <Button\n {...commonProps}\n title=\"Delete node\"\n disabled={Boolean(transaction)}\n onClick={onDeleteClick}\n >\n <Icon awesome=\"trash-alt\" />\n </Button>\n )}\n\n {!onlyDropdown && (\n <ClipboardButton\n {...commonProps}\n text={item.path}\n title=\"Copy path\"\n onCopy={onCopyPathClick}\n />\n )}\n\n <DropdownMenu\n renderSwitcher={(props) => (\n <Button\n {...props}\n size={dropDownBtnSize}\n className={dropDownBtnClassName}\n view={dropDownBtnTheme}\n >\n <Icon awesome=\"ellipsis-h\" />\n </Button>\n )}\n items={menuItems}\n popupProps={{qa: 'path-actions-dropdown'}}\n />\n </React.Fragment>\n );\n}\n\nexport default React.memo(PathActions);\n","import React from 'react';\nimport {useSelector} from '../../../../../store/redux-hooks';\nimport cn from 'bem-cn-lite';\n\nimport {getPath} from '../../../../../store/selectors/navigation';\nimport ypath from '../../../../../common/thor/ypath';\n\nimport './EditTableAction.scss';\n\nimport {getNavigationPathAttributes} from '../../../../../store/selectors/navigation/navigation';\nimport PathActions from '../../MapNode/PathActions';\n\nconst block = cn('edit-table-actions');\n\nexport default function EditTableActions() {\n const path = useSelector(getPath);\n const attributes = useSelector(getNavigationPathAttributes);\n\n return (\n <PathActions\n onlyDropdown={true}\n dropDownBtnClassName={block('button')}\n dropDownBtnTheme={'outlined'}\n dropDownBtnSize={'m'}\n item={{\n name: '',\n path,\n type: 'table',\n dynamic: ypath.getValue(attributes, '/dynamic'),\n tabletState: ypath.getValue(attributes, '/tablet_state'),\n $value: undefined,\n $attributes: attributes,\n }}\n />\n );\n}\n","import React from 'react';\nimport {useSelector} from '../../../../../store/redux-hooks';\n\nimport {getPath} from '../../../../../store/selectors/navigation';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport Icon from '../../../../../components/Icon/Icon';\nimport {Tooltip} from '../../../../../components/Tooltip/Tooltip';\nimport {getNavigationTableDataLensButtonAlerts} from '../../../../../store/selectors/navigation/content/table-ts';\nimport {Button} from '@gravity-ui/uikit';\nimport {Secondary, Warning} from '../../../../../components/Text/Text';\nimport Link from '../../../../../components/Link/Link';\nimport {getNavigationPathAttributesLoadState} from '../../../../../store/selectors/navigation/navigation';\nimport {LOADING_STATUS} from '../../../../../constants';\nimport {docsUrl} from '../../../../../config';\nimport {uiSettings} from '../../../../../config/ui-settings';\nimport UIFactory from '../../../../../UIFactory';\n\nexport default function DataLensButton({className}: {className: string}) {\n const loaded = useSelector(getNavigationPathAttributesLoadState) === LOADING_STATUS.LOADED;\n const cluster: string = useSelector(getCluster);\n const path = useSelector(getPath);\n const {isEmptySchema, enableDynamicStoreRedRequired} = useSelector(\n getNavigationTableDataLensButtonAlerts,\n );\n\n const {datalensBaseUrl, datalensAllowedCluster} = uiSettings;\n\n if (!datalensBaseUrl || !new Set(datalensAllowedCluster).has(cluster)) {\n return null;\n }\n const showTooltip = isEmptySchema || enableDynamicStoreRedRequired;\n\n const url = `${datalensBaseUrl}/datasets/new?id=CHYT_${cluster.toUpperCase()}&ytPath=${path}&action=autoCreate`;\n\n const btn = (\n <Button\n href={url}\n view={'action'}\n target=\"_blank\"\n title=\"Create dataset in DataLens\"\n disabled={!loaded || showTooltip}\n >\n <Icon awesome={'chart-bar'} />\n DataLens\n </Button>\n );\n\n const linkUrl = UIFactory.docsUrls['chyt:yt_tables#dynamic'];\n const content = !showTooltip ? (\n btn\n ) : (\n <Tooltip\n content={\n <Warning>\n {isEmptySchema && <div>Please make sure that the table has schema.</div>}\n {enableDynamicStoreRedRequired && (\n <div>\n Please make sure that the table has enabled{' '}\n <Secondary>enable_dynamic_store_read</Secondary> attribute.\n {linkUrl !== '' && docsUrl(<Link url={linkUrl}> Help </Link>)}\n </div>\n )}\n </Warning>\n }\n >\n {btn}\n </Tooltip>\n );\n\n return <div className={className}>{content}</div>;\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\nimport ypath from '../../../../../common/thor/ypath';\n\nimport {getAttributes} from '../../../../../store/selectors/navigation';\n\nimport ColumnSelectorButton from '../../../../../pages/navigation/content/Table/TableOverview/ColumnSelectorButton';\nimport FullScreenButton from '../../../../../pages/navigation/content/Table/TableOverview/FullScreenButton';\nimport SettingsButton from '../../../../../pages/navigation/content/Table/TableOverview/SettingsButton';\nimport JupyterButton from '../../../../../pages/navigation/content/Table/TableOverview/JupyterButton';\nimport TableActions from '../../../../../pages/navigation/content/Table/TableOverview/TableActions';\nimport OffsetInput from '../../../../../pages/navigation/content/Table/TableOverview/OffsetInput';\nimport Paginator from '../../../../../pages/navigation/content/Table/TableOverview/Paginator';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport {OpenQueryButtons} from '../../../../../containers/OpenQueryButtons/OpenQueryButtons';\n\nimport './TableOverview.scss';\nimport EditTableActions from './EditTableActions';\nimport DataLensButton from './DatalensButton';\n\nconst block = cn('navigation-table-overview');\n\nTableOverview.propTypes = {\n // from connect\n isFullScreen: PropTypes.bool.isRequired,\n};\n\nfunction TableOverview({isFullScreen, allowPagination}) {\n // TODO: add sticky for the Overview in the split mode https://github.com/captivationsoftware/react-sticky/issues/282\n return (\n <ErrorBoundary>\n <div className={block()}>\n {allowPagination && <Paginator block={block} />}\n <OffsetInput block={block} />\n {!isFullScreen && <ColumnSelectorButton block={block} />}\n {!isFullScreen && <SettingsButton block={block} />}\n {!isFullScreen && <OpenQueryButtons className={block('query')} />}\n {!isFullScreen && <JupyterButton block={block} />}\n {!isFullScreen && <DataLensButton className={block('datalens')} />}\n {!isFullScreen && <TableActions block={block} />}\n <FullScreenButton block={block} />\n {!isFullScreen && <EditTableActions />}\n </div>\n </ErrorBoundary>\n );\n}\n\nconst mapStateToProps = (state) => {\n const {isFullScreen} = state.navigation.content.table;\n const attributes = getAttributes(state);\n\n const isUnmounted = ypath.getValue(attributes, '/tablet_state') === 'unmounted';\n const isSorted = ypath.getValue(attributes, '/sorted');\n\n const allowPagination = !(isUnmounted && !isSorted);\n\n return {\n isFullScreen,\n allowPagination,\n };\n};\n\nexport default connect(mapStateToProps)(TableOverview);\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\n\nimport cn from 'bem-cn-lite';\n\nimport escapeRegExp_ from 'lodash/escapeRegExp';\nimport filter_ from 'lodash/filter';\nimport isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\n\nimport {TextInput} from '@gravity-ui/uikit';\nimport Modal from '../../../../../components/Modal/Modal';\n\nimport Query from '../../../../../utils/navigation/content/table/query';\n\nimport {\n getCurrentOffsetValues,\n getIsTableSorted,\n} from '../../../../../store/selectors/navigation/content/table';\nimport {\n closeOffsetSelectorModal,\n moveOffset,\n} from '../../../../../store/actions/navigation/content/table/pagination';\n\nimport './OffsetSelectorModal.scss';\n\nconst block = cn('offset-selector');\n\nclass OffsetSelectorModal extends Component {\n static itemProps = PropTypes.shape({\n name: PropTypes.string.isRequired,\n value: PropTypes.string,\n checked: PropTypes.bool.isRequired,\n });\n\n static propTypes = {\n // from connect\n isOffsetSelectorOpen: PropTypes.bool.isRequired,\n closeOffsetSelectorModal: PropTypes.func.isRequired,\n moveOffset: PropTypes.func.isRequired,\n initialItems: PropTypes.arrayOf(OffsetSelectorModal.itemProps).isRequired,\n isTableSorted: PropTypes.bool.isRequired,\n };\n\n constructor(props) {\n super(props);\n const {initialItems} = this.props;\n this.state = {\n filter: '',\n initialItems,\n items: initialItems,\n };\n }\n\n static getDerivedStateFromProps({initialItems}, state) {\n if (initialItems === state.initialItems) {\n return null;\n }\n return {\n initialItems,\n items: initialItems,\n };\n }\n\n _handleCONFIRMButtonClick = () => {\n const {items} = this.state;\n const {isTableSorted, moveOffset, closeOffsetSelectorModal} = this.props;\n const minKeyValue = isTableSorted ? 'null' : '0';\n const offsetValues = map_(items, (item) => {\n return isEmpty_(item.value) ? minKeyValue : item.value;\n });\n moveOffset(Query.prepareKey(offsetValues));\n closeOffsetSelectorModal();\n };\n\n _handleCANCELButtonClick = () => {\n const {closeOffsetSelectorModal} = this.props;\n this.setState(({initialItems}) => ({items: initialItems}));\n closeOffsetSelectorModal();\n };\n\n _changeFilter = (filter) => {\n this.setState({filter});\n };\n\n updateItemValue = (name, value) => {\n this.setState(({items: prevItems}) => {\n const items = [...prevItems];\n const index = items.findIndex((item) => item.name === name);\n const changedItem = items[index];\n items[index] = {...changedItem, value};\n return {items};\n });\n };\n\n _handleInputChange = (name) => (value) => {\n this.updateItemValue(name, value);\n };\n\n renderSearchBox() {\n return (\n <TextInput\n theme=\"normal\"\n size=\"s\"\n placeholder=\"Search...\"\n onUpdate={this._changeFilter}\n text={this.state.filter}\n hasClear={true}\n />\n );\n }\n\n filterItemsByName(items, filter) {\n const re = new RegExp(escapeRegExp_(filter), 'i');\n return filter_(items, (item) => re.test(item.name));\n }\n\n renderItems() {\n const {items, filter} = this.state;\n const visibleItems = this.filterItemsByName(items, filter);\n return (\n <div className={block('items')}>\n <div className={block('item-group')}>{this.renderSearchBox()}</div>\n {map_(visibleItems, (item) => {\n return (\n <label\n key={item.name}\n className={block('item-group', {\n disabled: !item.checked,\n })}\n >\n {item.name}\n <div className={block('item')}>\n <TextInput\n theme=\"normal\"\n size=\"s\"\n placeholder=\"\"\n onUpdate={this._handleInputChange(item.name)}\n text={item.value}\n hasClear={true}\n />\n </div>\n </label>\n );\n })}\n </div>\n );\n }\n\n renderContent() {\n return <div className={block('content')}>{this.renderItems()}</div>;\n }\n\n render() {\n const {isOffsetSelectorOpen} = this.props;\n return (\n <Modal\n size=\"m\"\n title=\"Keys\"\n borderless={true}\n visible={isOffsetSelectorOpen}\n confirmText=\"Confirm\"\n onConfirm={this._handleCONFIRMButtonClick}\n onCancel={this._handleCANCELButtonClick}\n content={this.renderContent()}\n className={block()}\n contentClassName={block(null, 'pretty-scroll')}\n />\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const {isOffsetSelectorOpen} = state.navigation.content.table;\n const initialItems = getCurrentOffsetValues(state);\n const isTableSorted = getIsTableSorted(state);\n\n return {isOffsetSelectorOpen, initialItems, isTableSorted};\n};\n\nconst mapDispatchToProps = {\n closeOffsetSelectorModal,\n moveOffset,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(OffsetSelectorModal);\n","import React from 'react';\nimport {useSelector} from '../../../../../store/redux-hooks';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {\n getColumnsPresetColumns,\n getColumnsPresetError,\n getColumnsPresetHash,\n} from '../../../../../store/selectors/navigation/content/table-ts';\nimport {Warning} from '../../../../../components/Text/Text';\nimport Yson from '../../../../../components/Yson/Yson';\nimport {YTErrorBlock} from '../../../../../components/Error/Error';\nimport CollapsibleSection from '../../../../../components/CollapsibleSection/CollapsibleSection';\n\nimport './TableColumnsPresetNotice.scss';\n\nconst block = cn('table-columns-preset-notice');\n\nfunction TableColumnsPresetNotice() {\n const hash = useSelector(getColumnsPresetHash);\n const columns = useSelector(getColumnsPresetColumns);\n const error: any = useSelector(getColumnsPresetError);\n\n if (!hash) {\n return null;\n }\n\n if (error) {\n return (\n <YTErrorBlock\n error={error.response?.data || error}\n message={'Cannot load preset of columns'}\n />\n );\n }\n\n console.log(columns);\n\n return (\n <Warning className={block()}>\n <CollapsibleSection\n name={'The table is opened with preset of columns'}\n size={'unset'}\n collapsed\n >\n {!columns?.length ? null : (\n <span>\n {map_(columns, (item, index) => {\n return (\n <React.Fragment key={index}>\n <Yson key={index} value={item} className={block('column')} />\n {index !== columns.length - 1 && ', '}\n </React.Fragment>\n );\n })}\n </span>\n )}\n </CollapsibleSection>\n </Warning>\n );\n}\n\nexport default React.memo(TableColumnsPresetNotice);\n","import React, {useEffect} from 'react';\nimport {connect} from 'react-redux';\nimport {useSelector} from '../../../../store/redux-hooks';\nimport PropTypes from 'prop-types';\nimport {compose} from 'redux';\nimport cn from 'bem-cn-lite';\n\nimport {useDisableMaxContentWidth} from '../../../../containers/MaxContentWidth';\nimport DataTableWrapper from '../../../../pages/navigation/content/Table/DataTableWrapper/DataTableWrapper';\nimport TableOverview from '../../../../pages/navigation/content/Table/TableOverview/TableOverview';\nimport ColumnSelectorModal from '../../../../components/ColumnSelectorModal/ColumnSelectorModal';\nimport OffsetSelectorModal from '../../../../pages/navigation/content/Table/OffsetSelectorModal/OffsetSelectorModal';\nimport TableMeta from '../../../../pages/navigation/content/Table/TableMeta/TableMeta';\nimport LoadDataHandler from '../../../../components/LoadDataHandler/LoadDataHandler';\nimport FullScreen from '../../../../components/FullScreen/FullScreen';\nimport Yson from '../../../../components/Yson/Yson';\nimport WithStickyToolbar from '../../../../components/WithStickyToolbar/WithStickyToolbar';\n\nimport {OVERVIEW_HEIGHT} from '../../../../constants/navigation/content/table';\nimport {getPath} from '../../../../store/selectors/navigation';\nimport {HEADER_HEIGHT} from '../../../../constants/index';\nimport {\n abortAndReset,\n closeColumnSelectorModal,\n getTableData,\n handleScreenChanged,\n updateColumns,\n} from '../../../../store/actions/navigation/content/table/table';\nimport {\n getAllColumns,\n getOffsetValue,\n getSrcColumns,\n getVisibleColumns,\n getVisibleRows,\n isYqlTypesEnabled,\n} from '../../../../store/selectors/navigation/content/table';\nimport {\n getColumns,\n getIsDynamic,\n getKeyColumns,\n getNavigationTableLoadingState,\n getYqlTypes,\n} from '../../../../store/selectors/navigation/content/table-ts';\nimport {getCluster} from '../../../../store/selectors/global';\nimport {getTableYsonSettings} from '../../../../store/selectors/thor/unipika';\nimport {useRumMeasureStop} from '../../../../rum/RumUiContext';\nimport {useAppRumMeasureStart} from '../../../../rum/rum-app-measures';\nimport {isFinalLoadingStatus} from '../../../../utils/utils';\n\nimport './Table.scss';\nimport TableColumnsPresetNotice from './TableOverview/TableColumnsPresetNotice';\nimport {makeTableRumId} from '../../../../store/actions/navigation/content/table/table-rum-id';\n\nconst block = cn('navigation-table');\n\nTable.columnsProps = PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n data: PropTypes.shape({\n caption: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n }).isRequired,\n keyColumn: PropTypes.bool.isRequired,\n checked: PropTypes.bool.isRequired,\n disabled: PropTypes.bool.isRequired,\n\n accessor: PropTypes.func,\n label: PropTypes.string,\n }),\n);\n\nTable.propTypes = {\n // from connect\n loading: PropTypes.bool.isRequired,\n loaded: PropTypes.bool.isRequired,\n error: PropTypes.bool.isRequired,\n errorData: PropTypes.object.isRequired,\n\n path: PropTypes.string.isRequired,\n isSplit: PropTypes.bool.isRequired,\n isDynamic: PropTypes.bool.isRequired,\n isFullScreen: PropTypes.bool.isRequired,\n settings: Yson.settingsProps.isRequired,\n isColumnSelectorOpen: PropTypes.bool.isRequired,\n visibleRows: PropTypes.arrayOf(PropTypes.object).isRequired,\n\n columns: Table.columnsProps.isRequired,\n allColumns: Table.columnsProps.isRequired,\n srcColumns: Table.columnsProps.isRequired,\n keyColumns: PropTypes.arrayOf(PropTypes.string).isRequired,\n\n offsetValue: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n yqlTypes: PropTypes.array,\n\n updateColumns: PropTypes.func.isRequired,\n getTableData: PropTypes.func.isRequired,\n abortAndReset: PropTypes.func.isRequired,\n handleScreenChanged: PropTypes.func.isRequired,\n closeColumnSelectorModal: PropTypes.func.isRequired,\n};\n\nconst renderColumnSelectorModal = (props) => {\n const {updateColumns, allColumns, srcColumns, isColumnSelectorOpen, closeColumnSelectorModal} =\n props;\n\n return (\n <ColumnSelectorModal\n items={allColumns}\n srcItems={srcColumns}\n onConfirm={updateColumns}\n isVisible={isColumnSelectorOpen}\n onCancel={closeColumnSelectorModal}\n />\n );\n};\n\nconst renderTable = (props) => {\n const {\n visibleColumns,\n keyColumns,\n yqlTypes,\n settings,\n visibleRows,\n isDynamic,\n isFullScreen,\n offsetValue,\n loading,\n loaded,\n isSplit,\n } = props;\n\n let stickyTop;\n if (isSplit) {\n stickyTop = 0; // TODO: add sticky for the Overview in the split mode https://github.com/captivationsoftware/react-sticky/issues/282\n } else if (isFullScreen) {\n stickyTop = 0;\n } else {\n stickyTop = HEADER_HEIGHT + OVERVIEW_HEIGHT;\n }\n\n const tableSettings = {\n stickyTop,\n stickyHead: 'moving',\n syncHeadOnResize: true,\n sortable: false,\n stripedRows: true,\n displayIndices: !isDynamic,\n };\n\n return (\n <LoadDataHandler {...props} loaded={false}>\n <DataTableWrapper\n data={visibleRows}\n loaded={loaded}\n loading={loading}\n yqlTypes={yqlTypes}\n keyColumns={keyColumns}\n ysonSettings={settings}\n settings={tableSettings}\n columns={visibleColumns}\n isFullScreen={isFullScreen}\n emptyDataMessage=\"No items to show\"\n startIndex={!isDynamic ? offsetValue : undefined}\n />\n </LoadDataHandler>\n );\n};\n\nfunction Table(props) {\n const {path, getTableData, abortAndReset, isSplit} = props;\n const isYqlV3Types = useSelector(isYqlTypesEnabled);\n\n useEffect(() => {\n getTableData();\n return abortAndReset;\n }, [path, isYqlV3Types, abortAndReset]);\n\n const {isFullScreen, handleScreenChanged, isDynamic} = props;\n\n const toolbar = <TableOverview />;\n return (\n <div className={block()}>\n <TableMeta />\n <TableColumnsPresetNotice />\n <FullScreen\n className={block('fullscreen')}\n enabled={isFullScreen}\n onChange={handleScreenChanged}\n >\n {isSplit && !isFullScreen ? (\n <React.Fragment>\n {toolbar}\n {renderTable(props)}\n </React.Fragment>\n ) : (\n <WithStickyToolbar\n hideToolbarShadow\n toolbarClassName={block('toolbar', {fullscreen: isFullScreen})}\n toolbar={toolbar}\n content={({sticky}) => renderTable({...props, sticky})}\n />\n )}\n </FullScreen>\n {renderColumnSelectorModal(props)}\n {isDynamic && <OffsetSelectorModal />}\n </div>\n );\n}\n\nconst mapStateToProps = (state) => {\n const {loading, loaded, error, errorData, isColumnSelectorOpen, isFullScreen} =\n state.navigation.content.table;\n const settings = getTableYsonSettings(state);\n const {isSplit} = state.global.splitScreen;\n\n const path = getPath(state);\n const columns = getColumns(state);\n const yqlTypes = getYqlTypes(state);\n const isDynamic = getIsDynamic(state);\n const keyColumns = getKeyColumns(state);\n const allColumns = getAllColumns(state);\n const srcColumns = getSrcColumns(state);\n const visibleRows = getVisibleRows(state);\n const offsetValue = getOffsetValue(state);\n const visibleColumns = getVisibleColumns(state);\n\n return {\n loading,\n loaded,\n error,\n errorData,\n columns,\n keyColumns,\n allColumns,\n srcColumns,\n visibleColumns,\n isSplit,\n path,\n isDynamic,\n visibleRows,\n yqlTypes,\n settings,\n offsetValue,\n isColumnSelectorOpen,\n isFullScreen,\n };\n};\n\nconst mapDispatchToProps = {\n updateColumns,\n getTableData,\n abortAndReset,\n handleScreenChanged,\n closeColumnSelectorModal,\n};\n\nconst TableConnected = compose(connect(mapStateToProps, mapDispatchToProps))(Table);\n\nexport default function TableWithRum() {\n const loadState = useSelector(getNavigationTableLoadingState);\n const isDynamic = useSelector(getIsDynamic);\n const cluster = useSelector(getCluster);\n\n const measureId = makeTableRumId({cluster, isDynamic}).getMeasureId();\n\n useAppRumMeasureStart({\n type: measureId,\n startDeps: [loadState, measureId],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: measureId,\n stopDeps: [loadState, measureId],\n sybType: isDynamic ? 'dynamic' : 'static',\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n useDisableMaxContentWidth();\n return <TableConnected />;\n}\n","import React from 'react';\n\nimport MetaTable from '../../components/MetaTable/MetaTable';\nimport {TTLLabel, makeTTLItems} from '../../components/MetaTable/presets/ttl';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\n\nexport default function TTLInfo({\n attributes,\n size,\n className,\n}: {\n attributes: unknown;\n size: React.ComponentProps<typeof TTLLabel>['size'];\n className?: string;\n}) {\n const ttlItems = makeTTLItems(attributes);\n\n if (!ttlItems.length) {\n return null;\n }\n\n return (\n <Tooltip className={className} content={<MetaTable items={ttlItems} />}>\n <TTLLabel size={size} />\n </Tooltip>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport {connect} from 'react-redux';\n\nimport forEach_ from 'lodash/forEach';\nimport isEmpty_ from 'lodash/isEmpty';\nimport isEqual_ from 'lodash/isEqual';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\nimport some_ from 'lodash/some';\nimport sortBy_ from 'lodash/sortBy';\nimport set_ from 'lodash/set';\n\nimport Button from '../../../../components/Button/Button';\nimport {FormApi, YTDFDialog} from '../../../../components/Dialog';\nimport Icon from '../../../../components/Icon/Icon';\nimport Link from '../../../../components/Link/Link';\n\nimport {\n closeCreateTableModal,\n createTable,\n setCreateTableGroupSuggestions,\n setCreateTableLockSuggestions,\n} from '../../../../store/actions/navigation/modals/create-table';\n\nimport {createNewColumn} from '../../../../store/reducers/navigation/modals/create-table';\n\nimport {\n ColumnAggregateTypes as AggrTypes,\n ColumnAggregateType,\n ColumnDataTypes,\n SELECT_EMPTY_VALUE,\n} from '../../../../constants/navigation/modals/create-table';\nimport {\n getColumnGroupSuggestions,\n getColumnLockSuggestions,\n getCreateTableModalState,\n} from '../../../../store/selectors/navigation/modals/create-table';\nimport {StorageOptions} from '../../../../utils/cypress-attributes';\n\nimport {RootState} from '../../../../store/reducers';\nimport {\n getCompressionCodecs,\n getErasureCodecs,\n getPrimitiveTypes,\n} from '../../../../store/selectors/global/supported-features';\nimport {SelectWithSubItemsProps} from '../../../../components/Dialog/controls/SelectWithSubItems/SelectWithSubItems';\nimport {docsUrl, getNewTableReplicasCount} from '../../../../config';\n\nimport './CreateTableModal.scss';\nimport {ASCENDING, DESCENDING} from './CreateTableTabField/CreateTableTabField';\nimport {FIX_MY_TYPE} from '../../../../types';\nimport UIFactory from '../../../../UIFactory';\n\nconst block = cn('create-table-modal');\n\nfunction getNoSuggestionsMsg() {\n return 'There is no any suggestions yet';\n}\n\nexport function makeLink(url: string, label = 'Help', inline = false) {\n const link = (\n <Link target={'_blank'} url={url}>\n {label}\n </Link>\n );\n return inline ? link : <div>{link}</div>;\n}\n\nenum TableType {\n QUEUE = 'queue',\n DYNAMIC = 'dynamic',\n STATIC = 'static',\n}\n\nconst AGGREGATE_CHOICES = [{value: SELECT_EMPTY_VALUE, text: 'default'}].concat(\n map_(AggrTypes, (i) => ({value: i, text: i})),\n);\n\ninterface WithVisibilityCondition {\n visibilityCondition: {\n when: string;\n isActive: (v: any) => boolean;\n };\n extras?: {\n disable?: boolean;\n };\n}\n\nfunction deactivateFieldByVisibilityCondition<T extends WithVisibilityCondition>(\n field: T,\n): Array<T> {\n const {\n visibilityCondition: {when, isActive},\n ...rest\n } = field;\n return [\n {\n ...rest,\n visibilityCondition: {\n when,\n isActive,\n },\n } as any,\n {\n ...rest,\n visibilityCondition: {\n when,\n isActive: (v: any) => !isActive(v),\n },\n extras: {\n disabled: true,\n },\n } as any,\n ];\n}\n\nconst TABLE_SETTINGS = 'tableSettings';\nconst COLUMNS = 'columns';\n\ninterface Props {\n className?: string;\n showModal: boolean;\n\n parentDirectory?: string;\n\n closeCreateTableModal: () => void;\n lockSuggestions: Array<string>;\n groupSuggestions: Array<string>;\n sortedColumnsCount: number;\n columnNameCounters: Record<number, number>;\n\n modifyColumn: () => void;\n removeColumn: () => void;\n setColumnSort: () => void;\n createTable: (path: string, settings: unknown) => Promise<void>;\n setColumnName: () => void;\n\n setCreateTableGroupSuggestions: (items: Array<string>) => void;\n setCreateTableLockSuggestions: (items: Array<string>) => void;\n\n columnsOrder: Record<number, ColumnData>;\n\n keyColumns: Record<string, -1 | 1>;\n\n compressionCodecs: Pick<SelectWithSubItemsProps, 'items' | 'subItemsMap'>;\n erasureCodecs: Array<{value: string; text: string}>;\n primitiveTypes: Array<{value: string; text: string}>;\n}\n\ninterface ColumnData {\n id: string;\n name: string;\n nameError?: string;\n dataType?: string;\n aggregate?: ColumnAggregateType | typeof SELECT_EMPTY_VALUE;\n optional?: boolean;\n ascending?: 1 | -1;\n lock?: string;\n group?: string;\n type?: string;\n sort_order?: string;\n}\n\ninterface TableSettingsTab {\n uniqueKeys: boolean;\n name: string;\n replicasCount: string;\n tableType: TableType;\n}\n\nfunction genNewName(items: Array<{name: string}>, name: string) {\n const names = new Set(map_(items, 'name'));\n if (!names.has(name)) {\n return name;\n }\n\n for (let i = 0; i < items.length; ++i) {\n const tmp = `${name}_${i + 1}`;\n if (!names.has(tmp)) {\n return tmp;\n }\n }\n\n return name;\n}\n\nclass CreateTableModalContentImpl extends React.Component<Props> {\n nextId = 2;\n\n tableType = TableType.STATIC;\n tableName = undefined;\n replicasCount = getNewTableReplicasCount();\n uniqueKeys = false;\n activeTabId = TABLE_SETTINGS;\n\n private columns: Array<ColumnData> = [];\n\n // eslint-disable-next-line react/sort-comp\n createNewColumn = (selectedColumnTab?: ColumnData, options: {userOptions?: any} = {}) => {\n const {duplicate} = options?.userOptions || {};\n\n const {primitiveTypes} = this.props;\n const newTab = createNewColumn(this.nextId++, primitiveTypes[0]?.value);\n\n if (!duplicate || !selectedColumnTab) {\n return newTab;\n } else {\n const name = genNewName(this.columns, selectedColumnTab.name + '_copy');\n return {\n ...newTab,\n ...selectedColumnTab,\n name,\n id: newTab.id,\n };\n }\n };\n\n reorderColumns(columns: Array<ColumnData>) {\n const {columnsOrder} = this.props;\n const indexById = reduce_(\n columnsOrder,\n (acc, item, index) => {\n acc[item.id] = index as any;\n return acc;\n },\n {} as Record<string, number>,\n );\n return sortBy_(columns, (item) => indexById[item.id]);\n }\n\n onAdd = (form: FormApi<FIX_MY_TYPE>): Promise<void> => {\n const {values} = form.getState();\n const {\n [TABLE_SETTINGS]: {\n name: path,\n tableType,\n compressionCodec: compCodec,\n storageOption,\n replicasCount,\n erasureCodec,\n uniqueKeys,\n optimize_for,\n },\n [COLUMNS]: columnsRaw,\n } = values;\n const columns = this.reorderColumns(columnsRaw);\n\n const attributes: Record<string, any> = {\n dynamic: tableType === TableType.QUEUE || tableType == TableType.DYNAMIC,\n optimize_for,\n };\n\n if (!isEqual_(compCodec, [SELECT_EMPTY_VALUE])) {\n attributes.compression_codec = compCodec.join('');\n }\n\n if (storageOption === StorageOptions.REPLICATION) {\n attributes.replication_factor = Number(replicasCount);\n } else {\n attributes.erasure_codec = erasureCodec;\n }\n\n const schemaAttributes: Record<string, any> = {};\n if (uniqueKeys || tableType === TableType.DYNAMIC) {\n schemaAttributes.unique_keys = true;\n }\n\n const {keyColumns} = this.props;\n const schemaColumns = map_(columns, (item) => {\n const {aggregate, dataType: type, group, id, name, optional, lock} = item;\n const ascending = keyColumns[id];\n\n const res: {\n name?: string;\n type_v3?: string;\n group?: string;\n lock?: string;\n aggregate?: ColumnAggregateType;\n optional?: boolean;\n sort_order?: string;\n } = {\n name,\n type_v3: type,\n };\n\n if (group) {\n res.group = group;\n }\n\n if (lock) {\n res.lock = lock;\n }\n\n if (aggregate !== SELECT_EMPTY_VALUE) {\n res.aggregate = aggregate;\n }\n\n if (ascending) {\n res.sort_order = ascending === 1 ? 'ascending' : 'descending';\n }\n return {\n ...res,\n type_v3: !optional ? res.type_v3 : {type_name: 'optional', item: res.type_v3},\n };\n });\n\n return this.props.createTable(path, {\n ...attributes,\n schema: {\n $attributes: schemaAttributes,\n $value: schemaColumns,\n },\n });\n };\n\n validateColumnDataType(columnData: ColumnData, tableType: TableType) {\n const {dataType, optional} = columnData || {};\n\n if (dataType === ColumnDataTypes.ANY || dataType === ColumnDataTypes.YSON) {\n if (tableType === TableType.DYNAMIC && this.isOrderedColumn(columnData)) {\n return `Key-column should not be of type [${dataType}]`;\n }\n if (!optional) {\n return `Column with type [${dataType}] should be optional.`;\n }\n }\n\n if (tableType === TableType.QUEUE && this.isSortedColumn(columnData)) {\n return 'Queue must not have any sorted columns';\n }\n\n if (tableType === TableType.DYNAMIC && this.isDescendingColumn(columnData)) {\n return \"Dynamic tables do not support 'Descending' order\";\n }\n\n return undefined;\n }\n\n validateAggregate(columnData: ColumnData) {\n const {dataType: type, aggregate: aggr} = columnData || {};\n if (aggr === AggrTypes.SUM || aggr === AggrTypes.MIN || aggr === AggrTypes.MAX) {\n if (\n type !== ColumnDataTypes.INT64 &&\n type !== ColumnDataTypes.UINT64 &&\n type !== ColumnDataTypes.DOUBLE\n ) {\n return `[${aggr}] aggregate might be only applied to a column of type int64/uint64/double`;\n }\n }\n\n if (aggr === AggrTypes.XDELTA && type !== ColumnDataTypes.STRING) {\n return `[${aggr}] aggregate might be only applied to a column of type string`;\n }\n return undefined;\n }\n\n validateColumnLock(columnData: ColumnData) {\n const ordered = this.isOrderedColumn(columnData);\n const {lock} = columnData || {};\n if (lock && ordered) {\n return 'Lock cannot be set on a key-column';\n }\n return undefined;\n }\n\n validateColumnData(columnData: ColumnData, tableType: TableType) {\n const res: Record<string, string> = {};\n const aggregate = this.validateAggregate(columnData);\n if (aggregate) {\n res.aggregate = aggregate;\n }\n const dataType = this.validateColumnDataType(columnData, tableType);\n if (dataType) {\n res.dataType = dataType;\n }\n const lock = this.validateColumnLock(columnData);\n if (lock) {\n res.lock = lock;\n }\n return isEmpty_(res) ? undefined : res;\n }\n\n validateReplicasCount(str: string) {\n const v = Number(str);\n // @ts-ignore\n if (str != v || v !== Math.round(v)) {\n return 'The value must be defined as a valid integer number';\n }\n if (v < 0 || v > 10) {\n return 'The value must be in range [0; 10]';\n }\n return undefined;\n }\n\n validateTableName = (value: string) => {\n const {parentDirectory} = this.props;\n if (value === parentDirectory + '/' || value === parentDirectory) {\n return 'The name must not match to parent directory name';\n }\n return undefined;\n };\n\n isOrderedColumn(columnData: ColumnData) {\n const {id} = columnData;\n return Boolean(this.props.keyColumns[id]);\n }\n\n isAscendingColumn(columnData: ColumnData) {\n const {id} = columnData;\n return this.props.keyColumns[id] === ASCENDING;\n }\n\n isDescendingColumn(columnData: ColumnData) {\n const {id} = columnData;\n return this.props.keyColumns[id] === DESCENDING;\n }\n\n isSortedColumn(columnData: ColumnData) {\n return this.isAscendingColumn(columnData) || this.isDescendingColumn(columnData);\n }\n\n validateTableSettings(tableSettings: TableSettingsTab, columns: Array<ColumnData>) {\n const res: Partial<Record<keyof TableSettingsTab, string>> = {};\n const hasOrderedColumn = some_(columns, (colData) => this.isOrderedColumn(colData));\n const hasUnorderedColumn = some_(columns, (colData) => !this.isOrderedColumn(colData));\n\n const {uniqueKeys, name, replicasCount, tableType} = tableSettings;\n\n const nameError = this.validateTableName(name);\n if (nameError) {\n res.name = nameError;\n }\n\n if (tableType === TableType.DYNAMIC && (!hasOrderedColumn || !hasUnorderedColumn)) {\n res.tableType =\n 'Dynamic table must have at least one sorted column and one unsorted column';\n }\n\n if (tableType === TableType.QUEUE && hasOrderedColumn) {\n res.tableType = 'Queue must not have any sorted columns';\n }\n\n if (tableType === TableType.DYNAMIC && !res.tableType) {\n const hasDescendingColumns = some_(this.keyColumns, (value) => -1 === value);\n if (hasDescendingColumns) {\n res.tableType = 'Dynamic tables do not support descending-sorted columns';\n }\n }\n\n const replicasCountError = this.validateReplicasCount(replicasCount);\n if (replicasCountError) {\n res.replicasCount = replicasCountError;\n }\n\n if (uniqueKeys && !hasOrderedColumn) {\n res.uniqueKeys = 'The table must contain at least one sorted column.';\n }\n\n return isEmpty_(res) ? null : res;\n }\n\n onClose = () => {\n this.nextId = 2;\n return this.props.closeCreateTableModal();\n };\n\n // eslint-disable-next-line @typescript-eslint/member-ordering\n lastValidationResult: object | null = null;\n\n validateForm = (values: any) => {\n const errors = {};\n\n const tableSettings = values[TABLE_SETTINGS];\n\n const setError = (path: string, error: any) => {\n if (error) {\n set_(errors, path, error);\n }\n };\n\n const {tableType} = tableSettings;\n\n const columns: Array<ColumnData> = values[COLUMNS];\n this.columns = columns;\n const nameCounters: Record<string, Array<number>> = {};\n forEach_(columns, (columnData, index) => {\n const {name} = columnData;\n const nameIndexes = nameCounters[name];\n if (!nameIndexes) {\n nameCounters[name] = [index];\n } else {\n nameIndexes.push(index);\n }\n\n // Validate column\n setError(`${COLUMNS}[${index}]`, this.validateColumnData(columnData, tableType));\n });\n forEach_(nameCounters, (indices) => {\n if (indices.length > 1) {\n indices.forEach((index) => {\n set_(\n errors,\n `${COLUMNS}[${index}].name`,\n 'The column with this name already exists',\n );\n });\n }\n });\n\n // validate tableSettings\n setError(TABLE_SETTINGS, this.validateTableSettings(tableSettings, columns));\n\n this.lastValidationResult = errors;\n return errors;\n };\n\n // eslint-disable-next-line @typescript-eslint/member-ordering\n keyColumns: Props['keyColumns'] = {};\n // eslint-disable-next-line @typescript-eslint/member-ordering\n formValidator = this.validateForm.bind(this);\n getFormValidator() {\n const {keyColumns} = this.props;\n if (this.keyColumns !== keyColumns) {\n this.keyColumns = keyColumns;\n /*\n * keyColumns is modified externally and Dialog knows nothing about it\n * and we need to create new instance of Function to force call its\n * validation with new keyColumns.\n * Without creation of new function validation will not be called\n */\n this.formValidator = this.validateForm.bind(this);\n }\n return this.formValidator;\n }\n\n render() {\n const {\n className,\n parentDirectory,\n showModal,\n compressionCodecs,\n erasureCodecs,\n primitiveTypes,\n groupSuggestions,\n } = this.props;\n const name = `${parentDirectory}/new_table`;\n\n return (\n <YTDFDialog<FIX_MY_TYPE>\n pristineSubmittable\n className={block(null, className)}\n size={'l'}\n visible={showModal}\n headerProps={{\n title: 'Create Table',\n }}\n isApplyDisabled={() => {\n return !isEmpty_(this.lastValidationResult);\n }}\n validate={this.getFormValidator()}\n onActiveTabChange={(tab) => {\n this.activeTabId = tab;\n }}\n onAdd={this.onAdd}\n onClose={this.onClose}\n initialValues={{\n [TABLE_SETTINGS]: {\n name: this.tableName !== undefined ? this.tableName : name,\n tableType: this.tableType,\n compressionCodec: [SELECT_EMPTY_VALUE],\n storageOption: StorageOptions.REPLICATION,\n replicasCount: this.replicasCount,\n erasureCodec: 'lrc_12_2_2',\n uniqueKeys: this.uniqueKeys,\n optimize_for: 'lookup',\n },\n [COLUMNS]: [createNewColumn(1, primitiveTypes[0]?.value)],\n }}\n fields={[\n {\n name: TABLE_SETTINGS,\n type: 'yt-create-table-tab',\n title: 'Table settings',\n fields: [\n {\n name: 'name',\n type: 'text',\n caption: 'Table name',\n },\n {\n name: 'tableType',\n type: 'radio',\n caption: 'Table type',\n tooltip: (\n <div className={block('tooltip')}>\n Data rows of\n {docsUrl(\n makeLink(\n UIFactory.docsUrls['storage:static_tables'],\n ' Static tables ',\n true,\n ),\n ' Static tables ',\n )}\n nearly impossible to modify, but they might be removed or\n merged, also new data rows might be appended to the end of a\n table. As the opposite of the above described restrictions\n there are\n {docsUrl(\n makeLink(\n UIFactory.docsUrls['dynamic-tables:overview'],\n ' Dynamic tables ',\n true,\n ),\n ' Dynamic tables ',\n )}\n which allow to modify data rows by key.\n <div className={block('alert-text')}>\n Before using Dynamic tables in production environment\n with <b>heavy load or strict SLA </b>\n you have to consult with development team.\n </div>\n </div>\n ),\n extras: {\n options: [\n {\n value: TableType.STATIC,\n label: 'Static table',\n },\n {\n value: TableType.DYNAMIC,\n label: 'Dynamic table',\n },\n {\n value: TableType.QUEUE,\n label: 'Queue table',\n },\n ],\n },\n },\n {\n separator: true,\n },\n {\n name: 'optimize_for',\n type: 'radio',\n caption: 'Optimize for',\n tooltip: docsUrl(\n makeLink(UIFactory.docsUrls['storage:chunks#optimize_for']),\n ),\n extras: {\n options: [\n {value: 'scan', label: 'Scan'},\n {value: 'lookup', label: 'Lookup'},\n ],\n },\n },\n {\n name: 'compressionCodec',\n type: 'select-with-subitems',\n caption: 'Compression',\n tooltip: docsUrl(\n makeLink(\n UIFactory.docsUrls[\n 'storage:compression#compression_codecs'\n ],\n ),\n ),\n extras: {\n ...compressionCodecs,\n disablePortal: false,\n },\n },\n {\n name: 'storageOption',\n type: 'radio',\n caption: 'Storage options',\n tooltip: docsUrl(\n makeLink(UIFactory.docsUrls['storage:replication#replication']),\n ),\n extras: {\n options: [\n {\n value: StorageOptions.REPLICATION,\n label: 'Replication',\n },\n {\n value: StorageOptions.ERASURE,\n label: 'Erasure encoding',\n },\n ],\n },\n },\n {\n name: 'replicasCount',\n type: 'text',\n caption: 'Number of replicas',\n visibilityCondition: {\n when: `${TABLE_SETTINGS}.storageOption`,\n isActive: (value: string) =>\n value === StorageOptions.REPLICATION,\n },\n },\n {\n name: 'erasureCodec',\n type: 'yt-select-single',\n caption: 'Erasure codec',\n tooltip: (\n <div className={block('tooltip')}>\n Erasure encoding allows to minimize disk space allocated for\n the table comparing with Replication, but it requires more\n CPU time during data access.\n {docsUrl(\n makeLink(\n UIFactory.docsUrls['storage:replication#erasure'],\n ),\n )}\n </div>\n ),\n visibilityCondition: {\n when: `${TABLE_SETTINGS}.storageOption`,\n isActive: (value: string) => value === StorageOptions.ERASURE,\n },\n extras: {\n items: erasureCodecs,\n hideFilter: true,\n width: 'max',\n },\n },\n {\n separator: true,\n },\n {\n type: 'block',\n name: 'schemaSettings',\n extras: {\n children: (\n <span className={block('title')}>Schema settings</span>\n ),\n },\n },\n ...deactivateFieldByVisibilityCondition({\n name: 'uniqueKeys',\n type: 'tumbler' as const,\n caption: 'Unique keys',\n tooltip: (\n <div className={block('tooltip')}>\n The parameter is actual only for static tables, for all\n dynamic tables it is always automatically enabled regardless\n of its value.\n {docsUrl(\n makeLink(\n UIFactory.docsUrls[\n 'storage:static_schema#overview'\n ],\n ),\n )}\n </div>\n ),\n visibilityCondition: {\n when: `${TABLE_SETTINGS}.tableType`,\n isActive: (value) => value === TableType.STATIC,\n },\n }),\n ],\n },\n {\n name: COLUMNS,\n type: 'yt-create-table-tab',\n multiple: true,\n onCreateTab: this.createNewColumn,\n getTitle: (values) => values.name,\n isRemovable: () => false,\n renderControls: (_item, _onCreate, onRemove) => {\n return (\n <Button\n onClick={(e: React.MouseEvent<HTMLButtonElement>) => {\n onRemove?.();\n e.stopPropagation();\n }}\n >\n <Icon awesome={'trash-alt'} /> Delete column\n </Button>\n );\n },\n fields: [\n {\n name: 'name',\n type: 'text',\n caption: 'Column name',\n required: true,\n },\n {\n name: 'dataType',\n type: 'yt-select-single',\n caption: 'Data type',\n tooltip: docsUrl(\n makeLink(UIFactory.docsUrls['storage:data_types#schema']),\n ),\n extras: {\n items: primitiveTypes,\n placeholder: 'Select type',\n width: 'max',\n hideClear: true,\n },\n touched: true, // required to display errors even if the field is not touched\n },\n {\n name: 'optional',\n type: 'tumbler',\n caption: 'Optional',\n tooltip: (\n <div className={block('tooltip')}>\n If the parameter is enabled the value might be defined as\n null. For dynamic tables all key-columns are required\n regardless of this value.\n {docsUrl(\n makeLink(\n UIFactory.docsUrls[\n 'storage:data_types#schema_optional'\n ],\n ),\n )}\n </div>\n ),\n },\n {\n name: 'group',\n type: 'create-table-group-suggest',\n caption: 'Column group name',\n tooltip: (\n <div className={block('tooltip')}>\n When columns have the same group name then the data of such\n columns will be placed in the same blocks.\n {docsUrl(\n makeLink(\n UIFactory.docsUrls[\n 'storage:static_schema#overview'\n ],\n ),\n )}\n </div>\n ),\n extras: {\n getItems: () => groupSuggestions,\n ...{\n getNoItemsMessage: getNoSuggestionsMsg,\n },\n },\n // TODO: fix this, so the definition of onChange didnt change, but the compiler throw errors\n // @ts-ignore\n onChange: (\n _value: unknown,\n _oldValue: unknown,\n _field: unknown,\n _fieldName: unknown,\n _form: unknown,\n {values}: ReturnType<FormApi<FIX_MY_TYPE>['getState']>,\n ) => {\n const allGroups = map_(values?.columns, 'group').filter((v) =>\n Boolean(v),\n );\n this.props.setCreateTableGroupSuggestions(allGroups);\n },\n },\n {\n separator: true,\n },\n {\n name: 'lock',\n type: 'create-table-lock-suggest',\n caption: 'Lock',\n tooltip: (\n <div className={block('tooltip')}>\n By default locking is applied to all columns of row. This\n parameter allows to improve granularity of locking by\n defining groups of columns to lock.\n {docsUrl(\n makeLink(\n UIFactory.docsUrls[\n 'dynamic-tables:transactions#conflicts'\n ],\n ),\n )}\n </div>\n ),\n // TODO: fix this, so the definition of onChange didnt change, but the compiler throw errors\n // @ts-ignore\n onChange: (\n _value: unknown,\n _oldValue: unknown,\n _field: unknown,\n _fieldName: unknown,\n _form: unknown,\n {values}: ReturnType<FormApi<FIX_MY_TYPE>['getState']>,\n ) => {\n const allLocks = map_(values?.columns, 'lock').filter((v) =>\n Boolean(v),\n );\n this.props.setCreateTableLockSuggestions(allLocks);\n },\n },\n {\n name: 'aggregate',\n type: 'yt-select-single',\n caption: 'Aggregate',\n tooltip: docsUrl(\n makeLink(\n UIFactory.docsUrls[\n 'dynamic-tables:sorted_dynamic_tables#aggr_columns'\n ],\n ),\n ),\n extras: {\n items: AGGREGATE_CHOICES,\n placeholder: 'Select aggregation',\n width: 'max',\n hideFilter: true,\n },\n },\n ],\n },\n ]}\n />\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n const {showModal, parentDirectory, columnNameCounters, keyColumns, columnsOrder} =\n getCreateTableModalState(state);\n\n const primitiveTypes = getPrimitiveTypes(state);\n\n return {\n showModal,\n parentDirectory,\n groupSuggestions: getColumnGroupSuggestions(state),\n lockSuggestions: getColumnLockSuggestions(state),\n columnNameCounters,\n\n keyColumns,\n columnsOrder,\n\n compressionCodecs: getCompressionCodecs(state),\n erasureCodecs: getErasureCodecs(state),\n primitiveTypes,\n };\n};\n\nconst mapDispatchToProps = {\n closeCreateTableModal,\n createTable,\n setCreateTableLockSuggestions,\n setCreateTableGroupSuggestions,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(CreateTableModalContentImpl);\n","import React, {Component} from 'react';\nimport {batch, connect} from 'react-redux';\nimport {useSelector} from '../../../../store/redux-hooks';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport findIndex_ from 'lodash/findIndex';\n\nimport {\n FormattedLink,\n FormattedTextOrLink,\n printColumnAsBytes,\n printColumnAsNumber,\n} from '../../../../components/formatters';\nimport {Checkbox} from '@gravity-ui/uikit';\n\nimport withKeyboardNavigation from '../../../../components/ElementsTable/hocs/withKeyboardNavigation';\nimport ElementsTableBase from '../../../../components/ElementsTable/ElementsTable';\nimport Link from '../../../../components/Link/Link';\nimport Icon from '../../../../components/Icon/Icon';\nimport AccountLink from '../../../accounts/AccountLink';\n\nimport {itemNavigationAllowed} from '../../../../pages/navigation/Navigation/ContentViewer/helpers';\n\nimport {\n getContentMode,\n getLoadState,\n getPreparedTableColumns,\n getSelected,\n getSelectedIndex,\n getSortedNodes,\n} from '../../../../store/selectors/navigation/content/map-node';\nimport {getTransaction} from '../../../../store/selectors/navigation';\n\nimport {\n navigateParent,\n setMode,\n updatePath,\n updateView,\n} from '../../../../store/actions/navigation';\nimport {setSelectedItem} from '../../../../store/actions/navigation/content/map-node';\n\nimport {ROOT_POOL_NAME, Tab as SchedulingTab} from '../../../../constants/scheduling';\nimport {NAVIGATION_MAP_NODE_TABLE_ID} from '../../../../constants/navigation';\nimport {LOADING_STATUS, Page} from '../../../../constants/index';\nimport hammer from '../../../../common/hammer';\nimport {showTableEraseModal} from '../../../../store/actions/navigation/modals/table-erase-modal';\nimport {\n showTableMergeModal,\n showTableSortModal,\n} from '../../../../store/actions/navigation/modals/table-merge-sort-modal';\n\nimport {RumMeasureTypes} from '../../../../rum/rum-measure-types';\nimport {useRumMeasureStop} from '../../../../rum/RumUiContext';\nimport {isFinalLoadingStatus, showErrorPopup} from '../../../../utils/utils';\nimport PathActions from './PathActions';\nimport {Tooltip} from '../../../../components/Tooltip/Tooltip';\nimport WarningIcon from '../../../../components/WarningIcon/WarningIcon';\nimport TTLInfo from '../../../../components/TTLInfo/TTLInfo';\nimport {MapNodeIcon} from '../../../../components/MapNodeIcon/MapNodeIcon';\n\nimport {isTrashNode} from '../../../../utils/navigation/isTrashNode';\nimport {isLinkToTrashNode} from '../../../../utils/navigation/isLinkToTrashNode';\n\nimport './MapNodesTable.scss';\n\nconst block = cn('map-nodes-table');\nconst ElementsTable = withKeyboardNavigation(ElementsTableBase);\n\nclass MapNodesTable extends Component {\n static propTypes = {\n columns: PropTypes.objectOf(\n PropTypes.shape({\n sort: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]),\n caption: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n align: PropTypes.string,\n get: PropTypes.func,\n }),\n ),\n contentMode: PropTypes.string.isRequired,\n selected: PropTypes.object.isRequired,\n loadState: PropTypes.string.isRequired,\n nodes: PropTypes.array.isRequired,\n selectedIndex: PropTypes.number.isRequired,\n transaction: PropTypes.string,\n\n setSelectedItem: PropTypes.func.isRequired,\n navigateParent: PropTypes.func.isRequired,\n updatePath: PropTypes.func.isRequired,\n updateView: PropTypes.func.isRequired,\n };\n\n static renderTrash(linkState) {\n return <FormattedLink text=\"trash\" state={linkState} theme=\"primary\" />;\n }\n\n static renderName(item) {\n return (\n <div className={block('name-cell')}>\n <div className={block('name-cell-text')}>{MapNodesTable.renderNameImpl(item)}</div>\n <div className={block('name-cell-tags')}>{MapNodesTable.renderTags(item)}</div>\n </div>\n );\n }\n\n static renderTags(item) {\n return (\n <TTLInfo\n attributes={item.$attributes}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }}\n />\n );\n }\n\n static renderNameImpl(item) {\n if (isTrashNode(item)) {\n return MapNodesTable.renderTrash(item.pathState);\n } else if (isLinkToTrashNode(item)) {\n return MapNodesTable.renderTrash(item.targetPathState);\n }\n\n const type = item.type;\n\n const textOrLink = (\n <FormattedTextOrLink\n text={item.caption}\n state={item.pathState}\n asLink={itemNavigationAllowed(item)}\n asHTML\n title={item.title}\n theme=\"primary\"\n className={block('name', 'unipika-wrapper')}\n />\n );\n\n const name = !item.parsedPathError ? (\n textOrLink\n ) : (\n <Tooltip content={<span>{item.parsedPathError.message} </span>}>\n <WarningIcon /> {textOrLink}\n </Tooltip>\n );\n\n if (type === 'scheduler_pool') {\n const poolTreeIndex = findIndex_(\n item.parsedPath.fragments,\n (fragment) => fragment.name === 'pool_trees',\n );\n\n const pool = item.parsedPath.fragments[poolTreeIndex + 2] ? item.name : ROOT_POOL_NAME;\n const poolTree = item.parsedPath.fragments[poolTreeIndex + 1].name;\n\n const url = `${Page.SCHEDULING}/${SchedulingTab.OVERVIEW}?pool=${pool}&tree=${poolTree}`;\n const arrow = <span>&#10142;</span>;\n const goToLink = (\n <Link url={url} title={url}>\n <span>go to scheduling</span>\n </Link>\n );\n\n return (\n <span>\n {name}&nbsp;{arrow}&nbsp;{goToLink}\n </span>\n );\n }\n\n if (type === 'link') {\n const target = (\n <FormattedTextOrLink\n text={item.targetPath}\n state={item.targetPathState}\n asLink={itemNavigationAllowed(item)}\n theme=\"primary\"\n />\n );\n\n const viewLink = (\n <FormattedLink text=\"view link\" state={item.linkPathState} theme=\"ghost\" />\n );\n\n const arrow = <span>&#10142;</span>;\n\n return (\n <span>\n {name}&nbsp;{viewLink}&nbsp;{arrow}&nbsp;{target}\n </span>\n );\n }\n\n return <span>{name}</span>;\n }\n\n static renderLocks(item) {\n return (\n item.locks > 0 && (\n <span title={item.locks + ' locks'}>\n <Icon face=\"solid\" awesome=\"lock\" />\n </span>\n )\n );\n }\n\n static renderModificationTime(item) {\n return hammer.format['DateTime'](item.modified, {format: 'full'});\n }\n\n static renderCreationTime(item) {\n return hammer.format['DateTime'](item.created, {format: 'full'});\n }\n\n static renderAccount(item, columnName) {\n return <AccountLink account={item[columnName]} inline />;\n }\n\n get hotkeys() {\n const {navigateParent} = this.props;\n\n return [\n {keys: 'h, ctrl+left', handler: navigateParent, scope: 'all'},\n {keys: 'space', handler: this.onSpaceHotkey, scope: 'all'},\n ];\n }\n\n get defaultColumns() {\n return [\n 'icon',\n 'name',\n 'locks',\n 'account',\n 'disk_space',\n 'row_count',\n 'modification_time',\n 'creation_time',\n ];\n }\n\n get resourcesColumns() {\n return [\n 'icon',\n 'name',\n 'master_memory',\n 'tablet_static_memory',\n 'tablet_count',\n 'disk_space',\n 'data_weight',\n 'chunk_count',\n 'node_count',\n 'row_count',\n ];\n }\n\n get columns() {\n return {\n sets: {\n default: {\n items: ['chooser', ...this.defaultColumns, 'actions'],\n },\n resources: {\n items: ['chooser', ...this.resourcesColumns, 'actions'],\n },\n },\n };\n }\n\n get tableProps() {\n return {\n css: 'map-node_' + this.props.contentMode,\n theme: 'light',\n striped: false,\n tableId: NAVIGATION_MAP_NODE_TABLE_ID,\n computeKey: (item) => item.name,\n onItemClick: this.onItemClick,\n columns: this.columns,\n templates: {\n chooser: this.renderChooser,\n icon: (node) => <MapNodeIcon node={node} />,\n name: MapNodesTable.renderName,\n locks: MapNodesTable.renderLocks,\n modification_time: MapNodesTable.renderModificationTime,\n creation_time: MapNodesTable.renderCreationTime,\n row_count: this.renderRowCount,\n chunk_count: this.printColumnAsNumber,\n node_count: this.printColumnAsNumber,\n disk_space: this.printColumnAsBytes,\n data_weight: this.printColumnAsBytes,\n tablet_static_memory: this.printColumnAsBytes,\n master_memory: this.printColumnAsBytes,\n tablet_count: this.printColumnAsNumber,\n account: MapNodesTable.renderAccount,\n actions: this.renderActions,\n },\n };\n }\n\n onItemClick = (item, _index, evt) => {\n if (evt?.target?.classList?.contains?.('map-node_default__table-item_type_chooser')) {\n this.onChooserClick(evt, item);\n } else if (item.parsedPathError) {\n showErrorPopup(item.parsedPathError, {hideOopsMsg: true, disableLogger: true});\n } else if (itemNavigationAllowed(item)) {\n batch(() => {\n this.props.updatePath(item.path);\n this.props.setMode('auto');\n });\n }\n };\n\n onSpaceHotkey = (evt, info, {item}) => {\n this.onChooserClick(evt, item);\n };\n\n onChooserClick = (evt, item) => {\n const {\n nativeEvent: {shiftKey},\n } = evt;\n this.props.setSelectedItem(item.name, shiftKey);\n evt.stopPropagation();\n };\n\n renderChooser = (item) => {\n const {selected} = this.props;\n const value = selected[item.name];\n\n return (\n <Checkbox\n id={`item_${item.name}`}\n size=\"l\"\n key={value}\n checked={value}\n onChange={(evt) => {\n this.onChooserClick(evt, item);\n }}\n >\n <span />\n </Checkbox>\n );\n };\n\n renderActions = (item) => {\n return <PathActions item={item} />;\n };\n\n renderRowCount = (item, columnName) => {\n const column = this.props.columns[columnName];\n return (item.dynamic ? '≈ ' : '') + hammer.format['Number'](column.get(item));\n };\n\n printColumnAsBytes = printColumnAsBytes.bind(this);\n printColumnAsNumber = printColumnAsNumber.bind(this);\n\n rowClassName = ({dynamic}) => {\n return dynamic ? block('row', {dyntable: true}) : undefined;\n };\n\n render() {\n const {nodes, columns, contentMode, loadState, selectedIndex} = this.props;\n\n const settings = {\n ...this.tableProps,\n items: nodes,\n columns: {\n ...this.tableProps.columns,\n items: columns,\n mode: contentMode,\n },\n };\n\n return (\n columns && (\n <div className={block()}>\n <ElementsTable\n {...settings}\n isLoading={loadState === LOADING_STATUS.LOADING}\n selectedIndex={selectedIndex}\n hotkeys={this.hotkeys}\n key={selectedIndex}\n rowClassName={this.rowClassName}\n />\n </div>\n )\n );\n }\n}\n\nfunction mapStateToProps(state) {\n return {\n loadState: getLoadState(state),\n columns: getPreparedTableColumns(state),\n transaction: getTransaction(state),\n contentMode: getContentMode(state),\n nodes: getSortedNodes(state),\n selected: getSelected(state),\n selectedIndex: getSelectedIndex(state),\n };\n}\n\nconst mapDispatchToProps = {\n setSelectedItem,\n navigateParent,\n updateView,\n updatePath,\n setMode,\n showTableEraseModal,\n showTableSortModal,\n showTableMergeModal,\n};\n\nconst MapNodesTableConnected = connect(mapStateToProps, mapDispatchToProps)(MapNodesTable);\n\nexport default function MapNodesTableWithRum() {\n const loadState = useSelector(getLoadState);\n const nodes = useSelector(getSortedNodes);\n\n useRumMeasureStop({\n type: RumMeasureTypes.NAVIGATION_CONTENT_MAP_NODE,\n stopDeps: [nodes, loadState],\n allowStop: ([nodes, loadState]) => {\n return Boolean(nodes) && isFinalLoadingStatus(loadState);\n },\n });\n\n return <MapNodesTableConnected />;\n}\n","import React, {Component, Fragment} from 'react';\nimport PropTypes from 'prop-types';\n\nimport Hotkey from '../../../components/Hotkey/Hotkey';\n\nimport {getDisplayName} from '../../../utils';\n\nimport '../ElementsTable.scss';\n\nexport default (ElementsTable) => {\n return class WithKeyboardNavigation extends Component {\n static displayName = `WithKeyboardNavigation(${getDisplayName(ElementsTable)})`;\n\n static propTypes = {\n // from parent\n hotkeys: PropTypes.array,\n onItemClick: PropTypes.func,\n selectedIndex: PropTypes.number,\n items: PropTypes.array.isRequired,\n };\n\n static defaultProps = {\n hotkeys: [],\n selectedIndex: 0,\n onItemClick: () => {},\n };\n\n state = {\n hoverSelectedIndex: this.props.selectedIndex,\n selectedIndex: this.props.selectedIndex,\n mode: 'mouse',\n };\n\n get hotkeys() {\n return [\n ...this.props.hotkeys.map(this.wrapHotkeyHandler),\n\n {keys: 'k, up', handler: this.selectPrev, scope: 'all'},\n {keys: 'up', handler: this.selectPrev, scope: 'filter'},\n\n {keys: 'j, down', handler: this.selectNext, scope: 'all'},\n {keys: 'down', handler: this.selectNext, scope: 'filter'},\n\n {\n keys: 'l, enter, ctrl+right',\n handler: this.handleItemKeyboardClick,\n scope: 'all',\n },\n {\n keys: 'enter',\n handler: this.handleItemKeyboardClick,\n scope: 'filter',\n },\n ];\n }\n\n wrapHotkeyHandler = (params) => {\n const {handler, ...rest} = params;\n return {\n ...rest,\n handler: (...args) => {\n const {items} = this.props;\n const {selectedIndex} = this.state;\n return handler(...args, {\n item: items[selectedIndex],\n index: selectedIndex,\n });\n },\n };\n };\n\n selectIndex = (index) => {\n const {items} = this.props;\n const maxIndex = Math.max(0, items.length - 1);\n\n let state;\n if (index > maxIndex) {\n state = {\n selectedIndex: maxIndex,\n hoverSelectedIndex: maxIndex,\n };\n } else if (index < 0) {\n state = {\n selectedIndex: 0,\n hoverSelectedIndex: 0,\n };\n } else {\n state = {\n selectedIndex: index,\n hoverSelectedIndex: index,\n };\n }\n\n this.setState({mode: 'keyboard', ...state});\n };\n\n selectNext = () => {\n const {hoverSelectedIndex} = this.state;\n\n this.selectIndex(hoverSelectedIndex + 1);\n };\n\n selectPrev = () => {\n const {hoverSelectedIndex} = this.state;\n\n this.selectIndex(hoverSelectedIndex - 1);\n };\n\n handleMouseMove = () => {\n const {mode} = this.state;\n\n if (mode !== 'mouse') {\n this.setState({mode: 'mouse'});\n }\n };\n\n handleItemHover = (item, index) => {\n const {mode} = this.state;\n\n if (mode === 'mouse') {\n this.setState({\n hoverSelectedIndex: index,\n });\n }\n };\n\n handleItemSelect = (item, index) => {\n const {mode} = this.state;\n const elem = document.querySelector(\n `.elements-table__row_selected_yes[data-index=\"${index}\"]`,\n );\n\n if (elem && mode === 'keyboard') {\n const windowHeight = document.documentElement.clientHeight;\n const bounding = elem.getBoundingClientRect();\n const bottomCoordinate = bounding.y + bounding.height;\n const topCoordinate = bounding.y;\n\n if (bottomCoordinate > windowHeight) {\n elem.scrollIntoView(false);\n } else if (topCoordinate < 120) {\n elem.scrollIntoView(true);\n window.scrollBy(0, -120);\n }\n }\n };\n\n handleItemKeyboardClick = () => {\n const {onItemClick, items} = this.props;\n const {selectedIndex} = this.state;\n\n if (items && items[selectedIndex]) {\n onItemClick(items[selectedIndex]);\n }\n };\n\n render() {\n const {selectedIndex, mode} = this.state;\n\n return (\n <Fragment>\n <ElementsTable\n {...this.props}\n cssHover={mode === 'mouse'}\n onItemHover={this.handleItemHover}\n onMouseMove={this.handleMouseMove}\n selectedIndex={mode === 'keyboard' ? selectedIndex : null}\n onItemSelect={mode === 'keyboard' ? this.handleItemSelect : null}\n />\n <Hotkey settings={this.hotkeys} />\n </Fragment>\n );\n }\n };\n};\n","import React from 'react';\nimport {compose} from 'redux';\nimport axios, {AxiosProgressEvent} from 'axios';\nimport cn from 'bem-cn-lite';\n\nimport withVisible, {WithVisibleProps} from '../../../../../hocs/withVisible';\nimport Button from '../../../../../components/Button/Button';\nimport Modal from '../../../../../components/Modal/Modal';\n\nimport {getPath} from '../../../../../store/selectors/navigation';\nimport {ConnectedProps, connect} from 'react-redux';\nimport {YTErrorBlock} from '../../../../../components/Block/Block';\nimport {YTDFDialog} from '../../../../../components/Dialog';\nimport {Alert} from '@gravity-ui/uikit';\n\nimport hammer from '../../../../../common/hammer';\nimport format from '../../../../../common/hammer/format';\n\nimport './UploadManager.scss';\nimport {updateView} from '../../../../../store/actions/navigation';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport {RootState} from '../../../../../store/reducers';\nimport {getXsrfCookieName} from '../../../../../utils';\nimport {wrapApiPromiseByToaster} from '../../../../../utils/utils';\nimport Link from '../../../../../components/Link/Link';\nimport {docsUrl, getConfigUploadTable} from '../../../../../config';\nimport HelpLink from '../../../../../components/HelpLink/HelpLink';\nimport CancelHelper from '../../../../../utils/cancel-helper';\nimport UIFactory from '../../../../../UIFactory';\nimport {getSortedNodesNames} from '../../../../../store/selectors/navigation/content/map-node';\nimport FileUploadProgress from '../../../../../components/FileUploadProgress/FileUploadProgress';\nimport FileDropZone from '../../../../../components/FileDropZone/FileDropZone';\n\nconst block = cn('upload-manager');\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & WithVisibleProps;\n\nfunction trimXLSX(fileName = '') {\n for (const i of ['.xlsx', '.xls']) {\n if (fileName.toLowerCase().endsWith(i)) {\n return fileName.substr(0, fileName.length - i.length);\n }\n }\n return fileName;\n}\n\ninterface State {\n name: string;\n\n progress: ProgressState;\n error?: any;\n nameAlreadyUsed: boolean;\n\n file: File | null;\n fileType: FileType;\n\n firstRowAsNames: boolean;\n secondRowAsTypes: boolean;\n}\n\ntype FileType = 'xlsx';\n\nconst FILE_TYPES: Array<{value: FileType; title: FileType}> = [{value: 'xlsx', title: 'xlsx'}];\n\ntype ProgressState =\n | {inProgress: false}\n | {inProgress: true; event: {total?: number; loaded: number}};\n\nconst getExcelBaseUrl = (payload: {cluster: string}) => {\n return getConfigUploadTable(payload);\n};\n\nclass UploadManagerCreate extends React.Component<Props, State> {\n state: State = {\n name: '',\n file: null,\n fileType: 'xlsx',\n progress: {inProgress: false},\n firstRowAsNames: true,\n secondRowAsTypes: false,\n nameAlreadyUsed: false,\n };\n\n private cancelHelper = new CancelHelper();\n\n renderContent() {\n const {file, error, nameAlreadyUsed} = this.state;\n return (\n <React.Fragment>\n <FileDropZone isDropable={!this.inProgress()} isEmpty={!file} onFile={this.onFile}>\n {file ? this.renderFileContent(file) : null}\n </FileDropZone>\n {error && <YTErrorBlock error={error} />}\n {nameAlreadyUsed && (\n <Alert\n theme=\"info\"\n message=\"If you want to supplement the table, go to it and use the upload dialog.\"\n />\n )}\n </React.Fragment>\n );\n }\n\n componentDidUpdate(_: Props, prevState: State) {\n if (prevState.name !== this.state.name) {\n const alreadyUsed = this.checkNameAlreadyExist(this.state.name);\n this.setState({nameAlreadyUsed: alreadyUsed});\n }\n }\n\n renderFileContent(file: File) {\n return (\n <React.Fragment>\n {this.renderSettings(file)}\n {this.renderProgress()}\n </React.Fragment>\n );\n }\n\n renderSettings(file: File) {\n const {path} = this.props;\n const {name} = this.state;\n const inProgress = this.inProgress();\n return (\n <YTDFDialog\n onAdd={() => Promise.resolve()}\n onClose={() => {}}\n visible={true}\n modal={false}\n initialValues={{\n path,\n name: name,\n size: `${hammer.format['Bytes'](file.size)} / ${hammer.format['Number'](\n file.size,\n )} B`,\n fileType: this.state.fileType,\n firstRowAsNames: this.state.firstRowAsNames,\n secondRowAsTypes: this.state.secondRowAsTypes,\n }}\n fields={[\n {\n name: 'path',\n caption: 'Parent folder',\n type: 'plain',\n },\n {\n name: 'name',\n caption: 'Name',\n type: 'text',\n required: true,\n extras: {\n disabled: inProgress,\n ...(this.state.nameAlreadyUsed && {\n validationState: 'invalid',\n errorMessage: 'Node with this name already exists',\n }),\n },\n onChange: (name: string | Array<string> | undefined) => {\n this.setState({name: name as string});\n },\n },\n {\n name: 'size',\n caption: 'Size',\n type: 'plain',\n },\n {\n name: 'fileType',\n type: 'yt-select-single',\n caption: 'Type',\n extras: {\n items: FILE_TYPES,\n hideFilter: true,\n disabled: true,\n width: 'max',\n },\n },\n {\n name: 'firstRowAsNames',\n type: 'tumbler',\n caption: 'Column names',\n tooltip: 'Interpret first row as column names',\n onChange: (firstRowAsNames: boolean) => {\n this.setState({firstRowAsNames});\n },\n extras: {\n disabled: inProgress,\n },\n },\n {\n name: 'secondRowAsTypes',\n type: 'tumbler',\n caption: 'Types',\n tooltip: 'There is row with types right before data-rows',\n onChange: (secondRowAsTypes: boolean) => {\n this.setState({secondRowAsTypes});\n },\n extras: {\n disabled: inProgress,\n },\n },\n ]}\n />\n );\n }\n\n renderFooterContent() {\n const {file} = this.state;\n const inProgress = this.inProgress();\n const helpLink = docsUrl(<HelpLink url={UIFactory.docsUrls['storage:excel']} />);\n\n if (!file) {\n return helpLink;\n }\n return inProgress ? (\n <React.Fragment>\n <Button onClick={this.cancelUpload}>Cancel upload</Button>\n <span className={block('help-link')}>{helpLink}</span>\n </React.Fragment>\n ) : (\n <React.Fragment>\n <Button onClick={this.onReset}>Reset</Button>\n <span className={block('help-link')}>{helpLink}</span>\n </React.Fragment>\n );\n }\n\n onReset = () => {\n this.onFile(null);\n this.setState({error: null});\n };\n\n renderProgress() {\n const {progress} = this.state;\n const event = progress.inProgress ? progress.event : {total: 1, loaded: 0};\n\n if (progress.inProgress) {\n return <FileUploadProgress event={event} />;\n }\n\n return null;\n }\n\n cancelUpload = () => {\n this.cancelHelper.removeAllRequests();\n };\n\n inProgress() {\n const {progress} = this.state;\n return progress.inProgress;\n }\n\n onFile = (files: FileList | null) => {\n const file = files && files[0];\n this.setState({\n file,\n name: trimXLSX(file?.name) || '',\n });\n if (file) {\n const fileError = this.checkFile(file);\n if (fileError) {\n this.setState({error: {message: fileError}});\n }\n }\n };\n\n renderConfirm = () => {\n const fileError = this.checkFile(this.state.file);\n return (\n <Button\n className={block('confirm')}\n size=\"m\"\n view=\"action\"\n title=\"Upload\"\n disabled={\n Boolean(fileError) ||\n Boolean(this.state.error) ||\n this.inProgress() ||\n this.state.nameAlreadyUsed\n }\n onClick={this.onXlsxUpload}\n >\n Upload\n </Button>\n );\n };\n\n checkFile(file: State['file']): string | null {\n if (!file) {\n return 'file is not selected';\n }\n\n const {cluster} = this.props;\n\n const UPLOAD_CONFIG = getExcelBaseUrl({cluster});\n\n if (file.size > UPLOAD_CONFIG.uploadTableMaxSize) {\n return `File size must not be greater than ${format.Bytes(\n UPLOAD_CONFIG.uploadTableMaxSize,\n )}`;\n }\n\n return null;\n }\n\n checkNameAlreadyExist(name: string) {\n const {existingNodes} = this.props;\n return existingNodes.includes(name);\n }\n\n renderClose = (className: string) => {\n return (\n <Button\n className={block('confirm', className)}\n size=\"m\"\n title=\"Close\"\n disabled={this.inProgress()}\n onClick={this.handleClose}\n >\n Close\n </Button>\n );\n };\n\n onStartUpload(size: number) {\n this.setState({\n progress: {inProgress: true, event: {loaded: 0, total: size}},\n error: undefined,\n });\n }\n\n onUploadProgress = (event: AxiosProgressEvent) => {\n this.setState({progress: {inProgress: true, event}});\n };\n\n onStopUpload(error?: State['error']) {\n this.setState({progress: {inProgress: false}});\n if (!error) {\n this.props.updateView();\n this.props.handleClose();\n } else if (!axios.isCancel(error) && (!error || error.code !== 'cancelled')) {\n error = error.response?.data || error;\n this.setState({error});\n }\n }\n\n onXlsxUpload = () => {\n const {file, fileType} = this.state;\n if (!file || fileType !== 'xlsx') {\n return;\n }\n\n const {path: parentDir, cluster} = this.props;\n const {name} = this.state;\n const path = `${parentDir}/${name}`;\n\n this.onStartUpload(file.size);\n\n const EXCEL_BASE_URL = getExcelBaseUrl({cluster}).uploadTableExcelBaseUrl;\n\n const readyUrl = `${EXCEL_BASE_URL}/${cluster}/api/ready`;\n const uploadUrl = `${EXCEL_BASE_URL}/${cluster}/api/upload`;\n\n this.cancelHelper.removeAllRequests();\n return axios.get(readyUrl).then(\n () => {\n const {firstRowAsNames, secondRowAsTypes} = this.state;\n const start_row = [firstRowAsNames, secondRowAsTypes].filter(Boolean).length + 1;\n const params = new URLSearchParams({\n create: String(true),\n path,\n header: String(firstRowAsNames),\n start_row: String(start_row),\n types: String(secondRowAsTypes),\n });\n const formData = new FormData();\n formData.append('uploadfile', file);\n return wrapApiPromiseByToaster(\n axios.post(`${uploadUrl}?${params}`, formData, {\n onUploadProgress: this.onUploadProgress,\n withCredentials: true,\n withXSRFToken: true,\n xsrfCookieName: getXsrfCookieName(cluster),\n xsrfHeaderName: 'X-Csrf-Token',\n cancelToken: this.cancelHelper.generateNextToken(),\n }),\n {\n toasterName: 'upload_xlsx' + path,\n successTitle: 'Table is created',\n errorTitle: 'Failed to create table',\n successContent: (\n <Link url={`/${cluster}/navigation?path=${path}`}>{path}</Link>\n ),\n },\n ).then(\n () => {\n this.onStopUpload();\n },\n (e) => {\n this.onStopUpload(e);\n },\n );\n },\n (e) => {\n this.onStopUpload({\n message: `${readyUrl} responded with error`,\n inner_errors: [e],\n });\n },\n );\n };\n\n handleClose = () => {\n if (this.inProgress()) {\n return;\n }\n this.props.handleClose();\n };\n\n render() {\n const {visible} = this.props;\n return (\n <React.Fragment>\n {visible && (\n <Modal\n size=\"m\"\n title=\"Create table from xlsx\"\n visible={visible}\n onCancel={this.handleClose}\n confirmText=\"Upload\"\n content={this.renderContent()}\n footerContent={this.renderFooterContent()}\n renderCustomConfirm={this.renderConfirm}\n renderCustomCancel={this.renderClose}\n contentClassName={block()}\n />\n )}\n </React.Fragment>\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n const path: string = getPath(state);\n\n return {\n path,\n cluster: getCluster(state),\n existingNodes: getSortedNodesNames(state),\n };\n};\n\nconst mapDispatchToProps = {\n updateView,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default compose(withVisible, connector)(UploadManagerCreate);\n","import React from 'react';\nimport {useSelector} from '../../../../../store/redux-hooks';\n\nimport {\n getNodesInfo,\n getSelectedNodes,\n} from '../../../../../store/selectors/navigation/content/map-node';\nimport {CountsList} from '../../../../../components/CountsList/CountsList';\n\nimport MultipleActions from '../MultipleActions';\n\nfunction NodesTypesContainer() {\n const nodesInfo = useSelector(getNodesInfo);\n const selectedNodes = useSelector(getSelectedNodes);\n\n return (\n <CountsList\n items={nodesInfo}\n selectedItems={selectedNodes}\n renderActions={() => <MultipleActions />}\n />\n );\n}\n\nexport default React.memo(NodesTypesContainer);\n","import {ThunkAction} from 'redux-thunk';\nimport {CREATE_ACO_MODAL} from '../../../../constants/navigation/modals';\nimport {CreateACOModalAction} from '../../../../store/reducers/navigation/modals/create-aco';\nimport {RootState} from '../../../reducers';\nimport {ytApiV3} from '../../../../rum/rum-wrap-api';\nimport {updateView} from '../index';\nimport {toaster} from '../../../../utils/toaster';\n\ntype CreateAcoModalThunkAction<R = any> = ThunkAction<R, RootState, unknown, CreateACOModalAction>;\n\nexport function openCreateACOModal(\n params: {path?: string; namespace?: string} = {},\n): CreateAcoModalThunkAction {\n return (dispatch) => {\n dispatch({\n type: CREATE_ACO_MODAL,\n data: {...params, visible: true},\n });\n };\n}\n\nexport function closeCreateACOModal(): CreateAcoModalThunkAction {\n return (dispatch) => {\n dispatch({\n type: CREATE_ACO_MODAL,\n data: {path: undefined, target: undefined, visible: false},\n });\n };\n}\n\ntype CreateACOActionParams = {path: string; name: string; namespace: string};\n\nexport function createACO(params: CreateACOActionParams): CreateAcoModalThunkAction {\n return (dispatch) => {\n const {path, name, namespace} = params;\n\n return ytApiV3\n .create({\n path,\n type: 'access_control_object',\n attributes: {name, namespace},\n })\n .then(() => {\n dispatch(closeCreateACOModal());\n dispatch(updateView());\n\n toaster.add({\n name: 'create-aco',\n theme: 'success',\n title: 'ACO created',\n content: '',\n });\n });\n };\n}\n","import * as React from 'react';\nimport {DFDialogProps, YTDFDialog, makeFormSubmitError} from '../../../components/Dialog';\n\nexport type UploadFileManagerFileFormValues = {\n name?: string;\n path?: string;\n size?: string;\n};\n\ninterface FileSettingsFormProps {\n className?: string;\n initialValues: UploadFileManagerFileFormValues;\n formId: string;\n isDisabled: boolean;\n onSubmit: (values: UploadFileManagerFileFormValues) => Promise<void>;\n onValidation: DFDialogProps['validate'];\n}\n\nexport const UploadFileManagerFileSettingsForm: React.FC<FileSettingsFormProps> = ({\n onSubmit,\n formId,\n isDisabled,\n onValidation,\n initialValues,\n className,\n}) => {\n return (\n <YTDFDialog<UploadFileManagerFileFormValues>\n className={className}\n onAdd={(formApi) => {\n const values = formApi.getState().values;\n\n return onSubmit(values).catch(makeFormSubmitError);\n }}\n onClose={() => {}}\n validate={onValidation}\n visible={true}\n modal={false}\n formId={formId}\n initialValues={initialValues}\n footerProps={{\n hidden: true,\n }}\n fields={[\n {\n name: 'path',\n caption: 'Parent folder',\n type: 'plain',\n },\n {\n name: 'name',\n caption: 'Name',\n type: 'text',\n required: true,\n extras: {\n disabled: isDisabled,\n },\n },\n {\n name: 'size',\n caption: 'Size',\n type: 'plain',\n },\n ]}\n />\n );\n};\n\nexport default UploadFileManagerFileSettingsForm;\n","import * as React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {Button} from '@gravity-ui/uikit';\n\nimport Link from '../../../components/Link/Link';\nimport Modal from '../../../components/Modal/Modal';\nimport withVisible, {WithVisibleProps} from '../../../hocs/withVisible';\nimport FileDropZone from '../../../components/FileDropZone/FileDropZone';\nimport FileUploadProgress from '../../../components/FileUploadProgress/FileUploadProgress';\n\nimport UploadFileManagerFileSettingsForm from './UploadFileManagerFileSettingsForm';\nimport {useUploadFileManager} from '../../../containers/UploadFileManager';\n\nimport {toaster} from '../../../utils/toaster';\n\nimport './UploadFileManager.scss';\n\nconst block = cn('yt-upload-file-manager');\n\ninterface UploadFileManagerProps extends WithVisibleProps {\n title: string;\n}\n\nexport const UploadFileManager: React.FC<UploadFileManagerProps> = (props) => {\n const uploadSettings = useUploadFileManager({\n onSuccess: ({filePath}) => {\n props.handleClose();\n\n toaster.add({\n name: 'upload_file_manager',\n title: 'Upload complete',\n content: <Link url={`${location.pathname}?path=${filePath}`}>{filePath}</Link>,\n theme: 'success',\n autoHiding: 10000,\n });\n },\n });\n const isUploadButtonDisabled = uploadSettings.isProgress || !uploadSettings.file;\n\n const handleClose = () => {\n props.handleClose();\n uploadSettings.cancelUpload();\n uploadSettings.onReset();\n };\n\n const renderContent = () => {\n return (\n <React.Fragment>\n <FileDropZone\n isEmpty={!uploadSettings.file}\n onFile={uploadSettings.onFile}\n isDropable={!uploadSettings.isProgress}\n >\n {uploadSettings.file && (\n <React.Fragment>\n <UploadFileManagerFileSettingsForm\n className={block('form')}\n onValidation={uploadSettings.onValidation}\n isDisabled={uploadSettings.isProgress}\n formId={uploadSettings.formId}\n onSubmit={uploadSettings.handleSubmit}\n initialValues={uploadSettings.initialValues}\n />\n {uploadSettings.isProgress && uploadSettings.progressEvent && (\n <FileUploadProgress event={uploadSettings.progressEvent} />\n )}\n </React.Fragment>\n )}\n </FileDropZone>\n </React.Fragment>\n );\n };\n\n const renderConfirm = (className: string) => {\n if (uploadSettings.isProgress) {\n return null;\n }\n\n return (\n <Button\n view=\"action\"\n className={className}\n disabled={isUploadButtonDisabled}\n extraProps={{\n form: uploadSettings.formId,\n }}\n title=\"Upload\"\n type=\"submit\"\n >\n Upload\n </Button>\n );\n };\n\n const renderFooterContent = () => {\n return uploadSettings.isProgress ? (\n <Button onClick={uploadSettings.cancelUpload}>Cancel upload</Button>\n ) : (\n <Button type=\"reset\" onClick={uploadSettings.onReset}>\n Reset\n </Button>\n );\n };\n\n const renderClose = () => {\n return (\n <Button\n size=\"m\"\n title=\"Close\"\n disabled={uploadSettings.isProgress}\n onClick={handleClose}\n >\n Close\n </Button>\n );\n };\n\n return (\n <React.Fragment>\n <Modal\n className={block()}\n size=\"m\"\n title={props.title}\n visible={props.visible}\n onCancel={handleClose}\n confirmText=\"Upload\"\n content={renderContent()}\n footerContent={uploadSettings.file ? renderFooterContent() : null}\n renderCustomConfirm={renderConfirm}\n renderCustomCancel={renderClose}\n contentClassName={''}\n />\n </React.Fragment>\n );\n};\n\nexport const UploadFileManagerWithClose = withVisible(UploadFileManager);\n\nexport default UploadFileManager;\n","import * as React from 'react';\nimport {useDispatch, useSelector} from '../../store/redux-hooks';\nimport {getPath} from '../../store/selectors/navigation';\nimport {getCluster} from '../../store/selectors/global';\nimport {AxiosError, AxiosProgressEvent, isCancel} from 'axios';\nimport CancelHelper from '../../utils/cancel-helper';\nimport {updateView} from '../../store/actions/navigation';\nimport hammer from '../../common/hammer';\nimport {uploadFile} from './uploadFile';\nimport {ytApiV3} from '../../rum/rum-wrap-api';\n\ntype UseUploadFileManagerProps = {\n onSuccess(params: {filePath: string}): void;\n};\n\nexport type UseUploadFileManagerFileFormValues = {\n name?: string;\n path?: string;\n size?: string;\n};\n\nexport const useUploadFileManager = (opts: UseUploadFileManagerProps) => {\n const dispatch = useDispatch();\n const path = useSelector(getPath);\n const cluster = useSelector(getCluster);\n\n const [file, setFile] = React.useState<File>();\n const [isProgress, setProgress] = React.useState(false);\n const [progressEvent, setProgressEvent] = React.useState<AxiosProgressEvent>();\n\n const cancelHelperRef = React.useRef(new CancelHelper());\n const cancelHelper = cancelHelperRef.current;\n\n const formId = React.useMemo(() => `upload-form-${Math.random()}`, []);\n\n const onFile = (files: FileList | null) => {\n const uploadedFile = files?.[0];\n\n if (uploadedFile && !isProgress) {\n setFile(uploadedFile);\n }\n };\n\n const handleSubmit = (values: UseUploadFileManagerFileFormValues) => {\n if (file) {\n setProgress(true);\n\n const filePath = `${values.path}/${values.name}`;\n\n return uploadFile({\n file,\n cluster,\n filePath,\n cancelHelper,\n handleUploadProgress: (progressEvent: AxiosProgressEvent) =>\n setProgressEvent(progressEvent),\n })\n .finally(() => setProgress(false))\n .then(() => {\n dispatch(updateView());\n opts.onSuccess({\n filePath,\n });\n })\n .catch((error: AxiosError) => {\n if (isCancel(error)) {\n return;\n }\n\n throw error;\n });\n }\n\n return Promise.reject(new Error('File is invalid'));\n };\n\n const initialValues = React.useMemo(() => {\n if (file) {\n return {\n path,\n name: file?.name,\n size: `${hammer.format['Bytes'](file.size)} / ${hammer.format['Number'](\n file.size,\n )} B`,\n };\n }\n\n return {};\n }, [path, file]);\n\n const onValidation = React.useCallback(async (values: UseUploadFileManagerFileFormValues) => {\n if (!values.name) {\n return {name: 'File name is required'};\n }\n\n if (values.path && values.name) {\n const ok = await ytApiV3.exists({\n path: `${values.path}/${values.name}`,\n });\n\n if (ok) {\n return {name: 'A file with this name already exists'};\n }\n }\n\n return undefined;\n }, []);\n\n const cancelUpload = () => {\n cancelHelper.removeAllRequests();\n setProgress(false);\n setProgressEvent(undefined);\n };\n\n const onReset = () => {\n setFile(undefined);\n };\n\n React.useEffect(() => {\n return () => {\n cancelHelper.removeAllRequests();\n };\n }, [cancelHelper]);\n\n return {\n onReset,\n cancelUpload,\n isProgress,\n file,\n onFile,\n formId,\n handleSubmit,\n initialValues,\n progressEvent,\n onValidation,\n };\n};\n","import {AxiosProgressEvent} from 'axios';\n\nimport {YT} from '../../config/yt-config';\nimport CancelHelper from '../../utils/cancel-helper';\nimport {ytApiV3} from '../../rum/rum-wrap-api';\n\ninterface StartUploadProps {\n file: File;\n cluster: string;\n filePath: string;\n handleUploadProgress?: (progressEvent: AxiosProgressEvent) => void;\n cancelHelper: CancelHelper;\n}\n\nexport const uploadFile = (opts: StartUploadProps) => {\n const {filePath, file, cluster} = opts;\n const clusterConfig = YT.clusters[cluster];\n const externalProxy = clusterConfig.externalProxy;\n const proxy = clusterConfig.proxy;\n\n const cancelHelper = opts.cancelHelper;\n\n return ytApiV3\n .create({\n path: filePath,\n type: 'file',\n recursive: true,\n ignore_existing: true,\n })\n .then(() => {\n return ytApiV3.startTransaction({}).then((transactionId: string) => {\n return ytApiV3\n .writeFile({\n setup: {\n onUploadProgress: opts.handleUploadProgress,\n proxy: externalProxy ?? proxy,\n },\n parameters: {\n path: filePath,\n compute_md5: false,\n ping_ancestor_transactions: true,\n transaction_id: transactionId,\n },\n cancellation: cancelHelper.removeAllAndSave,\n data: file,\n })\n .then(() => {\n return ytApiV3.commitTransaction({transaction_id: transactionId});\n })\n .catch(async (err: any) => {\n await ytApiV3.abortTransaction({transaction_id: transactionId});\n\n throw err;\n });\n });\n });\n};\n","import {DropdownMenu} from '@gravity-ui/uikit';\nimport React, {Component} from 'react';\nimport {connect} from 'react-redux';\nimport {useDispatch, useSelector} from '../../../../store/redux-hooks';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {getConfigUploadTable} from '../../../../config/index';\n\nimport ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\nimport RadioButton from '../../../../components/RadioButton/RadioButton';\nimport Button from '../../../../components/Button/Button';\nimport Filter from '../../../../components/Filter/Filter';\nimport {SelectSingle} from '../../../../components/Select/Select';\nimport {YTErrorBlock} from '../../../../components/Error/Error';\nimport Icon from '../../../../components/Icon/Icon';\nimport {StickyContainer} from '../../../../components/StickyContainer/StickyContainer';\nimport TTLInfo from '../../../../components/TTLInfo/TTLInfo';\nimport CreateTableModal from '../../modals/CreateTableModal/CreateTableModal';\nimport {isCreateTableModalVisible} from '../../../../store/selectors/navigation/modals/create-table';\n\nimport MapNodesTable from './MapNodesTable';\n\nimport {openCreateTableModal} from '../../../../store/actions/navigation/modals/create-table';\nimport {getPath, getTransaction} from '../../../../store/selectors/navigation';\nimport {getNavigationPathAttributes} from '../../../../store/selectors/navigation/navigation';\nimport {getMediumList} from '../../../../store/selectors/thor';\nimport {\n getContentMode,\n getError,\n getFilterState,\n getLoadState,\n getMapNodeResourcesLoading,\n getMediumType,\n isRootNode,\n} from '../../../../store/selectors/navigation/content/map-node';\n\nimport {OPEN_CREATE_DIRECTORY_POPUP} from '../../../../constants/navigation/modals/create-directory';\nimport {LOADING_STATUS} from '../../../../constants/index';\nimport {ContentMode} from '../../../../constants/navigation';\n\nimport {openEditingPopup} from '../../../../store/actions/navigation/modals/path-editing-popup';\nimport {\n fetchNodes,\n setContentMode,\n setFilter,\n setMediumType,\n updateResourceUsage,\n} from '../../../../store/actions/navigation/content/map-node';\nimport {RumMeasureTypes} from '../../../../rum/rum-measure-types';\nimport {useAppRumMeasureStart} from '../../../../rum/rum-app-measures';\n\nimport hammer from '../../../../common/hammer';\nimport UploadManagerCreate from '../Table/UploadManager/UploadManagerCreate';\nimport NodesTypes from './NodesTypes/NodesTypes';\n\nimport {NoWrap} from '../../../../components/Text/Text';\nimport {showLinkToModal} from '../../../../store/actions/navigation/modals/link-to-modal';\nimport {openCreateACOModal} from '../../../../store/actions/navigation/modals/create-aco';\nimport NavigationExtraActions from '../../../../containers/NavigationExtraActions/NavigationExtraActions';\nimport UIFactory from '../../../../UIFactory';\nimport {getCluster} from '../../../../store/selectors/global';\nimport {UploadFileManagerWithClose} from '../../UploadFileManager';\n\nimport './MapNode.scss';\n\nconst block = cn('map-node');\nconst tbBlock = cn('elements-toolbar');\n\nclass MapNode extends Component {\n static TYPE = 'map_node';\n\n static CONTENT_MODE_OPTIONS = [ContentMode.DEFAULT, ContentMode.RESOURCES];\n\n static propTypes = {\n error: PropTypes.object,\n loadState: PropTypes.string,\n contentMode: PropTypes.oneOf(MapNode.CONTENT_MODE_OPTIONS),\n path: PropTypes.string.isRequired,\n transaction: PropTypes.string,\n mediumList: PropTypes.arrayOf(PropTypes.string),\n mediumType: PropTypes.string.isRequired,\n filterState: PropTypes.string.isRequired,\n\n setFilter: PropTypes.func.isRequired,\n setContentMode: PropTypes.func.isRequired,\n fetchNodes: PropTypes.func.isRequired,\n setMediumType: PropTypes.func.isRequired,\n openEditingPopup: PropTypes.func.isRequired,\n openCreateTableModal: PropTypes.func.isRequired,\n openCreateACOModal: PropTypes.func.isRequired,\n showACOCreateButton: PropTypes.bool.isRequired,\n cluster: PropTypes.bool.isRequired,\n };\n\n componentDidMount() {\n this.props.fetchNodes();\n }\n\n componentDidUpdate(prevProps) {\n const {path, transaction, fetchNodes} = this.props;\n const {path: prevPath, transaction: prevTransaction} = prevProps;\n if (path !== prevPath || transaction !== prevTransaction) {\n fetchNodes();\n }\n }\n\n renderError() {\n const {\n error: {message, details},\n } = this.props;\n return (\n <div className={block('error')}>\n <YTErrorBlock message={message} error={details} />\n </div>\n );\n }\n\n renderView() {\n return (\n <StickyContainer>\n {({stickyTopClassName}) => (\n <React.Fragment>\n <div className={tbBlock({sticky: false}, stickyTopClassName)}>\n <MapNodeToolbarConnected />\n </div>\n <div className={block('content')}>\n <MapNodesTable />\n </div>\n </React.Fragment>\n )}\n </StickyContainer>\n );\n }\n\n render() {\n const {loadState} = this.props;\n\n return (\n <ErrorBoundary>\n <div className={block()}>\n {loadState === LOADING_STATUS.ERROR ? this.renderError() : this.renderView()}\n </div>\n <CreateTableModal />\n </ErrorBoundary>\n );\n }\n}\n\nfunction mapStateToProps(state) {\n const path = getPath(state);\n\n return {\n path,\n showACOCreateButton: path === '//sys/access_control_object_namespaces/queries',\n loadState: getLoadState(state),\n error: getError(state),\n contentMode: getContentMode(state),\n filterState: getFilterState(state),\n transaction: getTransaction(state),\n mediumList: getMediumList(state),\n mediumType: getMediumType(state),\n showCreateTableModal: isCreateTableModalVisible(state),\n attributes: getNavigationPathAttributes(state),\n cluster: getCluster(state),\n };\n}\n\nconst mapDispatchToProps = {\n setFilter,\n setContentMode,\n fetchNodes,\n setMediumType,\n openEditingPopup,\n openCreateTableModal,\n showLinkToModal,\n openCreateACOModal,\n};\n\nconst MapNodeConnected = connect(mapStateToProps, mapDispatchToProps)(MapNode);\n\nexport default function MapNodeWithRum() {\n const loadState = useSelector(getLoadState);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.NAVIGATION_CONTENT_MAP_NODE,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return loadState === LOADING_STATUS.LOADING;\n },\n });\n return <MapNodeConnected />;\n}\n\nclass MapNodeToolbar extends React.PureComponent {\n uploadXlsRef = React.createRef();\n uploadFileRef = React.createRef();\n\n createDirectoryButtonClick = () => {\n const {path, openEditingPopup} = this.props;\n openEditingPopup(null, path + '/', OPEN_CREATE_DIRECTORY_POPUP);\n };\n\n createTableButtonClick = () => {\n const {path} = this.props;\n this.props.openCreateTableModal(path);\n };\n\n uploadTableButtonClick = () => {\n if (this.uploadXlsRef.current) {\n this.uploadXlsRef.current.handleShow();\n }\n };\n\n uploadFileButtonClick = () => {\n if (this.uploadFileRef.current) {\n this.uploadFileRef.current.handleShow();\n }\n };\n\n createLinkButtonClick = () => {\n const {path} = this.props;\n this.props.showLinkToModal({path: `${path}/new_link`});\n };\n\n createACOButtonClick = () => {\n const {path} = this.props;\n\n this.props.openCreateACOModal({path, namespace: 'queries'});\n };\n\n render() {\n const {\n setFilter,\n contentMode,\n setContentMode,\n mediumList,\n mediumType,\n setMediumType,\n filterState,\n path,\n attributes,\n showACOCreateButton,\n cluster,\n } = this.props;\n\n const {uploadTableExcelBaseUrl} = getConfigUploadTable({cluster});\n\n const {menuItems, renderModals} = UIFactory.getMapNodeExtraCreateActions([\n {\n action: this.createTableButtonClick,\n text: <NoWrap>Table</NoWrap>,\n iconStart: <Icon awesome={'table'} face={'solid'} />,\n },\n {\n action: this.createDirectoryButtonClick,\n text: <NoWrap>Directory</NoWrap>,\n iconStart: <Icon awesome={'folder'} face={'solid'} />,\n },\n {\n action: this.createLinkButtonClick,\n text: <NoWrap>Link</NoWrap>,\n iconStart: <Icon awesome={'link'} />,\n },\n showACOCreateButton && {\n action: this.createACOButtonClick,\n text: <NoWrap>ACO</NoWrap>,\n iconStart: <Icon awesome={'acl-object'} />,\n },\n ...(!uploadTableExcelBaseUrl\n ? []\n : [\n {\n action: this.uploadTableButtonClick,\n text: <NoWrap>Upload xlsx</NoWrap>,\n iconStart: <Icon awesome={'upload'} />,\n },\n ]),\n {\n action: this.uploadFileButtonClick,\n text: <NoWrap>Upload file</NoWrap>,\n iconStart: <Icon awesome={'upload'} />,\n },\n ]);\n\n return (\n <div className={block('toolbar')}>\n <div className={tbBlock('container')}>\n <div className={block('filter', tbBlock('component'))}>\n <Filter\n size=\"m\"\n key={path}\n debounce={300}\n value={filterState}\n onChange={setFilter}\n qa=\"map-node-filter\"\n />\n </div>\n\n <TTLInfo attributes={attributes} size={'m'} className={tbBlock('component')} />\n\n <div className={block('content-mode', tbBlock('component'))}>\n <RadioButton\n size=\"m\"\n name=\"navigation-map-node-content-mode\"\n value={contentMode}\n items={map_(\n MapNode.CONTENT_MODE_OPTIONS,\n RadioButton.prepareSimpleValue,\n )}\n onChange={(event) => setContentMode(event.target.value)}\n />\n </div>\n\n <div className={block('show-resources', tbBlock('component'))}>\n <ShowResourcesButton />\n </div>\n\n {mediumList?.length && (\n <div className={block('medium-type', tbBlock('component'))}>\n <SelectSingle\n label=\"Medium:\"\n placeholder=\"All\"\n value={mediumType}\n items={map_(mediumList, (type) => ({\n value: type,\n text: hammer.format['ReadableField'](type),\n }))}\n onChange={setMediumType}\n width=\"max\"\n hideFilter={true}\n />\n </div>\n )}\n\n <NavigationExtraActions\n className={block('copy-to-remote', tbBlock('component'))}\n />\n\n <div className={block('create-object', tbBlock('component'))}>\n <DropdownMenu\n menuSize={'n'}\n popupClass={block('create-popup')}\n items={menuItems}\n renderSwitcher={(props) => (\n <Button {...props} size=\"m\" title=\"Create object\">\n Create object\n </Button>\n )}\n />\n </div>\n </div>\n <div className=\"nodes-types\">\n <NodesTypes />\n </div>\n <UploadManagerCreate ref={this.uploadXlsRef} />\n <UploadFileManagerWithClose ref={this.uploadFileRef} title={'Upload file'} />\n {renderModals()}\n </div>\n );\n }\n}\n\nfunction ShowResourcesButton() {\n const dispatch = useDispatch();\n const isRoot = useSelector(isRootNode);\n const loading = useSelector(getMapNodeResourcesLoading);\n return (\n <Button\n size=\"m\"\n title=\"Show all nodes resource usage [Shift+S]\"\n disabled={isRoot}\n loading={loading}\n onClick={() => dispatch(updateResourceUsage())}\n hotkey={[{keys: 'shift+s', handler: updateResourceUsage, scope: 'all'}]}\n >\n Show resources\n </Button>\n );\n}\n\nconst MapNodeToolbarConnected = connect(mapStateToProps, mapDispatchToProps)(MapNodeToolbar);\n","// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport CancelHelper from '../../../../utils/cancel-helper';\nimport {getPath} from '../../../selectors/navigation';\nimport {\n GET_DOCUMENT,\n SET_DOCUMENT_EDIT_MODE,\n} from '../../../../constants/navigation/content/document';\nimport {YTApiId, ytApiV3Id} from '../../../../rum/rum-wrap-api';\nimport {ThunkAction} from 'redux-thunk';\nimport {RootState} from '../../../reducers';\nimport {NavigationDocumentAction} from '../../../reducers/navigation/content/document';\nimport {wrapApiPromiseByToaster} from '../../../../utils/utils';\n\nconst requests = new CancelHelper();\n\ntype DocumentThunkAction = ThunkAction<void, RootState, any, NavigationDocumentAction>;\n\nexport const getDocument = (): DocumentThunkAction => (dispatch, getState) => {\n const state = getState();\n const path = getPath(state) as string;\n\n dispatch({type: GET_DOCUMENT.REQUEST});\n requests.removeAllRequests();\n\n return ytApiV3Id\n .get(YTApiId.navigationGetDocument, {\n parameters: {\n path,\n output_format: {$value: 'json', $attributes: {}},\n },\n cancellation: requests.saveCancelToken,\n })\n .then((document) => {\n dispatch({\n type: GET_DOCUMENT.SUCCESS,\n data: {document},\n });\n })\n .catch((error) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({type: GET_DOCUMENT.CANCELLED});\n } else {\n dispatch({\n type: GET_DOCUMENT.FAILURE,\n data: {error},\n });\n }\n });\n};\n\nexport const saveDocument =\n ({path, documentString}: {path: string; documentString: string}): DocumentThunkAction =>\n async (dispatch) => {\n const document = documentString === '' ? null : JSON.parse(documentString);\n try {\n await wrapApiPromiseByToaster(yt.v3.set({path}, document), {\n toasterName: 'navigation-save-document',\n errorTitle: 'Failed to save document',\n successTitle: 'Document successfully saved',\n });\n\n dispatch({type: SET_DOCUMENT_EDIT_MODE, data: false});\n dispatch({\n type: GET_DOCUMENT.SUCCESS,\n data: {document: document},\n });\n\n return Promise.resolve();\n } catch (e) {\n return Promise.reject(e);\n }\n };\n\nexport const abortAndReset = (): DocumentThunkAction => (dispatch) => {\n requests.removeAllRequests();\n dispatch({type: GET_DOCUMENT.CANCELLED});\n};\n","import {createSelector} from 'reselect';\nimport {RootState} from '../../../reducers';\nimport {calculateLoadingStatus} from '../../../../utils/utils';\n\nexport const getNavigationDocumentLoadingStatus = createSelector(\n [\n (store: RootState) => store.navigation.content.document.loading,\n (store: RootState) => store.navigation.content.document.loaded,\n (store: RootState) => store.navigation.content.document.error,\n ],\n (loading, loaded, error) => {\n return calculateLoadingStatus(loading, loaded, error);\n },\n);\n\nexport const selectNavigationDocument = (store: RootState) => store.navigation.content.document;\n","import React, {FC, Fragment} from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {Alert, Button, Flex} from '@gravity-ui/uikit';\n\n// @ts-ignore\nimport ypath from '@ytsaurus/interface-helpers/lib/ypath';\nimport MetaTable from '../../../../components/MetaTable/MetaTable';\nimport {main} from '../../../../components/MetaTable/presets';\nimport Yson from '../../../../components/Yson/Yson';\nimport {UnipikaSettings} from '../../../../components/Yson/StructuredYson/StructuredYsonTypes';\nimport Icon from '../../../../components/Icon/Icon';\nimport {OpenQueryButtons} from '../../../../containers/OpenQueryButtons/OpenQueryButtons';\n\nimport './DocumentBody.scss';\n\nconst block = cn('yt-document-body');\n\ntype Props = {\n attributes: Record<any, any>;\n document: any;\n settings: UnipikaSettings;\n onEditClick: () => void;\n queryAutoOpen?: boolean;\n};\n\nconst EditButton: FC<Pick<Props, 'onEditClick'>> = ({onEditClick}) => {\n return (\n <Button onClick={onEditClick}>\n <Icon awesome={'pencil'} />\n Edit\n </Button>\n );\n};\n\nfunction DocumentExtraTools({\n onEditClick,\n attributes,\n queryAutoOpen,\n}: Pick<Props, 'attributes' | 'onEditClick' | 'queryAutoOpen'>) {\n const isYqlView = 'view' === ypath.getValue(attributes, '/_yql_type');\n return (\n <Flex gap={4}>\n {isYqlView && <OpenQueryButtons className={block('yql')} autoOpen={queryAutoOpen} />}\n <EditButton onEditClick={onEditClick} />\n </Flex>\n );\n}\n\nfunction DocumentBody({attributes, settings, onEditClick, document = null, queryAutoOpen}: Props) {\n const [type] = ypath.getValues(attributes, ['/type']);\n\n return (\n <Fragment>\n <MetaTable items={[main(attributes), [{key: 'type', value: type}]]} />\n {document === null ? (\n <Alert\n layout=\"horizontal\"\n theme=\"info\"\n message=\"Document is empty.\"\n actions={<EditButton onEditClick={onEditClick} />}\n />\n ) : (\n <Yson\n value={document}\n settings={settings}\n folding\n extraTools={\n <DocumentExtraTools\n onEditClick={onEditClick}\n attributes={attributes}\n queryAutoOpen={queryAutoOpen}\n />\n }\n />\n )}\n </Fragment>\n );\n}\n\nexport default DocumentBody;\n","import React, {FC, useCallback} from 'react';\nimport cn from 'bem-cn-lite';\nimport './DocumentEditModal.scss';\nimport {FormApi, YTDFDialog} from '../../../../components/Dialog';\nimport {Text} from '@gravity-ui/uikit';\nimport {UnipikaSettings} from '../../../../components/Yson/StructuredYson/StructuredYsonTypes';\n\ntype Props = {\n open: boolean;\n document: any;\n settings: UnipikaSettings;\n onCancel: () => void;\n onSave: (data: string) => Promise<void>;\n};\n\ntype FormValues = {\n jsonEditor: {value: string};\n};\n\nconst block = cn('document-edit-modal');\n\nconst DocumentEditModal: FC<Props> = ({open, document, settings, onCancel, onSave}) => {\n const handleSaveDocument = useCallback(\n (form: FormApi<FormValues, Partial<FormValues>>) => {\n return onSave(form.getState().values.jsonEditor.value);\n },\n [onSave],\n );\n\n return (\n <YTDFDialog<FormValues>\n className={block()}\n headerProps={{\n title: (\n <Text variant=\"header-1\" color=\"secondary\">\n Edit document\n </Text>\n ),\n }}\n visible={open}\n onClose={onCancel}\n onAdd={handleSaveDocument}\n initialValues={{jsonEditor: {value: JSON.stringify(document, null, '\\t')}}}\n fields={[\n {\n fullWidth: true,\n name: 'jsonEditor',\n type: 'json',\n extras: {\n className: block('editor'),\n initialSplitSize: '50%',\n initialShowPreview: false,\n unipikaSettings: settings,\n folding: true,\n },\n },\n ]}\n />\n );\n};\n\nexport default DocumentEditModal;\n","import React, {FC, useCallback, useEffect} from 'react';\nimport {useDispatch, useSelector} from '../../../../store/redux-hooks';\nimport cn from 'bem-cn-lite';\nimport LoadDataHandler from '../../../../components/LoadDataHandler/LoadDataHandler';\nimport {Loader} from '@gravity-ui/uikit';\nimport {\n abortAndReset,\n getDocument,\n saveDocument,\n} from '../../../../store/actions/navigation/content/document';\nimport {getAttributes, getPath} from '../../../../store/selectors/navigation';\nimport {getEffectiveMode} from '../../../../store/selectors/navigation/navigation';\nimport {selectNavigationDocument} from '../../../../store/selectors/navigation/content/document';\nimport './Document.scss';\nimport DocumentBody from './DocumentBody';\nimport {SET_DOCUMENT_EDIT_MODE} from '../../../../constants/navigation/content/document';\nimport DocumentEditModal from './DocumentEditModal';\nimport unipika from '../../../../common/thor/unipika';\n\nconst block = cn('navigation-document');\n\nconst Document: FC = () => {\n const dispatch = useDispatch();\n const {loading, loaded, error, errorData, document, editMode} =\n useSelector(selectNavigationDocument);\n const attributes = useSelector(getAttributes);\n const path = useSelector(getPath);\n const settings = unipika.prepareSettings();\n const mode = useSelector(getEffectiveMode);\n const initialLoading = loading && !loaded;\n\n useEffect(() => {\n dispatch(getDocument());\n return () => {\n dispatch(abortAndReset());\n };\n }, [dispatch, path, mode]);\n\n const handleEditClick = useCallback(() => {\n dispatch({type: SET_DOCUMENT_EDIT_MODE, data: true});\n }, [dispatch]);\n\n const handleOnCancel = useCallback(() => {\n dispatch({type: SET_DOCUMENT_EDIT_MODE, data: false});\n }, [dispatch]);\n\n const handleOnDocumentSave = useCallback(\n async (documentString: string) => {\n await dispatch(saveDocument({path, documentString}));\n },\n [dispatch, path],\n );\n\n return (\n <LoadDataHandler loaded={loaded} error={error} errorData={errorData}>\n <div className={block({loading: initialLoading})}>\n {initialLoading ? (\n <Loader />\n ) : (\n <>\n <DocumentBody\n document={document}\n settings={settings}\n attributes={attributes}\n onEditClick={handleEditClick}\n queryAutoOpen={loaded}\n />\n <DocumentEditModal\n settings={settings}\n open={editMode}\n onCancel={handleOnCancel}\n onSave={handleOnDocumentSave}\n document={document}\n />\n </>\n )}\n </div>\n </LoadDataHandler>\n );\n};\n\nexport default Document;\n","import React, {FC} from 'react';\nimport Document from './Document';\nimport {useRumMeasureStop} from '../../../../rum/RumUiContext';\nimport {RumMeasureTypes} from '../../../../rum/rum-measure-types';\nimport {useAppRumMeasureStart} from '../../../../rum/rum-app-measures';\nimport {isFinalLoadingStatus} from '../../../../utils/utils';\nimport {getNavigationDocumentLoadingStatus} from '../../../../store/selectors/navigation/content/document';\nimport {useSelector} from '../../../../store/redux-hooks';\nimport {useDisableMaxContentWidth} from '../../../../containers/MaxContentWidth';\n\nconst DocumentWithRum: FC = () => {\n const loadState = useSelector(getNavigationDocumentLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.NAVIGATION_CONTENT_DOCUMENT,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.NAVIGATION_CONTENT_DOCUMENT,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n useDisableMaxContentWidth();\n\n return <Document />;\n};\n\nexport default DocumentWithRum;\n","import CancelHelper from '../../../../utils/cancel-helper';\nimport {navigateParent} from '../../../../store/actions/navigation';\nimport {ABORT_TRANSACTION} from '../../../../constants/navigation/content/transaction';\nimport {ytApiV3} from '../../../../rum/rum-wrap-api';\n\nconst requests = new CancelHelper();\n\nexport function abortTransaction(id) {\n return (dispatch) => {\n dispatch({type: ABORT_TRANSACTION.REQUEST});\n\n return ytApiV3\n .abortTransaction({\n parameters: {transaction_id: id},\n cancellation: requests.saveCancelToken,\n })\n .then(() => {\n dispatch(navigateParent());\n dispatch({type: ABORT_TRANSACTION.SUCCESS});\n })\n .catch((error) => {\n dispatch({\n type: ABORT_TRANSACTION.FAILURE,\n data: {error},\n });\n });\n };\n}\n\nexport function resetStore() {\n return (dispatch) => {\n requests.removeAllRequests();\n dispatch({type: ABORT_TRANSACTION.CANCELLED});\n };\n}\n","import React, {useCallback} from 'react';\nimport {useDispatch, useSelector} from '../../../../store/redux-hooks';\nimport PropTypes from 'prop-types';\nimport ypath from '@ytsaurus/interface-helpers/lib/ypath';\nimport cn from 'bem-cn-lite';\n\nimport LoadDataHandler from '../../../../components/LoadDataHandler/LoadDataHandler';\nimport MetaTable from '../../../../components/MetaTable/MetaTable';\nimport {main} from '../../../../components/MetaTable/presets';\nimport Button from '../../../../components/Button/Button';\nimport Modal from '../../../../components/Modal/Modal';\n\nimport {\n abortTransaction,\n resetStore,\n} from '../../../../store/actions/navigation/content/transaction';\nimport {getAttributes, getLoadState} from '../../../../store/selectors/navigation';\nimport withVisible from '../../../../hocs/withVisible';\nimport {useRumMeasureStop} from '../../../../rum/RumUiContext';\nimport {RumMeasureTypes} from '../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../utils/utils';\nimport {useAppRumMeasureStart} from '../../../../rum/rum-app-measures';\nimport Yson from '../../../../components/Yson/Yson';\n\nconst block = cn('navigation-transaction');\n\nTransaction.propTypes = {\n // from withVisible hoc\n visible: PropTypes.bool.isRequired,\n handleClose: PropTypes.func.isRequired,\n handleShow: PropTypes.func.isRequired,\n};\n\nfunction Transaction({visible, handleClose, handleShow}) {\n const dispatch = useDispatch();\n const attributes = useSelector(getAttributes);\n\n const [title, startTime, timeout, id] = ypath.getValues(attributes, [\n '/title',\n '/start_time',\n '/timeout',\n '/id',\n ]);\n const {loading, error, errorData} = useSelector(\n (state) => state.navigation.content.transaction,\n );\n\n const handleTransactionAbort = useCallback(() => dispatch(abortTransaction(id)), [dispatch]);\n const handleModalClose = useCallback(() => {\n handleClose();\n dispatch(resetStore());\n }, [dispatch, handleClose]);\n\n const modalContent = (\n <LoadDataHandler loaded={false} error={error} errorData={errorData}>\n About to abort transaction <span className=\"elements-monospace\">{id}</span>\n </LoadDataHandler>\n );\n\n return (\n <div className={block()}>\n <MetaTable\n items={[\n main(attributes),\n [\n {\n key: 'title',\n value: <Yson value={title} />,\n visible: Boolean(title),\n },\n {\n key: 'start_time',\n value: startTime,\n visible: Boolean(startTime),\n },\n {\n key: 'timeout',\n value: timeout,\n visible: Boolean(timeout),\n },\n ],\n ]}\n />\n\n <Button onClick={handleShow}>Abort</Button>\n <Modal\n title=\"Abort\"\n visible={visible}\n loading={loading}\n confirmTheme=\"danger\"\n confirmText=\"Abort\"\n content={modalContent}\n onConfirm={handleTransactionAbort}\n onCancel={handleModalClose}\n />\n </div>\n );\n}\n\nconst TransactionConnected = withVisible(Transaction);\n\nexport default function TransactionWithRum() {\n const loadState = useSelector(getLoadState);\n useAppRumMeasureStart({\n type: RumMeasureTypes.NAVIGATION_CONTENT_TRANSACTION,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.NAVIGATION_CONTENT_TRANSACTION,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <TransactionConnected />;\n}\n","import ypath from '@ytsaurus/interface-helpers/lib/ypath';\nimport {prepareNavigationState} from '../../../../utils/navigation';\n\nexport default class Transaction {\n constructor(transaction, parentParsedPath) {\n this.id = ypath.getValue(transaction, '');\n this.attributes = ypath.getValue(transaction, '/@');\n\n this.type = this.attributes.type;\n this.title = this.attributes.title;\n this.owner = this.attributes.owner;\n this.started = this.attributes.start_time;\n\n this.parsedPath = ypath.YPath.clone(parentParsedPath).concat(\n '/' + ypath.YPath.fragmentFromYSON(this.id),\n );\n this.pathState = prepareNavigationState(this.parsedPath);\n this.path = this.parsedPath.stringify();\n }\n}\n","import yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport map_ from 'lodash/map';\n\nimport ypath from '@ytsaurus/interface-helpers/lib/ypath';\nimport CancelHelper from '../../../../utils/cancel-helper';\nimport {prepareRequest} from '../../../../utils/navigation';\nimport {getParsedPath, getPath, getTransaction} from '../../../../store/selectors/navigation';\nimport Transaction from '../../../../utils/navigation/content/transaction-map/transaction';\nimport {\n CHANGE_FILTER,\n LOAD_TRANSACTIONS,\n} from '../../../../constants/navigation/content/transaction-map';\nimport {YTApiId, ytApiV3Id} from '../../../../rum/rum-wrap-api';\n\nconst requests = new CancelHelper();\n\nexport function loadTransactions() {\n return (dispatch, getState) => {\n const state = getState();\n const path = getPath(state);\n const parsedPath = getParsedPath(state);\n const transaction = getTransaction(state);\n\n dispatch({type: LOAD_TRANSACTIONS.REQUEST});\n requests.removeAllRequests();\n\n return ytApiV3Id\n .list(YTApiId.navigationListTransactions, {\n parameters: prepareRequest('/', {\n path,\n transaction,\n attributes: ['type', 'title', 'start_time', 'owner'],\n }),\n cancellation: requests.saveCancelToken,\n })\n .then((rawTransactions) => {\n const transactions = ypath.getValue(rawTransactions, '');\n\n dispatch({\n type: LOAD_TRANSACTIONS.SUCCESS,\n data: {\n transactions: map_(\n transactions,\n (transaction) => new Transaction(transaction, parsedPath),\n ),\n },\n });\n })\n .catch((error) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({type: LOAD_TRANSACTIONS.CANCELLED});\n } else {\n dispatch({\n type: LOAD_TRANSACTIONS.FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nexport function changeFilter(filter) {\n return {\n type: CHANGE_FILTER,\n data: {filter},\n };\n}\n\nexport function abortAndReset() {\n return (dispatch) => {\n requests.removeAllRequests();\n dispatch({type: LOAD_TRANSACTIONS.CANCELLED});\n };\n}\n","export const tableItems = {\n icon: {\n sort: false,\n caption: '',\n align: 'center',\n },\n id: {\n align: 'left',\n sort(transaction) {\n return transaction.id;\n },\n },\n owner: {\n align: 'left',\n sort(transaction) {\n return transaction.owner;\n },\n },\n title: {\n align: 'left',\n sort(transaction) {\n return transaction.title;\n },\n },\n start_time: {\n align: 'right',\n sort(transaction) {\n return transaction.started;\n },\n },\n actions: {\n caption: '',\n align: 'center',\n sort: false,\n },\n};\n","import hammer from '../../../../common/hammer';\nimport {createSelector} from 'reselect';\nimport {tableItems} from '../../../../utils/navigation/content/transaction-map/table';\nimport {NAVIGATION_TRANSACTION_MAP_TABLE_ID} from '../../../../constants/navigation/content/transaction-map';\nimport {calculateLoadingStatus} from '../../../../utils/utils';\n\nconst getRawTransactions = (state) => state.navigation.content.transactionMap.transactions;\nconst getSortState = (state) => state.tables[NAVIGATION_TRANSACTION_MAP_TABLE_ID];\nconst getFilter = (state) => state.navigation.content.transactionMap.filter;\n\nconst getFilteredTransactions = createSelector(\n [getRawTransactions, getFilter],\n (rawTransactions, filter) =>\n hammer.filter.filter({\n data: rawTransactions,\n input: filter,\n factors: ['id', 'title'],\n }),\n);\n\nexport const getTransactions = createSelector(\n [getFilteredTransactions, getSortState],\n (filteredTransactions, sortState) =>\n hammer.utils.sort(filteredTransactions, sortState, tableItems),\n);\n\nexport const getNavigationTransactionMapLoadingStatus = createSelector(\n [\n (store) => store.navigation.content.transactionMap.loading,\n (store) => store.navigation.content.transactionMap.loaded,\n (store) => store.navigation.content.transactionMap.error,\n ],\n (loading, loaded, error) => {\n return calculateLoadingStatus(loading, loaded, error);\n },\n);\n","import React, {Component} from 'react';\nimport {connect} from 'react-redux';\nimport {useSelector} from '../../../../store/redux-hooks';\nimport PropTypes from 'prop-types';\nimport hammer from '../../../../common/hammer';\nimport cn from 'bem-cn-lite';\n\nimport ClickableAttributesButton from '../../../../components/AttributesButton/ClickableAttributesButton';\nimport LoadDataHandler from '../../../../components/LoadDataHandler/LoadDataHandler';\nimport {FormattedText, FormattedTextOrLink} from '../../../../components/formatters';\nimport ElementsTable from '../../../../components/ElementsTable/ElementsTable';\nimport Filter from '../../../../components/Filter/Filter';\nimport Icon from '../../../../components/Icon/Icon';\nimport {StickyContainer} from '../../../../components/StickyContainer/StickyContainer';\nimport {Toolbar} from '../../../../components/WithStickyToolbar/Toolbar/Toolbar';\n\nimport {NAVIGATION_TRANSACTION_MAP_TABLE_ID} from '../../../../constants/navigation/content/transaction-map';\nimport {\n changeFilter,\n loadTransactions,\n} from '../../../../store/actions/navigation/content/transaction-map';\nimport {\n getNavigationTransactionMapLoadingStatus,\n getTransactions,\n} from '../../../../store/selectors/navigation/content/transaction-map';\nimport {tableItems} from '../../../../utils/navigation/content/transaction-map/table';\nimport {getIconNameForType} from '../../../../utils/navigation/path-editor';\nimport {getPath, getTransaction} from '../../../../store/selectors/navigation';\nimport {itemNavigationAllowed} from '../../../../pages/navigation/Navigation/ContentViewer/helpers';\n\nimport {useRumMeasureStop} from '../../../../rum/RumUiContext';\nimport {useAppRumMeasureStart} from '../../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../utils/utils';\n\nimport './TransactionMap.scss';\n\nconst block = cn('navigation-transaction-map');\n\nclass TransactionMap extends Component {\n static propTypes = {\n // from connect\n loading: PropTypes.bool.isRequired,\n loaded: PropTypes.bool.isRequired,\n error: PropTypes.bool.isRequired,\n errorData: PropTypes.object.isRequired,\n\n path: PropTypes.string.isRequired,\n filter: PropTypes.string.isRequired,\n transactions: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n transaction: PropTypes.string,\n\n changeFilter: PropTypes.func.isRequired,\n loadTransactions: PropTypes.func.isRequired,\n };\n\n static renderIcon(item) {\n const iconName = getIconNameForType(item.type);\n\n return <Icon awesome={iconName} />;\n }\n\n static renderId(item) {\n const isLink = itemNavigationAllowed(item);\n\n return <FormattedTextOrLink state={item.pathState} asLink={isLink} text={item.id} />;\n }\n\n static renderOwner(item) {\n return <FormattedText text={item.owner} />;\n }\n\n static renderStartTime(item) {\n return hammer.format['DateTime'](item.started, {format: 'full'});\n }\n\n static renderTitle(item) {\n return <FormattedText text={item.title} />;\n }\n\n static renderActions(item) {\n return (\n <ClickableAttributesButton\n title={item.id}\n path={`//sys/transactions/${item.id}`}\n withTooltip\n />\n );\n }\n\n componentDidMount() {\n this.props.loadTransactions();\n }\n\n componentDidUpdate(prevProps) {\n const {path, transaction, loadTransactions} = this.props;\n\n if (prevProps.path !== path || prevProps.transaction !== transaction) {\n loadTransactions();\n }\n }\n\n get tableSettings() {\n return {\n css: block(),\n theme: 'light',\n cssHover: true,\n striped: false,\n tableId: NAVIGATION_TRANSACTION_MAP_TABLE_ID,\n columns: {\n items: tableItems,\n sets: {\n default: {\n items: ['icon', 'id', 'title', 'owner', 'start_time', 'actions'],\n },\n },\n mode: 'default',\n },\n templates: {\n icon: TransactionMap.renderIcon,\n id: TransactionMap.renderId,\n owner: TransactionMap.renderOwner,\n start_time: TransactionMap.renderStartTime,\n title: TransactionMap.renderTitle,\n actions: TransactionMap.renderActions,\n },\n computeKey(item) {\n return item.id;\n },\n };\n }\n\n handleFilterChange = (value) => this.props.changeFilter(value);\n\n render() {\n const {filter, loading, transactions} = this.props;\n\n return (\n <div className={block()}>\n <StickyContainer>\n {({stickyTopClassName}) => (\n <React.Fragment>\n <Toolbar\n className={stickyTopClassName}\n itemsToWrap={[\n {\n node: (\n <Filter\n hasClear\n size=\"m\"\n value={filter}\n debounce={300}\n className={block('filter')}\n onChange={this.handleFilterChange}\n placeholder=\"Filter transactions...\"\n />\n ),\n },\n ]}\n />\n <LoadDataHandler {...this.props}>\n <ElementsTable\n {...this.tableSettings}\n items={transactions}\n isLoading={loading}\n />\n </LoadDataHandler>\n </React.Fragment>\n )}\n </StickyContainer>\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const {filter, loading, loaded, error, errorData} = state.navigation.content.transactionMap;\n const path = getPath(state);\n const transaction = getTransaction(state);\n const transactions = getTransactions(state);\n\n return {\n loading,\n loaded,\n error,\n errorData,\n path,\n transaction,\n filter,\n transactions,\n };\n};\n\nconst mapDispatchToProps = {\n loadTransactions,\n changeFilter,\n};\n\nconst TransactionMapConnected = connect(mapStateToProps, mapDispatchToProps)(TransactionMap);\n\nexport default function TranscationMapWithRum() {\n const loadState = useSelector(getNavigationTransactionMapLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.NAVIGATION_CONTENT_TRANSACTION_MAP,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.NAVIGATION_CONTENT_TRANSACTION_MAP,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <TransactionMapConnected />;\n}\n","import {AccessAclTab} from '../../../tabs/ACL/ACL';\nimport ReplicatedTable from '../../../../../pages/navigation/content/ReplicatedTable/ReplicatedTable';\nimport ReplicatedTableMeta from '../../../content/ReplicatedTable/ReplicatedTableMeta';\n\nimport Link from '../../../../../pages/navigation/content/Link/Link';\nimport File from '../../../../../pages/navigation/content/File/File';\nimport Table from '../../../../../pages/navigation/content/Table/Table';\nimport MapNode from '../../../../../pages/navigation/content/MapNode/MapNode';\nimport Document from '../../../content/Document/DocumentWithRum';\nimport Transaction from '../../../../../pages/navigation/content/Transaction/Transaction';\nimport TransactionMap from '../../../../../pages/navigation/content/TransactionMap/TransactionMap';\n\nconst supportedContentTypes = {\n map_node: MapNode,\n portal_entrance: MapNode,\n portal_exit: MapNode,\n rootstock: MapNode,\n scion: MapNode,\n cell_node_map: MapNode,\n sys_node: MapNode,\n access_control_object_namespace_map: MapNode,\n access_control_object_namespace: MapNode,\n access_control_object: AccessAclTab,\n tablet_cell: MapNode,\n chaos_cell: MapNode,\n scheduler_pool_tree_map: MapNode,\n scheduler_pool: MapNode,\n document: Document,\n string_node: Document,\n int64_node: Document,\n uint64_node: Document,\n double_node: Document,\n boolean_node: Document,\n link: Link,\n file: File,\n table: Table,\n replicated_table: ReplicatedTable,\n chaos_replicated_table: ReplicatedTable,\n replication_log_table: ReplicatedTableMeta,\n transaction: Transaction,\n nested_transaction: Transaction,\n topmost_transaction_map: TransactionMap,\n transaction_map: TransactionMap,\n hunk_storage: MapNode,\n};\n\nexport default (type: string) => supportedContentTypes[type as keyof typeof supportedContentTypes];\n","import {createSelector} from 'reselect';\n\nimport type {RootState} from '../../../reducers';\nimport type {YtQueueStatus} from '../../../reducers/navigation/tabs/queue/types';\n\nexport const emptyRate = {'1m': 0, '1h': 0, '1d': 0};\n\nexport const getFamily = (state: RootState) =>\n state.navigation.tabs.queue.status.statusData?.family;\n\nexport const getPartitionCount = (state: RootState) =>\n state.navigation.tabs.queue.status.statusData?.partition_count;\n\nexport const getReadDataWeightRate = (state: RootState) =>\n state.navigation.tabs.queue.status.statusData?.read_data_weight_rate ?? emptyRate;\n\nexport const getReadRowCountRate = (state: RootState) =>\n state.navigation.tabs.queue.status.statusData?.read_row_count_rate ?? emptyRate;\n\nexport const getWriteDataWeightRate = (state: RootState) =>\n state.navigation.tabs.queue.status.statusData?.write_data_weight_rate ?? emptyRate;\n\nexport const getWriteRowCountRate = (state: RootState) =>\n state.navigation.tabs.queue.status.statusData?.write_row_count_rate ?? emptyRate;\n\nexport const getStatusError = (state: RootState) => state.navigation.tabs.queue.status.statusError;\n\nexport const getStatusLoading = (state: RootState) =>\n state.navigation.tabs.queue.status.statusLoading;\n\nexport const getStatusLoaded = (state: RootState) =>\n state.navigation.tabs.queue.status.statusLoaded;\n\nexport const getQueueStatusDataAlerts = (state: RootState): YtQueueStatus['alerts'] =>\n state.navigation.tabs.queue.status?.statusData?.alerts;\n\nexport const getQueueMode = (state: RootState) => state.navigation.tabs.queue.filters.queueMode;\n\nexport const getQueuePartitionIndex = (state: RootState) =>\n state.navigation.tabs.queue.filters.queuePartitionIndex;\n\nexport const getQueuePartitionsColumns = (state: RootState) =>\n state.navigation.tabs.queue.filters.partitionsColumns;\n\nexport const getQueueTabletCellHost = (state: RootState) =>\n state.navigation.tabs.queue.filters.queueTabletCellHost;\n\nexport const getQueueTabletCellId = (state: RootState) =>\n state.navigation.tabs.queue.filters.queueTabletCellId;\n\nexport const getQueueConsumerName = (state: RootState) =>\n state.navigation.tabs.queue.filters.queueConsumerName;\n\nexport const getQueueOwner = (state: RootState) => state.navigation.tabs.queue.filters.queueOwner;\n\nexport const getQueueRateMode = (state: RootState) =>\n state.navigation.tabs.queue.filters.queueRateMode;\n\nexport const getQueueTimeWindow = (state: RootState) =>\n state.navigation.tabs.queue.filters.queueTimeWindow;\n\nconst getPartitionsData = (state: RootState) =>\n state.navigation.tabs.queue.partitions.partitionsData;\n\nexport const getPartitions = createSelector(\n [getQueuePartitionIndex, getQueueTabletCellHost, getQueueTabletCellId, getPartitionsData],\n (queuePartitionIndex, queueTabletCellHost, queueTabletCellId, partitionsData) =>\n partitionsData\n ?.map((partition, index) => ({\n ...partition,\n meta: partition.meta,\n partition_index: index,\n write_data_weight_rate: partition.write_data_weight_rate ?? emptyRate,\n write_row_count_rate: partition.write_row_count_rate ?? emptyRate,\n }))\n ?.filter(\n (partition) =>\n partition.partition_index.toString(10).includes(queuePartitionIndex) &&\n partition?.meta?.host?.includes?.(queueTabletCellHost) &&\n partition?.meta?.cell_id?.includes?.(queueTabletCellId),\n ) ?? [],\n);\n\nexport type SelectedPartition = NonNullable<ReturnType<typeof getPartitions>>[0];\n\nexport const getPartitionsError = (state: RootState) =>\n state.navigation.tabs.queue.partitions.partitionsError;\n\nexport const getPartitionsLoading = (state: RootState) =>\n state.navigation.tabs.queue.partitions.partitionsLoading;\n\nexport const getPartitionsLoaded = (state: RootState) =>\n state.navigation.tabs.queue.partitions.partitionsLoaded;\n\nconst getRawConsumers = (state: RootState) =>\n state.navigation.tabs.queue.status.statusData?.registrations;\n\nexport const getConsumers = createSelector(\n [getQueueConsumerName, getRawConsumers],\n (queueConsumerName, consumers) =>\n (consumers ? consumers : [])\n ?.map((consumer) => ({\n ...consumer,\n read_data_weight_rate: emptyRate,\n read_row_count_rate: emptyRate,\n }))\n ?.filter((item) => item.consumer.includes(queueConsumerName)),\n);\n\nexport type SelectedConsumer = NonNullable<ReturnType<typeof getConsumers>>[0];\n","import {createSelector} from 'reselect';\nimport type {RootState} from '../../../../store/reducers';\nimport {emptyRate} from './queue';\n\nexport const getConsumerPartitionIndex = (state: RootState) =>\n state.navigation.tabs.consumer.filters.consumerPartitionIndex;\n\nexport const getConsumerRateMode = (state: RootState) =>\n state.navigation.tabs.consumer.filters.consumerRateMode;\n\nexport const getConsumerPartitionsColumns = (state: RootState) =>\n state.navigation.tabs.consumer.filters.partitionsColumns;\n\nexport const getConsumerTimeWindow = (state: RootState) =>\n state.navigation.tabs.consumer.filters.consumerTimeWindow;\n\nexport const getTargetQueue = (state: RootState) =>\n state.navigation.tabs.consumer.filters.targetQueue;\n\nexport const getConsumerRegisteredQueues = (state: RootState) =>\n state.navigation.tabs.consumer.status.consumerData?.registrations;\n\nconst getStatusData = (state: RootState) => state.navigation.tabs.consumer.status.consumerData;\n\nconst getTargetQueueStatusData = (state: RootState) => {\n const statusData = getStatusData(state);\n const {queue = ''} = getTargetQueue(state) ?? {};\n\n return statusData?.queues?.[queue];\n};\n\nexport const getOwner = (state: RootState) => getTargetQueueStatusData(state)?.owner;\n\nexport const getPartitionCount = (state: RootState) =>\n getTargetQueueStatusData(state)?.partition_count;\n\nexport const getReadDataWeightRate = (state: RootState) =>\n getTargetQueueStatusData(state)?.read_data_weight_rate ?? emptyRate;\n\nexport const getReadRowCountRate = (state: RootState) =>\n getTargetQueueStatusData(state)?.read_row_count_rate ?? emptyRate;\n\nexport const getTargetQueueError = (state: RootState) => {\n const targetQueueStatusData = getTargetQueueStatusData(state);\n return targetQueueStatusData?.error;\n};\n\nexport const getStatusError = (state: RootState) =>\n state.navigation.tabs.consumer.status.statusError;\n\nexport const getStatusLoading = (state: RootState) =>\n state.navigation.tabs.consumer.status.statusLoading;\n\nexport const getStatusLoaded = (state: RootState) =>\n state.navigation.tabs.consumer.status.statusLoaded;\n\nexport const getConsumerMode = (state: RootState) =>\n state.navigation.tabs.consumer.filters.consumerMode;\n\nconst getPartitionsData = (state: RootState) =>\n state.navigation.tabs.consumer.partitions.partitionsData;\n\nexport const getPartitions = createSelector(\n [getConsumerPartitionIndex, getPartitionsData],\n (consumerPartitionIndex, partitionsData) =>\n partitionsData\n ?.map((partition, index) => ({\n ...partition,\n partition_index: index,\n read_data_weight_rate: partition.read_data_weight_rate ?? emptyRate,\n read_row_count_rate: partition.read_row_count_rate ?? emptyRate,\n }))\n ?.filter((partition) =>\n partition.partition_index.toString(10).includes(consumerPartitionIndex),\n ) ?? [],\n);\n\nexport type SelectedPartition = NonNullable<ReturnType<typeof getPartitions>>[0];\n\nexport const getPartitionsError = (state: RootState) =>\n state.navigation.tabs.consumer.partitions.partitionsError;\n\nexport const getPartitionsLoading = (state: RootState) =>\n state.navigation.tabs.consumer.partitions.partitionsLoading;\n\nexport const getPartitionsLoaded = (state: RootState) =>\n state.navigation.tabs.consumer.partitions.partitionsLoaded;\n","import type {ChangeEvent} from 'react';\n\nimport {\n CONSUMER_CHANGE_FILTERS,\n CONSUMER_MODE,\n CONSUMER_RATE_MODE,\n} from '../../../../../constants/navigation/tabs/consumer';\nimport type {\n ConsumerFiltersAction,\n ConsumerFiltersState,\n ConsumerPartitionsColumns,\n PartitionColumn,\n} from '../../../../../store/reducers/navigation/tabs/consumer/filters';\nimport type {TPerformanceCounters} from '../../../../../store/reducers/navigation/tabs/queue/types';\n\nexport function changeConsumerMode(evt: ChangeEvent<HTMLInputElement>): ConsumerFiltersAction {\n return {\n type: CONSUMER_CHANGE_FILTERS,\n data: {consumerMode: evt.target.value as CONSUMER_MODE},\n };\n}\n\nexport function changeConsumerPartitionIndex(value: string): ConsumerFiltersAction {\n return {\n type: CONSUMER_CHANGE_FILTERS,\n data: {consumerPartitionIndex: value},\n };\n}\n\nexport function changeConsumerRateMode(evt: ChangeEvent<HTMLInputElement>): ConsumerFiltersAction {\n return {\n type: CONSUMER_CHANGE_FILTERS,\n data: {consumerRateMode: evt.target.value as CONSUMER_RATE_MODE},\n };\n}\n\ninterface CompactColumnSelectorPayload {\n items: Array<PartitionColumn<ConsumerPartitionsColumns>>;\n}\nexport function changeConsumerPartitionsColumns({\n items,\n}: CompactColumnSelectorPayload): ConsumerFiltersAction {\n return {\n type: CONSUMER_CHANGE_FILTERS,\n data: {partitionsColumns: items},\n };\n}\n\nexport function changeConsumerTimeWindow(\n evt: ChangeEvent<HTMLInputElement>,\n): ConsumerFiltersAction {\n return {\n type: CONSUMER_CHANGE_FILTERS,\n data: {consumerTimeWindow: evt.target.value as keyof TPerformanceCounters},\n };\n}\n\nexport function changeConsumerFilters(data: Partial<ConsumerFiltersState>): ConsumerFiltersAction {\n return {\n type: CONSUMER_CHANGE_FILTERS,\n data,\n };\n}\n","import React from 'react';\nimport {useSelector} from '../../../../store/redux-hooks';\nimport moment from 'moment';\n\nimport {YTErrorBlock, YTErrorBlockProps} from '../../../../components/Block/Block';\nimport {Info} from '../../../../components/Info/Info';\nimport {getErrorWithCode} from '../../../../utils/errors';\nimport {YTError} from '../../../../types';\n\nimport {getNavigationPathAttributes} from '../../../../store/selectors/navigation/navigation';\n\n// https://github.com/ytsaurus/ytsaurus/blob/95acd2c25e8996eccada40d178bfef6784fb3278/yt/yt/client/queue_client/public.h#L18\nconst QUEUE_IS_NOT_MAPPED = 3105;\nconst MAPPING_TIMEOUT = 5 * 60 * 1000;\n\nexport function QueueError({error, ...rest}: Omit<YTErrorBlockProps, 'error'> & {error: YTError}) {\n const {modification_time} = useSelector(getNavigationPathAttributes);\n\n const isMappingError = React.useMemo(() => {\n const modificationTime = moment(modification_time).valueOf();\n if (Math.abs(Date.now() - modificationTime) > MAPPING_TIMEOUT) {\n return false;\n }\n return getErrorWithCode([error], QUEUE_IS_NOT_MAPPED);\n }, [error, modification_time]);\n\n if (isMappingError) {\n return (\n <Info>\n The node is mapping to a queue agent at the moment, the process may take up to 5\n minutes.\n </Info>\n );\n }\n\n return <YTErrorBlock error={error} {...rest} />;\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\nimport {useDispatch, useSelector} from '../../../../../store/redux-hooks';\n\nimport {\n getConsumerRegisteredQueues,\n getTargetQueue,\n getTargetQueueError,\n} from '../../../../../store/selectors/navigation/tabs/consumer';\nimport {YTErrorBlock} from '../../../../../components/Block/Block';\nimport Icon from '../../../../../components/Icon/Icon';\nimport Link from '../../../../../components/Link/Link';\nimport {findCommonPathParent, genNavigationUrl} from '../../../../../utils/navigation/navigation';\nimport ClipboardButton from '../../../../../components/ClipboardButton/ClipboardButton';\nimport {Item, SelectSingle} from '../../../../../components/Select/Select';\nimport {Tooltip} from '../../../../../components/Tooltip/Tooltip';\nimport {changeConsumerFilters} from '../../../../../store/actions/navigation/tabs/consumer/filters';\n\nimport './TargetQueue.scss';\n\nconst block = cn('target-queue');\n\nexport default function TargetQueue() {\n const {queue} = useSelector(getTargetQueue) ?? {};\n const error = useSelector(getTargetQueueError);\n\n let clusterQueueUrl;\n if (queue) {\n const firstColon = queue.indexOf(':');\n if (firstColon === -1) {\n throw new Error(\n 'Unexpected behavior: queue should be formatted like \"${cluster}:${path}\"',\n );\n }\n const cluster = queue.slice(0, firstColon);\n const path = queue.slice(firstColon + 1);\n clusterQueueUrl = genNavigationUrl({cluster, path});\n }\n\n return (\n <div className={block()}>\n <div className=\"elements-heading elements-heading_size_xs\">Target queue</div>\n <ConsumerQueueSelector>\n {queue && (\n <Link theme=\"secondary\" url={clusterQueueUrl} routed>\n <Icon awesome=\"link\" />\n </Link>\n )}\n </ConsumerQueueSelector>\n {error && <YTErrorBlock error={error} topMargin=\"half\" />}\n </div>\n );\n}\n\ninterface ConsumerQueueSelectorProps {\n className?: string;\n\n children?: React.ReactNode;\n}\n\nexport function ConsumerQueueSelector({className, children}: ConsumerQueueSelectorProps) {\n const dispatch = useDispatch();\n const registrations = useSelector(getConsumerRegisteredQueues);\n\n const handleSelect = (value?: string) => {\n const item = value ? registrations?.find(({queue}) => queue === value) : undefined;\n dispatch(changeConsumerFilters({targetQueue: item}));\n };\n\n const {prefix, items, renderItem} = React.useMemo(() => {\n const pref = reduce_(\n registrations,\n (acc, {queue}) => {\n return findCommonPathParent(acc, queue);\n },\n registrations?.[0]?.queue ?? '',\n );\n\n const options = map_(registrations, ({queue}) => {\n return {\n value: `${queue}`,\n text: queue,\n };\n });\n\n if (options.length === 1) {\n const [{value}] = options;\n requestAnimationFrame(() => {\n handleSelect(value);\n });\n }\n\n return {\n prefix: pref,\n items: options,\n renderItem: (item: Item) => {\n return item.value.slice(pref.length);\n },\n };\n }, [registrations, dispatch]);\n\n const {queue} = useSelector(getTargetQueue) ?? {};\n\n return (\n <div className={block('selector', className)}>\n {items.length > 1 ? (\n <>\n <Prefix text={prefix} />{' '}\n <SelectSingle\n value={queue}\n items={items}\n className={block('queue-selector-value')}\n renderItem={renderItem}\n width=\"auto\"\n onChange={handleSelect}\n placeholder=\"Select queue... \"\n />\n </>\n ) : (\n <Prefix text={queue ?? ''} />\n )}\n {queue && <ClipboardButton text={queue} view=\"clear\" />}\n {children}\n </div>\n );\n}\n\nfunction Prefix({text}: {text: string}) {\n const parts = text.split('/');\n\n return (\n <Tooltip className={block('prefix')} content={text}>\n {parts.map((item, index) => {\n return (\n <React.Fragment key={index}>\n {item && <span className={block('prefix-item')}>{item}</span>}\n {index !== parts.length - 1 ? '/' : null}\n </React.Fragment>\n );\n })}\n </Tooltip>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport './BarChart.scss';\n\nconst block = cn('multimeter');\n\ninterface Props {\n values: number[];\n size?: number;\n}\n\nconst BarChart: React.VFC<Props> = ({values, size = 20}) => {\n let min = Math.min(0, ...values);\n let max = Math.max(0, ...values);\n\n if (min === max) {\n min = 0;\n max = 1;\n }\n\n const width = Math.floor((size * 3) / (4 * values.length - 1));\n\n return (\n <div className={block('barchart')} style={{width: size, height: size}}>\n {values.map((v, i) => {\n const marginRight = Math.floor(\n i === values.length - 1 ? 0 : size / (4 * values.length - 1),\n );\n const style = {\n height: `${Math.abs(v * 100) / (max - min)}%`,\n width: `${width}px`,\n marginBottom: `${(100 * (Math.min(0, v) - min)) / (max - min)}%`,\n marginRight: `max(1px,${marginRight}px)`,\n } as any;\n if (!v) {\n style.height = '100%';\n // if there is no bar, make full height, but transparent bar so that it height is the same as full\n // bar's one\n style.backgroundColor = 'inherit';\n }\n return <div key={i} className={block('barchart-bar')} style={style} />;\n })}\n </div>\n );\n};\n\nexport default BarChart;\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport hummerFormat from '../../common/hammer/format';\nimport type {TPerformanceCounters} from '../../store/reducers/navigation/tabs/queue/types';\nimport BarChart from './BarChart';\nimport {Tooltip} from '../Tooltip/Tooltip';\nimport MetaTable from '../MetaTable/MetaTable';\n\nimport './Multimeter.scss';\n\nconst block = cn('multimeter');\n\ninterface Props extends Partial<TPerformanceCounters> {\n show: keyof TPerformanceCounters;\n showTooltip?: boolean;\n format?: (value: number) => React.ReactNode;\n}\n\nconst Multimeter: React.VFC<Props> = ({show, format, ...counters}) => {\n const formatter = format || hummerFormat.Number;\n\n const counterNames = ['1d', '1h', '1m'] as const;\n const content = (\n <MetaTable\n className={block('tooltip')}\n items={counterNames.map((key) => {\n return {key, value: formatter(counters[key] ?? 0)};\n })}\n />\n );\n\n return (\n <div className={block()}>\n <Tooltip content={content}>\n <BarChart values={counterNames.map((key) => counters[key] ?? 0)} />\n </Tooltip>\n <div className={block('value')}>{formatter(counters[show] ?? 0)}</div>\n </div>\n );\n};\n\nexport default Multimeter;\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport {useSelector} from '../../../../../store/redux-hooks';\n\nimport format from '../../../../../common/hammer/format';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport Label from '../../../../../components/Label/Label';\nimport MetaTable from '../../../../../components/MetaTable/MetaTable';\nimport Multimeter from '../../../../../components/Multimeter/Multimeter';\nimport {SubjectCard} from '../../../../../components/SubjectLink/SubjectLink';\n\nimport type {TPerformanceCounters} from '../../../../../store/reducers/navigation/tabs/queue/types';\nimport {isNull} from '../../../../../utils';\nimport {getTargetQueue} from '../../../../../store/selectors/navigation/tabs/consumer';\n\nimport './Meta.scss';\n\nconst block = cn('consumer-meta');\n\ninterface Props {\n targetQueue?: string;\n owner?: string;\n partitionCount?: number;\n readDataWeightRate?: TPerformanceCounters;\n readRowCountRate?: TPerformanceCounters;\n}\n\nconst Meta: React.FC<Props> = ({owner, partitionCount, readDataWeightRate, readRowCountRate}) => {\n const {vital} = useSelector(getTargetQueue) ?? {};\n\n return (\n <ErrorBoundary>\n <div className={block('header')}>\n <div className={block('header-title', 'elements-heading elements-heading_size_xs')}>\n Meta\n </div>\n </div>\n <MetaTable\n className={block()}\n items={[\n [\n {\n key: 'owner',\n label: 'Owner',\n value: owner && <SubjectCard name={owner} />,\n visible: !isNull(owner),\n },\n ],\n [\n {\n key: 'vital',\n label: 'Vital',\n value: <Label theme=\"default\" text={vital ? 'True' : 'False'} />,\n visible: !isNull(vital),\n },\n {\n key: 'partition_count',\n label: 'Partition count',\n value: partitionCount,\n visible: !isNull(partitionCount),\n },\n ],\n [\n {\n key: 'read-data-weight-rate',\n label: 'Data weight read rate',\n value: (\n <Multimeter\n {...readDataWeightRate}\n show=\"1m\"\n format={format.BytesPerSecond}\n />\n ),\n visible: !isNull(readDataWeightRate),\n },\n {\n key: 'read-row-count-rate',\n label: 'Rows read rate',\n value: (\n <Multimeter\n {...readRowCountRate}\n show=\"1m\"\n format={format.RowsPerSecond}\n />\n ),\n visible: !isNull(readRowCountRate),\n },\n ],\n ]}\n />\n </ErrorBoundary>\n );\n};\n\nexport default React.memo(Meta);\n","import React, {ComponentType} from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\nimport {useDispatch} from '../../../../../store/redux-hooks';\nimport {Button} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\n\nimport RadioButton from '../../../../../components/RadioButton/RadioButton';\nimport {CONSUMER_MODE} from '../../../../../constants/navigation/tabs/consumer';\nimport {changeConsumerMode} from '../../../../../store/actions/navigation/tabs/consumer/filters';\nimport {toggleRegisterDialog} from '../../../../../store/reducers/navigation/tabs/consumer/register';\nimport type {RootState} from '../../../../../store/reducers';\nimport {getConsumerMode} from '../../../../../store/selectors/navigation/tabs/consumer';\n\nimport './Toolbar.scss';\n\nconst block = cn('consumer-toolbar');\n\ninterface Props extends PropsFromRedux {\n extras: ComponentType;\n}\n\nconst tabItems: React.ComponentProps<typeof RadioButton>['items'] = [\n {\n value: CONSUMER_MODE.METRICS,\n text: 'Metrics',\n },\n {\n value: CONSUMER_MODE.PARTITIONS,\n text: 'Partitions',\n },\n];\n\nconst Toolbar: React.VFC<Props> = ({extras: Extras, consumerMode, changeConsumerMode}) => {\n const dispatch = useDispatch();\n const openRegisterDialog = () => dispatch(toggleRegisterDialog());\n\n return (\n <div className={block()}>\n <RadioButton value={consumerMode} onChange={changeConsumerMode} items={tabItems} />\n <Extras />\n <Button view={'outlined'} onClick={openRegisterDialog}>\n Register to queue\n </Button>\n </div>\n );\n};\n\nfunction mapStateToProps(state: RootState) {\n return {\n consumerMode: getConsumerMode(state),\n };\n}\n\nconst mapDispatchToProps = {\n changeConsumerMode,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\nexport default connector(Toolbar);\n","import {BaseQueryApi} from '@reduxjs/toolkit/query';\n\nimport {rootApi} from '../../../../../store/api';\n\nimport {RootState} from '../../../../../store/reducers';\nimport {getPath} from '../../../../../store/selectors/navigation';\nimport {getTargetQueue} from '../../../../../store/selectors/navigation/tabs/consumer';\nimport {getCluster} from '../../../../../store/selectors/global';\n\nimport {ytApiV4} from '../../../../../rum/rum-wrap-api';\nimport {wrapApiPromiseByToaster} from '../../../../../utils/utils';\n\ntype RegisterConsumerArgs = {\n queuePath: string;\n queueCluster: string;\n};\n\nasync function register(args: RegisterConsumerArgs, api: BaseQueryApi) {\n try {\n const {queuePath, queueCluster} = args;\n\n const state = api.getState() as RootState;\n const consumerPath = getPath(state);\n const consumerCluster = getCluster(state);\n const {vital} = getTargetQueue(state) ?? {vital: false};\n\n const response = await wrapApiPromiseByToaster(\n ytApiV4.executeBatch({\n parameters: {\n requests: [\n {\n command: 'register_queue_consumer' as const,\n parameters: {\n vital,\n queue_path: {\n $value: queuePath,\n $attributes: {cluster: queueCluster},\n },\n consumer_path: {\n $value: consumerPath,\n $attributes: {cluster: consumerCluster},\n },\n },\n },\n ],\n },\n }),\n {\n toasterName: 'register queue consumer',\n successContent: 'Registration of the consumer has started, this may take some time',\n skipErrorToast: true,\n batchType: 'v4',\n errorTitle: '',\n },\n );\n if (response.results[0]?.error) {\n throw response.results[0]?.error;\n }\n return {data: []};\n } catch (error) {\n return {error};\n }\n}\n\nconst consumerApi = rootApi.injectEndpoints({\n endpoints: (build) => ({\n register: build.mutation({\n queryFn: register,\n }),\n }),\n});\n\nexport const {useRegisterMutation} = consumerApi;\n","import {YT} from '../../../config/yt-config';\n\nexport function makeClusterSelectOptionsSameEnv(cluster: string) {\n const clusters = Object.entries(YT.clusters)\n .filter(([_, value]) => value.environment === YT.clusters[cluster].environment)\n .map(([key]) => key);\n return clusters\n .map((cluster) => ({\n value: cluster,\n content: cluster,\n }))\n ?.sort((a, b) => a.value.localeCompare(b.value));\n}\n","import React, {useMemo} from 'react';\nimport {useDispatch, useSelector} from '../../../../../store/redux-hooks';\n\nimport {\n getRegisterDialogVisibility,\n toggleRegisterDialog,\n} from '../../../../../store/reducers/navigation/tabs/consumer/register';\nimport {useRegisterMutation} from '../../../../../store/api/navigation/tabs/consumer/consumer';\nimport {getCluster} from '../../../../../store/selectors/global';\n\nimport {FormApi, YTDFDialog, makeErrorFields} from '../../../../../components/Dialog';\n\nimport {makeClusterSelectOptionsSameEnv} from '../../../../../utils/navigation/tabs/make-cluster-select-options-same-env';\n\nimport {YTError} from '../../../../../../@types/types';\n\ntype FormValues = {\n queuePath: string;\n queueCluster: string;\n};\n\nexport function RegisterConsumerDialog() {\n const dispatch = useDispatch();\n const visible = useSelector(getRegisterDialogVisibility);\n const cluster = useSelector(getCluster);\n\n const onClose = () => dispatch(toggleRegisterDialog());\n\n const [update, {isLoading, error}] = useRegisterMutation();\n\n const clusterControlOptions = useMemo(\n () => makeClusterSelectOptionsSameEnv(cluster),\n [cluster],\n );\n\n return (\n <YTDFDialog\n visible={visible}\n headerProps={{title: 'Register consumer to queue'}}\n fields={[\n {\n type: 'select' as const,\n name: 'queueCluster',\n caption: 'Cluster',\n extras: {\n options: clusterControlOptions,\n placeholder: 'Cluster',\n width: 'max',\n filterable: true,\n },\n },\n {\n type: 'text' as const,\n name: 'queuePath',\n caption: 'Path',\n required: true,\n extras: {\n placeholder: 'Path to queue...',\n },\n },\n ...makeErrorFields([error as YTError]),\n ]}\n size={'m'}\n onAdd={async (form: FormApi<FormValues>) => {\n const {values} = form.getState();\n const newValues = {...values, queueCluster: values.queueCluster[0]};\n await update(newValues).unwrap();\n }}\n isApplyDisabled={(state) => {\n return state.hasValidationErrors || isLoading;\n }}\n onClose={onClose}\n />\n );\n}\n","import React from 'react';\nimport moment from 'moment';\nimport type {Column} from '@gravity-ui/react-data-table';\n\nimport format from '../../../../../common/hammer/format';\nimport Label from '../../../../../components/Label/Label';\nimport Link from '../../../../../components/Link/Link';\nimport Multimeter from '../../../../../components/Multimeter/Multimeter';\nimport {SubjectCard} from '../../../../../components/SubjectLink/SubjectLink';\nimport WarningIcon from '../../../../../components/WarningIcon/WarningIcon';\nimport type {TPerformanceCounters} from '../../../../../store/reducers/navigation/tabs/queue/types';\nimport {Host} from '../../../../../containers/Host/Host';\nimport type {YTError} from '../../../../../types';\nimport {genNavigationUrl} from '../../../../../utils/navigation/navigation';\nimport {ClickableText} from '../../../../../components/ClickableText/ClickableText';\nimport {showErrorPopup} from '../../../../../utils/utils';\n\nconst DISPLAY_FORMAT = 'DD-MM-YYYY HH:mm:ss';\n\nexport function bool<T>(name: string, getter: (row: T) => boolean): Column<T> {\n return {\n name,\n render({row}) {\n return <Label theme=\"default\" text={getter(row) ? 'True' : 'False'} />;\n },\n sortAccessor: getter,\n };\n}\n\nexport function datetime<T>(name: string, getter: (row: T) => string | null): Column<T> {\n return {\n name,\n render({row}) {\n return moment(getter(row)).format(DISPLAY_FORMAT);\n },\n sortAccessor(row) {\n return moment(getter(row)).valueOf();\n },\n };\n}\n\nexport function error<T>(\n name: string,\n getter: (row: T) => YTError | undefined,\n className?: string,\n): Column<T> {\n return {\n name,\n render({row}) {\n const error = getter(row);\n if (!error) return null;\n\n return (\n <WarningIcon\n className={className}\n color=\"danger\"\n hoverContent={<HoverContent error={error} />}\n >\n Error\n </WarningIcon>\n );\n },\n sortAccessor: getter,\n };\n}\n\nfunction HoverContent({error}: {error: YTError}) {\n return (\n <span>\n {error.message ?? 'Error'}{' '}\n <ClickableText onClick={() => showErrorPopup(error)}>Details</ClickableText>\n </span>\n );\n}\n\nexport function host<T>(name: string, getter: (row: T) => string, classNames: string): Column<T> {\n return {\n name,\n render({row}) {\n const host = getter(row);\n return <Host asTabletNode address={host} copyBtnClassName={classNames} />;\n },\n sortAccessor: getter,\n };\n}\n\nexport function multimeter<T>(\n name: string,\n getter: (row: T) => TPerformanceCounters,\n show: keyof TPerformanceCounters,\n valueFormat: (value: number) => React.ReactNode = format.Number,\n): Column<T> {\n return {\n name,\n render({row}) {\n const counters = getter(row);\n return <Multimeter {...counters} show={show} format={valueFormat} />;\n },\n sortAccessor(row) {\n const counters = getter(row);\n return counters['1m'];\n },\n };\n}\n\nexport function number<T>(name: string, getter: (row: T) => number | null): Column<T> {\n return {\n name,\n align: 'right',\n render({row}) {\n return format.Number(getter(row));\n },\n sortAccessor: getter,\n };\n}\n\nexport function string<T>(name: string, getter: (row: T) => string): Column<T> {\n return {\n name,\n render({row}) {\n return getter(row);\n },\n sortAccessor: getter,\n };\n}\n\nexport function user<T>(name: string, getter: (row: T) => string): Column<T> {\n return {\n name,\n render({row}) {\n return <SubjectCard name={getter(row)} />;\n },\n sortAccessor: getter,\n };\n}\n\nexport function ypath<T>(name: string, getter: (row: T) => string): Column<T> {\n return {\n name,\n render({row}) {\n const consumer = getter(row);\n if (!consumer) return null;\n\n const [cluster, path] = consumer.split(':');\n const url = genNavigationUrl({cluster, path});\n\n return (\n <Link url={url} routed>\n {consumer}\n </Link>\n );\n },\n sortAccessor: getter,\n };\n}\n","import React, {useEffect} from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\nimport {useSelector} from '../../../../../../store/redux-hooks';\nimport cn from 'bem-cn-lite';\nimport {createSelector} from 'reselect';\nimport type {Column, Settings} from '@gravity-ui/react-data-table';\n\nimport format from '../../../../../../common/hammer/format';\nimport DataTableYT from '../../../../../../components/DataTableYT/DataTableYT';\nimport {YTErrorBlock} from '../../../../../../components/Block/Block';\nimport {NoContent} from '../../../../../../components/NoContent/NoContent';\nimport {CONSUMER_RATE_MODE} from '../../../../../../constants/navigation/tabs/consumer';\nimport {\n datetime,\n error,\n multimeter,\n number,\n} from '../../../../../../pages/navigation/tabs/Queue/utils/column-builder';\nimport {loadConsumerPartitions} from '../../../../../../store/actions/navigation/tabs/consumer/partitions';\nimport type {RootState} from '../../../../../../store/reducers';\nimport type {TPerformanceCounters} from '../../../../../../store/reducers/navigation/tabs/queue/types';\nimport {\n SelectedPartition,\n getConsumerPartitionsColumns,\n getConsumerRateMode,\n getConsumerTimeWindow,\n getPartitions,\n getPartitionsError,\n getPartitionsLoaded,\n getPartitionsLoading,\n getTargetQueue,\n} from '../../../../../../store/selectors/navigation/tabs/consumer';\n\nimport './Partitions.scss';\n\nconst block = cn('consumer-partitions');\n\nconst readRateName: Record<CONSUMER_RATE_MODE, string> = {\n [CONSUMER_RATE_MODE.ROWS]: 'Read rate',\n [CONSUMER_RATE_MODE.DATA_WEIGHT]: 'Read rate',\n};\nconst readRateGetter: Record<CONSUMER_RATE_MODE, (row: SelectedPartition) => TPerformanceCounters> =\n {\n [CONSUMER_RATE_MODE.ROWS]: (x) => x.read_row_count_rate,\n [CONSUMER_RATE_MODE.DATA_WEIGHT]: (x) => x.read_data_weight_rate,\n };\n\nconst getColumns = createSelector(\n [getConsumerRateMode, getConsumerTimeWindow, getConsumerPartitionsColumns],\n (rateMode, timeWindow, columns): Array<Column<SelectedPartition>> => {\n return columns\n .filter((column) => column.checked)\n .map(({name, caption}) => {\n if (name === 'error') {\n return error<SelectedPartition>(caption, (x) => x[name], block('error'));\n } else if (name === 'read_rate') {\n return multimeter<SelectedPartition>(\n readRateName[rateMode],\n readRateGetter[rateMode],\n timeWindow,\n rateMode === CONSUMER_RATE_MODE.ROWS\n ? format.RowsPerSecond\n : format.BytesPerSecond,\n );\n } else if (name === 'next_row_commit_time') {\n return datetime<SelectedPartition>(caption, (x) => x[name]);\n } else {\n return number<SelectedPartition>(caption, (x) => x[name]);\n }\n });\n },\n);\n\nconst settings: Settings = {displayIndices: false};\n\nconst Partitions: React.VFC<PropsFromRedux> = ({\n loadConsumerPartitions,\n columns,\n partitions,\n partitionsError,\n partitionsLoading,\n partitionsLoaded,\n}) => {\n const {queue} = useSelector(getTargetQueue) ?? {};\n\n useEffect(() => {\n if (queue) {\n loadConsumerPartitions(queue);\n }\n }, [queue]);\n\n if (!queue) {\n return (\n <NoContent\n hint={'Please select a queue'}\n warning={\"You don't have any selected queues\"}\n />\n );\n }\n\n if (partitionsError) {\n return <YTErrorBlock error={partitionsError} topMargin=\"half\" />;\n }\n\n return (\n <DataTableYT\n className={block('table-row')}\n columns={columns}\n data={partitions}\n loading={partitionsLoading}\n loaded={partitionsLoaded}\n useThemeYT\n settings={settings}\n />\n );\n};\n\nfunction mapStateToProps(state: RootState) {\n return {\n columns: getColumns(state),\n partitions: getPartitions(state),\n partitionsError: getPartitionsError(state),\n partitionsLoading: getPartitionsLoading(state),\n partitionsLoaded: getPartitionsLoaded(state),\n };\n}\n\nconst mapDispatchToProps = {\n loadConsumerPartitions,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\nexport default connector(Partitions);\n","import type {ThunkAction} from 'redux-thunk';\n\nimport {\n CONSUMER_PARTITIONS_LOAD_FAILURE,\n CONSUMER_PARTITIONS_LOAD_REQUEST,\n CONSUMER_PARTITIONS_LOAD_SUCCESS,\n} from '../../../../../constants/navigation/tabs/consumer';\nimport {YTApiId, ytApiV3Id} from '../../../../../rum/rum-wrap-api';\nimport type {RootState} from '../../../../../store/reducers';\nimport type {ConsumerPartitionsAction} from '../../../../../store/reducers/navigation/tabs/consumer/partitions';\nimport type {YtConsumerPartition} from '../../../../../store/reducers/navigation/tabs/consumer/types';\nimport {getPath, getTransaction} from '../../../../../store/selectors/navigation';\nimport {prepareRequest} from '../../../../../utils/navigation';\n\ntype ConsumerThunkAction = ThunkAction<void, RootState, unknown, ConsumerPartitionsAction>;\n\nexport function loadConsumerPartitions(queue: string): ConsumerThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const path = getPath(state);\n const transaction = getTransaction(state);\n\n dispatch({type: CONSUMER_PARTITIONS_LOAD_REQUEST});\n return ytApiV3Id\n .get(\n YTApiId.queueConsumerPartitions,\n prepareRequest(`/@queue_consumer_partitions/${queue.replace(/\\//g, '\\\\/')}`, {\n path,\n transaction,\n }),\n )\n .then((data: YtConsumerPartition[]) => {\n dispatch({\n type: CONSUMER_PARTITIONS_LOAD_SUCCESS,\n data,\n });\n })\n .catch((error: Error) => {\n dispatch({\n type: CONSUMER_PARTITIONS_LOAD_FAILURE,\n data: error,\n });\n });\n };\n}\n","import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport Filter from '../../../../../../components/Filter/Filter';\nimport ColumnSelector from '../../../../../../components/ColumnSelector/ColumnSelector';\nimport RadioButton from '../../../../../../components/RadioButton/RadioButton';\nimport {CONSUMER_RATE_MODE} from '../../../../../../constants/navigation/tabs/consumer';\nimport {\n changeConsumerPartitionIndex,\n changeConsumerPartitionsColumns,\n changeConsumerRateMode,\n changeConsumerTimeWindow,\n} from '../../../../../../store/actions/navigation/tabs/consumer/filters';\nimport type {RootState} from '../../../../../../store/reducers';\nimport type {TPerformanceCounters} from '../../../../../../store/reducers/navigation/tabs/queue/types';\nimport {\n getConsumerPartitionIndex,\n getConsumerPartitionsColumns,\n getConsumerRateMode,\n getConsumerTimeWindow,\n} from '../../../../../../store/selectors/navigation/tabs/consumer';\nimport Button from '../../../../../../components/Button/Button';\nimport Icon from '../../../../../../components/Icon/Icon';\nimport Dropdown from '../../../../../../components/Dropdown/Dropdown';\n\nimport './PartitionsExtraControls.scss';\nimport {PartitionColumn} from '../../../../../../store/reducers/navigation/tabs/consumer/filters';\n\nconst block = cn('consumer-partitions');\n\ninterface Props extends PropsFromRedux {}\n\nconst rateItems: React.ComponentProps<typeof RadioButton>['items'] = [\n {\n value: CONSUMER_RATE_MODE.ROWS,\n text: 'Rows',\n },\n {\n value: CONSUMER_RATE_MODE.DATA_WEIGHT,\n text: 'Data weight',\n },\n];\n\nexport const timeItems: React.ComponentProps<typeof RadioButton>['items'] = [\n {\n value: '1m' as keyof TPerformanceCounters,\n text: '1m',\n },\n {\n value: '1h' as keyof TPerformanceCounters,\n text: '1h',\n },\n {\n value: '1d' as keyof TPerformanceCounters,\n text: '1d',\n },\n];\n\nexport interface CompactColumnSelectorProps<Names> {\n items: Array<PartitionColumn<Names>>;\n onChange: Function;\n}\nexport function CompactColumnSelector<Names>({items, onChange}: CompactColumnSelectorProps<Names>) {\n return (\n <Dropdown\n className={block('filters-item')}\n trigger=\"click\"\n directions={['bottom']}\n button={\n <Button pin={'round-round'}>\n <Icon awesome=\"table\" face=\"light\" />\n Columns\n </Button>\n }\n template={\n <ColumnSelector\n items={items}\n onChange={onChange}\n className={block('custom-column-selector')}\n />\n }\n />\n );\n}\n\nconst PartitionsExtraControls: React.VFC<Props> = ({\n consumerPartitionIndex,\n consumerRateMode,\n consumerTimeWindow,\n partitionsColumns,\n changeConsumerPartitionIndex,\n changeConsumerRateMode,\n changeConsumerTimeWindow,\n changeConsumerPartitionsColumns,\n}) => {\n return (\n <>\n <div className={block('divider')} />\n <Filter\n className={block('filter')}\n value={consumerPartitionIndex}\n onChange={changeConsumerPartitionIndex}\n placeholder=\"Partition index...\"\n />\n <div className={block('divider')} />\n <RadioButton\n value={consumerRateMode}\n onChange={changeConsumerRateMode}\n items={rateItems}\n />\n <RadioButton\n value={consumerTimeWindow}\n onChange={changeConsumerTimeWindow}\n items={timeItems}\n />\n <CompactColumnSelector\n onChange={changeConsumerPartitionsColumns}\n items={partitionsColumns}\n />\n </>\n );\n};\n\nfunction mapStateToProps(state: RootState) {\n return {\n consumerPartitionIndex: getConsumerPartitionIndex(state),\n consumerRateMode: getConsumerRateMode(state),\n consumerTimeWindow: getConsumerTimeWindow(state),\n partitionsColumns: getConsumerPartitionsColumns(state),\n };\n}\n\nconst mapDispatchToProps = {\n changeConsumerPartitionIndex,\n changeConsumerRateMode,\n changeConsumerTimeWindow,\n changeConsumerPartitionsColumns,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\nexport default connector(PartitionsExtraControls);\n","import React, {ComponentType, useEffect} from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\nimport WithStickyToolbar from '../../../../components/WithStickyToolbar/WithStickyToolbar';\nimport {Toolbar} from '../../../../components/WithStickyToolbar/Toolbar/Toolbar';\nimport {CONSUMER_MODE} from '../../../../constants/navigation/tabs/consumer';\nimport {loadConsumerStatus} from '../../../../store/actions/navigation/tabs/consumer/status';\nimport type {RootState} from '../../../../store/reducers';\nimport {\n getConsumerMode,\n getOwner,\n getPartitionCount,\n getReadDataWeightRate,\n getReadRowCountRate,\n getStatusError,\n} from '../../../../store/selectors/navigation/tabs/consumer';\n\nimport {QueueError} from '../Queue/QueueError';\n\nimport TargetQueue from './TargetQueue/TargetQueue';\nimport Meta from './Meta/Meta';\nimport ConsumerToolbar from './Toolbar/Toolbar';\nimport {RegisterConsumerDialog} from './modals/RegisterDialog';\nimport ConsumerMetrics from './views/ConsumerMetrics/ConsumerMetrics';\nimport Partitions from './views/Partitions/Partitions';\nimport PartitionsExtraControls from './views/Partitions/PartitionsExtraControls';\n\nconst views: Record<CONSUMER_MODE, {ExtraControls: ComponentType; View: ComponentType}> = {\n [CONSUMER_MODE.METRICS]: {ExtraControls: () => null, View: ConsumerMetrics},\n [CONSUMER_MODE.PARTITIONS]: {ExtraControls: PartitionsExtraControls, View: Partitions},\n};\n\nconst emptyView: {ExtraControls: ComponentType; View: ComponentType} = {\n ExtraControls: () => null,\n View: () => null,\n};\n\nfunction useViewByMode(mode: CONSUMER_MODE): {ExtraControls: ComponentType; View: ComponentType} {\n return views[mode] || emptyView;\n}\n\nconst Consumer: React.VFC<PropsFromRedux> = ({\n loadConsumerStatus,\n owner,\n partitionCount,\n readDataWeightRate,\n readRowCountRate,\n consumerMode,\n statusError,\n}) => {\n useEffect(() => {\n loadConsumerStatus();\n }, []);\n\n const {ExtraControls, View} = useViewByMode(consumerMode);\n\n if (statusError) {\n return <QueueError error={statusError} topMargin=\"none\" />;\n }\n\n return (\n <ErrorBoundary>\n <TargetQueue />\n <Meta\n owner={owner}\n partitionCount={partitionCount}\n readDataWeightRate={readDataWeightRate}\n readRowCountRate={readRowCountRate}\n />\n <WithStickyToolbar\n toolbar={\n <Toolbar\n itemsToWrap={[\n {node: <ConsumerToolbar extras={ExtraControls} />, growable: true},\n ]}\n />\n }\n content={<View />}\n />\n <RegisterConsumerDialog />\n </ErrorBoundary>\n );\n};\n\nfunction mapStateToProps(state: RootState) {\n return {\n owner: getOwner(state),\n partitionCount: getPartitionCount(state),\n readDataWeightRate: getReadDataWeightRate(state),\n readRowCountRate: getReadRowCountRate(state),\n consumerMode: getConsumerMode(state),\n statusError: getStatusError(state),\n };\n}\n\nconst mapDispatchToProps = {\n loadConsumerStatus,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\nexport default connector(Consumer);\n","import React from 'react';\n\nimport {getCluster} from '../../../../../../store/selectors/global';\nimport {getPath} from '../../../../../../store/selectors/navigation';\nimport {getTargetQueue} from '../../../../../../store/selectors/navigation/tabs/consumer';\nimport {useSelector} from '../../../../../../store/redux-hooks';\nimport ErrorBoundary from '../../../../../../components/ErrorBoundary/ErrorBoundary';\nimport {NoContent} from '../../../../../../components/NoContent/NoContent';\nimport UIFactory from '../../../../../../UIFactory';\n\nexport default function ConsumerMetrics() {\n const path = useSelector(getPath);\n const cluster = useSelector(getCluster);\n const {queue} = useSelector(getTargetQueue) ?? {};\n\n const MetricsComponent = UIFactory.getComponentForConsumerMetrics()!;\n\n if (!MetricsComponent) {\n return <NoContent warning={'Metrics are not supported for the installation'} />;\n }\n\n if (!queue) {\n return (\n <NoContent\n hint={'Please select a queue'}\n warning={\"You don't have any selected queues\"}\n />\n );\n }\n\n return (\n <ErrorBoundary>\n <MetricsComponent {...{cluster, path, targetQueue: queue}} />{' '}\n </ErrorBoundary>\n );\n}\n","import type {ThunkAction} from 'redux-thunk';\n\nimport {\n CONSUMER_STATUS_LOAD_FAILURE,\n CONSUMER_STATUS_LOAD_REQUEST,\n CONSUMER_STATUS_LOAD_SUCCESS,\n} from '../../../../../constants/navigation/tabs/consumer';\nimport {YTApiId, ytApiV3Id} from '../../../../../rum/rum-wrap-api';\nimport type {RootState} from '../../../../../store/reducers';\nimport type {ConsumerStatusAction} from '../../../../../store/reducers/navigation/tabs/consumer/status';\nimport {getPath, getTransaction} from '../../../../../store/selectors/navigation';\nimport {ConsumerFiltersAction} from '../../../../../store/reducers/navigation/tabs/consumer/filters';\nimport {prepareRequest} from '../../../../../utils/navigation';\nimport {\n getConsumerRegisteredQueues,\n getTargetQueue,\n} from '../../../../../store/selectors/navigation/tabs/consumer';\nimport {changeConsumerFilters} from './filters';\n\ntype ConsumerThunkAction = ThunkAction<\n void,\n RootState,\n unknown,\n ConsumerStatusAction | ConsumerFiltersAction\n>;\n\nexport function loadConsumerStatus(): ConsumerThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const path = getPath(state);\n const transaction = getTransaction(state);\n\n dispatch({type: CONSUMER_STATUS_LOAD_REQUEST});\n return ytApiV3Id\n .get(\n YTApiId.queueConsumerStatus,\n prepareRequest('/@queue_consumer_status', {path, transaction}),\n )\n .then((data) => {\n if (data.error) {\n throw data.error;\n }\n dispatch({\n type: CONSUMER_STATUS_LOAD_SUCCESS,\n data,\n });\n\n const state2 = getState();\n const targetQueue = getTargetQueue(state2);\n const queues = getConsumerRegisteredQueues(state2);\n if (targetQueue && !queues?.find(({queue}) => targetQueue.queue === queue)) {\n dispatch(changeConsumerFilters({targetQueue: undefined}));\n }\n })\n .catch((error: Error) => {\n dispatch({\n type: CONSUMER_STATUS_LOAD_FAILURE,\n data: error,\n });\n });\n };\n}\n","import isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\n\nimport React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport CollapsibleSection, {\n CollapsibleSectionProps,\n} from '../../components/CollapsibleSection/CollapsibleSection';\nimport ErrorBoundary from '../../components/ErrorBoundary/ErrorBoundary';\nimport {YTAlertBlock} from '../../components/Alert/Alert';\nimport {UI_COLLAPSIBLE_SIZE} from '../../constants/global/index';\nimport {YTError} from '../../types/index';\n\nconst block = cn('yt-alerts');\n\nexport type AlertsProps = {\n className?: string;\n items?: Array<YTError> | Record<string, YTError>;\n marginDirection?: CollapsibleSectionProps['marginDirection'];\n};\n\nexport function Alerts({className, items, marginDirection = 'bottom'}: AlertsProps) {\n if (isEmpty_(items)) {\n return null;\n }\n\n return (\n <ErrorBoundary>\n <div className={block(null, className)}>\n <CollapsibleSection\n name=\"Alerts\"\n size={UI_COLLAPSIBLE_SIZE}\n marginDirection={marginDirection}\n >\n {map_(items, (alert, index) => {\n return <YTAlertBlock key={index} error={alert as YTError} />;\n })}\n </CollapsibleSection>\n </div>\n </ErrorBoundary>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport format from '../../../../../common/hammer/format';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport MetaTable from '../../../../../components/MetaTable/MetaTable';\nimport Multimeter from '../../../../../components/Multimeter/Multimeter';\nimport type {TPerformanceCounters} from '../../../../../store/reducers/navigation/tabs/queue/types';\nimport {isNull} from '../../../../../utils';\n\nimport './Meta.scss';\n\nconst block = cn('queue-meta');\n\ninterface Props {\n partitionCount?: number;\n family?: string;\n writeDataWeightRate?: TPerformanceCounters;\n writeRowCountRate?: TPerformanceCounters;\n}\n\nconst Meta: React.VFC<Props> = ({\n partitionCount,\n family,\n writeDataWeightRate,\n writeRowCountRate,\n}) => {\n return (\n <ErrorBoundary>\n <div className=\"elements-heading elements-heading_size_xs\">Meta</div>\n <MetaTable\n className={block()}\n items={[\n [\n {\n key: 'partition-count',\n label: 'Partition count',\n value: partitionCount,\n visible: !isNull(partitionCount),\n },\n {\n key: 'family',\n label: 'Family',\n value: family,\n visible: !isNull(family),\n },\n ],\n [\n {\n key: 'write-row-count-rate',\n label: 'Rows write rate',\n value: (\n <Multimeter\n {...writeRowCountRate}\n show=\"1m\"\n format={format.RowsPerSecond}\n />\n ),\n visible: !isNull(writeRowCountRate),\n },\n {\n key: 'write-data-weight-rate',\n label: 'Data weight write rate',\n value: (\n <Multimeter\n {...writeDataWeightRate}\n show=\"1m\"\n format={format.BytesPerSecond}\n />\n ),\n visible: !isNull(writeDataWeightRate),\n },\n ],\n ]}\n />\n </ErrorBoundary>\n );\n};\n\nexport default React.memo(Meta);\n","import type {ChangeEvent} from 'react';\n\nimport {\n QUEUE_CHANGE_PARTITIONS_COLUMNS,\n QUEUE_CHANGE_PERSISTED_STATE,\n QUEUE_MODE,\n QUEUE_RATE_MODE,\n} from '../../../../../constants/navigation/tabs/queue';\nimport type {\n QueueFiltersAction,\n QueuePartitionsColumns,\n} from '../../../../../store/reducers/navigation/tabs/queue/filters';\nimport {PartitionColumn} from '../../../../reducers/navigation/tabs/consumer/filters';\nimport type {TPerformanceCounters} from '../../../../../store/reducers/navigation/tabs/queue/types';\n\nexport function changeQueueMode(evt: ChangeEvent<HTMLInputElement>): QueueFiltersAction {\n return {\n type: QUEUE_CHANGE_PERSISTED_STATE,\n data: {queueMode: evt.target.value as QUEUE_MODE},\n };\n}\n\nexport function changeQueuePartitionIndex(value: string): QueueFiltersAction {\n return {\n type: QUEUE_CHANGE_PERSISTED_STATE,\n data: {queuePartitionIndex: value},\n };\n}\n\nexport function changeQueueTabletCellHost(value: string): QueueFiltersAction {\n return {\n type: QUEUE_CHANGE_PERSISTED_STATE,\n data: {queueTabletCellHost: value},\n };\n}\n\nexport function changeQueueTabletCellId(value: string): QueueFiltersAction {\n return {\n type: QUEUE_CHANGE_PERSISTED_STATE,\n data: {queueTabletCellId: value},\n };\n}\n\nexport function changeQueueConsumerName(value: string): QueueFiltersAction {\n return {\n type: QUEUE_CHANGE_PERSISTED_STATE,\n data: {queueConsumerName: value},\n };\n}\n\nexport function changeQueueOwner(value: string): QueueFiltersAction {\n return {\n type: QUEUE_CHANGE_PERSISTED_STATE,\n data: {queueOwner: value},\n };\n}\n\nexport function changeQueueRateMode(evt: ChangeEvent<HTMLInputElement>): QueueFiltersAction {\n return {\n type: QUEUE_CHANGE_PERSISTED_STATE,\n data: {queueRateMode: evt.target.value as QUEUE_RATE_MODE},\n };\n}\n\nexport function changeQueueTimeWindow(evt: ChangeEvent<HTMLInputElement>): QueueFiltersAction {\n return {\n type: QUEUE_CHANGE_PERSISTED_STATE,\n data: {queueTimeWindow: evt.target.value as keyof TPerformanceCounters},\n };\n}\n\ninterface CompactColumnSelectorPayload {\n items: Array<PartitionColumn<QueuePartitionsColumns>>;\n}\nexport function changeQueuePartitionsColumns({\n items,\n}: CompactColumnSelectorPayload): QueueFiltersAction {\n return {\n type: QUEUE_CHANGE_PARTITIONS_COLUMNS,\n data: {partitionsColumns: items},\n };\n}\n","import React, {ComponentType} from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport RadioButton from '../../../../../components/RadioButton/RadioButton';\nimport {QUEUE_MODE} from '../../../../../constants/navigation/tabs/queue';\nimport {changeQueueMode} from '../../../../../store/actions/navigation/tabs/queue/filters';\nimport type {RootState} from '../../../../../store/reducers';\nimport {getQueueMode} from '../../../../../store/selectors/navigation/tabs/queue';\n\nimport './Toolbar.scss';\n\nconst block = cn('queue-toolbar');\n\ninterface Props extends PropsFromRedux {\n extras: ComponentType;\n}\n\nconst tabItems: React.ComponentProps<typeof RadioButton>['items'] = [\n {\n value: QUEUE_MODE.METRICS,\n text: 'Metrics',\n },\n {\n value: QUEUE_MODE.PARTITIONS,\n text: 'Partitions',\n },\n {\n value: QUEUE_MODE.CONSUMERS,\n text: 'Consumers',\n },\n {\n value: QUEUE_MODE.EXPORTS,\n text: 'Exports',\n },\n];\n\nconst Toolbar: React.VFC<Props> = ({extras: Extras, queueMode, changeQueueMode}) => {\n return (\n <div className={block()}>\n <RadioButton value={queueMode} onChange={changeQueueMode} items={tabItems} />\n <Extras />\n </div>\n );\n};\n\nfunction mapStateToProps(state: RootState) {\n return {\n queueMode: getQueueMode(state),\n };\n}\n\nconst mapDispatchToProps = {\n changeQueueMode,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\nexport default connector(Toolbar);\n","import React from 'react';\n\nimport {getCluster} from '../../../../../../store/selectors/global';\nimport {getPath} from '../../../../../../store/selectors/navigation';\nimport {useSelector} from '../../../../../../store/redux-hooks';\nimport ErrorBoundary from '../../../../../../components/ErrorBoundary/ErrorBoundary';\nimport UIFactory from '../../../../../../UIFactory';\n\nexport default function QueueMetrics() {\n const path = useSelector(getPath);\n const cluster = useSelector(getCluster);\n\n const MetricsComponent = UIFactory.getComonentForQueueMetrics()!;\n\n return (\n <ErrorBoundary>\n <MetricsComponent {...{cluster, path}} />\n </ErrorBoundary>\n );\n}\n","import {BaseQueryApi} from '@reduxjs/toolkit/query';\n\nimport {RootState} from '../../../../../store/reducers';\nimport {getPath} from '../../../../../store/selectors/navigation';\nimport {getCluster} from '../../../../../store/selectors/global';\n\nimport {ytApiV3, ytApiV4} from '../../../../../rum/rum-wrap-api';\nimport {wrapApiPromiseByToaster} from '../../../../../utils/utils';\nimport {BatchResultsItem} from '../../../../../../shared/yt-types';\n\ntype CreateConsumersMutationArgs = {\n consumerPath: string;\n} & (\n | {\n register?: false | undefined;\n vital?: boolean;\n }\n | {\n register: true;\n vital: boolean;\n }\n);\n\nexport async function createConsumer(args: CreateConsumersMutationArgs, api: BaseQueryApi) {\n try {\n const {vital, register, consumerPath} = args;\n\n const state = api.getState() as RootState;\n const queuePath = getPath(state);\n\n await ytApiV3.create({\n parameters: {\n type: 'queue_consumer',\n path: consumerPath,\n },\n });\n\n if (register) {\n const response = await wrapApiPromiseByToaster<\n {results: BatchResultsItem<unknown>[]},\n 'v4'\n >(\n ytApiV4.executeBatch({\n parameters: {\n requests: [\n {\n command: 'register_queue_consumer' as const,\n parameters: {\n vital,\n queue_path: queuePath,\n consumer_path: consumerPath,\n },\n },\n ],\n },\n }),\n {\n toasterName: 'register queue consumer',\n successContent:\n 'Registration of the consumer has started, this may take some time',\n skipErrorToast: true,\n batchType: 'v4',\n errorTitle: '',\n },\n );\n if (response.results[0]?.error) {\n throw response.results[0]?.error;\n }\n }\n\n return {data: []};\n } catch (error) {\n return {error};\n }\n}\n\ntype RegisterConsumersMutationArgs = {\n consumerPath: string;\n consumerCluster: string;\n vital: boolean;\n};\n\nexport async function registerConsumer(args: RegisterConsumersMutationArgs, api: BaseQueryApi) {\n try {\n const {vital, consumerPath, consumerCluster} = args;\n\n const state = api.getState() as RootState;\n const queuePath = getPath(state);\n const queueCluster = getCluster(state);\n\n const response = await wrapApiPromiseByToaster<\n {results: BatchResultsItem<unknown>[]},\n 'v4'\n >(\n ytApiV4.executeBatch({\n parameters: {\n requests: [\n {\n command: 'register_queue_consumer' as const,\n parameters: {\n vital,\n queue_path: {\n $value: queuePath,\n $attributes: {\n cluster: queueCluster,\n },\n },\n consumer_path: {\n $value: consumerPath,\n $attributes: {\n cluster: consumerCluster,\n },\n },\n },\n },\n ],\n },\n }),\n {\n toasterName: 'register queue consumer',\n successContent: 'Registration of the consumer has started, this may take some time',\n skipErrorToast: true,\n batchType: 'v4',\n errorTitle: '',\n },\n );\n\n if (response.results[0]?.error) {\n throw response.results[0]?.error;\n }\n return {data: []};\n } catch (error) {\n return {error};\n }\n}\n\nexport async function unregisterConsumer(args: {consumerPath: string}, api: BaseQueryApi) {\n try {\n const {consumerPath} = args;\n\n const state = api.getState() as RootState;\n const queue_path = getPath(state);\n\n const response = await wrapApiPromiseByToaster(\n ytApiV4.executeBatch({\n parameters: {\n requests: [\n {\n command: 'unregister_queue_consumer' as const,\n parameters: {\n queue_path,\n consumer_path: consumerPath,\n },\n },\n ],\n },\n }),\n {\n toasterName: 'unregister queue consumer',\n successContent:\n 'Unregistration of the consumer has started, this may take some time',\n skipErrorToast: true,\n batchType: 'v4',\n errorTitle: '',\n },\n );\n\n if (response.results[0]?.error) {\n throw response.results[0]?.error;\n }\n\n return {data: []};\n } catch (error) {\n return {error};\n }\n}\n","import {BaseQueryApi} from '@reduxjs/toolkit/query';\n//@ts-expect-error\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport ypath from '../../../../../common/thor/ypath';\n\nimport {RootState} from '../../../../../store/reducers';\nimport {batchApi} from '../../../yt';\nimport {getAttributes, getPath} from '../../../../../store/selectors/navigation';\nimport {getCluster} from '../../../../../store/selectors/global';\n\nimport CancelHelper from '../../../../../utils/cancel-helper';\nimport {wrapApiPromiseByToaster} from '../../../../../utils/utils';\nimport {prepareRequest} from '../../../../../utils/navigation';\nimport {YTApiId, ytApiV3} from '../../../../../rum/rum-wrap-api';\nimport {QueueExport, QueueExportConfig} from '../../../../../types/navigation/queue/queue';\n\nconst cancelHelper = new CancelHelper();\n\ntype Config = QueueExportConfig<number> & {export_name: string};\n\ntype ExportsMutationArgs = {\n type: 'delete' | 'edit';\n prevConfig?: Config;\n newConfig?: Config;\n};\n\nexport const makeGetExportsParams = (path: string) => ({\n id: YTApiId.queueExportConfig,\n errorTitle: 'Failed to get export config',\n parameters: {\n requests: [\n {\n command: 'get' as const,\n parameters: prepareRequest('static_export_config', {path: `${path}/@`}),\n },\n ],\n },\n});\n\nasync function deleteExtraAttributes(\n configs: QueueExport<number>,\n prevConfig: Config,\n transactionId: string,\n) {\n await ytApiV3.remove({\n path: `${configs[prevConfig.export_name].export_directory}/@queue_static_export_destination`,\n cancellation: cancelHelper.removeAllAndSave,\n transaction_id: transactionId,\n });\n\n await ytApiV3.remove({\n path: `${configs[prevConfig.export_name].export_directory}/@queue_static_export_progress`,\n cancellation: cancelHelper.removeAllAndSave,\n transaction_id: transactionId,\n });\n}\n\nexport async function exportsMutation(args: ExportsMutationArgs, api: BaseQueryApi) {\n try {\n const state = api.getState() as RootState;\n const path = getPath(state);\n const attributes = getAttributes(state);\n const cluster = getCluster(state);\n\n const {prevConfig, type, newConfig} = args;\n\n const configs: QueueExport<number> = batchApi.endpoints.fetchBatch.select({\n ...makeGetExportsParams(path),\n cluster,\n })(state).data?.[0].output as QueueExport<number>;\n\n const newConfigs = {...configs};\n\n if (prevConfig?.export_name && newConfigs[prevConfig?.export_name]) {\n delete newConfigs[prevConfig?.export_name];\n }\n\n if (type === 'edit' && newConfig?.export_name) {\n newConfigs[newConfig?.export_name] = newConfig;\n }\n\n const transactionId = await yt.v3.startTransaction({});\n try {\n await ytApiV3.set(\n {\n path: `${path}/@static_export_config`,\n cancellation: cancelHelper.removeAllAndSave,\n transaction_id: transactionId,\n },\n newConfigs,\n );\n\n if (type === 'edit' && newConfig) {\n if (prevConfig && prevConfig.export_directory !== newConfig.export_directory) {\n await deleteExtraAttributes(configs, prevConfig, transactionId);\n }\n await ytApiV3.set(\n {\n path: `${newConfig.export_directory}/@queue_static_export_destination`,\n cancellation: cancelHelper.removeAllAndSave,\n transaction_id: transactionId,\n },\n {\n originating_queue_id: `${ypath.getValue(attributes, '/id')}`,\n },\n );\n }\n\n if (type === 'delete' && prevConfig?.export_name) {\n await deleteExtraAttributes(configs, prevConfig, transactionId);\n }\n\n await wrapApiPromiseByToaster(\n yt.v3.commitTransaction({transaction_id: transactionId}),\n {\n toasterName: 'exports_config_update',\n successContent: 'Exports config successfully updated',\n },\n );\n return {data: {}};\n } catch (error) {\n await yt.v3.abortTransaction({transaction_id: transactionId});\n return {error};\n }\n } catch (error) {\n return {error};\n }\n}\n","import {rootApi} from '../../../../../store/api';\n\nimport {YTApiId} from '../../../../../rum/rum-wrap-api';\nimport {createConsumer, registerConsumer, unregisterConsumer} from './consumers';\nimport {exportsMutation} from './exports';\n\nexport const queueApi = rootApi.injectEndpoints({\n endpoints: (build) => ({\n export: build.mutation({\n queryFn: exportsMutation,\n invalidatesTags: [YTApiId.queueExportConfig],\n }),\n createConsumer: build.mutation({\n queryFn: createConsumer,\n }),\n unregisterConsumer: build.mutation({\n queryFn: unregisterConsumer,\n }),\n registerConsumer: build.mutation({\n queryFn: registerConsumer,\n }),\n }),\n});\n\nexport const {\n useExportMutation,\n useCreateConsumerMutation,\n useRegisterConsumerMutation,\n useUnregisterConsumerMutation,\n} = queueApi;\n","import ypath from '../../../../../../common/thor/ypath';\nimport {ytApiV3} from '../../../../../../rum/rum-wrap-api';\n\nexport async function validateCreateConsumerPath(path: string) {\n try {\n const parentPath = path\n .split('/')\n .slice(0, path.split('/').length - 1)\n .join('/');\n\n const res = await ytApiV3.executeBatch({\n parameters: {\n requests: [\n {\n command: 'get' as const,\n parameters: {\n path: `${parentPath}/@`,\n },\n },\n {\n command: 'get' as const,\n parameters: {\n path: `${path}/@`,\n },\n },\n {\n command: 'exists' as const,\n parameters: {\n path,\n },\n },\n ],\n },\n });\n\n if (ypath.getValue(res[0]?.output, '/type') !== 'map_node') {\n return 'Parent path should be a directory';\n }\n\n if (path && path.split('/').at(-1)?.length === 0) {\n return 'Consumer name should not be empty';\n }\n\n if (res[2]?.output) {\n return 'Path should not exist';\n }\n\n return undefined;\n } catch (err) {\n const e = err as Error;\n return e?.message || 'Unexpected type of error: ' + typeof e;\n }\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from '../../../../../../store/redux-hooks';\n\nimport {\n getCreateDialogVisibility,\n toggleCreateDialog,\n} from '../../../../../../store/reducers/navigation/tabs/queue/consumers';\nimport {useCreateConsumerMutation} from '../../../../../../store/api/navigation/tabs/queue/queue';\n\nimport {FormApi, YTDFDialog, makeErrorFields} from '../../../../../../components/Dialog';\n\nimport {docsUrl} from '../../../../../../config';\nimport UIFactory from '../../../../../../UIFactory';\nimport {makeLink} from '../../../../../../utils/utils';\n\nimport {YTError} from '../../../../../../../@types/types';\n\nimport {validateCreateConsumerPath} from './utils';\n\nexport type CreateConsumerFormValues = {\n consumerPath: string;\n} & (\n | {\n register?: false | undefined;\n vital?: boolean;\n }\n | {\n register: true;\n vital: boolean;\n }\n);\n\nexport function CreateConsumerDialog() {\n const dispatch = useDispatch();\n const visible = useSelector(getCreateDialogVisibility);\n\n const [update, {isLoading, error}] = useCreateConsumerMutation();\n\n const onClose = () => dispatch(toggleCreateDialog());\n\n return (\n <YTDFDialog<CreateConsumerFormValues>\n visible={visible}\n fields={[\n {\n type: 'path' as const,\n name: 'consumerPath',\n caption: 'Path',\n required: true,\n validator: validateCreateConsumerPath,\n extras: {\n placeholder: 'Path to consumer node...',\n },\n },\n {\n type: 'tumbler' as const,\n name: 'register',\n caption: 'Register consumer',\n },\n {\n type: 'tumbler' as const,\n name: 'vital',\n caption: 'Vital',\n tooltip: (\n <div>\n {docsUrl(\n makeLink(\n UIFactory.docsUrls['dynamic-tables:queues#creating-a-consumer'],\n 'Docs',\n ),\n )}\n </div>\n ),\n visibilityCondition: {\n when: 'register',\n isActive: (v) => Boolean(v),\n },\n },\n ...makeErrorFields([error as YTError]),\n ]}\n headerProps={{title: 'Create consumer'}}\n size={'m'}\n onAdd={async (form: FormApi<CreateConsumerFormValues>) => {\n const {values} = form.getState();\n await update(values).unwrap();\n }}\n isApplyDisabled={(state) => {\n return state.hasValidationErrors || isLoading;\n }}\n onClose={onClose}\n />\n );\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from '../../../../../../store/redux-hooks';\nimport {Text} from '@gravity-ui/uikit';\n\nimport {\n closeUnregisterDialog,\n getConsumerPath,\n getUnregisterDialogVisibility,\n} from '../../../../../../store/reducers/navigation/tabs/queue/consumers';\nimport {useUnregisterConsumerMutation} from '../../../../../../store/api/navigation/tabs/queue/queue';\n\nimport {YTDFDialog, makeErrorFields} from '../../../../../../components/Dialog';\nimport {YTError} from '../../../../../../../@types/types';\n\nexport function UnregisterConsumerDialog() {\n const dispatch = useDispatch();\n const visible = useSelector(getUnregisterDialogVisibility);\n const consumerPath = useSelector(getConsumerPath);\n\n const onClose = () => dispatch(closeUnregisterDialog());\n\n const [update, {isLoading, error}] = useUnregisterConsumerMutation();\n\n return (\n <YTDFDialog\n visible={visible}\n headerProps={{title: 'Unregister consumer'}}\n fields={[\n {\n name: 'delete',\n type: 'block',\n extras: {\n children: (\n <Text variant={'body-2'}>\n Are you shure you want to unregister consumer?\n </Text>\n ),\n },\n },\n ...makeErrorFields([error as YTError]),\n ]}\n onAdd={async () => {\n if (consumerPath) {\n await update({consumerPath}).unwrap();\n }\n }}\n isApplyDisabled={(state) => {\n return state.hasValidationErrors || isLoading;\n }}\n onClose={onClose}\n />\n );\n}\n","import React, {useMemo} from 'react';\nimport {useDispatch, useSelector} from '../../../../../../store/redux-hooks';\n\nimport {\n getRegisterDialogVisibility,\n toggleRegisterDialog,\n} from '../../../../../../store/reducers/navigation/tabs/queue/consumers';\nimport {useRegisterConsumerMutation} from '../../../../../../store/api/navigation/tabs/queue/queue';\nimport {getCluster} from '../../../../../../store/selectors/global';\n\nimport {FormApi, YTDFDialog, makeErrorFields} from '../../../../../../components/Dialog';\n\nimport {docsUrl} from '../../../../../../config';\nimport UIFactory from '../../../../../../UIFactory';\nimport {makeLink} from '../../../../../../utils/utils';\nimport {makeClusterSelectOptionsSameEnv} from '../../../../../../utils/navigation/tabs/make-cluster-select-options-same-env';\n\nimport {YTError} from '../../../../../../../@types/types';\n\ntype FormValues = {\n consumerPath: string;\n consumerCluster: string[];\n vital: boolean;\n};\n\nexport function RegisterConsumerDialog() {\n const dispatch = useDispatch();\n const visible = useSelector(getRegisterDialogVisibility);\n const cluster = useSelector(getCluster);\n\n const onClose = () => dispatch(toggleRegisterDialog());\n\n const [update, {isLoading, error}] = useRegisterConsumerMutation();\n\n const clusterControlOptions = useMemo(\n () => makeClusterSelectOptionsSameEnv(cluster),\n [cluster],\n );\n\n return (\n <YTDFDialog\n visible={visible}\n headerProps={{title: 'Register consumer'}}\n fields={[\n {\n type: 'select' as const,\n name: 'consumerCluster',\n caption: 'Cluster',\n initialValue: [cluster],\n extras: {\n options: clusterControlOptions,\n placeholder: 'Cluster',\n width: 'max',\n filterable: true,\n },\n },\n {\n type: 'text' as const,\n name: 'consumerPath',\n caption: 'Path',\n required: true,\n extras: {\n placeholder: 'Path to consumer node...',\n },\n },\n {\n type: 'tumbler' as const,\n name: 'vital',\n caption: 'Vital',\n tooltip: (\n <div>\n {docsUrl(\n makeLink(\n UIFactory.docsUrls['dynamic-tables:queues#creating-a-consumer'],\n 'Docs',\n ),\n )}\n </div>\n ),\n },\n ...makeErrorFields([error as YTError]),\n ]}\n size={'m'}\n onAdd={async (form: FormApi<FormValues>) => {\n const {values} = form.getState();\n const preparedValues = {...values, consumerCluster: values.consumerCluster[0]};\n await update(preparedValues).unwrap();\n }}\n isApplyDisabled={(state) => {\n return state.hasValidationErrors || isLoading;\n }}\n onClose={onClose}\n />\n );\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from '../../../../../../store/redux-hooks';\nimport cn from 'bem-cn-lite';\nimport {createSelector} from 'reselect';\nimport type {Column, Settings} from '@gravity-ui/react-data-table';\nimport {Button} from '@gravity-ui/uikit';\n\nimport format from '../../../../../../common/hammer/format';\nimport DataTableYT from '../../../../../../components/DataTableYT/DataTableYT';\nimport Icon from '../../../../../../components/Icon/Icon';\n\nimport {QUEUE_RATE_MODE} from '../../../../../../constants/navigation/tabs/queue';\nimport {\n bool,\n error,\n multimeter,\n ypath,\n} from '../../../../../../pages/navigation/tabs/Queue/utils/column-builder';\nimport type {TPerformanceCounters} from '../../../../../../store/reducers/navigation/tabs/queue/types';\nimport {openUnregisterDialog} from '../../../../../../store/reducers/navigation/tabs/queue/consumers';\nimport {\n SelectedConsumer,\n getConsumers,\n getQueueRateMode,\n getQueueTimeWindow,\n getStatusLoaded,\n getStatusLoading,\n} from '../../../../../../store/selectors/navigation/tabs/queue';\n\nimport {CreateConsumerDialog} from './CreateConsumerDialog';\nimport {UnregisterConsumerDialog} from './UnregisterConsumerDialog';\nimport {RegisterConsumerDialog} from './RegisterConsumerDialog';\n\nimport './Consumers.scss';\n\nconst block = cn('queue-consumers');\n\nconst readRateName: Record<QUEUE_RATE_MODE, string> = {\n [QUEUE_RATE_MODE.ROWS]: 'Read rate',\n [QUEUE_RATE_MODE.DATA_WEIGHT]: 'Read rate',\n};\nconst readRateGetter: Record<QUEUE_RATE_MODE, (row: SelectedConsumer) => TPerformanceCounters> = {\n [QUEUE_RATE_MODE.ROWS]: (x) => x.read_row_count_rate,\n [QUEUE_RATE_MODE.DATA_WEIGHT]: (x) => x.read_data_weight_rate,\n};\n\nconst getColumns = createSelector(\n [getQueueRateMode, getQueueTimeWindow],\n (rateMode, timeWindow): Array<Column<SelectedConsumer>> => [\n ypath<SelectedConsumer>('Consumer', (x) => x.consumer),\n error<SelectedConsumer>('Error', (x) => x.error),\n multimeter<SelectedConsumer>(\n readRateName[rateMode],\n readRateGetter[rateMode],\n timeWindow,\n rateMode === QUEUE_RATE_MODE.ROWS ? format.RowsPerSecond : format.BytesPerSecond,\n ),\n bool<SelectedConsumer>('Vital', (x) => x.vital),\n {\n name: 'actions',\n render: (value) => {\n return <UnregisterConsumer consumerPath={value.row.consumer} />;\n },\n header: '',\n },\n ],\n);\n\nfunction UnregisterConsumer({consumerPath}: {consumerPath: string}) {\n const dispatch = useDispatch();\n return (\n <Button view={'flat'} onClick={() => dispatch(openUnregisterDialog({consumerPath}))}>\n <Icon awesome={'xmark'} size={'l'} />\n </Button>\n );\n}\n\nconst settings: Settings = {displayIndices: false};\n\nexport default function Consumers() {\n const columns = useSelector(getColumns);\n const consumers = useSelector(getConsumers);\n const consumersLoading = useSelector(getStatusLoading);\n const consumersLoaded = useSelector(getStatusLoaded);\n\n return (\n <>\n <DataTableYT\n className={block('table-row')}\n columns={columns}\n data={consumers}\n loading={consumersLoading}\n loaded={consumersLoaded}\n useThemeYT\n settings={settings}\n />\n <CreateConsumerDialog />\n <UnregisterConsumerDialog />\n <RegisterConsumerDialog />\n </>\n );\n}\n","import React from 'react';\nimport {Button} from '@gravity-ui/uikit';\nimport {ConnectedProps, connect} from 'react-redux';\nimport {useDispatch} from '../../../../../../store/redux-hooks';\nimport cn from 'bem-cn-lite';\n\nimport Filter from '../../../../../../components/Filter/Filter';\nimport RadioButton from '../../../../../../components/RadioButton/RadioButton';\nimport {QUEUE_RATE_MODE} from '../../../../../../constants/navigation/tabs/queue';\n\nimport {\n toggleCreateDialog,\n toggleRegisterDialog,\n} from '../../../../../../store/reducers/navigation/tabs/queue/consumers';\nimport {\n changeQueueConsumerName,\n changeQueueOwner,\n changeQueueRateMode,\n changeQueueTimeWindow,\n} from '../../../../../../store/actions/navigation/tabs/queue/filters';\nimport type {RootState} from '../../../../../../store/reducers';\nimport {\n getQueueConsumerName,\n getQueueOwner,\n getQueueRateMode,\n getQueueTimeWindow,\n} from '../../../../../../store/selectors/navigation/tabs/queue';\n\nimport './ConsumersExtraControls.scss';\n\nconst block = cn('queue-consumers');\n\ninterface Props extends PropsFromRedux {}\n\nconst rateItems: React.ComponentProps<typeof RadioButton>['items'] = [\n {\n value: QUEUE_RATE_MODE.ROWS,\n text: 'Rows',\n },\n {\n value: QUEUE_RATE_MODE.DATA_WEIGHT,\n text: 'Data weight',\n },\n];\n\nconst ConsumersExtraControls: React.VFC<Props> = ({\n queueConsumerName,\n queueRateMode,\n changeQueueConsumerName,\n changeQueueRateMode,\n}) => {\n const dispatch = useDispatch();\n const openCreateDialog = () => dispatch(toggleCreateDialog());\n const openRegisterDialog = () => dispatch(toggleRegisterDialog());\n return (\n <>\n <div className={block('divider')} />\n <Filter\n className={block('filter')}\n value={queueConsumerName}\n onChange={changeQueueConsumerName}\n placeholder=\"Consumer name...\"\n />\n <RadioButton value={queueRateMode} onChange={changeQueueRateMode} items={rateItems} />\n <Button view={'outlined'} onClick={openCreateDialog}>\n Create consumer\n </Button>\n <Button view={'outlined'} onClick={openRegisterDialog}>\n Register consumer\n </Button>\n </>\n );\n};\n\nfunction mapStateToProps(state: RootState) {\n return {\n queueConsumerName: getQueueConsumerName(state),\n queueOwner: getQueueOwner(state),\n queueRateMode: getQueueRateMode(state),\n queueTimeWindow: getQueueTimeWindow(state),\n };\n}\n\nconst mapDispatchToProps = {\n changeQueueConsumerName,\n changeQueueOwner,\n changeQueueRateMode,\n changeQueueTimeWindow,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\nexport default connector(ConsumersExtraControls);\n","import React, {useEffect} from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\nimport cn from 'bem-cn-lite';\nimport {createSelector} from 'reselect';\nimport type {Column, Settings} from '@gravity-ui/react-data-table';\n\nimport format from '../../../../../../common/hammer/format';\nimport DataTableYT from '../../../../../../components/DataTableYT/DataTableYT';\nimport {YTErrorBlock} from '../../../../../../components/Block/Block';\nimport {QUEUE_RATE_MODE} from '../../../../../../constants/navigation/tabs/queue';\nimport {\n datetime,\n error,\n host,\n multimeter,\n number,\n string,\n} from '../../../../../../pages/navigation/tabs/Queue/utils/column-builder';\nimport {loadQueuePartitions} from '../../../../../../store/actions/navigation/tabs/queue/partitions';\nimport type {RootState} from '../../../../../../store/reducers';\nimport type {TPerformanceCounters} from '../../../../../../store/reducers/navigation/tabs/queue/types';\nimport {\n SelectedPartition,\n getPartitions,\n getPartitionsError,\n getPartitionsLoaded,\n getPartitionsLoading,\n getQueuePartitionsColumns,\n getQueueRateMode,\n getQueueTimeWindow,\n} from '../../../../../../store/selectors/navigation/tabs/queue';\n\nimport './Partitions.scss';\n\nconst block = cn('queue-partitions');\n\nconst writeRateName: Record<QUEUE_RATE_MODE, string> = {\n [QUEUE_RATE_MODE.ROWS]: 'Write rate',\n [QUEUE_RATE_MODE.DATA_WEIGHT]: 'Write rate',\n};\n\nconst writeRateGetter: Record<QUEUE_RATE_MODE, (row: SelectedPartition) => TPerformanceCounters> = {\n [QUEUE_RATE_MODE.ROWS]: (x) => x.write_row_count_rate,\n [QUEUE_RATE_MODE.DATA_WEIGHT]: (x) => x.write_data_weight_rate,\n};\n\nconst getColumns = createSelector(\n [getQueueRateMode, getQueueTimeWindow, getQueuePartitionsColumns],\n (rateMode, timeWindow, columns): Array<Column<SelectedPartition>> => {\n return columns\n .filter((column) => column.checked)\n .map(({name, caption}) => {\n if (name === 'error') {\n return error<SelectedPartition>(caption, (x) => x[name], block('error'));\n } else if (name === 'host') {\n return host<SelectedPartition>(\n caption,\n (x) => x?.meta?.host || format.NO_VALUE,\n block('hover-action'),\n );\n } else if (name === 'cell_id') {\n return string<SelectedPartition>(\n caption,\n (x) => x?.meta?.cell_id || format.NO_VALUE,\n );\n } else if (name === 'write_rate') {\n return multimeter<SelectedPartition>(\n writeRateName[rateMode],\n writeRateGetter[rateMode],\n timeWindow,\n rateMode === QUEUE_RATE_MODE.ROWS\n ? format.RowsPerSecond\n : format.BytesPerSecond,\n );\n } else if (name === 'last_row_commit_time') {\n return datetime<SelectedPartition>(caption, (x) => x[name]);\n } else {\n return number<SelectedPartition>(caption, (x) => x[name]);\n }\n });\n },\n);\n\nconst settings: Settings = {displayIndices: false};\n\nconst Partitions: React.VFC<PropsFromRedux> = ({\n loadQueuePartitions,\n columns,\n partitions,\n partitionsError,\n partitionsLoading,\n partitionsLoaded,\n}) => {\n useEffect(() => {\n loadQueuePartitions();\n }, []);\n\n if (partitionsError) {\n return <YTErrorBlock error={partitionsError} topMargin=\"half\" />;\n }\n\n return (\n <DataTableYT\n className={block()}\n columns={columns}\n data={partitions}\n loading={partitionsLoading}\n loaded={partitionsLoaded}\n useThemeYT\n settings={settings}\n />\n );\n};\n\nfunction mapStateToProps(state: RootState) {\n return {\n columns: getColumns(state),\n partitions: getPartitions(state),\n partitionsError: getPartitionsError(state),\n partitionsLoading: getPartitionsLoading(state),\n partitionsLoaded: getPartitionsLoaded(state),\n };\n}\n\nconst mapDispatchToProps = {\n loadQueuePartitions,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\nexport default connector(Partitions);\n","import type {ThunkAction} from 'redux-thunk';\nimport {\n QUEUE_PARTITIONS_LOAD_FAILURE,\n QUEUE_PARTITIONS_LOAD_REQUEST,\n QUEUE_PARTITIONS_LOAD_SUCCESS,\n} from '../../../../../constants/navigation/tabs/queue';\nimport {YTApiId, ytApiV3Id} from '../../../../../rum/rum-wrap-api';\nimport type {RootState} from '../../../../../store/reducers';\nimport type {QueuePartitionsAction} from '../../../../../store/reducers/navigation/tabs/queue/partitions';\nimport type {YtQueuePartition} from '../../../../../store/reducers/navigation/tabs/queue/types';\nimport {getPath, getTransaction} from '../../../../../store/selectors/navigation';\nimport {prepareRequest} from '../../../../../utils/navigation';\n\ntype QueueThunkAction = ThunkAction<void, RootState, unknown, QueuePartitionsAction>;\n\nexport function loadQueuePartitions(): QueueThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const path = getPath(state);\n const transaction = getTransaction(state);\n\n dispatch({type: QUEUE_PARTITIONS_LOAD_REQUEST});\n\n return ytApiV3Id\n .get(YTApiId.queuePartitions, prepareRequest('/@queue_partitions', {path, transaction}))\n .then(async (data: YtQueuePartition[]) => {\n dispatch({\n type: QUEUE_PARTITIONS_LOAD_SUCCESS,\n data,\n });\n })\n .catch((error: Error) => {\n dispatch({\n type: QUEUE_PARTITIONS_LOAD_FAILURE,\n data: error,\n });\n });\n };\n}\n","import React from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\nimport cn from 'bem-cn-lite';\n\nimport {\n CompactColumnSelector,\n timeItems,\n} from '../../../Consumer/views/Partitions/PartitionsExtraControls';\nimport Filter from '../../../../../../components/Filter/Filter';\nimport RadioButton from '../../../../../../components/RadioButton/RadioButton';\nimport {QUEUE_RATE_MODE} from '../../../../../../constants/navigation/tabs/queue';\nimport {\n changeQueuePartitionIndex,\n changeQueuePartitionsColumns,\n changeQueueRateMode,\n changeQueueTabletCellHost,\n changeQueueTabletCellId,\n changeQueueTimeWindow,\n} from '../../../../../../store/actions/navigation/tabs/queue/filters';\nimport type {RootState} from '../../../../../../store/reducers';\nimport {\n getQueuePartitionIndex,\n getQueuePartitionsColumns,\n getQueueRateMode,\n getQueueTabletCellHost,\n getQueueTabletCellId,\n getQueueTimeWindow,\n} from '../../../../../../store/selectors/navigation/tabs/queue';\n\nimport './PartitionsExtraControls.scss';\n\nconst block = cn('queue-partitions');\n\ninterface Props extends PropsFromRedux {}\n\nconst rateItems: React.ComponentProps<typeof RadioButton>['items'] = [\n {\n value: QUEUE_RATE_MODE.ROWS,\n text: 'Rows',\n },\n {\n value: QUEUE_RATE_MODE.DATA_WEIGHT,\n text: 'Data weight',\n },\n];\n\nconst PartitionsExtraControls: React.VFC<Props> = ({\n queuePartitionIndex,\n queueTabletCellHost,\n queueTabletCellId,\n queueRateMode,\n queueTimeWindow,\n queuePartitionsColumns,\n changeQueuePartitionIndex,\n changeQueueTabletCellHost,\n changeQueueTabletCellId,\n changeQueueRateMode,\n changeQueueTimeWindow,\n changeQueuePartitionsColumns,\n}) => {\n return (\n <>\n <div className={block('divider')} />\n <Filter\n className={block('filter')}\n value={queuePartitionIndex}\n onChange={changeQueuePartitionIndex}\n placeholder=\"Partition index...\"\n />\n <Filter\n className={block('filter')}\n value={queueTabletCellHost}\n onChange={changeQueueTabletCellHost}\n placeholder=\"Tablet cell host...\"\n />\n <Filter\n className={block('filter')}\n value={queueTabletCellId}\n onChange={changeQueueTabletCellId}\n placeholder=\"Tablet cell ID...\"\n />\n <div className={block('divider')} />\n <RadioButton value={queueRateMode} onChange={changeQueueRateMode} items={rateItems} />\n <RadioButton\n value={queueTimeWindow}\n onChange={changeQueueTimeWindow}\n items={timeItems}\n />\n <CompactColumnSelector\n items={queuePartitionsColumns}\n onChange={changeQueuePartitionsColumns}\n />\n </>\n );\n};\n\nfunction mapStateToProps(state: RootState) {\n return {\n queuePartitionIndex: getQueuePartitionIndex(state),\n queueTabletCellHost: getQueueTabletCellHost(state),\n queueTabletCellId: getQueueTabletCellId(state),\n queueRateMode: getQueueRateMode(state),\n queueTimeWindow: getQueueTimeWindow(state),\n queuePartitionsColumns: getQueuePartitionsColumns(state),\n };\n}\n\nconst mapDispatchToProps = {\n changeQueuePartitionIndex,\n changeQueueTabletCellHost,\n changeQueueTabletCellId,\n changeQueueRateMode,\n changeQueueTimeWindow,\n changeQueuePartitionsColumns,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\nexport default connector(PartitionsExtraControls);\n","import isEmpty_ from 'lodash/isEmpty';\n\nimport {QueueExportConfig} from '../../../../../../../../types/navigation/queue/queue';\nimport {ExportsFormValues} from '../ExportsEditDialog';\n\nexport function prepareInitialValues(\n configs: {[key: string]: QueueExportConfig<number>} | undefined,\n config?: string,\n): ExportsFormValues {\n if (isEmpty_(configs) || !config) {\n return {\n id: 'new_export',\n export_period: {value: 30000},\n export_directory: '//home/',\n export_name: 'new_export',\n };\n }\n\n const export_ttl = configs[config].export_ttl;\n const export_period = configs[config].export_period;\n\n const preparedConfig: ExportsFormValues = {\n ...configs[config],\n id: config,\n export_name: config,\n export_period: {value: export_period},\n export_ttl: export_ttl ? {value: export_ttl} : undefined,\n };\n\n return preparedConfig;\n}\n\nexport function prepareUpdateValues(config: ExportsFormValues) {\n const {id: _id, export_name: _export_name, ...restConfig} = config;\n const preparedConfig: QueueExportConfig<number> = {\n ...restConfig,\n output_table_name_pattern: restConfig.output_table_name_pattern || undefined,\n use_upper_bound_for_table_names: restConfig.use_upper_bound_for_table_names || undefined,\n export_ttl: restConfig.export_ttl?.value,\n export_period: restConfig.export_period?.value,\n };\n return preparedConfig;\n}\n","import ypath from '../../../../../../../../common/thor/ypath';\nimport {ytApiV3} from '../../../../../../../../rum/rum-wrap-api';\n\nimport {BatchApiResults} from '../../../../../../../../store/api/yt/executeBatch';\n\nimport {QueueExport} from '../../../../../../../../types/navigation/queue/queue';\n\nimport {ExportsFormValues} from '../ExportsEditDialog';\n\nexport function validateExportPeriod(period?: {value?: number; error?: string}) {\n return !period?.value || period?.value % 1000 !== 0\n ? 'Export period should be a multiple of 1000ms'\n : undefined;\n}\n\nexport async function validateExportDirectory(path: string) {\n try {\n const res = await ytApiV3.executeBatch({\n parameters: {\n requests: [\n {\n command: 'get' as const,\n parameters: {\n path: `${path}/@`,\n },\n },\n ],\n },\n });\n\n if (res[0].error) {\n return 'Target path should exist';\n }\n\n if (ypath.getValue(res[0].output, '/type') !== 'map_node') {\n return 'Target path should be a directory';\n }\n\n return undefined;\n } catch (err) {\n const e = err as Error;\n return e?.message || 'Unexpected type of error: ' + typeof e;\n }\n}\n\nexport function validate(\n values: ExportsFormValues,\n type: 'create' | 'edit',\n configs?: BatchApiResults<QueueExport<number>>,\n) {\n if (!configs) {\n return undefined;\n }\n\n const paths = new Set();\n const configsValues = configs[0].output;\n\n for (const config in configsValues) {\n if (configsValues[config]) {\n paths.add(configsValues[config].export_directory);\n }\n }\n\n if (\n configsValues &&\n Object.keys(configsValues).includes(values.export_name) &&\n type === 'create'\n ) {\n return {\n export_name: 'Export with the same name already exists',\n };\n }\n\n if (paths.has(values.export_directory) && type === 'create') {\n return {\n export_directory: 'Export with the same export_directory already exists',\n };\n }\n\n return undefined;\n}\n","import React, {useEffect, useState} from 'react';\nimport {useSelector} from '../../../../../../../store/redux-hooks';\nimport {Text} from '@gravity-ui/uikit';\n\nimport {useFetchBatchQuery} from '../../../../../../../store/api/yt';\nimport {useExportMutation} from '../../../../../../../store/api/navigation/tabs/queue/queue';\nimport {makeGetExportsParams} from '../../../../../../../store/api/navigation/tabs/queue/exports';\nimport {getPath} from '../../../../../../../store/selectors/navigation';\n\nimport {FormApi, YTDFDialog, makeErrorFields} from '../../../../../../../components/Dialog';\n\nimport {QueueExport, QueueExportConfig} from '../../../../../../../types/navigation/queue/queue';\nimport {YTError} from '../../../../../../../types';\n\nimport {ExportConfigUtility} from '../Exports';\n\nimport {\n outputTableNamePatternTooltip,\n prepareInitialValues,\n prepareUpdateValues,\n useUpperBoundForTableNamesTooltip,\n validate,\n validateExportDirectory,\n validateExportPeriod,\n} from './utils';\n\ninterface DialogProps {\n type: 'edit' | 'create';\n visible: boolean;\n prevConfig?: QueueExportConfig<number> & {export_name: string};\n onClose: () => void;\n}\n\nexport type ExportsFormValues = ExportConfigUtility & QueueExportConfig<{value: number}>;\n\nconst fields = [\n {\n type: 'text' as const,\n name: 'export_name',\n caption: 'Export name',\n required: true,\n },\n {\n type: 'path' as const,\n name: 'export_directory',\n caption: 'Export directory',\n required: true,\n validator: validateExportDirectory,\n },\n {\n type: 'time-duration' as const,\n name: 'export_period',\n caption: 'Export period',\n required: true,\n tooltip: 'Export period mask will be converted to milliseconds',\n validator: validateExportPeriod,\n },\n {\n type: 'time-duration' as const,\n name: 'export_ttl',\n caption: 'TTL',\n tooltip: 'TTL mask will be converted to milliseconds',\n },\n {\n type: 'text' as const,\n name: 'output_table_name_pattern',\n caption: 'Output table name pattern',\n tooltip: <Text whiteSpace={'break-spaces'}>{outputTableNamePatternTooltip}</Text>,\n extras: {\n placeholder: '%UNIX_TS-%PERIOD',\n },\n },\n {\n type: 'tumbler' as const,\n name: 'use_upper_bound_for_table_names',\n caption: 'Use upper bound for table names',\n tooltip: <Text whiteSpace={'break-spaces'}>{useUpperBoundForTableNamesTooltip}</Text>,\n },\n];\n\nexport function ExportsEditDialog(props: DialogProps) {\n const {type, prevConfig, visible, onClose} = props;\n const path = useSelector(getPath);\n\n const {data: configs} = useFetchBatchQuery<QueueExport<number>>(makeGetExportsParams(path));\n const [update, {isLoading, error}] = useExportMutation();\n\n const [initialValues, setInitialValues] = useState<ExportsFormValues>();\n\n useEffect(() => {\n const rawValues = configs ? configs[0].output : {};\n setInitialValues(prepareInitialValues(rawValues, prevConfig?.export_name));\n }, [prevConfig?.export_name, configs]);\n\n const onAdd = async (form: FormApi<ExportsFormValues, Partial<ExportsFormValues>>) => {\n const {values} = form.getState();\n const preparedValues = prepareUpdateValues(values);\n await update({\n prevConfig,\n newConfig: {...preparedValues, export_name: values.export_name},\n type: 'edit',\n }).unwrap();\n };\n\n return (\n <YTDFDialog<ExportsFormValues>\n onAdd={onAdd}\n visible={visible}\n onClose={onClose}\n size=\"l\"\n headerProps={{title: type === 'create' ? 'Create export' : 'Edit export'}}\n initialValues={initialValues}\n fields={[...fields, ...makeErrorFields([error as YTError])]}\n isApplyDisabled={(state) => {\n return state.hasValidationErrors || isLoading;\n }}\n validate={(values) => validate(values, type, configs)}\n />\n );\n}\n","export const outputTableNamePatternTooltip = `This pattern extends the export table name. Supported:\n- %UNIX_TS - unix timestamp\n- %PERIOD - the length of the export period in seconds\n- %ISO - unix timestamp as ISO time string\n- all specifiers supported by the \"strftime\" function (e.g. %H, %M, %S, etc.)\n\n Default is \"%UNIX_TS-%PERIOD\".\n NB!: It has to set a unique table name, otherwise error will occur.`;\n\nexport const useUpperBoundForTableNamesTooltip = `\"true\" - output table will gather data to upper bound of frame. E.g. for %H pattern output table will be named 17:00 and has data from 16:00 to 17:00.\n\"false\" - otherwise, formatting will be equal to the upper bound minus one export period. E.g. for %H data will be from 17:00 to 18:00.\nNB: In any case, the table exported with an upper bound timestamp of T is not guaranteed to contain all data with timestamp <= T.\nIn case of delays, some of the data can end up in latter tables. You should be especially careful with commit_ordering=%false queues, since commit timestamp monotonicity within a tablet is not guaranteed for them.\n`;\n","import React, {useCallback, useState} from 'react';\nimport {Button, Flex, Text} from '@gravity-ui/uikit';\nimport b from 'bem-cn-lite';\n\nimport {useExportMutation} from '../../../../../../../store/api/navigation/tabs/queue/queue';\n\nimport Icon from '../../../../../../../components/Icon/Icon';\nimport {YTDFDialog, makeErrorFields} from '../../../../../../../components/Dialog';\nimport {QueueExportConfig} from '../../../../../../../types/navigation/queue/queue';\nimport {YTError} from '../../../../../../../types';\n\nimport {ExportsEditDialog} from '../ExportsEditDialog/ExportsEditDialog';\n\nconst block = b('exports-edit');\n\nexport function ExportsEdit({\n prevConfig,\n}: {\n prevConfig: QueueExportConfig<number> & {export_name: string};\n}) {\n const [update, {isLoading, error}] = useExportMutation();\n\n const [editDialogVisible, setEditDialogVisible] = useState(false);\n const [deleteDialogVisible, setDeleteDialogVisible] = useState(false);\n\n const toggleEditDialogVisibility = useCallback(() => {\n setEditDialogVisible(!editDialogVisible);\n }, [editDialogVisible, setEditDialogVisible]);\n\n const toggleDeleteDialogVisibility = useCallback(() => {\n setDeleteDialogVisible(!deleteDialogVisible);\n }, [deleteDialogVisible, setDeleteDialogVisible]);\n\n return (\n <>\n <Flex direction={'row'} gap={1}>\n <Button view=\"flat\" onClick={toggleDeleteDialogVisibility}>\n <Icon awesome={'trash-bin'} />\n </Button>\n <Button\n className={block('button')}\n view=\"flat\"\n onClick={toggleEditDialogVisibility}\n qa={'edit-export'}\n >\n <Icon awesome={'pencil'} />\n </Button>\n </Flex>\n <YTDFDialog\n visible={deleteDialogVisible}\n pristineSubmittable={true}\n fields={[\n {\n name: 'delete',\n type: 'block',\n extras: {\n children: (\n <Text variant=\"body-2\">\n Are you shure you want to delete {prevConfig.export_name}?\n </Text>\n ),\n },\n },\n ...makeErrorFields([error as YTError]),\n ]}\n onAdd={async () => {\n await update({prevConfig, type: 'delete'}).unwrap();\n }}\n headerProps={{\n title: 'Delete export',\n }}\n onClose={toggleDeleteDialogVisibility}\n isApplyDisabled={() => {\n return isLoading;\n }}\n />\n <ExportsEditDialog\n type={'edit'}\n prevConfig={prevConfig}\n visible={editDialogVisible}\n onClose={toggleEditDialogVisibility}\n />\n </>\n );\n}\n","import React from 'react';\nimport {ClipboardButton, Flex, Text} from '@gravity-ui/uikit';\n\nimport Link from '../../../../../../components/Link/Link';\nimport Icon from '../../../../../../components/Icon/Icon';\nimport DataTableYT, {Column} from '../../../../../../components/DataTableYT/DataTableYT';\nimport {Tooltip} from '../../../../../../components/Tooltip/Tooltip';\nimport {formatTimeDuration} from '../../../../../../components/TimeDuration/TimeDuration';\n\nimport hammer from '../../../../../../common/hammer';\nimport {QueueExportConfig} from '../../../../../../types/navigation/queue/queue';\nimport {makeNavigationLink} from '../../../../../../utils/app-url';\n\nimport {ExportsEdit} from './ExportsEdit/ExportsEdit';\nimport {useExports} from './use-exports';\n\nexport type ExportConfigUtility = {\n id: string;\n export_name: string;\n};\n\nexport type ExportConfigColumns = ExportConfigUtility & QueueExportConfig<number>;\n\nconst columns: Array<Column<ExportConfigColumns>> = [\n {\n name: 'export_name',\n render: Value,\n header: 'Export name',\n },\n {\n name: 'export_directory',\n render: Path,\n header: 'Export directory',\n },\n {\n name: 'export_period',\n render: Time,\n header: 'Export period',\n },\n {\n name: 'export_ttl',\n render: Time,\n header: 'Export TTL',\n },\n {\n name: 'output_table_name_pattern',\n render: Value,\n header: 'Output table name pattern',\n },\n {\n name: 'use_upper_bound_for_table_names',\n render: Value,\n header: 'Use upper bound for table names',\n },\n {\n name: '',\n render({row}) {\n return <ExportsEdit prevConfig={row} />;\n },\n },\n];\n\nexport function Exports() {\n const {data, isLoading, isFetching} = useExports();\n\n return (\n <DataTableYT<ExportConfigColumns>\n columns={columns}\n data={data}\n loaded={!isFetching}\n loading={isLoading}\n useThemeYT\n settings={{displayIndices: false, sortable: false}}\n />\n );\n}\n\nfunction Value({value}: {value?: unknown}) {\n return <>{value ? String(value) : hammer.format.NO_VALUE}</>;\n}\n\nfunction Time({value}: {value?: unknown}) {\n return (\n <Flex alignItems={'center'} gap={1}>\n <Text>{value ? formatTimeDuration(Number(value)) : hammer.format.NO_VALUE}</Text>\n {Boolean(value) && (\n <Tooltip\n content={\n <Flex gap={2} alignItems={'center'}>\n <ClipboardButton text={String(value)} />\n {String(value)}, ms\n </Flex>\n }\n >\n <Icon awesome={'question-circle'} />\n </Tooltip>\n )}\n </Flex>\n );\n}\n\nfunction Path({value}: {value?: unknown}) {\n return (\n <Link url={makeNavigationLink({path: String(value)})} routed>\n {String(value)}\n </Link>\n );\n}\n","import React, {ComponentType, useEffect} from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\nimport {useSelector} from '../../../../store/redux-hooks';\n\nimport {Alerts} from '../../../../components/Alerts/Alerts';\nimport ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\nimport WithStickyToolbar from '../../../../components/WithStickyToolbar/WithStickyToolbar';\nimport {Toolbar} from '../../../../components/WithStickyToolbar/Toolbar/Toolbar';\nimport {QUEUE_MODE} from '../../../../constants/navigation/tabs/queue';\nimport {loadQueueStatus} from '../../../../store/actions/navigation/tabs/queue/status';\nimport type {RootState} from '../../../../store/reducers';\nimport {\n getFamily,\n getPartitionCount,\n getQueueMode,\n getQueueStatusDataAlerts,\n getStatusError,\n getWriteDataWeightRate,\n getWriteRowCountRate,\n} from '../../../../store/selectors/navigation/tabs/queue';\n\nimport Meta from './Meta/Meta';\nimport QueueToolbar from './Toolbar/Toolbar';\nimport QueueMetrics from './views/QueueMetrics/QueueMetrics';\nimport Consumers from './views/Consumers/Consumers';\nimport ConsumersExtraControls from './views/Consumers/ConsumersExtraControls';\nimport Partitions from './views/Partitions/Partitions';\nimport PartitionsExtraControls from './views/Partitions/PartitionsExtraControls';\nimport UIFactory from '../../../../UIFactory';\nimport {Exports} from './views/Exports/Exports';\nimport {ExportsExtraControls} from './views/Exports/ExportsExtraControls';\nimport {QueueError} from './QueueError';\n\nconst emptyView = {ExtraControls: () => null, View: () => null};\n\nconst views: Record<QUEUE_MODE, {ExtraControls: ComponentType; View: ComponentType}> = {\n [QUEUE_MODE.METRICS]: {ExtraControls: () => null, View: () => null},\n [QUEUE_MODE.PARTITIONS]: {ExtraControls: PartitionsExtraControls, View: Partitions},\n [QUEUE_MODE.CONSUMERS]: {ExtraControls: ConsumersExtraControls, View: Consumers},\n [QUEUE_MODE.EXPORTS]: {ExtraControls: ExportsExtraControls, View: Exports},\n};\n\nfunction useViewByMode(mode: QUEUE_MODE) {\n const component = UIFactory.getComonentForQueueMetrics();\n if (component && mode === QUEUE_MODE.METRICS) {\n return {ExtraControls: () => null, View: QueueMetrics};\n }\n\n return views[mode] || emptyView;\n}\n\nconst Queue: React.VFC<PropsFromRedux> = ({\n loadQueueStatus,\n family,\n partitionCount,\n writeDataWeightRate,\n writeRowCountRate,\n queueMode,\n statusError,\n}) => {\n useEffect(() => {\n loadQueueStatus();\n }, []);\n\n const {ExtraControls, View} = useViewByMode(queueMode);\n\n const items = useSelector(getQueueStatusDataAlerts);\n\n if (statusError) {\n return <QueueError error={statusError} topMargin=\"none\" />;\n }\n\n return (\n <ErrorBoundary>\n <Alerts items={items} />\n <Meta\n family={family}\n partitionCount={partitionCount}\n writeDataWeightRate={writeDataWeightRate}\n writeRowCountRate={writeRowCountRate}\n />\n <WithStickyToolbar\n toolbar={\n <Toolbar\n itemsToWrap={[\n {node: <QueueToolbar extras={ExtraControls} />, growable: true},\n ]}\n />\n }\n content={<View />}\n />\n </ErrorBoundary>\n );\n};\n\nfunction mapStateToProps(state: RootState) {\n return {\n family: getFamily(state),\n partitionCount: getPartitionCount(state),\n writeDataWeightRate: getWriteDataWeightRate(state),\n writeRowCountRate: getWriteRowCountRate(state),\n queueMode: getQueueMode(state),\n statusError: getStatusError(state),\n };\n}\n\nconst mapDispatchToProps = {\n loadQueueStatus,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\nexport default connector(Queue);\n","import React, {useCallback, useState} from 'react';\nimport {Button, Flex} from '@gravity-ui/uikit';\nimport {ExportsEditDialog} from './ExportsEditDialog/ExportsEditDialog';\n\nexport function ExportsExtraControls() {\n const [visible, setVisible] = useState(false);\n\n const toggleVisibility = useCallback(() => {\n setVisible(!visible);\n }, [visible, setVisible]);\n\n return (\n <Flex direction={'row'} gap={3}>\n <div style={{borderLeft: '1px solid var(--dark-divider)'}}></div>\n <Button view={'outlined'} onClick={toggleVisibility} qa={'create-export'}>\n Create export\n </Button>\n <ExportsEditDialog type={'create'} visible={visible} onClose={toggleVisibility} />\n </Flex>\n );\n}\n","import {useSelector} from '../../../../../../store/redux-hooks';\n\nimport {useFetchBatchQuery} from '../../../../../../store/api/yt';\nimport {makeGetExportsParams} from '../../../../../../store/api/navigation/tabs/queue/exports';\n\nimport {getPath} from '../../../../../../store/selectors/navigation';\n\nimport {QueueExport} from '../../../../../../types/navigation/queue/queue';\n\nimport {ExportConfigColumns} from './Exports';\n\nexport function useExports() {\n const path = useSelector(getPath);\n\n const {\n data: config,\n isLoading,\n isFetching,\n } = useFetchBatchQuery<QueueExport<number>>(makeGetExportsParams(path));\n\n const data: ExportConfigColumns[] = [];\n\n if (config && config[0].output) {\n for (const obj in config[0].output) {\n if (obj) {\n const newObj: ExportConfigColumns = {\n ...config[0].output[obj],\n export_name: obj,\n id: obj,\n };\n data.push(newObj);\n }\n }\n }\n\n return {data, isLoading, isFetching};\n}\n","import type {ThunkAction} from 'redux-thunk';\n\nimport {\n QUEUE_STATUS_LOAD_FAILURE,\n QUEUE_STATUS_LOAD_REQUEST,\n QUEUE_STATUS_LOAD_SUCCESS,\n} from '../../../../../constants/navigation/tabs/queue';\nimport {YTApiId, ytApiV3Id} from '../../../../../rum/rum-wrap-api';\nimport type {RootState} from '../../../../../store/reducers';\nimport type {QueueStatusAction} from '../../../../../store/reducers/navigation/tabs/queue/status';\nimport type {YtQueueStatus} from '../../../../../store/reducers/navigation/tabs/queue/types';\nimport {getPath, getTransaction} from '../../../../../store/selectors/navigation';\nimport {prepareRequest} from '../../../../../utils/navigation';\n\ntype QueueThunkAction = ThunkAction<void, RootState, unknown, QueueStatusAction>;\n\nexport function loadQueueStatus(): QueueThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const path = getPath(state);\n const transaction = getTransaction(state);\n\n dispatch({type: QUEUE_STATUS_LOAD_REQUEST});\n return ytApiV3Id\n .get(YTApiId.queueStatus, prepareRequest('/@queue_status', {path, transaction}))\n .then((data: YtQueueStatus) => {\n if (data.error) {\n throw data.error;\n }\n dispatch({\n type: QUEUE_STATUS_LOAD_SUCCESS,\n data,\n });\n })\n .catch((error: Error) => {\n dispatch({\n type: QUEUE_STATUS_LOAD_FAILURE,\n data: error,\n });\n });\n };\n}\n","import yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport map_ from 'lodash/map';\nimport slice_ from 'lodash/slice';\n\nimport CancelHelper from '../../../../utils/cancel-helper';\nimport {prepareRequest} from '../../../../utils/navigation';\nimport {getPath, getTransaction} from '../../../../store/selectors/navigation';\nimport {\n GET_LOCKS,\n IS_PARTIAL,\n MAX_TRANSACTIONS_REQUESTS,\n} from '../../../../constants/navigation/tabs/locks';\nimport {YTApiId, ytApiV3Id} from '../../../../rum/rum-wrap-api';\nimport {splitBatchResults} from '../../../../utils/utils';\n\nconst requests = new CancelHelper();\n\nfunction prepareData(locks, transactions = []) {\n return map_(locks, (lock, index) => {\n const item = {...lock};\n item.transaction = transactions[index] || {};\n item.transaction.id = item.transaction_id;\n item.index = index;\n\n return item;\n });\n}\n\nfunction getTransactions(rowLocks) {\n return (dispatch) => {\n const requests = map_(slice_(rowLocks, 0, MAX_TRANSACTIONS_REQUESTS), (lock) => {\n return {\n command: 'get',\n parameters: {\n path: '//sys/transactions/' + lock.transaction_id + '/@',\n attributes: ['title', 'start_time', 'operation_id'],\n },\n };\n });\n\n return ytApiV3Id\n .executeBatch(YTApiId.navigationTransactions, {requests})\n .then((data) => {\n const {error, results: transactions} = splitBatchResults(\n data,\n 'Failed to get transactions',\n );\n if (error) {\n return Promise.reject(error);\n }\n\n const locks = prepareData(rowLocks, transactions);\n const isPartial = locks.length > MAX_TRANSACTIONS_REQUESTS;\n\n dispatch({\n type: IS_PARTIAL,\n data: {isPartial},\n });\n\n dispatch({\n type: GET_LOCKS.SUCCESS,\n data: {locks},\n });\n })\n .catch((error) => {\n dispatch({\n type: GET_LOCKS.FAILURE,\n data: {error},\n });\n });\n };\n}\n\nexport function getLocks() {\n return (dispatch, getState) => {\n const state = getState();\n const path = getPath(state);\n const transaction = getTransaction(state);\n\n dispatch({type: GET_LOCKS.REQUEST});\n requests.removeAllRequests();\n\n ytApiV3Id\n .get(YTApiId.navigationLocks, {\n parameters: prepareRequest('/@locks', {path, transaction}),\n cancellation: requests.saveCancelToken,\n })\n .then((locks) => dispatch(getTransactions(locks)))\n .catch((error) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({type: GET_LOCKS.CANCELLED});\n } else {\n dispatch({\n type: GET_LOCKS.FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nexport function abortAndReset() {\n return (dispatch) => {\n requests.removeAllRequests();\n dispatch({type: GET_LOCKS.CANCELLED});\n };\n}\n\nexport function setLocksModeFilter(modeFilter) {\n return {type: GET_LOCKS.PARTITION, data: {modeFilter}};\n}\n","import find_ from 'lodash/find';\n\nimport {rumLogError} from '../rum/rum-counter';\nimport {YT} from '../config/yt-config';\n\nconst {clusters} = YT;\n\nexport function findClusterConfigByOperationId(operationId: string) {\n try {\n const cellTag = Number.parseInt(operationId?.split('-')[2], 16) >> 16; // eslint-disable-line no-bitwise\n return find_(clusters, (clusterConfig) => clusterConfig.primaryMaster?.cellTag === cellTag);\n } catch (error) {\n rumLogError(\n {\n message: 'Cannot find cluster config for operation',\n additional: {\n operationId,\n },\n },\n error as any,\n );\n }\n return null;\n}\n","import filter_ from 'lodash/filter';\n\nimport {createSelector} from 'reselect';\nimport {RootState} from '../../../../store/reducers';\nimport {calculateLoadingStatus} from '../../../../utils/utils';\n\nconst getLocks = (state: RootState) => state.navigation.tabs.locks.locks;\nconst getLocksLoading = (state: RootState) => state.navigation.tabs.locks.loading;\nconst getLocksLoaded = (state: RootState) => state.navigation.tabs.locks.loaded;\nconst getLocksError = (state: RootState) => state.navigation.tabs.locks.error;\nexport const getLocksModeFilter = (state: RootState) => state.navigation.tabs.locks.modeFilter;\n\nexport const getLocksLoadStatus = createSelector(\n [getLocksLoading, getLocksLoaded, getLocksError],\n (loading, loaded, error) => {\n return calculateLoadingStatus(loading, loaded, error);\n },\n);\n\nexport const getLocksFiltered = createSelector(\n [getLocksModeFilter, getLocks],\n (modeFilter, items) => {\n if (!modeFilter) {\n return items;\n }\n return filter_(items, ({mode}) => mode === modeFilter);\n },\n);\n","import React, {Component, Fragment} from 'react';\nimport {connect} from 'react-redux';\nimport {useSelector} from '../../../../store/redux-hooks';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport unipika from '../../../../common/thor/unipika';\n\nimport ElementsTable from '../../../../components/ElementsTable/ElementsTable';\nimport {FormattedLink, FormattedText} from '../../../../components/formatters';\n\nimport LoadDataHandler from '../../../../components/LoadDataHandler/LoadDataHandler';\nimport MetaTable from '../../../../components/MetaTable/MetaTable';\nimport {TemplateTime} from '../../../../components/MetaTable/templates/TemplateTime';\nimport {Tooltip} from '../../../../components/Tooltip/Tooltip';\nimport {Loader} from '@gravity-ui/uikit';\nimport Link from '../../../../components/Link/Link';\nimport {Linkify} from '../../../../components/Linkify/Linkify';\n\nimport {MAX_TRANSACTIONS_REQUESTS} from '../../../../constants/navigation/tabs/locks';\nimport {\n abortAndReset,\n getLocks,\n setLocksModeFilter,\n} from '../../../../store/actions/navigation/tabs/locks';\nimport {Page} from '../../../../constants/index';\nimport {findClusterConfigByOperationId} from '../../../../utils/clusters';\n\nimport {\n getLocksFiltered,\n getLocksLoadStatus,\n getLocksModeFilter,\n} from '../../../../store/selectors/navigation/tabs/locks';\nimport {useRumMeasureStop} from '../../../../rum/RumUiContext';\nimport {RumMeasureTypes} from '../../../../rum/rum-measure-types';\nimport {useAppRumMeasureStart} from '../../../../rum/rum-app-measures';\nimport {isFinalLoadingStatus} from '../../../../utils/utils';\n\nimport Yson from '../../../../components/Yson/Yson';\nimport CustomRadioButton from '../../../../components/RadioButton/RadioButton';\nimport WithStickyToolbar from '../../../../components/WithStickyToolbar/WithStickyToolbar';\nimport {Toolbar} from '../../../../components/WithStickyToolbar/Toolbar/Toolbar';\n\nimport './Locks.scss';\n\nconst block = cn('navigation-locks');\nconst messageBlock = cn('elements-message');\n\nclass Locks extends Component {\n static propTypes = {\n // from connect\n loading: PropTypes.bool.isRequired,\n loaded: PropTypes.bool.isRequired,\n error: PropTypes.bool.isRequired,\n errorData: PropTypes.object.isRequired,\n\n isPartial: PropTypes.bool.isRequired,\n locks: PropTypes.arrayOf(\n PropTypes.shape({\n child_key: PropTypes.string,\n id: PropTypes.string.isRequired,\n index: PropTypes.number.isRequired,\n mode: PropTypes.string.isRequired,\n state: PropTypes.string.isRequired,\n transaction_id: PropTypes.string.isRequired,\n transaction: PropTypes.shape({\n id: PropTypes.string.isRequired,\n start_time: PropTypes.string,\n title: PropTypes.string,\n operation_id: PropTypes.string,\n }).isRequired,\n }),\n ).isRequired,\n\n getLocks: PropTypes.func.isRequired,\n abortAndReset: PropTypes.func.isRequired,\n };\n\n static renderIndex({index}) {\n return <FormattedText text={index + 1} />;\n }\n\n static renderLock(item) {\n return (\n <MetaTable\n qa=\"lock-meta-table\"\n items={[\n {key: 'id', value: item.id, className: block('id')},\n {key: 'mode', value: item.mode},\n {key: 'state', value: item.state},\n {\n key: 'child_key',\n value: item.child_key,\n visible: Boolean(item.child_key),\n },\n {\n key: 'attribute_key',\n value: item.attribute_key,\n visible: Boolean(item.attribute_key),\n },\n ]}\n />\n );\n }\n\n componentDidMount() {\n this.props.getLocks();\n }\n\n componentWillUnmount() {\n this.props.abortAndReset();\n }\n\n tableSettings = {\n theme: 'light',\n itemHeight: 100,\n columns: {\n items: {\n index: {\n sort: false,\n caption: '#',\n align: 'center',\n },\n lock: {\n sort: false,\n align: 'left',\n },\n transaction: {\n sort: false,\n align: 'left',\n },\n },\n sets: {\n default: {\n items: ['index', 'lock', 'transaction'],\n },\n },\n mode: 'default',\n },\n computeKey(item) {\n return item.id;\n },\n };\n\n renderTransaction = ({transaction}) => {\n const operationId = transaction.operation_id;\n const {id: clusterId} = findClusterConfigByOperationId(operationId) || {};\n if (operationId && !clusterId) {\n console.error(new Error(`Cannot find cluster by operation id ${operationId}`));\n }\n const operationIdUrl = `/${clusterId}/operations/${operationId}`;\n\n const title = unipika.decode(String(transaction.title));\n\n return (\n <MetaTable\n items={[\n {\n key: 'id',\n value: (\n <FormattedLink\n text={transaction.id}\n state={{\n page: Page.NAVIGATION,\n path: '//sys/transactions/' + transaction.id,\n }}\n />\n ),\n className: block('id'),\n },\n {\n key: 'title',\n value: (\n <Tooltip\n content={<Yson value={transaction.title} />}\n to={['top-center', 'bottom-center']}\n >\n <div className={block('title-tooltip')}>\n <div className={block('title', 'unipika')}>\n <Linkify className={'string'} text={title} />\n </div>\n </div>\n </Tooltip>\n ),\n visible: Boolean(transaction.title),\n },\n {\n key: 'start_time',\n value: (\n <TemplateTime time={transaction.start_time} valueFormat=\"DateTime\" />\n ),\n visible: Boolean(transaction.start_time),\n className: block('start-time'),\n },\n {\n key: 'operation_id',\n value: <Link url={operationIdUrl}>{operationId}</Link>,\n visible: Boolean(operationId) || Boolean(clusterId),\n },\n ]}\n />\n );\n };\n\n get templates() {\n return {\n index: Locks.renderIndex,\n lock: Locks.renderLock,\n transaction: this.renderTransaction,\n };\n }\n\n renderMessage() {\n return (\n <div className={messageBlock({theme: 'info'})}>\n <p className=\"elements-message__paragraph\">\n Transaction information was only loaded for first {MAX_TRANSACTIONS_REQUESTS}{' '}\n locks.\n </p>\n </div>\n );\n }\n\n onModeFilter = (e) => {\n const mode = e.target.value;\n this.props.setLocksModeFilter(mode);\n };\n\n renderModeFilter() {\n const {modeFilter} = this.props;\n return (\n <Toolbar\n className={block('toolbar')}\n itemsToWrap={[\n {\n name: 'buttons',\n node: (\n <CustomRadioButton\n qa=\"locks-type-filter\"\n onChange={this.onModeFilter}\n value={modeFilter}\n items={[\n {\n text: 'All',\n value: '',\n },\n {\n text: 'Exclusive',\n value: 'exclusive',\n },\n {\n text: 'Shared',\n value: 'shared',\n },\n {\n text: 'Snapshot',\n value: 'snapshot',\n },\n ]}\n />\n ),\n },\n ]}\n />\n );\n }\n\n renderContent() {\n const {isPartial, locks} = this.props;\n const toolbar = this.renderModeFilter();\n\n return (\n <WithStickyToolbar\n toolbar={toolbar}\n content={\n <Fragment>\n {isPartial && this.renderMessage()}\n <ElementsTable\n {...this.tableSettings}\n templates={this.templates}\n items={locks}\n css={block()}\n />\n </Fragment>\n }\n />\n );\n }\n\n render() {\n const {loading, loaded} = this.props;\n const initialLoading = loading && !loaded;\n\n return (\n <LoadDataHandler {...this.props}>\n <div className={block({loading: initialLoading})}>\n {initialLoading ? <Loader /> : this.renderContent()}\n </div>\n </LoadDataHandler>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const {loading, loaded, error, errorData, isPartial} = state.navigation.tabs.locks;\n\n return {\n loading,\n loaded,\n error,\n errorData,\n\n modeFilter: getLocksModeFilter(state),\n locks: getLocksFiltered(state),\n isPartial,\n };\n};\nconst mapDispatchToProps = {\n getLocks,\n abortAndReset,\n setLocksModeFilter,\n};\n\nconst LocksConnected = connect(mapStateToProps, mapDispatchToProps)(Locks);\n\nexport default function LocksWithRum() {\n const loadState = useSelector(getLocksLoadStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.NAVIGATION_TAB_LOCKS,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.NAVIGATION_TAB_LOCKS,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <LocksConnected />;\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport Icon from '../Icon/Icon';\nimport {Button} from '@gravity-ui/uikit';\n\nimport './ErrorIcon.scss';\nimport {showErrorPopup} from '../../utils/utils';\n\nconst b = cn('yt-error-icon');\n\ninterface Props {\n className?: string;\n error?: any;\n}\n\nexport default function ErrorIcon(props: Props) {\n const {className, error} = props;\n return (\n <span className={b(null, className)}>\n <Button view=\"flat\" size=\"s\" pin=\"circle-circle\" onClick={() => showErrorPopup(error)}>\n <Icon className={b('icon')} awesome=\"exclamation-circle\" />\n </Button>\n </span>\n );\n}\n","import React, {useState} from 'react';\nimport {Text} from '@gravity-ui/uikit';\nimport Button from '../Button/Button';\nimport Icon from '../Icon/Icon';\nimport Modal from '../Modal/Modal';\nimport cn from 'bem-cn-lite';\n\nimport {useMarkdown} from '../Markdown/Markdown';\nimport './MarkdownLinePreview.scss';\n\nconst block = cn('one-line-text-preview');\nconst mdBlock = cn('yt-markdown');\n\ninterface Props {\n text: string;\n title: string;\n className?: string;\n allowHTML?: boolean;\n}\n\nexport function MarkdownLinePreview({text, title, className, allowHTML = false}: Props) {\n const [visible, setVisible] = useState(false);\n\n const showModal = () => {\n setVisible(true);\n };\n\n const hideModal = () => {\n setVisible(false);\n };\n\n const {result} = useMarkdown({text, allowHTML});\n\n const {plainText, html} = React.useMemo(() => {\n const {html} = result ?? {};\n const div = document.createElement('div');\n div.innerHTML = html ?? '';\n const plainText = div.innerText;\n return {html, plainText};\n }, [result]);\n\n return (\n <div className={block(null, className)}>\n <Text className={block('preview-text')} color={'primary'} ellipsis>\n {plainText}\n </Text>\n <Button onClick={showModal} view={'flat-secondary'} size={'m'} width={'auto'}>\n <Icon awesome=\"window-maximize\"></Icon>\n </Button>\n {visible ? (\n <Modal\n visible={visible}\n title={title}\n onOutsideClick={hideModal}\n onCancel={hideModal}\n footer={false}\n content={\n <div\n className={mdBlock(null, 'yfm')}\n dangerouslySetInnerHTML={{__html: html ?? ''}}\n />\n }\n />\n ) : null}\n </div>\n );\n}\n","import React from 'react';\nimport {Text} from '@gravity-ui/uikit';\nimport {Tooltip} from '../../../../../components/Tooltip/Tooltip';\nimport Icon from '../../../../../components/Icon/Icon';\nimport MetaTable from '../../../../../components/MetaTable/MetaTable';\nimport {MarkdownLinePreview} from '../../../../../components/MarkdownLinePreview/MarkdownLinePreview';\nimport cn from 'bem-cn-lite';\n\nimport './ExternalDescription.scss';\n\nconst block = cn('external-description');\n\nexport interface ExternalSchemaDescription {\n name: string;\n type: string;\n glossaryEntity: {\n description: string;\n title: string;\n };\n}\n\ninterface Props {\n type: string;\n data: ExternalSchemaDescription;\n column: keyof ExternalSchemaDescription['glossaryEntity'];\n}\n\nexport function ExternalDescription({type, data, column}: Props) {\n const hasWarning = type !== data.type;\n const {[column]: markdown} = data.glossaryEntity ?? {};\n\n const typeMismatchElement = (\n <>\n <Text color={'warning'}>\n <Icon awesome=\"exclamation-triangle\" face=\"solid\" />\n There might be a type mismatch\n </Text>\n <MetaTable\n className={block('meta')}\n items={[\n {\n key: 'type',\n value: type,\n },\n {\n key: 'external type',\n value: data.type,\n },\n ]}\n />\n </>\n );\n\n return (\n <div className={block()}>\n {hasWarning ? (\n <Tooltip\n className={block('warning')}\n content={typeMismatchElement}\n placement={'left'}\n disabled={!hasWarning}\n >\n <Icon className={block('icon')} awesome=\"exclamation-triangle\" face=\"solid\" />\n </Tooltip>\n ) : null}\n {markdown ? (\n <MarkdownLinePreview\n className={block('preview')}\n text={markdown}\n title={data.name}\n allowHTML={true}\n />\n ) : (\n <Text className={block('preview')} color={'hint'} ellipsis>\n {'no description'}\n </Text>\n )}\n </div>\n );\n}\n","import React, {Component, Fragment} from 'react';\nimport {connect} from 'react-redux';\nimport {useSelector} from '../../../../store/redux-hooks';\nimport cn from 'bem-cn-lite';\n\nimport omit_ from 'lodash/omit';\n\nimport ElementsTable from '../../../../components/ElementsTable/ElementsTable';\nimport {ColumnInfo} from '../../../../components/ElementsTable/ElementsTableHeader';\nimport MetaTable from '../../../../components/MetaTable/MetaTable';\nimport HelpLink from '../../../../components/HelpLink/HelpLink';\nimport Link from '../../../../components/Link/Link';\nimport {FormattedText} from '../../../../components/formatters';\nimport Filter from '../../../../components/Filter/Filter';\nimport Icon from '../../../../components/Icon/Icon';\nimport ErrorIcon from '../../../../components/ErrorIcon/ErrorIcon';\nimport SchemaDataType from '../../../../components/SchemaDataType/SchemaDataType';\nimport UIFactory from '../../../../UIFactory';\nimport {\n ExternalDescription,\n ExternalSchemaDescription,\n} from './ExternalDescription/ExternalDescription';\n\nimport {\n getComputedColumns,\n getFilteredSchema,\n getSchema,\n getSchemaMeta,\n} from '../../../../store/selectors/navigation/tabs/schema';\nimport {updateSchemaFilter} from '../../../../store/actions/navigation/tabs/schema';\nimport {getCluster} from '../../../../store/selectors/global';\nimport hammer from '../../../../common/hammer';\n\nimport './Schema.scss';\nimport {useRumMeasureStop} from '../../../../rum/RumUiContext';\nimport {RumMeasureTypes} from '../../../../rum/rum-measure-types';\nimport {useAppRumMeasureStart} from '../../../../rum/rum-app-measures';\nimport {getAttributesPath, getLoadState} from '../../../../store/selectors/navigation';\nimport {isFinalLoadingStatus, wrapApiPromiseByToaster} from '../../../../utils/utils';\nimport {docsUrl} from '../../../../config';\nimport {YTError} from '../../../../../@types/types';\nimport {RootState} from '../../../../store/reducers';\nimport {ytApiV3} from '../../../../rum/rum-wrap-api';\n\nconst block = cn('navigation-schema');\nconst elementsBlock = cn('elements-message');\n\nconst COLUMNS_TO_HIDE: Partial<Record<SchemaColumnNames, boolean>> = {\n required: true,\n type: true,\n};\n\nexport type SchemaColumnNames = keyof SchemaItem | 'description' | 'title';\n\nexport type SchemaProps = {\n cluster: string;\n column?: string;\n path: string;\n schema: Array<SchemaItem>;\n filteredSchema?: Array<SchemaItem>;\n meta: Array<SchemaMetaItem>;\n computedColumns: SchemaComputedColumns<SchemaColumnNames>;\n\n updateFilter: (filter: string) => void;\n};\n\ntype SchemaItem = {\n index: number;\n name: string;\n required: boolean;\n type: string;\n type_v3: unknown;\n};\n\ntype SchemaMetaItem = {\n value: 'strong' | boolean;\n key: 'schema_mode' | 'strict' | 'unique_keys' | string;\n};\n\ntype SchemaComputedColumns<ColumnName extends string = string> = {\n items: Partial<Record<ColumnName, ColumnInfo>>;\n set: Array<ColumnName>;\n};\n\ntype SchemaState = {\n externalSchema?: Map<string, ExternalSchemaDescription>;\n externalSchemaUrl?: string;\n externalSchemaError?: YTError;\n};\n\nclass Schema extends Component<SchemaProps> {\n state: SchemaState;\n\n constructor(props: SchemaProps) {\n super(props);\n this.state = {\n externalSchemaUrl: undefined,\n externalSchema: undefined,\n externalSchemaError: undefined,\n };\n }\n\n componentDidMount() {\n this.loadExternalSchemaData();\n }\n\n get templates() {\n return {\n __default__(\n item: SchemaItem,\n column: Exclude<keyof SchemaItem, 'type_v3' | 'name' | 'required'>,\n ) {\n return <FormattedText text={item[column]} />;\n },\n name(item: Record<string, string>, column: string) {\n const {sort_order} = item;\n return (\n <span>\n {Boolean(sort_order) && (\n <Icon\n className={block('sort-icon')}\n awesome={\n sort_order === 'descending'\n ? 'sort-amount-up'\n : 'sort-amount-down-alt'\n }\n />\n )}\n <FormattedText text={item[column]} />\n </span>\n );\n },\n required(item: SchemaItem) {\n const {required} = item;\n return (\n <span>\n {typeof required === 'boolean' ? String(required) : hammer.format.NO_VALUE}\n </span>\n );\n },\n type_v3(item: SchemaItem) {\n const {type_v3} = item;\n return <SchemaDataType type_v3={type_v3} />;\n },\n description: (item: SchemaItem) => {\n return this.renderExternalColumn(item, 'description');\n },\n title: (item: SchemaItem) => {\n return this.renderExternalColumn(item, 'title');\n },\n };\n }\n\n renderExternalColumn(item: SchemaItem, column: 'description' | 'title') {\n const {externalSchema} = this.state;\n const {type, name} = item;\n const data = externalSchema?.get(name);\n return data ? <ExternalDescription type={type} data={data} column={column} /> : null;\n }\n\n get tableSettings() {\n const {externalSchema, externalSchemaUrl, externalSchemaError} = this.state;\n const {items, set} = this.props.computedColumns;\n\n const preparedSet = set.filter((col) => !COLUMNS_TO_HIDE[col]);\n\n const preparedItems = omit_(items, 'type_v2');\n\n if (externalSchema) {\n (['title', 'description'] as const).forEach((column) => {\n const {columns} = UIFactory.externalSchemaDescriptionSetup;\n const caption = columns?.[column] ?? `External ${column}`;\n preparedItems[column] = {\n caption,\n sort: false,\n align: 'left',\n renderHeader: () => (\n <div className={block('description')}>\n <div className={block('table-item')}>{caption}</div>\n {externalSchemaUrl ? (\n <Link className={block('icon')} url={externalSchemaUrl}>\n <Icon awesome=\"external-link\" />\n </Link>\n ) : null}\n {externalSchemaError ? (\n <ErrorIcon className={block('icon')} error={externalSchemaError} />\n ) : null}\n </div>\n ),\n };\n preparedSet.push(column);\n });\n }\n\n return {\n templates: this.templates,\n columns: {\n items: preparedItems,\n sets: {\n default: {\n items: preparedSet,\n },\n },\n mode: 'default',\n },\n virtualType: 'simple',\n theme: 'light',\n striped: false,\n computeKey(item: SchemaItem) {\n return item.name;\n },\n };\n }\n\n async loadExternalSchemaData() {\n const {cluster, path} = this.props;\n const truePath = await wrapApiPromiseByToaster(\n ytApiV3.get({\n parameters: {\n path: `${path}/@path`,\n },\n }),\n {\n skipSuccessToast: true,\n toasterName: 'get_true_path',\n errorTitle: 'Failed to load true path',\n },\n );\n\n try {\n const {url, externalSchema} = await UIFactory.externalSchemaDescriptionSetup.load(\n cluster,\n truePath || path,\n );\n\n this.setState({\n externalSchemaUrl: url,\n externalSchema: externalSchema,\n });\n } catch (err) {\n this.setState({\n externalSchema: new Map(),\n externalSchemaError: err,\n });\n }\n }\n\n renderContent() {\n const {column, filteredSchema, updateFilter} = this.props;\n return (\n <Fragment>\n <Filter\n placeholder=\"Filter by name...\"\n className={block('filter')}\n onChange={updateFilter}\n value={column ?? ''}\n size=\"m\"\n />\n\n <ElementsTable {...this.tableSettings} items={filteredSchema} css={block()} />\n </Fragment>\n );\n }\n\n renderPlaceholder() {\n return (\n <div className={elementsBlock({theme: 'warning'})}>\n <p className={elementsBlock('paragraph')}>Schema is empty.</p>\n </div>\n );\n }\n\n render() {\n const {meta, schema} = this.props;\n\n return (\n <div className={block()}>\n {docsUrl(\n <div className={block('help')}>\n <HelpLink url={UIFactory.docsUrls['storage:static_schema']} />\n </div>,\n )}\n\n <MetaTable items={meta} />\n\n {schema?.length > 0 ? this.renderContent() : this.renderPlaceholder()}\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n const {column} = state.navigation.tabs.schema;\n\n const cluster = getCluster(state);\n const path = getAttributesPath(state);\n const schema = getSchema(state);\n const meta = getSchemaMeta(state);\n const filteredSchema = getFilteredSchema(state);\n const computedColumns = getComputedColumns(state);\n\n return {column, meta, schema, filteredSchema, computedColumns, cluster, path};\n};\n\nconst mapDispatchToProps = {\n updateFilter: updateSchemaFilter,\n};\n\nconst SchemaConnected = connect(mapStateToProps, mapDispatchToProps)(Schema);\n\nexport default function SchemaWithRum() {\n const loadState = useSelector(getLoadState);\n useAppRumMeasureStart({\n type: RumMeasureTypes.NAVIGATION_TAB_SCHEMA,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.NAVIGATION_TAB_SCHEMA,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n return <SchemaConnected />;\n}\n","import {SCHEMA_UPDATE_FILTER} from '../../../../constants/navigation/tabs/schema';\n\nexport function updateSchemaFilter(column) {\n return {\n type: SCHEMA_UPDATE_FILTER,\n data: {column},\n };\n}\n","import filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport mapValues_ from 'lodash/mapValues';\nimport map_ from 'lodash/map';\n\nimport ypath from '../../../common/thor/ypath';\nimport hammer from '../../../common/hammer';\nimport {tableItems} from '../../../utils/navigation/tabs/tables';\n\nfunction prepareFlatColumns(columns, flatColumns = {}, prefix) {\n const correctPrefix = prefix ? prefix + '_' : '';\n\n forEach_(columns, (column, columnName) => {\n if (column.group) {\n prepareFlatColumns(column.items, flatColumns, columnName);\n } else {\n const flatColumnName = correctPrefix + columnName;\n flatColumns[flatColumnName] = column;\n }\n });\n\n return flatColumns;\n}\n\nexport function prepareDataForColumns(collection) {\n const preparedColumns = prepareFlatColumns(tableItems);\n\n return map_(collection, (item) => {\n return mapValues_(preparedColumns, (column) => {\n return typeof column.get === 'function' ? column.get(item) : undefined;\n });\n });\n}\n\nexport function prepareAggregation(preparedCollection) {\n let preparedColumns = map_(prepareFlatColumns(tableItems), (column, columnName) => ({\n name: columnName,\n type: column.overall,\n }));\n preparedColumns = filter_(preparedColumns, 'type');\n\n const aggregation = hammer.aggregation.prepare(preparedCollection, preparedColumns)[0];\n aggregation['index'] = 'aggregation';\n\n return aggregation;\n}\n\nexport function getStorePreloadValues(tablet) {\n return {\n completed: Number(ypath.getValue(tablet, '/statistics/preload_completed_store_count')),\n failed: Number(ypath.getValue(tablet, '/statistics/preload_failed_store_count')),\n pending: Number(ypath.getValue(tablet, '/statistics/preload_pending_store_count')),\n };\n}\n","import ypath from '../../../common/thor/ypath';\nimport {getStorePreloadValues} from '../../../utils/navigation/tabs/tablets';\nimport {DESC_ASC_UNORDERED} from '../../sort-helpers';\n\nexport const tableItems = {\n name_tablet_id: {\n caption: 'Node / Tablet id',\n sort(item) {\n return item.name;\n },\n },\n name_cell_id: {\n caption: 'Cell id / Tablet id',\n sort(item) {\n return item.name;\n },\n },\n index: {\n sort: true,\n caption: 'Tablet index',\n align: 'left',\n get(tablet) {\n return Number(ypath.getValue(tablet, '/index'));\n },\n },\n tablet_id: {\n sort: true,\n align: 'left',\n get(tablet) {\n return ypath.getValue(tablet, '/tablet_id');\n },\n },\n cell_leader_address: {\n sort: true,\n align: 'left',\n caption: 'Node',\n get(item) {\n return ypath.getValue(item, '/cell_leader_address');\n },\n },\n state: {\n sort: true,\n align: 'center',\n get(tablet) {\n return ypath.getValue(tablet, '/state');\n },\n },\n cell_id: {\n sort: true,\n align: 'left',\n get(tablet) {\n return ypath.getValue(tablet, '/cell_id');\n },\n },\n error_count: {\n sort: true,\n align: 'center',\n get(tablet) {\n return ypath.getNumberDeprecated(tablet, '/error_count', NaN);\n },\n allowedOrderTypes: DESC_ASC_UNORDERED,\n overall: 'sum',\n },\n replication_error_count: {\n sort: true,\n align: 'center',\n get(tablet) {\n return ypath.getNumberDeprecated(tablet, '/replication_error_count', NaN);\n },\n allowedOrderTypes: DESC_ASC_UNORDERED,\n overall: 'sum',\n },\n pivot_key: {\n sort: false,\n align: 'left',\n caption: 'Pivot Key',\n get(tablet) {\n return ypath.getValue(tablet, '/pivot_key');\n },\n },\n // Structure\n chunk_count: {\n sort: true,\n align: 'right',\n overall: 'sum',\n get(tablet) {\n return Number(ypath.getValue(tablet, '/statistics/chunk_count'));\n },\n allowedOrderTypes: DESC_ASC_UNORDERED,\n },\n partition_count: {\n sort: true,\n align: 'right',\n overall: 'sum',\n get(tablet) {\n return Number(ypath.getValue(tablet, '/statistics/partition_count'));\n },\n allowedOrderTypes: DESC_ASC_UNORDERED,\n },\n store_count: {\n sort: true,\n align: 'right',\n overall: 'sum',\n get(tablet) {\n return Number(ypath.getValue(tablet, '/statistics/store_count'));\n },\n allowedOrderTypes: DESC_ASC_UNORDERED,\n },\n overlapping_store_count: {\n sort: true,\n align: 'right',\n overall: 'max',\n get(tablet) {\n return Number(ypath.getValue(tablet, '/statistics/overlapping_store_count'));\n },\n allowedOrderTypes: DESC_ASC_UNORDERED,\n },\n store_preload: {\n align: 'center',\n sort(tablet) {\n const storePreload = getStorePreloadValues(tablet);\n const completed = storePreload.completed;\n const failed = storePreload.failed;\n const pending = storePreload.pending;\n const total = completed + failed + pending;\n\n return [total > 0 ? completed / total : 0, total > 0 ? failed / total : 0, total];\n },\n overall(aggregation, tablet, name) {\n const aggregatedStorePreload = (aggregation[name] = aggregation[name] || {\n completed: 0,\n failed: 0,\n pending: 0,\n });\n const currentStorePreload = tablet[name];\n\n aggregatedStorePreload.completed += currentStorePreload.completed;\n aggregatedStorePreload.failed += currentStorePreload.failed;\n aggregatedStorePreload.pending += currentStorePreload.pending;\n },\n get(tablet) {\n return getStorePreloadValues(tablet);\n },\n allowedOrderTypes: DESC_ASC_UNORDERED,\n },\n // Data\n unmerged_row_count: {\n sort: true,\n align: 'center',\n overall: 'sum',\n get(tablet) {\n return Number(ypath.getValue(tablet, '/statistics/unmerged_row_count'));\n },\n allowedOrderTypes: DESC_ASC_UNORDERED,\n },\n uncompressed_data_size: {\n sort: true,\n align: 'center',\n overall: 'sum',\n get(tablet) {\n return Number(ypath.getValue(tablet, '/statistics/uncompressed_data_size'));\n },\n allowedOrderTypes: DESC_ASC_UNORDERED,\n },\n compressed_data_size: {\n sort: true,\n align: 'center',\n overall: 'sum',\n get(tablet) {\n return Number(ypath.getValue(tablet, '/statistics/compressed_data_size'));\n },\n allowedOrderTypes: DESC_ASC_UNORDERED,\n },\n disk_space: {\n sort: true,\n align: 'center',\n overall: 'sum',\n get(tablet) {\n return Number(ypath.getValue(tablet, '/statistics/disk_space'));\n },\n allowedOrderTypes: DESC_ASC_UNORDERED,\n },\n // Performance\n static_chunk: {\n group: true,\n items: {\n read: {\n sort: true,\n align: 'right',\n overall: 'sum',\n get(tablet) {\n return Number(\n ypath.getValue(tablet, '/performance_counters/static_chunk_row_read_rate'),\n );\n },\n allowedOrderTypes: DESC_ASC_UNORDERED,\n },\n lookup: {\n sort: true,\n align: 'right',\n overall: 'sum',\n get(tablet) {\n return Number(\n ypath.getValue(\n tablet,\n '/performance_counters/static_chunk_row_lookup_rate',\n ),\n );\n },\n allowedOrderTypes: DESC_ASC_UNORDERED,\n },\n },\n set: ['read', 'lookup'],\n },\n dynamic: {\n group: true,\n items: {\n read: {\n sort: true,\n align: 'right',\n overall: 'sum',\n get(tablet) {\n return Number(\n ypath.getValue(tablet, '/performance_counters/dynamic_row_read_rate'),\n );\n },\n allowedOrderTypes: DESC_ASC_UNORDERED,\n },\n lookup: {\n sort: true,\n align: 'right',\n overall: 'sum',\n get(tablet) {\n return Number(\n ypath.getValue(tablet, '/performance_counters/dynamic_row_lookup_rate'),\n );\n },\n allowedOrderTypes: DESC_ASC_UNORDERED,\n },\n write: {\n sort: true,\n align: 'right',\n overall: 'sum',\n get(tablet) {\n return Number(\n ypath.getValue(tablet, '/performance_counters/dynamic_row_write_rate'),\n );\n },\n allowedOrderTypes: DESC_ASC_UNORDERED,\n },\n delete: {\n sort: true,\n align: 'right',\n overall: 'sum',\n get(tablet) {\n return Number(\n ypath.getValue(tablet, '/performance_counters/dynamic_row_delete_rate'),\n );\n },\n allowedOrderTypes: DESC_ASC_UNORDERED,\n },\n },\n set: ['read', 'lookup', 'write', 'delete'],\n },\n unmerged_row_read_rate: {\n sort: true,\n align: 'right',\n overall: 'sum',\n get(tablet) {\n return Number(ypath.getValue(tablet, '/performance_counters/unmerged_row_read_rate'));\n },\n allowedOrderTypes: DESC_ASC_UNORDERED,\n },\n merged_row_read_rate: {\n sort: true,\n align: 'right',\n overall: 'sum',\n get(tablet) {\n return Number(ypath.getValue(tablet, '/performance_counters/merged_row_read_rate'));\n },\n allowedOrderTypes: DESC_ASC_UNORDERED,\n },\n actions: {\n align: 'right',\n caption: '',\n },\n};\n\nexport const histogramItems = {\n unmerged_row_count: {\n format: 'Number',\n },\n uncompressed_data_size: {\n dataName: 'bytes',\n format: 'Bytes',\n },\n compressed_data_size: {\n dataName: 'bytes',\n format: 'Bytes',\n },\n store_count: {\n format: 'Number',\n },\n partition_count: {\n format: 'Number',\n },\n chunk_count: {\n format: 'Number',\n },\n overlapping_store_count: {\n format: 'Number',\n },\n static_chunk_read: {\n dataName: 'rows/s',\n format: 'Number',\n get(tablet) {\n return tableItems['static_chunk'].items['read'].get(tablet);\n },\n },\n static_chunk_lookup: {\n dataName: 'rows/s',\n format: 'Number',\n get(tablet) {\n return tableItems['static_chunk'].items['lookup'].get(tablet);\n },\n },\n unmerged_row_read_rate: {\n dataName: 'rows/s',\n format: 'Number',\n },\n merged_row_read_rate: {\n dataName: 'rows/s',\n format: 'Number',\n },\n dynamic_row_read_rate: {\n dataName: 'rows/s',\n format: 'Number',\n get(tablet) {\n return tableItems['dynamic'].items['read'].get(tablet);\n },\n },\n dynamic_row_lookup_rate: {\n dataName: 'rows/s',\n format: 'Number',\n get(tablet) {\n return tableItems['dynamic'].items['lookup'].get(tablet);\n },\n },\n dynamic_row_write_rate: {\n dataName: 'rows/s',\n format: 'Number',\n get(tablet) {\n return tableItems['dynamic'].items['write'].get(tablet);\n },\n },\n dynamic_row_delete_rate: {\n dataName: 'rows/s',\n format: 'Number',\n get(tablet) {\n return tableItems['dynamic'].items['delete'].get(tablet);\n },\n },\n};\n","import mapValues_ from 'lodash/mapValues';\nimport map_ from 'lodash/map';\n\nimport hammer from '../../../../common/hammer';\nimport {createSelector} from 'reselect';\nimport {histogramItems, tableItems} from '../../../../utils/navigation/tabs/tables';\nimport {NAVIGATION_TABLETS_TABLE_ID} from '../../../../constants/navigation/tabs/tablets';\nimport {prepareAggregation, prepareDataForColumns} from '../../../../utils/navigation/tabs/tablets';\nimport {calculateLoadingStatus} from '../../../../utils/utils';\n\nexport const getTabletsMode = (state) => state.navigation.tabs.tablets.tabletsMode;\n\nconst getRawTablets = (state) => state.navigation.tabs.tablets.tablets;\n/** @returns { OldSortState } */\nexport const getTabletsSortState = (state) => state.tables[NAVIGATION_TABLETS_TABLE_ID];\nconst getTabletsFilter = (state) => state.navigation.tabs.tablets.tabletsFilter;\nexport const getActiveHistogram = (state) => state.navigation.tabs.tablets.histogramType;\n\nconst getSortedTablets = createSelector(\n [getRawTablets, getTabletsSortState],\n (rawTablets, sortState) => hammer.utils.sort(rawTablets, sortState, tableItems),\n);\n\nconst getFilteredTablets = createSelector(\n [getSortedTablets, getTabletsFilter],\n (sortedTablets, tabletsFilter) =>\n hammer.filter.filter({\n data: sortedTablets,\n input: tabletsFilter,\n factors: [\n function (item) {\n return tableItems['tablet_id'].get(item);\n },\n function (item) {\n return tableItems['cell_id'].get(item);\n },\n function (item) {\n return tableItems['state'].get(item);\n },\n function (item) {\n return tableItems['cell_leader_address'].get(item);\n },\n ],\n }),\n);\n\nexport const getPreparedDataForColumns = createSelector([getFilteredTablets], (items) => {\n /** @type {Array<TabletInfo>} */\n const res = prepareDataForColumns(items);\n return res;\n});\n\nexport const getTablets = createSelector(getPreparedDataForColumns, (filteredTablets) => {\n const aggregation = prepareAggregation(filteredTablets);\n return [aggregation, ...filteredTablets];\n});\n\nconst getHistograms = createSelector(getRawTablets, (tablets) => {\n return mapValues_(histogramItems, (histogramItem, key) => {\n const get = histogramItem.get || tableItems[key].get;\n\n return {\n ...histogramItem,\n data: map_(tablets, get),\n dataFormat: histogramItem.format,\n dataName: histogramItem.dataName || hammer.format['ReadableField'](key, {caps: 'none'}),\n };\n });\n});\n\nexport const getHistogram = createSelector(\n [getHistograms, getActiveHistogram],\n (histograms, activeHistogram) => histograms[activeHistogram],\n);\n\nexport const getNavigationTabletsLoadingStatus = createSelector(\n [\n (state) => state.navigation.tabs.tablets.loading,\n (state) => state.navigation.tabs.tablets.loaded,\n (state) => state.navigation.tabs.tablets.error,\n ],\n (loading, loaded, error) => {\n return calculateLoadingStatus(loading, loaded, error);\n },\n);\n","import forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\nimport max_ from 'lodash/max';\nimport reduce_ from 'lodash/reduce';\nimport toArray_ from 'lodash/toArray';\n\nimport {createSelector} from 'reselect';\nimport {getPreparedDataForColumns, getTabletsMode, getTabletsSortState} from './tablets';\nimport {\n FieldDescr,\n TreeItem,\n TreeNode,\n flattenTree,\n sortTree,\n} from '../../../../common/hammer/tree-list';\nimport {OldSortState, TypedKeys} from '../../../../types';\nimport {RootState} from '../../../reducers';\n\nexport const getTabletsExpandedHosts = (state: RootState): Array<string> =>\n state.navigation.tabs.tablets.expandedHosts;\n\ninterface TabletInfo {\n name: string;\n level?: number;\n tablet_id: string;\n cell_id: string;\n cell_leader_address: string;\n unmerged_row_count: number;\n uncompressed_data_size: number;\n compressed_data_size: number;\n disk_space: number;\n childrenCount?: number;\n}\n\nconst SUM_FIELDS: Array<TypedKeys<TabletInfo, number>> = [\n 'unmerged_row_count',\n 'uncompressed_data_size',\n 'compressed_data_size',\n 'disk_space',\n];\n\nfunction addHostItem(\n dst: TreeNode<TabletInfo, TabletInfo>,\n item: TabletInfo,\n maxDst: Pick<TabletInfo, TypedKeys<TabletInfo, number>>,\n) {\n dst.children.push({\n name: item.tablet_id,\n parent: dst.name,\n attributes: {\n ...item,\n name: item.tablet_id,\n level: 1,\n },\n leaves: [],\n children: [],\n });\n\n forEach_(SUM_FIELDS, (k) => {\n dst.attributes[k] += item[k];\n\n maxDst[k] = max_([maxDst[k], item[k]])!;\n });\n}\n\nexport const getTabletsMax = createSelector([getPreparedDataForColumns], (items) => {\n const max = {\n unmerged_row_count: 0,\n uncompressed_data_size: 0,\n compressed_data_size: 0,\n disk_space: 0,\n };\n forEach_(items, (item) => {\n forEach_(SUM_FIELDS, (k) => {\n max[k] = max_([max[k], item[k]])!;\n });\n });\n return max;\n});\n\nconst getTabletsByNameRoot = createSelector(\n [getPreparedDataForColumns, getTabletsSortState, getTabletsMode],\n (sortedAndFilteredItems, sortState, mode) => {\n const groupByKey = mode === 'by_host' ? 'cell_leader_address' : 'cell_id';\n\n const maxDst = {\n unmerged_row_count: 0,\n uncompressed_data_size: 0,\n compressed_data_size: 0,\n disk_space: 0,\n };\n const maxHost = {...maxDst};\n const mapByName: Record<string, TreeNode<TabletInfo, TabletInfo>> = {};\n forEach_(sortedAndFilteredItems, (item) => {\n const {[groupByKey]: groupBy, cell_leader_address, cell_id} = item;\n const dst = (mapByName[groupBy] = mapByName[groupBy] || {\n name: groupBy,\n children: [],\n leaves: [],\n attributes: {\n isTopLevel: true,\n name: groupBy,\n cell_leader_address,\n cell_id,\n unmerged_row_count: 0,\n uncompressed_data_size: 0,\n compressed_data_size: 0,\n disk_space: 0,\n level: 0,\n },\n });\n addHostItem(dst, item, maxDst);\n });\n\n const root = {\n name: '',\n children: toArray_(mapByName),\n leaves: [],\n attributes: {} as any,\n };\n\n forEach_(root.children, (item) => {\n item.attributes.childrenCount = item.children.length;\n forEach_(SUM_FIELDS, (k) => {\n maxHost[k] = max_([maxHost[k], item.attributes[k]])!;\n });\n });\n\n sortTreeInPlace(root, sortState);\n return {\n maxByLevel: [maxHost, maxDst] as const,\n root,\n };\n },\n);\n\nexport const getTabletsByName = createSelector(\n [getTabletsByNameRoot, getTabletsExpandedHosts],\n ({root, maxByLevel}, expandedHosts) => {\n const expanded = new Set(expandedHosts);\n const children = map_(root.children, (item) => {\n const {name} = item;\n const isCollapsed = !expanded.has(name);\n return {\n ...item,\n attributes: {\n ...item.attributes,\n isCollapsed,\n },\n children: isCollapsed ? [] : item.children,\n };\n });\n\n return {\n maxByLevel,\n items: map_(flattenTree({...root, children}), 'attributes'),\n };\n },\n);\n\nfunction sortTreeInPlace(root: TreeNode<TabletInfo, TabletInfo>, sortState?: OldSortState) {\n if (!sortState?.field) {\n return;\n }\n\n sortTree(root, sortState, {\n name_tablet_id: {\n get(item) {\n return item.attributes.name;\n },\n },\n name_cell_id: {\n get(item) {\n return item.attributes.name;\n },\n },\n ...reduce_(\n Object.keys(root.children[0]?.attributes! || {}) as Array<keyof TabletInfo>,\n (acc, k) => {\n acc[k] = {\n get(item: TreeItem<TabletInfo, TabletInfo>) {\n return item.attributes[k];\n },\n };\n return acc;\n },\n {} as Record<string, FieldDescr<typeof root>>,\n ),\n });\n}\n","import yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport CancelHelper from '../../../../utils/cancel-helper';\nimport {prepareRequest} from '../../../../utils/navigation';\nimport {TYPED_OUTPUT_FORMAT} from '../../../../constants/index';\nimport {getPath, getTransaction} from '../../../../store/selectors/navigation';\nimport {\n CHANGE_ACTIVE_HISTOGRAM,\n CHANGE_TABLETS_MODE,\n GET_TABLETS,\n TABLETS_STATE_PARTIAL,\n TOGGLE_HISTOGRAM,\n} from '../../../../constants/navigation/tabs/tablets';\nimport {YTApiId, ytApiV3Id} from '../../../../rum/rum-wrap-api';\nimport {getTabletsExpandedHosts} from '../../../../store/selectors/navigation/tabs/tablets-ts';\n\nconst requests = new CancelHelper();\n\nexport function loadTablets() {\n return (dispatch, getState) => {\n const state = getState();\n const path = getPath(state);\n const transaction = getTransaction(state);\n\n dispatch({type: GET_TABLETS.REQUEST});\n requests.removeAllRequests();\n\n return ytApiV3Id\n .get(YTApiId.navigationTablets, {\n parameters: prepareRequest('/@tablets', {\n path,\n transaction,\n output_format: TYPED_OUTPUT_FORMAT,\n }),\n cancellation: requests.saveCancelToken,\n })\n .then((tablets) => {\n dispatch({\n type: GET_TABLETS.SUCCESS,\n data: {tablets},\n });\n })\n .catch((error) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({type: GET_TABLETS.CANCELLED});\n } else {\n dispatch({\n type: GET_TABLETS.FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nexport function changeTabletsFilter(tabletsFilter) {\n return {\n type: TABLETS_STATE_PARTIAL,\n data: {tabletsFilter},\n };\n}\n\nexport function changeTabletsMode(evt) {\n return {\n type: CHANGE_TABLETS_MODE,\n data: {tabletsMode: evt.target.value},\n };\n}\n\nexport function toggleExpandedHost(name) {\n return (dispatch, getState) => {\n const expandedHosts = getTabletsExpandedHosts(getState()).slice();\n const index = expandedHosts.indexOf(name);\n if (index >= 0) {\n expandedHosts.splice(index, 1);\n } else {\n expandedHosts.push(name);\n }\n dispatch({type: TABLETS_STATE_PARTIAL, data: {expandedHosts}});\n };\n}\n\nexport function changeActiveHistogram(histogramType) {\n return {\n type: CHANGE_ACTIVE_HISTOGRAM,\n data: {histogramType},\n };\n}\n\nexport function toggleHistogram() {\n return {\n type: TOGGLE_HISTOGRAM,\n };\n}\n\nexport function abortAndReset() {\n return (dispatch) => {\n requests.removeAllRequests();\n dispatch({type: GET_TABLETS.CANCELLED});\n };\n}\n","import React, {Component, Fragment} from 'react';\nimport {connect} from 'react-redux';\nimport {useSelector} from '../../../../store/redux-hooks';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport ClickableAttributesButton from '../../../../components/AttributesButton/ClickableAttributesButton';\nimport CollapsibleSection from '../../../../components/CollapsibleSection/CollapsibleSection';\nimport LoadDataHandler from '../../../../components/LoadDataHandler/LoadDataHandler';\nimport ClipboardButton from '../../../../components/ClipboardButton/ClipboardButton';\nimport ElementsTable from '../../../../components/ElementsTable/ElementsTable';\nimport ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\nimport RadioButton from '../../../../components/RadioButton/RadioButton';\nimport {Loader, Progress} from '@gravity-ui/uikit';\nimport Histogram from '../../../../components/Histogram/Histogram';\nimport Filter from '../../../../components/Filter/Filter';\nimport Label from '../../../../components/Label/Label';\nimport Link from '../../../../components/Link/Link';\nimport Button from '../../../../components/Button/Button';\nimport Icon from '../../../../components/Icon/Icon';\nimport WithStickyToolbar from '../../../../components/WithStickyToolbar/WithStickyToolbar';\n\nimport {getPath, getType} from '../../../../store/selectors/navigation';\n\nimport {\n getActiveHistogram,\n getHistogram,\n getNavigationTabletsLoadingStatus,\n getTablets,\n} from '../../../../store/selectors/navigation/tabs/tablets';\n\nimport {NAVIGATION_TABLETS_TABLE_ID} from '../../../../constants/navigation/tabs/tablets';\nimport {Page} from '../../../../constants/index';\n\nimport {\n abortAndReset,\n changeActiveHistogram,\n changeTabletsFilter,\n changeTabletsMode,\n loadTablets,\n toggleExpandedHost,\n toggleHistogram,\n} from '../../../../store/actions/navigation/tabs/tablets';\n\nimport {histogramItems, tableItems} from '../../../../utils/navigation/tabs/tables';\nimport {asNumber} from '../../../../components/templates/utils';\nimport hammer from '../../../../common/hammer';\nimport ypath from '../../../../common/thor/ypath';\nimport unipika from '../../../../common/thor/unipika';\n\nimport {genTabletCellBundlesCellUrl} from '../../../../utils/tablet_cell_bundles';\nimport {useRumMeasureStop} from '../../../../rum/RumUiContext';\nimport {RumMeasureTypes} from '../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../utils/utils';\nimport {useAppRumMeasureStart} from '../../../../rum/rum-app-measures';\nimport {Host} from '../../../../containers/Host/Host';\nimport {\n getTabletsByName,\n getTabletsMax,\n} from '../../../../store/selectors/navigation/tabs/tablets-ts';\nimport {getProgressBarColorByIndex} from '../../../../constants/colors';\n\nimport './Tablets.scss';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../../constants/global';\n\nconst block = cn('navigation-tablets');\n\nclass Tablets extends Component {\n static typedValueProps = PropTypes.shape({\n $type: PropTypes.string.isRequired,\n $value: PropTypes.string.isRequired,\n });\n\n static tabletProps = PropTypes.shape({\n index: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n cell_id: PropTypes.string,\n error_count: PropTypes.number,\n last_commit_timestamp: PropTypes.number,\n replication_error_count: PropTypes.number,\n state: PropTypes.string,\n tablet_id: PropTypes.string,\n\n performance_counters: PropTypes.object,\n statistics: PropTypes.object,\n\n pivot_key: PropTypes.arrayOf(Tablets.typedValueProps),\n });\n\n static propTypes = {\n // from connect\n loading: PropTypes.bool.isRequired,\n loaded: PropTypes.bool.isRequired,\n error: PropTypes.bool.isRequired,\n errorData: PropTypes.object.isRequired,\n\n path: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n tabletsMode: PropTypes.string.isRequired,\n tabletsFilter: PropTypes.string.isRequired,\n activeHistogram: PropTypes.string.isRequired,\n histogramCollapsed: PropTypes.bool.isRequired,\n tablets: PropTypes.arrayOf(Tablets.tabletProps).isRequired,\n histogram: PropTypes.shape({\n data: PropTypes.array.isRequired,\n format: PropTypes.string.isRequired,\n dataName: PropTypes.string.isRequired,\n dataFormat: PropTypes.string.isRequired,\n }).isRequired,\n\n loadTablets: PropTypes.func.isRequired,\n abortAndReset: PropTypes.func.isRequired,\n toggleHistogram: PropTypes.func.isRequired,\n changeTabletsMode: PropTypes.func.isRequired,\n changeTabletsFilter: PropTypes.func.isRequired,\n changeActiveHistogram: PropTypes.func.isRequired,\n };\n\n static prepareStorePreloadProgress(storePreload) {\n const completed = storePreload?.completed || 0;\n const failed = storePreload?.failed || 0;\n const pending = storePreload?.pending || 0;\n const total = completed + failed + pending;\n\n return {\n text: hammer.format['Number'](completed) + ' / ' + hammer.format['Number'](total),\n value: total > 0 ? ((failed + completed) / total) * 100 : 0,\n stack: [\n {\n value: total > 0 ? (completed / total) * 100 : 0,\n theme: 'info',\n },\n {\n value: total > 0 ? (failed / total) * 100 : 0,\n theme: 'danger',\n },\n ],\n };\n }\n\n static rowClassName(item) {\n const {level} = item;\n return block('row', {top: level === 0});\n }\n\n static renderName(item) {\n const {name, level, isCollapsed, cell_leader_address} = item;\n const content =\n level === 0 ? (\n <React.Fragment>\n <Button\n view={'flat-secondary'}\n onClick={() => this.props.toggleExpandedHost(name)}\n >\n <Icon awesome={isCollapsed ? 'angle-down' : 'angle-up'} />\n </Button>{' '}\n {name === cell_leader_address\n ? Tablets.renderHost(item)\n : Tablets.renderCellId(item)}\n </React.Fragment>\n ) : (\n Tablets.renderTabletId(item)\n );\n\n return <div className={block('name', {level})}>{content}</div>;\n }\n\n static isTopLevel(item) {\n const {level, name, cell_leader_address, cell_id} = item;\n return level === 0 && (name === cell_leader_address || name === cell_id);\n }\n\n static renderIndex(item, columnName) {\n if (Tablets.isTopLevel(item) && item.childrenCount) {\n return `(total ${item.childrenCount})`;\n }\n if (Tablets)\n if (item.index === 'aggregation') {\n return hammer.format['ReadableField'](item.index);\n } else {\n return hammer.format['Number'](item[columnName]);\n }\n }\n\n static renderTabletId(item) {\n const id = item.tablet_id;\n const url = `${Page.TABLET}/${id}`;\n\n return Tablets.renderIdWithLink(id, url);\n }\n\n static renderCellId(item) {\n const id = item.cell_id;\n const url = genTabletCellBundlesCellUrl(id);\n\n return Tablets.renderIdWithLink(id, url);\n }\n\n static renderHost(item) {\n const host = item.cell_leader_address;\n return (\n <Host\n asTabletNode\n address={host}\n className={block('host')}\n copyBtnClassName={block('copy-btn')}\n />\n );\n }\n\n static renderIdWithLink(id, url) {\n return id ? (\n <div className={block('id-link')}>\n <Link url={url}>{id}</Link>\n <ClipboardButton className={block('copy-btn')} view={'flat-secondary'} text={id} />\n </div>\n ) : (\n hammer.format.NO_VALUE\n );\n }\n\n static renderState(item, columnName) {\n const state = item[columnName];\n const theme = {\n none: 'default',\n unmounted: 'default',\n mounted: 'info',\n frozen: 'info',\n freezing: 'warning',\n unfreezing: 'warning',\n mounting: 'warning',\n unmounting: 'warning',\n mixed: 'danger',\n }[state];\n\n return typeof state !== 'undefined' ? (\n <Label theme={theme} text={state} />\n ) : (\n hammer.format.NO_VALUE\n );\n }\n\n static renderPivotKey(item, columnName) {\n const pivotKey = item[columnName];\n\n const text = unipika.prettyprint(pivotKey, {\n break: false,\n indent: 0,\n asHTML: false,\n });\n const title = text.split(',').join(',\\n');\n\n return typeof pivotKey !== 'undefined' ? (\n <div className=\"elements-column_with-hover-button unipika navigation-tablets__pivot-key\">\n [\n <span title={title} className=\"uint64 elements-ellipsis\">\n {text.slice(1, -1)}\n </span>\n ]\n <ClipboardButton\n text={text}\n view=\"flat-secondary\"\n size=\"s\"\n title=\"Copy Pivot Key\"\n />\n </div>\n ) : (\n hammer.format.NO_VALUE\n );\n }\n\n static renderActions(item) {\n if (item.index === 'aggregation' || Tablets.isTopLevel(item)) {\n return null;\n } else {\n const tablet = ypath.getValue(item, '/tablet_id');\n\n return (\n <ClickableAttributesButton\n title={item.tablet_id}\n path={`//sys/tablets/${tablet}`}\n withTooltip\n />\n );\n }\n }\n\n static renderStorePreload(item, columnName) {\n const storePreload = item[columnName];\n const storePreloadProgress = Tablets.prepareStorePreloadProgress(storePreload);\n\n return <Progress {...storePreloadProgress} />;\n }\n\n componentDidMount() {\n this.props.loadTablets();\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.path !== this.props.path) {\n this.props.loadTablets();\n }\n }\n\n componentWillUnmount() {\n this.props.abortAndReset();\n }\n\n get defaultItems() {\n const {type} = this.props;\n\n const newDefaultItemsForReplicatedTable = [\n 'index',\n 'tablet_id',\n 'cell_leader_address',\n 'state',\n 'cell_id',\n 'error_count',\n 'replication_error_count',\n 'pivot_key',\n 'actions',\n ];\n const newDefaultItemsForTable = [\n 'index',\n 'tablet_id',\n 'cell_leader_address',\n 'state',\n 'cell_id',\n 'error_count',\n 'pivot_key',\n 'actions',\n ];\n\n const newDefaultItems =\n type === 'replicated_table'\n ? newDefaultItemsForReplicatedTable\n : newDefaultItemsForTable;\n\n return newDefaultItems;\n }\n\n get tableSets() {\n return {\n default: {\n items: this.defaultItems,\n },\n data: {\n items: [\n 'index',\n 'tablet_id',\n 'cell_leader_address',\n 'unmerged_row_count',\n 'uncompressed_data_size',\n 'compressed_data_size',\n 'disk_space',\n 'actions',\n ],\n },\n structure: {\n items: [\n 'index',\n 'tablet_id',\n 'cell_leader_address',\n 'chunk_count',\n 'partition_count',\n 'store_count',\n 'overlapping_store_count',\n 'store_preload',\n 'actions',\n ],\n },\n performance: {\n items: [\n 'index',\n 'cell_leader_address',\n 'dynamic',\n 'static_chunk',\n 'unmerged_row_read_rate',\n 'merged_row_read_rate',\n 'actions',\n ],\n },\n by_host: {\n items: [\n 'name_tablet_id',\n 'index',\n 'unmerged_row_count',\n 'uncompressed_data_size',\n 'compressed_data_size',\n 'disk_space',\n 'actions',\n ],\n },\n by_cell: {\n items: [\n 'name_cell_id',\n 'index',\n 'unmerged_row_count',\n 'uncompressed_data_size',\n 'compressed_data_size',\n 'disk_space',\n 'actions',\n ],\n },\n };\n }\n\n get tableSettings() {\n const {tabletsMode} = this.props;\n\n return {\n css: block(),\n theme: 'light',\n cssHover: true,\n striped: false,\n tableId: NAVIGATION_TABLETS_TABLE_ID,\n columns: {\n items: tableItems,\n sets: this.tableSets,\n mode: tabletsMode,\n },\n templates: {\n name_tablet_id: Tablets.renderName.bind(this),\n name_cell_id: Tablets.renderName,\n index: Tablets.renderIndex,\n tablet_id: Tablets.renderTabletId,\n cell_id: Tablets.renderCellId,\n cell_leader_address: Tablets.renderHost,\n state: Tablets.renderState,\n pivot_key: Tablets.renderPivotKey,\n actions: Tablets.renderActions,\n store_preload: Tablets.renderStorePreload,\n error_count: asNumber,\n replication_error_count: asNumber,\n chunk_count: asNumber,\n partition_count: asNumber,\n store_count: asNumber,\n overlapping_store_count: asNumber,\n unmerged_row_count: this.renderNumberProgress,\n uncompressed_data_size: this.renderBytesProgress,\n compressed_data_size: this.renderBytesProgress,\n disk_space: this.renderBytesProgress,\n static_chunk_read: asNumber,\n static_chunk_lookup: asNumber,\n dynamic_read: asNumber,\n dynamic_lookup: asNumber,\n dynamic_write: asNumber,\n dynamic_delete: asNumber,\n unmerged_row_read_rate: asNumber,\n merged_row_read_rate: asNumber,\n },\n computeKey(item) {\n return item.name || item.tablet_id;\n },\n itemMods(tablet) {\n return (\n tablet.index === 'aggregation' && {\n aggregation: 'yes',\n }\n );\n },\n };\n }\n\n renderProgress = (item, column, useBytes) => {\n const {maxByLevel = []} = this.props;\n const {level = 0, [column]: value, index} = item;\n if (value === undefined) {\n return hammer.format.NO_VALUE;\n }\n const {[column]: max} = maxByLevel[level] || {};\n if (!max || index === 'aggregation') {\n return asNumber(item, column);\n }\n\n const progress = (value / max) * 100;\n const text = hammer.format[useBytes ? 'Bytes' : 'Number'](value);\n\n if (level === 1) {\n return (\n <Progress\n stack={[\n {\n value: progress,\n color: getProgressBarColorByIndex(3),\n },\n ]}\n text={text}\n />\n );\n }\n\n return <Progress value={progress} text={text} theme={'info'} />;\n };\n\n renderBytesProgress = (item, column) => {\n return this.renderProgress(item, column, true);\n };\n\n renderNumberProgress = (item, column) => {\n return this.renderProgress(item, column, false);\n };\n\n renderOverview() {\n const {tabletsFilter, changeTabletsFilter, tabletsMode, changeTabletsMode} = this.props;\n\n return (\n <div className={block('overview')}>\n <Filter\n size=\"m\"\n value={tabletsFilter}\n onChange={changeTabletsFilter}\n placeholder=\"Filter by Tablet Id/Cell Id/State/Host...\"\n className={block('tablets-filter')}\n />\n\n <RadioButton\n size=\"m\"\n value={tabletsMode}\n onChange={changeTabletsMode}\n name=\"navigation-tablets-mode\"\n items={[\n {\n value: 'default',\n text: 'Default',\n },\n {\n value: 'data',\n text: 'Data',\n },\n {\n value: 'by_host',\n text: 'Data by nodes',\n },\n {\n value: 'by_cell',\n text: 'Data by cells',\n },\n {\n value: 'structure',\n text: 'Structure',\n },\n {\n value: 'performance',\n text: 'Performance',\n },\n ]}\n />\n </div>\n );\n }\n\n renderContent() {\n const {\n tablets,\n histogramCollapsed,\n toggleHistogram,\n histogram,\n activeHistogram,\n changeActiveHistogram,\n collapsibleSize,\n } = this.props;\n\n return (\n <Fragment>\n <CollapsibleSection\n name=\"Histogram\"\n collapsed={histogramCollapsed}\n onToggle={toggleHistogram}\n size={collapsibleSize}\n >\n <Histogram\n activeHistogram={activeHistogram}\n handleHistogramChange={changeActiveHistogram}\n histogramItems={histogramItems}\n histogram={histogram}\n />\n </CollapsibleSection>\n\n <CollapsibleSection name=\"Tablets\" size={collapsibleSize}>\n <WithStickyToolbar\n toolbar={this.renderOverview()}\n content={\n <ElementsTable\n {...this.tableSettings}\n items={tablets}\n rowClassName={Tablets.rowClassName}\n onItemClick={this.onRowClick}\n />\n }\n />\n </CollapsibleSection>\n </Fragment>\n );\n }\n\n onRowClick = (item) => {\n const {isTopLevel, name} = item;\n if (isTopLevel) {\n this.props.toggleExpandedHost(name);\n }\n };\n\n render() {\n const {loading, loaded} = this.props;\n const initialLoading = loading && !loaded;\n\n return (\n <LoadDataHandler {...this.props}>\n <ErrorBoundary>\n <div className={block({loading: initialLoading})}>\n {initialLoading ? <Loader /> : this.renderContent()}\n </div>\n </ErrorBoundary>\n </LoadDataHandler>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const {loading, loaded, error, errorData, tabletsMode, tabletsFilter, histogramCollapsed} =\n state.navigation.tabs.tablets;\n const path = getPath(state);\n let tablets;\n let maxByLevel = [];\n if (tabletsMode === 'by_host' || tabletsMode === 'by_cell') {\n const data = getTabletsByName(state);\n tablets = data.items;\n maxByLevel = data.maxByLevel;\n } else {\n tablets = getTablets(state);\n maxByLevel = [getTabletsMax(state)];\n }\n\n const histogram = getHistogram(state);\n const activeHistogram = getActiveHistogram(state);\n const type = getType(state);\n\n return {\n loading,\n loaded,\n error,\n errorData,\n path,\n tablets,\n maxByLevel,\n tabletsMode,\n tabletsFilter,\n histogramCollapsed,\n activeHistogram,\n histogram,\n type,\n collapsibleSize: UI_COLLAPSIBLE_SIZE,\n };\n};\n\nconst mapDispatchToProps = {\n loadTablets,\n abortAndReset,\n toggleHistogram,\n changeTabletsMode,\n changeTabletsFilter,\n changeActiveHistogram,\n toggleExpandedHost,\n};\n\nconst TabletsConnected = connect(mapStateToProps, mapDispatchToProps)(Tablets);\n\nexport default function TabletsWithRum() {\n const loadState = useSelector(getNavigationTabletsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.NAVIGATION_TAB_TABLETS,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.NAVIGATION_TAB_TABLETS,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <TabletsConnected />;\n}\n","import {RootState} from '../../../reducers';\n\nexport const getAttributesTab = (state: RootState) => state.navigation.tabs.attributes.attributes;\n\nexport const getAttributesLoadingInfo = (state: RootState) => ({\n loading: state.navigation.tabs.attributes.loading,\n loaded: state.navigation.tabs.attributes.loaded,\n error: state.navigation.tabs.attributes.error,\n});\n","import {UnknownAction} from 'redux';\nimport {ThunkAction} from 'redux-thunk';\n\nimport {RootState} from '../../../../../store/reducers';\nimport {prepareRequest} from '../../../../../utils/navigation';\nimport CancelHelper, {isCancelled} from '../../../../../utils/cancel-helper';\nimport {attributesActions} from '../../../../reducers/navigation/tabs/attributes';\nimport {getPath, getTransaction} from '../../../../../store/selectors/navigation';\nimport {YTApiId, ytApiV3Id} from '../../../../../rum/rum-wrap-api';\nimport {TYPED_OUTPUT_FORMAT} from '../../../../../constants';\n\ntype AsyncAction<R = void> = ThunkAction<R, RootState, unknown, UnknownAction>;\n\nconst cancelHelper = new CancelHelper();\n\nexport function requestAttributes(): AsyncAction<Promise<void>> {\n return async (dispatch, getState) => {\n dispatch(attributesActions.onRequest());\n const state = getState();\n const path = getPath(state);\n const transaction = getTransaction(state);\n\n const requestParams = {\n path,\n transaction,\n };\n\n try {\n const response = await ytApiV3Id.executeBatch(YTApiId.nodeAttributes, {\n parameters: {\n requests: [\n {\n command: 'get',\n parameters: prepareRequest('/@', {...requestParams}),\n },\n ],\n output_format: TYPED_OUTPUT_FORMAT,\n },\n cancellation: cancelHelper.removeAllAndSave,\n });\n\n const {output, error} = response[0];\n if (error) {\n throw error;\n }\n\n dispatch(attributesActions.onSuccess({attributes: output}));\n } catch (error: any) {\n if (!isCancelled(error)) {\n dispatch(attributesActions.onFailure({error}));\n }\n }\n };\n}\n","import React, {Fragment, useEffect} from 'react';\nimport b from 'bem-cn-lite';\nimport unipika from '../../../../common/thor/unipika';\nimport {useDispatch, useSelector} from '../../../../store/redux-hooks';\nimport {Loader} from '@gravity-ui/uikit';\n\nimport Yson from '../../../../components/Yson/Yson';\nimport {YsonDownloadButton} from '../../../../components/DownloadAttributesButton';\nimport {YTErrorBlock} from '../../../../components/Block/Block';\n\nimport {\n getAttributesPath,\n getAttributesWithTypes,\n getLoadState,\n} from '../../../../store/selectors/navigation';\nimport {\n getAttributesLoadingInfo,\n getAttributesTab,\n} from '../../../../store/selectors/navigation/tabs/attributes';\nimport {requestAttributes} from '../../../../store/actions/navigation/tabs/attributes/attributes';\n\nimport {RumMeasureTypes} from '../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../utils/utils';\nimport {useRumMeasureStop} from '../../../../rum/RumUiContext';\nimport {useAppRumMeasureStart} from '../../../../rum/rum-app-measures';\n\nimport {pathToFileName} from '../../helpers/pathToFileName';\n\nimport './Attributes.scss';\n\nconst block = b('yt-attributes');\n\nfunction Attributes() {\n const dispatch = useDispatch();\n\n const attributes = useSelector(getAttributesTab);\n const attributesPath = useSelector(getAttributesPath);\n const {loading, loaded, error} = useSelector(getAttributesLoadingInfo);\n\n const settings = unipika.prepareSettings();\n\n useEffect(() => {\n dispatch(requestAttributes());\n }, [attributesPath]);\n\n const initialLoading = !loaded && loading;\n\n if (initialLoading) {\n return <Loader className={block({loading: initialLoading})} />;\n }\n\n return (\n <Fragment>\n {error != undefined && <YTErrorBlock error={error} />}\n <Yson\n settings={settings}\n value={attributes}\n folding\n extraTools={\n <YsonDownloadButton\n value={attributes}\n settings={settings}\n name={`attributes_${pathToFileName(attributesPath)}`}\n />\n }\n />\n </Fragment>\n );\n}\n\nexport default function AttributesWithRum() {\n const loadState = useSelector(getLoadState);\n const attributes = useSelector(getAttributesWithTypes);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.NAVIGATION_TAB_ATTRIBUTES,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.NAVIGATION_TAB_ATTRIBUTES,\n stopDeps: [loadState, attributes],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <Attributes />;\n}\n","import isEmpty_ from 'lodash/isEmpty';\nimport isEqual_ from 'lodash/isEqual';\n\nimport {RootState} from '../../../../store/reducers';\nimport {createSelector} from 'reselect';\nimport {getCluster} from '../../../../store/selectors/global';\nimport {getPath} from '../../../../store/selectors/navigation/index';\nimport {convertTimeToRequestParams} from '../../../../components/common/Timeline';\n\nconst getAccessLogFiltersState = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters;\n\nexport const getAccessLogFilterRecursive = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters.recursive;\n\nexport const getAccessLogFilterPagination = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters.pagination;\n\nexport const getAccessLogFilterPathRegex = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters.path_regex;\n\nexport const getAccessLogFilterUserRegex = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters.user_regex;\n\nexport const getAccessLogFilterMethod = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters.method_group;\n\nexport const getAccessLogFilterUserType = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters.user_type;\n\nexport const getAccessLogFilterScope = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters.scope;\n\nexport const getAccessLogFilterTime = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters.time;\n\nexport const getAccessLogFilterFieldSelector = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters.field_selector;\n\nexport const getAccessLogFilterMetadata = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters.metadata;\n\nexport const getAccessLogFilterDistinctBy = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters.distinct_by;\n\nexport const getAccessLogLoading = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLog.loading;\n\nexport const getAccessLogReady = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLog.ready;\n\nexport const getAccessLogLoaded = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLog.loaded;\n\nexport const getAccessLogError = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLog.error;\n\nexport const getAccessLogItems = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLog.accesses;\n\nexport const getAccessLogTotalRowCount = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLog.total_row_count;\n\nexport const getAccessLogAvailableTimeRange = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLog.availableTimeRange;\n\nexport const getAccessLogPagesCount = createSelector(\n [getAccessLogTotalRowCount, (state) => getAccessLogFilterPagination(state).size],\n (totalRowCount, size) => {\n return Math.ceil(totalRowCount / size);\n },\n);\n\nexport const getAccessLogLastLoadedParams = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLog.params;\n\nfunction skipEmpty<T>(v: T) {\n return isEmpty_(v) ? undefined : v;\n}\n\nexport const getAccessLogRequestParams = createSelector(\n [getCluster, getPath, getAccessLogFiltersState],\n (cluster, path, filters) => {\n const {time, field_selector, method_group, user_type, scope, ...rest} = filters;\n\n const {from, to} = convertTimeToRequestParams(time) || {};\n return {\n ...rest,\n begin: from === undefined ? undefined : from / 1000,\n end: to === undefined ? undefined : to / 1000,\n cluster,\n path,\n field_selector: skipEmpty(field_selector),\n method_group: skipEmpty(method_group),\n user_type: skipEmpty(user_type),\n scope: skipEmpty(scope),\n };\n },\n);\n\nexport const getAccessLogHasChangedFilters = createSelector(\n [getAccessLogLastLoadedParams, getAccessLogRequestParams],\n (lastLoaded, current) => {\n return Boolean(lastLoaded.path) && !isEqual_(lastLoaded, current);\n },\n);\n\nexport const getAccessLogLastLoadedFieldSelector = createSelector(\n [getAccessLogLastLoadedParams],\n (params) => {\n return params.field_selector;\n },\n);\n","import axios from 'axios';\nimport {ThunkAction} from 'redux-thunk';\n\nimport {RootState} from '../../../../../store/reducers';\nimport {\n AccessLogAction,\n AccessLogAvailableTimeRange,\n AccessLogData,\n} from '../../../../../store/reducers/navigation/tabs/access-log/access-log';\nimport {\n ACCESS_LOG_FAILURE,\n ACCESS_LOG_FILTERS,\n ACCESS_LOG_PARTIAL,\n ACCESS_LOG_PATH_CHANGED,\n ACCESS_LOG_REQUEST,\n ACCESS_LOG_RESET_FILTERS,\n ACCESS_LOG_SUCCESS,\n} from '../../../../../constants/navigation/tabs/access-log';\nimport {\n getAccessLogFilterPagination,\n getAccessLogLastLoadedParams,\n getAccessLogRequestParams,\n} from '../../../../../store/selectors/navigation/tabs/access-log';\nimport {\n AccessLogFilterAction,\n AccessLogFiltersState,\n} from '../../../../../store/reducers/navigation/tabs/access-log/access-log-filters';\nimport CancelHelper, {isCancelled} from '../../../../../utils/cancel-helper';\nimport {getAccessLogBasePath} from '../../../../../config';\nimport {wrapApiPromiseByToaster} from '../../../../../utils/utils';\nimport {getCluster} from '../../../../selectors/global';\n\ntype AccessLogThunkAction<Res = any> = ThunkAction<Res, RootState, any, AccessLogAction>;\ntype AccessLogFiltersThunkAction<Res = any> = ThunkAction<\n Res,\n RootState,\n any,\n AccessLogFilterAction\n>;\n\nexport function resetPaginationIfNeededAndCheckIfPathChanged(): AccessLogFiltersThunkAction<Boolean> {\n return (dispatch, getState) => {\n const state = getState();\n\n const lastLoadedParams = getAccessLogLastLoadedParams(state);\n const params = getAccessLogRequestParams(state);\n\n const result = params.path !== lastLoadedParams.path;\n\n if (result) {\n dispatch({type: ACCESS_LOG_PATH_CHANGED});\n }\n\n return result;\n };\n}\n\nconst accesLogCancelHelper = new CancelHelper();\n\nexport function fetchAccessLog(): AccessLogThunkAction {\n return (dispatch, getState) => {\n const pathChanged = dispatch(resetPaginationIfNeededAndCheckIfPathChanged());\n dispatch({type: ACCESS_LOG_REQUEST, data: pathChanged ? {loaded: false} : {}});\n\n const state = getState();\n const params = getAccessLogRequestParams(state);\n\n dispatch({type: ACCESS_LOG_PARTIAL, data: {params}});\n return Promise.all([\n axios.get(`${getAccessLogBasePath()}/ready`),\n axios\n .request<AccessLogAvailableTimeRange>({\n method: 'POST',\n url: `${getAccessLogBasePath()}/visible-time-range`,\n withCredentials: true,\n data: {cluster: params.cluster},\n cancelToken: accesLogCancelHelper.removeAllAndGenerateNextToken(),\n })\n .catch((e) => {\n console.log(e);\n return {data: {latest: undefined, erliest: undefined}};\n }),\n axios.request<AccessLogData>({\n method: 'POST',\n url: `${getAccessLogBasePath()}/access_log`,\n data: params,\n withCredentials: true,\n cancelToken: accesLogCancelHelper.generateNextToken(),\n }),\n ])\n .then(([{data: ready}, {data: availableTimeRange}, {data}]) => {\n dispatch({\n type: ACCESS_LOG_SUCCESS,\n data: {...data, ready, availableTimeRange, params},\n });\n })\n .catch((e: any) => {\n if (!isCancelled(e)) {\n const error = e?.response?.data || e;\n dispatch({type: ACCESS_LOG_FAILURE, data: {error}});\n }\n });\n };\n}\n\nexport const fetchAccessLogQtId = (): AccessLogThunkAction => async (_, getState) => {\n const state = getState();\n const cluster = getCluster(state);\n const params = getAccessLogRequestParams(state);\n\n const newParams = {...params} as Partial<typeof params>;\n delete newParams.pagination;\n\n const {data} = await wrapApiPromiseByToaster(\n axios.request({\n method: 'POST',\n url: `${getAccessLogBasePath()}/qt_access_log`,\n withCredentials: true,\n data: newParams,\n }),\n {\n toasterName: 'getAccessLogQtId',\n errorTitle: 'Failed to load access log query id',\n skipSuccessToast: true,\n },\n );\n\n window.open(`/${cluster}/queries/${data.query_id}`);\n};\n\nexport function applyAccessLogFilters(): AccessLogFiltersThunkAction {\n return (dispatch) => {\n dispatch(setAccessLogFiltersPage(0));\n };\n}\n\nexport function setAccessLogFilters(\n data: Partial<AccessLogFiltersState>,\n): AccessLogFiltersThunkAction {\n return (dispatch) => {\n dispatch({type: ACCESS_LOG_FILTERS, data});\n };\n}\n\nexport function setAccessLogFiltersPage(index: number): AccessLogFiltersThunkAction {\n return (dispatch, getState) => {\n const {size} = getAccessLogFilterPagination(getState());\n dispatch({type: ACCESS_LOG_FILTERS, data: {pagination: {index, size}}});\n dispatch(fetchAccessLog());\n };\n}\n\nexport function accessLogResetFilters(): AccessLogFiltersThunkAction {\n return (dispatch, getState) => {\n const lastLoadedParams = getAccessLogLastLoadedParams(getState());\n if (!lastLoadedParams.path) {\n // skip for initial loading\n return;\n }\n\n return dispatch({type: ACCESS_LOG_RESET_FILTERS});\n };\n}\n","const SvgArrowRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M1.25 8A.75.75 0 0 1 2 7.25h10.19L9.47 4.53a.75.75 0 0 1 1.06-1.06l4 4a.75.75 0 0 1 0 1.06l-4 4a.75.75 0 1 1-1.06-1.06l2.72-2.72H2A.75.75 0 0 1 1.25 8\" clipRule=\"evenodd\" /></svg>;\nexport default SvgArrowRight;","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport MetaTable from '../../../../components/MetaTable/MetaTable';\nimport Yson from '../../../../components/Yson/Yson';\nimport {AccessLogTransactionInfo} from '../../../../store/reducers/navigation/tabs/access-log/access-log';\nimport ClipboardButton from '../../../../components/ClipboardButton/ClipboardButton';\n\nimport './AccountsLogTransactionInfo.scss';\n\nconst block = cn('accounts-log-transaction-info');\n\ninterface Props {\n data: AccessLogTransactionInfo;\n}\n\nfunction TransactionInfo(props: Props) {\n const {data} = props;\n return (\n <MetaTable\n items={[\n {\n key: 'Id',\n value: <CopyText text={data.transaction_id} />,\n },\n {\n key: 'Title',\n value: <CopyText text={data.transaction_title || ''} />,\n visible: Boolean(data.transaction_title),\n },\n {\n key: 'Operation Id',\n value: <CopyText text={data.operation_id || ''} />,\n visible: Boolean(data.operation_id),\n },\n {\n key: 'Operation title',\n value: <CopyText text={data.operation_title || ''} />,\n visible: Boolean(data.operation_title),\n },\n {\n key: 'Parent',\n value: <Yson value={data.parent} />,\n visible: Boolean(data.parent),\n },\n ]}\n />\n );\n}\n\nfunction CopyText({text, copyText}: {text: string; copyText?: string}) {\n return (\n <div className={block('copy')}>\n <span className={block('copy-text')}>{text}</span>\n <ClipboardButton\n className={block('copy-btn')}\n view=\"flat-secondary\"\n text={copyText ?? text}\n />\n </div>\n );\n}\n\nexport default React.memo(TransactionInfo);\n","import React, {FC} from 'react';\nimport {useSelector} from '../../../../store/redux-hooks';\nimport cn from 'bem-cn-lite';\nimport {Flex, Icon} from '@gravity-ui/uikit';\nimport ArrowRightIcon from '@gravity-ui/icons/svgs/arrow-right.svg';\n\nimport compact_ from 'lodash/compact';\n\nimport DataTable, {Column, Settings} from '@gravity-ui/react-data-table';\n\nimport format from '../../../../common/hammer/format';\nimport DataTableYT from '../../../../components/DataTableYT/DataTableYT';\nimport Label from '../../../../components/Label/Label';\nimport Link from '../../../../components/Link/Link';\nimport {Secondary, Warning} from '../../../../components/Text/Text';\nimport {SubjectCard} from '../../../../components/SubjectLink/SubjectLink';\nimport {Tooltip} from '../../../../components/Tooltip/Tooltip';\nimport {STICKY_DOUBLE_TOOLBAR_BOTTOM} from '../../../../components/WithStickyToolbar/WithStickyToolbar';\nimport ClipboardButton from '../../../../components/ClipboardButton/ClipboardButton';\nimport ColumnHeader from '../../../../components/ColumnHeader/ColumnHeader';\n\nimport {\n getAccessLogFilterPagination,\n getAccessLogItems,\n getAccessLogLastLoadedFieldSelector,\n getAccessLogLoaded,\n getAccessLogLoading,\n getAccessLogPagesCount,\n getAccessLogReady,\n} from '../../../../store/selectors/navigation/tabs/access-log';\nimport {AccessLogItem} from '../../../../store/reducers/navigation/tabs/access-log/access-log';\nimport {getCluster} from '../../../../store/selectors/global';\n\nimport {genNavigationUrl} from '../../../../utils/navigation/navigation';\n\nimport AccountsLogTransactionInfo from './AccountsLogTransactionInfo';\n\nimport './AccessLogTable.scss';\n\nconst block = cn('access-log-table');\n\nconst DateHeaderMemo = React.memo(DateHeader);\n\nconst TABLE_SETTINGS: Settings = {\n displayIndices: false,\n stickyHead: DataTable.MOVING,\n stickyFooter: DataTable.MOVING,\n stickyTop: STICKY_DOUBLE_TOOLBAR_BOTTOM,\n stickyBottom: 0,\n syncHeadOnResize: true,\n sortable: false,\n};\n\nconst PathItem: FC<{\n cluster: string;\n path: string;\n}> = ({cluster, path}) => {\n return (\n <span className={block('path-link')}>\n <Link url={genNavigationUrl({cluster, path})} className={block('path-link-link')}>\n {path}\n {''}\n </Link>\n <ClipboardButton text={path} view={'flat-secondary'} />\n </span>\n );\n};\n\nfunction useColumns() {\n const cluster = useSelector(getCluster);\n const fieldSelector = useSelector(getAccessLogLastLoadedFieldSelector);\n const columns: Array<Column<AccessLogItem>> = React.useMemo(() => {\n const res: Array<Column<AccessLogItem>> = compact_([\n {\n name: 'Date',\n render({row}) {\n return <Secondary>{row.instant}</Secondary>;\n },\n header: <DateHeaderMemo />,\n },\n {\n name: 'Method',\n render({row}) {\n return row.method;\n },\n },\n {\n name: 'Path',\n render({row: {path, target_path, original_path, destination_path}}) {\n if (!path) {\n return (\n <Secondary>\n Path is hidden due to access permission restrictions\n </Secondary>\n );\n }\n return (\n <div className={block('path')}>\n <Flex gap={2} direction=\"column\">\n <PathItem cluster={cluster} path={path} />\n {destination_path && (\n <>\n <Icon data={ArrowRightIcon} size={16} />\n <PathItem cluster={cluster} path={destination_path} />\n </>\n )}\n </Flex>\n {target_path && (\n <PathTag text=\"target\" cluster={cluster} path={target_path} />\n )}\n {original_path && (\n <PathTag text=\"original\" cluster={cluster} path={original_path} />\n )}\n </div>\n );\n },\n },\n {\n name: 'User',\n render({row: {user}}) {\n return <SubjectCard name={user} />;\n },\n },\n {\n name: 'Type',\n render({row: {type}}) {\n return format.ReadableField(type);\n },\n },\n fieldSelector?.scope && {\n name: 'Scope',\n render({row: {scope}}) {\n return format.ReadableField(scope);\n },\n },\n fieldSelector?.user_type && {\n name: 'User type',\n render({row: {user_type}}) {\n return user_type;\n },\n },\n fieldSelector?.method_group && {\n name: 'Method group',\n render({row: {method_group}}) {\n return method_group;\n },\n },\n fieldSelector?.transaction_info && {\n name: 'Tx',\n headerTitle: 'Transaction info',\n render({row: {transaction_info}}) {\n if (!transaction_info) {\n return null;\n }\n return (\n <Tooltip\n placement={'left'}\n content={<AccountsLogTransactionInfo data={transaction_info} />}\n >\n <Label text=\"Tx\" />\n </Tooltip>\n );\n },\n },\n ]);\n return res;\n }, [cluster, fieldSelector]);\n return columns;\n}\n\nfunction AccessLogTable() {\n const items = useSelector(getAccessLogItems);\n const columns = useColumns();\n\n const loading = useSelector(getAccessLogLoading);\n const loaded = useSelector(getAccessLogLoaded);\n\n const ready = useSelector(getAccessLogReady);\n\n return ready ? (\n <DataTableYT\n loading={loading}\n loaded={loaded}\n columns={columns}\n data={loaded ? items : []}\n useThemeYT\n settings={TABLE_SETTINGS}\n />\n ) : (\n <Warning>The service is under maintenance. Please try again later.</Warning>\n );\n}\n\nexport default React.memo(AccessLogTable);\n\nfunction DateHeader() {\n const loading = useSelector(getAccessLogLoading);\n const {index} = useSelector(getAccessLogFilterPagination);\n const pageCount = useSelector(getAccessLogPagesCount);\n\n return <ColumnHeader column=\"Date\" loading={loading} pageIndex={index} pageCount={pageCount} />;\n}\n\nfunction PathTag({\n text,\n path,\n cluster,\n}: {\n text: 'target' | 'original';\n path?: string;\n cluster: string;\n}) {\n const isTarget = text === 'target';\n return path ? (\n <Tooltip\n content={\n <div>\n <Link url={genNavigationUrl({cluster, path})}>{path}</Link>\n <ClipboardButton text={path} view={'flat-secondary'} />\n {isTarget ? (\n <div>\n The Target directs to the node/attribute that has been accessed by the\n link from the Path.\n </div>\n ) : (\n <div>The Path has been accessed by the link from the Original.</div>\n )}\n </div>\n }\n >\n <Label text={text} capitalize />\n </Tooltip>\n ) : null;\n}\n","import React from 'react';\nimport {useSelector} from '../../../../store/redux-hooks';\n\nimport {YTErrorBlock} from '../../../../components/Block/Block';\nimport {getAccessLogError} from '../../../../store/selectors/navigation/tabs/access-log';\n\nfunction AccessLogError() {\n const error = useSelector(getAccessLogError);\n\n return !error ? null : <YTErrorBlock error={error} topMargin={'half'} />;\n}\n\nexport default React.memo(AccessLogError);\n","import reduce_ from 'lodash/reduce';\n\nimport type {\n AccessLogFieldSelectorType,\n AccessLogMethodType,\n AccessLogScopeType,\n AccessLogUserType,\n} from '../../../store/reducers/navigation/tabs/access-log/access-log-filters';\n\nexport function valueToSelection<KeyType extends string, V>(value: Record<KeyType, V>) {\n return reduce_(\n value,\n (acc, v, key) => {\n if (v) {\n acc.push(key as KeyType);\n }\n return acc;\n },\n [] as Array<KeyType>,\n );\n}\n\nfunction selectionToValue<KeyType extends string, EmptyValue>(\n selected: Array<KeyType>,\n emptyValue: EmptyValue,\n) {\n if (!selected.length) {\n return emptyValue;\n }\n return reduce_(\n selected,\n (acc, item) => {\n acc[item as KeyType] = true;\n return acc;\n },\n {} as Record<KeyType, boolean>,\n );\n}\n\nexport const ACCESS_LOG_FIELD_SELECTOR_ITEMS: Array<{\n text: string;\n value: AccessLogFieldSelectorType;\n}> = [\n {text: 'Scope', value: 'scope'},\n {text: 'User type', value: 'user_type'},\n {text: 'Method group', value: 'method_group'},\n {text: 'Transaction info', value: 'transaction_info'},\n];\n\nexport function accessLogFieldSelectorSelectionToValue<EmptyValue>(\n selection: Array<AccessLogFieldSelectorType>,\n emptyValue: EmptyValue,\n) {\n return selectionToValue(selection, emptyValue);\n}\n\nexport const ACCESS_LOG_METHOD_ITEMS: Array<{text: string; value: AccessLogMethodType}> = [\n {text: 'Read', value: 'read'},\n {text: 'Write', value: 'write'},\n {text: 'Lock', value: 'lock'},\n {text: 'Link', value: 'link'},\n {text: 'Copy/Move', value: 'copy_move'},\n {text: 'Dynamic table commands', value: 'dynamic_table_commands'},\n];\n\nexport function accessLogMethodSelectionToValue<EmptyValue>(\n selection: Array<AccessLogMethodType>,\n emptyValue: EmptyValue,\n) {\n return selectionToValue(selection, emptyValue);\n}\n\nexport const ACCESS_LOG_USER_TYPE_ITEMS: Array<{text: string; value: AccessLogUserType}> = [\n {text: 'Human', value: 'human'},\n {text: 'Robot', value: 'robot'},\n {text: 'System', value: 'system'},\n];\n\nexport function accessLogUserTypeSelectionToValue<EmptyValue>(\n selection: Array<AccessLogUserType>,\n emptyValue: EmptyValue,\n) {\n return selectionToValue(selection, emptyValue);\n}\n\nexport const ACCESS_LOG_SCOPE_ITEMS: Array<{text: string; value: AccessLogScopeType}> = [\n {text: 'Table', value: 'table'},\n {text: 'Directory', value: 'directory'},\n {text: 'File', value: 'file'},\n {text: 'Document', value: 'document'},\n {text: 'Other', value: 'other'},\n];\n\nexport function accessLogScopeSelectionToValue<EmptyValue>(\n selection: Array<AccessLogScopeType>,\n emptyValue: EmptyValue,\n) {\n return selectionToValue(selection, emptyValue);\n}\n","import React, {FC, useState} from 'react';\nimport {useDispatch} from '../../../../store/redux-hooks';\nimport {fetchAccessLogQtId} from '../../../../store/actions/navigation/tabs/access-log/access-log';\nimport {Button, Icon} from '@gravity-ui/uikit';\nimport AbbrSqlIcon from '@gravity-ui/icons/svgs/abbr-sql.svg';\n\nexport const AccessLogOpenQtButton: FC = () => {\n const [loading, setLoading] = useState(false);\n const dispatch = useDispatch();\n\n const handleClick = async () => {\n try {\n setLoading(true);\n await dispatch(fetchAccessLogQtId());\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <Button onClick={handleClick} loading={loading}>\n <Icon data={AbbrSqlIcon} size={16} />\n Open in QT\n </Button>\n );\n};\n","import React from 'react';\nimport {useDispatch, useSelector} from '../../../../store/redux-hooks';\n\nimport cn from 'bem-cn-lite';\n\nimport {Checkbox} from '@gravity-ui/uikit';\n\nimport Button from '../../../../components/Button/Button';\nimport Icon from '../../../../components/Icon/Icon';\n\nimport SimplePagination from '../../../../components/Pagination/SimplePagination';\nimport TextInputWithDebounce from '../../../../components/TextInputWithDebounce/TextInputWithDebounce';\nimport {Toolbar} from '../../../../components/WithStickyToolbar/Toolbar/Toolbar';\nimport Select from '../../../../components/Select/Select';\n\nimport {\n getAccessLogAvailableTimeRange,\n getAccessLogFilterDistinctBy,\n getAccessLogFilterFieldSelector,\n getAccessLogFilterMetadata,\n getAccessLogFilterMethod,\n getAccessLogFilterPagination,\n getAccessLogFilterPathRegex,\n getAccessLogFilterRecursive,\n getAccessLogFilterScope,\n getAccessLogFilterTime,\n getAccessLogFilterUserRegex,\n getAccessLogFilterUserType,\n getAccessLogHasChangedFilters,\n getAccessLogPagesCount,\n} from '../../../../store/selectors/navigation/tabs/access-log';\nimport {\n applyAccessLogFilters,\n setAccessLogFilters,\n setAccessLogFiltersPage,\n} from '../../../../store/actions/navigation/tabs/access-log/access-log';\nimport {\n AccessLogFieldSelectorType,\n AccessLogMethodType,\n AccessLogScopeType,\n AccessLogUserType,\n initialState,\n} from '../../../../store/reducers/navigation/tabs/access-log/access-log-filters';\n\nimport './AccessLogFilters.scss';\nimport {\n TIMELINE_RANGE_PICKER_SHORTCUTS,\n TimelinePicker,\n convertTimeToRequestParams,\n formatInterval,\n} from '../../../../components/common/Timeline';\nimport {EMPTY_OBJECT} from '../../../../constants/empty';\nimport {Tooltip} from '../../../../components/Tooltip/Tooltip';\nimport {\n ACCESS_LOG_FIELD_SELECTOR_ITEMS,\n ACCESS_LOG_METHOD_ITEMS,\n ACCESS_LOG_SCOPE_ITEMS,\n ACCESS_LOG_USER_TYPE_ITEMS,\n accessLogFieldSelectorSelectionToValue,\n accessLogMethodSelectionToValue,\n accessLogScopeSelectionToValue,\n accessLogUserTypeSelectionToValue,\n valueToSelection,\n} from '../../../../utils/navigation/tabs/access-log';\nimport {AccessLogOpenQtButton} from './AccessLogOpenQtButton';\n\nconst block = cn('access-log-filters');\n\nexport default React.memo(AccessLogFilters);\n\nfunction AccessLogFilters() {\n return (\n <React.Fragment>\n <Toolbar\n className={block()}\n itemsToWrap={[\n {node: <AccessLogPagination />},\n {node: <AccessLogTimeline />},\n {node: <AccessLogFieldselector />},\n {node: <AccessLogMetadata />},\n {node: <AccessLogDistictBy />},\n {node: <AccessLogOpenQtButton />},\n ]}\n />\n <Toolbar\n className={block()}\n itemsToWrap={[\n {\n node: <AccessLogPathRegexp />,\n growable: true,\n shrinkable: true,\n wrapperClassName: block('path-regex'),\n },\n {\n node: <AccessLogUserRegexp />,\n wrapperClassName: block('user-regex'),\n },\n {\n node: <AccessLogUserTypeFilter />,\n wrapperClassName: block('user-type'),\n },\n {\n node: <AccessLogScopeFilter />,\n wrapperClassName: block('scope'),\n },\n {\n node: <AccessLogMethod />,\n wrapperClassName: block('method-group'),\n },\n {\n node: <AccessLogRecursive />,\n },\n {node: <AccessLogApplyFilters />},\n ]}\n />\n </React.Fragment>\n );\n}\n\nfunction AccessLogRecursive() {\n const dispatch = useDispatch();\n const recursive = useSelector(getAccessLogFilterRecursive);\n\n return (\n <Checkbox\n checked={recursive}\n onUpdate={(value) => {\n dispatch(setAccessLogFilters({recursive: value}));\n }}\n >\n Recursive\n </Checkbox>\n );\n}\n\nfunction AccessLogApplyFilters() {\n const dispatch = useDispatch();\n const hasChanges = useSelector(getAccessLogHasChangedFilters);\n const handleApply = React.useCallback(() => {\n dispatch(applyAccessLogFilters());\n }, [dispatch]);\n return (\n <Button width=\"max\" disabled={!hasChanges} view=\"action\" onClick={handleApply}>\n Apply\n </Button>\n );\n}\n\nfunction AccessLogPagination() {\n const dispatch = useDispatch();\n\n const {index} = useSelector(getAccessLogFilterPagination);\n const pageCount = useSelector(getAccessLogPagesCount);\n\n const handleChange = React.useCallback(\n (value: number) => {\n dispatch(setAccessLogFiltersPage(value));\n },\n [dispatch],\n );\n\n return (\n <SimplePagination\n value={index}\n min={0}\n max={Math.max(0, pageCount - 1)}\n onChange={handleChange}\n />\n );\n}\n\nfunction AccessLogPathRegexp() {\n const dispatch = useDispatch();\n const filter = useSelector(getAccessLogFilterPathRegex);\n\n const handleChange = React.useCallback(\n (path_regex: string) => {\n dispatch(setAccessLogFilters({path_regex}));\n },\n [dispatch],\n );\n\n return (\n <TextInputWithDebounce\n debounce={500}\n value={filter}\n placeholder={'Path regexp...'}\n onUpdate={handleChange}\n />\n );\n}\n\nfunction AccessLogUserRegexp() {\n const dispatch = useDispatch();\n const filter = useSelector(getAccessLogFilterUserRegex);\n\n const handleChange = React.useCallback(\n (user_regex: string) => {\n dispatch(setAccessLogFilters({user_regex}));\n },\n [dispatch],\n );\n\n return (\n <TextInputWithDebounce\n debounce={500}\n value={filter}\n placeholder={'User regexp...'}\n onUpdate={handleChange}\n />\n );\n}\n\nconst METADATA_ITEMS = [\n {\n text: 'Only attributes',\n value: 'only_attrs',\n },\n {\n text: 'Skip attributes',\n value: 'skip_attrs',\n },\n];\n\nfunction AccessLogMetadata() {\n const dispatch = useDispatch();\n const value = useSelector(getAccessLogFilterMetadata);\n const handleChange = React.useCallback(\n (v: string) => {\n const metadata = v ? v === 'only_attrs' : undefined;\n\n dispatch(setAccessLogFilters({metadata}));\n },\n [dispatch, value],\n );\n const valueStr = value === undefined ? '' : value ? 'only_attrs' : 'skip_attrs';\n return (\n <Select\n value={valueStr ? [valueStr] : undefined}\n items={METADATA_ITEMS}\n onUpdate={(vals) => handleChange(vals[0])}\n placeholder={'Attributes'}\n />\n );\n}\n\nconst DISTINCT_BY_ITEMS = [{text: 'By User', value: 'user'}];\nfunction AccessLogDistictBy() {\n const dispatch = useDispatch();\n const value = useSelector(getAccessLogFilterDistinctBy);\n const handleChange = React.useCallback(\n (v: string) => {\n dispatch(setAccessLogFilters({distinct_by: v as 'user'}));\n },\n [dispatch],\n );\n\n return (\n <Select\n value={value ? [value] : undefined}\n items={DISTINCT_BY_ITEMS}\n onUpdate={(vals) => handleChange(vals[0])}\n placeholder={'Distinct'}\n />\n );\n}\n\nfunction AccessLogFieldselector() {\n const dispatch = useDispatch();\n const value = useSelector(getAccessLogFilterFieldSelector);\n\n const selected = React.useMemo(() => {\n return valueToSelection(value);\n }, [value]);\n\n const handleUpdate = React.useCallback(\n (items: Array<string>) => {\n const field_selector = accessLogFieldSelectorSelectionToValue(\n items as Array<AccessLogFieldSelectorType>,\n initialState.field_selector,\n );\n dispatch(setAccessLogFilters({field_selector}));\n },\n [dispatch, value],\n );\n\n return (\n <Select\n items={ACCESS_LOG_FIELD_SELECTOR_ITEMS}\n value={selected}\n multiple\n onUpdate={handleUpdate}\n placeholder={'Columns'}\n />\n );\n}\n\nfunction AccessLogMethod() {\n const dispatch = useDispatch();\n const value = useSelector(getAccessLogFilterMethod);\n\n const selected = React.useMemo(() => {\n return valueToSelection(value);\n }, [value]);\n\n const handleUpdate = React.useCallback(\n (items: Array<string>) => {\n const method_group = accessLogMethodSelectionToValue(\n items as Array<AccessLogMethodType>,\n EMPTY_OBJECT,\n );\n dispatch(setAccessLogFilters({method_group}));\n },\n [dispatch, value],\n );\n\n return (\n <Select\n multiple\n items={ACCESS_LOG_METHOD_ITEMS}\n value={selected}\n onUpdate={handleUpdate}\n placeholder={'Method group: All'}\n width=\"max\"\n />\n );\n}\n\nfunction AccessLogUserTypeFilter() {\n const dispatch = useDispatch();\n const value = useSelector(getAccessLogFilterUserType);\n\n const selected = React.useMemo(() => {\n return valueToSelection(value);\n }, [value]);\n\n const handleUpdate = React.useCallback(\n (items: Array<string>) => {\n const user_type = accessLogUserTypeSelectionToValue(\n items as Array<AccessLogUserType>,\n EMPTY_OBJECT,\n );\n dispatch(setAccessLogFilters({user_type}));\n },\n [dispatch, value],\n );\n\n return (\n <Select\n multiple\n items={ACCESS_LOG_USER_TYPE_ITEMS}\n value={selected}\n onUpdate={handleUpdate}\n placeholder={'User type: All'}\n width=\"max\"\n maxVisibleValues={2}\n />\n );\n}\n\nfunction AccessLogScopeFilter() {\n const dispatch = useDispatch();\n const value = useSelector(getAccessLogFilterScope);\n\n const selected = React.useMemo(() => {\n return valueToSelection(value);\n }, [value]);\n\n const handleUpdate = React.useCallback(\n (items: Array<string>) => {\n const scope = accessLogScopeSelectionToValue(\n items as Array<AccessLogScopeType>,\n EMPTY_OBJECT,\n );\n dispatch(setAccessLogFilters({scope}));\n },\n [dispatch],\n );\n\n return (\n <Select\n multiple\n items={ACCESS_LOG_SCOPE_ITEMS}\n value={selected}\n onUpdate={handleUpdate}\n placeholder={'Scope: All'}\n width=\"max\"\n />\n );\n}\n\nconst TIMELINE_SHOURCUTS = [\n {\n title: '1d',\n time: '1d',\n },\n {\n title: '1w',\n time: '1w',\n },\n {\n title: '1M',\n time: '1M',\n },\n {\n time: 'custom',\n },\n];\n\nfunction AccessLogTimeline() {\n const dispatch = useDispatch();\n const updateTime = React.useCallback(\n (time: {from?: number; to?: number}) => {\n const {from, to} = time;\n dispatch(setAccessLogFilters({time: {from, to}}));\n },\n [dispatch],\n );\n\n const updateShortcut = React.useCallback(\n (shortcutValue: string) => {\n dispatch(setAccessLogFilters({time: {shortcutValue}}));\n },\n [dispatch],\n );\n\n const time = useSelector(getAccessLogFilterTime);\n const now = Date.now();\n const {from = now - 24 * 12 * 1000, to = now} = convertTimeToRequestParams(time) || {};\n\n return (\n <React.Fragment>\n <TimelinePicker\n from={from || 0}\n to={to || 0}\n shortcut={time?.shortcutValue}\n onUpdate={updateTime}\n onShortcut={updateShortcut}\n topShortcuts={TIMELINE_SHOURCUTS}\n shortcuts={TIMELINE_RANGE_PICKER_SHORTCUTS}\n hasDatePicker\n />\n <AvailableTimeRange />\n </React.Fragment>\n );\n}\n\nfunction AvailableTimeRange() {\n const {earliest, latest} = useSelector(getAccessLogAvailableTimeRange);\n const hidden = earliest === undefined || latest === undefined;\n\n return (\n <Tooltip\n className={block('available-range')}\n content={\n <React.Fragment>\n Available range:{' '}\n {hidden\n ? 'Please wait until the range is loaded'\n : formatInterval((earliest ?? 0) * 1000, (latest ?? 0) * 1000)}\n </React.Fragment>\n }\n >\n <Icon awesome=\"question-circle\" />\n </Tooltip>\n );\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from '../../../../store/redux-hooks';\n\nimport {useDisableMaxContentWidth} from '../../../../containers/MaxContentWidth';\n\nimport WithStickyToolbar from '../../../../components/WithStickyToolbar/WithStickyToolbar';\nimport {\n accessLogResetFilters,\n fetchAccessLog,\n} from '../../../../store/actions/navigation/tabs/access-log/access-log';\n\nimport AccessLogTable from './AccessLogTable';\nimport AccessLogError from './AccessLogError';\nimport AccessLogFilters from './AccessLogFilters';\nimport {getPath} from '../../../../store/selectors/navigation';\n\nfunction AccessLog() {\n const dispatch = useDispatch();\n const path = useSelector(getPath);\n\n React.useEffect(() => {\n dispatch(accessLogResetFilters());\n dispatch(fetchAccessLog());\n }, [dispatch, path]);\n\n useDisableMaxContentWidth();\n\n return (\n <React.Fragment>\n <WithStickyToolbar\n hideToolbarShadow\n doubleHeight\n toolbar={<AccessLogFilters />}\n content={\n <React.Fragment>\n <AccessLogError />\n <AccessLogTable />\n </React.Fragment>\n }\n />\n </React.Fragment>\n );\n}\n\nexport default React.memo(AccessLog);\n","import React, {useEffect} from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\nimport {useSelector} from '../../../../store/redux-hooks';\nimport cn from 'bem-cn-lite';\n\nimport capitalize_ from 'lodash/capitalize';\nimport isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\n\nimport LoadDataHandler from '../../../../components/LoadDataHandler/LoadDataHandler';\nimport {Loader} from '@gravity-ui/uikit';\nimport {YTErrorBlock} from '../../../../components/Error/Error';\nimport Link from '../../../../components/Link/Link';\nimport CollapsibleSection from '../../../../components/CollapsibleSection/CollapsibleSection';\nimport {Secondary} from '../../../../components/Text/Text';\n\nimport {getTabletErrors} from '../../../../store/actions/navigation/tabs/tablet-errors/tablet-errors-background';\nimport {getPath} from '../../../../store/selectors/navigation';\nimport {getEffectiveMode} from '../../../../store/selectors/navigation/navigation';\nimport {getCluster} from '../../../../store/selectors/global';\nimport {\n getTabletErrorsBackgroundCountNoticeVisbile,\n getTabletErrorsLoadingStatus,\n getTabletErrorsReplicationErrors,\n} from '../../../../store/selectors/navigation/tabs/tablet-errors-background';\nimport {getReplicatedTableReplicasMap} from '../../../../store/selectors/navigation/content/replicated-table';\nimport {RootState} from '../../../../store/reducers';\n\nimport {useAppRumMeasureStart} from '../../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../../rum/rum-measure-types';\nimport {useRumMeasureStop} from '../../../../rum/RumUiContext';\nimport {isFinalLoadingStatus} from '../../../../utils/utils';\nimport {YTError} from '../../../../types';\n\nimport './TabletErrorsBackground.scss';\n\nconst block = cn('navigation-tablet-errors-background');\n\nfunction TabletErrors(props: ConnectedProps<typeof connector>) {\n const {path, mode, cluster, getTabletErrors} = props;\n useEffect(() => {\n getTabletErrors();\n }, [path, mode]);\n\n const {\n loading,\n loaded,\n tabletErrors: {tablet_errors},\n replicationErrors,\n error,\n } = props;\n const initialLoading = loading && !loaded;\n\n return (\n <LoadDataHandler loaded={loaded} error={Boolean(error)} errorData={error}>\n {initialLoading ? (\n <Loader />\n ) : (\n <div className={block({loading: initialLoading})}>\n <TabletErrorsCountNotice />\n <CollapsibleSection name=\"Tablet errors\">\n <TabletErrorsBlock\n cluster={cluster}\n items={tablet_errors}\n sectionClassName={block('section')}\n />\n </CollapsibleSection>\n <CollapsibleSection name=\"Replication errors\">\n <ReplicationErrorsBlock cluster={cluster} data={replicationErrors} />\n </CollapsibleSection>\n </div>\n )}\n </LoadDataHandler>\n );\n}\n\nconst mapStateToProps = (state: RootState) => {\n const {loading, loaded, error, tabletErrors} = state.navigation.tabs.tabletErrorsBackground;\n const path = getPath(state);\n const mode = getEffectiveMode(state);\n const cluster = getCluster(state);\n\n return {\n loading,\n loaded,\n error,\n\n path,\n mode,\n tabletErrors,\n cluster,\n replicationErrors: getTabletErrorsReplicationErrors(state),\n };\n};\n\nconst mapDispatchToProps = {\n getTabletErrors,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nconst TabletErrorsConnected = connector(TabletErrors);\n\nexport default function TabletErrorsWithRum() {\n const loadState = useSelector(getTabletErrorsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.NAVIGATION_TAB_TABLET_ERRORS,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.NAVIGATION_TAB_TABLET_ERRORS,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <TabletErrorsConnected />;\n}\n\ninterface ReplicationErrorsBlockProps {\n cluster: string;\n data: ReturnType<typeof getTabletErrorsReplicationErrors>;\n}\n\nfunction ReplicationErrorsBlock({data, cluster}: ReplicationErrorsBlockProps) {\n let counter = 0;\n return (\n <React.Fragment>\n {map_(data, (items, replicaId) => {\n return (\n <CollapsibleSection\n key={replicaId}\n name={<ReplicaErrorHeader id={replicaId} />}\n className={block('group', block('section'))}\n collapsed={0 < counter++}\n >\n <TabletErrorsBlock cluster={cluster} items={items} />\n </CollapsibleSection>\n );\n })}\n </React.Fragment>\n );\n}\n\nfunction TabletErrorsCountNotice() {\n const visible = useSelector(getTabletErrorsBackgroundCountNoticeVisbile);\n if (!visible) {\n return null;\n }\n return (\n <div className={block('count-notice')}>\n Only limited number of errors is displayed. See Tablets tab for the complete list.\n </div>\n );\n}\n\nfunction TabletErrorsHeader({id, cluster}: {id: string; cluster: string}) {\n return (\n <React.Fragment>\n Errors of tablet <Link url={`/${cluster}/tablet/${id}`}>{id}</Link>\n </React.Fragment>\n );\n}\n\nfunction ReplicaErrorHeader({id}: {id: string}) {\n const data = useSelector(getReplicatedTableReplicasMap);\n const {[id]: attrs} = data;\n\n if (!attrs) return null;\n const {cluster_name: cluster, mode, replica_path: path} = attrs;\n\n const link =\n cluster && path ? <Link url={`/${cluster}/navigation?path=${path}`}>{path}</Link> : id;\n\n return (\n <React.Fragment>\n {id}{' '}\n <Secondary>\n ({mode ? `${mode} replica to ` : 'Replica to '}\n {capitalize_(cluster)}, table path {link})\n </Secondary>\n </React.Fragment>\n );\n}\n\ninterface Props {\n cluster: string;\n items?: Record<string, Array<YTError>>;\n sectionClassName?: string;\n}\n\nfunction TabletErrorsBlock({items, cluster, sectionClassName}: Props) {\n if (isEmpty_(items)) {\n return null;\n }\n\n let counter = 0;\n return (\n <div className={block('items')}>\n {map_(items, (errors, id) => {\n return (\n <CollapsibleSection\n key={id}\n className={block('group', sectionClassName)}\n size=\"s\"\n name={<TabletErrorsHeader {...{id, cluster}} />}\n collapsed={0 < counter++}\n >\n {map_(errors, (error, index) => {\n return (\n <YTErrorBlock\n key={index}\n className={block('error')}\n topMargin=\"none\"\n error={error}\n disableLogger={true}\n />\n );\n })}\n </CollapsibleSection>\n );\n })}\n </div>\n );\n}\n","import {ROWS_PER_PAGE} from '../../../../constants/pagination';\nimport {RootState} from '../../../../store/reducers/index.main';\n\nexport const getTabletErrorsByPathError = (state: RootState) =>\n state.navigation.tabs.tabletErrorsByPath.error;\n\nexport const getTabletErrorsByPathLoading = (state: RootState) =>\n state.navigation.tabs.tabletErrorsByPath.loading;\n\nexport const getTabletErrorsByPathLoaded = (state: RootState) =>\n state.navigation.tabs.tabletErrorsByPath.loaded;\n\nexport const getTabletErrorsByPathData = (state: RootState) =>\n state.navigation.tabs.tabletErrorsByPath.data;\n\nexport const getTabletErrorsByPathDataParams = (state: RootState) =>\n state.navigation.tabs.tabletErrorsByPath.dataParams;\n\nexport const getTabletErrorsByPathAllMethods = (state: RootState) =>\n state.navigation.tabs.tabletErrorsByPath.data?.all_methods;\n\nexport const getTabletErrorsByPathPageCount = (state: RootState) => {\n return Math.ceil(\n (state.navigation.tabs.tabletErrorsByPath.total_row_count ?? 0) / ROWS_PER_PAGE,\n );\n};\n\nexport const getTabletErrorCountLimitExceeded = (state: RootState) => {\n return state.navigation.tabs.tabletErrorsByPath?.error_count_limit_exceeded;\n};\n\n// Filters\n\nexport const getTabletErrorsByPathTimeRange = (state: RootState) =>\n state.navigation.tabs.tabletErrorsByPath.timeRangeFilter;\n\nexport const getTabletErrorsByPathMethodsFilter = (state: RootState) =>\n state.navigation.tabs.tabletErrorsByPath.methodsFilter;\n\nexport const getTabletErrorsByPathPageFilter = (state: RootState) =>\n state.navigation.tabs.tabletErrorsByPath.pageFilter;\n\nexport const getTabletErrorsByPathTabletIdFilter = (state: RootState) =>\n state.navigation.tabs.tabletErrorsByPath.tabletIdFilter;\n","import {ThunkAction} from 'redux-thunk';\nimport isEqual_ from 'lodash/isEqual';\nimport omit_ from 'lodash/omit';\n\nimport {RootState} from '../../../../../store/reducers';\nimport {\n TabletErrorsApi,\n fetchFromTabletErrorsApi,\n} from '../../../../../../shared/tablet-errors-manager';\nimport {ROWS_PER_PAGE} from '../../../../../constants/pagination';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport {tabletErrorsByPathActions} from '../../../../../store/reducers/navigation/tabs/tablet-errors/tablet-errors-by-path';\nimport CancelHelper, {isCancelled} from '../../../../../utils/cancel-helper';\nimport {\n getTabletErrorsByPathData,\n getTabletErrorsByPathDataParams,\n} from '../../../../../store/selectors/navigation/tabs/tablet-errors-by-path';\n\ntype AsyncAction<T = Promise<void>> = ThunkAction<T, RootState, unknown, any>;\n\nconst cancelHelper = new CancelHelper();\n\ntype ApiMethod = TabletErrorsApi['tablet_errors_by_table'];\n\nexport function loadTabletErrorsByTablePath(\n page: number,\n params: Pick<\n ApiMethod['body'],\n | 'table_path'\n | 'table_id'\n | 'start_timestamp'\n | 'end_timestamp'\n | 'methods'\n | 'tablet_id'\n | 'fixed_end_timestamp'\n >,\n): AsyncAction {\n return (dispatch, getState) => {\n dispatch(\n tabletErrorsByPathActions.onRequest({\n table_path: params.table_path,\n table_id: params.table_id,\n }),\n );\n\n const state = getState();\n const cluster = getCluster(state);\n\n const prevDataParams = getTabletErrorsByPathDataParams(state);\n if (\n page != 0 &&\n !isEqual_(\n omit_(prevDataParams, ['fixed_end_timestamp']),\n omit_(params, ['fixed_end_timestamp']),\n )\n ) {\n page = 0;\n dispatch(tabletErrorsByPathActions.updateFilter({pageFilter: page}));\n return Promise.resolve();\n }\n\n const prevData = getTabletErrorsByPathData(state);\n if (page != 0 && prevData) {\n params.fixed_end_timestamp = prevData.fixed_end_timestamp;\n }\n\n return fetchFromTabletErrorsApi(\n 'tablet_errors_by_table',\n cluster,\n {...params, offset: page * ROWS_PER_PAGE, count_limit: 100},\n cancelHelper.removeAllAndGenerateNextToken(),\n )\n .then(({data}) => {\n const payload =\n page === 0\n ? {\n data,\n dataParams: params,\n total_row_count: data.total_row_count,\n error_count_limit_exceeded: data?.error_count_limit_exceeded,\n }\n : {\n data,\n dataParams: params,\n error_count_limit_exceeded: data?.error_count_limit_exceeded,\n };\n\n dispatch(tabletErrorsByPathActions.onSuccess(payload));\n })\n .catch((error) => {\n if (!isCancelled(error)) {\n dispatch(tabletErrorsByPathActions.onError({error}));\n }\n });\n };\n}\n","import React from 'react';\nimport {useSelector} from '../../../../../store/redux-hooks';\nimport moment from 'moment';\nimport cn from 'bem-cn-lite';\n\nimport ypath from '../../../../../common/thor/ypath';\n\nimport {Alert, Button, Flex, Link, Text} from '@gravity-ui/uikit';\n\nimport {\n getTabletErrorCountLimitExceeded,\n getTabletErrorsByPathData,\n getTabletErrorsByPathError,\n getTabletErrorsByPathLoaded,\n getTabletErrorsByPathLoading,\n getTabletErrorsByPathPageCount,\n getTabletErrorsByPathPageFilter,\n} from '../../../../../store/selectors/navigation/tabs/tablet-errors-by-path';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport ColumnHeader from '../../../../../components/ColumnHeader/ColumnHeader';\nimport DataTableYT, {\n Column,\n DATA_TABLE_YT_SETTINGS_UNDER_TOOLBAR_DOUBLE_HEIGHT,\n} from '../../../../../components/DataTableYT/DataTableYT';\nimport {YTErrorBlock} from '../../../../../components/Error/Error';\nimport {Host} from '../../../../../containers/Host/Host';\nimport ClipboardButton from '../../../../../components/ClipboardButton/ClipboardButton';\nimport AttributesButton from '../../../../../components/AttributesButton/AttributesButton';\nimport {showErrorPopup} from '../../../../../utils/utils';\n\nconst block = cn('yt-tablet-errors-by-path-table');\n\nconst countLimitExceededMessage =\n 'A maximum of 10000 errors can be displayed for the selected time period. To view more, please adjust the time range';\n\nexport function TabletErrorsByPathTable({className}: {className?: string}) {\n const {columns, data, loading, loaded, countLimitExceeded} = useTableColumnsAndData();\n const error = useSelector(getTabletErrorsByPathError);\n return (\n <div className={className}>\n {Boolean(error) && <YTErrorBlock error={error} />}\n {Boolean(countLimitExceeded) && (\n <Alert theme={'info'} message={countLimitExceededMessage} />\n )}\n <DataTableYT\n loading={loading}\n loaded={loaded}\n columns={columns}\n data={data}\n settings={{\n ...DATA_TABLE_YT_SETTINGS_UNDER_TOOLBAR_DOUBLE_HEIGHT,\n dynamicRender: false,\n }}\n useThemeYT\n />\n </div>\n );\n}\n\ntype RowType = Exclude<ReturnType<typeof getTabletErrorsByPathData>, undefined>['errors'][number];\n\nfunction useTableColumnsAndData() {\n const cluster = useSelector(getCluster);\n const loading = useSelector(getTabletErrorsByPathLoading);\n const loaded = useSelector(getTabletErrorsByPathLoaded);\n const page = useSelector(getTabletErrorsByPathPageFilter);\n const pageCount = useSelector(getTabletErrorsByPathPageCount);\n const countLimitExceeded = useSelector(getTabletErrorCountLimitExceeded);\n\n const {errors = []} = useSelector(getTabletErrorsByPathData) ?? {};\n const columns = React.useMemo(() => {\n const res: Array<Column<RowType>> = [\n {\n name: 'tablet_id',\n header: (\n <ColumnHeader\n column=\"Tablet Id\"\n title=\"Tablet ID\"\n loading={loading}\n pageIndex={page}\n pageCount={pageCount}\n />\n ),\n render({row: {tablet_id}}) {\n return (\n <Flex className=\"elements-monospace\" alignItems=\"center\">\n <Text ellipsis variant=\"inherit\">\n <Link href={`/${cluster}/tablet/${tablet_id}`}>{tablet_id}</Link>\n </Text>\n <ClipboardButton text={tablet_id} view=\"flat-secondary\" inlineMargins />\n </Flex>\n );\n },\n },\n {\n name: 'method',\n header: <ColumnHeader column=\"Method\" />,\n render({row: {method}}) {\n return method;\n },\n },\n {\n name: 'host',\n header: <ColumnHeader column=\"Host\" />,\n render({row: {host}}) {\n return <Host address={host} asTabletNode inlineMargins />;\n },\n },\n {\n name: 'date',\n header: <ColumnHeader column=\"Date\" />,\n render({row: {timestamp}}) {\n return moment(timestamp * 1000).format('YYYY-MM-DD HH:mm:ss');\n },\n },\n {\n name: 'error_message',\n header: <ColumnHeader column=\"Error message\" />,\n className: block('cell-error-msg'),\n render({row: {error}}) {\n return (\n <Button\n onClick={() =>\n showErrorPopup(error, {hideOopsMsg: true, defaultExpandedCount: 1})\n }\n >\n {ypath.getValue(error.message)}\n </Button>\n );\n },\n },\n {\n name: 'actions',\n header: null,\n render({row: {error}}) {\n return (\n <AttributesButton\n onClick={() =>\n showErrorPopup(error, {hideOopsMsg: true, defaultExpandedCount: 1})\n }\n />\n );\n },\n },\n ];\n return res;\n }, [cluster, page, pageCount, loading]);\n return {data: errors, columns, loading, loaded, countLimitExceeded};\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from '../../../../../store/redux-hooks';\nimport cn from 'bem-cn-lite';\n\nimport HelpLink from '../../../../../components/HelpLink/HelpLink';\nimport SimplePagination from '../../../../../components/Pagination/SimplePagination';\nimport Select from '../../../../../components/Select/Select';\nimport {YTTimeline, calcFromTo} from '../../../../../components/Timeline';\nimport WithStickyToolbar from '../../../../../components/WithStickyToolbar/WithStickyToolbar';\nimport {Toolbar} from '../../../../../components/WithStickyToolbar/Toolbar/Toolbar';\nimport TextInputWithDebounce from '../../../../../components/TextInputWithDebounce/TextInputWithDebounce';\n\nimport {docsUrl} from '../../../../../config';\n\nimport {getPath} from '../../../../../store/selectors/navigation';\nimport {\n getTabletErrorsByPathAllMethods,\n getTabletErrorsByPathMethodsFilter,\n getTabletErrorsByPathPageCount,\n getTabletErrorsByPathPageFilter,\n getTabletErrorsByPathTabletIdFilter,\n getTabletErrorsByPathTimeRange,\n} from '../../../../../store/selectors/navigation/tabs/tablet-errors-by-path';\nimport {tabletErrorsByPathActions} from '../../../../../store/reducers/navigation/tabs/tablet-errors/tablet-errors-by-path';\nimport {loadTabletErrorsByTablePath} from '../../../../../store/actions/navigation/tabs/tablet-errors/tablet-errors-by-path';\nimport {getNavigationPathAttributes} from '../../../../../store/selectors/navigation/navigation';\nimport UIFactory from '../../../../../UIFactory';\n\nimport {TabletErrorsByPathTable} from './TabletErrorsByPathTable';\n\nimport './TabletErrorsByPath.scss';\n\nconst block = cn('yt-tablet-errors-by-path');\n\nexport function TabletErrorsRequest() {\n return (\n <WithStickyToolbar\n hideToolbarShadow\n className={block()}\n doubleHeight\n toolbar={<TabletErrorsRequestToolbar className={block('toolbar')} />}\n content={<TabletErrorsByPathTable className={block('content')} />}\n />\n );\n}\n\nexport function TabletErrorsRequestToolbar({className}: {className: string}) {\n const dispatch = useDispatch();\n const {\n timeRange: {from, to, shortcutValue},\n tabletIdFilter,\n pageFilter,\n methodsFilter,\n } = useTabletErrorFromApiLoad();\n const pageCount = useSelector(getTabletErrorsByPathPageCount);\n\n const allMethods = useSelector(getTabletErrorsByPathAllMethods) ?? [];\n\n return (\n <div className={className}>\n <YTTimeline\n from={from!}\n to={to!}\n shortcut={shortcutValue}\n onUpdate={({from, to, shortcutValue}) => {\n dispatch(\n tabletErrorsByPathActions.updateFilter({\n timeRangeFilter: {from, to, shortcutValue},\n }),\n );\n }}\n hasRuler={true}\n />\n <Toolbar\n itemsToWrap={[\n {\n node: (\n <SimplePagination\n value={pageFilter}\n min={0}\n max={Math.max(0, pageCount - 1)}\n onChange={(pageFilter) => {\n dispatch(tabletErrorsByPathActions.updateFilter({pageFilter}));\n }}\n />\n ),\n },\n {\n node: (\n <TextInputWithDebounce\n className={block('tablet-id-filter')}\n value={tabletIdFilter}\n onUpdate={(value) => {\n dispatch(\n tabletErrorsByPathActions.updateFilter({\n tabletIdFilter: value,\n }),\n );\n }}\n placeholder=\"Tablet Id filter...\"\n />\n ),\n },\n {\n node: (\n <Select\n multiple\n label=\"Methods:\"\n value={methodsFilter}\n items={allMethods?.map((value) => {\n return {value, text: value};\n })}\n onUpdate={(v) =>\n dispatch(\n tabletErrorsByPathActions.updateFilter({\n methodsFilter: v,\n }),\n )\n }\n placeholder=\"Select...\"\n hasClear\n maxVisibleValuesTextLength={80}\n />\n ),\n },\n {\n node: docsUrl(\n <HelpLink url={UIFactory.docsUrls['bundles:tablet-errors']} />,\n ),\n },\n ]}\n />\n </div>\n );\n}\n\nfunction useTabletErrorFromApiLoad() {\n const path = useSelector(getPath);\n const timeRange = useSelector(getTabletErrorsByPathTimeRange);\n const methodsFilter = useSelector(getTabletErrorsByPathMethodsFilter);\n const pageFilter = useSelector(getTabletErrorsByPathPageFilter);\n const {id} = useSelector(getNavigationPathAttributes) ?? {};\n const tabletIdFilter = useSelector(getTabletErrorsByPathTabletIdFilter);\n\n const dispatch = useDispatch();\n\n React.useEffect(() => {\n if (!path || !id) {\n return;\n }\n\n if (timeRange.from === undefined || timeRange.to === undefined) {\n const {from, to} = calcFromTo(timeRange);\n dispatch(\n tabletErrorsByPathActions.updateFilter({timeRangeFilter: {...timeRange, from, to}}),\n );\n } else {\n dispatch(\n loadTabletErrorsByTablePath(pageFilter, {\n table_id: id,\n table_path: path,\n start_timestamp: Math.floor(timeRange.from / 1000),\n end_timestamp: Math.ceil(timeRange.to / 1000),\n methods: methodsFilter.length ? methodsFilter : undefined,\n ...(tabletIdFilter ? {tablet_id: tabletIdFilter} : {}),\n }),\n );\n }\n }, [path, id, timeRange, methodsFilter, pageFilter, tabletIdFilter, dispatch]);\n return {timeRange, methodsFilter, tabletIdFilter, pageFilter};\n}\n","import React, {useEffect} from 'react';\nimport {useDispatch, useSelector} from '../../../../store/redux-hooks';\n\nimport {SegmentedRadioGroup} from '@gravity-ui/uikit';\n\nimport {getConfigData} from '../../../../config/ui-settings';\nimport {updateTabletErrorsViewMode} from '../../../../store/actions/navigation/tabs/tablet-errors/tablet-errors-background';\nimport {tabletErrorsByPathActions} from '../../../../store/reducers/navigation/tabs/tablet-errors/tablet-errors-by-path';\nimport {\n getTabletErrorsBackgroundCount,\n getTabletErrorsViewMode,\n} from '../../../../store/selectors/navigation/tabs/tablet-errors-background';\n\nimport TabletErrorsBackground from './TabletErrorsBackground';\nimport {TabletErrorsRequest} from './TabletErrorsByPath/TabletErrorsByPath';\n\nexport default function TabletErrors() {\n const dispatch = useDispatch();\n\n const viewMode = useSelector(getTabletErrorsViewMode);\n const backgroundErrorCount = useSelector(getTabletErrorsBackgroundCount);\n\n const allowTabletErrorsAPI = getConfigData().allowTabletErrorsAPI;\n\n const content =\n viewMode === 'request_errors' ? <TabletErrorsRequest /> : <TabletErrorsBackground />;\n\n useEffect(() => {\n return () => {\n dispatch(tabletErrorsByPathActions.updateFilter({timeRangeFilter: undefined}));\n dispatch(updateTabletErrorsViewMode());\n };\n }, []);\n\n return (\n <div>\n {allowTabletErrorsAPI && (\n <SegmentedRadioGroup<typeof viewMode>\n value={viewMode}\n onUpdate={(v) => dispatch(updateTabletErrorsViewMode(v))}\n options={[\n {value: 'request_errors', content: 'Request errors'},\n {\n value: 'background_errors',\n content: `Background errors ${backgroundErrorCount}`,\n },\n ]}\n />\n )}\n {content}\n </div>\n );\n}\n","import {ThunkAction} from 'redux-thunk';\nimport {UnknownAction} from '@reduxjs/toolkit';\n\nimport CancelHelper, {isCancelled} from '../../../../utils/cancel-helper';\nimport {prepareRequest} from '../../../../utils/navigation';\nimport {getPath, getTransaction} from '../../../selectors/navigation';\nimport {YTApiId, ytApiV3Id} from '../../../../rum/rum-wrap-api';\nimport {RootState} from '../../../../store/reducers';\nimport {userAttributesActions} from '../../../../store/reducers/navigation/tabs/user-attributes';\nimport {TYPED_OUTPUT_FORMAT} from '../../../../constants';\n\ntype AsyncAction<R = void> = ThunkAction<R, RootState, unknown, UnknownAction>;\n\nconst requests = new CancelHelper();\n\nexport function requestUserAttributes(): AsyncAction<Promise<void>> {\n return async (dispatch, getState) => {\n const state = getState();\n const path = getPath(state);\n const transaction = getTransaction(state);\n\n dispatch(userAttributesActions.onRequest());\n requests.removeAllRequests();\n\n return ytApiV3Id\n .get(YTApiId.navigationUserAttributes, {\n parameters: prepareRequest('/@user_attributes', {\n path,\n transaction,\n }),\n output_format: TYPED_OUTPUT_FORMAT,\n cancellation: requests.saveCancelToken,\n })\n .then((attributes) => {\n dispatch(userAttributesActions.onSuccess({attributes}));\n })\n .catch((error) => {\n if (!isCancelled(error)) {\n dispatch(userAttributesActions.onFailure({error}));\n }\n });\n };\n}\n\nexport function abortAndReset(): AsyncAction<Promise<void>> {\n return async (_dispatch) => {\n requests.removeAllRequests();\n };\n}\n","import {RootState} from '../../../../store/reducers';\n\nexport const getUserAttributes = (state: RootState) =>\n state.navigation.tabs.userAttributes.attributes;\nexport const getUserAttributesLoadInfo = (state: RootState) => ({\n loading: state.navigation.tabs.userAttributes.loading,\n loaded: state.navigation.tabs.userAttributes.loaded,\n error: state.navigation.tabs.userAttributes.error,\n});\n","import React, {useEffect} from 'react';\nimport {useDispatch, useSelector} from '../../../../store/redux-hooks';\nimport unipika from '../../../../common/thor/unipika';\nimport cn from 'bem-cn-lite';\nimport {Loader} from '@gravity-ui/uikit';\n\nimport LoadDataHandler from '../../../../components/LoadDataHandler/LoadDataHandler';\nimport {YsonDownloadButton} from '../../../../components/DownloadAttributesButton';\nimport Yson from '../../../../components/Yson/Yson';\n\nimport {\n abortAndReset,\n requestUserAttributes,\n} from '../../../../store/actions/navigation/tabs/user-attributes';\nimport {\n getUserAttributes,\n getUserAttributesLoadInfo,\n} from '../../../../store/selectors/navigation/tabs/user-attributes';\nimport {getPath} from '../../../../store/selectors/navigation';\nimport {getEffectiveMode} from '../../../../store/selectors/navigation/navigation';\n\nimport {useRumMeasureStop} from '../../../../rum/RumUiContext';\nimport {useAppRumMeasureStart} from '../../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../../rum/rum-measure-types';\n\nimport {calculateLoadingStatus, isFinalLoadingStatus} from '../../../../utils/utils';\nimport {pathToFileName} from '../../helpers/pathToFileName';\n\nimport './UserAttributes.scss';\n\nconst block = cn('navigation-user-attributes');\n\nfunction UserAttributes() {\n const dispatch = useDispatch();\n const {loading, loaded, error} = useSelector(getUserAttributesLoadInfo);\n const path = useSelector(getPath);\n const mode = useSelector(getEffectiveMode);\n const userAttributes = useSelector(getUserAttributes);\n const settings = unipika.prepareSettings();\n\n useEffect(() => {\n dispatch(requestUserAttributes());\n return () => {\n dispatch(abortAndReset);\n };\n }, [path, mode]);\n\n const initialLoading = loading && !loaded;\n\n return (\n <LoadDataHandler loaded error={Boolean(error)}>\n <div className={block({loading: initialLoading})}>\n {initialLoading ? (\n <Loader />\n ) : (\n <Yson\n value={userAttributes}\n settings={settings}\n extraTools={\n <YsonDownloadButton\n value={userAttributes}\n settings={settings}\n name={`user_attributes_${pathToFileName(path)}`}\n />\n }\n folding\n />\n )}\n </div>\n </LoadDataHandler>\n );\n}\n\nexport default function UserAttributesWithRum() {\n const {loaded, loading, error} = useSelector(getUserAttributesLoadInfo);\n const loadState = calculateLoadingStatus(Boolean(loading), Boolean(loaded), error);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.NAVIGATION_TAB_USER_ATTRIBUTES,\n startDeps: [loading],\n allowStart: ([loading]) => Boolean(loading),\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.NAVIGATION_TAB_USER_ATTRIBUTES,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <UserAttributes />;\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport {useSelector} from '../../../../store/redux-hooks';\nimport {getNavigationTableMountConfig} from '../../../../store/selectors/navigation/content/table-mount-config';\nimport {YTErrorBlock} from '../../../../components/Error/Error';\nimport Yson from '../../../../components/Yson/Yson';\nimport {getNavigationMountConfigYsonSettings} from '../../../../store/selectors/thor/unipika';\nimport {YsonDownloadButton} from '../../../../components/DownloadAttributesButton';\nimport {UnipikaValue} from '../../../../components/Yson/StructuredYson/StructuredYsonTypes';\nimport {pathToFileName} from '../../helpers/pathToFileName';\nimport {getPath} from '../../../../store/selectors/navigation';\n\nconst block = cn('table-mount-config');\n\nfunction TableMountConfig() {\n const {data, error} = useSelector(getNavigationTableMountConfig);\n const path = useSelector(getPath);\n\n const settings = useSelector(getNavigationMountConfigYsonSettings);\n\n return (\n <div className={block('table-mount-config')}>\n {error ? (\n <YTErrorBlock error={error} topMargin={'none'} />\n ) : (\n <Yson\n value={data}\n settings={settings}\n folding\n extraTools={\n <YsonDownloadButton\n value={data as UnipikaValue}\n settings={settings}\n name={`mount_config_${pathToFileName(path)}`}\n />\n }\n />\n )}\n </div>\n );\n}\n\nexport default React.memo(TableMountConfig);\n","import React from 'react';\nimport withLazyLoading from '../../../../hocs/withLazyLoading';\n\nfunction importFlow() {\n return import(/* webpackChunkName: \"navigation-flow\" */ './Flow');\n}\n\nexport const Flow = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importFlow()).Flow};\n }),\n);\n","import React from 'react';\n\nimport Consumer from '../../../../../pages/navigation/tabs/Consumer/Consumer';\nimport Queue from '../../../../../pages/navigation/tabs/Queue/Queue';\nimport ACL from '../../../../../pages/navigation/tabs/ACL/ACL';\nimport Locks from '../../../../../pages/navigation/tabs/Locks/Locks';\nimport Schema from '../../../../../pages/navigation/tabs/Schema/Schema';\nimport Tablets from '../../../../../pages/navigation/tabs/Tablets/Tablets';\nimport Attributes from '../../../../../pages/navigation/tabs/Attributes/Attributes';\nimport AccessLog from '../../../../../pages/navigation/tabs/AccessLog/AccessLog';\nimport TabletErrors from '../../../../../pages/navigation/tabs/TabletErrors/TabletErrors';\nimport UserAttributes from '../../../../../pages/navigation/tabs/UserAttributes/UserAttributes';\nimport TableMountConfig from '../../../../../pages/navigation/tabs/TableMountConfig/TableMountConfig';\nimport {Flow} from '../../../../../pages/navigation/tabs/Flow';\n\nimport {Tab} from '../../../../../constants/navigation';\nimport UIFactory from '../../../../../UIFactory';\n\nconst getSupportedAttributeTypes = () => {\n const supportedAttributeTypes: Record<string, React.ComponentType> = {\n acl: ACL,\n locks: Locks,\n schema: Schema,\n tablets: Tablets,\n attributes: Attributes,\n tablet_errors: TabletErrors,\n user_attributes: UserAttributes,\n [Tab.ACCESS_LOG]: AccessLog,\n [Tab.AUTO]: React.Fragment,\n [Tab.CONSUMER]: Consumer,\n [Tab.MOUNT_CONFIG]: TableMountConfig,\n [Tab.QUEUE]: Queue,\n [Tab.FLOW]: Flow,\n };\n\n UIFactory.getNavigationExtraTabs().forEach((tab) => {\n supportedAttributeTypes[tab.value] = tab.component;\n });\n\n return supportedAttributeTypes;\n};\n\nexport default (mode: string) => {\n const supportedAttributeTypes = getSupportedAttributeTypes();\n\n return mode in supportedAttributeTypes\n ? supportedAttributeTypes[mode as keyof typeof supportedAttributeTypes]\n : undefined;\n};\n","import getComponentByContentType from './getComponentByContentType';\nimport {Tab} from '../../../../../constants/navigation';\nimport {YTError} from '../../../../../../@types/types';\nimport ypath from '../../../../../common/thor/ypath';\nimport getComponentByMode from './getComponentByMode';\n\nexport function checkContentIsSupported(type: string, mode: string) {\n if (mode === Tab.CONTENT) return Boolean(getComponentByContentType(type));\n return Boolean(getComponentByMode(mode));\n}\n\nfunction hasViewerForType(type: string): boolean {\n return checkContentIsSupported(type, Tab.CONTENT);\n}\n\nexport function itemNavigationAllowed(item: {\n type: string;\n targetPathBroken: unknown;\n parsedPathError?: YTError;\n}) {\n if (item) {\n if (\n item.parsedPathError ||\n (item.type === 'link' && ypath.getBoolean(item.targetPathBroken))\n ) {\n return false;\n }\n\n const noAccess = item.type === undefined;\n\n return hasViewerForType(item.type) || noAccess;\n }\n\n return false;\n}\n","import React, {FC} from 'react';\nimport cn from 'bem-cn-lite';\nimport ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\nimport {Tab} from '../../../../constants/navigation';\nimport NavigationDescription from '../../NavigationDescription/NavigationDescription';\nimport {getComponentByContentType, getComponentByMode} from './helpers';\n\nconst block = cn('navigation');\n\ntype Props = {\n type: string;\n mode: string;\n};\n\nconst ContentViewer: FC<Props> = ({type, mode}) => {\n const isContentTab = mode === Tab.CONTENT;\n const Component = isContentTab ? getComponentByContentType(type) : getComponentByMode(mode);\n\n if (!Component) return undefined;\n\n return (\n <ErrorBoundary>\n <div className={block('viewer', {mode})}>\n {isContentTab && <NavigationDescription className={block('description')} />}\n <Component />\n </div>\n </ErrorBoundary>\n );\n};\n\nexport default ContentViewer;\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {\n getNavigationCheckPermissionsError,\n getNavigationIsAccountUsable,\n getNavigationIsWritable,\n getNavigationPathAccount,\n} from '../../../store/selectors/navigation/navigation';\nimport {useSelector} from '../../../store/redux-hooks';\nimport {YTErrorBlock} from '../../../components/Block/Block';\nimport {getPath} from '../../../store/selectors/navigation';\nimport {genAccountsAclLink} from '../../../utils/accounts/accounts';\nimport {getCluster} from '../../../store/selectors/global';\nimport Link from '../../../components/Link/Link';\n\nimport './NavigationPermissionsNotice.scss';\nconst block = cn('navigation-permissions-notice');\n\nexport function NavigationPermissionsNotice() {\n const path = useSelector(getPath);\n const isWriteable = useSelector(getNavigationIsWritable);\n const isAccountUsable = useSelector(getNavigationIsAccountUsable);\n const checkPermissionsError = useSelector(getNavigationCheckPermissionsError);\n const account = useSelector(getNavigationPathAccount);\n const cluster = useSelector(getCluster);\n\n if (checkPermissionsError) {\n return <YTErrorBlock error={checkPermissionsError} message={'Check permissions error'} />;\n }\n\n const accountAclLink = genAccountsAclLink(cluster, account);\n\n return isWriteable && !isAccountUsable ? (\n <YTErrorBlock\n type={'alert'}\n message={\n <div className={block()}>\n You cannot modify <span className={block('path')}> {path} </span> since you have\n no permission <span className={block('use')}> use </span> to the corresponding\n account\n <Link routed url={accountAclLink}>\n {' '}\n {account}\n </Link>\n .\n </div>\n }\n />\n ) : null;\n}\n","import {Page} from '../../constants';\nimport {AccountsTab} from '../../constants/accounts/accounts';\n\nexport function genAccountsAclLink(cluster: string, account: string) {\n return `/${cluster}/${Page.ACCOUNTS}/${AccountsTab.ACL}?account=${account}`;\n}\n","import React from 'react';\nimport {Button, Flex, Link} from '@gravity-ui/uikit';\nimport {ArrowUpRightFromSquare} from '@gravity-ui/icons';\n\nimport isEmpty_ from 'lodash/isEmpty';\nimport isEqual_ from 'lodash/isEqual';\nimport map_ from 'lodash/map';\nimport pickBy_ from 'lodash/pickBy';\nimport reduce_ from 'lodash/reduce';\n\nimport cn from 'bem-cn-lite';\n\nimport ypath from '../../../common/thor/ypath';\n\n// @ts-ignore\nimport {\n DialogError,\n DialogField,\n DialogTabField,\n FormApi,\n YTDFDialog,\n} from '../../../components/Dialog';\n\nimport {\n invalidateYTAnnotation,\n useExternalDescriptionQuery,\n} from '../../../store/api/navigation/tabs/description';\nimport {\n getNavigationAttributesEditorAttributes,\n getNavigationAttributesEditorDynamicTables,\n getNavigationAttributesEditorError,\n getNavigationAttributesEditorMapNodes,\n getNavigationAttributesEditorPath,\n getNavigationAttributesEditorStaticTables,\n getNavigationAttributesEditorVisible,\n} from '../../../store/selectors/navigation/modals/attributes-editor';\nimport {useDispatch, useSelector} from '../../../store/redux-hooks';\nimport {\n hideNavigationAttributesEditor,\n navigationSetNodeAttributes,\n} from '../../../store/actions/navigation/modals/attributes-editor';\nimport {getMediumListNoCache} from '../../../store/selectors/thor';\n\nimport {getCluster} from '../../../store/selectors/global';\nimport {getPath} from '../../../store/selectors/navigation';\n\nimport {\n InMemoryMode,\n InMemoryModeType,\n StorageOptions,\n compressionCodecValueFromString,\n compressionCodecValueToString,\n erasureCodecFromStorageOption,\n normalizeErasureCodec,\n storageOptionFromErasureCodec,\n} from '../../../utils/cypress-attributes';\nimport {makeLink} from './CreateTableModal/CreateTableModal';\nimport {\n getCompressionCodecs,\n getErasureCodecs,\n} from '../../../store/selectors/global/supported-features';\nimport {docsUrl} from '../../../config';\n\nimport './AttributesEditor.scss';\nimport UIFactory from '../../../UIFactory';\n\nconst block = cn('navigation-attributes-editor');\n\ninterface FormValues {\n general: {\n path: Array<{title: string}>;\n account: string;\n primary_medium: string;\n tablet_cell_bundle: string;\n in_memory_mode: InMemoryModeType | '';\n\n expiration_time: {from?: string | number};\n expiration_timeout: {value: number};\n };\n storage: {\n path: Array<{title: string}>;\n optimize_for: 'lookup' | 'scan';\n compression_codec: Array<string>;\n erasure_codec: string;\n replication_factor: number;\n\n runMerge: true;\n _storageOption: 'replication' | 'erasure';\n };\n description: {\n annotation: {value: string};\n };\n}\n\n// eslint-disable-next-line complexity\nfunction AttributesEditorLoaded() {\n const paths = useSelector(getNavigationAttributesEditorPath);\n const attributesMap = useSelector(getNavigationAttributesEditorAttributes);\n\n const singleMode = !(paths?.length! > 1);\n const attributes = paths?.length === 1 ? attributesMap[paths[0]] : {};\n\n const mediumList = useSelector(getMediumListNoCache);\n const dispatch = useDispatch();\n const storeError = useSelector(getNavigationAttributesEditorError);\n\n const [stateError, setErr] = React.useState<any>(undefined);\n const [currentTab, setCurrentTab] = React.useState<string | undefined>();\n\n const error = stateError || storeError;\n\n const handleClose = React.useCallback(() => {\n dispatch(hideNavigationAttributesEditor());\n }, [dispatch]);\n\n const hasMapNodes = useSelector(getNavigationAttributesEditorMapNodes).length > 0;\n const hasStaticTables = useSelector(getNavigationAttributesEditorStaticTables).length > 0;\n const hasDynamicTables = useSelector(getNavigationAttributesEditorDynamicTables).length > 0;\n\n const hasTables = hasStaticTables || hasDynamicTables || hasMapNodes; // map-node is required for inheritance\n const hasDynTableOrMapNode = hasMapNodes || hasDynamicTables;\n\n const erasureCodec = ypath.getValue(attributes, '/@erasure_codec');\n\n const pathsValues = React.useMemo(\n () =>\n map_(paths, (item) => {\n return {\n title: item,\n };\n }),\n [paths],\n );\n\n const annotationInitial = {\n value: ypath.getValue(attributes, '/@annotation'),\n };\n const initialValues: FormValues = {\n general: {\n path: pathsValues,\n account: ypath.getValue(attributes, '/@account') || '',\n primary_medium: ypath.getValue(attributes, '/@primary_medium') || '',\n tablet_cell_bundle: ypath.getValue(attributes, '/@tablet_cell_bundle') || '',\n in_memory_mode: ypath.getValue(attributes, '/@in_memory_mode'),\n\n expiration_time: {from: ypath.getValue(attributes, '/@expiration_time')},\n expiration_timeout: {value: ypath.getValue(attributes, '/@expiration_timeout')},\n },\n storage: {\n path: pathsValues,\n optimize_for: ypath.getValue(attributes, '/@optimize_for') || 'lookup',\n compression_codec: compressionCodecValueFromString(\n ypath.getValue(attributes, '/@compression_codec'),\n ),\n erasure_codec: normalizeErasureCodec(erasureCodec),\n replication_factor: ypath.getValue(attributes, '/@replication_factor'),\n\n runMerge: true,\n _storageOption:\n storageOptionFromErasureCodec(erasureCodec) || StorageOptions.REPLICATION,\n },\n description: {\n annotation: annotationInitial,\n },\n };\n\n const tmp = ypath.getValue(attributes, '/@annotation_path');\n const annotationPath = paths && tmp !== paths[0] ? tmp : undefined;\n\n const handleAdd = React.useCallback(\n async (form: FormApi<FormValues, FormValues>) => {\n try {\n const {values} = form.getState();\n const {general, storage, description} = values;\n\n const initials = {\n ...initialValues.general,\n ...initialValues.storage,\n };\n\n const dataDiff = reduce_(\n {...general, ...storage, ...description},\n (acc, value, key) => {\n if (!isEqual_(value, (initials as any)[key])) {\n (acc as any)[key] = value;\n }\n return acc;\n },\n {} as Partial<typeof initials>,\n );\n\n if (dataDiff.in_memory_mode === '') {\n delete dataDiff.in_memory_mode;\n }\n\n const {\n account,\n primary_medium,\n tablet_cell_bundle,\n in_memory_mode,\n compression_codec,\n erasure_codec,\n replication_factor,\n _storageOption,\n optimize_for,\n } = dataDiff;\n\n const generalAttributes: any = {\n account,\n primary_medium,\n tablet_cell_bundle,\n in_memory_mode,\n };\n\n const storageAttributes: Partial<\n Omit<FormValues['storage'], 'compression_codec'> & {\n compression_codec: string;\n }\n > = {};\n\n if (optimize_for) {\n storageAttributes['optimize_for'] = optimize_for;\n }\n\n if (compression_codec) {\n storageAttributes['compression_codec'] =\n compressionCodecValueToString(compression_codec);\n }\n if (_storageOption) {\n storageAttributes['erasure_codec'] = erasureCodecFromStorageOption(\n _storageOption,\n erasure_codec,\n );\n }\n if (storage._storageOption === StorageOptions.REPLICATION) {\n if (replication_factor) {\n storageAttributes['replication_factor'] = Number(replication_factor);\n }\n } else if (erasure_codec) {\n storageAttributes['erasure_codec'] = erasureCodecFromStorageOption(\n _storageOption,\n erasure_codec,\n );\n }\n\n const {\n annotation: {value: annotation},\n } = description;\n\n const generalAttrs = pickBy_(generalAttributes, (v) => v !== undefined);\n if (general.expiration_time.from !== initialValues.general.expiration_time.from) {\n generalAttrs.expiration_time = general.expiration_time.from;\n }\n\n if (general.expiration_timeout.value !== initials.expiration_timeout.value) {\n generalAttrs.expiration_timeout = general.expiration_timeout.value;\n }\n\n await dispatch(\n navigationSetNodeAttributes(\n {\n ...generalAttrs,\n ...Object.assign(\n {},\n annotation === annotationInitial.value\n ? {}\n : {\n annotation,\n },\n ),\n },\n storageAttributes,\n hasStaticTables && storage.runMerge,\n ),\n );\n dispatch(invalidateYTAnnotation());\n } catch (e) {\n setErr(e);\n throw e;\n }\n },\n [dispatch, initialValues, setErr],\n );\n\n const forEachStaticTable = !hasStaticTables ? '' : ' for each static table ';\n const mergeNoticeAndError: Array<DialogField<FormValues>> = [];\n\n if (hasStaticTables) {\n mergeNoticeAndError.push({\n name: 'runMergeNotice',\n type: 'block',\n visibilityCondition: {\n when: 'storage.runMerge',\n isActive: (runMerge: boolean) => !runMerge,\n },\n extras: {\n children: (\n <span className={block('run-notice')}>\n Do not forget to run merge-operation manually\n {forEachStaticTable}\n to completely apply changes of storage attributes.\n </span>\n ),\n },\n });\n }\n if (error) {\n mergeNoticeAndError.push({\n name: 'error',\n type: 'block' as const,\n extras: {\n children: <DialogError error={error} />,\n },\n });\n }\n\n const annotationTab: Array<DialogTabField<DialogField<FormValues>>> = [];\n\n if (singleMode) {\n const fields: Array<DialogField<FormValues>> = [\n {\n name: 'annotation',\n type: 'annotation' as const,\n fullWidth: true,\n extras: {\n valuePath: annotationPath,\n className: block('full-height'),\n initialValue: annotationInitial,\n },\n },\n ...mergeNoticeAndError,\n ];\n\n annotationTab.push({\n name: 'description',\n type: 'tab-vertical',\n title: 'Description',\n fields,\n });\n }\n\n const inMemoryModeField: DialogField = {\n name: 'in_memory_mode', // the attribute is not inheritable, so we do not need to display for map-nodes\n type: 'radio' as const,\n caption: 'In memory mode',\n extras: {\n options: [\n {value: InMemoryMode.NONE, label: 'None'},\n {value: InMemoryMode.COMPRESSED, label: 'Compressed'},\n {value: InMemoryMode.UNCOMPRESSED, label: 'Uncompressed'},\n ],\n },\n tooltip: docsUrl(makeLink(UIFactory.docsUrls['dynamic-tables:overview#in_memory'])),\n };\n\n const optimizeForField: DialogField = {\n name: 'optimize_for',\n type: 'radio',\n caption: 'Optimize for',\n tooltip: docsUrl(makeLink(UIFactory.docsUrls['storage:chunks#optimize_for'])),\n extras: {\n options: [\n {value: 'scan', label: 'Scan'},\n {value: 'lookup', label: 'Lookup'},\n ],\n },\n };\n\n const compressionCodecs = useSelector(getCompressionCodecs);\n const erasureCodecs = useSelector(getErasureCodecs);\n\n return (\n <YTDFDialog\n className={block({'single-mode': singleMode})}\n visible={true}\n onAdd={handleAdd}\n onClose={handleClose}\n size={'l'}\n validate={validateForm}\n headerProps={{\n title: 'Edit attributes',\n }}\n initialValues={initialValues}\n fields={[\n {\n name: 'general',\n title: 'General',\n type: 'tab-vertical',\n fields: [\n {\n name: 'path',\n type: 'editable-list',\n caption: 'Path',\n extras: {\n frozen: true,\n className: block('path-list'),\n },\n },\n {\n name: 'account',\n type: 'usable-account',\n caption: 'Account',\n tooltip: docsUrl(makeLink(UIFactory.docsUrls['storage:accounts'])),\n extras: {\n placeholder: 'Enter account name...',\n },\n },\n {\n name: 'primary_medium',\n type: 'yt-select-single',\n caption: 'Primary medium',\n tooltip: docsUrl(makeLink(UIFactory.docsUrls['storage:media#primary'])),\n extras: {\n placeholder: 'Select primary medium',\n items: mediumList.map((value: string) => {\n return {value, text: value};\n }),\n width: 'max',\n },\n },\n ...(!hasDynTableOrMapNode\n ? []\n : [\n {\n name: 'tablet_cell_bundle',\n type: 'tablet-cell-bundle' as const,\n caption: 'Tablet cell bundle',\n tooltip: docsUrl(\n makeLink(\n UIFactory.docsUrls[\n 'dynamic-tables:concepts#tablet_cell_bundles'\n ],\n ),\n ),\n extras: {\n placeholder: 'Select tablet cell bundle',\n },\n },\n ]),\n ...(!hasDynamicTables ? [] : [inMemoryModeField]),\n {\n name: 'expiration_time',\n type: 'datepicker',\n caption: 'Expiration time',\n tooltip: docsUrl(makeLink(UIFactory.docsUrls['cypress:ttl'])),\n extras: {\n format: 'yyyy-MM-dd HH:mm',\n range: false,\n },\n },\n {\n name: 'expiration_timeout',\n type: 'time-duration',\n caption: 'Expiration timeout',\n tooltip: docsUrl(makeLink(UIFactory.docsUrls['cypress:ttl'])),\n },\n ...mergeNoticeAndError,\n ],\n },\n {\n name: 'storage',\n type: 'tab-vertical',\n title: 'Storage',\n fields: [\n {\n name: 'path',\n type: 'editable-list',\n caption: 'Path',\n extras: {\n frozen: true,\n className: block('path-list'),\n },\n },\n ...(!hasTables ? [] : [optimizeForField]),\n {\n name: 'compression_codec',\n type: 'select-with-subitems' as const,\n caption: 'Compression',\n tooltip: docsUrl(\n makeLink(\n UIFactory.docsUrls['storage:compression#compression_codecs'],\n ),\n ),\n extras: {\n ...compressionCodecs,\n disablePortal: false,\n },\n },\n {\n name: '_storageOption',\n type: 'radio',\n caption: 'Storage options',\n tooltip: docsUrl(\n makeLink(UIFactory.docsUrls['storage:replication#replication']),\n ),\n extras: {\n options: [\n {\n value: StorageOptions.REPLICATION,\n label: 'Replication',\n },\n {\n value: StorageOptions.ERASURE,\n label: 'Erasure encoding',\n },\n ],\n },\n },\n {\n name: 'replication_factor',\n type: 'text',\n caption: 'Number of replicas',\n touched: true,\n visibilityCondition: {\n when: 'storage._storageOption',\n isActive: (value: string) => value === StorageOptions.REPLICATION,\n },\n tooltip: docsUrl(\n makeLink(UIFactory.docsUrls['storage:replication#replication']),\n ),\n },\n {\n name: 'erasure_codec',\n type: 'yt-select-single',\n caption: 'Erasure codec',\n tooltip: docsUrl(\n makeLink(UIFactory.docsUrls['storage:replication#erasure']),\n ),\n visibilityCondition: {\n when: 'storage._storageOption',\n isActive: (value: string) => value === StorageOptions.ERASURE,\n },\n extras: {\n items: erasureCodecs,\n hideFilter: true,\n width: 'max',\n },\n },\n ...(!hasStaticTables\n ? []\n : [\n {\n name: 'runMerge',\n type: 'tumbler' as const,\n caption: 'Run merge operation',\n tooltip: (\n <span>\n Merge operation is required to completely apply\n changes of storage attributes, it will be started with\n enabled force transform flag.\n </span>\n ),\n },\n ]),\n ...mergeNoticeAndError,\n ],\n },\n ...annotationTab,\n ]}\n onActiveTabChange={(tab) => setCurrentTab(tab)}\n footerProps={{\n content: currentTab === 'description' && <CreateExternalDescriptionButton />,\n }}\n />\n );\n}\n\nfunction CreateExternalDescriptionButton() {\n const path = useSelector(getPath);\n const cluster = useSelector(getCluster);\n\n const {data: externalDescription} = useExternalDescriptionQuery({cluster, path});\n\n return (\n <>\n {externalDescription?.externalAnnotationLink && (\n <Link href={externalDescription?.externalAnnotationLink} target={'_blank'}>\n <Button view={'outlined'} size={'l'}>\n <Flex alignItems={'center'} gap={1}>\n {UIFactory?.externalAnnotationSetup?.externalServiceName ||\n 'Create external description'}{' '}\n (Recomended)\n <ArrowUpRightFromSquare />\n </Flex>\n </Button>\n </Link>\n )}\n </>\n );\n}\n\nexport default function AttributesEditor() {\n const path = useSelector(getNavigationAttributesEditorPath);\n const visible = useSelector(getNavigationAttributesEditorVisible);\n\n if (!path?.length || !visible) {\n return null;\n }\n return <AttributesEditorLoaded />;\n}\n\nfunction validateReplicationFactor(str: string): string | undefined {\n const v = parseInt(str);\n if (!str || (String(str) === String(v) && v >= 1 && v <= 20)) {\n return undefined;\n }\n\n return 'The value must be an integer in range [1; 20]';\n}\n\nfunction validateStorage(storage: any) {\n const replication_factor = validateReplicationFactor(storage.replication_factor);\n if (storage._storageOption !== StorageOptions.REPLICATION || !replication_factor) {\n return undefined;\n }\n return {replication_factor};\n}\n\nfunction validateForm({storage}: FormValues) {\n const res: any = {\n storage: validateStorage(storage),\n };\n const ret = pickBy_(res, (v) => !isEmpty_(v));\n return ret;\n}\n","import ypath from '../../../../common/thor/ypath';\n\nimport {RootState} from '../../../../store/reducers';\nimport {createSelector} from 'reselect';\nimport {makeCompressionCodecFinder} from '../../../../store/selectors/global/supported-features';\n\nexport const getRemoteCopyModalVisible = (state: RootState) =>\n state.navigation.modals.remoteCopyModal.showModal;\nexport const getRemoteCopyModalPaths = (state: RootState) =>\n state.navigation.modals.remoteCopyModal.paths;\nexport const getRemoteCopyAttributesMap = (state: RootState) =>\n state.navigation.modals.remoteCopyModal.attributesMap;\n\nexport const getRemoteCopyCodecs = createSelector(\n [getRemoteCopyModalPaths, getRemoteCopyAttributesMap, makeCompressionCodecFinder],\n (paths, attributesMap, findCompressionCodec) => {\n for (const path of paths) {\n const map = attributesMap[path];\n if (map) {\n const compCodec = findCompressionCodec(\n ypath.getValue(map, '/compression_codec') as string,\n );\n\n return {\n compression_codec: compCodec,\n erasure_codec: ypath.getValue(map, '/erasure_codec') as string,\n };\n }\n }\n return {};\n },\n);\n","import React from 'react';\nimport {useDispatch, useSelector} from '../../../store/redux-hooks';\n\nimport find_ from 'lodash/find';\nimport map_ from 'lodash/map';\n\nimport {DialogError, FormApi, YTDFDialog} from '../../../components/Dialog';\nimport {\n getRemoteCopyModalPaths,\n getRemoteCopyModalVisible,\n} from '../../../store/selectors/navigation/modals/remote-copy-modal';\nimport {\n hideRemoteCopyModal,\n remoteCopy,\n} from '../../../store/actions/navigation/modals/remote-copy-modal';\nimport {getCluster} from '../../../store/selectors/global';\nimport {makeLink} from './CreateTableModal/CreateTableModal';\nimport {YTError} from '../../../types';\nimport {RemoteCopyParams} from '../../../../@types/types';\nimport {AxiosError} from 'axios';\nimport {docsUrl} from '../../../config';\nimport UIFactory from '../../../UIFactory';\n\ntype Values = Omit<RemoteCopyParams, 'input_table_paths'> & {\n input_table_paths: Array<{title: string}>;\n};\n\nfunction RemoteCopyModal() {\n const dispatch = useDispatch();\n const visible = useSelector(getRemoteCopyModalVisible);\n const paths = useSelector(getRemoteCopyModalPaths);\n const cluster = useSelector(getCluster);\n\n const [error, setError] = React.useState<YTError | unknown>();\n\n const handleAdd = React.useCallback(\n async (form: FormApi<Values>) => {\n try {\n setError(undefined);\n const {values} = form.getState();\n const {input_table_paths, pool, ...rest} = values;\n await dispatch(\n remoteCopy({\n ...rest,\n input_table_paths: map_(input_table_paths, 'title'),\n pool: pool,\n }),\n );\n } catch (e: unknown) {\n setError((e as AxiosError<YTError>)?.response?.data || e);\n throw e;\n }\n },\n [setError],\n );\n\n const handleClose = React.useCallback(() => {\n dispatch(hideRemoteCopyModal());\n }, []);\n\n const pathsValues = React.useMemo(\n () =>\n map_(paths, (item) => {\n return {\n title: item,\n };\n }),\n [paths],\n );\n\n const calculateValueOnPoolsLoaded = React.useCallback(\n ({loadedPoolNames}: {loadedPoolNames: Array<string>}) => {\n const transferPool = find_(loadedPoolNames, (name) => name === `transfer_${cluster}`);\n return transferPool || '';\n },\n [cluster],\n );\n\n return !visible ? null : (\n <YTDFDialog<Values>\n visible={true}\n onAdd={handleAdd}\n onClose={handleClose}\n headerProps={{\n title: 'Remote copy',\n }}\n initialValues={{\n cluster_name: cluster,\n input_table_paths: pathsValues,\n schema_inference_mode: 'auto',\n output_table_path: pathsValues[0]?.title,\n override: false,\n }}\n fields={[\n {\n name: 'cluster_name',\n type: 'cluster',\n caption: 'Source cluster',\n extras: {\n disabled: true,\n width: 'max',\n },\n },\n {\n name: 'input_table_paths',\n type: 'editable-list',\n caption: paths.length > 1 ? 'Input paths' : 'Input path',\n extras: {\n frozen: true,\n },\n },\n {\n name: 'dstCluster',\n type: 'cluster',\n caption: 'Destination cluster',\n required: true,\n extras: {\n excludeClusters: [cluster],\n width: 'max',\n },\n },\n {\n name: 'output_table_path',\n type: 'text',\n caption: 'Output path',\n required: true,\n },\n {\n name: 'override',\n type: 'tumbler',\n caption: 'Override output',\n },\n {\n name: 'copy_attributes',\n type: 'tumbler',\n caption: 'Copy user attributes',\n },\n {\n name: 'schema_inference_mode',\n type: 'yt-select-single',\n caption: 'Schema inference',\n extras: {\n items: [\n {\n value: 'auto',\n text: 'Auto',\n },\n {\n value: 'from_input',\n text: 'From input',\n },\n {\n value: 'from_output',\n text: 'From output',\n },\n ],\n width: 'max',\n },\n },\n {\n name: 'pool',\n type: 'pool',\n caption: 'Pool',\n warning: (\n <>\n pool must have specified{' '}\n {docsUrl(\n makeLink(\n UIFactory.docsUrls['operations:remote_copy'],\n 'limits',\n true,\n ),\n )}\n </>\n ),\n visibilityCondition: {\n when: 'dstCluster',\n isActive: (value) => Boolean(value),\n },\n required: true,\n tooltip: docsUrl(\n makeLink(\n UIFactory.docsUrls[\n 'operations:operations_options#obshie-opcii-dlya-vseh-tipov-operacij'\n ],\n ),\n ),\n extras: ({dstCluster}: Values) => {\n return {\n cluster: dstCluster,\n placeholder: `(cluster: ${dstCluster}) pool name`,\n calculateValueOnPoolsLoaded,\n allowEphemeral: true,\n };\n },\n },\n ...(!error\n ? []\n : [\n {\n name: 'error',\n type: 'block' as const,\n extras: {\n children: <DialogError error={error} />,\n },\n },\n ]),\n ]}\n />\n );\n}\n\nexport default React.memo(RemoteCopyModal);\n","import {RootState} from '../../../../store/reducers';\n\nexport const getNavigationTableEraseModalVisible = (state: RootState) =>\n state.navigation.modals.tableEraseModal.visible;\nexport const getNavigationTableEraseModalPath = (state: RootState) =>\n state.navigation.modals.tableEraseModal.path;\n","import React from 'react';\n\nimport {DialogError, FormApi, YTDFDialog} from '../../../components/Dialog';\nimport {makeLink} from './CreateTableModal/CreateTableModal';\nimport {useDispatch, useSelector} from '../../../store/redux-hooks';\nimport {\n hideTableEraseModal,\n runTableErase,\n} from '../../../store/actions/navigation/modals/table-erase-modal';\nimport {\n getNavigationTableEraseModalPath,\n getNavigationTableEraseModalVisible,\n} from '../../../store/selectors/navigation/modals/table-erase-modal';\nimport {docsUrl} from '../../../config';\nimport UIFactory from '../../../UIFactory';\n\ninterface FormValues {\n path: string;\n range: string;\n combine_chunks: boolean;\n}\n\nexport default function TableEraseModal() {\n const visible = useSelector(getNavigationTableEraseModalVisible);\n const path = useSelector(getNavigationTableEraseModalPath);\n\n const [error, setError] = React.useState<any>();\n\n const dispatch = useDispatch();\n\n const handleAdd = React.useCallback(\n async (form: FormApi<FormValues>) => {\n try {\n const {range, combine_chunks} = form.getState().values;\n\n const [from, to] = range?.split(':') || [];\n await dispatch(\n runTableErase({\n path: path ?? '',\n from: from ? Number(from) : undefined,\n to: to ? Number(to) : undefined,\n combine_chunks,\n }),\n );\n } catch (e) {\n setError(e);\n throw e;\n }\n },\n [path, setError, dispatch],\n );\n\n const handleClose = React.useCallback(() => {\n dispatch(hideTableEraseModal());\n }, [dispatch]);\n\n return (\n <YTDFDialog<FormValues>\n visible={visible}\n headerProps={{\n title: 'Erase table rows',\n }}\n onAdd={handleAdd}\n onClose={handleClose}\n pristineSubmittable={true}\n initialValues={{\n path,\n }}\n fields={[\n {\n name: 'path',\n type: 'plain',\n caption: 'Path',\n },\n {\n name: 'range',\n type: 'text',\n caption: 'Range',\n tooltip: (\n <span>\n {docsUrl(makeLink(UIFactory.docsUrls['operations:erase']))}\n Leave empty to erase all rows. Or use two numbers separated by colon.\n Each number might be skipped.\n <br />\n Examples: &quot;10:20&quot;, &quot;10:&quot;, &quot;:20&quot;\n </span>\n ),\n validator: validateRange,\n extras: {\n placeholder: '10:20',\n },\n },\n {\n name: 'combine_chunks',\n type: 'tumbler',\n caption: 'Combine chunks',\n },\n ...(!error\n ? []\n : [\n {\n name: 'error',\n type: 'block' as const,\n extras: {\n children: <DialogError error={error} />,\n },\n },\n ]),\n ]}\n />\n );\n}\n\nconst RANGE = /^(\\d+:)|(\\d+:\\d+)|(:\\d+)$/;\n\nfunction validateRange(value: string) {\n if (!value || RANGE.test(value)) {\n return undefined;\n }\n\n return 'Enter two numbers separated by colon, like \"10:20\" or \":20\" or \"10:\"';\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {DialogError, DialogField, YTDFDialog} from '../../../../components/Dialog';\nimport {useDispatch, useSelector} from '../../../../store/redux-hooks';\nimport {\n getNavigationTableAttributesValues,\n getNavigationTableSortError,\n getNavigationTableSortPaths,\n getNavigationTableSortSuggestColumns,\n getNavigationTableSortVisible,\n} from '../../../../store/selectors/navigation/modals/table-merge-sort-modal';\nimport {\n hideTableSortModal,\n isPathStaticTable,\n runTableSort,\n tableSortModalLoadColumns,\n} from '../../../../store/actions/navigation/modals/table-merge-sort-modal';\nimport {getCurrentUserName} from '../../../../store/selectors/global';\nimport {makeLink} from '../CreateTableModal/CreateTableModal';\nimport './TableSortModal.scss';\nimport {ColumnSortByInfo} from './TableSortByControl';\nimport {docsUrl} from '../../../../config';\nimport UIFactory from '../../../../UIFactory';\nimport {WaitForDefaultPoolTree} from '../../../../hooks/global-pool-trees';\n\nconst block = cn('table-sort-modal');\n\nexport default function TableSortModal() {\n const login = useSelector(getCurrentUserName);\n const visible = useSelector(getNavigationTableSortVisible);\n const paths = useSelector(getNavigationTableSortPaths);\n const suggestError = useSelector(getNavigationTableSortError);\n const suggestColumns = useSelector(getNavigationTableSortSuggestColumns);\n const attributeValues = useSelector(getNavigationTableAttributesValues);\n\n const [error, setError] = React.useState<any>();\n\n const dispatch = useDispatch();\n\n const handleAdd = React.useCallback(\n async (form: any) => {\n try {\n const {values} = form.getState();\n const {paths, outputPath, columns, pool, poolTree} = values;\n\n const spec = Object.assign(\n {\n input_table_paths: paths,\n output_table_path: {\n $value: outputPath,\n $attributes: attributeValues,\n },\n sort_by: map_(columns, (item: ColumnSortByInfo) => {\n return {\n name: item.name,\n sort_order: item.descending\n ? ('descending' as const)\n : ('ascending' as const),\n };\n }),\n },\n pool ? {pool} : {},\n poolTree.length ? {pool_trees: poolTree} : {},\n );\n\n await dispatch(runTableSort(spec));\n return;\n } catch (e) {\n setError(e);\n throw e;\n }\n },\n [attributeValues, dispatch],\n );\n\n const handleClose = React.useCallback(() => {\n dispatch(hideTableSortModal());\n }, [dispatch]);\n\n const handlePathsChange = React.useCallback(\n (paths: Array<string>) => {\n dispatch(tableSortModalLoadColumns(paths));\n },\n [dispatch],\n );\n\n const title = paths?.length > 1 ? 'Sort tables' : 'Sort table';\n const outputPath = paths?.length === 1 ? paths[0] : undefined;\n\n const errorFields: Array<DialogField<FormValues>> = [];\n if (error) {\n errorFields.push({\n name: 'error',\n type: 'block',\n extras: {\n children: <DialogError error={error} />,\n },\n });\n }\n if (suggestError) {\n errorFields.push({\n name: 'error',\n type: 'block',\n extras: {\n children: <DialogError error={suggestError} />,\n },\n });\n }\n\n return !visible ? null : (\n <WaitForDefaultPoolTree>\n {({defaultPoolTree}) => (\n <YTDFDialog<FormValues>\n className={block()}\n visible={visible}\n headerProps={{\n title,\n }}\n onAdd={handleAdd}\n onClose={handleClose}\n initialValues={{\n paths,\n outputPath,\n columns: [],\n poolTree: [defaultPoolTree],\n }}\n fields={[\n {\n name: 'paths',\n type: 'editable-path-list',\n caption: 'Input paths',\n required: true,\n onChange: handlePathsChange,\n extras: {\n placeholder: 'Enter a path to add',\n },\n },\n {\n name: 'outputPath',\n type: 'output-path',\n caption: 'Output path',\n required: true,\n validator: isPathStaticTable,\n extras: {\n placeholder: 'Enter path for output',\n },\n tooltip: (\n <span>\n If the path is not exists then started operation will be failed\n </span>\n ),\n },\n {\n name: 'columns',\n type: 'table-sort-by',\n caption: 'Sort by columns',\n required: true,\n extras: {\n suggestColumns,\n allowDescending: true,\n },\n },\n {\n name: 'poolTree',\n type: 'pool-tree',\n caption: 'Pool tree',\n },\n {\n name: 'pool',\n type: 'pool',\n caption: 'Pool',\n tooltip: docsUrl(\n makeLink(\n UIFactory.docsUrls[\n 'operations:operations_options#obshie-opcii-dlya-vseh-tipov-operacij'\n ],\n ),\n ),\n extras: (values: FormValues) => {\n const {poolTree} = values;\n return {\n placeholder: login,\n poolTrees: poolTree,\n allowEphemeral: true,\n };\n },\n },\n ...errorFields,\n ]}\n />\n )}\n </WaitForDefaultPoolTree>\n );\n}\n\ninterface FormValues {\n paths: Array<string>;\n outputPath: string;\n columns: Array<string>;\n poolTree: string[];\n pool: string;\n}\n","import React from 'react';\n\nimport map_ from 'lodash/map';\nimport pickBy_ from 'lodash/pickBy';\n\nimport {DialogError, FormApi, YTDFDialog} from '../../../../components/Dialog';\nimport {useDispatch, useSelector} from '../../../../store/redux-hooks';\nimport {\n getNavigationTableAttributesValues,\n getNavigationTableMergeVisible,\n getNavigationTableSortError,\n getNavigationTableSortPaths,\n getNavigationTableSortSuggestColumns,\n} from '../../../../store/selectors/navigation/modals/table-merge-sort-modal';\nimport {\n hideTableMergeModal,\n isPathStaticTable,\n runTableMerge,\n tableSortModalLoadColumns,\n} from '../../../../store/actions/navigation/modals/table-merge-sort-modal';\nimport {getCurrentUserName} from '../../../../store/selectors/global';\nimport {makeLink} from '../CreateTableModal/CreateTableModal';\nimport {parseBytes} from '../../../../utils/parse/parse-bytes';\nimport {docsUrl} from '../../../../config';\nimport UIFactory from '../../../../UIFactory';\nimport {WaitForDefaultPoolTree} from '../../../../hooks/global-pool-trees';\n\nexport default function TableMergeModal() {\n const login = useSelector(getCurrentUserName);\n const visible = useSelector(getNavigationTableMergeVisible);\n const paths = useSelector(getNavigationTableSortPaths);\n const suggestError = useSelector(getNavigationTableSortError);\n const suggestColumns = useSelector(getNavigationTableSortSuggestColumns);\n const attributeValues = useSelector(getNavigationTableAttributesValues);\n\n const [error, setError] = React.useState<any>();\n\n const dispatch = useDispatch();\n\n const handleAdd = React.useCallback(\n async (form: FormApi<FormValues>) => {\n try {\n const {values} = form.getState();\n const {\n mode,\n paths,\n outputPath,\n columns,\n pool,\n poolTree,\n chunkSize,\n force_transform,\n combine_chunks,\n } = values;\n const chunkSizeBytes = parseBytes(chunkSize);\n const data_size_per_job = isNaN(chunkSizeBytes) ? undefined : chunkSizeBytes;\n const pool_trees = poolTree.length ? poolTree : undefined;\n await dispatch(\n runTableMerge(\n pickBy_(\n {\n mode,\n input_table_paths: paths,\n output_table_path: {\n $value: outputPath,\n $attributes: attributeValues,\n },\n merge_by: map_(columns, 'name'),\n pool,\n pool_trees,\n data_size_per_job,\n force_transform,\n combine_chunks,\n },\n Boolean,\n ) as any,\n ),\n );\n } catch (e) {\n setError(e);\n throw e;\n }\n },\n [attributeValues, dispatch],\n );\n\n const handleClose = React.useCallback(() => {\n dispatch(hideTableMergeModal());\n }, [dispatch]);\n\n const handlePathsChange = React.useCallback(\n (paths: Array<string>) => {\n dispatch(tableSortModalLoadColumns(paths));\n },\n [dispatch],\n );\n\n const outputPath = paths?.length === 1 ? paths[0] : undefined;\n\n return (\n <WaitForDefaultPoolTree>\n {({defaultPoolTree}) => (\n <YTDFDialog<FormValues>\n visible={visible}\n headerProps={{\n title: 'Merge',\n }}\n pristineSubmittable={true}\n onAdd={handleAdd}\n onClose={handleClose}\n initialValues={{\n paths,\n mode: 'unordered',\n outputPath,\n columns: [],\n force_transform: true,\n poolTree: [defaultPoolTree],\n combine_chunks: true,\n }}\n fields={[\n {\n name: 'mode',\n type: 'radio',\n caption: 'Mode',\n tooltip: docsUrl(makeLink(UIFactory.docsUrls['operations:merge'])),\n extras: {\n options: [\n {value: 'unordered', label: 'Unordered'},\n {value: 'sorted', label: 'Sorted'},\n {value: 'ordered', label: 'Ordered'},\n ],\n },\n },\n {\n name: 'paths',\n type: 'editable-path-list',\n caption: 'Input paths',\n required: true,\n onChange: handlePathsChange,\n extras: {\n placeholder: 'Enter a path to add',\n },\n },\n {\n name: 'outputPath',\n type: 'output-path',\n caption: 'Output path',\n required: true,\n validator: isPathStaticTable,\n touched: true,\n extras: {\n placeholder: 'Enter path for output',\n },\n tooltip: (\n <span>\n If the path is not an exist then started operation will be\n failed\n </span>\n ),\n },\n {\n name: 'columns',\n type: 'table-sort-by',\n caption: 'Merge by columns',\n extras: {\n suggestColumns,\n },\n },\n {\n name: 'chunkSize',\n type: 'table-chunk-size',\n caption: 'Chunk size',\n },\n {\n name: 'combine_chunks',\n type: 'tumbler',\n caption: 'Combine chunks',\n },\n {\n name: 'poolTree',\n type: 'pool-tree',\n caption: 'Pool tree',\n },\n {\n name: 'pool',\n type: 'pool',\n caption: 'Pool',\n tooltip: docsUrl(\n makeLink(\n UIFactory.docsUrls[\n 'operations:operations_options#obshie-opcii-dlya-vseh-tipov-operacij'\n ],\n ),\n ),\n extras: ({poolTree}: FormValues) => {\n return {\n poolTrees: poolTree,\n placeholder: login,\n allowEphemeral: true,\n };\n },\n },\n {\n name: 'force_transform',\n type: 'tumbler',\n caption: 'Force transform',\n },\n ...(!error\n ? []\n : [\n {\n name: 'error',\n type: 'block' as const,\n extras: {\n children: <DialogError error={error} />,\n },\n },\n ]),\n ...(!suggestError\n ? []\n : [\n {\n name: 'suggestError',\n type: 'block' as const,\n extras: {\n children: <DialogError error={suggestError} />,\n },\n },\n ]),\n ]}\n />\n )}\n </WaitForDefaultPoolTree>\n );\n}\n\ninterface FormValues {\n mode: string;\n pool: string;\n poolTree: string[];\n\n paths: Array<string>;\n outputPath: string;\n columns: Array<unknown>;\n chunkSize: string;\n force_transform: boolean;\n combine_chunks: boolean;\n}\n","import {RootState} from '../../../reducers';\n\nexport const getDynTablesStateModalVisible = (state: RootState) =>\n state.navigation.modals.dynTablesStateModal.showModal;\nexport const getDynTablesStateModalPaths = (state: RootState) =>\n state.navigation.modals.dynTablesStateModal.paths;\nexport const getDynTablesStateModalAction = (state: RootState) =>\n state.navigation.modals.dynTablesStateModal.action;\n","import React from 'react';\n\nimport capitalize_ from 'lodash/capitalize';\nimport map_ from 'lodash/map';\n\nimport cn from 'bem-cn-lite';\n\nimport {DialogError, YTDFDialog} from '../../../components/Dialog';\nimport {useDispatch, useSelector} from '../../../store/redux-hooks';\nimport {\n dynTablesChangeState,\n hideDynTablesStateModal,\n} from '../../../store/actions/navigation/modals/dyn-tables-state-modal';\nimport {\n getDynTablesStateModalAction,\n getDynTablesStateModalPaths,\n getDynTablesStateModalVisible,\n} from '../../../store/selectors/navigation/modals/dyn-tables-state-modal';\nimport {DynTablesStateModalState} from '../../../store/reducers/navigation/modals/dyn-tables-state-modal';\nimport {Warning} from '../../../components/Text/Text';\nimport {YTError} from '../../../types';\n\nimport './DynTablesStateModal.scss';\n\nconst block = cn('dyn-tables-state-modal');\n\nexport default function DynTablesStateModal() {\n const dispatch = useDispatch();\n\n const action = useSelector(getDynTablesStateModalAction);\n const paths = useSelector(getDynTablesStateModalPaths);\n const visible = useSelector(getDynTablesStateModalVisible);\n\n const [error, setError] = React.useState<YTError>();\n\n const onClose = React.useCallback(() => {\n dispatch(hideDynTablesStateModal());\n setError(undefined);\n }, [dispatch, setError]);\n\n const onAdd = React.useCallback(async () => {\n try {\n if (!action) {\n throw new Error('Action should be defined');\n }\n await dispatch(dynTablesChangeState(paths, action));\n } catch (e) {\n setError(e as any);\n throw e;\n }\n }, [dispatch, paths, action, setError]);\n\n const pathsValues = React.useMemo(\n () =>\n map_(paths, (item) => {\n return {\n title: item,\n };\n }),\n [paths],\n );\n\n if (!visible) {\n return null;\n }\n\n const warning = renderWarning(action);\n\n return (\n <YTDFDialog\n visible\n onAdd={onAdd}\n onClose={onClose}\n pristineSubmittable={true}\n headerProps={{\n title: capitalize_(action),\n }}\n initialValues={{\n paths: pathsValues,\n }}\n fields={[\n {\n name: 'paths',\n type: 'editable-list',\n caption: paths.length > 1 ? 'Paths' : 'Path',\n extras: {\n frozen: true,\n className: block('path-list'),\n },\n },\n ...(!warning\n ? []\n : [\n {\n name: 'warning',\n type: 'block' as const,\n extras: {\n children: warning,\n },\n },\n ]),\n ...(!error\n ? []\n : [\n {\n name: 'error',\n type: 'block' as const,\n extras: {\n children: <DialogError error={error} />,\n },\n },\n ]),\n ]}\n />\n );\n}\n\nconst WARN_TEXT: {[action: string]: string} = {\n unmount:\n 'Unmounted table will become inaccessible for reads and writes. Operation may take a while (usually up to 30 seconds). Do you want to proceed?',\n freeze: 'Frozen table will become read-only. Operation may take a while (usually up to 30 seconds). Do you want to proceed?',\n};\n\nfunction renderWarning(action: DynTablesStateModalState['action']) {\n const text = WARN_TEXT[action || ''];\n return !text ? null : <Warning>{text}</Warning>;\n}\n","import {RootState} from '../../../../store/reducers';\n\nexport const getLinkToModalState = (state: RootState) => state.navigation.modals.linkToModal;\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {DialogError, DialogField, FormApi, YTDFDialog} from '../../../components/Dialog';\nimport {useDispatch, useSelector} from '../../../store/redux-hooks';\nimport {getLinkToModalState} from '../../../store/selectors/navigation/modals/link-to-modal';\nimport {createLink, hideLinkToModal} from '../../../store/actions/navigation/modals/link-to-modal';\nimport {LinkToState} from '../../../store/reducers/navigation/modals/link-to-modal';\nimport {ytApiV3} from '../../../rum/rum-wrap-api';\n\nconst block = cn('table-sort-modal');\n\ntype LinkToModalState = Pick<LinkToState, 'path' | 'target'>;\n\nexport default function LinkToModal() {\n const [error, setError] = React.useState<any>();\n const {visible, path, target} = useSelector(getLinkToModalState);\n\n const dispatch = useDispatch();\n\n const handleAdd = React.useCallback(\n async (form: FormApi<LinkToModalState>) => {\n try {\n await dispatch(createLink(form.getState().values));\n } catch (e) {\n setError(e);\n throw e;\n }\n },\n [setError, dispatch],\n );\n\n const handleClose = React.useCallback(() => {\n dispatch(hideLinkToModal());\n }, [dispatch]);\n\n const errorFields: Array<DialogField<LinkToModalState>> = [];\n if (error) {\n errorFields.push({\n name: 'error',\n type: 'block',\n extras: {\n children: <DialogError error={error} />,\n },\n });\n }\n\n return !visible ? null : (\n <YTDFDialog<LinkToModalState>\n className={block()}\n visible={true}\n headerProps={{\n title: 'Create link',\n }}\n onAdd={handleAdd}\n onClose={handleClose}\n initialValues={{\n path,\n target,\n }}\n fields={[\n {\n name: 'path',\n type: 'path',\n caption: 'Link path',\n required: true,\n validator: async (path: string) => {\n try {\n const res = await ytApiV3.exists({path});\n if (res) {\n return 'Link path already exists';\n }\n return undefined;\n } catch (err) {\n const e = err as Error;\n return e?.message || 'Unexpected type of error: ' + typeof e;\n }\n },\n extras: {\n autoFocus: true,\n },\n },\n {\n name: 'target',\n type: 'path',\n caption: 'Target path',\n required: true,\n validator: async (path: string) => {\n try {\n const res = await ytApiV3.exists({path});\n if (!res) {\n return 'Target path should exist';\n }\n return undefined;\n } catch (err) {\n const e = err as Error;\n return e?.message || 'Unexpected type of error: ' + typeof e;\n }\n },\n },\n ...errorFields,\n ]}\n />\n );\n}\n","import {RootState} from '../../../../store/reducers';\n\nexport const getCreateACOModalState = (state: RootState) => state.navigation.modals.createACOModal;\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {DialogError, DialogField, FormApi, YTDFDialog} from '../../../components/Dialog';\nimport {useDispatch, useSelector} from '../../../store/redux-hooks';\nimport {getCreateACOModalState} from '../../../store/selectors/navigation/modals/create-aco-modal';\nimport {closeCreateACOModal, createACO} from '../../../store/actions/navigation/modals/create-aco';\n\nconst block = cn('table-sort-modal');\n\ntype CreateACOFormState = {\n namespace: string;\n name: string;\n path: string;\n};\n\nexport default function CreateACOModal() {\n const [error, setError] = React.useState<any>();\n const {visible, path, namespace} = useSelector(getCreateACOModalState);\n\n const dispatch = useDispatch();\n\n const handleAdd = React.useCallback(\n async (form: FormApi<CreateACOFormState>) => {\n try {\n await dispatch(createACO(form.getState().values));\n } catch (e) {\n setError(e);\n throw e;\n }\n },\n [setError, dispatch],\n );\n\n const handleClose = React.useCallback(() => {\n dispatch(closeCreateACOModal());\n }, [dispatch]);\n\n const errorFields: Array<DialogField<CreateACOFormState>> = [];\n if (error) {\n errorFields.push({\n name: 'error',\n type: 'block',\n extras: {\n children: <DialogError error={error} />,\n },\n });\n }\n\n if (visible) {\n return (\n <YTDFDialog<CreateACOFormState>\n className={block()}\n visible={true}\n headerProps={{\n title: 'Create ACO',\n }}\n onAdd={handleAdd}\n onClose={handleClose}\n initialValues={{\n path,\n namespace,\n }}\n fields={[\n {\n name: 'name',\n type: 'text',\n caption: 'ACO name',\n required: true,\n },\n ...errorFields,\n ]}\n />\n );\n }\n\n return null;\n}\n","import React, {Component, Fragment} from 'react';\nimport {connect} from 'react-redux';\nimport {useSelector} from '../../../store/redux-hooks';\nimport PropTypes from 'prop-types';\nimport hammer from '../../../common/hammer';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {getCluster} from '../../../store/selectors/global';\nimport {updateTitle} from '../../../store/actions/global';\n\nimport {\n CopyObjectModal,\n CreateDirectoryModal,\n DeleteObjectModal,\n MoveObjectModal,\n RestoreObjectModal,\n} from './PathEditorModal';\nimport ErrorBoundary from '../../../components/ErrorBoundary/ErrorBoundary';\nimport ContentViewer from './ContentViewer/ContentViewer';\nimport {checkContentIsSupported} from './ContentViewer/helpers';\nimport Tabs from '../../../components/Tabs/Tabs';\nimport {NavigationError} from './NavigationError';\n\nimport {Tab} from '../../../constants/navigation';\nimport {LOADING_STATUS} from '../../../constants/index';\n\nimport {onTransactionChange, setMode, updateView} from '../../../store/actions/navigation';\n\nimport {\n getError,\n getIdmSupport,\n getLoadState,\n getParsedPath,\n getPath,\n getTransaction,\n getType,\n isNavigationFinalLoadState,\n} from '../../../store/selectors/navigation';\nimport {getEffectiveMode, getTabs} from '../../../store/selectors/navigation/navigation';\nimport {NavigationPermissionsNotice} from './NavigationPermissionsNotice';\nimport {useRumMeasureStop} from '../../../rum/RumUiContext';\nimport {useAppRumMeasureStart} from '../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../rum/rum-measure-types';\nimport AttributesEditor from '../modals/AttributesEditor';\nimport RemoteCopyModal from '../modals/RemoteCopyModal';\nimport TableEraseModal from '../modals/TableEraseModal';\nimport TableSortModal from '../modals/TableMergeSortModal/TableSortModal';\nimport TableMergeModal from '../modals/TableMergeSortModal/TableMergeModal';\nimport DynTablesStateModal from '../modals/DynTablesStateModal';\nimport LinkToModal from '../modals/LinkToModal';\nimport CreateACOModal from '../modals/CreateACOModal';\nimport Button from '../../../components/Button/Button';\nimport Icon from '../../../components/Icon/Icon';\nimport {showNavigationAttributesEditor} from '../../../store/actions/navigation/modals/attributes-editor';\nimport {UI_TAB_SIZE} from '../../../constants/global';\nimport {CellPreviewModal} from '../../../containers/CellPreviewModal/CellPreviewModal';\nimport {OpenQueryButtonsContent} from '../../../containers/OpenQueryButtons/OpenQueryButtons';\n\nimport './Navigation.scss';\n\nconst block = cn('navigation');\n\nfunction renderModals() {\n return (\n <Fragment>\n <RestoreObjectModal />\n <CreateDirectoryModal />\n <MoveObjectModal />\n <CopyObjectModal />\n <DeleteObjectModal />\n <AttributesEditor />\n <TableEraseModal />\n <TableSortModal />\n <TableMergeModal />\n <DynTablesStateModal />\n <LinkToModal />\n <CreateACOModal />\n <RemoteCopyModal />\n <CellPreviewModal />\n <OpenQueryButtonsContent />\n </Fragment>\n );\n}\n\nclass Navigation extends Component {\n static propTypes = {\n // from connect\n cluster: PropTypes.string.isRequired,\n path: PropTypes.string.isRequired,\n mode: PropTypes.string.isRequired,\n isIdmSupported: PropTypes.bool.isRequired,\n transaction: PropTypes.string,\n parsedPath: PropTypes.object,\n type: PropTypes.string,\n\n hasError: PropTypes.bool,\n error: PropTypes.shape({\n message: PropTypes.string,\n inner_errors: PropTypes.arrayOf(\n PropTypes.shape({\n message: PropTypes.string,\n details: PropTypes.shape({\n code: PropTypes.number,\n object_type: PropTypes.string,\n }),\n }),\n ),\n }),\n loaded: PropTypes.bool,\n loading: PropTypes.bool,\n\n setMode: PropTypes.func.isRequired,\n updateView: PropTypes.func.isRequired,\n onTransactionChange: PropTypes.func.isRequired,\n };\n\n componentDidMount() {\n this.props.updateView({trackVisit: true});\n this.updateTitleWithPath();\n }\n\n componentDidUpdate(prevProps) {\n const {transaction, path, updateView, onTransactionChange} = this.props;\n const {transaction: prevTransaction, path: prevPath} = prevProps;\n\n if (transaction !== prevTransaction) {\n onTransactionChange();\n } else if (path !== prevPath) {\n updateView({trackVisit: true});\n }\n\n if (this.props.parsedPath !== prevProps.parsedPath) {\n this.updateTitleWithPath();\n }\n }\n\n componentWillUnmount() {\n this.props.updateTitle({path: ''});\n }\n\n updateTitleWithPath() {\n const {parsedPath, updateTitle} = this.props;\n updateTitle({path: parsedPath ? parsedPath.getKey() : ''});\n }\n\n get items() {\n const {tabs, setMode} = this.props;\n\n return tabs.map((tab) => {\n if (tab.hotkey) {\n return {\n ...tab,\n hotkey: tab.hotkey.map(({keys, tab, scope}) => {\n return {\n keys,\n scope,\n handler: () => setMode(tab),\n };\n }),\n };\n }\n\n return tab;\n });\n }\n\n onTabChange = (value) => {\n const {setMode} = this.props;\n if (value !== Tab.ORIGINATING_QUEUE) {\n setMode(value);\n }\n };\n\n renderTabs() {\n const {mode, tabSize} = this.props;\n const items = map_(this.items, (item) => ({\n ...item,\n text: item.text || hammer.format['ReadableField'](item.value),\n show: true,\n }));\n\n return (\n <Tabs\n onTabChange={this.onTabChange}\n active={mode}\n items={items}\n underline\n size={tabSize}\n />\n );\n }\n\n renderEditButton() {\n return (\n <div className={block('edit-metadata')}>\n <Button\n size=\"m\"\n className={block('edit-metadata-btn')}\n title={'Edit metadata'}\n onClick={this.onEditButtonClick}\n >\n <Icon awesome={'pencil'} />\n Edit metadata\n </Button>\n </div>\n );\n }\n\n onEditButtonClick = () => {\n const {path, showNavigationAttributesEditor} = this.props;\n showNavigationAttributesEditor([path]);\n };\n\n renderPlaceholder() {\n const {type = 'unknown', mode, loading} = this.props;\n\n if (type === 'unknown' && loading) {\n return null;\n }\n\n return (\n <div className=\"navigation__warning elements-message elements-message_theme_warning\">\n {mode === Tab.CONTENT ? (\n <p className=\"elements-message__paragraph\">\n Viewing node of type <strong>{type}</strong> is not supported in navigator.\n </p>\n ) : (\n <p className=\"elements-message__paragraph\">\n Viewing node attribute <strong>{mode}</strong> is not supported in\n navigator.\n </p>\n )}\n </div>\n );\n }\n\n renderView() {\n const {type, mode} = this.props;\n if (checkContentIsSupported(type, mode)) {\n return <ContentViewer type={type} mode={mode} />;\n }\n\n return this.renderPlaceholder();\n }\n\n renderError() {\n const {\n error: {message, details},\n cluster,\n path,\n } = this.props;\n\n return (\n <NavigationError cluster={cluster} path={path} details={details} message={message} />\n );\n }\n\n render() {\n const {loaded, hasError} = this.props;\n\n return (\n <ErrorBoundary>\n <div className={block({error: hasError}, 'elements-main-section')}>\n <div className={block('header')}>\n <NavigationPermissionsNotice />\n\n <div className={block('tabs')}>\n {this.renderEditButton()}\n {this.renderTabs()}\n </div>\n </div>\n\n <div className={block('main')}>{loaded && this.renderView()}</div>\n {hasError && this.renderError()}\n\n {renderModals()}\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nfunction mapStateToProps(state) {\n const isFinalState = isNavigationFinalLoadState(state);\n const loadState = getLoadState(state);\n const hasError = loadState === LOADING_STATUS.ERROR;\n const loaded = loadState === LOADING_STATUS.LOADED;\n return {\n path: getPath(state),\n mode: getEffectiveMode(state),\n type: getType(state),\n isIdmSupported: getIdmSupport(state),\n error: getError(state),\n hasError,\n loaded,\n loading: !isFinalState,\n parsedPath: getParsedPath(state),\n transaction: getTransaction(state),\n cluster: getCluster(state),\n tabSize: UI_TAB_SIZE,\n tabs: getTabs(state),\n };\n}\n\nconst mapDispatchToProps = {\n setMode,\n updateView,\n updateTitle,\n onTransactionChange,\n showNavigationAttributesEditor,\n};\n\nconst NavigationConnected = connect(mapStateToProps, mapDispatchToProps)(Navigation);\n\nconst NavigationWithRumMemo = React.memo(NavigationWithMesure);\n\nfunction NavigationWithMesure() {\n const path = useSelector(getPath);\n const transaction = useSelector(getTransaction);\n const isFinalState = useSelector(isNavigationFinalLoadState);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.NAVIGATION_PRELOAD,\n startDeps: [isFinalState, path, transaction],\n allowStart: ([isFinal]) => {\n return !isFinal;\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.NAVIGATION_PRELOAD,\n stopDeps: [isFinalState],\n allowStop: ([isFinal]) => {\n return isFinal;\n },\n });\n\n return <NavigationConnected />;\n}\n\nexport default function NavigationWithRum() {\n return <NavigationWithRumMemo />;\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\nimport {TextInput} from '@gravity-ui/uikit';\nimport key from 'hotkeys-js';\n\nimport Hotkey from '../../components/Hotkey/Hotkey';\n\nconst supportedSizes = ['xs', 's', 'm'];\n\nconst propTypes = {\n size: PropTypes.oneOf(supportedSizes),\n value: PropTypes.string,\n placeholder: PropTypes.string,\n onApply: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n scope: PropTypes.string.isRequired,\n cancelOnBlur: PropTypes.bool,\n};\n\nconst defaultProps = {\n size: 'm',\n};\n\nexport default class Editor extends React.Component {\n constructor(props) {\n super(props);\n\n this.onApply = this.onApply.bind(this);\n this.onCancel = this.onCancel.bind(this);\n this.onChange = this.onChange.bind(this);\n this.onFocus = this.onFocus.bind(this);\n this.onBlur = this.onBlur.bind(this);\n\n this.state = {\n value: props.value,\n };\n }\n willReceiveProps({value}) {\n this.setState({value});\n }\n onApply() {\n if (typeof this.props.onApply === 'function') {\n this.props.onApply(this.state.value);\n }\n }\n onCancel() {\n if (typeof this.props.onCancel === 'function') {\n this.props.onCancel();\n }\n }\n onChange(value) {\n this.setState({value});\n }\n onFocus() {\n key.setScope(this.props.scope);\n }\n onBlur() {\n key.setScope('all');\n const {cancelOnBlur} = this.props;\n if (cancelOnBlur) {\n this.onCancel();\n }\n }\n render() {\n // console.log('<props>', this.props, '</props>');\n\n const {size, scope, placeholder} = this.props;\n\n return (\n <div className={block('elements-editor')()}>\n <TextInput\n size={size}\n placeholder={placeholder}\n value={this.state.value}\n autoFocus\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n onUpdate={this.onChange}\n />\n <Hotkey\n settings={[\n {keys: 'enter', scope: scope, handler: this.onApply},\n {keys: 'esc', scope: scope, handler: this.onCancel},\n ]}\n />\n </div>\n );\n }\n}\n\nEditor.propTypes = propTypes;\nEditor.defaultProps = defaultProps;\n","import React, {FocusEvent} from 'react';\nimport {useHistory} from 'react-router';\nimport cn from 'bem-cn-lite';\nimport {useDispatch, useSelector} from '../../../store/redux-hooks';\n\nimport {Breadcrumbs, Flex, Key} from '@gravity-ui/uikit';\n\nimport {getMetrics} from '../../../common/utils/metrics';\n\nimport {\n getMode,\n getNavigationBreadcrumbs,\n getNavigationPathAttributes,\n getNavigationRestorePath,\n} from '../../../store/selectors/navigation/navigation';\nimport {getCluster} from '../../../store/selectors/global';\nimport {makeRoutedURL} from '../../../store/location';\nimport {restoreObject} from '../../../store/actions/navigation/modals/restore-object';\nimport {getNavigationDefaultPath} from '../../../store/selectors/settings';\nimport {getFavouritePaths, isCurrentPathInFavourites} from '../../../store/selectors/favourites';\nimport {\n getActualPath,\n getPath,\n getTransaction,\n isNavigationFinalLoadState,\n} from '../../../store/selectors/navigation';\nimport {navigationToggleFavourite} from '../../../store/actions/favourites';\nimport {\n clearTransaction,\n setTransaction,\n updatePath,\n updateView,\n} from '../../../store/actions/navigation';\n\nimport Favourites from '../../../components/Favourites/Favourites';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport Link from '../../../components/Link/Link';\nimport Editor from '../../../components/Editor/Editor';\nimport Button from '../../../components/Button/Button';\nimport Icon from '../../../components/Icon/Icon';\nimport MetaTable from '../../../components/MetaTable/MetaTable';\nimport {Escaped} from '../../../components/Text/Text';\nimport {Tooltip} from '../../../components/Tooltip/Tooltip';\nimport {EditableBreadcrumbs} from '../../../components/EditableBreadcrumbs/EditableBreadcrumbs';\n\nimport PathEditor from '../../../containers/PathEditor/PathEditor';\nimport {RowWithName} from '../../../containers/AppNavigation/TopRowContent/SectionName';\n\nimport {Page} from '../../../constants';\nimport {Tab} from '../../../constants/navigation';\n\nimport {inTrash} from '../../../utils/navigation/restore-object';\nimport {makeNavigationLink} from '../../../utils/app-url';\nimport {decodeEscapedAbsPath} from '../../../utils/navigation';\n\nimport './NavigationTopRowContent.scss';\n\nconst block = cn('navigation-top-row-content');\n\nfunction NavigationTopRowContent() {\n const defaultPath = useSelector(getNavigationDefaultPath);\n\n const [editMode, setEditMode] = React.useState(false);\n\n const toggleEditMode = React.useCallback(() => {\n setEditMode(!editMode);\n }, [setEditMode, editMode]);\n\n return (\n <RowWithName page={Page.NAVIGATION} className={block()} urlParams={{path: defaultPath}}>\n <NavigationFavourites />\n <Flex\n justifyContent={'space-between'}\n alignItems={'center'}\n grow={1}\n shrink={1}\n overflow=\"hidden\"\n >\n <NavigationBreadcrumbs onEdit={toggleEditMode} />\n <NavigationTools />\n </Flex>\n </RowWithName>\n );\n}\n\nfunction NavigationFavourites() {\n const dispatch = useDispatch();\n\n const favourites = useSelector(getFavouritePaths);\n\n const isInFavourites = useSelector(isCurrentPathInFavourites);\n const path = useSelector(getPath);\n\n const handleToggle = React.useCallback(() => {\n dispatch(navigationToggleFavourite(path));\n }, [dispatch, path]);\n\n const handleItemClick = React.useCallback(\n ({path}: {path: string}) => {\n dispatch(updatePath(path));\n },\n [dispatch],\n );\n\n return (\n <Favourites\n theme={'clear'}\n isActive={isInFavourites}\n items={favourites || []}\n onItemClick={handleItemClick}\n onToggle={handleToggle}\n />\n );\n}\n\nfunction NavigationPathToClipboard() {\n const path = useSelector(getPath);\n return (\n <span className={block('to-clipboard')}>\n <ClipboardButton\n text={path}\n title=\"Copy to clipboard [Shift+P]\"\n className={'navigation__instruments-control'}\n hotkey=\"shift+p\"\n onCopy={onCopyToClipboard}\n />\n </span>\n );\n}\n\nfunction NavigationTargetPathButton({decodedTargetPath}: {decodedTargetPath: string}) {\n return (\n <Link url={makeNavigationLink({path: decodedTargetPath})} routed>\n <Tooltip\n content={\n <Flex gap={1}>\n <MetaTable items={[{key: 'target_path', value: decodedTargetPath}]} />\n <ClipboardButton text={decodedTargetPath} inlineMargins view=\"flat\" />\n </Flex>\n }\n placement={'bottom'}\n >\n <Button view=\"flat-info\" selected qa=\"qa:navitation:target-path\">\n <Icon awesome=\"link\" />\n </Button>\n </Tooltip>\n </Link>\n );\n}\n\nfunction onCopyToClipboard() {\n getMetrics().countEvent('navigation_copy-path');\n}\n\nfunction NavigationPathEditor({hideEditor}: {hideEditor: () => void}) {\n const dispatch = useDispatch();\n const actualPath = useSelector(getActualPath);\n\n const handleApply = React.useCallback(\n (path: string) => {\n if (path !== actualPath) {\n dispatch(updatePath(path.endsWith('/') ? path.slice(0, -1) : path));\n }\n hideEditor();\n },\n [hideEditor],\n );\n\n const handleFocus = React.useCallback((event: FocusEvent<HTMLInputElement>) => {\n event.target?.select();\n }, []);\n\n return (\n <PathEditor\n className={block('path-editor')}\n autoFocus\n defaultPath={actualPath}\n onApply={handleApply}\n onCancel={hideEditor}\n onBlur={hideEditor}\n onFocus={handleFocus}\n />\n );\n}\n\nfunction NavigationBreadcrumbs({onEdit}: {onEdit: () => void}) {\n const bcItems = useSelector(getNavigationBreadcrumbs);\n const mode = useSelector(getMode);\n const history = useHistory();\n\n const items = React.useMemo(() => {\n return bcItems.map(({text, state}, index) => {\n const isLastItem = index === bcItems.length - 1;\n\n return (\n <Breadcrumbs.Item\n href={makeRoutedURL(window.location.pathname, {\n path: state.path,\n navmode: mode === Tab.ACL ? mode : Tab.CONTENT,\n filter: '',\n })}\n onClick={(e) => e.preventDefault()}\n key={`${JSON.stringify({text, index})}`}\n >\n {index ? (\n <Escaped text={text} onClick={isLastItem ? onEdit : undefined} />\n ) : (\n <Icon awesome={'folder-tree'} face={'solid'} />\n )}\n </Breadcrumbs.Item>\n );\n });\n }, [bcItems, mode, onEdit, window.location.pathname]);\n\n const loading = !useSelector(isNavigationFinalLoadState);\n\n const path = useSelector(getPath);\n const {path: target_path} = useSelector(getNavigationPathAttributes);\n const decodedTargetPath = target_path ? decodeEscapedAbsPath(target_path) : undefined;\n\n const showBeforeEditorContent =\n !loading && decodedTargetPath && path !== decodedTargetPath && path !== '/';\n\n return (\n <EditableBreadcrumbs\n onAction={(key: Key) => {\n const {text: keyText} = JSON.parse(key as string);\n const item = bcItems.find(({text}) => text === keyText);\n if (item) {\n const url = makeRoutedURL(window.location.pathname, {\n path: item.state.path,\n navmode: mode === Tab.ACL ? mode : Tab.CONTENT,\n filter: '',\n });\n history.push(url);\n }\n }}\n showRoot\n view={'top-row'}\n beforeEditorContent={\n showBeforeEditorContent ? (\n <NavigationTargetPathButton decodedTargetPath={decodedTargetPath} />\n ) : null\n }\n afterEditorContent={<NavigationPathToClipboard />}\n renderEditor={(props) => <NavigationPathEditor hideEditor={props.onBlur} />}\n >\n {items}\n </EditableBreadcrumbs>\n );\n}\n\nfunction NavigationTools() {\n return (\n <div className={block('tools')}>\n <Transaction />\n <RefreshButton />\n <RestoreButton />\n </div>\n );\n}\n\nfunction Transaction() {\n const dispatch = useDispatch();\n\n const cluster = useSelector(getCluster);\n const transaction = useSelector(getTransaction);\n const [editMode, setEditMode] = React.useState(false);\n\n const handleClearTransaction = React.useCallback(() => {\n dispatch(clearTransaction());\n }, [dispatch]);\n\n const handleEdit = React.useCallback(\n (value: string) => {\n dispatch(setTransaction(value));\n setEditMode(false);\n },\n [dispatch, setEditMode],\n );\n\n const toggleEditMode = React.useCallback(() => {\n setEditMode(!editMode);\n }, [setEditMode, editMode]);\n\n if (transaction) {\n return (\n <div className={block('transaction')}>\n <span className=\"elements-ellipsis\">\n <Link\n routed\n url={`/${cluster}/${Page.NAVIGATION}?path=//sys/transactions/${transaction}`}\n >\n {transaction}\n </Link>\n </span>\n <Button\n size=\"m\"\n view=\"flat-secondary\"\n title=\"Clear transaction\"\n onClick={handleClearTransaction}\n >\n <Icon awesome=\"times\" />\n </Button>\n </div>\n );\n } else {\n return editMode ? (\n <Editor\n size=\"s\"\n scope=\"transaction-editor\"\n visible={true}\n value={transaction}\n placeholder=\"Enter id...\"\n onApply={handleEdit}\n onCancel={toggleEditMode}\n cancelOnBlur\n />\n ) : (\n <Button view=\"flat-secondary\" size=\"m\" title=\"Set transaction\" onClick={toggleEditMode}>\n <Icon awesome=\"code-branch\" />\n </Button>\n );\n }\n}\n\nfunction RefreshButton() {\n const dispatch = useDispatch();\n\n const handleClick = React.useCallback(() => {\n getMetrics().countEvent('navigation_refresh');\n dispatch(updateView());\n }, [dispatch]);\n\n return (\n <Button\n size=\"s\"\n view=\"flat-secondary\"\n title={'Refresh page [Shift+R]'}\n hotkey={[{keys: 'shift+r', handler: handleClick, scope: 'all'}]}\n onClick={handleClick}\n >\n <Icon awesome={'sync-alt'} />\n </Button>\n );\n}\n\nfunction RestoreButton() {\n const dispatch = useDispatch();\n const path = useSelector(getPath);\n const restorePath = useSelector(getNavigationRestorePath);\n\n const handleRestore = React.useCallback(() => {\n dispatch(restoreObject(path, restorePath));\n }, [dispatch, restorePath, path]);\n\n return !restorePath || !inTrash(path) ? null : (\n <span className={block('restore')}>\n <Button view=\"action\" size=\"s\" onClick={handleRestore}>\n <Icon awesome=\"undo\" />\n &nbsp;Restore\n </Button>\n </span>\n );\n}\n\nexport default React.memo(NavigationTopRowContent);\n","import * as React from 'react';\nconst Ellipsis = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M3 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3M9.5 8a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0m5 0a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0\", clipRule: \"evenodd\" })));\nexport default Ellipsis;\n","import React from 'react';\nimport debounce_ from 'lodash/debounce';\n\nimport {TextInput, TextInputProps} from '@gravity-ui/uikit';\n\nexport interface TextInputWithDebounceProps extends TextInputProps {\n debounce?: number;\n onBlur?: (e: React.FocusEvent) => void;\n onEnterKeyDown?: (e: React.KeyboardEvent) => void;\n}\n\nfunction TextInputWithDebounce(props: TextInputWithDebounceProps) {\n const {\n debounce = 400,\n onUpdate = () => {},\n onBlur,\n value,\n onEnterKeyDown,\n onKeyDown,\n ...rest\n } = props;\n\n const [input, setInput] = React.useState<string | undefined>();\n\n const handleChangeExt = React.useMemo(() => {\n return debounce_(onUpdate as any, debounce);\n }, [debounce, onUpdate]);\n\n const handleChange = React.useCallback(\n (text: string) => {\n setInput(text);\n handleChangeExt(text);\n },\n [handleChangeExt, setInput],\n );\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (onKeyDown) {\n onKeyDown(e);\n }\n if (e.key === 'Enter' && onEnterKeyDown) {\n onEnterKeyDown(e);\n }\n },\n [onEnterKeyDown, onKeyDown],\n );\n\n const handleBlur = React.useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setInput(undefined);\n\n if (onBlur) {\n onBlur(e);\n }\n },\n [setInput, onBlur],\n );\n\n React.useEffect(() => {\n return () => {\n handleChangeExt.cancel();\n };\n }, [handleChangeExt]);\n\n return (\n <TextInput\n onUpdate={handleChange}\n {...rest}\n value={input === undefined ? value : input}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n />\n );\n}\n\nexport default React.memo(TextInputWithDebounce);\n","import React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport {getDisplayName} from '../utils';\nimport {SPLIT_PANE_ID} from '../constants/index';\n\nexport default function withSplit<P>(Component: React.ComponentType<P>): React.ComponentType<P> {\n return class WithSplit extends React.Component<P> {\n static displayName = `WithSplit(${getDisplayName(Component)})`;\n\n render() {\n return ReactDOM.createPortal(\n <Component {...this.props} />,\n document.getElementById(SPLIT_PANE_ID)!,\n );\n }\n };\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport {Box, Breadcrumbs, BreadcrumbsProps} from '@gravity-ui/uikit';\n\nimport {EditableAsText, EditableAsTextProps} from '../EditableAsText/EditableAsText';\n\nimport './EditableBreadcrumbs.scss';\n\nconst block = cn('yt-editable-breadcrumbs');\n\ninterface Props extends BreadcrumbsProps, Omit<EditableAsTextProps, 'onChange'> {\n view?: 'top-row';\n onChange?: (value?: string) => void;\n children: React.ReactNode;\n beforeEditorContent?: React.ReactNode;\n afterEditorContent?: React.ReactNode;\n}\n\nexport function EditableBreadcrumbs(props: Props) {\n const {\n className,\n text,\n disableEdit,\n withControls,\n cancelOnClose,\n openOnClick,\n size,\n saveButtonView,\n cancelButtonView,\n renderEditor,\n onModeChange,\n children,\n beforeEditorContent,\n afterEditorContent,\n view,\n ...breadcrumbsProps\n } = props;\n\n return (\n <EditableAsText\n className={block(null, className)}\n text={text}\n onChange={() => {}}\n disableEdit={disableEdit}\n withControls={withControls}\n cancelOnClose={cancelOnClose}\n openOnClick={openOnClick}\n size={size}\n saveButtonView={saveButtonView}\n cancelButtonView={cancelButtonView}\n renderEditor={renderEditor}\n onModeChange={onModeChange}\n renderContent={(contentProps) => (\n <Box\n className={block(\n {view: view},\n `${block('breadcrumbs-container')} ${contentProps.className}`,\n )}\n >\n <Breadcrumbs\n {...breadcrumbsProps}\n showRoot\n endContent={\n <>\n {beforeEditorContent ? (\n <div style={{marginLeft: '8px'}}>{beforeEditorContent}</div>\n ) : null}\n {contentProps.renderEditButton()}\n {afterEditorContent ? (\n <div style={{marginRight: '8px'}}>{afterEditorContent}</div>\n ) : null}\n </>\n }\n >\n {children}\n </Breadcrumbs>\n </Box>\n )}\n >\n <></>\n </EditableAsText>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {ClickableText} from '../../components/ClickableText/ClickableText';\n\nimport './FilePicker.scss';\n\nconst block = cn('yt-file-picker');\n\ninterface Props {\n onChange: (v: FileList | null) => void;\n multiple?: boolean;\n children: React.ReactNode;\n}\n\nexport default class FilePicker extends React.Component<Props> {\n inputRef = React.createRef<HTMLInputElement>();\n\n onLinkClick = () => {\n if (!this.inputRef.current) {\n return;\n }\n\n this.inputRef.current.click();\n };\n\n onChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n this.props.onChange(event.target.files);\n };\n\n render() {\n const {children, multiple} = this.props;\n return (\n <ClickableText onClick={this.onLinkClick}>\n {children}\n <input\n ref={this.inputRef}\n className={block('input')}\n onChange={this.onChange}\n type={'file'}\n multiple={multiple}\n />\n </ClickableText>\n );\n }\n}\n","import {addI18Keysets} from '../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nexport default addI18Keysets('yt:component.file-drop-zone', {en, ru});\n","import * as React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport FilePicker from '../FilePicker/FilePicker';\nimport useFileDragDrop from './useFileDragDrop';\nimport i18n from './i18n';\n\nimport './FileDropZone.scss';\n\nconst block = cn('file-drop-zone');\n\ninterface FileDropZoneProps {\n isEmpty: boolean;\n isDropable: boolean;\n onFile: (files: FileList | null) => void;\n}\n\nexport const FileDropZone: React.FC<React.PropsWithChildren<FileDropZoneProps>> = ({\n isDropable,\n onFile,\n isEmpty,\n children,\n}) => {\n const {onDrop, onDragOver, onDragEnter, onDragLeave, isDragging} = useFileDragDrop(onFile);\n\n const renderContent = () => {\n if (children) {\n return children;\n }\n\n return (\n <div className={block('info')}>\n <div>{isDragging ? i18n('context_drop-file') : i18n('context_drag-file')}</div>\n {i18n('or')}\n <div>\n <FilePicker onChange={onFile}>{i18n('action_pick-file')}</FilePicker>\n </div>\n </div>\n );\n };\n\n return (\n <div\n className={block('drag-area', {\n dropable: isDropable,\n empty: isEmpty,\n dragging: isDragging,\n })}\n onDrop={onDrop}\n onDragEnter={onDragEnter}\n onDragLeave={onDragLeave}\n onDragOver={onDragOver}\n >\n {renderContent()}\n </div>\n );\n};\n\nexport default FileDropZone;\n","import * as React from 'react';\nimport {useCallback, useState} from 'react';\n\nexport const useFileDragDrop = (onFile: (files: FileList | null) => void) => {\n // Track drag state to provide visual feedback\n const [isDragging, setIsDragging] = useState(false);\n\n const onDragOver = useCallback((event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n }, []);\n\n const onDragEnter = useCallback((event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n setIsDragging(true);\n }, []);\n\n const onDragLeave = useCallback((event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n setIsDragging(false);\n }, []);\n\n const onDrop = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n setIsDragging(false);\n\n const {files} = event.dataTransfer;\n\n if (!files) {\n return;\n }\n\n onFile(files);\n },\n [onFile],\n );\n\n return {\n onDragOver,\n onDragEnter,\n onDragLeave,\n onDrop,\n isDragging,\n };\n};\n\nexport default useFileDragDrop;\n","import React, {Component} from 'react';\n\nimport {YTErrorBlock} from '../../components/Error/Error';\nimport hammer from '../../common/hammer';\n\nimport {showErrorPopup} from '../../utils/utils';\nimport {YTError} from '../../types';\nimport {toaster} from '../../utils/toaster';\n\ninterface LoadDataHandlerProps {\n alwaysShowError?: boolean;\n loaded?: boolean;\n error?: boolean;\n errorData?: YTError;\n children: React.ReactNode;\n}\n\nexport default class LoadDataHandler extends Component<LoadDataHandlerProps> {\n componentDidUpdate() {\n const {error, loaded, errorData} = this.props;\n\n if (error && loaded) {\n toaster.add({\n theme: 'danger',\n name: 'network',\n autoHiding: 500000,\n title: 'Oops! something went wrong.',\n content: errorData ? (errorData as YTError).message : hammer.format.NO_VALUE,\n actions: [\n {\n label: ' view',\n onClick: () => showErrorPopup(errorData as YTError),\n },\n ],\n });\n }\n }\n\n render() {\n const {alwaysShowError = false, error, errorData, loaded, children} = this.props;\n\n const initialLoading = !loaded;\n\n if (error && (alwaysShowError || initialLoading)) {\n return <YTErrorBlock error={errorData} />;\n }\n\n return children;\n }\n}\n","import React from 'react';\nimport {useDispatch} from '../store/redux-hooks';\n\nimport withSplit from '../hocs/withSplit';\nimport {mergeScreen, splitScreen} from '../store/actions/global';\n\ntype SidePanelContentProps = {\n onClose: () => void;\n renderContent(props: {visible: boolean; onClose: () => void}): React.ReactNode;\n};\n\nexport const SidePanelPortal = withSplit(SideContent);\n\nexport function useSidePanel(\n name: string,\n {renderContent}: Pick<SidePanelContentProps, 'renderContent'>,\n) {\n const [widgetOpened, setWidgetOpened] = React.useState(false);\n const dispatch = useDispatch();\n\n const openWidget = React.useCallback(() => {\n dispatch(splitScreen(name));\n setWidgetOpened(true);\n }, [setWidgetOpened, dispatch, name]);\n\n const onClose = React.useCallback(() => {\n setWidgetOpened(false);\n dispatch(mergeScreen());\n }, [setWidgetOpened, dispatch]);\n\n return {\n closeWidget: onClose,\n openWidget,\n widgetOpened,\n widgetContent: widgetOpened ? (\n <SidePanelPortal>{renderContent({onClose, visible: widgetOpened})}</SidePanelPortal>\n ) : null,\n };\n}\n\nfunction SideContent({children}: {children: React.ReactNode}) {\n return children;\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {withRouter} from 'react-router';\n\nimport {computeStateQuery} from '../../utils/index';\nimport Link from '../../components/Link/Link';\nimport FormattedText from './FormattedText';\n\nfunction FormattedLink(props) {\n const {state, theme = 'ghost', className, text, match, onClick, ...rest} = props;\n const url = computeStateQuery({cluster: match.params.cluster, ...state});\n return (\n <Link routed url={url} theme={theme} onClick={onClick} className={className}>\n {React.isValidElement(text) ? text : <FormattedText text={text} {...rest} />}\n </Link>\n );\n}\nFormattedLink.propTypes = {\n state: PropTypes.shape({\n page: PropTypes.string.isRequired,\n cluster: PropTypes.string,\n tab: PropTypes.string,\n }).isRequired,\n text: PropTypes.oneOfType([PropTypes.node, PropTypes.string]).isRequired,\n className: PropTypes.string,\n theme: PropTypes.string,\n onClick: PropTypes.func,\n // from react-router\n match: PropTypes.shape({\n params: PropTypes.shape({\n cluster: PropTypes.string,\n }),\n }),\n};\nexport default withRouter(FormattedLink);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport FormattedText from './FormattedText';\nimport FormattedLink from './FormattedLink';\n\nexport default function FormattedTextOrLink({asLink = false, ...props}) {\n return asLink ? <FormattedLink {...props} /> : <FormattedText {...props} />;\n}\nFormattedTextOrLink.propTypes = {\n asLink: PropTypes.bool,\n};\n","import React, {useState} from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\n\nimport './FormattedId.scss';\n\nconst block = cn('table-formatters-id');\n\nFormattedId.propTypes = {\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n};\n\nexport default function FormattedId({id}) {\n const [hovered, setHovered] = useState(false);\n const handleMouseEnter = () => setHovered(true);\n const handleMouseLeave = () => setHovered(false);\n\n return (\n <div\n className={block({hovered: hovered ? 'yes' : 'no'})}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <span className=\"elements-ellipsis\">{id}</span>\n {hovered && (\n <div className={block('clipboard-button-wrapper')}>\n <ClipboardButton view=\"flat-secondary\" size=\"m\" text={id} />\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport {Progress} from '@gravity-ui/uikit';\n\nimport hammer from '../../common/hammer';\n\n// TODO: here are defiend reworked components from /templates/utils, drop original functions once we switch to\n// new components everywhere\nexport {default as FormattedText} from './FormattedText';\nexport {default as FormattedLink} from './FormattedLink';\nexport {default as FormattedTextOrLink} from './FormattedTextOrLink';\nexport {default as FormattedId} from './FormattedId/FormattedId';\n\nexport function printColumnAsBytes(item, columnName) {\n const column = this.props.columns[columnName];\n return hammer.format['Bytes'](column.get(item));\n}\n\nexport function printColumnAsNumber(item, columnName) {\n const column = this.props.columns[columnName];\n return hammer.format['Number'](column.get(item));\n}\n\nexport function printColumnAsFloatNumber(item, columnName) {\n const column = this.props.columns[columnName];\n return hammer.format['Number'](column.get(item), {\n digits: 2,\n digitsOnlyForFloat: true,\n });\n}\n\nexport function printColumnAsProgress(item, columnName) {\n const column = this.props.columns[columnName];\n return <Progress {...column.get(item)} />;\n}\n\nexport function printColumnAsTimeDuration(item, columnName) {\n const column = this.props.columns[columnName];\n return hammer.format['TimeDuration'](column.get(item));\n}\n\nexport function printColumnAsTimeDurationWithMs(item, columnName) {\n const column = this.props.columns[columnName];\n return hammer.format['TimeDuration'](column.get(item), {\n format: 'milliseconds',\n });\n}\n\nexport function printColumnAsReadableField(item, columnName) {\n const column = this.props.columns[columnName];\n return (\n <span className=\"elements-ellipsis\">\n {hammer.format['ReadableField'](column.get(item))}\n </span>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {Text} from '@gravity-ui/uikit';\n\nimport Icon from '../../components/Icon/Icon';\nimport {Tooltip} from '../Tooltip/Tooltip';\n\nimport './WarningIcon.scss';\n\nconst b = cn('yt-warning-icon');\n\ninterface Props {\n className?: string;\n hoverContent?: React.ReactNode;\n color?: 'warning' | 'danger';\n children?: React.ReactNode;\n}\n\nexport default function WarningIcon(props: Props) {\n const {className, hoverContent, children, color} = props;\n return (\n <span className={b(null, className)}>\n <Tooltip className={b('tooltip')} content={hoverContent}>\n <Icon className={b('icon', {color})} awesome=\"exclamation-triangle\" />\n {children && (\n <Text variant=\"inherit\" color={color}>\n {children}\n </Text>\n )}\n </Tooltip>\n </span>\n );\n}\n","import {ChevronDown} from '@gravity-ui/icons';\n\nimport {Icon} from '../Icon';\nimport type {QAProps} from '../types';\nimport {block} from '../utils/cn';\n\nimport './ArrowToggle.scss';\n\nexport interface ArrowToggleProps extends QAProps {\n size?: number;\n direction?: 'top' | 'left' | 'bottom' | 'right';\n className?: string;\n}\n\nconst b = block('arrow-toggle');\n\nexport function ArrowToggle({size = 16, direction = 'bottom', className, qa}: ArrowToggleProps) {\n return (\n <span\n style={{width: size, height: size}}\n className={b({direction}, className)}\n data-qa={qa}\n >\n <Icon data={ChevronDown} size={size} />\n </span>\n );\n}\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {Button, ButtonProps, DropdownMenu} from '@gravity-ui/uikit';\n\nimport Icon from '../Icon/Icon';\nimport Hotkey from '../../components/Hotkey/Hotkey';\n\nimport './Favourites.scss';\n\nconst b = block('favourites');\n\ninterface Props {\n className?: string;\n isActive: boolean;\n items: Array<FavouritesItem>;\n onItemClick: (item: FavouritesItem) => void;\n toggleDisabled?: boolean;\n onToggle: () => void;\n theme?: 'clear';\n}\n\nexport interface FavouritesItem {\n path: string;\n}\n\ninterface State {\n isActive: boolean;\n}\n\nexport default class Favourites extends Component<Props, State> {\n static itemType = PropTypes.shape({\n path: PropTypes.string,\n });\n\n static propTypes = {\n isActive: PropTypes.bool.isRequired,\n items: PropTypes.arrayOf(Favourites.itemType),\n onItemClick: PropTypes.func,\n toggleDisabled: PropTypes.bool,\n onToggle: PropTypes.func,\n className: PropTypes.string,\n theme: PropTypes.string,\n };\n\n static getDerivedStateFromProps(props: Props, state: State) {\n if (props.isActive !== state.isActive) {\n return {isActive: props.isActive};\n }\n return null;\n }\n\n state = {\n isActive: this.props.isActive,\n };\n\n toggleActive = () => {\n const {onToggle} = this.props;\n\n this.setState((prevState) => ({isActive: !prevState.isActive}));\n onToggle();\n };\n\n onItemClick = (item: FavouritesItem) => {\n const {onItemClick} = this.props;\n onItemClick(item);\n };\n\n renderDropDownMenu() {\n const {items} = this.props;\n\n const dropItems = map_(items, (item) => {\n return {\n text: item.path,\n action: () => this.onItemClick(item),\n };\n });\n if (items.length === 0) {\n dropItems.push({\n action: () => {},\n text: 'No favourites',\n });\n }\n\n const switcher = this.renderButton({\n view: 'normal',\n size: 'm',\n pin: 'brick-round',\n title: 'View favourites',\n children: <Icon awesome=\"angle-down\" />,\n });\n\n return (\n <DropdownMenu\n popupProps={{\n className: b('popup', {empty: items.length === 0}),\n }}\n items={dropItems}\n switcher={switcher}\n />\n );\n }\n\n renderHotkey() {\n return <Hotkey settings={[{keys: 'f', handler: this.toggleActive, scope: 'all'}]} />;\n }\n\n renderButton(buttonProps: ButtonProps & {disabled?: boolean}) {\n const {theme} = this.props;\n const themeProps = !theme ? {} : {view: 'outlined' as const};\n return <Button {...buttonProps} {...themeProps} />;\n }\n\n render() {\n const {toggleDisabled, className, theme} = this.props;\n const {isActive} = this.state;\n\n return (\n <div className={b(null, className)}>\n <div className={b('star-btn', {clear: theme === 'clear'})}>\n {this.renderButton({\n view: 'outlined-info',\n selected: isActive,\n size: 'm',\n pin: theme === 'clear' ? 'round-brick' : 'round-clear',\n title: 'Add to favourites [F]',\n onClick: this.toggleActive,\n disabled: toggleDisabled,\n children: <Icon awesome={isActive ? 'star-alt' : 'star'} />,\n })}\n </div>\n {this.renderDropDownMenu()}\n {this.renderHotkey()}\n </div>\n );\n }\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport PropTypes from 'prop-types';\n\nimport hammer from '../../common/hammer';\nimport {Icon, IconData, SegmentedRadioGroup, SegmentedRadioGroupProps} from '@gravity-ui/uikit';\n\ninterface Props<T extends string = string> extends SegmentedRadioGroupProps<T> {\n items: Array<ItemType<T>>;\n}\n\nexport interface ItemType<T extends string = string> {\n icon?: IconData;\n text: string;\n value: T;\n}\n\nconst block = cn('elements-radiobutton');\n\nexport default class CustomRadioButton<T extends string = string> extends React.Component<\n Props<T>\n> {\n static propTypes = {\n value: PropTypes.string,\n items: PropTypes.arrayOf(PropTypes.shape({value: PropTypes.string})),\n };\n\n static prepareSimpleValue(value: Props['value']) {\n if (value === undefined || value === null) {\n throw new Error('CustomRadioButton: unexpected value');\n }\n return {\n value: value,\n text: hammer.format['ReadableField'](value),\n };\n }\n\n render() {\n const {items, className, ...props} = this.props;\n\n const options = items.map((item) => ({\n value: item.value,\n content: (\n <>\n {item.icon && <Icon data={item.icon} size={13} />}\n {item.text || ' '} {/* XXX whitespace helps render single icon correctly */}\n </>\n ),\n }));\n\n return (\n <SegmentedRadioGroup {...props} className={block(null, className)} options={options} />\n );\n }\n}\n","export const pathToFileName = (path: string) => {\n return path.replace(/\\/+/g, '_');\n};\n","import * as React from 'react';\nconst ArrowUpRightFromSquare = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M10 1.5A.75.75 0 0 0 10 3h1.94L6.97 7.97a.75.75 0 0 0 1.06 1.06L13 4.06V6a.75.75 0 0 0 1.5 0V2.25a.75.75 0 0 0-.75-.75zM7.5 3.25a.75.75 0 0 0-.75-.75H4.5a3 3 0 0 0-3 3v6a3 3 0 0 0 3 3h6a3 3 0 0 0 3-3V9.25a.75.75 0 0 0-1.5 0v2.25a1.5 1.5 0 0 1-1.5 1.5h-6A1.5 1.5 0 0 1 3 11.5v-6A1.5 1.5 0 0 1 4.5 4h2.25a.75.75 0 0 0 .75-.75\", clipRule: \"evenodd\" })));\nexport default ArrowUpRightFromSquare;\n","'use client';\nimport * as React from 'react';\n\nimport type {AlertContextType} from './types';\n\nexport const AlertContext = React.createContext<AlertContextType | null>(null);\n","'use client';\n\nimport * as React from 'react';\n\nimport {AlertContext} from './AlertContext';\n\nexport const useAlertContext = () => {\n const context = React.useContext(AlertContext);\n\n if (!context) throw new Error('Alert: `useAlertContext` hook is used out of \"AlertContext\"');\n\n return context;\n};\n","'use client';\n\nimport {Button} from '../Button';\n\nimport type {AlertActionProps} from './types';\nimport {useAlertContext} from './useAlertContext';\n\nexport const AlertAction = (props: AlertActionProps) => {\n const {view} = useAlertContext();\n\n return <Button view={view === 'filled' ? 'normal-contrast' : undefined} {...props} />;\n};\n","import {block} from '../utils/cn';\n\nimport './Alert.scss';\n\nexport const DEFAULT_ICON_SIZE = 18;\n\nexport const bAlert = block('alert');\n","'use client';\n\nimport {AlertContext} from './AlertContext';\nimport type {AlertContextProviderProps} from './types';\n\nexport const AlertContextProvider = ({layout, view, children}: AlertContextProviderProps) => {\n return <AlertContext.Provider value={{layout, view}}>{children}</AlertContext.Provider>;\n};\n","import type * as React from 'react';\n\nimport {\n CircleCheck,\n CircleCheckFill,\n CircleInfo,\n CircleInfoFill,\n CircleXmark,\n CircleXmarkFill,\n Thunderbolt,\n ThunderboltFill,\n TriangleExclamation,\n TriangleExclamationFill,\n} from '@gravity-ui/icons';\n\nimport {Icon} from '../Icon';\nimport type {IconData} from '../Icon';\nimport {colorText} from '../Text/colorText/colorText';\nimport type {ColorTextBaseProps} from '../Text/colorText/colorText';\n\nimport {DEFAULT_ICON_SIZE, bAlert} from './constants';\nimport type {AlertIconProps, AlertTheme} from './types';\n\nconst typeToIcon: Record<\n AlertTheme,\n {filled: React.ElementType; outlined: React.ElementType} | null\n> = {\n danger: {\n filled: CircleXmarkFill,\n outlined: CircleXmark,\n },\n info: {\n filled: CircleInfoFill,\n outlined: CircleInfo,\n },\n success: {\n filled: CircleCheckFill,\n outlined: CircleCheck,\n },\n warning: {\n filled: TriangleExclamationFill,\n outlined: TriangleExclamation,\n },\n utility: {\n filled: ThunderboltFill,\n outlined: Thunderbolt,\n },\n normal: null,\n clear: null,\n};\n\nexport const AlertIcon = ({\n className,\n theme,\n view = 'filled',\n size = DEFAULT_ICON_SIZE,\n}: AlertIconProps) => {\n const iconByTheme = typeToIcon[theme];\n\n if (!iconByTheme) {\n return null;\n }\n\n let color: ColorTextBaseProps['color'];\n\n if (theme === 'success') {\n color = 'positive';\n } else if (theme !== 'normal' && theme !== 'clear') {\n color = theme;\n }\n\n return (\n <div className={bAlert('icon', colorText({color}, className))}>\n <Icon data={iconByTheme[view] as IconData} size={size} />\n </div>\n );\n};\n","import * as React from 'react';\nconst CircleXmarkFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14M6.53 5.47a.75.75 0 0 0-1.06 1.06L6.94 8 5.47 9.47a.75.75 0 1 0 1.06 1.06L8 9.06l1.47 1.47a.75.75 0 1 0 1.06-1.06L9.06 8l1.47-1.47a.75.75 0 1 0-1.06-1.06L8 6.94z\", clipRule: \"evenodd\" })));\nexport default CircleXmarkFill;\n","import * as React from 'react';\nconst CircleXmark = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M13.5 8a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0M15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0M6.53 5.47a.75.75 0 0 0-1.06 1.06L6.94 8 5.47 9.47a.75.75 0 1 0 1.06 1.06L8 9.06l1.47 1.47a.75.75 0 1 0 1.06-1.06L9.06 8l1.47-1.47a.75.75 0 1 0-1.06-1.06L8 6.94z\", clipRule: \"evenodd\" })));\nexport default CircleXmark;\n","import * as React from 'react';\nconst CircleInfoFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14m1-9.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0M8 7.75a.75.75 0 0 1 .75.75V11a.75.75 0 0 1-1.5 0V8.5A.75.75 0 0 1 8 7.75\", clipRule: \"evenodd\" })));\nexport default CircleInfoFill;\n","import * as React from 'react';\nconst CircleCheckFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14m3.1-8.55a.75.75 0 1 0-1.2-.9L7.419 8.858 6.03 7.47a.75.75 0 0 0-1.06 1.06l2 2a.75.75 0 0 0 1.13-.08z\", clipRule: \"evenodd\" })));\nexport default CircleCheckFill;\n","import * as React from 'react';\nconst TriangleExclamationFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M5.835 2.244c.963-1.665 3.367-1.665 4.33 0l4.916 8.505c.964 1.666-.24 3.751-2.164 3.751H3.083c-1.925 0-3.128-2.085-2.165-3.751zM8 5a.75.75 0 0 1 .75.75v2a.75.75 0 1 1-1.5 0v-2A.75.75 0 0 1 8 5m1 5.75a1 1 0 1 1-2 0 1 1 0 0 1 2 0\", clipRule: \"evenodd\" })));\nexport default TriangleExclamationFill;\n","import * as React from 'react';\nconst ThunderboltFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", d: \"m14.61 6.914-7.632 8.08a1.614 1.614 0 0 1-2.69-1.66L5.5 10H2.677A1.677 1.677 0 0 1 1.12 7.7l2.323-5.807A2.22 2.22 0 0 1 5.5.5h4c.968 0 1.637.967 1.298 1.873L10 4.5h3.569a1.431 1.431 0 0 1 1.04 2.414\" })));\nexport default ThunderboltFill;\n","import {addComponentKeysets} from '../../../i18n';\n\nimport en from './en.json';\nimport ru from './ru.json';\n\nconst COMPONENT = 'Alert';\n\nexport default addComponentKeysets({en, ru}, COMPONENT);\n","import {Xmark} from '@gravity-ui/icons';\n\nimport {Button} from '../Button';\nimport {Card} from '../Card';\nimport {Icon} from '../Icon';\nimport {colorText} from '../Text';\nimport {Flex, spacing} from '../layout';\n\nimport {AlertAction} from './AlertAction';\nimport {AlertActions} from './AlertActions';\nimport {AlertContextProvider} from './AlertContextProvider';\nimport {AlertIcon} from './AlertIcon';\nimport {AlertTitle} from './AlertTitle';\nimport {DEFAULT_ICON_SIZE, bAlert} from './constants';\nimport i18n from './i18n';\nimport type {AlertProps} from './types';\n\nexport const Alert = (props: AlertProps) => {\n const {\n theme = 'normal',\n view = 'filled',\n layout = 'vertical',\n message,\n className,\n corners,\n style,\n onClose,\n align,\n qa,\n } = props;\n\n const commonProps = {\n style,\n className: bAlert({corners}, spacing({py: 4, px: 5}, className)),\n qa,\n };\n\n const {t} = i18n.useTranslation();\n\n const content = (\n <Flex gap=\"3\" alignItems={align}>\n {typeof props.icon === 'undefined' ? (\n <Alert.Icon theme={theme} view={view} />\n ) : (\n props.icon // ability to pass `null` as `icon` prop value\n )}\n <Flex direction={layout === 'vertical' ? 'column' : 'row'} gap=\"5\" grow>\n <Flex gap=\"2\" grow className={bAlert('text-content')}>\n <Flex direction=\"column\" gap=\"1\" grow justifyContent={align}>\n {typeof props.title === 'string' ? (\n <Alert.Title text={props.title} />\n ) : (\n props.title\n )}\n {message}\n </Flex>\n </Flex>\n {Array.isArray(props.actions) ? (\n <Alert.Actions items={props.actions} />\n ) : (\n props.actions\n )}\n </Flex>\n {onClose && (\n <Button\n view=\"flat\"\n className={bAlert('close-btn')}\n onClick={onClose}\n aria-label={t('label_close')}\n >\n <Icon\n data={Xmark}\n size={DEFAULT_ICON_SIZE}\n className={colorText({color: 'secondary'})}\n />\n </Button>\n )}\n </Flex>\n );\n\n return (\n <AlertContextProvider layout={layout} view={view}>\n {theme === 'clear' ? (\n <div {...commonProps}>{content}</div>\n ) : (\n <Card {...commonProps} theme={theme} view={view}>\n {content}\n </Card>\n )}\n </AlertContextProvider>\n );\n};\n\nAlert.Icon = AlertIcon;\nAlert.Title = AlertTitle;\nAlert.Actions = AlertActions;\nAlert.Action = AlertAction;\n","import {Text} from '../Text';\n\nimport {bAlert} from './constants';\nimport type {AlertTitleProps} from './types';\n\nexport const AlertTitle = ({text, className}: AlertTitleProps) => {\n return (\n <Text variant=\"subheader-2\" className={bAlert('title', className)}>\n {text}\n </Text>\n );\n};\n","'use client';\n\nimport {Flex} from '../layout';\n\nimport {AlertAction} from './AlertAction';\nimport {bAlert} from './constants';\nimport type {AlertActionsProps} from './types';\nimport {useAlertContext} from './useAlertContext';\n\nexport const AlertActions = ({items, children, className}: AlertActionsProps) => {\n const {layout} = useAlertContext();\n\n return (\n <Flex\n className={bAlert('actions', {minContent: layout === 'horizontal'}, className)}\n direction=\"row\"\n gap=\"3\"\n wrap\n alignItems={layout === 'horizontal' ? 'center' : 'flex-start'}\n >\n {items?.map(({handler, text}, i) => (\n <AlertAction key={i} onClick={handler}>\n {text}\n </AlertAction>\n )) || children}\n </Flex>\n );\n};\n","import React from 'react';\n\nimport cn from 'bem-cn-lite';\n\nimport './ColorCircle.scss';\n\nconst block = cn('yt-color-circle');\n\nexport function ColorCircle({color, marginRight = true}: {color: string; marginRight?: boolean}) {\n return (\n <div className={block({'margin-right': marginRight})} style={{backgroundColor: color}} />\n );\n}\n","import React from 'react';\n\nimport Button, {ButtonProps} from '../../components/Button/Button';\nimport Icon from '../../components/Icon/Icon';\nimport {ButtonLinkProps} from '@gravity-ui/uikit';\n\nexport type AttributesButtonProps = Exclude<ButtonProps, ButtonLinkProps>;\n\nexport default function AttributesButton({\n view = 'flat-secondary',\n size = 'm',\n ...rest\n}: AttributesButtonProps) {\n return (\n <Button view={view} size={size} {...rest}>\n <Icon awesome=\"at\" />\n </Button>\n );\n}\n","import React, {Component} from 'react';\nimport block from 'bem-cn-lite';\n\nimport ErrorBoundary from '../../components/ErrorBoundary/ErrorBoundary';\n\nimport './CollapsibleSection.scss';\nimport Icon from '../../components/Icon/Icon';\n\nconst b = block('collapsible-section');\nconst headingCN = block('elements-heading');\n\ntype PropsStateLess = CollapsibleSectionProps & {\n onToggle: Required<CollapsibleSectionProps>['onToggle'];\n};\n\nexport class CollapsibleSectionStateLess extends Component<PropsStateLess> {\n static defaultProps = {\n size: 'm',\n collapsed: false,\n marginDirection: 'top',\n };\n\n toggle = () => {\n const {onToggle} = this.props;\n\n onToggle(!this.props.collapsed);\n };\n\n render() {\n const {\n name,\n children,\n size,\n overview,\n className,\n headingClassName,\n collapsed,\n marginDirection,\n togglerRightPadding,\n } = this.props;\n\n return (\n <ErrorBoundary>\n <div className={b({margin: marginDirection}, className)}>\n <div className={headingCN({size, overview: 'yes'}, headingClassName)}>\n <span\n className={headingCN(\n 'heading',\n {\n clickable: 'yes',\n },\n b('title'),\n )}\n onClick={this.toggle}\n >\n {name}\n <a>\n <Icon\n className={b('toggler', {'right-padding': togglerRightPadding})}\n awesome={collapsed ? 'angle-down' : 'angle-up'}\n />\n </a>\n </span>\n {overview}\n </div>\n\n {!collapsed && <ErrorBoundary>{children}</ErrorBoundary>}\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nexport interface CollapsibleSectionProps {\n className?: string;\n headingClassName?: string;\n name: React.ReactNode;\n collapsed?: boolean;\n onToggle?: (value: boolean) => void;\n\n size?: 'unset' | 'xs' | 's' | 'ss' | 'ns' | 'n' | 'm' | 'l';\n children?: React.ReactNode;\n overview?: React.ReactNode;\n\n marginDirection?: 'top' | 'bottom';\n\n togglerRightPadding?: 'small';\n}\n\nexport default function CollapsibleSection(props: CollapsibleSectionProps) {\n const {onToggle} = props;\n const [collapsed, setCollapsed] = React.useState(props.collapsed);\n\n const onChange = React.useCallback(\n (value: boolean) => {\n setCollapsed(value);\n if (onToggle) {\n onToggle(value);\n }\n },\n [setCollapsed, onToggle],\n );\n\n return <CollapsibleSectionStateLess {...props} onToggle={onChange} collapsed={collapsed} />;\n}\n"],"names":["YTChartKitLazy","withLazyLoading","React","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_context","prev","next","abrupt","stop","COLORS","getSerieColor","serieIndex","length","props","_jsx","_objectSpread","xmlns","viewBox","children","_jsxs","fill","fillRule","stroke","opacity","strokeWidth","d","cx","cy","rx","ry","strokeLinecap","strokeDasharray","addI18Keysets","en","ru","b","block","ColumnSelectorModal","_React$Component","_this","_classCallCheck","_len","arguments","args","Array","_key","_callSuper","concat","state","srcItems","items","makeItemsCopy","itemsOrder","_getItemsOrder","_handleCONFIRMButtonClick","onConfirm","_handleCANCELButtonClick","order","setState","_getOrderedItems","onCancel","onSourceChange","_ref","newItems","newItemsMap","reduce_","acc","data","name","unchanged","changed","forEach_","item","newItem","checked","keyColumn","push","preparedItems","calculateSrcItems","onDestinationChange","_ref2","_inherits","_createClass","key","value","prevProps","_this$props","this","map_","undefined","sort","a","indexOf","showDisabledItems","isHeadless","isFilterable","onChange","isSelectable","isSortable","showSelectedOnly","_ref3","title","description","className","ColumnSelector","NoContentImage","_this$props2","isVisible","rest","_objectWithoutProperties","_excluded","_this$state","headingCN","size","selectorProps","_getSelectorProps","sortableSelectorProps","_getSortableSelectorProps","selectedItemsCount","disabled","left","i18n","renderColumnSelector","Modal","borderless","visible","confirmText","content","renderContent","contentClassName","connect","openAttributesModal","_ref$getPathProps","getPathProps","path","exactPath","attribute","attributes","_ref$withTooltip","withTooltip","_ref$tooltipProps","tooltipProps","placement","AttributesButton","onClick","pathProps","DISPLAYED_ITEMS","getSumCount","nodes","sum","node","count","renderItem","type","SelectedItems","selectedItems","renderActions","CountsList","hideAll","displayedItems","sortedItems","orderBy_","slice_","prepareItems","allItemsCount","otherItemsCount","ROWS_PER_PAGE","fetchFromTabletErrorsApi","action","cluster","params","cancelToken","axios","post","Set","cn","Dropdown","_Component","popupVisible","anchor","toggle","prevState","open","close","button","trigger","actionProps","onMouseEnter","onMouseLeave","template","_this$props$template","renderer","templates","get","__default__","call","_this2","popup","directions","Popup","onOpenChange","anchorElement","current","renderTemplate","ref","renderButton","renderPopup","Component","defaultProps","zIndexGroupLevel","reShortName","makeRegexpFromSettings","uiSettings","reShortNameFromAddress","reTabletNodeShortName","reShortNameFromTabletNodeAddress","Host","_ref$address","address","prefix","copyBtnClassName","useText","asTabletNode","inlineMargins","host","re","_res$groups","res","exec","groups","shortname","suffix","filter","Boolean","join","calcShortNameByRegExp","useSelector","getCluster","hidden","Tooltip","Link","url","routed","ClipboardButton","view","text","shortcut","time","TIMELINE_RANGE_PICKER_SHORTCUTS","getHistogram","histogram","createGetQuartiles","createSelector","hammer","stat","quartiles","createGetPDF","pdf","createGetECDF","ecdf","steps","unshift","x","min","y","bucketNumber","bucketSize","HistogramChart","format","dataName","lineOnly","yagrData","xFormat","formatLib","Bytes","Number","_ref5","_ref6","_step","buckets","timeline","NaN","_iterator","_createForOfIteratorHelper","s","n","done","getX","getY","err","e","f","graphs","color","step","getLineOnlyData","_ref4","lineData","j","i","_buckets$i","_slicedToArray","bestX","itemX","isArray","calcBestY","Math","scale","renderOptions","gap","getColumnData","libraryConfig","axes","values","_d","map","side","grid","show","y1","scales","max","tooltip","render","tooltipData","_first$rows","_first$rows2","_second$rows","_renderDefaultTooltip","_tooltipData$scales","first","second","columnValue","rows","originalValue","lineValue","_ref7","colValue","colX0","colX1","lineX","lp","compact_","renderDefaultTooltip","digits","sources","v","right","ly","lx","Histogram","activeHistogram","handleHistogramChange","histogramItems","isDataGood","_React$useState","_React$useState2","isDatailedLine","setDetailed","Select","onUpdate","options","keys_","width","Checkbox","q25","q50","q75","quartilesProps","PropTypes","pdfProps","valueMax","valueMin","ecdfProps","getQuartiles","getPDF","getECDF","getIsDataGood","pdfData","ecdfData","Card","theme","selected","restProps","isTypeSelection","isTypeContainer","isClickable","defaultTheme","defaultView","handleClick","onKeyDown","useActionHandlers","Box","role","clickable","tabIndex","QueryWidgetLazy","Loader","centered","useQueryWidgetSidePanel","useSidePanel","onClose","useAppRumMeasureStart","useRumMeasureStart","subPage","getOnlyFolders","suggestions","filter_","child","showErrorInModal","error","message","_getCorrectInnerError","ErrorMessage","code","innerErrors","correctErrorCodes","values_","NetworkCode","find_","some_","getCorrectInnerError","inner_errors","prepareErrorMessage","SHOW_ERROR","hideError","HIDE_ERROR","openEditingPopup","objectPath","multipleMode","closeEditingPopup","withScope","scope","ResComponent","useHotkeysScope","displayName","getDisplayName","PathEditorModal","handleBlur","onBlur","_handleBlur","handleFocus","event","onFocus","_handleFocus","handleChange","newPath","_handleChange","handleApply","onApply","_handleApply","setPath","editingPath","inProcess","placeholder","showError","errorMessage","PathEditor","customFilter","defaultPath","showErrors","autoFocus","hasClear","YTErrorBlock","modalTitle","onConfirmButtonClick","onCancelButtonClick","isConfirmDisabled","loading","compose","SET_PATH","requests","CancelHelper","copyObjectIntoDirectory","from","to","parts","split","yt","copy","parameters","source_path","preparePath","destination_path","prepareDestinationPath","cancellation","saveCancelToken","copySingleObject","charAt","exists","then","exist","copyObjectWithRename","CopyObjectModal","preserve_account","recursive","handleConfirmButtonClick","copyPath","doCopy","handleCancelButtonClick","abortRequests","resetOptions","CLOSE_COPY_OBJECT_POPUP","copying","onUpdateRecursiveCopy","onUpdatePreserveAccount","toPath","_this$props3","copyObject","updateView","_this$props4","Flex","direction","mapDispatchToProps","copyingPath","onSuccess","dispatch","COPY_OBJECT","REQUEST","Promise","resolve","startTransaction","timeout","id","copyRequests","command","transaction_id","titleUnquoted","wrapBatchPromise","executeBatchWithRetries","YTApiId","navigationCopy","errorTitle","saveCancelSourceCb","commitTransaction","abortTransaction","reject","copyObjects","SUCCESS","toaster","add","autoHiding","CANCELLED","FAILURE","removeAllRequests","_navigation$modals$co","navigation","modals","CreateDirectoryModal","onRecursiveUpdate","_this$props$clearCrea","clearCreateDirectoryError","creatingPath","createDirectory","CLOSE_CREATE_DIRECTORY_POPUP","creating","CREATE_DIRECTORY","create","CREATE_MESSAGE","_state$navigation$mod","moveObjectIntoDirectory","move","moveSingleObject","moveObjectWithRename","MoveObjectModal","movedPath","doMove","CLOSE_MOVE_OBJECT_POPUP","renaming","moveObject","afterMoveStrategy","updatePath","destinationPath","MOVE_OBJECT","moveRequests","navigationMove","moveObjects","entityId","output_format","$value","$attributes","encode_utf8","rumLogError","resolveEntityPath","JSON","parse","result","_items$","getPath","_navigation$modals$mo","getNextObjectName","initialPath","INITIAL_STEP","checkPathExists","isExists","showErrorPopup","findCorrectObjectName","inTrash","startsWith","restoreObject","restorePath","getState","RESTORE_OBJECT","EXIST","correctRestorePath","OPEN_RESTORE_POPUP","INCORRECT_PATH","openAction","errorAction","RestoreObjectModal","restoredPath","CLOSE_RESTORE_POPUP","restoring","_navigation$modals$re","prepareRestorePath","lastChar","SUPPRESS_REDIRECT","slice","openDeleteModal","checkIsTrash","OPEN_DELETE_OBJECT_POPUP","getInfo","realPath","parsedRealPath","ypath","stringify","getKey","all","ytApiV3Id","navigationGetPathInfo","createDestinationPath","account","login","moment","unix","DeleteObjectModal","handleDeleteClick","deleteObject","deleteObjects","getRealPath","getRealPaths","loadingRealPath","errorRealPath","renderLoader","renderError","renderMultipleModeContent","errorData","errorDataRealPath","errorContent","_this$props5","permanently","togglePermanentlyDelete","Label","_this$props6","multipleInfo","ErrorBoundary","multiple","index","resourceUsage","_index","unmergedRows","diskSpace","nodeCount","MapNodeIcon","NO_VALUE","renderPermanentlyCheckbox","_this$props7","MetaTable","buildItems","_this$props8","closeDeleteModal","helpLinkUrl","UIFactory","docsUrls","helpLink","HelpLink","confirmTheme","footerContent","LOAD_REAL_PATH","includes","navigationGetPath","info","console","actions","label","_navigation$modals$de2","transaction","DELETE_OBJECT","CLOSE_DELETE_OBJECT_POPUP","_dispatch","_getState","global","_navigation$modals$de","remove","set","input_format","deleteCurrentObject","currentPath","getRawPath","realPathDecoded","decodeEscapedAbsPath","navigateParent","_getState3","_navigation$modals$de3","navigationDelete","permanentlyDeleteObjects","setAttributesRequests","input","navigationMoveToTrashRestorePath","navigationMoveToTrash","moveObjectsIntoTrash","responses","output","reverse","TOGGLE_PERMANENTLY_DELETE","AclTabParams","_defineProperty","IdmObjectType","PATH","rumType","RumMeasureTypes","NAVIGATION_TAB_ACL","NavigationAcl","ACCESS_CONTROL_OBJECT","NAVIGATION_TAB_ACL_ACCESS","AccessContentAcl","createACLTabComponent","idmKind","mapStateToProps","getAttributes","isPrincipalACLtab","mode","loadState","getAclLoadState","makeMapStateToProps","_AclTabParams$idmKind","startDeps","allowStart","isFinalLoadingStatus","useRumMeasureStop","stopDeps","allowStop","makeComponentWithRum","AccessAclTab","makeTableRumId","measureId","isDynamic","NAVIGATION_CONTENT_TABLE_DYNAMIC","NAVIGATION_CONTENT_TABLE_STATIC","RumWrapper","getColumnPresetEndpoint","utf8","unipika","utils","_loadStaticTable","requestOutputFormat","useZeroRangeForPreload","stringLimit","moveBackward","requestedPageSize","defaultTableColumnLimit","columns","offsetValue","useYqlTypes","decodedColumns","outputFormat","apiId","getCellSize","getTransaction","getMoveOffsetBackward","getRequestedPageSize","getDefaultTableColumnLimit","getColumns","getNextOffset","isYqlTypesEnabled","decodeNameField","getRequestOutputFormat","prepareRequest","table_reader","workload_descriptor","category","relativePath","getIsDynamic","LOAD_TYPE","PRELOAD","tableReadPreload","tableRead","fetch","readStaticTable","reverseRows","sent","apply","loadTableRows","getIsStrict","loadPromise","keyColumns","getKeyColumns","_getNextOffset","offset","descending","orderBySupported","offsetColumns","limit","isEmpty_","isSorted","getValue","preparedOffset","replace","part","trim","ranges","lower_limit","tablet_index","row_index","upper_limit","allColumns","Columns","getSchemaColumns","dynTableCheckPerm","checkPermission","permission","user","permissions","keyColumnsNames","keyBy_","_reduce_","availableColumns","omittedColumns","has_","deniedKeyColumns","decode","query","Query","prepareQuery","dump_error_into_response","dynTableSelectRowsPreload","readDynamicTable","getVisibleColumns","getOmittedColumns","getDeniedKeyColumns","Error","key_columns","dynTableSelectRows","loadDynamicTable","_x","_x2","_x3","_x4","loadStaticTable","schemaColumns","getTableColumnNamesFromSchema","injectColumnsFromSchema","updateTableData","_getNextOffset2","GET_TABLE_DATA","UPDATE","yqlTypes","storedColumns","preparedColumns","prepareColumns","preparedOmittedColumns","prepareOmittedColumns","setColumns","newOffsetValue","previousRows","getRows","addRowCount","prepareKey","getColumnsValues","SET_OFFSET","SET_COLUMNS","closeColumnSelectorModal","CLOSE_COLUMN_SELECTOR_MODAL","updateColumns","column","columnsOrder","getColumnsOrder","storeAllColumns","SET_COLUMNS_ORDER","setColumnsOrder","SET_TABLE_COLUMNS_PRESET_HASH","toggleFullScreen","mergeScreen","TOGGLE_FULL_SCREEN","_progress$value","_event$total","total","_event$loaded","loaded","progress","calcProgressProps","Progress","stack","WRITE_ATTRIBUTES","json","enable_type_conversion","yson","dsv","enable_string_to_all_conversion","schemaful_dsv","xlsx","getFileTypes","payload","fileTypes","getConfigUploadTable","uploadTableExcelBaseUrl","UploadManager","file","fileType","inProgress","append","firstRowAsNames","secondRowAsTypes","showOverwriteConfirmation","cancelHelper","onReset","onFile","cancelUpload","files","lastDotIndex","lastIndexOf","extStr","substr","find","fileError","checkFile","renderConfirm","Button","renderClose","handleClose","onUploadProgress","onConfirmImpl","setOverwriteConfirmationVisible","proxy","externalProxy","uploadConfig","onStartUpload","txId","writeTable","setup","uploadTableUseLocalmode","location","getWriteAttributes","removeAllAndSave","onStopUpload","onXlsxUpload","_this$state2","FileDropZone","isDropable","isEmpty","renderFileContent","renderSettings","renderProgress","_this$typeSpecificFie","typeSpecificFields","fields","initials","YTDFDialog","onAdd","modal","initialValues","caption","extras","hideFilter","_toConsumableArray","_this3","Object","assign","_this$state3","docsUrl","FileUploadProgress","uploadTableMaxSize","schema","withColumns","isCancel","_error$response","response","_this4","_this$state4","readyUrl","uploadUrl","_this4$state","start_row","URLSearchParams","String","header","types","formData","FormData","withCredentials","withXSRFToken","xsrfCookieName","getXsrfCookieName","xsrfHeaderName","generateNextToken","_this5","handleShow","Icon","awesome","renderFooterContent","renderCustomConfirm","renderCustomCancel","renderOverwriteConfirmationDialog","connector","getSchema","_getCurrentClusterCon","getCurrentClusterConfig","withVisible","DYN_TABLES_ALLOWED_STATES_OF_ACTION","mount","unmounted","unmount","mounted","frozen","freeze","unfreeze","DYN_TABLES_ALLOWED_ACTIONS_BY_STATE","mixed","showDynTablesStateModalByPaths","paths","DYN_TABLES_STATE_MODAL_PARTIAL","showModal","showDynTablesStateModalByNodes","selectedNodes","allowedFrom","tabletState","dynTablesChangeState","wrapApiPromiseByToaster","navigationDynTableState","toasterName","successContent","batchType","skipSuccessToast","waitWhileThereIsTransient","capitalize_","delayed","navigationGetTabletState","results","toRecheck","DynamicActions","useDispatch","Fragment","StaticActions","DownloadManager","table","mountUnmountTable","getMetrics","countEvent","ytApiV3","RemountAlert","attributesWithTypes","getAttributesWithTypes","_useState","useState","_useState2","pending","setPending","handleOnRemount","ytApiV4","remountTable","_ypath$getValues","getValues","_ypath$getValues2","remountNeededTabletCount","tabletCount","showDiffInfo","diffInfo","Alert","layout","mediumList","tableType","getTableType","remountNeeded","onEditEnableReplicatedTableTracker","tabletErrorCount","getTabletErrorsBackgroundCount","useMemo","makeMetaItems","CollapsibleSection","UI_COLLAPSIBLE_SIZE","ReplicatedTableSettingsButton","setVisible","toggleVisibility","ReplicatedTableSettingsDialog","_React$useState3","_React$useState4","setError","form","_form$getState$values","auto_replica_tracker","headerProps","replica_cluster","replica_path","getNavigationReplicatedTableLoadingStatus","store","replicatedTable","calculateLoadingStatus","getReplicatedTableReplicas","replicas","getAllowEnableReplicatedTracker","getReplicatedTableReplicasMap","error_count","getNumberDeprecated","cluster_name","replicated_table_tracker_enabled","getBoolean","replication_lag_time","tableSets","default","ReplicatedTable","replica","performReplicaAction","replicaValue","replicaAttributes","isAsync","atomicity","replicaData","replicatedTableTracker","ClickableAttributesButton","modeState","updateEnableReplicatedTableTracker","loadReplicas","abortAndReset","tableMode","enable_replicated_table_tracker","css","striped","itemHeight","isLoading","tableItems","sets","renderName","renderField","content_type","errors","renderErrors","renderAsReadableField","renderState","automatic_mode_switch","renderAutomaticModeSwitch","bind","renderAsTimeDuration","computeKey","hasActions","CypressNodeTypes","CHAOS_REPLICATED_TABLE","LoadDataHandler","TableMeta","StickyContainer","stickyTopClassName","Toolbar","itemsToWrap","TableActions","ElementsTable","tableSettings","columnName","replicaLink","Page","NAVIGATION","StatusBulb","enableTableTracker","align","flag","ReplicatedTableConnected","_getReplicatedTableDa","getReplicatedTableData","allowEnableReplicatedTracker","_ypath$getValues3","_ypath$getValues4","ReplicatedTableWithRum","useDisableMaxContentWidth","NAVIGATION_CONTENT_REPLICATED_TABLE","LinkConnected","targetPath","broken","main","getDownloadPath","cypressPath","makeDirectDownloadPath","encodeURIComponent","getIsEmpty","getIsTooBig","MAX_FILE_SIZE","getNavigationFileLoadingStatus","NavigationExtraActions","getType","getNavigationPathAttributes","_Fragment","renderNavigationExtraActions","messageBlock","codeBlock","renderMeta","compression","erasureReplication","downloadPath","href","target","renderTooBigInfo","isTooBig","loadFile","LOAD_FILE","readFile","FileConnected","_state$navigation$con","getEffectiveMode","useEffect","initialLoading","rowKey","_row","DataTableWrapper","useRawStrings","getSettingTableDisplayRawStrings","shouldUseYqlTypes","schemaByName","getSchemaByName","ysonSettings","isFullScreen","_useShowPrevewHandler","getOffsetValue","_React$useMemo","dataHandler","saveCancellation","token","onStartLoading","onError","onErrorTableCellPreview","rowIndex","currentOffset","cellData","getYqlTypes","rowData","injectTableCellData","onShowPreview","tag","allowInjectData","isInlinePreviewAllowed","onCellPreview","useShowPrevewHandler","dtColumns","updating","setTimeout","requestAnimationFrame","window","dispatchEvent","Event","fullscreen","DataTable","SharePresetButton","visibleColumns","columnsEncoded","request","method","headers","saveColumnPreset","hash","openInNewTab","pin","qa","SavePresetButton","getAllColumns","ColumnsPresetButton","getColumnsPresetHash","actionStyle","marginRight","openColumnSelectorModal","OPEN_COLUMN_SELECTOR_MODAL","isStrict","getSchemaStrict","allowPickColumns","showAllColumns","allowUserColumnPresets","getConfigData","style","face","Secondary","methodMap","nativeAPI","document","unprefixedMethods","returnValue","methodList","exitFullscreenMethod","entries","eventNameMap","change","fullscreenchange","fullscreenerror","screenfull","element","documentElement","onFullScreenEntered","off","on","returnPromise","requestFullscreen","catch","exit","isFullscreen","onFullScreenExit","exitFullscreen","onchange","callback","onerror","eventName","addEventListener","removeEventListener","raw","defineProperties","fullscreenElement","enumerable","isEnabled","fullscreenEnabled","FullScreen","_ref$enabled","enabled","_ref$onChange","container","useRef","isFullScreenAllowed","changePageSize","pageSize","CHANGE_PAGE_SIZE","changeCellSize","cellSize","CHANGE_CELL_SIZE","setTableDisplayRawStrings","getPageSize","allowRawStrings","stringLimitProps","cellSizeRadioButtonItems","evt","pageSizeProps","pageSizeRadioButtonItems","RadioButton","xmlnsXlink","mixBlendMode","xlinkHref","transform","getNavigationPathAttributesLoadState","LOADING_STATUS","LOADED","basePath","getJupyterBasePath","Logo","height","moveOffset","prevOffsetValue","MOVE_OFFSET","openOffsetSelectorModal","OPEN_OFFSET_SELECTOR_MODAL","renderInput","onEndEditing","rowCount","Filter","iconLeft","RangeInputPicker","onOutsideClick","onAfterUpdate","onSubmit","maxValue","infoPointsCount","renderPlaceholder","handleStartEditing","progressWidth","getProgressWidth","getRowCount","editing","changeEditing","edit","dynamic","OffsetSelectorButton","moveOffsetToStart","moveOffsetToLeft","getBottomBoundKey","moveOffsetToRight","getUpperBoundKey","moveOffsetToEnd","isPaginationDisabled","getIsPaginationDisabled","isTableEndReached","getIsTableEndReached","Pagination","handler","hotkeyHandler","hotkeyScope","hotkey","previous","last","YQLKitButton","_UIFactory$yqlWidgetS","yqlWidgetSetup","getNavigationSqlService","getSettingsData","isDeveloper","isAdmin","isQtKitEnabled","isYqlKitEnabled","hasYqlWidget","useNavigationSidePanelMode","panelMode","sidePanelMode","setPanelMode","setNavigationSidePanelMode","OpenQueryButtonsContent","_useNavigationSidePan","_useSidePanel","renderWidget","openWidget","closeWidget","widgetContent","createQueryFromTablePath","QueryEngine","YQL","OpenQueryButtons","autoOpen","_useNavigationSidePan2","onOpenYqlKit","_useSelector","allowQtAutoOpen","createNewQueryUrl","opened","onOpen","NAVIGATION_ATTRIBUTES_EDITOR_REQUEST","NAVIGATION_ATTRIBUTES_EDITOR_SUCCESS","NAVIGATION_ATTRIBUTES_EDITOR_ERROR","NAVIGATION_ATTRIBUTES_EDITOR_PARTIAL","getNavigationAttributesEditorAttributes","attributesEditor","attributesMap","getNavigationAttributesEditorPath","getNavigationAttributesEditorError","getNavigationAttributesEditorVisible","getNavigationAttributesEidtorNodesByTypes","attrsMap","staticTables","mapNodes","dynamicTables","attrs","getNavigationAttributesEditorStaticTables","getNavigationAttributesEditorDynamicTables","getNavigationAttributesEditorMapNodes","EDITABLE_ATTRIBUTES","showNavigationAttributesEditor","attributesEditorGetAttrs","getBatchError","join_","EDIT_MARKER","makeUiMarker","EDIT_MERGE_MARKER","navigationSetNodeAttributes","generalAttrs","storageAttrs","runMerge","warn","in_memory_mode","tablet_cell_bundle","restGeneralAttrs","newAttrs","isDynTable","prepareSetCommandForBatch","attributesEditorSet","prepareMergeParams","spec","input_table_paths","output_table_path","force_transform","promises","merge","opId","AppStoreProvider","OperationShortInfo","output_attribute_name","successTitle","autoHide","attributesEditorMerge","showTableEraseModal","TABLE_ERASE_MODAL_PARTIAL","runTableErase","combine_chunks","range","isNaN","erase","table_path","Node","iconType","parsedPath","parsedPathError","pathState","recursiveResourceUsage","dataWeight","sizePerMedium","chunks","tabletStaticMemory","tablets","masterMemory","locks","modified","created","linkParsedPath","linkPathState","targetPathBroken","targetPathState","chunkRows","contentMode","prepareTitle","prepareCaption","YPath","clone","escapeSpecialCharacters","prepareNavigationState","recursive_resource_usage","getResource","lock_count","modification_time","creation_time","target_path","row_count","unmerged_row_count","chunk_row_count","tablet_state","prettyprint","TITLE_PRINT_SETTINGS","CAPTION_PRINT_SETTINGS","SUPPORTS_RESOURCE_USAGE","_Node","indent","break","binaryAsHex","highlightControlCharacter","escapeWhitespace","asHTML","journal","updateResourceUsage","getFilteredNodes","isRootNode","UPDATE_RESOURCE_USAGE","nodesChunks","chunk_","batchedRequests","nodesChunk","executeBatch","navigationResourceUsage","resultChunks","dataMap","errorResults","resultChunkIndex","floor","getNodesData","nodeData","nodeValue","newData","GENERIC_ERROR_MESSAGE","details","selectAll","isAllSelected","allNodes","SELECT_ALL","Chooser","getIsAllSelected","handleSelectChange","useCallback","showRemoteCopyModal","ClickableText","_results$index","REMOTE_COPY_MODAL_PARTIAL","hideRemoteCopyModal","remoteCopy","dstCluster","MultipleActions","isOneSelected","isSelected","getSelectedNodes","isTooLarge","dynTablesActions","getSelectedNodesAllowedDynTablesActions","hasRestoreButton","allowModifyActions","dropdownButton","restoreMoveCopy","icon","OPEN_COPY_OBJECT_POPUP","OPEN_MOVE_OBJECT_POPUP","splice","navigationRestorePath","restoreObjects","transferItem","editItem","mergeSortSection","showTableSortModal","showTableMergeModal","dynTablesSection","onCopyPathClick","copyToClipboard","handleClearAll","buttonText","onCopy","DropdownMenu","switcher","getFilterState","mapNode","getMediumType","mediumType","getTableColumns","customSort","chooser","renderHeader","disk_space","_node$sizePerMedium","MediumType","ALL","data_weight","chunk_count","node_count","tablet_static_memory","master_memory","tablet_count","multipleActions","getPreparedTableColumns","transform_","getContentMode","getSelected","getSortState","tables","NAVIGATION_MAP_NODE_TABLE_ID","nodesData","getNodes","getParsedPath","ContentMode","DEFAULT","makeGetSetting","getSetting","NAMESPACES","multifilter","factors","sortState","groupByType","SettingName","GROUP_NODES","TYPE_WEIGHTS","asc","groupBy","includes_","every_","weight","reduce","getSortedNodes","getSortedNodesNames","getNodesInfo","sumNodesType","aggregation","countValues","keyValue","_keyValue","getMapNodeResourcesLoading","resourcesLoading","DATE_REGEXP","shouldApplyCustomSort","USE_SMART_SORT","field","test","getLoadState","getError","getSelectedIndex","strictIndex","findIndex_","getSelectedNodesDynTablesStates","dynTablesStates","pickBy_","showLinkToModal","LINK_TO_MODAL_PARTIAL","hideLinkToModal","linkPath","dstPath","createLink","PathActions","handleUpdateView","onMove","stopPropagation","onShowAttributes","onEditAttributes","onRestoreClick","onDeleteClick","onSort","onErase","onMerge","onMount","onUnmount","onFreeze","onUnfreeze","onLink","onTransfer","secondGroup","iconStart","firstGroup","menuItems","commonProps","onlyDropdown","dropDownBtnClassName","_props$dropDownBtnThe","dropDownBtnTheme","_props$dropDownBtnSiz","dropDownBtnSize","renderSwitcher","popupProps","EditTableActions","DataLensButton","getNavigationTableDataLensButtonAlerts","isEmptySchema","enableDynamicStoreRedRequired","datalensBaseUrl","datalensAllowedCluster","has","showTooltip","toUpperCase","btn","linkUrl","Warning","isUnmounted","allowPagination","Paginator","OffsetInput","ColumnSelectorButton","SettingsButton","JupyterButton","FullScreenButton","OffsetSelectorModal","isTableSorted","closeOffsetSelectorModal","minKeyValue","offsetValues","initialItems","_changeFilter","updateItemValue","prevItems","findIndex","changedItem","_handleInputChange","TextInput","RegExp","escapeRegExp_","visibleItems","filterItemsByName","renderSearchBox","renderItems","isOffsetSelectorOpen","itemProps","isRequired","CLOSE_OFFSET_SELECTOR_MODAL","getCurrentOffsetValues","getIsTableSorted","TableColumnsPresetNotice","getColumnsPresetColumns","getColumnsPresetError","log","collapsed","Yson","Table","columnsProps","accessor","renderColumnSelectorModal","srcColumns","isColumnSelectorOpen","renderTable","settings","visibleRows","stickyTop","isSplit","HEADER_HEIGHT","OVERVIEW_HEIGHT","stickyHead","syncHeadOnResize","sortable","stripedRows","displayIndices","emptyDataMessage","startIndex","getTableData","isYqlV3Types","handleScreenChanged","toolbar","TableOverview","WithStickyToolbar","hideToolbarShadow","toolbarClassName","sticky","hashToLoad","getColumnsPreset","ui_loadColumnPreset","_ref$data","encode","SET_TABLE_COLUMNS_PRESET","setTablePreset","setTablePresetError","_ref3$deniedKeyColumn","preset","forEach","_preset$columns","waitForFontFamilies","tableSimilarityEnabled","isTableSimilarityEnabled","field_weight_limit","max_selected_column_count","max_all_column_names_count","column_names","restoreSimilarColumns","restoreExactColumns","restoreColumns","_excluded2","storedIsFullScreen","TableConnected","getTableYsonSettings","splitScreen","getSrcColumns","getVisibleRows","TTLInfo","ttlItems","makeTTLItems","TTLLabel","getNoSuggestionsMsg","makeLink","inline","link","TableType","AGGREGATE_CHOICES","SELECT_EMPTY_VALUE","AggrTypes","TABLE_SETTINGS","COLUMNS","CreateTableModalContentImpl","nextId","STATIC","tableName","replicasCount","getNewTableReplicasCount","uniqueKeys","activeTabId","createNewColumn","selectedColumnTab","_primitiveTypes$","duplicate","userOptions","primitiveTypes","newTab","names","tmp","genNewName","_values$TABLE_SETTING","compCodec","compressionCodec","storageOption","erasureCodec","optimize_for","columnsRaw","reorderColumns","QUEUE","DYNAMIC","isEqual_","compression_codec","StorageOptions","REPLICATION","replication_factor","erasure_codec","schemaAttributes","unique_keys","aggregate","dataType","group","optional","lock","ascending","type_v3","sort_order","type_name","createTable","validateTableName","parentDirectory","closeCreateTableModal","lastValidationResult","validateForm","set_","nameCounters","columnData","nameIndexes","validateColumnData","indices","validateTableSettings","formValidator","indexById","sortBy_","ColumnDataTypes","ANY","YSON","isOrderedColumn","isSortedColumn","isDescendingColumn","aggr","SUM","MIN","MAX","INT64","UINT64","DOUBLE","XDELTA","STRING","ordered","validateAggregate","validateColumnDataType","validateColumnLock","str","round","ASCENDING","DESCENDING","isAscendingColumn","hasOrderedColumn","colData","hasUnorderedColumn","nameError","replicasCountError","validateReplicasCount","_primitiveTypes$2","_field$visibilityCond","when","isActive","compressionCodecs","erasureCodecs","groupSuggestions","pristineSubmittable","isApplyDisabled","validate","getFormValidator","onActiveTabChange","tab","separator","disablePortal","ERASURE","visibilityCondition","onCreateTab","getTitle","isRemovable","renderControls","_item","_onCreate","onRemove","required","hideClear","touched","getItems","getNoItemsMessage","_value","_oldValue","_field","_fieldName","_form","allGroups","setCreateTableGroupSuggestions","allLocks","setCreateTableLockSuggestions","_getCreateTableModalS","getCreateTableModalState","columnNameCounters","getPrimitiveTypes","getColumnGroupSuggestions","lockSuggestions","getColumnLockSuggestions","getCompressionCodecs","getErasureCodecs","_WithKeyboardNavigation","WithKeyboardNavigation","_args","hoverSelectedIndex","selectedIndex","wrapHotkeyHandler","_len2","_key2","selectIndex","maxIndex","selectNext","selectPrev","handleMouseMove","handleItemHover","handleItemSelect","elem","querySelector","windowHeight","clientHeight","bounding","getBoundingClientRect","bottomCoordinate","topCoordinate","scrollIntoView","scrollBy","handleItemKeyboardClick","onItemClick","hotkeys","keys","cssHover","onItemHover","onMouseMove","onItemSelect","Hotkey","withKeyboardNavigation","ElementsTableBase","MapNodesTable","_evt$target","_evt$target$contains","classList","contains","onChooserClick","hideOopsMsg","disableLogger","itemNavigationAllowed","batch","setMode","onSpaceHotkey","shiftKey","nativeEvent","setSelectedItem","renderChooser","renderRowCount","printColumnAsBytes","printColumnAsNumber","rowClassName","dyntable","defaultColumns","resources","resourcesColumns","tableId","renderLocks","renderModificationTime","renderCreationTime","renderAccount","tableProps","_createElement","LOADING","linkState","FormattedLink","renderNameImpl","renderTags","preventDefault","isTrashNode","renderTrash","isLinkToTrashNode","textOrLink","FormattedTextOrLink","asLink","WarningIcon","poolTreeIndex","fragments","fragment","pool","ROOT_POOL_NAME","poolTree","SCHEDULING","SchedulingTab","OVERVIEW","arrow","goToLink","viewLink","AccountLink","lastSelected","getLastSelected","lastIndex","nameIndex","SET_SELECTED_ITEM","MapNodesTableConnected","MapNodesTableWithRum","NAVIGATION_CONTENT_MAP_NODE","trimXLSX","fileName","_i","_arr","toLowerCase","endsWith","FILE_TYPES","getExcelBaseUrl","UploadManagerCreate","nameAlreadyUsed","parentDir","EXCEL_BASE_URL","_","alreadyUsed","checkNameAlreadyExist","validationState","UPLOAD_CONFIG","existingNodes","NodesTypesContainer","nodesInfo","closeCreateACOModal","CREATE_ACO_MODAL","createACO","namespace","formId","isDisabled","onValidation","formApi","makeFormSubmitError","footerProps","UploadFileManagerWithClose","uploadSettings","opts","setFile","isProgress","setProgress","_React$useState5","_React$useState6","progressEvent","setProgressEvent","random","uploadedFile","handleSubmit","filePath","clusterConfig","YT","clusters","ignore_existing","transactionId","writeFile","handleUploadProgress","compute_md5","ping_ancestor_transactions","uploadFile","useUploadFileManager","pathname","isUploadButtonDisabled","UploadFileManagerFileSettingsForm","extraProps","tbBlock","MapNode","fetchNodes","prevPath","prevTransaction","_this$props$error","MapNodeToolbarConnected","ERROR","renderView","CreateTableModal","showACOCreateButton","filterState","getMediumList","showCreateTableModal","isCreateTableModalVisible","TYPE","CONTENT_MODE_OPTIONS","RESOURCES","setFilter","SET_TEXT_FILTER","setContentMode","SET_CONTENT_MODE","FETCH_NODES","_UIFactory$getNavigat","navigationListNodes","list","getNavigationMapNodeSettings","additionalAttributes","saveRequestCancellation","getList","applyCustomSort","APPLY_CUSTOM_SORT","changeColumnSortOrder","setMediumType","SET_MEDIUM_TYPE","openCreateTableModal","openCreateACOModal","MapNodeConnected","MapNodeWithRum","MapNodeToolbar","_React$PureComponent","uploadXlsRef","uploadFileRef","createDirectoryButtonClick","OPEN_CREATE_DIRECTORY_POPUP","createTableButtonClick","uploadTableButtonClick","uploadFileButtonClick","createLinkButtonClick","createACOButtonClick","_UIFactory$getMapNode","getMapNodeExtraCreateActions","NoWrap","renderModals","debounce","prepareSimpleValue","ShowResourcesButton","SelectSingle","menuSize","popupClass","NodesTypes","isRoot","saveDocument","documentString","SET_DOCUMENT_EDIT_MODE","GET_DOCUMENT","t0","getNavigationDocumentLoadingStatus","selectNavigationDocument","EditButton","onEditClick","DocumentExtraTools","queryAutoOpen","isYqlView","_ref3$document","folding","extraTools","onSave","handleSaveDocument","jsonEditor","Text","variant","fullWidth","initialSplitSize","initialShowPreview","unipikaSettings","editMode","prepareSettings","navigationGetDocument","handleEditClick","handleOnCancel","handleOnDocumentSave","DocumentBody","DocumentEditModal","NAVIGATION_CONTENT_DOCUMENT","Document","TransactionConnected","startTime","handleTransactionAbort","ABORT_TRANSACTION","handleModalClose","modalContent","TransactionWithRum","NAVIGATION_CONTENT_TRANSACTION","Transaction","parentParsedPath","owner","started","start_time","fragmentFromYSON","getFilteredTransactions","transactionMap","transactions","rawTransactions","getTransactions","NAVIGATION_TRANSACTION_MAP_TABLE_ID","filteredTransactions","getNavigationTransactionMapLoadingStatus","TransactionMap","handleFilterChange","changeFilter","loadTransactions","renderIcon","renderId","renderOwner","renderStartTime","renderTitle","iconName","getIconNameForType","isLink","FormattedText","LOAD_TRANSACTIONS","navigationListTransactions","CHANGE_FILTER","TransactionMapConnected","TranscationMapWithRum","NAVIGATION_CONTENT_TRANSACTION_MAP","supportedContentTypes","map_node","portal_entrance","portal_exit","rootstock","scion","cell_node_map","sys_node","access_control_object_namespace_map","access_control_object_namespace","access_control_object","tablet_cell","chaos_cell","scheduler_pool_tree_map","scheduler_pool","string_node","int64_node","uint64_node","double_node","boolean_node","NAVIGATION_CONTENT_LINK","NAVIGATION_CONTENT_FILE","getNavigationTableLoadingState","getMeasureId","sybType","replicated_table","chaos_replicated_table","replication_log_table","nested_transaction","topmost_transaction_map","transaction_map","hunk_storage","emptyRate","getFamily","_state$navigation$tab","tabs","queue","status","statusData","family","getPartitionCount","_state$navigation$tab2","partition_count","getWriteDataWeightRate","_state$navigation$tab7","_state$navigation$tab8","write_data_weight_rate","getWriteRowCountRate","_state$navigation$tab9","_state$navigation$tab0","write_row_count_rate","getStatusError","statusError","getStatusLoading","statusLoading","getStatusLoaded","statusLoaded","getQueueStatusDataAlerts","_state$navigation$tab1","alerts","getQueueMode","filters","queueMode","getQueuePartitionIndex","queuePartitionIndex","getQueuePartitionsColumns","partitionsColumns","getQueueTabletCellHost","queueTabletCellHost","getQueueTabletCellId","queueTabletCellId","getQueueConsumerName","queueConsumerName","getQueueOwner","queueOwner","getQueueRateMode","queueRateMode","getQueueTimeWindow","queueTimeWindow","getPartitions","partitions","partitionsData","_partitionsData$map$f","_partitionsData$map","partition","_partition$write_data","_partition$write_row_","meta","partition_index","_partition$meta","_partition$meta$inclu","_partition$meta2","_partition$meta2$incl","toString","cell_id","getPartitionsError","partitionsError","getPartitionsLoading","partitionsLoading","getPartitionsLoaded","partitionsLoaded","getConsumers","_state$navigation$tab10","registrations","consumers","consumer","read_data_weight_rate","read_row_count_rate","getConsumerPartitionIndex","consumerPartitionIndex","getConsumerRateMode","consumerRateMode","getConsumerPartitionsColumns","getConsumerTimeWindow","consumerTimeWindow","getTargetQueue","targetQueue","getConsumerRegisteredQueues","consumerData","getTargetQueueStatusData","_getTargetQueue","_statusData$queues","getStatusData","_ref$queue","queues","getOwner","_getTargetQueueStatus","_getTargetQueueStatus2","getReadDataWeightRate","_getTargetQueueStatus3","_getTargetQueueStatus4","getReadRowCountRate","_getTargetQueueStatus5","_getTargetQueueStatus6","getTargetQueueError","targetQueueStatusData","getConsumerMode","consumerMode","_partition$read_data_","_partition$read_row_c","changeConsumerFilters","CONSUMER_CHANGE_FILTERS","QueueError","modificationTime","valueOf","abs","Date","now","getErrorWithCode","Info","TargetQueue","clusterQueueUrl","firstColon","genNavigationUrl","ConsumerQueueSelector","topMargin","_useSelector2","handleSelect","_registrations$0$queu","_registrations$","pref","findCommonPathParent","Prefix","_ref$size","marginBottom","backgroundColor","_counters$show","counters","formatter","hummerFormat","counterNames","_counters$key","BarChart","_counters$key2","Meta","partitionCount","readDataWeightRate","readRowCountRate","vital","SubjectCard","isNull","Multimeter","BytesPerSecond","RowsPerSecond","tabItems","CONSUMER_MODE","METRICS","PARTITIONS","changeConsumerMode","Extras","toggleRegisterDialog","register","_register","api","_response$results$","queuePath","queueCluster","consumerPath","consumerCluster","_response$results$2","queue_path","consumer_path","skipErrorToast","useRegisterMutation","rootApi","injectEndpoints","endpoints","build","mutation","queryFn","makeClusterSelectOptionsSameEnv","_clusters$map","environment","localeCompare","RegisterConsumerDialog","getRegisterDialogVisibility","_useRegisterMutation","_useRegisterMutation2","update","_useRegisterMutation3","clusterControlOptions","filterable","makeErrorFields","_form$getState","newValues","unwrap","hasValidationErrors","bool","getter","row","sortAccessor","datetime","hoverContent","HoverContent","_error$message","multimeter","valueFormat","number","readRateName","CONSUMER_RATE_MODE","ROWS","DATA_WEIGHT","readRateGetter","rateMode","timeWindow","loadConsumerPartitions","CONSUMER_PARTITIONS_LOAD_REQUEST","queueConsumerPartitions","CONSUMER_PARTITIONS_LOAD_SUCCESS","CONSUMER_PARTITIONS_LOAD_FAILURE","DataTableYT","useThemeYT","NoContent","hint","warning","rateItems","timeItems","CompactColumnSelector","changeConsumerPartitionIndex","changeConsumerRateMode","changeConsumerTimeWindow","changeConsumerPartitionsColumns","views","ExtraControls","View","MetricsComponent","getComponentForConsumerMetrics","PartitionsExtraControls","Partitions","emptyView","loadConsumerStatus","CONSUMER_STATUS_LOAD_REQUEST","queueConsumerStatus","CONSUMER_STATUS_LOAD_SUCCESS","state2","CONSUMER_STATUS_LOAD_FAILURE","_useViewByMode","ConsumerToolbar","growable","Alerts","_ref$marginDirection","marginDirection","alert","YTAlertBlock","writeDataWeightRate","writeRowCountRate","changeQueueRateMode","QUEUE_CHANGE_PERSISTED_STATE","changeQueueTimeWindow","QUEUE_MODE","CONSUMERS","EXPORTS","changeQueueMode","QueueMetrics","getComonentForQueueMetrics","createConsumer","_createConsumer","registerConsumer","_registerConsumer","_callee2","_response$results$3","_response$results$4","_context2","unregisterConsumer","_x5","_x6","_unregisterConsumer","_callee3","_response$results$5","_response$results$6","_context3","makeGetExportsParams","queueExportConfig","deleteExtraAttributes","_deleteExtraAttributes","configs","prevConfig","export_name","export_directory","exportsMutation","_exportsMutation","_batchApi$endpoints$f","newConfig","newConfigs","batchApi","fetchBatch","select","originating_queue_id","t1","queueApi","export","invalidatesTags","useExportMutation","useCreateConsumerMutation","useRegisterConsumerMutation","useUnregisterConsumerMutation","validateCreateConsumerPath","_validateCreateConsumerPath","_res$","_path$split$at","_res$2","parentPath","at","_typeof","CreateConsumerDialog","getCreateDialogVisibility","_useCreateConsumerMut","_useCreateConsumerMut2","_useCreateConsumerMut3","validator","toggleCreateDialog","UnregisterConsumerDialog","getUnregisterDialogVisibility","getConsumerPath","_useUnregisterConsume","_useUnregisterConsume2","_useUnregisterConsume3","closeUnregisterDialog","_useRegisterConsumerM","_useRegisterConsumerM2","_useRegisterConsumerM3","initialValue","preparedValues","QUEUE_RATE_MODE","_ref0","_consumer$split","_consumer$split2","UnregisterConsumer","openUnregisterDialog","changeQueueConsumerName","changeQueueOwner","writeRateName","writeRateGetter","classNames","_x$meta","_ref8","string","_x$meta2","loadQueuePartitions","QUEUE_PARTITIONS_LOAD_REQUEST","queuePartitions","QUEUE_PARTITIONS_LOAD_SUCCESS","QUEUE_PARTITIONS_LOAD_FAILURE","changeQueuePartitionIndex","changeQueueTabletCellHost","changeQueueTabletCellId","changeQueuePartitionsColumns","QUEUE_CHANGE_PARTITIONS_COLUMNS","queuePartitionsColumns","prepareUpdateValues","config","_restConfig$export_tt","_restConfig$export_pe","restConfig","output_table_name_pattern","use_upper_bound_for_table_names","export_ttl","export_period","_validateExportDirectory","period","whiteSpace","ExportsEditDialog","useFetchBatchQuery","_useExportMutation","_useExportMutation2","_useExportMutation2$","setInitialValues","rawValues","prepareInitialValues","configsValues","ExportsEdit","editDialogVisible","setEditDialogVisible","_useState3","_useState4","deleteDialogVisible","setDeleteDialogVisible","toggleEditDialogVisibility","toggleDeleteDialogVisibility","Value","makeNavigationLink","Time","alignItems","formatTimeDuration","ConsumersExtraControls","consumersLoading","consumersLoaded","borderLeft","_useExports","_useFetchBatchQuery","isFetching","obj","newObj","useExports","loadQueueStatus","QUEUE_STATUS_LOAD_REQUEST","queueStatus","QUEUE_STATUS_LOAD_SUCCESS","QUEUE_STATUS_LOAD_FAILURE","QueueToolbar","getLocksModeFilter","modeFilter","getLocksLoadStatus","getLocksFiltered","Locks","renderTransaction","operationId","operation_id","cellTag","parseInt","_clusterConfig$primar","primaryMaster","additional","findClusterConfigByOperationId","clusterId","operationIdUrl","page","Linkify","TemplateTime","onModeFilter","setLocksModeFilter","getLocks","renderIndex","renderLock","MAX_TRANSACTIONS_REQUESTS","CustomRadioButton","isPartial","renderModeFilter","renderMessage","child_key","attribute_key","GET_LOCKS","navigationLocks","rowLocks","navigationTransactions","_splitBatchResults","splitBatchResults","prepareData","IS_PARTIAL","PARTITION","LocksConnected","LocksWithRum","NAVIGATION_TAB_LOCKS","ErrorIcon","mdBlock","MarkdownLinePreview","_ref$allowHTML","allowHTML","hideModal","useMarkdown","html","div","createElement","innerHTML","plainText","innerText","ellipsis","footer","dangerouslySetInnerHTML","__html","ExternalDescription","_data$glossaryEntity","hasWarning","markdown","glossaryEntity","typeMismatchElement","elementsBlock","COLUMNS_TO_HIDE","Schema","externalSchemaUrl","externalSchema","externalSchemaError","loadExternalSchemaData","SchemaDataType","renderExternalColumn","_this$props$computedC","computedColumns","preparedSet","col","omit_","_columns$column","externalSchemaDescriptionSetup","virtualType","_loadExternalSchemaData","truePath","_yield$UIFactory$exte","load","Map","filteredSchema","updateFilter","SCHEMA_UPDATE_FILTER","SchemaConnected","getAttributesPath","getSchemaMeta","getFilteredSchema","getComputedColumns","SchemaWithRum","NAVIGATION_TAB_SCHEMA","prepareFlatColumns","flatColumns","correctPrefix","getStorePreloadValues","tablet","completed","failed","name_tablet_id","name_cell_id","tablet_id","cell_leader_address","allowedOrderTypes","DESC_ASC_UNORDERED","overall","replication_error_count","pivot_key","store_count","overlapping_store_count","store_preload","storePreload","aggregatedStorePreload","currentStorePreload","uncompressed_data_size","compressed_data_size","static_chunk","read","lookup","write","delete","unmerged_row_read_rate","merged_row_read_rate","static_chunk_read","static_chunk_lookup","dynamic_row_read_rate","dynamic_row_lookup_rate","dynamic_row_write_rate","dynamic_row_delete_rate","getRawTablets","getTabletsSortState","NAVIGATION_TABLETS_TABLE_ID","getActiveHistogram","histogramType","getSortedTablets","rawTablets","getFilteredTablets","tabletsFilter","sortedTablets","getPreparedDataForColumns","collection","mapValues_","getTablets","filteredTablets","preparedCollection","prepare","prepareAggregation","getHistograms","histogramItem","dataFormat","caps","histograms","getNavigationTabletsLoadingStatus","getTabletsExpandedHosts","expandedHosts","SUM_FIELDS","getTabletsMax","k","max_","getTabletsByNameRoot","tabletsMode","sortedAndFilteredItems","groupByKey","maxDst","maxHost","mapByName","dst","parent","level","leaves","addHostItem","isTopLevel","root","toArray_","childrenCount","_root$children$","sortTree","sortTreeInPlace","maxByLevel","getTabletsByName","expanded","isCollapsed","flattenTree","Tablets","useBytes","_this$props$maxByLeve","_item$level","asNumber","getProgressBarColorByIndex","renderBytesProgress","renderNumberProgress","onRowClick","toggleExpandedHost","loadTablets","defaultItems","structure","performance","by_host","by_cell","renderTabletId","renderCellId","renderHost","renderPivotKey","renderStorePreload","dynamic_read","dynamic_lookup","dynamic_write","dynamic_delete","itemMods","changeTabletsFilter","changeTabletsMode","histogramCollapsed","toggleHistogram","changeActiveHistogram","collapsibleSize","onToggle","renderOverview","top","TABLET","renderIdWithLink","genTabletCellBundlesCellUrl","none","freezing","unfreezing","mounting","unmounting","pivotKey","storePreloadProgress","prepareStorePreloadProgress","_Tablets","typedValueProps","$type","tabletProps","last_commit_timestamp","performance_counters","statistics","GET_TABLETS","navigationTablets","TYPED_OUTPUT_FORMAT","TOGGLE_HISTOGRAM","CHANGE_TABLETS_MODE","TABLETS_STATE_PARTIAL","CHANGE_ACTIVE_HISTOGRAM","TabletsConnected","TabletsWithRum","NAVIGATION_TAB_TABLETS","getAttributesTab","getAttributesLoadingInfo","requestAttributes","requestParams","_response$","attributesActions","onRequest","nodeAttributes","isCancelled","onFailure","Attributes","attributesPath","YsonDownloadButton","pathToFileName","AttributesWithRum","NAVIGATION_TAB_ATTRIBUTES","getAccessLogFilterRecursive","accessLog","accessLogFilters","getAccessLogFilterPagination","pagination","getAccessLogFilterPathRegex","path_regex","getAccessLogFilterUserRegex","user_regex","getAccessLogFilterMethod","method_group","getAccessLogFilterUserType","user_type","getAccessLogFilterScope","getAccessLogFilterTime","getAccessLogFilterFieldSelector","field_selector","getAccessLogFilterMetadata","metadata","getAccessLogFilterDistinctBy","distinct_by","getAccessLogLoading","getAccessLogReady","ready","getAccessLogLoaded","getAccessLogError","getAccessLogItems","accesses","getAccessLogAvailableTimeRange","availableTimeRange","getAccessLogPagesCount","total_row_count","totalRowCount","ceil","getAccessLogLastLoadedParams","skipEmpty","getAccessLogRequestParams","convertTimeToRequestParams","begin","end","getAccessLogHasChangedFilters","lastLoaded","getAccessLogLastLoadedFieldSelector","accesLogCancelHelper","fetchAccessLog","pathChanged","lastLoadedParams","ACCESS_LOG_PATH_CHANGED","ACCESS_LOG_REQUEST","ACCESS_LOG_PARTIAL","getAccessLogBasePath","removeAllAndGenerateNextToken","latest","erliest","ACCESS_LOG_SUCCESS","_e$response","ACCESS_LOG_FAILURE","setAccessLogFilters","ACCESS_LOG_FILTERS","setAccessLogFiltersPage","clipRule","TransactionInfo","CopyText","transaction_title","operation_title","copyText","DateHeaderMemo","DateHeader","MOVING","stickyFooter","STICKY_DOUBLE_TOOLBAR_BOTTOM","stickyBottom","PathItem","AccessLogTable","fieldSelector","instant","_ref4$row","original_path","ArrowRightIcon","PathTag","ReadableField","_ref9","transaction_info","headerTitle","AccountsLogTransactionInfo","pageCount","ColumnHeader","pageIndex","_ref1","isTarget","capitalize","AccessLogError","valueToSelection","selectionToValue","emptyValue","ACCESS_LOG_FIELD_SELECTOR_ITEMS","ACCESS_LOG_METHOD_ITEMS","ACCESS_LOG_USER_TYPE_ITEMS","ACCESS_LOG_SCOPE_ITEMS","AccessLogOpenQtButton","setLoading","newParams","_yield$wrapApiPromise","query_id","finish","AbbrSqlIcon","AccessLogFilters","AccessLogPagination","AccessLogTimeline","AccessLogFieldselector","AccessLogMetadata","AccessLogDistictBy","AccessLogPathRegexp","shrinkable","wrapperClassName","AccessLogUserRegexp","AccessLogUserTypeFilter","AccessLogScopeFilter","AccessLogMethod","AccessLogRecursive","AccessLogApplyFilters","hasChanges","SimplePagination","TextInputWithDebounce","METADATA_ITEMS","valueStr","vals","DISTINCT_BY_ITEMS","handleUpdate","initialState","EMPTY_OBJECT","maxVisibleValues","TIMELINE_SHOURCUTS","updateTime","updateShortcut","shortcutValue","_ref$from","_ref$to","TimelinePicker","onShortcut","topShortcuts","shortcuts","hasDatePicker","AvailableTimeRange","earliest","formatInterval","AccessLog","ACCESS_LOG_RESET_FILTERS","doubleHeight","getTabletErrors","tabletErrorsBackground","tabletErrors","replicationErrors","getTabletErrorsReplicationErrors","TabletErrorsConnected","tablet_errors","TabletErrorsCountNotice","TabletErrorsBlock","sectionClassName","ReplicationErrorsBlock","TabletErrorsWithRum","getTabletErrorsLoadingStatus","NAVIGATION_TAB_TABLET_ERRORS","counter","replicaId","ReplicaErrorHeader","getTabletErrorsBackgroundCountNoticeVisbile","TabletErrorsHeader","getTabletErrorsByPathError","tabletErrorsByPath","getTabletErrorsByPathLoading","getTabletErrorsByPathLoaded","getTabletErrorsByPathData","getTabletErrorsByPathDataParams","dataParams","getTabletErrorsByPathAllMethods","all_methods","getTabletErrorsByPathPageCount","getTabletErrorCountLimitExceeded","_state$navigation$tab3","error_count_limit_exceeded","getTabletErrorsByPathTimeRange","timeRangeFilter","getTabletErrorsByPathMethodsFilter","methodsFilter","getTabletErrorsByPathPageFilter","pageFilter","getTabletErrorsByPathTabletIdFilter","tabletIdFilter","countLimitExceededMessage","TabletErrorsByPathTable","_useTableColumnsAndDa","countLimitExceeded","_ref2$errors","timestamp","defaultExpandedCount","useTableColumnsAndData","DATA_TABLE_YT_SETTINGS_UNDER_TOOLBAR_DOUBLE_HEIGHT","dynamicRender","TabletErrorsRequest","TabletErrorsRequestToolbar","_useTabletErrorFromAp","timeRange","_calcFromTo","calcFromTo","tabletErrorsByPathActions","table_id","start_timestamp","end_timestamp","methods","prevDataParams","prevData","fixed_end_timestamp","count_limit","useTabletErrorFromApiLoad","_useTabletErrorFromAp2","allMethods","YTTimeline","hasRuler","maxVisibleValuesTextLength","TabletErrors","viewMode","getTabletErrorsViewMode","backgroundErrorCount","allowTabletErrorsAPI","TabletErrorsBackground","updateTabletErrorsViewMode","SegmentedRadioGroup","getUserAttributes","userAttributes","getUserAttributesLoadInfo","UserAttributes","userAttributesActions","navigationUserAttributes","UserAttributesWithRum","NAVIGATION_TAB_USER_ATTRIBUTES","TableMountConfig","getNavigationTableMountConfig","getNavigationMountConfigYsonSettings","Flow","supportedAttributeTypes","acl","ACL","user_attributes","Tab","ACCESS_LOG","AUTO","CONSUMER","Consumer","MOUNT_CONFIG","Queue","FLOW","getNavigationExtraTabs","component","getSupportedAttributeTypes","checkContentIsSupported","CONTENT","getComponentByContentType","getComponentByMode","noAccess","isContentTab","NavigationDescription","NavigationPermissionsNotice","isWriteable","getNavigationIsWritable","isAccountUsable","getNavigationIsAccountUsable","checkPermissionsError","getNavigationCheckPermissionsError","getNavigationPathAccount","accountAclLink","ACCOUNTS","AccountsTab","genAccountsAclLink","AttributesEditorLoaded","singleMode","getMediumListNoCache","storeError","stateError","setErr","currentTab","setCurrentTab","hasMapNodes","hasStaticTables","hasDynamicTables","hasTables","hasDynTableOrMapNode","pathsValues","annotationInitial","general","primary_medium","expiration_time","expiration_timeout","storage","compressionCodecValueFromString","normalizeErasureCodec","_storageOption","storageOptionFromErasureCodec","annotation","annotationPath","handleAdd","dataDiff","generalAttributes","storageAttributes","compressionCodecValueToString","erasureCodecFromStorageOption","invalidateYTAnnotation","forEachStaticTable","mergeNoticeAndError","DialogError","annotationTab","valuePath","inMemoryModeField","InMemoryMode","NONE","COMPRESSED","UNCOMPRESSED","optimizeForField","CreateExternalDescriptionButton","_UIFactory$externalAn","externalDescription","useExternalDescriptionQuery","externalAnnotationLink","externalAnnotationSetup","externalServiceName","ArrowUpRightFromSquare","AttributesEditor","validateStorage","validateReplicationFactor","getRemoteCopyModalVisible","remoteCopyModal","getRemoteCopyModalPaths","makeCompressionCodecFinder","findCompressionCodec","RemoteCopyModal","_pathsValues$","_response","calculateValueOnPoolsLoaded","loadedPoolNames","schema_inference_mode","override","excludeClusters","allowEphemeral","getNavigationTableEraseModalVisible","tableEraseModal","getNavigationTableEraseModalPath","TableEraseModal","validateRange","RANGE","TableSortModal","getCurrentUserName","getNavigationTableSortVisible","getNavigationTableSortPaths","suggestError","getNavigationTableSortError","suggestColumns","getNavigationTableSortSuggestColumns","attributeValues","getNavigationTableAttributesValues","_paths","_outputPath","outputPath","sort_by","pool_trees","runTableSort","hideTableSortModal","handlePathsChange","tableSortModalLoadColumns","errorFields","WaitForDefaultPoolTree","defaultPoolTree","isPathStaticTable","allowDescending","poolTrees","TableMergeModal","getNavigationTableMergeVisible","chunkSize","chunkSizeBytes","data_size_per_job","parseBytes","runTableMerge","merge_by","hideTableMergeModal","getDynTablesStateModalVisible","dynTablesStateModal","getDynTablesStateModalPaths","getDynTablesStateModalAction","DynTablesStateModal","WARN_TEXT","renderWarning","getLinkToModalState","linkToModal","LinkToModal","_validator2","_validator","getCreateACOModalState","createACOModal","CreateACOModal","Navigation","onTabChange","ORIGINATING_QUEUE","onEditButtonClick","trackVisit","updateTitleWithPath","onTransactionChange","updateTitle","tabSize","Tabs","active","underline","_this$props6$type","ContentViewer","_this$props8$error","NavigationError","_this$props9","hasError","renderEditButton","renderTabs","CellPreviewModal","NavigationConnected","isFinalState","isNavigationFinalLoadState","isIdmSupported","getIdmSupport","UI_TAB_SIZE","getTabs","NavigationWithRumMemo","NavigationWithMesure","NAVIGATION_PRELOAD","NavigationWithRum","Editor","setScope","cancelOnBlur","NavigationTopRowContent","getNavigationDefaultPath","setEditMode","toggleEditMode","RowWithName","urlParams","NavigationFavourites","justifyContent","grow","shrink","overflow","NavigationBreadcrumbs","onEdit","NavigationTools","favourites","getFavouritePaths","isInFavourites","isCurrentPathInFavourites","handleToggle","navigationToggleFavourite","handleItemClick","Favourites","NavigationPathToClipboard","onCopyToClipboard","NavigationTargetPathButton","decodedTargetPath","NavigationPathEditor","hideEditor","actualPath","getActualPath","_event$target","bcItems","getNavigationBreadcrumbs","getMode","history","useHistory","isLastItem","Breadcrumbs","Item","makeRoutedURL","navmode","Escaped","showBeforeEditorContent","EditableBreadcrumbs","onAction","keyText","showRoot","beforeEditorContent","afterEditorContent","renderEditor","RefreshButton","RestoreButton","handleClearTransaction","clearTransaction","handleEdit","setTransaction","getNavigationRestorePath","handleRestore","_props$debounce","_props$onUpdate","onEnterKeyDown","setInput","handleChangeExt","debounce_","handleKeyDown","cancel","withSplit","_WithSplit","WithSplit","ReactDOM","getElementById","SPLIT_PANE_ID","disableEdit","withControls","cancelOnClose","openOnClick","saveButtonView","cancelButtonView","onModeChange","breadcrumbsProps","EditableAsText","contentProps","endContent","marginLeft","FilePicker","inputRef","onLinkClick","click","_useFileDragDrop","isDragging","setIsDragging","onDragOver","onDragEnter","onDragLeave","onDrop","dataTransfer","useFileDragDrop","dropable","empty","dragging","_this$props2$alwaysSh","alwaysShowError","SidePanelPortal","widgetOpened","setWidgetOpened","withRouter","_props$theme","match","computeStateQuery","_ref$asLink","FormattedId","hovered","setHovered","ArrowToggle","I","ChevronDown","toggleActive","dropItems","buttonProps","themeProps","toggleDisabled","clear","renderDropDownMenu","renderHotkey","itemType","AlertContext","useAlertContext","context","AlertAction","bAlert","AlertContextProvider","Provider","typeToIcon","danger","filled","outlined","CircleInfo","success","CircleCheck","TriangleExclamation","utility","Thunderbolt","normal","addComponentKeysets","corners","spacing","py","px","t","useTranslation","Title","Actions","Xmark","colorText","iconByTheme","minContent","Action","ColorCircle","_ref$marginRight","_ref$view","CollapsibleSectionStateLess","overview","headingClassName","togglerRightPadding","margin","setCollapsed"],"sourceRoot":""}