@dflat-core/web 1.0.60 → 1.0.61

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.0.60",
3
+ "version": "1.0.61",
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": {
@@ -321,6 +321,44 @@ export declare class UserUpdatedMessage {
321
321
  userKey: string;
322
322
  constructor(userKey: string);
323
323
  }
324
+ /**
325
+ * Message du bus : un profil de présentation partagé (par défaut, par rôle ou par fournisseur) a
326
+ * été modifié (signal PresentationChanged du hub, envoyé par le serveur après son enregistrement).
327
+ * Le cache d'initialisation de l'entité est vidé et les grilles ouvertes rechargent leurs colonnes.
328
+ */
329
+ export declare class PresentationChangedMessage {
330
+ entityName: string | null;
331
+ stamp?: number;
332
+ /**
333
+ * @param entityName Nom de l'entité du profil (ex. Company), ou null : toutes les entités.
334
+ * @param stamp Nouvel horodatage du cache client annoncé par le serveur.
335
+ */
336
+ constructor(entityName: string | null, stamp?: number);
337
+ /**
338
+ * Vrai si le message concerne l'écran de clé entityKey : même nom sans tenir compte de la
339
+ * casse ni du suffixe View (un écran porte sur la table ou sur sa vue principale).
340
+ */
341
+ concerns(entityKey: string): boolean;
342
+ }
343
+ /**
344
+ * Message du bus : un formulaire enregistré en base a été modifié (signal FormChanged du hub,
345
+ * envoyé par le serveur après l'enregistrement d'un formulaire, d'une section ou d'un champ).
346
+ * Le cache d'initialisation de l'entité est vidé et les écrans ouverts rechargent leur formulaire.
347
+ */
348
+ export declare class FormChangedMessage {
349
+ entityName: string | null;
350
+ stamp?: number;
351
+ /**
352
+ * @param entityName Nom de l'entité du formulaire (ex. Country), ou null : tous les formulaires.
353
+ * @param stamp Nouvel horodatage du cache client annoncé par le serveur.
354
+ */
355
+ constructor(entityName: string | null, stamp?: number);
356
+ /**
357
+ * Vrai si le message concerne l'écran de clé entityKey : même nom sans tenir compte de la
358
+ * casse ni du suffixe View (un écran porte sur la table ou sur sa vue principale).
359
+ */
360
+ concerns(entityKey: string): boolean;
361
+ }
324
362
  export interface IUserCredential extends IIdentifiable {
325
363
  AccessToken: string;
326
364
  RefreshToken: string;
@@ -429,7 +429,9 @@ export declare class HubService {
429
429
  *
430
430
  * Le cache est vidé quand le jeton d'accès reçu (connexion, rafraîchissement, déconnexion)
431
431
  * porte un autre horodatage serveur (claim "cachestamp", régénéré à chaque redémarrage de l'API
432
- * ou par Config/ResetClientCache) ou un autre utilisateur.
432
+ * ou par Config/ResetClientCache, ou après la modification d'un formulaire) ou un autre
433
+ * utilisateur. Les entrées d'une entité sont aussi vidées dès que le hub signale que son
434
+ * formulaire a été modifié (FormChangedMessage).
433
435
  */
434
436
  export declare class InitCacheService {
435
437
  static readonly CACHE_STAMP = "cachestamp";
@@ -445,6 +447,10 @@ export declare class InitCacheService {
445
447
  get<T>(key: string, factory: () => Observable<T>): Observable<T>;
446
448
  /** Vide le cache, ou seulement les entrées dont la clé commence par le préfixe. */
447
449
  clear(prefix?: string): void;
450
+ /** Formulaire modifié : vide les entrées de l'entité (clé « entité/... »), ou tout le cache. */
451
+ private onFormChanged;
452
+ /** Profil de présentation modifié : vide les entrées de l'entité (clé « entité/... »), ou tout le cache. */
453
+ private onPresentationChanged;
448
454
  private onTokenChanged;
449
455
  /** Identité du cache : horodatage serveur et utilisateur du jeton (null sans jeton). */
450
456
  private readStamp;
@@ -123,6 +123,12 @@ export declare class DataServiceDouble {
123
123
  entityKey: string;
124
124
  id: number;
125
125
  }[];
126
+ /** Nombre de lectures des colonnes de la grille (getViewColumns). */
127
+ columnCalls: number;
128
+ /** Entités dont le cache d'initialisation a été vidé (clearCached), dans l'ordre. */
129
+ readonly clearedCaches: string[];
130
+ /** Nombre de lectures du formulaire (getEntityViewModel). */
131
+ viewModelCalls: number;
126
132
  /** Résultat renvoyé par search. */
127
133
  searchResult: PagedList<EntityViewModel>;
128
134
  /** Entité renvoyée par getDetails. */
@@ -141,6 +147,8 @@ export declare class DataServiceDouble {
141
147
  getEmptyFilter<TFilter>(): Observable<TFilter>;
142
148
  /** Formulaire vide, sans champ. */
143
149
  getEntityViewModel<TData>(): Observable<EntityViewModelWithFields<TData>>;
150
+ /** Enregistre l'entité dont le cache d'initialisation est vidé. */
151
+ clearCached(entityKey?: string): void;
144
152
  /** Actions étendues : aucune. */
145
153
  getExtendedActions(): Observable<ActionDescriptor[]>;
146
154
  /** Valeur d'initialisation calculée par le front : calculée à chaque appel, sans cache. */
@@ -2,7 +2,7 @@ import * as i0 from "@angular/core";
2
2
  import { AfterContentInit, AfterViewChecked, AfterViewInit, ChangeDetectorRef, ComponentRef, ElementRef, EventEmitter, InjectionToken, Injector, IterableDiffers, NgZone, OnChanges, OnDestroy, OnInit, PipeTransform, QueryList, Renderer2, SimpleChanges, TemplateRef, Type, ViewContainerRef } from "@angular/core";
3
3
  import * as i89 from "@dflat-core/web/core-model";
4
4
  import { ActionDescriptor, AggregateFunction, AggregationValue, ColumnDescriptor, DictionnaryWrapper, EntityConfig, EntityViewModel, EntityViewModelWithFields, ExtendedProperty, FieldDescriptor, FieldEvent, FieldValidators, FilterDescriptor, FilterQuery, FilterRow, FilterType, FilterViewModel, IFilterDescriptorExtra, Notification, PagedList, PropertyEditorEvent, RunActionContext, SaveResult, SaveResults, Section, SectionError, SpecificSection, TextZoneButtonEvent, TrackRecordProperty, User } from "@dflat-core/web/core-model";
5
- import { AuthService, BreadcrumbService, FilterService, HubService, LocalStoreManager, MenuItem, MenuService, NotificationMqService, UserService } from "@dflat-core/web/core-services";
5
+ import { AuthService, BreadcrumbService, BusMessageService, FilterService, HubService, LocalStoreManager, MenuItem, MenuService, NotificationMqService, UserService } from "@dflat-core/web/core-services";
6
6
  import * as i90 from "@angular/forms";
7
7
  import { AbstractControl, ControlValueAccessor, FormBuilder, FormControl, FormGroup, NgForm, UntypedFormControl, UntypedFormGroup, ValidatorFn } from "@angular/forms";
8
8
  import { BehaviorSubject, Observable, Subject, Subscription } from "rxjs";
@@ -101,10 +101,20 @@ export declare class EntityConfigContext<TData extends EntityViewModel, TFilter
101
101
  private entityKey;
102
102
  private readonly columnSource$;
103
103
  setColumnSource(factory: () => Observable<ColumnDescriptor[]>): void;
104
+ /**
105
+ * Recharge les colonnes de la grille par leur source courante : à appeler après avoir vidé le
106
+ * cache d'initialisation de l'entité, quand sa présentation par défaut a été modifiée en base.
107
+ */
108
+ reloadColumns(): void;
104
109
  private readonly alteredColumns$;
105
110
  readonly columns$: Observable<ColumnDescriptor[]>;
106
111
  private readonly viewModelSource$;
107
112
  setviewModelSource(factory: () => Observable<EntityViewModelWithFields<TData>>): void;
113
+ /**
114
+ * Recharge le formulaire (sections et champs) par sa source courante : à appeler après avoir
115
+ * vidé le cache d'initialisation de l'entité, quand le formulaire a été modifié en base.
116
+ */
117
+ reloadViewModel(): void;
108
118
  private readonly alteredViewModel$;
109
119
  readonly viewModel$: Observable<any>;
110
120
  updateFieldSections(newSections: Section[]): void;
@@ -2209,6 +2219,13 @@ export declare abstract class BaseComponent<TFilter extends FilterViewModel, TDa
2209
2219
  IsTheMainComponent: boolean;
2210
2220
  actionBarSearchText: string;
2211
2221
  newEditor: NewEditorComponent<TData>;
2222
+ /**
2223
+ * Éditeur spécifique de l'entité : composant affiché à la place du formulaire d'édition standard
2224
+ * (celui du contrôleur). Non renseigné, l'écran garde le formulaire standard. Le composant reçoit
2225
+ * `entityKey` et `guid` et partage la façade de l'écran ; il dérive en général de BaseEntityEditor,
2226
+ * qui suit la ligne sélectionnée et publie les modifications pour l'action « Enregistrer ».
2227
+ */
2228
+ editorComponent: Type<any>;
2212
2229
  actionTitle: string;
2213
2230
  log: any;
2214
2231
  loadDataOnInit?: boolean;
@@ -2229,6 +2246,27 @@ export declare abstract class BaseComponent<TFilter extends FilterViewModel, TDa
2229
2246
  filterFn?: (selected: TData[]) => FilterViewModel;
2230
2247
  constructor(app: ApplicationService, route: ActivatedRoute);
2231
2248
  ngOnInit(): void;
2249
+ /** Bus de messages de l'application (absent dans un contexte de test minimal). */
2250
+ protected readonly busMessages: BusMessageService;
2251
+ /**
2252
+ * Formulaire de l'entité modifié en base (signal FormChanged du hub, relayé sur le bus) :
2253
+ * l'écran recharge son formulaire. S'il a des modifications en cours, l'utilisateur choisit
2254
+ * d'abord de les enregistrer, de les abandonner ou de continuer (le formulaire est alors
2255
+ * rechargé à la prochaine ouverture de l'écran).
2256
+ */
2257
+ protected subscribeFormChanged(): void;
2258
+ /** Émet quand le formulaire peut être rechargé : tout de suite sans modification en cours. */
2259
+ protected confirmFormReload$(): Observable<boolean>;
2260
+ /** Relit le formulaire de l'entité sur le serveur (cache d'initialisation de l'entité vidé). */
2261
+ protected reloadForm(): void;
2262
+ /**
2263
+ * Présentation de l'entité modifiée en base (signal PresentationChanged du hub, relayé sur le
2264
+ * bus) : la grille recharge ses colonnes, sans rien demander (les données saisies ne sont pas
2265
+ * touchées).
2266
+ */
2267
+ protected subscribePresentationChanged(): void;
2268
+ /** Relit les colonnes de la grille sur le serveur (cache d'initialisation de l'entité vidé). */
2269
+ protected reloadColumns(): void;
2232
2270
  ngAfterViewInit(): void;
2233
2271
  getIcon(): string;
2234
2272
  subscribeEntityNotification(): void;
@@ -5686,6 +5724,75 @@ export declare abstract class TreeComponent<T extends TreeItem<TData>, TData ext
5686
5724
  "onDisplayComponent": "onDisplayComponent";
5687
5725
  }, never, never, true, never>;
5688
5726
  }
5727
+ /**
5728
+ * Base d'un éditeur spécifique d'entité : le composant qu'un écran (BaseComponent) affiche à la place
5729
+ * du formulaire d'édition standard quand il renseigne `editorComponent`. L'éditeur partage la façade
5730
+ * de l'écran : il suit la ligne sélectionnée et publie ses modifications dans le suivi des
5731
+ * modifications, de sorte que les actions de l'écran (« Enregistrer », « Ajouter », « Supprimer »)
5732
+ * s'appliquent sans bouton propre à l'éditeur.
5733
+ * Les champs du formulaire par défaut de l'entité restent disponibles (`sections`, `form`,
5734
+ * `onPropertyChanged`) pour les afficher avec les composants des formulaires (alg-field).
5735
+ */
5736
+ export declare abstract class BaseEntityEditor<TData extends EntityViewModel> implements OnInit, OnDestroy {
5737
+ protected app: ApplicationService;
5738
+ protected validationService: ValidationService;
5739
+ /** Clé de l'entité de l'écran. */
5740
+ entityKey: string;
5741
+ /** Identifiant de la façade de l'écran. */
5742
+ guid: Guid;
5743
+ /** Façade de l'écran qui affiche l'éditeur. */
5744
+ facade: EntityFacade<TData>;
5745
+ /** Entité en cours d'édition : la seule ligne sélectionnée, sinon undefined. */
5746
+ entity: TData;
5747
+ /** Sections de champs du formulaire par défaut de l'entité. */
5748
+ sections: Section[];
5749
+ /** Formulaire des champs de `sections`, tenu à jour avec l'entité en cours d'édition. */
5750
+ form: FormGroup;
5751
+ /** Indique si l'entité ne peut pas être modifiée (écran en lecture seule ou ligne non modifiable). */
5752
+ readonly: boolean;
5753
+ protected destroy$: Subject<void>;
5754
+ private facadeReadOnly;
5755
+ constructor(app: ApplicationService, validationService: ValidationService);
5756
+ ngOnInit(): void;
5757
+ ngOnDestroy(): void;
5758
+ /** Champs des sections, à plat. */
5759
+ get fields(): FieldDescriptor[];
5760
+ /**
5761
+ * Sections de champs affichées par l'éditeur : par défaut, celles du formulaire de l'entité.
5762
+ * À surcharger pour renommer, remplacer ou retirer un champ.
5763
+ */
5764
+ protected alterSections(sections: Section[]): Section[];
5765
+ /**
5766
+ * Appelé quand l'entité en cours d'édition change : ligne sélectionnée, nouvelle ligne (Id négatif)
5767
+ * ou aucune (undefined). À surcharger pour charger ce que l'éditeur affiche en plus des champs.
5768
+ */
5769
+ protected onEntityChanged(entity: TData): void;
5770
+ /** Applique la modification d'un champ (alg-field) à l'entité, comme le formulaire standard. */
5771
+ onPropertyChanged(event: PropertyEditorEvent): void;
5772
+ /**
5773
+ * Publie des modifications de l'entité qui ne viennent pas d'un champ : l'entité devient modifiée
5774
+ * et l'action « Enregistrer » de l'écran l'envoie avec ces valeurs.
5775
+ * @param values Valeurs modifiées de l'entité.
5776
+ */
5777
+ protected publishChanges(values: Partial<TData>): void;
5778
+ private setEntity;
5779
+ private updateReadonly;
5780
+ /** Crée un contrôle par champ, avec ses règles de validation. */
5781
+ private initForm;
5782
+ /** Recopie l'entité en cours d'édition dans le formulaire. */
5783
+ private patchForm;
5784
+ static ɵfac: i0.ɵɵFactoryDeclaration<BaseEntityEditor<any>, never>;
5785
+ static ɵdir: i0.ɵɵDirectiveDeclaration<BaseEntityEditor<any>, never, never, {
5786
+ "entityKey": {
5787
+ "alias": "entityKey";
5788
+ "required": false;
5789
+ };
5790
+ "guid": {
5791
+ "alias": "guid";
5792
+ "required": false;
5793
+ };
5794
+ }, {}, never, never, true, never>;
5795
+ }
5689
5796
  export interface SelectorConfig {
5690
5797
  load: (req: SelectorRequest) => Observable<any[]>;
5691
5798
  options: InputSelectorOptions;
@@ -1,7 +1,7 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import * as i1 from "@angular/common";
3
3
  import * as i2 from "@dflat-core/web/system-model";
4
- import { ActivationResults, ActivationViewModel, AddressView, AddressViewFilterViewModel, ChangePasswordViewModel, CheckSireneInfoViewModel, CompanyFilterViewModel, CompanyView, Country, CountryFilterViewModel, CreatePaymentIntentViewModel, Currency, CurrencyFilterViewModel, CustomFieldFilterViewModel, CustomFieldGroup, CustomFieldGroupEntityFilterViewModel, CustomFieldGroupEntityView, CustomFieldGroupFilterViewModel, CustomFieldGroupItemFilterViewModel, CustomFieldGroupItemView, CustomFieldOptionsFilterViewModel, CustomFieldOptionsView, CustomFieldValueFilterViewModel, CustomFieldValueView, CustomFieldView, DayInfo, DayInfoFilterViewModel, EntityFiles, EntityFilesFilterViewModel, ErrorCategory, ErrorCategoryFilterViewModel, ExchangeRateFilterViewModel, ExchangeRateView, ExecOperation, ExternalLoginProviderViewModel, ExternalLoginViewModel, FileDescriptor, FileTypes, FilesFilterViewModel, FilesView, GetFileDescriptorsViewModel, Keyword, KeywordFilterViewModel, LoginViewModel, MetaEntity, MetaEntityField, MetaEntityFieldFilterViewModel, MetaEntityFilterViewModel, MetaEntityFormFieldFilterViewModel, MetaEntityFormFieldView, MetaEntityFormFilterViewModel, MetaEntityFormSectionFilterViewModel, MetaEntityFormSectionView, MetaEntityFormView, MetaEntityKeyword, MetaEntityKeywordFilterViewModel, MetaEntityRelation, MetaEntityRelationDefinition, MetaEntityRelationDefinitionFilterViewModel, MetaEntityRelationFilterViewModel, MetaEntityTranslation, MetaEntityTranslationFilterViewModel, MetaEntityViewField, MetaEntityViewFieldFilterViewModel, News, NewsFilterViewModel, NewsView, ParameterSection, ParameterSectionFilterViewModel, ParameterValueView, ParameterValueViewFilterViewModel, ParameterView, ParameterViewFilterViewModel, PaymentIntentViewModel, Permission, PermissionFilterViewModel, PermissionView, PresentationContext, PresentationProfile, PresentationProfileFilterViewModel, PresentationProfileItem, PresentationProfileItemFilterViewModel, PresentationProfileItemView, Rating, RatingFilterViewModel, RatingSummary, RatingSummaryFilterViewModel, RatingView, RegisterViewModel, RequestEntity, RequestEntityFilterViewModel, RequestFilterViewModel, RequestResultContext, RequestResultFilterViewModel, RequestResultView, RequestType, RequestTypeFilterViewModel, RequestView, ResetPasswordViewModel, ResourceKey, ResourceKeyFilterViewModel, ResourceLanguage, ResourceLanguageFilterViewModel, ResourceTranslationFilterViewModel, ResourceTranslationView, RoleFilterViewModel, RolePermission, RolePermissionFilterViewModel, RoleView, SirenCheckResults, SubcompanyFilterViewModel, SupplierCompany, SupplierCompanyFilterViewModel, SupplierFilterViewModel, SupplierView, SynchronizedCompanyView, SynchronizedCompanyViewFilterViewModel, TvaRateFilterViewModel, TvaRateView, UploadFileResult, UserAccount, UserAccountCompanyFilterViewModel, UserAccountCompanyView, UserAccountFilterViewModel, UserAccountLoginFilterViewModel, UserAccountLoginView, UserAccountNews, UserAccountNewsFilterViewModel, UserAccountRoleFilterViewModel, UserAccountRoleView, UserAccountToken, UserAccountTokenFilterViewModel, UserCredential, UserFavorite, UserFavoriteFilterViewModel, UserGroup, UserGroupDefinitionFilterViewModel, UserGroupDefinitionView, UserGroupFilterViewModel, UserHistory, UserHistoryFilterViewModel, UserPermissionView, UserPermissionViewFilterViewModel, UserProfileViewModel, UserSession, UserSessionFilterViewModel, Version, VersionFilterViewModel } from "@dflat-core/web/system-model";
4
+ import { ActivationResults, ActivationViewModel, AddressView, AddressViewFilterViewModel, ChangePasswordViewModel, CheckSireneInfoViewModel, CompanyFilterViewModel, CompanyView, Country, CountryFilterViewModel, CreatePaymentIntentViewModel, Currency, CurrencyFilterViewModel, CustomFieldFilterViewModel, CustomFieldGroup, CustomFieldGroupEntityFilterViewModel, CustomFieldGroupEntityView, CustomFieldGroupFilterViewModel, CustomFieldGroupItemFilterViewModel, CustomFieldGroupItemView, CustomFieldOptionsFilterViewModel, CustomFieldOptionsView, CustomFieldValueFilterViewModel, CustomFieldValueView, CustomFieldView, DayInfo, DayInfoFilterViewModel, EntityFiles, EntityFilesFilterViewModel, ErrorCategory, ErrorCategoryFilterViewModel, ExchangeRateFilterViewModel, ExchangeRateView, ExecOperation, ExternalLoginProviderViewModel, ExternalLoginViewModel, FileDescriptor, FileTypes, FilesFilterViewModel, FilesView, FormEditorContext, GetFileDescriptorsViewModel, Keyword, KeywordFilterViewModel, LoginViewModel, MetaEntity, MetaEntityField, MetaEntityFieldFilterViewModel, MetaEntityFilterViewModel, MetaEntityFormFieldFilterViewModel, MetaEntityFormFieldView, MetaEntityFormFilterViewModel, MetaEntityFormSectionFilterViewModel, MetaEntityFormSectionView, MetaEntityFormView, MetaEntityKeyword, MetaEntityKeywordFilterViewModel, MetaEntityRelation, MetaEntityRelationDefinition, MetaEntityRelationDefinitionFilterViewModel, MetaEntityRelationFilterViewModel, MetaEntityTranslation, MetaEntityTranslationFilterViewModel, MetaEntityViewField, MetaEntityViewFieldFilterViewModel, News, NewsFilterViewModel, NewsView, ParameterSection, ParameterSectionFilterViewModel, ParameterValueView, ParameterValueViewFilterViewModel, ParameterView, ParameterViewFilterViewModel, PaymentIntentViewModel, Permission, PermissionFilterViewModel, PermissionView, PresentationContext, PresentationProfileFilterViewModel, PresentationProfileItem, PresentationProfileItemFilterViewModel, PresentationProfileItemView, PresentationProfileView, Rating, RatingFilterViewModel, RatingSummary, RatingSummaryFilterViewModel, RatingView, RegisterViewModel, RequestEntity, RequestEntityFilterViewModel, RequestFilterViewModel, RequestResultContext, RequestResultFilterViewModel, RequestResultView, RequestType, RequestTypeFilterViewModel, RequestView, ResetPasswordViewModel, ResourceKey, ResourceKeyFilterViewModel, ResourceLanguage, ResourceLanguageFilterViewModel, ResourceTranslationFilterViewModel, ResourceTranslationView, RoleFilterViewModel, RolePermission, RolePermissionFilterViewModel, RoleView, SirenCheckResults, SubcompanyFilterViewModel, SupplierCompany, SupplierCompanyFilterViewModel, SupplierFilterViewModel, SupplierView, SynchronizedCompanyView, SynchronizedCompanyViewFilterViewModel, TvaRateFilterViewModel, TvaRateView, UploadFileResult, UserAccount, UserAccountCompanyFilterViewModel, UserAccountCompanyView, UserAccountFilterViewModel, UserAccountLoginFilterViewModel, UserAccountLoginView, UserAccountNews, UserAccountNewsFilterViewModel, UserAccountRoleFilterViewModel, UserAccountRoleView, UserAccountToken, UserAccountTokenFilterViewModel, UserCredential, UserFavorite, UserFavoriteFilterViewModel, UserGroup, UserGroupDefinitionFilterViewModel, UserGroupDefinitionView, UserGroupFilterViewModel, UserHistory, UserHistoryFilterViewModel, UserPermissionView, UserPermissionViewFilterViewModel, UserProfileViewModel, UserSession, UserSessionFilterViewModel, Version, VersionFilterViewModel } from "@dflat-core/web/system-model";
5
5
  import * as i3 from "@dflat-core/web/core-model";
6
6
  import { ColumnDescriptor, EntityViewModelWithFields, EntityWithSpecifics, ExportModel, ExtendedProperty, FilterDescriptor, ImageFormats, PagedList, RunActionContext, SaveResult, SaveResults, TreeItem } from "@dflat-core/web/core-model";
7
7
  import { DataService, EntityDataService } from "@dflat-core/web/core-data";
@@ -354,7 +354,7 @@ export declare class PluginParameterValueDataService extends EntityDataService<P
354
354
  static ɵfac: i0.ɵɵFactoryDeclaration<PluginParameterValueDataService, never>;
355
355
  static ɵprov: i0.ɵɵInjectableDeclaration<any>;
356
356
  }
357
- export declare class PresentationProfileDataService extends EntityDataService<PresentationProfile, PresentationProfileFilterViewModel> {
357
+ export declare class PresentationProfileDataService extends EntityDataService<PresentationProfileView, PresentationProfileFilterViewModel> {
358
358
  protected dataService: DataService;
359
359
  getEntityKey(): string;
360
360
  constructor(dataService: DataService);
@@ -446,6 +446,8 @@ export declare class MetaEntityFormDataService extends EntityDataService<MetaEnt
446
446
  protected dataService: DataService;
447
447
  getEntityKey(): string;
448
448
  constructor(dataService: DataService);
449
+ getFormEditor(id: number): Observable<FormEditorContext>;
450
+ saveFormEditor(model: FormEditorContext): Observable<SaveResult>;
449
451
  static ɵfac: i0.ɵɵFactoryDeclaration<MetaEntityFormDataService, never>;
450
452
  static ɵprov: i0.ɵɵInjectableDeclaration<any>;
451
453
  }
@@ -31,6 +31,67 @@ export interface AddressView extends EntityViewModel {
31
31
  Web?: string;
32
32
  ZipCode?: string;
33
33
  }
34
+ export interface MetaEntityFormFieldView extends EntityViewModel {
35
+ ButtonLabel?: string;
36
+ CascadeDependency?: boolean;
37
+ CascadeDependencyProperty?: string;
38
+ ColumnIndex?: number;
39
+ ConditioningBoolValue?: boolean;
40
+ ConditioningMetaEntityFormFieldId?: number;
41
+ ConditioningMetaEntityFormFieldPropertyName?: string;
42
+ ConditioningValues?: string;
43
+ DataMetaEntityEntityName?: string;
44
+ DataMetaEntityId?: number;
45
+ Description?: string;
46
+ DisplayImage?: boolean;
47
+ DisplayMember?: string;
48
+ EnumMetaEntityEntityName?: string;
49
+ EnumMetaEntityId?: number;
50
+ ExportPropertyName?: string;
51
+ FieldColumnSpan?: number;
52
+ FieldConditionalResult?: number;
53
+ FieldFilterType?: number;
54
+ FilterDistinct?: boolean;
55
+ HideSelected?: boolean;
56
+ Highlight?: boolean;
57
+ Id?: number;
58
+ IncludeAllOption?: boolean;
59
+ InputType?: string;
60
+ IsClearable?: boolean;
61
+ IsConditional?: boolean;
62
+ IsConditioning?: boolean;
63
+ IsExtendedProperty?: boolean;
64
+ IsHidden?: boolean;
65
+ IsReadOnly?: boolean;
66
+ IsRequired?: boolean;
67
+ IsStatic?: boolean;
68
+ KeepPlace?: boolean;
69
+ Label?: string;
70
+ MaxLength?: number;
71
+ MaxValue?: number;
72
+ MetaEntityFieldFieldName?: string;
73
+ MetaEntityFieldId?: number;
74
+ MetaEntityFormSectionId?: number;
75
+ MetaEntityFormSectionName?: string;
76
+ MetaEntityViewFieldFieldName?: string;
77
+ MetaEntityViewFieldId?: number;
78
+ MinValue?: number;
79
+ ModalEntityKey?: string;
80
+ ModalOnly?: boolean;
81
+ ModalPropertyName?: string;
82
+ ModalPropertyValue?: string;
83
+ ModalTitle?: string;
84
+ ModalTriggerProperty?: string;
85
+ ModalTriggerValue?: string;
86
+ MultipleSelection?: boolean;
87
+ NotDefaultRequired?: boolean;
88
+ OrderNumber?: number;
89
+ PropertyName?: string;
90
+ RowVersion?: Date;
91
+ ToolTip?: string;
92
+ ValidatorTypes?: number;
93
+ ValueMember?: string;
94
+ }
34
95
  export interface ErrorCategory extends EntityViewModel {
35
96
  Childrens?: INode[];
36
97
  Code?: string;
@@ -101,66 +162,21 @@ export interface Permission extends EntityViewModel {
101
162
  RowVersion?: Date;
102
163
  UniqueName?: string;
103
164
  }
104
- export interface MetaEntityFormFieldView extends EntityViewModel {
105
- ButtonLabel?: string;
106
- CascadeDependency?: boolean;
107
- CascadeDependencyProperty?: string;
108
- ColumnIndex?: number;
109
- ConditioningBoolValue?: boolean;
110
- ConditioningMetaEntityFormFieldId?: number;
111
- ConditioningMetaEntityFormFieldPropertyName?: string;
112
- ConditioningValues?: string;
165
+ export interface MetaEntityFormSectionView extends EntityViewModel {
113
166
  DataMetaEntityEntityName?: string;
114
167
  DataMetaEntityId?: number;
115
- Description?: string;
116
- DisplayImage?: boolean;
117
- DisplayMember?: string;
118
- EnumMetaEntityEntityName?: string;
119
- EnumMetaEntityId?: number;
120
- ExportPropertyName?: string;
121
- FieldColumnSpan?: number;
122
- FieldConditionalResult?: number;
123
- FieldFilterType?: number;
124
- FilterDistinct?: boolean;
125
- HideSelected?: boolean;
126
- Highlight?: boolean;
168
+ FilterPropertyName?: string;
169
+ FormFields?: MetaEntityFormFieldView[];
127
170
  Id?: number;
128
- IncludeAllOption?: boolean;
129
- InputType?: string;
130
- IsClearable?: boolean;
131
- IsConditional?: boolean;
132
- IsConditioning?: boolean;
133
- IsExtendedProperty?: boolean;
171
+ IsCustomFieldSection?: boolean;
172
+ IsFileSection?: boolean;
134
173
  IsHidden?: boolean;
135
- IsReadOnly?: boolean;
136
- IsRequired?: boolean;
137
- IsStatic?: boolean;
138
- KeepPlace?: boolean;
139
- Label?: string;
140
- MaxLength?: number;
141
- MaxValue?: number;
142
- MetaEntityFieldFieldName?: string;
143
- MetaEntityFieldId?: number;
144
- MetaEntityFormSectionId?: number;
145
- MetaEntityFormSectionName?: string;
146
- MetaEntityViewFieldFieldName?: string;
147
- MetaEntityViewFieldId?: number;
148
- MinValue?: number;
149
- ModalEntityKey?: string;
150
- ModalOnly?: boolean;
151
- ModalPropertyName?: string;
152
- ModalPropertyValue?: string;
153
- ModalTitle?: string;
154
- ModalTriggerProperty?: string;
155
- ModalTriggerValue?: string;
156
- MultipleSelection?: boolean;
157
- NotDefaultRequired?: boolean;
174
+ IsTrackRecordSection?: boolean;
175
+ MetaEntityFormCode?: string;
176
+ MetaEntityFormId?: number;
177
+ Name?: string;
158
178
  OrderNumber?: number;
159
- PropertyName?: string;
160
179
  RowVersion?: Date;
161
- ToolTip?: string;
162
- ValidatorTypes?: number;
163
- ValueMember?: string;
164
180
  }
165
181
  export interface CustomFieldGroupItemView extends EntityViewModel {
166
182
  CustomFieldGroupType?: number;
@@ -488,6 +504,25 @@ export interface RatingSummary extends EntityViewModel {
488
504
  TotalNote?: number;
489
505
  VoteNumber?: number;
490
506
  }
507
+ export interface PresentationProfileView extends EntityViewModel {
508
+ Id?: number;
509
+ Items?: PresentationProfileItem[];
510
+ Label?: string;
511
+ MetaEntityEntityName?: string;
512
+ MetaEntityKey?: string;
513
+ MetaEntityLabel?: string;
514
+ PresentationProfilePurpose?: number;
515
+ PresentationProfilePurposeLabel?: string;
516
+ PresentationProfileScope?: number;
517
+ PresentationProfileScopeLabel?: string;
518
+ RoleId?: number;
519
+ RoleUniqueName?: string;
520
+ RowVersion?: Date;
521
+ SupplierId?: number;
522
+ SupplierUniqueName?: string;
523
+ UserAccountId?: number;
524
+ UserAccountPseudo?: string;
525
+ }
491
526
  export interface PresentationProfileItemView extends EntityViewModel {
492
527
  ColumnKey?: string;
493
528
  ColumnSourceType?: number;
@@ -509,8 +544,10 @@ export interface PresentationProfile extends EntityViewModel {
509
544
  MetaEntityKey?: string;
510
545
  PresentationProfilePurpose?: number;
511
546
  PresentationProfileScope?: number;
547
+ RoleId?: number;
512
548
  RowVersion?: Date;
513
- ScopeId?: number;
549
+ SupplierId?: number;
550
+ UserAccountId?: number;
514
551
  }
515
552
  export interface PermissionView extends EntityViewModel {
516
553
  Code?: string;
@@ -639,22 +676,7 @@ export interface MetaEntityFormView extends EntityViewModel {
639
676
  MetaEntityEntityName?: string;
640
677
  MetaEntityId?: number;
641
678
  RowVersion?: Date;
642
- }
643
- export interface MetaEntityFormSectionView extends EntityViewModel {
644
- DataMetaEntityEntityName?: string;
645
- DataMetaEntityId?: number;
646
- FilterPropertyName?: string;
647
- FormFields?: MetaEntityFormFieldView[];
648
- Id?: number;
649
- IsCustomFieldSection?: boolean;
650
- IsFileSection?: boolean;
651
- IsHidden?: boolean;
652
- IsTrackRecordSection?: boolean;
653
- MetaEntityFormCode?: string;
654
- MetaEntityFormId?: number;
655
- Name?: string;
656
- OrderNumber?: number;
657
- RowVersion?: Date;
679
+ Sections?: MetaEntityFormSectionView[];
658
680
  }
659
681
  export interface MetaEntityField extends EntityViewModel {
660
682
  ClearFieldData?: boolean;
@@ -1125,12 +1147,14 @@ export interface PresentationProfileItemFilterViewModel extends EntityFilterView
1125
1147
  PresentationProfileScope?: number;
1126
1148
  ScopeId?: number;
1127
1149
  }
1128
- export interface PresentationProfileFilterViewModel extends EntityFilterViewModel<PresentationProfile> {
1150
+ export interface PresentationProfileFilterViewModel extends EntityFilterViewModel<PresentationProfileView> {
1129
1151
  Label?: string;
1130
1152
  MetaEntityKey?: string;
1131
1153
  PresentationProfilePurpose?: number;
1132
1154
  PresentationProfileScope?: number;
1133
- ScopeId?: number;
1155
+ RoleId?: number;
1156
+ SupplierId?: number;
1157
+ UserAccountId?: number;
1134
1158
  }
1135
1159
  export interface PresentationContext {
1136
1160
  Catalog?: PresentationProfileItem[];
@@ -1247,6 +1271,12 @@ export interface GetFileDescriptorsViewModel {
1247
1271
  EntityKey?: string;
1248
1272
  FileType?: FileTypes;
1249
1273
  }
1274
+ export interface FormEditorContext {
1275
+ Catalog?: MetaEntityFormFieldView[];
1276
+ Entities?: MetaEntity[];
1277
+ Form?: MetaEntityFormView;
1278
+ Sections?: MetaEntityFormSectionView[];
1279
+ }
1250
1280
  export interface FilesFilterViewModel extends EntityFilterViewModel<FilesView> {
1251
1281
  EntityId?: number;
1252
1282
  EntityIds?: number[];
@@ -460,8 +460,6 @@ export declare class BaseSystemMenuItemProvider {
460
460
  */
461
461
  export declare class SystemMenuItemProvider extends BaseSystemMenuItemProvider {
462
462
  static readonly configMenuItem: MenuItem;
463
- static readonly gridColumnConfigMenuItem: MenuItem;
464
- static readonly presentationProfileMenuItem: MenuItem;
465
463
  }
466
464
  /**
467
465
  * Menu du module System, organisé par thème (menu.txt) : un élément par entité,