@momo-kits/foundation 0.77.1-optimzie.5 → 0.77.1-optimzie.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -293,21 +293,19 @@ export default function BottomTabBar({
|
|
|
293
293
|
);
|
|
294
294
|
|
|
295
295
|
const renderCenterComponent = useCallback(() => {
|
|
296
|
-
const renderFloatingButton = () => {
|
|
297
|
-
if (typeof floatingButton?.icon == 'string') {
|
|
298
|
-
return <Icon source={floatingButton?.icon} size={32} color={'white'} />;
|
|
299
|
-
} else if (floatingButton?.icon) {
|
|
300
|
-
return floatingButton?.icon;
|
|
301
|
-
} else {
|
|
302
|
-
return null;
|
|
303
|
-
}
|
|
304
|
-
};
|
|
305
296
|
if (floatingButton?.icon && state.routes.length !== 4) {
|
|
306
297
|
console.warn(
|
|
307
298
|
"Can't render floating button with icon when routes length is not 4",
|
|
308
299
|
);
|
|
309
300
|
return null;
|
|
310
301
|
}
|
|
302
|
+
const renderFloatingButton = () => {
|
|
303
|
+
if (typeof floatingButton?.icon == 'string') {
|
|
304
|
+
return <Icon source={floatingButton?.icon} size={32} color={'white'} />;
|
|
305
|
+
}
|
|
306
|
+
return floatingButton?.icon;
|
|
307
|
+
};
|
|
308
|
+
|
|
311
309
|
return (
|
|
312
310
|
<View style={{flex: 1}}>
|
|
313
311
|
<TouchableOpacity
|
|
@@ -370,8 +368,6 @@ export default function BottomTabBar({
|
|
|
370
368
|
}),
|
|
371
369
|
},
|
|
372
370
|
],
|
|
373
|
-
// Absolutely position the tab bar so that the content is below it
|
|
374
|
-
// This is needed to avoid gap at bottom when the tab bar is hidden
|
|
375
371
|
position: isTabBarHidden ? 'absolute' : (null as any),
|
|
376
372
|
},
|
|
377
373
|
{
|
|
@@ -430,8 +426,8 @@ const styles = StyleSheet.create({
|
|
|
430
426
|
justifyContent: 'center',
|
|
431
427
|
height: 48,
|
|
432
428
|
width: 48,
|
|
433
|
-
borderRadius:
|
|
434
|
-
top: -
|
|
429
|
+
borderRadius: 24,
|
|
430
|
+
top: -10,
|
|
435
431
|
},
|
|
436
432
|
indicator: {
|
|
437
433
|
height: 2,
|
|
@@ -10,21 +10,26 @@ import {Text} from '../../Text';
|
|
|
10
10
|
import {ApplicationContext} from '../index';
|
|
11
11
|
import StackScreen from '../StackScreen';
|
|
12
12
|
import {BottomTabProps, NavigationScreenProps} from '../types';
|
|
13
|
-
import {getStackOptions} from '../utils';
|
|
13
|
+
import {getOptions, getStackOptions} from '../utils';
|
|
14
14
|
import BottomTabBar from './BottomTabBar';
|
|
15
15
|
|
|
16
16
|
const Tab = createBottomTabNavigator();
|
|
17
17
|
const Stack = createStackNavigator();
|
|
18
18
|
|
|
19
19
|
const TabScreen: React.FC<NavigationScreenProps> = ({route}) => {
|
|
20
|
+
const {theme} = useContext(ApplicationContext);
|
|
21
|
+
let options = {};
|
|
22
|
+
if (route.params?.options) {
|
|
23
|
+
options = getOptions(route.params?.options, theme);
|
|
24
|
+
}
|
|
20
25
|
if (route.params?.nested) {
|
|
21
26
|
return (
|
|
22
27
|
<Stack.Navigator>
|
|
23
28
|
<Stack.Screen
|
|
24
29
|
name="Stack"
|
|
25
30
|
component={StackScreen}
|
|
26
|
-
initialParams={{screen: route.params?.screen}}
|
|
27
|
-
options={{...getStackOptions()
|
|
31
|
+
initialParams={{screen: route.params?.screen, options}}
|
|
32
|
+
options={{...getStackOptions()}}
|
|
28
33
|
/>
|
|
29
34
|
</Stack.Navigator>
|
|
30
35
|
);
|
|
@@ -35,7 +40,7 @@ const TabScreen: React.FC<NavigationScreenProps> = ({route}) => {
|
|
|
35
40
|
<Stack.Screen
|
|
36
41
|
name="Stack"
|
|
37
42
|
component={StackScreen}
|
|
38
|
-
initialParams={{screen: route.params?.screen}}
|
|
43
|
+
initialParams={{screen: route.params?.screen, options}}
|
|
39
44
|
options={{...getStackOptions(), ...route.params?.options}}
|
|
40
45
|
/>
|
|
41
46
|
</Stack.Navigator>
|
|
@@ -83,6 +88,8 @@ const BottomTab: React.FC<BottomTabProps> = ({
|
|
|
83
88
|
},
|
|
84
89
|
}}>
|
|
85
90
|
{tabs.map(item => {
|
|
91
|
+
const isNum = !isNaN(parseInt(`${item?.badgeLabel}`));
|
|
92
|
+
const isDot = typeof item?.badgeLabel == 'string' && !item?.badgeLabel;
|
|
86
93
|
return (
|
|
87
94
|
<Tab.Screen
|
|
88
95
|
key={item.name}
|
|
@@ -113,12 +120,9 @@ const BottomTab: React.FC<BottomTabProps> = ({
|
|
|
113
120
|
fontWeight: 'bold',
|
|
114
121
|
alignSelf: 'center',
|
|
115
122
|
fontFamily: `${theme.font}-Bold`,
|
|
116
|
-
left:
|
|
117
|
-
top:
|
|
118
|
-
backgroundColor:
|
|
119
|
-
typeof item?.badgeLabel === 'string'
|
|
120
|
-
? Colors.orange_03
|
|
121
|
-
: Colors.red_03,
|
|
123
|
+
left: isDot ? 8 : 4,
|
|
124
|
+
top: isDot ? -2 : -6,
|
|
125
|
+
backgroundColor: isNum ? Colors.orange_03 : Colors.red_03,
|
|
122
126
|
},
|
|
123
127
|
tabBarIcon: ({color}) => (
|
|
124
128
|
<Icon source={item.icon} color={color} size={28} />
|
|
@@ -193,7 +193,7 @@ const HeaderBackground: React.FC<HeaderBackgroundProps> = ({
|
|
|
193
193
|
headerImage = undefined;
|
|
194
194
|
}
|
|
195
195
|
if (useSurface) {
|
|
196
|
-
backgroundColor = theme.colors.background.
|
|
196
|
+
backgroundColor = theme.colors.background.surface;
|
|
197
197
|
}
|
|
198
198
|
const opacity = animatedValue?.interpolate({
|
|
199
199
|
inputRange: [0, 114],
|
|
@@ -158,20 +158,18 @@ const headerDefault = (title: string, onClose: () => void) => {
|
|
|
158
158
|
|
|
159
159
|
const footerDefault = (footerComponent: React.ReactNode) => {
|
|
160
160
|
const insets = useSafeAreaInsets();
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
</View>
|
|
174
|
-
);
|
|
161
|
+
if (footerComponent) {
|
|
162
|
+
return (
|
|
163
|
+
<View
|
|
164
|
+
style={{
|
|
165
|
+
marginBottom: Math.min(insets.bottom, 21),
|
|
166
|
+
paddingHorizontal: Spacing.M,
|
|
167
|
+
paddingVertical: Spacing.S,
|
|
168
|
+
}}>
|
|
169
|
+
{footerComponent}
|
|
170
|
+
</View>
|
|
171
|
+
);
|
|
172
|
+
}
|
|
175
173
|
};
|
|
176
174
|
|
|
177
175
|
const styles = StyleSheet.create({
|
|
@@ -45,7 +45,7 @@ export const FloatingButton: React.FC<FloatingButtonProps> = ({
|
|
|
45
45
|
if (!label) return;
|
|
46
46
|
|
|
47
47
|
const listener = animatedValue?.addListener(({value}) => {
|
|
48
|
-
if (value !== lastOffset.current) {
|
|
48
|
+
if (value !== lastOffset.current && value > 0) {
|
|
49
49
|
const direction = value > lastOffset.current ? 'down' : 'up';
|
|
50
50
|
lastOffset.current = value;
|
|
51
51
|
if (lastDirection.current !== direction) {
|