sparkletown/sparkle

View on GitHub
src/hooks/worlds/useWorldById.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { useFirestore, useFirestoreDocData } from "reactfire";

import { World } from "api/world";

import { worldConverter } from "utils/converters";
import { WithId } from "utils/id";

type UseWorldByIdResult = {
  world?: WithId<World>;
  isLoaded: boolean;
};

export const useWorldById: (worldId?: string) => UseWorldByIdResult = (
  worldId
) => {
  const firestore = useFirestore();

  const worldsRef = firestore
    .collection("worlds")
    .doc(worldId)
    .withConverter(worldConverter);

  const { data: world, status } = useFirestoreDocData<WithId<World>>(
    worldsRef,
    {
      initialData: undefined,
    }
  );

  const isWorldLoaded = status !== "loading";

  return {
    world,
    isLoaded: isWorldLoaded,
  };
};