From a29086173f2c3b352348bf6efbb49b32b23fdc3a Mon Sep 17 00:00:00 2001
From: Basilosaurusrex <77463090+Basilosaurusrex@users.noreply.github.com>
Date: Mon, 2 Mar 2026 11:59:29 +0100
Subject: [PATCH] login fix
---
Extension/background.js | 28 ++-
Server/src/App.jsx | 23 ++
.../dashboard/sections/OverviewSection.jsx | 48 +++-
.../dashboard/sections/ProductsSection.jsx | 122 +++++++++-
.../src/components/dashboard/ui/DataTable.jsx | 8 +-
Server/src/lib/appwrite.js | 4 +
Server/src/pages/AccountsPage.jsx | 211 +-----------------
.../Bildschirmfoto 2026-01-26 um 17.29.55.png | Bin 0 -> 2655545 bytes
.../Bildschirmfoto 2026-01-26 um 17.30.20.png | Bin 0 -> 1606656 bytes
.../Bildschirmfoto 2026-01-26 um 17.31.18.png | Bin 0 -> 3540498 bytes
10 files changed, 214 insertions(+), 230 deletions(-)
create mode 100644 bilder/Bildschirmfoto 2026-01-26 um 17.29.55.png
create mode 100644 bilder/Bildschirmfoto 2026-01-26 um 17.30.20.png
create mode 100644 bilder/Bildschirmfoto 2026-01-26 um 17.31.18.png
diff --git a/Extension/background.js b/Extension/background.js
index d099d67..d31f37e 100644
--- a/Extension/background.js
+++ b/Extension/background.js
@@ -53,7 +53,8 @@ chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
// eBay Parsing Response (from eBay content script)
if (msg?.action === "PARSE_COMPLETE") {
- handleParseComplete(sender.tab?.id, msg.data);
+ const tabId = sender?.tab?.id;
+ handleParseComplete(tabId, msg.data);
return true;
}
});
@@ -100,7 +101,10 @@ async function handleParseRequest(url, sendResponse) {
url: url,
active: false
});
-
+ if (!tab?.id) {
+ sendResponse({ ok: false, error: "Tab could not be created" });
+ return;
+ }
const tabId = tab.id;
console.log("[BACKGROUND] Tab created:", tabId);
@@ -330,6 +334,7 @@ function handleParseComplete(tabId, data) {
* Cleans up parse request: closes tab, clears timeout, sends response
*/
async function cleanupParseRequest(tabId, data, error) {
+ if (tabId == null) return;
const request = activeParseRequests.get(tabId);
if (!request) return;
@@ -410,7 +415,10 @@ async function handleScanProductsRequest(url, accountId, sendResponse) {
url: targetUrl,
active: false
});
-
+ if (!tab?.id) {
+ sendResponse({ ok: false, error: "Tab could not be created" });
+ return;
+ }
const tabId = tab.id;
// Set up timeout
@@ -562,7 +570,10 @@ async function loadAndParseEachItemTab(items) {
url: item.url,
active: false
});
-
+ if (!tab?.id) {
+ console.warn(`[BACKGROUND] Tab could not be created for item ${i + 1}, skipping`);
+ continue;
+ }
await new Promise((resolve) => {
const listener = (tabId, changeInfo) => {
if (tabId === tab.id && changeInfo.status === "complete") {
@@ -647,6 +658,7 @@ async function handleScanComplete(tabId, data) {
* Cleans up scan request: closes tab, clears timeout, sends response
*/
async function cleanupScanRequest(tabId, data, error) {
+ if (tabId == null) return;
const request = activeScanRequests.get(tabId);
if (!request) return;
@@ -751,7 +763,9 @@ async function handleParseAccountExtendedRequest(url, sendResponse) {
url: url,
active: false
});
-
+ if (!baseTab?.id) {
+ throw new Error("Tab could not be created");
+ }
await new Promise((resolve) => {
const checkLoaded = (tabId, changeInfo) => {
if (tabId === baseTab.id && changeInfo.status === 'complete') {
@@ -849,6 +863,10 @@ async function parseSingleTab(url, action, timeoutMs) {
url: url,
active: false
});
+ if (!tab?.id) {
+ reject(new Error("Tab could not be created"));
+ return;
+ }
tabId = tab.id;
// Set up timeout
diff --git a/Server/src/App.jsx b/Server/src/App.jsx
index 11b7722..5276a57 100644
--- a/Server/src/App.jsx
+++ b/Server/src/App.jsx
@@ -9,6 +9,7 @@ import {
IconSettings,
IconUserBolt,
IconShoppingBag,
+ IconRobot,
} from "@tabler/icons-react";
import { motion } from "motion/react";
import { cn } from "./lib/utils";
@@ -440,6 +441,17 @@ export default function App() {
navigate("/blacklist");
},
},
+ {
+ label: "KI",
+ href: "#/ki",
+ icon: (
+
KI-Seite wird hier angezeigt
+Product overview
-News
+ {loading ? ( +Product overview
+