UNPKG

use-neo4j

Version:

<div style="text-align:center"> <h1>React Hooks For Neo4j</h1>

117 lines (116 loc) 5.59 kB
"use strict"; 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)); };