@backstage-community/plugin-announcements 0.5.6 → 0.5.8

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 (47) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/alpha/entityCards.esm.js +2 -2
  3. package/dist/alpha/entityCards.esm.js.map +1 -1
  4. package/dist/alpha/pages.esm.js +2 -2
  5. package/dist/alpha/pages.esm.js.map +1 -1
  6. package/dist/components/Admin/AdminPortal/AdminPortal.esm.js +32 -21
  7. package/dist/components/Admin/AdminPortal/AdminPortal.esm.js.map +1 -1
  8. package/dist/components/Admin/AnnouncementsContent/AnnouncementsContent.esm.js +79 -67
  9. package/dist/components/Admin/AnnouncementsContent/AnnouncementsContent.esm.js.map +1 -1
  10. package/dist/components/Admin/CategoriesContent/CategoriesContent.esm.js +41 -35
  11. package/dist/components/Admin/CategoriesContent/CategoriesContent.esm.js.map +1 -1
  12. package/dist/components/AnnouncementForm/AnnouncementForm.esm.js +93 -78
  13. package/dist/components/AnnouncementForm/AnnouncementForm.esm.js.map +1 -1
  14. package/dist/components/AnnouncementForm/CategoryInput.esm.js +8 -5
  15. package/dist/components/AnnouncementForm/CategoryInput.esm.js.map +1 -1
  16. package/dist/components/AnnouncementPage/AnnouncementPage.esm.js +19 -10
  17. package/dist/components/AnnouncementPage/AnnouncementPage.esm.js.map +1 -1
  18. package/dist/components/AnnouncementSearchResultListItem/AnnouncementSearchResultListItem.esm.js +29 -20
  19. package/dist/components/AnnouncementSearchResultListItem/AnnouncementSearchResultListItem.esm.js.map +1 -1
  20. package/dist/components/AnnouncementsCard/AnnouncementsCard.esm.js +57 -35
  21. package/dist/components/AnnouncementsCard/AnnouncementsCard.esm.js.map +1 -1
  22. package/dist/components/AnnouncementsPage/AnnouncementsPage.esm.js +145 -100
  23. package/dist/components/AnnouncementsPage/AnnouncementsPage.esm.js.map +1 -1
  24. package/dist/components/AnnouncementsPage/ContextMenu.esm.js +40 -27
  25. package/dist/components/AnnouncementsPage/ContextMenu.esm.js.map +1 -1
  26. package/dist/components/AnnouncementsPage/DeleteAnnouncementDialog.esm.js +16 -10
  27. package/dist/components/AnnouncementsPage/DeleteAnnouncementDialog.esm.js.map +1 -1
  28. package/dist/components/AnnouncementsTimeline/AnnouncementsTimeline.esm.js +26 -15
  29. package/dist/components/AnnouncementsTimeline/AnnouncementsTimeline.esm.js.map +1 -1
  30. package/dist/components/CategoriesForm/CategoriesForm.esm.js +30 -26
  31. package/dist/components/CategoriesForm/CategoriesForm.esm.js.map +1 -1
  32. package/dist/components/CategoriesPage/CategoriesPage.esm.js +50 -42
  33. package/dist/components/CategoriesPage/CategoriesPage.esm.js.map +1 -1
  34. package/dist/components/CategoriesPage/DeleteCategoryDialog.esm.js +8 -2
  35. package/dist/components/CategoriesPage/DeleteCategoryDialog.esm.js.map +1 -1
  36. package/dist/components/CreateAnnouncementPage/CreateAnnouncementPage.esm.js +11 -8
  37. package/dist/components/CreateAnnouncementPage/CreateAnnouncementPage.esm.js.map +1 -1
  38. package/dist/components/EditAnnouncementPage/EditAnnouncementPage.esm.js +10 -7
  39. package/dist/components/EditAnnouncementPage/EditAnnouncementPage.esm.js.map +1 -1
  40. package/dist/components/NewAnnouncementBanner/NewAnnouncementBanner.esm.js +35 -29
  41. package/dist/components/NewAnnouncementBanner/NewAnnouncementBanner.esm.js.map +1 -1
  42. package/dist/components/NewCategoryDialog/NewCategoryDialog.esm.js +22 -14
  43. package/dist/components/NewCategoryDialog/NewCategoryDialog.esm.js.map +1 -1
  44. package/dist/components/Router.esm.js +41 -32
  45. package/dist/components/Router.esm.js.map +1 -1
  46. package/dist/index.d.ts +11 -9
  47. package/package.json +21 -21
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @backstage-community/plugin-announcements
2
2
 
3
+ ## 0.5.8
4
+
5
+ ### Patch Changes
6
+
7
+ - 11be6bb: chore(deps): Upgrade to Backstage 1.38
8
+ - Updated dependencies [11be6bb]
9
+ - @backstage-community/plugin-announcements-common@0.3.2
10
+ - @backstage-community/plugin-announcements-react@0.4.3
11
+
12
+ ## 0.5.7
13
+
14
+ ### Patch Changes
15
+
16
+ - 32b99b3: - Add `hideStartAt` React prop to allow hiding the "Start at" date label on announcements card
17
+
18
+ ```diff
19
+ - <AnnouncementsCard max={2} />
20
+ + <AnnouncementsCard max={2} hideStartAt />
21
+ ```
22
+
3
23
  ## 0.5.6
4
24
 
5
25
  ### Patch Changes
@@ -1,4 +1,4 @@
1
- import React__default from 'react';
1
+ import { jsx } from 'react/jsx-runtime';
2
2
  import { EntityCardBlueprint } from '@backstage/plugin-catalog-react/alpha';
3
3
 
4
4
  const entityAnnouncementsCard = EntityCardBlueprint.make({
@@ -7,7 +7,7 @@ const entityAnnouncementsCard = EntityCardBlueprint.make({
7
7
  filter: "kind:component,system",
8
8
  loader: async () => {
9
9
  const { AnnouncementsCard } = await import('../components/AnnouncementsCard/index.esm.js');
10
- return /* @__PURE__ */ React__default.createElement(AnnouncementsCard, null);
10
+ return /* @__PURE__ */ jsx(AnnouncementsCard, {});
11
11
  }
12
12
  }
13
13
  });
@@ -1 +1 @@
1
- {"version":3,"file":"entityCards.esm.js","sources":["../../src/alpha/entityCards.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 React from 'react';\nimport { EntityCardBlueprint } from '@backstage/plugin-catalog-react/alpha';\n\n/**\n * @alpha\n */\nexport const entityAnnouncementsCard = EntityCardBlueprint.make({\n name: 'announcements',\n params: {\n filter: 'kind:component,system',\n loader: async () => {\n const { AnnouncementsCard } = await import(\n '../components/AnnouncementsCard'\n );\n\n return <AnnouncementsCard />;\n },\n },\n});\n"],"names":[],"mappings":";;;AAqBa,MAAA,uBAAA,GAA0B,oBAAoB,IAAK,CAAA;AAAA,EAC9D,IAAM,EAAA,eAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACN,MAAQ,EAAA,uBAAA;AAAA,IACR,QAAQ,YAAY;AAClB,MAAA,MAAM,EAAE,iBAAA,EAAsB,GAAA,MAAM,OAClC,8CACF,CAAA;AAEA,MAAA,oDAAQ,iBAAkB,EAAA,IAAA,CAAA;AAAA;AAC5B;AAEJ,CAAC;;;;"}
1
+ {"version":3,"file":"entityCards.esm.js","sources":["../../src/alpha/entityCards.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 { EntityCardBlueprint } from '@backstage/plugin-catalog-react/alpha';\n\n/**\n * @alpha\n */\nexport const entityAnnouncementsCard = EntityCardBlueprint.make({\n name: 'announcements',\n params: {\n filter: 'kind:component,system',\n loader: async () => {\n const { AnnouncementsCard } = await import(\n '../components/AnnouncementsCard'\n );\n\n return <AnnouncementsCard />;\n },\n },\n});\n"],"names":[],"mappings":";;;AAoBa,MAAA,uBAAA,GAA0B,oBAAoB,IAAK,CAAA;AAAA,EAC9D,IAAM,EAAA,eAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACN,MAAQ,EAAA,uBAAA;AAAA,IACR,QAAQ,YAAY;AAClB,MAAA,MAAM,EAAE,iBAAA,EAAsB,GAAA,MAAM,OAClC,8CACF,CAAA;AAEA,MAAA,2BAAQ,iBAAkB,EAAA,EAAA,CAAA;AAAA;AAC5B;AAEJ,CAAC;;;;"}
@@ -1,4 +1,4 @@
1
- import React__default from 'react';
1
+ import { jsx } from 'react/jsx-runtime';
2
2
  import { convertLegacyRouteRef } from '@backstage/core-compat-api';
3
3
  import { PageBlueprint } from '@backstage/frontend-plugin-api';
4
4
  import { rootRouteRef } from '../routes.esm.js';
@@ -9,7 +9,7 @@ const announcementsPage = PageBlueprint.make({
9
9
  routeRef: convertLegacyRouteRef(rootRouteRef),
10
10
  loader: async () => {
11
11
  const { Router } = await import('../components/Router.esm.js');
12
- return /* @__PURE__ */ React__default.createElement(Router, null);
12
+ return /* @__PURE__ */ jsx(Router, {});
13
13
  }
14
14
  }
15
15
  });
