diff --git a/packages/ui/src/ui/pages/navigation/content/Document/DocumentBody.tsx b/packages/ui/src/ui/pages/navigation/content/Document/DocumentBody.tsx index d92d2f5349..84266a972d 100644 --- a/packages/ui/src/ui/pages/navigation/content/Document/DocumentBody.tsx +++ b/packages/ui/src/ui/pages/navigation/content/Document/DocumentBody.tsx @@ -1,4 +1,6 @@ import React, {FC, Fragment} from 'react'; +import {Flex} from '@gravity-ui/uikit'; + // @ts-ignore import ypath from '@ytsaurus/interface-helpers/lib/ypath'; import MetaTable from '../../../../components/MetaTable/MetaTable'; @@ -7,6 +9,11 @@ import Yson from '../../../../components/Yson/Yson'; import {Alert, Button} from '@gravity-ui/uikit'; import {UnipikaSettings} from '../../../../components/Yson/StructuredYson/StructuredYsonTypes'; import Icon from '../../../../components/Icon/Icon'; +import {OpenQueryButton} from '../../../../containers/OpenQueryButton/OpenQueryButton'; +import {YQLKitButton} from '../../../../containers/YQLKitButton/YQLKitButton'; +import {useSelector} from 'react-redux'; +import {getPath} from '../../../../store/selectors/navigation'; +import {getCluster} from '../../../../store/selectors/global'; type Props = { attributes: Record; @@ -24,6 +31,24 @@ const EditButton: FC> = ({onEditClick}) => { ); }; +function OpenYqlViewButton() { + const path: string = useSelector(getPath); + const cluster = useSelector(getCluster); + + return ; +} + +function DocumentExtraTools({onEditClick, attributes}: Pick) { + const isYqlView = 'view' === ypath.getValue(attributes, '/_yql_type'); + return ( + + {isYqlView && } + {isYqlView && } + + + ); +} + const DocumentBody: FC = ({attributes, settings, onEditClick, document = null}) => { const [type] = ypath.getValues(attributes, ['/type']); @@ -42,7 +67,9 @@ const DocumentBody: FC = ({attributes, settings, onEditClick, document = value={document} settings={settings} folding - extraTools={} + extraTools={ + + } /> )} diff --git a/packages/ui/src/ui/pages/query-tracker/module/api.ts b/packages/ui/src/ui/pages/query-tracker/module/api.ts index 3d8df27f17..568da611c3 100644 --- a/packages/ui/src/ui/pages/query-tracker/module/api.ts +++ b/packages/ui/src/ui/pages/query-tracker/module/api.ts @@ -223,7 +223,7 @@ export async function generateQueryFromTable( const node = await ytApiV3.get({ parameters: { path: `${path}/@`, - attributes: ['type', 'schema', 'dynamic'], + attributes: ['type', 'schema', 'dynamic', '_yql_type'], output_format: 'json', }, setup: { @@ -231,10 +231,19 @@ export async function generateQueryFromTable( ...JSONParser, }, }); + + const commonData = { + engine, + files: [], + annotations: {}, + access_control_object: defaultQueryACO, + access_control_objects: [defaultQueryACO], + settings: generateQuerySettings(engine, cluster), + }; + if (node.type === 'table') { const schema = ypath.getValue(node.schema) as {name: string}[]; return { - engine, query: generateQueryText(cluster, engine, { path, columns: schema.map(({name}) => name), @@ -242,12 +251,14 @@ export async function generateQueryFromTable( schemaExists: Boolean(schema.length), dynamic: node.dynamic, }), - files: [], - annotations: {}, - access_control_object: defaultQueryACO, - access_control_objects: [defaultQueryACO], - settings: generateQuerySettings(engine, cluster), + ...commonData, }; + } else if (node.type === 'document' && 'view' === ypath.getValue(node._yql_type)) { + const query = await ytApiV3.get({ + parameters: {path}, + setup: {proxy: getClusterProxy(selectedCluster), ...JSONParser}, + }); + return {query, ...commonData}; } return undefined; }