diff --git a/ng-sdk-js/example-webapp-react-socialquery/package-lock.json b/ng-sdk-js/example-webapp-react-socialquery/package-lock.json index ed103ba..52c2b87 100644 --- a/ng-sdk-js/example-webapp-react-socialquery/package-lock.json +++ b/ng-sdk-js/example-webapp-react-socialquery/package-lock.json @@ -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", diff --git a/ng-sdk-js/example-webapp-react-socialquery/package.json b/ng-sdk-js/example-webapp-react-socialquery/package.json index c038940..e171a9a 100644 --- a/ng-sdk-js/example-webapp-react-socialquery/package.json +++ b/ng-sdk-js/example-webapp-react-socialquery/package.json @@ -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", diff --git a/ng-sdk-js/example-webapp-react-socialquery/src/Contact.tsx b/ng-sdk-js/example-webapp-react-socialquery/src/Contact.tsx index 71ea64b..f2c4237 100644 --- a/ng-sdk-js/example-webapp-react-socialquery/src/Contact.tsx +++ b/ng-sdk-js/example-webapp-react-socialquery/src/Contact.tsx @@ -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: - PREFIX ksp: - PREFIX xsd: - 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: + // PREFIX ksp: + // PREFIX xsd: + // 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: - PREFIX ksp: - PREFIX xsd: - 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: + // PREFIX ksp: + // PREFIX xsd: + // 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: - PREFIX ksp: - PREFIX xsd: - 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: + // PREFIX ksp: + // PREFIX xsd: + // 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) }