@backstage-community/plugin-bazaar 0.5.1 → 0.6.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 +13 -0
- package/dist/api.esm.js.map +1 -1
- package/dist/components/About/About.esm.js.map +1 -1
- package/dist/components/AddProjectDialog/AddProjectDialog.esm.js.map +1 -1
- package/dist/components/BazaarOverviewCard/BazaarOverviewCard.esm.js.map +1 -1
- package/dist/components/CardContentFields/AboutField.esm.js.map +1 -1
- package/dist/components/CardContentFields/CardContentFields.esm.js.map +1 -1
- package/dist/components/ConfirmationDialog/ConfirmationDialog.esm.js.map +1 -1
- package/dist/components/CustomDialogTitle/CustomDialogTitle.esm.js.map +1 -1
- package/dist/components/DateSelector/DateSelector.esm.js.map +1 -1
- package/dist/components/DoubleDateSelector/DoubleDateSelector.esm.js.map +1 -1
- package/dist/components/EditProjectDialog/EditProjectDialog.esm.js.map +1 -1
- package/dist/components/EntityBazaarInfoCard/EntityBazaarInfoCard.esm.js.map +1 -1
- package/dist/components/EntityBazaarInfoContent/EntityBazaarInfoContent.esm.js.map +1 -1
- package/dist/components/HomePage/HomePage.esm.js.map +1 -1
- package/dist/components/HomePageBazaarInfoCard/HomePageBazaarInfoCard.esm.js.map +1 -1
- package/dist/components/InputField/InputField.esm.js.map +1 -1
- package/dist/components/InputSelector/InputSelector.esm.js.map +1 -1
- package/dist/components/LinkProjectDialog/LinkProjectDialog.esm.js.map +1 -1
- package/dist/components/ProjectCard/ProjectCard.esm.js.map +1 -1
- package/dist/components/ProjectDialog/ProjectDialog.esm.js.map +1 -1
- package/dist/components/ProjectPreview/ProjectPreview.esm.js.map +1 -1
- package/dist/components/ProjectSelector/ProjectSelector.esm.js.map +1 -1
- package/dist/components/SortMethodSelector/SortMethodSelector.esm.js.map +1 -1
- package/dist/components/SortView/SortView.esm.js.map +1 -1
- package/dist/components/StatusTag/StatusTag.esm.js.map +1 -1
- package/dist/components/UserSelector/UserSelector.esm.js +22 -18
- package/dist/components/UserSelector/UserSelector.esm.js.map +1 -1
- package/dist/components/VirtualizedListbox/VirtualizedListbox.esm.js +38 -0
- package/dist/components/VirtualizedListbox/VirtualizedListbox.esm.js.map +1 -0
- package/dist/plugin.esm.js.map +1 -1
- package/dist/routes.esm.js.map +1 -1
- package/dist/util/fetchMethods.esm.js.map +1 -1
- package/dist/util/parseMethods.esm.js.map +1 -1
- package/dist/util/sortMethods.esm.js.map +1 -1
- package/package.json +20 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @backstage-community/plugin-bazaar
|
|
2
2
|
|
|
3
|
+
## 0.6.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 9e1fa3b: Backstage version bump to v1.34.1
|
|
8
|
+
|
|
9
|
+
## 0.5.2
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- c3bdb20: feat(bazaar): improve `yarn dev` setup for running both frontend and backend together, and enable Bazaar API for project interactions.
|
|
14
|
+
- 8964f7d: Add virtualization to UserSelector dropdown
|
|
15
|
+
|
|
3
16
|
## 0.5.1
|
|
4
17
|
|
|
5
18
|
### Patch Changes
|
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":"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"}
|
|
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":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"About.esm.js","sources":["../../../src/components/About/About.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 React from 'react';\nimport Grid from '@material-ui/core/Grid';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { InfoCard, Link } from '@backstage/core-components';\n\nconst useStyles = makeStyles({\n subheader: {\n fontWeight: 'bold',\n },\n});\n\nexport const About = () => {\n const classes = useStyles();\n return (\n <Grid container spacing={4}>\n <Grid item xs={5}>\n <InfoCard title=\"About Bazaar\">\n <Typography className={classes.subheader} variant=\"body1\">\n What is the Bazaar?\n </Typography>\n <Typography paragraph>\n The Bazaar is a place where teams can propose projects for\n cross-functional team development. Essentially a marketplace for\n internal projects suitable for{' '}\n <Link\n target=\"_blank\"\n to=\"https://en.wikipedia.org/wiki/Inner_source\"\n >\n Inner Sourcing\n </Link>\n . With \"Inner Sourcing\", we mean projects that are developed\n internally within a company, but with Open Source best practices.\n </Typography>\n <Typography className={classes.subheader} variant=\"body1\">\n Why?\n </Typography>\n <Typography paragraph>\n Many companies today are of high need to increase the ease of\n cross-team cooperation. In large organizations, engineers often have\n limited ways of discovering or announcing the projects which could\n benefit from a wider development effort in terms of different\n expertise, experiences, and teams spread across the organization.\n With no good way to find these existing internal projects to join,\n the possibility of working with Inner Sourcing practices suffers.\n </Typography>\n <Typography className={classes.subheader} variant=\"body1\">\n How?\n </Typography>\n <Typography paragraph>\n The Bazaar allows engineers and teams to open up and announce their\n new and exciting projects for transparent cooperation in other parts\n of larger organizations. The Bazaar ensures that new Inner Sourcing\n friendly projects gain visibility through Backstage and a way for\n interested engineers to show their interest and in the future\n contribute with their specific skill set. The Bazaar also provides\n an easy way to manage, catalog, and browse these Inner Sourcing\n friendly projects and components.\n </Typography>\n </InfoCard>\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":";;;;;;AAsBA,MAAM,YAAY,UAAW,CAAA;AAAA,EAC3B,SAAW,EAAA;AAAA,IACT,UAAY,EAAA
|
|
1
|
+
{"version":3,"file":"About.esm.js","sources":["../../../src/components/About/About.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 React from 'react';\nimport Grid from '@material-ui/core/Grid';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { InfoCard, Link } from '@backstage/core-components';\n\nconst useStyles = makeStyles({\n subheader: {\n fontWeight: 'bold',\n },\n});\n\nexport const About = () => {\n const classes = useStyles();\n return (\n <Grid container spacing={4}>\n <Grid item xs={5}>\n <InfoCard title=\"About Bazaar\">\n <Typography className={classes.subheader} variant=\"body1\">\n What is the Bazaar?\n </Typography>\n <Typography paragraph>\n The Bazaar is a place where teams can propose projects for\n cross-functional team development. Essentially a marketplace for\n internal projects suitable for{' '}\n <Link\n target=\"_blank\"\n to=\"https://en.wikipedia.org/wiki/Inner_source\"\n >\n Inner Sourcing\n </Link>\n . With \"Inner Sourcing\", we mean projects that are developed\n internally within a company, but with Open Source best practices.\n </Typography>\n <Typography className={classes.subheader} variant=\"body1\">\n Why?\n </Typography>\n <Typography paragraph>\n Many companies today are of high need to increase the ease of\n cross-team cooperation. In large organizations, engineers often have\n limited ways of discovering or announcing the projects which could\n benefit from a wider development effort in terms of different\n expertise, experiences, and teams spread across the organization.\n With no good way to find these existing internal projects to join,\n the possibility of working with Inner Sourcing practices suffers.\n </Typography>\n <Typography className={classes.subheader} variant=\"body1\">\n How?\n </Typography>\n <Typography paragraph>\n The Bazaar allows engineers and teams to open up and announce their\n new and exciting projects for transparent cooperation in other parts\n of larger organizations. The Bazaar ensures that new Inner Sourcing\n friendly projects gain visibility through Backstage and a way for\n interested engineers to show their interest and in the future\n contribute with their specific skill set. The Bazaar also provides\n an easy way to manage, catalog, and browse these Inner Sourcing\n friendly projects and components.\n </Typography>\n </InfoCard>\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":";;;;;;AAsBA,MAAM,YAAY,UAAW,CAAA;AAAA,EAC3B,SAAW,EAAA;AAAA,IACT,UAAY,EAAA;AAAA;AAEhB,CAAC,CAAA;AAEM,MAAM,QAAQ,MAAM;AACzB,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,SAAS,EAAA,IAAA,EAAC,OAAS,EAAA,CAAA,EAAA,kBACtB,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,EAAI,EAAA,CAAA,EAAA,sCACZ,QAAS,EAAA,EAAA,KAAA,EAAM,cACd,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,SAAA,EAAW,OAAQ,CAAA,SAAA,EAAW,OAAQ,EAAA,OAAA,EAAA,EAAQ,qBAE1D,CAAA,kBACC,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,SAAS,EAAA,IAAA,EAAA,EAAC,8JAGW,GAC/B,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,MAAO,EAAA,QAAA;AAAA,MACP,EAAG,EAAA;AAAA,KAAA;AAAA,IACJ;AAAA,GAEM,EAAA,gIAGT,CACA,kBAAA,KAAA,CAAA,aAAA,CAAC,cAAW,SAAW,EAAA,OAAA,CAAQ,SAAW,EAAA,OAAA,EAAQ,WAAQ,MAE1D,CAAA,kBACC,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,WAAS,IAAC,EAAA,EAAA,4cAQtB,CACA,kBAAA,KAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,SAAA,EAAW,OAAQ,CAAA,SAAA,EAAW,SAAQ,OAAQ,EAAA,EAAA,MAE1D,CACA,kBAAA,KAAA,CAAA,aAAA,CAAC,cAAW,SAAS,EAAA,IAAA,EAAA,EAAC,mfAStB,CACF,CACF,CACF,CAAA;AAEJ;;;;"}
|
|
@@ -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 React, { useState } from 'react';\nimport { Entity, stringifyEntityRef } from '@backstage/catalog-model';\nimport { UseFormReset, UseFormGetValues } from 'react-hook-form';\nimport { useApi, alertApiRef } from '@backstage/core-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(alertApiRef);\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 message: `Added project '${formValues.title}' to the Bazaar list`,\n severity: 'success',\n display: 'transient',\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":";;;;;;;AAiCO,MAAM,mBAAmB,CAAC;AAAA,EAC/B,eAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA,mBAAA;AAAA,EACA
|
|
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 React, { useState } from 'react';\nimport { Entity, stringifyEntityRef } from '@backstage/catalog-model';\nimport { UseFormReset, UseFormGetValues } from 'react-hook-form';\nimport { useApi, alertApiRef } from '@backstage/core-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(alertApiRef);\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 message: `Added project '${formValues.title}' to the Bazaar list`,\n severity: 'success',\n display: 'transient',\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":";;;;;;;AAiCO,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,OAAA,EAAS,CAAkB,eAAA,EAAA,UAAA,CAAW,KAAK,CAAA,oBAAA,CAAA;AAAA,QAC3C,QAAU,EAAA,SAAA;AAAA,QACV,OAAS,EAAA;AAAA,OACV,CAAA;AAAA;AAGH,IAAY,WAAA,EAAA;AACZ,IAAA,KAAA,CAAM,aAAa,CAAA;AAAA,GACrB;AAEA,EACE,uBAAA,KAAA,CAAA,aAAA;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,KAAA,CAAA,aAAA;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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BazaarOverviewCard.esm.js","sources":["../../../src/components/BazaarOverviewCard/BazaarOverviewCard.tsx"],"sourcesContent":["/*\n * Copyright 2022 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, { useEffect, useState } from 'react';\nimport { ProjectPreview } from '../ProjectPreview/ProjectPreview';\nimport useAsyncFn from 'react-use/esm/useAsyncFn';\nimport { Entity, stringifyEntityRef } from '@backstage/catalog-model';\nimport { useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport type { BazaarProject } from '../../types';\nimport { bazaarApiRef } from '../../api';\nimport { fetchCatalogItems } from '../../util/fetchMethods';\nimport { parseBazaarProject } from '../../util/parseMethods';\nimport { ErrorPanel, InfoCard, Link } from '@backstage/core-components';\nimport { bazaarPlugin } from '../../plugin';\nimport IconButton from '@material-ui/core/IconButton';\nimport StorefrontIcon from '@material-ui/icons/Storefront';\n\n/** @public */\nexport type BazaarOverviewCardProps = {\n title?: string;\n order: 'latest' | 'random';\n fullWidth?: boolean;\n fullHeight?: boolean;\n};\n\nconst getUnlinkedCatalogEntities = (\n bazaarProjects: BazaarProject[],\n catalogEntities: Entity[],\n) => {\n const bazaarProjectRefs = bazaarProjects.map(\n (project: BazaarProject) => project.entityRef,\n );\n\n return catalogEntities.filter((entity: Entity) => {\n return !bazaarProjectRefs?.includes(stringifyEntityRef(entity));\n });\n};\n\n/** @public */\nexport const BazaarOverviewCard = (props: BazaarOverviewCardProps) => {\n const { title, order, fullWidth = false, fullHeight = false } = props;\n const bazaarApi = useApi(bazaarApiRef);\n const catalogApi = useApi(catalogApiRef);\n const root = useRouteRef(bazaarPlugin.routes.root);\n\n const defaultTitle =\n order === 'latest' ? 'Bazaar Latest Projects' : 'Bazaar Random Projects';\n\n const bazaarLink = {\n title: 'Go to Bazaar',\n link: `${root()}`,\n };\n\n const [unlinkedCatalogEntities, setUnlinkedCatalogEntities] =\n useState<Entity[]>();\n\n const [catalogEntities, fetchCatalogEntities] = useAsyncFn(async () => {\n return await fetchCatalogItems(catalogApi);\n });\n\n const [bazaarProjects, fetchBazaarProjects] = useAsyncFn(async () => {\n const limit = fullWidth ? 6 : 3;\n const response = await bazaarApi.getProjects(limit, order);\n return response.data.map(parseBazaarProject) as BazaarProject[];\n });\n\n const catalogEntityRefs = catalogEntities.value?.map((project: Entity) =>\n stringifyEntityRef(project),\n );\n\n useEffect(() => {\n const filterBrokenLinks = () => {\n if (catalogEntityRefs) {\n bazaarProjects.value?.forEach(async (project: BazaarProject) => {\n if (project.entityRef) {\n if (!catalogEntityRefs?.includes(project.entityRef)) {\n await bazaarApi.updateProject({\n ...project,\n entityRef: null,\n });\n }\n }\n });\n }\n };\n filterBrokenLinks();\n }, [\n bazaarApi,\n bazaarProjects.value,\n catalogEntityRefs,\n catalogEntities.value,\n ]);\n\n useEffect(() => {\n fetchCatalogEntities();\n fetchBazaarProjects();\n }, [fetchBazaarProjects, fetchCatalogEntities]);\n\n useEffect(() => {\n const unlinkedCEntities = getUnlinkedCatalogEntities(\n bazaarProjects.value || [],\n catalogEntities.value || [],\n );\n\n if (unlinkedCEntities) {\n setUnlinkedCatalogEntities(unlinkedCEntities);\n }\n }, [bazaarProjects, catalogEntities]);\n\n if (catalogEntities.error) {\n return <ErrorPanel error={catalogEntities.error} />;\n }\n\n if (bazaarProjects.error) {\n return <ErrorPanel error={bazaarProjects.error} />;\n }\n\n return (\n <InfoCard\n title={title ?? defaultTitle}\n action={\n <IconButton>\n <Link to={bazaarLink.link} title={bazaarLink.title}>\n <StorefrontIcon />\n </Link>\n </IconButton>\n }\n >\n <ProjectPreview\n bazaarProjects={bazaarProjects.value || []}\n fetchBazaarProjects={fetchBazaarProjects}\n catalogEntities={unlinkedCatalogEntities || []}\n useTablePagination={false}\n gridSize={fullWidth ? 2 : 4}\n height={fullHeight ? 'large' : 'small'}\n />\n </InfoCard>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAuCA,MAAM,0BAAA,GAA6B,CACjC,cAAA,EACA,eACG,KAAA;AACH,EAAA,MAAM,oBAAoB,cAAe,CAAA,GAAA;AAAA,IACvC,CAAC,YAA2B,OAAQ,CAAA
|
|
1
|
+
{"version":3,"file":"BazaarOverviewCard.esm.js","sources":["../../../src/components/BazaarOverviewCard/BazaarOverviewCard.tsx"],"sourcesContent":["/*\n * Copyright 2022 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, { useEffect, useState } from 'react';\nimport { ProjectPreview } from '../ProjectPreview/ProjectPreview';\nimport useAsyncFn from 'react-use/esm/useAsyncFn';\nimport { Entity, stringifyEntityRef } from '@backstage/catalog-model';\nimport { useApi, useRouteRef } from '@backstage/core-plugin-api';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport type { BazaarProject } from '../../types';\nimport { bazaarApiRef } from '../../api';\nimport { fetchCatalogItems } from '../../util/fetchMethods';\nimport { parseBazaarProject } from '../../util/parseMethods';\nimport { ErrorPanel, InfoCard, Link } from '@backstage/core-components';\nimport { bazaarPlugin } from '../../plugin';\nimport IconButton from '@material-ui/core/IconButton';\nimport StorefrontIcon from '@material-ui/icons/Storefront';\n\n/** @public */\nexport type BazaarOverviewCardProps = {\n title?: string;\n order: 'latest' | 'random';\n fullWidth?: boolean;\n fullHeight?: boolean;\n};\n\nconst getUnlinkedCatalogEntities = (\n bazaarProjects: BazaarProject[],\n catalogEntities: Entity[],\n) => {\n const bazaarProjectRefs = bazaarProjects.map(\n (project: BazaarProject) => project.entityRef,\n );\n\n return catalogEntities.filter((entity: Entity) => {\n return !bazaarProjectRefs?.includes(stringifyEntityRef(entity));\n });\n};\n\n/** @public */\nexport const BazaarOverviewCard = (props: BazaarOverviewCardProps) => {\n const { title, order, fullWidth = false, fullHeight = false } = props;\n const bazaarApi = useApi(bazaarApiRef);\n const catalogApi = useApi(catalogApiRef);\n const root = useRouteRef(bazaarPlugin.routes.root);\n\n const defaultTitle =\n order === 'latest' ? 'Bazaar Latest Projects' : 'Bazaar Random Projects';\n\n const bazaarLink = {\n title: 'Go to Bazaar',\n link: `${root()}`,\n };\n\n const [unlinkedCatalogEntities, setUnlinkedCatalogEntities] =\n useState<Entity[]>();\n\n const [catalogEntities, fetchCatalogEntities] = useAsyncFn(async () => {\n return await fetchCatalogItems(catalogApi);\n });\n\n const [bazaarProjects, fetchBazaarProjects] = useAsyncFn(async () => {\n const limit = fullWidth ? 6 : 3;\n const response = await bazaarApi.getProjects(limit, order);\n return response.data.map(parseBazaarProject) as BazaarProject[];\n });\n\n const catalogEntityRefs = catalogEntities.value?.map((project: Entity) =>\n stringifyEntityRef(project),\n );\n\n useEffect(() => {\n const filterBrokenLinks = () => {\n if (catalogEntityRefs) {\n bazaarProjects.value?.forEach(async (project: BazaarProject) => {\n if (project.entityRef) {\n if (!catalogEntityRefs?.includes(project.entityRef)) {\n await bazaarApi.updateProject({\n ...project,\n entityRef: null,\n });\n }\n }\n });\n }\n };\n filterBrokenLinks();\n }, [\n bazaarApi,\n bazaarProjects.value,\n catalogEntityRefs,\n catalogEntities.value,\n ]);\n\n useEffect(() => {\n fetchCatalogEntities();\n fetchBazaarProjects();\n }, [fetchBazaarProjects, fetchCatalogEntities]);\n\n useEffect(() => {\n const unlinkedCEntities = getUnlinkedCatalogEntities(\n bazaarProjects.value || [],\n catalogEntities.value || [],\n );\n\n if (unlinkedCEntities) {\n setUnlinkedCatalogEntities(unlinkedCEntities);\n }\n }, [bazaarProjects, catalogEntities]);\n\n if (catalogEntities.error) {\n return <ErrorPanel error={catalogEntities.error} />;\n }\n\n if (bazaarProjects.error) {\n return <ErrorPanel error={bazaarProjects.error} />;\n }\n\n return (\n <InfoCard\n title={title ?? defaultTitle}\n action={\n <IconButton>\n <Link to={bazaarLink.link} title={bazaarLink.title}>\n <StorefrontIcon />\n </Link>\n </IconButton>\n }\n >\n <ProjectPreview\n bazaarProjects={bazaarProjects.value || []}\n fetchBazaarProjects={fetchBazaarProjects}\n catalogEntities={unlinkedCatalogEntities || []}\n useTablePagination={false}\n gridSize={fullWidth ? 2 : 4}\n height={fullHeight ? 'large' : 'small'}\n />\n </InfoCard>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AboutField.esm.js","sources":["../../../src/components/CardContentFields/AboutField.tsx"],"sourcesContent":["/*\n * Copyright 2020 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 { useElementFilter } from '@backstage/core-plugin-api';\nimport Grid from '@material-ui/core/Grid';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport React from 'react';\n\nconst useStyles = makeStyles(theme => ({\n value: {\n fontWeight: 'bold',\n overflow: 'hidden',\n lineHeight: '24px',\n wordBreak: 'break-word',\n },\n label: {\n color: theme.palette.text.secondary,\n textTransform: 'uppercase',\n fontSize: '10px',\n fontWeight: 'bold',\n letterSpacing: 0.5,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n },\n}));\n\n/**\n * Props for {@link AboutField}.\n */\nexport interface AboutFieldProps {\n label: string;\n value?: string;\n gridSizes?: Record<string, number>;\n children?: React.ReactNode;\n}\n\nexport function AboutField(props: AboutFieldProps) {\n const { label, value, gridSizes, children } = props;\n const classes = useStyles();\n\n const childElements = useElementFilter(children, c => c.getElements());\n\n // Content is either children or a string prop `value`\n const content =\n childElements.length > 0 ? (\n childElements\n ) : (\n <Typography variant=\"body2\" className={classes.value}>\n {value || `unknown`}\n </Typography>\n );\n return (\n <Grid item {...gridSizes}>\n <Typography variant=\"h2\" className={classes.label}>\n {label}\n </Typography>\n {content}\n </Grid>\n );\n}\n"],"names":[],"mappings":";;;;;;AAsBA,MAAM,SAAA,GAAY,WAAW,CAAU,KAAA,MAAA;AAAA,EACrC,KAAO,EAAA;AAAA,IACL,UAAY,EAAA,MAAA;AAAA,IACZ,QAAU,EAAA,QAAA;AAAA,IACV,UAAY,EAAA,MAAA;AAAA,IACZ,SAAW,EAAA
|
|
1
|
+
{"version":3,"file":"AboutField.esm.js","sources":["../../../src/components/CardContentFields/AboutField.tsx"],"sourcesContent":["/*\n * Copyright 2020 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 { useElementFilter } from '@backstage/core-plugin-api';\nimport Grid from '@material-ui/core/Grid';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport React from 'react';\n\nconst useStyles = makeStyles(theme => ({\n value: {\n fontWeight: 'bold',\n overflow: 'hidden',\n lineHeight: '24px',\n wordBreak: 'break-word',\n },\n label: {\n color: theme.palette.text.secondary,\n textTransform: 'uppercase',\n fontSize: '10px',\n fontWeight: 'bold',\n letterSpacing: 0.5,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n },\n}));\n\n/**\n * Props for {@link AboutField}.\n */\nexport interface AboutFieldProps {\n label: string;\n value?: string;\n gridSizes?: Record<string, number>;\n children?: React.ReactNode;\n}\n\nexport function AboutField(props: AboutFieldProps) {\n const { label, value, gridSizes, children } = props;\n const classes = useStyles();\n\n const childElements = useElementFilter(children, c => c.getElements());\n\n // Content is either children or a string prop `value`\n const content =\n childElements.length > 0 ? (\n childElements\n ) : (\n <Typography variant=\"body2\" className={classes.value}>\n {value || `unknown`}\n </Typography>\n );\n return (\n <Grid item {...gridSizes}>\n <Typography variant=\"h2\" className={classes.label}>\n {label}\n </Typography>\n {content}\n </Grid>\n );\n}\n"],"names":[],"mappings":";;;;;;AAsBA,MAAM,SAAA,GAAY,WAAW,CAAU,KAAA,MAAA;AAAA,EACrC,KAAO,EAAA;AAAA,IACL,UAAY,EAAA,MAAA;AAAA,IACZ,QAAU,EAAA,QAAA;AAAA,IACV,UAAY,EAAA,MAAA;AAAA,IACZ,SAAW,EAAA;AAAA,GACb;AAAA,EACA,KAAO,EAAA;AAAA,IACL,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA,SAAA;AAAA,IAC1B,aAAe,EAAA,WAAA;AAAA,IACf,QAAU,EAAA,MAAA;AAAA,IACV,UAAY,EAAA,MAAA;AAAA,IACZ,aAAe,EAAA,GAAA;AAAA,IACf,QAAU,EAAA,QAAA;AAAA,IACV,UAAY,EAAA;AAAA;AAEhB,CAAE,CAAA,CAAA;AAYK,SAAS,WAAW,KAAwB,EAAA;AACjD,EAAA,MAAM,EAAE,KAAA,EAAO,KAAO,EAAA,SAAA,EAAW,UAAa,GAAA,KAAA;AAC9C,EAAA,MAAM,UAAU,SAAU,EAAA;AAE1B,EAAA,MAAM,gBAAgB,gBAAiB,CAAA,QAAA,EAAU,CAAK,CAAA,KAAA,CAAA,CAAE,aAAa,CAAA;AAGrE,EAAA,MAAM,OACJ,GAAA,aAAA,CAAc,MAAS,GAAA,CAAA,GACrB,aAEA,mBAAA,KAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAQ,EAAA,SAAA,EAAW,OAAQ,CAAA,KAAA,EAAA,EAC5C,SAAS,CACZ,OAAA,CAAA,CAAA;AAEJ,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAE,GAAG,SACb,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,MAAK,SAAW,EAAA,OAAA,CAAQ,KACzC,EAAA,EAAA,KACH,GACC,OACH,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CardContentFields.esm.js","sources":["../../../src/components/CardContentFields/CardContentFields.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 React from 'react';\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport Typography from '@material-ui/core/Typography';\nimport makeStyles from '@material-ui/core/styles/makeStyles';\n\nimport { GridSize } from '@material-ui/core/Grid';\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { Avatar, Link } from '@backstage/core-components';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { entityRouteRef } from '@backstage/plugin-catalog-react';\nimport { AboutField } from './AboutField';\nimport { StatusTag } from '../StatusTag';\nimport { Member, BazaarProject } from '../../types';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\n\ntype Props = {\n bazaarProject: BazaarProject;\n members: Member[];\n descriptionSize: GridSize;\n membersSize: GridSize;\n isMember: boolean;\n};\n\nconst useStyles = makeStyles(\n {\n avatar: {\n width: '19px',\n height: '19px',\n float: 'left',\n marginRight: '0.3rem',\n marginTop: '0rem',\n marginBottom: '0rem',\n alignItems: 'left',\n },\n avatarText: {\n fontSize: '8px',\n textAlign: 'left',\n },\n },\n { name: 'CardContentFields' },\n);\n\nexport const CardContentFields = ({\n bazaarProject,\n members,\n descriptionSize,\n membersSize,\n isMember,\n}: Props) => {\n const catalogEntityRoute = useRouteRef(entityRouteRef);\n const currentPage = window.location.pathname;\n const isEntityPage = currentPage.includes('/catalog/');\n const classes = useStyles();\n return (\n <div>\n <Card>\n <CardContent>\n <Grid container>\n <Grid item xs={descriptionSize}>\n <AboutField label=\"Description\">\n {bazaarProject.description\n .split('\\n')\n .map((str: string, i: number) => (\n <Typography key={i} variant=\"body2\" paragraph>\n {str}\n </Typography>\n ))}\n </AboutField>\n </Grid>\n\n <Grid\n style={{\n display: 'flex',\n justifyContent: 'flex-end',\n }}\n item\n xs={membersSize}\n >\n <AboutField label=\"Latest members\">\n {members.length ? (\n members.slice(0, 7).map((member: Member) => {\n return (\n <div\n style={{\n textAlign: 'left',\n backgroundColor: '',\n marginBottom: '0.3rem',\n marginTop: '0.3rem',\n display: 'block',\n }}\n key={member.userId}\n >\n <Avatar\n displayName={member.userId}\n classes={classes}\n picture={member.picture}\n />\n <Link\n target=\"_blank\"\n to={\n member.userRef\n ? `${catalogEntityRoute(\n parseEntityRef(member.userRef),\n )}`\n : `http://github.com/${member.userId}`\n }\n >\n {member?.userId}\n </Link>\n </div>\n );\n })\n ) : (\n <div />\n )}\n </AboutField>\n </Grid>\n\n {!isEntityPage && isMember && (\n <Grid item xs={12}>\n <AboutField label=\"I've joined the project, what's next?\">\n <Typography variant=\"body2\" paragraph>\n To learn more about this project, click the \"Entity Page\"\n link, where you can view more information about the effort\n and navigate to the source code itself to begin\n collaborating.\n </Typography>\n </AboutField>\n </Grid>\n )}\n\n <Grid item xs={2}>\n <AboutField label=\"Status\">\n <StatusTag status={bazaarProject.status} />\n </AboutField>\n </Grid>\n\n <Grid item xs={2}>\n <AboutField label=\"size\">\n <Typography variant=\"body2\">{bazaarProject.size}</Typography>\n </AboutField>\n </Grid>\n\n <Grid item xs={2}>\n <AboutField label=\"Start date\">\n <Typography variant=\"body2\">\n {bazaarProject.startDate?.substring(0, 10) || ''}\n </Typography>\n </AboutField>\n </Grid>\n\n <Grid item xs={2}>\n <AboutField label=\"End date\">\n <Typography variant=\"body2\">\n {bazaarProject.endDate?.substring(0, 10) || ''}\n </Typography>\n </AboutField>\n </Grid>\n\n <Grid item xs={4}>\n <AboutField label=\"Responsible\">\n <Typography variant=\"body2\">\n {(() => {\n try {\n parseEntityRef(bazaarProject.responsible);\n return (\n <EntityRefLink entityRef={bazaarProject.responsible} />\n );\n } catch {\n return bazaarProject.responsible || '';\n }\n })()}{' '}\n </Typography>\n </AboutField>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CardContentFields.esm.js","sources":["../../../src/components/CardContentFields/CardContentFields.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 React from 'react';\nimport Grid from '@material-ui/core/Grid';\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport Typography from '@material-ui/core/Typography';\nimport makeStyles from '@material-ui/core/styles/makeStyles';\n\nimport { GridSize } from '@material-ui/core/Grid';\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { Avatar, Link } from '@backstage/core-components';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { entityRouteRef } from '@backstage/plugin-catalog-react';\nimport { AboutField } from './AboutField';\nimport { StatusTag } from '../StatusTag';\nimport { Member, BazaarProject } from '../../types';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\n\ntype Props = {\n bazaarProject: BazaarProject;\n members: Member[];\n descriptionSize: GridSize;\n membersSize: GridSize;\n isMember: boolean;\n};\n\nconst useStyles = makeStyles(\n {\n avatar: {\n width: '19px',\n height: '19px',\n float: 'left',\n marginRight: '0.3rem',\n marginTop: '0rem',\n marginBottom: '0rem',\n alignItems: 'left',\n },\n avatarText: {\n fontSize: '8px',\n textAlign: 'left',\n },\n },\n { name: 'CardContentFields' },\n);\n\nexport const CardContentFields = ({\n bazaarProject,\n members,\n descriptionSize,\n membersSize,\n isMember,\n}: Props) => {\n const catalogEntityRoute = useRouteRef(entityRouteRef);\n const currentPage = window.location.pathname;\n const isEntityPage = currentPage.includes('/catalog/');\n const classes = useStyles();\n return (\n <div>\n <Card>\n <CardContent>\n <Grid container>\n <Grid item xs={descriptionSize}>\n <AboutField label=\"Description\">\n {bazaarProject.description\n .split('\\n')\n .map((str: string, i: number) => (\n <Typography key={i} variant=\"body2\" paragraph>\n {str}\n </Typography>\n ))}\n </AboutField>\n </Grid>\n\n <Grid\n style={{\n display: 'flex',\n justifyContent: 'flex-end',\n }}\n item\n xs={membersSize}\n >\n <AboutField label=\"Latest members\">\n {members.length ? (\n members.slice(0, 7).map((member: Member) => {\n return (\n <div\n style={{\n textAlign: 'left',\n backgroundColor: '',\n marginBottom: '0.3rem',\n marginTop: '0.3rem',\n display: 'block',\n }}\n key={member.userId}\n >\n <Avatar\n displayName={member.userId}\n classes={classes}\n picture={member.picture}\n />\n <Link\n target=\"_blank\"\n to={\n member.userRef\n ? `${catalogEntityRoute(\n parseEntityRef(member.userRef),\n )}`\n : `http://github.com/${member.userId}`\n }\n >\n {member?.userId}\n </Link>\n </div>\n );\n })\n ) : (\n <div />\n )}\n </AboutField>\n </Grid>\n\n {!isEntityPage && isMember && (\n <Grid item xs={12}>\n <AboutField label=\"I've joined the project, what's next?\">\n <Typography variant=\"body2\" paragraph>\n To learn more about this project, click the \"Entity Page\"\n link, where you can view more information about the effort\n and navigate to the source code itself to begin\n collaborating.\n </Typography>\n </AboutField>\n </Grid>\n )}\n\n <Grid item xs={2}>\n <AboutField label=\"Status\">\n <StatusTag status={bazaarProject.status} />\n </AboutField>\n </Grid>\n\n <Grid item xs={2}>\n <AboutField label=\"size\">\n <Typography variant=\"body2\">{bazaarProject.size}</Typography>\n </AboutField>\n </Grid>\n\n <Grid item xs={2}>\n <AboutField label=\"Start date\">\n <Typography variant=\"body2\">\n {bazaarProject.startDate?.substring(0, 10) || ''}\n </Typography>\n </AboutField>\n </Grid>\n\n <Grid item xs={2}>\n <AboutField label=\"End date\">\n <Typography variant=\"body2\">\n {bazaarProject.endDate?.substring(0, 10) || ''}\n </Typography>\n </AboutField>\n </Grid>\n\n <Grid item xs={4}>\n <AboutField label=\"Responsible\">\n <Typography variant=\"body2\">\n {(() => {\n try {\n parseEntityRef(bazaarProject.responsible);\n return (\n <EntityRefLink entityRef={bazaarProject.responsible} />\n );\n } catch {\n return bazaarProject.responsible || '';\n }\n })()}{' '}\n </Typography>\n </AboutField>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfirmationDialog.esm.js","sources":["../../../src/components/ConfirmationDialog/ConfirmationDialog.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 React from 'react';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport {\n CustomDialogTitle,\n DialogActions,\n DialogContent,\n} from '../CustomDialogTitle';\n\ntype Props = {\n open: boolean;\n handleClose: () => void;\n message: (string | JSX.Element)[];\n type: 'delete' | 'unlink';\n handleSubmit: () => void;\n};\n\nexport const ConfirmationDialog = ({\n open,\n handleClose,\n message,\n type,\n handleSubmit,\n}: Props) => {\n return (\n <Dialog\n fullWidth\n maxWidth=\"xs\"\n onClose={handleClose}\n aria-labelledby=\"customized-dialog-title\"\n open={open}\n >\n <CustomDialogTitle id=\"customized-dialog-title\" onClose={handleClose}>\n {type.charAt(0).toLocaleUpperCase('en-US') + type.slice(1)} project\n </CustomDialogTitle>\n\n <DialogContent dividers>{message}</DialogContent>\n\n <DialogActions>\n <Button onClick={handleSubmit} color=\"primary\" type=\"submit\">\n {type}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":[],"mappings":";;;;;AAiCO,MAAM,qBAAqB,CAAC;AAAA,EACjC,IAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA
|
|
1
|
+
{"version":3,"file":"ConfirmationDialog.esm.js","sources":["../../../src/components/ConfirmationDialog/ConfirmationDialog.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 React from 'react';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport {\n CustomDialogTitle,\n DialogActions,\n DialogContent,\n} from '../CustomDialogTitle';\n\ntype Props = {\n open: boolean;\n handleClose: () => void;\n message: (string | JSX.Element)[];\n type: 'delete' | 'unlink';\n handleSubmit: () => void;\n};\n\nexport const ConfirmationDialog = ({\n open,\n handleClose,\n message,\n type,\n handleSubmit,\n}: Props) => {\n return (\n <Dialog\n fullWidth\n maxWidth=\"xs\"\n onClose={handleClose}\n aria-labelledby=\"customized-dialog-title\"\n open={open}\n >\n <CustomDialogTitle id=\"customized-dialog-title\" onClose={handleClose}>\n {type.charAt(0).toLocaleUpperCase('en-US') + type.slice(1)} project\n </CustomDialogTitle>\n\n <DialogContent dividers>{message}</DialogContent>\n\n <DialogActions>\n <Button onClick={handleSubmit} color=\"primary\" type=\"submit\">\n {type}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":[],"mappings":";;;;;AAiCO,MAAM,qBAAqB,CAAC;AAAA,EACjC,IAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAa,KAAA;AACX,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAS,EAAA,IAAA;AAAA,MACT,QAAS,EAAA,IAAA;AAAA,MACT,OAAS,EAAA,WAAA;AAAA,MACT,iBAAgB,EAAA,yBAAA;AAAA,MAChB;AAAA,KAAA;AAAA,wCAEC,iBAAkB,EAAA,EAAA,EAAA,EAAG,yBAA0B,EAAA,OAAA,EAAS,eACtD,IAAK,CAAA,MAAA,CAAO,CAAC,CAAA,CAAE,kBAAkB,OAAO,CAAA,GAAI,KAAK,KAAM,CAAA,CAAC,GAAE,UAC7D,CAAA;AAAA,oBAEC,KAAA,CAAA,aAAA,CAAA,aAAA,EAAA,EAAc,QAAQ,EAAA,IAAA,EAAA,EAAE,OAAQ,CAAA;AAAA,oBAEjC,KAAA,CAAA,aAAA,CAAC,aACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,MAAO,EAAA,EAAA,OAAA,EAAS,YAAc,EAAA,KAAA,EAAM,SAAU,EAAA,IAAA,EAAK,QACjD,EAAA,EAAA,IACH,CACF;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomDialogTitle.esm.js","sources":["../../../src/components/CustomDialogTitle/CustomDialogTitle.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 React from 'react';\nimport IconButton from '@material-ui/core/IconButton';\nimport CloseIcon from '@material-ui/icons/Close';\nimport Typography from '@material-ui/core/Typography';\nimport MuiDialogTitle from '@material-ui/core/DialogTitle';\nimport {\n Theme,\n WithStyles,\n withStyles,\n createStyles,\n} from '@material-ui/core/styles';\nimport MuiDialogContent from '@material-ui/core/DialogContent';\nimport MuiDialogActions from '@material-ui/core/DialogActions';\n\n/*\n DialogTitleProps, DialogTitle, DialogContent and DialogActions \n are copied from the git-release plugin\n*/\n\nexport interface DialogTitleProps extends WithStyles<typeof styles> {\n id: string;\n children: React.ReactNode;\n onClose: () => void;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n margin: 0,\n padding: theme.spacing(2),\n },\n closeButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n });\n\nexport const DialogContent = withStyles((theme: Theme) => ({\n root: {\n padding: theme.spacing(2),\n },\n}))(MuiDialogContent);\n\nexport const DialogActions = withStyles((theme: Theme) => ({\n root: {\n margin: 0,\n padding: theme.spacing(1),\n },\n}))(MuiDialogActions);\n\nexport const CustomDialogTitle = withStyles(styles)(\n (props: DialogTitleProps) => {\n const { children, classes, onClose, ...other } = props;\n return (\n <MuiDialogTitle disableTypography className={classes.root} {...other}>\n <Typography variant=\"h6\">{children}</Typography>\n {onClose ? (\n <IconButton\n aria-label=\"close\"\n className={classes.closeButton}\n onClick={onClose}\n >\n <CloseIcon />\n </IconButton>\n ) : null}\n </MuiDialogTitle>\n );\n },\n);\n"],"names":[],"mappings":";;;;;;;;;AAyCA,MAAM,MAAA,GAAS,CAAC,KAAA,KACd,YAAa,CAAA;AAAA,EACX,IAAM,EAAA;AAAA,IACJ,MAAQ,EAAA,CAAA;AAAA,IACR,OAAA,EAAS,KAAM,CAAA,OAAA,CAAQ,CAAC
|
|
1
|
+
{"version":3,"file":"CustomDialogTitle.esm.js","sources":["../../../src/components/CustomDialogTitle/CustomDialogTitle.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 React from 'react';\nimport IconButton from '@material-ui/core/IconButton';\nimport CloseIcon from '@material-ui/icons/Close';\nimport Typography from '@material-ui/core/Typography';\nimport MuiDialogTitle from '@material-ui/core/DialogTitle';\nimport {\n Theme,\n WithStyles,\n withStyles,\n createStyles,\n} from '@material-ui/core/styles';\nimport MuiDialogContent from '@material-ui/core/DialogContent';\nimport MuiDialogActions from '@material-ui/core/DialogActions';\n\n/*\n DialogTitleProps, DialogTitle, DialogContent and DialogActions \n are copied from the git-release plugin\n*/\n\nexport interface DialogTitleProps extends WithStyles<typeof styles> {\n id: string;\n children: React.ReactNode;\n onClose: () => void;\n}\n\nconst styles = (theme: Theme) =>\n createStyles({\n root: {\n margin: 0,\n padding: theme.spacing(2),\n },\n closeButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n });\n\nexport const DialogContent = withStyles((theme: Theme) => ({\n root: {\n padding: theme.spacing(2),\n },\n}))(MuiDialogContent);\n\nexport const DialogActions = withStyles((theme: Theme) => ({\n root: {\n margin: 0,\n padding: theme.spacing(1),\n },\n}))(MuiDialogActions);\n\nexport const CustomDialogTitle = withStyles(styles)(\n (props: DialogTitleProps) => {\n const { children, classes, onClose, ...other } = props;\n return (\n <MuiDialogTitle disableTypography className={classes.root} {...other}>\n <Typography variant=\"h6\">{children}</Typography>\n {onClose ? (\n <IconButton\n aria-label=\"close\"\n className={classes.closeButton}\n onClick={onClose}\n >\n <CloseIcon />\n </IconButton>\n ) : null}\n </MuiDialogTitle>\n );\n },\n);\n"],"names":[],"mappings":";;;;;;;;;AAyCA,MAAM,MAAA,GAAS,CAAC,KAAA,KACd,YAAa,CAAA;AAAA,EACX,IAAM,EAAA;AAAA,IACJ,MAAQ,EAAA,CAAA;AAAA,IACR,OAAA,EAAS,KAAM,CAAA,OAAA,CAAQ,CAAC;AAAA,GAC1B;AAAA,EACA,WAAa,EAAA;AAAA,IACX,QAAU,EAAA,UAAA;AAAA,IACV,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IACtB,GAAA,EAAK,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IACpB,KAAO,EAAA,KAAA,CAAM,OAAQ,CAAA,IAAA,CAAK,GAAG;AAAA;AAEjC,CAAC,CAAA;AAEU,MAAA,aAAA,GAAgB,UAAW,CAAA,CAAC,KAAkB,MAAA;AAAA,EACzD,IAAM,EAAA;AAAA,IACJ,OAAA,EAAS,KAAM,CAAA,OAAA,CAAQ,CAAC;AAAA;AAE5B,CAAA,CAAE,EAAE,gBAAgB;AAEP,MAAA,aAAA,GAAgB,UAAW,CAAA,CAAC,KAAkB,MAAA;AAAA,EACzD,IAAM,EAAA;AAAA,IACJ,MAAQ,EAAA,CAAA;AAAA,IACR,OAAA,EAAS,KAAM,CAAA,OAAA,CAAQ,CAAC;AAAA;AAE5B,CAAA,CAAE,EAAE,gBAAgB;AAEP,MAAA,iBAAA,GAAoB,WAAW,MAAM,CAAA;AAAA,EAChD,CAAC,KAA4B,KAAA;AAC3B,IAAA,MAAM,EAAE,QAAU,EAAA,OAAA,EAAS,OAAS,EAAA,GAAG,OAAU,GAAA,KAAA;AACjD,IAAA,uBACG,KAAA,CAAA,aAAA,CAAA,cAAA,EAAA,EAAe,iBAAiB,EAAA,IAAA,EAAC,WAAW,OAAQ,CAAA,IAAA,EAAO,GAAG,KAAA,EAAA,sCAC5D,UAAW,EAAA,EAAA,OAAA,EAAQ,IAAM,EAAA,EAAA,QAAS,GAClC,OACC,mBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,YAAW,EAAA,OAAA;AAAA,QACX,WAAW,OAAQ,CAAA,WAAA;AAAA,QACnB,OAAS,EAAA;AAAA,OAAA;AAAA,0CAER,SAAU,EAAA,IAAA;AAAA,QAEX,IACN,CAAA;AAAA;AAGN;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DateSelector.esm.js","sources":["../../../src/components/DateSelector/DateSelector.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 React from 'react';\nimport FormControl from '@material-ui/core/FormControl';\nimport { Controller, Control, UseFormSetValue } from 'react-hook-form';\nimport { FormValues } from '../../types';\nimport { KeyboardDatePicker } from '@material-ui/pickers/DatePicker';\nimport MuiPickersUtilsProvider from '@material-ui/pickers/MuiPickersUtilsProvider';\nimport LuxonUtils from '@date-io/luxon';\nimport IconButton from '@material-ui/core/IconButton';\nimport ClearIcon from '@material-ui/icons/Clear';\n\ntype Props = {\n name: 'startDate' | 'endDate';\n control: Control<FormValues, object>;\n setValue: UseFormSetValue<FormValues>;\n};\n\nexport const DateSelector = ({ name, control, setValue }: Props) => {\n const label = `${\n name.charAt(0).toLocaleUpperCase('en-US') + name.slice(1, name.indexOf('D'))\n } date`;\n\n return (\n <Controller\n name={name}\n control={control}\n render={({ field }) => (\n <FormControl>\n <MuiPickersUtilsProvider utils={LuxonUtils}>\n <KeyboardDatePicker\n disableToolbar\n format=\"dd-MM-yyyy\"\n label={label}\n value={field.value}\n onChange={date => {\n setValue(name, date?.toISO());\n }}\n InputProps={{\n endAdornment: (\n <IconButton onClick={() => setValue(name, null)}>\n <ClearIcon />\n </IconButton>\n ),\n }}\n InputAdornmentProps={{\n position: 'start',\n }}\n />\n </MuiPickersUtilsProvider>\n </FormControl>\n )}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAgCO,MAAM,eAAe,CAAC,EAAE,IAAM,EAAA,OAAA,EAAS,UAAsB,KAAA;AAClE,EAAA,MAAM,QAAQ,CACZ,EAAA,IAAA,CAAK,MAAO,CAAA,CAAC,EAAE,iBAAkB,CAAA,OAAO,CAAI,GAAA,IAAA,CAAK,MAAM,CAAG,EAAA,IAAA,CAAK,OAAQ,CAAA,GAAG,CAAC,CAC7E,CAAA,KAAA,CAAA
|
|
1
|
+
{"version":3,"file":"DateSelector.esm.js","sources":["../../../src/components/DateSelector/DateSelector.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 React from 'react';\nimport FormControl from '@material-ui/core/FormControl';\nimport { Controller, Control, UseFormSetValue } from 'react-hook-form';\nimport { FormValues } from '../../types';\nimport { KeyboardDatePicker } from '@material-ui/pickers/DatePicker';\nimport MuiPickersUtilsProvider from '@material-ui/pickers/MuiPickersUtilsProvider';\nimport LuxonUtils from '@date-io/luxon';\nimport IconButton from '@material-ui/core/IconButton';\nimport ClearIcon from '@material-ui/icons/Clear';\n\ntype Props = {\n name: 'startDate' | 'endDate';\n control: Control<FormValues, object>;\n setValue: UseFormSetValue<FormValues>;\n};\n\nexport const DateSelector = ({ name, control, setValue }: Props) => {\n const label = `${\n name.charAt(0).toLocaleUpperCase('en-US') + name.slice(1, name.indexOf('D'))\n } date`;\n\n return (\n <Controller\n name={name}\n control={control}\n render={({ field }) => (\n <FormControl>\n <MuiPickersUtilsProvider utils={LuxonUtils}>\n <KeyboardDatePicker\n disableToolbar\n format=\"dd-MM-yyyy\"\n label={label}\n value={field.value}\n onChange={date => {\n setValue(name, date?.toISO());\n }}\n InputProps={{\n endAdornment: (\n <IconButton onClick={() => setValue(name, null)}>\n <ClearIcon />\n </IconButton>\n ),\n }}\n InputAdornmentProps={{\n position: 'start',\n }}\n />\n </MuiPickersUtilsProvider>\n </FormControl>\n )}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAgCO,MAAM,eAAe,CAAC,EAAE,IAAM,EAAA,OAAA,EAAS,UAAsB,KAAA;AAClE,EAAA,MAAM,QAAQ,CACZ,EAAA,IAAA,CAAK,MAAO,CAAA,CAAC,EAAE,iBAAkB,CAAA,OAAO,CAAI,GAAA,IAAA,CAAK,MAAM,CAAG,EAAA,IAAA,CAAK,OAAQ,CAAA,GAAG,CAAC,CAC7E,CAAA,KAAA,CAAA;AAEA,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA,EAAQ,CAAC,EAAE,KAAM,EAAA,yCACd,WACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,uBAAwB,EAAA,EAAA,KAAA,EAAO,UAC9B,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,kBAAA;AAAA,QAAA;AAAA,UACC,cAAc,EAAA,IAAA;AAAA,UACd,MAAO,EAAA,YAAA;AAAA,UACP,KAAA;AAAA,UACA,OAAO,KAAM,CAAA,KAAA;AAAA,UACb,UAAU,CAAQ,IAAA,KAAA;AAChB,YAAS,QAAA,CAAA,IAAA,EAAM,IAAM,EAAA,KAAA,EAAO,CAAA;AAAA,WAC9B;AAAA,UACA,UAAY,EAAA;AAAA,YACV,YAAA,kBACG,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,OAAS,EAAA,MAAM,QAAS,CAAA,IAAA,EAAM,IAAI,CAAA,EAAA,kBAC3C,KAAA,CAAA,aAAA,CAAA,SAAA,EAAA,IAAU,CACb;AAAA,WAEJ;AAAA,UACA,mBAAqB,EAAA;AAAA,YACnB,QAAU,EAAA;AAAA;AACZ;AAAA,OAEJ,CACF;AAAA;AAAA,GAEJ;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DoubleDateSelector.esm.js","sources":["../../../src/components/DoubleDateSelector/DoubleDateSelector.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 React from 'react';\nimport { Control, UseFormSetValue } from 'react-hook-form';\nimport { FormValues } from '../../types';\nimport { DateSelector } from '../DateSelector/DateSelector';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\n\ntype Props = {\n control: Control<FormValues, object>;\n setValue: UseFormSetValue<FormValues>;\n};\n\nconst useStyles = makeStyles({\n container: {\n marginTop: '0.25rem',\n textAlign: 'center',\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n startDate: {\n float: 'left',\n },\n endDate: {\n float: 'right',\n },\n dash: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n fontSize: '1.5rem',\n margin: '0 1rem',\n },\n});\n\nexport const DoubleDateSelector = ({ control, setValue }: Props) => {\n const classes = useStyles();\n\n return (\n <div className={classes.container}>\n <div className={classes.startDate}>\n <DateSelector name=\"startDate\" control={control} setValue={setValue} />\n </div>\n\n <Typography className={classes.dash}>-</Typography>\n <div className={classes.endDate}>\n <DateSelector name=\"endDate\" control={control} setValue={setValue} />\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;AA4BA,MAAM,YAAY,UAAW,CAAA;AAAA,EAC3B,SAAW,EAAA;AAAA,IACT,SAAW,EAAA,SAAA;AAAA,IACX,SAAW,EAAA,QAAA;AAAA,IACX,OAAS,EAAA,MAAA;AAAA,IACT,aAAe,EAAA,KAAA;AAAA,IACf,cAAgB,EAAA
|
|
1
|
+
{"version":3,"file":"DoubleDateSelector.esm.js","sources":["../../../src/components/DoubleDateSelector/DoubleDateSelector.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 React from 'react';\nimport { Control, UseFormSetValue } from 'react-hook-form';\nimport { FormValues } from '../../types';\nimport { DateSelector } from '../DateSelector/DateSelector';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\n\ntype Props = {\n control: Control<FormValues, object>;\n setValue: UseFormSetValue<FormValues>;\n};\n\nconst useStyles = makeStyles({\n container: {\n marginTop: '0.25rem',\n textAlign: 'center',\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n startDate: {\n float: 'left',\n },\n endDate: {\n float: 'right',\n },\n dash: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n fontSize: '1.5rem',\n margin: '0 1rem',\n },\n});\n\nexport const DoubleDateSelector = ({ control, setValue }: Props) => {\n const classes = useStyles();\n\n return (\n <div className={classes.container}>\n <div className={classes.startDate}>\n <DateSelector name=\"startDate\" control={control} setValue={setValue} />\n </div>\n\n <Typography className={classes.dash}>-</Typography>\n <div className={classes.endDate}>\n <DateSelector name=\"endDate\" control={control} setValue={setValue} />\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;AA4BA,MAAM,YAAY,UAAW,CAAA;AAAA,EAC3B,SAAW,EAAA;AAAA,IACT,SAAW,EAAA,SAAA;AAAA,IACX,SAAW,EAAA,QAAA;AAAA,IACX,OAAS,EAAA,MAAA;AAAA,IACT,aAAe,EAAA,KAAA;AAAA,IACf,cAAgB,EAAA;AAAA,GAClB;AAAA,EACA,SAAW,EAAA;AAAA,IACT,KAAO,EAAA;AAAA,GACT;AAAA,EACA,OAAS,EAAA;AAAA,IACP,KAAO,EAAA;AAAA,GACT;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,OAAS,EAAA,MAAA;AAAA,IACT,cAAgB,EAAA,QAAA;AAAA,IAChB,UAAY,EAAA,QAAA;AAAA,IACZ,QAAU,EAAA,QAAA;AAAA,IACV,MAAQ,EAAA;AAAA;AAEZ,CAAC,CAAA;AAEM,MAAM,kBAAqB,GAAA,CAAC,EAAE,OAAA,EAAS,UAAsB,KAAA;AAClE,EAAA,MAAM,UAAU,SAAU,EAAA;AAE1B,EAAA,2CACG,KAAI,EAAA,EAAA,SAAA,EAAW,OAAQ,CAAA,SAAA,EAAA,sCACrB,KAAI,EAAA,EAAA,SAAA,EAAW,OAAQ,CAAA,SAAA,EAAA,sCACrB,YAAa,EAAA,EAAA,IAAA,EAAK,WAAY,EAAA,OAAA,EAAkB,UAAoB,CACvE,CAAA,kBAEC,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,WAAW,OAAQ,CAAA,IAAA,EAAA,EAAM,GAAC,CAAA,sCACrC,KAAI,EAAA,EAAA,SAAA,EAAW,OAAQ,CAAA,OAAA,EAAA,sCACrB,YAAa,EAAA,EAAA,IAAA,EAAK,WAAU,OAAkB,EAAA,QAAA,EAAoB,CACrE,CACF,CAAA;AAEJ;;;;"}
|
|
@@ -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 React, { useState, useEffect } from 'react';\nimport { useApi, alertApiRef } from '@backstage/core-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(alertApiRef);\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 message: `Deleted project '${bazaarProject.title}' from the Bazaar list`,\n severity: 'success',\n display: 'transient',\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 message: `Updated project '${formValues.title}' in the Bazaar list`,\n severity: 'success',\n display: 'transient',\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":";;;;;;;;AAkCA,MAAM,YAAY,UAAW,CAAA;AAAA,EAC3B,MAAQ,EAAA;AAAA,IACN,UAAY,EAAA,GAAA;AAAA,IACZ,WAAa,EAAA
|
|
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 React, { useState, useEffect } from 'react';\nimport { useApi, alertApiRef } from '@backstage/core-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(alertApiRef);\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 message: `Deleted project '${bazaarProject.title}' from the Bazaar list`,\n severity: 'success',\n display: 'transient',\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 message: `Updated project '${formValues.title}' in the Bazaar list`,\n severity: 'success',\n display: 'transient',\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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityBazaarInfoCard.esm.js","sources":["../../../src/components/EntityBazaarInfoCard/EntityBazaarInfoCard.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 React, { useState, useEffect } from 'react';\nimport useAsyncFn from 'react-use/esm/useAsyncFn';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport { bazaarApiRef } from '../../api';\nimport { EntityBazaarInfoContent } from '../EntityBazaarInfoContent';\nimport Card from '@material-ui/core/Card';\nimport { parseBazaarResponse } from '../../util/parseMethods';\n\n/** @public */\nexport const EntityBazaarInfoCard = () => {\n const { entity } = useEntity();\n const bazaarApi = useApi(bazaarApiRef);\n\n const [bazaarProject, fetchBazaarProject] = useAsyncFn(async () => {\n const response = await bazaarApi.getProjectByRef(\n stringifyEntityRef(entity),\n );\n\n return await parseBazaarResponse(response);\n });\n\n const [isBazaar, setIsBazaar] = useState(bazaarProject.value ?? false);\n\n useEffect(() => {\n fetchBazaarProject();\n }, [fetchBazaarProject]);\n\n useEffect(() => {\n const isBazaarProject = bazaarProject.value !== undefined;\n\n setIsBazaar(isBazaarProject);\n }, [bazaarProject.value]);\n\n if (isBazaar) {\n return (\n <Card>\n <EntityBazaarInfoContent\n bazaarProject={bazaarProject.value}\n fetchBazaarProject={fetchBazaarProject}\n />\n </Card>\n );\n }\n return null;\n};\n"],"names":[],"mappings":";;;;;;;;;;AA2BO,MAAM,uBAAuB,MAAM;AACxC,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA
|
|
1
|
+
{"version":3,"file":"EntityBazaarInfoCard.esm.js","sources":["../../../src/components/EntityBazaarInfoCard/EntityBazaarInfoCard.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 React, { useState, useEffect } from 'react';\nimport useAsyncFn from 'react-use/esm/useAsyncFn';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport { bazaarApiRef } from '../../api';\nimport { EntityBazaarInfoContent } from '../EntityBazaarInfoContent';\nimport Card from '@material-ui/core/Card';\nimport { parseBazaarResponse } from '../../util/parseMethods';\n\n/** @public */\nexport const EntityBazaarInfoCard = () => {\n const { entity } = useEntity();\n const bazaarApi = useApi(bazaarApiRef);\n\n const [bazaarProject, fetchBazaarProject] = useAsyncFn(async () => {\n const response = await bazaarApi.getProjectByRef(\n stringifyEntityRef(entity),\n );\n\n return await parseBazaarResponse(response);\n });\n\n const [isBazaar, setIsBazaar] = useState(bazaarProject.value ?? false);\n\n useEffect(() => {\n fetchBazaarProject();\n }, [fetchBazaarProject]);\n\n useEffect(() => {\n const isBazaarProject = bazaarProject.value !== undefined;\n\n setIsBazaar(isBazaarProject);\n }, [bazaarProject.value]);\n\n if (isBazaar) {\n return (\n <Card>\n <EntityBazaarInfoContent\n bazaarProject={bazaarProject.value}\n fetchBazaarProject={fetchBazaarProject}\n />\n </Card>\n );\n }\n return null;\n};\n"],"names":[],"mappings":";;;;;;;;;;AA2BO,MAAM,uBAAuB,MAAM;AACxC,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA;AAC7B,EAAM,MAAA,SAAA,GAAY,OAAO,YAAY,CAAA;AAErC,EAAA,MAAM,CAAC,aAAA,EAAe,kBAAkB,CAAA,GAAI,WAAW,YAAY;AACjE,IAAM,MAAA,QAAA,GAAW,MAAM,SAAU,CAAA,eAAA;AAAA,MAC/B,mBAAmB,MAAM;AAAA,KAC3B;AAEA,IAAO,OAAA,MAAM,oBAAoB,QAAQ,CAAA;AAAA,GAC1C,CAAA;AAED,EAAA,MAAM,CAAC,QAAU,EAAA,WAAW,IAAI,QAAS,CAAA,aAAA,CAAc,SAAS,KAAK,CAAA;AAErE,EAAA,SAAA,CAAU,MAAM;AACd,IAAmB,kBAAA,EAAA;AAAA,GACrB,EAAG,CAAC,kBAAkB,CAAC,CAAA;AAEvB,EAAA,SAAA,CAAU,MAAM;AACd,IAAM,MAAA,eAAA,GAAkB,cAAc,KAAU,KAAA,KAAA,CAAA;AAEhD,IAAA,WAAA,CAAY,eAAe,CAAA;AAAA,GAC1B,EAAA,CAAC,aAAc,CAAA,KAAK,CAAC,CAAA;AAExB,EAAA,IAAI,QAAU,EAAA;AACZ,IAAA,2CACG,IACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,uBAAA;AAAA,MAAA;AAAA,QACC,eAAe,aAAc,CAAA,KAAA;AAAA,QAC7B;AAAA;AAAA,KAEJ,CAAA;AAAA;AAGJ,EAAO,OAAA,IAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityBazaarInfoContent.esm.js","sources":["../../../src/components/EntityBazaarInfoContent/EntityBazaarInfoContent.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 React, { useState, useEffect } from 'react';\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 DashboardIcon from '@material-ui/icons/Dashboard';\nimport LinkOffIcon from '@material-ui/icons/LinkOff';\nimport Description from '@material-ui/icons/Description';\nimport { EditProjectDialog } from '../EditProjectDialog';\nimport { useApi, identityApiRef } from '@backstage/core-plugin-api';\nimport { BazaarProject, Member } from '../../types';\nimport { bazaarApiRef } from '../../api';\nimport Alert from '@material-ui/lab/Alert';\nimport useAsyncFn from 'react-use/esm/useAsyncFn';\nimport ExitToAppIcon from '@material-ui/icons/ExitToApp';\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { ConfirmationDialog } from '../ConfirmationDialog';\nimport { CardContentFields } from '../CardContentFields';\nimport { fetchProjectMembers } from '../../util/fetchMethods';\n\nconst useStyles = makeStyles({\n wordBreak: {\n wordBreak: 'break-all',\n whiteSpace: 'normal',\n margin: '-0.25rem 0',\n },\n});\n\ntype Props = {\n bazaarProject: BazaarProject | null | undefined;\n fetchBazaarProject: () => Promise<BazaarProject | null>;\n};\n\nexport const EntityBazaarInfoContent = ({\n bazaarProject,\n fetchBazaarProject,\n}: Props) => {\n const classes = useStyles();\n const bazaarApi = useApi(bazaarApiRef);\n const identity = useApi(identityApiRef);\n const [openEdit, setOpenEdit] = useState(false);\n const [isMember, setIsMember] = useState(false);\n const [openUnlink, setOpenUnlink] = useState(false);\n const [members, fetchMembers] = useAsyncFn(async () => {\n return bazaarProject\n ? await fetchProjectMembers(bazaarApi, bazaarProject)\n : [];\n });\n\n const [userId, fetchUserId] = useAsyncFn(async () => {\n return await (\n await identity.getProfileInfo()\n ).displayName;\n });\n\n useEffect(() => {\n fetchMembers();\n fetchUserId();\n }, [fetchMembers, 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, members, identity, userId.value]);\n\n const handleMembersClick = async () => {\n if (userId.value) {\n if (!isMember) {\n await bazaarApi.addMember(bazaarProject?.id!, userId.value);\n } else {\n await bazaarApi.deleteMember(bazaarProject!.id, userId.value);\n }\n setIsMember(!isMember);\n fetchMembers();\n }\n };\n\n const links: IconLinkVerticalProps[] = [\n {\n label: 'Entity page',\n icon: <DashboardIcon />,\n disabled: true,\n },\n {\n label: 'Unlink project',\n icon: <LinkOffIcon />,\n disabled: false,\n onClick: () => {\n setOpenUnlink(true);\n },\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?.community,\n disabled: bazaarProject?.community === '' || !isMember,\n },\n {\n label: 'Docs',\n icon: <Description />,\n href: bazaarProject?.docs,\n disabled: bazaarProject?.docs === null || bazaarProject?.docs === '',\n },\n ];\n\n const handleEditClose = () => {\n setOpenEdit(false);\n };\n\n const handleUnlinkClose = () => {\n setOpenUnlink(false);\n };\n\n const handleUnlinkSubmit = async () => {\n const updateResponse = await bazaarApi.updateProject({\n ...bazaarProject,\n entityRef: null,\n });\n\n if (updateResponse.status === 'ok') {\n handleUnlinkClose();\n fetchBazaarProject();\n }\n };\n\n if (members.error) {\n return <Alert severity=\"error\">{members?.error?.message}</Alert>;\n }\n\n if (bazaarProject) {\n return (\n <div>\n <EditProjectDialog\n bazaarProject={bazaarProject!}\n openEdit={openEdit}\n handleEditClose={handleEditClose}\n fetchBazaarProject={fetchBazaarProject}\n />\n\n {openUnlink && (\n <ConfirmationDialog\n open={openUnlink}\n handleClose={handleUnlinkClose}\n message={[\n 'Are you sure you want to unlink ',\n <b className={classes.wordBreak}>\n {parseEntityRef(bazaarProject.entityRef!).name}\n </b>,\n ' from ',\n <b className={classes.wordBreak}>{bazaarProject.title}</b>,\n ' ?',\n ]}\n type=\"unlink\"\n handleSubmit={handleUnlinkSubmit}\n />\n )}\n\n <CardHeader\n title={\n <Typography paragraph className={classes.wordBreak}>\n {bazaarProject?.title!}\n </Typography>\n }\n action={\n <div>\n <IconButton\n onClick={() => {\n setOpenEdit(true);\n }}\n >\n <EditIcon />\n </IconButton>\n </div>\n }\n subheader={<HeaderIconLinkRow links={links} />}\n />\n <Divider />\n\n <CardContentFields\n bazaarProject={bazaarProject}\n members={members.value || []}\n descriptionSize={10}\n membersSize={2}\n isMember={isMember}\n />\n </div>\n );\n }\n return null;\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EntityBazaarInfoContent.esm.js","sources":["../../../src/components/EntityBazaarInfoContent/EntityBazaarInfoContent.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 React, { useState, useEffect } from 'react';\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 DashboardIcon from '@material-ui/icons/Dashboard';\nimport LinkOffIcon from '@material-ui/icons/LinkOff';\nimport Description from '@material-ui/icons/Description';\nimport { EditProjectDialog } from '../EditProjectDialog';\nimport { useApi, identityApiRef } from '@backstage/core-plugin-api';\nimport { BazaarProject, Member } from '../../types';\nimport { bazaarApiRef } from '../../api';\nimport Alert from '@material-ui/lab/Alert';\nimport useAsyncFn from 'react-use/esm/useAsyncFn';\nimport ExitToAppIcon from '@material-ui/icons/ExitToApp';\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { ConfirmationDialog } from '../ConfirmationDialog';\nimport { CardContentFields } from '../CardContentFields';\nimport { fetchProjectMembers } from '../../util/fetchMethods';\n\nconst useStyles = makeStyles({\n wordBreak: {\n wordBreak: 'break-all',\n whiteSpace: 'normal',\n margin: '-0.25rem 0',\n },\n});\n\ntype Props = {\n bazaarProject: BazaarProject | null | undefined;\n fetchBazaarProject: () => Promise<BazaarProject | null>;\n};\n\nexport const EntityBazaarInfoContent = ({\n bazaarProject,\n fetchBazaarProject,\n}: Props) => {\n const classes = useStyles();\n const bazaarApi = useApi(bazaarApiRef);\n const identity = useApi(identityApiRef);\n const [openEdit, setOpenEdit] = useState(false);\n const [isMember, setIsMember] = useState(false);\n const [openUnlink, setOpenUnlink] = useState(false);\n const [members, fetchMembers] = useAsyncFn(async () => {\n return bazaarProject\n ? await fetchProjectMembers(bazaarApi, bazaarProject)\n : [];\n });\n\n const [userId, fetchUserId] = useAsyncFn(async () => {\n return await (\n await identity.getProfileInfo()\n ).displayName;\n });\n\n useEffect(() => {\n fetchMembers();\n fetchUserId();\n }, [fetchMembers, 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, members, identity, userId.value]);\n\n const handleMembersClick = async () => {\n if (userId.value) {\n if (!isMember) {\n await bazaarApi.addMember(bazaarProject?.id!, userId.value);\n } else {\n await bazaarApi.deleteMember(bazaarProject!.id, userId.value);\n }\n setIsMember(!isMember);\n fetchMembers();\n }\n };\n\n const links: IconLinkVerticalProps[] = [\n {\n label: 'Entity page',\n icon: <DashboardIcon />,\n disabled: true,\n },\n {\n label: 'Unlink project',\n icon: <LinkOffIcon />,\n disabled: false,\n onClick: () => {\n setOpenUnlink(true);\n },\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?.community,\n disabled: bazaarProject?.community === '' || !isMember,\n },\n {\n label: 'Docs',\n icon: <Description />,\n href: bazaarProject?.docs,\n disabled: bazaarProject?.docs === null || bazaarProject?.docs === '',\n },\n ];\n\n const handleEditClose = () => {\n setOpenEdit(false);\n };\n\n const handleUnlinkClose = () => {\n setOpenUnlink(false);\n };\n\n const handleUnlinkSubmit = async () => {\n const updateResponse = await bazaarApi.updateProject({\n ...bazaarProject,\n entityRef: null,\n });\n\n if (updateResponse.status === 'ok') {\n handleUnlinkClose();\n fetchBazaarProject();\n }\n };\n\n if (members.error) {\n return <Alert severity=\"error\">{members?.error?.message}</Alert>;\n }\n\n if (bazaarProject) {\n return (\n <div>\n <EditProjectDialog\n bazaarProject={bazaarProject!}\n openEdit={openEdit}\n handleEditClose={handleEditClose}\n fetchBazaarProject={fetchBazaarProject}\n />\n\n {openUnlink && (\n <ConfirmationDialog\n open={openUnlink}\n handleClose={handleUnlinkClose}\n message={[\n 'Are you sure you want to unlink ',\n <b className={classes.wordBreak}>\n {parseEntityRef(bazaarProject.entityRef!).name}\n </b>,\n ' from ',\n <b className={classes.wordBreak}>{bazaarProject.title}</b>,\n ' ?',\n ]}\n type=\"unlink\"\n handleSubmit={handleUnlinkSubmit}\n />\n )}\n\n <CardHeader\n title={\n <Typography paragraph className={classes.wordBreak}>\n {bazaarProject?.title!}\n </Typography>\n }\n action={\n <div>\n <IconButton\n onClick={() => {\n setOpenEdit(true);\n }}\n >\n <EditIcon />\n </IconButton>\n </div>\n }\n subheader={<HeaderIconLinkRow links={links} />}\n />\n <Divider />\n\n <CardContentFields\n bazaarProject={bazaarProject}\n members={members.value || []}\n descriptionSize={10}\n membersSize={2}\n isMember={isMember}\n />\n </div>\n );\n }\n return null;\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA4CA,MAAM,YAAY,UAAW,CAAA;AAAA,EAC3B,SAAW,EAAA;AAAA,IACT,SAAW,EAAA,WAAA;AAAA,IACX,UAAY,EAAA,QAAA;AAAA,IACZ,MAAQ,EAAA;AAAA;AAEZ,CAAC,CAAA;AAOM,MAAM,0BAA0B,CAAC;AAAA,EACtC,aAAA;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,cAAc,CAAA;AACtC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,OAAA,EAAS,YAAY,CAAA,GAAI,WAAW,YAAY;AACrD,IAAA,OAAO,gBACH,MAAM,mBAAA,CAAoB,SAAW,EAAA,aAAa,IAClD,EAAC;AAAA,GACN,CAAA;AAED,EAAA,MAAM,CAAC,MAAA,EAAQ,WAAW,CAAA,GAAI,WAAW,YAAY;AACnD,IAAA,OAAO,MACL,CAAA,MAAM,QAAS,CAAA,cAAA,EACf,EAAA,WAAA;AAAA,GACH,CAAA;AAED,EAAA,SAAA,CAAU,MAAM;AACd,IAAa,YAAA,EAAA;AACb,IAAY,WAAA,EAAA;AAAA,GACX,EAAA,CAAC,YAAc,EAAA,WAAW,CAAC,CAAA;AAE9B,EAAA,SAAA,CAAU,MAAM;AACd,IAAI,IAAA,OAAA,CAAQ,KAAS,IAAA,MAAA,CAAO,KAAO,EAAA;AACjC,MAAA,WAAA;AAAA,QACE,OAAA,CAAQ,KACJ,EAAA,GAAA,CAAI,CAAC,MAAA,KAAmB,MAAO,CAAA,MAAM,CACtC,CAAA,OAAA,CAAQ,MAAO,CAAA,KAAK,CAAK,IAAA;AAAA,OAC9B;AAAA;AACF,KACC,CAAC,aAAA,EAAe,SAAS,QAAU,EAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAEnD,EAAA,MAAM,qBAAqB,YAAY;AACrC,IAAA,IAAI,OAAO,KAAO,EAAA;AAChB,MAAA,IAAI,CAAC,QAAU,EAAA;AACb,QAAA,MAAM,SAAU,CAAA,SAAA,CAAU,aAAe,EAAA,EAAA,EAAK,OAAO,KAAK,CAAA;AAAA,OACrD,MAAA;AACL,QAAA,MAAM,SAAU,CAAA,YAAA,CAAa,aAAe,CAAA,EAAA,EAAI,OAAO,KAAK,CAAA;AAAA;AAE9D,MAAA,WAAA,CAAY,CAAC,QAAQ,CAAA;AACrB,MAAa,YAAA,EAAA;AAAA;AACf,GACF;AAEA,EAAA,MAAM,KAAiC,GAAA;AAAA,IACrC;AAAA,MACE,KAAO,EAAA,aAAA;AAAA,MACP,IAAA,sCAAO,aAAc,EAAA,IAAA,CAAA;AAAA,MACrB,QAAU,EAAA;AAAA,KACZ;AAAA,IACA;AAAA,MACE,KAAO,EAAA,gBAAA;AAAA,MACP,IAAA,sCAAO,WAAY,EAAA,IAAA,CAAA;AAAA,MACnB,QAAU,EAAA,KAAA;AAAA,MACV,SAAS,MAAM;AACb,QAAA,aAAA,CAAc,IAAI,CAAA;AAAA;AACpB,KACF;AAAA,IACA;AAAA,MACE,KAAA,EAAO,WAAW,OAAU,GAAA,MAAA;AAAA,MAC5B,MAAM,QAAW,mBAAA,KAAA,CAAA,aAAA,CAAC,aAAc,EAAA,IAAA,CAAA,uCAAM,aAAc,EAAA,IAAA,CAAA;AAAA,MACpD,IAAM,EAAA,EAAA;AAAA,MACN,SAAS,YAAY;AACnB,QAAmB,kBAAA,EAAA;AAAA;AACrB,KACF;AAAA,IACA;AAAA,MACE,KAAO,EAAA,WAAA;AAAA,MACP,IAAA,sCAAO,QAAS,EAAA,IAAA,CAAA;AAAA,MAChB,MAAM,aAAe,EAAA,SAAA;AAAA,MACrB,QAAU,EAAA,aAAA,EAAe,SAAc,KAAA,EAAA,IAAM,CAAC;AAAA,KAChD;AAAA,IACA;AAAA,MACE,KAAO,EAAA,MAAA;AAAA,MACP,IAAA,sCAAO,WAAY,EAAA,IAAA,CAAA;AAAA,MACnB,MAAM,aAAe,EAAA,IAAA;AAAA,MACrB,QAAU,EAAA,aAAA,EAAe,IAAS,KAAA,IAAA,IAAQ,eAAe,IAAS,KAAA;AAAA;AACpE,GACF;AAEA,EAAA,MAAM,kBAAkB,MAAM;AAC5B,IAAA,WAAA,CAAY,KAAK,CAAA;AAAA,GACnB;AAEA,EAAA,MAAM,oBAAoB,MAAM;AAC9B,IAAA,aAAA,CAAc,KAAK,CAAA;AAAA,GACrB;AAEA,EAAA,MAAM,qBAAqB,YAAY;AACrC,IAAM,MAAA,cAAA,GAAiB,MAAM,SAAA,CAAU,aAAc,CAAA;AAAA,MACnD,GAAG,aAAA;AAAA,MACH,SAAW,EAAA;AAAA,KACZ,CAAA;AAED,IAAI,IAAA,cAAA,CAAe,WAAW,IAAM,EAAA;AAClC,MAAkB,iBAAA,EAAA;AAClB,MAAmB,kBAAA,EAAA;AAAA;AACrB,GACF;AAEA,EAAA,IAAI,QAAQ,KAAO,EAAA;AACjB,IAAA,2CAAQ,KAAM,EAAA,EAAA,QAAA,EAAS,OAAS,EAAA,EAAA,OAAA,EAAS,OAAO,OAAQ,CAAA;AAAA;AAG1D,EAAA,IAAI,aAAe,EAAA;AACjB,IAAA,2CACG,KACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,aAAA;AAAA,QACA,QAAA;AAAA,QACA,eAAA;AAAA,QACA;AAAA;AAAA,OAGD,UACC,oBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,kBAAA;AAAA,MAAA;AAAA,QACC,IAAM,EAAA,UAAA;AAAA,QACN,WAAa,EAAA,iBAAA;AAAA,QACb,OAAS,EAAA;AAAA,UACP,kCAAA;AAAA,0BACA,KAAA,CAAA,aAAA,CAAC,OAAE,SAAW,EAAA,OAAA,CAAQ,aACnB,cAAe,CAAA,aAAA,CAAc,SAAU,CAAA,CAAE,IAC5C,CAAA;AAAA,UACA,QAAA;AAAA,8CACC,GAAE,EAAA,EAAA,SAAA,EAAW,OAAQ,CAAA,SAAA,EAAA,EAAY,cAAc,KAAM,CAAA;AAAA,UACtD;AAAA,SACF;AAAA,QACA,IAAK,EAAA,QAAA;AAAA,QACL,YAAc,EAAA;AAAA;AAAA,KAIlB,kBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,KAAA,sCACG,UAAW,EAAA,EAAA,SAAA,EAAS,MAAC,SAAW,EAAA,OAAA,CAAQ,SACtC,EAAA,EAAA,aAAA,EAAe,KAClB,CAAA;AAAA,QAEF,MAAA,sCACG,KACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,SAAS,MAAM;AACb,cAAA,WAAA,CAAY,IAAI,CAAA;AAAA;AAClB,WAAA;AAAA,8CAEC,QAAS,EAAA,IAAA;AAAA,SAEd,CAAA;AAAA,QAEF,SAAA,kBAAY,KAAA,CAAA,aAAA,CAAA,iBAAA,EAAA,EAAkB,KAAc,EAAA;AAAA;AAAA,KAC9C,kBACC,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAQ,CAET,kBAAA,KAAA,CAAA,aAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,aAAA;AAAA,QACA,OAAA,EAAS,OAAQ,CAAA,KAAA,IAAS,EAAC;AAAA,QAC3B,eAAiB,EAAA,EAAA;AAAA,QACjB,WAAa,EAAA,CAAA;AAAA,QACb;AAAA;AAAA,KAEJ,CAAA;AAAA;AAGJ,EAAO,OAAA,IAAA;AACT;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HomePage.esm.js","sources":["../../../src/components/HomePage/HomePage.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 React from 'react';\nimport { Header, RoutedTabs } from '@backstage/core-components';\nimport { SortView } from '../SortView';\nimport { About } from '../About';\n\n/** @public */\nexport type HomePageProps = {\n title?: string;\n subtitle?: string;\n fullWidth?: boolean;\n fullHeight?: boolean;\n};\n\nexport const HomePage = (props: HomePageProps) => {\n const { title, subtitle, fullWidth, fullHeight } = props;\n\n const tabContent = [\n {\n path: '/',\n title: 'Home',\n children: <SortView fullWidth={fullWidth} fullHeight={fullHeight} />,\n },\n {\n path: '/about',\n title: 'About',\n children: <About />,\n },\n ];\n\n return (\n <div>\n <Header\n title={title || 'Bazaar'}\n subtitle={subtitle || 'Marketplace for inner source projects'}\n />\n <RoutedTabs routes={tabContent} />\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;AA6Ba,MAAA,QAAA,GAAW,CAAC,KAAyB,KAAA;AAChD,EAAA,MAAM,EAAE,KAAA,EAAO,QAAU,EAAA,SAAA,EAAW,YAAe,GAAA,KAAA
|
|
1
|
+
{"version":3,"file":"HomePage.esm.js","sources":["../../../src/components/HomePage/HomePage.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 React from 'react';\nimport { Header, RoutedTabs } from '@backstage/core-components';\nimport { SortView } from '../SortView';\nimport { About } from '../About';\n\n/** @public */\nexport type HomePageProps = {\n title?: string;\n subtitle?: string;\n fullWidth?: boolean;\n fullHeight?: boolean;\n};\n\nexport const HomePage = (props: HomePageProps) => {\n const { title, subtitle, fullWidth, fullHeight } = props;\n\n const tabContent = [\n {\n path: '/',\n title: 'Home',\n children: <SortView fullWidth={fullWidth} fullHeight={fullHeight} />,\n },\n {\n path: '/about',\n title: 'About',\n children: <About />,\n },\n ];\n\n return (\n <div>\n <Header\n title={title || 'Bazaar'}\n subtitle={subtitle || 'Marketplace for inner source projects'}\n />\n <RoutedTabs routes={tabContent} />\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;AA6Ba,MAAA,QAAA,GAAW,CAAC,KAAyB,KAAA;AAChD,EAAA,MAAM,EAAE,KAAA,EAAO,QAAU,EAAA,SAAA,EAAW,YAAe,GAAA,KAAA;AAEnD,EAAA,MAAM,UAAa,GAAA;AAAA,IACjB;AAAA,MACE,IAAM,EAAA,GAAA;AAAA,MACN,KAAO,EAAA,MAAA;AAAA,MACP,QAAU,kBAAA,KAAA,CAAA,aAAA,CAAC,QAAS,EAAA,EAAA,SAAA,EAAsB,UAAwB,EAAA;AAAA,KACpE;AAAA,IACA;AAAA,MACE,IAAM,EAAA,QAAA;AAAA,MACN,KAAO,EAAA,OAAA;AAAA,MACP,QAAA,sCAAW,KAAM,EAAA,IAAA;AAAA;AACnB,GACF;AAEA,EAAA,2CACG,KACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAO,KAAS,IAAA,QAAA;AAAA,MAChB,UAAU,QAAY,IAAA;AAAA;AAAA,GAExB,kBAAA,KAAA,CAAA,aAAA,CAAC,UAAW,EAAA,EAAA,MAAA,EAAQ,YAAY,CAClC,CAAA;AAEJ;;;;"}
|
|
@@ -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 React, { 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 React, { 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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputField.esm.js","sources":["../../../src/components/InputField/InputField.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 React from 'react';\nimport {\n Controller,\n Control,\n FieldError,\n ValidationRule,\n} from 'react-hook-form';\nimport TextField from '@material-ui/core/TextField';\nimport { FormValues } from '../../types';\n\ntype Rules = {\n required: boolean;\n pattern?: ValidationRule<RegExp> | undefined;\n};\n\ntype Props = {\n inputType: 'description' | 'community' | 'responsible' | 'title' | 'docs';\n error?: FieldError | undefined;\n control: Control<FormValues, object>;\n helperText?: string;\n placeholder?: string;\n rules?: Rules | undefined;\n};\n\nexport const InputField = ({\n inputType,\n error,\n control,\n helperText,\n placeholder,\n rules,\n}: Props) => {\n const label =\n inputType.charAt(0).toLocaleUpperCase('en-US') + inputType.slice(1);\n\n return (\n <Controller\n name={inputType}\n control={control}\n rules={rules}\n render={({ field }) => (\n <TextField\n {...field}\n required={rules?.required}\n margin=\"dense\"\n multiline\n id=\"title\"\n type=\"text\"\n fullWidth\n label={label}\n placeholder={placeholder}\n error={!!error}\n helperText={error && helperText}\n />\n )}\n />\n );\n};\n"],"names":[],"mappings":";;;;AAwCO,MAAM,aAAa,CAAC;AAAA,EACzB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA
|
|
1
|
+
{"version":3,"file":"InputField.esm.js","sources":["../../../src/components/InputField/InputField.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 React from 'react';\nimport {\n Controller,\n Control,\n FieldError,\n ValidationRule,\n} from 'react-hook-form';\nimport TextField from '@material-ui/core/TextField';\nimport { FormValues } from '../../types';\n\ntype Rules = {\n required: boolean;\n pattern?: ValidationRule<RegExp> | undefined;\n};\n\ntype Props = {\n inputType: 'description' | 'community' | 'responsible' | 'title' | 'docs';\n error?: FieldError | undefined;\n control: Control<FormValues, object>;\n helperText?: string;\n placeholder?: string;\n rules?: Rules | undefined;\n};\n\nexport const InputField = ({\n inputType,\n error,\n control,\n helperText,\n placeholder,\n rules,\n}: Props) => {\n const label =\n inputType.charAt(0).toLocaleUpperCase('en-US') + inputType.slice(1);\n\n return (\n <Controller\n name={inputType}\n control={control}\n rules={rules}\n render={({ field }) => (\n <TextField\n {...field}\n required={rules?.required}\n margin=\"dense\"\n multiline\n id=\"title\"\n type=\"text\"\n fullWidth\n label={label}\n placeholder={placeholder}\n error={!!error}\n helperText={error && helperText}\n />\n )}\n />\n );\n};\n"],"names":[],"mappings":";;;;AAwCO,MAAM,aAAa,CAAC;AAAA,EACzB,SAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAa,KAAA;AACX,EAAM,MAAA,KAAA,GACJ,SAAU,CAAA,MAAA,CAAO,CAAC,CAAA,CAAE,kBAAkB,OAAO,CAAA,GAAI,SAAU,CAAA,KAAA,CAAM,CAAC,CAAA;AAEpE,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,IAAM,EAAA,SAAA;AAAA,MACN,OAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAQ,EAAA,CAAC,EAAE,KAAA,EACT,qBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACE,GAAG,KAAA;AAAA,UACJ,UAAU,KAAO,EAAA,QAAA;AAAA,UACjB,MAAO,EAAA,OAAA;AAAA,UACP,SAAS,EAAA,IAAA;AAAA,UACT,EAAG,EAAA,OAAA;AAAA,UACH,IAAK,EAAA,MAAA;AAAA,UACL,SAAS,EAAA,IAAA;AAAA,UACT,KAAA;AAAA,UACA,WAAA;AAAA,UACA,KAAA,EAAO,CAAC,CAAC,KAAA;AAAA,UACT,YAAY,KAAS,IAAA;AAAA;AAAA;AACvB;AAAA,GAEJ;AAEJ;;;;"}
|