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
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @file Picker
3
- * @description 移动端选择器
3
+ * @description 移动端列滚动选择器
4
4
  */
5
5
  import React, {
6
6
  useEffect,
@@ -8,8 +8,7 @@ import React, {
8
8
  useRef,
9
9
  useImperativeHandle,
10
10
  useCallback,
11
- forwardRef,
12
- CSSProperties
11
+ forwardRef
13
12
  } from 'react';
14
13
  import isObject from 'lodash/isObject';
15
14
  import cloneDeep from 'lodash/cloneDeep';
@@ -18,37 +17,25 @@ import {uncontrollable} from 'uncontrollable';
18
17
  import {useSetState, useUpdateEffect} from '../hooks';
19
18
  import {range} from '../utils/helper';
20
19
  import {themeable, ThemeProps} from '../theme';
21
- import {localeable, LocaleProps} from '../locale';
22
20
  import useTouch from '../hooks/use-touch';
23
- import Button from './Button';
24
21
 
25
- export interface PickerColumnProps extends ThemeProps, LocaleProps {
26
- mobileClassName?: string;
27
- style?: CSSProperties;
28
- index?: number;
29
- labelField: string;
22
+ export interface PickerColumnItem {
23
+ labelField?: string;
30
24
  readonly?: boolean;
31
- value: any;
32
- swipeDuration?: number | string;
33
- visibleItemCount?: number | string;
25
+ value?: PickerOption;
26
+ swipeDuration?: number;
27
+ visibleItemCount?: number;
28
+ itemHeight?: number;
34
29
  options?: PickerOption[];
35
- children?: any;
36
30
  optionRender?: (option: string | object | PickerOption) => React.ReactNode;
37
31
  onChange?: (
38
32
  value?: PickerOption | string,
39
33
  index?: number,
40
34
  confirm?: boolean
41
35
  ) => void;
42
- onClose?: () => void;
43
- onConfirm?: () => void;
44
- }
36
+ };
45
37
 
46
- export interface Column {
47
- values?: string[];
48
- className?: string;
49
- children?: Column[];
50
- disabled?: boolean;
51
- }
38
+ export interface PickerColumnProps extends PickerColumnItem, ThemeProps {}
52
39
 
53
40
  export type PickerOption = string | number | PickerObjectOption;
54
41
 
@@ -77,23 +64,17 @@ function getElementTranslateY(element: HTMLElement | null) {
77
64
  function isOptionDisabled(option: PickerOption) {
78
65
  return isObject(option) && option.disabled;
79
66
  }
80
-
67
+
81
68
  const PickerColumn = forwardRef<{}, PickerColumnProps>((props, ref) => {
82
69
  const {
83
- onClose,
84
- onConfirm,
85
- mobileClassName,
86
70
  visibleItemCount = 5,
71
+ itemHeight = 30,
87
72
  value,
88
73
  swipeDuration = 1000,
89
- labelField = 'value',
90
- translate: __,
74
+ labelField = 'text',
91
75
  options = [],
92
76
  classnames: cx
93
77
  } = props;
94
- let itemHeight = 24;
95
-
96
- const defaultIndex = options.findIndex(item => item === value);
97
78
 
98
79
  const root = useRef(null);
99
80
  const menuItemRef = useRef(null);
@@ -105,21 +86,9 @@ const PickerColumn = forwardRef<{}, PickerColumnProps>((props, ref) => {
105
86
  const touchStartTime = useRef(0);
106
87
  const momentumOffset = useRef(0);
107
88
 
108
- if (menuItemRef.current) {
109
- //@ts-ignore
110
- itemHeight = menuItemRef.current.getBoundingClientRect().height;
111
- }
112
-
113
- const [state, updateState] = useSetState({
114
- index: defaultIndex,
115
- offset: 0,
116
- duration: 0,
117
- options: cloneDeep(options)
118
- });
119
-
120
89
  const touch = useTouch();
121
-
122
- const count = state.options.length;
90
+ const count = options.length;
91
+ const defaultIndex = options.findIndex(item => item === value);
123
92
 
124
93
  const baseOffset = useMemo(() => {
125
94
  // 默认转入第一个选项的位置
@@ -128,20 +97,27 @@ const PickerColumn = forwardRef<{}, PickerColumnProps>((props, ref) => {
128
97
 
129
98
  const adjustIndex = (index: number) => {
130
99
  index = range(index, 0, count);
131
- if (!state.options) {
100
+ if (!options) {
132
101
  return;
133
102
  }
134
103
 
135
104
  for (let i = index; i < count; i += 1) {
136
- if (!isOptionDisabled(state.options[i])) return i;
105
+ if (!isOptionDisabled(options[i])) return i;
137
106
  }
138
107
  for (let i = index - 1; i >= 0; i -= 1) {
139
- if (!isOptionDisabled(state.options[i])) return i;
108
+ if (!isOptionDisabled(options[i])) return i;
140
109
  }
141
110
 
142
111
  return null;
143
112
  };
144
113
 
114
+ const [state, updateState] = useSetState({
115
+ index: adjustIndex(defaultIndex) || 0,
116
+ offset: 0,
117
+ duration: 0,
118
+ options: cloneDeep(options)
119
+ });
120
+
145
121
  /**
146
122
  *
147
123
  * @param index 索引
@@ -156,9 +132,14 @@ const PickerColumn = forwardRef<{}, PickerColumnProps>((props, ref) => {
156
132
  updateState({index});
157
133
 
158
134
  if (emitChange && props.onChange) {
159
- setTimeout(() => {
160
- props.onChange?.(options[index], index, confirm);
161
- }, 0);
135
+ requestAnimationFrame(
136
+ () => {
137
+ props.onChange?.(options[index], index, confirm);
138
+ }
139
+ );
140
+ // setTimeout(() => {
141
+ // props.onChange?.(options[index], index, confirm);
142
+ // }, 0);
162
143
  }
163
144
  };
164
145
 
@@ -175,7 +156,8 @@ const PickerColumn = forwardRef<{}, PickerColumnProps>((props, ref) => {
175
156
  const setOptions = (options: Array<PickerOption>) => {
176
157
  if (JSON.stringify(options) !== JSON.stringify(state.options)) {
177
158
  updateState({options});
178
- setIndex(defaultIndex, true);
159
+ const index = options.findIndex(item => item === value) || 0;
160
+ setIndex(index, true, true);
179
161
  }
180
162
  };
181
163
 
@@ -189,7 +171,7 @@ const PickerColumn = forwardRef<{}, PickerColumnProps>((props, ref) => {
189
171
  };
190
172
 
191
173
  const getOptionText = (option: [] | PickerOption) => {
192
- if (isObject(option) && props.labelField in option) {
174
+ if (isObject(option) && labelField in option) {
193
175
  //@ts-ignore
194
176
  return option[labelField];
195
177
  }
@@ -298,6 +280,10 @@ const PickerColumn = forwardRef<{}, PickerColumnProps>((props, ref) => {
298
280
  };
299
281
 
300
282
  const renderOptions = () => {
283
+ const style = {
284
+ height: `${itemHeight}px`,
285
+ lineHeight: `${itemHeight}px`
286
+ };
301
287
  return state.options.map((option, index: number) => {
302
288
  const text: string | PickerOption = getOptionText(option);
303
289
  const disabled = isOptionDisabled(option);
@@ -305,6 +291,7 @@ const PickerColumn = forwardRef<{}, PickerColumnProps>((props, ref) => {
305
291
  const data = {
306
292
  role: 'button',
307
293
  key: index,
294
+ style,
308
295
  tabIndex: disabled ? -1 : 0,
309
296
  className: props.classnames(`PickerColumns-columnItem`, {
310
297
  'is-disabled': disabled,
@@ -314,7 +301,7 @@ const PickerColumn = forwardRef<{}, PickerColumnProps>((props, ref) => {
314
301
  onClickItem(index);
315
302
  }
316
303
  };
317
-
304
+
318
305
  const childData = {
319
306
  className: 'text-ellipsis',
320
307
  children: text
@@ -335,7 +322,7 @@ const PickerColumn = forwardRef<{}, PickerColumnProps>((props, ref) => {
335
322
  const setValue = (value: string) => {
336
323
  const {options} = state;
337
324
  for (let i = 0; i < options.length; i += 1) {
338
- if (getOptionText(options[i]) === value) {
325
+ if (options[i] === value) {
339
326
  return setIndex(i);
340
327
  }
341
328
  }
@@ -348,7 +335,7 @@ const PickerColumn = forwardRef<{}, PickerColumnProps>((props, ref) => {
348
335
  );
349
336
 
350
337
  useEffect(() => {
351
- setIndex(defaultIndex, true);
338
+ setIndex(defaultIndex);
352
339
  }, [defaultIndex]);
353
340
 
354
341
  useUpdateEffect(() => {
@@ -369,61 +356,37 @@ const PickerColumn = forwardRef<{}, PickerColumnProps>((props, ref) => {
369
356
  transitionDuration: `${state.duration}ms`,
370
357
  transitionProperty: state.duration ? 'all' : 'none'
371
358
  };
372
-
373
- const wrapHeight = itemHeight * +visibleItemCount;
374
- const frameStyle = {height: `${itemHeight}px`};
375
- const columnsStyle = {height: `${wrapHeight}px`};
376
- const maskStyle = {
377
- backgroundSize: `100% ${(wrapHeight - itemHeight) / 2}px`
378
- };
379
-
380
359
  return (
381
- <div
382
- className={cx(mobileClassName, 'PickerColumns', 'PickerColumns-popOver')}
383
- >
384
- <div className={cx('PickerColumns-toolbar')}>
385
- <Button level="default" onClick={onClose}>
386
- {__('cancel')}
387
- </Button>
388
- <Button level="primary" onClick={onConfirm}>
389
- {__('confirm')}
390
- </Button>
391
- </div>
392
- <div className={cx('PickerColumns-columns')} style={columnsStyle}>
393
- <div
360
+ <div
394
361
  ref={root}
395
- className={props.classnames(props.className)}
362
+ className={props.classnames('PickerColumns', props.className)}
396
363
  onTouchStart={onTouchStart}
397
364
  onTouchMove={onTouchMove}
398
365
  onTouchEnd={onTouchEnd}
399
366
  onTouchCancel={onTouchEnd}
400
- >
367
+ >
401
368
  <ul
402
- ref={wrapper}
403
- style={wrapperStyle}
404
- className={props.classnames('PickerColumns-columnWrapper')}
405
- onTransitionEnd={stopMomentum}
369
+ ref={wrapper}
370
+ style={wrapperStyle}
371
+ className={props.classnames('PickerColumns-columnWrapper')}
372
+ onTransitionEnd={stopMomentum}
406
373
  >
407
- {renderOptions()}
374
+ {renderOptions()}
408
375
  </ul>
409
- </div>
410
- <div className={cx('PickerColumns-mask')} style={maskStyle}></div>
411
- <div className={cx('PickerColumns-frame')} style={frameStyle}></div>
412
376
  </div>
413
- </div>
414
377
  );
415
378
  });
416
379
 
417
380
  PickerColumn.defaultProps = {
418
381
  options: [],
419
382
  visibleItemCount: 5,
420
- swipeDuration: 1000
383
+ swipeDuration: 1000,
384
+ itemHeight: 30
421
385
  };
422
386
 
423
387
  export default themeable(
424
- localeable(
425
- uncontrollable(PickerColumn, {
426
- value: 'onChange'
427
- })
428
- )
388
+ uncontrollable(PickerColumn, {
389
+ value: 'onChange'
390
+ })
429
391
  );
392
+
@@ -118,7 +118,7 @@ export class Progress extends React.Component<ProgressProps, Object> {
118
118
  };
119
119
 
120
120
  viewValue = [
121
- <div className={cx(prefixCls)}>
121
+ <div className={cx(prefixCls)} key="circle">
122
122
  <Circle
123
123
  percent={value}
124
124
  strokeColor=""
@@ -36,7 +36,7 @@ import {LocaleProps, localeable} from '../locale';
36
36
  import Spinner from './Spinner';
37
37
  import {Option, Options} from '../Schema';
38
38
  import {RemoteOptionsProps, withRemoteConfig} from './WithRemoteConfig';
39
- import PickerColumn from './PickerColumn';
39
+ import Picker from './Picker';
40
40
 
41
41
  export {Option, Options};
42
42
 
@@ -569,7 +569,10 @@ export class Select extends React.Component<SelectProps, SelectState> {
569
569
  );
570
570
  }
571
571
 
572
- handlePickerChange(selectItem: any, index: number, confirm: boolean) {
572
+ handlePickerChange(selectItem: any, index: number, confirm?: boolean) {
573
+ if (!this.props.multiple) {
574
+ selectItem = selectItem[0];
575
+ }
573
576
  this.setState({
574
577
  pickerSelectItem: selectItem
575
578
  });
@@ -916,20 +919,22 @@ export class Select extends React.Component<SelectProps, SelectState> {
916
919
  };
917
920
 
918
921
  const mobileUI = isMobile() && useMobileUI;
922
+ const column = {
923
+ labelField: 'label',
924
+ options: filtedOptions
925
+ };
919
926
  const menu = mobileUI ? (
920
- <PickerColumn
921
- mobileClassName={mobileClassName}
922
- labelField={'label'}
923
- readonly={false}
924
- className={'PickerColumns-column'}
925
- value={value && value[0]}
926
- swipeDuration={1000}
927
- visibleItemCount={5}
928
- options={filtedOptions}
927
+ <Picker
928
+ className={cx('PickerColumns-column', mobileClassName)}
929
+ labelField='label'
930
+ value={value[0]}
931
+ translate={this.props.translate}
932
+ locale={this.props.locale}
933
+ columns={[column]}
929
934
  onChange={checkAll ? noop : this.handlePickerChange}
930
935
  onClose={this.close}
931
936
  onConfirm={this.confirm}
932
- ></PickerColumn>
937
+ />
933
938
  ) : (
934
939
  <div
935
940
  ref={this.menu}
@@ -126,10 +126,7 @@ export class BaseSelection<
126
126
 
127
127
  @autobind
128
128
  toggleAll() {
129
- const {value, onChange, option2value, options, multiple} = this.props;
130
- if (multiple) {
131
- return;
132
- }
129
+ const {value, onChange, option2value, options} = this.props;
133
130
 
134
131
  let valueArray: Array<Option> = [];
135
132
 
@@ -28,15 +28,15 @@ interface SwitchProps {
28
28
  className?: string;
29
29
  classPrefix: string;
30
30
  classnames: ClassNamesFn;
31
- onChange?: (checked: boolean) => void;
32
- value?: any;
31
+ onChange?: (checked: boolean | string | number) => void;
32
+ value?: boolean | string | number;
33
33
  inline?: boolean;
34
- trueValue?: any;
35
- falseValue?: any;
34
+ trueValue?: boolean | string | number;
35
+ falseValue?: boolean | string | number;
36
36
  disabled?: boolean;
37
37
  readOnly?: boolean;
38
- onText?: string;
39
- offText?: string;
38
+ onText?: React.ReactNode;
39
+ offText?: React.ReactNode;
40
40
  checked?: boolean;
41
41
  }
42
42
 
@@ -59,7 +59,7 @@ export class Switch extends React.PureComponent<SwitchProps, any> {
59
59
  return;
60
60
  }
61
61
 
62
- onChange(e.currentTarget.checked ? trueValue : falseValue);
62
+ onChange(e.currentTarget.checked ? trueValue! : falseValue!);
63
63
  }
64
64
 
65
65
  render() {
@@ -7,6 +7,7 @@ import CustomCalendarContainer from './CalendarContainer';
7
7
  import cx from 'classnames';
8
8
  import moment from 'moment';
9
9
  import {themeable, ThemeOutterProps, ThemeProps} from '../../theme';
10
+ import {convertDateArrayToDate} from "../../utils/helper";
10
11
 
11
12
  interface BaseDatePickerProps
12
13
  extends Omit<ReactDatePicker.DatetimepickerProps, 'viewMode'> {
@@ -191,6 +192,22 @@ class BaseDatePicker extends ReactDatePicker {
191
192
  that.props.onChange(date);
192
193
  };
193
194
 
195
+ onConfirm = (value: number[], types: string[]) => {
196
+ const currentDate = (this.state.selectedDate || this.state.viewDate || moment()).clone();
197
+
198
+ const date = convertDateArrayToDate(value, types, currentDate);
199
+
200
+ if (!this.props.value) {
201
+ this.setState({
202
+ selectedDate: date,
203
+ inputValue: date!.format(this.state.inputFormat)
204
+ });
205
+ }
206
+ this.props.onChange && this.props.onChange(date);
207
+ this.props.onClose && this.props.onClose();
208
+ }
209
+
210
+
194
211
  render() {
195
212
  const Component = CustomCalendarContainer as any;
196
213
  const viewProps = this.getComponentProps();
@@ -202,6 +219,7 @@ class BaseDatePicker extends ReactDatePicker {
202
219
  ];
203
220
  }
204
221
 
222
+ viewProps.onConfirm = this.onConfirm;
205
223
  return (
206
224
  <div className={cx('rdt rdtStatic rdtOpen', this.props.className)}>
207
225
  <div key="dt" className="rdtPicker">
@@ -185,11 +185,12 @@ export class CustomDaysView extends DaysView {
185
185
  const width = item.width || Math.min(moment(item.endTime).diff(moment(item.startTime), 'days') + 1, 7 - moment(item.startTime).weekday());
186
186
  return <div key={props.key + 'content' + index}
187
187
  className={cx('ScheduleCalendar-large-schedule-content', item.className)}
188
- style={{width: width + '00%'}}>
188
+ style={{width: width + '00%'}}
189
+ onClick={() => this.props.onScheduleClick && this.props.onScheduleClick(scheduleData)}>
189
190
  <div className={cx('ScheduleCalendar-text-overflow')}>{item.content}</div>
190
191
  </div>;
191
192
  });
192
- return <td {...props} onClick={() => this.props.onScheduleClick && this.props.onScheduleClick(scheduleData)}>
193
+ return <td {...props}>
193
194
  <div className={cx('ScheduleCalendar-large-day-wrap')}>
194
195
  <div className={cx('ScheduleCalendar-large-schedule-header')}>{currentDate.date()}</div>
195
196
  {scheduleDiv}
@@ -199,8 +200,9 @@ export class CustomDaysView extends DaysView {
199
200
  }
200
201
 
201
202
  // 正常模式
202
- const ScheduleIcon = <span className={cx('ScheduleCalendar-icon', schedule[0].className)}></span>;
203
- return <td {...props} onClick={() => this.props.onScheduleClick && this.props.onScheduleClick(scheduleData)}>
203
+ const ScheduleIcon = <span className={cx('ScheduleCalendar-icon', schedule[0].className)}
204
+ onClick={() => this.props.onScheduleClick && this.props.onScheduleClick(scheduleData)}></span>;
205
+ return <td {...props}>
204
206
  {currentDate.date()}
205
207
  {ScheduleIcon}
206
208
  </td>;
@@ -5,6 +5,9 @@ import React from 'react';
5
5
  import {LocaleProps, localeable} from '../../locale';
6
6
  import {Icon} from '../icons';
7
7
  import {ClassNamesFn} from '../../theme';
8
+ import Picker from '../Picker';
9
+ import {PickerColumnItem} from '../PickerColumn';
10
+ import {getRange, isMobile} from "../../utils/helper";
8
11
 
9
12
  export class CustomTimeView extends TimeView {
10
13
  props: {
@@ -23,6 +26,9 @@ export class CustomTimeView extends TimeView {
23
26
  timeFormat: string;
24
27
  classnames: ClassNamesFn;
25
28
  setTime: (type: string, value: any) => void;
29
+ onClose?: () => void;
30
+ onConfirm?: (value: number[], types: string[]) => void;
31
+ useMobileUI: boolean;
26
32
  } & LocaleProps;
27
33
  onStartClicking: any;
28
34
  disableContextMenu: any;
@@ -68,10 +74,9 @@ export class CustomTimeView extends TimeView {
68
74
  );
69
75
  };
70
76
 
71
- renderCounter = (type: string) => {
72
- const cx = this.props.classnames;
77
+ getCounterValue = (type: string) => {
73
78
  if (type !== 'daypart') {
74
- var value = this.state[type];
79
+ let value = this.state[type];
75
80
  if (
76
81
  type === 'hours' &&
77
82
  this.props.timeFormat.toLowerCase().indexOf(' a') !== -1
@@ -82,6 +87,15 @@ export class CustomTimeView extends TimeView {
82
87
  value = 12;
83
88
  }
84
89
  }
90
+ return parseInt(value);
91
+ }
92
+ return 0;
93
+ }
94
+
95
+ renderCounter = (type: string) => {
96
+ const cx = this.props.classnames;
97
+ if (type !== 'daypart') {
98
+ const value = this.getCounterValue(type);
85
99
 
86
100
  const {min, max, step} = this.timeConstraints[type];
87
101
 
@@ -134,10 +148,71 @@ export class CustomTimeView extends TimeView {
134
148
  return null;
135
149
  };
136
150
 
151
+ onConfirm = (value: number[]) => {
152
+ this.props.onConfirm && this.props.onConfirm(value, this.state.counters);
153
+ }
154
+
155
+ getDayPartOptions = () => {
156
+ const {translate: __} = this.props;
157
+ let options = ['am', 'pm'];
158
+ if ( this.props.timeFormat.indexOf( ' A' ) !== -1 ) {
159
+ options = ['AM', 'PM'];
160
+ }
161
+
162
+ return options.map(daypart => ({
163
+ text: __(daypart),
164
+ value: daypart
165
+ }));
166
+ }
167
+
168
+ renderTimeViewPicker = () => {
169
+ const columns: PickerColumnItem[] = [];
170
+ const values = [];
171
+
172
+ this.state.counters.forEach(type => {
173
+ if (type !== 'daypart') {
174
+ const counterValue: number = this.getCounterValue(type);
175
+ let {min, max, step} = this.timeConstraints[type];
176
+ // 修正am pm时hours可选最大值
177
+ if (type === 'hours'
178
+ && this.state.daypart !== false
179
+ && this.props.timeFormat.toLowerCase().indexOf(' a') !== -1) {
180
+ max = max > 12 ? 12 : max;
181
+ }
182
+ columns.push({
183
+ options: getRange(min, max, step)
184
+ });
185
+ values.push(counterValue);
186
+ }
187
+ });
188
+ if (this.state.daypart !== false) {
189
+ columns.push({
190
+ options: this.getDayPartOptions()
191
+ });
192
+ values.push(this.state.daypart)
193
+ }
194
+
195
+ return (
196
+ <Picker
197
+ translate={this.props.translate}
198
+ locale={this.props.locale}
199
+ columns={columns}
200
+ value={values}
201
+ onConfirm={this.onConfirm}
202
+ onClose={this.props.onClose}
203
+ />
204
+ );
205
+ }
206
+
137
207
  render() {
138
- const counters: Array<JSX.Element | null> = [];
208
+ let counters: Array<JSX.Element | null> = [];
139
209
  const cx = this.props.classnames;
140
-
210
+
211
+ if (isMobile() && this.props.useMobileUI) {
212
+ return <div className={cx('CalendarTime')}>
213
+ {this.renderTimeViewPicker()}
214
+ </div>
215
+ }
141
216
  this.state.counters.forEach(c => {
142
217
  if (counters.length) {
143
218
  counters.push(
@@ -3,10 +3,13 @@ import YearsView from 'react-datetime/src/YearsView';
3
3
  import moment from 'moment';
4
4
  import React from 'react';
5
5
  import {LocaleProps, localeable} from '../../locale';
6
+ import Picker from '../Picker';
7
+ import {convertDateToObject, getRange, isMobile} from "../../utils/helper";
6
8
 
7
9
  export class CustomYearsView extends YearsView {
8
10
  props: {
9
11
  viewDate: moment.Moment;
12
+ selectedDate: moment.Moment;
10
13
  subtractTime: (
11
14
  amount: number,
12
15
  type: string,
@@ -18,6 +21,12 @@ export class CustomYearsView extends YearsView {
18
21
  toSelected?: moment.Moment
19
22
  ) => () => void;
20
23
  showView: (view: string) => () => void;
24
+ minDate?: moment.Moment;
25
+ maxDate?: moment.Moment;
26
+ onChange?: () => void;
27
+ onClose?: () => void;
28
+ onConfirm?: (value: number[], types: string[]) => void;
29
+ useMobileUI: boolean;
21
30
  } & LocaleProps;
22
31
  renderYears: (year: number) => JSX.Element;
23
32
  renderYear = (props: any, year: number) => {
@@ -27,11 +36,45 @@ export class CustomYearsView extends YearsView {
27
36
  </td>
28
37
  );
29
38
  };
39
+
40
+ onConfirm = (value: number[]) => {
41
+ this.props.onConfirm && this.props.onConfirm(value, ["year"])
42
+ }
43
+
44
+ renderYearPicker = () => {
45
+ const {minDate, maxDate, selectedDate, viewDate} = this.props;
46
+ const year = (selectedDate || viewDate || moment()).year();
47
+ const maxYear = maxDate ? convertDateToObject(maxDate)!.year : year + 100;
48
+ const minYear = minDate ? convertDateToObject(minDate)!.year : year - 100;
49
+
50
+ const columns = [{
51
+ options: getRange(minYear, maxYear, 1)
52
+ }];
53
+
54
+ return (
55
+ <Picker
56
+ translate={this.props.translate}
57
+ locale={this.props.locale}
58
+ columns={columns}
59
+ value={[year]}
60
+ onConfirm={this.onConfirm}
61
+ onClose={this.props.onClose}
62
+ />
63
+ );
64
+ };
65
+
30
66
  render() {
31
67
  let year = this.props.viewDate.year();
32
68
  year = year - (year % 10);
33
69
  const __ = this.props.translate;
34
-
70
+
71
+ if (isMobile() && this.props.useMobileUI) {
72
+ return (
73
+ <div className="rdtYears">
74
+ {this.renderYearPicker()}
75
+ </div>
76
+ );
77
+ }
35
78
  return (
36
79
  <div className="rdtYears">
37
80
  <table>
@@ -12,6 +12,7 @@ import Button from './Button';
12
12
  import Checkbox from './Checkbox';
13
13
  import Checkboxes from './Selection';
14
14
  import Collapse from './Collapse';
15
+ import CollapseGroup from './CollapseGroup';
15
16
  import DatePicker from './DatePicker';
16
17
  import DateRangePicker from './DateRangePicker';
17
18
  import Drawer from './Drawer';
@@ -69,6 +70,7 @@ export {
69
70
  Checkbox,
70
71
  Checkboxes,
71
72
  Collapse,
73
+ CollapseGroup,
72
74
  DatePicker,
73
75
  DateRangePicker,
74
76
  Drawer,