diff --git a/Example/ios/ScreensExample/Images.xcassets/logo.imageset/Contents.json b/Example/ios/ScreensExample/Images.xcassets/logo.imageset/Contents.json new file mode 100644 index 0000000000..b71a158885 --- /dev/null +++ b/Example/ios/ScreensExample/Images.xcassets/logo.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "react-logo.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Example/ios/ScreensExample/Images.xcassets/logo.imageset/react-logo.svg b/Example/ios/ScreensExample/Images.xcassets/logo.imageset/react-logo.svg new file mode 100644 index 0000000000..e051eb3653 --- /dev/null +++ b/Example/ios/ScreensExample/Images.xcassets/logo.imageset/react-logo.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabScreenViewManager.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabScreenViewManager.kt index 7854606c22..d93a0c992c 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabScreenViewManager.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabScreenViewManager.kt @@ -84,6 +84,11 @@ class TabScreenViewManager : value: String?, ) = Unit + override fun setIconXcassetsName( + view: TabScreen?, + value: String?, + ) = Unit + override fun setSelectedIconImageSource( view: TabScreen?, value: ReadableMap?, @@ -94,6 +99,11 @@ class TabScreenViewManager : value: String?, ) = Unit + override fun setSelectedIconXcassetsName( + view: TabScreen?, + value: String?, + ) = Unit + // Annotation is Paper only @ReactProp(name = "isFocused") override fun setIsFocused( diff --git a/android/src/paper/java/com/facebook/react/viewmanagers/RNSBottomTabsScreenManagerDelegate.java b/android/src/paper/java/com/facebook/react/viewmanagers/RNSBottomTabsScreenManagerDelegate.java index 5f8b030f34..d1245606fa 100644 --- a/android/src/paper/java/com/facebook/react/viewmanagers/RNSBottomTabsScreenManagerDelegate.java +++ b/android/src/paper/java/com/facebook/react/viewmanagers/RNSBottomTabsScreenManagerDelegate.java @@ -19,10 +19,12 @@ import com.facebook.react.uimanager.LayoutShadowNode; @SuppressWarnings("deprecation") -public class RNSBottomTabsScreenManagerDelegate & RNSBottomTabsScreenManagerInterface> extends BaseViewManagerDelegate { +public class RNSBottomTabsScreenManagerDelegate & RNSBottomTabsScreenManagerInterface> + extends BaseViewManagerDelegate { public RNSBottomTabsScreenManagerDelegate(U viewManager) { super(viewManager); } + @Override public void setProperty(T view, String propName, @Nullable Object value) { switch (propName) { @@ -71,12 +73,18 @@ public void setProperty(T view, String propName, @Nullable Object value) { case "iconSfSymbolName": mViewManager.setIconSfSymbolName(view, value == null ? null : (String) value); break; + case "iconXcassetsName": + mViewManager.setIconXcassetsName(view, value == null ? null : (String) value); + break; case "selectedIconImageSource": mViewManager.setSelectedIconImageSource(view, (ReadableMap) value); break; case "selectedIconSfSymbolName": mViewManager.setSelectedIconSfSymbolName(view, value == null ? null : (String) value); break; + case "selectedIconXcassetsName": + mViewManager.setSelectedIconXcassetsName(view, value == null ? null : (String) value); + break; case "systemItem": mViewManager.setSystemItem(view, (String) value); break; diff --git a/android/src/paper/java/com/facebook/react/viewmanagers/RNSBottomTabsScreenManagerInterface.java b/android/src/paper/java/com/facebook/react/viewmanagers/RNSBottomTabsScreenManagerInterface.java index 1078f012d7..cc28adb997 100644 --- a/android/src/paper/java/com/facebook/react/viewmanagers/RNSBottomTabsScreenManagerInterface.java +++ b/android/src/paper/java/com/facebook/react/viewmanagers/RNSBottomTabsScreenManagerInterface.java @@ -31,8 +31,10 @@ public interface RNSBottomTabsScreenManagerInterface extends Vie void setIconType(T view, @Nullable String value); void setIconImageSource(T view, @Nullable ReadableMap value); void setIconSfSymbolName(T view, @Nullable String value); + void setIconXcassetsName(T view, @Nullable String value); void setSelectedIconImageSource(T view, @Nullable ReadableMap value); void setSelectedIconSfSymbolName(T view, @Nullable String value); + void setSelectedIconXcassetsName(T view, @Nullable String value); void setSystemItem(T view, @Nullable String value); void setSpecialEffects(T view, @Nullable ReadableMap value); void setOverrideScrollViewContentInsetAdjustmentBehavior(T view, boolean value); diff --git a/apps/src/screens/BarButtonItems.tsx b/apps/src/screens/BarButtonItems.tsx index d1b518d2ab..cf6106a821 100644 --- a/apps/src/screens/BarButtonItems.tsx +++ b/apps/src/screens/BarButtonItems.tsx @@ -16,6 +16,7 @@ const Stack = createNativeStackNavigator(); const demoScreens = [ { name: 'PlainButtonDemo', title: 'Plain Button' }, { name: 'IconButtonDemo', title: 'Icon Button' }, + { name: 'XcassetsIconButtonDemo', title: 'Xcassets Icon Button' }, { name: 'SystemIconButtonDemo', title: 'System Icon Button' }, { name: 'MenuButtonDemo', title: 'Menu Button' }, { name: 'BadgeButtonDemo', title: 'Badge Button' }, @@ -63,6 +64,7 @@ const DemoScreenContent = () => ( const PlainButtonDemo = DemoScreenContent; const IconButtonDemo = DemoScreenContent; +const XcassetsIconButtonDemo = DemoScreenContent; const MenuButtonDemo = DemoScreenContent; const BadgeButtonDemo = DemoScreenContent; const DisabledButtonDemo = DemoScreenContent; @@ -128,6 +130,24 @@ export default function BarButtonItemsExample() { ], }} /> + [ + { + type: "button", + icon: { + type: "xcassets", + name: "logo", + }, + label: "Xcassets", + onPress: () => Alert.alert('Icon Xcassets pressed'), + } + ], + }} + /> + + + ); +} + +export function BottomTabsScenario() { + const [config, setConfig] = useState({ ...SCROLL_EDGE_EFFECT_DEFAULTS }); + + return ( + + + + + + + + ); +} diff --git a/apps/src/tests/Test3443/Config.tsx b/apps/src/tests/Test3443/Config.tsx new file mode 100644 index 0000000000..a46170e85c --- /dev/null +++ b/apps/src/tests/Test3443/Config.tsx @@ -0,0 +1,71 @@ +import React, { Button, Text } from "react-native"; +import { useScrollEdgeEffectsConfigContext } from './context'; +import { NavigationProp, useNavigation } from "@react-navigation/core"; +import { SettingsPicker } from "../../shared"; +import { ScrollEdgeEffect } from "react-native-screens"; + +interface ConfigProps { + title: string; + navigation?: NavigationProp<{ Test: undefined }>; +} + +const SCROLL_EDGE_EFFECT_OPTIONS: ScrollEdgeEffect[] = ['automatic', 'hard', 'soft', 'hidden']; + +function ConfigWithOptionalNavigation(props: ConfigProps) { + const { title, navigation } = props; + + const { config, setConfig } = useScrollEdgeEffectsConfigContext(); + + return ( + <> + {title} + + setConfig({...config, bottom: value}) + } + /> + + setConfig({...config, top: value}) + } + /> + + setConfig({...config, left: value}) + } + /> + + setConfig({...config, right: value}) + } + /> + { navigation &&