amis 1.5.8-beta.2 → 1.6.0

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 (187) hide show
  1. package/lib/components/CalendarMobile.js +5 -5
  2. package/lib/components/CalendarMobile.js.map +2 -2
  3. package/lib/components/Card.d.ts +20 -20
  4. package/lib/components/Cascader.d.ts +123 -0
  5. package/lib/components/Cascader.js +487 -0
  6. package/lib/components/Cascader.js.map +13 -0
  7. package/lib/components/CityArea.d.ts +527 -0
  8. package/lib/components/CityArea.js +177 -0
  9. package/lib/components/CityArea.js.map +13 -0
  10. package/lib/components/ColorPicker.js +4 -3
  11. package/lib/components/ColorPicker.js.map +2 -2
  12. package/lib/components/DatePicker.d.ts +85 -84
  13. package/lib/components/DatePicker.js +7 -6
  14. package/lib/components/DatePicker.js.map +2 -2
  15. package/lib/components/DateRangePicker.js +8 -11
  16. package/lib/components/DateRangePicker.js.map +2 -2
  17. package/lib/components/MonthRangePicker.js +5 -8
  18. package/lib/components/MonthRangePicker.js.map +2 -2
  19. package/lib/components/Picker.d.ts +1 -0
  20. package/lib/components/Picker.js +10 -6
  21. package/lib/components/Picker.js.map +2 -2
  22. package/lib/components/PickerColumn.d.ts +1 -0
  23. package/lib/components/PickerColumn.js +21 -17
  24. package/lib/components/PickerColumn.js.map +2 -2
  25. package/lib/components/PopOverContainer.d.ts +1 -0
  26. package/lib/components/PopOverContainer.js +5 -3
  27. package/lib/components/PopOverContainer.js.map +2 -2
  28. package/lib/components/PopUp.d.ts +1040 -28
  29. package/lib/components/PopUp.js +32 -8
  30. package/lib/components/PopUp.js.map +2 -2
  31. package/lib/components/ResultBox.d.ts +85 -84
  32. package/lib/components/ResultBox.js +7 -3
  33. package/lib/components/ResultBox.js.map +2 -2
  34. package/lib/components/Select.js +9 -6
  35. package/lib/components/Select.js.map +2 -2
  36. package/lib/components/TransferDropDown.d.ts +85 -84
  37. package/lib/components/TransferDropDown.js +9 -6
  38. package/lib/components/TransferDropDown.js.map +2 -2
  39. package/lib/components/calendar/Calendar.d.ts +14 -0
  40. package/lib/components/calendar/Calendar.js +62 -5
  41. package/lib/components/calendar/Calendar.js.map +2 -2
  42. package/lib/components/calendar/DaysView.d.ts +20 -0
  43. package/lib/components/calendar/DaysView.js +51 -4
  44. package/lib/components/calendar/DaysView.js.map +2 -2
  45. package/lib/components/calendar/MonthsView.d.ts +7 -1
  46. package/lib/components/calendar/MonthsView.js +41 -52
  47. package/lib/components/calendar/MonthsView.js.map +2 -2
  48. package/lib/components/calendar/TimeView.d.ts +27 -20
  49. package/lib/components/calendar/TimeView.js +40 -4
  50. package/lib/components/calendar/TimeView.js.map +2 -2
  51. package/lib/components/calendar/YearsView.d.ts +6 -0
  52. package/lib/components/calendar/YearsView.js +15 -6
  53. package/lib/components/calendar/YearsView.js.map +2 -2
  54. package/lib/index.js +1 -1
  55. package/lib/locale/de-DE.js +4 -0
  56. package/lib/locale/de-DE.js.map +2 -2
  57. package/lib/locale/en-US.js +4 -0
  58. package/lib/locale/en-US.js.map +2 -2
  59. package/lib/locale/zh-CN.js +4 -0
  60. package/lib/locale/zh-CN.js.map +2 -2
  61. package/lib/renderers/DropDownButton.d.ts +11 -2
  62. package/lib/renderers/DropDownButton.js +30 -12
  63. package/lib/renderers/DropDownButton.js.map +2 -2
  64. package/lib/renderers/Form/CityDB.js +526 -2
  65. package/lib/renderers/Form/CityDB.js.map +2 -2
  66. package/lib/renderers/Form/InputCity.d.ts +85 -84
  67. package/lib/renderers/Form/InputCity.js +4 -2
  68. package/lib/renderers/Form/InputCity.js.map +2 -2
  69. package/lib/renderers/Form/InputColor.js +6 -2
  70. package/lib/renderers/Form/InputColor.js.map +2 -2
  71. package/lib/renderers/Form/InputDate.js +5 -2
  72. package/lib/renderers/Form/InputDate.js.map +2 -2
  73. package/lib/renderers/Form/InputDateRange.js +6 -2
  74. package/lib/renderers/Form/InputDateRange.js.map +2 -2
  75. package/lib/renderers/Form/Item.d.ts +10 -14
  76. package/lib/renderers/Form/Item.js +7 -5
  77. package/lib/renderers/Form/Item.js.map +2 -2
  78. package/lib/renderers/Form/NestedSelect.d.ts +1 -0
  79. package/lib/renderers/Form/NestedSelect.js +7 -3
  80. package/lib/renderers/Form/NestedSelect.js.map +2 -2
  81. package/lib/renderers/Form/Select.d.ts +2 -0
  82. package/lib/renderers/Form/Select.js +7 -4
  83. package/lib/renderers/Form/Select.js.map +2 -2
  84. package/lib/renderers/Form/TreeSelect.js +4 -4
  85. package/lib/renderers/Form/TreeSelect.js.map +2 -2
  86. package/lib/renderers/Remark.js +2 -1
  87. package/lib/renderers/Remark.js.map +2 -2
  88. package/lib/schemaExtend.js +23 -9
  89. package/lib/schemaExtend.js.map +2 -2
  90. package/lib/themes/ang-ie11.css +312 -29
  91. package/lib/themes/ang.css +312 -29
  92. package/lib/themes/ang.css.map +1 -1
  93. package/lib/themes/antd-ie11.css +312 -29
  94. package/lib/themes/antd.css +312 -29
  95. package/lib/themes/antd.css.map +1 -1
  96. package/lib/themes/cxd-ie11.css +315 -41
  97. package/lib/themes/cxd.css +315 -41
  98. package/lib/themes/cxd.css.map +1 -1
  99. package/lib/themes/dark-ie11.css +312 -29
  100. package/lib/themes/dark.css +312 -29
  101. package/lib/themes/dark.css.map +1 -1
  102. package/lib/themes/default.css +315 -41
  103. package/lib/themes/default.css.map +1 -1
  104. package/lib/utils/helper.d.ts +1 -6
  105. package/lib/utils/helper.js +6 -17
  106. package/lib/utils/helper.js.map +2 -2
  107. package/package.json +1 -2
  108. package/schema.json +2192 -20
  109. package/scss/_properties.scss +10 -6
  110. package/scss/components/_calendar.scss +9 -2
  111. package/scss/components/_cascader.scss +102 -0
  112. package/scss/components/_city-area.scss +27 -0
  113. package/scss/components/_dropdown.scss +39 -9
  114. package/scss/components/_picker-columns.scss +15 -5
  115. package/scss/components/_popup.scss +35 -12
  116. package/scss/components/_result-box.scss +31 -0
  117. package/scss/components/form/_checks.scss +2 -0
  118. package/scss/components/form/_color.scss +2 -2
  119. package/scss/components/form/_date-range.scss +1 -1
  120. package/scss/components/form/_date.scss +46 -1
  121. package/scss/components/form/_nested-select.scss +3 -0
  122. package/scss/components/form/_select.scss +32 -3
  123. package/scss/components/form/_transfer.scss +3 -0
  124. package/scss/components/form/_tree-select.scss +1 -1
  125. package/scss/themes/_common.scss +2 -0
  126. package/scss/themes/_cxd-variables.scss +3 -3
  127. package/scss/themes/cxd.scss +0 -12
  128. package/sdk/ang-ie11.css +368 -29
  129. package/sdk/ang.css +367 -30
  130. package/sdk/antd-ie11.css +368 -29
  131. package/sdk/antd.css +367 -30
  132. package/sdk/charts.js +18 -18
  133. package/sdk/codemirror.js +7 -7
  134. package/sdk/color-picker.js +65 -65
  135. package/sdk/cropperjs.js +3 -3
  136. package/sdk/cxd-ie11.css +370 -42
  137. package/sdk/cxd.css +370 -44
  138. package/sdk/dark-ie11.css +368 -29
  139. package/sdk/dark.css +367 -30
  140. package/sdk/exceljs.js +1 -1
  141. package/sdk/locale/de-DE.js +4 -0
  142. package/sdk/markdown.js +69 -69
  143. package/sdk/papaparse.js +1 -1
  144. package/sdk/renderers/Form/CityDB.js +1 -1
  145. package/sdk/rest.js +18 -18
  146. package/sdk/rich-text.js +62 -62
  147. package/sdk/sdk-ie11.css +370 -42
  148. package/sdk/sdk.css +370 -44
  149. package/sdk/sdk.js +1309 -1227
  150. package/sdk/thirds/hls.js/hls.js +18 -18
  151. package/sdk/thirds/mpegts.js/mpegts.js +2 -2
  152. package/sdk/tinymce.js +57 -57
  153. package/src/components/CalendarMobile.tsx +5 -5
  154. package/src/components/Cascader.tsx +564 -0
  155. package/src/components/CityArea.tsx +315 -0
  156. package/src/components/ColorPicker.tsx +5 -2
  157. package/src/components/DatePicker.tsx +15 -5
  158. package/src/components/DateRangePicker.tsx +52 -43
  159. package/src/components/MonthRangePicker.tsx +44 -38
  160. package/src/components/Picker.tsx +27 -12
  161. package/src/components/PickerColumn.tsx +28 -18
  162. package/src/components/PopOverContainer.tsx +31 -17
  163. package/src/components/PopUp.tsx +55 -13
  164. package/src/components/ResultBox.tsx +10 -1
  165. package/src/components/Select.tsx +20 -23
  166. package/src/components/TransferDropDown.tsx +19 -5
  167. package/src/components/calendar/Calendar.tsx +86 -9
  168. package/src/components/calendar/DaysView.tsx +86 -2
  169. package/src/components/calendar/MonthsView.tsx +56 -63
  170. package/src/components/calendar/TimeView.tsx +82 -29
  171. package/src/components/calendar/YearsView.tsx +25 -6
  172. package/src/locale/de-DE.ts +4 -0
  173. package/src/locale/en-US.ts +4 -0
  174. package/src/locale/zh-CN.ts +4 -0
  175. package/src/renderers/DropDownButton.tsx +69 -35
  176. package/src/renderers/Form/CityDB.ts +526 -2
  177. package/src/renderers/Form/InputCity.tsx +23 -3
  178. package/src/renderers/Form/InputColor.tsx +21 -2
  179. package/src/renderers/Form/InputDate.tsx +10 -1
  180. package/src/renderers/Form/InputDateRange.tsx +9 -1
  181. package/src/renderers/Form/Item.tsx +14 -4
  182. package/src/renderers/Form/NestedSelect.tsx +31 -3
  183. package/src/renderers/Form/Select.tsx +15 -2
  184. package/src/renderers/Form/TreeSelect.tsx +10 -6
  185. package/src/renderers/Remark.tsx +2 -1
  186. package/src/schemaExtend.ts +22 -10
  187. package/src/utils/helper.ts +6 -16
