synapse-react-client
Version:
[](https://badge.fury.io/js/synapse-react-client) [](https://github.com/prettier/prettie
74 lines (72 loc) • 2 kB
JavaScript
import { useMemo as l } from "react";
import { useQuery as p, skipToken as d } from "@tanstack/react-query";
const h = 500, y = (t) => ["datacite-usage", t];
function f(t) {
return t.replace(/^https?:\/\/(dx\.)?doi\.org\//i, "");
}
async function g(t, o) {
const i = JSON.stringify({
query: `
query($id: ID!) {
work(id: $id) {
citations(first: ${h}) {
nodes {
id
titles { title }
publisher { name }
publicationYear
# publication (container) info
container {
title
}
}
}
}
}
`,
variables: { id: `https://doi.org/${o}` }
}), a = await fetch("https://api.datacite.org/graphql", {
method: "POST",
signal: t,
headers: { "content-type": "application/json", accept: "application/json" },
body: i
});
if (!a.ok) throw new Error(`DataCite GraphQL ${a.status}`);
return ((await a.json())?.data?.work?.citations?.nodes ?? []).map((e) => {
const n = f(e?.id ?? ""), r = Array.isArray(e?.titles) && e.titles.length ? e.titles[0]?.title.replaceAll("?", "") : (
// for example, see https://commons.datacite.org/doi.org/10.1101%2F205807
void 0
), s = e?.publisher?.name ?? void 0, c = e?.publicationYear ?? void 0, u = e?.container?.title ?? void 0;
return {
id: n,
doi: n,
title: r,
publisher: s,
publicationYear: c,
containerTitle: u
};
});
}
async function b(t, o) {
const i = await g(t, o);
if (!i)
throw new Error("No citations found");
return {
citationCount: i.length ?? 0,
citations: i
};
}
function D(t, o) {
const i = l(() => y(t), [t]);
return p({
...o,
queryKey: i,
queryFn: t ? ({ signal: a }) => b(a, t) : d
});
}
export {
y as getDataCiteUsageQueryKey,
h as maxCitationCount,
D as useDataCiteUsage
};
//# sourceMappingURL=useDataCiteUsage.js.map