diff --git a/examples/test-app-e2e/src/e2e/test-app/scalprum-api.cy.ts b/examples/test-app-e2e/src/e2e/test-app/scalprum-api.cy.ts new file mode 100644 index 0000000..c9346e0 --- /dev/null +++ b/examples/test-app-e2e/src/e2e/test-app/scalprum-api.cy.ts @@ -0,0 +1,17 @@ +describe('Scalprum API', () => { + beforeEach(() => { + cy.handleMetaError(); + }); + + it('should display values from scalprum API', () => { + cy.visit('http://localhost:4200/api'); + cy.contains('API consumer isBeta: false').should('exist'); + }); + + it('should update isBeta value', () => { + cy.visit('http://localhost:4200/api'); + cy.contains('API consumer isBeta: false').should('exist'); + cy.contains('Toggle isBeta').click(); + cy.contains('API consumer isBeta: true').should('exist'); + }); +}); diff --git a/examples/test-app/src/entry.tsx b/examples/test-app/src/entry.tsx index c783ad6..f41eab6 100644 --- a/examples/test-app/src/entry.tsx +++ b/examples/test-app/src/entry.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useMemo } from 'react'; import { ScalprumProvider } from '@scalprum/react-core'; import { BrowserRouter, Route, Routes } from 'react-router-dom'; import RuntimeErrorRoute from './routes/RuntimeErrorRoute'; @@ -9,6 +9,7 @@ import SDKModules from './routes/SDKModules'; import NotFoundError from './routes/NotFoundError'; import { AppsConfig } from '@scalprum/core'; import UseModuleLoading from './routes/UseModuleLoading'; +import ApiUpdates from './routes/ApiUpdates'; const config: AppsConfig<{ assetsHost?: string }> = { notFound: { @@ -36,6 +37,15 @@ const config: AppsConfig<{ assetsHost?: string }> = { }; const Entry = () => { + const [isBeta, setIsBeta] = React.useState(false); + const chromeApi = useMemo( + () => ({ + foo: 'bar', + isBeta: () => isBeta, + setIsBeta, + }), + [isBeta, setIsBeta], + ); return ( { }, }} api={{ - chrome: { - foo: 'bar', - isBeta: () => true, - }, + chrome: chromeApi, }} config={config} > @@ -72,6 +79,7 @@ const Entry = () => { } /> } /> } /> + } /> diff --git a/examples/test-app/src/layouts/RootLayout.tsx b/examples/test-app/src/layouts/RootLayout.tsx index 764488d..98f3c8e 100644 --- a/examples/test-app/src/layouts/RootLayout.tsx +++ b/examples/test-app/src/layouts/RootLayout.tsx @@ -37,6 +37,9 @@ function RootLayout() { Use module hook + + API updates + diff --git a/examples/test-app/src/routes/ApiUpdates.tsx b/examples/test-app/src/routes/ApiUpdates.tsx new file mode 100644 index 0000000..6b9a83b --- /dev/null +++ b/examples/test-app/src/routes/ApiUpdates.tsx @@ -0,0 +1,20 @@ +import { Box, Typography } from '@mui/material'; +import { ScalprumComponent } from '@scalprum/react-core'; + +const ApiUpdates = () => { + return ( + + API Updates + + + + + + + + + + ); +}; + +export default ApiUpdates; diff --git a/federation-cdn-mock/src/modules/apiModule.tsx b/federation-cdn-mock/src/modules/apiModule.tsx new file mode 100644 index 0000000..6934ed5 --- /dev/null +++ b/federation-cdn-mock/src/modules/apiModule.tsx @@ -0,0 +1,12 @@ +import React from 'react'; +import { useScalprum } from '@scalprum/react-core'; + +export const ApiConsumer = () => { + const { api } = useScalprum(); + return
API consumer isBeta: {`${api.chrome.isBeta()}`}
; +} + +export const ApiChanger = () => { + const { api } = useScalprum(); + return
API changer:
; +} diff --git a/federation-cdn-mock/webpack.config.js b/federation-cdn-mock/webpack.config.js index ea28920..08b99f4 100644 --- a/federation-cdn-mock/webpack.config.js +++ b/federation-cdn-mock/webpack.config.js @@ -49,6 +49,7 @@ const TestSDKPlugin = new DynamicRemotePlugin({ './ModuleThree': resolve(__dirname, './src/modules/moduleThree.tsx'), './ModuleFour': resolve(__dirname, './src/modules/moduleFour.tsx'), './SDKComponent': resolve(__dirname, './src/modules/SDKComponent.tsx'), + './ApiModule': resolve(__dirname, './src/modules/apiModule.tsx'), }, }, }); diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index fbf3a5f..243f6b6 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -217,6 +217,13 @@ export const initialize = = Record>( pluginStoreOptions?: PluginStoreOptions; }): Scalprum => { if (scalprum) { + scalprum.api = api || {}; + scalprum.appsConfig = appsConfig; + scalprum.scalprumOptions = { + ...scalprum.scalprumOptions, + ...options, + }; + scalprum.pluginStore.setFeatureFlags(pluginStoreFeatureFlags); return scalprum as Scalprum; } const defaultOptions: ScalprumOptions = { diff --git a/packages/react-core/src/scalprum-provider.tsx b/packages/react-core/src/scalprum-provider.tsx index afc78dc..dbac19d 100644 --- a/packages/react-core/src/scalprum-provider.tsx +++ b/packages/react-core/src/scalprum-provider.tsx @@ -68,7 +68,9 @@ export function ScalprumProvider = Record