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:
@@ -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}>
|
||||
|
||||
Reference in New Issue
Block a user