amis 1.5.3 → 1.5.6-beta.4

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 (179) hide show
  1. package/README.md +5 -0
  2. package/lib/Root.js +1 -1
  3. package/lib/Root.js.map +2 -2
  4. package/lib/RootRenderer.d.ts +1 -1
  5. package/lib/RootRenderer.js +4 -3
  6. package/lib/RootRenderer.js.map +2 -2
  7. package/lib/SchemaRenderer.js +4 -4
  8. package/lib/SchemaRenderer.js.map +2 -2
  9. package/lib/components/Card.d.ts +96 -0
  10. package/lib/components/Card.js +85 -0
  11. package/lib/components/Card.js.map +13 -0
  12. package/lib/components/Collapse.js +4 -6
  13. package/lib/components/Collapse.js.map +2 -2
  14. package/lib/components/CollapseGroup.d.ts +20 -20
  15. package/lib/components/CollapseGroup.js +5 -3
  16. package/lib/components/CollapseGroup.js.map +2 -2
  17. package/lib/components/ColorPicker.d.ts +84 -84
  18. package/lib/components/DatePicker.d.ts +85 -84
  19. package/lib/components/DatePicker.js.map +2 -2
  20. package/lib/components/DateRangePicker.d.ts +84 -84
  21. package/lib/components/LocationPicker.d.ts +84 -84
  22. package/lib/components/MonthRangePicker.d.ts +84 -84
  23. package/lib/components/Picker.d.ts +503 -0
  24. package/lib/components/Picker.js +65 -0
  25. package/lib/components/Picker.js.map +13 -0
  26. package/lib/components/PickerColumn.d.ts +29 -459
  27. package/lib/components/PickerColumn.js +35 -44
  28. package/lib/components/PickerColumn.js.map +2 -2
  29. package/lib/components/Progress.js +1 -1
  30. package/lib/components/Progress.js.map +2 -2
  31. package/lib/components/Select.d.ts +238 -238
  32. package/lib/components/Select.js +9 -2
  33. package/lib/components/Select.js.map +2 -2
  34. package/lib/components/Selection.js +1 -4
  35. package/lib/components/Selection.js.map +2 -2
  36. package/lib/components/Switch.d.ts +6 -6
  37. package/lib/components/Switch.js.map +2 -2
  38. package/lib/components/Tabs.d.ts +20 -20
  39. package/lib/components/calendar/Calendar.js +15 -0
  40. package/lib/components/calendar/Calendar.js.map +2 -2
  41. package/lib/components/calendar/DaysView.js +4 -4
  42. package/lib/components/calendar/DaysView.js.map +2 -2
  43. package/lib/components/calendar/TimeView.d.ts +10 -0
  44. package/lib/components/calendar/TimeView.js +55 -2
  45. package/lib/components/calendar/TimeView.js.map +2 -2
  46. package/lib/components/calendar/YearsView.d.ts +9 -0
  47. package/lib/components/calendar/YearsView.js +19 -0
  48. package/lib/components/calendar/YearsView.js.map +2 -2
  49. package/lib/components/index.d.ts +2 -1
  50. package/lib/components/index.js +4 -2
  51. package/lib/components/index.js.map +2 -2
  52. package/lib/index.js +1 -1
  53. package/lib/renderers/CRUD.d.ts +1 -1
  54. package/lib/renderers/CRUD.js +4 -3
  55. package/lib/renderers/CRUD.js.map +2 -2
  56. package/lib/renderers/Card.d.ts +81 -13
  57. package/lib/renderers/Card.js +178 -81
  58. package/lib/renderers/Card.js.map +2 -2
  59. package/lib/renderers/Collapse.js +8 -2
  60. package/lib/renderers/Collapse.js.map +2 -2
  61. package/lib/renderers/CollapseGroup.js.map +2 -2
  62. package/lib/renderers/Dialog.d.ts +2 -2
  63. package/lib/renderers/Dialog.js +7 -7
  64. package/lib/renderers/Dialog.js.map +2 -2
  65. package/lib/renderers/Drawer.js +2 -2
  66. package/lib/renderers/Drawer.js.map +2 -2
  67. package/lib/renderers/Form/DiffEditor.d.ts +145 -37
  68. package/lib/renderers/Form/Editor.d.ts +144 -36
  69. package/lib/renderers/Form/Formula.js +5 -5
  70. package/lib/renderers/Form/Formula.js.map +2 -2
  71. package/lib/renderers/Form/InputCity.d.ts +84 -84
  72. package/lib/renderers/Form/InputColor.d.ts +84 -84
  73. package/lib/renderers/Form/InputFile.js +3 -3
  74. package/lib/renderers/Form/InputFile.js.map +2 -2
  75. package/lib/renderers/Form/InputImage.js +1 -1
  76. package/lib/renderers/Form/InputImage.js.map +2 -2
  77. package/lib/renderers/Form/Item.d.ts +1 -1
  78. package/lib/renderers/Form/Item.js +4 -3
  79. package/lib/renderers/Form/Item.js.map +2 -2
  80. package/lib/renderers/Form/index.d.ts +1 -1
  81. package/lib/renderers/Form/index.js +13 -2
  82. package/lib/renderers/Form/index.js.map +2 -2
  83. package/lib/renderers/Form/wrapControl.js +3 -2
  84. package/lib/renderers/Form/wrapControl.js.map +2 -2
  85. package/lib/renderers/Page.d.ts +3 -3
  86. package/lib/renderers/Page.js +4 -3
  87. package/lib/renderers/Page.js.map +2 -2
  88. package/lib/renderers/Wizard.d.ts +1 -1
  89. package/lib/renderers/Wizard.js +93 -36
  90. package/lib/renderers/Wizard.js.map +2 -2
  91. package/lib/store/combo.d.ts +160 -40
  92. package/lib/store/form.d.ts +64 -16
  93. package/lib/store/formItem.d.ts +4 -2
  94. package/lib/store/formItem.js +22 -7
  95. package/lib/store/formItem.js.map +2 -2
  96. package/lib/store/table.d.ts +128 -32
  97. package/lib/themes/ang-ie11.css +177 -30
  98. package/lib/themes/ang.css +177 -30
  99. package/lib/themes/ang.css.map +1 -1
  100. package/lib/themes/antd-ie11.css +177 -30
  101. package/lib/themes/antd.css +177 -30
  102. package/lib/themes/antd.css.map +1 -1
  103. package/lib/themes/cxd-ie11.css +177 -30
  104. package/lib/themes/cxd.css +177 -30
  105. package/lib/themes/cxd.css.map +1 -1
  106. package/lib/themes/dark-ie11.css +177 -30
  107. package/lib/themes/dark.css +177 -30
  108. package/lib/themes/dark.css.map +1 -1
  109. package/lib/themes/default.css +177 -30
  110. package/lib/themes/default.css.map +1 -1
  111. package/lib/utils/helper.d.ts +7 -0
  112. package/lib/utils/helper.js +34 -7
  113. package/lib/utils/helper.js.map +2 -2
  114. package/package.json +2 -2
  115. package/schema.json +157 -13
  116. package/scss/_properties.scss +13 -2
  117. package/scss/components/_card.scss +155 -15
  118. package/scss/components/_nav.scss +1 -1
  119. package/scss/components/_picker-columns.scss +20 -14
  120. package/scss/components/form/_file.scss +2 -2
  121. package/scss/components/form/_selection.scss +4 -0
  122. package/scss/components/form/_switch.scss +6 -0
  123. package/sdk/ang-ie11.css +214 -40
  124. package/sdk/ang.css +216 -32
  125. package/sdk/antd-ie11.css +214 -40
  126. package/sdk/antd.css +216 -32
  127. package/sdk/charts.js +17 -17
  128. package/sdk/color-picker.js +65 -65
  129. package/sdk/cropperjs.js +3 -3
  130. package/sdk/cxd-ie11.css +206 -32
  131. package/sdk/cxd.css +216 -32
  132. package/sdk/dark-ie11.css +214 -40
  133. package/sdk/dark.css +216 -32
  134. package/sdk/exceljs.js +1 -1
  135. package/sdk/markdown.js +69 -69
  136. package/sdk/papaparse.js +1 -1
  137. package/sdk/renderers/Form/CityDB.js +1 -1
  138. package/sdk/rest.js +18 -18
  139. package/sdk/rich-text.js +62 -62
  140. package/sdk/sdk-ie11.css +206 -32
  141. package/sdk/sdk.css +216 -32
  142. package/sdk/sdk.js +1302 -1208
  143. package/sdk/thirds/hls.js/hls.js +18 -18
  144. package/sdk/thirds/mpegts.js/mpegts.js +2 -2
  145. package/sdk/tinymce.js +57 -57
  146. package/src/Root.tsx +1 -0
  147. package/src/RootRenderer.tsx +3 -3
  148. package/src/SchemaRenderer.tsx +4 -0
  149. package/src/components/Card.tsx +203 -0
  150. package/src/components/Collapse.tsx +19 -12
  151. package/src/components/CollapseGroup.tsx +9 -11
  152. package/src/components/DatePicker.tsx +3 -0
  153. package/src/components/Picker.tsx +145 -0
  154. package/src/components/PickerColumn.tsx +58 -95
  155. package/src/components/Progress.tsx +1 -1
  156. package/src/components/Select.tsx +17 -12
  157. package/src/components/Selection.tsx +1 -4
  158. package/src/components/Switch.tsx +7 -7
  159. package/src/components/calendar/Calendar.tsx +18 -0
  160. package/src/components/calendar/DaysView.tsx +6 -4
  161. package/src/components/calendar/TimeView.tsx +80 -5
  162. package/src/components/calendar/YearsView.tsx +44 -1
  163. package/src/components/index.tsx +2 -0
  164. package/src/renderers/CRUD.tsx +3 -3
  165. package/src/renderers/Card.tsx +299 -191
  166. package/src/renderers/Collapse.tsx +27 -27
  167. package/src/renderers/CollapseGroup.tsx +13 -12
  168. package/src/renderers/Dialog.tsx +8 -8
  169. package/src/renderers/Drawer.tsx +2 -2
  170. package/src/renderers/Form/Formula.tsx +7 -5
  171. package/src/renderers/Form/InputFile.tsx +7 -3
  172. package/src/renderers/Form/InputImage.tsx +1 -1
  173. package/src/renderers/Form/Item.tsx +2 -2
  174. package/src/renderers/Form/index.tsx +14 -2
  175. package/src/renderers/Form/wrapControl.tsx +5 -2
  176. package/src/renderers/Page.tsx +11 -10
  177. package/src/renderers/Wizard.tsx +52 -12
  178. package/src/store/formItem.ts +27 -6
  179. package/src/utils/helper.ts +35 -10
