UNPKG

synapse-react-client

Version:

[![npm version](https://badge.fury.io/js/synapse-react-client.svg)](https://badge.fury.io/js/synapse-react-client) [![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettie

74 lines (72 loc) 2 kB
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