@dflat-core/web 1.7.2076 → 1.7.2077

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dflat-core/web",
3
- "version": "1.7.2076",
3
+ "version": "1.7.2077",
4
4
  "description": "Librairies Angular Dflat (core, core-*, system-*) et assets partagés, empaquetées en un module npm unique.",
5
5
  "license": "MIT",
6
6
  "peerDependencies": {
@@ -148,10 +148,24 @@ export interface ViewFilterGroup {
148
148
  Logic: 'and' | 'or';
149
149
  Conditions: ViewFilterCondition[];
150
150
  Groups?: ViewFilterGroup[];
151
+ /**
152
+ * Groupe racine seulement : valeurs des filtres de l'écran (FilterPanel, critères du FilterViewModel)
153
+ * enregistrées avec la vue, par propriété. Appliquées au FilterPanel quand la vue est affichée, elles
154
+ * ne font pas partie du filtre SQL de la vue (voir withoutViewPanel).
155
+ */
156
+ Panel?: ViewFilterPanel;
151
157
  }
158
+ /** Valeurs des filtres de l'écran (FilterPanel) enregistrées avec une vue, par propriété du FilterViewModel. */
159
+ export type ViewFilterPanel = {
160
+ [property: string]: unknown;
161
+ };
162
+ /** Valeurs du FilterPanel d'un filtre de vue (sans valeur non définie), ou null s'il n'y en a pas. */
163
+ export declare function viewPanelOf(group: ViewFilterGroup | null | undefined): ViewFilterPanel | null;
164
+ /** Filtre de la vue sans les valeurs du FilterPanel : la partie envoyée au serveur (ViewQuery). */
165
+ export declare function withoutViewPanel(group: ViewFilterGroup | null | undefined): ViewFilterGroup | null;
152
166
  /** Opérateurs sans valeur. */
153
167
  export declare const ViewFilterNoValueOperators: ViewFilterOperator[];
154
- /** Groupe sans condition vide ni groupe vide ; null s'il ne reste rien. */
168
+ /** Groupe sans condition vide ni groupe vide (valeurs du FilterPanel gardées) ; null s'il ne reste rien. */
155
169
  export declare function normalizeViewFilter(group: ViewFilterGroup | null | undefined): ViewFilterGroup | null;
156
170
  /** Valeur de FilterViewModel.ViewQuery (et de PresentationProfile.FilterQuery) : le groupe en JSON, ou null. */
157
171
  export declare function toViewQuery(group: ViewFilterGroup | null | undefined): string | null;
@@ -230,22 +244,6 @@ export interface GridViewChooser {
230
244
  toggleColumn?(key: string, visible: boolean): Observable<boolean>;
231
245
  /** Colonnes affichées par la grille, dans leur ordre. */
232
246
  displayedColumns?(): string[];
233
- /** Vues Carte proposées, avec celle liée à la vue Grille affichée. */
234
- loadCards?(): Observable<{
235
- cards: {
236
- id: number;
237
- label: string;
238
- isDefault: boolean;
239
- }[];
240
- linkedId: number | null;
241
- canLink: boolean;
242
- }>;
243
- /** Lie la vue Grille affichée à la vue Carte donnée. */
244
- linkCard?(id: number | null): void;
245
- /** Personnalise la carte (fenêtre standard). */
246
- editCard?(): void;
247
- /** Fenêtre « Filtres et tri » : filtre et tri de la grille, enregistrables dans la vue. */
248
- editFilters?(): void;
249
247
  /** Déplace une colonne de la grille avant ou après une autre, sans enregistrer. */
250
248
  moveColumn?(key: string, targetKey: string, before: boolean): void;
251
249
  }
@@ -389,6 +387,69 @@ export declare class FilterContext<TData extends EntityViewModel, TFilter extend
389
387
  getViewQuery(): ViewFilterGroup | null;
390
388
  /** Filtre de la vue personnalisée : ajouté (ET) aux filtres de la grille ; null l'efface. */
391
389
  setViewQuery(group: ViewFilterGroup | null): void;
390
+ /**
391
+ * Filtre fixé par la vue affichée (filtre additionnel et valeurs du FilterPanel), avec le libellé de
392
+ * la vue ; null si la vue ne fixe aucun filtre. Ses valeurs du FilterPanel ne se modifient pas à
393
+ * l'écran ; il est décrit en texte au-dessus de la grille.
394
+ */
395
+ readonly viewFilter$: BehaviorSubject<{
396
+ label: string;
397
+ filter: ViewFilterGroup;
398
+ canEdit: boolean;
399
+ }>;
400
+ /**
401
+ * Mode édition du filtre de la vue (propriétaire de la vue ou administrateur) : ses valeurs du
402
+ * FilterPanel se modifient à l'écran, puis se réenregistrent dans la vue (viewFilterHandler.save).
403
+ */
404
+ readonly viewFilterEditing$: BehaviorSubject<boolean>;
405
+ /** Enregistrement et abandon du mode édition, fournis par la grille. */
406
+ viewFilterHandler?: {
407
+ save(): void;
408
+ cancel(): void;
409
+ };
410
+ /**
411
+ * Filtre fixé par la vue affichée ; null s'il n'y en a pas. Quitte le mode édition.
412
+ * @param canEdit L'utilisateur peut réenregistrer le filtre de la vue (sa vue, ou administrateur).
413
+ */
414
+ setViewFilter(label: string, filter: ViewFilterGroup | null, canEdit?: boolean): void;
415
+ /**
416
+ * Entre en mode édition du filtre de la vue (si la vue le permet) : son filtre additionnel revient dans
417
+ * les lignes de filtres en haut de la grille, quand il s'y écrit (voir setAdditionalQueryFromView).
418
+ */
419
+ editViewFilter(): void;
420
+ /**
421
+ * Écrit un filtre de vue dans les lignes du filtre additionnel de la grille : une ligne par groupe ET
422
+ * (lignes reliées par OU), une valeur par colonne (« ressemble à », * pour n'importe quelle suite :
423
+ * « contient », « commence par », « finit par » et « est égal à » s'y écrivent). Un filtre qui ne s'y
424
+ * écrit pas (autre comparaison, groupes imbriqués, deux conditions sur une colonne) n'est pas repris.
425
+ * @returns true si le filtre est repris dans les lignes.
426
+ */
427
+ setAdditionalQueryFromView(group: ViewFilterGroup): boolean;
428
+ /**
429
+ * Valeurs du FilterPanel fixées par la vue affichée, par propriété (non modifiables à l'écran) ;
430
+ * aucune en mode édition.
431
+ */
432
+ get lockedPanel(): ViewFilterPanel;
433
+ /**
434
+ * Valeurs du FilterPanel (critères du filtre de l'écran) qui diffèrent du filtre par défaut, par
435
+ * propriété : celles qu'une vue enregistre ; null si toutes sont celles par défaut.
436
+ * @param properties Propriétés du FilterPanel.
437
+ */
438
+ getPanelValues(properties: string[]): ViewFilterPanel | null;
439
+ /**
440
+ * Applique au FilterPanel les valeurs enregistrées dans une vue : les autres propriétés du FilterPanel
441
+ * reviennent au filtre par défaut de l'écran.
442
+ * @param properties Propriétés du FilterPanel.
443
+ * @param panel Valeurs de la vue, ou null.
444
+ */
445
+ setPanelValues(properties: string[], panel: ViewFilterPanel | null): void;
446
+ /**
447
+ * Filtre additionnel de la grille (lignes de filtres composés, AdditionalQuery) en filtre de vue : une
448
+ * ligne, ses conditions (ET) ; plusieurs lignes, un groupe OU de groupes ET. null sans condition.
449
+ */
450
+ getAdditionalQueryGroup(): ViewFilterGroup | null;
451
+ /** Vide le filtre additionnel de la grille (lignes de filtres composés). */
452
+ clearAdditionalQuery(): void;
392
453
  /** Tri combiné sur plusieurs colonnes ; une liste vide annule le tri. */
393
454
  setSortList(sorts: {
394
455
  property: string;
@@ -699,6 +760,8 @@ export interface LayoutPreferences {
699
760
  PropertyFlexGrow?: number;
700
761
  isFixed?: boolean;
701
762
  source?: 'default' | 'user' | 'fixed';
763
+ /** Affichage en cartes choisi par l'utilisateur pour l'écran (vue Carte), sinon la grille. */
764
+ CardMode?: boolean;
702
765
  }
703
766
  export interface LayoutKey {
704
767
  entityKey: string;
@@ -752,6 +815,18 @@ export declare class LayoutService {
752
815
  * @returns Fixed layout preferences or undefined if not set
753
816
  */
754
817
  getFixedLayoutPreferences(entityKey: string): LayoutPreferences | undefined;
818
+ /**
819
+ * Affichage en cartes enregistré pour l'écran (préférences de l'écran, gardées dans le navigateur).
820
+ * @param layoutKey Clé de l'écran (clé de l'entité).
821
+ * @returns true si l'utilisateur a choisi les cartes.
822
+ */
823
+ getCardMode(layoutKey: string): boolean;
824
+ /**
825
+ * Enregistre l'affichage choisi pour l'écran, cartes ou grille, dans ses préférences.
826
+ * @param layoutKey Clé de l'écran (clé de l'entité).
827
+ * @param value true pour les cartes, false pour la grille.
828
+ */
829
+ setCardMode(layoutKey: string, value: boolean): void;
755
830
  /**
756
831
  * Updates the vertical layout setting for an entity
757
832
  * @param entityKey Unique identifier for the entity
@@ -2199,6 +2274,7 @@ export declare class LayoutContext {
2199
2274
  readonly mobileEditorOpen$: import("rxjs").Observable<boolean>;
2200
2275
  get cardMode(): boolean;
2201
2276
  get narrow(): boolean;
2277
+ /** Cartes ou grille, choix enregistré dans les préférences de l'écran. */
2202
2278
  setCardMode(card: boolean): void;
2203
2279
  toggleCardMode(): void;
2204
2280
  /** Largeur de la fenêtre changée : écran étroit ou non ; l'éditeur plein écran se referme en grand écran. */
@@ -2811,17 +2887,17 @@ export declare abstract class BaseComponent<TFilter extends FilterViewModel, TDa
2811
2887
  * vues sur la vue affichée. Les colonnes d'une vue sont celles du serveur (GetGridColumns).
2812
2888
  */
2813
2889
  private registerViewChooser;
2814
- /** Tri et filtre de la vue affichée, tels qu'enregistrés (repère de la vue modifiée). */
2815
- private savedViewQueries;
2816
- /** Tri et filtre de la vue affichée lus une première fois (repère connu). */
2817
- private viewQueriesLoaded;
2818
- /** Tri et filtre en cours de la grille, en JSON (chaîne vide : aucun). */
2819
- private currentViewQueries;
2890
+ /** Champs du FilterPanel dont les valeurs sont enregistrées avec les vues. */
2891
+ private panelFields;
2892
+ private get panelProperties();
2820
2893
  /**
2821
- * Tri ou filtre changés depuis le chargement de la vue. Une vue sans tri enregistré a le tri par
2822
- * défaut de l'écran : ce tri-là ne la rend pas modifiée.
2894
+ * Tri et filtre en cours de la grille, en JSON (chaîne vide : aucun) ; le filtre porte le filtre de la
2895
+ * vue, le filtre additionnel de la grille (lignes de filtres composés) et les valeurs du FilterPanel
2896
+ * qui diffèrent du filtre par défaut (Panel).
2823
2897
  */
2824
- private viewQueriesModified;
2898
+ private currentViewQueries;
2899
+ /** Filtre de la vue et filtre additionnel de la grille, reliés par ET. */
2900
+ private static bothFilters;
2825
2901
  /**
2826
2902
  * Applique le tri et le filtre de la vue affichée. Au chargement de l'écran, un tri ou un filtre
2827
2903
  * déjà dans l'adresse (lien, retour) est gardé ; il sert alors de repère.
@@ -2834,10 +2910,15 @@ export declare abstract class BaseComponent<TFilter extends FilterViewModel, TDa
2834
2910
  * types énumérés). « Appliquer » enregistre la vue et la grille la relit (gridSelectionConfirmed$).
2835
2911
  */
2836
2912
  private openViewEditor;
2913
+ /**
2914
+ * Champ du FilterPanel proposé dans l'onglet « Filtres » des vues : type d'après le type du filtre,
2915
+ * valeurs d'une liste ; null pour un filtre sans saisie simple (fichier, arbre, bouton...).
2916
+ */
2917
+ private static panelColumnOf;
2837
2918
  /** Colonne de la fenêtre « Filtres et tri » : type d'après son affichage, valeurs d'un type énuméré. */
2838
2919
  private static filterColumnOf;
2839
2920
  private readonly hostElement;
2840
- /** Ordre des colonnes déjà proposé à l'enregistrement : la question n'est reposée qu'après un nouveau déplacement. */
2921
+ /** Colonnes déjà proposées à l'enregistrement : la question n'est reposée qu'après un nouveau changement. */
2841
2922
  private proposedColumnOrder;
2842
2923
  /** Colonnes affichées par la grille quand la vue y a été modifiée (déplacées, ajoutées, retirées). */
2843
2924
  private unsavedLayout;
@@ -2849,12 +2930,12 @@ export declare abstract class BaseComponent<TFilter extends FilterViewModel, TDa
2849
2930
  */
2850
2931
  private saveColumnOrderOnLeave;
2851
2932
  /**
2852
- * Changement d'onglet : l'écran quitté n'est pas détruit (il est gardé pour le retour), la
2853
- * question est donc posée au début de la navigation vers un autre écran, si cet écran est celui
2854
- * affiché (un écran gardé d'un autre onglet n'est plus dans la page). Une navigation qui reste
2855
- * sur l'écran (filtre dans l'adresse) ne pose pas la question.
2933
+ * Avant de quitter l'écran (autre onglet, autre écran ; CanDeactivateGuard) avec des colonnes
2934
+ * déplacées, ajoutées ou retirées : « Enregistrer la vue modifiée ? ». Oui : la vue est enregistrée et
2935
+ * on reste sur l'onglet ; non : les changements de colonnes sont annulés et on quitte l'écran.
2936
+ * @returns true pour quitter l'écran.
2856
2937
  */
2857
- private watchLeaveForColumnOrder;
2938
+ canLeaveView(): Observable<boolean> | boolean;
2858
2939
  /** Écran affiché dans la page (et non gardé, détaché, pour un autre onglet). */
2859
2940
  private isDisplayed;
2860
2941
  /**
@@ -4194,6 +4275,16 @@ export declare class DataGridComponent<TData extends EntityViewModel> implements
4194
4275
  rowDirectives: QueryList<ElementRef>;
4195
4276
  private columns;
4196
4277
  ngOnInit(): void;
4278
+ /** Page suivante demandée par le défilement : ses lignes s'ajoutent aux lignes affichées. */
4279
+ private appendingPage;
4280
+ /** Distance au bas de la grille à laquelle la page suivante est demandée (px). */
4281
+ private static readonly ScrollLoadThreshold;
4282
+ /**
4283
+ * Défilement de la grille : en approchant du bas, la page suivante est demandée et ses lignes
4284
+ * s'ajoutent à celles affichées, comme dans la liste de cartes (défilement continu). Un filtre ou un
4285
+ * tri changé revient à la première page.
4286
+ */
4287
+ onGridScroll(event: Event): void;
4197
4288
  private bindData;
4198
4289
  ngAfterViewInit(): void;
4199
4290
  private initViewReady;
@@ -6394,6 +6485,17 @@ export declare class FilterSummaryPanelComponent {
6394
6485
  guid: Guid;
6395
6486
  filterList: Array<IFilterDescriptorExtra>;
6396
6487
  isEmptyFilter(): boolean;
6488
+ /** Filtre fixé par la vue affichée, en texte (« Vue « Ma vue » : Statut : Actif, Libellé contient a »), ou vide. */
6489
+ viewFilterText: string;
6490
+ /** L'utilisateur peut modifier le filtre de la vue (sa vue, ou administrateur). */
6491
+ canEditViewFilter: boolean;
6492
+ /** Mode édition du filtre de la vue : filtres débloqués, à réenregistrer. */
6493
+ editingViewFilter: boolean;
6494
+ editViewFilter(): void;
6495
+ /** Réenregistre dans la vue le tri et les filtres de l'écran. */
6496
+ saveViewFilter(): void;
6497
+ /** Abandonne le mode édition : la vue est réappliquée. */
6498
+ cancelViewFilter(): void;
6397
6499
  constructor(validationService: ValidationService, bus: PropertyChangeBus, entityFacadeRegistryService: EntityFacadeRegistryService);
6398
6500
  facade: EntityFacade<EntityViewModel>;
6399
6501
  protected wrapper: FormWrapper;
@@ -6413,6 +6515,13 @@ export declare class FilterSummaryPanelComponent {
6413
6515
  updateFieldSummary(field: FilterDescriptor): void;
6414
6516
  getFilterSummaryValue(field: FilterDescriptor): string;
6415
6517
  resetFormControl(field: FilterDescriptor): void;
6518
+ /**
6519
+ * Texte du filtre fixé par une vue : ses valeurs du FilterPanel (libellé : valeur), puis son filtre
6520
+ * additionnel (colonne, comparaison, valeur ; groupes ET / OU entre parenthèses).
6521
+ */
6522
+ private describeViewFilter;
6523
+ private describePanel;
6524
+ private describeGroup;
6416
6525
  resetFieldData(field: FilterDescriptor): void;
6417
6526
  static ɵfac: i0.ɵɵFactoryDeclaration<FilterSummaryPanelComponent, never>;
6418
6527
  static ɵcmp: i0.ɵɵComponentDeclaration<FilterSummaryPanelComponent, "alg-filter-summary-panel", never, {
@@ -6785,14 +6894,12 @@ declare namespace grid_view_menu_component_d_exports {
6785
6894
  */
6786
6895
  export declare class GridViewMenuComponent implements OnInit {
6787
6896
  private readonly cd;
6897
+ private readonly host;
6788
6898
  /** Choix de la vue de la grille (BaseComponent). */
6789
6899
  chooser: GridViewChooser;
6790
6900
  /** Action faite : le menu qui contient ce contenu se ferme. */
6791
6901
  readonly done: EventEmitter<void>;
6792
- /**
6793
- * Téléphone : pas de sous-menu « Colonnes » (la liste de cartes n'utilise pas les colonnes de la
6794
- * vue) ; le sous-menu « Carte » s'ouvre en plein écran, au-dessus du menu, avec un retour.
6795
- */
6902
+ /** Téléphone : pas de sous-menu « Colonnes » (la liste de cartes n'utilise pas les colonnes de la vue). */
6796
6903
  mobile: boolean;
6797
6904
  /** Vues chargées (ou colonnes affichées) : le menu peut se replacer. */
6798
6905
  readonly loaded: EventEmitter<void>;
@@ -6802,7 +6909,23 @@ export declare class GridViewMenuComponent implements OnInit {
6802
6909
  search: string;
6803
6910
  /** Colonne en cours d'ajout ou de retrait. */
6804
6911
  pendingColumn: string | undefined;
6805
- constructor(cd: ChangeDetectorRef);
6912
+ constructor(cd: ChangeDetectorRef, host: ElementRef<HTMLElement>);
6913
+ /** Entrée du menu qui a ouvert le sous-menu affiché (replacement une fois son contenu chargé). */
6914
+ private submenuItem;
6915
+ /**
6916
+ * Position d'un sous-menu : à droite de son entrée (à gauche s'il ne tient pas), son haut aligné sur
6917
+ * celui de l'entrée ; s'il sort de la fenêtre en bas, il est remonté juste assez pour y tenir (jamais
6918
+ * au-dessus du haut de la fenêtre).
6919
+ * @param item Entrée du menu qui ouvre le sous-menu.
6920
+ * @param height Hauteur du sous-menu.
6921
+ * @param apply Reçoit la position calculée.
6922
+ */
6923
+ private placeSubmenu;
6924
+ /**
6925
+ * Contenu du sous-menu affiché chargé : il est replacé d'après sa hauteur réelle (aligné sur l'entrée
6926
+ * dès qu'il tient, une liste courte n'est pas remontée pour rien).
6927
+ */
6928
+ private refineSubmenu;
6806
6929
  ngOnInit(): void;
6807
6930
  isSelected(id: number): boolean;
6808
6931
  /** Cocher une vue l'affiche ; décocher la vue affichée revient à la vue par défaut. */
@@ -6817,35 +6940,14 @@ export declare class GridViewMenuComponent implements OnInit {
6817
6940
  };
6818
6941
  /**
6819
6942
  * Sous-menu « Colonnes », hors du menu : à droite de l'entrée, ou à gauche s'il dépasse de la
6820
- * fenêtre ; aligné sur l'entrée, remonté s'il dépasse en bas. Les colonnes sont relues à l'ouverture.
6943
+ * fenêtre ; aligné sur l'entrée, décalé vers le haut s'il dépasse en bas. Les colonnes sont relues à l'ouverture.
6821
6944
  */
6822
6945
  openColumns(event?: Event): void;
6823
6946
  closeColumns(): void;
6824
- cardsOpen: boolean;
6825
- cardsPosition: {
6826
- [key: string]: string;
6827
- };
6828
- cards: {
6829
- cards: {
6830
- id: number;
6831
- label: string;
6832
- isDefault: boolean;
6833
- }[];
6834
- linkedId: number | null;
6835
- canLink: boolean;
6836
- } | undefined;
6837
- /** Sous-menu « Carte », hors du menu, placé comme « Colonnes » ; les cartes sont relues à l'ouverture. */
6838
- openCards(event?: Event): void;
6839
- closeCards(): void;
6840
- /** Coche une carte : elle est liée à la vue Grille affichée (une vue de l'utilisateur). */
6841
- linkCard(id: number): void;
6842
- /** « Filtres et tri… » : fenêtre de paramétrage du filtre et du tri. */
6843
- editFilters(): void;
6844
- /** « Personnaliser la carte… » : fenêtre de la carte. */
6845
- editCard(): void;
6846
- /** Largeur et hauteur maximale du sous-menu « Colonnes ». */
6947
+ /** Largeur du sous-menu « Colonnes ». */
6847
6948
  private static readonly ColumnsWidth;
6848
- private static readonly ColumnsHeight;
6949
+ /** Hauteur maximale du sous-menu (recherche et liste de 270 px), retenue avant que son contenu soit chargé. */
6950
+ private static readonly SubmenuHeight;
6849
6951
  /** Ordre des colonnes affichées, tenu à jour à chaque action (la grille suit). */
6850
6952
  private visibleOrder;
6851
6953
  private loadColumns;
@@ -6894,7 +6996,7 @@ export declare class CoreUxModule {
6894
6996
  export declare class CanDeactivateGuard {
6895
6997
  modalService: ModalService;
6896
6998
  constructor(modalService: ModalService);
6897
- canDeactivate(component: DflatBaseComponent, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState?: RouterStateSnapshot): Observable<ConfirmOptions> | Promise<ConfirmOptions> | boolean;
6999
+ canDeactivate(component: DflatBaseComponent, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState?: RouterStateSnapshot): Observable<ConfirmOptions | boolean> | Promise<ConfirmOptions> | boolean;
6898
7000
  static ɵfac: i0.ɵɵFactoryDeclaration<CanDeactivateGuard, never>;
6899
7001
  static ɵprov: i0.ɵɵInjectableDeclaration<any>;
6900
7002
  }
@@ -7020,17 +7122,6 @@ export interface PpCardView {
7020
7122
  sourceType: number;
7021
7123
  }[];
7022
7124
  }
7023
- /** Vues Carte proposées pour la grille : la vue Carte liée à la vue Grille affichée est cochée. */
7024
- export interface PpCardViews {
7025
- cards: {
7026
- id: number;
7027
- label: string;
7028
- isDefault: boolean;
7029
- }[];
7030
- linkedId: number | null;
7031
- /** La vue Grille affichée est une vue de l'utilisateur : sa carte peut changer. */
7032
- canLink: boolean;
7033
- }
7034
7125
  /** Tri et filtre enregistrés avec une vue, en JSON ; chaîne vide : aucun. */
7035
7126
  export interface PpViewQueries {
7036
7127
  sortQuery: string;
@@ -7054,6 +7145,16 @@ export interface IPpService {
7054
7145
  label: string;
7055
7146
  }[];
7056
7147
  }[];
7148
+ panelFields?: {
7149
+ key: string;
7150
+ label: string;
7151
+ type: string;
7152
+ values?: {
7153
+ value: string;
7154
+ label: string;
7155
+ }[];
7156
+ }[];
7157
+ gridQueries?: PpViewQueries;
7057
7158
  }): void;
7058
7159
  /**
7059
7160
  * Ouvre l'éditeur des vues personnalisées (écran des vues, filtré sur la table de la grille et
@@ -7076,6 +7177,22 @@ export interface IPpService {
7076
7177
  saveColumnOrder(config: PpGridConfig & {
7077
7178
  title: string;
7078
7179
  }, columnOrder: string[], queries?: PpViewQueries): void;
7180
+ /**
7181
+ * Avant de quitter un écran dont les colonnes ont changé : « Enregistrer la vue modifiée ? ». Oui :
7182
+ * les colonnes données (avec le tri et le filtre donnés) sont enregistrées dans la vue de l'utilisateur
7183
+ * affichée, ou dans une nouvelle vue (vue par défaut affichée), et émet false (on reste sur l'écran) ;
7184
+ * non : émet true (on quitte l'écran, les changements sont abandonnés).
7185
+ */
7186
+ confirmLeaveView(config: PpGridConfig & {
7187
+ title: string;
7188
+ }, columnOrder: string[], queries?: PpViewQueries): Observable<boolean>;
7189
+ /**
7190
+ * Mode édition du filtre de la vue : enregistre dans la vue affichée (vue de l'utilisateur, ou vue par
7191
+ * défaut pour un administrateur) ses colonnes, avec le tri et le filtre donnés ; émet true une fois enregistré.
7192
+ */
7193
+ saveViewFilter(config: PpGridConfig & {
7194
+ title: string;
7195
+ }, columnOrder: string[], queries: PpViewQueries): Observable<boolean>;
7079
7196
  /**
7080
7197
  * Bouton d'enregistrement de la barre du bas de la grille : enregistre les colonnes données dans la
7081
7198
  * vue de l'utilisateur affichée, sans demander ; la vue par défaut affichée, elle, demande le nom
@@ -7085,25 +7202,16 @@ export interface IPpService {
7085
7202
  saveCurrentColumnOrder(config: PpGridConfig & {
7086
7203
  title: string;
7087
7204
  }, columnOrder: string[], queries?: PpViewQueries): Observable<boolean>;
7088
- /** « Nouvelle vue » : copie la vue affichée en une nouvelle vue de l'utilisateur, qui devient la vue affichée. */
7089
- createView(config: PpGridConfig): Observable<boolean>;
7205
+ /**
7206
+ * « Nouvelle vue » : copie la vue affichée en une nouvelle vue de l'utilisateur, qui devient la vue
7207
+ * affichée ; avec le tri et le filtre donnés (ceux de la grille : tri, FilterPanel et filtre additionnel).
7208
+ */
7209
+ createView(config: PpGridConfig, queries?: PpViewQueries): Observable<boolean>;
7090
7210
  /**
7091
7211
  * Vue Carte de la vue Grille affichée (à défaut la vue Carte par défaut) : colonne de chaque
7092
7212
  * emplacement (clé, emplacement EnumCardSlots, source), ou null si la table n'en a pas.
7093
7213
  */
7094
7214
  loadCardView(config: PpGridConfig): Observable<PpCardView | null>;
7095
- /** Vues Carte proposées pour la grille, avec celle liée à la vue Grille affichée. */
7096
- loadCardViews(config: PpGridConfig): Observable<PpCardViews>;
7097
- /** Lie la vue Grille affichée (une vue de l'utilisateur) à la vue Carte donnée ; émet true une fois liée. */
7098
- linkCardView(config: PpGridConfig, cardId: number | null): Observable<boolean>;
7099
- /**
7100
- * Personnalisation de la carte (fenêtre standard) : la carte de l'utilisateur est modifiée, une
7101
- * carte par défaut donne une nouvelle carte, liée à la vue Grille affichée ; émet true une fois
7102
- * enregistrée.
7103
- */
7104
- editCardView(config: PpGridConfig & {
7105
- title: string;
7106
- }): Observable<boolean>;
7107
7215
  /** Colonnes disponibles de la table (catalogue, attributs compris), avec celles de la vue affichée. */
7108
7216
  loadViewColumns(config: PpGridConfig): Observable<GridColumnChoice[]>;
7109
7217
  /** Opens the column selector modal for Export purpose. */
@@ -7696,6 +7804,36 @@ export declare class FilterEditorComponent {
7696
7804
  * des vues) ; null : les deux, en onglets.
7697
7805
  */
7698
7806
  section: 'filters' | 'sort' | null;
7807
+ /**
7808
+ * Champs du FilterPanel de l'écran (onglet « Filtres » des vues) : leurs valeurs sont enregistrées
7809
+ * dans la vue (filter.Panel) et appliquées au FilterPanel quand la vue est affichée.
7810
+ */
7811
+ panelFields: FilterEditorColumn[];
7812
+ trackKey(_: number, field: FilterEditorColumn): string;
7813
+ /** Valeurs du FilterPanel du filtre, créées au besoin (modifiées en place). */
7814
+ get panel(): {
7815
+ [property: string]: unknown;
7816
+ };
7817
+ /** Champs du FilterPanel ajoutés, sans valeur encore saisie. */
7818
+ private addedPanelKeys;
7819
+ /**
7820
+ * Filtres de l'écran de la vue : les champs du FilterPanel qui ont une valeur, ou qu'on vient
7821
+ * d'ajouter ; une valeur enregistrée d'un champ inconnu (éditeur ouvert hors de la grille) en texte.
7822
+ */
7823
+ shownPanelFields(): FilterEditorColumn[];
7824
+ /** Champs du FilterPanel qu'on peut encore ajouter. */
7825
+ availablePanelFields(): FilterEditorColumn[];
7826
+ /** Ajoute un filtre de l'écran (sa valeur se saisit ensuite). */
7827
+ addPanelField(key: string): void;
7828
+ /** Retire un filtre de l'écran : le champ reprend la valeur par défaut de l'écran. */
7829
+ removePanelField(field: FilterEditorColumn): void;
7830
+ /** Valeur d'un champ du FilterPanel, pour la saisie (chaîne ; vide : aucune). */
7831
+ panelValue(field: FilterEditorColumn): string;
7832
+ /**
7833
+ * Saisie d'un champ du FilterPanel : nombre pour un champ numérique ou une liste d'identifiants,
7834
+ * oui / non pour une case ; vide retire le champ (valeur par défaut de l'écran).
7835
+ */
7836
+ setPanelValue(field: FilterEditorColumn, raw: string | boolean): void;
7699
7837
  /** Vue où enregistrer ; la case est grisée sans vue modifiable. */
7700
7838
  viewLabel: string;
7701
7839
  canSaveInView: boolean;
@@ -7755,6 +7893,10 @@ export declare class FilterEditorComponent {
7755
7893
  "alias": "section";
7756
7894
  "required": false;
7757
7895
  };
7896
+ "panelFields": {
7897
+ "alias": "panelFields";
7898
+ "required": false;
7899
+ };
7758
7900
  }, {}, never, never, true, never>;
7759
7901
  }
7760
7902
  export declare const EXTENDED_ACTION_COMPONENT: InjectionToken<Type<unknown>>;
@@ -364,6 +364,7 @@ export declare class PresentationProfileDataService extends EntityDataService<Pr
364
364
  getUserViews(request: PresentationViewRequest): Observable<PresentationViews>;
365
365
  linkCardView(request: PresentationViewRequest): Observable<SaveResult>;
366
366
  renameView(request: PresentationViewRequest): Observable<SaveResult>;
367
+ saveGridCard(model: PresentationContext): Observable<SaveResult>;
367
368
  savePresentationProfile(model: PresentationContext): Observable<SaveResult>;
368
369
  selectView(request: PresentationViewRequest): Observable<SaveResult>;
369
370
  static ɵfac: i0.ɵɵFactoryDeclaration<PresentationProfileDataService, never>;
@@ -1601,10 +1601,12 @@ export interface PresentationViews {
1601
1601
  Views?: PresentationProfile[];
1602
1602
  }
1603
1603
  export interface PresentationViewRequest {
1604
+ FilterQuery?: string;
1604
1605
  Label?: string;
1605
1606
  MetaEntityKey?: string;
1606
1607
  PresentationProfileId?: number;
1607
1608
  PresentationProfilePurpose?: number;
1609
+ SortQuery?: string;
1608
1610
  }
1609
1611
  export interface PresentationProfileItemFilterViewModel extends EntityFilterViewModel<PresentationProfileItemView> {
1610
1612
  ColumnKey?: string;
@@ -1629,6 +1631,7 @@ export interface PresentationProfileFilterViewModel extends EntityFilterViewMode
1629
1631
  export interface PresentationContext {
1630
1632
  Catalog?: PresentationProfileItem[];
1631
1633
  DefaultProfile?: PresentationProfile;
1634
+ GridViewId?: number;
1632
1635
  IsUserProfile?: boolean;
1633
1636
  Profile?: PresentationProfile;
1634
1637
  Resolved?: PresentationProfileItem[];