From 5a477ce8344c98cf6fe4c51a4d35be6a0e5a3168 Mon Sep 17 00:00:00 2001 From: Karl Haworth Date: Tue, 5 Mar 2024 14:05:49 -0500 Subject: [PATCH] feat(apollo-explorer): allow callbacks using apiholder Signed-off-by: Karl Haworth --- plugins/apollo-explorer/package.json | 2 ++ .../ApolloExplorerPage/ApolloExplorerPage.tsx | 23 +++++++++++++++++-- yarn.lock | 4 +++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/plugins/apollo-explorer/package.json b/plugins/apollo-explorer/package.json index cd7b3e6b51..563b16f951 100644 --- a/plugins/apollo-explorer/package.json +++ b/plugins/apollo-explorer/package.json @@ -36,7 +36,9 @@ "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", "@material-ui/core": "^4.12.2", + "@material-ui/lab": "^4.0.0-alpha.61", "@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0", + "react-use": "^17.5.0", "use-deep-compare-effect": "^1.8.1" }, "devDependencies": { diff --git a/plugins/apollo-explorer/src/components/ApolloExplorerPage/ApolloExplorerPage.tsx b/plugins/apollo-explorer/src/components/ApolloExplorerPage/ApolloExplorerPage.tsx index f90af9bc17..f6bda693b5 100644 --- a/plugins/apollo-explorer/src/components/ApolloExplorerPage/ApolloExplorerPage.tsx +++ b/plugins/apollo-explorer/src/components/ApolloExplorerPage/ApolloExplorerPage.tsx @@ -18,6 +18,10 @@ import React from 'react'; import { Content, Header, Page } from '@backstage/core-components'; import { ApolloExplorerBrowser } from '../ApolloExplorerBrowser'; import { JSONObject } from '@apollo/explorer/src/helpers/types'; +import { ApiHolder, useApiHolder } from '@backstage/core-plugin-api'; +import { useAsync } from 'react-use'; +import { CircularProgress } from '@material-ui/core'; +import { Alert } from '@material-ui/lab'; type EndpointProps = { title: string; @@ -35,19 +39,34 @@ type EndpointProps = { }; }; +type EndpointPropsCallback = (options: { + apiHolder: ApiHolder; +}) => Promise; + type Props = { title?: string | undefined; subtitle?: string | undefined; - endpoints: EndpointProps[]; + endpoints: EndpointProps[] | EndpointPropsCallback; }; export const ApolloExplorerPage = (props: Props) => { const { title, subtitle, endpoints } = props; + const apiHolder = useApiHolder(); + + const { value, loading, error } = useAsync(async () => { + if (typeof endpoints === 'function') { + return await endpoints({ apiHolder }); + } + return endpoints; + }, []); + return (
- + {loading && } + {error && {error?.message}} + {value && } ); diff --git a/yarn.lock b/yarn.lock index eb05400306..edfc9eadb9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4676,10 +4676,12 @@ __metadata: "@backstage/core-plugin-api": "workspace:^" "@backstage/dev-utils": "workspace:^" "@material-ui/core": ^4.12.2 + "@material-ui/lab": ^4.0.0-alpha.61 "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^6.0.0 "@testing-library/react": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 + react-use: ^17.5.0 use-deep-compare-effect: ^1.8.1 peerDependencies: react: ^16.13.1 || ^17.0.0 || ^18.0.0 @@ -40267,7 +40269,7 @@ __metadata: languageName: node linkType: hard -"react-use@npm:^17.2.4, react-use@npm:^17.3.1, react-use@npm:^17.3.2, react-use@npm:^17.4.0": +"react-use@npm:^17.2.4, react-use@npm:^17.3.1, react-use@npm:^17.3.2, react-use@npm:^17.4.0, react-use@npm:^17.5.0": version: 17.5.0 resolution: "react-use@npm:17.5.0" dependencies: