"use strict"; const React = require("react"); const classnames = require("classnames"); const axios = require("axios"); const syncpipe = require("syncpipe"); const matchValue = require("match-value"); const style = require("./datasheet-search.css"); function getSources(results) { return syncpipe(results, [ (_) => _.map((result) => result.source), // (_) => _.filter((source) => source != null), (_) => _.map((source) => source != null ? source : "unknown"), (_) => new Set(_), (_) => Array.from(_), (_) => _.map((source) => { return matchValue(source, { tme: "TME", lcsc: "LCSC", st: "STMicroelectronics", farnell: "Farnell", unknown: "Unknown" }); }) ]); } function SearchResult({ isFirst, name, description, url, manufacturer }) { // FIXME: Handle 'no datasheet available' return (
Download datasheet
{manufacturer} {name}
{description}
); } function NoResults() { return (
No results.
); } module.exports = function DatasheetSearch({}) { let [ query, setQuery ] = React.useState(""); // FIXME let [ results, setResults ] = React.useState([]); let [ sources, setSources ] = React.useState([]); let cancellationToken = React.useRef(); function updateQuery(event) { setQuery(event.target.value.trim()); } React.useEffect(() => { let cancelled = false; cancellationToken.current = axios.CancelToken.source(); if (query.length > 0) { axios.post("/search", {}, { params: { query: query } }) .then((response) => { if (!cancelled) { setResults(response.data.results); setSources(getSources(response.data.results)); } }) .catch((error) => { if (!axios.isCancel()) { throw error; } }); } else { setResults([]); } return function () { cancelled = true; cancellationToken.current.cancel("Query input changed"); }; }, [ query ]); return (
{(results.length > 0) ? <> Sources:   {sources.join(", ")} : null }
{(results.length > 0) ? results.map((result, i) => { return ; }) : }
); };