diff --git a/packages/solid-react/src/BrowserSolidLdoProvider.tsx b/packages/solid-react/src/BrowserSolidLdoProvider.tsx
index 6f19450..8d9d652 100644
--- a/packages/solid-react/src/BrowserSolidLdoProvider.tsx
+++ b/packages/solid-react/src/BrowserSolidLdoProvider.tsx
@@ -28,7 +28,6 @@ export const BrowserSolidLdoProvider: FunctionComponent
= ({
restorePreviousSession: true,
});
setSession({ ...getDefaultSession().info });
-
window.history.replaceState(
{},
"",
@@ -40,19 +39,14 @@ export const BrowserSolidLdoProvider: FunctionComponent = ({
}, []);
const login = useCallback(async (issuer: string, options?: LoginOptions) => {
- console.log("Before full options");
const fullOptions = {
redirectUrl: window.location.href,
clientName: "Solid App",
oidcIssuer: issuer,
...options,
};
- console.log("After full options");
window.localStorage.setItem(PRE_REDIRECT_URI, fullOptions.redirectUrl);
- console.log("Set Item");
- console.log(fullOptions);
await libraryLogin(fullOptions);
- console.log("After login");
setSession({ ...getDefaultSession().info });
}, []);
diff --git a/packages/solid-react/src/useResource.ts b/packages/solid-react/src/useResource.ts
index f5904ef..90340cf 100644
--- a/packages/solid-react/src/useResource.ts
+++ b/packages/solid-react/src/useResource.ts
@@ -1,4 +1,4 @@
-import { useMemo, useEffect, useRef } from "react";
+import { useMemo, useEffect, useRef, useState, useCallback } from "react";
import type {
Container,
ContainerUri,
@@ -7,7 +7,6 @@ import type {
Leaf,
} from "@ldo/solid";
import { useLdo } from "./SolidLdoProvider";
-import { useForceReload } from "./util/useForceReload";
export interface UseResourceOptions {
suppressInitialRead?: boolean;
@@ -28,9 +27,11 @@ export function useResource(
options?: UseResourceOptions,
): Leaf | Container {
const { getResource } = useLdo();
+
+ // Get the resource
const resource = useMemo(() => {
- console.log(uri);
const resource = getResource(uri);
+ // Run read operations if necissary
if (!options?.suppressInitialRead) {
if (options?.reloadOnMount) {
resource.read();
@@ -40,18 +41,37 @@ export function useResource(
}
return resource;
}, [getResource, uri]);
- const pastResource = useRef();
- const forceReload = useForceReload();
+ const [resourceRepresentation, setResourceRepresentation] =
+ useState(resource);
+ const pastResource = useRef<
+ { resource: Resource; callback: () => void } | undefined
+ >();
+
+ // Callback function to force the react dom to reload.
+ const forceReload = useCallback(
+ // Wrap the resource in a proxy so it's techically a different object
+ () => {
+ setResourceRepresentation(new Proxy(resource, {}));
+ },
+ [resource],
+ );
useEffect(() => {
+ // Remove listeners for the previous resource
if (pastResource.current) {
- pastResource.current.off("update", forceReload);
+ pastResource.current.resource.off(
+ "update",
+ pastResource.current.callback,
+ );
}
- pastResource.current = resource;
+ // Set a new past resource to the current resource
+ pastResource.current = { resource, callback: forceReload };
+ // Add listener
resource.on("update", forceReload);
+ // Unsubscribe on unmount
return () => {
resource.off("update", forceReload);
};
}, [resource]);
- return resource;
+ return resourceRepresentation;
}
diff --git a/packages/solid-react/src/util/createWrapperProxy.ts b/packages/solid-react/src/util/createWrapperProxy.ts
new file mode 100644
index 0000000..244c891
--- /dev/null
+++ b/packages/solid-react/src/util/createWrapperProxy.ts
@@ -0,0 +1,7 @@
+import type { Resource } from "@ldo/solid";
+
+export function createWrapperProxy(
+ target: ResourceType,
+): ResourceType {
+ return new Proxy(target, {});
+}
diff --git a/packages/solid/src/SolidLdoDataset.ts b/packages/solid/src/SolidLdoDataset.ts
index c7d5da7..34d8012 100644
--- a/packages/solid/src/SolidLdoDataset.ts
+++ b/packages/solid/src/SolidLdoDataset.ts
@@ -44,7 +44,6 @@ export class SolidLdoDataset extends LdoDataset {
| AggregateError
> {
const changesByGraph = splitChangesByGraph(changes);
- console.log(changesByGraph);
const results: [
GraphNode,
DatasetChanges,
diff --git a/packages/solid/src/resource/Resource.ts b/packages/solid/src/resource/Resource.ts
index 6c7f4f3..85bfb5a 100644
--- a/packages/solid/src/resource/Resource.ts
+++ b/packages/solid/src/resource/Resource.ts
@@ -119,7 +119,6 @@ export abstract class Resource extends (EventEmitter as new () => TypedEmitter<{
async readIfUnfetched(): Promise<
ResourceResult
> {
- console.log("didInitialFetch", this.didInitialFetch);
if (this.didInitialFetch) {
const readResult = this.toReadResult();
this.status = readResult;