Skip to content

Instantly share code, notes, and snippets.

@thebiltheory
Created December 11, 2023 06:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thebiltheory/56be47a947a2ff2a1420d035c5cf4a80 to your computer and use it in GitHub Desktop.
Save thebiltheory/56be47a947a2ff2a1420d035c5cf4a80 to your computer and use it in GitHub Desktop.
import {useState, useEffect} from 'react';
// Define a type for the prerequisite check function
type PrerequisiteCheck = () => Promise<any>;
export default function useUserPrerequisites(
prerequisiteChecks: PrerequisiteCheck[] = [],
) {
const [userHasPrerequisite, setUserHasPrerequisites] = useState(false);
const [isLoading, setIsLoading] = useState(true);
useEffect(() => {
const checkPrerequisites = async () => {
try {
setIsLoading(true);
// Run all prerequisite checks
const results = await Promise.all(
prerequisiteChecks.map((check) => check()),
);
// Determine if all prerequisites are met
const allPrerequisitesMet = results.every((result) => result === true);
setUserHasPrerequisites(allPrerequisitesMet);
} catch (error) {
console.error('Error checking prerequisites', error);
// Handle error, potentially setting prerequisites to false
} finally {
setIsLoading(false);
}
};
checkPrerequisites();
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
return {userHasPrerequisite, isLoading};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment