Skip to content

Commit 611fa1b

Browse files
committed
chore: refactor examples to have metadata in each example
1 parent 964183a commit 611fa1b

20 files changed

Lines changed: 267 additions & 78 deletions

eslint.config.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export default defineConfig([
2020
plugins: { prettier },
2121
rules: {
2222
'react/react-in-jsx-scope': 'off',
23+
'@typescript-eslint/no-unused-vars': 'off',
2324
'prettier/prettier': [
2425
'error',
2526
{

example/src/pages/OutOfBandAssets.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import {
1313
RiveView,
1414
} from 'react-native-rive';
1515
import { Picker } from '@react-native-picker/picker';
16+
import { type Metadata } from './metadata';
1617

1718
export default function StateMachine() {
1819
const [uri, setUri] = React.useState('https://picsum.photos/id/372/500/500');
@@ -142,3 +143,9 @@ const styles = StyleSheet.create({
142143
alignSelf: 'stretch',
143144
},
144145
});
146+
147+
StateMachine.metadata = {
148+
name: 'Out-of-Band Assets',
149+
description:
150+
'Shows how to load referenced assets like fonts and images that are not embedded in the Rive file',
151+
} satisfies Metadata;

example/src/pages/RiveDataBindingExample.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
useRiveTrigger,
1313
useRiveFile,
1414
} from 'react-native-rive';
15+
import { type Metadata } from './metadata';
1516

1617
export default function WithRiveFile() {
1718
const { riveFile, isLoading, error } = useRiveFile(
@@ -113,6 +114,12 @@ function DataBindingExample({
113114
);
114115
}
115116

117+
WithRiveFile.metadata = {
118+
name: 'Data Binding',
119+
description:
120+
'Shows data binding with view models, including number, string, color properties and triggers',
121+
} satisfies Metadata;
122+
116123
const styles = StyleSheet.create({
117124
container: {
118125
flex: 1,

example/src/pages/RiveEventsExample.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
type RiveEvent,
99
RiveEventType,
1010
} from 'react-native-rive';
11+
import { type Metadata } from './metadata';
1112

1213
export default function EventsExample() {
1314
const { riveViewRef, setHybridRef } = useRive();
@@ -140,3 +141,8 @@ const styles = StyleSheet.create({
140141
marginBottom: 5,
141142
},
142143
});
144+
145+
EventsExample.metadata = {
146+
name: 'Events',
147+
description: 'Demonstrates how to listen to and handle Rive events',
148+
} satisfies Metadata;

example/src/pages/RiveFileLoadingExample.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
} from 'react-native-rive';
1515
import { useState, useEffect } from 'react';
1616
import { downloadFileAsArrayBuffer } from '../helpers/fileHelpers';
17+
import { type Metadata } from './metadata';
1718

1819
const LOADING_METHODS = {
1920
SOURCE: 'Source',
@@ -141,6 +142,12 @@ export default function RiveFileLoadingExample() {
141142
);
142143
}
143144

145+
RiveFileLoadingExample.metadata = {
146+
name: 'File Loading',
147+
description:
148+
'Demonstrates different methods to load Rive files: from source, URL, resource, and ArrayBuffer',
149+
} satisfies Metadata;
150+
144151
const styles = StyleSheet.create({
145152
container: {
146153
flex: 1,

example/src/pages/RiveStateMachineInputsExample.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { View, Text, StyleSheet, ActivityIndicator } from 'react-native';
22
import { useEffect } from 'react';
33
import { Fit, RiveView, useRive, useRiveFile } from 'react-native-rive';
4+
import { type Metadata } from './metadata';
45

56
export default function StateMachineInputsExample() {
67
const { riveViewRef, setHybridRef } = useRive();
@@ -82,3 +83,9 @@ const styles = StyleSheet.create({
8283
padding: 20,
8384
},
8485
});
86+
87+
StateMachineInputsExample.metadata = {
88+
name: 'State Machine Inputs',
89+
description:
90+
'Shows how to get and set state machine input values programmatically',
91+
} satisfies Metadata;

example/src/pages/RiveTextRunExample.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { View, Text, StyleSheet, ActivityIndicator } from 'react-native';
22
import { useEffect } from 'react';
33
import { Fit, RiveView, useRive, useRiveFile } from 'react-native-rive';
4+
import { type Metadata } from './metadata';
45

56
export default function TextRunExample() {
67
const { riveViewRef, setHybridRef } = useRive();
@@ -79,3 +80,9 @@ const styles = StyleSheet.create({
7980
padding: 20,
8081
},
8182
});
83+
84+
TextRunExample.metadata = {
85+
name: 'Text Run',
86+
description:
87+
'Demonstrates getting and setting text run values in Rive animations',
88+
} satisfies Metadata;

example/src/pages/TemplatePage.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { View, Text, StyleSheet } from 'react-native';
2+
import { type Metadata } from './metadata';
23

34
export default function TemplatePage() {
45
return (
@@ -9,6 +10,11 @@ export default function TemplatePage() {
910
);
1011
}
1112

13+
TemplatePage.metadata = {
14+
name: 'Template',
15+
description: 'A template page for creating new Rive examples',
16+
} satisfies Metadata;
17+
1218
const styles = StyleSheet.create({
1319
container: {
1420
flex: 1,

example/src/pages/index.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import type { Metadata } from './metadata';
2+
import * as Pages from './pages';
3+
4+
type PageIds = keyof typeof Pages;
5+
type PageType = React.ComponentType & { metadata?: Metadata };
6+
7+
const PageEntries = Object.entries(Pages) as [PageIds, PageType][];
8+
9+
export type PageItem = {
10+
id: PageIds;
11+
name: string;
12+
description: string;
13+
component: React.ComponentType;
14+
};
15+
16+
const PagesList: PageItem[] = PageEntries.map(([key, Component]) => ({
17+
id: key,
18+
name: Component.metadata?.name ?? key,
19+
description: Component.metadata?.description ?? '',
20+
component: Component,
21+
}));
22+
23+
export { PagesList };

example/src/pages/metadata.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export type Metadata = {
2+
name: string;
3+
description: string;
4+
};

0 commit comments

Comments
 (0)