@ytsaurus/ui 1.88.0 → 1.89.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/public/build/assets-manifest.json +48 -48
- package/dist/public/build/css/{3508.6c1c2786.chunk.css → 6429.ea79c9b6.chunk.css} +2 -2
- package/dist/public/build/css/6429.ea79c9b6.chunk.css.map +1 -0
- package/dist/public/build/css/components.70e435f3.chunk.css +2 -0
- package/dist/public/build/css/{components.40635897.chunk.css.map → components.70e435f3.chunk.css.map} +1 -1
- package/dist/public/build/css/navigation.23c4f062.chunk.css +2 -0
- package/dist/public/build/css/navigation.23c4f062.chunk.css.map +1 -0
- package/dist/public/build/css/{scheduling.5be9116a.chunk.css → scheduling.caa109d4.chunk.css} +2 -2
- package/dist/public/build/css/scheduling.caa109d4.chunk.css.map +1 -0
- package/dist/public/build/js/31.7fbb68da.chunk.js +2 -0
- package/dist/public/build/js/31.7fbb68da.chunk.js.map +1 -0
- package/dist/public/build/js/4326.35533baf.chunk.js +2 -0
- package/dist/public/build/js/4326.35533baf.chunk.js.map +1 -0
- package/dist/public/build/js/531.c9b75152.chunk.js +2 -0
- package/dist/public/build/js/531.c9b75152.chunk.js.map +1 -0
- package/dist/public/build/js/655.b9ca9e1c.chunk.js +2 -0
- package/dist/public/build/js/655.b9ca9e1c.chunk.js.map +1 -0
- package/dist/public/build/js/{6842.bde8a16b.chunk.js → 6842.b271abc1.chunk.js} +2 -2
- package/dist/public/build/js/6842.b271abc1.chunk.js.map +1 -0
- package/dist/public/build/js/9312.ae95dc3d.chunk.js +3 -0
- package/dist/public/build/js/9312.ae95dc3d.chunk.js.map +1 -0
- package/dist/public/build/js/cluster-page-wrapper.e590c7e4.chunk.js +2 -0
- package/dist/public/build/js/{cluster-page-wrapper.10097b2e.chunk.js.map → cluster-page-wrapper.e590c7e4.chunk.js.map} +1 -1
- package/dist/public/build/js/{dashboard.7d59b37c.chunk.js → dashboard.faa22a7b.chunk.js} +2 -2
- package/dist/public/build/js/{dashboard.7d59b37c.chunk.js.map → dashboard.faa22a7b.chunk.js.map} +1 -1
- package/dist/public/build/js/main.6a7f28d8.js +3 -0
- package/dist/public/build/js/main.6a7f28d8.js.map +1 -0
- package/dist/public/build/js/navigation.4c787adc.chunk.js +2 -0
- package/dist/public/build/js/navigation.4c787adc.chunk.js.map +1 -0
- package/dist/public/build/js/odin.94be07ae.chunk.js +2 -0
- package/dist/public/build/js/odin.94be07ae.chunk.js.map +1 -0
- package/dist/public/build/js/operations.2bf06800.chunk.js +2 -0
- package/dist/public/build/js/operations.2bf06800.chunk.js.map +1 -0
- package/dist/public/build/js/runtime.013ac4e9.js +2 -0
- package/dist/public/build/js/runtime.013ac4e9.js.map +1 -0
- package/dist/public/build/js/scheduling.9311689d.chunk.js +2 -0
- package/dist/public/build/js/scheduling.9311689d.chunk.js.map +1 -0
- package/dist/public/build/js/tablet.bfd0b58c.chunk.js +2 -0
- package/dist/public/build/js/tablet.bfd0b58c.chunk.js.map +1 -0
- package/dist/public/build/js/{vendors.68feab29.js → vendors.cdadc029.js} +3 -3
- package/dist/public/build/js/vendors.cdadc029.js.map +1 -0
- package/dist/public/build/js/{yt-df-dialog.aebd8107.chunk.js → yt-df-dialog.d89174c7.chunk.js} +2 -2
- package/dist/public/build/js/yt-df-dialog.d89174c7.chunk.js.map +1 -0
- package/dist/public/build/manifest.json +42 -42
- package/package.json +3 -3
- package/dist/public/build/css/3508.6c1c2786.chunk.css.map +0 -1
- package/dist/public/build/css/components.40635897.chunk.css +0 -2
- package/dist/public/build/css/navigation.3fcb92a4.chunk.css +0 -2
- package/dist/public/build/css/navigation.3fcb92a4.chunk.css.map +0 -1
- package/dist/public/build/css/scheduling.5be9116a.chunk.css.map +0 -1
- package/dist/public/build/js/4326.f0f9ad02.chunk.js +0 -2
- package/dist/public/build/js/4326.f0f9ad02.chunk.js.map +0 -1
- package/dist/public/build/js/5145.f54452ce.chunk.js +0 -2
- package/dist/public/build/js/5145.f54452ce.chunk.js.map +0 -1
- package/dist/public/build/js/531.c1a47a3c.chunk.js +0 -2
- package/dist/public/build/js/531.c1a47a3c.chunk.js.map +0 -1
- package/dist/public/build/js/655.2c8a30bf.chunk.js +0 -2
- package/dist/public/build/js/655.2c8a30bf.chunk.js.map +0 -1
- package/dist/public/build/js/6842.bde8a16b.chunk.js.map +0 -1
- package/dist/public/build/js/9312.54862b59.chunk.js +0 -3
- package/dist/public/build/js/9312.54862b59.chunk.js.map +0 -1
- package/dist/public/build/js/cluster-page-wrapper.10097b2e.chunk.js +0 -2
- package/dist/public/build/js/main.e311e250.js +0 -3
- package/dist/public/build/js/main.e311e250.js.map +0 -1
- package/dist/public/build/js/navigation.532fa983.chunk.js +0 -2
- package/dist/public/build/js/navigation.532fa983.chunk.js.map +0 -1
- package/dist/public/build/js/odin.b5abd8af.chunk.js +0 -2
- package/dist/public/build/js/odin.b5abd8af.chunk.js.map +0 -1
- package/dist/public/build/js/operations.5ab0f962.chunk.js +0 -2
- package/dist/public/build/js/operations.5ab0f962.chunk.js.map +0 -1
- package/dist/public/build/js/runtime.02e67b1d.js +0 -2
- package/dist/public/build/js/runtime.02e67b1d.js.map +0 -1
- package/dist/public/build/js/scheduling.34609dfc.chunk.js +0 -2
- package/dist/public/build/js/scheduling.34609dfc.chunk.js.map +0 -1
- package/dist/public/build/js/tablet.ee9b4b62.chunk.js +0 -2
- package/dist/public/build/js/tablet.ee9b4b62.chunk.js.map +0 -1
- package/dist/public/build/js/vendors.68feab29.js.map +0 -1
- package/dist/public/build/js/yt-df-dialog.aebd8107.chunk.js.map +0 -1
- /package/dist/public/build/js/{9312.54862b59.chunk.js.LICENSE.txt → 9312.ae95dc3d.chunk.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{main.e311e250.js.LICENSE.txt → main.6a7f28d8.js.LICENSE.txt} +0 -0
- /package/dist/public/build/js/{vendors.68feab29.js.LICENSE.txt → vendors.cdadc029.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"js/navigation.4c787adc.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/shared/tablet-errors-manager.ts","webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/AttributesButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/ClickableAttributesButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/Dropdown/Dropdown.js","webpack://@ytsaurus/ui/./src/ui/components/EditableAsText/EditableAsText.tsx","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/./src/ui/components/LoadDataHandler/LoadDataHandler.tsx","webpack://@ytsaurus/ui/./src/ui/components/SortIcon/SortIcon.tsx","webpack://@ytsaurus/ui/./src/ui/components/Text/Text.tsx","webpack://@ytsaurus/ui/./src/ui/components/TextInputWithDebounce/TextInputWithDebounce.tsx","webpack://@ytsaurus/ui/./src/ui/components/WarningIcon/WarningIcon.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/utils/react.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/ErrorBoundary/ErrorBoundary.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/utils/getErrorMessage.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/Loader/Loader.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/components/ChartKit.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/plugins/yagr/index.js","webpack://@ytsaurus/ui/./src/ui/components/YagrChartKit/YagrChartKit.tsx","webpack://@ytsaurus/ui/./src/ui/components/common/YTTimeline.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/constants/pagination.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/modals/cell-preview.ts","webpack://@ytsaurus/ui/./src/ui/containers/CellPreviewModal/CellPreviewModal.tsx","webpack://@ytsaurus/ui/./src/ui/containers/Host/Host.tsx","webpack://@ytsaurus/ui/./src/ui/hocs/withSplit.tsx","webpack://@ytsaurus/ui/./src/ui/hooks/use-side-panel.tsx","webpack://@ytsaurus/ui/./src/ui/hooks/useResizeObserver.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/helpers/pathToFileName.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/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/FilePicker/FilePicker.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.js","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/delete-object.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/Table/UploadManager/UploadManagerCreate.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/MapNode/NodesTypes/NodesTypes.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/create-aco.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/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/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/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/store/api/yt/endpoints/executeBatch.ts","webpack://@ytsaurus/ui/./src/ui/store/api/yt/index.ts","webpack://@ytsaurus/ui/./src/ui/store/api/navigation/tabs/queue/queue.ts","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/components/common/Timeline/index.ts","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/./node_modules/@gravity-ui/icons/svgs/abbr-sql.svg","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/components/ElementsTable/hocs/withKeyboardNavigation.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/MapNode/MapNodesTable.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/Navigation/PathEditorModal/DeleteObjectModal/DeleteObjectModal.tsx","webpack://@ytsaurus/ui/./src/shared/constants/settings-ts.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/NavigationDiscription/AnnotationWithPartial.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/NavigationDiscription/ActionButtons.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/NavigationDiscription/NavigationDescription.tsx","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/./src/ui/pages/query-tracker/QueryWidget/side-panel.tsx","webpack://@ytsaurus/ui/./src/ui/pages/scheduling/Content/tabs/ScherdulingOperataionsLoader/SchedulingOperationsLoader.tsx","webpack://@ytsaurus/ui/./src/ui/rum/rum-app-measures.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/chaos_cell_bundles/index.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/chyt/index.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/favourites.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/scheduling/attributes-to-filter.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/scheduling/expanded-pools.ts","webpack://@ytsaurus/ui/./src/ui/utils/scheduling/pool-child.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/scheduling/scheduling-pools.ts","webpack://@ytsaurus/ui/./src/ui/utils/scheduling/overview.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/scheduling/scheduling.ts","webpack://@ytsaurus/ui/./src/ui/utils/scheduling/detailsTable.tsx","webpack://@ytsaurus/ui/./src/ui/utils/scheduling/overviewTable.js","webpack://@ytsaurus/ui/./src/ui/utils/scheduling/pool.ts","webpack://@ytsaurus/ui/./src/ui/utils/scheduling/scheduling.ts","webpack://@ytsaurus/ui/./src/ui/utils/yql-types.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/i18n/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/libs/chartkit-error/chartkit-error.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/libs/settings/mergeSettingStrategy.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/libs/settings/settings.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/libs/settings/eventEmitter.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/utils/cn.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/utils/common.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/ChevronLeft.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/ChevronRight.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/Ellipsis.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/AlertContext.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/useAlertContext.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/AlertAction.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/constants.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/AlertContextProvider.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/AlertIcon.js","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/build/esm/components/Alert/i18n/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/Alert.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/AlertTitle.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Alert/AlertActions.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/DropdownMenu.classname.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/DropdownMenuContext.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/hooks/useListNavigation/moveBack.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/hooks/useListNavigation/moveForward.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/DropdownMenuNavigationContext.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/constants.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/utils/isSeparator.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/utils/shouldSkipItemNavigation.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/utils/stringifyNavigationPath.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/DropdownMenuPopup.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/hooks/useListNavigation/useListNavigation.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/utils/isSubmenuOpen.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/hooks/useSubmenu.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/DropdownMenuItem.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/utils/toItemList.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/DropdownMenu.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/hooks/usePopupVisibility.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/hooks/private/useConditionallyControlledState/useConditionallyControlledState.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/hooks/private/useStateWithCallback/useStateWithCallback.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/utils/typeCheckers.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/DropdownMenu/hooks/useScrollHandler.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Menu/MenuGroup.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Menu/MenuItem.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Menu/Menu.js"],"sourcesContent":["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};\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 from 'react';\n\nimport Button, {ButtonProps} from '../../components/Button/Button';\nimport Icon from '../../components/Icon/Icon';\n\nexport interface AttributesButtonProps extends ButtonProps {}\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 from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\n\nimport AttributesButton, {AttributesButtonProps} from './AttributesButton';\n\nimport {openAttributesModal} from '../../store/actions/modals/attributes-modal';\nimport {ButtonProps} from '../Button/Button';\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: 'Show attributes'},\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 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}\n onClose={this.close}\n open={true}\n anchorRef={this.anchor}\n hasArrow\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, {useCallback, useEffect} from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {TextInput} from '@gravity-ui/uikit';\nimport Icon from '../Icon/Icon';\n\nimport './EditableAsText.scss';\nimport Button, {ButtonProps} from '../Button/Button';\nconst block = cn('editable-as-text');\n\ninterface Props {\n className?: string;\n editorClassName?: string;\n\n text?: string;\n children: React.ReactNode;\n onChange: (v?: string) => void;\n disableEdit?: boolean;\n withControls?: boolean;\n cancelOnClose?: boolean;\n openOnClick?: boolean;\n size?: 's' | 'm' | 'l' | 'xl';\n saveButtonView?: ButtonProps['view'];\n cancelButtonView?: ButtonProps['view'];\n\n renderEditor?: (props: {\n value?: string;\n onBlur: () => void;\n onChange: (value?: string) => void;\n className?: string;\n onApply: (value?: string) => void;\n }) => React.ReactNode;\n onModeChange?: (isEdit: boolean) => void;\n}\n\nexport function EditableAsText(props: Props) {\n const {\n children,\n onChange,\n text,\n className,\n withControls,\n size,\n disableEdit,\n cancelOnClose,\n openOnClick,\n renderEditor,\n onModeChange,\n saveButtonView = 'normal',\n cancelButtonView = 'normal',\n } = props;\n const [editMode, setEditMode] = React.useState(false);\n const [input, setInput] = React.useState(text || '');\n\n useEffect(() => {\n setInput(text || '');\n }, [text]);\n\n const handleChangeMode = useCallback(\n (isEdit: boolean) => {\n if (onModeChange) onModeChange(isEdit);\n setEditMode(isEdit);\n },\n [onModeChange],\n );\n\n const closeEditMode = React.useCallback(() => {\n handleChangeMode(false);\n if (cancelOnClose) setInput(text || '');\n }, [cancelOnClose, handleChangeMode, text]);\n\n const startTextEdit = useCallback(() => {\n handleChangeMode(true);\n }, [handleChangeMode]);\n\n const handleWrapClick = () => {\n if (!editMode && openOnClick) {\n startTextEdit();\n }\n };\n\n const handleChange = React.useCallback((val?: string) => setInput(val ?? ''), [setInput]);\n\n const applyValue = useCallback(() => {\n handleChangeMode(false);\n onChange(input);\n }, [onChange, handleChangeMode, input]);\n\n const closeAndResetValue = useCallback(() => {\n handleChangeMode(false);\n setInput(text || '');\n }, [handleChangeMode, text]);\n\n const onApply = useCallback(\n (value?: string) => {\n handleChangeMode(false);\n onChange(value);\n },\n [handleChangeMode, onChange],\n );\n\n const handleKeyDown = React.useCallback(\n (evt: React.KeyboardEvent<HTMLElement>) => {\n if (evt.key === 'Enter') {\n applyValue();\n }\n if (evt.key === 'Escape') {\n closeAndResetValue();\n }\n },\n [applyValue, closeAndResetValue],\n );\n\n const controlSize = size ? size : 'm';\n\n return (\n <div\n className={block(null, [className || '', editMode ? 'edit' : ''])}\n onClick={handleWrapClick}\n >\n {editMode ? (\n <>\n {renderEditor ? (\n renderEditor({\n value: input,\n onChange: handleChange,\n className: block('control'),\n onBlur: closeEditMode,\n onApply,\n })\n ) : (\n <TextInput\n className={block('control')}\n autoFocus\n size={controlSize}\n value={input}\n onUpdate={handleChange}\n onKeyDown={handleKeyDown}\n onBlur={closeEditMode}\n />\n )}\n {withControls && (\n <>\n <Button\n className={block('control')}\n view={saveButtonView}\n extraProps={{onMouseDown: applyValue}}\n size={controlSize}\n >\n <Icon awesome={'check'} size={controlSize} />\n </Button>\n <Button\n className={block('control')}\n view={cancelButtonView}\n extraProps={{onMouseDown: closeAndResetValue}}\n size={controlSize}\n >\n <Icon awesome={'times'} size={controlSize} />\n </Button>\n </>\n )}\n </>\n ) : (\n <React.Fragment>\n {children}\n {!disableEdit && (\n <Button\n className={block('control', {type: 'edit'})}\n view=\"outlined\"\n onClick={startTextEdit}\n size={controlSize}\n >\n <Icon awesome={'pencil'} size={controlSize} />\n </Button>\n )}\n </React.Fragment>\n )}\n </div>\n );\n}\n\nexport function EditButton({\n onClick,\n size = 'm',\n}: {\n onClick: () => void;\n size?: ButtonProps['size'];\n}) {\n return (\n <Button className={block('edit-btn')} onClick={onClick} size={size}>\n <Icon awesome={'pencil'} />\n </Button>\n );\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 YagrChartKit, {\n RawSerieData,\n YagrWidgetData,\n getSerieColor,\n} from '../YagrChartKit/YagrChartKit';\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 <YagrChartKit 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 conains <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","import React, {Component} from 'react';\n\nimport {Toaster} from '@gravity-ui/uikit';\nimport {YTErrorBlock} from '../../components/Error/Error';\nimport hammer from '../../common/hammer';\n\nimport {showErrorPopup} from '../../utils/utils';\nimport {YTError} from '../../types';\n\nconst toaster = new 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 cn from 'bem-cn-lite';\n\nimport format from '../../common/hammer/format';\nimport Icon from '../../components/Icon/Icon';\nimport {Tooltip} from '../../components/Tooltip/Tooltip';\nimport {OrderType, nextSortOrderValue} from '../../utils/sort-helpers';\n\nimport './SortIcon.scss';\n\nconst block = cn('sort-icon');\n\nconst ICON_BY_TYPE = {\n ['']: 'sort',\n asc: 'sort-up',\n desc: 'sort-down',\n 'asc-undefined': 'arrow-to-bottom',\n 'desc-undefined': 'arrow-from-bottom',\n 'undefined-asc': 'arrow-from-top',\n 'undefined-desc': 'arrow-to-top',\n} as const;\n\ninterface Props {\n className?: string;\n label?: string;\n onChange?: (nextOrder: OrderType) => void;\n order?: OrderType;\n hidden?: boolean;\n allowUnordered?: boolean;\n withUndefined?: boolean;\n}\n\nexport default class SortIcon extends React.Component<Props> {\n onClick = () => {\n const {order, onChange, allowUnordered, withUndefined} = this.props;\n if (!onChange) {\n return;\n }\n\n const nextOrder = nextSortOrderValue(order, allowUnordered, withUndefined);\n onChange(nextOrder);\n };\n\n render() {\n const {className, label, order, hidden} = this.props;\n const icon = ICON_BY_TYPE[order || ''];\n\n return (\n <span className={block({hidden}, className)} onClick={this.onClick}>\n {label && <span className={block('label')}>{label}</span>}\n <Tooltip\n className={block('icon')}\n content={order ? format.ReadableField(order) : 'Unordered'}\n >\n <Icon awesome={icon} face=\"solid\" />\n </Tooltip>\n </span>\n );\n }\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport './Text.scss';\nimport unipika from '../../common/thor/unipika';\nimport {UNIPIKA_ESCAPED_SETTINGS} from '../../utils';\n\nconst block = cn('yt-text');\n\ninterface Props {\n className?: string;\n children: React.ReactNode;\n}\n\nexport function Secondary({children, disabled}: Props & {disabled?: boolean}) {\n return <span className={block('secondary', {disabled})}>{children}</span>;\n}\n\nexport function Bold({children}: Props) {\n return <span className={block('bold')}>{children}</span>;\n}\n\nexport function SecondaryBold({children}: Props) {\n return (\n <Secondary>\n <Bold>{children}</Bold>\n </Secondary>\n );\n}\n\nexport function Warning({children, className}: Props) {\n return <span className={block('warning', className)}>{children}</span>;\n}\n\nexport function WarningLight({children, className}: Props) {\n return <span className={block('warning-light', className)}>{children}</span>;\n}\n\nexport function NoWrap({children}: Props) {\n return <span className={block('no-wrap')}>{children}</span>;\n}\n\nexport function Escaped({text, onClick}: {text: string; onClick?: (e: React.MouseEvent) => void}) {\n const textNode = unipika.prettyprint(text, {\n ...UNIPIKA_ESCAPED_SETTINGS,\n asHTML: true,\n });\n return (\n <span\n onClick={onClick}\n className={block('escaped')}\n dangerouslySetInnerHTML={{__html: textNode}}\n />\n );\n}\n","import React from 'react';\nimport throttle_ from 'lodash/throttle';\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 throttle_(onUpdate as any, debounce);\n }, [debounce, onUpdate]);\n\n const handleChange = React.useCallback(\n (text: string) => {\n setInput(text);\n handleChangeExt.cancel();\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 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 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 React from 'react';\n// For some reason React.memo drops the generic prop type and creates a regular union type\n// https://github.com/DefinitelyTyped/DefinitelyTyped/issues/37087#issuecomment-542793243\nexport const typedMemo = React.memo;\n","import React from 'react';\nimport { CHARTKIT_ERROR_CODE } from '../../libs';\nimport { getErrorMessage } from '../../utils/getErrorMessage';\nexport class ErrorBoundary extends React.Component {\n constructor() {\n super(...arguments);\n this.state = {\n error: undefined,\n };\n this.resetError = () => {\n if (this.state.error) {\n this.setState({ error: undefined });\n }\n };\n }\n static getDerivedStateFromError(error) {\n return { error };\n }\n componentDidCatch() {\n var _a, _b;\n const { error } = this.state;\n if (error) {\n (_b = (_a = this.props).onError) === null || _b === void 0 ? void 0 : _b.call(_a, { error });\n }\n }\n componentDidUpdate(prevProps) {\n if (prevProps.data !== this.props.data) {\n const { error } = this.state;\n if (error && 'code' in error && error.code === CHARTKIT_ERROR_CODE.NO_DATA) {\n this.resetError();\n }\n }\n }\n render() {\n const { error } = this.state;\n if (error) {\n const message = getErrorMessage(error);\n if (this.props.renderError) {\n return this.props.renderError({\n error,\n message,\n resetError: this.resetError,\n });\n }\n return React.createElement(\"div\", null, message);\n }\n return this.props.children;\n }\n}\n","import { i18n } from '../i18n';\nexport function getErrorMessage(error) {\n const code = 'code' in error && error.code;\n return (error.message || code || i18n('error', 'label_unknown-error')).toString();\n}\n","import { __rest } from \"tslib\";\nimport React from 'react';\nimport { Loader as BaseLoader } from '@gravity-ui/uikit';\nimport { block } from '../../utils/cn';\nimport './Loader.css';\nconst b = block('loader');\nexport const Loader = (_a) => {\n var { renderPluginLoader } = _a, props = __rest(_a, [\"renderPluginLoader\"]);\n const pluginLoader = renderPluginLoader === null || renderPluginLoader === void 0 ? void 0 : renderPluginLoader();\n // React.Suspense complains about possible undefined in \"fallback\" property\n if (typeof pluginLoader !== 'undefined') {\n return pluginLoader;\n }\n return (React.createElement(\"div\", { className: b() },\n React.createElement(BaseLoader, Object.assign({}, props))));\n};\n","import { __rest } from \"tslib\";\nimport React from 'react';\nimport { i18n } from '../i18n';\nimport { CHARTKIT_ERROR_CODE, ChartKitError, settings } from '../libs';\nimport { getRandomCKId, typedMemo } from '../utils';\nimport { cn } from '../utils/cn';\nimport { ErrorBoundary } from './ErrorBoundary/ErrorBoundary';\nimport { Loader } from './Loader/Loader';\nimport './ChartKit.css';\nconst b = cn('chartkit');\nconst ChartKitComponent = (props) => {\n const widgetRef = React.useRef();\n const { instanceRef, id: propsId, type, isMobile, renderPluginLoader } = props, restProps = __rest(props, [\"instanceRef\", \"id\", \"type\", \"isMobile\", \"renderPluginLoader\"]);\n const ckId = React.useMemo(() => getRandomCKId(), []);\n const id = propsId || ckId;\n const lang = settings.get('lang');\n const plugins = settings.get('plugins');\n const plugin = plugins.find((iteratedPlugin) => iteratedPlugin.type === type);\n if (!plugin) {\n throw new ChartKitError({\n code: CHARTKIT_ERROR_CODE.UNKNOWN_PLUGIN,\n message: i18n('error', 'label_unknown-plugin', { type }),\n });\n }\n const ChartComponent = plugin.renderer;\n React.useImperativeHandle(instanceRef, () => ({\n reflow(details) {\n var _a;\n if ((_a = widgetRef.current) === null || _a === void 0 ? void 0 : _a.reflow) {\n widgetRef.current.reflow(details);\n }\n },\n }), []);\n return (React.createElement(React.Suspense, { fallback: React.createElement(Loader, { renderPluginLoader: renderPluginLoader }) },\n React.createElement(\"div\", { className: b({ mobile: isMobile }, 'chartkit-theme_common') },\n React.createElement(ChartComponent, Object.assign({ ref: widgetRef, id: id, lang: lang }, restProps)))));\n};\nconst ChartKitComponentWithErrorBoundary = React.forwardRef(function ChartKitComponentWithErrorBoundary(props, ref) {\n return (React.createElement(ErrorBoundary, { onError: props.onError, data: props.data, renderError: props.renderError },\n React.createElement(ChartKitComponent, Object.assign({ instanceRef: ref }, props))));\n}) /* https://stackoverflow.com/a/58473012 */;\nexport const ChartKit = typedMemo(ChartKitComponentWithErrorBoundary);\n","import { ChartKit } from './components/ChartKit';\nimport { settings } from './libs';\nexport * from './types/widget-data';\nexport * from './libs/chartkit-error/chartkit-error';\nexport { settings };\nexport default ChartKit;\n","import React from 'react';\nexport * from './types';\nexport const YagrPlugin = {\n type: 'yagr',\n renderer: React.lazy(() => import('./renderer/YagrWidget')),\n};\n","import ChartKit, {settings} from '@gravity-ui/chartkit';\nimport {YagrPlugin} from '@gravity-ui/chartkit/yagr';\nexport type {RawSerieData, YagrWidgetData} from '@gravity-ui/chartkit/yagr';\n\nimport '@gravity-ui/yagr/dist/index.css';\n\nsettings.set({plugins: [YagrPlugin]});\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 default ChartKit;\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport useResizeObserver from '../../hooks/useResizeObserver';\n\nimport {Timeline, TimelineProps} from './Timeline/Timeline';\nimport {calculateShortcutTime} from './Timeline/util';\n\nimport './YTTimeline.scss';\n\nconst block = cn('yt-timeline');\n\ninterface Props extends Omit<TimelineProps, 'padding' | 'hasPicker' | 'wrapper'> {\n className?: string;\n}\n\nconst DEFAULT_SHORTCUTS = [\n {\n title: '30m',\n time: '30m',\n },\n {\n title: '2h',\n time: '2h',\n },\n {\n title: '1d',\n time: '1d',\n },\n {\n title: '1w',\n time: '1w',\n },\n {\n title: '1mo',\n time: '1mo',\n },\n {\n time: 'custom',\n },\n];\n\nfunction YTTimelineImpl({className, topShortcuts, ...rest}: Props) {\n const [width, setWidth] = React.useState<number | undefined>();\n const [ref, setRef] = React.useState<HTMLDivElement | null>(null);\n\n const onResize = React.useCallback(\n ([item]: Array<ResizeObserverEntry>) => {\n const {width: w} = item?.contentRect || {};\n if (w !== width) {\n setWidth(w);\n }\n },\n [width, setWidth],\n );\n\n useResizeObserver({\n element: ref || undefined,\n onResize,\n });\n\n return (\n <Timeline\n {...rest}\n padding={0.05}\n hasPicker={true}\n topShortcuts={topShortcuts || DEFAULT_SHORTCUTS}\n wrapper={({ruler, picker}) => {\n return (\n <div className={block(null, className)} ref={setRef}>\n {picker}\n <div className={block('ruler')}>{ruler}</div>\n </div>\n );\n }}\n />\n );\n}\n\nexport type TimelineUpdateValue = Parameters<Required<TimelineProps>['onUpdate']>[0];\n\nexport const YTTimeline = React.memo(YTTimelineImpl);\n\nconst ONE_DAY_MS = 24 * 3600 * 1000;\n\nexport function calcFromTo(timeRange: {from?: number; to?: number; shortcutValue?: string}) {\n const {from = Math.floor(Date.now() - ONE_DAY_MS), to = Math.ceil(Date.now())} =\n timeRange.shortcutValue !== undefined\n ? calculateShortcutTime(timeRange.shortcutValue)\n : timeRange;\n\n return {...timeRange, from, to};\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","export const ROWS_PER_PAGE = 100;\n","import type {RootState} from '../../reducers';\n\nexport const selectCellPreviewVisible = (state: RootState) =>\n state.navigation.modals.cellPreviewModal.visible;\nexport const selectCellPreviewLoading = (state: RootState) =>\n state.navigation.modals.cellPreviewModal.loading;\nexport const selectCellPreviewData = (state: RootState) =>\n state.navigation.modals.cellPreviewModal.data;\nexport const selectCellPreviewYtCliDownloadCommand = (state: RootState) =>\n state.navigation.modals.cellPreviewModal.ytCliDownloadCommand;\nexport const selectCellPreviewNoticeText = (state: RootState) =>\n state.navigation.modals.cellPreviewModal.noticeText;\nexport const selectErrorPreviewCellPath = (state: RootState) =>\n state.navigation.modals.cellPreviewModal.error;\n","import React from 'react';\n\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Flex, Text} from '@gravity-ui/uikit';\n\nimport SimpleModal from '../../components/Modal/SimpleModal';\nimport {\n selectCellPreviewData,\n selectCellPreviewLoading,\n selectCellPreviewNoticeText,\n selectCellPreviewVisible,\n selectCellPreviewYtCliDownloadCommand,\n selectErrorPreviewCellPath,\n} from '../../store/selectors/modals/cell-preview';\n\nimport ClipboardButton from '../../components/ClipboardButton/ClipboardButton';\nimport block from 'bem-cn-lite';\n\nimport Yson from '../../components/Yson/Yson';\nimport {YTErrorBlock} from '../../components/Error/Error';\nimport {type YsonSettings, getPreviewCellYsonSettings} from '../../store/selectors/thor/unipika';\nimport {closeCellPreviewAndCancelRequest} from '../../store/actions/modals/cell-preview';\nimport {isMediaTag} from '../../utils/yql-types';\n\nimport './CellPreviewModal.scss';\n\nconst b = block('cell-preview-modal');\n\nexport const CellPreviewModal: React.FC = () => {\n const dispatch = useDispatch();\n\n const loading = useSelector(selectCellPreviewLoading);\n const data = useSelector(selectCellPreviewData);\n const visible = useSelector(selectCellPreviewVisible);\n const ytCliDownloadCommand = useSelector(selectCellPreviewYtCliDownloadCommand);\n const noticeText = useSelector(selectCellPreviewNoticeText);\n const error = useSelector(selectErrorPreviewCellPath);\n\n const unipikaSettings = useSelector(getPreviewCellYsonSettings);\n\n return (\n <SimpleModal\n title=\"Preview\"\n visible={visible}\n loading={loading}\n onCancel={() => dispatch(closeCellPreviewAndCancelRequest())}\n wrapperClassName={b('wrapper')}\n >\n <Flex\n qa=\"cell-preview-modal-content\"\n className={b('content')}\n gap={2}\n direction=\"column\"\n >\n <Flex gap={2} direction=\"column\">\n <Text variant=\"subheader-3\" color=\"secondary\">\n {noticeText}\n </Text>\n {ytCliDownloadCommand ? (\n <code className={b('command-wrapper')}>\n <div className={b('command')}>\n <div\n data-qa=\"cell-preview-command\"\n className={b('command-content')}\n title={ytCliDownloadCommand}\n >\n {ytCliDownloadCommand}\n </div>\n <ClipboardButton\n view={'flat-secondary'}\n text={ytCliDownloadCommand}\n size={'s'}\n />\n </div>\n </code>\n ) : null}\n </Flex>\n {error ? (\n <YTErrorBlock error={error} />\n ) : (\n <PreviewContent data={data} unipikaSettings={unipikaSettings} />\n )}\n </Flex>\n </SimpleModal>\n );\n};\n\ntype PreviewContentProps = {\n data: {$type?: string; $value?: any; $tag?: string} | undefined;\n unipikaSettings: YsonSettings;\n};\n\nfunction PreviewContent(props: PreviewContentProps) {\n const {data, unipikaSettings} = props;\n\n if (data?.$type === 'yql.string' || data?.$type === 'yql.json') {\n return <pre className=\"elements-code\">{data?.$value}</pre>;\n }\n\n if (data?.$type === 'yql.tagged' && data.$tag && isMediaTag(data.$tag)) {\n return <img src={`data:${data.$tag};base64,${data?.$value}`} alt=\"image-preview\" />;\n }\n\n return (\n <Yson\n className={b('yson-container')}\n folding={true}\n value={data?.$value}\n tableSettings={{dynamicRenderScrollParentGetter: undefined}}\n settings={unipikaSettings}\n customLayout={({toolbar, content}) => {\n return (\n <>\n <div className={b('toolbar')}>{toolbar}</div>\n {content}\n </>\n );\n }}\n />\n );\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\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","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 {useDispatch} from 'react-redux';\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 ResizeObserver from 'resize-observer-polyfill';\n\ninterface Props {\n element?: Element;\n onResize: ResizeObserverCallback;\n}\n\nexport default function useResizeObserver({element, onResize}: Props) {\n React.useEffect(() => {\n if (element) {\n const observer = new ResizeObserver(onResize);\n observer.observe(element);\n return () => {\n if (element) {\n observer.unobserve(element);\n }\n };\n } else {\n return undefined;\n }\n }, [element, onResize]);\n}\n","export const pathToFileName = (path: string) => {\n return path.replace(/\\/+/g, '_');\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 {Toaster} from '@gravity-ui/uikit';\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';\n\nconst requests = new CancelHelper();\nconst toaster = new Toaster();\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 {Toaster} from '@gravity-ui/uikit';\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';\n\nconst requests = new CancelHelper();\nconst toaster = new Toaster();\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 {Toaster} from '@gravity-ui/uikit';\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';\n\nconst requests = new CancelHelper();\nconst toaster = new Toaster();\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 {Toaster} from '@gravity-ui/uikit';\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';\n\nconst toaster = new 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","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';\nimport {Toaster} from '@gravity-ui/uikit';\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';\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 new 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 {Toaster} from '@gravity-ui/uikit';\nimport metrics 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 getParsedError,\n getRequestOutputFormat,\n parseErrorFromResponse,\n prepareRows,\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';\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();\nconst toaster = new Toaster();\n\nfunction loadDynamicTable(requestOutputFormat, setup, 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 setup,\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 dump_error_into_response: true,\n omit_inaccessible_columns: true,\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 ytApiV3Id.selectRows(YTApiId.dynTableSelectRowsPreload, {\n setup,\n parameters,\n cancellation: requests.saveCancelToken,\n }),\n )\n .then(({data}) => {\n const error = parseErrorFromResponse(data);\n\n if (error) {\n return Promise.reject(getParsedError(error));\n }\n\n const {columns, rows, yqlTypes} = prepareRows(data, moveBackward);\n\n return {\n rows,\n columns,\n yqlTypes,\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 setup,\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, setup, 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 dump_error_into_response: true,\n omit_inaccessible_columns: true,\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 setup,\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 setup = {\n transformResponse({parsedData, rawResponse}) {\n return {\n data: parsedData,\n headers: rawResponse?.headers,\n };\n },\n };\n const useZeroRangeForPreload = isStrict && type === LOAD_TYPE.PRELOAD;\n\n const loadPromise = isDynamic\n ? loadDynamicTable(requestOutputFormat, setup, state, type, useZeroRangeForPreload)\n : loadStaticTable(requestOutputFormat, setup, 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 metrics.countEvent({\n share_columns: {\n hash,\n },\n });\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 metrics.countEvent({\n navigation_dynamic_table_action: action,\n });\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';\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 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';\nimport {Progress} from '@gravity-ui/uikit';\n\nimport hammer from '../../../../../common/hammer';\n\nimport './UploadManager.scss';\nimport {updateView} from '../../../../../store/actions/navigation';\nimport FilePicker from '../../../../../components/FilePicker/FilePicker';\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';\n\nconst block = cn('upload-manager');\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & WithVisibleProps;\n\ninterface State {\n hasUpcomingFile: boolean;\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 yamr: {},\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' | 'yamr' | '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: 'yamr', text: 'yamr'},\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 hasUpcomingFile: false,\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 {hasUpcomingFile, file, error} = this.state;\n return (\n <React.Fragment>\n <div\n className={block('drag-area', {\n dropable: hasUpcomingFile,\n empty: !file,\n })}\n onDrop={this.onDrop}\n onDragEnter={this.onDragEnter}\n onDragLeave={this.onDragLeave}\n onDragOver={this.onDragOver}\n >\n {file ? (\n this.renderFileContent(file)\n ) : (\n <div>\n <div>Drag a file here</div>\n or\n <div>\n <FilePicker onChange={this.onFile}>Pick a file</FilePicker>\n </div>\n </div>\n )}\n </div>\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 const {total, loaded} = event;\n const totalStr = hammer.format['Bytes'](total);\n const loadedStr = hammer.format['Bytes'](loaded);\n return (\n progress.inProgress && (\n <div\n className={block('progress', {\n hidden: !progress.inProgress,\n })}\n >\n <div className={block('progress-wrapper')}>\n <Progress\n text={`${loadedStr} / ${totalStr}`}\n stack={[\n {\n value: (100 * loaded) / ((total ?? loaded) || 1),\n theme: 'info',\n },\n ]}\n />\n </div>\n </div>\n )\n );\n }\n\n cancelUpload = () => {\n this.cancelHelper.removeAllRequests();\n };\n\n inProgress() {\n const {progress} = this.state;\n return progress.inProgress;\n }\n\n onDragOver = (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.inProgress()) {\n return;\n }\n\n if (!this.state.hasUpcomingFile) {\n this.setState({hasUpcomingFile: true});\n }\n };\n\n onDrop = (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.inProgress()) {\n return;\n }\n\n const {files} = event.dataTransfer;\n if (!files) {\n return;\n }\n\n this.onFile(files);\n };\n\n onFile = (files: FileList | null) => {\n const {cluster} = this.props;\n const file = files && files[0];\n this.setState({file, hasUpcomingFile: false});\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 onDragEnter = () => {\n if (!this.inProgress()) {\n this.setState({hasUpcomingFile: true});\n }\n };\n\n onDragLeave = () => {\n if (!this.inProgress()) {\n this.setState({hasUpcomingFile: false});\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 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, useDispatch, useSelector} from 'react-redux';\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 'react-redux';\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, useSelector} from 'react-redux';\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 {Sticky, StickyContainer} from 'react-sticky';\nimport React, {Component} from 'react';\nimport {connect, useSelector} from 'react-redux';\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';\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 {HEADER_HEIGHT, 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 '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 '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 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 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 <Sticky topOffset={-HEADER_HEIGHT}>\n {({isSticky}) => (\n <div\n className={block('overview', {\n sticky: isSticky,\n })}\n >\n {hasActions && <TableActions block={block} />}\n </div>\n )}\n </Sticky>\n </StickyContainer>\n\n <ElementsTable {...this.tableSettings} items={replicas} />\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 'react-redux';\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, useSelector} from 'react-redux';\n\nimport {main} from '../../../../components/MetaTable/presets';\nimport MetaTable from '../../../../components/MetaTable/MetaTable';\n\nimport {getAttributesWithTypes, 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 = getAttributesWithTypes(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 'react-redux';\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, useSelector} from 'react-redux';\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 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\nimport DataTable from '@gravity-ui/react-data-table';\nimport {Loader} from '@gravity-ui/uikit';\nimport {getSettingTableDisplayRawStrings} from '../../../../../store/selectors/settings';\nimport {getSchemaByName} from '../../../../../store/selectors/navigation/tabs/schema';\nimport {showCellPreviewModal} from '../../../../../store/actions/navigation/modals/cell-preview';\nimport {prepareColumns} from '../../../../../utils/navigation/prepareColumns';\n\nimport './DataTableWrapper.scss';\n\nconst block = cn('data-table-wrapper');\n\nconst rowKey = (row, index) => index;\n\nDataTableWrapper.propTypes = {\n isFullScreen: PropTypes.bool.isRequired,\n loading: PropTypes.bool.isRequired,\n loaded: PropTypes.bool.isRequired,\n columns: PropTypes.array.isRequired,\n keyColumns: PropTypes.arrayOf(PropTypes.string),\n ysonSettings: PropTypes.object,\n yqlTypes: PropTypes.array,\n};\n\nexport default function DataTableWrapper(props) {\n const dispatch = useDispatch();\n const useRawStrings = useSelector(getSettingTableDisplayRawStrings);\n const schemaByName = useSelector(getSchemaByName);\n\n const {columns, keyColumns, ysonSettings, yqlTypes, loading, loaded, isFullScreen, ...rest} =\n props;\n\n const onShowPreview = React.useCallback(\n (columnName, rowIndex, tag) => {\n dispatch(showCellPreviewModal(columnName, rowIndex, tag));\n },\n [dispatch],\n );\n const dtColumns = prepareColumns({\n columns,\n keyColumns,\n yqlTypes,\n ysonSettings,\n useRawStrings,\n schemaByName,\n onShowPreview,\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","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\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 'react-redux';\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 Keys \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 'react-redux';\n\nimport Icon from '../../components/Icon/Icon';\nimport {YQLKitButton} from '../../containers/YQLKitButton/YQLKitButton';\nimport {QueryWidgetLazy} from '../../pages/query-tracker/QueryWidget/side-panel';\nimport {QueryEngine} from '../../pages/query-tracker/module/engines';\nimport {createQueryFromTablePath} from '../../pages/query-tracker/module/query/actions';\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 + '_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 >\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 (type === 'table') {\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 {Toaster} from '@gravity-ui/uikit';\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';\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 const toaster = new Toaster();\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 const toaster = new Toaster();\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","// @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';\nimport {Toaster} from '@gravity-ui/uikit';\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 DeleteObjectAction,\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 {AppThunkDispatch} from '../../../../store/thunkDispatch';\n\nconst toaster = new 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: AppThunkDispatch<DeleteObjectAction>, 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: AppThunkDispatch<DeleteObjectAction>, 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 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 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 {Toaster} from '@gravity-ui/uikit';\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';\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 ...(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 const toast = new Toaster();\n toast.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 'react-redux';\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 {Toaster} from '@gravity-ui/uikit';\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';\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 const toaster = new Toaster();\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 'react-redux';\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 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 {Toaster} from '@gravity-ui/uikit';\nimport {getCluster} from '../../../../store/selectors/global';\nimport Link from '../../../../components/Link/Link';\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 const toast = new Toaster();\n toast.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 'react-redux';\n\nimport metrics 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} 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: object;\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) {\n dispatch(openEditingPopup(objectPath, objectPath, OPEN_MOVE_OBJECT_POPUP));\n evt.stopPropagation();\n },\n onCopy(evt: React.MouseEvent) {\n dispatch(openEditingPopup(objectPath, objectPath, OPEN_COPY_OBJECT_POPUP));\n evt.stopPropagation();\n },\n onShowAttributes(evt: React.MouseEvent) {\n metrics.countEvent({\n 'navigation_map-node_attributes': 'clicked',\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) {\n metrics.countEvent({\n 'navigation_map-node_edit_attributes': 'clicked',\n });\n dispatch(showNavigationAttributesEditor([item.path]));\n evt.stopPropagation();\n },\n onRestoreClick(evt: React.MouseEvent) {\n dispatch(restoreObject(objectPath, restorePath, handleUpdateView));\n evt.stopPropagation();\n },\n\n onDeleteClick(evt: React.MouseEvent) {\n metrics.countEvent({'navigation_map-node_delete': 'clicked'});\n dispatch(openDeleteModal(item));\n evt.stopPropagation();\n },\n onCopyPathClick(evt: React.MouseEvent) {\n metrics.countEvent({\n 'navigation_map-node_copy-path': 'clicked',\n });\n evt.stopPropagation();\n },\n onSort(e: React.MouseEvent) {\n dispatch(showTableSortModal([item.path]));\n e.stopPropagation();\n },\n onErase(evt: React.MouseEvent) {\n dispatch(showTableEraseModal(item.path));\n evt.stopPropagation();\n },\n onMerge(evt: React.MouseEvent) {\n dispatch(showTableMergeModal([item.path]));\n evt.stopPropagation();\n },\n onMount(evt: React.MouseEvent) {\n dispatch(showDynTablesStateModalByPaths([item.path], 'mount'));\n evt.stopPropagation();\n },\n onUnmount(evt: React.MouseEvent) {\n dispatch(showDynTablesStateModalByPaths([item.path], 'unmount'));\n evt.stopPropagation();\n },\n onFreeze(evt: React.MouseEvent) {\n dispatch(showDynTablesStateModalByPaths([item.path], 'freeze'));\n evt.stopPropagation();\n },\n onUnfreeze(evt: React.MouseEvent) {\n dispatch(showDynTablesStateModalByPaths([item.path], 'unfreeze'));\n evt.stopPropagation();\n },\n onLink(evt: React.MouseEvent) {\n dispatch(showLinkToModal({target: item.path}));\n evt.stopPropagation();\n },\n onTransfer(evt: React.MouseEvent) {\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 icon: <Icon awesome=\"file-export\" face=\"solid\" />,\n action: onMove,\n },\n {\n text: 'Copy',\n icon: <Icon awesome=\"copy\" face=\"solid\" />,\n action: onCopy,\n },\n {\n text: 'Link',\n icon: <Icon awesome=\"link\" face=\"solid\" />,\n action: onLink,\n },\n {\n text: 'Delete',\n icon: <Icon awesome=\"trash-alt\" />,\n action: onDeleteClick,\n },\n ];\n\n const firstGroup: Array<{\n text: string;\n icon?: React.ReactNode;\n action: (evt: any) => void;\n }> = [\n {\n text: 'Attributes',\n icon: <Icon awesome=\"at\" />,\n action: onShowAttributes,\n },\n {\n text: 'Edit',\n icon: <Icon awesome=\"pencil-alt\" />,\n action: onEditAttributes,\n },\n ];\n\n if (hasRestoreButton) {\n firstGroup.unshift({\n text: 'Restore',\n icon: <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 icon: <Icon awesome={'link'} />,\n action: onMount,\n },\n ]\n : []),\n ...(unmount\n ? [\n {\n text: 'Unmount',\n icon: <Icon awesome={'unlink'} />,\n action: onUnmount,\n },\n ]\n : []),\n ...(freeze\n ? [\n {\n text: 'Freeze',\n icon: <Icon awesome={'snowflake'} />,\n action: onFreeze,\n },\n ]\n : []),\n ...(unfreeze\n ? [\n {\n text: 'Unfreeze',\n icon: <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 icon: <Icon awesome={'sort'} />,\n action: onSort,\n },\n ...(!isDynamic\n ? [\n {\n text: 'Erase',\n icon: <Icon awesome={'eraser'} />,\n action: onErase,\n },\n ]\n : []),\n {\n text: 'Merge',\n icon: <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 icon: <Icon awesome={'clone'} />,\n action: onTransfer,\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 switcher={\n <Button\n size={dropDownBtnSize}\n className={dropDownBtnClassName}\n view={dropDownBtnTheme}\n >\n <Icon awesome=\"ellipsis-h\" />\n </Button>\n }\n items={menuItems}\n />\n </React.Fragment>\n );\n}\n\nexport default React.memo(PathActions);\n","import React from 'react';\nimport {useSelector} from 'react-redux';\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 'react-redux';\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 {Sticky} from 'react-sticky';\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 {HEADER_HEIGHT} from '../../../../../constants/index';\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 isSplit: PropTypes.bool.isRequired,\n};\n\nfunction TableOverview(props) {\n const {isFullScreen, isSplit, allowPagination} = props;\n\n // TODO: add sticky for the Overview in the split mode https://github.com/captivationsoftware/react-sticky/issues/282\n return (\n <ErrorBoundary>\n <Sticky topOffset={isFullScreen ? HEADER_HEIGHT : -HEADER_HEIGHT}>\n {({isSticky}) => (\n <div\n className={block({\n sticky: isSticky && !isSplit,\n fullscreen: isFullScreen,\n split: isSplit,\n })}\n >\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 )}\n </Sticky>\n </ErrorBoundary>\n );\n}\n\nconst mapStateToProps = (state) => {\n const {isFullScreen} = state.navigation.content.table;\n const {isSplit} = state.global.splitScreen;\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 isSplit,\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 'react-redux';\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","/* eslint-disable react/prop-types */\nimport {StickyContainer} from 'react-sticky';\nimport React, {useEffect} from 'react';\nimport {connect, useSelector} from 'react-redux';\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';\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} = 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 return (\n <div className={block()}>\n <TableMeta />\n <TableColumnsPresetNotice />\n <FullScreen\n className={block('fullscreen')}\n enabled={isFullScreen}\n onChange={handleScreenChanged}\n >\n <StickyContainer>\n <TableOverview />\n {renderTable(props)}\n </StickyContainer>\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, TooltipProps} from '../../components/Tooltip/Tooltip';\n\nexport default function TTLInfo({\n attributes,\n onClick,\n size,\n className,\n}: {\n attributes: unknown;\n onClick: TooltipProps['onClick'];\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\n className={className}\n content={<MetaTable items={ttlItems} />}\n forceLinksAppearance={false}\n onClick={onClick}\n >\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 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 virtualized\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',\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 },\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 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 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 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, Progress} 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 FilePicker from '../../../../../components/FilePicker/FilePicker';\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';\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 hasUpcomingFile: boolean;\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 hasUpcomingFile: false,\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 {hasUpcomingFile, file, error, nameAlreadyUsed} = this.state;\n return (\n <React.Fragment>\n <div\n className={block('drag-area', {\n dropable: hasUpcomingFile,\n empty: !file,\n })}\n onDrop={this.onDrop}\n onDragEnter={this.onDragEnter}\n onDragLeave={this.onDragLeave}\n onDragOver={this.onDragOver}\n >\n {file ? (\n this.renderFileContent(file)\n ) : (\n <div>\n <div>Drag a file here</div>\n or\n <div>\n <FilePicker onChange={this.onFile}>Pick a file</FilePicker>\n </div>\n </div>\n )}\n </div>\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 const {total, loaded} = event;\n const totalStr = hammer.format['Bytes'](total);\n const loadedStr = hammer.format['Bytes'](loaded);\n return (\n progress.inProgress && (\n <div\n className={block('progress', {\n hidden: !progress.inProgress,\n })}\n >\n <div className={block('progress-wrapper')}>\n <Progress\n text={`${loadedStr} / ${totalStr}`}\n stack={[\n {\n value: (100 * loaded) / ((total ?? loaded) || 1),\n theme: 'info',\n },\n ]}\n />\n </div>\n </div>\n )\n );\n }\n\n cancelUpload = () => {\n this.cancelHelper.removeAllRequests();\n };\n\n inProgress() {\n const {progress} = this.state;\n return progress.inProgress;\n }\n\n onDragOver = (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.inProgress()) {\n return;\n }\n\n if (!this.state.hasUpcomingFile) {\n this.setState({hasUpcomingFile: true});\n }\n };\n\n onDrop = (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n\n if (this.inProgress()) {\n return;\n }\n\n const {files} = event.dataTransfer;\n if (!files) {\n return;\n }\n\n this.onFile(files);\n };\n\n onFile = (files: FileList | null) => {\n const file = files && files[0];\n this.setState({\n file,\n hasUpcomingFile: false,\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 onDragEnter = () => {\n if (!this.inProgress()) {\n this.setState({hasUpcomingFile: true});\n }\n };\n\n onDragLeave = () => {\n if (!this.inProgress()) {\n this.setState({hasUpcomingFile: false});\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, {Component} from 'react';\nimport {useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\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 './NodesTypes.scss';\nimport {\n getNodesInfo,\n getSelectedNodes,\n} from '../../../../../store/selectors/navigation/content/map-node';\nimport MultipleActions from '../MultipleActions';\n\nconst b = block('nodes-types');\nconst DISPLAYED_NODES = 3;\n\nclass NodesTypes extends Component {\n static propTypes = {\n nodes: PropTypes.arrayOf(\n PropTypes.shape({\n type: PropTypes.string.isRequired,\n count: PropTypes.number.isRequired,\n }),\n ).isRequired,\n selectedNodes: PropTypes.array.isRequired,\n };\n\n _prepareNodes(nodes) {\n const sortedNodes = orderBy_(nodes, (node) => node.count, 'desc');\n\n return slice_(sortedNodes, 0, DISPLAYED_NODES);\n }\n\n _getSumCount(nodes) {\n return reduce_(nodes, (sum, node) => sum + node.count, 0);\n }\n\n renderItem(node) {\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\n renderItems(nodes) {\n return map_(nodes, (node) => this.renderItem(node));\n }\n\n renderSelected() {\n const {selectedNodes} = this.props;\n if (!selectedNodes.length) {\n return null;\n }\n return (\n <li className={b('item')}>\n <span className={b('type')}>Selected</span>\n <span className={b('count')}>{selectedNodes.length}</span>\n <MultipleActions className={b('actions')} />\n </li>\n );\n }\n\n render() {\n const {nodes} = this.props;\n\n const displayedNodes = this._prepareNodes(nodes);\n const allNodesCount = this._getSumCount(nodes);\n const displayedNodesCount = this._getSumCount(displayedNodes);\n const otherNodesCount = allNodesCount - displayedNodesCount;\n\n return (\n <ul className={b('list')}>\n {this.renderItem({type: 'All', count: allNodesCount})}\n {this.renderItems(displayedNodes)}\n {otherNodesCount > 0 && this.renderItem({type: 'Other', count: otherNodesCount})}\n {this.renderSelected()}\n </ul>\n );\n }\n}\n\nfunction NodesInfo() {\n const nodesInfo = useSelector(getNodesInfo);\n const selectedNodes = useSelector(getSelectedNodes);\n\n return <NodesTypes nodes={nodesInfo} selectedNodes={selectedNodes} />;\n}\n\nexport default React.memo(NodesInfo);\n","import {ThunkAction} from 'redux-thunk';\nimport {Toaster} from '@gravity-ui/uikit';\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';\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 const toast = new Toaster();\n\n toast.add({\n name: 'create-aco',\n theme: 'success',\n title: 'ACO created',\n content: '',\n });\n });\n };\n}\n","import {DropdownMenu} from '@gravity-ui/uikit';\nimport React, {Component} from 'react';\nimport {connect, useDispatch, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\nimport {Sticky, StickyContainer} from 'react-sticky';\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 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 {HEADER_HEIGHT, 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';\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 renderToolbar() {\n return (\n <Sticky topOffset={-HEADER_HEIGHT}>\n {({isSticky}) => (\n <div className={tbBlock({sticky: isSticky})}>\n <MapNodeToolbarConnected />\n </div>\n )}\n </Sticky>\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 {this.renderToolbar()}\n\n <div className={block('content')}>\n <MapNodesTable />\n </div>\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\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 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 icon: <Icon awesome={'table'} face={'solid'} />,\n },\n {\n action: this.createDirectoryButtonClick,\n text: <NoWrap>Directory</NoWrap>,\n icon: <Icon awesome={'folder'} face={'solid'} />,\n },\n ...(!uploadTableExcelBaseUrl\n ? []\n : [\n {\n action: this.uploadTableButtonClick,\n text: <NoWrap>Upload xlsx</NoWrap>,\n icon: <Icon awesome={'upload'} />,\n },\n ]),\n {\n action: this.createLinkButtonClick,\n text: <NoWrap>Link</NoWrap>,\n icon: <Icon awesome={'link'} />,\n },\n showACOCreateButton && {\n action: this.createACOButtonClick,\n text: <NoWrap>ACO</NoWrap>,\n icon: <Icon awesome={'acl-object'} />,\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 switcher={\n <Button 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 {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 'react-redux';\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 'react-redux';\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 'react-redux';\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 {Sticky, StickyContainer} from 'react-sticky';\nimport {connect, useSelector} from 'react-redux';\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';\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';\nimport {HEADER_HEIGHT} from '../../../../constants/index';\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 <Sticky topOffset={-HEADER_HEIGHT}>\n {({isSticky}) => (\n <div\n className={block('overview', {\n sticky: isSticky,\n })}\n >\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 </div>\n )}\n </Sticky>\n\n <LoadDataHandler {...this.props}>\n <ElementsTable\n {...this.tableSettings}\n items={transactions}\n isLoading={loading}\n />\n </LoadDataHandler>\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};\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\nconst metaMock = {cell_id: '890', host: 'lbk-vla-249.search.yandex.net'};\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 ?? metaMock,\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 cn from 'bem-cn-lite';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\nimport {useDispatch, useSelector} from 'react-redux';\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 'react-redux';\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 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 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 return (\n <div className={block()}>\n <RadioButton value={consumerMode} onChange={changeConsumerMode} items={tabItems} />\n <Extras />\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 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, useSelector} 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 {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 {YTErrorBlock} from '../../../../components/Block/Block';\nimport ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\nimport WithStickyToolbar from '../../../../components/WithStickyToolbar/WithStickyToolbar';\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 TargetQueue from './TargetQueue/TargetQueue';\nimport Meta from './Meta/Meta';\nimport Toolbar from './Toolbar/Toolbar';\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 <YTErrorBlock 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 toolbar={<Toolbar extras={ExtraControls} />} content={<View />} />\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 'react-redux';\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 'react-redux';\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 React from 'react';\nimport {useSelector} 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 {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 {\n SelectedConsumer,\n getConsumers,\n getQueueRateMode,\n getQueueTimeWindow,\n getStatusLoaded,\n getStatusLoading,\n} from '../../../../../../store/selectors/navigation/tabs/queue';\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);\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 <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 );\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 RadioButton from '../../../../../../components/RadioButton/RadioButton';\nimport {QUEUE_RATE_MODE} from '../../../../../../constants/navigation/tabs/queue';\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 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 </>\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,\n block('hover-action'),\n );\n } else if (name === 'cell_id') {\n return string<SelectedPartition>(caption, (x) => x.meta?.cell_id);\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 {ApiMethodParams, BatchParameters, YTApiId, ytApiV3Id} from '../../../../rum/rum-wrap-api';\nimport {BatchResultsItem} from '../../../../../shared/yt-types';\nimport {WrapApiOptions, getBatchError, wrapApiPromiseByToaster} from '../../../../utils/utils';\nimport {YTError} from '../../../../types';\n\nexport type BatchApiArgs = {\n id: YTApiId;\n toaster?: WrapApiOptions<unknown, 'v3'>;\n cluster?: string;\n} & ApiMethodParams<BatchParameters>;\n\nexport type BatchApiResults<T = unknown> = Array<BatchResultsItem<T>>;\n\nexport const executeBatchV3 = async (args: BatchApiArgs) => {\n const {id, setup, parameters, data, cancellation, toaster} = args;\n try {\n const request = async () => {\n const results = await ytApiV3Id.executeBatch(id, {\n parameters,\n data,\n setup,\n cancellation,\n });\n\n const error = getBatchError(results, results[0].error?.message || 'Failed to batch');\n if (error) throw error;\n\n return results;\n };\n\n let results;\n\n if (toaster) {\n results = await wrapApiPromiseByToaster(request(), toaster);\n } else {\n results = await request();\n }\n\n const error = getBatchError(results, results[0].error?.message || 'Failed to batch');\n if (error) throw error;\n\n return {data: results};\n } catch (error: unknown) {\n return {error} as {error: YTError};\n }\n};\n","import {useSelector} from 'react-redux';\nimport {BaseQueryFn, TypedUseMutationResult} from '@reduxjs/toolkit/dist/query/react';\n\nimport {rootApi} from '..';\nimport {BatchApiArgs, BatchApiResults, executeBatchV3} from './endpoints/executeBatch';\nimport {getUseAutoRefresh} from '../../../store/selectors/settings/settings-ts';\nimport {getCluster} from '../../../store/selectors/global';\nimport {DEFAULT_UPDATER_TIMEOUT} from '../../../hooks/use-updater';\nimport {MutationOptions, UseQueryOptions} from './types';\n\nexport const ytApi = rootApi.injectEndpoints({\n endpoints: (build) => ({\n fetchBatch: build.query<BatchApiResults, BatchApiArgs>({\n queryFn: executeBatchV3,\n providesTags: (_result, _error, arg) => [String(arg.id)],\n }),\n updateBatch: build.mutation<BatchApiResults, BatchApiArgs>({\n queryFn: executeBatchV3,\n invalidatesTags: (_result, _error, arg) => [String(arg.id)],\n }),\n }),\n});\n\nconst {\n useFetchBatchQuery: useFetchBatchQueryRaw,\n useUpdateBatchMutation: useUpdateBatchMutationRaw,\n} = ytApi;\n\ntype BatchQueryResult = typeof ytApi.endpoints.fetchBatch.Types.ResultType;\ntype BatchQueryArgs = typeof ytApi.endpoints.fetchBatch.Types.QueryArg;\n\n/**\n * Custom hook for fetching batch query data with automatic type conversion.\n * This hook extends the base RTK Query functionality with automatic refresh support\n *\n * @template T The expected type of the batch results data\n * @param args The batch API arguments including YTApiId, cluster dependency and parameters for the batch operation\n * @param options Optional query configuration options (polling, caching, etc.)\n * @returns A query result object with properly typed data and status information\n *\n * @example\n * const { data, isLoading } = useFetchBatchQuery<MyDataType>({\n * id: YTApiId.getMyAttribute,\n * parameters: {\n * requests: [\n * {\n * command: 'get' as const,\n * parameters: prepareRequest('/@my_attribute', {\n * path,\n * }),\n * },\n * ],\n * },\n * });\n */\nexport function useFetchBatchQuery<T>(\n args: BatchApiArgs,\n options?: UseQueryOptions<BatchQueryResult, BatchQueryArgs>,\n) {\n const useAutoRefresh = useSelector(getUseAutoRefresh);\n const cluster = useSelector(getCluster);\n\n const defaultOptions = {\n pollingInterval: useAutoRefresh ? DEFAULT_UPDATER_TIMEOUT : undefined,\n skipPollingIfUnfocused: true,\n };\n\n const customOptions = {\n ...defaultOptions,\n ...options,\n };\n\n const customArgs: BatchApiArgs = {\n ...args,\n };\n\n if (!args.setup) {\n customArgs.cluster = cluster;\n }\n\n const {data, ...restResult} = useFetchBatchQueryRaw(customArgs, customOptions);\n\n const typedData = data as BatchApiResults<T> | undefined;\n\n return {\n ...restResult,\n data: typedData,\n };\n}\n\ntype BatchMutationDefinition = typeof ytApi.endpoints.updateBatch.Types.MutationDefinition;\ntype BatchMutationResultType = typeof ytApi.endpoints.updateBatch.Types.ResultType;\n\ntype BatchMutationReturnType = TypedUseMutationResult<\n BatchMutationResultType,\n BatchApiArgs,\n BaseQueryFn\n>;\n\n/**\n * Custom hook for executing batch mutation operations.\n *\n * @template T The expected type of the batch results data\n * @param options Optional mutation configuration options\n * @returns A tuple containing:\n * - A typed mutation function that accepts BatchApiArgs\n * - The mutation result object with status and data\n *\n * @example\n * const [updateBatch, { isLoading }] = useUpdateBatchMutation<MyDataType>();\n *\n * // Later in code:\n * const result = await updateBatch({\n * id: YTApiId.navigationGetAnnotation,\n * parameters: {\n * requests: [\n * {\n * command: 'set' as const,\n * parameters: prepareRequest('/@annotation', {\n * path,\n * }),\n * input: annotation,\n * },\n * ],\n * },\n * toaster: {\n * toasterName: 'update_annotation',\n * successTitle: 'Annotation saved',\n * errorTitle: 'Failed to save annotation',\n * },\n * });\n */\nexport function useUpdateBatchMutation<T>(\n options?: MutationOptions<BatchMutationReturnType, BatchMutationDefinition>,\n) {\n const [updateFn, result] = useUpdateBatchMutationRaw(options);\n const typedUpdateFn = async (args: BatchApiArgs) => {\n const response = await updateFn(args);\n if (response.data) {\n return {\n data: response.data as BatchApiResults<T> | undefined,\n };\n }\n\n return response;\n };\n\n return [typedUpdateFn, result] as const;\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 {rootApi} from '../../../../../store/api';\nimport {ytApi} from '../../../../../store/api/yt';\nimport {getAttributes, getPath} from '../../../../../store/selectors/navigation';\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 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\nasync function exportsMutation(args: ExportsMutationArgs, api: BaseQueryApi) {\n const state = api.getState() as RootState;\n const path = getPath(state);\n const attributes = getAttributes(state);\n\n const {prevConfig, type, newConfig} = args;\n\n const configs: QueueExport<number> = ytApi.endpoints.fetchBatch.select(\n makeGetExportsParams(path),\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 try {\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\nexport const queueApi = rootApi.injectEndpoints({\n endpoints: (build) => ({\n export: build.mutation({\n queryFn: exportsMutation,\n invalidatesTags: [String(YTApiId.queueExportConfig)],\n }),\n }),\n});\n\nexport const {useExportMutation} = queueApi;\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/endpoints/executeBatch';\n\nimport {QueueExport} from '../../../../../../../../types/navigation/queue/queue';\n\nimport {ExportsFormValues} from '../ExportsEditDialog';\n\nexport function validateExportPeriod(value?: number) {\n return !value || value % 1000 ? 'Export period should be a multiple of 1000' : 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 'react-redux';\nimport {Text} from '@gravity-ui/uikit';\n\nimport {useFetchBatchQuery} from '../../../../../../../store/api/yt';\nimport {\n makeGetExportsParams,\n useExportMutation,\n} from '../../../../../../../store/api/navigation/tabs/queue/queue';\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 validate: 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 });\n\n return error ? Promise.reject(error) : Promise.resolve();\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} from '../../../../../../../components/Dialog';\nimport {QueueExportConfig} from '../../../../../../../types/navigation/queue/queue';\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] = 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 ]}\n onAdd={async () => {\n update({prevConfig, type: 'delete'});\n }}\n headerProps={{\n title: 'Delete export',\n }}\n onClose={toggleDeleteDialogVisibility}\n />\n <ExportsEditDialog\n type={'edit'}\n prevConfig={prevConfig}\n visible={editDialogVisible}\n onClose={toggleEditDialogVisibility}\n />\n </>\n );\n}\n","import React from 'react';\n\nimport Link from '../../../../../../components/Link/Link';\nimport DataTableYT, {Column} from '../../../../../../components/DataTableYT/DataTableYT';\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: Value,\n header: 'Export period, ms',\n },\n {\n name: 'export_ttl',\n render: Value,\n header: 'Export TTL, ms',\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 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, useSelector} from 'react-redux';\n\nimport {Alerts} from '../../../../components/Alerts/Alerts';\nimport {YTErrorBlock} from '../../../../components/Block/Block';\nimport ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\nimport WithStickyToolbar from '../../../../components/WithStickyToolbar/WithStickyToolbar';\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 Toolbar 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';\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 <YTErrorBlock 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 toolbar={<Toolbar extras={ExtraControls} />} content={<View />} />\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 'react-redux';\n\nimport {useFetchBatchQuery} from '../../../../../../store/api/yt';\nimport {makeGetExportsParams} from '../../../../../../store/api/navigation/tabs/queue/queue';\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, useSelector} from 'react-redux';\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, {TemplateTime} from '../../../../components/MetaTable/MetaTable';\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 {Popover, Text} from '@gravity-ui/uikit';\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 return (\n <div className={block()}>\n {hasWarning ? (\n <Popover\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 </Popover>\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, useSelector} from 'react-redux';\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<TabletInfo, TabletInfo>>,\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 {Sticky, StickyContainer} from 'react-sticky';\nimport React, {Component, Fragment} from 'react';\nimport {connect, useSelector} from 'react-redux';\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';\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 {HEADER_HEIGHT, 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 view={'flat-secondary'}>\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,\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 <Sticky topOffset={-HEADER_HEIGHT}>\n {({isSticky}) => (\n <div className={block('overview', {sticky: isSticky})}>\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 </Sticky>\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 <StickyContainer>\n {this.renderOverview()}\n\n <ElementsTable\n {...this.tableSettings}\n items={tablets}\n rowClassName={Tablets.rowClassName}\n onItemClick={this.onRowClick}\n />\n </StickyContainer>\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 'react-redux';\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","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 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 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 'react-redux';\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 'react-redux';\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","const SvgAbbrSql = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><g clipPath=\"url(#abbr-sql_svg__a)\"><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M13.5 4.75a.75.75 0 0 0-1.5 0v6.5c0 .414.336.75.75.75h2.5a.75.75 0 0 0 0-1.5H13.5zM11 8c0 1.32-.257 2.314-.709 2.98l.99.99a.75.75 0 1 1-1.061 1.06l-1.132-1.132a2.4 2.4 0 0 1-.713.102C6.8 12 5.75 10.667 5.75 8S6.8 4 8.375 4 11 5.333 11 8m-1.957 2.15c.222-.322.457-.98.457-2.149 0-1.168-.235-1.826-.457-2.149-.175-.254-.366-.35-.668-.35s-.493.096-.668.35c-.222.323-.457.981-.457 2.15 0 1.167.235 1.826.457 2.148.175.254.366.351.668.351s.493-.097.668-.351M2.562 4.002c-.689 0-1.285.249-1.702.713C.453 5.17.277 5.76.277 6.352c0 .732.326 1.28.759 1.658.41.358.908.561 1.305.684.398.122.684.217.89.372.147.113.27.266.27.625 0 .29-.109.469-.253.589a1.08 1.08 0 0 1-.686.222c-.202 0-.438-.093-.658-.293a1.4 1.4 0 0 1-.423-.684.75.75 0 1 0-1.462.333c.127.557.453 1.079.878 1.463.426.386 1.006.681 1.665.681.578 0 1.177-.18 1.647-.57.485-.405.791-1.006.791-1.74 0-.843-.352-1.433-.864-1.82-.434-.33-.962-.492-1.306-.597l-.047-.015c-.31-.095-.579-.221-.76-.38a.65.65 0 0 1-.246-.528c0-.304.09-.512.2-.635.099-.11.27-.215.585-.215.322 0 .498.099.612.206.13.123.233.313.3.56a.75.75 0 1 0 1.449-.386c-.113-.42-.325-.892-.719-1.263-.409-.387-.961-.617-1.642-.617\" clipRule=\"evenodd\" /></g><defs><clipPath id=\"abbr-sql_svg__a\"><path fill=\"currentColor\" d=\"M0 0h16v16H0z\" /></clipPath></defs></svg>;\nexport default SvgAbbrSql;","import React, {FC, useState} from 'react';\nimport {useDispatch} from 'react-redux';\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 'react-redux';\n\nimport cn from 'bem-cn-lite';\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 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 {node: <AccessLogApplyFilters />},\n ]}\n />\n </React.Fragment>\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 'react-redux';\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 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, useSelector} from 'react-redux';\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\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 ? {data, dataParams: params, total_row_count: data.total_row_count}\n : {data, dataParams: params};\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 'react-redux';\nimport moment from 'moment';\nimport cn from 'bem-cn-lite';\n\nimport {Flex, Link, Text} from '@gravity-ui/uikit';\n\nimport {\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 ClickableAttributesButton from '../../../../../components/AttributesButton/ClickableAttributesButton';\nimport ClipboardButton from '../../../../../components/ClipboardButton/ClipboardButton';\n\nconst block = cn('yt-tablet-errors-by-path-table');\n\nexport function TabletErrorsByPathTable({className}: {className?: string}) {\n const {columns, data, loading, loaded} = useTableColumnsAndData();\n const error = useSelector(getTabletErrorsByPathError);\n return (\n <div className={className}>\n {Boolean(error) && <YTErrorBlock error={error} />}\n <DataTableYT\n loading={loading}\n loaded={loaded}\n columns={columns}\n data={data}\n settings={DATA_TABLE_YT_SETTINGS_UNDER_TOOLBAR_DOUBLE_HEIGHT}\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\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 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 error.message;\n },\n },\n {\n name: 'actions',\n header: null,\n render({row: {error}}) {\n return (\n <ClickableAttributesButton\n title=\"Details\"\n attributes={error}\n inlineMargins\n />\n );\n },\n },\n ];\n return res;\n }, [cluster, page, pageCount, loading]);\n return {data: errors, columns, loading, loaded};\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\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/common/YTTimeline';\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 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 from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {RadioButton} from '@gravity-ui/uikit';\n\nimport {getConfigData} from '../../../../config/ui-settings';\nimport {updateTabletErrorsViewMode} from '../../../../store/actions/navigation/tabs/tablet-errors/tablet-errors-background';\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 return (\n <div>\n {allowTabletErrorsAPI && (\n <RadioButton<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 'react-redux';\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 'react-redux';\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, {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, {Component} from 'react';\nimport {batch, connect, useSelector} from 'react-redux';\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 {getIconNameForType} from '../../../../utils/navigation/path-editor';\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 ypath from '../../../../common/thor/ypath';\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 UIFactory from '../../../../UIFactory';\n\nimport './MapNodesTable.scss';\n\nconst block = cn('map-nodes-table');\nconst ElementsTable = withKeyboardNavigation(ElementsTableBase);\n\nexport function renderMapNodesTableIcon(item) {\n let icon = UIFactory.getNavigationMapNodeSettings()?.renderNodeIcon(item);\n if (icon) {\n // do nothing\n } else if (MapNodesTable.isTrashNode(item) || MapNodesTable.isLinkToTrashNode(item)) {\n icon = <Icon awesome=\"trash-alt\" />;\n } else {\n icon = <Icon awesome={getIconNameForType(item.iconType, item.targetPathBroken)} />;\n }\n\n let title = hammer.format['ReadableField'](item.type);\n if (item.iconType === 'table') {\n title = 'Static table';\n }\n if (item.iconType === 'table_dynamic') {\n const {sorted} = ypath.getAttributes(item);\n if (sorted) {\n title = 'Dynamic table';\n } else {\n title = 'Ordered table';\n icon = <Icon awesome=\"ordered-table\" />;\n }\n }\n\n return (\n <span className={'icon-wrapper'} title={title}>\n {icon}\n </span>\n );\n}\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 TRASH_PATH = '//tmp/trash';\n\n static isTrashNode(item) {\n return item.path === MapNodesTable.TRASH_PATH;\n }\n\n static isLinkToTrashNode(item) {\n return item.targetPath === MapNodesTable.TRASH_PATH;\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 (MapNodesTable.isTrashNode(item)) {\n return MapNodesTable.renderTrash(item.pathState);\n } else if (MapNodesTable.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>➞</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} {arrow} {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>➞</span>;\n\n return (\n <span>\n {name} {viewLink} {arrow} {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: renderMapNodesTableIcon,\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} 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 {renderMapNodesTableIcon} from '../../../../../pages/navigation/content/MapNode/MapNodesTable';\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 {renderMapNodesTableIcon((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 {renderMapNodesTableIcon(item)}\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 {ValueOf} from '../../@types/types';\n\nexport type AnnotationVisibilityType = ValueOf<typeof AnnotationVisibility>;\n\nexport const AnnotationVisibility = {\n HIDDEN: 'hidden',\n VISIBLE: 'visible',\n PARTIAL: 'partial',\n} as const;\n\nexport function normalizeAnnotationVisibility(\n value?: AnnotationVisibilityType,\n): AnnotationVisibilityType {\n return value || AnnotationVisibility.PARTIAL;\n}\n","import React, {FC} from 'react';\nimport {Markdown} from '../../../components/Markdown/Markdown';\nimport {ClickableText} from '../../../components/ClickableText/ClickableText';\n\ntype Props = {\n annotation?: string;\n expanded: boolean;\n onToggle: () => void;\n};\n\nexport const AnnotationWithPartial: FC<Props> = ({annotation, expanded, onToggle}) => {\n const value = annotation || '';\n\n const {isFullText, text} = React.useMemo(() => {\n const rows = value.split(/\\n+/);\n return {\n text: rows.slice(0, 3).join('\\n\\n'),\n isFullText: rows.length <= 3,\n };\n }, [value]);\n\n return (\n <>\n <Markdown text={expanded ? value : text} />\n {isFullText ? null : (\n <ClickableText color={'secondary'} onClick={onToggle}>\n {expanded ? 'Hide more' : 'Show more'}\n </ClickableText>\n )}\n </>\n );\n};\n","import React, {FC} from 'react';\nimport {Button, Flex} from '@gravity-ui/uikit';\nimport Icon from '../../../components/Icon/Icon';\n\ntype Props = {\n isSaving: boolean;\n editMode: boolean;\n onEditClick: () => void;\n onCancelClick: () => void;\n onSaveClick: () => void;\n};\n\nexport const ActionButtons: FC<Props> = ({\n isSaving,\n editMode,\n onEditClick,\n onSaveClick,\n onCancelClick,\n}) => {\n if (editMode)\n return (\n <Flex gap={1}>\n <Button view=\"action\" onClick={onSaveClick} loading={isSaving}>\n Save\n </Button>\n <Button view=\"flat\" onClick={onCancelClick}>\n Cancel\n </Button>\n </Flex>\n );\n\n return (\n <Button view=\"outlined\" onClick={onEditClick}>\n <Icon awesome={'pencil'} />\n </Button>\n );\n};\n","import React, {FC, useCallback, useRef} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\nimport {YTErrorBlock} from '../../../components/Error/Error';\nimport CollapsibleSection from '../../../components/CollapsibleSection/CollapsibleSection';\nimport {\n getNavigationAnnotation,\n getNavigationAnnotationEditing,\n getNavigationAnnotationError,\n getNavigationAnnotationPath,\n getNavigationAnnotationSaving,\n} from '../../../store/selectors/navigation/tabs/annotation';\nimport {getPath} from '../../../store/selectors/navigation';\nimport {getSettingAnnotationVisibility} from '../../../store/selectors/settings';\nimport {setSettingAnnotationVisibility} from '../../../store/actions/settings/settings';\nimport {AnnotationVisibility} from '../../../../shared/constants/settings-ts';\nimport './NavigationDescription.scss';\nimport {AnnotationWithPartial} from './AnnotationWithPartial';\nimport {ActionButtons} from './ActionButtons';\nimport {EditAnnotationWithPreview} from '../../../components/EditAnnotationWithPreview/EditAnnotationWithPreview';\nimport {saveAnnotation} from '../../../store/actions/navigation/tabs/annotation';\nimport {\n SET_ANNOTATION,\n SET_ANNOTATION_EDITING,\n} from '../../../constants/navigation/tabs/annotation';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../constants/global';\n\nconst block = cn('navigation-description');\n\ntype Props = {\n className: string;\n};\n\nconst NavigationDescription: FC<Props> = ({className}) => {\n const dispatch = useDispatch();\n const annotation = useSelector(getNavigationAnnotation) || '';\n const visibility = useSelector(getSettingAnnotationVisibility);\n const path = useSelector(getPath);\n const isSaving = useSelector(getNavigationAnnotationSaving);\n const isEditing = useSelector(getNavigationAnnotationEditing);\n const annotationPath = useSelector(getNavigationAnnotationPath);\n const error = useSelector(getNavigationAnnotationError);\n const oldValue = useRef<string>(annotation);\n\n const expanded = visibility === AnnotationVisibility.VISIBLE;\n const handleToggleAnnotationCollapse = useCallback(() => {\n dispatch(\n setSettingAnnotationVisibility(\n expanded ? AnnotationVisibility.PARTIAL : AnnotationVisibility.VISIBLE,\n ),\n );\n }, [dispatch, expanded]);\n\n const handleEditClick = useCallback(() => {\n oldValue.current = annotation;\n dispatch({type: SET_ANNOTATION_EDITING, data: true});\n }, [annotation, dispatch]);\n\n const handleCancelClick = useCallback(() => {\n dispatch({type: SET_ANNOTATION, data: oldValue.current});\n dispatch({type: SET_ANNOTATION_EDITING, data: false});\n }, [dispatch]);\n\n const handleChangeDescription = useCallback(\n ({value}: {value: string | undefined}) => {\n dispatch({type: SET_ANNOTATION, data: value || ''});\n },\n [dispatch],\n );\n\n const handleSaveClick = useCallback(() => {\n dispatch(saveAnnotation(path));\n }, [dispatch, path]);\n\n if (!(path === annotationPath && (error || annotation))) return null;\n\n return (\n <div className={block(null, className)}>\n <CollapsibleSection\n className={block('collapsible')}\n name={'Description'}\n collapsed={false}\n size={UI_COLLAPSIBLE_SIZE}\n overview={\n <ActionButtons\n isSaving={isSaving}\n editMode={isEditing}\n onEditClick={handleEditClick}\n onSaveClick={handleSaveClick}\n onCancelClick={handleCancelClick}\n />\n }\n >\n <div className={block('content')}>\n {isEditing ? (\n <EditAnnotationWithPreview\n valuePath={path}\n value={{value: annotation}}\n initialValue={{value: annotation}}\n onChange={handleChangeDescription}\n className={block('edit-block')}\n hideReset\n />\n ) : (\n <AnnotationWithPartial\n annotation={annotation}\n expanded={expanded}\n onToggle={handleToggleAnnotationCollapse}\n />\n )}\n {error && <YTErrorBlock error={error} />}\n </div>\n </CollapsibleSection>\n </div>\n );\n};\n\nexport default NavigationDescription;\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 '../../NavigationDiscription/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 'react-redux';\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';\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';\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 'react-redux';\nimport {\n hideNavigationAttributesEditor,\n navigationSetNodeAttributes,\n} from '../../../store/actions/navigation/modals/attributes-editor';\nimport {getMediumListNoCache} from '../../../store/selectors/thor';\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\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 } 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: compressionCodecs,\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 />\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 'react-redux';\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 'react-redux';\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: "10:20", "10:", ":20"\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 'react-redux';\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 'react-redux';\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';\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 'react-redux';\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 'react-redux';\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 'react-redux';\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 {StickyContainer} from 'react-sticky';\nimport {connect, useSelector} from 'react-redux';\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 <StickyContainer>\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 </StickyContainer>\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 'react-redux';\n\nimport {Flex} from '@gravity-ui/uikit';\n\n// @ts-ignore\nimport metrics 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 {Breadcrumbs, BreadcrumbsItem} from '../../../components/Breadcrumbs';\nimport Link from '../../../components/Link/Link';\nimport Editor from '../../../components/Editor/Editor';\nimport {EditButton} from '../../../components/EditableAsText/EditableAsText';\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';\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 return (\n <RowWithName page={Page.NAVIGATION} className={block()} urlParams={{path: defaultPath}}>\n <NavigationFavourites />\n <EditableNavigationBreadcrumbs />\n <NavigationTools />\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() {\n const path = useSelector(getPath);\n const {path: target_path} = useSelector(getNavigationPathAttributes);\n const loading = !useSelector(isNavigationFinalLoadState);\n\n const decodedTargetPath = target_path ? decodeEscapedAbsPath(target_path) : undefined;\n\n if (loading || !decodedTargetPath || path === decodedTargetPath || path === '/') {\n return null;\n }\n\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={target_path} 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 metrics.countEvent({'navigation_copy-path': 'clicked'});\n}\n\nfunction EditableNavigationBreadcrumbs() {\n const [editMode, setEditMode] = React.useState(false);\n\n const toggleEditMode = React.useCallback(() => {\n setEditMode(!editMode);\n }, [setEditMode, editMode]);\n\n return (\n <div className={block('editable-breadcrumbs')}>\n {editMode ? (\n <NavigationPathEditor hideEditor={toggleEditMode} />\n ) : (\n <React.Fragment>\n <NavigationBreadcrumbs onEdit={toggleEditMode} />\n <NavigationTargetPathButton />\n <EditButton onClick={toggleEditMode} />\n <NavigationPathToClipboard />\n </React.Fragment>\n )}\n </div>\n );\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 const url = makeRoutedURL(window.location.pathname, {\n path: state.path,\n navmode: mode === Tab.ACL ? mode : Tab.CONTENT,\n filter: '',\n });\n\n return (\n <BreadcrumbsItem key={text} href={url}>\n {index ? (\n <Escaped text={text} onClick={isLastItem ? onEdit : undefined} />\n ) : (\n <Icon awesome={'folder-tree'} face={'solid'} />\n )}\n </BreadcrumbsItem>\n );\n });\n }, [bcItems, mode, onEdit]);\n\n return (\n <Breadcrumbs navigate={history.push} showRoot className={block('breadcrumbs')}>\n {items}\n </Breadcrumbs>\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 metrics.countEvent({\n navigation_refresh: 'clicked',\n });\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 Restore\n </Button>\n </span>\n );\n}\n\nexport default React.memo(NavigationTopRowContent);\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 React from 'react';\nimport {getSchedulingOperationsLoadingStatus} from '../../../../../store/selectors/scheduling/expanded-pools';\nimport {useSelector} from 'react-redux';\nimport Loader from '../../../../../components/Loader/Loader';\n\nfunction SchedulingOperationsLoader() {\n const loading = useSelector(getSchedulingOperationsLoadingStatus);\n return <Loader visible={loading} />;\n}\n\nexport default React.memo(SchedulingOperationsLoader);\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 filter_ from 'lodash/filter';\nimport find_ from 'lodash/find';\nimport map_ from 'lodash/map';\nimport uniq_ from 'lodash/uniq';\n\nimport {createSelector} from 'reselect';\n\nimport {concatByAnd} from '../../../common/hammer/predicate';\nimport type {RootState} from '../../../store/reducers';\nimport type {ChaosBundle, ChaosCell} from '../../../store/reducers/chaos_cell_bundles';\nimport {getCluster} from '../../../store/selectors/global';\nimport {\n aggregateTotal,\n tabletActiveChaosBundleLink,\n tabletChaosBundleRootLink,\n} from '../../../utils/components/tablet-cells';\nimport {prepareHost} from '../../../utils';\nimport {sortArrayBySortState} from '../../../utils/sort-helpers';\nimport {sortTableBundles} from '../../../utils/tablet_cell_bundles';\n\nexport const getChaosIsLoaded = (state: RootState) => state.chaos_cell_bundles.loaded;\nexport const getChaosIsLoading = (state: RootState) => state.chaos_cell_bundles.loading;\nexport const getChaosError = (state: RootState) => state.chaos_cell_bundles.error;\n\nexport const getChaosBundlesSortState = (state: RootState) => state.chaos_cell_bundles.bundlesSort;\n\nexport const getChaosBundlesNameFilter = (state: RootState) =>\n state.chaos_cell_bundles.bundlesNameFilter;\nexport const getChaosBundlesAccountFilter = (state: RootState) =>\n state.chaos_cell_bundles.bundlesAccountFilter;\nexport const getChaosBundlesTagNodeFilter = (state: RootState) =>\n state.chaos_cell_bundles.bundlesTagNodeFilter;\n\nexport const getChaosBundles = (state: RootState) => state.chaos_cell_bundles.bundles;\n\nexport const getChaosActiveBundle = (state: RootState) => state.chaos_cell_bundles.activeBundle;\n\nexport const getChaosBundlesTableMode = (state: RootState) =>\n state.chaos_cell_bundles.bundlesTableMode;\n\nexport const getChaosActiveBundleData = createSelector(\n [getChaosBundles, getChaosActiveBundle],\n (bundles, activeBundle) => {\n return find_(bundles, (item) => item.bundle === activeBundle);\n },\n);\n\nexport const getChaosBundlesTotal = createSelector(\n [getChaosBundles],\n (bundles): ChaosBundle => aggregateTotal(bundles),\n);\n\nconst COLUMNS_SORTABLE_AS_IS = new Set<keyof ChaosBundle>([\n 'bundle',\n 'health',\n 'tabletCells',\n 'tablets',\n 'uncompressed',\n 'compressed',\n 'enable_bundle_balancer',\n 'node_tag_filter',\n 'memory',\n 'tablet_count',\n 'tablet_count_limit',\n 'tablet_count_free',\n 'tablet_count_percentage',\n 'tablet_static_memory',\n 'tablet_static_memory_limit',\n 'tablet_static_memory_free',\n 'tablet_static_memory_percentage',\n]);\n\nexport const getChaosBundlesFiltered = createSelector(\n [\n getChaosBundles,\n getChaosBundlesNameFilter,\n getChaosBundlesAccountFilter,\n getChaosBundlesTagNodeFilter,\n ],\n (bundles, nameFilter, accountFilter, tagNodeFilter) => {\n const predicates: Array<(item: ChaosBundle) => boolean> = [];\n if (nameFilter) {\n const lowerNameFilter = nameFilter.toLowerCase();\n predicates.push((item) => {\n return -1 !== item.bundle.toLowerCase().indexOf(lowerNameFilter);\n });\n }\n\n if (accountFilter) {\n const lowerAccountFilter = accountFilter.toLowerCase();\n predicates.push((item) => {\n const {changelog_account, snapshot_account} = item;\n return (\n (Boolean(changelog_account) &&\n -1 !== changelog_account.toLowerCase().indexOf(lowerAccountFilter)) ||\n (Boolean(snapshot_account) &&\n -1 !== snapshot_account.toLowerCase().indexOf(lowerAccountFilter))\n );\n });\n }\n\n if (tagNodeFilter) {\n const lowerTagNodeFilter = tagNodeFilter.toLowerCase();\n predicates.push((item) => {\n const {node_tag_filter} = item;\n return (\n Boolean(node_tag_filter) &&\n -1 !== node_tag_filter.toLowerCase().indexOf(lowerTagNodeFilter)\n );\n });\n }\n\n return !predicates.length ? bundles : filter_(bundles, concatByAnd(...predicates));\n },\n);\n\nexport const getChaosBundlesSorted = createSelector(\n [getChaosBundlesFiltered, getChaosBundlesSortState],\n (bundles, {column, order}) => {\n if (!column || !order) {\n return bundles;\n }\n\n return sortTableBundles({bundles, column, order, columnsSortable: COLUMNS_SORTABLE_AS_IS});\n },\n);\n\nexport const getChaosCells = (state: RootState) => state.chaos_cell_bundles.cells;\nexport const getChaosCellsSortState = (state: RootState) => state.chaos_cell_bundles.cellsSort;\n\nexport const getChaosCellsIdFilter = (state: RootState) => state.chaos_cell_bundles.cellsIdFilter;\nexport const getChaosCellsBundleFilter = (state: RootState) =>\n state.chaos_cell_bundles.cellsBundleFilter;\nexport const getChaosCellsHostFilter = (state: RootState) =>\n state.chaos_cell_bundles.cellsHostFilter;\n\nexport const getChaosCellsOfActiveAccount = createSelector(\n [getChaosCells, getChaosActiveBundle],\n (cells, activeBundle) => {\n if (!activeBundle) {\n return cells;\n }\n\n return filter_(cells, (item) => {\n return Boolean(item.bundle) && activeBundle === item.bundle;\n });\n },\n);\n\nexport const getChaosCellsFiltered = createSelector(\n [\n getChaosCellsOfActiveAccount,\n getChaosCellsIdFilter,\n getChaosCellsBundleFilter,\n getChaosCellsHostFilter,\n getChaosActiveBundle,\n ],\n (cells, idFilter, bundleFilter, hostFilter) => {\n const predicates: Array<(item: ChaosCell) => boolean> = [];\n if (idFilter) {\n predicates.push((item) => {\n return -1 !== item.id.indexOf(idFilter);\n });\n }\n\n if (bundleFilter) {\n predicates.push((item) => {\n return Boolean(item.bundle) && -1 !== item.bundle.indexOf(bundleFilter);\n });\n }\n\n if (hostFilter) {\n predicates.push((item) => {\n return Boolean(item.peerAddress) && -1 !== item.peerAddress.indexOf(hostFilter);\n });\n }\n return !predicates.length ? cells : filter_(cells, concatByAnd(...predicates));\n },\n);\n\nexport function filterChaosCellsByBundle(bundle: string, cells: Array<ChaosCell>) {\n if (!bundle) {\n return [];\n }\n\n return filter_(cells, (item) => item.bundle === bundle);\n}\n\nexport const getChaosCellsSorted = createSelector(\n [getChaosCellsFiltered, getChaosCellsSortState],\n (cells, sortState) => {\n return sortArrayBySortState(cells, sortState);\n },\n);\n\nexport const getChaosCellsBundles = createSelector([getChaosCells], (cells) => {\n return uniq_(map_(cells, 'bundle')).sort();\n});\n\nexport const getChaosCellsHosts = createSelector([getChaosCellsOfActiveAccount], (cells) => {\n return uniq_(map_(cells, 'peerAddress')).sort();\n});\n\nexport const getChaosCellsHostsOfActiveBundle = createSelector(\n [getChaosActiveBundle, getChaosCellsFiltered],\n (activeBundle: string, cells: Array<ChaosCell>) => {\n if (!activeBundle) {\n return '';\n }\n return prepareHostsFromCells(cells);\n },\n);\n\nexport function prepareHostsFromCells(cells: Array<ChaosCell>) {\n return uniq_(map_(cells, ({peerAddress}) => prepareHost(peerAddress)).filter(Boolean))\n .sort()\n .join('|');\n}\n\nexport interface ChaosCellBundlesBreadcrumbsItem {\n text: string;\n href: string;\n title?: string;\n}\n\nexport const getChaosBreadcrumbItems = createSelector(\n [getCluster, getChaosActiveBundle],\n (cluster, activeBundle): Array<ChaosCellBundlesBreadcrumbsItem> => {\n const res: Array<ChaosCellBundlesBreadcrumbsItem> = [\n {\n text: '',\n href: tabletChaosBundleRootLink(cluster),\n title: '<bundles>',\n },\n ];\n\n if (activeBundle) {\n res.push({\n text: activeBundle,\n href: tabletActiveChaosBundleLink(cluster, activeBundle),\n });\n }\n\n return res;\n },\n);\n","import {createSelector} from 'reselect';\nimport uniq_ from 'lodash/uniq';\nimport compact_ from 'lodash/compact';\n\nimport {concatByAnd} from '../../../common/hammer/predicate';\n\nimport {RootState} from '../../../store/reducers';\nimport {ChytInfo} from '../../../store/reducers/chyt/list';\nimport {SortState} from '../../../types';\nimport {multiSortBySortStateArray} from '../../../utils/sort-helpers';\nimport {StrawberryListAttributes} from '../../../utils/strawberryControllerApi';\nimport {getSettingsData} from '../../../store/selectors/settings/settings-base';\n\nexport const getChytListData = (state: RootState) => state.chyt.list.data;\n\nexport const getChytListAvailableCreators = createSelector([getChytListData], (data) => {\n const {items = []} = data;\n return uniq_(items.map((item) => item.creator!)).sort();\n});\n\nexport const getChytListAvailableHealths = createSelector([getChytListData], (data) => {\n const {items = []} = data;\n return compact_(uniq_(items.map((item) => item.health)).sort());\n});\n\nexport const getChytListAvailableStates = createSelector([getChytListData], (data) => {\n const {items = []} = data;\n return uniq_(items.map((item) => item.state!)).sort();\n});\n\nexport const getChytCurrentAlias = (state: RootState) => state.chyt.clique.currentClique;\n\nexport const getChytListFilterAlias = (state: RootState) => state.chyt.listFilters.name;\nexport const getChytListFilterHealth = (state: RootState) => state.chyt.listFilters.health;\nexport const getChytListFilterCreator = (state: RootState) => state.chyt.listFilters.creator;\nexport const getChytListFilterState = (state: RootState) => state.chyt.listFilters.state;\n\ntype ChytListColumns = Exclude<StrawberryListAttributes, 'yt_operation_id'>;\nconst CHYT_LIST_SELECTABLE_COLUMNS: Record<Exclude<ChytListColumns, 'health_reason'>, true> = {\n instance_count: true,\n total_cpu: true,\n total_memory: true,\n creation_time: true,\n stage: true,\n yt_operation_start_time: true,\n yt_operation_finish_time: true,\n speclet_modification_time: true,\n strawberry_state_modification_time: true,\n pool: true,\n health: true,\n creator: true,\n state: true,\n};\n\nexport type ChytSelectableColumn = keyof typeof CHYT_LIST_SELECTABLE_COLUMNS;\n\ntype ChytColumnItem = {checked: boolean; column: ChytListColumns};\n\nexport const getChytListColumnsFromSettings = (state: RootState) => {\n return (\n getSettingsData(state)['global::chyt::list_columns'] ??\n ([\n 'health',\n 'state',\n 'instance_count',\n 'total_cpu',\n 'total_memory',\n 'creator',\n 'creation_time',\n ] as const)\n );\n};\n\nexport const getChytListVisibleColumns = createSelector(\n [getChytListColumnsFromSettings],\n (columns): Array<ChytSelectableColumn> => {\n const userColumns = new Set(columns);\n return compact_(\n columns.map((k) => {\n return CHYT_LIST_SELECTABLE_COLUMNS[\n k as keyof typeof CHYT_LIST_SELECTABLE_COLUMNS\n ] && userColumns.has(k)\n ? (k as ChytSelectableColumn)\n : null;\n }),\n );\n },\n);\n\nexport const getChytListColumns = createSelector(\n [getChytListVisibleColumns],\n (columns): Array<ChytColumnItem> => {\n const userColumns = new Set(columns);\n const res = columns.map((column) => {\n return {checked: true, column};\n });\n\n Object.keys(CHYT_LIST_SELECTABLE_COLUMNS).forEach((k) => {\n const column = k as ChytSelectableColumn;\n if (!userColumns.has(column)) {\n res.push({checked: false, column});\n }\n });\n\n return res;\n },\n);\n\nexport const getChytListTableSortState = (state: RootState) => state.chyt.listFilters.sortState;\n\nexport const getChytListTableSortStateByName = createSelector(\n [getChytListTableSortState],\n (sortState) => {\n return sortState.reduce(\n (acc, item, index) => {\n if (item.column) {\n acc[item.column] = {\n ...item,\n multisortIndex: sortState.length > 1 ? index + 1 : undefined,\n };\n }\n return acc;\n },\n {} as Record<keyof ChytInfo, SortState<keyof ChytInfo> & {multisortIndex?: number}>,\n );\n },\n);\n\nconst getChytFilterPredicate = createSelector(\n [\n getChytListFilterAlias,\n getChytListFilterCreator,\n getChytListFilterState,\n getChytListFilterHealth,\n ],\n (alias, creator, state, health) => {\n const predicates = compact_([\n alias ? (item: ChytInfo) => -1 !== item.alias.indexOf(alias) : undefined,\n creator !== undefined ? (item: ChytInfo) => creator === item.creator : undefined,\n state ? (item: ChytInfo) => state === item.state : undefined,\n health ? (item: ChytInfo) => health === item.health : undefined,\n ]);\n\n return predicates.length ? concatByAnd(...predicates) : undefined;\n },\n);\n\nexport const getChytListTableItems = createSelector(\n [getChytListData, getChytListTableSortState, getChytFilterPredicate],\n (data, sortState, predicate) => {\n const {items = []} = data;\n\n const filteredItems = !predicate ? items : items.filter(predicate);\n\n const sortedItems = multiSortBySortStateArray(filteredItems, sortState);\n\n return sortedItems;\n },\n);\n","import find_ from 'lodash/find';\nimport sortBy_ from 'lodash/sortBy';\n\nimport {createSelector} from 'reselect';\n\nimport {\n getAccountsNS,\n getBundlesNS,\n getChaosBundlesNS,\n getChytNS,\n getClusterNS,\n getSchedulingNS,\n makeGetSetting,\n} from '../../store/selectors/settings';\nimport {SettingName} from '../../../shared/constants/settings';\nimport {getActiveAccount} from '../../store/selectors/accounts/accounts';\nimport {getPath} from '../../store/selectors/navigation';\nimport {getPool, getTree} from '../../store/selectors/scheduling/scheduling';\nimport {getTabletsActiveBundle} from './tablet_cell_bundles';\nimport {getChaosActiveBundle} from './chaos_cell_bundles';\nimport {getChytCurrentAlias} from './chyt';\n\n//************* Selectors for Accounts *****************\n\nexport const getFavouriteAccounts = createSelector(\n [makeGetSetting, getAccountsNS],\n prepareFavourites,\n);\n\nexport const getLastVisitedAccounts = createSelector(\n [makeGetSetting, getAccountsNS],\n prepareLastVisited,\n);\n\nexport const getPopularAccounts = createSelector([getLastVisitedAccounts], preparePopulars);\n\nexport const isActiveAcountInFavourites = createSelector(\n [getActiveAccount, getFavouriteAccounts],\n prepareIsInFavourites,\n);\n\nexport const getFavouriteChyt = createSelector([makeGetSetting, getChytNS], prepareFavourites);\n\nexport const getLastVisitedChyt = createSelector([makeGetSetting, getChytNS], prepareLastVisited);\n\nexport const getPopularChyt = createSelector([getLastVisitedChyt], preparePopulars);\n\nexport const isActiveCliqueInFavourites = createSelector(\n [getChytCurrentAlias, getFavouriteChyt],\n prepareIsInFavourites,\n);\n\n//************* Selectors for Navigation *****************\n\nexport const getFavouritePaths = createSelector([makeGetSetting, getClusterNS], prepareFavourites);\n\nexport const getLastVisitedPaths = createSelector(\n [makeGetSetting, getClusterNS],\n prepareLastVisited,\n);\n\nexport const getPopularPaths = createSelector([getLastVisitedPaths], preparePopulars);\n\nexport const isCurrentPathInFavourites = createSelector(\n [getPath, getFavouritePaths],\n prepareIsInFavourites,\n);\n\n//************* Selectors for Scheduling *****************\n\nexport const getFavouritePools = createSelector(\n [makeGetSetting, getSchedulingNS],\n prepareFavourites,\n);\n\nexport const isActivePoolInFavourites = createSelector(\n [getPool, getTree, getFavouritePools],\n prepareIsPoolInFavourites,\n);\n\n//************* Selectors for Bundles *****************\n\nexport const getFavouriteBundles = createSelector(\n [makeGetSetting, getBundlesNS],\n prepareFavourites,\n);\n\nexport const isActiveBundleInFavourites = createSelector(\n [getTabletsActiveBundle, getFavouriteBundles],\n prepareIsInFavourites,\n);\n\n// ************ Selectors for Chaos bundles ***********\n\nexport const getFavouriteChaosBundles = createSelector(\n [makeGetSetting, getChaosBundlesNS],\n prepareFavourites,\n);\n\nexport const isActiveChaosBundleInFavourites = createSelector(\n [getChaosActiveBundle, getFavouriteChaosBundles],\n prepareIsInFavourites,\n);\n\n//********************** Helpers *************************\n\nfunction prepareFavourites(getSetting, parentNS) {\n const items = getSetting(SettingName.LOCAL.FAVOURITES, parentNS);\n return sortBy_(items, 'path');\n}\n\nfunction prepareLastVisited(settingGetter, parentNS) {\n return settingGetter(SettingName.LOCAL.LAST_VISITED, parentNS) || [];\n}\n\nfunction preparePopulars(lastVisited) {\n return sortBy_(lastVisited, (entry) => -entry.count);\n}\n\nfunction prepareIsInFavourites(value, favourites) {\n return Boolean(find_(favourites, ({path}) => path === value));\n}\n\nfunction prepareIsPoolInFavourites(pool, tree, favourites) {\n return Boolean(find_(favourites, ({path}) => path === `${pool}[${tree}]`));\n}\n","import {createSelector} from 'reselect';\nimport reduce_ from 'lodash/reduce';\nimport forEach_ from 'lodash/forEach';\n\nimport {RootState} from '../../reducers';\nimport {getSchedulingPoolsMapByName} from './scheduling-pools';\n\nexport const getSchedulingAbcFilter = (state: RootState) =>\n state.scheduling.scheduling.abcServiceFilter;\n\nexport const getSchedulingAttributesToFilter = (state: RootState) =>\n state.scheduling.scheduling.attributesToFilter;\nexport const getSchedulingAttributesToFilterParams = (state: RootState) =>\n state.scheduling.scheduling.attributesToFilterParams;\n\nexport const schedulingOverviewHasFilter = (state: RootState) => {\n const abcFilter = getSchedulingAbcFilter(state);\n\n return abcFilter?.id !== undefined;\n};\n\nexport const getSchedulingFilteredPoolNames = createSelector(\n [getSchedulingAttributesToFilter, getSchedulingPoolsMapByName, getSchedulingAbcFilter],\n (attrsToFilter, loadedPools, abcFilter) => {\n if (!attrsToFilter) {\n return undefined;\n }\n\n if (abcFilter?.id === undefined) {\n return undefined;\n }\n\n const res = reduce_(\n attrsToFilter,\n (acc, attrs, key) => {\n if (attrs.abc?.id !== abcFilter?.id) {\n return acc;\n }\n\n acc.add(key);\n return acc;\n },\n new Set<string>(),\n );\n\n forEach_([...res], (poolName) => {\n let name = poolName;\n let item = attrsToFilter[name];\n while (item?.parent && !loadedPools[name]) {\n res.add(item.parent);\n\n name = item.parent;\n item = attrsToFilter[item.parent];\n }\n });\n\n return res;\n },\n);\n","import {createSelector} from 'reselect';\n\nimport {RootState} from '../../reducers';\n\nexport const getExpandedPoolCypressData = (state: RootState) =>\n state.scheduling.expandedPools.flattenCypressData;\n\nexport const getSchedulingOperations = (state: RootState) =>\n state.scheduling.expandedPools.rawOperations;\nexport const getExpandedPoolsTree = (state: RootState) =>\n state.scheduling.expandedPools.expandedPoolsTree;\nexport const getSchedulingOperationsError = (state: RootState) =>\n state.scheduling.expandedPools.error;\nexport const getSchedulingOperationsLoading = (state: RootState) =>\n state.scheduling.expandedPools.loading;\nexport const getSchedulingOperationsLoaded = (state: RootState) =>\n state.scheduling.expandedPools.loading;\nexport const getSchedulingOperationsExpandedPools = (state: RootState) =>\n state.scheduling.expandedPools.expandedPools;\nexport const getExpandedPoolsLoadAll = (state: RootState) => state.scheduling.expandedPools.loadAll;\n\nexport const getSchedulingOperationsLoadingStatus = createSelector(\n [getSchedulingOperationsLoading, getSchedulingOperationsLoaded],\n (loading, loaded) => {\n return loading && !loaded;\n },\n);\n","import map_ from 'lodash/map';\n\nimport ypath from '../../common/thor/ypath';\nimport {ROOT_POOL_NAME} from '../../constants/scheduling';\nimport {appendInnerErrors} from '../errors';\n\nconst RESOURCE_LIMIT_MAPPER = {\n user_memory: 'memory',\n};\n\nfunction preparePoolChildResource(data, type, treeResources, resource) {\n const attributes = data.attributes;\n\n if (data.name === ROOT_POOL_NAME) {\n data.resources[resource] = {\n guaranteed: ypath.getNumber(treeResources, '/resource_limits/' + resource),\n usage: ypath.getNumber(treeResources, '/resource_usage/' + resource),\n };\n } else {\n const min = ypath.getNumber(attributes, '/strong_guarantee_resources/' + resource);\n const usage = ypath.getNumber(attributes, '/resource_usage/' + resource);\n const demand = ypath.getNumber(attributes, '/resource_demand/' + resource);\n const guaranteed = ypath.getNumber(\n attributes,\n '/promised_fair_share_resources/' + resource,\n );\n\n const limitResource = RESOURCE_LIMIT_MAPPER[resource] || resource;\n const resourceLimit = ypath.getNumber(\n data.cypressAttributes,\n '/resource_limits/' + limitResource,\n );\n const specifiedResourceLimit = ypath.getNumber(\n data.attributes,\n '/specified_resource_limits/' + limitResource,\n );\n\n const treeLimit = ypath.getNumber(treeResources, '/resource_limits/' + resource);\n const detailed =\n treeLimit * ypath.getNumber(attributes, '/detailed_fair_share/total/' + limitResource);\n\n data.resources[resource] = {\n min,\n guaranteed,\n usage,\n demand,\n limit: resourceLimit || specifiedResourceLimit,\n detailed,\n };\n }\n\n return data;\n}\n\nexport function updatePoolChild(data, cypressData, type, treeResources) {\n try {\n const attributes = data.attributes;\n const cypressAttributes = ypath.getAttributes(cypressData);\n\n data.cypressAttributes = cypressAttributes;\n data.type = type;\n\n if (data.type === 'pool') {\n if (typeof attributes === 'undefined' && data.parent) {\n console.error(\n 'Pool \"%s\" without attributes inited by \"%s\"',\n data.name,\n data._initedBy,\n );\n }\n\n data.mode = ypath.getValue(attributes, '/mode');\n\n data.leaves = map_(data.leaves, (leaf) => {\n return updatePoolChild(leaf, {}, 'operation', treeResources);\n });\n\n const child_pool_count = ypath.getNumber(attributes, '/child_pool_count');\n if (child_pool_count > 0 && !data.children.length) {\n for (let i = 0; i < child_pool_count; ++i) {\n data.children.push({\n parent: data.name,\n type: 'pool',\n name: `#key_${data.name}_${i}`,\n attributes: {},\n leaves: [],\n incomplete: true,\n });\n }\n }\n\n if (!data.leaves?.length) {\n data.pool_operation_count = ypath.getNumber(\n attributes,\n '/pool_operation_count',\n NaN,\n );\n if (data.pool_operation_count > 0) {\n const emptyOp = updatePoolChild(\n {attributes: {}},\n {},\n 'operation',\n treeResources,\n );\n data.leaves = [];\n for (let i = 0; i < data.pool_operation_count; ++i) {\n data.leaves.push({\n ...emptyOp,\n name: `##fake_operation_${data.name}_${i}`,\n });\n }\n }\n }\n\n // Operations\n data.operationCount = ypath.getNumber(attributes, '/operation_count');\n data.maxOperationCount = ypath.getNumber(attributes, '/max_operation_count');\n data.maxOperationCountEdited = ypath.getNumber(\n cypressAttributes,\n '/max_operation_count',\n );\n data.runningOperationCount = ypath.getNumber(attributes, '/running_operation_count');\n data.maxRunningOperationCount = ypath.getNumber(\n attributes,\n '/max_running_operation_count',\n );\n data.maxRunningOperationCountEdited = ypath.getNumber(\n cypressAttributes,\n '/max_running_operation_count',\n );\n }\n\n data.id = data.name;\n data.starvation_status = ypath.getValue(attributes, '/starvation_status');\n\n // General\n data.weight = ypath.getNumber(attributes, '/weight');\n data.weightEdited = ypath.getNumber(cypressAttributes, '/weight');\n data.minShareRatio = ypath.getNumber(attributes, '/min_share_ratio');\n data.maxShareRatio = ypath.getNumber(attributes, '/max_share_ratio');\n data.fairShareRatio = ypath.getNumber(attributes, '/fair_share_ratio');\n data.fifoIndex = ypath.getNumber(attributes, '/fifo_index');\n data.usageRatio = ypath.getNumber(attributes, '/usage_ratio');\n data.demandRatio = ypath.getNumber(attributes, '/demand_ratio');\n data.isEphemeral = ypath.getBoolean(attributes, '/is_ephemeral');\n data.isEffectiveLightweight = ypath.getBoolean(\n attributes,\n '/effective_lightweight_operations_enabled',\n );\n\n data.integralType = ypath.getValue(attributes, '/integral_guarantee_type');\n const userDefinedBurstCPU = ypath.getNumber(\n cypressAttributes,\n '/integral_guarantees/burst_guarantee_resources/cpu',\n NaN,\n );\n data.burstCPU = ypath.getNumber(\n attributes,\n '/specified_burst_guarantee_resources/cpu',\n userDefinedBurstCPU,\n );\n const userDefinedFlowCPU = ypath.getNumber(\n cypressAttributes,\n '/integral_guarantees/resource_flow/cpu',\n NaN,\n );\n data.flowCPU = ypath.getNumber(\n attributes,\n '/specified_resource_flow/cpu',\n userDefinedFlowCPU,\n );\n const userDefinedFlowGPU = ypath.getNumber(\n cypressAttributes,\n '/integral_guarantees/resource_flow/gpu',\n NaN,\n );\n data.flowGPU = ypath.getNumber(\n attributes,\n '/specified_resource_flow/gpu',\n userDefinedFlowGPU,\n );\n\n data.accumulated = ypath.getValue(attributes, '/accumulated_resource_ratio_volume');\n data.accumulatedCpu = ypath.getValue(attributes, '/accumulated_resource_volume/cpu');\n data.burstDuration = ypath.getValue(attributes, '/estimated_burst_usage_duration_sec');\n\n const fifoSortParams = map_(\n ypath.getValue(attributes, '/fifo_sort_parameters') ||\n ypath.getValue(cypressAttributes, '/fifo_sort_parameters'),\n (param) => ypath.getValue(param),\n );\n data.fifoSortParams =\n fifoSortParams.length > 0\n ? fifoSortParams\n : ['start_time', 'weight', 'pending_job_count'];\n data.abc = ypath.getValue(attributes, '/abc') || {};\n data.forbidImmediateOperations =\n ypath.getBoolean(cypressAttributes, '/forbid_immediate_operations') || false;\n data.createEphemeralSubpools =\n ypath.getBoolean(cypressAttributes, '/create_ephemeral_subpools') || false;\n\n // Resources\n data.dominantResource = ypath.getValue(attributes, '/dominant_resource');\n\n data.resources = {};\n\n preparePoolChildResource(data, type, treeResources, 'cpu');\n preparePoolChildResource(data, type, treeResources, 'user_memory');\n preparePoolChildResource(data, type, treeResources, 'gpu');\n preparePoolChildResource(data, type, treeResources, 'user_slots');\n\n return data;\n } catch (e) {\n throw appendInnerErrors(e, {\n message: `An error occured while parsing pool \"${data.name}\" data.`,\n });\n }\n}\n","import isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport {createSelector} from 'reselect';\n\nimport {RootState} from '../../../store/reducers';\nimport {ROOT_POOL_NAME} from '../../../constants/scheduling';\nimport {preparePools} from '../../../utils/scheduling/scheduling';\nimport ypath from '../../../common/thor/ypath';\nimport {updatePoolChild} from '../../../utils/scheduling/pool-child';\nimport {\n getExpandedPoolCypressData,\n getExpandedPoolsTree,\n getSchedulingOperations,\n} from './expanded-pools';\nimport {getCluster} from '../../../store/selectors/global';\nimport {RumWrapper} from '../../../rum/rum-wrap-api';\nimport {RumMeasureTypes} from '../../../rum/rum-measure-types';\nimport {EMPTY_OBJECT} from '../../../constants/empty';\n\nexport const getTree = (state: RootState) => state.scheduling.scheduling.tree;\nconst getPoolsRaw = (state: RootState) => state.scheduling.expandedPools.rawPools;\nconst getTreeResources = (state: RootState) => state.scheduling.scheduling.treeResources;\n\nconst getSchedulingTreeOperations = createSelector(\n [getSchedulingOperations, getExpandedPoolsTree, getTree],\n (rawOperations, expandedPoolsTree, tree) => {\n if (tree !== expandedPoolsTree) {\n return EMPTY_OBJECT as typeof rawOperations;\n }\n\n return rawOperations;\n },\n);\n\nconst getOperationsFiltered = createSelector(\n [getPoolsRaw, getSchedulingTreeOperations],\n (rawPools, rawOperations) => {\n return reduce_(\n rawOperations,\n (acc, item, operationId) => {\n if (rawPools[item.pool]) {\n acc[operationId] = item;\n }\n return acc;\n },\n {} as typeof rawOperations,\n );\n },\n);\n\nconst getPoolsPrepared = createSelector(\n [getPoolsRaw, getOperationsFiltered, getExpandedPoolCypressData, getTreeResources, getCluster],\n (rawPools, rawOperations, attributes, treeResources, cluster) => {\n if (isEmpty_(rawPools)) {\n return [];\n }\n\n const rumId = new RumWrapper(cluster, RumMeasureTypes.SCHEDULING);\n\n return rumId.wrap('prepareData', () => {\n const preparedPools = preparePools(rawPools!, rawOperations);\n return map_(preparedPools, (pool) => {\n const cypressAttributes = ypath.getValue(attributes)[pool.name];\n return updatePoolChild(pool, cypressAttributes, 'pool', treeResources);\n });\n });\n },\n);\n\nexport const getSchedulingPoolsMapByName = createSelector(\n [getPoolsPrepared],\n (pools: Array<PoolInfo>) => {\n return reduce_(\n pools,\n (acc, item) => {\n acc[item.name] = item;\n return acc;\n },\n {} as Record<string, PoolInfo>,\n );\n },\n);\n\nexport const getSchedulingPoolsExtraInfo = createSelector(\n [getSchedulingPoolsMapByName],\n (poolsMap) => {\n const root = poolsMap[ROOT_POOL_NAME];\n if (!root) {\n return {};\n }\n\n const res: Record<string, PoolExtraInfo> = {};\n calcChildrenIntegrals(root, res);\n return res;\n },\n);\n\ntype PoolName = string;\n\nfunction calcChildrenIntegrals(pool: PoolInfo, dst: Record<PoolName, PoolExtraInfo>) {\n const {children, name} = pool;\n if (!children?.length) {\n const res = (dst[name] = {\n childrenBurstCPU: 0,\n childrenFlowCPU: 0,\n });\n return res;\n }\n\n const res: PoolExtraInfo = {\n childrenFlowCPU: 0,\n childrenBurstCPU: 0,\n };\n for (let i = 0; i < children.length; ++i) {\n const item = children[i];\n const itemExtraInfo = calcChildrenIntegrals(item, dst);\n\n dst[item.name] = itemExtraInfo;\n\n res.childrenFlowCPU += item.flowCPU || 0 + itemExtraInfo.childrenFlowCPU;\n res.childrenBurstCPU += item.burstCPU || 0 + itemExtraInfo.childrenBurstCPU;\n }\n\n dst[name] = res;\n return res;\n}\n\nexport interface PoolExtraInfo {\n childrenFlowCPU: number;\n childrenBurstCPU: number;\n}\n\nexport interface OperationInfo {\n name: string;\n type: 'operation';\n parent: string;\n attributes: object;\n cypressAttributes: object;\n flowCPU: number;\n burstCPU: number;\n flowGPU: number;\n integralType?: string;\n mode?: string;\n\n operationCount?: number;\n maxOperationCount?: number;\n maxRunningOperationCount?: number;\n\n pool: string;\n}\n\nexport interface PoolInfo extends Omit<OperationInfo, 'type' | 'pool'> {\n type: 'pool';\n incomplete?: boolean;\n children?: Array<PoolInfo>;\n leaves: Array<OperationInfo>;\n isEphemeral?: boolean;\n resources?: PoolResources;\n fifoIndex?: number;\n weight?: number;\n minShareRatio?: number;\n maxShareRatio?: number;\n fairShareRatio?: number;\n usageRatio?: number;\n demandRatio?: number;\n dominantResource?: number;\n runningOperationCount?: number;\n operationCount?: number;\n maxOperationCount?: number;\n childrenBurstCPU?: number;\n childrenFlowCPU?: number;\n accumulated?: number;\n accumulatedCpu?: number;\n burstDuration?: number;\n}\n\nexport type PoolResources = Partial<\n Record<'cpu' | 'gpu' | 'user_memory' | 'user_slots', PoolResourceDetails>\n>;\n\nexport type PoolResourceType = keyof PoolResources;\n\nexport type PoolResourceDetails = {\n min?: number;\n usage?: number;\n limit?: number;\n demand?: number;\n detailed?: number;\n guaranteed?: number;\n};\n\nexport const getPools = createSelector(\n [getPoolsPrepared, getSchedulingPoolsExtraInfo],\n (pools, extras) => {\n const res = map_(pools, (item) => {\n const itemExtra = extras[item.name] || {};\n return Object.assign(item, itemExtra);\n });\n return res;\n },\n);\n","import ypath from '@ytsaurus/interface-helpers/lib/ypath';\nimport hammer from '../../common/hammer';\n\nimport reduce_ from 'lodash/reduce';\n\nfunction getNetworkResourceText(resourceUsage, resourceLimit) {\n return hammer.format['Percent']((resourceUsage / resourceLimit) * 100);\n}\n\nfunction getMemoryResourceText(resourceUsage, resourceLimit) {\n return hammer.format['Bytes'](resourceUsage) + ' / ' + hammer.format['Bytes'](resourceLimit);\n}\n\nfunction getDefaultResourceText(resourceUsage, resourceLimit) {\n return hammer.format['Number'](resourceUsage) + ' / ' + hammer.format['Number'](resourceLimit);\n}\n\nfunction getResourcesText(data) {\n const resourceUsage = data.usage;\n const resourceLimit = data.limit;\n\n switch (data.type) {\n case 'network':\n return getNetworkResourceText(resourceUsage, resourceLimit);\n case 'user_memory':\n return getMemoryResourceText(resourceUsage, resourceLimit);\n default:\n return getDefaultResourceText(resourceUsage, resourceLimit);\n }\n}\n\nfunction getResourceProgressValue(data) {\n const resourceUsage = data.usage;\n const resourceLimit = data.limit;\n\n return (resourceUsage / resourceLimit) * 100;\n}\n\nfunction getResourceProgress(data) {\n return {\n text: getResourcesText(data),\n value: getResourceProgressValue(data),\n theme: 'info',\n };\n}\n\nexport function prepareResources(data) {\n const resourceUsage = ypath.getValue(data, '/resource_usage');\n const resourceLimits = ypath.getValue(data, '/resource_limits');\n const resourceTypes = ['cpu', 'user_memory', 'user_slots', 'network', 'gpu'];\n\n return reduce_(\n resourceTypes,\n (res, type) => {\n if (resourceUsage && resourceLimits) {\n const data = {\n type,\n usage: Number(ypath.getValue(resourceUsage[type], '')),\n limit: Number(ypath.getValue(resourceLimits[type], '')),\n };\n const progress = getResourceProgress(data);\n\n res.push({...data, progress});\n }\n return res;\n },\n [],\n );\n}\n","import filter_ from 'lodash/filter';\nimport find_ from 'lodash/find';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport hammer from '../../../common/hammer';\nimport {createSelector} from 'reselect';\nimport {getCluster} from '../../../store/selectors/global';\n\nimport {prepareResources} from '../../../utils/scheduling/overview';\nimport {childTableItems} from '../../../utils/scheduling/detailsTable';\nimport {poolsTableItems} from '../../../utils/scheduling/overviewTable';\nimport {\n ROOT_POOL_NAME,\n SCHEDULING_POOL_CHILDREN_TABLE_ID,\n SCHEDULING_POOL_TREE_TABLE_ID,\n} from '../../../constants/scheduling';\n\nimport {\n OperationInfo,\n PoolInfo,\n getPools as getPoolsImpl,\n getSchedulingPoolsMapByName,\n} from './scheduling-pools';\nimport {RootState} from '../../../store/reducers';\nimport {isAbcPoolName, isTopLevelPool} from '../../../utils/scheduling/pool';\nimport {visitTreeItems} from '../../../utils/utils';\nimport {getExpandedPoolsLoadAll, getSchedulingOperationsExpandedPools} from './expanded-pools';\nimport {\n getSchedulingAttributesToFilter,\n getSchedulingFilteredPoolNames,\n} from './attributes-to-filter';\nexport const getPools = getPoolsImpl;\n\nconst getExpandedPoolsIsInitialLoading = (state: RootState) => {\n const {loaded, loading} = state.scheduling.expandedPools;\n return !loaded && loading;\n};\n\nexport const getSchedulingIsInitialLoading = (state: RootState) => {\n const {loaded, loading} = state.scheduling.scheduling;\n return (!loaded && loading) || getExpandedPoolsIsInitialLoading(state);\n};\n\nexport const getTreeResources = (state: RootState) => state.scheduling.scheduling.treeResources;\nexport const getPoolChildrenFilter = (state: RootState) =>\n state.scheduling.scheduling.poolChildrenFilter;\nexport const getSchedulingTreeState = (state: RootState) => state.scheduling.scheduling.treeState;\nconst getContentModeRaw = (state: RootState) => state.scheduling.scheduling.contentMode;\n\nexport const getTree = (state: RootState) => state.scheduling.scheduling.tree;\nexport const getTrees = (state: RootState) => state.scheduling.scheduling.trees;\n\nexport const getPool = (state: RootState) => state.scheduling.scheduling.pool;\n\nexport const getSchedulingEditItem = (state: RootState) => state.scheduling.scheduling.editItem;\n\nexport const getSortState = (state: RootState) => state.tables[SCHEDULING_POOL_TREE_TABLE_ID];\nexport const getPoolChildrenSortState = (state: RootState) =>\n state.tables[SCHEDULING_POOL_CHILDREN_TABLE_ID];\n\nexport const getPoolsNames = createSelector(\n getSchedulingAttributesToFilter,\n (pools): Array<string> => map_(pools, (_v, name) => name).sort(),\n);\n\nconst DETAILS_CONTENT_MODES = {\n cpu: 'cpu',\n memory: 'memory',\n gpu: 'gpu',\n user_slots: 'user_slots',\n operations: 'operations',\n integral: 'integral',\n};\n\nexport const getContentMode = createSelector([getContentModeRaw], (mode) => {\n return DETAILS_CONTENT_MODES[mode] || DETAILS_CONTENT_MODES.cpu;\n});\n\nexport const getIsRoot = createSelector(getPool, (pool) => pool === ROOT_POOL_NAME);\n\nexport const getTreesSelectItems = createSelector(getTrees, (trees) =>\n map_(trees, (tree) => ({\n value: tree,\n text: hammer.format['Readable'](tree) as string,\n })),\n);\n\nexport const getPoolsSelectItems = createSelector(getPoolsNames, (pools) => {\n const items = map_(pools, (pool) => ({\n value: pool,\n text: pool,\n }));\n\n return items;\n});\n\nexport const getCurrentPool = createSelector([getPool, getPools], (pool, pools) =>\n find_(pools, (item) => item.name === pool),\n);\n\nexport const getPoolIsEphemeral = createSelector([getCurrentPool], (currentPool) => {\n if (currentPool && currentPool.isEphemeral !== undefined) return currentPool.isEphemeral;\n return undefined;\n});\n\nexport const getCurrentPoolChildren = createSelector(getCurrentPool, (currentPool) => {\n if (currentPool) {\n return currentPool.children;\n }\n\n return undefined;\n});\n\nexport const getCurrentPoolOperations = createSelector(getCurrentPool, (currentPool) => {\n if (currentPool) {\n return currentPool.leaves;\n }\n\n return undefined;\n});\n\nexport const getResources = createSelector(\n [getCurrentPool, getTreeResources],\n (currentPool, resources) => {\n if (currentPool && currentPool.name !== '<Root>') {\n return prepareResources(currentPool.attributes);\n } else if (resources) {\n return prepareResources(resources);\n }\n\n return [];\n },\n);\n\nconst getFilteredTree = createSelector(\n [getCurrentPool, getSchedulingFilteredPoolNames],\n (treeRoot, visiblePools) => {\n if (treeRoot) {\n return hammer.treeList.filterTree(\n treeRoot,\n (pool: {name: string}) => {\n return visiblePools === undefined || visiblePools.has(pool.name);\n },\n true,\n );\n }\n return undefined;\n },\n);\n\nexport const getTableItems = createSelector(\n [getFilteredTree, getSortState],\n (filteredTree, sortState) => {\n if (filteredTree) {\n const isRoot = filteredTree && filteredTree.name === ROOT_POOL_NAME;\n const tree = isRoot ? filteredTree : {children: [filteredTree]};\n const sortedTree = hammer.treeList.sortTree(tree, sortState, poolsTableItems);\n\n return hammer.treeList.flattenTree(sortedTree);\n }\n\n return [];\n },\n);\n\nexport const getSchedulingOverviewMaxDepth = createSelector(\n [getTableItems, getExpandedPoolsLoadAll, getTree, getSchedulingOperationsExpandedPools],\n (items: Array<{level: number; name: string}>, allExpanded, tree, expandedPoolsMap) => {\n if (allExpanded) {\n return reduce_(\n items,\n (acc, item) => {\n const {level = 0} = item || {};\n return acc < level ? level : acc;\n },\n 0,\n );\n }\n\n const expandedPools = expandedPoolsMap[tree];\n if (!expandedPools?.size) {\n return 0;\n }\n\n return reduce_(\n items,\n (acc, item) => {\n if (expandedPools.has(item.name)) {\n return acc < item.level + 1 ? item.level + 1 : acc;\n }\n return acc;\n },\n 0,\n );\n },\n);\n\nconst getPoolChildrenData = createSelector(\n [getCurrentPool, getCurrentPoolChildren, getCurrentPoolOperations],\n (pool, pools, operations = []) => {\n if (pool && pools) {\n return [...pools, ...operations];\n }\n\n return undefined;\n },\n);\n\nconst getFilteredPoolChildren = createSelector(\n [getPoolChildrenData, getPoolChildrenFilter],\n (poolChildrenData, poolChildrenFilter) => {\n return hammer.filter.filter({\n data: poolChildrenData,\n input: poolChildrenFilter,\n factors: ['name'],\n });\n },\n);\n\nexport const getSortedPoolChildren = createSelector(\n [getFilteredPoolChildren, getPoolChildrenSortState, getCurrentPool],\n (filteredPoolChildren, poolChildrenSortState, currentPool) => {\n return hammer.utils.sort(filteredPoolChildren, poolChildrenSortState, childTableItems, {\n addGetParams: [currentPool],\n groupBy: {\n asc: true,\n get(item: PoolInfo | OperationInfo) {\n return item.type === 'operation' ? 0 : 1;\n },\n },\n });\n },\n);\n\nexport const getPollChildrenTableItems = createSelector(\n [getCurrentPool, getSortedPoolChildren],\n (currentPool, sortedPoolChildren) => {\n const extras = [];\n let isChildPool = false;\n if (currentPool && currentPool.name !== ROOT_POOL_NAME) {\n extras.push(currentPool);\n isChildPool = true;\n }\n\n return extras.concat(\n map_(sortedPoolChildren, (item) => {\n return Object.assign({}, item, {isChildPool});\n }),\n );\n },\n);\n\n// The same cluster is ready for bundle's ACL\nconst CLUSTERS_WITHOUT_POOL_ACL = ['locke'];\n\nexport const isPoolAclAllowed = createSelector([getCluster], (cluster) => {\n return CLUSTERS_WITHOUT_POOL_ACL.indexOf(cluster) === -1;\n});\n\nexport const getCurrentPoolPath = createSelector(\n [getPool, getPools, getTree],\n (pool, pools, tree) => {\n return calculatePoolPath(pool, pools, tree);\n },\n);\n\nexport function calculatePoolPath(pool: string, pools: Array<PoolInfo>, tree: string) {\n const prefix = `//sys/pool_trees/${tree}`;\n\n let current = pool;\n const path = [];\n while (current) {\n if (current !== ROOT_POOL_NAME) {\n path.push(current);\n }\n const tmp = current;\n const {parent} = find_(pools, ({name}) => name === tmp) || {};\n current = parent || '';\n }\n const pathStr = !path.length ? '' : '/' + path.reverse().join('/');\n return `${prefix}${pathStr}`;\n}\n\nexport const getSchedulingTopPoolOfEditItem = createSelector(\n [getSchedulingEditItem, getSchedulingPoolsMapByName],\n (pool, mapOfPools) => {\n if (isAbcPoolName(pool?.name)) {\n return undefined;\n }\n\n if (isTopLevelPool(pool)) {\n return pool;\n }\n\n let item = pool;\n while (item) {\n const parent = mapOfPools[item.parent];\n if (isAbcPoolName(item.parent)) {\n return item;\n }\n\n if (isTopLevelPool(item)) {\n return item;\n }\n\n item = parent;\n }\n return undefined;\n },\n);\n\nexport const getSchedulingSourcesOfEditItem = createSelector(\n [getSchedulingEditItem, getSchedulingTopPoolOfEditItem, getSchedulingPoolsMapByName],\n (pool, topPool, mapOfPools): Array<string> => {\n if (!pool?.name || !mapOfPools) {\n return [];\n }\n\n const res: Array<string> = [];\n visitTreeItems(\n topPool,\n (item: PoolInfo) => {\n if (pool.name !== item.name) {\n res.push(item.name);\n }\n },\n {\n isNeedToSkipChildren: (item: PoolInfo) => {\n return item?.name === pool?.name;\n },\n },\n );\n\n return res;\n },\n);\n\nexport const getSchedulingSourcesOfEditItemSkipParent = createSelector(\n [getSchedulingEditItem, getSchedulingSourcesOfEditItem],\n (pool, sources) => {\n if (!pool?.parent) {\n return sources;\n }\n\n return filter_(sources, (item) => item !== pool.parent);\n },\n);\n","import React from 'react';\n\nimport format from '../../common/hammer/format';\nimport SchedulingOperationsLoader from '../../pages/scheduling/Content/tabs/ScherdulingOperataionsLoader/SchedulingOperationsLoader';\nimport type {PoolInfo, PoolResourceType} from '../../store/selectors/scheduling/scheduling-pools';\n\nfunction prepareDetailedColumn(resource: PoolResourceType) {\n return {\n get(item: PoolInfo) {\n return item.resources?.[resource]?.detailed;\n },\n sort: true,\n caption: 'Abs fair share',\n align: 'right',\n };\n}\n\nfunction prepareLimitColumn(resource: PoolResourceType) {\n return {\n get(item: PoolInfo) {\n return item.resources?.[resource]?.limit;\n },\n sort: true,\n sortWithUndefined: true,\n caption: 'Limit',\n align: 'right',\n };\n}\n\nfunction prepareMinResourcesColumn(resource: PoolResourceType) {\n return {\n get(item: PoolInfo) {\n return item.resources?.[resource]?.min;\n },\n sort: true,\n caption: 'Strong guar.',\n title: 'Strong guarantee',\n align: 'right',\n };\n}\n\nfunction prepareAbsGuaranteedColumn(resource: PoolResourceType) {\n return {\n get(item: PoolInfo) {\n return item.resources?.[resource]?.guaranteed;\n },\n sort: true,\n caption: 'Estimated guar.',\n title: 'Estimated guarantee',\n align: 'right',\n };\n}\n\nfunction prepareRelGuaranteedColumn(resource: PoolResourceType) {\n return {\n get(item: PoolInfo, currentPool: PoolInfo) {\n return (\n prepareAbsGuaranteedColumn(resource).get(item)! /\n prepareAbsGuaranteedColumn(resource).get(currentPool)!\n );\n },\n sort: true,\n caption: 'Rel guaranteed',\n align: 'right',\n };\n}\n\nfunction prepareAbsDemandColumn(resource: PoolResourceType) {\n return {\n get(item: PoolInfo) {\n return item.resources?.[resource]?.demand;\n },\n sort: true,\n caption: 'Abs demand',\n align: 'right',\n };\n}\n\nfunction prepareAbsUsageColumn(resource: PoolResourceType) {\n return {\n get(item: PoolInfo) {\n return item.resources?.[resource]?.usage;\n },\n sort: true,\n caption: 'Abs usage',\n align: 'right',\n };\n}\n\nfunction prepareRelUsageColumn(resource: PoolResourceType) {\n return {\n get(item: PoolInfo, currentPool: PoolInfo) {\n return (\n prepareAbsUsageColumn(resource).get(item)! /\n prepareAbsUsageColumn(resource).get(currentPool)!\n );\n },\n sort: true,\n caption: 'Rel usage',\n align: 'right',\n };\n}\n\nfunction prepareGuaranteedUsageColumn(resource: PoolResourceType) {\n return {\n get(item: PoolInfo, currentPool: PoolInfo) {\n return {\n guaranteed: prepareRelGuaranteedColumn(resource).get(item, currentPool),\n usage: prepareRelUsageColumn(resource).get(item, currentPool),\n };\n },\n caption: 'Usage / Guaranteed',\n align: 'center',\n };\n}\n\nexport const childTableItems = {\n name: {\n sort(item: PoolInfo) {\n return item.name;\n },\n caption: 'Pool / Operation',\n captionTail: <SchedulingOperationsLoader />,\n align: 'left',\n },\n mode: {\n sort(item: PoolInfo) {\n return item.mode;\n },\n align: 'center',\n },\n FI: {\n sort(item: PoolInfo) {\n return item.fifoIndex;\n },\n align: 'center',\n },\n weight: {\n sort(item: PoolInfo) {\n return item.weight;\n },\n align: 'right',\n },\n min_share: {\n sort(item: PoolInfo) {\n return item.minShareRatio;\n },\n align: 'right',\n },\n max_share: {\n sort(item: PoolInfo) {\n return item.maxShareRatio;\n },\n align: 'right',\n },\n fair_share: {\n get(item: PoolInfo) {\n return item.fairShareRatio;\n },\n sort: true,\n align: 'right',\n },\n usage: {\n get(item: PoolInfo) {\n return item.usageRatio;\n },\n sort: true,\n align: 'right',\n },\n demand: {\n get(item: PoolInfo) {\n return item.demandRatio;\n },\n sort: true,\n align: 'right',\n },\n fair_share_usage: {\n caption: 'Usage / Fair share',\n align: 'left',\n },\n dominant_resource: {\n sort(item: PoolInfo) {\n return item.dominantResource;\n },\n caption: 'Dom. res.',\n title: 'Dominant Resource',\n align: 'left',\n },\n\n resource_detailed_cpu: prepareDetailedColumn('cpu'),\n resource_detailed_memory: prepareDetailedColumn('user_memory'),\n resource_detailed_gpu: prepareDetailedColumn('gpu'),\n resource_detailed_user_slots: prepareDetailedColumn('user_slots'),\n\n resource_limit_cpu: prepareLimitColumn('cpu'),\n resource_limit_memory: prepareLimitColumn('user_memory'),\n resource_limit_gpu: prepareLimitColumn('gpu'),\n resource_limit_user_slots: prepareLimitColumn('user_slots'),\n\n min_resources_cpu: prepareMinResourcesColumn('cpu'),\n min_resources_memory: prepareMinResourcesColumn('user_memory'),\n min_resources_gpu: prepareMinResourcesColumn('gpu'),\n min_resources_user_slots: prepareMinResourcesColumn('user_slots'),\n\n abs_guaranteed_cpu: prepareAbsGuaranteedColumn('cpu'),\n abs_guaranteed_memory: prepareAbsGuaranteedColumn('user_memory'),\n abs_guaranteed_gpu: prepareAbsGuaranteedColumn('gpu'),\n abs_guaranteed_user_slots: prepareAbsGuaranteedColumn('user_slots'),\n\n rel_guaranteed_cpu: prepareRelGuaranteedColumn('cpu'),\n rel_guaranteed_memory: prepareRelGuaranteedColumn('user_memory'),\n rel_guaranteed_gpu: prepareRelGuaranteedColumn('gpu'),\n rel_guaranteed_user_slots: prepareRelGuaranteedColumn('user_slots'),\n\n abs_usage_cpu: prepareAbsUsageColumn('cpu'),\n abs_usage_memory: prepareAbsUsageColumn('user_memory'),\n abs_usage_gpu: prepareAbsUsageColumn('gpu'),\n abs_usage_user_slots: prepareAbsUsageColumn('user_slots'),\n\n abs_demand_cpu: prepareAbsDemandColumn('cpu'),\n abs_demand_memory: prepareAbsDemandColumn('user_memory'),\n abs_demand_gpu: prepareAbsDemandColumn('gpu'),\n abs_demand_user_slots: prepareAbsDemandColumn('user_slots'),\n\n rel_usage_cpu: prepareRelUsageColumn('cpu'),\n rel_usage_memory: prepareRelUsageColumn('user_memory'),\n rel_usage_gpu: prepareRelUsageColumn('gpu'),\n rel_usage_user_slots: prepareRelUsageColumn('user_slots'),\n\n guaranteed_usage_cpu: prepareGuaranteedUsageColumn('cpu'),\n guaranteed_usage_memory: prepareGuaranteedUsageColumn('user_memory'),\n guaranteed_usage_gpu: prepareGuaranteedUsageColumn('gpu'),\n guaranteed_usage_user_slots: prepareGuaranteedUsageColumn('user_slots'),\n\n operation_overview: {\n get(item: PoolInfo) {\n return [item.operationCount, item.runningOperationCount];\n },\n caption: 'Operations',\n sort: true,\n align: 'right',\n },\n operation_count: {\n get(item: PoolInfo) {\n return item.operationCount;\n },\n sort: true,\n align: 'right',\n },\n max_operation_count: {\n get(item: PoolInfo) {\n return item.maxOperationCount;\n },\n sort: true,\n align: 'right',\n },\n operation_progress: {\n get(item: PoolInfo) {\n return item.operationCount! / item.maxOperationCount!;\n },\n text(item: PoolInfo) {\n return `${format.Number(item.operationCount)} / ${format.Number(\n item.maxOperationCount,\n )}`;\n },\n caption: 'Total operations (usage/limit)',\n sort: true,\n align: 'center',\n },\n running_operation_count: {\n get(item: PoolInfo) {\n return item.runningOperationCount;\n },\n sort: true,\n align: 'right',\n },\n max_running_operation_count: {\n get(item: PoolInfo) {\n return item.maxRunningOperationCount;\n },\n sort: true,\n align: 'right',\n },\n running_operation_progress: {\n get(item: PoolInfo) {\n return item.runningOperationCount! / item.maxRunningOperationCount!;\n },\n text(item: PoolInfo) {\n return `${format.Number(item.runningOperationCount)} / ${format.Number(\n item.maxRunningOperationCount,\n )}`;\n },\n caption: 'Running operations (usage/limit)',\n sort: true,\n align: 'center',\n },\n\n integral_type: {\n get(item: PoolInfo) {\n const res = item.integralType;\n return res === 'none' ? undefined : res;\n },\n caption: 'Guarantee type',\n sort: true,\n align: 'right',\n sortWithUndefined: true,\n },\n burst_cpu: {\n get(item: PoolInfo) {\n return item.burstCPU;\n },\n sort(item: PoolInfo) {\n const res = item.burstCPU;\n return isNaN(res) ? undefined : res;\n },\n caption: 'Burst CPU',\n sortWithUndefined: true,\n align: 'right',\n },\n flow_cpu: {\n get(item: PoolInfo) {\n return item.flowCPU;\n },\n sort(item: PoolInfo) {\n const res = item.flowCPU;\n return isNaN(res) ? undefined : res;\n },\n caption: 'Flow CPU',\n sortWithUndefined: true,\n align: 'right',\n },\n children_burst_cpu: {\n get(item: PoolInfo) {\n const res = item.childrenBurstCPU;\n return !res ? undefined : res;\n },\n caption: \"Children's burst CPU\",\n sort: true,\n sortWithUndefined: true,\n align: 'right',\n },\n children_flow_cpu: {\n get(item: PoolInfo) {\n const res = item.childrenFlowCPU;\n return !res ? undefined : res;\n },\n caption: \"Children's flow CPU\",\n sort: true,\n sortWithUndefined: true,\n align: 'right',\n },\n accumulated: {\n get(item: PoolInfo) {\n return item.accumulated;\n },\n caption: 'Acc ratio volume',\n sortWithUndefined: true,\n sort: true,\n align: 'right',\n },\n accumulated_cpu: {\n get(item: PoolInfo) {\n return item.accumulatedCpu;\n },\n caption: 'Acc CPU volume',\n sort: true,\n align: 'right',\n },\n burst_duration: {\n get(item: PoolInfo) {\n return item.burstDuration;\n },\n caption: 'Est burst usage duration ',\n sort: true,\n sortWithUndefined: true,\n align: 'right',\n },\n\n actions: {\n caption: '',\n align: 'left',\n },\n};\n","import React from 'react';\nimport SchedulingOperationsLoader from '../../pages/scheduling/Content/tabs/ScherdulingOperataionsLoader/SchedulingOperationsLoader';\n\nexport const poolsTableItems = {\n type: {\n caption: '',\n align: 'center',\n },\n name: {\n sort: true,\n caption: 'Pool / Operation',\n captionTail: <SchedulingOperationsLoader />,\n align: 'left',\n get(item) {\n return item.name;\n },\n },\n mode: {\n sort: true,\n align: 'center',\n get(item) {\n return item.mode;\n },\n },\n FI: {\n sort: true,\n align: 'right',\n title: 'FIFO Index',\n get(item) {\n return item.fifoIndex;\n },\n },\n weight: {\n sort: true,\n align: 'right',\n title: 'Effective weight',\n get(item) {\n return item.weight;\n },\n },\n operation_overview: {\n caption: 'Operations',\n sort: true,\n align: 'center',\n get(item) {\n return [item.operationCount, item.runningOperationCount];\n },\n },\n dominant_resource: {\n sort(item) {\n return item.dominantResource;\n },\n caption: 'Dom. res.',\n title: 'Dominant Resource',\n align: 'left',\n },\n min_share: {\n caption: 'Guarantee',\n title: 'Effective dominant strong guarantee share',\n sort(item) {\n return item.minShareRatio;\n },\n align: 'right',\n },\n fair_share: {\n sort: true,\n title: 'Dominant fair share',\n align: 'right',\n get(item) {\n return item.fairShareRatio;\n },\n },\n usage: {\n sort: true,\n title: 'Dominant usage share',\n align: 'right',\n get(item) {\n return item.usageRatio;\n },\n },\n demand: {\n sort: true,\n title: 'Dominant demand share',\n align: 'right',\n get(item) {\n return item.demandRatio;\n },\n },\n fair_share_usage: {\n sort: true,\n caption: 'Usage / Fair share',\n align: 'center',\n sortWithUndefined: true,\n get(item) {\n const {fairShareRatio, usageRatio} = item;\n const x = Number(usageRatio) / Number(fairShareRatio);\n if (isNaN(usageRatio) || isNaN(fairShareRatio) || isNaN(x)) {\n return undefined;\n }\n return x;\n },\n },\n actions: {\n caption: '',\n align: 'left',\n },\n};\n","import {ROOT_POOL_NAME} from '../../constants/scheduling';\nimport type {PoolInfo} from '../../store/selectors/scheduling/scheduling-pools';\n\nexport function isAbcPoolName(name?: string) {\n return name?.startsWith('abc:');\n}\n\nexport function isTopLevelPool(pool?: PoolInfo) {\n const {parent} = pool || {};\n\n return parent === ROOT_POOL_NAME;\n}\n","import find_ from 'lodash/find';\nimport indexOf_ from 'lodash/indexOf';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport ypath from '../../common/thor/ypath';\nimport {ROOT_POOL_NAME} from '../../constants/scheduling';\nimport type {OperationInfo, PoolInfo} from '../../store/selectors/scheduling/scheduling-pools';\nimport {attachTreeLeaves, prepareTree} from '../../common/hammer/tree-list';\n\nfunction getPool(pools: Array<PoolInfo>, name: string) {\n return find_(pools, (pool) => pool.name === name);\n}\n\nexport function prepareTrees(trees: Array<unknown>) {\n return map_(trees, (tree) => ypath.getValue(tree, '')).sort();\n}\n\nexport function prepareCurrentTree(defaultTree: unknown, trees: Array<string>, tree: string) {\n return tree !== '' && trees.indexOf(tree) !== -1\n ? tree\n : ypath.getValue(defaultTree, '') || trees[0];\n}\n\nexport function preparePools(\n pools: Record<string, PoolInfo>,\n operations: Record<string, OperationInfo>,\n) {\n const treeNodesMap = prepareTree<PoolInfo, OperationInfo>(pools, (entry: PoolInfo) =>\n ypath.getValue(entry, '/parent'),\n );\n\n attachTreeLeaves(treeNodesMap, operations, (operation: OperationInfo) =>\n ypath.getValue(operation, '/pool'),\n );\n\n return map_(treeNodesMap);\n}\n\nexport function computePathItems(pools: Array<PoolInfo>, name: string) {\n let pool: PoolInfo | undefined =\n getPool(pools, name) || ({parent: ROOT_POOL_NAME, name} as PoolInfo);\n const pathItems = [];\n\n // Unknown pool or dynamically created pool\n while (pool) {\n pathItems.unshift(pool.name);\n\n pool = getPool(pools, pool.parent);\n }\n\n return pathItems;\n}\n\nexport function computePoolPath(pool: PoolInfo, pools: Array<PoolInfo>) {\n const partitions = [pool.name];\n let parent: string | undefined = pool.parent;\n\n while (parent && parent !== ROOT_POOL_NAME) {\n // eslint-disable-next-line @typescript-eslint/no-loop-func\n const parentPool = find_(pools, (item) => item.name === parent);\n partitions.unshift(parentPool?.name!);\n parent = parentPool?.parent;\n }\n\n return partitions.join('/');\n}\n\n/* eslint-disable prefer-const */\nexport function flattenAttributes(obj: any) {\n const toReturn: any = {};\n const object = ypath.getValue(obj);\n\n for (let i in object) {\n if (!Object.hasOwnProperty.call(object, i)) {\n continue;\n }\n\n const innerObject = ypath.getValue(object[i]);\n if (\n typeof innerObject === 'object' &&\n !Object.is(innerObject, null) &&\n Object.keys(innerObject).length > 0\n ) {\n toReturn[i] = object[i];\n\n const flatObject = flattenAttributes(object[i]);\n for (let x in flatObject) {\n if (!Object.hasOwnProperty.call(flatObject, x)) {\n continue;\n }\n\n toReturn[x] = flatObject[x];\n }\n } else {\n toReturn[i] = object[i];\n }\n }\n\n return toReturn;\n}\n\nfunction getResourceLimit(pool: PoolInfo | undefined, limitKey: string): number | '' {\n const value = Number(ypath.getValue(pool, `/cypressAttributes/resource_limits/${limitKey}`));\n return isNaN(value) ? '' : value;\n}\n\nfunction prepareValueDetails(pool: PoolInfo | undefined, path: string) {\n if (!pool) {\n return {};\n }\n\n const value = Number(ypath.getValue(pool, path));\n const childrenSum = prepareMinGuaranteed(pool, path);\n\n return {\n value: isNaN(value) ? undefined : value,\n childrenSum: isNaN(childrenSum!) ? undefined : childrenSum,\n };\n}\n\nfunction prepareMinGuaranteed(pool?: PoolInfo, path = '') {\n const res = reduce_(\n pool?.children,\n (sum, item) => {\n const tmp = Number(ypath.getValue(item, path) || 0);\n return isNaN(tmp) ? sum : tmp + firstValidNumber(sum, 0)!;\n },\n NaN,\n );\n return isNaN(res) ? undefined : res;\n}\n\nfunction firstValidNumber(...args: number[]) {\n for (let i = 0; i < args.length; ++i) {\n if (!isNaN(args[i])) {\n return args[i];\n }\n }\n return undefined;\n}\n\nexport const INTEGRAL_GUARANTEES_PREFIX = 'integral_guarantees/';\n\nexport const POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR = {\n guaranteeType: INTEGRAL_GUARANTEES_PREFIX + 'guarantee_type',\n burstCpu: INTEGRAL_GUARANTEES_PREFIX + 'burst_guarantee_resources/cpu',\n burstRam: INTEGRAL_GUARANTEES_PREFIX + 'burst_guarantee_resources/memory',\n burstGpu: INTEGRAL_GUARANTEES_PREFIX + 'burst_guarantee_resources/gpu',\n flowCpu: INTEGRAL_GUARANTEES_PREFIX + 'resource_flow/cpu',\n flowRam: INTEGRAL_GUARANTEES_PREFIX + 'resource_flow/memory',\n flowGpu: INTEGRAL_GUARANTEES_PREFIX + 'resource_flow/gpu',\n};\n\nexport const POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE = {\n cpuStrong: 'strong_guarantee_resources/cpu',\n gpuStrong: 'strong_guarantee_resources/gpu',\n memoryStrong: 'strong_guarantee_resources/memory',\n //userSlotsStrong: 'strong_guarantee_resources/user_slots',\n};\n\nexport const POOL_GENERAL_TYPE_TO_ATTRIBUTE = {\n maxOperationCount: 'max_operation_count',\n maxRunningOperationCount: 'max_running_operation_count',\n};\n\nexport const POOL_RESOURCE_TYPE_TO_ATTRIBUTE = {\n ...POOL_GENERAL_TYPE_TO_ATTRIBUTE,\n ...POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE,\n ...POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR,\n};\n\nexport type PoolStrongResourceType = keyof typeof POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE;\nexport type PoolIntegralResourceType = keyof typeof POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR;\nexport type PoolGeneralResourceType = keyof typeof POOL_GENERAL_TYPE_TO_ATTRIBUTE;\nexport type PoolResourceType = keyof typeof POOL_RESOURCE_TYPE_TO_ATTRIBUTE;\n\nexport function getPoolResourceInfo(pool: PoolInfo, type: PoolResourceType) {\n const path = '/cypressAttributes/' + POOL_RESOURCE_TYPE_TO_ATTRIBUTE[type];\n return prepareValueDetails(pool, path);\n}\n\nexport interface InitialPoolResourceInfo {\n limit?: number;\n source?: string;\n}\n\nexport function getPoolResourceInitialValue(\n pool: PoolInfo | undefined,\n type: PoolResourceType,\n allowSource: boolean,\n): InitialPoolResourceInfo {\n if (!pool) {\n return {};\n }\n const {value} = getPoolResourceInfo(pool, type);\n return {\n limit: value,\n source: allowSource ? pool.parent : undefined,\n };\n}\n\nexport function getInitialValues(editItem: PoolInfo | undefined, allowedSources: Array<string>) {\n const slug = ypath.getValue(editItem, '/abc/slug');\n\n const allowSource = -1 !== indexOf_(allowedSources, editItem?.parent);\n\n return {\n general: {\n name: editItem?.name,\n abcService: slug\n ? {\n key: slug,\n value: slug,\n title: ypath.getValue(editItem, '/abc/name'),\n }\n : undefined,\n parent: editItem?.parent,\n mode: editItem?.mode,\n weight: ypath.getNumber(editItem, '/cypressAttributes/weight'),\n maxOperationCount: Object.assign(\n getPoolResourceInitialValue(editItem, 'maxOperationCount', allowSource),\n {source: undefined},\n ),\n maxRunningOperationCount: Object.assign(\n getPoolResourceInitialValue(editItem, 'maxRunningOperationCount', allowSource),\n {source: undefined},\n ),\n },\n resourceGuarantee: {\n cpuStrong: getPoolResourceInitialValue(editItem, 'cpuStrong', allowSource),\n gpuStrong: getPoolResourceInitialValue(editItem, 'gpuStrong', allowSource),\n memoryStrong: getPoolResourceInitialValue(editItem, 'memoryStrong', allowSource),\n //userSlotsStrong: getPoolResourceInitialValue(editItem, 'userSlotsStrong', allowSource),\n },\n integralGuarantee: {\n guaranteeType:\n ypath.getValue(\n editItem,\n `/cypressAttributes/${POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR.guaranteeType}`,\n ) || 'none',\n burstCpu: getPoolResourceInitialValue(editItem, 'burstCpu', allowSource),\n burstRam: getPoolResourceInitialValue(editItem, 'burstRam', allowSource),\n burstGpu: getPoolResourceInitialValue(editItem, 'burstGpu', allowSource),\n flowCpu: getPoolResourceInitialValue(editItem, 'flowCpu', allowSource),\n flowRam: getPoolResourceInitialValue(editItem, 'flowRam', allowSource),\n flowGpu: getPoolResourceInitialValue(editItem, 'flowGpu', allowSource),\n },\n resourceLimits: {\n cpu: getResourceLimit(editItem, 'cpu'),\n gpu: getResourceLimit(editItem, 'gpu'),\n memory: getResourceLimit(editItem, 'memory'),\n userSlots: getResourceLimit(editItem, 'user_slots'),\n },\n otherSettings: {\n forbidImmediateOperations: ypath.getBoolean(editItem, '/forbidImmediateOperations'),\n fifoSortParams: ypath.getValue(editItem, '/fifoSortParams'),\n createEphemeralSubpools: ypath.getBoolean(editItem, '/createEphemeralSubpools'),\n },\n };\n}\n","export function isImageTag(value: string) {\n return /image\\/.*/.test(value);\n}\n\nexport function isVideoTag(value: string) {\n return /video\\/.*/.test(value);\n}\n\nexport function isMediaTag(value: string) {\n return isImageTag(value) || isVideoTag(value);\n}\n","import { I18N } from '@gravity-ui/i18n';\nimport en from './keysets/en.json';\nimport ru from './keysets/ru.json';\nconst i18nFactory = new I18N();\nconst EN = 'en';\nconst RU = 'ru';\ni18nFactory.registerKeysets(EN, en);\ni18nFactory.registerKeysets(RU, ru);\nconst i18n = i18nFactory.i18n.bind(i18nFactory);\nexport { i18nFactory, i18n };\n","export const CHARTKIT_ERROR_CODE = {\n NO_DATA: 'ERR.CK.NO_DATA',\n INVALID_DATA: 'ERR.CK.INVALID_DATA',\n UNKNOWN: 'ERR.CK.UNKNOWN_ERROR',\n UNKNOWN_PLUGIN: 'ERR.CK.UNKNOWN_PLUGIN',\n TOO_MANY_LINES: 'ERR.CK.TOO_MANY_LINES',\n};\nexport class ChartKitError extends Error {\n constructor({ originalError, message, code = CHARTKIT_ERROR_CODE.UNKNOWN, } = {}) {\n super(message);\n this.isCustomError = true;\n this.code = code;\n if (originalError) {\n this.name = originalError.name;\n this.stack = originalError.stack;\n }\n }\n}\nexport const isChartKitError = (error) => {\n return error instanceof Error && 'isCustomError' in error;\n};\n","import isObject from 'lodash/isObject';\nimport mergeWith from 'lodash/mergeWith';\n// @ts-ignore\nexport function mergeSettingStrategy(objValue, srcValue, key) {\n if (key === 'plugins') {\n const currentPlugins = [...objValue];\n const newPlugins = [...srcValue];\n // modify existing plugins\n let newSettingsPlugins = currentPlugins.map((currentPlugin) => {\n const newPluginIndex = newPlugins.findIndex(({ type }) => type === currentPlugin.type);\n if (newPluginIndex !== -1) {\n const newPlugin = newPlugins[newPluginIndex];\n newPlugins.splice(newPluginIndex, 1);\n return {\n type: currentPlugin.type,\n renderer: newPlugin.renderer,\n };\n }\n return currentPlugin;\n });\n // add new plugins if it exist after modified\n if (newPlugins.length > 0) {\n newSettingsPlugins = [...newSettingsPlugins, ...newPlugins];\n }\n return newSettingsPlugins;\n }\n if (isObject(objValue)) {\n return mergeWith(objValue, srcValue, mergeSettingStrategy);\n }\n return srcValue;\n}\n","import { configure } from '@gravity-ui/uikit';\nimport get from 'lodash/get';\nimport mergeWith from 'lodash/mergeWith';\nimport { i18nFactory } from '../../i18n';\nimport { EventEmitter } from './eventEmitter';\nimport { mergeSettingStrategy } from './mergeSettingStrategy';\nexport const settingsEventEmitter = new EventEmitter();\nconst removeUndefinedValues = (data) => {\n return Object.entries(data).reduce((acc, [key, value]) => {\n if (typeof value !== 'undefined') {\n acc[key] = value;\n }\n return acc;\n }, {});\n};\nconst updateLang = (lang) => {\n configure({ lang });\n i18nFactory.setLang(lang);\n};\nclass ChartKitSettings {\n constructor() {\n this.settings = {\n plugins: [],\n lang: 'en',\n };\n updateLang(this.get('lang'));\n }\n get(key) {\n return get(this.settings, key);\n }\n set(updates) {\n const filteredUpdates = removeUndefinedValues(updates);\n this.settings = mergeWith(this.settings, filteredUpdates, mergeSettingStrategy);\n if (filteredUpdates.lang) {\n const lang = filteredUpdates.lang || this.get('lang');\n updateLang(lang);\n settingsEventEmitter.dispatch('change-lang', lang);\n }\n }\n}\nexport const settings = new ChartKitSettings();\n","export class EventEmitter {\n constructor() {\n this.events = {};\n }\n on(type, event) {\n if (this.events[type]) {\n this.events[type].push(event);\n }\n else {\n this.events[type] = [event];\n }\n }\n off(type, eventId) {\n if (this.events[type]) {\n this.events[type] = this.events[type].filter(({ id }) => id !== eventId);\n }\n }\n dispatch(type, args) {\n if (this.events[type]) {\n this.events[type].forEach(({ action }) => {\n action(args);\n });\n }\n }\n}\n","import { withNaming } from '@bem-react/classname';\nexport const NAMESPACE = 'chartkit-';\nexport const cn = withNaming({ e: '__', m: '_' });\nexport const block = withNaming({ n: NAMESPACE, e: '__', m: '_' });\n","export const randomString = (length, chars) => {\n let result = '';\n for (let i = length; i > 0; --i) {\n result += chars[Math.floor(Math.random() * chars.length)];\n }\n return result;\n};\nexport const getRandomCKId = () => `ck.${randomString(10, '0123456789abcdefghijklmnopqrstuvwxyz')}`;\n","import * as React from 'react';\nconst ChevronLeft = (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.53 2.97a.75.75 0 0 1 0 1.06L6.56 8l3.97 3.97a.75.75 0 1 1-1.06 1.06l-4.5-4.5a.75.75 0 0 1 0-1.06l4.5-4.5a.75.75 0 0 1 1.06 0Z\", clipRule: \"evenodd\" })));\nexport default ChevronLeft;\n","import * as React from 'react';\nconst ChevronRight = (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.47 13.03a.75.75 0 0 1 0-1.06L9.44 8 5.47 4.03a.75.75 0 0 1 1.06-1.06l4.5 4.5a.75.75 0 0 1 0 1.06l-4.5 4.5a.75.75 0 0 1-1.06 0Z\", clipRule: \"evenodd\" })));\nexport default ChevronRight;\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 3ZM9.5 8a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0Zm5 0a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0Z\", clipRule: \"evenodd\" })));\nexport default Ellipsis;\n","import * as React from 'react';\nexport const AlertContext = React.createContext(null);\n","'use client';\nimport * as React from 'react';\nimport { AlertContext } from './AlertContext';\nexport const useAlertContext = () => {\n const context = React.useContext(AlertContext);\n if (!context)\n throw new Error('Alert: `useAlertContext` hook is used out of \"AlertContext\"');\n return context;\n};\n","'use client';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Button } from '../Button';\nimport { useAlertContext } from './useAlertContext';\nexport const AlertAction = (props) => {\n const { view } = useAlertContext();\n return _jsx(Button, Object.assign({ view: view === 'filled' ? 'normal-contrast' : undefined }, props));\n};\n","import { block } from '../utils/cn';\nimport './Alert.css';\nexport const DEFAULT_ICON_SIZE = 18;\nexport const bAlert = block('alert');\n","'use client';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { AlertContext } from './AlertContext';\nexport const AlertContextProvider = ({ layout, view, children }) => {\n return _jsx(AlertContext.Provider, { value: { layout, view }, children: children });\n};\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { CircleCheck, CircleCheckFill, CircleInfo, CircleInfoFill, CircleXmark, CircleXmarkFill, Thunderbolt, ThunderboltFill, TriangleExclamation, TriangleExclamationFill, } from '@gravity-ui/icons';\nimport { Icon } from '../Icon';\nimport { colorText } from '../Text/colorText/colorText';\nimport { DEFAULT_ICON_SIZE, bAlert } from './constants';\nconst typeToIcon = {\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};\nexport const AlertIcon = ({ className, theme, view = 'filled', size = DEFAULT_ICON_SIZE, }) => {\n const iconByTheme = typeToIcon[theme];\n if (!iconByTheme) {\n return null;\n }\n let color;\n if (theme === 'success') {\n color = 'positive';\n }\n else if (theme !== 'normal') {\n color = theme;\n }\n return (_jsx(\"div\", { className: bAlert('icon', colorText({ color }, className)), children: _jsx(Icon, { data: iconByTheme[view], size: size }) }));\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 14ZM6.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.94 6.53 5.47Z\", 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 0ZM15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0ZM6.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.94 6.53 5.47Z\", 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 14Zm1-9.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM8 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.75Z\", 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 14Zm3.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-.08l3-4Z\", 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.836 2.244c.962-1.665 3.366-1.665 4.328 0l4.917 8.505c.964 1.666-.239 3.751-2.164 3.751H3.083c-1.925 0-3.128-2.085-2.164-3.751l4.917-8.505ZM8 5a.75.75 0 0 1 .75.75v2a.75.75 0 1 1-1.5 0v-2A.75.75 0 0 1 8 5Zm1 5.75a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\", 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.216 2.216 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.414Z\" })));\nexport default ThunderboltFill;\n","import { addComponentKeysets } from '../../../i18n';\nimport en from './en.json';\nimport ru from './ru.json';\nconst COMPONENT = 'Alert';\nexport default addComponentKeysets({ en, ru }, COMPONENT);\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { Xmark } from '@gravity-ui/icons';\nimport { Button } from '../Button';\nimport { Card } from '../Card';\nimport { Icon } from '../Icon';\nimport { colorText } from '../Text';\nimport { Flex, spacing } from '../layout';\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';\nexport const Alert = (props) => {\n const { theme = 'normal', view = 'filled', layout = 'vertical', message, className, corners, style, onClose, align, qa, } = props;\n return (_jsx(AlertContextProvider, { layout: layout, view: view, children: _jsx(Card, { style: style, className: bAlert({ corners }, spacing({ py: 4, px: 5 }, className)), theme: theme, view: view, qa: qa, children: _jsxs(Flex, { gap: \"3\", alignItems: align, children: [typeof props.icon === 'undefined' ? (_jsx(Alert.Icon, { theme: theme, view: view })) : (props.icon // ability to pass `null` as `icon` prop value\n ), _jsxs(Flex, { direction: layout === 'vertical' ? 'column' : 'row', gap: \"5\", grow: true, children: [_jsx(Flex, { gap: \"2\", grow: true, className: bAlert('text-content'), children: _jsxs(Flex, { direction: \"column\", gap: \"1\", grow: true, justifyContent: align, children: [typeof props.title === 'string' ? (_jsx(Alert.Title, { text: props.title })) : (props.title), message] }) }), Array.isArray(props.actions) ? (_jsx(Alert.Actions, { items: props.actions })) : (props.actions)] }), onClose && (_jsx(Button, { view: \"flat\", className: bAlert('close-btn'), onClick: onClose, extraProps: {\n 'aria-label': i18n('label_close'),\n }, children: _jsx(Icon, { data: Xmark, size: DEFAULT_ICON_SIZE, className: colorText({ color: 'secondary' }) }) }))] }) }) }));\n};\nAlert.Icon = AlertIcon;\nAlert.Title = AlertTitle;\nAlert.Actions = AlertActions;\nAlert.Action = AlertAction;\n","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Text } from '../Text';\nimport { bAlert } from './constants';\nexport const AlertTitle = ({ text, className }) => {\n return (_jsx(Text, { variant: \"subheader-2\", className: bAlert('title', className), children: text }));\n};\n","'use client';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { Flex } from '../layout';\nimport { AlertAction } from './AlertAction';\nimport { bAlert } from './constants';\nimport { useAlertContext } from './useAlertContext';\nexport const AlertActions = ({ items, children, className }) => {\n const { layout } = useAlertContext();\n return (_jsx(Flex, { className: bAlert('actions', { minContent: layout === 'horizontal' }, className), direction: \"row\", gap: \"3\", wrap: true, alignItems: layout === 'horizontal' ? 'center' : 'flex-start', children: (items === null || items === void 0 ? void 0 : items.map(({ handler, text }, i) => (_jsx(AlertAction, { onClick: handler, children: text }, i)))) || children }));\n};\n","import { block } from '../utils/cn';\nexport const cnDropdownMenu = block('dropdown-menu');\n","import * as React from 'react';\nexport const DropdownMenuContext = React.createContext({\n toggle() { },\n data: undefined,\n});\nDropdownMenuContext.displayName = 'DropdownMenu.Context';\n","export function moveBack(items, activeItemIndex, steps = 1, skip) {\n const newActiveItemIndex = (items.length + activeItemIndex - (steps % items.length)) % items.length;\n if (skip && skip(items[newActiveItemIndex])) {\n return moveBack(items, newActiveItemIndex, 1, skip);\n }\n return newActiveItemIndex;\n}\n","export function moveForward(items, activeItemIndex, steps = 1, skip) {\n const newActiveItemIndex = (activeItemIndex + steps) % items.length;\n if (skip && skip(items[newActiveItemIndex])) {\n return moveForward(items, newActiveItemIndex, 1, skip);\n }\n return newActiveItemIndex;\n}\n","'use client';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from 'react';\nconst rootMenuPath = [];\nexport const DropdownMenuNavigationContext = React.createContext({\n activeMenuPath: rootMenuPath,\n setActiveMenuPath: () => { },\n anchorRef: { current: null },\n});\nexport const DropdownMenuNavigationContextProvider = ({ anchorRef, children, disabled, }) => {\n const [activeMenuPath, setActiveMenuPath] = React.useState(rootMenuPath);\n React.useEffect(() => {\n if (disabled) {\n setActiveMenuPath(rootMenuPath);\n }\n }, [disabled]);\n const contextValue = React.useMemo(() => ({\n activeMenuPath,\n setActiveMenuPath,\n anchorRef,\n }), [activeMenuPath, anchorRef]);\n return (_jsx(DropdownMenuNavigationContext.Provider, { value: contextValue, children: children }));\n};\n","export const dropdownMenuSeparator = { text: '', action: () => { }, path: [] };\n","import { dropdownMenuSeparator } from '../constants';\nexport function isSeparator(item) {\n return item === dropdownMenuSeparator;\n}\n","import { isSeparator } from './isSeparator';\nexport function shouldSkipItemNavigation(item) {\n return item.disabled || isSeparator(item);\n}\n","export function stringifyNavigationPath(path) {\n var _a;\n return (_a = path === null || path === void 0 ? void 0 : path.join(' ')) !== null && _a !== void 0 ? _a : '';\n}\n","'use client';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from 'react';\nimport { useListNavigation } from '../../hooks';\nimport { Menu } from '../Menu';\nimport { Popup } from '../Popup';\nimport { cnDropdownMenu } from './DropdownMenu.classname';\nimport { DropdownMenuContext } from './DropdownMenuContext';\nimport { DropdownMenuItem } from './DropdownMenuItem';\nimport { DropdownMenuNavigationContext } from './DropdownMenuNavigationContext';\nimport { isSeparator } from './utils/isSeparator';\nimport { shouldSkipItemNavigation } from './utils/shouldSkipItemNavigation';\nimport { stringifyNavigationPath } from './utils/stringifyNavigationPath';\nexport const DropdownMenuPopup = ({ items, open, anchorRef, onClose, size, menuProps, children, popupProps, path = [], }) => {\n const { toggle, data } = React.useContext(DropdownMenuContext);\n const { activeMenuPath, setActiveMenuPath, anchorRef: navigationAnchorRef, } = React.useContext(DropdownMenuNavigationContext);\n const isSubmenu = path.length > 0;\n const activateParent = React.useCallback(() => {\n setActiveMenuPath(path.slice(0, path.length - 1));\n }, [setActiveMenuPath, path]);\n const handleMouseEnter = React.useCallback((event) => {\n var _a;\n setActiveMenuPath(path);\n (_a = popupProps === null || popupProps === void 0 ? void 0 : popupProps.onMouseEnter) === null || _a === void 0 ? void 0 : _a.call(popupProps, event);\n }, [path, popupProps, setActiveMenuPath]);\n const handleMouseLeave = React.useCallback((event) => {\n var _a;\n activateParent();\n (_a = popupProps === null || popupProps === void 0 ? void 0 : popupProps.onMouseLeave) === null || _a === void 0 ? void 0 : _a.call(popupProps, event);\n }, [activateParent, popupProps]);\n const handleSelect = React.useCallback((activeItem, event) => {\n var _a;\n if (activeItem.items && activeItem.path) {\n setActiveMenuPath(activeItem.path);\n }\n else {\n (_a = activeItem.action) === null || _a === void 0 ? void 0 : _a.call(activeItem, event, data);\n toggle(false);\n }\n }, [data, setActiveMenuPath, toggle]);\n const handleKeydown = React.useCallback((activeItemIndex, event) => {\n switch (event.key) {\n case 'Escape': {\n if (isSubmenu) {\n event.stopPropagation();\n activateParent === null || activateParent === void 0 ? void 0 : activateParent();\n }\n return false;\n }\n case 'Enter':\n case ' ': {\n const activeItem = items[activeItemIndex];\n const isSubmenuToggleActive = activeItem === null || activeItem === void 0 ? void 0 : activeItem.items;\n if (isSubmenu || isSubmenuToggleActive) {\n event.stopPropagation();\n event.preventDefault();\n }\n if (activeItem) {\n handleSelect(activeItem, event);\n }\n return false;\n }\n }\n return true;\n }, [activateParent, handleSelect, isSubmenu, items]);\n const isNavigationActive = open && stringifyNavigationPath(path) === stringifyNavigationPath(activeMenuPath);\n const { activeItemIndex, setActiveItemIndex, reset: resetNavigation, } = useListNavigation({\n items,\n skip: shouldSkipItemNavigation,\n anchorRef: navigationAnchorRef,\n onAnchorKeyDown: handleKeydown,\n disabled: !isNavigationActive,\n initialValue: isSubmenu ? 0 : -1,\n });\n React.useEffect(() => {\n if (!open) {\n resetNavigation();\n }\n }, [open, resetNavigation]);\n return (_jsx(Popup, Object.assign({ open: open, anchorRef: anchorRef, onClose: onClose }, popupProps, { onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, children: children || (_jsx(Menu, Object.assign({ className: cnDropdownMenu('menu'), size: size }, menuProps, { children: items.map((item, index) => {\n var _a;\n const isActive = isNavigationActive && activeItemIndex === index;\n const activate = () => setActiveItemIndex(index);\n const isActiveParent = open &&\n !isActive &&\n activeMenuPath.length !== 0 &&\n stringifyNavigationPath(item.path) ===\n stringifyNavigationPath(activeMenuPath.slice(0, item.path.length));\n const extraProps = Object.assign(Object.assign({}, item.extraProps), { onMouseEnter: activate });\n return (_jsx(DropdownMenuItem, Object.assign({ className: cnDropdownMenu('menu-item', {\n separator: isSeparator(item),\n 'active-parent': isActiveParent,\n 'with-submenu': Boolean((_a = item.items) === null || _a === void 0 ? void 0 : _a.length),\n }, item.className), selected: isActive, popupProps: popupProps, closeMenu: onClose }, item, { extraProps: extraProps }), index));\n }) }))) })));\n};\n","import * as React from 'react';\nimport { moveBack } from './moveBack';\nimport { moveForward } from './moveForward';\nexport function useListNavigation({ items, skip, pageSize, processHomeKey = true, processEndKey = true, anchorRef, disabled = false, initialValue = -1, onAnchorKeyDown, }) {\n const [activeItemIndex, setActiveItemIndex] = React.useState(initialValue);\n const reset = React.useCallback(() => {\n setActiveItemIndex(initialValue);\n }, [initialValue]);\n React.useEffect(() => {\n if (items) {\n reset();\n }\n }, [items, reset]);\n React.useLayoutEffect(() => {\n if (disabled) {\n return undefined;\n }\n const canNavigate = items.some((item) => !(skip === null || skip === void 0 ? void 0 : skip(item)));\n if (!canNavigate) {\n return undefined;\n }\n const anchor = anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current;\n if (!anchor) {\n return undefined;\n }\n const handleKeyDown = (event) => {\n const shouldProcessKeydown = onAnchorKeyDown === null || onAnchorKeyDown === void 0 ? void 0 : onAnchorKeyDown(activeItemIndex, event);\n if (shouldProcessKeydown === false) {\n return;\n }\n switch (event.key) {\n case 'ArrowDown': {\n event.preventDefault();\n // Go 1 step forward\n setActiveItemIndex((previousActiveItemIndex) => moveForward(items, previousActiveItemIndex, 1, skip));\n break;\n }\n case 'ArrowUp': {\n event.preventDefault();\n // Go 1 step back\n setActiveItemIndex((previousActiveItemIndex) => moveBack(items, previousActiveItemIndex, 1, skip));\n break;\n }\n case 'PageDown': {\n if (!pageSize) {\n return;\n }\n event.preventDefault();\n // Go pageSize steps forward\n setActiveItemIndex((previousActiveItemIndex) => moveForward(items, previousActiveItemIndex, pageSize, skip));\n break;\n }\n case 'PageUp': {\n if (!pageSize) {\n return;\n }\n event.preventDefault();\n // Go pageSize steps back\n setActiveItemIndex((previousActiveItemIndex) => moveBack(items, previousActiveItemIndex, pageSize, skip));\n break;\n }\n case 'Home': {\n if (!processHomeKey) {\n return;\n }\n event.preventDefault();\n // Go to the start of the list\n setActiveItemIndex((previousActiveItemIndex) => moveBack(items, previousActiveItemIndex, previousActiveItemIndex, skip));\n break;\n }\n case 'End': {\n if (!processEndKey) {\n return;\n }\n event.preventDefault();\n // Go to the end of the list\n setActiveItemIndex((previousActiveItemIndex) => moveBack(items, previousActiveItemIndex, previousActiveItemIndex + 1, skip));\n break;\n }\n }\n };\n anchor.addEventListener('keydown', handleKeyDown);\n return () => {\n anchor.removeEventListener('keydown', handleKeyDown);\n };\n }, [\n activeItemIndex,\n anchorRef,\n disabled,\n items,\n onAnchorKeyDown,\n pageSize,\n processEndKey,\n processHomeKey,\n skip,\n ]);\n return {\n activeItemIndex,\n setActiveItemIndex,\n reset,\n };\n}\n","export function isSubmenuOpen(path, activeMenuPath) {\n var _a;\n return (_a = path === null || path === void 0 ? void 0 : path.every((item, index) => item === (activeMenuPath === null || activeMenuPath === void 0 ? void 0 : activeMenuPath[index]))) !== null && _a !== void 0 ? _a : false;\n}\n","import * as React from 'react';\nimport { DropdownMenuNavigationContext } from '../DropdownMenuNavigationContext';\nimport { isSubmenuOpen } from '../utils/isSubmenuOpen';\nexport function useSubmenu({ items, path }) {\n const { activeMenuPath, setActiveMenuPath } = React.useContext(DropdownMenuNavigationContext);\n const hasSubmenu = Boolean(path) && Boolean(items === null || items === void 0 ? void 0 : items.length);\n const closeSubmenu = React.useCallback(() => {\n if (!path) {\n return;\n }\n setActiveMenuPath(path.slice(0, path.length - 1));\n }, [path, setActiveMenuPath]);\n const openSubmenu = React.useCallback(() => {\n if (!path) {\n return;\n }\n setActiveMenuPath(path);\n }, [path, setActiveMenuPath]);\n return {\n hasSubmenu,\n isSubmenuOpen: isSubmenuOpen(path, activeMenuPath),\n openSubmenu,\n closeSubmenu,\n };\n}\n","'use client';\nimport { __rest } from \"tslib\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from 'react';\nimport { ChevronLeft, ChevronRight } from '@gravity-ui/icons';\nimport { Icon } from '../Icon';\nimport { Menu } from '../Menu';\nimport { useDirection } from '../theme';\nimport { cnDropdownMenu } from './DropdownMenu.classname';\nimport { DropdownMenuContext } from './DropdownMenuContext';\nimport { DropdownMenuPopup } from './DropdownMenuPopup';\nimport { useSubmenu } from './hooks/useSubmenu';\nexport const DropdownMenuItem = (_a) => {\n var { text, action, items: subMenuItems, popupProps, closeMenu, children, path } = _a, props = __rest(_a, [\"text\", \"action\", \"items\", \"popupProps\", \"closeMenu\", \"children\", \"path\"]);\n const { toggle, data } = React.useContext(DropdownMenuContext);\n const menuItemRef = React.useRef(null);\n const direction = useDirection();\n const { hasSubmenu, isSubmenuOpen, closeSubmenu, openSubmenu } = useSubmenu({\n items: subMenuItems,\n path,\n });\n const handleCloseMenu = React.useCallback(() => {\n const close = () => {\n if (closeMenu) {\n closeMenu();\n }\n else {\n toggle(false);\n }\n };\n if (hasSubmenu) {\n closeSubmenu();\n // Wait for submenu to close\n requestAnimationFrame(close);\n }\n else {\n close();\n }\n }, [closeMenu, closeSubmenu, hasSubmenu, toggle]);\n const handleMenuItemClick = React.useCallback((event) => {\n if (hasSubmenu) {\n return;\n }\n action === null || action === void 0 ? void 0 : action(event, data);\n handleCloseMenu();\n }, [action, data, handleCloseMenu, hasSubmenu]);\n const extraProps = React.useMemo(() => {\n return Object.assign(Object.assign({}, props.extraProps), { onMouseEnter: (event) => {\n var _a, _b;\n (_b = (_a = props.extraProps) === null || _a === void 0 ? void 0 : _a.onMouseEnter) === null || _b === void 0 ? void 0 : _b.call(_a, event);\n if (hasSubmenu) {\n openSubmenu();\n }\n }, onMouseLeave: (event) => {\n var _a, _b;\n (_b = (_a = props.extraProps) === null || _a === void 0 ? void 0 : _a.onMouseLeave) === null || _b === void 0 ? void 0 : _b.call(_a, event);\n if (hasSubmenu) {\n closeSubmenu();\n }\n } });\n }, [props.extraProps, closeSubmenu, hasSubmenu, openSubmenu]);\n const subMenuPlacement = React.useMemo(() => (direction === 'rtl' ? ['left-start', 'right-start'] : ['right-start', 'left-start']), [direction]);\n const iconEnd = React.useMemo(() => hasSubmenu ? (_jsx(Icon, { data: direction === 'rtl' ? ChevronLeft : ChevronRight, size: 10, className: cnDropdownMenu('sub-menu-arrow') })) : (props.iconEnd), [hasSubmenu, direction, props.iconEnd]);\n return (_jsxs(React.Fragment, { children: [_jsx(Menu.Item, Object.assign({ ref: menuItemRef }, props, { extraProps: extraProps, onClick: handleMenuItemClick, iconEnd: iconEnd, children: text || children })), hasSubmenu && subMenuItems && (_jsx(DropdownMenuPopup, { popupProps: Object.assign(Object.assign({}, popupProps), { className: cnDropdownMenu('sub-menu', popupProps === null || popupProps === void 0 ? void 0 : popupProps.className), placement: subMenuPlacement }), items: subMenuItems, path: path, open: isSubmenuOpen, anchorRef: menuItemRef, onClose: handleCloseMenu }))] }));\n};\n","export function toItemList(items, separator, path = [], startIndex = 0) {\n const updatedItems = [];\n let addedGroup = false;\n let index = startIndex;\n for (const item of items) {\n if (Array.isArray(item)) {\n const groupItems = toItemList(item, separator, path, index);\n if (updatedItems.length !== 0) {\n updatedItems.push(separator);\n }\n updatedItems.push(...groupItems);\n index += groupItems.length;\n addedGroup = true;\n }\n else {\n if (item.hidden) {\n continue;\n }\n if (addedGroup) {\n updatedItems.push(separator);\n }\n const updatedItem = Object.assign(Object.assign({}, item), { path: [...path, index++] });\n if (item.items) {\n updatedItem.items = toItemList(item.items, separator, updatedItem.path);\n }\n updatedItems.push(updatedItem);\n addedGroup = false;\n }\n }\n return updatedItems;\n}\n","'use client';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from 'react';\nimport { Ellipsis } from '@gravity-ui/icons';\nimport { useActionHandlers } from '../../hooks/useActionHandlers';\nimport { Button } from '../Button';\nimport { Icon } from '../Icon';\nimport { cnDropdownMenu } from './DropdownMenu.classname';\nimport { DropdownMenuContext } from './DropdownMenuContext';\nimport { DropdownMenuItem as DropdownMenuItemComponent } from './DropdownMenuItem';\nimport { DropdownMenuNavigationContextProvider } from './DropdownMenuNavigationContext';\nimport { DropdownMenuPopup } from './DropdownMenuPopup';\nimport { dropdownMenuSeparator } from './constants';\nimport { usePopupVisibility } from './hooks/usePopupVisibility';\nimport { useScrollHandler } from './hooks/useScrollHandler';\nimport { toItemList } from './utils/toItemList';\nimport './DropdownMenu.css';\nconst DropdownMenu = ({ items = [], size = 'm', icon = _jsx(Icon, { data: Ellipsis }), open, onOpenToggle, hideOnScroll = true, data, disabled, switcher, renderSwitcher, switcherWrapperClassName, defaultSwitcherProps, defaultSwitcherClassName, onSwitcherClick, menuProps, popupProps, children, }) => {\n const anchorRef = React.useRef(null);\n const { isPopupShown, togglePopup, closePopup } = usePopupVisibility(open, onOpenToggle, disabled);\n useScrollHandler(closePopup, anchorRef, !isPopupShown || !hideOnScroll);\n const contextValue = React.useMemo(() => ({\n toggle: togglePopup,\n data,\n }), [data, togglePopup]);\n const itemsList = React.useMemo(() => toItemList(items, dropdownMenuSeparator), [items]);\n const handleSwitcherClick = React.useCallback((event) => {\n if (disabled) {\n return;\n }\n onSwitcherClick === null || onSwitcherClick === void 0 ? void 0 : onSwitcherClick(event);\n togglePopup();\n }, [disabled, onSwitcherClick, togglePopup]);\n const { onKeyDown: handleSwitcherKeyDown } = useActionHandlers(handleSwitcherClick);\n const switcherProps = React.useMemo(() => ({\n onClick: handleSwitcherClick,\n onKeyDown: handleSwitcherKeyDown,\n }), [handleSwitcherClick, handleSwitcherKeyDown]);\n return (_jsxs(DropdownMenuContext.Provider, { value: contextValue, children: [_jsx(\"div\", Object.assign({ ref: anchorRef, className: cnDropdownMenu('switcher-wrapper', switcherWrapperClassName) }, (renderSwitcher ? {} : switcherProps), { children: (renderSwitcher === null || renderSwitcher === void 0 ? void 0 : renderSwitcher(switcherProps)) || switcher || (_jsx(Button, Object.assign({ view: \"flat\", size: size }, defaultSwitcherProps, { className: cnDropdownMenu('switcher-button', defaultSwitcherClassName), disabled: disabled, children: icon }))) })), _jsx(DropdownMenuNavigationContextProvider, { anchorRef: anchorRef, disabled: !isPopupShown, children: _jsx(DropdownMenuPopup, { items: itemsList, open: isPopupShown, size: size, menuProps: menuProps, anchorRef: anchorRef, onClose: closePopup, popupProps: popupProps, children: children }) })] }));\n};\nconst DropdownMenuExport = Object.assign(DropdownMenu, { Item: DropdownMenuItemComponent });\nexport { DropdownMenuExport as DropdownMenu };\n","import * as React from 'react';\nimport { useConditionallyControlledState } from '../../../hooks/private';\nexport function usePopupVisibility(visible, onChangeVisibility, disabled) {\n const [isPopupShown, setPopupShown] = useConditionallyControlledState(visible, onChangeVisibility, false);\n const togglePopup = React.useCallback((open) => {\n setPopupShown((isShown) => {\n if (typeof open === 'boolean') {\n return open;\n }\n return !isShown;\n });\n }, [setPopupShown]);\n const closePopup = React.useCallback(() => {\n setPopupShown(false);\n }, [setPopupShown]);\n React.useEffect(() => {\n if (disabled && isPopupShown) {\n closePopup();\n }\n }, [closePopup, disabled, isPopupShown]);\n return {\n isPopupShown,\n togglePopup,\n closePopup,\n };\n}\n","import { useStateWithCallback } from '../useStateWithCallback';\nexport function useConditionallyControlledState(property, setProperty, initialState, isControlled = property !== undefined && setProperty !== undefined) {\n const state = useStateWithCallback((property || initialState), setProperty);\n if (isControlled) {\n return [property, setProperty];\n }\n return state;\n}\n","import * as React from 'react';\nimport { isFunction } from '../../../components/utils/typeCheckers';\nexport function useStateWithCallback(initialValue, callback) {\n const [state, setState] = React.useState(initialValue);\n const setWithCallback = React.useCallback((nextValue) => {\n if (isFunction(nextValue)) {\n setState((previousState) => {\n const newState = nextValue(previousState);\n callback === null || callback === void 0 ? void 0 : callback(newState);\n return newState;\n });\n }\n else {\n callback === null || callback === void 0 ? void 0 : callback(nextValue);\n setState(nextValue);\n }\n }, [callback]);\n return [state, setWithCallback];\n}\n","export const isFunction = (value) => typeof value === 'function';\n","import * as React from 'react';\nexport function useScrollHandler(onScroll, anchorRef, disabled) {\n React.useEffect(() => {\n if (disabled) {\n return undefined;\n }\n const handleScroll = (event) => {\n if (event.target.contains(anchorRef.current)) {\n onScroll(event);\n }\n };\n document.addEventListener('scroll', handleScroll, true);\n return () => {\n document.removeEventListener('scroll', handleScroll, true);\n };\n }, [anchorRef, onScroll, disabled]);\n}\n","import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport * as React from 'react';\nimport { useUniqId } from '../../hooks';\nimport { block } from '../utils/cn';\nconst b = block('menu');\nexport const MenuGroup = React.forwardRef(function MenuGroup({ label, children, style, className, qa }, ref) {\n const labelId = useUniqId();\n return (_jsx(\"li\", { ref: ref, className: b('list-group-item'), children: _jsxs(\"div\", { style: style, className: b('group', className), \"data-qa\": qa, children: [label && (_jsx(\"div\", { id: labelId, className: b('group-label'), children: label })), _jsx(\"ul\", { role: \"group\", \"aria-labelledby\": labelId, className: b('group-list'), children: children })] }) }));\n});\n","'use client';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from 'react';\nimport { useActionHandlers } from '../../hooks';\nimport { block } from '../utils/cn';\nimport { eventBroker } from '../utils/event-broker';\nconst b = block('menu');\nexport const MenuItem = React.forwardRef(function MenuItem({ icon, iconStart = icon, iconEnd, title, disabled, active, selected, href, target, rel, onClick, style, className, theme, extraProps, children, qa, }, ref) {\n const { onKeyDown } = useActionHandlers(onClick);\n const handleClickCapture = React.useCallback((event) => {\n eventBroker.publish({\n componentId: 'MenuItem',\n eventId: 'click',\n domEvent: event,\n });\n }, []);\n const defaultProps = {\n role: 'menuitem',\n onKeyDown: onClick && !disabled ? onKeyDown : undefined,\n };\n const commonProps = {\n title,\n onClick: disabled ? undefined : onClick,\n onClickCapture: disabled ? undefined : handleClickCapture,\n style,\n tabIndex: disabled ? -1 : 0,\n className: b('item', { disabled, active, selected, theme, interactive: Boolean(onClick) || Boolean(href) }, className),\n 'data-qa': qa,\n };\n const content = [\n iconStart && (_jsx(\"div\", { className: b('item-icon'), children: iconStart }, \"icon-start\")),\n _jsx(\"div\", { className: b('item-content'), children: children }, \"content\"),\n iconEnd && (_jsx(\"div\", { className: b('item-icon-end'), children: iconEnd }, 'icon-end')),\n ];\n let item;\n if (href) {\n item = (_jsx(\"a\", Object.assign({}, defaultProps, extraProps, commonProps, { href: href, target: target, rel: rel, children: content })));\n }\n else {\n item = (_jsx(\"div\", Object.assign({}, defaultProps, extraProps, commonProps, { children: content })));\n }\n return (_jsx(\"li\", { ref: ref, className: b('list-item'), children: item }));\n});\n","'use client';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from 'react';\nimport { block } from '../utils/cn';\nimport { MenuGroup } from './MenuGroup';\nimport { MenuItem } from './MenuItem';\nimport './Menu.css';\nconst b = block('menu');\n// TODO: keyboard navigation, Up/Down arrows and Enter\nexport const Menu = React.forwardRef(function Menu({ size = 'm', children, style, className, qa }, ref) {\n return (_jsx(\"ul\", { ref: ref, role: \"menu\", \n // tabIndex={0}\n style: style, className: b({ size }, className), \"data-qa\": qa, children: children }));\n});\nMenu.Item = MenuItem;\nMenu.Group = MenuGroup;\n"],"names":["fetchFromTabletErrorsApi","action","cluster","params","cancelToken","axios","post","concat","_objectSpread","Set","AttributesButton","_ref","_ref$view","view","_ref$size","size","rest","_objectWithoutProperties","_excluded","_jsx","Button","children","Icon","awesome","connect","openAttributesModal","title","_ref$getPathProps","getPathProps","path","exactPath","attribute","attributes","_ref$withTooltip","withTooltip","_ref$tooltipProps","tooltipProps","placement","content","onClick","pathProps","block","cn","Dropdown","_Component","_inherits","_super","_createSuper","_this","_classCallCheck","_len","arguments","length","args","Array","_key","call","apply","state","popupVisible","anchor","React","toggle","setState","prevState","open","close","_createClass","key","value","_this$props","this","props","button","trigger","actionProps","undefined","onMouseEnter","onMouseLeave","template","_this$props$template","data","renderer","templates","get","__default__","_this$props2","popup","directions","Popup","onClose","anchorRef","hasArrow","renderTemplate","className","_jsxs","ref","renderButton","renderPopup","Component","defaultProps","zIndexGroupLevel","EditableAsText","onChange","text","withControls","disableEdit","cancelOnClose","openOnClick","renderEditor","onModeChange","_props$saveButtonView","saveButtonView","_props$cancelButtonVi","cancelButtonView","_React$useState","_React$useState2","_slicedToArray","editMode","setEditMode","_React$useState3","_React$useState4","input","setInput","useEffect","handleChangeMode","useCallback","isEdit","closeEditMode","startTextEdit","handleChange","val","applyValue","closeAndResetValue","onApply","handleKeyDown","evt","controlSize","_Fragment","onBlur","TextInput","autoFocus","onUpdate","onKeyDown","extraProps","onMouseDown","type","EditButton","getHistogram","histogram","createGetQuartiles","createSelector","hammer","stat","quartiles","createGetPDF","pdf","createGetECDF","ecdf","steps","unshift","x","min","y","push","bucketNumber","bucketSize","HistogramChart","format","dataName","lineOnly","yagrData","xFormat","formatLib","Bytes","Number","_ref2","_ref5","_ref6","_step","buckets","timeline","NaN","_iterator","_createForOfIteratorHelper","s","n","done","item","getX","getY","err","e","f","graphs","color","getSerieColor","step","getLineOnlyData","_ref3","_ref4","lineData","j","i","_buckets$i","bestX","itemX","isArray","calcBestY","Math","scale","renderOptions","gap","getColumnData","res","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_","join","renderDefaultTooltip","digits","sources","YagrChartKit","v","left","right","ly","ry","lx","Histogram","activeHistogram","handleHistogramChange","histogramItems","isDataGood","isDatailedLine","setDetailed","Select","options","map_","keys_","width","Checkbox","checked","q25","q50","q75","quartilesProps","PropTypes","pdfProps","valueMax","valueMin","ecdfProps","getQuartiles","getPDF","getECDF","getIsDataGood","pdfData","ecdfData","toaster","Toaster","LoadDataHandler","error","loaded","errorData","add","theme","name","autoHiding","message","NO_VALUE","actions","label","showErrorPopup","_this$props2$alwaysSh","alwaysShowError","YTErrorBlock","ICON_BY_TYPE","_ICON_BY_TYPE","_defineProperty","SortIcon","_React$Component","order","allowUnordered","withUndefined","nextSortOrderValue","hidden","icon","Tooltip","ReadableField","face","Secondary","disabled","Bold","SecondaryBold","Warning","WarningLight","NoWrap","Escaped","textNode","unipika","prettyprint","UNIPIKA_ESCAPED_SETTINGS","asHTML","dangerouslySetInnerHTML","__html","TextInputWithDebounce","_props$debounce","debounce","_props$onUpdate","onEnterKeyDown","handleChangeExt","throttle_","cancel","handleBlur","b","WarningIcon","hoverContent","Text","variant","typedMemo","ErrorBoundary","constructor","super","resetError","getDerivedStateFromError","componentDidCatch","_a","_b","onError","componentDidUpdate","prevProps","code","NO_DATA","i18n","toString","getErrorMessage","renderError","renderPluginLoader","pluginLoader","Object","assign","ChartKitComponent","widgetRef","instanceRef","id","propsId","isMobile","restProps","ckId","lang","settings","plugin","find","iteratedPlugin","UNKNOWN_PLUGIN","ChartComponent","reflow","details","current","fallback","mobile","YagrPlugin","set","plugins","COLORS","serieIndex","DEFAULT_SHORTCUTS","time","YTTimelineImpl","topShortcuts","setWidth","setRef","onResize","w","contentRect","useResizeObserver","element","Timeline","padding","hasPicker","wrapper","ruler","picker","YTTimeline","ONE_DAY_MS","calcFromTo","timeRange","shortcutValue","calculateShortcutTime","_ref6$from","from","floor","Date","now","_ref6$to","to","ceil","withRouter","_props$theme","match","url","computeStateQuery","Link","routed","FormattedText","FormattedTextOrLink","_ref$asLink","asLink","FormattedLink","FormattedId","_useState","useState","_useState2","hovered","setHovered","ClipboardButton","printColumnAsBytes","columnName","column","columns","printColumnAsNumber","ROWS_PER_PAGE","selectCellPreviewVisible","navigation","modals","cellPreviewModal","visible","selectCellPreviewLoading","loading","selectCellPreviewData","selectCellPreviewYtCliDownloadCommand","ytCliDownloadCommand","selectCellPreviewNoticeText","noticeText","selectErrorPreviewCellPath","CellPreviewModal","dispatch","useDispatch","useSelector","unipikaSettings","getPreviewCellYsonSettings","SimpleModal","onCancel","closeCellPreviewAndCancelRequest","wrapperClassName","Flex","qa","direction","PreviewContent","$type","$value","$tag","isMediaTag","src","alt","Yson","folding","tableSettings","dynamicRenderScrollParentGetter","customLayout","toolbar","reShortName","makeRegexpFromSettings","uiSettings","reShortNameFromAddress","reTabletNodeShortName","reShortNameFromTabletNodeAddress","Host","_ref$address","address","prefix","copyBtnClassName","useText","asTabletNode","inlineMargins","host","re","_res$groups","exec","groups","shortname","suffix","filter","Boolean","calcShortNameByRegExp","getCluster","withSplit","_WithSplit","WithSplit","ReactDOM","document","getElementById","SPLIT_PANE_ID","displayName","getDisplayName","SidePanelPortal","useSidePanel","renderContent","widgetOpened","setWidgetOpened","openWidget","splitScreen","mergeScreen","closeWidget","widgetContent","observer","ResizeObserver","observe","unobserve","pathToFileName","replace","getOnlyFolders","suggestions","filter_","child","showErrorInModal","_getCorrectInnerError","ErrorMessage","innerErrors","correctErrorCodes","values_","NetworkCode","find_","some_","getCorrectInnerError","inner_errors","prepareErrorMessage","SHOW_ERROR","hideError","HIDE_ERROR","openEditingPopup","objectPath","items","multipleMode","closeEditingPopup","withScope","scope","ResComponent","useHotkeysScope","PathEditorModal","_handleBlur","handleFocus","event","onFocus","_handleFocus","newPath","_handleChange","handleApply","_handleApply","setPath","editingPath","inProcess","placeholder","description","showError","errorMessage","PathEditor","customFilter","defaultPath","showErrors","hasClear","modalTitle","Modal","onConfirm","onConfirmButtonClick","onCancelButtonClick","isConfirmDisabled","confirmText","compose","SET_PATH","requests","CancelHelper","copyObjectIntoDirectory","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","_this2","_this$props3","copyObject","updateView","_this$state","_this$props4","mapDispatchToProps","copyingPath","onSuccess","COPY_OBJECT","REQUEST","Promise","resolve","startTransaction","timeout","copyRequests","node","command","transaction_id","titleUnquoted","wrapBatchPromise","executeBatchWithRetries","YTApiId","navigationCopy","errorTitle","saveCancelSourceCb","commitTransaction","abortTransaction","reject","copyObjects","SUCCESS","CANCELLED","FAILURE","removeAllRequests","_navigation$modals$co","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","$attributes","encode_utf8","rumLogError","resolveEntityPath","JSON","parse","result","_items$","getPath","_navigation$modals$mo","getNextObjectName","initialPath","INITIAL_STEP","checkPathExists","isExists","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","AclTabParams","_AclTabParams","IdmObjectType","PATH","rumType","RumMeasureTypes","NAVIGATION_TAB_ACL","NavigationAcl","ACCESS_CONTROL_OBJECT","NAVIGATION_TAB_ACL_ACCESS","AccessContentAcl","createACLTabComponent","idmKind","mapStateToProps","getAttributes","getRawPath","isPrincipalACLtab","mode","loadState","getAclLoadState","makeMapStateToProps","_AclTabParams$idmKind","useAppRumMeasureStart","startDeps","allowStart","isFinalLoadingStatus","useRumMeasureStop","stopDeps","allowStop","makeComponentWithRum","AccessAclTab","makeTableRumId","measureId","isDynamic","NAVIGATION_CONTENT_TABLE_DYNAMIC","NAVIGATION_CONTENT_TABLE_STATIC","RumWrapper","getColumnPresetEndpoint","utf8","utils","_loadStaticTable","_asyncToGenerator","_regeneratorRuntime","_callee","requestOutputFormat","setup","useZeroRangeForPreload","stringLimit","transaction","moveBackward","requestedPageSize","defaultTableColumnLimit","login","offsetValue","useYqlTypes","decodedColumns","outputFormat","apiId","_context","prev","next","getCellSize","getTransaction","getMoveOffsetBackward","getRequestedPageSize","getDefaultTableColumnLimit","global","getColumns","getNextOffset","isYqlTypesEnabled","decodeNameField","getRequestOutputFormat","prepareRequest","table_reader","workload_descriptor","category","dump_error_into_response","omit_inaccessible_columns","relativePath","getIsDynamic","LOAD_TYPE","PRELOAD","tableReadPreload","tableRead","fetch","readStaticTable","reverseRows","abrupt","sent","stop","loadTableRows","transformResponse","parsedData","rawResponse","headers","getIsStrict","loadPromise","keyColumns","getKeyColumns","_getNextOffset","offset","descending","orderBySupported","offsetColumns","limit","isEmpty_","isSorted","ypath","getValue","preparedOffset","part","trim","ranges","lower_limit","tablet_index","row_index","upper_limit","allColumns","Columns","getSchemaColumns","dynTableCheckPerm","ytApiV3Id","checkPermission","permission","user","permissions","keyColumnsNames","keyBy_","_reduce_","reduce_","index","availableColumns","omittedColumns","has_","deniedKeyColumns","decode","query","Query","prepareQuery","dynTableSelectRowsPreload","selectRows","parseErrorFromResponse","getParsedError","_prepareRows","prepareRows","yqlTypes","getVisibleColumns","getOmittedColumns","getDeniedKeyColumns","Error","key_columns","dynTableSelectRows","readDynamicTable","loadDynamicTable","_x","_x2","_x3","_x4","_x5","loadStaticTable","schemaColumns","getTableColumnNamesFromSchema","injectColumnsFromSchema","updateTableData","_getNextOffset2","GET_TABLE_DATA","UPDATE","storedColumns","preparedColumns","prepareColumns","preparedOmittedColumns","prepareOmittedColumns","setColumns","newOffsetValue","previousRows","getRows","addRowCount","slice","prepareKey","getColumnsValues","SET_OFFSET","SET_COLUMNS","closeColumnSelectorModal","CLOSE_COLUMN_SELECTOR_MODAL","updateColumns","columnsOrder","getColumnsOrder","storeAllColumns","SET_COLUMNS_ORDER","setColumnsOrder","SET_TABLE_COLUMNS_PRESET_HASH","toggleFullScreen","TOGGLE_FULL_SCREEN","FilePicker","inputRef","onLinkClick","click","target","files","multiple","ClickableText","WRITE_ATTRIBUTES","json","enable_type_conversion","yson","yamr","dsv","enable_string_to_all_conversion","schemaful_dsv","xlsx","getFileTypes","payload","fileTypes","getConfigUploadTable","uploadTableExcelBaseUrl","UploadManager","hasUpcomingFile","file","fileType","progress","inProgress","append","firstRowAsNames","secondRowAsTypes","showOverwriteConfirmation","cancelHelper","onReset","onFile","cancelUpload","onDragOver","preventDefault","stopPropagation","onDrop","dataTransfer","lastDotIndex","lastIndexOf","extStr","substr","fileError","checkFile","onDragEnter","onDragLeave","renderConfirm","renderClose","handleClose","onUploadProgress","onConfirmImpl","setOverwriteConfirmationVisible","proxy","externalProxy","uploadConfig","onStartUpload","txId","writeTable","uploadTableUseLocalmode","location","input_format","getWriteAttributes","removeAllAndSave","onStopUpload","onXlsxUpload","_this$state2","dropable","empty","renderFileContent","renderSettings","renderProgress","_this$typeSpecificFie","typeSpecificFields","fields","initials","YTDFDialog","onAdd","modal","initialValues","caption","extras","hideFilter","_toConsumableArray","_this3","_this$state3","UIFactory","docsUrls","helpLink","docsUrl","HelpLink","total","totalStr","loadedStr","Progress","stack","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","footerContent","renderFooterContent","renderCustomConfirm","renderCustomCancel","contentClassName","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","acc","tabletState","dynTablesChangeState","wrapApiPromiseByToaster","navigationDynTableState","toasterName","successContent","batchType","skipSuccessToast","waitWhileThereIsTransient","capitalize_","delayed","navigationGetTabletState","results","toRecheck","output","DynamicActions","Fragment","StaticActions","DownloadManager","table","mountUnmountTable","metrics","countEvent","navigation_dynamic_table_action","ytApiV3","console","RemountAlert","attributesWithTypes","getAttributesWithTypes","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","MetaTable","ReplicatedTableSettingsButton","setVisible","toggleVisibility","ReplicatedTableSettingsDialog","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","renderActions","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","errors","renderErrors","renderAsReadableField","renderState","automatic_mode_switch","renderAutomaticModeSwitch","bind","renderAsTimeDuration","computeKey","hasActions","CypressNodeTypes","CHAOS_REPLICATED_TABLE","TableMeta","StickyContainer","Sticky","topOffset","HEADER_HEIGHT","isSticky","sticky","TableActions","ElementsTable","replicaLink","Page","NAVIGATION","StatusBulb","enableTableTracker","align","sort","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","renderNavigationExtraActions","messageBlock","codeBlock","renderMeta","compression","erasureReplication","downloadPath","href","renderTooBigInfo","isTooBig","loadFile","LOAD_FILE","readFile","FileConnected","_state$navigation$con","isEmpty","getEffectiveMode","initialLoading","Loader","rowKey","row","DataTableWrapper","useRawStrings","getSettingTableDisplayRawStrings","schemaByName","getSchemaByName","ysonSettings","isFullScreen","onShowPreview","rowIndex","tag","showCellPreviewModal","dtColumns","updating","setTimeout","requestAnimationFrame","window","dispatchEvent","Event","fullscreen","DataTable","SharePresetButton","handleClick","visibleColumns","columnsEncoded","request","method","errorContent","saveColumnPreset","hash","openInNewTab","share_columns","pin","SavePresetButton","getAllColumns","ColumnsPresetButton","getColumnsPresetHash","actionStyle","marginRight","openColumnSelectorModal","OPEN_COLUMN_SELECTOR_MODAL","isStrict","getSchemaStrict","allowPickColumns","showAllColumns","allowUserColumnPresets","getConfigData","style","methodMap","nativeAPI","unprefixedMethods","returnValue","methodList","exitFullscreenMethod","entries","eventNameMap","change","fullscreenchange","fullscreenerror","screenfull","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","pageSizeProps","pageSizeRadioButtonItems","RadioButton","xmlns","xmlnsXlink","viewBox","mixBlendMode","xlinkHref","fill","transform","d","getNavigationPathAttributesLoadState","LOADING_STATUS","LOADED","basePath","getJupyterBasePath","Logo","height","moveOffset","prevOffsetValue","getOffsetValue","MOVE_OFFSET","openOffsetSelectorModal","OPEN_OFFSET_SELECTOR_MODAL","keyColumn","renderInput","onEndEditing","rowCount","Filter","iconLeft","RangeInputPicker","onOutsideClick","onAfterUpdate","onSubmit","maxValue","infoPointsCount","renderPlaceholder","handleStartEditing","progressWidth","getProgressWidth","getRowCount","editing","changeEditing","edit","dynamic","OffsetSelectorButton","moveOffsetToStart","moveOffsetToLeft","getYqlTypes","getBottomBoundKey","moveOffsetToRight","getUpperBoundKey","moveOffsetToEnd","isPaginationDisabled","getIsPaginationDisabled","isTableEndReached","getIsTableEndReached","Pagination","handler","hotkeyHandler","hotkeyScope","hotkey","previous","last","YQLKitButton","_UIFactory$yqlWidgetS","yqlWidgetSetup","getNavigationSqlService","getSettingsData","isDeveloper","isAdmin","isQtKitEnabled","indexOf","isYqlKitEnabled","hasYqlWidget","useNavigationSidePanelMode","panelMode","sidePanelMode","setPanelMode","setNavigationSidePanelMode","OpenQueryButtonsContent","_useNavigationSidePan","_useSidePanel","QueryWidgetLazy","renderWidget","createQueryFromTablePath","QueryEngine","YQL","OpenQueryButtons","autoOpen","_useNavigationSidePan2","onOpenYqlKit","_useSelector","allowQtAutoOpen","selected","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","forEach_","attrs","getNavigationAttributesEditorStaticTables","getNavigationAttributesEditorDynamicTables","getNavigationAttributesEditorMapNodes","EDITABLE_ATTRIBUTES","showNavigationAttributesEditor","attributesEditorGetAttrs","getBatchError","join_","EDIT_MARKER","makeUiMarker","EDIT_MERGE_MARKER","navigationSetNodeAttributes","generalAttrs","storageAttrs","runMerge","warn","stringify","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","all","attributesEditorMerge","prepareRestorePath","lastChar","SUPPRESS_REDIRECT","openDeleteModal","checkIsTrash","OPEN_DELETE_OBJECT_POPUP","getInfo","realPath","parsedRealPath","getKey","navigationGetPathInfo","createDestinationPath","account","moment","unix","showTableEraseModal","TABLE_ERASE_MODAL_PARTIAL","runTableErase","combine_chunks","range","isNaN","erase","table_path","Node","iconType","parsedPath","parsedPathError","pathState","recursiveResourceUsage","dataWeight","sizePerMedium","chunks","nodes","tabletStaticMemory","tablets","masterMemory","locks","modified","created","linkParsedPath","linkPathState","targetPathBroken","targetPathState","unmergedRows","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","TITLE_PRINT_SETTINGS","CAPTION_PRINT_SETTINGS","SUPPORTS_RESOURCE_USAGE","_Node","indent","break","binaryAsHex","highlightControlCharacter","escapeWhitespace","journal","updateResourceUsage","getFilteredNodes","isRootNode","UPDATE_RESOURCE_USAGE","nodesChunks","chunk_","batchedRequests","nodesChunk","executeBatch","navigationResourceUsage","resultChunks","dataMap","errorResults","resultChunkIndex","getNodesData","nodeData","nodeValue","newData","GENERIC_ERROR_MESSAGE","selectAll","isAllSelected","allNodes","SELECT_ALL","Chooser","getIsAllSelected","handleSelectChange","showRemoteCopyModal","_results$index","REMOTE_COPY_MODAL_PARTIAL","hideRemoteCopyModal","remoteCopy","dstCluster","MultipleActions","isOneSelected","isSelected","getSelectedNodes","isTooLarge","dynTablesActions","getSelectedNodesAllowedDynTablesActions","hasRestoreButton","handleDeleteClick","allowModifyActions","dropdownButton","restoreMoveCopy","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","count","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","_React$useMemo","handleUpdateView","onMove","onShowAttributes","onEditAttributes","onRestoreClick","onDeleteClick","onSort","onErase","onMerge","onMount","onUnmount","onFreeze","onUnfreeze","onLink","onTransfer","secondGroup","firstGroup","menuItems","commonProps","onlyDropdown","dropDownBtnClassName","_props$dropDownBtnThe","dropDownBtnTheme","_props$dropDownBtnSiz","dropDownBtnSize","EditTableActions","DataLensButton","getNavigationTableDataLensButtonAlerts","isEmptySchema","enableDynamicStoreRedRequired","datalensBaseUrl","datalensAllowedCluster","has","showTooltip","toUpperCase","btn","linkUrl","isSplit","isUnmounted","allowPagination","Paginator","OffsetInput","ColumnSelectorButton","SettingsButton","JupyterButton","FullScreenButton","OffsetSelectorModal","_handleCONFIRMButtonClick","isTableSorted","closeOffsetSelectorModal","minKeyValue","offsetValues","_handleCANCELButtonClick","initialItems","_changeFilter","updateItemValue","prevItems","findIndex","changedItem","_handleInputChange","RegExp","escapeRegExp_","visibleItems","filterItemsByName","renderSearchBox","renderItems","isOffsetSelectorOpen","borderless","itemProps","isRequired","CLOSE_OFFSET_SELECTOR_MODAL","getCurrentOffsetValues","getIsTableSorted","TableColumnsPresetNotice","getColumnsPresetColumns","getColumnsPresetError","log","collapsed","Table","columnsProps","accessor","renderColumnSelectorModal","srcColumns","isColumnSelectorOpen","ColumnSelectorModal","srcItems","isVisible","renderTable","visibleRows","stickyTop","OVERVIEW_HEIGHT","stickyHead","syncHeadOnResize","sortable","stripedRows","displayIndices","emptyDataMessage","startIndex","getTableData","isYqlV3Types","handleScreenChanged","TableOverview","hashToLoad","getColumnsPreset","ui_loadColumnPreset","_ref$data","encode","SET_TABLE_COLUMNS_PRESET","setTablePreset","setTablePresetError","_ref5$deniedKeyColumn","preset","forEach","_preset$columns","includes","waitForFontFamilies","tableSimilarityEnabled","isTableSimilarityEnabled","field_weight_limit","max_selected_column_count","max_all_column_names_count","column_names","restoreSimilarColumns","restoreExactColumns","restoreColumns","_excluded2","storedIsFullScreen","TableConnected","getTableYsonSettings","getSrcColumns","getVisibleRows","TTLInfo","ttlItems","makeTTLItems","forceLinksAppearance","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","_assertThisInitialized","indexById","sortBy_","ColumnDataTypes","ANY","YSON","isOrderedColumn","isSortedColumn","isDescendingColumn","aggr","SUM","MIN","MAX","INT64","UINT64","DOUBLE","ordered","validateAggregate","validateColumnDataType","validateColumnLock","str","round","ASCENDING","DESCENDING","isAscendingColumn","hasOrderedColumn","colData","hasUnorderedColumn","nameError","replicasCountError","validateReplicasCount","_primitiveTypes$2","_field$visibilityCond","when","isActive","compressionCodecs","erasureCodecs","groupSuggestions","virtualized","pristineSubmittable","isApplyDisabled","validate","getFormValidator","onActiveTabChange","tab","separator","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","trimXLSX","fileName","_i","_arr","toLowerCase","endsWith","FILE_TYPES","getExcelBaseUrl","UploadManagerCreate","nameAlreadyUsed","parentDir","EXCEL_BASE_URL","_","alreadyUsed","checkNameAlreadyExist","validationState","UPLOAD_CONFIG","existingNodes","NodesTypes","sortedNodes","orderBy_","slice_","sum","renderItem","displayedNodes","_prepareNodes","allNodesCount","_getSumCount","otherNodesCount","renderSelected","NodesInfo","nodesInfo","closeCreateACOModal","CREATE_ACO_MODAL","createACO","namespace","tbBlock","MapNode","fetchNodes","prevPath","prevTransaction","MapNodeToolbarConnected","_this$props$error","renderToolbar","MapNodesTable","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","NAVIGATION_CONTENT_MAP_NODE","navigationListNodes","list","getNavigationMapNodeSettings","additionalAttributes","saveRequestCancellation","getList","applyCustomSort","APPLY_CUSTOM_SORT","changeColumnSortOrder","tableId","setMediumType","SET_MEDIUM_TYPE","openCreateTableModal","openCreateACOModal","MapNodeConnected","MapNodeWithRum","LOADING","MapNodeToolbar","_React$PureComponent","_super2","uploadXlsRef","createDirectoryButtonClick","OPEN_CREATE_DIRECTORY_POPUP","createTableButtonClick","uploadTableButtonClick","createLinkButtonClick","createACOButtonClick","_UIFactory$getMapNode","getMapNodeExtraCreateActions","renderModals","prepareSimpleValue","ShowResourcesButton","SelectSingle","menuSize","popupClass","isRoot","keys","saveDocument","documentString","SET_DOCUMENT_EDIT_MODE","GET_DOCUMENT","t0","getNavigationDocumentLoadingStatus","selectNavigationDocument","onEditClick","DocumentExtraTools","queryAutoOpen","isYqlView","_ref3$document","extraTools","onSave","handleSaveDocument","jsonEditor","fullWidth","initialSplitSize","initialShowPreview","prepareSettings","navigationGetDocument","handleEditClick","handleOnCancel","handleOnDocumentSave","DocumentBody","DocumentEditModal","NAVIGATION_CONTENT_DOCUMENT","Document","TransactionConnected","startTime","handleTransactionAbort","ABORT_TRANSACTION","navigateParent","handleModalClose","modalContent","confirmTheme","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","cssHover","renderIcon","renderId","renderOwner","renderStartTime","renderTitle","iconName","getIconNameForType","isLink","itemNavigationAllowed","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","metaMock","cell_id","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$tab10","write_row_count_rate","getStatusError","statusError","getStatusLoading","statusLoading","getStatusLoaded","statusLoaded","getQueueStatusDataAlerts","_state$navigation$tab11","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$meta","_partition$write_data","_partition$write_row_","meta","partition_index","getPartitionsError","partitionsError","getPartitionsLoading","partitionsLoading","getPartitionsLoaded","partitionsLoaded","getConsumers","_state$navigation$tab12","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","TargetQueue","clusterQueueUrl","firstColon","genNavigationUrl","ConsumerQueueSelector","topMargin","_useSelector2","handleSelect","_registrations$0$queu","_registrations$","pref","findCommonPathParent","Prefix","abs","marginBottom","backgroundColor","_counters$show","counters","formatter","hummerFormat","counterNames","_counters$key","BarChart","_counters$key2","Meta","partitionCount","readDataWeightRate","readRowCountRate","vital","SubjectCard","isNull","Label","Multimeter","BytesPerSecond","RowsPerSecond","tabItems","CONSUMER_MODE","METRICS","PARTITIONS","changeConsumerMode","Extras","bool","getter","sortAccessor","datetime","valueOf","HoverContent","_error$message","multimeter","valueFormat","number","readRateName","_readRateName","CONSUMER_RATE_MODE","ROWS","DATA_WEIGHT","readRateGetter","_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","ColumnSelector","changeConsumerPartitionIndex","changeConsumerRateMode","changeConsumerTimeWindow","changeConsumerPartitionsColumns","views","_views","ExtraControls","View","MetricsComponent","getComponentForConsumerMetrics","PartitionsExtraControls","Partitions","emptyView","loadConsumerStatus","CONSUMER_STATUS_LOAD_REQUEST","queueConsumerStatus","CONSUMER_STATUS_LOAD_SUCCESS","state2","CONSUMER_STATUS_LOAD_FAILURE","_useViewByMode","WithStickyToolbar","Toolbar","Alerts","_ref$marginDirection","marginDirection","alert","YTAlertBlock","writeDataWeightRate","writeRowCountRate","changeQueueRateMode","QUEUE_CHANGE_PERSISTED_STATE","changeQueueTimeWindow","QUEUE_MODE","CONSUMERS","EXPORTS","changeQueueMode","QueueMetrics","getComonentForQueueMetrics","QUEUE_RATE_MODE","_ref10","_consumer$split","_consumer$split2","changeQueueConsumerName","changeQueueOwner","writeRateName","_writeRateName","writeRateGetter","_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","executeBatchV3","_callee2","_results$0$error2","_context2","_results$0$error","ytApi","rootApi","injectEndpoints","endpoints","build","fetchBatch","queryFn","providesTags","_result","_error","arg","updateBatch","mutation","invalidatesTags","useFetchBatchQueryRaw","useFetchBatchQuery","useAutoRefresh","getUseAutoRefresh","defaultOptions","pollingInterval","DEFAULT_UPDATER_TIMEOUT","skipPollingIfUnfocused","customOptions","customArgs","_useFetchBatchQueryRa","restResult","typedData","useUpdateBatchMutation","makeGetExportsParams","queueExportConfig","deleteExtraAttributes","_deleteExtraAttributes","configs","prevConfig","transactionId","remove","export_name","export_directory","exportsMutation","_exportsMutation","api","_ytApi$endpoints$fetc","newConfig","newConfigs","select","originating_queue_id","t1","useExportMutation","export","prepareUpdateValues","config","_restConfig$export_tt","_restConfig$export_pe","restConfig","output_table_name_pattern","use_upper_bound_for_table_names","export_ttl","export_period","_validateExportDirectory","_typeof","validator","whiteSpace","ExportsEditDialog","_useExportMutation","_useExportMutation2","update","_useExportMutation2$","setInitialValues","rawValues","prepareInitialValues","_form$getState","preparedValues","makeErrorFields","hasValidationErrors","configsValues","ExportsEdit","editDialogVisible","setEditDialogVisible","_useState3","_useState4","deleteDialogVisible","setDeleteDialogVisible","toggleEditDialogVisibility","toggleDeleteDialogVisibility","Value","makeNavigationLink","ConsumersExtraControls","consumersLoading","consumersLoaded","borderLeft","_useExports","_useFetchBatchQuery","isFetching","obj","newObj","useExports","loadQueueStatus","QUEUE_STATUS_LOAD_REQUEST","queueStatus","QUEUE_STATUS_LOAD_SUCCESS","QUEUE_STATUS_LOAD_FAILURE","clusters","YT","getLocksModeFilter","modeFilter","getLocksLoadStatus","getLocksFiltered","Locks","renderTransaction","operationId","operation_id","cellTag","parseInt","clusterConfig","_clusterConfig$primar","primaryMaster","additional","findClusterConfigByOperationId","clusterId","operationIdUrl","page","Linkify","TemplateTime","onModeFilter","setLocksModeFilter","getLocks","renderIndex","renderLock","MAX_TRANSACTIONS_REQUESTS","itemsToWrap","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","ExternalDescription","_data$glossaryEntity","hasWarning","markdown","glossaryEntity","typeMismatchElement","Popover","elementsBlock","COLUMNS_TO_HIDE","Schema","_loadExternalSchemaData","externalSchemaUrl","externalSchema","externalSchemaError","loadExternalSchemaData","SchemaDataType","renderExternalColumn","_this$props$computedC","computedColumns","preparedSet","col","preparedItems","omit_","_columns$column","externalSchemaDescriptionSetup","virtualType","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","rowClassName","onItemClick","top","TABLET","renderIdWithLink","genTabletCellBundlesCellUrl","none","freezing","unfreezing","mounting","unmounting","pivotKey","storePreloadProgress","prepareStorePreloadProgress","_Tablets","typedValueProps","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","AttributesWithRum","NAVIGATION_TAB_ATTRIBUTES","shortcut","TIMELINE_RANGE_PICKER_SHORTCUTS","getAccessLogFilterPagination","accessLog","accessLogFilters","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","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","fillRule","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","_ref9","transaction_info","headerTitle","AccountsLogTransactionInfo","pageCount","ColumnHeader","pageIndex","_ref11","isTarget","capitalize","AccessLogError","valueToSelection","selectionToValue","emptyValue","ACCESS_LOG_FIELD_SELECTOR_ITEMS","ACCESS_LOG_METHOD_ITEMS","ACCESS_LOG_USER_TYPE_ITEMS","ACCESS_LOG_SCOPE_ITEMS","clipPath","AccessLogOpenQtButton","setLoading","newParams","_yield$wrapApiPromise","query_id","finish","AbbrSqlIcon","AccessLogFilters","AccessLogPagination","AccessLogTimeline","AccessLogFieldselector","AccessLogMetadata","AccessLogDistictBy","AccessLogPathRegexp","growable","shrinkable","AccessLogUserRegexp","AccessLogUserTypeFilter","AccessLogScopeFilter","AccessLogMethod","AccessLogApplyFilters","hasChanges","SimplePagination","METADATA_ITEMS","valueStr","vals","DISTINCT_BY_ITEMS","handleUpdate","initialState","EMPTY_OBJECT","maxVisibleValues","TIMELINE_SHOURCUTS","updateTime","updateShortcut","_ref$from","_ref$to","TimelinePicker","onShortcut","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","disableLogger","getTabletErrorsByPathError","tabletErrorsByPath","getTabletErrorsByPathLoading","getTabletErrorsByPathLoaded","getTabletErrorsByPathData","getTabletErrorsByPathDataParams","dataParams","getTabletErrorsByPathAllMethods","all_methods","getTabletErrorsByPathPageCount","getTabletErrorsByPathTimeRange","timeRangeFilter","getTabletErrorsByPathMethodsFilter","methodsFilter","getTabletErrorsByPathPageFilter","pageFilter","getTabletErrorsByPathTabletIdFilter","tabletIdFilter","TabletErrorsByPathTable","_useTableColumnsAndDa","_ref2$errors","alignItems","timestamp","useTableColumnsAndData","DATA_TABLE_YT_SETTINGS_UNDER_TOOLBAR_DOUBLE_HEIGHT","TabletErrorsRequest","TabletErrorsRequestToolbar","_useTabletErrorFromAp","_calcFromTo","tabletErrorsByPathActions","table_id","start_timestamp","end_timestamp","methods","prevDataParams","prevData","fixed_end_timestamp","count_limit","useTabletErrorFromApiLoad","_useTabletErrorFromAp2","allMethods","hasRuler","maxVisibleValuesTextLength","TabletErrors","viewMode","getTabletErrorsViewMode","backgroundErrorCount","allowTabletErrorsAPI","TabletErrorsBackground","updateTabletErrorsViewMode","_dispatch","getUserAttributes","userAttributes","getUserAttributesLoadInfo","UserAttributes","userAttributesActions","navigationUserAttributes","UserAttributesWithRum","NAVIGATION_TAB_USER_ATTRIBUTES","TableMountConfig","getNavigationTableMountConfig","getNavigationMountConfigYsonSettings","Flow","withLazyLoading","supportedAttributeTypes","_supportedAttributeTy","acl","ACL","user_attributes","Tab","ACCESS_LOG","AUTO","CONSUMER","Consumer","MOUNT_CONFIG","Queue","FLOW","getNavigationExtraTabs","component","getSupportedAttributeTypes","checkContentIsSupported","CONTENT","getComponentByContentType","getComponentByMode","noAccess","_WithKeyboardNavigation","ElementsTableBase","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","hotkeys","onItemHover","onMouseMove","onItemSelect","Hotkey","renderMapNodesTableIcon","renderNodeIcon","isTrashNode","isLinkToTrashNode","sorted","_index","_evt$target","_evt$target$contains","classList","contains","onChooserClick","hideOopsMsg","batch","setMode","onSpaceHotkey","info","shiftKey","nativeEvent","setSelectedItem","renderChooser","renderRowCount","dyntable","defaultColumns","resources","resourcesColumns","renderLocks","renderModificationTime","renderCreationTime","renderAccount","tableProps","_createElement","TRASH_PATH","linkState","renderNameImpl","renderTags","renderTrash","textOrLink","poolTreeIndex","fragments","fragment","pool","ROOT_POOL_NAME","poolTree","SCHEDULING","SchedulingTab","OVERVIEW","arrow","goToLink","viewLink","AccountLink","lastSelected","getLastSelected","lastIndex","nameIndex","SET_SELECTED_ITEM","MapNodesTableConnected","MapNodesTableWithRum","DeleteObjectModal","deleteObject","deleteObjects","getRealPath","getRealPaths","loadingRealPath","errorRealPath","renderLoader","renderMultipleModeContent","errorDataRealPath","_this$props5","permanently","togglePermanentlyDelete","_this$props6","multipleInfo","resourceUsage","diskSpace","nodeCount","renderPermanentlyCheckbox","_this$props7","buildItems","_this$props8","closeDeleteModal","helpLinkUrl","LOAD_REAL_PATH","navigationGetPath","_navigation$modals$de2","DELETE_OBJECT","CLOSE_DELETE_OBJECT_POPUP","_getState","_navigation$modals$de","deleteCurrentObject","currentPath","realPathDecoded","decodeEscapedAbsPath","_getState3","_navigation$modals$de3","navigationDelete","permanentlyDeleteObjects","setAttributesRequests","navigationMoveToTrashRestorePath","navigationMoveToTrash","moveObjectsIntoTrash","responses","reverse","TOGGLE_PERMANENTLY_DELETE","AnnotationVisibility","AnnotationWithPartial","annotation","isFullText","Markdown","ActionButtons","isSaving","onSaveClick","onCancelClick","getNavigationAnnotation","visibility","getSettingAnnotationVisibility","getNavigationAnnotationSaving","isEditing","getNavigationAnnotationEditing","annotationPath","getNavigationAnnotationPath","getNavigationAnnotationError","oldValue","handleToggleAnnotationCollapse","setSettingAnnotationVisibility","SET_ANNOTATION_EDITING","handleCancelClick","SET_ANNOTATION","handleChangeDescription","handleSaveClick","saveAnnotation","overview","EditAnnotationWithPreview","valuePath","initialValue","hideReset","isContentTab","NavigationDescription","NavigationPermissionsNotice","isWriteable","getNavigationIsWritable","isAccountUsable","getNavigationIsAccountUsable","checkPermissionsError","getNavigationCheckPermissionsError","getNavigationPathAccount","accountAclLink","ACCOUNTS","AccountsTab","genAccountsAclLink","AttributesEditorLoaded","singleMode","getMediumListNoCache","storeError","stateError","setErr","hasMapNodes","hasStaticTables","hasDynamicTables","hasTables","hasDynTableOrMapNode","pathsValues","annotationInitial","general","primary_medium","expiration_time","expiration_timeout","storage","compressionCodecValueFromString","normalizeErasureCodec","_storageOption","storageOptionFromErasureCodec","handleAdd","dataDiff","generalAttributes","storageAttributes","compressionCodecValueToString","erasureCodecFromStorageOption","forEachStaticTable","mergeNoticeAndError","DialogError","annotationTab","inMemoryModeField","InMemoryMode","NONE","COMPRESSED","UNCOMPRESSED","optimizeForField","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","_callee3","_context3","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","NavigationConnected","isFinalState","isNavigationFinalLoadState","isIdmSupported","getIdmSupport","UI_TAB_SIZE","getTabs","NavigationWithRumMemo","NavigationWithMesure","NAVIGATION_PRELOAD","NavigationWithRum","Editor","setScope","cancelOnBlur","NavigationTopRowContent","getNavigationDefaultPath","RowWithName","urlParams","NavigationFavourites","EditableNavigationBreadcrumbs","NavigationTools","favourites","getFavouritePaths","isInFavourites","isCurrentPathInFavourites","handleToggle","navigationToggleFavourite","handleItemClick","Favourites","NavigationPathToClipboard","onCopyToClipboard","NavigationTargetPathButton","decodedTargetPath","toggleEditMode","NavigationPathEditor","hideEditor","NavigationBreadcrumbs","onEdit","actualPath","getActualPath","_event$target","bcItems","getNavigationBreadcrumbs","getMode","history","useHistory","isLastItem","makeRoutedURL","pathname","navmode","BreadcrumbsItem","Breadcrumbs","navigate","showRoot","RefreshButton","RestoreButton","handleClearTransaction","clearTransaction","handleEdit","setTransaction","navigation_refresh","getNavigationRestorePath","handleRestore","centered","useQueryWidgetSidePanel","SchedulingOperationsLoader","getSchedulingOperationsLoadingStatus","useRumMeasureStart","subPage","getChaosIsLoaded","chaos_cell_bundles","getChaosIsLoading","getChaosBundlesSortState","bundlesSort","getChaosBundlesNameFilter","bundlesNameFilter","getChaosBundlesAccountFilter","bundlesAccountFilter","getChaosBundlesTagNodeFilter","bundlesTagNodeFilter","getChaosBundles","bundles","getChaosActiveBundle","activeBundle","getChaosBundlesTableMode","bundlesTableMode","getChaosActiveBundleData","bundle","getChaosBundlesTotal","aggregateTotal","COLUMNS_SORTABLE_AS_IS","getChaosBundlesFiltered","nameFilter","accountFilter","tagNodeFilter","predicates","lowerNameFilter","lowerAccountFilter","changelog_account","snapshot_account","lowerTagNodeFilter","node_tag_filter","concatByAnd","getChaosBundlesSorted","sortTableBundles","columnsSortable","getChaosCells","cells","getChaosCellsSortState","cellsSort","getChaosCellsIdFilter","cellsIdFilter","getChaosCellsBundleFilter","cellsBundleFilter","getChaosCellsHostFilter","cellsHostFilter","getChaosCellsOfActiveAccount","getChaosCellsFiltered","idFilter","bundleFilter","hostFilter","peerAddress","filterChaosCellsByBundle","getChaosCellsSorted","sortArrayBySortState","getChaosCellsBundles","uniq_","getChaosCellsHosts","getChaosCellsHostsOfActiveBundle","prepareHostsFromCells","prepareHost","getChaosBreadcrumbItems","tabletChaosBundleRootLink","tabletActiveChaosBundleLink","getChytListData","chyt","getChytListAvailableCreators","_data$items","creator","getChytListAvailableHealths","_data$items2","health","getChytListAvailableStates","_data$items3","getChytCurrentAlias","clique","currentClique","getChytListFilterAlias","listFilters","getChytListFilterHealth","getChytListFilterCreator","getChytListFilterState","CHYT_LIST_SELECTABLE_COLUMNS","instance_count","total_cpu","total_memory","stage","yt_operation_start_time","yt_operation_finish_time","speclet_modification_time","strawberry_state_modification_time","getChytListVisibleColumns","_getSettingsData$glob","userColumns","getChytListColumns","getChytListTableSortState","getChytListTableSortStateByName","multisortIndex","getChytFilterPredicate","alias","getChytListTableItems","predicate","_data$items4","filteredItems","multiSortBySortStateArray","getFavouriteAccounts","getAccountsNS","prepareFavourites","getLastVisitedAccounts","prepareLastVisited","getPopularAccounts","preparePopulars","isActiveAcountInFavourites","getActiveAccount","prepareIsInFavourites","getFavouriteChyt","getChytNS","getLastVisitedChyt","isActiveCliqueInFavourites","getClusterNS","getLastVisitedPaths","getPopularPaths","getFavouritePools","getSchedulingNS","isActivePoolInFavourites","getPool","getTree","tree","getFavouriteBundles","getBundlesNS","isActiveBundleInFavourites","getTabletsActiveBundle","getFavouriteChaosBundles","getChaosBundlesNS","isActiveChaosBundleInFavourites","parentNS","LOCAL","FAVOURITES","settingGetter","LAST_VISITED","lastVisited","entry","getSchedulingAbcFilter","scheduling","abcServiceFilter","getSchedulingAttributesToFilter","attributesToFilter","getSchedulingAttributesToFilterParams","attributesToFilterParams","schedulingOverviewHasFilter","abcFilter","getSchedulingFilteredPoolNames","getSchedulingPoolsMapByName","attrsToFilter","loadedPools","_attrs$abc","abc","poolName","getExpandedPoolCypressData","expandedPools","flattenCypressData","getSchedulingOperations","rawOperations","getExpandedPoolsTree","expandedPoolsTree","getSchedulingOperationsError","getSchedulingOperationsExpandedPools","getExpandedPoolsLoadAll","loadAll","RESOURCE_LIMIT_MAPPER","user_memory","preparePoolChildResource","treeResources","resource","guaranteed","getNumber","usage","demand","limitResource","resourceLimit","cypressAttributes","specifiedResourceLimit","detailed","updatePoolChild","cypressData","_data$leaves","_initedBy","leaf","child_pool_count","incomplete","pool_operation_count","emptyOp","operationCount","maxOperationCount","maxOperationCountEdited","runningOperationCount","maxRunningOperationCount","maxRunningOperationCountEdited","starvation_status","weightEdited","minShareRatio","maxShareRatio","fairShareRatio","fifoIndex","usageRatio","demandRatio","isEphemeral","isEffectiveLightweight","integralType","userDefinedBurstCPU","burstCPU","userDefinedFlowCPU","flowCPU","userDefinedFlowGPU","flowGPU","accumulated","accumulatedCpu","burstDuration","fifoSortParams","param","forbidImmediateOperations","createEphemeralSubpools","dominantResource","appendInnerErrors","getPoolsRaw","rawPools","getSchedulingTreeOperations","getOperationsFiltered","getPoolsPrepared","wrap","preparedPools","preparePools","pools","getSchedulingPoolsExtraInfo","poolsMap","calcChildrenIntegrals","childrenBurstCPU","childrenFlowCPU","itemExtraInfo","getPools","itemExtra","getResourcesText","getNetworkResourceText","getMemoryResourceText","getDefaultResourceText","getResourceProgressValue","prepareResources","resourceLimits","getResourceProgress","getPoolsImpl","getSchedulingIsInitialLoading","_state$scheduling$sch","_state$scheduling$exp","getExpandedPoolsIsInitialLoading","getTreeResources","getPoolChildrenFilter","poolChildrenFilter","getSchedulingTreeState","treeState","getSchedulingEditItem","getPoolsNames","_v","DETAILS_CONTENT_MODES","cpu","memory","gpu","user_slots","operations","integral","getIsRoot","getTreesSelectItems","trees","getPoolsSelectItems","getCurrentPool","getPoolIsEphemeral","currentPool","getCurrentPoolChildren","getCurrentPoolOperations","getResources","getFilteredTree","treeRoot","visiblePools","treeList","filterTree","getTableItems","SCHEDULING_POOL_TREE_TABLE_ID","filteredTree","sortedTree","poolsTableItems","getSchedulingOverviewMaxDepth","allExpanded","expandedPoolsMap","_ref$level","getPoolChildrenData","getFilteredPoolChildren","poolChildrenData","getSortedPoolChildren","SCHEDULING_POOL_CHILDREN_TABLE_ID","filteredPoolChildren","poolChildrenSortState","childTableItems","addGetParams","getPollChildrenTableItems","sortedPoolChildren","isChildPool","CLUSTERS_WITHOUT_POOL_ACL","isPoolAclAllowed","getCurrentPoolPath","calculatePoolPath","_loop","pathStr","getSchedulingTopPoolOfEditItem","mapOfPools","isAbcPoolName","isTopLevelPool","getSchedulingSourcesOfEditItem","topPool","visitTreeItems","isNeedToSkipChildren","getSchedulingSourcesOfEditItemSkipParent","prepareDetailedColumn","_item$resources","prepareLimitColumn","_item$resources2","sortWithUndefined","prepareMinResourcesColumn","_item$resources3","prepareAbsGuaranteedColumn","_item$resources4","prepareRelGuaranteedColumn","prepareAbsDemandColumn","_item$resources5","prepareAbsUsageColumn","_item$resources6","prepareRelUsageColumn","prepareGuaranteedUsageColumn","captionTail","FI","min_share","max_share","fair_share","fair_share_usage","dominant_resource","resource_detailed_cpu","resource_detailed_memory","resource_detailed_gpu","resource_detailed_user_slots","resource_limit_cpu","resource_limit_memory","resource_limit_gpu","resource_limit_user_slots","min_resources_cpu","min_resources_memory","min_resources_gpu","min_resources_user_slots","abs_guaranteed_cpu","abs_guaranteed_memory","abs_guaranteed_gpu","abs_guaranteed_user_slots","rel_guaranteed_cpu","rel_guaranteed_memory","rel_guaranteed_gpu","rel_guaranteed_user_slots","abs_usage_cpu","abs_usage_memory","abs_usage_gpu","abs_usage_user_slots","abs_demand_cpu","abs_demand_memory","abs_demand_gpu","abs_demand_user_slots","rel_usage_cpu","rel_usage_memory","rel_usage_gpu","rel_usage_user_slots","guaranteed_usage_cpu","guaranteed_usage_memory","guaranteed_usage_gpu","guaranteed_usage_user_slots","operation_overview","operation_count","max_operation_count","operation_progress","running_operation_count","max_running_operation_count","running_operation_progress","integral_type","burst_cpu","flow_cpu","children_burst_cpu","children_flow_cpu","accumulated_cpu","burst_duration","prepareTrees","prepareCurrentTree","defaultTree","treeNodesMap","prepareTree","attachTreeLeaves","operation","computePoolPath","parentPool","flattenAttributes","toReturn","object","hasOwnProperty","innerObject","is","flatObject","getResourceLimit","limitKey","INTEGRAL_GUARANTEES_PREFIX","POOL_INTEGRAL_GUARANTEE_FIELD_TO_ATTR","guaranteeType","burstCpu","burstRam","burstGpu","flowCpu","flowRam","flowGpu","POOL_STRONG_RESOURCE_TYPE_TO_ATTRIBUTE","cpuStrong","gpuStrong","memoryStrong","POOL_GENERAL_TYPE_TO_ATTRIBUTE","POOL_RESOURCE_TYPE_TO_ATTRIBUTE","getPoolResourceInfo","childrenSum","firstValidNumber","prepareMinGuaranteed","prepareValueDetails","getPoolResourceInitialValue","allowSource","source","getInitialValues","allowedSources","slug","indexOf_","abcService","resourceGuarantee","integralGuarantee","userSlots","otherSettings","isImageTag","isVideoTag","i18nFactory","registerKeysets","CHARTKIT_ERROR_CODE","INVALID_DATA","UNKNOWN","TOO_MANY_LINES","ChartKitError","originalError","isCustomError","mergeSettingStrategy","objValue","srcValue","currentPlugins","newPlugins","newSettingsPlugins","currentPlugin","newPluginIndex","newPlugin","settingsEventEmitter","events","eventId","updateLang","configure","setLang","updates","filteredUpdates","withNaming","m","getRandomCKId","chars","random","randomString","AlertContext","useAlertContext","context","AlertAction","bAlert","AlertContextProvider","Provider","typeToIcon","danger","filled","outlined","CircleInfo","success","CircleCheck","TriangleExclamation","utility","Thunderbolt","normal","addComponentKeysets","en","corners","Card","spacing","py","px","grow","justifyContent","Title","Actions","I","Xmark","colorText","iconByTheme","minContent","Action","cnDropdownMenu","DropdownMenuContext","moveBack","activeItemIndex","skip","newActiveItemIndex","moveForward","rootMenuPath","DropdownMenuNavigationContext","activeMenuPath","setActiveMenuPath","DropdownMenuNavigationContextProvider","contextValue","dropdownMenuSeparator","isSeparator","shouldSkipItemNavigation","stringifyNavigationPath","DropdownMenuPopup","menuProps","popupProps","navigationAnchorRef","isSubmenu","activateParent","handleMouseEnter","handleMouseLeave","activeItem","handleKeydown","isSubmenuToggleActive","isNavigationActive","setActiveItemIndex","reset","resetNavigation","processHomeKey","processEndKey","onAnchorKeyDown","some","previousActiveItemIndex","useListNavigation","Menu","isActiveParent","DropdownMenuItem","closeMenu","isSubmenuOpen","every","useSubmenu","hasSubmenu","closeSubmenu","openSubmenu","subMenuItems","menuItemRef","useDirection","handleCloseMenu","handleMenuItemClick","subMenuPlacement","iconEnd","ChevronLeft","ChevronRight","Item","toItemList","updatedItems","addedGroup","groupItems","updatedItem","DropdownMenuExport","Ellipsis","onOpenToggle","hideOnScroll","renderSwitcher","switcherWrapperClassName","defaultSwitcherProps","defaultSwitcherClassName","onSwitcherClick","isPopupShown","togglePopup","closePopup","onChangeVisibility","setPopupShown","property","setProperty","isControlled","nextValue","previousState","newState","useStateWithCallback","useConditionallyControlledState","isShown","usePopupVisibility","onScroll","handleScroll","useScrollHandler","itemsList","handleSwitcherClick","handleSwitcherKeyDown","useActionHandlers","switcherProps","MenuGroup","labelId","useUniqId","u","role","MenuItem","iconStart","rel","handleClickCapture","publish","componentId","domEvent","onClickCapture","tabIndex","interactive","Group"],"sourceRoot":""}
|