30 lines
715 B
JavaScript
30 lines
715 B
JavaScript
|
|
import { useEffect, useState } from "react";
|
||
|
|
|
||
|
|
// Helper function to load either file or default data
|
||
|
|
// into a URL and ensure that it is revoked if needed
|
||
|
|
function useDataSource(data, defaultSources) {
|
||
|
|
const [dataSource, setDataSource] = useState(null);
|
||
|
|
useEffect(() => {
|
||
|
|
if (!data) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
let url = null;
|
||
|
|
if (data.type === "file") {
|
||
|
|
url = URL.createObjectURL(data.file);
|
||
|
|
} else if (data.type === "default") {
|
||
|
|
url = defaultSources[data.name];
|
||
|
|
}
|
||
|
|
setDataSource(url);
|
||
|
|
|
||
|
|
return () => {
|
||
|
|
if (data.type === "file" && url) {
|
||
|
|
URL.revokeObjectURL(url);
|
||
|
|
}
|
||
|
|
};
|
||
|
|
}, [data, defaultSources]);
|
||
|
|
|
||
|
|
return dataSource;
|
||
|
|
}
|
||
|
|
|
||
|
|
export default useDataSource;
|