Skip to content

Commit 5fef113

Browse files
authoredSep 11, 2024··
Merge pull request #141 from scalprum/api-updates
fix(core): ensure scalprum instance receives configuration updates
2 parents c4117fd + 9caf092 commit 5fef113

File tree

8 files changed

+76
-6
lines changed

8 files changed

+76
-6
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
describe('Scalprum API', () => {
2+
beforeEach(() => {
3+
cy.handleMetaError();
4+
});
5+
6+
it('should display values from scalprum API', () => {
7+
cy.visit('http://localhost:4200/api');
8+
cy.contains('API consumer isBeta: false').should('exist');
9+
});
10+
11+
it('should update isBeta value', () => {
12+
cy.visit('http://localhost:4200/api');
13+
cy.contains('API consumer isBeta: false').should('exist');
14+
cy.contains('Toggle isBeta').click();
15+
cy.contains('API consumer isBeta: true').should('exist');
16+
});
17+
});

‎examples/test-app/src/entry.tsx

+13-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { useMemo } from 'react';
22
import { ScalprumProvider } from '@scalprum/react-core';
33
import { BrowserRouter, Route, Routes } from 'react-router-dom';
44
import RuntimeErrorRoute from './routes/RuntimeErrorRoute';
@@ -9,6 +9,7 @@ import SDKModules from './routes/SDKModules';
99
import NotFoundError from './routes/NotFoundError';
1010
import { AppsConfig } from '@scalprum/core';
1111
import UseModuleLoading from './routes/UseModuleLoading';
12+
import ApiUpdates from './routes/ApiUpdates';
1213

1314
const config: AppsConfig<{ assetsHost?: string }> = {
1415
notFound: {
@@ -36,6 +37,15 @@ const config: AppsConfig<{ assetsHost?: string }> = {
3637
};
3738

3839
const Entry = () => {
40+
const [isBeta, setIsBeta] = React.useState(false);
41+
const chromeApi = useMemo(
42+
() => ({
43+
foo: 'bar',
44+
isBeta: () => isBeta,
45+
setIsBeta,
46+
}),
47+
[isBeta, setIsBeta],
48+
);
3949
return (
4050
<ScalprumProvider
4151
pluginSDKOptions={{
@@ -56,10 +66,7 @@ const Entry = () => {
5666
},
5767
}}
5868
api={{
59-
chrome: {
60-
foo: 'bar',
61-
isBeta: () => true,
62-
},
69+
chrome: chromeApi,
6370
}}
6471
config={config}
6572
>
@@ -72,6 +79,7 @@ const Entry = () => {
7279
<Route path="/legacy" element={<LegacyModules />} />
7380
<Route path="/sdk" element={<SDKModules />} />
7481
<Route path="/use-module" element={<UseModuleLoading />} />
82+
<Route path="/api" element={<ApiUpdates />} />
7583
</Route>
7684
</Routes>
7785
</BrowserRouter>

‎examples/test-app/src/layouts/RootLayout.tsx

+3
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ function RootLayout() {
3737
<NavLink variant="button" color="text.primary" to="/use-module" sx={{ my: 1, mx: 1.5 }}>
3838
Use module hook
3939
</NavLink>
40+
<NavLink variant="button" color="text.primary" to="/api" sx={{ my: 1, mx: 1.5 }}>
41+
API updates
42+
</NavLink>
4043
</nav>
4144
</Toolbar>
4245
</AppBar>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { Box, Typography } from '@mui/material';
2+
import { ScalprumComponent } from '@scalprum/react-core';
3+
4+
const ApiUpdates = () => {
5+
return (
6+
<Box>
7+
<Typography variant="h4">API Updates</Typography>
8+
<Box sx={{ display: 'flex', justifyContent: 'space-between' }}>
9+
<Box>
10+
<ScalprumComponent module="./ApiModule" scope="sdk-plugin" importName="ApiConsumer" />
11+
</Box>
12+
<Box>
13+
<ScalprumComponent module="./ApiModule" scope="sdk-plugin" importName="ApiChanger" />
14+
</Box>
15+
</Box>
16+
</Box>
17+
);
18+
};
19+
20+
export default ApiUpdates;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import React from 'react';
2+
import { useScalprum } from '@scalprum/react-core';
3+
4+
export const ApiConsumer = () => {
5+
const { api } = useScalprum();
6+
return <div>API consumer isBeta: {`${api.chrome.isBeta()}`}</div>;
7+
}
8+
9+
export const ApiChanger = () => {
10+
const { api } = useScalprum();
11+
return <div>API changer: <button onClick={() => api.chrome.setIsBeta((prev) => !prev)}>Toggle isBeta</button></div>;
12+
}

‎federation-cdn-mock/webpack.config.js

+1
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ const TestSDKPlugin = new DynamicRemotePlugin({
4949
'./ModuleThree': resolve(__dirname, './src/modules/moduleThree.tsx'),
5050
'./ModuleFour': resolve(__dirname, './src/modules/moduleFour.tsx'),
5151
'./SDKComponent': resolve(__dirname, './src/modules/SDKComponent.tsx'),
52+
'./ApiModule': resolve(__dirname, './src/modules/apiModule.tsx'),
5253
},
5354
},
5455
});

‎packages/core/src/index.ts

+7
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,13 @@ export const initialize = <T extends Record<string, any> = Record<string, any>>(
217217
pluginStoreOptions?: PluginStoreOptions;
218218
}): Scalprum<T> => {
219219
if (scalprum) {
220+
scalprum.api = api || {};
221+
scalprum.appsConfig = appsConfig;
222+
scalprum.scalprumOptions = {
223+
...scalprum.scalprumOptions,
224+
...options,
225+
};
226+
scalprum.pluginStore.setFeatureFlags(pluginStoreFeatureFlags);
220227
return scalprum as Scalprum<T>;
221228
}
222229
const defaultOptions: ScalprumOptions = {

‎packages/react-core/src/scalprum-provider.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,9 @@ export function ScalprumProvider<T extends Record<string, any> = Record<string,
6868
transformPluginManifest: internalTransformPluginManifest,
6969
},
7070
});
71-
}, []);
71+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
72+
// @ts-ignore
73+
}, [props.api, props.config, props.scalprum]);
7274

7375
return (
7476
<ScalprumContext.Provider

0 commit comments

Comments
 (0)
Please sign in to comment.