client/app/pages/users/hooks/useUserGroups.js (18 lines of code) (raw):

import { filter, includes, isArray } from "lodash"; import { useEffect, useMemo, useState } from "react"; import Group from "@/services/group"; export default function useUserGroups(user) { const [allGroups, setAllGroups] = useState([]); const [isLoading, setIsLoading] = useState(true); const groups = useMemo(() => filter(allGroups, group => includes(user.groupIds, group.id)), [allGroups, user]); useEffect(() => { let isCancelled = false; Group.query().then(groups => { if (!isCancelled) { setAllGroups(isArray(groups) ? groups : []); setIsLoading(false); } }); }, []); return useMemo(() => ({ groups, allGroups, isLoading }), [groups, allGroups, isLoading]); }