feat: deduplicazione lista canti comunità con precedenza al canto non validato
- In HomePage, dopo il filtro per comunità, viene applicata una deduplicazione basata sull'id_canti: se lo stesso canto esiste sia nella lista globale (validato) sia in quella parrocchiale (non validato), viene mantenuto solo quello non validato. - In HomePage.findCanto(), Player, Display e Playlist: quando il filtro comunità è attivo, la ricerca di un canto per ID dà precedenza alla lista comunitaCantiPersonali rispetto al catalogo globale. - In PlaylistPage: aggiunta gestione completa delle sorgenti (global, my-canti, canti personali comunità) con stesso ordine di priorità.
This commit is contained in:
@@ -123,6 +123,22 @@ export class HomePage implements OnDestroy {
|
||||
list = list.filter(c => {
|
||||
return comunitaIds.includes(c.id_canti) || comunitaIds.includes(c.id);
|
||||
});
|
||||
|
||||
// Deduplicate: if a song exists in both validated and unvalidated lists, keep only the unvalidated/custom one
|
||||
const seen = new Map<number | string, any>();
|
||||
for (const canto of list) {
|
||||
const key = canto.id_canti || canto.id;
|
||||
const existing = seen.get(key);
|
||||
if (!existing) {
|
||||
seen.set(key, canto);
|
||||
} else {
|
||||
// Precedence to unvalidated/custom version
|
||||
if (canto.nonValidato) {
|
||||
seen.set(key, canto);
|
||||
}
|
||||
}
|
||||
}
|
||||
list = Array.from(seen.values());
|
||||
|
||||
// Sort list by community song number (num_canto) ASC!
|
||||
const cantiInfo = this.comunitaService.comunitaCantiInfo();
|
||||
@@ -332,6 +348,10 @@ export class HomePage implements OnDestroy {
|
||||
}
|
||||
|
||||
findCanto(id: string) {
|
||||
if (this.comunitaService.comunitaCode() && this.comunitaService.isFilterActive()) {
|
||||
const personal = this.comunitaService.comunitaCantiPersonali().find(c => c.id === id);
|
||||
if (personal) return personal;
|
||||
}
|
||||
return [
|
||||
...this.cantiService.canti(),
|
||||
...this.myCantiService.myCanti(),
|
||||
|
||||
Reference in New Issue
Block a user