1- import React , { useState } from 'react' ;
1+ import React , { useState , useCallback } from 'react' ;
22
33import { ScrollView , StyleSheet , Text , View } from 'react-native' ;
44import { SafeAreaProvider , SafeAreaView } from 'react-native-safe-area-context' ;
@@ -7,28 +7,28 @@ import Methods from './Methods';
77import Getters from './Getters' ;
88import Setters from './Setters' ;
99import { TestEvent } from './Types' ;
10+ import ErrorBoundary from './ErrorBoundary' ;
1011
1112function App ( ) {
1213 const MAX_EVENTS_DISPLAYED = 3 ;
1314
1415 const [ receivedEvents , setReceivedEvents ] = useState < TestEvent [ ] > ( [ ] ) ;
1516
16- function pushReceivedEvent ( event : TestEvent ) {
17- receivedEvents . push ( event ) ;
18- if ( receivedEvents . length > MAX_EVENTS_DISPLAYED ) {
19- receivedEvents . shift ( ) ;
20- }
21- setReceivedEvents ( [
22- ...receivedEvents
23- ] ) ;
24- }
17+ const pushReceivedEvent = useCallback ( ( event : TestEvent ) => {
18+ setReceivedEvents ( prevEvents => {
19+ const newEvents = [ ...prevEvents , event ] ;
20+ return newEvents . length > MAX_EVENTS_DISPLAYED
21+ ? newEvents . slice ( - MAX_EVENTS_DISPLAYED )
22+ : newEvents ;
23+ } ) ;
24+ } , [ MAX_EVENTS_DISPLAYED ] ) ;
2525
26- const registerListener = ( eventType : DidomiEventType ) => {
26+ const registerListener = useCallback ( ( eventType : DidomiEventType ) => {
2727 Didomi . addEventListener ( eventType , ( data : any ) => {
2828 pushReceivedEvent ( { name : eventType , data } ) ;
2929 console . log ( 'event received: ' + eventType ) ;
3030 } ) ;
31- } ;
31+ } , [ pushReceivedEvent ] ) ;
3232
3333 React . useEffect ( ( ) => {
3434 Didomi . removeAllEventListeners ( ) ;
@@ -74,23 +74,11 @@ function App() {
7474 console . log ( 'error' ) ;
7575 } ) ;
7676
77- /*Didomi.addEventListener(DidomiEventType.READY, (data: any) => {
78- setReceivedEvent({ name: DidomiEventType.READY, data });
79- console.log("I'm ready");
80- });
81-
82- Didomi.addEventListener(DidomiEventType.SHOW_NOTICE, (data: any) => {
83- setReceivedEvent({ name: DidomiEventType.SHOW_NOTICE, data });
84- console.log('Show notice');
85- });
86-
87- Didomi.addEventListener(DidomiEventType.CONSENT_CHANGED, (data: any) => {
88- setReceivedEvent({ name: DidomiEventType.CONSENT_CHANGED, data });
89- console.log('Consent changed');
90- });*/
91-
92- // eslint-disable-next-line react-hooks/exhaustive-deps
93- } , [ ] ) ;
77+ // Cleanup on unmount
78+ return ( ) => {
79+ Didomi . removeAllEventListeners ( ) ;
80+ } ;
81+ } , [ registerListener ] ) ;
9482
9583 function displayEvents ( ) {
9684 return receivedEvents . map ( ( event ) => {
@@ -102,26 +90,28 @@ function App() {
10290 }
10391
10492 return (
105- < SafeAreaProvider >
106- < SafeAreaView style = { { flex : 1 } } >
107- < View style = { styles . title } >
108- < Text style = { styles . title } >
109- LAST RECEIVED EVENTS:
110- { displayEvents ( ) }
111- </ Text >
112- </ View >
113- < ScrollView >
114- < View style = { styles . container } >
115- < Text style = { styles . title } > METHODS</ Text >
116- < Methods />
117- < Text style = { styles . title } > GETTERS</ Text >
118- < Getters />
119- < Text style = { styles . title } > SETTERS</ Text >
120- < Setters />
93+ < ErrorBoundary >
94+ < SafeAreaProvider >
95+ < SafeAreaView style = { { flex : 1 } } >
96+ < View style = { styles . title } >
97+ < Text style = { styles . title } >
98+ LAST RECEIVED EVENTS:
99+ { displayEvents ( ) }
100+ </ Text >
121101 </ View >
122- </ ScrollView >
123- </ SafeAreaView >
124- </ SafeAreaProvider >
102+ < ScrollView >
103+ < View style = { styles . container } >
104+ < Text style = { styles . title } > METHODS</ Text >
105+ < Methods />
106+ < Text style = { styles . title } > GETTERS</ Text >
107+ < Getters />
108+ < Text style = { styles . title } > SETTERS</ Text >
109+ < Setters />
110+ </ View >
111+ </ ScrollView >
112+ </ SafeAreaView >
113+ </ SafeAreaProvider >
114+ </ ErrorBoundary >
125115 ) ;
126116}
127117
0 commit comments