diff --git a/.changeset/wet-cats-allow.md b/.changeset/wet-cats-allow.md index 815f7fdc30..12d0eb7069 100644 --- a/.changeset/wet-cats-allow.md +++ b/.changeset/wet-cats-allow.md @@ -12,7 +12,6 @@ import { FeaturedDocsCard } from '@backstage/plugin-home'; 'spec.type': 'documentation', 'metadata.name': 'getting-started-with-backstage', }} - title={cardTitleReactNode} subLinkText="More Details" emptyState={emptyStateReactNode} linkDestination={'/customPath'} diff --git a/plugins/home/api-report.md b/plugins/home/api-report.md index 6a6022170b..18049cae84 100644 --- a/plugins/home/api-report.md +++ b/plugins/home/api-report.md @@ -103,16 +103,17 @@ export type CustomHomepageGridProps = { }; // @public -export const FeaturedDocsCard: (props: FeaturedDocsCardProps) => JSX_2.Element; +export const FeaturedDocsCard: ( + props: CardExtensionProps_2, +) => JSX_2.Element; // @public export type FeaturedDocsCardProps = { filter: EntityFilterQuery; - emptyState?: React_2.ReactNode; + emptyState?: React_2.JSX.Element; linkDestination?: string; responseLimit?: number; subLinkText?: string; - title?: React_2.ReactNode; }; // @public diff --git a/plugins/home/src/homePageComponents/FeaturedDocsCard/FeaturedDocsCard.test.tsx b/plugins/home/src/homePageComponents/FeaturedDocsCard/Content.test.tsx similarity index 91% rename from plugins/home/src/homePageComponents/FeaturedDocsCard/FeaturedDocsCard.test.tsx rename to plugins/home/src/homePageComponents/FeaturedDocsCard/Content.test.tsx index 175b1423b0..427a1484d5 100644 --- a/plugins/home/src/homePageComponents/FeaturedDocsCard/FeaturedDocsCard.test.tsx +++ b/plugins/home/src/homePageComponents/FeaturedDocsCard/Content.test.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { FeaturedDocsCard } from './FeaturedDocsCard'; +import { Content } from './Content'; import React from 'react'; import { catalogApiRef, entityRouteRef } from '@backstage/plugin-catalog-react'; import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; @@ -51,13 +51,12 @@ describe('', () => { it('should show expected featured doc and title', async () => { const { getByTestId, getByText } = await renderInTestApp( - , { @@ -68,9 +67,7 @@ describe('', () => { ); const docsCardContent = getByTestId('docs-card-content'); const docsEntity = getByText('Getting Started Docs'); - const docsTitle = getByText('Featured Doc'); expect(docsCardContent).toContainElement(docsEntity); - expect(docsTitle).toBeInTheDocument(); }); }); diff --git a/plugins/home/src/homePageComponents/FeaturedDocsCard/FeaturedDocsCard.tsx b/plugins/home/src/homePageComponents/FeaturedDocsCard/Content.tsx similarity index 56% rename from plugins/home/src/homePageComponents/FeaturedDocsCard/FeaturedDocsCard.tsx rename to plugins/home/src/homePageComponents/FeaturedDocsCard/Content.tsx index 715608c62a..dfa83ce074 100644 --- a/plugins/home/src/homePageComponents/FeaturedDocsCard/FeaturedDocsCard.tsx +++ b/plugins/home/src/homePageComponents/FeaturedDocsCard/Content.tsx @@ -20,7 +20,6 @@ import { LinkButton, EmptyState, Link, - InfoCard, Progress, ErrorPanel, } from '@backstage/core-components'; @@ -39,15 +38,13 @@ export type FeaturedDocsCardProps = { /** The entity filter used to display only the intended item/s */ filter: EntityFilterQuery; /** An optional ReactNode for empty states */ - emptyState?: React.ReactNode; + emptyState?: React.JSX.Element; /** An optional linkDestination to set for the Featured Doc */ linkDestination?: string; /** An optional limit to set for link destination */ responseLimit?: number; /** An optional string to customize sublink text */ subLinkText?: string; - /** An optional string or ReactNode to customize the card title */ - title?: React.ReactNode; }; const useStyles = makeStyles( @@ -77,15 +74,9 @@ const useStyles = makeStyles( * * @public */ -export const FeaturedDocsCard = (props: FeaturedDocsCardProps) => { - const { - emptyState, - filter, - linkDestination, - responseLimit, - subLinkText, - title, - } = props; +export const Content = (props: FeaturedDocsCardProps): JSX.Element => { + const { emptyState, filter, linkDestination, responseLimit, subLinkText } = + props; const linkText = subLinkText || 'LEARN MORE'; const styles = useStyles(); const catalogApi: CatalogApi = useApi(catalogApiRef); @@ -108,60 +99,60 @@ export const FeaturedDocsCard = (props: FeaturedDocsCardProps) => { return ; } - return ( - - {entities?.length - ? entities.map(d => ( -
- - {d.metadata.title} - - {d.metadata.description && ( - - {d.metadata.description} - - )} - - {linkText} - -
- )) - : emptyState || ( - - DOCS - - } - /> + return entities?.length ? ( + <> + {entities.map(d => ( +
+ + {d.metadata.title} + + {d.metadata.description && ( + + {d.metadata.description} + )} - + + {linkText} + +
+ ))} + + ) : ( + emptyState || ( + + DOCS + + } + /> + ) ); }; diff --git a/plugins/home/src/homePageComponents/FeaturedDocsCard/FeaturedDocsCard.stories.tsx b/plugins/home/src/homePageComponents/FeaturedDocsCard/FeaturedDocsCard.stories.tsx index 498d177c07..91f0dbf27e 100644 --- a/plugins/home/src/homePageComponents/FeaturedDocsCard/FeaturedDocsCard.stories.tsx +++ b/plugins/home/src/homePageComponents/FeaturedDocsCard/FeaturedDocsCard.stories.tsx @@ -65,7 +65,6 @@ export const Default = () => { 'spec.type': 'documentation', 'metadata.name': 'getting-started-with-backstage', }} - title="Featured Doc" /> ); diff --git a/plugins/home/src/homePageComponents/FeaturedDocsCard/index.ts b/plugins/home/src/homePageComponents/FeaturedDocsCard/index.ts index 99169327f9..5151fa370c 100644 --- a/plugins/home/src/homePageComponents/FeaturedDocsCard/index.ts +++ b/plugins/home/src/homePageComponents/FeaturedDocsCard/index.ts @@ -14,5 +14,5 @@ * limitations under the License. */ -export { FeaturedDocsCard } from './FeaturedDocsCard'; -export type { FeaturedDocsCardProps } from './FeaturedDocsCard'; +export { Content } from './Content'; +export type { FeaturedDocsCardProps } from './Content'; diff --git a/plugins/home/src/plugin.ts b/plugins/home/src/plugin.ts index 42e0237589..5361ecd9c0 100644 --- a/plugins/home/src/plugin.ts +++ b/plugins/home/src/plugin.ts @@ -19,12 +19,15 @@ import { createComponentExtension, createPlugin, createRoutableExtension, - createReactExtension, identityApiRef, storageApiRef, } from '@backstage/core-plugin-api'; import { createCardExtension } from '@backstage/plugin-home-react'; -import { ToolkitContentProps, VisitedByTypeProps } from './homePageComponents'; +import { + ToolkitContentProps, + VisitedByTypeProps, + FeaturedDocsCardProps, +} from './homePageComponents'; import { rootRouteRef } from './routes'; import { VisitsStorageApi, visitsApiRef } from './api'; @@ -218,13 +221,9 @@ export const HomePageRecentlyVisited = homePlugin.provide( * @public */ export const FeaturedDocsCard = homePlugin.provide( - createReactExtension({ - name: 'FeaturedDocs', - component: { - lazy: () => - import('./homePageComponents/FeaturedDocsCard').then( - m => m.FeaturedDocsCard, - ), - }, + createCardExtension({ + name: 'FeaturedDocsCard', + title: 'Featured Docs', + components: () => import('./homePageComponents/FeaturedDocsCard'), }), );