From 1e951391f9111a3c333bd8ce5355a17078e7c137 Mon Sep 17 00:00:00 2001 From: Lidor Dafna Date: Mon, 25 Apr 2022 17:45:37 +0300 Subject: [PATCH] Feat/ support multiple buttons on ModalTopBar --- .../screens/componentScreens/ModalScreen.tsx | 56 ++++++++++++++----- src/components/modal/TopBar.tsx | 38 +++++++++++-- src/components/modal/api/modalTopBar.api.json | 10 ++++ 3 files changed, 83 insertions(+), 21 deletions(-) diff --git a/demo/src/screens/componentScreens/ModalScreen.tsx b/demo/src/screens/componentScreens/ModalScreen.tsx index a99c716225..0b2fc1fcec 100644 --- a/demo/src/screens/componentScreens/ModalScreen.tsx +++ b/demo/src/screens/componentScreens/ModalScreen.tsx @@ -1,8 +1,9 @@ import React, {Component} from 'react'; import {Alert, StyleSheet} from 'react-native'; import {Navigation} from 'react-native-navigation'; -import {Colors, Carousel, PageControl, Modal, View, Text} from 'react-native-ui-lib'; // eslint-disable-line +import {Colors, Carousel, PageControl, Modal, View, Text, Assets} from 'react-native-ui-lib'; // eslint-disable-line +const BUTTONS_HIT_SLOP = {right: 5, left: 5, top: 10, bottom: 10}; interface ModalScreenProps { componentId: string; } @@ -12,7 +13,6 @@ interface State { } export default class ModalScreen extends Component { - static options() { return { topBar: { @@ -39,7 +39,7 @@ export default class ModalScreen extends Component { { }} /> - - This is an example of a custom modal top bar. - - - By default you get the 'x' cancel icon and 'save' as done label - + This is an example of a custom modal top bar. + By default you get the 'x' cancel icon and 'save' as done label @@ -74,8 +70,8 @@ export default class ModalScreen extends Component { /> - You can of course change it by changing the values of - cancelIcon, cancelLabel, doneIcon, doneLabel and other props.. + You can of course change it by changing the values of cancelIcon, cancelLabel, doneIcon, doneLabel and + other props.. @@ -89,9 +85,7 @@ export default class ModalScreen extends Component { cancelLabel="back" /> - - Sending onDone/onCancel is required for rendering done/cancel actions - + Sending onDone/onCancel is required for rendering done/cancel actions @@ -105,7 +99,39 @@ export default class ModalScreen extends Component { /> - use doneButtonProps/cancelButtonProps properties to have custom behaviour or style for done/cancel actions + use doneButtonProps/cancelButtonProps properties to have custom behaviour or style for done/cancel + actions + + + + + + Alert.alert('save') + }, + { + icon: Assets.icons.demo.settings, + onPress: () => Alert.alert('settings'), + buttonProps: {hitSlop: BUTTONS_HIT_SLOP, iconStyle: {tintColor: Colors.yellow10}} + } + ]} + leftButtons={[ + { + icon: Assets.icons.x, + onPress: () => Alert.alert('back'), + buttonProps: {hitSlop: BUTTONS_HIT_SLOP, iconStyle: {tintColor: Colors.yellow10}} + } + ]} + /> + + + This is an example for using the rightButtons and leftButtons props for having more than one button each + side diff --git a/src/components/modal/TopBar.tsx b/src/components/modal/TopBar.tsx index 402836ccbc..fbacd36a18 100644 --- a/src/components/modal/TopBar.tsx +++ b/src/components/modal/TopBar.tsx @@ -1,3 +1,4 @@ +import _ from 'lodash'; import React, {Component} from 'react'; import {StyleSheet, StyleProp, TextStyle, ImageSourcePropType} from 'react-native'; import {Constants, asBaseComponent} from '../../commons/new'; @@ -48,6 +49,14 @@ export interface ModalTopBarProps { * cancel action callback */ onCancel?: (props?: any) => void; + /** + * buttons to render on the right side of the top bar + */ + rightButtons?: topBarButtonProp | topBarButtonProp[]; + /** + * buttons to render on the left side of the top bar + */ + leftButtons?: topBarButtonProp | topBarButtonProp[]; /** * whether to include status bar or not (height claculations) */ @@ -92,21 +101,18 @@ class TopBar extends Component { renderTopBarButton({onPress, label, icon, accessibilityLabel, buttonProps}: topBarButtonProp) { if (onPress && (label || icon)) { - // @ts-ignore - const {iconStyle, labelStyle, ...otherButtonProps} = buttonProps; - return (