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.
Files changed (190) hide show
  1. package/lib/Schema.d.ts +4 -3
  2. package/lib/Schema.js.map +1 -1
  3. package/lib/components/Alert2.d.ts +26 -21
  4. package/lib/components/Alert2.js +11 -4
  5. package/lib/components/Alert2.js.map +2 -2
  6. package/lib/components/AssociatedSelection.js +2 -2
  7. package/lib/components/AssociatedSelection.js.map +2 -2
  8. package/lib/components/Button.js +1 -1
  9. package/lib/components/Button.js.map +2 -2
  10. package/lib/components/Checkbox.d.ts +20 -20
  11. package/lib/components/Collapse.d.ts +51 -23
  12. package/lib/components/Collapse.js +70 -11
  13. package/lib/components/Collapse.js.map +2 -2
  14. package/lib/components/CollapseGroup.d.ts +88 -0
  15. package/lib/components/CollapseGroup.js +81 -0
  16. package/lib/components/CollapseGroup.js.map +13 -0
  17. package/lib/components/ColorPicker.d.ts +5 -1
  18. package/lib/components/ColorPicker.js +17 -4
  19. package/lib/components/ColorPicker.js.map +2 -2
  20. package/lib/components/Editor.d.ts +84 -84
  21. package/lib/components/GridNav.d.ts +52 -0
  22. package/lib/components/GridNav.js +123 -0
  23. package/lib/components/GridNav.js.map +13 -0
  24. package/lib/components/ListGroup.d.ts +21 -21
  25. package/lib/components/Overlay.js +5 -0
  26. package/lib/components/Overlay.js.map +2 -2
  27. package/lib/components/PopOver.d.ts +1 -0
  28. package/lib/components/PopOver.js +12 -1
  29. package/lib/components/PopOver.js.map +2 -2
  30. package/lib/components/Tabs.d.ts +20 -20
  31. package/lib/components/TabsTransfer.d.ts +84 -84
  32. package/lib/components/Toast.d.ts +90 -87
  33. package/lib/components/Toast.js +15 -5
  34. package/lib/components/Toast.js.map +2 -2
  35. package/lib/components/Transfer.d.ts +84 -84
  36. package/lib/components/TransferDropDown.d.ts +84 -84
  37. package/lib/components/Tree.d.ts +115 -84
  38. package/lib/components/Tree.js +183 -30
  39. package/lib/components/Tree.js.map +2 -2
  40. package/lib/components/condition-builder/Field.js +2 -3
  41. package/lib/components/condition-builder/Field.js.map +2 -2
  42. package/lib/components/icons.js +8 -0
  43. package/lib/components/icons.js.map +2 -2
  44. package/lib/envOverwrite.d.ts +1 -1
  45. package/lib/envOverwrite.js +24 -9
  46. package/lib/envOverwrite.js.map +2 -2
  47. package/lib/factory.d.ts +11 -1
  48. package/lib/factory.js +31 -4
  49. package/lib/factory.js.map +2 -2
  50. package/lib/icons/alert-danger.js +7 -0
  51. package/lib/icons/alert-info.js +7 -0
  52. package/lib/icons/alert-success.js +7 -0
  53. package/lib/icons/alert-warning.js +7 -0
  54. package/lib/icons/drag-bar.js +10 -3
  55. package/lib/index.d.ts +2 -0
  56. package/lib/index.js +3 -1
  57. package/lib/index.js.map +2 -2
  58. package/lib/renderers/Alert.d.ts +21 -1
  59. package/lib/renderers/Alert.js.map +2 -2
  60. package/lib/renderers/Card.d.ts +1 -0
  61. package/lib/renderers/Card.js +7 -2
  62. package/lib/renderers/Card.js.map +2 -2
  63. package/lib/renderers/Collapse.d.ts +25 -20
  64. package/lib/renderers/Collapse.js +10 -73
  65. package/lib/renderers/Collapse.js.map +2 -2
  66. package/lib/renderers/CollapseGroup.d.ts +42 -0
  67. package/lib/renderers/CollapseGroup.js +33 -0
  68. package/lib/renderers/CollapseGroup.js.map +13 -0
  69. package/lib/renderers/Form/ConditionBuilder.js +2 -2
  70. package/lib/renderers/Form/ConditionBuilder.js.map +2 -2
  71. package/lib/renderers/Form/InputCity.d.ts +84 -84
  72. package/lib/renderers/Form/InputColor.d.ts +2 -1
  73. package/lib/renderers/Form/InputColor.js +1 -1
  74. package/lib/renderers/Form/InputColor.js.map +2 -2
  75. package/lib/renderers/Form/Item.js +2 -1
  76. package/lib/renderers/Form/Item.js.map +2 -2
  77. package/lib/renderers/GridNav.d.ts +99 -0
  78. package/lib/renderers/GridNav.js +82 -0
  79. package/lib/renderers/GridNav.js.map +13 -0
  80. package/lib/renderers/Page.d.ts +18 -0
  81. package/lib/renderers/Page.js +53 -9
  82. package/lib/renderers/Page.js.map +2 -2
  83. package/lib/store/formItem.js +44 -4
  84. package/lib/store/formItem.js.map +2 -2
  85. package/lib/themes/ang-ie11.css +324 -49
  86. package/lib/themes/ang.css +324 -49
  87. package/lib/themes/ang.css.map +1 -1
  88. package/lib/themes/antd-ie11.css +324 -49
  89. package/lib/themes/antd.css +324 -49
  90. package/lib/themes/antd.css.map +1 -1
  91. package/lib/themes/cxd-ie11.css +331 -58
  92. package/lib/themes/cxd.css +331 -58
  93. package/lib/themes/cxd.css.map +1 -1
  94. package/lib/themes/dark-ie11.css +324 -49
  95. package/lib/themes/dark.css +324 -49
  96. package/lib/themes/dark.css.map +1 -1
  97. package/lib/themes/default.css +331 -58
  98. package/lib/themes/default.css.map +1 -1
  99. package/lib/types.d.ts +1 -1
  100. package/lib/types.js.map +1 -1
  101. package/lib/utils/api.d.ts +1 -0
  102. package/lib/utils/api.js +77 -6
  103. package/lib/utils/api.js.map +2 -2
  104. package/lib/utils/helper.d.ts +8 -0
  105. package/lib/utils/helper.js +33 -2
  106. package/lib/utils/helper.js.map +2 -2
  107. package/lib/utils/tpl-builtin.js +5 -0
  108. package/lib/utils/tpl-builtin.js.map +2 -2
  109. package/package.json +1 -1
  110. package/schema.json +365 -49
  111. package/scss/_properties.scss +2 -1
  112. package/scss/components/_alert.scss +28 -5
  113. package/scss/components/_anchor-nav.scss +1 -0
  114. package/scss/components/_button.scss +5 -0
  115. package/scss/components/_card.scss +1 -1
  116. package/scss/components/_collapse-group.scss +15 -0
  117. package/scss/components/_collapse.scss +33 -23
  118. package/scss/components/_grid-nav.scss +128 -0
  119. package/scss/components/_nav.scss +2 -7
  120. package/scss/components/_page.scss +35 -2
  121. package/scss/components/_spinner.scss +5 -4
  122. package/scss/components/_table.scss +6 -0
  123. package/scss/components/_toast.scss +41 -11
  124. package/scss/components/form/_color.scss +32 -3
  125. package/scss/components/form/_combo.scss +4 -0
  126. package/scss/components/form/_fieldset.scss +1 -0
  127. package/scss/components/form/_transfer.scss +1 -0
  128. package/scss/components/form/_tree.scss +42 -0
  129. package/scss/themes/_common.scss +2 -0
  130. package/scss/themes/_cxd-variables.scss +9 -4
  131. package/scss/themes/cxd.scss +1 -7
  132. package/sdk/ang-ie11.css +375 -53
  133. package/sdk/ang.css +377 -53
  134. package/sdk/antd-ie11.css +375 -53
  135. package/sdk/antd.css +377 -53
  136. package/sdk/charts.js +13 -13
  137. package/sdk/color-picker.js +69 -65
  138. package/sdk/cropperjs.js +2 -2
  139. package/sdk/cxd-ie11.css +379 -60
  140. package/sdk/cxd.css +384 -62
  141. package/sdk/dark-ie11.css +375 -53
  142. package/sdk/dark.css +377 -53
  143. package/sdk/exceljs.js +1 -1
  144. package/sdk/markdown.js +69 -69
  145. package/sdk/papaparse.js +1 -1
  146. package/sdk/renderers/Form/CityDB.js +1 -1
  147. package/sdk/rest.js +16 -20
  148. package/sdk/rich-text.js +62 -62
  149. package/sdk/sdk-ie11.css +379 -60
  150. package/sdk/sdk.css +384 -62
  151. package/sdk/sdk.js +1215 -1173
  152. package/sdk/thirds/hls.js/hls.js +1 -1
  153. package/sdk/thirds/mpegts.js/mpegts.js +1 -1
  154. package/sdk/tinymce.js +57 -57
  155. package/src/Schema.ts +5 -1
  156. package/src/components/Alert2.tsx +32 -4
  157. package/src/components/AssociatedSelection.tsx +3 -1
  158. package/src/components/Button.tsx +1 -0
  159. package/src/components/Collapse.tsx +139 -20
  160. package/src/components/CollapseGroup.tsx +130 -0
  161. package/src/components/ColorPicker.tsx +32 -10
  162. package/src/components/GridNav.tsx +233 -0
  163. package/src/components/Overlay.tsx +6 -0
  164. package/src/components/PopOver.tsx +15 -1
  165. package/src/components/Toast.tsx +48 -21
  166. package/src/components/Tree.tsx +194 -8
  167. package/src/components/condition-builder/Field.tsx +3 -1
  168. package/src/components/icons.tsx +8 -0
  169. package/src/envOverwrite.ts +20 -7
  170. package/src/factory.tsx +52 -6
  171. package/src/icons/alert-danger.svg +1 -0
  172. package/src/icons/alert-info.svg +1 -0
  173. package/src/icons/alert-success.svg +1 -0
  174. package/src/icons/alert-warning.svg +1 -0
  175. package/src/icons/drag-bar.svg +12 -6
  176. package/src/index.tsx +2 -0
  177. package/src/renderers/Alert.tsx +31 -1
  178. package/src/renderers/Card.tsx +13 -2
  179. package/src/renderers/Collapse.tsx +70 -117
  180. package/src/renderers/CollapseGroup.tsx +80 -0
  181. package/src/renderers/Form/ConditionBuilder.tsx +2 -2
  182. package/src/renderers/Form/InputColor.tsx +4 -2
  183. package/src/renderers/GridNav.tsx +204 -0
  184. package/src/renderers/Page.tsx +62 -1
  185. package/src/store/formItem.ts +94 -2
  186. package/src/types.ts +1 -1
  187. package/src/utils/api.ts +93 -6
  188. package/src/utils/helper.ts +33 -0
  189. package/src/utils/tpl-builtin.ts +6 -0
  190. 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
- className: string;
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
- show?: boolean;
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 class Collapse extends React.Component<CollapseProps, any> {
34
- static defaultProps: Pick<
35
- CollapseProps,
36
- 'show' | 'mountOnEnter' | 'unmountOnExit'
37
- > = {
38
- show: false,
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
- return (
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={show}
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
- {React.cloneElement(children as any, {
109
- ...(children as React.ReactElement).props,
110
- className: cx(
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?: string[];
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 onClick={this.handleClick} className={cx('ColorPicker-preview')}>
259
- <i
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={presetColors}
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
  )}