From fce6f115bedc1f38aabda650f2e92d2d2bd37b05 Mon Sep 17 00:00:00 2001 From: Dominik Bayerl Date: Wed, 21 Jan 2026 23:41:59 +0100 Subject: [PATCH 1/2] Add 'Autocomplete' support for Mouser. This PR introduces support for the Mouser Electronics Search API. The API can be enabled by setting the `MOUSER_API_KEY` environment variable. A valid API key can be acquired free of charge from mouser at https://www.mouser.de/api-search/. The search still defaults to LCSC. Future providers can be added in `/api/providers/route.ts`. Signed-off-by: Dominik Bayerl --- .env | 3 + app/add/page.tsx | 24 ++++++- app/api/parts/autocomplete/route.ts | 13 +++- app/api/providers/route.ts | 11 +++ lib/helper/mouser_api.ts | 107 ++++++++++++++++++++++++++++ 5 files changed, 156 insertions(+), 2 deletions(-) create mode 100644 app/api/providers/route.ts create mode 100644 lib/helper/mouser_api.ts diff --git a/.env b/.env index 0ea2b3b..197c09c 100644 --- a/.env +++ b/.env @@ -14,3 +14,6 @@ DATABASE_URL="postgresql://partpilot:partpilotPass@localhost:5432/partpilotdb?sc # openssl rand -base64 32 NEXTAUTH_SECRET="K3l7o+g1mCZUQjszYk6SH0k66mmYeX1gh1ANqJA6/9o=" # for local NEXTAUTH_URL="http://localhost:3000" # for local + +# Autocomplete +# MOUSER_API_KEY="your_mouser_api_key_here" \ No newline at end of file diff --git a/app/add/page.tsx b/app/add/page.tsx index bb318d8..aa29f4e 100644 --- a/app/add/page.tsx +++ b/app/add/page.tsx @@ -18,6 +18,7 @@ import { Image, ThemeIcon, LoadingOverlay, + Select, } from "@mantine/core"; import { useEffect, useRef, useState } from "react"; import { scannerInputToType } from "../dashboardPage"; @@ -67,6 +68,17 @@ export default function Add() { const [scannerInput, setScannerInput] = useState(""); const [productCode, setProductCode] = useState(""); + const [provider, setProvider] = useState("LCSC"); + const [availableProviders, setAvailableProviders] = useState(["LCSC"]); + + useEffect(() => { + fetch("/api/providers") + .then((res) => res.json()) + .then((data) => { + setAvailableProviders(data); + }) + .catch((e) => console.error(e)); + }, []); //When the user presses the Autocomplete Button async function handleAutocomplete() { @@ -88,6 +100,7 @@ export default function Add() { method: "POST", body: JSON.stringify({ productCode: productCodeInternal, + provider: provider, }), }).then((response) => response @@ -290,13 +303,22 @@ export default function Add() { Autocomplete: - + + +