Rust implementation of NextGraph, a Decentralized and local-first web 3.0 ecosystem
https://nextgraph.org
byzantine-fault-tolerancecrdtsdappsdecentralizede2eeeventual-consistencyjson-ldlocal-firstmarkdownocapoffline-firstp2pp2p-networkprivacy-protectionrdfrich-text-editorself-hostedsemantic-websparqlweb3collaboration
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
3.3 KiB
80 lines
3.3 KiB
import { jsx as _jsx } from "react/jsx-runtime";
|
|
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
import { NextGraphAuthContext, useNextGraphAuth } from "./NextGraphAuthContext.js";
|
|
import { default as ng, init } from "nextgraphweb";
|
|
/**
|
|
* Creates special react methods specific to the NextGraph Auth
|
|
* @param dataset the connectedLdoDataset with a nextGraphConnectedPlugin
|
|
* @returns { BrowserNGLdoProvider, useNextGraphAuth }
|
|
*/
|
|
export function createBrowserNGReactMethods(dataset) {
|
|
const BrowserNGLdoProvider = ({ children, }) => {
|
|
const [session, setSession] = useState({
|
|
ng: undefined,
|
|
});
|
|
const [ranInitialAuthCheck, setRanInitialAuthCheck] = useState(false);
|
|
const runInitialAuthCheck = useCallback(async () => {
|
|
//console.log("runInitialAuthCheck called", ranInitialAuthCheck)
|
|
if (ranInitialAuthCheck)
|
|
return;
|
|
//console.log("init called");
|
|
setRanInitialAuthCheck(true);
|
|
// TODO: export the types for the session object coming from NG.
|
|
await init((event) => {
|
|
//console.log("called back in react", event)
|
|
// callback
|
|
// once you receive event.status == "loggedin"
|
|
// you can use the full API
|
|
if (event.status == "loggedin") {
|
|
setSession({
|
|
ng,
|
|
sessionId: event.session.session_id, //FIXME: sessionId should be a Number.
|
|
protectedStoreId: event.session.protected_store_id,
|
|
privateStoreId: event.session.private_store_id,
|
|
publicStoreId: event.session.public_store_id
|
|
}); // TODO: add event.session.user too
|
|
dataset.setContext("nextgraph", {
|
|
ng,
|
|
sessionId: event.session.session_id
|
|
});
|
|
}
|
|
else if (event.status == "cancelled" || event.status == "error" || event.status == "loggedout") {
|
|
setSession({ ng: undefined });
|
|
dataset.setContext("nextgraph", {
|
|
ng: undefined,
|
|
});
|
|
}
|
|
}, true // singleton: boolean (will your app create many docs in the system, or should it be launched as a unique instance)
|
|
, []); //list of AccessRequests (for now, leave this empty)
|
|
}, []);
|
|
const login = useCallback(async () => {
|
|
await ng.login();
|
|
}, []);
|
|
const logout = useCallback(async () => {
|
|
await ng.logout();
|
|
}, []);
|
|
useEffect(() => {
|
|
runInitialAuthCheck();
|
|
}, []);
|
|
const nextGraphAuthFunctions = useMemo(() => ({
|
|
runInitialAuthCheck,
|
|
login,
|
|
logout,
|
|
session,
|
|
ranInitialAuthCheck,
|
|
}), [
|
|
login,
|
|
logout,
|
|
ranInitialAuthCheck,
|
|
runInitialAuthCheck,
|
|
session,
|
|
]);
|
|
return (_jsx(NextGraphAuthContext.Provider, { value: nextGraphAuthFunctions, children: children }));
|
|
};
|
|
return {
|
|
BrowserNGLdoProvider,
|
|
useNextGraphAuth: useNextGraphAuth
|
|
};
|
|
}
|
|
;
|
|
//# sourceMappingURL=createBrowserNGReactMethods.js.map
|