Skip to content

Commit a978dfd

Browse files
authored
Picker render custom modal support items (#3081)
* Picker render custom modal support items * refcator into renderItems
1 parent e8bc3b2 commit a978dfd

File tree

3 files changed

+15
-15
lines changed

3 files changed

+15
-15
lines changed

demo/src/screens/componentScreens/PickerScreen.tsx

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -171,17 +171,8 @@ export default class PickerScreen extends Component {
171171
mode={Picker.modes.MULTI}
172172
trailingAccessory={dropdownIcon}
173173
renderCustomModal={this.renderDialog}
174-
>
175-
{_.map(options, option => (
176-
<Picker.Item
177-
key={option.value}
178-
value={option.value}
179-
label={option.label}
180-
labelStyle={Typography.text65}
181-
disabled={option.disabled}
182-
/>
183-
))}
184-
</Picker>
174+
items={options}
175+
/>
185176

186177
<Picker
187178
label="Dialog Picker"

src/components/picker/index.tsx

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@ const Picker = React.forwardRef((props: PickerProps, ref) => {
9595
} = themeProps;
9696
const {preset} = others;
9797

98-
const [selectedItemPosition, setSelectedItemPosition] = useState(0);
99-
const [items, setItems] = useState(propItems || extractPickerItems(themeProps));
98+
const [selectedItemPosition, setSelectedItemPosition] = useState<number>(0);
99+
const [items, setItems] = useState<PickerItemProps[]>(propItems || extractPickerItems(themeProps));
100100

101101
useEffect(() => {
102102
if (propItems) {
@@ -194,6 +194,15 @@ const Picker = React.forwardRef((props: PickerProps, ref) => {
194194
}
195195
}, [fieldType, preset, themeProps.trailingAccessory]);
196196

197+
const renderPickerItem = useCallback((item: PickerItemProps): React.ReactElement => {
198+
return <PickerItem {...item}/>;
199+
}, []);
200+
201+
const renderItems = useCallback((items: PickerProps['items']) => {
202+
return items && _.map(items, item => renderPickerItem(item));
203+
},
204+
[renderPickerItem]);
205+
197206
const _renderCustomModal: ExpandableOverlayProps['renderCustomOverlay'] = ({
198207
visible,
199208
closeExpandable,
@@ -205,7 +214,7 @@ const Picker = React.forwardRef((props: PickerProps, ref) => {
205214
closeModal: closeExpandable,
206215
toggleModal: toggleExpandable,
207216
onSearchChange: _onSearchChange,
208-
children,
217+
children: children || renderItems(items),
209218
// onDone is relevant to multi mode only
210219
onDone: () => onDoneSelecting(multiDraftValue),
211220
onCancel: cancelSelect

src/components/picker/types.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ export type PickerBaseProps = Omit<NewTextFieldProps, 'value' | 'onChange'> & {
184184
/**
185185
* Data source for Picker
186186
*/
187-
items?: Pick<PickerItemProps, 'label' | 'value' | 'disabled'>[];
187+
items?: PickerItemProps[];
188188
/**
189189
* Component test id
190190
*/

0 commit comments

Comments
 (0)