Advertisement
Guest User

Untitled

a guest
Sep 15th, 2019
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.84 KB | None | 0 0
  1. import { useEffect } from "react";
  2. import { DocumentReference } from "@google-cloud/firestore";
  3.  
  4. interface Entity {
  5. id: string;
  6. }
  7.  
  8. interface FirebaseHookHandlers {
  9. subscribe: () => void;
  10. error: (error: Error) => void;
  11. unsubscribe: () => void;
  12. }
  13.  
  14. interface DocHandlers<T extends Entity> extends FirebaseHookHandlers {
  15. data: (data: T | undefined) => void;
  16. }
  17.  
  18. export const useDoc = <T extends Entity>(
  19. getDocReference: () => DocumentReference,
  20. handlers: DocHandlers<T>,
  21. deps?: any
  22. ) => {
  23. useEffect(() => {
  24. handlers.subscribe();
  25. const unsubscribeFromDoc = getDocReference().onSnapshot(
  26. snapshot => handlers.data(dataFromSnapshot(snapshot)),
  27. error => handlers.error(error)
  28. );
  29. return () => {
  30. handlers.unsubscribe();
  31. unsubscribeFromDoc();
  32. };
  33. }, deps); // eslint-disable-line react-hooks/exhaustive-deps
  34. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement