createTimeSource: reflects to the pagevisibility
This commit is contained in:
		
							parent
							
								
									d1c073e33e
								
							
						
					
					
						commit
						81bf27df63
					
				
					 3 changed files with 22 additions and 9 deletions
				
			
		| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
import { usePageVisibility } from "@solid-primitives/page-visibility";
 | 
			
		||||
import {
 | 
			
		||||
  Accessor,
 | 
			
		||||
  createContext,
 | 
			
		||||
| 
						 | 
				
			
			@ -15,19 +16,30 @@ export const TimeSourceProvider = TimeSourceContext.Provider;
 | 
			
		|||
export function createTimeSource() {
 | 
			
		||||
  let id: ReturnType<typeof setTimeout> | undefined;
 | 
			
		||||
  const [get, set] = createSignal(new Date());
 | 
			
		||||
  const visible = usePageVisibility();
 | 
			
		||||
 | 
			
		||||
  createRenderEffect(() =>
 | 
			
		||||
    untrack(() => {
 | 
			
		||||
      id = setTimeout(() => {
 | 
			
		||||
        set(new Date());
 | 
			
		||||
      }, 30 * 1000);
 | 
			
		||||
    }),
 | 
			
		||||
  );
 | 
			
		||||
 | 
			
		||||
  onCleanup(() => {
 | 
			
		||||
  const cancelTimer = () => {
 | 
			
		||||
    if (typeof id !== "undefined") {
 | 
			
		||||
      clearInterval(id);
 | 
			
		||||
    }
 | 
			
		||||
    id = undefined;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  const resetTimer = () => {
 | 
			
		||||
    cancelTimer();
 | 
			
		||||
    set(new Date());
 | 
			
		||||
    id = setTimeout(() => {
 | 
			
		||||
      set(new Date());
 | 
			
		||||
    }, 30 * 1000); // refresh rate: 30s
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  createRenderEffect(() => {
 | 
			
		||||
    onCleanup(cancelTimer);
 | 
			
		||||
    if (visible()) {
 | 
			
		||||
      resetTimer();
 | 
			
		||||
    } else {
 | 
			
		||||
      console.debug("createTimeSource: page is invisible, cancel the timer")
 | 
			
		||||
    }
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  return get;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue