Skip to content

Commit ccdb618

Browse files
committed
feat: add kotlin support to the fabric template
1 parent cbaecd2 commit ccdb618

File tree

39 files changed

+227
-81
lines changed

39 files changed

+227
-81
lines changed

.github/workflows/build-templates.yml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,10 @@ jobs:
3333
language: java-swift
3434
- type: module-mixed
3535
language: kotlin-swift
36-
- type: view-new
37-
language: kotlin-objc
3836
- type: view-new
3937
language: java-swift
4038
- type: view-new
4139
language: kotlin-swift
42-
- type: view-mixed
43-
language: kotlin-objc
4440
- type: view-mixed
4541
language: java-swift
4642
- type: view-mixed
@@ -90,7 +86,7 @@ jobs:
9086
run: |
9187
WORK_DIR=tmp-${{ matrix.type }}-${{ matrix.language }}
9288
93-
EXPERIMENTAL_FABRIC_ENABLED=1 ./packages/create-react-native-library/bin/create-react-native-library "$WORK_DIR" \
89+
./packages/create-react-native-library/bin/create-react-native-library "$WORK_DIR" \
9490
--slug @bob/react-native-test \
9591
--description test \
9692
--author-name test \

packages/create-react-native-library/src/index.ts

Lines changed: 14 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ const KOTLIN_FILES = {
5555
module_new: path.resolve(__dirname, '../templates/kotlin-library-new'),
5656
module_mixed: path.resolve(__dirname, '../templates/kotlin-library-mixed'),
5757
view_legacy: path.resolve(__dirname, '../templates/kotlin-view-legacy'),
58+
view_mixed: path.resolve(__dirname, '../templates/kotlin-view-mixed'),
59+
view_new: path.resolve(__dirname, '../templates/kotlin-view-new'),
5860
} as const;
5961

