diff --git a/plugins/platformsh/package.json b/plugins/platformsh/package.json index c08b6ba..f577a22 100644 --- a/plugins/platformsh/package.json +++ b/plugins/platformsh/package.json @@ -2,9 +2,24 @@ "name": "@axelerant/backstage-plugin-platformsh", "version": "0.1.0", "description": "Backstage frontend plugin for Platform.sh integration!", + "license": "Apache-2.0", + "exports": { + ".": "./src/index.ts", + "./alpha": "./src/alpha.tsx", + "./package.json": "./package.json" + }, "main": "src/index.ts", "types": "src/index.ts", - "license": "Apache-2.0", + "typesVersions": { + "*": { + "alpha": [ + "src/alpha.tsx" + ], + "package.json": [ + "package.json" + ] + } + }, "publishConfig": { "access": "public", "main": "dist/index.esm.js", @@ -43,13 +58,15 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { + "@axelerant/backstage-plugin-platformsh-common": "^0.1.0", "@backstage/catalog-model": "^1.6.0", + "@backstage/core-compat-api": "^0.2.8", "@backstage/core-components": "^0.14.10", "@backstage/core-plugin-api": "^1.9.3", + "@backstage/frontend-plugin-api": "^0.7.0", "@backstage/plugin-catalog-react": "^1.12.3", "@backstage/plugin-permission-react": "^0.4.25", "@backstage/theme": "^0.5.6", - "@axelerant/backstage-plugin-platformsh-common": "^0.1.0", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "^4.0.0-alpha.61", diff --git a/plugins/platformsh/src/alpha.tsx b/plugins/platformsh/src/alpha.tsx new file mode 100644 index 0000000..1efebf5 --- /dev/null +++ b/plugins/platformsh/src/alpha.tsx @@ -0,0 +1,64 @@ +import React from 'react'; +import { + ApiBlueprint, + createApiFactory, + PageBlueprint, + createFrontendPlugin, + discoveryApiRef, + fetchApiRef, +} from '@backstage/frontend-plugin-api'; +import { + compatWrapper, + convertLegacyRouteRef, +} from '@backstage/core-compat-api'; +import { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha'; +import { platformshApiRef, PlatformshClient } from './api'; +import { rootRouteRef } from './routes'; +import { isPlatformshAvailable } from './utils'; + +/** @alpha */ +export const platformshApi = ApiBlueprint.make({ + params: { + factory: createApiFactory({ + api: platformshApiRef, + deps: { + discoveryApi: discoveryApiRef, + fetchApi: fetchApiRef, + }, + factory: ({ discoveryApi, fetchApi }) => + new PlatformshClient(discoveryApi, fetchApi), + }), + }, +}); + +/** @alpha */ +export const platformshPage = PageBlueprint.make({ + params: { + defaultPath: '/platformsh', + routeRef: convertLegacyRouteRef(rootRouteRef), + loader: () => + import('./components/PageComponent').then(m => + compatWrapper(), + ), + }, +}); + +/** @alpha */ +export const platformshEntityContent = EntityContentBlueprint.make({ + name: 'platformsh', + params: { + defaultPath: '/platformsh', + defaultTitle: 'Platformsh', + filter: entity => isPlatformshAvailable(entity), + loader: () => + import('./components/EntityTabComponent').then(m => + compatWrapper(), + ), + }, +}); + +/** @alpha */ +export default createFrontendPlugin({ + id: 'platformsh', + extensions: [platformshApi, platformshPage, platformshEntityContent], +}); diff --git a/yarn.lock b/yarn.lock index 33f8d7a..264b615 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9968,7 +9968,7 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== -"@types/react-dom@*", "@types/react-dom@^18", "@types/react-dom@^18.0.0": +"@types/react-dom@*", "@types/react-dom@^18.0.0": version "18.3.0" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.3.0.tgz#0cbc818755d87066ab6ca74fbedb2547d74a82b0" integrity sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg== @@ -9999,7 +9999,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@^16.13.1 || ^17.0.0", "@types/react@^16.13.1 || ^17.0.0 || ^18.0.0", "@types/react@^18": +"@types/react@*", "@types/react@^16.13.1 || ^17.0.0 || ^18.0.0": version "18.3.5" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.5.tgz#5f524c2ad2089c0ff372bbdabc77ca2c4dbadf8f" integrity sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA== @@ -10007,6 +10007,15 @@ "@types/prop-types" "*" csstype "^3.0.2" +"@types/react@^16.13.1 || ^17.0.0": + version "17.0.81" + resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.81.tgz#4b5bd9dffe2a638dd1547abf73f0451c6a2bd91d" + integrity sha512-So+arrwwUFFWCX/lqv4w8z1glovD1zLE0KVP1z4eFCPU8WE4yTCotHjssKbrcnZ3W5Fcxcsl1vkKTh6k6V+/2A== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "^0.16" + csstype "^3.0.2" + "@types/request@^2.47.1", "@types/request@^2.48.8": version "2.48.12" resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.12.tgz#0f590f615a10f87da18e9790ac94c29ec4c5ef30" @@ -10034,6 +10043,11 @@ resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.2.tgz#ed279a64fa438bb69f2480eda44937912bb7480a" integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow== +"@types/scheduler@^0.16": + version "0.16.8" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" + integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== + "@types/semver@^7.3.12", "@types/semver@^7.5.0": version "7.5.8" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e"