@backstage-community/plugin-announcements 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/alpha/Router.esm.js +12 -13
  3. package/dist/alpha/Router.esm.js.map +1 -1
  4. package/dist/alpha/components/admin/categories/CategoriesContent.esm.js +105 -0
  5. package/dist/alpha/components/admin/categories/CategoriesContent.esm.js.map +1 -0
  6. package/dist/alpha/components/admin/categories/CategoriesTable.esm.js +52 -0
  7. package/dist/alpha/components/admin/categories/CategoriesTable.esm.js.map +1 -0
  8. package/dist/alpha/components/admin/categories/CategoriesTableCard.esm.js +44 -0
  9. package/dist/alpha/components/admin/categories/CategoriesTableCard.esm.js.map +1 -0
  10. package/dist/alpha/components/admin/categories/CreateCatagoryDialog.esm.js +30 -0
  11. package/dist/alpha/components/admin/categories/CreateCatagoryDialog.esm.js.map +1 -0
  12. package/dist/alpha/components/admin/shared/CreateTitleDialog/CreateTitleDialog.esm.js +87 -0
  13. package/dist/alpha/components/admin/shared/CreateTitleDialog/CreateTitleDialog.esm.js.map +1 -0
  14. package/dist/alpha/components/admin/shared/DeleteConfirmationDialog/DeleteConfirmationDialog.esm.js +43 -0
  15. package/dist/alpha/components/admin/shared/DeleteConfirmationDialog/DeleteConfirmationDialog.esm.js.map +1 -0
  16. package/dist/alpha/components/admin/shared/DeleteConfirmationDialog/useDeleteConfirmationDialogState.esm.js +29 -0
  17. package/dist/alpha/components/admin/shared/DeleteConfirmationDialog/useDeleteConfirmationDialogState.esm.js.map +1 -0
  18. package/dist/alpha/components/admin/tags/CreateTagDialog.esm.js +30 -0
  19. package/dist/alpha/components/admin/tags/CreateTagDialog.esm.js.map +1 -0
  20. package/dist/alpha/components/admin/tags/TagsContent.esm.js +112 -0
  21. package/dist/alpha/components/admin/tags/TagsContent.esm.js.map +1 -0
  22. package/dist/alpha/components/admin/tags/TagsTable.esm.js +46 -0
  23. package/dist/alpha/components/admin/tags/TagsTable.esm.js.map +1 -0
  24. package/dist/alpha/components/admin/tags/TagsTableCard.esm.js +44 -0
  25. package/dist/alpha/components/admin/tags/TagsTableCard.esm.js.map +1 -0
  26. package/dist/alpha/components/announcements/AnnouncementCard.esm.js +77 -0
  27. package/dist/alpha/components/announcements/AnnouncementCard.esm.js.map +1 -0
  28. package/dist/alpha/components/announcements/AnnouncementsGrid.esm.js +65 -0
  29. package/dist/alpha/components/announcements/AnnouncementsGrid.esm.js.map +1 -0
  30. package/dist/alpha/components/announcements/AnnouncementsPage.esm.js +47 -0
  31. package/dist/alpha/components/announcements/AnnouncementsPage.esm.js.map +1 -0
  32. package/dist/alpha/components/announcements/ContextMenu.esm.js +19 -0
  33. package/dist/alpha/components/announcements/ContextMenu.esm.js.map +1 -0
  34. package/dist/alpha/components/announcements/ViewAnnouncementPage.esm.js +187 -0
  35. package/dist/alpha/components/announcements/ViewAnnouncementPage.esm.js.map +1 -0
  36. package/dist/components/Admin/AnnouncementsContent/AnnouncementForm/OnBehalfTeamDropdown.esm.js +0 -2
  37. package/dist/components/Admin/AnnouncementsContent/AnnouncementForm/OnBehalfTeamDropdown.esm.js.map +1 -1
  38. package/dist/components/index.esm.js +1 -0
  39. package/dist/components/index.esm.js.map +1 -1
  40. package/package.json +7 -6