6062
const SWIFT_FILES = {
@@ -108,11 +110,7 @@ const LANGUAGE_CHOICES: {
108110
types?: ProjectType[];
109111
}[] = [
110112
{ title: 'Java & Objective-C', value: 'java-objc' },
111-
{
112-
title: 'Kotlin & Objective-C',
113-
value: 'kotlin-objc',
114-
types: ['module-legacy', 'module-mixed', 'module-new', 'view-legacy'],
115-
},
113+
{ title: 'Kotlin & Objective-C', value: 'kotlin-objc' },
116114
{
117115
title: 'Java & Swift',
118116
value: 'java-swift',
@@ -168,20 +166,16 @@ const TYPE_CHOICES: {
168166
value: 'module-new',
169167
description: NEWARCH_DESCRIPTION,
170168
},
171-
...(process.env.EXPERIMENTAL_FABRIC_ENABLED === '1'
172-
? ([
173-
{
174-
title: 'Fabric view with backward compat',
175-
value: 'view-mixed',
176-
description: BACKCOMPAT_DESCRIPTION,
177-
},
178-
{
179-
title: 'Fabric view',
180-
value: 'view-new',
181-
description: NEWARCH_DESCRIPTION,
182-
},
183-
] as const)
184-
: []),
169+
{
170+
title: 'Fabric view with backward compat',
171+
value: 'view-mixed',
172+
description: BACKCOMPAT_DESCRIPTION,
173+
},
174+
{
175+
title: 'Fabric view',
176+
value: 'view-new',
177+
description: NEWARCH_DESCRIPTION,
178+
},
185179
];
186180

187181
const args: Record<ArgName, yargs.Options> = {
@@ -585,18 +579,7 @@ async function create(argv: yargs.Arguments<any>) {
585579
const templateType = `${moduleType}_${architecture}` as const;
586580

587581
if (options.project.kotlin) {
588-
switch (templateType) {
589-
case 'module_legacy':
590-
case 'module_mixed':
591-
case 'module_new':
592-
case 'view_legacy':
593-
await copyDir(KOTLIN_FILES[templateType], folder);
594-
break;
595-
default:
596-
throw new Error(
597-
`Kotlin template for ${templateType} has not been implemented`
598-
);
599-
}
582+
await copyDir(KOTLIN_FILES[templateType], folder);
600583
} else {
601584
await copyDir(JAVA_FILES[templateType], folder);
602585
}

packages/create-react-native-library/templates/java-library-legacy/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Module.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.<%- project.package -%>;
1+
package com.<%- project.package %>;
22

33
import androidx.annotation.NonNull;
44

packages/create-react-native-library/templates/java-library-legacy/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Package.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.<%- project.package -%>;
1+
package com.<%- project.package %>;
22

33
import androidx.annotation.NonNull;
44

packages/create-react-native-library/templates/java-library-mixed/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Module.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
package com.<%- project.package -%>;
1+
package com.<%- project.package %>;
22

33
import androidx.annotation.NonNull;
4+
45
import com.facebook.react.bridge.Promise;
56
import com.facebook.react.bridge.ReactApplicationContext;
67
import com.facebook.react.bridge.ReactMethod;

packages/create-react-native-library/templates/java-library-mixed/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Package.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
package com.<%- project.package -%>;
1+
package com.<%- project.package %>;
22

33
import androidx.annotation.Nullable;
4+
45
import com.facebook.react.bridge.NativeModule;
56
import com.facebook.react.bridge.ReactApplicationContext;
67
import com.facebook.react.module.model.ReactModuleInfo;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.<%- project.package -%>;
1+
package com.<%- project.package %>;
22

33
import com.facebook.react.bridge.ReactApplicationContext;
44

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.<%- project.package -%>;
1+
package com.<%- project.package %>;
22

33
import com.facebook.react.bridge.ReactApplicationContext;
44
import com.facebook.react.bridge.ReactContextBaseJavaModule;

packages/create-react-native-library/templates/java-library-new/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Module.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.<%- project.package -%>;
1+
package com.<%- project.package %>;
22

33
import androidx.annotation.NonNull;
44

packages/create-react-native-library/templates/java-library-new/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Package.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
package com.<%- project.package -%>;
1+
package com.<%- project.package %>;
22

33
import androidx.annotation.Nullable;
4+
45
import com.facebook.react.bridge.NativeModule;
56
import com.facebook.react.bridge.ReactApplicationContext;
67
import com.facebook.react.module.model.ReactModuleInfo;

packages/create-react-native-library/templates/java-view-legacy/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Package.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.<%- project.package -%>;
1+
package com.<%- project.package %>;
22

33
import com.facebook.react.ReactPackage;
44
import com.facebook.react.bridge.NativeModule;

packages/create-react-native-library/templates/java-view-legacy/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}ViewManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.<%- project.package -%>;
1+
package com.<%- project.package %>;
22

33
import android.graphics.Color;
44
import android.view.View;

packages/create-react-native-library/templates/java-view-mixed/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}View.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
package com.<%- project.package -%>;
1+
package com.<%- project.package %>;
22

33
import androidx.annotation.Nullable;
4+
45
import android.content.Context;
56
import android.util.AttributeSet;
67

packages/create-react-native-library/templates/java-view-mixed/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}ViewManager.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
package com.<%- project.package -%>;
1+
package com.<%- project.package %>;
22

33
import android.graphics.Color;
44

55
import androidx.annotation.Nullable;
66

7-
import com.facebook.react.bridge.ReactApplicationContext;
87
import com.facebook.react.module.annotations.ReactModule;
98
import com.facebook.react.uimanager.ThemedReactContext;
109
import com.facebook.react.uimanager.annotations.ReactProp;
@@ -14,10 +13,6 @@ public class <%- project.name -%>ViewManager extends <%- project.name -%>ViewMan
1413

1514
public static final String NAME = "<%- project.name -%>View";
1615

17-
public <%- project.name -%>ViewManager(ReactApplicationContext reactContext) {
18-
super(reactContext);
19-
}
20-
2116
@Override
2217
public String getName() {
2318
return NAME;

packages/create-react-native-library/templates/java-view-mixed/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}ViewPackage.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<% /* TODO: try to migrate it to TurboReactPackage */ %>
2-
package com.<%- project.package -%>;
2+
package com.<%- project.package %>;
33

44
import com.facebook.react.ReactPackage;
55
import com.facebook.react.bridge.NativeModule;
@@ -14,7 +14,7 @@ public class <%- project.name -%>ViewPackage implements ReactPackage {
1414
@Override
1515
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
1616
List<ViewManager> viewManagers = new ArrayList<>();
17-
viewManagers.add(new <%- project.name -%>ViewManager(reactContext));
17+
viewManagers.add(new <%- project.name -%>ViewManager());
1818
return viewManagers;
1919
}
2020

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
package com.<%- project.package -%>;
1+
package com.<%- project.package %>;
22

33
import android.view.View;
44

5-
import com.facebook.react.bridge.ReactApplicationContext;
5+
import androidx.annotation.Nullable;
6+
67
import com.facebook.react.uimanager.SimpleViewManager;
78
import com.facebook.react.uimanager.ViewManagerDelegate;
89
import com.facebook.react.viewmanagers.<%- project.name -%>ViewManagerDelegate;
@@ -11,10 +12,11 @@
1112
public abstract class <%- project.name -%>ViewManagerSpec<T extends View> extends SimpleViewManager<T> implements <%- project.name -%>ViewManagerInterface<T> {
1213
private final ViewManagerDelegate<T> mDelegate;
1314

14-
public <%- project.name -%>ViewManagerSpec(ReactApplicationContext context) {
15+
public <%- project.name -%>ViewManagerSpec() {
1516
mDelegate = new <%- project.name -%>ViewManagerDelegate(this);
1617
}
1718

19+
@Nullable
1820
@Override
1921
protected ViewManagerDelegate<T> getDelegate() {
2022
return mDelegate;
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.<%- project.package -%>;
1+
package com.<%- project.package %>;
22

33
import android.view.View;
44

@@ -8,9 +8,5 @@
88
import com.facebook.react.uimanager.SimpleViewManager;
99

1010
public abstract class <%- project.name -%>ViewManagerSpec<T extends View> extends SimpleViewManager<T> {
11-
public <%- project.name -%>ViewManagerSpec(ReactApplicationContext context) {
12-
super();
13-
}
14-
1511
public abstract void setColor(T view, @Nullable String value);
1612
}

packages/create-react-native-library/templates/java-view-new/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}View.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
package com.<%- project.package -%>;
1+
package com.<%- project.package %>;
22

33
import androidx.annotation.Nullable;
4+
45
import android.content.Context;
56
import android.util.AttributeSet;
67

packages/create-react-native-library/templates/java-view-new/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}ViewManager.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
package com.<%- project.package -%>;
1+
package com.<%- project.package %>;
22

33
import android.graphics.Color;
44

5+
import androidx.annotation.Nullable;
6+
57
import com.facebook.react.module.annotations.ReactModule;
68
import com.facebook.react.uimanager.SimpleViewManager;
79
import com.facebook.react.uimanager.ThemedReactContext;
810
import com.facebook.react.uimanager.ViewManagerDelegate;
911
import com.facebook.react.uimanager.annotations.ReactProp;
10-
import com.facebook.react.bridge.ReactApplicationContext;
1112
import com.facebook.react.viewmanagers.<%- project.name -%>ViewManagerDelegate;
1213
import com.facebook.react.viewmanagers.<%- project.name -%>ViewManagerInterface;
1314

@@ -18,10 +19,11 @@ public class <%- project.name -%>ViewManager extends SimpleViewManager<<%- proje
1819

1920
private final ViewManagerDelegate<<%- project.name -%>View> mDelegate;
2021

21-
public <%- project.name -%>ViewManager(ReactApplicationContext context) {
22+
public <%- project.name -%>ViewManager() {
2223
mDelegate = new <%- project.name -%>ViewManagerDelegate(this);
2324
}
2425

26+
@Nullable
2527
@Override
2628
protected ViewManagerDelegate<<%- project.name -%>View> getDelegate() {
2729
return mDelegate;

packages/create-react-native-library/templates/java-view-new/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}ViewPackage.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<% /* TODO: try to migrate it to TurboReactPackage */ %>
2-
package com.<%- project.package -%>;
2+
package com.<%- project.package %>;
33

44
import com.facebook.react.ReactPackage;
55
import com.facebook.react.bridge.NativeModule;
@@ -14,7 +14,7 @@ public class <%- project.name -%>ViewPackage implements ReactPackage {
1414
@Override
1515
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
1616
List<ViewManager> viewManagers = new ArrayList<>();
17-
viewManagers.add(new <%- project.name -%>ViewManager(reactContext));
17+
viewManagers.add(new <%- project.name -%>ViewManager());
1818
return viewManagers;
1919
}
2020

packages/create-react-native-library/templates/kotlin-library-legacy/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Module.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.<%- project.package -%>
1+
package com.<%- project.package %>
22

33
import com.facebook.react.bridge.ReactApplicationContext
44
import com.facebook.react.bridge.ReactContextBaseJavaModule

packages/create-react-native-library/templates/kotlin-library-legacy/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Package.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.<%- project.package -%>
1+
package com.<%- project.package %>
22

33
import com.facebook.react.ReactPackage
44
import com.facebook.react.bridge.NativeModule

packages/create-react-native-library/templates/kotlin-library-mixed/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Module.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.<%- project.package -%>
1+
package com.<%- project.package %>
22

33
import com.facebook.react.bridge.ReactApplicationContext
44
import com.facebook.react.bridge.ReactMethod

packages/create-react-native-library/templates/kotlin-library-mixed/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Package.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.<%- project.package -%>
1+
package com.<%- project.package %>
22

33
import com.facebook.react.TurboReactPackage
44
import com.facebook.react.bridge.ReactApplicationContext
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.<%- project.package -%>
1+
package com.<%- project.package %>
22

33
import com.facebook.react.bridge.ReactApplicationContext
44

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.<%- project.package -%>
1+
package com.<%- project.package %>
22

33
import com.facebook.react.bridge.ReactApplicationContext
44
import com.facebook.react.bridge.ReactContextBaseJavaModule

packages/create-react-native-library/templates/kotlin-library-new/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Module.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.<%- project.package -%>
1+
package com.<%- project.package %>
22

33
import com.facebook.react.bridge.ReactApplicationContext
44
import com.facebook.react.module.annotations.ReactModule

packages/create-react-native-library/templates/kotlin-library-new/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Package.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.<%- project.package -%>
1+
package com.<%- project.package %>
22

33
import com.facebook.react.TurboReactPackage
44
import com.facebook.react.bridge.NativeModule

packages/create-react-native-library/templates/kotlin-view-legacy/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}Package.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.<%- project.package -%>
1+
package com.<%- project.package %>
22

33
import com.facebook.react.ReactPackage
44
import com.facebook.react.bridge.NativeModule

packages/create-react-native-library/templates/kotlin-view-legacy/android/src/main/java/com/{%- project.package_dir %}/{%- project.name %}ViewManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.<%- project.package -%>
1+
package com.<%- project.package %>
22

33
import android.graphics.Color
44
import android.view.View
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.<%- project.package %>
2+
3+
import com.facebook.react.ReactPackage
4+
import com.facebook.react.bridge.NativeModule
5+
import com.facebook.react.bridge.ReactApplicationContext
6+
import com.facebook.react.uimanager.ViewManager
7+
import java.util.ArrayList
8+
9+
class <%- project.name -%>ViewPackage : ReactPackage {
10+
override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
11+
val viewManagers: MutableList<ViewManager<*, *>> = ArrayList()
12+
viewManagers.add(<%- project.name -%>ViewManager())
13+
return viewManagers
14+
}
15+
16+
override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
17+
return emptyList()
18+
}
19+
}

0 commit comments

Comments
 (0)