@sumaris-net/ngx-components 18.2.29 → 18.2.31-alpha-1

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 (36) hide show
  1. package/doc/changelog.md +1028 -1025
  2. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +1 -1
  3. package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +1 -1
  4. package/esm2022/src/app/core/peer/select-peer.modal.mjs +3 -3
  5. package/esm2022/src/app/core/peer/select-peer.module.mjs +1 -1
  6. package/esm2022/src/app/core/services/config/core.config.mjs +1 -1
  7. package/esm2022/src/app/core/services/model/node-feature.model.mjs +1 -1
  8. package/esm2022/src/app/core/services/model/peer.model.mjs +1 -1
  9. package/esm2022/src/app/core/services/network.service.mjs +1 -1
  10. package/esm2022/src/app/core/services/network.utils.mjs +1 -1
  11. package/esm2022/src/app/core/services/storage/entity-store.class.mjs +1 -1
  12. package/esm2022/src/app/core/table/testing/table.testing.mjs +3 -3
  13. package/esm2022/src/app/shared/forms.mjs +3 -3
  14. package/esm2022/src/app/shared/inputs.mjs +1 -1
  15. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +3 -3
  16. package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +3 -3
  17. package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +1 -1
  18. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +5 -5
  19. package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +1 -1
  20. package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +3 -3
  21. package/esm2022/src/app/shared/material/material.animations.mjs +1 -1
  22. package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +1 -1
  23. package/esm2022/src/app/shared/rx-state/rx-state.decorators.mjs +1 -1
  24. package/esm2022/src/app/shared/validator/validators.mjs +1 -1
  25. package/esm2022/src/environments/environment.class.mjs +1 -1
  26. package/esm2022/src/environments/environment.mjs +1 -1
  27. package/fesm2022/sumaris-net.ngx-components.mjs +15 -15
  28. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  29. package/package.json +1 -1
  30. package/src/assets/i18n/en-US.json +735 -735
  31. package/src/assets/i18n/en.json +734 -734
  32. package/src/assets/i18n/fr.json +734 -734
  33. package/src/assets/manifest.json +17 -17
  34. package/src/theme/_material.scss +213 -213
  35. package/src/theme/_ngx-components.scss +955 -955
  36. package/src/theme/_ngx-components.table.scss +597 -597
