antd-mobile 5.6.1 → 5.7.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/2x/cjs/components/calendar/calendar.d.ts +4 -3
- package/2x/cjs/components/calendar/calendar.js +67 -56
- package/2x/cjs/components/calendar/convert.d.ts +2 -0
- package/2x/cjs/components/calendar/convert.js +22 -0
- package/2x/cjs/components/picker/picker.js +6 -9
- package/2x/cjs/components/picker-view/columns-extend.d.ts +3 -0
- package/2x/cjs/components/picker-view/columns-extend.js +45 -0
- package/2x/cjs/components/picker-view/picker-view.d.ts +1 -0
- package/2x/cjs/components/picker-view/picker-view.js +14 -16
- package/2x/cjs/utils/with-cache.d.ts +1 -0
- package/2x/cjs/utils/with-cache.js +17 -0
- package/2x/es/components/calendar/calendar.d.ts +4 -3
- package/2x/es/components/calendar/calendar.js +67 -58
- package/2x/es/components/calendar/convert.d.ts +2 -0
- package/2x/es/components/calendar/convert.js +15 -0
- package/2x/es/components/picker/picker.js +6 -8
- package/2x/es/components/picker-view/columns-extend.d.ts +3 -0
- package/2x/es/components/picker-view/columns-extend.js +34 -0
- package/2x/es/components/picker-view/picker-view.d.ts +1 -0
- package/2x/es/components/picker-view/picker-view.js +14 -15
- package/2x/es/utils/with-cache.d.ts +1 -0
- package/2x/es/utils/with-cache.js +10 -0
- package/2x/package.json +1 -1
- package/cjs/components/calendar/calendar.d.ts +4 -3
- package/cjs/components/calendar/calendar.js +67 -56
- package/cjs/components/calendar/convert.d.ts +2 -0
- package/cjs/components/calendar/convert.js +22 -0
- package/cjs/components/picker/picker.js +6 -9
- package/cjs/components/picker-view/columns-extend.d.ts +3 -0
- package/cjs/components/picker-view/columns-extend.js +45 -0
- package/cjs/components/picker-view/picker-view.d.ts +1 -0
- package/cjs/components/picker-view/picker-view.js +14 -16
- package/cjs/utils/with-cache.d.ts +1 -0
- package/cjs/utils/with-cache.js +17 -0
- package/es/components/calendar/calendar.d.ts +4 -3
- package/es/components/calendar/calendar.js +67 -58
- package/es/components/calendar/convert.d.ts +2 -0
- package/es/components/calendar/convert.js +15 -0
- package/es/components/picker/picker.js +6 -8
- package/es/components/picker-view/columns-extend.d.ts +3 -0
- package/es/components/picker-view/columns-extend.js +34 -0
- package/es/components/picker-view/picker-view.d.ts +1 -0
- package/es/components/picker-view/picker-view.js +14 -15
- package/es/utils/with-cache.d.ts +1 -0
- package/es/utils/with-cache.js +10 -0
- package/package.json +1 -1
- package/umd/antd-mobile.js +1 -1
- package/2x/cjs/components/picker-view/use-columns.d.ts +0 -2
- package/2x/cjs/components/picker-view/use-columns.js +0 -18
- package/2x/cjs/components/picker-view/use-picker-value-extend.d.ts +0 -2
- package/2x/cjs/components/picker-view/use-picker-value-extend.js +0 -37
- package/2x/es/components/picker-view/use-columns.d.ts +0 -2
- package/2x/es/components/picker-view/use-columns.js +0 -10
- package/2x/es/components/picker-view/use-picker-value-extend.d.ts +0 -2
- package/2x/es/components/picker-view/use-picker-value-extend.js +0 -26
- package/cjs/components/picker-view/use-columns.d.ts +0 -2
- package/cjs/components/picker-view/use-columns.js +0 -18
- package/cjs/components/picker-view/use-picker-value-extend.d.ts +0 -2
- package/cjs/components/picker-view/use-picker-value-extend.js +0 -37
- package/es/components/picker-view/use-columns.d.ts +0 -2
- package/es/components/picker-view/use-columns.js +0 -10
- package/es/components/picker-view/use-picker-value-extend.d.ts +0 -2
- package/es/components/picker-view/use-picker-value-extend.js +0 -26
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { forwardRef,
|
|
1
|
+
import React, { forwardRef, useState, useImperativeHandle } from 'react';
|
|
2
2
|
import { withNativeProps } from '../../utils/native-props';
|
|
3
3
|
import dayjs from 'dayjs';
|
|
4
4
|
import classNames from 'classnames';
|
|
@@ -7,11 +7,15 @@ import { ArrowLeft } from './arrow-left';
|
|
|
7
7
|
import { ArrowLeftDouble } from './arrow-left-double';
|
|
8
8
|
import { useConfig } from '../config-provider';
|
|
9
9
|
import isoWeek from 'dayjs/plugin/isoWeek';
|
|
10
|
-
import {
|
|
10
|
+
import { useUpdateEffect } from 'ahooks';
|
|
11
|
+
import { usePropsValue } from '../../utils/use-props-value';
|
|
12
|
+
import { convertValueToRange } from './convert';
|
|
11
13
|
dayjs.extend(isoWeek);
|
|
12
14
|
const classPrefix = 'adm-calendar';
|
|
13
15
|
const defaultProps = {
|
|
14
|
-
weekStartsOn: 'Sunday'
|
|
16
|
+
weekStartsOn: 'Sunday',
|
|
17
|
+
defaultValue: null,
|
|
18
|
+
allowClear: true
|
|
15
19
|
};
|
|
16
20
|
export const Calendar = forwardRef((p, ref) => {
|
|
17
21
|
const today = dayjs();
|
|
@@ -26,29 +30,21 @@ export const Calendar = forwardRef((p, ref) => {
|
|
|
26
30
|
if (item) markItems.unshift(item);
|
|
27
31
|
}
|
|
28
32
|
|
|
29
|
-
const dateRange =
|
|
30
|
-
|
|
33
|
+
const [dateRange, setDateRange] = usePropsValue({
|
|
34
|
+
value: props.value === undefined ? undefined : convertValueToRange(props.selectionMode, props.value),
|
|
35
|
+
defaultValue: convertValueToRange(props.selectionMode, props.defaultValue),
|
|
36
|
+
onChange: v => {
|
|
37
|
+
var _a, _b;
|
|
31
38
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
} else {
|
|
38
|
-
return [null, null];
|
|
39
|
+
if (props.selectionMode === 'single') {
|
|
40
|
+
(_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, v ? v[0] : null);
|
|
41
|
+
} else if (props.selectionMode === 'range') {
|
|
42
|
+
(_b = props.onChange) === null || _b === void 0 ? void 0 : _b.call(props, v);
|
|
43
|
+
}
|
|
39
44
|
}
|
|
40
|
-
}, [props.selectionMode, props.value, props.defaultValue]);
|
|
41
|
-
const [begin, setBegin] = useState(null);
|
|
42
|
-
const [end, setEnd] = useState(null);
|
|
43
|
-
useIsomorphicLayoutEffect(() => {
|
|
44
|
-
setBegin(dateRange[0] ? dayjs(dateRange[0]) : null);
|
|
45
|
-
setEnd(dateRange[1] ? dayjs(dateRange[1]) : null);
|
|
46
|
-
}, [dateRange[0], dateRange[1]]);
|
|
47
|
-
const [current, setCurrent] = useState(() => {
|
|
48
|
-
var _a;
|
|
49
|
-
|
|
50
|
-
return dayjs((_a = dateRange[0]) !== null && _a !== void 0 ? _a : today).date(1);
|
|
51
45
|
});
|
|
46
|
+
const [intermediate, setIntermediate] = useState(false);
|
|
47
|
+
const [current, setCurrent] = useState(() => dayjs(dateRange ? dateRange[0] : today).date(1));
|
|
52
48
|
useUpdateEffect(() => {
|
|
53
49
|
var _a;
|
|
54
50
|
|
|
@@ -111,14 +107,16 @@ export const Calendar = forwardRef((p, ref) => {
|
|
|
111
107
|
|
|
112
108
|
while (cells.length < 6 * 7) {
|
|
113
109
|
const d = iterator;
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
110
|
+
let isSelect = false;
|
|
111
|
+
let isBegin = false;
|
|
112
|
+
let isEnd = false;
|
|
113
|
+
|
|
114
|
+
if (dateRange) {
|
|
115
|
+
const [begin, end] = dateRange;
|
|
116
|
+
isBegin = d.isSame(begin, 'day');
|
|
117
|
+
isEnd = d.isSame(end, 'day');
|
|
118
|
+
isSelect = isBegin || isEnd || d.isAfter(begin, 'day') && d.isBefore(end, 'day');
|
|
119
|
+
}
|
|
122
120
|
|
|
123
121
|
const inThisMonth = d.month() === current.month();
|
|
124
122
|
cells.push(React.createElement("div", {
|
|
@@ -126,41 +124,52 @@ export const Calendar = forwardRef((p, ref) => {
|
|
|
126
124
|
className: classNames(`${classPrefix}-cell`, inThisMonth ? `${classPrefix}-cell-in` : `${classPrefix}-cell-out`, inThisMonth && {
|
|
127
125
|
[`${classPrefix}-cell-today`]: d.isSame(today, 'day'),
|
|
128
126
|
[`${classPrefix}-cell-selected`]: isSelect,
|
|
129
|
-
[`${classPrefix}-cell-selected-begin`]:
|
|
130
|
-
[`${classPrefix}-cell-selected-end`]:
|
|
127
|
+
[`${classPrefix}-cell-selected-begin`]: isBegin,
|
|
128
|
+
[`${classPrefix}-cell-selected-end`]: isEnd
|
|
131
129
|
}),
|
|
132
130
|
onClick: () => {
|
|
133
|
-
var _a, _b, _c;
|
|
134
|
-
|
|
135
131
|
if (!props.selectionMode) return;
|
|
132
|
+
const date = d.toDate();
|
|
133
|
+
|
|
134
|
+
if (!inThisMonth) {
|
|
135
|
+
setCurrent(d.clone().date(1));
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function shouldClear() {
|
|
139
|
+
if (!props.allowClear) return false;
|
|
140
|
+
if (!dateRange) return false;
|
|
141
|
+
const [begin, end] = dateRange;
|
|
142
|
+
return d.isSame(begin, 'date') && d.isSame(end, 'day');
|
|
143
|
+
}
|
|
136
144
|
|
|
137
145
|
if (props.selectionMode === 'single') {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
146
|
+
if (props.allowClear && shouldClear()) {
|
|
147
|
+
setDateRange(null);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
setDateRange([date, date]);
|
|
141
152
|
} else if (props.selectionMode === 'range') {
|
|
142
|
-
if (
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
} else {
|
|
147
|
-
if (d.isBefore(begin)) {
|
|
148
|
-
setEnd(begin);
|
|
149
|
-
setBegin(d);
|
|
150
|
-
(_b = props.onChange) === null || _b === void 0 ? void 0 : _b.call(props, [d.toDate(), begin.toDate()]);
|
|
151
|
-
} else {
|
|
152
|
-
setEnd(d);
|
|
153
|
-
(_c = props.onChange) === null || _c === void 0 ? void 0 : _c.call(props, [begin.toDate(), d.toDate()]);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
} else {
|
|
157
|
-
setBegin(d);
|
|
158
|
-
setEnd(null);
|
|
153
|
+
if (!dateRange) {
|
|
154
|
+
setDateRange([date, date]);
|
|
155
|
+
setIntermediate(true);
|
|
156
|
+
return;
|
|
159
157
|
}
|
|
160
|
-
}
|
|
161
158
|
|
|
162
|
-
|
|
163
|
-
|
|
159
|
+
if (shouldClear()) {
|
|
160
|
+
setDateRange(null);
|
|
161
|
+
setIntermediate(false);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
if (intermediate) {
|
|
166
|
+
const another = dateRange[0];
|
|
167
|
+
setDateRange(another > date ? [date, another] : [another, date]);
|
|
168
|
+
setIntermediate(false);
|
|
169
|
+
} else {
|
|
170
|
+
setDateRange([date, date]);
|
|
171
|
+
setIntermediate(true);
|
|
172
|
+
}
|
|
164
173
|
}
|
|
165
174
|
}
|
|
166
175
|
}, React.createElement("div", {
|
|
@@ -4,9 +4,8 @@ import { mergeProps } from '../../utils/with-default-props';
|
|
|
4
4
|
import { withNativeProps } from '../../utils/native-props';
|
|
5
5
|
import { usePropsValue } from '../../utils/use-props-value';
|
|
6
6
|
import PickerView from '../picker-view';
|
|
7
|
-
import {
|
|
7
|
+
import { generateColumnsExtend, useColumnsExtend } from '../picker-view/columns-extend';
|
|
8
8
|
import { useConfig } from '../config-provider';
|
|
9
|
-
import { usePickerValueExtend } from '../picker-view/use-picker-value-extend';
|
|
10
9
|
import { useMemoizedFn } from 'ahooks';
|
|
11
10
|
import SafeArea from '../safe-area';
|
|
12
11
|
const classPrefix = `adm-picker`;
|
|
@@ -28,12 +27,11 @@ export const Picker = memo(p => {
|
|
|
28
27
|
onChange: val => {
|
|
29
28
|
var _a;
|
|
30
29
|
|
|
31
|
-
|
|
30
|
+
const extend = generateColumnsExtend(props.columns, val);
|
|
31
|
+
(_a = props.onConfirm) === null || _a === void 0 ? void 0 : _a.call(props, val, extend);
|
|
32
32
|
}
|
|
33
|
-
}));
|
|
34
|
-
|
|
35
|
-
const columns = useColumns(props.columns, value);
|
|
36
|
-
const generateValueExtend = usePickerValueExtend(columns);
|
|
33
|
+
}));
|
|
34
|
+
const extend = useColumnsExtend(props.columns, value);
|
|
37
35
|
const [innerValue, setInnerValue] = useState(value);
|
|
38
36
|
useEffect(() => {
|
|
39
37
|
if (innerValue !== value) {
|
|
@@ -104,6 +102,6 @@ export const Picker = memo(p => {
|
|
|
104
102
|
}, pickerElement, React.createElement(SafeArea, {
|
|
105
103
|
position: 'bottom'
|
|
106
104
|
}));
|
|
107
|
-
return React.createElement(React.Fragment, null, popupElement, (_a = props.children) === null || _a === void 0 ? void 0 : _a.call(props,
|
|
105
|
+
return React.createElement(React.Fragment, null, popupElement, (_a = props.children) === null || _a === void 0 ? void 0 : _a.call(props, extend.items));
|
|
108
106
|
});
|
|
109
107
|
Picker.displayName = 'Picker';
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { PickerViewProps, PickerValue, PickerValueExtend } from './picker-view';
|
|
2
|
+
export declare function generateColumnsExtend(rawColumns: PickerViewProps['columns'], val: PickerValue[]): PickerValueExtend;
|
|
3
|
+
export declare function useColumnsExtend(rawColumns: PickerViewProps['columns'], value: PickerValue[]): PickerValueExtend;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
import { withCache } from '../../utils/with-cache';
|
|
3
|
+
export function generateColumnsExtend(rawColumns, val) {
|
|
4
|
+
const columns = withCache(() => {
|
|
5
|
+
const c = typeof rawColumns === 'function' ? rawColumns(val) : rawColumns;
|
|
6
|
+
return c.map(column => column.map(item => typeof item === 'string' ? {
|
|
7
|
+
label: item,
|
|
8
|
+
value: item
|
|
9
|
+
} : item));
|
|
10
|
+
});
|
|
11
|
+
const items = withCache(() => {
|
|
12
|
+
return val.map((v, index) => {
|
|
13
|
+
var _a;
|
|
14
|
+
|
|
15
|
+
const column = columns()[index];
|
|
16
|
+
if (!column) return null;
|
|
17
|
+
return (_a = column.find(item => item.value === v)) !== null && _a !== void 0 ? _a : null;
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
const extend = {
|
|
21
|
+
get columns() {
|
|
22
|
+
return columns();
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
get items() {
|
|
26
|
+
return items();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
};
|
|
30
|
+
return extend;
|
|
31
|
+
}
|
|
32
|
+
export function useColumnsExtend(rawColumns, value) {
|
|
33
|
+
return useMemo(() => generateColumnsExtend(rawColumns, value), [rawColumns, value]);
|
|
34
|
+
}
|
|
@@ -2,6 +2,7 @@ import React, { ReactNode } from 'react';
|
|
|
2
2
|
import { NativeProps } from '../../utils/native-props';
|
|
3
3
|
export declare type PickerValue = string | null;
|
|
4
4
|
export declare type PickerValueExtend = {
|
|
5
|
+
columns: PickerColumnItem[][];
|
|
5
6
|
items: (PickerColumnItem | null)[];
|
|
6
7
|
};
|
|
7
8
|
export declare type PickerColumnItem = {
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import React, { memo, useCallback, useEffect, useState } from 'react';
|
|
2
2
|
import { mergeProps } from '../../utils/with-default-props';
|
|
3
3
|
import { Wheel } from './wheel';
|
|
4
|
-
import {
|
|
4
|
+
import { useColumnsExtend } from './columns-extend';
|
|
5
5
|
import { withNativeProps } from '../../utils/native-props';
|
|
6
|
-
import { usePickerValueExtend } from './use-picker-value-extend';
|
|
7
6
|
import { useDebounceEffect } from 'ahooks';
|
|
8
7
|
const classPrefix = `adm-picker-view`;
|
|
9
8
|
const defaultProps = {
|
|
@@ -11,17 +10,7 @@ const defaultProps = {
|
|
|
11
10
|
};
|
|
12
11
|
export const PickerView = memo(p => {
|
|
13
12
|
const props = mergeProps(defaultProps, p);
|
|
14
|
-
const [innerValue, setInnerValue] = useState(props.value === undefined ? props.defaultValue : props.value);
|
|
15
|
-
useDebounceEffect(() => {
|
|
16
|
-
var _a;
|
|
17
|
-
|
|
18
|
-
if (props.value === innerValue) return;
|
|
19
|
-
(_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, innerValue, generateValueExtend(innerValue));
|
|
20
|
-
}, [innerValue], {
|
|
21
|
-
wait: 0,
|
|
22
|
-
leading: false,
|
|
23
|
-
trailing: true
|
|
24
|
-
}); // Sync `value` to `innerValue`
|
|
13
|
+
const [innerValue, setInnerValue] = useState(props.value === undefined ? props.defaultValue : props.value); // Sync `value` to `innerValue`
|
|
25
14
|
|
|
26
15
|
useEffect(() => {
|
|
27
16
|
if (props.value === undefined) return; // Uncontrolled mode
|
|
@@ -40,8 +29,18 @@ export const PickerView = memo(p => {
|
|
|
40
29
|
window.clearTimeout(timeout);
|
|
41
30
|
};
|
|
42
31
|
}, [props.value, innerValue]);
|
|
43
|
-
const
|
|
44
|
-
const
|
|
32
|
+
const extend = useColumnsExtend(props.columns, innerValue);
|
|
33
|
+
const columns = extend.columns;
|
|
34
|
+
useDebounceEffect(() => {
|
|
35
|
+
var _a;
|
|
36
|
+
|
|
37
|
+
if (props.value === innerValue) return;
|
|
38
|
+
(_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, innerValue, extend);
|
|
39
|
+
}, [innerValue], {
|
|
40
|
+
wait: 0,
|
|
41
|
+
leading: false,
|
|
42
|
+
trailing: true
|
|
43
|
+
});
|
|
45
44
|
const handleSelect = useCallback((val, index) => {
|
|
46
45
|
setInnerValue(prev => {
|
|
47
46
|
const next = [...prev];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function withCache<T>(generate: () => T): () => T;
|