@backstage/plugin-search 0.9.0 → 0.9.1-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +44 -0
- package/dist/esm/{index-5aaf3de8.esm.js → index-2e41707a.esm.js} +2 -2
- package/dist/esm/index-2e41707a.esm.js.map +1 -0
- package/dist/esm/{index-8a1f0d37.esm.js → index-30f1f9c5.esm.js} +2 -2
- package/dist/esm/{index-8a1f0d37.esm.js.map → index-30f1f9c5.esm.js.map} +1 -1
- package/dist/esm/{index-2180028e.esm.js → index-50da964c.esm.js} +2 -2
- package/dist/esm/{index-2180028e.esm.js.map → index-50da964c.esm.js.map} +1 -1
- package/dist/esm/{index-8388a95e.esm.js → index-5187be91.esm.js} +13 -6
- package/dist/esm/index-5187be91.esm.js.map +1 -0
- package/dist/index.esm.js +1 -1
- package/package.json +13 -13
- package/dist/esm/index-5aaf3de8.esm.js.map +0 -1
- package/dist/esm/index-8388a95e.esm.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,49 @@
|
|
|
1
1
|
# @backstage/plugin-search
|
|
2
2
|
|
|
3
|
+
## 0.9.1-next.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies
|
|
8
|
+
- @backstage/core-components@0.10.0-next.2
|
|
9
|
+
- @backstage/catalog-model@1.1.0-next.2
|
|
10
|
+
- @backstage/plugin-search-react@0.2.2-next.2
|
|
11
|
+
- @backstage/theme@0.2.16-next.1
|
|
12
|
+
- @backstage/plugin-catalog-react@1.1.2-next.2
|
|
13
|
+
|
|
14
|
+
## 0.9.1-next.1
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- 509c4092f0: To allow people to use a global search context in the search modal, the code for the search modal has been changed to only create a local search context if there is no parent context already defined.
|
|
19
|
+
|
|
20
|
+
If you want to continue using a local context even if you define a global one, you will have to wrap the modal in a new local context manually:
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
<SearchContextProvider>
|
|
24
|
+
<SearchModal toggleModal={toggleModal} />
|
|
25
|
+
</SearchContextProvider>
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
- Updated dependencies
|
|
29
|
+
- @backstage/core-components@0.9.6-next.1
|
|
30
|
+
- @backstage/catalog-model@1.1.0-next.1
|
|
31
|
+
- @backstage/errors@1.1.0-next.0
|
|
32
|
+
- @backstage/theme@0.2.16-next.0
|
|
33
|
+
- @backstage/plugin-catalog-react@1.1.2-next.1
|
|
34
|
+
- @backstage/plugin-search-common@0.3.6-next.0
|
|
35
|
+
- @backstage/plugin-search-react@0.2.2-next.1
|
|
36
|
+
|
|
37
|
+
## 0.9.1-next.0
|
|
38
|
+
|
|
39
|
+
### Patch Changes
|
|
40
|
+
|
|
41
|
+
- Updated dependencies
|
|
42
|
+
- @backstage/catalog-model@1.1.0-next.0
|
|
43
|
+
- @backstage/core-components@0.9.6-next.0
|
|
44
|
+
- @backstage/plugin-catalog-react@1.1.2-next.0
|
|
45
|
+
- @backstage/plugin-search-react@0.2.2-next.0
|
|
46
|
+
|
|
3
47
|
## 0.9.0
|
|
4
48
|
|
|
5
49
|
### Minor Changes
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { S as SearchPage } from './index-
|
|
1
|
+
export { S as SearchPage } from './index-5187be91.esm.js';
|
|
2
2
|
import 'react';
|
|
3
3
|
import '@material-ui/icons/FilterList';
|
|
4
4
|
import '@material-ui/core';
|
|
@@ -27,4 +27,4 @@ import 'react-use/lib/useEffectOnce';
|
|
|
27
27
|
import '@material-ui/icons/ExpandMore';
|
|
28
28
|
import '@material-ui/icons/FontDownload';
|
|
29
29
|
import 'react-router-dom';
|
|
30
|
-
//# sourceMappingURL=index-
|
|
30
|
+
//# sourceMappingURL=index-2e41707a.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-2e41707a.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import SearchIcon from '@material-ui/icons/Search';
|
|
3
3
|
import { SidebarItem } from '@backstage/core-components';
|
|
4
|
-
import { a as SearchModalProvider, u as useSearchModal, b as SearchModal } from './index-
|
|
4
|
+
import { a as SearchModalProvider, u as useSearchModal, b as SearchModal } from './index-5187be91.esm.js';
|
|
5
5
|
import '@material-ui/icons/FilterList';
|
|
6
6
|
import '@material-ui/core';
|
|
7
7
|
import '@backstage/plugin-search-react';
|
|
@@ -49,4 +49,4 @@ const SidebarSearchModal = (props) => {
|
|
|
49
49
|
};
|
|
50
50
|
|
|
51
51
|
export { SidebarSearchModal };
|
|
52
|
-
//# sourceMappingURL=index-
|
|
52
|
+
//# sourceMappingURL=index-30f1f9c5.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-30f1f9c5.esm.js","sources":["../../src/components/SidebarSearchModal/SidebarSearchModal.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\nimport SearchIcon from '@material-ui/icons/Search';\nimport { SidebarItem } from '@backstage/core-components';\nimport { IconComponent } from '@backstage/core-plugin-api';\nimport {\n SearchModal,\n SearchModalChildrenProps,\n SearchModalProvider,\n useSearchModal,\n} from '../SearchModal';\n\n/**\n * Props for {@link SidebarSearchModal}.\n *\n * @public\n */\nexport type SidebarSearchModalProps = {\n icon?: IconComponent;\n children?: (props: SearchModalChildrenProps) => JSX.Element;\n};\n\nconst SidebarSearchModalContent = (props: SidebarSearchModalProps) => {\n const { state, toggleModal } = useSearchModal();\n const Icon = props.icon ? props.icon : SearchIcon;\n\n return (\n <>\n <SidebarItem\n className=\"search-icon\"\n icon={Icon}\n text=\"Search\"\n onClick={toggleModal}\n />\n <SearchModal\n {...state}\n toggleModal={toggleModal}\n children={props.children}\n />\n </>\n );\n};\n\nexport const SidebarSearchModal = (props: SidebarSearchModalProps) => {\n return (\n <SearchModalProvider>\n <SidebarSearchModalContent {...props} />\n </SearchModalProvider>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,MAAM,yBAAyB,GAAG,CAAC,KAAK,KAAK;AAC7C,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,cAAc,EAAE,CAAC;AAClD,EAAE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;AACpD,EAAE,uBAAuB,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,kBAAkB,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE;AACpH,IAAI,SAAS,EAAE,aAAa;AAC5B,IAAI,IAAI,EAAE,IAAI;AACd,IAAI,IAAI,EAAE,QAAQ;AAClB,IAAI,OAAO,EAAE,WAAW;AACxB,GAAG,CAAC,kBAAkB,KAAK,CAAC,aAAa,CAAC,WAAW,EAAE;AACvD,IAAI,GAAG,KAAK;AACZ,IAAI,WAAW;AACf,IAAI,QAAQ,EAAE,KAAK,CAAC,QAAQ;AAC5B,GAAG,CAAC,CAAC,CAAC;AACN,CAAC,CAAC;AACU,MAAC,kBAAkB,GAAG,CAAC,KAAK,KAAK;AAC7C,EAAE,uBAAuB,KAAK,CAAC,aAAa,CAAC,mBAAmB,EAAE,IAAI,kBAAkB,KAAK,CAAC,aAAa,CAAC,yBAAyB,EAAE;AACvI,IAAI,GAAG,KAAK;AACZ,GAAG,CAAC,CAAC,CAAC;AACN;;;;"}
|
|
@@ -3,7 +3,7 @@ import { makeStyles } from '@material-ui/core/styles';
|
|
|
3
3
|
import { SearchBarBase } from '@backstage/plugin-search-react';
|
|
4
4
|
import qs from 'qs';
|
|
5
5
|
import { useNavigate } from 'react-router-dom';
|
|
6
|
-
import { r as rootRouteRef } from './index-
|
|
6
|
+
import { r as rootRouteRef } from './index-5187be91.esm.js';
|
|
7
7
|
import { useRouteRef } from '@backstage/core-plugin-api';
|
|
8
8
|
import '@material-ui/icons/FilterList';
|
|
9
9
|
import '@material-ui/core';
|
|
@@ -64,4 +64,4 @@ const HomePageSearchBar = ({ ...props }) => {
|
|
|
64
64
|
};
|
|
65
65
|
|
|
66
66
|
export { HomePageSearchBar };
|
|
67
|
-
//# sourceMappingURL=index-
|
|
67
|
+
//# sourceMappingURL=index-50da964c.esm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-50da964c.esm.js","sources":["../../src/components/util.ts","../../src/components/HomePageComponent/HomePageSearchBar.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport qs from 'qs';\nimport { useCallback } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { rootRouteRef } from '../plugin';\n\nimport { useRouteRef } from '@backstage/core-plugin-api';\n\nexport const useNavigateToQuery = () => {\n const searchRoute = useRouteRef(rootRouteRef);\n const navigate = useNavigate();\n return useCallback(\n ({ query }: { query: string }): void => {\n const queryString = qs.stringify({ query }, { addQueryPrefix: true });\n\n navigate(`${searchRoute()}${queryString}`);\n },\n [navigate, searchRoute],\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { useCallback, useState } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n SearchBarBase,\n SearchBarBaseProps,\n} from '@backstage/plugin-search-react';\nimport { useNavigateToQuery } from '../util';\n\nconst useStyles = makeStyles({\n root: {\n border: '1px solid #555',\n borderRadius: '6px',\n fontSize: '1.5em',\n },\n});\n\n/**\n * Props for {@link HomePageSearchBar}.\n *\n * @public\n */\nexport type HomePageSearchBarProps = Partial<\n Omit<SearchBarBaseProps, 'onChange' | 'onSubmit'>\n>;\n\n/**\n * The search bar created specifically for the composable home page.\n */\nexport const HomePageSearchBar = ({ ...props }: HomePageSearchBarProps) => {\n const classes = useStyles(props);\n const [query, setQuery] = useState('');\n const handleSearch = useNavigateToQuery();\n\n const handleSubmit = () => {\n handleSearch({ query });\n };\n\n const handleChange = useCallback(\n value => {\n setQuery(value);\n },\n [setQuery],\n );\n\n return (\n <SearchBarBase\n classes={{ root: classes.root }}\n value={query}\n onSubmit={handleSubmit}\n onChange={handleChange}\n {...props}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKO,MAAM,kBAAkB,GAAG,MAAM;AACxC,EAAE,MAAM,WAAW,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;AAChD,EAAE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;AACjC,EAAE,OAAO,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK;AACpC,IAAI,MAAM,WAAW,GAAG,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;AAC1E,IAAI,QAAQ,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAC/C,GAAG,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;AAC9B,CAAC;;ACND,MAAM,SAAS,GAAG,UAAU,CAAC;AAC7B,EAAE,IAAI,EAAE;AACR,IAAI,MAAM,EAAE,gBAAgB;AAC5B,IAAI,YAAY,EAAE,KAAK;AACvB,IAAI,QAAQ,EAAE,OAAO;AACrB,GAAG;AACH,CAAC,CAAC,CAAC;AACS,MAAC,iBAAiB,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK;AACnD,EAAE,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AACnC,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;AACzC,EAAE,MAAM,YAAY,GAAG,kBAAkB,EAAE,CAAC;AAC5C,EAAE,MAAM,YAAY,GAAG,MAAM;AAC7B,IAAI,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5B,GAAG,CAAC;AACJ,EAAE,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,KAAK,KAAK;AAC9C,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpB,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjB,EAAE,uBAAuB,KAAK,CAAC,aAAa,CAAC,aAAa,EAAE;AAC5D,IAAI,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE;AACnC,IAAI,KAAK,EAAE,KAAK;AAChB,IAAI,QAAQ,EAAE,YAAY;AAC1B,IAAI,QAAQ,EAAE,YAAY;AAC1B,IAAI,GAAG,KAAK;AACZ,GAAG,CAAC,CAAC;AACL;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useCallback, useContext, useState, useEffect, Fragment, cloneElement } from 'react';
|
|
2
2
|
import FilterListIcon from '@material-ui/icons/FilterList';
|
|
3
3
|
import { makeStyles, IconButton, Typography, Card, CardHeader, Button, Divider, CardContent, Select, MenuItem, List, ListItem, Checkbox, ListItemText, Dialog, useTheme, DialogTitle, Paper, DialogContent, Grid, DialogActions, Accordion, AccordionSummary, AccordionDetails, ListItemIcon, Tabs, Tab, FormControl, InputLabel, Chip } from '@material-ui/core';
|
|
4
|
-
import { SearchBarBase as SearchBarBase$1, useSearch, CheckboxFilter, SelectFilter, AutocompleteFilter, searchApiRef, SearchResult as SearchResult$2, DefaultResultListItem as DefaultResultListItem$1,
|
|
4
|
+
import { SearchBarBase as SearchBarBase$1, useSearch, CheckboxFilter, SelectFilter, AutocompleteFilter, searchApiRef, SearchResult as SearchResult$2, DefaultResultListItem as DefaultResultListItem$1, SearchBar as SearchBar$2, SearchResultPager as SearchResultPager$1, useSearchContextCheck, SearchContextProvider } from '@backstage/plugin-search-react';
|
|
5
5
|
import LaunchIcon from '@material-ui/icons/Launch';
|
|
6
6
|
import { makeStyles as makeStyles$1 } from '@material-ui/core/styles';
|
|
7
7
|
import { createRouteRef, createPlugin, createApiFactory, discoveryApiRef, identityApiRef, createRoutableExtension, createComponentExtension, useRouteRef, useApi } from '@backstage/core-plugin-api';
|
|
@@ -200,21 +200,21 @@ const searchPlugin = createPlugin({
|
|
|
200
200
|
});
|
|
201
201
|
const SearchPage$1 = searchPlugin.provide(createRoutableExtension({
|
|
202
202
|
name: "SearchPage",
|
|
203
|
-
component: () => import('./index-
|
|
203
|
+
component: () => import('./index-2e41707a.esm.js').then((m) => m.SearchPage),
|
|
204
204
|
mountPoint: rootRouteRef
|
|
205
205
|
}));
|
|
206
206
|
const SearchResult$1 = SearchResult$2;
|
|
207
207
|
const SidebarSearchModal = searchPlugin.provide(createComponentExtension({
|
|
208
208
|
name: "SidebarSearchModal",
|
|
209
209
|
component: {
|
|
210
|
-
lazy: () => import('./index-
|
|
210
|
+
lazy: () => import('./index-30f1f9c5.esm.js').then((m) => m.SidebarSearchModal)
|
|
211
211
|
}
|
|
212
212
|
}));
|
|
213
213
|
const DefaultResultListItem = DefaultResultListItem$1;
|
|
214
214
|
const HomePageSearchBar = searchPlugin.provide(createComponentExtension({
|
|
215
215
|
name: "HomePageSearchBar",
|
|
216
216
|
component: {
|
|
217
|
-
lazy: () => import('./index-
|
|
217
|
+
lazy: () => import('./index-50da964c.esm.js').then((m) => m.HomePageSearchBar)
|
|
218
218
|
}
|
|
219
219
|
}));
|
|
220
220
|
|
|
@@ -285,6 +285,13 @@ const Modal = ({ toggleModal }) => {
|
|
|
285
285
|
xs: 12
|
|
286
286
|
}, /* @__PURE__ */ React.createElement(SearchResultPager$1, null)))));
|
|
287
287
|
};
|
|
288
|
+
const Context = ({ children }) => {
|
|
289
|
+
const hasParentContext = useSearchContextCheck();
|
|
290
|
+
if (hasParentContext) {
|
|
291
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, children);
|
|
292
|
+
}
|
|
293
|
+
return /* @__PURE__ */ React.createElement(SearchContextProvider, null, children);
|
|
294
|
+
};
|
|
288
295
|
const SearchModal = ({
|
|
289
296
|
open = true,
|
|
290
297
|
hidden,
|
|
@@ -303,7 +310,7 @@ const SearchModal = ({
|
|
|
303
310
|
maxWidth: "lg",
|
|
304
311
|
open,
|
|
305
312
|
hidden
|
|
306
|
-
}, open && /* @__PURE__ */ React.createElement(
|
|
313
|
+
}, open && /* @__PURE__ */ React.createElement(Context, null, (_a = children && children({ toggleModal })) != null ? _a : /* @__PURE__ */ React.createElement(Modal, {
|
|
307
314
|
toggleModal
|
|
308
315
|
})));
|
|
309
316
|
};
|
|
@@ -1014,4 +1021,4 @@ const SidebarSearch = (props) => {
|
|
|
1014
1021
|
};
|
|
1015
1022
|
|
|
1016
1023
|
export { DefaultResultListItem as D, Filters$1 as F, HomePageSearchBar as H, SearchPage as S, SearchModalProvider as a, SearchModal as b, FiltersButton$1 as c, SearchBar$1 as d, SearchBarBase as e, SearchFilter as f, SearchResultPager as g, SearchType as h, SidebarSearch as i, SearchPage$1 as j, SearchResult$1 as k, SidebarSearchModal as l, rootRouteRef as r, searchPlugin as s, useSearchModal as u };
|
|
1017
|
-
//# sourceMappingURL=index-
|
|
1024
|
+
//# sourceMappingURL=index-5187be91.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-5187be91.esm.js","sources":["../../src/components/Filters/FiltersButton.tsx","../../src/components/Filters/Filters.tsx","../../src/components/SearchBar/SearchBar.tsx","../../src/components/SearchFilter/SearchFilter.tsx","../../src/apis.ts","../../src/plugin.ts","../../src/components/SearchModal/SearchModal.tsx","../../src/components/SearchModal/useSearchModal.tsx","../../src/components/LegacySearchPage/LegacySearchBar.tsx","../../src/components/LegacySearchPage/Filters/FiltersButton.tsx","../../src/components/LegacySearchPage/Filters/Filters.tsx","../../src/components/LegacySearchPage/LegacySearchResult.tsx","../../src/components/LegacySearchPage/LegacySearchPage.tsx","../../src/components/SearchPage/SearchPage.tsx","../../src/components/SearchResultPager/SearchResultPager.tsx","../../src/components/SearchType/SearchType.Accordion.tsx","../../src/components/SearchType/SearchType.Tabs.tsx","../../src/components/SearchType/SearchType.tsx","../../src/components/SidebarSearch/SidebarSearch.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport FilterListIcon from '@material-ui/icons/FilterList';\nimport { makeStyles, IconButton, Typography } from '@material-ui/core';\n\nconst useStyles = makeStyles(theme => ({\n filters: {\n width: '250px',\n display: 'flex',\n },\n icon: {\n margin: theme.spacing(-1, 0, 0, 0),\n },\n}));\n\n/**\n * Props for {@link FiltersButton}.\n *\n * @public\n * @deprecated This type and corresponding component will be removed in a\n * future release.\n */\nexport type FiltersButtonProps = {\n numberOfSelectedFilters: number;\n handleToggleFilters: () => void;\n};\n\n/**\n * @public\n * @deprecated See `SearchFilter` in `@backstage/plugin-search-react` instead.\n */\nexport const FiltersButton = ({\n numberOfSelectedFilters,\n handleToggleFilters,\n}: FiltersButtonProps) => {\n const classes = useStyles();\n\n return (\n <div className={classes.filters}>\n <IconButton\n className={classes.icon}\n aria-label=\"settings\"\n onClick={handleToggleFilters}\n >\n <FilterListIcon />\n </IconButton>\n <Typography variant=\"h6\">\n Filters ({numberOfSelectedFilters ? numberOfSelectedFilters : 0})\n </Typography>\n </div>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n makeStyles,\n Typography,\n Divider,\n Card,\n CardHeader,\n Button,\n CardContent,\n Select,\n Checkbox,\n List,\n ListItem,\n ListItemText,\n MenuItem,\n} from '@material-ui/core';\n\nconst useStyles = makeStyles(theme => ({\n filters: {\n background: 'transparent',\n boxShadow: '0px 0px 0px 0px',\n },\n checkbox: {\n padding: theme.spacing(0, 1, 0, 1),\n },\n dropdown: {\n width: '100%',\n },\n}));\n\n/**\n * @public\n * @deprecated This type and corresponding component will be removed in a\n * future release.\n */\nexport type FiltersState = {\n selected: string;\n checked: Array<string>;\n};\n\n/**\n * @public\n * @deprecated This type and corresponding component will be removed in a\n * future release.\n */\nexport type FilterOptions = {\n kind: Array<string>;\n lifecycle: Array<string>;\n};\n\n/**\n * Props for {@link Filters}.\n *\n * @public\n * @deprecated This type and corresponding component will be removed in a\n * future release.\n */\nexport type FiltersProps = {\n filters: FiltersState;\n filterOptions: FilterOptions;\n resetFilters: () => void;\n updateSelected: (filter: string) => void;\n updateChecked: (filter: string) => void;\n};\n\n/**\n * @public\n * @deprecated This component will be removed in a future release. Use\n * `SearchFilter` from `@backstage/plugin-search-react` instead.\n */\nexport const Filters = ({\n filters,\n filterOptions,\n resetFilters,\n updateSelected,\n updateChecked,\n}: FiltersProps) => {\n const classes = useStyles();\n\n return (\n <Card className={classes.filters}>\n <CardHeader\n title={<Typography variant=\"h6\">Filters</Typography>}\n action={\n <Button color=\"primary\" onClick={() => resetFilters()}>\n CLEAR ALL\n </Button>\n }\n />\n <Divider />\n {filterOptions.kind.length === 0 && filterOptions.lifecycle.length === 0 && (\n <CardContent>\n <Typography variant=\"subtitle2\">\n Filters cannot be applied to available results\n </Typography>\n </CardContent>\n )}\n {filterOptions.kind.length > 0 && (\n <CardContent>\n <Typography variant=\"subtitle2\">Kind</Typography>\n <Select\n id=\"outlined-select\"\n onChange={(e: React.ChangeEvent<any>) =>\n updateSelected(e?.target?.value)\n }\n variant=\"outlined\"\n className={classes.dropdown}\n value={filters.selected}\n >\n {filterOptions.kind.map(filter => (\n <MenuItem\n selected={filter === ''}\n dense\n key={filter}\n value={filter}\n >\n {filter}\n </MenuItem>\n ))}\n </Select>\n </CardContent>\n )}\n {filterOptions.lifecycle.length > 0 && (\n <CardContent>\n <Typography variant=\"subtitle2\">Lifecycle</Typography>\n <List disablePadding dense>\n {filterOptions.lifecycle.map(filter => (\n <ListItem\n key={filter}\n dense\n button\n onClick={() => updateChecked(filter)}\n >\n <Checkbox\n edge=\"start\"\n disableRipple\n className={classes.checkbox}\n color=\"primary\"\n checked={filters.checked.includes(filter)}\n tabIndex={-1}\n value={filter}\n name={filter}\n />\n <ListItemText id={filter} primary={filter} />\n </ListItem>\n ))}\n </List>\n </CardContent>\n )}\n </Card>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { useCallback } from 'react';\n\nimport { InputBaseProps } from '@material-ui/core';\n\nimport {\n SearchBarBase as RealSearchBarBase,\n useSearch,\n} from '@backstage/plugin-search-react';\n\n/**\n * Props for {@link SearchBarBase}.\n *\n * @public\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nexport type SearchBarBaseProps = Omit<InputBaseProps, 'onChange'> & {\n debounceTime?: number;\n clearButton?: boolean;\n onClear?: () => void;\n onSubmit?: () => void;\n onChange: (value: string) => void;\n};\n\n/**\n * All search boxes exported by the search plugin are based on the <SearchBarBase />,\n * and this one is based on the <InputBase /> component from Material UI.\n * Recommended if you don't use Search Provider or Search Context.\n *\n * @public\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nexport const SearchBarBase = RealSearchBarBase;\n\n/**\n * Props for {@link SearchBar}.\n *\n * @public\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nexport type SearchBarProps = Partial<SearchBarBaseProps>;\n\n/**\n * Recommended search bar when you use the Search Provider or Search Context.\n *\n * @public\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nexport const SearchBar = ({ onChange, ...props }: SearchBarProps) => {\n const { term, setTerm } = useSearch();\n\n const handleChange = useCallback(\n (newValue: string) => {\n if (onChange) {\n onChange(newValue);\n } else {\n setTerm(newValue);\n }\n },\n [onChange, setTerm],\n );\n\n return <SearchBarBase value={term} onChange={handleChange} {...props} />;\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { ReactElement } from 'react';\n\nimport {\n AutocompleteFilter,\n CheckboxFilter,\n SearchAutocompleteFilterProps,\n SelectFilter,\n} from '@backstage/plugin-search-react';\n\n/**\n * @public\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nexport type SearchFilterComponentProps = {\n className?: string;\n name: string;\n label?: string;\n /**\n * Either an array of values directly, or an async function to return a list\n * of values to be used in the filter. In the autocomplete filter, the last\n * input value is provided as an input to allow values to be filtered. This\n * function is debounced and values cached.\n */\n values?: string[] | ((partial: string) => Promise<string[]>);\n defaultValue?: string[] | string | null;\n /**\n * Debounce time in milliseconds, used when values is an async callback.\n * Defaults to 250ms.\n */\n valuesDebounceMs?: number;\n};\n\n/**\n * @public\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nexport type SearchFilterWrapperProps = SearchFilterComponentProps & {\n component: (props: SearchFilterComponentProps) => ReactElement;\n debug?: boolean;\n};\n\n/**\n * @public\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nconst SearchFilter = ({\n component: Element,\n ...props\n}: SearchFilterWrapperProps) => <Element {...props} />;\n\n/**\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nSearchFilter.Checkbox = (\n props: Omit<SearchFilterWrapperProps, 'component'> &\n SearchFilterComponentProps,\n) => <SearchFilter {...props} component={CheckboxFilter} />;\n\n/**\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nSearchFilter.Select = (\n props: Omit<SearchFilterWrapperProps, 'component'> &\n SearchFilterComponentProps,\n) => <SearchFilter {...props} component={SelectFilter} />;\n\n/**\n * A control surface for a given filter field name, rendered as an autocomplete\n * textfield. A hard-coded list of values may be provided, or an async function\n * which returns values may be provided instead.\n *\n * @public\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nSearchFilter.Autocomplete = (props: SearchAutocompleteFilterProps) => (\n <SearchFilter {...props} component={AutocompleteFilter} />\n);\n\nexport { SearchFilter };\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api';\nimport { ResponseError } from '@backstage/errors';\nimport { SearchApi } from '@backstage/plugin-search-react';\nimport { SearchQuery, SearchResultSet } from '@backstage/plugin-search-common';\n\nimport qs from 'qs';\n\nexport class SearchClient implements SearchApi {\n private readonly discoveryApi: DiscoveryApi;\n private readonly identityApi: IdentityApi;\n\n constructor(options: {\n discoveryApi: DiscoveryApi;\n identityApi: IdentityApi;\n }) {\n this.discoveryApi = options.discoveryApi;\n this.identityApi = options.identityApi;\n }\n\n async query(query: SearchQuery): Promise<SearchResultSet> {\n const { token } = await this.identityApi.getCredentials();\n const queryString = qs.stringify(query);\n const url = `${await this.discoveryApi.getBaseUrl(\n 'search/query',\n )}?${queryString}`;\n const response = await fetch(url, {\n headers: token ? { Authorization: `Bearer ${token}` } : {},\n });\n\n if (!response.ok) {\n throw await ResponseError.fromResponse(response);\n }\n\n return response.json();\n }\n}\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SearchClient } from './apis';\nimport {\n searchApiRef,\n SearchResult as RealSearchResult,\n DefaultResultListItem as RealDefaultResultListItem,\n} from '@backstage/plugin-search-react';\nimport {\n createApiFactory,\n createPlugin,\n createRouteRef,\n createRoutableExtension,\n discoveryApiRef,\n createComponentExtension,\n identityApiRef,\n} from '@backstage/core-plugin-api';\n\nexport const rootRouteRef = createRouteRef({\n id: 'search',\n});\n\n/**\n * @public\n */\nexport const searchPlugin = createPlugin({\n id: 'search',\n apis: [\n createApiFactory({\n api: searchApiRef,\n deps: { discoveryApi: discoveryApiRef, identityApi: identityApiRef },\n factory: ({ discoveryApi, identityApi }) => {\n return new SearchClient({ discoveryApi, identityApi });\n },\n }),\n ],\n routes: {\n root: rootRouteRef,\n },\n});\n\n/**\n * @public\n */\nexport const SearchPage = searchPlugin.provide(\n createRoutableExtension({\n name: 'SearchPage',\n component: () => import('./components/SearchPage').then(m => m.SearchPage),\n mountPoint: rootRouteRef,\n }),\n);\n\n/**\n * @public\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nexport const SearchResult = RealSearchResult;\n\n/**\n * @public\n */\nexport const SidebarSearchModal = searchPlugin.provide(\n createComponentExtension({\n name: 'SidebarSearchModal',\n component: {\n lazy: () =>\n import('./components/SidebarSearchModal').then(\n m => m.SidebarSearchModal,\n ),\n },\n }),\n);\n\n/**\n * @public\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nexport const DefaultResultListItem = RealDefaultResultListItem;\n\n/**\n * @public\n */\nexport const HomePageSearchBar = searchPlugin.provide(\n createComponentExtension({\n name: 'HomePageSearchBar',\n component: {\n lazy: () =>\n import('./components/HomePageComponent').then(m => m.HomePageSearchBar),\n },\n }),\n);\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { PropsWithChildren } from 'react';\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Divider,\n Grid,\n List,\n Paper,\n useTheme,\n} from '@material-ui/core';\nimport LaunchIcon from '@material-ui/icons/Launch';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n DefaultResultListItem,\n SearchContextProvider,\n SearchBar,\n SearchResult,\n SearchResultPager,\n useSearch,\n useSearchContextCheck,\n} from '@backstage/plugin-search-react';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { Link, useContent } from '@backstage/core-components';\nimport { rootRouteRef } from '../../plugin';\n\n/**\n * @public\n **/\nexport interface SearchModalChildrenProps {\n /**\n * A function that should be invoked when navigating away from the modal.\n */\n toggleModal: () => void;\n}\n\n/**\n * @public\n **/\nexport interface SearchModalProps {\n /**\n * If true, it renders the modal.\n */\n open?: boolean;\n /**\n * This is supposed to be used together with the open prop.\n * If `hidden` is true, it hides the modal.\n * If `open` is false, the value of `hidden` has no effect on the modal.\n * Use `open` for controlling whether the modal should be rendered or not.\n */\n hidden?: boolean;\n /**\n * a function invoked when a search item is pressed or when the dialog\n * should be closed.\n */\n toggleModal: () => void;\n /**\n * A function that returns custom content to render in the search modal in\n * place of the default.\n */\n children?: (props: SearchModalChildrenProps) => JSX.Element;\n}\n\nconst useStyles = makeStyles(theme => ({\n container: {\n borderRadius: 30,\n display: 'flex',\n height: '2.4em',\n },\n input: {\n flex: 1,\n },\n // Reduces default height of the modal, keeping a gap of 128px between the top and bottom of the page.\n paperFullWidth: { height: 'calc(100% - 128px)' },\n dialogActionsContainer: { padding: theme.spacing(1, 3) },\n viewResultsLink: { verticalAlign: '0.5em' },\n}));\n\nexport const Modal = ({ toggleModal }: SearchModalProps) => {\n const getSearchLink = useRouteRef(rootRouteRef);\n const classes = useStyles();\n\n const { term } = useSearch();\n const { focusContent } = useContent();\n const { transitions } = useTheme();\n\n const handleResultClick = () => {\n toggleModal();\n setTimeout(focusContent, transitions.duration.leavingScreen);\n };\n\n const handleKeyPress = () => {\n handleResultClick();\n };\n\n return (\n <>\n <DialogTitle>\n <Paper className={classes.container}>\n <SearchBar className={classes.input} />\n </Paper>\n </DialogTitle>\n <DialogContent>\n <Grid\n container\n direction=\"row-reverse\"\n justifyContent=\"flex-start\"\n alignItems=\"center\"\n >\n <Grid item>\n <Link\n onClick={() => {\n toggleModal();\n setTimeout(focusContent, transitions.duration.leavingScreen);\n }}\n to={`${getSearchLink()}?query=${term}`}\n >\n <span className={classes.viewResultsLink}>View Full Results</span>\n <LaunchIcon color=\"primary\" />\n </Link>\n </Grid>\n </Grid>\n <Divider />\n <SearchResult>\n {({ results }) => (\n <List>\n {results.map(({ document, highlight }) => (\n <div\n role=\"button\"\n tabIndex={0}\n key={`${document.location}-btn`}\n onClick={handleResultClick}\n onKeyPress={handleKeyPress}\n >\n <DefaultResultListItem\n key={document.location}\n result={document}\n highlight={highlight}\n />\n </div>\n ))}\n </List>\n )}\n </SearchResult>\n </DialogContent>\n <DialogActions className={classes.dialogActionsContainer}>\n <Grid container direction=\"row\">\n <Grid item xs={12}>\n <SearchResultPager />\n </Grid>\n </Grid>\n </DialogActions>\n </>\n );\n};\n\nconst Context = ({ children }: PropsWithChildren<{}>) => {\n // Checks if there is a parent context already defined and, if not, creates a new local context.\n const hasParentContext = useSearchContextCheck();\n if (hasParentContext) {\n return <>{children}</>;\n }\n return <SearchContextProvider>{children}</SearchContextProvider>;\n};\n\n/**\n * @public\n */\nexport const SearchModal = ({\n open = true,\n hidden,\n toggleModal,\n children,\n}: SearchModalProps) => {\n const classes = useStyles();\n\n return (\n <Dialog\n classes={{\n paperFullWidth: classes.paperFullWidth,\n }}\n onClose={toggleModal}\n aria-labelledby=\"search-modal-title\"\n fullWidth\n maxWidth=\"lg\"\n open={open}\n hidden={hidden}\n >\n {open && (\n <Context>\n {(children && children({ toggleModal })) ?? (\n <Modal toggleModal={toggleModal} />\n )}\n </Context>\n )}\n </Dialog>\n );\n};\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { ReactNode, useCallback, useContext, useState } from 'react';\nimport {\n createVersionedContext,\n createVersionedValueMap,\n} from '@backstage/version-bridge';\n\n/**\n * The state of the search modal, as well as functions for changing the modal's\n * visibility.\n *\n * @public\n */\nexport type SearchModalValue = {\n state: {\n hidden: boolean;\n open: boolean;\n };\n toggleModal: () => void;\n setOpen: (open: boolean) => void;\n};\n\nconst SearchModalContext = createVersionedContext<{\n 1: SearchModalValue | undefined;\n}>('search-modal-context');\n\n/**\n * Props for the SearchModalProvider.\n * @public\n */\nexport type SearchModalProviderProps = {\n /**\n * Children which should have access to the SearchModal context and the\n * associated useSearchModal() hook.\n */\n children: ReactNode;\n\n /**\n * Pass true if the modal should be rendered initially.\n */\n showInitially?: boolean;\n};\n\n/**\n * A context provider responsible for storing and managing state related to the\n * search modal.\n *\n * @remarks\n * If you need to control visibility of the search toggle outside of the modal\n * itself, you can optionally place this higher up in the react tree where your\n * custom code and the search modal share the same context.\n *\n * @example\n * ```tsx\n * import {\n * SearchModalProvider,\n * SidebarSearchModal,\n * } from '@backstage/plugin-search';\n *\n * // ...\n *\n * <SearchModalProvider>\n * <KeyboardShortcutSearchToggler />\n * <SidebarSearchModal>\n * {({ toggleModal }) => <SearchModal toggleModal={toggleModal} />}\n * </SidebarSearchModal>\n * </SearchModalProvider>\n * ```\n *\n * @public\n */\nexport const SearchModalProvider = ({\n children,\n showInitially,\n}: SearchModalProviderProps) => {\n const value = useSearchModal(showInitially);\n const versionedValue = createVersionedValueMap({ 1: value });\n return (\n <SearchModalContext.Provider value={versionedValue}>\n {children}\n </SearchModalContext.Provider>\n );\n};\n\n/**\n * Use this hook to manage the state of {@link SearchModal}\n * and change its visibility.\n *\n * @public\n *\n * @param initialState - pass `true` to make the modal initially visible\n * @returns an object containing the state of the modal together with\n * functions for changing the visibility of the modal.\n */\nexport function useSearchModal(initialState = false) {\n // Check for any existing parent context.\n const parentContext = useContext(SearchModalContext);\n const parentContextValue = parentContext?.atVersion(1);\n\n const [state, setState] = useState({\n hidden: !initialState,\n open: initialState,\n });\n\n const toggleModal = useCallback(\n () =>\n setState(prevState => ({\n open: true,\n hidden: !prevState.hidden,\n })),\n [],\n );\n\n const setOpen = useCallback(\n (open: boolean) =>\n setState(prevState => ({\n open: prevState.open || open,\n hidden: !open,\n })),\n [],\n );\n\n // Inherit from parent context, if set.\n return parentContextValue?.state\n ? parentContextValue\n : { state, toggleModal, setOpen };\n}\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Paper } from '@material-ui/core';\nimport InputBase from '@material-ui/core/InputBase';\nimport IconButton from '@material-ui/core/IconButton';\nimport SearchIcon from '@material-ui/icons/Search';\nimport ClearButton from '@material-ui/icons/Clear';\n\nconst useStyles = makeStyles(() => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n },\n input: {\n flex: 1,\n },\n}));\n\ntype SearchBarProps = {\n searchQuery: string;\n handleSearch: any;\n handleClearSearchBar: any;\n};\n\nexport const SearchBar = ({\n searchQuery,\n handleSearch,\n handleClearSearchBar,\n}: SearchBarProps) => {\n const classes = useStyles();\n\n return (\n <Paper\n component=\"form\"\n onSubmit={e => handleSearch(e)}\n className={classes.root}\n >\n <IconButton disabled type=\"submit\" aria-label=\"search\">\n <SearchIcon />\n </IconButton>\n <InputBase\n className={classes.input}\n placeholder=\"Search in Backstage\"\n value={searchQuery}\n onChange={e => handleSearch(e)}\n inputProps={{ 'aria-label': 'search backstage' }}\n />\n <IconButton aria-label=\"search\" onClick={() => handleClearSearchBar()}>\n <ClearButton />\n </IconButton>\n </Paper>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport FilterListIcon from '@material-ui/icons/FilterList';\nimport { makeStyles, IconButton, Typography } from '@material-ui/core';\n\nconst useStyles = makeStyles(theme => ({\n filters: {\n width: '250px',\n display: 'flex',\n },\n icon: {\n margin: theme.spacing(-1, 0, 0, 0),\n },\n}));\n\ntype FiltersButtonProps = {\n numberOfSelectedFilters: number;\n handleToggleFilters: () => void;\n};\n\nexport const FiltersButton = ({\n numberOfSelectedFilters,\n handleToggleFilters,\n}: FiltersButtonProps) => {\n const classes = useStyles();\n\n return (\n <div className={classes.filters}>\n <IconButton\n className={classes.icon}\n aria-label=\"settings\"\n onClick={handleToggleFilters}\n >\n <FilterListIcon />\n </IconButton>\n <Typography variant=\"h6\">\n Filters ({numberOfSelectedFilters ? numberOfSelectedFilters : 0})\n </Typography>\n </div>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n makeStyles,\n Typography,\n Divider,\n Card,\n CardHeader,\n Button,\n CardContent,\n Select,\n Checkbox,\n List,\n ListItem,\n ListItemText,\n MenuItem,\n} from '@material-ui/core';\n\nconst useStyles = makeStyles(theme => ({\n filters: {\n background: 'transparent',\n boxShadow: '0px 0px 0px 0px',\n },\n checkbox: {\n padding: theme.spacing(0, 1, 0, 1),\n },\n dropdown: {\n width: '100%',\n },\n}));\n\nexport type FiltersState = {\n selected: string;\n checked: Array<string>;\n};\n\nexport type FilterOptions = {\n kind: Array<string>;\n lifecycle: Array<string>;\n};\n\ntype FiltersProps = {\n filters: FiltersState;\n filterOptions: FilterOptions;\n resetFilters: () => void;\n updateSelected: (filter: string) => void;\n updateChecked: (filter: string) => void;\n};\n\nexport const Filters = ({\n filters,\n filterOptions,\n resetFilters,\n updateSelected,\n updateChecked,\n}: FiltersProps) => {\n const classes = useStyles();\n\n return (\n <Card className={classes.filters}>\n <CardHeader\n title={<Typography variant=\"h6\">Filters</Typography>}\n action={\n <Button color=\"primary\" onClick={() => resetFilters()}>\n CLEAR ALL\n </Button>\n }\n />\n <Divider />\n {filterOptions.kind.length === 0 && filterOptions.lifecycle.length === 0 && (\n <CardContent>\n <Typography variant=\"subtitle2\">\n Filters cannot be applied to available results\n </Typography>\n </CardContent>\n )}\n {filterOptions.kind.length > 0 && (\n <CardContent>\n <Typography variant=\"subtitle2\">Kind</Typography>\n <Select\n id=\"outlined-select\"\n onChange={(e: React.ChangeEvent<any>) =>\n updateSelected(e?.target?.value)\n }\n variant=\"outlined\"\n className={classes.dropdown}\n value={filters.selected}\n >\n {filterOptions.kind.map(filter => (\n <MenuItem\n selected={filter === ''}\n dense\n key={filter}\n value={filter}\n >\n {filter}\n </MenuItem>\n ))}\n </Select>\n </CardContent>\n )}\n {filterOptions.lifecycle.length > 0 && (\n <CardContent>\n <Typography variant=\"subtitle2\">Lifecycle</Typography>\n <List disablePadding dense>\n {filterOptions.lifecycle.map(filter => (\n <ListItem\n key={filter}\n dense\n button\n onClick={() => updateChecked(filter)}\n >\n <Checkbox\n edge=\"start\"\n disableRipple\n className={classes.checkbox}\n color=\"primary\"\n checked={filters.checked.includes(filter)}\n tabIndex={-1}\n value={filter}\n name={filter}\n />\n <ListItemText id={filter} primary={filter} />\n </ListItem>\n ))}\n </List>\n </CardContent>\n )}\n </Card>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Divider, Grid, makeStyles, Typography } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport React, { useEffect, useState } from 'react';\nimport useAsync from 'react-use/lib/useAsync';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\n\nimport { Filters, FiltersButton, FiltersState } from './Filters';\nimport { Entity, DEFAULT_NAMESPACE } from '@backstage/catalog-model';\n\nimport {\n EmptyState,\n Link,\n Progress,\n Table,\n TableColumn,\n} from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\n\ntype Result = {\n name: string;\n description: string | undefined;\n owner: string | undefined;\n kind: string;\n lifecycle: string | undefined;\n url: string;\n};\ntype SearchResults = Array<Result>;\n\nconst useStyles = makeStyles(theme => ({\n searchQuery: {\n color: theme.palette.text.primary,\n background: theme.palette.background.default,\n borderRadius: '10%',\n },\n tableHeader: {\n margin: theme.spacing(1, 0, 0, 0),\n display: 'flex',\n },\n divider: {\n width: '1px',\n margin: theme.spacing(0, 2),\n padding: theme.spacing(2, 0),\n },\n}));\n\ntype SearchResultProps = {\n searchQuery?: string;\n};\n\ntype TableHeaderProps = {\n searchQuery?: string;\n numberOfSelectedFilters: number;\n numberOfResults: number;\n handleToggleFilters: () => void;\n};\n\n// TODO: move out column to make the search result component more generic\nconst columns: TableColumn[] = [\n {\n title: 'Name',\n field: 'name',\n highlight: true,\n render: (result: Partial<Result>) => (\n <Link to={result.url || ''}>{result.name}</Link>\n ),\n },\n {\n title: 'Description',\n field: 'description',\n },\n {\n title: 'Owner',\n field: 'owner',\n },\n {\n title: 'Kind',\n field: 'kind',\n },\n {\n title: 'LifeCycle',\n field: 'lifecycle',\n },\n];\n\nconst TableHeader = ({\n searchQuery,\n numberOfSelectedFilters,\n numberOfResults,\n handleToggleFilters,\n}: TableHeaderProps) => {\n const classes = useStyles();\n\n return (\n <div className={classes.tableHeader}>\n <FiltersButton\n numberOfSelectedFilters={numberOfSelectedFilters}\n handleToggleFilters={handleToggleFilters}\n />\n <Divider className={classes.divider} orientation=\"vertical\" />\n <Grid item xs={12}>\n {searchQuery ? (\n <Typography variant=\"h6\">\n {`${numberOfResults} `}\n {numberOfResults > 1 ? `results for ` : `result for `}\n <span className={classes.searchQuery}>\"{searchQuery}\"</span>{' '}\n </Typography>\n ) : (\n <Typography variant=\"h6\">{`${numberOfResults} results`}</Typography>\n )}\n </Grid>\n </div>\n );\n};\n\nexport const SearchResult = ({ searchQuery }: SearchResultProps) => {\n const catalogApi = useApi(catalogApiRef);\n\n const [showFilters, toggleFilters] = useState(false);\n const [selectedFilters, setSelectedFilters] = useState<FiltersState>({\n selected: '',\n checked: [],\n });\n\n const [filteredResults, setFilteredResults] = useState<SearchResults>([]);\n\n const {\n loading,\n error,\n value: results,\n } = useAsync(async () => {\n const entities = await catalogApi.getEntities();\n return entities.items.map((entity: Entity) => ({\n name: entity.metadata.name,\n description: entity.metadata.description,\n owner:\n typeof entity.spec?.owner === 'string' ? entity.spec?.owner : undefined,\n kind: entity.kind,\n lifecycle:\n typeof entity.spec?.lifecycle === 'string'\n ? entity.spec?.lifecycle\n : undefined,\n url: `/catalog/${\n entity.metadata.namespace?.toLocaleLowerCase('en-US') ||\n DEFAULT_NAMESPACE\n }/${entity.kind.toLocaleLowerCase('en-US')}/${entity.metadata.name}`,\n }));\n }, []);\n\n useEffect(() => {\n if (results) {\n let withFilters = results;\n\n // apply filters\n\n // filter on selected\n if (selectedFilters.selected !== '') {\n withFilters = results.filter((result: Result) =>\n selectedFilters.selected.includes(result.kind),\n );\n }\n\n // filter on checked\n if (selectedFilters.checked.length > 0) {\n withFilters = withFilters.filter(\n (result: Result) =>\n result.lifecycle &&\n selectedFilters.checked.includes(result.lifecycle),\n );\n }\n\n // filter on searchQuery\n if (searchQuery) {\n withFilters = withFilters.filter(\n (result: Result) =>\n result.name?.toLocaleLowerCase('en-US').includes(searchQuery) ||\n result.name\n ?.toLocaleLowerCase('en-US')\n .includes(searchQuery.split(' ').join('-')) ||\n result.description\n ?.toLocaleLowerCase('en-US')\n .includes(searchQuery),\n );\n }\n\n setFilteredResults(withFilters);\n }\n }, [selectedFilters, searchQuery, results]);\n if (loading) {\n return <Progress />;\n }\n if (error) {\n return (\n <Alert severity=\"error\">\n Error encountered while fetching search results. {error.toString()}\n </Alert>\n );\n }\n if (!results || results.length === 0) {\n return <EmptyState missing=\"data\" title=\"Sorry, no results were found\" />;\n }\n\n const resetFilters = () => {\n setSelectedFilters({\n selected: '',\n checked: [],\n });\n };\n\n const updateSelected = (filter: string) => {\n setSelectedFilters(prevState => ({\n ...prevState,\n selected: filter,\n }));\n };\n\n const updateChecked = (filter: string) => {\n if (selectedFilters.checked.includes(filter)) {\n setSelectedFilters(prevState => ({\n ...prevState,\n checked: prevState.checked.filter(item => item !== filter),\n }));\n return;\n }\n\n setSelectedFilters(prevState => ({\n ...prevState,\n checked: [...prevState.checked, filter],\n }));\n };\n\n const filterOptions = results.reduce(\n (acc, curr) => {\n if (curr.kind && acc.kind.indexOf(curr.kind) < 0) {\n acc.kind.push(curr.kind);\n }\n if (curr.lifecycle && acc.lifecycle.indexOf(curr.lifecycle) < 0) {\n acc.lifecycle.push(curr.lifecycle);\n }\n return acc;\n },\n {\n kind: [] as Array<string>,\n lifecycle: [] as Array<string>,\n },\n );\n\n return (\n <>\n <Grid container>\n {showFilters && (\n <Grid item xs={3}>\n <Filters\n filters={selectedFilters}\n filterOptions={filterOptions}\n resetFilters={resetFilters}\n updateSelected={updateSelected}\n updateChecked={updateChecked}\n />\n </Grid>\n )}\n <Grid item xs={showFilters ? 9 : 12}>\n <Table\n options={{ paging: true, pageSize: 20, search: false }}\n data={filteredResults}\n columns={columns}\n title={\n <TableHeader\n searchQuery={searchQuery}\n numberOfResults={filteredResults.length}\n numberOfSelectedFilters={\n (selectedFilters.selected !== '' ? 1 : 0) +\n selectedFilters.checked.length\n }\n handleToggleFilters={() => toggleFilters(!showFilters)}\n />\n }\n />\n </Grid>\n </Grid>\n </>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Grid } from '@material-ui/core';\nimport React, { useEffect, useState } from 'react';\nimport useDebounce from 'react-use/lib/useDebounce';\nimport { SearchBar } from './LegacySearchBar';\nimport { SearchResult } from './LegacySearchResult';\nimport {\n Content,\n Header,\n Page,\n useQueryParamState,\n} from '@backstage/core-components';\n\n/**\n * @deprecated This SearchPage, powered directly by the Catalog API, will be\n * removed from a future release of this plugin.\n */\nexport const LegacySearchPage = () => {\n const [queryString, setQueryString] = useQueryParamState<string>('query');\n const [searchQuery, setSearchQuery] = useState(queryString ?? '');\n\n const handleSearch = (event: React.ChangeEvent<HTMLInputElement>) => {\n event.preventDefault();\n setSearchQuery(event.target.value);\n };\n\n useEffect(() => setSearchQuery(queryString ?? ''), [queryString]);\n\n useDebounce(\n () => {\n setQueryString(searchQuery);\n },\n 200,\n [searchQuery],\n );\n\n const handleClearSearchBar = () => {\n setSearchQuery('');\n };\n\n return (\n <Page themeId=\"home\">\n <Header title=\"Search\" />\n <Content>\n <Grid container direction=\"row\">\n <Grid item xs={12}>\n <SearchBar\n handleSearch={handleSearch}\n handleClearSearchBar={handleClearSearchBar}\n searchQuery={searchQuery}\n />\n </Grid>\n <Grid item xs={12}>\n <SearchResult\n searchQuery={(queryString ?? '').toLocaleLowerCase('en-US')}\n />\n </Grid>\n </Grid>\n </Content>\n </Page>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { useEffect } from 'react';\nimport usePrevious from 'react-use/lib/usePrevious';\nimport qs from 'qs';\nimport { useLocation, useOutlet } from 'react-router';\nimport {\n SearchContextProvider,\n useSearch,\n} from '@backstage/plugin-search-react';\nimport { JsonObject } from '@backstage/types';\nimport { LegacySearchPage } from '../LegacySearchPage';\n\nexport const UrlUpdater = () => {\n const location = useLocation();\n const {\n term,\n setTerm,\n types,\n setTypes,\n pageCursor,\n setPageCursor,\n filters,\n setFilters,\n } = useSearch();\n\n const prevQueryParams = usePrevious(location.search);\n useEffect(() => {\n // Only respond to changes to url query params\n if (location.search === prevQueryParams) {\n return;\n }\n\n const query =\n qs.parse(location.search.substring(1), { arrayLimit: 0 }) || {};\n\n if (query.filters) {\n setFilters(query.filters as JsonObject);\n }\n\n if (query.query) {\n setTerm(query.query as string);\n }\n\n if (query.pageCursor) {\n setPageCursor(query.pageCursor as string);\n }\n\n if (query.types) {\n setTypes(query.types as string[]);\n }\n }, [prevQueryParams, location, setTerm, setTypes, setPageCursor, setFilters]);\n\n useEffect(() => {\n const newParams = qs.stringify(\n {\n query: term,\n types,\n pageCursor,\n filters,\n },\n { arrayFormat: 'brackets' },\n );\n const newUrl = `${window.location.pathname}?${newParams}`;\n\n // We directly manipulate window history here in order to not re-render\n // infinitely (state => location => state => etc). The intention of this\n // code is just to ensure the right query/filters are loaded when a user\n // clicks the \"back\" button after clicking a result.\n window.history.replaceState(null, document.title, newUrl);\n }, [term, types, pageCursor, filters]);\n\n return null;\n};\n\n/**\n * @public\n */\nexport const SearchPage = () => {\n const outlet = useOutlet();\n\n return (\n <SearchContextProvider>\n <UrlUpdater />\n {outlet || <LegacySearchPage />}\n </SearchContextProvider>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button, makeStyles } from '@material-ui/core';\nimport ArrowBackIosIcon from '@material-ui/icons/ArrowBackIos';\nimport ArrowForwardIosIcon from '@material-ui/icons/ArrowForwardIos';\nimport React from 'react';\nimport { useSearch } from '@backstage/plugin-search-react';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n justifyContent: 'space-between',\n gap: theme.spacing(2),\n margin: theme.spacing(2, 0),\n },\n}));\n\n/**\n * @public\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nexport const SearchResultPager = () => {\n const { fetchNextPage, fetchPreviousPage } = useSearch();\n const classes = useStyles();\n\n if (!fetchNextPage && !fetchPreviousPage) {\n return <></>;\n }\n\n return (\n <nav arial-label=\"pagination navigation\" className={classes.root}>\n <Button\n aria-label=\"previous page\"\n disabled={!fetchPreviousPage}\n onClick={fetchPreviousPage}\n startIcon={<ArrowBackIosIcon />}\n >\n Previous\n </Button>\n\n <Button\n aria-label=\"next page\"\n disabled={!fetchNextPage}\n onClick={fetchNextPage}\n endIcon={<ArrowForwardIosIcon />}\n >\n Next\n </Button>\n </nav>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { cloneElement, Fragment, useEffect, useState } from 'react';\nimport { useSearch } from '@backstage/plugin-search-react';\nimport {\n Accordion,\n AccordionSummary,\n AccordionDetails,\n Card,\n CardContent,\n CardHeader,\n Divider,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n makeStyles,\n} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport AllIcon from '@material-ui/icons/FontDownload';\n\nconst useStyles = makeStyles(theme => ({\n card: {\n backgroundColor: 'rgba(0, 0, 0, .11)',\n },\n cardContent: {\n paddingTop: theme.spacing(1),\n },\n icon: {\n color: theme.palette.common.black,\n },\n list: {\n width: '100%',\n },\n listItemIcon: {\n width: '24px',\n height: '24px',\n },\n accordion: {\n backgroundColor: theme.palette.background.paper,\n },\n accordionSummary: {\n minHeight: 'auto',\n '&.Mui-expanded': {\n minHeight: 'auto',\n },\n },\n accordionSummaryContent: {\n margin: theme.spacing(2, 0),\n '&.Mui-expanded': {\n margin: theme.spacing(2, 0),\n },\n },\n accordionDetails: {\n padding: theme.spacing(0, 0, 1),\n },\n}));\n\n/**\n * @public\n */\nexport type SearchTypeAccordionProps = {\n name: string;\n types: Array<{\n value: string;\n name: string;\n icon: JSX.Element;\n }>;\n defaultValue?: string;\n};\n\nexport const SearchTypeAccordion = (props: SearchTypeAccordionProps) => {\n const classes = useStyles();\n const { setPageCursor, setTypes, types } = useSearch();\n const [expanded, setExpanded] = useState(true);\n const { defaultValue, name, types: givenTypes } = props;\n\n const toggleExpanded = () => setExpanded(prevState => !prevState);\n const handleClick = (type: string) => {\n return () => {\n setTypes(type !== '' ? [type] : []);\n setPageCursor(undefined);\n setExpanded(false);\n };\n };\n\n // Handle any provided defaultValue\n useEffect(() => {\n if (defaultValue) {\n setTypes([defaultValue]);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const definedTypes = [\n {\n value: '',\n name: 'All',\n icon: <AllIcon />,\n },\n ...givenTypes,\n ];\n const selected = types[0] || '';\n\n return (\n <Card className={classes.card}>\n <CardHeader title={name} titleTypographyProps={{ variant: 'overline' }} />\n <CardContent className={classes.cardContent}>\n <Accordion\n className={classes.accordion}\n expanded={expanded}\n onChange={toggleExpanded}\n >\n <AccordionSummary\n classes={{\n root: classes.accordionSummary,\n content: classes.accordionSummaryContent,\n }}\n expandIcon={<ExpandMoreIcon className={classes.icon} />}\n IconButtonProps={{ size: 'small' }}\n >\n {expanded\n ? 'Collapse'\n : definedTypes.filter(t => t.value === selected)[0]!.name}\n </AccordionSummary>\n <AccordionDetails classes={{ root: classes.accordionDetails }}>\n <List\n className={classes.list}\n component=\"nav\"\n aria-label=\"filter by type\"\n disablePadding\n dense\n >\n {definedTypes.map(type => (\n <Fragment key={type.value}>\n <Divider />\n <ListItem\n selected={\n types[0] === type.value ||\n (types.length === 0 && type.value === '')\n }\n onClick={handleClick(type.value)}\n button\n >\n <ListItemIcon>\n {cloneElement(type.icon, {\n className: classes.listItemIcon,\n })}\n </ListItemIcon>\n <ListItemText primary={type.name} />\n </ListItem>\n </Fragment>\n ))}\n </List>\n </AccordionDetails>\n </Accordion>\n </CardContent>\n </Card>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { useEffect } from 'react';\nimport { useSearch } from '@backstage/plugin-search-react';\nimport { BackstageTheme } from '@backstage/theme';\nimport { makeStyles, Tab, Tabs } from '@material-ui/core';\n\nconst useStyles = makeStyles((theme: BackstageTheme) => ({\n tabs: {\n borderBottom: `1px solid ${theme.palette.textVerySubtle}`,\n padding: theme.spacing(0, 4),\n },\n tab: {\n height: '50px',\n fontWeight: theme.typography.fontWeightBold,\n fontSize: theme.typography.pxToRem(13),\n color: theme.palette.textSubtle,\n minWidth: '130px',\n },\n}));\n\n/**\n * @public\n */\nexport type SearchTypeTabsProps = {\n types: Array<{\n value: string;\n name: string;\n }>;\n defaultValue?: string;\n};\n\nexport const SearchTypeTabs = (props: SearchTypeTabsProps) => {\n const classes = useStyles();\n const { setPageCursor, setTypes, types } = useSearch();\n const { defaultValue, types: givenTypes } = props;\n\n const changeTab = (_: React.ChangeEvent<{}>, newType: string) => {\n setTypes(newType !== '' ? [newType] : []);\n setPageCursor(undefined);\n };\n\n // Handle any provided defaultValue\n useEffect(() => {\n if (defaultValue) {\n setTypes([defaultValue]);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const definedTypes = [\n {\n value: '',\n name: 'All',\n },\n ...givenTypes,\n ];\n\n return (\n <Tabs\n className={classes.tabs}\n indicatorColor=\"primary\"\n value={types.length === 0 ? '' : types[0]}\n onChange={changeTab}\n >\n {definedTypes.map((type, idx) => (\n <Tab\n key={idx}\n className={classes.tab}\n disableRipple\n label={type.name}\n value={type.value}\n />\n ))}\n </Tabs>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Checkbox,\n Chip,\n FormControl,\n InputLabel,\n ListItemText,\n makeStyles,\n MenuItem,\n Select,\n} from '@material-ui/core';\nimport React, { ChangeEvent } from 'react';\nimport useEffectOnce from 'react-use/lib/useEffectOnce';\nimport {\n SearchTypeAccordion,\n SearchTypeAccordionProps,\n} from './SearchType.Accordion';\nimport { SearchTypeTabs, SearchTypeTabsProps } from './SearchType.Tabs';\nimport { useSearch } from '@backstage/plugin-search-react';\n\nconst useStyles = makeStyles(theme => ({\n label: {\n textTransform: 'capitalize',\n },\n chips: {\n display: 'flex',\n flexWrap: 'wrap',\n marginTop: theme.spacing(1),\n },\n chip: {\n margin: 2,\n },\n}));\n\n/**\n * Props for {@link SearchType}.\n *\n * @public\n */\nexport type SearchTypeProps = {\n className?: string;\n name: string;\n values?: string[];\n defaultValue?: string[] | string | null;\n};\n\n/**\n * @public\n */\nconst SearchType = (props: SearchTypeProps) => {\n const { className, defaultValue, name, values = [] } = props;\n const classes = useStyles();\n const { types, setTypes } = useSearch();\n\n useEffectOnce(() => {\n if (!types.length) {\n if (defaultValue && Array.isArray(defaultValue)) {\n setTypes(defaultValue);\n } else if (defaultValue) {\n setTypes([defaultValue]);\n }\n }\n });\n\n const handleChange = (e: ChangeEvent<{ value: unknown }>) => {\n const value = e.target.value as string[];\n setTypes(value as string[]);\n };\n\n return (\n <FormControl\n className={className}\n variant=\"filled\"\n fullWidth\n data-testid=\"search-typefilter-next\"\n >\n <InputLabel className={classes.label} margin=\"dense\">\n {name}\n </InputLabel>\n <Select\n multiple\n variant=\"outlined\"\n value={types}\n onChange={handleChange}\n placeholder=\"All Results\"\n renderValue={selected => (\n <div className={classes.chips}>\n {(selected as string[]).map(value => (\n <Chip\n key={value}\n label={value}\n className={classes.chip}\n size=\"small\"\n />\n ))}\n </div>\n )}\n >\n {values.map((value: string) => (\n <MenuItem key={value} value={value}>\n <Checkbox checked={types.indexOf(value) > -1} />\n <ListItemText primary={value} />\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n};\n\n/**\n * A control surface for the search query's \"types\" property, displayed as a\n * single-select collapsible accordion suitable for use in faceted search UIs.\n * @public\n */\nSearchType.Accordion = (props: SearchTypeAccordionProps) => {\n return <SearchTypeAccordion {...props} />;\n};\n\n/**\n * A control surface for the search query's \"types\" property, displayed as a\n * tabs suitable for use in faceted search UIs.\n * @public\n */\nSearchType.Tabs = (props: SearchTypeTabsProps) => {\n return <SearchTypeTabs {...props} />;\n};\n\nexport { SearchType };\nexport type { SearchTypeAccordionProps, SearchTypeTabsProps };\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport qs from 'qs';\nimport React, { useCallback } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { rootRouteRef } from '../../plugin';\n\nimport { useRouteRef, IconComponent } from '@backstage/core-plugin-api';\nimport { SidebarSearchField, useContent } from '@backstage/core-components';\n\n/**\n * Props for {@link SidebarSearch}.\n *\n * @public\n */\nexport type SidebarSearchProps = {\n icon?: IconComponent;\n};\n\n/**\n * @public\n */\nexport const SidebarSearch = (props: SidebarSearchProps) => {\n const searchRoute = useRouteRef(rootRouteRef);\n const { focusContent } = useContent();\n const navigate = useNavigate();\n const handleSearch = useCallback(\n (query: string): void => {\n const queryString = qs.stringify({ query }, { addQueryPrefix: true });\n focusContent();\n navigate(`${searchRoute()}${queryString}`);\n },\n [focusContent, navigate, searchRoute],\n );\n\n return (\n <SidebarSearchField\n icon={props.icon}\n onSearch={handleSearch}\n to=\"/search\"\n />\n );\n};\n"],"names":["useStyles","FiltersButton","Filters","RealSearchBarBase","SearchBar","SearchPage","SearchResult","RealSearchResult","RealDefaultResultListItem","makeStyles","DefaultResultListItem","SearchResultPager","IconButton"],"mappings":"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"}
|
package/dist/index.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { D as DefaultResultListItem, F as Filters, c as FiltersButton, H as HomePageSearchBar, S as Router, d as SearchBar, e as SearchBarBase, f as SearchFilter, b as SearchModal, a as SearchModalProvider, j as SearchPage, k as SearchResult, g as SearchResultPager, h as SearchType, i as SidebarSearch, l as SidebarSearchModal, s as plugin, s as searchPlugin, u as useSearchModal } from './esm/index-
|
|
1
|
+
export { D as DefaultResultListItem, F as Filters, c as FiltersButton, H as HomePageSearchBar, S as Router, d as SearchBar, e as SearchBarBase, f as SearchFilter, b as SearchModal, a as SearchModalProvider, j as SearchPage, k as SearchResult, g as SearchResultPager, h as SearchType, i as SidebarSearch, l as SidebarSearchModal, s as plugin, s as searchPlugin, u as useSearchModal } from './esm/index-5187be91.esm.js';
|
|
2
2
|
import 'react';
|
|
3
3
|
import '@material-ui/icons/FilterList';
|
|
4
4
|
import '@material-ui/core';
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage/plugin-search",
|
|
3
3
|
"description": "The Backstage plugin that provides your backstage app with search",
|
|
4
|
-
"version": "0.9.
|
|
4
|
+
"version": "0.9.1-next.2",
|
|
5
5
|
"main": "dist/index.esm.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"license": "Apache-2.0",
|
|
@@ -33,15 +33,15 @@
|
|
|
33
33
|
"clean": "backstage-cli package clean"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@backstage/catalog-model": "^1.0.
|
|
36
|
+
"@backstage/catalog-model": "^1.1.0-next.2",
|
|
37
37
|
"@backstage/config": "^1.0.1",
|
|
38
|
-
"@backstage/core-components": "^0.
|
|
38
|
+
"@backstage/core-components": "^0.10.0-next.2",
|
|
39
39
|
"@backstage/core-plugin-api": "^1.0.3",
|
|
40
|
-
"@backstage/errors": "^1.0.0",
|
|
41
|
-
"@backstage/plugin-catalog-react": "^1.1.
|
|
42
|
-
"@backstage/plugin-search-common": "^0.3.
|
|
43
|
-
"@backstage/plugin-search-react": "^0.2.
|
|
44
|
-
"@backstage/theme": "^0.2.
|
|
40
|
+
"@backstage/errors": "^1.1.0-next.0",
|
|
41
|
+
"@backstage/plugin-catalog-react": "^1.1.2-next.2",
|
|
42
|
+
"@backstage/plugin-search-common": "^0.3.6-next.0",
|
|
43
|
+
"@backstage/plugin-search-react": "^0.2.2-next.2",
|
|
44
|
+
"@backstage/theme": "^0.2.16-next.1",
|
|
45
45
|
"@backstage/types": "^1.0.0",
|
|
46
46
|
"@backstage/version-bridge": "^1.0.1",
|
|
47
47
|
"@material-ui/core": "^4.12.2",
|
|
@@ -57,10 +57,10 @@
|
|
|
57
57
|
"react": "^16.13.1 || ^17.0.0"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
|
-
"@backstage/cli": "^0.
|
|
61
|
-
"@backstage/core-app-api": "^1.0.
|
|
62
|
-
"@backstage/dev-utils": "^1.0.
|
|
63
|
-
"@backstage/test-utils": "^1.1.1",
|
|
60
|
+
"@backstage/cli": "^0.18.0-next.2",
|
|
61
|
+
"@backstage/core-app-api": "^1.0.4-next.0",
|
|
62
|
+
"@backstage/dev-utils": "^1.0.4-next.2",
|
|
63
|
+
"@backstage/test-utils": "^1.1.2-next.1",
|
|
64
64
|
"@testing-library/jest-dom": "^5.10.1",
|
|
65
65
|
"@testing-library/react": "^12.1.3",
|
|
66
66
|
"@testing-library/react-hooks": "^8.0.0",
|
|
@@ -73,5 +73,5 @@
|
|
|
73
73
|
"files": [
|
|
74
74
|
"dist"
|
|
75
75
|
],
|
|
76
|
-
"gitHead": "
|
|
76
|
+
"gitHead": "3eddfb061dd0abe711f4b88d2e0fb4b99e692978"
|
|
77
77
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-5aaf3de8.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-8388a95e.esm.js","sources":["../../src/components/Filters/FiltersButton.tsx","../../src/components/Filters/Filters.tsx","../../src/components/SearchBar/SearchBar.tsx","../../src/components/SearchFilter/SearchFilter.tsx","../../src/apis.ts","../../src/plugin.ts","../../src/components/SearchModal/SearchModal.tsx","../../src/components/SearchModal/useSearchModal.tsx","../../src/components/LegacySearchPage/LegacySearchBar.tsx","../../src/components/LegacySearchPage/Filters/FiltersButton.tsx","../../src/components/LegacySearchPage/Filters/Filters.tsx","../../src/components/LegacySearchPage/LegacySearchResult.tsx","../../src/components/LegacySearchPage/LegacySearchPage.tsx","../../src/components/SearchPage/SearchPage.tsx","../../src/components/SearchResultPager/SearchResultPager.tsx","../../src/components/SearchType/SearchType.Accordion.tsx","../../src/components/SearchType/SearchType.Tabs.tsx","../../src/components/SearchType/SearchType.tsx","../../src/components/SidebarSearch/SidebarSearch.tsx"],"sourcesContent":["/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport FilterListIcon from '@material-ui/icons/FilterList';\nimport { makeStyles, IconButton, Typography } from '@material-ui/core';\n\nconst useStyles = makeStyles(theme => ({\n filters: {\n width: '250px',\n display: 'flex',\n },\n icon: {\n margin: theme.spacing(-1, 0, 0, 0),\n },\n}));\n\n/**\n * Props for {@link FiltersButton}.\n *\n * @public\n * @deprecated This type and corresponding component will be removed in a\n * future release.\n */\nexport type FiltersButtonProps = {\n numberOfSelectedFilters: number;\n handleToggleFilters: () => void;\n};\n\n/**\n * @public\n * @deprecated See `SearchFilter` in `@backstage/plugin-search-react` instead.\n */\nexport const FiltersButton = ({\n numberOfSelectedFilters,\n handleToggleFilters,\n}: FiltersButtonProps) => {\n const classes = useStyles();\n\n return (\n <div className={classes.filters}>\n <IconButton\n className={classes.icon}\n aria-label=\"settings\"\n onClick={handleToggleFilters}\n >\n <FilterListIcon />\n </IconButton>\n <Typography variant=\"h6\">\n Filters ({numberOfSelectedFilters ? numberOfSelectedFilters : 0})\n </Typography>\n </div>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n makeStyles,\n Typography,\n Divider,\n Card,\n CardHeader,\n Button,\n CardContent,\n Select,\n Checkbox,\n List,\n ListItem,\n ListItemText,\n MenuItem,\n} from '@material-ui/core';\n\nconst useStyles = makeStyles(theme => ({\n filters: {\n background: 'transparent',\n boxShadow: '0px 0px 0px 0px',\n },\n checkbox: {\n padding: theme.spacing(0, 1, 0, 1),\n },\n dropdown: {\n width: '100%',\n },\n}));\n\n/**\n * @public\n * @deprecated This type and corresponding component will be removed in a\n * future release.\n */\nexport type FiltersState = {\n selected: string;\n checked: Array<string>;\n};\n\n/**\n * @public\n * @deprecated This type and corresponding component will be removed in a\n * future release.\n */\nexport type FilterOptions = {\n kind: Array<string>;\n lifecycle: Array<string>;\n};\n\n/**\n * Props for {@link Filters}.\n *\n * @public\n * @deprecated This type and corresponding component will be removed in a\n * future release.\n */\nexport type FiltersProps = {\n filters: FiltersState;\n filterOptions: FilterOptions;\n resetFilters: () => void;\n updateSelected: (filter: string) => void;\n updateChecked: (filter: string) => void;\n};\n\n/**\n * @public\n * @deprecated This component will be removed in a future release. Use\n * `SearchFilter` from `@backstage/plugin-search-react` instead.\n */\nexport const Filters = ({\n filters,\n filterOptions,\n resetFilters,\n updateSelected,\n updateChecked,\n}: FiltersProps) => {\n const classes = useStyles();\n\n return (\n <Card className={classes.filters}>\n <CardHeader\n title={<Typography variant=\"h6\">Filters</Typography>}\n action={\n <Button color=\"primary\" onClick={() => resetFilters()}>\n CLEAR ALL\n </Button>\n }\n />\n <Divider />\n {filterOptions.kind.length === 0 && filterOptions.lifecycle.length === 0 && (\n <CardContent>\n <Typography variant=\"subtitle2\">\n Filters cannot be applied to available results\n </Typography>\n </CardContent>\n )}\n {filterOptions.kind.length > 0 && (\n <CardContent>\n <Typography variant=\"subtitle2\">Kind</Typography>\n <Select\n id=\"outlined-select\"\n onChange={(e: React.ChangeEvent<any>) =>\n updateSelected(e?.target?.value)\n }\n variant=\"outlined\"\n className={classes.dropdown}\n value={filters.selected}\n >\n {filterOptions.kind.map(filter => (\n <MenuItem\n selected={filter === ''}\n dense\n key={filter}\n value={filter}\n >\n {filter}\n </MenuItem>\n ))}\n </Select>\n </CardContent>\n )}\n {filterOptions.lifecycle.length > 0 && (\n <CardContent>\n <Typography variant=\"subtitle2\">Lifecycle</Typography>\n <List disablePadding dense>\n {filterOptions.lifecycle.map(filter => (\n <ListItem\n key={filter}\n dense\n button\n onClick={() => updateChecked(filter)}\n >\n <Checkbox\n edge=\"start\"\n disableRipple\n className={classes.checkbox}\n color=\"primary\"\n checked={filters.checked.includes(filter)}\n tabIndex={-1}\n value={filter}\n name={filter}\n />\n <ListItemText id={filter} primary={filter} />\n </ListItem>\n ))}\n </List>\n </CardContent>\n )}\n </Card>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { useCallback } from 'react';\n\nimport { InputBaseProps } from '@material-ui/core';\n\nimport {\n SearchBarBase as RealSearchBarBase,\n useSearch,\n} from '@backstage/plugin-search-react';\n\n/**\n * Props for {@link SearchBarBase}.\n *\n * @public\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nexport type SearchBarBaseProps = Omit<InputBaseProps, 'onChange'> & {\n debounceTime?: number;\n clearButton?: boolean;\n onClear?: () => void;\n onSubmit?: () => void;\n onChange: (value: string) => void;\n};\n\n/**\n * All search boxes exported by the search plugin are based on the <SearchBarBase />,\n * and this one is based on the <InputBase /> component from Material UI.\n * Recommended if you don't use Search Provider or Search Context.\n *\n * @public\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nexport const SearchBarBase = RealSearchBarBase;\n\n/**\n * Props for {@link SearchBar}.\n *\n * @public\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nexport type SearchBarProps = Partial<SearchBarBaseProps>;\n\n/**\n * Recommended search bar when you use the Search Provider or Search Context.\n *\n * @public\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nexport const SearchBar = ({ onChange, ...props }: SearchBarProps) => {\n const { term, setTerm } = useSearch();\n\n const handleChange = useCallback(\n (newValue: string) => {\n if (onChange) {\n onChange(newValue);\n } else {\n setTerm(newValue);\n }\n },\n [onChange, setTerm],\n );\n\n return <SearchBarBase value={term} onChange={handleChange} {...props} />;\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { ReactElement } from 'react';\n\nimport {\n AutocompleteFilter,\n CheckboxFilter,\n SearchAutocompleteFilterProps,\n SelectFilter,\n} from '@backstage/plugin-search-react';\n\n/**\n * @public\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nexport type SearchFilterComponentProps = {\n className?: string;\n name: string;\n label?: string;\n /**\n * Either an array of values directly, or an async function to return a list\n * of values to be used in the filter. In the autocomplete filter, the last\n * input value is provided as an input to allow values to be filtered. This\n * function is debounced and values cached.\n */\n values?: string[] | ((partial: string) => Promise<string[]>);\n defaultValue?: string[] | string | null;\n /**\n * Debounce time in milliseconds, used when values is an async callback.\n * Defaults to 250ms.\n */\n valuesDebounceMs?: number;\n};\n\n/**\n * @public\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nexport type SearchFilterWrapperProps = SearchFilterComponentProps & {\n component: (props: SearchFilterComponentProps) => ReactElement;\n debug?: boolean;\n};\n\n/**\n * @public\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nconst SearchFilter = ({\n component: Element,\n ...props\n}: SearchFilterWrapperProps) => <Element {...props} />;\n\n/**\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nSearchFilter.Checkbox = (\n props: Omit<SearchFilterWrapperProps, 'component'> &\n SearchFilterComponentProps,\n) => <SearchFilter {...props} component={CheckboxFilter} />;\n\n/**\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nSearchFilter.Select = (\n props: Omit<SearchFilterWrapperProps, 'component'> &\n SearchFilterComponentProps,\n) => <SearchFilter {...props} component={SelectFilter} />;\n\n/**\n * A control surface for a given filter field name, rendered as an autocomplete\n * textfield. A hard-coded list of values may be provided, or an async function\n * which returns values may be provided instead.\n *\n * @public\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nSearchFilter.Autocomplete = (props: SearchAutocompleteFilterProps) => (\n <SearchFilter {...props} component={AutocompleteFilter} />\n);\n\nexport { SearchFilter };\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api';\nimport { ResponseError } from '@backstage/errors';\nimport { SearchApi } from '@backstage/plugin-search-react';\nimport { SearchQuery, SearchResultSet } from '@backstage/plugin-search-common';\n\nimport qs from 'qs';\n\nexport class SearchClient implements SearchApi {\n private readonly discoveryApi: DiscoveryApi;\n private readonly identityApi: IdentityApi;\n\n constructor(options: {\n discoveryApi: DiscoveryApi;\n identityApi: IdentityApi;\n }) {\n this.discoveryApi = options.discoveryApi;\n this.identityApi = options.identityApi;\n }\n\n async query(query: SearchQuery): Promise<SearchResultSet> {\n const { token } = await this.identityApi.getCredentials();\n const queryString = qs.stringify(query);\n const url = `${await this.discoveryApi.getBaseUrl(\n 'search/query',\n )}?${queryString}`;\n const response = await fetch(url, {\n headers: token ? { Authorization: `Bearer ${token}` } : {},\n });\n\n if (!response.ok) {\n throw await ResponseError.fromResponse(response);\n }\n\n return response.json();\n }\n}\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SearchClient } from './apis';\nimport {\n searchApiRef,\n SearchResult as RealSearchResult,\n DefaultResultListItem as RealDefaultResultListItem,\n} from '@backstage/plugin-search-react';\nimport {\n createApiFactory,\n createPlugin,\n createRouteRef,\n createRoutableExtension,\n discoveryApiRef,\n createComponentExtension,\n identityApiRef,\n} from '@backstage/core-plugin-api';\n\nexport const rootRouteRef = createRouteRef({\n id: 'search',\n});\n\n/**\n * @public\n */\nexport const searchPlugin = createPlugin({\n id: 'search',\n apis: [\n createApiFactory({\n api: searchApiRef,\n deps: { discoveryApi: discoveryApiRef, identityApi: identityApiRef },\n factory: ({ discoveryApi, identityApi }) => {\n return new SearchClient({ discoveryApi, identityApi });\n },\n }),\n ],\n routes: {\n root: rootRouteRef,\n },\n});\n\n/**\n * @public\n */\nexport const SearchPage = searchPlugin.provide(\n createRoutableExtension({\n name: 'SearchPage',\n component: () => import('./components/SearchPage').then(m => m.SearchPage),\n mountPoint: rootRouteRef,\n }),\n);\n\n/**\n * @public\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nexport const SearchResult = RealSearchResult;\n\n/**\n * @public\n */\nexport const SidebarSearchModal = searchPlugin.provide(\n createComponentExtension({\n name: 'SidebarSearchModal',\n component: {\n lazy: () =>\n import('./components/SidebarSearchModal').then(\n m => m.SidebarSearchModal,\n ),\n },\n }),\n);\n\n/**\n * @public\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nexport const DefaultResultListItem = RealDefaultResultListItem;\n\n/**\n * @public\n */\nexport const HomePageSearchBar = searchPlugin.provide(\n createComponentExtension({\n name: 'HomePageSearchBar',\n component: {\n lazy: () =>\n import('./components/HomePageComponent').then(m => m.HomePageSearchBar),\n },\n }),\n);\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n Divider,\n Grid,\n List,\n Paper,\n useTheme,\n} from '@material-ui/core';\nimport LaunchIcon from '@material-ui/icons/Launch';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n DefaultResultListItem,\n SearchContextProvider,\n SearchBar,\n SearchResult,\n SearchResultPager,\n useSearch,\n} from '@backstage/plugin-search-react';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { Link, useContent } from '@backstage/core-components';\nimport { rootRouteRef } from '../../plugin';\n\n/**\n * @public\n **/\nexport interface SearchModalChildrenProps {\n /**\n * A function that should be invoked when navigating away from the modal.\n */\n toggleModal: () => void;\n}\n\n/**\n * @public\n **/\nexport interface SearchModalProps {\n /**\n * If true, it renders the modal.\n */\n open?: boolean;\n /**\n * This is supposed to be used together with the open prop.\n * If `hidden` is true, it hides the modal.\n * If `open` is false, the value of `hidden` has no effect on the modal.\n * Use `open` for controlling whether the modal should be rendered or not.\n */\n hidden?: boolean;\n /**\n * a function invoked when a search item is pressed or when the dialog\n * should be closed.\n */\n toggleModal: () => void;\n /**\n * A function that returns custom content to render in the search modal in\n * place of the default.\n */\n children?: (props: SearchModalChildrenProps) => JSX.Element;\n}\n\nconst useStyles = makeStyles(theme => ({\n container: {\n borderRadius: 30,\n display: 'flex',\n height: '2.4em',\n },\n input: {\n flex: 1,\n },\n // Reduces default height of the modal, keeping a gap of 128px between the top and bottom of the page.\n paperFullWidth: { height: 'calc(100% - 128px)' },\n dialogActionsContainer: { padding: theme.spacing(1, 3) },\n viewResultsLink: { verticalAlign: '0.5em' },\n}));\n\nexport const Modal = ({ toggleModal }: SearchModalProps) => {\n const getSearchLink = useRouteRef(rootRouteRef);\n const classes = useStyles();\n\n const { term } = useSearch();\n const { focusContent } = useContent();\n const { transitions } = useTheme();\n\n const handleResultClick = () => {\n toggleModal();\n setTimeout(focusContent, transitions.duration.leavingScreen);\n };\n\n const handleKeyPress = () => {\n handleResultClick();\n };\n\n return (\n <>\n <DialogTitle>\n <Paper className={classes.container}>\n <SearchBar className={classes.input} />\n </Paper>\n </DialogTitle>\n <DialogContent>\n <Grid\n container\n direction=\"row-reverse\"\n justifyContent=\"flex-start\"\n alignItems=\"center\"\n >\n <Grid item>\n <Link\n onClick={() => {\n toggleModal();\n setTimeout(focusContent, transitions.duration.leavingScreen);\n }}\n to={`${getSearchLink()}?query=${term}`}\n >\n <span className={classes.viewResultsLink}>View Full Results</span>\n <LaunchIcon color=\"primary\" />\n </Link>\n </Grid>\n </Grid>\n <Divider />\n <SearchResult>\n {({ results }) => (\n <List>\n {results.map(({ document, highlight }) => (\n <div\n role=\"button\"\n tabIndex={0}\n key={`${document.location}-btn`}\n onClick={handleResultClick}\n onKeyPress={handleKeyPress}\n >\n <DefaultResultListItem\n key={document.location}\n result={document}\n highlight={highlight}\n />\n </div>\n ))}\n </List>\n )}\n </SearchResult>\n </DialogContent>\n <DialogActions className={classes.dialogActionsContainer}>\n <Grid container direction=\"row\">\n <Grid item xs={12}>\n <SearchResultPager />\n </Grid>\n </Grid>\n </DialogActions>\n </>\n );\n};\n\n/**\n * @public\n */\nexport const SearchModal = ({\n open = true,\n hidden,\n toggleModal,\n children,\n}: SearchModalProps) => {\n const classes = useStyles();\n\n return (\n <Dialog\n classes={{\n paperFullWidth: classes.paperFullWidth,\n }}\n onClose={toggleModal}\n aria-labelledby=\"search-modal-title\"\n fullWidth\n maxWidth=\"lg\"\n open={open}\n hidden={hidden}\n >\n {open && (\n <SearchContextProvider>\n {(children && children({ toggleModal })) ?? (\n <Modal toggleModal={toggleModal} />\n )}\n </SearchContextProvider>\n )}\n </Dialog>\n );\n};\n","/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { ReactNode, useCallback, useContext, useState } from 'react';\nimport {\n createVersionedContext,\n createVersionedValueMap,\n} from '@backstage/version-bridge';\n\n/**\n * The state of the search modal, as well as functions for changing the modal's\n * visibility.\n *\n * @public\n */\nexport type SearchModalValue = {\n state: {\n hidden: boolean;\n open: boolean;\n };\n toggleModal: () => void;\n setOpen: (open: boolean) => void;\n};\n\nconst SearchModalContext = createVersionedContext<{\n 1: SearchModalValue | undefined;\n}>('search-modal-context');\n\n/**\n * Props for the SearchModalProvider.\n * @public\n */\nexport type SearchModalProviderProps = {\n /**\n * Children which should have access to the SearchModal context and the\n * associated useSearchModal() hook.\n */\n children: ReactNode;\n\n /**\n * Pass true if the modal should be rendered initially.\n */\n showInitially?: boolean;\n};\n\n/**\n * A context provider responsible for storing and managing state related to the\n * search modal.\n *\n * @remarks\n * If you need to control visibility of the search toggle outside of the modal\n * itself, you can optionally place this higher up in the react tree where your\n * custom code and the search modal share the same context.\n *\n * @example\n * ```tsx\n * import {\n * SearchModalProvider,\n * SidebarSearchModal,\n * } from '@backstage/plugin-search';\n *\n * // ...\n *\n * <SearchModalProvider>\n * <KeyboardShortcutSearchToggler />\n * <SidebarSearchModal>\n * {({ toggleModal }) => <SearchModal toggleModal={toggleModal} />}\n * </SidebarSearchModal>\n * </SearchModalProvider>\n * ```\n *\n * @public\n */\nexport const SearchModalProvider = ({\n children,\n showInitially,\n}: SearchModalProviderProps) => {\n const value = useSearchModal(showInitially);\n const versionedValue = createVersionedValueMap({ 1: value });\n return (\n <SearchModalContext.Provider value={versionedValue}>\n {children}\n </SearchModalContext.Provider>\n );\n};\n\n/**\n * Use this hook to manage the state of {@link SearchModal}\n * and change its visibility.\n *\n * @public\n *\n * @param initialState - pass `true` to make the modal initially visible\n * @returns an object containing the state of the modal together with\n * functions for changing the visibility of the modal.\n */\nexport function useSearchModal(initialState = false) {\n // Check for any existing parent context.\n const parentContext = useContext(SearchModalContext);\n const parentContextValue = parentContext?.atVersion(1);\n\n const [state, setState] = useState({\n hidden: !initialState,\n open: initialState,\n });\n\n const toggleModal = useCallback(\n () =>\n setState(prevState => ({\n open: true,\n hidden: !prevState.hidden,\n })),\n [],\n );\n\n const setOpen = useCallback(\n (open: boolean) =>\n setState(prevState => ({\n open: prevState.open || open,\n hidden: !open,\n })),\n [],\n );\n\n // Inherit from parent context, if set.\n return parentContextValue?.state\n ? parentContextValue\n : { state, toggleModal, setOpen };\n}\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Paper } from '@material-ui/core';\nimport InputBase from '@material-ui/core/InputBase';\nimport IconButton from '@material-ui/core/IconButton';\nimport SearchIcon from '@material-ui/icons/Search';\nimport ClearButton from '@material-ui/icons/Clear';\n\nconst useStyles = makeStyles(() => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n },\n input: {\n flex: 1,\n },\n}));\n\ntype SearchBarProps = {\n searchQuery: string;\n handleSearch: any;\n handleClearSearchBar: any;\n};\n\nexport const SearchBar = ({\n searchQuery,\n handleSearch,\n handleClearSearchBar,\n}: SearchBarProps) => {\n const classes = useStyles();\n\n return (\n <Paper\n component=\"form\"\n onSubmit={e => handleSearch(e)}\n className={classes.root}\n >\n <IconButton disabled type=\"submit\" aria-label=\"search\">\n <SearchIcon />\n </IconButton>\n <InputBase\n className={classes.input}\n placeholder=\"Search in Backstage\"\n value={searchQuery}\n onChange={e => handleSearch(e)}\n inputProps={{ 'aria-label': 'search backstage' }}\n />\n <IconButton aria-label=\"search\" onClick={() => handleClearSearchBar()}>\n <ClearButton />\n </IconButton>\n </Paper>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport FilterListIcon from '@material-ui/icons/FilterList';\nimport { makeStyles, IconButton, Typography } from '@material-ui/core';\n\nconst useStyles = makeStyles(theme => ({\n filters: {\n width: '250px',\n display: 'flex',\n },\n icon: {\n margin: theme.spacing(-1, 0, 0, 0),\n },\n}));\n\ntype FiltersButtonProps = {\n numberOfSelectedFilters: number;\n handleToggleFilters: () => void;\n};\n\nexport const FiltersButton = ({\n numberOfSelectedFilters,\n handleToggleFilters,\n}: FiltersButtonProps) => {\n const classes = useStyles();\n\n return (\n <div className={classes.filters}>\n <IconButton\n className={classes.icon}\n aria-label=\"settings\"\n onClick={handleToggleFilters}\n >\n <FilterListIcon />\n </IconButton>\n <Typography variant=\"h6\">\n Filters ({numberOfSelectedFilters ? numberOfSelectedFilters : 0})\n </Typography>\n </div>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from 'react';\nimport {\n makeStyles,\n Typography,\n Divider,\n Card,\n CardHeader,\n Button,\n CardContent,\n Select,\n Checkbox,\n List,\n ListItem,\n ListItemText,\n MenuItem,\n} from '@material-ui/core';\n\nconst useStyles = makeStyles(theme => ({\n filters: {\n background: 'transparent',\n boxShadow: '0px 0px 0px 0px',\n },\n checkbox: {\n padding: theme.spacing(0, 1, 0, 1),\n },\n dropdown: {\n width: '100%',\n },\n}));\n\nexport type FiltersState = {\n selected: string;\n checked: Array<string>;\n};\n\nexport type FilterOptions = {\n kind: Array<string>;\n lifecycle: Array<string>;\n};\n\ntype FiltersProps = {\n filters: FiltersState;\n filterOptions: FilterOptions;\n resetFilters: () => void;\n updateSelected: (filter: string) => void;\n updateChecked: (filter: string) => void;\n};\n\nexport const Filters = ({\n filters,\n filterOptions,\n resetFilters,\n updateSelected,\n updateChecked,\n}: FiltersProps) => {\n const classes = useStyles();\n\n return (\n <Card className={classes.filters}>\n <CardHeader\n title={<Typography variant=\"h6\">Filters</Typography>}\n action={\n <Button color=\"primary\" onClick={() => resetFilters()}>\n CLEAR ALL\n </Button>\n }\n />\n <Divider />\n {filterOptions.kind.length === 0 && filterOptions.lifecycle.length === 0 && (\n <CardContent>\n <Typography variant=\"subtitle2\">\n Filters cannot be applied to available results\n </Typography>\n </CardContent>\n )}\n {filterOptions.kind.length > 0 && (\n <CardContent>\n <Typography variant=\"subtitle2\">Kind</Typography>\n <Select\n id=\"outlined-select\"\n onChange={(e: React.ChangeEvent<any>) =>\n updateSelected(e?.target?.value)\n }\n variant=\"outlined\"\n className={classes.dropdown}\n value={filters.selected}\n >\n {filterOptions.kind.map(filter => (\n <MenuItem\n selected={filter === ''}\n dense\n key={filter}\n value={filter}\n >\n {filter}\n </MenuItem>\n ))}\n </Select>\n </CardContent>\n )}\n {filterOptions.lifecycle.length > 0 && (\n <CardContent>\n <Typography variant=\"subtitle2\">Lifecycle</Typography>\n <List disablePadding dense>\n {filterOptions.lifecycle.map(filter => (\n <ListItem\n key={filter}\n dense\n button\n onClick={() => updateChecked(filter)}\n >\n <Checkbox\n edge=\"start\"\n disableRipple\n className={classes.checkbox}\n color=\"primary\"\n checked={filters.checked.includes(filter)}\n tabIndex={-1}\n value={filter}\n name={filter}\n />\n <ListItemText id={filter} primary={filter} />\n </ListItem>\n ))}\n </List>\n </CardContent>\n )}\n </Card>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { Divider, Grid, makeStyles, Typography } from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport React, { useEffect, useState } from 'react';\nimport useAsync from 'react-use/lib/useAsync';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\n\nimport { Filters, FiltersButton, FiltersState } from './Filters';\nimport { Entity, DEFAULT_NAMESPACE } from '@backstage/catalog-model';\n\nimport {\n EmptyState,\n Link,\n Progress,\n Table,\n TableColumn,\n} from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\n\ntype Result = {\n name: string;\n description: string | undefined;\n owner: string | undefined;\n kind: string;\n lifecycle: string | undefined;\n url: string;\n};\ntype SearchResults = Array<Result>;\n\nconst useStyles = makeStyles(theme => ({\n searchQuery: {\n color: theme.palette.text.primary,\n background: theme.palette.background.default,\n borderRadius: '10%',\n },\n tableHeader: {\n margin: theme.spacing(1, 0, 0, 0),\n display: 'flex',\n },\n divider: {\n width: '1px',\n margin: theme.spacing(0, 2),\n padding: theme.spacing(2, 0),\n },\n}));\n\ntype SearchResultProps = {\n searchQuery?: string;\n};\n\ntype TableHeaderProps = {\n searchQuery?: string;\n numberOfSelectedFilters: number;\n numberOfResults: number;\n handleToggleFilters: () => void;\n};\n\n// TODO: move out column to make the search result component more generic\nconst columns: TableColumn[] = [\n {\n title: 'Name',\n field: 'name',\n highlight: true,\n render: (result: Partial<Result>) => (\n <Link to={result.url || ''}>{result.name}</Link>\n ),\n },\n {\n title: 'Description',\n field: 'description',\n },\n {\n title: 'Owner',\n field: 'owner',\n },\n {\n title: 'Kind',\n field: 'kind',\n },\n {\n title: 'LifeCycle',\n field: 'lifecycle',\n },\n];\n\nconst TableHeader = ({\n searchQuery,\n numberOfSelectedFilters,\n numberOfResults,\n handleToggleFilters,\n}: TableHeaderProps) => {\n const classes = useStyles();\n\n return (\n <div className={classes.tableHeader}>\n <FiltersButton\n numberOfSelectedFilters={numberOfSelectedFilters}\n handleToggleFilters={handleToggleFilters}\n />\n <Divider className={classes.divider} orientation=\"vertical\" />\n <Grid item xs={12}>\n {searchQuery ? (\n <Typography variant=\"h6\">\n {`${numberOfResults} `}\n {numberOfResults > 1 ? `results for ` : `result for `}\n <span className={classes.searchQuery}>\"{searchQuery}\"</span>{' '}\n </Typography>\n ) : (\n <Typography variant=\"h6\">{`${numberOfResults} results`}</Typography>\n )}\n </Grid>\n </div>\n );\n};\n\nexport const SearchResult = ({ searchQuery }: SearchResultProps) => {\n const catalogApi = useApi(catalogApiRef);\n\n const [showFilters, toggleFilters] = useState(false);\n const [selectedFilters, setSelectedFilters] = useState<FiltersState>({\n selected: '',\n checked: [],\n });\n\n const [filteredResults, setFilteredResults] = useState<SearchResults>([]);\n\n const {\n loading,\n error,\n value: results,\n } = useAsync(async () => {\n const entities = await catalogApi.getEntities();\n return entities.items.map((entity: Entity) => ({\n name: entity.metadata.name,\n description: entity.metadata.description,\n owner:\n typeof entity.spec?.owner === 'string' ? entity.spec?.owner : undefined,\n kind: entity.kind,\n lifecycle:\n typeof entity.spec?.lifecycle === 'string'\n ? entity.spec?.lifecycle\n : undefined,\n url: `/catalog/${\n entity.metadata.namespace?.toLocaleLowerCase('en-US') ||\n DEFAULT_NAMESPACE\n }/${entity.kind.toLocaleLowerCase('en-US')}/${entity.metadata.name}`,\n }));\n }, []);\n\n useEffect(() => {\n if (results) {\n let withFilters = results;\n\n // apply filters\n\n // filter on selected\n if (selectedFilters.selected !== '') {\n withFilters = results.filter((result: Result) =>\n selectedFilters.selected.includes(result.kind),\n );\n }\n\n // filter on checked\n if (selectedFilters.checked.length > 0) {\n withFilters = withFilters.filter(\n (result: Result) =>\n result.lifecycle &&\n selectedFilters.checked.includes(result.lifecycle),\n );\n }\n\n // filter on searchQuery\n if (searchQuery) {\n withFilters = withFilters.filter(\n (result: Result) =>\n result.name?.toLocaleLowerCase('en-US').includes(searchQuery) ||\n result.name\n ?.toLocaleLowerCase('en-US')\n .includes(searchQuery.split(' ').join('-')) ||\n result.description\n ?.toLocaleLowerCase('en-US')\n .includes(searchQuery),\n );\n }\n\n setFilteredResults(withFilters);\n }\n }, [selectedFilters, searchQuery, results]);\n if (loading) {\n return <Progress />;\n }\n if (error) {\n return (\n <Alert severity=\"error\">\n Error encountered while fetching search results. {error.toString()}\n </Alert>\n );\n }\n if (!results || results.length === 0) {\n return <EmptyState missing=\"data\" title=\"Sorry, no results were found\" />;\n }\n\n const resetFilters = () => {\n setSelectedFilters({\n selected: '',\n checked: [],\n });\n };\n\n const updateSelected = (filter: string) => {\n setSelectedFilters(prevState => ({\n ...prevState,\n selected: filter,\n }));\n };\n\n const updateChecked = (filter: string) => {\n if (selectedFilters.checked.includes(filter)) {\n setSelectedFilters(prevState => ({\n ...prevState,\n checked: prevState.checked.filter(item => item !== filter),\n }));\n return;\n }\n\n setSelectedFilters(prevState => ({\n ...prevState,\n checked: [...prevState.checked, filter],\n }));\n };\n\n const filterOptions = results.reduce(\n (acc, curr) => {\n if (curr.kind && acc.kind.indexOf(curr.kind) < 0) {\n acc.kind.push(curr.kind);\n }\n if (curr.lifecycle && acc.lifecycle.indexOf(curr.lifecycle) < 0) {\n acc.lifecycle.push(curr.lifecycle);\n }\n return acc;\n },\n {\n kind: [] as Array<string>,\n lifecycle: [] as Array<string>,\n },\n );\n\n return (\n <>\n <Grid container>\n {showFilters && (\n <Grid item xs={3}>\n <Filters\n filters={selectedFilters}\n filterOptions={filterOptions}\n resetFilters={resetFilters}\n updateSelected={updateSelected}\n updateChecked={updateChecked}\n />\n </Grid>\n )}\n <Grid item xs={showFilters ? 9 : 12}>\n <Table\n options={{ paging: true, pageSize: 20, search: false }}\n data={filteredResults}\n columns={columns}\n title={\n <TableHeader\n searchQuery={searchQuery}\n numberOfResults={filteredResults.length}\n numberOfSelectedFilters={\n (selectedFilters.selected !== '' ? 1 : 0) +\n selectedFilters.checked.length\n }\n handleToggleFilters={() => toggleFilters(!showFilters)}\n />\n }\n />\n </Grid>\n </Grid>\n </>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Grid } from '@material-ui/core';\nimport React, { useEffect, useState } from 'react';\nimport useDebounce from 'react-use/lib/useDebounce';\nimport { SearchBar } from './LegacySearchBar';\nimport { SearchResult } from './LegacySearchResult';\nimport {\n Content,\n Header,\n Page,\n useQueryParamState,\n} from '@backstage/core-components';\n\n/**\n * @deprecated This SearchPage, powered directly by the Catalog API, will be\n * removed from a future release of this plugin.\n */\nexport const LegacySearchPage = () => {\n const [queryString, setQueryString] = useQueryParamState<string>('query');\n const [searchQuery, setSearchQuery] = useState(queryString ?? '');\n\n const handleSearch = (event: React.ChangeEvent<HTMLInputElement>) => {\n event.preventDefault();\n setSearchQuery(event.target.value);\n };\n\n useEffect(() => setSearchQuery(queryString ?? ''), [queryString]);\n\n useDebounce(\n () => {\n setQueryString(searchQuery);\n },\n 200,\n [searchQuery],\n );\n\n const handleClearSearchBar = () => {\n setSearchQuery('');\n };\n\n return (\n <Page themeId=\"home\">\n <Header title=\"Search\" />\n <Content>\n <Grid container direction=\"row\">\n <Grid item xs={12}>\n <SearchBar\n handleSearch={handleSearch}\n handleClearSearchBar={handleClearSearchBar}\n searchQuery={searchQuery}\n />\n </Grid>\n <Grid item xs={12}>\n <SearchResult\n searchQuery={(queryString ?? '').toLocaleLowerCase('en-US')}\n />\n </Grid>\n </Grid>\n </Content>\n </Page>\n );\n};\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { useEffect } from 'react';\nimport usePrevious from 'react-use/lib/usePrevious';\nimport qs from 'qs';\nimport { useLocation, useOutlet } from 'react-router';\nimport {\n SearchContextProvider,\n useSearch,\n} from '@backstage/plugin-search-react';\nimport { JsonObject } from '@backstage/types';\nimport { LegacySearchPage } from '../LegacySearchPage';\n\nexport const UrlUpdater = () => {\n const location = useLocation();\n const {\n term,\n setTerm,\n types,\n setTypes,\n pageCursor,\n setPageCursor,\n filters,\n setFilters,\n } = useSearch();\n\n const prevQueryParams = usePrevious(location.search);\n useEffect(() => {\n // Only respond to changes to url query params\n if (location.search === prevQueryParams) {\n return;\n }\n\n const query =\n qs.parse(location.search.substring(1), { arrayLimit: 0 }) || {};\n\n if (query.filters) {\n setFilters(query.filters as JsonObject);\n }\n\n if (query.query) {\n setTerm(query.query as string);\n }\n\n if (query.pageCursor) {\n setPageCursor(query.pageCursor as string);\n }\n\n if (query.types) {\n setTypes(query.types as string[]);\n }\n }, [prevQueryParams, location, setTerm, setTypes, setPageCursor, setFilters]);\n\n useEffect(() => {\n const newParams = qs.stringify(\n {\n query: term,\n types,\n pageCursor,\n filters,\n },\n { arrayFormat: 'brackets' },\n );\n const newUrl = `${window.location.pathname}?${newParams}`;\n\n // We directly manipulate window history here in order to not re-render\n // infinitely (state => location => state => etc). The intention of this\n // code is just to ensure the right query/filters are loaded when a user\n // clicks the \"back\" button after clicking a result.\n window.history.replaceState(null, document.title, newUrl);\n }, [term, types, pageCursor, filters]);\n\n return null;\n};\n\n/**\n * @public\n */\nexport const SearchPage = () => {\n const outlet = useOutlet();\n\n return (\n <SearchContextProvider>\n <UrlUpdater />\n {outlet || <LegacySearchPage />}\n </SearchContextProvider>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Button, makeStyles } from '@material-ui/core';\nimport ArrowBackIosIcon from '@material-ui/icons/ArrowBackIos';\nimport ArrowForwardIosIcon from '@material-ui/icons/ArrowForwardIos';\nimport React from 'react';\nimport { useSearch } from '@backstage/plugin-search-react';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n justifyContent: 'space-between',\n gap: theme.spacing(2),\n margin: theme.spacing(2, 0),\n },\n}));\n\n/**\n * @public\n * @deprecated Import from `@backstage/plugin-search-react` instead.\n */\nexport const SearchResultPager = () => {\n const { fetchNextPage, fetchPreviousPage } = useSearch();\n const classes = useStyles();\n\n if (!fetchNextPage && !fetchPreviousPage) {\n return <></>;\n }\n\n return (\n <nav arial-label=\"pagination navigation\" className={classes.root}>\n <Button\n aria-label=\"previous page\"\n disabled={!fetchPreviousPage}\n onClick={fetchPreviousPage}\n startIcon={<ArrowBackIosIcon />}\n >\n Previous\n </Button>\n\n <Button\n aria-label=\"next page\"\n disabled={!fetchNextPage}\n onClick={fetchNextPage}\n endIcon={<ArrowForwardIosIcon />}\n >\n Next\n </Button>\n </nav>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { cloneElement, Fragment, useEffect, useState } from 'react';\nimport { useSearch } from '@backstage/plugin-search-react';\nimport {\n Accordion,\n AccordionSummary,\n AccordionDetails,\n Card,\n CardContent,\n CardHeader,\n Divider,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n makeStyles,\n} from '@material-ui/core';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport AllIcon from '@material-ui/icons/FontDownload';\n\nconst useStyles = makeStyles(theme => ({\n card: {\n backgroundColor: 'rgba(0, 0, 0, .11)',\n },\n cardContent: {\n paddingTop: theme.spacing(1),\n },\n icon: {\n color: theme.palette.common.black,\n },\n list: {\n width: '100%',\n },\n listItemIcon: {\n width: '24px',\n height: '24px',\n },\n accordion: {\n backgroundColor: theme.palette.background.paper,\n },\n accordionSummary: {\n minHeight: 'auto',\n '&.Mui-expanded': {\n minHeight: 'auto',\n },\n },\n accordionSummaryContent: {\n margin: theme.spacing(2, 0),\n '&.Mui-expanded': {\n margin: theme.spacing(2, 0),\n },\n },\n accordionDetails: {\n padding: theme.spacing(0, 0, 1),\n },\n}));\n\n/**\n * @public\n */\nexport type SearchTypeAccordionProps = {\n name: string;\n types: Array<{\n value: string;\n name: string;\n icon: JSX.Element;\n }>;\n defaultValue?: string;\n};\n\nexport const SearchTypeAccordion = (props: SearchTypeAccordionProps) => {\n const classes = useStyles();\n const { setPageCursor, setTypes, types } = useSearch();\n const [expanded, setExpanded] = useState(true);\n const { defaultValue, name, types: givenTypes } = props;\n\n const toggleExpanded = () => setExpanded(prevState => !prevState);\n const handleClick = (type: string) => {\n return () => {\n setTypes(type !== '' ? [type] : []);\n setPageCursor(undefined);\n setExpanded(false);\n };\n };\n\n // Handle any provided defaultValue\n useEffect(() => {\n if (defaultValue) {\n setTypes([defaultValue]);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const definedTypes = [\n {\n value: '',\n name: 'All',\n icon: <AllIcon />,\n },\n ...givenTypes,\n ];\n const selected = types[0] || '';\n\n return (\n <Card className={classes.card}>\n <CardHeader title={name} titleTypographyProps={{ variant: 'overline' }} />\n <CardContent className={classes.cardContent}>\n <Accordion\n className={classes.accordion}\n expanded={expanded}\n onChange={toggleExpanded}\n >\n <AccordionSummary\n classes={{\n root: classes.accordionSummary,\n content: classes.accordionSummaryContent,\n }}\n expandIcon={<ExpandMoreIcon className={classes.icon} />}\n IconButtonProps={{ size: 'small' }}\n >\n {expanded\n ? 'Collapse'\n : definedTypes.filter(t => t.value === selected)[0]!.name}\n </AccordionSummary>\n <AccordionDetails classes={{ root: classes.accordionDetails }}>\n <List\n className={classes.list}\n component=\"nav\"\n aria-label=\"filter by type\"\n disablePadding\n dense\n >\n {definedTypes.map(type => (\n <Fragment key={type.value}>\n <Divider />\n <ListItem\n selected={\n types[0] === type.value ||\n (types.length === 0 && type.value === '')\n }\n onClick={handleClick(type.value)}\n button\n >\n <ListItemIcon>\n {cloneElement(type.icon, {\n className: classes.listItemIcon,\n })}\n </ListItemIcon>\n <ListItemText primary={type.name} />\n </ListItem>\n </Fragment>\n ))}\n </List>\n </AccordionDetails>\n </Accordion>\n </CardContent>\n </Card>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React, { useEffect } from 'react';\nimport { useSearch } from '@backstage/plugin-search-react';\nimport { BackstageTheme } from '@backstage/theme';\nimport { makeStyles, Tab, Tabs } from '@material-ui/core';\n\nconst useStyles = makeStyles((theme: BackstageTheme) => ({\n tabs: {\n borderBottom: `1px solid ${theme.palette.textVerySubtle}`,\n padding: theme.spacing(0, 4),\n },\n tab: {\n height: '50px',\n fontWeight: theme.typography.fontWeightBold,\n fontSize: theme.typography.pxToRem(13),\n color: theme.palette.textSubtle,\n minWidth: '130px',\n },\n}));\n\n/**\n * @public\n */\nexport type SearchTypeTabsProps = {\n types: Array<{\n value: string;\n name: string;\n }>;\n defaultValue?: string;\n};\n\nexport const SearchTypeTabs = (props: SearchTypeTabsProps) => {\n const classes = useStyles();\n const { setPageCursor, setTypes, types } = useSearch();\n const { defaultValue, types: givenTypes } = props;\n\n const changeTab = (_: React.ChangeEvent<{}>, newType: string) => {\n setTypes(newType !== '' ? [newType] : []);\n setPageCursor(undefined);\n };\n\n // Handle any provided defaultValue\n useEffect(() => {\n if (defaultValue) {\n setTypes([defaultValue]);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const definedTypes = [\n {\n value: '',\n name: 'All',\n },\n ...givenTypes,\n ];\n\n return (\n <Tabs\n className={classes.tabs}\n indicatorColor=\"primary\"\n value={types.length === 0 ? '' : types[0]}\n onChange={changeTab}\n >\n {definedTypes.map((type, idx) => (\n <Tab\n key={idx}\n className={classes.tab}\n disableRipple\n label={type.name}\n value={type.value}\n />\n ))}\n </Tabs>\n );\n};\n","/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n Checkbox,\n Chip,\n FormControl,\n InputLabel,\n ListItemText,\n makeStyles,\n MenuItem,\n Select,\n} from '@material-ui/core';\nimport React, { ChangeEvent } from 'react';\nimport useEffectOnce from 'react-use/lib/useEffectOnce';\nimport {\n SearchTypeAccordion,\n SearchTypeAccordionProps,\n} from './SearchType.Accordion';\nimport { SearchTypeTabs, SearchTypeTabsProps } from './SearchType.Tabs';\nimport { useSearch } from '@backstage/plugin-search-react';\n\nconst useStyles = makeStyles(theme => ({\n label: {\n textTransform: 'capitalize',\n },\n chips: {\n display: 'flex',\n flexWrap: 'wrap',\n marginTop: theme.spacing(1),\n },\n chip: {\n margin: 2,\n },\n}));\n\n/**\n * Props for {@link SearchType}.\n *\n * @public\n */\nexport type SearchTypeProps = {\n className?: string;\n name: string;\n values?: string[];\n defaultValue?: string[] | string | null;\n};\n\n/**\n * @public\n */\nconst SearchType = (props: SearchTypeProps) => {\n const { className, defaultValue, name, values = [] } = props;\n const classes = useStyles();\n const { types, setTypes } = useSearch();\n\n useEffectOnce(() => {\n if (!types.length) {\n if (defaultValue && Array.isArray(defaultValue)) {\n setTypes(defaultValue);\n } else if (defaultValue) {\n setTypes([defaultValue]);\n }\n }\n });\n\n const handleChange = (e: ChangeEvent<{ value: unknown }>) => {\n const value = e.target.value as string[];\n setTypes(value as string[]);\n };\n\n return (\n <FormControl\n className={className}\n variant=\"filled\"\n fullWidth\n data-testid=\"search-typefilter-next\"\n >\n <InputLabel className={classes.label} margin=\"dense\">\n {name}\n </InputLabel>\n <Select\n multiple\n variant=\"outlined\"\n value={types}\n onChange={handleChange}\n placeholder=\"All Results\"\n renderValue={selected => (\n <div className={classes.chips}>\n {(selected as string[]).map(value => (\n <Chip\n key={value}\n label={value}\n className={classes.chip}\n size=\"small\"\n />\n ))}\n </div>\n )}\n >\n {values.map((value: string) => (\n <MenuItem key={value} value={value}>\n <Checkbox checked={types.indexOf(value) > -1} />\n <ListItemText primary={value} />\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n );\n};\n\n/**\n * A control surface for the search query's \"types\" property, displayed as a\n * single-select collapsible accordion suitable for use in faceted search UIs.\n * @public\n */\nSearchType.Accordion = (props: SearchTypeAccordionProps) => {\n return <SearchTypeAccordion {...props} />;\n};\n\n/**\n * A control surface for the search query's \"types\" property, displayed as a\n * tabs suitable for use in faceted search UIs.\n * @public\n */\nSearchType.Tabs = (props: SearchTypeTabsProps) => {\n return <SearchTypeTabs {...props} />;\n};\n\nexport { SearchType };\nexport type { SearchTypeAccordionProps, SearchTypeTabsProps };\n","/*\n * Copyright 2020 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport qs from 'qs';\nimport React, { useCallback } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { rootRouteRef } from '../../plugin';\n\nimport { useRouteRef, IconComponent } from '@backstage/core-plugin-api';\nimport { SidebarSearchField, useContent } from '@backstage/core-components';\n\n/**\n * Props for {@link SidebarSearch}.\n *\n * @public\n */\nexport type SidebarSearchProps = {\n icon?: IconComponent;\n};\n\n/**\n * @public\n */\nexport const SidebarSearch = (props: SidebarSearchProps) => {\n const searchRoute = useRouteRef(rootRouteRef);\n const { focusContent } = useContent();\n const navigate = useNavigate();\n const handleSearch = useCallback(\n (query: string): void => {\n const queryString = qs.stringify({ query }, { addQueryPrefix: true });\n focusContent();\n navigate(`${searchRoute()}${queryString}`);\n },\n [focusContent, navigate, searchRoute],\n );\n\n return (\n <SidebarSearchField\n icon={props.icon}\n onSearch={handleSearch}\n to=\"/search\"\n />\n );\n};\n"],"names":["useStyles","FiltersButton","Filters","RealSearchBarBase","SearchBar","SearchPage","SearchResult","RealSearchResult","RealDefaultResultListItem","makeStyles","DefaultResultListItem","SearchResultPager","IconButton"],"mappings":"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"}
|