@ytsaurus/ui 1.56.1 → 1.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/public/build/assets-manifest.json +15 -15
- package/dist/public/build/css/vcs.ca6825ac.chunk.css +2 -0
- package/dist/public/build/css/vcs.ca6825ac.chunk.css.map +1 -0
- package/dist/public/build/js/{1059.dbab7a54.chunk.js → 1059.68590ad9.chunk.js} +2 -2
- package/dist/public/build/js/{1059.dbab7a54.chunk.js.map → 1059.68590ad9.chunk.js.map} +1 -1
- package/dist/public/build/js/{main.7c1e6782.js → main.bfc510a2.js} +3 -3
- package/dist/public/build/js/{main.7c1e6782.js.map → main.bfc510a2.js.map} +1 -1
- package/dist/public/build/js/query-navigation.5f2d5062.chunk.js +2 -0
- package/dist/public/build/js/query-navigation.5f2d5062.chunk.js.map +1 -0
- package/dist/public/build/js/{runtime.ced6e0e1.js → runtime.7a55c14e.js} +2 -2
- package/dist/public/build/js/{runtime.ced6e0e1.js.map → runtime.7a55c14e.js.map} +1 -1
- package/dist/public/build/js/vcs.8add27e4.chunk.js +2 -0
- package/dist/public/build/js/vcs.8add27e4.chunk.js.map +1 -0
- package/dist/public/build/manifest.json +12 -12
- package/dist/server/ServerFactory.d.ts +3 -0
- package/dist/server/ServerFactory.js +3 -0
- package/dist/server/components/vcs/GithubApi.d.ts +21 -10
- package/dist/server/components/vcs/GithubApi.js +32 -9
- package/dist/server/components/vcs/GitlabApi.d.ts +21 -10
- package/dist/server/components/vcs/GitlabApi.js +31 -9
- package/dist/server/components/vcs/index.d.ts +1 -16
- package/dist/server/components/vcs/index.js +17 -5
- package/dist/server/controllers/vcs.d.ts +1 -1
- package/dist/server/controllers/vcs.js +43 -25
- package/dist/server/routes.js +1 -1
- package/dist/shared/constants/vcs.d.ts +1 -0
- package/dist/shared/constants/vcs.js +4 -0
- package/dist/shared/ui-settings.d.ts +30 -6
- package/dist/shared/vcs.d.ts +38 -7
- package/package.json +2 -2
- package/dist/public/build/css/vcs.9409b0df.chunk.css +0 -2
- package/dist/public/build/css/vcs.9409b0df.chunk.css.map +0 -1
- package/dist/public/build/js/query-navigation.4b0b6e64.chunk.js +0 -2
- package/dist/public/build/js/query-navigation.4b0b6e64.chunk.js.map +0 -1
- package/dist/public/build/js/vcs.d737e61e.chunk.js +0 -2
- package/dist/public/build/js/vcs.d737e61e.chunk.js.map +0 -1
- /package/dist/public/build/js/{main.7c1e6782.js.LICENSE.txt → main.bfc510a2.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"js/1059.dbab7a54.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/hooks/use-prevent-unload.ts","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/hooks/QueryListFilter/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/hooks/Query/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QueriesList/EditQueryNameModal/EditQueryNameModal.tsx","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QueriesList/QueriesHistoryList/useQueryListColumns.ts","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QueriesList/QueriesHistoryList/index.tsx","webpack://@ytsaurus/ui/./src/ui/assets/img/svg/learn.svg","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QueriesList/QueriesTutorialList/index.tsx","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QueriesList/QueriesListFilter/QueryEngineFilter.tsx","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QueriesList/QueriesListFilter/QueryTextFilter.tsx","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QueriesList/QueriesListFilter/index.tsx","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/Vcs/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/Navigation/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QueriesList/index.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/layout-columns.svg","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/FileEditor/FileEditor.tsx","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QueryTracker/QueryEditorSplit.tsx","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QueryTracker/QueryTracker.tsx","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/module/settings/selector.ts","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/hooks/QueriesList/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/module/queryNavigation/selectors.ts"],"sourcesContent":["import {useCallback, useEffect} from 'react';\n\nexport const usePreventUnload = ({shouldListen}: {shouldListen: boolean}) => {\n const beforeUnloadHandler = useCallback((e: BeforeUnloadEvent) => {\n e.preventDefault();\n\n // Included for legacy support, e.g. Chrome/Edge < 119\n e.returnValue = true;\n }, []);\n\n useEffect(() => {\n if (shouldListen) {\n window.addEventListener('beforeunload', beforeUnloadHandler);\n }\n\n return () => window.removeEventListener('beforeunload', beforeUnloadHandler);\n }, [shouldListen]);\n};\n","import {useDispatch, useSelector} from 'react-redux';\nimport {useCallback} from 'react';\nimport {applyFilter} from '../../module/queries_list/actions';\nimport {getQueriesListFilter, getQueriesListMode} from '../../module/queries_list/selectors';\nimport {QueriesListFilter, QueriesListMode} from '../../module/queries_list/types';\n\nexport const useQuriesHistoryFilter = (): [\n QueriesListFilter,\n QueriesListMode,\n <K extends keyof QueriesListFilter>(filter: K, value: QueriesListFilter[K]) => void,\n] => {\n const filter = useSelector(getQueriesListFilter);\n const filterPreset = useSelector(getQueriesListMode);\n const dispatch = useDispatch();\n const setFilter = useCallback(\n function setFilter<K extends keyof QueriesListFilter>(\n name: K,\n value: QueriesListFilter[K],\n ) {\n dispatch(\n applyFilter({\n [name]: value,\n }),\n );\n },\n [dispatch],\n );\n return [filter, filterPreset, setFilter];\n};\n","import {useCallback} from 'react';\nimport {useSelector} from 'react-redux';\nimport {useHistory} from 'react-router';\nimport {createQueryUrl} from '../../utils/navigation';\nimport {QueryItem} from '../../module/api';\nimport {getCluster} from '../../../../store/selectors/global';\nimport {getQuery} from '../../module/query/selectors';\n\nexport const useQueryNavigation = (): [QueryItem['id'] | undefined, (id: QueryItem) => void] => {\n const selectedItem = useSelector(getQuery);\n const cluster = useSelector(getCluster);\n const history = useHistory();\n\n const goToQuery = useCallback(\n (item: QueryItem) => {\n history.push(createQueryUrl(cluster, item.id));\n },\n [history],\n );\n\n return [selectedItem?.id, goToQuery];\n};\n","import React, {useMemo, useState} from 'react';\nimport {YTDFDialog, makeErrorFields} from '../../../../components/Dialog/Dialog';\nimport Button from '../../../../components/Button/Button';\nimport Icon from '../../../../components/Icon/Icon';\nimport _ from 'lodash';\nimport {QueryItem, setQueryName} from '../../module/api';\nimport {useThunkDispatch} from '../../../../store/thunkDispatch';\n\nexport interface Props {\n query: QueryItem;\n className?: string;\n}\n\ninterface FormValues {\n name: string;\n}\n\nexport default function EditQueryNameModal({query, className}: Props) {\n const [error, setError] = useState(undefined);\n const [visible, setVisible] = useState(false);\n const {state} = query;\n\n const dispatch = useThunkDispatch();\n\n const initialValues = useMemo(() => {\n return {\n name: query.annotations?.title || '',\n };\n }, [query.annotations?.title]);\n\n const handleSubmit = (name: string) => {\n return dispatch(setQueryName(query.id, {...query.annotations, title: name}));\n };\n\n return state === 'completed' || state === 'failed' || state === 'draft' ? (\n <div\n className={className}\n onClick={(event) => {\n event.stopPropagation();\n }}\n onKeyDown={(event) => {\n event.stopPropagation();\n }}\n >\n <Button\n onClick={() => {\n setVisible(true);\n }}\n view={'flat-secondary'}\n size={'m'}\n width={'auto'}\n >\n <Icon awesome=\"pencil\"></Icon>\n </Button>\n {visible ? (\n <YTDFDialog<FormValues>\n pristineSubmittable\n visible={visible}\n modal={true}\n headerProps={{title: 'Edit query name'}}\n footerProps={{textApply: 'Save'}}\n onClose={() => {\n setError(undefined);\n setVisible(false);\n }}\n onAdd={(form) => {\n const {name} = form.getState().values;\n return handleSubmit(name).catch((err) => {\n setError(err);\n throw err;\n });\n }}\n initialValues={initialValues}\n fields={[\n {\n name: 'name',\n type: 'text',\n required: true,\n caption: 'Name',\n extras: {\n placeholder: 'Enter query name',\n },\n },\n ...makeErrorFields([error]),\n ]}\n />\n ) : null}\n </div>\n ) : null;\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport intersectionBy from 'lodash/intersectionBy';\nimport {QueriesListAuthorFilter} from '../../module/queries_list/types';\nimport {AllColumns, AuthorColumns, MyColumns, NameColumns} from './index';\nimport {setSettingByKey} from '../../../../store/actions/settings';\nimport {getQueryListHistoryColumns} from '../../module/queries_list/selectors';\n\nexport const useQueryHistoryListColumns = ({type}: {type?: QueriesListAuthorFilter}) => {\n const dispatch = useDispatch();\n const selectedColumns = useSelector(getQueryListHistoryColumns);\n\n const handleColumnChange = (selectedColumns: {\n items: Array<{checked: boolean; name: string}>;\n }) => {\n dispatch(\n setSettingByKey(\n `global::queryTracker::history::Columns`,\n selectedColumns.items.filter(({checked}) => checked).map(({name}) => name),\n ),\n );\n };\n\n return React.useMemo(() => {\n const ALL_COLUMN_NAMES = intersectionBy(AllColumns, MyColumns, 'name').map(\n (item) => item.name,\n );\n const EXCLUDED_COLUMNS = [NameColumns.name, AuthorColumns.name];\n const currentColumnsPreset = type === QueriesListAuthorFilter.My ? MyColumns : AllColumns;\n\n const selectedColumnNames = new Set(\n Array.isArray(selectedColumns) ? selectedColumns : ALL_COLUMN_NAMES,\n );\n\n selectedColumnNames.add(NameColumns.name);\n selectedColumnNames.add(AuthorColumns.name);\n\n return {\n columns: currentColumnsPreset.filter(({name}) => selectedColumnNames.has(name)),\n allowedColumns: currentColumnsPreset\n .filter((item) => !EXCLUDED_COLUMNS.includes(item.name))\n .map(({name}) => ({name, checked: selectedColumnNames.has(name)})),\n handleColumnChange,\n };\n }, [type, selectedColumns]);\n};\n","import moment from 'moment';\nimport groupBy from 'lodash/groupBy';\nimport noop from 'lodash/noop';\nimport {Text} from '@gravity-ui/uikit';\nimport block from 'bem-cn-lite';\nimport React, {useCallback, useContext, useEffect, useMemo, useRef} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport DataTable, {Column, Settings} from '@gravity-ui/react-data-table';\nimport {QueryItem, QueryStatus} from '../../module/api';\nimport {refreshQueriesListIfNeeded} from '../../module/queries_list/actions';\nimport {getQueriesListTimestamp, getUncompletedItems} from '../../module/queries_list/selectors';\nimport {QueryStatusIcon} from '../../QueryStatus';\nimport hammer from '../../../../common/hammer';\n\nimport Pagination from '../../../../components/Pagination/Pagination';\nimport {QueriesPoolingContext} from '../../hooks/QueriesPooling/context';\nimport {formatTime} from '../../../../components/common/Timeline/util';\nimport {QueryEnginesNames} from '../../utils/query';\nimport DataTableYT from '../../../../components/DataTableYT/DataTableYT';\nimport {useQuriesHistoryFilter} from '../../hooks/QueryListFilter';\nimport {QueryDuration} from '../../QueryDuration';\nimport {useQueryNavigation} from '../../hooks/Query';\nimport {useQueriesPagination, useQueryList} from '../../hooks/QueriesList';\nimport EditQueryNameModal from '../EditQueryNameModal/EditQueryNameModal';\nimport {UPDATE_QUERIES_LIST} from '../../module/query-tracker-contants';\nimport {useQueryHistoryListColumns} from './useQueryListColumns';\n\nimport './index.scss';\n\nconst b = block('queries-history-list');\n\nconst itemBlock = block('query-history-item');\n\nfunction useQueriesHistoryUpdate() {\n const pollingContext = useContext(QueriesPoolingContext);\n const uncompletedItems = useSelector(getUncompletedItems);\n const dispatch = useDispatch();\n\n const queryListUpdateHandler = useMemo(\n () => (items: QueryItem[]) => {\n dispatch({\n type: UPDATE_QUERIES_LIST,\n data: items,\n });\n },\n [dispatch],\n );\n\n useEffect(\n function pollingEffect() {\n if (!uncompletedItems?.length) {\n return;\n }\n pollingContext.watch(uncompletedItems, queryListUpdateHandler);\n },\n [pollingContext, queryListUpdateHandler, uncompletedItems],\n );\n}\n\nfunction useRefreshHistoryList(timeout = 5000) {\n // Naive history list's polling impl\n const dispatch = useDispatch();\n useEffect(() => {\n let timer: ReturnType<typeof setTimeout>;\n function start() {\n timer = setTimeout(() => {\n dispatch(refreshQueriesListIfNeeded(start));\n }, timeout);\n }\n\n start();\n\n return () => {\n if (timer) {\n clearTimeout(timer);\n }\n };\n }, [timeout, dispatch]);\n}\n\nfunction useQueryHistoryList() {\n useRefreshHistoryList();\n useQueriesHistoryUpdate();\n return useQueryList();\n}\n\ntype HeaderTableItem = {header: string};\ntype TableItem = QueryItem | HeaderTableItem;\n\nconst isHeaderTableItem = (b: TableItem): b is HeaderTableItem => {\n return (b as HeaderTableItem).header !== undefined;\n};\n\nexport const NameColumns: Column<TableItem> = {\n name: 'Name',\n align: 'left',\n className: itemBlock('name_row'),\n render: ({row}) => {\n if (isHeaderTableItem(row)) {\n return <div className={itemBlock('separator')}>{row.header}</div>;\n }\n\n const name = row.annotations?.title;\n return (\n <div className={itemBlock('name')} title={name}>\n <QueryStatusIcon className={itemBlock('status-icon')} status={row.state} />\n <Text\n className={itemBlock('name-container')}\n color={name ? 'primary' : 'secondary'}\n ellipsis\n >\n {name || 'No name'}\n </Text>\n <EditQueryNameModal className={itemBlock('name-edit')} query={row} />\n </div>\n );\n },\n};\n\nconst TypeColumns: Column<TableItem> = {\n name: 'Type',\n align: 'center',\n width: 60,\n render: ({row}) => {\n if (isHeaderTableItem(row)) {\n return null;\n }\n\n return (\n <Text variant=\"body-1\" color=\"secondary\">\n {row.engine in QueryEnginesNames ? QueryEnginesNames[row.engine] : row.engine}\n </Text>\n );\n },\n};\n\nconst DurationColumns: Column<TableItem> = {\n name: 'Duration',\n align: 'left',\n width: 100,\n render: ({row}) => {\n if (isHeaderTableItem(row)) {\n return null;\n }\n\n if (row.state === QueryStatus.RUNNING) {\n return hammer.format.NO_VALUE;\n }\n return <QueryDuration query={row} />;\n },\n};\n\nconst StartedColumns: Column<TableItem> = {\n name: 'Started',\n align: 'left',\n width: 60,\n render: ({row}) => {\n if (isHeaderTableItem(row)) {\n return null;\n }\n\n return (\n <Text variant=\"body-1\" color=\"secondary\">\n {formatTime(row.start_time)}\n </Text>\n );\n },\n};\n\nexport const AuthorColumns: Column<TableItem> = {\n name: 'Author',\n align: 'left',\n width: 120,\n className: itemBlock('author_row'),\n render: ({row}) => {\n if (isHeaderTableItem(row)) {\n return null;\n }\n\n return (\n <Text variant=\"body-1\" ellipsis title={row.user}>\n {row.user}\n </Text>\n );\n },\n};\n\nconst ACOColumns: Column<TableItem> = {\n name: 'ACO',\n align: 'left',\n width: 60,\n className: itemBlock('access_control_object'),\n render: ({row}) => {\n if (isHeaderTableItem(row)) {\n return null;\n }\n\n const title = row.access_control_objects?.join(', ');\n\n return (\n <Text variant=\"body-1\" ellipsis title={title}>\n {title}\n </Text>\n );\n },\n};\n\nexport const MyColumns: Column<TableItem>[] = [\n NameColumns,\n TypeColumns,\n DurationColumns,\n StartedColumns,\n ACOColumns,\n];\nexport const AllColumns: Column<TableItem>[] = [\n NameColumns,\n TypeColumns,\n DurationColumns,\n AuthorColumns,\n StartedColumns,\n ACOColumns,\n];\n\nconst tableSettings: Settings = {\n displayIndices: false,\n sortable: false,\n stickyHead: DataTable.MOVING,\n syncHeadOnResize: true,\n};\n\nexport function QueriesHistoryList() {\n const [items, isLoading] = useQueryHistoryList();\n const [filter] = useQuriesHistoryFilter();\n const {columns} = useQueryHistoryListColumns({type: filter.user});\n const timestamp = useSelector(getQueriesListTimestamp);\n const {first, last, goBack, goNext, goFirst} = useQueriesPagination();\n const [selectedId, goToQuery] = useQueryNavigation();\n const scrollElemRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (scrollElemRef?.current) {\n scrollElemRef.current.scrollTop = 0;\n }\n }, [scrollElemRef, timestamp]);\n\n const setClassName = useCallback(\n (item: TableItem) => {\n if (isHeaderTableItem(item)) {\n return itemBlock({\n header: Boolean(item.header),\n });\n }\n\n return itemBlock({\n selected: item.id === selectedId,\n });\n },\n [selectedId],\n );\n\n const itemsByDate = useMemo(\n () =>\n Object.entries(\n groupBy(items, (item) => moment(item.start_time).format('DD MMMM YYYY')),\n ).reduce((ret, [header, items]) => {\n ret.push({\n header,\n });\n\n return ret.concat(items.map((item) => item));\n }, [] as Array<TableItem>),\n [items],\n );\n\n return (\n <div className={b()}>\n <div className={b('list-wrapper')} ref={scrollElemRef}>\n <DataTableYT\n className={b('list')}\n loading={isLoading}\n columns={columns}\n data={itemsByDate}\n useThemeYT={true}\n rowKey={(row) => {\n if (isHeaderTableItem(row)) {\n return row.header;\n }\n\n return row.id;\n }}\n onRowClick={(item) => {\n if (!isHeaderTableItem(item)) {\n goToQuery(item);\n }\n }}\n disableRightGap={true}\n settings={tableSettings}\n rowClassName={setClassName}\n getColSpansOfRow={({row}) => {\n if (isHeaderTableItem(row)) {\n return {\n Name: columns.length,\n };\n }\n\n return undefined;\n }}\n />\n <div className={b('pagination')}>\n {(!first || !last) && (\n <Pagination\n size=\"m\"\n first={{\n handler: goFirst,\n disabled: first,\n }}\n previous={{\n handler: goBack,\n disabled: first,\n }}\n next={{\n handler: goNext,\n disabled: last,\n }}\n last={{\n handler: noop,\n disabled: true,\n }}\n />\n )}\n </div>\n </div>\n </div>\n );\n}\n","const SvgLearn = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 14\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M6.836 2.202 1.74 4.386a.396.396 0 0 0 0 .728l5.096 2.184a2.5 2.5 0 0 0 .985.202h.358a2.5 2.5 0 0 0 .985-.202l5.096-2.184a.396.396 0 0 0 0-.728L9.164 2.202A2.5 2.5 0 0 0 8.179 2h-.358a2.5 2.5 0 0 0-.985.202M1.5 6.642l1.5.644v3.228a2 2 0 0 0 1.106 1.789l.806.403a7 7 0 0 0 6.193.033l.909-.442a2 2 0 0 0 1.125-1.798V7.226l1.712-.734a1.896 1.896 0 0 0 0-3.484L9.755.823A4 4 0 0 0 8.179.5h-.358a4 4 0 0 0-1.576.323L1.15 3.008A1.9 1.9 0 0 0 0 4.75v4.5a.75.75 0 0 0 1.5 0zm3 3.872V7.929l1.745.748A4 4 0 0 0 7.821 9h.358a4 4 0 0 0 1.576-.323l1.884-.808v2.63a.5.5 0 0 1-.282.45l-.909.442a5.5 5.5 0 0 1-4.865-.027l-.807-.403a.5.5 0 0 1-.276-.447\" clipRule=\"evenodd\" /></svg>;\nexport default SvgLearn;","import React, {useMemo} from 'react';\nimport cn from 'bem-cn-lite';\nimport {Icon, List, ListItemData, Loader, Text} from '@gravity-ui/uikit';\nimport {QueryItem} from '../../module/api';\nimport {useQueryList} from '../../hooks/QueriesList';\nimport {useQueryNavigation} from '../../hooks/Query';\nimport tutorialIcon from '../../../../assets/img/svg/learn.svg';\nimport './index.scss';\n\nconst itemCn = cn('query-tutorial-item');\nconst block = cn('queries-tutorial-list');\n\nfunction renderItem(item: QueryItem) {\n return (\n <>\n <Icon className={itemCn('icon')} data={tutorialIcon} />\n <Text className={itemCn('text')} ellipsis title={item?.annotations?.title}>\n {item?.annotations?.title || 'No name'}\n </Text>\n </>\n );\n}\n\nexport function QueriesTutorialList({className}: {className: string}) {\n const [items, isLoading] = useQueryList();\n\n const [selectedId, goToQuery] = useQueryNavigation();\n\n const selectedIndex = useMemo(() => {\n return items.findIndex((query) => query.id === selectedId);\n }, [selectedId, items]);\n\n const tutorialFilter = useMemo(() => {\n return (filter: string) => {\n return (item: ListItemData<QueryItem>) => {\n return (\n item?.annotations?.title\n ?.toLocaleLowerCase()\n .includes(filter.toLocaleLowerCase()) || false\n );\n };\n };\n }, []);\n\n return (\n <div className={block(null, className)}>\n <List\n className={block('list', {loading: isLoading})}\n filterable={true}\n filterClassName={block('filter')}\n filterPlaceholder={'Filter by name'}\n filterItem={tutorialFilter}\n virtualized={false}\n selectedItemIndex={selectedIndex}\n sortable={false}\n itemHeight={32}\n itemClassName={itemCn()}\n items={isLoading ? [] : items}\n renderItem={renderItem}\n onItemClick={goToQuery}\n />\n {isLoading && (\n <div className={block('loader')}>\n <Loader size=\"l\" />\n </div>\n )}\n </div>\n );\n}\n","import React, {useCallback, useMemo} from 'react';\nimport {ControlGroupOption, RadioButton} from '@gravity-ui/uikit';\nimport {Engines} from '../../module/api';\nimport {QueryEngine} from '../../module/engines';\nimport {QueryEnginesNames} from '../../utils/query';\n\nconst ALL_ENGINE_KEY = '__all';\n\nexport function QueryEngineFilter({\n value,\n onChange,\n className,\n engines = Engines,\n}: {\n engines?: QueryEngine[];\n value?: QueryEngine;\n className?: string;\n onChange: (value?: QueryEngine) => void;\n}) {\n const enginesList = useMemo<ControlGroupOption[]>(() => {\n return [\n {\n value: ALL_ENGINE_KEY,\n content: 'All',\n },\n ...engines.map((engine) => {\n return {\n value: engine,\n content: QueryEnginesNames[engine],\n };\n }),\n ];\n }, [engines]);\n\n const onChangeEngineFilter = useCallback(\n (engine: string) => {\n onChange(engine === ALL_ENGINE_KEY ? undefined : (engine as QueryEngine));\n },\n [onChange],\n );\n return (\n <RadioButton\n className={className}\n options={enginesList}\n value={value || ALL_ENGINE_KEY}\n onUpdate={onChangeEngineFilter}\n />\n );\n}\n","import {TextInput} from '@gravity-ui/uikit';\nimport debounce from 'lodash/debounce';\nimport React, {useEffect, useMemo, useState} from 'react';\n\nexport type QueryTextFilterProps = {\n value?: string;\n placeholder: string;\n onChange: (value?: string) => void;\n delay?: number;\n};\n\nexport function QueryTextFilter({value, placeholder, onChange, delay = 200}: QueryTextFilterProps) {\n const [pattern, setPattern] = useState<string>(value || '');\n\n const debouncedChange = useMemo(() => {\n return debounce((value: string) => {\n onChange(value);\n }, delay);\n }, [onChange, delay]);\n\n useEffect(() => {\n debouncedChange(pattern);\n return () => {\n debouncedChange.cancel();\n };\n }, [pattern, debouncedChange]);\n\n return (\n <TextInput\n placeholder={placeholder}\n value={pattern}\n onBlur={() => debouncedChange.flush()}\n onUpdate={setPattern}\n />\n );\n}\n","import React, {useCallback} from 'react';\nimport block from 'bem-cn-lite';\nimport {ControlGroupOption, Icon as GravityIcon, RadioButton, Tooltip} from '@gravity-ui/uikit';\nimport {QueriesListAuthorFilter, QueriesListMode} from '../../module/queries_list/types';\nimport CircleQuestionIcon from '@gravity-ui/icons/svgs/circle-question.svg';\n\nimport './index.scss';\nimport {QueryEngineFilter} from './QueryEngineFilter';\nimport {QueryEngine} from '../../module/engines';\nimport {QueryTextFilter} from './QueryTextFilter';\nimport {useQuriesHistoryFilter} from '../../hooks/QueryListFilter';\nimport Dropdown from '../../../../components/Dropdown/Dropdown';\nimport Button from '../../../../components/Button/Button';\nimport Icon from '../../../../components/Icon/Icon';\nimport ColumnSelector from '../../../../components/ColumnSelector/ColumnSelector';\nimport {useQueryHistoryListColumns} from '../QueriesHistoryList/useQueryListColumns';\n\nconst AuthorFilter: ControlGroupOption[] = [\n {\n value: QueriesListAuthorFilter.My,\n content: 'My',\n },\n {\n value: QueriesListAuthorFilter.All,\n content: 'All',\n },\n];\n\nconst b = block('queries-history-filter');\n\ntype QueriesHistoryListFilterProps = {\n className?: string;\n};\n\nexport function QueriesHistoryListFilter({className}: QueriesHistoryListFilterProps) {\n const [filter, filterViewMode, onChange] = useQuriesHistoryFilter();\n const {allowedColumns, handleColumnChange} = useQueryHistoryListColumns({type: filter.user});\n\n const onChangeAuthorFilter = useCallback(\n (user: string) => {\n onChange('user', user as QueriesListAuthorFilter);\n },\n [onChange],\n );\n const onChangeEngineFilter = useCallback(\n (engine?: QueryEngine) => {\n onChange('engine', engine);\n },\n [onChange],\n );\n const onChangeTextFilter = useCallback(\n (text?: string) => {\n onChange('filter', text || undefined);\n },\n [onChange],\n );\n return (\n <div className={b(null, className)}>\n <div className={b('row')}>\n {filterViewMode === QueriesListMode.History && (\n <RadioButton\n options={AuthorFilter}\n value={filter?.user || QueriesListAuthorFilter.My}\n onUpdate={onChangeAuthorFilter}\n />\n )}\n <QueryEngineFilter value={filter?.engine} onChange={onChangeEngineFilter} />\n </div>\n {filterViewMode === QueriesListMode.History && (\n <div className={b('row')}>\n <QueryTextFilter\n placeholder=\"Search in query name, body and access control\"\n value={filter?.filter}\n onChange={onChangeTextFilter}\n />\n <Tooltip\n content={\n <>\n Search in query text, annotations and access control\n <br />\n Use `"title"="test_name"` to search in query\n name\n <br />\n Use `aco:nobody` to search in query access control\n </>\n }\n >\n <GravityIcon data={CircleQuestionIcon} size={16} />\n </Tooltip>\n <Dropdown\n trigger=\"click\"\n directions={['bottom']}\n button={\n <Button pin={'round-round'} className={b('columns-button')}>\n <Icon awesome=\"table\" face=\"light\" />\n </Button>\n }\n template={\n <ColumnSelector items={allowedColumns} onChange={handleColumnChange} />\n }\n />\n </div>\n )}\n </div>\n );\n}\n","import {lazy} from 'react';\nimport withLazyLoading from '../../../hocs/withLazyLoading';\n\nfunction importVcs() {\n return import(/* webpackChunkName: \"vcs\" */ './Vcs');\n}\n\nexport const Vcs = withLazyLoading(\n lazy(async () => {\n return {default: (await importVcs()).Vcs};\n }),\n);\n","import {lazy} from 'react';\nimport withLazyLoading from '../../../hocs/withLazyLoading';\n\nfunction importVcs() {\n return import(/* webpackChunkName: \"query-navigation\" */ './Navigation');\n}\n\nexport const Navigation = withLazyLoading(\n lazy(async () => {\n return {default: (await importVcs()).Navigation};\n }),\n);\n","import React, {useCallback, useEffect, useMemo} from 'react';\nimport block from 'bem-cn-lite';\nimport {Tabs, TabsItemProps} from '@gravity-ui/uikit';\nimport {QueriesHistoryList} from './QueriesHistoryList';\n\nimport {getQueriesListMode} from '../module/queries_list/selectors';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {QueriesListMode, QueriesListModes} from '../module/queries_list/types';\nimport {applyListMode, requestQueriesList} from '../module/queries_list/actions';\n\nimport './index.scss';\nimport {QueriesTutorialList} from './QueriesTutorialList';\nimport {QueriesHistoryListFilter} from './QueriesListFilter';\nimport {Vcs} from '../Vcs';\nimport {Navigation} from '../Navigation';\n\nconst b = block('queires-list');\n\nconst TabNames = {\n [QueriesListMode.History]: 'History',\n [QueriesListMode.Tutorials]: 'Tutorials',\n [QueriesListMode.VCS]: 'VCS',\n [QueriesListMode.Navigation]: 'Navigation',\n};\n\nconst useQueryTabs = (): [TabsItemProps[], string, (tab: string) => void] => {\n const dispatch = useDispatch();\n const selectedTab = useSelector(getQueriesListMode);\n const setTab = useCallback(\n (tab: string) => {\n dispatch(applyListMode(tab as QueriesListMode));\n },\n [dispatch],\n );\n\n const tabOptions = useMemo<TabsItemProps[]>(() => {\n return QueriesListModes.map((tab) => {\n return {\n id: tab as unknown as string,\n title: TabNames[tab],\n };\n });\n }, []);\n return [tabOptions, (selectedTab || QueriesListMode.History).toString(), setTab];\n};\n\nexport function QueriesList() {\n const [tabs, tab, setTab] = useQueryTabs();\n\n const dispatch = useDispatch();\n useEffect(() => {\n dispatch(requestQueriesList());\n }, [dispatch]);\n\n const isVsc = tab === QueriesListMode.VCS;\n\n if (tab === QueriesListMode.Navigation)\n return (\n <div className={b()}>\n <Tabs className={b('tabs')} items={tabs} activeTab={tab} onSelectTab={setTab} />\n <div className={b('content')}>\n <Navigation />\n </div>\n </div>\n );\n\n return (\n <div className={b()}>\n <Tabs className={b('tabs')} items={tabs} activeTab={tab} onSelectTab={setTab} />\n <div className={b('content')}>\n {!isVsc && <QueriesHistoryListFilter className={b('filter')} />}\n\n {tab === QueriesListMode.History && <QueriesHistoryList />}\n {tab === QueriesListMode.Tutorials && (\n <QueriesTutorialList className={b('list-content')} />\n )}\n {isVsc && <Vcs />}\n </div>\n </div>\n );\n}\n","const SvgLayoutColumns = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M8.75 3.5H12A1.5 1.5 0 0 1 13.5 5v6a1.5 1.5 0 0 1-1.5 1.5H8.75zm-1.5 0H4A1.5 1.5 0 0 0 2.5 5v6A1.5 1.5 0 0 0 4 12.5h3.25zM1 5a3 3 0 0 1 3-3h8a3 3 0 0 1 3 3v6a3 3 0 0 1-3 3H4a3 3 0 0 1-3-3z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgLayoutColumns;","import React, {FC, useRef} from 'react';\nimport {setFileEditor} from '../module/queryFilesForm/queryFilesFormSlice';\nimport {selectFileEditorConfig} from '../module/queryFilesForm/selectors';\nimport {changeQueryFile} from '../module/queryFilesForm/actions';\nimport {useDispatch, useSelector} from 'react-redux';\nimport FileIcon from '@gravity-ui/icons/svgs/file.svg';\nimport XmarkIcon from '@gravity-ui/icons/svgs/xmark.svg';\nimport SquareIcon from '@gravity-ui/icons/svgs/square.svg';\nimport LayoutColumnsIcon from '@gravity-ui/icons/svgs/layout-columns.svg';\nimport {Button, Icon, Text} from '@gravity-ui/uikit';\nimport './FileEditor.scss';\nimport cn from 'bem-cn-lite';\nimport MonacoEditor, {MonacoEditorConfig} from '../../../components/MonacoEditor';\nimport * as monaco from 'monaco-editor';\n\nconst block = cn('file-editor');\n\nconst MONACO_CONFIG: MonacoEditorConfig = {\n fontSize: 14,\n language: 'plaintext',\n renderWhitespace: 'boundary',\n minimap: {\n enabled: true,\n },\n};\n\nexport const FileEditor: FC = () => {\n const dispatch = useDispatch();\n const {fileEditor, file} = useSelector(selectFileEditorConfig);\n const editorRef = useRef<monaco.editor.IStandaloneCodeEditor>();\n\n const handleOnChange = (content: string) => {\n if (!file) return;\n dispatch(changeQueryFile({...file, content}));\n };\n\n const handleOnClose = () => {\n dispatch(setFileEditor({...fileEditor, isOpen: false, isFullWidth: false}));\n };\n\n const handleOnWidthToggle = () => {\n dispatch(setFileEditor({...fileEditor, isFullWidth: !fileEditor.isFullWidth}));\n };\n\n if (!file) return null;\n\n return (\n <div className={block()}>\n <div className={block('header')}>\n <div className={block('header-side')}>\n <Icon data={FileIcon} size={16} />\n <Text variant=\"subheader-1\" ellipsis>\n {file.name}\n </Text>\n </div>\n <div className={block('header-side')}>\n <Button view=\"flat\" onClick={handleOnWidthToggle}>\n <Icon\n data={fileEditor.isFullWidth ? LayoutColumnsIcon : SquareIcon}\n size={16}\n />\n </Button>\n <Button view=\"flat\" onClick={handleOnClose}>\n <Icon data={XmarkIcon} size={16} />\n </Button>\n </div>\n </div>\n <MonacoEditor\n className={block('editor')}\n editorRef={editorRef}\n value={file.content || ''}\n language=\"plaintext\"\n onChange={handleOnChange}\n monacoConfig={MONACO_CONFIG}\n />\n </div>\n );\n};\n","import React, {FC, useState} from 'react';\nimport QueryEditor from '../QueryEditor/QueryEditor';\nimport FlexSplitPane from '../../../components/FlexSplitPane/FlexSplitPane';\nimport {FileEditor} from '../FileEditor';\n\nconst EDITOR_INITIAL_SIZE = [50, 50];\n\ntype Props = {\n fileEditorFullWidth: boolean;\n fileEditorVisible: boolean;\n onStartQuery: (queryId: string) => void;\n};\n\nexport const QueryEditorSplit: FC<Props> = ({\n fileEditorFullWidth,\n fileEditorVisible,\n onStartQuery,\n}) => {\n const [sizes, setSize] = useState(EDITOR_INITIAL_SIZE);\n const hideQueryEditor = !(fileEditorVisible && fileEditorFullWidth);\n\n return (\n <FlexSplitPane\n direction={FlexSplitPane.HORIZONTAL}\n onResizeEnd={setSize}\n getInitialSizes={sizes}\n >\n {hideQueryEditor && <QueryEditor onStartQuery={onStartQuery} showStatusInTitle />}\n {fileEditorVisible && <FileEditor />}\n </FlexSplitPane>\n );\n};\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Route, Switch} from 'react-router';\nimport FlexSplitPane from '../../../components/FlexSplitPane/FlexSplitPane';\nimport {QueriesPooling} from '../hooks/QueriesPooling/context';\nimport {isEngine} from '../module/api';\nimport {QueryEngine} from '../module/engines';\nimport {\n SET_QUERY_PARAMS,\n createEmptyQuery,\n createQueryFromTablePath,\n goToQuery,\n loadQuery,\n} from '../module/query/actions';\nimport {usePreventUnload} from '../../../hooks/use-prevent-unload';\nimport {useQueriesListSidebarToggle} from '../hooks/QueriesList';\nimport {getDirtySinceLastSubmit, getQueryGetParams} from '../module/query/selectors';\nimport {QueriesList} from '../QueriesList';\nimport {useQueryACO} from '../QueryACO/useQueryACO';\nimport {MonacoContext} from '../context/MonacoContext';\n\nimport cn from 'bem-cn-lite';\n\nimport './QueryTracker.scss';\nimport {QueryEditorSplit} from './QueryEditorSplit';\nimport {selectFileEditor} from '../module/queryFilesForm/selectors';\nimport {selectNavigationCluster} from '../module/queryNavigation/selectors';\nimport {setSettingByKey} from '../../../store/actions/settings';\nimport {CellPreviewModal} from '../../../containers/CellPreviewModal/CellPreviewModal';\n\nconst b = cn('query-tracker-page');\n\ntype Props = {\n match: {\n path: string;\n params: {\n queryId?: string;\n };\n };\n location: {\n search: string;\n };\n};\n\nconst initialSizes = [23, 77];\nconst minSize = 380; // see history list's cells size\n\nfunction QueryPageDraft() {\n const dispatch = useDispatch();\n const routeParams = useSelector(getQueryGetParams);\n const cluster = useSelector(selectNavigationCluster);\n\n useEffect(() => {\n const engine =\n routeParams.engine && isEngine(routeParams.engine)\n ? (routeParams.engine as QueryEngine)\n : QueryEngine.YQL;\n if (routeParams.cluster && routeParams.path) {\n if (routeParams.useDraft) {\n dispatch({\n type: SET_QUERY_PARAMS,\n data: {\n params: {\n ...routeParams,\n useDraft: undefined,\n },\n },\n });\n }\n dispatch(\n createQueryFromTablePath(engine, routeParams.cluster, routeParams.path, {\n useDraft: true,\n }),\n );\n } else {\n dispatch(createEmptyQuery(engine));\n }\n if (cluster) {\n dispatch(\n setSettingByKey<boolean>(\n 'global::queryTracker::queriesListSidebarVisibilityMode',\n true,\n ),\n );\n }\n }, [dispatch]);\n return null;\n}\n\nfunction QueryPage(props: Props) {\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch({\n type: SET_QUERY_PARAMS,\n data: {\n params: {},\n },\n });\n if (props.match.params.queryId) {\n dispatch(loadQuery(props.match.params.queryId));\n } else {\n dispatch(createEmptyQuery());\n }\n }, [dispatch, props.match.params.queryId]);\n return null;\n}\n\nexport default function QueryTracker({match}: Props) {\n const {isQueriesListSidebarVisible} = useQueriesListSidebarToggle();\n const isQueryStateDirty = useSelector(getDirtySinceLastSubmit);\n const fileEditor = useSelector(selectFileEditor);\n usePreventUnload({shouldListen: isQueryStateDirty});\n const [sizes, setSize] = useState(initialSizes);\n const getSize = useMemo(() => {\n return () => sizes;\n }, [sizes]);\n const dispatch = useDispatch();\n const {loadQueryTrackerInfo} = useQueryACO();\n\n const goToCreatedQuery = useCallback(\n (queryId: string) => {\n dispatch(goToQuery(queryId));\n return true;\n },\n [dispatch],\n );\n\n useEffect(() => {\n loadQueryTrackerInfo();\n }, []);\n\n return (\n <>\n <Switch>\n <Route exact path={match.path} component={QueryPageDraft} />\n <Route path={`${match.path}/:queryId`} component={QueryPage} />\n </Switch>\n <MonacoContext.Provider value={new Map()}>\n <QueriesPooling>\n <FlexSplitPane\n className={b('container')}\n direction={FlexSplitPane.HORIZONTAL}\n onResizeEnd={setSize}\n minSize={minSize}\n getInitialSizes={getSize}\n >\n {isQueriesListSidebarVisible ? <QueriesList /> : null}\n <QueryEditorSplit\n fileEditorFullWidth={fileEditor.isFullWidth}\n fileEditorVisible={fileEditor.isOpen}\n onStartQuery={goToCreatedQuery}\n />\n </FlexSplitPane>\n </QueriesPooling>\n </MonacoContext.Provider>\n <CellPreviewModal />\n </>\n );\n}\n","import {createSelector} from 'reselect';\nimport {getSettingsData} from '../../../../store/selectors/settings-base';\n\nexport const getSettingQueryTrackerQueriesListSidebarVisibilityMode = createSelector(\n getSettingsData,\n (settings) => Boolean(settings['global::queryTracker::queriesListSidebarVisibilityMode']),\n);\n","import {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {QueriesHistoryCursorDirection, QueryItem} from '../../module/api';\nimport {\n getQueriesList,\n getQueriesListCursor,\n hasQueriesListMore,\n isQueriesListLoading,\n} from '../../module/queries_list/selectors';\nimport {loadNextQueriesList, resetCursor} from '../../module/queries_list/actions';\nimport {setSettingByKey} from '../../../../store/actions/settings';\nimport {getSettingQueryTrackerQueriesListSidebarVisibilityMode} from '../../module/settings/selector';\n\nexport function useQueryList(): [QueryItem[], boolean] {\n const items = useSelector(getQueriesList);\n const isLoading = useSelector(isQueriesListLoading);\n\n return [items, isLoading];\n}\n\nexport const useQueriesPagination = () => {\n const dispatch = useDispatch();\n const cursor = useSelector(getQueriesListCursor);\n const hasNext = useSelector(hasQueriesListMore);\n\n const goNext = useCallback(() => {\n dispatch(loadNextQueriesList(QueriesHistoryCursorDirection.PAST));\n }, [dispatch]);\n\n const goBack = useCallback(() => {\n dispatch(loadNextQueriesList(QueriesHistoryCursorDirection.FUTURE));\n }, [dispatch]);\n\n const reset = useCallback(() => {\n dispatch(resetCursor());\n }, [dispatch]);\n\n return {\n first: !cursor?.cursorTime,\n last: !hasNext,\n currentCursorTime: cursor?.cursorTime,\n goNext,\n goBack,\n goFirst: reset,\n };\n};\n\nexport const useQueriesListSidebarToggle = () => {\n const dispatch = useDispatch();\n const isQueriesListSidebarVisible = useSelector(\n getSettingQueryTrackerQueriesListSidebarVisibilityMode,\n );\n\n const toggleQueriesListSideBarToggle = () => {\n dispatch(\n setSettingByKey<boolean>(\n 'global::queryTracker::queriesListSidebarVisibilityMode',\n !isQueriesListSidebarVisible,\n ),\n );\n };\n\n return {\n isQueriesListSidebarVisible,\n toggleQueriesListSideBarToggle,\n };\n};\n","import {RootState} from '../../../../store/reducers';\nimport {createSelector} from 'reselect';\nimport {getClusterList} from '../../../../store/selectors/slideoutMenu';\nimport {NavigationNode} from './queryNavigationSlice';\nimport {makeGetSetting} from '../../../../store/selectors/settings';\nimport {createNestedNS} from '../../../../../shared/utils/settings';\nimport {NAMESPACES, SettingName} from '../../../../../shared/constants/settings';\n\nexport const selectNavigationCluster = (state: RootState) =>\n state.queryTracker.queryNavigation.cluster;\n\nexport const selectClusterConfigs = (state: RootState) => state.clustersMenu.clusters;\n\nexport const selectNavigationClusterConfig = createSelector(\n [selectNavigationCluster, selectClusterConfigs],\n (clusterName, clusters) => {\n if (!clusterName || !(clusterName in clusters)) return null;\n\n return clusters[clusterName];\n },\n);\n\nexport const selectFavouritePaths = createSelector(\n [makeGetSetting, selectNavigationCluster],\n (getSetting, cluster) => {\n if (!cluster) return [];\n const parentNS = createNestedNS(cluster, NAMESPACES.LOCAL);\n const favourites = getSetting(SettingName.LOCAL.FAVOURITES, parentNS);\n\n return favourites ? favourites.map((i: {path: string}) => i.path).sort() : [];\n },\n);\n\nexport const selectNavigationPath = (state: RootState) => state.queryTracker.queryNavigation.path;\n\nexport const selectNavigationNodeType = (state: RootState) =>\n state.queryTracker.queryNavigation.nodeType;\n\nexport const selectNavigationFilter = (state: RootState) =>\n state.queryTracker.queryNavigation.filter;\n\nexport const selectNavigationNodes = (state: RootState) => state.queryTracker.queryNavigation.nodes;\n\nexport const selectNavigationTable = (state: RootState) => state.queryTracker.queryNavigation.table;\n\nconst filterValueInText = (value: string, filter: string) =>\n value.toLowerCase().includes(filter.toLowerCase());\n\nexport const selectTableWithFilter = createSelector(\n [selectNavigationTable, selectNavigationFilter],\n (table, filter) => {\n if (!table) return null;\n\n return {\n ...table,\n schema: table.schema.filter(({name, type}) => {\n return filterValueInText(name, filter) || filterValueInText(type, filter);\n }),\n };\n },\n);\n\nexport const selectClustersByFilter = createSelector(\n [getClusterList, selectNavigationFilter],\n (clusters, filter) => {\n if (!filter) return clusters;\n\n return clusters.filter(({name}) => filterValueInText(name, filter));\n },\n);\n\nexport const selectNodeListByFilter = createSelector(\n [selectNavigationNodes, selectNavigationFilter, selectNavigationPath],\n (nodes, filter, path) => {\n const isRoot = !path || path === '/';\n const parentPath = isRoot ? path : path.split('/').slice(0, -1).join('/');\n const upItem: NavigationNode = {\n name: '...',\n type: 'map_node',\n path: parentPath,\n isFavorite: false,\n };\n\n if (!filter) return isRoot ? nodes : [upItem, ...nodes];\n\n const result = nodes.filter(({name}) => filterValueInText(name, filter));\n\n if (!isRoot) {\n result.unshift(upItem);\n }\n\n return result;\n },\n);\n"],"names":["usePreventUnload","_ref","shouldListen","beforeUnloadHandler","useCallback","e","preventDefault","returnValue","useEffect","window","addEventListener","removeEventListener","useQuriesHistoryFilter","filter","useSelector","getQueriesListFilter","filterPreset","getQueriesListMode","dispatch","useDispatch","name","value","applyFilter","_defineProperty","useQueryNavigation","selectedItem","getQuery","cluster","getCluster","history","useHistory","goToQuery","item","push","createQueryUrl","id","EditQueryNameModal","_query$annotations2","query","className","_useState","useState","undefined","_useState2","_slicedToArray","error","setError","_useState3","_useState4","visible","setVisible","state","useThunkDispatch","initialValues","useMemo","_query$annotations","annotations","title","_jsxs","onClick","event","stopPropagation","onKeyDown","children","_jsx","Button","view","size","width","Icon","awesome","YTDFDialog","pristineSubmittable","modal","headerProps","footerProps","textApply","onClose","onAdd","form","getState","values","setQueryName","_objectSpread","err","fields","type","required","caption","extras","placeholder","concat","_toConsumableArray","makeErrorFields","useQueryHistoryListColumns","selectedColumns","getQueryListHistoryColumns","handleColumnChange","setSettingByKey","items","_ref2","checked","map","_ref3","React","ALL_COLUMN_NAMES","intersectionBy","AllColumns","MyColumns","EXCLUDED_COLUMNS","NameColumns","AuthorColumns","currentColumnsPreset","QueriesListAuthorFilter","My","selectedColumnNames","Set","Array","isArray","add","columns","_ref4","has","allowedColumns","includes","_ref5","b","block","itemBlock","isHeaderTableItem","header","align","render","_row$annotations","row","QueryStatusIcon","status","Text","color","ellipsis","TypeColumns","variant","engine","QueryEnginesNames","DurationColumns","QueryStatus","RUNNING","hammer","format","NO_VALUE","QueryDuration","StartedColumns","formatTime","start_time","user","ACOColumns","_ref6","_row$access_control_o","access_control_objects","join","tableSettings","displayIndices","sortable","stickyHead","DataTable","MOVING","syncHeadOnResize","QueriesHistoryList","pollingContext","uncompletedItems","queryListUpdateHandler","_useQueryHistoryList","timeout","arguments","length","timer","start","setTimeout","refreshQueriesListIfNeeded","clearTimeout","useRefreshHistoryList","useContext","QueriesPoolingContext","getUncompletedItems","UPDATE_QUERIES_LIST","data","watch","useQueryList","_useQueryHistoryList2","isLoading","_useQuriesHistoryFilt","timestamp","getQueriesListTimestamp","_useQueriesPagination","useQueriesPagination","first","last","goBack","goNext","goFirst","_useQueryNavigation","_useQueryNavigation2","selectedId","scrollElemRef","useRef","current","scrollTop","setClassName","Boolean","selected","itemsByDate","Object","entries","groupBy","moment","reduce","ret","_ref7","_ref8","ref","DataTableYT","loading","useThemeYT","rowKey","onRowClick","disableRightGap","settings","rowClassName","getColSpansOfRow","_ref9","Name","Pagination","handler","disabled","previous","next","noop","props","xmlns","fill","viewBox","fillRule","d","clipRule","itemCn","cn","renderItem","_item$annotations","_item$annotations2","_Fragment","tutorialIcon","QueriesTutorialList","_useQueryList","_useQueryList2","selectedIndex","findIndex","tutorialFilter","_item$annotations3","toLocaleLowerCase","List","filterable","filterClassName","filterPlaceholder","filterItem","virtualized","selectedItemIndex","itemHeight","itemClassName","onItemClick","Loader","ALL_ENGINE_KEY","QueryEngineFilter","onChange","_ref$engines","engines","Engines","enginesList","content","onChangeEngineFilter","RadioButton","options","onUpdate","QueryTextFilter","_ref$delay","delay","pattern","setPattern","debouncedChange","debounce","cancel","TextInput","onBlur","flush","AuthorFilter","All","QueriesHistoryListFilter","_useQuriesHistoryFilt2","filterViewMode","_useQueryHistoryListC","onChangeAuthorFilter","onChangeTextFilter","text","QueriesListMode","History","Tooltip","GravityIcon","CircleQuestionIcon","Dropdown","trigger","directions","button","pin","face","template","ColumnSelector","Vcs","withLazyLoading","lazy","_asyncToGenerator","_regeneratorRuntime","_callee","_context","prev","t0","sent","abrupt","stop","Navigation","TabNames","_TabNames","Tutorials","VCS","useQueryTabs","selectedTab","setTab","tab","applyListMode","QueriesListModes","toString","QueriesList","_useQueryTabs","_useQueryTabs2","tabs","requestQueriesList","isVsc","Tabs","activeTab","onSelectTab","MONACO_CONFIG","fontSize","language","renderWhitespace","minimap","enabled","FileEditor","_useSelector","selectFileEditorConfig","fileEditor","file","editorRef","FileIcon","setFileEditor","isFullWidth","LayoutColumnsIcon","SquareIcon","isOpen","XmarkIcon","MonacoEditor","changeQueryFile","monacoConfig","EDITOR_INITIAL_SIZE","QueryEditorSplit","fileEditorFullWidth","fileEditorVisible","onStartQuery","sizes","setSize","hideQueryEditor","FlexSplitPane","direction","HORIZONTAL","onResizeEnd","getInitialSizes","QueryEditor","showStatusInTitle","initialSizes","minSize","QueryPageDraft","routeParams","getQueryGetParams","selectNavigationCluster","isEngine","QueryEngine","YQL","path","useDraft","SET_QUERY_PARAMS","params","createQueryFromTablePath","createEmptyQuery","QueryPage","match","queryId","loadQuery","QueryTracker","isQueriesListSidebarVisible","useQueriesListSidebarToggle","isQueryStateDirty","getDirtySinceLastSubmit","selectFileEditor","getSize","loadQueryTrackerInfo","useQueryACO","goToCreatedQuery","Switch","Route","exact","component","MonacoContext","Provider","Map","QueriesPooling","CellPreviewModal","getSettingQueryTrackerQueriesListSidebarVisibilityMode","createSelector","getSettingsData","getQueriesList","isQueriesListLoading","cursor","getQueriesListCursor","hasNext","hasQueriesListMore","loadNextQueriesList","QueriesHistoryCursorDirection","PAST","FUTURE","reset","resetCursor","cursorTime","currentCursorTime","toggleQueriesListSideBarToggle","queryTracker","queryNavigation","selectNavigationClusterConfig","clustersMenu","clusters","clusterName","selectFavouritePaths","makeGetSetting","getSetting","parentNS","createNestedNS","NAMESPACES","LOCAL","favourites","SettingName","FAVOURITES","i","sort","selectNavigationPath","selectNavigationNodeType","nodeType","selectNavigationFilter","selectNavigationNodes","nodes","filterValueInText","toLowerCase","selectTableWithFilter","table","schema","selectClustersByFilter","getClusterList","selectNodeListByFilter","isRoot","upItem","split","slice","isFavorite","result","unshift"],"sourceRoot":""}
|
1
|
+
{"version":3,"file":"js/1059.68590ad9.chunk.js","mappings":"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","sources":["webpack://@ytsaurus/ui/./src/ui/hooks/use-prevent-unload.ts","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/hooks/QueryListFilter/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/hooks/Query/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QueriesList/EditQueryNameModal/EditQueryNameModal.tsx","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QueriesList/QueriesHistoryList/useQueryListColumns.ts","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QueriesList/QueriesHistoryList/index.tsx","webpack://@ytsaurus/ui/./src/ui/assets/img/svg/learn.svg","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QueriesList/QueriesTutorialList/index.tsx","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QueriesList/QueriesListFilter/QueryEngineFilter.tsx","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QueriesList/QueriesListFilter/QueryTextFilter.tsx","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QueriesList/QueriesListFilter/index.tsx","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/Vcs/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/Navigation/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QueriesList/index.tsx","webpack://@ytsaurus/ui/./node_modules/@gravity-ui/icons/svgs/layout-columns.svg","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/FileEditor/FileEditor.tsx","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QueryTracker/QueryEditorSplit.tsx","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/QueryTracker/QueryTracker.tsx","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/module/settings/selector.ts","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/hooks/QueriesList/index.ts","webpack://@ytsaurus/ui/./src/ui/pages/query-tracker/module/queryNavigation/selectors.ts"],"sourcesContent":["import {useCallback, useEffect} from 'react';\n\nexport const usePreventUnload = ({shouldListen}: {shouldListen: boolean}) => {\n const beforeUnloadHandler = useCallback((e: BeforeUnloadEvent) => {\n e.preventDefault();\n\n // Included for legacy support, e.g. Chrome/Edge < 119\n e.returnValue = true;\n }, []);\n\n useEffect(() => {\n if (shouldListen) {\n window.addEventListener('beforeunload', beforeUnloadHandler);\n }\n\n return () => window.removeEventListener('beforeunload', beforeUnloadHandler);\n }, [shouldListen]);\n};\n","import {useDispatch, useSelector} from 'react-redux';\nimport {useCallback} from 'react';\nimport {applyFilter} from '../../module/queries_list/actions';\nimport {getQueriesListFilter, getQueriesListMode} from '../../module/queries_list/selectors';\nimport {QueriesListFilter, QueriesListMode} from '../../module/queries_list/types';\n\nexport const useQuriesHistoryFilter = (): [\n QueriesListFilter,\n QueriesListMode,\n <K extends keyof QueriesListFilter>(filter: K, value: QueriesListFilter[K]) => void,\n] => {\n const filter = useSelector(getQueriesListFilter);\n const filterPreset = useSelector(getQueriesListMode);\n const dispatch = useDispatch();\n const setFilter = useCallback(\n function setFilter<K extends keyof QueriesListFilter>(\n name: K,\n value: QueriesListFilter[K],\n ) {\n dispatch(\n applyFilter({\n [name]: value,\n }),\n );\n },\n [dispatch],\n );\n return [filter, filterPreset, setFilter];\n};\n","import {useCallback} from 'react';\nimport {useSelector} from 'react-redux';\nimport {useHistory} from 'react-router';\nimport {createQueryUrl} from '../../utils/navigation';\nimport {QueryItem} from '../../module/api';\nimport {getCluster} from '../../../../store/selectors/global';\nimport {getQuery} from '../../module/query/selectors';\n\nexport const useQueryNavigation = (): [QueryItem['id'] | undefined, (id: QueryItem) => void] => {\n const selectedItem = useSelector(getQuery);\n const cluster = useSelector(getCluster);\n const history = useHistory();\n\n const goToQuery = useCallback(\n (item: QueryItem) => {\n history.push(createQueryUrl(cluster, item.id));\n },\n [history],\n );\n\n return [selectedItem?.id, goToQuery];\n};\n","import React, {useMemo, useState} from 'react';\nimport {YTDFDialog, makeErrorFields} from '../../../../components/Dialog/Dialog';\nimport Button from '../../../../components/Button/Button';\nimport Icon from '../../../../components/Icon/Icon';\nimport _ from 'lodash';\nimport {QueryItem, setQueryName} from '../../module/api';\nimport {useThunkDispatch} from '../../../../store/thunkDispatch';\n\nexport interface Props {\n query: QueryItem;\n className?: string;\n}\n\ninterface FormValues {\n name: string;\n}\n\nexport default function EditQueryNameModal({query, className}: Props) {\n const [error, setError] = useState(undefined);\n const [visible, setVisible] = useState(false);\n const {state} = query;\n\n const dispatch = useThunkDispatch();\n\n const initialValues = useMemo(() => {\n return {\n name: query.annotations?.title || '',\n };\n }, [query.annotations?.title]);\n\n const handleSubmit = (name: string) => {\n return dispatch(setQueryName(query.id, {...query.annotations, title: name}));\n };\n\n return state === 'completed' || state === 'failed' || state === 'draft' ? (\n <div\n className={className}\n onClick={(event) => {\n event.stopPropagation();\n }}\n onKeyDown={(event) => {\n event.stopPropagation();\n }}\n >\n <Button\n onClick={() => {\n setVisible(true);\n }}\n view={'flat-secondary'}\n size={'m'}\n width={'auto'}\n >\n <Icon awesome=\"pencil\"></Icon>\n </Button>\n {visible ? (\n <YTDFDialog<FormValues>\n pristineSubmittable\n visible={visible}\n modal={true}\n headerProps={{title: 'Edit query name'}}\n footerProps={{textApply: 'Save'}}\n onClose={() => {\n setError(undefined);\n setVisible(false);\n }}\n onAdd={(form) => {\n const {name} = form.getState().values;\n return handleSubmit(name).catch((err) => {\n setError(err);\n throw err;\n });\n }}\n initialValues={initialValues}\n fields={[\n {\n name: 'name',\n type: 'text',\n required: true,\n caption: 'Name',\n extras: {\n placeholder: 'Enter query name',\n },\n },\n ...makeErrorFields([error]),\n ]}\n />\n ) : null}\n </div>\n ) : null;\n}\n","import React from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport intersectionBy from 'lodash/intersectionBy';\nimport {QueriesListAuthorFilter} from '../../module/queries_list/types';\nimport {AllColumns, AuthorColumns, MyColumns, NameColumns} from './index';\nimport {setSettingByKey} from '../../../../store/actions/settings';\nimport {getQueryListHistoryColumns} from '../../module/queries_list/selectors';\n\nexport const useQueryHistoryListColumns = ({type}: {type?: QueriesListAuthorFilter}) => {\n const dispatch = useDispatch();\n const selectedColumns = useSelector(getQueryListHistoryColumns);\n\n const handleColumnChange = (selectedColumns: {\n items: Array<{checked: boolean; name: string}>;\n }) => {\n dispatch(\n setSettingByKey(\n `global::queryTracker::history::Columns`,\n selectedColumns.items.filter(({checked}) => checked).map(({name}) => name),\n ),\n );\n };\n\n return React.useMemo(() => {\n const ALL_COLUMN_NAMES = intersectionBy(AllColumns, MyColumns, 'name').map(\n (item) => item.name,\n );\n const EXCLUDED_COLUMNS = [NameColumns.name, AuthorColumns.name];\n const currentColumnsPreset = type === QueriesListAuthorFilter.My ? MyColumns : AllColumns;\n\n const selectedColumnNames = new Set(\n Array.isArray(selectedColumns) ? selectedColumns : ALL_COLUMN_NAMES,\n );\n\n selectedColumnNames.add(NameColumns.name);\n selectedColumnNames.add(AuthorColumns.name);\n\n return {\n columns: currentColumnsPreset.filter(({name}) => selectedColumnNames.has(name)),\n allowedColumns: currentColumnsPreset\n .filter((item) => !EXCLUDED_COLUMNS.includes(item.name))\n .map(({name}) => ({name, checked: selectedColumnNames.has(name)})),\n handleColumnChange,\n };\n }, [type, selectedColumns]);\n};\n","import moment from 'moment';\nimport groupBy from 'lodash/groupBy';\nimport noop from 'lodash/noop';\nimport {Text} from '@gravity-ui/uikit';\nimport block from 'bem-cn-lite';\nimport React, {useCallback, useContext, useEffect, useMemo, useRef} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport DataTable, {Column, Settings} from '@gravity-ui/react-data-table';\nimport {QueryItem, QueryStatus} from '../../module/api';\nimport {refreshQueriesListIfNeeded} from '../../module/queries_list/actions';\nimport {getQueriesListTimestamp, getUncompletedItems} from '../../module/queries_list/selectors';\nimport {QueryStatusIcon} from '../../QueryStatus';\nimport hammer from '../../../../common/hammer';\n\nimport Pagination from '../../../../components/Pagination/Pagination';\nimport {QueriesPoolingContext} from '../../hooks/QueriesPooling/context';\nimport {formatTime} from '../../../../components/common/Timeline/util';\nimport {QueryEnginesNames} from '../../utils/query';\nimport DataTableYT from '../../../../components/DataTableYT/DataTableYT';\nimport {useQuriesHistoryFilter} from '../../hooks/QueryListFilter';\nimport {QueryDuration} from '../../QueryDuration';\nimport {useQueryNavigation} from '../../hooks/Query';\nimport {useQueriesPagination, useQueryList} from '../../hooks/QueriesList';\nimport EditQueryNameModal from '../EditQueryNameModal/EditQueryNameModal';\nimport {UPDATE_QUERIES_LIST} from '../../module/query-tracker-contants';\nimport {useQueryHistoryListColumns} from './useQueryListColumns';\n\nimport './index.scss';\n\nconst b = block('queries-history-list');\n\nconst itemBlock = block('query-history-item');\n\nfunction useQueriesHistoryUpdate() {\n const pollingContext = useContext(QueriesPoolingContext);\n const uncompletedItems = useSelector(getUncompletedItems);\n const dispatch = useDispatch();\n\n const queryListUpdateHandler = useMemo(\n () => (items: QueryItem[]) => {\n dispatch({\n type: UPDATE_QUERIES_LIST,\n data: items,\n });\n },\n [dispatch],\n );\n\n useEffect(\n function pollingEffect() {\n if (!uncompletedItems?.length) {\n return;\n }\n pollingContext.watch(uncompletedItems, queryListUpdateHandler);\n },\n [pollingContext, queryListUpdateHandler, uncompletedItems],\n );\n}\n\nfunction useRefreshHistoryList(timeout = 5000) {\n // Naive history list's polling impl\n const dispatch = useDispatch();\n useEffect(() => {\n let timer: ReturnType<typeof setTimeout>;\n function start() {\n timer = setTimeout(() => {\n dispatch(refreshQueriesListIfNeeded(start));\n }, timeout);\n }\n\n start();\n\n return () => {\n if (timer) {\n clearTimeout(timer);\n }\n };\n }, [timeout, dispatch]);\n}\n\nfunction useQueryHistoryList() {\n useRefreshHistoryList();\n useQueriesHistoryUpdate();\n return useQueryList();\n}\n\ntype HeaderTableItem = {header: string};\ntype TableItem = QueryItem | HeaderTableItem;\n\nconst isHeaderTableItem = (b: TableItem): b is HeaderTableItem => {\n return (b as HeaderTableItem).header !== undefined;\n};\n\nexport const NameColumns: Column<TableItem> = {\n name: 'Name',\n align: 'left',\n className: itemBlock('name_row'),\n render: ({row}) => {\n if (isHeaderTableItem(row)) {\n return <div className={itemBlock('separator')}>{row.header}</div>;\n }\n\n const name = row.annotations?.title;\n return (\n <div className={itemBlock('name')} title={name}>\n <QueryStatusIcon className={itemBlock('status-icon')} status={row.state} />\n <Text\n className={itemBlock('name-container')}\n color={name ? 'primary' : 'secondary'}\n ellipsis\n >\n {name || 'No name'}\n </Text>\n <EditQueryNameModal className={itemBlock('name-edit')} query={row} />\n </div>\n );\n },\n};\n\nconst TypeColumns: Column<TableItem> = {\n name: 'Type',\n align: 'center',\n width: 60,\n render: ({row}) => {\n if (isHeaderTableItem(row)) {\n return null;\n }\n\n return (\n <Text variant=\"body-1\" color=\"secondary\">\n {row.engine in QueryEnginesNames ? QueryEnginesNames[row.engine] : row.engine}\n </Text>\n );\n },\n};\n\nconst DurationColumns: Column<TableItem> = {\n name: 'Duration',\n align: 'left',\n width: 100,\n render: ({row}) => {\n if (isHeaderTableItem(row)) {\n return null;\n }\n\n if (row.state === QueryStatus.RUNNING) {\n return hammer.format.NO_VALUE;\n }\n return <QueryDuration query={row} />;\n },\n};\n\nconst StartedColumns: Column<TableItem> = {\n name: 'Started',\n align: 'left',\n width: 60,\n render: ({row}) => {\n if (isHeaderTableItem(row)) {\n return null;\n }\n\n return (\n <Text variant=\"body-1\" color=\"secondary\">\n {formatTime(row.start_time)}\n </Text>\n );\n },\n};\n\nexport const AuthorColumns: Column<TableItem> = {\n name: 'Author',\n align: 'left',\n width: 120,\n className: itemBlock('author_row'),\n render: ({row}) => {\n if (isHeaderTableItem(row)) {\n return null;\n }\n\n return (\n <Text variant=\"body-1\" ellipsis title={row.user}>\n {row.user}\n </Text>\n );\n },\n};\n\nconst ACOColumns: Column<TableItem> = {\n name: 'ACO',\n align: 'left',\n width: 60,\n className: itemBlock('access_control_object'),\n render: ({row}) => {\n if (isHeaderTableItem(row)) {\n return null;\n }\n\n const title = row.access_control_objects?.join(', ');\n\n return (\n <Text variant=\"body-1\" ellipsis title={title}>\n {title}\n </Text>\n );\n },\n};\n\nexport const MyColumns: Column<TableItem>[] = [\n NameColumns,\n TypeColumns,\n DurationColumns,\n StartedColumns,\n ACOColumns,\n];\nexport const AllColumns: Column<TableItem>[] = [\n NameColumns,\n TypeColumns,\n DurationColumns,\n AuthorColumns,\n StartedColumns,\n ACOColumns,\n];\n\nconst tableSettings: Settings = {\n displayIndices: false,\n sortable: false,\n stickyHead: DataTable.MOVING,\n syncHeadOnResize: true,\n};\n\nexport function QueriesHistoryList() {\n const [items, isLoading] = useQueryHistoryList();\n const [filter] = useQuriesHistoryFilter();\n const {columns} = useQueryHistoryListColumns({type: filter.user});\n const timestamp = useSelector(getQueriesListTimestamp);\n const {first, last, goBack, goNext, goFirst} = useQueriesPagination();\n const [selectedId, goToQuery] = useQueryNavigation();\n const scrollElemRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (scrollElemRef?.current) {\n scrollElemRef.current.scrollTop = 0;\n }\n }, [scrollElemRef, timestamp]);\n\n const setClassName = useCallback(\n (item: TableItem) => {\n if (isHeaderTableItem(item)) {\n return itemBlock({\n header: Boolean(item.header),\n });\n }\n\n return itemBlock({\n selected: item.id === selectedId,\n });\n },\n [selectedId],\n );\n\n const itemsByDate = useMemo(\n () =>\n Object.entries(\n groupBy(items, (item) => moment(item.start_time).format('DD MMMM YYYY')),\n ).reduce((ret, [header, items]) => {\n ret.push({\n header,\n });\n\n return ret.concat(items.map((item) => item));\n }, [] as Array<TableItem>),\n [items],\n );\n\n return (\n <div className={b()}>\n <div className={b('list-wrapper')} ref={scrollElemRef}>\n <DataTableYT\n className={b('list')}\n loading={isLoading}\n columns={columns}\n data={itemsByDate}\n useThemeYT={true}\n rowKey={(row) => {\n if (isHeaderTableItem(row)) {\n return row.header;\n }\n\n return row.id;\n }}\n onRowClick={(item) => {\n if (!isHeaderTableItem(item)) {\n goToQuery(item);\n }\n }}\n disableRightGap={true}\n settings={tableSettings}\n rowClassName={setClassName}\n getColSpansOfRow={({row}) => {\n if (isHeaderTableItem(row)) {\n return {\n Name: columns.length,\n };\n }\n\n return undefined;\n }}\n />\n <div className={b('pagination')}>\n {(!first || !last) && (\n <Pagination\n size=\"m\"\n first={{\n handler: goFirst,\n disabled: first,\n }}\n previous={{\n handler: goBack,\n disabled: first,\n }}\n next={{\n handler: goNext,\n disabled: last,\n }}\n last={{\n handler: noop,\n disabled: true,\n }}\n />\n )}\n </div>\n </div>\n </div>\n );\n}\n","const SvgLearn = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 14\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M6.836 2.202 1.74 4.386a.396.396 0 0 0 0 .728l5.096 2.184a2.5 2.5 0 0 0 .985.202h.358a2.5 2.5 0 0 0 .985-.202l5.096-2.184a.396.396 0 0 0 0-.728L9.164 2.202A2.5 2.5 0 0 0 8.179 2h-.358a2.5 2.5 0 0 0-.985.202M1.5 6.642l1.5.644v3.228a2 2 0 0 0 1.106 1.789l.806.403a7 7 0 0 0 6.193.033l.909-.442a2 2 0 0 0 1.125-1.798V7.226l1.712-.734a1.896 1.896 0 0 0 0-3.484L9.755.823A4 4 0 0 0 8.179.5h-.358a4 4 0 0 0-1.576.323L1.15 3.008A1.9 1.9 0 0 0 0 4.75v4.5a.75.75 0 0 0 1.5 0zm3 3.872V7.929l1.745.748A4 4 0 0 0 7.821 9h.358a4 4 0 0 0 1.576-.323l1.884-.808v2.63a.5.5 0 0 1-.282.45l-.909.442a5.5 5.5 0 0 1-4.865-.027l-.807-.403a.5.5 0 0 1-.276-.447\" clipRule=\"evenodd\" /></svg>;\nexport default SvgLearn;","import React, {useMemo} from 'react';\nimport cn from 'bem-cn-lite';\nimport {Icon, List, ListItemData, Loader, Text} from '@gravity-ui/uikit';\nimport {QueryItem} from '../../module/api';\nimport {useQueryList} from '../../hooks/QueriesList';\nimport {useQueryNavigation} from '../../hooks/Query';\nimport tutorialIcon from '../../../../assets/img/svg/learn.svg';\nimport './index.scss';\n\nconst itemCn = cn('query-tutorial-item');\nconst block = cn('queries-tutorial-list');\n\nfunction renderItem(item: QueryItem) {\n return (\n <>\n <Icon className={itemCn('icon')} data={tutorialIcon} />\n <Text className={itemCn('text')} ellipsis title={item?.annotations?.title}>\n {item?.annotations?.title || 'No name'}\n </Text>\n </>\n );\n}\n\nexport function QueriesTutorialList({className}: {className: string}) {\n const [items, isLoading] = useQueryList();\n\n const [selectedId, goToQuery] = useQueryNavigation();\n\n const selectedIndex = useMemo(() => {\n return items.findIndex((query) => query.id === selectedId);\n }, [selectedId, items]);\n\n const tutorialFilter = useMemo(() => {\n return (filter: string) => {\n return (item: ListItemData<QueryItem>) => {\n return (\n item?.annotations?.title\n ?.toLocaleLowerCase()\n .includes(filter.toLocaleLowerCase()) || false\n );\n };\n };\n }, []);\n\n return (\n <div className={block(null, className)}>\n <List\n className={block('list', {loading: isLoading})}\n filterable={true}\n filterClassName={block('filter')}\n filterPlaceholder={'Filter by name'}\n filterItem={tutorialFilter}\n virtualized={false}\n selectedItemIndex={selectedIndex}\n sortable={false}\n itemHeight={32}\n itemClassName={itemCn()}\n items={isLoading ? [] : items}\n renderItem={renderItem}\n onItemClick={goToQuery}\n />\n {isLoading && (\n <div className={block('loader')}>\n <Loader size=\"l\" />\n </div>\n )}\n </div>\n );\n}\n","import React, {useCallback, useMemo} from 'react';\nimport {ControlGroupOption, RadioButton} from '@gravity-ui/uikit';\nimport {Engines} from '../../module/api';\nimport {QueryEngine} from '../../module/engines';\nimport {QueryEnginesNames} from '../../utils/query';\n\nconst ALL_ENGINE_KEY = '__all';\n\nexport function QueryEngineFilter({\n value,\n onChange,\n className,\n engines = Engines,\n}: {\n engines?: QueryEngine[];\n value?: QueryEngine;\n className?: string;\n onChange: (value?: QueryEngine) => void;\n}) {\n const enginesList = useMemo<ControlGroupOption[]>(() => {\n return [\n {\n value: ALL_ENGINE_KEY,\n content: 'All',\n },\n ...engines.map((engine) => {\n return {\n value: engine,\n content: QueryEnginesNames[engine],\n };\n }),\n ];\n }, [engines]);\n\n const onChangeEngineFilter = useCallback(\n (engine: string) => {\n onChange(engine === ALL_ENGINE_KEY ? undefined : (engine as QueryEngine));\n },\n [onChange],\n );\n return (\n <RadioButton\n className={className}\n options={enginesList}\n value={value || ALL_ENGINE_KEY}\n onUpdate={onChangeEngineFilter}\n />\n );\n}\n","import {TextInput} from '@gravity-ui/uikit';\nimport debounce from 'lodash/debounce';\nimport React, {useEffect, useMemo, useState} from 'react';\n\nexport type QueryTextFilterProps = {\n value?: string;\n placeholder: string;\n onChange: (value?: string) => void;\n delay?: number;\n};\n\nexport function QueryTextFilter({value, placeholder, onChange, delay = 200}: QueryTextFilterProps) {\n const [pattern, setPattern] = useState<string>(value || '');\n\n const debouncedChange = useMemo(() => {\n return debounce((value: string) => {\n onChange(value);\n }, delay);\n }, [onChange, delay]);\n\n useEffect(() => {\n debouncedChange(pattern);\n return () => {\n debouncedChange.cancel();\n };\n }, [pattern, debouncedChange]);\n\n return (\n <TextInput\n placeholder={placeholder}\n value={pattern}\n onBlur={() => debouncedChange.flush()}\n onUpdate={setPattern}\n />\n );\n}\n","import React, {useCallback} from 'react';\nimport block from 'bem-cn-lite';\nimport {ControlGroupOption, Icon as GravityIcon, RadioButton, Tooltip} from '@gravity-ui/uikit';\nimport {QueriesListAuthorFilter, QueriesListMode} from '../../module/queries_list/types';\nimport CircleQuestionIcon from '@gravity-ui/icons/svgs/circle-question.svg';\n\nimport './index.scss';\nimport {QueryEngineFilter} from './QueryEngineFilter';\nimport {QueryEngine} from '../../module/engines';\nimport {QueryTextFilter} from './QueryTextFilter';\nimport {useQuriesHistoryFilter} from '../../hooks/QueryListFilter';\nimport Dropdown from '../../../../components/Dropdown/Dropdown';\nimport Button from '../../../../components/Button/Button';\nimport Icon from '../../../../components/Icon/Icon';\nimport ColumnSelector from '../../../../components/ColumnSelector/ColumnSelector';\nimport {useQueryHistoryListColumns} from '../QueriesHistoryList/useQueryListColumns';\n\nconst AuthorFilter: ControlGroupOption[] = [\n {\n value: QueriesListAuthorFilter.My,\n content: 'My',\n },\n {\n value: QueriesListAuthorFilter.All,\n content: 'All',\n },\n];\n\nconst b = block('queries-history-filter');\n\ntype QueriesHistoryListFilterProps = {\n className?: string;\n};\n\nexport function QueriesHistoryListFilter({className}: QueriesHistoryListFilterProps) {\n const [filter, filterViewMode, onChange] = useQuriesHistoryFilter();\n const {allowedColumns, handleColumnChange} = useQueryHistoryListColumns({type: filter.user});\n\n const onChangeAuthorFilter = useCallback(\n (user: string) => {\n onChange('user', user as QueriesListAuthorFilter);\n },\n [onChange],\n );\n const onChangeEngineFilter = useCallback(\n (engine?: QueryEngine) => {\n onChange('engine', engine);\n },\n [onChange],\n );\n const onChangeTextFilter = useCallback(\n (text?: string) => {\n onChange('filter', text || undefined);\n },\n [onChange],\n );\n return (\n <div className={b(null, className)}>\n <div className={b('row')}>\n {filterViewMode === QueriesListMode.History && (\n <RadioButton\n options={AuthorFilter}\n value={filter?.user || QueriesListAuthorFilter.My}\n onUpdate={onChangeAuthorFilter}\n />\n )}\n <QueryEngineFilter value={filter?.engine} onChange={onChangeEngineFilter} />\n </div>\n {filterViewMode === QueriesListMode.History && (\n <div className={b('row')}>\n <QueryTextFilter\n placeholder=\"Search in query name, body and access control\"\n value={filter?.filter}\n onChange={onChangeTextFilter}\n />\n <Tooltip\n content={\n <>\n Search in query text, annotations and access control\n <br />\n Use `"title"="test_name"` to search in query\n name\n <br />\n Use `aco:nobody` to search in query access control\n </>\n }\n >\n <GravityIcon data={CircleQuestionIcon} size={16} />\n </Tooltip>\n <Dropdown\n trigger=\"click\"\n directions={['bottom']}\n button={\n <Button pin={'round-round'} className={b('columns-button')}>\n <Icon awesome=\"table\" face=\"light\" />\n </Button>\n }\n template={\n <ColumnSelector items={allowedColumns} onChange={handleColumnChange} />\n }\n />\n </div>\n )}\n </div>\n );\n}\n","import {lazy} from 'react';\nimport withLazyLoading from '../../../hocs/withLazyLoading';\n\nfunction importVcs() {\n return import(/* webpackChunkName: \"vcs\" */ './Vcs');\n}\n\nexport const Vcs = withLazyLoading(\n lazy(async () => {\n return {default: (await importVcs()).Vcs};\n }),\n);\n","import {lazy} from 'react';\nimport withLazyLoading from '../../../hocs/withLazyLoading';\n\nfunction importVcs() {\n return import(/* webpackChunkName: \"query-navigation\" */ './Navigation');\n}\n\nexport const Navigation = withLazyLoading(\n lazy(async () => {\n return {default: (await importVcs()).Navigation};\n }),\n);\n","import React, {useCallback, useEffect, useMemo} from 'react';\nimport block from 'bem-cn-lite';\nimport {Tabs, TabsItemProps} from '@gravity-ui/uikit';\nimport {QueriesHistoryList} from './QueriesHistoryList';\n\nimport {getQueriesListMode} from '../module/queries_list/selectors';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {QueriesListMode, QueriesListModes} from '../module/queries_list/types';\nimport {applyListMode, requestQueriesList} from '../module/queries_list/actions';\n\nimport './index.scss';\nimport {QueriesTutorialList} from './QueriesTutorialList';\nimport {QueriesHistoryListFilter} from './QueriesListFilter';\nimport {Vcs} from '../Vcs';\nimport {Navigation} from '../Navigation';\n\nconst b = block('queires-list');\n\nconst TabNames = {\n [QueriesListMode.History]: 'History',\n [QueriesListMode.Tutorials]: 'Tutorials',\n [QueriesListMode.VCS]: 'VCS',\n [QueriesListMode.Navigation]: 'Navigation',\n};\n\nconst useQueryTabs = (): [TabsItemProps[], string, (tab: string) => void] => {\n const dispatch = useDispatch();\n const selectedTab = useSelector(getQueriesListMode);\n const setTab = useCallback(\n (tab: string) => {\n dispatch(applyListMode(tab as QueriesListMode));\n },\n [dispatch],\n );\n\n const tabOptions = useMemo<TabsItemProps[]>(() => {\n return QueriesListModes.map((tab) => {\n return {\n id: tab as unknown as string,\n title: TabNames[tab],\n };\n });\n }, []);\n return [tabOptions, (selectedTab || QueriesListMode.History).toString(), setTab];\n};\n\nexport function QueriesList() {\n const [tabs, tab, setTab] = useQueryTabs();\n\n const dispatch = useDispatch();\n useEffect(() => {\n dispatch(requestQueriesList());\n }, [dispatch]);\n\n const isVsc = tab === QueriesListMode.VCS;\n\n if (tab === QueriesListMode.Navigation)\n return (\n <div className={b()}>\n <Tabs className={b('tabs')} items={tabs} activeTab={tab} onSelectTab={setTab} />\n <div className={b('content')}>\n <Navigation />\n </div>\n </div>\n );\n\n return (\n <div className={b()}>\n <Tabs className={b('tabs')} items={tabs} activeTab={tab} onSelectTab={setTab} />\n <div className={b('content')}>\n {!isVsc && <QueriesHistoryListFilter className={b('filter')} />}\n\n {tab === QueriesListMode.History && <QueriesHistoryList />}\n {tab === QueriesListMode.Tutorials && (\n <QueriesTutorialList className={b('list-content')} />\n )}\n {isVsc && <Vcs />}\n </div>\n </div>\n );\n}\n","const SvgLayoutColumns = props => <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" {...props}><path fill=\"currentColor\" fillRule=\"evenodd\" d=\"M8.75 3.5H12A1.5 1.5 0 0 1 13.5 5v6a1.5 1.5 0 0 1-1.5 1.5H8.75zm-1.5 0H4A1.5 1.5 0 0 0 2.5 5v6A1.5 1.5 0 0 0 4 12.5h3.25zM1 5a3 3 0 0 1 3-3h8a3 3 0 0 1 3 3v6a3 3 0 0 1-3 3H4a3 3 0 0 1-3-3z\" clipRule=\"evenodd\" /></svg>;\nexport default SvgLayoutColumns;","import React, {FC, useRef} from 'react';\nimport {setFileEditor} from '../module/queryFilesForm/queryFilesFormSlice';\nimport {selectFileEditorConfig} from '../module/queryFilesForm/selectors';\nimport {changeQueryFile} from '../module/queryFilesForm/actions';\nimport {useDispatch, useSelector} from 'react-redux';\nimport FileIcon from '@gravity-ui/icons/svgs/file.svg';\nimport XmarkIcon from '@gravity-ui/icons/svgs/xmark.svg';\nimport SquareIcon from '@gravity-ui/icons/svgs/square.svg';\nimport LayoutColumnsIcon from '@gravity-ui/icons/svgs/layout-columns.svg';\nimport {Button, Icon, Text} from '@gravity-ui/uikit';\nimport './FileEditor.scss';\nimport cn from 'bem-cn-lite';\nimport MonacoEditor, {MonacoEditorConfig} from '../../../components/MonacoEditor';\nimport * as monaco from 'monaco-editor';\n\nconst block = cn('file-editor');\n\nconst MONACO_CONFIG: MonacoEditorConfig = {\n fontSize: 14,\n language: 'plaintext',\n renderWhitespace: 'boundary',\n minimap: {\n enabled: true,\n },\n};\n\nexport const FileEditor: FC = () => {\n const dispatch = useDispatch();\n const {fileEditor, file} = useSelector(selectFileEditorConfig);\n const editorRef = useRef<monaco.editor.IStandaloneCodeEditor>();\n\n const handleOnChange = (content: string) => {\n if (!file) return;\n dispatch(changeQueryFile({...file, content}));\n };\n\n const handleOnClose = () => {\n dispatch(setFileEditor({...fileEditor, isOpen: false, isFullWidth: false}));\n };\n\n const handleOnWidthToggle = () => {\n dispatch(setFileEditor({...fileEditor, isFullWidth: !fileEditor.isFullWidth}));\n };\n\n if (!file) return null;\n\n return (\n <div className={block()}>\n <div className={block('header')}>\n <div className={block('header-side')}>\n <Icon data={FileIcon} size={16} />\n <Text variant=\"subheader-1\" ellipsis>\n {file.name}\n </Text>\n </div>\n <div className={block('header-side')}>\n <Button view=\"flat\" onClick={handleOnWidthToggle}>\n <Icon\n data={fileEditor.isFullWidth ? LayoutColumnsIcon : SquareIcon}\n size={16}\n />\n </Button>\n <Button view=\"flat\" onClick={handleOnClose}>\n <Icon data={XmarkIcon} size={16} />\n </Button>\n </div>\n </div>\n <MonacoEditor\n className={block('editor')}\n editorRef={editorRef}\n value={file.content || ''}\n language=\"plaintext\"\n onChange={handleOnChange}\n monacoConfig={MONACO_CONFIG}\n />\n </div>\n );\n};\n","import React, {FC, useState} from 'react';\nimport QueryEditor from '../QueryEditor/QueryEditor';\nimport FlexSplitPane from '../../../components/FlexSplitPane/FlexSplitPane';\nimport {FileEditor} from '../FileEditor';\n\nconst EDITOR_INITIAL_SIZE = [50, 50];\n\ntype Props = {\n fileEditorFullWidth: boolean;\n fileEditorVisible: boolean;\n onStartQuery: (queryId: string) => void;\n};\n\nexport const QueryEditorSplit: FC<Props> = ({\n fileEditorFullWidth,\n fileEditorVisible,\n onStartQuery,\n}) => {\n const [sizes, setSize] = useState(EDITOR_INITIAL_SIZE);\n const hideQueryEditor = !(fileEditorVisible && fileEditorFullWidth);\n\n return (\n <FlexSplitPane\n direction={FlexSplitPane.HORIZONTAL}\n onResizeEnd={setSize}\n getInitialSizes={sizes}\n >\n {hideQueryEditor && <QueryEditor onStartQuery={onStartQuery} showStatusInTitle />}\n {fileEditorVisible && <FileEditor />}\n </FlexSplitPane>\n );\n};\n","import React, {useCallback, useEffect, useMemo, useState} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {Route, Switch} from 'react-router';\nimport FlexSplitPane from '../../../components/FlexSplitPane/FlexSplitPane';\nimport {QueriesPooling} from '../hooks/QueriesPooling/context';\nimport {isEngine} from '../module/api';\nimport {QueryEngine} from '../module/engines';\nimport {\n SET_QUERY_PARAMS,\n createEmptyQuery,\n createQueryFromTablePath,\n goToQuery,\n loadQuery,\n} from '../module/query/actions';\nimport {usePreventUnload} from '../../../hooks/use-prevent-unload';\nimport {useQueriesListSidebarToggle} from '../hooks/QueriesList';\nimport {getDirtySinceLastSubmit, getQueryGetParams} from '../module/query/selectors';\nimport {QueriesList} from '../QueriesList';\nimport {useQueryACO} from '../QueryACO/useQueryACO';\nimport {MonacoContext} from '../context/MonacoContext';\n\nimport cn from 'bem-cn-lite';\n\nimport './QueryTracker.scss';\nimport {QueryEditorSplit} from './QueryEditorSplit';\nimport {selectFileEditor} from '../module/queryFilesForm/selectors';\nimport {selectNavigationCluster} from '../module/queryNavigation/selectors';\nimport {setSettingByKey} from '../../../store/actions/settings';\nimport {CellPreviewModal} from '../../../containers/CellPreviewModal/CellPreviewModal';\n\nconst b = cn('query-tracker-page');\n\ntype Props = {\n match: {\n path: string;\n params: {\n queryId?: string;\n };\n };\n location: {\n search: string;\n };\n};\n\nconst initialSizes = [23, 77];\nconst minSize = 380; // see history list's cells size\n\nfunction QueryPageDraft() {\n const dispatch = useDispatch();\n const routeParams = useSelector(getQueryGetParams);\n const cluster = useSelector(selectNavigationCluster);\n\n useEffect(() => {\n const engine =\n routeParams.engine && isEngine(routeParams.engine)\n ? (routeParams.engine as QueryEngine)\n : QueryEngine.YQL;\n if (routeParams.cluster && routeParams.path) {\n if (routeParams.useDraft) {\n dispatch({\n type: SET_QUERY_PARAMS,\n data: {\n params: {\n ...routeParams,\n useDraft: undefined,\n },\n },\n });\n }\n dispatch(\n createQueryFromTablePath(engine, routeParams.cluster, routeParams.path, {\n useDraft: true,\n }),\n );\n } else {\n dispatch(createEmptyQuery(engine));\n }\n if (cluster) {\n dispatch(\n setSettingByKey<boolean>(\n 'global::queryTracker::queriesListSidebarVisibilityMode',\n true,\n ),\n );\n }\n }, [dispatch]);\n return null;\n}\n\nfunction QueryPage(props: Props) {\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch({\n type: SET_QUERY_PARAMS,\n data: {\n params: {},\n },\n });\n if (props.match.params.queryId) {\n dispatch(loadQuery(props.match.params.queryId));\n } else {\n dispatch(createEmptyQuery());\n }\n }, [dispatch, props.match.params.queryId]);\n return null;\n}\n\nexport default function QueryTracker({match}: Props) {\n const {isQueriesListSidebarVisible} = useQueriesListSidebarToggle();\n const isQueryStateDirty = useSelector(getDirtySinceLastSubmit);\n const fileEditor = useSelector(selectFileEditor);\n usePreventUnload({shouldListen: isQueryStateDirty});\n const [sizes, setSize] = useState(initialSizes);\n const getSize = useMemo(() => {\n return () => sizes;\n }, [sizes]);\n const dispatch = useDispatch();\n const {loadQueryTrackerInfo} = useQueryACO();\n\n const goToCreatedQuery = useCallback(\n (queryId: string) => {\n dispatch(goToQuery(queryId));\n return true;\n },\n [dispatch],\n );\n\n useEffect(() => {\n loadQueryTrackerInfo();\n }, []);\n\n return (\n <>\n <Switch>\n <Route exact path={match.path} component={QueryPageDraft} />\n <Route path={`${match.path}/:queryId`} component={QueryPage} />\n </Switch>\n <MonacoContext.Provider value={new Map()}>\n <QueriesPooling>\n <FlexSplitPane\n className={b('container')}\n direction={FlexSplitPane.HORIZONTAL}\n onResizeEnd={setSize}\n minSize={minSize}\n getInitialSizes={getSize}\n >\n {isQueriesListSidebarVisible ? <QueriesList /> : null}\n <QueryEditorSplit\n fileEditorFullWidth={fileEditor.isFullWidth}\n fileEditorVisible={fileEditor.isOpen}\n onStartQuery={goToCreatedQuery}\n />\n </FlexSplitPane>\n </QueriesPooling>\n </MonacoContext.Provider>\n <CellPreviewModal />\n </>\n );\n}\n","import {createSelector} from 'reselect';\nimport {getSettingsData} from '../../../../store/selectors/settings-base';\n\nexport const getSettingQueryTrackerQueriesListSidebarVisibilityMode = createSelector(\n getSettingsData,\n (settings) => Boolean(settings['global::queryTracker::queriesListSidebarVisibilityMode']),\n);\n","import {useCallback} from 'react';\nimport {useDispatch, useSelector} from 'react-redux';\nimport {QueriesHistoryCursorDirection, QueryItem} from '../../module/api';\nimport {\n getQueriesList,\n getQueriesListCursor,\n hasQueriesListMore,\n isQueriesListLoading,\n} from '../../module/queries_list/selectors';\nimport {loadNextQueriesList, resetCursor} from '../../module/queries_list/actions';\nimport {setSettingByKey} from '../../../../store/actions/settings';\nimport {getSettingQueryTrackerQueriesListSidebarVisibilityMode} from '../../module/settings/selector';\n\nexport function useQueryList(): [QueryItem[], boolean] {\n const items = useSelector(getQueriesList);\n const isLoading = useSelector(isQueriesListLoading);\n\n return [items, isLoading];\n}\n\nexport const useQueriesPagination = () => {\n const dispatch = useDispatch();\n const cursor = useSelector(getQueriesListCursor);\n const hasNext = useSelector(hasQueriesListMore);\n\n const goNext = useCallback(() => {\n dispatch(loadNextQueriesList(QueriesHistoryCursorDirection.PAST));\n }, [dispatch]);\n\n const goBack = useCallback(() => {\n dispatch(loadNextQueriesList(QueriesHistoryCursorDirection.FUTURE));\n }, [dispatch]);\n\n const reset = useCallback(() => {\n dispatch(resetCursor());\n }, [dispatch]);\n\n return {\n first: !cursor?.cursorTime,\n last: !hasNext,\n currentCursorTime: cursor?.cursorTime,\n goNext,\n goBack,\n goFirst: reset,\n };\n};\n\nexport const useQueriesListSidebarToggle = () => {\n const dispatch = useDispatch();\n const isQueriesListSidebarVisible = useSelector(\n getSettingQueryTrackerQueriesListSidebarVisibilityMode,\n );\n\n const toggleQueriesListSideBarToggle = () => {\n dispatch(\n setSettingByKey<boolean>(\n 'global::queryTracker::queriesListSidebarVisibilityMode',\n !isQueriesListSidebarVisible,\n ),\n );\n };\n\n return {\n isQueriesListSidebarVisible,\n toggleQueriesListSideBarToggle,\n };\n};\n","import {RootState} from '../../../../store/reducers';\nimport {createSelector} from 'reselect';\nimport {getClusterList} from '../../../../store/selectors/slideoutMenu';\nimport {NavigationNode} from './queryNavigationSlice';\nimport {makeGetSetting} from '../../../../store/selectors/settings';\nimport {createNestedNS} from '../../../../../shared/utils/settings';\nimport {NAMESPACES, SettingName} from '../../../../../shared/constants/settings';\n\nexport const selectNavigationCluster = (state: RootState) =>\n state.queryTracker.queryNavigation.cluster;\n\nexport const selectClusterConfigs = (state: RootState) => state.clustersMenu.clusters;\n\nexport const selectNavigationClusterConfig = createSelector(\n [selectNavigationCluster, selectClusterConfigs],\n (clusterName, clusters) => {\n if (!clusterName || !(clusterName in clusters)) return null;\n\n return clusters[clusterName];\n },\n);\n\nexport const selectFavouritePaths = createSelector(\n [makeGetSetting, selectNavigationCluster],\n (getSetting, cluster) => {\n if (!cluster) return [];\n const parentNS = createNestedNS(cluster, NAMESPACES.LOCAL);\n const favourites = getSetting(SettingName.LOCAL.FAVOURITES, parentNS);\n\n return favourites ? favourites.map((i: {path: string}) => i.path).sort() : [];\n },\n);\n\nexport const selectNavigationPath = (state: RootState) => state.queryTracker.queryNavigation.path;\n\nexport const selectNavigationNodeType = (state: RootState) =>\n state.queryTracker.queryNavigation.nodeType;\n\nexport const selectNavigationFilter = (state: RootState) =>\n state.queryTracker.queryNavigation.filter;\n\nexport const selectNavigationNodes = (state: RootState) => state.queryTracker.queryNavigation.nodes;\n\nexport const selectNavigationTable = (state: RootState) => state.queryTracker.queryNavigation.table;\n\nconst filterValueInText = (value: string, filter: string) =>\n value.toLowerCase().includes(filter.toLowerCase());\n\nexport const selectTableWithFilter = createSelector(\n [selectNavigationTable, selectNavigationFilter],\n (table, filter) => {\n if (!table) return null;\n\n return {\n ...table,\n schema: table.schema.filter(({name, type}) => {\n return filterValueInText(name, filter) || filterValueInText(type, filter);\n }),\n };\n },\n);\n\nexport const selectClustersByFilter = createSelector(\n [getClusterList, selectNavigationFilter],\n (clusters, filter) => {\n if (!filter) return clusters;\n\n return clusters.filter(({name}) => filterValueInText(name, filter));\n },\n);\n\nexport const selectNodeListByFilter = createSelector(\n [selectNavigationNodes, selectNavigationFilter, selectNavigationPath],\n (nodes, filter, path) => {\n const isRoot = !path || path === '/';\n const parentPath = isRoot ? path : path.split('/').slice(0, -1).join('/');\n const upItem: NavigationNode = {\n name: '...',\n type: 'map_node',\n path: parentPath,\n isFavorite: false,\n };\n\n if (!filter) return isRoot ? nodes : [upItem, ...nodes];\n\n const result = nodes.filter(({name}) => filterValueInText(name, filter));\n\n if (!isRoot) {\n result.unshift(upItem);\n }\n\n return result;\n },\n);\n"],"names":["usePreventUnload","_ref","shouldListen","beforeUnloadHandler","useCallback","e","preventDefault","returnValue","useEffect","window","addEventListener","removeEventListener","useQuriesHistoryFilter","filter","useSelector","getQueriesListFilter","filterPreset","getQueriesListMode","dispatch","useDispatch","name","value","applyFilter","_defineProperty","useQueryNavigation","selectedItem","getQuery","cluster","getCluster","history","useHistory","goToQuery","item","push","createQueryUrl","id","EditQueryNameModal","_query$annotations2","query","className","_useState","useState","undefined","_useState2","_slicedToArray","error","setError","_useState3","_useState4","visible","setVisible","state","useThunkDispatch","initialValues","useMemo","_query$annotations","annotations","title","_jsxs","onClick","event","stopPropagation","onKeyDown","children","_jsx","Button","view","size","width","Icon","awesome","YTDFDialog","pristineSubmittable","modal","headerProps","footerProps","textApply","onClose","onAdd","form","getState","values","setQueryName","_objectSpread","err","fields","type","required","caption","extras","placeholder","concat","_toConsumableArray","makeErrorFields","useQueryHistoryListColumns","selectedColumns","getQueryListHistoryColumns","handleColumnChange","setSettingByKey","items","_ref2","checked","map","_ref3","React","ALL_COLUMN_NAMES","intersectionBy","AllColumns","MyColumns","EXCLUDED_COLUMNS","NameColumns","AuthorColumns","currentColumnsPreset","QueriesListAuthorFilter","My","selectedColumnNames","Set","Array","isArray","add","columns","_ref4","has","allowedColumns","includes","_ref5","b","block","itemBlock","isHeaderTableItem","header","align","render","_row$annotations","row","QueryStatusIcon","status","Text","color","ellipsis","TypeColumns","variant","engine","QueryEnginesNames","DurationColumns","QueryStatus","RUNNING","hammer","format","NO_VALUE","QueryDuration","StartedColumns","formatTime","start_time","user","ACOColumns","_ref6","_row$access_control_o","access_control_objects","join","tableSettings","displayIndices","sortable","stickyHead","DataTable","MOVING","syncHeadOnResize","QueriesHistoryList","pollingContext","uncompletedItems","queryListUpdateHandler","_useQueryHistoryList","timeout","arguments","length","timer","start","setTimeout","refreshQueriesListIfNeeded","clearTimeout","useRefreshHistoryList","useContext","QueriesPoolingContext","getUncompletedItems","UPDATE_QUERIES_LIST","data","watch","useQueryList","_useQueryHistoryList2","isLoading","_useQuriesHistoryFilt","timestamp","getQueriesListTimestamp","_useQueriesPagination","useQueriesPagination","first","last","goBack","goNext","goFirst","_useQueryNavigation","_useQueryNavigation2","selectedId","scrollElemRef","useRef","current","scrollTop","setClassName","Boolean","selected","itemsByDate","Object","entries","groupBy","moment","reduce","ret","_ref7","_ref8","ref","DataTableYT","loading","useThemeYT","rowKey","onRowClick","disableRightGap","settings","rowClassName","getColSpansOfRow","_ref9","Name","Pagination","handler","disabled","previous","next","noop","props","xmlns","fill","viewBox","fillRule","d","clipRule","itemCn","cn","renderItem","_item$annotations","_item$annotations2","_Fragment","tutorialIcon","QueriesTutorialList","_useQueryList","_useQueryList2","selectedIndex","findIndex","tutorialFilter","_item$annotations3","toLocaleLowerCase","List","filterable","filterClassName","filterPlaceholder","filterItem","virtualized","selectedItemIndex","itemHeight","itemClassName","onItemClick","Loader","ALL_ENGINE_KEY","QueryEngineFilter","onChange","_ref$engines","engines","Engines","enginesList","content","onChangeEngineFilter","RadioButton","options","onUpdate","QueryTextFilter","_ref$delay","delay","pattern","setPattern","debouncedChange","debounce","cancel","TextInput","onBlur","flush","AuthorFilter","All","QueriesHistoryListFilter","_useQuriesHistoryFilt2","filterViewMode","_useQueryHistoryListC","onChangeAuthorFilter","onChangeTextFilter","text","QueriesListMode","History","Tooltip","GravityIcon","CircleQuestionIcon","Dropdown","trigger","directions","button","pin","face","template","ColumnSelector","Vcs","withLazyLoading","lazy","_asyncToGenerator","_regeneratorRuntime","_callee","_context","prev","t0","sent","abrupt","stop","Navigation","TabNames","_TabNames","Tutorials","VCS","useQueryTabs","selectedTab","setTab","tab","applyListMode","QueriesListModes","toString","QueriesList","_useQueryTabs","_useQueryTabs2","tabs","requestQueriesList","isVsc","Tabs","activeTab","onSelectTab","MONACO_CONFIG","fontSize","language","renderWhitespace","minimap","enabled","FileEditor","_useSelector","selectFileEditorConfig","fileEditor","file","editorRef","FileIcon","setFileEditor","isFullWidth","LayoutColumnsIcon","SquareIcon","isOpen","XmarkIcon","MonacoEditor","changeQueryFile","monacoConfig","EDITOR_INITIAL_SIZE","QueryEditorSplit","fileEditorFullWidth","fileEditorVisible","onStartQuery","sizes","setSize","hideQueryEditor","FlexSplitPane","direction","HORIZONTAL","onResizeEnd","getInitialSizes","QueryEditor","showStatusInTitle","initialSizes","minSize","QueryPageDraft","routeParams","getQueryGetParams","selectNavigationCluster","isEngine","QueryEngine","YQL","path","useDraft","SET_QUERY_PARAMS","params","createQueryFromTablePath","createEmptyQuery","QueryPage","match","queryId","loadQuery","QueryTracker","isQueriesListSidebarVisible","useQueriesListSidebarToggle","isQueryStateDirty","getDirtySinceLastSubmit","selectFileEditor","getSize","loadQueryTrackerInfo","useQueryACO","goToCreatedQuery","Switch","Route","exact","component","MonacoContext","Provider","Map","QueriesPooling","CellPreviewModal","getSettingQueryTrackerQueriesListSidebarVisibilityMode","createSelector","getSettingsData","getQueriesList","isQueriesListLoading","cursor","getQueriesListCursor","hasNext","hasQueriesListMore","loadNextQueriesList","QueriesHistoryCursorDirection","PAST","FUTURE","reset","resetCursor","cursorTime","currentCursorTime","toggleQueriesListSideBarToggle","queryTracker","queryNavigation","selectNavigationClusterConfig","clustersMenu","clusters","clusterName","selectFavouritePaths","makeGetSetting","getSetting","parentNS","createNestedNS","NAMESPACES","LOCAL","favourites","SettingName","FAVOURITES","i","sort","selectNavigationPath","selectNavigationNodeType","nodeType","selectNavigationFilter","selectNavigationNodes","nodes","filterValueInText","toLowerCase","selectTableWithFilter","table","schema","selectClustersByFilter","getClusterList","selectNodeListByFilter","isRoot","upItem","split","slice","isFavorite","result","unshift"],"sourceRoot":""}
|