@@ -1 +1 @@
1
- {"version":3,"file":"pages.esm.js","sources":["../../src/alpha/pages.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 React from 'react';\nimport { convertLegacyRouteRef } from '@backstage/core-compat-api';\nimport { PageBlueprint } from '@backstage/frontend-plugin-api';\nimport { rootRouteRef } from '../routes';\n\n/**\n * @alpha\n */\nexport const announcementsPage = PageBlueprint.make({\n params: {\n defaultPath: '/announcements',\n routeRef: convertLegacyRouteRef(rootRouteRef),\n loader: async () => {\n const { Router } = await import('../components/Router');\n return <Router />;\n },\n },\n});\n"],"names":[],"mappings":";;;;;AAuBa,MAAA,iBAAA,GAAoB,cAAc,IAAK,CAAA;AAAA,EAClD,MAAQ,EAAA;AAAA,IACN,WAAa,EAAA,gBAAA;AAAA,IACb,QAAA,EAAU,sBAAsB,YAAY,CAAA;AAAA,IAC5C,QAAQ,YAAY;AAClB,MAAA,MAAM,EAAE,MAAA,EAAW,GAAA,MAAM,OAAO,6BAAsB,CAAA;AACtD,MAAA,oDAAQ,MAAO,EAAA,IAAA,CAAA;AAAA;AACjB;AAEJ,CAAC;;;;"}
1
+ {"version":3,"file":"pages.esm.js","sources":["../../src/alpha/pages.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 { convertLegacyRouteRef } from '@backstage/core-compat-api';\nimport { PageBlueprint } from '@backstage/frontend-plugin-api';\nimport { rootRouteRef } from '../routes';\n\n/**\n * @alpha\n */\nexport const announcementsPage = PageBlueprint.make({\n params: {\n defaultPath: '/announcements',\n routeRef: convertLegacyRouteRef(rootRouteRef),\n loader: async () => {\n const { Router } = await import('../components/Router');\n return <Router />;\n },\n },\n});\n"],"names":[],"mappings":";;;;;AAsBa,MAAA,iBAAA,GAAoB,cAAc,IAAK,CAAA;AAAA,EAClD,MAAQ,EAAA;AAAA,IACN,WAAa,EAAA,gBAAA;AAAA,IACb,QAAA,EAAU,sBAAsB,YAAY,CAAA;AAAA,IAC5C,QAAQ,YAAY;AAClB,MAAA,MAAM,EAAE,MAAA,EAAW,GAAA,MAAM,OAAO,6BAAsB,CAAA;AACtD,MAAA,2BAAQ,MAAO,EAAA,EAAA,CAAA;AAAA;AACjB;AAEJ,CAAC;;;;"}
@@ -1,4 +1,5 @@
1
- import React__default, { useState } from 'react';
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useState } from 'react';
2
3
  import { Page, Header, Content } from '@backstage/core-components';
3
4
  import { AnnouncementsContent } from '../AnnouncementsContent/AnnouncementsContent.esm.js';
4
5
  import { CategoriesContent } from '../CategoriesContent/CategoriesContent.esm.js';
@@ -21,30 +22,40 @@ const AdminPortalContent = () => {
21
22
  const handleChange = (_event, tabValue) => {
22
23
  setTab(tabValue);
23
24
  };
24
- return /* @__PURE__ */ React__default.createElement(TabContext, { value: tab }, /* @__PURE__ */ React__default.createElement(TabList, { onChange: handleChange }, /* @__PURE__ */ React__default.createElement(
25
- Tab,
26
- {
27
- label: t("admin.adminPortal.announcementsLabels"),
28
- value: "announcements"
29
- }
30
- ), /* @__PURE__ */ React__default.createElement(
31
- Tab,
32
- {
33
- label: t("admin.adminPortal.categoriesLabel"),
34
- value: "categories"
35
- }
36
- )), /* @__PURE__ */ React__default.createElement(TabPanel, { value: "announcements", className: classes.tabPanel }, /* @__PURE__ */ React__default.createElement(AnnouncementsContent, null)), /* @__PURE__ */ React__default.createElement(TabPanel, { value: "categories", className: classes.tabPanel }, /* @__PURE__ */ React__default.createElement(CategoriesContent, null)));
25
+ return /* @__PURE__ */ jsxs(TabContext, { value: tab, children: [
26
+ /* @__PURE__ */ jsxs(TabList, { onChange: handleChange, children: [
27
+ /* @__PURE__ */ jsx(
28
+ Tab,
29
+ {
30
+ label: t("admin.adminPortal.announcementsLabels"),
31
+ value: "announcements"
32
+ }
33
+ ),
34
+ /* @__PURE__ */ jsx(
35
+ Tab,
36
+ {
37
+ label: t("admin.adminPortal.categoriesLabel"),
38
+ value: "categories"
39
+ }
40
+ )
41
+ ] }),
42
+ /* @__PURE__ */ jsx(TabPanel, { value: "announcements", className: classes.tabPanel, children: /* @__PURE__ */ jsx(AnnouncementsContent, {}) }),
43
+ /* @__PURE__ */ jsx(TabPanel, { value: "categories", className: classes.tabPanel, children: /* @__PURE__ */ jsx(CategoriesContent, {}) })
44
+ ] });
37
45
  };
