use-neo4j
Version:
<div style="text-align:center"> <h1>React Hooks For Neo4j</h1>
117 lines (116 loc) • 5.59 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Neo4jProvider = void 0;
var react_1 = __importStar(require("react"));
var login_1 = require("./components/login");
var neo4j_context_1 = require("./neo4j.context");
var driver_1 = require("./driver");
var neo4j_config_interface_1 = require("./neo4j-config.interface");
exports.Neo4jProvider = function (props) {
var configFromStorage = (window.localStorage ? JSON.parse(window.localStorage.getItem(neo4j_config_interface_1.LOCAL_STORAGE_KEY) || '{}') : {});
var _a = react_1.useState(true), authenticating = _a[0], setAuthenticating = _a[1];
var _b = react_1.useState(configFromStorage), config = _b[0], setConfig = _b[1];
var _c = react_1.useState(props.driver), driver = _c[0], setDriver = _c[1];
var _d = react_1.useState(), error = _d[0], setError = _d[1];
var _e = react_1.useState(props.database), database = _e[0], setDatabase = _e[1];
var updateConnection = function (config) {
setConfig(config);
setDatabase(database);
setAuthenticating(true);
var newDriver = driver_1.createDriver(config.scheme, config.host, config.port, config.username, config.password);
newDriver.verifyConnectivity()
.then(function () {
setDriver(newDriver);
window.localStorage.setItem(neo4j_config_interface_1.LOCAL_STORAGE_KEY, JSON.stringify(config));
})
.catch(function (e) { return setError(e); })
.finally(function () { return setAuthenticating(false); });
};
react_1.useEffect(function () {
// Has Driver been Passed?
if (props.driver) {
props.driver.verifyConnectivity()
.catch(function (e) { return setError(e); })
.finally(function () {
setDriver(props.driver);
setAuthenticating(false);
});
}
// Has a connection string been provided to the url?
else {
setAuthenticating(false);
}
}, [driver]);
// Test driver passed as a prop or url search params
react_1.useEffect(function () {
if (props.driver !== undefined) {
return;
}
var searchParams = new URLSearchParams(window.location.search);
// Attempt to connect from URL parameters
var urlScheme, urlHost, urlPort;
if (searchParams.has('url')) {
var url = searchParams.get('url');
var matches = url.match(/^((neo4j|bolt)((\+s?(sc)?)?):\/\/)?([\w.]+)(:([0-9]+))?$/);
if (matches) {
urlScheme = matches[2] || 'neo4j';
urlHost = matches[6];
urlPort = matches[8] || 7687;
}
}
if (urlScheme && urlHost && urlPort) {
// Build Credentials
var username = searchParams.get('user') || undefined;
var password = searchParams.get('pass') || undefined;
// Attempt to Connect
var config_1 = {
scheme: urlScheme || 'neo4j',
host: urlHost || 'localhost',
port: urlPort || 7687,
username: username,
password: password,
database: searchParams.get('database') || undefined
};
updateConnection(config_1);
}
}, [props.driver]);
// Wait for effect to verify driver connectivity
if (authenticating) {
return (react_1.default.createElement("div", { className: "authenticating" }));
}
if (!driver) {
var title = props.title, logo = props.logo, details = props.details, footer = props.footer;
return (react_1.default.createElement(login_1.Login, __assign({ error: error, title: title, logo: logo, details: details, footer: footer, scheme: config.scheme, host: config.host, port: config.port, username: config.username, password: config.password, database: config.database, showActive: props.showActive, showHost: props.showHost, showDatabase: props.showDatabase, onSubmit: updateConnection }, props)));
}
return (react_1.default.createElement(neo4j_context_1.Neo4jContext.Provider, { value: { driver: driver, config: config, database: database, updateConnection: updateConnection, setDatabase: setDatabase, } }, props.children));
};