@backstage/plugin-search 1.4.25-next.0 → 1.4.25-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 +37 -0
- package/README.md +1 -1
- package/dist/alpha.d.ts +3 -3
- package/dist/alpha.esm.js +103 -80
- package/dist/alpha.esm.js.map +1 -1
- package/dist/components/HomePageComponent/HomePageSearchBar.esm.js +3 -2
- package/dist/components/HomePageComponent/HomePageSearchBar.esm.js.map +1 -1
- package/dist/components/SearchModal/SearchModal.esm.js +59 -47
- package/dist/components/SearchModal/SearchModal.esm.js.map +1 -1
- package/dist/components/SearchModal/useSearchModal.esm.js +3 -2
- package/dist/components/SearchModal/useSearchModal.esm.js.map +1 -1
- package/dist/components/SearchPage/SearchPage.esm.js +6 -2
- package/dist/components/SearchPage/SearchPage.esm.js.map +1 -1
- package/dist/components/SearchType/SearchType.Accordion.esm.js +60 -49
- package/dist/components/SearchType/SearchType.Accordion.esm.js.map +1 -1
- package/dist/components/SearchType/SearchType.Tabs.esm.js +14 -13
- package/dist/components/SearchType/SearchType.Tabs.esm.js.map +1 -1
- package/dist/components/SearchType/SearchType.esm.js +30 -25
- package/dist/components/SearchType/SearchType.esm.js.map +1 -1
- package/dist/components/SidebarSearch/SidebarSearch.esm.js +3 -2
- package/dist/components/SidebarSearch/SidebarSearch.esm.js.map +1 -1
- package/dist/components/SidebarSearchModal/SidebarSearchModal.esm.js +22 -19
- package/dist/components/SidebarSearchModal/SidebarSearchModal.esm.js.map +1 -1
- package/dist/index.d.ts +11 -11
- package/package.json +14 -14
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,42 @@
|
|
|
1
1
|
# @backstage/plugin-search
|
|
2
2
|
|
|
3
|
+
## 1.4.25-next.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- e655f62: Updated `README.md` to use `yarn start` instead of `yarn dev`.
|
|
8
|
+
- a47fd39: Removes instances of default React imports, a necessary update for the upcoming React 19 migration.
|
|
9
|
+
|
|
10
|
+
<https://legacy.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html>
|
|
11
|
+
|
|
12
|
+
- Updated dependencies
|
|
13
|
+
- @backstage/frontend-plugin-api@0.10.1-next.1
|
|
14
|
+
- @backstage/core-compat-api@0.4.1-next.2
|
|
15
|
+
- @backstage/core-components@0.17.1-next.1
|
|
16
|
+
- @backstage/core-plugin-api@1.10.6-next.0
|
|
17
|
+
- @backstage/plugin-catalog-react@1.17.0-next.2
|
|
18
|
+
- @backstage/plugin-search-react@1.8.8-next.1
|
|
19
|
+
- @backstage/errors@1.2.7
|
|
20
|
+
- @backstage/types@1.2.1
|
|
21
|
+
- @backstage/version-bridge@1.0.11
|
|
22
|
+
- @backstage/plugin-search-common@1.2.17
|
|
23
|
+
|
|
24
|
+
## 1.4.25-next.1
|
|
25
|
+
|
|
26
|
+
### Patch Changes
|
|
27
|
+
|
|
28
|
+
- Updated dependencies
|
|
29
|
+
- @backstage/core-components@0.17.1-next.0
|
|
30
|
+
- @backstage/frontend-plugin-api@0.10.1-next.0
|
|
31
|
+
- @backstage/plugin-catalog-react@1.16.1-next.1
|
|
32
|
+
- @backstage/plugin-search-react@1.8.8-next.0
|
|
33
|
+
- @backstage/core-compat-api@0.4.1-next.1
|
|
34
|
+
- @backstage/core-plugin-api@1.10.5
|
|
35
|
+
- @backstage/errors@1.2.7
|
|
36
|
+
- @backstage/types@1.2.1
|
|
37
|
+
- @backstage/version-bridge@1.0.11
|
|
38
|
+
- @backstage/plugin-search-common@1.2.17
|
|
39
|
+
|
|
3
40
|
## 1.4.25-next.0
|
|
4
41
|
|
|
5
42
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@ Development is ongoing. You can follow the progress and contribute at the Backst
|
|
|
6
6
|
|
|
7
7
|
## Getting started
|
|
8
8
|
|
|
9
|
-
Run `yarn
|
|
9
|
+
Run `yarn start` in the root directory, and then navigate to [/search](http://localhost:3000/search) to check out the plugin.
|
|
10
10
|
|
|
11
11
|
### Optional Settings
|
|
12
12
|
|
package/dist/alpha.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as _backstage_plugin_search_react_alpha from '@backstage/plugin-search-react/alpha';
|
|
2
|
+
import * as react from 'react';
|
|
2
3
|
import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
|
|
3
4
|
import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
|
|
4
|
-
import React__default from 'react';
|
|
5
5
|
|
|
6
6
|
/** @alpha */
|
|
7
7
|
declare const searchApi: _backstage_frontend_plugin_api.ExtensionDefinition<{
|
|
@@ -27,7 +27,7 @@ declare const searchPage: _backstage_frontend_plugin_api.ExtensionDefinition<{
|
|
|
27
27
|
} & {
|
|
28
28
|
path?: string | undefined;
|
|
29
29
|
};
|
|
30
|
-
output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<
|
|
30
|
+
output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
|
|
31
31
|
optional: true;
|
|
32
32
|
}>;
|
|
33
33
|
inputs: {
|
|
@@ -122,7 +122,7 @@ declare const _default: _backstage_frontend_plugin_api.FrontendPlugin<{
|
|
|
122
122
|
} & {
|
|
123
123
|
path?: string | undefined;
|
|
124
124
|
};
|
|
125
|
-
output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<
|
|
125
|
+
output: _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<react.JSX.Element, "core.reactElement", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<string, "core.routing.path", {}> | _backstage_frontend_plugin_api.ConfigurableExtensionDataRef<_backstage_frontend_plugin_api.RouteRef<_backstage_frontend_plugin_api.AnyRouteRefParams>, "core.routing.ref", {
|
|
126
126
|
optional: true;
|
|
127
127
|
}>;
|
|
128
128
|
inputs: {
|
package/dist/alpha.esm.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { createElement } from 'react';
|
|
2
3
|
import Grid from '@material-ui/core/Grid';
|
|
3
4
|
import Paper from '@material-ui/core/Paper';
|
|
4
5
|
import { makeStyles } from '@material-ui/core/styles';
|
|
@@ -72,88 +73,110 @@ const searchPage = PageBlueprint.makeWithOverrides({
|
|
|
72
73
|
const { isMobile } = useSidebarPinState();
|
|
73
74
|
const { types } = useSearch();
|
|
74
75
|
const catalogApi = useApi(catalogApiRef);
|
|
75
|
-
return /* @__PURE__ */
|
|
76
|
-
|
|
77
|
-
{
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
label: "Entity",
|
|
99
|
-
name: "name",
|
|
100
|
-
values: async () => {
|
|
101
|
-
const { items } = await catalogApi.getEntities({
|
|
102
|
-
fields: ["metadata.name"],
|
|
103
|
-
filter: {
|
|
104
|
-
"metadata.annotations.backstage.io/techdocs-ref": CATALOG_FILTER_EXISTS
|
|
76
|
+
return /* @__PURE__ */ jsxs(Page, { themeId: "home", children: [
|
|
77
|
+
!isMobile && /* @__PURE__ */ jsx(Header, { title: "Search" }),
|
|
78
|
+
/* @__PURE__ */ jsx(Content, { children: /* @__PURE__ */ jsxs(Grid, { container: true, direction: "row", children: [
|
|
79
|
+
/* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(SearchBar, { debounceTime: 100 }) }),
|
|
80
|
+
!isMobile && /* @__PURE__ */ jsxs(Grid, { item: true, xs: 3, children: [
|
|
81
|
+
/* @__PURE__ */ jsx(
|
|
82
|
+
SearchType.Accordion,
|
|
83
|
+
{
|
|
84
|
+
name: "Result Type",
|
|
85
|
+
defaultValue: "software-catalog",
|
|
86
|
+
showCounts: true,
|
|
87
|
+
types: [
|
|
88
|
+
{
|
|
89
|
+
value: "software-catalog",
|
|
90
|
+
name: "Software Catalog",
|
|
91
|
+
icon: /* @__PURE__ */ jsx(CatalogIcon, {})
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
value: "techdocs",
|
|
95
|
+
name: "Documentation",
|
|
96
|
+
icon: /* @__PURE__ */ jsx(DocsIcon, {})
|
|
97
|
+
}
|
|
98
|
+
].concat(resultTypes)
|
|
105
99
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
(
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
100
|
+
),
|
|
101
|
+
/* @__PURE__ */ jsxs(Paper, { className: classes.filters, children: [
|
|
102
|
+
types.includes("techdocs") && /* @__PURE__ */ jsx(
|
|
103
|
+
SearchFilter.Select,
|
|
104
|
+
{
|
|
105
|
+
className: classes.filter,
|
|
106
|
+
label: "Entity",
|
|
107
|
+
name: "name",
|
|
108
|
+
values: async () => {
|
|
109
|
+
const { items } = await catalogApi.getEntities({
|
|
110
|
+
fields: ["metadata.name"],
|
|
111
|
+
filter: {
|
|
112
|
+
"metadata.annotations.backstage.io/techdocs-ref": CATALOG_FILTER_EXISTS
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
const names = items.map(
|
|
116
|
+
(entity) => entity.metadata.name
|
|
117
|
+
);
|
|
118
|
+
names.sort();
|
|
119
|
+
return names;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
),
|
|
123
|
+
/* @__PURE__ */ jsx(
|
|
124
|
+
SearchFilter.Select,
|
|
125
|
+
{
|
|
126
|
+
className: classes.filter,
|
|
127
|
+
label: "Kind",
|
|
128
|
+
name: "kind",
|
|
129
|
+
values: [
|
|
130
|
+
"API",
|
|
131
|
+
"Component",
|
|
132
|
+
"Domain",
|
|
133
|
+
"Group",
|
|
134
|
+
"Location",
|
|
135
|
+
"Resource",
|
|
136
|
+
"System",
|
|
137
|
+
"Template",
|
|
138
|
+
"User"
|
|
139
|
+
]
|
|
140
|
+
}
|
|
141
|
+
),
|
|
142
|
+
/* @__PURE__ */ jsx(
|
|
143
|
+
SearchFilter.Checkbox,
|
|
144
|
+
{
|
|
145
|
+
className: classes.filter,
|
|
146
|
+
label: "Lifecycle",
|
|
147
|
+
name: "lifecycle",
|
|
148
|
+
values: ["experimental", "production"]
|
|
149
|
+
}
|
|
150
|
+
),
|
|
151
|
+
additionalSearchFilters.map((SearchFilterComponent) => /* @__PURE__ */ jsx(SearchFilterComponent, { className: classes.filter }))
|
|
152
|
+
] })
|
|
153
|
+
] }),
|
|
154
|
+
/* @__PURE__ */ jsxs(Grid, { item: true, xs: true, children: [
|
|
155
|
+
/* @__PURE__ */ jsx(SearchPagination, {}),
|
|
156
|
+
/* @__PURE__ */ jsx(SearchResult, { children: ({ results }) => /* @__PURE__ */ jsx(Fragment, { children: results.map((result, index) => {
|
|
157
|
+
const { noTrack } = config;
|
|
158
|
+
const { document, ...rest } = result;
|
|
159
|
+
const SearchResultListItem = getResultItemComponent(result);
|
|
160
|
+
return /* @__PURE__ */ createElement(
|
|
161
|
+
SearchResultListItem,
|
|
162
|
+
{
|
|
163
|
+
...rest,
|
|
164
|
+
key: index,
|
|
165
|
+
result: document,
|
|
166
|
+
noTrack
|
|
167
|
+
}
|
|
168
|
+
);
|
|
169
|
+
}) }) }),
|
|
170
|
+
/* @__PURE__ */ jsx(SearchResultPager, {})
|
|
171
|
+
] })
|
|
172
|
+
] }) })
|
|
173
|
+
] });
|
|
154
174
|
};
|
|
155
175
|
return compatWrapper(
|
|
156
|
-
/* @__PURE__ */
|
|
176
|
+
/* @__PURE__ */ jsxs(SearchContextProvider, { children: [
|
|
177
|
+
/* @__PURE__ */ jsx(UrlUpdater, {}),
|
|
178
|
+
/* @__PURE__ */ jsx(Component, {})
|
|
179
|
+
] })
|
|
157
180
|
);
|
|
158
181
|
}
|
|
159
182
|
});
|
package/dist/alpha.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["/*\n * Copyright 2023 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';\n\nimport Grid from '@material-ui/core/Grid';\nimport Paper from '@material-ui/core/Paper';\nimport { makeStyles, Theme } from '@material-ui/core/styles';\nimport SearchIcon from '@material-ui/icons/Search';\n\nimport {\n CatalogIcon,\n Content,\n DocsIcon,\n Header,\n Page,\n useSidebarPinState,\n} from '@backstage/core-components';\nimport {\n useApi,\n discoveryApiRef,\n fetchApiRef,\n createApiFactory,\n} from '@backstage/core-plugin-api';\n\nimport {\n createFrontendPlugin,\n ApiBlueprint,\n createExtensionInput,\n PageBlueprint,\n NavItemBlueprint,\n} from '@backstage/frontend-plugin-api';\n\nimport {\n catalogApiRef,\n CATALOG_FILTER_EXISTS,\n} from '@backstage/plugin-catalog-react';\n\nimport {\n DefaultResultListItem,\n SearchBar,\n SearchFilter,\n SearchPagination,\n SearchResult as SearchResults,\n SearchResultPager,\n useSearch,\n SearchContextProvider,\n} from '@backstage/plugin-search-react';\nimport { SearchResult } from '@backstage/plugin-search-common';\nimport { searchApiRef } from '@backstage/plugin-search-react';\nimport {\n SearchResultListItemBlueprint,\n SearchFilterResultTypeBlueprint,\n SearchFilterBlueprint,\n} from '@backstage/plugin-search-react/alpha';\n\nimport { rootRouteRef } from './plugin';\nimport { SearchClient } from './apis';\nimport { SearchType } from './components/SearchType';\nimport { UrlUpdater } from './components/SearchPage/SearchPage';\nimport {\n compatWrapper,\n convertLegacyRouteRef,\n convertLegacyRouteRefs,\n} from '@backstage/core-compat-api';\n\n/** @alpha */\nexport const searchApi = ApiBlueprint.make({\n params: {\n factory: createApiFactory({\n api: searchApiRef,\n deps: { discoveryApi: discoveryApiRef, fetchApi: fetchApiRef },\n factory: ({ discoveryApi, fetchApi }) =>\n new SearchClient({ discoveryApi, fetchApi }),\n }),\n },\n});\n\nconst useSearchPageStyles = makeStyles((theme: Theme) => ({\n filter: {\n '& + &': {\n marginTop: theme.spacing(2.5),\n },\n },\n filters: {\n padding: theme.spacing(2),\n marginTop: theme.spacing(2),\n },\n}));\n\n/** @alpha */\nexport const searchPage = PageBlueprint.makeWithOverrides({\n config: {\n schema: {\n noTrack: z => z.boolean().default(false),\n },\n },\n inputs: {\n items: createExtensionInput([SearchResultListItemBlueprint.dataRefs.item]),\n resultTypes: createExtensionInput([\n SearchFilterResultTypeBlueprint.dataRefs.resultType,\n ]),\n searchFilters: createExtensionInput([\n SearchFilterBlueprint.dataRefs.searchFilters,\n ]),\n },\n factory(originalFactory, { config, inputs }) {\n return originalFactory({\n defaultPath: '/search',\n routeRef: convertLegacyRouteRef(rootRouteRef),\n loader: async () => {\n const getResultItemComponent = (result: SearchResult) => {\n const value = inputs.items.find(item =>\n item\n ?.get(SearchResultListItemBlueprint.dataRefs.item)\n .predicate?.(result),\n );\n return (\n value?.get(SearchResultListItemBlueprint.dataRefs.item).component ??\n DefaultResultListItem\n );\n };\n\n const resultTypes = inputs.resultTypes.map(item =>\n item.get(SearchFilterResultTypeBlueprint.dataRefs.resultType),\n );\n\n const additionalSearchFilters = inputs.searchFilters.map(\n item =>\n item.get(SearchFilterBlueprint.dataRefs.searchFilters).component,\n );\n\n const Component = () => {\n const classes = useSearchPageStyles();\n const { isMobile } = useSidebarPinState();\n const { types } = useSearch();\n const catalogApi = useApi(catalogApiRef);\n\n return (\n <Page themeId=\"home\">\n {!isMobile && <Header title=\"Search\" />}\n <Content>\n <Grid container direction=\"row\">\n <Grid item xs={12}>\n <SearchBar debounceTime={100} />\n </Grid>\n {!isMobile && (\n <Grid item xs={3}>\n <SearchType.Accordion\n name=\"Result Type\"\n defaultValue=\"software-catalog\"\n showCounts\n types={[\n {\n value: 'software-catalog',\n name: 'Software Catalog',\n icon: <CatalogIcon />,\n },\n {\n value: 'techdocs',\n name: 'Documentation',\n icon: <DocsIcon />,\n },\n ].concat(resultTypes)}\n />\n <Paper className={classes.filters}>\n {types.includes('techdocs') && (\n <SearchFilter.Select\n className={classes.filter}\n label=\"Entity\"\n name=\"name\"\n values={async () => {\n // Return a list of entities which are documented.\n const { items } = await catalogApi.getEntities({\n fields: ['metadata.name'],\n filter: {\n 'metadata.annotations.backstage.io/techdocs-ref':\n CATALOG_FILTER_EXISTS,\n },\n });\n\n const names = items.map(\n entity => entity.metadata.name,\n );\n names.sort();\n return names;\n }}\n />\n )}\n <SearchFilter.Select\n className={classes.filter}\n label=\"Kind\"\n name=\"kind\"\n values={[\n 'API',\n 'Component',\n 'Domain',\n 'Group',\n 'Location',\n 'Resource',\n 'System',\n 'Template',\n 'User',\n ]}\n />\n <SearchFilter.Checkbox\n className={classes.filter}\n label=\"Lifecycle\"\n name=\"lifecycle\"\n values={['experimental', 'production']}\n />\n {additionalSearchFilters.map(SearchFilterComponent => (\n <SearchFilterComponent className={classes.filter} />\n ))}\n </Paper>\n </Grid>\n )}\n <Grid item xs>\n <SearchPagination />\n <SearchResults>\n {({ results }) => (\n <>\n {results.map((result, index) => {\n const { noTrack } = config;\n const { document, ...rest } = result;\n const SearchResultListItem =\n getResultItemComponent(result);\n return (\n <SearchResultListItem\n {...rest}\n key={index}\n result={document}\n noTrack={noTrack}\n />\n );\n })}\n </>\n )}\n </SearchResults>\n <SearchResultPager />\n </Grid>\n </Grid>\n </Content>\n </Page>\n );\n };\n\n return compatWrapper(\n <SearchContextProvider>\n <UrlUpdater />\n <Component />\n </SearchContextProvider>,\n );\n },\n });\n },\n});\n\n/** @alpha */\nexport const searchNavItem = NavItemBlueprint.make({\n params: {\n routeRef: convertLegacyRouteRef(rootRouteRef),\n title: 'Search',\n icon: SearchIcon,\n },\n});\n\n/** @alpha */\nexport default createFrontendPlugin({\n id: 'search',\n extensions: [searchApi, searchPage, searchNavItem],\n routes: convertLegacyRouteRefs({\n root: rootRouteRef,\n }),\n});\n"],"names":["SearchResults"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"alpha.esm.js","sources":["../src/alpha.tsx"],"sourcesContent":["/*\n * Copyright 2023 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/Grid';\nimport Paper from '@material-ui/core/Paper';\nimport { makeStyles, Theme } from '@material-ui/core/styles';\nimport SearchIcon from '@material-ui/icons/Search';\n\nimport {\n CatalogIcon,\n Content,\n DocsIcon,\n Header,\n Page,\n useSidebarPinState,\n} from '@backstage/core-components';\nimport {\n useApi,\n discoveryApiRef,\n fetchApiRef,\n createApiFactory,\n} from '@backstage/core-plugin-api';\n\nimport {\n createFrontendPlugin,\n ApiBlueprint,\n createExtensionInput,\n PageBlueprint,\n NavItemBlueprint,\n} from '@backstage/frontend-plugin-api';\n\nimport {\n catalogApiRef,\n CATALOG_FILTER_EXISTS,\n} from '@backstage/plugin-catalog-react';\n\nimport {\n DefaultResultListItem,\n SearchBar,\n SearchFilter,\n SearchPagination,\n SearchResult as SearchResults,\n SearchResultPager,\n useSearch,\n SearchContextProvider,\n} from '@backstage/plugin-search-react';\nimport { SearchResult } from '@backstage/plugin-search-common';\nimport { searchApiRef } from '@backstage/plugin-search-react';\nimport {\n SearchResultListItemBlueprint,\n SearchFilterResultTypeBlueprint,\n SearchFilterBlueprint,\n} from '@backstage/plugin-search-react/alpha';\n\nimport { rootRouteRef } from './plugin';\nimport { SearchClient } from './apis';\nimport { SearchType } from './components/SearchType';\nimport { UrlUpdater } from './components/SearchPage/SearchPage';\nimport {\n compatWrapper,\n convertLegacyRouteRef,\n convertLegacyRouteRefs,\n} from '@backstage/core-compat-api';\n\n/** @alpha */\nexport const searchApi = ApiBlueprint.make({\n params: {\n factory: createApiFactory({\n api: searchApiRef,\n deps: { discoveryApi: discoveryApiRef, fetchApi: fetchApiRef },\n factory: ({ discoveryApi, fetchApi }) =>\n new SearchClient({ discoveryApi, fetchApi }),\n }),\n },\n});\n\nconst useSearchPageStyles = makeStyles((theme: Theme) => ({\n filter: {\n '& + &': {\n marginTop: theme.spacing(2.5),\n },\n },\n filters: {\n padding: theme.spacing(2),\n marginTop: theme.spacing(2),\n },\n}));\n\n/** @alpha */\nexport const searchPage = PageBlueprint.makeWithOverrides({\n config: {\n schema: {\n noTrack: z => z.boolean().default(false),\n },\n },\n inputs: {\n items: createExtensionInput([SearchResultListItemBlueprint.dataRefs.item]),\n resultTypes: createExtensionInput([\n SearchFilterResultTypeBlueprint.dataRefs.resultType,\n ]),\n searchFilters: createExtensionInput([\n SearchFilterBlueprint.dataRefs.searchFilters,\n ]),\n },\n factory(originalFactory, { config, inputs }) {\n return originalFactory({\n defaultPath: '/search',\n routeRef: convertLegacyRouteRef(rootRouteRef),\n loader: async () => {\n const getResultItemComponent = (result: SearchResult) => {\n const value = inputs.items.find(item =>\n item\n ?.get(SearchResultListItemBlueprint.dataRefs.item)\n .predicate?.(result),\n );\n return (\n value?.get(SearchResultListItemBlueprint.dataRefs.item).component ??\n DefaultResultListItem\n );\n };\n\n const resultTypes = inputs.resultTypes.map(item =>\n item.get(SearchFilterResultTypeBlueprint.dataRefs.resultType),\n );\n\n const additionalSearchFilters = inputs.searchFilters.map(\n item =>\n item.get(SearchFilterBlueprint.dataRefs.searchFilters).component,\n );\n\n const Component = () => {\n const classes = useSearchPageStyles();\n const { isMobile } = useSidebarPinState();\n const { types } = useSearch();\n const catalogApi = useApi(catalogApiRef);\n\n return (\n <Page themeId=\"home\">\n {!isMobile && <Header title=\"Search\" />}\n <Content>\n <Grid container direction=\"row\">\n <Grid item xs={12}>\n <SearchBar debounceTime={100} />\n </Grid>\n {!isMobile && (\n <Grid item xs={3}>\n <SearchType.Accordion\n name=\"Result Type\"\n defaultValue=\"software-catalog\"\n showCounts\n types={[\n {\n value: 'software-catalog',\n name: 'Software Catalog',\n icon: <CatalogIcon />,\n },\n {\n value: 'techdocs',\n name: 'Documentation',\n icon: <DocsIcon />,\n },\n ].concat(resultTypes)}\n />\n <Paper className={classes.filters}>\n {types.includes('techdocs') && (\n <SearchFilter.Select\n className={classes.filter}\n label=\"Entity\"\n name=\"name\"\n values={async () => {\n // Return a list of entities which are documented.\n const { items } = await catalogApi.getEntities({\n fields: ['metadata.name'],\n filter: {\n 'metadata.annotations.backstage.io/techdocs-ref':\n CATALOG_FILTER_EXISTS,\n },\n });\n\n const names = items.map(\n entity => entity.metadata.name,\n );\n names.sort();\n return names;\n }}\n />\n )}\n <SearchFilter.Select\n className={classes.filter}\n label=\"Kind\"\n name=\"kind\"\n values={[\n 'API',\n 'Component',\n 'Domain',\n 'Group',\n 'Location',\n 'Resource',\n 'System',\n 'Template',\n 'User',\n ]}\n />\n <SearchFilter.Checkbox\n className={classes.filter}\n label=\"Lifecycle\"\n name=\"lifecycle\"\n values={['experimental', 'production']}\n />\n {additionalSearchFilters.map(SearchFilterComponent => (\n <SearchFilterComponent className={classes.filter} />\n ))}\n </Paper>\n </Grid>\n )}\n <Grid item xs>\n <SearchPagination />\n <SearchResults>\n {({ results }) => (\n <>\n {results.map((result, index) => {\n const { noTrack } = config;\n const { document, ...rest } = result;\n const SearchResultListItem =\n getResultItemComponent(result);\n return (\n <SearchResultListItem\n {...rest}\n key={index}\n result={document}\n noTrack={noTrack}\n />\n );\n })}\n </>\n )}\n </SearchResults>\n <SearchResultPager />\n </Grid>\n </Grid>\n </Content>\n </Page>\n );\n };\n\n return compatWrapper(\n <SearchContextProvider>\n <UrlUpdater />\n <Component />\n </SearchContextProvider>,\n );\n },\n });\n },\n});\n\n/** @alpha */\nexport const searchNavItem = NavItemBlueprint.make({\n params: {\n routeRef: convertLegacyRouteRef(rootRouteRef),\n title: 'Search',\n icon: SearchIcon,\n },\n});\n\n/** @alpha */\nexport default createFrontendPlugin({\n id: 'search',\n extensions: [searchApi, searchPage, searchNavItem],\n routes: convertLegacyRouteRefs({\n root: rootRouteRef,\n }),\n});\n"],"names":["SearchResults"],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useRef, useCallback } from 'react';
|
|
2
3
|
import { makeStyles } from '@material-ui/core/styles';
|
|
3
4
|
import { SearchBarBase } from '@backstage/plugin-search-react';
|
|
4
5
|
import { useNavigateToQuery } from '../util.esm.js';
|
|
@@ -20,7 +21,7 @@ const HomePageSearchBar = (props) => {
|
|
|
20
21
|
const handleSubmit = useCallback(() => {
|
|
21
22
|
handleSearch({ query: ref.current?.value ?? "" });
|
|
22
23
|
}, [handleSearch]);
|
|
23
|
-
return /* @__PURE__ */
|
|
24
|
+
return /* @__PURE__ */ jsx(
|
|
24
25
|
SearchBarBase,
|
|
25
26
|
{
|
|
26
27
|
value: query,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HomePageSearchBar.esm.js","sources":["../../../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 */\n\nimport
|
|
1
|
+
{"version":3,"file":"HomePageSearchBar.esm.js","sources":["../../../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 */\n\nimport { useCallback, useRef, 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 searchBarRoot: {\n fontSize: '1.5em',\n },\n searchBarOutline: {\n border: '1px solid #555',\n borderRadius: '6px',\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 ref = useRef<HTMLInputElement | null>(null);\n\n const handleSearch = useNavigateToQuery();\n\n // This handler is called when \"enter\" is pressed\n const handleSubmit = useCallback(() => {\n // Using ref to get the current field value without waiting for a query debounce\n handleSearch({ query: ref.current?.value ?? '' });\n }, [handleSearch]);\n\n return (\n <SearchBarBase\n value={query}\n onSubmit={handleSubmit}\n onChange={setQuery}\n inputProps={{ ref }}\n InputProps={{\n ...props.InputProps,\n classes: {\n root: classes.searchBarRoot,\n notchedOutline: classes.searchBarOutline,\n ...props.InputProps?.classes,\n },\n }}\n {...props}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;AAwBA,MAAM,YAAY,UAAW,CAAA;AAAA,EAC3B,aAAe,EAAA;AAAA,IACb,QAAU,EAAA;AAAA,GACZ;AAAA,EACA,gBAAkB,EAAA;AAAA,IAChB,MAAQ,EAAA,gBAAA;AAAA,IACR,YAAc,EAAA;AAAA;AAElB,CAAC,CAAA;AAcY,MAAA,iBAAA,GAAoB,CAAC,KAAkC,KAAA;AAClE,EAAM,MAAA,OAAA,GAAU,UAAU,KAAK,CAAA;AAC/B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,EAAE,CAAA;AACrC,EAAM,MAAA,GAAA,GAAM,OAAgC,IAAI,CAAA;AAEhD,EAAA,MAAM,eAAe,kBAAmB,EAAA;AAGxC,EAAM,MAAA,YAAA,GAAe,YAAY,MAAM;AAErC,IAAA,YAAA,CAAa,EAAE,KAAO,EAAA,GAAA,CAAI,OAAS,EAAA,KAAA,IAAS,IAAI,CAAA;AAAA,GAClD,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EACE,uBAAA,GAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,KAAO,EAAA,KAAA;AAAA,MACP,QAAU,EAAA,YAAA;AAAA,MACV,QAAU,EAAA,QAAA;AAAA,MACV,UAAA,EAAY,EAAE,GAAI,EAAA;AAAA,MAClB,UAAY,EAAA;AAAA,QACV,GAAG,KAAM,CAAA,UAAA;AAAA,QACT,OAAS,EAAA;AAAA,UACP,MAAM,OAAQ,CAAA,aAAA;AAAA,UACd,gBAAgB,OAAQ,CAAA,gBAAA;AAAA,UACxB,GAAG,MAAM,UAAY,EAAA;AAAA;AACvB,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;;;;"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
1
2
|
import { useContent } from '@backstage/core-components';
|
|
2
3
|
import { useRouteRef } from '@backstage/core-plugin-api';
|
|
3
4
|
import { SearchContextProvider, SearchBar, SearchResult, SearchResultPager } from '@backstage/plugin-search-react';
|
|
@@ -13,7 +14,7 @@ import Button from '@material-ui/core/Button';
|
|
|
13
14
|
import IconButton from '@material-ui/core/IconButton';
|
|
14
15
|
import ArrowForwardIcon from '@material-ui/icons/ArrowForward';
|
|
15
16
|
import CloseIcon from '@material-ui/icons/Close';
|
|
16
|
-
import
|
|
17
|
+
import { useRef, useEffect, useCallback } from 'react';
|
|
17
18
|
import { useNavigate } from 'react-router-dom';
|
|
18
19
|
import { rootRouteRef } from '../../plugin.esm.js';
|
|
19
20
|
|
|
@@ -61,40 +62,51 @@ const Modal = ({
|
|
|
61
62
|
navigate(`${searchRootRoute}?query=${query}`);
|
|
62
63
|
handleSearchResultClick();
|
|
63
64
|
}, [navigate, handleSearchResultClick, searchRootRoute]);
|
|
64
|
-
return /* @__PURE__ */
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
65
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
66
|
+
/* @__PURE__ */ jsx(DialogTitle, { children: /* @__PURE__ */ jsxs(Box, { className: classes.dialogTitle, children: [
|
|
67
|
+
/* @__PURE__ */ jsx(
|
|
68
|
+
SearchBar,
|
|
69
|
+
{
|
|
70
|
+
className: classes.input,
|
|
71
|
+
inputProps: { ref: searchBarRef },
|
|
72
|
+
onSubmit: handleSearchBarSubmit
|
|
73
|
+
}
|
|
74
|
+
),
|
|
75
|
+
/* @__PURE__ */ jsx(IconButton, { "aria-label": "close", onClick: toggleModal, children: /* @__PURE__ */ jsx(CloseIcon, {}) })
|
|
76
|
+
] }) }),
|
|
77
|
+
/* @__PURE__ */ jsxs(DialogContent, { children: [
|
|
78
|
+
/* @__PURE__ */ jsx(
|
|
79
|
+
Grid,
|
|
80
|
+
{
|
|
81
|
+
container: true,
|
|
82
|
+
direction: "row-reverse",
|
|
83
|
+
justifyContent: "flex-start",
|
|
84
|
+
alignItems: "center",
|
|
85
|
+
children: /* @__PURE__ */ jsx(Grid, { item: true, children: /* @__PURE__ */ jsx(
|
|
86
|
+
Button,
|
|
87
|
+
{
|
|
88
|
+
className: classes.button,
|
|
89
|
+
color: "primary",
|
|
90
|
+
endIcon: /* @__PURE__ */ jsx(ArrowForwardIcon, {}),
|
|
91
|
+
onClick: handleSearchBarSubmit,
|
|
92
|
+
disableRipple: true,
|
|
93
|
+
children: "View Full Results"
|
|
94
|
+
}
|
|
95
|
+
) })
|
|
96
|
+
}
|
|
97
|
+
),
|
|
98
|
+
/* @__PURE__ */ jsx(Divider, {}),
|
|
99
|
+
/* @__PURE__ */ jsx(
|
|
100
|
+
SearchResult,
|
|
101
|
+
{
|
|
102
|
+
onClick: handleSearchResultClick,
|
|
103
|
+
onKeyDown: handleSearchResultClick,
|
|
104
|
+
children: resultItemComponents
|
|
105
|
+
}
|
|
106
|
+
)
|
|
107
|
+
] }),
|
|
108
|
+
/* @__PURE__ */ jsx(DialogActions, { className: classes.dialogActionsContainer, children: /* @__PURE__ */ jsx(Grid, { container: true, direction: "row", children: /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(SearchResultPager, {}) }) }) })
|
|
109
|
+
] });
|
|
98
110
|
};
|
|
99
111
|
const SearchModal = (props) => {
|
|
100
112
|
const {
|
|
@@ -105,7 +117,7 @@ const SearchModal = (props) => {
|
|
|
105
117
|
resultItemComponents
|
|
106
118
|
} = props;
|
|
107
119
|
const classes = useStyles();
|
|
108
|
-
return /* @__PURE__ */
|
|
120
|
+
return /* @__PURE__ */ jsx(
|
|
109
121
|
Dialog,
|
|
110
122
|
{
|
|
111
123
|
classes: {
|
|
@@ -117,18 +129,18 @@ const SearchModal = (props) => {
|
|
|
117
129
|
fullWidth: true,
|
|
118
130
|
maxWidth: "lg",
|
|
119
131
|
open,
|
|
120
|
-
hidden
|
|
121
|
-
|
|
122
|
-
open && /* @__PURE__ */ React.createElement(SearchContextProvider, { inheritParentContextIfAvailable: true }, (children && children({
|
|
123
|
-
toggleModal,
|
|
124
|
-
resultItemComponents: resultItemComponents || []
|
|
125
|
-
})) ?? /* @__PURE__ */ React.createElement(
|
|
126
|
-
Modal,
|
|
127
|
-
{
|
|
132
|
+
hidden,
|
|
133
|
+
children: open && /* @__PURE__ */ jsx(SearchContextProvider, { inheritParentContextIfAvailable: true, children: (children && children({
|
|
128
134
|
toggleModal,
|
|
129
|
-
resultItemComponents
|
|
130
|
-
}
|
|
131
|
-
|
|
135
|
+
resultItemComponents: resultItemComponents || []
|
|
136
|
+
})) ?? /* @__PURE__ */ jsx(
|
|
137
|
+
Modal,
|
|
138
|
+
{
|
|
139
|
+
toggleModal,
|
|
140
|
+
resultItemComponents
|
|
141
|
+
}
|
|
142
|
+
) })
|
|
143
|
+
}
|
|
132
144
|
);
|
|
133
145
|
};
|
|
134
146
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchModal.esm.js","sources":["../../../src/components/SearchModal/SearchModal.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 { useContent } from '@backstage/core-components';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport {\n SearchBar,\n SearchContextProvider,\n SearchResult,\n SearchResultPager,\n} from '@backstage/plugin-search-react';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Divider from '@material-ui/core/Divider';\nimport Grid from '@material-ui/core/Grid';\nimport { useTheme } from '@material-ui/core/styles';\nimport Box from '@material-ui/core/Box';\nimport Button from '@material-ui/core/Button';\nimport IconButton from '@material-ui/core/IconButton';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ArrowForwardIcon from '@material-ui/icons/ArrowForward';\nimport CloseIcon from '@material-ui/icons/Close';\nimport React, { ReactNode, useCallback, useEffect, useRef } from 'react';\nimport { useNavigate } from 'react-router-dom';\n\nimport { rootRouteRef } from '../../plugin';\nimport { SearchResultSet } from '@backstage/plugin-search-common';\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 * Ability to provide custom components to render the result items\n */\n resultItemComponents?:\n | ReactNode\n | ((resultSet: SearchResultSet) => JSX.Element);\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 /**\n * Optional ability to pass in result item component renderers.\n */\n resultItemComponents?: SearchModalChildrenProps['resultItemComponents'];\n}\n\nconst useStyles = makeStyles(theme => ({\n dialogTitle: {\n gap: theme.spacing(1),\n display: 'grid',\n alignItems: 'center',\n gridTemplateColumns: '1fr auto',\n '&> button': {\n marginTop: theme.spacing(1),\n },\n },\n input: {\n flex: 1,\n },\n button: {\n '&:hover': {\n background: 'none',\n },\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 = ({\n toggleModal,\n resultItemComponents,\n}: SearchModalChildrenProps) => {\n const classes = useStyles();\n const navigate = useNavigate();\n const { transitions } = useTheme();\n const { focusContent } = useContent();\n\n const searchRootRoute = useRouteRef(rootRouteRef)();\n const searchBarRef = useRef<HTMLInputElement | null>(null);\n\n useEffect(() => {\n searchBarRef?.current?.focus();\n });\n\n const handleSearchResultClick = useCallback(() => {\n setTimeout(focusContent, transitions.duration.leavingScreen);\n }, [focusContent, transitions]);\n\n // This handler is called when \"enter\" is pressed\n const handleSearchBarSubmit = useCallback(() => {\n // Using ref to get the current field value without waiting for a query debounce\n const query = searchBarRef.current?.value ?? '';\n navigate(`${searchRootRoute}?query=${query}`);\n handleSearchResultClick();\n }, [navigate, handleSearchResultClick, searchRootRoute]);\n\n return (\n <>\n <DialogTitle>\n <Box className={classes.dialogTitle}>\n <SearchBar\n className={classes.input}\n inputProps={{ ref: searchBarRef }}\n onSubmit={handleSearchBarSubmit}\n />\n\n <IconButton aria-label=\"close\" onClick={toggleModal}>\n <CloseIcon />\n </IconButton>\n </Box>\n </DialogTitle>\n <DialogContent>\n <Grid\n container\n direction=\"row-reverse\"\n justifyContent=\"flex-start\"\n alignItems=\"center\"\n >\n <Grid item>\n <Button\n className={classes.button}\n color=\"primary\"\n endIcon={<ArrowForwardIcon />}\n onClick={handleSearchBarSubmit}\n disableRipple\n >\n View Full Results\n </Button>\n </Grid>\n </Grid>\n <Divider />\n <SearchResult\n onClick={handleSearchResultClick}\n onKeyDown={handleSearchResultClick}\n >\n {resultItemComponents}\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 = (props: SearchModalProps) => {\n const {\n open = true,\n hidden,\n toggleModal,\n children,\n resultItemComponents,\n } = props;\n\n const classes = useStyles();\n\n return (\n <Dialog\n classes={{\n paperFullWidth: classes.paperFullWidth,\n }}\n onClose={toggleModal}\n aria-label=\"Search Modal\"\n aria-modal=\"true\"\n fullWidth\n maxWidth=\"lg\"\n open={open}\n hidden={hidden}\n >\n {open && (\n <SearchContextProvider inheritParentContextIfAvailable>\n {(children &&\n children({\n toggleModal,\n resultItemComponents: resultItemComponents || [],\n })) ?? (\n <Modal\n toggleModal={toggleModal}\n resultItemComponents={resultItemComponents}\n />\n )}\n </SearchContextProvider>\n )}\n </Dialog>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SearchModal.esm.js","sources":["../../../src/components/SearchModal/SearchModal.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 { useContent } from '@backstage/core-components';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport {\n SearchBar,\n SearchContextProvider,\n SearchResult,\n SearchResultPager,\n} from '@backstage/plugin-search-react';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Divider from '@material-ui/core/Divider';\nimport Grid from '@material-ui/core/Grid';\nimport { useTheme } from '@material-ui/core/styles';\nimport Box from '@material-ui/core/Box';\nimport Button from '@material-ui/core/Button';\nimport IconButton from '@material-ui/core/IconButton';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ArrowForwardIcon from '@material-ui/icons/ArrowForward';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { ReactNode, useCallback, useEffect, useRef } from 'react';\nimport { useNavigate } from 'react-router-dom';\n\nimport { rootRouteRef } from '../../plugin';\nimport { SearchResultSet } from '@backstage/plugin-search-common';\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 * Ability to provide custom components to render the result items\n */\n resultItemComponents?:\n | ReactNode\n | ((resultSet: SearchResultSet) => JSX.Element);\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 /**\n * Optional ability to pass in result item component renderers.\n */\n resultItemComponents?: SearchModalChildrenProps['resultItemComponents'];\n}\n\nconst useStyles = makeStyles(theme => ({\n dialogTitle: {\n gap: theme.spacing(1),\n display: 'grid',\n alignItems: 'center',\n gridTemplateColumns: '1fr auto',\n '&> button': {\n marginTop: theme.spacing(1),\n },\n },\n input: {\n flex: 1,\n },\n button: {\n '&:hover': {\n background: 'none',\n },\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 = ({\n toggleModal,\n resultItemComponents,\n}: SearchModalChildrenProps) => {\n const classes = useStyles();\n const navigate = useNavigate();\n const { transitions } = useTheme();\n const { focusContent } = useContent();\n\n const searchRootRoute = useRouteRef(rootRouteRef)();\n const searchBarRef = useRef<HTMLInputElement | null>(null);\n\n useEffect(() => {\n searchBarRef?.current?.focus();\n });\n\n const handleSearchResultClick = useCallback(() => {\n setTimeout(focusContent, transitions.duration.leavingScreen);\n }, [focusContent, transitions]);\n\n // This handler is called when \"enter\" is pressed\n const handleSearchBarSubmit = useCallback(() => {\n // Using ref to get the current field value without waiting for a query debounce\n const query = searchBarRef.current?.value ?? '';\n navigate(`${searchRootRoute}?query=${query}`);\n handleSearchResultClick();\n }, [navigate, handleSearchResultClick, searchRootRoute]);\n\n return (\n <>\n <DialogTitle>\n <Box className={classes.dialogTitle}>\n <SearchBar\n className={classes.input}\n inputProps={{ ref: searchBarRef }}\n onSubmit={handleSearchBarSubmit}\n />\n\n <IconButton aria-label=\"close\" onClick={toggleModal}>\n <CloseIcon />\n </IconButton>\n </Box>\n </DialogTitle>\n <DialogContent>\n <Grid\n container\n direction=\"row-reverse\"\n justifyContent=\"flex-start\"\n alignItems=\"center\"\n >\n <Grid item>\n <Button\n className={classes.button}\n color=\"primary\"\n endIcon={<ArrowForwardIcon />}\n onClick={handleSearchBarSubmit}\n disableRipple\n >\n View Full Results\n </Button>\n </Grid>\n </Grid>\n <Divider />\n <SearchResult\n onClick={handleSearchResultClick}\n onKeyDown={handleSearchResultClick}\n >\n {resultItemComponents}\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 = (props: SearchModalProps) => {\n const {\n open = true,\n hidden,\n toggleModal,\n children,\n resultItemComponents,\n } = props;\n\n const classes = useStyles();\n\n return (\n <Dialog\n classes={{\n paperFullWidth: classes.paperFullWidth,\n }}\n onClose={toggleModal}\n aria-label=\"Search Modal\"\n aria-modal=\"true\"\n fullWidth\n maxWidth=\"lg\"\n open={open}\n hidden={hidden}\n >\n {open && (\n <SearchContextProvider inheritParentContextIfAvailable>\n {(children &&\n children({\n toggleModal,\n resultItemComponents: resultItemComponents || [],\n })) ?? (\n <Modal\n toggleModal={toggleModal}\n resultItemComponents={resultItemComponents}\n />\n )}\n </SearchContextProvider>\n )}\n </Dialog>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useCallback, useContext } from 'react';
|
|
2
3
|
import { useLocation } from 'react-router-dom';
|
|
3
4
|
import { createVersionedContext, createVersionedValueMap } from '@backstage/version-bridge';
|
|
4
5
|
import useUpdateEffect from 'react-use/esm/useUpdateEffect';
|
|
@@ -7,7 +8,7 @@ const SearchModalContext = createVersionedContext("search-modal-context");
|
|
|
7
8
|
const SearchModalProvider = (props) => {
|
|
8
9
|
const value = useSearchModal(props.showInitially);
|
|
9
10
|
const versionedValue = createVersionedValueMap({ 1: value });
|
|
10
|
-
return /* @__PURE__ */
|
|
11
|
+
return /* @__PURE__ */ jsx(SearchModalContext.Provider, { value: versionedValue, children: props.children });
|
|
11
12
|
};
|
|
12
13
|
function useSearchModal(initialState = false) {
|
|
13
14
|
const [state, setState] = useState({
|