Skip to content

Commit

Permalink
Merge pull request #902 from thundersdata-frontend/rn-issue
Browse files Browse the repository at this point in the history
fix: 修复picker组件在安卓设备使用物理返回键时的bug
  • Loading branch information
chj-damon authored Sep 29, 2024
2 parents 9819c5a + 14d15a3 commit 7be21d8
Show file tree
Hide file tree
Showing 8 changed files with 6 additions and 30 deletions.
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

0 comments on commit 7be21d8

Please sign in to comment.