react-dir-tree
Version:
Directory Tree React Component
71 lines (67 loc) • 2.07 kB
JavaScript
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
import * as React from "react";
import axios from "axios";
const DirTreeContext = /*#__PURE__*/React.createContext(null);
/**
* `DirTreeProvider` Component. Display a whole directory
* structure.
*
* Wrap `Directory` or `LazyDirectory` inside this provider.
*
* This component make a request throw `DirTreeProvider fetchBaseDir`
* to get tree structure. So is important to have the service up and running.
* Check project repository to get service example.
*
* @see { @link https://github.com/PinoFlores/react-dir-tree#readme }
*
* @param {Object} props - {baseUrl, baseDirectory}
* @version 0.1.0
* @author Jose Aburto <pino0071@email.com>
*/
export const DirTreeProvider = props => {
const [baseDir, setBaseDir] = React.useState({
name: "Loading Directories, please wait...",
path: "",
children: []
});
const fetchBaseDir = () => {
axios.get(`${props.baseUrl}`, {
params: {
dir: props.baseDirectory
}
}).then(({
data
}) => {
setBaseDir(data.path);
}).catch(error => {
setBaseDir({
// name: `No Dirs. ${response}`,
name: "No Directories. Check Server.",
path: "",
children: []
});
console.log(error);
});
};
const value = React.useMemo(() => {
return {
baseDir,
fetchBaseDir
};
}, [baseDir]);
return /*#__PURE__*/React.createElement(DirTreeContext.Provider, _extends({
value: value
}, props));
};
export const useDirTree = () => {
const context = React.useContext(DirTreeContext);
if (!context) throw new Error("useDirTree must be inside DirTreeContext");
const {
baseDir,
fetchBaseDir
} = context;
return {
baseDir,
fetchBaseDir
};
};