Skip to content

Commit 789cabd

Browse files
committed
chore: add nitrogen postprocess to make HybridRiveViewManager open
Nitro 0.35 generates final ViewManager classes, preventing onDropViewInstance override needed for view lifecycle cleanup. Added a postprocess script to patch the generated class as open.
1 parent d00394a commit 789cabd

File tree

8 files changed

+37
-2
lines changed

8 files changed

+37
-2
lines changed

example/assets/rive/counter.riv

857 KB
Binary file not shown.

expo-example/app/[pageId].tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import '@example/polyfills';
12
import { useLocalSearchParams, Stack } from 'expo-router';
23
import { PagesList, type PageItem } from '@example/PagesList';
34
import { View, Text, StyleSheet } from 'react-native';

expo-example/app/_layout.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import '@example/polyfills';
12
import {
23
DarkTheme,
34
DefaultTheme,

expo-example/app/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import '@example/polyfills';
12
import { useEffect, useState } from 'react';
23
import { StyleSheet, TouchableOpacity } from 'react-native';
34
import { useRouter } from 'expo-router';

expo-example/components/ui/icon-symbol.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ const MAPPING = {
2525
'paperplane.fill': 'send',
2626
'chevron.left.forwardslash.chevron.right': 'code',
2727
'chevron.right': 'chevron-right',
28+
'wrench.fill': 'build',
2829
} as IconMapping;
2930

3031
/**

nitrogen/generated/android/kotlin/com/margelo/nitro/rive/views/HybridRiveViewManager.kt

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
"lint": "eslint \"**/*.{js,ts,tsx}\"",
4040
"clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib",
4141
"prepare": "npx react-native-builder-bob@^0.40.0 build",
42-
"nitrogen": "nitrogen",
42+
"nitrogen": "nitrogen && npx tsx scripts/nitrogen-postprocess.ts",
4343
"release": "release-it",
4444
"dev:ios": "cd example && xed ios",
4545
"dev:android": "cd example && open -a \"/Applications/Android Studio.app\" ./android",

scripts/nitrogen-postprocess.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { readFileSync, writeFileSync, existsSync } from 'fs';
2+
import { join } from 'path';
3+
4+
const ROOT = join(__dirname, '..');
5+
const MANAGER_FILE = join(
6+
ROOT,
7+
'nitrogen/generated/android/kotlin/com/margelo/nitro/rive/views/HybridRiveViewManager.kt'
8+
);
9+
10+
function makeHybridRiveViewManagerOpen() {
11+
if (!existsSync(MANAGER_FILE)) {
12+
console.warn('HybridRiveViewManager.kt not found, skipping');
13+
return;
14+
}
15+
16+
const content = readFileSync(MANAGER_FILE, 'utf-8');
17+
const updated = content.replace(
18+
'public class HybridRiveViewManager',
19+
'public open class HybridRiveViewManager'
20+
);
21+
22+
if (content === updated) {
23+
console.log('HybridRiveViewManager is already open');
24+
return;
25+
}
26+
27+
writeFileSync(MANAGER_FILE, updated);
28+
console.log('Made HybridRiveViewManager open');
29+
}
30+
31+
makeHybridRiveViewManagerOpen();

0 commit comments

Comments
 (0)