package/src/Root.tsx CHANGED
@@ -150,6 +150,7 @@ export function renderChild(
150
150
  <SchemaRenderer
151
151
  {...props}
152
152
  schema={schema}
153
+ propKey={schema.key}
153
154
  $path={`${prefix ? `${prefix}/` : ''}${(schema && schema.type) || ''}`}
154
155
  />
155
156
  );
@@ -184,12 +184,12 @@ export class RootRenderer extends React.Component<RootRendererProps> {
184
184
  return;
185
185
  }
186
186
 
187
- store.closeDialog();
187
+ store.closeDialog(true);
188
188
  }
189
189
 
190
- handleDialogClose() {
190
+ handleDialogClose(confirmed = false) {
191
191
  const store = this.store;
192
- store.closeDialog();
192
+ store.closeDialog(confirmed);
193
193
  }
194
194
 
195
195
  handleDrawerConfirm(values: object[], action: Action, ...args: Array<any>) {
@@ -242,6 +242,7 @@ export class SchemaRenderer extends React.Component<SchemaRendererProps, any> {
242
242
  data: defaultData,
243
243
  value: defaultValue,
244
244
  activeKey: defaultActiveKey,
245
+ key: propKey,
245
246
  ...restSchema
246
247
  } = schema;
247
248
  return rest.invisible
@@ -253,6 +254,7 @@ export class SchemaRenderer extends React.Component<SchemaRendererProps, any> {
253
254
  defaultData,
254
255
  defaultValue,
255
256
  defaultActiveKey,
257
+ propKey,
256
258
  $path: $path,
257
259
  $schema: schema,
258
260
  ref: isSFC ? undefined : this.refFn,
@@ -293,6 +295,7 @@ export class SchemaRenderer extends React.Component<SchemaRendererProps, any> {
293
295
  const {
294
296
  data: defaultData,
295
297
  value: defaultValue,
298
+ key: propKey,
296
299
  activeKey: defaultActiveKey,
297
300
  ...restSchema
298
301
  } = schema;
@@ -321,6 +324,7 @@ export class SchemaRenderer extends React.Component<SchemaRendererProps, any> {
321
324
  defaultData={restSchema.defaultData ?? defaultData}
322
325
  defaultValue={restSchema.defaultValue ?? defaultValue}
323
326
  defaultActiveKey={defaultActiveKey}
327
+ propKey={propKey}
324
328
  $path={$path}
325
329
  $schema={{...schema, ...exprProps}}
326
330
  ref={this.refFn}
@@ -0,0 +1,203 @@
1
+ import React from 'react';
2
+ import {isClickOnInput} from '../utils/helper';
3
+ import {ClassNamesFn, themeable, ThemeProps} from '../theme';
4
+ export interface CardProps extends ThemeProps {
5
+ className?: string;
6
+ headerClassName?: string;
7
+ titleClassName?: string;
8
+ subTitleClassName?: string;
9
+ descriptionClassName?: string;
10
+ avatarTextStyle?: object;
11
+ avatarTextClassName?: string;
12
+ avatarClassName?: string;
13
+ secondaryClassName?: string;
14
+ imageClassName?: string;
15
+ bodyClassName?: string;
16
+ footerClassName?: string;
17
+ media?: React.ReactNode;
18
+ mediaPosition?: 'top' | 'left' | 'right' | 'bottom';
19
+ toolbar?: React.ReactNode;
20
+ children?: React.ReactNode;
21
+ actions?: React.ReactNode;
22
+ title?: string | JSX.Element;
23
+ subTitle?: string | JSX.Element;
24
+ subTitlePlaceholder?: string | JSX.Element;
25
+ description?: string | JSX.Element;
26
+ descriptionPlaceholder?: string | JSX.Element;
27
+ avatar?: string;
28
+ avatarText?: string | JSX.Element;
29
+ secondary?: string | JSX.Element;
30
+ onClick?: (e: React.MouseEvent<HTMLDivElement>) => void;
31
+ classnames: ClassNamesFn;
32
+ }
33
+
34
+ export class Card extends React.Component<CardProps> {
35
+ static defaultProps: Partial<CardProps> = {
36
+ className: '',
37
+ avatarClassName: '',
38
+ headerClassName: '',
39
+ footerClassName: '',
40
+ secondaryClassName: '',
41
+ avatarTextClassName: '',
42
+ bodyClassName: '',
43
+ titleClassName: '',
44
+ subTitleClassName: '',
45
+ descriptionClassName: '',
46
+ imageClassName: '',
47
+ mediaPosition: 'left'
48
+ };
49
+
50
+ constructor(props: CardProps) {
51
+ super(props);
52
+ this.handleClick = this.handleClick.bind(this);
53
+ }
54
+
55
+ handleClick(e: React.MouseEvent<HTMLDivElement>) {
56
+ if (isClickOnInput(e)) {
57
+ return;
58
+ }
59
+
60
+ this.props.onClick && this.props.onClick(e);
61
+ }
62
+
63
+ render() {
64
+ const {
65
+ classnames: cx,
66
+ className,
67
+ headerClassName,
68
+ bodyClassName,
69
+ titleClassName,
70
+ subTitleClassName,
71
+ descriptionClassName,
72
+ avatarClassName,
73
+ avatarTextStyle,
74
+ imageClassName,
75
+ avatarTextClassName,
76
+ secondaryClassName,
77
+ footerClassName,
78
+ media,
79
+ mediaPosition,
80
+ actions,
81
+ children,
82
+ onClick,
83
+ toolbar,
84
+ title,
85
+ subTitle,
86
+ subTitlePlaceholder,
87
+ description,
88
+ descriptionPlaceholder,
89
+ secondary,
90
+ avatar,
91
+ avatarText
92
+ } = this.props;
93
+
94
+ let heading = null;
95
+ const isShowHeading =
96
+ avatar ||
97
+ avatarText ||
98
+ title ||
99
+ subTitle ||
100
+ subTitlePlaceholder ||
101
+ description ||
102
+ descriptionPlaceholder ||
103
+ toolbar;
104
+ if (isShowHeading) {
105
+ heading = (
106
+ <div className={cx('Card-heading', headerClassName)}>
107
+ {avatar ? (
108
+ <span className={cx('Card-avtar', avatarClassName)}>
109
+ <img className={cx('Card-img', imageClassName)} src={avatar} />
110
+ </span>
111
+ ) : avatarText ? (
112
+ <span
113
+ className={cx('Card-avtarText', avatarTextClassName)}
114
+ style={avatarTextStyle}
115
+ >
116
+ {avatarText}
117
+ </span>
118
+ ) : null}
119
+ <div className={cx('Card-meta')}>
120
+ {title ? (
121
+ <div className={cx('Card-title', titleClassName)}>{title}</div>
122
+ ) : null}
123
+ {subTitle || subTitlePlaceholder ? (
124
+ <div className={cx('Card-subTitle', subTitleClassName)}>
125
+ {subTitle
126
+ ? subTitle
127
+ : subTitlePlaceholder
128
+ ? subTitlePlaceholder
129
+ : null}
130
+ </div>
131
+ ) : null}
132
+ {description || descriptionPlaceholder ? (
133
+ <div className={cx('Card-desc', descriptionClassName)}>
134
+ {description
135
+ ? description
136
+ : descriptionPlaceholder
137
+ ? descriptionPlaceholder
138
+ : null}
139
+ </div>
140
+ ) : null}
141
+ </div>
142
+ {toolbar}
143
+ </div>
144
+ );
145
+ }
146
+
147
+ const body = children;
148
+
149
+ return (
150
+ <div
151
+ onClick={this.handleClick}
152
+ className={cx('Card', className, {
153
+ 'Card--link': onClick
154
+ })}
155
+ >
156
+ {media ? (
157
+ <div className={cx(`Card-multiMedia--${mediaPosition}`)}>
158
+ {media}
159
+ <div className={cx('Card-multiMedia-flex')}>
160
+ {heading}
161
+ {body ? (
162
+ <div className={cx('Card-body', bodyClassName)}>{body}</div>
163
+ ) : null}
164
+ {secondary || actions ? (
165
+ <div className={cx('Card-footer-wrapper', footerClassName)}>
166
+ {secondary ? (
167
+ <div className={cx('Card-secondary', secondaryClassName)}>
168
+ {secondary}
169
+ </div>
170
+ ) : null}
171
+ {actions ? (
172
+ <div className={cx('Card-actions-wrapper')}>{actions}</div>
173
+ ) : null}
174
+ </div>
175
+ ) : null}
176
+ </div>
177
+ </div>
178
+ ) : (
179
+ <div>
180
+ {heading}
181
+ {body ? (
182
+ <div className={cx('Card-body', bodyClassName)}>{body}</div>
183
+ ) : null}
184
+ {secondary || actions ? (
185
+ <div className={cx('Card-footer-wrapper', footerClassName)}>
186
+ {secondary ? (
187
+ <div className={cx('Card-secondary', secondaryClassName)}>
188
+ {secondary}
189
+ </div>
190
+ ) : null}
191
+ {actions ? (
192
+ <div className={cx('Card-actions-wrapper')}>{actions}</div>
193
+ ) : null}
194
+ </div>
195
+ ) : null}
196
+ </div>
197
+ )}
198
+ </div>
199
+ );
200
+ }
201
+ }
202
+
203
+ export default themeable(Card);
@@ -55,7 +55,6 @@ export interface CollapseState {
55
55
  }
56
56
 
57
57
  export class Collapse extends React.Component<CollapseProps, CollapseState> {
58
-
59
58
  static defaultProps: Partial<CollapseProps> = {
60
59
  mountOnEnter: false,
61
60
  unmountOnExit: false,
@@ -82,7 +81,10 @@ export class Collapse extends React.Component<CollapseProps, CollapseState> {
82
81
  this.state.collapsed = !!props.collapsed;
83
82
  }
84
83
 
85
- static getDerivedStateFromProps(nextProps: CollapseProps, preState: CollapseState) {
84
+ static getDerivedStateFromProps(
85
+ nextProps: CollapseProps,
86
+ preState: CollapseState
87
+ ) {
86
88
  if (nextProps.propsUpdate && nextProps.collapsed !== preState.collapsed) {
87
89
  return {
88
90
  collapsed: !!nextProps.collapsed
@@ -164,7 +166,9 @@ export class Collapse extends React.Component<CollapseProps, CollapseState> {
164
166
  children
165
167
  } = this.props;
166
168
 
167
- const finalHeader = this.state.collapsed ? header : collapseHeader || header;
169
+ const finalHeader = this.state.collapsed
170
+ ? header
171
+ : collapseHeader || header;
168
172
 
169
173
  let dom = [
170
174
  finalHeader ? (
@@ -173,14 +177,18 @@ export class Collapse extends React.Component<CollapseProps, CollapseState> {
173
177
  onClick={this.toggleCollapsed}
174
178
  className={cx(`Collapse-header`, headingClassName)}
175
179
  >
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
- : ''}
180
+ {showArrow && collapsable ? (
181
+ expandIcon ? (
182
+ React.cloneElement(expandIcon, {
183
+ ...expandIcon.props,
184
+ className: cx('Collapse-icon-tranform')
185
+ })
186
+ ) : (
187
+ <span className={cx('Collapse-arrow')} />
188
+ )
189
+ ) : (
190
+ ''
191
+ )}
184
192
  {finalHeader}
185
193
  </HeadingComponent>
186
194
  ) : null,
@@ -213,7 +221,6 @@ export class Collapse extends React.Component<CollapseProps, CollapseState> {
213
221
  );
214
222
  }}
215
223
  </Transition>
216
-
217
224
  ];
218
225
 
219
226
  if (headerPosition === 'bottom') {
@@ -28,7 +28,6 @@ class CollapseGroup extends React.Component<
28
28
  CollapseGroupProps,
29
29
  CollapseGroupState
30
30
  > {
31
-
32
31
  static defaultProps: Partial<CollapseGroupProps> = {
33
32
  className: '',
34
33
  accordion: false,
@@ -58,21 +57,18 @@ class CollapseGroup extends React.Component<
58
57
  if (collapsed) {
59
58
  if (this.props.accordion) {
60
59
  activeKey = [];
61
- }
62
- else {
63
- for(let i = 0; i < activeKey.length; i++) {
60
+ } else {
61
+ for (let i = 0; i < activeKey.length; i++) {
64
62
  if (activeKey[i] === item.id) {
65
63
  activeKey.splice(i, 1);
66
64
  break;
67
65
  }
68
66
  }
69
67
  }
70
- }
71
- else {
68
+ } else {
72
69
  if (this.props.accordion) {
73
70
  activeKey = [item.id];
74
- }
75
- else {
71
+ } else {
76
72
  activeKey.push(item.id);
77
73
  }
78
74
  }
@@ -88,7 +84,8 @@ class CollapseGroup extends React.Component<
88
84
 
89
85
  return children.map((child: React.ReactElement, index: number) => {
90
86
  let props = child.props;
91
- const id = props.schema.key || String(index);
87
+
88
+ const id = props.propKey || String(index);
92
89
  const collapsed = this.state.activeKey.indexOf(id) === -1;
93
90
 
94
91
  return React.cloneElement(child as any, {
@@ -98,7 +95,8 @@ class CollapseGroup extends React.Component<
98
95
  collapsed,
99
96
  expandIcon: this.props.expandIcon,
100
97
  propsUpdate: true,
101
- onCollapse: (item: CollapseProps, collapsed: boolean) => this.collapseChange(item, collapsed)
98
+ onCollapse: (item: CollapseProps, collapsed: boolean) =>
99
+ this.collapseChange(item, collapsed)
102
100
  });
103
101
  });
104
102
  };
@@ -116,7 +114,7 @@ class CollapseGroup extends React.Component<
116
114
  className={cx(
117
115
  `CollapseGroup`,
118
116
  {
119
- 'icon-position-right': expandIconPosition === 'right',
117
+ 'icon-position-right': expandIconPosition === 'right'
120
118
  },
121
119
  className
122
120
  )}
@@ -288,6 +288,8 @@ export interface DateProps extends LocaleProps, ThemeProps {
288
288
  largeMode?: boolean;
289
289
  onScheduleClick?: (scheduleData: any) => void;
290
290
 
291
+ useMobileUI?: boolean;
292
+
291
293
  // 下面那个千万不要写,写了就会导致 keyof DateProps 得到的结果是 string | number;
292
294
  // [propName: string]: any;
293
295
  }
@@ -567,6 +569,7 @@ export class DatePicker extends React.Component<DateProps, DatePickerState> {
567
569
  const isOpened = this.state.isOpened;
568
570
  let date: moment.Moment | undefined = this.state.value;
569
571
 
572
+
570
573
  if (embed) {
571
574
  let schedulesData: DateProps['schedules'] = undefined;
572
575
  if (schedules && Array.isArray(schedules)) {
@@ -0,0 +1,145 @@
1
+ /**
2
+ * @file Picker
3
+ * @description 移动端列滚动选择器
4
+ */
5
+ import React, {
6
+ memo,
7
+ ReactNode,
8
+ useState
9
+ } from 'react';
10
+ import {uncontrollable} from 'uncontrollable';
11
+
12
+ import {themeable, ThemeProps} from '../theme';
13
+ import {localeable, LocaleProps} from '../locale';
14
+
15
+ import Button from './Button';
16
+ import {PickerColumnItem, default as Column} from './PickerColumn';
17
+
18
+ export type PickerValue = string | number;
19
+
20
+ export interface PickerProps extends ThemeProps, LocaleProps {
21
+ title?: String | ReactNode,
22
+ labelField?: string;
23
+ className?: string;
24
+ showToolbar?: boolean;
25
+ defaultValue?: PickerValue[];
26
+ value?: PickerValue[];
27
+ swipeDuration?: number;
28
+ visibleItemCount?: number;
29
+ itemHeight?: number;
30
+ columns: PickerColumnItem[] | PickerColumnItem;
31
+ onChange?: (
32
+ value?: PickerValue[],
33
+ index?: number,
34
+ confirm?: boolean
35
+ ) => void;
36
+ onClose?: (
37
+ value?: PickerValue[]
38
+ ) => void;
39
+ onConfirm?: (
40
+ value?: PickerValue[]
41
+ ) => void;
42
+ }
43
+
44
+ function fixToArray(data: any) {
45
+ if (!Array.isArray(data)) {
46
+ return [data];
47
+ }
48
+ return data;
49
+ }
50
+
51
+ const Picker = memo<PickerProps>((props) => {
52
+ const {
53
+ labelField,
54
+ visibleItemCount = 5,
55
+ value = [],
56
+ swipeDuration = 1000,
57
+ columns = [],
58
+ itemHeight = 30,
59
+ showToolbar = true,
60
+ className='',
61
+ classnames: cx,
62
+ classPrefix: ns,
63
+ translate: __
64
+ } = props;
65
+
66
+ const _columns = fixToArray(columns);
67
+ const [innerValue, setInnerValue] = useState<PickerValue[]>(
68
+ fixToArray(props.value === undefined ? props.defaultValue || [] : value )
69
+ );
70
+
71
+ const close = () => {
72
+ if (props.onClose) {
73
+ props.onClose(innerValue);
74
+ }
75
+ };
76
+
77
+ const confirm = () => {
78
+ if (props.onConfirm) {
79
+ props.onConfirm(innerValue);
80
+ }
81
+ };
82
+
83
+ const onChange = (itemValue: PickerValue, columnIndex: number, confirm?: boolean) => {
84
+ const nextInnerValue = [...innerValue];
85
+ nextInnerValue[columnIndex] = itemValue;
86
+ setInnerValue(nextInnerValue);
87
+ if (props.onChange) {
88
+ props.onChange(nextInnerValue, columnIndex, confirm);
89
+ }
90
+ };
91
+
92
+ const renderColumnItem = (item: PickerColumnItem, index: number) => {
93
+ return (
94
+ <Column
95
+ {...item}
96
+ classnames={cx}
97
+ classPrefix={ns}
98
+ labelField={labelField}
99
+ itemHeight={itemHeight}
100
+ swipeDuration={swipeDuration}
101
+ visibleItemCount={visibleItemCount}
102
+ value={innerValue[index]}
103
+ onChange={(val: string | number, i, confirm) => {
104
+ onChange(val, index, confirm);
105
+ }}
106
+ />)
107
+ };
108
+
109
+ const wrapHeight = itemHeight * +visibleItemCount;
110
+ const frameStyle = {height: `${itemHeight}px`};
111
+ const columnsStyle = {height: `${wrapHeight}px`};
112
+ const maskStyle = {
113
+ backgroundSize: `100% ${(wrapHeight - itemHeight) / 2}px`
114
+ };
115
+
116
+ return (
117
+ <div
118
+ className={cx(className, 'PickerColumns', 'PickerColumns-popOver')}
119
+ >
120
+ {showToolbar && <div className={cx('PickerColumns-toolbar')}>
121
+ <Button className="PickerColumns-cancel" level="default" onClick={close}>
122
+ {__('cancel')}
123
+ </Button>
124
+ <Button className="PickerColumns-confirm" level="primary" onClick={confirm}>
125
+ {__('confirm')}
126
+ </Button>
127
+ </div>}
128
+ <div className={cx('PickerColumns-columns')} style={columnsStyle}>
129
+ {
130
+ _columns.map((column: PickerColumnItem, index: number) => renderColumnItem(column, index))
131
+ }
132
+ <div className={cx('PickerColumns-mask')} style={maskStyle}></div>
133
+ <div className={cx('PickerColumns-frame')} style={frameStyle}></div>
134
+ </div>
135
+ </div>
136
+ );
137
+ });
138
+
139
+ export default themeable(
140
+ localeable(
141
+ uncontrollable(Picker, {
142
+ value: 'onChange'
143
+ })
144
+ )
145
+ );