Skip to content
Snippets Groups Projects

feat(frontend): allow uploading files for data service url

Merged Arnaud Vergnet requested to merge topic/default/dataservice-file into branch/default
3 files
+ 243
103
Compare changes
  • Side-by-side
  • Inline
Files
3
@@ -9,6 +9,9 @@
} from "@cubicweb/client";
import { useRouter } from "next/navigation";
const INSERT_FILE_RQL =
"INSERT File X: X data %(data)s, X data_format %(data_format)s, X data_name %(data_name)s";
export function useApiLogin() {
const client = useClient();
return (login: string, password: string) => client.login(login, password);
@@ -42,8 +45,35 @@
return (eid: number) => client.execute(rql, { eid });
}
export function useApiUploadDataServiceFile() {
const client = useClient();
return async (file: File): Promise<string> => {
const transaction = new Transaction();
transaction.setBinaries({ file });
const insertQuery = transaction.push(INSERT_FILE_RQL, {
data: {
type: "binary_reference",
ref: "file",
},
data_format: file.type,
data_name: file.name,
});
const downloadUrlQuery = transaction.push(
"Any X.download_url() WHERE X eid %(eid)s",
{
eid: insertQuery.ref().row(0).column(0),
},
);
const result = await client.executeTransaction(transaction);
return result.resolveScalar(
downloadUrlQuery.ref().row(0).column(0),
) as string;
};
}
function pushSetProjectFiles(
transaction: Transaction,
eid: number | TransactionQueryScalarRef,
data: Omit<Project, "import_recipes">,
) {
@@ -45,10 +75,8 @@
function pushSetProjectFiles(
transaction: Transaction,
eid: number | TransactionQueryScalarRef,
data: Omit<Project, "import_recipes">,
) {
const insertFileRql =
"INSERT File X: X data %(data)s, X data_format %(data_format)s, X data_name %(data_name)s";
const setOntologyRql =
"Set X ontology_file %(ontology_file)s WHERE X eid %(eid)s";
const setShaclRql = "Set X shacl_files %(shacl_files)s WHERE X eid %(eid)s";
@@ -57,7 +85,7 @@
if (data.ontology_file?.data) {
const file = data.ontology_file.data;
binaries["ontology_file"] = file;
const insertQuery = transaction.push(insertFileRql, {
const insertQuery = transaction.push(INSERT_FILE_RQL, {
data: {
type: "binary_reference",
ref: "ontology_file",
@@ -73,7 +101,7 @@
if (data.shacl_files?.data) {
const file = data.shacl_files.data;
binaries["shacl_files"] = file;
const insertQuery = transaction.push(insertFileRql, {
const insertQuery = transaction.push(INSERT_FILE_RQL, {
data: {
type: "binary_reference",
ref: "shacl_files",
Loading