@@ -0,0 +1,315 @@
1
+ /**
2
+ * @file 移动端城市选择器
3
+ */
4
+ import React, {useEffect, useState, memo} from 'react';
5
+
6
+ import Picker from './Picker';
7
+ import ResultBox from './ResultBox';
8
+ import {useSetState, useUpdateEffect} from '../hooks';
9
+ import {localeable, LocaleProps} from '../locale';
10
+ import {themeable, ThemeProps} from '../theme';
11
+ import {uncontrollable} from 'uncontrollable';
12
+ import PopUp from './PopUp';
13
+ import {PickerObjectOption} from './PickerColumn';
14
+
15
+ export type AreaColumnOption = {
16
+ text: string;
17
+ value: number;
18
+ };
19
+
20
+ export interface AreaProps extends LocaleProps, ThemeProps {
21
+ value: any;
22
+ /**
23
+ * 允许选择城市?
24
+ */
25
+ allowCity?: boolean;
26
+ /**
27
+ * 允许选择地区?
28
+ */
29
+ allowDistrict?: boolean;
30
+ /**
31
+ * 允许选择街道?
32
+ */
33
+ allowStreet?: boolean;
34
+ /**
35
+ * 开启后只会存城市的 code 信息
36
+ */
37
+ extractValue?: boolean;
38
+ /**
39
+ * 是否将各个信息拼接成字符串。
40
+ */
41
+ joinValues?: boolean;
42
+ /**
43
+ * 拼接的符号是啥?
44
+ */
45
+ delimiter?: string;
46
+ /**
47
+ * 是否禁用
48
+ */
49
+ disabled?: boolean;
50
+ useMobileUI?: boolean;
51
+ onChange: (value: any) => void;
52
+ /** 点击完成按钮时触发 */
53
+ onConfirm?: (result: AreaColumnOption[], index: number) => void;
54
+ /** 点击取消按钮时触发 */
55
+ onCancel?: (...args: unknown[]) => void;
56
+
57
+ popOverContainer?: any;
58
+ }
59
+ /**
60
+ * 街道
61
+ */
62
+ type district = {
63
+ [propName: number]: {
64
+ [propName: number]: Array<number>;
65
+ };
66
+ };
67
+ interface DbState {
68
+ province: number[];
69
+ district: district;
70
+ [key: number]: string;
71
+ city: {
72
+ [key: number]: number[];
73
+ };
74
+ }
75
+ interface StateObj {
76
+ columns: {options: Array<AreaColumnOption>}[];
77
+ }
78
+
79
+ const CityArea = memo<AreaProps>(props => {
80
+ const {
81
+ joinValues = true,
82
+ extractValue = true,
83
+ delimiter = ',',
84
+ allowCity = true,
85
+ allowDistrict = true,
86
+ allowStreet = false,
87
+ // 默认北京东城区
88
+ value = 110101,
89
+ classnames: cx,
90
+ translate: __,
91
+ disabled = false,
92
+ popOverContainer,
93
+ useMobileUI
94
+ } = props;
95
+
96
+ const [values, setValues] = useState<Array<number>>([]);
97
+ const [street, setStreet] = useState('');
98
+ const [confirmValues, setConfirmValues] =
99
+ useState<Array<PickerObjectOption>>();
100
+ const [db, updateDb] = useSetState<DbState>();
101
+ const [state, updateState] = useSetState<StateObj>({
102
+ columns: []
103
+ });
104
+ const [isOpened, setIsOpened] = useState(false);
105
+
106
+ const onChange = (columnValues: Array<number>, columnIndex: number) => {
107
+ // 清空后面的值
108
+ while (columnValues[columnIndex++]) {
109
+ columnValues[columnIndex++] = -1;
110
+ }
111
+ let [provience, city, district] = columnValues;
112
+ if (city === -1) {
113
+ city = db.city?.[provience]?.[0];
114
+ }
115
+ if (district === -1) {
116
+ district = db.district?.[provience]?.[city]?.[0];
117
+ }
118
+ let tempValues = [provience, city, district];
119
+ if (!allowDistrict) {
120
+ tempValues.splice(2, 1);
121
+ }
122
+ if (!allowCity) {
123
+ tempValues.splice(1, 1);
124
+ }
125
+ setValues(tempValues);
126
+ };
127
+
128
+ const propsChange = () => {
129
+ const {onChange} = props;
130
+ const [province, city, district] = values;
131
+ const code =
132
+ allowDistrict && district
133
+ ? district
134
+ : allowCity && city
135
+ ? city
136
+ : province;
137
+ if (typeof extractValue === 'undefined' ? joinValues : extractValue) {
138
+ code
139
+ ? onChange(
140
+ allowStreet && street
141
+ ? [code, street].join(delimiter)
142
+ : String(code)
143
+ )
144
+ : onChange('');
145
+ } else {
146
+ onChange({
147
+ code,
148
+ province: db[province],
149
+ city: db[city],
150
+ district: db[district],
151
+ street
152
+ });
153
+ }
154
+ };
155
+
156
+ const onConfirm = () => {
157
+ const confirmValues = values.map((item: number) => ({
158
+ text: db[item],
159
+ value: item
160
+ }));
161
+ setConfirmValues(confirmValues);
162
+ propsChange();
163
+ setIsOpened(false);
164
+ };
165
+
166
+ const onCancel = () => {
167
+ setIsOpened(false);
168
+ if (props.onCancel) props.onCancel();
169
+ };
170
+
171
+ const getPropsValue = () => {
172
+ // 最后一项的值
173
+ let code =
174
+ (value && value.code) ||
175
+ (typeof value === 'number' && value) ||
176
+ (typeof value === 'string' && /(\d{6})/.test(value) && RegExp.$1);
177
+ const values: Array<number> = [];
178
+ if (code && db[code]) {
179
+ code = parseInt(code, 10);
180
+ let provinceCode = code - (code % 10000);
181
+ let cityCode = code - (code % 100);
182
+ if (db[provinceCode]) {
183
+ values[0] = provinceCode;
184
+ }
185
+ if (db[cityCode] && allowCity) {
186
+ values[1] = cityCode;
187
+ } else if (~db.city[provinceCode]?.indexOf(code) && allowCity) {
188
+ values[1] = code;
189
+ }
190
+
191
+ if (code % 100 && allowDistrict) {
192
+ values[2] = code;
193
+ }
194
+ setValues(values);
195
+ }
196
+ };
197
+
198
+ const updateColumns = () => {
199
+ if (!db) {
200
+ return;
201
+ }
202
+ let [provience, city, district] = values;
203
+ const provienceColumn = db.province.map((code: number) => {
204
+ return {text: db[code], value: code, disabled};
205
+ });
206
+ const cityColumn = city
207
+ ? db.city[provience].map((code: number) => {
208
+ return {text: db[code], value: code, disabled};
209
+ })
210
+ : [];
211
+ const districtColumn =
212
+ city && district
213
+ ? db.district[provience][city].map((code: number) => {
214
+ return {text: db[code], value: code, disabled};
215
+ })
216
+ : [];
217
+ const columns = [
218
+ {options: provienceColumn},
219
+ {options: cityColumn},
220
+ {options: districtColumn}
221
+ ];
222
+ if (!allowDistrict || !allowCity) {
223
+ columns.splice(2, 1);
224
+ }
225
+ if (!allowCity) {
226
+ columns.splice(1, 1);
227
+ }
228
+ updateState({columns});
229
+ };
230
+
231
+ const loadDb = () => {
232
+ import('../renderers/Form/CityDB').then(db => {
233
+ updateDb({
234
+ ...db.default,
235
+ province: db.province as any,
236
+ city: db.city,
237
+ district: db.district as district
238
+ });
239
+ });
240
+ };
241
+
242
+ useEffect(() => {
243
+ loadDb();
244
+ }, []);
245
+
246
+ useEffect(() => {
247
+ isOpened && db && getPropsValue();
248
+ }, [db, isOpened]);
249
+
250
+ useEffect(() => {
251
+ street && propsChange();
252
+ }, [street]);
253
+
254
+ useUpdateEffect(() => {
255
+ values.length && updateColumns();
256
+ }, [values]);
257
+
258
+ const result = confirmValues
259
+ ?.filter(item => item?.value)
260
+ ?.map(item => item.text)
261
+ .join(delimiter);
262
+
263
+ return (
264
+ <div className={cx(`CityArea`)}>
265
+ <ResultBox
266
+ className={cx('CityArea-Input', isOpened ? 'is-active' : '')}
267
+ allowInput={false}
268
+ result={result}
269
+ onResultChange={() => {}}
270
+ onResultClick={() => setIsOpened(!isOpened)}
271
+ placeholder={__('Condition.cond_placeholder')}
272
+ useMobileUI={useMobileUI}
273
+ ></ResultBox>
274
+ {allowStreet && values[0] ? (
275
+ <input
276
+ className={cx('CityArea-Input')}
277
+ value={street}
278
+ onChange={(e: React.ChangeEvent<HTMLInputElement>) =>
279
+ setStreet(e.currentTarget.value)
280
+ }
281
+ placeholder={__('City.street')}
282
+ disabled={disabled}
283
+ />
284
+ ) : null}
285
+ <PopUp
286
+ className={cx(`CityArea-popup`)}
287
+ container={popOverContainer}
288
+ isShow={isOpened}
289
+ showConfirm
290
+ onConfirm={onConfirm}
291
+ onHide={onCancel}
292
+ >
293
+ <Picker
294
+ className={'CityArea-picker'}
295
+ columns={state.columns}
296
+ onChange={onChange as any}
297
+ showToolbar={false}
298
+ labelField="text"
299
+ itemHeight={40}
300
+ value={values}
301
+ classnames={props.classnames}
302
+ classPrefix={props.classPrefix}
303
+ />
304
+ </PopUp>
305
+ </div>
306
+ );
307
+ });
308
+
309
+ export default themeable(
310
+ localeable(
311
+ uncontrollable(CityArea, {
312
+ value: 'onChange'
313
+ })
314
+ )
315
+ );
@@ -227,6 +227,7 @@ export class ColorControl extends React.PureComponent<
227
227
  const __ = this.props.translate;
