@sumaris-net/ngx-components 18.2.25 → 18.2.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/doc/changelog.md +4 -0
- package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +32 -11
- package/esm2022/src/app/core/peer/select-peer.modal.mjs +159 -18
- package/esm2022/src/app/core/peer/select-peer.module.mjs +11 -5
- package/esm2022/src/app/core/services/config/core.config.mjs +6 -1
- package/esm2022/src/app/core/services/model/node-feature.model.mjs +31 -0
- package/esm2022/src/app/core/services/model/peer.model.mjs +23 -3
- package/esm2022/src/app/core/services/network.service.mjs +4 -8
- package/esm2022/src/app/core/services/network.utils.mjs +1 -1
- package/esm2022/src/app/shared/rx-state/rx-state.decorators.mjs +2 -2
- package/esm2022/src/environments/environment.class.mjs +4 -1
- package/esm2022/src/environments/environment.mjs +3 -1
- package/fesm2022/sumaris-net.ngx-components.mjs +638 -434
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/core/peer/select-peer.modal.d.ts +47 -6
- package/src/app/core/peer/select-peer.module.d.ts +3 -1
- package/src/app/core/services/config/core.config.d.ts +1 -0
- package/src/app/core/services/model/node-feature.model.d.ts +14 -0
- package/src/app/core/services/model/peer.model.d.ts +5 -0
- package/src/app/core/services/network.utils.d.ts +2 -0
- package/src/assets/i18n/en-US.json +6 -3
- package/src/assets/i18n/en.json +21 -18
- package/src/assets/i18n/fr.json +14 -11
- package/src/assets/manifest.json +1 -1
- package/src/environments/environment.class.d.ts +2 -0
- package/src/theme/_ngx-components.scss +2 -1
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { ChangeDetectorRef, EventEmitter, OnDestroy } from '@angular/core';
|
|
2
|
-
import { ModalController, PopoverController } from '@ionic/angular';
|
|
2
|
+
import { IonSearchbar, ModalController, PopoverController } from '@ionic/angular';
|
|
3
3
|
import { Peer } from '../services/model/peer.model';
|
|
4
|
-
import { Observable, Subject } from 'rxjs';
|
|
5
4
|
import { HttpClient } from '@angular/common/http';
|
|
6
5
|
import { Environment } from '../../../environments/environment.class';
|
|
7
6
|
import { TextPopoverOptions } from '../form/text-popover/text-popover.component';
|
|
8
7
|
import { TranslateService } from '@ngx-translate/core';
|
|
9
8
|
import { ILoggingService } from '../../shared/logging/logger.model';
|
|
9
|
+
import { RxState } from '@rx-angular/state';
|
|
10
|
+
import { NodeFeature } from '../services/model/node-feature.model';
|
|
10
11
|
import * as i0 from "@angular/core";
|
|
11
12
|
export interface ISelectPeerModalOptions {
|
|
12
13
|
canCancel: boolean;
|
|
@@ -14,8 +15,21 @@ export interface ISelectPeerModalOptions {
|
|
|
14
15
|
onRefresh: EventEmitter<Event>;
|
|
15
16
|
showSetManuallyButton: boolean;
|
|
16
17
|
selectedPeer?: string;
|
|
18
|
+
title?: string;
|
|
19
|
+
defaultPeers: Peer[];
|
|
20
|
+
showSearchBar?: boolean;
|
|
17
21
|
}
|
|
18
|
-
export
|
|
22
|
+
export interface ISelectPeerModalState {
|
|
23
|
+
defaultPeers: Peer[];
|
|
24
|
+
peers: Peer[];
|
|
25
|
+
filteredPeers: Peer[];
|
|
26
|
+
filteredPeersByFeatures: Peer[];
|
|
27
|
+
filteredPeerCount: number;
|
|
28
|
+
filteredFeaturesCount: number;
|
|
29
|
+
searchText: string;
|
|
30
|
+
selectedTabIndex: number;
|
|
31
|
+
}
|
|
32
|
+
export declare class SelectPeerModal extends RxState<ISelectPeerModalState> implements OnDestroy, ISelectPeerModalOptions {
|
|
19
33
|
private modalCtrl;
|
|
20
34
|
private popoverController;
|
|
21
35
|
private translate;
|
|
@@ -25,21 +39,44 @@ export declare class SelectPeerModal implements OnDestroy, ISelectPeerModalOptio
|
|
|
25
39
|
protected loggingService?: ILoggingService;
|
|
26
40
|
private _subscription;
|
|
27
41
|
private readonly _logger;
|
|
42
|
+
protected defaultPeers$: import("rxjs").Observable<Peer[]>;
|
|
43
|
+
protected peers$: import("rxjs").Observable<Peer[]>;
|
|
44
|
+
protected filteredPeers$: import("rxjs").Observable<Peer[]>;
|
|
45
|
+
protected filteredPeersByFeatures$: import("rxjs").Observable<Peer[]>;
|
|
46
|
+
protected filteredPeerCount$: import("rxjs").Observable<number>;
|
|
47
|
+
protected filteredFeaturesCount$: import("rxjs").Observable<number>;
|
|
28
48
|
protected loading: boolean;
|
|
29
49
|
protected mobile: boolean;
|
|
30
|
-
protected $peers: Subject<Peer[]>;
|
|
31
50
|
protected peerMinVersion: string;
|
|
32
51
|
protected peerDefaultPrefix: string;
|
|
52
|
+
protected enableSelectPeerByFeature: boolean;
|
|
53
|
+
protected collapsedPeers: {
|
|
54
|
+
[key: string]: boolean;
|
|
55
|
+
};
|
|
56
|
+
set peers(value: Peer[]);
|
|
57
|
+
get peers(): Peer[];
|
|
58
|
+
set searchText(value: string);
|
|
59
|
+
get searchText(): string;
|
|
60
|
+
set filteredPeers(value: Peer[]);
|
|
61
|
+
get filteredPeers(): Peer[];
|
|
62
|
+
set selectedTabIndex(value: number);
|
|
63
|
+
get selectedTabIndex(): number;
|
|
33
64
|
selectedPeer: string;
|
|
65
|
+
title: string;
|
|
34
66
|
canCancel: boolean;
|
|
35
67
|
allowSelectDownPeer: boolean;
|
|
36
68
|
showSetManuallyButton: boolean;
|
|
69
|
+
showSearchBar: boolean;
|
|
70
|
+
tabGroupAnimationDuration: '200ms';
|
|
37
71
|
onRefresh: EventEmitter<Event>;
|
|
72
|
+
set defaultPeers(value: Peer[]);
|
|
73
|
+
searchbar: IonSearchbar;
|
|
38
74
|
constructor(modalCtrl: ModalController, popoverController: PopoverController, translate: TranslateService, http: HttpClient, cd: ChangeDetectorRef, environment: Environment, loggingService?: ILoggingService);
|
|
39
|
-
set peers(peers: Observable<Peer[]>);
|
|
40
75
|
cancel(): void;
|
|
41
76
|
ngOnDestroy(): void;
|
|
42
77
|
selectPeer(peer: Peer): void;
|
|
78
|
+
toggleSearchBar(): Promise<void>;
|
|
79
|
+
togglePeerFeatures(peerUrl: string): void;
|
|
43
80
|
/**
|
|
44
81
|
* Check the min pod version, defined by the app
|
|
45
82
|
*
|
|
@@ -48,13 +85,17 @@ export declare class SelectPeerModal implements OnDestroy, ISelectPeerModalOptio
|
|
|
48
85
|
isCompatible(peer: Peer): boolean;
|
|
49
86
|
refresh(event: Event): void;
|
|
50
87
|
clickSetManually(event?: Event): Promise<void>;
|
|
88
|
+
protected clearLogo(peer: Peer | NodeFeature): void;
|
|
51
89
|
refreshPeers(peers: Peer[]): Promise<void>;
|
|
52
90
|
protected refreshPeer(peer: Peer): Promise<Peer>;
|
|
53
91
|
protected openPeerUrlPopover(event: Event, opts?: Partial<TextPopoverOptions>): Promise<any>;
|
|
92
|
+
protected updateFilteredPeer(event: any): void;
|
|
54
93
|
protected markForCheck(): void;
|
|
55
94
|
static ɵfac: i0.ɵɵFactoryDeclaration<SelectPeerModal, [null, null, null, null, null, null, { optional: true; }]>;
|
|
56
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SelectPeerModal, "select-peer-modal", never, { "selectedPeer": { "alias": "selectedPeer"; "required": false; }; "canCancel": { "alias": "canCancel"; "required": false; }; "allowSelectDownPeer": { "alias": "allowSelectDownPeer"; "required": false; }; "showSetManuallyButton": { "alias": "showSetManuallyButton"; "required": false; }; "onRefresh": { "alias": "onRefresh"; "required": false; }; }, {}, never, never, false, never>;
|
|
95
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SelectPeerModal, "select-peer-modal", never, { "selectedTabIndex": { "alias": "selectedTabIndex"; "required": false; }; "selectedPeer": { "alias": "selectedPeer"; "required": false; }; "title": { "alias": "title"; "required": false; }; "canCancel": { "alias": "canCancel"; "required": false; }; "allowSelectDownPeer": { "alias": "allowSelectDownPeer"; "required": false; }; "showSetManuallyButton": { "alias": "showSetManuallyButton"; "required": false; }; "showSearchBar": { "alias": "showSearchBar"; "required": false; }; "tabGroupAnimationDuration": { "alias": "tabGroupAnimationDuration"; "required": false; }; "onRefresh": { "alias": "onRefresh"; "required": false; }; "defaultPeers": { "alias": "defaultPeers"; "required": false; }; }, {}, never, never, false, never>;
|
|
96
|
+
static ngAcceptInputType_selectedTabIndex: unknown;
|
|
57
97
|
static ngAcceptInputType_canCancel: unknown;
|
|
58
98
|
static ngAcceptInputType_allowSelectDownPeer: unknown;
|
|
59
99
|
static ngAcceptInputType_showSetManuallyButton: unknown;
|
|
100
|
+
static ngAcceptInputType_showSearchBar: unknown;
|
|
60
101
|
}
|
|
@@ -3,8 +3,10 @@ import * as i1 from "./select-peer.modal";
|
|
|
3
3
|
import * as i2 from "../../shared/shared.module";
|
|
4
4
|
import * as i3 from "@ngx-translate/core";
|
|
5
5
|
import * as i4 from "../form/text-popover/text-popover.module";
|
|
6
|
+
import * as i5 from "../services/pipes/pipes.module";
|
|
7
|
+
import * as i6 from "@angular/forms";
|
|
6
8
|
export declare class AppSelectPeerModule {
|
|
7
9
|
static ɵfac: i0.ɵɵFactoryDeclaration<AppSelectPeerModule, never>;
|
|
8
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<AppSelectPeerModule, [typeof i1.SelectPeerModal], [typeof i2.SharedModule, typeof i3.TranslateModule, typeof i4.AppTextPopoverModule], [typeof i3.TranslateModule, typeof i1.SelectPeerModal]>;
|
|
10
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<AppSelectPeerModule, [typeof i1.SelectPeerModal], [typeof i2.SharedModule, typeof i3.TranslateModule, typeof i4.AppTextPopoverModule, typeof i5.CorePipesModule, typeof i6.FormsModule], [typeof i3.TranslateModule, typeof i1.SelectPeerModal]>;
|
|
9
11
|
static ɵinj: i0.ɵɵInjectorDeclaration<AppSelectPeerModule>;
|
|
10
12
|
}
|
|
@@ -36,6 +36,7 @@ export declare const CORE_CONFIG_OPTIONS: Readonly<{
|
|
|
36
36
|
FORM_FIELD_FOCUS_BACKGROUND_COLOR: FormFieldDefinition<string, import("../../../shared/form/field.model").FormFieldType, any>;
|
|
37
37
|
FORM_FIELD_DISABLED_BACKGROUND_COLOR: FormFieldDefinition<string, import("../../../shared/form/field.model").FormFieldType, any>;
|
|
38
38
|
ANDROID_INSTALL_URL: FormFieldDefinition<string, import("../../../shared/form/field.model").FormFieldType, any>;
|
|
39
|
+
IOS_INSTALL_URL: FormFieldDefinition<string, import("../../../shared/form/field.model").FormFieldType, any>;
|
|
39
40
|
DB_TIMEZONE: FormFieldDefinition<string, import("../../../shared/form/field.model").FormFieldType, any>;
|
|
40
41
|
ACCOUNT_LAT_LONG_FORMAT_ENABLE: FormFieldDefinition<string, import("../../../shared/form/field.model").FormFieldType, any>;
|
|
41
42
|
ACCOUNT_READONLY: FormFieldDefinition<string, import("../../../shared/form/field.model").FormFieldType, any>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Moment } from 'moment/moment';
|
|
2
|
+
import { Cloneable, Entity, EntityAsObjectOptions } from './entity.model';
|
|
3
|
+
export declare class NodeFeature extends Entity<NodeFeature> implements Cloneable<NodeFeature> {
|
|
4
|
+
static fromObject: (source: any, opts?: any) => NodeFeature;
|
|
5
|
+
label: string;
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
logo: string;
|
|
9
|
+
creationDate: Moment;
|
|
10
|
+
statusId: number;
|
|
11
|
+
validityStatusId: number;
|
|
12
|
+
asObject(options?: EntityAsObjectOptions): any;
|
|
13
|
+
fromObject(source: any): void;
|
|
14
|
+
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { Cloneable, Entity, EntityAsObjectOptions } from './entity.model';
|
|
2
|
+
import { NodeFeature } from './node-feature.model';
|
|
2
3
|
export declare class Peer extends Entity<Peer> implements Cloneable<Peer> {
|
|
3
4
|
static fromObject: (source: any, opts?: any) => Peer;
|
|
4
5
|
static parseUrl(peerUrl: string): Peer;
|
|
5
6
|
static path(peer: Peer, ...paths: string[]): string;
|
|
6
7
|
static equals(p1: Peer, p2: Peer): boolean;
|
|
8
|
+
static countAllFeatures(peers: Peer[]): number;
|
|
7
9
|
dns: string;
|
|
8
10
|
ipv4: string;
|
|
9
11
|
ipv6: string;
|
|
@@ -17,6 +19,9 @@ export declare class Peer extends Entity<Peer> implements Cloneable<Peer> {
|
|
|
17
19
|
softwareVersion: string;
|
|
18
20
|
label: string;
|
|
19
21
|
name: string;
|
|
22
|
+
registrationUri?: string;
|
|
23
|
+
registrationManager?: string;
|
|
24
|
+
features?: NodeFeature[];
|
|
20
25
|
constructor();
|
|
21
26
|
asObject(options?: EntityAsObjectOptions): any;
|
|
22
27
|
fromObject(source: any): void;
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
|
2
2
|
import { Peer } from './model/peer.model';
|
|
3
|
+
import { NodeFeature } from './model/node-feature.model';
|
|
3
4
|
export interface NodeInfo {
|
|
4
5
|
softwareName: string;
|
|
5
6
|
softwareVersion: string;
|
|
6
7
|
nodeLabel?: string;
|
|
7
8
|
nodeName?: string;
|
|
9
|
+
features?: NodeFeature[];
|
|
8
10
|
}
|
|
9
11
|
export interface AppManifest {
|
|
10
12
|
manifest_version: number;
|
|
@@ -33,8 +33,6 @@
|
|
|
33
33
|
"BTN_SAVE": "Save",
|
|
34
34
|
"BTN_SAVE_WITH_SHORTCUT": "<u>S</u>ave",
|
|
35
35
|
"BTN_SAVE_WITH_SHORTCUT_HELP": "Save (Ctrl+S)",
|
|
36
|
-
"BTN_SAVE_AND_CLOSE": "Save and close",
|
|
37
|
-
"BTN_SAVE_AND_NEXT": "Save and next",
|
|
38
36
|
"BTN_FILTER": "Filter",
|
|
39
37
|
"BTN_RELOAD": "Reload",
|
|
40
38
|
"BTN_REFRESH": "Refresh",
|
|
@@ -147,6 +145,7 @@
|
|
|
147
145
|
"CONFIGURATION": {
|
|
148
146
|
"OPTIONS": {
|
|
149
147
|
"ANDROID_INSTALL_URL": "Android > Install App URL",
|
|
148
|
+
"IOS_INSTALL_URL": "iOS > Install App URL",
|
|
150
149
|
"DB_TIMEZONE": "Persistence > Database timezone (readonly option)",
|
|
151
150
|
"LOGO": "Menu > Logo (max width 110px)",
|
|
152
151
|
"FAVICON": "favicon",
|
|
@@ -474,8 +473,12 @@
|
|
|
474
473
|
"OFFLINE": "Unreachable node",
|
|
475
474
|
"SELECT_MODAL": {
|
|
476
475
|
"TITLE": "Network nodes",
|
|
476
|
+
"STARTUP_TITLE": "Startup",
|
|
477
|
+
"TAB_NETWORK": "Databases",
|
|
478
|
+
"TAB_FEATURES": "Data collection programs",
|
|
477
479
|
"BTN_SET_MANUALLY": "Define manually",
|
|
478
|
-
"
|
|
480
|
+
"NETWORK_HELP": "Please choose a <b>database</b> node to connect to:",
|
|
481
|
+
"FEATURES_HELP": "Please choose a <b>data collection program</b> you would like to participate in:",
|
|
479
482
|
"NOT_COMPATIBLE_HELP": "Required version: v{{version}} or +"
|
|
480
483
|
}
|
|
481
484
|
},
|
package/src/assets/i18n/en.json
CHANGED
|
@@ -33,8 +33,6 @@
|
|
|
33
33
|
"BTN_SAVE": "Save",
|
|
34
34
|
"BTN_SAVE_WITH_SHORTCUT": "<u>S</u>ave",
|
|
35
35
|
"BTN_SAVE_WITH_SHORTCUT_HELP": "Save (Ctrl+S)",
|
|
36
|
-
"BTN_SAVE_AND_CLOSE": "Save and close",
|
|
37
|
-
"BTN_SAVE_AND_NEXT": "Save and next",
|
|
38
36
|
"BTN_FILTER": "Filter",
|
|
39
37
|
"BTN_RELOAD": "Reload",
|
|
40
38
|
"BTN_REFRESH": "Refresh",
|
|
@@ -128,11 +126,11 @@
|
|
|
128
126
|
},
|
|
129
127
|
"DEBUG": {
|
|
130
128
|
"TITLE": "Debug",
|
|
131
|
-
"BTN_DEBUG_DOTS": "
|
|
129
|
+
"BTN_DEBUG_DOTS": "Debug...",
|
|
132
130
|
"BTN_ENABLE_DEBUG": "Enable debug?"
|
|
133
131
|
},
|
|
134
132
|
"NAMED_FILTER": {
|
|
135
|
-
"TITLE": "Saved
|
|
133
|
+
"TITLE": "Saved filter",
|
|
136
134
|
"SAVE": "Save the filter",
|
|
137
135
|
"DELETE": "Delete the filter",
|
|
138
136
|
"DELETED": "Filter deleted",
|
|
@@ -145,7 +143,8 @@
|
|
|
145
143
|
},
|
|
146
144
|
"CONFIGURATION": {
|
|
147
145
|
"OPTIONS": {
|
|
148
|
-
"ANDROID_INSTALL_URL": "Android > Install App URL",
|
|
146
|
+
"ANDROID_INSTALL_URL": "App > Android > Install App URL",
|
|
147
|
+
"IOS_INSTALL_URL": "App > iOS > Install App URL",
|
|
149
148
|
"DB_TIMEZONE": "Persistence > Database timezone (readonly option)",
|
|
150
149
|
"LOGO": "Menu > Logo (max width 110px)",
|
|
151
150
|
"FAVICON": "favicon",
|
|
@@ -400,13 +399,13 @@
|
|
|
400
399
|
"BTN_CHANGE_PEER": "See available nodes",
|
|
401
400
|
"BTN_DARK_MODE": "Dark theme?",
|
|
402
401
|
"BTN_SHOW_MORE_HELP": "Show more parameters",
|
|
403
|
-
"BTN_SHOW_OPTION_KEY": "Show
|
|
402
|
+
"BTN_SHOW_OPTION_KEY": "Show options code?",
|
|
404
403
|
"BTN_CLEAR_CACHE": "Clear data cache",
|
|
405
404
|
"OFFLINE_MODE": "Force offline mode? (experimental)",
|
|
406
405
|
"DATA_ENTRY_DIVIDER": "Data entry settings",
|
|
407
406
|
"USAGE_MODE": "Usage mode",
|
|
408
|
-
"USAGE_MODE_FIELD": "<b>
|
|
409
|
-
"USAGE_MODE_DESK": "<b>
|
|
407
|
+
"USAGE_MODE_FIELD": "Mode on <b>field</b>",
|
|
408
|
+
"USAGE_MODE_DESK": "Mode in <b>office</b>",
|
|
410
409
|
"USAGE_MODES": {
|
|
411
410
|
"FIELD": "On field",
|
|
412
411
|
"DESK": "In office"
|
|
@@ -414,7 +413,7 @@
|
|
|
414
413
|
"PROPERTY_KEY": "Entry field",
|
|
415
414
|
"PROPERTY_VALUE": "Display",
|
|
416
415
|
"BTN_ADD_PROPERTY": "Add a entry field",
|
|
417
|
-
"BTN_RESET_PROPERTY": "Reset option",
|
|
416
|
+
"BTN_RESET_PROPERTY": "Reset the option",
|
|
418
417
|
"FIELDS": {
|
|
419
418
|
"DEPARTMENT": "Dropdown list > Departments",
|
|
420
419
|
"ATTRIBUTES": {
|
|
@@ -453,7 +452,7 @@
|
|
|
453
452
|
"ADMIN": "Administrator",
|
|
454
453
|
"SUPERVISOR": "Manager",
|
|
455
454
|
"USER": "Observer",
|
|
456
|
-
"GUEST": "
|
|
455
|
+
"GUEST": "Guest"
|
|
457
456
|
},
|
|
458
457
|
"LIST": {
|
|
459
458
|
"TITLE": "Users",
|
|
@@ -473,15 +472,19 @@
|
|
|
473
472
|
"OFFLINE": "Unreachable node",
|
|
474
473
|
"SELECT_MODAL": {
|
|
475
474
|
"TITLE": "Network nodes",
|
|
475
|
+
"STARTUP_TITLE": "Startup",
|
|
476
|
+
"TAB_NETWORK": "Databases",
|
|
477
|
+
"TAB_FEATURES": "Data collection programmes",
|
|
476
478
|
"BTN_SET_MANUALLY": "Define manually",
|
|
477
|
-
"
|
|
479
|
+
"NETWORK_HELP": "Please choose a <b>database</b> node to connect to:",
|
|
480
|
+
"FEATURES_HELP": "Please choose a <b>data collection programme</b> you would like to participate in:",
|
|
478
481
|
"NOT_COMPATIBLE_HELP": "Required version: v{{version}} or +"
|
|
479
482
|
}
|
|
480
483
|
},
|
|
481
484
|
"SYNCHRONIZATION_STATUS": {
|
|
482
|
-
"DIRTY": "
|
|
485
|
+
"DIRTY": "Not sent",
|
|
483
486
|
"READY_TO_SYNC": "Ready to synchronize",
|
|
484
|
-
"SYNC": "
|
|
487
|
+
"SYNC": "Sent"
|
|
485
488
|
},
|
|
486
489
|
"INFO": {
|
|
487
490
|
"IMPORTATION_PCT_DOTS": "Importation... {{pct}}%",
|
|
@@ -529,7 +532,7 @@
|
|
|
529
532
|
"MESSAGE": {
|
|
530
533
|
"TYPE": "Message type",
|
|
531
534
|
"RECIPIENTS": "Recipients",
|
|
532
|
-
"RECIPIENT_FILTER_COUNT": "{{count}} filtered
|
|
535
|
+
"RECIPIENT_FILTER_COUNT": "{{count}} filtered user(s)",
|
|
533
536
|
"SUBJECT": "Object",
|
|
534
537
|
"BODY_HELP": "Your message...",
|
|
535
538
|
"NEW": {
|
|
@@ -596,7 +599,7 @@
|
|
|
596
599
|
"FIELD_INCONSISTENT": "Inconsistent value",
|
|
597
600
|
"FIELD_NOT_VALID_DECIMAL": "Expected decimal value",
|
|
598
601
|
"FIELD_NOT_VALID_INTEGER": "Expected integer value",
|
|
599
|
-
"FIELD_NOT_VALID_PRECISION": "
|
|
602
|
+
"FIELD_NOT_VALID_PRECISION": "Minimal precision: {{precision}}",
|
|
600
603
|
"FIELD_NOT_VALID_PRECISION_COMPACT": "Min precision {{precision}}",
|
|
601
604
|
"FIELD_NOT_VALID_EMAIL": "Invalid email address",
|
|
602
605
|
"FIELD_NOT_VALID_DATE": "Invalid date",
|
|
@@ -615,7 +618,7 @@
|
|
|
615
618
|
"FIELD_NOT_EQUALS": "Value not equals",
|
|
616
619
|
"SPACE_NOT_ALLOW": "Spaces or special characters not allowed",
|
|
617
620
|
"SCRYPT_ERROR": "Unable to create account keys",
|
|
618
|
-
"INVALID_OR_INCOMPLETE_FILL": "
|
|
621
|
+
"INVALID_OR_INCOMPLETE_FILL": "Incomplete or invalid entry",
|
|
619
622
|
"UNKNOWN_ACCOUNT_EMAIL": "No account matches this email.",
|
|
620
623
|
"BAD_PASSWORD": "Incorrect password.",
|
|
621
624
|
"EMAIL_ALREADY_REGISTERED": "Email already registered",
|
|
@@ -668,7 +671,7 @@
|
|
|
668
671
|
"LOAD_ERROR": "Error while loading",
|
|
669
672
|
"SAVE_ERROR": "Error while saving",
|
|
670
673
|
"SUBSCRIBE_ERROR": "Error while subscribe to changes",
|
|
671
|
-
"FIELD_NOT_EXISTS": "
|
|
674
|
+
"FIELD_NOT_EXISTS": "Value doesn't exist",
|
|
672
675
|
"FIREFOX_NO_STORAGE": "The application cannot run with Firefox in 'private' mode or without keeping navigation history",
|
|
673
676
|
"FEATURE_NOT_IMPLEMENTED": "Feature not implemented! <small><br/>Please contact your administrator.</small>"
|
|
674
677
|
},
|
|
@@ -690,7 +693,7 @@
|
|
|
690
693
|
},
|
|
691
694
|
"INFO": {
|
|
692
695
|
"ALERT_HEADER": "Information",
|
|
693
|
-
"SYNCHRONIZATION_SUCCEED": "Synchronization completed
|
|
696
|
+
"SYNCHRONIZATION_SUCCEED": "Synchronization <b>completed successfully</b>!<br/>The data has been received by the server.",
|
|
694
697
|
"COPY_SUCCEED": "Copy successfully!",
|
|
695
698
|
"DEBUG_DATA_SEND": "Help request sent to administrator",
|
|
696
699
|
"DATA_MIGRATION_STARTED": "Data recovery in progress. <br/><b>Please wait ...</b>",
|
package/src/assets/i18n/fr.json
CHANGED
|
@@ -33,8 +33,6 @@
|
|
|
33
33
|
"BTN_SAVE": "Sauvegarder",
|
|
34
34
|
"BTN_SAVE_WITH_SHORTCUT": "<u>S</u>auvegarder",
|
|
35
35
|
"BTN_SAVE_WITH_SHORTCUT_HELP": "Sauvegarder (Ctrl+S)",
|
|
36
|
-
"BTN_SAVE_AND_CLOSE": "Sauvegarder et fermer",
|
|
37
|
-
"BTN_SAVE_AND_NEXT": "Sauvegarder et suivant",
|
|
38
36
|
"BTN_FILTER": "Filtrer",
|
|
39
37
|
"BTN_RELOAD": "Recharger",
|
|
40
38
|
"BTN_REFRESH": "Rafraichir",
|
|
@@ -132,10 +130,10 @@
|
|
|
132
130
|
"BTN_ENABLE_DEBUG": "Activer le débogage ?"
|
|
133
131
|
},
|
|
134
132
|
"NAMED_FILTER": {
|
|
135
|
-
"TITLE": "
|
|
133
|
+
"TITLE": "Filtre enregistré",
|
|
136
134
|
"SAVE": "Sauvegarder le filtre",
|
|
137
135
|
"DELETE": "Supprimer le filtre",
|
|
138
|
-
"DELETED": "Filtre
|
|
136
|
+
"DELETED": "Filtre <b>supprimé</b>",
|
|
139
137
|
"EXPORT": "Télécharger le filtre",
|
|
140
138
|
"IMPORT": "Importer un filtre...",
|
|
141
139
|
"LOAD_FAILED": "Échec du chargement du filtre",
|
|
@@ -145,7 +143,8 @@
|
|
|
145
143
|
},
|
|
146
144
|
"CONFIGURATION": {
|
|
147
145
|
"OPTIONS": {
|
|
148
|
-
"ANDROID_INSTALL_URL": "Android > URL d'installation App",
|
|
146
|
+
"ANDROID_INSTALL_URL": "App > Android > URL d'installation App",
|
|
147
|
+
"IOS_INSTALL_URL": "App > iOS > URL d'installation App",
|
|
149
148
|
"DB_TIMEZONE": "Persistance > Timezone de la base de données (option non modifiable)",
|
|
150
149
|
"LOGO": "Menu > Logo (largeur max 110px)",
|
|
151
150
|
"FAVICON": "favicon",
|
|
@@ -200,7 +199,7 @@
|
|
|
200
199
|
"ENTITY_TRASH": "Activer la corbeille du pod ?",
|
|
201
200
|
"UPDATE_TECHNICAL_TABLES": "Pod > Tables techniques : mise à jour auto ?",
|
|
202
201
|
"ANALYTIC_REFERENCES_ENABLE": "Stratégie > Références analytiques : Activer ?",
|
|
203
|
-
"AUTH_TOKEN_TYPE_PLACEHOLDER": "
|
|
202
|
+
"AUTH_TOKEN_TYPE_PLACEHOLDER": "Sécurité > Type d'authentification",
|
|
204
203
|
"AUTH_TOKEN_TYPE": {
|
|
205
204
|
"BASIC": "Basique",
|
|
206
205
|
"TOKEN": "Cryptographique",
|
|
@@ -472,9 +471,13 @@
|
|
|
472
471
|
"PEER": {
|
|
473
472
|
"OFFLINE": "Nœud injoignable",
|
|
474
473
|
"SELECT_MODAL": {
|
|
475
|
-
"TITLE": "
|
|
474
|
+
"TITLE": "Sélection du nœud réseau",
|
|
475
|
+
"STARTUP_TITLE": "Démarrage",
|
|
476
|
+
"TAB_NETWORK": "Bases de données",
|
|
477
|
+
"TAB_FEATURES": "Programmes de collecte",
|
|
476
478
|
"BTN_SET_MANUALLY": "Saisir manuellement",
|
|
477
|
-
"
|
|
479
|
+
"NETWORK_HELP": "Veuillez choisir la <b>base de données</b> à laquelle vous souhaitez vous connecter :",
|
|
480
|
+
"FEATURES_HELP": "Veuillez choisir un <b>programme de collecte ou d'expérimentation</b> auquel vous souhaitez participer :",
|
|
478
481
|
"NOT_COMPATIBLE_HELP": "Version requise : v{{version}} ou +"
|
|
479
482
|
}
|
|
480
483
|
},
|
|
@@ -529,7 +532,7 @@
|
|
|
529
532
|
"MESSAGE": {
|
|
530
533
|
"TYPE": "Type d'envoi",
|
|
531
534
|
"RECIPIENTS": "Destinataires",
|
|
532
|
-
"RECIPIENT_FILTER_COUNT": "{{count}}
|
|
535
|
+
"RECIPIENT_FILTER_COUNT": "{{count}} utilisateur(s) filtré(s)",
|
|
533
536
|
"SUBJECT": "Objet",
|
|
534
537
|
"BODY_HELP": "Votre message...",
|
|
535
538
|
"NEW": {
|
|
@@ -660,14 +663,14 @@
|
|
|
660
663
|
"DELETE_ENTITY_ERROR": "Erreur lors de la suppression. <small><br/>Si le problème persiste, veuillez contacter votre administrateur.</small>",
|
|
661
664
|
"SUBSCRIBE_ENTITY_ERROR": "Erreur lors de l'abonnement aux modifications distantes",
|
|
662
665
|
"CONTROL_ENTITY_ERROR": "Erreur lors du contrôle de la validité des données",
|
|
663
|
-
"TERMINATE_ENTITY_ERROR": "
|
|
666
|
+
"TERMINATE_ENTITY_ERROR": "Terminaison de la saisie impossible. <small><br/>Si le problème persiste, veuillez contacter votre administrateur.</small>",
|
|
664
667
|
"VALIDATE_ENTITY_ERROR": "Erreur lors de la validation",
|
|
665
668
|
"UNVALIDATE_ENTITY_ERROR": "Erreur lors de la dévalidation",
|
|
666
669
|
"QUALIFY_ENTITY_ERROR": "Erreur lors de la qualification",
|
|
667
670
|
"SYNCHRONIZE_ENTITY_ERROR": "Synchronisation impossible. <small><br/>Si le problème persiste, veuillez contacter votre administrateur.</small>",
|
|
668
671
|
"LOAD_ERROR": "Erreur de chargement",
|
|
669
672
|
"SAVE_ERROR": "Erreur de sauvegarde",
|
|
670
|
-
"SUBSCRIBE_ERROR": "
|
|
673
|
+
"SUBSCRIBE_ERROR": "Échec de l'abonnement distant aux modifications",
|
|
671
674
|
"FIELD_NOT_EXISTS": "Cette valeur n'existe pas",
|
|
672
675
|
"FIREFOX_NO_STORAGE": "L'application ne peut pas fonctionner sur Firefox en mode 'navigation privée' ou si la conservation de l'historique est désactivée",
|
|
673
676
|
"FEATURE_NOT_IMPLEMENTED": "Fonctionnalité non implémentée ! <small><br/>Veuillez contacter votre administrateur.</small>"
|
package/src/assets/manifest.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "ngx-sumaris-components",
|
|
3
3
|
"short_name": "ngx-sumaris-components",
|
|
4
4
|
"manifest_version": 1,
|
|
5
|
-
"version": "18.2.
|
|
5
|
+
"version": "18.2.27",
|
|
6
6
|
"default_locale": "fr",
|
|
7
7
|
"description": "Angular components for building beautiful and responsive Apps",
|
|
8
8
|
"icons": [{
|
|
@@ -32,6 +32,7 @@ export declare class Environment {
|
|
|
32
32
|
}[];
|
|
33
33
|
peerMinVersion?: string;
|
|
34
34
|
peerDefaultPrefix?: string;
|
|
35
|
+
enableSelectPeerByFeature?: boolean;
|
|
35
36
|
checkAppVersionIntervalInSeconds?: number;
|
|
36
37
|
persistCache?: boolean;
|
|
37
38
|
offline?: boolean;
|
|
@@ -41,6 +42,7 @@ export declare class Environment {
|
|
|
41
42
|
defaultDepartmentId?: number;
|
|
42
43
|
defaultAppName?: string;
|
|
43
44
|
defaultAndroidInstallUrl?: string;
|
|
45
|
+
defaultIOSInstallUrl?: string;
|
|
44
46
|
useHash?: boolean;
|
|
45
47
|
allowDarkMode?: boolean;
|
|
46
48
|
logging?: Partial<LoggingServiceConfig>;
|