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: ( + + ), + onClick: (e) => { + e.preventDefault(); + navigate("/ki"); + }, + }, { label: "Settings", href: "#", @@ -463,6 +475,17 @@ export default function App() { if (route === "/analysis") { return ; } + if (route === "/ki") { + return ( +
+
+ +

KI

+

KI-Seite wird hier angezeigt

+
+
+ ); + } // Default: Dashboard return ; }; diff --git a/Server/src/components/dashboard/sections/OverviewSection.jsx b/Server/src/components/dashboard/sections/OverviewSection.jsx index 77c5d84..4e1e779 100644 --- a/Server/src/components/dashboard/sections/OverviewSection.jsx +++ b/Server/src/components/dashboard/sections/OverviewSection.jsx @@ -161,17 +161,20 @@ export const OverviewSection = ({ onJumpToSection, activeAccountId }) => { }} />
-

Product overview

-
- {loading ? "Loading..." : kpis ? `${kpis.totalProducts} total products` : "No data"} -
+

News

+ {loading ? ( +
Loading...
+ ) : ( +
+
    +
  • - System update available
  • +
  • - New features released
  • +
  • - Dashboard improvements
  • +
+
+ )}
- +
Latest updates
@@ -206,6 +209,31 @@ export const OverviewSection = ({ onJumpToSection, activeAccountId }) => { + + {activeAccountId && !loading && !error && kpis && ( +
+
+
+

Product overview

+
+ {loading ? "Loading..." : kpis ? `${kpis.totalProducts} total products` : "No data"} +
+
+ +
+
+
+ )} ); }; diff --git a/Server/src/components/dashboard/sections/ProductsSection.jsx b/Server/src/components/dashboard/sections/ProductsSection.jsx index 36cf0b7..63a94c6 100644 --- a/Server/src/components/dashboard/sections/ProductsSection.jsx +++ b/Server/src/components/dashboard/sections/ProductsSection.jsx @@ -328,11 +328,15 @@ export const ProductsSection = ({ onJumpToSection, activeAccountId }) => { handleOpenProduct(row.$id)} renderCell={(col, row) => { if (col === "Action") { return (