diff --git a/frontend/packages/app/package.json b/frontend/packages/app/package.json index 55f747560a..adc216d0b6 100644 --- a/frontend/packages/app/package.json +++ b/frontend/packages/app/package.json @@ -8,6 +8,7 @@ "@backstage/plugin-hello-world": "0.0.0", "@backstage/plugin-home-page": "0.0.0", "@backstage/plugin-login": "0.0.0", + "@backstage/plugin-create-entity": "0.0.0", "@react-workspaces/react-scripts": "^3.3.0-alpha-08", "@testing-library/jest-dom": "^4.2.4", "@testing-library/react": "^9.3.2", diff --git a/frontend/packages/app/src/App.tsx b/frontend/packages/app/src/App.tsx index 9fbbf28dca..e3a03db49f 100644 --- a/frontend/packages/app/src/App.tsx +++ b/frontend/packages/app/src/App.tsx @@ -1,7 +1,12 @@ -import { BackstageTheme, createApp, InfoCard } from '@backstage/core'; -import HomePagePlugin from '@backstage/plugin-home-page'; +import { + BackstageTheme, + createApp, + InfoCard, +} from '@backstage/core'; //import PageHeader from './components/PageHeader'; import { LoginComponent } from '@backstage/plugin-login'; +import HomePagePlugin from '@backstage/plugin-home-page'; +import CreateEntityPlugin from '@backstage/plugin-create-entity'; import { CssBaseline, makeStyles, ThemeProvider } from '@material-ui/core'; import React, { FC } from 'react'; import { BrowserRouter as Router } from 'react-router-dom'; @@ -60,6 +65,7 @@ const app = createApp(); app.registerEntityKind(...entities); app.registerPlugin(HomePagePlugin); +app.registerPlugin(CreateEntityPlugin); const AppComponent = app.build(); diff --git a/frontend/packages/plugins/create-entity/README.md b/frontend/packages/plugins/create-entity/README.md new file mode 100644 index 0000000000..e084431c00 --- /dev/null +++ b/frontend/packages/plugins/create-entity/README.md @@ -0,0 +1 @@ +Welcome to your create-entity plugin! diff --git a/frontend/packages/plugins/create-entity/jest.config.js b/frontend/packages/plugins/create-entity/jest.config.js new file mode 100644 index 0000000000..6b28dacb3d --- /dev/null +++ b/frontend/packages/plugins/create-entity/jest.config.js @@ -0,0 +1,4 @@ +module.exports = { + ...require('@spotify/web-scripts/config/jest.config.js'), + setupFilesAfterEnv: ['../jest.setup.ts'], +}; diff --git a/frontend/packages/plugins/create-entity/jest.setup.ts b/frontend/packages/plugins/create-entity/jest.setup.ts new file mode 100644 index 0000000000..666127af39 --- /dev/null +++ b/frontend/packages/plugins/create-entity/jest.setup.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom/extend-expect'; diff --git a/frontend/packages/plugins/create-entity/package.json b/frontend/packages/plugins/create-entity/package.json new file mode 100644 index 0000000000..ae84cd3472 --- /dev/null +++ b/frontend/packages/plugins/create-entity/package.json @@ -0,0 +1,27 @@ +{ + "name": "@backstage/plugin-create-entity", + "version": "0.0.0", + "main": "src/index.ts", + "main:src": "src/index.ts", + "devDependencies": { + "@backstage/core": "0.0.0", + "@backstage/protobuf-definitions": "0.0.0", + "@spotify/web-scripts": "^6.0.0", + "@testing-library/jest-dom": "^4.2.4", + "@testing-library/react": "^9.3.2", + "@testing-library/user-event": "^7.1.2", + "@types/jest": "^24.0.0", + "@types/node": "^12.0.0", + "@types/react": "^16.9.0", + "@types/react-dom": "^16.9.0", + "react": "^16.12.0", + "react-dom": "^16.12.0", + "@material-ui/core": "^4.9.1", + "@material-ui/icons": "^4.9.1" + }, + "scripts": { + "lint": "web-scripts lint", + "test": "web-scripts test" + }, + "license": "Apache-2.0" +} diff --git a/frontend/packages/plugins/create-entity/src/components/CreateEntityPage/CreateEntityPage.test.tsx b/frontend/packages/plugins/create-entity/src/components/CreateEntityPage/CreateEntityPage.test.tsx new file mode 100644 index 0000000000..6f45cef9cb --- /dev/null +++ b/frontend/packages/plugins/create-entity/src/components/CreateEntityPage/CreateEntityPage.test.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { render } from '@testing-library/react'; +import CreateEntityPage from './CreateEntityPage'; + +describe('CreateEntityPage', () => { + it('should render', () => { + const rendered = render(); + expect(rendered.getByText('Hello!')).toBeInTheDocument(); + }); +}); diff --git a/frontend/packages/plugins/create-entity/src/components/CreateEntityPage/CreateEntityPage.tsx b/frontend/packages/plugins/create-entity/src/components/CreateEntityPage/CreateEntityPage.tsx new file mode 100644 index 0000000000..b273c0fbfe --- /dev/null +++ b/frontend/packages/plugins/create-entity/src/components/CreateEntityPage/CreateEntityPage.tsx @@ -0,0 +1,21 @@ +import React, { FC, Fragment } from 'react'; +import { InfoCard } from '@backstage/core'; +import { IdentityClient, GetUserRequest } from "@backstage/protocol-definitions/generated/identity/v1/identity_pb_service"; + +const client = new IdentityClient("http://localhost:8080"); +const req = new GetUserRequest(); +req.setUsername("johndoe"); +client.getUser(req, (err, user) => { + console.log(err); + console.log(user); +}); + +const CreateEntityPage: FC<{}> = () => { + return ( + + + + ); +}; + +export default CreateEntityPage; diff --git a/frontend/packages/plugins/create-entity/src/components/CreateEntityPage/index.ts b/frontend/packages/plugins/create-entity/src/components/CreateEntityPage/index.ts new file mode 100644 index 0000000000..9593a79ece --- /dev/null +++ b/frontend/packages/plugins/create-entity/src/components/CreateEntityPage/index.ts @@ -0,0 +1 @@ +export { default } from './CreateEntityPage'; diff --git a/frontend/packages/plugins/create-entity/src/index.ts b/frontend/packages/plugins/create-entity/src/index.ts new file mode 100644 index 0000000000..ee7f3893af --- /dev/null +++ b/frontend/packages/plugins/create-entity/src/index.ts @@ -0,0 +1,2 @@ +export { default } from './plugin'; +export { default as CreateEntityPage } from './components/CreateEntityPage'; diff --git a/frontend/packages/plugins/create-entity/src/plugin.test.ts b/frontend/packages/plugins/create-entity/src/plugin.test.ts new file mode 100644 index 0000000000..0f9e9609f4 --- /dev/null +++ b/frontend/packages/plugins/create-entity/src/plugin.test.ts @@ -0,0 +1,7 @@ +import plugin from './plugin'; + +describe('create-entity', () => { + it('should export plugin', () => { + expect(plugin).toBeDefined(); + }); +}); diff --git a/frontend/packages/plugins/create-entity/src/plugin.ts b/frontend/packages/plugins/create-entity/src/plugin.ts new file mode 100644 index 0000000000..5d342bd217 --- /dev/null +++ b/frontend/packages/plugins/create-entity/src/plugin.ts @@ -0,0 +1,9 @@ +import { createPlugin } from '@backstage/core'; +import CreateEntityPage from './components/CreateEntityPage'; + +export default createPlugin({ + id: 'create-entity', + register({ router }) { + router.registerRoute('/create', CreateEntityPage); + }, +}); \ No newline at end of file diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 8873cbc461..a702c57590 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -15730,6 +15730,13 @@ ts-pnp@1.1.5, ts-pnp@^1.1.2: resolved "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.1.5.tgz#840e0739c89fce5f3abd9037bb091dbff16d9dec" integrity sha512-ti7OGMOUOzo66wLF3liskw6YQIaSsBgc4GOAlWRnIEj8htCxJUxskanMUoJOD6MDCRAXo36goXJZch+nOS0VMA== +ts-protoc-gen@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/ts-protoc-gen/-/ts-protoc-gen-0.12.0.tgz#932e5738f14b67e7202825b06f8c548cb7d8ef34" + integrity sha512-V7jnICJxKqalBrnJSMTW5tB9sGi48gOC325bfcM7TDNUItVOlaMM//rQmuo49ybipk/SyJTnWXgtJnhHCevNJw== + dependencies: + google-protobuf "^3.6.1" + tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: version "1.10.0" resolved "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"