@sumaris-net/ngx-components 18.17.7-rc4 → 18.18.0

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.
Files changed (170) hide show
  1. package/doc/changelog.md +4 -2
  2. package/esm2022/src/app/admin/users/users-select.modal.mjs +1 -1
  3. package/esm2022/src/app/admin/users/users.mjs +1 -1
  4. package/esm2022/src/app/core/about/about.modal.mjs +1 -1
  5. package/esm2022/src/app/core/account/account.page.mjs +1 -1
  6. package/esm2022/src/app/core/account/new-token.form.mjs +1 -1
  7. package/esm2022/src/app/core/account/new-token.modal.mjs +1 -1
  8. package/esm2022/src/app/core/account/password/change-password.form.mjs +1 -1
  9. package/esm2022/src/app/core/account/password/change-password.page.mjs +1 -1
  10. package/esm2022/src/app/core/account/token.table.mjs +1 -1
  11. package/esm2022/src/app/core/auth/auth.form.mjs +1 -1
  12. package/esm2022/src/app/core/auth/auth.modal.mjs +1 -1
  13. package/esm2022/src/app/core/auth/reset-password.modal.mjs +1 -1
  14. package/esm2022/src/app/core/form/array/testing/form-array.test.mjs +1 -1
  15. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +1 -1
  16. package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +1 -1
  17. package/esm2022/src/app/core/form/list/list.form.mjs +1 -1
  18. package/esm2022/src/app/core/form/properties/properties-file.service.mjs +133 -0
  19. package/esm2022/src/app/core/form/properties/properties.form.mjs +97 -19
  20. package/esm2022/src/app/core/form/properties/properties.module.mjs +53 -5
  21. package/esm2022/src/app/core/form/properties/properties.table.mjs +1 -1
  22. package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +4 -5
  23. package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +1 -1
  24. package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +1 -1
  25. package/esm2022/src/app/core/form/username/username.form.mjs +1 -1
  26. package/esm2022/src/app/core/home/home.mjs +1 -1
  27. package/esm2022/src/app/core/icon/icon.component.mjs +1 -1
  28. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +1 -1
  29. package/esm2022/src/app/core/menu/menu.component.mjs +1 -1
  30. package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +1 -1
  31. package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +1 -1
  32. package/esm2022/src/app/core/menu/testing/menu.testing.mjs +1 -1
  33. package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +1 -1
  34. package/esm2022/src/app/core/peer/select-peer.modal.mjs +1 -1
  35. package/esm2022/src/app/core/register/register-confirm.page.mjs +1 -1
  36. package/esm2022/src/app/core/register/register.form.mjs +1 -1
  37. package/esm2022/src/app/core/register/register.modal.mjs +1 -1
  38. package/esm2022/src/app/core/services/account.service.mjs +2 -2
  39. package/esm2022/src/app/core/services/local-settings.service.mjs +43 -42
  40. package/esm2022/src/app/core/services/model/config.model.mjs +1 -1
  41. package/esm2022/src/app/core/services/pipes/account.pipes.mjs +1 -1
  42. package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +1 -1
  43. package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +1 -1
  44. package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +1 -1
  45. package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +1 -1
  46. package/esm2022/src/app/core/settings/settings.page.mjs +2 -2
  47. package/esm2022/src/app/core/table/async-table.class.mjs +3 -3
  48. package/esm2022/src/app/core/table/column/actions-column.component.mjs +1 -1
  49. package/esm2022/src/app/core/table/column/nav-actions-column.component.mjs +1 -1
  50. package/esm2022/src/app/core/table/column/row-field.component.mjs +1 -1
  51. package/esm2022/src/app/core/table/table-select-columns.component.mjs +1 -1
  52. package/esm2022/src/app/core/table/table.class.mjs +3 -3
  53. package/esm2022/src/app/core/table/table.pipes.mjs +1 -1
  54. package/esm2022/src/app/core/table/table.utils.mjs +1 -1
  55. package/esm2022/src/app/core/table/testing/table.testing.mjs +1 -1
  56. package/esm2022/src/app/core/table/testing/table2.testing.mjs +1 -1
  57. package/esm2022/src/app/shared/audio/audio.testing.mjs +1 -1
  58. package/esm2022/src/app/shared/debug/debug.component.mjs +1 -1
  59. package/esm2022/src/app/shared/directives/autofocus.directive.mjs +1 -1
  60. package/esm2022/src/app/shared/directives/autoresize.directive.mjs +1 -1
  61. package/esm2022/src/app/shared/directives/autotitle.directive.mjs +1 -1
  62. package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +1 -1
  63. package/esm2022/src/app/shared/directives/ng-var.directive.mjs +1 -1
  64. package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +1 -1
  65. package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +1 -1
  66. package/esm2022/src/app/shared/directives/throttled-click.directive.mjs +1 -1
  67. package/esm2022/src/app/shared/form/field.component.mjs +1 -1
  68. package/esm2022/src/app/shared/form/loading-spinner.mjs +11 -11
  69. package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +1 -1
  70. package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +3 -3
  71. package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +1 -1
  72. package/esm2022/src/app/shared/markdown/markdown.component.mjs +17 -17
  73. package/esm2022/src/app/shared/markdown/markdown.directive.mjs +1 -1
  74. package/esm2022/src/app/shared/markdown/markdown.modal.mjs +1 -1
  75. package/esm2022/src/app/shared/markdown/markdown.service.mjs +1 -1
  76. package/esm2022/src/app/shared/markdown/testing/markdown.test.mjs +1 -1
  77. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +1 -1
  78. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +1 -1
  79. package/esm2022/src/app/shared/material/badge/badge.directive.mjs +1 -1
  80. package/esm2022/src/app/shared/material/badge/badge.test.mjs +3 -3
  81. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +1 -1
  82. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +1 -1
  83. package/esm2022/src/app/shared/material/chips/material.chips.mjs +1 -1
  84. package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +1 -1
  85. package/esm2022/src/app/shared/material/datetime/material.date.mjs +1 -1
  86. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +1 -1
  87. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +3 -3
  88. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +1 -1
  89. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +1 -1
  90. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +1 -1
  91. package/esm2022/src/app/shared/material/duration/material.duration.mjs +1 -1
  92. package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +1 -1
  93. package/esm2022/src/app/shared/material/latlong/material.latlong-input.mjs +1 -1
  94. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +1 -1
  95. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +1 -1
  96. package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +1 -1
  97. package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +1 -1
  98. package/esm2022/src/app/shared/material/test/test-component.mjs +43 -43
  99. package/esm2022/src/app/shared/material/testing/common.test.mjs +1 -1
  100. package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +1 -1
  101. package/esm2022/src/app/shared/material/text/text-form.component.mjs +1 -1
  102. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +1 -1
  103. package/esm2022/src/app/shared/named-filter/testing/named-filter-selector.testing.mjs +1 -1
  104. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +1 -1
  105. package/esm2022/src/app/shared/pipes/badge.pipes.mjs +1 -1
  106. package/esm2022/src/app/shared/pipes/colors.pipe.mjs +1 -1
  107. package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +1 -1
  108. package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +1 -1
  109. package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +1 -1
  110. package/esm2022/src/app/shared/pipes/dates.pipe.mjs +1 -1
  111. package/esm2022/src/app/shared/pipes/display-with.pipe.mjs +1 -1
  112. package/esm2022/src/app/shared/pipes/duration.pipe.mjs +1 -1
  113. package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +1 -1
  114. package/esm2022/src/app/shared/pipes/form.pipes.mjs +1 -1
  115. package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +1 -1
  116. package/esm2022/src/app/shared/pipes/html.pipes.mjs +1 -1
  117. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +1 -1
  118. package/esm2022/src/app/shared/pipes/maps.pipe.mjs +1 -1
  119. package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +1 -1
  120. package/esm2022/src/app/shared/pipes/math.pipes.mjs +1 -1
  121. package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +1 -1
  122. package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +1 -1
  123. package/esm2022/src/app/shared/pipes/observable.pipes.mjs +1 -1
  124. package/esm2022/src/app/shared/pipes/pipes.module.mjs +2 -5
  125. package/esm2022/src/app/shared/pipes/property.pipes.mjs +1 -1
  126. package/esm2022/src/app/shared/pipes/selection.pipes.mjs +1 -1
  127. package/esm2022/src/app/shared/pipes/string.pipes.mjs +2 -15
  128. package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +1 -1
  129. package/esm2022/src/app/shared/pipes/types.pipes.mjs +1 -1
  130. package/esm2022/src/app/shared/pipes/url.pipes.mjs +1 -1
  131. package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +1 -1
  132. package/esm2022/src/app/shared/testing/maskito.test.mjs +1 -1
  133. package/esm2022/src/app/shared/testing/observable.test.mjs +1 -1
  134. package/esm2022/src/app/shared/testing/tests.page.mjs +1 -1
  135. package/esm2022/src/app/shared/toast/toast.testing.mjs +1 -1
  136. package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +1 -1
  137. package/esm2022/src/app/shared/toolbar/toolbar.mjs +1 -1
  138. package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +1 -1
  139. package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +1 -1
  140. package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +1 -1
  141. package/esm2022/src/app/social/feed/feed.component.mjs +3 -3
  142. package/esm2022/src/app/social/feed/feed.directive.mjs +1 -1
  143. package/esm2022/src/app/social/feed/feed.page.mjs +1 -1
  144. package/esm2022/src/app/social/feed/testing/feed.testing.mjs +1 -1
  145. package/esm2022/src/app/social/job/progression/job-progression.component.mjs +1 -1
  146. package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +1 -1
  147. package/esm2022/src/app/social/job/progression/job-progression.list.mjs +1 -1
  148. package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +1 -1
  149. package/esm2022/src/app/social/message/message.form.mjs +1 -1
  150. package/esm2022/src/app/social/message/message.modal.mjs +1 -1
  151. package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +1 -1
  152. package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +1 -1
  153. package/esm2022/src/app/social/user-event/notification/user-event-notification.modal.mjs +1 -1
  154. package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +1 -1
  155. package/fesm2022/sumaris-net.ngx-components.mjs +423 -201
  156. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  157. package/package.json +1 -1
  158. package/src/app/core/form/properties/properties-file.service.d.ts +26 -0
  159. package/src/app/core/form/properties/properties.form.d.ts +18 -2
  160. package/src/app/core/form/properties/properties.module.d.ts +8 -1
  161. package/src/app/core/services/local-settings.service.d.ts +9 -8
  162. package/src/app/core/table/async-table.class.d.ts +3 -1
  163. package/src/app/core/table/table.class.d.ts +3 -1
  164. package/src/app/shared/pipes/pipes.module.d.ts +1 -1
  165. package/src/app/shared/pipes/string.pipes.d.ts +0 -5
  166. package/src/assets/i18n/en-US.json +32 -3
  167. package/src/assets/i18n/en.json +32 -3
  168. package/src/assets/i18n/fr.json +34 -4
  169. package/src/assets/manifest.json +1 -1
  170. package/src/theme/_ngx-components.scss +1009 -1009
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sumaris-net/ngx-components",
3
3
  "description": "SUMARiS Angular components",
