mirror of
https://github.com/christianvidalwolf-prog/Craze-Data-check.git
synced 2026-08-03 13:05:25 +02:00
fix: enable real-time filtering for global search and fix selection bug
This commit is contained in:
@@ -53,7 +53,6 @@ export function PricingView({ data, headers, onSaveRow, onCaptureState, onEdit,
|
||||
const COLUMNS = useColumns();
|
||||
const [filterMode, setFilterMode] = useState<FilterMode>('all_errors');
|
||||
const [search, setSearch] = useState('');
|
||||
const [searchMode, setSearchMode] = useState<'all' | 'selected'>('all');
|
||||
const [currentPage, setCurrentPage] = useState(1);
|
||||
const pageSize = 100;
|
||||
const [columnWidths, setColumnWidths] = useState<Record<string, number>>({
|
||||
@@ -99,7 +98,7 @@ export function PricingView({ data, headers, onSaveRow, onCaptureState, onEdit,
|
||||
const [isFullscreen, setIsFullscreen] = useState(false);
|
||||
|
||||
const [isSearchOpen, setIsSearchOpen] = useState(false);
|
||||
const [selectedSearchItems, setSelectedSearchItems] = useState<Set<number>>(new Set());
|
||||
const [selectedSearchItems, setSelectedSearchItems] = useState<Set<string>>(new Set());
|
||||
const searchDropdownRef = useRef<HTMLDivElement>(null);
|
||||
|
||||
// Close search dropdown on click outside
|
||||
@@ -138,15 +137,11 @@ export function PricingView({ data, headers, onSaveRow, onCaptureState, onEdit,
|
||||
};
|
||||
|
||||
const handleApplySearch = () => {
|
||||
if (selectedSearchItems.size > 0) {
|
||||
setSearchMode('selected');
|
||||
}
|
||||
setIsSearchOpen(false);
|
||||
};
|
||||
|
||||
const handleClearSearch = () => {
|
||||
setSelectedSearchItems(new Set());
|
||||
setSearchMode('all');
|
||||
};
|
||||
|
||||
const handleResizeStart = (e: React.MouseEvent, colKey: string, currentWidth: number) => {
|
||||
@@ -343,7 +338,7 @@ export function PricingView({ data, headers, onSaveRow, onCaptureState, onEdit,
|
||||
}
|
||||
|
||||
// Selected items from search dropdown
|
||||
if (searchMode === 'selected' && selectedSearchItems.size > 0) {
|
||||
if (selectedSearchItems.size > 0) {
|
||||
result = result.filter(r => {
|
||||
const articleNo = String(r.row[COLUMNS.ARTICLE_NO] || '');
|
||||
return selectedSearchItems.has(articleNo);
|
||||
@@ -415,7 +410,7 @@ export function PricingView({ data, headers, onSaveRow, onCaptureState, onEdit,
|
||||
}
|
||||
|
||||
return result;
|
||||
}, [analyzedRows, filterMode, search, nameColFilter, articleNoColFilter, globalAdvancedFilter, lineMultiFilter, classificationFilter, productTypeFilter, unitsOuterFilter, outerWFilter, outerLFilter, outerHFilter, dynamicColFilters, weightIssueFilter, searchMode, selectedSearchItems]);
|
||||
}, [analyzedRows, filterMode, search, nameColFilter, articleNoColFilter, globalAdvancedFilter, lineMultiFilter, classificationFilter, productTypeFilter, unitsOuterFilter, outerWFilter, outerLFilter, outerHFilter, dynamicColFilters, weightIssueFilter, selectedSearchItems]);
|
||||
|
||||
// ── Sorted rows ──────────────────────────────────────────────────────────
|
||||
const sortedRows = useMemo(() => {
|
||||
@@ -806,7 +801,7 @@ export function PricingView({ data, headers, onSaveRow, onCaptureState, onEdit,
|
||||
</button>
|
||||
) : search ? (
|
||||
<button
|
||||
onClick={() => { setSearch(''); setSearchMode('all'); }}
|
||||
onClick={() => setSearch('')}
|
||||
className="absolute right-3 top-1/2 -translate-y-1/2 text-slate-400 hover:text-white"
|
||||
>
|
||||
<X className="w-4 h-4" />
|
||||
@@ -849,7 +844,9 @@ export function PricingView({ data, headers, onSaveRow, onCaptureState, onEdit,
|
||||
return (
|
||||
<button
|
||||
key={`${row[COLUMNS.ARTICLE_NO]}-${idx}`}
|
||||
onClick={() => {
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
const key = String(row[COLUMNS.ARTICLE_NO]);
|
||||
setSelectedSearchItems(prev => {
|
||||
const next = new Set(prev);
|
||||
|
||||
Reference in New Issue
Block a user