@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,32 @@
1
+ import { OverlayCustomControlItem } from '../components/OverlayControls/OverlayControls';
2
+ import { MenuItems } from '../constants';
3
+ export interface Settings {
4
+ gridLayout?: {
5
+ margin?: [number, number];
6
+ rowHeight?: number;
7
+ cols?: number;
8
+ containerPadding?: [number, number];
9
+ };
10
+ theme?: string;
11
+ isMobile?: boolean;
12
+ menu?: Array<MenuItem>;
13
+ }
14
+ export declare type MenuItem = typeof MenuItems[keyof typeof MenuItems] | OverlayCustomControlItem;
15
+ export interface SettingsProps {
16
+ autoupdateInterval: number;
17
+ silentLoading: boolean;
18
+ }
19
+ export interface ContextProps {
20
+ [key: string]: any;
21
+ }
22
+ export interface WidgetLayout {
23
+ i: string;
24
+ w: number;
25
+ h: number;
26
+ x: number;
27
+ y: number;
28
+ minW: number;
29
+ minH: number;
30
+ maxW?: number;
31
+ maxH?: number;
32
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,7 @@
1
+ import { ConfigItem, ConfigLayout } from '../shared';
2
+ export interface AddConfigItem extends Omit<ConfigItem, 'id' | 'namespace'> {
3
+ id?: null;
4
+ namespace?: string;
5
+ layout?: ConfigLayout;
6
+ }
7
+ export declare type SetConfigItem = ConfigItem | AddConfigItem;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,7 @@
1
+ declare module '*.svg' {
2
+ const content: SVGIconData;
3
+
4
+ export default content;
5
+ }
6
+
7
+ declare module '*.md';
@@ -0,0 +1,3 @@
1
+ export * from './common';
2
+ export * from './plugin';
3
+ export * from './config';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./common"), exports);
5
+ tslib_1.__exportStar(require("./plugin"), exports);
6
+ tslib_1.__exportStar(require("./config"), exports);
@@ -0,0 +1,39 @@
1
+ import React from 'react';
2
+ import { ContextProps, SettingsProps, WidgetLayout } from './common';
3
+ import { StringParams, ConfigItem, ItemState, ItemStateAndParams, PluginBase } from '../shared';
4
+ import { RegisterManagerGridLayout } from '../utils/register-manager';
5
+ export interface PluginWidgetProps {
6
+ id: string;
7
+ editMode: boolean;
8
+ params: StringParams;
9
+ state: ItemState;
10
+ onStateAndParamsChange: (stateAndParams: ItemStateAndParams) => void;
11
+ width: number;
12
+ height: number;
13
+ data: ConfigItem['data'];
14
+ defaults: ConfigItem['defaults'];
15
+ namespace: ConfigItem['namespace'];
16
+ settings: SettingsProps;
17
+ context: ContextProps;
18
+ layout: WidgetLayout[];
19
+ gridLayout: RegisterManagerGridLayout;
20
+ adjustWidgetLayout: (data: {
21
+ widgetId: string;
22
+ needSetDefault?: boolean;
23
+ adjustedWidgetLayout?: WidgetLayout;
24
+ }) => void;
25
+ }
26
+ export interface PluginDefaultLayout {
27
+ w?: number;
28
+ h?: number;
29
+ x?: number;
30
+ y?: number;
31
+ minW?: number;
32
+ maxW?: number;
33
+ minH?: number;
34
+ maxH?: number;
35
+ }
36
+ export interface Plugin<P extends PluginWidgetProps = any> extends PluginBase {
37
+ defaultLayout?: PluginDefaultLayout;
38
+ renderer: (props: P, forwardedRef: React.RefObject<any>) => React.ReactNode;
39
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ describe('test: mock', () => {
3
+ describe('mock', () => {
4
+ test('adds 1 + 2 to equal 3', () => {
5
+ expect(1 + 2).toBe(3);
6
+ });
7
+ });
8
+ });
@@ -0,0 +1,9 @@
1
+ export declare type Lang = 'ru' | 'en';
2
+ interface Config {
3
+ lang?: Lang;
4
+ }
5
+ declare type Subscriber = (config: Config) => void;
6
+ export declare const configure: (newConfig: Config) => void;
7
+ export declare const subscribeConfigure: (sub: Subscriber) => () => void;
8
+ export declare const getConfig: () => Config;
9
+ export {};
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getConfig = exports.subscribeConfigure = exports.configure = void 0;
4
+ let subs = [];
5
+ const config = {};
6
+ const configure = (newConfig) => {
7
+ Object.assign(config, newConfig);
8
+ subs.forEach((sub) => {
9
+ sub(config);
10
+ });
11
+ };
12
+ exports.configure = configure;
13
+ const subscribeConfigure = (sub) => {
14
+ subs.push(sub);
15
+ return () => {
16
+ subs = subs.filter((item) => item !== sub);
17
+ };
18
+ };
19
+ exports.subscribeConfigure = subscribeConfigure;
20
+ const getConfig = () => config;
21
+ exports.getConfig = getConfig;
@@ -0,0 +1,7 @@
1
+ import { Lang } from './configure';
2
+ /**
3
+ * Preferred method to set language.
4
+ * @param lang
5
+ * @return {void}
6
+ */
7
+ export declare const setLang: (lang: Lang) => void;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setLang = void 0;
4
+ const configure_1 = require("./configure");
5
+ /**
6
+ * Preferred method to set language.
7
+ * @param lang
8
+ * @return {void}
9
+ */
10
+ const setLang = (lang) => {
11
+ (0, configure_1.configure)({ lang: lang });
12
+ };
13
+ exports.setLang = setLang;
@@ -0,0 +1,3 @@
1
+ export * from './i18n';
2
+ export * from './register-manager';
3
+ export * from './update-manager';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./i18n"), exports);
5
+ tslib_1.__exportStar(require("./register-manager"), exports);
6
+ tslib_1.__exportStar(require("./update-manager"), exports);
@@ -0,0 +1,46 @@
1
+ import { Plugin, PluginDefaultLayout, Settings } from '../typings';
2
+ interface RegisterManagerDefaultLayout {
3
+ x: number;
4
+ y: number;
5
+ w: number;
6
+ h: number;
7
+ minW: number;
8
+ minH: number;
9
+ }
10
+ export declare type RegisterManagerPluginLayout = RegisterManagerDefaultLayout & PluginDefaultLayout;
11
+ export interface RegisterManagerPlugin extends Omit<Plugin, 'defaultLayout'> {
12
+ defaultLayout: RegisterManagerDefaultLayout & Plugin['defaultLayout'];
13
+ }
14
+ export declare type RegisterManagerGridLayout = {
15
+ margin: [number, number];
16
+ rowHeight: number;
17
+ cols: number;
18
+ containerPadding: [number, number];
19
+ } & Settings['gridLayout'];
20
+ export declare type RegisterManagerSettings = {
21
+ theme: string;
22
+ } & Settings;
23
+ export declare class RegisterManager {
24
+ private _items;
25
+ private _defaultLayout;
26
+ private _gridLayout;
27
+ private _settings;
28
+ registerPlugin(plugin: Plugin): void;
29
+ setSettings(settings?: Settings): void;
30
+ get settings(): RegisterManagerSettings;
31
+ get gridLayout(): {
32
+ margin: [number, number];
33
+ rowHeight: number;
34
+ cols: number;
35
+ containerPadding: [number, number];
36
+ } & {
37
+ margin?: [number, number] | undefined;
38
+ rowHeight?: number | undefined;
39
+ cols?: number | undefined;
40
+ containerPadding?: [number, number] | undefined;
41
+ };
42
+ getPlugins(): RegisterManagerPlugin[];
43
+ getItem(type: string): RegisterManagerPlugin;
44
+ check(type: string): boolean;
45
+ }
46
+ export {};
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RegisterManager = void 0;
4
+ const tslib_1 = require("tslib");
5
+ class RegisterManager {
6
+ constructor() {
7
+ this._items = {};
8
+ this._defaultLayout = {
9
+ x: 0,
10
+ y: Infinity,
11
+ w: Infinity,
12
+ h: 4,
13
+ minW: 4,
14
+ minH: 2,
15
+ };
16
+ this._gridLayout = {
17
+ rowHeight: 18,
18
+ cols: 36,
19
+ margin: [2, 2],
20
+ containerPadding: [0, 0],
21
+ };
22
+ this._settings = {
23
+ theme: 'default',
24
+ };
25
+ }
26
+ registerPlugin(plugin) {
27
+ const { type, defaultLayout = {} } = plugin, item = tslib_1.__rest(plugin, ["type", "defaultLayout"]);
28
+ if (type in this._items) {
29
+ throw new Error(`DashKit.registerPlugins: type ${type} уже был зарегистрирован`);
30
+ }
31
+ if (typeof plugin.renderer !== 'function') {
32
+ throw new Error('DashKit.registerPlugins: renderer должна быть функцией');
33
+ }
34
+ this._items[type] = Object.assign(Object.assign({}, item), { type, defaultLayout: Object.assign(Object.assign({}, this._defaultLayout), defaultLayout) });
35
+ }
36
+ setSettings(settings = {}) {
37
+ Object.assign(this._settings, settings);
38
+ if (settings.gridLayout) {
39
+ this._gridLayout = Object.assign(Object.assign({}, this._gridLayout), settings.gridLayout);
40
+ }
41
+ }
42
+ get settings() {
43
+ return this._settings;
44
+ }
45
+ get gridLayout() {
46
+ return this._gridLayout;
47
+ }
48
+ getPlugins() {
49
+ return Object.values(this._items);
50
+ }
51
+ getItem(type) {
52
+ return this._items[type];
53
+ }
54
+ check(type) {
55
+ return type in this._items;
56
+ }
57
+ }
58
+ exports.RegisterManager = RegisterManager;
@@ -0,0 +1,37 @@
1
+ import { Config, ConfigItem, ItemsStateAndParams, ItemStateAndParams } from '../shared';
2
+ import { AddConfigItem, WidgetLayout } from '../typings';
3
+ import { RegisterManagerPluginLayout } from './register-manager';
4
+ interface RemoveItemArg {
5
+ id: string;
6
+ config: Config;
7
+ itemsStateAndParams: ItemsStateAndParams;
8
+ }
9
+ interface ChangeStateAndParamsArg {
10
+ id: string;
11
+ config: Config;
12
+ itemsStateAndParams: ItemsStateAndParams;
13
+ stateAndParams: ItemStateAndParams;
14
+ }
15
+ export declare class UpdateManager {
16
+ static addItem({ item, namespace, layout, config, }: {
17
+ item: AddConfigItem;
18
+ namespace: string;
19
+ layout: RegisterManagerPluginLayout;
20
+ config: Config;
21
+ }): Config;
22
+ static editItem({ item, namespace, config, }: {
23
+ item: ConfigItem;
24
+ namespace: string;
25
+ config: Config;
26
+ }): Config;
27
+ static removeItem({ id, config, itemsStateAndParams }: RemoveItemArg): {
28
+ config: Config;
29
+ itemsStateAndParams: ItemsStateAndParams;
30
+ };
31
+ static updateLayout({ layout, config }: {
32
+ layout: WidgetLayout[];
33
+ config: Config;
34
+ }): Config;
35
+ static changeStateAndParams({ id: initiatorId, config, stateAndParams, itemsStateAndParams, }: ChangeStateAndParamsArg): ItemsStateAndParams;
36
+ }
37
+ export {};
@@ -0,0 +1,274 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UpdateManager = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const immutability_helper_1 = tslib_1.__importStar(require("immutability-helper"));
6
+ const hashids_1 = tslib_1.__importDefault(require("hashids"));
7
+ const omit_1 = tslib_1.__importDefault(require("lodash/omit"));
8
+ const pick_1 = tslib_1.__importDefault(require("lodash/pick"));
9
+ const shared_1 = require("../shared");
10
+ const constants_1 = require("../constants");
11
+ (0, immutability_helper_1.extend)('$auto', (value, object) => (object ? (0, immutability_helper_1.default)(object, value) : (0, immutability_helper_1.default)({}, value)));
12
+ function removeItemVersion1({ id, config, itemsStateAndParams }) {
13
+ const itemIndex = config.items.findIndex((item) => item.id === id);
14
+ const removeItem = config.items[itemIndex];
15
+ const { defaults = {} } = removeItem;
16
+ const itemParamsKeys = Object.keys(defaults);
17
+ const getParams = (excludeId, items) => {
18
+ return Object.keys(items.reduce((acc, item) => {
19
+ if (item.id !== excludeId) {
20
+ Object.assign(acc, item.defaults);
21
+ }
22
+ return acc;
23
+ }, {}));
24
+ };
25
+ const allParamsKeys = getParams(id, config.items);
26
+ const allNamespaceParamsKeys = getParams(id, config.items.filter((item) => item.namespace === removeItem.namespace));
27
+ const uniqParamsKeys = itemParamsKeys.filter((key) => !allParamsKeys.includes(key));
28
+ const uniqNamespaceParamsKeys = itemParamsKeys.filter((key) => !allNamespaceParamsKeys.includes(key));
29
+ const withoutUniqItemsParams = Object.keys(itemsStateAndParams)
30
+ .filter((key) => key !== id)
31
+ .reduce((acc, key) => {
32
+ const { params } = itemsStateAndParams[key];
33
+ // в state из урла могут быть элементы, которых нет в config.items
34
+ const item = config.items.find((configItem) => configItem.id === key);
35
+ if (params && item) {
36
+ const { namespace } = item;
37
+ const currentUniqParamsKeys = namespace === removeItem.namespace ? uniqNamespaceParamsKeys : uniqParamsKeys;
38
+ const resultParams = (0, omit_1.default)(params, currentUniqParamsKeys);
39
+ if (Object.keys(params).length !== Object.keys(resultParams).length) {
40
+ acc[key] = {
41
+ params: {
42
+ $set: resultParams,
43
+ },
44
+ };
45
+ }
46
+ }
47
+ return acc;
48
+ }, {});
49
+ const newItemsStateAndParams = (0, immutability_helper_1.default)(itemsStateAndParams, Object.assign({ $unset: [id] }, withoutUniqItemsParams));
50
+ const connections = config.connections.filter(({ from, to }) => id !== from && id !== to);
51
+ const newConfig = (0, immutability_helper_1.default)(config, {
52
+ items: {
53
+ $splice: [[itemIndex, 1]],
54
+ },
55
+ layout: {
56
+ $splice: [[itemIndex, 1]],
57
+ },
58
+ connections: {
59
+ $set: connections,
60
+ },
61
+ });
62
+ return {
63
+ config: newConfig,
64
+ itemsStateAndParams: newItemsStateAndParams,
65
+ };
66
+ }
67
+ function getAllowableChangedParams(item, stateAndParams, itemsStateAndParams) {
68
+ var _a;
69
+ let allowedParams = {};
70
+ if ((0, shared_1.isItemWithTabs)(item)) {
71
+ let tab;
72
+ if ('state' in stateAndParams && ((_a = stateAndParams.state) === null || _a === void 0 ? void 0 : _a.tabId)) {
73
+ tab = item.data.tabs.find(({ id }) => { var _a; return id === ((_a = stateAndParams.state) === null || _a === void 0 ? void 0 : _a.tabId); });
74
+ }
75
+ if (!tab) {
76
+ const tabId = (0, shared_1.resolveItemInnerId)({ item, itemsStateAndParams });
77
+ tab = item.data.tabs.find(({ id }) => id === tabId);
78
+ }
79
+ allowedParams = (0, pick_1.default)(stateAndParams.params, Object.keys((tab === null || tab === void 0 ? void 0 : tab.params) || {}));
80
+ }
81
+ else {
82
+ allowedParams = (0, pick_1.default)(stateAndParams.params, Object.keys(item.defaults || {}));
83
+ }
84
+ if (Object.keys(allowedParams).length !== Object.keys(stateAndParams.params || {}).length) {
85
+ console.warn('Параметры, которых нет в defaults, будут проигнорированы!');
86
+ }
87
+ return allowedParams;
88
+ }
89
+ function changeStateAndParamsVersion1({ id: initiatorId, config, stateAndParams, itemsStateAndParams, }) {
90
+ const hasState = 'state' in stateAndParams;
91
+ const { aliases } = config;
92
+ if ('params' in stateAndParams) {
93
+ const initiatorItem = config.items.find(({ id }) => id === initiatorId);
94
+ const allowableParams = getAllowableChangedParams(initiatorItem, stateAndParams, itemsStateAndParams);
95
+ const allowableParamsWithAliases = (0, shared_1.mergeParamsWithAliases)({
96
+ aliases,
97
+ namespace: initiatorItem.namespace,
98
+ params: allowableParams,
99
+ });
100
+ const ignoresInitiatorIds = config.connections
101
+ .filter(({ to }) => to === initiatorId)
102
+ .map(({ from }) => from);
103
+ const updateIds = config.items
104
+ .filter((item) => item.namespace === initiatorItem.namespace &&
105
+ !ignoresInitiatorIds.includes(item.id) &&
106
+ (!(0, shared_1.isItemWithTabs)(item) ||
107
+ ((0, shared_1.isItemWithTabs)(item) &&
108
+ item.data.tabs.every(({ id }) => !ignoresInitiatorIds.includes(id)))))
109
+ .map(({ id }) => id);
110
+ return (0, immutability_helper_1.default)(itemsStateAndParams, updateIds.reduce((acc, currentId) => {
111
+ var _a;
112
+ acc[currentId] = {
113
+ $auto: Object.assign({ params: {
114
+ [((_a = itemsStateAndParams[currentId]) === null || _a === void 0 ? void 0 : _a.params)
115
+ ? '$merge'
116
+ : '$set']: allowableParamsWithAliases,
117
+ } }, (hasState && currentId === initiatorId
118
+ ? { state: { $set: stateAndParams.state } }
119
+ : {})),
120
+ };
121
+ return acc;
122
+ }, {}));
123
+ }
124
+ else if (hasState) {
125
+ return (0, immutability_helper_1.default)(itemsStateAndParams, {
126
+ [initiatorId]: {
127
+ $auto: {
128
+ state: { $set: stateAndParams.state },
129
+ },
130
+ },
131
+ });
132
+ }
133
+ else {
134
+ return itemsStateAndParams;
135
+ }
136
+ }
137
+ class UpdateManager {
138
+ // TODO: проверять, что id нового элемента уникальный
139
+ static addItem({ item, namespace = constants_1.DEFAULT_NAMESPACE, layout, config, }) {
140
+ const layoutY = Math.max(0, ...config.layout.map(({ h, y }) => h + y));
141
+ const saveDefaultLayout = (0, pick_1.default)(layout, ['h', 'w', 'x', 'y']);
142
+ const hashids = new hashids_1.default(config.salt);
143
+ let counter = config.counter;
144
+ const resultData = (0, shared_1.isItemWithTabs)(item)
145
+ ? Object.assign(Object.assign({}, item.data), { tabs: item.data.tabs.map((tab) => tab.id ? tab : Object.assign(Object.assign({}, tab), { id: hashids.encode(++counter) })) }) : item.data;
146
+ const newItem = Object.assign(Object.assign({}, item), { id: hashids.encode(++counter), data: resultData, namespace });
147
+ return (0, immutability_helper_1.default)(config, {
148
+ items: { $push: [newItem] },
149
+ layout: { $push: [Object.assign(Object.assign({}, saveDefaultLayout), { y: layoutY, i: newItem.id })] },
150
+ counter: { $set: counter },
151
+ });
152
+ }
153
+ static editItem({ item, namespace = constants_1.DEFAULT_NAMESPACE, config, }) {
154
+ const hashids = new hashids_1.default(config.salt);
155
+ let counter = config.counter;
156
+ const itemIndex = config.items.findIndex(({ id }) => item.id === id);
157
+ const resultData = (0, shared_1.isItemWithTabs)(item)
158
+ ? Object.assign(Object.assign({}, item.data), { tabs: item.data.tabs.map((tab) => tab.id ? tab : Object.assign(Object.assign({}, tab), { id: hashids.encode(++counter) })) }) : item.data;
159
+ return (0, immutability_helper_1.default)(config, {
160
+ items: { [itemIndex]: { $set: Object.assign(Object.assign({}, item), { data: resultData, namespace }) } },
161
+ counter: { $set: counter },
162
+ });
163
+ }
164
+ static removeItem({ id, config, itemsStateAndParams = {} }) {
165
+ if ((0, shared_1.getCurrentVersion)(itemsStateAndParams) === 1) {
166
+ return removeItemVersion1({ id, config, itemsStateAndParams });
167
+ }
168
+ const itemIndex = config.items.findIndex((item) => item.id === id);
169
+ const item = config.items[itemIndex];
170
+ const itemIds = (0, shared_1.isItemWithTabs)(item)
171
+ ? [id].concat(item.data.tabs.map((tab) => tab.id))
172
+ : [id];
173
+ const connections = config.connections.filter(({ from, to }) => !itemIds.includes(from) && !itemIds.includes(to));
174
+ return {
175
+ config: (0, immutability_helper_1.default)(config, {
176
+ items: {
177
+ $splice: [[itemIndex, 1]],
178
+ },
179
+ layout: {
180
+ $splice: [[itemIndex, 1]],
181
+ },
182
+ connections: {
183
+ $set: connections,
184
+ },
185
+ }),
186
+ itemsStateAndParams: (0, immutability_helper_1.default)(itemsStateAndParams, {
187
+ $unset: [id],
188
+ [shared_1.META_KEY]: {
189
+ $set: (0, shared_1.deleteFromQueue)({
190
+ id,
191
+ itemsStateAndParams,
192
+ config,
193
+ }),
194
+ },
195
+ }),
196
+ };
197
+ }
198
+ static updateLayout({ layout, config }) {
199
+ return (0, immutability_helper_1.default)(config, {
200
+ layout: {
201
+ $set: layout.map(({ x, y, w, h, i }) => ({ x, y, w, h, i })),
202
+ },
203
+ });
204
+ }
205
+ static changeStateAndParams({ id: initiatorId, config, stateAndParams, itemsStateAndParams, }) {
206
+ var _a, _b;
207
+ if ((0, shared_1.getCurrentVersion)(itemsStateAndParams) === 1) {
208
+ return changeStateAndParamsVersion1({
209
+ id: initiatorId,
210
+ config,
211
+ stateAndParams,
212
+ itemsStateAndParams,
213
+ });
214
+ }
215
+ const hasState = 'state' in stateAndParams;
216
+ const { items } = config;
217
+ const itemsIds = items.map(({ id: itemId }) => itemId);
218
+ const itemsStateAndParamsIds = Object.keys((0, omit_1.default)(itemsStateAndParams, [shared_1.META_KEY]));
219
+ const unusedIds = itemsStateAndParamsIds.filter((id) => !itemsIds.includes(id));
220
+ const initiatorItem = items.find(({ id }) => id === initiatorId);
221
+ const newTabId = (_a = stateAndParams.state) === null || _a === void 0 ? void 0 : _a.tabId;
222
+ const isTabSwitched = (0, shared_1.isItemWithTabs)(initiatorItem) && Boolean(newTabId);
223
+ const currentMeta = (0, shared_1.getItemsStateAndParamsMeta)(itemsStateAndParams);
224
+ if ('params' in stateAndParams) {
225
+ const allowableParams = getAllowableChangedParams(initiatorItem, stateAndParams, itemsStateAndParams);
226
+ const tabId = (0, shared_1.isItemWithTabs)(initiatorItem)
227
+ ? newTabId || (0, shared_1.resolveItemInnerId)({ item: initiatorItem, itemsStateAndParams })
228
+ : undefined;
229
+ const meta = (0, shared_1.addToQueue)({ id: initiatorId, tabId, config, itemsStateAndParams });
230
+ let commandUpdateParams = ((_b = itemsStateAndParams[initiatorId]) === null || _b === void 0 ? void 0 : _b.params)
231
+ ? '$merge'
232
+ : '$set';
233
+ if (isTabSwitched) {
234
+ commandUpdateParams = '$set';
235
+ }
236
+ return (0, immutability_helper_1.default)(itemsStateAndParams, {
237
+ $unset: unusedIds,
238
+ [initiatorId]: {
239
+ $auto: Object.assign({ params: {
240
+ [commandUpdateParams]: allowableParams,
241
+ } }, (hasState ? { state: { $set: stateAndParams.state } } : {})),
242
+ },
243
+ [shared_1.META_KEY]: { $set: meta },
244
+ });
245
+ }
246
+ else if (hasState) {
247
+ let metaSpec = {};
248
+ if (currentMeta && isTabSwitched) {
249
+ metaSpec = {
250
+ [shared_1.META_KEY]: {
251
+ $set: (0, shared_1.deleteFromQueue)({
252
+ id: initiatorId,
253
+ itemsStateAndParams,
254
+ config,
255
+ }),
256
+ },
257
+ };
258
+ }
259
+ return (0, immutability_helper_1.default)(itemsStateAndParams, Object.assign({ $unset: unusedIds, [initiatorId]: {
260
+ $auto: Object.assign({ state: { $set: stateAndParams.state } }, (isTabSwitched ? { $unset: ['params'] } : {})),
261
+ } }, (currentMeta
262
+ ? metaSpec
263
+ : { [shared_1.META_KEY]: { $set: (0, shared_1.getInitialItemsStateAndParamsMeta)() } })));
264
+ }
265
+ else {
266
+ return (0, immutability_helper_1.default)(itemsStateAndParams, Object.assign({ $unset: unusedIds }, (currentMeta
267
+ ? {}
268
+ : {
269
+ [shared_1.META_KEY]: { $set: (0, shared_1.getInitialItemsStateAndParamsMeta)() },
270
+ })));
271
+ }
272
+ }
273
+ }
274
+ exports.UpdateManager = UpdateManager;
@@ -0,0 +1,50 @@
1
+ import React from 'react';
2
+ import GridLayout from '../GridLayout/GridLayout';
3
+ import { SetConfigItem, Settings, SettingsProps, ContextProps, Plugin } from '../../typings';
4
+ import { GlobalParams, Config, ConfigItem, ItemsStateAndParams } from '../../shared';
5
+ import { OverlayControlItem } from '../OverlayControls/OverlayControls';
6
+ interface DashKitGeneralProps {
7
+ config: Config;
8
+ editMode: boolean;
9
+ }
10
+ interface DashKitDefaultProps {
11
+ onItemEdit: (item: ConfigItem) => void;
12
+ onChange: (data: {
13
+ config: Config;
14
+ itemsStateAndParams: ItemsStateAndParams;
15
+ }) => void;
16
+ defaultGlobalParams: GlobalParams;
17
+ globalParams: GlobalParams;
18
+ itemsStateAndParams: ItemsStateAndParams;
19
+ settings: SettingsProps;
20
+ context: ContextProps;
21
+ overlayControls?: Record<string, OverlayControlItem[]>;
22
+ noOverlay?: boolean;
23
+ draggableHandleClassName?: string;
24
+ _EXPERIMENTAL_preventDoubleCompact?: boolean;
25
+ }
26
+ export interface DashKitProps extends DashKitGeneralProps, Partial<DashKitDefaultProps> {
27
+ }
28
+ declare type DashKitInnerProps = DashKitGeneralProps & DashKitDefaultProps;
29
+ export declare class DashKit extends React.PureComponent<DashKitInnerProps> {
30
+ static defaultProps: DashKitDefaultProps;
31
+ static registerPlugins(...plugins: Plugin[]): void;
32
+ static setSettings(settings: Settings): void;
33
+ static setItem({ item: setItem, namespace, config, }: {
34
+ item: SetConfigItem;
35
+ namespace?: string;
36
+ config: Config;
37
+ }): Config;
38
+ static removeItem({ id, config, itemsStateAndParams, }: {
39
+ id: string;
40
+ config: Config;
41
+ itemsStateAndParams: ItemsStateAndParams;
42
+ }): {
43
+ config: Config;
44
+ itemsStateAndParams: ItemsStateAndParams;
45
+ };
46
+ metaRef: React.RefObject<GridLayout>;
47
+ render(): JSX.Element;
48
+ getItemsMeta(): any;
49
+ }
50
+ export {};