@@ -0,0 +1,187 @@
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import { useEffect } from 'react';
3
+ import useAsync from 'react-use/lib/useAsync';
4
+ import { DateTime } from 'luxon';
5
+ import { Skeleton, HeaderPage, Container, Grid, Link, Flex, Text, Card, Box, CardHeader, CardBody, TagGroup, Tag } from '@backstage/ui';
6
+ import { useRouteRefParams, useApi, useRouteRef, useAnalytics } from '@backstage/core-plugin-api';
7
+ import { Alert } from '@material-ui/lab';
8
+ import { RiArrowLeftLine, RiPriceTag3Line, RiHashtag } from '@remixicon/react';
9
+ import { EntityRefLink } from '@backstage/plugin-catalog-react';
10
+ import { announcementsApiRef, useAnnouncementsTranslation } from '@backstage-community/plugin-announcements-react';
11
+ import { announcementViewRouteRef, rootRouteRef } from '../../../routes.esm.js';
12
+ import 'react-router-dom';
13
+ import '@backstage/core-components';
14
+ import '@material-ui/core';
15
+ import '@mui/material/Stack';
16
+ import '../../../components/Admin/AdminPortal/AdminPortal.esm.js';
17
+ import '@backstage-community/plugin-announcements-common';
18
+ import 'react-use/esm/useAsyncRetry';
19
+ import '@uiw/react-md-editor';
20
+ import 'slugify';
21
+ import '../../../components/Admin/AnnouncementsContent/AnnouncementForm/CategoryInput.esm.js';
22
+ import '@mui/material/TextField';
23
+ import '@mui/material/Autocomplete';
24
+ import '@mui/material/CircularProgress';
25
+ import 'react-use/esm/useAsync';
26
+ import '@backstage/catalog-model';
27
+ import '@mui/material/Box';
28
+ import '@mui/material/Typography';
29
+ import '../../../components/Admin/AnnouncementsContent/AnnouncementForm/TagsInput.esm.js';
30
+ import '@mui/material/Button';
31
+ import '@mui/material/Divider';
32
+ import '@mui/material/FormControlLabel';
33
+ import '@mui/material/FormGroup';
34
+ import '@mui/material/Grid';
35
+ import '@mui/material/Paper';
36
+ import '@mui/icons-material/SaveAlt';
37
+ import '@mui/material/Switch';
38
+ import '@backstage/plugin-permission-react';
39
+ import '@material-ui/icons/Delete';
40
+ import '@material-ui/icons/Edit';
41
+ import '@material-ui/icons/Visibility';
42
+ import { MarkdownRenderer } from '../../../components/MarkdownRenderer/MarkdownRenderer.esm.js';
43
+
44
+ const AnnouncementCategoryBadge = (props) => {
45
+ const { category } = props;
46
+ const announcementsLink = useRouteRef(rootRouteRef);
47
+ if (!category) {
48
+ return null;
49
+ }
50
+ return /* @__PURE__ */ jsx(
51
+ Link,
52
+ {
53
+ href: `${announcementsLink()}?category=${category.slug}`,
54
+ color: "secondary",
55
+ variant: "body-small",
56
+ children: /* @__PURE__ */ jsxs(Flex, { align: "center", gap: "2", children: [
57
+ /* @__PURE__ */ jsx(RiPriceTag3Line, { size: 16 }),
58
+ " ",
59
+ category?.title
60
+ ] })
61
+ }
62
+ );
63
+ };
64
+ const AnnouncementTagsTagGroup = (props) => {
65
+ const announcementsLink = useRouteRef(rootRouteRef);
66
+ const { t } = useAnnouncementsTranslation();
67
+ return /* @__PURE__ */ jsx(TagGroup, { "aria-label": t("viewAnnouncementPage.tagsAriaLabel"), children: props.tags.map((tag) => /* @__PURE__ */ jsxs(
68
+ Tag,
69
+ {
70
+ size: "small",
71
+ href: `${announcementsLink()}?tag=${tag.slug}`,
72
+ children: [
73
+ /* @__PURE__ */ jsx(RiHashtag, { size: 10 }),
74
+ " ",
75
+ tag.title
76
+ ]
77
+ },
78
+ tag.slug
79
+ )) });
80
+ };
81
+ const BackToAnnouncementsButton = () => {
82
+ const announcementsLink = useRouteRef(rootRouteRef);
83
+ const { t } = useAnnouncementsTranslation();
84
+ return /* @__PURE__ */ jsx(Link, { href: announcementsLink(), color: "secondary", variant: "body-x-small", children: /* @__PURE__ */ jsxs(Flex, { align: "center", gap: "2", children: [
85
+ /* @__PURE__ */ jsx(RiArrowLeftLine, { size: 16 }),
86
+ /* @__PURE__ */ jsxs(Text, { variant: "body-small", children: [
87
+ " ",
88
+ t("viewAnnouncementPage.backToAnnouncements")
89
+ ] })
90
+ ] }) });
91
+ };
92
+ const AnnouncementDetailsCard = (props) => {
93
+ const { announcement, markdownRenderer } = props;
94
+ const { title, category, body, created_at, on_behalf_of, publisher, tags } = announcement;
95
+ const announcementsApi = useApi(announcementsApiRef);
96
+ const analytics = useAnalytics();
97
+ const { t } = useAnnouncementsTranslation();
98
+ const lastSeen = announcementsApi.lastSeenDate();
99
+ const announcementCreatedAt = DateTime.fromISO(created_at);
100
+ if (announcementCreatedAt > lastSeen) {
101
+ announcementsApi.markLastSeenDate(announcementCreatedAt);
102
+ }
103
+ useEffect(() => {
104
+ if (!announcement) {
105
+ return;
106
+ }
107
+ analytics.captureEvent("view", announcement.title, {
108
+ attributes: {
109
+ announcementId: announcement.id,
110
+ location: "AnnouncementPage"
111
+ }
112
+ });
113
+ }, [analytics, announcement]);
114
+ return /* @__PURE__ */ jsxs(Card, { children: [
115
+ /* @__PURE__ */ jsx(
116
+ Box,
117
+ {
118
+ style: {
119
+ borderBottom: "solid 1px #e0e0e0",
120
+ paddingBottom: 16,
121
+ paddingRight: 8
122
+ },
123
+ children: /* @__PURE__ */ jsxs(CardHeader, { children: [
124
+ /* @__PURE__ */ jsxs(Flex, { justify: "between", pb: "3", children: [
125
+ /* @__PURE__ */ jsx(AnnouncementCategoryBadge, { category }),
126
+ /* @__PURE__ */ jsx(Text, { variant: "body-small", as: "p", children: DateTime.fromISO(created_at).toRelative() })
127
+ ] }),
128
+ /* @__PURE__ */ jsx(Text, { variant: "title-medium", as: "h2", children: title }),
129
+ /* @__PURE__ */ jsxs(Text, { variant: "body-small", as: "p", children: [
130
+ t("viewAnnouncementPage.by"),
131
+ " ",
132
+ /* @__PURE__ */ jsx(EntityRefLink, { entityRef: on_behalf_of || publisher, hideIcon: true })
133
+ ] })
134
+ ] })
135
+ }
136
+ ),
137
+ /* @__PURE__ */ jsxs(CardBody, { children: [
138
+ /* @__PURE__ */ jsx(AnnouncementTagsTagGroup, { tags: tags ?? [] }),
139
+ /* @__PURE__ */ jsx(MarkdownRenderer, { content: body, rendererType: markdownRenderer })
140
+ ] })
141
+ ] });
142
+ };
143
+ const ViewAnnouncementPage = (props) => {
144
+ const { id } = useRouteRefParams(announcementViewRouteRef);
145
+ const announcementsApi = useApi(announcementsApiRef);
146
+ const { t } = useAnnouncementsTranslation();
147
+ const announcementsLink = useRouteRef(rootRouteRef);
148
+ const {
149
+ value: announcement,
150
+ loading,
151
+ error
152
+ } = useAsync(async () => announcementsApi.announcementByID(id), [id]);
153
+ if (loading) {
154
+ return /* @__PURE__ */ jsx(Skeleton, {});
155
+ } else if (error) {
156
+ return /* @__PURE__ */ jsx(Alert, { severity: "error", children: error.message });
157
+ } else if (!announcement) {
158
+ return /* @__PURE__ */ jsx(Alert, { severity: "error", children: t("viewAnnouncementPage.notFound") });
159
+ }
160
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
161
+ /* @__PURE__ */ jsx(
162
+ HeaderPage,
163
+ {
164
+ title: `${announcement.title ?? ""}`,
165
+ breadcrumbs: [
166
+ {
167
+ label: t("viewAnnouncementPage.announcements"),
168
+ href: announcementsLink()
169
+ }
170
+ ]
171
+ }
172
+ ),
173
+ /* @__PURE__ */ jsx(Container, { children: /* @__PURE__ */ jsxs(Grid.Root, { columns: "1", children: [
174
+ /* @__PURE__ */ jsx(Grid.Item, { children: /* @__PURE__ */ jsx(
175
+ AnnouncementDetailsCard,
176
+ {
177
+ announcement,
178
+ markdownRenderer: props.markdownRenderer
179
+ }
180
+ ) }),
181
+ /* @__PURE__ */ jsx(Grid.Item, { children: /* @__PURE__ */ jsx(BackToAnnouncementsButton, {}) })
182
+ ] }) })
183
+ ] });
184
+ };
185
+
186
+ export { ViewAnnouncementPage };
187
+ //# sourceMappingURL=ViewAnnouncementPage.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewAnnouncementPage.esm.js","sources":["../../../../src/alpha/components/announcements/ViewAnnouncementPage.tsx"],"sourcesContent":["/*\n * Copyright 2024 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 */\nimport { useEffect } from 'react';\nimport useAsync from 'react-use/lib/useAsync';\nimport { DateTime } from 'luxon';\nimport {\n Card,\n CardBody,\n CardHeader,\n Container,\n Flex,\n HeaderPage,\n Link,\n Text,\n Grid,\n Box,\n Skeleton,\n Tag,\n TagGroup,\n} from '@backstage/ui';\nimport {\n useApi,\n useRouteRef,\n useRouteRefParams,\n useAnalytics,\n} from '@backstage/core-plugin-api';\nimport { Alert } from '@material-ui/lab';\nimport { RiArrowLeftLine, RiHashtag, RiPriceTag3Line } from '@remixicon/react';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport {\n announcementsApiRef,\n useAnnouncementsTranslation,\n} from '@backstage-community/plugin-announcements-react';\nimport {\n Announcement,\n Tag as AnnouncementTag,\n Category,\n} from '@backstage-community/plugin-announcements-common';\n\nimport { announcementViewRouteRef, rootRouteRef } from '../../../routes';\nimport {\n MarkdownRenderer,\n MarkdownRendererTypeProps,\n} from '../../../components';\n\nconst AnnouncementCategoryBadge = (props: {\n category: Category | undefined;\n}) => {\n const { category } = props;\n const announcementsLink = useRouteRef(rootRouteRef);\n\n if (!category) {\n return null;\n }\n\n return (\n <Link\n href={`${announcementsLink()}?category=${category.slug}`}\n color=\"secondary\"\n variant=\"body-small\"\n >\n <Flex align=\"center\" gap=\"2\">\n <RiPriceTag3Line size={16} /> {category?.title}\n </Flex>\n </Link>\n );\n};\n\nconst AnnouncementTagsTagGroup = (props: { tags: AnnouncementTag[] }) => {\n const announcementsLink = useRouteRef(rootRouteRef);\n const { t } = useAnnouncementsTranslation();\n return (\n <TagGroup aria-label={t('viewAnnouncementPage.tagsAriaLabel')}>\n {props.tags.map(tag => (\n <Tag\n key={tag.slug}\n size=\"small\"\n href={`${announcementsLink()}?tag=${tag.slug}`}\n >\n <RiHashtag size={10} /> {tag.title}\n </Tag>\n ))}\n </TagGroup>\n );\n};\n\nconst BackToAnnouncementsButton = () => {\n const announcementsLink = useRouteRef(rootRouteRef);\n const { t } = useAnnouncementsTranslation();\n return (\n <Link href={announcementsLink()} color=\"secondary\" variant=\"body-x-small\">\n <Flex align=\"center\" gap=\"2\">\n <RiArrowLeftLine size={16} />\n <Text variant=\"body-small\">\n {' '}\n {t('viewAnnouncementPage.backToAnnouncements')}\n </Text>\n </Flex>\n </Link>\n );\n};\n\ntype AnnouncementDetailsCardProps = {\n announcement: Announcement;\n markdownRenderer?: MarkdownRendererTypeProps;\n};\n\nconst AnnouncementDetailsCard = (props: AnnouncementDetailsCardProps) => {\n const { announcement, markdownRenderer } = props;\n const { title, category, body, created_at, on_behalf_of, publisher, tags } =\n announcement;\n\n const announcementsApi = useApi(announcementsApiRef);\n const analytics = useAnalytics();\n const { t } = useAnnouncementsTranslation();\n\n const lastSeen = announcementsApi.lastSeenDate();\n const announcementCreatedAt = DateTime.fromISO(created_at);\n\n if (announcementCreatedAt > lastSeen) {\n announcementsApi.markLastSeenDate(announcementCreatedAt);\n }\n\n useEffect(() => {\n if (!announcement) {\n return;\n }\n\n analytics.captureEvent('view', announcement.title, {\n attributes: {\n announcementId: announcement.id,\n location: 'AnnouncementPage',\n },\n });\n }, [analytics, announcement]);\n\n return (\n <Card>\n <Box\n style={{\n borderBottom: 'solid 1px #e0e0e0',\n paddingBottom: 16,\n paddingRight: 8,\n }}\n >\n <CardHeader>\n <Flex justify=\"between\" pb=\"3\">\n <AnnouncementCategoryBadge category={category} />\n\n <Text variant=\"body-small\" as=\"p\">\n {DateTime.fromISO(created_at).toRelative()}\n </Text>\n </Flex>\n <Text variant=\"title-medium\" as=\"h2\">\n {title}\n </Text>\n\n <Text variant=\"body-small\" as=\"p\">\n {t('viewAnnouncementPage.by')}{' '}\n <EntityRefLink entityRef={on_behalf_of || publisher} hideIcon />\n </Text>\n </CardHeader>\n </Box>\n\n <CardBody>\n <AnnouncementTagsTagGroup tags={tags ?? []} />\n <MarkdownRenderer content={body} rendererType={markdownRenderer} />\n </CardBody>\n </Card>\n );\n};\n\ntype ViewAnnouncementPageProps = {\n title: string;\n markdownRenderer?: MarkdownRendererTypeProps;\n};\n\nexport const ViewAnnouncementPage = (props: ViewAnnouncementPageProps) => {\n const { id } = useRouteRefParams(announcementViewRouteRef);\n const announcementsApi = useApi(announcementsApiRef);\n const { t } = useAnnouncementsTranslation();\n\n const announcementsLink = useRouteRef(rootRouteRef);\n\n const {\n value: announcement,\n loading,\n error,\n } = useAsync(async () => announcementsApi.announcementByID(id), [id]);\n\n if (loading) {\n return <Skeleton />;\n } else if (error) {\n return <Alert severity=\"error\">{error.message}</Alert>;\n } else if (!announcement) {\n return <Alert severity=\"error\">{t('viewAnnouncementPage.notFound')}</Alert>;\n }\n\n return (\n <>\n <HeaderPage\n title={`${announcement.title ?? ''}`}\n breadcrumbs={[\n {\n label: t('viewAnnouncementPage.announcements'),\n href: announcementsLink(),\n },\n ]}\n />\n\n <Container>\n <Grid.Root columns=\"1\">\n <Grid.Item>\n <AnnouncementDetailsCard\n announcement={announcement}\n markdownRenderer={props.markdownRenderer}\n />\n </Grid.Item>\n\n <Grid.Item>\n <BackToAnnouncementsButton />\n </Grid.Item>\n </Grid.Root>\n </Container>\n </>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -31,8 +31,6 @@ function OnBehalfTeamDropdown({
31
31
  // refs
