@backstage-community/plugin-bazaar 0.2.27 → 0.2.28

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.
Files changed (67) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/api.esm.js +120 -0
  3. package/dist/api.esm.js.map +1 -0
  4. package/dist/{esm/index-CM8Pdxty.esm.js → components/About/About.esm.js} +3 -70
  5. package/dist/components/About/About.esm.js.map +1 -0
  6. package/dist/components/AddProjectDialog/AddProjectDialog.esm.js +76 -0
  7. package/dist/components/AddProjectDialog/AddProjectDialog.esm.js.map +1 -0
  8. package/dist/components/BazaarOverviewCard/BazaarOverviewCard.esm.js +107 -0
  9. package/dist/components/BazaarOverviewCard/BazaarOverviewCard.esm.js.map +1 -0
  10. package/dist/components/CardContentFields/AboutField.esm.js +33 -0
  11. package/dist/components/CardContentFields/AboutField.esm.js.map +1 -0
  12. package/dist/components/CardContentFields/CardContentFields.esm.js +87 -0
  13. package/dist/components/CardContentFields/CardContentFields.esm.js.map +1 -0
  14. package/dist/components/ConfirmationDialog/ConfirmationDialog.esm.js +29 -0
  15. package/dist/components/ConfirmationDialog/ConfirmationDialog.esm.js.map +1 -0
  16. package/dist/components/CustomDialogTitle/CustomDialogTitle.esm.js +49 -0
  17. package/dist/components/CustomDialogTitle/CustomDialogTitle.esm.js.map +1 -0
  18. package/dist/components/DateSelector/DateSelector.esm.js +40 -0
  19. package/dist/components/DateSelector/DateSelector.esm.js.map +1 -0
  20. package/dist/components/DoubleDateSelector/DoubleDateSelector.esm.js +34 -0
  21. package/dist/components/DoubleDateSelector/DoubleDateSelector.esm.js.map +1 -0
  22. package/dist/components/EditProjectDialog/EditProjectDialog.esm.js +115 -0
  23. package/dist/components/EditProjectDialog/EditProjectDialog.esm.js.map +1 -0
  24. package/dist/components/EntityBazaarInfoCard/EntityBazaarInfoCard.esm.js +41 -0
  25. package/dist/components/EntityBazaarInfoCard/EntityBazaarInfoCard.esm.js.map +1 -0
  26. package/dist/components/EntityBazaarInfoContent/EntityBazaarInfoContent.esm.js +177 -0
  27. package/dist/components/EntityBazaarInfoContent/EntityBazaarInfoContent.esm.js.map +1 -0
  28. package/dist/components/HomePage/HomePage.esm.js +30 -0
  29. package/dist/components/HomePage/HomePage.esm.js.map +1 -0
  30. package/dist/components/HomePage/index.esm.js +2 -0
  31. package/dist/components/HomePage/index.esm.js.map +1 -0
  32. package/dist/components/HomePageBazaarInfoCard/HomePageBazaarInfoCard.esm.js +218 -0
  33. package/dist/components/HomePageBazaarInfoCard/HomePageBazaarInfoCard.esm.js.map +1 -0
  34. package/dist/components/InputField/InputField.esm.js +41 -0
  35. package/dist/components/InputField/InputField.esm.js.map +1 -0
  36. package/dist/components/InputSelector/InputSelector.esm.js +47 -0
  37. package/dist/components/InputSelector/InputSelector.esm.js.map +1 -0
  38. package/dist/components/LinkProjectDialog/LinkProjectDialog.esm.js +68 -0
  39. package/dist/components/LinkProjectDialog/LinkProjectDialog.esm.js.map +1 -0
  40. package/dist/components/ProjectCard/ProjectCard.esm.js +70 -0
  41. package/dist/components/ProjectCard/ProjectCard.esm.js.map +1 -0
  42. package/dist/components/ProjectDialog/ProjectDialog.esm.js +143 -0
  43. package/dist/components/ProjectDialog/ProjectDialog.esm.js.map +1 -0
  44. package/dist/components/ProjectPreview/ProjectPreview.esm.js +79 -0
  45. package/dist/components/ProjectPreview/ProjectPreview.esm.js.map +1 -0
  46. package/dist/components/ProjectSelector/ProjectSelector.esm.js +38 -0
  47. package/dist/components/ProjectSelector/ProjectSelector.esm.js.map +1 -0
  48. package/dist/components/SortMethodSelector/SortMethodSelector.esm.js +35 -0
  49. package/dist/components/SortMethodSelector/SortMethodSelector.esm.js.map +1 -0
  50. package/dist/components/SortView/SortView.esm.js +176 -0
  51. package/dist/components/SortView/SortView.esm.js.map +1 -0
  52. package/dist/components/StatusTag/StatusTag.esm.js +13 -0
  53. package/dist/components/StatusTag/StatusTag.esm.js.map +1 -0
  54. package/dist/index.esm.js +5 -1749
  55. package/dist/index.esm.js.map +1 -1
  56. package/dist/plugin.esm.js +31 -0
  57. package/dist/plugin.esm.js.map +1 -0
  58. package/dist/routes.esm.js +8 -0
  59. package/dist/routes.esm.js.map +1 -0
  60. package/dist/util/fetchMethods.esm.js +26 -0
  61. package/dist/util/fetchMethods.esm.js.map +1 -0
  62. package/dist/util/parseMethods.esm.js +38 -0
  63. package/dist/util/parseMethods.esm.js.map +1 -0
  64. package/dist/util/sortMethods.esm.js +20 -0
  65. package/dist/util/sortMethods.esm.js.map +1 -0
  66. package/package.json +14 -9
  67. package/dist/esm/index-CM8Pdxty.esm.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/routes.ts","../src/api.ts","../src/plugin.ts","../src/components/StatusTag/StatusTag.tsx","../src/components/InputField/InputField.tsx","../src/components/InputSelector/InputSelector.tsx","../src/components/DateSelector/DateSelector.tsx","../src/components/DoubleDateSelector/DoubleDateSelector.tsx","../src/components/CustomDialogTitle/CustomDialogTitle.tsx","../src/components/ProjectDialog/ProjectDialog.tsx","../src/components/ConfirmationDialog/ConfirmationDialog.tsx","../src/components/EditProjectDialog/EditProjectDialog.tsx","../src/components/CardContentFields/AboutField.tsx","../src/components/CardContentFields/CardContentFields.tsx","../src/components/ProjectSelector/ProjectSelector.tsx","../src/components/LinkProjectDialog/LinkProjectDialog.tsx","../src/util/sortMethods.ts","../src/util/parseMethods.ts","../src/util/fetchMethods.ts","../src/components/HomePageBazaarInfoCard/HomePageBazaarInfoCard.tsx","../src/components/ProjectCard/ProjectCard.tsx","../src/components/ProjectPreview/ProjectPreview.tsx","../src/components/BazaarOverviewCard/BazaarOverviewCard.tsx","../src/components/EntityBazaarInfoContent/EntityBazaarInfoContent.tsx","../src/components/EntityBazaarInfoCard/EntityBazaarInfoCard.tsx","../src/components/AddProjectDialog/AddProjectDialog.tsx","../src/components/SortMethodSelector/SortMethodSelector.tsx","../src/components/SortView/SortView.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 { createRouteRef } from '@backstage/core-plugin-api';\n\nexport const rootRouteRef = createRouteRef({\n id: 'bazaar',\n});\n","/*\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","/*\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 { rootRouteRef } from './routes';\nimport {\n createApiFactory,\n createPlugin,\n createRoutableExtension,\n identityApiRef,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/core-plugin-api';\nimport { bazaarApiRef, BazaarClient } from './api';\n\n/** @public */\nexport const bazaarPlugin = createPlugin({\n id: 'bazaar',\n routes: {\n root: rootRouteRef,\n },\n apis: [\n createApiFactory({\n api: bazaarApiRef,\n deps: {\n identityApi: identityApiRef,\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ identityApi, discoveryApi, fetchApi }) =>\n new BazaarClient({ identityApi, discoveryApi, fetchApi }),\n }),\n ],\n});\n\n/** @public */\nexport const BazaarPage = bazaarPlugin.provide(\n createRoutableExtension({\n name: 'BazaarPage',\n component: () => import('./components/HomePage').then(m => m.HomePage),\n mountPoint: rootRouteRef,\n }),\n);\n","/*\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 { StatusOK, StatusWarning } from '@backstage/core-components';\nimport { Status } from '../../types';\n\ninterface StatusComponent {\n [key: string]: JSX.Element | undefined;\n}\n\nconst statuses: StatusComponent = {\n proposed: <StatusWarning>proposed</StatusWarning>,\n ongoing: <StatusOK>ongoing</StatusOK>,\n};\n\ntype Props = {\n status: Status;\n styles?: string;\n};\n\nexport const StatusTag = ({ status, styles }: Props) => {\n return <div className={styles}>{statuses[status]}</div>;\n};\n","/*\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","/*\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 InputLabel from '@material-ui/core/InputLabel';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport FormControl from '@material-ui/core/FormControl';\nimport Select from '@material-ui/core/Select';\nimport { Controller, Control, FieldError } from 'react-hook-form';\nimport { FormValues } from '../../types';\n\ntype Props = {\n options: string[];\n control: Control<FormValues, object>;\n name: 'status' | 'size';\n error?: FieldError | undefined;\n};\n\nexport const InputSelector = ({ name, options, control, error }: Props) => {\n const label = name.charAt(0).toLocaleUpperCase('en-US') + name.slice(1);\n\n return (\n <Controller\n name={name}\n control={control}\n rules={{\n required: true,\n }}\n render={({ field }) => (\n <FormControl fullWidth>\n <InputLabel\n required\n htmlFor=\"demo-simple-select-outlined\"\n id=\"demo-simple-select-outlined-label\"\n style={{\n marginTop: '0.25rem',\n }}\n >\n {label}\n </InputLabel>\n <Select\n {...field}\n labelId=\"demo-simple-select-outlined-label\"\n id=\"demo-simple-select-outlined\"\n label={label}\n error={!!error}\n >\n {options.map(option => {\n return (\n <MenuItem key={option} value={option}>\n {option}\n </MenuItem>\n );\n })}\n </Select>\n </FormControl>\n )}\n />\n );\n};\n","/*\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","/*\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","/*\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","/*\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 { useForm, UseFormReset, UseFormGetValues } from 'react-hook-form';\nimport { InputField } from '../InputField/InputField';\nimport { InputSelector } from '../InputSelector/InputSelector';\nimport { FormValues } from '../../types';\nimport { DoubleDateSelector } from '../DoubleDateSelector/DoubleDateSelector';\nimport {\n CustomDialogTitle,\n DialogActions,\n DialogContent,\n} from '../CustomDialogTitle';\n\ntype Props = {\n handleSave: (\n getValues: UseFormGetValues<FormValues>,\n reset: UseFormReset<FormValues>,\n ) => Promise<void>;\n isAddForm: boolean;\n title: string;\n defaultValues: FormValues;\n open: boolean;\n projectSelector?: JSX.Element;\n deleteButton?: JSX.Element;\n handleClose: () => void;\n};\n\nexport const ProjectDialog = ({\n handleSave,\n isAddForm,\n title,\n defaultValues,\n open,\n projectSelector,\n deleteButton,\n handleClose,\n}: Props) => {\n const {\n handleSubmit,\n reset,\n control,\n getValues,\n formState: { errors },\n setValue,\n } = useForm<FormValues>({\n mode: 'onChange',\n defaultValues,\n });\n\n const handleSaveForm = () => {\n handleSave(getValues, reset);\n };\n\n const handleCloseDialog = () => {\n handleClose();\n reset(defaultValues);\n };\n\n return (\n <div>\n <Dialog\n fullWidth\n maxWidth=\"xs\"\n onClose={handleCloseDialog}\n aria-labelledby=\"customized-dialog-title\"\n open={open}\n >\n <CustomDialogTitle\n id=\"customized-dialog-title\"\n onClose={handleCloseDialog}\n >\n {title}\n </CustomDialogTitle>\n <DialogContent style={{ padding: '1rem', paddingTop: '0rem' }} dividers>\n <InputField\n error={errors.title}\n control={control}\n rules={{\n required: true,\n }}\n inputType=\"title\"\n helperText=\"Please enter a title for your project\"\n />\n <InputField\n error={errors.description}\n control={control}\n rules={{\n required: true,\n }}\n inputType=\"description\"\n helperText=\"Please enter a description\"\n />\n\n <InputSelector\n control={control}\n name=\"status\"\n options={['proposed', 'ongoing']}\n />\n\n <InputSelector\n control={control}\n name=\"size\"\n options={['small', 'medium', 'large']}\n />\n\n <InputField\n error={errors.responsible}\n control={control}\n rules={{\n required: true,\n }}\n inputType=\"responsible\"\n helperText=\"Please enter a contact person\"\n placeholder=\"Contact person of the project\"\n />\n\n {isAddForm && projectSelector}\n\n <InputField\n error={errors.community}\n control={control}\n rules={{\n required: false,\n pattern: RegExp('^(https?)://'),\n }}\n inputType=\"community\"\n helperText=\"Please enter a link starting with http/https\"\n placeholder=\"Community link to e.g. Teams or Discord\"\n />\n\n <InputField\n error={errors.docs}\n control={control}\n rules={{\n required: false,\n pattern: RegExp('^(https?)://'),\n }}\n inputType=\"docs\"\n helperText=\"Please enter a link starting with http/https\"\n placeholder=\"Project docs link\"\n />\n\n <DoubleDateSelector setValue={setValue} control={control} />\n </DialogContent>\n\n <DialogActions>\n {!isAddForm && deleteButton}\n <Button\n onClick={handleSubmit(handleSaveForm)}\n color=\"primary\"\n type=\"submit\"\n >\n Submit\n </Button>\n </DialogActions>\n </Dialog>\n </div>\n );\n};\n","/*\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","/*\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","/*\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","/*\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';\n\ntype Props = {\n bazaarProject: BazaarProject;\n members: Member[];\n descriptionSize: GridSize;\n membersSize: GridSize;\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}: Props) => {\n const catalogEntityRoute = useRouteRef(entityRouteRef);\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 <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 {bazaarProject.responsible || ''}\n </Typography>\n </AboutField>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n </div>\n );\n};\n","/*\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 { Entity } from '@backstage/catalog-model';\nimport Typography from '@material-ui/core/Typography';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport TextField from '@material-ui/core/TextField';\nimport { makeStyles } from '@material-ui/core/styles';\n\ntype Props = {\n catalogEntities: Entity[];\n onChange: (entity: Entity) => void;\n disableClearable: boolean;\n defaultValue: Entity | null | undefined;\n label: string;\n};\n\nconst useStyles = makeStyles({\n container: { width: '100%', minWidth: '22rem' },\n autocomplete: { overflow: 'hidden' },\n});\n\nexport const ProjectSelector = ({\n catalogEntities,\n onChange,\n disableClearable,\n defaultValue,\n label,\n}: Props) => {\n const classes = useStyles();\n return (\n <div className={classes.container}>\n <Autocomplete\n className={classes.autocomplete}\n fullWidth\n disableClearable={disableClearable}\n defaultValue={defaultValue}\n options={catalogEntities}\n getOptionLabel={option => option?.metadata?.name}\n renderOption={option => (\n <Typography component=\"span\">{option?.metadata?.name}</Typography>\n )}\n renderInput={params => <TextField {...params} label={label} />}\n onChange={(_, data) => {\n onChange(data!);\n }}\n />\n </div>\n );\n};\n","/*\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 Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Button from '@material-ui/core/Button';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ProjectSelector } from '../ProjectSelector';\nimport { CustomDialogTitle } from '../CustomDialogTitle';\nimport { Entity, stringifyEntityRef } from '@backstage/catalog-model';\n\nimport { bazaarApiRef } from '../../api';\nimport { useApi, alertApiRef } from '@backstage/core-plugin-api';\n\nimport { BazaarProject } from '../../types';\n\ntype Props = {\n openProjectSelector: boolean;\n handleProjectSelectorClose: () => void;\n catalogEntities: Entity[];\n bazaarProject: BazaarProject;\n fetchBazaarProject: () => Promise<BazaarProject | null>;\n initEntity: Entity;\n};\n\nconst useStyles = makeStyles({\n content: { padding: '0 1rem' },\n});\n\nexport const LinkProjectDialog = ({\n openProjectSelector,\n handleProjectSelectorClose,\n catalogEntities,\n bazaarProject,\n fetchBazaarProject,\n initEntity,\n}: Props) => {\n const classes = useStyles();\n const bazaarApi = useApi(bazaarApiRef);\n const alertApi = useApi(alertApiRef);\n const [selectedEntity, setSelectedEntity] = useState(initEntity);\n const [selectedEntityName, setSelectedEntityName] = useState('');\n const handleEntityClick = (entity: Entity) => {\n setSelectedEntity(entity);\n setSelectedEntityName(entity.metadata.name);\n };\n\n const handleSubmit = async () => {\n handleProjectSelectorClose();\n\n const updateResponse = await bazaarApi.updateProject({\n ...bazaarProject,\n entityRef: stringifyEntityRef(selectedEntity!),\n });\n if (updateResponse.status === 'ok') {\n fetchBazaarProject();\n alertApi.post({\n message: `linked entity '${selectedEntityName}' to the project ${bazaarProject.title}`,\n severity: 'success',\n display: 'transient',\n });\n }\n };\n\n return (\n <Dialog onClose={handleProjectSelectorClose} open={openProjectSelector}>\n <CustomDialogTitle\n id=\"customized-dialog-title\"\n onClose={handleProjectSelectorClose}\n >\n Select entity\n </CustomDialogTitle>\n <DialogContent className={classes.content} dividers>\n <ProjectSelector\n label=\"\"\n onChange={handleEntityClick}\n catalogEntities={catalogEntities || []}\n disableClearable\n defaultValue={catalogEntities[0] || null}\n />\n </DialogContent>\n\n <DialogActions>\n <Button onClick={handleSubmit} color=\"primary\" type=\"submit\">\n OK\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","/*\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 { BazaarProject, Member } from '../types';\n\nexport const sortMembers = (m1: Member, m2: Member) => {\n return new Date(m2.joinDate!).getTime() - new Date(m1.joinDate!).getTime();\n};\n\nexport const sortByDate = (a: BazaarProject, b: BazaarProject): number => {\n const dateA = new Date(a.updatedAt!).getTime();\n const dateB = new Date(b.updatedAt!).getTime();\n return dateB - dateA;\n};\n\nexport const sortByTitle = (a: BazaarProject, b: BazaarProject) => {\n return a.title.localeCompare(b.title);\n};\n\nexport const sortByTitleDescending = (a: BazaarProject, b: BazaarProject) => {\n return b.title.localeCompare(a.title);\n};\n\nexport const sortByMembers = (a: BazaarProject, b: BazaarProject) => {\n return b.membersCount - a.membersCount;\n};\n","/*\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 { BazaarProject, Member } from '../types';\n\nexport const parseBazaarProject = (metadata: any): BazaarProject => {\n return {\n id: metadata.id,\n entityRef: metadata.entity_ref,\n title: metadata.title,\n community: metadata.community,\n description: metadata.description,\n status: metadata.status,\n updatedAt: metadata.updated_at,\n membersCount: metadata.members_count,\n size: metadata.size,\n startDate: metadata.start_date,\n endDate: metadata.end_date,\n responsible: metadata.responsible,\n docs: metadata.docs,\n } as BazaarProject;\n};\n\nexport const parseMember = (member: any): Member => {\n return {\n itemId: member.item_id,\n userId: member.user_id,\n userRef: member.user_ref,\n joinDate: member.join_date,\n picture: member.picture,\n } as Member;\n};\n\nexport const parseBazaarResponse = async (response: any) => {\n if (response) {\n const metadata = await response.json().then((resp: any) => resp.data[0]);\n\n if (metadata) {\n return parseBazaarProject(metadata);\n }\n }\n return null;\n};\n","/*\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 { sortMembers } from './sortMethods';\nimport { parseMember } from './parseMethods';\nimport { BazaarProject, Member } from '../types';\nimport { BazaarApi } from '../api';\nimport { Entity } from '@backstage/catalog-model';\nimport { CatalogApi } from '@backstage/plugin-catalog-react';\n\nexport const fetchProjectMembers = async (\n bazaarApi: BazaarApi,\n project: BazaarProject,\n): Promise<Member[]> => {\n const response = await bazaarApi.getMembers(project.id);\n\n if (response.data.length > 0) {\n const dbMembers = response.data.map((member: any) => {\n return parseMember(member);\n });\n\n dbMembers.sort(sortMembers);\n return dbMembers;\n }\n return [];\n};\n\nexport const fetchCatalogItems = async (\n catalogApi: CatalogApi,\n): Promise<Entity[]> => {\n const entities = await catalogApi.getEntities({\n filter: {\n kind: ['Component', 'Resource'],\n },\n fields: ['kind', 'metadata.name', 'metadata.namespace'],\n });\n\n return entities.items;\n};\n","/*\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 />\n </Card>\n </div>\n );\n};\n","/*\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 { ItemCardHeader } from '@backstage/core-components';\nimport Card from '@material-ui/core/Card';\nimport CardActionArea from '@material-ui/core/CardActionArea';\nimport CardContent from '@material-ui/core/CardContent';\nimport Dialog from '@material-ui/core/Dialog';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { StatusTag } from '../StatusTag/StatusTag';\nimport { BazaarProject } from '../../types';\nimport { DateTime } from 'luxon';\nimport { HomePageBazaarInfoCard } from '../HomePageBazaarInfoCard';\nimport { Entity } from '@backstage/catalog-model';\n\ntype Props = {\n project: BazaarProject;\n fetchBazaarProjects: () => Promise<BazaarProject[]>;\n catalogEntities: Entity[];\n height: 'large' | 'small';\n};\n\ntype StyleProps = {\n height: 'large' | 'small';\n};\n\nconst useStyles = makeStyles(theme => ({\n description: (props: StyleProps) => ({\n height: props.height === 'large' ? '10rem' : '4rem',\n WebkitBackgroundClip: 'text',\n backgroundImage: `linear-gradient(180deg, ${theme.palette.textContrast} 0%, ${theme.palette.textContrast} 60%, transparent 100%)`,\n color: 'transparent',\n }),\n statusTag: {\n display: 'inline-block',\n whiteSpace: 'nowrap',\n marginBottom: '0.8rem',\n },\n memberCount: {\n float: 'right',\n },\n header: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n height: '5rem',\n },\n}));\n\nexport const ProjectCard = ({\n project,\n fetchBazaarProjects,\n catalogEntities,\n height,\n}: Props) => {\n const classes = useStyles({ height });\n const [openCard, setOpenCard] = useState(false);\n const { id, title, status, updatedAt, description, membersCount } = project;\n\n const handleClose = () => {\n setOpenCard(false);\n fetchBazaarProjects();\n };\n\n return (\n <div>\n <Dialog fullWidth onClose={handleClose} open={openCard}>\n <HomePageBazaarInfoCard\n initProject={project}\n handleClose={handleClose}\n initEntity={catalogEntities[0] || null}\n />\n </Dialog>\n\n <Card key={id}>\n <CardActionArea onClick={() => setOpenCard(true)}>\n <ItemCardHeader\n classes={{ root: classes.header }}\n title={title}\n subtitle={`updated ${DateTime.fromISO(\n new Date(updatedAt!).toISOString(),\n ).toRelative({\n base: DateTime.now(),\n })}`}\n />\n <CardContent>\n <StatusTag styles={classes.statusTag} status={status} />\n <Typography variant=\"body2\" className={classes.memberCount}>\n {Number(membersCount) === Number(1)\n ? `${membersCount} member`\n : `${membersCount} members`}\n </Typography>\n <Typography variant=\"body2\" className={classes.description}>\n {description}\n </Typography>\n </CardContent>\n </CardActionArea>\n </Card>\n </div>\n );\n};\n","/*\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, { ChangeEvent, useState } from 'react';\nimport { ProjectCard } from '../ProjectCard/ProjectCard';\nimport Box from '@material-ui/core/Box';\nimport Grid from '@material-ui/core/Grid';\nimport TablePagination from '@material-ui/core/TablePagination';\nimport { GridSize } from '@material-ui/core/Grid';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { BazaarProject } from '../../types';\nimport { Entity } from '@backstage/catalog-model';\n\ntype Props = {\n bazaarProjects: BazaarProject[];\n fetchBazaarProjects: () => Promise<BazaarProject[]>;\n catalogEntities: Entity[];\n useTablePagination?: boolean;\n gridSize?: GridSize;\n height: 'large' | 'small';\n};\n\nconst useStyles = makeStyles({\n content: {\n width: '100%',\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n },\n empty: {\n height: '10rem',\n textAlign: 'center',\n verticalAlign: 'middle',\n lineHeight: '10rem',\n },\n pagination: {\n marginTop: '1rem',\n marginLeft: 'auto',\n marginRight: '0',\n },\n});\n\nexport const ProjectPreview = ({\n bazaarProjects,\n fetchBazaarProjects,\n catalogEntities,\n useTablePagination = true,\n gridSize = 2,\n height = 'large',\n}: Props) => {\n const classes = useStyles();\n const [page, setPage] = useState(1);\n const [rows, setRows] = useState(12);\n\n const handlePageChange = (_: any, newPage: number) => {\n setPage(newPage + 1);\n };\n\n const handleRowChange = (\n event: ChangeEvent<HTMLInputElement | HTMLTextAreaElement>,\n ) => {\n setRows(parseInt(event.target.value, 10));\n setPage(1);\n };\n\n if (!bazaarProjects.length) {\n return (\n <div className={classes.empty}>Please add projects to the Bazaar.</div>\n );\n }\n\n return (\n <Box className={classes.content}>\n <Grid wrap=\"wrap\" container spacing={3}>\n {bazaarProjects\n .slice((page - 1) * rows, rows * page)\n .map((bazaarProject: BazaarProject, i: number) => {\n return (\n <Grid key={i} item xs={gridSize}>\n <ProjectCard\n project={bazaarProject}\n key={i}\n fetchBazaarProjects={fetchBazaarProjects}\n catalogEntities={catalogEntities}\n height={height}\n />\n </Grid>\n );\n })}\n </Grid>\n\n {useTablePagination && (\n <TablePagination\n component=\"div\"\n className={classes.pagination}\n rowsPerPageOptions={[12, 24, 48, 96]}\n count={bazaarProjects?.length}\n page={page - 1}\n onPageChange={handlePageChange}\n rowsPerPage={rows}\n onRowsPerPageChange={handleRowChange}\n backIconButtonProps={{ disabled: page === 1 }}\n nextIconButtonProps={{\n disabled: rows * page >= bazaarProjects.length,\n }}\n />\n )}\n </Box>\n );\n};\n","/*\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","/*\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 />\n </div>\n );\n }\n return null;\n};\n","/*\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","/*\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","/*\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, { ChangeEvent, ReactNode } from 'react';\nimport FormControl from '@material-ui/core/FormControl';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Select from '@material-ui/core/Select';\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles({\n select: {\n fontSize: 'xx-large',\n fontWeight: 'bold',\n width: '16rem',\n },\n});\n\ntype Props = {\n sortMethodNbr: number;\n handleSortMethodChange:\n | ((\n event: ChangeEvent<{ name?: string | undefined; value: unknown }>,\n child: ReactNode,\n ) => void)\n | undefined;\n};\n\nexport const SortMethodSelector = ({\n sortMethodNbr,\n handleSortMethodChange,\n}: Props) => {\n const classes = useStyles();\n return (\n <FormControl fullWidth>\n <Select\n className={classes.select}\n disableUnderline\n value={sortMethodNbr}\n onChange={handleSortMethodChange}\n >\n <MenuItem value={0}>Latest updated</MenuItem>\n <MenuItem value={1}>A-Z</MenuItem>\n <MenuItem value={2}>Z-A</MenuItem>\n <MenuItem value={3}>Most members</MenuItem>\n </Select>\n </FormControl>\n );\n};\n","/*\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, { ChangeEvent, useEffect, useState } from 'react';\nimport { Content, SupportButton } from '@backstage/core-components';\nimport { AddProjectDialog } from '../AddProjectDialog';\nimport { ProjectPreview } from '../ProjectPreview/ProjectPreview';\nimport Button from '@material-ui/core/Button';\nimport { makeStyles } from '@material-ui/core/styles';\nimport useAsyncFn from 'react-use/esm/useAsyncFn';\nimport { Entity, stringifyEntityRef } from '@backstage/catalog-model';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport { BazaarProject } from '../../types';\nimport { bazaarApiRef } from '../../api';\nimport Alert from '@material-ui/lab/Alert';\nimport SearchBar from 'material-ui-search-bar';\nimport {\n sortByDate,\n sortByMembers,\n sortByTitle,\n sortByTitleDescending,\n} from '../../util/sortMethods';\nimport { SortMethodSelector } from '../SortMethodSelector';\nimport { fetchCatalogItems } from '../../util/fetchMethods';\nimport { parseBazaarProject } from '../../util/parseMethods';\n\nconst useStyles = makeStyles({\n button: { minWidth: '11rem' },\n container: {\n marginTop: '2rem',\n },\n header: {\n width: '100%',\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'center',\n alignItems: 'center',\n margin: '0 auto',\n marginBottom: '1.2rem',\n },\n search: {\n marginRight: '1rem',\n height: '2.5rem',\n width: '35rem',\n },\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 type SortViewProps = {\n fullWidth?: boolean;\n fullHeight?: boolean;\n};\n\n/** @public */\nexport const SortView = (props: SortViewProps) => {\n const { fullWidth = true, fullHeight = true } = props;\n const bazaarApi = useApi(bazaarApiRef);\n const catalogApi = useApi(catalogApiRef);\n const classes = useStyles();\n const sortMethods = [\n sortByDate,\n sortByTitle,\n sortByTitleDescending,\n sortByMembers,\n ];\n const [sortMethodNbr, setSortMethodNbr] = useState(0);\n const [openAdd, setOpenAdd] = useState(false);\n const [searchValue, setSearchValue] = useState('');\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 response = await bazaarApi.getProjects();\n const dbProjects: BazaarProject[] = [];\n\n response.data.forEach((project: any) => {\n dbProjects.push(parseBazaarProject(project));\n });\n\n return dbProjects;\n });\n\n const catalogEntityRefs = catalogEntities.value?.map((project: Entity) =>\n stringifyEntityRef(project),\n );\n\n const getSearchResults = () => {\n return bazaarProjects.value\n ?.filter(project => project.title.includes(searchValue))\n .sort(sortMethods[sortMethodNbr]);\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 const handleSortMethodChange = (\n event: ChangeEvent<{ name?: string | undefined; value: unknown }>,\n ) => {\n setSortMethodNbr(\n typeof event.target.value === 'number' ? event.target.value : 0,\n );\n };\n\n if (catalogEntities.error)\n return <Alert severity=\"error\">{catalogEntities.error.message}</Alert>;\n\n if (bazaarProjects.error)\n return <Alert severity=\"error\">{bazaarProjects.error.message}</Alert>;\n\n return (\n <Content noPadding>\n <div className={classes.header}>\n <SortMethodSelector\n sortMethodNbr={sortMethodNbr}\n handleSortMethodChange={handleSortMethodChange}\n />\n\n <SearchBar\n className={classes.search}\n value={searchValue}\n onChange={newSortMethod => {\n setSearchValue(newSortMethod);\n }}\n onCancelSearch={() => {\n setSearchValue('');\n }}\n />\n <Button\n className={classes.button}\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n setOpenAdd(true);\n }}\n >\n Add project\n </Button>\n <AddProjectDialog\n catalogEntities={unlinkedCatalogEntities || []}\n handleClose={() => {\n setOpenAdd(false);\n }}\n open={openAdd}\n fetchBazaarProjects={fetchBazaarProjects}\n fetchCatalogEntities={fetchCatalogEntities}\n />\n <SupportButton />\n </div>\n <ProjectPreview\n bazaarProjects={getSearchResults() || []}\n fetchBazaarProjects={fetchBazaarProjects}\n catalogEntities={unlinkedCatalogEntities || []}\n gridSize={fullWidth ? 2 : 4}\n height={fullHeight ? 'large' : 'small'}\n />\n <Content noPadding className={classes.container} />\n </Content>\n );\n};\n"],"names":["useStyles","_a","_b","makeStyles","DialogContent","DialogActions","getUnlinkedCatalogEntities"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,31 @@
1
+ import { rootRouteRef } from './routes.esm.js';
2
+ import { createPlugin, createApiFactory, identityApiRef, discoveryApiRef, fetchApiRef, createRoutableExtension } from '@backstage/core-plugin-api';
3
+ import { bazaarApiRef, BazaarClient } from './api.esm.js';
4
+
5
+ const bazaarPlugin = createPlugin({
6
+ id: "bazaar",
7
+ routes: {
8
+ root: rootRouteRef
9
+ },
10
+ apis: [
11
+ createApiFactory({
12
+ api: bazaarApiRef,
13
+ deps: {
14
+ identityApi: identityApiRef,
15
+ discoveryApi: discoveryApiRef,
16
+ fetchApi: fetchApiRef
17
+ },
18
+ factory: ({ identityApi, discoveryApi, fetchApi }) => new BazaarClient({ identityApi, discoveryApi, fetchApi })
19
+ })
20
+ ]
21
+ });
22
+ const BazaarPage = bazaarPlugin.provide(
23
+ createRoutableExtension({
24
+ name: "BazaarPage",
25
+ component: () => import('./components/HomePage/index.esm.js').then((m) => m.HomePage),
26
+ mountPoint: rootRouteRef
27
+ })
28
+ );
29
+
30
+ export { BazaarPage, bazaarPlugin };
31
+ //# sourceMappingURL=plugin.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.esm.js","sources":["../src/plugin.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 { rootRouteRef } from './routes';\nimport {\n createApiFactory,\n createPlugin,\n createRoutableExtension,\n identityApiRef,\n discoveryApiRef,\n fetchApiRef,\n} from '@backstage/core-plugin-api';\nimport { bazaarApiRef, BazaarClient } from './api';\n\n/** @public */\nexport const bazaarPlugin = createPlugin({\n id: 'bazaar',\n routes: {\n root: rootRouteRef,\n },\n apis: [\n createApiFactory({\n api: bazaarApiRef,\n deps: {\n identityApi: identityApiRef,\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n },\n factory: ({ identityApi, discoveryApi, fetchApi }) =>\n new BazaarClient({ identityApi, discoveryApi, fetchApi }),\n }),\n ],\n});\n\n/** @public */\nexport const BazaarPage = bazaarPlugin.provide(\n createRoutableExtension({\n name: 'BazaarPage',\n component: () => import('./components/HomePage').then(m => m.HomePage),\n mountPoint: rootRouteRef,\n }),\n);\n"],"names":[],"mappings":";;;;AA4BO,MAAM,eAAe,YAAa,CAAA;AAAA,EACvC,EAAI,EAAA,QAAA;AAAA,EACJ,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,YAAA;AAAA,GACR;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,gBAAiB,CAAA;AAAA,MACf,GAAK,EAAA,YAAA;AAAA,MACL,IAAM,EAAA;AAAA,QACJ,WAAa,EAAA,cAAA;AAAA,QACb,YAAc,EAAA,eAAA;AAAA,QACd,QAAU,EAAA,WAAA;AAAA,OACZ;AAAA,MACA,OAAS,EAAA,CAAC,EAAE,WAAA,EAAa,YAAc,EAAA,QAAA,EACrC,KAAA,IAAI,YAAa,CAAA,EAAE,WAAa,EAAA,YAAA,EAAc,UAAU,CAAA;AAAA,KAC3D,CAAA;AAAA,GACH;AACF,CAAC,EAAA;AAGM,MAAM,aAAa,YAAa,CAAA,OAAA;AAAA,EACrC,uBAAwB,CAAA;AAAA,IACtB,IAAM,EAAA,YAAA;AAAA,IACN,SAAA,EAAW,MAAM,OAAO,oCAAuB,EAAE,IAAK,CAAA,CAAA,CAAA,KAAK,EAAE,QAAQ,CAAA;AAAA,IACrE,UAAY,EAAA,YAAA;AAAA,GACb,CAAA;AACH;;;;"}
@@ -0,0 +1,8 @@
1
+ import { createRouteRef } from '@backstage/core-plugin-api';
2
+
3
+ const rootRouteRef = createRouteRef({
4
+ id: "bazaar"
5
+ });
6
+
7
+ export { rootRouteRef };
8
+ //# sourceMappingURL=routes.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.esm.js","sources":["../src/routes.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 { createRouteRef } from '@backstage/core-plugin-api';\n\nexport const rootRouteRef = createRouteRef({\n id: 'bazaar',\n});\n"],"names":[],"mappings":";;AAkBO,MAAM,eAAe,cAAe,CAAA;AAAA,EACzC,EAAI,EAAA,QAAA;AACN,CAAC;;;;"}
@@ -0,0 +1,26 @@
1
+ import { sortMembers } from './sortMethods.esm.js';
2
+ import { parseMember } from './parseMethods.esm.js';
3
+
4
+ const fetchProjectMembers = async (bazaarApi, project) => {
5
+ const response = await bazaarApi.getMembers(project.id);
6
+ if (response.data.length > 0) {
7
+ const dbMembers = response.data.map((member) => {
8
+ return parseMember(member);
9
+ });
10
+ dbMembers.sort(sortMembers);
11
+ return dbMembers;
12
+ }
13
+ return [];
14
+ };
15
+ const fetchCatalogItems = async (catalogApi) => {
16
+ const entities = await catalogApi.getEntities({
17
+ filter: {
18
+ kind: ["Component", "Resource"]
19
+ },
20
+ fields: ["kind", "metadata.name", "metadata.namespace"]
21
+ });
22
+ return entities.items;
23
+ };
24
+
25
+ export { fetchCatalogItems, fetchProjectMembers };
26
+ //# sourceMappingURL=fetchMethods.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchMethods.esm.js","sources":["../../src/util/fetchMethods.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 { sortMembers } from './sortMethods';\nimport { parseMember } from './parseMethods';\nimport { BazaarProject, Member } from '../types';\nimport { BazaarApi } from '../api';\nimport { Entity } from '@backstage/catalog-model';\nimport { CatalogApi } from '@backstage/plugin-catalog-react';\n\nexport const fetchProjectMembers = async (\n bazaarApi: BazaarApi,\n project: BazaarProject,\n): Promise<Member[]> => {\n const response = await bazaarApi.getMembers(project.id);\n\n if (response.data.length > 0) {\n const dbMembers = response.data.map((member: any) => {\n return parseMember(member);\n });\n\n dbMembers.sort(sortMembers);\n return dbMembers;\n }\n return [];\n};\n\nexport const fetchCatalogItems = async (\n catalogApi: CatalogApi,\n): Promise<Entity[]> => {\n const entities = await catalogApi.getEntities({\n filter: {\n kind: ['Component', 'Resource'],\n },\n fields: ['kind', 'metadata.name', 'metadata.namespace'],\n });\n\n return entities.items;\n};\n"],"names":[],"mappings":";;;AAuBa,MAAA,mBAAA,GAAsB,OACjC,SAAA,EACA,OACsB,KAAA;AACtB,EAAA,MAAM,QAAW,GAAA,MAAM,SAAU,CAAA,UAAA,CAAW,QAAQ,EAAE,CAAA,CAAA;AAEtD,EAAI,IAAA,QAAA,CAAS,IAAK,CAAA,MAAA,GAAS,CAAG,EAAA;AAC5B,IAAA,MAAM,SAAY,GAAA,QAAA,CAAS,IAAK,CAAA,GAAA,CAAI,CAAC,MAAgB,KAAA;AACnD,MAAA,OAAO,YAAY,MAAM,CAAA,CAAA;AAAA,KAC1B,CAAA,CAAA;AAED,IAAA,SAAA,CAAU,KAAK,WAAW,CAAA,CAAA;AAC1B,IAAO,OAAA,SAAA,CAAA;AAAA,GACT;AACA,EAAA,OAAO,EAAC,CAAA;AACV,EAAA;AAEa,MAAA,iBAAA,GAAoB,OAC/B,UACsB,KAAA;AACtB,EAAM,MAAA,QAAA,GAAW,MAAM,UAAA,CAAW,WAAY,CAAA;AAAA,IAC5C,MAAQ,EAAA;AAAA,MACN,IAAA,EAAM,CAAC,WAAA,EAAa,UAAU,CAAA;AAAA,KAChC;AAAA,IACA,MAAQ,EAAA,CAAC,MAAQ,EAAA,eAAA,EAAiB,oBAAoB,CAAA;AAAA,GACvD,CAAA,CAAA;AAED,EAAA,OAAO,QAAS,CAAA,KAAA,CAAA;AAClB;;;;"}
@@ -0,0 +1,38 @@
1
+ const parseBazaarProject = (metadata) => {
2
+ return {
3
+ id: metadata.id,
4
+ entityRef: metadata.entity_ref,
5
+ title: metadata.title,
6
+ community: metadata.community,
7
+ description: metadata.description,
8
+ status: metadata.status,
9
+ updatedAt: metadata.updated_at,
10
+ membersCount: metadata.members_count,
11
+ size: metadata.size,
12
+ startDate: metadata.start_date,
13
+ endDate: metadata.end_date,
14
+ responsible: metadata.responsible,
15
+ docs: metadata.docs
16
+ };
17
+ };
18
+ const parseMember = (member) => {
19
+ return {
20
+ itemId: member.item_id,
21
+ userId: member.user_id,
22
+ userRef: member.user_ref,
23
+ joinDate: member.join_date,
24
+ picture: member.picture
25
+ };
26
+ };
27
+ const parseBazaarResponse = async (response) => {
28
+ if (response) {
29
+ const metadata = await response.json().then((resp) => resp.data[0]);
30
+ if (metadata) {
31
+ return parseBazaarProject(metadata);
32
+ }
33
+ }
34
+ return null;
35
+ };
36
+
37
+ export { parseBazaarProject, parseBazaarResponse, parseMember };
38
+ //# sourceMappingURL=parseMethods.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseMethods.esm.js","sources":["../../src/util/parseMethods.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 { BazaarProject, Member } from '../types';\n\nexport const parseBazaarProject = (metadata: any): BazaarProject => {\n return {\n id: metadata.id,\n entityRef: metadata.entity_ref,\n title: metadata.title,\n community: metadata.community,\n description: metadata.description,\n status: metadata.status,\n updatedAt: metadata.updated_at,\n membersCount: metadata.members_count,\n size: metadata.size,\n startDate: metadata.start_date,\n endDate: metadata.end_date,\n responsible: metadata.responsible,\n docs: metadata.docs,\n } as BazaarProject;\n};\n\nexport const parseMember = (member: any): Member => {\n return {\n itemId: member.item_id,\n userId: member.user_id,\n userRef: member.user_ref,\n joinDate: member.join_date,\n picture: member.picture,\n } as Member;\n};\n\nexport const parseBazaarResponse = async (response: any) => {\n if (response) {\n const metadata = await response.json().then((resp: any) => resp.data[0]);\n\n if (metadata) {\n return parseBazaarProject(metadata);\n }\n }\n return null;\n};\n"],"names":[],"mappings":"AAkBa,MAAA,kBAAA,GAAqB,CAAC,QAAiC,KAAA;AAClE,EAAO,OAAA;AAAA,IACL,IAAI,QAAS,CAAA,EAAA;AAAA,IACb,WAAW,QAAS,CAAA,UAAA;AAAA,IACpB,OAAO,QAAS,CAAA,KAAA;AAAA,IAChB,WAAW,QAAS,CAAA,SAAA;AAAA,IACpB,aAAa,QAAS,CAAA,WAAA;AAAA,IACtB,QAAQ,QAAS,CAAA,MAAA;AAAA,IACjB,WAAW,QAAS,CAAA,UAAA;AAAA,IACpB,cAAc,QAAS,CAAA,aAAA;AAAA,IACvB,MAAM,QAAS,CAAA,IAAA;AAAA,IACf,WAAW,QAAS,CAAA,UAAA;AAAA,IACpB,SAAS,QAAS,CAAA,QAAA;AAAA,IAClB,aAAa,QAAS,CAAA,WAAA;AAAA,IACtB,MAAM,QAAS,CAAA,IAAA;AAAA,GACjB,CAAA;AACF,EAAA;AAEa,MAAA,WAAA,GAAc,CAAC,MAAwB,KAAA;AAClD,EAAO,OAAA;AAAA,IACL,QAAQ,MAAO,CAAA,OAAA;AAAA,IACf,QAAQ,MAAO,CAAA,OAAA;AAAA,IACf,SAAS,MAAO,CAAA,QAAA;AAAA,IAChB,UAAU,MAAO,CAAA,SAAA;AAAA,IACjB,SAAS,MAAO,CAAA,OAAA;AAAA,GAClB,CAAA;AACF,EAAA;AAEa,MAAA,mBAAA,GAAsB,OAAO,QAAkB,KAAA;AAC1D,EAAA,IAAI,QAAU,EAAA;AACZ,IAAM,MAAA,QAAA,GAAW,MAAM,QAAA,CAAS,IAAK,EAAA,CAAE,IAAK,CAAA,CAAC,IAAc,KAAA,IAAA,CAAK,IAAK,CAAA,CAAC,CAAC,CAAA,CAAA;AAEvE,IAAA,IAAI,QAAU,EAAA;AACZ,MAAA,OAAO,mBAAmB,QAAQ,CAAA,CAAA;AAAA,KACpC;AAAA,GACF;AACA,EAAO,OAAA,IAAA,CAAA;AACT;;;;"}
@@ -0,0 +1,20 @@
1
+ const sortMembers = (m1, m2) => {
2
+ return new Date(m2.joinDate).getTime() - new Date(m1.joinDate).getTime();
3
+ };
4
+ const sortByDate = (a, b) => {
5
+ const dateA = new Date(a.updatedAt).getTime();
6
+ const dateB = new Date(b.updatedAt).getTime();
7
+ return dateB - dateA;
8
+ };
9
+ const sortByTitle = (a, b) => {
10
+ return a.title.localeCompare(b.title);
11
+ };
12
+ const sortByTitleDescending = (a, b) => {
13
+ return b.title.localeCompare(a.title);
14
+ };
15
+ const sortByMembers = (a, b) => {
16
+ return b.membersCount - a.membersCount;
17
+ };
18
+
19
+ export { sortByDate, sortByMembers, sortByTitle, sortByTitleDescending, sortMembers };
20
+ //# sourceMappingURL=sortMethods.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sortMethods.esm.js","sources":["../../src/util/sortMethods.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 { BazaarProject, Member } from '../types';\n\nexport const sortMembers = (m1: Member, m2: Member) => {\n return new Date(m2.joinDate!).getTime() - new Date(m1.joinDate!).getTime();\n};\n\nexport const sortByDate = (a: BazaarProject, b: BazaarProject): number => {\n const dateA = new Date(a.updatedAt!).getTime();\n const dateB = new Date(b.updatedAt!).getTime();\n return dateB - dateA;\n};\n\nexport const sortByTitle = (a: BazaarProject, b: BazaarProject) => {\n return a.title.localeCompare(b.title);\n};\n\nexport const sortByTitleDescending = (a: BazaarProject, b: BazaarProject) => {\n return b.title.localeCompare(a.title);\n};\n\nexport const sortByMembers = (a: BazaarProject, b: BazaarProject) => {\n return b.membersCount - a.membersCount;\n};\n"],"names":[],"mappings":"AAkBa,MAAA,WAAA,GAAc,CAAC,EAAA,EAAY,EAAe,KAAA;AACrD,EAAA,OAAO,IAAI,IAAA,CAAK,EAAG,CAAA,QAAS,CAAE,CAAA,OAAA,EAAY,GAAA,IAAI,IAAK,CAAA,EAAA,CAAG,QAAS,CAAA,CAAE,OAAQ,EAAA,CAAA;AAC3E,EAAA;AAEa,MAAA,UAAA,GAAa,CAAC,CAAA,EAAkB,CAA6B,KAAA;AACxE,EAAA,MAAM,QAAQ,IAAI,IAAA,CAAK,CAAE,CAAA,SAAU,EAAE,OAAQ,EAAA,CAAA;AAC7C,EAAA,MAAM,QAAQ,IAAI,IAAA,CAAK,CAAE,CAAA,SAAU,EAAE,OAAQ,EAAA,CAAA;AAC7C,EAAA,OAAO,KAAQ,GAAA,KAAA,CAAA;AACjB,EAAA;AAEa,MAAA,WAAA,GAAc,CAAC,CAAA,EAAkB,CAAqB,KAAA;AACjE,EAAA,OAAO,CAAE,CAAA,KAAA,CAAM,aAAc,CAAA,CAAA,CAAE,KAAK,CAAA,CAAA;AACtC,EAAA;AAEa,MAAA,qBAAA,GAAwB,CAAC,CAAA,EAAkB,CAAqB,KAAA;AAC3E,EAAA,OAAO,CAAE,CAAA,KAAA,CAAM,aAAc,CAAA,CAAA,CAAE,KAAK,CAAA,CAAA;AACtC,EAAA;AAEa,MAAA,aAAA,GAAgB,CAAC,CAAA,EAAkB,CAAqB,KAAA;AACnE,EAAO,OAAA,CAAA,CAAE,eAAe,CAAE,CAAA,YAAA,CAAA;AAC5B;;;;"}
package/package.json CHANGED
@@ -1,8 +1,13 @@
1
1
  {
2
2
  "name": "@backstage-community/plugin-bazaar",
3
- "version": "0.2.27",
3
+ "version": "0.2.28",
4
4
  "backstage": {
5
- "role": "frontend-plugin"
5
+ "role": "frontend-plugin",
6
+ "pluginId": "bazaar",
7
+ "pluginPackages": [
8
+ "@backstage-community/plugin-bazaar",
9
+ "@backstage-community/plugin-bazaar-backend"
10
+ ]
6
11
  },
7
12
  "publishConfig": {
8
13
  "access": "public",
@@ -32,12 +37,12 @@
32
37
  "test": "backstage-cli package test"
33
38
  },
34
39
  "dependencies": {
35
- "@backstage/catalog-client": "^1.6.4",
36
- "@backstage/catalog-model": "^1.4.5",
37
- "@backstage/core-components": "^0.14.4",
38
- "@backstage/core-plugin-api": "^1.9.2",
40
+ "@backstage/catalog-client": "^1.6.5",
41
+ "@backstage/catalog-model": "^1.5.0",
42
+ "@backstage/core-components": "^0.14.9",
43
+ "@backstage/core-plugin-api": "^1.9.3",
39
44
  "@backstage/errors": "^1.2.4",
40
- "@backstage/plugin-catalog-react": "^1.11.3",
45
+ "@backstage/plugin-catalog-react": "^1.12.2",
41
46
  "@date-io/luxon": "1.x",
42
47
  "@material-ui/core": "^4.12.2",
43
48
  "@material-ui/icons": "^4.9.1",
@@ -51,8 +56,8 @@
51
56
  "react-use": "^17.2.4"
52
57
  },
53
58
  "devDependencies": {
54
- "@backstage/cli": "^0.26.3",
55
- "@backstage/dev-utils": "^1.0.31",
59
+ "@backstage/cli": "^0.26.11",
60
+ "@backstage/dev-utils": "^1.0.35",
56
61
  "@testing-library/dom": "^10.0.0",
57
62
  "@testing-library/jest-dom": "^6.0.0",
58
63
  "@testing-library/react": "^15.0.0",