Last active
October 4, 2025 15:01
-
-
Save oriSomething/83e54e1ebf30f69bd83e4513eb8453bf to your computer and use it in GitHub Desktop.
Revisions
-
oriSomething revised this gist
Oct 4, 2025 . 1 changed file with 55 additions and 55 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,58 +1,58 @@ import { use, useEffect, useState } from "react"; export function createUseService<T>(loader: () => Promise<T>) { let state: number = 0; let listeners = new Set<(state: number) => void>(); let promise: Promise<T> | undefined; function listenToPromise(promise: Promise<T>) { state = 1; promise.then( () => { state = 2; listeners.forEach((cb) => cb(state)); }, () => { state = 3; listeners.forEach((cb) => cb(state)); } ); } function useService() { if (promise === undefined) { listenToPromise((promise = loader())); } return use(promise); } function useIsServiceLoaded() { const [localState, setLocalState] = useState(state); useEffect(() => { listeners.add(setLocalState); return () => listeners.delete(setLocalState); }, []); return localState === 2 || localState === 3; } function useIsServiceFailed() { const [localState, setLocalState] = useState(state); useEffect(() => { listeners.add(setLocalState); return () => listeners.delete(setLocalState); }, []); return localState === 3; } return { useService, useIsServiceLoaded, useIsServiceFailed, }; } -
oriSomething revised this gist
Oct 4, 2025 . 1 changed file with 0 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -25,11 +25,9 @@ export function createUseService<T>(loader: () => Promise<T>) { listenToPromise((promise = loader())); } return use(promise); } function useIsServiceLoaded() { const [localState, setLocalState] = useState(state); -
oriSomething created this gist
Oct 4, 2025 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,60 @@ import { use, useEffect, useState } from "react"; export function createUseService<T>(loader: () => Promise<T>) { let state: number = 0; let listeners = new Set<(state: number) => void>(); let promise: Promise<T> | undefined; function listenToPromise(promise: Promise<T>) { state = 1; promise.then( () => { state = 2; listeners.forEach((cb) => cb(state)); }, () => { state = 3; listeners.forEach((cb) => cb(state)); } ); } function useService() { if (promise === undefined) { listenToPromise((promise = loader())); } return use(promise); } function useIsServiceLoaded() { const [localState, setLocalState] = useState(state); useEffect(() => { listeners.add(setLocalState); return () => listeners.delete(setLocalState); }, []); return localState === 2 || localState === 3; } function useIsServiceFailed() { const [localState, setLocalState] = useState(state); useEffect(() => { listeners.add(setLocalState); return () => listeners.delete(setLocalState); }, []); return localState === 3; } return { useService, useIsServiceLoaded, useIsServiceFailed, }; }