amis 1.4.2-beta.13 → 1.4.2-beta.18
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/lib/Schema.d.ts +4 -3
- package/lib/Schema.js.map +1 -1
- package/lib/components/Alert2.d.ts +26 -21
- package/lib/components/Alert2.js +11 -4
- package/lib/components/Alert2.js.map +2 -2
- package/lib/components/AssociatedSelection.js +2 -2
- package/lib/components/AssociatedSelection.js.map +2 -2
- package/lib/components/Button.js +1 -1
- package/lib/components/Button.js.map +2 -2
- package/lib/components/Checkbox.d.ts +20 -20
- package/lib/components/Collapse.d.ts +51 -23
- package/lib/components/Collapse.js +70 -11
- package/lib/components/Collapse.js.map +2 -2
- package/lib/components/CollapseGroup.d.ts +88 -0
- package/lib/components/CollapseGroup.js +81 -0
- package/lib/components/CollapseGroup.js.map +13 -0
- package/lib/components/ColorPicker.d.ts +5 -1
- package/lib/components/ColorPicker.js +17 -4
- package/lib/components/ColorPicker.js.map +2 -2
- package/lib/components/Editor.d.ts +84 -84
- package/lib/components/GridNav.d.ts +52 -0
- package/lib/components/GridNav.js +123 -0
- package/lib/components/GridNav.js.map +13 -0
- package/lib/components/ListGroup.d.ts +21 -21
- package/lib/components/Overlay.js +5 -0
- package/lib/components/Overlay.js.map +2 -2
- package/lib/components/PopOver.d.ts +1 -0
- package/lib/components/PopOver.js +12 -1
- package/lib/components/PopOver.js.map +2 -2
- package/lib/components/Tabs.d.ts +20 -20
- package/lib/components/TabsTransfer.d.ts +84 -84
- package/lib/components/Toast.d.ts +90 -87
- package/lib/components/Toast.js +15 -5
- package/lib/components/Toast.js.map +2 -2
- package/lib/components/Transfer.d.ts +84 -84
- package/lib/components/TransferDropDown.d.ts +84 -84
- package/lib/components/Tree.d.ts +115 -84
- package/lib/components/Tree.js +183 -30
- package/lib/components/Tree.js.map +2 -2
- package/lib/components/condition-builder/Field.js +2 -3
- package/lib/components/condition-builder/Field.js.map +2 -2
- package/lib/components/icons.js +8 -0
- package/lib/components/icons.js.map +2 -2
- package/lib/envOverwrite.d.ts +1 -1
- package/lib/envOverwrite.js +24 -9
- package/lib/envOverwrite.js.map +2 -2
- package/lib/factory.d.ts +11 -1
- package/lib/factory.js +31 -4
- package/lib/factory.js.map +2 -2
- package/lib/icons/alert-danger.js +7 -0
- package/lib/icons/alert-info.js +7 -0
- package/lib/icons/alert-success.js +7 -0
- package/lib/icons/alert-warning.js +7 -0
- package/lib/icons/drag-bar.js +10 -3
- package/lib/index.d.ts +2 -0
- package/lib/index.js +3 -1
- package/lib/index.js.map +2 -2
- package/lib/renderers/Alert.d.ts +21 -1
- package/lib/renderers/Alert.js.map +2 -2
- package/lib/renderers/Card.d.ts +1 -0
- package/lib/renderers/Card.js +7 -2
- package/lib/renderers/Card.js.map +2 -2
- package/lib/renderers/Collapse.d.ts +25 -20
- package/lib/renderers/Collapse.js +10 -73
- package/lib/renderers/Collapse.js.map +2 -2
- package/lib/renderers/CollapseGroup.d.ts +42 -0
- package/lib/renderers/CollapseGroup.js +33 -0
- package/lib/renderers/CollapseGroup.js.map +13 -0
- package/lib/renderers/Form/ConditionBuilder.js +2 -2
- package/lib/renderers/Form/ConditionBuilder.js.map +2 -2
- package/lib/renderers/Form/InputCity.d.ts +84 -84
- package/lib/renderers/Form/InputColor.d.ts +2 -1
- package/lib/renderers/Form/InputColor.js +1 -1
- package/lib/renderers/Form/InputColor.js.map +2 -2
- package/lib/renderers/Form/Item.js +2 -1
- package/lib/renderers/Form/Item.js.map +2 -2
- package/lib/renderers/GridNav.d.ts +99 -0
- package/lib/renderers/GridNav.js +82 -0
- package/lib/renderers/GridNav.js.map +13 -0
- package/lib/renderers/Page.d.ts +18 -0
- package/lib/renderers/Page.js +53 -9
- package/lib/renderers/Page.js.map +2 -2
- package/lib/store/formItem.js +44 -4
- package/lib/store/formItem.js.map +2 -2
- package/lib/themes/ang-ie11.css +324 -49
- package/lib/themes/ang.css +324 -49
- package/lib/themes/ang.css.map +1 -1
- package/lib/themes/antd-ie11.css +324 -49
- package/lib/themes/antd.css +324 -49
- package/lib/themes/antd.css.map +1 -1
- package/lib/themes/cxd-ie11.css +331 -58
- package/lib/themes/cxd.css +331 -58
- package/lib/themes/cxd.css.map +1 -1
- package/lib/themes/dark-ie11.css +324 -49
- package/lib/themes/dark.css +324 -49
- package/lib/themes/dark.css.map +1 -1
- package/lib/themes/default.css +331 -58
- package/lib/themes/default.css.map +1 -1
- package/lib/types.d.ts +1 -1
- package/lib/types.js.map +1 -1
- package/lib/utils/api.d.ts +1 -0
- package/lib/utils/api.js +77 -6
- package/lib/utils/api.js.map +2 -2
- package/lib/utils/helper.d.ts +8 -0
- package/lib/utils/helper.js +33 -2
- package/lib/utils/helper.js.map +2 -2
- package/lib/utils/tpl-builtin.js +5 -0
- package/lib/utils/tpl-builtin.js.map +2 -2
- package/package.json +1 -1
- package/schema.json +365 -49
- package/scss/_properties.scss +2 -1
- package/scss/components/_alert.scss +28 -5
- package/scss/components/_anchor-nav.scss +1 -0
- package/scss/components/_button.scss +5 -0
- package/scss/components/_card.scss +1 -1
- package/scss/components/_collapse-group.scss +15 -0
- package/scss/components/_collapse.scss +33 -23
- package/scss/components/_grid-nav.scss +128 -0
- package/scss/components/_nav.scss +2 -7
- package/scss/components/_page.scss +35 -2
- package/scss/components/_spinner.scss +5 -4
- package/scss/components/_table.scss +6 -0
- package/scss/components/_toast.scss +41 -11
- package/scss/components/form/_color.scss +32 -3
- package/scss/components/form/_combo.scss +4 -0
- package/scss/components/form/_fieldset.scss +1 -0
- package/scss/components/form/_transfer.scss +1 -0
- package/scss/components/form/_tree.scss +42 -0
- package/scss/themes/_common.scss +2 -0
- package/scss/themes/_cxd-variables.scss +9 -4
- package/scss/themes/cxd.scss +1 -7
- package/sdk/ang-ie11.css +375 -53
- package/sdk/ang.css +377 -53
- package/sdk/antd-ie11.css +375 -53
- package/sdk/antd.css +377 -53
- package/sdk/charts.js +13 -13
- package/sdk/color-picker.js +69 -65
- package/sdk/cropperjs.js +2 -2
- package/sdk/cxd-ie11.css +379 -60
- package/sdk/cxd.css +384 -62
- package/sdk/dark-ie11.css +375 -53
- package/sdk/dark.css +377 -53
- package/sdk/exceljs.js +1 -1
- package/sdk/markdown.js +69 -69
- package/sdk/papaparse.js +1 -1
- package/sdk/renderers/Form/CityDB.js +1 -1
- package/sdk/rest.js +16 -20
- package/sdk/rich-text.js +62 -62
- package/sdk/sdk-ie11.css +379 -60
- package/sdk/sdk.css +384 -62
- package/sdk/sdk.js +1215 -1173
- package/sdk/thirds/hls.js/hls.js +1 -1
- package/sdk/thirds/mpegts.js/mpegts.js +1 -1
- package/sdk/tinymce.js +57 -57
- package/src/Schema.ts +5 -1
- package/src/components/Alert2.tsx +32 -4
- package/src/components/AssociatedSelection.tsx +3 -1
- package/src/components/Button.tsx +1 -0
- package/src/components/Collapse.tsx +139 -20
- package/src/components/CollapseGroup.tsx +130 -0
- package/src/components/ColorPicker.tsx +32 -10
- package/src/components/GridNav.tsx +233 -0
- package/src/components/Overlay.tsx +6 -0
- package/src/components/PopOver.tsx +15 -1
- package/src/components/Toast.tsx +48 -21
- package/src/components/Tree.tsx +194 -8
- package/src/components/condition-builder/Field.tsx +3 -1
- package/src/components/icons.tsx +8 -0
- package/src/envOverwrite.ts +20 -7
- package/src/factory.tsx +52 -6
- package/src/icons/alert-danger.svg +1 -0
- package/src/icons/alert-info.svg +1 -0
- package/src/icons/alert-success.svg +1 -0
- package/src/icons/alert-warning.svg +1 -0
- package/src/icons/drag-bar.svg +12 -6
- package/src/index.tsx +2 -0
- package/src/renderers/Alert.tsx +31 -1
- package/src/renderers/Card.tsx +13 -2
- package/src/renderers/Collapse.tsx +70 -117
- package/src/renderers/CollapseGroup.tsx +80 -0
- package/src/renderers/Form/ConditionBuilder.tsx +2 -2
- package/src/renderers/Form/InputColor.tsx +4 -2
- package/src/renderers/GridNav.tsx +204 -0
- package/src/renderers/Page.tsx +62 -1
- package/src/store/formItem.ts +94 -2
- package/src/types.ts +1 -1
- package/src/utils/api.ts +93 -6
- package/src/utils/helper.ts +33 -0
- package/src/utils/tpl-builtin.ts +6 -0
- package/tsconfig-for-declaration.json +1 -1
@@ -0,0 +1,233 @@
|
|
1
|
+
/**
|
2
|
+
* @file GridNav
|
3
|
+
* @description 金刚位宫格导航 参考react-vant
|
4
|
+
*/
|
5
|
+
|
6
|
+
import React, {useMemo} from 'react';
|
7
|
+
import {ClassNamesFn} from '../theme';
|
8
|
+
import {Badge, BadgeProps} from './Badge';
|
9
|
+
|
10
|
+
export type GridNavDirection = 'horizontal' | 'vertical';
|
11
|
+
|
12
|
+
export interface GridNavProps {
|
13
|
+
/** 是否将格子固定为正方形 */
|
14
|
+
square?: boolean;
|
15
|
+
/** 是否将格子内容居中显示 */
|
16
|
+
center?: boolean;
|
17
|
+
/** 是否显示边框 */
|
18
|
+
border?: boolean;
|
19
|
+
/** 格子之间的间距,默认单位为`px` */
|
20
|
+
gutter?: number;
|
21
|
+
/** 是否调换图标和文本的位置 */
|
22
|
+
reverse?: boolean;
|
23
|
+
/** 图标占比,默认单位为`%` */
|
24
|
+
iconRatio?: number;
|
25
|
+
/** 格子内容排列的方向,可选值为 `horizontal` */
|
26
|
+
direction?: GridNavDirection;
|
27
|
+
/** 列数 */
|
28
|
+
columnNum?: number;
|
29
|
+
className?: string;
|
30
|
+
itemClassName?: string;
|
31
|
+
classnames: ClassNamesFn;
|
32
|
+
style?: React.CSSProperties;
|
33
|
+
}
|
34
|
+
|
35
|
+
export interface GridNavItemProps {
|
36
|
+
/** 图标右上角徽标 */
|
37
|
+
badge?: BadgeProps;
|
38
|
+
/** 文字 */
|
39
|
+
text?: string | React.ReactNode;
|
40
|
+
/** 图标名称或图片链接 */
|
41
|
+
icon?: string | React.ReactNode;
|
42
|
+
className?: string;
|
43
|
+
style?: React.CSSProperties;
|
44
|
+
contentClassName?: string;
|
45
|
+
contentStyle?: React.CSSProperties;
|
46
|
+
children?: React.ReactNode;
|
47
|
+
classnames: ClassNamesFn;
|
48
|
+
onClick?: (event: React.MouseEvent) => void;
|
49
|
+
}
|
50
|
+
|
51
|
+
type InternalProps = {
|
52
|
+
parent?: GridNavProps;
|
53
|
+
index?: number;
|
54
|
+
};
|
55
|
+
|
56
|
+
function addUnit(value?: string | number): string | undefined {
|
57
|
+
if (value === undefined || value === null) {
|
58
|
+
return undefined;
|
59
|
+
}
|
60
|
+
value = String(value);
|
61
|
+
return /^\d+(\.\d+)?$/.test(value) ? `${value}px` : value;
|
62
|
+
}
|
63
|
+
|
64
|
+
export const GridNavItem: React.FC<GridNavItemProps & InternalProps> = ({
|
65
|
+
children,
|
66
|
+
classnames: cx,
|
67
|
+
className,
|
68
|
+
style,
|
69
|
+
...props
|
70
|
+
}) => {
|
71
|
+
const {index = 0, parent} = props;
|
72
|
+
if (!parent) {
|
73
|
+
if (process.env.NODE_ENV !== 'production') {
|
74
|
+
// eslint-disable-next-line no-console
|
75
|
+
console.error(
|
76
|
+
'[React Vant] <GridNavItem> must be a child component of <GridNav>.'
|
77
|
+
);
|
78
|
+
}
|
79
|
+
return null;
|
80
|
+
}
|
81
|
+
|
82
|
+
const rootStyle = useMemo(() => {
|
83
|
+
const {square, gutter, columnNum = 4} = parent;
|
84
|
+
const percent = `${100 / +columnNum}%`;
|
85
|
+
const internalStyle: React.CSSProperties = {
|
86
|
+
...style,
|
87
|
+
flexBasis: percent
|
88
|
+
};
|
89
|
+
|
90
|
+
if (square) {
|
91
|
+
internalStyle.paddingTop = percent;
|
92
|
+
} else if (gutter) {
|
93
|
+
const gutterValue = addUnit(gutter);
|
94
|
+
internalStyle.paddingRight = gutterValue;
|
95
|
+
|
96
|
+
if (index >= columnNum) {
|
97
|
+
internalStyle.marginTop = gutterValue;
|
98
|
+
}
|
99
|
+
}
|
100
|
+
|
101
|
+
return internalStyle;
|
102
|
+
}, [parent.style, parent.gutter, parent.columnNum]);
|
103
|
+
|
104
|
+
const contentStyle = useMemo(() => {
|
105
|
+
const {square, gutter} = parent;
|
106
|
+
|
107
|
+
if (square && gutter) {
|
108
|
+
const gutterValue = addUnit(gutter);
|
109
|
+
return {
|
110
|
+
...props.contentStyle,
|
111
|
+
right: gutterValue,
|
112
|
+
bottom: gutterValue,
|
113
|
+
height: 'auto'
|
114
|
+
};
|
115
|
+
}
|
116
|
+
return props.contentStyle;
|
117
|
+
}, [parent.gutter, parent.columnNum, props.contentStyle]);
|
118
|
+
|
119
|
+
const renderIcon = () => {
|
120
|
+
const ratio = parent.iconRatio || 60;
|
121
|
+
if (typeof props.icon === 'string') {
|
122
|
+
if (props.badge) {
|
123
|
+
return (
|
124
|
+
<Badge {...props.badge}>
|
125
|
+
<div className={cx('GridNavItem-image')}>
|
126
|
+
<img src={props.icon} style={{width: ratio + '%'}} />
|
127
|
+
</div>
|
128
|
+
</Badge>
|
129
|
+
);
|
130
|
+
}
|
131
|
+
return (
|
132
|
+
<div className={cx('GridNavItem-image')}>
|
133
|
+
<img src={props.icon} style={{width: ratio + '%'}} />
|
134
|
+
</div>
|
135
|
+
);
|
136
|
+
}
|
137
|
+
|
138
|
+
if (React.isValidElement(props.icon)) {
|
139
|
+
return <Badge {...(props.badge as BadgeProps)}>{props.icon}</Badge>;
|
140
|
+
}
|
141
|
+
|
142
|
+
return null;
|
143
|
+
};
|
144
|
+
|
145
|
+
const renderText = () => {
|
146
|
+
if (React.isValidElement(props.text)) {
|
147
|
+
return props.text;
|
148
|
+
}
|
149
|
+
if (props.text) {
|
150
|
+
return <span className={cx('GridNavItem-text')}>{props.text}</span>;
|
151
|
+
}
|
152
|
+
return null;
|
153
|
+
};
|
154
|
+
|
155
|
+
const renderContent = () => {
|
156
|
+
if (children) {
|
157
|
+
return children;
|
158
|
+
}
|
159
|
+
return (
|
160
|
+
<>
|
161
|
+
{renderIcon()}
|
162
|
+
{renderText()}
|
163
|
+
</>
|
164
|
+
);
|
165
|
+
};
|
166
|
+
|
167
|
+
const {center, border, square, gutter, reverse, direction} = parent;
|
168
|
+
|
169
|
+
const prefix = 'GridNavItem-content';
|
170
|
+
const classes = cx(`${prefix} ${props.contentClassName || ''}`, {
|
171
|
+
[`${prefix}--${direction}`]: !!direction,
|
172
|
+
[`${prefix}--center`]: center,
|
173
|
+
[`${prefix}--square`]: square,
|
174
|
+
[`${prefix}--reverse`]: reverse,
|
175
|
+
[`${prefix}--clickable`]: !!props.onClick,
|
176
|
+
[`${prefix}--surround`]: border && gutter,
|
177
|
+
[`${prefix}--border u-hairline`]: border
|
178
|
+
});
|
179
|
+
|
180
|
+
return (
|
181
|
+
<div
|
182
|
+
className={cx(className, {'GridNavItem--square': square})}
|
183
|
+
style={rootStyle}
|
184
|
+
>
|
185
|
+
<div
|
186
|
+
role={props.onClick ? 'button' : undefined}
|
187
|
+
className={classes}
|
188
|
+
style={contentStyle}
|
189
|
+
onClick={props.onClick}
|
190
|
+
>
|
191
|
+
{renderContent()}
|
192
|
+
</div>
|
193
|
+
</div>
|
194
|
+
);
|
195
|
+
};
|
196
|
+
|
197
|
+
const GridNav: React.FC<GridNavProps> = ({
|
198
|
+
children,
|
199
|
+
className,
|
200
|
+
classnames: cx,
|
201
|
+
itemClassName,
|
202
|
+
style,
|
203
|
+
...props
|
204
|
+
}) => {
|
205
|
+
return (
|
206
|
+
<div
|
207
|
+
style={{paddingLeft: addUnit(props.gutter), ...style}}
|
208
|
+
className={cx(`GridNav ${className || ''}`, {
|
209
|
+
'GridNav-top u-hairline': props.border && !props.gutter
|
210
|
+
})}
|
211
|
+
>
|
212
|
+
{React.Children.toArray(children)
|
213
|
+
.filter(Boolean)
|
214
|
+
.map((child: React.ReactElement, index: number) =>
|
215
|
+
React.cloneElement(child, {
|
216
|
+
index,
|
217
|
+
parent: props,
|
218
|
+
className: itemClassName,
|
219
|
+
classnames: cx
|
220
|
+
})
|
221
|
+
)}
|
222
|
+
</div>
|
223
|
+
);
|
224
|
+
};
|
225
|
+
|
226
|
+
GridNav.defaultProps = {
|
227
|
+
direction: 'vertical',
|
228
|
+
center: true,
|
229
|
+
border: true,
|
230
|
+
columnNum: 4
|
231
|
+
};
|
232
|
+
|
233
|
+
export default GridNav;
|
@@ -295,6 +295,12 @@ export default class Overlay extends React.Component<
|
|
295
295
|
<Portal container={container}>
|
296
296
|
<RootClose onRootClose={props.onHide}>
|
297
297
|
{(ref: any) => {
|
298
|
+
if (React.isValidElement(child)) {
|
299
|
+
return React.cloneElement(child, {
|
300
|
+
ref: ref
|
301
|
+
});
|
302
|
+
}
|
303
|
+
|
298
304
|
return <div ref={ref}>{child}</div>;
|
299
305
|
}}
|
300
306
|
</RootClose>
|
@@ -7,7 +7,7 @@
|
|
7
7
|
import React from 'react';
|
8
8
|
import {findDOMNode} from 'react-dom';
|
9
9
|
import {ClassNamesFn, themeable} from '../theme';
|
10
|
-
import {camel} from '../utils/helper';
|
10
|
+
import {camel, preventDefault} from '../utils/helper';
|
11
11
|
|
12
12
|
export interface Offset {
|
13
13
|
x: number;
|
@@ -53,12 +53,21 @@ export class PopOver extends React.PureComponent<PopOverPorps, PopOverState> {
|
|
53
53
|
};
|
54
54
|
|
55
55
|
parent: HTMLElement;
|
56
|
+
wrapperRef: React.RefObject<HTMLDivElement> = React.createRef();
|
56
57
|
|
57
58
|
componentDidMount() {
|
58
59
|
this.mayUpdateOffset();
|
59
60
|
const dom = findDOMNode(this) as HTMLElement;
|
60
61
|
this.parent = dom.parentNode as HTMLElement;
|
61
62
|
this.parent.classList.add('has-popover');
|
63
|
+
|
64
|
+
if (this.wrapperRef && this.wrapperRef.current) {
|
65
|
+
// https://developer.mozilla.org/zh-CN/docs/Web/API/EventTarget/addEventListener#使用_passive_改善的滚屏性能
|
66
|
+
this.wrapperRef.current.addEventListener('touchmove', preventDefault, {
|
67
|
+
passive: false,
|
68
|
+
capture: false
|
69
|
+
});
|
70
|
+
}
|
62
71
|
}
|
63
72
|
|
64
73
|
componentDidUpdate() {
|
@@ -67,6 +76,10 @@ export class PopOver extends React.PureComponent<PopOverPorps, PopOverState> {
|
|
67
76
|
|
68
77
|
componentWillUnmount() {
|
69
78
|
this.parent && this.parent.classList.remove('has-popover');
|
79
|
+
|
80
|
+
if (this.wrapperRef && this.wrapperRef.current) {
|
81
|
+
this.wrapperRef.current.removeEventListener('touchmove', preventDefault);
|
82
|
+
}
|
70
83
|
}
|
71
84
|
|
72
85
|
mayUpdateOffset() {
|
@@ -122,6 +135,7 @@ export class PopOver extends React.PureComponent<PopOverPorps, PopOverState> {
|
|
122
135
|
|
123
136
|
return (
|
124
137
|
<div
|
138
|
+
ref={this.wrapperRef}
|
125
139
|
className={cx(
|
126
140
|
`${ns}PopOver`,
|
127
141
|
className,
|
package/src/components/Toast.tsx
CHANGED
@@ -51,11 +51,13 @@ interface ToastComponentProps extends ThemeProps, LocaleProps {
|
|
51
51
|
closeButton: boolean;
|
52
52
|
showIcon?: boolean;
|
53
53
|
timeout: number;
|
54
|
+
errorTimeout: number;
|
54
55
|
className?: string;
|
55
56
|
}
|
56
57
|
|
57
58
|
interface Item extends Config {
|
58
|
-
|
59
|
+
title?: string | React.ReactNode;
|
60
|
+
body: string | React.ReactNode;
|
59
61
|
level: 'info' | 'success' | 'error' | 'warning';
|
60
62
|
id: string;
|
61
63
|
onDissmiss?: () => void;
|
@@ -78,11 +80,12 @@ export class ToastComponent extends React.Component<
|
|
78
80
|
> {
|
79
81
|
static defaultProps: Pick<
|
80
82
|
ToastComponentProps,
|
81
|
-
'position' | 'closeButton' | 'timeout'
|
83
|
+
'position' | 'closeButton' | 'timeout' | 'errorTimeout'
|
82
84
|
> = {
|
83
85
|
position: 'top-center',
|
84
86
|
closeButton: false,
|
85
|
-
timeout: 5000
|
87
|
+
timeout: 5000,
|
88
|
+
errorTimeout: 10000 // 错误的时候 time 调长
|
86
89
|
};
|
87
90
|
static themeKey = 'toast';
|
88
91
|
|
@@ -155,18 +158,17 @@ export class ToastComponent extends React.Component<
|
|
155
158
|
classnames: cx,
|
156
159
|
className,
|
157
160
|
timeout,
|
161
|
+
errorTimeout,
|
158
162
|
position,
|
159
163
|
showIcon,
|
160
164
|
translate,
|
161
165
|
closeButton
|
162
166
|
} = this.props;
|
163
167
|
const items = this.state.items;
|
164
|
-
|
165
168
|
const groupedItems = groupBy(items, item => item.position || position);
|
166
169
|
|
167
170
|
return Object.keys(groupedItems).map(position => {
|
168
171
|
const toasts = groupedItems[position];
|
169
|
-
|
170
172
|
return (
|
171
173
|
<div
|
172
174
|
key={position}
|
@@ -177,19 +179,25 @@ export class ToastComponent extends React.Component<
|
|
177
179
|
className
|
178
180
|
)}
|
179
181
|
>
|
180
|
-
{toasts.map(item =>
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
182
|
+
{toasts.map(item => {
|
183
|
+
const level = item.level || 'info';
|
184
|
+
const toastTimeout =
|
185
|
+
item.timeout ?? (level === 'error' ? errorTimeout : timeout);
|
186
|
+
return (
|
187
|
+
<ToastMessage
|
188
|
+
classnames={cx}
|
189
|
+
key={item.id}
|
190
|
+
title={item.title}
|
191
|
+
body={item.body}
|
192
|
+
level={level}
|
193
|
+
timeout={toastTimeout}
|
194
|
+
closeButton={item.closeButton ?? closeButton}
|
195
|
+
onDismiss={this.handleDismissed.bind(this, items.indexOf(item))}
|
196
|
+
translate={translate}
|
197
|
+
showIcon={showIcon}
|
198
|
+
/>
|
199
|
+
);
|
200
|
+
})}
|
193
201
|
</div>
|
194
202
|
);
|
195
203
|
});
|
@@ -199,7 +207,8 @@ export class ToastComponent extends React.Component<
|
|
199
207
|
export default themeable(localeable(ToastComponent));
|
200
208
|
|
201
209
|
interface ToastMessageProps {
|
202
|
-
|
210
|
+
title?: string | React.ReactNode;
|
211
|
+
body: string | React.ReactNode;
|
203
212
|
level: 'info' | 'success' | 'error' | 'warning';
|
204
213
|
timeout: number;
|
205
214
|
closeButton?: boolean;
|
@@ -284,6 +293,7 @@ export class ToastMessage extends React.Component<
|
|
284
293
|
onDismiss,
|
285
294
|
classnames: cx,
|
286
295
|
closeButton,
|
296
|
+
title,
|
287
297
|
body,
|
288
298
|
allowHtml,
|
289
299
|
level,
|
@@ -321,8 +331,25 @@ export class ToastMessage extends React.Component<
|
|
321
331
|
) : null}
|
322
332
|
</div>
|
323
333
|
)}
|
324
|
-
|
325
|
-
|
334
|
+
|
335
|
+
<div className={cx('Toast-content')}>
|
336
|
+
{typeof title === 'string' ? (
|
337
|
+
<span className={cx(`Toast-title`)}>{title}</span>
|
338
|
+
) : React.isValidElement(title) ? (
|
339
|
+
React.cloneElement(title, {
|
340
|
+
className: cx(`Toast-title`, title?.props?.className ?? '')
|
341
|
+
})
|
342
|
+
) : null}
|
343
|
+
|
344
|
+
{typeof body === 'string' ? (
|
345
|
+
<div className={cx('Toast-body')}>
|
346
|
+
{allowHtml ? <Html html={body} /> : body}
|
347
|
+
</div>
|
348
|
+
) : React.isValidElement(body) ? (
|
349
|
+
React.cloneElement(body, {
|
350
|
+
className: cx(`Toast-body`, body?.props?.className ?? '')
|
351
|
+
})
|
352
|
+
) : null}
|
326
353
|
</div>
|
327
354
|
|
328
355
|
{closeButton ? (
|