@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,55 @@
1
+ import React from 'react';
2
+ import { ButtonView, ButtonSize, IconProps, MenuItemProps } from '@gravity-ui/uikit';
3
+ import { ConfigItem, PluginBase } from '../../shared';
4
+ import './OverlayControls.css';
5
+ export declare enum OverlayControlsPosition {
6
+ TopRight = "top_right",
7
+ TopLeft = "top_left",
8
+ BottomRight = "bottom_right",
9
+ BottomLeft = "bottom_left"
10
+ }
11
+ export interface OverlayControlItem {
12
+ title?: string;
13
+ icon?: IconProps['data'];
14
+ iconSize?: number | string;
15
+ handler?: (item: ConfigItem) => void;
16
+ allWidgetsControls?: boolean;
17
+ excludeWidgetsTypes?: Array<PluginBase['type']>;
18
+ id?: string;
19
+ }
20
+ export interface OverlayCustomControlItem {
21
+ id: string;
22
+ title?: string;
23
+ icon?: MenuItemProps['icon'];
24
+ iconSize?: number | string;
25
+ handler?: (item: ConfigItem) => void;
26
+ visible?: (item: ConfigItem) => boolean;
27
+ className?: string;
28
+ }
29
+ interface OverlayControlsDefaultProps {
30
+ position: OverlayControlsPosition;
31
+ view: ButtonView;
32
+ size: ButtonSize;
33
+ }
34
+ interface OverlayControlsProps extends OverlayControlsDefaultProps {
35
+ configItem: ConfigItem;
36
+ items?: OverlayControlItem[];
37
+ }
38
+ declare class OverlayControls extends React.Component<OverlayControlsProps> {
39
+ static contextType: React.Context<any>;
40
+ static defaultProps: OverlayControlsDefaultProps;
41
+ render(): JSX.Element;
42
+ private renderControlsItem;
43
+ private getDropDownMenuItemConfig;
44
+ private renderControls;
45
+ private renderMenu;
46
+ private isDefaultMenu;
47
+ private renderDropdownMenu;
48
+ private getCustomLeftOverlayControls;
49
+ private onCopyItem;
50
+ private onEditItem;
51
+ private onRemoveItem;
52
+ private getControlItemPinStyle;
53
+ private getCustomControlsWithWidgets;
54
+ }
55
+ export default OverlayControls;
@@ -0,0 +1,209 @@
1
+ import React from 'react';
2
+ import block from 'bem-cn-lite';
3
+ import i18n from '../../i18n';
4
+ import noop from 'lodash/noop';
5
+ import { DashKitContext } from '../../context/DashKitContext';
6
+ import { Icon, DropdownMenu, Button, } from '@gravity-ui/uikit';
7
+ import { COPIED_WIDGET_STORE_KEY, MenuItems } from '../../constants';
8
+ import { DotsIcon } from '../../icons/DotsIcon';
9
+ import { CogIcon } from '../../icons/CogIcon';
10
+ import { CloseIcon } from '../../icons/CloseIcon';
11
+ import './OverlayControls.css';
12
+ const b = block('dashkit-overlay-controls');
13
+ export var OverlayControlsPosition;
14
+ (function (OverlayControlsPosition) {
15
+ OverlayControlsPosition["TopRight"] = "top_right";
16
+ OverlayControlsPosition["TopLeft"] = "top_left";
17
+ OverlayControlsPosition["BottomRight"] = "bottom_right";
18
+ OverlayControlsPosition["BottomLeft"] = "bottom_left";
19
+ })(OverlayControlsPosition || (OverlayControlsPosition = {}));
20
+ const DEFAULT_DROPDOWN_MENU = [MenuItems.Copy, MenuItems.Delete];
21
+ class OverlayControls extends React.Component {
22
+ constructor() {
23
+ super(...arguments);
24
+ this.renderControlsItem = (item, index, length) => {
25
+ const { view, size } = this.props;
26
+ const { title, handler, icon, iconSize } = item;
27
+ const onItemClickHandler = typeof handler === 'function' ? handler : noop;
28
+ return (React.createElement(Button, { key: index, view: view, size: size, title: title, pin: this.getControlItemPinStyle(index, length), onClick: () => onItemClickHandler(this.props.configItem) },
29
+ React.createElement(Icon, { data: icon || CogIcon, size: icon ? iconSize : 24 })));
30
+ };
31
+ this.getCustomLeftOverlayControls = () => {
32
+ // выбираем только items-ы у которых проставлено поле `allWidgetsControls:true`
33
+ // те контролы, которые будут показываться слева от меню
34
+ let controls = [];
35
+ for (const controlItem of Object.values(this.context.overlayControls || {})) {
36
+ controls = controls.concat((controlItem.filter((item) => {
37
+ var _a;
38
+ // если тип виджета-плагина в списке исключаемых, то не показываем такой контрол
39
+ if ((_a = item.excludeWidgetsTypes) === null || _a === void 0 ? void 0 : _a.includes(this.props.configItem.type)) {
40
+ return false;
41
+ }
42
+ return item.allWidgetsControls;
43
+ }) || []).map((item) => {
44
+ var _a;
45
+ if (!(item === null || item === void 0 ? void 0 : item.id)) {
46
+ return item;
47
+ }
48
+ return Object.assign(Object.assign({}, item), { handler: typeof item.handler === 'function'
49
+ ? item.handler
50
+ : ((_a = this.getDropDownMenuItemConfig(item.id)) === null || _a === void 0 ? void 0 : _a.action) || (() => { }) });
51
+ }));
52
+ }
53
+ return controls;
54
+ };
55
+ this.onCopyItem = () => {
56
+ const correspondedItemLayout = this.context.config.layout.find((item) => {
57
+ return item.i === this.props.configItem.id;
58
+ });
59
+ const options = {
60
+ timestamp: Date.now(),
61
+ data: this.props.configItem.data,
62
+ type: this.props.configItem.type,
63
+ defaults: this.props.configItem.defaults,
64
+ namespace: this.props.configItem.namespace,
65
+ layout: {
66
+ w: correspondedItemLayout.w,
67
+ h: correspondedItemLayout.h,
68
+ },
69
+ };
70
+ localStorage.setItem(COPIED_WIDGET_STORE_KEY, JSON.stringify(options));
71
+ };
72
+ this.onEditItem = () => {
73
+ this.context.editItem(this.props.configItem);
74
+ };
75
+ this.onRemoveItem = () => {
76
+ const { id } = this.props.configItem;
77
+ this.context.removeItem(id);
78
+ };
79
+ }
80
+ render() {
81
+ const { items = [], position } = this.props;
82
+ const hasCustomControlsWithWidgets = items.length > 0;
83
+ const controls = hasCustomControlsWithWidgets
84
+ ? this.getCustomControlsWithWidgets()
85
+ : this.renderControls();
86
+ return React.createElement("div", { className: b({ position }) }, controls);
87
+ }
88
+ getDropDownMenuItemConfig(menuName, isDefaultMenu) {
89
+ switch (menuName) {
90
+ case MenuItems.Copy: {
91
+ return {
92
+ action: this.onCopyItem,
93
+ text: i18n('label_copy'),
94
+ };
95
+ }
96
+ case MenuItems.Delete: {
97
+ return {
98
+ action: this.onRemoveItem,
99
+ text: i18n('label_delete'),
100
+ };
101
+ }
102
+ case MenuItems.Settings: {
103
+ // для дефолтного состояния меню нет настройки settings, а для кастомного можно использовать дефолтный action и text
104
+ if (isDefaultMenu) {
105
+ return null;
106
+ }
107
+ return {
108
+ action: this.onEditItem,
109
+ text: i18n('label_settings'),
110
+ };
111
+ }
112
+ }
113
+ return null;
114
+ }
115
+ renderControls() {
116
+ const { view, size } = this.props;
117
+ const customLeftControls = this.getCustomLeftOverlayControls();
118
+ const hasCustomOverlayLeftControls = Boolean(customLeftControls.length);
119
+ const defaultControl = (React.createElement(Button, { view: view, size: size, title: i18n('label_settings'), pin: "round-brick", onClick: this.onEditItem, qa: "dashkit-overlay-control-settings" },
120
+ React.createElement(Icon, { data: CogIcon, size: "24" })));
121
+ const controls = hasCustomOverlayLeftControls
122
+ ? customLeftControls.map((item, index, items) => this.renderControlsItem(item, index, items.length + 1))
123
+ : defaultControl;
124
+ const menu = this.renderMenu();
125
+ return (React.createElement("div", { className: b('default-controls', {
126
+ 'with-custom-left': hasCustomOverlayLeftControls,
127
+ }) },
128
+ controls,
129
+ menu));
130
+ }
131
+ renderMenu() {
132
+ const { view, size } = this.props;
133
+ const { registerManager } = this.context;
134
+ const withMenu = Array.isArray(registerManager.settings.menu) && registerManager.settings.menu.length;
135
+ return (React.createElement(React.Fragment, null, withMenu ? (this.renderDropdownMenu()) : (React.createElement(Button, { view: view, size: size, title: i18n('label_delete'), pin: "brick-round", onClick: this.onRemoveItem, qa: "dashkit-overlay-control-menu" },
136
+ React.createElement(Icon, { data: CloseIcon, size: "12" })))));
137
+ }
138
+ isDefaultMenu(menu) {
139
+ return menu === null || menu === void 0 ? void 0 : menu.every((item) => Object.values(MenuItems).includes(String(item)));
140
+ }
141
+ renderDropdownMenu() {
142
+ const { view, size } = this.props;
143
+ const { registerManager } = this.context;
144
+ let menu = registerManager.settings.menu;
145
+ if (!menu.length) {
146
+ menu = DEFAULT_DROPDOWN_MENU;
147
+ }
148
+ const isDefaultMenu = this.isDefaultMenu(menu);
149
+ let items = isDefaultMenu
150
+ ? (menu || []).map((name) => this.getDropDownMenuItemConfig(name, true))
151
+ : menu.map((item) => {
152
+ var _a;
153
+ if (typeof item === 'string') {
154
+ return null;
155
+ }
156
+ // custom menu dropdown item filter
157
+ if (item.visible && !item.visible(this.props.configItem)) {
158
+ return null;
159
+ }
160
+ const itemHandler = item.handler;
161
+ const itemAction = typeof itemHandler === 'function'
162
+ ? () => itemHandler(this.props.configItem)
163
+ : ((_a = this.getDropDownMenuItemConfig(item.id)) === null || _a === void 0 ? void 0 : _a.action) || (() => { });
164
+ return {
165
+ text: item.title || i18n(item.id),
166
+ icon: item.icon,
167
+ action: itemAction,
168
+ className: item.className,
169
+ };
170
+ });
171
+ items = items.filter(Boolean);
172
+ return (React.createElement(DropdownMenu, { items: items, switcher: React.createElement(Button, { view: view, size: size, pin: "brick-round" },
173
+ React.createElement(Icon, { data: DotsIcon, size: "16" })) }));
174
+ }
175
+ getControlItemPinStyle(index, itemsLength) {
176
+ const isOnlyOneItem = itemsLength === 1;
177
+ const isFirstItem = index === 0;
178
+ const isLastItem = index === itemsLength - 1;
179
+ if (isOnlyOneItem) {
180
+ return 'round-round';
181
+ }
182
+ if (isFirstItem) {
183
+ return 'round-brick';
184
+ }
185
+ if (isLastItem) {
186
+ return 'brick-round';
187
+ }
188
+ return 'brick-brick';
189
+ }
190
+ getCustomControlsWithWidgets() {
191
+ // Добавляем контрол удаления виджета по умолчанию
192
+ const deleteControl = {
193
+ title: i18n('label_delete'),
194
+ icon: CloseIcon,
195
+ iconSize: 12,
196
+ handler: this.onRemoveItem,
197
+ };
198
+ const { items = [] } = this.props;
199
+ const customOverlayControls = [...items, deleteControl];
200
+ return customOverlayControls.map((item, index, controlItems) => this.renderControlsItem(item, index, controlItems.length));
201
+ }
202
+ }
203
+ OverlayControls.contextType = DashKitContext;
204
+ OverlayControls.defaultProps = {
205
+ position: OverlayControlsPosition.TopRight,
206
+ view: 'normal',
207
+ size: 'm',
208
+ };
209
+ export default OverlayControls;
@@ -0,0 +1 @@
1
+ export * from './DashKit';
@@ -0,0 +1 @@
1
+ export * from './DashKit';
@@ -0,0 +1,7 @@
1
+ export declare const COPIED_WIDGET_STORE_KEY = "dashCopiedItem";
2
+ export declare const DEFAULT_NAMESPACE = "default";
3
+ export declare const MenuItems: {
4
+ readonly Copy: "copy";
5
+ readonly Delete: "delete";
6
+ readonly Settings: "settings";
7
+ };
@@ -0,0 +1,7 @@
1
+ export const COPIED_WIDGET_STORE_KEY = 'dashCopiedItem';
2
+ export const DEFAULT_NAMESPACE = 'default';
3
+ export const MenuItems = {
4
+ Copy: 'copy',
5
+ Delete: 'delete',
6
+ Settings: 'settings',
7
+ };
@@ -0,0 +1 @@
1
+ export * from './common';
@@ -0,0 +1 @@
1
+ export * from './common';
@@ -0,0 +1,2 @@
1
+ export const DashKitContext: React.Context<any>;
2
+ import React from "react";
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ const DashKitContext = React.createContext();
3
+ export { DashKitContext };
@@ -0,0 +1,66 @@
1
+ export function prepareItem(Component: any): {
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
+ };
@@ -0,0 +1,61 @@
1
+ import React from 'react';
2
+ import { DashKitContext } from '../context/DashKitContext';
3
+ import PropTypes from 'prop-types';
4
+ export function prepareItem(Component) {
5
+ var _a;
6
+ return _a = class PrepareItem extends React.Component {
7
+ constructor() {
8
+ super(...arguments);
9
+ this._onStateAndParamsChange = (stateAndParams) => {
10
+ this.context.onItemStateAndParamsChange(this.props.id, stateAndParams);
11
+ };
12
+ }
13
+ shouldComponentUpdate(nextProps) {
14
+ const { width, height, transform } = this.props;
15
+ const { width: widthNext, height: heightNext, transform: transformNext } = nextProps;
16
+ if (!nextProps.shouldItemUpdate &&
17
+ width === widthNext &&
18
+ height === heightNext &&
19
+ transform === transformNext) {
20
+ return false;
21
+ }
22
+ return true;
23
+ }
24
+ render() {
25
+ const { id, width, height, item, adjustWidgetLayout, layout } = this.props;
26
+ const { itemsState, itemsParams, registerManager, settings, context, editMode } = this.context;
27
+ const { type, data, defaults, namespace } = item;
28
+ const rendererProps = {
29
+ data,
30
+ editMode,
31
+ params: itemsParams[id],
32
+ state: itemsState[id],
33
+ onStateAndParamsChange: this._onStateAndParamsChange,
34
+ width,
35
+ height,
36
+ id,
37
+ defaults,
38
+ namespace,
39
+ settings,
40
+ context,
41
+ layout,
42
+ gridLayout: registerManager.gridLayout,
43
+ adjustWidgetLayout,
44
+ };
45
+ return (React.createElement(Component, { forwardedPluginRef: this.props.forwardedPluginRef, rendererProps: rendererProps, registerManager: registerManager, type: type }));
46
+ }
47
+ },
48
+ _a.propTypes = {
49
+ adjustWidgetLayout: PropTypes.func.isRequired,
50
+ layout: PropTypes.array,
51
+ id: PropTypes.string,
52
+ item: PropTypes.object,
53
+ shouldItemUpdate: PropTypes.bool,
54
+ width: PropTypes.number,
55
+ height: PropTypes.number,
56
+ transform: PropTypes.string,
57
+ forwardedPluginRef: PropTypes.any,
58
+ },
59
+ _a.contextType = DashKitContext,
60
+ _a;
61
+ }
@@ -0,0 +1,165 @@
1
+ export function withContext(Component: any): {
2
+ new (props: any): {
3
+ state: {
4
+ currentLayout: any;
5
+ };
6
+ originalLayouts: {};
7
+ adjustedLayouts: {};
8
+ _onChange({ config, itemsStateAndParams, }: {
9
+ config?: any;
10
+ itemsStateAndParams?: any;
11
+ }): void;
12
+ _onLayoutChange: (layout: any) => void;
13
+ _onItemRemove: (id: any) => void;
14
+ _onItemEdit: (configItem: any) => void;
15
+ _onItemStateAndParamsChange: (id: any, stateAndParams: any) => void;
16
+ _memorizeOriginalLayout: (widgetId: any, preAutoHeightLayout: any, postAutoHeightLayout: any) => void;
17
+ _revertToOriginalLayout: (widgetId: any) => void;
18
+ readonly _itemsParams: {
19
+ [x: string]: import("../shared").StringParams;
20
+ };
21
+ readonly _itemsState: Record<string, import("../shared").ItemState>;
22
+ _getItemsMeta: (pluginsRefs: any) => any;
23
+ _getLayout: () => any;
24
+ _reloadItems: (pluginsRefs: any, data: any) => void;
25
+ readonly _contextValue: {
26
+ getLayout: () => any;
27
+ config: any;
28
+ context: any;
29
+ overlayControls: any;
30
+ noOverlay: any;
31
+ defaultGlobalParams: any;
32
+ globalParams: any;
33
+ editMode: any;
34
+ settings: any;
35
+ itemsState: Record<string, import("../shared").ItemState>;
36
+ itemsParams: {
37
+ [x: string]: import("../shared").StringParams;
38
+ };
39
+ registerManager: any;
40
+ onItemStateAndParamsChange: (id: any, stateAndParams: any) => void;
41
+ removeItem: (id: any) => void;
42
+ editItem: (configItem: any) => void;
43
+ layoutChange: (layout: any) => void;
44
+ getItemsMeta: (pluginsRefs: any) => any;
45
+ reloadItems: (pluginsRefs: any, data: any) => void;
46
+ memorizeOriginalLayout: (widgetId: any, preAutoHeightLayout: any, postAutoHeightLayout: any) => void;
47
+ revertToOriginalLayout: (widgetId: any) => void;
48
+ forwardedMetaRef: any;
49
+ draggableHandleClassName: any;
50
+ };
51
+ render(): JSX.Element;
52
+ context: any;
53
+ setState<K extends string | number | symbol>(state: any, callback?: (() => void) | undefined): void;
54
+ forceUpdate(callback?: (() => void) | undefined): void;
55
+ readonly props: Readonly<any> & Readonly<{
56
+ children?: React.ReactNode;
57
+ }>;
58
+ refs: {
59
+ [key: string]: React.ReactInstance;
60
+ };
61
+ componentDidMount?(): void;
62
+ shouldComponentUpdate?(nextProps: Readonly<any>, nextState: Readonly<any>, nextContext: any): boolean;
63
+ componentWillUnmount?(): void;
64
+ componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
65
+ getSnapshotBeforeUpdate?(prevProps: Readonly<any>, prevState: Readonly<any>): any;
66
+ componentDidUpdate?(prevProps: Readonly<any>, prevState: Readonly<any>, snapshot?: any): void;
67
+ componentWillMount?(): void;
68
+ UNSAFE_componentWillMount?(): void;
69
+ componentWillReceiveProps?(nextProps: Readonly<any>, nextContext: any): void;
70
+ UNSAFE_componentWillReceiveProps?(nextProps: Readonly<any>, nextContext: any): void;
71
+ componentWillUpdate?(nextProps: Readonly<any>, nextState: Readonly<any>, nextContext: any): void;
72
+ UNSAFE_componentWillUpdate?(nextProps: Readonly<any>, nextState: Readonly<any>, nextContext: any): void;
73
+ };
74
+ new (props: any, context: any): {
75
+ state: {
76
+ currentLayout: any;
77
+ };
78
+ originalLayouts: {};
79
+ adjustedLayouts: {};
80
+ _onChange({ config, itemsStateAndParams, }: {
81
+ config?: any;
82
+ itemsStateAndParams?: any;
83
+ }): void;
84
+ _onLayoutChange: (layout: any) => void;
85
+ _onItemRemove: (id: any) => void;
86
+ _onItemEdit: (configItem: any) => void;
87
+ _onItemStateAndParamsChange: (id: any, stateAndParams: any) => void;
88
+ _memorizeOriginalLayout: (widgetId: any, preAutoHeightLayout: any, postAutoHeightLayout: any) => void;
89
+ _revertToOriginalLayout: (widgetId: any) => void;
90
+ readonly _itemsParams: {
91
+ [x: string]: import("../shared").StringParams;
92
+ };
93
+ readonly _itemsState: Record<string, import("../shared").ItemState>;
94
+ _getItemsMeta: (pluginsRefs: any) => any;
95
+ _getLayout: () => any;
96
+ _reloadItems: (pluginsRefs: any, data: any) => void;
97
+ readonly _contextValue: {
98
+ getLayout: () => any;
99
+ config: any;
100
+ context: any;
101
+ overlayControls: any;
102
+ noOverlay: any;
103
+ defaultGlobalParams: any;
104
+ globalParams: any;
105
+ editMode: any;
106
+ settings: any;
107
+ itemsState: Record<string, import("../shared").ItemState>;
108
+ itemsParams: {
109
+ [x: string]: import("../shared").StringParams;
110
+ };
111
+ registerManager: any;
112
+ onItemStateAndParamsChange: (id: any, stateAndParams: any) => void;
113
+ removeItem: (id: any) => void;
114
+ editItem: (configItem: any) => void;
115
+ layoutChange: (layout: any) => void;
116
+ getItemsMeta: (pluginsRefs: any) => any;
117
+ reloadItems: (pluginsRefs: any, data: any) => void;
118
+ memorizeOriginalLayout: (widgetId: any, preAutoHeightLayout: any, postAutoHeightLayout: any) => void;
119
+ revertToOriginalLayout: (widgetId: any) => void;
120
+ forwardedMetaRef: any;
121
+ draggableHandleClassName: any;
122
+ };
123
+ render(): JSX.Element;
124
+ context: any;
125
+ setState<K extends string | number | symbol>(state: any, callback?: (() => void) | undefined): void;
126
+ forceUpdate(callback?: (() => void) | undefined): void;
127
+ readonly props: Readonly<any> & Readonly<{
128
+ children?: React.ReactNode;
129
+ }>;
130
+ refs: {
131
+ [key: string]: React.ReactInstance;
132
+ };
133
+ componentDidMount?(): void;
134
+ shouldComponentUpdate?(nextProps: Readonly<any>, nextState: Readonly<any>, nextContext: any): boolean;
135
+ componentWillUnmount?(): void;
136
+ componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
137
+ getSnapshotBeforeUpdate?(prevProps: Readonly<any>, prevState: Readonly<any>): any;
138
+ componentDidUpdate?(prevProps: Readonly<any>, prevState: Readonly<any>, snapshot?: any): void;
139
+ componentWillMount?(): void;
140
+ UNSAFE_componentWillMount?(): void;
141
+ componentWillReceiveProps?(nextProps: Readonly<any>, nextContext: any): void;
142
+ UNSAFE_componentWillReceiveProps?(nextProps: Readonly<any>, nextContext: any): void;
143
+ componentWillUpdate?(nextProps: Readonly<any>, nextState: Readonly<any>, nextContext: any): void;
144
+ UNSAFE_componentWillUpdate?(nextProps: Readonly<any>, nextState: Readonly<any>, nextContext: any): void;
145
+ };
146
+ propTypes: {
147
+ editMode: PropTypes.Requireable<boolean>;
148
+ context: PropTypes.Requireable<object>;
149
+ overlayControls: PropTypes.Requireable<object>;
150
+ config: PropTypes.Requireable<object>;
151
+ onItemEdit: PropTypes.Requireable<(...args: any[]) => any>;
152
+ onChange: PropTypes.Requireable<(...args: any[]) => any>;
153
+ defaultGlobalParams: PropTypes.Requireable<object>;
154
+ globalParams: PropTypes.Requireable<object>;
155
+ itemsStateAndParams: PropTypes.Requireable<object>;
156
+ registerManager: PropTypes.Requireable<object>;
157
+ layout: PropTypes.Requireable<any[]>;
158
+ settings: PropTypes.Requireable<object>;
159
+ forwardedMetaRef: PropTypes.Requireable<object>;
160
+ noOverlay: PropTypes.Requireable<boolean>;
161
+ draggableHandleClassName: PropTypes.Requireable<string>;
162
+ _EXPERIMENTAL_preventDoubleCompact: PropTypes.Requireable<boolean>;
163
+ };
164
+ contextType?: React.Context<any> | undefined;
165
+ };