import { useMemo } from 'react'; import { useAppStore } from '@/store/app-store'; import { useTranslation } from 'react-i18next'; import type { PathEntry } from '@/core/path-entry'; export function MergePreview() { const sysPaths = useAppStore((s) => s.sysPaths); const userPaths = useAppStore((s) => s.userPaths); const searchQuery = useAppStore((s) => s.searchQuery); const { t } = useTranslation(); const allPaths = useMemo(() => { const seen = new Set(); const merged: (PathEntry & { source: string; displayIndex: number })[] = []; for (const entry of sysPaths) { const lower = entry.path.toLowerCase(); if (!seen.has(lower)) { seen.add(lower); merged.push({ ...entry, source: t('merge.system'), displayIndex: merged.length }); } } for (const entry of userPaths) { const lower = entry.path.toLowerCase(); if (!seen.has(lower)) { seen.add(lower); merged.push({ ...entry, source: t('merge.user'), displayIndex: merged.length }); } } if (!searchQuery) return merged; const q = searchQuery.toLowerCase(); return merged.filter((r) => r.path.toLowerCase().includes(q)); }, [sysPaths, userPaths, searchQuery, t]); return (
{allPaths.map(({ path, enabled, source, displayIndex }, rowIdx) => { const textColor = enabled ? 'var(--app-fg)' : '#6b7280'; const textDecoration = enabled ? 'none' : 'line-through'; const opacity = enabled ? 1 : 0.6; return ( ); })}
# {t('dialog.pathLabel')} {t('merge.source')}
{rowIdx + 1} {path} {source}
); }