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.
- package/lib/components/CalendarMobile.js +5 -5
- package/lib/components/CalendarMobile.js.map +2 -2
- package/lib/components/Card.d.ts +20 -20
- package/lib/components/Cascader.d.ts +123 -0
- package/lib/components/Cascader.js +487 -0
- package/lib/components/Cascader.js.map +13 -0
- package/lib/components/CityArea.d.ts +527 -0
- package/lib/components/CityArea.js +177 -0
- package/lib/components/CityArea.js.map +13 -0
- package/lib/components/ColorPicker.js +4 -3
- package/lib/components/ColorPicker.js.map +2 -2
- package/lib/components/DatePicker.d.ts +85 -84
- package/lib/components/DatePicker.js +7 -6
- package/lib/components/DatePicker.js.map +2 -2
- package/lib/components/DateRangePicker.js +8 -11
- package/lib/components/DateRangePicker.js.map +2 -2
- package/lib/components/MonthRangePicker.js +5 -8
- package/lib/components/MonthRangePicker.js.map +2 -2
- package/lib/components/Picker.d.ts +1 -0
- package/lib/components/Picker.js +10 -6
- package/lib/components/Picker.js.map +2 -2
- package/lib/components/PickerColumn.d.ts +1 -0
- package/lib/components/PickerColumn.js +21 -17
- package/lib/components/PickerColumn.js.map +2 -2
- package/lib/components/PopOverContainer.d.ts +1 -0
- package/lib/components/PopOverContainer.js +5 -3
- package/lib/components/PopOverContainer.js.map +2 -2
- package/lib/components/PopUp.d.ts +1040 -28
- package/lib/components/PopUp.js +32 -8
- package/lib/components/PopUp.js.map +2 -2
- package/lib/components/ResultBox.d.ts +85 -84
- package/lib/components/ResultBox.js +7 -3
- package/lib/components/ResultBox.js.map +2 -2
- package/lib/components/Select.js +9 -6
- package/lib/components/Select.js.map +2 -2
- package/lib/components/TransferDropDown.d.ts +85 -84
- package/lib/components/TransferDropDown.js +9 -6
- package/lib/components/TransferDropDown.js.map +2 -2
- package/lib/components/calendar/Calendar.d.ts +14 -0
- package/lib/components/calendar/Calendar.js +62 -5
- package/lib/components/calendar/Calendar.js.map +2 -2
- package/lib/components/calendar/DaysView.d.ts +20 -0
- package/lib/components/calendar/DaysView.js +51 -4
- package/lib/components/calendar/DaysView.js.map +2 -2
- package/lib/components/calendar/MonthsView.d.ts +7 -1
- package/lib/components/calendar/MonthsView.js +41 -52
- package/lib/components/calendar/MonthsView.js.map +2 -2
- package/lib/components/calendar/TimeView.d.ts +27 -20
- package/lib/components/calendar/TimeView.js +40 -4
- package/lib/components/calendar/TimeView.js.map +2 -2
- package/lib/components/calendar/YearsView.d.ts +6 -0
- package/lib/components/calendar/YearsView.js +15 -6
- package/lib/components/calendar/YearsView.js.map +2 -2
- package/lib/index.js +1 -1
- package/lib/locale/de-DE.js +4 -0
- package/lib/locale/de-DE.js.map +2 -2
- package/lib/locale/en-US.js +4 -0
- package/lib/locale/en-US.js.map +2 -2
- package/lib/locale/zh-CN.js +4 -0
- package/lib/locale/zh-CN.js.map +2 -2
- package/lib/renderers/DropDownButton.d.ts +11 -2
- package/lib/renderers/DropDownButton.js +30 -12
- package/lib/renderers/DropDownButton.js.map +2 -2
- package/lib/renderers/Form/CityDB.js +526 -2
- package/lib/renderers/Form/CityDB.js.map +2 -2
- package/lib/renderers/Form/InputCity.d.ts +85 -84
- package/lib/renderers/Form/InputCity.js +4 -2
- package/lib/renderers/Form/InputCity.js.map +2 -2
- package/lib/renderers/Form/InputColor.js +6 -2
- package/lib/renderers/Form/InputColor.js.map +2 -2
- package/lib/renderers/Form/InputDate.js +5 -2
- package/lib/renderers/Form/InputDate.js.map +2 -2
- package/lib/renderers/Form/InputDateRange.js +6 -2
- package/lib/renderers/Form/InputDateRange.js.map +2 -2
- package/lib/renderers/Form/Item.d.ts +10 -14
- package/lib/renderers/Form/Item.js +7 -5
- package/lib/renderers/Form/Item.js.map +2 -2
- package/lib/renderers/Form/NestedSelect.d.ts +1 -0
- package/lib/renderers/Form/NestedSelect.js +7 -3
- package/lib/renderers/Form/NestedSelect.js.map +2 -2
- package/lib/renderers/Form/Select.d.ts +2 -0
- package/lib/renderers/Form/Select.js +7 -4
- package/lib/renderers/Form/Select.js.map +2 -2
- package/lib/renderers/Form/TreeSelect.js +4 -4
- package/lib/renderers/Form/TreeSelect.js.map +2 -2
- package/lib/renderers/Remark.js +2 -1
- package/lib/renderers/Remark.js.map +2 -2
- package/lib/schemaExtend.js +23 -9
- package/lib/schemaExtend.js.map +2 -2
- package/lib/themes/ang-ie11.css +312 -29
- package/lib/themes/ang.css +312 -29
- package/lib/themes/ang.css.map +1 -1
- package/lib/themes/antd-ie11.css +312 -29
- package/lib/themes/antd.css +312 -29
- package/lib/themes/antd.css.map +1 -1
- package/lib/themes/cxd-ie11.css +315 -41
- package/lib/themes/cxd.css +315 -41
- package/lib/themes/cxd.css.map +1 -1
- package/lib/themes/dark-ie11.css +312 -29
- package/lib/themes/dark.css +312 -29
- package/lib/themes/dark.css.map +1 -1
- package/lib/themes/default.css +315 -41
- package/lib/themes/default.css.map +1 -1
- package/lib/utils/helper.d.ts +1 -6
- package/lib/utils/helper.js +6 -17
- package/lib/utils/helper.js.map +2 -2
- package/package.json +1 -2
- package/schema.json +2192 -20
- package/scss/_properties.scss +10 -6
- package/scss/components/_calendar.scss +9 -2
- package/scss/components/_cascader.scss +102 -0
- package/scss/components/_city-area.scss +27 -0
- package/scss/components/_dropdown.scss +39 -9
- package/scss/components/_picker-columns.scss +15 -5
- package/scss/components/_popup.scss +35 -12
- package/scss/components/_result-box.scss +31 -0
- package/scss/components/form/_checks.scss +2 -0
- package/scss/components/form/_color.scss +2 -2
- package/scss/components/form/_date-range.scss +1 -1
- package/scss/components/form/_date.scss +46 -1
- package/scss/components/form/_nested-select.scss +3 -0
- package/scss/components/form/_select.scss +32 -3
- package/scss/components/form/_transfer.scss +3 -0
- package/scss/components/form/_tree-select.scss +1 -1
- package/scss/themes/_common.scss +2 -0
- package/scss/themes/_cxd-variables.scss +3 -3
- package/scss/themes/cxd.scss +0 -12
- package/sdk/ang-ie11.css +368 -29
- package/sdk/ang.css +367 -30
- package/sdk/antd-ie11.css +368 -29
- package/sdk/antd.css +367 -30
- package/sdk/charts.js +18 -18
- package/sdk/codemirror.js +7 -7
- package/sdk/color-picker.js +65 -65
- package/sdk/cropperjs.js +3 -3
- package/sdk/cxd-ie11.css +370 -42
- package/sdk/cxd.css +370 -44
- package/sdk/dark-ie11.css +368 -29
- package/sdk/dark.css +367 -30
- package/sdk/exceljs.js +1 -1
- package/sdk/locale/de-DE.js +4 -0
- package/sdk/markdown.js +69 -69
- package/sdk/papaparse.js +1 -1
- package/sdk/renderers/Form/CityDB.js +1 -1
- package/sdk/rest.js +18 -18
- package/sdk/rich-text.js +62 -62
- package/sdk/sdk-ie11.css +370 -42
- package/sdk/sdk.css +370 -44
- package/sdk/sdk.js +1309 -1227
- package/sdk/thirds/hls.js/hls.js +18 -18
- package/sdk/thirds/mpegts.js/mpegts.js +2 -2
- package/sdk/tinymce.js +57 -57
- package/src/components/CalendarMobile.tsx +5 -5
- package/src/components/Cascader.tsx +564 -0
- package/src/components/CityArea.tsx +315 -0
- package/src/components/ColorPicker.tsx +5 -2
- package/src/components/DatePicker.tsx +15 -5
- package/src/components/DateRangePicker.tsx +52 -43
- package/src/components/MonthRangePicker.tsx +44 -38
- package/src/components/Picker.tsx +27 -12
- package/src/components/PickerColumn.tsx +28 -18
- package/src/components/PopOverContainer.tsx +31 -17
- package/src/components/PopUp.tsx +55 -13
- package/src/components/ResultBox.tsx +10 -1
- package/src/components/Select.tsx +20 -23
- package/src/components/TransferDropDown.tsx +19 -5
- package/src/components/calendar/Calendar.tsx +86 -9
- package/src/components/calendar/DaysView.tsx +86 -2
- package/src/components/calendar/MonthsView.tsx +56 -63
- package/src/components/calendar/TimeView.tsx +82 -29
- package/src/components/calendar/YearsView.tsx +25 -6
- package/src/locale/de-DE.ts +4 -0
- package/src/locale/en-US.ts +4 -0
- package/src/locale/zh-CN.ts +4 -0
- package/src/renderers/DropDownButton.tsx +69 -35
- package/src/renderers/Form/CityDB.ts +526 -2
- package/src/renderers/Form/InputCity.tsx +23 -3
- package/src/renderers/Form/InputColor.tsx +21 -2
- package/src/renderers/Form/InputDate.tsx +10 -1
- package/src/renderers/Form/InputDateRange.tsx +9 -1
- package/src/renderers/Form/Item.tsx +14 -4
- package/src/renderers/Form/NestedSelect.tsx +31 -3
- package/src/renderers/Form/Select.tsx +15 -2
- package/src/renderers/Form/TreeSelect.tsx +10 -6
- package/src/renderers/Remark.tsx +2 -1
- package/src/schemaExtend.ts +22 -10
- 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
|
-
{!
|
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
|
-
{
|
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 =
|
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 =
|
810
|
-
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
815
|
-
|
816
|
-
|
817
|
-
|
818
|
-
|
819
|
-
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
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 =
|
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
|
-
|
900
|
-
|
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
|
-
|
912
|
-
|
910
|
+
container={popOverContainer || (() => findDOMNode(this))}
|
911
|
+
rootClose={false}
|
912
|
+
placement={overlayPlacement}
|
913
|
+
show
|
913
914
|
>
|
914
|
-
|
915
|
-
|
916
|
-
|
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 =
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
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 =
|
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
|
-
|
662
|
-
|
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
|
-
|
674
|
-
|
669
|
+
container={popOverContainer || (() => findDOMNode(this))}
|
670
|
+
rootClose={false}
|
671
|
+
placement={overlayPlacement}
|
672
|
+
show
|
675
673
|
>
|
676
|
-
|
677
|
-
|
678
|
-
|
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
|
);
|