fix(extension) Fixes routing for the embed pages for chrome extension (#9648)

This commit is contained in:
Chris Collins 2024-01-17 18:15:36 -05:00 committed by GitHub
parent dadd51e750
commit 1d0e9f1ac7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 62 additions and 15 deletions

View File

@ -40,6 +40,8 @@ import { ListRecommendationsDocument } from './graphql/recommendations.generated
import { FetchedEntity } from './app/lineage/types'; import { FetchedEntity } from './app/lineage/types';
import { DEFAULT_APP_CONFIG } from './appConfigContext'; import { DEFAULT_APP_CONFIG } from './appConfigContext';
import { GetQuickFiltersDocument } from './graphql/quickFilters.generated'; import { GetQuickFiltersDocument } from './graphql/quickFilters.generated';
import { GetGrantedPrivilegesDocument } from './graphql/policy.generated';
import { VIEW_ENTITY_PAGE } from './app/entity/shared/constants';
export const user1 = { export const user1 = {
__typename: 'CorpUser', __typename: 'CorpUser',
@ -3713,6 +3715,20 @@ export const mocks = [
data: [], data: [],
}, },
}, },
{
request: {
query: GetGrantedPrivilegesDocument,
variables: {
input: {
actorUrn: 'urn:li:corpuser:3',
resourceSpec: { resourceType: EntityType.Dataset, resourceUrn: dataset3.urn },
},
},
},
result: {
data: { getGrantedPrivileges: { privileges: [VIEW_ENTITY_PAGE] } },
},
},
]; ];
export const mocksWithSearchFlagsOff = [ export const mocksWithSearchFlagsOff = [

View File

@ -0,0 +1,23 @@
import React from 'react';
import { Route } from 'react-router-dom';
import { PageRoutes } from '../conf/Global';
import EmbeddedPage from './embed/EmbeddedPage';
import { useEntityRegistry } from './useEntityRegistry';
import EmbedLookup from './embed/lookup';
export default function EmbedRoutes() {
const entityRegistry = useEntityRegistry();
return (
<>
<Route exact path={PageRoutes.EMBED_LOOKUP} render={() => <EmbedLookup />} />
{entityRegistry.getEntities().map((entity) => (
<Route
key={`${entity.getPathName()}/${PageRoutes.EMBED}`}
path={`${PageRoutes.EMBED}/${entity.getPathName()}/:urn`}
render={() => <EmbeddedPage entityType={entity.type} />}
/>
))}
</>
);
}

View File

@ -3,11 +3,9 @@ import { Switch, Route } from 'react-router-dom';
import { Layout } from 'antd'; import { Layout } from 'antd';
import { HomePage } from './home/HomePage'; import { HomePage } from './home/HomePage';
import { SearchRoutes } from './SearchRoutes'; import { SearchRoutes } from './SearchRoutes';
import { PageRoutes } from '../conf/Global';
import EmbeddedPage from './embed/EmbeddedPage';
import { useEntityRegistry } from './useEntityRegistry';
import AppProviders from './AppProviders'; import AppProviders from './AppProviders';
import EmbedLookup from './embed/lookup'; import EmbedRoutes from './EmbedRoutes';
import { PageRoutes } from '../conf/Global';
/** /**
* Container for all views behind an authentication wall. * Container for all views behind an authentication wall.
@ -18,16 +16,7 @@ export const ProtectedRoutes = (): JSX.Element => {
<Layout> <Layout>
<Switch> <Switch>
<Route exact path="/" render={() => <HomePage />} /> <Route exact path="/" render={() => <HomePage />} />
<Route exact path={PageRoutes.EMBED_LOOKUP} render={() => <EmbedLookup />} /> <Route path={PageRoutes.EMBED} render={() => <EmbedRoutes />} />
{useEntityRegistry()
.getEntities()
.map((entity) => (
<Route
key={`${entity.getPathName()}/${PageRoutes.EMBED}`}
path={`${PageRoutes.EMBED}/${entity.getPathName()}/:urn`}
render={() => <EmbeddedPage entityType={entity.type} />}
/>
))}
<Route path="/*" render={() => <SearchRoutes />} /> <Route path="/*" render={() => <SearchRoutes />} />
</Switch> </Switch>
</Layout> </Layout>

View File

@ -0,0 +1,18 @@
import React from 'react';
import { render, waitFor } from '@testing-library/react';
import { MockedProvider } from '@apollo/client/testing';
import { mocks } from '../../Mocks';
import TestPageContainer from '../../utils/test-utils/TestPageContainer';
import { Routes } from '../Routes';
test('renders embed page properly', async () => {
const { getByText } = render(
<MockedProvider mocks={mocks} addTypename={false}>
<TestPageContainer initialEntries={['/embed/dataset/urn:li:dataset:3']}>
<Routes />
</TestPageContainer>
</MockedProvider>,
);
await waitFor(() => expect(getByText('Yet Another Dataset')).toBeInTheDocument());
});

View File

@ -48,6 +48,7 @@ export default function EmbeddedPage({ entityType }: Props) {
}, },
}, },
fetchPolicy: 'cache-first', fetchPolicy: 'cache-first',
skip: !authenticatedUserUrn,
}); });
const privileges = data?.getGrantedPrivileges?.privileges || []; const privileges = data?.getGrantedPrivileges?.privileges || [];