@gravity-ui/dashkit 9.3.1 → 10.0.0-beta.0

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.
Files changed (94) hide show
  1. package/README.md +1 -1
  2. package/build/cjs/components/DashKit/DashKit.d.ts +2 -2
  3. package/build/cjs/components/DashKit/DashKit.js +2 -2
  4. package/build/cjs/components/DashKit/DashKit.js.map +1 -1
  5. package/build/cjs/components/DashKitView/DashKitView.d.ts +3 -5
  6. package/build/cjs/components/DashKitView/DashKitView.js.map +1 -1
  7. package/build/cjs/components/GridItem/GridItem.d.ts +32 -2
  8. package/build/cjs/components/GridItem/GridItem.js +9 -42
  9. package/build/cjs/components/GridItem/GridItem.js.map +1 -1
  10. package/build/cjs/components/GridLayout/GridLayout.d.ts +55 -65
  11. package/build/cjs/components/GridLayout/GridLayout.js +39 -17
  12. package/build/cjs/components/GridLayout/GridLayout.js.map +1 -1
  13. package/build/cjs/components/GridLayout/ReactGridLayout.d.ts +13 -2
  14. package/build/cjs/components/GridLayout/ReactGridLayout.js +27 -6
  15. package/build/cjs/components/GridLayout/ReactGridLayout.js.map +1 -1
  16. package/build/cjs/components/GridLayout/types.d.ts +59 -0
  17. package/build/cjs/components/GridLayout/types.js +3 -0
  18. package/build/cjs/components/GridLayout/types.js.map +1 -0
  19. package/build/cjs/components/Item/Item.d.ts +17 -72
  20. package/build/cjs/components/Item/Item.js +3 -12
  21. package/build/cjs/components/Item/Item.js.map +1 -1
  22. package/build/cjs/components/Item/types.d.ts +14 -0
  23. package/build/cjs/components/Item/types.js +3 -0
  24. package/build/cjs/components/Item/types.js.map +1 -0
  25. package/build/cjs/components/MobileLayout/MobileLayout.d.ts +7 -7
  26. package/build/cjs/components/MobileLayout/MobileLayout.js.map +1 -1
  27. package/build/cjs/components/OverlayControls/OverlayControls.d.ts +1 -1
  28. package/build/cjs/components/OverlayControls/OverlayControls.js.map +1 -1
  29. package/build/cjs/context/DashKitContext.d.ts +24 -14
  30. package/build/cjs/context/DashKitContext.js.map +1 -1
  31. package/build/cjs/hocs/prepareItem.d.ts +21 -71
  32. package/build/cjs/hocs/prepareItem.js +8 -29
  33. package/build/cjs/hocs/prepareItem.js.map +1 -1
  34. package/build/cjs/hocs/withContext.d.ts +12 -2
  35. package/build/cjs/hocs/withContext.js +35 -14
  36. package/build/cjs/hocs/withContext.js.map +1 -1
  37. package/build/cjs/package.json +1 -1
  38. package/build/cjs/typings/common.d.ts +6 -4
  39. package/build/cjs/typings/common.js.map +1 -1
  40. package/build/cjs/typings/config.d.ts +3 -7
  41. package/build/cjs/typings/config.js.map +1 -1
  42. package/build/cjs/typings/plugin.d.ts +7 -7
  43. package/build/cjs/typings/plugin.js.map +1 -1
  44. package/build/cjs/utils/register-manager.d.ts +2 -3
  45. package/build/cjs/utils/register-manager.js.map +1 -1
  46. package/build/cjs/utils/update-manager.d.ts +2 -2
  47. package/build/cjs/utils/update-manager.js.map +1 -1
  48. package/build/esm/components/DashKit/DashKit.d.ts +2 -2
  49. package/build/esm/components/DashKit/DashKit.js +2 -2
  50. package/build/esm/components/DashKit/DashKit.js.map +1 -1
  51. package/build/esm/components/DashKitView/DashKitView.d.ts +3 -5
  52. package/build/esm/components/DashKitView/DashKitView.js.map +1 -1
  53. package/build/esm/components/GridItem/GridItem.d.ts +32 -2
  54. package/build/esm/components/GridItem/GridItem.js +9 -42
  55. package/build/esm/components/GridItem/GridItem.js.map +1 -1
  56. package/build/esm/components/GridLayout/GridLayout.d.ts +55 -65
  57. package/build/esm/components/GridLayout/GridLayout.js +39 -17
  58. package/build/esm/components/GridLayout/GridLayout.js.map +1 -1
  59. package/build/esm/components/GridLayout/ReactGridLayout.d.ts +13 -2
  60. package/build/esm/components/GridLayout/ReactGridLayout.js +27 -6
  61. package/build/esm/components/GridLayout/ReactGridLayout.js.map +1 -1
  62. package/build/esm/components/GridLayout/types.d.ts +59 -0
  63. package/build/esm/components/GridLayout/types.js +2 -0
  64. package/build/esm/components/GridLayout/types.js.map +1 -0
  65. package/build/esm/components/Item/Item.d.ts +17 -72
  66. package/build/esm/components/Item/Item.js +3 -12
  67. package/build/esm/components/Item/Item.js.map +1 -1
  68. package/build/esm/components/Item/types.d.ts +14 -0
  69. package/build/esm/components/Item/types.js +2 -0
  70. package/build/esm/components/Item/types.js.map +1 -0
  71. package/build/esm/components/MobileLayout/MobileLayout.d.ts +7 -7
  72. package/build/esm/components/MobileLayout/MobileLayout.js.map +1 -1
  73. package/build/esm/components/OverlayControls/OverlayControls.d.ts +1 -1
  74. package/build/esm/components/OverlayControls/OverlayControls.js.map +1 -1
  75. package/build/esm/context/DashKitContext.d.ts +24 -14
  76. package/build/esm/context/DashKitContext.js.map +1 -1
  77. package/build/esm/hocs/prepareItem.d.ts +21 -71
  78. package/build/esm/hocs/prepareItem.js +8 -29
  79. package/build/esm/hocs/prepareItem.js.map +1 -1
  80. package/build/esm/hocs/withContext.d.ts +12 -2
  81. package/build/esm/hocs/withContext.js +35 -14
  82. package/build/esm/hocs/withContext.js.map +1 -1
  83. package/build/esm/package.json +1 -1
  84. package/build/esm/typings/common.d.ts +6 -4
  85. package/build/esm/typings/common.js.map +1 -1
  86. package/build/esm/typings/config.d.ts +3 -7
  87. package/build/esm/typings/config.js.map +1 -1
  88. package/build/esm/typings/plugin.d.ts +7 -7
  89. package/build/esm/typings/plugin.js.map +1 -1
  90. package/build/esm/utils/register-manager.d.ts +2 -3
  91. package/build/esm/utils/register-manager.js.map +1 -1
  92. package/build/esm/utils/update-manager.d.ts +2 -2
  93. package/build/esm/utils/update-manager.js.map +1 -1
  94. package/package.json +17 -7
@@ -1,11 +1,10 @@
1
1
  import React from 'react';
2
- import PropTypes from 'prop-types';
3
2
  import { prepareItem } from "../../hocs/prepareItem.js";
4
3
  import { cn } from "../../utils/cn.js";
5
4
  import "./Item.css";
6
5
  const b = cn('dashkit-item');
7
6
  // TODO: getDerivedStateFromError и заглушка с ошибкой
8
- const Item = ({ registerManager, rendererProps, type, isPlaceholder, forwardedPluginRef, onItemRender, onItemMountChange, item, }) => {
7
+ const Item = ({ registerManager, rendererProps, isPlaceholder, forwardedPluginRef, onItemRender, onItemMountChange, item, }) => {
9
8
  var _a, _b;
10
9
  // to avoid too frequent re-creation of functions that do not affect the rendering
11
10
  const isAsyncItemRef = React.useRef(false);
@@ -13,6 +12,7 @@ const Item = ({ registerManager, rendererProps, type, isPlaceholder, forwardedPl
13
12
  const onItemRenderRef = React.useRef(onItemRender);
14
13
  const onItemMountChangeRef = React.useRef(onItemMountChange);
15
14
  itemRef.current = item;
15
+ const { type } = item;
16
16
  onItemRenderRef.current = onItemRender;
17
17
  onItemMountChangeRef.current = onItemMountChange;
18
18
  const isRegisteredType = registerManager.check(type);
@@ -34,6 +34,7 @@ const Item = ({ registerManager, rendererProps, type, isPlaceholder, forwardedPl
34
34
  });
35
35
  };
36
36
  }
37
+ return undefined;
37
38
  }, []);
