Open and retain tender details discovered outside the main pool

This commit is contained in:
2026-09-06 10:01:34 +03:00
parent 819a10c006
commit a136a74a1b
8 changed files with 66 additions and 6 deletions
+11 -1
View File
@@ -1,3 +1,4 @@
import { searchTender } from '../services/searchTender';
import { normalizeTenderSearch, matchingItemResults } from '../services/tenderSearch';
import React, {createContext, useContext, useState, useEffect, useMemo, useRef } from 'react';
import { parseWebsiteCapabilitiesDynamically } from '../services/webScraperService';
@@ -281,6 +282,14 @@ export const AppProvider = ({ children }) => {
}, []);
const [activeTenderDetail, setActiveTenderDetail] = useState(null);
const openSearchTender = (result) => {
const existing=tenders.find(t=>t.ikn===result.ikn);
const candidate=existing || searchTender(result);
const merged=applyTenderStates([candidate],savedTenderStates.current).find(t=>t.ikn===candidate.ikn) || candidate;
if(!existing) setTenders(previous=>previous.some(t=>t.ikn===merged.ikn) ? previous : [...previous,merged]);
setActiveTenderDetail(merged);
};
const [detailLoad, setDetailLoad] = useState(null);
const [detailRetry, setDetailRetry] = useState(0);
const retryTenderDetail = () => setDetailRetry(value => value + 1);
@@ -288,7 +297,7 @@ export const AppProvider = ({ children }) => {
// Canlı ihalede detay açıldığında ilan metnini API'den tamamla
useEffect(() => {
const t = activeTenderDetail;
if (!t || !t.id?.startsWith('ilan-') || t.aciklama) { setDetailLoad(null); return; }
if (!t || !(t.id?.startsWith('ilan-') || t.id?.startsWith('ekap-')) || t.aciklama) { setDetailLoad(null); return; }
let cancelled = false;
const controller = new AbortController();
setDetailLoad({id:t.id,status:'loading'});
@@ -744,6 +753,7 @@ export const AppProvider = ({ children }) => {
addSavedFilter,
deleteSavedFilter,
activeTenderDetail,
openSearchTender,
detailLoad,
retryTenderDetail,
setActiveTenderDetail,