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
package/src/Schema.ts
CHANGED
@@ -12,6 +12,7 @@ import {FormSchema} from './renderers/Form';
|
|
12
12
|
import {CarouselSchema} from './renderers/Carousel';
|
13
13
|
import {ChartSchema} from './renderers/Chart';
|
14
14
|
import {CollapseSchema} from './renderers/Collapse';
|
15
|
+
import {CollapseGroupSchema} from './renderers/CollapseGroup';
|
15
16
|
import {ColorSchema} from './renderers/Color';
|
16
17
|
import {ContainerSchema} from './renderers/Container';
|
17
18
|
import {CRUDSchema} from './renderers/CRUD';
|
@@ -131,6 +132,7 @@ export type SchemaType =
|
|
131
132
|
| 'carousel'
|
132
133
|
| 'chart'
|
133
134
|
| 'collapse'
|
135
|
+
| 'collapse-group'
|
134
136
|
| 'color'
|
135
137
|
| 'container'
|
136
138
|
| 'crud'
|
@@ -317,6 +319,7 @@ export type SchemaType =
|
|
317
319
|
| 'tree-select'
|
318
320
|
| 'table-view'
|
319
321
|
| 'portlet'
|
322
|
+
| 'grid-nav'
|
320
323
|
|
321
324
|
// 原生 input 类型
|
322
325
|
| 'native-date'
|
@@ -339,6 +342,7 @@ export type SchemaObject =
|
|
339
342
|
| CarouselSchema
|
340
343
|
| ChartSchema
|
341
344
|
| CollapseSchema
|
345
|
+
| CollapseGroupSchema
|
342
346
|
| ColorSchema
|
343
347
|
| ContainerSchema
|
344
348
|
| CRUDSchema
|
@@ -487,7 +491,7 @@ export interface SchemaApiObject {
|
|
487
491
|
/**
|
488
492
|
* API 发送类型
|
489
493
|
*/
|
490
|
-
method?: 'get' | 'post' | 'put' | 'delete' | 'patch';
|
494
|
+
method?: 'get' | 'post' | 'put' | 'delete' | 'patch' | 'jsonp';
|
491
495
|
|
492
496
|
/**
|
493
497
|
* API 发送目标地址
|
@@ -9,8 +9,13 @@ import {Icon} from './icons';
|
|
9
9
|
|
10
10
|
export interface AlertProps {
|
11
11
|
level: 'danger' | 'info' | 'success' | 'warning';
|
12
|
-
|
12
|
+
title?: string;
|
13
|
+
className?: string;
|
13
14
|
showCloseButton: boolean;
|
15
|
+
showIcon?: boolean;
|
16
|
+
icon?: string | React.ReactNode;
|
17
|
+
iconClassName?: string;
|
18
|
+
closeButtonClassName?: string;
|
14
19
|
onClose?: () => void;
|
15
20
|
classnames: ClassNamesFn;
|
16
21
|
classPrefix: string;
|
@@ -60,21 +65,44 @@ export class Alert extends React.Component<AlertProps, AlertState> {
|
|
60
65
|
className,
|
61
66
|
level,
|
62
67
|
children,
|
63
|
-
showCloseButton
|
68
|
+
showCloseButton,
|
69
|
+
title,
|
70
|
+
icon,
|
71
|
+
showIcon,
|
72
|
+
iconClassName,
|
73
|
+
closeButtonClassName
|
64
74
|
} = this.props;
|
65
75
|
|
76
|
+
const iconNode = icon ? (
|
77
|
+
typeof icon === 'string' ? (
|
78
|
+
<Icon icon={icon} className={cx(`Alert-icon icon`)} />
|
79
|
+
) : React.isValidElement(icon) ? (
|
80
|
+
React.cloneElement(icon, {
|
81
|
+
className: cx(`Alert-icon`, icon.props?.className)
|
82
|
+
})
|
83
|
+
) : null
|
84
|
+
) : showIcon ? (
|
85
|
+
<Icon icon={`alert-${level}`} className={cx(`Alert-icon icon`)} />
|
86
|
+
) : null;
|
87
|
+
|
66
88
|
return this.state.show ? (
|
67
89
|
<div className={cx('Alert', level ? `Alert--${level}` : '', className)}>
|
90
|
+
{showIcon && iconNode ? (
|
91
|
+
<div className={cx('Alert-icon', iconClassName)}>{iconNode}</div>
|
92
|
+
) : null}
|
93
|
+
<div className={cx('Alert-content')}>
|
94
|
+
{title ? <div className={cx('Alert-title')}>{title}</div> : null}
|
95
|
+
<div className={cx('Alert-desc')}>{children}</div>
|
96
|
+
</div>
|
68
97
|
{showCloseButton ? (
|
69
98
|
<button
|
70
|
-
className={cx('Alert-close')}
|
99
|
+
className={cx('Alert-close', closeButtonClassName)}
|
71
100
|
onClick={this.handleClick}
|
72
101
|
type="button"
|
73
102
|
>
|
74
103
|
<Icon icon="close" className="icon" />
|
75
104
|
</button>
|
76
105
|
) : null}
|
77
|
-
{children}
|
78
106
|
</div>
|
79
107
|
) : null;
|
80
108
|
}
|
@@ -105,7 +105,8 @@ export class AssociatedSelection extends BaseSelection<
|
|
105
105
|
disabled,
|
106
106
|
leftMode,
|
107
107
|
cellRender,
|
108
|
-
multiple
|
108
|
+
multiple,
|
109
|
+
onDeferLoad
|
109
110
|
} = this.props;
|
110
111
|
|
111
112
|
const selectdOption = BaseSelection.resolveSelected(
|
@@ -127,6 +128,7 @@ export class AssociatedSelection extends BaseSelection<
|
|
127
128
|
onChange={this.handleLeftSelect}
|
128
129
|
multiple={false}
|
129
130
|
clearable={false}
|
131
|
+
onDeferLoad={onDeferLoad}
|
130
132
|
/>
|
131
133
|
) : (
|
132
134
|
<GroupedSelecton
|
@@ -82,6 +82,7 @@ export class Button extends React.Component<ButtonProps> {
|
|
82
82
|
<Comp
|
83
83
|
type={Comp === 'input' || Comp === 'button' ? type : undefined}
|
84
84
|
{...pickEventsProps(rest)}
|
85
|
+
onClick={rest.onClick && disabled ? () => {} : rest.onClick}
|
85
86
|
href={href}
|
86
87
|
className={cx(
|
87
88
|
overrideClassName
|
@@ -12,6 +12,8 @@ import Transition, {
|
|
12
12
|
EXITING
|
13
13
|
} from 'react-transition-group/Transition';
|
14
14
|
import {autobind} from '../utils/helper';
|
15
|
+
import {isClickOnInput} from '../utils/helper';
|
16
|
+
import {TranslateFn} from '../locale';
|
15
17
|
|
16
18
|
const collapseStyles: {
|
17
19
|
[propName: string]: string;
|
@@ -22,24 +24,87 @@ const collapseStyles: {
|
|
22
24
|
};
|
23
25
|
|
24
26
|
export interface CollapseProps {
|
25
|
-
|
27
|
+
key?: string;
|
28
|
+
id?: string;
|
26
29
|
mountOnEnter?: boolean;
|
27
30
|
unmountOnExit?: boolean;
|
28
31
|
className?: string;
|
29
32
|
classPrefix: string;
|
30
33
|
classnames: ClassNamesFn;
|
34
|
+
headerPosition?: 'top' | 'bottom';
|
35
|
+
header?: React.ReactElement;
|
36
|
+
body: any;
|
37
|
+
bodyClassName?: string;
|
38
|
+
disabled?: boolean;
|
39
|
+
collapsable?: boolean;
|
40
|
+
collapsed?: boolean;
|
41
|
+
showArrow?: boolean;
|
42
|
+
expandIcon?: React.ReactElement | null;
|
43
|
+
headingClassName?: string;
|
44
|
+
collapseHeader?: React.ReactElement | null;
|
45
|
+
size?: 'xs' | 'sm' | 'md' | 'lg' | 'base';
|
46
|
+
onCollapse?: (item: any, collapsed: boolean) => void;
|
47
|
+
wrapperComponent?: any;
|
48
|
+
headingComponent?: any;
|
49
|
+
translate?: TranslateFn;
|
50
|
+
propsUpdate?: boolean;
|
31
51
|
}
|
32
52
|
|
33
|
-
export
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
53
|
+
export interface CollapseState {
|
54
|
+
collapsed: boolean;
|
55
|
+
}
|
56
|
+
|
57
|
+
export class Collapse extends React.Component<CollapseProps, CollapseState> {
|
58
|
+
|
59
|
+
static defaultProps: Partial<CollapseProps> = {
|
39
60
|
mountOnEnter: false,
|
40
|
-
unmountOnExit: false
|
61
|
+
unmountOnExit: false,
|
62
|
+
headerPosition: 'top',
|
63
|
+
wrapperComponent: 'div',
|
64
|
+
headingComponent: 'div',
|
65
|
+
className: '',
|
66
|
+
headingClassName: '',
|
67
|
+
bodyClassName: '',
|
68
|
+
collapsable: true,
|
69
|
+
disabled: false,
|
70
|
+
showArrow: true,
|
71
|
+
propsUpdate: false
|
72
|
+
};
|
73
|
+
|
74
|
+
state: CollapseState = {
|
75
|
+
collapsed: false
|
41
76
|
};
|
42
77
|
|
78
|
+
constructor(props: CollapseProps) {
|
79
|
+
super(props);
|
80
|
+
|
81
|
+
this.toggleCollapsed = this.toggleCollapsed.bind(this);
|
82
|
+
this.state.collapsed = !!props.collapsed;
|
83
|
+
}
|
84
|
+
|
85
|
+
static getDerivedStateFromProps(nextProps: CollapseProps, preState: CollapseState) {
|
86
|
+
if (nextProps.propsUpdate && nextProps.collapsed !== preState.collapsed) {
|
87
|
+
return {
|
88
|
+
collapsed: !!nextProps.collapsed
|
89
|
+
};
|
90
|
+
}
|
91
|
+
return null;
|
92
|
+
}
|
93
|
+
|
94
|
+
toggleCollapsed(e: React.MouseEvent<HTMLElement>) {
|
95
|
+
if (isClickOnInput(e)) {
|
96
|
+
return;
|
97
|
+
}
|
98
|
+
const props = this.props;
|
99
|
+
if (props.disabled || props.collapsable === false) {
|
100
|
+
return;
|
101
|
+
}
|
102
|
+
props.onCollapse && props.onCollapse(props, !this.state.collapsed);
|
103
|
+
this.setState({
|
104
|
+
collapsed: !this.state.collapsed
|
105
|
+
});
|
106
|
+
}
|
107
|
+
|
43
108
|
contentDom: any;
|
44
109
|
contentRef = (ref: any) => (this.contentDom = ref);
|
45
110
|
|
@@ -77,18 +142,54 @@ export class Collapse extends React.Component<CollapseProps, any> {
|
|
77
142
|
|
78
143
|
render() {
|
79
144
|
const {
|
80
|
-
show,
|
81
|
-
children,
|
82
145
|
classnames: cx,
|
83
146
|
mountOnEnter,
|
84
|
-
unmountOnExit
|
147
|
+
unmountOnExit,
|
148
|
+
classPrefix: ns,
|
149
|
+
size,
|
150
|
+
wrapperComponent: WrapperComponent,
|
151
|
+
headingComponent: HeadingComponent,
|
152
|
+
className,
|
153
|
+
headingClassName,
|
154
|
+
headerPosition,
|
155
|
+
collapseHeader,
|
156
|
+
header,
|
157
|
+
body,
|
158
|
+
bodyClassName,
|
159
|
+
collapsable,
|
160
|
+
translate: __,
|
161
|
+
showArrow,
|
162
|
+
expandIcon,
|
163
|
+
disabled,
|
164
|
+
children
|
85
165
|
} = this.props;
|
86
166
|
|
87
|
-
|
167
|
+
const finalHeader = this.state.collapsed ? header : collapseHeader || header;
|
168
|
+
|
169
|
+
let dom = [
|
170
|
+
finalHeader ? (
|
171
|
+
<HeadingComponent
|
172
|
+
key="header"
|
173
|
+
onClick={this.toggleCollapsed}
|
174
|
+
className={cx(`Collapse-header`, headingClassName)}
|
175
|
+
>
|
176
|
+
{showArrow && collapsable
|
177
|
+
? expandIcon
|
178
|
+
? React.cloneElement(expandIcon, {
|
179
|
+
...expandIcon.props,
|
180
|
+
className: cx('Collapse-icon-tranform')
|
181
|
+
})
|
182
|
+
: <span className={cx('Collapse-arrow')} />
|
183
|
+
: ''}
|
184
|
+
{finalHeader}
|
185
|
+
</HeadingComponent>
|
186
|
+
) : null,
|
187
|
+
|
88
188
|
<Transition
|
189
|
+
key="body"
|
89
190
|
mountOnEnter={mountOnEnter}
|
90
191
|
unmountOnExit={unmountOnExit}
|
91
|
-
in={
|
192
|
+
in={!this.state.collapsed}
|
92
193
|
timeout={300}
|
93
194
|
onEnter={this.handleEnter}
|
94
195
|
onEntering={this.handleEntering}
|
@@ -105,17 +206,35 @@ export class Collapse extends React.Component<CollapseProps, any> {
|
|
105
206
|
className={cx('Collapse-contentWrapper', collapseStyles[status])}
|
106
207
|
ref={this.contentRef}
|
107
208
|
>
|
108
|
-
{
|
109
|
-
|
110
|
-
|
111
|
-
'Collapse-content',
|
112
|
-
(children as React.ReactElement).props.className
|
113
|
-
)
|
114
|
-
})}
|
209
|
+
<div className={cx('Collapse-body', bodyClassName)}>
|
210
|
+
<div className={cx('Collapse-content')}>{body || children}</div>
|
211
|
+
</div>
|
115
212
|
</div>
|
116
213
|
);
|
117
214
|
}}
|
118
215
|
</Transition>
|
216
|
+
|
217
|
+
];
|
218
|
+
|
219
|
+
if (headerPosition === 'bottom') {
|
220
|
+
dom.reverse();
|
221
|
+
}
|
222
|
+
|
223
|
+
return (
|
224
|
+
<WrapperComponent
|
225
|
+
className={cx(
|
226
|
+
`Collapse`,
|
227
|
+
{
|
228
|
+
'is-active': !this.state.collapsed,
|
229
|
+
[`Collapse--${size}`]: size,
|
230
|
+
'Collapse--disabled': disabled || collapsable === false,
|
231
|
+
'Collapse--title-bottom': headerPosition === 'bottom'
|
232
|
+
},
|
233
|
+
className
|
234
|
+
)}
|
235
|
+
>
|
236
|
+
{dom}
|
237
|
+
</WrapperComponent>
|
119
238
|
);
|
120
239
|
}
|
121
240
|
}
|
@@ -0,0 +1,130 @@
|
|
1
|
+
/**
|
2
|
+
* @file CollapseGroup
|
3
|
+
* @description 折叠面板group
|
4
|
+
* @author hongyang03
|
5
|
+
*/
|
6
|
+
|
7
|
+
import React from 'react';
|
8
|
+
import {CollapseProps} from '../renderers/Collapse';
|
9
|
+
import {SchemaNode} from '../types';
|
10
|
+
import {ClassNamesFn, themeable} from '../theme';
|
11
|
+
|
12
|
+
export interface CollapseGroupProps {
|
13
|
+
defaultActiveKey?: Array<string | number | never> | string | number;
|
14
|
+
accordion?: boolean;
|
15
|
+
expandIcon?: SchemaNode;
|
16
|
+
expandIconPosition?: 'left' | 'right';
|
17
|
+
body?: Array<React.ReactElement>;
|
18
|
+
className?: string;
|
19
|
+
classnames: ClassNamesFn;
|
20
|
+
classPrefix: string;
|
21
|
+
}
|
22
|
+
|
23
|
+
export interface CollapseGroupState {
|
24
|
+
activeKey: Array<string | number | never>;
|
25
|
+
}
|
26
|
+
|
27
|
+
class CollapseGroup extends React.Component<
|
28
|
+
CollapseGroupProps,
|
29
|
+
CollapseGroupState
|
30
|
+
> {
|
31
|
+
|
32
|
+
static defaultProps: Partial<CollapseGroupProps> = {
|
33
|
+
className: '',
|
34
|
+
accordion: false,
|
35
|
+
expandIconPosition: 'left'
|
36
|
+
};
|
37
|
+
|
38
|
+
constructor(props: CollapseGroupProps) {
|
39
|
+
super(props);
|
40
|
+
|
41
|
+
// 传入的activeKey会被自动转换为defaultActiveKey
|
42
|
+
let activeKey = props.defaultActiveKey;
|
43
|
+
if (!Array.isArray(activeKey)) {
|
44
|
+
activeKey = activeKey ? [activeKey] : [];
|
45
|
+
}
|
46
|
+
if (props.accordion) {
|
47
|
+
// 手风琴模式下只展开第一个元素
|
48
|
+
activeKey = activeKey.length ? [activeKey[0]] : [];
|
49
|
+
}
|
50
|
+
|
51
|
+
this.state = {
|
52
|
+
activeKey: activeKey.map((key: number | string) => String(key))
|
53
|
+
};
|
54
|
+
}
|
55
|
+
|
56
|
+
collapseChange(item: CollapseProps, collapsed: boolean) {
|
57
|
+
let activeKey = this.state.activeKey;
|
58
|
+
if (collapsed) {
|
59
|
+
if (this.props.accordion) {
|
60
|
+
activeKey = [];
|
61
|
+
}
|
62
|
+
else {
|
63
|
+
for(let i = 0; i < activeKey.length; i++) {
|
64
|
+
if (activeKey[i] === item.id) {
|
65
|
+
activeKey.splice(i, 1);
|
66
|
+
break;
|
67
|
+
}
|
68
|
+
}
|
69
|
+
}
|
70
|
+
}
|
71
|
+
else {
|
72
|
+
if (this.props.accordion) {
|
73
|
+
activeKey = [item.id];
|
74
|
+
}
|
75
|
+
else {
|
76
|
+
activeKey.push(item.id);
|
77
|
+
}
|
78
|
+
}
|
79
|
+
this.setState({
|
80
|
+
activeKey
|
81
|
+
});
|
82
|
+
}
|
83
|
+
|
84
|
+
getItems = (children: React.ReactNode) => {
|
85
|
+
if (!Array.isArray(children)) {
|
86
|
+
return children;
|
87
|
+
}
|
88
|
+
|
89
|
+
return children.map((child: React.ReactElement, index: number) => {
|
90
|
+
let props = child.props;
|
91
|
+
const id = props.schema.key || String(index);
|
92
|
+
const collapsed = this.state.activeKey.indexOf(id) === -1;
|
93
|
+
|
94
|
+
return React.cloneElement(child as any, {
|
95
|
+
...props,
|
96
|
+
key: id,
|
97
|
+
id,
|
98
|
+
collapsed,
|
99
|
+
expandIcon: this.props.expandIcon,
|
100
|
+
propsUpdate: true,
|
101
|
+
onCollapse: (item: CollapseProps, collapsed: boolean) => this.collapseChange(item, collapsed)
|
102
|
+
});
|
103
|
+
});
|
104
|
+
};
|
105
|
+
|
106
|
+
render() {
|
107
|
+
const {
|
108
|
+
classnames: cx,
|
109
|
+
className,
|
110
|
+
expandIconPosition,
|
111
|
+
children
|
112
|
+
} = this.props;
|
113
|
+
|
114
|
+
return (
|
115
|
+
<div
|
116
|
+
className={cx(
|
117
|
+
`CollapseGroup`,
|
118
|
+
{
|
119
|
+
'icon-position-right': expandIconPosition === 'right',
|
120
|
+
},
|
121
|
+
className
|
122
|
+
)}
|
123
|
+
>
|
124
|
+
{this.getItems(children)}
|
125
|
+
</div>
|
126
|
+
);
|
127
|
+
}
|
128
|
+
}
|
129
|
+
|
130
|
+
export default themeable(CollapseGroup);
|
@@ -12,9 +12,11 @@ import Overlay from './Overlay';
|
|
12
12
|
import {uncontrollable} from 'uncontrollable';
|
13
13
|
import PopOver from './PopOver';
|
14
14
|
import {ClassNamesFn, themeable, ThemeProps} from '../theme';
|
15
|
-
import {autobind} from '../utils/helper';
|
15
|
+
import {autobind, isObject} from '../utils/helper';
|
16
16
|
import {localeable, LocaleProps} from '../locale';
|
17
17
|
|
18
|
+
export type PresetColor = {color: string; title: string} | string;
|
19
|
+
|
18
20
|
export interface ColorProps extends LocaleProps, ThemeProps {
|
19
21
|
placeholder?: string;
|
20
22
|
format: string;
|
@@ -27,7 +29,7 @@ export interface ColorProps extends LocaleProps, ThemeProps {
|
|
27
29
|
placement?: string;
|
28
30
|
value?: any;
|
29
31
|
onChange: (value: any) => void;
|
30
|
-
presetColors?:
|
32
|
+
presetColors?: PresetColor[];
|
31
33
|
resetValue?: string;
|
32
34
|
allowCustomColor?: boolean;
|
33
35
|
}
|
@@ -229,11 +231,20 @@ export class ColorControl extends React.PureComponent<
|
|
229
231
|
`ColorPicker`,
|
230
232
|
{
|
231
233
|
'is-disabled': disabled,
|
232
|
-
'is-focused': isFocused
|
234
|
+
'is-focused': isFocused,
|
235
|
+
'is-opened': isOpened
|
233
236
|
},
|
234
237
|
className
|
235
238
|
)}
|
236
239
|
>
|
240
|
+
<span onClick={this.handleClick} className={cx('ColorPicker-preview')}>
|
241
|
+
<i
|
242
|
+
ref={this.preview}
|
243
|
+
className={`${ns}ColorPicker-previewIcon`}
|
244
|
+
style={{background: this.state.inputValue || '#ccc'}}
|
245
|
+
/>
|
246
|
+
</span>
|
247
|
+
|
237
248
|
<input
|
238
249
|
ref={this.input}
|
239
250
|
type="text"
|
@@ -255,12 +266,8 @@ export class ColorControl extends React.PureComponent<
|
|
255
266
|
</a>
|
256
267
|
) : null}
|
257
268
|
|
258
|
-
<span
|
259
|
-
<
|
260
|
-
ref={this.preview}
|
261
|
-
className={`${ns}ColorPicker-previewIcon`}
|
262
|
-
style={{background: this.state.inputValue || '#ccc'}}
|
263
|
-
/>
|
269
|
+
<span className={cx('ColorPicker-arrow')}>
|
270
|
+
<Icon icon="caret" className="icon" onClick={this.handleClick} />
|
264
271
|
</span>
|
265
272
|
|
266
273
|
{isOpened ? (
|
@@ -280,6 +287,7 @@ export class ColorControl extends React.PureComponent<
|
|
280
287
|
>
|
281
288
|
{allowCustomColor ? (
|
282
289
|
<SketchPicker
|
290
|
+
styles={{}}
|
283
291
|
disableAlpha={!!~['rgb', 'hex'].indexOf(format as string)}
|
284
292
|
color={value}
|
285
293
|
presetColors={presetColors}
|
@@ -288,7 +296,21 @@ export class ColorControl extends React.PureComponent<
|
|
288
296
|
) : (
|
289
297
|
<GithubPicker
|
290
298
|
color={value}
|
291
|
-
colors={
|
299
|
+
colors={
|
300
|
+
Array.isArray(presetColors)
|
301
|
+
? (presetColors
|
302
|
+
.filter(
|
303
|
+
item => typeof item === 'string' || isObject(item)
|
304
|
+
)
|
305
|
+
.map(item =>
|
306
|
+
typeof item === 'string'
|
307
|
+
? item
|
308
|
+
: isObject(item)
|
309
|
+
? item?.color
|
310
|
+
: item
|
311
|
+
) as string[])
|
312
|
+
: undefined
|
313
|
+
}
|
292
314
|
onChangeComplete={this.handleChange}
|
293
315
|
/>
|
294
316
|
)}
|