@forge/react 10.11.1 → 11.0.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @forge/react
2
2
 
3
+ ## 11.0.0-next.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 1e241ea: Fix UI Kit Form onSubmit return type
8
+
9
+ ## 11.0.0-next.0
10
+
11
+ ### Major Changes
12
+
13
+ - 4686344: Improve useConfig hook so it reflects value properly on macro config updates
14
+
3
15
  ## 10.11.1
4
16
 
5
17
  ### Patch Changes
@@ -2,6 +2,23 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const listeners = new Map();
6
+ const simpleBridgeEvents = {
7
+ on: (event, callback) => {
8
+ if (!listeners.has(event)) {
9
+ listeners.set(event, []);
10
+ }
11
+ listeners.get(event)?.push(callback);
12
+ },
13
+ emit: (event, data) => {
14
+ if (listeners.has(event)) {
15
+ listeners.get(event)?.forEach((callback) => callback(data));
16
+ }
17
+ },
18
+ clearListeners: (event) => {
19
+ listeners.delete(event);
20
+ }
21
+ };
5
22
  // defining mock function above import so it is initialised before jest.mock runs
6
23
  const mockGetContext = jest.fn(async () => null);
7
24
  const react_1 = tslib_1.__importStar(require("react"));
@@ -11,7 +28,8 @@ const testUtils_1 = require("../../__test__/testUtils");
11
28
  jest.mock('@forge/bridge', () => ({
12
29
  view: {
13
30
  getContext: mockGetContext
14
- }
31
+ },
32
+ events: simpleBridgeEvents
15
33
  }));
16
34
  const MOCK_CONFIG = {
17
35
  value: 1
@@ -32,10 +50,16 @@ const renderTest = async () => {
32
50
  (0, react_1.useEffect)(() => configListener(config), [config]);
33
51
  return (0, jsx_runtime_1.jsx)(react_1.default.Fragment, {});
34
52
  };
35
- await reconcilerTestRenderer_1.default.create((0, jsx_runtime_1.jsx)(Test, {}));
53
+ const { update } = await reconcilerTestRenderer_1.default.create((0, jsx_runtime_1.jsx)(Test, {}));
54
+ return {
55
+ update: async () => {
56
+ await update((0, jsx_runtime_1.jsx)(Test, {}));
57
+ }
58
+ };
36
59
  };
37
60
  describe('useConfig', () => {
38
61
  beforeAll(() => (0, testUtils_1.setupBridge)());
62
+ beforeEach(() => simpleBridgeEvents.clearListeners('FORGE_CORE_MACRO_CONFIG_CHANGED'));
39
63
  afterEach(() => jest.clearAllMocks());
40
64
  it('correctly outputs a given config', async () => {
41
65
  mockGetContext.mockResolvedValue(MOCK_CONTEXT_WITH_CONFIG);
@@ -49,4 +73,12 @@ describe('useConfig', () => {
49
73
  // no change to undef value after productContext call, do not re-render
50
74
  expect(configListener).not.toHaveBeenNthCalledWith(2, expect.anything);
51
75
  });
76
+ it('when config is updated, outputs new config', async () => {
77
+ mockGetContext.mockResolvedValue(MOCK_CONTEXT_WITH_CONFIG);
78
+ await renderTest();
79
+ expect(mockGetContext).toHaveBeenCalledTimes(1);
80
+ const newConfig = { value: 2 };
81
+ simpleBridgeEvents.emit('FORGE_CORE_MACRO_CONFIG_CHANGED', newConfig);
82
+ expect(mockGetContext).toHaveBeenCalledTimes(2);
83
+ });
52
84
  });
@@ -1 +1 @@
1
- {"version":3,"file":"useConfig.d.ts","sourceRoot":"","sources":["../../src/hooks/useConfig.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,WAGrB,CAAC"}
1
+ {"version":3,"file":"useConfig.d.ts","sourceRoot":"","sources":["../../src/hooks/useConfig.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,SAAS,WAiBrB,CAAC"}
@@ -1,9 +1,31 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.useConfig = void 0;
4
- const useProductContext_1 = require("./useProductContext");
4
+ const react_1 = require("react");
5
+ const bridge_1 = require("@forge/bridge");
6
+ const updateConfig = (setConfig) => {
7
+ bridge_1.view
8
+ .getContext()
9
+ .then((context) => {
10
+ setConfig(context?.extension.config);
11
+ })
12
+ .catch((err) => {
13
+ throw err;
14
+ });
15
+ };
5
16
  const useConfig = () => {
6
- const context = (0, useProductContext_1.useProductContext)();
7
- return context?.extension.config;
17
+ const [config, setConfig] = (0, react_1.useState)(undefined);
18
+ (0, react_1.useEffect)(() => {
19
+ updateConfig(setConfig);
20
+ }, []);
21
+ (0, react_1.useEffect)(() => {
22
+ const sub = bridge_1.events.on('FORGE_CORE_MACRO_CONFIG_CHANGED', () => {
23
+ updateConfig(setConfig);
24
+ });
25
+ return () => {
26
+ void sub.then((subscription) => subscription.unsubscribe());
27
+ };
28
+ }, []);
29
+ return config;
8
30
  };
9
31
  exports.useConfig = useConfig;
package/out/reconciler.js CHANGED
@@ -218,7 +218,7 @@ exports.hostConfig = {
218
218
  const reconciler = (0, react_reconciler_1.default)(exports.hostConfig);
219
219
  exports.ForgeReconciler = {
220
220
  render: (element) => {
221
- const rootElement = (0, exports.createElement)({ type: 'Root', props: {}, forgeReactMajorVersion: 10 });
221
+ const rootElement = (0, exports.createElement)({ type: 'Root', props: {}, forgeReactMajorVersion: 11 });
222
222
  const container = reconciler.createContainer(rootElement, 0, null, false, null, 'root', (err) => {
223
223
  // eslint-disable-next-line no-console
224
224
  console.log(err);
@@ -233,7 +233,7 @@ exports.ForgeReconciler = {
233
233
  }
234
234
  },
235
235
  addConfig: (element) => {
236
- const macroConfigElement = (0, exports.createElement)({ type: 'MacroConfig', props: {}, forgeReactMajorVersion: 10 });
236
+ const macroConfigElement = (0, exports.createElement)({ type: 'MacroConfig', props: {}, forgeReactMajorVersion: 11 });
237
237
  const container = reconciler.createContainer(macroConfigElement, 0, null, false, null, 'macroConfig', (err) => {
238
238
  // eslint-disable-next-line no-console
239
239
  console.log(err);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forge/react",
3
- "version": "10.11.1",
3
+ "version": "11.0.0-next.1",
4
4
  "description": "Forge React reconciler",
5
5
  "author": "Atlassian",
6
6
  "license": "SEE LICENSE IN LICENSE.txt",
@@ -19,7 +19,7 @@
19
19
  "dependencies": {
20
20
  "@atlaskit/adf-schema": "^46.0.0",
21
21
  "@atlaskit/adf-utils": "^19.12.0",
22
- "@atlaskit/forge-react-types": "^0.35.6",
22
+ "@atlaskit/forge-react-types": "^0.35.12",
23
23
  "@forge/bridge": "^4.4.1",
24
24
  "@forge/i18n": "0.0.3",
25
25
  "@types/react-reconciler": "^0.28.8",