@backstage/create-app 0.4.11 → 0.4.15

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.
@@ -2,6 +2,10 @@ import React from 'react';
2
2
  import { makeStyles, Theme, Grid, List, Paper } from '@material-ui/core';
3
3
 
4
4
  import { CatalogResultListItem } from '@backstage/plugin-catalog';
5
+ import {
6
+ catalogApiRef,
7
+ CATALOG_FILTER_EXISTS,
8
+ } from '@backstage/plugin-catalog-react';
5
9
  import { DocsResultListItem } from '@backstage/plugin-techdocs';
6
10
 
7
11
  import {
@@ -10,6 +14,7 @@ import {
10
14
  SearchResult,
11
15
  SearchType,
12
16
  DefaultResultListItem,
17
+ useSearch,
13
18
  } from '@backstage/plugin-search';
14
19
  import {
15
20
  CatalogIcon,
@@ -18,6 +23,7 @@ import {
18
23
  Header,
19
24
  Page,
20
25
  } from '@backstage/core-components';
26
+ import { useApi } from '@backstage/core-plugin-api';
21
27
 
22
28
  const useStyles = makeStyles((theme: Theme) => ({
23
29
  bar: {
@@ -36,6 +42,8 @@ const useStyles = makeStyles((theme: Theme) => ({
36
42
 
37
43
  const SearchPage = () => {
38
44
  const classes = useStyles();
45
+ const { types } = useSearch();
46
+ const catalogApi = useApi(catalogApiRef);
39
47
 
40
48
  return (
41
49
  <Page themeId="home">
@@ -65,13 +73,36 @@ const SearchPage = () => {
65
73
  ]}
66
74
  />
67
75
  <Paper className={classes.filters}>
76
+ {types.includes('techdocs') && (
77
+ <SearchFilter.Select
78
+ className={classes.filter}
79
+ label="Entity"
80
+ name="name"
81
+ values={async () => {
82
+ // Return a list of entities which are documented.
83
+ const { items } = await catalogApi.getEntities({
84
+ fields: ['metadata.name'],
85
+ filter: {
86
+ 'metadata.annotations.backstage.io/techdocs-ref':
87
+ CATALOG_FILTER_EXISTS,
88
+ },
89
+ });
90
+
91
+ const names = items.map(entity => entity.metadata.name);
92
+ names.sort();
93
+ return names;
94
+ }}
95
+ />
96
+ )}
68
97
  <SearchFilter.Select
69
98
  className={classes.filter}
99
+ label="Kind"
70
100
  name="kind"
71
101
  values={['Component', 'Template']}
72
102
  />
73
103
  <SearchFilter.Checkbox
74
104
  className={classes.filter}
105
+ label="Lifecycle"
75
106
  name="lifecycle"
76
107
  values={['experimental', 'production']}
77
108
  />
@@ -23,6 +23,8 @@
23
23
  "@backstage/plugin-app-backend": "^{{version '@backstage/plugin-app-backend'}}",
24
24
  "@backstage/plugin-auth-backend": "^{{version '@backstage/plugin-auth-backend'}}",
25
25
  "@backstage/plugin-catalog-backend": "^{{version '@backstage/plugin-catalog-backend'}}",
26
+ "@backstage/plugin-permission-common": "^{{version '@backstage/plugin-permission-common'}}",
27
+ "@backstage/plugin-permission-node": "^{{version '@backstage/plugin-permission-node'}}",
26
28
  "@backstage/plugin-proxy-backend": "^{{version '@backstage/plugin-proxy-backend'}}",
27
29
  "@backstage/plugin-scaffolder-backend": "^{{version '@backstage/plugin-scaffolder-backend'}}",
28
30
  "@backstage/plugin-search-backend": "^{{version '@backstage/plugin-search-backend'}}",
@@ -29,6 +29,7 @@ import proxy from './plugins/proxy';
29
29
  import techdocs from './plugins/techdocs';
30
30
  import search from './plugins/search';
31
31
  import { PluginEnvironment } from './types';
32
+ import { ServerPermissionClient } from '@backstage/plugin-permission-node';
32
33
 
33
34
  function makeCreateEnv(config: Config) {
34
35
  const root = getRootLogger();
@@ -38,6 +39,10 @@ function makeCreateEnv(config: Config) {
38
39
  const databaseManager = DatabaseManager.fromConfig(config);
39
40
  const tokenManager = ServerTokenManager.noop();
40
41
  const taskScheduler = TaskScheduler.fromConfig(config);
42
+ const permissions = ServerPermissionClient.fromConfig(config, {
43
+ discovery,
44
+ tokenManager,
45
+ });
41
46
 
42
47
  root.info(`Created UrlReader ${reader}`);
43
48
 
@@ -55,6 +60,7 @@ function makeCreateEnv(config: Config) {
55
60
  discovery,
56
61
  tokenManager,
57
62
  scheduler,
63
+ permissions,
58
64
  };
59
65
  };
60
66
  }
@@ -5,10 +5,12 @@ import { PluginEnvironment } from '../types';
5
5
  export default async function createPlugin({
6
6
  logger,
7
7
  config,
8
+ database,
8
9
  }: PluginEnvironment): Promise<Router> {
9
10
  return await createRouter({
10
11
  logger,
11
12
  config,
13
+ database,
12
14
  appPackageName: 'app',
13
15
  });
14
16
  }
@@ -10,6 +10,7 @@ import { DefaultTechDocsCollator } from '@backstage/plugin-techdocs-backend';
10
10
 
11
11
  export default async function createPlugin({
12
12
  logger,
13
+ permissions,
13
14
  discovery,
14
15
  config,
15
16
  tokenManager,
@@ -49,6 +50,9 @@ export default async function createPlugin({
49
50
 
50
51
  return await createRouter({
51
52
  engine: indexBuilder.getSearchEngine(),
53
+ types: indexBuilder.getDocumentTypes(),
54
+ permissions,
55
+ config,
52
56
  logger,
53
57
  });
54
58
  }
@@ -8,6 +8,7 @@ import {
8
8
  UrlReader,
9
9
  } from '@backstage/backend-common';
10
10
  import { PluginTaskScheduler } from '@backstage/backend-tasks';
11
+ import { PermissionAuthorizer } from '@backstage/plugin-permission-common';
11
12
 
12
13
  export type PluginEnvironment = {
13
14
  logger: Logger;
@@ -18,4 +19,5 @@ export type PluginEnvironment = {
18
19
  discovery: PluginEndpointDiscovery;
19
20
  tokenManager: TokenManager;
20
21
  scheduler: PluginTaskScheduler;
22
+ permissions: PermissionAuthorizer;
21
23
  };