fix(f5.1): make finding applicability filter explicit

This commit is contained in:
2026-09-09 08:49:30 -03:00
parent 9bd6c9cfd3
commit a22f4999c4
@@ -121,9 +121,9 @@ export function FindingCatalogTypeApplicabilityPanel() {
<div>
<span className="eyebrow">APLICABILIDAD POR INSTALACIÓN / SUBINSTALACIÓN</span>
<h2>Qué Hallazgos verá el inspector</h2>
<p className="section-copy">Al elegir una clasificación se muestran primero sólo sus Hallazgos asociados. Usá Todos para vincular únicamente cuando quieras agregar o quitar asociaciones.</p>
<p className="section-copy">Al elegir una clasificación se filtra inmediatamente a sus Hallazgos asociados. Para modificar la relación, abrí Todos para vincular.</p>
</div>
<span className="count-pill">{savedIds.size} asociados</span>
<span className="count-pill">{savedIds.size} vinculados</span>
</div>
{error && <Alert>{error}</Alert>}{success && <Alert type="success">{success}</Alert>}
<div className="form-grid finding-applicability-toolbar">
@@ -135,7 +135,7 @@ export function FindingCatalogTypeApplicabilityPanel() {
</option>)}
</SearchableSelect>
</label>
<label className="field"><span>Buscar Hallazgo</span><input value={search} onChange={(event) => setSearch(event.target.value)} placeholder="Título, código o categoría…" /></label>
<label className="field"><span>Buscar dentro de {viewMode === 'ASSOCIATED' ? 'los asociados' : 'todo el Catálogo'}</span><input value={search} onChange={(event) => setSearch(event.target.value)} placeholder="Título, código o categoría…" /></label>
</div>
{selectedFamily && <div className="temporal-notice">
<Icon name="layers" />
@@ -143,21 +143,26 @@ export function FindingCatalogTypeApplicabilityPanel() {
</div>}
<div className="quick-view-row" style={{ marginBottom: 12 }}>
<button type="button" className={viewMode === 'ASSOCIATED' ? 'active' : ''} onClick={() => setViewMode('ASSOCIATED')}>Asociados ({savedIds.size})</button>
<button type="button" className={viewMode === 'ALL' ? 'active' : ''} onClick={() => setViewMode('ALL')}>Todos para vincular ({available.length})</button>
<button type="button" className={viewMode === 'ASSOCIATED' ? 'active' : ''} onClick={() => { setViewMode('ASSOCIATED'); setSearch(''); }}>Asociados ({savedIds.size})</button>
<button type="button" className={viewMode === 'ALL' ? 'active' : ''} onClick={() => { setViewMode('ALL'); setSearch(''); }}>Todos para vincular ({catalog.items.filter((item) => item.isActive && activeCategoryIds.has(item.categoryId)).length})</button>
</div>
{viewMode === 'ASSOCIATED' && visible.length === 0
? <div className="inline-empty"><strong>Esta clasificación todavía no tiene Hallazgos asociados.</strong><br />Abrí Todos para vincular para elegirlos.</div>
? <div className="inline-empty"><strong>{search.trim() ? 'Ningún Hallazgo asociado coincide con la búsqueda.' : 'Esta clasificación todavía no tiene Hallazgos asociados.'}</strong><br />{!search.trim() && 'Abrí “Todos para vincular” para elegirlos.'}</div>
: <>
{viewMode === 'ALL' && <div className="catalog-selection-actions">
<button type="button" className="button secondary" onClick={selectVisible}>Seleccionar visibles</button>
<button type="button" className="button secondary" onClick={() => setEnabled(new Set())}>Quitar todos</button>
</div>}
<div className="finding-selection-list">{visible.map((item) => <label className="finding-selection-row" key={item.id}>
<input type="checkbox" checked={enabled.has(item.id)} onChange={() => toggle(item.id)} />
<span><strong>{item.title}</strong><small>{categoryName.get(item.categoryId) ?? 'Catálogo'} · {item.code}{item.suggestedSeverity ? ` · gravedad sugerida ${item.suggestedSeverity}/10` : ''}</small></span>
</label>)}</div>
<div className="finding-selection-list">{visible.map((item) => viewMode === 'ALL'
? <label className="finding-selection-row" key={item.id}>
<input type="checkbox" checked={enabled.has(item.id)} onChange={() => toggle(item.id)} />
<span><strong>{item.title}</strong><small>{categoryName.get(item.categoryId) ?? 'Catálogo'} · {item.code}{item.suggestedSeverity ? ` · gravedad sugerida ${item.suggestedSeverity}/10` : ''}</small></span>
</label>
: <div className="finding-selection-row" key={item.id}>
<span className="asset-symbol"><Icon name="check" size={14} /></span>
<span><strong>{item.title}</strong><small>{categoryName.get(item.categoryId) ?? 'Catálogo'} · {item.code}{item.suggestedSeverity ? ` · gravedad sugerida ${item.suggestedSeverity}/10` : ''}</small></span>
</div>)}</div>
</>}
{viewMode === 'ALL' && <>