Skip to content

Commit 58a21d3

Browse files
feat: add nitro view template
1 parent e5c386c commit 58a21d3

File tree

14 files changed

+171
-19
lines changed

14 files changed

+171
-19
lines changed

packages/create-react-native-library/templates/common/$.github/workflows/ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ jobs:
6161

6262
- name: Setup
6363
uses: ./.github/actions/setup
64-
<% if (project.moduleConfig === 'nitro-modules') { -%>
64+
<% if (project.moduleConfig === 'nitro-modules' || project.viewConfig === 'nitro-view') { -%>
6565

6666
- name: Generate nitrogen code
6767
run: yarn nitrogen
@@ -122,7 +122,7 @@ jobs:
122122

123123
- name: Setup
124124
uses: ./.github/actions/setup
125-
<% if (project.moduleConfig === 'nitro-modules') { -%>
125+
<% if (project.moduleConfig === 'nitro-modules' || project.viewConfig === 'nitro-view') { -%>
126126

127127
- name: Generate nitrogen code
128128
run: yarn nitrogen

packages/create-react-native-library/templates/common/$package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
"clean": "del-cli lib",
5353
<% } -%>
5454
"prepare": "bob build",
55-
<% if (project.moduleConfig === 'nitro-modules') { -%>
55+
<% if (project.moduleConfig === 'nitro-modules' || project.viewConfig === 'nitro-view') { -%>
5656
"nitrogen": "nitro-codegen",
5757
<% } -%>
5858
"release": "release-it"
@@ -91,14 +91,14 @@
9191
"eslint-config-prettier": "^9.0.0",
9292
"eslint-plugin-prettier": "^5.0.1",
9393
"jest": "^29.7.0",
94-
<% if (project.moduleConfig === 'nitro-modules') { -%>
94+
<% if (project.moduleConfig === 'nitro-modules' || project.viewConfig === 'nitro-view') { -%>
9595
"nitro-codegen": "^<%- versions.nitroCodegen %>",
9696
<% } -%>
9797
"prettier": "^3.0.3",
9898
"react": "17.0.2",
9999
"react-native": "0.73.0",
100100
"react-native-builder-bob": "^<%- versions.bob %>",
101-
<% if (project.moduleConfig === 'nitro-modules') { -%>
101+
<% if (project.moduleConfig === 'nitro-modules' || project.viewConfig === 'nitro-view') { -%>
102102
"react-native-nitro-modules": "^<%- versions.nitroModules %>",
103103
<% } -%>
104104
"release-it": "^17.10.0",
@@ -112,7 +112,7 @@
112112
},
113113
"peerDependencies": {
114114
"react": "*",
115-
<% if (project.moduleConfig === 'nitro-modules') { -%>
115+
<% if (project.moduleConfig === 'nitro-modules' || project.viewConfig === 'nitro-view') { -%>
116116
"react-native": "*",
117117
"react-native-nitro-modules": "^<%- versions.nitroModules %>"
118118
<% } else { -%>
@@ -191,7 +191,7 @@
191191
"source": "src",
192192
"output": "lib",
193193
"targets": [
194-
<% if (project.moduleConfig === "nitro-modules") { -%>
194+
<% if (project.moduleConfig === "nitro-modules" || project.viewConfig === "nitro-view") { -%>
195195
[
196196
"custom",
197197
{

packages/create-react-native-library/templates/common/CONTRIBUTING.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,14 @@ yarn
1818
```
1919

2020
> Since the project relies on Yarn workspaces, you cannot use [`npm`](https://github.com/npm/cli) for development.
21-
<% if (project.moduleConfig === 'nitro-modules') { -%>
21+
> <% if (project.moduleConfig === 'nitro-modules' || project.viewConfig === 'nitro-view') { -%>
2222
2323
This project uses Nitro Modules. If you're not familiar with how Nitro works, make sure to check the [Nitro Modules Docs](https://nitro.margelo.com/).
2424

2525
You need to run [Nitrogen](https://nitro.margelo.com/docs/nitrogen) to generate the boilerplate code required for this project. The example app will not build without this step.
2626

2727
Run **Nitrogen** in following cases:
28+
2829
- When you make changes to any `*.nitro.ts` files.
2930
- When running the project for the first time (since the generated files are not committed to the repository).
3031

@@ -33,6 +34,7 @@ To invoke **Nitrogen**, use the following command:
3334
```sh
3435
yarn nitrogen
3536
```
37+
3638
<% } -%>
3739

3840
The [example app](/example/) demonstrates usage of the library. You need to run it to test any changes you make.

packages/create-react-native-library/templates/common/README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,20 @@
44

55
## Installation
66

7-
<% if (project.moduleConfig === 'nitro-modules') { -%>
7+
<% if (project.moduleConfig === 'nitro-modules' || project.viewConfig === 'nitro-view') { -%>
8+
89
```sh
910
npm install <%- project.slug %> react-native-nitro-modules
1011

1112
> `react-native-nitro-modules` is required as this library relies on [Nitro Modules](https://nitro.margelo.com/).
1213
```
14+
1315
<% } else { -%>
16+
1417
```sh
1518
npm install <%- project.slug %>
1619
```
20+
1721
<% } -%>
1822

1923
## Usage
@@ -28,7 +32,7 @@ import { <%- project.name -%>View } from "<%- project.slug -%>";
2832
<<%- project.name -%>View color="tomato" />
2933
```
3034

31-
<% } else if (project.moduleConfig === 'nitro-modules' || project.moduleConfig === 'turbo-modules') { -%>
35+
<% } else if (project.moduleConfig === 'nitro-modules' || project.viewConfig === 'nitro-view' || project.moduleConfig === 'turbo-modules') { -%>
3236

3337
```js
3438
import { multiply } from '<%- project.slug -%>';

packages/create-react-native-library/templates/native-common/android/build.gradle

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ buildscript {
1515
}
1616
}
1717

18-
<% if (project.cpp || project.moduleConfig === 'nitro-modules') { -%>
18+
<% if (project.cpp || project.moduleConfig === 'nitro-modules' || project.viewConfig === 'nitro-view') { -%>
1919
def reactNativeArchitectures() {
2020
def value = rootProject.getProperties().get("reactNativeArchitectures")
2121
return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
@@ -24,7 +24,7 @@ def reactNativeArchitectures() {
2424

2525
apply plugin: "com.android.library"
2626
apply plugin: "kotlin-android"
27-
<% if (project.moduleConfig === 'nitro-modules') { -%>
27+
<% if (project.moduleConfig === 'nitro-modules' || project.viewConfig === 'nitro-view') { -%>
2828
apply from: '../nitrogen/generated/android/<%- project.package_cpp -%>+autolinking.gradle'
2929
<% } -%>
3030

@@ -47,7 +47,7 @@ def supportsNamespace() {
4747

4848
android {
4949
if (supportsNamespace()) {
50-
<% if (project.moduleConfig === 'nitro-modules') { -%>
50+
<% if (project.moduleConfig === 'nitro-modules' || project.viewConfig === 'nitro-view') { -%>
5151
namespace "com.margelo.nitro.<%- project.package -%>"
5252
<% } else { -%>
5353
namespace "com.<%- project.package -%>"
@@ -68,7 +68,7 @@ android {
6868
defaultConfig {
6969
minSdkVersion getExtOrIntegerDefault("minSdkVersion")
7070
targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
71-
<% if (project.cpp || project.moduleConfig === 'nitro-modules') { -%>
71+
<% if (project.cpp || project.moduleConfig === 'nitro-modules' || project.viewConfig === 'nitro-view') { -%>
7272

7373
externalNativeBuild {
7474
cmake {
@@ -88,15 +88,15 @@ android {
8888
}
8989
<% } -%>
9090
}
91-
<% if (project.cpp || project.moduleConfig === 'nitro-modules') { -%>
91+
<% if (project.cpp || project.moduleConfig === 'nitro-modules' || project.viewConfig === 'nitro-view') { -%>
9292

9393
externalNativeBuild {
9494
cmake {
9595
path "CMakeLists.txt"
9696
}
9797
}
9898
<% } -%>
99-
<% if (project.moduleConfig === 'nitro-modules') { -%>
99+
<% if (project.moduleConfig === 'nitro-modules' || project.viewConfig === 'nitro-view') { -%>
100100

101101
packagingOptions {
102102
excludes = [
@@ -123,7 +123,7 @@ android {
123123

124124
buildFeatures {
125125
buildConfig true
126-
<% if (project.moduleConfig === 'nitro-modules') { -%>
126+
<% if (project.moduleConfig === 'nitro-modules' || project.viewConfig === 'nitro-view') { -%>
127127
prefab true
128128
<% } -%>
129129
}
@@ -166,7 +166,7 @@ def kotlin_version = getExtOrDefault("kotlinVersion")
166166
dependencies {
167167
implementation "com.facebook.react:react-android"
168168
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
169-
<% if (project.moduleConfig === 'nitro-modules') { -%>
169+
<% if (project.moduleConfig === 'nitro-modules' || project.viewConfig === 'nitro-view') { -%>
170170
implementation project(":react-native-nitro-modules")
171171
<% } -%>
172172
}

packages/create-react-native-library/templates/native-common/{%- project.name %}.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Pod::Spec.new do |s|
2323
<% } else { -%>
2424
s.source_files = "ios/**/*.{h,m,mm}"
2525
<% } -%>
26-
<% if (project.moduleConfig === "nitro-modules") { -%>
26+
<% if (project.moduleConfig === "nitro-modules" || project.viewConfig === "nitro-view") { -%>
2727
2828
load 'nitrogen/generated/ios/<%- project.name -%>+autolinking.rb'
2929
add_nitrogen_files(s)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
project(<%- project.package_cpp -%>)
2+
cmake_minimum_required(VERSION 3.9.0)
3+
4+
set(PACKAGE_NAME <%- project.package_cpp -%>)
5+
set(CMAKE_VERBOSE_MAKEFILE ON)
6+
set(CMAKE_CXX_STANDARD 20)
7+
8+
# Define C++ library and add all sources
9+
add_library(${PACKAGE_NAME} SHARED src/main/cpp/cpp-adapter.cpp)
10+
11+
# Add Nitrogen specs :)
12+
include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/<%- project.package_cpp -%>+autolinking.cmake)
13+
14+
# Set up local includes
15+
include_directories("src/main/cpp" "../cpp")
16+
17+
find_library(LOG_LIB log)
18+
19+
# Link all libraries together
20+
target_link_libraries(
21+
${PACKAGE_NAME}
22+
${LOG_LIB}
23+
android # <-- Android core
24+
)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#include <jni.h>
2+
#include "<%- project.package_cpp -%>OnLoad.hpp"
3+
4+
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {
5+
return margelo::nitro::<%- project.package_cpp -%>::initialize(vm);
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.margelo.nitro.<%- project.package %>
2+
3+
import android.view.View
4+
import com.facebook.proguard.annotations.DoNotStrip
5+
import com.facebook.react.uimanager.ThemedReactContext
6+
import androidx.core.graphics.toColorInt
7+
8+
@DoNotStrip
9+
class Hybrid<%- project.name %>(val context: ThemedReactContext) : Hybrid<%- project.name %>Spec() {
10+
11+
// View
12+
override val view: View = View(context)
13+
14+
// Props
15+
private var _color = "#000"
16+
override var color: String
17+
get() = _color
18+
set(value) {
19+
_color = value
20+
val color = value.toColorInt()
21+
view.setBackgroundColor(color)
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.<%- project.package %>
2+
3+
import com.facebook.react.TurboReactPackage
4+
import com.facebook.react.bridge.NativeModule
5+
import com.facebook.react.bridge.ReactApplicationContext
6+
import com.facebook.react.module.model.ReactModuleInfoProvider
7+
import com.facebook.react.uimanager.ViewManager
8+
import com.margelo.nitro.<%- project.package_cpp -%>.views.Hybrid<%- project.name -%>Manager
9+
10+
class <%- project.name -%>Package : TurboReactPackage() {
11+
override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
12+
return null
13+
}
14+
15+
override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
16+
return ReactModuleInfoProvider { HashMap() }
17+
}
18+
19+
override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
20+
return listOf(Hybrid<%- project.name -%>Manager())
21+
}
22+
23+
companion object {
24+
init {
25+
System.loadLibrary("<%- project.package_cpp -%>")
26+
}
27+
}
28+
}

0 commit comments

Comments
 (0)