@backstage-community/plugin-bazaar 0.19.1 → 0.21.0
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 +12 -0
- package/dist/api.esm.js +2 -2
- package/dist/api.esm.js.map +1 -1
- package/dist/components/AddProjectDialog/AddProjectDialog.esm.js +5 -5
- package/dist/components/AddProjectDialog/AddProjectDialog.esm.js.map +1 -1
- package/dist/components/EditProjectDialog/EditProjectDialog.esm.js +7 -8
- package/dist/components/EditProjectDialog/EditProjectDialog.esm.js.map +1 -1
- package/dist/components/HomePageBazaarInfoCard/HomePageBazaarInfoCard.esm.js +5 -5
- package/dist/components/HomePageBazaarInfoCard/HomePageBazaarInfoCard.esm.js.map +1 -1
- package/dist/components/LinkProjectDialog/LinkProjectDialog.esm.js +5 -5
- package/dist/components/LinkProjectDialog/LinkProjectDialog.esm.js.map +1 -1
- package/dist/index.d.ts +8 -8
- package/package.json +9 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @backstage-community/plugin-bazaar
|
|
2
2
|
|
|
3
|
+
## 0.21.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- a8871db: Backstage version bump to v1.49.2
|
|
8
|
+
|
|
9
|
+
## 0.20.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- 0d6a0e6: Backstage version bump to v1.48.2
|
|
14
|
+
|
|
3
15
|
## 0.19.1
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/dist/api.esm.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { stringifyEntityRef } from '@backstage/catalog-model';
|
|
2
|
-
import { createApiRef } from '@backstage/
|
|
2
|
+
import { createApiRef } from '@backstage/frontend-plugin-api';
|
|
3
3
|
import { ResponseError } from '@backstage/errors';
|
|
4
4
|
|
|
5
|
-
const bazaarApiRef = createApiRef({
|
|
5
|
+
const bazaarApiRef = createApiRef().with({
|
|
6
6
|
id: "bazaar"
|
|
7
7
|
});
|
|
8
8
|
const isBazaarAvailable = async (entity, context) => {
|
package/dist/api.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.esm.js","sources":["../src/api.ts"],"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 { Entity, stringifyEntityRef } from '@backstage/catalog-model';\nimport {\n ApiHolder,\n createApiRef,\n DiscoveryApi,\n FetchApi,\n IdentityApi,\n} from '@backstage/core-plugin-api';\nimport { ResponseError } from '@backstage/errors';\n\nexport const bazaarApiRef = createApiRef<BazaarApi>({\n id: 'bazaar',\n});\n\nexport interface BazaarApi {\n updateProject(bazaarProject: any): Promise<any>;\n\n addProject(bazaarProject: any): Promise<any>;\n\n getProjectById(id: number): Promise<any>;\n\n getProjectByRef(entityRef: string): Promise<any>;\n\n getMembers(id: number): Promise<any>;\n\n deleteMember(id: number, userId: string): Promise<void>;\n\n addMember(id: number, userId: string): Promise<void>;\n\n getProjects(limit?: number, order?: string): Promise<any>;\n\n deleteProject(id: number): Promise<void>;\n}\n\n/** @public */\nexport const isBazaarAvailable = async (\n entity: Entity,\n context: { apis: ApiHolder },\n): Promise<boolean> => {\n const bazaarClient = context.apis.get(bazaarApiRef);\n if (bazaarClient === undefined) {\n return false;\n }\n const entityRef = stringifyEntityRef({\n kind: entity.kind,\n name: entity.metadata.name,\n namespace: entity.metadata.namespace,\n });\n const response = await bazaarClient.getProjectByRef(entityRef);\n const project = await response.json();\n return project.data.length > 0;\n};\n\nexport class BazaarClient implements BazaarApi {\n private readonly identityApi: IdentityApi;\n private readonly discoveryApi: DiscoveryApi;\n private readonly fetchApi: FetchApi;\n\n constructor(options: {\n identityApi: IdentityApi;\n discoveryApi: DiscoveryApi;\n fetchApi: FetchApi;\n }) {\n this.identityApi = options.identityApi;\n this.discoveryApi = options.discoveryApi;\n this.fetchApi = options.fetchApi;\n }\n\n async updateProject(bazaarProject: any): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('bazaar');\n\n return await this.fetchApi\n .fetch(`${baseUrl}/projects`, {\n method: 'PUT',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(bazaarProject),\n })\n .then(resp => resp.json());\n }\n\n async addProject(bazaarProject: any): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('bazaar');\n\n return await this.fetchApi\n .fetch(`${baseUrl}/projects`, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(bazaarProject),\n })\n .then(resp => resp.json());\n }\n\n async getProjectById(id: number): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('bazaar');\n\n const response = await this.fetchApi.fetch(\n `${baseUrl}/projects/${encodeURIComponent(id)}`,\n );\n\n return response.ok ? response : null;\n }\n\n async getProjectByRef(entityRef: string): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('bazaar');\n\n const response = await this.fetchApi.fetch(\n `${baseUrl}/projects/${encodeURIComponent(entityRef)}`,\n );\n\n return response.ok ? response : null;\n }\n\n async getMembers(id: number): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('bazaar');\n\n return await this.fetchApi\n .fetch(`${baseUrl}/projects/${encodeURIComponent(id)}/members`)\n .then(resp => resp.json());\n }\n\n async addMember(id: number, userId: string): Promise<void> {\n const baseUrl = await this.discoveryApi.getBaseUrl('bazaar');\n const { picture } = await this.identityApi.getProfileInfo();\n\n await this.fetchApi.fetch(\n `${baseUrl}/projects/${encodeURIComponent(\n id,\n )}/member/${encodeURIComponent(userId)}`,\n {\n method: 'PUT',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ picture }),\n },\n );\n }\n\n async deleteMember(id: number, userId: string): Promise<void> {\n const baseUrl = await this.discoveryApi.getBaseUrl('bazaar');\n\n await this.fetchApi.fetch(\n `${baseUrl}/projects/${encodeURIComponent(\n id,\n )}/member/${encodeURIComponent(userId)}`,\n { method: 'DELETE' },\n );\n }\n\n async getProjects(limit?: number, order?: string): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('bazaar');\n const params = {\n ...(limit ? { limit: limit.toString() } : {}),\n ...(order ? { order } : {}),\n };\n const query = new URLSearchParams(params);\n const url = `projects?${query.toString()}`;\n\n const data = await this.fetchApi.fetch(`${baseUrl}/${url}`);\n if (!data.ok) {\n throw await ResponseError.fromResponse(data);\n }\n return data.json();\n }\n\n async deleteProject(id: number): Promise<void> {\n const baseUrl = await this.discoveryApi.getBaseUrl('bazaar');\n\n await this.fetchApi.fetch(`${baseUrl}/projects/${encodeURIComponent(id)}`, {\n method: 'DELETE',\n });\n }\n}\n"],"names":[],"mappings":";;;;AA0BO,MAAM,eAAe,YAAwB,CAAA;AAAA,EAClD,EAAI,EAAA;AACN,CAAC;AAuBY,MAAA,iBAAA,GAAoB,OAC/B,MAAA,EACA,OACqB,KAAA;AACrB,EAAA,MAAM,YAAe,GAAA,OAAA,CAAQ,IAAK,CAAA,GAAA,CAAI,YAAY,CAAA;AAClD,EAAA,IAAI,iBAAiB,KAAW,CAAA,EAAA;AAC9B,IAAO,OAAA,KAAA;AAAA;AAET,EAAA,MAAM,YAAY,kBAAmB,CAAA;AAAA,IACnC,MAAM,MAAO,CAAA,IAAA;AAAA,IACb,IAAA,EAAM,OAAO,QAAS,CAAA,IAAA;AAAA,IACtB,SAAA,EAAW,OAAO,QAAS,CAAA;AAAA,GAC5B,CAAA;AACD,EAAA,MAAM,QAAW,GAAA,MAAM,YAAa,CAAA,eAAA,CAAgB,SAAS,CAAA;AAC7D,EAAM,MAAA,OAAA,GAAU,MAAM,QAAA,CAAS,IAAK,EAAA;AACpC,EAAO,OAAA,OAAA,CAAQ,KAAK,MAAS,GAAA,CAAA;AAC/B;AAEO,MAAM,YAAkC,CAAA;AAAA,EAC5B,WAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EAEjB,YAAY,OAIT,EAAA;AACD,IAAA,IAAA,CAAK,cAAc,OAAQ,CAAA,WAAA;AAC3B,IAAA,IAAA,CAAK,eAAe,OAAQ,CAAA,YAAA;AAC5B,IAAA,IAAA,CAAK,WAAW,OAAQ,CAAA,QAAA;AAAA;AAC1B,EAEA,MAAM,cAAc,aAAkC,EAAA;AACpD,IAAA,MAAM,OAAU,GAAA,MAAM,IAAK,CAAA,YAAA,CAAa,WAAW,QAAQ,CAAA;AAE3D,IAAA,OAAO,MAAM,IAAK,CAAA,QAAA,CACf,KAAM,CAAA,CAAA,EAAG,OAAO,CAAa,SAAA,CAAA,EAAA;AAAA,MAC5B,MAAQ,EAAA,KAAA;AAAA,MACR,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,kBAAA;AAAA,QACR,cAAgB,EAAA;AAAA,OAClB;AAAA,MACA,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,aAAa;AAAA,KACnC,CACA,CAAA,IAAA,CAAK,CAAQ,IAAA,KAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAC7B,EAEA,MAAM,WAAW,aAAkC,EAAA;AACjD,IAAA,MAAM,OAAU,GAAA,MAAM,IAAK,CAAA,YAAA,CAAa,WAAW,QAAQ,CAAA;AAE3D,IAAA,OAAO,MAAM,IAAK,CAAA,QAAA,CACf,KAAM,CAAA,CAAA,EAAG,OAAO,CAAa,SAAA,CAAA,EAAA;AAAA,MAC5B,MAAQ,EAAA,MAAA;AAAA,MACR,OAAS,EAAA;AAAA,QACP,MAAQ,EAAA,kBAAA;AAAA,QACR,cAAgB,EAAA;AAAA,OAClB;AAAA,MACA,IAAA,EAAM,IAAK,CAAA,SAAA,CAAU,aAAa;AAAA,KACnC,CACA,CAAA,IAAA,CAAK,CAAQ,IAAA,KAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAC7B,EAEA,MAAM,eAAe,EAA0B,EAAA;AAC7C,IAAA,MAAM,OAAU,GAAA,MAAM,IAAK,CAAA,YAAA,CAAa,WAAW,QAAQ,CAAA;AAE3D,IAAM,MAAA,QAAA,GAAW,MAAM,IAAA,CAAK,QAAS,CAAA,KAAA;AAAA,MACnC,CAAG,EAAA,OAAO,CAAa,UAAA,EAAA,kBAAA,CAAmB,EAAE,CAAC,CAAA;AAAA,KAC/C;AAEA,IAAO,OAAA,QAAA,CAAS,KAAK,QAAW,GAAA,IAAA;AAAA;AAClC,EAEA,MAAM,gBAAgB,SAAiC,EAAA;AACrD,IAAA,MAAM,OAAU,GAAA,MAAM,IAAK,CAAA,YAAA,CAAa,WAAW,QAAQ,CAAA;AAE3D,IAAM,MAAA,QAAA,GAAW,MAAM,IAAA,CAAK,QAAS,CAAA,KAAA;AAAA,MACnC,CAAG,EAAA,OAAO,CAAa,UAAA,EAAA,kBAAA,CAAmB,SAAS,CAAC,CAAA;AAAA,KACtD;AAEA,IAAO,OAAA,QAAA,CAAS,KAAK,QAAW,GAAA,IAAA;AAAA;AAClC,EAEA,MAAM,WAAW,EAA0B,EAAA;AACzC,IAAA,MAAM,OAAU,GAAA,MAAM,IAAK,CAAA,YAAA,CAAa,WAAW,QAAQ,CAAA;AAE3D,IAAA,OAAO,MAAM,IAAK,CAAA,QAAA,CACf,KAAM,CAAA,CAAA,EAAG,OAAO,CAAa,UAAA,EAAA,kBAAA,CAAmB,EAAE,CAAC,UAAU,CAC7D,CAAA,IAAA,CAAK,CAAQ,IAAA,KAAA,IAAA,CAAK,MAAM,CAAA;AAAA;AAC7B,EAEA,MAAM,SAAU,CAAA,EAAA,EAAY,MAA+B,EAAA;AACzD,IAAA,MAAM,OAAU,GAAA,MAAM,IAAK,CAAA,YAAA,CAAa,WAAW,QAAQ,CAAA;AAC3D,IAAA,MAAM,EAAE,OAAQ,EAAA,GAAI,MAAM,IAAA,CAAK,YAAY,cAAe,EAAA;AAE1D,IAAA,MAAM,KAAK,QAAS,CAAA,KAAA;AAAA,MAClB,CAAA,EAAG,OAAO,CAAa,UAAA,EAAA,kBAAA;AAAA,QACrB;AAAA,OACD,CAAA,QAAA,EAAW,kBAAmB,CAAA,MAAM,CAAC,CAAA,CAAA;AAAA,MACtC;AAAA,QACE,MAAQ,EAAA,KAAA;AAAA,QACR,OAAS,EAAA;AAAA,UACP,MAAQ,EAAA,kBAAA;AAAA,UACR,cAAgB,EAAA;AAAA,SAClB;AAAA,QACA,IAAM,EAAA,IAAA,CAAK,SAAU,CAAA,EAAE,SAAS;AAAA;AAClC,KACF;AAAA;AACF,EAEA,MAAM,YAAa,CAAA,EAAA,EAAY,MAA+B,EAAA;AAC5D,IAAA,MAAM,OAAU,GAAA,MAAM,IAAK,CAAA,YAAA,CAAa,WAAW,QAAQ,CAAA;AAE3D,IAAA,MAAM,KAAK,QAAS,CAAA,KAAA;AAAA,MAClB,CAAA,EAAG,OAAO,CAAa,UAAA,EAAA,kBAAA;AAAA,QACrB;AAAA,OACD,CAAA,QAAA,EAAW,kBAAmB,CAAA,MAAM,CAAC,CAAA,CAAA;AAAA,MACtC,EAAE,QAAQ,QAAS;AAAA,KACrB;AAAA;AACF,EAEA,MAAM,WAAY,CAAA,KAAA,EAAgB,KAA8B,EAAA;AAC9D,IAAA,MAAM,OAAU,GAAA,MAAM,IAAK,CAAA,YAAA,CAAa,WAAW,QAAQ,CAAA;AAC3D,IAAA,MAAM,MAAS,GAAA;AAAA,MACb,GAAI,QAAQ,EAAE,KAAA,EAAO,MAAM,QAAS,EAAA,KAAM,EAAC;AAAA,MAC3C,GAAI,KAAA,GAAQ,EAAE,KAAA,KAAU;AAAC,KAC3B;AACA,IAAM,MAAA,KAAA,GAAQ,IAAI,eAAA,CAAgB,MAAM,CAAA;AACxC,IAAA,MAAM,GAAM,GAAA,CAAA,SAAA,EAAY,KAAM,CAAA,QAAA,EAAU,CAAA,CAAA;AAExC,IAAM,MAAA,IAAA,GAAO,MAAM,IAAK,CAAA,QAAA,CAAS,MAAM,CAAG,EAAA,OAAO,CAAI,CAAA,EAAA,GAAG,CAAE,CAAA,CAAA;AAC1D,IAAI,IAAA,CAAC,KAAK,EAAI,EAAA;AACZ,MAAM,MAAA,MAAM,aAAc,CAAA,YAAA,CAAa,IAAI,CAAA;AAAA;AAE7C,IAAA,OAAO,KAAK,IAAK,EAAA;AAAA;AACnB,EAEA,MAAM,cAAc,EAA2B,EAAA;AAC7C,IAAA,MAAM,OAAU,GAAA,MAAM,IAAK,CAAA,YAAA,CAAa,WAAW,QAAQ,CAAA;AAE3D,IAAM,MAAA,IAAA,CAAK,SAAS,KAAM,CAAA,CAAA,EAAG,OAAO,CAAa,UAAA,EAAA,kBAAA,CAAmB,EAAE,CAAC,CAAI,CAAA,EAAA;AAAA,MACzE,MAAQ,EAAA;AAAA,KACT,CAAA;AAAA;AAEL;;;;"}
|
|
1
|
+
{"version":3,"file":"api.esm.js","sources":["../src/api.ts"],"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 { Entity, stringifyEntityRef } from '@backstage/catalog-model';\nimport {\n ApiHolder,\n DiscoveryApi,\n FetchApi,\n IdentityApi,\n} from '@backstage/core-plugin-api';\nimport { createApiRef } from '@backstage/frontend-plugin-api';\nimport { ResponseError } from '@backstage/errors';\n\nexport const bazaarApiRef = createApiRef<BazaarApi>().with({\n id: 'bazaar',\n});\n\nexport interface BazaarApi {\n updateProject(bazaarProject: any): Promise<any>;\n\n addProject(bazaarProject: any): Promise<any>;\n\n getProjectById(id: number): Promise<any>;\n\n getProjectByRef(entityRef: string): Promise<any>;\n\n getMembers(id: number): Promise<any>;\n\n deleteMember(id: number, userId: string): Promise<void>;\n\n addMember(id: number, userId: string): Promise<void>;\n\n getProjects(limit?: number, order?: string): Promise<any>;\n\n deleteProject(id: number): Promise<void>;\n}\n\n/** @public */\nexport const isBazaarAvailable = async (\n entity: Entity,\n context: { apis: ApiHolder },\n): Promise<boolean> => {\n const bazaarClient = context.apis.get(bazaarApiRef);\n if (bazaarClient === undefined) {\n return false;\n }\n const entityRef = stringifyEntityRef({\n kind: entity.kind,\n name: entity.metadata.name,\n namespace: entity.metadata.namespace,\n });\n const response = await bazaarClient.getProjectByRef(entityRef);\n const project = await response.json();\n return project.data.length > 0;\n};\n\nexport class BazaarClient implements BazaarApi {\n private readonly identityApi: IdentityApi;\n private readonly discoveryApi: DiscoveryApi;\n private readonly fetchApi: FetchApi;\n\n constructor(options: {\n identityApi: IdentityApi;\n discoveryApi: DiscoveryApi;\n fetchApi: FetchApi;\n }) {\n this.identityApi = options.identityApi;\n this.discoveryApi = options.discoveryApi;\n this.fetchApi = options.fetchApi;\n }\n\n async updateProject(bazaarProject: any): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('bazaar');\n\n return await this.fetchApi\n .fetch(`${baseUrl}/projects`, {\n method: 'PUT',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(bazaarProject),\n })\n .then(resp => resp.json());\n }\n\n async addProject(bazaarProject: any): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('bazaar');\n\n return await this.fetchApi\n .fetch(`${baseUrl}/projects`, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(bazaarProject),\n })\n .then(resp => resp.json());\n }\n\n async getProjectById(id: number): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('bazaar');\n\n const response = await this.fetchApi.fetch(\n `${baseUrl}/projects/${encodeURIComponent(id)}`,\n );\n\n return response.ok ? response : null;\n }\n\n async getProjectByRef(entityRef: string): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('bazaar');\n\n const response = await this.fetchApi.fetch(\n `${baseUrl}/projects/${encodeURIComponent(entityRef)}`,\n );\n\n return response.ok ? response : null;\n }\n\n async getMembers(id: number): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('bazaar');\n\n return await this.fetchApi\n .fetch(`${baseUrl}/projects/${encodeURIComponent(id)}/members`)\n .then(resp => resp.json());\n }\n\n async addMember(id: number, userId: string): Promise<void> {\n const baseUrl = await this.discoveryApi.getBaseUrl('bazaar');\n const { picture } = await this.identityApi.getProfileInfo();\n\n await this.fetchApi.fetch(\n `${baseUrl}/projects/${encodeURIComponent(\n id,\n )}/member/${encodeURIComponent(userId)}`,\n {\n method: 'PUT',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ picture }),\n },\n );\n }\n\n async deleteMember(id: number, userId: string): Promise<void> {\n const baseUrl = await this.discoveryApi.getBaseUrl('bazaar');\n\n await this.fetchApi.fetch(\n `${baseUrl}/projects/${encodeURIComponent(\n id,\n )}/member/${encodeURIComponent(userId)}`,\n { method: 'DELETE' },\n );\n }\n\n async getProjects(limit?: number, order?: string): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('bazaar');\n const params = {\n ...(limit ? { limit: limit.toString() } : {}),\n ...(order ? { order } : {}),\n };\n const query = new URLSearchParams(params);\n const url = `projects?${query.toString()}`;\n\n const data = await this.fetchApi.fetch(`${baseUrl}/${url}`);\n if (!data.ok) {\n throw await ResponseError.fromResponse(data);\n }\n return data.json();\n }\n\n async deleteProject(id: number): Promise<void> {\n const baseUrl = await this.discoveryApi.getBaseUrl('bazaar');\n\n await this.fetchApi.fetch(`${baseUrl}/projects/${encodeURIComponent(id)}`, {\n method: 'DELETE',\n });\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useState } from 'react';
|
|
3
3
|
import { stringifyEntityRef } from '@backstage/catalog-model';
|
|
4
|
-
import { useApi
|
|
4
|
+
import { useApi } from '@backstage/core-plugin-api';
|
|
5
|
+
import { toastApiRef } from '@backstage/frontend-plugin-api';
|
|
5
6
|
import { ProjectDialog } from '../ProjectDialog/ProjectDialog.esm.js';
|
|
6
7
|
import { ProjectSelector } from '../ProjectSelector/ProjectSelector.esm.js';
|
|
7
8
|
import { bazaarApiRef } from '../../api.esm.js';
|
|
@@ -14,7 +15,7 @@ const AddProjectDialog = ({
|
|
|
14
15
|
fetchCatalogEntities
|
|
15
16
|
}) => {
|
|
16
17
|
const bazaarApi = useApi(bazaarApiRef);
|
|
17
|
-
const alertApi = useApi(
|
|
18
|
+
const alertApi = useApi(toastApiRef);
|
|
18
19
|
const [selectedEntity, setSelectedEntity] = useState(null);
|
|
19
20
|
const defaultValues = {
|
|
20
21
|
title: "",
|
|
@@ -42,9 +43,8 @@ const AddProjectDialog = ({
|
|
|
42
43
|
fetchBazaarProjects();
|
|
43
44
|
fetchCatalogEntities();
|
|
44
45
|
alertApi.post({
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
display: "transient"
|
|
46
|
+
title: `Added project '${formValues.title}' to the Bazaar list`,
|
|
47
|
+
status: "success"
|
|
48
48
|
});
|
|
49
49
|
}
|
|
50
50
|
handleClose();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddProjectDialog.esm.js","sources":["../../../src/components/AddProjectDialog/AddProjectDialog.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 { useState } from 'react';\nimport { Entity, stringifyEntityRef } from '@backstage/catalog-model';\nimport { UseFormReset, UseFormGetValues } from 'react-hook-form';\nimport { useApi
|
|
1
|
+
{"version":3,"file":"AddProjectDialog.esm.js","sources":["../../../src/components/AddProjectDialog/AddProjectDialog.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 { useState } from 'react';\nimport { Entity, stringifyEntityRef } from '@backstage/catalog-model';\nimport { UseFormReset, UseFormGetValues } from 'react-hook-form';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { toastApiRef } from '@backstage/frontend-plugin-api';\nimport { ProjectDialog } from '../ProjectDialog';\nimport { ProjectSelector } from '../ProjectSelector';\nimport { BazaarProject, FormValues, Size, Status } from '../../types';\nimport { bazaarApiRef } from '../../api';\n\ntype Props = {\n catalogEntities: Entity[];\n open: boolean;\n handleClose: () => void;\n fetchBazaarProjects: () => Promise<BazaarProject[]>;\n fetchCatalogEntities: () => Promise<Entity[]>;\n};\n\nexport const AddProjectDialog = ({\n catalogEntities,\n open,\n handleClose,\n fetchBazaarProjects,\n fetchCatalogEntities,\n}: Props) => {\n const bazaarApi = useApi(bazaarApiRef);\n const alertApi = useApi(toastApiRef);\n const [selectedEntity, setSelectedEntity] = useState<Entity | null>(null);\n\n const defaultValues = {\n title: '',\n community: '',\n description: '',\n docs: '',\n status: 'proposed' as Status,\n size: 'medium' as Size,\n responsible: '',\n startDate: null,\n endDate: null,\n };\n\n const handleEntityClick = (entity: Entity) => {\n setSelectedEntity(entity);\n };\n\n const handleSubmit: (\n getValues: UseFormGetValues<FormValues>,\n reset: UseFormReset<FormValues>,\n ) => Promise<void> = async (\n getValues: UseFormGetValues<FormValues>,\n reset: UseFormReset<FormValues>,\n ) => {\n const formValues = getValues();\n\n const response = await bazaarApi.addProject({\n ...formValues,\n entityRef: selectedEntity ? stringifyEntityRef(selectedEntity) : null,\n startDate: formValues.startDate ?? null,\n endDate: formValues.endDate ?? null,\n } as BazaarProject);\n\n if (response.status === 'ok') {\n fetchBazaarProjects();\n fetchCatalogEntities();\n alertApi.post({\n title: `Added project '${formValues.title}' to the Bazaar list`,\n status: 'success',\n });\n }\n\n handleClose();\n reset(defaultValues);\n };\n\n return (\n <ProjectDialog\n handleSave={handleSubmit}\n title=\"Add project\"\n isAddForm\n defaultValues={defaultValues}\n open={open}\n projectSelector={\n <ProjectSelector\n onChange={handleEntityClick}\n catalogEntities={catalogEntities || []}\n disableClearable={false}\n defaultValue={null}\n label=\"Select a project\"\n />\n }\n handleClose={handleClose}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAkCO,MAAM,mBAAmB,CAAC;AAAA,EAC/B,eAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAa,KAAA;AACX,EAAM,MAAA,SAAA,GAAY,OAAO,YAAY,CAAA;AACrC,EAAM,MAAA,QAAA,GAAW,OAAO,WAAW,CAAA;AACnC,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAwB,IAAI,CAAA;AAExE,EAAA,MAAM,aAAgB,GAAA;AAAA,IACpB,KAAO,EAAA,EAAA;AAAA,IACP,SAAW,EAAA,EAAA;AAAA,IACX,WAAa,EAAA,EAAA;AAAA,IACb,IAAM,EAAA,EAAA;AAAA,IACN,MAAQ,EAAA,UAAA;AAAA,IACR,IAAM,EAAA,QAAA;AAAA,IACN,WAAa,EAAA,EAAA;AAAA,IACb,SAAW,EAAA,IAAA;AAAA,IACX,OAAS,EAAA;AAAA,GACX;AAEA,EAAM,MAAA,iBAAA,GAAoB,CAAC,MAAmB,KAAA;AAC5C,IAAA,iBAAA,CAAkB,MAAM,CAAA;AAAA,GAC1B;AAEA,EAAM,MAAA,YAAA,GAGe,OACnB,SAAA,EACA,KACG,KAAA;AACH,IAAA,MAAM,aAAa,SAAU,EAAA;AAE7B,IAAM,MAAA,QAAA,GAAW,MAAM,SAAA,CAAU,UAAW,CAAA;AAAA,MAC1C,GAAG,UAAA;AAAA,MACH,SAAW,EAAA,cAAA,GAAiB,kBAAmB,CAAA,cAAc,CAAI,GAAA,IAAA;AAAA,MACjE,SAAA,EAAW,WAAW,SAAa,IAAA,IAAA;AAAA,MACnC,OAAA,EAAS,WAAW,OAAW,IAAA;AAAA,KACf,CAAA;AAElB,IAAI,IAAA,QAAA,CAAS,WAAW,IAAM,EAAA;AAC5B,MAAoB,mBAAA,EAAA;AACpB,MAAqB,oBAAA,EAAA;AACrB,MAAA,QAAA,CAAS,IAAK,CAAA;AAAA,QACZ,KAAA,EAAO,CAAkB,eAAA,EAAA,UAAA,CAAW,KAAK,CAAA,oBAAA,CAAA;AAAA,QACzC,MAAQ,EAAA;AAAA,OACT,CAAA;AAAA;AAGH,IAAY,WAAA,EAAA;AACZ,IAAA,KAAA,CAAM,aAAa,CAAA;AAAA,GACrB;AAEA,EACE,uBAAA,GAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,UAAY,EAAA,YAAA;AAAA,MACZ,KAAM,EAAA,aAAA;AAAA,MACN,SAAS,EAAA,IAAA;AAAA,MACT,aAAA;AAAA,MACA,IAAA;AAAA,MACA,eACE,kBAAA,GAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACC,QAAU,EAAA,iBAAA;AAAA,UACV,eAAA,EAAiB,mBAAmB,EAAC;AAAA,UACrC,gBAAkB,EAAA,KAAA;AAAA,UAClB,YAAc,EAAA,IAAA;AAAA,UACd,KAAM,EAAA;AAAA;AAAA,OACR;AAAA,MAEF;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useState, useEffect } from 'react';
|
|
3
|
-
import { useApi
|
|
3
|
+
import { useApi } from '@backstage/core-plugin-api';
|
|
4
|
+
import { toastApiRef } from '@backstage/frontend-plugin-api';
|
|
4
5
|
import { ProjectDialog } from '../ProjectDialog/ProjectDialog.esm.js';
|
|
5
6
|
import { bazaarApiRef } from '../../api.esm.js';
|
|
6
7
|
import { ConfirmationDialog } from '../ConfirmationDialog/ConfirmationDialog.esm.js';
|
|
@@ -27,7 +28,7 @@ const EditProjectDialog = ({
|
|
|
27
28
|
}) => {
|
|
28
29
|
const classes = useStyles();
|
|
29
30
|
const bazaarApi = useApi(bazaarApiRef);
|
|
30
|
-
const alertApi = useApi(
|
|
31
|
+
const alertApi = useApi(toastApiRef);
|
|
31
32
|
const [openDelete, setOpenDelete] = useState(false);
|
|
32
33
|
const [defaultValues, setDefaultValues] = useState({
|
|
33
34
|
...bazaarProject,
|
|
@@ -44,9 +45,8 @@ const EditProjectDialog = ({
|
|
|
44
45
|
handleDeleteClose();
|
|
45
46
|
fetchBazaarProject();
|
|
46
47
|
alertApi.post({
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
display: "transient"
|
|
48
|
+
title: `Deleted project '${bazaarProject.title}' from the Bazaar list`,
|
|
49
|
+
status: "success"
|
|
50
50
|
});
|
|
51
51
|
};
|
|
52
52
|
useEffect(() => {
|
|
@@ -69,9 +69,8 @@ const EditProjectDialog = ({
|
|
|
69
69
|
if (updateResponse.status === "ok") fetchBazaarProject();
|
|
70
70
|
handleEditClose();
|
|
71
71
|
alertApi.post({
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
display: "transient"
|
|
72
|
+
title: `Updated project '${formValues.title}' in the Bazaar list`,
|
|
73
|
+
status: "success"
|
|
75
74
|
});
|
|
76
75
|
};
|
|
77
76
|
return /* @__PURE__ */ jsxs("div", { children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditProjectDialog.esm.js","sources":["../../../src/components/EditProjectDialog/EditProjectDialog.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 { useState, useEffect } from 'react';\nimport { useApi
|
|
1
|
+
{"version":3,"file":"EditProjectDialog.esm.js","sources":["../../../src/components/EditProjectDialog/EditProjectDialog.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 { useState, useEffect } from 'react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { toastApiRef } from '@backstage/frontend-plugin-api';\nimport { ProjectDialog } from '../ProjectDialog';\nimport { BazaarProject, FormValues } from '../../types';\nimport { bazaarApiRef } from '../../api';\nimport { UseFormGetValues } from 'react-hook-form';\nimport { ConfirmationDialog } from '../ConfirmationDialog';\nimport Button from '@material-ui/core/Button';\nimport { makeStyles } from '@material-ui/core/styles';\n\ntype Props = {\n bazaarProject: BazaarProject;\n openEdit: boolean;\n handleEditClose: () => void;\n handleCardClose?: () => void;\n fetchBazaarProject: () => Promise<BazaarProject | null>;\n};\n\nconst useStyles = makeStyles({\n button: {\n marginLeft: '0',\n marginRight: 'auto',\n },\n wordBreak: {\n wordBreak: 'break-all',\n whiteSpace: 'normal',\n margin: '-0.25rem 0',\n },\n});\n\nexport const EditProjectDialog = ({\n bazaarProject,\n openEdit,\n handleEditClose,\n handleCardClose,\n fetchBazaarProject,\n}: Props) => {\n const classes = useStyles();\n const bazaarApi = useApi(bazaarApiRef);\n const alertApi = useApi(toastApiRef);\n const [openDelete, setOpenDelete] = useState(false);\n const [defaultValues, setDefaultValues] = useState<FormValues>({\n ...bazaarProject,\n startDate: bazaarProject.startDate ?? null,\n endDate: bazaarProject.endDate ?? null,\n });\n\n const handleDeleteClose = () => {\n setOpenDelete(false);\n handleEditClose();\n\n if (handleCardClose) handleCardClose();\n };\n\n const handleDeleteSubmit = async () => {\n await bazaarApi.deleteProject(bazaarProject.id);\n\n handleDeleteClose();\n fetchBazaarProject();\n alertApi.post({\n title: `Deleted project '${bazaarProject.title}' from the Bazaar list`,\n status: 'success',\n });\n };\n\n useEffect(() => {\n setDefaultValues({\n ...bazaarProject,\n startDate: bazaarProject.startDate ?? null,\n endDate: bazaarProject.endDate ?? null,\n });\n }, [bazaarProject]);\n\n const handleEditSubmit: (\n getValues: UseFormGetValues<FormValues>,\n ) => Promise<void> = async (getValues: UseFormGetValues<FormValues>) => {\n const formValues = getValues();\n\n const updateResponse = await bazaarApi.updateProject({\n ...formValues,\n id: bazaarProject.id,\n entityRef: bazaarProject.entityRef,\n membersCount: bazaarProject.membersCount,\n startDate: formValues?.startDate ?? null,\n endDate: formValues?.endDate ?? null,\n });\n\n if (updateResponse.status === 'ok') fetchBazaarProject();\n handleEditClose();\n alertApi.post({\n title: `Updated project '${formValues.title}' in the Bazaar list`,\n status: 'success',\n });\n };\n\n return (\n <div>\n <ConfirmationDialog\n open={openDelete}\n handleClose={handleDeleteClose}\n message={[\n 'Are you sure you want to delete ',\n <b key={bazaarProject.id} className={classes.wordBreak}>\n {bazaarProject.title}\n </b>,\n ' from the Bazaar?',\n ]}\n type=\"delete\"\n handleSubmit={handleDeleteSubmit}\n />\n\n <ProjectDialog\n title=\"Edit project\"\n handleSave={handleEditSubmit}\n isAddForm={false}\n defaultValues={defaultValues}\n open={openEdit}\n handleClose={handleEditClose}\n deleteButton={\n <Button\n color=\"primary\"\n type=\"submit\"\n className={classes.button}\n onClick={() => {\n setOpenDelete(true);\n }}\n >\n Delete project\n </Button>\n }\n />\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,8 @@ import LinkOffIcon from '@material-ui/icons/LinkOff';
|
|
|
17
17
|
import Description from '@material-ui/icons/Description';
|
|
18
18
|
import { EditProjectDialog } from '../EditProjectDialog/EditProjectDialog.esm.js';
|
|
19
19
|
import ExitToAppIcon from '@material-ui/icons/ExitToApp';
|
|
20
|
-
import { useRouteRef, useApi, identityApiRef
|
|
20
|
+
import { useRouteRef, useApi, identityApiRef } from '@backstage/core-plugin-api';
|
|
21
|
+
import { toastApiRef } from '@backstage/frontend-plugin-api';
|
|
21
22
|
import { bazaarApiRef } from '../../api.esm.js';
|
|
22
23
|
import Alert from '@material-ui/lab/Alert';
|
|
23
24
|
import useAsyncFn from 'react-use/esm/useAsyncFn';
|
|
@@ -45,7 +46,7 @@ const HomePageBazaarInfoCard = ({
|
|
|
45
46
|
const entityLink = useRouteRef(entityRouteRef);
|
|
46
47
|
const bazaarApi = useApi(bazaarApiRef);
|
|
47
48
|
const identity = useApi(identityApiRef);
|
|
48
|
-
const alertApi = useApi(
|
|
49
|
+
const alertApi = useApi(toastApiRef);
|
|
49
50
|
const catalogApi = useApi(catalogApiRef);
|
|
50
51
|
const [openEdit, setOpenEdit] = useState(false);
|
|
51
52
|
const [openProjectSelector, setOpenProjectSelector] = useState(false);
|
|
@@ -152,9 +153,8 @@ const HomePageBazaarInfoCard = ({
|
|
|
152
153
|
setOpenUnlink(false);
|
|
153
154
|
fetchBazaarProject();
|
|
154
155
|
alertApi.post({
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
display: "transient"
|
|
156
|
+
title: `Unlinked entity '${parseEntityRef(bazaarProject.value?.entityRef).name}' from the project ${bazaarProject.value?.title}`,
|
|
157
|
+
status: "success"
|
|
158
158
|
});
|
|
159
159
|
}
|
|
160
160
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HomePageBazaarInfoCard.esm.js","sources":["../../../src/components/HomePageBazaarInfoCard/HomePageBazaarInfoCard.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 { useState, useEffect } from 'react';\nimport Card from '@material-ui/core/Card';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport Divider from '@material-ui/core/Divider';\nimport IconButton from '@material-ui/core/IconButton';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport {\n HeaderIconLinkRow,\n IconLinkVerticalProps,\n} from '@backstage/core-components';\nimport EditIcon from '@material-ui/icons/Edit';\nimport ChatIcon from '@material-ui/icons/Chat';\nimport PersonAddIcon from '@material-ui/icons/PersonAdd';\nimport InsertLinkIcon from '@material-ui/icons/InsertLink';\nimport DashboardIcon from '@material-ui/icons/Dashboard';\nimport CloseIcon from '@material-ui/icons/Close';\nimport LinkOffIcon from '@material-ui/icons/LinkOff';\nimport Description from '@material-ui/icons/Description';\nimport { EditProjectDialog } from '../EditProjectDialog';\nimport ExitToAppIcon from '@material-ui/icons/ExitToApp';\nimport {\n useApi,\n identityApiRef,\n useRouteRef,\n alertApiRef,\n} from '@backstage/core-plugin-api';\nimport { Member, BazaarProject } from '../../types';\nimport { bazaarApiRef } from '../../api';\nimport Alert from '@material-ui/lab/Alert';\nimport useAsyncFn from 'react-use/esm/useAsyncFn';\nimport { catalogApiRef, entityRouteRef } from '@backstage/plugin-catalog-react';\n\nimport {\n stringifyEntityRef,\n Entity,\n parseEntityRef,\n} from '@backstage/catalog-model';\n\nimport { ConfirmationDialog } from '../ConfirmationDialog/ConfirmationDialog';\nimport { CardContentFields } from '../CardContentFields/CardContentFields';\nimport { LinkProjectDialog } from '../LinkProjectDialog';\nimport {\n fetchCatalogItems,\n fetchProjectMembers,\n} from '../../util/fetchMethods';\nimport { parseBazaarResponse } from '../../util/parseMethods';\n\nconst useStyles = makeStyles({\n wordBreak: {\n wordBreak: 'break-all',\n whiteSpace: 'normal',\n margin: '-0.25rem 0',\n },\n});\n\ntype Props = {\n initProject: BazaarProject;\n handleClose: () => void;\n initEntity: Entity;\n};\n\nexport const HomePageBazaarInfoCard = ({\n initProject,\n handleClose,\n initEntity,\n}: Props) => {\n const classes = useStyles();\n const entityLink = useRouteRef(entityRouteRef);\n const bazaarApi = useApi(bazaarApiRef);\n const identity = useApi(identityApiRef);\n const alertApi = useApi(alertApiRef);\n const catalogApi = useApi(catalogApiRef);\n const [openEdit, setOpenEdit] = useState(false);\n const [openProjectSelector, setOpenProjectSelector] = useState(false);\n const [openUnlink, setOpenUnlink] = useState(false);\n const [isMember, setIsMember] = useState(false);\n\n const [catalogEntities, fetchCatalogEntities] = useAsyncFn(async () => {\n const entities = await fetchCatalogItems(catalogApi);\n const bazaarProjects = await bazaarApi.getProjects();\n const bazaarLinkedRefs: string[] = bazaarProjects.data\n .filter((entity: any) => entity.entity_ref !== null)\n .map((entity: any) => entity.entity_ref);\n\n return entities.filter(\n (entity: Entity) =>\n !bazaarLinkedRefs.includes(stringifyEntityRef(entity)),\n );\n });\n\n const [bazaarProject, fetchBazaarProject] = useAsyncFn(async () => {\n const response = await bazaarApi.getProjectById(initProject.id);\n return await parseBazaarResponse(response);\n });\n\n const [members, fetchMembers] = useAsyncFn(async () => {\n return fetchProjectMembers(bazaarApi, bazaarProject.value ?? initProject);\n });\n\n const [userId, fetchUserId] = useAsyncFn(async () => {\n return await (\n await identity.getProfileInfo()\n ).displayName;\n });\n\n useEffect(() => {\n fetchMembers();\n fetchBazaarProject();\n fetchCatalogEntities();\n fetchUserId();\n }, [fetchMembers, fetchBazaarProject, fetchCatalogEntities, fetchUserId]);\n\n useEffect(() => {\n if (members.value && userId.value) {\n setIsMember(\n members.value\n ?.map((member: Member) => member.userId)\n .indexOf(userId.value) >= 0,\n );\n }\n }, [bazaarProject.value, members, identity, userId.value]);\n\n const handleMembersClick = async () => {\n if (userId.value) {\n if (!isMember) {\n await bazaarApi.addMember(bazaarProject.value!.id, userId.value);\n } else {\n await bazaarApi.deleteMember(bazaarProject.value!.id, userId.value);\n }\n setIsMember(!isMember);\n fetchMembers();\n }\n };\n\n const getEntityPageLink = () => {\n if (bazaarProject?.value?.entityRef) {\n const { name, kind, namespace } = parseEntityRef(\n bazaarProject.value.entityRef,\n );\n return entityLink({ kind, namespace, name });\n }\n return '';\n };\n\n const handleLink = () => {\n if (bazaarProject.value?.entityRef) {\n setOpenUnlink(true);\n } else {\n fetchCatalogEntities();\n setOpenProjectSelector(true);\n }\n };\n\n const links: IconLinkVerticalProps[] = [\n {\n label: 'Entity page',\n icon: <DashboardIcon />,\n href: bazaarProject.value?.entityRef ? getEntityPageLink() : '',\n disabled: bazaarProject.value?.entityRef === null,\n },\n {\n label: bazaarProject.value?.entityRef ? 'Unlink project' : 'Link project',\n icon: bazaarProject.value?.entityRef ? (\n <LinkOffIcon />\n ) : (\n <InsertLinkIcon />\n ),\n onClick: handleLink,\n },\n {\n label: isMember ? 'Leave' : 'Join',\n icon: isMember ? <ExitToAppIcon /> : <PersonAddIcon />,\n href: '',\n onClick: async () => {\n handleMembersClick();\n },\n },\n {\n label: 'Community',\n icon: <ChatIcon />,\n href: bazaarProject.value?.community,\n disabled: !bazaarProject.value?.community || !isMember,\n },\n {\n label: 'Docs',\n icon: <Description />,\n href: bazaarProject.value?.docs,\n disabled:\n bazaarProject.value?.docs === null || bazaarProject.value?.docs === '',\n },\n ];\n\n const handleUnlinkSubmit = async () => {\n const updateResponse = await bazaarApi.updateProject({\n ...bazaarProject.value,\n entityRef: null,\n });\n\n if (updateResponse.status === 'ok') {\n setOpenUnlink(false);\n fetchBazaarProject();\n alertApi.post({\n message: `Unlinked entity '${\n parseEntityRef(bazaarProject.value?.entityRef!).name\n }' from the project ${bazaarProject.value?.title}`,\n severity: 'success',\n display: 'transient',\n });\n }\n };\n\n if (bazaarProject.error) {\n return <Alert severity=\"error\">{bazaarProject?.error?.message}</Alert>;\n } else if (members.error) {\n return <Alert severity=\"error\">{members?.error?.message}</Alert>;\n }\n\n return (\n <div>\n <LinkProjectDialog\n openProjectSelector={openProjectSelector}\n handleProjectSelectorClose={() => setOpenProjectSelector(false)}\n catalogEntities={catalogEntities.value || []}\n bazaarProject={bazaarProject.value || initProject}\n fetchBazaarProject={fetchBazaarProject}\n initEntity={initEntity}\n />\n\n {openUnlink && (\n <ConfirmationDialog\n open={openUnlink}\n handleClose={() => setOpenUnlink(false)}\n message={[\n 'Are you sure you want to unlink ',\n <b className={classes.wordBreak}>\n {parseEntityRef(bazaarProject.value?.entityRef!).name}\n </b>,\n ' from ',\n <b className={classes.wordBreak}>{bazaarProject.value?.title}</b>,\n ' ?',\n ]}\n type=\"unlink\"\n handleSubmit={handleUnlinkSubmit}\n />\n )}\n\n <Card>\n <EditProjectDialog\n bazaarProject={bazaarProject.value || initProject}\n openEdit={openEdit}\n handleEditClose={() => setOpenEdit(false)}\n handleCardClose={handleClose}\n fetchBazaarProject={fetchBazaarProject}\n />\n\n <CardHeader\n title={\n <Typography paragraph className={classes.wordBreak}>\n {bazaarProject.value?.title || initProject.title}\n </Typography>\n }\n action={\n <div>\n <IconButton onClick={() => setOpenEdit(true)}>\n <EditIcon />\n </IconButton>\n <IconButton onClick={handleClose}>\n <CloseIcon />\n </IconButton>\n </div>\n }\n subheader={<HeaderIconLinkRow links={links} />}\n />\n <Divider />\n\n <CardContentFields\n bazaarProject={bazaarProject.value || initProject}\n members={members.value || []}\n descriptionSize={9}\n membersSize={3}\n isMember={isMember}\n />\n </Card>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HomePageBazaarInfoCard.esm.js","sources":["../../../src/components/HomePageBazaarInfoCard/HomePageBazaarInfoCard.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 { useState, useEffect } from 'react';\nimport Card from '@material-ui/core/Card';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport Divider from '@material-ui/core/Divider';\nimport IconButton from '@material-ui/core/IconButton';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport {\n HeaderIconLinkRow,\n IconLinkVerticalProps,\n} from '@backstage/core-components';\nimport EditIcon from '@material-ui/icons/Edit';\nimport ChatIcon from '@material-ui/icons/Chat';\nimport PersonAddIcon from '@material-ui/icons/PersonAdd';\nimport InsertLinkIcon from '@material-ui/icons/InsertLink';\nimport DashboardIcon from '@material-ui/icons/Dashboard';\nimport CloseIcon from '@material-ui/icons/Close';\nimport LinkOffIcon from '@material-ui/icons/LinkOff';\nimport Description from '@material-ui/icons/Description';\nimport { EditProjectDialog } from '../EditProjectDialog';\nimport ExitToAppIcon from '@material-ui/icons/ExitToApp';\nimport {\n useApi,\n identityApiRef,\n useRouteRef,\n} from '@backstage/core-plugin-api';\nimport { toastApiRef } from '@backstage/frontend-plugin-api';\nimport { Member, BazaarProject } from '../../types';\nimport { bazaarApiRef } from '../../api';\nimport Alert from '@material-ui/lab/Alert';\nimport useAsyncFn from 'react-use/esm/useAsyncFn';\nimport { catalogApiRef, entityRouteRef } from '@backstage/plugin-catalog-react';\n\nimport {\n stringifyEntityRef,\n Entity,\n parseEntityRef,\n} from '@backstage/catalog-model';\n\nimport { ConfirmationDialog } from '../ConfirmationDialog/ConfirmationDialog';\nimport { CardContentFields } from '../CardContentFields/CardContentFields';\nimport { LinkProjectDialog } from '../LinkProjectDialog';\nimport {\n fetchCatalogItems,\n fetchProjectMembers,\n} from '../../util/fetchMethods';\nimport { parseBazaarResponse } from '../../util/parseMethods';\n\nconst useStyles = makeStyles({\n wordBreak: {\n wordBreak: 'break-all',\n whiteSpace: 'normal',\n margin: '-0.25rem 0',\n },\n});\n\ntype Props = {\n initProject: BazaarProject;\n handleClose: () => void;\n initEntity: Entity;\n};\n\nexport const HomePageBazaarInfoCard = ({\n initProject,\n handleClose,\n initEntity,\n}: Props) => {\n const classes = useStyles();\n const entityLink = useRouteRef(entityRouteRef);\n const bazaarApi = useApi(bazaarApiRef);\n const identity = useApi(identityApiRef);\n const alertApi = useApi(toastApiRef);\n const catalogApi = useApi(catalogApiRef);\n const [openEdit, setOpenEdit] = useState(false);\n const [openProjectSelector, setOpenProjectSelector] = useState(false);\n const [openUnlink, setOpenUnlink] = useState(false);\n const [isMember, setIsMember] = useState(false);\n\n const [catalogEntities, fetchCatalogEntities] = useAsyncFn(async () => {\n const entities = await fetchCatalogItems(catalogApi);\n const bazaarProjects = await bazaarApi.getProjects();\n const bazaarLinkedRefs: string[] = bazaarProjects.data\n .filter((entity: any) => entity.entity_ref !== null)\n .map((entity: any) => entity.entity_ref);\n\n return entities.filter(\n (entity: Entity) =>\n !bazaarLinkedRefs.includes(stringifyEntityRef(entity)),\n );\n });\n\n const [bazaarProject, fetchBazaarProject] = useAsyncFn(async () => {\n const response = await bazaarApi.getProjectById(initProject.id);\n return await parseBazaarResponse(response);\n });\n\n const [members, fetchMembers] = useAsyncFn(async () => {\n return fetchProjectMembers(bazaarApi, bazaarProject.value ?? initProject);\n });\n\n const [userId, fetchUserId] = useAsyncFn(async () => {\n return await (\n await identity.getProfileInfo()\n ).displayName;\n });\n\n useEffect(() => {\n fetchMembers();\n fetchBazaarProject();\n fetchCatalogEntities();\n fetchUserId();\n }, [fetchMembers, fetchBazaarProject, fetchCatalogEntities, fetchUserId]);\n\n useEffect(() => {\n if (members.value && userId.value) {\n setIsMember(\n members.value\n ?.map((member: Member) => member.userId)\n .indexOf(userId.value) >= 0,\n );\n }\n }, [bazaarProject.value, members, identity, userId.value]);\n\n const handleMembersClick = async () => {\n if (userId.value) {\n if (!isMember) {\n await bazaarApi.addMember(bazaarProject.value!.id, userId.value);\n } else {\n await bazaarApi.deleteMember(bazaarProject.value!.id, userId.value);\n }\n setIsMember(!isMember);\n fetchMembers();\n }\n };\n\n const getEntityPageLink = () => {\n if (bazaarProject?.value?.entityRef) {\n const { name, kind, namespace } = parseEntityRef(\n bazaarProject.value.entityRef,\n );\n return entityLink({ kind, namespace, name });\n }\n return '';\n };\n\n const handleLink = () => {\n if (bazaarProject.value?.entityRef) {\n setOpenUnlink(true);\n } else {\n fetchCatalogEntities();\n setOpenProjectSelector(true);\n }\n };\n\n const links: IconLinkVerticalProps[] = [\n {\n label: 'Entity page',\n icon: <DashboardIcon />,\n href: bazaarProject.value?.entityRef ? getEntityPageLink() : '',\n disabled: bazaarProject.value?.entityRef === null,\n },\n {\n label: bazaarProject.value?.entityRef ? 'Unlink project' : 'Link project',\n icon: bazaarProject.value?.entityRef ? (\n <LinkOffIcon />\n ) : (\n <InsertLinkIcon />\n ),\n onClick: handleLink,\n },\n {\n label: isMember ? 'Leave' : 'Join',\n icon: isMember ? <ExitToAppIcon /> : <PersonAddIcon />,\n href: '',\n onClick: async () => {\n handleMembersClick();\n },\n },\n {\n label: 'Community',\n icon: <ChatIcon />,\n href: bazaarProject.value?.community,\n disabled: !bazaarProject.value?.community || !isMember,\n },\n {\n label: 'Docs',\n icon: <Description />,\n href: bazaarProject.value?.docs,\n disabled:\n bazaarProject.value?.docs === null || bazaarProject.value?.docs === '',\n },\n ];\n\n const handleUnlinkSubmit = async () => {\n const updateResponse = await bazaarApi.updateProject({\n ...bazaarProject.value,\n entityRef: null,\n });\n\n if (updateResponse.status === 'ok') {\n setOpenUnlink(false);\n fetchBazaarProject();\n alertApi.post({\n title: `Unlinked entity '${\n parseEntityRef(bazaarProject.value?.entityRef!).name\n }' from the project ${bazaarProject.value?.title}`,\n status: 'success',\n });\n }\n };\n\n if (bazaarProject.error) {\n return <Alert severity=\"error\">{bazaarProject?.error?.message}</Alert>;\n } else if (members.error) {\n return <Alert severity=\"error\">{members?.error?.message}</Alert>;\n }\n\n return (\n <div>\n <LinkProjectDialog\n openProjectSelector={openProjectSelector}\n handleProjectSelectorClose={() => setOpenProjectSelector(false)}\n catalogEntities={catalogEntities.value || []}\n bazaarProject={bazaarProject.value || initProject}\n fetchBazaarProject={fetchBazaarProject}\n initEntity={initEntity}\n />\n\n {openUnlink && (\n <ConfirmationDialog\n open={openUnlink}\n handleClose={() => setOpenUnlink(false)}\n message={[\n 'Are you sure you want to unlink ',\n <b className={classes.wordBreak}>\n {parseEntityRef(bazaarProject.value?.entityRef!).name}\n </b>,\n ' from ',\n <b className={classes.wordBreak}>{bazaarProject.value?.title}</b>,\n ' ?',\n ]}\n type=\"unlink\"\n handleSubmit={handleUnlinkSubmit}\n />\n )}\n\n <Card>\n <EditProjectDialog\n bazaarProject={bazaarProject.value || initProject}\n openEdit={openEdit}\n handleEditClose={() => setOpenEdit(false)}\n handleCardClose={handleClose}\n fetchBazaarProject={fetchBazaarProject}\n />\n\n <CardHeader\n title={\n <Typography paragraph className={classes.wordBreak}>\n {bazaarProject.value?.title || initProject.title}\n </Typography>\n }\n action={\n <div>\n <IconButton onClick={() => setOpenEdit(true)}>\n <EditIcon />\n </IconButton>\n <IconButton onClick={handleClose}>\n <CloseIcon />\n </IconButton>\n </div>\n }\n subheader={<HeaderIconLinkRow links={links} />}\n />\n <Divider />\n\n <CardContentFields\n bazaarProject={bazaarProject.value || initProject}\n members={members.value || []}\n descriptionSize={9}\n membersSize={3}\n isMember={isMember}\n />\n </Card>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,8 @@ import { ProjectSelector } from '../ProjectSelector/ProjectSelector.esm.js';
|
|
|
9
9
|
import { CustomDialogTitle } from '../CustomDialogTitle/CustomDialogTitle.esm.js';
|
|
10
10
|
import { stringifyEntityRef } from '@backstage/catalog-model';
|
|
11
11
|
import { bazaarApiRef } from '../../api.esm.js';
|
|
12
|
-
import { useApi
|
|
12
|
+
import { useApi } from '@backstage/core-plugin-api';
|
|
13
|
+
import { toastApiRef } from '@backstage/frontend-plugin-api';
|
|
13
14
|
|
|
14
15
|
const useStyles = makeStyles({
|
|
15
16
|
content: { padding: "0 1rem" }
|
|
@@ -24,7 +25,7 @@ const LinkProjectDialog = ({
|
|
|
24
25
|
}) => {
|
|
25
26
|
const classes = useStyles();
|
|
26
27
|
const bazaarApi = useApi(bazaarApiRef);
|
|
27
|
-
const alertApi = useApi(
|
|
28
|
+
const alertApi = useApi(toastApiRef);
|
|
28
29
|
const [selectedEntity, setSelectedEntity] = useState(initEntity);
|
|
29
30
|
const [selectedEntityName, setSelectedEntityName] = useState("");
|
|
30
31
|
const handleEntityClick = (entity) => {
|
|
@@ -40,9 +41,8 @@ const LinkProjectDialog = ({
|
|
|
40
41
|
if (updateResponse.status === "ok") {
|
|
41
42
|
fetchBazaarProject();
|
|
42
43
|
alertApi.post({
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
display: "transient"
|
|
44
|
+
title: `linked entity '${selectedEntityName}' to the project ${bazaarProject.title}`,
|
|
45
|
+
status: "success"
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
48
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkProjectDialog.esm.js","sources":["../../../src/components/LinkProjectDialog/LinkProjectDialog.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 { useState } from 'react';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ProjectSelector } from '../ProjectSelector';\nimport { CustomDialogTitle } from '../CustomDialogTitle';\nimport { Entity, stringifyEntityRef } from '@backstage/catalog-model';\n\nimport { bazaarApiRef } from '../../api';\nimport { useApi
|
|
1
|
+
{"version":3,"file":"LinkProjectDialog.esm.js","sources":["../../../src/components/LinkProjectDialog/LinkProjectDialog.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 { useState } from 'react';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ProjectSelector } from '../ProjectSelector';\nimport { CustomDialogTitle } from '../CustomDialogTitle';\nimport { Entity, stringifyEntityRef } from '@backstage/catalog-model';\n\nimport { bazaarApiRef } from '../../api';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { toastApiRef } from '@backstage/frontend-plugin-api';\n\nimport { BazaarProject } from '../../types';\n\ntype Props = {\n openProjectSelector: boolean;\n handleProjectSelectorClose: () => void;\n catalogEntities: Entity[];\n bazaarProject: BazaarProject;\n fetchBazaarProject: () => Promise<BazaarProject | null>;\n initEntity: Entity;\n};\n\nconst useStyles = makeStyles({\n content: { padding: '0 1rem' },\n});\n\nexport const LinkProjectDialog = ({\n openProjectSelector,\n handleProjectSelectorClose,\n catalogEntities,\n bazaarProject,\n fetchBazaarProject,\n initEntity,\n}: Props) => {\n const classes = useStyles();\n const bazaarApi = useApi(bazaarApiRef);\n const alertApi = useApi(toastApiRef);\n const [selectedEntity, setSelectedEntity] = useState(initEntity);\n const [selectedEntityName, setSelectedEntityName] = useState('');\n const handleEntityClick = (entity: Entity) => {\n setSelectedEntity(entity);\n setSelectedEntityName(entity.metadata.name);\n };\n\n const handleSubmit = async () => {\n handleProjectSelectorClose();\n\n const updateResponse = await bazaarApi.updateProject({\n ...bazaarProject,\n entityRef: stringifyEntityRef(selectedEntity!),\n });\n if (updateResponse.status === 'ok') {\n fetchBazaarProject();\n alertApi.post({\n title: `linked entity '${selectedEntityName}' to the project ${bazaarProject.title}`,\n status: 'success',\n });\n }\n };\n\n return (\n <Dialog onClose={handleProjectSelectorClose} open={openProjectSelector}>\n <CustomDialogTitle\n id=\"customized-dialog-title\"\n onClose={handleProjectSelectorClose}\n >\n Select entity\n </CustomDialogTitle>\n <DialogContent className={classes.content} dividers>\n <ProjectSelector\n label=\"\"\n onChange={handleEntityClick}\n catalogEntities={catalogEntities || []}\n disableClearable\n defaultValue={catalogEntities[0] || null}\n />\n </DialogContent>\n\n <DialogActions>\n <Button onClick={handleSubmit} color=\"primary\" type=\"submit\">\n OK\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":["DialogContent","DialogActions"],"mappings":";;;;;;;;;;;;;;AAyCA,MAAM,YAAY,UAAW,CAAA;AAAA,EAC3B,OAAA,EAAS,EAAE,OAAA,EAAS,QAAS;AAC/B,CAAC,CAAA;AAEM,MAAM,oBAAoB,CAAC;AAAA,EAChC,mBAAA;AAAA,EACA,0BAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAa,KAAA;AACX,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAM,MAAA,SAAA,GAAY,OAAO,YAAY,CAAA;AACrC,EAAM,MAAA,QAAA,GAAW,OAAO,WAAW,CAAA;AACnC,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAI,SAAS,UAAU,CAAA;AAC/D,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAI,SAAS,EAAE,CAAA;AAC/D,EAAM,MAAA,iBAAA,GAAoB,CAAC,MAAmB,KAAA;AAC5C,IAAA,iBAAA,CAAkB,MAAM,CAAA;AACxB,IAAsB,qBAAA,CAAA,MAAA,CAAO,SAAS,IAAI,CAAA;AAAA,GAC5C;AAEA,EAAA,MAAM,eAAe,YAAY;AAC/B,IAA2B,0BAAA,EAAA;AAE3B,IAAM,MAAA,cAAA,GAAiB,MAAM,SAAA,CAAU,aAAc,CAAA;AAAA,MACnD,GAAG,aAAA;AAAA,MACH,SAAA,EAAW,mBAAmB,cAAe;AAAA,KAC9C,CAAA;AACD,IAAI,IAAA,cAAA,CAAe,WAAW,IAAM,EAAA;AAClC,MAAmB,kBAAA,EAAA;AACnB,MAAA,QAAA,CAAS,IAAK,CAAA;AAAA,QACZ,KAAO,EAAA,CAAA,eAAA,EAAkB,kBAAkB,CAAA,iBAAA,EAAoB,cAAc,KAAK,CAAA,CAAA;AAAA,QAClF,MAAQ,EAAA;AAAA,OACT,CAAA;AAAA;AACH,GACF;AAEA,EAAA,uBACG,IAAA,CAAA,MAAA,EAAA,EAAO,OAAS,EAAA,0BAAA,EAA4B,MAAM,mBACjD,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,EAAG,EAAA,yBAAA;AAAA,QACH,OAAS,EAAA,0BAAA;AAAA,QACV,QAAA,EAAA;AAAA;AAAA,KAED;AAAA,wBACCA,gBAAc,EAAA,EAAA,SAAA,EAAW,OAAQ,CAAA,OAAA,EAAS,UAAQ,IACjD,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,eAAA;AAAA,MAAA;AAAA,QACC,KAAM,EAAA,EAAA;AAAA,QACN,QAAU,EAAA,iBAAA;AAAA,QACV,eAAA,EAAiB,mBAAmB,EAAC;AAAA,QACrC,gBAAgB,EAAA,IAAA;AAAA,QAChB,YAAA,EAAc,eAAgB,CAAA,CAAC,CAAK,IAAA;AAAA;AAAA,KAExC,EAAA,CAAA;AAAA,oBAEA,GAAA,CAACC,gBACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,MAAO,EAAA,EAAA,OAAA,EAAS,YAAc,EAAA,KAAA,EAAM,SAAU,EAAA,IAAA,EAAK,QAAS,EAAA,QAAA,EAAA,IAAA,EAE7D,CACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,14 +3,6 @@ import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
|
|
|
3
3
|
import { ApiHolder } from '@backstage/core-plugin-api';
|
|
4
4
|
import { Entity } from '@backstage/catalog-model';
|
|
5
5
|
|
|
6
|
-
/** @public */
|
|
7
|
-
type HomePageProps = {
|
|
8
|
-
title?: string;
|
|
9
|
-
subtitle?: string;
|
|
10
|
-
fullWidth?: boolean;
|
|
11
|
-
fullHeight?: boolean;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
6
|
/** @public */
|
|
15
7
|
declare const bazaarPlugin: _backstage_core_plugin_api.BackstagePlugin<{
|
|
16
8
|
root: _backstage_core_plugin_api.RouteRef<undefined>;
|
|
@@ -44,4 +36,12 @@ type SortViewProps = {
|
|
|
44
36
|
/** @public */
|
|
45
37
|
declare const SortView: (props: SortViewProps) => react_jsx_runtime.JSX.Element;
|
|
46
38
|
|
|
39
|
+
/** @public */
|
|
40
|
+
type HomePageProps = {
|
|
41
|
+
title?: string;
|
|
42
|
+
subtitle?: string;
|
|
43
|
+
fullWidth?: boolean;
|
|
44
|
+
fullHeight?: boolean;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
47
|
export { BazaarOverviewCard, type BazaarOverviewCardProps, BazaarPage, type HomePageProps as BazaarPageProps, EntityBazaarInfoCard, SortView, type SortViewProps, bazaarPlugin, isBazaarAvailable };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage-community/plugin-bazaar",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.0",
|
|
4
4
|
"backstage": {
|
|
5
5
|
"role": "frontend-plugin",
|
|
6
6
|
"pluginId": "bazaar",
|
|
@@ -37,11 +37,12 @@
|
|
|
37
37
|
"test": "backstage-cli package test"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@backstage/catalog-model": "^1.7.
|
|
41
|
-
"@backstage/core-components": "^0.18.
|
|
42
|
-
"@backstage/core-plugin-api": "^1.12.
|
|
40
|
+
"@backstage/catalog-model": "^1.7.7",
|
|
41
|
+
"@backstage/core-components": "^0.18.8",
|
|
42
|
+
"@backstage/core-plugin-api": "^1.12.4",
|
|
43
43
|
"@backstage/errors": "^1.2.7",
|
|
44
|
-
"@backstage/plugin-
|
|
44
|
+
"@backstage/frontend-plugin-api": "^0.15.1",
|
|
45
|
+
"@backstage/plugin-catalog-react": "^2.1.0",
|
|
45
46
|
"@date-io/luxon": "1.x",
|
|
46
47
|
"@material-ui/core": "^4.12.2",
|
|
47
48
|
"@material-ui/icons": "^4.9.1",
|
|
@@ -56,9 +57,9 @@
|
|
|
56
57
|
"react-window": "^1.8.10"
|
|
57
58
|
},
|
|
58
59
|
"devDependencies": {
|
|
59
|
-
"@backstage/cli": "^0.
|
|
60
|
-
"@backstage/dev-utils": "^1.1.
|
|
61
|
-
"@backstage/plugin-catalog": "^
|
|
60
|
+
"@backstage/cli": "^0.36.0",
|
|
61
|
+
"@backstage/dev-utils": "^1.1.21",
|
|
62
|
+
"@backstage/plugin-catalog": "^2.0.1",
|
|
62
63
|
"@testing-library/jest-dom": "^6.0.0",
|
|
63
64
|
"@types/react-dom": "^18.2.19",
|
|
64
65
|
"@types/react-window": "^1.8.8",
|