Fix: UI updated as per new query as entity change (#10621)

* fix: failing meven CI due to query as entity changes

* formatting issue
This commit is contained in:
Shailesh Parmar 2023-03-16 17:01:51 +05:30 committed by GitHub
parent 551df24d35
commit e706c81fcd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 83 additions and 105 deletions

View File

@ -46,7 +46,6 @@ export interface DatasetDetailsProps {
owner: EntityReference;
description: string;
tableProfile: Table['profile'];
tableQueries: Table['tableQueries'];
columns: Column[];
tier: TagLabel;
sampleData: TableData;
@ -57,7 +56,6 @@ export interface DatasetDetailsProps {
deleted?: boolean;
isTableProfileLoading?: boolean;
isSampleDataLoading?: boolean;
isQueriesLoading?: boolean;
isentityThreadLoading: boolean;
feedCount: number;
entityFieldThreadCount: EntityFieldThreadCount[];

View File

@ -27,10 +27,7 @@ import {
} from 'react';
import { useTranslation } from 'react-i18next';
import { Link } from 'react-router-dom';
import {
getLatestTableProfileByFqn,
getTableQueryByTableId,
} from 'rest/tableAPI';
import { getLatestTableProfileByFqn } from 'rest/tableAPI';
import { getListTestCase } from 'rest/testAPI';
import {
DRAWER_NAVIGATION_OPTIONS,
@ -115,15 +112,9 @@ function TableSummary({
const { profile, tableConstraints } = profileResponse;
const queriesResponse = await getTableQueryByTableId(
entityDetails.id || ''
);
const { tableQueries } = queriesResponse;
setTableDetails((prev) => {
if (prev) {
return { ...prev, profile, tableQueries, tableConstraints };
return { ...prev, profile, tableConstraints };
} else {
return {} as Table;
}

View File

@ -20,8 +20,6 @@ import {
TagSource,
} from '../../../../generated/entity/data/table';
const mockDate = new Date('2023-01-03');
export const mockTableEntityDetails: Table = {
id: '8dd1f238-6ba0-46c6-a091-7db81f2a6bed',
name: 'dim.api/client',
@ -79,24 +77,6 @@ export const mockTableEntityDetails: Table = {
state: State.Confirmed,
},
],
tableQueries: [
{
query:
'select cust.customer_id, fact_order.order_id from dim_customer cust join fact_order on',
users: [],
vote: 1,
checksum: 'ff727cf70d5a7a9810704532f3571b82',
queryDate: mockDate,
},
{
query:
'select sale.sale_id, cust.customer_id, fact_order.order_ir from shopify.',
users: [],
vote: 1,
checksum: 'e14e02c387dd8482d10c4ec7d3d4c69a',
queryDate: mockDate,
},
],
service: {
id: '0875717c-5855-427c-8dd6-92d4cbfe7c51',
type: 'databaseService',

View File

@ -14,10 +14,10 @@
import {
findByTestId,
findByText,
// getByTestId,
queryByTestId,
render,
} from '@testing-library/react';
import { Query } from 'generated/entity/data/query';
import React from 'react';
import { MemoryRouter } from 'react-router-dom';
import QueryCard from './QueryCard';
@ -36,7 +36,7 @@ const mockQueryData = {
],
vote: 1,
checksum: '0232b0368458aadb29230ccc531462c9',
};
} as Query;
jest.mock('../schema-editor/SchemaEditor', () => {
return jest.fn().mockReturnValue(<p>SchemaEditor</p>);

View File

@ -12,17 +12,17 @@
*/
import classNames from 'classnames';
import { Query } from 'generated/entity/data/query';
// import { isUndefined } from 'lodash';
import React, { FC, HTMLAttributes, useState } from 'react';
// import { Link } from 'react-router-dom';
// import { getUserPath } from '../../constants/constants';
import { CSMode } from '../../enums/codemirror.enum';
import { SQLQuery } from '../../generated/entity/data/table';
import SVGIcons, { Icons } from '../../utils/SvgUtils';
import CopyToClipboardButton from '../buttons/CopyToClipboardButton/CopyToClipboardButton';
import SchemaEditor from '../schema-editor/SchemaEditor';
interface QueryCardProp extends HTMLAttributes<HTMLDivElement> {
query: SQLQuery;
query: Query;
}
const QueryCard: FC<QueryCardProp> = ({ className, query }) => {
const [expanded, setExpanded] = useState<boolean>(false);

View File

@ -19,7 +19,7 @@ import {
} from '@testing-library/react';
import React from 'react';
import { MemoryRouter } from 'react-router-dom';
import { MOCK_TABLE } from '../../mocks/TableData.mock';
import { MOCK_TABLE_QUERY } from '../../mocks/TableData.mock';
import TableQueries from './TableQueries';
const mockTableQueriesProp = {
@ -29,10 +29,10 @@ const mockTableQueriesProp = {
jest.mock('./QueryCard', () => {
return jest.fn().mockReturnValue(<p>QueryCard</p>);
});
jest.mock('rest/tableAPI', () => ({
getTableQueryByTableId: jest
jest.mock('rest/queryAPI', () => ({
getQueriesList: jest
.fn()
.mockImplementation(() => Promise.resolve(MOCK_TABLE)),
.mockImplementation(() => Promise.resolve({ data: MOCK_TABLE_QUERY })),
}));
describe('Test TableQueries Component', () => {
@ -46,7 +46,7 @@ describe('Test TableQueries Component', () => {
});
it('Check if TableQueries component has n query card', async () => {
const queriesLength = MOCK_TABLE.tableQueries?.length || 0;
const queriesLength = MOCK_TABLE_QUERY?.length || 0;
const { container } = render(<TableQueries {...mockTableQueriesProp} />, {
wrapper: MemoryRouter,
});

View File

@ -13,10 +13,10 @@
import { Col, Row } from 'antd';
import { AxiosError } from 'axios';
import { Query } from 'generated/entity/data/query';
import { isEmpty } from 'lodash';
import React, { FC, useEffect, useState } from 'react';
import { getTableQueryByTableId } from 'rest/tableAPI';
import { Table } from '../../generated/entity/data/table';
import { getQueriesList } from 'rest/queryAPI';
import { withLoader } from '../../hoc/withLoader';
import { showErrorToast } from '../../utils/ToastUtils';
import ErrorPlaceHolder from '../common/error-with-placeholder/ErrorPlaceHolder';
@ -32,13 +32,13 @@ const TableQueries: FC<TableQueriesProp> = ({
isTableDeleted,
tableId,
}: TableQueriesProp) => {
const [tableQueries, setTableQueries] = useState<Table['tableQueries']>([]);
const [tableQueries, setTableQueries] = useState<Query[]>([]);
const [isQueriesLoading, setIsQueriesLoading] = useState(true);
const fetchTableQuery = async () => {
try {
const queries = await getTableQueryByTableId(tableId);
setTableQueries(queries.tableQueries ?? []);
const queries = await getQueriesList({ entityId: tableId });
setTableQueries(queries.data);
} catch (error) {
showErrorToast(error as AxiosError);
} finally {

View File

@ -98,7 +98,6 @@ export const RECREATE_INDEX_OPTIONS = [
},
];
export const ENTITY_TREE_OPTIONS = [
{
title: 'All',
@ -114,7 +113,10 @@ export const ENTITY_TREE_OPTIONS = [
},
];
export const RE_INDEX_LANG_OPTIONS = map(SearchIndexMappingLanguage, (value) => ({
label: value,
value,
}));
export const RE_INDEX_LANG_OPTIONS = map(
SearchIndexMappingLanguage,
(value) => ({
label: value,
value,
})
);

View File

@ -191,14 +191,6 @@ export const MOCK_TABLE = {
columnCount: 12,
rowCount: 14567,
},
tableQueries: [
{
query:
'create table shopify.dim_address_clean as select address_id, shop_id, first_name, last_name, address1 as address, company, city, region, zip, country, phone from shopify.dim_address',
vote: 1,
checksum: 'cd59a9d0d0b8a245f7382264afac8bdc',
},
],
sampleData: {
columns: ['address_id', 'shop_id', 'first_name', 'last_name'],
rows: [
@ -331,3 +323,12 @@ export const COLUMN_PROFILER_RESULT = [
median: 7344.0,
},
];
export const MOCK_TABLE_QUERY = [
{
query:
'create table shopify.dim_address_clean as select address_id, shop_id, first_name, last_name, address1 as address, company, city, region, zip, country, phone from shopify.dim_address',
vote: 1,
checksum: 'cd59a9d0d0b8a245f7382264afac8bdc',
},
];

View File

@ -91,8 +91,6 @@ const DatasetDetailsPage: FunctionComponent = () => {
const [isLoading, setIsLoading] = useState<boolean>(true);
const [isSampleDataLoading, setIsSampleDataLoading] =
useState<boolean>(false);
const [isTableQueriesLoading, setIsTableQueriesLoading] =
useState<boolean>(false);
const [isentityThreadLoading, setIsentityThreadLoading] =
useState<boolean>(false);
const [isTableProfileLoading, setIsTableProfileLoading] =
@ -137,7 +135,6 @@ const DatasetDetailsPage: FunctionComponent = () => {
);
const [deleted, setDeleted] = useState<boolean>(false);
const [isError, setIsError] = useState(false);
const [tableQueries, setTableQueries] = useState<Table['tableQueries']>([]);
const [entityThread, setEntityThread] = useState<Thread[]>([]);
const [feedCount, setFeedCount] = useState<number>(0);
@ -398,33 +395,6 @@ const DatasetDetailsPage: FunctionComponent = () => {
break;
}
case TabSpecificField.TABLE_QUERIES: {
if ((tableQueries?.length ?? 0) > 0) {
break;
} else {
setIsTableQueriesLoading(true);
getTableDetailsByFQN(tableFQN, tabField)
.then((res) => {
if (res) {
const { tableQueries } = res;
setTableQueries(tableQueries);
} else {
showErrorToast(
jsonData['api-error-messages']['fetch-table-queries-error']
);
}
})
.catch((err: AxiosError) => {
showErrorToast(
err,
jsonData['api-error-messages']['fetch-table-queries-error']
);
})
.finally(() => setIsTableQueriesLoading(false));
break;
}
}
case TabSpecificField.ACTIVITY_FEED: {
getFeedData();
@ -748,7 +718,6 @@ const DatasetDetailsPage: FunctionComponent = () => {
followTableHandler={followTable}
followers={followers}
handleExtensionUpdate={handleExtentionUpdate}
isQueriesLoading={isTableQueriesLoading}
isSampleDataLoading={isSampleDataLoading}
isTableProfileLoading={isTableProfileLoading}
isentityThreadLoading={isentityThreadLoading}
@ -762,7 +731,6 @@ const DatasetDetailsPage: FunctionComponent = () => {
slashedTableName={slashedTableName}
tableDetails={tableDetails}
tableProfile={tableProfile}
tableQueries={tableQueries}
tableTags={tableTags}
tableType={tableType}
tagUpdateHandler={onTagUpdate}

View File

@ -12,15 +12,13 @@
*/
import { Form, Input, Modal, Select, TreeSelect } from 'antd';
import { SearchIndexMappingLanguage } from 'generated/configuration/elasticSearchConfiguration';
import { map } from 'lodash';
import React from 'react';
import { useTranslation } from 'react-i18next';
import {
ELASTIC_SEARCH_INITIAL_VALUES,
RECREATE_INDEX_OPTIONS,
ENTITY_TREE_OPTIONS,
RE_INDEX_LANG_OPTIONS
RECREATE_INDEX_OPTIONS,
RE_INDEX_LANG_OPTIONS,
} from '../../constants/elasticsearch.constant';
import { CreateEventPublisherJob } from '../../generated/api/createEventPublisherJob';
@ -39,8 +37,6 @@ const ReIndexAllModal = ({
}: ReIndexAllModalInterface) => {
const { t } = useTranslation();
return (
<Modal
centered

View File

@ -198,7 +198,6 @@ const TourPage = () => {
tableProfile={
mockDatasetData.tableProfile as unknown as Table['profile']
}
tableQueries={[]}
tableTags={mockDatasetData.tableTags}
tableType={mockDatasetData.tableType as TableType}
tagUpdateHandler={handleCountChange}

View File

@ -0,0 +1,49 @@
/*
* Copyright 2022 Collate.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { AxiosResponse } from 'axios';
import { CreateQuery } from 'generated/api/data/createQuery';
import { Query } from 'generated/entity/data/query';
import { Include } from 'generated/type/include';
import { PagingResponse } from 'Models';
import APIClient from './index';
type Params = {
fields?: string;
limit?: number;
before?: string;
after?: string;
include?: Include;
};
export type ListQueriesParams = Params & {
entityId?: string;
};
const BASE_URL = '/queries';
export const getQueriesList = async (params?: ListQueriesParams) => {
const response = await APIClient.get<PagingResponse<Query[]>>(BASE_URL, {
params,
});
return response.data;
};
export const postQuery = async (query: CreateQuery) => {
const response = await APIClient.post<CreateQuery, AxiosResponse<Query>>(
BASE_URL,
query
);
return response.data;
};

View File

@ -218,12 +218,6 @@ export const getSampleDataByTableId = async (id: string) => {
return response.data;
};
export const getTableQueryByTableId = async (id: string) => {
const response = await APIClient.get<Table>(`/tables/${id}/tableQuery`);
return response.data;
};
export const getLatestTableProfileByFqn = async (fqn: string) => {
const encodedFQN = encodeURIComponent(fqn);
const response = await APIClient.get<Table>(