Update tech docs search filters to be aware when to use legacy paths and when not.

Signed-off-by: Jussi Hallila <jussi@hallila.com>
This commit is contained in:
Jussi Hallila
2021-09-07 15:55:02 +02:00
parent 1d346ba903
commit 44aac03eb7
2 changed files with 48 additions and 10 deletions
@@ -14,7 +14,7 @@
* limitations under the License.
*/
import React from 'react';
import { TechDocsSearch } from './TechDocsSearch';
import { buildInitialFilters, TechDocsSearch } from './TechDocsSearch';
import {
act,
fireEvent,
@@ -89,7 +89,7 @@ describe('<TechDocsPage />', () => {
await singleResult;
expect(querySpy).toBeCalledWith({
filters: {
kind: 'Testable',
kind: 'testable',
name: 'test',
namespace: 'testspace',
},
@@ -108,7 +108,7 @@ describe('<TechDocsPage />', () => {
await waitFor(() =>
expect(querySpy).toBeCalledWith({
filters: {
kind: 'Testable',
kind: 'testable',
name: 'test',
namespace: 'testspace',
},
@@ -120,3 +120,23 @@ describe('<TechDocsPage />', () => {
});
});
});
describe('buildInitialFilters', () => {
const filterEnt = {
name: 'Test',
kind: 'TestKind',
namespace: 'TeStNaMeSpAcE',
};
it('should use filters as is when legacy path', () => {
const filters = buildInitialFilters(true, filterEnt);
expect(filters).toStrictEqual(filterEnt);
});
it('should lowercase all filters for new approach', () => {
const filters = buildInitialFilters(false, filterEnt);
expect(filters).toStrictEqual({
name: 'test',
kind: 'testkind',
namespace: 'testnamespace',
});
});
});
@@ -16,11 +16,11 @@
import React, { ChangeEvent, useEffect, useState } from 'react';
import {
CircularProgress,
Grid,
IconButton,
InputAdornment,
TextField,
CircularProgress,
} from '@material-ui/core';
import Autocomplete from '@material-ui/lab/Autocomplete';
import { SearchContextProvider, useSearch } from '@backstage/plugin-search';
@@ -28,13 +28,15 @@ import { DocsResultListItem } from '../../components/DocsResultListItem';
import SearchIcon from '@material-ui/icons/Search';
import { useDebounce } from 'react-use';
import { useNavigate } from 'react-router';
import { configApiRef, useApi } from '@backstage/core-plugin-api';
type EntityId = {
name: string;
namespace: string;
kind: string;
};
type TechDocsSearchProps = {
entityId: {
name: string;
namespace: string;
kind: string;
};
entityId: EntityId;
debounceTime?: number;
};
@@ -52,6 +54,17 @@ type TechDocsSearchResult = {
document: TechDocsDoc;
};
export const buildInitialFilters = (
legacyPaths: boolean,
entityId: EntityId,
) => {
return legacyPaths
? entityId
: Object.entries(entityId).reduce((acc, [key, value]) => {
return { ...acc, [key]: value.toLowerCase() };
}, {});
};
const TechDocsSearchBar = ({
entityId,
debounceTime = 150,
@@ -161,12 +174,17 @@ const TechDocsSearchBar = ({
</Grid>
);
};
const TechDocsSearch = (props: TechDocsSearchProps) => {
const configApi = useApi(configApiRef);
const legacyPaths = configApi.getOptionalBoolean(
'techdocs.legacyUseCaseSensitiveTripletPaths',
);
const initialState = {
term: '',
types: ['techdocs'],
pageCursor: '',
filters: props.entityId,
filters: buildInitialFilters(legacyPaths || false, props.entityId),
};
return (
<SearchContextProvider initialState={initialState}>