4
- "version": "18.17.7-rc4",
4
+ "version": "18.18.0",
5
5
  "author": "contact@e-is.pro",
6
6
  "license": "AGPL-3.0",
7
7
  "readmeFilename": "README.md",
@@ -0,0 +1,26 @@
1
+ import { Injector } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import { Property } from '../../../shared/types';
4
+ import { FileEvent } from '../../../shared/upload-file/upload-file.model';
5
+ import { ShowToastOptions } from '../../../shared/toast/toasts';
6
+ import * as i0 from "@angular/core";
7
+ export declare type ReferentialImportPolicy = 'insert-update' | 'insert-only' | 'update-only' | 'delete-only';
8
+ export declare const IMPORT_POLICIES: ReferentialImportPolicy[];
9
+ export declare class PropertiesFileService {
10
+ private readonly logPrefix;
11
+ private readonly translate;
12
+ private readonly toastController;
13
+ private readonly popoverController;
14
+ i18nColumnPrefix: string;
15
+ importPolicy: ReferentialImportPolicy;
16
+ constructor(injector: Injector);
17
+ exportToCsv(data: Property[], opts?: {
18
+ context?: any;
19
+ }): void;
20
+ importFromCsv(event?: Event): Promise<Property[]>;
21
+ protected readPropertiesCsvFile(file: File): Observable<FileEvent<Property[]>>;
22
+ protected parsePropertiesCsvRows(rows: string[][], separator: string): Property[];
23
+ protected showToast(opts: ShowToastOptions): Promise<import("@ionic/core").OverlayEventDetail<any>>;
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<PropertiesFileService, never>;
25
+ static ɵdir: i0.ɵɵDirectiveDeclaration<PropertiesFileService, never, never, { "i18nColumnPrefix": { "alias": "i18nColumnPrefix"; "required": false; }; "importPolicy": { "alias": "importPolicy"; "required": false; }; }, {}, never, never, false, never>;
26
+ }
@@ -13,6 +13,7 @@ import { MatAutocompleteFieldConfig } from '../../../shared/material/autocomplet
13
13
  import { LoadResult } from '../../../shared/services/entity-service.class';
14
14
  import { RxState } from '@rx-angular/state';
15
15
  import { SortDirection } from '@angular/material/sort';
