MCPcopy Create free account
hub / github.com/anus-dev/ANUS / useLoadingIndicator

Function useLoadingIndicator

packages/cli/src/ui/hooks/useLoadingIndicator.ts:13–58  ·  view source on GitHub ↗
(streamingState: StreamingState)

Source from the content-addressed store, hash-verified

11import { useState, useEffect, useRef } from 'react'; // Added useRef
12
13export const useLoadingIndicator = (streamingState: StreamingState) => {
14 const [timerResetKey, setTimerResetKey] = useState(0);
15 const isTimerActive = streamingState === StreamingState.Responding;
16
17 const elapsedTimeFromTimer = useTimer(isTimerActive, timerResetKey);
18
19 const isPhraseCyclingActive = streamingState === StreamingState.Responding;
20 const isWaiting = streamingState === StreamingState.WaitingForConfirmation;
21 const currentLoadingPhrase = usePhraseCycler(
22 isPhraseCyclingActive,
23 isWaiting,
24 );
25
26 const [retainedElapsedTime, setRetainedElapsedTime] = useState(0);
27 const prevStreamingStateRef = useRef<StreamingState | null>(null);
28
29 useEffect(() => {
30 if (
31 prevStreamingStateRef.current === StreamingState.WaitingForConfirmation &&
32 streamingState === StreamingState.Responding
33 ) {
34 setTimerResetKey((prevKey) => prevKey + 1);
35 setRetainedElapsedTime(0); // Clear retained time when going back to responding
36 } else if (
37 streamingState === StreamingState.Idle &&
38 prevStreamingStateRef.current === StreamingState.Responding
39 ) {
40 setTimerResetKey((prevKey) => prevKey + 1); // Reset timer when becoming idle from responding
41 setRetainedElapsedTime(0);
42 } else if (streamingState === StreamingState.WaitingForConfirmation) {
43 // Capture the time when entering WaitingForConfirmation
44 // elapsedTimeFromTimer will hold the last value from when isTimerActive was true.
45 setRetainedElapsedTime(elapsedTimeFromTimer);
46 }
47
48 prevStreamingStateRef.current = streamingState;
49 }, [streamingState, elapsedTimeFromTimer]);
50
51 return {
52 elapsedTime:
53 streamingState === StreamingState.WaitingForConfirmation
54 ? retainedElapsedTime
55 : elapsedTimeFromTimer,
56 currentLoadingPhrase,
57 };
58};

Callers 2

AppFunction · 0.85

Calls 2

useTimerFunction · 0.85
usePhraseCyclerFunction · 0.85

Tested by

no test coverage detected