MediaLibraryProvider.jsx 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import React, { useContext } from "react";
  2. export const MediaLibraryContext = React.createContext({});
  3. const noop = () => {};
  4. export const MediaLibraryProvider = ({
  5. children,
  6. libraries = [],
  7. uploadMedia = noop,
  8. listMedia = noop,
  9. deleteMedia = noop,
  10. }) => {
  11. const addMedia = React.useCallback(
  12. async ({ boxId, resourceId }, file) => {
  13. const filePath = await uploadMedia(boxId, resourceId, file);
  14. return {
  15. type: "local",
  16. content: filePath,
  17. };
  18. },
  19. [uploadMedia]
  20. );
  21. const removeMedia = React.useCallback(
  22. async (key) => {
  23. return await deleteMedia(key);
  24. },
  25. [deleteMedia]
  26. );
  27. const getLibraryMedia = React.useCallback(
  28. async ({ boxId, resourceId }) => listMedia(boxId, resourceId),
  29. [listMedia]
  30. );
  31. return (
  32. <MediaLibraryContext.Provider
  33. value={{ addMedia, getLibraryMedia, libraries, removeMedia }}
  34. >
  35. {children}
  36. </MediaLibraryContext.Provider>
  37. );
  38. };
  39. export const useMediaLibrary = () => {
  40. return useContext(MediaLibraryContext);
  41. };
  42. export default MediaLibraryProvider;