16
+ import { PropertiesFileService, ReferentialImportPolicy } from './properties-file.service';
16
17
  import * as i0 from "@angular/core";
17
18
  export interface AppPropertiesFormState {
18
19
  definitions: FormFieldDefinition[];
@@ -26,6 +27,7 @@ export declare class AppPropertiesForm<O = any, T extends Property<O> = Property
26
27
  protected validator: PropertyValidator;
27
28
  private formGroupDir;
28
29
  protected readonly _state: RxState<S>;
30
+ protected readonly _importPolicies: ReferentialImportPolicy[];
29
31
  protected _definitions$: import("rxjs").Observable<S["definitions"]>;
30
32
  protected _definitionKeys$: import("rxjs").Observable<S["definitionKeys"]>;
31
33
  protected set _definitionKeys(value: Property[]);
@@ -35,8 +37,10 @@ export declare class AppPropertiesForm<O = any, T extends Property<O> = Property
35
37
  [index: number]: FormFieldDefinition;
36
38
  };
37
39
  protected _helper: FormArrayHelper<Property>;
40
+ protected _propertiesFileService: PropertiesFileService;
38
41
  protected _autocompleteConfig: MatAutocompleteFieldConfig;
39
42
  protected _focusedControlIndex: number;
43
+ showToolbar: boolean;
40
44
  formArrayName: string;
41
45
  formArray: UntypedFormArray;
42
46
  options: FormArrayHelperOptions;
@@ -52,6 +56,8 @@ export declare class AppPropertiesForm<O = any, T extends Property<O> = Property
52
56
  showAddButton: boolean;
53
57
  panelClass: string;
54
58
  panelWidth: string;
