rating the skills with LDO instead of SPARQL

master
Niko PLP 2 weeks ago
parent 8a8196ff88
commit 3a2f407d0c
  1. 73
      ng-sdk-js/example-webapp-react-socialquery/package-lock.json
  2. 2
      ng-sdk-js/example-webapp-react-socialquery/package.json
  3. 149
      ng-sdk-js/example-webapp-react-socialquery/src/Contact.tsx

@ -10,7 +10,7 @@
"dependencies": {
"@heroicons/react": "^2.2.0",
"@ldo/connected-nextgraph": "^1.0.0-alpha.15",
"@ldo/ldo": "^1.0.0-alpha.15",
"@ldo/ldo": "^1.0.0-alpha.14",
"@ldo/react": "^1.0.0-alpha.15",
"nextgraphweb": "^0.1.1-alpha.4",
"react": "^19.0.0",
@ -1114,21 +1114,6 @@
"ldo": "dist/index.js"
}
},
"node_modules/@ldo/cli/node_modules/@ldo/ldo": {
"version": "1.0.0-alpha.14",
"resolved": "https://registry.npmjs.org/@ldo/ldo/-/ldo-1.0.0-alpha.14.tgz",
"integrity": "sha512-EB2TG4TwywQrdVsYnz1mQM+ucoRgoVbwJguxDW5JibfOoqTe3QFeglN56wTL6Kk1T+DTmFv83zYUPVpRK8rclw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@ldo/dataset": "^1.0.0-alpha.14",
"@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.14",
"@ldo/subscribable-dataset": "^1.0.0-alpha.14",
"@rdfjs/data-model": "^1.2.0",
"buffer": "^6.0.3",
"readable-stream": "^4.3.0"
}
},
"node_modules/@ldo/cli/node_modules/commander": {
"version": "9.5.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
@ -1166,34 +1151,6 @@
"ws": "^8.18.0"
}
},
"node_modules/@ldo/connected-nextgraph/node_modules/@ldo/ldo": {
"version": "1.0.0-alpha.14",
"resolved": "https://registry.npmjs.org/@ldo/ldo/-/ldo-1.0.0-alpha.14.tgz",
"integrity": "sha512-EB2TG4TwywQrdVsYnz1mQM+ucoRgoVbwJguxDW5JibfOoqTe3QFeglN56wTL6Kk1T+DTmFv83zYUPVpRK8rclw==",
"license": "MIT",
"dependencies": {
"@ldo/dataset": "^1.0.0-alpha.14",
"@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.14",
"@ldo/subscribable-dataset": "^1.0.0-alpha.14",
"@rdfjs/data-model": "^1.2.0",
"buffer": "^6.0.3",
"readable-stream": "^4.3.0"
}
},
"node_modules/@ldo/connected/node_modules/@ldo/ldo": {
"version": "1.0.0-alpha.14",
"resolved": "https://registry.npmjs.org/@ldo/ldo/-/ldo-1.0.0-alpha.14.tgz",
"integrity": "sha512-EB2TG4TwywQrdVsYnz1mQM+ucoRgoVbwJguxDW5JibfOoqTe3QFeglN56wTL6Kk1T+DTmFv83zYUPVpRK8rclw==",
"license": "MIT",
"dependencies": {
"@ldo/dataset": "^1.0.0-alpha.14",
"@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.14",
"@ldo/subscribable-dataset": "^1.0.0-alpha.14",
"@rdfjs/data-model": "^1.2.0",
"buffer": "^6.0.3",
"readable-stream": "^4.3.0"
}
},
"node_modules/@ldo/dataset": {
"version": "1.0.0-alpha.14",
"resolved": "https://registry.npmjs.org/@ldo/dataset/-/dataset-1.0.0-alpha.14.tgz",
@ -1219,6 +1176,20 @@
"jsonld2graphobject": "^0.0.4"
}
},
"node_modules/@ldo/ldo": {
"version": "1.0.0-alpha.14",
"resolved": "https://registry.npmjs.org/@ldo/ldo/-/ldo-1.0.0-alpha.14.tgz",
"integrity": "sha512-EB2TG4TwywQrdVsYnz1mQM+ucoRgoVbwJguxDW5JibfOoqTe3QFeglN56wTL6Kk1T+DTmFv83zYUPVpRK8rclw==",
"license": "MIT",
"dependencies": {
"@ldo/dataset": "^1.0.0-alpha.14",
"@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.14",
"@ldo/subscribable-dataset": "^1.0.0-alpha.14",
"@rdfjs/data-model": "^1.2.0",
"buffer": "^6.0.3",
"readable-stream": "^4.3.0"
}
},
"node_modules/@ldo/rdf-utils": {
"version": "1.0.0-alpha.14",
"resolved": "https://registry.npmjs.org/@ldo/rdf-utils/-/rdf-utils-1.0.0-alpha.14.tgz",
@ -1245,20 +1216,6 @@
"cross-fetch": "^3.1.6"
}
},
"node_modules/@ldo/react/node_modules/@ldo/ldo": {
"version": "1.0.0-alpha.14",
"resolved": "https://registry.npmjs.org/@ldo/ldo/-/ldo-1.0.0-alpha.14.tgz",
"integrity": "sha512-EB2TG4TwywQrdVsYnz1mQM+ucoRgoVbwJguxDW5JibfOoqTe3QFeglN56wTL6Kk1T+DTmFv83zYUPVpRK8rclw==",
"license": "MIT",
"dependencies": {
"@ldo/dataset": "^1.0.0-alpha.14",
"@ldo/jsonld-dataset-proxy": "^1.0.0-alpha.14",
"@ldo/subscribable-dataset": "^1.0.0-alpha.14",
"@rdfjs/data-model": "^1.2.0",
"buffer": "^6.0.3",
"readable-stream": "^4.3.0"
}
},
"node_modules/@ldo/schema-converter-shex": {
"version": "1.0.0-alpha.14",
"resolved": "https://registry.npmjs.org/@ldo/schema-converter-shex/-/schema-converter-shex-1.0.0-alpha.14.tgz",

@ -13,7 +13,7 @@
"dependencies": {
"@heroicons/react": "^2.2.0",
"@ldo/connected-nextgraph": "^1.0.0-alpha.15",
"@ldo/ldo": "^1.0.0-alpha.15",
"@ldo/ldo": "^1.0.0-alpha.14",
"@ldo/react": "^1.0.0-alpha.15",
"nextgraphweb": "^0.1.1-alpha.4",
"react": "^19.0.0",

@ -1,13 +1,19 @@
import { default as React, FunctionComponent } from "react";
import { useNextGraphAuth } from "./reactMethods";
import { SocialContactShapeType } from "./.ldo/contact.shapeTypes.ts";
import { SocialContactShapeType, HasRatingShapeType } from "./.ldo/contact.shapeTypes.ts";
import { useSubscribeToResource, useResource, useSubject, useLdo } from "./reactMethods.ts";
import { StarIcon } from '@heroicons/react/24/solid'
import { StarIcon as StarIconOutline, NoSymbolIcon } from '@heroicons/react/24/outline'
import {
startTransaction,
transactionChanges,
toSparqlUpdate,
commitTransaction,
} from "@ldo/ldo";
export const Contact: FunctionComponent = ({nuri}) => {
const { session } = useNextGraphAuth();
const { createData, commitData, changeData } = useLdo();
const { createData, commitData, changeData, getResource } = useLdo();
useResource(session.sessionId && nuri ? nuri : undefined, { subscribe: true });
let contact = useSubject(SocialContactShapeType, session.sessionId && nuri ? nuri.substring(0,53) : undefined);
//console.log(nuri)
@ -57,23 +63,37 @@ export const Contact: FunctionComponent = ({nuri}) => {
const old = skills[skill];
if (old == 0) {
if (rating == 0) return;//should happen
if (rating == 0) return; //shouldn't happen
// we create a new rating
nextSkills[skill] = rating;
try {
await session.ng.sparql_update(session.sessionId, `PREFIX xskills: <did:ng:x:skills#>
PREFIX ksp: <did:ng:k:skills:programming:>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
INSERT {
<> xskills:hasRating [
a xskills:Rating ;
xskills:rated "${rating-1}"^^xsd:integer ;
xskills:skill ksp:${ksp_mapping[skill]}
].
} WHERE {}`, nuri);
} catch (e) {
console.error(e)
let re = getResource(nuri);
let editing_contact = changeData(contact, re);
editing_contact.hasRating.add({
rated: rating-1,
skill: {
"@id": ksp + ksp_mapping[skill]
}
})
let res = commitData(editing_contact);
if (res.isError) {
console.error(res.message);
}
// try {
// await session.ng.sparql_update(session.sessionId, `PREFIX xskills: <did:ng:x:skills#>
// PREFIX ksp: <did:ng:k:skills:programming:>
// PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
// INSERT {
// <> xskills:hasRating [
// a xskills:Rating ;
// xskills:rated "${rating-1}"^^xsd:integer ;
// xskills:skill ksp:${ksp_mapping[skill]}
// ].
// } WHERE {}`, nuri);
// } catch (e) {
// console.error(e)
// }
} else {
if (old == rating) {
nextSkills[skill] = rating - 1;
@ -82,37 +102,80 @@ export const Contact: FunctionComponent = ({nuri}) => {
}
if (nextSkills[skill] == 0) {
// we remove the rating
try { const s = `PREFIX xskills: <did:ng:x:skills#>
PREFIX ksp: <did:ng:k:skills:programming:>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
DELETE {
<> xskills:hasRating ?rating.
?rating a xskills:Rating .
?rating xskills:skill ksp:${ksp_mapping[skill]} .
?rating xskills:rated "${old-1}"^^xsd:integer.
} WHERE { <> xskills:hasRating ?rating .
?rating a xskills:Rating .
?rating xskills:skill ksp:${ksp_mapping[skill]}
}`;
await session.ng.sparql_update(session.sessionId, s, nuri);
} catch (e) {
console.error(e)
}
let re = getResource(nuri);
for (const r of contact.hasRating.values()) {
if (r.skill["@id"].substring(24) === ksp_mapping[skill]) {
let editing_contact = changeData(contact, re);
editing_contact.hasRating?.delete(r);
// let changes = transactionChanges(editing_contact);
// console.log(changes.added?.toString())
// console.log(changes.removed?.toString())
let res = commitData(editing_contact);
if (res.isError) {
console.error(res.message);
}
let editing_rating = changeData(r, re);
delete editing_rating["@id"];
// changes = transactionChanges(editing_rating);
// console.log(changes.added?.toString())
// console.log(changes.removed?.toString())
res = commitData(editing_rating);
if (res.isError) {
console.error(res.message);
}
break;
}
};
// try { const s = `PREFIX xskills: <did:ng:x:skills#>
// PREFIX ksp: <did:ng:k:skills:programming:>
// PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
// DELETE {
// <> xskills:hasRating ?rating.
// ?rating a xskills:Rating .
// ?rating xskills:skill ksp:${ksp_mapping[skill]} .
// ?rating xskills:rated "${old-1}"^^xsd:integer.
// } WHERE { <> xskills:hasRating ?rating .
// ?rating a xskills:Rating .
// ?rating xskills:skill ksp:${ksp_mapping[skill]}
// }`;
// await session.ng.sparql_update(session.sessionId, s, nuri);
// } catch (e) {
// console.error(e)
// }
} else {
// we update the rating
try {
await session.ng.sparql_update(session.sessionId, `PREFIX xskills: <did:ng:x:skills#>
PREFIX ksp: <did:ng:k:skills:programming:>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
DELETE {
?rating xskills:rated "${old-1}"^^xsd:integer.
} INSERT {
?rating xskills:rated "${nextSkills[skill]-1}"^^xsd:integer.
let re = getResource(nuri);
for (const r of contact.hasRating.values()) {
if (r.skill["@id"].substring(24) === ksp_mapping[skill]) {
let rating = changeData(r, re);
rating.rated = nextSkills[skill]-1;
const changes = transactionChanges(rating);
console.log(changes.added?.toString())
console.log(changes.removed?.toString())
const res = commitData(rating);
if (res.isError) {
console.error(res.message);
}
break;
}
WHERE { <> xskills:hasRating ?rating .
?rating a xskills:Rating .
?rating xskills:skill ksp:${ksp_mapping[skill]}
}`, nuri);
};
// await session.ng.sparql_update(session.sessionId, `PREFIX xskills: <did:ng:x:skills#>
// PREFIX ksp: <did:ng:k:skills:programming:>
// PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
// DELETE {
// ?rating xskills:rated "${old-1}"^^xsd:integer.
// } INSERT {
// ?rating xskills:rated "${nextSkills[skill]-1}"^^xsd:integer.
// }
// WHERE { <> xskills:hasRating ?rating .
// ?rating a xskills:Rating .
// ?rating xskills:skill ksp:${ksp_mapping[skill]}
// }`, nuri);
} catch (e) {
console.error(e)
}

Loading…
Cancel
Save