32
32
  "",
33
33
  // searchTerm
34
- 25,
35
- // limit
36
34
  "Group"
37
35
  // kind
38
36
  );
@@ -1 +1 @@
1
- {"version":3,"file":"OnBehalfTeamDropdown.esm.js","sources":["../../../../../src/components/Admin/AnnouncementsContent/AnnouncementForm/OnBehalfTeamDropdown.tsx"],"sourcesContent":["/*\n * Copyright 2025 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 */\nimport TextField from '@mui/material/TextField';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport { identityApiRef, useApi } from '@backstage/core-plugin-api';\nimport {\n useAnnouncementsTranslation,\n useCatalogEntities,\n} from '@backstage-community/plugin-announcements-react';\nimport useAsync from 'react-use/esm/useAsync';\nimport { useMemo } from 'react';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\n\ntype OnBehalfTeamDropdownProps = {\n selectedTeam: string;\n onChange: (team: string) => void;\n};\n\nfunction getTeamDisplayName(team: any): string {\n if (team.kind && team.kind.toLowerCase() === 'group') {\n return team.spec?.profile?.displayName ?? '';\n }\n return '';\n}\n\nexport default function OnBehalfTeamDropdown({\n selectedTeam,\n onChange,\n}: OnBehalfTeamDropdownProps) {\n const { t } = useAnnouncementsTranslation();\n const identityApi = useApi(identityApiRef);\n\n const { value: userOwns } = useAsync(async () => {\n const identity = await identityApi.getBackstageIdentity();\n return [identity.userEntityRef, ...identity.ownershipEntityRefs];\n }, [identityApi]);\n\n const { entities: teams, loading: teamsLoading } = useCatalogEntities(\n userOwns, // refs\n '', // searchTerm\n 25, // limit\n 'Group', // kind\n );\n\n const teamOptions = useMemo(() => {\n return teams.map(team => ({\n entityRef: stringifyEntityRef(team),\n displayName: getTeamDisplayName(team),\n }));\n }, [teams]);\n\n const selectedTeamOption = useMemo(() => {\n return teamOptions.find(team => team.entityRef === selectedTeam) || null;\n }, [teamOptions, selectedTeam]);\n\n return (\n <Autocomplete\n value={selectedTeamOption}\n onChange={(_, newValue) => {\n onChange(newValue?.entityRef || '');\n }}\n options={teamOptions}\n getOptionLabel={team => team.entityRef}\n loading={teamsLoading}\n id=\"team-dropdown-field\"\n renderOption={(props, team) => (\n <Box component=\"li\" {...props}>\n <Box sx={{ display: 'flex', flexDirection: 'column' }}>\n <Typography variant=\"body1\">{team.entityRef}</Typography>\n {team.displayName && (\n <Typography variant=\"caption\" color=\"text.secondary\">\n {team.displayName}\n </Typography>\n )}\n </Box>\n </Box>\n )}\n renderInput={params => (\n <TextField\n {...params}\n id=\"team\"\n label={t('announcementForm.onBehalfOf')}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <>\n {teamsLoading ? (\n <CircularProgress color=\"inherit\" size={20} />\n ) : null}\n {params.InputProps.endAdornment}\n </>\n ),\n }}\n />\n )}\n />\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAkCA,SAAS,mBAAmB,IAAmB,EAAA;AAC7C,EAAA,IAAI,KAAK,IAAQ,IAAA,IAAA,CAAK,IAAK,CAAA,WAAA,OAAkB,OAAS,EAAA;AACpD,IAAO,OAAA,IAAA,CAAK,IAAM,EAAA,OAAA,EAAS,WAAe,IAAA,EAAA;AAAA;AAE5C,EAAO,OAAA,EAAA;AACT;AAEA,SAAwB,oBAAqB,CAAA;AAAA,EAC3C,YAAA;AAAA,EACA;AACF,CAA8B,EAAA;AAC5B,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,2BAA4B,EAAA;AAC1C,EAAM,MAAA,WAAA,GAAc,OAAO,cAAc,CAAA;AAEzC,EAAA,MAAM,EAAE,KAAA,EAAO,QAAS,EAAA,GAAI,SAAS,YAAY;AAC/C,IAAM,MAAA,QAAA,GAAW,MAAM,WAAA,CAAY,oBAAqB,EAAA;AACxD,IAAA,OAAO,CAAC,QAAA,CAAS,aAAe,EAAA,GAAG,SAAS,mBAAmB,CAAA;AAAA,GACjE,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,MAAM,EAAE,QAAA,EAAU,KAAO,EAAA,OAAA,EAAS,cAAiB,GAAA,kBAAA;AAAA,IACjD,QAAA;AAAA;AAAA,IACA,EAAA;AAAA;AAAA,IACA,EAAA;AAAA;AAAA,IACA;AAAA;AAAA,GACF;AAEA,EAAM,MAAA,WAAA,GAAc,QAAQ,MAAM;AAChC,IAAO,OAAA,KAAA,CAAM,IAAI,CAAS,IAAA,MAAA;AAAA,MACxB,SAAA,EAAW,mBAAmB,IAAI,CAAA;AAAA,MAClC,WAAA,EAAa,mBAAmB,IAAI;AAAA,KACpC,CAAA,CAAA;AAAA,GACJ,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAM,MAAA,kBAAA,GAAqB,QAAQ,MAAM;AACvC,IAAA,OAAO,YAAY,IAAK,CAAA,CAAA,IAAA,KAAQ,IAAK,CAAA,SAAA,KAAc,YAAY,CAAK,IAAA,IAAA;AAAA,GACnE,EAAA,CAAC,WAAa,EAAA,YAAY,CAAC,CAAA;AAE9B,EACE,uBAAA,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,KAAO,EAAA,kBAAA;AAAA,MACP,QAAA,EAAU,CAAC,CAAA,EAAG,QAAa,KAAA;AACzB,QAAS,QAAA,CAAA,QAAA,EAAU,aAAa,EAAE,CAAA;AAAA,OACpC;AAAA,MACA,OAAS,EAAA,WAAA;AAAA,MACT,cAAA,EAAgB,UAAQ,IAAK,CAAA,SAAA;AAAA,MAC7B,OAAS,EAAA,YAAA;AAAA,MACT,EAAG,EAAA,qBAAA;AAAA,MACH,cAAc,CAAC,KAAA,EAAO,yBACnB,GAAA,CAAA,GAAA,EAAA,EAAI,WAAU,IAAM,EAAA,GAAG,KACtB,EAAA,QAAA,kBAAA,IAAA,CAAC,OAAI,EAAI,EAAA,EAAE,SAAS,MAAQ,EAAA,aAAA,EAAe,UACzC,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAW,EAAA,EAAA,OAAA,EAAQ,OAAS,EAAA,QAAA,EAAA,IAAA,CAAK,SAAU,EAAA,CAAA;AAAA,QAC3C,IAAA,CAAK,+BACH,GAAA,CAAA,UAAA,EAAA,EAAW,SAAQ,SAAU,EAAA,KAAA,EAAM,gBACjC,EAAA,QAAA,EAAA,IAAA,CAAK,WACR,EAAA;AAAA,OAAA,EAEJ,CACF,EAAA,CAAA;AAAA,MAEF,aAAa,CACX,MAAA,qBAAA,GAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACE,GAAG,MAAA;AAAA,UACJ,EAAG,EAAA,MAAA;AAAA,UACH,KAAA,EAAO,EAAE,6BAA6B,CAAA;AAAA,UACtC,UAAY,EAAA;AAAA,YACV,GAAG,MAAO,CAAA,UAAA;AAAA,YACV,8BAEK,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,cAAA,YAAA,uBACE,gBAAiB,EAAA,EAAA,KAAA,EAAM,SAAU,EAAA,IAAA,EAAM,IAAI,CAC1C,GAAA,IAAA;AAAA,cACH,OAAO,UAAW,CAAA;AAAA,aACrB,EAAA;AAAA;AAEJ;AAAA;AACF;AAAA,GAEJ;AAEJ;;;;"}
1
+ {"version":3,"file":"OnBehalfTeamDropdown.esm.js","sources":["../../../../../src/components/Admin/AnnouncementsContent/AnnouncementForm/OnBehalfTeamDropdown.tsx"],"sourcesContent":["/*\n * Copyright 2025 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 */\nimport TextField from '@mui/material/TextField';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport { identityApiRef, useApi } from '@backstage/core-plugin-api';\nimport {\n useAnnouncementsTranslation,\n useCatalogEntities,\n} from '@backstage-community/plugin-announcements-react';\nimport useAsync from 'react-use/esm/useAsync';\nimport { useMemo } from 'react';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\n\ntype OnBehalfTeamDropdownProps = {\n selectedTeam: string;\n onChange: (team: string) => void;\n};\n\nfunction getTeamDisplayName(team: any): string {\n if (team.kind && team.kind.toLowerCase() === 'group') {\n return team.spec?.profile?.displayName ?? '';\n }\n return '';\n}\n\nexport default function OnBehalfTeamDropdown({\n selectedTeam,\n onChange,\n}: OnBehalfTeamDropdownProps) {\n const { t } = useAnnouncementsTranslation();\n const identityApi = useApi(identityApiRef);\n\n const { value: userOwns } = useAsync(async () => {\n const identity = await identityApi.getBackstageIdentity();\n return [identity.userEntityRef, ...identity.ownershipEntityRefs];\n }, [identityApi]);\n\n const { entities: teams, loading: teamsLoading } = useCatalogEntities(\n userOwns, // refs\n '', // searchTerm\n 'Group', // kind\n );\n\n const teamOptions = useMemo(() => {\n return teams.map(team => ({\n entityRef: stringifyEntityRef(team),\n displayName: getTeamDisplayName(team),\n }));\n }, [teams]);\n\n const selectedTeamOption = useMemo(() => {\n return teamOptions.find(team => team.entityRef === selectedTeam) || null;\n }, [teamOptions, selectedTeam]);\n\n return (\n <Autocomplete\n value={selectedTeamOption}\n onChange={(_, newValue) => {\n onChange(newValue?.entityRef || '');\n }}\n options={teamOptions}\n getOptionLabel={team => team.entityRef}\n loading={teamsLoading}\n id=\"team-dropdown-field\"\n renderOption={(props, team) => (\n <Box component=\"li\" {...props}>\n <Box sx={{ display: 'flex', flexDirection: 'column' }}>\n <Typography variant=\"body1\">{team.entityRef}</Typography>\n {team.displayName && (\n <Typography variant=\"caption\" color=\"text.secondary\">\n {team.displayName}\n </Typography>\n )}\n </Box>\n </Box>\n )}\n renderInput={params => (\n <TextField\n {...params}\n id=\"team\"\n label={t('announcementForm.onBehalfOf')}\n InputProps={{\n ...params.InputProps,\n endAdornment: (\n <>\n {teamsLoading ? (\n <CircularProgress color=\"inherit\" size={20} />\n ) : null}\n {params.InputProps.endAdornment}\n </>\n ),\n }}\n />\n )}\n />\n );\n}\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export { AnnouncementsTimeline } from './AnnouncementsTimeline/AnnouncementsTimeline.esm.js';
2
2
  export { AdminPortal } from './Admin/AdminPortal/AdminPortal.esm.js';
3
3
  export { AnnouncementsContent } from './Admin/AnnouncementsContent/AnnouncementsContent.esm.js';
4
+ export { MarkdownRenderer } from './MarkdownRenderer/MarkdownRenderer.esm.js';
4
5
  //# sourceMappingURL=index.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
1
+ {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage-community/plugin-announcements",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "main": "./dist/index.esm.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "license": "Apache-2.0",
@@ -61,8 +61,8 @@
61
61
  "postpack": "backstage-cli package postpack"
62
62
  },
63
63
  "dependencies": {
64
- "@backstage-community/plugin-announcements-common": "^0.14.0",
65
- "@backstage-community/plugin-announcements-react": "^0.17.0",
64
+ "@backstage-community/plugin-announcements-common": "^0.15.0",
65
+ "@backstage-community/plugin-announcements-react": "^0.18.0",
66
66
  "@backstage/catalog-model": "^1.7.6",
67
67
  "@backstage/core-app-api": "^1.19.3",
68
68
  "@backstage/core-compat-api": "^0.5.5",
@@ -76,12 +76,13 @@
76
76
  "@backstage/plugin-search-react": "^1.10.1",
77
77
  "@backstage/plugin-signals-react": "^0.0.18",
78
78
  "@backstage/theme": "^0.7.1",
79
- "@backstage/ui": "^0.9.1",
79
+ "@backstage/ui": "^0.10.0",
80
80
  "@material-ui/core": "^4.12.2",
81
81
  "@material-ui/icons": "^4.11.3",
82
82
  "@material-ui/lab": "4.0.0-alpha.61",
83
83
  "@mui/icons-material": "^5.15.6",
84
84
  "@mui/material": "^5.15.6",
85
+ "@remixicon/react": "^4.7.0",
85
86
  "@types/react": "^17.0.0 || ^18.0.0",
86
87
  "@uiw/react-md-editor": "^4.0.8",
87
88
  "add": "^2.0.6",
@@ -95,7 +96,7 @@
95
96
  "react-router-dom": "^6.3.0"
96
97
  },
97
98
  "devDependencies": {
98
- "@backstage/cli": "^0.35.0",
99
+ "@backstage/cli": "^0.35.1",
99
100
  "@backstage/dev-utils": "^1.1.18",
100
101
  "@backstage/frontend-test-utils": "^0.4.2",
101
102
  "@backstage/plugin-signals": "^0.0.26",
@@ -104,7 +105,7 @@
104
105
  "@testing-library/react": "^14.0.0",
105
106
  "@testing-library/user-event": "^14.5.1",
106
107
  "@types/luxon": "^3.3.3",
107
- "cross-fetch": "^3.1.8",
108
+ "cross-fetch": "^4.0.0",
108
109
  "msw": "^1.3.2",
109
110
  "react": "^17.0.0 || ^18.0.0",
110
111
  "react-dom": "^17.0.0 || ^18.0.0",