59
+ canDownload: boolean;
60
+ canImport: boolean;
55
61
  /**
56
62
  * @deprecated Use addButtonTitle instead
57
63
  * @param value
@@ -64,6 +70,8 @@ export declare class AppPropertiesForm<O = any, T extends Property<O> = Property
64
70
  get value(): T[];
65
71
  get length(): number;
66
72
  get fieldForms(): UntypedFormGroup[];
73
+ set importPolicy(value: ReferentialImportPolicy);
74
+ get importPolicy(): ReferentialImportPolicy;
67
75
  constructor(injector: Injector, formBuilder: UntypedFormBuilder, dateAdapter: DateAdapter<Moment>, cd: ChangeDetectorRef, validator: PropertyValidator, formGroupDir: FormGroupDirective);
68
76
  ngOnInit(): void;
69
77
  protected processDefinitions(definitions: FormFieldDefinition[]): any[];
@@ -72,21 +80,29 @@ export declare class AppPropertiesForm<O = any, T extends Property<O> = Property
72
80
  emitEvent?: boolean;
73
81
  }): FormFieldDefinition;
74
82
  removeAt(index: number): void;
75
- setValue(data: PropertyMap | T[]): Promise<void>;
83
+ setValue(data: PropertyMap | T[], opts?: {
84
+ emitEvent?: boolean;
85
+ }): Promise<void>;
76
86
  getValueAsJson(): PropertyMap;
77
87
  clear(): void;
88
+ protected toggleShowHintKeys(): void;
78
89
  protected clearTemplateCache(): void;
79
90
  protected suggestDefinitionKeys(value: any, filter?: any, sortBy?: string | keyof Property, sortDirection?: SortDirection, opts?: {
80
91
  offset?: number;
81
92
  size?: number;
82
93
  [key: string]: any;
83
94
  }): Promise<LoadResult<Property>>;
95
+ protected exportToCsv(label?: string): Promise<void>;
96
+ protected importFromCsv(event?: Event): Promise<void>;
84
97
  protected markForCheck(): void;
85
98
  protected isEmptyProperty(obj: Property): boolean;
86
99
  static ɵfac: i0.ɵɵFactoryDeclaration<AppPropertiesForm<any, any, any>, [null, null, null, null, null, { optional: true; }]>;
87
- static ɵcmp: i0.ɵɵComponentDeclaration<AppPropertiesForm<any, any, any>, "app-properties-form", never, { "formArrayName": { "alias": "formArrayName"; "required": false; }; "formArray": { "alias": "formArray"; "required": false; }; "options": { "alias": "options"; "required": false; }; "chipColor": { "alias": "chipColor"; "required": false; }; "mobile": { "alias": "mobile"; "required": false; }; "appearance": { "alias": "appearance"; "required": false; }; "subscriptSizing": { "alias": "subscriptSizing"; "required": false; }; "showHintKey": { "alias": "showHintKey"; "required": false; }; "hintKeyPrefix": { "alias": "hintKeyPrefix"; "required": false; }; "showMoreButton": { "alias": "showMoreButton"; "required": false; }; "addButtonText": { "alias": "addButtonText"; "required": false; }; "addButtonTitle": { "alias": "addButtonTitle"; "required": false; }; "showAddButton": { "alias": "showAddButton"; "required": false; }; "panelClass": { "alias": "panelClass"; "required": false; }; "panelWidth": { "alias": "panelWidth"; "required": false; }; "showMoreButtonTitle": { "alias": "showMoreButtonTitle"; "required": false; }; "definitions": { "alias": "definitions"; "required": false; }; }, {}, never, never, false, never>;
100
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppPropertiesForm<any, any, any>, "app-properties-form", never, { "showToolbar": { "alias": "showToolbar"; "required": false; }; "formArrayName": { "alias": "formArrayName"; "required": false; }; "formArray": { "alias": "formArray"; "required": false; }; "options": { "alias": "options"; "required": false; }; "chipColor": { "alias": "chipColor"; "required": false; }; "mobile": { "alias": "mobile"; "required": false; }; "appearance": { "alias": "appearance"; "required": false; }; "subscriptSizing": { "alias": "subscriptSizing"; "required": false; }; "showHintKey": { "alias": "showHintKey"; "required": false; }; "hintKeyPrefix": { "alias": "hintKeyPrefix"; "required": false; }; "showMoreButton": { "alias": "showMoreButton"; "required": false; }; "addButtonText": { "alias": "addButtonText"; "required": false; }; "addButtonTitle": { "alias": "addButtonTitle"; "required": false; }; "showAddButton": { "alias": "showAddButton"; "required": false; }; "panelClass": { "alias": "panelClass"; "required": false; }; "panelWidth": { "alias": "panelWidth"; "required": false; }; "canDownload": { "alias": "canDownload"; "required": false; }; "canImport": { "alias": "canImport"; "required": false; }; "showMoreButtonTitle": { "alias": "showMoreButtonTitle"; "required": false; }; "definitions": { "alias": "definitions"; "required": false; }; "importPolicy": { "alias": "importPolicy"; "required": false; }; }, {}, never, never, false, never>;
101
+ static ngAcceptInputType_showToolbar: unknown;
88
102
  static ngAcceptInputType_mobile: unknown;
89
103
  static ngAcceptInputType_showHintKey: unknown;
90
104
  static ngAcceptInputType_showMoreButton: unknown;
91
105
  static ngAcceptInputType_showAddButton: unknown;
106
+ static ngAcceptInputType_canDownload: unknown;
107
+ static ngAcceptInputType_canImport: unknown;
92
108
  }
@@ -4,8 +4,15 @@ import * as i2 from "./properties.table";
4
4
  import * as i3 from "../../../shared/shared.module";
5
5
  import * as i4 from "@ngx-translate/core";
6
6
  import * as i5 from "../../table/table.module";
7
+ import * as i6 from "@ionic/angular";
8
+ import * as i7 from "@angular/material/divider";
9
+ import * as i8 from "@angular/material/icon";
10
+ import * as i9 from "@angular/material/menu";
11
+ import * as i10 from "@angular/material/button";
12
+ import * as i11 from "@angular/material/toolbar";
13
+ import * as i12 from "@angular/common";
7
14
  export declare class AppPropertiesFormModule {
8
15
  static ɵfac: i0.ɵɵFactoryDeclaration<AppPropertiesFormModule, never>;
9
- static ɵmod: i0.ɵɵNgModuleDeclaration<AppPropertiesFormModule, [typeof i1.AppPropertiesForm, typeof i2.AppPropertiesTable], [typeof i3.SharedModule, typeof i4.TranslateModule, typeof i5.AppTableModule], [typeof i4.TranslateModule, typeof i1.AppPropertiesForm, typeof i2.AppPropertiesTable]>;
16
+ static ɵmod: i0.ɵɵNgModuleDeclaration<AppPropertiesFormModule, [typeof i1.AppPropertiesForm, typeof i2.AppPropertiesTable], [typeof i3.SharedModule, typeof i4.TranslateModule, typeof i5.AppTableModule, typeof i6.IonicModule, typeof i7.MatDivider, typeof i8.MatIcon, typeof i9.MatMenu, typeof i9.MatMenuContent, typeof i9.MatMenuItem, typeof i4.TranslateDirective, typeof i6.IonicModule, typeof i8.MatIcon, typeof i10.MatIconButton, typeof i11.MatToolbar, typeof i12.NgIf, typeof i4.TranslatePipe], [typeof i4.TranslateModule, typeof i1.AppPropertiesForm, typeof i2.AppPropertiesTable]>;
10
17
  static ɵinj: i0.ɵɵInjectorDeclaration<AppPropertiesFormModule>;
11
18
  }
@@ -54,13 +54,13 @@ export declare class LocalSettingsService extends StartableService<LocalSettings
54
54
  private storage;
55
55
  protected readonly environment: Environment;
56
56
  private readonly defaultSettings;
57
- onChange: Subject<LocalSettings>;
58
- darkMode$: import("rxjs").Observable<boolean>;
59
- locale$: import("rxjs").Observable<string>;
60
57
  private readonly _optionDefs;
61
58
  private readonly _serializeAsString;
62
- private _$persist;
63
- settingsSaved: EventEmitter<LocalSettings>;
59
+ private _$storeLocallyEventEmitter;
60
+ readonly onChange: Subject<LocalSettings>;
61
+ readonly onStoredLocally: EventEmitter<LocalSettings>;
62
+ darkMode$: import("rxjs").Observable<boolean>;
63
+ locale$: import("rxjs").Observable<string>;
64
64
  get settings(): LocalSettings;
65
65
  get locale(): string;
66
66
  get latLongFormat(): LatLongPattern;
@@ -96,7 +96,9 @@ export declare class LocalSettingsService extends StartableService<LocalSettings
96
96
  persistImmediate?: boolean;
97
97
  }): Promise<void>;
98
98
  getPageSettings<T = any>(pageId: string, propertyName?: string): T;
99
- savePageSetting(pageId: string, value: any, propertyName?: string): Promise<void>;
99
+ savePageSetting(pageId: string, value: any, propertyName?: string, opts?: {
100
+ emitEvent?: boolean;
101
+ }): Promise<void>;
100
102
  getOfflineFeature<F = any>(featureName: string): OfflineFeature<F>;
101
103
  getOfflineFeatureLastSyncDate(featureName: string): Moment;
102
104
  hasOfflineFeature(featureName?: string): boolean;
@@ -119,8 +121,7 @@ export declare class LocalSettingsService extends StartableService<LocalSettings
119
121
  clearPageHistory(): Promise<void>;
120
122
  protected ngOnStop(): Promise<void>;
121
123
  private resetData;
122
- private save;
123
- private persistLocally;
124
+ private storeLocally;
124
125
  private fillPageHistoryDefaults;
125
126
  static ɵfac: i0.ɵɵFactoryDeclaration<LocalSettingsService, [null, null, null, null, { optional: true; }, { optional: true; }]>;
126
127
  static ɵprov: i0.ɵɵInjectableDeclaration<LocalSettingsService>;
@@ -370,7 +370,9 @@ export declare abstract class AppAsyncTable<T extends IEntity<T, ID>, F = any, I
370
370
  emitEVent?: boolean;
371
371
  }): void;
372
372
  protected getPageSettings<T = any>(propertyName?: string): T;
373
- protected savePageSettings(value: any, propertyName?: string): Promise<void>;
373
+ protected savePageSettings(value: any, propertyName?: string, opts?: {
374
+ emitEvent?: boolean;
375
+ }): Promise<void>;
374
376
  protected emitRefresh(value?: any): void;
375
377
  /**
376
378
  * Initialize the permanent selection model
@@ -375,7 +375,9 @@ export declare abstract class AppTable<T extends IEntity<T, ID>, F = any, ID = n
375
375
  emitEVent?: boolean;
376
376
  }): void;
377
377
  protected getPageSettings<T = any>(propertyName?: string): T;
378
- protected savePageSettings(value: any, propertyName?: string): Promise<void>;
378
+ protected savePageSettings(value: any, propertyName?: string, opts?: {
379
+ emitEvent?: boolean;
380
+ }): Promise<void>;
379
381
  protected emitRefresh(value?: any): void;
380
382
  /**
381
383
  * Initialize the permanent selection model
@@ -30,6 +30,6 @@ import * as i28 from "@ionic/angular";
30
30
  import * as i29 from "@ngx-translate/core";
31
31
  export declare class SharedPipesModule {
32
32
  static ɵfac: i0.ɵɵFactoryDeclaration<SharedPipesModule, never>;
33
- static ɵmod: i0.ɵɵNgModuleDeclaration<SharedPipesModule, [typeof i1.PropertyGetPipe, typeof i1.PropertyFormatPipe, typeof i1.ValueFormatPipe, typeof i2.DateFormatPipe, typeof i3.DateDiffDurationPipe, typeof i4.DurationPipe, typeof i5.DateFromNowPipe, typeof i6.LatLongFormatPipe, typeof i6.LatitudeFormatPipe, typeof i6.LongitudeFormatPipe, typeof i7.HighlightPipe, typeof i8.NumberFormatPipe, typeof i9.FileSizePipe, typeof i10.MathAbsPipe, typeof i10.OddPipe, typeof i10.EvenPipe, typeof i10.RoundPipe, typeof i11.NotEmptyArrayPipe, typeof i11.EmptyArrayPipe, typeof i11.ArrayLengthPipe, typeof i11.ArrayFirstPipe, typeof i11.ArrayLastPipe, typeof i11.ArrayPluckPipe, typeof i11.ArrayIncludesPipe, typeof i11.ArrayFilterPipe, typeof i11.ArrayJoinPipe, typeof i11.ArrayDistinctPipe, typeof i11.ArrayFindByPropertyPipe, typeof i11.SplitArrayInChunksPipe, typeof i11.ArrayMapPipe, typeof i12.MapGetPipe, typeof i12.MapKeysPipe, typeof i12.MapValuesPipe, typeof i13.IsNilOrBlankPipe, typeof i13.IsNotNilOrBlankPipe, typeof i13.IsNilOrNaNPipe, typeof i13.IsNotNilOrNaNPipe, typeof i13.IsNotNilPipe, typeof i13.IsNilPipe, typeof i14.IsValidDatePipe, typeof i13.ToStringPipe, typeof i13.CapitalizePipe, typeof i13.UnCapitalizePipe, typeof i13.StrLengthPipe, typeof i13.StrIncludesPipe, typeof i13.StrReplacePipe, typeof i13.TruncHtmlPipe, typeof i13.TruncTextPipe, typeof i15.AppendQueryParamsPipePipe, typeof i1.BooleanFormatPipe, typeof i1.MapToPipe, typeof i16.TranslateContextPipe, typeof i16.TranslatablePipe, typeof i17.NgInitDirective, typeof i18.FormErrorPipe, typeof i18.FormErrorTranslatePipe, typeof i18.FormGetPipe, typeof i18.FormGetControlPipe, typeof i18.FormGetArrayPipe, typeof i18.FormGetGroupPipe, typeof i18.FormGetValuePipe, typeof i19.MatColorPipe, typeof i20.AsAnyPipe, typeof i20.AsArrayPipe, typeof i20.AsObservablePipe, typeof i20.AsFloatLabelTypePipe, typeof i21.MaskitoPlaceholderPipe, typeof i22.IsSelectedPipe, typeof i22.IsNotEmptySelectionPipe, typeof i22.IsEmptySelectionPipe, typeof i22.SelectionLengthPipe, typeof i22.IsMultipleSelectionPipe, typeof i22.IsSingleSelectionPipe, typeof i23.BadgeNumberPipe, typeof i20.AsBooleanPipe, typeof i24.SafeHtmlPipe, typeof i24.SafeStylePipe, typeof i24.NoHtmlPipe, typeof i24.TruncateHtmlPipe, typeof i25.DisplayWithPipe, typeof i26.FirstTruePipe, typeof i26.FirstFalsePipe, typeof i26.FirstPipe, typeof i26.MapPipe], [typeof i27.CommonModule, typeof i28.IonicModule, typeof i29.TranslateModule], [typeof i1.PropertyGetPipe, typeof i1.PropertyFormatPipe, typeof i1.ValueFormatPipe, typeof i2.DateFormatPipe, typeof i3.DateDiffDurationPipe, typeof i4.DurationPipe, typeof i5.DateFromNowPipe, typeof i6.LatLongFormatPipe, typeof i6.LatitudeFormatPipe, typeof i6.LongitudeFormatPipe, typeof i7.HighlightPipe, typeof i8.NumberFormatPipe, typeof i9.FileSizePipe, typeof i10.MathAbsPipe, typeof i10.OddPipe, typeof i10.EvenPipe, typeof i10.RoundPipe, typeof i11.NotEmptyArrayPipe, typeof i11.EmptyArrayPipe, typeof i11.ArrayLengthPipe, typeof i11.ArrayFirstPipe, typeof i11.ArrayLastPipe, typeof i11.ArrayPluckPipe, typeof i11.ArrayIncludesPipe, typeof i11.ArrayFilterPipe, typeof i11.ArrayJoinPipe, typeof i11.ArrayDistinctPipe, typeof i11.ArrayFindByPropertyPipe, typeof i11.SplitArrayInChunksPipe, typeof i11.ArrayMapPipe, typeof i12.MapGetPipe, typeof i12.MapKeysPipe, typeof i12.MapValuesPipe, typeof i13.IsNilOrBlankPipe, typeof i13.IsNotNilOrBlankPipe, typeof i13.IsNilOrNaNPipe, typeof i13.IsNotNilOrNaNPipe, typeof i13.IsNotNilPipe, typeof i13.IsNilPipe, typeof i14.IsValidDatePipe, typeof i13.ToStringPipe, typeof i13.CapitalizePipe, typeof i13.UnCapitalizePipe, typeof i13.StrLengthPipe, typeof i13.StrIncludesPipe, typeof i13.StrReplacePipe, typeof i13.TruncHtmlPipe, typeof i13.TruncTextPipe, typeof i15.AppendQueryParamsPipePipe, typeof i1.BooleanFormatPipe, typeof i1.MapToPipe, typeof i16.TranslateContextPipe, typeof i16.TranslatablePipe, typeof i17.NgInitDirective, typeof i18.FormErrorPipe, typeof i18.FormErrorTranslatePipe, typeof i18.FormGetPipe, typeof i18.FormGetControlPipe, typeof i18.FormGetArrayPipe, typeof i18.FormGetGroupPipe, typeof i18.FormGetValuePipe, typeof i19.MatColorPipe, typeof i20.AsAnyPipe, typeof i20.AsArrayPipe, typeof i20.AsObservablePipe, typeof i20.AsFloatLabelTypePipe, typeof i21.MaskitoPlaceholderPipe, typeof i22.IsSelectedPipe, typeof i22.IsNotEmptySelectionPipe, typeof i22.IsEmptySelectionPipe, typeof i22.SelectionLengthPipe, typeof i22.IsMultipleSelectionPipe, typeof i22.IsSingleSelectionPipe, typeof i23.BadgeNumberPipe, typeof i20.AsBooleanPipe, typeof i24.SafeHtmlPipe, typeof i24.SafeStylePipe, typeof i24.NoHtmlPipe, typeof i24.TruncateHtmlPipe, typeof i25.DisplayWithPipe, typeof i26.FirstTruePipe, typeof i26.FirstFalsePipe, typeof i26.FirstPipe, typeof i26.MapPipe]>;
33
+ static ɵmod: i0.ɵɵNgModuleDeclaration<SharedPipesModule, [typeof i1.PropertyGetPipe, typeof i1.PropertyFormatPipe, typeof i1.ValueFormatPipe, typeof i2.DateFormatPipe, typeof i3.DateDiffDurationPipe, typeof i4.DurationPipe, typeof i5.DateFromNowPipe, typeof i6.LatLongFormatPipe, typeof i6.LatitudeFormatPipe, typeof i6.LongitudeFormatPipe, typeof i7.HighlightPipe, typeof i8.NumberFormatPipe, typeof i9.FileSizePipe, typeof i10.MathAbsPipe, typeof i10.OddPipe, typeof i10.EvenPipe, typeof i10.RoundPipe, typeof i11.NotEmptyArrayPipe, typeof i11.EmptyArrayPipe, typeof i11.ArrayLengthPipe, typeof i11.ArrayFirstPipe, typeof i11.ArrayLastPipe, typeof i11.ArrayPluckPipe, typeof i11.ArrayIncludesPipe, typeof i11.ArrayFilterPipe, typeof i11.ArrayJoinPipe, typeof i11.ArrayDistinctPipe, typeof i11.ArrayFindByPropertyPipe, typeof i11.SplitArrayInChunksPipe, typeof i11.ArrayMapPipe, typeof i12.MapGetPipe, typeof i12.MapKeysPipe, typeof i12.MapValuesPipe, typeof i13.IsNilOrBlankPipe, typeof i13.IsNotNilOrBlankPipe, typeof i13.IsNilOrNaNPipe, typeof i13.IsNotNilOrNaNPipe, typeof i13.IsNotNilPipe, typeof i13.IsNilPipe, typeof i14.IsValidDatePipe, typeof i13.ToStringPipe, typeof i13.CapitalizePipe, typeof i13.StrLengthPipe, typeof i13.StrIncludesPipe, typeof i13.StrReplacePipe, typeof i13.TruncHtmlPipe, typeof i13.TruncTextPipe, typeof i15.AppendQueryParamsPipePipe, typeof i1.BooleanFormatPipe, typeof i1.MapToPipe, typeof i16.TranslateContextPipe, typeof i16.TranslatablePipe, typeof i17.NgInitDirective, typeof i18.FormErrorPipe, typeof i18.FormErrorTranslatePipe, typeof i18.FormGetPipe, typeof i18.FormGetControlPipe, typeof i18.FormGetArrayPipe, typeof i18.FormGetGroupPipe, typeof i18.FormGetValuePipe, typeof i19.MatColorPipe, typeof i20.AsAnyPipe, typeof i20.AsArrayPipe, typeof i20.AsObservablePipe, typeof i20.AsFloatLabelTypePipe, typeof i21.MaskitoPlaceholderPipe, typeof i22.IsSelectedPipe, typeof i22.IsNotEmptySelectionPipe, typeof i22.IsEmptySelectionPipe, typeof i22.SelectionLengthPipe, typeof i22.IsMultipleSelectionPipe, typeof i22.IsSingleSelectionPipe, typeof i23.BadgeNumberPipe, typeof i20.AsBooleanPipe, typeof i24.SafeHtmlPipe, typeof i24.SafeStylePipe, typeof i24.NoHtmlPipe, typeof i24.TruncateHtmlPipe, typeof i25.DisplayWithPipe, typeof i26.FirstTruePipe, typeof i26.FirstFalsePipe, typeof i26.FirstPipe, typeof i26.MapPipe], [typeof i27.CommonModule, typeof i28.IonicModule, typeof i29.TranslateModule], [typeof i1.PropertyGetPipe, typeof i1.PropertyFormatPipe, typeof i1.ValueFormatPipe, typeof i2.DateFormatPipe, typeof i3.DateDiffDurationPipe, typeof i4.DurationPipe, typeof i5.DateFromNowPipe, typeof i6.LatLongFormatPipe, typeof i6.LatitudeFormatPipe, typeof i6.LongitudeFormatPipe, typeof i7.HighlightPipe, typeof i8.NumberFormatPipe, typeof i9.FileSizePipe, typeof i10.MathAbsPipe, typeof i10.OddPipe, typeof i10.EvenPipe, typeof i10.RoundPipe, typeof i11.NotEmptyArrayPipe, typeof i11.EmptyArrayPipe, typeof i11.ArrayLengthPipe, typeof i11.ArrayFirstPipe, typeof i11.ArrayLastPipe, typeof i11.ArrayPluckPipe, typeof i11.ArrayIncludesPipe, typeof i11.ArrayFilterPipe, typeof i11.ArrayJoinPipe, typeof i11.ArrayDistinctPipe, typeof i11.ArrayFindByPropertyPipe, typeof i11.SplitArrayInChunksPipe, typeof i11.ArrayMapPipe, typeof i12.MapGetPipe, typeof i12.MapKeysPipe, typeof i12.MapValuesPipe, typeof i13.IsNilOrBlankPipe, typeof i13.IsNotNilOrBlankPipe, typeof i13.IsNilOrNaNPipe, typeof i13.IsNotNilOrNaNPipe, typeof i13.IsNotNilPipe, typeof i13.IsNilPipe, typeof i14.IsValidDatePipe, typeof i13.ToStringPipe, typeof i13.CapitalizePipe, typeof i13.StrLengthPipe, typeof i13.StrIncludesPipe, typeof i13.StrReplacePipe, typeof i13.TruncHtmlPipe, typeof i13.TruncTextPipe, typeof i15.AppendQueryParamsPipePipe, typeof i1.BooleanFormatPipe, typeof i1.MapToPipe, typeof i16.TranslateContextPipe, typeof i16.TranslatablePipe, typeof i17.NgInitDirective, typeof i18.FormErrorPipe, typeof i18.FormErrorTranslatePipe, typeof i18.FormGetPipe, typeof i18.FormGetControlPipe, typeof i18.FormGetArrayPipe, typeof i18.FormGetGroupPipe, typeof i18.FormGetValuePipe, typeof i19.MatColorPipe, typeof i20.AsAnyPipe, typeof i20.AsArrayPipe, typeof i20.AsObservablePipe, typeof i20.AsFloatLabelTypePipe, typeof i21.MaskitoPlaceholderPipe, typeof i22.IsSelectedPipe, typeof i22.IsNotEmptySelectionPipe, typeof i22.IsEmptySelectionPipe, typeof i22.SelectionLengthPipe, typeof i22.IsMultipleSelectionPipe, typeof i22.IsSingleSelectionPipe, typeof i23.BadgeNumberPipe, typeof i20.AsBooleanPipe, typeof i24.SafeHtmlPipe, typeof i24.SafeStylePipe, typeof i24.NoHtmlPipe, typeof i24.TruncateHtmlPipe, typeof i25.DisplayWithPipe, typeof i26.FirstTruePipe, typeof i26.FirstFalsePipe, typeof i26.FirstPipe, typeof i26.MapPipe]>;
34
34
  static ɵinj: i0.ɵɵInjectorDeclaration<SharedPipesModule>;
35
35
  }
@@ -41,11 +41,6 @@ export declare class CapitalizePipe implements PipeTransform {
41
41
  static ɵfac: i0.ɵɵFactoryDeclaration<CapitalizePipe, never>;
42
42
  static ɵpipe: i0.ɵɵPipeDeclaration<CapitalizePipe, "capitalize", false>;
43
43
  }
44
- export declare class UnCapitalizePipe implements PipeTransform {
45
- transform(value: string): string;
46
- static ɵfac: i0.ɵɵFactoryDeclaration<UnCapitalizePipe, never>;
47
- static ɵpipe: i0.ɵɵPipeDeclaration<UnCapitalizePipe, "unCapitalize", false>;
48
- }
49
44
  export declare class StrLengthPipe implements PipeTransform {
50
45
  transform(value: string): number;
51
46
  static ɵfac: i0.ɵɵFactoryDeclaration<StrLengthPipe, never>;
@@ -16,7 +16,11 @@
16
16
  "BTN_COMPACT_ROWS": "Compact rows",
17
17
  "BTN_DONE": "Done",
18
18
  "BTN_DOWNLOAD": "Download",
19
+ "BTN_DOWNLOAD_DOTS": "Download...",
20
+ "BTN_DOWNLOAD_JSON": "Download (JSON)",
21
+ "BTN_DOWNLOAD_CSV": "Download (CSV)",
19
22
  "BTN_IMPORT": "Import",
23
+ "BTN_IMPORT_FROM_FILE_DOTS": "Import from file...",
20
24
  "BTN_DUPLICATE": "Duplicate",
21
25
  "BTN_DELETE": "Delete",
22
26
  "BTN_DELETE_FOREVER": "Delete forever",
@@ -423,7 +427,6 @@
423
427
  "BTN_DARK_MODE": "Dark theme?",
424
428
  "BTN_SHOW_ACCOUNT": "Show my account",
425
429
  "BTN_SHOW_MORE_HELP": "Show more parameters",
426
- "BTN_SHOW_OPTION_KEY": "Show options code?",
427
430
  "BTN_CLEAR_CACHE": "Clear data cache",
428
431
  "OFFLINE_MODE": "Force offline mode? (experimental)",
429
432
  "DATA_ENTRY_DIVIDER": "Data entry settings",
@@ -598,18 +601,44 @@
598
601
  "FILE": {
599
602
  "JSON": {
600
603
  "ENCODING": "UTF-8",
604
+ "FORMAT": "JSON",
601
605
  "BTN_DOWNLOAD_HELP": "Download data (JSON)"
602
606
  },
603
607
  "CSV": {
604
608
  "SEPARATOR": ",",
605
609
  "ENCODING": "UTF-8",
606
- "BTN_DOWNLOAD_HELP": "Download data (CSV)"
610
+ "FORMAT": "CSV",
611
+ "BTN_DOWNLOAD_HELP": "Download data (CSV)",
612
+ "ERROR": {
613
+ "EMPTY_FILE": "Empty file, or no header row",
614
+ "NO_HEADER_OR_INVALID_SEPARATOR": "Invalid header row. Please check that the separator '{{separator}}' has been used.",
615
+ "UNKNOWN_HEADERS": "Invalid row's header(s): {{headers}}"
616
+ }
617
+ },
618
+ "PROPERTIES": {
619
+ "CSV_FILENAME": "{{label}}-options.csv",
620
+ "LABEL_HEADER": "Code",
621
+ "VALUE_HEADER": "Value",
622
+ "DESCRIPTION_HEADER": "Description",
623
+ "BTN_SHOW_HINT_KEY": "Show options code?",
624
+ "BTN_DOWNLOAD_AS_CSV": "Download options (CSV)",
625
+ "BTN_IMPORT_FROM_CSV": "Upload options (CSV)...",
626
+ "ERROR": {
627
+ "IMPORT_ERROR": "Import failed:<br/>{{error}}"
628
+ }
607
629
  },
608
630
  "UPLOAD": {
609
631
  "DRAG_AND_DROP": "Drag and drop a file{{ extension }} here<br/>or",
610
632
  "BROWSE": "Browse",
611
633
  "IMPORTING": "Import in progress",
612
- "ERROR": "Error while uploading file"
634
+ "BTN_IMPORT_POLICY_DOTS": "Import policy...",
635
+ "ERROR": "Error while uploading file",
636
+ "IMPORT_POLICY": {
637
+ "TITLE": "Import options",
638
+ "INSERT-ONLY": "Inserts only",
639
+ "UPDATE-ONLY": "Updates only",
640
+ "INSERT-UPDATE": "Insertions or updates"
641
+ }
613
642
  }
614
643
  },
615
644
  "IMAGE": {
@@ -16,7 +16,11 @@
16
16
  "BTN_COMPACT_ROWS": "Compact rows",
17
17
  "BTN_DONE": "Done",
18
18
  "BTN_DOWNLOAD": "Download",
19
+ "BTN_DOWNLOAD_DOTS": "Download...",
20
+ "BTN_DOWNLOAD_JSON": "Download (JSON)",
21
+ "BTN_DOWNLOAD_CSV": "Download (CSV)",
19
22
  "BTN_IMPORT": "Import",
23
+ "BTN_IMPORT_FROM_FILE_DOTS": "Import from file...",
20
24
  "BTN_DUPLICATE": "Duplicate",
21
25
  "BTN_DELETE": "Delete",
22
26
  "BTN_DELETE_FOREVER": "Delete forever",
@@ -423,7 +427,6 @@
423
427
  "BTN_DARK_MODE": "Dark theme?",
424
428
  "BTN_SHOW_ACCOUNT": "Show my account",
425
429
  "BTN_SHOW_MORE_HELP": "Show more parameters",
426
- "BTN_SHOW_OPTION_KEY": "Show options code?",
427
430
  "BTN_CLEAR_CACHE": "Clear data cache",
428
431
  "OFFLINE_MODE": "Force offline mode? (experimental)",
429
432
  "DATA_ENTRY_DIVIDER": "Data entry settings",
@@ -598,18 +601,44 @@
598
601
  "FILE": {
599
602
  "JSON": {
600
603
  "ENCODING": "UTF-8",
604
+ "FORMAT": "JSON",
601
605
  "BTN_DOWNLOAD_HELP": "Download data (JSON)"
602
606
  },
603
607
  "CSV": {
604
608
  "SEPARATOR": ",",
605
609
  "ENCODING": "UTF-8",
606
- "BTN_DOWNLOAD_HELP": "Download data (CSV)"
610
+ "FORMAT": "CSV",
611
+ "BTN_DOWNLOAD_HELP": "Download data (CSV)",
612
+ "ERROR": {
613
+ "EMPTY_FILE": "Empty file, or no header row",
614
+ "NO_HEADER_OR_INVALID_SEPARATOR": "Invalid header row. Please check that the separator '{{separator}}' has been used.",
615
+ "UNKNOWN_HEADERS": "Invalid row's header(s): {{headers}}"
616
+ }
617
+ },
618
+ "PROPERTIES": {
619
+ "CSV_FILENAME": "{{label}}-options.csv",
620
+ "LABEL_HEADER": "Code",
621
+ "VALUE_HEADER": "Value",
622
+ "DESCRIPTION_HEADER": "Description",
623
+ "BTN_SHOW_HINT_KEY": "Show options code?",
624
+ "BTN_DOWNLOAD_AS_CSV": "Download options (CSV)",
625
+ "BTN_IMPORT_FROM_CSV": "Upload options (CSV)...",
626
+ "ERROR": {
627
+ "IMPORT_ERROR": "Import failed:<br/>{{error}}"
628
+ }
607
629
  },
608
630
  "UPLOAD": {
609
631
  "DRAG_AND_DROP": "Drag and drop a file{{ extension }} here<br/>or",
610
632
  "BROWSE": "Browse",
611
633
  "IMPORTING": "Import in progress",
612
- "ERROR": "Error while uploading file"
634
+ "BTN_IMPORT_POLICY_DOTS": "Import policy...",
635
+ "ERROR": "Error while uploading file",
636
+ "IMPORT_POLICY": {
637
+ "TITLE": "Import options",
638
+ "INSERT-ONLY": "Inserts only",
639
+ "UPDATE-ONLY": "Updates only",
640
+ "INSERT-UPDATE": "Insertions or updates"
641
+ }
613
642
  }
614
643
  },
615
644
  "IMAGE": {
@@ -16,7 +16,11 @@
16
16
  "BTN_COMPACT_ROWS": "Compacter les lignes",
17
17
  "BTN_DONE": "Terminer",
18
18
  "BTN_DOWNLOAD": "Télécharger",
19
+ "BTN_DOWNLOAD_DOTS": "Télécharger...",
20
+ "BTN_DOWNLOAD_JSON": "Télécharger (JSON)",
21
+ "BTN_DOWNLOAD_CSV": "Télécharger (CSV)",
19
22
  "BTN_IMPORT": "Importer",
23
+ "BTN_IMPORT_FROM_FILE_DOTS": "Importer depuis un fichier...",
20
24
  "BTN_DUPLICATE": "Dupliquer",
21
25
  "BTN_DELETE": "Supprimer",
22
26
  "BTN_DELETE_FOREVER": "Supprimer définitivement",
@@ -425,7 +429,6 @@
425
429
  "BTN_DARK_MODE": "Thème sombre ? (expérimental)",
426
430
  "BTN_SHOW_ACCOUNT": "Voir mon compte",
427
431
  "BTN_SHOW_MORE_HELP": "Afficher plus de paramètres",
428
- "BTN_SHOW_OPTION_KEY": "Afficher le code des options ?",
429
432
  "BTN_CLEAR_CACHE": "Vider le cache",
430
433
  "OFFLINE_MODE": "Forcer le mode hors-ligne ?",
431
434
  "DATA_ENTRY_DIVIDER": "Paramètres de saisie",
@@ -600,18 +603,45 @@
600
603
  },
601
604
  "FILE": {
602
605
  "JSON": {
603
- "ENCODING": "UTF-8"
606
+ "ENCODING": "UTF-8",
607
+ "FORMAT": "JSON",
608
+ "BTN_DOWNLOAD_HELP": "Télécharger les données (JSON)"
604
609
  },
605
610
  "CSV": {
606
611
  "SEPARATOR": ";",
607
612
  "ENCODING": "UTF-8",
608
- "BTN_DOWNLOAD_HELP": "Télécharger les données (CSV)"
613
+ "FORMAT": "CSV",
614
+ "BTN_DOWNLOAD_HELP": "Télécharger les données (CSV)",
615
+ "ERROR": {
616
+ "EMPTY_FILE": "Fichier vide, ou ligne d'entête manquante",
617
+ "NO_HEADER_OR_INVALID_SEPARATOR": "Ligne d'entête invalide. vérifier que le séparateur '{{separator}}' est utilisé.",
618
+ "UNKNOWN_HEADERS": "Entête(s) de colonne invalide(s): {{headers}}"
619
+ }
620
+ },
621
+ "PROPERTIES": {
622
+ "CSV_FILENAME": "{{label}}-options.csv",
623
+ "LABEL_HEADER": "Code",
624
+ "VALUE_HEADER": "Valeur",
625
+ "DESCRIPTION_HEADER": "Description",
626
+ "BTN_DOWNLOAD_AS_CSV": "Télécharger les options (CSV)",
627
+ "BTN_IMPORT_FROM_CSV": "Importer des options (CSV)...",
628
+ "BTN_SHOW_HINT_KEY": "Afficher le code des options ?",
629
+ "ERROR": {
630
+ "IMPORT_ERROR": "Échec de l'importation:<br/>{{error}}"
631
+ }
609
632
  },
610
633
  "UPLOAD": {
611
634
  "DRAG_AND_DROP": "Glisser et déposer un fichier{{ extension }} ici<br/>ou",
612
635
  "BROWSE": "Parcourir",
613
636
  "IMPORTING": "Importation en cours",
614
- "ERROR": "Erreur durant l'envoi de fichier"
637
+ "BTN_IMPORT_POLICY_DOTS": "Stratégie d'importation...",
638
+ "ERROR": "Erreur durant l'envoi de fichier",
639
+ "IMPORT_POLICY": {
640
+ "TITLE": "Stratégie d'importation",
641
+ "INSERT-ONLY": "Insertions uniquement",
642
+ "UPDATE-ONLY": "Mises à jour uniquement",
643
+ "INSERT-UPDATE": "Insertions et mises à jour"
644
+ }
615
645
  }
616
646
  },
617
647
  "IMAGE": {
@@ -2,7 +2,7 @@
2
2
  "name": "ngx-sumaris-components",
3
3
  "short_name": "ngx-sumaris-components",
4
4
  "manifest_version": 1,
5
- "version": "18.17.6",
5
+ "version": "18.18.0",
6
6
  "default_locale": "fr",
7
7
  "description": "Angular components for building beautiful and responsive Apps",
8
8
  "icons": [{