38
46
  const AdminPortal = (props) => {
39
47
  const { title, subtitle, themeId } = props ?? {};
40
48
  const { t } = useAnnouncementsTranslation();
41
- return /* @__PURE__ */ React__default.createElement(Page, { themeId: themeId ?? "tool" }, /* @__PURE__ */ React__default.createElement(
42
- Header,
43
- {
44
- title: title ?? t("admin.adminPortal.title"),
45
- subtitle: subtitle ?? t("admin.adminPortal.title")
46
- }
47
- ), /* @__PURE__ */ React__default.createElement(RequirePermission, { permission: announcementCreatePermission }, /* @__PURE__ */ React__default.createElement(Content, null, /* @__PURE__ */ React__default.createElement(AdminPortalContent, null))));
49
+ return /* @__PURE__ */ jsxs(Page, { themeId: themeId ?? "tool", children: [
50
+ /* @__PURE__ */ jsx(
51
+ Header,
52
+ {
53
+ title: title ?? t("admin.adminPortal.title"),
54
+ subtitle: subtitle ?? t("admin.adminPortal.title")
55
+ }
56
+ ),
57
+ /* @__PURE__ */ jsx(RequirePermission, { permission: announcementCreatePermission, children: /* @__PURE__ */ jsx(Content, { children: /* @__PURE__ */ jsx(AdminPortalContent, {}) }) })
58
+ ] });
48
59
  };
49
60
 
50
61
  export { AdminPortal };