package/doc/changelog.md CHANGED
@@ -1,1025 +1,1028 @@
1
- # Change log
2
-
3
- ## 0.1.7
4
-
5
- - enh: Menu: Allow dynamic insertion, using a new config options (see 'CORE_CONFIG_OPTIONS.MENU_ITEMS')
6
- * Example:
7
- ```js
8
- const options = [
9
- // Insert before'MENU.HOME'
10
- {title: "Item #1", path: "/settings", icon: "people", before: "MENU.HOME"},
11
-
12
- // Insert after 'MENU.HOME'
13
- {title: "Item #2", path: "/settings", icon: "people", after: "MENU.HOME"}
14
- ];
15
- config.properties[CORE_CONFIG_OPTIONS.MENU_ITEMS.key] = JSON.stringify(items);
16
- ```
17
- Values of 'after' and 'before' will be compared with `title` of existing items.
18
-
19
- ## 0.3.3
20
-
21
- - enh: CSS `.filter-panel` should be used with `.filter-panel-floating` to enable floating position
22
-
23
- ## 0.3.4
24
-
25
- - fix: Users table: use floating filter panel
26
-
27
- ## 0.3.5
28
-
29
- - enh: Add new pipe `arrayFilter` to be able to filter an array, in HTML templates
30
-
31
- ## 0.4.0
32
-
33
- - enh: CSS: change style of error row (use warning color)
34
- - enh: CSS: new class '.visible-dirty' (e.g. `<ion-icon name="star" class="visible-dirty"></ion-icon>` in the `actions` column)
35
- - enh: ValidatorService: add function getI18nErrors(control)
36
- - enh: AppTable: add outputs 'onDirty', 'onError'
37
- - enh: AppTable:
38
-
39
- ## 0.4.1
40
-
41
- - enh: Add new component 'app-actions-columns'
42
-
43
- ## 0.4.2
44
-
45
- - enh: LoadResult class: Add a `fetchMore()` function
46
- - enh: Autocomplete field: Add infinite scroll, using `LoadResult.fetchMore()`
47
-
48
- ## 0.4.3
49
-
50
- - enh: AppTable: add `options` (with property `interactive`) in `deleteRow()` and `deleteRows()`
51
- Used to avoid user confirmation, when deletion has been confirmed elsewhere
52
-
53
- ## 0.4.4
54
-
55
- - enh: Rename `<form-buttons-bar>` into `<app-form-buttons-bar>`
56
- - enh: Export more CSS variables: `--app-paginator-height`, `app-form-buttons-bar-height`
57
-
58
- ## 0.5.0
59
-
60
- - enh: Table: allow keyboard navigation, using `<app-actions-column>` and function `table.confirmAndBackward()` and `table.confirmAndForward()`
61
-
62
- ## 0.7.10
63
-
64
- - enh: Table: no more border-left, on dirty rows (because of sticky columns nightmare !)
65
-
66
- ## 0.9.0
67
-
68
- - enh: Autocomplete field: add config option `suggestLengthThreshold` to suggest after typing more than x characters
69
- - enh: Autocomplete field: add config option `debounceTime`
70
-
71
- ## 0.10.0
72
-
73
- - enh: Add EntityClasses class: use it to get an entity class by name (need to use @EntityClass decorator on the class)
74
-
75
- ## 0.11.4
76
-
77
- - fix: Autocomplete field: when focus out, move caret to start (fix firefox bug, when `input[type=text]` content is too long)
78
-
79
- ## 0.11.5
80
-
81
- - enh: Decorator @Entity now generate the static class function `asObject(source: any, opts?: any): any`
82
-
83
- ## 0.15.0
84
-
85
- - enh: Add IAppForm.loading (optional)
86
- - enh: Add AppForm.waitIdle()
87
- - enh: IAppForm, AppForm, AppTabEditor: Add markAsLoading() and markAsLoaded()
88
-
89
- ## 0.18.0
90
-
91
- - enh: Add AppTable.updateView(): Promise
92
- - enh: Add AppTableDatasource: rename $busy into loadingSubject
93
- - fix: Fix InMemoryTable setValue
94
- - fix: AppTable: after save, refactor code to select previously edited row
95
-
96
- ## 0.19.0
97
-
98
- - fix: refactor AppFormUtils.copyEntityToForm() for multiple values (split on the character '|' )
99
- - fix: remove AppFormUtils.copyForm2Entity() - same a form.value
100
-
101
- ## 0.20.0
102
-
103
- - fix: remove functions `isArray()` (please use `Array.isArray()` instead)
104
- - enh: Add `AccountService.onChange: Subject` to listen account settings changes
105
- - fix: Account model: use minify option to serialize as a POD object
106
- - fix: AccountService: change some internal function's visibility, to protected
107
- - fix: InMemoryService: fix equals() default implementation (avoid infinite loop)
108
- - fix: SCSS: Set mat-select-column to width: 50px, to make it compatible with sticky <mat-table>
109
- - enh: Add ComponentDirtyGuard to public API
110
-
111
- ## 0.20.0
112
-
113
- - fix: AppEntityEditor: remove confirmation before backClick (use ComponentDirtyGuard instead)
114
- - fix: AppEntityEditor: cancel() will not ask a confirmation, because called by dirty guard).
115
-
116
- ## 0.23.0
117
- - fix: MatAutocompleteField: when escape event, close the panel and stop event's propagation
118
- - fix: AppFormButtonsBar: when escape event, make sure preventDefault!=false before emit a back event
119
-
120
- ## 0.24.0
121
-
122
- - fix: AppInstallUpgradeCard: use Cordova Downloader plugin, to download APK file correctly
123
-
124
- ## 0.25.0
125
-
126
- - enh: Add FormErrorAdapter service, configurable using an injection token APP_FORM_ERROR_I18N_KEYS
127
- - enh: Add pipe 'translateFormError' to translate form error in HTML template
128
-
129
-
130
- ## 0.26.0
131
-
132
- - enh: Rename FormErrorAdapter into FormErrorTranslator
133
- - enh: Add FormErrorTranslator to AppForm
134
- - enh: Add directives [matBadgeIcon] and [ionBadgeIcon] to use icon within a matBadge
135
-
136
- ## 0.27.0
137
-
138
- - enh: Split `AppTabEditor` into `AppEditor` and `AppTabEditor`
139
- - enh: Add `markAsReady()` to base components (`IAppForm`, `AppForm`, `AppTable`, `AppEditor`)
140
- - enh: Add `ready() => Promise` to base components (`IAppForm`, `AppForm`, `AppTable`, `AppEditor`)
141
- - enh: `AppEntityEditor`: wait components is ready, before calling `setValue()`
142
- - enh: `waitFor()` now return a `Promise<void>` (instead of a `Promise<any>`)
143
-
144
- ## 1.0.0
145
-
146
- - enh: Store local settings remotely
147
- - fix: Fix suggestFromArray when items is null
148
- - fix: Fix parsing error, in GraphQL service (e.g error from Oracle database)
149
-
150
- ## 1.2.5
151
-
152
- - fix: Install/Upgrade component: can now download file, on Android devices
153
-
154
- ## 1.5.1
155
-
156
- - enh: MatAutocompleteField: set header position has sticky, in CSS
157
- - enh: MatAutocompleteField: if mobile, set autocomplete panel's position to 'above' (instead of 'auto') because keyboard should open at the bottom
158
- - fix: AppForm: add method 'unregisterSubscription()'
159
- - fix: Account: disable form when offline
160
-
161
- # 1.5.6
162
-
163
- - enh: Add observables.waitForTrue() function
164
- - enh: Editor: apply ready() opts (timeout, dueTime)
165
- - fix: suggestFromArray: fix sorting
166
-
167
- # 1.5.8
168
-
169
- fix: When deleting rows selection, make sure to confirm edited row first
170
-
171
- # 1.6.4
172
-
173
- enh: EntitiesTableDateSource: Add 'fetchMore()' function (usable when dataService fill LoadResult.fetchMore)
174
- fix: Auth modal: show error (e.g. when bad credentials)
175
- fix: MatChipsField: rename 'compareWith' in 'equals'
176
- enh: MatChipsField: Allow setup chips color
177
- fix: MatSwipeField: rename 'compareWith' in 'equals'
178
-
179
- # 1.6.5
180
-
181
- fix: MatChipsField: Fix 'focusOut' then 'focusIn' behavior
182
- fix: MatAutocompleteField: Fix 'focusOut' then 'focusIn' behavior
183
-
184
- # 1.6.18
185
- fix: MatDateTimeField: Fix when no Keyboard plugin
186
-
187
- # 1.7.0
188
-
189
- enh: Add directive `*ngVar` - see https://stackoverflow.com/questions/38582293/how-to-declare-a-variable-in-a-template-in-angular
190
-
191
- # 1.8.1
192
-
193
- enh: IEntityService: add new function `canUserWrite()`
194
- enh: AppEntityEditor: add a default implementation of `canUserWrite()`
195
-
196
- # 1.9.5
197
-
198
- enh: AppTable: Add injector in constructor
199
- fix: Platform: detect window touchscreen as NOT mobile
200
- fix: AppEntityEditor: make sure to unsubscribe listen remote changes, when destroy
201
- fix: Home: fix layout, of card close button, in history items
202
- fix: Make sure to use LocalSettingsServicesettings.mobile instead of PlatformService.mobile
203
- enh: Account: auto start listen changes on pod, during the user session
204
-
205
- # 1.10.1
206
-
207
- fix: AppTable: Fix table row deletion, when editedRow is invalid and not saved yet - fix issue IMAGINE-669
208
-
209
- # 1.10.9
210
-
211
- fix: AppTable: Fix table when calling save with options : `keepEditing=false`
212
-
213
- # 1.11.0
214
-
215
- enh: Add component UploadFilePopover
216
- enh: Add component TextPopover
217
- enh: Upgrade to @apollo/client 3.5.10
218
-
219
- # 1.12.1
220
-
221
- fix: searchTextFilter: escape special characters to avoid RegExp parse exception
222
- enh: Autocomplete: Move result count in footer
223
-
224
- # 1.12.4
225
-
226
- fix: AppTable: Avoid deleting a row twice, when deleting an invalid row BUT not editing
227
-
228
- # 1.12.13
229
- enh: Add pipes formGet, formGetControl and formGetArray, to get a form controls
230
- enh: Add pipe strIncludes
231
-
232
- # 1.13.0
233
- enh: Add utility class SharedAsyncValidators
234
- enh: Add SharedAsyncValidators.registerAsyncValidator() to add long during validation job
235
- fix: BaseEntityService: listenChanges() now return an empty observable, when not implemented, instead of error
236
- fix: InstallUpgradeCard: do not show install link, on Windows touch screen
237
-
238
- # 1.14.0
239
- enh: Platform: auto reload web browser's page, if a new version is detected at startup
240
- # 1.14.2
241
- enh: Add DateUtils.resetTime(date, tz?: string)
242
-
243
- # 1.15.0
244
- fix: MateDateField: make sure to display errors
245
- fix: MateDateField: Allow to show matPrefix (e.g. icon)
246
- fix: MateDateField: Better management of mat-error
247
- fix: MateDateTimeField: Add error for dateIsBefore
248
- enh: SharedValidators: add new validator 'dateIsBefore'
249
-
250
- # 1.15.1
251
- fix: MateDateField: Add a timezone to serialize/deserialize date value
252
-
253
- # 1.15.4
254
- enh: MateDateField: Add an input 'datePickerFiler' to filter dates in picker
255
- enh: MateDateTimeField: Add an input 'datePickerFiler' to filter dates in picker
256
-
257
- # 1.15.9
258
- fix: Editor listenChanges() should not update the cache, but call reload() when changes detected.
259
- This will allow fetching partial graph in subscriptions
260
- enh: Editor: show a toast when remote changes are detected
261
- fix: Cache: minor fix
262
-
263
- # 1.15.13
264
- fix: File upload component: fix file/event management
265
- enh: Add new pipe 'formGetGroup:<name>'
266
-
267
- # 1.16.0
268
- enh: Refactor JobUtils functions: 'progression' is now optional, and hold by options
269
-
270
- # 1.17.0
271
- fix: GraphQL: set NetworkStatus.error on error object in order to throw corresponding exception
272
-
273
- # 1.17.1
274
- fix: Hotkeys: Prevent global hotkeys when popover component exists
275
-
276
- # 1.18.0
277
- enh: Autocomplete field: Add search bar on mobile
278
- fix: Autocomplete field: Fix style when multiple=true
279
- fix: Autocomplete field: Fix default displayWith when multiple=true (manage array value)
280
- fix: Exclude Windows from the platform mobile detection
281
-
282
- # 1.18.4
283
- fix: Autocomplete: fix search in mobile searchbar
284
- enh: Material field components: allow to set 'required' as empty tag, and not only '[required]=true'
285
-
286
- # 1.18.4
287
- fix: Autocomplete: fix panel width, on small screens
288
-
289
- # 1.18.7
290
- fix: fix DateUtils.min() and DateUtils.max()
291
-
292
- # 1.19.0
293
- enh: Add a MessageModal, to compose message to users (internal or email messages)
294
- fix: MatDateField: if not required, manually set a date will not apply the value to formControl
295
-
296
- # 1.19.1
297
- fix: Platform detection failed (infinite loop) on MacBook
298
-
299
- # 1.19.2
300
- fix: Platform detection cache
301
-
302
- # 1.19.3
303
- enh: AppForm now wait form not pending, before emitting onSubmit event
304
-
305
- # 1.19.6
306
- fix: Fix toolbar back button
307
- fix: Autocomplete: Fix multiple values (displayValue was no shown)
308
- fix: Autocomplete: avoid to many call to suggest, on mobile
309
- fix: Autocomplete: use mat-option for searchbar, to have selected option is visible
310
- fix: Install APK: make sure to have '.apk' at end of filename
311
- fix: Auth modal: keep modal into loading, when waiting server response
312
- enh: Create a specific card for offline mode update
313
- fix: Entity storage: do NOT set skipIfPristine to false, when storage keep non local entities (e.g. OperationVO)
314
- enh: Entity storage: persist() has a new option skipIfPristine, to be able to force all data to be stored, even if not dirty
315
-
316
- # 1.19.7
317
- enh: Add pipe 'formGetValue' that will listen value changes (from a form or a control)
318
-
319
- # 1.19.16
320
- fix: Date and Date Short field: optimize <mat-error> with a switch/case
321
- fix: Lat/Long pipes: remove provider in root (not need on a pipe)
322
- fix: SharedValidators: rename 'double' validator into 'decimal'. Now return an error 'decimal' when opts.maxDecimals is nil
323
-
324
- # 1.19.18
325
- fix: Add a workaround to patch <html> class to 'plt-desktop', on Windows touch screen (fix sumaris-app issue #346)
326
- enh: EntitiesStorage: detect platform pause, to force saving the storage
327
-
328
- # 1.19.23
329
- fix: Menu: avoid to many call of onLogin() function (add a distinctUntilChanged() filter)
330
- fix: MateDateTime: set required validator using template, and no more by overriding formControl.validator (allow to change the required value)
331
- fix: EntityEditor: wait end of saving, in waitIdle() function
332
- fix: EntityEditor: add debug log when changing/updating route
333
- fix: EntityEditor.load(): rename the unused options 'updateTabAndRoute' into 'updateRoute'
334
- fix: EntityEditor.load(): allow to reset to the first tab (e.g. when load another entity into an existing editor)
335
-
336
- # 1.19.23
337
- fix: Editor: allow to skip page history (computePageHistory can return 'undefined')
338
-
339
- # 1.19.25
340
- fix: Home: translate 'Loading...' message
341
-
342
- # 1.19.28
343
- enh: Add function escapeRegExp() to escape all special regexp characters
344
-
345
- # 1.19.30
346
- enh: Add argument to pipe 'formGetValue' to listen status change (e.g. to force update, when emitEvent: false)
347
-
348
- # 1.20.0
349
-
350
- enh: Menu: allow to enable/disable menu
351
- enh: Menu: rename MenuService.menuVisible$ into MenuService.splitPaneWhen
352
-
353
- # 1.20.2
354
-
355
- enh: Material fields: add @Input() appearance
356
-
357
- # 1.20.3
358
- enh: css-variables-to-root-mobile() will expose variables '--mat-tab-link-height' and '--mat-tab-bar-height'
359
-
360
- # 1.20.4
361
- enh: Add helper class CsvUtils
362
- enh: Add pipe formatProperty
363
- enh: Add directive [appAutoTitle] for <ion-label> or <mat-label>
364
-
365
- # 1.20.5
366
- enh: formatProperty pipe: when type is 'boolean', display a translated Yes/No
367
-
368
- # 1.20.7
369
- enh: add function FileUtils.writeTextToFile()
370
-
371
- # 1.20.11
372
- enh: add function FileUtils.downloadUri()
373
-
374
- # 1.20.13
375
- fix: fix SharedValidators.decimal() when maxDecimals = 3 (cached regexp was wrong)
376
-
377
- # 1.20.14
378
- fix: Menu: Force menu update when config changed
379
-
380
- # 1.20.16
381
- fix: MatChipsField: fix chip height
382
-
383
- # 1.20.17
384
- fix: Add module ResizableModule, for MatTable column resize
385
-
386
- # 1.20.18
387
- fix: PlatformService.download() now useFileUtils.download(), that create a temp download (not need browser permission to open popup)
388
-
389
- # 1.20.19
390
- enh: Add new abstract class AppEntityEditorModal, that can managed many forms and tables
391
-
392
- # 1.20.20
393
- fix: SCSS: remove `user-select: text !important` applied on body, because of modals ViewEncapsulation.None (e.g. physical gear modal) where Tab label were becomes focusable
394
-
395
- # 1.20.21
396
- fix: Fix mat latlong field: was broken since v1.19.13
397
-
398
- # 1.20.21
399
- fix: Fix MatDateField mat-error display (was too large)
400
-
401
- # 1.20.24
402
- fix: Revert change on LatLongField (SCSS file was removed ??)
403
-
404
- # 1.20.25
405
- fix: MatBooleanField: set indeterminate=true, when value is null
406
-
407
- # 1.20.27
408
-
409
- fix: Mat***Field: add `@Input() appearance`
410
-
411
- # 1.20.30
412
- fix: Add InMemoryDataService.hiddenCount
413
-
414
- # 1.20.33
415
- fix: MatAutocompleteField: reload items when cleaning text, and no suggestLengthThreshold
416
-
417
- # 1.20.34
418
- fix: AppTable: remove 'opts.skipIfLoading' on delete functions, to use only 'opts.interactive' to force deletion when table is busy.
419
-
420
- # 1.21.0
421
- enh: AppForm: use public behavior subjects: readySubject, loadingSubject, errorSubject
422
-
423
- # 1.22.0
424
- enh: Add social components: UserEventNotification and JobProgression
425
-
426
- # 1.22.1
427
- enh: Menu: add APP_MENU_OPTIONS token, to configure menu (e.g. show notification icon in the left menu header)
428
-
429
- # 1.22.9
430
- enh: Remove <app-user-events-table> (move to specific sub projects that use ngx-components)
431
-
432
- # 1.22.11
433
- enh: Rename <app-user-event-notification-component> into <app-user-event-notification-icon>
434
-
435
- # 1.22.12
436
- enh: Can mark a Moment without time, allowing empty time field in MatDateTime
437
-
438
- # 1.23.6
439
- fix: Many fix in table. Upgrade to ngx-material-table 0.12.0
440
- enh: Table, Form and Editor: Add a destroySubject
441
- enh: Observables functions first***Promise() : add more options (timeout or stop notifier)
442
-
443
- # 1.23.10
444
- enh: Autocomplete: add a 'title' property on each option, on desktop screen
445
-
446
- # 1.23.11
447
- fix: Memory Data service: now implement IStartableService
448
- enh: StartableService: use a stopSubject, to stop waitFor promise
449
- enh: remove unused class EntitiesService. Use IEntitiesService instead
450
-
451
- # 1.23.26
452
- enh: Add new pipe 'arrayJoin'
453
- enh: 'arrayPluck' pipe: allow to use string[] for path
454
- enh: getPropertyByPath() function now allow to use string[] as path
455
-
456
- # 1.23.29
457
- enh: FormArrayHelper: add setValue() to resize the FormArray, then set value
458
-
459
- # 1.23.30
460
- fix: InMemoryDataService: do NOT apply default sortReplacement id -> rankOrder
461
-
462
- # 1.23.31
463
- fix: InMemoryDataService: change 'dirtySubject' as public property
464
-
465
- # 1.23.39
466
- enh: Add FormArrayHelper.patchValue() : clear array, then push each value
467
- fix: StartableService: avoid to log error when stopped
468
-
469
- # 1.23.41
470
- enh: AppEditor: Add 'loaded' getter
471
-
472
- # 1.23.44
473
- enh: Referential model: add a 'icon' property (IconRef)
474
-
475
- # 1.23.46
476
- enh: Add `ColorScale.getValueColor(): Color`
477
- enh: EntityEditorModal: rename input `isNewData` into `isNew`
478
-
479
- # 1.23.51
480
- Observables: function `waitFor()`, `waitForTrue()`, `watForFalse()`, `firstNotNilPromise()`
481
- - fix: Make sure `takeUntil` is always the last operator (avoid memory leak)
482
- - enh: Observables: Allow set option.stopError with custom error message
483
- - enh: Observables: Create the Error outside the observable, to keep the original stack trace readable
484
-
485
- # 1.23.61
486
- - fix: Boolean field: fix button layout
487
-
488
- # 1.23.65
489
- - enh: Add pipes: isNotNil and isNotNilOrNaN
490
-
491
- # 1.23.67
492
- - fix: Rename DateFormatPipe into DateFormatService (DateFormatPipe is no more a provider)
493
- - fix: Fix patterns in DateFormatPipe/Service : add a fallback when translate service is not started - fix issue sar-app #28
494
-
495
- # 2.0.0
496
- - enh: Migration to
497
- - Angular 14.2
498
- - Ionic 6.2
499
- - Angular Material Table 0.14.4 (allow to use async validator for rows)
500
- - Apollo 3, graph-ws 5
501
- - enh: Add <app-debug> component
502
-
503
- # 2.1.0
504
- - enh: Add new class AppFormArray with all functions of FormArrayHelper
505
-
506
- # 2.2.1
507
- - fix: FormArrayHelper and AppFormArray: Apply the parent disabled state, in added controls, when calling resize() or patchValue()
508
- - fix: FormArrayHelper.getOrCreateArray(): Apply the parent form disabled state, in added FormArray
509
- - fix: MatChipsField: fix loading spinner freeze
510
-
511
- # 2.2.3
512
- - enh: Test Geolocation.getCurrentPosition() in the lat/long field test page
513
-
514
- # 2.2.4
515
- - fix: Fix DateUtils.isSame(), when first argument is nil, but the second not
516
- - enh: AppTable: allow to call deleteSelection with opts (e.g `{interactive: false}`)
517
-
518
- # 2.2.6
519
- - fix: Refresh menu on any account changes (login changes - eg. when account updated)
520
-
521
- # 2.2.8
522
- - fix: Table actions column: add CSS variable to set column width, min-width and max-width
523
-
524
- # 2.3.7
525
- - fix: Mat form field: use inherit font size (do not force font-size, in the theme)
526
- - fix: MatDateShort: fix behaviour for Angular 14
527
-
528
- # 2.4.0
529
- - Breaking change: ProgressBarService and HTTP_INTERCEPTORS no longer provided in SharedModule (see: AppModule)
530
- - enh: Make ProgressBarService fully optional (InjectionToken: APP_PROGRESS_BAR_SERVICE)
531
- - enh: Settings: the settings object is now stored in json format
532
-
533
- # 2.4.1
534
- - fix: AppFormArray: do not resize the array when patchValue() receive `undefined` value (e.g. useful when called by parent, recursively, without value)
535
- - fix: AppAsyncTable: optimize markAsUntouched()
536
-
537
- # 2.4.2
538
- - enh: Graphql service: add new token `APP_GRAPHQL_FRAGMENTS` to register fragments, and avoid redeclaration in queries (see https://github.com/apollographql/apollo-client/pull/9764#issuecomment-1329857853)
539
-
540
- # 2.4.3
541
- - fix: AppFormArray: do not resize the array when patchValue() receive `null` or `undefined` value (same behavior as official `FormArray.patchValue()`)
542
-
543
- # 2.4.4
544
- - fix: Applying environment defaultLocale, when settings data has no locale (merge some code from lpecquot, that was in a branch)
545
-
546
- # 2.4.9
547
- - fix: Settings: allow to store settings as string (like < 2.4.0) using an injection token
548
-
549
- # 2.4.10
550
- - fix: When detecting a app update, stop the check timer to avoid to many toast to be displayed
551
-
552
- # 2.4.14
553
- - enh: add function `setPropertyByPath()`
554
- - fix: Implement `EntityUtils.getPropertyByPath()` using generic shared function `getPropertyByPath()`
555
-
556
- # 2.4.15
557
- - fix: Fix pipes formGetControl, formGetValue, formGetGroup : when using a path, return nil if control not found, and NOT the form itself
558
-
559
- # 2.4.16
560
- - fix: `SharedModule.forRoot()`: make environment optional, to be defined it in the `app.module.ts` (need by Quadrige App)
561
-
562
- # 2.4.17
563
- - fix: MatLatLongField: remove strict character regexp, in degrees part, to be able to set only one digit (e.g. `9°`)
564
-
565
- # 2.4.18
566
- - fix: MatDateShortField: fix control validation, in desktop mode
567
-
568
- # 2.4.19
569
- - fix: MatAutocompleteField: revert the cdk overlay position, when closing the mat-select panel
570
-
571
- # 2.4.23
572
- - enh: Add DateUtils.markTime(), to reset the 'no time' marker
573
- - enh: Add DateUtilsEntityEditor: simplify updateTabAndRoute()
574
- - enh: Add DateUtilsEntityEditor: updateRoute() now manage queryParams change, before /new to /:id transition
575
- - enh: Toolbar: goBack() return a boolean
576
-
577
- # 2.4.25
578
- - enh: Environment: add a boolean option 'sameUrlPeer', to force network to start on peer at the same URL
579
- - enh: EntityEditor: allow to listen changes on local entity
580
- - enh: add functions collectByProperty() to split an array in a map of array
581
-
582
- # 2.4.26
583
- - fix: Rename pipe 'isNotOnField' by 'isOnDesk'
584
-
585
- # 2.4.28
586
- - enh: TranslateContext: allow to translate many keys (string[])
587
- - fix: Force ngx-quicklink to 0.3.0
588
-
589
- # 2.4.31
590
- - enh: Add JsonUtils.parseFile()
591
-
592
- # 2.4.33
593
- - enh: Add AppPropertiesForm.length
594
-
595
- # 2.4.48
596
- - fix: Fix highlight pipe (used by autocomplete field)
597
-
598
- # 2.4.50
599
- - enh: Add type 'enums' for AppFormField
600
-
601
- # 2.4.54
602
- - enh: Use NavController by default, instead of Angular router. This will use the default animation style of the OS
603
-
604
- # 2.4.55
605
- - fix: Editor: Disable animation, when reloading same page after saving
606
-
607
- # 2.4.58
608
- - enh: Add storage explorer (with log preview)
609
- - enh: Add debug service (to send debug data to server)
610
- - enh: Add logging service
611
-
612
- # 2.4.61
613
- - enh: Add logger on network service
614
-
615
- # 2.4.67
616
- fix: Minor fix (add missing i18n)
617
- fix: GeolocationUtils: add many useful functions, and detect Capacitor errors (from message)
618
- fix: Fix some issues in storage explorer
619
-
620
- # 2.4.74
621
- enh: LocalSettingsService: save changes in local storage, when calling setProperty()
622
-
623
- # 2.4.75
624
- enh: SharedValidator: add a precision validator
625
-
626
- # 2.4.79
627
- fix: ImageGallery: fix add button icon (center alignement)
628
-
629
-
630
- # 2.4.81
631
- fix: AppToolbar: allow to use ion-segment in app-toolbar
632
-
633
- # 2.4.82
634
- enh: Migrate to Ionic 7
635
- fix: Form field: show the clear button, when clearable=true, on types 'integer', 'double', 'string', 'date' and 'date-time'
636
-
637
- # 2.4.82
638
- enh: AppEntityEditor: add get/set for autoOpenNextTab
639
-
640
- # 2.4.87
641
- fix: AppEntityEditor: When reload the editor, force the fetch policy to 'network-only'
642
-
643
- # 2.4.88
644
- fix: AppInstallUpgradeCard: Installation APK link are not visible - fix issue [sumaris-app#445](https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-app/-/issues/445)
645
-
646
- # 2.4.88
647
- enh: Add protected BaseEntityService.getLoadQueryNames()
648
-
649
- # 2.4.89
650
- fix: Fix Autocomplete searchbar value trigger, after ionic 7 update
651
-
652
- # 2.4.90
653
- fix: AppEntityEditor: when catch error in save(), set the selectedTabIndex=0 before calling setError()
654
- This will allow subclasses to override the default selectedTabIndex after an error occur, inside the overridden setError()
655
-
656
- # 2.4.91
657
- enh: functions: allow to use sort(array) without the 'attribute' argument (e.g. allow to sort a string[])
658
-
659
- # 2.4.95
660
- fix: Platform: avoid error at startup, because of StatusBar in web mode
661
- enh: MatBooleanField: display value when disabled, instead of 'empty'
662
-
663
- # 2.4.112
664
- enh: AppBadge: allow to set a text or number content
665
-
666
- # 2.4.114
667
- enh: Menu: allow to add sub menu item
668
-
669
- # 2.4.158
670
- enh: Environment: add useHash property to configure Angular router to use hash URL (need by web-ext)
671
-
672
- # 2.5.0
673
- - enh: Add token APP_USER_SETTINGS_OPTIONS of type UserSettingsOptions to add user properties table in AccountPage
674
- - fix: MatBooleanField: in checkbox style, the placeholder can be shown as expected
675
-
676
- # 2.6.0
677
- - enh: Account: Add User tokens (table and modal)
678
-
679
- # 2.6.23
680
- - fix: Fix Configuration.getPropertyAsNumbers() when no value (avoid to get an array with an unique NaN value)
681
-
682
- # 2.6.25
683
- - enh: Upgrade to nodejs 18
684
- - fix: Menu: hide spacer divider ion-label (hide the skeleton)
685
-
686
- # 2.6.28
687
- - fix: ImageGallery: Change image's title background color
688
-
689
- # 2.6.31
690
- - fix: ImageGallery: Add output event when after editing title
691
-
692
- # 2.6.32
693
- - fix: AppFormArray: Avoid an infinite loop, when calling resize(0) if options.allowEmptyArray=false
694
- - fix: Table, Form, Editor: fix error when markAsLoaded() on closed BehaviorSubject
695
- - fix: Table, Form, Editor: Make sure waitIdle() will stop, when component is destroyed (force default opts)
696
-
697
- # 2.6.34
698
- - enh: functions: add a static function `underscoreToChangeCase()`
699
-
700
- # 2.6.35
701
- - fix: Settings: Add type for property `OfflineFeature.filter`, then use it to in `LocalSettingsService.getOfflineFeatures()`
702
-
703
- # 2.6.38
704
- - fix: Fix mapGet pipe, when key is zero (0)
705
-
706
- # 2.6.39
707
- - enh: table: Add an input `style: 'table'|mat-table` into `<app-actions-column>`, to be usable inside a `<table mat-table>` (using `<td>`) or `<mat-table>` (using `<mat-cell>`)
708
-
709
- # 2.8.0
710
- - enh: `IAppForm<T>` : add a type `<T=any>`
711
- - enh: `IAppForm` : add optional functions `setValue()`, `patchValue()`, `resetValue()` and `getValue()`
712
- - fix: `AppForm` and `AppEditor`: Remove unused and deprecated properties `_loading`, `_$ready`, `_$loading`
713
- - fix: `AppForm` : rename `_enable` as `enabled` to avoid confusion with `enable()`
714
- - enh: Add abstract class `AppFormContainer` to manage many `IAppForm` - and use it as a super class of `AppEditor`
715
- - enh: Add new pipes for SelectionModel :
716
- - `isSelected`: e.g. `selection | isSelected: row`,
717
- - `isEmptySelection`: e.g. `selection | isEmptySelection`
718
- - `isNotEmptySelection`: e.g. `selection | isNotEmptySelection`
719
- - `selectionLength`: e.g. `selection | selectionLength`,
720
- - `isMultipleSelection`: e.g. `selection | isMultipleSelection`,
721
- - enh: Add new pipes for table :
722
- - `isAllSelected`: e.g. `table | isAllSelected`,
723
- - `isNotAllSelected`: e.g. `table | isNotAllSelected`
724
-
725
- # 2.8.1
726
- - enh: Add a pipe `badgeNumber` to limit badge content when > `99` (will display `99+`)
727
- - enh: function setPropertyByPath() now return the input obj
728
- - fix: Referential: fix `asObject()`
729
- - enh: Add options:
730
- - `sumaris.defaultLatLongFormat.enabled` to show/hide default Lat/Lon setting in account page (default is true)
731
- - `sumaris.auth.api.token.scope.enabled` to show/hide scopes in API token table (default is false)
732
- - `sumaris.auth.api.token.scope.default` set the default scope for new API token, mandatory if `sumaris.auth.api.token.scope.enabled` if false (default is 'read_api')
733
- - enh: Add AppRowField component: wrap an AppFormField into a table column
734
- - enh: Add pipe `valueFormat` to format a value with a FormFieldDefinition (equivalent to pipe `propertyFormat`)
735
- - fix: `UploadFileComponent` Refactored
736
- - enh: Add new config options to override the form field background color (active, focus or disabled)
737
- - enh: Add new pipe `booleanFormat`
738
- - enh: Update pipe `propertyFormat` to use complex path (using `getPropertyByPath()`)
739
- - enh: Add static functions `CsvUtils.getLocalizedEncoding()` and `CsvUtils.getLocalizedSeparator()`
740
- - enh: Add static function `JsonUtils.getLocalizedEncoding()`
741
-
742
- # 2.8.2
743
- - enh: Function `getPropertyByPath` now handles the optional chaining operator `(?.)`
744
- - enh: Add `AccountService.onWillLogout` emitter
745
- - fix: Table: Call `emitRefresh()` instead of `onRefresh.emit()` to safely emit to an opened Observable
746
-
747
- # 2.8.3
748
- - enh: Add support of `<mat-hint>` in MatDateTime, MatDate, MatDateShort, MatAutocompleteField and MatLatLongField
749
- - enh: Add `DateUtils.compare` to be able to sort dates (using Array `sort()`)
750
- - enh: Add function `resizeArray(T[], size): T[]`
751
- - fix: NamedFilter: Abort import if callback returns null or undefined
752
- - fix: DataSource: Allow to refresh datasource (using `watchAll()`) when having dirty row
753
-
754
- # 2.8.4
755
- - enh: MatBooleanField: add `@Input() clearable` (default to `false`)
756
- - fix: MatBooleanField: when resetting value, hide radio buttons
757
-
758
- # 2.8.11
759
- - fix: MatBooleanField: hide checkbox's placeholder when floatLabel=never
760
-
761
- # 2.8.12
762
- - enh: Pipe `referentialToString`: add new option `propertySeparator` to override the default ' - ' separator
763
-
764
- # 2.8.13
765
- - enh: AsyncTable: make `setFilter()` async
766
-
767
- # 2.8.14
768
- - enh: Upgrade to ngx-material-table 17.2.1 (add options to TableElement `delete()`, `cancelOrDelete()` and `confirmEditCreate()`)
769
-
770
- # 2.9.0
771
- - enh: Upgrade to Angular 17.3
772
- - fix: Replace zone.js `setTimeout()`, by rx-angular zone-less
773
- - fix: IFormControlPathTranslator : Rename interface IFormControlPathTranslator into IFormPathTranslator, and rename property `controlPathTranslator` into `pathTranslator`
774
- - fix: Remove deprecated validator `SharedValidators.double` (was renamed into `SharedValidators.decimal`)
775
- - fix: AppAsyncTable: re add `@Input() get filter`
776
- - fix: AppTable: clear selection when opening a row (like AppAsyncTable)
777
- - fix: MatAutocompleteField: Add `@Input() panelClass` (same as `class`)
778
- - fix: MatAutocompleteField: Allow boolean inputs from string (using `@Input({transform: booleanAttribute})`)
779
- - fix: MatAutocompleteField: add `panelWidth` and `panelClass` to `MatAutocompleteFieldConfig`
780
-
781
- # 2.9.1
782
- - fix: MatAutocompleteField: revert `applyImplicitValue` default value `true`
783
- - fix: MatChipsField: fix usage of `suggestLengthThreshold`
784
- - enh: MatChipsField: add `applyImplicitValue` (default: false)
785
-
786
- # 2.9.2
787
- - fix: Notification list: add an ion-text-wrap to the notification message
788
-
789
- # 2.9.3
790
- - fix: Home: Add a call to `markForCheck()` after removing a page history item
791
-
792
- # 2.9.4
793
- - fix: Form: reduce line height of row label (form-container > ion-row > ion-col > ion-label)
794
-
795
- # 2.9.6
796
- - fix: MatAutocompleteField: Remove animation in searchbar (bad icon position in iOS)
797
-
798
- # 2.9.7
799
- - fix: Form: fix field label position (form-container > ion-row > ion-col > ion-label)
800
-
801
- # 2.9.8
802
- - enh: Add AppFormUtils.filterErrorsByPrefix() and AppFormUtils.filterErrors()
803
-
804
- # 2.9.13
805
- - fix: Home: when removing a page history, force settings to update
806
-
807
- # 2.9.17
808
- - fix: MatSelectPanel: add `--min-width: fit-content` to class `mat-select-panel-fit-content`
809
-
810
- # 2.9.20
811
- - enh: NamedFilterSelector: add `filterCleared` event
812
-
813
- # 2.9.22
814
- - enh(deps): Minor update to Angular 17.3.12
815
- - enh(theme): Dark theme: Move dark theme toggle into the settings form
816
- - enh(theme): Dark theme: Fix toggle field style, in dark theme
817
- - enh(settings): Add icons on each form fields
818
- - fix(config): When saving the remote config, do not return to the editor config's inherited properties
819
-
820
- # 2.9.23
821
- - fix(boolean-field): fix click on radio button 'no', when field has no value
822
-
823
- # 2.11.1
824
- - enh(deps): Upgrade to apollo-angular 7.1.2 and apollo 3.11 (+ fix breaking changes in graphql.service.ts)
825
- - fix(css): Dark theme: fix checkbox style, and autocomplete panel
826
-
827
- # 2.11.2
828
- - enh(app-text-form): Add new inputs `appearance` and `subscriptSizing`
829
- - fix(css): Dark theme: fix style for outline field
830
-
831
- # 2.11.3
832
- - fix(app-text-form): Input `autoHeight` is now deprecated (use `autoSize` instead)
833
- - enh(app-text-form): Add new inputs `autoSizeMinRows` and `autoSizeMaxRows`
834
-
835
- # 2.11.7
836
- - fix(css): Dark theme: fix style
837
-
838
- # 2.11.8
839
- - enh(form-error): Add options to `IFormPathTranslator.translateFormPath()`
840
-
841
- # 2.12.0
842
- - enh(form-error): Remove deprecated interface `IFormControlPathTranslator`
843
-
844
- # 2.12.4
845
- - fix(date): Update formControl (and datePicker) when textControl value changes, and clean text input by regexp
846
- - fix(date-time): Keep control as invalid is time is empty
847
- - enh(date-time): Add new `@Input() allowNoTime` to make time optional
848
- - fix(lat-long): Fix deletion, when press delete key
849
-
850
- # 2.12.7
851
- - fix: addShortcut handler use `KeyboardEvent` instead of a simple 'EVent'
852
-
853
- # 2.12.8
854
- - enh: function `toNumber()` will now return the default value, when input is `NaN`
855
-
856
- # 2.12.9
857
- - fix(paginator): Fix paginator style on mobile screen (align to the left, and hide page size, like before the Angular 17 migration)
858
-
859
- # 2.12.10
860
- - fix(autocomplete): Compute the panel width if not set (in mobile) - workaround for an issue in mat-select panel
861
-
862
- # 2.12.12
863
- - fix(theme): add all dark colors from material theme
864
- - fix(autocomplete): in mobile device, add a text-wrap and a max-height in mat-option
865
-
866
- # 2.12.13
867
- - fix(config): New option `sumaris.account.latLongFormat.enable` to replace the deprecated option `sumaris.defaultLatLongFormat.enabled` (key was not well named)
868
-
869
- # 2.12.16
870
- - fix(autocomplete): Reload items when `showAllOnFocus = true`
871
- - fix(autocomplete): Use `??` operator, instead of `toBoolean()`, `toNumber()` etc.
872
- - enh(autocomplete): Add option `applyImplicitValue` to config
873
- - enh(pipe): add a `asBoolean` pipe, with an optional predicate function as option (e.g. to test any value)
874
- - enh(account): Allow to change password, if auth token is `token` (will update the pubkey)
875
- - fix(lat-long): Refactor component (remove maskito placeholder use)
876
- - enh(table): Add new component `<nav-actions-column>`
877
-
878
- # 2.12.19
879
- - fix(nav-actions-column): Fix when inside a `AppAsyncTable`
880
-
881
- # 2.12.26
882
- - enh(app-async-table): declare property `readonly cd: ChangeDetectorRef`
883
- - enh(app-async-table): implement `markForCheck()` and `detectCHanges()`
884
- - enh(app-table): declare property `readonly cd: ChangeDetectorRef`
885
- - fix(app-table): call `detectChanges()` inside `editRow()`, `addRowToTable()` and `toggleSelectRow()` - need by SUMARiS (e.g. samples tables)
886
- - fix(app-table): `toggleSelectRow()` should not call `event.preventDefault()` otherwise checkbox will not be checked
887
-
888
- # 2.12.27
889
- - enh(app-table): implement `markForCheck()` and `detectChanges()`
890
-
891
- # 2.12.29
892
- - fix(new-token-modal): Add a full form and fix save issue
893
-
894
- # 2.12.30
895
- - enh(platform): Add copy to clipboard return state
896
-
897
- # 2.12.29
898
- - fix(new-token-modal): Add a full form and fix save issue
899
-
900
- # 18.0.0
901
- - enh(deps) Upgrade to Angular 18.2.8 and Ionic 8.3
902
- - enh(deps) Remove zone.js (enable experimental zone-less config)
903
- - enh(app-properties-form): Use an autocomplete field to select an option, instead of a simple mat-select
904
- - enh(app-properties-form): Add `@Input() showHintKey: boolean` to show option key (has a hint)
905
- - enh(network-service): Avoid to restart the service if peer has not changed
906
- - enh(AppFormArray): allow to use AppFormArray on any type (and not only Entity has before)
907
- - enh(AppFormUtils) add useful static functions to enable/disable control(s)
908
- - enh(mat-autocomplete-field): add option `selectInputContentOnFocus` to option, to select the input content on focus in
909
- - enh(app-named-filter-selector): Add `@Input() buttonsPosition: 'matSuffix'|'after'` to let user defined button position (inside the field, or after)
910
- - fix(AppForm and AppFormContainer) log error using the child path (if defined using `addForm()`)
911
- - fix(graphql) Fix pod error in JSON format, before parsing it (e.g. Oracle can return error on multiple lines)
912
- - fix(nav-actions-column): Use `OnPush` changeDetection
913
- - fix(app-form-field): Emit `(keyup.enter)` event, when field's type is `double`
914
-
915
- # 18.0.5
916
- - enh(mat-autocomplete-field):
917
- - Change type of `MatAutocompleteFieldConfig.suggestFn` to use SuggestFn<T, F> (allow to pass more options - e.g. used to resolve entity in AppPropertiesUtils)
918
- - Add `@Input() label`
919
- - Add `@Input() hideRequiredMarker`
920
- - enh(app-form-field):
921
- - Add `@Input() hideRequiredMarker`
922
- - Fix the style when readonly and type `enum`
923
- - interface `FormFieldDefinition`: Add property `serializeAttribute?: string` (instead of using autocomplete.filer.joinAttribute)
924
- - add a static function `FormFieldDefinitionUtils.prepareDefinitions()` to resolve enum values, by `InjectionToken`
925
- - enh(app-properties-form):
926
- - Entity/Entities are now resolved from helper class AppPropertiesUtils
927
- - Allow to change add button title
928
- - Resolve enum item, when using InjectionToken for values
929
- - enh(shared) Add decorators `@RxStateRegister()` `@RxStateSelect()` and `@RxStateProperty()` to connect property to a `RxState`
930
- - fix(properties-utils): Add `opts?: {keepOrphan?: boolean}` to `AppPropertiesUtils.arrayFromObject` to be able to remove property without definition (`keepOrphan` is `true` by default)
931
- - fix(token-table): Fix error when no scopes defined (InjectToken `APP_USER_TOKEN_SCOPES` should be optional)
932
-
933
- # 18.0.6
934
- - fix(scss): set flex-wrap to nowrap
935
- - enh(autocomplete-test): add test case with a button
936
- - fix(logout) Logout should be done AFTER home redirection, because of cache clearing - see issue #5
937
-
938
- # 18.0.7
939
- - fix(hotkeys) Fix default platform control key ('meta' on iOS)
940
-
941
- # 18.0.8
942
- - fix(hotkeys) Avoid to open many help modal
943
- - fix(hotkeys) Skip open help modal, if nothing to display
944
- - fix(form-buttons-bar) Fix shortcuts for iOS
945
- - fix(modal-toolbar) Fix shortcut for iOS
946
-
947
- # 18.0.9
948
- - fix(mat-latlong-field) Mark control as dirty, when text control changed
949
- - fix(about) Fix missing markdown module, to display config description
950
- - enh(about) Allow to override the "report an issue" link, using a config option `sumaris.reportIssue.url`
951
-
952
- # 18.0.10
953
- - enh(utils) Add static functions `isFirefox()`, `isSafari()` and `isEdge()` to test user agent
954
- - enh(utils) Add static functions `EntityUtils.collectIds()` and `EntityUtils.splitById()`
955
- - fix(utils) Mark function `EntityUtils.collectById()` as deprecated (in flavor of `EntityUtils.splitById()`)
956
-
957
- # 18.1.0
958
- - enh(deps) Upgrade to angular 18.2.11 and other deps
959
- - fix(deps) move maildev library into dev dependencies
960
-
961
- # 18.1.1
962
- - enh(deps) Update angular-eslint to 18.4.0
963
-
964
- # 18.1.2
965
- - enh(deps) Revert to Ionic 7.8.6
966
-
967
- # 18.1.3
968
- - fix(settings) Add static function `isOnFieldMode()`
969
- - fix(menu) Make unpinned menu works, when reload app (F5) with a pinned menu
970
-
971
- # 18.1.4
972
- - fix(tab) Keep default tab label style (e.g. min-width) when stretch tabs is enabled
973
- - fix(tab) Reduce tab label padding, on small screen
974
-
975
- # 18.1.7
976
- - enh(AppFormArray) Add `clone()` function
977
-
978
- # 18.2.0
979
- - enh(base-entity-service) Allow opts.toEntity to be a function (e.g. to be able to transform each element, also when fetching more items)
980
- - fix(graphql-service) Allow `opts.update` to use new Apollo type `MutationUpdaterFunction` (type `MutationUpdaterFn` is deprecated)
981
-
982
- # 18.2.6
983
- - fix(autocomplete-field) Fix arrow drop icon position, when mobile
984
- - fix(autocomplete-field) Use desktop arrow drop icon, when multiple and desktop
985
- - fix(BaseEntityService) simplify functions `fromObject()` and `fromObjects()` (move `toEntity` argument into `options`)
986
- - enh(services) Allow `suggestFromArray()` to search using `?` as wildcard (=match one character) in the search text
987
- - enh(HighlightPipe) Allow to use the character `?` as wildcard (=match one character) in the search text
988
- - enh(functions) Allow `suggestFromStringArray()` to search using `?` as wildcard (=match one character) in the search text
989
- - enh(shared) New helper class `RegExpUtils`
990
-
991
- # 18.2.7
992
- - enh(autocomplete-field) Add `@Input() selectInputContentOnFocusDelay` - workaround when input text selection is overridden by another event (e.g. see in SUMARiS, in the calendar component)
993
-
994
- # 18.2.9
995
- - enh(autocomplete-field): Add `@Input() reloadItemsOnFocus` : Reload items when focused, necessary if filtered items depends on an external source (e.g. see in SUMARiS, in the calendar component)
996
-
997
- # 18.2.11
998
- - enh(DateUtils): Add `DateUtils.diffAbs()` to compute duration between two dates
999
-
1000
- # 18.2.19
1001
- - enh(timepicker) MatDateTime : Migrate timepicker to new library Ngx Mat TimePicker (fix animation, cancel button, Angular 17 compatibility, etc.)
1002
-
1003
- # 18.2.21
1004
- - enh(functions) Rename `selectInputContent` into `selectInputContentFromEvent`, and make `selectInputContent` that only use an <input> as argument
1005
- - enh(autocomplete-field) Add `@Input() clearInvalidValueOnBlur: boolean` to reset the field when typing invalid search text (no match or no many matches)
1006
- - fix(swipe-field) Fix swiper previous/next arrows
1007
-
1008
- # 18.2.23
1009
- - enh(validators) add option skipIfNoTime to dateRange
1010
-
1011
- # 18.2.24
1012
- - enh(pipe) add new pipe `isValidDate` with option `requiredTime` (to test date with noTime flag)
1013
-
1014
- # 18.2.26
1015
- - enh(select-peer-modal) Allow to search on peers modal
1016
- - enh(select-peer-modal) Allow to select peer by features (aka programs) - should set `enableSelectPeerByFeature: true` in the environment token (disabled by default)
1017
-
1018
- # 18.2.28
1019
- - fix(mat-boolean-field) Small refactoring + simplify blur detection, using standard Angular outputs
1020
- - enh(mat-latlong-field) Refactor the component, to use separate inputs (instead of using Maskito)
1021
- - fix(entity-store) setEntities() should mark all entities as dirty, when id mode is enabled (because an optimization in `persist()` that skip pristine entities)
1022
-
1023
- # 18.2.29
1024
- - enh(validators) add opts to dateMaxDuration to skip date with NoTime
1025
- - fix(mat-boolean-field) Fix buttons layout (padding) to be same as sumaris QV pmfm buttons
1
+ # Change log
2
+
3
+ ## 0.1.7
4
+
5
+ - enh: Menu: Allow dynamic insertion, using a new config options (see 'CORE_CONFIG_OPTIONS.MENU_ITEMS')
6
+ * Example:
7
+ ```js
8
+ const options = [
9
+ // Insert before'MENU.HOME'
10
+ {title: "Item #1", path: "/settings", icon: "people", before: "MENU.HOME"},
11
+
12
+ // Insert after 'MENU.HOME'
13
+ {title: "Item #2", path: "/settings", icon: "people", after: "MENU.HOME"}
14
+ ];
15
+ config.properties[CORE_CONFIG_OPTIONS.MENU_ITEMS.key] = JSON.stringify(items);
16
+ ```
17
+ Values of 'after' and 'before' will be compared with `title` of existing items.
18
+
19
+ ## 0.3.3
20
+
21
+ - enh: CSS `.filter-panel` should be used with `.filter-panel-floating` to enable floating position
22
+
23
+ ## 0.3.4
24
+
25
+ - fix: Users table: use floating filter panel
26
+
27
+ ## 0.3.5
28
+
29
+ - enh: Add new pipe `arrayFilter` to be able to filter an array, in HTML templates
30
+
31
+ ## 0.4.0
32
+
33
+ - enh: CSS: change style of error row (use warning color)
34
+ - enh: CSS: new class '.visible-dirty' (e.g. `<ion-icon name="star" class="visible-dirty"></ion-icon>` in the `actions` column)
35
+ - enh: ValidatorService: add function getI18nErrors(control)
36
+ - enh: AppTable: add outputs 'onDirty', 'onError'
37
+ - enh: AppTable:
38
+
39
+ ## 0.4.1
40
+
41
+ - enh: Add new component 'app-actions-columns'
42
+
43
+ ## 0.4.2
44
+
45
+ - enh: LoadResult class: Add a `fetchMore()` function
46
+ - enh: Autocomplete field: Add infinite scroll, using `LoadResult.fetchMore()`
47
+
48
+ ## 0.4.3
49
+
50
+ - enh: AppTable: add `options` (with property `interactive`) in `deleteRow()` and `deleteRows()`
51
+ Used to avoid user confirmation, when deletion has been confirmed elsewhere
52
+
53
+ ## 0.4.4
54
+
55
+ - enh: Rename `<form-buttons-bar>` into `<app-form-buttons-bar>`
56
+ - enh: Export more CSS variables: `--app-paginator-height`, `app-form-buttons-bar-height`
57
+
58
+ ## 0.5.0
59
+
60
+ - enh: Table: allow keyboard navigation, using `<app-actions-column>` and function `table.confirmAndBackward()` and `table.confirmAndForward()`
61
+
62
+ ## 0.7.10
63
+
64
+ - enh: Table: no more border-left, on dirty rows (because of sticky columns nightmare !)
65
+
66
+ ## 0.9.0
67
+
68
+ - enh: Autocomplete field: add config option `suggestLengthThreshold` to suggest after typing more than x characters
69
+ - enh: Autocomplete field: add config option `debounceTime`
70
+
71
+ ## 0.10.0
72
+
73
+ - enh: Add EntityClasses class: use it to get an entity class by name (need to use @EntityClass decorator on the class)
74
+
75
+ ## 0.11.4
76
+
77
+ - fix: Autocomplete field: when focus out, move caret to start (fix firefox bug, when `input[type=text]` content is too long)
78
+
79
+ ## 0.11.5
80
+
81
+ - enh: Decorator @Entity now generate the static class function `asObject(source: any, opts?: any): any`
82
+
83
+ ## 0.15.0
84
+
85
+ - enh: Add IAppForm.loading (optional)
86
+ - enh: Add AppForm.waitIdle()
87
+ - enh: IAppForm, AppForm, AppTabEditor: Add markAsLoading() and markAsLoaded()
88
+
89
+ ## 0.18.0
90
+
91
+ - enh: Add AppTable.updateView(): Promise
92
+ - enh: Add AppTableDatasource: rename $busy into loadingSubject
93
+ - fix: Fix InMemoryTable setValue
94
+ - fix: AppTable: after save, refactor code to select previously edited row
95
+
96
+ ## 0.19.0
97
+
98
+ - fix: refactor AppFormUtils.copyEntityToForm() for multiple values (split on the character '|' )
99
+ - fix: remove AppFormUtils.copyForm2Entity() - same a form.value
100
+
101
+ ## 0.20.0
102
+
103
+ - fix: remove functions `isArray()` (please use `Array.isArray()` instead)
104
+ - enh: Add `AccountService.onChange: Subject` to listen account settings changes
105
+ - fix: Account model: use minify option to serialize as a POD object
106
+ - fix: AccountService: change some internal function's visibility, to protected
107
+ - fix: InMemoryService: fix equals() default implementation (avoid infinite loop)
108
+ - fix: SCSS: Set mat-select-column to width: 50px, to make it compatible with sticky <mat-table>
109
+ - enh: Add ComponentDirtyGuard to public API
110
+
111
+ ## 0.20.0
112
+
113
+ - fix: AppEntityEditor: remove confirmation before backClick (use ComponentDirtyGuard instead)
114
+ - fix: AppEntityEditor: cancel() will not ask a confirmation, because called by dirty guard).
115
+
116
+ ## 0.23.0
117
+ - fix: MatAutocompleteField: when escape event, close the panel and stop event's propagation
118
+ - fix: AppFormButtonsBar: when escape event, make sure preventDefault!=false before emit a back event
119
+
120
+ ## 0.24.0
121
+
122
+ - fix: AppInstallUpgradeCard: use Cordova Downloader plugin, to download APK file correctly
123
+
124
+ ## 0.25.0
125
+
126
+ - enh: Add FormErrorAdapter service, configurable using an injection token APP_FORM_ERROR_I18N_KEYS
127
+ - enh: Add pipe 'translateFormError' to translate form error in HTML template
128
+
129
+
130
+ ## 0.26.0
131
+
132
+ - enh: Rename FormErrorAdapter into FormErrorTranslator
133
+ - enh: Add FormErrorTranslator to AppForm
134
+ - enh: Add directives [matBadgeIcon] and [ionBadgeIcon] to use icon within a matBadge
135
+
136
+ ## 0.27.0
137
+
138
+ - enh: Split `AppTabEditor` into `AppEditor` and `AppTabEditor`
139
+ - enh: Add `markAsReady()` to base components (`IAppForm`, `AppForm`, `AppTable`, `AppEditor`)
140
+ - enh: Add `ready() => Promise` to base components (`IAppForm`, `AppForm`, `AppTable`, `AppEditor`)
141
+ - enh: `AppEntityEditor`: wait components is ready, before calling `setValue()`
142
+ - enh: `waitFor()` now return a `Promise<void>` (instead of a `Promise<any>`)
143
+
144
+ ## 1.0.0
145
+
146
+ - enh: Store local settings remotely
147
+ - fix: Fix suggestFromArray when items is null
148
+ - fix: Fix parsing error, in GraphQL service (e.g error from Oracle database)
149
+
150
+ ## 1.2.5
151
+
152
+ - fix: Install/Upgrade component: can now download file, on Android devices
153
+
154
+ ## 1.5.1
155
+
156
+ - enh: MatAutocompleteField: set header position has sticky, in CSS
157
+ - enh: MatAutocompleteField: if mobile, set autocomplete panel's position to 'above' (instead of 'auto') because keyboard should open at the bottom
158
+ - fix: AppForm: add method 'unregisterSubscription()'
159
+ - fix: Account: disable form when offline
160
+
161
+ # 1.5.6
162
+
163
+ - enh: Add observables.waitForTrue() function
164
+ - enh: Editor: apply ready() opts (timeout, dueTime)
165
+ - fix: suggestFromArray: fix sorting
166
+
167
+ # 1.5.8
168
+
169
+ fix: When deleting rows selection, make sure to confirm edited row first
170
+
171
+ # 1.6.4
172
+
173
+ enh: EntitiesTableDateSource: Add 'fetchMore()' function (usable when dataService fill LoadResult.fetchMore)
174
+ fix: Auth modal: show error (e.g. when bad credentials)
175
+ fix: MatChipsField: rename 'compareWith' in 'equals'
176
+ enh: MatChipsField: Allow setup chips color
177
+ fix: MatSwipeField: rename 'compareWith' in 'equals'
178
+
179
+ # 1.6.5
180
+
181
+ fix: MatChipsField: Fix 'focusOut' then 'focusIn' behavior
182
+ fix: MatAutocompleteField: Fix 'focusOut' then 'focusIn' behavior
183
+
184
+ # 1.6.18
185
+ fix: MatDateTimeField: Fix when no Keyboard plugin
186
+
187
+ # 1.7.0
188
+
189
+ enh: Add directive `*ngVar` - see https://stackoverflow.com/questions/38582293/how-to-declare-a-variable-in-a-template-in-angular
190
+
191
+ # 1.8.1
192
+
193
+ enh: IEntityService: add new function `canUserWrite()`
194
+ enh: AppEntityEditor: add a default implementation of `canUserWrite()`
195
+
196
+ # 1.9.5
197
+
198
+ enh: AppTable: Add injector in constructor
199
+ fix: Platform: detect window touchscreen as NOT mobile
200
+ fix: AppEntityEditor: make sure to unsubscribe listen remote changes, when destroy
201
+ fix: Home: fix layout, of card close button, in history items
202
+ fix: Make sure to use LocalSettingsServicesettings.mobile instead of PlatformService.mobile
203
+ enh: Account: auto start listen changes on pod, during the user session
204
+
205
+ # 1.10.1
206
+
207
+ fix: AppTable: Fix table row deletion, when editedRow is invalid and not saved yet - fix issue IMAGINE-669
208
+
209
+ # 1.10.9
210
+
211
+ fix: AppTable: Fix table when calling save with options : `keepEditing=false`
212
+
213
+ # 1.11.0
214
+
215
+ enh: Add component UploadFilePopover
216
+ enh: Add component TextPopover
217
+ enh: Upgrade to @apollo/client 3.5.10
218
+
219
+ # 1.12.1
220
+
221
+ fix: searchTextFilter: escape special characters to avoid RegExp parse exception
222
+ enh: Autocomplete: Move result count in footer
223
+
224
+ # 1.12.4
225
+
226
+ fix: AppTable: Avoid deleting a row twice, when deleting an invalid row BUT not editing
227
+
228
+ # 1.12.13
229
+ enh: Add pipes formGet, formGetControl and formGetArray, to get a form controls
230
+ enh: Add pipe strIncludes
231
+
232
+ # 1.13.0
233
+ enh: Add utility class SharedAsyncValidators
234
+ enh: Add SharedAsyncValidators.registerAsyncValidator() to add long during validation job
235
+ fix: BaseEntityService: listenChanges() now return an empty observable, when not implemented, instead of error
236
+ fix: InstallUpgradeCard: do not show install link, on Windows touch screen
237
+
238
+ # 1.14.0
239
+ enh: Platform: auto reload web browser's page, if a new version is detected at startup
240
+ # 1.14.2
241
+ enh: Add DateUtils.resetTime(date, tz?: string)
242
+
243
+ # 1.15.0
244
+ fix: MateDateField: make sure to display errors
245
+ fix: MateDateField: Allow to show matPrefix (e.g. icon)
246
+ fix: MateDateField: Better management of mat-error
247
+ fix: MateDateTimeField: Add error for dateIsBefore
248
+ enh: SharedValidators: add new validator 'dateIsBefore'
249
+
250
+ # 1.15.1
251
+ fix: MateDateField: Add a timezone to serialize/deserialize date value
252
+
253
+ # 1.15.4
254
+ enh: MateDateField: Add an input 'datePickerFiler' to filter dates in picker
255
+ enh: MateDateTimeField: Add an input 'datePickerFiler' to filter dates in picker
256
+
257
+ # 1.15.9
258
+ fix: Editor listenChanges() should not update the cache, but call reload() when changes detected.
259
+ This will allow fetching partial graph in subscriptions
260
+ enh: Editor: show a toast when remote changes are detected
261
+ fix: Cache: minor fix
262
+
263
+ # 1.15.13
264
+ fix: File upload component: fix file/event management
265
+ enh: Add new pipe 'formGetGroup:<name>'
266
+
267
+ # 1.16.0
268
+ enh: Refactor JobUtils functions: 'progression' is now optional, and hold by options
269
+
270
+ # 1.17.0
271
+ fix: GraphQL: set NetworkStatus.error on error object in order to throw corresponding exception
272
+
273
+ # 1.17.1
274
+ fix: Hotkeys: Prevent global hotkeys when popover component exists
275
+
276
+ # 1.18.0
277
+ enh: Autocomplete field: Add search bar on mobile
278
+ fix: Autocomplete field: Fix style when multiple=true
279
+ fix: Autocomplete field: Fix default displayWith when multiple=true (manage array value)
280
+ fix: Exclude Windows from the platform mobile detection
281
+
282
+ # 1.18.4
283
+ fix: Autocomplete: fix search in mobile searchbar
284
+ enh: Material field components: allow to set 'required' as empty tag, and not only '[required]=true'
285
+
286
+ # 1.18.4
287
+ fix: Autocomplete: fix panel width, on small screens
288
+
289
+ # 1.18.7
290
+ fix: fix DateUtils.min() and DateUtils.max()
291
+
292
+ # 1.19.0
293
+ enh: Add a MessageModal, to compose message to users (internal or email messages)
294
+ fix: MatDateField: if not required, manually set a date will not apply the value to formControl
295
+
296
+ # 1.19.1
297
+ fix: Platform detection failed (infinite loop) on MacBook
298
+
299
+ # 1.19.2
300
+ fix: Platform detection cache
301
+
302
+ # 1.19.3
303
+ enh: AppForm now wait form not pending, before emitting onSubmit event
304
+
305
+ # 1.19.6
306
+ fix: Fix toolbar back button
307
+ fix: Autocomplete: Fix multiple values (displayValue was no shown)
308
+ fix: Autocomplete: avoid to many call to suggest, on mobile
309
+ fix: Autocomplete: use mat-option for searchbar, to have selected option is visible
310
+ fix: Install APK: make sure to have '.apk' at end of filename
311
+ fix: Auth modal: keep modal into loading, when waiting server response
312
+ enh: Create a specific card for offline mode update
313
+ fix: Entity storage: do NOT set skipIfPristine to false, when storage keep non local entities (e.g. OperationVO)
314
+ enh: Entity storage: persist() has a new option skipIfPristine, to be able to force all data to be stored, even if not dirty
315
+
316
+ # 1.19.7
317
+ enh: Add pipe 'formGetValue' that will listen value changes (from a form or a control)
318
+
319
+ # 1.19.16
320
+ fix: Date and Date Short field: optimize <mat-error> with a switch/case
321
+ fix: Lat/Long pipes: remove provider in root (not need on a pipe)
322
+ fix: SharedValidators: rename 'double' validator into 'decimal'. Now return an error 'decimal' when opts.maxDecimals is nil
323
+
324
+ # 1.19.18
325
+ fix: Add a workaround to patch <html> class to 'plt-desktop', on Windows touch screen (fix sumaris-app issue #346)
326
+ enh: EntitiesStorage: detect platform pause, to force saving the storage
327
+
328
+ # 1.19.23
329
+ fix: Menu: avoid to many call of onLogin() function (add a distinctUntilChanged() filter)
330
+ fix: MateDateTime: set required validator using template, and no more by overriding formControl.validator (allow to change the required value)
331
+ fix: EntityEditor: wait end of saving, in waitIdle() function
332
+ fix: EntityEditor: add debug log when changing/updating route
333
+ fix: EntityEditor.load(): rename the unused options 'updateTabAndRoute' into 'updateRoute'
334
+ fix: EntityEditor.load(): allow to reset to the first tab (e.g. when load another entity into an existing editor)
335
+
336
+ # 1.19.23
337
+ fix: Editor: allow to skip page history (computePageHistory can return 'undefined')
338
+
339
+ # 1.19.25
340
+ fix: Home: translate 'Loading...' message
341
+
342
+ # 1.19.28
343
+ enh: Add function escapeRegExp() to escape all special regexp characters
344
+
345
+ # 1.19.30
346
+ enh: Add argument to pipe 'formGetValue' to listen status change (e.g. to force update, when emitEvent: false)
347
+
348
+ # 1.20.0
349
+
350
+ enh: Menu: allow to enable/disable menu
351
+ enh: Menu: rename MenuService.menuVisible$ into MenuService.splitPaneWhen
352
+
353
+ # 1.20.2
354
+
355
+ enh: Material fields: add @Input() appearance
356
+
357
+ # 1.20.3
358
+ enh: css-variables-to-root-mobile() will expose variables '--mat-tab-link-height' and '--mat-tab-bar-height'
359
+
360
+ # 1.20.4
361
+ enh: Add helper class CsvUtils
362
+ enh: Add pipe formatProperty
363
+ enh: Add directive [appAutoTitle] for <ion-label> or <mat-label>
364
+
365
+ # 1.20.5
366
+ enh: formatProperty pipe: when type is 'boolean', display a translated Yes/No
367
+
368
+ # 1.20.7
369
+ enh: add function FileUtils.writeTextToFile()
370
+
371
+ # 1.20.11
372
+ enh: add function FileUtils.downloadUri()
373
+
374
+ # 1.20.13
375
+ fix: fix SharedValidators.decimal() when maxDecimals = 3 (cached regexp was wrong)
376
+
377
+ # 1.20.14
378
+ fix: Menu: Force menu update when config changed
379
+
380
+ # 1.20.16
381
+ fix: MatChipsField: fix chip height
382
+
383
+ # 1.20.17
384
+ fix: Add module ResizableModule, for MatTable column resize
385
+
386
+ # 1.20.18
387
+ fix: PlatformService.download() now useFileUtils.download(), that create a temp download (not need browser permission to open popup)
388
+
389
+ # 1.20.19
390
+ enh: Add new abstract class AppEntityEditorModal, that can managed many forms and tables
391
+
392
+ # 1.20.20
393
+ fix: SCSS: remove `user-select: text !important` applied on body, because of modals ViewEncapsulation.None (e.g. physical gear modal) where Tab label were becomes focusable
394
+
395
+ # 1.20.21
396
+ fix: Fix mat latlong field: was broken since v1.19.13
397
+
398
+ # 1.20.21
399
+ fix: Fix MatDateField mat-error display (was too large)
400
+
401
+ # 1.20.24
402
+ fix: Revert change on LatLongField (SCSS file was removed ??)
403
+
404
+ # 1.20.25
405
+ fix: MatBooleanField: set indeterminate=true, when value is null
406
+
407
+ # 1.20.27
408
+
409
+ fix: Mat***Field: add `@Input() appearance`
410
+
411
+ # 1.20.30
412
+ fix: Add InMemoryDataService.hiddenCount
413
+
414
+ # 1.20.33
415
+ fix: MatAutocompleteField: reload items when cleaning text, and no suggestLengthThreshold
416
+
417
+ # 1.20.34
418
+ fix: AppTable: remove 'opts.skipIfLoading' on delete functions, to use only 'opts.interactive' to force deletion when table is busy.
419
+
420
+ # 1.21.0
421
+ enh: AppForm: use public behavior subjects: readySubject, loadingSubject, errorSubject
422
+
423
+ # 1.22.0
424
+ enh: Add social components: UserEventNotification and JobProgression
425
+
426
+ # 1.22.1
427
+ enh: Menu: add APP_MENU_OPTIONS token, to configure menu (e.g. show notification icon in the left menu header)
428
+
429
+ # 1.22.9
430
+ enh: Remove <app-user-events-table> (move to specific sub projects that use ngx-components)
431
+
432
+ # 1.22.11
433
+ enh: Rename <app-user-event-notification-component> into <app-user-event-notification-icon>
434
+
435
+ # 1.22.12
436
+ enh: Can mark a Moment without time, allowing empty time field in MatDateTime
437
+
438
+ # 1.23.6
439
+ fix: Many fix in table. Upgrade to ngx-material-table 0.12.0
440
+ enh: Table, Form and Editor: Add a destroySubject
441
+ enh: Observables functions first***Promise() : add more options (timeout or stop notifier)
442
+
443
+ # 1.23.10
444
+ enh: Autocomplete: add a 'title' property on each option, on desktop screen
445
+
446
+ # 1.23.11
447
+ fix: Memory Data service: now implement IStartableService
448
+ enh: StartableService: use a stopSubject, to stop waitFor promise
449
+ enh: remove unused class EntitiesService. Use IEntitiesService instead
450
+
451
+ # 1.23.26
452
+ enh: Add new pipe 'arrayJoin'
453
+ enh: 'arrayPluck' pipe: allow to use string[] for path
454
+ enh: getPropertyByPath() function now allow to use string[] as path
455
+
456
+ # 1.23.29
457
+ enh: FormArrayHelper: add setValue() to resize the FormArray, then set value
458
+
459
+ # 1.23.30
460
+ fix: InMemoryDataService: do NOT apply default sortReplacement id -> rankOrder
461
+
462
+ # 1.23.31
463
+ fix: InMemoryDataService: change 'dirtySubject' as public property
464
+
465
+ # 1.23.39
466
+ enh: Add FormArrayHelper.patchValue() : clear array, then push each value
467
+ fix: StartableService: avoid to log error when stopped
468
+
469
+ # 1.23.41
470
+ enh: AppEditor: Add 'loaded' getter
471
+
472
+ # 1.23.44
473
+ enh: Referential model: add a 'icon' property (IconRef)
474
+
475
+ # 1.23.46
476
+ enh: Add `ColorScale.getValueColor(): Color`
477
+ enh: EntityEditorModal: rename input `isNewData` into `isNew`
478
+
479
+ # 1.23.51
480
+ Observables: function `waitFor()`, `waitForTrue()`, `watForFalse()`, `firstNotNilPromise()`
481
+ - fix: Make sure `takeUntil` is always the last operator (avoid memory leak)
482
+ - enh: Observables: Allow set option.stopError with custom error message
483
+ - enh: Observables: Create the Error outside the observable, to keep the original stack trace readable
484
+
485
+ # 1.23.61
486
+ - fix: Boolean field: fix button layout
487
+
488
+ # 1.23.65
489
+ - enh: Add pipes: isNotNil and isNotNilOrNaN
490
+
491
+ # 1.23.67
492
+ - fix: Rename DateFormatPipe into DateFormatService (DateFormatPipe is no more a provider)
493
+ - fix: Fix patterns in DateFormatPipe/Service : add a fallback when translate service is not started - fix issue sar-app #28
494
+
495
+ # 2.0.0
496
+ - enh: Migration to
497
+ - Angular 14.2
498
+ - Ionic 6.2
499
+ - Angular Material Table 0.14.4 (allow to use async validator for rows)
500
+ - Apollo 3, graph-ws 5
501
+ - enh: Add <app-debug> component
502
+
503
+ # 2.1.0
504
+ - enh: Add new class AppFormArray with all functions of FormArrayHelper
505
+
506
+ # 2.2.1
507
+ - fix: FormArrayHelper and AppFormArray: Apply the parent disabled state, in added controls, when calling resize() or patchValue()
508
+ - fix: FormArrayHelper.getOrCreateArray(): Apply the parent form disabled state, in added FormArray
509
+ - fix: MatChipsField: fix loading spinner freeze
510
+
511
+ # 2.2.3
512
+ - enh: Test Geolocation.getCurrentPosition() in the lat/long field test page
513
+
514
+ # 2.2.4
515
+ - fix: Fix DateUtils.isSame(), when first argument is nil, but the second not
516
+ - enh: AppTable: allow to call deleteSelection with opts (e.g `{interactive: false}`)
517
+
518
+ # 2.2.6
519
+ - fix: Refresh menu on any account changes (login changes - eg. when account updated)
520
+
521
+ # 2.2.8
522
+ - fix: Table actions column: add CSS variable to set column width, min-width and max-width
523
+
524
+ # 2.3.7
525
+ - fix: Mat form field: use inherit font size (do not force font-size, in the theme)
526
+ - fix: MatDateShort: fix behaviour for Angular 14
527
+
528
+ # 2.4.0
529
+ - Breaking change: ProgressBarService and HTTP_INTERCEPTORS no longer provided in SharedModule (see: AppModule)
530
+ - enh: Make ProgressBarService fully optional (InjectionToken: APP_PROGRESS_BAR_SERVICE)
531
+ - enh: Settings: the settings object is now stored in json format
532
+
533
+ # 2.4.1
534
+ - fix: AppFormArray: do not resize the array when patchValue() receive `undefined` value (e.g. useful when called by parent, recursively, without value)
535
+ - fix: AppAsyncTable: optimize markAsUntouched()
536
+
537
+ # 2.4.2
538
+ - enh: Graphql service: add new token `APP_GRAPHQL_FRAGMENTS` to register fragments, and avoid redeclaration in queries (see https://github.com/apollographql/apollo-client/pull/9764#issuecomment-1329857853)
539
+
540
+ # 2.4.3
541
+ - fix: AppFormArray: do not resize the array when patchValue() receive `null` or `undefined` value (same behavior as official `FormArray.patchValue()`)
542
+
543
+ # 2.4.4
544
+ - fix: Applying environment defaultLocale, when settings data has no locale (merge some code from lpecquot, that was in a branch)
545
+
546
+ # 2.4.9
547
+ - fix: Settings: allow to store settings as string (like < 2.4.0) using an injection token
548
+
549
+ # 2.4.10
550
+ - fix: When detecting a app update, stop the check timer to avoid to many toast to be displayed
551
+
552
+ # 2.4.14
553
+ - enh: add function `setPropertyByPath()`
554
+ - fix: Implement `EntityUtils.getPropertyByPath()` using generic shared function `getPropertyByPath()`
555
+
556
+ # 2.4.15
557
+ - fix: Fix pipes formGetControl, formGetValue, formGetGroup : when using a path, return nil if control not found, and NOT the form itself
558
+
559
+ # 2.4.16
560
+ - fix: `SharedModule.forRoot()`: make environment optional, to be defined it in the `app.module.ts` (need by Quadrige App)
561
+
562
+ # 2.4.17
563
+ - fix: MatLatLongField: remove strict character regexp, in degrees part, to be able to set only one digit (e.g. `9°`)
564
+
565
+ # 2.4.18
566
+ - fix: MatDateShortField: fix control validation, in desktop mode
567
+
568
+ # 2.4.19
569
+ - fix: MatAutocompleteField: revert the cdk overlay position, when closing the mat-select panel
570
+
571
+ # 2.4.23
572
+ - enh: Add DateUtils.markTime(), to reset the 'no time' marker
573
+ - enh: Add DateUtilsEntityEditor: simplify updateTabAndRoute()
574
+ - enh: Add DateUtilsEntityEditor: updateRoute() now manage queryParams change, before /new to /:id transition
575
+ - enh: Toolbar: goBack() return a boolean
576
+
577
+ # 2.4.25
578
+ - enh: Environment: add a boolean option 'sameUrlPeer', to force network to start on peer at the same URL
579
+ - enh: EntityEditor: allow to listen changes on local entity
580
+ - enh: add functions collectByProperty() to split an array in a map of array
581
+
582
+ # 2.4.26
583
+ - fix: Rename pipe 'isNotOnField' by 'isOnDesk'
584
+
585
+ # 2.4.28
586
+ - enh: TranslateContext: allow to translate many keys (string[])
587
+ - fix: Force ngx-quicklink to 0.3.0
588
+
589
+ # 2.4.31
590
+ - enh: Add JsonUtils.parseFile()
591
+
592
+ # 2.4.33
593
+ - enh: Add AppPropertiesForm.length
594
+
595
+ # 2.4.48
596
+ - fix: Fix highlight pipe (used by autocomplete field)
597
+
598
+ # 2.4.50
599
+ - enh: Add type 'enums' for AppFormField
600
+
601
+ # 2.4.54
602
+ - enh: Use NavController by default, instead of Angular router. This will use the default animation style of the OS
603
+
604
+ # 2.4.55
605
+ - fix: Editor: Disable animation, when reloading same page after saving
606
+
607
+ # 2.4.58
608
+ - enh: Add storage explorer (with log preview)
609
+ - enh: Add debug service (to send debug data to server)
610
+ - enh: Add logging service
611
+
612
+ # 2.4.61
613
+ - enh: Add logger on network service
614
+
615
+ # 2.4.67
616
+ fix: Minor fix (add missing i18n)
617
+ fix: GeolocationUtils: add many useful functions, and detect Capacitor errors (from message)
618
+ fix: Fix some issues in storage explorer
619
+
620
+ # 2.4.74
621
+ enh: LocalSettingsService: save changes in local storage, when calling setProperty()
622
+
623
+ # 2.4.75
624
+ enh: SharedValidator: add a precision validator
625
+
626
+ # 2.4.79
627
+ fix: ImageGallery: fix add button icon (center alignement)
628
+
629
+
630
+ # 2.4.81
631
+ fix: AppToolbar: allow to use ion-segment in app-toolbar
632
+
633
+ # 2.4.82
634
+ enh: Migrate to Ionic 7
635
+ fix: Form field: show the clear button, when clearable=true, on types 'integer', 'double', 'string', 'date' and 'date-time'
636
+
637
+ # 2.4.82
638
+ enh: AppEntityEditor: add get/set for autoOpenNextTab
639
+
640
+ # 2.4.87
641
+ fix: AppEntityEditor: When reload the editor, force the fetch policy to 'network-only'
642
+
643
+ # 2.4.88
644
+ fix: AppInstallUpgradeCard: Installation APK link are not visible - fix issue [sumaris-app#445](https://gitlab.ifremer.fr/sih-public/sumaris/sumaris-app/-/issues/445)
645
+
646
+ # 2.4.88
647
+ enh: Add protected BaseEntityService.getLoadQueryNames()
648
+
649
+ # 2.4.89
650
+ fix: Fix Autocomplete searchbar value trigger, after ionic 7 update
651
+
652
+ # 2.4.90
653
+ fix: AppEntityEditor: when catch error in save(), set the selectedTabIndex=0 before calling setError()
654
+ This will allow subclasses to override the default selectedTabIndex after an error occur, inside the overridden setError()
655
+
656
+ # 2.4.91
657
+ enh: functions: allow to use sort(array) without the 'attribute' argument (e.g. allow to sort a string[])
658
+
659
+ # 2.4.95
660
+ fix: Platform: avoid error at startup, because of StatusBar in web mode
661
+ enh: MatBooleanField: display value when disabled, instead of 'empty'
662
+
663
+ # 2.4.112
664
+ enh: AppBadge: allow to set a text or number content
665
+
666
+ # 2.4.114
667
+ enh: Menu: allow to add sub menu item
668
+
669
+ # 2.4.158
670
+ enh: Environment: add useHash property to configure Angular router to use hash URL (need by web-ext)
671
+
672
+ # 2.5.0
673
+ - enh: Add token APP_USER_SETTINGS_OPTIONS of type UserSettingsOptions to add user properties table in AccountPage
674
+ - fix: MatBooleanField: in checkbox style, the placeholder can be shown as expected
675
+
676
+ # 2.6.0
677
+ - enh: Account: Add User tokens (table and modal)
678
+
679
+ # 2.6.23
680
+ - fix: Fix Configuration.getPropertyAsNumbers() when no value (avoid to get an array with an unique NaN value)
681
+
682
+ # 2.6.25
683
+ - enh: Upgrade to nodejs 18
684
+ - fix: Menu: hide spacer divider ion-label (hide the skeleton)
685
+
686
+ # 2.6.28
687
+ - fix: ImageGallery: Change image's title background color
688
+
689
+ # 2.6.31
690
+ - fix: ImageGallery: Add output event when after editing title
691
+
692
+ # 2.6.32
693
+ - fix: AppFormArray: Avoid an infinite loop, when calling resize(0) if options.allowEmptyArray=false
694
+ - fix: Table, Form, Editor: fix error when markAsLoaded() on closed BehaviorSubject
695
+ - fix: Table, Form, Editor: Make sure waitIdle() will stop, when component is destroyed (force default opts)
696
+
697
+ # 2.6.34
698
+ - enh: functions: add a static function `underscoreToChangeCase()`
699
+
700
+ # 2.6.35
701
+ - fix: Settings: Add type for property `OfflineFeature.filter`, then use it to in `LocalSettingsService.getOfflineFeatures()`
702
+
703
+ # 2.6.38
704
+ - fix: Fix mapGet pipe, when key is zero (0)
705
+
706
+ # 2.6.39
707
+ - enh: table: Add an input `style: 'table'|mat-table` into `<app-actions-column>`, to be usable inside a `<table mat-table>` (using `<td>`) or `<mat-table>` (using `<mat-cell>`)
708
+
709
+ # 2.8.0
710
+ - enh: `IAppForm<T>` : add a type `<T=any>`
711
+ - enh: `IAppForm` : add optional functions `setValue()`, `patchValue()`, `resetValue()` and `getValue()`
712
+ - fix: `AppForm` and `AppEditor`: Remove unused and deprecated properties `_loading`, `_$ready`, `_$loading`
713
+ - fix: `AppForm` : rename `_enable` as `enabled` to avoid confusion with `enable()`
714
+ - enh: Add abstract class `AppFormContainer` to manage many `IAppForm` - and use it as a super class of `AppEditor`
715
+ - enh: Add new pipes for SelectionModel :
716
+ - `isSelected`: e.g. `selection | isSelected: row`,
717
+ - `isEmptySelection`: e.g. `selection | isEmptySelection`
718
+ - `isNotEmptySelection`: e.g. `selection | isNotEmptySelection`
719
+ - `selectionLength`: e.g. `selection | selectionLength`,
720
+ - `isMultipleSelection`: e.g. `selection | isMultipleSelection`,
721
+ - enh: Add new pipes for table :
722
+ - `isAllSelected`: e.g. `table | isAllSelected`,
723
+ - `isNotAllSelected`: e.g. `table | isNotAllSelected`
724
+
725
+ # 2.8.1
726
+ - enh: Add a pipe `badgeNumber` to limit badge content when > `99` (will display `99+`)
727
+ - enh: function setPropertyByPath() now return the input obj
728
+ - fix: Referential: fix `asObject()`
729
+ - enh: Add options:
730
+ - `sumaris.defaultLatLongFormat.enabled` to show/hide default Lat/Lon setting in account page (default is true)
731
+ - `sumaris.auth.api.token.scope.enabled` to show/hide scopes in API token table (default is false)
732
+ - `sumaris.auth.api.token.scope.default` set the default scope for new API token, mandatory if `sumaris.auth.api.token.scope.enabled` if false (default is 'read_api')
733
+ - enh: Add AppRowField component: wrap an AppFormField into a table column
734
+ - enh: Add pipe `valueFormat` to format a value with a FormFieldDefinition (equivalent to pipe `propertyFormat`)
735
+ - fix: `UploadFileComponent` Refactored
736
+ - enh: Add new config options to override the form field background color (active, focus or disabled)
737
+ - enh: Add new pipe `booleanFormat`
738
+ - enh: Update pipe `propertyFormat` to use complex path (using `getPropertyByPath()`)
739
+ - enh: Add static functions `CsvUtils.getLocalizedEncoding()` and `CsvUtils.getLocalizedSeparator()`
740
+ - enh: Add static function `JsonUtils.getLocalizedEncoding()`
741
+
742
+ # 2.8.2
743
+ - enh: Function `getPropertyByPath` now handles the optional chaining operator `(?.)`
744
+ - enh: Add `AccountService.onWillLogout` emitter
745
+ - fix: Table: Call `emitRefresh()` instead of `onRefresh.emit()` to safely emit to an opened Observable
746
+
747
+ # 2.8.3
748
+ - enh: Add support of `<mat-hint>` in MatDateTime, MatDate, MatDateShort, MatAutocompleteField and MatLatLongField
749
+ - enh: Add `DateUtils.compare` to be able to sort dates (using Array `sort()`)
750
+ - enh: Add function `resizeArray(T[], size): T[]`
751
+ - fix: NamedFilter: Abort import if callback returns null or undefined
752
+ - fix: DataSource: Allow to refresh datasource (using `watchAll()`) when having dirty row
753
+
754
+ # 2.8.4
755
+ - enh: MatBooleanField: add `@Input() clearable` (default to `false`)
756
+ - fix: MatBooleanField: when resetting value, hide radio buttons
757
+
758
+ # 2.8.11
759
+ - fix: MatBooleanField: hide checkbox's placeholder when floatLabel=never
760
+
761
+ # 2.8.12
762
+ - enh: Pipe `referentialToString`: add new option `propertySeparator` to override the default ' - ' separator
763
+
764
+ # 2.8.13
765
+ - enh: AsyncTable: make `setFilter()` async
766
+
767
+ # 2.8.14
768
+ - enh: Upgrade to ngx-material-table 17.2.1 (add options to TableElement `delete()`, `cancelOrDelete()` and `confirmEditCreate()`)
769
+
770
+ # 2.9.0
771
+ - enh: Upgrade to Angular 17.3
772
+ - fix: Replace zone.js `setTimeout()`, by rx-angular zone-less
773
+ - fix: IFormControlPathTranslator : Rename interface IFormControlPathTranslator into IFormPathTranslator, and rename property `controlPathTranslator` into `pathTranslator`
774
+ - fix: Remove deprecated validator `SharedValidators.double` (was renamed into `SharedValidators.decimal`)
775
+ - fix: AppAsyncTable: re add `@Input() get filter`
776
+ - fix: AppTable: clear selection when opening a row (like AppAsyncTable)
777
+ - fix: MatAutocompleteField: Add `@Input() panelClass` (same as `class`)
778
+ - fix: MatAutocompleteField: Allow boolean inputs from string (using `@Input({transform: booleanAttribute})`)
779
+ - fix: MatAutocompleteField: add `panelWidth` and `panelClass` to `MatAutocompleteFieldConfig`
780
+
781
+ # 2.9.1
782
+ - fix: MatAutocompleteField: revert `applyImplicitValue` default value `true`
783
+ - fix: MatChipsField: fix usage of `suggestLengthThreshold`
784
+ - enh: MatChipsField: add `applyImplicitValue` (default: false)
785
+
786
+ # 2.9.2
787
+ - fix: Notification list: add an ion-text-wrap to the notification message
788
+
789
+ # 2.9.3
790
+ - fix: Home: Add a call to `markForCheck()` after removing a page history item
791
+
792
+ # 2.9.4
793
+ - fix: Form: reduce line height of row label (form-container > ion-row > ion-col > ion-label)
794
+
795
+ # 2.9.6
796
+ - fix: MatAutocompleteField: Remove animation in searchbar (bad icon position in iOS)
797
+
798
+ # 2.9.7
799
+ - fix: Form: fix field label position (form-container > ion-row > ion-col > ion-label)
800
+
801
+ # 2.9.8
802
+ - enh: Add AppFormUtils.filterErrorsByPrefix() and AppFormUtils.filterErrors()
803
+
804
+ # 2.9.13
805
+ - fix: Home: when removing a page history, force settings to update
806
+
807
+ # 2.9.17
808
+ - fix: MatSelectPanel: add `--min-width: fit-content` to class `mat-select-panel-fit-content`
809
+
810
+ # 2.9.20
811
+ - enh: NamedFilterSelector: add `filterCleared` event
812
+
813
+ # 2.9.22
814
+ - enh(deps): Minor update to Angular 17.3.12
815
+ - enh(theme): Dark theme: Move dark theme toggle into the settings form
816
+ - enh(theme): Dark theme: Fix toggle field style, in dark theme
817
+ - enh(settings): Add icons on each form fields
818
+ - fix(config): When saving the remote config, do not return to the editor config's inherited properties
819
+
820
+ # 2.9.23
821
+ - fix(boolean-field): fix click on radio button 'no', when field has no value
822
+
823
+ # 2.11.1
824
+ - enh(deps): Upgrade to apollo-angular 7.1.2 and apollo 3.11 (+ fix breaking changes in graphql.service.ts)
825
+ - fix(css): Dark theme: fix checkbox style, and autocomplete panel
826
+
827
+ # 2.11.2
828
+ - enh(app-text-form): Add new inputs `appearance` and `subscriptSizing`
829
+ - fix(css): Dark theme: fix style for outline field
830
+
831
+ # 2.11.3
832
+ - fix(app-text-form): Input `autoHeight` is now deprecated (use `autoSize` instead)
833
+ - enh(app-text-form): Add new inputs `autoSizeMinRows` and `autoSizeMaxRows`
834
+
835
+ # 2.11.7
836
+ - fix(css): Dark theme: fix style
837
+
838
+ # 2.11.8
839
+ - enh(form-error): Add options to `IFormPathTranslator.translateFormPath()`
840
+
841
+ # 2.12.0
842
+ - enh(form-error): Remove deprecated interface `IFormControlPathTranslator`
843
+
844
+ # 2.12.4
845
+ - fix(date): Update formControl (and datePicker) when textControl value changes, and clean text input by regexp
846
+ - fix(date-time): Keep control as invalid is time is empty
847
+ - enh(date-time): Add new `@Input() allowNoTime` to make time optional
848
+ - fix(lat-long): Fix deletion, when press delete key
849
+
850
+ # 2.12.7
851
+ - fix: addShortcut handler use `KeyboardEvent` instead of a simple 'EVent'
852
+
853
+ # 2.12.8
854
+ - enh: function `toNumber()` will now return the default value, when input is `NaN`
855
+
856
+ # 2.12.9
857
+ - fix(paginator): Fix paginator style on mobile screen (align to the left, and hide page size, like before the Angular 17 migration)
858
+
859
+ # 2.12.10
860
+ - fix(autocomplete): Compute the panel width if not set (in mobile) - workaround for an issue in mat-select panel
861
+
862
+ # 2.12.12
863
+ - fix(theme): add all dark colors from material theme
864
+ - fix(autocomplete): in mobile device, add a text-wrap and a max-height in mat-option
865
+
866
+ # 2.12.13
867
+ - fix(config): New option `sumaris.account.latLongFormat.enable` to replace the deprecated option `sumaris.defaultLatLongFormat.enabled` (key was not well named)
868
+
869
+ # 2.12.16
870
+ - fix(autocomplete): Reload items when `showAllOnFocus = true`
871
+ - fix(autocomplete): Use `??` operator, instead of `toBoolean()`, `toNumber()` etc.
872
+ - enh(autocomplete): Add option `applyImplicitValue` to config
873
+ - enh(pipe): add a `asBoolean` pipe, with an optional predicate function as option (e.g. to test any value)
874
+ - enh(account): Allow to change password, if auth token is `token` (will update the pubkey)
875
+ - fix(lat-long): Refactor component (remove maskito placeholder use)
876
+ - enh(table): Add new component `<nav-actions-column>`
877
+
878
+ # 2.12.19
879
+ - fix(nav-actions-column): Fix when inside a `AppAsyncTable`
880
+
881
+ # 2.12.26
882
+ - enh(app-async-table): declare property `readonly cd: ChangeDetectorRef`
883
+ - enh(app-async-table): implement `markForCheck()` and `detectCHanges()`
884
+ - enh(app-table): declare property `readonly cd: ChangeDetectorRef`
885
+ - fix(app-table): call `detectChanges()` inside `editRow()`, `addRowToTable()` and `toggleSelectRow()` - need by SUMARiS (e.g. samples tables)
886
+ - fix(app-table): `toggleSelectRow()` should not call `event.preventDefault()` otherwise checkbox will not be checked
887
+
888
+ # 2.12.27
889
+ - enh(app-table): implement `markForCheck()` and `detectChanges()`
890
+
891
+ # 2.12.29
892
+ - fix(new-token-modal): Add a full form and fix save issue
893
+
894
+ # 2.12.30
895
+ - enh(platform): Add copy to clipboard return state
896
+
897
+ # 2.12.29
898
+ - fix(new-token-modal): Add a full form and fix save issue
899
+
900
+ # 18.0.0
901
+ - enh(deps) Upgrade to Angular 18.2.8 and Ionic 8.3
902
+ - enh(deps) Remove zone.js (enable experimental zone-less config)
903
+ - enh(app-properties-form): Use an autocomplete field to select an option, instead of a simple mat-select
904
+ - enh(app-properties-form): Add `@Input() showHintKey: boolean` to show option key (has a hint)
905
+ - enh(network-service): Avoid to restart the service if peer has not changed
906
+ - enh(AppFormArray): allow to use AppFormArray on any type (and not only Entity has before)
907
+ - enh(AppFormUtils) add useful static functions to enable/disable control(s)
908
+ - enh(mat-autocomplete-field): add option `selectInputContentOnFocus` to option, to select the input content on focus in
909
+ - enh(app-named-filter-selector): Add `@Input() buttonsPosition: 'matSuffix'|'after'` to let user defined button position (inside the field, or after)
910
+ - fix(AppForm and AppFormContainer) log error using the child path (if defined using `addForm()`)
911
+ - fix(graphql) Fix pod error in JSON format, before parsing it (e.g. Oracle can return error on multiple lines)
912
+ - fix(nav-actions-column): Use `OnPush` changeDetection
913
+ - fix(app-form-field): Emit `(keyup.enter)` event, when field's type is `double`
914
+
915
+ # 18.0.5
916
+ - enh(mat-autocomplete-field):
917
+ - Change type of `MatAutocompleteFieldConfig.suggestFn` to use SuggestFn<T, F> (allow to pass more options - e.g. used to resolve entity in AppPropertiesUtils)
918
+ - Add `@Input() label`
919
+ - Add `@Input() hideRequiredMarker`
920
+ - enh(app-form-field):
921
+ - Add `@Input() hideRequiredMarker`
922
+ - Fix the style when readonly and type `enum`
923
+ - interface `FormFieldDefinition`: Add property `serializeAttribute?: string` (instead of using autocomplete.filer.joinAttribute)
924
+ - add a static function `FormFieldDefinitionUtils.prepareDefinitions()` to resolve enum values, by `InjectionToken`
925
+ - enh(app-properties-form):
926
+ - Entity/Entities are now resolved from helper class AppPropertiesUtils
927
+ - Allow to change add button title
928
+ - Resolve enum item, when using InjectionToken for values
929
+ - enh(shared) Add decorators `@RxStateRegister()` `@RxStateSelect()` and `@RxStateProperty()` to connect property to a `RxState`
930
+ - fix(properties-utils): Add `opts?: {keepOrphan?: boolean}` to `AppPropertiesUtils.arrayFromObject` to be able to remove property without definition (`keepOrphan` is `true` by default)
931
+ - fix(token-table): Fix error when no scopes defined (InjectToken `APP_USER_TOKEN_SCOPES` should be optional)
932
+
933
+ # 18.0.6
934
+ - fix(scss): set flex-wrap to nowrap
935
+ - enh(autocomplete-test): add test case with a button
936
+ - fix(logout) Logout should be done AFTER home redirection, because of cache clearing - see issue #5
937
+
938
+ # 18.0.7
939
+ - fix(hotkeys) Fix default platform control key ('meta' on iOS)
940
+
941
+ # 18.0.8
942
+ - fix(hotkeys) Avoid to open many help modal
943
+ - fix(hotkeys) Skip open help modal, if nothing to display
944
+ - fix(form-buttons-bar) Fix shortcuts for iOS
945
+ - fix(modal-toolbar) Fix shortcut for iOS
946
+
947
+ # 18.0.9
948
+ - fix(mat-latlong-field) Mark control as dirty, when text control changed
949
+ - fix(about) Fix missing markdown module, to display config description
950
+ - enh(about) Allow to override the "report an issue" link, using a config option `sumaris.reportIssue.url`
951
+
952
+ # 18.0.10
953
+ - enh(utils) Add static functions `isFirefox()`, `isSafari()` and `isEdge()` to test user agent
954
+ - enh(utils) Add static functions `EntityUtils.collectIds()` and `EntityUtils.splitById()`
955
+ - fix(utils) Mark function `EntityUtils.collectById()` as deprecated (in flavor of `EntityUtils.splitById()`)
956
+
957
+ # 18.1.0
958
+ - enh(deps) Upgrade to angular 18.2.11 and other deps
959
+ - fix(deps) move maildev library into dev dependencies
960
+
961
+ # 18.1.1
962
+ - enh(deps) Update angular-eslint to 18.4.0
963
+
964
+ # 18.1.2
965
+ - enh(deps) Revert to Ionic 7.8.6
966
+
967
+ # 18.1.3
968
+ - fix(settings) Add static function `isOnFieldMode()`
969
+ - fix(menu) Make unpinned menu works, when reload app (F5) with a pinned menu
970
+
971
+ # 18.1.4
972
+ - fix(tab) Keep default tab label style (e.g. min-width) when stretch tabs is enabled
973
+ - fix(tab) Reduce tab label padding, on small screen
974
+
975
+ # 18.1.7
976
+ - enh(AppFormArray) Add `clone()` function
977
+
978
+ # 18.2.0
979
+ - enh(base-entity-service) Allow opts.toEntity to be a function (e.g. to be able to transform each element, also when fetching more items)
980
+ - fix(graphql-service) Allow `opts.update` to use new Apollo type `MutationUpdaterFunction` (type `MutationUpdaterFn` is deprecated)
981
+
982
+ # 18.2.6
983
+ - fix(autocomplete-field) Fix arrow drop icon position, when mobile
984
+ - fix(autocomplete-field) Use desktop arrow drop icon, when multiple and desktop
985
+ - fix(BaseEntityService) simplify functions `fromObject()` and `fromObjects()` (move `toEntity` argument into `options`)
986
+ - enh(services) Allow `suggestFromArray()` to search using `?` as wildcard (=match one character) in the search text
987
+ - enh(HighlightPipe) Allow to use the character `?` as wildcard (=match one character) in the search text
988
+ - enh(functions) Allow `suggestFromStringArray()` to search using `?` as wildcard (=match one character) in the search text
989
+ - enh(shared) New helper class `RegExpUtils`
990
+
991
+ # 18.2.7
992
+ - enh(autocomplete-field) Add `@Input() selectInputContentOnFocusDelay` - workaround when input text selection is overridden by another event (e.g. see in SUMARiS, in the calendar component)
993
+
994
+ # 18.2.9
995
+ - enh(autocomplete-field): Add `@Input() reloadItemsOnFocus` : Reload items when focused, necessary if filtered items depends on an external source (e.g. see in SUMARiS, in the calendar component)
996
+
997
+ # 18.2.11
998
+ - enh(DateUtils): Add `DateUtils.diffAbs()` to compute duration between two dates
999
+
1000
+ # 18.2.19
1001
+ - enh(timepicker) MatDateTime : Migrate timepicker to new library Ngx Mat TimePicker (fix animation, cancel button, Angular 17 compatibility, etc.)
1002
+
1003
+ # 18.2.21
1004
+ - enh(functions) Rename `selectInputContent` into `selectInputContentFromEvent`, and make `selectInputContent` that only use an <input> as argument
1005
+ - enh(autocomplete-field) Add `@Input() clearInvalidValueOnBlur: boolean` to reset the field when typing invalid search text (no match or no many matches)
1006
+ - fix(swipe-field) Fix swiper previous/next arrows
1007
+
1008
+ # 18.2.23
1009
+ - enh(validators) add option skipIfNoTime to dateRange
1010
+
1011
+ # 18.2.24
1012
+ - enh(pipe) add new pipe `isValidDate` with option `requiredTime` (to test date with noTime flag)
1013
+
1014
+ # 18.2.26
1015
+ - enh(select-peer-modal) Allow to search on peers modal
1016
+ - enh(select-peer-modal) Allow to select peer by features (aka programs) - should set `enableSelectPeerByFeature: true` in the environment token (disabled by default)
1017
+
1018
+ # 18.2.28
1019
+ - fix(mat-boolean-field) Small refactoring + simplify blur detection, using standard Angular outputs
1020
+ - enh(mat-latlong-field) Refactor the component, to use separate inputs (instead of using Maskito)
1021
+ - fix(entity-store) setEntities() should mark all entities as dirty, when id mode is enabled (because an optimization in `persist()` that skip pristine entities)
1022
+
1023
+ # 18.2.29
1024
+ - enh(validators) add opts to dateMaxDuration to skip date with NoTime
1025
+ - fix(mat-boolean-field) Fix buttons layout (padding) to be same as sumaris QV pmfm buttons
1026
+
1027
+ # 18.2.30
1028
+ - fix(forms) Fix error `TypeError: Cannot read properties of undefined (reading 'setControlEnabled')`