use-neo4j
Version:
<div style="text-align:center"> <h1>React Hooks For Neo4j</h1>
79 lines (78 loc) • 3.82 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 __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.useLazyWriteCypher = exports.useLazyReadCypher = exports.useWriteCypher = exports.useReadCypher = exports.useCypher = void 0;
var react_1 = require("react");
var neo4j_driver_1 = __importDefault(require("neo4j-driver"));
var neo4j_context_1 = require("./neo4j.context");
exports.useCypher = function (defaultAccessMode, cypher, params, database) {
var _a = useLazyCypher(defaultAccessMode, cypher, database), run = _a[0], queryState = _a[1];
react_1.useEffect(function () {
run(params, database);
}, []);
return __assign({ run: run }, queryState);
};
var createSession = function (driver, database, defaultAccessMode) {
if (database !== undefined && database !== '') {
return driver.session({ database: database, defaultAccessMode: defaultAccessMode });
}
return driver.session({ defaultAccessMode: defaultAccessMode });
};
exports.useReadCypher = function (cypher, params, database) { return exports.useCypher(neo4j_driver_1.default.session.READ, cypher, params, database); };
exports.useWriteCypher = function (cypher, params, database) { return exports.useCypher(neo4j_driver_1.default.session.WRITE, cypher, params, database); };
exports.useLazyReadCypher = function (cypher, database) { return useLazyCypher(neo4j_driver_1.default.session.READ, cypher, database); };
exports.useLazyWriteCypher = function (cypher, database) { return useLazyCypher(neo4j_driver_1.default.session.WRITE, cypher, database); };
var useLazyCypher = function (defaultAccessMode, cypher, defaultDatabase) {
var _a = react_1.useContext(neo4j_context_1.Neo4jContext), driver = _a.driver, database = _a.database;
if (!driver)
throw new Error('`driver` not defined in Neo4jContext. Have you added it into your app as <Neo4jProvider driver={{driver}}> ?');
var _b = react_1.useState({ loading: false, database: database, cypher: cypher }), queryState = _b[0], setQueryState = _b[1];
var run = function (params, anotherDatabase) {
var session = createSession(driver, anotherDatabase || defaultDatabase || database, defaultAccessMode);
setQueryState({ session: session, loading: true, database: anotherDatabase || defaultDatabase || database, cypher: cypher });
return session.run(cypher, params)
.then(function (result) {
setQueryState({
session: session,
cypher: cypher,
params: params,
database: anotherDatabase || defaultDatabase || database,
loading: false,
result: result,
records: result.records,
first: result.records[0],
});
session.close();
return result;
})
.catch(function (error) {
setQueryState({
session: session,
cypher: cypher,
params: params,
database: anotherDatabase || defaultDatabase || database,
loading: false,
error: error,
});
session.close();
});
};
return [
run,
__assign({ cypher: cypher,
database: database }, queryState)
];
};