@steroidsjs/core 2.1.0-beta.2 → 2.1.0-beta.20
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/actions/form.d.ts +9 -0
- package/actions/form.js +11 -1
- package/actions/list.d.ts +1 -0
- package/actions/list.js +1 -0
- package/components/ClientStorageComponent.d.ts +3 -3
- package/components/ClientStorageComponent.js +28 -22
- package/components/HttpComponent.js +32 -15
- package/components/LocaleComponent.js +9 -9
- package/components/MetricsComponent.js +3 -1
- package/components/StoreComponent.d.ts +6 -0
- package/components/StoreComponent.js +6 -7
- package/components/UiComponent.d.ts +1 -1
- package/components/WebSocketComponent.d.ts +1 -1
- package/hoc/components.d.ts +1 -1
- package/hoc/components.js +1 -1
- package/hoc/file.d.ts +1 -0
- package/hooks/index.d.ts +2 -1
- package/hooks/index.js +3 -1
- package/hooks/useAbsolutePositioning.d.ts +5 -0
- package/hooks/useAbsolutePositioning.js +6 -6
- package/hooks/useApplication.d.ts +29 -26
- package/hooks/useApplication.js +17 -82
- package/hooks/useComponents.d.ts +1 -14
- package/hooks/useComponents.js +5 -5
- package/hooks/useDataProvider.js +4 -2
- package/hooks/useDataSelect.d.ts +12 -6
- package/hooks/useDataSelect.js +5 -3
- package/hooks/useFetch.d.ts +11 -3
- package/hooks/useFetch.js +34 -31
- package/hooks/useFile.js +14 -2
- package/hooks/useLayout.d.ts +9 -0
- package/hooks/useLayout.js +64 -44
- package/hooks/useList.d.ts +45 -0
- package/hooks/useList.js +83 -53
- package/hooks/useModel.js +1 -1
- package/hooks/useScreen.d.ts +1 -1
- package/hooks/useScreen.js +2 -2
- package/hooks/useSsr.d.ts +2 -0
- package/hooks/useSsr.js +8 -0
- package/index.d.ts +8 -2
- package/package.json +6 -3
- package/providers/ComponentsProvider.d.ts +26 -0
- package/providers/ComponentsProvider.js +28 -0
- package/providers/ScreenProvider.d.ts +20 -0
- package/providers/ScreenProvider.js +87 -0
- package/providers/SsrProvider.d.ts +17 -0
- package/providers/SsrProvider.js +32 -0
- package/providers/index.d.ts +4 -0
- package/providers/index.js +12 -0
- package/reducers/form.d.ts +1 -1
- package/reducers/form.js +3 -1
- package/reducers/index.js +1 -1
- package/reducers/list.js +1 -3
- package/reducers/router.js +1 -1
- package/ui/content/Alert/Alert.d.ts +50 -0
- package/ui/content/Alert/Alert.js +39 -0
- package/ui/content/Alert/index.d.ts +2 -0
- package/ui/content/Alert/index.js +7 -0
- package/ui/content/Avatar/Avatar.d.ts +53 -12
- package/ui/content/Avatar/Avatar.js +25 -4
- package/ui/content/Avatar/index.d.ts +6 -1
- package/ui/content/Avatar/index.js +4 -0
- package/ui/content/Card/Card.d.ts +61 -13
- package/ui/content/Card/Card.js +3 -2
- package/ui/content/Collapse/Collapse.d.ts +63 -0
- package/ui/content/Collapse/Collapse.js +75 -0
- package/ui/content/Collapse/CollapseItem.d.ts +67 -0
- package/ui/content/Collapse/CollapseItem.js +22 -0
- package/ui/content/Collapse/index.d.ts +7 -0
- package/ui/content/Collapse/index.js +8 -0
- package/ui/content/Detail/Detail.d.ts +102 -0
- package/ui/content/Detail/Detail.js +155 -0
- package/ui/content/Detail/DetailItem.d.ts +43 -0
- package/ui/content/Detail/DetailItem.js +10 -0
- package/ui/content/Detail/demo/basic.d.ts +8 -0
- package/ui/content/Detail/demo/basic.js +56 -0
- package/ui/content/Detail/demo/controls.d.ts +8 -0
- package/ui/content/Detail/demo/controls.js +56 -0
- package/ui/content/Detail/demo/layout.d.ts +8 -0
- package/ui/content/Detail/demo/layout.js +56 -0
- package/ui/content/Detail/demo/responsive.d.ts +8 -0
- package/ui/content/Detail/demo/responsive.js +71 -0
- package/ui/content/Detail/demo/sizes.d.ts +8 -0
- package/ui/content/Detail/demo/sizes.js +61 -0
- package/ui/content/Detail/index.d.ts +3 -0
- package/ui/content/Detail/index.js +10 -0
- package/ui/content/DropDown/DropDown.d.ts +1 -0
- package/ui/content/DropDown/DropDown.js +1 -0
- package/ui/content/index.d.ts +13 -0
- package/ui/content/index.js +22 -0
- package/ui/crud/Crud/Crud.d.ts +1 -1
- package/ui/crud/Crud/Crud.js +1 -1
- package/ui/crud/index.d.ts +1 -0
- package/ui/form/Button/Button.d.ts +1 -0
- package/ui/form/Button/Button.js +1 -0
- package/ui/form/DateField/useDateInputState.d.ts +4 -0
- package/ui/form/DateField/useDateInputState.js +3 -3
- package/ui/form/DateField/useDateTime.js +9 -7
- package/ui/form/DateTimeField/DateTimeField.js +2 -1
- package/ui/form/DropDownField/DropDownField.js +10 -3
- package/ui/form/Form/Form.js +118 -106
- package/ui/form/ImageField/ImageField.d.ts +87 -0
- package/ui/form/ImageField/ImageField.js +145 -0
- package/ui/form/ImageField/index.d.ts +2 -0
- package/ui/form/ImageField/index.js +7 -0
- package/ui/form/InputField/InputField.d.ts +7 -0
- package/ui/form/InputField/InputField.js +26 -22
- package/ui/form/TextField/TextField.d.ts +2 -1
- package/ui/form/TextField/TextField.js +1 -1
- package/ui/icon/Icon/Icon.js +3 -0
- package/ui/layout/Meta/Meta.d.ts +56 -0
- package/ui/layout/Meta/Meta.js +38 -0
- package/ui/layout/Meta/index.d.ts +2 -0
- package/ui/layout/Meta/index.js +7 -0
- package/ui/layout/Notifications/Notifications.js +1 -1
- package/ui/layout/Portal.js +3 -0
- package/ui/layout/ProgressBar/ProgressBar.d.ts +55 -0
- package/ui/layout/ProgressBar/ProgressBar.js +52 -0
- package/ui/layout/ProgressBar/index.d.ts +2 -0
- package/ui/layout/ProgressBar/index.js +7 -0
- package/ui/layout/Skeleton/Skeleton.d.ts +25 -0
- package/ui/layout/Skeleton/Skeleton.js +11 -0
- package/ui/layout/Skeleton/index.d.ts +2 -0
- package/ui/layout/Skeleton/index.js +7 -0
- package/ui/list/Steps/Steps.d.ts +32 -0
- package/ui/list/Steps/Steps.js +23 -0
- package/ui/list/Steps/index.d.ts +2 -0
- package/ui/list/Steps/index.js +7 -0
- package/ui/nav/Router/Router.d.ts +13 -0
- package/ui/nav/Router/Router.js +1 -1
- package/utils/calendar.d.ts +1 -1
- package/utils/calendar.js +8 -1
- package/ui/content/Avatar/SizeContext.d.ts +0 -1
- package/ui/content/Avatar/SizeContext.js +0 -14
- package/ui/nav/Router/SsrProvider.d.ts +0 -15
- package/ui/nav/Router/SsrProvider.js +0 -55
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
26
|
+
if (mod && mod.__esModule) return mod;
|
|
27
|
+
var result = {};
|
|
28
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
29
|
+
__setModuleDefault(result, mod);
|
|
30
|
+
return result;
|
|
31
|
+
};
|
|
32
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
33
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
34
|
+
};
|
|
35
|
+
exports.__esModule = true;
|
|
36
|
+
var React = __importStar(require("react"));
|
|
37
|
+
var File_1 = __importDefault(require("fileup-core/lib/models/File"));
|
|
38
|
+
var first_1 = __importDefault(require("lodash-es/first"));
|
|
39
|
+
var values_1 = __importDefault(require("lodash-es/values"));
|
|
40
|
+
var react_1 = require("react");
|
|
41
|
+
var uniqueId_1 = __importDefault(require("lodash-es/uniqueId"));
|
|
42
|
+
var hooks_1 = require("../../../hooks");
|
|
43
|
+
var useDispatch_1 = __importDefault(require("../../../hooks/useDispatch"));
|
|
44
|
+
var useFile_1 = __importDefault(require("../../../hooks/useFile"));
|
|
45
|
+
var fieldWrapper_1 = __importDefault(require("../Field/fieldWrapper"));
|
|
46
|
+
var modal_1 = require("../../../actions/modal");
|
|
47
|
+
function ImageField(props) {
|
|
48
|
+
var components = hooks_1.useComponents();
|
|
49
|
+
var dispatch = useDispatch_1["default"]();
|
|
50
|
+
// Add cropping option
|
|
51
|
+
var _a = react_1.useState(null), croppedImage = _a[0], setCroppedImage = _a[1];
|
|
52
|
+
var modalId = react_1.useMemo(function () { var _a; return ((_a = props.modalProps) === null || _a === void 0 ? void 0 : _a.modalId) || uniqueId_1["default"]('cropModal'); }, [props.modalProps.modalId]);
|
|
53
|
+
var ImageFieldModalVIew = props.modalView || components.ui.getView('form.ImageFieldModalView');
|
|
54
|
+
var responseParser = react_1.useCallback(function (text) {
|
|
55
|
+
var data = null;
|
|
56
|
+
try {
|
|
57
|
+
data = JSON.parse(text);
|
|
58
|
+
dispatch(modal_1.openModal(ImageFieldModalVIew, __assign(__assign({ modalId: modalId }, props.modalProps), { crop: __assign(__assign({}, props.crop), { onSubmit: function (crop, imageId) { return setCroppedImage(__assign(__assign({}, crop), { id: imageId })); } }), image: first_1["default"](data) })));
|
|
59
|
+
// eslint-disable-next-line no-empty
|
|
60
|
+
}
|
|
61
|
+
catch (e) { }
|
|
62
|
+
return data;
|
|
63
|
+
}, [ImageFieldModalVIew, modalId, dispatch, props.crop, props.modalProps]);
|
|
64
|
+
var _b = useFile_1["default"](__assign(__assign({}, props), { multiple: false, imagesOnly: true, uploader: __assign({ uploaderConfigs: {
|
|
65
|
+
xhr: {
|
|
66
|
+
responseParser: responseParser
|
|
67
|
+
}
|
|
68
|
+
} }, props.uploader) })), files = _b.files, onBrowse = _b.onBrowse, onRemove = _b.onRemove, onAdd = _b.onAdd;
|
|
69
|
+
// Fetch cropped image
|
|
70
|
+
react_1.useEffect(function () {
|
|
71
|
+
if (croppedImage) {
|
|
72
|
+
components.http.post(props.crop.backendUrl, croppedImage).then(function (res) {
|
|
73
|
+
setCroppedImage(null);
|
|
74
|
+
onAdd(new File_1["default"]({
|
|
75
|
+
path: res.title || res.label || res.uid || res.id,
|
|
76
|
+
status: File_1["default"].STATUS_END,
|
|
77
|
+
result: File_1["default"].RESULT_SUCCESS,
|
|
78
|
+
resultHttpStatus: 200,
|
|
79
|
+
resultHttpMessage: res,
|
|
80
|
+
uid: res.uid
|
|
81
|
+
}));
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}, [components.http, croppedImage, onAdd, onRemove, props.crop.backendUrl]);
|
|
85
|
+
var ImageFieldView = props.view || components.ui.getView('form.ImageFieldView');
|
|
86
|
+
var item = react_1.useMemo(function () {
|
|
87
|
+
var result = null;
|
|
88
|
+
var _file = first_1["default"](files);
|
|
89
|
+
if (_file) {
|
|
90
|
+
var data = _file.getResultHttpMessage() || {};
|
|
91
|
+
result = {
|
|
92
|
+
uid: _file.getUid(),
|
|
93
|
+
fileId: data.id || null,
|
|
94
|
+
title: _file.getName(),
|
|
95
|
+
size: props.size,
|
|
96
|
+
disabled: props.disabled,
|
|
97
|
+
onRemove: function () { return onRemove(_file); },
|
|
98
|
+
error: null,
|
|
99
|
+
image: null,
|
|
100
|
+
progress: null
|
|
101
|
+
};
|
|
102
|
+
// Add error
|
|
103
|
+
if (_file.getResult() === File_1["default"].RESULT_ERROR) {
|
|
104
|
+
if (typeof _file.getResultHttpMessage() === 'string'
|
|
105
|
+
&& _file.getResultHttpMessage().substr(0, 1) === '{') {
|
|
106
|
+
var errorResponse = JSON.parse(_file.getResultHttpMessage());
|
|
107
|
+
result.error = errorResponse.error || errorResponse.message || __('Ошибка');
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
result.error = _file.getResultHttpMessage()
|
|
111
|
+
? JSON.stringify(_file.getResultHttpMessage())
|
|
112
|
+
: __('Ошибка');
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Add thumbnail image
|
|
116
|
+
if (data.images) {
|
|
117
|
+
// Image object has properties: url, width, height
|
|
118
|
+
result.image = data.images[props.imagesProcessor]
|
|
119
|
+
|| first_1["default"](values_1["default"](data.images));
|
|
120
|
+
}
|
|
121
|
+
// Add progress
|
|
122
|
+
if (_file.getStatus() === File_1["default"].STATUS_PROCESS) {
|
|
123
|
+
result.progress = {
|
|
124
|
+
bytesUploaded: _file.getBytesUploaded(),
|
|
125
|
+
percent: _file.progress.getPercent()
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return result;
|
|
130
|
+
}, [files, onRemove, props.disabled, props.imagesProcessor, props.size]);
|
|
131
|
+
return (React.createElement(ImageFieldView, __assign({}, props, { item: item, onClick: onBrowse })));
|
|
132
|
+
}
|
|
133
|
+
ImageField.defaultProps = {
|
|
134
|
+
disabled: false,
|
|
135
|
+
required: false,
|
|
136
|
+
className: '',
|
|
137
|
+
modalProps: {},
|
|
138
|
+
label: 'Upload',
|
|
139
|
+
crop: {
|
|
140
|
+
initialValues: {
|
|
141
|
+
aspect: 1
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
exports["default"] = fieldWrapper_1["default"]('ImageField', ImageField);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
var ImageField_1 = __importDefault(require("./ImageField"));
|
|
7
|
+
exports["default"] = ImageField_1["default"];
|
|
@@ -34,6 +34,11 @@ export interface IInputFieldProps extends IFieldWrapperInputProps {
|
|
|
34
34
|
/**
|
|
35
35
|
*/
|
|
36
36
|
viewProps?: any;
|
|
37
|
+
/**
|
|
38
|
+
* Размер Innput
|
|
39
|
+
* @example 'large'
|
|
40
|
+
*/
|
|
41
|
+
size?: Size;
|
|
37
42
|
/**
|
|
38
43
|
* Объект CSS стилей
|
|
39
44
|
* @example {width: '45%'}
|
|
@@ -64,6 +69,8 @@ export interface IInputFieldProps extends IFieldWrapperInputProps {
|
|
|
64
69
|
* @example { mask: '+7 (999) 999-99-99' }
|
|
65
70
|
*/
|
|
66
71
|
maskProps?: any;
|
|
72
|
+
success?: boolean;
|
|
73
|
+
failed?: boolean;
|
|
67
74
|
[key: string]: any;
|
|
68
75
|
}
|
|
69
76
|
export interface IInputFieldViewProps extends IInputFieldProps, IFieldWrapperOutputProps {
|
|
@@ -10,13 +10,34 @@ var __assign = (this && this.__assign) || function () {
|
|
|
10
10
|
};
|
|
11
11
|
return __assign.apply(this, arguments);
|
|
12
12
|
};
|
|
13
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
26
|
+
if (mod && mod.__esModule) return mod;
|
|
27
|
+
var result = {};
|
|
28
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
29
|
+
__setModuleDefault(result, mod);
|
|
30
|
+
return result;
|
|
31
|
+
};
|
|
13
32
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
33
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
34
|
};
|
|
16
35
|
exports.__esModule = true;
|
|
36
|
+
var React = __importStar(require("react"));
|
|
17
37
|
var react_1 = require("react");
|
|
18
38
|
var fieldWrapper_1 = __importDefault(require("../Field/fieldWrapper"));
|
|
19
39
|
var hooks_1 = require("../../../hooks");
|
|
40
|
+
var react_input_mask_1 = __importDefault(require("react-input-mask"));
|
|
20
41
|
function InputField(props) {
|
|
21
42
|
var components = hooks_1.useComponents();
|
|
22
43
|
var inputProps = react_1.useMemo(function () { return (__assign({ type: props.type, name: props.input.name, value: props.input.value || '', onChange: function (value) { return props.input.onChange(value); }, placeholder: props.placeholder, disabled: props.disabled }, props.inputProps)); }, [props.disabled, props.input, props.inputProps, props.placeholder, props.type]);
|
|
@@ -25,32 +46,15 @@ function InputField(props) {
|
|
|
25
46
|
return null;
|
|
26
47
|
}
|
|
27
48
|
// react-input-mask HOC for mask
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
return (
|
|
31
|
-
|
|
32
|
-
{...props}
|
|
33
|
-
{...props.maskProps}
|
|
34
|
-
value={props.input.value || ''}
|
|
35
|
-
onChange={e => props.input.onChange(e.target.value)}
|
|
36
|
-
>
|
|
37
|
-
<InputFieldView
|
|
38
|
-
{...this.props}
|
|
39
|
-
inputProps={{
|
|
40
|
-
type: this.props.type,
|
|
41
|
-
name: this.props.input.name,
|
|
42
|
-
placeholder: this.props.placeholder,
|
|
43
|
-
disabled: this.props.disabled,
|
|
44
|
-
...this.props.inputProps
|
|
45
|
-
}}
|
|
46
|
-
/>
|
|
47
|
-
</InputMask>
|
|
48
|
-
);
|
|
49
|
-
}*/
|
|
49
|
+
if (props.maskProps) {
|
|
50
|
+
var maskOnChange = function (e) { return props.input.onChange(e.target.value); };
|
|
51
|
+
return (React.createElement(react_input_mask_1["default"], __assign({}, inputProps, props.maskProps, { onChange: maskOnChange }), components.ui.renderView(props.view || 'form.InputFieldView', __assign(__assign(__assign({}, props), props.viewProps), { inputProps: inputProps, onChange: maskOnChange }))));
|
|
52
|
+
}
|
|
50
53
|
return components.ui.renderView(props.view || 'form.InputFieldView', __assign(__assign(__assign({}, props), props.viewProps), { inputProps: inputProps }));
|
|
51
54
|
}
|
|
52
55
|
InputField.defaultProps = {
|
|
53
56
|
type: 'text',
|
|
57
|
+
size: 'medium',
|
|
54
58
|
disabled: false,
|
|
55
59
|
required: false,
|
|
56
60
|
className: '',
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
+
import { KeyboardEventHandler } from 'react';
|
|
2
3
|
import { IFieldWrapperInputProps, IFieldWrapperOutputProps } from '../Field/fieldWrapper';
|
|
3
4
|
/**
|
|
4
5
|
* TextField
|
|
@@ -35,7 +36,7 @@ export interface ITextFieldViewProps extends ITextFieldProps, IFieldWrapperOutpu
|
|
|
35
36
|
inputProps: {
|
|
36
37
|
name: string;
|
|
37
38
|
onChange: (value: string | React.ChangeEvent) => void;
|
|
38
|
-
onKeyUp:
|
|
39
|
+
onKeyUp: KeyboardEventHandler<HTMLTextAreaElement>;
|
|
39
40
|
value: string | number;
|
|
40
41
|
placeholder: string;
|
|
41
42
|
disabled: boolean;
|
|
@@ -30,7 +30,7 @@ function TextField(props) {
|
|
|
30
30
|
// TODO This is not worked in redux... =(
|
|
31
31
|
// dispatch(submit(props.formId));
|
|
32
32
|
}
|
|
33
|
-
}, [
|
|
33
|
+
}, [props.formId, props.submitOnEnter]);
|
|
34
34
|
var onChange = react_1.useCallback(function (e) { return props.input.onChange.call(null, e.target ? e.target.value : e.nativeEvent.text); }, [props.input.onChange]);
|
|
35
35
|
var inputProps = react_1.useMemo(function () { return (__assign({ name: props.input.name, value: props.input.value || '', onChange: onChange,
|
|
36
36
|
onKeyUp: onKeyUp, placeholder: props.placeholder, disabled: props.disabled }, props.inputProps)); }, [onKeyUp, onChange, props.disabled, props.input.name, props.input.value, props.inputProps, props.placeholder]);
|
package/ui/icon/Icon/Icon.js
CHANGED
|
@@ -20,6 +20,9 @@ var hooks_1 = require("../../../hooks");
|
|
|
20
20
|
function Icon(props) {
|
|
21
21
|
var components = hooks_1.useComponents();
|
|
22
22
|
var name = props.name;
|
|
23
|
+
if (!isString_1["default"](name)) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
23
26
|
var icon;
|
|
24
27
|
if (process.env.PLATFORM === 'mobile') {
|
|
25
28
|
icon = components.ui.getIcon(name) || name;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { BaseHTMLAttributes, LinkHTMLAttributes, MetaHTMLAttributes, PropsWithChildren, ScriptHTMLAttributes, StyleHTMLAttributes } from 'react';
|
|
2
|
+
interface IInnerHTML {
|
|
3
|
+
/**
|
|
4
|
+
* Содержимое тега
|
|
5
|
+
*/
|
|
6
|
+
innerHtml?: string;
|
|
7
|
+
}
|
|
8
|
+
interface IScript extends ScriptHTMLAttributes<any>, IInnerHTML {
|
|
9
|
+
}
|
|
10
|
+
interface IStyle extends StyleHTMLAttributes<any>, IInnerHTML {
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Meta
|
|
14
|
+
* Компонент используется для ssr и нужен для конфигурации html-тегов в документе.
|
|
15
|
+
*/
|
|
16
|
+
interface IMetaProps extends PropsWithChildren<any> {
|
|
17
|
+
/**
|
|
18
|
+
* Заголовок документа
|
|
19
|
+
* @example Home page
|
|
20
|
+
*/
|
|
21
|
+
title?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Описание документа
|
|
24
|
+
* @example The main page of the site
|
|
25
|
+
*/
|
|
26
|
+
description?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Скрипты, которые необходимо разместить на сайте
|
|
29
|
+
* @example [{src: '/lib/SomeLibrary.min.js'}]
|
|
30
|
+
*/
|
|
31
|
+
scripts?: IScript[];
|
|
32
|
+
/**
|
|
33
|
+
* Мета-теги
|
|
34
|
+
* @example [{name: 'yandex-verification', content: 'ce...9e6'}]
|
|
35
|
+
*/
|
|
36
|
+
meta?: MetaHTMLAttributes<any>[];
|
|
37
|
+
/**
|
|
38
|
+
* Ссылки на ресурсы
|
|
39
|
+
* @example [{href: '/lib/SomeLibrary.css', rel: 'stylesheet', type: 'text/css'}]
|
|
40
|
+
*/
|
|
41
|
+
links?: LinkHTMLAttributes<any>[];
|
|
42
|
+
/**
|
|
43
|
+
* Контент для тегов \<style\>
|
|
44
|
+
*/
|
|
45
|
+
styles?: IStyle[];
|
|
46
|
+
/**
|
|
47
|
+
* Контент для тегов \<noscript\>
|
|
48
|
+
*/
|
|
49
|
+
noScripts?: IInnerHTML[];
|
|
50
|
+
/**
|
|
51
|
+
* Конфигурация тега \<base\>
|
|
52
|
+
*/
|
|
53
|
+
base?: BaseHTMLAttributes<any>;
|
|
54
|
+
}
|
|
55
|
+
declare function Meta(props: IMetaProps): JSX.Element;
|
|
56
|
+
export default Meta;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
exports.__esModule = true;
|
|
17
|
+
var react_1 = __importDefault(require("react"));
|
|
18
|
+
var react_helmet_1 = __importDefault(require("react-helmet"));
|
|
19
|
+
function Meta(props) {
|
|
20
|
+
var _a, _b, _c, _d, _e;
|
|
21
|
+
return (react_1["default"].createElement(react_helmet_1["default"], null,
|
|
22
|
+
react_1["default"].createElement("title", null, props.title),
|
|
23
|
+
props.base && react_1["default"].createElement("base", __assign({}, props.base)),
|
|
24
|
+
props.description && react_1["default"].createElement("meta", { name: 'description', content: props.description }), (_a = props.meta) === null || _a === void 0 ? void 0 :
|
|
25
|
+
_a.map(function (attrs, index) { return react_1["default"].createElement("meta", __assign({ key: index }, attrs)); }), (_b = props.links) === null || _b === void 0 ? void 0 :
|
|
26
|
+
_b.map(function (attrs, index) { return react_1["default"].createElement("link", __assign({ key: index }, attrs)); }), (_c = props.styles) === null || _c === void 0 ? void 0 :
|
|
27
|
+
_c.map(function (attrs, index) { return (react_1["default"].createElement("style", __assign({ key: index }, attrs, { dangerouslySetInnerHTML: {
|
|
28
|
+
__html: attrs.innerHtml
|
|
29
|
+
} }))); }), (_d = props.scripts) === null || _d === void 0 ? void 0 :
|
|
30
|
+
_d.map(function (attrs, index) { return (react_1["default"].createElement("script", __assign({ key: index }, attrs, { dangerouslySetInnerHTML: {
|
|
31
|
+
__html: attrs.innerHtml
|
|
32
|
+
} }))); }), (_e = props.noScripts) === null || _e === void 0 ? void 0 :
|
|
33
|
+
_e.map(function (attrs, index) { return (react_1["default"].createElement("noscript", { key: index, dangerouslySetInnerHTML: {
|
|
34
|
+
__html: attrs.innerHtml
|
|
35
|
+
} })); }),
|
|
36
|
+
props.children));
|
|
37
|
+
}
|
|
38
|
+
exports["default"] = Meta;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
var Meta_1 = __importDefault(require("./Meta"));
|
|
7
|
+
exports["default"] = Meta_1["default"];
|
|
@@ -54,7 +54,7 @@ function Notifications(props) {
|
|
|
54
54
|
if (props.initialFlashes) {
|
|
55
55
|
dispatch(notifications_1.setFlashes(props.initialFlashes));
|
|
56
56
|
// Disable scroll or scroll to top on show notifications
|
|
57
|
-
if (
|
|
57
|
+
if (!process.env.IS_SSR) {
|
|
58
58
|
if ('scrollRestoration' in window.history) {
|
|
59
59
|
window.history.scrollRestoration = 'manual';
|
|
60
60
|
}
|
package/ui/layout/Portal.js
CHANGED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface IProgressBarViewProps {
|
|
3
|
+
percent: number;
|
|
4
|
+
status?: 'normal' | 'success' | 'exception';
|
|
5
|
+
size?: 'small' | 'medium' | 'large';
|
|
6
|
+
label?: string | React.ReactNode;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* ProgressBar
|
|
10
|
+
* Progress bar. Отображает текущий прогресс какой-либо операции
|
|
11
|
+
*/
|
|
12
|
+
interface IProgressBarProps {
|
|
13
|
+
/**
|
|
14
|
+
* Прогресс в процентах
|
|
15
|
+
*/
|
|
16
|
+
percent: number;
|
|
17
|
+
/**
|
|
18
|
+
* Статус компонента
|
|
19
|
+
*/
|
|
20
|
+
status?: 'normal' | 'success' | 'exception';
|
|
21
|
+
/**
|
|
22
|
+
* Размер компонента
|
|
23
|
+
*/
|
|
24
|
+
size?: 'small' | 'medium' | 'large';
|
|
25
|
+
/**
|
|
26
|
+
* Тип компонента - круг или линия
|
|
27
|
+
*/
|
|
28
|
+
type?: 'line' | 'circle';
|
|
29
|
+
/**
|
|
30
|
+
* Флаг, определяющий показывать ли лейбл
|
|
31
|
+
*/
|
|
32
|
+
showLabel?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Функция, позволяющая изменить генерация лейбла
|
|
35
|
+
* @param percent Прогресс в процентах
|
|
36
|
+
*/
|
|
37
|
+
label?: (percent: number) => string;
|
|
38
|
+
/**
|
|
39
|
+
* Функция, позволяющая задавать собственные иконки в зависимости от прогресса и статуса
|
|
40
|
+
* @param status Статус компонента
|
|
41
|
+
* @param percent Прогресс в процентах
|
|
42
|
+
*/
|
|
43
|
+
icon?: (status: string, percent: number) => React.ReactNode;
|
|
44
|
+
}
|
|
45
|
+
declare function ProgressBar(props: IProgressBarProps): JSX.Element;
|
|
46
|
+
declare namespace ProgressBar {
|
|
47
|
+
var defaultProps: {
|
|
48
|
+
status: string;
|
|
49
|
+
size: string;
|
|
50
|
+
type: string;
|
|
51
|
+
showLabel: boolean;
|
|
52
|
+
label: (percent: any) => string;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export default ProgressBar;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
+
};
|
|
24
|
+
exports.__esModule = true;
|
|
25
|
+
var hooks_1 = require("../../../hooks");
|
|
26
|
+
var Icon_1 = __importDefault(require("@steroidsjs/core/ui/icon/Icon/Icon"));
|
|
27
|
+
var React = __importStar(require("react"));
|
|
28
|
+
function ProgressBar(props) {
|
|
29
|
+
var getLabel = (function () {
|
|
30
|
+
if (!props.showLabel)
|
|
31
|
+
return null;
|
|
32
|
+
if (props.icon)
|
|
33
|
+
return props.icon(props.status, props.percent);
|
|
34
|
+
if (props.status === 'success')
|
|
35
|
+
return React.createElement(Icon_1["default"], { name: 'check' });
|
|
36
|
+
if (props.status === 'exception')
|
|
37
|
+
return React.createElement(Icon_1["default"], { name: 'times' });
|
|
38
|
+
return props.label(props.percent);
|
|
39
|
+
});
|
|
40
|
+
if (props.type === 'line')
|
|
41
|
+
return hooks_1.useComponents().ui.renderView('layout.LineProgressBarView', { percent: props.percent, status: props.status, size: props.size, label: getLabel() });
|
|
42
|
+
else
|
|
43
|
+
return hooks_1.useComponents().ui.renderView('layout.CircleProgressBarView', { percent: props.percent, status: props.status, size: props.size, label: getLabel() });
|
|
44
|
+
}
|
|
45
|
+
ProgressBar.defaultProps = {
|
|
46
|
+
status: 'normal',
|
|
47
|
+
size: 'medium',
|
|
48
|
+
type: 'line',
|
|
49
|
+
showLabel: true,
|
|
50
|
+
label: function (percent) { return percent + "%"; }
|
|
51
|
+
};
|
|
52
|
+
exports["default"] = ProgressBar;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
var ProgressBar_1 = __importDefault(require("./ProgressBar"));
|
|
7
|
+
exports["default"] = ProgressBar_1["default"];
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface ISkeletonViewProps {
|
|
3
|
+
className?: string;
|
|
4
|
+
children?: React.ReactNode;
|
|
5
|
+
animation?: 'pulse' | 'wave';
|
|
6
|
+
type?: 'text' | 'rect' | 'circle';
|
|
7
|
+
height?: string | number;
|
|
8
|
+
width?: string | number;
|
|
9
|
+
}
|
|
10
|
+
interface ISkeletonProps {
|
|
11
|
+
className?: string;
|
|
12
|
+
children?: React.ReactNode;
|
|
13
|
+
animation?: 'pulse' | 'wave';
|
|
14
|
+
type?: 'text' | 'rect' | 'circle';
|
|
15
|
+
height?: string | number;
|
|
16
|
+
width?: string | number;
|
|
17
|
+
}
|
|
18
|
+
declare function Skeleton(props: ISkeletonProps): JSX.Element;
|
|
19
|
+
declare namespace Skeleton {
|
|
20
|
+
var defaultProps: {
|
|
21
|
+
animation: string;
|
|
22
|
+
type: string;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export default Skeleton;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
exports.__esModule = true;
|
|
3
|
+
var hooks_1 = require("../../../hooks");
|
|
4
|
+
function Skeleton(props) {
|
|
5
|
+
return hooks_1.useComponents().ui.renderView('layout.SkeletonView', props);
|
|
6
|
+
}
|
|
7
|
+
Skeleton.defaultProps = {
|
|
8
|
+
animation: 'pulse',
|
|
9
|
+
type: 'text'
|
|
10
|
+
};
|
|
11
|
+
exports["default"] = Skeleton;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
var Skeleton_1 = __importDefault(require("./Skeleton"));
|
|
7
|
+
exports["default"] = Skeleton_1["default"];
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface IStepsProps {
|
|
3
|
+
stepItems: IStepItem[];
|
|
4
|
+
currentStep: number;
|
|
5
|
+
isChangeable?: boolean;
|
|
6
|
+
className?: string;
|
|
7
|
+
onChange?: (index: number) => void;
|
|
8
|
+
}
|
|
9
|
+
export interface IStepsViewProps {
|
|
10
|
+
className?: string;
|
|
11
|
+
children?: React.ReactNode;
|
|
12
|
+
}
|
|
13
|
+
export interface IStepItemViewProps {
|
|
14
|
+
stepItem: IStepItem;
|
|
15
|
+
className?: string;
|
|
16
|
+
index: number;
|
|
17
|
+
status: string;
|
|
18
|
+
disabled: boolean;
|
|
19
|
+
onChange: () => void;
|
|
20
|
+
}
|
|
21
|
+
export interface IStepItem {
|
|
22
|
+
title?: string;
|
|
23
|
+
subtitle?: string;
|
|
24
|
+
description?: string;
|
|
25
|
+
icon?: string | React.ReactNode;
|
|
26
|
+
isError?: boolean;
|
|
27
|
+
}
|
|
28
|
+
declare function Steps(props: IStepsProps): JSX.Element;
|
|
29
|
+
declare namespace Steps {
|
|
30
|
+
var defaultProps: {};
|
|
31
|
+
}
|
|
32
|
+
export default Steps;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
exports.__esModule = true;
|
|
3
|
+
var hooks_1 = require("../../../hooks");
|
|
4
|
+
var react_1 = require("react");
|
|
5
|
+
function Steps(props) {
|
|
6
|
+
var _a = react_1.useState(false), isChangeable = _a[0], setIsChangeable = _a[1];
|
|
7
|
+
react_1.useEffect(function () { return setIsChangeable(props.isChangeable); }, [props.isChangeable]);
|
|
8
|
+
function getStepStatus(index, stepItem) {
|
|
9
|
+
if (stepItem.isError)
|
|
10
|
+
return 'error';
|
|
11
|
+
if (props.currentStep < index)
|
|
12
|
+
return 'wait';
|
|
13
|
+
if (props.currentStep === index)
|
|
14
|
+
return 'active';
|
|
15
|
+
return 'finish';
|
|
16
|
+
}
|
|
17
|
+
return hooks_1.useComponents().ui.renderView("list.StepsView", { className: props.className, children: props.stepItems.map(function (stepItem, index) {
|
|
18
|
+
return hooks_1.useComponents().ui.renderView("list.StepItemView", { stepItem: stepItem, index: index + 1, status: getStepStatus(index, stepItem), disabled: !isChangeable, onChange: function () { if (isChangeable)
|
|
19
|
+
props.onChange(index); } });
|
|
20
|
+
}) });
|
|
21
|
+
}
|
|
22
|
+
Steps.defaultProps = {};
|
|
23
|
+
exports["default"] = Steps;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
var Steps_1 = __importDefault(require("./Steps"));
|
|
7
|
+
exports["default"] = Steps_1["default"];
|