Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/quick-bottles-fly.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@td-design/react-native-picker': minor
---

fix: 修复picker组件在安卓设备使用物理返回键时的bug
Original file line number Diff line number Diff line change
Expand Up @@ -171,5 +171,5 @@ const snapPoint = (value: number, velocity: number, points: ReadonlyArray<number
const point = value + 0.2 * velocity;
const deltas = points.map(p => Math.abs(point - p));
const minDelta = Math.min.apply(null, deltas);
return points.filter(p => Math.abs(point - p) === minDelta)[0];
return points.find(p => Math.abs(point - p) === minDelta) || points[0];
};
1 change: 0 additions & 1 deletion packages/react-native-picker/src/date-picker/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ const DatePicker = forwardRef<DatePickerRef, DatePickerProps>((props, ref) => {
onChange,
value,
displayType,
visible,
format,
});

Expand Down
8 changes: 0 additions & 8 deletions packages/react-native-picker/src/date-picker/useDatePicker.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { useEffect } from 'react';
import { BackHandler } from 'react-native';

import { useMemoizedFn, useSafeState } from '@td-design/rn-hooks';
import dayjs from 'dayjs';
Expand All @@ -11,7 +10,6 @@ export default function useDatePicker({
onChange,
value,
displayType,
visible,
format,
}: DatePickerPropsBase & ModalPickerProps) {
const [date, setDate] = useSafeState<Date | undefined>(value ?? new Date());
Expand All @@ -20,12 +18,6 @@ export default function useDatePicker({
setDate(value ?? new Date());
}, [value]);

/** 绑定物理返回键监听事件,如果当前picker是打开的,返回键作用是关闭picker,否则返回上一个界面 */
useEffect(() => {
const sub = BackHandler.addEventListener('hardwareBackPress', () => visible);
return () => sub.remove();
}, [visible]);

const handleChange = (date?: Date) => {
setDate(date);
if (displayType === 'view') {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ function Cascader<T>({
data,
cols,
value,
visible,
onChange,
onClose,
});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { useEffect, useMemo } from 'react';
import { BackHandler } from 'react-native';

import { useMemoizedFn, useSafeState } from '@td-design/rn-hooks';
import arrayTreeFilter from 'array-tree-filter';
Expand All @@ -13,18 +12,9 @@ export default function useCascader<T>({
value,
onChange,
onClose,
visible,
}: Pick<CascaderProps<T>, 'data' | 'cols' | 'value' | 'onChange' | 'onClose' | 'visible'>) {
const [stateValue, setStateValue] = useSafeState<T[]>([]);

useEffect(() => {
const listener = BackHandler.addEventListener('hardwareBackPress', () => visible);

return () => {
listener.remove();
};
}, []);

useEffect(() => {
const nextValue = generateNextValue(data, value, cols);
setStateValue(nextValue);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ function NormalPicker<T>(props: NormalPickerProps<T>) {
initialValue,
onChange,
onClose,
visible,
displayType,
});

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { useEffect } from 'react';
import { BackHandler } from 'react-native';

import { useMemoizedFn, useSafeState } from '@td-design/rn-hooks';

Expand All @@ -11,7 +10,6 @@ export default function useNormalPicker<T>({
initialValue,
onChange,
onClose,
visible,
displayType,
}: Omit<NormalPickerProps<T>, 'data'> & { initialValue?: T }) {
const [selectedValue, selectValue] = useSafeState<T | undefined>();
Expand All @@ -20,12 +18,6 @@ export default function useNormalPicker<T>({
selectValue(value || initialValue);
}, [value, initialValue]);

/** 绑定物理返回键监听事件,如果当前picker是打开的,返回键作用是关闭picker,否则返回上一个界面 */
useEffect(() => {
const sub = BackHandler.addEventListener('hardwareBackPress', () => visible);
return () => sub.remove();
}, [visible]);

const handleChange = (val: PickerData<T>) => {
if (displayType === 'view') {
onChange?.(val.value);
Expand Down