useChangeMatchObject
A hook that lets you get a list of Linked Data Objects for objects matching the provided parameters, and provides tools for modifying and committing changes to those objects within a transaction.
Use this hook for forms that need to modify multiple matching objects.
import { useChangeMatchObject, useResource } from "@ldo/solid-react";
import React, { FunctionComponent } from "react";
import { ProfileShapeType } from "./.ldo/Profile.shapeType";
const Component: FunctionComponent = () => {
const resource = useResource("https://example.com/connections");
// Gets all objects in the database that know Kevin Bacon
const [profiles, setProfiles, commitProfiles] = useChangeMatchObject(
ProfileShapeType,
"https://example.com/Kevin_Bacon",
"http://xmlns.com/foaf/0.1/knows",
null,
);
const handleUpdateAllNames = () => {
setProfiles(resource, (profileSet) => {
profileSet.forEach((profile) => {
if (profile) {
profile.fn = "Updated Name";
}
});
});
};
const handleAddEmailToAll = () => {
setProfiles(resource, (profileSet) => {
profileSet.forEach((profile) => {
if (profile) {
profile.mbox = "updated@example.com";
}
});
});
};
const handleCommitChanges = async () => {
try {
await commitProfiles();
console.log("All profile changes committed successfully!");
} catch (error) {
console.error("Failed to commit changes:", error);
}
};
return (
<div>
<div>
{profiles.map((profile, index) => (
<div key={index}>
<p>Name: {profile?.fn}</p>
<p>Email: {profile?.mbox}</p>
</div>
))}
</div>
<button onClick={handleUpdateAllNames}>
Update All Names
</button>
<button onClick={handleAddEmailToAll}>
Add Email to All
</button>
<button onClick={handleCommitChanges}>
Commit All Changes
</button>
</div>
);
};
Parameters
ShapeType: ShapeType
- The ShapeType dictating the shape of the Linked Data Objectsubject: string | SubjectNode | null
- The subject to matchpredicate: string | PredicateNode | null
- The predicate to matchgraph: string | GraphNode | null
- The graph to matchoptions?: UseMatchObjectOptions
- Optional configuration for the matching behavior
Returns
Returns a tuple containing three elements:
-
objects
- A list of linked data objects corresponding to the given matched items, derived from a transaction dataset. -
setObjects
- A function for modifying the matched objects. It takes two parameters: resource
: A resource object (typically fromuseResource
) that contains the objects to modifychanger
: A callback function that receives the set of objects and allows you to modify them
setObjects(resource, (objectSet) => {
// Modify the objects here
objectSet.forEach((object) => {
if (object) {
object.property = "new value";
}
});
});
commitObjects
- An async function that commits all changes from the transaction dataset to the global dataset and remote dataset (if connected). Returns a Promise that resolves when the commit is successful or rejects if there's an error.