@ytsaurus/ui 1.99.0 → 1.99.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js/navigation.ee6d9c4e.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/assets/img/svg/icons/queue-consumer.svg","webpack://@ytsaurus/ui/./src/ui/assets/img/svg/icons/queue-producer.svg","webpack://@ytsaurus/ui/./src/ui/components/MapNodeIcon/MapNodeIcon.tsx","webpack://@ytsaurus/ui/./src/ui/constants/pagination.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/bars-descending-align-left.svg","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/./src/shared/tablet-errors-manager.ts","webpack://@ytsaurus/ui/./src/ui/assets/img/svg/modal-no-content.svg","webpack://@ytsaurus/ui/./src/ui/components/ColumnSelectorModal/ColumnSelectorModal.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/Dialog/controls/RoleListControl/utils.ts","webpack://@ytsaurus/ui/./src/ui/containers/Host/Host.tsx","webpack://@ytsaurus/ui/./src/ui/components/Dialog/DialogError.tsx","webpack://@ytsaurus/ui/./src/ui/components/Dialog/index.tsx","webpack://@ytsaurus/ui/./src/ui/hocs/withDelayedMount.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/./node_modules/@gravity-ui/chartkit/build/libs/chartkit-error/chartkit-error.js","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QueryWidget/side-panel.tsx","webpack://@ytsaurus/ui/./src/ui/utils/navigation/path-editing-popup.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/path-editing-popup.js","webpack://@ytsaurus/ui/./src/ui/hocs/components/Modal/withScope.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/Navigation/PathEditorModal/PathEditorModal.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/copy-object.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/Navigation/PathEditorModal/CopyObjectModal/CopyObjectModal.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/create-directory.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/Navigation/PathEditorModal/CreateDirectoryModal/CreateDirectoryModal.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/move-object.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/Navigation/PathEditorModal/MoveObjectModal/MoveObjectModal.js","webpack://@ytsaurus/ui/./src/ui/utils/navigation/restore-object.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/restore-object.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/Navigation/PathEditorModal/RestoreObjectModal/RestoreObjectModal.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/delete-object.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/Navigation/PathEditorModal/DeleteObjectModal/DeleteObjectModal.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/ACL/ACL.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/content/table/table-rum-id.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/content/table/columns-preset.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/content/table/table.js","webpack://@ytsaurus/ui/./src/ui/components/FilePicker/FilePicker.tsx","webpack://@ytsaurus/ui/./src/ui/components/FileDropZone/FileDropZone.tsx","webpack://@ytsaurus/ui/./src/ui/components/FileDropZone/useFileDragDrop.ts","webpack://@ytsaurus/ui/./src/ui/components/FileUploadProgress/FileUploadProgress.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/UploadManager/UploadManager.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/content/map-node-ts.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/dyn-tables-state-modal.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/TableOverview/TableActions.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/RemountAlert/RemountAlert.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/content/table/remount-table.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/TableMeta/TableMeta.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/ReplicatedTable/ReplicatedTableSettings.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/content/replicated-table.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/ReplicatedTable/ReplicatedTable.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/ReplicatedTable/ReplicatedTableMeta.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Link/Link.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/content/file.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/content/file.js","webpack://@ytsaurus/ui/./src/ui/containers/NavigationExtraActions/NavigationExtraActions.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/File/File.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/DataTableWrapper/DataTableWrapper.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/table-erase-modal.tsx","webpack://@ytsaurus/ui/./src/ui/utils/navigation/content/map-nodes/node.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/content/map-node.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/MapNode/Chooser.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/remote-copy-modal.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/MapNode/MultipleActions.tsx","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/content/map-node.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/link-to-modal.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/MapNode/PathActions.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/TableOverview/EditTableActions.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/TableOverview/DatalensButton.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/TableOverview/TableOverview.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/OffsetSelectorModal/OffsetSelectorModal.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/TableOverview/TableColumnsPresetNotice.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/Table.js","webpack://@ytsaurus/ui/./src/ui/components/TTLInfo/TTLInfo.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/modals/CreateTableModal/CreateTableModal.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/MapNode/MapNodesTable.js","webpack://@ytsaurus/ui/./src/ui/components/ElementsTable/hocs/withKeyboardNavigation.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Table/UploadManager/UploadManagerCreate.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/MapNode/NodesTypes/NodesTypes.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/modals/create-aco.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/UploadFileManager/UploadFileManagerFileSettingsForm.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/UploadFileManager/UploadFileManager.tsx","webpack://@ytsaurus/ui/./src/ui/containers/UploadFileManager/useUploadFileManager.ts","webpack://@ytsaurus/ui/./src/ui/containers/UploadFileManager/uploadFile.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/MapNode/MapNode.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/content/document.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/content/document.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Document/DocumentBody.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Document/DocumentEditModal.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Document/Document.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Document/DocumentWithRum.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/content/transaction.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/Transaction/Transaction.js","webpack://@ytsaurus/ui/./src/ui/utils/navigation/content/transaction-map/transaction.js","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/content/transaction-map.js","webpack://@ytsaurus/ui/./src/ui/utils/navigation/content/transaction-map/table.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/content/transaction-map.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/content/TransactionMap/TransactionMap.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/Navigation/ContentViewer/helpers/getComponentByContentType.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/tabs/queue.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/tabs/consumer.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/consumer/filters.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/QueueError.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Consumer/TargetQueue/TargetQueue.tsx","webpack://@ytsaurus/ui/./src/ui/components/Multimeter/BarChart.tsx","webpack://@ytsaurus/ui/./src/ui/components/Multimeter/Multimeter.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Consumer/Meta/Meta.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Consumer/Toolbar/Toolbar.tsx","webpack://@ytsaurus/ui/./src/ui/store/api/navigation/tabs/consumer/consumer.ts","webpack://@ytsaurus/ui/./src/ui/utils/navigation/tabs/make-cluster-select-options-same-env.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Consumer/modals/RegisterDialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/utils/column-builder.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Consumer/views/Partitions/Partitions.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/consumer/partitions.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Consumer/views/Partitions/PartitionsExtraControls.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Consumer/Consumer.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Consumer/views/ConsumerMetrics/ConsumerMetrics.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/consumer/status.ts","webpack://@ytsaurus/ui/./src/ui/components/Alerts/Alerts.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/Meta/Meta.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/queue/filters.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/Toolbar/Toolbar.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/QueueMetrics/QueueMetrics.tsx","webpack://@ytsaurus/ui/./src/ui/store/api/navigation/tabs/queue/consumers.ts","webpack://@ytsaurus/ui/./src/ui/store/api/navigation/tabs/queue/exports.ts","webpack://@ytsaurus/ui/./src/ui/store/api/navigation/tabs/queue/queue.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Consumers/utils.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Consumers/CreateConsumerDialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Consumers/UnregisterConsumerDialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Consumers/RegisterConsumerDialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Consumers/Consumers.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Consumers/ConsumersExtraControls.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Partitions/Partitions.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/queue/partitions.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Partitions/PartitionsExtraControls.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Exports/ExportsEditDialog/utils/prepareValues.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Exports/ExportsEditDialog/utils/validate.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Exports/ExportsEditDialog/ExportsEditDialog.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Exports/ExportsEditDialog/utils/consts.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Exports/ExportsEdit/ExportsEdit.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Exports/Exports.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/Queue.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Exports/ExportsExtraControls.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Queue/views/Exports/use-exports.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/queue/status.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/locks.js","webpack://@ytsaurus/ui/./src/ui/utils/clusters.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/tabs/locks.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Locks/Locks.js","webpack://@ytsaurus/ui/./src/ui/components/ErrorIcon/ErrorIcon.tsx","webpack://@ytsaurus/ui/./src/ui/components/MarkdownLinePreview/MarkdownLinePreview.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Schema/ExternalDescription/ExternalDescription.tsx","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Schema/Schema.tsx","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/schema.js","webpack://@ytsaurus/ui/./src/ui/utils/navigation/tabs/tablets.js","webpack://@ytsaurus/ui/./src/ui/utils/navigation/tabs/tables.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/tabs/tablets.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/tabs/tablets-ts.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/tablets.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Tablets/Tablets.js","webpack://@ytsaurus/ui/./src/ui/store/selectors/navigation/tabs/attributes.ts","webpack://@ytsaurus/ui/./src/ui/store/actions/navigation/tabs/attributes/attributes.ts","webpack://@ytsaurus/ui/./src/ui/pages/navigation/tabs/Attributes/Attributes.tsx","webpack://@ytsaurus/ui/./src/ui/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/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/utils/navigation/isLinkToTrashNode.ts","webpack://@ytsaurus/ui/./src/ui/rum/rum-app-measures.ts","webpack://@ytsaurus/ui/./src/ui/utils/yql-types.ts","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/Ellipsis.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/i18n/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/ChevronLeft.js","webpack://@ytsaurus/ui/./src/ui/components/TextInputWithDebounce/TextInputWithDebounce.tsx","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/./src/ui/hocs/withSplit.tsx","webpack://@ytsaurus/ui/./src/ui/components/SortIcon/SortIcon.tsx","webpack://@ytsaurus/ui/./src/ui/components/Pagination/Pagination.js","webpack://@ytsaurus/ui/./src/ui/components/LoadDataHandler/LoadDataHandler.tsx","webpack://@ytsaurus/ui/./src/ui/hooks/use-side-panel.tsx","webpack://@ytsaurus/ui/./src/ui/components/formatters/FormattedLink.js","webpack://@ytsaurus/ui/./src/ui/components/formatters/FormattedTextOrLink.js","webpack://@ytsaurus/ui/./src/ui/components/formatters/FormattedId/FormattedId.js","webpack://@ytsaurus/ui/./src/ui/components/formatters/index.js","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/utils/cn.js","webpack://@ytsaurus/ui/./src/ui/components/EditableAsText/EditableAsText.tsx","webpack://@ytsaurus/ui/./src/ui/components/WarningIcon/WarningIcon.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/esm/ChevronRight.js","webpack://@ytsaurus/ui/./src/ui/components/ColumnSelector/ColumnSelector.js","webpack://@ytsaurus/ui/./src/ui/utils/navigation/isTrashNode.ts","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","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/uikit/build/esm/components/Card/Card.js","webpack://@ytsaurus/ui/./src/ui/components/Favourites/Favourites.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/chartkit/build/utils/common.js","webpack://@ytsaurus/ui/./src/ui/pages/navigation/helpers/pathToFileName.ts","webpack://@ytsaurus/ui/./src/ui/store/selectors/modals/cell-preview.ts","webpack://@ytsaurus/ui/./src/ui/containers/CellPreviewModal/CellPreviewModal.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/./node_modules/@gravity-ui/icons/esm/ArrowUpRightFromSquare.js","webpack://@ytsaurus/ui/./src/ui/components/AttributesButton/AttributesButton.tsx","webpack://@ytsaurus/ui/./src/ui/components/CollapsibleSection/CollapsibleSection.tsx"],"sourcesContent":["const SvgQueueConsumer = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" viewBox=\"0 0 16 16\" {...props}><g clipPath=\"url(#queue-consumer_svg__a)\"><path d=\"M12.154 2.004A3 3 0 0 1 15 5v2H6.25v2h2.5v1.5h-2.5v2h2.5V14H4l-.154-.004a3 3 0 0 1-2.842-2.842L1 11V5a3 3 0 0 1 2.846-2.996L4 2h8zM2.5 11A1.5 1.5 0 0 0 4 12.5h.75v-2H2.5zm0-2h2.25V7H2.5zM4 3.5A1.5 1.5 0 0 0 2.5 5v.5h2.25v-2zm2.25 2h7.25V5A1.5 1.5 0 0 0 12 3.5H6.25z\" /><path stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M15.125 11.283a.25.25 0 0 1 .055.39l-.055.044-3 1.731a.25.25 0 0 1-.375-.216V9.768a.25.25 0 0 1 .312-.243l.063.027z\" /></g><defs><clipPath id=\"queue-consumer_svg__a\"><path d=\"M0 0h16v16H0z\" /></clipPath></defs></svg>;\nexport default SvgQueueConsumer;","const SvgQueueProducer = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" viewBox=\"0 0 16 16\" {...props}><path d=\"M12.154 2.004A3 3 0 0 1 15 5v2H6.25v2h2.5v1.5h-2.5v2h2.5V14H4l-.154-.004a3 3 0 0 1-2.842-2.842L1 11V5a3 3 0 0 1 2.846-2.996L4 2h8zM2.5 11A1.5 1.5 0 0 0 4 12.5h.75v-2H2.5zm0-2h2.25V7H2.5zM4 3.5A1.5 1.5 0 0 0 2.5 5v.5h2.25v-2zm2.25 2h7.25V5A1.5 1.5 0 0 0 12 3.5H6.25z\" /><path stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"m11 12 1.6 2 2.4-4\" /></svg>;\nexport default SvgQueueProducer;","import React from 'react';\nimport {Icon as GravityIcon} from '@gravity-ui/uikit';\n\nimport hammer from '../../common/hammer';\nimport ypath from '../../common/thor/ypath';\n\nimport Icon from '../../components/Icon/Icon';\n\nimport UIFactory from '../../UIFactory';\n\nimport {getIconNameForType} from '../../utils/navigation/path-editor';\nimport {isTrashNode} from '../../utils/navigation/isTrashNode';\nimport {isLinkToTrashNode} from '../../utils/navigation/isLinkToTrashNode';\n\nimport QueueConsumerIcon from '../../assets/img/svg/icons/queue-consumer.svg';\nimport QueueProducerIcon from '../../assets/img/svg/icons/queue-producer.svg';\n\nimport type {BaseMapNode} from '../../utils/navigation/content/map-nodes/node';\n\nimport './MapNodeIcon.scss';\n\nexport function MapNodeIcon({node}: {node: BaseMapNode}) {\n const item = ypath.getAttributes(node);\n const iconType = item?.type === 'table' && item?.dynamic ? 'table_dynamic' : item?.type;\n let icon = UIFactory.getNavigationMapNodeSettings()?.renderNodeIcon(node);\n\n if (icon) {\n // do nothing\n } else if (isTrashNode(item?.path) || isLinkToTrashNode(item?.targetPath)) {\n icon = <Icon awesome=\"trash-alt\" />;\n } else {\n icon = <Icon awesome={getIconNameForType(iconType, item.targetPathBroken)} />;\n }\n\n let title = hammer.format['ReadableField'](item.type);\n if (iconType === 'table') {\n title = 'Static table';\n }\n\n if (iconType === 'table_dynamic') {\n if (item?.sorted) {\n title = 'Dynamic table';\n } else {\n title = 'Queue table';\n icon = <Icon awesome=\"queue-table\" />;\n }\n }\n\n if (item?.treat_as_queue_consumer) {\n title = 'Queue consumer';\n icon = <GravityIcon data={QueueConsumerIcon} />;\n }\n\n if (item?.treat_as_queue_producer) {\n title = 'Queue producer';\n icon = <GravityIcon data={QueueProducerIcon} />;\n }\n\n return (\n <span className={'icon-wrapper'} title={title}>\n {icon}\n </span>\n );\n}\n","export const ROWS_PER_PAGE = 100;\n","const SvgBarsDescendingAlignLeft = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M1 3.25a.75.75 0 0 1 .75-.75h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 3.25M1 8a.75.75 0 0 1 .75-.75h8.5a.75.75 0 0 1 0 1.5h-8.5A.75.75 0 0 1 1 8m.75 4a.75.75 0 0 0 0 1.5h2.5a.75.75 0 0 0 0-1.5z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgBarsDescendingAlignLeft;","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 14M6.53 5.47a.75.75 0 0 0-1.06 1.06L6.94 8 5.47 9.47a.75.75 0 1 0 1.06 1.06L8 9.06l1.47 1.47a.75.75 0 1 0 1.06-1.06L9.06 8l1.47-1.47a.75.75 0 1 0-1.06-1.06L8 6.94z\", clipRule: \"evenodd\" })));\nexport default CircleXmarkFill;\n","import * as React from 'react';\nconst CircleXmark = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M13.5 8a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0M15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0M6.53 5.47a.75.75 0 0 0-1.06 1.06L6.94 8 5.47 9.47a.75.75 0 1 0 1.06 1.06L8 9.06l1.47 1.47a.75.75 0 1 0 1.06-1.06L9.06 8l1.47-1.47a.75.75 0 1 0-1.06-1.06L8 6.94z\", clipRule: \"evenodd\" })));\nexport default CircleXmark;\n","import * as React from 'react';\nconst CircleInfoFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14m1-9.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0M8 7.75a.75.75 0 0 1 .75.75V11a.75.75 0 0 1-1.5 0V8.5A.75.75 0 0 1 8 7.75\", clipRule: \"evenodd\" })));\nexport default CircleInfoFill;\n","import * as React from 'react';\nconst CircleCheckFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14m3.1-8.55a.75.75 0 1 0-1.2-.9L7.419 8.858 6.03 7.47a.75.75 0 0 0-1.06 1.06l2 2a.75.75 0 0 0 1.13-.08z\", clipRule: \"evenodd\" })));\nexport default CircleCheckFill;\n","import * as React from 'react';\nconst TriangleExclamationFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M5.835 2.244c.963-1.665 3.367-1.665 4.33 0l4.916 8.505c.964 1.666-.24 3.751-2.164 3.751H3.083c-1.925 0-3.128-2.085-2.165-3.751zM8 5a.75.75 0 0 1 .75.75v2a.75.75 0 1 1-1.5 0v-2A.75.75 0 0 1 8 5m1 5.75a1 1 0 1 1-2 0 1 1 0 0 1 2 0\", clipRule: \"evenodd\" })));\nexport default TriangleExclamationFill;\n","import * as React from 'react';\nconst ThunderboltFill = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", d: \"m14.61 6.914-7.632 8.08a1.614 1.614 0 0 1-2.69-1.66L5.5 10H2.677A1.677 1.677 0 0 1 1.12 7.7l2.323-5.807A2.22 2.22 0 0 1 5.5.5h4c.968 0 1.637.967 1.298 1.873L10 4.5h3.569a1.431 1.431 0 0 1 1.04 2.414\" })));\nexport default ThunderboltFill;\n","import { addComponentKeysets } from '../../../i18n';\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 axios, {AxiosResponse, CancelToken} from 'axios';\nimport {YTError} from '../@types/types';\n\nexport const TABLET_ERRORS_MANAGER_POST_ACTIONS = new Set([\n 'tablet_errors_by_bundle',\n 'tablet_errors_by_table',\n 'tablet_errors_by_table_and_timestamp',\n] as const);\n\nexport type TabletErrorsManagerPostActionType = Parameters<\n (typeof TABLET_ERRORS_MANAGER_POST_ACTIONS)['add']\n>[0];\n\nexport type MethodCount = {\n method: string;\n count: number;\n};\n\nexport type TableMethodErrorsCount = {\n table_path: string;\n last_error_timestamp: number;\n method_counts: Record<string, number>;\n};\n\nexport type TabletErrorsByBundleResponse = {\n all_methods: Array<string>;\n presented_methods: Array<string>;\n errors: Array<TableMethodErrorsCount>;\n fixed_end_timestamp: unknown;\n total_row_count: number;\n};\n\nexport type TabletErrorsBaseParams = {\n start_timestamp: number;\n end_timestamp: number;\n methods?: Array<string>;\n count_limit: number;\n offset: number;\n fixed_end_timestamp?: unknown;\n};\n\nexport type TabletMethodError = {\n tablet_id: string;\n timestamp: number;\n method: string;\n error: YTError;\n};\n\nexport type MethodErrors = {\n method: string;\n errors: Array<TabletError>;\n fixed_end_timestamp: number;\n total_row_count: number;\n all_methods: Array<string>;\n error_count_limit_exceeded?: boolean;\n};\n\nexport type TabletError = {\n tablet_id: string;\n timestamp: number;\n error: YTError;\n method: string;\n host: string;\n};\n\nexport type TabletErrorsApi = {\n tablet_errors_by_bundle: {\n body: TabletErrorsBaseParams & {tablet_cell_bundle: string; table_path?: string};\n response: TabletErrorsByBundleResponse;\n };\n tablet_errors_by_table: {\n body: TabletErrorsBaseParams & {table_path: string; table_id: string; tablet_id?: string};\n response: MethodErrors;\n };\n tablet_errors_by_table_and_timestamp: {\n body: TabletErrorsBaseParams & {table_id: string};\n response: Array<TabletMethodError>;\n };\n};\n\nexport function fetchFromTabletErrorsApi<K extends keyof TabletErrorsApi>(\n action: K,\n cluster: string,\n params: TabletErrorsApi[K]['body'],\n cancelToken: CancelToken,\n): Promise<AxiosResponse<TabletErrorsApi[K]['response']>> {\n type ApiMethod = TabletErrorsApi[K];\n\n return axios.post<\n ApiMethod['response'],\n AxiosResponse<ApiMethod['response']>,\n ApiMethod['body']\n >(`/api/tablet-errors/${cluster}/${action}`, {...params, cluster}, {cancelToken});\n}\n","const SvgModalNoContent = props => <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 194 194\" {...props}><g fill=\"none\" fillRule=\"evenodd\" stroke=\"#999\" opacity={0.22}><path strokeWidth={2} d=\"M97.116 188.443h1v1h-1zM96.424 185.293h1.1v1h-1.1zM95.374 182.143h2.34v1h-2.34zM94.324 178.993h4.2v1h-4.2zM93.273 175.842h6.679v1h-6.679zM91.173 172.692h9.779v1h-9.779zM89.597 169.542h13.499v1H89.597zM87.496 166.391h17.839v1H87.496zM84.871 163.241h22.798v1H84.871zM81.719 160.091h28.998v1H81.719zM78.043 156.94h35.817v1H78.043zM73.842 153.623h45.117v1H73.842z\" /><ellipse cx={96.77} cy={96.61} strokeWidth={8} rx={92.403} ry={92.61} /><ellipse cx={96.669} cy={96.371} strokeWidth={4} rx={37.057} ry={37.141} /><ellipse cx={97.269} cy={96.915} strokeWidth={8} rx={11.499} ry={11.532} /><path strokeLinecap=\"square\" strokeWidth={4} d=\"M34.504 34.653 66.12 66.34\" /><path strokeDasharray=\"8,8\" strokeWidth={4} d=\"M33.023 44.104V148.48M160.116 44.104V148.48\" /><path strokeLinecap=\"square\" strokeWidth={4} d=\"M159.603 34.653 127.986 66.34M34.504 159.798l31.617-31.685M159.603 159.798l-31.617-31.685\" /></g></svg>;\nexport default SvgModalNoContent;","import React from 'react';\nimport hammer from '../../common/hammer';\nimport block from 'bem-cn-lite';\n\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport Modal from '../Modal/Modal';\nimport ColumnSelector, {makeItemsCopy} from '../ColumnSelector/ColumnSelector';\nimport NoContentImage from '../../assets/img/svg/modal-no-content.svg';\n\nimport './ColumnSelectorModal.scss';\n\nconst b = block('column-selector-modal');\n\nexport type ColumnSelectorModalProps<DataT> = {\n items: Array<ColumnSelectorItem<DataT>>;\n srcItems: Array<ColumnSelectorItem<DataT>>;\n isVisible?: boolean;\n onChange: (items: Array<ColumnSelectorItem<DataT>>) => void;\n onConfirm: (items: Array<ColumnSelectorItem<DataT>>) => void;\n onCancel: () => void;\n\n itemRenderer: (item: ColumnSelectorItem<DataT>) => React.ReactNode;\n entity: string;\n};\n\nexport type ColumnSelectorItem<DataT> = {\n name: string;\n checked: boolean;\n data: DataT;\n disabled?: boolean;\n keyColumn?: boolean;\n};\n\ntype Props<T> = ColumnSelectorModalProps<T>;\n\ntype State<T> = Pick<Props<T>, 'items' | 'srcItems'> & {itemsOrder: Array<string>};\n\nexport default class ColumnSelectorModal<T = never> extends React.Component<Props<T>, State<T>> {\n static defaultProps: Partial<Props<unknown>> = {\n entity: 'columns',\n };\n\n state: State<T> = {\n srcItems: this.props.srcItems || this.props.items,\n items: makeItemsCopy(this.props.items),\n itemsOrder: this._getItemsOrder(this.props.items),\n };\n\n // in React 16.3 there is another way to do it: getDerivedStateFromProps;\n // revise this place once received data is managed by Redux\n componentDidUpdate(prevProps: Props<T>) {\n const {items, srcItems} = this.props;\n if (prevProps.items !== items || prevProps.srcItems !== srcItems) {\n // don't update itemsOrder\n this.setState({\n srcItems: srcItems || this.props.items,\n items: this._getOrderedItems(makeItemsCopy(items)),\n });\n }\n }\n\n _handleCONFIRMButtonClick = () => {\n const {items} = this.state;\n this.props.onConfirm(items);\n };\n\n _handleCANCELButtonClick = () => {\n const {items} = this.props;\n const order = this._getItemsOrder(items);\n // reset state to initial on cancel\n this.setState({\n items: this._getOrderedItems(makeItemsCopy(items)),\n itemsOrder: order,\n });\n this.props.onCancel();\n };\n\n _getItemsOrder(items: Props<T>['items']) {\n return map_(items, (item) => item.name);\n }\n\n _getOrderedItems(items: Props<T>['items'], order = this.state.itemsOrder) {\n return items.sort((a, b) => order.indexOf(a.name) - order.indexOf(b.name));\n }\n\n _getSelectorProps<P>(props: P, items: Props<T>['items']) {\n return {\n ...props,\n items,\n showDisabledItems: true,\n isHeadless: false,\n isFilterable: true,\n onChange: this.onSourceChange,\n };\n }\n\n _getSortableSelectorProps<P>(props: P, items: Props<T>['items']) {\n return {\n ...props,\n items,\n isSelectable: false,\n isSortable: true,\n showSelectedOnly: true,\n onChange: this.onDestinationChange,\n };\n }\n\n calculateSrcItems(newItemsMap: Record<string, ColumnSelectorItem<T>>) {\n return map_(this.state.srcItems, (item) => {\n const newItem = newItemsMap[item.name];\n\n if (newItem && newItem.checked !== item.checked) {\n return newItem;\n }\n\n return item;\n });\n }\n\n onSourceChange = ({items: newItems}: Pick<Props<T>, 'items'>) => {\n const {items} = this.state;\n const newItemsMap = reduce_(\n newItems,\n (acc, data) => {\n acc[data.name] = data;\n return acc;\n },\n {} as Record<string, ColumnSelectorItem<T>>,\n );\n\n const unchanged: Props<T>['items'] = [];\n const changed: Props<T>['items'] = [];\n forEach_(items, (item) => {\n const newItem = newItemsMap[item.name];\n if (newItem && newItem.checked !== item.checked) {\n const dst = newItem.keyColumn ? unchanged : changed;\n dst.push(newItem);\n } else {\n unchanged.push(item);\n }\n });\n\n const preparedItems = unchanged.concat(changed);\n // don't update itemsOrder\n this.setState({\n items: this._getOrderedItems(preparedItems),\n srcItems: this.calculateSrcItems(newItemsMap),\n });\n };\n\n onDestinationChange = ({items: newItems}: Pick<Props<T>, 'items'>) => {\n const newItemsMap = reduce_(\n newItems,\n (acc, data) => {\n acc[data.name] = data;\n return acc;\n },\n {} as Record<string, ColumnSelectorItem<T>>,\n );\n\n const order = this._getItemsOrder(newItems);\n\n this.setState({\n items: this._getOrderedItems(newItems, order),\n itemsOrder: order,\n srcItems: this.calculateSrcItems(newItemsMap),\n });\n };\n\n renderColumnSelector({\n props,\n title,\n description,\n className,\n }: {\n props: object;\n title: string;\n description: string;\n className?: string;\n }) {\n return (\n <ColumnSelector {...props} className={className}>\n <div className={b('no-content')}>\n <p>\n <strong>{title}</strong>\n </p>\n <p>{description}</p>\n <NoContentImage />\n </div>\n </ColumnSelector>\n );\n }\n\n renderContent() {\n const {isVisible, entity, ...rest} = this.props; // eslint-disable-line\n const {items, srcItems} = this.state;\n\n const headingCN = block('elements-heading')({size: 's'}, b('header'));\n\n const selectorProps = this._getSelectorProps(rest, srcItems);\n const sortableSelectorProps = this._getSortableSelectorProps(selectorProps, items);\n const selectedItemsCount = reduce_(\n sortableSelectorProps.items,\n (acc, item) => (item.disabled || !item.checked ? acc : ++acc),\n 0,\n );\n\n return (\n isVisible && (\n <div className={b()}>\n <div className={b('panel', {left: 'yes'})}>\n <div className={headingCN}>\n All &nbsp;\n <span className=\"elements-secondary-text\">{srcItems.length}</span>\n </div>\n\n {this.renderColumnSelector({\n props: selectorProps,\n title: `No available ${entity}`,\n description: `No ${entity} matching your filtering criteria`,\n })}\n </div>\n\n <div className={b('panel')}>\n <div className={headingCN}>\n Selected &nbsp;\n <span className=\"elements-secondary-text\">{selectedItemsCount}</span>\n </div>\n\n {this.renderColumnSelector({\n props: sortableSelectorProps,\n title: `No selected ${entity}`,\n description: `Add ${entity} you need from the All section.`,\n })}\n </div>\n </div>\n )\n );\n }\n\n render() {\n const {isVisible, entity} = this.props;\n const title = `${hammer.format['FirstUppercase'](entity)} setup`;\n\n return (\n <Modal\n size=\"l\"\n title={title}\n borderless={true}\n visible={isVisible}\n confirmText=\"Apply\"\n onConfirm={this._handleCONFIRMButtonClick}\n onCancel={this._handleCANCELButtonClick}\n content={this.renderContent()}\n contentClassName=\"column-selector-modal-content\"\n />\n );\n }\n}\n","import 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 cn from 'bem-cn-lite';\n\nimport filter_ from 'lodash/filter';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\n\nimport type {EditableManyListsItemType} from '../../../../components/Dialog';\nimport type {ResponsibleType, RoleConverted, Subject} from '../../../../utils/acl/acl-types';\nimport type {PreparedRole} from '../../../../utils/acl';\nimport {RoleListControlProps} from './RoleListControl';\n\nexport const block = cn('role-list-control');\n\nexport function prepareRoleListValue(roles: Array<PreparedRole>, otherMembers: Array<string> = []) {\n const current: typeof roles = [];\n const toAdd: typeof roles = [];\n const toRemove: typeof roles = [];\n const unrecognized: typeof roles = [];\n forEach_(roles, (item) => {\n const {isUnrecognized, isRequested, isApproved, isDepriving} = item;\n if (isUnrecognized) {\n unrecognized.push(item);\n } else if (isDepriving) {\n toRemove.push(item);\n } else if (isApproved || isRequested) {\n toAdd.push(item);\n } else {\n current.push(item);\n }\n });\n\n const currentArr = current.map((item) => prepareItemOfCurrent(item));\n const otherArr = otherMembers.map((item) => ({\n title: item,\n data: {},\n frozen: true,\n }));\n\n return {\n newItems: [],\n current: {title: 'Current', data: currentArr.concat(otherArr)},\n toAdd: {\n title: 'Will be added',\n itemClassName: block('item-to-add'),\n data: toAdd.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n toRemove: {\n title: 'Will be removed',\n itemClassName: block('item-to-remove'),\n data: toRemove.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n unrecognized: {\n title: 'Unrecognized',\n itemClassName: block('item-unrecognized'),\n data: unrecognized.map((item) => prepareItemOfCurrent(item, {frozen: true})),\n },\n };\n}\n\nfunction prepareItemOfCurrent(role: PreparedRole, extraProps: any = {}) {\n return {\n title: role.text || role.value,\n data: role,\n ...extraProps,\n };\n}\n\nexport function roleListValueToSubjectList(\n value: RoleListControlProps['value'],\n): Array<ResponsibleType> {\n const {current, newItems, toAdd} = value;\n return [\n ...newItems,\n ...manyListDataItemToSubjectList(current),\n ...manyListDataItemToSubjectList(toAdd),\n ];\n}\n\nfunction manyListDataItemToSubjectList(\n manyListDataItem: EditableManyListsItemType<RoleConverted>,\n): Array<ResponsibleType> {\n const {data} = manyListDataItem || {};\n return map_(\n filter_(data, ({removed}) => !removed),\n ({data}) => {\n const {type, value} = data || {};\n return {type: type!, value: value!};\n },\n );\n}\n\nexport function extractChangedSubjects(value: {\n current: EditableManyListsItemType<RoleConverted>;\n newItems: Array<ResponsibleType>;\n}): {\n added: Subject[];\n removed: Subject[];\n} {\n const {current, newItems} = value;\n const added = newItems || [];\n const removed = ((current && current.data) || []).filter(({removed}) => removed);\n return {\n added: added.map(({type, value}) => {\n return type === 'users' ? {user: value} : {group: value};\n }),\n removed: removed.map(({data}) => {\n const {value, type} = data || {};\n return type === 'users' ? {user: value!} : {group: value!};\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 cn from 'bem-cn-lite';\n\nimport type {FORM_ERROR as FormErrorType} from './index';\n\nimport {FIX_MY_TYPE, YTError} from '../../types';\nimport {YTErrorBlock} from '../../components/Block/Block';\n\nimport compact_ from 'lodash/compact';\nimport map_ from 'lodash/map';\n\nconst block = cn('yt-dialog-error');\n\nexport function DialogError(props: FIX_MY_TYPE) {\n return <YTErrorBlock {...props} className={block()} />;\n}\n\nexport function makeErrorFields(errors: Array<YTError | Error | undefined>) {\n return compact_(\n map_(errors, (error, index) => {\n return error\n ? {\n name: `error_${index}`,\n type: 'block' as const,\n extras: {\n children: <DialogError error={error} />,\n },\n }\n : undefined;\n }),\n );\n}\n\nconst FORM_ERROR: typeof FormErrorType = 'FINAL_FORM/form-error';\n\nexport function makeFormSubmitError(error: YTError) {\n return {\n validationErrors: {\n [FORM_ERROR]: <DialogError error={error} />,\n },\n };\n}\n","import React from 'react';\nimport withLazyLoading from '../../hocs/withLazyLoading';\nimport {withDelayedMount} from '../../hocs/withDelayedMount';\n\nimport type {\n registerDialogControl as RegisterDialogControlFn,\n registerDialogTabControl as RegisterDialogTabControlFn,\n YTDialogType,\n} from './Dialog';\n\nexport type * from './Dialog';\nexport * from './DialogError';\nexport * from './controls/RoleListControl/utils';\n\nexport function importYTDFDialog() {\n return import(/* webpackChunkName: \"yt-df-dialog\" */ './Dialog');\n}\n\nexport const YTDFDialog = withDelayedMount(\n withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).YTDialog};\n }),\n '',\n ),\n) as YTDialogType;\n\nexport function useControlRegistration(\n fn: (params: {\n registerDialogControl: typeof RegisterDialogControlFn;\n registerDialogTabControl: typeof RegisterDialogTabControlFn;\n }) => void,\n) {\n importYTDFDialog().then(({registerDialogControl, registerDialogTabControl}) => {\n fn({registerDialogControl, registerDialogTabControl});\n });\n}\n\nexport type {RoleListControlProps} from './controls/RoleListControl/RoleListControl';\nexport const RoleListControl = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).RoleListControl};\n }),\n '',\n);\n\nexport const EditableList = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).EditableList};\n }),\n '',\n);\n\nexport const TabFieldVertical = withLazyLoading(\n React.lazy(async () => {\n return {default: (await importYTDFDialog()).TabFieldVertical};\n }),\n '',\n);\n","import React from 'react';\n\n/**\n * The hoc allows to delay mounting until `props.visible == true`.\n * The hoc might be useful to wrap components wrapped by React.lazy\n * @param Component\n * @returns\n */\nexport function withDelayedMount<P extends {visible?: boolean}>(Component: React.ComponentType<P>) {\n return function MountOnFirstVisible(props: P) {\n const [mounted, setMounted] = React.useState(false);\n React.useEffect(() => {\n if (!mounted && props.visible) {\n setMounted(true);\n }\n }, [props.visible, mounted]);\n return !mounted ? null : <Component {...props} />;\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","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 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 {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","// @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, {Component} from 'react';\nimport {ResolveThunks, connect} from 'react-redux';\n// @ts-expect-error\nimport ypath from '@ytsaurus/interface-helpers/lib/ypath';\nimport {compose} from 'redux';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {MapNodeIcon} from '../../../../../components/MapNodeIcon/MapNodeIcon';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport MetaTable from '../../../../../components/MetaTable/MetaTable';\nimport HelpLink from '../../../../../components/HelpLink/HelpLink';\nimport {Checkbox, Loader} from '@gravity-ui/uikit';\nimport {YTErrorBlock} from '../../../../../components/Error/Error';\nimport Modal from '../../../../../components/Modal/Modal';\nimport Label from '../../../../../components/Label/Label';\n\nimport {\n closeDeleteModal,\n deleteObject,\n deleteObjects,\n getRealPath,\n getRealPaths,\n togglePermanentlyDelete,\n} from '../../../../../store/actions/navigation/modals/delete-object';\nimport withScope from '../../../../../hocs/components/Modal/withScope';\nimport {checkIsTrash} from '../../../../../store/selectors/navigation';\nimport hammer from '../../../../../common/hammer';\n\nimport './DeleteObjectModal.scss';\nimport UIFactory from '../../../../../UIFactory';\nimport type {RootState} from '../../../../../store/reducers';\nimport {DeleteObjectItem} from '../../../../../store/reducers/navigation/modals/delete-object';\n\nconst block = cn('navigation-delete-object-modal');\n\ntype OwnProps = {};\n\ntype StateProps = ReturnType<typeof mapStateToProps>;\n\ntype DispatchProps = ResolveThunks<typeof mapDispatchToProps>;\n\ntype DeleteObjectModalProps = OwnProps & StateProps & DispatchProps;\n\nexport class DeleteObjectModal extends Component<DeleteObjectModalProps> {\n componentDidUpdate(prevProps: DeleteObjectModalProps) {\n const {visible, item, getRealPath, getRealPaths, multipleMode} = this.props;\n\n if (!prevProps.visible && visible) {\n if (multipleMode) {\n getRealPaths(item as DeleteObjectItem[]);\n } else {\n getRealPath(item as DeleteObjectItem);\n }\n }\n }\n\n get content() {\n const {loadingRealPath, errorRealPath, error, multipleMode} = this.props;\n\n if (loadingRealPath) {\n return this.renderLoader();\n } else if (errorRealPath || error) {\n return this.renderError();\n }\n\n return multipleMode ? this.renderMultipleModeContent() : this.renderContent();\n }\n\n handleDeleteClick = () => {\n const {multipleMode, deleteObject, deleteObjects} = this.props;\n\n if (multipleMode) {\n deleteObjects();\n } else {\n deleteObject();\n }\n };\n\n renderLoader() {\n return (\n <div className={block({loading: true})}>\n <Loader />\n </div>\n );\n }\n\n renderError() {\n const {error, errorData, errorDataRealPath} = this.props;\n const errorContent = error ? errorData : errorDataRealPath;\n\n return (\n <div className={block({error: true})}>\n <YTErrorBlock error={errorContent} />\n </div>\n );\n }\n\n renderPermanentlyCheckbox() {\n const {permanently, togglePermanentlyDelete, inTrash} = this.props;\n\n return (\n <p className={block('delete', {permanently})}>\n <Checkbox\n size=\"l\"\n disabled={inTrash}\n checked={permanently}\n content=\"Delete permanently\"\n onChange={togglePermanentlyDelete}\n />\n\n <Label theme=\"danger\" text=\"This action CANNOT be undone\" />\n </p>\n );\n }\n\n renderMultipleModeContent() {\n const {item, multipleInfo} = this.props;\n\n return (\n <ErrorBoundary>\n <div className={block({multiple: true})}>\n <div className={block('table')}>\n <div className={block('table-header')}>\n <div className={block('preview-icon')} />\n <div className={block('preview-name')}>Name</div>\n <div className={block('preview-disk-space')}>Disk space</div>\n <div className={block('preview-node-count')}>Node count</div>\n <div className={block('preview-node-count')}>Row count</div>\n </div>\n\n {map_(multipleInfo, ({path, resourceUsage}, index) => {\n const {type, titleUnquoted, rows, unmergedRows} = (\n item as DeleteObjectItem[]\n )[index];\n const diskSpace = ypath.get(resourceUsage, '/disk_space');\n const nodeCount = ypath.get(resourceUsage, '/node_count');\n\n return (\n <React.Fragment key={path}>\n <MapNodeIcon node={(item as DeleteObjectItem[])[index]} />\n <span title={path} className=\"elements-ellipsis\">\n {titleUnquoted}\n </span>\n <span>{hammer.format['Bytes'](diskSpace)}</span>\n <span>\n {type === 'table'\n ? hammer.format.NO_VALUE\n : hammer.format['Number'](nodeCount)}\n </span>\n <span>\n {unmergedRows\n ? `≈ ${hammer.format['Number'](unmergedRows)}`\n : hammer.format['Number'](rows)}\n </span>\n </React.Fragment>\n );\n })}\n </div>\n {this.renderPermanentlyCheckbox()}\n </div>\n </ErrorBoundary>\n );\n }\n\n renderContent() {\n const {item, resourceUsage} = this.props;\n const {type, rows, unmergedRows} = item as DeleteObjectItem;\n const diskSpace = ypath.get(resourceUsage, '/disk_space');\n const nodeCount = ypath.get(resourceUsage, '/node_count');\n\n const buildItems = () => {\n const items = [\n {\n key: 'Disk space',\n value: hammer.format['Bytes'](diskSpace),\n },\n ];\n\n switch (type) {\n case 'table':\n items.push({\n key: 'Rows',\n value: unmergedRows\n ? `≈ ${hammer.format['Number'](unmergedRows)}`\n : hammer.format['Number'](rows),\n });\n\n return items;\n\n case 'access_control_object':\n return [];\n\n default:\n items.push({\n key: 'Node count',\n value: hammer.format['Number'](nodeCount),\n });\n\n return items;\n }\n };\n\n return (\n <ErrorBoundary>\n <div className={block()}>\n <div className={block()}>\n <p className={block('object')}>\n <MapNodeIcon node={item as DeleteObjectItem} />\n <span className={block('path')}>{(item as DeleteObjectItem).path}</span>\n </p>\n\n <MetaTable className={block('meta')} items={buildItems()} />\n\n {this.renderPermanentlyCheckbox()}\n </div>\n </div>\n </ErrorBoundary>\n );\n }\n\n render() {\n const {visible, closeDeleteModal, permanently, loading} = this.props;\n const theme = permanently ? 'outlined-danger' : 'action';\n const helpLinkUrl = UIFactory.docsUrls['common:regular_system_processes'];\n const helpLink =\n helpLinkUrl !== '' ? <HelpLink text=\"Documentation\" url={helpLinkUrl} /> : null;\n const title = permanently ? 'Delete' : 'Move to trash';\n const confirmText = permanently ? 'Delete' : 'Move to trash';\n\n return (\n <Modal\n title={title}\n visible={visible}\n loading={loading}\n confirmTheme={theme}\n confirmText={confirmText}\n content={this.content}\n footerContent={helpLink}\n contentClassName={block('content')}\n onCancel={closeDeleteModal}\n onConfirm={this.handleDeleteClick}\n />\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n const {\n error,\n errorData,\n loading,\n visible,\n permanently,\n item,\n loadingRealPath,\n errorRealPath,\n errorDataRealPath,\n realPath,\n resourceUsage,\n multipleInfo,\n multipleMode,\n } = state.navigation.modals.deleteObject;\n const inTrash = checkIsTrash(state);\n\n return {\n error,\n errorData,\n visible,\n permanently,\n item,\n loading,\n loadingRealPath,\n errorRealPath,\n errorDataRealPath,\n realPath,\n multipleInfo,\n resourceUsage,\n multipleMode,\n inTrash,\n };\n};\n\nconst mapDispatchToProps = {\n getRealPath,\n deleteObject,\n deleteObjects,\n getRealPaths,\n closeDeleteModal,\n togglePermanentlyDelete,\n};\n\nexport default compose(\n connect(mapStateToProps, mapDispatchToProps),\n withScope('delete-object-modal'),\n)(DeleteObjectModal);\n","import React from 'react';\nimport {connect} from 'react-redux';\n\nimport {AccessContentAcl, NavigationAcl} from '../../../../containers/ACL';\nimport {getAclLoadState} from '../../../../store/selectors/acl';\nimport {getAttributes, getRawPath} from '../../../../store/selectors/navigation';\nimport {IdmObjectType} from '../../../../constants/acl';\nimport {useRumMeasureStop} from '../../../../rum/RumUiContext';\nimport {RumMeasureTypes} from '../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../utils/utils';\nimport {useAppRumMeasureStart} from '../../../../rum/rum-app-measures';\n\nconst AclTabParams = {\n [IdmObjectType.PATH]: {\n rumType: RumMeasureTypes.NAVIGATION_TAB_ACL,\n Component: NavigationAcl,\n },\n [IdmObjectType.ACCESS_CONTROL_OBJECT]: {\n rumType: RumMeasureTypes.NAVIGATION_TAB_ACL_ACCESS,\n Component: AccessContentAcl,\n },\n};\n\nconst makeComponentWithRum = (idmKind) => {\n const {rumType, Component} = AclTabParams[idmKind];\n const AclTabComponent = (props) => {\n useAppRumMeasureStart({\n type: rumType,\n startDeps: [props.loadState],\n allowStart: ([loadState]) => !isFinalLoadingStatus(loadState),\n });\n\n useRumMeasureStop({\n type: rumType,\n stopDeps: [props.loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <Component {...props} />;\n };\n return AclTabComponent;\n};\n\nconst makeMapStateToProps = (idmKind) => {\n return (state, props) => {\n const attributes = getAttributes(state);\n let {path} = attributes;\n if (!path) path = getRawPath(state);\n\n const isPrincipalACLtab =\n props.mode === 'content' && props.type === 'access_control_object';\n\n return {\n loadState: getAclLoadState(state, idmKind),\n path: path,\n idmKind: isPrincipalACLtab ? IdmObjectType.ACCESS_CONTROL_OBJECT : IdmObjectType.PATH,\n };\n };\n};\n\nfunction createACLTabComponent(idmKind) {\n const mapStateToProps = makeMapStateToProps(idmKind);\n const Component = makeComponentWithRum(idmKind);\n return connect(mapStateToProps)(Component);\n}\n\nexport default createACLTabComponent(IdmObjectType.PATH);\nexport const AccessAclTab = createACLTabComponent(IdmObjectType.ACCESS_CONTROL_OBJECT);\n","import {RumMeasureTypes} from '../../../../../rum/rum-measure-types';\nimport {RumWrapper} from '../../../../../rum/rum-wrap-api';\n\nexport function makeTableRumId({cluster, isDynamic}: {cluster: string; isDynamic: boolean}) {\n const measureId = isDynamic\n ? RumMeasureTypes.NAVIGATION_CONTENT_TABLE_DYNAMIC\n : RumMeasureTypes.NAVIGATION_CONTENT_TABLE_STATIC;\n return new RumWrapper(cluster, measureId);\n}\n","import axios from 'axios';\n\nimport map_ from 'lodash/map';\n\nimport {ThunkAction} from 'redux-thunk';\n\n// @ts-ignore\nimport unipika from '../../../../../common/thor/unipika';\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 {getMetrics} from '../../../../../common/utils/metrics';\nimport ypath from '../../../../../common/thor/ypath';\n\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {\n CHANGE_CELL_SIZE,\n CHANGE_PAGE_SIZE,\n CLOSE_COLUMN_SELECTOR_MODAL,\n GET_TABLE_DATA,\n LOAD_TYPE,\n OPEN_COLUMN_SELECTOR_MODAL,\n SET_COLUMNS,\n SET_COLUMNS_ORDER,\n SET_OFFSET,\n TOGGLE_FULL_SCREEN,\n} from '../../../../../constants/navigation/content/table';\n\nimport {updateView} from '../../../../../store/actions/navigation';\n\nimport CancelHelper from '../../../../../utils/cancel-helper';\nimport {openInNewTab, showErrorPopup} from '../../../../../utils/utils';\nimport {prepareRequest} from '../../../../../utils/navigation';\nimport Query from '../../../../../utils/navigation/content/table/query';\nimport Columns from '../../../../../utils/navigation/content/table/columns';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport {\n getColumnsValues,\n 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 getMetrics().countEvent('share_columns', hash);\n });\n };\n}\n\nexport function changePageSize(pageSize) {\n return (dispatch) => {\n dispatch({\n type: CHANGE_PAGE_SIZE,\n data: {pageSize},\n });\n dispatch(updateTableData());\n };\n}\n\nexport function changeCellSize(cellSize) {\n return (dispatch) => {\n dispatch({\n type: CHANGE_CELL_SIZE,\n data: {cellSize},\n });\n dispatch(updateTableData());\n };\n}\n\nexport function toggleFullScreen() {\n return (dispatch) => {\n dispatch(mergeScreen());\n dispatch({type: TOGGLE_FULL_SCREEN});\n };\n}\n\n// if we press esc button then the browser will automatically change state to non full screen\n// and we need as change value in the store\nexport function handleScreenChanged(isFullScreen) {\n return (dispatch, getState) => {\n const {isFullScreen: storedIsFullScreen} = getState().navigation.content.table;\n\n if (isFullScreen !== storedIsFullScreen) {\n dispatch(toggleFullScreen());\n }\n };\n}\n\nexport function mountUnmountTable(action) {\n return (dispatch, getState) => {\n const path = getPath(getState());\n\n getMetrics().countEvent('navigation_dynamic_table_action', action);\n\n return ytApiV3[`${action}Table`]({path})\n .then(() => {\n toaster.add({\n name: `${action} table`,\n theme: 'success',\n title: `Success ${action}ing table`,\n });\n return dispatch(updateView());\n })\n .catch((err) => {\n console.error(err);\n toaster.add({\n name: `${action} table`,\n theme: 'danger',\n title: `Could not ${action} table.`,\n content: err?.message || 'Oops, something went wrong',\n actions: [{label: ' view', onClick: () => showErrorPopup(err)}],\n });\n });\n };\n}\n\nexport function abortAndReset() {\n return (dispatch) => {\n requests.removeAllRequests();\n dispatch({type: GET_TABLE_DATA.CANCELLED});\n };\n}\n\nexport function decodeNameField(columns) {\n return map_(columns, (item) => {\n return {\n ...item,\n name: unipika.decode(item.name),\n };\n });\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\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 * as React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport FilePicker from '../FilePicker/FilePicker';\nimport useFileDragDrop from './useFileDragDrop';\n\nimport './FileDropZone.scss';\n\nconst block = cn('file-drop-zone');\n\ninterface FileDropZoneProps {\n isEmpty: boolean;\n isDropable: boolean;\n onFile: (files: FileList | null) => void;\n}\n\nexport const FileDropZone: React.FC<React.PropsWithChildren<FileDropZoneProps>> = ({\n isDropable,\n onFile,\n isEmpty,\n children,\n}) => {\n const {onDrop, onDragOver, onDragEnter, onDragLeave, isDragging} = useFileDragDrop(onFile);\n\n const renderContent = () => {\n if (children) {\n return children;\n }\n\n return (\n <div className={block('info')}>\n <div>{isDragging ? 'Drop file here' : 'Drag a file here'}</div>\n or\n <div>\n <FilePicker onChange={onFile}>Pick a file</FilePicker>\n </div>\n </div>\n );\n };\n\n return (\n <div\n className={block('drag-area', {\n dropable: isDropable,\n empty: isEmpty,\n dragging: isDragging,\n })}\n onDrop={onDrop}\n onDragEnter={onDragEnter}\n onDragLeave={onDragLeave}\n onDragOver={onDragOver}\n >\n {renderContent()}\n </div>\n );\n};\n\nexport default FileDropZone;\n","import * as React from 'react';\nimport {useCallback, useState} from 'react';\n\nexport const useFileDragDrop = (onFile: (files: FileList | null) => void) => {\n // Track drag state to provide visual feedback\n const [isDragging, setIsDragging] = useState(false);\n\n const onDragOver = useCallback((event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n }, []);\n\n const onDragEnter = useCallback((event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n setIsDragging(true);\n }, []);\n\n const onDragLeave = useCallback((event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n setIsDragging(false);\n }, []);\n\n const onDrop = useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n event.stopPropagation();\n setIsDragging(false);\n\n const {files} = event.dataTransfer;\n\n if (!files) {\n return;\n }\n\n onFile(files);\n },\n [onFile],\n );\n\n return {\n onDragOver,\n onDragEnter,\n onDragLeave,\n onDrop,\n isDragging,\n };\n};\n\nexport default useFileDragDrop;\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport {Progress} from '@gravity-ui/uikit';\nimport {calcProgressProps} from '../../utils/utils';\n\nimport './FileUploadProgress.scss';\n\nconst block = cn('file-upload-progress');\n\ninterface FileUploadProgressProps {\n event: {\n total?: number;\n loaded: number;\n };\n}\n\nexport const FileUploadProgress: React.FC<FileUploadProgressProps> = ({event}) => {\n const {total = 0, loaded = 0} = event;\n const progress = calcProgressProps(loaded, total, 'Bytes');\n\n return (\n <div className={block('progress')}>\n <div className={block('progress-wrapper')}>\n <Progress\n text={progress.text}\n stack={[\n {\n value: progress.value ?? 0,\n theme: 'info',\n },\n ]}\n />\n </div>\n </div>\n );\n};\n\nexport default FileUploadProgress;\n","import React from 'react';\nimport {compose} from 'redux';\nimport axios, {AxiosProgressEvent} from 'axios';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport format from '../../../../../common/hammer/format';\n\nimport withVisible, {WithVisibleProps} from '../../../../../hocs/withVisible';\nimport Button from '../../../../../components/Button/Button';\nimport Icon from '../../../../../components/Icon/Icon';\nimport Modal from '../../../../../components/Modal/Modal';\n\nimport {getPath} from '../../../../../store/selectors/navigation';\nimport {ConnectedProps, connect} from 'react-redux';\nimport {YTErrorBlock} from '../../../../../components/Block/Block';\nimport {DialogField, YTDFDialog} from '../../../../../components/Dialog';\n\nimport hammer from '../../../../../common/hammer';\n\nimport './UploadManager.scss';\nimport {updateView} from '../../../../../store/actions/navigation';\nimport {getSchema} from '../../../../../store/selectors/navigation/tabs/schema';\nimport {getCluster, getCurrentClusterConfig} from '../../../../../store/selectors/global';\nimport {RootState} from '../../../../../store/reducers';\nimport {getXsrfCookieName} from '../../../../../utils';\nimport {docsUrl, getConfigUploadTable} from '../../../../../config';\nimport HelpLink from '../../../../../components/HelpLink/HelpLink';\nimport CancelHelper from '../../../../../utils/cancel-helper';\nimport UIFactory from '../../../../../UIFactory';\nimport FileDropZone from '../../../../../components/FileDropZone/FileDropZone';\nimport FileUploadProgress from '../../../../../components/FileUploadProgress/FileUploadProgress';\n\nconst block = cn('upload-manager');\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & WithVisibleProps;\n\ninterface State {\n progress: ProgressState;\n error?: any;\n\n file: File | null;\n fileType: FileType;\n append: boolean;\n\n // xlsx\n firstRowAsNames: boolean;\n secondRowAsTypes: boolean;\n\n showOverwriteConfirmation: boolean;\n}\n\nconst WRITE_ATTRIBUTES = {\n json: {\n format: 'text',\n enable_type_conversion: true,\n },\n yson: {\n enable_type_conversion: true,\n },\n dsv: {\n enable_string_to_all_conversion: true,\n },\n schemaful_dsv: {\n enable_string_to_all_conversion: true,\n },\n xlsx: {},\n};\n\ntype FileType = 'json' | 'yson' | 'dsv' | 'schemaful_dsv' | 'xlsx';\n\nconst getFileTypes = (payload: {cluster: string}) => {\n const fileTypes: Array<{value: FileType; text: FileType}> = [\n {value: 'json', text: 'json'},\n {value: 'yson', text: 'yson'},\n {value: 'dsv', text: 'dsv'},\n {value: 'schemaful_dsv', text: 'schemaful_dsv'},\n ];\n\n const uploadConfig = getConfigUploadTable(payload);\n\n if (uploadConfig.uploadTableExcelBaseUrl) {\n fileTypes.push({value: 'xlsx', text: 'xlsx'});\n }\n\n return fileTypes;\n};\n\ntype ProgressState =\n | {inProgress: false}\n | {inProgress: true; event: {total?: number; loaded: number}};\n\nclass UploadManager extends React.Component<Props, State> {\n state: State = {\n file: null,\n fileType: 'json',\n progress: {inProgress: false},\n append: true,\n firstRowAsNames: false,\n secondRowAsTypes: false,\n\n showOverwriteConfirmation: false,\n };\n\n private cancelHelper = new CancelHelper();\n\n renderContent() {\n const {file, error} = this.state;\n return (\n <React.Fragment>\n <FileDropZone isDropable={!this.inProgress()} isEmpty={!file} onFile={this.onFile}>\n {file ? this.renderFileContent(file) : null}\n </FileDropZone>\n {error && <YTErrorBlock error={error} message={'The file upload has failed'} />}\n </React.Fragment>\n );\n }\n\n renderFileContent(file: File) {\n return (\n <React.Fragment>\n {this.renderSettings(file)}\n {this.renderProgress()}\n </React.Fragment>\n );\n }\n\n renderSettings(file: File) {\n const {cluster} = this.props;\n const inProgress = this.inProgress();\n\n const {fields, initials} = this.typeSpecificFields();\n return (\n <YTDFDialog\n onAdd={() => Promise.resolve()}\n onClose={() => {}}\n visible={true}\n modal={false}\n initialValues={{\n name: file.name,\n size: `${hammer.format['Bytes'](file.size)} / ${hammer.format['Number'](\n file.size,\n )} B`,\n append: this.state.append,\n fileType: this.state.fileType,\n ...initials,\n }}\n fields={[\n {\n name: 'name',\n caption: 'Name',\n type: 'plain',\n },\n {\n name: 'size',\n caption: 'Size',\n type: 'plain',\n },\n {\n name: 'append',\n caption: 'Append',\n type: 'tumbler',\n tooltip: 'Append content of the file to the end of the destination',\n extras: {\n disabled: inProgress,\n },\n onChange: (append: boolean) => {\n this.setState({append});\n },\n },\n {\n name: 'fileType',\n type: 'yt-select-single',\n caption: 'Type',\n extras: {\n items: getFileTypes({cluster}),\n hideFilter: true,\n disabled: inProgress,\n width: 'max',\n },\n onChange: (fileType: string | Array<string> | undefined) => {\n this.setState({\n fileType: (fileType as FileType) || 'json',\n });\n },\n },\n ...fields,\n ]}\n />\n );\n }\n\n typeSpecificFields() {\n const {fileType} = this.state;\n const fields: Array<DialogField> = [];\n const initials: Partial<{firstRowAsNames: boolean}> = {};\n switch (fileType) {\n case 'xlsx': {\n fields.push(\n {\n name: 'firstRowAsNames',\n type: 'tumbler',\n caption: 'Column names',\n tooltip: 'Interpret first row as column names',\n onChange: (firstRowAsNames: boolean) => {\n this.setState({firstRowAsNames});\n },\n },\n {\n name: 'secondRowAsTypes',\n type: 'tumbler',\n caption: 'Types',\n tooltip: 'There is row with types right before data-rows',\n onChange: (secondRowAsTypes: boolean) => {\n this.setState({secondRowAsTypes});\n },\n },\n );\n Object.assign(initials, {\n firstRowAsNames: this.state.firstRowAsNames,\n secondRowAsTypes: this.state.secondRowAsTypes,\n });\n break;\n }\n }\n return {fields, initials};\n }\n\n renderFooterContent() {\n const {file, fileType} = this.state;\n const inProgress = this.inProgress();\n const url =\n fileType === 'xlsx'\n ? UIFactory.docsUrls['storage:excel']\n : UIFactory.docsUrls['storage:formats'];\n const helpLink = docsUrl(<HelpLink url={url} />);\n if (!file) {\n return helpLink;\n }\n return inProgress ? (\n <React.Fragment>\n <Button onClick={this.cancelUpload}>Cancel upload</Button>\n <span className={block('help-link')}>{helpLink}</span>\n </React.Fragment>\n ) : (\n <React.Fragment>\n <Button onClick={this.onReset}>Reset</Button>\n <span className={block('help-link')}>{helpLink}</span>\n </React.Fragment>\n );\n }\n\n onReset = () => {\n this.onFile(null);\n this.setState({error: null});\n };\n\n renderProgress() {\n const {progress} = this.state;\n const event = progress.inProgress ? progress.event : {total: 1, loaded: 0};\n\n if (progress.inProgress) {\n return <FileUploadProgress event={event} />;\n }\n\n return null;\n }\n\n cancelUpload = () => {\n this.cancelHelper.removeAllRequests();\n };\n\n inProgress() {\n const {progress} = this.state;\n return progress.inProgress;\n }\n\n onFile = (files: FileList | null) => {\n const {cluster} = this.props;\n const file = files && files[0];\n this.setState({file});\n if (file) {\n const lastDotIndex = file.name.lastIndexOf('.');\n const extStr = file.name.substr(lastDotIndex + 1);\n const item = getFileTypes({cluster}).find(({value}) => value === extStr);\n if (item) {\n this.setState({fileType: item.value});\n }\n\n const fileError = this.checkFile(file);\n if (fileError) {\n this.setState({error: {message: fileError}});\n }\n }\n };\n\n renderConfirm = () => {\n const fileError = this.checkFile(this.state.file);\n return (\n <Button\n className={block('confirm')}\n size=\"m\"\n view=\"action\"\n title=\"Upload\"\n disabled={Boolean(fileError) || this.inProgress()}\n onClick={this.onConfirm}\n >\n Upload\n </Button>\n );\n };\n\n checkFile(file: State['file']): string | null {\n if (!file) {\n return 'file is not selected';\n }\n\n const {cluster} = this.props;\n\n const uploadConfig = getConfigUploadTable({cluster});\n\n if (file.size > uploadConfig.uploadTableMaxSize) {\n return `File size must not be greater than ${format.Bytes(\n uploadConfig.uploadTableMaxSize,\n )}`;\n }\n\n return null;\n }\n\n renderClose = (className: string) => {\n return (\n <Button\n className={block('close', className)}\n size=\"m\"\n title=\"Close\"\n disabled={this.inProgress()}\n onClick={this.handleClose}\n >\n Close\n </Button>\n );\n };\n\n getWriteAttributes() {\n const {schema} = this.props;\n const {fileType} = this.state;\n const withColumns: any = {};\n if (fileType === 'schemaful_dsv') {\n withColumns.columns = map_(schema, ({name}) => name);\n }\n return {\n ...withColumns,\n ...WRITE_ATTRIBUTES[fileType],\n };\n }\n\n onStartUpload(size: number) {\n this.setState({\n progress: {inProgress: true, event: {loaded: 0, total: size}},\n error: undefined,\n });\n }\n\n onUploadProgress = (event: AxiosProgressEvent) => {\n this.setState({progress: {inProgress: true, event}});\n };\n\n onStopUpload(error?: State['error']) {\n this.setState({progress: {inProgress: false}});\n if (!error) {\n this.props.updateView();\n this.props.handleClose();\n } else if (!axios.isCancel(error) && (!error || error.code !== 'cancelled')) {\n error = error.response?.data || error;\n this.setState({error});\n }\n }\n\n onConfirm = () => {\n const {append} = this.state;\n if (append) {\n return this.onConfirmImpl();\n }\n\n this.setOverwriteConfirmationVisible(true);\n };\n\n onConfirmImpl = () => {\n const {file, fileType, append} = this.state;\n\n if (fileType === 'xlsx') {\n this.onXlsxUpload();\n return;\n }\n if (!file) {\n return;\n }\n\n const {path, proxy, externalProxy, cluster} = this.props;\n\n const uploadConfig = getConfigUploadTable({cluster});\n\n this.onStartUpload(file.size);\n\n let transaction_id = '';\n yt.v3\n .startTransaction({\n timeout: 120000,\n })\n .then((txId: string) => {\n transaction_id = txId;\n\n return yt.v3\n .writeTable({\n setup: {\n onUploadProgress: this.onUploadProgress,\n proxy: uploadConfig.uploadTableUseLocalmode\n ? `${location.host}/localmode/api/yt/${cluster}`\n : externalProxy ?? proxy,\n },\n parameters: {\n transaction_id,\n path: {$value: path, $attributes: {append}},\n input_format: {\n $value: fileType,\n $attributes: this.getWriteAttributes(),\n },\n },\n cancellation: this.cancelHelper.removeAllAndSave,\n data: file,\n })\n .then(() => {\n return yt.v3.commitTransaction({transaction_id}).then(() => {\n this.onStopUpload();\n });\n });\n })\n .catch((e: any) => {\n this.onStopUpload(e);\n if (transaction_id) {\n yt.v3.abortTransaction({transaction_id});\n }\n });\n };\n\n onXlsxUpload() {\n const {file, fileType} = this.state;\n if (!file || fileType !== 'xlsx') {\n return Promise.resolve();\n }\n\n const {path, cluster} = this.props;\n this.onStartUpload(file.size);\n\n const uploadConfig = getConfigUploadTable({cluster});\n\n const readyUrl = `${uploadConfig.uploadTableExcelBaseUrl}/${cluster}/api/ready`;\n const uploadUrl = `${uploadConfig.uploadTableExcelBaseUrl}/${cluster}/api/upload`;\n\n this.cancelHelper.removeAllRequests();\n return axios.get(readyUrl).then(\n () => {\n const {append, firstRowAsNames, secondRowAsTypes} = this.state;\n const start_row = [firstRowAsNames, secondRowAsTypes].filter(Boolean).length + 1;\n const params = new URLSearchParams({\n path,\n append: String(append),\n header: String(firstRowAsNames),\n start_row: String(start_row),\n types: String(secondRowAsTypes),\n });\n const formData = new FormData();\n formData.append('uploadfile', file);\n return axios\n .post(`${uploadUrl}?${params}`, formData, {\n onUploadProgress: this.onUploadProgress,\n withCredentials: true,\n withXSRFToken: true,\n xsrfCookieName: getXsrfCookieName(cluster),\n xsrfHeaderName: 'X-Csrf-Token',\n cancelToken: this.cancelHelper.generateNextToken(),\n })\n .then(\n () => {\n this.onStopUpload();\n },\n (e) => {\n this.onStopUpload(e);\n },\n );\n },\n (e) => {\n this.onStopUpload({\n message: `${readyUrl} responded with error`,\n inner_errors: [e],\n });\n },\n );\n }\n\n handleClose = () => {\n if (this.inProgress()) {\n return;\n }\n this.props.handleClose();\n };\n\n setOverwriteConfirmationVisible(showOverwriteConfirmation: boolean) {\n this.setState({showOverwriteConfirmation});\n }\n\n renderOverwriteConfirmationDialog() {\n const {showOverwriteConfirmation} = this.state;\n return !showOverwriteConfirmation ? null : (\n <Modal\n size={'s'}\n title={'Overwrite confirmation'}\n visible={true}\n confirmText={'Overwrite'}\n content={\n <div>\n Are you sure you want to overwrite all existing data rows with the ones from\n the uploading file?\n </div>\n }\n onConfirm={() => {\n this.setOverwriteConfirmationVisible(false);\n this.onConfirmImpl();\n }}\n onCancel={() => {\n this.setOverwriteConfirmationVisible(false);\n }}\n />\n );\n }\n\n render() {\n const {visible, handleShow} = this.props;\n return (\n <React.Fragment>\n <Button size=\"m\" title=\"Upload\" onClick={handleShow}>\n <Icon awesome=\"upload\" />\n &nbsp; Upload\n </Button>\n\n {visible && (\n <Modal\n size=\"m\"\n title=\"Upload\"\n visible={visible}\n onCancel={this.handleClose}\n confirmText=\"Upload\"\n content={this.renderContent()}\n footerContent={this.renderFooterContent()}\n renderCustomConfirm={this.renderConfirm}\n renderCustomCancel={this.renderClose}\n contentClassName={block()}\n />\n )}\n\n {this.renderOverwriteConfirmationDialog()}\n </React.Fragment>\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n const path: string = getPath(state);\n const schema = getSchema(state);\n const {proxy, externalProxy} = getCurrentClusterConfig(state);\n\n return {\n path,\n schema,\n cluster: getCluster(state),\n proxy,\n externalProxy,\n };\n};\n\nconst mapDispatchToProps = {\n updateView,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default compose(withVisible, connector)(UploadManager);\n","import {\n TabletStateAction,\n TabletStateType,\n} from '../../../../store/reducers/navigation/modals/dyn-tables-state-modal';\n\nexport const DYN_TABLES_ALLOWED_STATES_OF_ACTION: Record<\n TabletStateAction,\n Partial<Record<TabletStateType, boolean>>\n> = {\n mount: {\n unmounted: true,\n },\n unmount: {\n mounted: true,\n frozen: true,\n },\n freeze: {\n mounted: true,\n },\n unfreeze: {\n frozen: true,\n },\n};\n\nexport const DYN_TABLES_ALLOWED_ACTIONS_BY_STATE: Record<\n TabletStateType,\n Partial<Record<TabletStateAction, boolean>>\n> = {\n mounted: {\n freeze: true,\n unmount: true,\n },\n unmounted: {\n mount: true,\n },\n frozen: {\n unmount: true,\n unfreeze: true,\n },\n mixed: {\n mount: true,\n unmount: true,\n freeze: true,\n unfreeze: true,\n },\n};\n","import capitalize_ from 'lodash/capitalize';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport {ThunkAction} from 'redux-thunk';\nimport {\n DynTablesStateModalAction,\n DynTablesStateModalState,\n TabletStateAction,\n TabletStateType,\n} from '../../../../store/reducers/navigation/modals/dyn-tables-state-modal';\nimport {RootState} from '../../../../store/reducers';\nimport {DYN_TABLES_STATE_MODAL_PARTIAL} from '../../../../constants/navigation/modals/dyn-tables-state-modal';\nimport {delayed, wrapApiPromiseByToaster} from '../../../../utils/utils';\nimport {updateView} from '../index';\nimport {DYN_TABLES_ALLOWED_STATES_OF_ACTION} from '../../../selectors/navigation/content/map-node-ts';\nimport {executeBatchWithRetries} from '../../execute-batch';\nimport {YTApiId} from '../../../../rum/rum-wrap-api';\nimport {BatchResultsItem} from '../../../../../shared/yt-types';\n\ntype DynTablesStateThunkAction = ThunkAction<any, RootState, any, DynTablesStateModalAction>;\n\nexport function showDynTablesStateModalByPaths(\n paths: Array<string>,\n action: Required<DynTablesStateModalState>['action'],\n): DynTablesStateModalAction {\n return {\n type: DYN_TABLES_STATE_MODAL_PARTIAL,\n data: {paths, action, showModal: true},\n };\n}\n\nexport function showDynTablesStateModalByNodes(\n action: Required<DynTablesStateModalState>['action'],\n selectedNodes: Array<{path: string; tabletState: TabletStateType}>,\n): DynTablesStateThunkAction {\n return (dispatch) => {\n const allowedFrom = DYN_TABLES_ALLOWED_STATES_OF_ACTION[action];\n const paths = reduce_(\n selectedNodes,\n (acc, {path, tabletState}) => {\n if (tabletState && allowedFrom[tabletState]) {\n acc.push(path);\n }\n return acc;\n },\n [] as Array<string>,\n );\n\n dispatch({\n type: DYN_TABLES_STATE_MODAL_PARTIAL,\n data: {paths, action, showModal: true},\n });\n };\n}\n\nexport function hideDynTablesStateModal() {\n return {\n type: DYN_TABLES_STATE_MODAL_PARTIAL,\n data: {paths: [], action: undefined, showModal: false},\n };\n}\n\nexport function dynTablesChangeState(\n paths: Array<string>,\n action: TabletStateAction,\n): DynTablesStateThunkAction {\n return (dispatch) => {\n const requests = map_(paths, (path) => {\n return {\n command: `${action}_table` as const,\n parameters: {path},\n };\n });\n\n return wrapApiPromiseByToaster(\n executeBatchWithRetries(YTApiId.navigationDynTableState, requests, {\n errorTitle: 'Failed to change dynamic table(s) state',\n }),\n {\n toasterName: 'dyn_tables_change_state_to_' + action,\n successContent: '',\n batchType: 'v3',\n skipSuccessToast: true,\n errorTitle: `Cannot perform ${action} action`,\n },\n )\n .then(() => {\n return wrapApiPromiseByToaster(waitWhileThereIsTransient(paths, action), {\n toasterName: 'dyn_tables_wait_while_transient_' + action,\n successContent: `${capitalize_(action)} completed`,\n batchType: 'v3',\n errorTitle: `Cannot perform ${action} action`,\n });\n })\n .then(() => {\n dispatch(updateView());\n });\n };\n}\n\nfunction waitWhileThereIsTransient(\n paths: Array<string>,\n action: TabletStateAction,\n): Promise<Array<BatchResultsItem<string>>> {\n const requests = map_(paths, (path) => {\n return {\n command: 'get' as const,\n parameters: {path: `${path}/@tablet_state`},\n };\n });\n\n const res = delayed(\n () =>\n executeBatchWithRetries<string>(YTApiId.navigationGetTabletState, requests, {\n errorTitle: 'Failed to get tablet state',\n }),\n 3000,\n );\n\n return wrapApiPromiseByToaster(res, {\n toasterName: 'dyn_tables_wait_while_transient_' + action,\n successContent: `${capitalize_(action)} completed`,\n skipSuccessToast: true,\n batchType: 'v3',\n errorTitle: `Cannot perform ${action} action`,\n }).then((results) => {\n const toRecheck = reduce_(\n results,\n (acc, {output}, index) => {\n if (output === 'transient') {\n acc.push(paths[index]);\n }\n return acc;\n },\n [] as typeof paths,\n );\n\n if (toRecheck.length) {\n return waitWhileThereIsTransient(toRecheck, action);\n }\n return Promise.resolve([]);\n });\n}\n","import React, {Fragment} from 'react';\nimport {connect, 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 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';\nimport {StickyContainer} from '../../../../components/StickyContainer/StickyContainer';\nimport {Toolbar} from '../../../../components/WithStickyToolbar/Toolbar/Toolbar';\n\nimport {\n abortAndReset,\n loadReplicas,\n performReplicaAction,\n updateEnableReplicatedTableTracker,\n} from '../../../../store/actions/navigation/content/replicated-table';\nimport {getAttributes, getPath} from '../../../../store/selectors/navigation';\nimport {Page} from '../../../../constants/index';\n\nimport {ReplicatedTableSettingsButton} from './ReplicatedTableSettings';\nimport {useRumMeasureStop} from '../../../../rum/RumUiContext';\nimport {RumMeasureTypes} from '../../../../rum/rum-measure-types';\nimport {useAppRumMeasureStart} from '../../../../rum/rum-app-measures';\nimport {isFinalLoadingStatus} from '../../../../utils/utils';\n\nimport {\n getAllowEnableReplicatedTracker,\n getNavigationReplicatedTableLoadingStatus,\n getReplicatedTableData,\n} from '../../../../store/selectors/navigation/content/replicated-table';\n\nimport './ReplicatedTable.scss';\nimport {CypressNodeTypes} from '../../../../utils/cypress-attributes';\n\nconst block = cn('navigation-replicated-table');\n\nconst tableSets = {\n default: {\n items: [\n 'name',\n 'cluster',\n '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 {({stickyTopClassName}) => (\n <React.Fragment>\n {hasActions && (\n <Toolbar\n className={stickyTopClassName}\n itemsToWrap={[{node: <TableActions block={block} />}]}\n />\n )}\n <ElementsTable {...this.tableSettings} items={replicas} />\n </React.Fragment>\n )}\n </StickyContainer>\n </div>\n </LoadDataHandler>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const {loading, loaded, error, errorData, replicas} = getReplicatedTableData(state);\n const allowEnableReplicatedTracker = getAllowEnableReplicatedTracker(state);\n const path = getPath(state);\n const attributes = getAttributes(state);\n\n const [enable_replicated_table_tracker, type] = ypath.getValues(attributes, [\n '/replicated_table_options/enable_replicated_table_tracker',\n '/type',\n ]);\n\n return {\n loading,\n loaded,\n error,\n errorData,\n path,\n replicas,\n attributes,\n tableMode: allowEnableReplicatedTracker ? 'with-auto-switch' : 'default',\n enable_replicated_table_tracker,\n type,\n };\n};\n\nconst mapDispatchToProps = {\n loadReplicas,\n abortAndReset,\n performReplicaAction,\n updateEnableReplicatedTableTracker,\n};\n\nconst ReplicatedTableConnected = connect(mapStateToProps, mapDispatchToProps)(ReplicatedTable);\n\nexport default function ReplicatedTableWithRum() {\n useDisableMaxContentWidth();\n\n const loadState = useSelector(getNavigationReplicatedTableLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.NAVIGATION_CONTENT_REPLICATED_TABLE,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.NAVIGATION_CONTENT_REPLICATED_TABLE,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <ReplicatedTableConnected />;\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport {updateEnableReplicatedTableTracker} from '../../../../store/actions/navigation/content/replicated-table';\n\nimport './ReplicatedTable.scss';\nimport TableMeta from '../Table/TableMeta/TableMeta';\nimport {useDispatch, useSelector} from '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 &nbsp; Keys &nbsp;\n <span className=\"elements-secondary-text\">\n {visibleColumns.length + '/' + allColumns.length}\n </span>\n </Button>\n );\n}\n\nconst mapStateToProps = (state) => {\n const {loading} = state.navigation.content.table;\n\n const visibleColumns = getVisibleColumns(state).filter((column) => column.keyColumn);\n const allColumns = getAllColumns(state).filter((column) => column.keyColumn);\n\n return {visibleColumns, loading, allColumns};\n};\n\nconst mapDispatchToProps = {\n openOffsetSelectorModal,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(OffsetSelectorButton);\n","/* eslint-disable react/prop-types */\nimport React, {useState} from 'react';\nimport {connect} from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport {RangeInputPicker} from '../../../../../components/common/RangeInputPicker';\nimport Button from '../../../../../components/Button/Button';\nimport Filter from '../../../../../components/Filter/Filter';\nimport Icon from '../../../../../components/Icon/Icon';\nimport OffsetSelectorButton from '../../../../../pages/navigation/content/Table/TableOverview/OffsetSelectorButton';\n\nimport {\n getOffsetValue,\n getProgressWidth,\n getRowCount,\n} from '../../../../../store/selectors/navigation/content/table';\nimport {getIsDynamic} from '../../../../../store/selectors/navigation/content/table-ts';\nimport {moveOffset} from '../../../../../store/actions/navigation/content/table/pagination';\n\nimport './TableOverview.scss';\n\nTableOverview.propTypes = {\n // from parent\n block: PropTypes.func.isRequired,\n\n // from connect\n isDynamic: PropTypes.bool.isRequired,\n rowCount: PropTypes.number.isRequired,\n progressWidth: PropTypes.string.isRequired,\n offsetValue: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n moveOffset: PropTypes.func.isRequired,\n};\n\nconst renderInput = (props, {onEndEditing, onUpdate}) => {\n const {offsetValue, rowCount, isDynamic} = props;\n\n return isDynamic ? (\n <Filter\n iconLeft={<Icon awesome=\"key\" />}\n onBlur={(v) => {\n onEndEditing();\n onUpdate(v);\n }}\n value={offsetValue}\n placeholder=\"\"\n size=\"m\"\n pin={'brick-clear'}\n hasClear={false}\n />\n ) : (\n <RangeInputPicker\n iconLeft={<Icon awesome=\"hashtag\" />}\n onOutsideClick={onEndEditing}\n onAfterUpdate={onUpdate}\n onSubmit={onUpdate}\n maxValue={Math.max(0, rowCount - 1)}\n infoPointsCount={0}\n value={offsetValue}\n autoFocus\n size=\"m\"\n />\n );\n};\n\nconst renderPlaceholder = (props, handleStartEditing) => {\n const {block, isDynamic, offsetValue, progressWidth: width} = props;\n\n return (\n <div className={block('query-current')} onClick={handleStartEditing}>\n <Icon awesome={isDynamic ? 'key' : 'hashtag'} />\n {offsetValue || 'No offset'}\n {!isDynamic && <div className={block('query-progress')} style={{width}} />}\n </div>\n );\n};\n\nfunction TableOverview(props) {\n const {block, moveOffset, isDynamic} = props;\n const [editing, changeEditing] = useState(false);\n\n const onUpdate = (value) => moveOffset(value);\n\n const onEndEditing = () => {\n changeEditing(false);\n };\n\n const onStartEditing = () => {\n changeEditing(true);\n };\n\n return (\n <div className={block('input', {edit: editing, dynamic: isDynamic})}>\n {isDynamic && <OffsetSelectorButton disabled={editing} />}\n {editing\n ? renderInput(props, {onEndEditing, onUpdate})\n : renderPlaceholder(props, onStartEditing)}\n {isDynamic && (\n <Button\n size=\"m\"\n view=\"action\"\n title=\"Confirm\"\n pin=\"clear-round\"\n disabled={!editing}\n >\n Confirm\n </Button>\n )}\n </div>\n );\n}\n\nconst mapStateToProps = (state) => {\n const progressWidth = getProgressWidth(state);\n const offsetValue = getOffsetValue(state);\n const isDynamic = getIsDynamic(state);\n const rowCount = getRowCount(state);\n\n return {progressWidth, offsetValue, rowCount, isDynamic};\n};\n\nconst mapDispatchToProps = {\n moveOffset,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(TableOverview);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\n\nimport Pagination from '../../../../../components/Pagination/Pagination';\n\nimport {getIsDynamic} from '../../../../../store/selectors/navigation/content/table-ts';\nimport {\n getIsPaginationDisabled,\n getIsTableEndReached,\n getOffsetValue,\n} from '../../../../../store/selectors/navigation/content/table';\nimport {\n moveOffsetToEnd,\n moveOffsetToLeft,\n moveOffsetToRight,\n moveOffsetToStart,\n} from '../../../../../store/actions/navigation/content/table/pagination';\n\nPaginator.propTypes = {\n // from parent\n block: PropTypes.func.isRequired,\n\n // from connect\n error: PropTypes.bool.isRequired,\n\n isPaginationDisabled: PropTypes.bool.isRequired,\n isTableEndReached: PropTypes.bool.isRequired,\n isDynamic: PropTypes.bool.isRequired,\n\n previousOffset: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n offsetValue: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n\n moveOffsetToStart: PropTypes.func.isRequired,\n moveOffsetToLeft: PropTypes.func.isRequired,\n moveOffsetToRight: PropTypes.func.isRequired,\n moveOffsetToEnd: PropTypes.func.isRequired,\n};\n\nfunction Paginator(props) {\n const {block, error, isPaginationDisabled, isTableEndReached, offsetValue, isDynamic} = props;\n const {moveOffsetToStart, moveOffsetToLeft, moveOffsetToRight, moveOffsetToEnd} = props;\n const tooltip = isPaginationDisabled\n ? 'Select every key column in Column Selector to enable pagination'\n : undefined;\n // TODO: use when descending sorting will be implemented on backend\n\n return (\n <Pagination\n size=\"m\"\n tooltip={tooltip}\n className={block('pagination')}\n first={{\n handler: moveOffsetToStart,\n hotkeyHandler: moveOffsetToStart,\n hotkeyScope: 'all',\n hotkey: 'ctrl+shift+left, command+shift+left',\n disabled: !offsetValue || isPaginationDisabled,\n }}\n previous={{\n handler: moveOffsetToLeft,\n hotkeyHandler: moveOffsetToLeft,\n hotkeyScope: 'all',\n hotkey: 'ctrl+left, command+left',\n disabled: isDynamic || !offsetValue || isPaginationDisabled,\n // disabled: isDynamic && error || moveBackwardDisabled || !offsetValue || isPaginationDisabled,\n }}\n next={{\n handler: moveOffsetToRight,\n hotkeyHandler: moveOffsetToRight,\n hotkeyScope: 'all',\n hotkey: 'ctrl+right, command+right',\n disabled: (isDynamic && error) || isTableEndReached || isPaginationDisabled,\n }}\n last={{\n handler: moveOffsetToEnd,\n hotkeyHandler: moveOffsetToEnd,\n hotkeyScope: 'all',\n hotkey: 'ctrl+shift+right, command+shift+right',\n disabled: isDynamic || isTableEndReached || isPaginationDisabled,\n // disabled: isTableEndReached || moveBackwardDisabled || isPaginationDisabled,\n }}\n />\n );\n}\n\nconst mapStateToProps = (state) => {\n const {error} = state.navigation.content.table;\n\n const isPaginationDisabled = getIsPaginationDisabled(state);\n const isTableEndReached = getIsTableEndReached(state);\n const offsetValue = getOffsetValue(state);\n const isDynamic = getIsDynamic(state);\n\n return {\n error,\n isDynamic,\n offsetValue,\n isPaginationDisabled,\n isTableEndReached,\n };\n};\n\nconst mapDispatchToProps = {\n moveOffsetToStart,\n moveOffsetToLeft,\n moveOffsetToRight,\n moveOffsetToEnd,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Paginator);\n","import React from 'react';\nimport UIFactory, {YQLButtonProps} from '../../UIFactory';\n\nexport function YQLKitButton(props: YQLButtonProps) {\n return <React.Fragment>{UIFactory.yqlWidgetSetup?.renderButton(props)}</React.Fragment>;\n}\n","import {createSelector} from 'reselect';\n\nimport UIFactory from '../../../UIFactory';\nimport {isDeveloper} from '../../../store/selectors/global/is-developer';\nimport {getSettingsData} from './settings-base';\n\nexport const getNavigationSqlService = createSelector(\n [getSettingsData, isDeveloper],\n (data, isAdmin) => {\n const value = data['global::navigation::sqlService'];\n const isQtKitEnabled = value?.length ? -1 !== value.indexOf('qtkit') : isAdmin;\n const isYqlKitEnabled = value?.length ? -1 !== value.indexOf('yqlkit') : true;\n\n const hasYqlWidget = Boolean(UIFactory.yqlWidgetSetup);\n return {\n value,\n isQtKitEnabled: !hasYqlWidget || isQtKitEnabled,\n isYqlKitEnabled: hasYqlWidget && isYqlKitEnabled,\n hasYqlWidget,\n };\n },\n);\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport {Button} from '@gravity-ui/uikit';\nimport {useDispatch, useSelector} from '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 '../../../shared/constants/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","import React from 'react';\nimport {TABLE_ERASE_MODAL_PARTIAL} from '../../../../constants/navigation/modals/table-erase-modal';\n// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport {RootState} from '../../../reducers';\nimport {ThunkAction} from 'redux-thunk';\nimport {wrapApiPromiseByToaster} from '../../../../utils/utils';\nimport {AppStoreProvider} from '../../../../containers/App/AppStoreProvider';\nimport {OperationShortInfo} from '../../../../pages/components/OperationShortInfo/OperationShortInfo';\nimport {makeUiMarker} from '../../../../utils/cypress-attributes';\nimport {Page} from '../../../../constants';\n\nexport function showTableEraseModal(path: string) {\n return {type: TABLE_ERASE_MODAL_PARTIAL, data: {visible: true, path}};\n}\n\nexport function hideTableEraseModal() {\n return {\n type: TABLE_ERASE_MODAL_PARTIAL,\n data: {visible: false, path: undefined},\n };\n}\n\ntype EraseThunkAction = ThunkAction<any, RootState, any, any>;\n\nexport function runTableErase({\n path,\n from,\n to,\n combine_chunks,\n}: {\n path: string;\n from?: number;\n to?: number;\n combine_chunks?: boolean;\n}): EraseThunkAction {\n return () => {\n if (!path) {\n throw Error('Path cannot be empty for \"erase\" operation');\n }\n let range = '';\n if (!isNaN(from!) && !isNaN(to!)) {\n range = `[#${from}:#${to}]`;\n } else if (!isNaN(from!)) {\n range = `[#${from}:]`;\n } else if (!isNaN(to!)) {\n range = `[:#${to}]`;\n }\n\n return wrapApiPromiseByToaster(\n yt.v3.erase({\n spec: {\n table_path: path + range,\n combine_chunks,\n },\n ...makeUiMarker(`${Page.NAVIGATION}:erase`),\n }),\n {\n toasterName: 'table_erase_' + path,\n successContent(res: string) {\n const opId = JSON.parse(res);\n return (\n <AppStoreProvider>\n <OperationShortInfo id={opId} type={'erase'} />\n </AppStoreProvider>\n );\n },\n successTitle: 'Erase operation is started',\n errorTitle: 'Erase operation is failed',\n autoHide: false,\n },\n );\n };\n}\n","import unipika from '../../../../common/thor/unipika';\nimport ypath from '../../../../common/thor/ypath';\nimport {prepareNavigationState} from '../../../../utils/navigation';\n\nexport type BaseMapNode = {\n $attributes?: Record<string, unknown>;\n};\n\nexport class Node {\n static CAPTION_PRINT_SETTINGS = {\n indent: 0,\n break: false,\n binaryAsHex: false,\n highlightControlCharacter: true,\n escapeWhitespace: true,\n format: 'json',\n };\n\n static TITLE_PRINT_SETTINGS = Object.assign(\n {\n asHTML: false,\n },\n Node.CAPTION_PRINT_SETTINGS,\n );\n\n static SUPPORTS_RESOURCE_USAGE = {\n table: true,\n file: true,\n journal: true,\n document: true,\n };\n\n static prepareTitle(name: string) {\n return unipika.prettyprint(name, Node.TITLE_PRINT_SETTINGS);\n }\n\n static prepareCaption(name: string) {\n return unipika.prettyprint(name, Node.CAPTION_PRINT_SETTINGS);\n }\n\n static getResource(node: any, name: string) {\n return Node.SUPPORTS_RESOURCE_USAGE[\n ypath.getValue(node, '/@type') as keyof typeof Node.SUPPORTS_RESOURCE_USAGE\n ]\n ? ypath.getValue(node, '/@resource_usage/' + name)\n : ypath.getValue(node.recursiveResourceUsage, '/' + name);\n }\n\n name: string;\n $value: string;\n $attributes?: Record<string, string>;\n type: string;\n iconType: string;\n title: string;\n caption: string;\n titleUnquoted: string;\n parsedPath: ReturnType<typeof ypath.YPath.clone>;\n parsedPathError?: {\n message: string;\n inner_errors: unknown[];\n };\n path: string;\n pathState: ReturnType<typeof prepareNavigationState>;\n recursiveResourceUsage: boolean;\n dataWeight: number;\n size: number;\n sizePerMedium: number;\n chunks: number;\n nodes: number;\n tabletStaticMemory: number;\n tablets: number;\n masterMemory: number;\n locks: number;\n account: string;\n modified: string;\n created: string;\n linkParsedPath?: ReturnType<typeof ypath.YPath.clone>;\n linkPathState?: ReturnType<typeof prepareNavigationState>;\n targetPath?: string;\n targetPathBroken?: boolean;\n targetPathState?: ReturnType<typeof prepareNavigationState>;\n\n dynamic?: boolean;\n rows?: number;\n unmergedRows?: number;\n chunkRows?: number;\n tabletState?: string;\n\n constructor(\n data: string,\n params: {parsedPath: string; transaction: string; contentMode: string},\n ) {\n const {parsedPath, transaction, contentMode} = params;\n\n const name = ypath.getValue(data);\n const attributes = ypath.getAttributes(data);\n\n this.$value = this.name = name;\n this.$attributes = attributes;\n\n this.type = attributes.type;\n this.iconType = attributes.type;\n\n this.title = Node.prepareTitle(this.name);\n this.caption = Node.prepareCaption(this.name);\n this.titleUnquoted = this.title.slice(1, -1);\n\n try {\n this.parsedPath = ypath.YPath.clone(parsedPath).concat(\n '/' + ypath.YPath.escapeSpecialCharacters(JSON.parse(this.title)),\n );\n } catch (e) {\n this.parsedPath = ypath.YPath.clone(parsedPath).concat(\n '/' + ypath.YPath.escapeSpecialCharacters(this.title),\n );\n this.parsedPathError = {\n message: `Node name cannot be parsed, try to enable 'Escape and highlight' option in your settings. `,\n inner_errors: [e],\n };\n }\n this.path = this.parsedPath.stringify();\n this.pathState = prepareNavigationState(\n this.parsedPath,\n transaction,\n undefined,\n contentMode,\n );\n\n // RESOURCES\n this.recursiveResourceUsage = attributes.recursive_resource_usage;\n\n this.dataWeight = ypath.getValue(this, '/@data_weight');\n this.size = Node.getResource(this, 'disk_space');\n this.sizePerMedium = Node.getResource(this, 'disk_space_per_medium');\n this.chunks = Node.getResource(this, 'chunk_count');\n this.nodes = Node.getResource(this, 'node_count');\n this.tabletStaticMemory = Node.getResource(this, 'tablet_static_memory');\n this.tablets = Node.getResource(this, 'tablet_count');\n this.masterMemory = Node.getResource(this, 'master_memory');\n\n this.locks = attributes.lock_count;\n\n this.account = attributes.account;\n this.modified = attributes.modification_time;\n this.created = attributes.creation_time;\n\n // LINKS\n if (this.type === 'link') {\n this.linkParsedPath = ypath.YPath.clone(this.parsedPath).concat('&');\n this.linkPathState = prepareNavigationState(this.linkParsedPath, transaction);\n this.targetPath = attributes.target_path;\n this.targetPathBroken = attributes.broken;\n this.targetPathState = this.targetPath\n ? prepareNavigationState(\n ypath.YPath.create(this.targetPath, 'absolute'),\n transaction,\n )\n : undefined;\n }\n\n // TABLE\n if (this.type === 'table') {\n this.dynamic = attributes.dynamic;\n this.rows = attributes.row_count;\n this.unmergedRows = attributes.unmerged_row_count;\n this.chunkRows = attributes.chunk_row_count;\n this.iconType = this.dynamic ? 'table_dynamic' : 'table';\n\n if (this.dynamic) {\n this.tabletState = attributes.tablet_state;\n }\n }\n }\n}\n","import chunk_ from 'lodash/chunk';\nimport filter_ from 'lodash/filter';\nimport findIndex_ from 'lodash/findIndex';\nimport forEach_ from 'lodash/forEach';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\n\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport {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 'treat_as_queue_consumer',\n 'treat_as_queue_producer',\n 'path',\n ...(UIFactory.getNavigationMapNodeSettings()?.additionalAttributes || []),\n ],\n path,\n transaction,\n }),\n saveRequestCancellation,\n ),\n );\n}\n\nexport function fetchNodes() {\n return (dispatch, getState) => {\n const state = getState();\n const path = getPath(state);\n const transaction = getTransaction(state);\n const cluster = getCluster(state);\n\n dispatch({type: FETCH_NODES.REQUEST});\n return dispatch(waitForFontFamilies(getList(path, transaction, cluster)))\n .then(ypath.getValue)\n .then((data) => {\n dispatch({\n type: FETCH_NODES.SUCCESS,\n data,\n });\n\n const applyCustomSort = shouldApplyCustomSort(getState());\n dispatch({\n type: APPLY_CUSTOM_SORT,\n data: applyCustomSort ? 'date' : '',\n });\n if (applyCustomSort) {\n dispatch(\n changeColumnSortOrder({\n tableId: NAVIGATION_MAP_NODE_TABLE_ID,\n columnName: 'name',\n asc: false,\n }),\n );\n }\n })\n .catch((error) => {\n if (error.code !== yt.codes.CANCELLED) {\n dispatch({\n type: FETCH_NODES.FAILURE,\n data: {\n message: 'Could not load list. ' + GENERIC_ERROR_MESSAGE,\n details: error,\n },\n });\n } else {\n dispatch({type: FETCH_NODES.CANCELLED});\n }\n });\n };\n}\n\nexport function updateResourceUsage() {\n const BATCH_LIMIT = 200;\n\n function updatedNodeData(nodeValue, newData) {\n return newData\n ? {\n $value: nodeValue.$value,\n $attributes: {\n ...nodeValue.$attributes,\n recursive_resource_usage: newData,\n },\n }\n : nodeValue;\n }\n\n return (dispatch, getState) => {\n const state = getState();\n\n let nodes = getFilteredNodes(state);\n nodes = filter_(nodes, (node) => !node.$attributes.recursive_resource_usage);\n\n if (isRootNode(state) || nodes.length === 0) {\n return;\n }\n\n dispatch({type: UPDATE_RESOURCE_USAGE.REQUEST});\n\n const nodesChunks = chunk_(nodes, BATCH_LIMIT);\n const batchedRequests = map_(nodesChunks, (nodesChunk) => {\n const requests = map_(nodesChunk, (node) => {\n return {\n command: 'get',\n parameters: {\n path: node.path + '&/@recursive_resource_usage',\n timeout: 60 * 1000,\n },\n };\n });\n\n return ytApiV3Id.executeBatch(YTApiId.navigationResourceUsage, {requests});\n });\n\n Promise.all(batchedRequests)\n .then((resultChunks) => {\n const dataMap = {};\n\n const errorResults = [];\n\n forEach_(nodes, (node, index) => {\n const resultChunkIndex = Math.floor(index / BATCH_LIMIT);\n const resultChunk = resultChunks[resultChunkIndex];\n const item = resultChunk[index % BATCH_LIMIT];\n\n if (item.error) {\n errorResults.push(item);\n } else if (item.output) {\n dataMap[node.$value] = item.output;\n }\n });\n\n dispatch({\n type: UPDATE_RESOURCE_USAGE.SUCCESS,\n data: map_(getNodesData(state), (nodeData) =>\n updatedNodeData(nodeData, dataMap[nodeData.$value]),\n ),\n });\n\n const error = getBatchError(errorResults, 'Failed to get resource usage');\n if (error) {\n throw error;\n }\n })\n .catch((error) => {\n if (error.code !== yt.codes.CANCELLED) {\n dispatch({\n type: UPDATE_RESOURCE_USAGE.FAILURE,\n data: {\n message: 'Failed to load resources. ' + GENERIC_ERROR_MESSAGE,\n details: error,\n },\n });\n 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 &nbsp;Remove selected\n </Button>\n </span>\n\n <span className={b('item')}>\n <ClipboardButton\n buttonText={'Copy paths'}\n title=\"Copy selected paths\"\n onCopy={onCopyPathClick}\n />\n </span>\n\n <span className={b('item')}>\n <DropdownMenu\n disabled={allowModifyActions}\n switcher={dropdownButton}\n items={items}\n />\n </span>\n\n <span className={b('item')}>\n <ClickableText onClick={handleClearAll}>Clear all</ClickableText>\n </span>\n </span>\n );\n}\n","import React from 'react';\nimport {createSelector} from 'reselect';\n\nimport every_ from 'lodash/every';\nimport filter_ from 'lodash/filter';\nimport findIndex_ from 'lodash/findIndex';\nimport includes_ from 'lodash/includes';\nimport keys_ from 'lodash/keys';\nimport map_ from 'lodash/map';\nimport pickBy_ from 'lodash/pickBy';\nimport reduce_ from 'lodash/reduce';\nimport transform_ from 'lodash/transform';\nimport values_ from 'lodash/values';\n\nimport moment from 'moment';\n\nimport ypath from '../../../../common/thor/ypath';\nimport hammer from '../../../../common/hammer';\nimport {getParsedPath, getTransaction} from '../../../../store/selectors/navigation';\nimport {makeGetSetting} from '../../../../store/selectors/settings';\nimport {NAMESPACES, SettingName} from '../../../../../shared/constants/settings';\nimport {ContentMode, NAVIGATION_MAP_NODE_TABLE_ID} from '../../../../constants/navigation';\nimport {Node} from '../../../../utils/navigation/content/map-nodes/node';\nimport {MediumType} from '../../../../constants/index';\nimport Chooser from '../../../../pages/navigation/content/MapNode/Chooser';\nimport MultipleActions from '../../../../pages/navigation/content/MapNode/MultipleActions';\nimport {DYN_TABLES_ALLOWED_ACTIONS_BY_STATE} from './map-node-ts';\n\nexport const getFilterState = (state) => state.navigation.content.mapNode.filter;\nexport const getMediumType = (state) => state.navigation.content.mapNode.mediumType;\n\nconst getCustomSort = (state) => state.navigation.content.mapNode.customSort;\nconst getTableColumns = createSelector(\n [getCustomSort, getMediumType],\n (customSort, mediumType) => ({\n chooser: {\n sort: false,\n align: 'center',\n renderHeader: () => <Chooser />,\n },\n icon: {\n sort: false,\n caption: '',\n align: 'center',\n },\n name: {\n sort: (node) => node.titleUnquoted,\n caption: () => {\n return customSort === 'date' ? 'Date' : 'Name';\n },\n align: 'left',\n },\n locks: {\n sort: (node) => node.locks,\n align: 'center',\n },\n account: {\n sort: (node) => node.account,\n align: 'left',\n },\n modification_time: {\n sort: (node) => moment(node.modified).unix(),\n align: 'right',\n },\n creation_time: {\n sort: (node) => moment(node.created).unix(),\n align: 'right',\n },\n disk_space: {\n get: (node) => {\n return mediumType === MediumType.ALL ? node.size : node.sizePerMedium?.[mediumType];\n },\n sort: true,\n align: 'right',\n },\n data_weight: {\n get: (node) => node.dataWeight,\n sort: true,\n align: 'right',\n },\n chunk_count: {\n get: (node) => node.chunks,\n sort: true,\n align: 'right',\n },\n node_count: {\n get: (node) => node.nodes,\n sort: true,\n align: 'right',\n },\n row_count: {\n get: (node) => node.chunkRows,\n sort: true,\n align: 'right',\n },\n tablet_static_memory: {\n get: (node) => node.tabletStaticMemory,\n caption: 'Tablet st.',\n title: 'Tablet static memory',\n sort: true,\n align: 'right',\n },\n master_memory: {\n get: (node) => node.masterMemory,\n caption: 'Master mem.',\n title: 'Master memory',\n sort: true,\n align: 'right',\n },\n tablet_count: {\n get: (node) => node.tablets,\n sort: true,\n align: 'right',\n },\n actions: {\n sort: false,\n caption: '',\n align: 'center',\n },\n multipleActions: {\n sort: false,\n align: 'center',\n renderHeader: () => <MultipleActions />,\n },\n }),\n);\nexport const getPreparedTableColumns = createSelector(getTableColumns, (columns) =>\n transform_(\n columns,\n (preparedColumns, column, name) => {\n preparedColumns[name] = {\n ...column,\n name,\n caption: typeof column.caption === 'function' ? column.caption() : column.caption,\n };\n },\n {},\n ),\n);\n\nexport const getContentMode = (state) => state.navigation.content.mapNode.contentMode;\nexport const getSelected = (state) => state.navigation.content.mapNode.selected;\nexport const getLastSelected = (state) => state.navigation.content.mapNode.lastSelected;\nconst getTextFilter = (state) => state.navigation.content.mapNode.filter;\n\nconst getSortState = (state) => state.tables[NAVIGATION_MAP_NODE_TABLE_ID];\nexport const getNodesData = (state) => state.navigation.content.mapNode.nodesData;\n\nconst getNodes = createSelector(\n [getNodesData, getParsedPath, getTransaction, getContentMode],\n (nodesData, parsedPath, transaction, contentMode) => {\n return map_(\n nodesData,\n (data) =>\n new Node(data, {\n parsedPath,\n transaction,\n contentMode: contentMode !== ContentMode.DEFAULT ? contentMode : undefined,\n }),\n );\n },\n);\n\nexport const getFilteredNodes = createSelector(\n [getNodes, makeGetSetting, getTextFilter],\n (nodes, getSetting, filter) => {\n const useSmartFilter = getSetting('useSmartFilter', NAMESPACES.NAVIGATION);\n if (useSmartFilter) {\n return hammer.filter.multifilter({\n data: nodes,\n input: filter,\n factors: ['titleUnquoted'],\n });\n } else {\n return hammer.filter.filter({\n data: nodes,\n input: filter,\n factors: ['titleUnquoted'],\n });\n }\n },\n);\n\nexport const getSelectedNodes = createSelector(\n [getSelected, getNodes, makeGetSetting, getSortState, getTableColumns],\n (selected, allNodes, getSetting, sortState, columns) => {\n const nodes = filter_(allNodes, (node) => Boolean(selected[ypath.getValue(node)]));\n const groupNodes = getSetting(SettingName.NAVIGATION.GROUP_NODES, NAMESPACES.NAVIGATION);\n const groupByType = groupNodes && {\n get: (node) => TYPE_WEIGHTS[node.type] || 0,\n asc: false,\n };\n\n return hammer.utils.sort(nodes, sortState, columns, {\n groupBy: groupByType,\n });\n },\n);\n\nexport const getSelectedPathMap = createSelector([getSelectedNodes], (nodes) => {\n return reduce_(\n nodes,\n (acc, {path}) => {\n acc[path] = true;\n return acc;\n },\n {},\n );\n});\n\nexport const isSelected = createSelector(getSelected, (selected) => {\n return includes_(values_(selected), true);\n});\n\nexport const getIsAllSelected = createSelector(\n [getSelected, getFilteredNodes],\n (selected, allNodes) => {\n const selectedNodes = keys_(selected);\n\n if (allNodes.length === 0) {\n return false;\n }\n\n return every_(values_(selected)) && selectedNodes.length === allNodes.length;\n },\n);\n\nexport const TYPE_WEIGHTS = map_(\n [\n 'tablet_cell',\n 'cell_node_map',\n 'cell_node',\n 'sys_node',\n 'access_control_object_namespace_map',\n 'access_control_object_namespace',\n 'topmost_transaction_map',\n 'transaction_map',\n 'map_node',\n 'link',\n 'table',\n 'file',\n 'document',\n 'journal',\n 'string_node',\n 'int64_node',\n 'uint64_node',\n 'double_node',\n 'boolean_node',\n ],\n (type, index, types) => ({type, weight: types.length - index}),\n).reduce((res, item) => {\n res[item.type] = item.weight;\n return res;\n}, {});\n\nexport const getSortedNodes = createSelector(\n [getFilteredNodes, getSortState, getTableColumns, makeGetSetting],\n (nodes, sortState, columns, getSetting) => {\n const groupNodes = getSetting(SettingName.NAVIGATION.GROUP_NODES, NAMESPACES.NAVIGATION);\n const groupByType = groupNodes && {\n get: (node) => TYPE_WEIGHTS[node.type] || 0,\n asc: false,\n };\n return hammer.utils.sort(nodes, sortState, columns, {\n groupBy: groupByType,\n });\n },\n);\n\nexport const getSortedNodesNames = createSelector([getFilteredNodes], (nodes) => {\n return nodes.map((node) => node.name);\n});\n\nexport const getNodesInfo = createSelector(getSortedNodes, (nodes) => {\n const sumNodesType = hammer.aggregation.countValues(nodes, 'type');\n\n return map_(Object.entries(sumNodesType), (keyValue) => {\n const [key, value] = keyValue;\n const type = key === 'undefined' ? 'Unknown' : key;\n return {\n type: hammer.format['Readable'](type),\n count: value,\n };\n });\n});\n\nexport const isRootNode = createSelector(\n getParsedPath,\n (parsedPath) => parsedPath.stringify() === '/',\n);\n\nexport const getMapNodeResourcesLoading = (state) =>\n state.navigation.content.mapNode.resourcesLoading;\n\nconst DATE_REGEXP = /^\\d{4}[-]\\d{2}[-]\\d{2}(T\\d{2}:\\d{2}:\\d{2})?(\\.[a-zA-Z0-9]+)?$/;\nexport const shouldApplyCustomSort = createSelector(\n [getNodes, makeGetSetting, getSortState],\n (nodes, getSetting, sortState) =>\n getSetting(SettingName.NAVIGATION.USE_SMART_SORT, NAMESPACES.NAVIGATION) &&\n sortState?.field === 'name' &&\n every_(nodes, (item) => DATE_REGEXP.test(item.name)),\n);\n\nexport const getLoadState = (state) => state.navigation.content.mapNode.loadState;\nexport const getError = (state) => state.navigation.content.mapNode.error;\n\nexport const getSelectedIndex = createSelector(\n [getSortedNodes, getFilterState],\n (nodes, filter) => {\n if (filter) {\n const strictIndex = findIndex_(nodes, ({name}) => name === filter);\n\n if (strictIndex === -1) {\n return findIndex_(nodes, ({name}) => name.startsWith(filter));\n }\n\n return strictIndex;\n }\n\n return 0;\n },\n);\n\nexport const getSelectedNodesDynTablesStates = createSelector([getSelectedNodes], (nodes) => {\n const res = reduce_(\n nodes,\n (acc, item) => {\n if (item.tabletState) {\n acc[item.tabletState] = true;\n }\n return acc;\n },\n {frozen: false, mounted: false, unmounted: false},\n );\n return res;\n});\n\nexport const getSelectedNodesAllowedDynTablesActions = createSelector(\n [getSelectedNodesDynTablesStates],\n (dynTablesStates) => {\n const res = reduce_(\n dynTablesStates,\n (acc, value, state) => {\n if (value) {\n Object.assign(acc, DYN_TABLES_ALLOWED_ACTIONS_BY_STATE[state]);\n }\n return acc;\n },\n {mount: false, unmount: false, freeze: false, unfreeze: false},\n );\n return pickBy_(res, Boolean);\n },\n);\n","import React from 'react';\nimport {ThunkAction} from 'redux-thunk';\nimport {\n LinkToModalAction,\n LinkToState,\n} from '../../../../store/reducers/navigation/modals/link-to-modal';\nimport {RootState} from '../../../../store/reducers';\nimport {LINK_TO_MODAL_PARTIAL} from '../../../../constants/navigation/modals';\nimport {ytApiV3} from '../../../../rum/rum-wrap-api';\nimport {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 {getMetrics} from '../../../../common/utils/metrics';\n\nimport ClipboardButton from '../../../../components/ClipboardButton/ClipboardButton';\nimport Button from '../../../../components/Button/Button';\nimport Icon from '../../../../components/Icon/Icon';\n\nimport {inTrash} from '../../../../utils/navigation/restore-object';\nimport {getTransaction} from '../../../../store/selectors/navigation';\n\nimport ypath from '../../../../common/thor/ypath';\nimport {OPEN_MOVE_OBJECT_POPUP} from '../../../../constants/navigation/modals/move-object';\nimport {openEditingPopup} from '../../../../store/actions/navigation/modals/path-editing-popup';\nimport {OPEN_COPY_OBJECT_POPUP} from '../../../../constants/navigation/modals/copy-object';\nimport {openAttributesModal} from '../../../../store/actions/modals/attributes-modal';\nimport {showNavigationAttributesEditor} from '../../../../store/actions/navigation/modals/attributes-editor';\nimport {restoreObject} from '../../../../store/actions/navigation/modals/restore-object';\nimport {updateView} from '../../../../store/actions/navigation';\nimport {openDeleteModal} from '../../../../store/actions/navigation/modals/delete-object';\nimport {\n showTableMergeModal,\n showTableSortModal,\n} from '../../../../store/actions/navigation/modals/table-merge-sort-modal';\nimport {showTableEraseModal} from '../../../../store/actions/navigation/modals/table-erase-modal';\nimport {getSelectedNodes} from '../../../../store/selectors/navigation/content/map-node';\nimport {showDynTablesStateModalByPaths} from '../../../../store/actions/navigation/modals/dyn-tables-state-modal';\nimport {DYN_TABLES_ALLOWED_ACTIONS_BY_STATE} from '../../../../store/selectors/navigation/content/map-node-ts';\nimport {TabletStateType} from '../../../../store/reducers/navigation/modals/dyn-tables-state-modal';\nimport {ButtonProps, DropdownMenu} from '@gravity-ui/uikit';\nimport {showLinkToModal} from '../../../../store/actions/navigation/modals/link-to-modal';\nimport {showRemoteCopyModal} from '../../../../store/actions/navigation/modals/remote-copy-modal';\n\ninterface Props {\n item: {\n name: string;\n type: string;\n dynamic: boolean;\n path: string;\n $attributes: Record<string, unknown>;\n $value: unknown;\n tabletState: TabletStateType;\n };\n\n onlyDropdown?: boolean;\n dropDownBtnClassName?: string;\n dropDownBtnTheme?: ButtonProps['view'];\n dropDownBtnSize?: ButtonProps['size'];\n}\n\nfunction PathActions(props: Props) {\n const {item} = props;\n const objectPath = item.path;\n\n const dispatch = useDispatch();\n const transaction = useSelector(getTransaction);\n\n const restorePath = ypath.getValue(item.$attributes, '/_restore_path');\n const hasRestoreButton = inTrash(item.path);\n\n const {\n onMove,\n onCopy,\n onLink,\n onShowAttributes,\n onEditAttributes,\n onRestoreClick,\n onDeleteClick,\n onCopyPathClick,\n onSort,\n onErase,\n onMerge,\n onMount,\n onUnmount,\n onFreeze,\n onUnfreeze,\n onTransfer,\n } = React.useMemo(() => {\n const handleUpdateView = (...args: any) => dispatch(updateView(...args));\n\n return {\n onMove(evt: React.MouseEvent) {\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 getMetrics().countEvent('navigation_map-node_attributes');\n\n dispatch(\n openAttributesModal({\n title: item.$value,\n path: item.path,\n } as any),\n );\n evt.stopPropagation();\n },\n onEditAttributes(evt: React.MouseEvent) {\n getMetrics().countEvent('navigation_map-node_edit_attributes');\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 getMetrics().countEvent('navigation_map-node_delete');\n dispatch(openDeleteModal(item));\n evt.stopPropagation();\n },\n onCopyPathClick(evt: React.MouseEvent) {\n getMetrics().countEvent('navigation_map-node_copy-path');\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 {connect} from 'react-redux';\nimport ypath from '../../../../../common/thor/ypath';\n\nimport {getAttributes} from '../../../../../store/selectors/navigation';\n\nimport ColumnSelectorButton from '../../../../../pages/navigation/content/Table/TableOverview/ColumnSelectorButton';\nimport FullScreenButton from '../../../../../pages/navigation/content/Table/TableOverview/FullScreenButton';\nimport SettingsButton from '../../../../../pages/navigation/content/Table/TableOverview/SettingsButton';\nimport JupyterButton from '../../../../../pages/navigation/content/Table/TableOverview/JupyterButton';\nimport TableActions from '../../../../../pages/navigation/content/Table/TableOverview/TableActions';\nimport OffsetInput from '../../../../../pages/navigation/content/Table/TableOverview/OffsetInput';\nimport Paginator from '../../../../../pages/navigation/content/Table/TableOverview/Paginator';\nimport ErrorBoundary from '../../../../../components/ErrorBoundary/ErrorBoundary';\nimport {OpenQueryButtons} from '../../../../../containers/OpenQueryButtons/OpenQueryButtons';\n\nimport './TableOverview.scss';\nimport EditTableActions from './EditTableActions';\nimport DataLensButton from './DatalensButton';\n\nconst block = cn('navigation-table-overview');\n\nTableOverview.propTypes = {\n // from connect\n isFullScreen: PropTypes.bool.isRequired,\n};\n\nfunction TableOverview({isFullScreen, allowPagination}) {\n // TODO: add sticky for the Overview in the split mode https://github.com/captivationsoftware/react-sticky/issues/282\n return (\n <ErrorBoundary>\n <div className={block()}>\n {allowPagination && <Paginator block={block} />}\n <OffsetInput block={block} />\n {!isFullScreen && <ColumnSelectorButton block={block} />}\n {!isFullScreen && <SettingsButton block={block} />}\n {!isFullScreen && <OpenQueryButtons className={block('query')} />}\n {!isFullScreen && <JupyterButton block={block} />}\n {!isFullScreen && <DataLensButton className={block('datalens')} />}\n {!isFullScreen && <TableActions block={block} />}\n <FullScreenButton block={block} />\n {!isFullScreen && <EditTableActions />}\n </div>\n </ErrorBoundary>\n );\n}\n\nconst mapStateToProps = (state) => {\n const {isFullScreen} = state.navigation.content.table;\n const attributes = getAttributes(state);\n\n const isUnmounted = ypath.getValue(attributes, '/tablet_state') === 'unmounted';\n const isSorted = ypath.getValue(attributes, '/sorted');\n\n const allowPagination = !(isUnmounted && !isSorted);\n\n return {\n isFullScreen,\n allowPagination,\n };\n};\n\nexport default connect(mapStateToProps)(TableOverview);\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport {connect} from 'react-redux';\n\nimport cn from 'bem-cn-lite';\n\nimport escapeRegExp_ from 'lodash/escapeRegExp';\nimport filter_ from 'lodash/filter';\nimport isEmpty_ from 'lodash/isEmpty';\nimport map_ from 'lodash/map';\n\nimport {TextInput} from '@gravity-ui/uikit';\nimport Modal from '../../../../../components/Modal/Modal';\n\nimport Query from '../../../../../utils/navigation/content/table/query';\n\nimport {\n getCurrentOffsetValues,\n getIsTableSorted,\n} from '../../../../../store/selectors/navigation/content/table';\nimport {\n closeOffsetSelectorModal,\n moveOffset,\n} from '../../../../../store/actions/navigation/content/table/pagination';\n\nimport './OffsetSelectorModal.scss';\n\nconst block = cn('offset-selector');\n\nclass OffsetSelectorModal extends Component {\n static itemProps = PropTypes.shape({\n name: PropTypes.string.isRequired,\n value: PropTypes.string,\n checked: PropTypes.bool.isRequired,\n });\n\n static propTypes = {\n // from connect\n isOffsetSelectorOpen: PropTypes.bool.isRequired,\n closeOffsetSelectorModal: PropTypes.func.isRequired,\n moveOffset: PropTypes.func.isRequired,\n initialItems: PropTypes.arrayOf(OffsetSelectorModal.itemProps).isRequired,\n isTableSorted: PropTypes.bool.isRequired,\n };\n\n constructor(props) {\n super(props);\n const {initialItems} = this.props;\n this.state = {\n filter: '',\n initialItems,\n items: initialItems,\n };\n }\n\n static getDerivedStateFromProps({initialItems}, state) {\n if (initialItems === state.initialItems) {\n return null;\n }\n return {\n initialItems,\n items: initialItems,\n };\n }\n\n _handleCONFIRMButtonClick = () => {\n const {items} = this.state;\n const {isTableSorted, moveOffset, closeOffsetSelectorModal} = this.props;\n const minKeyValue = isTableSorted ? 'null' : '0';\n const offsetValues = map_(items, (item) => {\n return isEmpty_(item.value) ? minKeyValue : item.value;\n });\n moveOffset(Query.prepareKey(offsetValues));\n closeOffsetSelectorModal();\n };\n\n _handleCANCELButtonClick = () => {\n const {closeOffsetSelectorModal} = this.props;\n this.setState(({initialItems}) => ({items: initialItems}));\n closeOffsetSelectorModal();\n };\n\n _changeFilter = (filter) => {\n this.setState({filter});\n };\n\n updateItemValue = (name, value) => {\n this.setState(({items: prevItems}) => {\n const items = [...prevItems];\n const index = items.findIndex((item) => item.name === name);\n const changedItem = items[index];\n items[index] = {...changedItem, value};\n return {items};\n });\n };\n\n _handleInputChange = (name) => (value) => {\n this.updateItemValue(name, value);\n };\n\n renderSearchBox() {\n return (\n <TextInput\n theme=\"normal\"\n size=\"s\"\n placeholder=\"Search...\"\n onUpdate={this._changeFilter}\n text={this.state.filter}\n hasClear={true}\n />\n );\n }\n\n filterItemsByName(items, filter) {\n const re = new RegExp(escapeRegExp_(filter), 'i');\n return filter_(items, (item) => re.test(item.name));\n }\n\n renderItems() {\n const {items, filter} = this.state;\n const visibleItems = this.filterItemsByName(items, filter);\n return (\n <div className={block('items')}>\n <div className={block('item-group')}>{this.renderSearchBox()}</div>\n {map_(visibleItems, (item) => {\n return (\n <label\n key={item.name}\n className={block('item-group', {\n disabled: !item.checked,\n })}\n >\n {item.name}\n <div className={block('item')}>\n <TextInput\n theme=\"normal\"\n size=\"s\"\n placeholder=\"\"\n onUpdate={this._handleInputChange(item.name)}\n text={item.value}\n hasClear={true}\n />\n </div>\n </label>\n );\n })}\n </div>\n );\n }\n\n renderContent() {\n return <div className={block('content')}>{this.renderItems()}</div>;\n }\n\n render() {\n const {isOffsetSelectorOpen} = this.props;\n return (\n <Modal\n size=\"m\"\n title=\"Keys\"\n borderless={true}\n visible={isOffsetSelectorOpen}\n confirmText=\"Confirm\"\n onConfirm={this._handleCONFIRMButtonClick}\n onCancel={this._handleCANCELButtonClick}\n content={this.renderContent()}\n className={block()}\n contentClassName={block(null, 'pretty-scroll')}\n />\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const {isOffsetSelectorOpen} = state.navigation.content.table;\n const initialItems = getCurrentOffsetValues(state);\n const isTableSorted = getIsTableSorted(state);\n\n return {isOffsetSelectorOpen, initialItems, isTableSorted};\n};\n\nconst mapDispatchToProps = {\n closeOffsetSelectorModal,\n moveOffset,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(OffsetSelectorModal);\n","import React from 'react';\nimport {useSelector} from '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","import 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';\nimport WithStickyToolbar from '../../../../components/WithStickyToolbar/WithStickyToolbar';\n\nimport {OVERVIEW_HEIGHT} from '../../../../constants/navigation/content/table';\nimport {getPath} from '../../../../store/selectors/navigation';\nimport {HEADER_HEIGHT} from '../../../../constants/index';\nimport {\n abortAndReset,\n closeColumnSelectorModal,\n getTableData,\n handleScreenChanged,\n updateColumns,\n} from '../../../../store/actions/navigation/content/table/table';\nimport {\n getAllColumns,\n getOffsetValue,\n getSrcColumns,\n getVisibleColumns,\n getVisibleRows,\n isYqlTypesEnabled,\n} from '../../../../store/selectors/navigation/content/table';\nimport {\n getColumns,\n getIsDynamic,\n getKeyColumns,\n getNavigationTableLoadingState,\n getYqlTypes,\n} from '../../../../store/selectors/navigation/content/table-ts';\nimport {getCluster} from '../../../../store/selectors/global';\nimport {getTableYsonSettings} from '../../../../store/selectors/thor/unipika';\nimport {useRumMeasureStop} from '../../../../rum/RumUiContext';\nimport {useAppRumMeasureStart} from '../../../../rum/rum-app-measures';\nimport {isFinalLoadingStatus} from '../../../../utils/utils';\n\nimport './Table.scss';\nimport TableColumnsPresetNotice from './TableOverview/TableColumnsPresetNotice';\nimport {makeTableRumId} from '../../../../store/actions/navigation/content/table/table-rum-id';\n\nconst block = cn('navigation-table');\n\nTable.columnsProps = PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n data: PropTypes.shape({\n caption: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n }).isRequired,\n keyColumn: PropTypes.bool.isRequired,\n checked: PropTypes.bool.isRequired,\n disabled: PropTypes.bool.isRequired,\n\n accessor: PropTypes.func,\n label: PropTypes.string,\n }),\n);\n\nTable.propTypes = {\n // from connect\n loading: PropTypes.bool.isRequired,\n loaded: PropTypes.bool.isRequired,\n error: PropTypes.bool.isRequired,\n errorData: PropTypes.object.isRequired,\n\n path: PropTypes.string.isRequired,\n isSplit: PropTypes.bool.isRequired,\n isDynamic: PropTypes.bool.isRequired,\n isFullScreen: PropTypes.bool.isRequired,\n settings: Yson.settingsProps.isRequired,\n isColumnSelectorOpen: PropTypes.bool.isRequired,\n visibleRows: PropTypes.arrayOf(PropTypes.object).isRequired,\n\n columns: Table.columnsProps.isRequired,\n allColumns: Table.columnsProps.isRequired,\n srcColumns: Table.columnsProps.isRequired,\n keyColumns: PropTypes.arrayOf(PropTypes.string).isRequired,\n\n offsetValue: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n yqlTypes: PropTypes.array,\n\n updateColumns: PropTypes.func.isRequired,\n getTableData: PropTypes.func.isRequired,\n abortAndReset: PropTypes.func.isRequired,\n handleScreenChanged: PropTypes.func.isRequired,\n closeColumnSelectorModal: PropTypes.func.isRequired,\n};\n\nconst renderColumnSelectorModal = (props) => {\n const {updateColumns, allColumns, srcColumns, isColumnSelectorOpen, closeColumnSelectorModal} =\n props;\n\n return (\n <ColumnSelectorModal\n items={allColumns}\n srcItems={srcColumns}\n onConfirm={updateColumns}\n isVisible={isColumnSelectorOpen}\n onCancel={closeColumnSelectorModal}\n />\n );\n};\n\nconst renderTable = (props) => {\n const {\n visibleColumns,\n keyColumns,\n yqlTypes,\n settings,\n visibleRows,\n isDynamic,\n isFullScreen,\n offsetValue,\n loading,\n loaded,\n isSplit,\n } = props;\n\n let stickyTop;\n if (isSplit) {\n stickyTop = 0; // TODO: add sticky for the Overview in the split mode https://github.com/captivationsoftware/react-sticky/issues/282\n } else if (isFullScreen) {\n stickyTop = 0;\n } else {\n stickyTop = HEADER_HEIGHT + OVERVIEW_HEIGHT;\n }\n\n const tableSettings = {\n stickyTop,\n stickyHead: 'moving',\n syncHeadOnResize: true,\n sortable: false,\n stripedRows: true,\n displayIndices: !isDynamic,\n };\n\n return (\n <LoadDataHandler {...props} loaded={false}>\n <DataTableWrapper\n data={visibleRows}\n loaded={loaded}\n loading={loading}\n yqlTypes={yqlTypes}\n keyColumns={keyColumns}\n ysonSettings={settings}\n settings={tableSettings}\n columns={visibleColumns}\n isFullScreen={isFullScreen}\n emptyDataMessage=\"No items to show\"\n startIndex={!isDynamic ? offsetValue : undefined}\n />\n </LoadDataHandler>\n );\n};\n\nfunction Table(props) {\n const {path, getTableData, abortAndReset, isSplit} = props;\n const isYqlV3Types = useSelector(isYqlTypesEnabled);\n\n useEffect(() => {\n getTableData();\n return abortAndReset;\n }, [path, isYqlV3Types, abortAndReset]);\n\n const {isFullScreen, handleScreenChanged, isDynamic} = props;\n\n const toolbar = <TableOverview />;\n return (\n <div className={block()}>\n <TableMeta />\n <TableColumnsPresetNotice />\n <FullScreen\n className={block('fullscreen')}\n enabled={isFullScreen}\n onChange={handleScreenChanged}\n >\n {isSplit && !isFullScreen ? (\n <React.Fragment>\n {toolbar}\n {renderTable(props)}\n </React.Fragment>\n ) : (\n <WithStickyToolbar\n hideToolbarShadow\n toolbarClassName={block('toolbar', {fullscreen: isFullScreen})}\n toolbar={toolbar}\n content={({sticky}) => renderTable({...props, sticky})}\n />\n )}\n </FullScreen>\n {renderColumnSelectorModal(props)}\n {isDynamic && <OffsetSelectorModal />}\n </div>\n );\n}\n\nconst mapStateToProps = (state) => {\n const {loading, loaded, error, errorData, isColumnSelectorOpen, isFullScreen} =\n state.navigation.content.table;\n const settings = getTableYsonSettings(state);\n const {isSplit} = state.global.splitScreen;\n\n const path = getPath(state);\n const columns = getColumns(state);\n const yqlTypes = getYqlTypes(state);\n const isDynamic = getIsDynamic(state);\n const keyColumns = getKeyColumns(state);\n const allColumns = getAllColumns(state);\n const srcColumns = getSrcColumns(state);\n const visibleRows = getVisibleRows(state);\n const offsetValue = getOffsetValue(state);\n const visibleColumns = getVisibleColumns(state);\n\n return {\n loading,\n loaded,\n error,\n errorData,\n columns,\n keyColumns,\n allColumns,\n srcColumns,\n visibleColumns,\n isSplit,\n path,\n isDynamic,\n visibleRows,\n yqlTypes,\n settings,\n offsetValue,\n isColumnSelectorOpen,\n isFullScreen,\n };\n};\n\nconst mapDispatchToProps = {\n updateColumns,\n getTableData,\n abortAndReset,\n handleScreenChanged,\n closeColumnSelectorModal,\n};\n\nconst TableConnected = compose(connect(mapStateToProps, mapDispatchToProps))(Table);\n\nexport default function TableWithRum() {\n const loadState = useSelector(getNavigationTableLoadingState);\n const isDynamic = useSelector(getIsDynamic);\n const cluster = useSelector(getCluster);\n\n const measureId = makeTableRumId({cluster, isDynamic}).getMeasureId();\n\n useAppRumMeasureStart({\n type: measureId,\n startDeps: [loadState, measureId],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: measureId,\n stopDeps: [loadState, measureId],\n sybType: isDynamic ? 'dynamic' : 'static',\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n useDisableMaxContentWidth();\n return <TableConnected />;\n}\n","import React from 'react';\n\nimport MetaTable from '../../components/MetaTable/MetaTable';\nimport {TTLLabel, makeTTLItems} from '../../components/MetaTable/presets/ttl';\nimport {Tooltip, 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 table',\n },\n ],\n },\n },\n {\n separator: true,\n },\n {\n name: 'optimize_for',\n type: 'radio',\n caption: 'Optimize for',\n tooltip: docsUrl(\n makeLink(UIFactory.docsUrls['storage:chunks#optimize_for']),\n ),\n extras: {\n options: [\n {value: 'scan', label: 'Scan'},\n {value: 'lookup', label: 'Lookup'},\n ],\n },\n },\n {\n name: 'compressionCodec',\n type: 'select-with-subitems',\n caption: 'Compression',\n tooltip: docsUrl(\n makeLink(\n UIFactory.docsUrls[\n 'storage:compression#compression_codecs'\n ],\n ),\n ),\n extras: {\n ...compressionCodecs,\n },\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, {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 {itemNavigationAllowed} from '../../../../pages/navigation/Navigation/ContentViewer/helpers';\n\nimport {\n getContentMode,\n getLoadState,\n getPreparedTableColumns,\n getSelected,\n getSelectedIndex,\n getSortedNodes,\n} from '../../../../store/selectors/navigation/content/map-node';\nimport {getTransaction} from '../../../../store/selectors/navigation';\n\nimport {\n navigateParent,\n setMode,\n updatePath,\n updateView,\n} from '../../../../store/actions/navigation';\nimport {setSelectedItem} from '../../../../store/actions/navigation/content/map-node';\n\nimport {ROOT_POOL_NAME, Tab as SchedulingTab} from '../../../../constants/scheduling';\nimport {NAVIGATION_MAP_NODE_TABLE_ID} from '../../../../constants/navigation';\nimport {LOADING_STATUS, Page} from '../../../../constants/index';\nimport hammer from '../../../../common/hammer';\nimport {showTableEraseModal} from '../../../../store/actions/navigation/modals/table-erase-modal';\nimport {\n showTableMergeModal,\n showTableSortModal,\n} from '../../../../store/actions/navigation/modals/table-merge-sort-modal';\n\nimport {RumMeasureTypes} from '../../../../rum/rum-measure-types';\nimport {useRumMeasureStop} from '../../../../rum/RumUiContext';\nimport {isFinalLoadingStatus, showErrorPopup} from '../../../../utils/utils';\nimport PathActions from './PathActions';\nimport {Tooltip} from '../../../../components/Tooltip/Tooltip';\nimport WarningIcon from '../../../../components/WarningIcon/WarningIcon';\nimport TTLInfo from '../../../../components/TTLInfo/TTLInfo';\nimport {MapNodeIcon} from '../../../../components/MapNodeIcon/MapNodeIcon';\n\nimport {isTrashNode} from '../../../../utils/navigation/isTrashNode';\nimport {isLinkToTrashNode} from '../../../../utils/navigation/isLinkToTrashNode';\n\nimport './MapNodesTable.scss';\n\nconst block = cn('map-nodes-table');\nconst ElementsTable = withKeyboardNavigation(ElementsTableBase);\n\nclass MapNodesTable extends Component {\n static propTypes = {\n columns: PropTypes.objectOf(\n PropTypes.shape({\n sort: PropTypes.oneOfType([PropTypes.bool, PropTypes.func]),\n caption: PropTypes.oneOfType([PropTypes.string, PropTypes.func]),\n align: PropTypes.string,\n get: PropTypes.func,\n }),\n ),\n contentMode: PropTypes.string.isRequired,\n selected: PropTypes.object.isRequired,\n loadState: PropTypes.string.isRequired,\n nodes: PropTypes.array.isRequired,\n selectedIndex: PropTypes.number.isRequired,\n transaction: PropTypes.string,\n\n setSelectedItem: PropTypes.func.isRequired,\n navigateParent: PropTypes.func.isRequired,\n updatePath: PropTypes.func.isRequired,\n updateView: PropTypes.func.isRequired,\n };\n\n static renderTrash(linkState) {\n return <FormattedLink text=\"trash\" state={linkState} theme=\"primary\" />;\n }\n\n static renderName(item) {\n return (\n <div className={block('name-cell')}>\n <div className={block('name-cell-text')}>{MapNodesTable.renderNameImpl(item)}</div>\n <div className={block('name-cell-tags')}>{MapNodesTable.renderTags(item)}</div>\n </div>\n );\n }\n\n static renderTags(item) {\n return (\n <TTLInfo\n attributes={item.$attributes}\n onClick={(e) => {\n e.stopPropagation();\n e.preventDefault();\n return true;\n }}\n />\n );\n }\n\n static renderNameImpl(item) {\n if (isTrashNode(item)) {\n return MapNodesTable.renderTrash(item.pathState);\n } else if (isLinkToTrashNode(item)) {\n return MapNodesTable.renderTrash(item.targetPathState);\n }\n\n const type = item.type;\n\n const textOrLink = (\n <FormattedTextOrLink\n text={item.caption}\n state={item.pathState}\n asLink={itemNavigationAllowed(item)}\n asHTML\n title={item.title}\n theme=\"primary\"\n className={block('name', 'unipika-wrapper')}\n />\n );\n\n const name = !item.parsedPathError ? (\n textOrLink\n ) : (\n <Tooltip content={<span>{item.parsedPathError.message} </span>}>\n <WarningIcon /> {textOrLink}\n </Tooltip>\n );\n\n if (type === 'scheduler_pool') {\n const poolTreeIndex = findIndex_(\n item.parsedPath.fragments,\n (fragment) => fragment.name === 'pool_trees',\n );\n\n const pool = item.parsedPath.fragments[poolTreeIndex + 2] ? item.name : ROOT_POOL_NAME;\n const poolTree = item.parsedPath.fragments[poolTreeIndex + 1].name;\n\n const url = `${Page.SCHEDULING}/${SchedulingTab.OVERVIEW}?pool=${pool}&tree=${poolTree}`;\n const arrow = <span>&#10142;</span>;\n const goToLink = (\n <Link url={url} title={url}>\n <span>go to scheduling</span>\n </Link>\n );\n\n return (\n <span>\n {name}&nbsp;{arrow}&nbsp;{goToLink}\n </span>\n );\n }\n\n if (type === 'link') {\n const target = (\n <FormattedTextOrLink\n text={item.targetPath}\n state={item.targetPathState}\n asLink={itemNavigationAllowed(item)}\n theme=\"primary\"\n />\n );\n\n const viewLink = (\n <FormattedLink text=\"view link\" state={item.linkPathState} theme=\"ghost\" />\n );\n\n const arrow = <span>&#10142;</span>;\n\n return (\n <span>\n {name}&nbsp;{viewLink}&nbsp;{arrow}&nbsp;{target}\n </span>\n );\n }\n\n return <span>{name}</span>;\n }\n\n static renderLocks(item) {\n return (\n item.locks > 0 && (\n <span title={item.locks + ' locks'}>\n <Icon face=\"solid\" awesome=\"lock\" />\n </span>\n )\n );\n }\n\n static renderModificationTime(item) {\n return hammer.format['DateTime'](item.modified, {format: 'full'});\n }\n\n static renderCreationTime(item) {\n return hammer.format['DateTime'](item.created, {format: 'full'});\n }\n\n static renderAccount(item, columnName) {\n return <AccountLink account={item[columnName]} inline />;\n }\n\n get hotkeys() {\n const {navigateParent} = this.props;\n\n return [\n {keys: 'h, ctrl+left', handler: navigateParent, scope: 'all'},\n {keys: 'space', handler: this.onSpaceHotkey, scope: 'all'},\n ];\n }\n\n get defaultColumns() {\n return [\n 'icon',\n 'name',\n 'locks',\n 'account',\n 'disk_space',\n 'row_count',\n 'modification_time',\n 'creation_time',\n ];\n }\n\n get resourcesColumns() {\n return [\n 'icon',\n 'name',\n 'master_memory',\n 'tablet_static_memory',\n 'tablet_count',\n 'disk_space',\n 'data_weight',\n 'chunk_count',\n 'node_count',\n 'row_count',\n ];\n }\n\n get columns() {\n return {\n sets: {\n default: {\n items: ['chooser', ...this.defaultColumns, 'actions'],\n },\n resources: {\n items: ['chooser', ...this.resourcesColumns, 'actions'],\n },\n },\n };\n }\n\n get tableProps() {\n return {\n css: 'map-node_' + this.props.contentMode,\n theme: 'light',\n striped: false,\n tableId: NAVIGATION_MAP_NODE_TABLE_ID,\n computeKey: (item) => item.name,\n onItemClick: this.onItemClick,\n columns: this.columns,\n templates: {\n chooser: this.renderChooser,\n icon: (node) => <MapNodeIcon node={node} />,\n name: MapNodesTable.renderName,\n locks: MapNodesTable.renderLocks,\n modification_time: MapNodesTable.renderModificationTime,\n creation_time: MapNodesTable.renderCreationTime,\n row_count: this.renderRowCount,\n chunk_count: this.printColumnAsNumber,\n node_count: this.printColumnAsNumber,\n disk_space: this.printColumnAsBytes,\n data_weight: this.printColumnAsBytes,\n tablet_static_memory: this.printColumnAsBytes,\n master_memory: this.printColumnAsBytes,\n tablet_count: this.printColumnAsNumber,\n account: MapNodesTable.renderAccount,\n actions: this.renderActions,\n },\n };\n }\n\n onItemClick = (item, _index, evt) => {\n if (evt?.target?.classList?.contains?.('map-node_default__table-item_type_chooser')) {\n this.onChooserClick(evt, item);\n } else if (item.parsedPathError) {\n showErrorPopup(item.parsedPathError, {hideOopsMsg: true, disableLogger: true});\n } else if (itemNavigationAllowed(item)) {\n batch(() => {\n this.props.updatePath(item.path);\n this.props.setMode('auto');\n });\n }\n };\n\n onSpaceHotkey = (evt, info, {item}) => {\n this.onChooserClick(evt, item);\n };\n\n onChooserClick = (evt, item) => {\n const {\n nativeEvent: {shiftKey},\n } = evt;\n this.props.setSelectedItem(item.name, shiftKey);\n evt.stopPropagation();\n };\n\n renderChooser = (item) => {\n const {selected} = this.props;\n const value = selected[item.name];\n\n return (\n <Checkbox\n id={`item_${item.name}`}\n size=\"l\"\n key={value}\n checked={value}\n onChange={(evt) => {\n this.onChooserClick(evt, item);\n }}\n >\n <span />\n </Checkbox>\n );\n };\n\n renderActions = (item) => {\n return <PathActions item={item} />;\n };\n\n renderRowCount = (item, columnName) => {\n const column = this.props.columns[columnName];\n return (item.dynamic ? '≈ ' : '') + hammer.format['Number'](column.get(item));\n };\n\n printColumnAsBytes = printColumnAsBytes.bind(this);\n printColumnAsNumber = printColumnAsNumber.bind(this);\n\n rowClassName = ({dynamic}) => {\n return dynamic ? block('row', {dyntable: true}) : undefined;\n };\n\n render() {\n const {nodes, columns, contentMode, loadState, selectedIndex} = this.props;\n\n const settings = {\n ...this.tableProps,\n items: nodes,\n columns: {\n ...this.tableProps.columns,\n items: columns,\n mode: contentMode,\n },\n };\n\n return (\n columns && (\n <div className={block()}>\n <ElementsTable\n {...settings}\n isLoading={loadState === LOADING_STATUS.LOADING}\n selectedIndex={selectedIndex}\n hotkeys={this.hotkeys}\n key={selectedIndex}\n rowClassName={this.rowClassName}\n />\n </div>\n )\n );\n }\n}\n\nfunction mapStateToProps(state) {\n return {\n loadState: getLoadState(state),\n columns: getPreparedTableColumns(state),\n transaction: getTransaction(state),\n contentMode: getContentMode(state),\n nodes: getSortedNodes(state),\n selected: getSelected(state),\n selectedIndex: getSelectedIndex(state),\n };\n}\n\nconst mapDispatchToProps = {\n setSelectedItem,\n navigateParent,\n updateView,\n updatePath,\n setMode,\n showTableEraseModal,\n showTableSortModal,\n showTableMergeModal,\n};\n\nconst MapNodesTableConnected = connect(mapStateToProps, mapDispatchToProps)(MapNodesTable);\n\nexport default function MapNodesTableWithRum() {\n const loadState = useSelector(getLoadState);\n const nodes = useSelector(getSortedNodes);\n\n useRumMeasureStop({\n type: RumMeasureTypes.NAVIGATION_CONTENT_MAP_NODE,\n stopDeps: [nodes, loadState],\n allowStop: ([nodes, loadState]) => {\n return Boolean(nodes) && isFinalLoadingStatus(loadState);\n },\n });\n\n return <MapNodesTableConnected />;\n}\n","import React, {Component, Fragment} from 'react';\nimport PropTypes from 'prop-types';\n\nimport Hotkey from '../../../components/Hotkey/Hotkey';\n\nimport {getDisplayName} from '../../../utils';\n\nimport '../ElementsTable.scss';\n\nexport default (ElementsTable) => {\n return class WithKeyboardNavigation extends Component {\n static displayName = `WithKeyboardNavigation(${getDisplayName(ElementsTable)})`;\n\n static propTypes = {\n // from parent\n hotkeys: PropTypes.array,\n onItemClick: PropTypes.func,\n selectedIndex: PropTypes.number,\n items: PropTypes.array.isRequired,\n };\n\n static defaultProps = {\n hotkeys: [],\n selectedIndex: 0,\n onItemClick: () => {},\n };\n\n state = {\n hoverSelectedIndex: this.props.selectedIndex,\n selectedIndex: this.props.selectedIndex,\n mode: 'mouse',\n };\n\n get hotkeys() {\n return [\n ...this.props.hotkeys.map(this.wrapHotkeyHandler),\n\n {keys: 'k, up', handler: this.selectPrev, scope: 'all'},\n {keys: 'up', handler: this.selectPrev, scope: 'filter'},\n\n {keys: 'j, down', handler: this.selectNext, scope: 'all'},\n {keys: 'down', handler: this.selectNext, scope: 'filter'},\n\n {\n keys: 'l, enter, ctrl+right',\n handler: this.handleItemKeyboardClick,\n scope: 'all',\n },\n {\n keys: 'enter',\n handler: this.handleItemKeyboardClick,\n scope: 'filter',\n },\n ];\n }\n\n wrapHotkeyHandler = (params) => {\n const {handler, ...rest} = params;\n return {\n ...rest,\n handler: (...args) => {\n const {items} = this.props;\n const {selectedIndex} = this.state;\n return handler(...args, {\n item: items[selectedIndex],\n index: selectedIndex,\n });\n },\n };\n };\n\n selectIndex = (index) => {\n const {items} = this.props;\n const maxIndex = Math.max(0, items.length - 1);\n\n let state;\n if (index > maxIndex) {\n state = {\n selectedIndex: maxIndex,\n hoverSelectedIndex: maxIndex,\n };\n } else if (index < 0) {\n state = {\n selectedIndex: 0,\n hoverSelectedIndex: 0,\n };\n } else {\n state = {\n selectedIndex: index,\n hoverSelectedIndex: index,\n };\n }\n\n this.setState({mode: 'keyboard', ...state});\n };\n\n selectNext = () => {\n const {hoverSelectedIndex} = this.state;\n\n this.selectIndex(hoverSelectedIndex + 1);\n };\n\n selectPrev = () => {\n const {hoverSelectedIndex} = this.state;\n\n this.selectIndex(hoverSelectedIndex - 1);\n };\n\n handleMouseMove = () => {\n const {mode} = this.state;\n\n if (mode !== 'mouse') {\n this.setState({mode: 'mouse'});\n }\n };\n\n handleItemHover = (item, index) => {\n const {mode} = this.state;\n\n if (mode === 'mouse') {\n this.setState({\n hoverSelectedIndex: index,\n });\n }\n };\n\n handleItemSelect = (item, index) => {\n const {mode} = this.state;\n const elem = document.querySelector(\n `.elements-table__row_selected_yes[data-index=\"${index}\"]`,\n );\n\n if (elem && mode === 'keyboard') {\n const windowHeight = document.documentElement.clientHeight;\n const bounding = elem.getBoundingClientRect();\n const bottomCoordinate = bounding.y + bounding.height;\n const topCoordinate = bounding.y;\n\n if (bottomCoordinate > windowHeight) {\n elem.scrollIntoView(false);\n } else if (topCoordinate < 120) {\n elem.scrollIntoView(true);\n window.scrollBy(0, -120);\n }\n }\n };\n\n handleItemKeyboardClick = () => {\n const {onItemClick, items} = this.props;\n const {selectedIndex} = this.state;\n\n if (items && items[selectedIndex]) {\n onItemClick(items[selectedIndex]);\n }\n };\n\n render() {\n const {selectedIndex, mode} = this.state;\n\n return (\n <Fragment>\n <ElementsTable\n {...this.props}\n cssHover={mode === 'mouse'}\n onItemHover={this.handleItemHover}\n onMouseMove={this.handleMouseMove}\n selectedIndex={mode === 'keyboard' ? selectedIndex : null}\n onItemSelect={mode === 'keyboard' ? this.handleItemSelect : null}\n />\n <Hotkey settings={this.hotkeys} />\n </Fragment>\n );\n }\n };\n};\n","import React from 'react';\nimport {compose} from 'redux';\nimport axios, {AxiosProgressEvent} from 'axios';\nimport cn from 'bem-cn-lite';\n\nimport withVisible, {WithVisibleProps} from '../../../../../hocs/withVisible';\nimport Button from '../../../../../components/Button/Button';\nimport Modal from '../../../../../components/Modal/Modal';\n\nimport {getPath} from '../../../../../store/selectors/navigation';\nimport {ConnectedProps, connect} from 'react-redux';\nimport {YTErrorBlock} from '../../../../../components/Block/Block';\nimport {YTDFDialog} from '../../../../../components/Dialog';\nimport {Alert} from '@gravity-ui/uikit';\n\nimport hammer from '../../../../../common/hammer';\nimport format from '../../../../../common/hammer/format';\n\nimport './UploadManager.scss';\nimport {updateView} from '../../../../../store/actions/navigation';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport {RootState} from '../../../../../store/reducers';\nimport {getXsrfCookieName} from '../../../../../utils';\nimport {wrapApiPromiseByToaster} from '../../../../../utils/utils';\nimport Link from '../../../../../components/Link/Link';\nimport {docsUrl, getConfigUploadTable} from '../../../../../config';\nimport HelpLink from '../../../../../components/HelpLink/HelpLink';\nimport CancelHelper from '../../../../../utils/cancel-helper';\nimport UIFactory from '../../../../../UIFactory';\nimport {getSortedNodesNames} from '../../../../../store/selectors/navigation/content/map-node';\nimport FileUploadProgress from '../../../../../components/FileUploadProgress/FileUploadProgress';\nimport FileDropZone from '../../../../../components/FileDropZone/FileDropZone';\n\nconst block = cn('upload-manager');\n\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\ntype Props = PropsFromRedux & WithVisibleProps;\n\nfunction trimXLSX(fileName = '') {\n for (const i of ['.xlsx', '.xls']) {\n if (fileName.toLowerCase().endsWith(i)) {\n return fileName.substr(0, fileName.length - i.length);\n }\n }\n return fileName;\n}\n\ninterface State {\n name: string;\n\n progress: ProgressState;\n error?: any;\n nameAlreadyUsed: boolean;\n\n file: File | null;\n fileType: FileType;\n\n firstRowAsNames: boolean;\n secondRowAsTypes: boolean;\n}\n\ntype FileType = 'xlsx';\n\nconst FILE_TYPES: Array<{value: FileType; title: FileType}> = [{value: 'xlsx', title: 'xlsx'}];\n\ntype ProgressState =\n | {inProgress: false}\n | {inProgress: true; event: {total?: number; loaded: number}};\n\nconst getExcelBaseUrl = (payload: {cluster: string}) => {\n return getConfigUploadTable(payload);\n};\n\nclass UploadManagerCreate extends React.Component<Props, State> {\n state: State = {\n name: '',\n file: null,\n fileType: 'xlsx',\n progress: {inProgress: false},\n firstRowAsNames: true,\n secondRowAsTypes: false,\n nameAlreadyUsed: false,\n };\n\n private cancelHelper = new CancelHelper();\n\n renderContent() {\n const {file, error, nameAlreadyUsed} = this.state;\n return (\n <React.Fragment>\n <FileDropZone isDropable={!this.inProgress()} isEmpty={!file} onFile={this.onFile}>\n {file ? this.renderFileContent(file) : null}\n </FileDropZone>\n {error && <YTErrorBlock error={error} />}\n {nameAlreadyUsed && (\n <Alert\n theme=\"info\"\n message=\"If you want to supplement the table, go to it and use the upload dialog.\"\n />\n )}\n </React.Fragment>\n );\n }\n\n componentDidUpdate(_: Props, prevState: State) {\n if (prevState.name !== this.state.name) {\n const alreadyUsed = this.checkNameAlreadyExist(this.state.name);\n this.setState({nameAlreadyUsed: alreadyUsed});\n }\n }\n\n renderFileContent(file: File) {\n return (\n <React.Fragment>\n {this.renderSettings(file)}\n {this.renderProgress()}\n </React.Fragment>\n );\n }\n\n renderSettings(file: File) {\n const {path} = this.props;\n const {name} = this.state;\n const inProgress = this.inProgress();\n return (\n <YTDFDialog\n onAdd={() => Promise.resolve()}\n onClose={() => {}}\n visible={true}\n modal={false}\n initialValues={{\n path,\n name: name,\n size: `${hammer.format['Bytes'](file.size)} / ${hammer.format['Number'](\n file.size,\n )} B`,\n fileType: this.state.fileType,\n firstRowAsNames: this.state.firstRowAsNames,\n secondRowAsTypes: this.state.secondRowAsTypes,\n }}\n fields={[\n {\n name: 'path',\n caption: 'Parent folder',\n type: 'plain',\n },\n {\n name: 'name',\n caption: 'Name',\n type: 'text',\n required: true,\n extras: {\n disabled: inProgress,\n ...(this.state.nameAlreadyUsed && {\n validationState: 'invalid',\n errorMessage: 'Node with this name already exists',\n }),\n },\n onChange: (name: string | Array<string> | undefined) => {\n this.setState({name: name as string});\n },\n },\n {\n name: 'size',\n caption: 'Size',\n type: 'plain',\n },\n {\n name: 'fileType',\n type: 'yt-select-single',\n caption: 'Type',\n extras: {\n items: FILE_TYPES,\n hideFilter: true,\n disabled: true,\n width: 'max',\n },\n },\n {\n name: 'firstRowAsNames',\n type: 'tumbler',\n caption: 'Column names',\n tooltip: 'Interpret first row as column names',\n onChange: (firstRowAsNames: boolean) => {\n this.setState({firstRowAsNames});\n },\n extras: {\n disabled: inProgress,\n },\n },\n {\n name: 'secondRowAsTypes',\n type: 'tumbler',\n caption: 'Types',\n tooltip: 'There is row with types right before data-rows',\n onChange: (secondRowAsTypes: boolean) => {\n this.setState({secondRowAsTypes});\n },\n extras: {\n disabled: inProgress,\n },\n },\n ]}\n />\n );\n }\n\n renderFooterContent() {\n const {file} = this.state;\n const inProgress = this.inProgress();\n const helpLink = docsUrl(<HelpLink url={UIFactory.docsUrls['storage:excel']} />);\n\n if (!file) {\n return helpLink;\n }\n return inProgress ? (\n <React.Fragment>\n <Button onClick={this.cancelUpload}>Cancel upload</Button>\n <span className={block('help-link')}>{helpLink}</span>\n </React.Fragment>\n ) : (\n <React.Fragment>\n <Button onClick={this.onReset}>Reset</Button>\n <span className={block('help-link')}>{helpLink}</span>\n </React.Fragment>\n );\n }\n\n onReset = () => {\n this.onFile(null);\n this.setState({error: null});\n };\n\n renderProgress() {\n const {progress} = this.state;\n const event = progress.inProgress ? progress.event : {total: 1, loaded: 0};\n\n if (progress.inProgress) {\n return <FileUploadProgress event={event} />;\n }\n\n return null;\n }\n\n cancelUpload = () => {\n this.cancelHelper.removeAllRequests();\n };\n\n inProgress() {\n const {progress} = this.state;\n return progress.inProgress;\n }\n\n onFile = (files: FileList | null) => {\n const file = files && files[0];\n this.setState({\n file,\n name: trimXLSX(file?.name) || '',\n });\n if (file) {\n const fileError = this.checkFile(file);\n if (fileError) {\n this.setState({error: {message: fileError}});\n }\n }\n };\n\n renderConfirm = () => {\n const fileError = this.checkFile(this.state.file);\n return (\n <Button\n className={block('confirm')}\n size=\"m\"\n view=\"action\"\n title=\"Upload\"\n disabled={\n Boolean(fileError) ||\n Boolean(this.state.error) ||\n this.inProgress() ||\n this.state.nameAlreadyUsed\n }\n onClick={this.onXlsxUpload}\n >\n Upload\n </Button>\n );\n };\n\n checkFile(file: State['file']): string | null {\n if (!file) {\n return 'file is not selected';\n }\n\n const {cluster} = this.props;\n\n const UPLOAD_CONFIG = getExcelBaseUrl({cluster});\n\n if (file.size > UPLOAD_CONFIG.uploadTableMaxSize) {\n return `File size must not be greater than ${format.Bytes(\n UPLOAD_CONFIG.uploadTableMaxSize,\n )}`;\n }\n\n return null;\n }\n\n checkNameAlreadyExist(name: string) {\n const {existingNodes} = this.props;\n return existingNodes.includes(name);\n }\n\n renderClose = (className: string) => {\n return (\n <Button\n className={block('confirm', className)}\n size=\"m\"\n title=\"Close\"\n disabled={this.inProgress()}\n onClick={this.handleClose}\n >\n Close\n </Button>\n );\n };\n\n onStartUpload(size: number) {\n this.setState({\n progress: {inProgress: true, event: {loaded: 0, total: size}},\n error: undefined,\n });\n }\n\n onUploadProgress = (event: AxiosProgressEvent) => {\n this.setState({progress: {inProgress: true, event}});\n };\n\n onStopUpload(error?: State['error']) {\n this.setState({progress: {inProgress: false}});\n if (!error) {\n this.props.updateView();\n this.props.handleClose();\n } else if (!axios.isCancel(error) && (!error || error.code !== 'cancelled')) {\n error = error.response?.data || error;\n this.setState({error});\n }\n }\n\n onXlsxUpload = () => {\n const {file, fileType} = this.state;\n if (!file || fileType !== 'xlsx') {\n return;\n }\n\n const {path: parentDir, cluster} = this.props;\n const {name} = this.state;\n const path = `${parentDir}/${name}`;\n\n this.onStartUpload(file.size);\n\n const EXCEL_BASE_URL = getExcelBaseUrl({cluster}).uploadTableExcelBaseUrl;\n\n const readyUrl = `${EXCEL_BASE_URL}/${cluster}/api/ready`;\n const uploadUrl = `${EXCEL_BASE_URL}/${cluster}/api/upload`;\n\n this.cancelHelper.removeAllRequests();\n return axios.get(readyUrl).then(\n () => {\n const {firstRowAsNames, secondRowAsTypes} = this.state;\n const start_row = [firstRowAsNames, secondRowAsTypes].filter(Boolean).length + 1;\n const params = new URLSearchParams({\n create: String(true),\n path,\n header: String(firstRowAsNames),\n start_row: String(start_row),\n types: String(secondRowAsTypes),\n });\n const formData = new FormData();\n formData.append('uploadfile', file);\n return wrapApiPromiseByToaster(\n axios.post(`${uploadUrl}?${params}`, formData, {\n onUploadProgress: this.onUploadProgress,\n withCredentials: true,\n withXSRFToken: true,\n xsrfCookieName: getXsrfCookieName(cluster),\n xsrfHeaderName: 'X-Csrf-Token',\n cancelToken: this.cancelHelper.generateNextToken(),\n }),\n {\n toasterName: 'upload_xlsx' + path,\n successTitle: 'Table is created',\n errorTitle: 'Failed to create table',\n successContent: (\n <Link url={`/${cluster}/navigation?path=${path}`}>{path}</Link>\n ),\n },\n ).then(\n () => {\n this.onStopUpload();\n },\n (e) => {\n this.onStopUpload(e);\n },\n );\n },\n (e) => {\n this.onStopUpload({\n message: `${readyUrl} responded with error`,\n inner_errors: [e],\n });\n },\n );\n };\n\n handleClose = () => {\n if (this.inProgress()) {\n return;\n }\n this.props.handleClose();\n };\n\n render() {\n const {visible} = this.props;\n return (\n <React.Fragment>\n {visible && (\n <Modal\n size=\"m\"\n title=\"Create table from xlsx\"\n visible={visible}\n onCancel={this.handleClose}\n confirmText=\"Upload\"\n content={this.renderContent()}\n footerContent={this.renderFooterContent()}\n renderCustomConfirm={this.renderConfirm}\n renderCustomCancel={this.renderClose}\n contentClassName={block()}\n />\n )}\n </React.Fragment>\n );\n }\n}\n\nconst mapStateToProps = (state: RootState) => {\n const path: string = getPath(state);\n\n return {\n path,\n cluster: getCluster(state),\n existingNodes: getSortedNodesNames(state),\n };\n};\n\nconst mapDispatchToProps = {\n updateView,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\n\nexport default compose(withVisible, connector)(UploadManagerCreate);\n","import React, {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 * as React from 'react';\nimport {DFDialogProps, YTDFDialog, makeFormSubmitError} from '../../../components/Dialog';\n\nexport type UploadFileManagerFileFormValues = {\n name?: string;\n path?: string;\n size?: string;\n};\n\ninterface FileSettingsFormProps {\n className?: string;\n initialValues: UploadFileManagerFileFormValues;\n formId: string;\n isDisabled: boolean;\n onSubmit: (values: UploadFileManagerFileFormValues) => Promise<void>;\n onValidation: DFDialogProps['validate'];\n}\n\nexport const UploadFileManagerFileSettingsForm: React.FC<FileSettingsFormProps> = ({\n onSubmit,\n formId,\n isDisabled,\n onValidation,\n initialValues,\n className,\n}) => {\n return (\n <YTDFDialog<UploadFileManagerFileFormValues>\n className={className}\n onAdd={(formApi) => {\n const values = formApi.getState().values;\n\n return onSubmit(values).catch(makeFormSubmitError);\n }}\n onClose={() => {}}\n validate={onValidation}\n visible={true}\n modal={false}\n formId={formId}\n initialValues={initialValues}\n footerProps={{\n hidden: true,\n }}\n fields={[\n {\n name: 'path',\n caption: 'Parent folder',\n type: 'plain',\n },\n {\n name: 'name',\n caption: 'Name',\n type: 'text',\n required: true,\n extras: {\n disabled: isDisabled,\n },\n },\n {\n name: 'size',\n caption: 'Size',\n type: 'plain',\n },\n ]}\n />\n );\n};\n\nexport default UploadFileManagerFileSettingsForm;\n","import * as React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {Button, Toaster} from '@gravity-ui/uikit';\n\nimport Link from '../../../components/Link/Link';\nimport Modal from '../../../components/Modal/Modal';\nimport withVisible, {WithVisibleProps} from '../../../hocs/withVisible';\nimport FileDropZone from '../../../components/FileDropZone/FileDropZone';\nimport FileUploadProgress from '../../../components/FileUploadProgress/FileUploadProgress';\n\nimport UploadFileManagerFileSettingsForm from './UploadFileManagerFileSettingsForm';\nimport {useUploadFileManager} from '../../../containers/UploadFileManager';\n\nimport './UploadFileManager.scss';\n\nconst block = cn('yt-upload-file-manager');\n\ninterface UploadFileManagerProps extends WithVisibleProps {\n title: string;\n}\n\nexport const UploadFileManager: React.FC<UploadFileManagerProps> = (props) => {\n const uploadSettings = useUploadFileManager({\n onSuccess: ({filePath}) => {\n props.handleClose();\n\n const toaster = new Toaster();\n\n toaster.add({\n name: 'upload_file_manager',\n title: 'Upload complete',\n content: <Link url={`${location.pathname}?path=${filePath}`}>{filePath}</Link>,\n theme: 'success',\n autoHiding: 10000,\n });\n },\n });\n const isUploadButtonDisabled = uploadSettings.isProgress || !uploadSettings.file;\n\n const handleClose = () => {\n props.handleClose();\n uploadSettings.cancelUpload();\n uploadSettings.onReset();\n };\n\n const renderContent = () => {\n return (\n <React.Fragment>\n <FileDropZone\n isEmpty={!uploadSettings.file}\n onFile={uploadSettings.onFile}\n isDropable={!uploadSettings.isProgress}\n >\n {uploadSettings.file && (\n <React.Fragment>\n <UploadFileManagerFileSettingsForm\n className={block('form')}\n onValidation={uploadSettings.onValidation}\n isDisabled={uploadSettings.isProgress}\n formId={uploadSettings.formId}\n onSubmit={uploadSettings.handleSubmit}\n initialValues={uploadSettings.initialValues}\n />\n {uploadSettings.isProgress && uploadSettings.progressEvent && (\n <FileUploadProgress event={uploadSettings.progressEvent} />\n )}\n </React.Fragment>\n )}\n </FileDropZone>\n </React.Fragment>\n );\n };\n\n const renderConfirm = (className: string) => {\n if (uploadSettings.isProgress) {\n return null;\n }\n\n return (\n <Button\n view=\"action\"\n className={className}\n disabled={isUploadButtonDisabled}\n extraProps={{\n form: uploadSettings.formId,\n }}\n title=\"Upload\"\n type=\"submit\"\n >\n Upload\n </Button>\n );\n };\n\n const renderFooterContent = () => {\n return uploadSettings.isProgress ? (\n <Button onClick={uploadSettings.cancelUpload}>Cancel upload</Button>\n ) : (\n <Button type=\"reset\" onClick={uploadSettings.onReset}>\n Reset\n </Button>\n );\n };\n\n const renderClose = () => {\n return (\n <Button\n size=\"m\"\n title=\"Close\"\n disabled={uploadSettings.isProgress}\n onClick={handleClose}\n >\n Close\n </Button>\n );\n };\n\n return (\n <React.Fragment>\n <Modal\n className={block()}\n size=\"m\"\n title={props.title}\n visible={props.visible}\n onCancel={handleClose}\n confirmText=\"Upload\"\n content={renderContent()}\n footerContent={uploadSettings.file ? renderFooterContent() : null}\n renderCustomConfirm={renderConfirm}\n renderCustomCancel={renderClose}\n contentClassName={''}\n />\n </React.Fragment>\n );\n};\n\nexport const UploadFileManagerWithClose = withVisible(UploadFileManager);\n\nexport default UploadFileManager;\n","import * as React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {getPath} from '../../store/selectors/navigation';\nimport {getCluster} from '../../store/selectors/global';\nimport {AxiosError, AxiosProgressEvent, isCancel} from 'axios';\nimport CancelHelper from '../../utils/cancel-helper';\nimport {updateView} from '../../store/actions/navigation';\nimport hammer from '../../common/hammer';\nimport {uploadFile} from './uploadFile';\nimport {ytApiV3} from '../../rum/rum-wrap-api';\n\ntype UseUploadFileManagerProps = {\n onSuccess(params: {filePath: string}): void;\n};\n\nexport type UseUploadFileManagerFileFormValues = {\n name?: string;\n path?: string;\n size?: string;\n};\n\nexport const useUploadFileManager = (opts: UseUploadFileManagerProps) => {\n const dispatch = useDispatch();\n const path = useSelector(getPath);\n const cluster = useSelector(getCluster);\n\n const [file, setFile] = React.useState<File>();\n const [isProgress, setProgress] = React.useState(false);\n const [progressEvent, setProgressEvent] = React.useState<AxiosProgressEvent>();\n\n const cancelHelperRef = React.useRef(new CancelHelper());\n const cancelHelper = cancelHelperRef.current;\n\n const formId = React.useMemo(() => `upload-form-${Math.random()}`, []);\n\n const onFile = (files: FileList | null) => {\n const uploadedFile = files?.[0];\n\n if (uploadedFile && !isProgress) {\n setFile(uploadedFile);\n }\n };\n\n const handleSubmit = (values: UseUploadFileManagerFileFormValues) => {\n if (file) {\n setProgress(true);\n\n const filePath = `${values.path}/${values.name}`;\n\n return uploadFile({\n file,\n cluster,\n filePath,\n cancelHelper,\n handleUploadProgress: (progressEvent: AxiosProgressEvent) =>\n setProgressEvent(progressEvent),\n })\n .finally(() => setProgress(false))\n .then(() => {\n dispatch(updateView());\n opts.onSuccess({\n filePath,\n });\n })\n .catch((error: AxiosError) => {\n if (isCancel(error)) {\n return;\n }\n\n throw error;\n });\n }\n };\n\n const initialValues = React.useMemo(() => {\n if (file) {\n return {\n path,\n name: file?.name,\n size: `${hammer.format['Bytes'](file.size)} / ${hammer.format['Number'](\n file.size,\n )} B`,\n };\n }\n\n return {};\n }, [path, file]);\n\n const onValidation = React.useCallback(async (values: UseUploadFileManagerFileFormValues) => {\n if (!values.name) {\n return {name: 'File name is required'};\n }\n\n if (values.path && values.name) {\n const ok = await ytApiV3.exists({\n path: `${values.path}/${values.name}`,\n });\n\n if (ok) {\n return {name: 'A file with this name already exists'};\n }\n }\n\n return undefined;\n }, []);\n\n const cancelUpload = () => {\n cancelHelper.removeAllRequests();\n setProgress(false);\n setProgressEvent(undefined);\n };\n\n const onReset = () => {\n setFile(undefined);\n };\n\n React.useEffect(() => {\n return () => {\n cancelHelper.removeAllRequests();\n };\n }, [cancelHelper]);\n\n return {\n onReset,\n cancelUpload,\n isProgress,\n file,\n onFile,\n formId,\n handleSubmit,\n initialValues,\n progressEvent,\n onValidation,\n };\n};\n","// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport {AxiosProgressEvent} from 'axios';\n\nimport {YT} from '../../config/yt-config';\nimport CancelHelper from '../../utils/cancel-helper';\n\ninterface StartUploadProps {\n file: File;\n cluster: string;\n filePath: string;\n handleUploadProgress?: (progressEvent: AxiosProgressEvent) => void;\n cancelHelper: CancelHelper;\n}\n\nexport const uploadFile = (opts: StartUploadProps) => {\n const {filePath, file, cluster} = opts;\n const clusterConfig = YT.clusters[cluster];\n const externalProxy = clusterConfig.externalProxy;\n const proxy = clusterConfig.proxy;\n\n const cancelHelper = opts.cancelHelper;\n\n return yt.v3\n .create({\n path: filePath,\n type: 'file',\n recursive: true,\n ignore_existing: true,\n })\n .then(() => {\n return yt.v3.startTransaction({}).then((transactionId: string) => {\n return yt.v3\n .writeFile({\n setup: {\n onUploadProgress: opts.handleUploadProgress,\n proxy: externalProxy ?? proxy,\n },\n parameters: {\n path: filePath,\n compute_md5: false,\n ping_ancestor_transactions: true,\n transaction_id: transactionId,\n },\n cancelToken: cancelHelper.generateNextToken(),\n data: file,\n })\n .then(() => {\n return yt.v3.commitTransaction({transaction_id: transactionId});\n })\n .catch(async (err: any) => {\n await yt.v3.abortTransaction({transaction_id: transactionId});\n\n throw err;\n });\n });\n });\n};\n","import {DropdownMenu} from '@gravity-ui/uikit';\nimport React, {Component} from 'react';\nimport {connect, useDispatch, useSelector} from 'react-redux';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {getConfigUploadTable} from '../../../../config/index';\n\nimport ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\nimport RadioButton from '../../../../components/RadioButton/RadioButton';\nimport Button from '../../../../components/Button/Button';\nimport Filter from '../../../../components/Filter/Filter';\nimport {SelectSingle} from '../../../../components/Select/Select';\nimport {YTErrorBlock} from '../../../../components/Error/Error';\nimport Icon from '../../../../components/Icon/Icon';\nimport {StickyContainer} from '../../../../components/StickyContainer/StickyContainer';\nimport TTLInfo from '../../../../components/TTLInfo/TTLInfo';\nimport CreateTableModal from '../../modals/CreateTableModal/CreateTableModal';\nimport {isCreateTableModalVisible} from '../../../../store/selectors/navigation/modals/create-table';\n\nimport MapNodesTable from './MapNodesTable';\n\nimport {openCreateTableModal} from '../../../../store/actions/navigation/modals/create-table';\nimport {getPath, getTransaction} from '../../../../store/selectors/navigation';\nimport {getNavigationPathAttributes} from '../../../../store/selectors/navigation/navigation';\nimport {getMediumList} from '../../../../store/selectors/thor';\nimport {\n getContentMode,\n getError,\n getFilterState,\n getLoadState,\n getMapNodeResourcesLoading,\n getMediumType,\n isRootNode,\n} from '../../../../store/selectors/navigation/content/map-node';\n\nimport {OPEN_CREATE_DIRECTORY_POPUP} from '../../../../constants/navigation/modals/create-directory';\nimport {LOADING_STATUS} from '../../../../constants/index';\nimport {ContentMode} from '../../../../constants/navigation';\n\nimport {openEditingPopup} from '../../../../store/actions/navigation/modals/path-editing-popup';\nimport {\n fetchNodes,\n setContentMode,\n setFilter,\n setMediumType,\n updateResourceUsage,\n} from '../../../../store/actions/navigation/content/map-node';\nimport {RumMeasureTypes} from '../../../../rum/rum-measure-types';\nimport {useAppRumMeasureStart} from '../../../../rum/rum-app-measures';\n\nimport hammer from '../../../../common/hammer';\nimport UploadManagerCreate from '../Table/UploadManager/UploadManagerCreate';\nimport NodesTypes from './NodesTypes/NodesTypes';\n\nimport {NoWrap} from '../../../../components/Text/Text';\nimport {showLinkToModal} from '../../../../store/actions/navigation/modals/link-to-modal';\nimport {openCreateACOModal} from '../../../../store/actions/navigation/modals/create-aco';\nimport NavigationExtraActions from '../../../../containers/NavigationExtraActions/NavigationExtraActions';\nimport UIFactory from '../../../../UIFactory';\nimport {getCluster} from '../../../../store/selectors/global';\nimport {UploadFileManagerWithClose} from '../../UploadFileManager';\n\nimport './MapNode.scss';\n\nconst block = cn('map-node');\nconst tbBlock = cn('elements-toolbar');\n\nclass MapNode extends Component {\n static TYPE = 'map_node';\n\n static CONTENT_MODE_OPTIONS = [ContentMode.DEFAULT, ContentMode.RESOURCES];\n\n static propTypes = {\n error: PropTypes.object,\n loadState: PropTypes.string,\n contentMode: PropTypes.oneOf(MapNode.CONTENT_MODE_OPTIONS),\n path: PropTypes.string.isRequired,\n transaction: PropTypes.string,\n mediumList: PropTypes.arrayOf(PropTypes.string),\n mediumType: PropTypes.string.isRequired,\n filterState: PropTypes.string.isRequired,\n\n setFilter: PropTypes.func.isRequired,\n setContentMode: PropTypes.func.isRequired,\n fetchNodes: PropTypes.func.isRequired,\n setMediumType: PropTypes.func.isRequired,\n openEditingPopup: PropTypes.func.isRequired,\n openCreateTableModal: PropTypes.func.isRequired,\n openCreateACOModal: PropTypes.func.isRequired,\n showACOCreateButton: PropTypes.bool.isRequired,\n cluster: PropTypes.bool.isRequired,\n };\n\n componentDidMount() {\n this.props.fetchNodes();\n }\n\n componentDidUpdate(prevProps) {\n const {path, transaction, fetchNodes} = this.props;\n const {path: prevPath, transaction: prevTransaction} = prevProps;\n if (path !== prevPath || transaction !== prevTransaction) {\n fetchNodes();\n }\n }\n\n renderError() {\n const {\n error: {message, details},\n } = this.props;\n return (\n <div className={block('error')}>\n <YTErrorBlock message={message} error={details} />\n </div>\n );\n }\n\n renderView() {\n return (\n <StickyContainer>\n {({stickyTopClassName}) => (\n <React.Fragment>\n <div className={tbBlock({sticky: false}, stickyTopClassName)}>\n <MapNodeToolbarConnected />\n </div>\n <div className={block('content')}>\n <MapNodesTable />\n </div>\n </React.Fragment>\n )}\n </StickyContainer>\n );\n }\n\n render() {\n const {loadState} = this.props;\n\n return (\n <ErrorBoundary>\n <div className={block()}>\n {loadState === LOADING_STATUS.ERROR ? this.renderError() : this.renderView()}\n </div>\n <CreateTableModal />\n </ErrorBoundary>\n );\n }\n}\n\nfunction mapStateToProps(state) {\n const path = getPath(state);\n\n return {\n path,\n showACOCreateButton: path === '//sys/access_control_object_namespaces/queries',\n loadState: getLoadState(state),\n error: getError(state),\n contentMode: getContentMode(state),\n filterState: getFilterState(state),\n transaction: getTransaction(state),\n mediumList: getMediumList(state),\n mediumType: getMediumType(state),\n showCreateTableModal: isCreateTableModalVisible(state),\n attributes: getNavigationPathAttributes(state),\n cluster: getCluster(state),\n };\n}\n\nconst mapDispatchToProps = {\n setFilter,\n setContentMode,\n fetchNodes,\n setMediumType,\n openEditingPopup,\n openCreateTableModal,\n showLinkToModal,\n openCreateACOModal,\n};\n\nconst MapNodeConnected = connect(mapStateToProps, mapDispatchToProps)(MapNode);\n\nexport default function MapNodeWithRum() {\n const loadState = useSelector(getLoadState);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.NAVIGATION_CONTENT_MAP_NODE,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return loadState === LOADING_STATUS.LOADING;\n },\n });\n return <MapNodeConnected />;\n}\n\nclass MapNodeToolbar extends React.PureComponent {\n uploadXlsRef = React.createRef();\n uploadFileRef = React.createRef();\n\n createDirectoryButtonClick = () => {\n const {path, openEditingPopup} = this.props;\n openEditingPopup(null, path + '/', OPEN_CREATE_DIRECTORY_POPUP);\n };\n\n createTableButtonClick = () => {\n const {path} = this.props;\n this.props.openCreateTableModal(path);\n };\n\n uploadTableButtonClick = () => {\n if (this.uploadXlsRef.current) {\n this.uploadXlsRef.current.handleShow();\n }\n };\n\n uploadFileButtonClick = () => {\n if (this.uploadFileRef.current) {\n this.uploadFileRef.current.handleShow();\n }\n };\n\n createLinkButtonClick = () => {\n const {path} = this.props;\n this.props.showLinkToModal({path: `${path}/new_link`});\n };\n\n createACOButtonClick = () => {\n const {path} = this.props;\n\n this.props.openCreateACOModal({path, namespace: 'queries'});\n };\n\n render() {\n const {\n setFilter,\n contentMode,\n setContentMode,\n mediumList,\n mediumType,\n setMediumType,\n filterState,\n path,\n attributes,\n showACOCreateButton,\n cluster,\n } = this.props;\n\n const {uploadTableExcelBaseUrl} = getConfigUploadTable({cluster});\n\n const {menuItems, renderModals} = UIFactory.getMapNodeExtraCreateActions([\n {\n action: this.createTableButtonClick,\n text: <NoWrap>Table</NoWrap>,\n 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 {\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 ...(!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.uploadFileButtonClick,\n text: <NoWrap>Upload file</NoWrap>,\n icon: <Icon awesome={'upload'} />,\n },\n ]);\n\n return (\n <div className={block('toolbar')}>\n <div className={tbBlock('container')}>\n <div className={block('filter', tbBlock('component'))}>\n <Filter\n size=\"m\"\n key={path}\n debounce={300}\n value={filterState}\n onChange={setFilter}\n qa=\"map-node-filter\"\n />\n </div>\n\n <TTLInfo attributes={attributes} size={'m'} className={tbBlock('component')} />\n\n <div className={block('content-mode', tbBlock('component'))}>\n <RadioButton\n size=\"m\"\n name=\"navigation-map-node-content-mode\"\n value={contentMode}\n items={map_(\n MapNode.CONTENT_MODE_OPTIONS,\n RadioButton.prepareSimpleValue,\n )}\n onChange={(event) => setContentMode(event.target.value)}\n />\n </div>\n\n <div className={block('show-resources', tbBlock('component'))}>\n <ShowResourcesButton />\n </div>\n\n {mediumList?.length && (\n <div className={block('medium-type', tbBlock('component'))}>\n <SelectSingle\n label=\"Medium:\"\n placeholder=\"All\"\n value={mediumType}\n items={map_(mediumList, (type) => ({\n value: type,\n text: hammer.format['ReadableField'](type),\n }))}\n onChange={setMediumType}\n width=\"max\"\n hideFilter={true}\n />\n </div>\n )}\n\n <NavigationExtraActions\n className={block('copy-to-remote', tbBlock('component'))}\n />\n\n <div className={block('create-object', tbBlock('component'))}>\n <DropdownMenu\n menuSize={'n'}\n popupClass={block('create-popup')}\n items={menuItems}\n 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 <UploadFileManagerWithClose ref={this.uploadFileRef} title={'Upload file'} />\n {renderModals()}\n </div>\n );\n }\n}\n\nfunction ShowResourcesButton() {\n const dispatch = useDispatch();\n const isRoot = useSelector(isRootNode);\n const loading = useSelector(getMapNodeResourcesLoading);\n return (\n <Button\n size=\"m\"\n title=\"Show all nodes resource usage [Shift+S]\"\n disabled={isRoot}\n loading={loading}\n onClick={() => dispatch(updateResourceUsage())}\n hotkey={[{keys: 'shift+s', handler: updateResourceUsage, scope: 'all'}]}\n >\n Show resources\n </Button>\n );\n}\n\nconst MapNodeToolbarConnected = connect(mapStateToProps, mapDispatchToProps)(MapNodeToolbar);\n","// @ts-ignore\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\nimport CancelHelper from '../../../../utils/cancel-helper';\nimport {getPath} from '../../../selectors/navigation';\nimport {\n GET_DOCUMENT,\n SET_DOCUMENT_EDIT_MODE,\n} from '../../../../constants/navigation/content/document';\nimport {YTApiId, ytApiV3Id} from '../../../../rum/rum-wrap-api';\nimport {ThunkAction} from 'redux-thunk';\nimport {RootState} from '../../../reducers';\nimport {NavigationDocumentAction} from '../../../reducers/navigation/content/document';\nimport {wrapApiPromiseByToaster} from '../../../../utils/utils';\n\nconst requests = new CancelHelper();\n\ntype DocumentThunkAction = ThunkAction<void, RootState, any, NavigationDocumentAction>;\n\nexport const getDocument = (): DocumentThunkAction => (dispatch, getState) => {\n const state = getState();\n const path = getPath(state) as string;\n\n dispatch({type: GET_DOCUMENT.REQUEST});\n requests.removeAllRequests();\n\n return ytApiV3Id\n .get(YTApiId.navigationGetDocument, {\n parameters: {\n path,\n output_format: {$value: 'json', $attributes: {}},\n },\n cancellation: requests.saveCancelToken,\n })\n .then((document) => {\n dispatch({\n type: GET_DOCUMENT.SUCCESS,\n data: {document},\n });\n })\n .catch((error) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({type: GET_DOCUMENT.CANCELLED});\n } else {\n dispatch({\n type: GET_DOCUMENT.FAILURE,\n data: {error},\n });\n }\n });\n};\n\nexport const saveDocument =\n ({path, documentString}: {path: string; documentString: string}): DocumentThunkAction =>\n async (dispatch) => {\n const document = documentString === '' ? null : JSON.parse(documentString);\n try {\n await wrapApiPromiseByToaster(yt.v3.set({path}, document), {\n toasterName: 'navigation-save-document',\n errorTitle: 'Failed to save document',\n successTitle: 'Document successfully saved',\n });\n\n dispatch({type: SET_DOCUMENT_EDIT_MODE, data: false});\n dispatch({\n type: GET_DOCUMENT.SUCCESS,\n data: {document: document},\n });\n\n return Promise.resolve();\n } catch (e) {\n return Promise.reject(e);\n }\n };\n\nexport const abortAndReset = (): DocumentThunkAction => (dispatch) => {\n requests.removeAllRequests();\n dispatch({type: GET_DOCUMENT.CANCELLED});\n};\n","import {createSelector} from 'reselect';\nimport {RootState} from '../../../reducers';\nimport {calculateLoadingStatus} from '../../../../utils/utils';\n\nexport const getNavigationDocumentLoadingStatus = createSelector(\n [\n (store: RootState) => store.navigation.content.document.loading,\n (store: RootState) => store.navigation.content.document.loaded,\n (store: RootState) => store.navigation.content.document.error,\n ],\n (loading, loaded, error) => {\n return calculateLoadingStatus(loading, loaded, error);\n },\n);\n\nexport const selectNavigationDocument = (store: RootState) => store.navigation.content.document;\n","import React, {FC, Fragment} from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {Alert, Button, Flex} from '@gravity-ui/uikit';\n\n// @ts-ignore\nimport ypath from '@ytsaurus/interface-helpers/lib/ypath';\nimport MetaTable from '../../../../components/MetaTable/MetaTable';\nimport {main} from '../../../../components/MetaTable/presets';\nimport Yson from '../../../../components/Yson/Yson';\nimport {UnipikaSettings} from '../../../../components/Yson/StructuredYson/StructuredYsonTypes';\nimport Icon from '../../../../components/Icon/Icon';\nimport {OpenQueryButtons} from '../../../../containers/OpenQueryButtons/OpenQueryButtons';\n\nimport './DocumentBody.scss';\n\nconst block = cn('yt-document-body');\n\ntype Props = {\n attributes: Record<any, any>;\n document: any;\n settings: UnipikaSettings;\n onEditClick: () => void;\n queryAutoOpen?: boolean;\n};\n\nconst EditButton: FC<Pick<Props, 'onEditClick'>> = ({onEditClick}) => {\n return (\n <Button onClick={onEditClick}>\n <Icon awesome={'pencil'} />\n Edit\n </Button>\n );\n};\n\nfunction DocumentExtraTools({\n onEditClick,\n attributes,\n queryAutoOpen,\n}: Pick<Props, 'attributes' | 'onEditClick' | 'queryAutoOpen'>) {\n const isYqlView = 'view' === ypath.getValue(attributes, '/_yql_type');\n return (\n <Flex gap={4}>\n {isYqlView && <OpenQueryButtons className={block('yql')} autoOpen={queryAutoOpen} />}\n <EditButton onEditClick={onEditClick} />\n </Flex>\n );\n}\n\nfunction DocumentBody({attributes, settings, onEditClick, document = null, queryAutoOpen}: Props) {\n const [type] = ypath.getValues(attributes, ['/type']);\n\n return (\n <Fragment>\n <MetaTable items={[main(attributes), [{key: 'type', value: type}]]} />\n {document === null ? (\n <Alert\n layout=\"horizontal\"\n theme=\"info\"\n message=\"Document is empty.\"\n actions={<EditButton onEditClick={onEditClick} />}\n />\n ) : (\n <Yson\n value={document}\n settings={settings}\n folding\n extraTools={\n <DocumentExtraTools\n onEditClick={onEditClick}\n attributes={attributes}\n queryAutoOpen={queryAutoOpen}\n />\n }\n />\n )}\n </Fragment>\n );\n}\n\nexport default DocumentBody;\n","import React, {FC, useCallback} from 'react';\nimport cn from 'bem-cn-lite';\nimport './DocumentEditModal.scss';\nimport {FormApi, YTDFDialog} from '../../../../components/Dialog';\nimport {Text} from '@gravity-ui/uikit';\nimport {UnipikaSettings} from '../../../../components/Yson/StructuredYson/StructuredYsonTypes';\n\ntype Props = {\n open: boolean;\n document: any;\n settings: UnipikaSettings;\n onCancel: () => void;\n onSave: (data: string) => Promise<void>;\n};\n\ntype FormValues = {\n jsonEditor: {value: string};\n};\n\nconst block = cn('document-edit-modal');\n\nconst DocumentEditModal: FC<Props> = ({open, document, settings, onCancel, onSave}) => {\n const handleSaveDocument = useCallback(\n (form: FormApi<FormValues, Partial<FormValues>>) => {\n return onSave(form.getState().values.jsonEditor.value);\n },\n [onSave],\n );\n\n return (\n <YTDFDialog<FormValues>\n className={block()}\n headerProps={{\n title: (\n <Text variant=\"header-1\" color=\"secondary\">\n Edit document\n </Text>\n ),\n }}\n visible={open}\n onClose={onCancel}\n onAdd={handleSaveDocument}\n initialValues={{jsonEditor: {value: JSON.stringify(document, null, '\\t')}}}\n fields={[\n {\n fullWidth: true,\n name: 'jsonEditor',\n type: 'json',\n extras: {\n className: block('editor'),\n initialSplitSize: '50%',\n initialShowPreview: false,\n unipikaSettings: settings,\n folding: true,\n },\n },\n ]}\n />\n );\n};\n\nexport default DocumentEditModal;\n","import React, {FC, useCallback, useEffect} from 'react';\nimport {useDispatch, useSelector} from '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 {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';\nimport {StickyContainer} from '../../../../components/StickyContainer/StickyContainer';\nimport {Toolbar} from '../../../../components/WithStickyToolbar/Toolbar/Toolbar';\n\nimport {NAVIGATION_TRANSACTION_MAP_TABLE_ID} from '../../../../constants/navigation/content/transaction-map';\nimport {\n changeFilter,\n loadTransactions,\n} from '../../../../store/actions/navigation/content/transaction-map';\nimport {\n getNavigationTransactionMapLoadingStatus,\n getTransactions,\n} from '../../../../store/selectors/navigation/content/transaction-map';\nimport {tableItems} from '../../../../utils/navigation/content/transaction-map/table';\nimport {getIconNameForType} from '../../../../utils/navigation/path-editor';\nimport {getPath, getTransaction} from '../../../../store/selectors/navigation';\nimport {itemNavigationAllowed} from '../../../../pages/navigation/Navigation/ContentViewer/helpers';\n\nimport {useRumMeasureStop} from '../../../../rum/RumUiContext';\nimport {useAppRumMeasureStart} from '../../../../rum/rum-app-measures';\nimport {RumMeasureTypes} from '../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../utils/utils';\n\nimport './TransactionMap.scss';\n\nconst block = cn('navigation-transaction-map');\n\nclass TransactionMap extends Component {\n static propTypes = {\n // from connect\n loading: PropTypes.bool.isRequired,\n loaded: PropTypes.bool.isRequired,\n error: PropTypes.bool.isRequired,\n errorData: PropTypes.object.isRequired,\n\n path: PropTypes.string.isRequired,\n filter: PropTypes.string.isRequired,\n transactions: PropTypes.arrayOf(PropTypes.shape({})).isRequired,\n transaction: PropTypes.string,\n\n changeFilter: PropTypes.func.isRequired,\n loadTransactions: PropTypes.func.isRequired,\n };\n\n static renderIcon(item) {\n const iconName = getIconNameForType(item.type);\n\n return <Icon awesome={iconName} />;\n }\n\n static renderId(item) {\n const isLink = itemNavigationAllowed(item);\n\n return <FormattedTextOrLink state={item.pathState} asLink={isLink} text={item.id} />;\n }\n\n static renderOwner(item) {\n return <FormattedText text={item.owner} />;\n }\n\n static renderStartTime(item) {\n return hammer.format['DateTime'](item.started, {format: 'full'});\n }\n\n static renderTitle(item) {\n return <FormattedText text={item.title} />;\n }\n\n static renderActions(item) {\n return (\n <ClickableAttributesButton\n title={item.id}\n path={`//sys/transactions/${item.id}`}\n withTooltip\n />\n );\n }\n\n componentDidMount() {\n this.props.loadTransactions();\n }\n\n componentDidUpdate(prevProps) {\n const {path, transaction, loadTransactions} = this.props;\n\n if (prevProps.path !== path || prevProps.transaction !== transaction) {\n loadTransactions();\n }\n }\n\n get tableSettings() {\n return {\n css: block(),\n theme: 'light',\n cssHover: true,\n striped: false,\n tableId: NAVIGATION_TRANSACTION_MAP_TABLE_ID,\n columns: {\n items: tableItems,\n sets: {\n default: {\n items: ['icon', 'id', 'title', 'owner', 'start_time', 'actions'],\n },\n },\n mode: 'default',\n },\n templates: {\n icon: TransactionMap.renderIcon,\n id: TransactionMap.renderId,\n owner: TransactionMap.renderOwner,\n start_time: TransactionMap.renderStartTime,\n title: TransactionMap.renderTitle,\n actions: TransactionMap.renderActions,\n },\n computeKey(item) {\n return item.id;\n },\n };\n }\n\n handleFilterChange = (value) => this.props.changeFilter(value);\n\n render() {\n const {filter, loading, transactions} = this.props;\n\n return (\n <div className={block()}>\n <StickyContainer>\n {({stickyTopClassName}) => (\n <React.Fragment>\n <Toolbar\n className={stickyTopClassName}\n itemsToWrap={[\n {\n node: (\n <Filter\n hasClear\n size=\"m\"\n value={filter}\n debounce={300}\n className={block('filter')}\n onChange={this.handleFilterChange}\n placeholder=\"Filter transactions...\"\n />\n ),\n },\n ]}\n />\n <LoadDataHandler {...this.props}>\n <ElementsTable\n {...this.tableSettings}\n items={transactions}\n isLoading={loading}\n />\n </LoadDataHandler>\n </React.Fragment>\n )}\n </StickyContainer>\n </div>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const {filter, loading, loaded, error, errorData} = state.navigation.content.transactionMap;\n const path = getPath(state);\n const transaction = getTransaction(state);\n const transactions = getTransactions(state);\n\n return {\n loading,\n loaded,\n error,\n errorData,\n path,\n transaction,\n filter,\n transactions,\n };\n};\n\nconst mapDispatchToProps = {\n loadTransactions,\n changeFilter,\n};\n\nconst TransactionMapConnected = connect(mapStateToProps, mapDispatchToProps)(TransactionMap);\n\nexport default function TranscationMapWithRum() {\n const loadState = useSelector(getNavigationTransactionMapLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.NAVIGATION_CONTENT_TRANSACTION_MAP,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.NAVIGATION_CONTENT_TRANSACTION_MAP,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <TransactionMapConnected />;\n}\n","import {AccessAclTab} from '../../../tabs/ACL/ACL';\nimport ReplicatedTable from '../../../../../pages/navigation/content/ReplicatedTable/ReplicatedTable';\nimport ReplicatedTableMeta from '../../../content/ReplicatedTable/ReplicatedTableMeta';\n\nimport Link from '../../../../../pages/navigation/content/Link/Link';\nimport File from '../../../../../pages/navigation/content/File/File';\nimport Table from '../../../../../pages/navigation/content/Table/Table';\nimport MapNode from '../../../../../pages/navigation/content/MapNode/MapNode';\nimport Document from '../../../content/Document/DocumentWithRum';\nimport Transaction from '../../../../../pages/navigation/content/Transaction/Transaction';\nimport TransactionMap from '../../../../../pages/navigation/content/TransactionMap/TransactionMap';\n\nconst supportedContentTypes = {\n map_node: MapNode,\n portal_entrance: MapNode,\n portal_exit: MapNode,\n rootstock: MapNode,\n scion: MapNode,\n cell_node_map: MapNode,\n sys_node: MapNode,\n access_control_object_namespace_map: MapNode,\n access_control_object_namespace: MapNode,\n access_control_object: AccessAclTab,\n tablet_cell: MapNode,\n chaos_cell: MapNode,\n scheduler_pool_tree_map: MapNode,\n scheduler_pool: MapNode,\n document: Document,\n string_node: Document,\n int64_node: Document,\n uint64_node: Document,\n double_node: Document,\n boolean_node: Document,\n link: Link,\n file: File,\n table: Table,\n replicated_table: ReplicatedTable,\n chaos_replicated_table: ReplicatedTable,\n replication_log_table: ReplicatedTableMeta,\n transaction: Transaction,\n nested_transaction: Transaction,\n topmost_transaction_map: TransactionMap,\n transaction_map: TransactionMap,\n};\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 {useSelector} from 'react-redux';\nimport moment from 'moment';\n\nimport {YTErrorBlock, YTErrorBlockProps} from '../../../../components/Block/Block';\nimport {Info} from '../../../../components/Info/Info';\nimport {getErrorWithCode} from '../../../../utils/errors';\nimport {YTError} from '../../../../types';\n\nimport {getNavigationPathAttributes} from '../../../../store/selectors/navigation/navigation';\n\n// https://github.com/ytsaurus/ytsaurus/blob/95acd2c25e8996eccada40d178bfef6784fb3278/yt/yt/client/queue_client/public.h#L18\nconst QUEUE_IS_NOT_MAPPED = 3105;\nconst MAPPING_TIMEOUT = 5 * 60 * 1000;\n\nexport function QueueError({error, ...rest}: Omit<YTErrorBlockProps, 'error'> & {error: YTError}) {\n const {modification_time} = useSelector(getNavigationPathAttributes);\n\n const isMappingError = React.useMemo(() => {\n const modificationTime = moment(modification_time).valueOf();\n if (Math.abs(Date.now() - modificationTime) > MAPPING_TIMEOUT) {\n return false;\n }\n return getErrorWithCode([error], QUEUE_IS_NOT_MAPPED);\n }, [error, modification_time]);\n\n if (isMappingError) {\n return (\n <Info>\n The node is mapping to a queue agent at the moment, the process may take up to 5\n minutes.\n </Info>\n );\n }\n\n return <YTErrorBlock error={error} {...rest} />;\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\nimport map_ from 'lodash/map';\nimport reduce_ from 'lodash/reduce';\nimport {useDispatch, useSelector} from '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, useDispatch} from 'react-redux';\nimport {Button} from '@gravity-ui/uikit';\nimport cn from 'bem-cn-lite';\n\nimport RadioButton from '../../../../../components/RadioButton/RadioButton';\nimport {CONSUMER_MODE} from '../../../../../constants/navigation/tabs/consumer';\nimport {changeConsumerMode} from '../../../../../store/actions/navigation/tabs/consumer/filters';\nimport {toggleRegisterDialog} from '../../../../../store/reducers/navigation/tabs/consumer/register';\nimport type {RootState} from '../../../../../store/reducers';\nimport {getConsumerMode} from '../../../../../store/selectors/navigation/tabs/consumer';\n\nimport './Toolbar.scss';\n\nconst block = cn('consumer-toolbar');\n\ninterface Props extends PropsFromRedux {\n extras: ComponentType;\n}\n\nconst tabItems: React.ComponentProps<typeof RadioButton>['items'] = [\n {\n value: CONSUMER_MODE.METRICS,\n text: 'Metrics',\n },\n {\n value: CONSUMER_MODE.PARTITIONS,\n text: 'Partitions',\n },\n];\n\nconst Toolbar: React.VFC<Props> = ({extras: Extras, consumerMode, changeConsumerMode}) => {\n const dispatch = useDispatch();\n const openRegisterDialog = () => dispatch(toggleRegisterDialog());\n\n return (\n <div className={block()}>\n <RadioButton value={consumerMode} onChange={changeConsumerMode} items={tabItems} />\n <Extras />\n <Button view={'outlined'} onClick={openRegisterDialog}>\n Register to queue\n </Button>\n </div>\n );\n};\n\nfunction mapStateToProps(state: RootState) {\n return {\n consumerMode: getConsumerMode(state),\n };\n}\n\nconst mapDispatchToProps = {\n changeConsumerMode,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\nexport default connector(Toolbar);\n","import {BaseQueryApi} from '@reduxjs/toolkit/query';\n\nimport {rootApi} from '../../../../../store/api';\n\nimport {RootState} from '../../../../../store/reducers';\nimport {getPath} from '../../../../../store/selectors/navigation';\nimport {getTargetQueue} from '../../../../../store/selectors/navigation/tabs/consumer';\nimport {getCluster} from '../../../../../store/selectors/global';\n\nimport {ytApiV4} from '../../../../../rum/rum-wrap-api';\nimport {wrapApiPromiseByToaster} from '../../../../../utils/utils';\n\ntype RegisterConsumerArgs = {\n queuePath: string;\n queueCluster: string;\n};\n\nasync function register(args: RegisterConsumerArgs, api: BaseQueryApi) {\n try {\n const {queuePath, queueCluster} = args;\n\n const state = api.getState() as RootState;\n const consumerPath = getPath(state);\n const consumerCluster = getCluster(state);\n const {vital} = getTargetQueue(state) ?? {vital: false};\n\n const response = await wrapApiPromiseByToaster(\n ytApiV4.executeBatch({\n parameters: {\n requests: [\n {\n command: 'register_queue_consumer' as const,\n parameters: {\n vital,\n queue_path: {\n $value: queuePath,\n $attributes: {cluster: queueCluster},\n },\n consumer_path: {\n $value: consumerPath,\n $attributes: {cluster: consumerCluster},\n },\n },\n },\n ],\n },\n }),\n {\n toasterName: 'register queue consumer',\n successContent: 'Registration of the consumer has started, this may take some time',\n skipErrorToast: true,\n batchType: 'v4',\n errorTitle: '',\n },\n );\n if (response.results[0]?.error) {\n throw response.results[0]?.error;\n }\n return {data: []};\n } catch (error) {\n return {error};\n }\n}\n\nconst consumerApi = rootApi.injectEndpoints({\n endpoints: (build) => ({\n register: build.mutation({\n queryFn: register,\n }),\n }),\n});\n\nexport const {useRegisterMutation} = consumerApi;\n","import {YT} from '../../../config/yt-config';\n\nexport function makeClusterSelectOptionsSameEnv(cluster: string) {\n const clusters = Object.entries(YT.clusters)\n .filter(([_, value]) => value.environment === YT.clusters[cluster].environment)\n .map(([key]) => key);\n return clusters\n .map((cluster) => ({\n value: cluster,\n content: cluster,\n }))\n ?.sort((a, b) => a.value.localeCompare(b.value));\n}\n","import React, {useMemo} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {\n getRegisterDialogVisibility,\n toggleRegisterDialog,\n} from '../../../../../store/reducers/navigation/tabs/consumer/register';\nimport {useRegisterMutation} from '../../../../../store/api/navigation/tabs/consumer/consumer';\nimport {getCluster} from '../../../../../store/selectors/global';\n\nimport {FormApi, YTDFDialog, makeErrorFields} from '../../../../../components/Dialog';\n\nimport {makeClusterSelectOptionsSameEnv} from '../../../../../utils/navigation/tabs/make-cluster-select-options-same-env';\n\nimport {YTError} from '../../../../../../@types/types';\n\ntype FormValues = {\n queuePath: string;\n queueCluster: string;\n};\n\nexport function RegisterConsumerDialog() {\n const dispatch = useDispatch();\n const visible = useSelector(getRegisterDialogVisibility);\n const cluster = useSelector(getCluster);\n\n const onClose = () => dispatch(toggleRegisterDialog());\n\n const [update, {isLoading, error}] = useRegisterMutation();\n\n const clusterControlOptions = useMemo(\n () => makeClusterSelectOptionsSameEnv(cluster),\n [cluster],\n );\n\n return (\n <YTDFDialog\n visible={visible}\n headerProps={{title: 'Register consumer to queue'}}\n fields={[\n {\n type: 'select' as const,\n name: 'queueCluster',\n caption: 'Cluster',\n extras: {\n options: clusterControlOptions,\n placeholder: 'Cluster',\n width: 'max',\n filterable: true,\n },\n },\n {\n type: 'text' as const,\n name: 'queuePath',\n caption: 'Path',\n required: true,\n extras: {\n placeholder: 'Path to queue...',\n },\n },\n ...makeErrorFields([error as YTError]),\n ]}\n size={'m'}\n onAdd={async (form: FormApi<FormValues>) => {\n const {values} = form.getState();\n const newValues = {...values, queueCluster: values.queueCluster[0]};\n await update(newValues).unwrap();\n }}\n isApplyDisabled={(state) => {\n return state.hasValidationErrors || isLoading;\n }}\n onClose={onClose}\n />\n );\n}\n","import React from 'react';\nimport moment from 'moment';\nimport type {Column} from '@gravity-ui/react-data-table';\n\nimport format from '../../../../../common/hammer/format';\nimport Label from '../../../../../components/Label/Label';\nimport Link from '../../../../../components/Link/Link';\nimport Multimeter from '../../../../../components/Multimeter/Multimeter';\nimport {SubjectCard} from '../../../../../components/SubjectLink/SubjectLink';\nimport WarningIcon from '../../../../../components/WarningIcon/WarningIcon';\nimport type {TPerformanceCounters} from '../../../../../store/reducers/navigation/tabs/queue/types';\nimport {Host} from '../../../../../containers/Host/Host';\nimport type {YTError} from '../../../../../types';\nimport {genNavigationUrl} from '../../../../../utils/navigation/navigation';\nimport {ClickableText} from '../../../../../components/ClickableText/ClickableText';\nimport {showErrorPopup} from '../../../../../utils/utils';\n\nconst DISPLAY_FORMAT = 'DD-MM-YYYY HH:mm:ss';\n\nexport function bool<T>(name: string, getter: (row: T) => boolean): Column<T> {\n return {\n name,\n render({row}) {\n return <Label theme=\"default\" text={getter(row) ? 'True' : 'False'} />;\n },\n sortAccessor: getter,\n };\n}\n\nexport function datetime<T>(name: string, getter: (row: T) => string | null): Column<T> {\n return {\n name,\n render({row}) {\n return moment(getter(row)).format(DISPLAY_FORMAT);\n },\n sortAccessor(row) {\n return moment(getter(row)).valueOf();\n },\n };\n}\n\nexport function error<T>(\n name: string,\n getter: (row: T) => YTError | undefined,\n className?: string,\n): Column<T> {\n return {\n name,\n render({row}) {\n const error = getter(row);\n if (!error) return null;\n\n return (\n <WarningIcon\n className={className}\n color=\"danger\"\n hoverContent={<HoverContent error={error} />}\n >\n Error\n </WarningIcon>\n );\n },\n sortAccessor: getter,\n };\n}\n\nfunction HoverContent({error}: {error: YTError}) {\n return (\n <span>\n {error.message ?? 'Error'}{' '}\n <ClickableText onClick={() => showErrorPopup(error)}>Details</ClickableText>\n </span>\n );\n}\n\nexport function host<T>(name: string, getter: (row: T) => string, classNames: string): Column<T> {\n return {\n name,\n render({row}) {\n const host = getter(row);\n return <Host asTabletNode address={host} copyBtnClassName={classNames} />;\n },\n sortAccessor: getter,\n };\n}\n\nexport function multimeter<T>(\n name: string,\n getter: (row: T) => TPerformanceCounters,\n show: keyof TPerformanceCounters,\n valueFormat: (value: number) => React.ReactNode = format.Number,\n): Column<T> {\n return {\n name,\n render({row}) {\n const counters = getter(row);\n return <Multimeter {...counters} show={show} format={valueFormat} />;\n },\n sortAccessor(row) {\n const counters = getter(row);\n return counters['1m'];\n },\n };\n}\n\nexport function number<T>(name: string, getter: (row: T) => number | null): Column<T> {\n return {\n name,\n align: 'right',\n render({row}) {\n return format.Number(getter(row));\n },\n sortAccessor: getter,\n };\n}\n\nexport function string<T>(name: string, getter: (row: T) => string): Column<T> {\n return {\n name,\n render({row}) {\n return getter(row);\n },\n sortAccessor: getter,\n };\n}\n\nexport function user<T>(name: string, getter: (row: T) => string): Column<T> {\n return {\n name,\n render({row}) {\n return <SubjectCard name={getter(row)} />;\n },\n sortAccessor: getter,\n };\n}\n\nexport function ypath<T>(name: string, getter: (row: T) => string): Column<T> {\n return {\n name,\n render({row}) {\n const consumer = getter(row);\n if (!consumer) return null;\n\n const [cluster, path] = consumer.split(':');\n const url = genNavigationUrl({cluster, path});\n\n return (\n <Link url={url} routed>\n {consumer}\n </Link>\n );\n },\n sortAccessor: getter,\n };\n}\n","import React, {useEffect} from 'react';\nimport {ConnectedProps, connect, 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 ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\nimport WithStickyToolbar from '../../../../components/WithStickyToolbar/WithStickyToolbar';\nimport {Toolbar} from '../../../../components/WithStickyToolbar/Toolbar/Toolbar';\nimport {CONSUMER_MODE} from '../../../../constants/navigation/tabs/consumer';\nimport {loadConsumerStatus} from '../../../../store/actions/navigation/tabs/consumer/status';\nimport type {RootState} from '../../../../store/reducers';\nimport {\n getConsumerMode,\n getOwner,\n getPartitionCount,\n getReadDataWeightRate,\n getReadRowCountRate,\n getStatusError,\n} from '../../../../store/selectors/navigation/tabs/consumer';\n\nimport {QueueError} from '../Queue/QueueError';\n\nimport TargetQueue from './TargetQueue/TargetQueue';\nimport Meta from './Meta/Meta';\nimport ConsumerToolbar from './Toolbar/Toolbar';\nimport {RegisterConsumerDialog} from './modals/RegisterDialog';\nimport ConsumerMetrics from './views/ConsumerMetrics/ConsumerMetrics';\nimport Partitions from './views/Partitions/Partitions';\nimport PartitionsExtraControls from './views/Partitions/PartitionsExtraControls';\n\nconst views: Record<CONSUMER_MODE, {ExtraControls: ComponentType; View: ComponentType}> = {\n [CONSUMER_MODE.METRICS]: {ExtraControls: () => null, View: ConsumerMetrics},\n [CONSUMER_MODE.PARTITIONS]: {ExtraControls: PartitionsExtraControls, View: Partitions},\n};\n\nconst emptyView: {ExtraControls: ComponentType; View: ComponentType} = {\n ExtraControls: () => null,\n View: () => null,\n};\n\nfunction useViewByMode(mode: CONSUMER_MODE): {ExtraControls: ComponentType; View: ComponentType} {\n return views[mode] || emptyView;\n}\n\nconst Consumer: React.VFC<PropsFromRedux> = ({\n loadConsumerStatus,\n owner,\n partitionCount,\n readDataWeightRate,\n readRowCountRate,\n consumerMode,\n statusError,\n}) => {\n useEffect(() => {\n loadConsumerStatus();\n }, []);\n\n const {ExtraControls, View} = useViewByMode(consumerMode);\n\n if (statusError) {\n return <QueueError error={statusError} topMargin=\"none\" />;\n }\n\n return (\n <ErrorBoundary>\n <TargetQueue />\n <Meta\n owner={owner}\n partitionCount={partitionCount}\n readDataWeightRate={readDataWeightRate}\n readRowCountRate={readRowCountRate}\n />\n <WithStickyToolbar\n toolbar={\n <Toolbar\n itemsToWrap={[\n {node: <ConsumerToolbar extras={ExtraControls} />, growable: true},\n ]}\n />\n }\n content={<View />}\n />\n <RegisterConsumerDialog />\n </ErrorBoundary>\n );\n};\n\nfunction mapStateToProps(state: RootState) {\n return {\n owner: getOwner(state),\n partitionCount: getPartitionCount(state),\n readDataWeightRate: getReadDataWeightRate(state),\n readRowCountRate: getReadRowCountRate(state),\n consumerMode: getConsumerMode(state),\n statusError: getStatusError(state),\n };\n}\n\nconst mapDispatchToProps = {\n loadConsumerStatus,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\nexport default connector(Consumer);\n","import React from 'react';\n\nimport {getCluster} from '../../../../../../store/selectors/global';\nimport {getPath} from '../../../../../../store/selectors/navigation';\nimport {getTargetQueue} from '../../../../../../store/selectors/navigation/tabs/consumer';\nimport {useSelector} from '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 {BaseQueryApi} from '@reduxjs/toolkit/query';\n\nimport {RootState} from '../../../../../store/reducers';\nimport {getPath} from '../../../../../store/selectors/navigation';\nimport {getCluster} from '../../../../../store/selectors/global';\n\nimport {ytApiV3, ytApiV4} from '../../../../../rum/rum-wrap-api';\nimport {wrapApiPromiseByToaster} from '../../../../../utils/utils';\nimport {BatchResultsItem} from '../../../../../../shared/yt-types';\n\ntype CreateConsumersMutationArgs = {\n consumerPath: string;\n} & (\n | {\n register?: false | undefined;\n vital?: boolean;\n }\n | {\n register: true;\n vital: boolean;\n }\n);\n\nexport async function createConsumer(args: CreateConsumersMutationArgs, api: BaseQueryApi) {\n try {\n const {vital, register, consumerPath} = args;\n\n const state = api.getState() as RootState;\n const queuePath = getPath(state);\n\n await ytApiV3.create({\n parameters: {\n type: 'queue_consumer',\n path: consumerPath,\n },\n });\n\n if (register) {\n const response = await wrapApiPromiseByToaster<\n {results: BatchResultsItem<unknown>[]},\n 'v4'\n >(\n ytApiV4.executeBatch({\n parameters: {\n requests: [\n {\n command: 'register_queue_consumer' as const,\n parameters: {\n vital,\n queue_path: queuePath,\n consumer_path: consumerPath,\n },\n },\n ],\n },\n }),\n {\n toasterName: 'register queue consumer',\n successContent:\n 'Registration of the consumer has started, this may take some time',\n skipErrorToast: true,\n batchType: 'v4',\n errorTitle: '',\n },\n );\n if (response.results[0]?.error) {\n throw response.results[0]?.error;\n }\n }\n\n return {data: []};\n } catch (error) {\n return {error};\n }\n}\n\ntype RegisterConsumersMutationArgs = {\n consumerPath: string;\n consumerCluster: string;\n vital: boolean;\n};\n\nexport async function registerConsumer(args: RegisterConsumersMutationArgs, api: BaseQueryApi) {\n try {\n const {vital, consumerPath, consumerCluster} = args;\n\n const state = api.getState() as RootState;\n const queuePath = getPath(state);\n const queueCluster = getCluster(state);\n\n const response = await wrapApiPromiseByToaster<\n {results: BatchResultsItem<unknown>[]},\n 'v4'\n >(\n ytApiV4.executeBatch({\n parameters: {\n requests: [\n {\n command: 'register_queue_consumer' as const,\n parameters: {\n vital,\n queue_path: {\n $value: queuePath,\n $attributes: {\n cluster: queueCluster,\n },\n },\n consumer_path: {\n $value: consumerPath,\n $attributes: {\n cluster: consumerCluster,\n },\n },\n },\n },\n ],\n },\n }),\n {\n toasterName: 'register queue consumer',\n successContent: 'Registration of the consumer has started, this may take some time',\n skipErrorToast: true,\n batchType: 'v4',\n errorTitle: '',\n },\n );\n\n if (response.results[0]?.error) {\n throw response.results[0]?.error;\n }\n return {data: []};\n } catch (error) {\n return {error};\n }\n}\n\nexport async function unregisterConsumer(args: {consumerPath: string}, api: BaseQueryApi) {\n try {\n const {consumerPath} = args;\n\n const state = api.getState() as RootState;\n const queue_path = getPath(state);\n\n const response = await wrapApiPromiseByToaster(\n ytApiV4.executeBatch({\n parameters: {\n requests: [\n {\n command: 'unregister_queue_consumer' as const,\n parameters: {\n queue_path,\n consumer_path: consumerPath,\n },\n },\n ],\n },\n }),\n {\n toasterName: 'unregister queue consumer',\n successContent:\n 'Unregistration of the consumer has started, this may take some time',\n skipErrorToast: true,\n batchType: 'v4',\n errorTitle: '',\n },\n );\n\n if (response.results[0]?.error) {\n throw response.results[0]?.error;\n }\n\n return {data: []};\n } catch (error) {\n return {error};\n }\n}\n","import {BaseQueryApi} from '@reduxjs/toolkit/query';\n//@ts-expect-error\nimport yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport ypath from '../../../../../common/thor/ypath';\n\nimport {RootState} from '../../../../../store/reducers';\nimport {ytApi} from '../../../../../store/api/yt';\nimport {getAttributes, getPath} from '../../../../../store/selectors/navigation';\nimport {getCluster} from '../../../../../store/selectors/global';\n\nimport CancelHelper from '../../../../../utils/cancel-helper';\nimport {wrapApiPromiseByToaster} from '../../../../../utils/utils';\nimport {prepareRequest} from '../../../../../utils/navigation';\nimport {YTApiId, ytApiV3} from '../../../../../rum/rum-wrap-api';\nimport {QueueExport, QueueExportConfig} from '../../../../../types/navigation/queue/queue';\n\nconst cancelHelper = new CancelHelper();\n\ntype Config = QueueExportConfig<number> & {export_name: string};\n\ntype ExportsMutationArgs = {\n type: 'delete' | 'edit';\n prevConfig?: Config;\n newConfig?: Config;\n};\n\nexport const makeGetExportsParams = (path: string) => ({\n id: YTApiId.queueExportConfig,\n errorTitle: 'Failed to get export config',\n parameters: {\n requests: [\n {\n command: 'get' as const,\n parameters: prepareRequest('static_export_config', {path: `${path}/@`}),\n },\n ],\n },\n});\n\nasync function deleteExtraAttributes(\n configs: QueueExport<number>,\n prevConfig: Config,\n transactionId: string,\n) {\n await ytApiV3.remove({\n path: `${configs[prevConfig.export_name].export_directory}/@queue_static_export_destination`,\n cancellation: cancelHelper.removeAllAndSave,\n transaction_id: transactionId,\n });\n\n await ytApiV3.remove({\n path: `${configs[prevConfig.export_name].export_directory}/@queue_static_export_progress`,\n cancellation: cancelHelper.removeAllAndSave,\n transaction_id: transactionId,\n });\n}\n\nexport async function exportsMutation(args: ExportsMutationArgs, api: BaseQueryApi) {\n try {\n const state = api.getState() as RootState;\n const path = getPath(state);\n const attributes = getAttributes(state);\n const cluster = getCluster(state);\n\n const {prevConfig, type, newConfig} = args;\n\n const configs: QueueExport<number> = ytApi.endpoints.fetchBatch.select({\n ...makeGetExportsParams(path),\n cluster,\n })(state).data?.[0].output as QueueExport<number>;\n\n const newConfigs = {...configs};\n\n if (prevConfig?.export_name && newConfigs[prevConfig?.export_name]) {\n delete newConfigs[prevConfig?.export_name];\n }\n\n if (type === 'edit' && newConfig?.export_name) {\n newConfigs[newConfig?.export_name] = newConfig;\n }\n\n const transactionId = await yt.v3.startTransaction({});\n try {\n await ytApiV3.set(\n {\n path: `${path}/@static_export_config`,\n cancellation: cancelHelper.removeAllAndSave,\n transaction_id: transactionId,\n },\n newConfigs,\n );\n\n if (type === 'edit' && newConfig) {\n if (prevConfig && prevConfig.export_directory !== newConfig.export_directory) {\n await deleteExtraAttributes(configs, prevConfig, transactionId);\n }\n await ytApiV3.set(\n {\n path: `${newConfig.export_directory}/@queue_static_export_destination`,\n cancellation: cancelHelper.removeAllAndSave,\n transaction_id: transactionId,\n },\n {\n originating_queue_id: `${ypath.getValue(attributes, '/id')}`,\n },\n );\n }\n\n if (type === 'delete' && prevConfig?.export_name) {\n await deleteExtraAttributes(configs, prevConfig, transactionId);\n }\n\n await wrapApiPromiseByToaster(\n yt.v3.commitTransaction({transaction_id: transactionId}),\n {\n toasterName: 'exports_config_update',\n successContent: 'Exports config successfully updated',\n },\n );\n return {data: {}};\n } catch (error) {\n await yt.v3.abortTransaction({transaction_id: transactionId});\n return {error};\n }\n } catch (error) {\n return {error};\n }\n}\n","import {rootApi} from '../../../../../store/api';\n\nimport {YTApiId} from '../../../../../rum/rum-wrap-api';\nimport {createConsumer, registerConsumer, unregisterConsumer} from './consumers';\nimport {exportsMutation} from './exports';\n\nexport const queueApi = rootApi.injectEndpoints({\n endpoints: (build) => ({\n export: build.mutation({\n queryFn: exportsMutation,\n invalidatesTags: [String(YTApiId.queueExportConfig)],\n }),\n createConsumer: build.mutation({\n queryFn: createConsumer,\n }),\n unregisterConsumer: build.mutation({\n queryFn: unregisterConsumer,\n }),\n registerConsumer: build.mutation({\n queryFn: registerConsumer,\n }),\n }),\n});\n\nexport const {\n useExportMutation,\n useCreateConsumerMutation,\n useRegisterConsumerMutation,\n useUnregisterConsumerMutation,\n} = queueApi;\n","import ypath from '../../../../../../common/thor/ypath';\nimport {ytApiV3} from '../../../../../../rum/rum-wrap-api';\n\nexport async function validateCreateConsumerPath(path: string) {\n try {\n const parentPath = path\n .split('/')\n .slice(0, path.split('/').length - 1)\n .join('/');\n\n const res = await ytApiV3.executeBatch({\n parameters: {\n requests: [\n {\n command: 'get' as const,\n parameters: {\n path: `${parentPath}/@`,\n },\n },\n {\n command: 'get' as const,\n parameters: {\n path: `${path}/@`,\n },\n },\n {\n command: 'exists' as const,\n parameters: {\n path,\n },\n },\n ],\n },\n });\n\n if (ypath.getValue(res[0]?.output, '/type') !== 'map_node') {\n return 'Parent path should be a directory';\n }\n\n if (path && path.split('/').at(-1)?.length === 0) {\n return 'Consumer name should not be empty';\n }\n\n if (res[2]?.output) {\n return 'Path should not exist';\n }\n\n return undefined;\n } catch (err) {\n const e = err as Error;\n return e?.message || 'Unexpected type of error: ' + typeof e;\n }\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {\n getCreateDialogVisibility,\n toggleCreateDialog,\n} from '../../../../../../store/reducers/navigation/tabs/queue/consumers';\nimport {useCreateConsumerMutation} from '../../../../../../store/api/navigation/tabs/queue/queue';\n\nimport {FormApi, YTDFDialog, makeErrorFields} from '../../../../../../components/Dialog';\n\nimport {docsUrl} from '../../../../../../config';\nimport UIFactory from '../../../../../../UIFactory';\nimport {makeLink} from '../../../../../../utils/utils';\n\nimport {YTError} from '../../../../../../../@types/types';\n\nimport {validateCreateConsumerPath} from './utils';\n\nexport type CreateConsumerFormValues = {\n consumerPath: string;\n} & (\n | {\n register?: false | undefined;\n vital?: boolean;\n }\n | {\n register: true;\n vital: boolean;\n }\n);\n\nexport function CreateConsumerDialog() {\n const dispatch = useDispatch();\n const visible = useSelector(getCreateDialogVisibility);\n\n const [update, {isLoading, error}] = useCreateConsumerMutation();\n\n const onClose = () => dispatch(toggleCreateDialog());\n\n return (\n <YTDFDialog<CreateConsumerFormValues>\n visible={visible}\n fields={[\n {\n type: 'path' as const,\n name: 'consumerPath',\n caption: 'Path',\n required: true,\n validator: validateCreateConsumerPath,\n extras: {\n placeholder: 'Path to consumer node...',\n },\n },\n {\n type: 'tumbler' as const,\n name: 'register',\n caption: 'Register consumer',\n },\n {\n type: 'tumbler' as const,\n name: 'vital',\n caption: 'Vital',\n tooltip: (\n <div>\n {docsUrl(\n makeLink(\n UIFactory.docsUrls['dynamic-tables:queues#creating-a-consumer'],\n 'Docs',\n ),\n )}\n </div>\n ),\n visibilityCondition: {\n when: 'register',\n isActive: (v) => Boolean(v),\n },\n },\n ...makeErrorFields([error as YTError]),\n ]}\n headerProps={{title: 'Create consumer'}}\n size={'m'}\n onAdd={async (form: FormApi<CreateConsumerFormValues>) => {\n const {values} = form.getState();\n await update(values).unwrap();\n }}\n isApplyDisabled={(state) => {\n return state.hasValidationErrors || isLoading;\n }}\n onClose={onClose}\n />\n );\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Text} from '@gravity-ui/uikit';\n\nimport {\n closeUnregisterDialog,\n getConsumerPath,\n getUnregisterDialogVisibility,\n} from '../../../../../../store/reducers/navigation/tabs/queue/consumers';\nimport {useUnregisterConsumerMutation} from '../../../../../../store/api/navigation/tabs/queue/queue';\n\nimport {YTDFDialog, makeErrorFields} from '../../../../../../components/Dialog';\nimport {YTError} from '../../../../../../../@types/types';\n\nexport function UnregisterConsumerDialog() {\n const dispatch = useDispatch();\n const visible = useSelector(getUnregisterDialogVisibility);\n const consumerPath = useSelector(getConsumerPath);\n\n const onClose = () => dispatch(closeUnregisterDialog());\n\n const [update, {isLoading, error}] = useUnregisterConsumerMutation();\n\n return (\n <YTDFDialog\n visible={visible}\n headerProps={{title: 'Unregister consumer'}}\n fields={[\n {\n name: 'delete',\n type: 'block',\n extras: {\n children: (\n <Text variant={'body-2'}>\n Are you shure you want to unregister consumer?\n </Text>\n ),\n },\n },\n ...makeErrorFields([error as YTError]),\n ]}\n onAdd={async () => {\n if (consumerPath) {\n await update({consumerPath}).unwrap();\n }\n }}\n isApplyDisabled={(state) => {\n return state.hasValidationErrors || isLoading;\n }}\n onClose={onClose}\n />\n );\n}\n","import React, {useMemo} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {\n getRegisterDialogVisibility,\n toggleRegisterDialog,\n} from '../../../../../../store/reducers/navigation/tabs/queue/consumers';\nimport {useRegisterConsumerMutation} from '../../../../../../store/api/navigation/tabs/queue/queue';\nimport {getCluster} from '../../../../../../store/selectors/global';\n\nimport {FormApi, YTDFDialog, makeErrorFields} from '../../../../../../components/Dialog';\n\nimport {docsUrl} from '../../../../../../config';\nimport UIFactory from '../../../../../../UIFactory';\nimport {makeLink} from '../../../../../../utils/utils';\nimport {makeClusterSelectOptionsSameEnv} from '../../../../../../utils/navigation/tabs/make-cluster-select-options-same-env';\n\nimport {YTError} from '../../../../../../../@types/types';\n\ntype FormValues = {\n consumerPath: string;\n consumerCluster: string[];\n vital: boolean;\n};\n\nexport function RegisterConsumerDialog() {\n const dispatch = useDispatch();\n const visible = useSelector(getRegisterDialogVisibility);\n const cluster = useSelector(getCluster);\n\n const onClose = () => dispatch(toggleRegisterDialog());\n\n const [update, {isLoading, error}] = useRegisterConsumerMutation();\n\n const clusterControlOptions = useMemo(\n () => makeClusterSelectOptionsSameEnv(cluster),\n [cluster],\n );\n\n return (\n <YTDFDialog\n visible={visible}\n headerProps={{title: 'Register consumer'}}\n fields={[\n {\n type: 'select' as const,\n name: 'consumerCluster',\n caption: 'Cluster',\n initialValue: [cluster],\n extras: {\n options: clusterControlOptions,\n placeholder: 'Cluster',\n width: 'max',\n filterable: true,\n },\n },\n {\n type: 'text' as const,\n name: 'consumerPath',\n caption: 'Path',\n required: true,\n extras: {\n placeholder: 'Path to consumer node...',\n },\n },\n {\n type: 'tumbler' as const,\n name: 'vital',\n caption: 'Vital',\n tooltip: (\n <div>\n {docsUrl(\n makeLink(\n UIFactory.docsUrls['dynamic-tables:queues#creating-a-consumer'],\n 'Docs',\n ),\n )}\n </div>\n ),\n },\n ...makeErrorFields([error as YTError]),\n ]}\n size={'m'}\n onAdd={async (form: FormApi<FormValues>) => {\n const {values} = form.getState();\n const preparedValues = {...values, consumerCluster: values.consumerCluster[0]};\n await update(preparedValues).unwrap();\n }}\n isApplyDisabled={(state) => {\n return state.hasValidationErrors || isLoading;\n }}\n onClose={onClose}\n />\n );\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport cn from 'bem-cn-lite';\nimport {createSelector} from 'reselect';\nimport type {Column, Settings} from '@gravity-ui/react-data-table';\nimport {Button} from '@gravity-ui/uikit';\n\nimport format from '../../../../../../common/hammer/format';\nimport DataTableYT from '../../../../../../components/DataTableYT/DataTableYT';\nimport Icon from '../../../../../../components/Icon/Icon';\n\nimport {QUEUE_RATE_MODE} from '../../../../../../constants/navigation/tabs/queue';\nimport {\n bool,\n error,\n multimeter,\n ypath,\n} from '../../../../../../pages/navigation/tabs/Queue/utils/column-builder';\nimport type {TPerformanceCounters} from '../../../../../../store/reducers/navigation/tabs/queue/types';\nimport {openUnregisterDialog} from '../../../../../../store/reducers/navigation/tabs/queue/consumers';\nimport {\n SelectedConsumer,\n getConsumers,\n getQueueRateMode,\n getQueueTimeWindow,\n getStatusLoaded,\n getStatusLoading,\n} from '../../../../../../store/selectors/navigation/tabs/queue';\n\nimport {CreateConsumerDialog} from './CreateConsumerDialog';\nimport {UnregisterConsumerDialog} from './UnregisterConsumerDialog';\nimport {RegisterConsumerDialog} from './RegisterConsumerDialog';\n\nimport './Consumers.scss';\n\nconst block = cn('queue-consumers');\n\nconst readRateName: Record<QUEUE_RATE_MODE, string> = {\n [QUEUE_RATE_MODE.ROWS]: 'Read rate',\n [QUEUE_RATE_MODE.DATA_WEIGHT]: 'Read rate',\n};\nconst readRateGetter: Record<QUEUE_RATE_MODE, (row: SelectedConsumer) => TPerformanceCounters> = {\n [QUEUE_RATE_MODE.ROWS]: (x) => x.read_row_count_rate,\n [QUEUE_RATE_MODE.DATA_WEIGHT]: (x) => x.read_data_weight_rate,\n};\n\nconst getColumns = createSelector(\n [getQueueRateMode, getQueueTimeWindow],\n (rateMode, timeWindow): Array<Column<SelectedConsumer>> => [\n ypath<SelectedConsumer>('Consumer', (x) => x.consumer),\n error<SelectedConsumer>('Error', (x) => x.error),\n multimeter<SelectedConsumer>(\n readRateName[rateMode],\n readRateGetter[rateMode],\n timeWindow,\n rateMode === QUEUE_RATE_MODE.ROWS ? format.RowsPerSecond : format.BytesPerSecond,\n ),\n bool<SelectedConsumer>('Vital', (x) => x.vital),\n {\n name: 'actions',\n render: (value) => {\n return <UnregisterConsumer consumerPath={value.row.consumer} />;\n },\n header: '',\n },\n ],\n);\n\nfunction UnregisterConsumer({consumerPath}: {consumerPath: string}) {\n const dispatch = useDispatch();\n return (\n <Button view={'flat'} onClick={() => dispatch(openUnregisterDialog({consumerPath}))}>\n <Icon awesome={'xmark'} size={'l'} />\n </Button>\n );\n}\n\nconst settings: Settings = {displayIndices: false};\n\nexport default function Consumers() {\n const columns = useSelector(getColumns);\n const consumers = useSelector(getConsumers);\n const consumersLoading = useSelector(getStatusLoading);\n const consumersLoaded = useSelector(getStatusLoaded);\n\n return (\n <>\n <DataTableYT\n className={block('table-row')}\n columns={columns}\n data={consumers}\n loading={consumersLoading}\n loaded={consumersLoaded}\n useThemeYT\n settings={settings}\n />\n <CreateConsumerDialog />\n <UnregisterConsumerDialog />\n <RegisterConsumerDialog />\n </>\n );\n}\n","import React from 'react';\nimport {Button} from '@gravity-ui/uikit';\nimport {ConnectedProps, connect, useDispatch} 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';\n\nimport {\n toggleCreateDialog,\n toggleRegisterDialog,\n} from '../../../../../../store/reducers/navigation/tabs/queue/consumers';\nimport {\n changeQueueConsumerName,\n changeQueueOwner,\n changeQueueRateMode,\n changeQueueTimeWindow,\n} from '../../../../../../store/actions/navigation/tabs/queue/filters';\nimport type {RootState} from '../../../../../../store/reducers';\nimport {\n getQueueConsumerName,\n getQueueOwner,\n getQueueRateMode,\n getQueueTimeWindow,\n} from '../../../../../../store/selectors/navigation/tabs/queue';\n\nimport './ConsumersExtraControls.scss';\n\nconst block = cn('queue-consumers');\n\ninterface Props extends PropsFromRedux {}\n\nconst rateItems: React.ComponentProps<typeof RadioButton>['items'] = [\n {\n value: QUEUE_RATE_MODE.ROWS,\n text: 'Rows',\n },\n {\n value: QUEUE_RATE_MODE.DATA_WEIGHT,\n text: 'Data weight',\n },\n];\n\nconst ConsumersExtraControls: React.VFC<Props> = ({\n queueConsumerName,\n queueRateMode,\n changeQueueConsumerName,\n changeQueueRateMode,\n}) => {\n const dispatch = useDispatch();\n const openCreateDialog = () => dispatch(toggleCreateDialog());\n const openRegisterDialog = () => dispatch(toggleRegisterDialog());\n return (\n <>\n <div className={block('divider')} />\n <Filter\n className={block('filter')}\n value={queueConsumerName}\n onChange={changeQueueConsumerName}\n placeholder=\"Consumer name...\"\n />\n <RadioButton value={queueRateMode} onChange={changeQueueRateMode} items={rateItems} />\n <Button view={'outlined'} onClick={openCreateDialog}>\n Create consumer\n </Button>\n <Button view={'outlined'} onClick={openRegisterDialog}>\n Register consumer\n </Button>\n </>\n );\n};\n\nfunction mapStateToProps(state: RootState) {\n return {\n queueConsumerName: getQueueConsumerName(state),\n queueOwner: getQueueOwner(state),\n queueRateMode: getQueueRateMode(state),\n queueTimeWindow: getQueueTimeWindow(state),\n };\n}\n\nconst mapDispatchToProps = {\n changeQueueConsumerName,\n changeQueueOwner,\n changeQueueRateMode,\n changeQueueTimeWindow,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\nexport default connector(ConsumersExtraControls);\n","import React, {useEffect} from 'react';\nimport {ConnectedProps, connect} from 'react-redux';\nimport cn from 'bem-cn-lite';\nimport {createSelector} from 'reselect';\nimport type {Column, Settings} from '@gravity-ui/react-data-table';\n\nimport format from '../../../../../../common/hammer/format';\nimport DataTableYT from '../../../../../../components/DataTableYT/DataTableYT';\nimport {YTErrorBlock} from '../../../../../../components/Block/Block';\nimport {QUEUE_RATE_MODE} from '../../../../../../constants/navigation/tabs/queue';\nimport {\n datetime,\n error,\n host,\n multimeter,\n number,\n string,\n} from '../../../../../../pages/navigation/tabs/Queue/utils/column-builder';\nimport {loadQueuePartitions} from '../../../../../../store/actions/navigation/tabs/queue/partitions';\nimport type {RootState} from '../../../../../../store/reducers';\nimport type {TPerformanceCounters} from '../../../../../../store/reducers/navigation/tabs/queue/types';\nimport {\n SelectedPartition,\n getPartitions,\n getPartitionsError,\n getPartitionsLoaded,\n getPartitionsLoading,\n getQueuePartitionsColumns,\n getQueueRateMode,\n getQueueTimeWindow,\n} from '../../../../../../store/selectors/navigation/tabs/queue';\n\nimport './Partitions.scss';\n\nconst block = cn('queue-partitions');\n\nconst writeRateName: Record<QUEUE_RATE_MODE, string> = {\n [QUEUE_RATE_MODE.ROWS]: 'Write rate',\n [QUEUE_RATE_MODE.DATA_WEIGHT]: 'Write rate',\n};\n\nconst writeRateGetter: Record<QUEUE_RATE_MODE, (row: SelectedPartition) => TPerformanceCounters> = {\n [QUEUE_RATE_MODE.ROWS]: (x) => x.write_row_count_rate,\n [QUEUE_RATE_MODE.DATA_WEIGHT]: (x) => x.write_data_weight_rate,\n};\n\nconst getColumns = createSelector(\n [getQueueRateMode, getQueueTimeWindow, getQueuePartitionsColumns],\n (rateMode, timeWindow, columns): Array<Column<SelectedPartition>> => {\n return columns\n .filter((column) => column.checked)\n .map(({name, caption}) => {\n if (name === 'error') {\n return error<SelectedPartition>(caption, (x) => x[name], block('error'));\n } else if (name === 'host') {\n return host<SelectedPartition>(\n caption,\n (x) => x.meta?.host,\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 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(period?: {value?: number; error?: string}) {\n return !period?.value || period?.value % 1000 !== 0\n ? 'Export period should be a multiple of 1000ms'\n : undefined;\n}\n\nexport async function validateExportDirectory(path: string) {\n try {\n const res = await ytApiV3.executeBatch({\n parameters: {\n requests: [\n {\n command: 'get' as const,\n parameters: {\n path: `${path}/@`,\n },\n },\n ],\n },\n });\n\n if (res[0].error) {\n return 'Target path should exist';\n }\n\n if (ypath.getValue(res[0].output, '/type') !== 'map_node') {\n return 'Target path should be a directory';\n }\n\n return undefined;\n } catch (err) {\n const e = err as Error;\n return e?.message || 'Unexpected type of error: ' + typeof e;\n }\n}\n\nexport function validate(\n values: ExportsFormValues,\n type: 'create' | 'edit',\n configs?: BatchApiResults<QueueExport<number>>,\n) {\n if (!configs) {\n return undefined;\n }\n\n const paths = new Set();\n const configsValues = configs[0].output;\n\n for (const config in configsValues) {\n if (configsValues[config]) {\n paths.add(configsValues[config].export_directory);\n }\n }\n\n if (\n configsValues &&\n Object.keys(configsValues).includes(values.export_name) &&\n type === 'create'\n ) {\n return {\n export_name: 'Export with the same name already exists',\n };\n }\n\n if (paths.has(values.export_directory) && type === 'create') {\n return {\n export_directory: 'Export with the same export_directory already exists',\n };\n }\n\n return undefined;\n}\n","import React, {useEffect, useState} from 'react';\nimport {useSelector} from 'react-redux';\nimport {Text} from '@gravity-ui/uikit';\n\nimport {useFetchBatchQuery} from '../../../../../../../store/api/yt';\nimport {useExportMutation} from '../../../../../../../store/api/navigation/tabs/queue/queue';\nimport {makeGetExportsParams} from '../../../../../../../store/api/navigation/tabs/queue/exports';\nimport {getPath} from '../../../../../../../store/selectors/navigation';\n\nimport {FormApi, YTDFDialog, makeErrorFields} from '../../../../../../../components/Dialog';\n\nimport {QueueExport, QueueExportConfig} from '../../../../../../../types/navigation/queue/queue';\nimport {YTError} from '../../../../../../../types';\n\nimport {ExportConfigUtility} from '../Exports';\n\nimport {\n outputTableNamePatternTooltip,\n prepareInitialValues,\n prepareUpdateValues,\n useUpperBoundForTableNamesTooltip,\n validate,\n validateExportDirectory,\n validateExportPeriod,\n} from './utils';\n\ninterface DialogProps {\n type: 'edit' | 'create';\n visible: boolean;\n prevConfig?: QueueExportConfig<number> & {export_name: string};\n onClose: () => void;\n}\n\nexport type ExportsFormValues = ExportConfigUtility & QueueExportConfig<{value: number}>;\n\nconst fields = [\n {\n type: 'text' as const,\n name: 'export_name',\n caption: 'Export name',\n required: true,\n },\n {\n type: 'path' as const,\n name: 'export_directory',\n caption: 'Export directory',\n required: true,\n validator: validateExportDirectory,\n },\n {\n type: 'time-duration' as const,\n name: 'export_period',\n caption: 'Export period',\n required: true,\n tooltip: 'Export period mask will be converted to milliseconds',\n validator: validateExportPeriod,\n },\n {\n type: 'time-duration' as const,\n name: 'export_ttl',\n caption: 'TTL',\n tooltip: 'TTL mask will be converted to milliseconds',\n },\n {\n type: 'text' as const,\n name: 'output_table_name_pattern',\n caption: 'Output table name pattern',\n tooltip: <Text whiteSpace={'break-spaces'}>{outputTableNamePatternTooltip}</Text>,\n extras: {\n placeholder: '%UNIX_TS-%PERIOD',\n },\n },\n {\n type: 'tumbler' as const,\n name: 'use_upper_bound_for_table_names',\n caption: 'Use upper bound for table names',\n tooltip: <Text whiteSpace={'break-spaces'}>{useUpperBoundForTableNamesTooltip}</Text>,\n },\n];\n\nexport function ExportsEditDialog(props: DialogProps) {\n const {type, prevConfig, visible, onClose} = props;\n const path = useSelector(getPath);\n\n const {data: configs} = useFetchBatchQuery<QueueExport<number>>(makeGetExportsParams(path));\n const [update, {isLoading, error}] = useExportMutation();\n\n const [initialValues, setInitialValues] = useState<ExportsFormValues>();\n\n useEffect(() => {\n const rawValues = configs ? configs[0].output : {};\n setInitialValues(prepareInitialValues(rawValues, prevConfig?.export_name));\n }, [prevConfig?.export_name, configs]);\n\n const onAdd = async (form: FormApi<ExportsFormValues, Partial<ExportsFormValues>>) => {\n const {values} = form.getState();\n const preparedValues = prepareUpdateValues(values);\n await update({\n prevConfig,\n newConfig: {...preparedValues, export_name: values.export_name},\n type: 'edit',\n }).unwrap();\n };\n\n return (\n <YTDFDialog<ExportsFormValues>\n onAdd={onAdd}\n visible={visible}\n onClose={onClose}\n size=\"l\"\n headerProps={{title: type === 'create' ? 'Create export' : 'Edit export'}}\n initialValues={initialValues}\n fields={[...fields, ...makeErrorFields([error as YTError])]}\n isApplyDisabled={(state) => {\n return state.hasValidationErrors || isLoading;\n }}\n validate={(values) => validate(values, type, configs)}\n />\n );\n}\n","export const outputTableNamePatternTooltip = `This pattern extends the export table name. Supported:\n- %UNIX_TS - unix timestamp\n- %PERIOD - the length of the export period in seconds\n- %ISO - unix timestamp as ISO time string\n- all specifiers supported by the \"strftime\" function (e.g. %H, %M, %S, etc.)\n\n Default is \"%UNIX_TS-%PERIOD\".\n NB!: It has to set a unique table name, otherwise error will occur.`;\n\nexport const useUpperBoundForTableNamesTooltip = `\"true\" - output table will gather data to upper bound of frame. E.g. for %H pattern output table will be named 17:00 and has data from 16:00 to 17:00.\n\"false\" - otherwise, formatting will be equal to the upper bound minus one export period. E.g. for %H data will be from 17:00 to 18:00.\nNB: In any case, the table exported with an upper bound timestamp of T is not guaranteed to contain all data with timestamp <= T.\nIn case of delays, some of the data can end up in latter tables. You should be especially careful with commit_ordering=%false queues, since commit timestamp monotonicity within a tablet is not guaranteed for them.\n`;\n","import React, {useCallback, useState} from 'react';\nimport {Button, Flex, Text} from '@gravity-ui/uikit';\nimport b from 'bem-cn-lite';\n\nimport {useExportMutation} from '../../../../../../../store/api/navigation/tabs/queue/queue';\n\nimport Icon from '../../../../../../../components/Icon/Icon';\nimport {YTDFDialog, makeErrorFields} from '../../../../../../../components/Dialog';\nimport {QueueExportConfig} from '../../../../../../../types/navigation/queue/queue';\nimport {YTError} from '../../../../../../../types';\n\nimport {ExportsEditDialog} from '../ExportsEditDialog/ExportsEditDialog';\n\nconst block = b('exports-edit');\n\nexport function ExportsEdit({\n prevConfig,\n}: {\n prevConfig: QueueExportConfig<number> & {export_name: string};\n}) {\n const [update, {isLoading, error}] = useExportMutation();\n\n const [editDialogVisible, setEditDialogVisible] = useState(false);\n const [deleteDialogVisible, setDeleteDialogVisible] = useState(false);\n\n const toggleEditDialogVisibility = useCallback(() => {\n setEditDialogVisible(!editDialogVisible);\n }, [editDialogVisible, setEditDialogVisible]);\n\n const toggleDeleteDialogVisibility = useCallback(() => {\n setDeleteDialogVisible(!deleteDialogVisible);\n }, [deleteDialogVisible, setDeleteDialogVisible]);\n\n return (\n <>\n <Flex direction={'row'} gap={1}>\n <Button view=\"flat\" onClick={toggleDeleteDialogVisibility}>\n <Icon awesome={'trash-bin'} />\n </Button>\n <Button\n className={block('button')}\n view=\"flat\"\n onClick={toggleEditDialogVisibility}\n qa={'edit-export'}\n >\n <Icon awesome={'pencil'} />\n </Button>\n </Flex>\n <YTDFDialog\n visible={deleteDialogVisible}\n pristineSubmittable={true}\n fields={[\n {\n name: 'delete',\n type: 'block',\n extras: {\n children: (\n <Text variant=\"body-2\">\n Are you shure you want to delete {prevConfig.export_name}?\n </Text>\n ),\n },\n },\n ...makeErrorFields([error as YTError]),\n ]}\n onAdd={async () => {\n await update({prevConfig, type: 'delete'}).unwrap();\n }}\n headerProps={{\n title: 'Delete export',\n }}\n onClose={toggleDeleteDialogVisibility}\n isApplyDisabled={() => {\n return isLoading;\n }}\n />\n <ExportsEditDialog\n type={'edit'}\n prevConfig={prevConfig}\n visible={editDialogVisible}\n onClose={toggleEditDialogVisibility}\n />\n </>\n );\n}\n","import React from 'react';\nimport {ClipboardButton, Flex, Text} from '@gravity-ui/uikit';\n\nimport Link from '../../../../../../components/Link/Link';\nimport Icon from '../../../../../../components/Icon/Icon';\nimport DataTableYT, {Column} from '../../../../../../components/DataTableYT/DataTableYT';\nimport {Tooltip} from '../../../../../../components/Tooltip/Tooltip';\nimport {formatTimeDuration} from '../../../../../../components/TimeDuration/TimeDuration';\n\nimport hammer from '../../../../../../common/hammer';\nimport {QueueExportConfig} from '../../../../../../types/navigation/queue/queue';\nimport {makeNavigationLink} from '../../../../../../utils/app-url';\n\nimport {ExportsEdit} from './ExportsEdit/ExportsEdit';\nimport {useExports} from './use-exports';\n\nexport type ExportConfigUtility = {\n id: string;\n export_name: string;\n};\n\nexport type ExportConfigColumns = ExportConfigUtility & QueueExportConfig<number>;\n\nconst columns: Array<Column<ExportConfigColumns>> = [\n {\n name: 'export_name',\n render: Value,\n header: 'Export name',\n },\n {\n name: 'export_directory',\n render: Path,\n header: 'Export directory',\n },\n {\n name: 'export_period',\n render: Time,\n header: 'Export period',\n },\n {\n name: 'export_ttl',\n render: Time,\n header: 'Export TTL',\n },\n {\n name: 'output_table_name_pattern',\n render: Value,\n header: 'Output table name pattern',\n },\n {\n name: 'use_upper_bound_for_table_names',\n render: Value,\n header: 'Use upper bound for table names',\n },\n {\n name: '',\n render({row}) {\n return <ExportsEdit prevConfig={row} />;\n },\n },\n];\n\nexport function Exports() {\n const {data, isLoading, isFetching} = useExports();\n\n return (\n <DataTableYT<ExportConfigColumns>\n columns={columns}\n data={data}\n loaded={!isFetching}\n loading={isLoading}\n useThemeYT\n settings={{displayIndices: false, sortable: false}}\n />\n );\n}\n\nfunction Value({value}: {value?: unknown}) {\n return <>{value ? String(value) : hammer.format.NO_VALUE}</>;\n}\n\nfunction Time({value}: {value?: unknown}) {\n return (\n <Flex alignItems={'center'} gap={1}>\n <Text>{value ? formatTimeDuration(Number(value)) : hammer.format.NO_VALUE}</Text>\n {Boolean(value) && (\n <Tooltip\n content={\n <Flex gap={2} alignItems={'center'}>\n <ClipboardButton text={String(value)} />\n {String(value)}, ms\n </Flex>\n }\n >\n <Icon awesome={'question-circle'} />\n </Tooltip>\n )}\n </Flex>\n );\n}\n\nfunction Path({value}: {value?: unknown}) {\n return (\n <Link url={makeNavigationLink({path: String(value)})} routed>\n {String(value)}\n </Link>\n );\n}\n","import React, {ComponentType, useEffect} from 'react';\nimport {ConnectedProps, connect, useSelector} from 'react-redux';\n\nimport {Alerts} from '../../../../components/Alerts/Alerts';\nimport ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\nimport WithStickyToolbar from '../../../../components/WithStickyToolbar/WithStickyToolbar';\nimport {Toolbar} from '../../../../components/WithStickyToolbar/Toolbar/Toolbar';\nimport {QUEUE_MODE} from '../../../../constants/navigation/tabs/queue';\nimport {loadQueueStatus} from '../../../../store/actions/navigation/tabs/queue/status';\nimport type {RootState} from '../../../../store/reducers';\nimport {\n getFamily,\n getPartitionCount,\n getQueueMode,\n getQueueStatusDataAlerts,\n getStatusError,\n getWriteDataWeightRate,\n getWriteRowCountRate,\n} from '../../../../store/selectors/navigation/tabs/queue';\n\nimport Meta from './Meta/Meta';\nimport QueueToolbar from './Toolbar/Toolbar';\nimport QueueMetrics from './views/QueueMetrics/QueueMetrics';\nimport Consumers from './views/Consumers/Consumers';\nimport ConsumersExtraControls from './views/Consumers/ConsumersExtraControls';\nimport Partitions from './views/Partitions/Partitions';\nimport PartitionsExtraControls from './views/Partitions/PartitionsExtraControls';\nimport UIFactory from '../../../../UIFactory';\nimport {Exports} from './views/Exports/Exports';\nimport {ExportsExtraControls} from './views/Exports/ExportsExtraControls';\nimport {QueueError} from './QueueError';\n\nconst emptyView = {ExtraControls: () => null, View: () => null};\n\nconst views: Record<QUEUE_MODE, {ExtraControls: ComponentType; View: ComponentType}> = {\n [QUEUE_MODE.METRICS]: {ExtraControls: () => null, View: () => null},\n [QUEUE_MODE.PARTITIONS]: {ExtraControls: PartitionsExtraControls, View: Partitions},\n [QUEUE_MODE.CONSUMERS]: {ExtraControls: ConsumersExtraControls, View: Consumers},\n [QUEUE_MODE.EXPORTS]: {ExtraControls: ExportsExtraControls, View: Exports},\n};\n\nfunction useViewByMode(mode: QUEUE_MODE) {\n const component = UIFactory.getComonentForQueueMetrics();\n if (component && mode === QUEUE_MODE.METRICS) {\n return {ExtraControls: () => null, View: QueueMetrics};\n }\n\n return views[mode] || emptyView;\n}\n\nconst Queue: React.VFC<PropsFromRedux> = ({\n loadQueueStatus,\n family,\n partitionCount,\n writeDataWeightRate,\n writeRowCountRate,\n queueMode,\n statusError,\n}) => {\n useEffect(() => {\n loadQueueStatus();\n }, []);\n\n const {ExtraControls, View} = useViewByMode(queueMode);\n\n const items = useSelector(getQueueStatusDataAlerts);\n\n if (statusError) {\n return <QueueError error={statusError} topMargin=\"none\" />;\n }\n\n return (\n <ErrorBoundary>\n <Alerts items={items} />\n <Meta\n family={family}\n partitionCount={partitionCount}\n writeDataWeightRate={writeDataWeightRate}\n writeRowCountRate={writeRowCountRate}\n />\n <WithStickyToolbar\n toolbar={\n <Toolbar\n itemsToWrap={[\n {node: <QueueToolbar extras={ExtraControls} />, growable: true},\n ]}\n />\n }\n content={<View />}\n />\n </ErrorBoundary>\n );\n};\n\nfunction mapStateToProps(state: RootState) {\n return {\n family: getFamily(state),\n partitionCount: getPartitionCount(state),\n writeDataWeightRate: getWriteDataWeightRate(state),\n writeRowCountRate: getWriteRowCountRate(state),\n queueMode: getQueueMode(state),\n statusError: getStatusError(state),\n };\n}\n\nconst mapDispatchToProps = {\n loadQueueStatus,\n};\n\nconst connector = connect(mapStateToProps, mapDispatchToProps);\ntype PropsFromRedux = ConnectedProps<typeof connector>;\n\nexport default connector(Queue);\n","import React, {useCallback, useState} from 'react';\nimport {Button, Flex} from '@gravity-ui/uikit';\nimport {ExportsEditDialog} from './ExportsEditDialog/ExportsEditDialog';\n\nexport function ExportsExtraControls() {\n const [visible, setVisible] = useState(false);\n\n const toggleVisibility = useCallback(() => {\n setVisible(!visible);\n }, [visible, setVisible]);\n\n return (\n <Flex direction={'row'} gap={3}>\n <div style={{borderLeft: '1px solid var(--dark-divider)'}}></div>\n <Button view={'outlined'} onClick={toggleVisibility} qa={'create-export'}>\n Create export\n </Button>\n <ExportsEditDialog type={'create'} visible={visible} onClose={toggleVisibility} />\n </Flex>\n );\n}\n","import {useSelector} from 'react-redux';\n\nimport {useFetchBatchQuery} from '../../../../../../store/api/yt';\nimport {makeGetExportsParams} from '../../../../../../store/api/navigation/tabs/queue/exports';\n\nimport {getPath} from '../../../../../../store/selectors/navigation';\n\nimport {QueueExport} from '../../../../../../types/navigation/queue/queue';\n\nimport {ExportConfigColumns} from './Exports';\n\nexport function useExports() {\n const path = useSelector(getPath);\n\n const {\n data: config,\n isLoading,\n isFetching,\n } = useFetchBatchQuery<QueueExport<number>>(makeGetExportsParams(path));\n\n const data: ExportConfigColumns[] = [];\n\n if (config && config[0].output) {\n for (const obj in config[0].output) {\n if (obj) {\n const newObj: ExportConfigColumns = {\n ...config[0].output[obj],\n export_name: obj,\n id: obj,\n };\n data.push(newObj);\n }\n }\n }\n\n return {data, isLoading, isFetching};\n}\n","import type {ThunkAction} from 'redux-thunk';\n\nimport {\n QUEUE_STATUS_LOAD_FAILURE,\n QUEUE_STATUS_LOAD_REQUEST,\n QUEUE_STATUS_LOAD_SUCCESS,\n} from '../../../../../constants/navigation/tabs/queue';\nimport {YTApiId, ytApiV3Id} from '../../../../../rum/rum-wrap-api';\nimport type {RootState} from '../../../../../store/reducers';\nimport type {QueueStatusAction} from '../../../../../store/reducers/navigation/tabs/queue/status';\nimport type {YtQueueStatus} from '../../../../../store/reducers/navigation/tabs/queue/types';\nimport {getPath, getTransaction} from '../../../../../store/selectors/navigation';\nimport {prepareRequest} from '../../../../../utils/navigation';\n\ntype QueueThunkAction = ThunkAction<void, RootState, unknown, QueueStatusAction>;\n\nexport function loadQueueStatus(): QueueThunkAction {\n return (dispatch, getState) => {\n const state = getState();\n const path = getPath(state);\n const transaction = getTransaction(state);\n\n dispatch({type: QUEUE_STATUS_LOAD_REQUEST});\n return ytApiV3Id\n .get(YTApiId.queueStatus, prepareRequest('/@queue_status', {path, transaction}))\n .then((data: YtQueueStatus) => {\n if (data.error) {\n throw data.error;\n }\n dispatch({\n type: QUEUE_STATUS_LOAD_SUCCESS,\n data,\n });\n })\n .catch((error: Error) => {\n dispatch({\n type: QUEUE_STATUS_LOAD_FAILURE,\n data: error,\n });\n });\n };\n}\n","import yt from '@ytsaurus/javascript-wrapper/lib/yt';\n\nimport map_ from 'lodash/map';\nimport slice_ from 'lodash/slice';\n\nimport CancelHelper from '../../../../utils/cancel-helper';\nimport {prepareRequest} from '../../../../utils/navigation';\nimport {getPath, getTransaction} from '../../../../store/selectors/navigation';\nimport {\n GET_LOCKS,\n IS_PARTIAL,\n MAX_TRANSACTIONS_REQUESTS,\n} from '../../../../constants/navigation/tabs/locks';\nimport {YTApiId, ytApiV3Id} from '../../../../rum/rum-wrap-api';\nimport {splitBatchResults} from '../../../../utils/utils';\n\nconst requests = new CancelHelper();\n\nfunction prepareData(locks, transactions = []) {\n return map_(locks, (lock, index) => {\n const item = {...lock};\n item.transaction = transactions[index] || {};\n item.transaction.id = item.transaction_id;\n item.index = index;\n\n return item;\n });\n}\n\nfunction getTransactions(rowLocks) {\n return (dispatch) => {\n const requests = map_(slice_(rowLocks, 0, MAX_TRANSACTIONS_REQUESTS), (lock) => {\n return {\n command: 'get',\n parameters: {\n path: '//sys/transactions/' + lock.transaction_id + '/@',\n attributes: ['title', 'start_time', 'operation_id'],\n },\n };\n });\n\n return ytApiV3Id\n .executeBatch(YTApiId.navigationTransactions, {requests})\n .then((data) => {\n const {error, results: transactions} = splitBatchResults(\n data,\n 'Failed to get transactions',\n );\n if (error) {\n return Promise.reject(error);\n }\n\n const locks = prepareData(rowLocks, transactions);\n const isPartial = locks.length > MAX_TRANSACTIONS_REQUESTS;\n\n dispatch({\n type: IS_PARTIAL,\n data: {isPartial},\n });\n\n dispatch({\n type: GET_LOCKS.SUCCESS,\n data: {locks},\n });\n })\n .catch((error) => {\n dispatch({\n type: GET_LOCKS.FAILURE,\n data: {error},\n });\n });\n };\n}\n\nexport function getLocks() {\n return (dispatch, getState) => {\n const state = getState();\n const path = getPath(state);\n const transaction = getTransaction(state);\n\n dispatch({type: GET_LOCKS.REQUEST});\n requests.removeAllRequests();\n\n ytApiV3Id\n .get(YTApiId.navigationLocks, {\n parameters: prepareRequest('/@locks', {path, transaction}),\n cancellation: requests.saveCancelToken,\n })\n .then((locks) => dispatch(getTransactions(locks)))\n .catch((error) => {\n if (error.code === yt.codes.CANCELLED) {\n dispatch({type: GET_LOCKS.CANCELLED});\n } else {\n dispatch({\n type: GET_LOCKS.FAILURE,\n data: {error},\n });\n }\n });\n };\n}\n\nexport function abortAndReset() {\n return (dispatch) => {\n requests.removeAllRequests();\n dispatch({type: GET_LOCKS.CANCELLED});\n };\n}\n\nexport function setLocksModeFilter(modeFilter) {\n return {type: GET_LOCKS.PARTITION, data: {modeFilter}};\n}\n","import find_ from 'lodash/find';\n\nimport {rumLogError} from '../rum/rum-counter';\nimport {YT} from '../config/yt-config';\n\nconst {clusters} = YT;\n\nexport function findClusterConfigByOperationId(operationId: string) {\n try {\n const cellTag = Number.parseInt(operationId?.split('-')[2], 16) >> 16; // eslint-disable-line no-bitwise\n return find_(clusters, (clusterConfig) => clusterConfig.primaryMaster?.cellTag === cellTag);\n } catch (error) {\n rumLogError(\n {\n message: 'Cannot find cluster config for operation',\n additional: {\n operationId,\n },\n },\n error as any,\n );\n }\n return null;\n}\n","import filter_ from 'lodash/filter';\n\nimport {createSelector} from 'reselect';\nimport {RootState} from '../../../../store/reducers';\nimport {calculateLoadingStatus} from '../../../../utils/utils';\n\nconst getLocks = (state: RootState) => state.navigation.tabs.locks.locks;\nconst getLocksLoading = (state: RootState) => state.navigation.tabs.locks.loading;\nconst getLocksLoaded = (state: RootState) => state.navigation.tabs.locks.loaded;\nconst getLocksError = (state: RootState) => state.navigation.tabs.locks.error;\nexport const getLocksModeFilter = (state: RootState) => state.navigation.tabs.locks.modeFilter;\n\nexport const getLocksLoadStatus = createSelector(\n [getLocksLoading, getLocksLoaded, getLocksError],\n (loading, loaded, error) => {\n return calculateLoadingStatus(loading, loaded, error);\n },\n);\n\nexport const getLocksFiltered = createSelector(\n [getLocksModeFilter, getLocks],\n (modeFilter, items) => {\n if (!modeFilter) {\n return items;\n }\n return filter_(items, ({mode}) => mode === modeFilter);\n },\n);\n","import React, {Component, Fragment} from 'react';\nimport {connect, 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 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';\nimport WithStickyToolbar from '../../../../components/WithStickyToolbar/WithStickyToolbar';\n\nimport {getPath, getType} from '../../../../store/selectors/navigation';\n\nimport {\n getActiveHistogram,\n getHistogram,\n getNavigationTabletsLoadingStatus,\n getTablets,\n} from '../../../../store/selectors/navigation/tabs/tablets';\n\nimport {NAVIGATION_TABLETS_TABLE_ID} from '../../../../constants/navigation/tabs/tablets';\nimport {Page} from '../../../../constants/index';\n\nimport {\n abortAndReset,\n changeActiveHistogram,\n changeTabletsFilter,\n changeTabletsMode,\n loadTablets,\n toggleExpandedHost,\n toggleHistogram,\n} from '../../../../store/actions/navigation/tabs/tablets';\n\nimport {histogramItems, tableItems} from '../../../../utils/navigation/tabs/tables';\nimport {asNumber} from '../../../../components/templates/utils';\nimport hammer from '../../../../common/hammer';\nimport ypath from '../../../../common/thor/ypath';\nimport unipika from '../../../../common/thor/unipika';\n\nimport {genTabletCellBundlesCellUrl} from '../../../../utils/tablet_cell_bundles';\nimport {useRumMeasureStop} from '../../../../rum/RumUiContext';\nimport {RumMeasureTypes} from '../../../../rum/rum-measure-types';\nimport {isFinalLoadingStatus} from '../../../../utils/utils';\nimport {useAppRumMeasureStart} from '../../../../rum/rum-app-measures';\nimport {Host} from '../../../../containers/Host/Host';\nimport {\n getTabletsByName,\n getTabletsMax,\n} from '../../../../store/selectors/navigation/tabs/tablets-ts';\nimport {getProgressBarColorByIndex} from '../../../../constants/colors';\n\nimport './Tablets.scss';\nimport {UI_COLLAPSIBLE_SIZE} from '../../../../constants/global';\n\nconst block = cn('navigation-tablets');\n\nclass Tablets extends Component {\n static typedValueProps = PropTypes.shape({\n $type: PropTypes.string.isRequired,\n $value: PropTypes.string.isRequired,\n });\n\n static tabletProps = PropTypes.shape({\n index: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n\n cell_id: PropTypes.string,\n error_count: PropTypes.number,\n last_commit_timestamp: PropTypes.number,\n replication_error_count: PropTypes.number,\n state: PropTypes.string,\n tablet_id: PropTypes.string,\n\n performance_counters: PropTypes.object,\n statistics: PropTypes.object,\n\n pivot_key: PropTypes.arrayOf(Tablets.typedValueProps),\n });\n\n static propTypes = {\n // from connect\n loading: PropTypes.bool.isRequired,\n loaded: PropTypes.bool.isRequired,\n error: PropTypes.bool.isRequired,\n errorData: PropTypes.object.isRequired,\n\n path: PropTypes.string.isRequired,\n type: PropTypes.string.isRequired,\n tabletsMode: PropTypes.string.isRequired,\n tabletsFilter: PropTypes.string.isRequired,\n activeHistogram: PropTypes.string.isRequired,\n histogramCollapsed: PropTypes.bool.isRequired,\n tablets: PropTypes.arrayOf(Tablets.tabletProps).isRequired,\n histogram: PropTypes.shape({\n data: PropTypes.array.isRequired,\n format: PropTypes.string.isRequired,\n dataName: PropTypes.string.isRequired,\n dataFormat: PropTypes.string.isRequired,\n }).isRequired,\n\n loadTablets: PropTypes.func.isRequired,\n abortAndReset: PropTypes.func.isRequired,\n toggleHistogram: PropTypes.func.isRequired,\n changeTabletsMode: PropTypes.func.isRequired,\n changeTabletsFilter: PropTypes.func.isRequired,\n changeActiveHistogram: PropTypes.func.isRequired,\n };\n\n static prepareStorePreloadProgress(storePreload) {\n const completed = storePreload?.completed || 0;\n const failed = storePreload?.failed || 0;\n const pending = storePreload?.pending || 0;\n const total = completed + failed + pending;\n\n return {\n text: hammer.format['Number'](completed) + ' / ' + hammer.format['Number'](total),\n value: total > 0 ? ((failed + completed) / total) * 100 : 0,\n stack: [\n {\n value: total > 0 ? (completed / total) * 100 : 0,\n theme: 'info',\n },\n {\n value: total > 0 ? (failed / total) * 100 : 0,\n theme: 'danger',\n },\n ],\n };\n }\n\n static rowClassName(item) {\n const {level} = item;\n return block('row', {top: level === 0});\n }\n\n static renderName(item) {\n const {name, level, isCollapsed, cell_leader_address} = item;\n const content =\n level === 0 ? (\n <React.Fragment>\n <Button\n view={'flat-secondary'}\n onClick={() => this.props.toggleExpandedHost(name)}\n >\n <Icon awesome={isCollapsed ? 'angle-down' : 'angle-up'} />\n </Button>{' '}\n {name === cell_leader_address\n ? Tablets.renderHost(item)\n : Tablets.renderCellId(item)}\n </React.Fragment>\n ) : (\n Tablets.renderTabletId(item)\n );\n\n return <div className={block('name', {level})}>{content}</div>;\n }\n\n static isTopLevel(item) {\n const {level, name, cell_leader_address, cell_id} = item;\n return level === 0 && (name === cell_leader_address || name === cell_id);\n }\n\n static renderIndex(item, columnName) {\n if (Tablets.isTopLevel(item) && item.childrenCount) {\n return `(total ${item.childrenCount})`;\n }\n if (Tablets)\n if (item.index === 'aggregation') {\n return hammer.format['ReadableField'](item.index);\n } else {\n return hammer.format['Number'](item[columnName]);\n }\n }\n\n static renderTabletId(item) {\n const id = item.tablet_id;\n const url = `${Page.TABLET}/${id}`;\n\n return Tablets.renderIdWithLink(id, url);\n }\n\n static renderCellId(item) {\n const id = item.cell_id;\n const url = genTabletCellBundlesCellUrl(id);\n\n return Tablets.renderIdWithLink(id, url);\n }\n\n static renderHost(item) {\n const host = item.cell_leader_address;\n return (\n <Host\n asTabletNode\n address={host}\n className={block('host')}\n copyBtnClassName={block('copy-btn')}\n />\n );\n }\n\n static renderIdWithLink(id, url) {\n return id ? (\n <div className={block('id-link')}>\n <Link url={url}>{id}</Link>\n <ClipboardButton className={block('copy-btn')} view={'flat-secondary'} text={id} />\n </div>\n ) : (\n hammer.format.NO_VALUE\n );\n }\n\n static renderState(item, columnName) {\n const state = item[columnName];\n const theme = {\n none: 'default',\n unmounted: 'default',\n mounted: 'info',\n frozen: 'info',\n freezing: 'warning',\n unfreezing: 'warning',\n mounting: 'warning',\n unmounting: 'warning',\n mixed: 'danger',\n }[state];\n\n return typeof state !== 'undefined' ? (\n <Label theme={theme} text={state} />\n ) : (\n hammer.format.NO_VALUE\n );\n }\n\n static renderPivotKey(item, columnName) {\n const pivotKey = item[columnName];\n\n const text = unipika.prettyprint(pivotKey, {\n break: false,\n indent: 0,\n asHTML: false,\n });\n const title = text.split(',').join(',\\n');\n\n return typeof pivotKey !== 'undefined' ? (\n <div className=\"elements-column_with-hover-button unipika navigation-tablets__pivot-key\">\n [\n <span title={title} className=\"uint64 elements-ellipsis\">\n {text.slice(1, -1)}\n </span>\n ]\n <ClipboardButton\n text={text}\n view=\"flat-secondary\"\n size=\"s\"\n title=\"Copy Pivot Key\"\n />\n </div>\n ) : (\n hammer.format.NO_VALUE\n );\n }\n\n static renderActions(item) {\n if (item.index === 'aggregation' || Tablets.isTopLevel(item)) {\n return null;\n } else {\n const tablet = ypath.getValue(item, '/tablet_id');\n\n return (\n <ClickableAttributesButton\n title={item.tablet_id}\n path={`//sys/tablets/${tablet}`}\n withTooltip\n />\n );\n }\n }\n\n static renderStorePreload(item, columnName) {\n const storePreload = item[columnName];\n const storePreloadProgress = Tablets.prepareStorePreloadProgress(storePreload);\n\n return <Progress {...storePreloadProgress} />;\n }\n\n componentDidMount() {\n this.props.loadTablets();\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.path !== this.props.path) {\n this.props.loadTablets();\n }\n }\n\n componentWillUnmount() {\n this.props.abortAndReset();\n }\n\n get defaultItems() {\n const {type} = this.props;\n\n const newDefaultItemsForReplicatedTable = [\n 'index',\n 'tablet_id',\n 'cell_leader_address',\n 'state',\n 'cell_id',\n 'error_count',\n 'replication_error_count',\n 'pivot_key',\n 'actions',\n ];\n const newDefaultItemsForTable = [\n 'index',\n 'tablet_id',\n 'cell_leader_address',\n 'state',\n 'cell_id',\n 'error_count',\n 'pivot_key',\n 'actions',\n ];\n\n const newDefaultItems =\n type === 'replicated_table'\n ? newDefaultItemsForReplicatedTable\n : newDefaultItemsForTable;\n\n return newDefaultItems;\n }\n\n get tableSets() {\n return {\n default: {\n items: this.defaultItems,\n },\n data: {\n items: [\n 'index',\n 'tablet_id',\n 'cell_leader_address',\n 'unmerged_row_count',\n 'uncompressed_data_size',\n 'compressed_data_size',\n 'disk_space',\n 'actions',\n ],\n },\n structure: {\n items: [\n 'index',\n 'tablet_id',\n 'cell_leader_address',\n 'chunk_count',\n 'partition_count',\n 'store_count',\n 'overlapping_store_count',\n 'store_preload',\n 'actions',\n ],\n },\n performance: {\n items: [\n 'index',\n 'cell_leader_address',\n 'dynamic',\n 'static_chunk',\n 'unmerged_row_read_rate',\n 'merged_row_read_rate',\n 'actions',\n ],\n },\n by_host: {\n items: [\n 'name_tablet_id',\n 'index',\n 'unmerged_row_count',\n 'uncompressed_data_size',\n 'compressed_data_size',\n 'disk_space',\n 'actions',\n ],\n },\n by_cell: {\n items: [\n 'name_cell_id',\n 'index',\n 'unmerged_row_count',\n 'uncompressed_data_size',\n 'compressed_data_size',\n 'disk_space',\n 'actions',\n ],\n },\n };\n }\n\n get tableSettings() {\n const {tabletsMode} = this.props;\n\n return {\n css: block(),\n theme: 'light',\n cssHover: true,\n striped: false,\n tableId: NAVIGATION_TABLETS_TABLE_ID,\n columns: {\n items: tableItems,\n sets: this.tableSets,\n mode: tabletsMode,\n },\n templates: {\n name_tablet_id: Tablets.renderName.bind(this),\n name_cell_id: Tablets.renderName,\n index: Tablets.renderIndex,\n tablet_id: Tablets.renderTabletId,\n cell_id: Tablets.renderCellId,\n cell_leader_address: Tablets.renderHost,\n state: Tablets.renderState,\n pivot_key: Tablets.renderPivotKey,\n actions: Tablets.renderActions,\n store_preload: Tablets.renderStorePreload,\n error_count: asNumber,\n replication_error_count: asNumber,\n chunk_count: asNumber,\n partition_count: asNumber,\n store_count: asNumber,\n overlapping_store_count: asNumber,\n unmerged_row_count: this.renderNumberProgress,\n uncompressed_data_size: this.renderBytesProgress,\n compressed_data_size: this.renderBytesProgress,\n disk_space: this.renderBytesProgress,\n static_chunk_read: asNumber,\n static_chunk_lookup: asNumber,\n dynamic_read: asNumber,\n dynamic_lookup: asNumber,\n dynamic_write: asNumber,\n dynamic_delete: asNumber,\n unmerged_row_read_rate: asNumber,\n merged_row_read_rate: asNumber,\n },\n computeKey(item) {\n return item.name || item.tablet_id;\n },\n itemMods(tablet) {\n return (\n tablet.index === 'aggregation' && {\n aggregation: 'yes',\n }\n );\n },\n };\n }\n\n renderProgress = (item, column, useBytes) => {\n const {maxByLevel = []} = this.props;\n const {level = 0, [column]: value, index} = item;\n if (value === undefined) {\n return hammer.format.NO_VALUE;\n }\n const {[column]: max} = maxByLevel[level] || {};\n if (!max || index === 'aggregation') {\n return asNumber(item, column);\n }\n\n const progress = (value / max) * 100;\n const text = hammer.format[useBytes ? 'Bytes' : 'Number'](value);\n\n if (level === 1) {\n return (\n <Progress\n stack={[\n {\n value: progress,\n color: getProgressBarColorByIndex(3),\n },\n ]}\n text={text}\n />\n );\n }\n\n return <Progress value={progress} text={text} theme={'info'} />;\n };\n\n renderBytesProgress = (item, column) => {\n return this.renderProgress(item, column, true);\n };\n\n renderNumberProgress = (item, column) => {\n return this.renderProgress(item, column, false);\n };\n\n renderOverview() {\n const {tabletsFilter, changeTabletsFilter, tabletsMode, changeTabletsMode} = this.props;\n\n return (\n <div className={block('overview')}>\n <Filter\n size=\"m\"\n value={tabletsFilter}\n onChange={changeTabletsFilter}\n placeholder=\"Filter by Tablet Id/Cell Id/State/Host...\"\n className={block('tablets-filter')}\n />\n\n <RadioButton\n size=\"m\"\n value={tabletsMode}\n onChange={changeTabletsMode}\n name=\"navigation-tablets-mode\"\n items={[\n {\n value: 'default',\n text: 'Default',\n },\n {\n value: 'data',\n text: 'Data',\n },\n {\n value: 'by_host',\n text: 'Data by nodes',\n },\n {\n value: 'by_cell',\n text: 'Data by cells',\n },\n {\n value: 'structure',\n text: 'Structure',\n },\n {\n value: 'performance',\n text: 'Performance',\n },\n ]}\n />\n </div>\n );\n }\n\n renderContent() {\n const {\n tablets,\n histogramCollapsed,\n toggleHistogram,\n histogram,\n activeHistogram,\n changeActiveHistogram,\n collapsibleSize,\n } = this.props;\n\n return (\n <Fragment>\n <CollapsibleSection\n name=\"Histogram\"\n collapsed={histogramCollapsed}\n onToggle={toggleHistogram}\n size={collapsibleSize}\n >\n <Histogram\n activeHistogram={activeHistogram}\n handleHistogramChange={changeActiveHistogram}\n histogramItems={histogramItems}\n histogram={histogram}\n />\n </CollapsibleSection>\n\n <CollapsibleSection name=\"Tablets\" size={collapsibleSize}>\n <WithStickyToolbar\n toolbar={this.renderOverview()}\n content={\n <ElementsTable\n {...this.tableSettings}\n items={tablets}\n rowClassName={Tablets.rowClassName}\n onItemClick={this.onRowClick}\n />\n }\n />\n </CollapsibleSection>\n </Fragment>\n );\n }\n\n onRowClick = (item) => {\n const {isTopLevel, name} = item;\n if (isTopLevel) {\n this.props.toggleExpandedHost(name);\n }\n };\n\n render() {\n const {loading, loaded} = this.props;\n const initialLoading = loading && !loaded;\n\n return (\n <LoadDataHandler {...this.props}>\n <ErrorBoundary>\n <div className={block({loading: initialLoading})}>\n {initialLoading ? <Loader /> : this.renderContent()}\n </div>\n </ErrorBoundary>\n </LoadDataHandler>\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const {loading, loaded, error, errorData, tabletsMode, tabletsFilter, histogramCollapsed} =\n state.navigation.tabs.tablets;\n const path = getPath(state);\n let tablets;\n let maxByLevel = [];\n if (tabletsMode === 'by_host' || tabletsMode === 'by_cell') {\n const data = getTabletsByName(state);\n tablets = data.items;\n maxByLevel = data.maxByLevel;\n } else {\n tablets = getTablets(state);\n maxByLevel = [getTabletsMax(state)];\n }\n\n const histogram = getHistogram(state);\n const activeHistogram = getActiveHistogram(state);\n const type = getType(state);\n\n return {\n loading,\n loaded,\n error,\n errorData,\n path,\n tablets,\n maxByLevel,\n tabletsMode,\n tabletsFilter,\n histogramCollapsed,\n activeHistogram,\n histogram,\n type,\n collapsibleSize: UI_COLLAPSIBLE_SIZE,\n };\n};\n\nconst mapDispatchToProps = {\n loadTablets,\n abortAndReset,\n toggleHistogram,\n changeTabletsMode,\n changeTabletsFilter,\n changeActiveHistogram,\n toggleExpandedHost,\n};\n\nconst TabletsConnected = connect(mapStateToProps, mapDispatchToProps)(Tablets);\n\nexport default function TabletsWithRum() {\n const loadState = useSelector(getNavigationTabletsLoadingStatus);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.NAVIGATION_TAB_TABLETS,\n startDeps: [loadState],\n allowStart: ([loadState]) => {\n return !isFinalLoadingStatus(loadState);\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.NAVIGATION_TAB_TABLETS,\n stopDeps: [loadState],\n allowStop: ([loadState]) => {\n return isFinalLoadingStatus(loadState);\n },\n });\n\n return <TabletsConnected />;\n}\n","import {RootState} from '../../../reducers';\n\nexport const getAttributesTab = (state: RootState) => state.navigation.tabs.attributes.attributes;\n\nexport const getAttributesLoadingInfo = (state: RootState) => ({\n loading: state.navigation.tabs.attributes.loading,\n loaded: state.navigation.tabs.attributes.loaded,\n error: state.navigation.tabs.attributes.error,\n});\n","import {UnknownAction} from 'redux';\nimport {ThunkAction} from 'redux-thunk';\n\nimport {RootState} from '../../../../../store/reducers';\nimport {prepareRequest} from '../../../../../utils/navigation';\nimport CancelHelper, {isCancelled} from '../../../../../utils/cancel-helper';\nimport {attributesActions} from '../../../../reducers/navigation/tabs/attributes';\nimport {getPath, getTransaction} from '../../../../../store/selectors/navigation';\nimport {YTApiId, ytApiV3Id} from '../../../../../rum/rum-wrap-api';\nimport {TYPED_OUTPUT_FORMAT} from '../../../../../constants';\n\ntype AsyncAction<R = void> = ThunkAction<R, RootState, unknown, UnknownAction>;\n\nconst cancelHelper = new CancelHelper();\n\nexport function requestAttributes(): AsyncAction<Promise<void>> {\n return async (dispatch, getState) => {\n dispatch(attributesActions.onRequest());\n const state = getState();\n const path = getPath(state);\n const transaction = getTransaction(state);\n\n const requestParams = {\n path,\n transaction,\n };\n\n try {\n const response = await ytApiV3Id.executeBatch(YTApiId.nodeAttributes, {\n parameters: {\n requests: [\n {\n command: 'get',\n parameters: prepareRequest('/@', {...requestParams}),\n },\n ],\n output_format: TYPED_OUTPUT_FORMAT,\n },\n cancellation: cancelHelper.removeAllAndSave,\n });\n\n const {output, error} = response[0];\n if (error) {\n throw error;\n }\n\n dispatch(attributesActions.onSuccess({attributes: output}));\n } catch (error: any) {\n if (!isCancelled(error)) {\n dispatch(attributesActions.onFailure({error}));\n }\n }\n };\n}\n","import React, {Fragment, useEffect} from 'react';\nimport b from 'bem-cn-lite';\nimport unipika from '../../../../common/thor/unipika';\nimport {useDispatch, useSelector} from '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 getAccessLogFilterRecursive = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters.recursive;\n\nexport const getAccessLogFilterPagination = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters.pagination;\n\nexport const getAccessLogFilterPathRegex = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters.path_regex;\n\nexport const getAccessLogFilterUserRegex = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters.user_regex;\n\nexport const getAccessLogFilterMethod = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters.method_group;\n\nexport const getAccessLogFilterUserType = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters.user_type;\n\nexport const getAccessLogFilterScope = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters.scope;\n\nexport const getAccessLogFilterTime = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters.time;\n\nexport const getAccessLogFilterFieldSelector = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters.field_selector;\n\nexport const getAccessLogFilterMetadata = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters.metadata;\n\nexport const getAccessLogFilterDistinctBy = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLogFilters.distinct_by;\n\nexport const getAccessLogLoading = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLog.loading;\n\nexport const getAccessLogReady = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLog.ready;\n\nexport const getAccessLogLoaded = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLog.loaded;\n\nexport const getAccessLogError = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLog.error;\n\nexport const getAccessLogItems = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLog.accesses;\n\nexport const getAccessLogTotalRowCount = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLog.total_row_count;\n\nexport const getAccessLogAvailableTimeRange = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLog.availableTimeRange;\n\nexport const getAccessLogPagesCount = createSelector(\n [getAccessLogTotalRowCount, (state) => getAccessLogFilterPagination(state).size],\n (totalRowCount, size) => {\n return Math.ceil(totalRowCount / size);\n },\n);\n\nexport const getAccessLogLastLoadedParams = (state: RootState) =>\n state.navigation.tabs.accessLog.accessLog.params;\n\nfunction skipEmpty<T>(v: T) {\n return isEmpty_(v) ? undefined : v;\n}\n\nexport const getAccessLogRequestParams = createSelector(\n [getCluster, getPath, getAccessLogFiltersState],\n (cluster, path, filters) => {\n const {time, field_selector, method_group, user_type, scope, ...rest} = filters;\n\n const {from, to} = convertTimeToRequestParams(time) || {};\n return {\n ...rest,\n begin: from === undefined ? undefined : from / 1000,\n end: to === undefined ? undefined : to / 1000,\n cluster,\n path,\n field_selector: skipEmpty(field_selector),\n method_group: skipEmpty(method_group),\n user_type: skipEmpty(user_type),\n scope: skipEmpty(scope),\n };\n },\n);\n\nexport const getAccessLogHasChangedFilters = createSelector(\n [getAccessLogLastLoadedParams, getAccessLogRequestParams],\n (lastLoaded, current) => {\n return Boolean(lastLoaded.path) && !isEqual_(lastLoaded, current);\n },\n);\n\nexport const getAccessLogLastLoadedFieldSelector = createSelector(\n [getAccessLogLastLoadedParams],\n (params) => {\n return params.field_selector;\n },\n);\n","import axios from 'axios';\nimport {ThunkAction} from 'redux-thunk';\n\nimport {RootState} from '../../../../../store/reducers';\nimport {\n AccessLogAction,\n AccessLogAvailableTimeRange,\n AccessLogData,\n} from '../../../../../store/reducers/navigation/tabs/access-log/access-log';\nimport {\n ACCESS_LOG_FAILURE,\n ACCESS_LOG_FILTERS,\n ACCESS_LOG_PARTIAL,\n ACCESS_LOG_PATH_CHANGED,\n ACCESS_LOG_REQUEST,\n ACCESS_LOG_RESET_FILTERS,\n ACCESS_LOG_SUCCESS,\n} from '../../../../../constants/navigation/tabs/access-log';\nimport {\n getAccessLogFilterPagination,\n getAccessLogLastLoadedParams,\n getAccessLogRequestParams,\n} from '../../../../../store/selectors/navigation/tabs/access-log';\nimport {\n AccessLogFilterAction,\n AccessLogFiltersState,\n} from '../../../../../store/reducers/navigation/tabs/access-log/access-log-filters';\nimport CancelHelper, {isCancelled} from '../../../../../utils/cancel-helper';\nimport {getAccessLogBasePath} from '../../../../../config';\nimport {wrapApiPromiseByToaster} from '../../../../../utils/utils';\nimport {getCluster} from '../../../../selectors/global';\n\ntype AccessLogThunkAction<Res = any> = ThunkAction<Res, RootState, any, AccessLogAction>;\ntype AccessLogFiltersThunkAction<Res = any> = ThunkAction<\n Res,\n RootState,\n any,\n AccessLogFilterAction\n>;\n\nexport function resetPaginationIfNeededAndCheckIfPathChanged(): AccessLogFiltersThunkAction<Boolean> {\n return (dispatch, getState) => {\n const state = getState();\n\n const lastLoadedParams = getAccessLogLastLoadedParams(state);\n const params = getAccessLogRequestParams(state);\n\n const result = params.path !== lastLoadedParams.path;\n\n if (result) {\n dispatch({type: ACCESS_LOG_PATH_CHANGED});\n }\n\n return result;\n };\n}\n\nconst accesLogCancelHelper = new CancelHelper();\n\nexport function fetchAccessLog(): AccessLogThunkAction {\n return (dispatch, getState) => {\n const pathChanged = dispatch(resetPaginationIfNeededAndCheckIfPathChanged());\n dispatch({type: ACCESS_LOG_REQUEST, data: pathChanged ? {loaded: false} : {}});\n\n const state = getState();\n const params = getAccessLogRequestParams(state);\n\n dispatch({type: ACCESS_LOG_PARTIAL, data: {params}});\n return Promise.all([\n axios.get(`${getAccessLogBasePath()}/ready`),\n axios\n .request<AccessLogAvailableTimeRange>({\n method: 'POST',\n url: `${getAccessLogBasePath()}/visible-time-range`,\n withCredentials: true,\n data: {cluster: params.cluster},\n cancelToken: accesLogCancelHelper.removeAllAndGenerateNextToken(),\n })\n .catch((e) => {\n console.log(e);\n return {data: {latest: undefined, erliest: undefined}};\n }),\n axios.request<AccessLogData>({\n method: 'POST',\n url: `${getAccessLogBasePath()}/access_log`,\n data: params,\n withCredentials: true,\n cancelToken: accesLogCancelHelper.generateNextToken(),\n }),\n ])\n .then(([{data: ready}, {data: availableTimeRange}, {data}]) => {\n dispatch({\n type: ACCESS_LOG_SUCCESS,\n data: {...data, ready, availableTimeRange, params},\n });\n })\n .catch((e: any) => {\n if (!isCancelled(e)) {\n const error = e?.response?.data || e;\n dispatch({type: ACCESS_LOG_FAILURE, data: {error}});\n }\n });\n };\n}\n\nexport const fetchAccessLogQtId = (): AccessLogThunkAction => async (_, getState) => {\n const state = getState();\n const cluster = getCluster(state);\n const params = getAccessLogRequestParams(state);\n\n const newParams = {...params} as Partial<typeof params>;\n delete newParams.pagination;\n\n const {data} = await wrapApiPromiseByToaster(\n axios.request({\n method: 'POST',\n url: `${getAccessLogBasePath()}/qt_access_log`,\n withCredentials: true,\n data: newParams,\n }),\n {\n toasterName: 'getAccessLogQtId',\n errorTitle: 'Failed to load access log query id',\n skipSuccessToast: true,\n },\n );\n\n window.open(`/${cluster}/queries/${data.query_id}`);\n};\n\nexport function applyAccessLogFilters(): AccessLogFiltersThunkAction {\n return (dispatch) => {\n dispatch(setAccessLogFiltersPage(0));\n };\n}\n\nexport function setAccessLogFilters(\n data: Partial<AccessLogFiltersState>,\n): AccessLogFiltersThunkAction {\n return (dispatch) => {\n dispatch({type: ACCESS_LOG_FILTERS, data});\n };\n}\n\nexport function setAccessLogFiltersPage(index: number): AccessLogFiltersThunkAction {\n return (dispatch, getState) => {\n const {size} = getAccessLogFilterPagination(getState());\n dispatch({type: ACCESS_LOG_FILTERS, data: {pagination: {index, size}}});\n dispatch(fetchAccessLog());\n };\n}\n\nexport function accessLogResetFilters(): AccessLogFiltersThunkAction {\n return (dispatch, getState) => {\n const lastLoadedParams = getAccessLogLastLoadedParams(getState());\n if (!lastLoadedParams.path) {\n // skip for initial loading\n return;\n }\n\n return dispatch({type: ACCESS_LOG_RESET_FILTERS});\n };\n}\n","const SvgArrowRight = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M1.25 8A.75.75 0 0 1 2 7.25h10.19L9.47 4.53a.75.75 0 0 1 1.06-1.06l4 4a.75.75 0 0 1 0 1.06l-4 4a.75.75 0 1 1-1.06-1.06l2.72-2.72H2A.75.75 0 0 1 1.25 8\" clipRule=\"evenodd\" /></svg>;\nexport default SvgArrowRight;","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport MetaTable from '../../../../components/MetaTable/MetaTable';\nimport Yson from '../../../../components/Yson/Yson';\nimport {AccessLogTransactionInfo} from '../../../../store/reducers/navigation/tabs/access-log/access-log';\nimport ClipboardButton from '../../../../components/ClipboardButton/ClipboardButton';\n\nimport './AccountsLogTransactionInfo.scss';\n\nconst block = cn('accounts-log-transaction-info');\n\ninterface Props {\n data: AccessLogTransactionInfo;\n}\n\nfunction TransactionInfo(props: Props) {\n const {data} = props;\n return (\n <MetaTable\n items={[\n {\n key: 'Id',\n value: <CopyText text={data.transaction_id} />,\n },\n {\n key: 'Title',\n value: <CopyText text={data.transaction_title || ''} />,\n visible: Boolean(data.transaction_title),\n },\n {\n key: 'Operation Id',\n value: <CopyText text={data.operation_id || ''} />,\n visible: Boolean(data.operation_id),\n },\n {\n key: 'Operation title',\n value: <CopyText text={data.operation_title || ''} />,\n visible: Boolean(data.operation_title),\n },\n {\n key: 'Parent',\n value: <Yson value={data.parent} />,\n visible: Boolean(data.parent),\n },\n ]}\n />\n );\n}\n\nfunction CopyText({text, copyText}: {text: string; copyText?: string}) {\n return (\n <div className={block('copy')}>\n <span className={block('copy-text')}>{text}</span>\n <ClipboardButton\n className={block('copy-btn')}\n view=\"flat-secondary\"\n text={copyText ?? text}\n />\n </div>\n );\n}\n\nexport default React.memo(TransactionInfo);\n","import React, {FC} from 'react';\nimport {useSelector} from '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.132Q8.753 12 8.375 12C6.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.468-.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 0 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.821-.434-.329-.962-.49-1.306-.596l-.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 0 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 {Checkbox} from '@gravity-ui/uikit';\n\nimport Button from '../../../../components/Button/Button';\nimport Icon from '../../../../components/Icon/Icon';\n\nimport SimplePagination from '../../../../components/Pagination/SimplePagination';\nimport TextInputWithDebounce from '../../../../components/TextInputWithDebounce/TextInputWithDebounce';\nimport {Toolbar} from '../../../../components/WithStickyToolbar/Toolbar/Toolbar';\nimport Select from '../../../../components/Select/Select';\n\nimport {\n getAccessLogAvailableTimeRange,\n getAccessLogFilterDistinctBy,\n getAccessLogFilterFieldSelector,\n getAccessLogFilterMetadata,\n getAccessLogFilterMethod,\n getAccessLogFilterPagination,\n getAccessLogFilterPathRegex,\n getAccessLogFilterRecursive,\n getAccessLogFilterScope,\n getAccessLogFilterTime,\n getAccessLogFilterUserRegex,\n getAccessLogFilterUserType,\n getAccessLogHasChangedFilters,\n getAccessLogPagesCount,\n} from '../../../../store/selectors/navigation/tabs/access-log';\nimport {\n applyAccessLogFilters,\n setAccessLogFilters,\n setAccessLogFiltersPage,\n} from '../../../../store/actions/navigation/tabs/access-log/access-log';\nimport {\n AccessLogFieldSelectorType,\n AccessLogMethodType,\n AccessLogScopeType,\n AccessLogUserType,\n initialState,\n} from '../../../../store/reducers/navigation/tabs/access-log/access-log-filters';\n\nimport './AccessLogFilters.scss';\nimport {\n TIMELINE_RANGE_PICKER_SHORTCUTS,\n TimelinePicker,\n convertTimeToRequestParams,\n formatInterval,\n} from '../../../../components/common/Timeline';\nimport {EMPTY_OBJECT} from '../../../../constants/empty';\nimport {Tooltip} from '../../../../components/Tooltip/Tooltip';\nimport {\n ACCESS_LOG_FIELD_SELECTOR_ITEMS,\n ACCESS_LOG_METHOD_ITEMS,\n ACCESS_LOG_SCOPE_ITEMS,\n ACCESS_LOG_USER_TYPE_ITEMS,\n accessLogFieldSelectorSelectionToValue,\n accessLogMethodSelectionToValue,\n accessLogScopeSelectionToValue,\n accessLogUserTypeSelectionToValue,\n valueToSelection,\n} from '../../../../utils/navigation/tabs/access-log';\nimport {AccessLogOpenQtButton} from './AccessLogOpenQtButton';\n\nconst block = cn('access-log-filters');\n\nexport default React.memo(AccessLogFilters);\n\nfunction AccessLogFilters() {\n return (\n <React.Fragment>\n <Toolbar\n className={block()}\n itemsToWrap={[\n {node: <AccessLogPagination />},\n {node: <AccessLogTimeline />},\n {node: <AccessLogFieldselector />},\n {node: <AccessLogMetadata />},\n {node: <AccessLogDistictBy />},\n {node: <AccessLogOpenQtButton />},\n ]}\n />\n <Toolbar\n className={block()}\n itemsToWrap={[\n {\n node: <AccessLogPathRegexp />,\n growable: true,\n shrinkable: true,\n wrapperClassName: block('path-regex'),\n },\n {\n node: <AccessLogUserRegexp />,\n wrapperClassName: block('user-regex'),\n },\n {\n node: <AccessLogUserTypeFilter />,\n wrapperClassName: block('user-type'),\n },\n {\n node: <AccessLogScopeFilter />,\n wrapperClassName: block('scope'),\n },\n {\n node: <AccessLogMethod />,\n wrapperClassName: block('method-group'),\n },\n {\n node: <AccessLogRecursive />,\n },\n {node: <AccessLogApplyFilters />},\n ]}\n />\n </React.Fragment>\n );\n}\n\nfunction AccessLogRecursive() {\n const dispatch = useDispatch();\n const recursive = useSelector(getAccessLogFilterRecursive);\n\n return (\n <Checkbox\n checked={recursive}\n onUpdate={(value) => {\n dispatch(setAccessLogFilters({recursive: value}));\n }}\n >\n Recursive\n </Checkbox>\n );\n}\n\nfunction AccessLogApplyFilters() {\n const dispatch = useDispatch();\n const hasChanges = useSelector(getAccessLogHasChangedFilters);\n const handleApply = React.useCallback(() => {\n dispatch(applyAccessLogFilters());\n }, [dispatch]);\n return (\n <Button width=\"max\" disabled={!hasChanges} view=\"action\" onClick={handleApply}>\n Apply\n </Button>\n );\n}\n\nfunction AccessLogPagination() {\n const dispatch = useDispatch();\n\n const {index} = useSelector(getAccessLogFilterPagination);\n const pageCount = useSelector(getAccessLogPagesCount);\n\n const handleChange = React.useCallback(\n (value: number) => {\n dispatch(setAccessLogFiltersPage(value));\n },\n [dispatch],\n );\n\n return (\n <SimplePagination\n value={index}\n min={0}\n max={Math.max(0, pageCount - 1)}\n onChange={handleChange}\n />\n );\n}\n\nfunction AccessLogPathRegexp() {\n const dispatch = useDispatch();\n const filter = useSelector(getAccessLogFilterPathRegex);\n\n const handleChange = React.useCallback(\n (path_regex: string) => {\n dispatch(setAccessLogFilters({path_regex}));\n },\n [dispatch],\n );\n\n return (\n <TextInputWithDebounce\n debounce={500}\n value={filter}\n placeholder={'Path regexp...'}\n onUpdate={handleChange}\n />\n );\n}\n\nfunction AccessLogUserRegexp() {\n const dispatch = useDispatch();\n const filter = useSelector(getAccessLogFilterUserRegex);\n\n const handleChange = React.useCallback(\n (user_regex: string) => {\n dispatch(setAccessLogFilters({user_regex}));\n },\n [dispatch],\n );\n\n return (\n <TextInputWithDebounce\n debounce={500}\n value={filter}\n placeholder={'User regexp...'}\n onUpdate={handleChange}\n />\n );\n}\n\nconst METADATA_ITEMS = [\n {\n text: 'Only attributes',\n value: 'only_attrs',\n },\n {\n text: 'Skip attributes',\n value: 'skip_attrs',\n },\n];\n\nfunction AccessLogMetadata() {\n const dispatch = useDispatch();\n const value = useSelector(getAccessLogFilterMetadata);\n const handleChange = React.useCallback(\n (v: string) => {\n const metadata = v ? v === 'only_attrs' : undefined;\n\n dispatch(setAccessLogFilters({metadata}));\n },\n [dispatch, value],\n );\n const valueStr = value === undefined ? '' : value ? 'only_attrs' : 'skip_attrs';\n return (\n <Select\n value={valueStr ? [valueStr] : undefined}\n items={METADATA_ITEMS}\n onUpdate={(vals) => handleChange(vals[0])}\n placeholder={'Attributes'}\n />\n );\n}\n\nconst DISTINCT_BY_ITEMS = [{text: 'By User', value: 'user'}];\nfunction AccessLogDistictBy() {\n const dispatch = useDispatch();\n const value = useSelector(getAccessLogFilterDistinctBy);\n const handleChange = React.useCallback(\n (v: string) => {\n dispatch(setAccessLogFilters({distinct_by: v as 'user'}));\n },\n [dispatch],\n );\n\n return (\n <Select\n value={value ? [value] : undefined}\n items={DISTINCT_BY_ITEMS}\n onUpdate={(vals) => handleChange(vals[0])}\n placeholder={'Distinct'}\n />\n );\n}\n\nfunction AccessLogFieldselector() {\n const dispatch = useDispatch();\n const value = useSelector(getAccessLogFilterFieldSelector);\n\n const selected = React.useMemo(() => {\n return valueToSelection(value);\n }, [value]);\n\n const handleUpdate = React.useCallback(\n (items: Array<string>) => {\n const field_selector = accessLogFieldSelectorSelectionToValue(\n items as Array<AccessLogFieldSelectorType>,\n initialState.field_selector,\n );\n dispatch(setAccessLogFilters({field_selector}));\n },\n [dispatch, value],\n );\n\n return (\n <Select\n items={ACCESS_LOG_FIELD_SELECTOR_ITEMS}\n value={selected}\n multiple\n onUpdate={handleUpdate}\n placeholder={'Columns'}\n />\n );\n}\n\nfunction AccessLogMethod() {\n const dispatch = useDispatch();\n const value = useSelector(getAccessLogFilterMethod);\n\n const selected = React.useMemo(() => {\n return valueToSelection(value);\n }, [value]);\n\n const handleUpdate = React.useCallback(\n (items: Array<string>) => {\n const method_group = accessLogMethodSelectionToValue(\n items as Array<AccessLogMethodType>,\n EMPTY_OBJECT,\n );\n dispatch(setAccessLogFilters({method_group}));\n },\n [dispatch, value],\n );\n\n return (\n <Select\n multiple\n items={ACCESS_LOG_METHOD_ITEMS}\n value={selected}\n onUpdate={handleUpdate}\n placeholder={'Method group: All'}\n width=\"max\"\n />\n );\n}\n\nfunction AccessLogUserTypeFilter() {\n const dispatch = useDispatch();\n const value = useSelector(getAccessLogFilterUserType);\n\n const selected = React.useMemo(() => {\n return valueToSelection(value);\n }, [value]);\n\n const handleUpdate = React.useCallback(\n (items: Array<string>) => {\n const user_type = accessLogUserTypeSelectionToValue(\n items as Array<AccessLogUserType>,\n EMPTY_OBJECT,\n );\n dispatch(setAccessLogFilters({user_type}));\n },\n [dispatch, value],\n );\n\n return (\n <Select\n multiple\n items={ACCESS_LOG_USER_TYPE_ITEMS}\n value={selected}\n onUpdate={handleUpdate}\n placeholder={'User type: All'}\n width=\"max\"\n maxVisibleValues={2}\n />\n );\n}\n\nfunction AccessLogScopeFilter() {\n const dispatch = useDispatch();\n const value = useSelector(getAccessLogFilterScope);\n\n const selected = React.useMemo(() => {\n return valueToSelection(value);\n }, [value]);\n\n const handleUpdate = React.useCallback(\n (items: Array<string>) => {\n const scope = accessLogScopeSelectionToValue(\n items as Array<AccessLogScopeType>,\n EMPTY_OBJECT,\n );\n dispatch(setAccessLogFilters({scope}));\n },\n [dispatch],\n );\n\n return (\n <Select\n multiple\n items={ACCESS_LOG_SCOPE_ITEMS}\n value={selected}\n onUpdate={handleUpdate}\n placeholder={'Scope: All'}\n width=\"max\"\n />\n );\n}\n\nconst TIMELINE_SHOURCUTS = [\n {\n title: '1d',\n time: '1d',\n },\n {\n title: '1w',\n time: '1w',\n },\n {\n title: '1M',\n time: '1M',\n },\n {\n time: 'custom',\n },\n];\n\nfunction AccessLogTimeline() {\n const dispatch = useDispatch();\n const updateTime = React.useCallback(\n (time: {from?: number; to?: number}) => {\n const {from, to} = time;\n dispatch(setAccessLogFilters({time: {from, to}}));\n },\n [dispatch],\n );\n\n const updateShortcut = React.useCallback(\n (shortcutValue: string) => {\n dispatch(setAccessLogFilters({time: {shortcutValue}}));\n },\n [dispatch],\n );\n\n const time = useSelector(getAccessLogFilterTime);\n const now = Date.now();\n const {from = now - 24 * 12 * 1000, to = now} = convertTimeToRequestParams(time) || {};\n\n return (\n <React.Fragment>\n <TimelinePicker\n from={from || 0}\n to={to || 0}\n shortcut={time?.shortcutValue}\n onUpdate={updateTime}\n onShortcut={updateShortcut}\n topShortcuts={TIMELINE_SHOURCUTS}\n shortcuts={TIMELINE_RANGE_PICKER_SHORTCUTS}\n hasDatePicker\n />\n <AvailableTimeRange />\n </React.Fragment>\n );\n}\n\nfunction AvailableTimeRange() {\n const {earliest, latest} = useSelector(getAccessLogAvailableTimeRange);\n const hidden = earliest === undefined || latest === undefined;\n\n return (\n <Tooltip\n className={block('available-range')}\n content={\n <React.Fragment>\n Available range:{' '}\n {hidden\n ? 'Please wait until the range is loaded'\n : formatInterval((earliest ?? 0) * 1000, (latest ?? 0) * 1000)}\n </React.Fragment>\n }\n >\n <Icon awesome=\"question-circle\" />\n </Tooltip>\n );\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from '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 hideToolbarShadow\n doubleHeight\n toolbar={<AccessLogFilters />}\n content={\n <React.Fragment>\n <AccessLogError />\n <AccessLogTable />\n </React.Fragment>\n }\n />\n </React.Fragment>\n );\n}\n\nexport default React.memo(AccessLog);\n","import React, {useEffect} from 'react';\nimport {ConnectedProps, connect, 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\nexport const getTabletErrorCountLimitExceeded = (state: RootState) => {\n return state.navigation.tabs.tabletErrorsByPath?.error_count_limit_exceeded;\n};\n\n// Filters\n\nexport const getTabletErrorsByPathTimeRange = (state: RootState) =>\n state.navigation.tabs.tabletErrorsByPath.timeRangeFilter;\n\nexport const getTabletErrorsByPathMethodsFilter = (state: RootState) =>\n state.navigation.tabs.tabletErrorsByPath.methodsFilter;\n\nexport const getTabletErrorsByPathPageFilter = (state: RootState) =>\n state.navigation.tabs.tabletErrorsByPath.pageFilter;\n\nexport const getTabletErrorsByPathTabletIdFilter = (state: RootState) =>\n state.navigation.tabs.tabletErrorsByPath.tabletIdFilter;\n","import {ThunkAction} from 'redux-thunk';\nimport isEqual_ from 'lodash/isEqual';\nimport omit_ from 'lodash/omit';\n\nimport {RootState} from '../../../../../store/reducers';\nimport {\n TabletErrorsApi,\n fetchFromTabletErrorsApi,\n} from '../../../../../../shared/tablet-errors-manager';\nimport {ROWS_PER_PAGE} from '../../../../../constants/pagination';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport {tabletErrorsByPathActions} from '../../../../../store/reducers/navigation/tabs/tablet-errors/tablet-errors-by-path';\nimport CancelHelper, {isCancelled} from '../../../../../utils/cancel-helper';\nimport {\n getTabletErrorsByPathData,\n getTabletErrorsByPathDataParams,\n} from '../../../../../store/selectors/navigation/tabs/tablet-errors-by-path';\n\ntype AsyncAction<T = Promise<void>> = ThunkAction<T, RootState, unknown, any>;\n\nconst cancelHelper = new CancelHelper();\n\ntype ApiMethod = TabletErrorsApi['tablet_errors_by_table'];\n\nexport function loadTabletErrorsByTablePath(\n page: number,\n params: Pick<\n ApiMethod['body'],\n | 'table_path'\n | 'table_id'\n | 'start_timestamp'\n | 'end_timestamp'\n | 'methods'\n | 'tablet_id'\n | 'fixed_end_timestamp'\n >,\n): AsyncAction {\n return (dispatch, getState) => {\n dispatch(\n tabletErrorsByPathActions.onRequest({\n table_path: params.table_path,\n table_id: params.table_id,\n }),\n );\n\n const state = getState();\n const cluster = getCluster(state);\n\n const prevDataParams = getTabletErrorsByPathDataParams(state);\n if (\n page != 0 &&\n !isEqual_(\n omit_(prevDataParams, ['fixed_end_timestamp']),\n omit_(params, ['fixed_end_timestamp']),\n )\n ) {\n page = 0;\n dispatch(tabletErrorsByPathActions.updateFilter({pageFilter: page}));\n return Promise.resolve();\n }\n\n const prevData = getTabletErrorsByPathData(state);\n if (page != 0 && prevData) {\n params.fixed_end_timestamp = prevData.fixed_end_timestamp;\n }\n\n return fetchFromTabletErrorsApi(\n 'tablet_errors_by_table',\n cluster,\n {...params, offset: page * ROWS_PER_PAGE, count_limit: 100},\n cancelHelper.removeAllAndGenerateNextToken(),\n )\n .then(({data}) => {\n const payload =\n page === 0\n ? {\n data,\n dataParams: params,\n total_row_count: data.total_row_count,\n error_count_limit_exceeded: data?.error_count_limit_exceeded,\n }\n : {\n data,\n dataParams: params,\n error_count_limit_exceeded: data?.error_count_limit_exceeded,\n };\n\n dispatch(tabletErrorsByPathActions.onSuccess(payload));\n })\n .catch((error) => {\n if (!isCancelled(error)) {\n dispatch(tabletErrorsByPathActions.onError({error}));\n }\n });\n };\n}\n","import React from 'react';\nimport {useSelector} from 'react-redux';\nimport moment from 'moment';\nimport cn from 'bem-cn-lite';\n\nimport ypath from '../../../../../common/thor/ypath';\n\nimport {Alert, Button, Flex, Link, Text} from '@gravity-ui/uikit';\n\nimport {\n getTabletErrorCountLimitExceeded,\n getTabletErrorsByPathData,\n getTabletErrorsByPathError,\n getTabletErrorsByPathLoaded,\n getTabletErrorsByPathLoading,\n getTabletErrorsByPathPageCount,\n getTabletErrorsByPathPageFilter,\n} from '../../../../../store/selectors/navigation/tabs/tablet-errors-by-path';\nimport {getCluster} from '../../../../../store/selectors/global';\nimport ColumnHeader from '../../../../../components/ColumnHeader/ColumnHeader';\nimport DataTableYT, {\n Column,\n DATA_TABLE_YT_SETTINGS_UNDER_TOOLBAR_DOUBLE_HEIGHT,\n} from '../../../../../components/DataTableYT/DataTableYT';\nimport {YTErrorBlock} from '../../../../../components/Error/Error';\nimport {Host} from '../../../../../containers/Host/Host';\nimport ClipboardButton from '../../../../../components/ClipboardButton/ClipboardButton';\nimport AttributesButton from '../../../../../components/AttributesButton/AttributesButton';\nimport {showErrorPopup} from '../../../../../utils/utils';\n\nconst block = cn('yt-tablet-errors-by-path-table');\n\nconst countLimitExceededMessage =\n 'A maximum of 10000 errors can be displayed for the selected time period. To view more, please adjust the time range';\n\nexport function TabletErrorsByPathTable({className}: {className?: string}) {\n const {columns, data, loading, loaded, countLimitExceeded} = useTableColumnsAndData();\n const error = useSelector(getTabletErrorsByPathError);\n return (\n <div className={className}>\n {Boolean(error) && <YTErrorBlock error={error} />}\n {Boolean(countLimitExceeded) && (\n <Alert theme={'info'} message={countLimitExceededMessage} />\n )}\n <DataTableYT\n loading={loading}\n loaded={loaded}\n columns={columns}\n data={data}\n settings={{\n ...DATA_TABLE_YT_SETTINGS_UNDER_TOOLBAR_DOUBLE_HEIGHT,\n dynamicRender: false,\n }}\n useThemeYT\n />\n </div>\n );\n}\n\ntype RowType = Exclude<ReturnType<typeof getTabletErrorsByPathData>, undefined>['errors'][number];\n\nfunction useTableColumnsAndData() {\n const cluster = useSelector(getCluster);\n const loading = useSelector(getTabletErrorsByPathLoading);\n const loaded = useSelector(getTabletErrorsByPathLoaded);\n const page = useSelector(getTabletErrorsByPathPageFilter);\n const pageCount = useSelector(getTabletErrorsByPathPageCount);\n const countLimitExceeded = useSelector(getTabletErrorCountLimitExceeded);\n\n const {errors = []} = useSelector(getTabletErrorsByPathData) ?? {};\n const columns = React.useMemo(() => {\n const res: Array<Column<RowType>> = [\n {\n name: 'tablet_id',\n header: (\n <ColumnHeader\n column=\"Tablet Id\"\n title=\"Tablet ID\"\n loading={loading}\n pageIndex={page}\n pageCount={pageCount}\n />\n ),\n render({row: {tablet_id}}) {\n return (\n <Flex className=\"elements-monospace\" alignItems=\"center\">\n <Text ellipsis variant=\"inherit\">\n <Link href={`/${cluster}/tablet/${tablet_id}`}>{tablet_id}</Link>\n </Text>\n <ClipboardButton text={tablet_id} view=\"flat-secondary\" inlineMargins />\n </Flex>\n );\n },\n },\n {\n name: 'method',\n header: <ColumnHeader column=\"Method\" />,\n render({row: {method}}) {\n return method;\n },\n },\n {\n name: 'host',\n header: <ColumnHeader column=\"Host\" />,\n render({row: {host}}) {\n return <Host address={host} asTabletNode inlineMargins />;\n },\n },\n {\n name: 'date',\n header: <ColumnHeader column=\"Date\" />,\n render({row: {timestamp}}) {\n return moment(timestamp * 1000).format('YYYY-MM-DD HH:mm:ss');\n },\n },\n {\n name: 'error_message',\n header: <ColumnHeader column=\"Error message\" />,\n className: block('cell-error-msg'),\n render({row: {error}}) {\n return (\n <Button\n onClick={() =>\n showErrorPopup(error, {hideOopsMsg: true, defaultExpandedCount: 1})\n }\n >\n {ypath.getValue(error.message)}\n </Button>\n );\n },\n },\n {\n name: 'actions',\n header: null,\n render({row: {error}}) {\n return (\n <AttributesButton\n onClick={() =>\n showErrorPopup(error, {hideOopsMsg: true, defaultExpandedCount: 1})\n }\n />\n );\n },\n },\n ];\n return res;\n }, [cluster, page, pageCount, loading]);\n return {data: errors, columns, loading, loaded, countLimitExceeded};\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from '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/Timeline';\nimport WithStickyToolbar from '../../../../../components/WithStickyToolbar/WithStickyToolbar';\nimport {Toolbar} from '../../../../../components/WithStickyToolbar/Toolbar/Toolbar';\nimport TextInputWithDebounce from '../../../../../components/TextInputWithDebounce/TextInputWithDebounce';\n\nimport {docsUrl} from '../../../../../config';\n\nimport {getPath} from '../../../../../store/selectors/navigation';\nimport {\n getTabletErrorsByPathAllMethods,\n getTabletErrorsByPathMethodsFilter,\n getTabletErrorsByPathPageCount,\n getTabletErrorsByPathPageFilter,\n getTabletErrorsByPathTabletIdFilter,\n getTabletErrorsByPathTimeRange,\n} from '../../../../../store/selectors/navigation/tabs/tablet-errors-by-path';\nimport {tabletErrorsByPathActions} from '../../../../../store/reducers/navigation/tabs/tablet-errors/tablet-errors-by-path';\nimport {loadTabletErrorsByTablePath} from '../../../../../store/actions/navigation/tabs/tablet-errors/tablet-errors-by-path';\nimport {getNavigationPathAttributes} from '../../../../../store/selectors/navigation/navigation';\nimport UIFactory from '../../../../../UIFactory';\n\nimport {TabletErrorsByPathTable} from './TabletErrorsByPathTable';\n\nimport './TabletErrorsByPath.scss';\n\nconst block = cn('yt-tablet-errors-by-path');\n\nexport function TabletErrorsRequest() {\n return (\n <WithStickyToolbar\n hideToolbarShadow\n className={block()}\n doubleHeight\n toolbar={<TabletErrorsRequestToolbar className={block('toolbar')} />}\n content={<TabletErrorsByPathTable className={block('content')} />}\n />\n );\n}\n\nexport function TabletErrorsRequestToolbar({className}: {className: string}) {\n const dispatch = useDispatch();\n const {\n timeRange: {from, to, shortcutValue},\n tabletIdFilter,\n pageFilter,\n methodsFilter,\n } = useTabletErrorFromApiLoad();\n const pageCount = useSelector(getTabletErrorsByPathPageCount);\n\n const allMethods = useSelector(getTabletErrorsByPathAllMethods) ?? [];\n\n return (\n <div className={className}>\n <YTTimeline\n from={from!}\n to={to!}\n shortcut={shortcutValue}\n onUpdate={({from, to, shortcutValue}) => {\n dispatch(\n tabletErrorsByPathActions.updateFilter({\n timeRangeFilter: {from, to, shortcutValue},\n }),\n );\n }}\n hasRuler={true}\n />\n <Toolbar\n itemsToWrap={[\n {\n node: (\n <SimplePagination\n value={pageFilter}\n min={0}\n max={Math.max(0, pageCount - 1)}\n onChange={(pageFilter) => {\n dispatch(tabletErrorsByPathActions.updateFilter({pageFilter}));\n }}\n />\n ),\n },\n {\n node: (\n <TextInputWithDebounce\n className={block('tablet-id-filter')}\n value={tabletIdFilter}\n onUpdate={(value) => {\n dispatch(\n tabletErrorsByPathActions.updateFilter({\n tabletIdFilter: value,\n }),\n );\n }}\n placeholder=\"Tablet Id filter...\"\n />\n ),\n },\n {\n node: (\n <Select\n multiple\n label=\"Methods:\"\n value={methodsFilter}\n items={allMethods?.map((value) => {\n return {value, text: value};\n })}\n onUpdate={(v) =>\n dispatch(\n tabletErrorsByPathActions.updateFilter({\n methodsFilter: v,\n }),\n )\n }\n placeholder=\"Select...\"\n hasClear\n maxVisibleValuesTextLength={80}\n />\n ),\n },\n {\n node: docsUrl(\n <HelpLink url={UIFactory.docsUrls['bundles:tablet-errors']} />,\n ),\n },\n ]}\n />\n </div>\n );\n}\n\nfunction useTabletErrorFromApiLoad() {\n const path = useSelector(getPath);\n const timeRange = useSelector(getTabletErrorsByPathTimeRange);\n const methodsFilter = useSelector(getTabletErrorsByPathMethodsFilter);\n const pageFilter = useSelector(getTabletErrorsByPathPageFilter);\n const {id} = useSelector(getNavigationPathAttributes) ?? {};\n const tabletIdFilter = useSelector(getTabletErrorsByPathTabletIdFilter);\n\n const dispatch = useDispatch();\n\n React.useEffect(() => {\n if (!path || !id) {\n return;\n }\n\n if (timeRange.from === undefined || timeRange.to === undefined) {\n const {from, to} = calcFromTo(timeRange);\n dispatch(\n tabletErrorsByPathActions.updateFilter({timeRangeFilter: {...timeRange, from, to}}),\n );\n } else {\n dispatch(\n loadTabletErrorsByTablePath(pageFilter, {\n table_id: id,\n table_path: path,\n start_timestamp: Math.floor(timeRange.from / 1000),\n end_timestamp: Math.ceil(timeRange.to / 1000),\n methods: methodsFilter.length ? methodsFilter : undefined,\n ...(tabletIdFilter ? {tablet_id: tabletIdFilter} : {}),\n }),\n );\n }\n }, [path, id, timeRange, methodsFilter, pageFilter, tabletIdFilter, dispatch]);\n return {timeRange, methodsFilter, tabletIdFilter, pageFilter};\n}\n","import React, {useEffect} from 'react';\nimport {useDispatch, useSelector} from '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 {tabletErrorsByPathActions} from '../../../../store/reducers/navigation/tabs/tablet-errors/tablet-errors-by-path';\nimport {\n getTabletErrorsBackgroundCount,\n getTabletErrorsViewMode,\n} from '../../../../store/selectors/navigation/tabs/tablet-errors-background';\n\nimport TabletErrorsBackground from './TabletErrorsBackground';\nimport {TabletErrorsRequest} from './TabletErrorsByPath/TabletErrorsByPath';\n\nexport default function TabletErrors() {\n const dispatch = useDispatch();\n\n const viewMode = useSelector(getTabletErrorsViewMode);\n const backgroundErrorCount = useSelector(getTabletErrorsBackgroundCount);\n\n const allowTabletErrorsAPI = getConfigData().allowTabletErrorsAPI;\n\n const content =\n viewMode === 'request_errors' ? <TabletErrorsRequest /> : <TabletErrorsBackground />;\n\n useEffect(() => {\n return () => {\n dispatch(tabletErrorsByPathActions.updateFilter({timeRangeFilter: undefined}));\n dispatch(updateTabletErrorsViewMode());\n };\n }, []);\n\n return (\n <div>\n {allowTabletErrorsAPI && (\n <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, {FC} from 'react';\nimport cn from 'bem-cn-lite';\nimport ErrorBoundary from '../../../../components/ErrorBoundary/ErrorBoundary';\nimport {Tab} from '../../../../constants/navigation';\nimport NavigationDescription from '../../NavigationDescription/NavigationDescription';\nimport {getComponentByContentType, getComponentByMode} from './helpers';\n\nconst block = cn('navigation');\n\ntype Props = {\n type: string;\n mode: string;\n};\n\nconst ContentViewer: FC<Props> = ({type, mode}) => {\n const isContentTab = mode === Tab.CONTENT;\n const Component = isContentTab ? getComponentByContentType(type) : getComponentByMode(mode);\n\n if (!Component) return undefined;\n\n return (\n <ErrorBoundary>\n <div className={block('viewer', {mode})}>\n {isContentTab && <NavigationDescription className={block('description')} />}\n <Component />\n </div>\n </ErrorBoundary>\n );\n};\n\nexport default ContentViewer;\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {\n getNavigationCheckPermissionsError,\n getNavigationIsAccountUsable,\n getNavigationIsWritable,\n getNavigationPathAccount,\n} from '../../../store/selectors/navigation/navigation';\nimport {useSelector} from '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';\nimport {Button, Flex, Link} from '@gravity-ui/uikit';\nimport {ArrowUpRightFromSquare} from '@gravity-ui/icons';\n\nimport isEmpty_ from 'lodash/isEmpty';\nimport isEqual_ from 'lodash/isEqual';\nimport map_ from 'lodash/map';\nimport pickBy_ from 'lodash/pickBy';\nimport reduce_ from 'lodash/reduce';\n\nimport cn from 'bem-cn-lite';\n\nimport ypath from '../../../common/thor/ypath';\n\n// @ts-ignore\nimport {\n DialogError,\n DialogField,\n DialogTabField,\n FormApi,\n YTDFDialog,\n} from '../../../components/Dialog';\n\nimport {\n invalidateYTAnnotation,\n useExternalDescriptionQuery,\n} from '../../../store/api/navigation/tabs/description';\nimport {\n getNavigationAttributesEditorAttributes,\n getNavigationAttributesEditorDynamicTables,\n getNavigationAttributesEditorError,\n getNavigationAttributesEditorMapNodes,\n getNavigationAttributesEditorPath,\n getNavigationAttributesEditorStaticTables,\n getNavigationAttributesEditorVisible,\n} from '../../../store/selectors/navigation/modals/attributes-editor';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {\n hideNavigationAttributesEditor,\n navigationSetNodeAttributes,\n} from '../../../store/actions/navigation/modals/attributes-editor';\nimport {getMediumListNoCache} from '../../../store/selectors/thor';\n\nimport {getCluster} from '../../../store/selectors/global';\nimport {getPath} from '../../../store/selectors/navigation';\n\nimport {\n InMemoryMode,\n InMemoryModeType,\n StorageOptions,\n compressionCodecValueFromString,\n compressionCodecValueToString,\n erasureCodecFromStorageOption,\n normalizeErasureCodec,\n storageOptionFromErasureCodec,\n} from '../../../utils/cypress-attributes';\nimport {makeLink} from './CreateTableModal/CreateTableModal';\nimport {\n getCompressionCodecs,\n getErasureCodecs,\n} from '../../../store/selectors/global/supported-features';\nimport {docsUrl} from '../../../config';\n\nimport './AttributesEditor.scss';\nimport UIFactory from '../../../UIFactory';\n\nconst block = cn('navigation-attributes-editor');\n\ninterface FormValues {\n general: {\n path: Array<{title: string}>;\n account: string;\n primary_medium: string;\n tablet_cell_bundle: string;\n in_memory_mode: InMemoryModeType | '';\n\n expiration_time: {from?: string | number};\n expiration_timeout: {value: number};\n };\n storage: {\n path: Array<{title: string}>;\n optimize_for: 'lookup' | 'scan';\n compression_codec: Array<string>;\n erasure_codec: string;\n replication_factor: number;\n\n runMerge: true;\n _storageOption: 'replication' | 'erasure';\n };\n description: {\n annotation: {value: string};\n };\n}\n\n// eslint-disable-next-line complexity\nfunction AttributesEditorLoaded() {\n const paths = useSelector(getNavigationAttributesEditorPath);\n const attributesMap = useSelector(getNavigationAttributesEditorAttributes);\n\n const singleMode = !(paths?.length! > 1);\n const attributes = paths?.length === 1 ? attributesMap[paths[0]] : {};\n\n const mediumList = useSelector(getMediumListNoCache);\n const dispatch = useDispatch();\n const storeError = useSelector(getNavigationAttributesEditorError);\n\n const [stateError, setErr] = React.useState<any>(undefined);\n const [currentTab, setCurrentTab] = React.useState<string | undefined>();\n\n const error = stateError || storeError;\n\n const handleClose = React.useCallback(() => {\n dispatch(hideNavigationAttributesEditor());\n }, [dispatch]);\n\n const hasMapNodes = useSelector(getNavigationAttributesEditorMapNodes).length > 0;\n const hasStaticTables = useSelector(getNavigationAttributesEditorStaticTables).length > 0;\n const hasDynamicTables = useSelector(getNavigationAttributesEditorDynamicTables).length > 0;\n\n const hasTables = hasStaticTables || hasDynamicTables || hasMapNodes; // map-node is required for inheritance\n const hasDynTableOrMapNode = hasMapNodes || hasDynamicTables;\n\n const erasureCodec = ypath.getValue(attributes, '/@erasure_codec');\n\n const pathsValues = React.useMemo(\n () =>\n map_(paths, (item) => {\n return {\n title: item,\n };\n }),\n [paths],\n );\n\n const annotationInitial = {\n value: ypath.getValue(attributes, '/@annotation'),\n };\n const initialValues: FormValues = {\n general: {\n path: pathsValues,\n account: ypath.getValue(attributes, '/@account') || '',\n primary_medium: ypath.getValue(attributes, '/@primary_medium') || '',\n tablet_cell_bundle: ypath.getValue(attributes, '/@tablet_cell_bundle') || '',\n in_memory_mode: ypath.getValue(attributes, '/@in_memory_mode'),\n\n expiration_time: {from: ypath.getValue(attributes, '/@expiration_time')},\n expiration_timeout: {value: ypath.getValue(attributes, '/@expiration_timeout')},\n },\n storage: {\n path: pathsValues,\n optimize_for: ypath.getValue(attributes, '/@optimize_for') || 'lookup',\n compression_codec: compressionCodecValueFromString(\n ypath.getValue(attributes, '/@compression_codec'),\n ),\n erasure_codec: normalizeErasureCodec(erasureCodec),\n replication_factor: ypath.getValue(attributes, '/@replication_factor'),\n\n runMerge: true,\n _storageOption:\n storageOptionFromErasureCodec(erasureCodec) || StorageOptions.REPLICATION,\n },\n description: {\n annotation: annotationInitial,\n },\n };\n\n const tmp = ypath.getValue(attributes, '/@annotation_path');\n const annotationPath = paths && tmp !== paths[0] ? tmp : undefined;\n\n const handleAdd = React.useCallback(\n async (form: FormApi<FormValues, FormValues>) => {\n try {\n const {values} = form.getState();\n const {general, storage, description} = values;\n\n const initials = {\n ...initialValues.general,\n ...initialValues.storage,\n };\n\n const dataDiff = reduce_(\n {...general, ...storage, ...description},\n (acc, value, key) => {\n if (!isEqual_(value, (initials as any)[key])) {\n (acc as any)[key] = value;\n }\n return acc;\n },\n {} as Partial<typeof initials>,\n );\n\n if (dataDiff.in_memory_mode === '') {\n delete dataDiff.in_memory_mode;\n }\n\n const {\n account,\n primary_medium,\n tablet_cell_bundle,\n in_memory_mode,\n compression_codec,\n erasure_codec,\n replication_factor,\n _storageOption,\n optimize_for,\n } = dataDiff;\n\n const generalAttributes: any = {\n account,\n primary_medium,\n tablet_cell_bundle,\n in_memory_mode,\n };\n\n const storageAttributes: Partial<\n Omit<FormValues['storage'], 'compression_codec'> & {\n compression_codec: string;\n }\n > = {};\n\n if (optimize_for) {\n storageAttributes['optimize_for'] = optimize_for;\n }\n\n if (compression_codec) {\n storageAttributes['compression_codec'] =\n compressionCodecValueToString(compression_codec);\n }\n if (_storageOption) {\n storageAttributes['erasure_codec'] = erasureCodecFromStorageOption(\n _storageOption,\n erasure_codec,\n );\n }\n if (storage._storageOption === StorageOptions.REPLICATION) {\n if (replication_factor) {\n storageAttributes['replication_factor'] = Number(replication_factor);\n }\n } else if (erasure_codec) {\n storageAttributes['erasure_codec'] = erasureCodecFromStorageOption(\n _storageOption,\n erasure_codec,\n );\n }\n\n const {\n annotation: {value: annotation},\n } = description;\n\n const generalAttrs = pickBy_(generalAttributes, (v) => v !== undefined);\n if (general.expiration_time.from !== initialValues.general.expiration_time.from) {\n generalAttrs.expiration_time = general.expiration_time.from;\n }\n\n if (general.expiration_timeout.value !== initials.expiration_timeout.value) {\n generalAttrs.expiration_timeout = general.expiration_timeout.value;\n }\n\n await dispatch(\n navigationSetNodeAttributes(\n {\n ...generalAttrs,\n ...Object.assign(\n {},\n annotation === annotationInitial.value\n ? {}\n : {\n annotation,\n },\n ),\n },\n storageAttributes,\n hasStaticTables && storage.runMerge,\n ),\n );\n dispatch(invalidateYTAnnotation());\n } catch (e) {\n setErr(e);\n throw e;\n }\n },\n [dispatch, initialValues, setErr],\n );\n\n const forEachStaticTable = !hasStaticTables ? '' : ' for each static table ';\n const mergeNoticeAndError: Array<DialogField<FormValues>> = [];\n\n if (hasStaticTables) {\n mergeNoticeAndError.push({\n name: 'runMergeNotice',\n type: 'block',\n visibilityCondition: {\n when: 'storage.runMerge',\n isActive: (runMerge: boolean) => !runMerge,\n },\n extras: {\n children: (\n <span className={block('run-notice')}>\n Do not forget to run merge-operation manually\n {forEachStaticTable}\n to completely apply changes of storage attributes.\n </span>\n ),\n },\n });\n }\n if (error) {\n mergeNoticeAndError.push({\n name: 'error',\n type: 'block' as const,\n extras: {\n children: <DialogError error={error} />,\n },\n });\n }\n\n const annotationTab: Array<DialogTabField<DialogField<FormValues>>> = [];\n\n if (singleMode) {\n const fields: Array<DialogField<FormValues>> = [\n {\n name: 'annotation',\n type: 'annotation' as const,\n fullWidth: true,\n extras: {\n valuePath: annotationPath,\n className: block('full-height'),\n initialValue: annotationInitial,\n },\n },\n ...mergeNoticeAndError,\n ];\n\n annotationTab.push({\n name: 'description',\n type: 'tab-vertical',\n title: 'Description',\n fields,\n });\n }\n\n const inMemoryModeField: DialogField = {\n name: 'in_memory_mode', // the attribute is not inheritable, so we do not need to display for map-nodes\n type: 'radio' as const,\n caption: 'In memory mode',\n extras: {\n options: [\n {value: InMemoryMode.NONE, label: 'None'},\n {value: InMemoryMode.COMPRESSED, label: 'Compressed'},\n {value: InMemoryMode.UNCOMPRESSED, label: 'Uncompressed'},\n ],\n },\n tooltip: docsUrl(makeLink(UIFactory.docsUrls['dynamic-tables:overview#in_memory'])),\n };\n\n const optimizeForField: DialogField = {\n name: 'optimize_for',\n type: 'radio',\n caption: 'Optimize for',\n tooltip: docsUrl(makeLink(UIFactory.docsUrls['storage:chunks#optimize_for'])),\n extras: {\n options: [\n {value: 'scan', label: 'Scan'},\n {value: 'lookup', label: 'Lookup'},\n ],\n },\n };\n\n const compressionCodecs = useSelector(getCompressionCodecs);\n const erasureCodecs = useSelector(getErasureCodecs);\n\n return (\n <YTDFDialog\n className={block({'single-mode': singleMode})}\n visible={true}\n onAdd={handleAdd}\n onClose={handleClose}\n size={'l'}\n validate={validateForm}\n headerProps={{\n title: 'Edit attributes',\n }}\n initialValues={initialValues}\n fields={[\n {\n name: 'general',\n title: 'General',\n type: 'tab-vertical',\n fields: [\n {\n name: 'path',\n type: 'editable-list',\n caption: 'Path',\n extras: {\n frozen: true,\n className: block('path-list'),\n },\n },\n {\n name: 'account',\n type: 'usable-account',\n caption: 'Account',\n tooltip: docsUrl(makeLink(UIFactory.docsUrls['storage:accounts'])),\n extras: {\n placeholder: 'Enter account name...',\n },\n },\n {\n name: 'primary_medium',\n type: 'yt-select-single',\n caption: 'Primary medium',\n tooltip: docsUrl(makeLink(UIFactory.docsUrls['storage:media#primary'])),\n extras: {\n placeholder: 'Select primary medium',\n items: mediumList.map((value: string) => {\n return {value, text: value};\n }),\n width: 'max',\n },\n },\n ...(!hasDynTableOrMapNode\n ? []\n : [\n {\n name: 'tablet_cell_bundle',\n type: 'tablet-cell-bundle' as const,\n caption: 'Tablet cell bundle',\n tooltip: docsUrl(\n makeLink(\n UIFactory.docsUrls[\n 'dynamic-tables:concepts#tablet_cell_bundles'\n ],\n ),\n ),\n extras: {\n placeholder: 'Select tablet cell bundle',\n },\n },\n ]),\n ...(!hasDynamicTables ? [] : [inMemoryModeField]),\n {\n name: 'expiration_time',\n type: 'datepicker',\n caption: 'Expiration time',\n tooltip: docsUrl(makeLink(UIFactory.docsUrls['cypress:ttl'])),\n extras: {\n format: 'yyyy-MM-dd HH:mm',\n range: false,\n },\n },\n {\n name: 'expiration_timeout',\n type: 'time-duration',\n caption: 'Expiration timeout',\n tooltip: docsUrl(makeLink(UIFactory.docsUrls['cypress:ttl'])),\n },\n ...mergeNoticeAndError,\n ],\n },\n {\n name: 'storage',\n type: 'tab-vertical',\n title: 'Storage',\n fields: [\n {\n name: 'path',\n type: 'editable-list',\n caption: 'Path',\n extras: {\n frozen: true,\n className: block('path-list'),\n },\n },\n ...(!hasTables ? [] : [optimizeForField]),\n {\n name: 'compression_codec',\n type: 'select-with-subitems' as const,\n caption: 'Compression',\n tooltip: docsUrl(\n makeLink(\n UIFactory.docsUrls['storage:compression#compression_codecs'],\n ),\n ),\n extras: 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 onActiveTabChange={(tab) => setCurrentTab(tab)}\n footerProps={{\n content: currentTab === 'description' && <CreateExternalDescriptionButton />,\n }}\n />\n );\n}\n\nfunction CreateExternalDescriptionButton() {\n const path = useSelector(getPath);\n const cluster = useSelector(getCluster);\n\n const {data: externalDescription} = useExternalDescriptionQuery({cluster, path});\n\n return (\n <>\n {externalDescription?.externalAnnotationLink && (\n <Link href={externalDescription?.externalAnnotationLink} target={'_blank'}>\n <Button view={'outlined'} size={'l'}>\n <Flex alignItems={'center'} gap={1}>\n {UIFactory?.externalAnnotationSetup?.externalServiceName ||\n 'Create external description'}{' '}\n (Recomended)\n <ArrowUpRightFromSquare />\n </Flex>\n </Button>\n </Link>\n )}\n </>\n );\n}\n\nexport default function AttributesEditor() {\n const path = useSelector(getNavigationAttributesEditorPath);\n const visible = useSelector(getNavigationAttributesEditorVisible);\n\n if (!path?.length || !visible) {\n return null;\n }\n return <AttributesEditorLoaded />;\n}\n\nfunction validateReplicationFactor(str: string): string | undefined {\n const v = parseInt(str);\n if (!str || (String(str) === String(v) && v >= 1 && v <= 20)) {\n return undefined;\n }\n\n return 'The value must be an integer in range [1; 20]';\n}\n\nfunction validateStorage(storage: any) {\n const replication_factor = validateReplicationFactor(storage.replication_factor);\n if (storage._storageOption !== StorageOptions.REPLICATION || !replication_factor) {\n return undefined;\n }\n return {replication_factor};\n}\n\nfunction validateForm({storage}: FormValues) {\n const res: any = {\n storage: validateStorage(storage),\n };\n const ret = pickBy_(res, (v) => !isEmpty_(v));\n return ret;\n}\n","import ypath from '../../../../common/thor/ypath';\n\nimport {RootState} from '../../../../store/reducers';\nimport {createSelector} from 'reselect';\nimport {makeCompressionCodecFinder} from '../../../../store/selectors/global/supported-features';\n\nexport const getRemoteCopyModalVisible = (state: RootState) =>\n state.navigation.modals.remoteCopyModal.showModal;\nexport const getRemoteCopyModalPaths = (state: RootState) =>\n state.navigation.modals.remoteCopyModal.paths;\nexport const getRemoteCopyAttributesMap = (state: RootState) =>\n state.navigation.modals.remoteCopyModal.attributesMap;\n\nexport const getRemoteCopyCodecs = createSelector(\n [getRemoteCopyModalPaths, getRemoteCopyAttributesMap, makeCompressionCodecFinder],\n (paths, attributesMap, findCompressionCodec) => {\n for (const path of paths) {\n const map = attributesMap[path];\n if (map) {\n const compCodec = findCompressionCodec(\n ypath.getValue(map, '/compression_codec') as string,\n );\n\n return {\n compression_codec: compCodec,\n erasure_codec: ypath.getValue(map, '/erasure_codec') as string,\n };\n }\n }\n return {};\n },\n);\n","import React from 'react';\nimport {useDispatch, useSelector} from '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: &quot;10:20&quot;, &quot;10:&quot;, &quot;:20&quot;\n </span>\n ),\n validator: validateRange,\n extras: {\n placeholder: '10:20',\n },\n },\n {\n name: 'combine_chunks',\n type: 'tumbler',\n caption: 'Combine chunks',\n },\n ...(!error\n ? []\n : [\n {\n name: 'error',\n type: 'block' as const,\n extras: {\n children: <DialogError error={error} />,\n },\n },\n ]),\n ]}\n />\n );\n}\n\nconst RANGE = /^(\\d+:)|(\\d+:\\d+)|(:\\d+)$/;\n\nfunction validateRange(value: string) {\n if (!value || RANGE.test(value)) {\n return undefined;\n }\n\n return 'Enter two numbers separated by colon, like \"10:20\" or \":20\" or \"10:\"';\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {DialogError, DialogField, YTDFDialog} from '../../../../components/Dialog';\nimport {useDispatch, useSelector} from '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 {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 <div className={block('header')}>\n <NavigationPermissionsNotice />\n\n <div className={block('tabs')}>\n {this.renderEditButton()}\n {this.renderTabs()}\n </div>\n </div>\n\n <div className={block('main')}>{loaded && this.renderView()}</div>\n {hasError && this.renderError()}\n\n {renderModals()}\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nfunction mapStateToProps(state) {\n const isFinalState = isNavigationFinalLoadState(state);\n const loadState = getLoadState(state);\n const hasError = loadState === LOADING_STATUS.ERROR;\n const loaded = loadState === LOADING_STATUS.LOADED;\n return {\n path: getPath(state),\n mode: getEffectiveMode(state),\n type: getType(state),\n isIdmSupported: getIdmSupport(state),\n error: getError(state),\n hasError,\n loaded,\n loading: !isFinalState,\n parsedPath: getParsedPath(state),\n transaction: getTransaction(state),\n cluster: getCluster(state),\n tabSize: UI_TAB_SIZE,\n tabs: getTabs(state),\n };\n}\n\nconst mapDispatchToProps = {\n setMode,\n updateView,\n updateTitle,\n onTransactionChange,\n showNavigationAttributesEditor,\n};\n\nconst NavigationConnected = connect(mapStateToProps, mapDispatchToProps)(Navigation);\n\nconst NavigationWithRumMemo = React.memo(NavigationWithMesure);\n\nfunction NavigationWithMesure() {\n const path = useSelector(getPath);\n const transaction = useSelector(getTransaction);\n const isFinalState = useSelector(isNavigationFinalLoadState);\n\n useAppRumMeasureStart({\n type: RumMeasureTypes.NAVIGATION_PRELOAD,\n startDeps: [isFinalState, path, transaction],\n allowStart: ([isFinal]) => {\n return !isFinal;\n },\n });\n\n useRumMeasureStop({\n type: RumMeasureTypes.NAVIGATION_PRELOAD,\n stopDeps: [isFinalState],\n allowStop: ([isFinal]) => {\n return isFinal;\n },\n });\n\n return <NavigationConnected />;\n}\n\nexport default function NavigationWithRum() {\n return <NavigationWithRumMemo />;\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\nimport {TextInput} from '@gravity-ui/uikit';\nimport key from 'hotkeys-js';\n\nimport Hotkey from '../../components/Hotkey/Hotkey';\n\nconst supportedSizes = ['xs', 's', 'm'];\n\nconst propTypes = {\n size: PropTypes.oneOf(supportedSizes),\n value: PropTypes.string,\n placeholder: PropTypes.string,\n onApply: PropTypes.func.isRequired,\n onCancel: PropTypes.func.isRequired,\n scope: PropTypes.string.isRequired,\n cancelOnBlur: PropTypes.bool,\n};\n\nconst defaultProps = {\n size: 'm',\n};\n\nexport default class Editor extends React.Component {\n constructor(props) {\n super(props);\n\n this.onApply = this.onApply.bind(this);\n this.onCancel = this.onCancel.bind(this);\n this.onChange = this.onChange.bind(this);\n this.onFocus = this.onFocus.bind(this);\n this.onBlur = this.onBlur.bind(this);\n\n this.state = {\n value: props.value,\n };\n }\n willReceiveProps({value}) {\n this.setState({value});\n }\n onApply() {\n if (typeof this.props.onApply === 'function') {\n this.props.onApply(this.state.value);\n }\n }\n onCancel() {\n if (typeof this.props.onCancel === 'function') {\n this.props.onCancel();\n }\n }\n onChange(value) {\n this.setState({value});\n }\n onFocus() {\n key.setScope(this.props.scope);\n }\n onBlur() {\n key.setScope('all');\n const {cancelOnBlur} = this.props;\n if (cancelOnBlur) {\n this.onCancel();\n }\n }\n render() {\n // console.log('<props>', this.props, '</props>');\n\n const {size, scope, placeholder} = this.props;\n\n return (\n <div className={block('elements-editor')()}>\n <TextInput\n size={size}\n placeholder={placeholder}\n value={this.state.value}\n autoFocus\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n onUpdate={this.onChange}\n />\n <Hotkey\n settings={[\n {keys: 'enter', scope: scope, handler: this.onApply},\n {keys: 'esc', scope: scope, handler: this.onCancel},\n ]}\n />\n </div>\n );\n }\n}\n\nEditor.propTypes = propTypes;\nEditor.defaultProps = defaultProps;\n","import React, {FocusEvent} from 'react';\nimport {useHistory} from 'react-router';\nimport cn from 'bem-cn-lite';\nimport {useDispatch, useSelector} from 'react-redux';\n\nimport {Flex} from '@gravity-ui/uikit';\n\nimport {getMetrics} from '../../../common/utils/metrics';\n\nimport {\n getMode,\n getNavigationBreadcrumbs,\n getNavigationPathAttributes,\n getNavigationRestorePath,\n} from '../../../store/selectors/navigation/navigation';\nimport {getCluster} from '../../../store/selectors/global';\nimport {makeRoutedURL} from '../../../store/location';\nimport {restoreObject} from '../../../store/actions/navigation/modals/restore-object';\nimport {getNavigationDefaultPath} from '../../../store/selectors/settings';\nimport {getFavouritePaths, isCurrentPathInFavourites} from '../../../store/selectors/favourites';\nimport {\n getActualPath,\n getPath,\n getTransaction,\n isNavigationFinalLoadState,\n} from '../../../store/selectors/navigation';\nimport {navigationToggleFavourite} from '../../../store/actions/favourites';\nimport {\n clearTransaction,\n setTransaction,\n updatePath,\n updateView,\n} from '../../../store/actions/navigation';\n\nimport Favourites from '../../../components/Favourites/Favourites';\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\nimport {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 getMetrics().countEvent('navigation_copy-path');\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 getMetrics().countEvent('navigation_refresh');\n dispatch(updateView());\n }, [dispatch]);\n\n return (\n <Button\n size=\"s\"\n view=\"flat-secondary\"\n title={'Refresh page [Shift+R]'}\n hotkey={[{keys: 'shift+r', handler: handleClick, scope: 'all'}]}\n onClick={handleClick}\n >\n <Icon awesome={'sync-alt'} />\n </Button>\n );\n}\n\nfunction RestoreButton() {\n const dispatch = useDispatch();\n const path = useSelector(getPath);\n const restorePath = useSelector(getNavigationRestorePath);\n\n const handleRestore = React.useCallback(() => {\n dispatch(restoreObject(path, restorePath));\n }, [dispatch, restorePath, path]);\n\n return !restorePath || !inTrash(path) ? null : (\n <span className={block('restore')}>\n <Button view=\"action\" size=\"s\" onClick={handleRestore}>\n <Icon awesome=\"undo\" />\n &nbsp;Restore\n </Button>\n </span>\n );\n}\n\nexport default React.memo(NavigationTopRowContent);\n","import {TRASH_PATH} from '../../constants/navigation';\n\nexport function isLinkToTrashNode(targetPath?: string) {\n return targetPath === TRASH_PATH;\n}\n","import {RumMeasureStartProps, useRumMeasureStart} from './RumUiContext';\nimport {useSelector} from 'react-redux';\nimport {getCluster} from '../store/selectors/global';\n\nexport function useAppRumMeasureStart<T extends Array<any>>(params: RumMeasureStartProps<T>) {\n const cluster = useSelector(getCluster);\n\n useRumMeasureStart({\n ...params,\n subPage: params.subPage || `ui.${cluster}`,\n });\n}\n","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 * as React from 'react';\nconst Ellipsis = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M3 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3M9.5 8a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0m5 0a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0\", clipRule: \"evenodd\" })));\nexport default Ellipsis;\n","import { 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","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 0\", clipRule: \"evenodd\" })));\nexport default ChevronLeft;\n","import React from 'react';\nimport debounce_ from 'lodash/debounce';\n\nimport {TextInput, TextInputProps} from '@gravity-ui/uikit';\n\nexport interface TextInputWithDebounceProps extends TextInputProps {\n debounce?: number;\n onBlur?: (e: React.FocusEvent) => void;\n onEnterKeyDown?: (e: React.KeyboardEvent) => void;\n}\n\nfunction TextInputWithDebounce(props: TextInputWithDebounceProps) {\n const {\n debounce = 400,\n onUpdate = () => {},\n onBlur,\n value,\n onEnterKeyDown,\n onKeyDown,\n ...rest\n } = props;\n\n const [input, setInput] = React.useState<string | undefined>();\n\n const handleChangeExt = React.useMemo(() => {\n return debounce_(onUpdate as any, debounce);\n }, [debounce, onUpdate]);\n\n const handleChange = React.useCallback(\n (text: string) => {\n setInput(text);\n handleChangeExt(text);\n },\n [handleChangeExt, setInput],\n );\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (onKeyDown) {\n onKeyDown(e);\n }\n if (e.key === 'Enter' && onEnterKeyDown) {\n onEnterKeyDown(e);\n }\n },\n [onEnterKeyDown, onKeyDown],\n );\n\n const handleBlur = React.useCallback(\n (e: React.FocusEvent<HTMLInputElement>) => {\n setInput(undefined);\n\n if (onBlur) {\n onBlur(e);\n }\n },\n [setInput, onBlur],\n );\n\n React.useEffect(() => {\n return () => {\n handleChangeExt.cancel();\n };\n }, [handleChangeExt]);\n\n return (\n <TextInput\n onUpdate={handleChange}\n {...rest}\n value={input === undefined ? value : input}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n />\n );\n}\n\nexport default React.memo(TextInputWithDebounce);\n","import 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 React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport {getDisplayName} from '../utils';\nimport {SPLIT_PANE_ID} from '../constants/index';\n\nexport default function withSplit<P>(Component: React.ComponentType<P>): React.ComponentType<P> {\n return class WithSplit extends React.Component<P> {\n static displayName = `WithSplit(${getDisplayName(Component)})`;\n\n render() {\n return ReactDOM.createPortal(\n <Component {...this.props} />,\n document.getElementById(SPLIT_PANE_ID)!,\n );\n }\n };\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\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 PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\nimport {TextInput} from '@gravity-ui/uikit';\n\nimport Icon from '../Icon/Icon';\nimport Hotkey from '../../components/Hotkey/Hotkey';\n\nimport './Pagination.scss';\nimport Button from '../Button/Button';\n\nconst paginationControlComponent = PropTypes.shape({\n handler: PropTypes.func,\n target: PropTypes.func,\n disabled: PropTypes.bool,\n hotkey: PropTypes.string,\n hotkeyScope: PropTypes.string,\n hotkeyHandler: PropTypes.func,\n}).isRequired;\n\nconst supportedSizes = ['s', 'm', 'l'];\nconst block = cn('elements-pagination');\n\nexport default class Pagination extends React.Component {\n static propTypes = {\n className: PropTypes.string,\n size: PropTypes.oneOf(supportedSizes),\n first: paginationControlComponent,\n previous: paginationControlComponent,\n next: paginationControlComponent,\n last: paginationControlComponent,\n tooltip: PropTypes.string,\n showInput: PropTypes.bool,\n inputValue: PropTypes.string,\n onChange: PropTypes.func,\n };\n static defaultProps = {\n size: 'm',\n showInput: false,\n };\n\n renderComponent(name, control) {\n const handler = control.handler;\n\n const disabled = typeof control.disabled === 'boolean' ? control.disabled : false;\n\n const {size, tooltip} = this.props;\n const hotkeySettings = [\n {\n keys: control.hotkey,\n scope: control.hotkeyScope,\n handler: control.hotkeyHandler,\n },\n ];\n\n return (\n <span title={tooltip}>\n <Button\n size={size}\n onClick={handler}\n disabled={disabled}\n className={block('control', {name})}\n title={\n {\n first: 'First page',\n previous: 'Previous page',\n next: 'Next page',\n last: 'Last page',\n }[name]\n }\n pin={\n {\n first: 'round-brick',\n previous: 'clear-brick',\n next: 'brick-clear',\n last: 'brick-round',\n }[name]\n }\n >\n <Icon\n awesome={\n {\n first: 'angle-double-left',\n previous: 'angle-left',\n next: 'angle-right',\n last: 'angle-double-right',\n }[name]\n }\n />\n </Button>\n {typeof control.hotkeyHandler !== 'undefined' && (\n <Hotkey settings={hotkeySettings} />\n )}\n </span>\n );\n }\n renderInput() {\n const {showInput, inputValue, onChange, size} = this.props;\n\n return showInput ? (\n <TextInput\n qa=\"yt-pagination_input\"\n size={size}\n type=\"text\"\n value={inputValue}\n onUpdate={onChange}\n pin={'clear-clear'}\n />\n ) : null;\n }\n render() {\n const {first, previous, next, last, className} = this.props;\n\n return (\n <div className={block(null, className)}>\n {this.renderComponent('first', first)}\n {this.renderComponent('previous', previous)}\n {this.renderInput()}\n {this.renderComponent('next', next)}\n {this.renderComponent('last', last)}\n </div>\n );\n }\n}\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 {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 PropTypes from 'prop-types';\nimport {withRouter} from 'react-router';\n\nimport {computeStateQuery} from '../../utils/index';\nimport Link from '../../components/Link/Link';\nimport FormattedText from './FormattedText';\n\nfunction FormattedLink(props) {\n const {state, theme = 'ghost', className, text, match, onClick, ...rest} = props;\n const url = computeStateQuery({cluster: match.params.cluster, ...state});\n return (\n <Link routed url={url} theme={theme} onClick={onClick} className={className}>\n {React.isValidElement(text) ? text : <FormattedText text={text} {...rest} />}\n </Link>\n );\n}\nFormattedLink.propTypes = {\n state: PropTypes.shape({\n page: PropTypes.string.isRequired,\n cluster: PropTypes.string,\n tab: PropTypes.string,\n }).isRequired,\n text: PropTypes.oneOfType([PropTypes.node, PropTypes.string]).isRequired,\n className: PropTypes.string,\n theme: PropTypes.string,\n onClick: PropTypes.func,\n // from react-router\n match: PropTypes.shape({\n params: PropTypes.shape({\n cluster: PropTypes.string,\n }),\n }),\n};\nexport default withRouter(FormattedLink);\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport FormattedText from './FormattedText';\nimport FormattedLink from './FormattedLink';\n\nexport default function FormattedTextOrLink({asLink = false, ...props}) {\n return asLink ? <FormattedLink {...props} /> : <FormattedText {...props} />;\n}\nFormattedTextOrLink.propTypes = {\n asLink: PropTypes.bool,\n};\n","import React, {useState} from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\n\nimport ClipboardButton from '../../../components/ClipboardButton/ClipboardButton';\n\nimport './FormattedId.scss';\n\nconst block = cn('table-formatters-id');\n\nFormattedId.propTypes = {\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n};\n\nexport default function FormattedId({id}) {\n const [hovered, setHovered] = useState(false);\n const handleMouseEnter = () => setHovered(true);\n const handleMouseLeave = () => setHovered(false);\n\n return (\n <div\n className={block({hovered: hovered ? 'yes' : 'no'})}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <span className=\"elements-ellipsis\">{id}</span>\n {hovered && (\n <div className={block('clipboard-button-wrapper')}>\n <ClipboardButton view=\"flat-secondary\" size=\"m\" text={id} />\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport {Progress} from '@gravity-ui/uikit';\n\nimport hammer from '../../common/hammer';\n\n// TODO: here are defiend reworked components from /templates/utils, drop original functions once we switch to\n// new components everywhere\nexport {default as FormattedText} from './FormattedText';\nexport {default as FormattedLink} from './FormattedLink';\nexport {default as FormattedTextOrLink} from './FormattedTextOrLink';\nexport {default as FormattedId} from './FormattedId/FormattedId';\n\nexport function printColumnAsBytes(item, columnName) {\n const column = this.props.columns[columnName];\n return hammer.format['Bytes'](column.get(item));\n}\n\nexport function printColumnAsNumber(item, columnName) {\n const column = this.props.columns[columnName];\n return hammer.format['Number'](column.get(item));\n}\n\nexport function printColumnAsFloatNumber(item, columnName) {\n const column = this.props.columns[columnName];\n return hammer.format['Number'](column.get(item), {\n digits: 2,\n digitsOnlyForFloat: true,\n });\n}\n\nexport function printColumnAsProgress(item, columnName) {\n const column = this.props.columns[columnName];\n return <Progress {...column.get(item)} />;\n}\n\nexport function printColumnAsTimeDuration(item, columnName) {\n const column = this.props.columns[columnName];\n return hammer.format['TimeDuration'](column.get(item));\n}\n\nexport function printColumnAsTimeDurationWithMs(item, columnName) {\n const column = this.props.columns[columnName];\n return hammer.format['TimeDuration'](column.get(item), {\n format: 'milliseconds',\n });\n}\n\nexport function printColumnAsReadableField(item, columnName) {\n const column = this.props.columns[columnName];\n return (\n <span className=\"elements-ellipsis\">\n {hammer.format['ReadableField'](column.get(item))}\n </span>\n );\n}\n","import { withNaming } from '@bem-react/classname';\nexport const NAMESPACE = 'chartkit-';\nexport const cn = withNaming({ e: '__', m: '_' });\nexport const block = withNaming({ n: NAMESPACE, e: '__', m: '_' });\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\n className={block('edit-btn')}\n onClick={onClick}\n size={size}\n qa=\"qa:navigation:edit-path\"\n >\n <Icon awesome={'pencil'} />\n </Button>\n );\n}\n","import React from 'react';\nimport cn from 'bem-cn-lite';\n\nimport {Text} from '@gravity-ui/uikit';\n\nimport Icon from '../../components/Icon/Icon';\nimport {Tooltip} from '../Tooltip/Tooltip';\n\nimport './WarningIcon.scss';\n\nconst b = cn('yt-warning-icon');\n\ninterface Props {\n className?: string;\n hoverContent?: React.ReactNode;\n color?: 'warning' | 'danger';\n children?: React.ReactNode;\n}\n\nexport default function WarningIcon(props: Props) {\n const {className, hoverContent, children, color} = props;\n return (\n <span className={b(null, className)}>\n <Tooltip className={b('tooltip')} content={hoverContent}>\n <Icon className={b('icon', {color})} awesome=\"exclamation-triangle\" />\n {children && (\n <Text variant=\"inherit\" color={color}>\n {children}\n </Text>\n )}\n </Tooltip>\n </span>\n );\n}\n","import * 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 0\", clipRule: \"evenodd\" })));\nexport default ChevronRight;\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport cn from 'bem-cn-lite';\nimport {sortableContainer, sortableElement, sortableHandle} from 'react-sortable-hoc';\nimport ReactList from 'react-list';\n\nimport each_ from 'lodash/each';\nimport escapeRegExp_ from 'lodash/escapeRegExp';\nimport filter_ from 'lodash/filter';\nimport map_ from 'lodash/map';\nimport partition_ from 'lodash/partition';\nimport reduce_ from 'lodash/reduce';\n\nimport {TextInput} from '@gravity-ui/uikit';\nimport Icon from '../../components/Icon/Icon';\n\nimport {renderText} from '../../components/templates/utils';\n\nimport './ColumnSelector.scss';\nimport Button from '../Button/Button';\n\nconst b = cn('column-selector');\n\nexport function makeItemsCopy(items) {\n return map_(items, (item) => {\n return {...item};\n });\n}\n\nconst DragHandle = sortableHandle(() => (\n <div className={b('drag-handle')}>\n <Icon face=\"solid\" awesome=\"list\" />\n </div>\n));\n\nconst SortableItem = sortableElement(\n ({item, isSortable, isSelectable, isDisabled, itemRenderer, onCheckBoxChange}) => {\n const active = !isDisabled && !item.disabled;\n const className = b('list-item', {\n selected: item.checked && active && 'yes',\n selectable: isSelectable && active && 'yes',\n disabled: !active && 'yes',\n });\n\n let showAction = true;\n if (item.checked) {\n showAction = 'isDeletable' in item ? item.isDeletable : true;\n }\n\n return (\n <div className={className}>\n {isSortable && item.checked && <DragHandle />}\n <div className={b('list-item-name')}>\n {item.keyColumn && <Icon awesome=\"key\" />}\n {itemRenderer(item)}\n </div>\n {active && showAction && (\n <span\n className={b('list-item-check')}\n onClick={onCheckBoxChange}\n data-item={item.name}\n >\n <Icon awesome=\"check\" />\n </span>\n )}\n {!active && <Icon className={b('list-item-lock')} awesome=\"lock\" />}\n </div>\n );\n },\n);\n\nconst SortableList = sortableContainer(\n ({\n items,\n isSortable,\n isDisabled,\n itemRenderer,\n onCheckBoxChange,\n isSelectable,\n useStaticSize,\n }) => {\n const renderer = (index, key) => {\n const item = items[index];\n return (\n <SortableItem\n key={key}\n index={index}\n item={item}\n disabled={!isSortable}\n isSortable={isSortable}\n isDisabled={isDisabled}\n isSelectable={isSelectable}\n itemRenderer={itemRenderer}\n onCheckBoxChange={onCheckBoxChange}\n />\n );\n };\n // Use 'simple' placement for draggable items because 'uniform' produces bugs when items are dragged outside the viewport\n const type = isSortable ? 'simple' : 'uniform';\n const mods = {'static-size': useStaticSize};\n\n return (\n <div className={b('list', mods)}>\n <ReactList itemRenderer={renderer} length={items.length} type={type} />\n </div>\n );\n },\n);\n\nexport default class ColumnSelector extends Component {\n static itemsProps = PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n checked: PropTypes.bool.isRequired,\n keyColumn: PropTypes.bool,\n caption: PropTypes.string,\n disabled: PropTypes.bool,\n }),\n );\n\n static propTypes = {\n className: PropTypes.string,\n items: ColumnSelector.itemsProps.isRequired,\n showDisabledItems: PropTypes.bool,\n isSortable: PropTypes.bool,\n isSelectable: PropTypes.bool,\n isFilterable: PropTypes.bool,\n showSelectedOnly: PropTypes.bool,\n isHeadless: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n children: PropTypes.node,\n itemRenderer: PropTypes.func,\n };\n\n static defaultProps = {\n itemRenderer: ({name, caption = name}) => renderText(caption, {asHTML: false}),\n isSortable: false,\n isHeadless: false,\n isSelectable: true,\n isFilterable: true,\n showSelectedOnly: false,\n };\n\n constructor(props) {\n const {items, isHeadless, showSelectedOnly} = props;\n super(props);\n\n const state = {\n showSelectedOnly,\n filter: '',\n };\n if (isHeadless) {\n Object.assign(state, {items: makeItemsCopy(items)});\n }\n this.state = state;\n }\n\n get items() {\n return this.props.isHeadless ? this.state.items : this.props.items;\n }\n\n get buttonALLisDisabled() {\n return this.items.every((item) => item.checked);\n }\n\n get buttonNONEisDisabled() {\n return !this.items.some((item) => item.checked);\n }\n\n /*\n Takes items from the proper place (props or state), modifies them and writes them back at the same place.\n */\n withActualItems(func) {\n const {onChange} = this.props;\n // headless widget keeps its state to itself, but calls onChange as a way of notifying caller about changes\n if (this.props.isHeadless) {\n const {items} = func({items: this.state.items || []});\n this.setState({items}, () => {\n onChange({items: [...this.state.items]});\n });\n } else {\n // widget inside modal passes all changes to the modal component where they are put into state\n const {items} = func({items: this.props.items || []});\n onChange({items: [...items]});\n }\n }\n\n toggleItem = (name) => {\n this.withActualItems(({items}) => {\n items = [...items];\n const index = items.findIndex((item) => item.name === name);\n const changedItem = items[index];\n items[index] = {...changedItem, checked: !changedItem.checked};\n\n return {items};\n });\n };\n\n selectAllItems = () => {\n this.withActualItems(({items}) => {\n const visibleMap = this.getVisibleItemsMap();\n items = [...items];\n each_(items, (item, index) => {\n if (!visibleMap[item.name]) {\n return;\n }\n if (!item.checked && !item.disabled) {\n items[index] = {...item, checked: true};\n }\n });\n\n return {items};\n });\n };\n\n deselectAllItems = () => {\n this.withActualItems(({items}) => {\n const visibleMap = this.getVisibleItemsMap();\n items = [...items];\n each_(items, (item, index) => {\n if (!visibleMap[item.name]) {\n return;\n }\n if (item.checked && !item.disabled && (item.isDeletable ?? true)) {\n items[index] = {...item, checked: false};\n }\n });\n\n return {items};\n });\n };\n\n invertItems = () => {\n this.withActualItems(({items}) => {\n const visibleItems = this.getVisibleItemsMap();\n items = [...items];\n each_(items, (item, index) => {\n if (!visibleItems[item.name]) {\n return;\n }\n if (!item.disabled) {\n items[index] = {...item, checked: !item.checked};\n }\n });\n\n return {items};\n });\n };\n\n _handleCheckBoxChange = (event) => {\n this.toggleItem(event.currentTarget.getAttribute('data-item'));\n };\n\n _handleSortEnd = ({oldIndex, newIndex}) => {\n if (oldIndex === newIndex) {\n return;\n }\n\n this.withActualItems(({items}) => {\n items = [...items];\n\n const {items: visibleItems} = this.getVisibleItems();\n const fromIndex = items.findIndex((item) => item.name === visibleItems[oldIndex].name);\n const toIndex = items.findIndex((item) => item.name === visibleItems[newIndex].name);\n\n const [removed] = items.splice(fromIndex, 1);\n items.splice(toIndex, 0, removed);\n\n return {items};\n });\n };\n\n _handleDefaultSort = () => {\n this.withActualItems(({items}) => {\n return {\n items: items.sort((a, b) => {\n const aCaption = a.caption || a.name;\n const bCaption = b.caption || b.name;\n\n return aCaption.localeCompare(bCaption);\n }),\n };\n });\n };\n\n _toggleShownItems = () => {\n this.setState((prevState) => ({\n showSelectedOnly: !prevState.showSelectedOnly,\n }));\n };\n\n _changeFilter = (filter) => {\n this.setState({filter});\n };\n\n renderSearchBox() {\n return (\n <TextInput\n placeholder=\"Search...\"\n onUpdate={this._changeFilter}\n value={this.state.filter}\n hasClear={true}\n />\n );\n }\n\n renderControls() {\n const {isFilterable, isSelectable, isSortable, isHeadless} = this.props;\n const btnProps = {\n size: 'm',\n className: b('controls-item'),\n };\n\n return (\n <div className={b('controls')}>\n {isFilterable && this.renderSearchBox()}\n {isHeadless && (\n <Button {...btnProps} onClick={this._toggleShownItems}>\n Selected &nbsp;\n <span className=\"elements-secondary-text\">\n {filter_(this.items, (item) => item.checked).length}\n </span>\n </Button>\n )}\n {isSelectable && (\n <Button\n {...btnProps}\n disabled={this.buttonALLisDisabled}\n onClick={this.selectAllItems}\n >\n Add all\n </Button>\n )}\n {isSelectable && (\n <Button {...btnProps} onClick={this.invertItems}>\n Invert list\n </Button>\n )}\n {!isSelectable && (\n <Button\n {...btnProps}\n disabled={this.buttonNONEisDisabled}\n onClick={this.deselectAllItems}\n >\n Remove all\n </Button>\n )}\n {isSortable && (\n <Button {...btnProps} onClick={this._handleDefaultSort}>\n Default sort\n </Button>\n )}\n </div>\n );\n }\n\n filterItemsByName(items) {\n const re = new RegExp(escapeRegExp_(this.state.filter), 'i');\n return filter_(items, (item) => re.test(item.name));\n }\n\n filterItems(items) {\n const {showDisabledItems} = this.props;\n items = showDisabledItems ? items : filter_(items, (item) => !item.disabled);\n\n const visibleItems = this.filterItemsByName(items);\n return this.state.showSelectedOnly\n ? filter_(visibleItems, (item) => item.checked)\n : visibleItems;\n }\n\n getVisibleItems() {\n const toSplit = this.filterItems(this.items);\n const [keyItems, items] = partition_(toSplit, (item) => item.keyColumn);\n return {items, keyItems};\n }\n\n getVisibleItemsMap() {\n return reduce_(\n this.filterItems(this.items),\n (acc, item) => {\n acc[item.name] = item;\n return acc;\n },\n {},\n );\n }\n\n renderList() {\n const {isSortable, isSelectable, itemRenderer, children, isHeadless} = this.props;\n\n const {items, keyItems} = this.getVisibleItems();\n\n const className = b(\n 'content',\n {\n headless: isHeadless ? undefined : 'no',\n empty: items.length ? undefined : 'yes',\n },\n 'pretty-scroll',\n );\n\n return (\n <div className={className}>\n {keyItems.length > 0 && (\n <React.Fragment>\n <SortableList\n lockAxis=\"y\"\n isDisabled={false}\n isSortable={false}\n isSelectable={isSelectable}\n items={keyItems}\n itemRenderer={itemRenderer}\n helperClass={b('list-item', {helper: 'yes'})}\n onCheckBoxChange={this._handleCheckBoxChange}\n />\n {items.length > 0 && <div className={b('separator')} />}\n </React.Fragment>\n )}\n {items.length > 0 && (\n <SortableList\n items={items}\n isSelectable={isSelectable}\n isSortable={isSortable}\n itemRenderer={itemRenderer}\n lockAxis=\"y\"\n helperClass={b('list-item', {helper: 'yes'})}\n onSortEnd={this._handleSortEnd}\n onCheckBoxChange={this._handleCheckBoxChange}\n useDragHandle\n />\n )}\n {!keyItems.length && !items.length && children}\n </div>\n );\n }\n\n render() {\n const {isHeadless, isSortable, className} = this.props;\n const classNames = b(\n {\n headless: isHeadless ? 'yes' : undefined,\n sortable: isSortable ? undefined : 'no',\n },\n className,\n );\n return (\n <div className={classNames}>\n {this.renderControls()}\n {this.renderList()}\n </div>\n );\n }\n}\n","import {TRASH_PATH} from '../../constants/navigation';\n\nexport function isTrashNode(path?: string) {\n return path === TRASH_PATH;\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","'use client';\nimport { __rest } from \"tslib\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from 'react';\nimport { useActionHandlers } from '../../hooks';\nimport { Box } from '../layout';\nimport { block } from '../utils/cn';\nimport './Card.css';\nconst b = block('card');\nexport const Card = React.forwardRef(function Card(props, ref) {\n const { type = 'container', theme, view, size = 'm', children, className, onClick, disabled, selected } = props, restProps = __rest(props, [\"type\", \"theme\", \"view\", \"size\", \"children\", \"className\", \"onClick\", \"disabled\", \"selected\"]);\n const isTypeAction = type === 'action';\n const isTypeSelection = type === 'selection';\n const isTypeContainer = type === 'container';\n /* Clickable card — only with type 'action' or 'selection' and not selected or disabled */\n const hasAction = isTypeAction || isTypeSelection;\n const isClickable = hasAction && Boolean(onClick) && !disabled;\n /* Theme only with type 'container' */\n const defaultTheme = isTypeContainer ? 'normal' : undefined;\n /* View only with type 'container' and 'selection' */\n const defaultView = isTypeContainer || isTypeSelection ? 'outlined' : undefined;\n const handleClick = isClickable ? onClick : undefined;\n const { onKeyDown } = useActionHandlers(onClick);\n return (_jsx(Box, Object.assign({ ref: ref, role: isClickable ? 'button' : undefined, className: b({\n theme: theme || defaultTheme,\n view: view || defaultView,\n type,\n selected,\n size,\n disabled,\n clickable: isClickable,\n }, className), onClick: handleClick, onKeyDown: isClickable ? onKeyDown : undefined, tabIndex: isClickable ? 0 : undefined }, restProps, { children: children })));\n});\n","import React, {Component} from 'react';\nimport PropTypes from 'prop-types';\nimport block from 'bem-cn-lite';\n\nimport map_ from 'lodash/map';\n\nimport {Button, ButtonProps, DropdownMenu} from '@gravity-ui/uikit';\n\nimport Icon from '../Icon/Icon';\nimport Hotkey from '../../components/Hotkey/Hotkey';\n\nimport './Favourites.scss';\n\nconst b = block('favourites');\n\ninterface Props {\n className?: string;\n isActive: boolean;\n items: Array<FavouritesItem>;\n onItemClick: (item: FavouritesItem) => void;\n toggleDisabled?: boolean;\n onToggle: () => void;\n theme?: 'clear';\n}\n\nexport interface FavouritesItem {\n path: string;\n}\n\ninterface State {\n isActive: boolean;\n}\n\nexport default class Favourites extends Component<Props, State> {\n static itemType = PropTypes.shape({\n path: PropTypes.string,\n });\n\n static propTypes = {\n isActive: PropTypes.bool.isRequired,\n items: PropTypes.arrayOf(Favourites.itemType),\n onItemClick: PropTypes.func,\n toggleDisabled: PropTypes.bool,\n onToggle: PropTypes.func,\n className: PropTypes.string,\n theme: PropTypes.string,\n };\n\n static getDerivedStateFromProps(props: Props, state: State) {\n if (props.isActive !== state.isActive) {\n return {isActive: props.isActive};\n }\n return null;\n }\n\n state = {\n isActive: this.props.isActive,\n };\n\n toggleActive = () => {\n const {onToggle} = this.props;\n\n this.setState((prevState) => ({isActive: !prevState.isActive}));\n onToggle();\n };\n\n onItemClick = (item: FavouritesItem) => {\n const {onItemClick} = this.props;\n onItemClick(item);\n };\n\n renderDropDownMenu() {\n const {items} = this.props;\n\n const dropItems = map_(items, (item) => {\n return {\n text: item.path,\n action: () => this.onItemClick(item),\n };\n });\n if (items.length === 0) {\n dropItems.push({\n action: () => {},\n text: 'No favourites',\n });\n }\n\n const switcher = this.renderButton({\n view: 'normal',\n size: 'm',\n pin: 'brick-round',\n title: 'View favourites',\n children: <Icon awesome=\"angle-down\" />,\n });\n\n return (\n <DropdownMenu\n popupProps={{\n className: b('popup', {empty: items.length === 0}),\n }}\n items={dropItems}\n switcher={switcher}\n />\n );\n }\n\n renderHotkey() {\n return <Hotkey settings={[{keys: 'f', handler: this.toggleActive, scope: 'all'}]} />;\n }\n\n renderButton(buttonProps: ButtonProps & {disabled?: boolean}) {\n const {theme} = this.props;\n const themeProps = !theme ? {} : {view: 'outlined' as const};\n return <Button {...buttonProps} {...themeProps} />;\n }\n\n render() {\n const {toggleDisabled, className, theme} = this.props;\n const {isActive} = this.state;\n\n return (\n <div className={b(null, className)}>\n <div className={b('star-btn', {clear: theme === 'clear'})}>\n {this.renderButton({\n view: 'outlined-info',\n selected: isActive,\n size: 'm',\n pin: theme === 'clear' ? 'round-brick' : 'round-clear',\n title: 'Add to favourites [F]',\n onClick: this.toggleActive,\n disabled: toggleDisabled,\n children: <Icon awesome={isActive ? 'star-alt' : 'star'} />,\n })}\n </div>\n {this.renderDropDownMenu()}\n {this.renderHotkey()}\n </div>\n );\n }\n}\n","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","export const pathToFileName = (path: string) => {\n return path.replace(/\\/+/g, '_');\n};\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';\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 * as React from 'react';\nconst ArrowUpRightFromSquare = (props) => (React.createElement(\"svg\", Object.assign({ xmlns: \"http://www.w3.org/2000/svg\", width: 16, height: 16, fill: \"none\", viewBox: \"0 0 16 16\" }, props),\n React.createElement(\"path\", { fill: \"currentColor\", fillRule: \"evenodd\", d: \"M10 1.5A.75.75 0 0 0 10 3h1.94L6.97 7.97a.75.75 0 0 0 1.06 1.06L13 4.06V6a.75.75 0 0 0 1.5 0V2.25a.75.75 0 0 0-.75-.75zM7.5 3.25a.75.75 0 0 0-.75-.75H4.5a3 3 0 0 0-3 3v6a3 3 0 0 0 3 3h6a3 3 0 0 0 3-3V9.25a.75.75 0 0 0-1.5 0v2.25a1.5 1.5 0 0 1-1.5 1.5h-6A1.5 1.5 0 0 1 3 11.5v-6A1.5 1.5 0 0 1 4.5 4h2.25a.75.75 0 0 0 .75-.75\", clipRule: \"evenodd\" })));\nexport default ArrowUpRightFromSquare;\n","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, {Component} from 'react';\nimport block from 'bem-cn-lite';\n\nimport ErrorBoundary from '../../components/ErrorBoundary/ErrorBoundary';\n\nimport './CollapsibleSection.scss';\nimport Icon from '../../components/Icon/Icon';\n\nconst b = block('collapsible-section');\nconst headingCN = block('elements-heading');\n\ntype PropsStateLess = CollapsibleSectionProps & {\n onToggle: Required<CollapsibleSectionProps>['onToggle'];\n};\n\nexport class CollapsibleSectionStateLess extends Component<PropsStateLess> {\n static defaultProps = {\n size: 'm',\n collapsed: false,\n marginDirection: 'top',\n };\n\n toggle = () => {\n const {onToggle} = this.props;\n\n onToggle(!this.props.collapsed);\n };\n\n render() {\n const {\n name,\n children,\n size,\n overview,\n className,\n headingClassName,\n collapsed,\n marginDirection,\n togglerRightPadding,\n } = this.props;\n\n return (\n <ErrorBoundary>\n <div className={b({margin: marginDirection}, className)}>\n <div className={headingCN({size, overview: 'yes'}, headingClassName)}>\n <span\n className={headingCN(\n 'heading',\n {\n clickable: 'yes',\n },\n b('title'),\n )}\n onClick={this.toggle}\n >\n {name}\n <a>\n <Icon\n className={b('toggler', {'right-padding': togglerRightPadding})}\n awesome={collapsed ? 'angle-down' : 'angle-up'}\n />\n </a>\n </span>\n {overview}\n </div>\n\n {!collapsed && <ErrorBoundary>{children}</ErrorBoundary>}\n </div>\n </ErrorBoundary>\n );\n }\n}\n\nexport interface CollapsibleSectionProps {\n className?: string;\n headingClassName?: string;\n name: React.ReactNode;\n collapsed?: boolean;\n onToggle?: (value: boolean) => void;\n\n size?: 'unset' | 'xs' | 's' | 'ss' | 'ns' | 'n' | 'm' | 'l';\n children?: React.ReactNode;\n overview?: React.ReactNode;\n\n marginDirection?: 'top' | 'bottom';\n\n togglerRightPadding?: 'small';\n}\n\nexport default function CollapsibleSection(props: CollapsibleSectionProps) {\n const {onToggle} = props;\n const [collapsed, setCollapsed] = React.useState(props.collapsed);\n\n const onChange = React.useCallback(\n (value: boolean) => {\n setCollapsed(value);\n if (onToggle) {\n onToggle(value);\n }\n },\n [setCollapsed, onToggle],\n );\n\n return <CollapsibleSectionStateLess {...props} onToggle={onChange} collapsed={collapsed} />;\n}\n"],"names":["props","_jsxs","_objectSpread","xmlns","fill","viewBox","children","clipPath","_jsx","d","stroke","strokeLinecap","strokeLinejoin","strokeWidth","id","MapNodeIcon","_ref","_UIFactory$getNavigat","node","item","ypath","getAttributes","iconType","type","dynamic","icon","UIFactory","getNavigationMapNodeSettings","renderNodeIcon","isTrashNode","path","isLinkToTrashNode","targetPath","Icon","awesome","getIconNameForType","targetPathBroken","title","hammer","format","sorted","treat_as_queue_consumer","GravityIcon","data","QueueConsumerIcon","treat_as_queue_producer","QueueProducerIcon","className","ROWS_PER_PAGE","fillRule","clipRule","AlertContext","useAlertContext","context","Error","AlertAction","view","Button","Object","assign","undefined","bAlert","AlertContextProvider","layout","Provider","value","typeToIcon","danger","filled","width","height","outlined","info","CircleInfo","success","CircleCheck","warning","TriangleExclamation","utility","Thunderbolt","normal","addComponentKeysets","en","Alert","theme","message","corners","style","onClose","align","qa","Card","spacing","py","px","Flex","gap","alignItems","direction","grow","justifyContent","Title","text","Array","isArray","actions","Actions","items","onClick","extraProps","i18n","I","Xmark","size","colorText","color","iconByTheme","Text","variant","minContent","wrap","map","handler","i","Action","fetchFromTabletErrorsApi","action","cluster","params","cancelToken","axios","post","concat","Set","opacity","cx","cy","rx","ry","strokeDasharray","b","block","ColumnSelectorModal","_React$Component","_this","_classCallCheck","_len","arguments","length","args","_key","_callSuper","state","srcItems","makeItemsCopy","itemsOrder","_getItemsOrder","_handleCONFIRMButtonClick","onConfirm","_handleCANCELButtonClick","order","setState","_getOrderedItems","onCancel","onSourceChange","newItems","newItemsMap","reduce_","acc","name","unchanged","changed","forEach_","newItem","checked","keyColumn","push","preparedItems","calculateSrcItems","onDestinationChange","_ref2","_inherits","_createClass","key","prevProps","_this$props","this","map_","sort","a","indexOf","showDisabledItems","isHeadless","isFilterable","onChange","isSelectable","isSortable","showSelectedOnly","_ref3","description","ColumnSelector","NoContentImage","_this$props2","isVisible","entity","rest","_objectWithoutProperties","_excluded","_this$state","headingCN","selectorProps","_getSelectorProps","sortableSelectorProps","_getSortableSelectorProps","selectedItemsCount","disabled","left","renderColumnSelector","_this$props3","Modal","borderless","visible","confirmText","content","renderContent","contentClassName","React","defaultProps","connect","openAttributesModal","_ref$getPathProps","getPathProps","exactPath","attribute","attributes","_ref$withTooltip","withTooltip","_ref$tooltipProps","tooltipProps","placement","AttributesButton","pathProps","cn","Dropdown","_Component","popupVisible","anchor","toggle","prevState","open","close","button","trigger","actionProps","onMouseEnter","onMouseLeave","template","_this$props$template","renderer","templates","get","__default__","call","popup","directions","Popup","anchorRef","hasArrow","renderTemplate","ref","renderButton","renderPopup","Component","zIndexGroupLevel","prepareRoleListValue","roles","otherMembers","current","toAdd","toRemove","unrecognized","isUnrecognized","isRequested","isApproved","isDepriving","currentArr","prepareItemOfCurrent","otherArr","frozen","itemClassName","role","roleListValueToSubjectList","_toConsumableArray","manyListDataItemToSubjectList","manyListDataItem","filter_","removed","_ref4","extractChangedSubjects","added","filter","_ref5","_ref6","user","group","_ref7","_ref8","reShortName","makeRegexpFromSettings","uiSettings","reShortNameFromAddress","reTabletNodeShortName","reShortNameFromTabletNodeAddress","Host","_ref$address","address","prefix","copyBtnClassName","useText","asTabletNode","inlineMargins","host","re","_res$groups","res","exec","groups","shortname","suffix","Boolean","join","calcShortNameByRegExp","useSelector","getCluster","hidden","Tooltip","Link","url","routed","ClipboardButton","DialogError","YTErrorBlock","makeErrorFields","errors","compact_","error","index","extras","FORM_ERROR","makeFormSubmitError","validationErrors","_defineProperty","importYTDFDialog","YTDFDialog","withLazyLoading","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_context","prev","next","t0","sent","YTDialog","abrupt","stop","_React$useState","_React$useState2","_slicedToArray","mounted","setMounted","_callee2","_context2","RoleListControl","EditableList","_callee3","_context3","TabFieldVertical","_callee4","_context4","getHistogram","histogram","createGetQuartiles","createSelector","stat","quartiles","createGetPDF","pdf","createGetECDF","ecdf","steps","unshift","x","min","y","bucketNumber","bucketSize","HistogramChart","dataName","lineOnly","yagrData","xFormat","formatLib","Bytes","Number","_step","buckets","timeline","NaN","_iterator","_createForOfIteratorHelper","s","n","done","getX","getY","err","e","f","graphs","getSerieColor","step","getLineOnlyData","lineData","j","_buckets$i","bestX","itemX","calcBestY","Math","scale","renderOptions","getColumnData","libraryConfig","axes","values","_d","side","grid","show","y1","scales","max","tooltip","render","tooltipData","_first$rows","_first$rows2","_second$rows","_renderDefaultTooltip","_tooltipData$scales","first","second","columnValue","rows","originalValue","lineValue","colValue","colX0","colX1","lineX","lp","renderDefaultTooltip","digits","sources","YagrChartKit","v","right","ly","lx","Histogram","activeHistogram","handleHistogramChange","histogramItems","isDataGood","isDatailedLine","setDetailed","Select","onUpdate","options","keys_","Checkbox","q25","q50","q75","quartilesProps","PropTypes","pdfProps","valueMax","valueMin","ecdfProps","getQuartiles","getPDF","getECDF","getIsDataGood","pdfData","ecdfData","CHARTKIT_ERROR_CODE","NO_DATA","INVALID_DATA","UNKNOWN","UNKNOWN_PLUGIN","TOO_MANY_LINES","ChartKitError","constructor","originalError","code","super","isCustomError","stack","QueryWidgetLazy","Loader","centered","useQueryWidgetSidePanel","useSidePanel","getOnlyFolders","suggestions","child","showErrorInModal","_getCorrectInnerError","ErrorMessage","innerErrors","correctErrorCodes","values_","NetworkCode","find_","some_","getCorrectInnerError","inner_errors","prepareErrorMessage","SHOW_ERROR","hideError","HIDE_ERROR","openEditingPopup","objectPath","multipleMode","closeEditingPopup","withScope","scope","ResComponent","useHotkeysScope","displayName","getDisplayName","PathEditorModal","handleBlur","onBlur","_handleBlur","handleFocus","event","onFocus","_handleFocus","handleChange","newPath","_handleChange","handleApply","onApply","_handleApply","setPath","editingPath","inProcess","placeholder","showError","errorMessage","PathEditor","customFilter","defaultPath","showErrors","autoFocus","hasClear","modalTitle","onConfirmButtonClick","onCancelButtonClick","isConfirmDisabled","loading","compose","SET_PATH","requests","CancelHelper","toaster","Toaster","copyObjectIntoDirectory","from","to","parts","split","yt","copy","parameters","source_path","preparePath","destination_path","prepareDestinationPath","cancellation","saveCancelToken","copySingleObject","charAt","exists","then","exist","copyObjectWithRename","CopyObjectModal","preserve_account","recursive","handleConfirmButtonClick","copyPath","doCopy","handleCancelButtonClick","abortRequests","resetOptions","CLOSE_COPY_OBJECT_POPUP","copying","onUpdateRecursiveCopy","onUpdatePreserveAccount","toPath","_this2","copyObject","updateView","_this$props4","mapDispatchToProps","copyingPath","onSuccess","dispatch","COPY_OBJECT","REQUEST","Promise","resolve","startTransaction","timeout","copyRequests","command","transaction_id","titleUnquoted","wrapBatchPromise","executeBatchWithRetries","YTApiId","navigationCopy","errorTitle","saveCancelSourceCb","commitTransaction","abortTransaction","reject","copyObjects","SUCCESS","add","autoHiding","CANCELLED","FAILURE","removeAllRequests","_navigation$modals$co","navigation","modals","CreateDirectoryModal","onRecursiveUpdate","_this$props$clearCrea","clearCreateDirectoryError","creatingPath","createDirectory","CLOSE_CREATE_DIRECTORY_POPUP","creating","CREATE_DIRECTORY","create","CREATE_MESSAGE","_state$navigation$mod","moveObjectIntoDirectory","move","moveSingleObject","moveObjectWithRename","MoveObjectModal","movedPath","doMove","CLOSE_MOVE_OBJECT_POPUP","renaming","moveObject","afterMoveStrategy","updatePath","destinationPath","MOVE_OBJECT","moveRequests","navigationMove","moveObjects","entityId","output_format","$value","$attributes","encode_utf8","rumLogError","resolveEntityPath","JSON","parse","result","_items$","getPath","_navigation$modals$mo","getNextObjectName","initialPath","INITIAL_STEP","checkPathExists","isExists","showErrorPopup","findCorrectObjectName","inTrash","startsWith","restoreObject","restorePath","getState","RESTORE_OBJECT","EXIST","correctRestorePath","OPEN_RESTORE_POPUP","INCORRECT_PATH","openAction","errorAction","RestoreObjectModal","restoredPath","CLOSE_RESTORE_POPUP","restoring","_navigation$modals$re","prepareRestorePath","lastChar","SUPPRESS_REDIRECT","slice","openDeleteModal","checkIsTrash","OPEN_DELETE_OBJECT_POPUP","getInfo","realPath","parsedRealPath","stringify","getKey","all","ytApiV3Id","navigationGetPathInfo","createDestinationPath","account","login","moment","unix","DeleteObjectModal","handleDeleteClick","deleteObject","deleteObjects","getRealPath","getRealPaths","loadingRealPath","errorRealPath","renderLoader","renderError","renderMultipleModeContent","errorData","errorDataRealPath","errorContent","_this$props5","permanently","togglePermanentlyDelete","Label","_this$props6","multipleInfo","ErrorBoundary","multiple","resourceUsage","_index","unmergedRows","diskSpace","nodeCount","NO_VALUE","renderPermanentlyCheckbox","_this$props7","MetaTable","buildItems","_this$props8","closeDeleteModal","helpLinkUrl","docsUrls","helpLink","HelpLink","confirmTheme","footerContent","LOAD_REAL_PATH","includes","navigationGetPath","console","label","_navigation$modals$de2","transaction","DELETE_OBJECT","CLOSE_DELETE_OBJECT_POPUP","_dispatch","_getState","global","_navigation$modals$de","remove","set","input_format","deleteCurrentObject","currentPath","getRawPath","realPathDecoded","decodeEscapedAbsPath","navigateParent","_getState3","_navigation$modals$de3","navigationDelete","permanentlyDeleteObjects","setAttributesRequests","input","navigationMoveToTrashRestorePath","navigationMoveToTrash","moveObjectsIntoTrash","responses","output","reverse","TOGGLE_PERMANENTLY_DELETE","AclTabParams","IdmObjectType","PATH","rumType","RumMeasureTypes","NAVIGATION_TAB_ACL","NavigationAcl","ACCESS_CONTROL_OBJECT","NAVIGATION_TAB_ACL_ACCESS","AccessContentAcl","createACLTabComponent","idmKind","mapStateToProps","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","unipika","utils","_loadStaticTable","requestOutputFormat","setup","useZeroRangeForPreload","stringLimit","moveBackward","requestedPageSize","defaultTableColumnLimit","columns","offsetValue","useYqlTypes","decodedColumns","outputFormat","apiId","getCellSize","getTransaction","getMoveOffsetBackward","getRequestedPageSize","getDefaultTableColumnLimit","getColumns","getNextOffset","isYqlTypesEnabled","decodeNameField","getRequestOutputFormat","prepareRequest","table_reader","workload_descriptor","category","dump_error_into_response","omit_inaccessible_columns","relativePath","getIsDynamic","LOAD_TYPE","PRELOAD","tableReadPreload","tableRead","fetch","readStaticTable","reverseRows","apply","loadTableRows","transformResponse","parsedData","rawResponse","headers","getIsStrict","loadPromise","keyColumns","getKeyColumns","_getNextOffset","offset","descending","orderBySupported","offsetColumns","limit","isEmpty_","isSorted","getValue","preparedOffset","replace","part","trim","ranges","lower_limit","tablet_index","row_index","upper_limit","allColumns","Columns","getSchemaColumns","dynTableCheckPerm","checkPermission","permission","permissions","keyColumnsNames","keyBy_","_reduce_","availableColumns","omittedColumns","has_","deniedKeyColumns","decode","query","Query","prepareQuery","dynTableSelectRowsPreload","selectRows","parseErrorFromResponse","getParsedError","_prepareRows","prepareRows","yqlTypes","getVisibleColumns","getOmittedColumns","getDeniedKeyColumns","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","prepareKey","getColumnsValues","SET_OFFSET","SET_COLUMNS","closeColumnSelectorModal","CLOSE_COLUMN_SELECTOR_MODAL","updateColumns","column","columnsOrder","getColumnsOrder","storeAllColumns","SET_COLUMNS_ORDER","setColumnsOrder","SET_TABLE_COLUMNS_PRESET_HASH","toggleFullScreen","mergeScreen","TOGGLE_FULL_SCREEN","FilePicker","inputRef","onLinkClick","click","target","files","ClickableText","isDropable","onFile","isEmpty","_useFileDragDrop","_useState","useState","_useState2","isDragging","setIsDragging","onDragOver","useCallback","preventDefault","stopPropagation","onDragEnter","onDragLeave","onDrop","dataTransfer","useFileDragDrop","dropable","empty","dragging","_progress$value","_event$total","total","_event$loaded","loaded","progress","calcProgressProps","Progress","WRITE_ATTRIBUTES","json","enable_type_conversion","yson","dsv","enable_string_to_all_conversion","schemaful_dsv","xlsx","getFileTypes","payload","fileTypes","getConfigUploadTable","uploadTableExcelBaseUrl","UploadManager","file","fileType","inProgress","append","firstRowAsNames","secondRowAsTypes","showOverwriteConfirmation","cancelHelper","onReset","cancelUpload","lastDotIndex","lastIndexOf","extStr","substr","find","fileError","checkFile","renderConfirm","renderClose","handleClose","onUploadProgress","onConfirmImpl","setOverwriteConfirmationVisible","proxy","externalProxy","uploadConfig","onStartUpload","txId","writeTable","uploadTableUseLocalmode","location","getWriteAttributes","removeAllAndSave","onStopUpload","onXlsxUpload","_this$state2","FileDropZone","renderFileContent","renderSettings","renderProgress","_this$typeSpecificFie","typeSpecificFields","fields","initials","onAdd","modal","initialValues","caption","hideFilter","_this3","_this$state3","docsUrl","FileUploadProgress","uploadTableMaxSize","schema","withColumns","isCancel","_error$response","response","_this4","_this$state4","readyUrl","uploadUrl","_this4$state","start_row","URLSearchParams","String","header","types","formData","FormData","withCredentials","withXSRFToken","xsrfCookieName","getXsrfCookieName","xsrfHeaderName","generateNextToken","_this5","handleShow","renderFooterContent","renderCustomConfirm","renderCustomCancel","renderOverwriteConfirmationDialog","connector","getSchema","_getCurrentClusterCon","getCurrentClusterConfig","withVisible","DYN_TABLES_ALLOWED_STATES_OF_ACTION","mount","unmounted","unmount","freeze","unfreeze","DYN_TABLES_ALLOWED_ACTIONS_BY_STATE","mixed","showDynTablesStateModalByPaths","paths","DYN_TABLES_STATE_MODAL_PARTIAL","showModal","showDynTablesStateModalByNodes","selectedNodes","allowedFrom","tabletState","dynTablesChangeState","wrapApiPromiseByToaster","navigationDynTableState","toasterName","successContent","batchType","skipSuccessToast","waitWhileThereIsTransient","capitalize_","delayed","navigationGetTabletState","results","toRecheck","DynamicActions","useDispatch","Fragment","StaticActions","DownloadManager","table","mountUnmountTable","getMetrics","countEvent","ytApiV3","RemountAlert","attributesWithTypes","getAttributesWithTypes","pending","setPending","handleOnRemount","ytApiV4","remountTable","_ypath$getValues","getValues","_ypath$getValues2","remountNeededTabletCount","tabletCount","showDiffInfo","diffInfo","mediumList","tableType","getTableType","remountNeeded","onEditEnableReplicatedTableTracker","tabletErrorCount","getTabletErrorsBackgroundCount","useMemo","makeMetaItems","CollapsibleSection","UI_COLLAPSIBLE_SIZE","ReplicatedTableSettingsButton","setVisible","toggleVisibility","ReplicatedTableSettingsDialog","_React$useState3","_React$useState4","setError","form","_form$getState$values","auto_replica_tracker","headerProps","replica_cluster","replica_path","getNavigationReplicatedTableLoadingStatus","store","replicatedTable","calculateLoadingStatus","getReplicatedTableReplicas","replicas","getAllowEnableReplicatedTracker","getReplicatedTableReplicasMap","error_count","getNumberDeprecated","cluster_name","replicated_table_tracker_enabled","getBoolean","replication_lag_time","tableSets","default","ReplicatedTable","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","renderErrors","renderAsReadableField","renderState","automatic_mode_switch","renderAutomaticModeSwitch","bind","renderAsTimeDuration","computeKey","hasActions","CypressNodeTypes","CHAOS_REPLICATED_TABLE","LoadDataHandler","TableMeta","StickyContainer","stickyTopClassName","Toolbar","itemsToWrap","TableActions","ElementsTable","tableSettings","columnName","replicaLink","Page","NAVIGATION","StatusBulb","enableTableTracker","flag","ReplicatedTableConnected","_getReplicatedTableDa","getReplicatedTableData","allowEnableReplicatedTracker","_ypath$getValues3","_ypath$getValues4","ReplicatedTableWithRum","useDisableMaxContentWidth","NAVIGATION_CONTENT_REPLICATED_TABLE","LinkConnected","broken","main","getDownloadPath","cypressPath","makeDirectDownloadPath","encodeURIComponent","getIsEmpty","getIsTooBig","MAX_FILE_SIZE","getNavigationFileLoadingStatus","NavigationExtraActions","getType","getNavigationPathAttributes","_Fragment","renderNavigationExtraActions","messageBlock","codeBlock","renderMeta","compression","erasureReplication","downloadPath","href","renderTooBigInfo","isTooBig","loadFile","LOAD_FILE","readFile","FileConnected","_state$navigation$con","getEffectiveMode","useEffect","initialLoading","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","saveColumnPreset","hash","openInNewTab","pin","SavePresetButton","getAllColumns","ColumnsPresetButton","getColumnsPresetHash","actionStyle","marginRight","openColumnSelectorModal","OPEN_COLUMN_SELECTOR_MODAL","isStrict","getSchemaStrict","allowPickColumns","showAllColumns","allowUserColumnPresets","getConfigData","face","Secondary","methodMap","nativeAPI","document","unprefixedMethods","returnValue","methodList","exitFullscreenMethod","entries","eventNameMap","change","fullscreenchange","fullscreenerror","screenfull","element","documentElement","onFullScreenEntered","off","on","returnPromise","requestFullscreen","catch","exit","isFullscreen","onFullScreenExit","exitFullscreen","onchange","callback","onerror","eventName","addEventListener","removeEventListener","raw","defineProperties","fullscreenElement","enumerable","isEnabled","fullscreenEnabled","FullScreen","_ref$enabled","enabled","_ref$onChange","container","useRef","isFullScreenAllowed","changePageSize","pageSize","CHANGE_PAGE_SIZE","changeCellSize","cellSize","CHANGE_CELL_SIZE","setTableDisplayRawStrings","getPageSize","allowRawStrings","stringLimitProps","cellSizeRadioButtonItems","evt","pageSizeProps","pageSizeRadioButtonItems","RadioButton","xmlnsXlink","mixBlendMode","xlinkHref","transform","getNavigationPathAttributesLoadState","LOADING_STATUS","LOADED","basePath","getJupyterBasePath","Logo","moveOffset","prevOffsetValue","getOffsetValue","MOVE_OFFSET","openOffsetSelectorModal","OPEN_OFFSET_SELECTOR_MODAL","renderInput","onEndEditing","rowCount","Filter","iconLeft","RangeInputPicker","onOutsideClick","onAfterUpdate","onSubmit","maxValue","infoPointsCount","renderPlaceholder","handleStartEditing","progressWidth","getProgressWidth","getRowCount","editing","changeEditing","edit","OffsetSelectorButton","moveOffsetToStart","moveOffsetToLeft","getYqlTypes","getBottomBoundKey","moveOffsetToRight","getUpperBoundKey","moveOffsetToEnd","isPaginationDisabled","getIsPaginationDisabled","isTableEndReached","getIsTableEndReached","Pagination","hotkeyHandler","hotkeyScope","hotkey","previous","last","YQLKitButton","_UIFactory$yqlWidgetS","yqlWidgetSetup","getNavigationSqlService","getSettingsData","isDeveloper","isAdmin","isQtKitEnabled","isYqlKitEnabled","hasYqlWidget","useNavigationSidePanelMode","panelMode","sidePanelMode","setPanelMode","setNavigationSidePanelMode","OpenQueryButtonsContent","_useNavigationSidePan","_useSidePanel","renderWidget","openWidget","closeWidget","widgetContent","createQueryFromTablePath","QueryEngine","YQL","OpenQueryButtons","autoOpen","_useNavigationSidePan2","onOpenYqlKit","_useSelector","allowQtAutoOpen","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","attrs","getNavigationAttributesEditorStaticTables","getNavigationAttributesEditorDynamicTables","getNavigationAttributesEditorMapNodes","EDITABLE_ATTRIBUTES","showNavigationAttributesEditor","attributesEditorGetAttrs","getBatchError","join_","EDIT_MARKER","makeUiMarker","EDIT_MERGE_MARKER","navigationSetNodeAttributes","generalAttrs","storageAttrs","runMerge","warn","in_memory_mode","tablet_cell_bundle","restGeneralAttrs","newAttrs","isDynTable","prepareSetCommandForBatch","attributesEditorSet","prepareMergeParams","spec","input_table_paths","output_table_path","force_transform","promises","merge","opId","AppStoreProvider","OperationShortInfo","output_attribute_name","successTitle","autoHide","attributesEditorMerge","showTableEraseModal","TABLE_ERASE_MODAL_PARTIAL","runTableErase","combine_chunks","range","isNaN","erase","table_path","Node","parsedPath","parsedPathError","pathState","recursiveResourceUsage","dataWeight","sizePerMedium","chunks","nodes","tabletStaticMemory","tablets","masterMemory","locks","modified","created","linkParsedPath","linkPathState","targetPathState","chunkRows","contentMode","prepareTitle","prepareCaption","YPath","clone","escapeSpecialCharacters","prepareNavigationState","recursive_resource_usage","getResource","lock_count","modification_time","creation_time","target_path","row_count","unmerged_row_count","chunk_row_count","tablet_state","prettyprint","TITLE_PRINT_SETTINGS","CAPTION_PRINT_SETTINGS","SUPPORTS_RESOURCE_USAGE","_Node","indent","break","binaryAsHex","highlightControlCharacter","escapeWhitespace","asHTML","journal","updateResourceUsage","getFilteredNodes","isRootNode","UPDATE_RESOURCE_USAGE","nodesChunks","chunk_","batchedRequests","nodesChunk","executeBatch","navigationResourceUsage","resultChunks","dataMap","errorResults","resultChunkIndex","floor","getNodesData","nodeData","nodeValue","newData","GENERIC_ERROR_MESSAGE","details","selectAll","isAllSelected","allNodes","SELECT_ALL","Chooser","getIsAllSelected","handleSelectChange","showRemoteCopyModal","_results$index","REMOTE_COPY_MODAL_PARTIAL","hideRemoteCopyModal","remoteCopy","dstCluster","MultipleActions","isOneSelected","isSelected","getSelectedNodes","isTooLarge","dynTablesActions","getSelectedNodesAllowedDynTablesActions","hasRestoreButton","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","Warning","isUnmounted","allowPagination","Paginator","OffsetInput","ColumnSelectorButton","SettingsButton","JupyterButton","FullScreenButton","OffsetSelectorModal","isTableSorted","closeOffsetSelectorModal","minKeyValue","offsetValues","initialItems","_changeFilter","updateItemValue","prevItems","findIndex","changedItem","_handleInputChange","TextInput","RegExp","escapeRegExp_","visibleItems","filterItemsByName","renderSearchBox","renderItems","isOffsetSelectorOpen","itemProps","isRequired","CLOSE_OFFSET_SELECTOR_MODAL","getCurrentOffsetValues","getIsTableSorted","TableColumnsPresetNotice","getColumnsPresetColumns","getColumnsPresetError","log","collapsed","Yson","Table","columnsProps","accessor","renderColumnSelectorModal","srcColumns","isColumnSelectorOpen","renderTable","settings","visibleRows","stickyTop","isSplit","HEADER_HEIGHT","OVERVIEW_HEIGHT","stickyHead","syncHeadOnResize","sortable","stripedRows","displayIndices","emptyDataMessage","startIndex","getTableData","isYqlV3Types","handleScreenChanged","toolbar","TableOverview","WithStickyToolbar","hideToolbarShadow","toolbarClassName","sticky","hashToLoad","getColumnsPreset","ui_loadColumnPreset","_ref$data","encode","SET_TABLE_COLUMNS_PRESET","setTablePreset","setTablePresetError","_ref5$deniedKeyColumn","preset","forEach","_preset$columns","waitForFontFamilies","tableSimilarityEnabled","isTableSimilarityEnabled","field_weight_limit","max_selected_column_count","max_all_column_names_count","column_names","restoreSimilarColumns","restoreExactColumns","restoreColumns","_excluded2","storedIsFullScreen","TableConnected","getTableYsonSettings","splitScreen","getSrcColumns","getVisibleRows","TTLInfo","ttlItems","makeTTLItems","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","optional","lock","ascending","type_v3","sort_order","type_name","createTable","validateTableName","parentDirectory","closeCreateTableModal","lastValidationResult","validateForm","set_","nameCounters","columnData","nameIndexes","validateColumnData","indices","validateTableSettings","formValidator","indexById","sortBy_","ColumnDataTypes","ANY","YSON","isOrderedColumn","isSortedColumn","isDescendingColumn","aggr","SUM","MIN","MAX","INT64","UINT64","DOUBLE","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","_WithKeyboardNavigation","WithKeyboardNavigation","_args","hoverSelectedIndex","selectedIndex","wrapHotkeyHandler","_len2","_key2","selectIndex","maxIndex","selectNext","selectPrev","handleMouseMove","handleItemHover","handleItemSelect","elem","querySelector","windowHeight","clientHeight","bounding","getBoundingClientRect","bottomCoordinate","topCoordinate","scrollIntoView","scrollBy","handleItemKeyboardClick","onItemClick","hotkeys","keys","cssHover","onItemHover","onMouseMove","onItemSelect","Hotkey","withKeyboardNavigation","ElementsTableBase","MapNodesTable","_evt$target","_evt$target$contains","classList","contains","onChooserClick","hideOopsMsg","disableLogger","itemNavigationAllowed","batch","setMode","onSpaceHotkey","shiftKey","nativeEvent","setSelectedItem","renderChooser","renderRowCount","printColumnAsBytes","printColumnAsNumber","rowClassName","dyntable","defaultColumns","resources","resourcesColumns","tableId","renderLocks","renderModificationTime","renderCreationTime","renderAccount","tableProps","_createElement","LOADING","linkState","FormattedLink","renderNameImpl","renderTags","renderTrash","textOrLink","FormattedTextOrLink","asLink","WarningIcon","poolTreeIndex","fragments","fragment","pool","ROOT_POOL_NAME","poolTree","SCHEDULING","SchedulingTab","OVERVIEW","arrow","goToLink","viewLink","AccountLink","lastSelected","getLastSelected","lastIndex","nameIndex","SET_SELECTED_ITEM","MapNodesTableConnected","MapNodesTableWithRum","NAVIGATION_CONTENT_MAP_NODE","trimXLSX","fileName","_i","_arr","toLowerCase","endsWith","FILE_TYPES","getExcelBaseUrl","UploadManagerCreate","nameAlreadyUsed","parentDir","EXCEL_BASE_URL","_","alreadyUsed","checkNameAlreadyExist","validationState","UPLOAD_CONFIG","existingNodes","NodesTypes","sortedNodes","orderBy_","slice_","sum","renderItem","displayedNodes","_prepareNodes","allNodesCount","_getSumCount","otherNodesCount","renderSelected","NodesInfo","nodesInfo","closeCreateACOModal","CREATE_ACO_MODAL","createACO","namespace","formId","isDisabled","onValidation","formApi","footerProps","UploadFileManagerWithClose","uploadSettings","opts","setFile","isProgress","setProgress","_React$useState5","_React$useState6","progressEvent","setProgressEvent","random","uploadedFile","handleSubmit","filePath","clusterConfig","YT","clusters","ignore_existing","transactionId","writeFile","handleUploadProgress","compute_md5","ping_ancestor_transactions","uploadFile","useUploadFileManager","pathname","isUploadButtonDisabled","UploadFileManagerFileSettingsForm","tbBlock","MapNode","fetchNodes","prevPath","prevTransaction","_this$props$error","MapNodeToolbarConnected","ERROR","renderView","CreateTableModal","showACOCreateButton","filterState","getMediumList","showCreateTableModal","isCreateTableModalVisible","TYPE","CONTENT_MODE_OPTIONS","RESOURCES","setFilter","SET_TEXT_FILTER","setContentMode","SET_CONTENT_MODE","FETCH_NODES","navigationListNodes","list","additionalAttributes","saveRequestCancellation","getList","applyCustomSort","APPLY_CUSTOM_SORT","changeColumnSortOrder","setMediumType","SET_MEDIUM_TYPE","openCreateTableModal","openCreateACOModal","MapNodeConnected","MapNodeWithRum","MapNodeToolbar","_React$PureComponent","uploadXlsRef","uploadFileRef","createDirectoryButtonClick","OPEN_CREATE_DIRECTORY_POPUP","createTableButtonClick","uploadTableButtonClick","uploadFileButtonClick","createLinkButtonClick","createACOButtonClick","_UIFactory$getMapNode","getMapNodeExtraCreateActions","NoWrap","renderModals","debounce","prepareSimpleValue","ShowResourcesButton","SelectSingle","menuSize","popupClass","isRoot","saveDocument","documentString","SET_DOCUMENT_EDIT_MODE","GET_DOCUMENT","getNavigationDocumentLoadingStatus","selectNavigationDocument","EditButton","onEditClick","DocumentExtraTools","queryAutoOpen","isYqlView","_ref3$document","folding","extraTools","onSave","handleSaveDocument","jsonEditor","fullWidth","initialSplitSize","initialShowPreview","unipikaSettings","editMode","prepareSettings","navigationGetDocument","handleEditClick","handleOnCancel","handleOnDocumentSave","DocumentBody","DocumentEditModal","NAVIGATION_CONTENT_DOCUMENT","Document","TransactionConnected","startTime","handleTransactionAbort","ABORT_TRANSACTION","handleModalClose","modalContent","TransactionWithRum","NAVIGATION_CONTENT_TRANSACTION","Transaction","parentParsedPath","owner","started","start_time","fragmentFromYSON","getFilteredTransactions","transactionMap","transactions","rawTransactions","getTransactions","NAVIGATION_TRANSACTION_MAP_TABLE_ID","filteredTransactions","getNavigationTransactionMapLoadingStatus","TransactionMap","handleFilterChange","changeFilter","loadTransactions","renderIcon","renderId","renderOwner","renderStartTime","renderTitle","iconName","isLink","FormattedText","LOAD_TRANSACTIONS","navigationListTransactions","CHANGE_FILTER","TransactionMapConnected","TranscationMapWithRum","NAVIGATION_CONTENT_TRANSACTION_MAP","supportedContentTypes","map_node","portal_entrance","portal_exit","rootstock","scion","cell_node_map","sys_node","access_control_object_namespace_map","access_control_object_namespace","access_control_object","tablet_cell","chaos_cell","scheduler_pool_tree_map","scheduler_pool","string_node","int64_node","uint64_node","double_node","boolean_node","NAVIGATION_CONTENT_LINK","NAVIGATION_CONTENT_FILE","getNavigationTableLoadingState","getMeasureId","sybType","replicated_table","chaos_replicated_table","replication_log_table","nested_transaction","topmost_transaction_map","transaction_map","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$tab0","write_row_count_rate","getStatusError","statusError","getStatusLoading","statusLoading","getStatusLoaded","statusLoaded","getQueueStatusDataAlerts","_state$navigation$tab1","alerts","getQueueMode","filters","queueMode","getQueuePartitionIndex","queuePartitionIndex","getQueuePartitionsColumns","partitionsColumns","getQueueTabletCellHost","queueTabletCellHost","getQueueTabletCellId","queueTabletCellId","getQueueConsumerName","queueConsumerName","getQueueOwner","queueOwner","getQueueRateMode","queueRateMode","getQueueTimeWindow","queueTimeWindow","getPartitions","partitions","partitionsData","_partitionsData$map$f","_partitionsData$map","partition","_partition$meta","_partition$write_data","_partition$write_row_","meta","partition_index","toString","getPartitionsError","partitionsError","getPartitionsLoading","partitionsLoading","getPartitionsLoaded","partitionsLoaded","getConsumers","_state$navigation$tab10","registrations","consumers","consumer","read_data_weight_rate","read_row_count_rate","getConsumerPartitionIndex","consumerPartitionIndex","getConsumerRateMode","consumerRateMode","getConsumerPartitionsColumns","getConsumerTimeWindow","consumerTimeWindow","getTargetQueue","targetQueue","getConsumerRegisteredQueues","consumerData","getTargetQueueStatusData","_getTargetQueue","_statusData$queues","getStatusData","_ref$queue","queues","getOwner","_getTargetQueueStatus","_getTargetQueueStatus2","getReadDataWeightRate","_getTargetQueueStatus3","_getTargetQueueStatus4","getReadRowCountRate","_getTargetQueueStatus5","_getTargetQueueStatus6","getTargetQueueError","targetQueueStatusData","getConsumerMode","consumerMode","_partition$read_data_","_partition$read_row_c","changeConsumerFilters","CONSUMER_CHANGE_FILTERS","QueueError","modificationTime","valueOf","abs","Date","now","getErrorWithCode","Info","TargetQueue","clusterQueueUrl","firstColon","genNavigationUrl","ConsumerQueueSelector","topMargin","_useSelector2","handleSelect","_registrations$0$queu","_registrations$","pref","findCommonPathParent","Prefix","_ref$size","marginBottom","backgroundColor","_counters$show","counters","formatter","hummerFormat","counterNames","_counters$key","BarChart","_counters$key2","Meta","partitionCount","readDataWeightRate","readRowCountRate","vital","SubjectCard","isNull","Multimeter","BytesPerSecond","RowsPerSecond","tabItems","CONSUMER_MODE","METRICS","PARTITIONS","changeConsumerMode","Extras","toggleRegisterDialog","register","_register","api","_response$results$","queuePath","queueCluster","consumerPath","consumerCluster","_response$results$2","queue_path","consumer_path","skipErrorToast","useRegisterMutation","rootApi","injectEndpoints","endpoints","build","mutation","queryFn","makeClusterSelectOptionsSameEnv","_clusters$map","environment","localeCompare","RegisterConsumerDialog","getRegisterDialogVisibility","_useRegisterMutation","_useRegisterMutation2","update","_useRegisterMutation3","clusterControlOptions","filterable","_form$getState","newValues","unwrap","hasValidationErrors","bool","getter","sortAccessor","datetime","hoverContent","HoverContent","_error$message","multimeter","valueFormat","number","readRateName","CONSUMER_RATE_MODE","ROWS","DATA_WEIGHT","readRateGetter","rateMode","timeWindow","loadConsumerPartitions","CONSUMER_PARTITIONS_LOAD_REQUEST","queueConsumerPartitions","CONSUMER_PARTITIONS_LOAD_SUCCESS","CONSUMER_PARTITIONS_LOAD_FAILURE","DataTableYT","useThemeYT","NoContent","hint","rateItems","timeItems","CompactColumnSelector","changeConsumerPartitionIndex","changeConsumerRateMode","changeConsumerTimeWindow","changeConsumerPartitionsColumns","views","ExtraControls","View","MetricsComponent","getComponentForConsumerMetrics","PartitionsExtraControls","Partitions","emptyView","loadConsumerStatus","CONSUMER_STATUS_LOAD_REQUEST","queueConsumerStatus","CONSUMER_STATUS_LOAD_SUCCESS","state2","CONSUMER_STATUS_LOAD_FAILURE","_useViewByMode","ConsumerToolbar","growable","Alerts","_ref$marginDirection","marginDirection","alert","YTAlertBlock","writeDataWeightRate","writeRowCountRate","changeQueueRateMode","QUEUE_CHANGE_PERSISTED_STATE","changeQueueTimeWindow","QUEUE_MODE","CONSUMERS","EXPORTS","changeQueueMode","QueueMetrics","getComonentForQueueMetrics","createConsumer","_createConsumer","registerConsumer","_registerConsumer","_response$results$3","_response$results$4","unregisterConsumer","_x6","_unregisterConsumer","_response$results$5","_response$results$6","makeGetExportsParams","queueExportConfig","deleteExtraAttributes","_deleteExtraAttributes","configs","prevConfig","export_name","export_directory","exportsMutation","_exportsMutation","_ytApi$endpoints$fetc","newConfig","newConfigs","ytApi","fetchBatch","select","originating_queue_id","t1","queueApi","export","invalidatesTags","useExportMutation","useCreateConsumerMutation","useRegisterConsumerMutation","useUnregisterConsumerMutation","validateCreateConsumerPath","_validateCreateConsumerPath","_res$","_path$split$at","_res$2","parentPath","at","_typeof","CreateConsumerDialog","getCreateDialogVisibility","_useCreateConsumerMut","_useCreateConsumerMut2","_useCreateConsumerMut3","validator","toggleCreateDialog","UnregisterConsumerDialog","getUnregisterDialogVisibility","getConsumerPath","_useUnregisterConsume","_useUnregisterConsume2","_useUnregisterConsume3","closeUnregisterDialog","_useRegisterConsumerM","_useRegisterConsumerM2","_useRegisterConsumerM3","initialValue","preparedValues","QUEUE_RATE_MODE","_ref0","_consumer$split","_consumer$split2","UnregisterConsumer","openUnregisterDialog","changeQueueConsumerName","changeQueueOwner","writeRateName","writeRateGetter","classNames","_x$meta","string","_x$meta2","loadQueuePartitions","QUEUE_PARTITIONS_LOAD_REQUEST","queuePartitions","QUEUE_PARTITIONS_LOAD_SUCCESS","QUEUE_PARTITIONS_LOAD_FAILURE","changeQueuePartitionIndex","changeQueueTabletCellHost","changeQueueTabletCellId","changeQueuePartitionsColumns","QUEUE_CHANGE_PARTITIONS_COLUMNS","queuePartitionsColumns","prepareUpdateValues","config","_restConfig$export_tt","_restConfig$export_pe","restConfig","output_table_name_pattern","use_upper_bound_for_table_names","export_ttl","export_period","_validateExportDirectory","period","whiteSpace","ExportsEditDialog","useFetchBatchQuery","_useExportMutation","_useExportMutation2","_useExportMutation2$","setInitialValues","rawValues","prepareInitialValues","configsValues","ExportsEdit","editDialogVisible","setEditDialogVisible","_useState3","_useState4","deleteDialogVisible","setDeleteDialogVisible","toggleEditDialogVisibility","toggleDeleteDialogVisibility","Value","makeNavigationLink","Time","formatTimeDuration","ConsumersExtraControls","consumersLoading","consumersLoaded","borderLeft","_useExports","_useFetchBatchQuery","isFetching","obj","newObj","useExports","loadQueueStatus","QUEUE_STATUS_LOAD_REQUEST","queueStatus","QUEUE_STATUS_LOAD_SUCCESS","QUEUE_STATUS_LOAD_FAILURE","QueueToolbar","getLocksModeFilter","modeFilter","getLocksLoadStatus","getLocksFiltered","Locks","renderTransaction","operationId","operation_id","cellTag","parseInt","_clusterConfig$primar","primaryMaster","additional","findClusterConfigByOperationId","clusterId","operationIdUrl","page","Linkify","TemplateTime","time","onModeFilter","setLocksModeFilter","getLocks","renderIndex","renderLock","MAX_TRANSACTIONS_REQUESTS","CustomRadioButton","isPartial","renderModeFilter","renderMessage","child_key","attribute_key","GET_LOCKS","navigationLocks","rowLocks","navigationTransactions","_splitBatchResults","splitBatchResults","prepareData","IS_PARTIAL","PARTITION","LocksConnected","LocksWithRum","NAVIGATION_TAB_LOCKS","ErrorIcon","mdBlock","MarkdownLinePreview","_ref$allowHTML","allowHTML","hideModal","useMarkdown","html","div","createElement","innerHTML","plainText","innerText","ellipsis","footer","dangerouslySetInnerHTML","__html","ExternalDescription","_data$glossaryEntity","hasWarning","markdown","glossaryEntity","typeMismatchElement","Popover","elementsBlock","COLUMNS_TO_HIDE","Schema","externalSchemaUrl","externalSchema","externalSchemaError","loadExternalSchemaData","SchemaDataType","renderExternalColumn","_this$props$computedC","computedColumns","preparedSet","col","omit_","_columns$column","externalSchemaDescriptionSetup","virtualType","_loadExternalSchemaData","truePath","_yield$UIFactory$exte","load","Map","filteredSchema","updateFilter","SCHEMA_UPDATE_FILTER","SchemaConnected","getAttributesPath","getSchemaMeta","getFilteredSchema","getComputedColumns","SchemaWithRum","NAVIGATION_TAB_SCHEMA","prepareFlatColumns","flatColumns","correctPrefix","getStorePreloadValues","tablet","completed","failed","name_tablet_id","name_cell_id","tablet_id","cell_leader_address","allowedOrderTypes","DESC_ASC_UNORDERED","overall","replication_error_count","pivot_key","store_count","overlapping_store_count","store_preload","storePreload","aggregatedStorePreload","currentStorePreload","uncompressed_data_size","compressed_data_size","static_chunk","read","lookup","write","delete","unmerged_row_read_rate","merged_row_read_rate","static_chunk_read","static_chunk_lookup","dynamic_row_read_rate","dynamic_row_lookup_rate","dynamic_row_write_rate","dynamic_row_delete_rate","getRawTablets","getTabletsSortState","NAVIGATION_TABLETS_TABLE_ID","getActiveHistogram","histogramType","getSortedTablets","rawTablets","getFilteredTablets","tabletsFilter","sortedTablets","getPreparedDataForColumns","collection","mapValues_","getTablets","filteredTablets","preparedCollection","prepare","prepareAggregation","getHistograms","histogramItem","dataFormat","caps","histograms","getNavigationTabletsLoadingStatus","getTabletsExpandedHosts","expandedHosts","SUM_FIELDS","getTabletsMax","k","max_","getTabletsByNameRoot","tabletsMode","sortedAndFilteredItems","groupByKey","maxDst","maxHost","mapByName","dst","parent","level","leaves","addHostItem","isTopLevel","root","toArray_","childrenCount","_root$children$","sortTree","sortTreeInPlace","maxByLevel","getTabletsByName","expanded","isCollapsed","flattenTree","Tablets","useBytes","_this$props$maxByLeve","_item$level","asNumber","getProgressBarColorByIndex","renderBytesProgress","renderNumberProgress","onRowClick","toggleExpandedHost","loadTablets","defaultItems","structure","performance","by_host","by_cell","renderTabletId","renderCellId","renderHost","renderPivotKey","renderStorePreload","dynamic_read","dynamic_lookup","dynamic_write","dynamic_delete","itemMods","changeTabletsFilter","changeTabletsMode","histogramCollapsed","toggleHistogram","changeActiveHistogram","collapsibleSize","onToggle","renderOverview","top","TABLET","renderIdWithLink","genTabletCellBundlesCellUrl","none","freezing","unfreezing","mounting","unmounting","pivotKey","storePreloadProgress","prepareStorePreloadProgress","_Tablets","typedValueProps","$type","tabletProps","last_commit_timestamp","performance_counters","statistics","GET_TABLETS","navigationTablets","TYPED_OUTPUT_FORMAT","TOGGLE_HISTOGRAM","CHANGE_TABLETS_MODE","TABLETS_STATE_PARTIAL","CHANGE_ACTIVE_HISTOGRAM","TabletsConnected","TabletsWithRum","NAVIGATION_TAB_TABLETS","getAttributesTab","getAttributesLoadingInfo","requestAttributes","requestParams","_response$","attributesActions","onRequest","nodeAttributes","isCancelled","onFailure","Attributes","attributesPath","YsonDownloadButton","pathToFileName","AttributesWithRum","NAVIGATION_TAB_ATTRIBUTES","shortcut","TIMELINE_RANGE_PICKER_SHORTCUTS","getAccessLogFilterRecursive","accessLog","accessLogFilters","getAccessLogFilterPagination","pagination","getAccessLogFilterPathRegex","path_regex","getAccessLogFilterUserRegex","user_regex","getAccessLogFilterMethod","method_group","getAccessLogFilterUserType","user_type","getAccessLogFilterScope","getAccessLogFilterTime","getAccessLogFilterFieldSelector","field_selector","getAccessLogFilterMetadata","metadata","getAccessLogFilterDistinctBy","distinct_by","getAccessLogLoading","getAccessLogReady","ready","getAccessLogLoaded","getAccessLogError","getAccessLogItems","accesses","getAccessLogAvailableTimeRange","availableTimeRange","getAccessLogPagesCount","total_row_count","totalRowCount","ceil","getAccessLogLastLoadedParams","skipEmpty","getAccessLogRequestParams","convertTimeToRequestParams","begin","end","getAccessLogHasChangedFilters","lastLoaded","getAccessLogLastLoadedFieldSelector","accesLogCancelHelper","fetchAccessLog","pathChanged","lastLoadedParams","ACCESS_LOG_PATH_CHANGED","ACCESS_LOG_REQUEST","ACCESS_LOG_PARTIAL","getAccessLogBasePath","removeAllAndGenerateNextToken","latest","erliest","ACCESS_LOG_SUCCESS","_e$response","ACCESS_LOG_FAILURE","setAccessLogFilters","ACCESS_LOG_FILTERS","setAccessLogFiltersPage","TransactionInfo","CopyText","transaction_title","operation_title","copyText","DateHeaderMemo","DateHeader","MOVING","stickyFooter","STICKY_DOUBLE_TOOLBAR_BOTTOM","stickyBottom","PathItem","AccessLogTable","fieldSelector","instant","_ref4$row","original_path","ArrowRightIcon","PathTag","ReadableField","_ref9","transaction_info","headerTitle","AccountsLogTransactionInfo","pageCount","ColumnHeader","pageIndex","_ref1","isTarget","capitalize","AccessLogError","valueToSelection","selectionToValue","emptyValue","ACCESS_LOG_FIELD_SELECTOR_ITEMS","ACCESS_LOG_METHOD_ITEMS","ACCESS_LOG_USER_TYPE_ITEMS","ACCESS_LOG_SCOPE_ITEMS","AccessLogOpenQtButton","setLoading","newParams","_yield$wrapApiPromise","query_id","finish","AbbrSqlIcon","AccessLogFilters","AccessLogPagination","AccessLogTimeline","AccessLogFieldselector","AccessLogMetadata","AccessLogDistictBy","AccessLogPathRegexp","shrinkable","wrapperClassName","AccessLogUserRegexp","AccessLogUserTypeFilter","AccessLogScopeFilter","AccessLogMethod","AccessLogRecursive","AccessLogApplyFilters","hasChanges","SimplePagination","TextInputWithDebounce","METADATA_ITEMS","valueStr","vals","DISTINCT_BY_ITEMS","handleUpdate","initialState","EMPTY_OBJECT","maxVisibleValues","TIMELINE_SHOURCUTS","updateTime","updateShortcut","shortcutValue","_ref$from","_ref$to","TimelinePicker","onShortcut","topShortcuts","shortcuts","hasDatePicker","AvailableTimeRange","earliest","formatInterval","AccessLog","ACCESS_LOG_RESET_FILTERS","doubleHeight","getTabletErrors","tabletErrorsBackground","tabletErrors","replicationErrors","getTabletErrorsReplicationErrors","TabletErrorsConnected","tablet_errors","TabletErrorsCountNotice","TabletErrorsBlock","sectionClassName","ReplicationErrorsBlock","TabletErrorsWithRum","getTabletErrorsLoadingStatus","NAVIGATION_TAB_TABLET_ERRORS","counter","replicaId","ReplicaErrorHeader","getTabletErrorsBackgroundCountNoticeVisbile","TabletErrorsHeader","getTabletErrorsByPathError","tabletErrorsByPath","getTabletErrorsByPathLoading","getTabletErrorsByPathLoaded","getTabletErrorsByPathData","getTabletErrorsByPathDataParams","dataParams","getTabletErrorsByPathAllMethods","all_methods","getTabletErrorsByPathPageCount","getTabletErrorCountLimitExceeded","_state$navigation$tab3","error_count_limit_exceeded","getTabletErrorsByPathTimeRange","timeRangeFilter","getTabletErrorsByPathMethodsFilter","methodsFilter","getTabletErrorsByPathPageFilter","pageFilter","getTabletErrorsByPathTabletIdFilter","tabletIdFilter","countLimitExceededMessage","TabletErrorsByPathTable","_useTableColumnsAndDa","countLimitExceeded","_ref2$errors","timestamp","defaultExpandedCount","useTableColumnsAndData","DATA_TABLE_YT_SETTINGS_UNDER_TOOLBAR_DOUBLE_HEIGHT","dynamicRender","TabletErrorsRequest","TabletErrorsRequestToolbar","_useTabletErrorFromAp","timeRange","_calcFromTo","calcFromTo","tabletErrorsByPathActions","table_id","start_timestamp","end_timestamp","methods","prevDataParams","prevData","fixed_end_timestamp","count_limit","onError","useTabletErrorFromApiLoad","_useTabletErrorFromAp2","allMethods","YTTimeline","hasRuler","maxVisibleValuesTextLength","TabletErrors","viewMode","getTabletErrorsViewMode","backgroundErrorCount","allowTabletErrorsAPI","TabletErrorsBackground","updateTabletErrorsViewMode","getUserAttributes","userAttributes","getUserAttributesLoadInfo","UserAttributes","userAttributesActions","navigationUserAttributes","UserAttributesWithRum","NAVIGATION_TAB_USER_ATTRIBUTES","TableMountConfig","getNavigationTableMountConfig","getNavigationMountConfigYsonSettings","Flow","supportedAttributeTypes","acl","ACL","user_attributes","Tab","ACCESS_LOG","AUTO","CONSUMER","Consumer","MOUNT_CONFIG","Queue","FLOW","getNavigationExtraTabs","component","getSupportedAttributeTypes","checkContentIsSupported","CONTENT","getComponentByContentType","getComponentByMode","noAccess","isContentTab","NavigationDescription","NavigationPermissionsNotice","isWriteable","getNavigationIsWritable","isAccountUsable","getNavigationIsAccountUsable","checkPermissionsError","getNavigationCheckPermissionsError","getNavigationPathAccount","accountAclLink","ACCOUNTS","AccountsTab","genAccountsAclLink","AttributesEditorLoaded","singleMode","getMediumListNoCache","storeError","stateError","setErr","currentTab","setCurrentTab","hasMapNodes","hasStaticTables","hasDynamicTables","hasTables","hasDynTableOrMapNode","pathsValues","annotationInitial","general","primary_medium","expiration_time","expiration_timeout","storage","compressionCodecValueFromString","normalizeErasureCodec","_storageOption","storageOptionFromErasureCodec","annotation","annotationPath","handleAdd","dataDiff","generalAttributes","storageAttributes","compressionCodecValueToString","erasureCodecFromStorageOption","invalidateYTAnnotation","forEachStaticTable","mergeNoticeAndError","annotationTab","valuePath","inMemoryModeField","InMemoryMode","NONE","COMPRESSED","UNCOMPRESSED","optimizeForField","CreateExternalDescriptionButton","_UIFactory$externalAn","externalDescription","useExternalDescriptionQuery","externalAnnotationLink","externalAnnotationSetup","externalServiceName","ArrowUpRightFromSquare","AttributesEditor","validateStorage","validateReplicationFactor","getRemoteCopyModalVisible","remoteCopyModal","getRemoteCopyModalPaths","makeCompressionCodecFinder","findCompressionCodec","RemoteCopyModal","_pathsValues$","_response","calculateValueOnPoolsLoaded","loadedPoolNames","schema_inference_mode","override","excludeClusters","allowEphemeral","getNavigationTableEraseModalVisible","tableEraseModal","getNavigationTableEraseModalPath","TableEraseModal","validateRange","RANGE","TableSortModal","getCurrentUserName","getNavigationTableSortVisible","getNavigationTableSortPaths","suggestError","getNavigationTableSortError","suggestColumns","getNavigationTableSortSuggestColumns","attributeValues","getNavigationTableAttributesValues","_paths","_outputPath","outputPath","sort_by","pool_trees","runTableSort","hideTableSortModal","handlePathsChange","tableSortModalLoadColumns","errorFields","WaitForDefaultPoolTree","defaultPoolTree","isPathStaticTable","allowDescending","poolTrees","TableMergeModal","getNavigationTableMergeVisible","chunkSize","chunkSizeBytes","data_size_per_job","parseBytes","runTableMerge","merge_by","hideTableMergeModal","getDynTablesStateModalVisible","dynTablesStateModal","getDynTablesStateModalPaths","getDynTablesStateModalAction","DynTablesStateModal","WARN_TEXT","renderWarning","getLinkToModalState","linkToModal","LinkToModal","_validator2","_validator","getCreateACOModalState","createACOModal","CreateACOModal","Navigation","onTabChange","ORIGINATING_QUEUE","onEditButtonClick","trackVisit","updateTitleWithPath","onTransactionChange","updateTitle","tabSize","Tabs","active","underline","_this$props6$type","ContentViewer","_this$props8$error","NavigationError","_this$props9","hasError","renderEditButton","renderTabs","CellPreviewModal","NavigationConnected","isFinalState","isNavigationFinalLoadState","isIdmSupported","getIdmSupport","UI_TAB_SIZE","getTabs","NavigationWithRumMemo","NavigationWithMesure","NAVIGATION_PRELOAD","NavigationWithRum","Editor","setScope","cancelOnBlur","NavigationTopRowContent","getNavigationDefaultPath","RowWithName","urlParams","NavigationFavourites","EditableNavigationBreadcrumbs","NavigationTools","favourites","getFavouritePaths","isInFavourites","isCurrentPathInFavourites","handleToggle","navigationToggleFavourite","handleItemClick","Favourites","NavigationPathToClipboard","onCopyToClipboard","NavigationTargetPathButton","decodedTargetPath","setEditMode","toggleEditMode","NavigationPathEditor","hideEditor","NavigationBreadcrumbs","onEdit","actualPath","getActualPath","_event$target","bcItems","getNavigationBreadcrumbs","getMode","history","useHistory","isLastItem","makeRoutedURL","navmode","BreadcrumbsItem","Escaped","Breadcrumbs","navigate","showRoot","RefreshButton","RestoreButton","handleClearTransaction","clearTransaction","handleEdit","setTransaction","getNavigationRestorePath","handleRestore","TRASH_PATH","useRumMeasureStart","subPage","isMediaTag","isImageTag","isVideoTag","i18nFactory","registerKeysets","_props$debounce","_props$onUpdate","onEnterKeyDown","onKeyDown","setInput","handleChangeExt","debounce_","handleKeyDown","cancel","mergeSettingStrategy","objValue","srcValue","currentPlugins","newPlugins","newSettingsPlugins","currentPlugin","newPluginIndex","newPlugin","settingsEventEmitter","events","eventId","updateLang","lang","configure","setLang","plugins","updates","filteredUpdates","withSplit","_WithSplit","WithSplit","ReactDOM","getElementById","SPLIT_PANE_ID","ICON_BY_TYPE","SortIcon","allowUnordered","withUndefined","nextSortOrderValue","control","hotkeySettings","showInput","inputValue","renderComponent","_this$props2$alwaysSh","alwaysShowError","SidePanelPortal","widgetOpened","setWidgetOpened","withRouter","_props$theme","match","computeStateQuery","_ref$asLink","FormattedId","hovered","setHovered","withNaming","m","EditableAsText","withControls","disableEdit","cancelOnClose","openOnClick","renderEditor","onModeChange","_props$saveButtonView","saveButtonView","_props$cancelButtonVi","cancelButtonView","handleChangeMode","isEdit","closeEditMode","startTextEdit","val","applyValue","closeAndResetValue","controlSize","onMouseDown","DragHandle","sortableHandle","SortableItem","sortableElement","itemRenderer","onCheckBoxChange","selectable","showAction","isDeletable","SortableList","sortableContainer","useStaticSize","mods","ReactList","toggleItem","withActualItems","selectAllItems","visibleMap","getVisibleItemsMap","each_","deselectAllItems","_item$isDeletable","invertItems","_handleCheckBoxChange","currentTarget","getAttribute","_handleSortEnd","oldIndex","newIndex","getVisibleItems","fromIndex","toIndex","_items$splice","_handleDefaultSort","aCaption","bCaption","_toggleShownItems","every","some","func","btnProps","buttonALLisDisabled","buttonNONEisDisabled","toSplit","filterItems","_partition_","partition_","_partition_2","keyItems","_this$getVisibleItems2","headless","lockAxis","helperClass","helper","onSortEnd","useDragHandle","renderList","itemsProps","_ref0$caption","renderText","cnDropdownMenu","DropdownMenuContext","moveBack","activeItemIndex","skip","newActiveItemIndex","moveForward","rootMenuPath","DropdownMenuNavigationContext","activeMenuPath","setActiveMenuPath","DropdownMenuNavigationContextProvider","contextValue","dropdownMenuSeparator","isSeparator","shouldSkipItemNavigation","stringifyNavigationPath","_a","DropdownMenuPopup","menuProps","popupProps","navigationAnchorRef","isSubmenu","activateParent","handleMouseEnter","handleMouseLeave","activeItem","handleKeydown","isSubmenuToggleActive","isNavigationActive","setActiveItemIndex","reset","resetNavigation","processHomeKey","processEndKey","onAnchorKeyDown","previousActiveItemIndex","useListNavigation","Menu","isActiveParent","DropdownMenuItem","closeMenu","isSubmenuOpen","useSubmenu","hasSubmenu","closeSubmenu","openSubmenu","subMenuItems","menuItemRef","useDirection","handleCloseMenu","handleMenuItemClick","_b","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","MenuItem","iconStart","rel","handleClickCapture","publish","componentId","domEvent","onClickCapture","tabIndex","interactive","Group","restProps","isTypeSelection","isTypeContainer","isClickable","defaultTheme","defaultView","Box","clickable","toggleActive","dropItems","buttonProps","themeProps","toggleDisabled","clear","renderDropDownMenu","renderHotkey","itemType","getRandomCKId","chars","randomString","selectCellPreviewVisible","cellPreviewModal","selectCellPreviewLoading","selectCellPreviewData","selectCellPreviewYtCliDownloadCommand","ytCliDownloadCommand","selectCellPreviewNoticeText","noticeText","selectErrorPreviewCellPath","getPreviewCellYsonSettings","SimpleModal","closeCellPreviewAndCancelRequest","PreviewContent","$tag","src","alt","dynamicRenderScrollParentGetter","customLayout","typedMemo","resetError","getDerivedStateFromError","componentDidCatch","componentDidUpdate","getErrorMessage","renderPluginLoader","pluginLoader","ChartKitComponent","widgetRef","instanceRef","propsId","isMobile","ckId","plugin","iteratedPlugin","ChartComponent","reflow","fallback","mobile","YagrPlugin","COLORS","serieIndex","_ref$view","CollapsibleSectionStateLess","overview","headingClassName","togglerRightPadding","margin","setCollapsed"],"sourceRoot":""}