@@ -1 +1 @@
1
- {"version":3,"file":"AdminPortal.esm.js","sources":["../../../../src/components/Admin/AdminPortal/AdminPortal.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 React, { useState } from 'react';\nimport { Page, Header, Content } from '@backstage/core-components';\nimport { AnnouncementsContent } from '../AnnouncementsContent';\nimport { CategoriesContent } from '../CategoriesContent';\nimport { RequirePermission } from '@backstage/plugin-permission-react';\nimport { useAnnouncementsTranslation } from '@backstage-community/plugin-announcements-react';\nimport { makeStyles, Tab } from '@material-ui/core';\nimport { TabContext, TabList, TabPanel } from '@material-ui/lab';\nimport { announcementCreatePermission } from '@backstage-community/plugin-announcements-common';\n\nconst useStyles = makeStyles(() => ({\n tabPanel: {\n paddingLeft: '0px',\n paddingRight: '0px',\n },\n}));\n\ntype AdminPortalProps = {\n themeId?: string;\n title?: string;\n subtitle?: string;\n};\n\nconst AdminPortalContent = () => {\n const classes = useStyles();\n const [tab, setTab] = useState('announcements');\n const { t } = useAnnouncementsTranslation();\n const handleChange = (_event: React.ChangeEvent<{}>, tabValue: string) => {\n setTab(tabValue);\n };\n\n return (\n <TabContext value={tab}>\n <TabList onChange={handleChange}>\n <Tab\n label={t('admin.adminPortal.announcementsLabels')}\n value=\"announcements\"\n />\n <Tab\n label={t('admin.adminPortal.categoriesLabel')}\n value=\"categories\"\n />\n </TabList>\n <TabPanel value=\"announcements\" className={classes.tabPanel}>\n <AnnouncementsContent />\n </TabPanel>\n <TabPanel value=\"categories\" className={classes.tabPanel}>\n <CategoriesContent />\n </TabPanel>\n </TabContext>\n );\n};\n\n/** @public */\nexport const AdminPortal = (props?: AdminPortalProps) => {\n const { title, subtitle, themeId } = props ?? {};\n const { t } = useAnnouncementsTranslation();\n\n return (\n <Page themeId={themeId ?? 'tool'}>\n <Header\n title={title ?? t('admin.adminPortal.title')}\n subtitle={subtitle ?? t('admin.adminPortal.title')}\n />\n <RequirePermission permission={announcementCreatePermission}>\n <Content>\n <AdminPortalContent />\n </Content>\n </RequirePermission>\n </Page>\n );\n};\n"],"names":["React"],"mappings":";;;;;;;;;;AAyBA,MAAM,SAAA,GAAY,WAAW,OAAO;AAAA,EAClC,QAAU,EAAA;AAAA,IACR,WAAa,EAAA,KAAA;AAAA,IACb,YAAc,EAAA;AAAA;AAElB,CAAE,CAAA,CAAA;AAQF,MAAM,qBAAqB,MAAM;AAC/B,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAI,SAAS,eAAe,CAAA;AAC9C,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,2BAA4B,EAAA;AAC1C,EAAM,MAAA,YAAA,GAAe,CAAC,MAAA,EAA+B,QAAqB,KAAA;AACxE,IAAA,MAAA,CAAO,QAAQ,CAAA;AAAA,GACjB;AAEA,EAAA,oDACG,UAAW,EAAA,EAAA,KAAA,EAAO,uBAChBA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAQ,UAAU,YACjB,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,EAAE,uCAAuC,CAAA;AAAA,MAChD,KAAM,EAAA;AAAA;AAAA,GAER,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,EAAE,mCAAmC,CAAA;AAAA,MAC5C,KAAM,EAAA;AAAA;AAAA,GAEV,mBACCA,cAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAS,OAAM,eAAgB,EAAA,SAAA,EAAW,OAAQ,CAAA,QAAA,EAAA,kBAChDA,cAAA,CAAA,aAAA,CAAA,oBAAA,EAAA,IAAqB,CACxB,CACA,kBAAAA,cAAA,CAAA,aAAA,CAAC,QAAS,EAAA,EAAA,KAAA,EAAM,YAAa,EAAA,SAAA,EAAW,QAAQ,QAC9C,EAAA,kBAAAA,cAAA,CAAA,aAAA,CAAC,iBAAkB,EAAA,IAAA,CACrB,CACF,CAAA;AAEJ,CAAA;AAGa,MAAA,WAAA,GAAc,CAAC,KAA6B,KAAA;AACvD,EAAA,MAAM,EAAE,KAAO,EAAA,QAAA,EAAU,OAAQ,EAAA,GAAI,SAAS,EAAC;AAC/C,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,2BAA4B,EAAA;AAE1C,EAAA,uBACGA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,OAAS,EAAA,OAAA,IAAW,MACxB,EAAA,kBAAAA,cAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,KAAS,IAAA,CAAA,CAAE,yBAAyB,CAAA;AAAA,MAC3C,QAAA,EAAU,QAAY,IAAA,CAAA,CAAE,yBAAyB;AAAA;AAAA,GACnD,kBACCA,cAAA,CAAA,aAAA,CAAA,iBAAA,EAAA,EAAkB,UAAY,EAAA,4BAAA,EAAA,kBAC5BA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,kBACEA,cAAA,CAAA,aAAA,CAAA,kBAAA,EAAA,IAAmB,CACtB,CACF,CACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"AdminPortal.esm.js","sources":["../../../../src/components/Admin/AdminPortal/AdminPortal.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 { ChangeEvent, useState } from 'react';\nimport { Page, Header, Content } from '@backstage/core-components';\nimport { AnnouncementsContent } from '../AnnouncementsContent';\nimport { CategoriesContent } from '../CategoriesContent';\nimport { RequirePermission } from '@backstage/plugin-permission-react';\nimport { useAnnouncementsTranslation } from '@backstage-community/plugin-announcements-react';\nimport { makeStyles, Tab } from '@material-ui/core';\nimport { TabContext, TabList, TabPanel } from '@material-ui/lab';\nimport { announcementCreatePermission } from '@backstage-community/plugin-announcements-common';\n\nconst useStyles = makeStyles(() => ({\n tabPanel: {\n paddingLeft: '0px',\n paddingRight: '0px',\n },\n}));\n\ntype AdminPortalProps = {\n themeId?: string;\n title?: string;\n subtitle?: string;\n};\n\nconst AdminPortalContent = () => {\n const classes = useStyles();\n const [tab, setTab] = useState('announcements');\n const { t } = useAnnouncementsTranslation();\n const handleChange = (_event: ChangeEvent<{}>, tabValue: string) => {\n setTab(tabValue);\n };\n\n return (\n <TabContext value={tab}>\n <TabList onChange={handleChange}>\n <Tab\n label={t('admin.adminPortal.announcementsLabels')}\n value=\"announcements\"\n />\n <Tab\n label={t('admin.adminPortal.categoriesLabel')}\n value=\"categories\"\n />\n </TabList>\n <TabPanel value=\"announcements\" className={classes.tabPanel}>\n <AnnouncementsContent />\n </TabPanel>\n <TabPanel value=\"categories\" className={classes.tabPanel}>\n <CategoriesContent />\n </TabPanel>\n </TabContext>\n );\n};\n\n/** @public */\nexport const AdminPortal = (props?: AdminPortalProps) => {\n const { title, subtitle, themeId } = props ?? {};\n const { t } = useAnnouncementsTranslation();\n\n return (\n <Page themeId={themeId ?? 'tool'}>\n <Header\n title={title ?? t('admin.adminPortal.title')}\n subtitle={subtitle ?? t('admin.adminPortal.title')}\n />\n <RequirePermission permission={announcementCreatePermission}>\n <Content>\n <AdminPortalContent />\n </Content>\n </RequirePermission>\n </Page>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AAyBA,MAAM,SAAA,GAAY,WAAW,OAAO;AAAA,EAClC,QAAU,EAAA;AAAA,IACR,WAAa,EAAA,KAAA;AAAA,IACb,YAAc,EAAA;AAAA;AAElB,CAAE,CAAA,CAAA;AAQF,MAAM,qBAAqB,MAAM;AAC/B,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAI,SAAS,eAAe,CAAA;AAC9C,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,2BAA4B,EAAA;AAC1C,EAAM,MAAA,YAAA,GAAe,CAAC,MAAA,EAAyB,QAAqB,KAAA;AAClE,IAAA,MAAA,CAAO,QAAQ,CAAA;AAAA,GACjB;AAEA,EACE,uBAAA,IAAA,CAAC,UAAW,EAAA,EAAA,KAAA,EAAO,GACjB,EAAA,QAAA,EAAA;AAAA,oBAAC,IAAA,CAAA,OAAA,EAAA,EAAQ,UAAU,YACjB,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,EAAE,uCAAuC,CAAA;AAAA,UAChD,KAAM,EAAA;AAAA;AAAA,OACR;AAAA,sBACA,GAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,EAAE,mCAAmC,CAAA;AAAA,UAC5C,KAAM,EAAA;AAAA;AAAA;AACR,KACF,EAAA,CAAA;AAAA,oBACA,GAAA,CAAC,YAAS,KAAM,EAAA,eAAA,EAAgB,WAAW,OAAQ,CAAA,QAAA,EACjD,QAAC,kBAAA,GAAA,CAAA,oBAAA,EAAA,EAAqB,CACxB,EAAA,CAAA;AAAA,oBACA,GAAA,CAAC,YAAS,KAAM,EAAA,YAAA,EAAa,WAAW,OAAQ,CAAA,QAAA,EAC9C,QAAC,kBAAA,GAAA,CAAA,iBAAA,EAAA,EAAkB,CACrB,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ,CAAA;AAGa,MAAA,WAAA,GAAc,CAAC,KAA6B,KAAA;AACvD,EAAA,MAAM,EAAE,KAAO,EAAA,QAAA,EAAU,OAAQ,EAAA,GAAI,SAAS,EAAC;AAC/C,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,2BAA4B,EAAA;AAE1C,EAAA,uBACG,IAAA,CAAA,IAAA,EAAA,EAAK,OAAS,EAAA,OAAA,IAAW,MACxB,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,KAAS,IAAA,CAAA,CAAE,yBAAyB,CAAA;AAAA,QAC3C,QAAA,EAAU,QAAY,IAAA,CAAA,CAAE,yBAAyB;AAAA;AAAA,KACnD;AAAA,oBACA,GAAA,CAAC,qBAAkB,UAAY,EAAA,4BAAA,EAC7B,8BAAC,OACC,EAAA,EAAA,QAAA,kBAAA,GAAA,CAAC,kBAAmB,EAAA,EAAA,CAAA,EACtB,CACF,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
@@ -1,4 +1,5 @@
1
- import React__default, { useState } from 'react';
1
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
+ import { useState } from 'react';
2
3
  import { Progress, ErrorPanel, StatusOK, StatusPending, Table } from '@backstage/core-components';
3
4
  import { useApi, alertApiRef } from '@backstage/core-plugin-api';
4
5
  import { announcementsApiRef, useCategories, useAnnouncementsTranslation } from '@backstage-community/plugin-announcements-react';
@@ -97,117 +98,128 @@ const AnnouncementsContent = () => {
97
98
  }
98
99
  };
99
100
  if (loading) {
100
- return /* @__PURE__ */ React__default.createElement(Progress, null);
101
+ return /* @__PURE__ */ jsx(Progress, {});
101
102
  }
102
103
  if (error) {
103
- return /* @__PURE__ */ React__default.createElement(ErrorPanel, { error });
104
+ return /* @__PURE__ */ jsx(ErrorPanel, { error });
104
105
  }
105
106
  const columns = [
106
107
  {
107
- title: /* @__PURE__ */ React__default.createElement(Typography, null, t("admin.announcementsContent.table.title")),
108
+ title: /* @__PURE__ */ jsx(Typography, { children: t("admin.announcementsContent.table.title") }),
108
109
  sorting: true,
109
110
  field: "title",
110
111
  render: (rowData) => rowData.title
111
112
  },
112
113
  {
113
- title: /* @__PURE__ */ React__default.createElement(Typography, null, t("admin.announcementsContent.table.body")),
114
+ title: /* @__PURE__ */ jsx(Typography, { children: t("admin.announcementsContent.table.body") }),
114
115
  sorting: true,
115
116
  field: "body",
116
117
  render: (rowData) => rowData.body
117
118
  },
118
119
  {
119
- title: /* @__PURE__ */ React__default.createElement(Typography, null, t("admin.announcementsContent.table.publisher")),
120
+ title: /* @__PURE__ */ jsx(Typography, { children: t("admin.announcementsContent.table.publisher") }),
120
121
  sorting: true,
121
122
  field: "publisher",
122
123
  render: (rowData) => rowData.publisher
123
124
  },
124
125
  {
125
- title: /* @__PURE__ */ React__default.createElement(Typography, null, t("admin.announcementsContent.table.category")),
126
+ title: /* @__PURE__ */ jsx(Typography, { children: t("admin.announcementsContent.table.category") }),
126
127
  sorting: true,
127
128
  field: "category",
128
129
  render: (rowData) => rowData.category?.title ?? ""
129
130
  },
130
131
  {
131
- title: /* @__PURE__ */ React__default.createElement(Typography, null, t("admin.announcementsContent.table.status")),
132
+ title: /* @__PURE__ */ jsx(Typography, { children: t("admin.announcementsContent.table.status") }),
132
133
  sorting: true,
133
134
  field: "active",
134
- render: (rowData) => rowData.active ? /* @__PURE__ */ React__default.createElement(StatusOK, null, t("admin.announcementsContent.table.active")) : /* @__PURE__ */ React__default.createElement(StatusPending, null, t("admin.announcementsContent.table.inactive"))
135
+ render: (rowData) => rowData.active ? /* @__PURE__ */ jsx(StatusOK, { children: t("admin.announcementsContent.table.active") }) : /* @__PURE__ */ jsx(StatusPending, { children: t("admin.announcementsContent.table.inactive") })
135
136
  },
136
137
  {
137
- title: /* @__PURE__ */ React__default.createElement(Typography, null, t("admin.announcementsContent.table.created_at")),
138
+ title: /* @__PURE__ */ jsx(Typography, { children: t("admin.announcementsContent.table.created_at") }),
138
139
  sorting: true,
139
140
  field: "created_at",
140
141
  type: "date",
141
142
  render: (rowData) => DateTime.fromISO(rowData.created_at).toFormat("M/d/yyyy")
142
143
  },
143
144
  {
144
- title: /* @__PURE__ */ React__default.createElement(Typography, null, t("admin.announcementsContent.table.start_at")),
145
+ title: /* @__PURE__ */ jsx(Typography, { children: t("admin.announcementsContent.table.start_at") }),
145
146
  sorting: true,
146
147
  field: "start_at",
147
148
  type: "date",
148
149
  render: (rowData) => DateTime.fromISO(rowData.start_at).toFormat("M/d/yyyy")
149
150
  },
150
151
  {
151
- title: /* @__PURE__ */ React__default.createElement(Typography, null, t("admin.announcementsContent.table.actions")),
152
+ title: /* @__PURE__ */ jsx(Typography, { children: t("admin.announcementsContent.table.actions") }),
152
153
  render: (rowData) => {
153
- return /* @__PURE__ */ React__default.createElement(React__default.Fragment, null, /* @__PURE__ */ React__default.createElement(
154
- IconButton,
155
- {
156
- "aria-label": "preview",
157
- onClick: () => onTitleClick(rowData)
158
- },
159
- /* @__PURE__ */ React__default.createElement(PreviewIcon, { fontSize: "small", "data-testid": "preview" })
160
- ), /* @__PURE__ */ React__default.createElement(
161
- IconButton,
162
- {
163
- "aria-label": "edit",
164
- disabled: loadingUpdatePermission || !canUpdateAnnouncement,
165
- onClick: () => onEdit(rowData)
166
- },
167
- /* @__PURE__ */ React__default.createElement(EditIcon, { fontSize: "small", "data-testid": "edit-icon" })
168
- ), /* @__PURE__ */ React__default.createElement(
169
- IconButton,
170
- {
171
- "aria-label": "delete",
172
- disabled: loadingDeletePermission || !canDeleteAnnouncement,
173
- onClick: () => openDeleteDialog(rowData)
174
- },
175
- /* @__PURE__ */ React__default.createElement(DeleteIcon, { fontSize: "small", "data-testid": "delete-icon" })
176
- ));
154
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
155
+ /* @__PURE__ */ jsx(
156
+ IconButton,
157
+ {
158
+ "aria-label": "preview",
159
+ onClick: () => onTitleClick(rowData),
160
+ children: /* @__PURE__ */ jsx(PreviewIcon, { fontSize: "small", "data-testid": "preview" })
161
+ }
162
+ ),
163
+ /* @__PURE__ */ jsx(
164
+ IconButton,
165
+ {
166
+ "aria-label": "edit",
167
+ disabled: loadingUpdatePermission || !canUpdateAnnouncement,
168
+ onClick: () => onEdit(rowData),
169
+ children: /* @__PURE__ */ jsx(EditIcon, { fontSize: "small", "data-testid": "edit-icon" })
170
+ }
171
+ ),
172
+ /* @__PURE__ */ jsx(
173
+ IconButton,
174
+ {
175
+ "aria-label": "delete",
176
+ disabled: loadingDeletePermission || !canDeleteAnnouncement,
177
+ onClick: () => openDeleteDialog(rowData),
178
+ children: /* @__PURE__ */ jsx(DeleteIcon, { fontSize: "small", "data-testid": "delete-icon" })
179
+ }
180
+ )
181
+ ] });
177
182
  }
178
183
  }
