Skip to content

Commit 8f2e117

Browse files
committed
feat: add RN Fabric support
1 parent c69ef71 commit 8f2e117

File tree

6 files changed

+157
-24
lines changed

6 files changed

+157
-24
lines changed

android/build.gradle

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,17 @@ android {
3535
targetSdkVersion getExtOrIntegerDefault('targetSdkVersion')
3636
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
3737
}
38+
39+
sourceSets {
40+
main {
41+
if (isNewArchitectureEnabled()) {
42+
java.srcDirs += ['src/newarch']
43+
} else {
44+
java.srcDirs += ['src/oldarch']
45+
}
46+
}
47+
}
48+
3849
buildTypes {
3950
release {
4051
minifyEnabled false
@@ -131,7 +142,7 @@ dependencies {
131142
if (isNewArchitectureEnabled()) {
132143
react {
133144
jsRootDir = file("../src/")
134-
libraryName = "FastShadow"
145+
libraryName = "FastShadowView"
135146
codegenJavaPackageName = "com.reactnativefastshadow"
136147
}
137148
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.reactnativefastshadow;
2+
3+
import android.graphics.Color;
4+
5+
import androidx.annotation.NonNull;
6+
7+
import com.facebook.react.bridge.ReadableMap;
8+
import com.facebook.react.uimanager.ThemedReactContext;
9+
import com.facebook.react.uimanager.annotations.ReactProp;
10+
import com.facebook.react.views.view.ReactViewGroup;
11+
import com.facebook.react.views.view.ReactViewManager;
12+
13+
public class FastShadowViewManagerImpl {
14+
15+
public static final String NAME = "FastShadowView";
16+
17+
public static FastShadowView createViewInstance(ThemedReactContext context) {
18+
return new FastShadowView(context);
19+
}
20+
21+
public static void onDropViewInstance(@NonNull ReactViewGroup view) {
22+
((FastShadowView) view).releaseShadow();
23+
}
24+
25+
public static void setShadowColor(FastShadowView view, int color) {
26+
view.setColor(color);
27+
}
28+
29+
public static void setShadowOpacity(FastShadowView view, float opacity) {
30+
view.setOpacity(opacity);
31+
}
32+
33+
public static void setShadowRadius(FastShadowView view, float radius) {
34+
view.setRadius(radius);
35+
}
36+
37+
public static void setShadowOffset(FastShadowView view, ReadableMap offset) {
38+
if (offset == null) {
39+
view.resetOffset();
40+
} else {
41+
view.setOffset(
42+
(float) offset.getDouble("width"),
43+
(float) offset.getDouble("height")
44+
);
45+
}
46+
}
47+
48+
public static void setCornerRadii(FastShadowView view, ReadableMap borderRadius) {
49+
view.setCornerRadii(new float[]{
50+
(float) borderRadius.getDouble("topLeft"),
51+
(float) borderRadius.getDouble("topRight"),
52+
(float) borderRadius.getDouble("bottomRight"),
53+
(float) borderRadius.getDouble("bottomLeft")
54+
});
55+
}
56+
}

android/src/main/java/com/reactnativefastshadow/FastShadowViewManager.java renamed to android/src/newarch/java/com/reactnativefastshadow/FastShadowViewManager.java

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -9,61 +9,50 @@
99
import com.facebook.react.uimanager.annotations.ReactProp;
1010
import com.facebook.react.views.view.ReactViewGroup;
1111
import com.facebook.react.views.view.ReactViewManager;
12+
import com.facebook.react.module.annotations.ReactModule;
1213

14+
@ReactModule(name = FastShadowViewManagerImpl.NAME)
1315
public class FastShadowViewManager extends ReactViewManager {
14-
public static final String REACT_CLASS = "FastShadowView";
1516

1617
@Override
1718
@NonNull
1819
public String getName() {
19-
return REACT_CLASS;
20+
return FastShadowViewManagerImpl.NAME;
2021
}
2122

2223
@Override
2324
public FastShadowView createViewInstance(ThemedReactContext context) {
24-
return new FastShadowView(context);
25+
return FastShadowViewManagerImpl.createViewInstance(context);
2526
}
2627

2728
@Override
2829
public void onDropViewInstance(@NonNull ReactViewGroup view) {
2930
super.onDropViewInstance(view);
30-
((FastShadowView) view).releaseShadow();
31+
FastShadowViewManagerImpl.onDropViewInstance(view);
3132
}
3233

3334
@ReactProp(name = "shadowColor", customType = "Color", defaultInt = Color.BLACK)
3435
public void setShadowColor(FastShadowView view, int color) {
35-
view.setColor(color);
36+
FastShadowViewManagerImpl.setShadowColor(view, color);
3637
}
3738

3839
@ReactProp(name = "shadowOpacity", defaultFloat = 0)
3940
public void setShadowOpacity(FastShadowView view, float opacity) {
40-
view.setOpacity(opacity);
41+
FastShadowViewManagerImpl.setShadowOpacity(view, opacity);
4142
}
4243

4344
@ReactProp(name = "shadowRadius", defaultFloat = 3)
4445
public void setShadowRadius(FastShadowView view, float radius) {
45-
view.setRadius(radius);
46+
FastShadowViewManagerImpl.setShadowRadius(view, radius);
4647
}
4748

4849
@ReactProp(name = "shadowOffset")
4950
public void setShadowOffset(FastShadowView view, ReadableMap offset) {
50-
if (offset == null) {
51-
view.resetOffset();
52-
} else {
53-
view.setOffset(
54-
(float) offset.getDouble("width"),
55-
(float) offset.getDouble("height")
56-
);
57-
}
51+
FastShadowViewManagerImpl.setShadowOffset(view, offset);
5852
}
5953

6054
@ReactProp(name = "cornerRadii")
6155
public void setCornerRadii(FastShadowView view, ReadableMap borderRadius) {
62-
view.setCornerRadii(new float[]{
63-
(float) borderRadius.getDouble("topLeft"),
64-
(float) borderRadius.getDouble("topRight"),
65-
(float) borderRadius.getDouble("bottomRight"),
66-
(float) borderRadius.getDouble("bottomLeft")
67-
});
56+
FastShadowViewManagerImpl.setCornerRadii(view, borderRadius);
6857
}
6958
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.reactnativefastshadow;
2+
3+
import android.graphics.Color;
4+
5+
import androidx.annotation.NonNull;
6+
7+
import com.facebook.react.bridge.ReadableMap;
8+
import com.facebook.react.uimanager.ThemedReactContext;
9+
import com.facebook.react.uimanager.annotations.ReactProp;
10+
import com.facebook.react.views.view.ReactViewGroup;
11+
import com.facebook.react.views.view.ReactViewManager;
12+
13+
public class FastShadowViewManager extends ReactViewManager {
14+
15+
@Override
16+
@NonNull
17+
public String getName() {
18+
return FastShadowViewManagerImpl.NAME;
19+
}
20+
21+
@Override
22+
public FastShadowView createViewInstance(ThemedReactContext context) {
23+
return FastShadowViewManagerImpl.createViewInstance(context);
24+
}
25+
26+
@Override
27+
public void onDropViewInstance(@NonNull ReactViewGroup view) {
28+
super.onDropViewInstance(view);
29+
FastShadowViewManagerImpl.onDropViewInstance(view);
30+
}
31+
32+
@ReactProp(name = "shadowColor", customType = "Color", defaultInt = Color.BLACK)
33+
public void setShadowColor(FastShadowView view, int color) {
34+
FastShadowViewManagerImpl.setShadowColor(view, color);
35+
}
36+
37+
@ReactProp(name = "shadowOpacity", defaultFloat = 0)
38+
public void setShadowOpacity(FastShadowView view, float opacity) {
39+
FastShadowViewManagerImpl.setShadowOpacity(view, opacity);
40+
}
41+
42+
@ReactProp(name = "shadowRadius", defaultFloat = 3)
43+
public void setShadowRadius(FastShadowView view, float radius) {
44+
FastShadowViewManagerImpl.setShadowRadius(view, radius);
45+
}
46+
47+
@ReactProp(name = "shadowOffset")
48+
public void setShadowOffset(FastShadowView view, ReadableMap offset) {
49+
FastShadowViewManagerImpl.setShadowOffset(view, offset);
50+
}
51+
52+
@ReactProp(name = "cornerRadii")
53+
public void setCornerRadii(FastShadowView view, ReadableMap borderRadius) {
54+
FastShadowViewManagerImpl.setCornerRadii(view, borderRadius);
55+
}
56+
}

src/FastShadowView.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,8 @@ export type FastShadowViewProps = ViewProps & {
99
};
1010
};
1111

12-
export const FastShadowView =
13-
requireNativeComponent<FastShadowViewProps>('FastShadowView');
12+
const isFabricEnabled = (global as any).nativeFabricUIManager != null;
13+
14+
export const FastShadowView: React.FC<FastShadowViewProps> = isFabricEnabled
15+
? require('./FastShadowViewNativeComponent').default
16+
: requireNativeComponent('FastShadowView');

src/FastShadowViewNativeComponent.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// @flow
2+
import type { ViewProps } from 'react-native/Libraries/Components/View/ViewPropTypes';
3+
import type { HostComponent } from 'react-native';
4+
import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
5+
6+
export type FastShadowViewProps = $ReadOnly<{|
7+
...ViewProps,
8+
cornerRadii: $ReadOnly<{|
9+
topLeft: Int32,
10+
topRight: Int32,
11+
bottomLeft: Int32,
12+
bottomRight: Int32,
13+
|}>,
14+
|}>;
15+
16+
export default (codegenNativeComponent<FastShadowViewProps>(
17+
'FastShadowView'
18+
): HostComponent<FastShadowViewProps>);

0 commit comments

Comments
 (0)