228
228
  const isOpened = this.state.isOpened;
229
229
  const isFocused = this.state.isFocused;
230
+ const mobileUI = useMobileUI && isMobile();
230
231
 
231
232
  return (
232
233
  <div
@@ -261,6 +262,7 @@ export class ColorControl extends React.PureComponent<
261
262
  onFocus={this.handleFocus}
262
263
  onBlur={this.handleBlur}
263
264
  onClick={this.handleClick}
265
+ readOnly={mobileUI}
264
266
  />
265
267
 
266
268
  {clearable && !disabled && value ? (
@@ -273,7 +275,7 @@ export class ColorControl extends React.PureComponent<
273
275
  <Icon icon="caret" className="icon" onClick={this.handleClick} />
274
276
  </span>
275
277
 
276
- {!(useMobileUI && isMobile()) && isOpened ? (
278
+ {!mobileUI && isOpened ? (
277
279
  <Overlay
278
280
  placement={placement || 'auto'}
279
281
  target={() => findDOMNode(this)}
@@ -320,9 +322,10 @@ export class ColorControl extends React.PureComponent<
320
322
  </PopOver>
321
323
  </Overlay>
322
324
  ) : null}
323
- {useMobileUI && isMobile() && (
325
+ {mobileUI && (
324
326
  <PopUp
325
327
  className={cx(`${ns}ColorPicker-popup`)}
328
+ container={popOverContainer}
326
329
  isShow={isOpened}
327
330
  onHide={this.handleClick}
328
331
  >
@@ -288,8 +288,9 @@ export interface DateProps extends LocaleProps, ThemeProps {
288
288
  scheduleClassNames?: Array<string>;
289
289
  largeMode?: boolean;
290
290
  onScheduleClick?: (scheduleData: any) => void;
291
-
292
291
  useMobileUI?: boolean;
292
+ // 在移动端日期展示有多种形式,一种是picker 滑动选择,一种是日历展开选择,mobileCalendarMode为calendar表示日历展开选择
293
+ mobileCalendarMode?: 'picker' | 'calendar';
293
294
 
294
295
  // 下面那个千万不要写,写了就会导致 keyof DateProps 得到的结果是 string | number;
295
296
  // [propName: string]: any;
@@ -571,7 +572,8 @@ export class DatePicker extends React.Component<DateProps, DatePickerState> {
571
572
  schedules,
572
573
  largeMode,
573
574
  scheduleClassNames,
574
- onScheduleClick
575
+ onScheduleClick,
576
+ mobileCalendarMode
575
577
  } = this.props;
576
578
 
577
579
  const __ = this.props.translate;
@@ -628,6 +630,8 @@ export class DatePicker extends React.Component<DateProps, DatePickerState> {
628
630
  schedules={schedulesData}
629
631
  largeMode={largeMode}
630
632
  onScheduleClick={onScheduleClick}
633
+ embed={embed}
634
+ useMobileUI={useMobileUI}
631
635
  />
632
636
  </div>
633
637
  );
@@ -644,7 +648,8 @@ export class DatePicker extends React.Component<DateProps, DatePickerState> {
644
648
  {
645
649
  'is-disabled': disabled,
646
650
  'is-focused': this.state.isFocused,
647
- [`DatePicker--border${ucFirst(borderMode)}`]: borderMode
651
+ [`DatePicker--border${ucFirst(borderMode)}`]: borderMode,
652
+ 'is-mobile': useMobileUI && isMobile()
648
653
  },
649
654
  className
650
655
  )}
@@ -703,6 +708,7 @@ export class DatePicker extends React.Component<DateProps, DatePickerState> {
703
708
  locale={locale}
704
709
  minDate={minDate}
705
710
  maxDate={maxDate}
711
+ useMobileUI={useMobileUI}
706
712
  // utc={utc}
707
713
  />
708
714
  </PopOver>
@@ -710,11 +716,13 @@ export class DatePicker extends React.Component<DateProps, DatePickerState> {
710
716
  ) : null}
711
717
  {useMobileUI && isMobile() ? (
712
718
  <PopUp
713
- className={cx(`${ns}DatePicker-popup`)}
719
+ className={cx(`${ns}DatePicker-popup DatePicker-mobile`)}
720
+ container={popOverContainer}
714
721
  isShow={isOpened}
722
+ showClose={false}
715
723
  onHide={this.handleClick}
716
724
  >
717
- {this.renderShortCuts(shortcuts)}
725
+ {mobileCalendarMode === 'calendar' && this.renderShortCuts(shortcuts)}
718
726
 
719
727
  <Calendar
720
728
  value={date}
@@ -730,6 +738,8 @@ export class DatePicker extends React.Component<DateProps, DatePickerState> {
730
738
  onClose={this.close}
731
739
  locale={locale}
732
740
  minDate={minDate}
741
+ maxDate={maxDate}
742
+ useMobileUI={useMobileUI}
733
743
  // utc={utc}
734
744
  />
735
745
  </PopUp>
@@ -785,7 +785,10 @@ export class DateRangePicker extends React.Component<
785
785
  viewMode = 'days',
786
786
  ranges
787
787
  } = this.props;
788
- const useCalendarMobile = useMobileUI && isMobile() && ['days', 'months', 'quarters'].indexOf(viewMode) > -1;
788
+ const useCalendarMobile =
789
+ useMobileUI &&
790
+ isMobile() &&
791
+ ['days', 'months', 'quarters'].indexOf(viewMode) > -1;
789
792
 
790
793
  const {isOpened, isFocused, startDate, endDate} = this.state;
791
794
 
@@ -806,24 +809,28 @@ export class DateRangePicker extends React.Component<
806
809
  endViewValue && arr.push(endViewValue);
807
810
  const __ = this.props.translate;
808
811
 
809
- const calendarMobile = <CalendarMobile
810
- timeFormat={timeFormat}
811
- inputFormat={inputFormat}
812
- startDate={startDate}
813
- endDate={endDate}
814
- minDate={minDate}
815
- maxDate={maxDate}
816
- minDuration={minDuration}
817
- maxDuration={maxDuration}
818
- dateFormat={dateFormat}
819
- embed={embed}
820
- viewMode={viewMode}
821
- close={this.close}
822
- confirm={this.confirm}
823
- onChange={this.handleMobileChange}
824
- footerExtra={this.renderRanges(ranges)}
825
- showViewMode={viewMode === 'quarters' || viewMode === 'months' ? 'years' : 'months'}
826
- />;
812
+ const calendarMobile = (
813
+ <CalendarMobile
814
+ timeFormat={timeFormat}
815
+ inputFormat={inputFormat}
816
+ startDate={startDate}
817
+ endDate={endDate}
818
+ minDate={minDate}
819
+ maxDate={maxDate}
820
+ minDuration={minDuration}
821
+ maxDuration={maxDuration}
822
+ dateFormat={dateFormat}
823
+ embed={embed}
824
+ viewMode={viewMode}
825
+ close={this.close}
826
+ confirm={this.confirm}
827
+ onChange={this.handleMobileChange}
828
+ footerExtra={this.renderRanges(ranges)}
829
+ showViewMode={
830
+ viewMode === 'quarters' || viewMode === 'months' ? 'years' : 'months'
831
+ }
832
+ />
833
+ );
827
834
 
828
835
  if (embed) {
829
836
  return (
@@ -836,14 +843,16 @@ export class DateRangePicker extends React.Component<
836
843
  className
837
844
  )}
838
845
  >
839
- {useCalendarMobile
840
- ? calendarMobile
841
- : this.renderCalendar()}
846
+ {useCalendarMobile ? calendarMobile : this.renderCalendar()}
842
847
  </div>
843
848
  );
844
849
  }
845
850
 
846
- const CalendarMobileTitle = <div className={`${ns}CalendarMobile-title`}>{__('Calendar.datepicker')}</div>;
851
+ const CalendarMobileTitle = (
852
+ <div className={`${ns}CalendarMobile-title`}>
853
+ {__('Calendar.datepicker')}
854
+ </div>
855
+ );
847
856
 
848
857
  return (
849
858
  <div
@@ -887,33 +896,33 @@ export class DateRangePicker extends React.Component<
887
896
  useMobileUI && isMobile() ? (
888
897
  <PopUp
889
898
  isShow={isOpened}
899
+ container={popOverContainer}
890
900
  className={cx(`${ns}CalendarMobile-pop`)}
891
901
  onHide={this.close}
892
902
  header={CalendarMobileTitle}
893
903
  >
894
- {useCalendarMobile
895
- ? calendarMobile
896
- : this.renderCalendar()}
904
+ {useCalendarMobile ? calendarMobile : this.renderCalendar()}
897
905
  </PopUp>
898
- )
899
- : <Overlay
900
- target={() => this.dom.current}
901
- onHide={this.close}
902
- container={popOverContainer || (() => findDOMNode(this))}
903
- rootClose={false}
904
- placement={overlayPlacement}
905
- show
906
- >
907
- <PopOver
908
- classPrefix={ns}
909
- className={cx(`${ns}DateRangePicker-popover`, popoverClassName)}
906
+ ) : (
907
+ <Overlay
908
+ target={() => this.dom.current}
910
909
  onHide={this.close}
911
- onClick={this.handlePopOverClick}
912
- overlay
910
+ container={popOverContainer || (() => findDOMNode(this))}
911
+ rootClose={false}
912
+ placement={overlayPlacement}
913
+ show
913
914
  >
914
- {this.renderCalendar()}
915
- </PopOver>
916
- </Overlay>
915
+ <PopOver
916
+ classPrefix={ns}
917
+ className={cx(`${ns}DateRangePicker-popover`, popoverClassName)}
918
+ onHide={this.close}
919
+ onClick={this.handlePopOverClick}
920
+ overlay
921
+ >
922
+ {this.renderCalendar()}
923
+ </PopOver>
924
+ </Overlay>
925
+ )
917
926
  ) : null}
918
927
  </div>
919
928
  );
@@ -572,23 +572,25 @@ export class MonthRangePicker extends React.Component<
572
572
  endViewValue && arr.push(endViewValue);
573
573
  const __ = this.props.translate;
574
574
 
575
- const calendarMobile = <CalendarMobile
576
- timeFormat={timeFormat}
577
- inputFormat={inputFormat}
578
- startDate={startDate}
579
- endDate={endDate}
580
- minDate={minDate}
581
- maxDate={maxDate}
582
- minDuration={minDuration}
583
- maxDuration={maxDuration}
584
- embed={embed}
585
- viewMode="months"
586
- close={this.close}
587
- confirm={this.confirm}
588
- onChange={this.handleMobileChange}
589
- footerExtra={this.renderRanges(ranges)}
590
- showViewMode="years"
591
- />;
575
+ const calendarMobile = (
576
+ <CalendarMobile
577
+ timeFormat={timeFormat}
578
+ inputFormat={inputFormat}
579
+ startDate={startDate}
580
+ endDate={endDate}
581
+ minDate={minDate}
582
+ maxDate={maxDate}
583
+ minDuration={minDuration}
584
+ maxDuration={maxDuration}
585
+ embed={embed}
586
+ viewMode="months"
587
+ close={this.close}
588
+ confirm={this.confirm}
589
+ onChange={this.handleMobileChange}
590
+ footerExtra={this.renderRanges(ranges)}
591
+ showViewMode="years"
592
+ />
593
+ );
592
594
 
593
595
  if (embed) {
594
596
  return (
@@ -601,14 +603,16 @@ export class MonthRangePicker extends React.Component<
601
603
  className
602
604
  )}
603
605
  >
604
- {mobileUI
605
- ? calendarMobile
606
- : this.renderCalendar()}
606
+ {mobileUI ? calendarMobile : this.renderCalendar()}
607
607
  </div>
608
608
  );
609
609
  }
610
610
 
611
- const CalendarMobileTitle = <div className={`${ns}CalendarMobile-title`}>{__('Calendar.datepicker')}</div>;
611
+ const CalendarMobileTitle = (
612
+ <div className={`${ns}CalendarMobile-title`}>
613
+ {__('Calendar.datepicker')}
614
+ </div>
615
+ );
612
616
 
613
617
  return (
614
618
  <div
@@ -651,31 +655,33 @@ export class MonthRangePicker extends React.Component<
651
655
  mobileUI ? (
652
656
  <PopUp
653
657
  isShow={isOpened}
658
+ container={popOverContainer}
654
659
  className={cx(`${ns}CalendarMobile-pop`)}
655
660
  onHide={this.close}
656
661
  header={CalendarMobileTitle}
657
662
  >
658
663
  {calendarMobile}
659
664
  </PopUp>
660
- )
661
- : <Overlay
662
- target={() => this.dom.current}
663
- onHide={this.close}
664
- container={popOverContainer || (() => findDOMNode(this))}
665
- rootClose={false}
666
- placement={overlayPlacement}
667
- show
668
- >
669
- <PopOver
670
- classPrefix={ns}
671
- className={cx(`${ns}DateRangePicker-popover`, popoverClassName)}
665
+ ) : (
666
+ <Overlay
667
+ target={() => this.dom.current}
672
668
  onHide={this.close}
673
- onClick={this.handlePopOverClick}
674
- overlay
669
+ container={popOverContainer || (() => findDOMNode(this))}
670
+ rootClose={false}
671
+ placement={overlayPlacement}
672
+ show
675
673
  >
676
- {this.renderCalendar()}
677
- </PopOver>
678
- </Overlay>
674
+ <PopOver
675
+ classPrefix={ns}
676
+ className={cx(`${ns}DateRangePicker-popover`, popoverClassName)}
677
+ onHide={this.close}
678
+ onClick={this.handlePopOverClick}
679
+ overlay
680
+ >
681
+ {this.renderCalendar()}
682
+ </PopOver>
683
+ </Overlay>
684
+ )
679
685
  ) : null}
680
686
  </div>
681
687
  );