@gravity-ui/dashkit 10.4.2 → 10.4.3
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/build/cjs/components/DashKit/__tests__/controlled-layout.test.js +68 -4
- package/build/cjs/components/DashKit/__tests__/controlled-layout.test.js.map +1 -1
- package/build/cjs/hocs/withContext.js +35 -13
- package/build/cjs/hocs/withContext.js.map +1 -1
- package/build/cjs/package.json +1 -1
- package/build/esm/components/DashKit/__tests__/controlled-layout.test.js +69 -5
- package/build/esm/components/DashKit/__tests__/controlled-layout.test.js.map +1 -1
- package/build/esm/hocs/withContext.js +35 -13
- package/build/esm/hocs/withContext.js.map +1 -1
- package/build/esm/package.json +1 -1
- package/package.json +1 -1
|
@@ -28,11 +28,11 @@ const withContext_1 = require("../../../hocs/withContext.js");
|
|
|
28
28
|
const utils_1 = require("../../../utils/index.js");
|
|
29
29
|
const DashKit_1 = require("../DashKit.js");
|
|
30
30
|
const PLUGIN_TYPE = 'controlled-layout-test';
|
|
31
|
-
const createConfig = (x) => ({
|
|
31
|
+
const createConfig = (x, itemIds = ['item1']) => ({
|
|
32
32
|
salt: 'test',
|
|
33
33
|
counter: 1,
|
|
34
|
-
items:
|
|
35
|
-
layout:
|
|
34
|
+
items: itemIds.map((id) => ({ id, type: PLUGIN_TYPE, namespace: 'default', data: {} })),
|
|
35
|
+
layout: itemIds.map((i) => ({ i, x, y: 0, w: 2, h: 2 })),
|
|
36
36
|
aliases: {},
|
|
37
37
|
connections: [],
|
|
38
38
|
});
|
|
@@ -66,14 +66,78 @@ const createProps = ({ config, emitDashKitEvent, onChange = jest.fn(), }) => {
|
|
|
66
66
|
};
|
|
67
67
|
};
|
|
68
68
|
let captured = {};
|
|
69
|
+
let capturedControlsContext;
|
|
70
|
+
let renderedItemIds = [];
|
|
71
|
+
let layoutEffectAction;
|
|
69
72
|
const ContextCapture = () => {
|
|
70
|
-
|
|
73
|
+
const dashkitContext = react_1.default.useContext(context_1.DashKitContext);
|
|
74
|
+
const controlsContext = react_1.default.useContext(context_1.DashkitOverlayControlsContext);
|
|
75
|
+
captured = dashkitContext;
|
|
76
|
+
capturedControlsContext = controlsContext || undefined;
|
|
77
|
+
renderedItemIds.push({
|
|
78
|
+
config: captured.configItems.map(({ id }) => id),
|
|
79
|
+
layout: captured.layout.map(({ i }) => i),
|
|
80
|
+
});
|
|
81
|
+
react_1.default.useLayoutEffect(() => {
|
|
82
|
+
layoutEffectAction === null || layoutEffectAction === void 0 ? void 0 : layoutEffectAction(dashkitContext, controlsContext || undefined);
|
|
83
|
+
}, [controlsContext, dashkitContext]);
|
|
71
84
|
return null;
|
|
72
85
|
};
|
|
73
86
|
const TestComponent = (0, withContext_1.withContext)(ContextCapture);
|
|
74
87
|
describe('DashKit controlled layout strategy', () => {
|
|
75
88
|
beforeEach(() => {
|
|
76
89
|
captured = {};
|
|
90
|
+
capturedControlsContext = undefined;
|
|
91
|
+
renderedItemIds = [];
|
|
92
|
+
layoutEffectAction = undefined;
|
|
93
|
+
});
|
|
94
|
+
it('updates visual layout in same render as externally added config item', () => {
|
|
95
|
+
const initialConfig = createConfig(0);
|
|
96
|
+
const externalConfig = createConfig(3, ['item1', 'item2']);
|
|
97
|
+
const dashkit = new DashKit_1.DashKit(DashKit_1.DashKit.defaultProps);
|
|
98
|
+
const { rerender } = (0, react_2.render)(react_1.default.createElement(TestComponent, Object.assign({}, createProps({ config: initialConfig, emitDashKitEvent: dashkit[DashKit_1._emitSymbol] }))));
|
|
99
|
+
(0, react_2.act)(() => {
|
|
100
|
+
rerender(react_1.default.createElement(TestComponent, Object.assign({}, createProps({
|
|
101
|
+
config: externalConfig,
|
|
102
|
+
emitDashKitEvent: dashkit[DashKit_1._emitSymbol],
|
|
103
|
+
}))));
|
|
104
|
+
});
|
|
105
|
+
expect(renderedItemIds).toEqual(expect.arrayContaining([
|
|
106
|
+
{ config: ['item1'], layout: ['item1'] },
|
|
107
|
+
{ config: ['item1', 'item2'], layout: ['item1', 'item2'] },
|
|
108
|
+
]));
|
|
109
|
+
expect(renderedItemIds.every(({ config, layout }) => config.join(',') === layout.join(','))).toBe(true);
|
|
110
|
+
});
|
|
111
|
+
it('uses external baseline in child layout effect', () => {
|
|
112
|
+
const initialConfig = createConfig(0);
|
|
113
|
+
const externalConfig = createConfig(3, ['item1', 'item2']);
|
|
114
|
+
const nextLayout = [
|
|
115
|
+
{ i: 'item1', x: 4, y: 0, w: 2, h: 2 },
|
|
116
|
+
externalConfig.layout[1],
|
|
117
|
+
];
|
|
118
|
+
const dashkit = new DashKit_1.DashKit(DashKit_1.DashKit.defaultProps);
|
|
119
|
+
const onEventChange = jest.fn();
|
|
120
|
+
let layoutItemInLayoutEffect;
|
|
121
|
+
let layoutItemAfterLayoutChange;
|
|
122
|
+
dashkit.on('change', onEventChange);
|
|
123
|
+
const { rerender } = (0, react_2.render)(react_1.default.createElement(TestComponent, Object.assign({}, createProps({ config: initialConfig, emitDashKitEvent: dashkit[DashKit_1._emitSymbol] }))));
|
|
124
|
+
layoutEffectAction = (dashkitContext, controlsContext) => {
|
|
125
|
+
layoutEffectAction = undefined;
|
|
126
|
+
layoutItemInLayoutEffect = (controlsContext === null || controlsContext === void 0 ? void 0 : controlsContext.getLayoutItem('item2')) || undefined;
|
|
127
|
+
dashkitContext.layoutChange(nextLayout);
|
|
128
|
+
layoutItemAfterLayoutChange = (controlsContext === null || controlsContext === void 0 ? void 0 : controlsContext.getLayoutItem('item1')) || undefined;
|
|
129
|
+
};
|
|
130
|
+
(0, react_2.act)(() => {
|
|
131
|
+
rerender(react_1.default.createElement(TestComponent, Object.assign({}, createProps({
|
|
132
|
+
config: externalConfig,
|
|
133
|
+
emitDashKitEvent: dashkit[DashKit_1._emitSymbol],
|
|
134
|
+
}))));
|
|
135
|
+
});
|
|
136
|
+
expect(layoutItemInLayoutEffect).toMatchObject(externalConfig.layout[1]);
|
|
137
|
+
expect(onEventChange).toHaveBeenCalledTimes(1);
|
|
138
|
+
expect(onEventChange.mock.calls[0][0].previousLayout).toMatchObject(externalConfig.layout);
|
|
139
|
+
expect(layoutItemAfterLayoutChange).toMatchObject(nextLayout[0]);
|
|
140
|
+
expect(capturedControlsContext === null || capturedControlsContext === void 0 ? void 0 : capturedControlsContext.getLayoutItem('item1')).toMatchObject(nextLayout[0]);
|
|
77
141
|
});
|
|
78
142
|
it('Case 1: keeps internal layout after change event without config update, then applies external config update', () => {
|
|
79
143
|
const initialConfig = createConfig(0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controlled-layout.test.js","sourceRoot":"../../../../../src","sources":["components/DashKit/__tests__/controlled-layout.test.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * @jest-environment jsdom\n */\n\njest.mock('@gravity-ui/icons', () => ({\n Ellipsis: 'ellipsis',\n Gear: 'gear',\n Xmark: 'xmark',\n}));\n\njest.mock('@gravity-ui/uikit', () => {\n const ReactMock = require('react');\n\n return {\n Button: ({children}: {children?: unknown}) =>\n ReactMock.createElement('button', null, children),\n DropdownMenu: () => null,\n Icon: () => null,\n };\n});\n\njest.mock('../../GridLayout/GridLayout', () => {\n const ReactMock = require('react');\n\n return ReactMock.forwardRef(() => null);\n});\n\nimport React from 'react';\n\nimport {act, render} from '@testing-library/react';\n\nimport {DashKitContext, type DashKitCtxShape} from '../../../context';\nimport {type DashKitWithContextProps, withContext} from '../../../hocs/withContext';\nimport type {Config} from '../../../shared';\nimport {RegisterManager} from '../../../utils';\nimport {DashKit, _emitSymbol} from '../DashKit';\n\nconst PLUGIN_TYPE = 'controlled-layout-test';\n\nconst createConfig = (x: number): Config => ({\n salt: 'test',\n counter: 1,\n items: [{id: 'item1', type: PLUGIN_TYPE, namespace: 'default', data: {}}],\n layout: [{i: 'item1', x, y: 0, w: 2, h: 2}],\n aliases: {},\n connections: [],\n});\n\nconst createProps = ({\n config,\n emitDashKitEvent,\n onChange = jest.fn(),\n}: {\n config: Config;\n emitDashKitEvent: DashKitWithContextProps['emitDashKitEvent'];\n onChange?: jest.Mock;\n}) => {\n const registerManager = new RegisterManager();\n registerManager.registerPlugin({\n type: PLUGIN_TYPE,\n defaultLayout: {x: 0, y: 0, w: 2, h: 2},\n renderer: () => null,\n });\n\n return {\n config,\n editMode: true,\n layout: config.layout,\n registerManager,\n forwardedMetaRef: React.createRef(),\n emitDashKitEvent,\n itemsStateAndParams: {},\n defaultGlobalParams: {},\n globalParams: {},\n context: {},\n settings: {\n autoupdateInterval: 0,\n silentLoading: false,\n },\n noOverlay: false,\n focusable: false,\n onItemEdit: jest.fn(),\n onChange,\n onDrop: jest.fn(),\n };\n};\n\nlet captured: DashKitCtxShape = {} as DashKitCtxShape;\n\nconst ContextCapture = () => {\n captured = React.useContext(DashKitContext);\n return null;\n};\n\nconst TestComponent = withContext(ContextCapture);\n\ndescribe('DashKit controlled layout strategy', () => {\n beforeEach(() => {\n captured = {} as DashKitCtxShape;\n });\n\n it('Case 1: keeps internal layout after change event without config update, then applies external config update', () => {\n const initialConfig = createConfig(0);\n const nextInternalLayout: Config['layout'] = [{i: 'item1', x: 1, y: 0, w: 2, h: 2}];\n const externalConfig = createConfig(3);\n const dashkit = new DashKit(\n DashKit.defaultProps as unknown as ConstructorParameters<typeof DashKit>[0],\n );\n const onChange = jest.fn();\n const onEventChange = jest.fn();\n\n dashkit.on('change', onEventChange);\n\n const {rerender} = render(\n <TestComponent\n {...createProps({\n config: initialConfig,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n\n // Layout is now enriched with plugin defaults (minW, minH, etc)\n expect(captured.layout).toMatchObject(initialConfig.layout);\n expect(captured.layout[0]).toHaveProperty('minW');\n expect(captured.layout[0]).toHaveProperty('minH');\n\n act(() => {\n captured.layoutChange(nextInternalLayout);\n });\n\n // Verify that change event was fired with correct layout\n expect(onEventChange).toHaveBeenCalledTimes(1);\n expect(onEventChange.mock.calls[0][0].layout).toEqual(nextInternalLayout);\n expect(onChange).toHaveBeenCalledTimes(1);\n\n // Now apply external config update\n act(() => {\n rerender(\n <TestComponent\n {...createProps({\n config: externalConfig,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n });\n\n // External props should win and layout should be updated\n expect(captured.layout).toMatchObject(externalConfig.layout);\n });\n\n it('Case 2: uses on(change) without updating props - internal state persists', () => {\n const initialConfig = createConfig(0);\n const nextInternalLayout: Config['layout'] = [{i: 'item1', x: 5, y: 0, w: 2, h: 2}];\n const dashkit = new DashKit(\n DashKit.defaultProps as unknown as ConstructorParameters<typeof DashKit>[0],\n );\n const onChange = jest.fn();\n const onEventChange = jest.fn();\n const capturedLayouts: Config['layout'][] = [];\n\n // Listen to change event but DON'T update props\n dashkit.on('change', (event) => {\n capturedLayouts.push(event.layout);\n onEventChange(event);\n });\n\n const {rerender} = render(\n <TestComponent\n {...createProps({\n config: initialConfig,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n\n // Initial layout should be enriched\n expect(captured.layout).toMatchObject(initialConfig.layout);\n\n // Trigger layout change\n act(() => {\n captured.layoutChange(nextInternalLayout);\n });\n\n // Event should fire with new layout\n expect(onEventChange).toHaveBeenCalledTimes(1);\n expect(capturedLayouts[0]).toEqual(nextInternalLayout);\n\n // onChange callback fires (consumer COULD update props here, but doesn't in this case)\n expect(onChange).toHaveBeenCalledTimes(1);\n\n // Props remain unchanged - simulating consumer NOT updating props\n act(() => {\n rerender(\n <TestComponent\n {...createProps({\n config: initialConfig,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n });\n\n // Layout should still reflect the change (internal state wins)\n // Note: we verify the event fired correctly\n expect(onEventChange).toHaveBeenCalledTimes(1);\n expect(capturedLayouts[0]).toMatchObject(nextInternalLayout);\n });\n\n it('Case 3: alternates between props.layout updates and on(change) events', () => {\n const config1 = createConfig(0);\n const config2 = createConfig(2);\n const internalChange: Config['layout'] = [{i: 'item1', x: 5, y: 0, w: 2, h: 2}];\n const config3 = createConfig(8);\n\n const dashkit = new DashKit(\n DashKit.defaultProps as unknown as ConstructorParameters<typeof DashKit>[0],\n );\n const onChange = jest.fn();\n const onEventChange = jest.fn();\n\n dashkit.on('change', onEventChange);\n\n const {rerender} = render(\n <TestComponent\n {...createProps({\n config: config1,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n\n // Start with config1\n expect(captured.layout).toMatchObject(config1.layout);\n\n // Update via props (external update)\n act(() => {\n rerender(\n <TestComponent\n {...createProps({\n config: config2,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n });\n expect(captured.layout).toMatchObject(config2.layout);\n\n // Update via internal change (user drag)\n act(() => {\n captured.layoutChange(internalChange);\n });\n expect(onEventChange).toHaveBeenCalledTimes(1);\n expect(onEventChange.mock.calls[0][0].layout).toEqual(internalChange);\n\n // Update via props again (external update wins)\n act(() => {\n rerender(\n <TestComponent\n {...createProps({\n config: config3,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n });\n expect(captured.layout).toMatchObject(config3.layout);\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"controlled-layout.test.js","sourceRoot":"../../../../../src","sources":["components/DashKit/__tests__/controlled-layout.test.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * @jest-environment jsdom\n */\n\njest.mock('@gravity-ui/icons', () => ({\n Ellipsis: 'ellipsis',\n Gear: 'gear',\n Xmark: 'xmark',\n}));\n\njest.mock('@gravity-ui/uikit', () => {\n const ReactMock = require('react');\n\n return {\n Button: ({children}: {children?: unknown}) =>\n ReactMock.createElement('button', null, children),\n DropdownMenu: () => null,\n Icon: () => null,\n };\n});\n\njest.mock('../../GridLayout/GridLayout', () => {\n const ReactMock = require('react');\n\n return ReactMock.forwardRef(() => null);\n});\n\nimport React from 'react';\n\nimport {act, render} from '@testing-library/react';\n\nimport {DashKitContext, DashkitOverlayControlsContext} from '../../../context';\nimport type {DashKitCtxShape, OverlayControlsCtxShape} from '../../../context';\nimport {type DashKitWithContextProps, withContext} from '../../../hocs/withContext';\nimport type {Config} from '../../../shared';\nimport {RegisterManager} from '../../../utils';\nimport {DashKit, _emitSymbol} from '../DashKit';\n\nconst PLUGIN_TYPE = 'controlled-layout-test';\n\nconst createConfig = (x: number, itemIds = ['item1']): Config => ({\n salt: 'test',\n counter: 1,\n items: itemIds.map((id) => ({id, type: PLUGIN_TYPE, namespace: 'default', data: {}})),\n layout: itemIds.map((i) => ({i, x, y: 0, w: 2, h: 2})),\n aliases: {},\n connections: [],\n});\n\nconst createProps = ({\n config,\n emitDashKitEvent,\n onChange = jest.fn(),\n}: {\n config: Config;\n emitDashKitEvent: DashKitWithContextProps['emitDashKitEvent'];\n onChange?: jest.Mock;\n}) => {\n const registerManager = new RegisterManager();\n registerManager.registerPlugin({\n type: PLUGIN_TYPE,\n defaultLayout: {x: 0, y: 0, w: 2, h: 2},\n renderer: () => null,\n });\n\n return {\n config,\n editMode: true,\n layout: config.layout,\n registerManager,\n forwardedMetaRef: React.createRef(),\n emitDashKitEvent,\n itemsStateAndParams: {},\n defaultGlobalParams: {},\n globalParams: {},\n context: {},\n settings: {\n autoupdateInterval: 0,\n silentLoading: false,\n },\n noOverlay: false,\n focusable: false,\n onItemEdit: jest.fn(),\n onChange,\n onDrop: jest.fn(),\n };\n};\n\nlet captured: DashKitCtxShape = {} as DashKitCtxShape;\nlet capturedControlsContext: OverlayControlsCtxShape | undefined;\nlet renderedItemIds: Array<{config: string[]; layout: string[]}> = [];\nlet layoutEffectAction:\n | ((\n dashkitContext: DashKitCtxShape,\n controlsContext: OverlayControlsCtxShape | undefined,\n ) => void)\n | undefined;\n\nconst ContextCapture = () => {\n const dashkitContext = React.useContext(DashKitContext);\n const controlsContext = React.useContext(DashkitOverlayControlsContext);\n\n captured = dashkitContext;\n capturedControlsContext = controlsContext || undefined;\n renderedItemIds.push({\n config: captured.configItems.map(({id}) => id),\n layout: captured.layout.map(({i}) => i),\n });\n\n React.useLayoutEffect(() => {\n layoutEffectAction?.(dashkitContext, controlsContext || undefined);\n }, [controlsContext, dashkitContext]);\n\n return null;\n};\n\nconst TestComponent = withContext(ContextCapture);\n\ndescribe('DashKit controlled layout strategy', () => {\n beforeEach(() => {\n captured = {} as DashKitCtxShape;\n capturedControlsContext = undefined;\n renderedItemIds = [];\n layoutEffectAction = undefined;\n });\n\n it('updates visual layout in same render as externally added config item', () => {\n const initialConfig = createConfig(0);\n const externalConfig = createConfig(3, ['item1', 'item2']);\n const dashkit = new DashKit(\n DashKit.defaultProps as unknown as ConstructorParameters<typeof DashKit>[0],\n );\n\n const {rerender} = render(\n <TestComponent\n {...createProps({config: initialConfig, emitDashKitEvent: dashkit[_emitSymbol]})}\n />,\n );\n\n act(() => {\n rerender(\n <TestComponent\n {...createProps({\n config: externalConfig,\n emitDashKitEvent: dashkit[_emitSymbol],\n })}\n />,\n );\n });\n\n expect(renderedItemIds).toEqual(\n expect.arrayContaining([\n {config: ['item1'], layout: ['item1']},\n {config: ['item1', 'item2'], layout: ['item1', 'item2']},\n ]),\n );\n expect(\n renderedItemIds.every(({config, layout}) => config.join(',') === layout.join(',')),\n ).toBe(true);\n });\n\n it('uses external baseline in child layout effect', () => {\n const initialConfig = createConfig(0);\n const externalConfig = createConfig(3, ['item1', 'item2']);\n const nextLayout: Config['layout'] = [\n {i: 'item1', x: 4, y: 0, w: 2, h: 2},\n externalConfig.layout[1],\n ];\n const dashkit = new DashKit(\n DashKit.defaultProps as unknown as ConstructorParameters<typeof DashKit>[0],\n );\n const onEventChange = jest.fn();\n let layoutItemInLayoutEffect: Config['layout'][number] | undefined;\n let layoutItemAfterLayoutChange: Config['layout'][number] | undefined;\n\n dashkit.on('change', onEventChange);\n\n const {rerender} = render(\n <TestComponent\n {...createProps({config: initialConfig, emitDashKitEvent: dashkit[_emitSymbol]})}\n />,\n );\n\n layoutEffectAction = (dashkitContext, controlsContext) => {\n layoutEffectAction = undefined;\n layoutItemInLayoutEffect = controlsContext?.getLayoutItem('item2') || undefined;\n dashkitContext.layoutChange(nextLayout);\n layoutItemAfterLayoutChange = controlsContext?.getLayoutItem('item1') || undefined;\n };\n\n act(() => {\n rerender(\n <TestComponent\n {...createProps({\n config: externalConfig,\n emitDashKitEvent: dashkit[_emitSymbol],\n })}\n />,\n );\n });\n\n expect(layoutItemInLayoutEffect).toMatchObject(externalConfig.layout[1]);\n expect(onEventChange).toHaveBeenCalledTimes(1);\n expect(onEventChange.mock.calls[0][0].previousLayout).toMatchObject(externalConfig.layout);\n expect(layoutItemAfterLayoutChange).toMatchObject(nextLayout[0]);\n expect(capturedControlsContext?.getLayoutItem('item1')).toMatchObject(nextLayout[0]);\n });\n\n it('Case 1: keeps internal layout after change event without config update, then applies external config update', () => {\n const initialConfig = createConfig(0);\n const nextInternalLayout: Config['layout'] = [{i: 'item1', x: 1, y: 0, w: 2, h: 2}];\n const externalConfig = createConfig(3);\n const dashkit = new DashKit(\n DashKit.defaultProps as unknown as ConstructorParameters<typeof DashKit>[0],\n );\n const onChange = jest.fn();\n const onEventChange = jest.fn();\n\n dashkit.on('change', onEventChange);\n\n const {rerender} = render(\n <TestComponent\n {...createProps({\n config: initialConfig,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n\n // Layout is now enriched with plugin defaults (minW, minH, etc)\n expect(captured.layout).toMatchObject(initialConfig.layout);\n expect(captured.layout[0]).toHaveProperty('minW');\n expect(captured.layout[0]).toHaveProperty('minH');\n\n act(() => {\n captured.layoutChange(nextInternalLayout);\n });\n\n // Verify that change event was fired with correct layout\n expect(onEventChange).toHaveBeenCalledTimes(1);\n expect(onEventChange.mock.calls[0][0].layout).toEqual(nextInternalLayout);\n expect(onChange).toHaveBeenCalledTimes(1);\n\n // Now apply external config update\n act(() => {\n rerender(\n <TestComponent\n {...createProps({\n config: externalConfig,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n });\n\n // External props should win and layout should be updated\n expect(captured.layout).toMatchObject(externalConfig.layout);\n });\n\n it('Case 2: uses on(change) without updating props - internal state persists', () => {\n const initialConfig = createConfig(0);\n const nextInternalLayout: Config['layout'] = [{i: 'item1', x: 5, y: 0, w: 2, h: 2}];\n const dashkit = new DashKit(\n DashKit.defaultProps as unknown as ConstructorParameters<typeof DashKit>[0],\n );\n const onChange = jest.fn();\n const onEventChange = jest.fn();\n const capturedLayouts: Config['layout'][] = [];\n\n // Listen to change event but DON'T update props\n dashkit.on('change', (event) => {\n capturedLayouts.push(event.layout);\n onEventChange(event);\n });\n\n const {rerender} = render(\n <TestComponent\n {...createProps({\n config: initialConfig,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n\n // Initial layout should be enriched\n expect(captured.layout).toMatchObject(initialConfig.layout);\n\n // Trigger layout change\n act(() => {\n captured.layoutChange(nextInternalLayout);\n });\n\n // Event should fire with new layout\n expect(onEventChange).toHaveBeenCalledTimes(1);\n expect(capturedLayouts[0]).toEqual(nextInternalLayout);\n\n // onChange callback fires (consumer COULD update props here, but doesn't in this case)\n expect(onChange).toHaveBeenCalledTimes(1);\n\n // Props remain unchanged - simulating consumer NOT updating props\n act(() => {\n rerender(\n <TestComponent\n {...createProps({\n config: initialConfig,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n });\n\n // Layout should still reflect the change (internal state wins)\n // Note: we verify the event fired correctly\n expect(onEventChange).toHaveBeenCalledTimes(1);\n expect(capturedLayouts[0]).toMatchObject(nextInternalLayout);\n });\n\n it('Case 3: alternates between props.layout updates and on(change) events', () => {\n const config1 = createConfig(0);\n const config2 = createConfig(2);\n const internalChange: Config['layout'] = [{i: 'item1', x: 5, y: 0, w: 2, h: 2}];\n const config3 = createConfig(8);\n\n const dashkit = new DashKit(\n DashKit.defaultProps as unknown as ConstructorParameters<typeof DashKit>[0],\n );\n const onChange = jest.fn();\n const onEventChange = jest.fn();\n\n dashkit.on('change', onEventChange);\n\n const {rerender} = render(\n <TestComponent\n {...createProps({\n config: config1,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n\n // Start with config1\n expect(captured.layout).toMatchObject(config1.layout);\n\n // Update via props (external update)\n act(() => {\n rerender(\n <TestComponent\n {...createProps({\n config: config2,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n });\n expect(captured.layout).toMatchObject(config2.layout);\n\n // Update via internal change (user drag)\n act(() => {\n captured.layoutChange(internalChange);\n });\n expect(onEventChange).toHaveBeenCalledTimes(1);\n expect(onEventChange.mock.calls[0][0].layout).toEqual(internalChange);\n\n // Update via props again (external update wins)\n act(() => {\n rerender(\n <TestComponent\n {...createProps({\n config: config3,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n });\n expect(captured.layout).toMatchObject(config3.layout);\n });\n});\n"]}
|
|
@@ -40,6 +40,16 @@ function useMemoStateContext(props) {
|
|
|
40
40
|
[props.config.layout, props.registerManager]);
|
|
41
41
|
const internalBaselineLayoutRef = react_1.default.useRef(enrichedPropsLayout);
|
|
42
42
|
const [visualLayout, setVisualLayout] = react_1.default.useState(enrichedPropsLayout);
|
|
43
|
+
const [previousEnrichedPropsLayout, setPreviousEnrichedPropsLayout] = react_1.default.useState(enrichedPropsLayout);
|
|
44
|
+
const [pendingExternalBaselineLayout, setPendingExternalBaselineLayout] = react_1.default.useState();
|
|
45
|
+
const getBaselineLayout = react_1.default.useCallback(() => {
|
|
46
|
+
if (pendingExternalBaselineLayout &&
|
|
47
|
+
internalBaselineLayoutRef.current ===
|
|
48
|
+
pendingExternalBaselineLayout.previousBaselineLayout) {
|
|
49
|
+
return pendingExternalBaselineLayout.layout;
|
|
50
|
+
}
|
|
51
|
+
return internalBaselineLayoutRef.current;
|
|
52
|
+
}, [pendingExternalBaselineLayout]);
|
|
43
53
|
const [externalLayoutRevision, setExternalLayoutRevision] = react_1.default.useState(0);
|
|
44
54
|
const [temporaryLayout, setTemporaryLayout] = react_1.default.useState(null);
|
|
45
55
|
const resetTemporaryLayout = react_1.default.useCallback(() => setTemporaryLayout(null), [setTemporaryLayout]);
|
|
@@ -74,7 +84,7 @@ function useMemoStateContext(props) {
|
|
|
74
84
|
return Object.assign({}, item);
|
|
75
85
|
}
|
|
76
86
|
});
|
|
77
|
-
const baselineConfig = Object.assign(Object.assign({}, props.config), { layout:
|
|
87
|
+
const baselineConfig = Object.assign(Object.assign({}, props.config), { layout: getBaselineLayout() });
|
|
78
88
|
const newConfig = utils_1.UpdateManager.updateLayout({
|
|
79
89
|
layout: currentInnerLayout,
|
|
80
90
|
config: baselineConfig,
|
|
@@ -86,13 +96,13 @@ function useMemoStateContext(props) {
|
|
|
86
96
|
emitDashKitEvent: props.emitDashKitEvent,
|
|
87
97
|
});
|
|
88
98
|
internalBaselineLayoutRef.current = newConfig.layout;
|
|
89
|
-
}, [props.config, props.emitDashKitEvent, onChange]);
|
|
99
|
+
}, [getBaselineLayout, props.config, props.emitDashKitEvent, onChange]);
|
|
90
100
|
const getLayoutItem = react_1.default.useCallback((id) => {
|
|
91
|
-
return
|
|
92
|
-
}, []);
|
|
101
|
+
return getBaselineLayout().find(({ i }) => i === id);
|
|
102
|
+
}, [getBaselineLayout]);
|
|
93
103
|
const getOuterLayout = react_1.default.useCallback(() => {
|
|
94
|
-
return (0, utils_1.convertEnrichedLayoutToConfigLayout)(
|
|
95
|
-
}, []);
|
|
104
|
+
return (0, utils_1.convertEnrichedLayoutToConfigLayout)(getBaselineLayout());
|
|
105
|
+
}, [getBaselineLayout]);
|
|
96
106
|
// to calculate items, only memorization of items and globalItems is important
|
|
97
107
|
const configItems = react_1.default.useMemo(() => (0, shared_1.getAllConfigItems)(props.config), [props.config.items, props.config.globalItems]);
|
|
98
108
|
const onItemRemove = react_1.default.useCallback((id) => {
|
|
@@ -208,16 +218,28 @@ function useMemoStateContext(props) {
|
|
|
208
218
|
});
|
|
209
219
|
}
|
|
210
220
|
}, [props.registerManager, props.groups, visualLayout]);
|
|
211
|
-
// Synchronize
|
|
212
|
-
//
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
if (
|
|
216
|
-
|
|
221
|
+
// Synchronize visual layout during render, so children never see new config with old layout.
|
|
222
|
+
// Keep the previous external layout separate from the drag baseline: a drag updates the latter.
|
|
223
|
+
if (previousEnrichedPropsLayout !== enrichedPropsLayout) {
|
|
224
|
+
setPreviousEnrichedPropsLayout(enrichedPropsLayout);
|
|
225
|
+
if (!(0, isEqual_1.default)(internalBaselineLayoutRef.current, enrichedPropsLayout)) {
|
|
226
|
+
setPendingExternalBaselineLayout({
|
|
227
|
+
layout: enrichedPropsLayout,
|
|
228
|
+
previousBaselineLayout: internalBaselineLayoutRef.current,
|
|
229
|
+
});
|
|
217
230
|
setVisualLayout(enrichedPropsLayout);
|
|
218
231
|
setExternalLayoutRevision((r) => r + 1);
|
|
219
232
|
}
|
|
220
|
-
}
|
|
233
|
+
}
|
|
234
|
+
react_1.default.useLayoutEffect(() => {
|
|
235
|
+
if (pendingExternalBaselineLayout) {
|
|
236
|
+
if (internalBaselineLayoutRef.current ===
|
|
237
|
+
pendingExternalBaselineLayout.previousBaselineLayout) {
|
|
238
|
+
internalBaselineLayoutRef.current = pendingExternalBaselineLayout.layout;
|
|
239
|
+
}
|
|
240
|
+
setPendingExternalBaselineLayout(undefined);
|
|
241
|
+
}
|
|
242
|
+
}, [pendingExternalBaselineLayout]);
|
|
221
243
|
const itemsParams = (0, useDeepEqualMemo_1.useDeepEqualMemo)(() => (0, shared_1.getItemsParams)({
|
|
222
244
|
defaultGlobalParams: props.defaultGlobalParams,
|
|
223
245
|
globalParams: props.globalParams,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withContext.js","sourceRoot":"../../../src","sources":["hocs/withContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport isEqual from 'lodash/isEqual';\nimport pick from 'lodash/pick';\n\nimport type {DashKitProps} from '../components/DashKit';\nimport {\n COMPACT_TYPE_HORIZONTAL_NOWRAP,\n DEFAULT_GROUP,\n DEFAULT_WIDGET_HEIGHT,\n DEFAULT_WIDGET_WIDTH,\n TEMPORARY_ITEM_ID,\n} from '../constants/common';\nimport {DashKitContext, DashKitDnDContext, DashkitOverlayControlsContext} from '../context';\nimport type {\n DashKitCtxShape,\n DashkitPropsPassedToCtx,\n OverlayControlsCtxShape,\n TemporaryLayout,\n} from '../context';\nimport {useDeepEqualMemo} from '../hooks/useDeepEqualMemo';\nimport type {ConfigLayout} from '../shared';\nimport {CONFIG_LAYOUT_FIELDS, getAllConfigItems, getItemsParams, getItemsState} from '../shared';\nimport type {DashKitEventMap, DashKitEventName, PluginRef} from '../typings';\nimport type {RegisterManager, RegisterManagerPlugin} from '../utils';\nimport {\n UpdateManager,\n convertEnrichedLayoutToConfigLayout,\n emitDashKitChangeEvent,\n enrichLayoutWithDefaults,\n resolveLayoutGroup,\n} from '../utils';\n\nexport type DashKitWithContextProps = DashkitPropsPassedToCtx &\n Pick<\n DashKitProps,\n 'overlayControls' | 'overlayMenuItems' | 'getPreparedCopyItemOptions' | 'onCopyFulfill'\n > &\n Required<\n Pick<\n DashKitProps,\n | 'itemsStateAndParams'\n | 'defaultGlobalParams'\n | 'globalParams'\n | 'context'\n | 'settings'\n | 'onItemEdit'\n | 'onChange'\n | 'onDrop'\n >\n > & {\n registerManager: RegisterManager;\n forwardedMetaRef: React.ForwardedRef<any>;\n emitDashKitEvent: <T extends DashKitEventName>(\n eventName: T,\n event: DashKitEventMap[T],\n ) => void;\n };\n\ntype OriginalLayouts = Record<string, ConfigLayout>;\n\ntype AdjustedLayouts = Record<string, ConfigLayout>;\n\ntype NowrapAdjustedLayouts = Record<string, number>;\n\ntype UseMemoStateContextResult = {\n dashkitContextValue: DashKitCtxShape;\n controlsContextValue: OverlayControlsCtxShape;\n};\n\nconst hasGetMeta = (value: PluginRef): value is {getMeta: () => Promise<any>} => {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'getMeta' in value &&\n typeof value.getMeta === 'function'\n );\n};\n\nconst hasReload = (\n value: PluginRef,\n): value is {reload: (data: {silentLoading: boolean; noVeil: boolean}) => void} => {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'reload' in value &&\n typeof value.reload === 'function'\n );\n};\n\nfunction useMemoStateContext(props: DashKitWithContextProps): UseMemoStateContextResult {\n // Since we don't want to store widget parameters with auto-height enabled in the store or server,\n // the actual layout (visible to the user at any moment) will be stored in state.\n // However, to ensure the store gets the layout without considering auto-height widgets,\n // when a widget's height is adjusted, the original h (height) value is saved in originalLayouts,\n // and the new adjusted height is stored in adjustedLayouts.\n\n const originalLayouts = React.useRef<OriginalLayouts>({});\n const adjustedLayouts = React.useRef<AdjustedLayouts>({});\n const nowrapAdjustedLayouts = React.useRef<NowrapAdjustedLayouts>({});\n\n // Enrich layout with default values from plugins.\n // This ensures backward compatibility: if props.layout is already enriched (old flow),\n // enrichLayoutWithDefaults will just merge and return similar result.\n // If props.layout comes directly from config (new flow), it gets properly enriched.\n const enrichedPropsLayout = React.useMemo(\n () => enrichLayoutWithDefaults(props.config, props.registerManager),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [props.config.layout, props.registerManager],\n );\n\n const internalBaselineLayoutRef = React.useRef<ConfigLayout[]>(enrichedPropsLayout);\n const [visualLayout, setVisualLayout] = React.useState<ConfigLayout[]>(enrichedPropsLayout);\n\n const [externalLayoutRevision, setExternalLayoutRevision] = React.useState(0);\n const [temporaryLayout, setTemporaryLayout] = React.useState<TemporaryLayout | null>(null);\n const resetTemporaryLayout = React.useCallback(\n () => setTemporaryLayout(null),\n [setTemporaryLayout],\n );\n\n const dndContext = React.useContext(DashKitDnDContext);\n const outerDnDEnable = Boolean(dndContext);\n\n // TODO: need move originalLayouts, adjustedLayouts to state\n const [layoutUpdateCounter, forceUpdateLayout] = React.useState(0);\n\n const onChange = React.useCallback(\n ({\n config = props.config,\n itemsStateAndParams = props.itemsStateAndParams,\n groups = props.groups,\n }) => {\n if (\n !(\n isEqual(config, props.config) &&\n isEqual(itemsStateAndParams, props.itemsStateAndParams) &&\n isEqual(groups, props.groups)\n )\n ) {\n props.onChange({config, itemsStateAndParams, groups});\n }\n },\n [props.config, props.groups, props.itemsStateAndParams, props.onChange],\n );\n\n // Callback invoked when grid layout changes. The first argument is the actual layout config,\n // which includes adjusted \"h\" values for items with auto-height enabled. To ensure that\n // values stored are not adjusted (as if auto-height was disabled), we correct them using\n // the originalLayouts stored without adjustments.\n const onLayoutChange = React.useCallback(\n (layout: ConfigLayout[]) => {\n const currentInnerLayout = layout.map((item) => {\n if (item.i in originalLayouts.current) {\n const {parent: _parent, ...originalCopy} = originalLayouts.current[item.i];\n\n if (item.parent) {\n (originalCopy as ConfigLayout).parent = item.parent;\n }\n originalCopy.w = item.w;\n originalCopy.x = item.x;\n originalCopy.y = item.y;\n\n return originalCopy satisfies ConfigLayout;\n } else {\n return {...item};\n }\n });\n\n const baselineConfig = {\n ...props.config,\n layout: internalBaselineLayoutRef.current,\n };\n\n const newConfig = UpdateManager.updateLayout({\n layout: currentInnerLayout,\n config: baselineConfig,\n });\n\n emitDashKitChangeEvent({\n config: baselineConfig,\n newConfig,\n onChange,\n emitDashKitEvent: props.emitDashKitEvent,\n });\n\n internalBaselineLayoutRef.current = newConfig.layout;\n },\n [props.config, props.emitDashKitEvent, onChange],\n );\n\n const getLayoutItem = React.useCallback((id: string) => {\n return internalBaselineLayoutRef.current.find(({i}) => i === id);\n }, []);\n\n const getOuterLayout = React.useCallback((): ConfigLayout[] => {\n return convertEnrichedLayoutToConfigLayout(internalBaselineLayoutRef.current);\n }, []);\n\n // to calculate items, only memorization of items and globalItems is important\n const configItems = React.useMemo(\n () => getAllConfigItems(props.config),\n [props.config.items, props.config.globalItems],\n );\n\n const onItemRemove = React.useCallback(\n (id: string) => {\n delete nowrapAdjustedLayouts.current[id];\n delete adjustedLayouts.current[id];\n delete originalLayouts.current[id];\n\n if (id === TEMPORARY_ITEM_ID) {\n resetTemporaryLayout();\n } else {\n if (temporaryLayout) {\n setTemporaryLayout({\n ...temporaryLayout,\n data: temporaryLayout.data.filter(({i}) => i !== id),\n });\n }\n\n onChange(\n UpdateManager.removeItem({\n id,\n config: {...props.config, layout: getOuterLayout()},\n itemsStateAndParams: props.itemsStateAndParams,\n }),\n );\n }\n },\n [\n resetTemporaryLayout,\n temporaryLayout,\n onChange,\n props.config,\n props.itemsStateAndParams,\n getOuterLayout,\n ],\n );\n\n const onItemStateAndParamsChange = React.useCallback<\n DashKitCtxShape['onItemStateAndParamsChange']\n >(\n (id, stateAndParams, options) => {\n const currentConfig = {...props.config, layout: getOuterLayout()};\n onChange({\n config: currentConfig,\n // config is not strictly required here; ideally it should be removed along with the default props\n itemsStateAndParams: UpdateManager.changeStateAndParams({\n id,\n config: currentConfig,\n stateAndParams,\n itemsStateAndParams: props.itemsStateAndParams,\n options,\n }),\n });\n },\n [props.config, props.itemsStateAndParams, getOuterLayout, onChange],\n );\n\n const memorizeOriginalLayout = React.useCallback<DashKitCtxShape['memorizeOriginalLayout']>(\n (widgetId, preAutoHeightLayout, postAutoHeightLayout) => {\n let needUpdateLayout = false;\n if (!(widgetId in originalLayouts.current)) {\n originalLayouts.current[widgetId] = preAutoHeightLayout;\n needUpdateLayout = true;\n }\n if (adjustedLayouts.current[widgetId] !== postAutoHeightLayout) {\n adjustedLayouts.current[widgetId] = postAutoHeightLayout;\n needUpdateLayout = true;\n }\n\n if (needUpdateLayout) {\n forceUpdateLayout((prev) => prev + 1);\n }\n },\n [],\n );\n\n const revertToOriginalLayout = React.useCallback((widgetId: string) => {\n const needUpdateLayout =\n widgetId in adjustedLayouts.current || widgetId in originalLayouts.current;\n delete adjustedLayouts.current[widgetId];\n delete originalLayouts.current[widgetId];\n if (needUpdateLayout) {\n forceUpdateLayout((prev) => prev + 1);\n }\n }, []);\n\n React.useMemo(() => {\n const groups = props.groups;\n // Use visualLayout instead of props.layout (which is now optional)\n const layout = visualLayout;\n const defaultProps = props.registerManager.gridLayout || {};\n const nowrapGroups: Record<string, {items: ConfigLayout[]; leftSpace: number}> = {};\n let hasNowrapGroups = false;\n\n if (\n defaultProps.compactType === COMPACT_TYPE_HORIZONTAL_NOWRAP &&\n defaultProps.cols !== undefined\n ) {\n nowrapGroups[DEFAULT_GROUP] = {\n items: [],\n leftSpace: defaultProps.cols,\n };\n hasNowrapGroups = true;\n }\n\n if (groups) {\n groups.forEach((group) => {\n const resultProps = group.gridProperties?.(defaultProps) || {};\n\n if (\n resultProps.compactType === COMPACT_TYPE_HORIZONTAL_NOWRAP &&\n resultProps.cols !== undefined &&\n group.id\n ) {\n nowrapGroups[group.id] = {\n items: [],\n leftSpace: resultProps.cols,\n };\n hasNowrapGroups = true;\n }\n });\n }\n\n if (hasNowrapGroups) {\n layout.forEach((item) => {\n const widgetId = item.i;\n const parentId = resolveLayoutGroup(item);\n\n if (nowrapGroups[parentId]) {\n // Collecting nowrap elements\n nowrapGroups[parentId].items.push(item);\n nowrapGroups[parentId].leftSpace -= item.w;\n } else if (nowrapAdjustedLayouts.current[widgetId]) {\n // If element is not in horizontal-nowrap cleaning up and reverting adjustLayout values\n delete nowrapAdjustedLayouts.current[widgetId];\n }\n });\n\n Object.entries(nowrapGroups).forEach(([, {items, leftSpace}]) => {\n items.forEach((item) => {\n // setting maxW with adjustLayout fields and saving previous\n nowrapAdjustedLayouts.current[item.i] = item.w + leftSpace;\n });\n });\n }\n }, [props.registerManager, props.groups, visualLayout]);\n\n // Synchronize internal baseline and visual layout when external props.layout changes re-init.\n // When props.config.layout reference changes, external update occurred re-init.\n React.useEffect(() => {\n const internalNotEqualProps = !isEqual(\n internalBaselineLayoutRef.current,\n enrichedPropsLayout,\n );\n\n if (internalNotEqualProps) {\n internalBaselineLayoutRef.current = enrichedPropsLayout;\n setVisualLayout(enrichedPropsLayout);\n setExternalLayoutRevision((r) => r + 1);\n }\n }, [enrichedPropsLayout]);\n\n const itemsParams = useDeepEqualMemo(\n () =>\n getItemsParams({\n defaultGlobalParams: props.defaultGlobalParams,\n globalParams: props.globalParams,\n config: props.config,\n itemsStateAndParams: props.itemsStateAndParams,\n plugins: props.registerManager.getPlugins(),\n }),\n [\n props.defaultGlobalParams,\n props.globalParams,\n props.config,\n props.itemsStateAndParams,\n props.registerManager,\n ],\n );\n\n const itemsState = useDeepEqualMemo(\n () =>\n getItemsState({\n config: props.config,\n itemsStateAndParams: props.itemsStateAndParams,\n }),\n [props.config, props.itemsStateAndParams],\n );\n\n const getItemsMeta = React.useCallback<DashKitCtxShape['getItemsMeta']>((pluginsRefs) => {\n return pluginsRefs\n .map((ref) => {\n if (!(ref && hasGetMeta(ref))) {\n return undefined;\n }\n return ref.getMeta();\n })\n .filter((item): item is Promise<any> => item !== undefined);\n }, []);\n\n const resultLayout = React.useMemo(() => {\n const adjusted = adjustedLayouts.current;\n const original = originalLayouts.current;\n const nowrapAdjust = nowrapAdjustedLayouts.current;\n\n return visualLayout.map((item) => {\n const widgetId = item.i;\n\n if (widgetId in adjusted || widgetId in nowrapAdjust) {\n original[widgetId] = item;\n // eslint-disable-next-line no-unused-vars\n const {parent: _parent2, ...adjustedItem} = adjusted[widgetId] || item;\n\n adjustedItem.w = item.w;\n adjustedItem.x = item.x;\n adjustedItem.y = item.y;\n\n if (item.parent) {\n (adjustedItem as ConfigLayout).parent = item.parent;\n }\n\n if (widgetId in nowrapAdjust) {\n (adjustedItem as ConfigLayout & {maxW?: number}).maxW = nowrapAdjust[widgetId];\n }\n\n return adjustedItem satisfies ConfigLayout;\n } else {\n if (widgetId in original) {\n delete original[widgetId];\n }\n return item;\n }\n });\n }, [visualLayout, layoutUpdateCounter]);\n\n const reloadItems = React.useCallback<DashKitCtxShape['reloadItems']>((pluginsRefs, data) => {\n pluginsRefs.forEach((ref) => ref && hasReload(ref) && ref.reload(data));\n }, []);\n\n const dragPropsContext = dndContext?.dragProps;\n const onDropDragOverContext = dndContext?.onDropDragOver;\n\n const dragOverPlugin = React.useMemo(() => {\n if (!dragPropsContext) {\n return null;\n }\n\n const pluginType = dragPropsContext.type;\n\n if (props.registerManager.check(pluginType)) {\n return props.registerManager.getItem(pluginType);\n } else {\n // eslint-disable-next-line no-console\n console.error(`Uknown pluginType: ${pluginType}`);\n return null;\n }\n }, [dragPropsContext, props.registerManager]);\n\n const onDropDragOver = React.useCallback<DashKitCtxShape['onDropDragOver']>(\n (_e, group, gridProps, groupLayout, sharedItem) => {\n if (temporaryLayout) {\n resetTemporaryLayout();\n return false;\n }\n\n let dragItemType: string;\n let defaultLayout: RegisterManagerPlugin['defaultLayout'] | {h: number; w: number};\n if (sharedItem) {\n const {type, h, w} = sharedItem;\n dragItemType = type;\n const _defaults = props.registerManager.getItem(type);\n defaultLayout = _defaults ? {..._defaults.defaultLayout, h, w} : {h, w};\n } else if (dragOverPlugin) {\n dragItemType = dragOverPlugin.type;\n defaultLayout = dragOverPlugin.defaultLayout;\n } else {\n return false;\n }\n\n let maxW = gridProps.cols;\n const maxH = Math.min(\n gridProps.maxRows || Infinity,\n 'maxH' in defaultLayout && defaultLayout.maxH ? defaultLayout.maxH : Infinity,\n );\n\n if (gridProps.compactType === COMPACT_TYPE_HORIZONTAL_NOWRAP && gridProps.cols) {\n maxW = groupLayout.reduce((memo, item) => memo - item.w, gridProps.cols);\n }\n\n if (\n maxW === 0 ||\n maxH === 0 ||\n ('minW' in defaultLayout &&\n defaultLayout.minW &&\n maxW &&\n maxW < defaultLayout.minW) ||\n ('minH' in defaultLayout && defaultLayout.minH && maxH < defaultLayout.minH)\n ) {\n return false;\n }\n\n const {\n h = defaultLayout?.h || DEFAULT_WIDGET_HEIGHT,\n w = defaultLayout?.w || DEFAULT_WIDGET_WIDTH,\n } = dragPropsContext?.layout || {};\n\n const itemLayout = {\n h: maxH ? Math.min(h, maxH) : h,\n w: maxW ? Math.min(w, maxW) : w,\n };\n\n if (\n onDropDragOverContext?.(\n {\n ...sharedItem,\n ...itemLayout,\n parent: group,\n type: dragItemType,\n },\n sharedItem ?? null,\n ) === false\n ) {\n return false;\n }\n\n return itemLayout;\n },\n [\n props.registerManager,\n resetTemporaryLayout,\n temporaryLayout,\n dragOverPlugin,\n dragPropsContext,\n onDropDragOverContext,\n ],\n );\n\n const onDropProp = props.onDrop;\n const onDrop = React.useCallback<DashKitCtxShape['onDrop']>(\n (newLayout, item) => {\n if (!dragPropsContext) {\n return;\n }\n\n setTemporaryLayout({\n data: [...newLayout, item],\n dragProps: dragPropsContext,\n });\n\n onDropProp?.({\n newLayout: newLayout.reduce<ConfigLayout[]>((memo, l) => {\n if (l.i !== item.i) {\n memo.push(pick(l, CONFIG_LAYOUT_FIELDS));\n }\n\n return memo;\n }, []),\n itemLayout: pick(item, CONFIG_LAYOUT_FIELDS),\n commit: resetTemporaryLayout,\n dragProps: dragPropsContext,\n });\n },\n [dragPropsContext, onDropProp, setTemporaryLayout, resetTemporaryLayout],\n );\n\n const dashkitContextValue = React.useMemo(\n () => ({\n externalLayoutRevision,\n config: props.config,\n configItems,\n groups: props.groups,\n context: props.context,\n noOverlay: props.noOverlay,\n focusable: props.focusable,\n defaultGlobalParams: props.globalParams,\n globalParams: props.globalParams,\n editMode: props.editMode,\n settings: props.settings,\n onItemMountChange: props.onItemMountChange,\n onItemRender: props.onItemRender,\n draggableHandleClassName: props.draggableHandleClassName,\n\n registerManager: props.registerManager,\n forwardedMetaRef: props.forwardedMetaRef,\n\n layout: resultLayout,\n temporaryLayout,\n layoutChange: onLayoutChange,\n memorizeOriginalLayout,\n revertToOriginalLayout,\n\n itemsState,\n itemsParams,\n onItemStateAndParamsChange,\n\n getItemsMeta,\n reloadItems,\n\n onDrop,\n onDropDragOver,\n outerDnDEnable,\n dragOverPlugin,\n\n onItemFocus: props.onItemFocus,\n onItemBlur: props.onItemBlur,\n\n /* default handlers bypass */\n onDragStart: props.onDragStart,\n onDrag: props.onDrag,\n onDragStop: props.onDragStop,\n onResizeStart: props.onResizeStart,\n onResize: props.onResize,\n onResizeStop: props.onResizeStop,\n }),\n [\n externalLayoutRevision,\n resultLayout,\n temporaryLayout,\n props.config,\n configItems,\n props.groups,\n props.context,\n props.noOverlay,\n props.focusable,\n props.globalParams,\n props.editMode,\n props.settings,\n itemsState,\n itemsParams,\n props.registerManager,\n onItemStateAndParamsChange,\n onDrop,\n onDropDragOver,\n onLayoutChange,\n props.onItemMountChange,\n props.onItemRender,\n getItemsMeta,\n reloadItems,\n memorizeOriginalLayout,\n revertToOriginalLayout,\n props.forwardedMetaRef,\n props.draggableHandleClassName,\n outerDnDEnable,\n dragOverPlugin,\n\n props.onItemFocus,\n props.onItemBlur,\n\n props.onDragStart,\n props.onDrag,\n props.onDragStop,\n props.onResizeStart,\n props.onResize,\n props.onResizeStop,\n ],\n );\n\n const overlayMenuItems = props.overlayMenuItems || props.registerManager.settings.menu;\n const controlsContextValue = React.useMemo(\n () => ({\n overlayControls: props.overlayControls,\n context: props.context,\n\n itemsStateAndParams: props.itemsStateAndParams,\n itemsState,\n itemsParams,\n\n getPreparedCopyItemOptions: props.getPreparedCopyItemOptions,\n onCopyFulfill: props.onCopyFulfill,\n\n menu: overlayMenuItems,\n\n editItem: props.onItemEdit,\n removeItem: onItemRemove,\n getLayoutItem: getLayoutItem,\n }),\n [\n props.overlayControls,\n props.context,\n props.itemsStateAndParams,\n props.onItemEdit,\n props.getPreparedCopyItemOptions,\n props.onCopyFulfill,\n overlayMenuItems,\n itemsState,\n itemsParams,\n onItemRemove,\n getLayoutItem,\n ],\n );\n\n return {controlsContextValue, dashkitContextValue};\n}\n\nexport function withContext(Component: React.ComponentType) {\n const WithContext = (props: DashKitWithContextProps) => {\n const {dashkitContextValue, controlsContextValue} = useMemoStateContext(props);\n\n return (\n <DashKitContext.Provider value={dashkitContextValue}>\n <DashkitOverlayControlsContext.Provider value={controlsContextValue}>\n <Component />\n </DashkitOverlayControlsContext.Provider>\n </DashKitContext.Provider>\n );\n };\n\n WithContext.displayName = `withContext(${\n Component.displayName || Component.name || 'Component'\n })`;\n\n return WithContext;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"withContext.js","sourceRoot":"../../../src","sources":["hocs/withContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport isEqual from 'lodash/isEqual';\nimport pick from 'lodash/pick';\n\nimport type {DashKitProps} from '../components/DashKit';\nimport {\n COMPACT_TYPE_HORIZONTAL_NOWRAP,\n DEFAULT_GROUP,\n DEFAULT_WIDGET_HEIGHT,\n DEFAULT_WIDGET_WIDTH,\n TEMPORARY_ITEM_ID,\n} from '../constants/common';\nimport {DashKitContext, DashKitDnDContext, DashkitOverlayControlsContext} from '../context';\nimport type {\n DashKitCtxShape,\n DashkitPropsPassedToCtx,\n OverlayControlsCtxShape,\n TemporaryLayout,\n} from '../context';\nimport {useDeepEqualMemo} from '../hooks/useDeepEqualMemo';\nimport type {ConfigLayout} from '../shared';\nimport {CONFIG_LAYOUT_FIELDS, getAllConfigItems, getItemsParams, getItemsState} from '../shared';\nimport type {DashKitEventMap, DashKitEventName, PluginRef} from '../typings';\nimport type {RegisterManager, RegisterManagerPlugin} from '../utils';\nimport {\n UpdateManager,\n convertEnrichedLayoutToConfigLayout,\n emitDashKitChangeEvent,\n enrichLayoutWithDefaults,\n resolveLayoutGroup,\n} from '../utils';\n\nexport type DashKitWithContextProps = DashkitPropsPassedToCtx &\n Pick<\n DashKitProps,\n 'overlayControls' | 'overlayMenuItems' | 'getPreparedCopyItemOptions' | 'onCopyFulfill'\n > &\n Required<\n Pick<\n DashKitProps,\n | 'itemsStateAndParams'\n | 'defaultGlobalParams'\n | 'globalParams'\n | 'context'\n | 'settings'\n | 'onItemEdit'\n | 'onChange'\n | 'onDrop'\n >\n > & {\n registerManager: RegisterManager;\n forwardedMetaRef: React.ForwardedRef<any>;\n emitDashKitEvent: <T extends DashKitEventName>(\n eventName: T,\n event: DashKitEventMap[T],\n ) => void;\n };\n\ntype OriginalLayouts = Record<string, ConfigLayout>;\n\ntype AdjustedLayouts = Record<string, ConfigLayout>;\n\ntype NowrapAdjustedLayouts = Record<string, number>;\n\ntype PendingExternalBaselineLayout = {\n layout: ConfigLayout[];\n previousBaselineLayout: ConfigLayout[];\n};\n\ntype UseMemoStateContextResult = {\n dashkitContextValue: DashKitCtxShape;\n controlsContextValue: OverlayControlsCtxShape;\n};\n\nconst hasGetMeta = (value: PluginRef): value is {getMeta: () => Promise<any>} => {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'getMeta' in value &&\n typeof value.getMeta === 'function'\n );\n};\n\nconst hasReload = (\n value: PluginRef,\n): value is {reload: (data: {silentLoading: boolean; noVeil: boolean}) => void} => {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'reload' in value &&\n typeof value.reload === 'function'\n );\n};\n\nfunction useMemoStateContext(props: DashKitWithContextProps): UseMemoStateContextResult {\n // Since we don't want to store widget parameters with auto-height enabled in the store or server,\n // the actual layout (visible to the user at any moment) will be stored in state.\n // However, to ensure the store gets the layout without considering auto-height widgets,\n // when a widget's height is adjusted, the original h (height) value is saved in originalLayouts,\n // and the new adjusted height is stored in adjustedLayouts.\n\n const originalLayouts = React.useRef<OriginalLayouts>({});\n const adjustedLayouts = React.useRef<AdjustedLayouts>({});\n const nowrapAdjustedLayouts = React.useRef<NowrapAdjustedLayouts>({});\n\n // Enrich layout with default values from plugins.\n // This ensures backward compatibility: if props.layout is already enriched (old flow),\n // enrichLayoutWithDefaults will just merge and return similar result.\n // If props.layout comes directly from config (new flow), it gets properly enriched.\n const enrichedPropsLayout = React.useMemo(\n () => enrichLayoutWithDefaults(props.config, props.registerManager),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [props.config.layout, props.registerManager],\n );\n\n const internalBaselineLayoutRef = React.useRef<ConfigLayout[]>(enrichedPropsLayout);\n const [visualLayout, setVisualLayout] = React.useState<ConfigLayout[]>(enrichedPropsLayout);\n const [previousEnrichedPropsLayout, setPreviousEnrichedPropsLayout] =\n React.useState(enrichedPropsLayout);\n const [pendingExternalBaselineLayout, setPendingExternalBaselineLayout] =\n React.useState<PendingExternalBaselineLayout>();\n const getBaselineLayout = React.useCallback(() => {\n if (\n pendingExternalBaselineLayout &&\n internalBaselineLayoutRef.current ===\n pendingExternalBaselineLayout.previousBaselineLayout\n ) {\n return pendingExternalBaselineLayout.layout;\n }\n\n return internalBaselineLayoutRef.current;\n }, [pendingExternalBaselineLayout]);\n\n const [externalLayoutRevision, setExternalLayoutRevision] = React.useState(0);\n const [temporaryLayout, setTemporaryLayout] = React.useState<TemporaryLayout | null>(null);\n const resetTemporaryLayout = React.useCallback(\n () => setTemporaryLayout(null),\n [setTemporaryLayout],\n );\n\n const dndContext = React.useContext(DashKitDnDContext);\n const outerDnDEnable = Boolean(dndContext);\n\n // TODO: need move originalLayouts, adjustedLayouts to state\n const [layoutUpdateCounter, forceUpdateLayout] = React.useState(0);\n\n const onChange = React.useCallback(\n ({\n config = props.config,\n itemsStateAndParams = props.itemsStateAndParams,\n groups = props.groups,\n }) => {\n if (\n !(\n isEqual(config, props.config) &&\n isEqual(itemsStateAndParams, props.itemsStateAndParams) &&\n isEqual(groups, props.groups)\n )\n ) {\n props.onChange({config, itemsStateAndParams, groups});\n }\n },\n [props.config, props.groups, props.itemsStateAndParams, props.onChange],\n );\n\n // Callback invoked when grid layout changes. The first argument is the actual layout config,\n // which includes adjusted \"h\" values for items with auto-height enabled. To ensure that\n // values stored are not adjusted (as if auto-height was disabled), we correct them using\n // the originalLayouts stored without adjustments.\n const onLayoutChange = React.useCallback(\n (layout: ConfigLayout[]) => {\n const currentInnerLayout = layout.map((item) => {\n if (item.i in originalLayouts.current) {\n const {parent: _parent, ...originalCopy} = originalLayouts.current[item.i];\n\n if (item.parent) {\n (originalCopy as ConfigLayout).parent = item.parent;\n }\n originalCopy.w = item.w;\n originalCopy.x = item.x;\n originalCopy.y = item.y;\n\n return originalCopy satisfies ConfigLayout;\n } else {\n return {...item};\n }\n });\n\n const baselineConfig = {\n ...props.config,\n layout: getBaselineLayout(),\n };\n\n const newConfig = UpdateManager.updateLayout({\n layout: currentInnerLayout,\n config: baselineConfig,\n });\n\n emitDashKitChangeEvent({\n config: baselineConfig,\n newConfig,\n onChange,\n emitDashKitEvent: props.emitDashKitEvent,\n });\n\n internalBaselineLayoutRef.current = newConfig.layout;\n },\n [getBaselineLayout, props.config, props.emitDashKitEvent, onChange],\n );\n\n const getLayoutItem = React.useCallback(\n (id: string) => {\n return getBaselineLayout().find(({i}) => i === id);\n },\n [getBaselineLayout],\n );\n\n const getOuterLayout = React.useCallback((): ConfigLayout[] => {\n return convertEnrichedLayoutToConfigLayout(getBaselineLayout());\n }, [getBaselineLayout]);\n\n // to calculate items, only memorization of items and globalItems is important\n const configItems = React.useMemo(\n () => getAllConfigItems(props.config),\n [props.config.items, props.config.globalItems],\n );\n\n const onItemRemove = React.useCallback(\n (id: string) => {\n delete nowrapAdjustedLayouts.current[id];\n delete adjustedLayouts.current[id];\n delete originalLayouts.current[id];\n\n if (id === TEMPORARY_ITEM_ID) {\n resetTemporaryLayout();\n } else {\n if (temporaryLayout) {\n setTemporaryLayout({\n ...temporaryLayout,\n data: temporaryLayout.data.filter(({i}) => i !== id),\n });\n }\n\n onChange(\n UpdateManager.removeItem({\n id,\n config: {...props.config, layout: getOuterLayout()},\n itemsStateAndParams: props.itemsStateAndParams,\n }),\n );\n }\n },\n [\n resetTemporaryLayout,\n temporaryLayout,\n onChange,\n props.config,\n props.itemsStateAndParams,\n getOuterLayout,\n ],\n );\n\n const onItemStateAndParamsChange = React.useCallback<\n DashKitCtxShape['onItemStateAndParamsChange']\n >(\n (id, stateAndParams, options) => {\n const currentConfig = {...props.config, layout: getOuterLayout()};\n onChange({\n config: currentConfig,\n // config is not strictly required here; ideally it should be removed along with the default props\n itemsStateAndParams: UpdateManager.changeStateAndParams({\n id,\n config: currentConfig,\n stateAndParams,\n itemsStateAndParams: props.itemsStateAndParams,\n options,\n }),\n });\n },\n [props.config, props.itemsStateAndParams, getOuterLayout, onChange],\n );\n\n const memorizeOriginalLayout = React.useCallback<DashKitCtxShape['memorizeOriginalLayout']>(\n (widgetId, preAutoHeightLayout, postAutoHeightLayout) => {\n let needUpdateLayout = false;\n if (!(widgetId in originalLayouts.current)) {\n originalLayouts.current[widgetId] = preAutoHeightLayout;\n needUpdateLayout = true;\n }\n if (adjustedLayouts.current[widgetId] !== postAutoHeightLayout) {\n adjustedLayouts.current[widgetId] = postAutoHeightLayout;\n needUpdateLayout = true;\n }\n\n if (needUpdateLayout) {\n forceUpdateLayout((prev) => prev + 1);\n }\n },\n [],\n );\n\n const revertToOriginalLayout = React.useCallback((widgetId: string) => {\n const needUpdateLayout =\n widgetId in adjustedLayouts.current || widgetId in originalLayouts.current;\n delete adjustedLayouts.current[widgetId];\n delete originalLayouts.current[widgetId];\n if (needUpdateLayout) {\n forceUpdateLayout((prev) => prev + 1);\n }\n }, []);\n\n React.useMemo(() => {\n const groups = props.groups;\n // Use visualLayout instead of props.layout (which is now optional)\n const layout = visualLayout;\n const defaultProps = props.registerManager.gridLayout || {};\n const nowrapGroups: Record<string, {items: ConfigLayout[]; leftSpace: number}> = {};\n let hasNowrapGroups = false;\n\n if (\n defaultProps.compactType === COMPACT_TYPE_HORIZONTAL_NOWRAP &&\n defaultProps.cols !== undefined\n ) {\n nowrapGroups[DEFAULT_GROUP] = {\n items: [],\n leftSpace: defaultProps.cols,\n };\n hasNowrapGroups = true;\n }\n\n if (groups) {\n groups.forEach((group) => {\n const resultProps = group.gridProperties?.(defaultProps) || {};\n\n if (\n resultProps.compactType === COMPACT_TYPE_HORIZONTAL_NOWRAP &&\n resultProps.cols !== undefined &&\n group.id\n ) {\n nowrapGroups[group.id] = {\n items: [],\n leftSpace: resultProps.cols,\n };\n hasNowrapGroups = true;\n }\n });\n }\n\n if (hasNowrapGroups) {\n layout.forEach((item) => {\n const widgetId = item.i;\n const parentId = resolveLayoutGroup(item);\n\n if (nowrapGroups[parentId]) {\n // Collecting nowrap elements\n nowrapGroups[parentId].items.push(item);\n nowrapGroups[parentId].leftSpace -= item.w;\n } else if (nowrapAdjustedLayouts.current[widgetId]) {\n // If element is not in horizontal-nowrap cleaning up and reverting adjustLayout values\n delete nowrapAdjustedLayouts.current[widgetId];\n }\n });\n\n Object.entries(nowrapGroups).forEach(([, {items, leftSpace}]) => {\n items.forEach((item) => {\n // setting maxW with adjustLayout fields and saving previous\n nowrapAdjustedLayouts.current[item.i] = item.w + leftSpace;\n });\n });\n }\n }, [props.registerManager, props.groups, visualLayout]);\n\n // Synchronize visual layout during render, so children never see new config with old layout.\n // Keep the previous external layout separate from the drag baseline: a drag updates the latter.\n if (previousEnrichedPropsLayout !== enrichedPropsLayout) {\n setPreviousEnrichedPropsLayout(enrichedPropsLayout);\n\n if (!isEqual(internalBaselineLayoutRef.current, enrichedPropsLayout)) {\n setPendingExternalBaselineLayout({\n layout: enrichedPropsLayout,\n previousBaselineLayout: internalBaselineLayoutRef.current,\n });\n setVisualLayout(enrichedPropsLayout);\n setExternalLayoutRevision((r) => r + 1);\n }\n }\n\n React.useLayoutEffect(() => {\n if (pendingExternalBaselineLayout) {\n if (\n internalBaselineLayoutRef.current ===\n pendingExternalBaselineLayout.previousBaselineLayout\n ) {\n internalBaselineLayoutRef.current = pendingExternalBaselineLayout.layout;\n }\n setPendingExternalBaselineLayout(undefined);\n }\n }, [pendingExternalBaselineLayout]);\n\n const itemsParams = useDeepEqualMemo(\n () =>\n getItemsParams({\n defaultGlobalParams: props.defaultGlobalParams,\n globalParams: props.globalParams,\n config: props.config,\n itemsStateAndParams: props.itemsStateAndParams,\n plugins: props.registerManager.getPlugins(),\n }),\n [\n props.defaultGlobalParams,\n props.globalParams,\n props.config,\n props.itemsStateAndParams,\n props.registerManager,\n ],\n );\n\n const itemsState = useDeepEqualMemo(\n () =>\n getItemsState({\n config: props.config,\n itemsStateAndParams: props.itemsStateAndParams,\n }),\n [props.config, props.itemsStateAndParams],\n );\n\n const getItemsMeta = React.useCallback<DashKitCtxShape['getItemsMeta']>((pluginsRefs) => {\n return pluginsRefs\n .map((ref) => {\n if (!(ref && hasGetMeta(ref))) {\n return undefined;\n }\n return ref.getMeta();\n })\n .filter((item): item is Promise<any> => item !== undefined);\n }, []);\n\n const resultLayout = React.useMemo(() => {\n const adjusted = adjustedLayouts.current;\n const original = originalLayouts.current;\n const nowrapAdjust = nowrapAdjustedLayouts.current;\n\n return visualLayout.map((item) => {\n const widgetId = item.i;\n\n if (widgetId in adjusted || widgetId in nowrapAdjust) {\n original[widgetId] = item;\n // eslint-disable-next-line no-unused-vars\n const {parent: _parent2, ...adjustedItem} = adjusted[widgetId] || item;\n\n adjustedItem.w = item.w;\n adjustedItem.x = item.x;\n adjustedItem.y = item.y;\n\n if (item.parent) {\n (adjustedItem as ConfigLayout).parent = item.parent;\n }\n\n if (widgetId in nowrapAdjust) {\n (adjustedItem as ConfigLayout & {maxW?: number}).maxW = nowrapAdjust[widgetId];\n }\n\n return adjustedItem satisfies ConfigLayout;\n } else {\n if (widgetId in original) {\n delete original[widgetId];\n }\n return item;\n }\n });\n }, [visualLayout, layoutUpdateCounter]);\n\n const reloadItems = React.useCallback<DashKitCtxShape['reloadItems']>((pluginsRefs, data) => {\n pluginsRefs.forEach((ref) => ref && hasReload(ref) && ref.reload(data));\n }, []);\n\n const dragPropsContext = dndContext?.dragProps;\n const onDropDragOverContext = dndContext?.onDropDragOver;\n\n const dragOverPlugin = React.useMemo(() => {\n if (!dragPropsContext) {\n return null;\n }\n\n const pluginType = dragPropsContext.type;\n\n if (props.registerManager.check(pluginType)) {\n return props.registerManager.getItem(pluginType);\n } else {\n // eslint-disable-next-line no-console\n console.error(`Uknown pluginType: ${pluginType}`);\n return null;\n }\n }, [dragPropsContext, props.registerManager]);\n\n const onDropDragOver = React.useCallback<DashKitCtxShape['onDropDragOver']>(\n (_e, group, gridProps, groupLayout, sharedItem) => {\n if (temporaryLayout) {\n resetTemporaryLayout();\n return false;\n }\n\n let dragItemType: string;\n let defaultLayout: RegisterManagerPlugin['defaultLayout'] | {h: number; w: number};\n if (sharedItem) {\n const {type, h, w} = sharedItem;\n dragItemType = type;\n const _defaults = props.registerManager.getItem(type);\n defaultLayout = _defaults ? {..._defaults.defaultLayout, h, w} : {h, w};\n } else if (dragOverPlugin) {\n dragItemType = dragOverPlugin.type;\n defaultLayout = dragOverPlugin.defaultLayout;\n } else {\n return false;\n }\n\n let maxW = gridProps.cols;\n const maxH = Math.min(\n gridProps.maxRows || Infinity,\n 'maxH' in defaultLayout && defaultLayout.maxH ? defaultLayout.maxH : Infinity,\n );\n\n if (gridProps.compactType === COMPACT_TYPE_HORIZONTAL_NOWRAP && gridProps.cols) {\n maxW = groupLayout.reduce((memo, item) => memo - item.w, gridProps.cols);\n }\n\n if (\n maxW === 0 ||\n maxH === 0 ||\n ('minW' in defaultLayout &&\n defaultLayout.minW &&\n maxW &&\n maxW < defaultLayout.minW) ||\n ('minH' in defaultLayout && defaultLayout.minH && maxH < defaultLayout.minH)\n ) {\n return false;\n }\n\n const {\n h = defaultLayout?.h || DEFAULT_WIDGET_HEIGHT,\n w = defaultLayout?.w || DEFAULT_WIDGET_WIDTH,\n } = dragPropsContext?.layout || {};\n\n const itemLayout = {\n h: maxH ? Math.min(h, maxH) : h,\n w: maxW ? Math.min(w, maxW) : w,\n };\n\n if (\n onDropDragOverContext?.(\n {\n ...sharedItem,\n ...itemLayout,\n parent: group,\n type: dragItemType,\n },\n sharedItem ?? null,\n ) === false\n ) {\n return false;\n }\n\n return itemLayout;\n },\n [\n props.registerManager,\n resetTemporaryLayout,\n temporaryLayout,\n dragOverPlugin,\n dragPropsContext,\n onDropDragOverContext,\n ],\n );\n\n const onDropProp = props.onDrop;\n const onDrop = React.useCallback<DashKitCtxShape['onDrop']>(\n (newLayout, item) => {\n if (!dragPropsContext) {\n return;\n }\n\n setTemporaryLayout({\n data: [...newLayout, item],\n dragProps: dragPropsContext,\n });\n\n onDropProp?.({\n newLayout: newLayout.reduce<ConfigLayout[]>((memo, l) => {\n if (l.i !== item.i) {\n memo.push(pick(l, CONFIG_LAYOUT_FIELDS));\n }\n\n return memo;\n }, []),\n itemLayout: pick(item, CONFIG_LAYOUT_FIELDS),\n commit: resetTemporaryLayout,\n dragProps: dragPropsContext,\n });\n },\n [dragPropsContext, onDropProp, setTemporaryLayout, resetTemporaryLayout],\n );\n\n const dashkitContextValue = React.useMemo(\n () => ({\n externalLayoutRevision,\n config: props.config,\n configItems,\n groups: props.groups,\n context: props.context,\n noOverlay: props.noOverlay,\n focusable: props.focusable,\n defaultGlobalParams: props.globalParams,\n globalParams: props.globalParams,\n editMode: props.editMode,\n settings: props.settings,\n onItemMountChange: props.onItemMountChange,\n onItemRender: props.onItemRender,\n draggableHandleClassName: props.draggableHandleClassName,\n\n registerManager: props.registerManager,\n forwardedMetaRef: props.forwardedMetaRef,\n\n layout: resultLayout,\n temporaryLayout,\n layoutChange: onLayoutChange,\n memorizeOriginalLayout,\n revertToOriginalLayout,\n\n itemsState,\n itemsParams,\n onItemStateAndParamsChange,\n\n getItemsMeta,\n reloadItems,\n\n onDrop,\n onDropDragOver,\n outerDnDEnable,\n dragOverPlugin,\n\n onItemFocus: props.onItemFocus,\n onItemBlur: props.onItemBlur,\n\n /* default handlers bypass */\n onDragStart: props.onDragStart,\n onDrag: props.onDrag,\n onDragStop: props.onDragStop,\n onResizeStart: props.onResizeStart,\n onResize: props.onResize,\n onResizeStop: props.onResizeStop,\n }),\n [\n externalLayoutRevision,\n resultLayout,\n temporaryLayout,\n props.config,\n configItems,\n props.groups,\n props.context,\n props.noOverlay,\n props.focusable,\n props.globalParams,\n props.editMode,\n props.settings,\n itemsState,\n itemsParams,\n props.registerManager,\n onItemStateAndParamsChange,\n onDrop,\n onDropDragOver,\n onLayoutChange,\n props.onItemMountChange,\n props.onItemRender,\n getItemsMeta,\n reloadItems,\n memorizeOriginalLayout,\n revertToOriginalLayout,\n props.forwardedMetaRef,\n props.draggableHandleClassName,\n outerDnDEnable,\n dragOverPlugin,\n\n props.onItemFocus,\n props.onItemBlur,\n\n props.onDragStart,\n props.onDrag,\n props.onDragStop,\n props.onResizeStart,\n props.onResize,\n props.onResizeStop,\n ],\n );\n\n const overlayMenuItems = props.overlayMenuItems || props.registerManager.settings.menu;\n const controlsContextValue = React.useMemo(\n () => ({\n overlayControls: props.overlayControls,\n context: props.context,\n\n itemsStateAndParams: props.itemsStateAndParams,\n itemsState,\n itemsParams,\n\n getPreparedCopyItemOptions: props.getPreparedCopyItemOptions,\n onCopyFulfill: props.onCopyFulfill,\n\n menu: overlayMenuItems,\n\n editItem: props.onItemEdit,\n removeItem: onItemRemove,\n getLayoutItem: getLayoutItem,\n }),\n [\n props.overlayControls,\n props.context,\n props.itemsStateAndParams,\n props.onItemEdit,\n props.getPreparedCopyItemOptions,\n props.onCopyFulfill,\n overlayMenuItems,\n itemsState,\n itemsParams,\n onItemRemove,\n getLayoutItem,\n ],\n );\n\n return {controlsContextValue, dashkitContextValue};\n}\n\nexport function withContext(Component: React.ComponentType) {\n const WithContext = (props: DashKitWithContextProps) => {\n const {dashkitContextValue, controlsContextValue} = useMemoStateContext(props);\n\n return (\n <DashKitContext.Provider value={dashkitContextValue}>\n <DashkitOverlayControlsContext.Provider value={controlsContextValue}>\n <Component />\n </DashkitOverlayControlsContext.Provider>\n </DashKitContext.Provider>\n );\n };\n\n WithContext.displayName = `withContext(${\n Component.displayName || Component.name || 'Component'\n })`;\n\n return WithContext;\n}\n"]}
|
package/build/cjs/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"10.4.
|
|
1
|
+
{"version":"10.4.3","type":"commonjs","sideEffects":["*.scss","*.css"]}
|
|
@@ -20,16 +20,16 @@ jest.mock('../../GridLayout/GridLayout', () => {
|
|
|
20
20
|
});
|
|
21
21
|
import React from 'react';
|
|
22
22
|
import { act, render } from '@testing-library/react';
|
|
23
|
-
import { DashKitContext } from "../../../context/index.js";
|
|
23
|
+
import { DashKitContext, DashkitOverlayControlsContext } from "../../../context/index.js";
|
|
24
24
|
import { withContext } from "../../../hocs/withContext.js";
|
|
25
25
|
import { RegisterManager } from "../../../utils/index.js";
|
|
26
26
|
import { DashKit, _emitSymbol } from "../DashKit.js";
|
|
27
27
|
const PLUGIN_TYPE = 'controlled-layout-test';
|
|
28
|
-
const createConfig = (x) => ({
|
|
28
|
+
const createConfig = (x, itemIds = ['item1']) => ({
|
|
29
29
|
salt: 'test',
|
|
30
30
|
counter: 1,
|
|
31
|
-
items:
|
|
32
|
-
layout:
|
|
31
|
+
items: itemIds.map((id) => ({ id, type: PLUGIN_TYPE, namespace: 'default', data: {} })),
|
|
32
|
+
layout: itemIds.map((i) => ({ i, x, y: 0, w: 2, h: 2 })),
|
|
33
33
|
aliases: {},
|
|
34
34
|
connections: [],
|
|
35
35
|
});
|
|
@@ -63,14 +63,78 @@ const createProps = ({ config, emitDashKitEvent, onChange = jest.fn(), }) => {
|
|
|
63
63
|
};
|
|
64
64
|
};
|
|
65
65
|
let captured = {};
|
|
66
|
+
let capturedControlsContext;
|
|
67
|
+
let renderedItemIds = [];
|
|
68
|
+
let layoutEffectAction;
|
|
66
69
|
const ContextCapture = () => {
|
|
67
|
-
|
|
70
|
+
const dashkitContext = React.useContext(DashKitContext);
|
|
71
|
+
const controlsContext = React.useContext(DashkitOverlayControlsContext);
|
|
72
|
+
captured = dashkitContext;
|
|
73
|
+
capturedControlsContext = controlsContext || undefined;
|
|
74
|
+
renderedItemIds.push({
|
|
75
|
+
config: captured.configItems.map(({ id }) => id),
|
|
76
|
+
layout: captured.layout.map(({ i }) => i),
|
|
77
|
+
});
|
|
78
|
+
React.useLayoutEffect(() => {
|
|
79
|
+
layoutEffectAction === null || layoutEffectAction === void 0 ? void 0 : layoutEffectAction(dashkitContext, controlsContext || undefined);
|
|
80
|
+
}, [controlsContext, dashkitContext]);
|
|
68
81
|
return null;
|
|
69
82
|
};
|
|
70
83
|
const TestComponent = withContext(ContextCapture);
|
|
71
84
|
describe('DashKit controlled layout strategy', () => {
|
|
72
85
|
beforeEach(() => {
|
|
73
86
|
captured = {};
|
|
87
|
+
capturedControlsContext = undefined;
|
|
88
|
+
renderedItemIds = [];
|
|
89
|
+
layoutEffectAction = undefined;
|
|
90
|
+
});
|
|
91
|
+
it('updates visual layout in same render as externally added config item', () => {
|
|
92
|
+
const initialConfig = createConfig(0);
|
|
93
|
+
const externalConfig = createConfig(3, ['item1', 'item2']);
|
|
94
|
+
const dashkit = new DashKit(DashKit.defaultProps);
|
|
95
|
+
const { rerender } = render(React.createElement(TestComponent, Object.assign({}, createProps({ config: initialConfig, emitDashKitEvent: dashkit[_emitSymbol] }))));
|
|
96
|
+
act(() => {
|
|
97
|
+
rerender(React.createElement(TestComponent, Object.assign({}, createProps({
|
|
98
|
+
config: externalConfig,
|
|
99
|
+
emitDashKitEvent: dashkit[_emitSymbol],
|
|
100
|
+
}))));
|
|
101
|
+
});
|
|
102
|
+
expect(renderedItemIds).toEqual(expect.arrayContaining([
|
|
103
|
+
{ config: ['item1'], layout: ['item1'] },
|
|
104
|
+
{ config: ['item1', 'item2'], layout: ['item1', 'item2'] },
|
|
105
|
+
]));
|
|
106
|
+
expect(renderedItemIds.every(({ config, layout }) => config.join(',') === layout.join(','))).toBe(true);
|
|
107
|
+
});
|
|
108
|
+
it('uses external baseline in child layout effect', () => {
|
|
109
|
+
const initialConfig = createConfig(0);
|
|
110
|
+
const externalConfig = createConfig(3, ['item1', 'item2']);
|
|
111
|
+
const nextLayout = [
|
|
112
|
+
{ i: 'item1', x: 4, y: 0, w: 2, h: 2 },
|
|
113
|
+
externalConfig.layout[1],
|
|
114
|
+
];
|
|
115
|
+
const dashkit = new DashKit(DashKit.defaultProps);
|
|
116
|
+
const onEventChange = jest.fn();
|
|
117
|
+
let layoutItemInLayoutEffect;
|
|
118
|
+
let layoutItemAfterLayoutChange;
|
|
119
|
+
dashkit.on('change', onEventChange);
|
|
120
|
+
const { rerender } = render(React.createElement(TestComponent, Object.assign({}, createProps({ config: initialConfig, emitDashKitEvent: dashkit[_emitSymbol] }))));
|
|
121
|
+
layoutEffectAction = (dashkitContext, controlsContext) => {
|
|
122
|
+
layoutEffectAction = undefined;
|
|
123
|
+
layoutItemInLayoutEffect = (controlsContext === null || controlsContext === void 0 ? void 0 : controlsContext.getLayoutItem('item2')) || undefined;
|
|
124
|
+
dashkitContext.layoutChange(nextLayout);
|
|
125
|
+
layoutItemAfterLayoutChange = (controlsContext === null || controlsContext === void 0 ? void 0 : controlsContext.getLayoutItem('item1')) || undefined;
|
|
126
|
+
};
|
|
127
|
+
act(() => {
|
|
128
|
+
rerender(React.createElement(TestComponent, Object.assign({}, createProps({
|
|
129
|
+
config: externalConfig,
|
|
130
|
+
emitDashKitEvent: dashkit[_emitSymbol],
|
|
131
|
+
}))));
|
|
132
|
+
});
|
|
133
|
+
expect(layoutItemInLayoutEffect).toMatchObject(externalConfig.layout[1]);
|
|
134
|
+
expect(onEventChange).toHaveBeenCalledTimes(1);
|
|
135
|
+
expect(onEventChange.mock.calls[0][0].previousLayout).toMatchObject(externalConfig.layout);
|
|
136
|
+
expect(layoutItemAfterLayoutChange).toMatchObject(nextLayout[0]);
|
|
137
|
+
expect(capturedControlsContext === null || capturedControlsContext === void 0 ? void 0 : capturedControlsContext.getLayoutItem('item1')).toMatchObject(nextLayout[0]);
|
|
74
138
|
});
|
|
75
139
|
it('Case 1: keeps internal layout after change event without config update, then applies external config update', () => {
|
|
76
140
|
const initialConfig = createConfig(0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controlled-layout.test.js","sourceRoot":"../../../../../src","sources":["components/DashKit/__tests__/controlled-layout.test.tsx"],"names":[],"mappings":"AAAA;;GAEG;AAEH,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC;IAClC,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;CACjB,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAChC,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnC,OAAO;QACH,MAAM,EAAE,CAAC,EAAC,QAAQ,EAAuB,EAAE,EAAE,CACzC,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC;QACrD,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI;QACxB,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI;KACnB,CAAC;AACN,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnC,OAAO,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,GAAG,EAAE,MAAM,EAAC,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAC,cAAc,EAAuB,kCAAyB;AACtE,OAAO,EAA+B,WAAW,EAAC,qCAAkC;AAEpF,OAAO,EAAC,eAAe,EAAC,gCAAuB;AAC/C,OAAO,EAAC,OAAO,EAAE,WAAW,EAAC,sBAAmB;AAEhD,MAAM,WAAW,GAAG,wBAAwB,CAAC;AAE7C,MAAM,YAAY,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC;IACzC,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC,EAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAC,CAAC;IACzE,MAAM,EAAE,CAAC,EAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAC,CAAC;IAC3C,OAAO,EAAE,EAAE;IACX,WAAW,EAAE,EAAE;CAClB,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,EACjB,MAAM,EACN,gBAAgB,EAChB,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,GAKvB,EAAE,EAAE;IACD,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC9C,eAAe,CAAC,cAAc,CAAC;QAC3B,IAAI,EAAE,WAAW;QACjB,aAAa,EAAE,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAC;QACvC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI;KACvB,CAAC,CAAC;IAEH,OAAO;QACH,MAAM;QACN,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,eAAe;QACf,gBAAgB,EAAE,KAAK,CAAC,SAAS,EAAE;QACnC,gBAAgB;QAChB,mBAAmB,EAAE,EAAE;QACvB,mBAAmB,EAAE,EAAE;QACvB,YAAY,EAAE,EAAE;QAChB,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE;YACN,kBAAkB,EAAE,CAAC;YACrB,aAAa,EAAE,KAAK;SACvB;QACD,SAAS,EAAE,KAAK;QAChB,SAAS,EAAE,KAAK;QAChB,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE;QACrB,QAAQ;QACR,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;KACpB,CAAC;AACN,CAAC,CAAC;AAEF,IAAI,QAAQ,GAAoB,EAAqB,CAAC;AAEtD,MAAM,cAAc,GAAG,GAAG,EAAE;IACxB,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;AAElD,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAChD,UAAU,CAAC,GAAG,EAAE;QACZ,QAAQ,GAAG,EAAqB,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6GAA6G,EAAE,GAAG,EAAE;QACnH,MAAM,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,kBAAkB,GAAqB,CAAC,EAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC;QACpF,MAAM,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,OAAO,CACvB,OAAO,CAAC,YAAmE,CAC9E,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAEhC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAEpC,MAAM,EAAC,QAAQ,EAAC,GAAG,MAAM,CACrB,oBAAC,aAAa,oBACN,WAAW,CAAC;YACZ,MAAM,EAAE,aAAa;YACrB,gBAAgB,EAAE,OAAO,CAAC,WAAW,CAAC;YACtC,QAAQ;SACX,CAAC,EACJ,CACL,CAAC;QAEF,gEAAgE;QAChE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5D,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAElD,GAAG,CAAC,GAAG,EAAE;YACL,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,yDAAyD;QACzD,MAAM,CAAC,aAAa,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC1E,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAE1C,mCAAmC;QACnC,GAAG,CAAC,GAAG,EAAE;YACL,QAAQ,CACJ,oBAAC,aAAa,oBACN,WAAW,CAAC;gBACZ,MAAM,EAAE,cAAc;gBACtB,gBAAgB,EAAE,OAAO,CAAC,WAAW,CAAC;gBACtC,QAAQ;aACX,CAAC,EACJ,CACL,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,yDAAyD;QACzD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAChF,MAAM,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,kBAAkB,GAAqB,CAAC,EAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC;QACpF,MAAM,OAAO,GAAG,IAAI,OAAO,CACvB,OAAO,CAAC,YAAmE,CAC9E,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,eAAe,GAAuB,EAAE,CAAC;QAE/C,gDAAgD;QAChD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3B,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACnC,aAAa,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,MAAM,EAAC,QAAQ,EAAC,GAAG,MAAM,CACrB,oBAAC,aAAa,oBACN,WAAW,CAAC;YACZ,MAAM,EAAE,aAAa;YACrB,gBAAgB,EAAE,OAAO,CAAC,WAAW,CAAC;YACtC,QAAQ;SACX,CAAC,EACJ,CACL,CAAC;QAEF,oCAAoC;QACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAE5D,wBAAwB;QACxB,GAAG,CAAC,GAAG,EAAE;YACL,QAAQ,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,oCAAoC;QACpC,MAAM,CAAC,aAAa,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAEvD,uFAAuF;QACvF,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAE1C,kEAAkE;QAClE,GAAG,CAAC,GAAG,EAAE;YACL,QAAQ,CACJ,oBAAC,aAAa,oBACN,WAAW,CAAC;gBACZ,MAAM,EAAE,aAAa;gBACrB,gBAAgB,EAAE,OAAO,CAAC,WAAW,CAAC;gBACtC,QAAQ;aACX,CAAC,EACJ,CACL,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,+DAA+D;QAC/D,4CAA4C;QAC5C,MAAM,CAAC,aAAa,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC7E,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,cAAc,GAAqB,CAAC,EAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAC,CAAC,CAAC;QAChF,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAEhC,MAAM,OAAO,GAAG,IAAI,OAAO,CACvB,OAAO,CAAC,YAAmE,CAC9E,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAEhC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAEpC,MAAM,EAAC,QAAQ,EAAC,GAAG,MAAM,CACrB,oBAAC,aAAa,oBACN,WAAW,CAAC;YACZ,MAAM,EAAE,OAAO;YACf,gBAAgB,EAAE,OAAO,CAAC,WAAW,CAAC;YACtC,QAAQ;SACX,CAAC,EACJ,CACL,CAAC;QAEF,qBAAqB;QACrB,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEtD,qCAAqC;QACrC,GAAG,CAAC,GAAG,EAAE;YACL,QAAQ,CACJ,oBAAC,aAAa,oBACN,WAAW,CAAC;gBACZ,MAAM,EAAE,OAAO;gBACf,gBAAgB,EAAE,OAAO,CAAC,WAAW,CAAC;gBACtC,QAAQ;aACX,CAAC,EACJ,CACL,CAAC;QACN,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAEtD,yCAAyC;QACzC,GAAG,CAAC,GAAG,EAAE;YACL,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,aAAa,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAEtE,gDAAgD;QAChD,GAAG,CAAC,GAAG,EAAE;YACL,QAAQ,CACJ,oBAAC,aAAa,oBACN,WAAW,CAAC;gBACZ,MAAM,EAAE,OAAO;gBACf,gBAAgB,EAAE,OAAO,CAAC,WAAW,CAAC;gBACtC,QAAQ;aACX,CAAC,EACJ,CACL,CAAC;QACN,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC","sourcesContent":["/**\n * @jest-environment jsdom\n */\n\njest.mock('@gravity-ui/icons', () => ({\n Ellipsis: 'ellipsis',\n Gear: 'gear',\n Xmark: 'xmark',\n}));\n\njest.mock('@gravity-ui/uikit', () => {\n const ReactMock = require('react');\n\n return {\n Button: ({children}: {children?: unknown}) =>\n ReactMock.createElement('button', null, children),\n DropdownMenu: () => null,\n Icon: () => null,\n };\n});\n\njest.mock('../../GridLayout/GridLayout', () => {\n const ReactMock = require('react');\n\n return ReactMock.forwardRef(() => null);\n});\n\nimport React from 'react';\n\nimport {act, render} from '@testing-library/react';\n\nimport {DashKitContext, type DashKitCtxShape} from '../../../context';\nimport {type DashKitWithContextProps, withContext} from '../../../hocs/withContext';\nimport type {Config} from '../../../shared';\nimport {RegisterManager} from '../../../utils';\nimport {DashKit, _emitSymbol} from '../DashKit';\n\nconst PLUGIN_TYPE = 'controlled-layout-test';\n\nconst createConfig = (x: number): Config => ({\n salt: 'test',\n counter: 1,\n items: [{id: 'item1', type: PLUGIN_TYPE, namespace: 'default', data: {}}],\n layout: [{i: 'item1', x, y: 0, w: 2, h: 2}],\n aliases: {},\n connections: [],\n});\n\nconst createProps = ({\n config,\n emitDashKitEvent,\n onChange = jest.fn(),\n}: {\n config: Config;\n emitDashKitEvent: DashKitWithContextProps['emitDashKitEvent'];\n onChange?: jest.Mock;\n}) => {\n const registerManager = new RegisterManager();\n registerManager.registerPlugin({\n type: PLUGIN_TYPE,\n defaultLayout: {x: 0, y: 0, w: 2, h: 2},\n renderer: () => null,\n });\n\n return {\n config,\n editMode: true,\n layout: config.layout,\n registerManager,\n forwardedMetaRef: React.createRef(),\n emitDashKitEvent,\n itemsStateAndParams: {},\n defaultGlobalParams: {},\n globalParams: {},\n context: {},\n settings: {\n autoupdateInterval: 0,\n silentLoading: false,\n },\n noOverlay: false,\n focusable: false,\n onItemEdit: jest.fn(),\n onChange,\n onDrop: jest.fn(),\n };\n};\n\nlet captured: DashKitCtxShape = {} as DashKitCtxShape;\n\nconst ContextCapture = () => {\n captured = React.useContext(DashKitContext);\n return null;\n};\n\nconst TestComponent = withContext(ContextCapture);\n\ndescribe('DashKit controlled layout strategy', () => {\n beforeEach(() => {\n captured = {} as DashKitCtxShape;\n });\n\n it('Case 1: keeps internal layout after change event without config update, then applies external config update', () => {\n const initialConfig = createConfig(0);\n const nextInternalLayout: Config['layout'] = [{i: 'item1', x: 1, y: 0, w: 2, h: 2}];\n const externalConfig = createConfig(3);\n const dashkit = new DashKit(\n DashKit.defaultProps as unknown as ConstructorParameters<typeof DashKit>[0],\n );\n const onChange = jest.fn();\n const onEventChange = jest.fn();\n\n dashkit.on('change', onEventChange);\n\n const {rerender} = render(\n <TestComponent\n {...createProps({\n config: initialConfig,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n\n // Layout is now enriched with plugin defaults (minW, minH, etc)\n expect(captured.layout).toMatchObject(initialConfig.layout);\n expect(captured.layout[0]).toHaveProperty('minW');\n expect(captured.layout[0]).toHaveProperty('minH');\n\n act(() => {\n captured.layoutChange(nextInternalLayout);\n });\n\n // Verify that change event was fired with correct layout\n expect(onEventChange).toHaveBeenCalledTimes(1);\n expect(onEventChange.mock.calls[0][0].layout).toEqual(nextInternalLayout);\n expect(onChange).toHaveBeenCalledTimes(1);\n\n // Now apply external config update\n act(() => {\n rerender(\n <TestComponent\n {...createProps({\n config: externalConfig,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n });\n\n // External props should win and layout should be updated\n expect(captured.layout).toMatchObject(externalConfig.layout);\n });\n\n it('Case 2: uses on(change) without updating props - internal state persists', () => {\n const initialConfig = createConfig(0);\n const nextInternalLayout: Config['layout'] = [{i: 'item1', x: 5, y: 0, w: 2, h: 2}];\n const dashkit = new DashKit(\n DashKit.defaultProps as unknown as ConstructorParameters<typeof DashKit>[0],\n );\n const onChange = jest.fn();\n const onEventChange = jest.fn();\n const capturedLayouts: Config['layout'][] = [];\n\n // Listen to change event but DON'T update props\n dashkit.on('change', (event) => {\n capturedLayouts.push(event.layout);\n onEventChange(event);\n });\n\n const {rerender} = render(\n <TestComponent\n {...createProps({\n config: initialConfig,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n\n // Initial layout should be enriched\n expect(captured.layout).toMatchObject(initialConfig.layout);\n\n // Trigger layout change\n act(() => {\n captured.layoutChange(nextInternalLayout);\n });\n\n // Event should fire with new layout\n expect(onEventChange).toHaveBeenCalledTimes(1);\n expect(capturedLayouts[0]).toEqual(nextInternalLayout);\n\n // onChange callback fires (consumer COULD update props here, but doesn't in this case)\n expect(onChange).toHaveBeenCalledTimes(1);\n\n // Props remain unchanged - simulating consumer NOT updating props\n act(() => {\n rerender(\n <TestComponent\n {...createProps({\n config: initialConfig,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n });\n\n // Layout should still reflect the change (internal state wins)\n // Note: we verify the event fired correctly\n expect(onEventChange).toHaveBeenCalledTimes(1);\n expect(capturedLayouts[0]).toMatchObject(nextInternalLayout);\n });\n\n it('Case 3: alternates between props.layout updates and on(change) events', () => {\n const config1 = createConfig(0);\n const config2 = createConfig(2);\n const internalChange: Config['layout'] = [{i: 'item1', x: 5, y: 0, w: 2, h: 2}];\n const config3 = createConfig(8);\n\n const dashkit = new DashKit(\n DashKit.defaultProps as unknown as ConstructorParameters<typeof DashKit>[0],\n );\n const onChange = jest.fn();\n const onEventChange = jest.fn();\n\n dashkit.on('change', onEventChange);\n\n const {rerender} = render(\n <TestComponent\n {...createProps({\n config: config1,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n\n // Start with config1\n expect(captured.layout).toMatchObject(config1.layout);\n\n // Update via props (external update)\n act(() => {\n rerender(\n <TestComponent\n {...createProps({\n config: config2,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n });\n expect(captured.layout).toMatchObject(config2.layout);\n\n // Update via internal change (user drag)\n act(() => {\n captured.layoutChange(internalChange);\n });\n expect(onEventChange).toHaveBeenCalledTimes(1);\n expect(onEventChange.mock.calls[0][0].layout).toEqual(internalChange);\n\n // Update via props again (external update wins)\n act(() => {\n rerender(\n <TestComponent\n {...createProps({\n config: config3,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n });\n expect(captured.layout).toMatchObject(config3.layout);\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"controlled-layout.test.js","sourceRoot":"../../../../../src","sources":["components/DashKit/__tests__/controlled-layout.test.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * @jest-environment jsdom\n */\n\njest.mock('@gravity-ui/icons', () => ({\n Ellipsis: 'ellipsis',\n Gear: 'gear',\n Xmark: 'xmark',\n}));\n\njest.mock('@gravity-ui/uikit', () => {\n const ReactMock = require('react');\n\n return {\n Button: ({children}: {children?: unknown}) =>\n ReactMock.createElement('button', null, children),\n DropdownMenu: () => null,\n Icon: () => null,\n };\n});\n\njest.mock('../../GridLayout/GridLayout', () => {\n const ReactMock = require('react');\n\n return ReactMock.forwardRef(() => null);\n});\n\nimport React from 'react';\n\nimport {act, render} from '@testing-library/react';\n\nimport {DashKitContext, DashkitOverlayControlsContext} from '../../../context';\nimport type {DashKitCtxShape, OverlayControlsCtxShape} from '../../../context';\nimport {type DashKitWithContextProps, withContext} from '../../../hocs/withContext';\nimport type {Config} from '../../../shared';\nimport {RegisterManager} from '../../../utils';\nimport {DashKit, _emitSymbol} from '../DashKit';\n\nconst PLUGIN_TYPE = 'controlled-layout-test';\n\nconst createConfig = (x: number, itemIds = ['item1']): Config => ({\n salt: 'test',\n counter: 1,\n items: itemIds.map((id) => ({id, type: PLUGIN_TYPE, namespace: 'default', data: {}})),\n layout: itemIds.map((i) => ({i, x, y: 0, w: 2, h: 2})),\n aliases: {},\n connections: [],\n});\n\nconst createProps = ({\n config,\n emitDashKitEvent,\n onChange = jest.fn(),\n}: {\n config: Config;\n emitDashKitEvent: DashKitWithContextProps['emitDashKitEvent'];\n onChange?: jest.Mock;\n}) => {\n const registerManager = new RegisterManager();\n registerManager.registerPlugin({\n type: PLUGIN_TYPE,\n defaultLayout: {x: 0, y: 0, w: 2, h: 2},\n renderer: () => null,\n });\n\n return {\n config,\n editMode: true,\n layout: config.layout,\n registerManager,\n forwardedMetaRef: React.createRef(),\n emitDashKitEvent,\n itemsStateAndParams: {},\n defaultGlobalParams: {},\n globalParams: {},\n context: {},\n settings: {\n autoupdateInterval: 0,\n silentLoading: false,\n },\n noOverlay: false,\n focusable: false,\n onItemEdit: jest.fn(),\n onChange,\n onDrop: jest.fn(),\n };\n};\n\nlet captured: DashKitCtxShape = {} as DashKitCtxShape;\nlet capturedControlsContext: OverlayControlsCtxShape | undefined;\nlet renderedItemIds: Array<{config: string[]; layout: string[]}> = [];\nlet layoutEffectAction:\n | ((\n dashkitContext: DashKitCtxShape,\n controlsContext: OverlayControlsCtxShape | undefined,\n ) => void)\n | undefined;\n\nconst ContextCapture = () => {\n const dashkitContext = React.useContext(DashKitContext);\n const controlsContext = React.useContext(DashkitOverlayControlsContext);\n\n captured = dashkitContext;\n capturedControlsContext = controlsContext || undefined;\n renderedItemIds.push({\n config: captured.configItems.map(({id}) => id),\n layout: captured.layout.map(({i}) => i),\n });\n\n React.useLayoutEffect(() => {\n layoutEffectAction?.(dashkitContext, controlsContext || undefined);\n }, [controlsContext, dashkitContext]);\n\n return null;\n};\n\nconst TestComponent = withContext(ContextCapture);\n\ndescribe('DashKit controlled layout strategy', () => {\n beforeEach(() => {\n captured = {} as DashKitCtxShape;\n capturedControlsContext = undefined;\n renderedItemIds = [];\n layoutEffectAction = undefined;\n });\n\n it('updates visual layout in same render as externally added config item', () => {\n const initialConfig = createConfig(0);\n const externalConfig = createConfig(3, ['item1', 'item2']);\n const dashkit = new DashKit(\n DashKit.defaultProps as unknown as ConstructorParameters<typeof DashKit>[0],\n );\n\n const {rerender} = render(\n <TestComponent\n {...createProps({config: initialConfig, emitDashKitEvent: dashkit[_emitSymbol]})}\n />,\n );\n\n act(() => {\n rerender(\n <TestComponent\n {...createProps({\n config: externalConfig,\n emitDashKitEvent: dashkit[_emitSymbol],\n })}\n />,\n );\n });\n\n expect(renderedItemIds).toEqual(\n expect.arrayContaining([\n {config: ['item1'], layout: ['item1']},\n {config: ['item1', 'item2'], layout: ['item1', 'item2']},\n ]),\n );\n expect(\n renderedItemIds.every(({config, layout}) => config.join(',') === layout.join(',')),\n ).toBe(true);\n });\n\n it('uses external baseline in child layout effect', () => {\n const initialConfig = createConfig(0);\n const externalConfig = createConfig(3, ['item1', 'item2']);\n const nextLayout: Config['layout'] = [\n {i: 'item1', x: 4, y: 0, w: 2, h: 2},\n externalConfig.layout[1],\n ];\n const dashkit = new DashKit(\n DashKit.defaultProps as unknown as ConstructorParameters<typeof DashKit>[0],\n );\n const onEventChange = jest.fn();\n let layoutItemInLayoutEffect: Config['layout'][number] | undefined;\n let layoutItemAfterLayoutChange: Config['layout'][number] | undefined;\n\n dashkit.on('change', onEventChange);\n\n const {rerender} = render(\n <TestComponent\n {...createProps({config: initialConfig, emitDashKitEvent: dashkit[_emitSymbol]})}\n />,\n );\n\n layoutEffectAction = (dashkitContext, controlsContext) => {\n layoutEffectAction = undefined;\n layoutItemInLayoutEffect = controlsContext?.getLayoutItem('item2') || undefined;\n dashkitContext.layoutChange(nextLayout);\n layoutItemAfterLayoutChange = controlsContext?.getLayoutItem('item1') || undefined;\n };\n\n act(() => {\n rerender(\n <TestComponent\n {...createProps({\n config: externalConfig,\n emitDashKitEvent: dashkit[_emitSymbol],\n })}\n />,\n );\n });\n\n expect(layoutItemInLayoutEffect).toMatchObject(externalConfig.layout[1]);\n expect(onEventChange).toHaveBeenCalledTimes(1);\n expect(onEventChange.mock.calls[0][0].previousLayout).toMatchObject(externalConfig.layout);\n expect(layoutItemAfterLayoutChange).toMatchObject(nextLayout[0]);\n expect(capturedControlsContext?.getLayoutItem('item1')).toMatchObject(nextLayout[0]);\n });\n\n it('Case 1: keeps internal layout after change event without config update, then applies external config update', () => {\n const initialConfig = createConfig(0);\n const nextInternalLayout: Config['layout'] = [{i: 'item1', x: 1, y: 0, w: 2, h: 2}];\n const externalConfig = createConfig(3);\n const dashkit = new DashKit(\n DashKit.defaultProps as unknown as ConstructorParameters<typeof DashKit>[0],\n );\n const onChange = jest.fn();\n const onEventChange = jest.fn();\n\n dashkit.on('change', onEventChange);\n\n const {rerender} = render(\n <TestComponent\n {...createProps({\n config: initialConfig,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n\n // Layout is now enriched with plugin defaults (minW, minH, etc)\n expect(captured.layout).toMatchObject(initialConfig.layout);\n expect(captured.layout[0]).toHaveProperty('minW');\n expect(captured.layout[0]).toHaveProperty('minH');\n\n act(() => {\n captured.layoutChange(nextInternalLayout);\n });\n\n // Verify that change event was fired with correct layout\n expect(onEventChange).toHaveBeenCalledTimes(1);\n expect(onEventChange.mock.calls[0][0].layout).toEqual(nextInternalLayout);\n expect(onChange).toHaveBeenCalledTimes(1);\n\n // Now apply external config update\n act(() => {\n rerender(\n <TestComponent\n {...createProps({\n config: externalConfig,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n });\n\n // External props should win and layout should be updated\n expect(captured.layout).toMatchObject(externalConfig.layout);\n });\n\n it('Case 2: uses on(change) without updating props - internal state persists', () => {\n const initialConfig = createConfig(0);\n const nextInternalLayout: Config['layout'] = [{i: 'item1', x: 5, y: 0, w: 2, h: 2}];\n const dashkit = new DashKit(\n DashKit.defaultProps as unknown as ConstructorParameters<typeof DashKit>[0],\n );\n const onChange = jest.fn();\n const onEventChange = jest.fn();\n const capturedLayouts: Config['layout'][] = [];\n\n // Listen to change event but DON'T update props\n dashkit.on('change', (event) => {\n capturedLayouts.push(event.layout);\n onEventChange(event);\n });\n\n const {rerender} = render(\n <TestComponent\n {...createProps({\n config: initialConfig,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n\n // Initial layout should be enriched\n expect(captured.layout).toMatchObject(initialConfig.layout);\n\n // Trigger layout change\n act(() => {\n captured.layoutChange(nextInternalLayout);\n });\n\n // Event should fire with new layout\n expect(onEventChange).toHaveBeenCalledTimes(1);\n expect(capturedLayouts[0]).toEqual(nextInternalLayout);\n\n // onChange callback fires (consumer COULD update props here, but doesn't in this case)\n expect(onChange).toHaveBeenCalledTimes(1);\n\n // Props remain unchanged - simulating consumer NOT updating props\n act(() => {\n rerender(\n <TestComponent\n {...createProps({\n config: initialConfig,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n });\n\n // Layout should still reflect the change (internal state wins)\n // Note: we verify the event fired correctly\n expect(onEventChange).toHaveBeenCalledTimes(1);\n expect(capturedLayouts[0]).toMatchObject(nextInternalLayout);\n });\n\n it('Case 3: alternates between props.layout updates and on(change) events', () => {\n const config1 = createConfig(0);\n const config2 = createConfig(2);\n const internalChange: Config['layout'] = [{i: 'item1', x: 5, y: 0, w: 2, h: 2}];\n const config3 = createConfig(8);\n\n const dashkit = new DashKit(\n DashKit.defaultProps as unknown as ConstructorParameters<typeof DashKit>[0],\n );\n const onChange = jest.fn();\n const onEventChange = jest.fn();\n\n dashkit.on('change', onEventChange);\n\n const {rerender} = render(\n <TestComponent\n {...createProps({\n config: config1,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n\n // Start with config1\n expect(captured.layout).toMatchObject(config1.layout);\n\n // Update via props (external update)\n act(() => {\n rerender(\n <TestComponent\n {...createProps({\n config: config2,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n });\n expect(captured.layout).toMatchObject(config2.layout);\n\n // Update via internal change (user drag)\n act(() => {\n captured.layoutChange(internalChange);\n });\n expect(onEventChange).toHaveBeenCalledTimes(1);\n expect(onEventChange.mock.calls[0][0].layout).toEqual(internalChange);\n\n // Update via props again (external update wins)\n act(() => {\n rerender(\n <TestComponent\n {...createProps({\n config: config3,\n emitDashKitEvent: dashkit[_emitSymbol],\n onChange,\n })}\n />,\n );\n });\n expect(captured.layout).toMatchObject(config3.layout);\n });\n});\n"]}
|
|
@@ -37,6 +37,16 @@ function useMemoStateContext(props) {
|
|
|
37
37
|
[props.config.layout, props.registerManager]);
|
|
38
38
|
const internalBaselineLayoutRef = React.useRef(enrichedPropsLayout);
|
|
39
39
|
const [visualLayout, setVisualLayout] = React.useState(enrichedPropsLayout);
|
|
40
|
+
const [previousEnrichedPropsLayout, setPreviousEnrichedPropsLayout] = React.useState(enrichedPropsLayout);
|
|
41
|
+
const [pendingExternalBaselineLayout, setPendingExternalBaselineLayout] = React.useState();
|
|
42
|
+
const getBaselineLayout = React.useCallback(() => {
|
|
43
|
+
if (pendingExternalBaselineLayout &&
|
|
44
|
+
internalBaselineLayoutRef.current ===
|
|
45
|
+
pendingExternalBaselineLayout.previousBaselineLayout) {
|
|
46
|
+
return pendingExternalBaselineLayout.layout;
|
|
47
|
+
}
|
|
48
|
+
return internalBaselineLayoutRef.current;
|
|
49
|
+
}, [pendingExternalBaselineLayout]);
|
|
40
50
|
const [externalLayoutRevision, setExternalLayoutRevision] = React.useState(0);
|
|
41
51
|
const [temporaryLayout, setTemporaryLayout] = React.useState(null);
|
|
42
52
|
const resetTemporaryLayout = React.useCallback(() => setTemporaryLayout(null), [setTemporaryLayout]);
|
|
@@ -71,7 +81,7 @@ function useMemoStateContext(props) {
|
|
|
71
81
|
return Object.assign({}, item);
|
|
72
82
|
}
|
|
73
83
|
});
|
|
74
|
-
const baselineConfig = Object.assign(Object.assign({}, props.config), { layout:
|
|
84
|
+
const baselineConfig = Object.assign(Object.assign({}, props.config), { layout: getBaselineLayout() });
|
|
75
85
|
const newConfig = UpdateManager.updateLayout({
|
|
76
86
|
layout: currentInnerLayout,
|
|
77
87
|
config: baselineConfig,
|
|
@@ -83,13 +93,13 @@ function useMemoStateContext(props) {
|
|
|
83
93
|
emitDashKitEvent: props.emitDashKitEvent,
|
|
84
94
|
});
|
|
85
95
|
internalBaselineLayoutRef.current = newConfig.layout;
|
|
86
|
-
}, [props.config, props.emitDashKitEvent, onChange]);
|
|
96
|
+
}, [getBaselineLayout, props.config, props.emitDashKitEvent, onChange]);
|
|
87
97
|
const getLayoutItem = React.useCallback((id) => {
|
|
88
|
-
return
|
|
89
|
-
}, []);
|
|
98
|
+
return getBaselineLayout().find(({ i }) => i === id);
|
|
99
|
+
}, [getBaselineLayout]);
|
|
90
100
|
const getOuterLayout = React.useCallback(() => {
|
|
91
|
-
return convertEnrichedLayoutToConfigLayout(
|
|
92
|
-
}, []);
|
|
101
|
+
return convertEnrichedLayoutToConfigLayout(getBaselineLayout());
|
|
102
|
+
}, [getBaselineLayout]);
|
|
93
103
|
// to calculate items, only memorization of items and globalItems is important
|
|
94
104
|
const configItems = React.useMemo(() => getAllConfigItems(props.config), [props.config.items, props.config.globalItems]);
|
|
95
105
|
const onItemRemove = React.useCallback((id) => {
|
|
@@ -205,16 +215,28 @@ function useMemoStateContext(props) {
|
|
|
205
215
|
});
|
|
206
216
|
}
|
|
207
217
|
}, [props.registerManager, props.groups, visualLayout]);
|
|
208
|
-
// Synchronize
|
|
209
|
-
//
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
if (
|
|
213
|
-
|
|
218
|
+
// Synchronize visual layout during render, so children never see new config with old layout.
|
|
219
|
+
// Keep the previous external layout separate from the drag baseline: a drag updates the latter.
|
|
220
|
+
if (previousEnrichedPropsLayout !== enrichedPropsLayout) {
|
|
221
|
+
setPreviousEnrichedPropsLayout(enrichedPropsLayout);
|
|
222
|
+
if (!isEqual(internalBaselineLayoutRef.current, enrichedPropsLayout)) {
|
|
223
|
+
setPendingExternalBaselineLayout({
|
|
224
|
+
layout: enrichedPropsLayout,
|
|
225
|
+
previousBaselineLayout: internalBaselineLayoutRef.current,
|
|
226
|
+
});
|
|
214
227
|
setVisualLayout(enrichedPropsLayout);
|
|
215
228
|
setExternalLayoutRevision((r) => r + 1);
|
|
216
229
|
}
|
|
217
|
-
}
|
|
230
|
+
}
|
|
231
|
+
React.useLayoutEffect(() => {
|
|
232
|
+
if (pendingExternalBaselineLayout) {
|
|
233
|
+
if (internalBaselineLayoutRef.current ===
|
|
234
|
+
pendingExternalBaselineLayout.previousBaselineLayout) {
|
|
235
|
+
internalBaselineLayoutRef.current = pendingExternalBaselineLayout.layout;
|
|
236
|
+
}
|
|
237
|
+
setPendingExternalBaselineLayout(undefined);
|
|
238
|
+
}
|
|
239
|
+
}, [pendingExternalBaselineLayout]);
|
|
218
240
|
const itemsParams = useDeepEqualMemo(() => getItemsParams({
|
|
219
241
|
defaultGlobalParams: props.defaultGlobalParams,
|
|
220
242
|
globalParams: props.globalParams,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"withContext.js","sourceRoot":"../../../src","sources":["hocs/withContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport isEqual from 'lodash/isEqual';\nimport pick from 'lodash/pick';\n\nimport type {DashKitProps} from '../components/DashKit';\nimport {\n COMPACT_TYPE_HORIZONTAL_NOWRAP,\n DEFAULT_GROUP,\n DEFAULT_WIDGET_HEIGHT,\n DEFAULT_WIDGET_WIDTH,\n TEMPORARY_ITEM_ID,\n} from '../constants/common';\nimport {DashKitContext, DashKitDnDContext, DashkitOverlayControlsContext} from '../context';\nimport type {\n DashKitCtxShape,\n DashkitPropsPassedToCtx,\n OverlayControlsCtxShape,\n TemporaryLayout,\n} from '../context';\nimport {useDeepEqualMemo} from '../hooks/useDeepEqualMemo';\nimport type {ConfigLayout} from '../shared';\nimport {CONFIG_LAYOUT_FIELDS, getAllConfigItems, getItemsParams, getItemsState} from '../shared';\nimport type {DashKitEventMap, DashKitEventName, PluginRef} from '../typings';\nimport type {RegisterManager, RegisterManagerPlugin} from '../utils';\nimport {\n UpdateManager,\n convertEnrichedLayoutToConfigLayout,\n emitDashKitChangeEvent,\n enrichLayoutWithDefaults,\n resolveLayoutGroup,\n} from '../utils';\n\nexport type DashKitWithContextProps = DashkitPropsPassedToCtx &\n Pick<\n DashKitProps,\n 'overlayControls' | 'overlayMenuItems' | 'getPreparedCopyItemOptions' | 'onCopyFulfill'\n > &\n Required<\n Pick<\n DashKitProps,\n | 'itemsStateAndParams'\n | 'defaultGlobalParams'\n | 'globalParams'\n | 'context'\n | 'settings'\n | 'onItemEdit'\n | 'onChange'\n | 'onDrop'\n >\n > & {\n registerManager: RegisterManager;\n forwardedMetaRef: React.ForwardedRef<any>;\n emitDashKitEvent: <T extends DashKitEventName>(\n eventName: T,\n event: DashKitEventMap[T],\n ) => void;\n };\n\ntype OriginalLayouts = Record<string, ConfigLayout>;\n\ntype AdjustedLayouts = Record<string, ConfigLayout>;\n\ntype NowrapAdjustedLayouts = Record<string, number>;\n\ntype UseMemoStateContextResult = {\n dashkitContextValue: DashKitCtxShape;\n controlsContextValue: OverlayControlsCtxShape;\n};\n\nconst hasGetMeta = (value: PluginRef): value is {getMeta: () => Promise<any>} => {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'getMeta' in value &&\n typeof value.getMeta === 'function'\n );\n};\n\nconst hasReload = (\n value: PluginRef,\n): value is {reload: (data: {silentLoading: boolean; noVeil: boolean}) => void} => {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'reload' in value &&\n typeof value.reload === 'function'\n );\n};\n\nfunction useMemoStateContext(props: DashKitWithContextProps): UseMemoStateContextResult {\n // Since we don't want to store widget parameters with auto-height enabled in the store or server,\n // the actual layout (visible to the user at any moment) will be stored in state.\n // However, to ensure the store gets the layout without considering auto-height widgets,\n // when a widget's height is adjusted, the original h (height) value is saved in originalLayouts,\n // and the new adjusted height is stored in adjustedLayouts.\n\n const originalLayouts = React.useRef<OriginalLayouts>({});\n const adjustedLayouts = React.useRef<AdjustedLayouts>({});\n const nowrapAdjustedLayouts = React.useRef<NowrapAdjustedLayouts>({});\n\n // Enrich layout with default values from plugins.\n // This ensures backward compatibility: if props.layout is already enriched (old flow),\n // enrichLayoutWithDefaults will just merge and return similar result.\n // If props.layout comes directly from config (new flow), it gets properly enriched.\n const enrichedPropsLayout = React.useMemo(\n () => enrichLayoutWithDefaults(props.config, props.registerManager),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [props.config.layout, props.registerManager],\n );\n\n const internalBaselineLayoutRef = React.useRef<ConfigLayout[]>(enrichedPropsLayout);\n const [visualLayout, setVisualLayout] = React.useState<ConfigLayout[]>(enrichedPropsLayout);\n\n const [externalLayoutRevision, setExternalLayoutRevision] = React.useState(0);\n const [temporaryLayout, setTemporaryLayout] = React.useState<TemporaryLayout | null>(null);\n const resetTemporaryLayout = React.useCallback(\n () => setTemporaryLayout(null),\n [setTemporaryLayout],\n );\n\n const dndContext = React.useContext(DashKitDnDContext);\n const outerDnDEnable = Boolean(dndContext);\n\n // TODO: need move originalLayouts, adjustedLayouts to state\n const [layoutUpdateCounter, forceUpdateLayout] = React.useState(0);\n\n const onChange = React.useCallback(\n ({\n config = props.config,\n itemsStateAndParams = props.itemsStateAndParams,\n groups = props.groups,\n }) => {\n if (\n !(\n isEqual(config, props.config) &&\n isEqual(itemsStateAndParams, props.itemsStateAndParams) &&\n isEqual(groups, props.groups)\n )\n ) {\n props.onChange({config, itemsStateAndParams, groups});\n }\n },\n [props.config, props.groups, props.itemsStateAndParams, props.onChange],\n );\n\n // Callback invoked when grid layout changes. The first argument is the actual layout config,\n // which includes adjusted \"h\" values for items with auto-height enabled. To ensure that\n // values stored are not adjusted (as if auto-height was disabled), we correct them using\n // the originalLayouts stored without adjustments.\n const onLayoutChange = React.useCallback(\n (layout: ConfigLayout[]) => {\n const currentInnerLayout = layout.map((item) => {\n if (item.i in originalLayouts.current) {\n const {parent: _parent, ...originalCopy} = originalLayouts.current[item.i];\n\n if (item.parent) {\n (originalCopy as ConfigLayout).parent = item.parent;\n }\n originalCopy.w = item.w;\n originalCopy.x = item.x;\n originalCopy.y = item.y;\n\n return originalCopy satisfies ConfigLayout;\n } else {\n return {...item};\n }\n });\n\n const baselineConfig = {\n ...props.config,\n layout: internalBaselineLayoutRef.current,\n };\n\n const newConfig = UpdateManager.updateLayout({\n layout: currentInnerLayout,\n config: baselineConfig,\n });\n\n emitDashKitChangeEvent({\n config: baselineConfig,\n newConfig,\n onChange,\n emitDashKitEvent: props.emitDashKitEvent,\n });\n\n internalBaselineLayoutRef.current = newConfig.layout;\n },\n [props.config, props.emitDashKitEvent, onChange],\n );\n\n const getLayoutItem = React.useCallback((id: string) => {\n return internalBaselineLayoutRef.current.find(({i}) => i === id);\n }, []);\n\n const getOuterLayout = React.useCallback((): ConfigLayout[] => {\n return convertEnrichedLayoutToConfigLayout(internalBaselineLayoutRef.current);\n }, []);\n\n // to calculate items, only memorization of items and globalItems is important\n const configItems = React.useMemo(\n () => getAllConfigItems(props.config),\n [props.config.items, props.config.globalItems],\n );\n\n const onItemRemove = React.useCallback(\n (id: string) => {\n delete nowrapAdjustedLayouts.current[id];\n delete adjustedLayouts.current[id];\n delete originalLayouts.current[id];\n\n if (id === TEMPORARY_ITEM_ID) {\n resetTemporaryLayout();\n } else {\n if (temporaryLayout) {\n setTemporaryLayout({\n ...temporaryLayout,\n data: temporaryLayout.data.filter(({i}) => i !== id),\n });\n }\n\n onChange(\n UpdateManager.removeItem({\n id,\n config: {...props.config, layout: getOuterLayout()},\n itemsStateAndParams: props.itemsStateAndParams,\n }),\n );\n }\n },\n [\n resetTemporaryLayout,\n temporaryLayout,\n onChange,\n props.config,\n props.itemsStateAndParams,\n getOuterLayout,\n ],\n );\n\n const onItemStateAndParamsChange = React.useCallback<\n DashKitCtxShape['onItemStateAndParamsChange']\n >(\n (id, stateAndParams, options) => {\n const currentConfig = {...props.config, layout: getOuterLayout()};\n onChange({\n config: currentConfig,\n // config is not strictly required here; ideally it should be removed along with the default props\n itemsStateAndParams: UpdateManager.changeStateAndParams({\n id,\n config: currentConfig,\n stateAndParams,\n itemsStateAndParams: props.itemsStateAndParams,\n options,\n }),\n });\n },\n [props.config, props.itemsStateAndParams, getOuterLayout, onChange],\n );\n\n const memorizeOriginalLayout = React.useCallback<DashKitCtxShape['memorizeOriginalLayout']>(\n (widgetId, preAutoHeightLayout, postAutoHeightLayout) => {\n let needUpdateLayout = false;\n if (!(widgetId in originalLayouts.current)) {\n originalLayouts.current[widgetId] = preAutoHeightLayout;\n needUpdateLayout = true;\n }\n if (adjustedLayouts.current[widgetId] !== postAutoHeightLayout) {\n adjustedLayouts.current[widgetId] = postAutoHeightLayout;\n needUpdateLayout = true;\n }\n\n if (needUpdateLayout) {\n forceUpdateLayout((prev) => prev + 1);\n }\n },\n [],\n );\n\n const revertToOriginalLayout = React.useCallback((widgetId: string) => {\n const needUpdateLayout =\n widgetId in adjustedLayouts.current || widgetId in originalLayouts.current;\n delete adjustedLayouts.current[widgetId];\n delete originalLayouts.current[widgetId];\n if (needUpdateLayout) {\n forceUpdateLayout((prev) => prev + 1);\n }\n }, []);\n\n React.useMemo(() => {\n const groups = props.groups;\n // Use visualLayout instead of props.layout (which is now optional)\n const layout = visualLayout;\n const defaultProps = props.registerManager.gridLayout || {};\n const nowrapGroups: Record<string, {items: ConfigLayout[]; leftSpace: number}> = {};\n let hasNowrapGroups = false;\n\n if (\n defaultProps.compactType === COMPACT_TYPE_HORIZONTAL_NOWRAP &&\n defaultProps.cols !== undefined\n ) {\n nowrapGroups[DEFAULT_GROUP] = {\n items: [],\n leftSpace: defaultProps.cols,\n };\n hasNowrapGroups = true;\n }\n\n if (groups) {\n groups.forEach((group) => {\n const resultProps = group.gridProperties?.(defaultProps) || {};\n\n if (\n resultProps.compactType === COMPACT_TYPE_HORIZONTAL_NOWRAP &&\n resultProps.cols !== undefined &&\n group.id\n ) {\n nowrapGroups[group.id] = {\n items: [],\n leftSpace: resultProps.cols,\n };\n hasNowrapGroups = true;\n }\n });\n }\n\n if (hasNowrapGroups) {\n layout.forEach((item) => {\n const widgetId = item.i;\n const parentId = resolveLayoutGroup(item);\n\n if (nowrapGroups[parentId]) {\n // Collecting nowrap elements\n nowrapGroups[parentId].items.push(item);\n nowrapGroups[parentId].leftSpace -= item.w;\n } else if (nowrapAdjustedLayouts.current[widgetId]) {\n // If element is not in horizontal-nowrap cleaning up and reverting adjustLayout values\n delete nowrapAdjustedLayouts.current[widgetId];\n }\n });\n\n Object.entries(nowrapGroups).forEach(([, {items, leftSpace}]) => {\n items.forEach((item) => {\n // setting maxW with adjustLayout fields and saving previous\n nowrapAdjustedLayouts.current[item.i] = item.w + leftSpace;\n });\n });\n }\n }, [props.registerManager, props.groups, visualLayout]);\n\n // Synchronize internal baseline and visual layout when external props.layout changes re-init.\n // When props.config.layout reference changes, external update occurred re-init.\n React.useEffect(() => {\n const internalNotEqualProps = !isEqual(\n internalBaselineLayoutRef.current,\n enrichedPropsLayout,\n );\n\n if (internalNotEqualProps) {\n internalBaselineLayoutRef.current = enrichedPropsLayout;\n setVisualLayout(enrichedPropsLayout);\n setExternalLayoutRevision((r) => r + 1);\n }\n }, [enrichedPropsLayout]);\n\n const itemsParams = useDeepEqualMemo(\n () =>\n getItemsParams({\n defaultGlobalParams: props.defaultGlobalParams,\n globalParams: props.globalParams,\n config: props.config,\n itemsStateAndParams: props.itemsStateAndParams,\n plugins: props.registerManager.getPlugins(),\n }),\n [\n props.defaultGlobalParams,\n props.globalParams,\n props.config,\n props.itemsStateAndParams,\n props.registerManager,\n ],\n );\n\n const itemsState = useDeepEqualMemo(\n () =>\n getItemsState({\n config: props.config,\n itemsStateAndParams: props.itemsStateAndParams,\n }),\n [props.config, props.itemsStateAndParams],\n );\n\n const getItemsMeta = React.useCallback<DashKitCtxShape['getItemsMeta']>((pluginsRefs) => {\n return pluginsRefs\n .map((ref) => {\n if (!(ref && hasGetMeta(ref))) {\n return undefined;\n }\n return ref.getMeta();\n })\n .filter((item): item is Promise<any> => item !== undefined);\n }, []);\n\n const resultLayout = React.useMemo(() => {\n const adjusted = adjustedLayouts.current;\n const original = originalLayouts.current;\n const nowrapAdjust = nowrapAdjustedLayouts.current;\n\n return visualLayout.map((item) => {\n const widgetId = item.i;\n\n if (widgetId in adjusted || widgetId in nowrapAdjust) {\n original[widgetId] = item;\n // eslint-disable-next-line no-unused-vars\n const {parent: _parent2, ...adjustedItem} = adjusted[widgetId] || item;\n\n adjustedItem.w = item.w;\n adjustedItem.x = item.x;\n adjustedItem.y = item.y;\n\n if (item.parent) {\n (adjustedItem as ConfigLayout).parent = item.parent;\n }\n\n if (widgetId in nowrapAdjust) {\n (adjustedItem as ConfigLayout & {maxW?: number}).maxW = nowrapAdjust[widgetId];\n }\n\n return adjustedItem satisfies ConfigLayout;\n } else {\n if (widgetId in original) {\n delete original[widgetId];\n }\n return item;\n }\n });\n }, [visualLayout, layoutUpdateCounter]);\n\n const reloadItems = React.useCallback<DashKitCtxShape['reloadItems']>((pluginsRefs, data) => {\n pluginsRefs.forEach((ref) => ref && hasReload(ref) && ref.reload(data));\n }, []);\n\n const dragPropsContext = dndContext?.dragProps;\n const onDropDragOverContext = dndContext?.onDropDragOver;\n\n const dragOverPlugin = React.useMemo(() => {\n if (!dragPropsContext) {\n return null;\n }\n\n const pluginType = dragPropsContext.type;\n\n if (props.registerManager.check(pluginType)) {\n return props.registerManager.getItem(pluginType);\n } else {\n // eslint-disable-next-line no-console\n console.error(`Uknown pluginType: ${pluginType}`);\n return null;\n }\n }, [dragPropsContext, props.registerManager]);\n\n const onDropDragOver = React.useCallback<DashKitCtxShape['onDropDragOver']>(\n (_e, group, gridProps, groupLayout, sharedItem) => {\n if (temporaryLayout) {\n resetTemporaryLayout();\n return false;\n }\n\n let dragItemType: string;\n let defaultLayout: RegisterManagerPlugin['defaultLayout'] | {h: number; w: number};\n if (sharedItem) {\n const {type, h, w} = sharedItem;\n dragItemType = type;\n const _defaults = props.registerManager.getItem(type);\n defaultLayout = _defaults ? {..._defaults.defaultLayout, h, w} : {h, w};\n } else if (dragOverPlugin) {\n dragItemType = dragOverPlugin.type;\n defaultLayout = dragOverPlugin.defaultLayout;\n } else {\n return false;\n }\n\n let maxW = gridProps.cols;\n const maxH = Math.min(\n gridProps.maxRows || Infinity,\n 'maxH' in defaultLayout && defaultLayout.maxH ? defaultLayout.maxH : Infinity,\n );\n\n if (gridProps.compactType === COMPACT_TYPE_HORIZONTAL_NOWRAP && gridProps.cols) {\n maxW = groupLayout.reduce((memo, item) => memo - item.w, gridProps.cols);\n }\n\n if (\n maxW === 0 ||\n maxH === 0 ||\n ('minW' in defaultLayout &&\n defaultLayout.minW &&\n maxW &&\n maxW < defaultLayout.minW) ||\n ('minH' in defaultLayout && defaultLayout.minH && maxH < defaultLayout.minH)\n ) {\n return false;\n }\n\n const {\n h = defaultLayout?.h || DEFAULT_WIDGET_HEIGHT,\n w = defaultLayout?.w || DEFAULT_WIDGET_WIDTH,\n } = dragPropsContext?.layout || {};\n\n const itemLayout = {\n h: maxH ? Math.min(h, maxH) : h,\n w: maxW ? Math.min(w, maxW) : w,\n };\n\n if (\n onDropDragOverContext?.(\n {\n ...sharedItem,\n ...itemLayout,\n parent: group,\n type: dragItemType,\n },\n sharedItem ?? null,\n ) === false\n ) {\n return false;\n }\n\n return itemLayout;\n },\n [\n props.registerManager,\n resetTemporaryLayout,\n temporaryLayout,\n dragOverPlugin,\n dragPropsContext,\n onDropDragOverContext,\n ],\n );\n\n const onDropProp = props.onDrop;\n const onDrop = React.useCallback<DashKitCtxShape['onDrop']>(\n (newLayout, item) => {\n if (!dragPropsContext) {\n return;\n }\n\n setTemporaryLayout({\n data: [...newLayout, item],\n dragProps: dragPropsContext,\n });\n\n onDropProp?.({\n newLayout: newLayout.reduce<ConfigLayout[]>((memo, l) => {\n if (l.i !== item.i) {\n memo.push(pick(l, CONFIG_LAYOUT_FIELDS));\n }\n\n return memo;\n }, []),\n itemLayout: pick(item, CONFIG_LAYOUT_FIELDS),\n commit: resetTemporaryLayout,\n dragProps: dragPropsContext,\n });\n },\n [dragPropsContext, onDropProp, setTemporaryLayout, resetTemporaryLayout],\n );\n\n const dashkitContextValue = React.useMemo(\n () => ({\n externalLayoutRevision,\n config: props.config,\n configItems,\n groups: props.groups,\n context: props.context,\n noOverlay: props.noOverlay,\n focusable: props.focusable,\n defaultGlobalParams: props.globalParams,\n globalParams: props.globalParams,\n editMode: props.editMode,\n settings: props.settings,\n onItemMountChange: props.onItemMountChange,\n onItemRender: props.onItemRender,\n draggableHandleClassName: props.draggableHandleClassName,\n\n registerManager: props.registerManager,\n forwardedMetaRef: props.forwardedMetaRef,\n\n layout: resultLayout,\n temporaryLayout,\n layoutChange: onLayoutChange,\n memorizeOriginalLayout,\n revertToOriginalLayout,\n\n itemsState,\n itemsParams,\n onItemStateAndParamsChange,\n\n getItemsMeta,\n reloadItems,\n\n onDrop,\n onDropDragOver,\n outerDnDEnable,\n dragOverPlugin,\n\n onItemFocus: props.onItemFocus,\n onItemBlur: props.onItemBlur,\n\n /* default handlers bypass */\n onDragStart: props.onDragStart,\n onDrag: props.onDrag,\n onDragStop: props.onDragStop,\n onResizeStart: props.onResizeStart,\n onResize: props.onResize,\n onResizeStop: props.onResizeStop,\n }),\n [\n externalLayoutRevision,\n resultLayout,\n temporaryLayout,\n props.config,\n configItems,\n props.groups,\n props.context,\n props.noOverlay,\n props.focusable,\n props.globalParams,\n props.editMode,\n props.settings,\n itemsState,\n itemsParams,\n props.registerManager,\n onItemStateAndParamsChange,\n onDrop,\n onDropDragOver,\n onLayoutChange,\n props.onItemMountChange,\n props.onItemRender,\n getItemsMeta,\n reloadItems,\n memorizeOriginalLayout,\n revertToOriginalLayout,\n props.forwardedMetaRef,\n props.draggableHandleClassName,\n outerDnDEnable,\n dragOverPlugin,\n\n props.onItemFocus,\n props.onItemBlur,\n\n props.onDragStart,\n props.onDrag,\n props.onDragStop,\n props.onResizeStart,\n props.onResize,\n props.onResizeStop,\n ],\n );\n\n const overlayMenuItems = props.overlayMenuItems || props.registerManager.settings.menu;\n const controlsContextValue = React.useMemo(\n () => ({\n overlayControls: props.overlayControls,\n context: props.context,\n\n itemsStateAndParams: props.itemsStateAndParams,\n itemsState,\n itemsParams,\n\n getPreparedCopyItemOptions: props.getPreparedCopyItemOptions,\n onCopyFulfill: props.onCopyFulfill,\n\n menu: overlayMenuItems,\n\n editItem: props.onItemEdit,\n removeItem: onItemRemove,\n getLayoutItem: getLayoutItem,\n }),\n [\n props.overlayControls,\n props.context,\n props.itemsStateAndParams,\n props.onItemEdit,\n props.getPreparedCopyItemOptions,\n props.onCopyFulfill,\n overlayMenuItems,\n itemsState,\n itemsParams,\n onItemRemove,\n getLayoutItem,\n ],\n );\n\n return {controlsContextValue, dashkitContextValue};\n}\n\nexport function withContext(Component: React.ComponentType) {\n const WithContext = (props: DashKitWithContextProps) => {\n const {dashkitContextValue, controlsContextValue} = useMemoStateContext(props);\n\n return (\n <DashKitContext.Provider value={dashkitContextValue}>\n <DashkitOverlayControlsContext.Provider value={controlsContextValue}>\n <Component />\n </DashkitOverlayControlsContext.Provider>\n </DashKitContext.Provider>\n );\n };\n\n WithContext.displayName = `withContext(${\n Component.displayName || Component.name || 'Component'\n })`;\n\n return WithContext;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"withContext.js","sourceRoot":"../../../src","sources":["hocs/withContext.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport isEqual from 'lodash/isEqual';\nimport pick from 'lodash/pick';\n\nimport type {DashKitProps} from '../components/DashKit';\nimport {\n COMPACT_TYPE_HORIZONTAL_NOWRAP,\n DEFAULT_GROUP,\n DEFAULT_WIDGET_HEIGHT,\n DEFAULT_WIDGET_WIDTH,\n TEMPORARY_ITEM_ID,\n} from '../constants/common';\nimport {DashKitContext, DashKitDnDContext, DashkitOverlayControlsContext} from '../context';\nimport type {\n DashKitCtxShape,\n DashkitPropsPassedToCtx,\n OverlayControlsCtxShape,\n TemporaryLayout,\n} from '../context';\nimport {useDeepEqualMemo} from '../hooks/useDeepEqualMemo';\nimport type {ConfigLayout} from '../shared';\nimport {CONFIG_LAYOUT_FIELDS, getAllConfigItems, getItemsParams, getItemsState} from '../shared';\nimport type {DashKitEventMap, DashKitEventName, PluginRef} from '../typings';\nimport type {RegisterManager, RegisterManagerPlugin} from '../utils';\nimport {\n UpdateManager,\n convertEnrichedLayoutToConfigLayout,\n emitDashKitChangeEvent,\n enrichLayoutWithDefaults,\n resolveLayoutGroup,\n} from '../utils';\n\nexport type DashKitWithContextProps = DashkitPropsPassedToCtx &\n Pick<\n DashKitProps,\n 'overlayControls' | 'overlayMenuItems' | 'getPreparedCopyItemOptions' | 'onCopyFulfill'\n > &\n Required<\n Pick<\n DashKitProps,\n | 'itemsStateAndParams'\n | 'defaultGlobalParams'\n | 'globalParams'\n | 'context'\n | 'settings'\n | 'onItemEdit'\n | 'onChange'\n | 'onDrop'\n >\n > & {\n registerManager: RegisterManager;\n forwardedMetaRef: React.ForwardedRef<any>;\n emitDashKitEvent: <T extends DashKitEventName>(\n eventName: T,\n event: DashKitEventMap[T],\n ) => void;\n };\n\ntype OriginalLayouts = Record<string, ConfigLayout>;\n\ntype AdjustedLayouts = Record<string, ConfigLayout>;\n\ntype NowrapAdjustedLayouts = Record<string, number>;\n\ntype PendingExternalBaselineLayout = {\n layout: ConfigLayout[];\n previousBaselineLayout: ConfigLayout[];\n};\n\ntype UseMemoStateContextResult = {\n dashkitContextValue: DashKitCtxShape;\n controlsContextValue: OverlayControlsCtxShape;\n};\n\nconst hasGetMeta = (value: PluginRef): value is {getMeta: () => Promise<any>} => {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'getMeta' in value &&\n typeof value.getMeta === 'function'\n );\n};\n\nconst hasReload = (\n value: PluginRef,\n): value is {reload: (data: {silentLoading: boolean; noVeil: boolean}) => void} => {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'reload' in value &&\n typeof value.reload === 'function'\n );\n};\n\nfunction useMemoStateContext(props: DashKitWithContextProps): UseMemoStateContextResult {\n // Since we don't want to store widget parameters with auto-height enabled in the store or server,\n // the actual layout (visible to the user at any moment) will be stored in state.\n // However, to ensure the store gets the layout without considering auto-height widgets,\n // when a widget's height is adjusted, the original h (height) value is saved in originalLayouts,\n // and the new adjusted height is stored in adjustedLayouts.\n\n const originalLayouts = React.useRef<OriginalLayouts>({});\n const adjustedLayouts = React.useRef<AdjustedLayouts>({});\n const nowrapAdjustedLayouts = React.useRef<NowrapAdjustedLayouts>({});\n\n // Enrich layout with default values from plugins.\n // This ensures backward compatibility: if props.layout is already enriched (old flow),\n // enrichLayoutWithDefaults will just merge and return similar result.\n // If props.layout comes directly from config (new flow), it gets properly enriched.\n const enrichedPropsLayout = React.useMemo(\n () => enrichLayoutWithDefaults(props.config, props.registerManager),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [props.config.layout, props.registerManager],\n );\n\n const internalBaselineLayoutRef = React.useRef<ConfigLayout[]>(enrichedPropsLayout);\n const [visualLayout, setVisualLayout] = React.useState<ConfigLayout[]>(enrichedPropsLayout);\n const [previousEnrichedPropsLayout, setPreviousEnrichedPropsLayout] =\n React.useState(enrichedPropsLayout);\n const [pendingExternalBaselineLayout, setPendingExternalBaselineLayout] =\n React.useState<PendingExternalBaselineLayout>();\n const getBaselineLayout = React.useCallback(() => {\n if (\n pendingExternalBaselineLayout &&\n internalBaselineLayoutRef.current ===\n pendingExternalBaselineLayout.previousBaselineLayout\n ) {\n return pendingExternalBaselineLayout.layout;\n }\n\n return internalBaselineLayoutRef.current;\n }, [pendingExternalBaselineLayout]);\n\n const [externalLayoutRevision, setExternalLayoutRevision] = React.useState(0);\n const [temporaryLayout, setTemporaryLayout] = React.useState<TemporaryLayout | null>(null);\n const resetTemporaryLayout = React.useCallback(\n () => setTemporaryLayout(null),\n [setTemporaryLayout],\n );\n\n const dndContext = React.useContext(DashKitDnDContext);\n const outerDnDEnable = Boolean(dndContext);\n\n // TODO: need move originalLayouts, adjustedLayouts to state\n const [layoutUpdateCounter, forceUpdateLayout] = React.useState(0);\n\n const onChange = React.useCallback(\n ({\n config = props.config,\n itemsStateAndParams = props.itemsStateAndParams,\n groups = props.groups,\n }) => {\n if (\n !(\n isEqual(config, props.config) &&\n isEqual(itemsStateAndParams, props.itemsStateAndParams) &&\n isEqual(groups, props.groups)\n )\n ) {\n props.onChange({config, itemsStateAndParams, groups});\n }\n },\n [props.config, props.groups, props.itemsStateAndParams, props.onChange],\n );\n\n // Callback invoked when grid layout changes. The first argument is the actual layout config,\n // which includes adjusted \"h\" values for items with auto-height enabled. To ensure that\n // values stored are not adjusted (as if auto-height was disabled), we correct them using\n // the originalLayouts stored without adjustments.\n const onLayoutChange = React.useCallback(\n (layout: ConfigLayout[]) => {\n const currentInnerLayout = layout.map((item) => {\n if (item.i in originalLayouts.current) {\n const {parent: _parent, ...originalCopy} = originalLayouts.current[item.i];\n\n if (item.parent) {\n (originalCopy as ConfigLayout).parent = item.parent;\n }\n originalCopy.w = item.w;\n originalCopy.x = item.x;\n originalCopy.y = item.y;\n\n return originalCopy satisfies ConfigLayout;\n } else {\n return {...item};\n }\n });\n\n const baselineConfig = {\n ...props.config,\n layout: getBaselineLayout(),\n };\n\n const newConfig = UpdateManager.updateLayout({\n layout: currentInnerLayout,\n config: baselineConfig,\n });\n\n emitDashKitChangeEvent({\n config: baselineConfig,\n newConfig,\n onChange,\n emitDashKitEvent: props.emitDashKitEvent,\n });\n\n internalBaselineLayoutRef.current = newConfig.layout;\n },\n [getBaselineLayout, props.config, props.emitDashKitEvent, onChange],\n );\n\n const getLayoutItem = React.useCallback(\n (id: string) => {\n return getBaselineLayout().find(({i}) => i === id);\n },\n [getBaselineLayout],\n );\n\n const getOuterLayout = React.useCallback((): ConfigLayout[] => {\n return convertEnrichedLayoutToConfigLayout(getBaselineLayout());\n }, [getBaselineLayout]);\n\n // to calculate items, only memorization of items and globalItems is important\n const configItems = React.useMemo(\n () => getAllConfigItems(props.config),\n [props.config.items, props.config.globalItems],\n );\n\n const onItemRemove = React.useCallback(\n (id: string) => {\n delete nowrapAdjustedLayouts.current[id];\n delete adjustedLayouts.current[id];\n delete originalLayouts.current[id];\n\n if (id === TEMPORARY_ITEM_ID) {\n resetTemporaryLayout();\n } else {\n if (temporaryLayout) {\n setTemporaryLayout({\n ...temporaryLayout,\n data: temporaryLayout.data.filter(({i}) => i !== id),\n });\n }\n\n onChange(\n UpdateManager.removeItem({\n id,\n config: {...props.config, layout: getOuterLayout()},\n itemsStateAndParams: props.itemsStateAndParams,\n }),\n );\n }\n },\n [\n resetTemporaryLayout,\n temporaryLayout,\n onChange,\n props.config,\n props.itemsStateAndParams,\n getOuterLayout,\n ],\n );\n\n const onItemStateAndParamsChange = React.useCallback<\n DashKitCtxShape['onItemStateAndParamsChange']\n >(\n (id, stateAndParams, options) => {\n const currentConfig = {...props.config, layout: getOuterLayout()};\n onChange({\n config: currentConfig,\n // config is not strictly required here; ideally it should be removed along with the default props\n itemsStateAndParams: UpdateManager.changeStateAndParams({\n id,\n config: currentConfig,\n stateAndParams,\n itemsStateAndParams: props.itemsStateAndParams,\n options,\n }),\n });\n },\n [props.config, props.itemsStateAndParams, getOuterLayout, onChange],\n );\n\n const memorizeOriginalLayout = React.useCallback<DashKitCtxShape['memorizeOriginalLayout']>(\n (widgetId, preAutoHeightLayout, postAutoHeightLayout) => {\n let needUpdateLayout = false;\n if (!(widgetId in originalLayouts.current)) {\n originalLayouts.current[widgetId] = preAutoHeightLayout;\n needUpdateLayout = true;\n }\n if (adjustedLayouts.current[widgetId] !== postAutoHeightLayout) {\n adjustedLayouts.current[widgetId] = postAutoHeightLayout;\n needUpdateLayout = true;\n }\n\n if (needUpdateLayout) {\n forceUpdateLayout((prev) => prev + 1);\n }\n },\n [],\n );\n\n const revertToOriginalLayout = React.useCallback((widgetId: string) => {\n const needUpdateLayout =\n widgetId in adjustedLayouts.current || widgetId in originalLayouts.current;\n delete adjustedLayouts.current[widgetId];\n delete originalLayouts.current[widgetId];\n if (needUpdateLayout) {\n forceUpdateLayout((prev) => prev + 1);\n }\n }, []);\n\n React.useMemo(() => {\n const groups = props.groups;\n // Use visualLayout instead of props.layout (which is now optional)\n const layout = visualLayout;\n const defaultProps = props.registerManager.gridLayout || {};\n const nowrapGroups: Record<string, {items: ConfigLayout[]; leftSpace: number}> = {};\n let hasNowrapGroups = false;\n\n if (\n defaultProps.compactType === COMPACT_TYPE_HORIZONTAL_NOWRAP &&\n defaultProps.cols !== undefined\n ) {\n nowrapGroups[DEFAULT_GROUP] = {\n items: [],\n leftSpace: defaultProps.cols,\n };\n hasNowrapGroups = true;\n }\n\n if (groups) {\n groups.forEach((group) => {\n const resultProps = group.gridProperties?.(defaultProps) || {};\n\n if (\n resultProps.compactType === COMPACT_TYPE_HORIZONTAL_NOWRAP &&\n resultProps.cols !== undefined &&\n group.id\n ) {\n nowrapGroups[group.id] = {\n items: [],\n leftSpace: resultProps.cols,\n };\n hasNowrapGroups = true;\n }\n });\n }\n\n if (hasNowrapGroups) {\n layout.forEach((item) => {\n const widgetId = item.i;\n const parentId = resolveLayoutGroup(item);\n\n if (nowrapGroups[parentId]) {\n // Collecting nowrap elements\n nowrapGroups[parentId].items.push(item);\n nowrapGroups[parentId].leftSpace -= item.w;\n } else if (nowrapAdjustedLayouts.current[widgetId]) {\n // If element is not in horizontal-nowrap cleaning up and reverting adjustLayout values\n delete nowrapAdjustedLayouts.current[widgetId];\n }\n });\n\n Object.entries(nowrapGroups).forEach(([, {items, leftSpace}]) => {\n items.forEach((item) => {\n // setting maxW with adjustLayout fields and saving previous\n nowrapAdjustedLayouts.current[item.i] = item.w + leftSpace;\n });\n });\n }\n }, [props.registerManager, props.groups, visualLayout]);\n\n // Synchronize visual layout during render, so children never see new config with old layout.\n // Keep the previous external layout separate from the drag baseline: a drag updates the latter.\n if (previousEnrichedPropsLayout !== enrichedPropsLayout) {\n setPreviousEnrichedPropsLayout(enrichedPropsLayout);\n\n if (!isEqual(internalBaselineLayoutRef.current, enrichedPropsLayout)) {\n setPendingExternalBaselineLayout({\n layout: enrichedPropsLayout,\n previousBaselineLayout: internalBaselineLayoutRef.current,\n });\n setVisualLayout(enrichedPropsLayout);\n setExternalLayoutRevision((r) => r + 1);\n }\n }\n\n React.useLayoutEffect(() => {\n if (pendingExternalBaselineLayout) {\n if (\n internalBaselineLayoutRef.current ===\n pendingExternalBaselineLayout.previousBaselineLayout\n ) {\n internalBaselineLayoutRef.current = pendingExternalBaselineLayout.layout;\n }\n setPendingExternalBaselineLayout(undefined);\n }\n }, [pendingExternalBaselineLayout]);\n\n const itemsParams = useDeepEqualMemo(\n () =>\n getItemsParams({\n defaultGlobalParams: props.defaultGlobalParams,\n globalParams: props.globalParams,\n config: props.config,\n itemsStateAndParams: props.itemsStateAndParams,\n plugins: props.registerManager.getPlugins(),\n }),\n [\n props.defaultGlobalParams,\n props.globalParams,\n props.config,\n props.itemsStateAndParams,\n props.registerManager,\n ],\n );\n\n const itemsState = useDeepEqualMemo(\n () =>\n getItemsState({\n config: props.config,\n itemsStateAndParams: props.itemsStateAndParams,\n }),\n [props.config, props.itemsStateAndParams],\n );\n\n const getItemsMeta = React.useCallback<DashKitCtxShape['getItemsMeta']>((pluginsRefs) => {\n return pluginsRefs\n .map((ref) => {\n if (!(ref && hasGetMeta(ref))) {\n return undefined;\n }\n return ref.getMeta();\n })\n .filter((item): item is Promise<any> => item !== undefined);\n }, []);\n\n const resultLayout = React.useMemo(() => {\n const adjusted = adjustedLayouts.current;\n const original = originalLayouts.current;\n const nowrapAdjust = nowrapAdjustedLayouts.current;\n\n return visualLayout.map((item) => {\n const widgetId = item.i;\n\n if (widgetId in adjusted || widgetId in nowrapAdjust) {\n original[widgetId] = item;\n // eslint-disable-next-line no-unused-vars\n const {parent: _parent2, ...adjustedItem} = adjusted[widgetId] || item;\n\n adjustedItem.w = item.w;\n adjustedItem.x = item.x;\n adjustedItem.y = item.y;\n\n if (item.parent) {\n (adjustedItem as ConfigLayout).parent = item.parent;\n }\n\n if (widgetId in nowrapAdjust) {\n (adjustedItem as ConfigLayout & {maxW?: number}).maxW = nowrapAdjust[widgetId];\n }\n\n return adjustedItem satisfies ConfigLayout;\n } else {\n if (widgetId in original) {\n delete original[widgetId];\n }\n return item;\n }\n });\n }, [visualLayout, layoutUpdateCounter]);\n\n const reloadItems = React.useCallback<DashKitCtxShape['reloadItems']>((pluginsRefs, data) => {\n pluginsRefs.forEach((ref) => ref && hasReload(ref) && ref.reload(data));\n }, []);\n\n const dragPropsContext = dndContext?.dragProps;\n const onDropDragOverContext = dndContext?.onDropDragOver;\n\n const dragOverPlugin = React.useMemo(() => {\n if (!dragPropsContext) {\n return null;\n }\n\n const pluginType = dragPropsContext.type;\n\n if (props.registerManager.check(pluginType)) {\n return props.registerManager.getItem(pluginType);\n } else {\n // eslint-disable-next-line no-console\n console.error(`Uknown pluginType: ${pluginType}`);\n return null;\n }\n }, [dragPropsContext, props.registerManager]);\n\n const onDropDragOver = React.useCallback<DashKitCtxShape['onDropDragOver']>(\n (_e, group, gridProps, groupLayout, sharedItem) => {\n if (temporaryLayout) {\n resetTemporaryLayout();\n return false;\n }\n\n let dragItemType: string;\n let defaultLayout: RegisterManagerPlugin['defaultLayout'] | {h: number; w: number};\n if (sharedItem) {\n const {type, h, w} = sharedItem;\n dragItemType = type;\n const _defaults = props.registerManager.getItem(type);\n defaultLayout = _defaults ? {..._defaults.defaultLayout, h, w} : {h, w};\n } else if (dragOverPlugin) {\n dragItemType = dragOverPlugin.type;\n defaultLayout = dragOverPlugin.defaultLayout;\n } else {\n return false;\n }\n\n let maxW = gridProps.cols;\n const maxH = Math.min(\n gridProps.maxRows || Infinity,\n 'maxH' in defaultLayout && defaultLayout.maxH ? defaultLayout.maxH : Infinity,\n );\n\n if (gridProps.compactType === COMPACT_TYPE_HORIZONTAL_NOWRAP && gridProps.cols) {\n maxW = groupLayout.reduce((memo, item) => memo - item.w, gridProps.cols);\n }\n\n if (\n maxW === 0 ||\n maxH === 0 ||\n ('minW' in defaultLayout &&\n defaultLayout.minW &&\n maxW &&\n maxW < defaultLayout.minW) ||\n ('minH' in defaultLayout && defaultLayout.minH && maxH < defaultLayout.minH)\n ) {\n return false;\n }\n\n const {\n h = defaultLayout?.h || DEFAULT_WIDGET_HEIGHT,\n w = defaultLayout?.w || DEFAULT_WIDGET_WIDTH,\n } = dragPropsContext?.layout || {};\n\n const itemLayout = {\n h: maxH ? Math.min(h, maxH) : h,\n w: maxW ? Math.min(w, maxW) : w,\n };\n\n if (\n onDropDragOverContext?.(\n {\n ...sharedItem,\n ...itemLayout,\n parent: group,\n type: dragItemType,\n },\n sharedItem ?? null,\n ) === false\n ) {\n return false;\n }\n\n return itemLayout;\n },\n [\n props.registerManager,\n resetTemporaryLayout,\n temporaryLayout,\n dragOverPlugin,\n dragPropsContext,\n onDropDragOverContext,\n ],\n );\n\n const onDropProp = props.onDrop;\n const onDrop = React.useCallback<DashKitCtxShape['onDrop']>(\n (newLayout, item) => {\n if (!dragPropsContext) {\n return;\n }\n\n setTemporaryLayout({\n data: [...newLayout, item],\n dragProps: dragPropsContext,\n });\n\n onDropProp?.({\n newLayout: newLayout.reduce<ConfigLayout[]>((memo, l) => {\n if (l.i !== item.i) {\n memo.push(pick(l, CONFIG_LAYOUT_FIELDS));\n }\n\n return memo;\n }, []),\n itemLayout: pick(item, CONFIG_LAYOUT_FIELDS),\n commit: resetTemporaryLayout,\n dragProps: dragPropsContext,\n });\n },\n [dragPropsContext, onDropProp, setTemporaryLayout, resetTemporaryLayout],\n );\n\n const dashkitContextValue = React.useMemo(\n () => ({\n externalLayoutRevision,\n config: props.config,\n configItems,\n groups: props.groups,\n context: props.context,\n noOverlay: props.noOverlay,\n focusable: props.focusable,\n defaultGlobalParams: props.globalParams,\n globalParams: props.globalParams,\n editMode: props.editMode,\n settings: props.settings,\n onItemMountChange: props.onItemMountChange,\n onItemRender: props.onItemRender,\n draggableHandleClassName: props.draggableHandleClassName,\n\n registerManager: props.registerManager,\n forwardedMetaRef: props.forwardedMetaRef,\n\n layout: resultLayout,\n temporaryLayout,\n layoutChange: onLayoutChange,\n memorizeOriginalLayout,\n revertToOriginalLayout,\n\n itemsState,\n itemsParams,\n onItemStateAndParamsChange,\n\n getItemsMeta,\n reloadItems,\n\n onDrop,\n onDropDragOver,\n outerDnDEnable,\n dragOverPlugin,\n\n onItemFocus: props.onItemFocus,\n onItemBlur: props.onItemBlur,\n\n /* default handlers bypass */\n onDragStart: props.onDragStart,\n onDrag: props.onDrag,\n onDragStop: props.onDragStop,\n onResizeStart: props.onResizeStart,\n onResize: props.onResize,\n onResizeStop: props.onResizeStop,\n }),\n [\n externalLayoutRevision,\n resultLayout,\n temporaryLayout,\n props.config,\n configItems,\n props.groups,\n props.context,\n props.noOverlay,\n props.focusable,\n props.globalParams,\n props.editMode,\n props.settings,\n itemsState,\n itemsParams,\n props.registerManager,\n onItemStateAndParamsChange,\n onDrop,\n onDropDragOver,\n onLayoutChange,\n props.onItemMountChange,\n props.onItemRender,\n getItemsMeta,\n reloadItems,\n memorizeOriginalLayout,\n revertToOriginalLayout,\n props.forwardedMetaRef,\n props.draggableHandleClassName,\n outerDnDEnable,\n dragOverPlugin,\n\n props.onItemFocus,\n props.onItemBlur,\n\n props.onDragStart,\n props.onDrag,\n props.onDragStop,\n props.onResizeStart,\n props.onResize,\n props.onResizeStop,\n ],\n );\n\n const overlayMenuItems = props.overlayMenuItems || props.registerManager.settings.menu;\n const controlsContextValue = React.useMemo(\n () => ({\n overlayControls: props.overlayControls,\n context: props.context,\n\n itemsStateAndParams: props.itemsStateAndParams,\n itemsState,\n itemsParams,\n\n getPreparedCopyItemOptions: props.getPreparedCopyItemOptions,\n onCopyFulfill: props.onCopyFulfill,\n\n menu: overlayMenuItems,\n\n editItem: props.onItemEdit,\n removeItem: onItemRemove,\n getLayoutItem: getLayoutItem,\n }),\n [\n props.overlayControls,\n props.context,\n props.itemsStateAndParams,\n props.onItemEdit,\n props.getPreparedCopyItemOptions,\n props.onCopyFulfill,\n overlayMenuItems,\n itemsState,\n itemsParams,\n onItemRemove,\n getLayoutItem,\n ],\n );\n\n return {controlsContextValue, dashkitContextValue};\n}\n\nexport function withContext(Component: React.ComponentType) {\n const WithContext = (props: DashKitWithContextProps) => {\n const {dashkitContextValue, controlsContextValue} = useMemoStateContext(props);\n\n return (\n <DashKitContext.Provider value={dashkitContextValue}>\n <DashkitOverlayControlsContext.Provider value={controlsContextValue}>\n <Component />\n </DashkitOverlayControlsContext.Provider>\n </DashKitContext.Provider>\n );\n };\n\n WithContext.displayName = `withContext(${\n Component.displayName || Component.name || 'Component'\n })`;\n\n return WithContext;\n}\n"]}
|
package/build/esm/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"10.4.
|
|
1
|
+
{"version":"10.4.3","type":"module","sideEffects":["*.scss","*.css"]}
|