@gravity-ui/dashkit 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/LICENSE +21 -0
  3. package/README.md +364 -0
  4. package/build/cjs/components/DashKit/DashKit.d.ts +50 -0
  5. package/build/cjs/components/DashKit/DashKit.js +70 -0
  6. package/build/cjs/components/DashKit/index.d.ts +1 -0
  7. package/build/cjs/components/DashKit/index.js +4 -0
  8. package/build/cjs/components/DashKitView/DashKitView.css +4 -0
  9. package/build/cjs/components/DashKitView/DashKitView.d.ts +3 -0
  10. package/build/cjs/components/DashKitView/DashKitView.js +23 -0
  11. package/build/cjs/components/GridItem/GridItem.css +83 -0
  12. package/build/cjs/components/GridItem/GridItem.d.ts +3 -0
  13. package/build/cjs/components/GridItem/GridItem.js +70 -0
  14. package/build/cjs/components/GridLayout/GridLayout.d.ts +25 -0
  15. package/build/cjs/components/GridLayout/GridLayout.js +89 -0
  16. package/build/cjs/components/Item/Item.css +19 -0
  17. package/build/cjs/components/Item/Item.d.ts +67 -0
  18. package/build/cjs/components/Item/Item.js +23 -0
  19. package/build/cjs/components/MobileLayout/MobileLayout.css +10 -0
  20. package/build/cjs/components/MobileLayout/MobileLayout.d.ts +16 -0
  21. package/build/cjs/components/MobileLayout/MobileLayout.js +54 -0
  22. package/build/cjs/components/MobileLayout/helpers.d.ts +3 -0
  23. package/build/cjs/components/MobileLayout/helpers.js +32 -0
  24. package/build/cjs/components/OverlayControls/OverlayControls.css +28 -0
  25. package/build/cjs/components/OverlayControls/OverlayControls.d.ts +54 -0
  26. package/build/cjs/components/OverlayControls/OverlayControls.js +212 -0
  27. package/build/cjs/components/index.d.ts +1 -0
  28. package/build/cjs/components/index.js +4 -0
  29. package/build/cjs/constants/common.d.ts +7 -0
  30. package/build/cjs/constants/common.js +10 -0
  31. package/build/cjs/constants/index.d.ts +1 -0
  32. package/build/cjs/constants/index.js +4 -0
  33. package/build/cjs/context/DashKitContext.d.ts +2 -0
  34. package/build/cjs/context/DashKitContext.js +7 -0
  35. package/build/cjs/hocs/prepareItem.d.ts +66 -0
  36. package/build/cjs/hocs/prepareItem.js +66 -0
  37. package/build/cjs/hocs/withContext.d.ts +165 -0
  38. package/build/cjs/hocs/withContext.js +203 -0
  39. package/build/cjs/hooks/useCalcLayout.d.ts +13 -0
  40. package/build/cjs/hooks/useCalcLayout.js +31 -0
  41. package/build/cjs/i18n/en.json +8 -0
  42. package/build/cjs/i18n/index.d.ts +4 -0
  43. package/build/cjs/i18n/index.js +19 -0
  44. package/build/cjs/i18n/ru.json +8 -0
  45. package/build/cjs/icons/CloseIcon.d.ts +2 -0
  46. package/build/cjs/icons/CloseIcon.js +10 -0
  47. package/build/cjs/icons/CogIcon.d.ts +2 -0
  48. package/build/cjs/icons/CogIcon.js +10 -0
  49. package/build/cjs/icons/CopyIcon.d.ts +2 -0
  50. package/build/cjs/icons/CopyIcon.js +10 -0
  51. package/build/cjs/icons/DeleteIcon.d.ts +2 -0
  52. package/build/cjs/icons/DeleteIcon.js +12 -0
  53. package/build/cjs/icons/DotsIcon.d.ts +2 -0
  54. package/build/cjs/icons/DotsIcon.js +10 -0
  55. package/build/cjs/icons/TickIcon.d.ts +2 -0
  56. package/build/cjs/icons/TickIcon.js +10 -0
  57. package/build/cjs/icons/WarningIcon.d.ts +2 -0
  58. package/build/cjs/icons/WarningIcon.js +10 -0
  59. package/build/cjs/index.d.ts +5 -0
  60. package/build/cjs/index.js +8 -0
  61. package/build/cjs/plugins/Text/Text.css +34 -0
  62. package/build/cjs/plugins/Text/Text.d.ts +52 -0
  63. package/build/cjs/plugins/Text/Text.js +119 -0
  64. package/build/cjs/plugins/Title/Title.css +24 -0
  65. package/build/cjs/plugins/Title/Title.d.ts +14 -0
  66. package/build/cjs/plugins/Title/Title.js +25 -0
  67. package/build/cjs/shared/constants/common.d.ts +2 -0
  68. package/build/cjs/shared/constants/common.js +5 -0
  69. package/build/cjs/shared/constants/index.d.ts +1 -0
  70. package/build/cjs/shared/constants/index.js +4 -0
  71. package/build/cjs/shared/index.d.ts +4 -0
  72. package/build/cjs/shared/index.js +7 -0
  73. package/build/cjs/shared/modules/__tests__/helpers.test.d.ts +1 -0
  74. package/build/cjs/shared/modules/__tests__/helpers.test.js +217 -0
  75. package/build/cjs/shared/modules/helpers.d.ts +42 -0
  76. package/build/cjs/shared/modules/helpers.js +172 -0
  77. package/build/cjs/shared/modules/index.d.ts +2 -0
  78. package/build/cjs/shared/modules/index.js +5 -0
  79. package/build/cjs/shared/modules/state-and-params.d.ts +16 -0
  80. package/build/cjs/shared/modules/state-and-params.js +94 -0
  81. package/build/cjs/shared/types/common.d.ts +5 -0
  82. package/build/cjs/shared/types/common.js +2 -0
  83. package/build/cjs/shared/types/config.d.ts +49 -0
  84. package/build/cjs/shared/types/config.js +2 -0
  85. package/build/cjs/shared/types/index.d.ts +4 -0
  86. package/build/cjs/shared/types/index.js +7 -0
  87. package/build/cjs/shared/types/plugin.d.ts +8 -0
  88. package/build/cjs/shared/types/plugin.js +2 -0
  89. package/build/cjs/shared/types/state-and-params.d.ts +22 -0
  90. package/build/cjs/shared/types/state-and-params.js +3 -0
  91. package/build/cjs/shared/units/__tests__/state-and-params.test.d.ts +241 -0
  92. package/build/cjs/shared/units/__tests__/state-and-params.test.js +299 -0
  93. package/build/cjs/shared/units/datalens/index.d.ts +5 -0
  94. package/build/cjs/shared/units/datalens/index.js +25 -0
  95. package/build/cjs/shared/units/index.d.ts +1 -0
  96. package/build/cjs/shared/units/index.js +4 -0
  97. package/build/cjs/typings/common.d.ts +32 -0
  98. package/build/cjs/typings/common.js +2 -0
  99. package/build/cjs/typings/config.d.ts +7 -0
  100. package/build/cjs/typings/config.js +2 -0
  101. package/build/cjs/typings/global.d.ts +7 -0
  102. package/build/cjs/typings/index.d.ts +3 -0
  103. package/build/cjs/typings/index.js +6 -0
  104. package/build/cjs/typings/plugin.d.ts +39 -0
  105. package/build/cjs/typings/plugin.js +2 -0
  106. package/build/cjs/utils/__tests__/mock.test.d.ts +1 -0
  107. package/build/cjs/utils/__tests__/mock.test.js +8 -0
  108. package/build/cjs/utils/configure.d.ts +9 -0
  109. package/build/cjs/utils/configure.js +21 -0
  110. package/build/cjs/utils/i18n.d.ts +7 -0
  111. package/build/cjs/utils/i18n.js +13 -0
  112. package/build/cjs/utils/index.d.ts +3 -0
  113. package/build/cjs/utils/index.js +6 -0
  114. package/build/cjs/utils/register-manager.d.ts +46 -0
  115. package/build/cjs/utils/register-manager.js +58 -0
  116. package/build/cjs/utils/update-manager.d.ts +37 -0
  117. package/build/cjs/utils/update-manager.js +274 -0
  118. package/build/esm/components/DashKit/DashKit.d.ts +50 -0
  119. package/build/esm/components/DashKit/DashKit.js +65 -0
  120. package/build/esm/components/DashKit/index.d.ts +1 -0
  121. package/build/esm/components/DashKit/index.js +1 -0
  122. package/build/esm/components/DashKitView/DashKitView.css +4 -0
  123. package/build/esm/components/DashKitView/DashKitView.d.ts +3 -0
  124. package/build/esm/components/DashKitView/DashKitView.js +21 -0
  125. package/build/esm/components/GridItem/GridItem.css +83 -0
  126. package/build/esm/components/GridItem/GridItem.d.ts +3 -0
  127. package/build/esm/components/GridItem/GridItem.js +68 -0
  128. package/build/esm/components/GridLayout/GridLayout.d.ts +25 -0
  129. package/build/esm/components/GridLayout/GridLayout.js +85 -0
  130. package/build/esm/components/Item/Item.css +19 -0
  131. package/build/esm/components/Item/Item.d.ts +67 -0
  132. package/build/esm/components/Item/Item.js +21 -0
  133. package/build/esm/components/MobileLayout/MobileLayout.css +10 -0
  134. package/build/esm/components/MobileLayout/MobileLayout.d.ts +16 -0
  135. package/build/esm/components/MobileLayout/MobileLayout.js +51 -0
  136. package/build/esm/components/MobileLayout/helpers.d.ts +3 -0
  137. package/build/esm/components/MobileLayout/helpers.js +28 -0
  138. package/build/esm/components/OverlayControls/OverlayControls.css +28 -0
  139. package/build/esm/components/OverlayControls/OverlayControls.d.ts +55 -0
  140. package/build/esm/components/OverlayControls/OverlayControls.js +209 -0
  141. package/build/esm/components/index.d.ts +1 -0
  142. package/build/esm/components/index.js +1 -0
  143. package/build/esm/constants/common.d.ts +7 -0
  144. package/build/esm/constants/common.js +7 -0
  145. package/build/esm/constants/index.d.ts +1 -0
  146. package/build/esm/constants/index.js +1 -0
  147. package/build/esm/context/DashKitContext.d.ts +2 -0
  148. package/build/esm/context/DashKitContext.js +3 -0
  149. package/build/esm/hocs/prepareItem.d.ts +66 -0
  150. package/build/esm/hocs/prepareItem.js +61 -0
  151. package/build/esm/hocs/withContext.d.ts +165 -0
  152. package/build/esm/hocs/withContext.js +198 -0
  153. package/build/esm/hooks/useCalcLayout.d.ts +13 -0
  154. package/build/esm/hooks/useCalcLayout.js +26 -0
  155. package/build/esm/i18n/en.json +8 -0
  156. package/build/esm/i18n/index.d.ts +4 -0
  157. package/build/esm/i18n/index.js +15 -0
  158. package/build/esm/i18n/ru.json +8 -0
  159. package/build/esm/icons/CloseIcon.d.ts +2 -0
  160. package/build/esm/icons/CloseIcon.js +5 -0
  161. package/build/esm/icons/CogIcon.d.ts +2 -0
  162. package/build/esm/icons/CogIcon.js +5 -0
  163. package/build/esm/icons/CopyIcon.d.ts +2 -0
  164. package/build/esm/icons/CopyIcon.js +5 -0
  165. package/build/esm/icons/DeleteIcon.d.ts +2 -0
  166. package/build/esm/icons/DeleteIcon.js +7 -0
  167. package/build/esm/icons/DotsIcon.d.ts +2 -0
  168. package/build/esm/icons/DotsIcon.js +5 -0
  169. package/build/esm/icons/TickIcon.d.ts +2 -0
  170. package/build/esm/icons/TickIcon.js +5 -0
  171. package/build/esm/icons/WarningIcon.d.ts +2 -0
  172. package/build/esm/icons/WarningIcon.js +5 -0
  173. package/build/esm/index.d.ts +5 -0
  174. package/build/esm/index.js +5 -0
  175. package/build/esm/plugins/Text/Text.css +34 -0
  176. package/build/esm/plugins/Text/Text.d.ts +53 -0
  177. package/build/esm/plugins/Text/Text.js +115 -0
  178. package/build/esm/plugins/Title/Title.css +24 -0
  179. package/build/esm/plugins/Title/Title.d.ts +15 -0
  180. package/build/esm/plugins/Title/Title.js +21 -0
  181. package/build/esm/shared/constants/common.d.ts +2 -0
  182. package/build/esm/shared/constants/common.js +2 -0
  183. package/build/esm/shared/constants/index.d.ts +1 -0
  184. package/build/esm/shared/constants/index.js +1 -0
  185. package/build/esm/shared/index.d.ts +4 -0
  186. package/build/esm/shared/index.js +4 -0
  187. package/build/esm/shared/modules/__tests__/helpers.test.d.ts +1 -0
  188. package/build/esm/shared/modules/__tests__/helpers.test.js +215 -0
  189. package/build/esm/shared/modules/helpers.d.ts +42 -0
  190. package/build/esm/shared/modules/helpers.js +157 -0
  191. package/build/esm/shared/modules/index.d.ts +2 -0
  192. package/build/esm/shared/modules/index.js +2 -0
  193. package/build/esm/shared/modules/state-and-params.d.ts +16 -0
  194. package/build/esm/shared/modules/state-and-params.js +87 -0
  195. package/build/esm/shared/types/common.d.ts +5 -0
  196. package/build/esm/shared/types/common.js +1 -0
  197. package/build/esm/shared/types/config.d.ts +49 -0
  198. package/build/esm/shared/types/config.js +1 -0
  199. package/build/esm/shared/types/index.d.ts +4 -0
  200. package/build/esm/shared/types/index.js +4 -0
  201. package/build/esm/shared/types/plugin.d.ts +8 -0
  202. package/build/esm/shared/types/plugin.js +1 -0
  203. package/build/esm/shared/types/state-and-params.d.ts +22 -0
  204. package/build/esm/shared/types/state-and-params.js +1 -0
  205. package/build/esm/shared/units/__tests__/state-and-params.test.d.ts +241 -0
  206. package/build/esm/shared/units/__tests__/state-and-params.test.js +295 -0
  207. package/build/esm/shared/units/datalens/index.d.ts +5 -0
  208. package/build/esm/shared/units/datalens/index.js +20 -0
  209. package/build/esm/shared/units/index.d.ts +1 -0
  210. package/build/esm/shared/units/index.js +1 -0
  211. package/build/esm/typings/common.d.ts +32 -0
  212. package/build/esm/typings/common.js +1 -0
  213. package/build/esm/typings/config.d.ts +7 -0
  214. package/build/esm/typings/config.js +1 -0
  215. package/build/esm/typings/global.d.ts +7 -0
  216. package/build/esm/typings/index.d.ts +3 -0
  217. package/build/esm/typings/index.js +3 -0
  218. package/build/esm/typings/plugin.d.ts +39 -0
  219. package/build/esm/typings/plugin.js +1 -0
  220. package/build/esm/utils/__tests__/mock.test.d.ts +1 -0
  221. package/build/esm/utils/__tests__/mock.test.js +8 -0
  222. package/build/esm/utils/configure.d.ts +9 -0
  223. package/build/esm/utils/configure.js +15 -0
  224. package/build/esm/utils/i18n.d.ts +7 -0
  225. package/build/esm/utils/i18n.js +9 -0
  226. package/build/esm/utils/index.d.ts +3 -0
  227. package/build/esm/utils/index.js +3 -0
  228. package/build/esm/utils/register-manager.d.ts +46 -0
  229. package/build/esm/utils/register-manager.js +54 -0
  230. package/build/esm/utils/update-manager.d.ts +37 -0
  231. package/build/esm/utils/update-manager.js +269 -0
  232. package/package.json +107 -0
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const react_1 = tslib_1.__importDefault(require("react"));
5
+ const prop_types_1 = tslib_1.__importDefault(require("prop-types"));
6
+ const bem_cn_lite_1 = tslib_1.__importDefault(require("bem-cn-lite"));
7
+ const Item_1 = tslib_1.__importDefault(require("../Item/Item"));
8
+ const DashKitContext_1 = require("../../context/DashKitContext");
9
+ const OverlayControls_1 = tslib_1.__importDefault(require("../OverlayControls/OverlayControls"));
10
+ const b = (0, bem_cn_lite_1.default)('dashkit-grid-item');
11
+ class GridItem extends react_1.default.PureComponent {
12
+ renderOverlay() {
13
+ const { editMode, overlayControls } = this.context;
14
+ if (!editMode || this.props.item.data._editActive) {
15
+ return null;
16
+ }
17
+ const { item } = this.props;
18
+ const controls = overlayControls && overlayControls[item.type];
19
+ return (react_1.default.createElement(react_1.default.Fragment, null,
20
+ react_1.default.createElement("div", { className: b('overlay') }),
21
+ react_1.default.createElement(OverlayControls_1.default, { configItem: item, items: controls })));
22
+ }
23
+ render() {
24
+ // из-за бага, что Grid Items unmounts при изменении static, isDraggable, isResaizable
25
+ // https://github.com/STRML/react-grid-layout/issues/721
26
+ const { style, onMouseDown, onMouseUp, onTouchEnd, onTouchStart, children, className, isDragging, noOverlay, withCustomHandle, } = this.props;
27
+ const { editMode } = this.context;
28
+ const width = Number.parseInt(style.width, 10);
29
+ const height = Number.parseInt(style.height, 10);
30
+ const transform = style.transform;
31
+ const preparedClassName = editMode
32
+ ? className
33
+ : className.replace('react-resizable', '').replace('react-draggable', '');
34
+ const preparedChildren = editMode ? children : null;
35
+ const reactGridLayoutProps = editMode
36
+ ? { onMouseDown, onMouseUp, onTouchEnd, onTouchStart }
37
+ : {};
38
+ const { _editActive } = this.props.item.data;
39
+ return (react_1.default.createElement("div", Object.assign({ className: b({
40
+ 'is-dragging': isDragging,
41
+ 'with-custom-handle': withCustomHandle,
42
+ }, preparedClassName), "data-qa": "dashkit-grid-item", style: style }, reactGridLayoutProps),
43
+ react_1.default.createElement("div", { className: b('item', { editMode: editMode && !_editActive && !noOverlay }) },
44
+ react_1.default.createElement(Item_1.default, { id: this.props.id, item: this.props.item, shouldItemUpdate: !isDragging, width: width, height: height, transform: transform, adjustWidgetLayout: this.props.adjustWidgetLayout, layout: this.props.layout, forwardedPluginRef: this.props.forwardedPluginRef })),
45
+ !noOverlay && this.renderOverlay(),
46
+ preparedChildren));
47
+ }
48
+ }
49
+ GridItem.propTypes = {
50
+ adjustWidgetLayout: prop_types_1.default.func.isRequired,
51
+ id: prop_types_1.default.string,
52
+ item: prop_types_1.default.object,
53
+ isDragging: prop_types_1.default.bool,
54
+ layout: prop_types_1.default.array,
55
+ forwardedPluginRef: prop_types_1.default.any,
56
+ // from react-grid-layout:
57
+ children: prop_types_1.default.node,
58
+ className: prop_types_1.default.string,
59
+ style: prop_types_1.default.object,
60
+ noOverlay: prop_types_1.default.bool,
61
+ withCustomHandle: prop_types_1.default.bool,
62
+ onMouseDown: prop_types_1.default.func,
63
+ onMouseUp: prop_types_1.default.func,
64
+ onTouchEnd: prop_types_1.default.func,
65
+ onTouchStart: prop_types_1.default.func,
66
+ };
67
+ GridItem.contextType = DashKitContext_1.DashKitContext;
68
+ exports.default = react_1.default.forwardRef((props, ref) => {
69
+ return react_1.default.createElement(GridItem, Object.assign({}, props, { forwardedPluginRef: ref }));
70
+ });
@@ -0,0 +1,25 @@
1
+ export default class GridLayout extends React.PureComponent<any, any, any> {
2
+ static contextType: React.Context<any>;
3
+ constructor(props: any, context: any);
4
+ pluginsRefs: any[];
5
+ state: {
6
+ isDragging: boolean;
7
+ isPageHidden: boolean;
8
+ };
9
+ componentDidMount(): void;
10
+ componentDidUpdate(): void;
11
+ componentWillUnmount(): void;
12
+ _timeout: any;
13
+ onVisibilityChange: () => void;
14
+ adjustWidgetLayout: ({ widgetId, needSetDefault, adjustedWidgetLayout }: {
15
+ widgetId: any;
16
+ needSetDefault: any;
17
+ adjustedWidgetLayout: any;
18
+ }) => void;
19
+ getItemsMeta: () => any;
20
+ reloadItems(): void;
21
+ _onStart: () => void;
22
+ _onStop: (newLayout: any) => void;
23
+ render(): JSX.Element;
24
+ }
25
+ import React from "react";
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const react_1 = tslib_1.__importDefault(require("react"));
5
+ const react_grid_layout_1 = tslib_1.__importStar(require("react-grid-layout"));
6
+ const GridItem_1 = tslib_1.__importDefault(require("../GridItem/GridItem"));
7
+ const DashKitContext_1 = require("../../context/DashKitContext");
8
+ const Layout = (0, react_grid_layout_1.WidthProvider)(react_grid_layout_1.default); // eslint-disable-line new-cap
9
+ class GridLayout extends react_1.default.PureComponent {
10
+ constructor(props, context) {
11
+ super(props, context);
12
+ this.onVisibilityChange = () => {
13
+ this.setState({
14
+ isPageHidden: document.hidden,
15
+ });
16
+ };
17
+ this.adjustWidgetLayout = ({ widgetId, needSetDefault, adjustedWidgetLayout }) => {
18
+ const { getLayout, memorizeOriginalLayout, revertToOriginalLayout } = this.context;
19
+ if (needSetDefault) {
20
+ revertToOriginalLayout(widgetId);
21
+ return;
22
+ }
23
+ if (!adjustedWidgetLayout) {
24
+ return;
25
+ }
26
+ const layout = getLayout();
27
+ const correspondedLayoutItemIndex = layout.findIndex((layoutItem) => layoutItem.i === widgetId);
28
+ memorizeOriginalLayout(widgetId, Object.assign({}, layout[correspondedLayoutItemIndex]), adjustedWidgetLayout);
29
+ };
30
+ this.getItemsMeta = () => {
31
+ const { getItemsMeta } = this.context;
32
+ return getItemsMeta(this.pluginsRefs);
33
+ };
34
+ this._onStart = () => {
35
+ this.setState({ isDragging: true });
36
+ };
37
+ this._onStop = (newLayout) => {
38
+ const { layoutChange } = this.context;
39
+ layoutChange(newLayout);
40
+ this.setState({ isDragging: false });
41
+ };
42
+ this.pluginsRefs = [];
43
+ this.state = {
44
+ isDragging: false,
45
+ isPageHidden: false,
46
+ };
47
+ }
48
+ componentDidMount() {
49
+ this.reloadItems();
50
+ document.addEventListener('visibilitychange', this.onVisibilityChange);
51
+ }
52
+ componentDidUpdate() {
53
+ clearTimeout(this._timeout);
54
+ this.reloadItems();
55
+ }
56
+ componentWillUnmount() {
57
+ clearTimeout(this._timeout);
58
+ document.removeEventListener('visibilitychange', this.onVisibilityChange);
59
+ }
60
+ reloadItems() {
61
+ const { editMode, settings: { autoupdateInterval, silentLoading } = {}, reloadItems, } = this.context;
62
+ const { isPageHidden } = this.state;
63
+ const autoupdateIntervalNumber = Number(autoupdateInterval);
64
+ if (autoupdateIntervalNumber) {
65
+ this._timeout = setTimeout(() => {
66
+ if (!isPageHidden) {
67
+ if (!editMode) {
68
+ reloadItems(this.pluginsRefs, { silentLoading, noVeil: true });
69
+ }
70
+ this.reloadItems();
71
+ }
72
+ }, autoupdateIntervalNumber * 1000);
73
+ }
74
+ }
75
+ render() {
76
+ const { getLayout, config, registerManager, editMode, noOverlay, draggableHandleClassName } = this.context;
77
+ this.pluginsRefs.length = config.items.length;
78
+ const layout = getLayout();
79
+ return (react_1.default.createElement(Layout, Object.assign({}, registerManager.gridLayout, { layout: layout, isDraggable: editMode, isResizable: editMode, onDragStart: this._onStart, onDragStop: this._onStop, onResizeStart: this._onStart, onResizeStop: this._onStop }, (draggableHandleClassName
80
+ ? { draggableHandle: `.${draggableHandleClassName}` }
81
+ : null)), config.items.map((item, i) => {
82
+ return (react_1.default.createElement(GridItem_1.default, { ref: (pluginRef) => {
83
+ this.pluginsRefs[i] = pluginRef;
84
+ }, key: item.id, id: item.id, item: item, layout: layout, adjustWidgetLayout: this.adjustWidgetLayout, isDragging: this.state.isDragging, noOverlay: noOverlay, withCustomHandle: Boolean(draggableHandleClassName) }));
85
+ })));
86
+ }
87
+ }
88
+ exports.default = GridLayout;
89
+ GridLayout.contextType = DashKitContext_1.DashKitContext;
@@ -0,0 +1,19 @@
1
+ .dashkit-item__renderer {
2
+ position: absolute;
3
+ top: 0;
4
+ bottom: 0;
5
+ left: 0;
6
+ right: 0;
7
+ }
8
+ .dashkit-item__loader {
9
+ position: absolute;
10
+ top: 0;
11
+ bottom: 0;
12
+ left: 0;
13
+ right: 0;
14
+ display: flex;
15
+ align-items: center;
16
+ justify-content: center;
17
+ border: dashed 1px rgba(0, 0, 0, 0.1);
18
+ z-index: 3;
19
+ }
@@ -0,0 +1,67 @@
1
+ declare const _default: {
2
+ new (props: any): {
3
+ shouldComponentUpdate(nextProps: any): boolean;
4
+ _onStateAndParamsChange: (stateAndParams: any) => void;
5
+ render(): JSX.Element;
6
+ context: any;
7
+ setState<K extends string | number | symbol>(state: any, callback?: (() => void) | undefined): void;
8
+ forceUpdate(callback?: (() => void) | undefined): void;
9
+ readonly props: Readonly<any> & Readonly<{
10
+ children?: React.ReactNode;
11
+ }>;
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) => void;
31
+ render(): JSX.Element;
32
+ context: any;
33
+ setState<K extends string | number | symbol>(state: any, callback?: (() => void) | undefined): void;
34
+ forceUpdate(callback?: (() => void) | undefined): void;
35
+ readonly props: Readonly<any> & Readonly<{
36
+ children?: React.ReactNode;
37
+ }>;
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
+ adjustWidgetLayout: PropTypes.Validator<(...args: any[]) => any>;
56
+ layout: PropTypes.Requireable<any[]>;
57
+ id: PropTypes.Requireable<string>;
58
+ item: PropTypes.Requireable<object>;
59
+ shouldItemUpdate: PropTypes.Requireable<boolean>;
60
+ width: PropTypes.Requireable<number>;
61
+ height: PropTypes.Requireable<number>;
62
+ transform: PropTypes.Requireable<string>;
63
+ forwardedPluginRef: PropTypes.Requireable<any>;
64
+ };
65
+ contextType: React.Context<any>;
66
+ };
67
+ export default _default;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const react_1 = tslib_1.__importDefault(require("react"));
5
+ const bem_cn_lite_1 = tslib_1.__importDefault(require("bem-cn-lite"));
6
+ const prop_types_1 = tslib_1.__importDefault(require("prop-types"));
7
+ const prepareItem_1 = require("../../hocs/prepareItem");
8
+ const b = (0, bem_cn_lite_1.default)('dashkit-item');
9
+ // TODO: getDerivedStateFromError и заглушка с ошибкой
10
+ const Item = ({ registerManager, rendererProps, type, forwardedPluginRef }) => {
11
+ if (!registerManager.check(type)) {
12
+ console.warn(`type [${type}] не зарегистрирован`);
13
+ return null;
14
+ }
15
+ return (react_1.default.createElement("div", { className: b('renderer') }, registerManager.getItem(type).renderer(rendererProps, forwardedPluginRef)));
16
+ };
17
+ Item.propTypes = {
18
+ forwardedPluginRef: prop_types_1.default.any,
19
+ rendererProps: prop_types_1.default.object,
20
+ registerManager: prop_types_1.default.object,
21
+ type: prop_types_1.default.string,
22
+ };
23
+ exports.default = (0, prepareItem_1.prepareItem)(Item);
@@ -0,0 +1,10 @@
1
+ .dashkit-mobile-layout__item {
2
+ margin-bottom: 20px;
3
+ position: relative;
4
+ }
5
+ .dashkit-mobile-layout .dashkit-item__renderer {
6
+ overflow-y: auto;
7
+ border-radius: 3px;
8
+ position: static;
9
+ user-select: none;
10
+ }
@@ -0,0 +1,16 @@
1
+ export default class MobileLayout extends React.PureComponent<any, any, any> {
2
+ static contextType: React.Context<any>;
3
+ constructor(props: any);
4
+ constructor(props: any, context: any);
5
+ pluginsRefs: any[];
6
+ state: {
7
+ activeTabId: null;
8
+ indexesOfItemsWithActiveAutoheight: {};
9
+ };
10
+ componentDidUpdate(prevProps: any, prevState: any): void;
11
+ adjustWidgetLayout: (index: any, { needSetDefault }: {
12
+ needSetDefault: any;
13
+ }) => void;
14
+ render(): JSX.Element;
15
+ }
16
+ import React from "react";
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const react_1 = tslib_1.__importDefault(require("react"));
5
+ const bem_cn_lite_1 = tslib_1.__importDefault(require("bem-cn-lite"));
6
+ const Item_1 = tslib_1.__importDefault(require("../Item/Item"));
7
+ const DashKitContext_1 = require("../../context/DashKitContext");
8
+ const helpers_1 = require("./helpers");
9
+ const b = (0, bem_cn_lite_1.default)('dashkit-mobile-layout');
10
+ class MobileLayout extends react_1.default.PureComponent {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.pluginsRefs = [];
14
+ this.state = {
15
+ activeTabId: null,
16
+ indexesOfItemsWithActiveAutoheight: {},
17
+ };
18
+ this.adjustWidgetLayout = (index, { needSetDefault }) => {
19
+ if (needSetDefault) {
20
+ const indexesOfItemsWithActiveAutoheight = Object.assign({}, this.state.indexesOfItemsWithActiveAutoheight);
21
+ delete indexesOfItemsWithActiveAutoheight[index];
22
+ this.setState({ indexesOfItemsWithActiveAutoheight });
23
+ }
24
+ else {
25
+ this.setState({
26
+ indexesOfItemsWithActiveAutoheight: Object.assign({}, this.state.indexesOfItemsWithActiveAutoheight, { [index]: true }),
27
+ });
28
+ }
29
+ };
30
+ }
31
+ componentDidUpdate(prevProps, prevState) {
32
+ if (prevState.activeTabId !== this.context.config.id) {
33
+ this.setState({
34
+ activeTabId: this.context.config.id,
35
+ indexesOfItemsWithActiveAutoheight: {},
36
+ });
37
+ }
38
+ }
39
+ render() {
40
+ const { config, getLayout } = this.context;
41
+ this.pluginsRefs.length = config.items.length;
42
+ const hasOrderId = Boolean(config.items.find((item) => item.orderId));
43
+ const sortedItems = (0, helpers_1.getSortedConfigItems)(config, hasOrderId);
44
+ return (react_1.default.createElement("div", { className: b() }, sortedItems.map((item, index) => {
45
+ const isItemWithActiveAutoheight = index in this.state.indexesOfItemsWithActiveAutoheight;
46
+ return (react_1.default.createElement("div", { className: b('item', { autoheight: isItemWithActiveAutoheight }), key: item.id },
47
+ react_1.default.createElement(Item_1.default, { id: item.id, item: item, layout: getLayout(), shouldItemUpdate: false, adjustWidgetLayout: this.adjustWidgetLayout.bind(this, index), forwardedPluginRef: (pluginRef) => {
48
+ this.pluginsRefs[index] = pluginRef;
49
+ } })));
50
+ })));
51
+ }
52
+ }
53
+ exports.default = MobileLayout;
54
+ MobileLayout.contextType = DashKitContext_1.DashKitContext;
@@ -0,0 +1,3 @@
1
+ import { ConfigItem, ConfigLayout } from '../../shared';
2
+ import { DashKitProps } from '../DashKit';
3
+ export declare const getSortedConfigItems: (config: DashKitProps['config'], hasOrderId: boolean) => (ConfigItem & ConfigLayout)[];
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSortedConfigItems = void 0;
4
+ const sortByOrderComparator = (prev, next, fieldName) => {
5
+ const prevOrderId = prev[fieldName];
6
+ const nextOrderId = next[fieldName];
7
+ if (prevOrderId === undefined) {
8
+ return 1;
9
+ }
10
+ if (nextOrderId === undefined) {
11
+ return -1;
12
+ }
13
+ if (prevOrderId > nextOrderId) {
14
+ return 1;
15
+ }
16
+ else if (prevOrderId < nextOrderId) {
17
+ return -1;
18
+ }
19
+ return 0;
20
+ };
21
+ const getWidgetsSortComparator = (hasOrderId) => {
22
+ return hasOrderId
23
+ ? (prev, next) => sortByOrderComparator(prev, next, 'orderId')
24
+ : (prev, next) => prev.y === next.y ? prev.x - next.x : prev.y - next.y;
25
+ };
26
+ const getSortedConfigItems = (config, hasOrderId) => {
27
+ const sortComparator = getWidgetsSortComparator(hasOrderId);
28
+ return config.items
29
+ .map((item, index) => Object.assign({}, item, config.layout[index]))
30
+ .sort(sortComparator);
31
+ };
32
+ exports.getSortedConfigItems = getSortedConfigItems;
@@ -0,0 +1,28 @@
1
+ .dashkit-overlay-controls {
2
+ position: absolute;
3
+ display: flex;
4
+ }
5
+ .dashkit-overlay-controls__default-controls {
6
+ display: flex;
7
+ background: var(--yc-color-base-generic-ultralight);
8
+ border-radius: var(--yc-border-radius-m);
9
+ }
10
+ .dashkit-overlay-controls_position_top_right {
11
+ top: 7px;
12
+ right: 7px;
13
+ }
14
+ .dashkit-overlay-controls_position_top_left {
15
+ top: 7px;
16
+ left: 7px;
17
+ }
18
+ .dashkit-overlay-controls_position_bottom_right {
19
+ bottom: 7px;
20
+ right: 7px;
21
+ }
22
+ .dashkit-overlay-controls_position_bottom_left {
23
+ bottom: 7px;
24
+ left: 7px;
25
+ }
26
+ .dashkit-overlay-controls__item_danger {
27
+ color: var(--yc-color-text-danger);
28
+ }
@@ -0,0 +1,54 @@
1
+ import React from 'react';
2
+ import { ButtonView, ButtonSize, IconProps, MenuItemProps } from '@gravity-ui/uikit';
3
+ import { ConfigItem, PluginBase } from '../../shared';
4
+ export declare enum OverlayControlsPosition {
5
+ TopRight = "top_right",
6
+ TopLeft = "top_left",
7
+ BottomRight = "bottom_right",
8
+ BottomLeft = "bottom_left"
9
+ }
10
+ export interface OverlayControlItem {
11
+ title?: string;
12
+ icon?: IconProps['data'];
13
+ iconSize?: number | string;
14
+ handler?: (item: ConfigItem) => void;
15
+ allWidgetsControls?: boolean;
16
+ excludeWidgetsTypes?: Array<PluginBase['type']>;
17
+ id?: string;
18
+ }
19
+ export interface OverlayCustomControlItem {
20
+ id: string;
21
+ title?: string;
22
+ icon?: MenuItemProps['icon'];
23
+ iconSize?: number | string;
24
+ handler?: (item: ConfigItem) => void;
25
+ visible?: (item: ConfigItem) => boolean;
26
+ className?: string;
27
+ }
28
+ interface OverlayControlsDefaultProps {
29
+ position: OverlayControlsPosition;
30
+ view: ButtonView;
31
+ size: ButtonSize;
32
+ }
33
+ interface OverlayControlsProps extends OverlayControlsDefaultProps {
34
+ configItem: ConfigItem;
35
+ items?: OverlayControlItem[];
36
+ }
37
+ declare class OverlayControls extends React.Component<OverlayControlsProps> {
38
+ static contextType: React.Context<any>;
39
+ static defaultProps: OverlayControlsDefaultProps;
40
+ render(): JSX.Element;
41
+ private renderControlsItem;
42
+ private getDropDownMenuItemConfig;
43
+ private renderControls;
44
+ private renderMenu;
45
+ private isDefaultMenu;
46
+ private renderDropdownMenu;
47
+ private getCustomLeftOverlayControls;
48
+ private onCopyItem;
49
+ private onEditItem;
50
+ private onRemoveItem;
51
+ private getControlItemPinStyle;
52
+ private getCustomControlsWithWidgets;
53
+ }
54
+ export default OverlayControls;