@esfaenza/core 20.3.72 → 20.3.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -652,6 +652,34 @@ declare abstract class BaseSearchComponent<TSearch extends AppSearch<TItem>, TIt
652
652
  constructor(injector: Injector);
653
653
  ngOnInit(): void;
654
654
  private init;
655
+ /**
656
+ * Dimensione di pagina a partire dalla quale la ricerca è di fatto "tutti gli
657
+ * elementi": è il valore con cui l'es-table rende la voce "Tutti" del paginatore.
658
+ */
659
+ protected readonly TuttiGliElementi: number;
660
+ /**
661
+ * Rimette a posto la paginazione di una ricerca RIPRESA dallo storage.
662
+ *
663
+ * I filtri vanno ripresi — è tutto il senso della "hot view" — ma la dimensione
664
+ * di pagina no: se l'utente sceglie "Tutti" anche una volta sola, quel valore
665
+ * finisce nello storage e da lì in avanti OGNI ingresso nella pagina chiede al
666
+ * backend l'intero risultato. Su una ricerca da decine di migliaia di righe la
667
+ * tabella le rende tutte e la pagina si pianta per minuti, senza che chi la apre
668
+ * possa collegare la causa all'effetto: la scelta era stata fatta giorni prima.
669
+ *
670
+ * Una pagina si riapre quindi sempre con la dimensione di default. "Tutti" resta
671
+ * disponibile, ma come scelta esplicita e valida per la sessione in corso.
672
+ * Gira PRIMA di `afterLoadView`, così una pagina che volesse davvero ripartire
673
+ * da "tutti" può ancora imporlo di suo.
674
+ */
675
+ private sanitizePagination;
676
+ /**
677
+ * Regola pura: una dimensione di pagina è accettabile se è positiva e sta sotto
678
+ * la soglia del "tutti". Isolata qui perché è l'unico pezzo con dei casi limite
679
+ * (0, negativi, `undefined`, i 9.999.999 di `AppSearch.toSelectAll`) e così si
680
+ * può verificare senza montare il componente.
681
+ */
682
+ protected static dimensionePaginaAccettabile(ipp: number, tuttiGliElementi: number): boolean;
655
683
  private createOrLoadView;
656
684
  sendSearch(): void;
657
685
  onSearchRequest(resetPage?: boolean): void;
@@ -2298,6 +2298,11 @@ class BaseSearchComponent extends BaseComponent {
2298
2298
  super(injector);
2299
2299
  //@ViewChild(EsFiltersComponent, { static: false }) filters: EsFiltersComponent;
2300
2300
  this.searchView = null;
2301
+ /**
2302
+ * Dimensione di pagina a partire dalla quale la ricerca è di fatto "tutti gli
2303
+ * elementi": è il valore con cui l'es-table rende la voce "Tutti" del paginatore.
2304
+ */
2305
+ this.TuttiGliElementi = 999999;
2301
2306
  this.location = injector.get(Location);
2302
2307
  this.lc = injector.get(LocalizationService);
2303
2308
  this.localStorage = injector.get(CacheService);
@@ -2337,9 +2342,40 @@ class BaseSearchComponent extends BaseComponent {
2337
2342
  await firstValueFrom(this.localStorage.removeItem(this.HotView));
2338
2343
  }
2339
2344
  }
2345
+ /**
2346
+ * Rimette a posto la paginazione di una ricerca RIPRESA dallo storage.
2347
+ *
2348
+ * I filtri vanno ripresi — è tutto il senso della "hot view" — ma la dimensione
2349
+ * di pagina no: se l'utente sceglie "Tutti" anche una volta sola, quel valore
2350
+ * finisce nello storage e da lì in avanti OGNI ingresso nella pagina chiede al
2351
+ * backend l'intero risultato. Su una ricerca da decine di migliaia di righe la
2352
+ * tabella le rende tutte e la pagina si pianta per minuti, senza che chi la apre
2353
+ * possa collegare la causa all'effetto: la scelta era stata fatta giorni prima.
2354
+ *
2355
+ * Una pagina si riapre quindi sempre con la dimensione di default. "Tutti" resta
2356
+ * disponibile, ma come scelta esplicita e valida per la sessione in corso.
2357
+ * Gira PRIMA di `afterLoadView`, così una pagina che volesse davvero ripartire
2358
+ * da "tutti" può ancora imporlo di suo.
2359
+ */
2360
+ sanitizePagination(view) {
2361
+ if (BaseSearchComponent.dimensionePaginaAccettabile(view.itemsperpageoverride, this.TuttiGliElementi))
2362
+ return;
2363
+ view.itemsperpageoverride = new this.SearchType().itemsperpageoverride;
2364
+ view.page = 1; // la pagina corrente non ha più senso con un'altra dimensione
2365
+ }
2366
+ /**
2367
+ * Regola pura: una dimensione di pagina è accettabile se è positiva e sta sotto
2368
+ * la soglia del "tutti". Isolata qui perché è l'unico pezzo con dei casi limite
2369
+ * (0, negativi, `undefined`, i 9.999.999 di `AppSearch.toSelectAll`) e così si
2370
+ * può verificare senza montare il componente.
2371
+ */
2372
+ static dimensionePaginaAccettabile(ipp, tuttiGliElementi) {
2373
+ return ipp > 0 && ipp < tuttiGliElementi;
2374
+ }
2340
2375
  createOrLoadView(HotPotato) {
2341
2376
  if (HotPotato) {
2342
2377
  this.searchView = HotPotato;
2378
+ this.sanitizePagination(this.searchView);
2343
2379
  this.afterLoadView(this.searchView);
2344
2380
  }
2345
2381
  else {