@@ -11,15 +11,17 @@ import animationData from "./animationData.json";
1111// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
1212ReactDOM . createRoot ( document . getElementById ( "root" ) ! ) . render (
1313 < React . StrictMode >
14- < LocalDevelopment />
15- { /* <LocalDevelopmentComponent /> */ }
14+ < div style = { { display : "flex" , justifyContent : "center" } } >
15+ < AnimationDebugger />
16+ < ParentChangesDebugger />
17+ </ div >
1618 </ React . StrictMode >
1719) ;
1820
1921const lightToDarkSegment : AnimationSegment = [ 5 , 50 ] ;
2022const darkToLightSegment : AnimationSegment = [ 50 , 95 ] ;
2123
22- function LocalDevelopment ( ) {
24+ function AnimationDebugger ( ) {
2325 const [ segmentFrom , setSegmentFrom ] = React . useState ( lightToDarkSegment [ 0 ] ) ;
2426 const [ segmentTo , setSegmentTo ] = React . useState ( lightToDarkSegment [ 1 ] ) ;
2527 const [ segmentsEnabled , setSegmentsEnabled ] = React . useState ( true ) ;
@@ -44,12 +46,6 @@ function LocalDevelopment() {
4446 // Used to prevent an initial flicker of incorrect state
4547 const [ isLottiePlayerMounted , setIsLottiePlayerMounted ] = React . useState < boolean > ( false ) ;
4648
47- const onToggleDarkModeState = ( ) => {
48- setSegmentFrom ( ! isDarkMode ? lightToDarkSegment [ 0 ] : darkToLightSegment [ 0 ] ) ;
49- setSegmentTo ( ! isDarkMode ? lightToDarkSegment [ 1 ] : darkToLightSegment [ 1 ] ) ;
50- setPlayAnimation ( true ) ;
51- } ;
52-
5349 const onToggleClick = ( ) => {
5450 setSegmentFrom ( ! isDarkMode ? lightToDarkSegment [ 0 ] : darkToLightSegment [ 0 ] ) ;
5551 setSegmentTo ( ! isDarkMode ? lightToDarkSegment [ 1 ] : darkToLightSegment [ 1 ] ) ;
@@ -83,6 +79,9 @@ function LocalDevelopment() {
8379 flexDirection : "column" ,
8480 } }
8581 >
82+ < h3 style = { { marginTop : 0 , marginBottom : 16 , display : "flex" , justifyContent : "center" } } >
83+ Animation Debugger
84+ </ h3 >
8685 < button
8786 onClick = { onToggleClick }
8887 aria-hidden = "true"
@@ -238,13 +237,11 @@ function LocalDevelopment() {
238237 ) ;
239238}
240239
241- function LocalDevelopmentComponent ( ) {
240+ function ParentChangesDebugger ( ) {
242241 const [ isDarkMode , setIsDarkMode ] = React . useState ( true ) ;
242+
243243 return (
244244 < div
245- // Uncomment to test useEffect handler for external state change
246- // This will make any click in the page change the isDarkMode state
247- // onClick={() => setIsDarkMode(!isDarkMode)}
248245 style = { {
249246 display : "flex" ,
250247 justifyContent : "center" ,
@@ -265,7 +262,50 @@ function LocalDevelopmentComponent() {
265262 flexDirection : "column" ,
266263 } }
267264 >
268- < DarkModeToggle isDarkMode = { isDarkMode } onChange = { setIsDarkMode } />
265+ < h3
266+ style = { {
267+ marginTop : 0 ,
268+ marginBottom : 16 ,
269+ display : "flex" ,
270+ justifyContent : "center" ,
271+ } }
272+ >
273+ Parent Changes Debugger
274+ </ h3 >
275+
276+ < div
277+ style = { {
278+ marginBottom : 5 ,
279+ display : "flex" ,
280+ gap : 10 ,
281+ } }
282+ >
283+ < label htmlFor = "parentState" > Parent state:</ label >
284+ < div id = "parentState" style = { { fontStyle : "italic" } } >
285+ { isDarkMode ? "dark" : "light" }
286+ </ div >
287+ </ div >
288+ < button
289+ style = { {
290+ marginBottom : 5 ,
291+ gap : 10 ,
292+ borderRadius : "6px" ,
293+ } }
294+ onClick = { ( ) => setIsDarkMode ( ! isDarkMode ) }
295+ >
296+ Change parent state
297+ </ button >
298+ < fieldset
299+ style = { {
300+ border : "1px solid black" ,
301+
302+ display : "flex" ,
303+ justifyContent : "center" ,
304+ } }
305+ >
306+ < legend > Child Component</ legend >
307+ < DarkModeToggle isDarkMode = { isDarkMode } onChange = { setIsDarkMode } />
308+ </ fieldset >
269309 </ div >
270310 </ div >
271311 ) ;
0 commit comments