38
39
  const onLoad = React.useCallback(() => {
39
40
  var _a;
@@ -56,15 +57,5 @@ const Item = ({ registerManager, rendererProps, type, isPlaceholder, forwardedPl
56
57
  }
57
58
  return (React.createElement("div", { className: b('renderer') }, registerManager.getItem(type).renderer(itemRendererProps, forwardedPluginRef)));
58
59
  };
59
- Item.propTypes = {
60
- forwardedPluginRef: PropTypes.any,
61
- rendererProps: PropTypes.object,
62
- registerManager: PropTypes.object,
63
- type: PropTypes.string,
64
- isPlaceholder: PropTypes.bool,
65
- onItemRender: PropTypes.func,
66
- onItemMountChange: PropTypes.func,
67
- item: PropTypes.object,
68
- };
69
60
  export default prepareItem(Item);
70
61
  //# sourceMappingURL=Item.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Item.js","sourceRoot":"../../../../src","sources":["components/Item/Item.js"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport PropTypes from 'prop-types';\n\nimport {prepareItem} from '../../hocs/prepareItem';\nimport {cn} from '../../utils/cn';\n\nimport './Item.scss';\n\nconst b = cn('dashkit-item');\n\n// TODO: getDerivedStateFromError и заглушка с ошибкой\nconst Item = ({\n registerManager,\n rendererProps,\n type,\n isPlaceholder,\n forwardedPluginRef,\n onItemRender,\n onItemMountChange,\n item,\n}) => {\n // to avoid too frequent re-creation of functions that do not affect the rendering\n const isAsyncItemRef = React.useRef(false);\n const itemRef = React.useRef(item);\n const onItemRenderRef = React.useRef(onItemRender);\n const onItemMountChangeRef = React.useRef(onItemMountChange);\n\n itemRef.current = item;\n onItemRenderRef.current = onItemRender;\n onItemMountChangeRef.current = onItemMountChange;\n\n const isRegisteredType = registerManager.check(type);\n\n React.useLayoutEffect(() => {\n if (isRegisteredType && !isPlaceholder) {\n onItemMountChangeRef.current?.(itemRef.current, {\n isAsync: isAsyncItemRef.current,\n isMounted: true,\n });\n\n if (!isAsyncItemRef.current) {\n onItemRenderRef.current?.(itemRef.current);\n }\n\n return () => {\n onItemMountChangeRef.current?.(itemRef.current, {\n isAsync: isAsyncItemRef.current,\n isMounted: false,\n });\n };\n }\n }, []);\n\n const onLoad = React.useCallback(() => {\n onItemRenderRef.current?.(itemRef.current);\n }, []);\n\n const onBeforeLoad = React.useCallback(() => {\n isAsyncItemRef.current = true;\n\n return onLoad;\n }, [onLoad]);\n\n const itemRendererProps = React.useMemo(() => {\n return {...rendererProps, onBeforeLoad};\n }, [rendererProps, onBeforeLoad]);\n\n if (!isRegisteredType) {\n console.warn(`type [${type}] не зарегистрирован`);\n return null;\n }\n\n if (isPlaceholder) {\n return (\n <div className={b('placeholder')}>\n {registerManager\n .getItem(type)\n .placeholderRenderer?.(itemRendererProps, forwardedPluginRef) || null}\n </div>\n );\n }\n\n return (\n <div className={b('renderer')}>\n {registerManager.getItem(type).renderer(itemRendererProps, forwardedPluginRef)}\n </div>\n );\n};\n\nItem.propTypes = {\n forwardedPluginRef: PropTypes.any,\n rendererProps: PropTypes.object,\n registerManager: PropTypes.object,\n type: PropTypes.string,\n isPlaceholder: PropTypes.bool,\n onItemRender: PropTypes.func,\n onItemMountChange: PropTypes.func,\n item: PropTypes.object,\n};\n\nexport default prepareItem(Item);\n"]}
1
+ {"version":3,"file":"Item.js","sourceRoot":"../../../../src","sources":["components/Item/Item.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {prepareItem} from '../../hocs/prepareItem';\nimport {cn} from '../../utils/cn';\n\nimport type {ItemProps} from './types';\n\nimport './Item.scss';\n\nconst b = cn('dashkit-item');\n\n// TODO: getDerivedStateFromError и заглушка с ошибкой\nconst Item: React.FC<ItemProps> = ({\n registerManager,\n rendererProps,\n isPlaceholder,\n forwardedPluginRef,\n onItemRender,\n onItemMountChange,\n item,\n}) => {\n // to avoid too frequent re-creation of functions that do not affect the rendering\n const isAsyncItemRef = React.useRef(false);\n const itemRef = React.useRef(item);\n const onItemRenderRef = React.useRef(onItemRender);\n const onItemMountChangeRef = React.useRef(onItemMountChange);\n\n itemRef.current = item;\n const {type} = item;\n onItemRenderRef.current = onItemRender;\n onItemMountChangeRef.current = onItemMountChange;\n\n const isRegisteredType = registerManager.check(type);\n\n React.useLayoutEffect(() => {\n if (isRegisteredType && !isPlaceholder) {\n onItemMountChangeRef.current?.(itemRef.current, {\n isAsync: isAsyncItemRef.current,\n isMounted: true,\n });\n\n if (!isAsyncItemRef.current) {\n onItemRenderRef.current?.(itemRef.current);\n }\n\n return () => {\n onItemMountChangeRef.current?.(itemRef.current, {\n isAsync: isAsyncItemRef.current,\n isMounted: false,\n });\n };\n }\n\n return undefined;\n }, []);\n\n const onLoad = React.useCallback(() => {\n onItemRenderRef.current?.(itemRef.current);\n }, []);\n\n const onBeforeLoad = React.useCallback(() => {\n isAsyncItemRef.current = true;\n\n return onLoad;\n }, [onLoad]);\n\n const itemRendererProps = React.useMemo(() => {\n return {...rendererProps, onBeforeLoad};\n }, [rendererProps, onBeforeLoad]);\n\n if (!isRegisteredType) {\n console.warn(`type [${type}] не зарегистрирован`);\n return null;\n }\n\n if (isPlaceholder) {\n return (\n <div className={b('placeholder')}>\n {registerManager\n .getItem(type)\n .placeholderRenderer?.(itemRendererProps, forwardedPluginRef) || null}\n </div>\n );\n }\n\n return (\n <div className={b('renderer')}>\n {registerManager.getItem(type).renderer(itemRendererProps, forwardedPluginRef)}\n </div>\n );\n};\n\nexport default prepareItem(Item);\n"]}
@@ -0,0 +1,14 @@
1
+ import type { ConfigItem, ItemParams } from "../../shared/types/index.js";
2
+ import type { PluginRef, PluginWidgetProps } from "../../typings/index.js";
3
+ import type { RegisterManager } from "../../utils/register-manager.js";
4
+ import type { DashKitProps } from "../DashKit/index.js";
5
+ export type RendererProps = Omit<PluginWidgetProps<ItemParams>, 'onBeforeLoad'>;
6
+ export type ItemProps = {
7
+ forwardedPluginRef?: (ref: PluginRef) => void;
8
+ isPlaceholder?: boolean;
9
+ item: ConfigItem;
10
+ registerManager: RegisterManager;
11
+ rendererProps: RendererProps;
12
+ onItemRender?: DashKitProps['onItemRender'];
13
+ onItemMountChange?: DashKitProps['onItemMountChange'];
14
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"../../../../src","sources":["components/Item/types.ts"],"names":[],"mappings":"","sourcesContent":["import type {ConfigItem, ItemParams} from '../../shared/types';\nimport type {PluginRef, PluginWidgetProps} from '../../typings';\nimport type {RegisterManager} from '../../utils/register-manager';\nimport type {DashKitProps} from '../DashKit';\n\nexport type RendererProps = Omit<PluginWidgetProps<ItemParams>, 'onBeforeLoad'>;\n\nexport type ItemProps = {\n forwardedPluginRef?: (ref: PluginRef) => void;\n isPlaceholder?: boolean;\n item: ConfigItem;\n registerManager: RegisterManager;\n rendererProps: RendererProps;\n onItemRender?: DashKitProps['onItemRender'];\n onItemMountChange?: DashKitProps['onItemMountChange'];\n};\n"]}
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import type { PluginRef } from 'src/typings';
2
3
  import { DashKitContext } from "../../context/index.js";
3
4
  import { getSortedConfigItems } from "./helpers.js";
4
5
  import "./MobileLayout.css";
@@ -6,26 +7,25 @@ type MobileLayoutProps = {};
6
7
  type MobileLayoutState = {
7
8
  itemsWithActiveAutoheight: Record<string, boolean>;
8
9
  };
9
- type PlugibRefObject = React.RefObject<any>;
10
10
  export default class MobileLayout extends React.PureComponent<MobileLayoutProps, MobileLayoutState> {
11
11
  static contextType: React.Context<import("../../context/index.js").DashKitCtxShape>;
12
12
  context: React.ContextType<typeof DashKitContext>;
13
- pluginsRefs: PlugibRefObject[];
13
+ pluginsRefs: PluginRef[];
14
14
  sortedLayoutItems: Record<string, ReturnType<typeof getSortedConfigItems>> | null;
15
15
  _memoLayout: import("../../index.js").ConfigLayout[];
16
- _memoForwardedPluginRef: Array<(refObject: PlugibRefObject) => void>;
16
+ _memoForwardedPluginRef: Array<(refObject: PluginRef) => void>;
17
17
  _memoAdjustWidgetLayout: Record<string, (props: {
18
- needSetDefault: boolean;
18
+ needSetDefault?: boolean;
19
19
  }) => void>;
20
20
  state: MobileLayoutState;
21
21
  render(): JSX.Element;
22
22
  getSortedLayoutItems(): Record<string, (import("../../index.js").ConfigItem & import("../../index.js").ConfigLayout)[]>;
23
- getMemoForwardRefCallback(refIndex: number): (refObject: PlugibRefObject) => void;
23
+ getMemoForwardRefCallback(refIndex: number): (refObject: PluginRef) => void;
24
24
  adjustWidgetLayout(id: string, { needSetDefault }: {
25
- needSetDefault: boolean;
25
+ needSetDefault?: boolean;
26
26
  }): void;
27
27
  getMemoAdjustWidgetLayout(id: string): (props: {
28
- needSetDefault: boolean;
28
+ needSetDefault?: boolean;
29
29
  }) => void;
30
30
  }
31
31
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"MobileLayout.js","sourceRoot":"../../../../src","sources":["components/MobileLayout/MobileLayout.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport groupBy from 'lodash/groupBy';\n\nimport {DEFAULT_GROUP} from '../../constants';\nimport {DashKitContext} from '../../context';\nimport {cn} from '../../utils/cn';\nimport Item from '../Item/Item';\n\nimport {getSortedConfigItems} from './helpers';\n\nimport './MobileLayout.scss';\n\nconst b = cn('dashkit-mobile-layout');\n\ntype MobileLayoutProps = {};\n\ntype MobileLayoutState = {\n itemsWithActiveAutoheight: Record<string, boolean>;\n};\n\ntype PlugibRefObject = React.RefObject<any>;\n\nexport default class MobileLayout extends React.PureComponent<\n MobileLayoutProps,\n MobileLayoutState\n> {\n static contextType = DashKitContext;\n context!: React.ContextType<typeof DashKitContext>;\n\n pluginsRefs: PlugibRefObject[] = [];\n sortedLayoutItems: Record<string, ReturnType<typeof getSortedConfigItems>> | null = null;\n\n _memoLayout = this.context.layout;\n _memoForwardedPluginRef: Array<(refObject: PlugibRefObject) => void> = [];\n _memoAdjustWidgetLayout: Record<string, (props: {needSetDefault: boolean}) => void> = {};\n\n state: MobileLayoutState = {\n itemsWithActiveAutoheight: {},\n };\n\n render() {\n const {\n config,\n layout,\n groups = [{id: DEFAULT_GROUP}],\n context,\n editMode,\n configItems,\n } = this.context;\n\n this.pluginsRefs.length = configItems.length;\n\n const sortedItems = this.getSortedLayoutItems();\n let indexOffset = 0;\n\n return (\n <div className={b()}>\n {groups.map((group) => {\n const groupId = group.id || DEFAULT_GROUP;\n const items = sortedItems[groupId] || [];\n\n const children = items.map((item, index) => {\n const isItemWithActiveAutoheight =\n item.id in this.state.itemsWithActiveAutoheight;\n\n return (\n <div\n className={b('item', {autoheight: isItemWithActiveAutoheight})}\n key={item.id}\n >\n <Item\n id={item.id}\n item={item}\n layout={layout}\n shouldItemUpdate={false}\n adjustWidgetLayout={this.getMemoAdjustWidgetLayout(item.id)}\n forwardedPluginRef={this.getMemoForwardRefCallback(\n indexOffset + index,\n )}\n onItemMountChange={this.context.onItemMountChange}\n onItemRender={this.context.onItemRender}\n />\n </div>\n );\n });\n\n indexOffset += items.length;\n\n if (group.render) {\n return group.render(groupId, children, {\n isMobile: true,\n config,\n context,\n editMode,\n items,\n layout,\n });\n }\n\n return children;\n })}\n </div>\n );\n }\n\n getSortedLayoutItems() {\n if (this.sortedLayoutItems && this.context.layout === this._memoLayout) {\n return this.sortedLayoutItems;\n }\n\n this._memoLayout = this.context.layout;\n\n const hasOrderId = Boolean(this.context.configItems.find((item) => item.orderId));\n\n this.sortedLayoutItems = groupBy(\n getSortedConfigItems(this.context.config, this.context.configItems, hasOrderId),\n (item) => item.parent || DEFAULT_GROUP,\n );\n\n return this.sortedLayoutItems;\n }\n\n getMemoForwardRefCallback(refIndex: number) {\n if (!this._memoForwardedPluginRef[refIndex]) {\n this._memoForwardedPluginRef[refIndex] = (pluginRef: PlugibRefObject) => {\n this.pluginsRefs[refIndex] = pluginRef;\n };\n }\n\n return this._memoForwardedPluginRef[refIndex];\n }\n\n adjustWidgetLayout(id: string, {needSetDefault}: {needSetDefault: boolean}) {\n if (needSetDefault) {\n const indexesOfItemsWithActiveAutoheight = {\n ...this.state.itemsWithActiveAutoheight,\n };\n\n delete indexesOfItemsWithActiveAutoheight[id];\n\n this.setState({itemsWithActiveAutoheight: indexesOfItemsWithActiveAutoheight});\n } else {\n this.setState({\n itemsWithActiveAutoheight: Object.assign({}, this.state.itemsWithActiveAutoheight, {\n [id]: true,\n }),\n });\n }\n }\n\n getMemoAdjustWidgetLayout(id: string) {\n if (!this._memoAdjustWidgetLayout[id]) {\n this._memoAdjustWidgetLayout[id] = this.adjustWidgetLayout.bind(this, id);\n }\n\n return this._memoAdjustWidgetLayout[id];\n }\n}\n"]}
1
+ {"version":3,"file":"MobileLayout.js","sourceRoot":"../../../../src","sources":["components/MobileLayout/MobileLayout.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport groupBy from 'lodash/groupBy';\n\nimport type {PluginRef} from 'src/typings';\n\nimport {DEFAULT_GROUP} from '../../constants';\nimport {DashKitContext} from '../../context';\nimport {cn} from '../../utils/cn';\nimport Item from '../Item/Item';\n\nimport {getSortedConfigItems} from './helpers';\n\nimport './MobileLayout.scss';\n\nconst b = cn('dashkit-mobile-layout');\n\ntype MobileLayoutProps = {};\n\ntype MobileLayoutState = {\n itemsWithActiveAutoheight: Record<string, boolean>;\n};\n\nexport default class MobileLayout extends React.PureComponent<\n MobileLayoutProps,\n MobileLayoutState\n> {\n static contextType = DashKitContext;\n context!: React.ContextType<typeof DashKitContext>;\n\n pluginsRefs: PluginRef[] = [];\n sortedLayoutItems: Record<string, ReturnType<typeof getSortedConfigItems>> | null = null;\n\n _memoLayout = this.context.layout;\n _memoForwardedPluginRef: Array<(refObject: PluginRef) => void> = [];\n _memoAdjustWidgetLayout: Record<string, (props: {needSetDefault?: boolean}) => void> = {};\n\n state: MobileLayoutState = {\n itemsWithActiveAutoheight: {},\n };\n\n render() {\n const {\n config,\n layout,\n groups = [{id: DEFAULT_GROUP}],\n context,\n editMode,\n configItems,\n } = this.context;\n\n this.pluginsRefs.length = configItems.length;\n\n const sortedItems = this.getSortedLayoutItems();\n let indexOffset = 0;\n\n return (\n <div className={b()}>\n {groups.map((group) => {\n const groupId = group.id || DEFAULT_GROUP;\n const items = sortedItems[groupId] || [];\n\n const children = items.map((item, index) => {\n const isItemWithActiveAutoheight =\n item.id in this.state.itemsWithActiveAutoheight;\n\n return (\n <div\n className={b('item', {autoheight: isItemWithActiveAutoheight})}\n key={item.id}\n >\n <Item\n id={item.id}\n item={item}\n layout={layout}\n shouldItemUpdate={false}\n adjustWidgetLayout={this.getMemoAdjustWidgetLayout(item.id)}\n forwardedPluginRef={this.getMemoForwardRefCallback(\n indexOffset + index,\n )}\n onItemMountChange={this.context.onItemMountChange}\n onItemRender={this.context.onItemRender}\n />\n </div>\n );\n });\n\n indexOffset += items.length;\n\n if (group.render) {\n return group.render(groupId, children, {\n isMobile: true,\n config,\n context,\n editMode,\n items,\n layout,\n });\n }\n\n return children;\n })}\n </div>\n );\n }\n\n getSortedLayoutItems() {\n if (this.sortedLayoutItems && this.context.layout === this._memoLayout) {\n return this.sortedLayoutItems;\n }\n\n this._memoLayout = this.context.layout;\n\n const hasOrderId = Boolean(this.context.configItems.find((item) => item.orderId));\n\n this.sortedLayoutItems = groupBy(\n getSortedConfigItems(this.context.config, this.context.configItems, hasOrderId),\n (item) => item.parent || DEFAULT_GROUP,\n );\n\n return this.sortedLayoutItems;\n }\n\n getMemoForwardRefCallback(refIndex: number) {\n if (!this._memoForwardedPluginRef[refIndex]) {\n this._memoForwardedPluginRef[refIndex] = (pluginRef: PluginRef) => {\n this.pluginsRefs[refIndex] = pluginRef;\n };\n }\n\n return this._memoForwardedPluginRef[refIndex];\n }\n\n adjustWidgetLayout(id: string, {needSetDefault}: {needSetDefault?: boolean}) {\n if (needSetDefault) {\n const indexesOfItemsWithActiveAutoheight = {\n ...this.state.itemsWithActiveAutoheight,\n };\n\n delete indexesOfItemsWithActiveAutoheight[id];\n\n this.setState({itemsWithActiveAutoheight: indexesOfItemsWithActiveAutoheight});\n } else {\n this.setState({\n itemsWithActiveAutoheight: Object.assign({}, this.state.itemsWithActiveAutoheight, {\n [id]: true,\n }),\n });\n }\n }\n\n getMemoAdjustWidgetLayout(id: string) {\n if (!this._memoAdjustWidgetLayout[id]) {\n this._memoAdjustWidgetLayout[id] = this.adjustWidgetLayout.bind(this, id);\n }\n\n return this._memoAdjustWidgetLayout[id];\n }\n}\n"]}
@@ -39,7 +39,7 @@ interface OverlayControlsDefaultProps {
39
39
  }
40
40
  interface OverlayControlsProps extends OverlayControlsDefaultProps {
41
41
  configItem: ConfigItem;
42
- onItemClick?: () => void | null;
42
+ onItemClick?: () => void;
43
43
  }
44
44
  type PreparedCopyItemOptionsArg = Pick<ConfigItem, 'data' | 'type' | 'defaults' | 'namespace'> & {
45
45
  timestamp: number;
@@ -1 +1 @@
1
- {"version":3,"file":"OverlayControls.js","sourceRoot":"../../../../src","sources":["components/OverlayControls/OverlayControls.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {Ellipsis, Gear, Xmark} from '@gravity-ui/icons';\nimport {\n Button,\n ButtonSize,\n ButtonView,\n DropdownMenu,\n DropdownMenuItem,\n Icon,\n IconProps,\n MenuItemProps,\n} from '@gravity-ui/uikit';\nimport noop from 'lodash/noop';\n\nimport {\n COPIED_WIDGET_STORE_KEY,\n DRAGGABLE_CANCEL_CLASS_NAME,\n MenuItems,\n OVERLAY_CONTROLS_CLASS_NAME,\n OVERLAY_ICON_SIZE,\n} from '../../constants';\nimport {DashkitOvelayControlsContext, OverlayControlsCtxShape} from '../../context';\nimport {i18n} from '../../i18n';\nimport {\n type ConfigItem,\n type ItemParams,\n type ItemState,\n type PluginBase,\n isItemWithTabs,\n resolveItemInnerId,\n} from '../../shared';\nimport {MenuItem, Settings} from '../../typings';\nimport {cn} from '../../utils/cn';\n\nimport './OverlayControls.scss';\n\nconst b = cn(OVERLAY_CONTROLS_CLASS_NAME);\n\nexport enum OverlayControlsPosition {\n TopRight = 'top_right',\n TopLeft = 'top_left',\n BottomRight = 'bottom_right',\n BottomLeft = 'bottom_left',\n}\n\nexport interface OverlayControlItem {\n title?: string;\n icon?: IconProps['data'];\n renderIcon?: (item: ConfigItem) => IconProps['data'];\n iconSize?: number | string;\n handler?: (item: ConfigItem) => void;\n visible?: (item: ConfigItem) => boolean;\n allWidgetsControls?: boolean; // флаг кастомного контрола (без кастомного виджета), которые показываются не в списке меню\n excludeWidgetsTypes?: Array<PluginBase['type']>; // массив с типами виджетов (плагинов), которые исключаем из отображения контрола по настройке allWidgetsControls\n id?: string; // id дефолтного пункта меню для возможноти использования дефолтного action в кастомных контролах\n qa?: string;\n className?: string;\n}\n\nexport interface OverlayCustomControlItem {\n id: string;\n title?: string;\n icon?: MenuItemProps['iconStart'];\n iconSize?: number | string;\n handler?: (item: ConfigItem, params: ItemParams, state: ItemState) => void;\n visible?: (item: ConfigItem) => boolean;\n className?: string;\n qa?: string;\n}\n\ninterface OverlayControlsDefaultProps {\n position: OverlayControlsPosition;\n view: ButtonView;\n size: ButtonSize;\n}\n\ninterface OverlayControlsProps extends OverlayControlsDefaultProps {\n configItem: ConfigItem;\n onItemClick?: () => void | null;\n}\n\ntype PreparedCopyItemOptionsArg = Pick<ConfigItem, 'data' | 'type' | 'defaults' | 'namespace'> & {\n timestamp: number;\n layout: {\n w: number;\n h: number;\n };\n targetId?: string;\n targetInnerId?: string;\n};\n\nexport type PreparedCopyItemOptions<C extends object = {}> = PreparedCopyItemOptionsArg & {\n copyContext?: C;\n};\n\ntype OverlayControlsCtx = React.Context<OverlayControlsCtxShape>;\n\nconst DEFAULT_DROPDOWN_MENU = [MenuItems.Copy, MenuItems.Delete];\n\nclass OverlayControls extends React.Component<OverlayControlsProps> {\n static contextType = DashkitOvelayControlsContext;\n static defaultProps: OverlayControlsDefaultProps = {\n position: OverlayControlsPosition.TopRight,\n view: 'flat',\n size: 'm',\n };\n context!: React.ContextType<OverlayControlsCtx>;\n\n state = {\n dropdownMenuItems: [] as DropdownMenuItem[],\n };\n\n componentDidMount() {\n this.updateDropdownMenuItems();\n }\n\n componentDidUpdate() {\n this.updateDropdownMenuItems();\n }\n\n render() {\n const {position} = this.props;\n const items = this.getItems();\n const hasCustomControlsWithWidgets = items.length > 0;\n\n const controls = hasCustomControlsWithWidgets\n ? this.getCustomControlsWithWidgets()\n : this.renderControls();\n\n return <div className={b({position}, [DRAGGABLE_CANCEL_CLASS_NAME])}>{controls}</div>;\n }\n\n private shallowEqualDropdownMenu(menuA: DropdownMenuItem[], menuB: DropdownMenuItem[]) {\n return (\n menuA.length === menuB.length &&\n menuA.every((itemA, index) => {\n const itemB = menuB[index];\n\n if (!itemB) {\n return false;\n }\n\n return Object.entries(itemA).every(\n ([key, value]) =>\n /**\n * field 'action' is new every time\n * @see {@link https://github.com/gravity-ui/dashkit/pull/267/commits/c6378b67c5fea07902a49ccce8118760a4ad2df0#diff-aa6a22e5a09a09ccc3f8f937d4ef6aaff97afc57da1b370f0120f0e225f7b061L297}\n */\n key === 'action' || itemB[key as keyof DropdownMenuItem] === value,\n );\n })\n );\n }\n\n private updateDropdownMenuItems = () => {\n const items = this.getDropdownMenuItems();\n if (!this.shallowEqualDropdownMenu(items, this.state.dropdownMenuItems)) {\n this.setState({dropdownMenuItems: items});\n }\n };\n\n private getItems = () => {\n const {overlayControls} = this.context;\n const {configItem} = this.props;\n\n return (overlayControls && overlayControls[configItem.type]) || [];\n };\n\n private renderControlsItem = (item: OverlayControlItem, index: number, length: number) => {\n const {view, size, onItemClick} = this.props;\n const {title, handler, icon, renderIcon, iconSize, qa, className} = item;\n\n const iconData = renderIcon ? renderIcon(this.props.configItem) : icon;\n\n const onItemClickHandler = typeof handler === 'function' ? handler : noop;\n return (\n <Button\n key={`control_${index}`}\n view={view}\n size={size}\n title={title}\n pin={this.getControlItemPinStyle(index, length)}\n onClick={() => {\n onItemClickHandler(this.props.configItem);\n onItemClick?.();\n }}\n className={className}\n qa={qa}\n >\n <Icon data={iconData || Gear} size={iconSize ?? OVERLAY_ICON_SIZE} />\n </Button>\n );\n };\n\n private getDropDownMenuItemConfig(menuName: string, isDefaultMenu?: boolean) {\n switch (menuName) {\n case MenuItems.Copy: {\n return {\n action: this.onCopyItem,\n text: i18n('label_copy'),\n };\n }\n case MenuItems.Delete: {\n return {\n action: this.onRemoveItem,\n text: i18n('label_delete'),\n };\n }\n case MenuItems.Settings: {\n // для дефолтного состояния меню нет настройки settings, а для кастомного можно использовать дефолтный action и text\n if (isDefaultMenu) {\n return null;\n }\n return {\n action: this.onEditItem,\n text: i18n('label_settings'),\n };\n }\n }\n return null;\n }\n\n private getDefaultControls = () => {\n const {view, size} = this.props;\n\n if (this.context.overlayControls === null) {\n return null;\n }\n\n return (\n <Button\n key={'control_default'}\n view={view}\n size={size}\n title={i18n('label_settings')}\n pin=\"round-brick\"\n onClick={this.onEditItem}\n qa=\"dashkit-overlay-control-settings\"\n >\n <Icon data={Gear} size={OVERLAY_ICON_SIZE} />\n </Button>\n );\n };\n\n private renderControls() {\n const customLeftControls = this.getCustomLeftOverlayControls();\n const hasCustomOverlayLeftControls = Boolean(customLeftControls.length);\n\n const controls = hasCustomOverlayLeftControls\n ? customLeftControls.map(\n (item: OverlayControlItem, index: number, items: OverlayControlItem[]) =>\n this.renderControlsItem(item, index, items.length + 1),\n )\n : this.getDefaultControls();\n\n const menu = this.renderMenu(controls === null);\n\n return (\n <div\n className={b('default-controls', {\n 'with-custom-left': hasCustomOverlayLeftControls,\n })}\n >\n {controls}\n {menu}\n </div>\n );\n }\n private renderMenu(isOnlyOneItem: boolean) {\n const {view, size} = this.props;\n\n const dropdown = this.renderDropdownMenu(isOnlyOneItem);\n\n if (dropdown) {\n return dropdown;\n }\n\n return (\n <Button\n key={'delete-control'}\n view={view}\n size={size}\n title={i18n('label_delete')}\n pin={isOnlyOneItem ? 'round-round' : 'brick-round'}\n onClick={this.onRemoveItem}\n qa=\"dashkit-overlay-control-menu\"\n >\n <Icon data={Xmark} size={OVERLAY_ICON_SIZE} />\n </Button>\n );\n }\n\n private isDefaultMenu(menu: Settings['menu']) {\n return menu?.every((item) =>\n (Object.values(MenuItems) as Array<string>).includes(String(item)),\n );\n }\n private getDropdownMenuItems(): DropdownMenuItem[] {\n const {onItemClick} = this.props;\n const {menu: contextMenu, itemsParams, itemsState} = this.context;\n\n const configItem = this.props.configItem;\n const itemParams = itemsParams[configItem.id];\n const itemState = itemsState?.[configItem.id] || {};\n\n const menu = contextMenu && contextMenu.length > 0 ? contextMenu : DEFAULT_DROPDOWN_MENU;\n\n const isDefaultMenu = this.isDefaultMenu(menu);\n\n return isDefaultMenu\n ? ((menu || []) as string[]).reduce<DropdownMenuItem[]>((memo, name: string) => {\n const item = this.getDropDownMenuItemConfig(name, true);\n if (item) {\n memo.push(item);\n }\n\n return memo;\n }, [])\n : menu.reduce<DropdownMenuItem[]>((memo, item: MenuItem) => {\n if (typeof item === 'string') {\n return memo;\n }\n // custom menu dropdown item filter\n if (item.visible && !item.visible(configItem)) {\n return memo;\n }\n\n const itemHandler = item.handler;\n\n const itemAction =\n typeof itemHandler === 'function'\n ? () => {\n const result = itemHandler(configItem, itemParams, itemState);\n onItemClick?.();\n return result;\n }\n : this.getDropDownMenuItemConfig(item.id)?.action || (() => {});\n\n memo.push({\n // @ts-expect-error\n text: item.title || i18n(item.id),\n iconStart: item.icon,\n /**\n * if the logic of creating the 'action' field is changed, it is necessary to update the logic of the method shallowEqualDropdownMenu\n * @see {@link https://github.com/gravity-ui/dashkit/pull/267/commits/c6378b67c5fea07902a49ccce8118760a4ad2df0#diff-aa6a22e5a09a09ccc3f8f937d4ef6aaff97afc57da1b370f0120f0e225f7b061R143}\n */\n action: itemAction,\n className: item.className,\n qa: item.qa,\n });\n\n return memo;\n }, []);\n }\n\n private renderDropdownMenu(isOnlyOneItem: boolean) {\n const {view, size} = this.props;\n\n const items = this.getDropdownMenuItems();\n\n if (items.length === 0) {\n return null;\n }\n\n return (\n <DropdownMenu\n key={'controls_dropdown'}\n items={items}\n renderSwitcher={(props) => (\n <Button\n {...props}\n view={view}\n size={size}\n pin={isOnlyOneItem ? 'round-round' : 'brick-round'}\n extraProps={{'aria-label': i18n('label_more-options')}}\n qa=\"dashkit-overlay-control-menu\"\n >\n <Icon data={Ellipsis} size={OVERLAY_ICON_SIZE} />\n </Button>\n )}\n onOpenToggle={this.updateDropdownMenuItems}\n popupProps={{\n className: DRAGGABLE_CANCEL_CLASS_NAME,\n }}\n />\n );\n }\n private getCustomLeftOverlayControls = () => {\n // выбираем только items-ы у которых проставлено поле `allWidgetsControls:true`\n // те контролы, которые будут показываться слева от меню\n let controls: OverlayControlItem[] = [];\n const {onItemClick} = this.props;\n\n for (const controlItem of Object.values(this.context.overlayControls || {})) {\n controls = controls.concat(\n (\n (controlItem as OverlayControlItem[]).filter((item) => {\n // если тип виджета-плагина в списке исключаемых, то не показываем такой контрол\n if (item.excludeWidgetsTypes?.includes(this.props.configItem.type)) {\n return false;\n }\n\n return item.visible\n ? item.visible(this.props.configItem)\n : item.allWidgetsControls;\n }) || []\n ).map((item) => {\n if (!item?.id) {\n return item;\n }\n return {\n ...item,\n handler:\n typeof item.handler === 'function'\n ? (...args) => {\n const result = item.handler?.(...args);\n onItemClick?.();\n return result;\n }\n : this.getDropDownMenuItemConfig(item.id)?.action || (() => {}),\n };\n }),\n );\n }\n\n return controls;\n };\n private onCopyItem = () => {\n const {configItem} = this.props;\n const correspondedItemLayout = this.context.getLayoutItem(configItem.id);\n\n let targetInnerId;\n\n if (isItemWithTabs(this.props.configItem)) {\n targetInnerId = resolveItemInnerId({\n item: this.props.configItem,\n itemsStateAndParams: this.context.itemsStateAndParams,\n });\n }\n\n let options: PreparedCopyItemOptions = {\n timestamp: Date.now(),\n data: configItem.data,\n type: configItem.type,\n defaults: configItem.defaults,\n namespace: configItem.namespace,\n layout: {\n w: correspondedItemLayout!.w,\n h: correspondedItemLayout!.h,\n },\n targetId: this.props.configItem.id,\n targetInnerId,\n };\n\n if (this.context.context?.getPreparedCopyItemOptions) {\n console.warn?.(\n '`context.getPreparedCopyItemOptions` is deprecated. Please use `getPreparedCopyItemOptions` prop instead',\n );\n }\n\n const getPreparedCopyItemOptions =\n this.context?.getPreparedCopyItemOptions ??\n this.context.context?.getPreparedCopyItemOptions;\n\n if (typeof getPreparedCopyItemOptions === 'function') {\n options = getPreparedCopyItemOptions(options);\n }\n\n try {\n localStorage.setItem(COPIED_WIDGET_STORE_KEY, JSON.stringify(options));\n this.context.onCopyFulfill?.(null, options);\n } catch (e) {\n const error = e instanceof Error ? e : new Error('Unknown error while copying item');\n this.context.onCopyFulfill?.(error);\n }\n // https://stackoverflow.com/questions/35865481/storage-event-not-firing\n window.dispatchEvent(new Event('storage'));\n this.props.onItemClick?.();\n };\n private onEditItem = () => {\n this.context.editItem?.(this.props.configItem);\n this.props.onItemClick?.();\n };\n private onRemoveItem = () => {\n const {id} = this.props.configItem;\n this.context.removeItem(id);\n this.props.onItemClick?.();\n };\n private getControlItemPinStyle(index: number, itemsLength: number) {\n const isOnlyOneItem = itemsLength === 1;\n const isFirstItem = index === 0;\n const isLastItem = index === itemsLength - 1;\n\n if (isOnlyOneItem) {\n return 'round-round';\n }\n\n if (isFirstItem) {\n return 'round-brick';\n }\n\n if (isLastItem) {\n return 'brick-round';\n }\n\n return 'brick-brick';\n }\n private getCustomControlsWithWidgets() {\n const items = this.getItems();\n\n const result = items.map(\n (item: OverlayControlItem, index: number, controlItems: OverlayControlItem[]) =>\n this.renderControlsItem(item, index, controlItems.length),\n );\n const isOnlyOneItem = items.length === 0;\n\n // Добавляем контрол удаления или меню виджета по умолчанию\n result.push(this.renderMenu(isOnlyOneItem));\n\n return result;\n }\n}\n\nexport default OverlayControls;\n"]}
1
+ {"version":3,"file":"OverlayControls.js","sourceRoot":"../../../../src","sources":["components/OverlayControls/OverlayControls.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {Ellipsis, Gear, Xmark} from '@gravity-ui/icons';\nimport {\n Button,\n ButtonSize,\n ButtonView,\n DropdownMenu,\n DropdownMenuItem,\n Icon,\n IconProps,\n MenuItemProps,\n} from '@gravity-ui/uikit';\nimport noop from 'lodash/noop';\n\nimport {\n COPIED_WIDGET_STORE_KEY,\n DRAGGABLE_CANCEL_CLASS_NAME,\n MenuItems,\n OVERLAY_CONTROLS_CLASS_NAME,\n OVERLAY_ICON_SIZE,\n} from '../../constants';\nimport {DashkitOvelayControlsContext, OverlayControlsCtxShape} from '../../context';\nimport {i18n} from '../../i18n';\nimport {\n type ConfigItem,\n type ItemParams,\n type ItemState,\n type PluginBase,\n isItemWithTabs,\n resolveItemInnerId,\n} from '../../shared';\nimport {MenuItem, Settings} from '../../typings';\nimport {cn} from '../../utils/cn';\n\nimport './OverlayControls.scss';\n\nconst b = cn(OVERLAY_CONTROLS_CLASS_NAME);\n\nexport enum OverlayControlsPosition {\n TopRight = 'top_right',\n TopLeft = 'top_left',\n BottomRight = 'bottom_right',\n BottomLeft = 'bottom_left',\n}\n\nexport interface OverlayControlItem {\n title?: string;\n icon?: IconProps['data'];\n renderIcon?: (item: ConfigItem) => IconProps['data'];\n iconSize?: number | string;\n handler?: (item: ConfigItem) => void;\n visible?: (item: ConfigItem) => boolean;\n allWidgetsControls?: boolean; // флаг кастомного контрола (без кастомного виджета), которые показываются не в списке меню\n excludeWidgetsTypes?: Array<PluginBase['type']>; // массив с типами виджетов (плагинов), которые исключаем из отображения контрола по настройке allWidgetsControls\n id?: string; // id дефолтного пункта меню для возможноти использования дефолтного action в кастомных контролах\n qa?: string;\n className?: string;\n}\n\nexport interface OverlayCustomControlItem {\n id: string;\n title?: string;\n icon?: MenuItemProps['iconStart'];\n iconSize?: number | string;\n handler?: (item: ConfigItem, params: ItemParams, state: ItemState) => void;\n visible?: (item: ConfigItem) => boolean;\n className?: string;\n qa?: string;\n}\n\ninterface OverlayControlsDefaultProps {\n position: OverlayControlsPosition;\n view: ButtonView;\n size: ButtonSize;\n}\n\ninterface OverlayControlsProps extends OverlayControlsDefaultProps {\n configItem: ConfigItem;\n onItemClick?: () => void;\n}\n\ntype PreparedCopyItemOptionsArg = Pick<ConfigItem, 'data' | 'type' | 'defaults' | 'namespace'> & {\n timestamp: number;\n layout: {\n w: number;\n h: number;\n };\n targetId?: string;\n targetInnerId?: string;\n};\n\nexport type PreparedCopyItemOptions<C extends object = {}> = PreparedCopyItemOptionsArg & {\n copyContext?: C;\n};\n\ntype OverlayControlsCtx = React.Context<OverlayControlsCtxShape>;\n\nconst DEFAULT_DROPDOWN_MENU = [MenuItems.Copy, MenuItems.Delete];\n\nclass OverlayControls extends React.Component<OverlayControlsProps> {\n static contextType = DashkitOvelayControlsContext;\n static defaultProps: OverlayControlsDefaultProps = {\n position: OverlayControlsPosition.TopRight,\n view: 'flat',\n size: 'm',\n };\n context!: React.ContextType<OverlayControlsCtx>;\n\n state = {\n dropdownMenuItems: [] as DropdownMenuItem[],\n };\n\n componentDidMount() {\n this.updateDropdownMenuItems();\n }\n\n componentDidUpdate() {\n this.updateDropdownMenuItems();\n }\n\n render() {\n const {position} = this.props;\n const items = this.getItems();\n const hasCustomControlsWithWidgets = items.length > 0;\n\n const controls = hasCustomControlsWithWidgets\n ? this.getCustomControlsWithWidgets()\n : this.renderControls();\n\n return <div className={b({position}, [DRAGGABLE_CANCEL_CLASS_NAME])}>{controls}</div>;\n }\n\n private shallowEqualDropdownMenu(menuA: DropdownMenuItem[], menuB: DropdownMenuItem[]) {\n return (\n menuA.length === menuB.length &&\n menuA.every((itemA, index) => {\n const itemB = menuB[index];\n\n if (!itemB) {\n return false;\n }\n\n return Object.entries(itemA).every(\n ([key, value]) =>\n /**\n * field 'action' is new every time\n * @see {@link https://github.com/gravity-ui/dashkit/pull/267/commits/c6378b67c5fea07902a49ccce8118760a4ad2df0#diff-aa6a22e5a09a09ccc3f8f937d4ef6aaff97afc57da1b370f0120f0e225f7b061L297}\n */\n key === 'action' || itemB[key as keyof DropdownMenuItem] === value,\n );\n })\n );\n }\n\n private updateDropdownMenuItems = () => {\n const items = this.getDropdownMenuItems();\n if (!this.shallowEqualDropdownMenu(items, this.state.dropdownMenuItems)) {\n this.setState({dropdownMenuItems: items});\n }\n };\n\n private getItems = () => {\n const {overlayControls} = this.context;\n const {configItem} = this.props;\n\n return (overlayControls && overlayControls[configItem.type]) || [];\n };\n\n private renderControlsItem = (item: OverlayControlItem, index: number, length: number) => {\n const {view, size, onItemClick} = this.props;\n const {title, handler, icon, renderIcon, iconSize, qa, className} = item;\n\n const iconData = renderIcon ? renderIcon(this.props.configItem) : icon;\n\n const onItemClickHandler = typeof handler === 'function' ? handler : noop;\n return (\n <Button\n key={`control_${index}`}\n view={view}\n size={size}\n title={title}\n pin={this.getControlItemPinStyle(index, length)}\n onClick={() => {\n onItemClickHandler(this.props.configItem);\n onItemClick?.();\n }}\n className={className}\n qa={qa}\n >\n <Icon data={iconData || Gear} size={iconSize ?? OVERLAY_ICON_SIZE} />\n </Button>\n );\n };\n\n private getDropDownMenuItemConfig(menuName: string, isDefaultMenu?: boolean) {\n switch (menuName) {\n case MenuItems.Copy: {\n return {\n action: this.onCopyItem,\n text: i18n('label_copy'),\n };\n }\n case MenuItems.Delete: {\n return {\n action: this.onRemoveItem,\n text: i18n('label_delete'),\n };\n }\n case MenuItems.Settings: {\n // для дефолтного состояния меню нет настройки settings, а для кастомного можно использовать дефолтный action и text\n if (isDefaultMenu) {\n return null;\n }\n return {\n action: this.onEditItem,\n text: i18n('label_settings'),\n };\n }\n }\n return null;\n }\n\n private getDefaultControls = () => {\n const {view, size} = this.props;\n\n if (this.context.overlayControls === null) {\n return null;\n }\n\n return (\n <Button\n key={'control_default'}\n view={view}\n size={size}\n title={i18n('label_settings')}\n pin=\"round-brick\"\n onClick={this.onEditItem}\n qa=\"dashkit-overlay-control-settings\"\n >\n <Icon data={Gear} size={OVERLAY_ICON_SIZE} />\n </Button>\n );\n };\n\n private renderControls() {\n const customLeftControls = this.getCustomLeftOverlayControls();\n const hasCustomOverlayLeftControls = Boolean(customLeftControls.length);\n\n const controls = hasCustomOverlayLeftControls\n ? customLeftControls.map(\n (item: OverlayControlItem, index: number, items: OverlayControlItem[]) =>\n this.renderControlsItem(item, index, items.length + 1),\n )\n : this.getDefaultControls();\n\n const menu = this.renderMenu(controls === null);\n\n return (\n <div\n className={b('default-controls', {\n 'with-custom-left': hasCustomOverlayLeftControls,\n })}\n >\n {controls}\n {menu}\n </div>\n );\n }\n private renderMenu(isOnlyOneItem: boolean) {\n const {view, size} = this.props;\n\n const dropdown = this.renderDropdownMenu(isOnlyOneItem);\n\n if (dropdown) {\n return dropdown;\n }\n\n return (\n <Button\n key={'delete-control'}\n view={view}\n size={size}\n title={i18n('label_delete')}\n pin={isOnlyOneItem ? 'round-round' : 'brick-round'}\n onClick={this.onRemoveItem}\n qa=\"dashkit-overlay-control-menu\"\n >\n <Icon data={Xmark} size={OVERLAY_ICON_SIZE} />\n </Button>\n );\n }\n\n private isDefaultMenu(menu: Settings['menu']) {\n return menu?.every((item) =>\n (Object.values(MenuItems) as Array<string>).includes(String(item)),\n );\n }\n private getDropdownMenuItems(): DropdownMenuItem[] {\n const {onItemClick} = this.props;\n const {menu: contextMenu, itemsParams, itemsState} = this.context;\n\n const configItem = this.props.configItem;\n const itemParams = itemsParams[configItem.id];\n const itemState = itemsState?.[configItem.id] || {};\n\n const menu = contextMenu && contextMenu.length > 0 ? contextMenu : DEFAULT_DROPDOWN_MENU;\n\n const isDefaultMenu = this.isDefaultMenu(menu);\n\n return isDefaultMenu\n ? ((menu || []) as string[]).reduce<DropdownMenuItem[]>((memo, name: string) => {\n const item = this.getDropDownMenuItemConfig(name, true);\n if (item) {\n memo.push(item);\n }\n\n return memo;\n }, [])\n : menu.reduce<DropdownMenuItem[]>((memo, item: MenuItem) => {\n if (typeof item === 'string') {\n return memo;\n }\n // custom menu dropdown item filter\n if (item.visible && !item.visible(configItem)) {\n return memo;\n }\n\n const itemHandler = item.handler;\n\n const itemAction =\n typeof itemHandler === 'function'\n ? () => {\n const result = itemHandler(configItem, itemParams, itemState);\n onItemClick?.();\n return result;\n }\n : this.getDropDownMenuItemConfig(item.id)?.action || (() => {});\n\n memo.push({\n // @ts-expect-error\n text: item.title || i18n(item.id),\n iconStart: item.icon,\n /**\n * if the logic of creating the 'action' field is changed, it is necessary to update the logic of the method shallowEqualDropdownMenu\n * @see {@link https://github.com/gravity-ui/dashkit/pull/267/commits/c6378b67c5fea07902a49ccce8118760a4ad2df0#diff-aa6a22e5a09a09ccc3f8f937d4ef6aaff97afc57da1b370f0120f0e225f7b061R143}\n */\n action: itemAction,\n className: item.className,\n qa: item.qa,\n });\n\n return memo;\n }, []);\n }\n\n private renderDropdownMenu(isOnlyOneItem: boolean) {\n const {view, size} = this.props;\n\n const items = this.getDropdownMenuItems();\n\n if (items.length === 0) {\n return null;\n }\n\n return (\n <DropdownMenu\n key={'controls_dropdown'}\n items={items}\n renderSwitcher={(props) => (\n <Button\n {...props}\n view={view}\n size={size}\n pin={isOnlyOneItem ? 'round-round' : 'brick-round'}\n extraProps={{'aria-label': i18n('label_more-options')}}\n qa=\"dashkit-overlay-control-menu\"\n >\n <Icon data={Ellipsis} size={OVERLAY_ICON_SIZE} />\n </Button>\n )}\n onOpenToggle={this.updateDropdownMenuItems}\n popupProps={{\n className: DRAGGABLE_CANCEL_CLASS_NAME,\n }}\n />\n );\n }\n private getCustomLeftOverlayControls = () => {\n // выбираем только items-ы у которых проставлено поле `allWidgetsControls:true`\n // те контролы, которые будут показываться слева от меню\n let controls: OverlayControlItem[] = [];\n const {onItemClick} = this.props;\n\n for (const controlItem of Object.values(this.context.overlayControls || {})) {\n controls = controls.concat(\n (\n (controlItem as OverlayControlItem[]).filter((item) => {\n // если тип виджета-плагина в списке исключаемых, то не показываем такой контрол\n if (item.excludeWidgetsTypes?.includes(this.props.configItem.type)) {\n return false;\n }\n\n return item.visible\n ? item.visible(this.props.configItem)\n : item.allWidgetsControls;\n }) || []\n ).map((item) => {\n if (!item?.id) {\n return item;\n }\n return {\n ...item,\n handler:\n typeof item.handler === 'function'\n ? (...args) => {\n const result = item.handler?.(...args);\n onItemClick?.();\n return result;\n }\n : this.getDropDownMenuItemConfig(item.id)?.action || (() => {}),\n };\n }),\n );\n }\n\n return controls;\n };\n private onCopyItem = () => {\n const {configItem} = this.props;\n const correspondedItemLayout = this.context.getLayoutItem(configItem.id);\n\n let targetInnerId;\n\n if (isItemWithTabs(this.props.configItem)) {\n targetInnerId = resolveItemInnerId({\n item: this.props.configItem,\n itemsStateAndParams: this.context.itemsStateAndParams,\n });\n }\n\n let options: PreparedCopyItemOptions = {\n timestamp: Date.now(),\n data: configItem.data,\n type: configItem.type,\n defaults: configItem.defaults,\n namespace: configItem.namespace,\n layout: {\n w: correspondedItemLayout!.w,\n h: correspondedItemLayout!.h,\n },\n targetId: this.props.configItem.id,\n targetInnerId,\n };\n\n if (this.context.context?.getPreparedCopyItemOptions) {\n console.warn?.(\n '`context.getPreparedCopyItemOptions` is deprecated. Please use `getPreparedCopyItemOptions` prop instead',\n );\n }\n\n const getPreparedCopyItemOptions =\n this.context?.getPreparedCopyItemOptions ??\n this.context.context?.getPreparedCopyItemOptions;\n\n if (typeof getPreparedCopyItemOptions === 'function') {\n options = getPreparedCopyItemOptions(options);\n }\n\n try {\n localStorage.setItem(COPIED_WIDGET_STORE_KEY, JSON.stringify(options));\n this.context.onCopyFulfill?.(null, options);\n } catch (e) {\n const error = e instanceof Error ? e : new Error('Unknown error while copying item');\n this.context.onCopyFulfill?.(error);\n }\n // https://stackoverflow.com/questions/35865481/storage-event-not-firing\n window.dispatchEvent(new Event('storage'));\n this.props.onItemClick?.();\n };\n private onEditItem = () => {\n this.context.editItem?.(this.props.configItem);\n this.props.onItemClick?.();\n };\n private onRemoveItem = () => {\n const {id} = this.props.configItem;\n this.context.removeItem(id);\n this.props.onItemClick?.();\n };\n private getControlItemPinStyle(index: number, itemsLength: number) {\n const isOnlyOneItem = itemsLength === 1;\n const isFirstItem = index === 0;\n const isLastItem = index === itemsLength - 1;\n\n if (isOnlyOneItem) {\n return 'round-round';\n }\n\n if (isFirstItem) {\n return 'round-brick';\n }\n\n if (isLastItem) {\n return 'brick-round';\n }\n\n return 'brick-brick';\n }\n private getCustomControlsWithWidgets() {\n const items = this.getItems();\n\n const result = items.map(\n (item: OverlayControlItem, index: number, controlItems: OverlayControlItem[]) =>\n this.renderControlsItem(item, index, controlItems.length),\n );\n const isOnlyOneItem = items.length === 0;\n\n // Добавляем контрол удаления или меню виджета по умолчанию\n result.push(this.renderMenu(isOnlyOneItem));\n\n return result;\n }\n}\n\nexport default OverlayControls;\n"]}
@@ -1,31 +1,41 @@
1
1
  import React from 'react';
2
- import type { RegisterManager } from "../utils/index.js";
2
+ import type { DragOverEvent } from 'react-grid-layout';
3
+ import type { RegisterManager, RegisterManagerPlugin } from "../utils/index.js";
3
4
  import type { DashKitProps } from "../components/DashKit/index.js";
4
- import type { ConfigItem, ConfigLayout, ItemParams, ItemState, ItemStateAndParams, ItemStateAndParamsChangeOptions } from "../shared/index.js";
5
- type DashkitPropsPassedToCtx = Pick<DashKitProps, 'config' | 'groups' | 'context' | 'noOverlay' | 'focusable' | 'globalParams' | 'editMode' | 'settings' | 'onItemMountChange' | 'onItemRender' | 'draggableHandleClassName' | 'onDragStart' | 'onDrag' | 'onDragStop' | 'onResizeStart' | 'onResize' | 'onResizeStop'>;
6
- type PluginType = string;
5
+ import type { ConfigItem, ConfigLayout, DraggedOverItem, GlobalParams, ItemDragProps, ItemParams, ItemState, ItemStateAndParams, ItemStateAndParamsChangeOptions } from "../shared/index.js";
6
+ import type { ContextProps, PluginRef, ReactGridLayoutProps, SettingsProps } from "../typings/index.js";
7
+ export type DashkitPropsPassedToCtx = Pick<DashKitProps, 'config' | 'groups' | 'noOverlay' | 'focusable' | 'editMode' | 'onItemMountChange' | 'onItemRender' | 'onItemFocus' | 'onItemBlur' | 'draggableHandleClassName' | 'onDragStart' | 'onDrag' | 'onDragStop' | 'onResizeStart' | 'onResize' | 'onResizeStop'>;
8
+ export type TemporaryLayout = {
9
+ data: ConfigLayout[];
10
+ dragProps: ItemDragProps;
11
+ };
7
12
  export type DashKitCtxShape = DashkitPropsPassedToCtx & {
13
+ context: ContextProps;
14
+ settings: SettingsProps;
15
+ globalParams: GlobalParams;
8
16
  registerManager: RegisterManager;
9
17
  forwardedMetaRef: React.ForwardedRef<any>;
10
18
  configItems: ConfigItem[];
11
19
  layout: ConfigLayout[];
12
- temporaryLayout: ConfigLayout[] | null;
20
+ layoutChange: (layout: ConfigLayout[]) => void;
21
+ temporaryLayout: TemporaryLayout | null;
13
22
  memorizeOriginalLayout: (widgetId: string, preAutoHeightLayout: ConfigLayout, postAutoHeightLayout: ConfigLayout) => void;
14
23
  revertToOriginalLayout: (widgetId: string) => void;
15
- itemsState?: Record<string, ItemState>;
24
+ itemsState: Record<string, ItemState>;
16
25
  itemsParams: Record<string, ItemParams>;
17
- onItemStateAndParamsChange: (id: string, stateAndParams: ItemStateAndParams, options: ItemStateAndParamsChangeOptions) => void;
18
- getItemsMeta: (pluginsRefs: Array<React.RefObject<any>>) => Array<Promise<any>>;
19
- reloadItems: (pluginsRefs: Array<React.RefObject<any>>, data: {
26
+ onItemStateAndParamsChange: (id: string, stateAndParams: ItemStateAndParams, options?: ItemStateAndParamsChangeOptions) => void;
27
+ getItemsMeta: (pluginsRefs: Array<PluginRef>) => Array<Promise<any>>;
28
+ reloadItems: (pluginsRefs: Array<PluginRef>, data: {
20
29
  silentLoading: boolean;
21
30
  noVeil: boolean;
22
31
  }) => void;
23
- onDrop: (newLayout: ConfigLayout, item: ConfigItem) => void;
24
- onDropDragOver: (e: DragEvent | MouseEvent, group: string | void, gridProps: Partial<ReactGridLayout.ReactGridLayoutProps>, groupLayout: ConfigLayout[], sharedItem: (Partial<ConfigLayout> & {
25
- type: PluginType;
26
- }) | void) => void | boolean;
32
+ onDrop: (newLayout: ConfigLayout[], item: ConfigLayout, e?: MouseEvent) => void;
33
+ onDropDragOver: (e: DragOverEvent, group: string | undefined, gridProps: ReactGridLayoutProps, groupLayout: ConfigLayout[], sharedItem?: DraggedOverItem) => {
34
+ w?: number;
35
+ h?: number;
36
+ } | false | undefined;
27
37
  outerDnDEnable: boolean;
28
- dragOverPlugin: null | PluginType;
38
+ dragOverPlugin: null | RegisterManagerPlugin;
29
39
  };
30
40
  declare const DashKitContext: React.Context<DashKitCtxShape>;
31
41
  export { DashKitContext };
@@ -1 +1 @@
1
- {"version":3,"file":"DashKitContext.js","sourceRoot":"../../../src","sources":["context/DashKitContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AA6E1B,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,CAAkB,EAAqB,CAAC,CAAC;AAEnF,OAAO,EAAC,cAAc,EAAC,CAAC","sourcesContent":["import React from 'react';\n\nimport type {RegisterManager} from '..//utils';\nimport type {DashKitProps} from '../components/DashKit';\nimport type {\n ConfigItem,\n ConfigLayout,\n ItemParams,\n ItemState,\n ItemStateAndParams,\n ItemStateAndParamsChangeOptions,\n} from '../shared';\n\ntype DashkitPropsPassedToCtx = Pick<\n DashKitProps,\n | 'config'\n | 'groups'\n | 'context'\n | 'noOverlay'\n | 'focusable'\n | 'globalParams'\n | 'editMode'\n | 'settings'\n | 'onItemMountChange'\n | 'onItemRender'\n | 'draggableHandleClassName'\n // default handlers bypass\n | 'onDragStart'\n | 'onDrag'\n | 'onDragStop'\n | 'onResizeStart'\n | 'onResize'\n | 'onResizeStop'\n>;\n\ntype PluginType = string;\n\nexport type DashKitCtxShape = DashkitPropsPassedToCtx & {\n registerManager: RegisterManager;\n forwardedMetaRef: React.ForwardedRef<any>;\n\n configItems: ConfigItem[];\n layout: ConfigLayout[];\n temporaryLayout: ConfigLayout[] | null;\n memorizeOriginalLayout: (\n widgetId: string,\n preAutoHeightLayout: ConfigLayout,\n postAutoHeightLayout: ConfigLayout,\n ) => void;\n revertToOriginalLayout: (widgetId: string) => void;\n\n itemsState?: Record<string, ItemState>;\n itemsParams: Record<string, ItemParams>;\n onItemStateAndParamsChange: (\n id: string,\n stateAndParams: ItemStateAndParams,\n options: ItemStateAndParamsChangeOptions,\n ) => void;\n\n getItemsMeta: (pluginsRefs: Array<React.RefObject<any>>) => Array<Promise<any>>;\n reloadItems: (\n pluginsRefs: Array<React.RefObject<any>>,\n data: {silentLoading: boolean; noVeil: boolean},\n ) => void;\n\n onDrop: (newLayout: ConfigLayout, item: ConfigItem) => void;\n onDropDragOver: (\n e: DragEvent | MouseEvent,\n group: string | void,\n gridProps: Partial<ReactGridLayout.ReactGridLayoutProps>,\n groupLayout: ConfigLayout[],\n sharedItem: (Partial<ConfigLayout> & {type: PluginType}) | void,\n ) => void | boolean;\n outerDnDEnable: boolean;\n dragOverPlugin: null | PluginType;\n};\n\nconst DashKitContext = React.createContext<DashKitCtxShape>({} as DashKitCtxShape);\n\nexport {DashKitContext};\n"]}
1
+ {"version":3,"file":"DashKitContext.js","sourceRoot":"../../../src","sources":["context/DashKitContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AA0F1B,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,CAAkB,EAAqB,CAAC,CAAC;AAEnF,OAAO,EAAC,cAAc,EAAC,CAAC","sourcesContent":["import React from 'react';\n\nimport type {DragOverEvent} from 'react-grid-layout';\n\nimport type {RegisterManager, RegisterManagerPlugin} from '..//utils';\nimport type {DashKitProps} from '../components/DashKit';\nimport type {\n ConfigItem,\n ConfigLayout,\n DraggedOverItem,\n GlobalParams,\n ItemDragProps,\n ItemParams,\n ItemState,\n ItemStateAndParams,\n ItemStateAndParamsChangeOptions,\n} from '../shared';\nimport type {ContextProps, PluginRef, ReactGridLayoutProps, SettingsProps} from '../typings';\n\nexport type DashkitPropsPassedToCtx = Pick<\n DashKitProps,\n | 'config'\n | 'groups'\n | 'noOverlay'\n | 'focusable'\n | 'editMode'\n | 'onItemMountChange'\n | 'onItemRender'\n | 'onItemFocus'\n | 'onItemBlur'\n | 'draggableHandleClassName'\n // default handlers bypass\n | 'onDragStart'\n | 'onDrag'\n | 'onDragStop'\n | 'onResizeStart'\n | 'onResize'\n | 'onResizeStop'\n>;\n\nexport type TemporaryLayout = {\n data: ConfigLayout[];\n dragProps: ItemDragProps;\n};\n\nexport type DashKitCtxShape = DashkitPropsPassedToCtx & {\n context: ContextProps;\n settings: SettingsProps;\n globalParams: GlobalParams;\n\n registerManager: RegisterManager;\n forwardedMetaRef: React.ForwardedRef<any>;\n\n configItems: ConfigItem[];\n layout: ConfigLayout[];\n layoutChange: (layout: ConfigLayout[]) => void;\n temporaryLayout: TemporaryLayout | null;\n memorizeOriginalLayout: (\n widgetId: string,\n preAutoHeightLayout: ConfigLayout,\n postAutoHeightLayout: ConfigLayout,\n ) => void;\n revertToOriginalLayout: (widgetId: string) => void;\n\n itemsState: Record<string, ItemState>;\n itemsParams: Record<string, ItemParams>;\n onItemStateAndParamsChange: (\n id: string,\n stateAndParams: ItemStateAndParams,\n options?: ItemStateAndParamsChangeOptions,\n ) => void;\n\n getItemsMeta: (pluginsRefs: Array<PluginRef>) => Array<Promise<any>>;\n reloadItems: (\n pluginsRefs: Array<PluginRef>,\n data: {silentLoading: boolean; noVeil: boolean},\n ) => void;\n\n onDrop: (newLayout: ConfigLayout[], item: ConfigLayout, e?: MouseEvent) => void;\n onDropDragOver: (\n e: DragOverEvent,\n group: string | undefined,\n gridProps: ReactGridLayoutProps,\n groupLayout: ConfigLayout[],\n sharedItem?: DraggedOverItem,\n ) => {w?: number; h?: number} | false | undefined;\n outerDnDEnable: boolean;\n dragOverPlugin: null | RegisterManagerPlugin;\n};\n\nconst DashKitContext = React.createContext<DashKitCtxShape>({} as DashKitCtxShape);\n\nexport {DashKitContext};\n"]}
@@ -1,72 +1,22 @@
1
- export function prepareItem(Component: any): {
2
- new (props: any): {
3
- shouldComponentUpdate(nextProps: any): boolean;
4
- _onStateAndParamsChange: (stateAndParams: any, options: any) => void;
5
- _currentRenderProps: {};
6
- getRenderProps: () => {};
7
- render(): JSX.Element;
8
- context: unknown;
9
- setState<K extends string | number | symbol>(state: any, callback?: (() => void) | undefined): void;
10
- forceUpdate(callback?: (() => void) | undefined): void;
11
- readonly props: Readonly<any>;
12
- state: Readonly<any>;
13
- refs: {
14
- [key: string]: React.ReactInstance;
15
- };
16
- componentDidMount?(): void;
17
- componentWillUnmount?(): void;
18
- componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
19
- getSnapshotBeforeUpdate?(prevProps: Readonly<any>, prevState: Readonly<any>): any;
20
- componentDidUpdate?(prevProps: Readonly<any>, prevState: Readonly<any>, snapshot?: any): void;
21
- componentWillMount?(): void;
22
- UNSAFE_componentWillMount?(): void;
23
- componentWillReceiveProps?(nextProps: Readonly<any>, nextContext: any): void;
24
- UNSAFE_componentWillReceiveProps?(nextProps: Readonly<any>, nextContext: any): void;
25
- componentWillUpdate?(nextProps: Readonly<any>, nextState: Readonly<any>, nextContext: any): void;
26
- UNSAFE_componentWillUpdate?(nextProps: Readonly<any>, nextState: Readonly<any>, nextContext: any): void;
27
- };
28
- new (props: any, context: any): {
29
- shouldComponentUpdate(nextProps: any): boolean;
30
- _onStateAndParamsChange: (stateAndParams: any, options: any) => void;
31
- _currentRenderProps: {};
32
- getRenderProps: () => {};
33
- render(): JSX.Element;
34
- context: unknown;
35
- setState<K extends string | number | symbol>(state: any, callback?: (() => void) | undefined): void;
36
- forceUpdate(callback?: (() => void) | undefined): void;
37
- readonly props: Readonly<any>;
38
- state: Readonly<any>;
39
- refs: {
40
- [key: string]: React.ReactInstance;
41
- };
42
- componentDidMount?(): void;
43
- componentWillUnmount?(): void;
44
- componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
45
- getSnapshotBeforeUpdate?(prevProps: Readonly<any>, prevState: Readonly<any>): any;
46
- componentDidUpdate?(prevProps: Readonly<any>, prevState: Readonly<any>, snapshot?: any): void;
47
- componentWillMount?(): void;
48
- UNSAFE_componentWillMount?(): void;
49
- componentWillReceiveProps?(nextProps: Readonly<any>, nextContext: any): void;
50
- UNSAFE_componentWillReceiveProps?(nextProps: Readonly<any>, nextContext: any): void;
51
- componentWillUpdate?(nextProps: Readonly<any>, nextState: Readonly<any>, nextContext: any): void;
52
- UNSAFE_componentWillUpdate?(nextProps: Readonly<any>, nextState: Readonly<any>, nextContext: any): void;
53
- };
54
- propTypes: {
55
- gridLayout: PropTypes.Requireable<object>;
56
- adjustWidgetLayout: PropTypes.Validator<(...args: any[]) => any>;
57
- layout: PropTypes.Requireable<any[]>;
58
- id: PropTypes.Requireable<string>;
59
- item: PropTypes.Requireable<object>;
60
- shouldItemUpdate: PropTypes.Requireable<boolean>;
61
- width: PropTypes.Requireable<number>;
62
- height: PropTypes.Requireable<number>;
63
- transform: PropTypes.Requireable<string>;
64
- isPlaceholder: PropTypes.Requireable<boolean>;
65
- onItemRender: PropTypes.Requireable<(...args: any[]) => any>;
66
- onItemMountChange: PropTypes.Requireable<(...args: any[]) => any>;
67
- forwardedPluginRef: PropTypes.Requireable<any>;
68
- };
69
- contextType: React.Context<import("../context/index.js").DashKitCtxShape>;
70
- };
71
1
  import React from 'react';
72
- import PropTypes from 'prop-types';
2
+ import type { DashKitProps } from "../components/DashKit/index.js";
3
+ import type { ItemProps } from "../components/Item/types.js";
4
+ import type { ConfigItem, ConfigLayout } from "../shared/index.js";
5
+ import type { PluginRef, PluginWidgetProps, ReactGridLayoutProps } from "../typings/index.js";
6
+ type PrepareItemProps = {
7
+ gridLayout?: ReactGridLayoutProps;
8
+ adjustWidgetLayout: PluginWidgetProps['adjustWidgetLayout'];
9
+ layout: ConfigLayout[];
10
+ id: string;
11
+ item: ConfigItem;
12
+ shouldItemUpdate?: boolean;
13
+ width?: number;
14
+ height?: number;
15
+ transform?: string;
16
+ isPlaceholder?: boolean;
17
+ onItemRender?: DashKitProps['onItemRender'];
18
+ onItemMountChange?: DashKitProps['onItemMountChange'];
19
+ forwardedPluginRef?: (ref: PluginRef) => void;
20
+ };
21
+ export declare function prepareItem(WrappedComponent: React.ComponentType<ItemProps>): React.ComponentClass<PrepareItemProps>;
22
+ export {};
@@ -1,18 +1,17 @@
1
1
  import React from 'react';
2
2
  import isEqual from "lodash/isEqual.js";
3
- import PropTypes from 'prop-types';
4
3
  import { DashKitContext } from "../context/index.js";
5
- export function prepareItem(Component) {
4
+ export function prepareItem(WrappedComponent) {
6
5
  var _a;
7
6
  return _a = class PrepareItem extends React.Component {
8
7
  constructor() {
9
8
  super(...arguments);
9
+ this._currentRenderProps = {};
10
10
  this._onStateAndParamsChange = (stateAndParams, options) => {
11
11
  this.context.onItemStateAndParamsChange(this.props.id, stateAndParams, options);
12
12
  };
13
- this._currentRenderProps = {};
14
13
  this.getRenderProps = () => {
15
- const { id, width, height, item, adjustWidgetLayout, layout, isPlaceholder, gridLayout } = this.props;
14
+ const { id, width, height, item, adjustWidgetLayout, layout, gridLayout } = this.props;
16
15
  const { itemsState, itemsParams, registerManager, settings, context, editMode } = this.context;
17
16
  const { data, defaults, namespace } = item;
18
17
  const rendererProps = {
@@ -31,7 +30,6 @@ export function prepareItem(Component) {
31
30
  layout,
32
31
  gridLayout: gridLayout || registerManager.gridLayout,
33
32
  adjustWidgetLayout,
34
- isPlaceholder,
35
33
  };
36
34
  const changedProp = Object.entries(rendererProps).find(([key, value]) => {
37
35
  // Checking gridLayoout deep as groups gridProperties method has tendancy to creat new objects
@@ -49,36 +47,17 @@ export function prepareItem(Component) {
49
47
  shouldComponentUpdate(nextProps) {
50
48
  const { width, height, transform } = this.props;
51
49
  const { width: widthNext, height: heightNext, transform: transformNext } = nextProps;
52
- if (!nextProps.shouldItemUpdate &&
53
- width === widthNext &&
54
- height === heightNext &&
55
- transform === transformNext) {
56
- return false;
57
- }
58
- return true;
50
+ return (nextProps.shouldItemUpdate ||
51
+ width !== widthNext ||
52
+ height !== heightNext ||
53
+ transform !== transformNext);
59
54
  }
60
55
  render() {
61
56
  const { item, isPlaceholder, forwardedPluginRef, onItemMountChange, onItemRender } = this.props;
62
57
  const { registerManager } = this.context;
63
- const { type } = item;
64
- return (React.createElement(Component, { forwardedPluginRef: forwardedPluginRef, rendererProps: this.getRenderProps(), registerManager: registerManager, type: type, isPlaceholder: isPlaceholder, onItemMountChange: onItemMountChange, onItemRender: onItemRender, item: item }));
58
+ return (React.createElement(WrappedComponent, { forwardedPluginRef: forwardedPluginRef, rendererProps: this.getRenderProps(), registerManager: registerManager, isPlaceholder: isPlaceholder, onItemMountChange: onItemMountChange, onItemRender: onItemRender, item: item }));
65
59
  }
66
60
  },
67
- _a.propTypes = {
68
- gridLayout: PropTypes.object,
69
- adjustWidgetLayout: PropTypes.func.isRequired,
70
- layout: PropTypes.array,
71
- id: PropTypes.string,
72
- item: PropTypes.object,
73
- shouldItemUpdate: PropTypes.bool,
74
- width: PropTypes.number,
75
- height: PropTypes.number,
76
- transform: PropTypes.string,
77
- isPlaceholder: PropTypes.bool,
78
- onItemRender: PropTypes.func,
79
- onItemMountChange: PropTypes.func,
80
- forwardedPluginRef: PropTypes.any,
81
- },
82
61
  _a.contextType = DashKitContext,
83
62
  _a;
84
63
  }