179
184
  ];
180
- return /* @__PURE__ */ React__default.createElement(RequirePermission, { permission: announcementCreatePermission }, /* @__PURE__ */ React__default.createElement(Grid, { container: true }, /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React__default.createElement(
181
- Button,
182
- {
183
- disabled: loadingCreatePermission || !canCreateAnnouncement,
184
- variant: "contained",
185
- onClick: () => onCreateButtonClick()
186
- },
187
- showCreateAnnouncementForm ? t("admin.announcementsContent.cancelButton") : t("admin.announcementsContent.createButton")
188
- )), showCreateAnnouncementForm && /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React__default.createElement(
189
- AnnouncementForm,
190
- {
191
- initialData: {},
192
- onSubmit
193
- }
194
- )), /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React__default.createElement(
195
- Table,
196
- {
197
- title: t("admin.announcementsContent.announcements"),
198
- options: { pageSize: 20, search: true },
199
- columns,
200
- data: announcements?.results ?? [],
201
- emptyContent: /* @__PURE__ */ React__default.createElement(Typography, { style: { padding: 2 } }, t("admin.announcementsContent.noAnnouncementsFound"))
202
- }
203
- ), /* @__PURE__ */ React__default.createElement(
204
- DeleteAnnouncementDialog,
205
- {
206
- open: isDeleteDialogOpen,
207
- onCancel: onCancelDelete,
208
- onConfirm: onConfirmDelete
209
- }
210
- ))));
185
+ return /* @__PURE__ */ jsx(RequirePermission, { permission: announcementCreatePermission, children: /* @__PURE__ */ jsxs(Grid, { container: true, children: [
186
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(
187
+ Button,
188
+ {
189
+ disabled: loadingCreatePermission || !canCreateAnnouncement,
190
+ variant: "contained",
191
+ onClick: () => onCreateButtonClick(),
192
+ children: showCreateAnnouncementForm ? t("admin.announcementsContent.cancelButton") : t("admin.announcementsContent.createButton")
193
+ }
194
+ ) }),
195
+ showCreateAnnouncementForm && /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(
196
+ AnnouncementForm,
197
+ {
198
+ initialData: {},
199
+ onSubmit
200
+ }
201
+ ) }),
202
+ /* @__PURE__ */ jsxs(Grid, { item: true, xs: 12, children: [
203
+ /* @__PURE__ */ jsx(
204
+ Table,
205
+ {
206
+ title: t("admin.announcementsContent.announcements"),
207
+ options: { pageSize: 20, search: true },
208
+ columns,
209
+ data: announcements?.results ?? [],
210
+ emptyContent: /* @__PURE__ */ jsx(Typography, { style: { padding: 2 }, children: t("admin.announcementsContent.noAnnouncementsFound") })
211
+ }
212
+ ),
213
+ /* @__PURE__ */ jsx(
214
+ DeleteAnnouncementDialog,
215
+ {
216
+ open: isDeleteDialogOpen,
217
+ onCancel: onCancelDelete,
218
+ onConfirm: onConfirmDelete
219
+ }
220
+ )
221
+ ] })
222
+ ] }) });
211
223
  };
212
224
 
213
225
  export { AnnouncementsContent };
