@steroidsjs/core 2.1.0-beta.15 → 2.1.0-beta.19
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/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 +5 -6
- 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/hooks/index.d.ts +2 -1
- package/hooks/index.js +3 -1
- 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/useFetch.d.ts +11 -3
- package/hooks/useFetch.js +34 -31
- 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 +4 -2
- 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 +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/index.d.ts +13 -0
- package/ui/content/index.js +22 -0
- package/ui/crud/Crud/Crud.d.ts +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/DropDownField/DropDownField.js +4 -2
- package/ui/form/Form/Form.js +1 -1
- package/ui/form/InputField/InputField.d.ts +7 -0
- package/ui/form/InputField/InputField.js +1 -0
- 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/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,63 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
interface ICollapseProps {
|
|
3
|
+
view?: any;
|
|
4
|
+
style?: React.CSSProperties;
|
|
5
|
+
children?: any;
|
|
6
|
+
/**
|
|
7
|
+
* Дополнительный CSS-класс
|
|
8
|
+
*/
|
|
9
|
+
className?: CssClassName;
|
|
10
|
+
/**
|
|
11
|
+
* @example {true}
|
|
12
|
+
*/
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Кастомная иконка svg или название иконки
|
|
16
|
+
* @example {'circle'}
|
|
17
|
+
*/
|
|
18
|
+
icon?: React.ReactNode | string;
|
|
19
|
+
/**
|
|
20
|
+
* Показ иконки, которая показывает состояние CollapseItem. Поумолчанию включены.
|
|
21
|
+
* @example {false}
|
|
22
|
+
*/
|
|
23
|
+
showIcon?: boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Позиция иконки-индикатора
|
|
26
|
+
* @example {'left'}
|
|
27
|
+
*/
|
|
28
|
+
iconPosition?: 'left' | 'right';
|
|
29
|
+
/**
|
|
30
|
+
* Включает режим Аккордиона (только один CollapseItem может быть открыт)
|
|
31
|
+
* @example {true}
|
|
32
|
+
*/
|
|
33
|
+
isAccordion?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Номер активного CollapseItem, который может меняться динамический или быть статичным
|
|
36
|
+
* @example
|
|
37
|
+
*/
|
|
38
|
+
activeKey?: number;
|
|
39
|
+
/**
|
|
40
|
+
* Вызываемая функция при каждом изменении состояния
|
|
41
|
+
* @example {() => {console.log('success')}}
|
|
42
|
+
*/
|
|
43
|
+
onChange?: () => void;
|
|
44
|
+
/**
|
|
45
|
+
* Отключение внешних рамок
|
|
46
|
+
* @example {true}
|
|
47
|
+
*/
|
|
48
|
+
borderless?: boolean;
|
|
49
|
+
}
|
|
50
|
+
export interface ICollapseViewProps extends ICollapseProps {
|
|
51
|
+
toggleCollapse: (number: any) => void;
|
|
52
|
+
toggleAccordion: (number: any) => void;
|
|
53
|
+
childIndex: number;
|
|
54
|
+
isShowMore?: boolean;
|
|
55
|
+
}
|
|
56
|
+
declare function Collapse(props: ICollapseProps): JSX.Element;
|
|
57
|
+
declare namespace Collapse {
|
|
58
|
+
var defaultProps: {
|
|
59
|
+
iconPosition: string;
|
|
60
|
+
showIcon: boolean;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export default Collapse;
|
|
@@ -0,0 +1,75 @@
|
|
|
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 __spreadArray = (this && this.__spreadArray) || function (to, from) {
|
|
33
|
+
for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
|
|
34
|
+
to[j] = from[i];
|
|
35
|
+
return to;
|
|
36
|
+
};
|
|
37
|
+
exports.__esModule = true;
|
|
38
|
+
var React = __importStar(require("react"));
|
|
39
|
+
var hooks_1 = require("@steroidsjs/core/hooks");
|
|
40
|
+
function Collapse(props) {
|
|
41
|
+
var _a = React.useState([]), state = _a[0], setState = _a[1];
|
|
42
|
+
React.useEffect(props.onChange, [state]);
|
|
43
|
+
var toggleCollapse = function (indexSelected) {
|
|
44
|
+
if (state.includes(indexSelected)) {
|
|
45
|
+
var newState = __spreadArray([], state);
|
|
46
|
+
var indexInArray = state.indexOf(indexSelected);
|
|
47
|
+
newState.splice(indexInArray, 1);
|
|
48
|
+
setState(newState);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
var newState = __spreadArray([], state);
|
|
52
|
+
newState.push(indexSelected);
|
|
53
|
+
setState(newState);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
var toggleAccordion = function (indexSelected) {
|
|
57
|
+
if (state.includes(indexSelected)) {
|
|
58
|
+
setState([]);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
var newState = [];
|
|
62
|
+
newState.push(indexSelected);
|
|
63
|
+
setState(newState);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
var components = hooks_1.useComponents();
|
|
67
|
+
var CollapseView = components.ui.getView(props.view || 'content.CollapseView');
|
|
68
|
+
return (React.createElement(CollapseView, __assign({}, props), React.Children.map(props.children, function (child, index) { return React.cloneElement(child, __assign({ activeKey: props.activeKey, isAccordion: props.isAccordion, childIndex: index, toggleAccordion: toggleAccordion,
|
|
69
|
+
toggleCollapse: toggleCollapse, isShowMore: (state || []).includes(index), showIcon: props.showIcon, iconPosition: props.iconPosition, borderless: props.borderless }, child.props)); })));
|
|
70
|
+
}
|
|
71
|
+
Collapse.defaultProps = {
|
|
72
|
+
iconPosition: 'right',
|
|
73
|
+
showIcon: true
|
|
74
|
+
};
|
|
75
|
+
exports["default"] = Collapse;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
interface ICollapseItemProps {
|
|
3
|
+
view?: any;
|
|
4
|
+
style?: React.CSSProperties;
|
|
5
|
+
children?: any;
|
|
6
|
+
/**
|
|
7
|
+
* Дополнительный CSS-класс
|
|
8
|
+
*/
|
|
9
|
+
className?: CssClassName;
|
|
10
|
+
/**
|
|
11
|
+
* Название CollapseItem
|
|
12
|
+
* @example {'Подробнее'}
|
|
13
|
+
*/
|
|
14
|
+
title?: string;
|
|
15
|
+
/**
|
|
16
|
+
* @example {true}
|
|
17
|
+
*/
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Кастомная иконка svg или название иконки
|
|
21
|
+
* @example {'circle'}
|
|
22
|
+
*/
|
|
23
|
+
icon?: React.ReactNode | string;
|
|
24
|
+
/**
|
|
25
|
+
* Показ иконки, которая показывает состояние CollapseItem. Поумолчанию включены.
|
|
26
|
+
* @example {false}
|
|
27
|
+
*/
|
|
28
|
+
showIcon?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Позиция иконки-индикатора
|
|
31
|
+
* @example {'left'}
|
|
32
|
+
*/
|
|
33
|
+
iconPosition?: 'left' | 'right';
|
|
34
|
+
/**
|
|
35
|
+
* Включает режим Аккордиона (только один CollapseItem может быть открыт)
|
|
36
|
+
* @example {true}
|
|
37
|
+
*/
|
|
38
|
+
isAccordion?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Номер активного CollapseItem, который может меняться динамический или быть статичным
|
|
41
|
+
* @example
|
|
42
|
+
*/
|
|
43
|
+
activeKey?: number;
|
|
44
|
+
/**
|
|
45
|
+
* Вызываемая функция при каждом изменении состояния
|
|
46
|
+
* @example {() => {console.log('success')}}
|
|
47
|
+
*/
|
|
48
|
+
onChange?: () => void;
|
|
49
|
+
/**
|
|
50
|
+
* Отключение внешних рамок
|
|
51
|
+
* @example {true}
|
|
52
|
+
*/
|
|
53
|
+
borderless?: boolean;
|
|
54
|
+
}
|
|
55
|
+
export interface ICollapseItemViewProps extends ICollapseItemProps {
|
|
56
|
+
toggleCollapse?: (number: any) => void;
|
|
57
|
+
toggleAccordion?: (number: any) => void;
|
|
58
|
+
childIndex?: number;
|
|
59
|
+
isShowMore?: boolean;
|
|
60
|
+
}
|
|
61
|
+
declare function CollapseItem(props: ICollapseItemProps): any;
|
|
62
|
+
declare namespace CollapseItem {
|
|
63
|
+
var defaultProps: {
|
|
64
|
+
title: string;
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
export default CollapseItem;
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
+
exports.__esModule = true;
|
|
14
|
+
var hooks_1 = require("@steroidsjs/core/hooks");
|
|
15
|
+
function CollapseItem(props) {
|
|
16
|
+
var components = hooks_1.useComponents();
|
|
17
|
+
return components.ui.renderView(props.view || 'content.CollapseItemView', __assign({}, props));
|
|
18
|
+
}
|
|
19
|
+
CollapseItem.defaultProps = {
|
|
20
|
+
title: 'Collapse'
|
|
21
|
+
};
|
|
22
|
+
exports["default"] = CollapseItem;
|
|
@@ -0,0 +1,8 @@
|
|
|
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 CollapseItem_1 = __importDefault(require("./CollapseItem"));
|
|
7
|
+
var Collapse_1 = __importDefault(require("./Collapse"));
|
|
8
|
+
exports["default"] = { CollapseItem: CollapseItem_1["default"], Collapse: Collapse_1["default"] };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Avatar, AvatarGroup } from './Avatar';
|
|
2
|
+
import Card from './Card';
|
|
3
|
+
import DropDown from './DropDown';
|
|
4
|
+
import Alert from './Alert';
|
|
5
|
+
export { Avatar, AvatarGroup, Alert, Card, DropDown, };
|
|
6
|
+
declare const _default: {
|
|
7
|
+
Avatar: typeof Avatar;
|
|
8
|
+
AvatarGroup: typeof AvatarGroup;
|
|
9
|
+
Alert: typeof Alert;
|
|
10
|
+
Card: typeof Card;
|
|
11
|
+
DropDown: typeof DropDown;
|
|
12
|
+
};
|
|
13
|
+
export default _default;
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
+
exports.DropDown = exports.Card = exports.Alert = exports.AvatarGroup = exports.Avatar = void 0;
|
|
7
|
+
var Avatar_1 = require("./Avatar");
|
|
8
|
+
exports.Avatar = Avatar_1.Avatar;
|
|
9
|
+
exports.AvatarGroup = Avatar_1.AvatarGroup;
|
|
10
|
+
var Card_1 = __importDefault(require("./Card"));
|
|
11
|
+
exports.Card = Card_1["default"];
|
|
12
|
+
var DropDown_1 = __importDefault(require("./DropDown"));
|
|
13
|
+
exports.DropDown = DropDown_1["default"];
|
|
14
|
+
var Alert_1 = __importDefault(require("./Alert"));
|
|
15
|
+
exports.Alert = Alert_1["default"];
|
|
16
|
+
exports["default"] = {
|
|
17
|
+
Avatar: Avatar_1.Avatar,
|
|
18
|
+
AvatarGroup: Avatar_1.AvatarGroup,
|
|
19
|
+
Alert: Alert_1["default"],
|
|
20
|
+
Card: Card_1["default"],
|
|
21
|
+
DropDown: DropDown_1["default"]
|
|
22
|
+
};
|
package/ui/crud/Crud/Crud.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
3
|
import { IApiRest } from '../../../components/ApiComponent';
|
|
4
|
-
import { IComponents } from '../../../
|
|
4
|
+
import { IComponents } from '../../../providers/ComponentsProvider';
|
|
5
5
|
import { IComponentsHocOutput } from '../../../hoc/components';
|
|
6
6
|
import { IConnectHocOutput } from '../../../hoc/connect';
|
|
7
7
|
import { IFormProps } from '../../form/Form/Form';
|
package/ui/crud/index.d.ts
CHANGED
|
@@ -31,4 +31,5 @@ export declare const generateCrud: (routeId: string, props: ICrudGeneratorProps)
|
|
|
31
31
|
items?: IRouteItem[] | {
|
|
32
32
|
[key: string]: IRouteItem;
|
|
33
33
|
};
|
|
34
|
+
preloadData?: (match: Record<string, any>) => (import("../../hooks/useFetch").IFetchConfig | import("../list/List/List").IListProps)[];
|
|
34
35
|
};
|
package/ui/form/Button/Button.js
CHANGED
|
@@ -66,7 +66,9 @@ function DropDownField(props) {
|
|
|
66
66
|
}, [setIsFocused, setIsOpened]);
|
|
67
67
|
// Outside click -> close
|
|
68
68
|
var forwardedRef = react_1.useRef(null);
|
|
69
|
-
|
|
69
|
+
if (process.env.PLATFORM !== 'mobile') {
|
|
70
|
+
react_use_1.useClickAway(forwardedRef, onClose);
|
|
71
|
+
}
|
|
70
72
|
// Search input props
|
|
71
73
|
var searchInputProps = react_1.useMemo(function () { return ({
|
|
72
74
|
type: 'search',
|
|
@@ -89,7 +91,7 @@ function DropDownField(props) {
|
|
|
89
91
|
if (props.input.value === undefined && selectedIds.length > 0) {
|
|
90
92
|
onReset();
|
|
91
93
|
}
|
|
92
|
-
}, [selectedIds, props.input.onChange, props.multiple, prevSelectedIds, props.attribute, props]);
|
|
94
|
+
}, [selectedIds, props.input.onChange, props.multiple, prevSelectedIds, props.attribute, props, onReset]);
|
|
93
95
|
return components.ui.renderView(props.view || 'form.DropDownFieldView', __assign(__assign({}, props), { isAutoComplete: isAutoComplete,
|
|
94
96
|
items: items,
|
|
95
97
|
hoveredId: hoveredId,
|
package/ui/form/Form/Form.js
CHANGED
|
@@ -284,7 +284,7 @@ function Form(props) {
|
|
|
284
284
|
// Manual submit form by reducer action
|
|
285
285
|
var prevSubmitCounter = react_use_1.usePrevious(submitCounter);
|
|
286
286
|
react_use_1.useUpdateEffect(function () {
|
|
287
|
-
if (submitCounter
|
|
287
|
+
if (submitCounter !== prevSubmitCounter) {
|
|
288
288
|
onSubmit.call(null);
|
|
289
289
|
}
|
|
290
290
|
}, [prevSubmitCounter, submitCounter, onSubmit]);
|
|
@@ -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 {
|
|
@@ -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;
|