diff --git a/workspaces/announcements/plugins/announcements-backend/package.json b/workspaces/announcements/plugins/announcements-backend/package.json index cd2c982d89..47c1bd8164 100644 --- a/workspaces/announcements/plugins/announcements-backend/package.json +++ b/workspaces/announcements/plugins/announcements-backend/package.json @@ -22,7 +22,8 @@ "@backstage-community/plugin-announcements", "@backstage-community/plugin-announcements-backend", "@backstage-community/plugin-announcements-common", - "@backstage-community/plugin-announcements-node" + "@backstage-community/plugin-announcements-node", + "@backstage-community/plugin-announcements-react" ] }, "scripts": { diff --git a/workspaces/announcements/plugins/announcements-common/package.json b/workspaces/announcements/plugins/announcements-common/package.json index 878a1792c0..e0ea7bf523 100644 --- a/workspaces/announcements/plugins/announcements-common/package.json +++ b/workspaces/announcements/plugins/announcements-common/package.json @@ -24,7 +24,8 @@ "@backstage-community/plugin-announcements", "@backstage-community/plugin-announcements-backend", "@backstage-community/plugin-announcements-common", - "@backstage-community/plugin-announcements-node" + "@backstage-community/plugin-announcements-node", + "@backstage-community/plugin-announcements-react" ] }, "sideEffects": false, diff --git a/workspaces/announcements/plugins/announcements-node/package.json b/workspaces/announcements/plugins/announcements-node/package.json index 9a7318c0e9..7b733d71f8 100644 --- a/workspaces/announcements/plugins/announcements-node/package.json +++ b/workspaces/announcements/plugins/announcements-node/package.json @@ -23,7 +23,8 @@ "@backstage-community/plugin-announcements", "@backstage-community/plugin-announcements-backend", "@backstage-community/plugin-announcements-common", - "@backstage-community/plugin-announcements-node" + "@backstage-community/plugin-announcements-node", + "@backstage-community/plugin-announcements-react" ] }, "scripts": { diff --git a/workspaces/announcements/plugins/announcements-react/.eslintrc.js b/workspaces/announcements/plugins/announcements-react/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/workspaces/announcements/plugins/announcements-react/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/workspaces/announcements/plugins/announcements-react/README.md b/workspaces/announcements/plugins/announcements-react/README.md new file mode 100644 index 0000000000..f0d2975d79 --- /dev/null +++ b/workspaces/announcements/plugins/announcements-react/README.md @@ -0,0 +1,11 @@ +# @backstage-community/plugin-announcements-react + +This library provides reusable components and frontend utilities for displaying and interacting with announcements in a Backstage plugin. + +## Hooks + +There are multiple [hooks](./src/hooks/index.ts) you may use in your Backstage plugin to fetch and use announcements however you see fit. + +## Previously maintained by + +- [procore-oss](https://github.com/procore-oss/backstage-plugin-announcements/tree/main/plugins/announcements-react) diff --git a/workspaces/announcements/plugins/announcements-react/package.json b/workspaces/announcements/plugins/announcements-react/package.json new file mode 100644 index 0000000000..473ae88507 --- /dev/null +++ b/workspaces/announcements/plugins/announcements-react/package.json @@ -0,0 +1,59 @@ +{ + "name": "@backstage-community/plugin-announcements-react", + "description": "Web library for the announcements plugin", + "version": "0.1.0", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "private": true, + "publishConfig": { + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, + "repository": { + "type": "git", + "url": "https://github.com/backstage/community-plugins", + "directory": "workspaces/announcements/plugins/announcements-react" + }, + "backstage": { + "role": "web-library", + "pluginId": "announcements", + "pluginPackages": [ + "@backstage-community/plugin-announcements", + "@backstage-community/plugin-announcements-backend", + "@backstage-community/plugin-announcements-common", + "@backstage-community/plugin-announcements-node", + "@backstage-community/plugin-announcements-react" + ] + }, + "sideEffects": false, + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "dependencies": { + "@backstage-community/plugin-announcements-common": "workspace:^", + "@backstage/core-plugin-api": "^1.10.1", + "@backstage/errors": "^1.2.5", + "luxon": "^3.4.4", + "react-use": "^17.2.4" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0 || ^18.0.0" + }, + "devDependencies": { + "@backstage/cli": "^0.29.2", + "@testing-library/jest-dom": "^5.10.1", + "@testing-library/react": "^12.1.3", + "react": "^16.13.1 || ^17.0.0 || ^18.0.0" + }, + "files": [ + "dist" + ] +} diff --git a/workspaces/announcements/plugins/announcements-react/report.api.md b/workspaces/announcements/plugins/announcements-react/report.api.md new file mode 100644 index 0000000000..bda8c8db08 --- /dev/null +++ b/workspaces/announcements/plugins/announcements-react/report.api.md @@ -0,0 +1,261 @@ +## API Report File for "@backstage-community/plugin-announcements-react" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { Announcement } from '@backstage-community/plugin-announcements-common'; +import { AnnouncementsFilters } from '@backstage-community/plugin-announcements-common'; +import { AnnouncementsList } from '@backstage-community/plugin-announcements-common'; +import { ApiRef } from '@backstage/core-plugin-api'; +import { Category } from '@backstage-community/plugin-announcements-common'; +import { DateTime } from 'luxon'; +import { TranslationFunction } from '@backstage/core-plugin-api/alpha'; +import { TranslationRef } from '@backstage/core-plugin-api/alpha'; + +// @public +export interface AnnouncementsApi { + // (undocumented) + announcementByID(id: string): Promise; + // (undocumented) + announcements(opts: { + max?: number; + page?: number; + category?: string; + active?: boolean; + }): Promise; + // (undocumented) + categories(): Promise; + // (undocumented) + createAnnouncement(request: CreateAnnouncementRequest): Promise; + // (undocumented) + createCategory(request: CreateCategoryRequest): Promise; + // (undocumented) + deleteAnnouncementByID(id: string): Promise; + // (undocumented) + deleteCategory(slug: string): Promise; + // (undocumented) + lastSeenDate(): DateTime; + // (undocumented) + markLastSeenDate(date: DateTime): void; + // (undocumented) + updateAnnouncement( + id: string, + request: CreateAnnouncementRequest, + ): Promise; +} + +// @public (undocumented) +export const announcementsApiRef: ApiRef; + +// @public +export type AnnouncementsOptions = { + dependencies?: any[]; +}; + +// @public (undocumented) +export const announcementsTranslationRef: TranslationRef< + 'announcements', + { + readonly 'announcementForm.active': 'Active'; + readonly 'announcementForm.title': 'Title'; + readonly 'announcementForm.submit': 'Submit'; + readonly 'announcementForm.excerpt': 'Excerpt'; + readonly 'announcementForm.editAnnouncement': 'Edit announcement'; + readonly 'announcementForm.newAnnouncement': 'New announcement'; + readonly 'announcementForm.categoryInput.label': 'Category'; + readonly 'announcementForm.categoryInput.create': 'Create'; + readonly 'announcementsPage.grid.announcementDeleted': 'Announcement deleted.'; + readonly 'announcementsPage.contextMenu.admin': 'Admin'; + readonly 'announcementsPage.contextMenu.categories': 'Categories'; + readonly 'announcementsPage.newAnnouncement': 'New announcement'; + readonly 'announcementsPage.genericNew': 'New'; + readonly 'announcementsPage.card.by': 'By'; + readonly 'announcementsPage.card.in': 'in'; + readonly 'announcementsPage.card.delete': 'DELETE'; + readonly 'announcementsPage.card.edit': 'EDIT'; + readonly 'admin.adminPortal.title': 'Admin Portal for Announcements'; + readonly 'admin.adminPortal.subtitle': 'Manage announcements and categories'; + readonly 'admin.adminPortal.announcementsLabels': 'Announcements'; + readonly 'admin.adminPortal.categoriesLabel': 'Categories'; + readonly 'admin.announecementsContent.table.active': 'Active'; + readonly 'admin.announecementsContent.table.inactive': 'Inactive'; + readonly 'admin.announecementsContent.table.body': 'Body'; + readonly 'admin.announecementsContent.table.title': 'Title'; + readonly 'admin.announecementsContent.table.status': 'Status'; + readonly 'admin.announecementsContent.table.actions': 'Actions'; + readonly 'admin.announecementsContent.table.category': 'Category'; + readonly 'admin.announecementsContent.table.publisher': 'Publisher'; + readonly 'admin.announecementsContent.announcements': 'Announcements'; + readonly 'admin.announecementsContent.alertMessage': 'Announcement created.'; + readonly 'admin.announecementsContent.alertMessageWithNewCategory': 'with new category'; + readonly 'admin.announecementsContent.cancelButton': 'Cancel'; + readonly 'admin.announecementsContent.createButton': 'Create Announcement'; + readonly 'admin.announecementsContent.noAnnouncementsFound': 'No announcements found'; + readonly 'admin.categoriesContent.table.title': 'Title'; + readonly 'admin.categoriesContent.table.actions': 'Actions'; + readonly 'admin.categoriesContent.table.categoryDeleted': 'Category deleted.'; + readonly 'admin.categoriesContent.table.slug': 'Slug'; + readonly 'admin.categoriesContent.table.addTooltip': 'Add'; + readonly 'admin.categoriesContent.table.noCategoriesFound': 'No categories found.'; + readonly 'admin.categoriesContent.createdMessage': 'created'; + readonly 'admin.categoriesContent.cancelButton': 'Cancel'; + readonly 'admin.categoriesContent.createButton': 'Create category'; + readonly 'admin.categoriesContent.deletedMessage': 'Category deleted.'; + readonly 'deleteDialog.cancel': 'Cancel'; + readonly 'deleteDialog.title': 'Are you sure you want to delete this announcement?'; + readonly 'deleteDialog.delete': 'Delete'; + readonly 'announcementsCard.new': 'New'; + readonly 'announcementsCard.in': 'in'; + readonly 'announcementsCard.announcements': 'Announcements'; + readonly 'announcementsCard.seeAll': 'See all'; + readonly 'announcementsCard.noAnnouncements': 'No announcements yet, want to'; + readonly 'announcementsCard.addOne': 'add one'; + readonly 'announcementSearchResultListItem.published': 'Published'; + readonly 'announcementSearchResultListItem.announcement': 'Announcement'; + readonly 'announcementsTimeline.error': 'Error'; + readonly 'announcementsTimeline.noAnnouncements': 'No announcements'; + readonly 'categoriesForm.submit': 'Submit'; + readonly 'categoriesForm.newCategory': 'New category'; + readonly 'categoriesForm.editCategory': 'Edit category'; + readonly 'categoriesForm.titleLabel': 'Title'; + readonly 'categoriesTable.title': 'Title'; + readonly 'categoriesTable.actions': 'Actions'; + readonly 'categoriesTable.categoryDeleted': 'Category deleted.'; + readonly 'categoriesTable.slug': 'Slug'; + readonly 'categoriesTable.addTooltip': 'Add'; + readonly 'categoriesTable.noCategoriesFound': 'No categories found.'; + readonly 'categoriesPage.title': 'Categories'; + readonly 'categoriesPage.subtitle': 'Manage announcement categories'; + readonly 'createAnnouncementPage.alertMessage': 'Announcement created.'; + readonly 'createAnnouncementPage.alertMessageWithNewCategory': 'with new category'; + readonly 'editAnnouncementPage.edit': 'Edit'; + readonly 'editAnnouncementPage.updatedMessage': 'Announcement updated.'; + readonly 'editAnnouncementPage.notFoundMessage': 'Unable to find announcement'; + readonly 'newAnnouncementBanner.markAsSeen': 'Mark as seen'; + readonly 'newCategoryDialog.title': 'Title'; + readonly 'newCategoryDialog.newCategory': 'New category'; + readonly 'newCategoryDialog.createdMessage': 'Category created.'; + readonly 'newCategoryDialog.cancelButton': 'Cancel'; + readonly 'newCategoryDialog.createButton': 'Create'; + } +>; + +// @public +export type CreateAnnouncementRequest = Omit< + Announcement, + 'id' | 'category' | 'created_at' +> & { + category?: string; +}; + +// @public +export type CreateCategoryRequest = { + title: string; +}; + +// @public +export const useAnnouncements: ( + props: AnnouncementsFilters, + options?: AnnouncementsOptions, +) => { + announcements: AnnouncementsList; + loading: boolean; + error: Error | undefined; + retry: () => void; +}; + +// @public +export const useAnnouncementsTranslation: () => { + t: TranslationFunction<{ + readonly 'announcementForm.active': 'Active'; + readonly 'announcementForm.title': 'Title'; + readonly 'announcementForm.submit': 'Submit'; + readonly 'announcementForm.excerpt': 'Excerpt'; + readonly 'announcementForm.editAnnouncement': 'Edit announcement'; + readonly 'announcementForm.newAnnouncement': 'New announcement'; + readonly 'announcementForm.categoryInput.label': 'Category'; + readonly 'announcementForm.categoryInput.create': 'Create'; + readonly 'announcementsPage.grid.announcementDeleted': 'Announcement deleted.'; + readonly 'announcementsPage.contextMenu.admin': 'Admin'; + readonly 'announcementsPage.contextMenu.categories': 'Categories'; + readonly 'announcementsPage.newAnnouncement': 'New announcement'; + readonly 'announcementsPage.genericNew': 'New'; + readonly 'announcementsPage.card.by': 'By'; + readonly 'announcementsPage.card.in': 'in'; + readonly 'announcementsPage.card.delete': 'DELETE'; + readonly 'announcementsPage.card.edit': 'EDIT'; + readonly 'admin.adminPortal.title': 'Admin Portal for Announcements'; + readonly 'admin.adminPortal.subtitle': 'Manage announcements and categories'; + readonly 'admin.adminPortal.announcementsLabels': 'Announcements'; + readonly 'admin.adminPortal.categoriesLabel': 'Categories'; + readonly 'admin.announecementsContent.table.active': 'Active'; + readonly 'admin.announecementsContent.table.inactive': 'Inactive'; + readonly 'admin.announecementsContent.table.body': 'Body'; + readonly 'admin.announecementsContent.table.title': 'Title'; + readonly 'admin.announecementsContent.table.status': 'Status'; + readonly 'admin.announecementsContent.table.actions': 'Actions'; + readonly 'admin.announecementsContent.table.category': 'Category'; + readonly 'admin.announecementsContent.table.publisher': 'Publisher'; + readonly 'admin.announecementsContent.announcements': 'Announcements'; + readonly 'admin.announecementsContent.alertMessage': 'Announcement created.'; + readonly 'admin.announecementsContent.alertMessageWithNewCategory': 'with new category'; + readonly 'admin.announecementsContent.cancelButton': 'Cancel'; + readonly 'admin.announecementsContent.createButton': 'Create Announcement'; + readonly 'admin.announecementsContent.noAnnouncementsFound': 'No announcements found'; + readonly 'admin.categoriesContent.table.title': 'Title'; + readonly 'admin.categoriesContent.table.actions': 'Actions'; + readonly 'admin.categoriesContent.table.categoryDeleted': 'Category deleted.'; + readonly 'admin.categoriesContent.table.slug': 'Slug'; + readonly 'admin.categoriesContent.table.addTooltip': 'Add'; + readonly 'admin.categoriesContent.table.noCategoriesFound': 'No categories found.'; + readonly 'admin.categoriesContent.createdMessage': 'created'; + readonly 'admin.categoriesContent.cancelButton': 'Cancel'; + readonly 'admin.categoriesContent.createButton': 'Create category'; + readonly 'admin.categoriesContent.deletedMessage': 'Category deleted.'; + readonly 'deleteDialog.cancel': 'Cancel'; + readonly 'deleteDialog.title': 'Are you sure you want to delete this announcement?'; + readonly 'deleteDialog.delete': 'Delete'; + readonly 'announcementsCard.new': 'New'; + readonly 'announcementsCard.in': 'in'; + readonly 'announcementsCard.announcements': 'Announcements'; + readonly 'announcementsCard.seeAll': 'See all'; + readonly 'announcementsCard.noAnnouncements': 'No announcements yet, want to'; + readonly 'announcementsCard.addOne': 'add one'; + readonly 'announcementSearchResultListItem.published': 'Published'; + readonly 'announcementSearchResultListItem.announcement': 'Announcement'; + readonly 'announcementsTimeline.error': 'Error'; + readonly 'announcementsTimeline.noAnnouncements': 'No announcements'; + readonly 'categoriesForm.submit': 'Submit'; + readonly 'categoriesForm.newCategory': 'New category'; + readonly 'categoriesForm.editCategory': 'Edit category'; + readonly 'categoriesForm.titleLabel': 'Title'; + readonly 'categoriesTable.title': 'Title'; + readonly 'categoriesTable.actions': 'Actions'; + readonly 'categoriesTable.categoryDeleted': 'Category deleted.'; + readonly 'categoriesTable.slug': 'Slug'; + readonly 'categoriesTable.addTooltip': 'Add'; + readonly 'categoriesTable.noCategoriesFound': 'No categories found.'; + readonly 'categoriesPage.title': 'Categories'; + readonly 'categoriesPage.subtitle': 'Manage announcement categories'; + readonly 'createAnnouncementPage.alertMessage': 'Announcement created.'; + readonly 'createAnnouncementPage.alertMessageWithNewCategory': 'with new category'; + readonly 'editAnnouncementPage.edit': 'Edit'; + readonly 'editAnnouncementPage.updatedMessage': 'Announcement updated.'; + readonly 'editAnnouncementPage.notFoundMessage': 'Unable to find announcement'; + readonly 'newAnnouncementBanner.markAsSeen': 'Mark as seen'; + readonly 'newCategoryDialog.title': 'Title'; + readonly 'newCategoryDialog.newCategory': 'New category'; + readonly 'newCategoryDialog.createdMessage': 'Category created.'; + readonly 'newCategoryDialog.cancelButton': 'Cancel'; + readonly 'newCategoryDialog.createButton': 'Create'; + }>; +}; + +// @public +export const useCategories: () => { + categories: Category[]; + loading: boolean; + error: Error | undefined; + retry: () => void; +}; +``` diff --git a/workspaces/announcements/plugins/announcements-react/src/apis/AnnouncementsApi.ts b/workspaces/announcements/plugins/announcements-react/src/apis/AnnouncementsApi.ts new file mode 100644 index 0000000000..9ef614857d --- /dev/null +++ b/workspaces/announcements/plugins/announcements-react/src/apis/AnnouncementsApi.ts @@ -0,0 +1,59 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { DateTime } from 'luxon'; +import { createApiRef } from '@backstage/core-plugin-api'; +import { CreateAnnouncementRequest, CreateCategoryRequest } from './types'; +import { + Announcement, + AnnouncementsList, + Category, +} from '@backstage-community/plugin-announcements-common'; + +/** + * @public + */ +export const announcementsApiRef = createApiRef({ + id: 'plugin.announcements.service', +}); + +/** + * API interface for managing announcements and categories. + * + * @public + */ +export interface AnnouncementsApi { + announcements(opts: { + max?: number; + page?: number; + category?: string; + active?: boolean; + }): Promise; + announcementByID(id: string): Promise; + + createAnnouncement(request: CreateAnnouncementRequest): Promise; + updateAnnouncement( + id: string, + request: CreateAnnouncementRequest, + ): Promise; + deleteAnnouncementByID(id: string): Promise; + + categories(): Promise; + createCategory(request: CreateCategoryRequest): Promise; + deleteCategory(slug: string): Promise; + + lastSeenDate(): DateTime; + markLastSeenDate(date: DateTime): void; +} diff --git a/workspaces/announcements/plugins/announcements-react/src/apis/index.ts b/workspaces/announcements/plugins/announcements-react/src/apis/index.ts new file mode 100644 index 0000000000..4ad432944e --- /dev/null +++ b/workspaces/announcements/plugins/announcements-react/src/apis/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export { announcementsApiRef, type AnnouncementsApi } from './AnnouncementsApi'; +export type { CreateAnnouncementRequest, CreateCategoryRequest } from './types'; diff --git a/workspaces/announcements/plugins/announcements-react/src/apis/types.ts b/workspaces/announcements/plugins/announcements-react/src/apis/types.ts new file mode 100644 index 0000000000..1e6cca981a --- /dev/null +++ b/workspaces/announcements/plugins/announcements-react/src/apis/types.ts @@ -0,0 +1,37 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Announcement } from '@backstage-community/plugin-announcements-common'; + +/** + * Request to create an announcement + * + * @public + */ +export type CreateAnnouncementRequest = Omit< + Announcement, + 'id' | 'category' | 'created_at' +> & { + category?: string; +}; + +/** + * Request to create a category + * + * @public + */ +export type CreateCategoryRequest = { + title: string; +}; diff --git a/workspaces/announcements/plugins/announcements-react/src/hooks/index.ts b/workspaces/announcements/plugins/announcements-react/src/hooks/index.ts new file mode 100644 index 0000000000..f312a56ea4 --- /dev/null +++ b/workspaces/announcements/plugins/announcements-react/src/hooks/index.ts @@ -0,0 +1,21 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export { + useAnnouncements, + type AnnouncementsOptions, +} from './useAnnouncements'; +export { useCategories } from './useCategories'; +export { useAnnouncementsTranslation } from './useAnnouncementsTranslation'; diff --git a/workspaces/announcements/plugins/announcements-react/src/hooks/useAnnouncements.ts b/workspaces/announcements/plugins/announcements-react/src/hooks/useAnnouncements.ts new file mode 100644 index 0000000000..406d8d3536 --- /dev/null +++ b/workspaces/announcements/plugins/announcements-react/src/hooks/useAnnouncements.ts @@ -0,0 +1,66 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { useApi } from '@backstage/core-plugin-api'; +import { announcementsApiRef } from '../apis'; +import { + AnnouncementsFilters, + AnnouncementsList, +} from '@backstage-community/plugin-announcements-common'; +import useAsyncRetry from 'react-use/esm/useAsyncRetry'; + +/** + * Options for the useAnnouncements hook + * + * @public + */ +export type AnnouncementsOptions = { + dependencies?: any[]; +}; + +/** + * Hook to retrieve list of announcements. + * + * @returns A list of announcements and loading state + * + * @public + */ +export const useAnnouncements = ( + props: AnnouncementsFilters, + options?: AnnouncementsOptions, +): { + announcements: AnnouncementsList; + loading: boolean; + error: Error | undefined; + retry: () => void; +} => { + const api = useApi(announcementsApiRef); + + const { + value: announcementsList, + loading, + error, + retry, + } = useAsyncRetry(async () => { + return await api.announcements(props); + }, [api, ...(options?.dependencies ?? [])]); + + return { + announcements: announcementsList ?? { count: 0, results: [] }, + loading, + error, + retry, + }; +}; diff --git a/workspaces/announcements/plugins/announcements-react/src/hooks/useAnnouncementsTranslation.ts b/workspaces/announcements/plugins/announcements-react/src/hooks/useAnnouncementsTranslation.ts new file mode 100644 index 0000000000..dcd3d46210 --- /dev/null +++ b/workspaces/announcements/plugins/announcements-react/src/hooks/useAnnouncementsTranslation.ts @@ -0,0 +1,28 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; +import { announcementsTranslationRef } from '../translation'; + +/** + * Hook to get the announcements translation API. + * + * @returns The announcements translation API + * + * @public + */ +export const useAnnouncementsTranslation = () => { + return useTranslationRef(announcementsTranslationRef); +}; diff --git a/workspaces/announcements/plugins/announcements-react/src/hooks/useCategories.ts b/workspaces/announcements/plugins/announcements-react/src/hooks/useCategories.ts new file mode 100644 index 0000000000..e70e55f832 --- /dev/null +++ b/workspaces/announcements/plugins/announcements-react/src/hooks/useCategories.ts @@ -0,0 +1,51 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { useApi } from '@backstage/core-plugin-api'; +import { announcementsApiRef } from '../apis'; +import { Category } from '@backstage-community/plugin-announcements-common'; +import useAsyncRetry from 'react-use/esm/useAsyncRetry'; + +/** + * Hook to get all categories. + * + * @returns a list of all categories + * + * @public + */ +export const useCategories = (): { + categories: Category[]; + loading: boolean; + error: Error | undefined; + retry: () => void; +} => { + const api = useApi(announcementsApiRef); + + const { + value: categories, + loading, + error, + retry, + } = useAsyncRetry(async () => { + return await api.categories(); + }); + + return { + categories: categories ?? [], + loading, + error, + retry, + }; +}; diff --git a/workspaces/announcements/plugins/announcements-react/src/index.ts b/workspaces/announcements/plugins/announcements-react/src/index.ts new file mode 100644 index 0000000000..0932db9500 --- /dev/null +++ b/workspaces/announcements/plugins/announcements-react/src/index.ts @@ -0,0 +1,29 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Web library for the announcements plugin. + * + * @packageDocumentation + */ + +// In this package you might for example export components or hooks +// that are useful to other plugins or modules. + +export * from './apis'; +export * from './hooks'; + +export { announcementsTranslationRef } from './translation'; diff --git a/workspaces/announcements/plugins/announcements-react/src/setupTests.ts b/workspaces/announcements/plugins/announcements-react/src/setupTests.ts new file mode 100644 index 0000000000..658016ffdd --- /dev/null +++ b/workspaces/announcements/plugins/announcements-react/src/setupTests.ts @@ -0,0 +1,16 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import '@testing-library/jest-dom'; diff --git a/workspaces/announcements/plugins/announcements-react/src/translation.ts b/workspaces/announcements/plugins/announcements-react/src/translation.ts new file mode 100644 index 0000000000..566f64449f --- /dev/null +++ b/workspaces/announcements/plugins/announcements-react/src/translation.ts @@ -0,0 +1,150 @@ +/* + * Copyright 2024 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { createTranslationRef } from '@backstage/core-plugin-api/alpha'; + +/** @public */ +export const announcementsTranslationRef = createTranslationRef({ + id: 'announcements', + messages: { + announcementForm: { + title: 'Title', + excerpt: 'Excerpt', + active: 'Active', + submit: 'Submit', + editAnnouncement: 'Edit announcement', + newAnnouncement: 'New announcement', + categoryInput: { + create: 'Create', + label: 'Category', + }, + }, + announcementsPage: { + newAnnouncement: 'New announcement', + genericNew: 'New', + card: { + by: 'By', + in: 'in', + edit: 'EDIT', + delete: 'DELETE', + }, + grid: { + announcementDeleted: 'Announcement deleted.', + }, + contextMenu: { + admin: 'Admin', + categories: 'Categories', + }, + }, + deleteDialog: { + title: 'Are you sure you want to delete this announcement?', + cancel: 'Cancel', + delete: 'Delete', + }, + announcementsCard: { + seeAll: 'See all', + announcements: 'Announcements', + new: 'New', + in: 'in', + noAnnouncements: 'No announcements yet, want to', + addOne: 'add one', + }, + announcementSearchResultListItem: { + published: 'Published', + announcement: 'Announcement', + }, + announcementsTimeline: { + noAnnouncements: 'No announcements', + error: 'Error', + }, + categoriesForm: { + newCategory: 'New category', + editCategory: 'Edit category', + titleLabel: 'Title', + submit: 'Submit', + }, + categoriesTable: { + categoryDeleted: 'Category deleted.', + slug: 'Slug', + title: 'Title', + actions: 'Actions', + addTooltip: 'Add', + noCategoriesFound: 'No categories found.', + }, + categoriesPage: { + title: 'Categories', + subtitle: 'Manage announcement categories', + }, + createAnnouncementPage: { + alertMessage: 'Announcement created.', + alertMessageWithNewCategory: 'with new category', + }, + editAnnouncementPage: { + updatedMessage: 'Announcement updated.', + notFoundMessage: 'Unable to find announcement', + edit: 'Edit', + }, + newAnnouncementBanner: { + markAsSeen: 'Mark as seen', + }, + newCategoryDialog: { + createdMessage: 'Category created.', + newCategory: 'New category', + title: 'Title', + cancelButton: 'Cancel', + createButton: 'Create', + }, + admin: { + adminPortal: { + announcementsLabels: 'Announcements', + categoriesLabel: 'Categories', + title: 'Admin Portal for Announcements', + subtitle: 'Manage announcements and categories', + }, + announecementsContent: { + alertMessage: 'Announcement created.', + alertMessageWithNewCategory: 'with new category', + cancelButton: 'Cancel', + createButton: 'Create Announcement', + announcements: 'Announcements', + noAnnouncementsFound: 'No announcements found', + table: { + title: 'Title', + body: 'Body', + publisher: 'Publisher', + category: 'Category', + status: 'Status', + actions: 'Actions', + active: 'Active', + inactive: 'Inactive', + }, + }, + categoriesContent: { + createdMessage: 'created', + deletedMessage: 'Category deleted.', + cancelButton: 'Cancel', + createButton: 'Create category', + table: { + categoryDeleted: 'Category deleted.', + slug: 'Slug', + title: 'Title', + actions: 'Actions', + addTooltip: 'Add', + noCategoriesFound: 'No categories found.', + }, + }, + }, + }, +}); diff --git a/workspaces/announcements/plugins/announcements/package.json b/workspaces/announcements/plugins/announcements/package.json index 390ff7c729..2dbb945878 100644 --- a/workspaces/announcements/plugins/announcements/package.json +++ b/workspaces/announcements/plugins/announcements/package.json @@ -35,7 +35,8 @@ "@backstage-community/plugin-announcements", "@backstage-community/plugin-announcements-backend", "@backstage-community/plugin-announcements-common", - "@backstage-community/plugin-announcements-node" + "@backstage-community/plugin-announcements-node", + "@backstage-community/plugin-announcements-react" ] }, "sideEffects": false, @@ -50,6 +51,7 @@ }, "dependencies": { "@backstage-community/plugin-announcements-common": "workspace:^", + "@backstage-community/plugin-announcements-react": "workspace:^", "@backstage/catalog-model": "^1.7.1", "@backstage/core-app-api": "^1.15.2", "@backstage/core-compat-api": "^0.3.3", @@ -67,7 +69,6 @@ "@material-ui/icons": "^4.11.3", "@material-ui/lab": "4.0.0-alpha.57", "@mui/material": "^5.15.6", - "@procore-oss/backstage-plugin-announcements-react": "^0.5.0", "@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0", "@uiw/react-md-editor": "^4.0.3", "add": "^2.0.6", diff --git a/workspaces/announcements/plugins/announcements/report.api.md b/workspaces/announcements/plugins/announcements/report.api.md index 88d24369e7..304d05c24d 100644 --- a/workspaces/announcements/plugins/announcements/report.api.md +++ b/workspaces/announcements/plugins/announcements/report.api.md @@ -5,7 +5,7 @@ ```ts /// -import { AnnouncementsApi as AnnouncementsApi_2 } from '@procore-oss/backstage-plugin-announcements-react'; +import { AnnouncementsApi as AnnouncementsApi_2 } from '@backstage-community/plugin-announcements-react'; import { ApiRef } from '@backstage/core-plugin-api/index'; import { BackstagePlugin } from '@backstage/core-plugin-api'; import { JSX as JSX_2 } from 'react'; diff --git a/workspaces/announcements/plugins/announcements/src/alpha/apis.ts b/workspaces/announcements/plugins/announcements/src/alpha/apis.ts index 0433b3676f..8442898537 100644 --- a/workspaces/announcements/plugins/announcements/src/alpha/apis.ts +++ b/workspaces/announcements/plugins/announcements/src/alpha/apis.ts @@ -21,7 +21,7 @@ import { fetchApiRef, identityApiRef, } from '@backstage/frontend-plugin-api'; -import { announcementsApiRef } from '@procore-oss/backstage-plugin-announcements-react'; +import { announcementsApiRef } from '@backstage-community/plugin-announcements-react'; import { AnnouncementsClient } from '../api'; /** diff --git a/workspaces/announcements/plugins/announcements/src/alpha/entityCards.test.tsx b/workspaces/announcements/plugins/announcements/src/alpha/entityCards.test.tsx index 1661a3e9a5..d317d3945e 100644 --- a/workspaces/announcements/plugins/announcements/src/alpha/entityCards.test.tsx +++ b/workspaces/announcements/plugins/announcements/src/alpha/entityCards.test.tsx @@ -23,7 +23,7 @@ import { screen, waitFor } from '@testing-library/react'; import { AnnouncementsApi, announcementsApiRef, -} from '@procore-oss/backstage-plugin-announcements-react'; +} from '@backstage-community/plugin-announcements-react'; import { DateTime } from 'luxon'; import { EntityProvider } from '@backstage/plugin-catalog-react'; import React from 'react'; diff --git a/workspaces/announcements/plugins/announcements/src/api.ts b/workspaces/announcements/plugins/announcements/src/api.ts index 7859508201..ed1106855b 100644 --- a/workspaces/announcements/plugins/announcements/src/api.ts +++ b/workspaces/announcements/plugins/announcements/src/api.ts @@ -26,7 +26,7 @@ import { CreateAnnouncementRequest, CreateCategoryRequest, AnnouncementsApi, -} from '@procore-oss/backstage-plugin-announcements-react'; +} from '@backstage-community/plugin-announcements-react'; import { Announcement, AnnouncementsList, diff --git a/workspaces/announcements/plugins/announcements/src/components/Admin/AdminPortal/AdminPortal.tsx b/workspaces/announcements/plugins/announcements/src/components/Admin/AdminPortal/AdminPortal.tsx index 8bfceacff2..88da8b008c 100644 --- a/workspaces/announcements/plugins/announcements/src/components/Admin/AdminPortal/AdminPortal.tsx +++ b/workspaces/announcements/plugins/announcements/src/components/Admin/AdminPortal/AdminPortal.tsx @@ -18,7 +18,7 @@ import { Page, Header, Content } from '@backstage/core-components'; import { AnnouncementsContent } from '../AnnouncementsContent'; import { CategoriesContent } from '../CategoriesContent'; import { RequirePermission } from '@backstage/plugin-permission-react'; -import { useAnnouncementsTranslation } from '@procore-oss/backstage-plugin-announcements-react'; +import { useAnnouncementsTranslation } from '@backstage-community/plugin-announcements-react'; import { makeStyles, Tab } from '@material-ui/core'; import { TabContext, TabList, TabPanel } from '@material-ui/lab'; import { announcementCreatePermission } from '@backstage-community/plugin-announcements-common'; diff --git a/workspaces/announcements/plugins/announcements/src/components/Admin/AnnouncementsContent/AnnouncementsContent.tsx b/workspaces/announcements/plugins/announcements/src/components/Admin/AnnouncementsContent/AnnouncementsContent.tsx index 6071555cd8..6d0bc8ffa1 100644 --- a/workspaces/announcements/plugins/announcements/src/components/Admin/AnnouncementsContent/AnnouncementsContent.tsx +++ b/workspaces/announcements/plugins/announcements/src/components/Admin/AnnouncementsContent/AnnouncementsContent.tsx @@ -26,7 +26,7 @@ import { CreateAnnouncementRequest, useAnnouncementsTranslation, useCategories, -} from '@procore-oss/backstage-plugin-announcements-react'; +} from '@backstage-community/plugin-announcements-react'; import { Announcement, announcementCreatePermission, diff --git a/workspaces/announcements/plugins/announcements/src/components/Admin/CategoriesContent/CategoriesContent.tsx b/workspaces/announcements/plugins/announcements/src/components/Admin/CategoriesContent/CategoriesContent.tsx index 53b5c96bfe..082b1237c5 100644 --- a/workspaces/announcements/plugins/announcements/src/components/Admin/CategoriesContent/CategoriesContent.tsx +++ b/workspaces/announcements/plugins/announcements/src/components/Admin/CategoriesContent/CategoriesContent.tsx @@ -25,7 +25,7 @@ import { announcementsApiRef, useAnnouncementsTranslation, useCategories, -} from '@procore-oss/backstage-plugin-announcements-react'; +} from '@backstage-community/plugin-announcements-react'; import { announcementCreatePermission, announcementDeletePermission, diff --git a/workspaces/announcements/plugins/announcements/src/components/AnnouncementForm/AnnouncementForm.tsx b/workspaces/announcements/plugins/announcements/src/components/AnnouncementForm/AnnouncementForm.tsx index c3b70e4abb..9c95e06e05 100644 --- a/workspaces/announcements/plugins/announcements/src/components/AnnouncementForm/AnnouncementForm.tsx +++ b/workspaces/announcements/plugins/announcements/src/components/AnnouncementForm/AnnouncementForm.tsx @@ -20,7 +20,7 @@ import { identityApiRef, useApi } from '@backstage/core-plugin-api'; import { CreateAnnouncementRequest, useAnnouncementsTranslation, -} from '@procore-oss/backstage-plugin-announcements-react'; +} from '@backstage-community/plugin-announcements-react'; import { Announcement } from '@backstage-community/plugin-announcements-common'; import CategoryInput from './CategoryInput'; import { diff --git a/workspaces/announcements/plugins/announcements/src/components/AnnouncementForm/CategoryInput.test.tsx b/workspaces/announcements/plugins/announcements/src/components/AnnouncementForm/CategoryInput.test.tsx index b72b0babad..2e75c9d17d 100644 --- a/workspaces/announcements/plugins/announcements/src/components/AnnouncementForm/CategoryInput.test.tsx +++ b/workspaces/announcements/plugins/announcements/src/components/AnnouncementForm/CategoryInput.test.tsx @@ -18,15 +18,15 @@ import { screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { TestApiProvider, renderInTestApp } from '@backstage/test-utils'; import CategoryInput from './CategoryInput'; -import { announcementsApiRef } from '@procore-oss/backstage-plugin-announcements-react'; +import { announcementsApiRef } from '@backstage-community/plugin-announcements-react'; const categories = [ { title: 'Hello', slug: 'hello' }, { title: 'World', slug: 'world' }, ]; -jest.mock('@procore-oss/backstage-plugin-announcements-react', () => ({ - ...jest.requireActual('@procore-oss/backstage-plugin-announcements-react'), +jest.mock('@backstage-community/plugin-announcements-react', () => ({ + ...jest.requireActual('@backstage-community/plugin-announcements-react'), useCategories: () => { return { categories, diff --git a/workspaces/announcements/plugins/announcements/src/components/AnnouncementForm/CategoryInput.tsx b/workspaces/announcements/plugins/announcements/src/components/AnnouncementForm/CategoryInput.tsx index 4167bbe279..17bc6c1d83 100644 --- a/workspaces/announcements/plugins/announcements/src/components/AnnouncementForm/CategoryInput.tsx +++ b/workspaces/announcements/plugins/announcements/src/components/AnnouncementForm/CategoryInput.tsx @@ -20,7 +20,7 @@ import { Category } from '@backstage-community/plugin-announcements-common'; import { useAnnouncementsTranslation, useCategories, -} from '@procore-oss/backstage-plugin-announcements-react'; +} from '@backstage-community/plugin-announcements-react'; import CircularProgress from '@mui/material/CircularProgress'; type CategoryInputProps = { diff --git a/workspaces/announcements/plugins/announcements/src/components/AnnouncementPage/AnnouncementPage.tsx b/workspaces/announcements/plugins/announcements/src/components/AnnouncementPage/AnnouncementPage.tsx index 4a3866e0ee..20a11354ad 100644 --- a/workspaces/announcements/plugins/announcements/src/components/AnnouncementPage/AnnouncementPage.tsx +++ b/workspaces/announcements/plugins/announcements/src/components/AnnouncementPage/AnnouncementPage.tsx @@ -37,7 +37,7 @@ import { entityRouteRef, } from '@backstage/plugin-catalog-react'; import { announcementViewRouteRef, rootRouteRef } from '../../routes'; -import { announcementsApiRef } from '@procore-oss/backstage-plugin-announcements-react'; +import { announcementsApiRef } from '@backstage-community/plugin-announcements-react'; import { Announcement } from '@backstage-community/plugin-announcements-common'; import { Grid } from '@material-ui/core'; import { Alert } from '@material-ui/lab'; diff --git a/workspaces/announcements/plugins/announcements/src/components/AnnouncementSearchResultListItem/AnnouncementSearchResultListItem.tsx b/workspaces/announcements/plugins/announcements/src/components/AnnouncementSearchResultListItem/AnnouncementSearchResultListItem.tsx index aeb89241af..f8ed86a5a9 100644 --- a/workspaces/announcements/plugins/announcements/src/components/AnnouncementSearchResultListItem/AnnouncementSearchResultListItem.tsx +++ b/workspaces/announcements/plugins/announcements/src/components/AnnouncementSearchResultListItem/AnnouncementSearchResultListItem.tsx @@ -21,7 +21,7 @@ import { ResultHighlight, } from '@backstage/plugin-search-common'; import { HighlightedSearchResultText } from '@backstage/plugin-search-react'; -import { useAnnouncementsTranslation } from '@procore-oss/backstage-plugin-announcements-react'; +import { useAnnouncementsTranslation } from '@backstage-community/plugin-announcements-react'; import { makeStyles, ListItem, diff --git a/workspaces/announcements/plugins/announcements/src/components/AnnouncementsCard/AnnouncementsCard.tsx b/workspaces/announcements/plugins/announcements/src/components/AnnouncementsCard/AnnouncementsCard.tsx index e8453d338a..bc312cc02d 100644 --- a/workspaces/announcements/plugins/announcements/src/components/AnnouncementsCard/AnnouncementsCard.tsx +++ b/workspaces/announcements/plugins/announcements/src/components/AnnouncementsCard/AnnouncementsCard.tsx @@ -33,7 +33,7 @@ import { announcementsApiRef, useAnnouncements, useAnnouncementsTranslation, -} from '@procore-oss/backstage-plugin-announcements-react'; +} from '@backstage-community/plugin-announcements-react'; import { makeStyles, List, diff --git a/workspaces/announcements/plugins/announcements/src/components/AnnouncementsPage/AnnouncementsPage.test.tsx b/workspaces/announcements/plugins/announcements/src/components/AnnouncementsPage/AnnouncementsPage.test.tsx index 9870d28294..6e45b80e8c 100644 --- a/workspaces/announcements/plugins/announcements/src/components/AnnouncementsPage/AnnouncementsPage.test.tsx +++ b/workspaces/announcements/plugins/announcements/src/components/AnnouncementsPage/AnnouncementsPage.test.tsx @@ -24,7 +24,7 @@ import { rootRouteRef } from '../../routes'; import { permissionApiRef } from '@backstage/plugin-permission-react'; import { catalogApiRef, entityRouteRef } from '@backstage/plugin-catalog-react'; import { fireEvent, screen } from '@testing-library/react'; -import { announcementsApiRef } from '@procore-oss/backstage-plugin-announcements-react'; +import { announcementsApiRef } from '@backstage-community/plugin-announcements-react'; const mockAnnouncements = [ { diff --git a/workspaces/announcements/plugins/announcements/src/components/AnnouncementsPage/AnnouncementsPage.tsx b/workspaces/announcements/plugins/announcements/src/components/AnnouncementsPage/AnnouncementsPage.tsx index b763b3d19d..10068e25f4 100644 --- a/workspaces/announcements/plugins/announcements/src/components/AnnouncementsPage/AnnouncementsPage.tsx +++ b/workspaces/announcements/plugins/announcements/src/components/AnnouncementsPage/AnnouncementsPage.tsx @@ -56,7 +56,7 @@ import { announcementsApiRef, useAnnouncements, useAnnouncementsTranslation, -} from '@procore-oss/backstage-plugin-announcements-react'; +} from '@backstage-community/plugin-announcements-react'; import { Card, CardContent, diff --git a/workspaces/announcements/plugins/announcements/src/components/AnnouncementsPage/ContextMenu.tsx b/workspaces/announcements/plugins/announcements/src/components/AnnouncementsPage/ContextMenu.tsx index 5cbbfc25d1..7fd54197cd 100644 --- a/workspaces/announcements/plugins/announcements/src/components/AnnouncementsPage/ContextMenu.tsx +++ b/workspaces/announcements/plugins/announcements/src/components/AnnouncementsPage/ContextMenu.tsx @@ -20,7 +20,7 @@ import { announcementAdminRouteRef, categoriesListRouteRef, } from '../../routes'; -import { useAnnouncementsTranslation } from '@procore-oss/backstage-plugin-announcements-react'; +import { useAnnouncementsTranslation } from '@backstage-community/plugin-announcements-react'; import { makeStyles, Box, diff --git a/workspaces/announcements/plugins/announcements/src/components/AnnouncementsPage/DeleteAnnouncementDialog.tsx b/workspaces/announcements/plugins/announcements/src/components/AnnouncementsPage/DeleteAnnouncementDialog.tsx index cea936405f..dab264aaa0 100644 --- a/workspaces/announcements/plugins/announcements/src/components/AnnouncementsPage/DeleteAnnouncementDialog.tsx +++ b/workspaces/announcements/plugins/announcements/src/components/AnnouncementsPage/DeleteAnnouncementDialog.tsx @@ -16,7 +16,7 @@ import { usePermission } from '@backstage/plugin-permission-react'; import { Button, Dialog, DialogActions, DialogTitle } from '@material-ui/core'; import { announcementDeletePermission } from '@backstage-community/plugin-announcements-common'; -import { useAnnouncementsTranslation } from '@procore-oss/backstage-plugin-announcements-react'; +import { useAnnouncementsTranslation } from '@backstage-community/plugin-announcements-react'; import React from 'react'; type DeleteAnnouncementDialogProps = { diff --git a/workspaces/announcements/plugins/announcements/src/components/AnnouncementsTimeline/AnnouncementsTimeline.test.tsx b/workspaces/announcements/plugins/announcements/src/components/AnnouncementsTimeline/AnnouncementsTimeline.test.tsx index d7ba5a2019..d3eca3d51e 100644 --- a/workspaces/announcements/plugins/announcements/src/components/AnnouncementsTimeline/AnnouncementsTimeline.test.tsx +++ b/workspaces/announcements/plugins/announcements/src/components/AnnouncementsTimeline/AnnouncementsTimeline.test.tsx @@ -25,7 +25,7 @@ import { AnnouncementsList } from '@backstage-community/plugin-announcements-com import { AnnouncementsApi, announcementsApiRef, -} from '@procore-oss/backstage-plugin-announcements-react'; +} from '@backstage-community/plugin-announcements-react'; const renderMockTimelineComponent = async ({ announcements, diff --git a/workspaces/announcements/plugins/announcements/src/components/AnnouncementsTimeline/AnnouncementsTimeline.tsx b/workspaces/announcements/plugins/announcements/src/components/AnnouncementsTimeline/AnnouncementsTimeline.tsx index 4289f18cfc..b24f0c51c6 100644 --- a/workspaces/announcements/plugins/announcements/src/components/AnnouncementsTimeline/AnnouncementsTimeline.tsx +++ b/workspaces/announcements/plugins/announcements/src/components/AnnouncementsTimeline/AnnouncementsTimeline.tsx @@ -21,7 +21,7 @@ import { announcementViewRouteRef } from '../../routes'; import { useAnnouncements, useAnnouncementsTranslation, -} from '@procore-oss/backstage-plugin-announcements-react'; +} from '@backstage-community/plugin-announcements-react'; import { Progress } from '@backstage/core-components'; import { Timeline, diff --git a/workspaces/announcements/plugins/announcements/src/components/CategoriesForm/CategoriesForm.tsx b/workspaces/announcements/plugins/announcements/src/components/CategoriesForm/CategoriesForm.tsx index 30cc60824c..5ebdfcf8be 100644 --- a/workspaces/announcements/plugins/announcements/src/components/CategoriesForm/CategoriesForm.tsx +++ b/workspaces/announcements/plugins/announcements/src/components/CategoriesForm/CategoriesForm.tsx @@ -18,7 +18,7 @@ import { InfoCard } from '@backstage/core-components'; import { CreateCategoryRequest, useAnnouncementsTranslation, -} from '@procore-oss/backstage-plugin-announcements-react'; +} from '@backstage-community/plugin-announcements-react'; import { announcementCreatePermission, Category, diff --git a/workspaces/announcements/plugins/announcements/src/components/CategoriesPage/CategoriesPage.tsx b/workspaces/announcements/plugins/announcements/src/components/CategoriesPage/CategoriesPage.tsx index 02ceca6899..b334ebb305 100644 --- a/workspaces/announcements/plugins/announcements/src/components/CategoriesPage/CategoriesPage.tsx +++ b/workspaces/announcements/plugins/announcements/src/components/CategoriesPage/CategoriesPage.tsx @@ -27,7 +27,7 @@ import { useAnnouncementsTranslation, useCategories, announcementsApiRef, -} from '@procore-oss/backstage-plugin-announcements-react'; +} from '@backstage-community/plugin-announcements-react'; import { Category } from '@backstage-community/plugin-announcements-common'; import { useDeleteCategoryDialogState } from './useDeleteCategoryDialogState'; import { alertApiRef, useApi } from '@backstage/core-plugin-api'; diff --git a/workspaces/announcements/plugins/announcements/src/components/CreateAnnouncementPage/CreateAnnouncementPage.tsx b/workspaces/announcements/plugins/announcements/src/components/CreateAnnouncementPage/CreateAnnouncementPage.tsx index 1628e8aeb4..c7216d09bd 100644 --- a/workspaces/announcements/plugins/announcements/src/components/CreateAnnouncementPage/CreateAnnouncementPage.tsx +++ b/workspaces/announcements/plugins/announcements/src/components/CreateAnnouncementPage/CreateAnnouncementPage.tsx @@ -25,7 +25,7 @@ import { announcementsApiRef, useAnnouncementsTranslation, useCategories, -} from '@procore-oss/backstage-plugin-announcements-react'; +} from '@backstage-community/plugin-announcements-react'; import { Announcement, Category, diff --git a/workspaces/announcements/plugins/announcements/src/components/EditAnnouncementPage/EditAnnouncementPage.tsx b/workspaces/announcements/plugins/announcements/src/components/EditAnnouncementPage/EditAnnouncementPage.tsx index 276ee62924..e8030f5909 100644 --- a/workspaces/announcements/plugins/announcements/src/components/EditAnnouncementPage/EditAnnouncementPage.tsx +++ b/workspaces/announcements/plugins/announcements/src/components/EditAnnouncementPage/EditAnnouncementPage.tsx @@ -27,7 +27,7 @@ import { announcementsApiRef, CreateAnnouncementRequest, useAnnouncementsTranslation, -} from '@procore-oss/backstage-plugin-announcements-react'; +} from '@backstage-community/plugin-announcements-react'; import { Alert } from '@material-ui/lab'; type EditAnnouncementPageProps = { diff --git a/workspaces/announcements/plugins/announcements/src/components/NewAnnouncementBanner/NewAnnouncementBanner.tsx b/workspaces/announcements/plugins/announcements/src/components/NewAnnouncementBanner/NewAnnouncementBanner.tsx index 1c2d7e8e0e..4e568eefdb 100644 --- a/workspaces/announcements/plugins/announcements/src/components/NewAnnouncementBanner/NewAnnouncementBanner.tsx +++ b/workspaces/announcements/plugins/announcements/src/components/NewAnnouncementBanner/NewAnnouncementBanner.tsx @@ -22,7 +22,7 @@ import { announcementsApiRef, useAnnouncements, useAnnouncementsTranslation, -} from '@procore-oss/backstage-plugin-announcements-react'; +} from '@backstage-community/plugin-announcements-react'; import { Announcement, AnnouncementSignal, diff --git a/workspaces/announcements/plugins/announcements/src/components/NewCategoryDialog/NewCategoryDialog.tsx b/workspaces/announcements/plugins/announcements/src/components/NewCategoryDialog/NewCategoryDialog.tsx index fd9e22f4c5..91c3729d7d 100644 --- a/workspaces/announcements/plugins/announcements/src/components/NewCategoryDialog/NewCategoryDialog.tsx +++ b/workspaces/announcements/plugins/announcements/src/components/NewCategoryDialog/NewCategoryDialog.tsx @@ -18,7 +18,7 @@ import { alertApiRef, useApi } from '@backstage/core-plugin-api'; import { announcementsApiRef, useAnnouncementsTranslation, -} from '@procore-oss/backstage-plugin-announcements-react'; +} from '@backstage-community/plugin-announcements-react'; import { Button, Dialog, diff --git a/workspaces/announcements/plugins/announcements/src/index.ts b/workspaces/announcements/plugins/announcements/src/index.ts index 2de203bb12..27abbdaf32 100644 --- a/workspaces/announcements/plugins/announcements/src/index.ts +++ b/workspaces/announcements/plugins/announcements/src/index.ts @@ -18,16 +18,16 @@ export { announcementsPlugin, AnnouncementsPage } from './plugin'; import { announcementsApiRef as announcementsApiRef_, AnnouncementsApi as AnnouncementsApi_, -} from '@procore-oss/backstage-plugin-announcements-react'; +} from '@backstage-community/plugin-announcements-react'; /** @public - * @deprecated Use `AnnouncementsApi` from `@procore-oss/backstage-plugin-announcements-react` instead + * @deprecated Use `AnnouncementsApi` from `@backstage-community/plugin-announcements-react` instead */ export type AnnouncementsApi = AnnouncementsApi_; /** * @public - * @deprecated Use `announcementsApiRef` from `@procore-oss/backstage-plugin-announcements-react` instead + * @deprecated Use `announcementsApiRef` from `@backstage-community/plugin-announcements-react` instead */ export const announcementsApiRef = announcementsApiRef_; diff --git a/workspaces/announcements/plugins/announcements/src/plugin.ts b/workspaces/announcements/plugins/announcements/src/plugin.ts index 05b478012f..944b2ee49e 100644 --- a/workspaces/announcements/plugins/announcements/src/plugin.ts +++ b/workspaces/announcements/plugins/announcements/src/plugin.ts @@ -29,7 +29,7 @@ import { } from '@backstage/plugin-search-react'; import { AnnouncementSearchResultProps } from './components/AnnouncementSearchResultListItem'; import { rootRouteRef } from './routes'; -import { announcementsApiRef } from '@procore-oss/backstage-plugin-announcements-react'; +import { announcementsApiRef } from '@backstage-community/plugin-announcements-react'; import { AnnouncementsClient } from './api'; /** diff --git a/workspaces/announcements/plugins/search-backend-module-announcements/config.d.ts b/workspaces/announcements/plugins/search-backend-module-announcements/config.d.ts index c36af1b7c9..f1f2ca237b 100644 --- a/workspaces/announcements/plugins/search-backend-module-announcements/config.d.ts +++ b/workspaces/announcements/plugins/search-backend-module-announcements/config.d.ts @@ -19,7 +19,7 @@ export interface Config { search?: { collators?: { /** - * Configuration options for `@procore-oss/backstage-plugin-search-backend-module-announcements` + * Configuration options for `@backstage-community/plugin-search-backend-module-announcements` */ announcements?: { /** diff --git a/workspaces/announcements/yarn.lock b/workspaces/announcements/yarn.lock index 4d01dc3584..9f0657ebe7 100644 --- a/workspaces/announcements/yarn.lock +++ b/workspaces/announcements/yarn.lock @@ -5,7 +5,7 @@ __metadata: version: 6 cacheKey: 8 -"@adobe/css-tools@npm:^4.4.0": +"@adobe/css-tools@npm:^4.0.1, @adobe/css-tools@npm:^4.4.0": version: 4.4.1 resolution: "@adobe/css-tools@npm:4.4.1" checksum: bbded8a03c314afee0fb0b42922f664f437e0e2f0b86eeeb06dee9d02cd8fc958cf87aa3314952b00074e0b22fc5b8da23f45b61b6f8291c8aaa7cffc56a76e9 @@ -2595,11 +2595,30 @@ __metadata: languageName: unknown linkType: soft +"@backstage-community/plugin-announcements-react@workspace:^, @backstage-community/plugin-announcements-react@workspace:plugins/announcements-react": + version: 0.0.0-use.local + resolution: "@backstage-community/plugin-announcements-react@workspace:plugins/announcements-react" + dependencies: + "@backstage-community/plugin-announcements-common": "workspace:^" + "@backstage/cli": ^0.29.2 + "@backstage/core-plugin-api": ^1.10.1 + "@backstage/errors": ^1.2.5 + "@testing-library/jest-dom": ^5.10.1 + "@testing-library/react": ^12.1.3 + luxon: ^3.4.4 + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-use: ^17.2.4 + peerDependencies: + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + languageName: unknown + linkType: soft + "@backstage-community/plugin-announcements@workspace:plugins/announcements": version: 0.0.0-use.local resolution: "@backstage-community/plugin-announcements@workspace:plugins/announcements" dependencies: "@backstage-community/plugin-announcements-common": "workspace:^" + "@backstage-community/plugin-announcements-react": "workspace:^" "@backstage/catalog-model": ^1.7.1 "@backstage/cli": ^0.29.2 "@backstage/core-app-api": ^1.15.2 @@ -2622,7 +2641,6 @@ __metadata: "@material-ui/icons": ^4.11.3 "@material-ui/lab": 4.0.0-alpha.57 "@mui/material": ^5.15.6 - "@procore-oss/backstage-plugin-announcements-react": ^0.5.0 "@testing-library/jest-dom": ^6.3.0 "@testing-library/react": ^14.0.0 "@testing-library/user-event": ^14.5.1 @@ -7220,30 +7238,6 @@ __metadata: languageName: node linkType: hard -"@procore-oss/backstage-plugin-announcements-common@npm:^0.2.9": - version: 0.2.9 - resolution: "@procore-oss/backstage-plugin-announcements-common@npm:0.2.9" - dependencies: - "@backstage/plugin-permission-common": ^0.8.2 - checksum: 04c01a04174e175d121f4becdb08a3539731dfe09788d25417c344d316626d72801d781b6f5b4b5188b0e5e64649ead7e6efe35e319f0a091201d47bef78f0fa - languageName: node - linkType: hard - -"@procore-oss/backstage-plugin-announcements-react@npm:^0.5.0": - version: 0.5.0 - resolution: "@procore-oss/backstage-plugin-announcements-react@npm:0.5.0" - dependencies: - "@backstage/core-plugin-api": ^1.10.1 - "@backstage/errors": ^1.2.5 - "@procore-oss/backstage-plugin-announcements-common": ^0.2.9 - luxon: ^3.4.4 - react-use: ^17.2.4 - peerDependencies: - react: ^17.0.0 || ^18.0.0 - checksum: ade94ab3d8617d0931f61b21c466edad53492f4fc9d101a65efe89a79580ffa731856376904bddc3b36c2515684414172e73dab73926ffda104d689310381a78 - languageName: node - linkType: hard - "@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": version: 1.1.2 resolution: "@protobufjs/aspromise@npm:1.1.2" @@ -8977,6 +8971,22 @@ __metadata: languageName: node linkType: hard +"@testing-library/dom@npm:^8.0.0": + version: 8.20.1 + resolution: "@testing-library/dom@npm:8.20.1" + dependencies: + "@babel/code-frame": ^7.10.4 + "@babel/runtime": ^7.12.5 + "@types/aria-query": ^5.0.1 + aria-query: 5.1.3 + chalk: ^4.1.0 + dom-accessibility-api: ^0.5.9 + lz-string: ^1.5.0 + pretty-format: ^27.0.2 + checksum: 06fc8dc67849aadb726cbbad0e7546afdf8923bd39acb64c576d706249bd7d0d05f08e08a31913fb621162e3b9c2bd0dce15964437f030f9fa4476326fdd3007 + languageName: node + linkType: hard + "@testing-library/dom@npm:^9.0.0": version: 9.3.4 resolution: "@testing-library/dom@npm:9.3.4" @@ -8993,6 +9003,23 @@ __metadata: languageName: node linkType: hard +"@testing-library/jest-dom@npm:^5.10.1": + version: 5.17.0 + resolution: "@testing-library/jest-dom@npm:5.17.0" + dependencies: + "@adobe/css-tools": ^4.0.1 + "@babel/runtime": ^7.9.2 + "@types/testing-library__jest-dom": ^5.9.1 + aria-query: ^5.0.0 + chalk: ^3.0.0 + css.escape: ^1.5.1 + dom-accessibility-api: ^0.5.6 + lodash: ^4.17.15 + redent: ^3.0.0 + checksum: 9f28dbca8b50d7c306aae40c3aa8e06f0e115f740360004bd87d57f95acf7ab4b4f4122a7399a76dbf2bdaaafb15c99cc137fdcb0ae457a92e2de0f3fbf9b03b + languageName: node + linkType: hard + "@testing-library/jest-dom@npm:^6.3.0": version: 6.6.3 resolution: "@testing-library/jest-dom@npm:6.6.3" @@ -9008,6 +9035,20 @@ __metadata: languageName: node linkType: hard +"@testing-library/react@npm:^12.1.3": + version: 12.1.5 + resolution: "@testing-library/react@npm:12.1.5" + dependencies: + "@babel/runtime": ^7.12.5 + "@testing-library/dom": ^8.0.0 + "@types/react-dom": <18.0.0 + peerDependencies: + react: <18.0.0 + react-dom: <18.0.0 + checksum: 4abd0490405e709a7df584a0db604e508a4612398bb1326e8fa32dd9393b15badc826dcf6d2f7525437886d507871f719f127b9860ed69ddd204d1fa834f576a + languageName: node + linkType: hard + "@testing-library/react@npm:^14.0.0": version: 14.3.1 resolution: "@testing-library/react@npm:14.3.1" @@ -9478,7 +9519,7 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:^29.5.11": +"@types/jest@npm:*, @types/jest@npm:^29.5.11": version: 29.5.14 resolution: "@types/jest@npm:29.5.14" dependencies: @@ -9947,6 +9988,15 @@ __metadata: languageName: node linkType: hard +"@types/testing-library__jest-dom@npm:^5.9.1": + version: 5.14.9 + resolution: "@types/testing-library__jest-dom@npm:5.14.9" + dependencies: + "@types/jest": "*" + checksum: d364494fc2545316292e88861146146af1e3818792ca63b62a63758b2f737669b687f4aaddfcfbcb7d0e1ed7890a9bd05de23ff97f277d5e68de574497a9ee72 + languageName: node + linkType: hard + "@types/tough-cookie@npm:*": version: 4.0.5 resolution: "@types/tough-cookie@npm:4.0.5" @@ -14111,7 +14161,7 @@ __metadata: languageName: node linkType: hard -"dom-accessibility-api@npm:^0.5.9": +"dom-accessibility-api@npm:^0.5.6, dom-accessibility-api@npm:^0.5.9": version: 0.5.16 resolution: "dom-accessibility-api@npm:0.5.16" checksum: 005eb283caef57fc1adec4d5df4dd49189b628f2f575af45decb210e04d634459e3f1ee64f18b41e2dcf200c844bc1d9279d80807e686a30d69a4756151ad248