@@ -1 +1 @@
1
- {"version":3,"file":"AnnouncementsContent.esm.js","sources":["../../../../src/components/Admin/AnnouncementsContent/AnnouncementsContent.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 React, { useState } from 'react';\nimport {\n ErrorPanel,\n Progress,\n Table,\n TableColumn,\n StatusOK,\n StatusPending,\n} from '@backstage/core-components';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport {\n announcementsApiRef,\n CreateAnnouncementRequest,\n useAnnouncementsTranslation,\n useCategories,\n} from '@backstage-community/plugin-announcements-react';\nimport {\n Announcement,\n announcementCreatePermission,\n announcementDeletePermission,\n announcementUpdatePermission,\n Category,\n} from '@backstage-community/plugin-announcements-common';\nimport useAsyncRetry from 'react-use/esm/useAsyncRetry';\nimport { useDeleteAnnouncementDialogState } from '../../AnnouncementsPage/useDeleteAnnouncementDialogState';\nimport { DeleteAnnouncementDialog } from '../../AnnouncementsPage/DeleteAnnouncementDialog';\nimport { useNavigate } from 'react-router-dom';\nimport { AnnouncementForm } from '../../AnnouncementForm';\nimport slugify from 'slugify';\nimport {\n RequirePermission,\n usePermission,\n} from '@backstage/plugin-permission-react';\nimport { Button, Grid, IconButton, Typography } from '@material-ui/core';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport EditIcon from '@material-ui/icons/Edit';\nimport PreviewIcon from '@material-ui/icons/Visibility';\nimport { DateTime } from 'luxon';\n\nexport const AnnouncementsContent = () => {\n const alertApi = useApi(alertApiRef);\n const announcementsApi = useApi(announcementsApiRef);\n const navigate = useNavigate();\n const { categories } = useCategories();\n const { t } = useAnnouncementsTranslation();\n\n const { loading: loadingCreatePermission, allowed: canCreateAnnouncement } =\n usePermission({\n permission: announcementCreatePermission,\n });\n\n const { loading: loadingUpdatePermission, allowed: canUpdateAnnouncement } =\n usePermission({\n permission: announcementUpdatePermission,\n });\n\n const { loading: loadingDeletePermission, allowed: canDeleteAnnouncement } =\n usePermission({\n permission: announcementDeletePermission,\n });\n\n const [showCreateAnnouncementForm, setShowCreateAnnouncementForm] =\n useState(false);\n\n const {\n loading,\n error,\n value: announcements,\n retry,\n } = useAsyncRetry(async () => await announcementsApi.announcements({}));\n\n const {\n isOpen: isDeleteDialogOpen,\n open: openDeleteDialog,\n close: closeDeleteDialog,\n announcement: announcementToDelete,\n } = useDeleteAnnouncementDialogState();\n\n const onCreateButtonClick = () => {\n setShowCreateAnnouncementForm(!showCreateAnnouncementForm);\n };\n\n const onTitleClick = (announcement: Announcement) => {\n navigate(`/announcements/view/${announcement.id}`);\n };\n\n const onEdit = (announcement: Announcement) => {\n navigate(`/announcements/edit/${announcement.id}`);\n };\n\n const onCancelDelete = () => {\n closeDeleteDialog();\n };\n const onConfirmDelete = async () => {\n closeDeleteDialog();\n\n try {\n await announcementsApi.deleteAnnouncementByID(announcementToDelete!.id);\n\n alertApi.post({ message: 'Announcement deleted.', severity: 'success' });\n } catch (err) {\n alertApi.post({ message: (err as Error).message, severity: 'error' });\n }\n\n retry();\n };\n\n const onSubmit = async (request: CreateAnnouncementRequest) => {\n const { category } = request;\n\n const slugs = categories.map((c: Category) => c.slug);\n let alertMsg = t('admin.announcementsContent.alertMessage') as string;\n\n try {\n if (category) {\n const categorySlug = slugify(category, {\n lower: true,\n });\n if (slugs.indexOf(categorySlug) === -1) {\n alertMsg = alertMsg.replace('.', '');\n alertMsg = `${alertMsg} ${t(\n 'admin.announcementsContent.alertMessage',\n )} ${category}.`;\n\n await announcementsApi.createCategory({\n title: category,\n });\n }\n }\n\n await announcementsApi.createAnnouncement({\n ...request,\n category: request.category?.toLocaleLowerCase('en-US'),\n });\n alertApi.post({ message: alertMsg, severity: 'success' });\n\n setShowCreateAnnouncementForm(false);\n retry();\n } catch (err) {\n alertApi.post({ message: (err as Error).message, severity: 'error' });\n }\n };\n\n if (loading) {\n return <Progress />;\n }\n if (error) {\n return <ErrorPanel error={error} />;\n }\n\n const columns: TableColumn<Announcement>[] = [\n {\n title: (\n <Typography>{t('admin.announcementsContent.table.title')}</Typography>\n ),\n sorting: true,\n field: 'title',\n render: rowData => rowData.title,\n },\n {\n title: (\n <Typography>{t('admin.announcementsContent.table.body')}</Typography>\n ),\n sorting: true,\n field: 'body',\n render: rowData => rowData.body,\n },\n {\n title: (\n <Typography>\n {t('admin.announcementsContent.table.publisher')}\n </Typography>\n ),\n sorting: true,\n field: 'publisher',\n render: rowData => rowData.publisher,\n },\n {\n title: (\n <Typography>\n {t('admin.announcementsContent.table.category')}\n </Typography>\n ),\n sorting: true,\n field: 'category',\n render: rowData => rowData.category?.title ?? '',\n },\n {\n title: (\n <Typography>{t('admin.announcementsContent.table.status')}</Typography>\n ),\n sorting: true,\n field: 'active',\n render: rowData =>\n rowData.active ? (\n <StatusOK>{t('admin.announcementsContent.table.active')}</StatusOK>\n ) : (\n <StatusPending>\n {t('admin.announcementsContent.table.inactive')}\n </StatusPending>\n ),\n },\n {\n title: (\n <Typography>\n {t('admin.announcementsContent.table.created_at')}\n </Typography>\n ),\n sorting: true,\n field: 'created_at',\n type: 'date',\n render: rowData =>\n DateTime.fromISO(rowData.created_at).toFormat('M/d/yyyy'),\n },\n {\n title: (\n <Typography>\n {t('admin.announcementsContent.table.start_at')}\n </Typography>\n ),\n sorting: true,\n field: 'start_at',\n type: 'date',\n render: rowData =>\n DateTime.fromISO(rowData.start_at).toFormat('M/d/yyyy'),\n },\n {\n title: (\n <Typography>{t('admin.announcementsContent.table.actions')}</Typography>\n ),\n render: rowData => {\n return (\n <>\n <IconButton\n aria-label=\"preview\"\n onClick={() => onTitleClick(rowData)}\n >\n <PreviewIcon fontSize=\"small\" data-testid=\"preview\" />\n </IconButton>\n\n <IconButton\n aria-label=\"edit\"\n disabled={loadingUpdatePermission || !canUpdateAnnouncement}\n onClick={() => onEdit(rowData)}\n >\n <EditIcon fontSize=\"small\" data-testid=\"edit-icon\" />\n </IconButton>\n\n <IconButton\n aria-label=\"delete\"\n disabled={loadingDeletePermission || !canDeleteAnnouncement}\n onClick={() => openDeleteDialog(rowData)}\n >\n <DeleteIcon fontSize=\"small\" data-testid=\"delete-icon\" />\n </IconButton>\n </>\n );\n },\n },\n ];\n\n return (\n <RequirePermission permission={announcementCreatePermission}>\n <Grid container>\n <Grid item xs={12}>\n <Button\n disabled={loadingCreatePermission || !canCreateAnnouncement}\n variant=\"contained\"\n onClick={() => onCreateButtonClick()}\n >\n {showCreateAnnouncementForm\n ? t('admin.announcementsContent.cancelButton')\n : t('admin.announcementsContent.createButton')}\n </Button>\n </Grid>\n\n {showCreateAnnouncementForm && (\n <Grid item xs={12}>\n <AnnouncementForm\n initialData={{} as Announcement}\n onSubmit={onSubmit}\n />\n </Grid>\n )}\n\n <Grid item xs={12}>\n <Table\n title={t('admin.announcementsContent.announcements')}\n options={{ pageSize: 20, search: true }}\n columns={columns}\n data={announcements?.results ?? []}\n emptyContent={\n <Typography style={{ padding: 2 }}>\n {t('admin.announcementsContent.noAnnouncementsFound')}\n </Typography>\n }\n />\n\n <DeleteAnnouncementDialog\n open={isDeleteDialogOpen}\n onCancel={onCancelDelete}\n onConfirm={onConfirmDelete}\n />\n </Grid>\n </Grid>\n </RequirePermission>\n );\n};\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"AnnouncementsContent.esm.js","sources":["../../../../src/components/Admin/AnnouncementsContent/AnnouncementsContent.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 { useState } from 'react';\nimport {\n ErrorPanel,\n Progress,\n Table,\n TableColumn,\n StatusOK,\n StatusPending,\n} from '@backstage/core-components';\nimport { alertApiRef, useApi } from '@backstage/core-plugin-api';\nimport {\n announcementsApiRef,\n CreateAnnouncementRequest,\n useAnnouncementsTranslation,\n useCategories,\n} from '@backstage-community/plugin-announcements-react';\nimport {\n Announcement,\n announcementCreatePermission,\n announcementDeletePermission,\n announcementUpdatePermission,\n Category,\n} from '@backstage-community/plugin-announcements-common';\nimport useAsyncRetry from 'react-use/esm/useAsyncRetry';\nimport { useDeleteAnnouncementDialogState } from '../../AnnouncementsPage/useDeleteAnnouncementDialogState';\nimport { DeleteAnnouncementDialog } from '../../AnnouncementsPage/DeleteAnnouncementDialog';\nimport { useNavigate } from 'react-router-dom';\nimport { AnnouncementForm } from '../../AnnouncementForm';\nimport slugify from 'slugify';\nimport {\n RequirePermission,\n usePermission,\n} from '@backstage/plugin-permission-react';\nimport { Button, Grid, IconButton, Typography } from '@material-ui/core';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport EditIcon from '@material-ui/icons/Edit';\nimport PreviewIcon from '@material-ui/icons/Visibility';\nimport { DateTime } from 'luxon';\n\nexport const AnnouncementsContent = () => {\n const alertApi = useApi(alertApiRef);\n const announcementsApi = useApi(announcementsApiRef);\n const navigate = useNavigate();\n const { categories } = useCategories();\n const { t } = useAnnouncementsTranslation();\n\n const { loading: loadingCreatePermission, allowed: canCreateAnnouncement } =\n usePermission({\n permission: announcementCreatePermission,\n });\n\n const { loading: loadingUpdatePermission, allowed: canUpdateAnnouncement } =\n usePermission({\n permission: announcementUpdatePermission,\n });\n\n const { loading: loadingDeletePermission, allowed: canDeleteAnnouncement } =\n usePermission({\n permission: announcementDeletePermission,\n });\n\n const [showCreateAnnouncementForm, setShowCreateAnnouncementForm] =\n useState(false);\n\n const {\n loading,\n error,\n value: announcements,\n retry,\n } = useAsyncRetry(async () => await announcementsApi.announcements({}));\n\n const {\n isOpen: isDeleteDialogOpen,\n open: openDeleteDialog,\n close: closeDeleteDialog,\n announcement: announcementToDelete,\n } = useDeleteAnnouncementDialogState();\n\n const onCreateButtonClick = () => {\n setShowCreateAnnouncementForm(!showCreateAnnouncementForm);\n };\n\n const onTitleClick = (announcement: Announcement) => {\n navigate(`/announcements/view/${announcement.id}`);\n };\n\n const onEdit = (announcement: Announcement) => {\n navigate(`/announcements/edit/${announcement.id}`);\n };\n\n const onCancelDelete = () => {\n closeDeleteDialog();\n };\n const onConfirmDelete = async () => {\n closeDeleteDialog();\n\n try {\n await announcementsApi.deleteAnnouncementByID(announcementToDelete!.id);\n\n alertApi.post({ message: 'Announcement deleted.', severity: 'success' });\n } catch (err) {\n alertApi.post({ message: (err as Error).message, severity: 'error' });\n }\n\n retry();\n };\n\n const onSubmit = async (request: CreateAnnouncementRequest) => {\n const { category } = request;\n\n const slugs = categories.map((c: Category) => c.slug);\n let alertMsg = t('admin.announcementsContent.alertMessage') as string;\n\n try {\n if (category) {\n const categorySlug = slugify(category, {\n lower: true,\n });\n if (slugs.indexOf(categorySlug) === -1) {\n alertMsg = alertMsg.replace('.', '');\n alertMsg = `${alertMsg} ${t(\n 'admin.announcementsContent.alertMessage',\n )} ${category}.`;\n\n await announcementsApi.createCategory({\n title: category,\n });\n }\n }\n\n await announcementsApi.createAnnouncement({\n ...request,\n category: request.category?.toLocaleLowerCase('en-US'),\n });\n alertApi.post({ message: alertMsg, severity: 'success' });\n\n setShowCreateAnnouncementForm(false);\n retry();\n } catch (err) {\n alertApi.post({ message: (err as Error).message, severity: 'error' });\n }\n };\n\n if (loading) {\n return <Progress />;\n }\n if (error) {\n return <ErrorPanel error={error} />;\n }\n\n const columns: TableColumn<Announcement>[] = [\n {\n title: (\n <Typography>{t('admin.announcementsContent.table.title')}</Typography>\n ),\n sorting: true,\n field: 'title',\n render: rowData => rowData.title,\n },\n {\n title: (\n <Typography>{t('admin.announcementsContent.table.body')}</Typography>\n ),\n sorting: true,\n field: 'body',\n render: rowData => rowData.body,\n },\n {\n title: (\n <Typography>\n {t('admin.announcementsContent.table.publisher')}\n </Typography>\n ),\n sorting: true,\n field: 'publisher',\n render: rowData => rowData.publisher,\n },\n {\n title: (\n <Typography>\n {t('admin.announcementsContent.table.category')}\n </Typography>\n ),\n sorting: true,\n field: 'category',\n render: rowData => rowData.category?.title ?? '',\n },\n {\n title: (\n <Typography>{t('admin.announcementsContent.table.status')}</Typography>\n ),\n sorting: true,\n field: 'active',\n render: rowData =>\n rowData.active ? (\n <StatusOK>{t('admin.announcementsContent.table.active')}</StatusOK>\n ) : (\n <StatusPending>\n {t('admin.announcementsContent.table.inactive')}\n </StatusPending>\n ),\n },\n {\n title: (\n <Typography>\n {t('admin.announcementsContent.table.created_at')}\n </Typography>\n ),\n sorting: true,\n field: 'created_at',\n type: 'date',\n render: rowData =>\n DateTime.fromISO(rowData.created_at).toFormat('M/d/yyyy'),\n },\n {\n title: (\n <Typography>\n {t('admin.announcementsContent.table.start_at')}\n </Typography>\n ),\n sorting: true,\n field: 'start_at',\n type: 'date',\n render: rowData =>\n DateTime.fromISO(rowData.start_at).toFormat('M/d/yyyy'),\n },\n {\n title: (\n <Typography>{t('admin.announcementsContent.table.actions')}</Typography>\n ),\n render: rowData => {\n return (\n <>\n <IconButton\n aria-label=\"preview\"\n onClick={() => onTitleClick(rowData)}\n >\n <PreviewIcon fontSize=\"small\" data-testid=\"preview\" />\n </IconButton>\n\n <IconButton\n aria-label=\"edit\"\n disabled={loadingUpdatePermission || !canUpdateAnnouncement}\n onClick={() => onEdit(rowData)}\n >\n <EditIcon fontSize=\"small\" data-testid=\"edit-icon\" />\n </IconButton>\n\n <IconButton\n aria-label=\"delete\"\n disabled={loadingDeletePermission || !canDeleteAnnouncement}\n onClick={() => openDeleteDialog(rowData)}\n >\n <DeleteIcon fontSize=\"small\" data-testid=\"delete-icon\" />\n </IconButton>\n </>\n );\n },\n },\n ];\n\n return (\n <RequirePermission permission={announcementCreatePermission}>\n <Grid container>\n <Grid item xs={12}>\n <Button\n disabled={loadingCreatePermission || !canCreateAnnouncement}\n variant=\"contained\"\n onClick={() => onCreateButtonClick()}\n >\n {showCreateAnnouncementForm\n ? t('admin.announcementsContent.cancelButton')\n : t('admin.announcementsContent.createButton')}\n </Button>\n </Grid>\n\n {showCreateAnnouncementForm && (\n <Grid item xs={12}>\n <AnnouncementForm\n initialData={{} as Announcement}\n onSubmit={onSubmit}\n />\n </Grid>\n )}\n\n <Grid item xs={12}>\n <Table\n title={t('admin.announcementsContent.announcements')}\n options={{ pageSize: 20, search: true }}\n columns={columns}\n data={announcements?.results ?? []}\n emptyContent={\n <Typography style={{ padding: 2 }}>\n {t('admin.announcementsContent.noAnnouncementsFound')}\n </Typography>\n }\n />\n\n <DeleteAnnouncementDialog\n open={isDeleteDialogOpen}\n onCancel={onCancelDelete}\n onConfirm={onConfirmDelete}\n />\n </Grid>\n </Grid>\n </RequirePermission>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- import React__default, { useState } from 'react';
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { useState } from 'react';
2
3
  import { Progress, ErrorPanel, Table } from '@backstage/core-components';
3
4
  import { useCategories, announcementsApiRef, useAnnouncementsTranslation } from '@backstage-community/plugin-announcements-react';
4
5
  import { announcementCreatePermission, announcementDeletePermission } from '@backstage-community/plugin-announcements-common';
@@ -66,64 +67,69 @@ const CategoriesContent = () => {
66
67
  refresh();
67
68
  };
68
69
  if (loading) {
69
- return /* @__PURE__ */ React__default.createElement(Progress, null);
70
+ return /* @__PURE__ */ jsx(Progress, {});
70
71
  }
71
72
  if (error) {
72
- return /* @__PURE__ */ React__default.createElement(ErrorPanel, { error });
73
+ return /* @__PURE__ */ jsx(ErrorPanel, { error });
73
74
  }
74
75
  const columns = [
75
76
  {
76
- title: /* @__PURE__ */ React__default.createElement(Typography, null, t("admin.categoriesContent.table.title")),
77
+ title: /* @__PURE__ */ jsx(Typography, { children: t("admin.categoriesContent.table.title") }),
77
78
  sorting: true,
78
79
  field: "title",
79
80
  render: (rowData) => rowData.title
80
81
  },
81
82
  {
82
- title: /* @__PURE__ */ React__default.createElement(Typography, null, t("admin.categoriesContent.table.slug")),
83
+ title: /* @__PURE__ */ jsx(Typography, { children: t("admin.categoriesContent.table.slug") }),
83
84
  sorting: true,
84
85
  field: "slug",
85
86
  render: (rowData) => rowData.slug
86
87
  },
87
88
  {
88
- title: /* @__PURE__ */ React__default.createElement(Typography, null, t("admin.categoriesContent.table.actions")),
89
+ title: /* @__PURE__ */ jsx(Typography, { children: t("admin.categoriesContent.table.actions") }),
89
90
  render: (rowData) => {
90
- return /* @__PURE__ */ React__default.createElement(
91
+ return /* @__PURE__ */ jsx(
91
92
  IconButton,
92
93
  {
93
94
  "aria-label": "delete",
94
95
  disabled: loadingDeletePermission || !canDeleteAnnouncement,
95
- onClick: () => openDeleteDialog(rowData)
96
- },
97
- /* @__PURE__ */ React__default.createElement(DeleteIcon, { fontSize: "small", "data-testid": "delete-icon" })
96
+ onClick: () => openDeleteDialog(rowData),
97
+ children: /* @__PURE__ */ jsx(DeleteIcon, { fontSize: "small", "data-testid": "delete-icon" })
98
+ }
98
99
  );
99
100
  }
100
101
  }
101
102
  ];
102
- return /* @__PURE__ */ React__default.createElement(RequirePermission, { permission: announcementCreatePermission }, /* @__PURE__ */ React__default.createElement(Grid, { container: true }, /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React__default.createElement(
103
- Button,
104
- {
105
- disabled: loadingCreatePermission || !canCreateCategory,
106
- variant: "contained",
107
- onClick: () => onCreateButtonClick()
108
- },
109
- showNewCategoryForm ? t("admin.categoriesContent.cancelButton") : t("admin.categoriesContent.createButton")
110
- )), showNewCategoryForm && /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React__default.createElement(CategoriesForm, { initialData: {}, onSubmit })), /* @__PURE__ */ React__default.createElement(Grid, { item: true, xs: 12 }, /* @__PURE__ */ React__default.createElement(
111
- Table,
112
- {
113
- title: "Categories",
114
- options: { pageSize: 20, search: true },
115
- columns,
116
- data: categories ?? [],
117
- emptyContent: /* @__PURE__ */ React__default.createElement(Typography, { style: { padding: 2 } }, t("admin.categoriesContent.table.noCategoriesFound"))
118
- }
119
- )), /* @__PURE__ */ React__default.createElement(
120
- DeleteCategoryDialog,
121
- {
122
- open: isDeleteDialogOpen,
123
- onCancel: onCancelDelete,
124
- onConfirm: onConfirmDelete
125
- }
126
- )));
103
+ return /* @__PURE__ */ jsx(RequirePermission, { permission: announcementCreatePermission, children: /* @__PURE__ */ jsxs(Grid, { container: true, children: [
104
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(
105
+ Button,
106
+ {
107
+ disabled: loadingCreatePermission || !canCreateCategory,
108
+ variant: "contained",
109
+ onClick: () => onCreateButtonClick(),
110
+ children: showNewCategoryForm ? t("admin.categoriesContent.cancelButton") : t("admin.categoriesContent.createButton")
111
+ }
112
+ ) }),
113
+ showNewCategoryForm && /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(CategoriesForm, { initialData: {}, onSubmit }) }),
114
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(
115
+ Table,
116
+ {
117
+ title: "Categories",
118
+ options: { pageSize: 20, search: true },
119
+ columns,
120
+ data: categories ?? [],
121
+ emptyContent: /* @__PURE__ */ jsx(Typography, { style: { padding: 2 }, children: t("admin.categoriesContent.table.noCategoriesFound") })
122
+ }
123
+ ) }),
124
+ /* @__PURE__ */ jsx(
125
+ DeleteCategoryDialog,
126
+ {
127
+ open: isDeleteDialogOpen,
128
+ onCancel: onCancelDelete,
129
+ onConfirm: onConfirmDelete
130
+ }
131
+ )
132
+ ] }) });
127
133
  };
128
134
 
129
135
  export { CategoriesContent };