@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.
- package/CHANGELOG.md +58 -0
- package/LICENSE +21 -0
- package/README.md +364 -0
- package/build/cjs/components/DashKit/DashKit.d.ts +50 -0
- package/build/cjs/components/DashKit/DashKit.js +70 -0
- package/build/cjs/components/DashKit/index.d.ts +1 -0
- package/build/cjs/components/DashKit/index.js +4 -0
- package/build/cjs/components/DashKitView/DashKitView.css +4 -0
- package/build/cjs/components/DashKitView/DashKitView.d.ts +3 -0
- package/build/cjs/components/DashKitView/DashKitView.js +23 -0
- package/build/cjs/components/GridItem/GridItem.css +83 -0
- package/build/cjs/components/GridItem/GridItem.d.ts +3 -0
- package/build/cjs/components/GridItem/GridItem.js +70 -0
- package/build/cjs/components/GridLayout/GridLayout.d.ts +25 -0
- package/build/cjs/components/GridLayout/GridLayout.js +89 -0
- package/build/cjs/components/Item/Item.css +19 -0
- package/build/cjs/components/Item/Item.d.ts +67 -0
- package/build/cjs/components/Item/Item.js +23 -0
- package/build/cjs/components/MobileLayout/MobileLayout.css +10 -0
- package/build/cjs/components/MobileLayout/MobileLayout.d.ts +16 -0
- package/build/cjs/components/MobileLayout/MobileLayout.js +54 -0
- package/build/cjs/components/MobileLayout/helpers.d.ts +3 -0
- package/build/cjs/components/MobileLayout/helpers.js +32 -0
- package/build/cjs/components/OverlayControls/OverlayControls.css +28 -0
- package/build/cjs/components/OverlayControls/OverlayControls.d.ts +54 -0
- package/build/cjs/components/OverlayControls/OverlayControls.js +212 -0
- package/build/cjs/components/index.d.ts +1 -0
- package/build/cjs/components/index.js +4 -0
- package/build/cjs/constants/common.d.ts +7 -0
- package/build/cjs/constants/common.js +10 -0
- package/build/cjs/constants/index.d.ts +1 -0
- package/build/cjs/constants/index.js +4 -0
- package/build/cjs/context/DashKitContext.d.ts +2 -0
- package/build/cjs/context/DashKitContext.js +7 -0
- package/build/cjs/hocs/prepareItem.d.ts +66 -0
- package/build/cjs/hocs/prepareItem.js +66 -0
- package/build/cjs/hocs/withContext.d.ts +165 -0
- package/build/cjs/hocs/withContext.js +203 -0
- package/build/cjs/hooks/useCalcLayout.d.ts +13 -0
- package/build/cjs/hooks/useCalcLayout.js +31 -0
- package/build/cjs/i18n/en.json +8 -0
- package/build/cjs/i18n/index.d.ts +4 -0
- package/build/cjs/i18n/index.js +19 -0
- package/build/cjs/i18n/ru.json +8 -0
- package/build/cjs/icons/CloseIcon.d.ts +2 -0
- package/build/cjs/icons/CloseIcon.js +10 -0
- package/build/cjs/icons/CogIcon.d.ts +2 -0
- package/build/cjs/icons/CogIcon.js +10 -0
- package/build/cjs/icons/CopyIcon.d.ts +2 -0
- package/build/cjs/icons/CopyIcon.js +10 -0
- package/build/cjs/icons/DeleteIcon.d.ts +2 -0
- package/build/cjs/icons/DeleteIcon.js +12 -0
- package/build/cjs/icons/DotsIcon.d.ts +2 -0
- package/build/cjs/icons/DotsIcon.js +10 -0
- package/build/cjs/icons/TickIcon.d.ts +2 -0
- package/build/cjs/icons/TickIcon.js +10 -0
- package/build/cjs/icons/WarningIcon.d.ts +2 -0
- package/build/cjs/icons/WarningIcon.js +10 -0
- package/build/cjs/index.d.ts +5 -0
- package/build/cjs/index.js +8 -0
- package/build/cjs/plugins/Text/Text.css +34 -0
- package/build/cjs/plugins/Text/Text.d.ts +52 -0
- package/build/cjs/plugins/Text/Text.js +119 -0
- package/build/cjs/plugins/Title/Title.css +24 -0
- package/build/cjs/plugins/Title/Title.d.ts +14 -0
- package/build/cjs/plugins/Title/Title.js +25 -0
- package/build/cjs/shared/constants/common.d.ts +2 -0
- package/build/cjs/shared/constants/common.js +5 -0
- package/build/cjs/shared/constants/index.d.ts +1 -0
- package/build/cjs/shared/constants/index.js +4 -0
- package/build/cjs/shared/index.d.ts +4 -0
- package/build/cjs/shared/index.js +7 -0
- package/build/cjs/shared/modules/__tests__/helpers.test.d.ts +1 -0
- package/build/cjs/shared/modules/__tests__/helpers.test.js +217 -0
- package/build/cjs/shared/modules/helpers.d.ts +42 -0
- package/build/cjs/shared/modules/helpers.js +172 -0
- package/build/cjs/shared/modules/index.d.ts +2 -0
- package/build/cjs/shared/modules/index.js +5 -0
- package/build/cjs/shared/modules/state-and-params.d.ts +16 -0
- package/build/cjs/shared/modules/state-and-params.js +94 -0
- package/build/cjs/shared/types/common.d.ts +5 -0
- package/build/cjs/shared/types/common.js +2 -0
- package/build/cjs/shared/types/config.d.ts +49 -0
- package/build/cjs/shared/types/config.js +2 -0
- package/build/cjs/shared/types/index.d.ts +4 -0
- package/build/cjs/shared/types/index.js +7 -0
- package/build/cjs/shared/types/plugin.d.ts +8 -0
- package/build/cjs/shared/types/plugin.js +2 -0
- package/build/cjs/shared/types/state-and-params.d.ts +22 -0
- package/build/cjs/shared/types/state-and-params.js +3 -0
- package/build/cjs/shared/units/__tests__/state-and-params.test.d.ts +241 -0
- package/build/cjs/shared/units/__tests__/state-and-params.test.js +299 -0
- package/build/cjs/shared/units/datalens/index.d.ts +5 -0
- package/build/cjs/shared/units/datalens/index.js +25 -0
- package/build/cjs/shared/units/index.d.ts +1 -0
- package/build/cjs/shared/units/index.js +4 -0
- package/build/cjs/typings/common.d.ts +32 -0
- package/build/cjs/typings/common.js +2 -0
- package/build/cjs/typings/config.d.ts +7 -0
- package/build/cjs/typings/config.js +2 -0
- package/build/cjs/typings/global.d.ts +7 -0
- package/build/cjs/typings/index.d.ts +3 -0
- package/build/cjs/typings/index.js +6 -0
- package/build/cjs/typings/plugin.d.ts +39 -0
- package/build/cjs/typings/plugin.js +2 -0
- package/build/cjs/utils/__tests__/mock.test.d.ts +1 -0
- package/build/cjs/utils/__tests__/mock.test.js +8 -0
- package/build/cjs/utils/configure.d.ts +9 -0
- package/build/cjs/utils/configure.js +21 -0
- package/build/cjs/utils/i18n.d.ts +7 -0
- package/build/cjs/utils/i18n.js +13 -0
- package/build/cjs/utils/index.d.ts +3 -0
- package/build/cjs/utils/index.js +6 -0
- package/build/cjs/utils/register-manager.d.ts +46 -0
- package/build/cjs/utils/register-manager.js +58 -0
- package/build/cjs/utils/update-manager.d.ts +37 -0
- package/build/cjs/utils/update-manager.js +274 -0
- package/build/esm/components/DashKit/DashKit.d.ts +50 -0
- package/build/esm/components/DashKit/DashKit.js +65 -0
- package/build/esm/components/DashKit/index.d.ts +1 -0
- package/build/esm/components/DashKit/index.js +1 -0
- package/build/esm/components/DashKitView/DashKitView.css +4 -0
- package/build/esm/components/DashKitView/DashKitView.d.ts +3 -0
- package/build/esm/components/DashKitView/DashKitView.js +21 -0
- package/build/esm/components/GridItem/GridItem.css +83 -0
- package/build/esm/components/GridItem/GridItem.d.ts +3 -0
- package/build/esm/components/GridItem/GridItem.js +68 -0
- package/build/esm/components/GridLayout/GridLayout.d.ts +25 -0
- package/build/esm/components/GridLayout/GridLayout.js +85 -0
- package/build/esm/components/Item/Item.css +19 -0
- package/build/esm/components/Item/Item.d.ts +67 -0
- package/build/esm/components/Item/Item.js +21 -0
- package/build/esm/components/MobileLayout/MobileLayout.css +10 -0
- package/build/esm/components/MobileLayout/MobileLayout.d.ts +16 -0
- package/build/esm/components/MobileLayout/MobileLayout.js +51 -0
- package/build/esm/components/MobileLayout/helpers.d.ts +3 -0
- package/build/esm/components/MobileLayout/helpers.js +28 -0
- package/build/esm/components/OverlayControls/OverlayControls.css +28 -0
- package/build/esm/components/OverlayControls/OverlayControls.d.ts +55 -0
- package/build/esm/components/OverlayControls/OverlayControls.js +209 -0
- package/build/esm/components/index.d.ts +1 -0
- package/build/esm/components/index.js +1 -0
- package/build/esm/constants/common.d.ts +7 -0
- package/build/esm/constants/common.js +7 -0
- package/build/esm/constants/index.d.ts +1 -0
- package/build/esm/constants/index.js +1 -0
- package/build/esm/context/DashKitContext.d.ts +2 -0
- package/build/esm/context/DashKitContext.js +3 -0
- package/build/esm/hocs/prepareItem.d.ts +66 -0
- package/build/esm/hocs/prepareItem.js +61 -0
- package/build/esm/hocs/withContext.d.ts +165 -0
- package/build/esm/hocs/withContext.js +198 -0
- package/build/esm/hooks/useCalcLayout.d.ts +13 -0
- package/build/esm/hooks/useCalcLayout.js +26 -0
- package/build/esm/i18n/en.json +8 -0
- package/build/esm/i18n/index.d.ts +4 -0
- package/build/esm/i18n/index.js +15 -0
- package/build/esm/i18n/ru.json +8 -0
- package/build/esm/icons/CloseIcon.d.ts +2 -0
- package/build/esm/icons/CloseIcon.js +5 -0
- package/build/esm/icons/CogIcon.d.ts +2 -0
- package/build/esm/icons/CogIcon.js +5 -0
- package/build/esm/icons/CopyIcon.d.ts +2 -0
- package/build/esm/icons/CopyIcon.js +5 -0
- package/build/esm/icons/DeleteIcon.d.ts +2 -0
- package/build/esm/icons/DeleteIcon.js +7 -0
- package/build/esm/icons/DotsIcon.d.ts +2 -0
- package/build/esm/icons/DotsIcon.js +5 -0
- package/build/esm/icons/TickIcon.d.ts +2 -0
- package/build/esm/icons/TickIcon.js +5 -0
- package/build/esm/icons/WarningIcon.d.ts +2 -0
- package/build/esm/icons/WarningIcon.js +5 -0
- package/build/esm/index.d.ts +5 -0
- package/build/esm/index.js +5 -0
- package/build/esm/plugins/Text/Text.css +34 -0
- package/build/esm/plugins/Text/Text.d.ts +53 -0
- package/build/esm/plugins/Text/Text.js +115 -0
- package/build/esm/plugins/Title/Title.css +24 -0
- package/build/esm/plugins/Title/Title.d.ts +15 -0
- package/build/esm/plugins/Title/Title.js +21 -0
- package/build/esm/shared/constants/common.d.ts +2 -0
- package/build/esm/shared/constants/common.js +2 -0
- package/build/esm/shared/constants/index.d.ts +1 -0
- package/build/esm/shared/constants/index.js +1 -0
- package/build/esm/shared/index.d.ts +4 -0
- package/build/esm/shared/index.js +4 -0
- package/build/esm/shared/modules/__tests__/helpers.test.d.ts +1 -0
- package/build/esm/shared/modules/__tests__/helpers.test.js +215 -0
- package/build/esm/shared/modules/helpers.d.ts +42 -0
- package/build/esm/shared/modules/helpers.js +157 -0
- package/build/esm/shared/modules/index.d.ts +2 -0
- package/build/esm/shared/modules/index.js +2 -0
- package/build/esm/shared/modules/state-and-params.d.ts +16 -0
- package/build/esm/shared/modules/state-and-params.js +87 -0
- package/build/esm/shared/types/common.d.ts +5 -0
- package/build/esm/shared/types/common.js +1 -0
- package/build/esm/shared/types/config.d.ts +49 -0
- package/build/esm/shared/types/config.js +1 -0
- package/build/esm/shared/types/index.d.ts +4 -0
- package/build/esm/shared/types/index.js +4 -0
- package/build/esm/shared/types/plugin.d.ts +8 -0
- package/build/esm/shared/types/plugin.js +1 -0
- package/build/esm/shared/types/state-and-params.d.ts +22 -0
- package/build/esm/shared/types/state-and-params.js +1 -0
- package/build/esm/shared/units/__tests__/state-and-params.test.d.ts +241 -0
- package/build/esm/shared/units/__tests__/state-and-params.test.js +295 -0
- package/build/esm/shared/units/datalens/index.d.ts +5 -0
- package/build/esm/shared/units/datalens/index.js +20 -0
- package/build/esm/shared/units/index.d.ts +1 -0
- package/build/esm/shared/units/index.js +1 -0
- package/build/esm/typings/common.d.ts +32 -0
- package/build/esm/typings/common.js +1 -0
- package/build/esm/typings/config.d.ts +7 -0
- package/build/esm/typings/config.js +1 -0
- package/build/esm/typings/global.d.ts +7 -0
- package/build/esm/typings/index.d.ts +3 -0
- package/build/esm/typings/index.js +3 -0
- package/build/esm/typings/plugin.d.ts +39 -0
- package/build/esm/typings/plugin.js +1 -0
- package/build/esm/utils/__tests__/mock.test.d.ts +1 -0
- package/build/esm/utils/__tests__/mock.test.js +8 -0
- package/build/esm/utils/configure.d.ts +9 -0
- package/build/esm/utils/configure.js +15 -0
- package/build/esm/utils/i18n.d.ts +7 -0
- package/build/esm/utils/i18n.js +9 -0
- package/build/esm/utils/index.d.ts +3 -0
- package/build/esm/utils/index.js +3 -0
- package/build/esm/utils/register-manager.d.ts +46 -0
- package/build/esm/utils/register-manager.js +54 -0
- package/build/esm/utils/update-manager.d.ts +37 -0
- package/build/esm/utils/update-manager.js +269 -0
- package/package.json +107 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.withContext = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const react_1 = tslib_1.__importDefault(require("react"));
|
|
6
|
+
const DashKitContext_1 = require("../context/DashKitContext");
|
|
7
|
+
const utils_1 = require("../utils");
|
|
8
|
+
const shared_1 = require("../shared");
|
|
9
|
+
const prop_types_1 = tslib_1.__importDefault(require("prop-types"));
|
|
10
|
+
const isEqual_1 = tslib_1.__importDefault(require("lodash/isEqual"));
|
|
11
|
+
const react_grid_layout_1 = require("react-grid-layout");
|
|
12
|
+
const LAYOUT_COMPACTING_TYPE = 'vertical';
|
|
13
|
+
function withContext(Component) {
|
|
14
|
+
var _a;
|
|
15
|
+
return _a = class DashKitWithContext extends react_1.default.Component {
|
|
16
|
+
constructor() {
|
|
17
|
+
super(...arguments);
|
|
18
|
+
// так как мы не хотим хранить параметры виджета с активированной автовысотой в сторе и на сервере, актуальный
|
|
19
|
+
// (видимый юзером в конкретный момент времени) лэйаут (массив объектов с данными о ширине, высоте,
|
|
20
|
+
// расположении конкретного виджета на сетке) будет храниться в стейте, но, для того, чтобы в стор попадал
|
|
21
|
+
// лэйаут без учета вижетов с активированной автовысотой, в момент "подстройки" высоты виджета значение h
|
|
22
|
+
// (высота) из конфига будет запоминаться в originalLayouts, новое значение высоты в adjustedLayouts
|
|
23
|
+
this.state = { currentLayout: this.props.layout };
|
|
24
|
+
this.originalLayouts = {};
|
|
25
|
+
this.adjustedLayouts = {};
|
|
26
|
+
// каллбэк вызывающийся при изменение лэйаута сетки, первым аргументом приходит актуальный конфиг лэйаута,
|
|
27
|
+
// т.е. если на текущей сетке есть виджеты, с активированной опцией автовысоты, их параметр "h" будет
|
|
28
|
+
// "подстроенный"; чтобы, для сохранения в сторе "ушли" значения без учёта подстройки (как если бы у этих
|
|
29
|
+
// виджетов автовысота была деактивирована) корректируем их используя this.originalLayouts
|
|
30
|
+
this._onLayoutChange = (layout) => {
|
|
31
|
+
const currentLayout = layout.map((item) => {
|
|
32
|
+
if (item.i in this.originalLayouts) {
|
|
33
|
+
return Object.assign(Object.assign({}, this.originalLayouts[item.i]), { w: item.w, x: item.x, y: item.y });
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
return Object.assign({}, item);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
// [experimental] if the _prevent Double Compact is enabled, then skip recalculate layout with auto height
|
|
40
|
+
// после того, как у виждета активировали автовысоту и его параметр "h" изменился, это приведёт, также, и к
|
|
41
|
+
// изменению параметра (координаты) "y" у элементов расположенных под ним, поэтому, после того, как
|
|
42
|
+
// значения параметра "h" виджетов с активированной автовысотой были изменены, необходимо изменить и
|
|
43
|
+
// координату "y" виджетов расположенных ниже
|
|
44
|
+
const compactedLayout = this.props._EXPERIMENTAL_preventDoubleCompact
|
|
45
|
+
? currentLayout
|
|
46
|
+
: react_grid_layout_1.utils.compact(currentLayout, LAYOUT_COMPACTING_TYPE, this.props.registerManager.gridLayout.cols);
|
|
47
|
+
const newConfig = utils_1.UpdateManager.updateLayout({
|
|
48
|
+
layout: compactedLayout,
|
|
49
|
+
config: this.props.config,
|
|
50
|
+
});
|
|
51
|
+
if (!(0, isEqual_1.default)(newConfig.layout, this.props.config.layout)) {
|
|
52
|
+
this._onChange({
|
|
53
|
+
config: newConfig,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
this._onItemRemove = (id) => {
|
|
58
|
+
const { config, itemsStateAndParams } = this.props;
|
|
59
|
+
this._onChange(utils_1.UpdateManager.removeItem({ id, config, itemsStateAndParams }));
|
|
60
|
+
};
|
|
61
|
+
this._onItemEdit = (configItem) => {
|
|
62
|
+
this.props.onItemEdit(configItem);
|
|
63
|
+
};
|
|
64
|
+
this._onItemStateAndParamsChange = (id, stateAndParams) => {
|
|
65
|
+
const { config, itemsStateAndParams } = this.props;
|
|
66
|
+
this._onChange({
|
|
67
|
+
itemsStateAndParams: utils_1.UpdateManager.changeStateAndParams({
|
|
68
|
+
id,
|
|
69
|
+
config,
|
|
70
|
+
stateAndParams,
|
|
71
|
+
itemsStateAndParams,
|
|
72
|
+
}),
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
this._memorizeOriginalLayout = (widgetId, preAutoHeightLayout, postAutoHeightLayout) => {
|
|
76
|
+
if (!(widgetId in this.originalLayouts)) {
|
|
77
|
+
this.originalLayouts[widgetId] = preAutoHeightLayout;
|
|
78
|
+
}
|
|
79
|
+
this.adjustedLayouts[widgetId] = postAutoHeightLayout;
|
|
80
|
+
this.setState({
|
|
81
|
+
currentLayout: this.props.layout.map((item) => {
|
|
82
|
+
if (item.i in this.adjustedLayouts) {
|
|
83
|
+
return Object.assign(Object.assign({}, this.adjustedLayouts[item.i]), { w: item.w, x: item.x, y: item.y });
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
return Object.assign({}, item);
|
|
87
|
+
}
|
|
88
|
+
}),
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
this._revertToOriginalLayout = (widgetId) => {
|
|
92
|
+
this.setState({
|
|
93
|
+
currentLayout: this.state.currentLayout.map((item) => {
|
|
94
|
+
if (item.i === widgetId) {
|
|
95
|
+
return Object.assign(Object.assign({}, this.originalLayouts[item.i]), { w: item.w, x: item.x, y: item.y });
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
return Object.assign({}, item);
|
|
99
|
+
}
|
|
100
|
+
}),
|
|
101
|
+
});
|
|
102
|
+
delete this.adjustedLayouts[widgetId];
|
|
103
|
+
delete this.originalLayouts[widgetId];
|
|
104
|
+
};
|
|
105
|
+
this._getItemsMeta = (pluginsRefs) => {
|
|
106
|
+
return pluginsRefs
|
|
107
|
+
.map((ref) => {
|
|
108
|
+
if (!(ref && typeof ref.getMeta === 'function')) {
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
return ref.getMeta();
|
|
112
|
+
})
|
|
113
|
+
.filter(Boolean);
|
|
114
|
+
};
|
|
115
|
+
this._getLayout = () => {
|
|
116
|
+
return this.props.layout.map((item) => {
|
|
117
|
+
if (item.i in this.adjustedLayouts) {
|
|
118
|
+
return Object.assign(Object.assign({}, this.adjustedLayouts[item.i]), { w: item.w, x: item.x, y: item.y });
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
return Object.assign({}, item);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
this._reloadItems = (pluginsRefs, data) => {
|
|
126
|
+
pluginsRefs.forEach((ref) => ref && ref.reload && ref.reload(data));
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
_onChange({ config = this.props.config, itemsStateAndParams = this.props.itemsStateAndParams, }) {
|
|
130
|
+
if (!((0, isEqual_1.default)(config, this.props.config) &&
|
|
131
|
+
(0, isEqual_1.default)(itemsStateAndParams, this.props.itemsStateAndParams))) {
|
|
132
|
+
this.props.onChange({
|
|
133
|
+
config,
|
|
134
|
+
itemsStateAndParams,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
get _itemsParams() {
|
|
139
|
+
const { config, itemsStateAndParams, globalParams, defaultGlobalParams, registerManager, } = this.props;
|
|
140
|
+
return (0, shared_1.getItemsParams)({
|
|
141
|
+
defaultGlobalParams,
|
|
142
|
+
globalParams,
|
|
143
|
+
config,
|
|
144
|
+
itemsStateAndParams,
|
|
145
|
+
plugins: registerManager.getPlugins(),
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
get _itemsState() {
|
|
149
|
+
const { config, itemsStateAndParams } = this.props;
|
|
150
|
+
return (0, shared_1.getItemsState)({ config, itemsStateAndParams });
|
|
151
|
+
}
|
|
152
|
+
get _contextValue() {
|
|
153
|
+
return {
|
|
154
|
+
getLayout: this._getLayout,
|
|
155
|
+
config: this.props.config,
|
|
156
|
+
context: this.props.context,
|
|
157
|
+
overlayControls: this.props.overlayControls,
|
|
158
|
+
noOverlay: this.props.noOverlay,
|
|
159
|
+
defaultGlobalParams: this.props.globalParams,
|
|
160
|
+
globalParams: this.props.globalParams,
|
|
161
|
+
editMode: this.props.editMode,
|
|
162
|
+
settings: this.props.settings,
|
|
163
|
+
itemsState: this._itemsState,
|
|
164
|
+
itemsParams: this._itemsParams,
|
|
165
|
+
registerManager: this.props.registerManager,
|
|
166
|
+
onItemStateAndParamsChange: this._onItemStateAndParamsChange,
|
|
167
|
+
removeItem: this._onItemRemove,
|
|
168
|
+
editItem: this._onItemEdit,
|
|
169
|
+
layoutChange: this._onLayoutChange,
|
|
170
|
+
getItemsMeta: this._getItemsMeta,
|
|
171
|
+
reloadItems: this._reloadItems,
|
|
172
|
+
memorizeOriginalLayout: this._memorizeOriginalLayout,
|
|
173
|
+
revertToOriginalLayout: this._revertToOriginalLayout,
|
|
174
|
+
forwardedMetaRef: this.props.forwardedMetaRef,
|
|
175
|
+
draggableHandleClassName: this.props.draggableHandleClassName,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
render() {
|
|
179
|
+
return (react_1.default.createElement(DashKitContext_1.DashKitContext.Provider, { value: this._contextValue },
|
|
180
|
+
react_1.default.createElement(Component, null)));
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
_a.propTypes = {
|
|
184
|
+
editMode: prop_types_1.default.bool,
|
|
185
|
+
context: prop_types_1.default.object,
|
|
186
|
+
overlayControls: prop_types_1.default.object,
|
|
187
|
+
config: prop_types_1.default.object,
|
|
188
|
+
onItemEdit: prop_types_1.default.func,
|
|
189
|
+
onChange: prop_types_1.default.func,
|
|
190
|
+
defaultGlobalParams: prop_types_1.default.object,
|
|
191
|
+
globalParams: prop_types_1.default.object,
|
|
192
|
+
itemsStateAndParams: prop_types_1.default.object,
|
|
193
|
+
registerManager: prop_types_1.default.object,
|
|
194
|
+
layout: prop_types_1.default.array,
|
|
195
|
+
settings: prop_types_1.default.object,
|
|
196
|
+
forwardedMetaRef: prop_types_1.default.object,
|
|
197
|
+
noOverlay: prop_types_1.default.bool,
|
|
198
|
+
draggableHandleClassName: prop_types_1.default.string,
|
|
199
|
+
_EXPERIMENTAL_preventDoubleCompact: prop_types_1.default.bool,
|
|
200
|
+
},
|
|
201
|
+
_a;
|
|
202
|
+
}
|
|
203
|
+
exports.withContext = withContext;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Config } from '../shared';
|
|
2
|
+
import { RegisterManager } from '../utils';
|
|
3
|
+
export declare const useCalcPropsLayout: (config: Config, registerManager: RegisterManager) => {
|
|
4
|
+
i: string;
|
|
5
|
+
h: number;
|
|
6
|
+
w: number;
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
minW: number;
|
|
10
|
+
minH: number;
|
|
11
|
+
maxW?: number | undefined;
|
|
12
|
+
maxH?: number | undefined;
|
|
13
|
+
}[];
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useCalcPropsLayout = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const react_1 = tslib_1.__importDefault(require("react"));
|
|
6
|
+
const isEqual_1 = tslib_1.__importDefault(require("lodash/isEqual"));
|
|
7
|
+
function onUpdatePropsConfig(config, registerManager) {
|
|
8
|
+
return config.layout.map((itemLayout, i) => {
|
|
9
|
+
const { type } = config.items[i];
|
|
10
|
+
return Object.assign(Object.assign({}, registerManager.getItem(type).defaultLayout), itemLayout);
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
const useCalcPropsLayout = (config, registerManager) => {
|
|
14
|
+
const [prevConfig, setPrevConfig] = react_1.default.useState(config);
|
|
15
|
+
const [layout, updateLayout] = react_1.default.useState(onUpdatePropsConfig(config, registerManager));
|
|
16
|
+
if (!(0, isEqual_1.default)(prevConfig.layout, config.layout)) {
|
|
17
|
+
setPrevConfig(config);
|
|
18
|
+
updateLayout(onUpdatePropsConfig(config, registerManager));
|
|
19
|
+
}
|
|
20
|
+
return layout;
|
|
21
|
+
};
|
|
22
|
+
exports.useCalcPropsLayout = useCalcPropsLayout;
|
|
23
|
+
// export const useManageLayout = (config: Config, registerManager: RegisterManager) => {
|
|
24
|
+
// const propsLayout = useCalcPropsLayout(config, registerManager);
|
|
25
|
+
// // так как мы не хотим хранить параметры виджета с активированной автовысотой в сторе и на сервере, актуальный
|
|
26
|
+
// // (видимый юзером в конкретный момент времени) лэйаут (массив объектов с данными о ширине, высоте,
|
|
27
|
+
// // расположении конкретного виджета на сетке) будет храниться в стейте, но, для того, чтобы в стор попадал
|
|
28
|
+
// // лэйаут без учета вижетов с активированной автовысотой, в момент "подстройки" высоты виджета значение h
|
|
29
|
+
// // (высота) из конфига будет запоминаться в originalLayouts, новое значение высоты в adjustedLayouts
|
|
30
|
+
// const [currentLayout, setCurrentLayout] = React.useState(propsLayout);
|
|
31
|
+
// };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.i18n = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const i18n_1 = require("@gravity-ui/i18n");
|
|
6
|
+
const configure_1 = require("../utils/configure");
|
|
7
|
+
const en_json_1 = tslib_1.__importDefault(require("./en.json"));
|
|
8
|
+
const ru_json_1 = tslib_1.__importDefault(require("./ru.json"));
|
|
9
|
+
exports.i18n = new i18n_1.I18N();
|
|
10
|
+
const COMPONENT = 'dashkit';
|
|
11
|
+
exports.i18n.registerKeyset('en', COMPONENT, en_json_1.default);
|
|
12
|
+
exports.i18n.registerKeyset('ru', COMPONENT, ru_json_1.default);
|
|
13
|
+
exports.i18n.setLang((0, configure_1.getConfig)().lang || 'en');
|
|
14
|
+
(0, configure_1.subscribeConfigure)((config) => {
|
|
15
|
+
if (config.lang) {
|
|
16
|
+
exports.i18n.setLang(config.lang);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
exports.default = exports.i18n.keyset(COMPONENT);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CloseIcon = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const react_1 = tslib_1.__importDefault(require("react"));
|
|
6
|
+
function CloseIcon(props) {
|
|
7
|
+
return (react_1.default.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 10 10", width: "10", height: "10", fill: "currentColor" }, props),
|
|
8
|
+
react_1.default.createElement("path", { d: "M9.75592 8.57741C10.0814 8.90285 10.0814 9.43049 9.75592 9.75592C9.43049 10.0814 8.90285 10.0814 8.57741 9.75592L5 6.17851L1.42259 9.75592C1.09715 10.0814 0.569515 10.0814 0.244078 9.75592C-0.0813592 9.43049 -0.0813592 8.90285 0.244078 8.57741L3.82149 5L0.244078 1.42259C-0.0813592 1.09715 -0.0813592 0.569515 0.244078 0.244078C0.569515 -0.0813592 1.09715 -0.0813592 1.42259 0.244078L5 3.82149L8.57741 0.244078C8.90285 -0.0813592 9.43049 -0.0813592 9.75592 0.244078C10.0814 0.569515 10.0814 1.09715 9.75592 1.42259L6.17851 5L9.75592 8.57741Z" })));
|
|
9
|
+
}
|
|
10
|
+
exports.CloseIcon = CloseIcon;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CogIcon = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const react_1 = tslib_1.__importDefault(require("react"));
|
|
6
|
+
function CogIcon(props) {
|
|
7
|
+
return (react_1.default.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", width: "24", height: "24", fill: "currentColor" }, props),
|
|
8
|
+
react_1.default.createElement("path", { d: "M11.844 16.156a4 4 0 1 1 0-8 4 4 0 0 1 0 8m6-4c0-.029-.004-.058-.004-.087l1.848-.34-.362-1.968-1.852.342a5.992 5.992 0 0 0-1.454-2.246l1.068-1.55-1.646-1.134-1.07 1.55a5.95 5.95 0 0 0-2.528-.567c-.03 0-.058.004-.087.004l-.341-1.848-1.967.363.34 1.851A5.996 5.996 0 0 0 7.546 7.98l-1.55-1.068L4.86 8.558l1.55 1.07a5.95 5.95 0 0 0-.567 2.528c0 .03.004.058.004.087L4 12.584l.362 1.967 1.852-.342a5.992 5.992 0 0 0 1.454 2.246L6.6 18.005l1.646 1.134 1.069-1.55a5.95 5.95 0 0 0 2.529.567c.029 0 .058-.004.087-.004L12.27 20l1.968-.363-.341-1.85a5.996 5.996 0 0 0 2.245-1.455l1.55 1.068 1.134-1.646-1.55-1.069a5.95 5.95 0 0 0 .567-2.529" })));
|
|
9
|
+
}
|
|
10
|
+
exports.CogIcon = CogIcon;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CopyIcon = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const react_1 = tslib_1.__importDefault(require("react"));
|
|
6
|
+
function CopyIcon(props) {
|
|
7
|
+
return (react_1.default.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 16 16", width: "16", height: "16", fill: "currentColor" }, props),
|
|
8
|
+
react_1.default.createElement("path", { d: "M7 14h7V7H7v7zM5 5h11v11H5V5zm4-2v1-1zm1-3H0v10V0h10zM0 10v1h4-4v-1zM10 0h1v4-4h-1zM3 9h1-1zM0 0h11v4H9V2H2v7h2v2H0V0z" })));
|
|
9
|
+
}
|
|
10
|
+
exports.CopyIcon = CopyIcon;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeleteIcon = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const react_1 = tslib_1.__importDefault(require("react"));
|
|
6
|
+
function DeleteIcon(props) {
|
|
7
|
+
return (react_1.default.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 16 16", width: "16", height: "16", fill: "currentColor" }, props),
|
|
8
|
+
react_1.default.createElement("g", null,
|
|
9
|
+
react_1.default.createElement("path", { d: "M13.29 1.605h-2.857V.522A.522.522 0 0 0 9.91 0H6.089a.522.522 0 0 0-.522.522v1.083H2.71a.522.522 0 0 0-.521.522v1.605a.52.52 0 0 0 .521.521h.159L3.345 15.5c.012.28.242.5.521.5h8.268c.28 0 .51-.22.521-.5l.477-11.247h.159a.522.522 0 0 0 .521-.521V2.127a.522.522 0 0 0-.521-.522zm-6.679-.562h2.778v.562H6.611v-.562zm5.023 13.914H4.366L3.912 4.253h8.176l-.454 10.704zM12.769 3.21H3.23v-.562h9.538v.562z" }),
|
|
10
|
+
react_1.default.createElement("path", { d: "M5.901 5.853a.522.522 0 0 0-.522.522v6.46a.522.522 0 0 0 1.044 0v-6.46a.522.522 0 0 0-.522-.522zm2.099 0a.522.522 0 0 0-.522.522v6.46a.522.522 0 1 0 1.044 0v-6.46A.522.522 0 0 0 8 5.853zm2.099 0a.522.522 0 0 0-.522.522v6.46a.522.522 0 0 0 1.044 0v-6.46a.522.522 0 0 0-.522-.522z" }))));
|
|
11
|
+
}
|
|
12
|
+
exports.DeleteIcon = DeleteIcon;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DotsIcon = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const react_1 = tslib_1.__importDefault(require("react"));
|
|
6
|
+
function DotsIcon(props) {
|
|
7
|
+
return (react_1.default.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 16 16", width: "16", height: "16", fill: "currentColor" }, props),
|
|
8
|
+
react_1.default.createElement("path", { d: "M14 6.125a1.874 1.874 0 1 1 .001 3.749A1.874 1.874 0 0 1 14 6.125zm-5.906 0a1.874 1.874 0 1 1 0 3.749 1.874 1.874 0 0 1 0-3.749zM2 6.125a1.874 1.874 0 1 1 .001 3.749A1.874 1.874 0 0 1 2 6.125z" })));
|
|
9
|
+
}
|
|
10
|
+
exports.DotsIcon = DotsIcon;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TickIcon = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const react_1 = tslib_1.__importDefault(require("react"));
|
|
6
|
+
function TickIcon(props) {
|
|
7
|
+
return (react_1.default.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 16 16", width: "16", height: "16", fill: "currentColor" }, props),
|
|
8
|
+
react_1.default.createElement("path", { fillRule: "evenodd", d: "M5.95 11.008L1.863 6.572.392 7.927l5.533 6.003 9.67-10.114-1.444-1.381z" })));
|
|
9
|
+
}
|
|
10
|
+
exports.TickIcon = TickIcon;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WarningIcon = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const react_1 = tslib_1.__importDefault(require("react"));
|
|
6
|
+
function WarningIcon(props) {
|
|
7
|
+
return (react_1.default.createElement("svg", Object.assign({ xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 16 16", width: "16", height: "16", fill: "currentColor" }, props),
|
|
8
|
+
react_1.default.createElement("path", { fillRule: "evenodd", d: "M8 16A8 8 0 118 0a8 8 0 010 16zm0-7a1 1 0 001-1V4a1 1 0 10-2 0v4a1 1 0 001 1zm0 1a1 1 0 100 2 1 1 0 000-2z" })));
|
|
9
|
+
}
|
|
10
|
+
exports.WarningIcon = WarningIcon;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./components"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./utils"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./constants"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./typings"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./shared"), exports);
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
.dashkit-plugin-text {
|
|
2
|
+
--rc-loader-active-color: var(--yc-color-base-special);
|
|
3
|
+
--rc-loader-off-color: var(--yc-color-base-selection-hover);
|
|
4
|
+
white-space: pre-wrap;
|
|
5
|
+
overflow: auto;
|
|
6
|
+
height: 100%;
|
|
7
|
+
padding-right: 5px;
|
|
8
|
+
}
|
|
9
|
+
.dashkit-plugin-text_withMarkdown {
|
|
10
|
+
white-space: normal;
|
|
11
|
+
}
|
|
12
|
+
.dashkit-plugin-text_loading {
|
|
13
|
+
display: flex;
|
|
14
|
+
align-items: center;
|
|
15
|
+
justify-content: center;
|
|
16
|
+
}
|
|
17
|
+
.dashkit-plugin-text_error {
|
|
18
|
+
padding: 10px;
|
|
19
|
+
}
|
|
20
|
+
.dashkit-plugin-text__error {
|
|
21
|
+
color: var(--yc-color-text-danger);
|
|
22
|
+
}
|
|
23
|
+
.dashkit-plugin-text__loader {
|
|
24
|
+
display: flex;
|
|
25
|
+
align-items: center;
|
|
26
|
+
justify-content: center;
|
|
27
|
+
}
|
|
28
|
+
.dashkit-plugin-text__loader-view {
|
|
29
|
+
padding: 0 14px;
|
|
30
|
+
margin-right: 14px;
|
|
31
|
+
}
|
|
32
|
+
.dashkit-plugin-text__loader-text {
|
|
33
|
+
font-size: 20px;
|
|
34
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { PluginWidgetProps, Plugin } from '../../typings';
|
|
3
|
+
declare enum LoadStatus {
|
|
4
|
+
Pending = "pending",
|
|
5
|
+
Success = "success",
|
|
6
|
+
Fail = "fail"
|
|
7
|
+
}
|
|
8
|
+
export declare type PluginTextApiHandler = (data: {
|
|
9
|
+
text: string;
|
|
10
|
+
}) => Promise<{
|
|
11
|
+
result: string;
|
|
12
|
+
}>;
|
|
13
|
+
export interface PluginTextProps extends PluginWidgetProps {
|
|
14
|
+
apiHandler?: PluginTextApiHandler;
|
|
15
|
+
data: {
|
|
16
|
+
text: string;
|
|
17
|
+
} & PluginWidgetProps['data'];
|
|
18
|
+
}
|
|
19
|
+
interface PluginTextState {
|
|
20
|
+
htmlText: string;
|
|
21
|
+
status: LoadStatus;
|
|
22
|
+
needUpdate?: boolean;
|
|
23
|
+
text?: string;
|
|
24
|
+
}
|
|
25
|
+
export declare class PluginText extends React.PureComponent<PluginTextProps, PluginTextState> {
|
|
26
|
+
static getDerivedStateFromProps(props: PluginTextProps, state: PluginTextState): {
|
|
27
|
+
text: string;
|
|
28
|
+
needUpdate: boolean;
|
|
29
|
+
};
|
|
30
|
+
state: PluginTextState;
|
|
31
|
+
private _isUnmounted;
|
|
32
|
+
componentDidMount(): void;
|
|
33
|
+
componentDidUpdate(): void;
|
|
34
|
+
componentWillUnmount(): void;
|
|
35
|
+
render(): JSX.Element;
|
|
36
|
+
private renderLoader;
|
|
37
|
+
private renderError;
|
|
38
|
+
private renderText;
|
|
39
|
+
private getMarkdown;
|
|
40
|
+
private onRetryClick;
|
|
41
|
+
get withMarkdown(): boolean;
|
|
42
|
+
}
|
|
43
|
+
declare type PluginDataProps = Omit<PluginTextProps, 'apiHandler'>;
|
|
44
|
+
export declare type PluginObjectSettings = {
|
|
45
|
+
apiHandler?: PluginTextApiHandler;
|
|
46
|
+
};
|
|
47
|
+
export declare type PluginObject = Plugin<PluginDataProps> & {
|
|
48
|
+
setSettings: (settings: PluginObjectSettings) => PluginObject;
|
|
49
|
+
_apiHandler?: PluginTextApiHandler;
|
|
50
|
+
};
|
|
51
|
+
declare const plugin: PluginObject;
|
|
52
|
+
export default plugin;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PluginText = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const react_1 = tslib_1.__importDefault(require("react"));
|
|
6
|
+
const bem_cn_lite_1 = tslib_1.__importDefault(require("bem-cn-lite"));
|
|
7
|
+
const uikit_1 = require("@gravity-ui/uikit");
|
|
8
|
+
const i18n_1 = tslib_1.__importDefault(require("../../i18n"));
|
|
9
|
+
// need to set markdown styles separately
|
|
10
|
+
// for instance can use yfm-transform
|
|
11
|
+
const b = (0, bem_cn_lite_1.default)('dashkit-plugin-text');
|
|
12
|
+
var LoadStatus;
|
|
13
|
+
(function (LoadStatus) {
|
|
14
|
+
LoadStatus["Pending"] = "pending";
|
|
15
|
+
LoadStatus["Success"] = "success";
|
|
16
|
+
LoadStatus["Fail"] = "fail";
|
|
17
|
+
})(LoadStatus || (LoadStatus = {}));
|
|
18
|
+
class PluginText extends react_1.default.PureComponent {
|
|
19
|
+
constructor() {
|
|
20
|
+
super(...arguments);
|
|
21
|
+
this.state = {
|
|
22
|
+
htmlText: '',
|
|
23
|
+
status: this.withMarkdown ? LoadStatus.Pending : LoadStatus.Success,
|
|
24
|
+
};
|
|
25
|
+
this._isUnmounted = false;
|
|
26
|
+
this.onRetryClick = () => {
|
|
27
|
+
this.getMarkdown();
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
static getDerivedStateFromProps(props, state) {
|
|
31
|
+
const { data: { text }, } = props;
|
|
32
|
+
const needUpdate = text !== state.text;
|
|
33
|
+
return {
|
|
34
|
+
text,
|
|
35
|
+
needUpdate,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
componentDidMount() {
|
|
39
|
+
this.getMarkdown();
|
|
40
|
+
}
|
|
41
|
+
componentDidUpdate() {
|
|
42
|
+
if (this.state.needUpdate) {
|
|
43
|
+
this.getMarkdown();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
componentWillUnmount() {
|
|
47
|
+
this._isUnmounted = true;
|
|
48
|
+
}
|
|
49
|
+
render() {
|
|
50
|
+
switch (this.state.status) {
|
|
51
|
+
case LoadStatus.Success:
|
|
52
|
+
return this.renderText();
|
|
53
|
+
case LoadStatus.Pending:
|
|
54
|
+
return this.renderLoader();
|
|
55
|
+
default:
|
|
56
|
+
return this.renderError();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
renderLoader() {
|
|
60
|
+
return (react_1.default.createElement("div", { className: b({ loading: true }) },
|
|
61
|
+
react_1.default.createElement("div", { className: b('loader') },
|
|
62
|
+
react_1.default.createElement("div", { className: b('loader-view') },
|
|
63
|
+
react_1.default.createElement(uikit_1.Loader, { size: "m" })))));
|
|
64
|
+
}
|
|
65
|
+
renderError() {
|
|
66
|
+
return (react_1.default.createElement("div", { className: b({ error: true }) },
|
|
67
|
+
react_1.default.createElement("div", { className: b('error') }, (0, i18n_1.default)('label_render-markdown-error')),
|
|
68
|
+
react_1.default.createElement("br", null),
|
|
69
|
+
react_1.default.createElement(uikit_1.Button, { view: "action", size: "m", onClick: this.onRetryClick }, (0, i18n_1.default)('button_retry')),
|
|
70
|
+
react_1.default.createElement("br", null)));
|
|
71
|
+
}
|
|
72
|
+
renderText() {
|
|
73
|
+
return (react_1.default.createElement("div", { className: b({ withMarkdown: this.withMarkdown }) }, this.withMarkdown ? (react_1.default.createElement("div", { className: "yfm" // className из стилей для markdown
|
|
74
|
+
, dangerouslySetInnerHTML: { __html: this.state.htmlText } })) : (this.state.text)));
|
|
75
|
+
}
|
|
76
|
+
async getMarkdown() {
|
|
77
|
+
if (typeof this.props.apiHandler !== 'function') {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
this.setState({ status: LoadStatus.Pending });
|
|
81
|
+
try {
|
|
82
|
+
let htmlText = '';
|
|
83
|
+
if (this.state.text && this.state.text.trim()) {
|
|
84
|
+
const loadedData = await this.props.apiHandler({ text: this.state.text });
|
|
85
|
+
htmlText = loadedData.result;
|
|
86
|
+
}
|
|
87
|
+
if (this._isUnmounted) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
this.setState({
|
|
91
|
+
htmlText,
|
|
92
|
+
status: LoadStatus.Success,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
if (this._isUnmounted) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
this.setState({ status: LoadStatus.Fail });
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
get withMarkdown() {
|
|
103
|
+
return typeof this.props.apiHandler === 'function';
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
exports.PluginText = PluginText;
|
|
107
|
+
const plugin = {
|
|
108
|
+
type: 'text',
|
|
109
|
+
defaultLayout: { w: 12, h: 6 },
|
|
110
|
+
setSettings(settings) {
|
|
111
|
+
const { apiHandler } = settings;
|
|
112
|
+
plugin._apiHandler = apiHandler;
|
|
113
|
+
return plugin;
|
|
114
|
+
},
|
|
115
|
+
renderer(props, forwardedRef) {
|
|
116
|
+
return react_1.default.createElement(PluginText, Object.assign({}, props, { apiHandler: plugin._apiHandler, ref: forwardedRef }));
|
|
117
|
+
},
|
|
118
|
+
};
|
|
119
|
+
exports.default = plugin;
|