Skip to content

Commit 9c2bd6d

Browse files
authored
Merge pull request #840 from thundersdata-frontend/rn-issue
feat: picker组件支持自定义连接符(默认是,)
2 parents a9c6eb7 + cfad6ff commit 9c2bd6d

File tree

7 files changed

+29
-8
lines changed

7 files changed

+29
-8
lines changed

.changeset/warm-eyes-kiss.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@td-design/react-native-picker': patch
3+
---
4+
5+
feat: picker组件支持自定义连接符(默认是,)

packages/react-native-picker/src/picker-input/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ group:
3636
| data | `true` | 选择项数据 | `CascadePickerItemProps[]` \| `Array<CascadePickerItemProps[]>` | `[]` |
3737
| cascade | `false` | 是否级联选择 | `boolean` | `false` |
3838
| cols | `false` | 选择列数量 | `number` | `3` |
39+
| hyphen | `false` | 连接符 | `number` | `,` |
3940
| value | `false` | 选中的值 | `ItemValue[]` | |
4041
| onChange | `false` | 选择回调 | `(value?: ItemValue[]) => void` | |
4142
| title | `false` | 选择器标题 | `string` | |

packages/react-native-picker/src/picker-input/index.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ interface PickerInputProps extends PickerProps, Omit<ModalPickerProps, 'visible'
2727
brief?: ReactNode;
2828
/** 自定义样式 */
2929
style?: StyleProp<ViewStyle>;
30+
/** 自定义高度 */
3031
itemHeight?: number;
32+
/** 连接符 */
33+
hyphen?: string;
3134
}
3235

3336
const { ONE_PIXEL } = helpers;
@@ -48,6 +51,7 @@ const PickerInput = forwardRef<PickerRef, PickerInputProps>(
4851
allowClear = true,
4952
disabled = false,
5053
itemHeight,
54+
hyphen = ',',
5155
activeOpacity = 0.6,
5256
...restProps
5357
},
@@ -60,6 +64,7 @@ const PickerInput = forwardRef<PickerRef, PickerInputProps>(
6064
value,
6165
onChange,
6266
placeholder,
67+
hyphen,
6368
ref,
6469
});
6570

packages/react-native-picker/src/picker-item/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ group:
5757
| data | `true` | 选择项数据 | `CascadePickerItemProps[]` \| `Array<CascadePickerItemProps[]>` | `[]` |
5858
| cascade | `false` | 是否级联选择 | `boolean` | `false` |
5959
| cols | `false` | 选择列数量 | `number` | `3` |
60+
| hyphen | `false` | 连接符 | `number` | `,` |
6061
| value | `false` | 选中的值 | `ItemValue[]` | |
6162
| onChange | `false` | 选择回调 | `(value?: ItemValue[]) => void` | |
6263
| title | `false` | 选择器标题 | `string` | |

packages/react-native-picker/src/picker-item/index.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ interface PickerItemProps extends PickerProps, Omit<ModalPickerProps, 'visible'
1717
disabled?: boolean;
1818
/** 自定义样式 */
1919
style?: StyleProp<ViewStyle>;
20+
/** 是否在表单里 */
2021
inForm?: boolean;
22+
/** 连接符 */
23+
hyphen?: string;
2124
}
2225

2326
const PickerItem = forwardRef<PickerRef, PickerItemProps>(
@@ -31,6 +34,7 @@ const PickerItem = forwardRef<PickerRef, PickerItemProps>(
3134
onChange,
3235
style,
3336
allowClear = true,
37+
hyphen = ',',
3438
activeOpacity = 0.6,
3539
inForm,
3640
...restProps
@@ -44,6 +48,7 @@ const PickerItem = forwardRef<PickerRef, PickerItemProps>(
4448
value,
4549
onChange,
4650
placeholder,
51+
hyphen,
4752
ref,
4853
});
4954

packages/react-native-picker/src/usePicker.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@ function getText(
1212
data: CascadePickerItemProps[] | CascadePickerItemProps[][],
1313
value?: ItemValue[],
1414
cascade?: boolean,
15-
placeholder?: string
15+
placeholder?: string,
16+
hyphen?: string
1617
) {
1718
if (value) {
18-
return transformValueToLabel(data, value, cascade) || placeholder;
19+
return transformValueToLabel(data, value, cascade, hyphen) || placeholder;
1920
}
2021
return placeholder;
2122
}
@@ -26,13 +27,15 @@ export default function usePicker({
2627
value,
2728
onChange,
2829
placeholder = '请选择',
30+
hyphen,
2931
ref,
3032
}: Pick<PickerProps, 'value' | 'onChange' | 'data' | 'cascade'> & {
3133
placeholder?: string;
34+
hyphen?: string;
3235
ref: ForwardedRef<PickerRef>;
3336
}) {
3437
const [state, setState] = useSafeState<ItemValue[] | undefined>(value);
35-
const [currentText, setCurrentText] = useSafeState(getText(data, value, cascade, placeholder));
38+
const [currentText, setCurrentText] = useSafeState(getText(data, value, cascade, placeholder, hyphen));
3639
const [visible, { setTrue, setFalse }] = useBoolean(false);
3740

3841
useImperativeHandle(ref, () => {
@@ -44,7 +47,7 @@ export default function usePicker({
4447
});
4548

4649
useEffect(() => {
47-
const text = getText(data, value, cascade, placeholder);
50+
const text = getText(data, value, cascade, placeholder, hyphen);
4851
setCurrentText(text);
4952
setState(value);
5053
}, [value]);
@@ -55,7 +58,7 @@ export default function usePicker({
5558
};
5659

5760
const handleChange = (value?: ItemValue[]) => {
58-
const text = getText(data, value, cascade, placeholder);
61+
const text = getText(data, value, cascade, placeholder, hyphen);
5962
setCurrentText(text);
6063
setState(value);
6164

packages/react-native-picker/src/utils.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ import { CascadePickerItemProps, ItemValue } from './components/WheelPicker/type
1010
export function transformValueToLabel(
1111
data: CascadePickerItemProps[] | Array<CascadePickerItemProps[]>,
1212
value?: ItemValue[],
13-
cascade?: boolean
13+
cascade?: boolean,
14+
hyphen?: string
1415
) {
1516
if (!value || value.length === 0) return undefined;
1617
if (!cascade) {
@@ -19,14 +20,14 @@ export function transformValueToLabel(
1920
value.forEach((val, index) => {
2021
const label = (data[index] as CascadePickerItemProps[]).find(item => item.value + '' === val + '')?.label;
2122
if (label) {
22-
text += label + ',';
23+
text += label + hyphen;
2324
}
2425
});
2526
return text.substring(0, text.length - 1);
2627
}
2728
return (data as CascadePickerItemProps[]).find(item => item.value + '' === value[0] + '')?.label;
2829
}
29-
return value.map(val => findByValue(data as CascadePickerItemProps[], val)?.label).join(',');
30+
return value.map(val => findByValue(data as CascadePickerItemProps[], val)?.label).join(hyphen);
3031
}
3132

3233
/**

0 commit comments

Comments
 (0)