@eui/tools 4.15.10 → 4.15.14

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 (121) hide show
  1. package/.version.properties +1 -1
  2. package/CHANGELOG.md +41 -0
  3. package/bin/eui-scripts.js +6 -2
  4. package/bin/scripts/build-package-sub.js +20 -0
  5. package/bin/scripts/version.js +12 -0
  6. package/global.test.js +3 -3
  7. package/package.json +12 -16
  8. package/sandbox.js +3 -2
  9. package/scripts/csdr/cli/app.js +30 -3
  10. package/scripts/csdr/cli/package.js +41 -5
  11. package/scripts/csdr/cli/skeletons/app-showcase-eui13/angular-config.json +33 -0
  12. package/scripts/csdr/cli/skeletons/app-showcase-eui13/dependencies-composite.json +5 -0
  13. package/scripts/csdr/cli/skeletons/app-showcase-eui13/gitignore_TO_REPLACE +50 -0
  14. package/scripts/csdr/cli/skeletons/app-showcase-eui13/package.json +6 -0
  15. package/scripts/csdr/cli/skeletons/app-showcase-eui13/scripts.json +3 -0
  16. package/scripts/csdr/cli/skeletons/app-showcase-eui13/src/app/app-routing.module.ts +21 -0
  17. package/scripts/csdr/cli/skeletons/app-showcase-eui13/src/app/app.component.html +26 -0
  18. package/scripts/csdr/cli/skeletons/app-showcase-eui13/src/app/app.component.ts +19 -0
  19. package/scripts/csdr/cli/skeletons/app-showcase-eui13/src/app/app.routes.ts +7 -0
  20. package/scripts/csdr/cli/skeletons/app-showcase-eui13/src/app/features/_home/home-routing.module.ts +15 -0
  21. package/scripts/csdr/cli/skeletons/app-showcase-eui13/src/app/features/_home/home.component.html +7 -0
  22. package/scripts/csdr/cli/skeletons/app-showcase-eui13/src/app/features/_home/home.component.ts +8 -0
  23. package/scripts/csdr/cli/skeletons/app-showcase-eui13/src/app/features/_home/home.module.ts +17 -0
  24. package/scripts/csdr/cli/skeletons/app-showcase-eui13/src/app/features/shared/shared.module.ts +15 -0
  25. package/scripts/csdr/cli/skeletons/app-showcase-eui13/src/assets/app-metadata.json +8 -0
  26. package/scripts/csdr/cli/skeletons/app-showcase-eui13/src/assets/config/env-json-config.json +41 -0
  27. package/scripts/csdr/cli/skeletons/app-showcase-eui13/src/index.html +22 -0
  28. package/scripts/csdr/cli/skeletons/package/frontend-eui10/assets/i18n/en.json +3 -0
  29. package/scripts/csdr/cli/skeletons/package/frontend-eui10/assets/i18n/fr.json +3 -0
  30. package/scripts/csdr/cli/skeletons/package/frontend-eui10/gitignore_TO_REPLACE +46 -0
  31. package/scripts/csdr/cli/skeletons/package/frontend-eui10/karma.conf.js +7 -0
  32. package/scripts/csdr/cli/skeletons/package/frontend-eui10/ng-package.json +7 -0
  33. package/scripts/csdr/cli/skeletons/package/frontend-eui10/package.json +4 -0
  34. package/scripts/csdr/cli/skeletons/package/frontend-eui10/src/index.ts +1 -0
  35. package/scripts/csdr/cli/skeletons/package/frontend-eui10/src/lib/module.ts +11 -0
  36. package/scripts/csdr/cli/skeletons/package/frontend-eui10/src/test.ts.TO_REPLACE +21 -0
  37. package/scripts/csdr/cli/skeletons/package/frontend-eui10/tsconfig.lib.json +32 -0
  38. package/scripts/csdr/cli/skeletons/package/frontend-eui10/tsconfig.spec.json +17 -0
  39. package/scripts/csdr/cli/skeletons/package/frontend-eui10/tslint.json +17 -0
  40. package/scripts/csdr/cli/skeletons/package/frontend-remote/angular.json +3 -3
  41. package/scripts/csdr/cli/skeletons/package/frontend-remote/dependencies-composite.json +1 -0
  42. package/scripts/csdr/cli/skeletons/package/frontend-remote/src/app/dummy.scss +3 -0
  43. package/scripts/csdr/cli/skeletons/package/frontend-remote/src/app/dummy.spec.ts +6 -0
  44. package/scripts/csdr/cli/skeletons/package/frontend-remote/src/app/module.component.ts +62 -28
  45. package/scripts/csdr/cli/skeletons/package/frontend-remote/src/app/module.ts +33 -33
  46. package/scripts/csdr/cli/skeletons/package/frontend-remote/src/app/routing.module.ts +22 -10
  47. package/scripts/csdr/cli/skeletons/package/frontend-remote/src/assets/i18n-compiled/en.json +1 -0
  48. package/scripts/csdr/cli/skeletons/package/frontend-remote/src/assets/i18n-compiled/fr.json +1 -0
  49. package/scripts/csdr/cli/skeletons/package/frontend-remote/src/config/global.ts +8 -5
  50. package/scripts/csdr/cli/skeletons/package/frontend-remote/src/index.html +1 -1
  51. package/scripts/csdr/cli/skeletons/package/frontend-remote/tsconfig.app.json +3 -1
  52. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/angular.json +90 -0
  53. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/browserslist +10 -0
  54. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/dependencies-base.json +2 -0
  55. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/dependencies-composite.json +7 -0
  56. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/gitignore_TO_REPLACE +64 -0
  57. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/karma.conf.js +7 -0
  58. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/package.json_TO_REPLACE +8 -0
  59. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/src/app/dummy.scss +3 -0
  60. package/scripts/csdr/cli/skeletons/package/{frontend-remote/src/app/dummy.spec.ts.TO_REPLACE → frontend-remote-eui10/src/app/dummy.spec.ts} +0 -0
  61. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/src/app/module.component.ts +71 -0
  62. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/src/app/module.ts +165 -0
  63. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/src/app/reducers/custom-route-serializer.ts +28 -0
  64. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/src/app/reducers/index.ts +42 -0
  65. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/src/app/routing.module.ts +51 -0
  66. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/src/assets/.gitkeep +0 -0
  67. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/src/config/global.ts +31 -0
  68. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/src/config/index.ts +20 -0
  69. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/src/config/modules.ts +3 -0
  70. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/src/environments/environment.prod.ts +3 -0
  71. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/src/environments/environment.ts +15 -0
  72. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/src/favicon.ico +0 -0
  73. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/src/index.html +10 -0
  74. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/src/main.ts +12 -0
  75. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/src/polyfills.ts +86 -0
  76. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/src/test.ts.TO_REPLACE +20 -0
  77. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/tsconfig.app.json +20 -0
  78. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/tsconfig.spec.json +18 -0
  79. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/tslint-remote.json +7 -0
  80. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/tslint.json +17 -0
  81. package/scripts/csdr/cli/skeletons/package/frontend-remote-eui10/webpack.extra.js +15 -0
  82. package/scripts/csdr/config/angular.js +213 -3
  83. package/scripts/csdr/config/global.js +16 -0
  84. package/scripts/csdr/init/resources/yarn-eui13.lock +15857 -0
  85. package/scripts/csdr/install/common.js +26 -8
  86. package/scripts/csdr/jira/jira-utils.js +168 -168
  87. package/scripts/csdr/jira/update.js +150 -150
  88. package/scripts/csdr/metadata/app-envs.js +34 -33
  89. package/scripts/csdr/metadata/app-history.js +62 -61
  90. package/scripts/csdr/metadata/common.js +44 -41
  91. package/scripts/csdr/metadata/package-history.js +0 -1
  92. package/scripts/csdr/release/app/release-app.js +3 -0
  93. package/scripts/csdr/release/package/release-package.js +4 -0
  94. package/scripts/csdr/sync/sync-utils.js +6 -2
  95. package/scripts/utils/build/package/angular.js +4 -4
  96. package/scripts/utils/build/package/build-package-utils.js +50 -1
  97. package/scripts/utils/build/package/element.js +3 -14
  98. package/scripts/utils/build/package/styles.js +100 -7
  99. package/scripts/utils/confluence-utils.js +126 -126
  100. package/scripts/utils/index.js +2 -2
  101. package/scripts/utils/pre-build/injection/app-sources-full-skeleton/src/_generated/favicon.ico +0 -0
  102. package/scripts/utils/pre-build/injection/app-sources-full-skeleton-eui13/src/_generated/app/app.module.ts +52 -0
  103. package/scripts/utils/pre-build/injection/app-sources-full-skeleton-eui13/src/_generated/app/core/reducers/index.ts +40 -0
  104. package/scripts/utils/pre-build/injection/app-sources-full-skeleton-eui13/src/_generated/config/global.ts +4 -0
  105. package/scripts/utils/pre-build/injection/app-sources-full-skeleton-eui13/src/_generated/config/index.ts +8 -0
  106. package/scripts/utils/pre-build/injection/app-sources-full-skeleton-eui13/src/_generated/config/modules.ts +4 -0
  107. package/scripts/utils/pre-build/injection/app-sources-full-skeleton-eui13/src/_generated/environments/environment.dev.ts +9 -0
  108. package/scripts/utils/pre-build/injection/app-sources-full-skeleton-eui13/src/_generated/environments/environment.prod.ts +9 -0
  109. package/scripts/utils/pre-build/injection/app-sources-full-skeleton-eui13/src/_generated/environments/environment.ts +21 -0
  110. package/scripts/utils/pre-build/injection/app-sources-full-skeleton-eui13/src/_generated/favicon.ico +0 -0
  111. package/scripts/utils/pre-build/injection/app-sources-full-skeleton-eui13/src/_generated/karma.conf.js +7 -0
  112. package/scripts/utils/pre-build/injection/app-sources-full-skeleton-eui13/src/_generated/main.ts +21 -0
  113. package/scripts/utils/pre-build/injection/app-sources-full-skeleton-eui13/src/_generated/polyfills.ts +86 -0
  114. package/scripts/utils/pre-build/injection/app-sources-full-skeleton-eui13/src/_generated/tst.ts +33 -0
  115. package/scripts/utils/pre-build/injection/app-sources-full-skeleton-eui13/tsconfig.app.json +19 -0
  116. package/scripts/utils/pre-build/injection/app-sources-full-skeleton-eui13/tsconfig.spec.json +9 -0
  117. package/scripts/utils/pre-build/injection/app-sources-full-skeleton-eui13/tslint.json +17 -0
  118. package/scripts/utils/pre-build/injection/skeletons.js +6 -2
  119. package/scripts/utils/pre-build/projects.js +5 -1
  120. package/scripts/utils/tools.js +30 -1
  121. package/scripts/csdr/cli/skeletons/package/frontend-remote/webpack.extra.js +0 -7
@@ -0,0 +1,41 @@
1
+ {
2
+ "global": {
3
+ "appTitle": "CSDR-app",
4
+ "i18n": {
5
+ "i18nService": {
6
+ "defaultLanguage": "en",
7
+ "languages": [
8
+ "en",
9
+ "fr",
10
+ "es"
11
+ ]
12
+ },
13
+ "i18nLoader": {
14
+ "i18nFolders": [
15
+ "i18n-eui",
16
+ "i18n-ecl",
17
+ "i18n"
18
+ ]
19
+ }
20
+ }
21
+ },
22
+ "versions": {},
23
+ "modules": {
24
+ "core": {
25
+ "api": {
26
+ "base": "assets/",
27
+ "user": {
28
+ "base": "config/",
29
+ "details": "user-details.json",
30
+ "preferences": "user-preferences.json",
31
+ "rights": "user-rights.json"
32
+ }
33
+ }
34
+ },
35
+ "users": {
36
+ "api": {
37
+ "base": "https://jsonplaceholder.typicode.com/users"
38
+ }
39
+ }
40
+ }
41
+ }
@@ -0,0 +1,22 @@
1
+ <!doctype html>
2
+ <html>
3
+
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title>eUI - UX</title>
7
+ <base href="/">
8
+
9
+ <meta name="viewport" content="width=device-width, initial-scale=1">
10
+ <link rel="icon" type="image/x-icon" href="favicon.ico">
11
+ <script src="https://ec.europa.eu/wel/cookie-consent/consent.js" type="text/javascript" defer></script>
12
+ </head>
13
+
14
+ <body>
15
+ <app-root>
16
+ <div id="loader-wrapper">
17
+ <div id="loader"></div>
18
+ </div>
19
+ </app-root>
20
+ </body>
21
+
22
+ </html>
@@ -0,0 +1,3 @@
1
+ {
2
+ "@module.name@.KEY": "english text"
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "@module.name@.KEY": "texte en français"
3
+ }
@@ -0,0 +1,46 @@
1
+ # See http://help.github.com/ignore-files/ for more about ignoring files.
2
+
3
+ # compiled output
4
+ **/node_modules
5
+ **/target
6
+ **/build
7
+ **/dist
8
+ **/out-tsc
9
+ **/tmp
10
+ **/test/reports
11
+
12
+ # IDEs and editors
13
+ /.idea
14
+ .project
15
+ .classpath
16
+ .c9/
17
+ *.launch
18
+ .settings/
19
+ *.sublime-workspace
20
+
21
+ # IDE - VSCode
22
+ .vscode/*
23
+ !.vscode/settings.json
24
+ !.vscode/tasks.json
25
+ !.vscode/launch.json
26
+ !.vscode/extensions.json
27
+
28
+ # misc
29
+ /.sass-cache
30
+ /connect.lock
31
+ /coverage
32
+ /libpeerconnection.log
33
+ npm-debug.log
34
+ testem.log
35
+ /typings
36
+ yarn-error.log
37
+
38
+ # e2e
39
+ /e2e/*.js
40
+ /e2e/*.map
41
+ **/src/**/*.js
42
+ **/src/**/*.map
43
+
44
+ # System Files
45
+ .DS_Store
46
+ Thumbs.db
@@ -0,0 +1,7 @@
1
+ const karmaConfig = require('@eui/tools/karma/karma.conf.pkg');
2
+
3
+ module.exports = function (config) {
4
+ config.set(
5
+ karmaConfig.get(config, '@module.full.name@', {})
6
+ );
7
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
3
+ "dest": "./dist",
4
+ "lib": {
5
+ "entryFile": "src/index.ts"
6
+ }
7
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "name": "@module.scope@/@module.name@",
3
+ "version": "1.0.0"
4
+ }
@@ -0,0 +1 @@
1
+ export * from './lib/module';
@@ -0,0 +1,11 @@
1
+ import { NgModule } from '@angular/core';
2
+
3
+ @NgModule({
4
+ declarations: [
5
+ ],
6
+ imports: [
7
+ ],
8
+ exports: [
9
+ ],
10
+ })
11
+ export class Module { }
@@ -0,0 +1,21 @@
1
+ // This file is required by karma.conf.js and loads recursively all the .spec and framework files
2
+
3
+ import 'zone.js/dist/zone';
4
+ import 'zone.js/dist/zone-testing';
5
+ import { getTestBed } from '@angular/core/testing';
6
+ import {
7
+ BrowserDynamicTestingModule,
8
+ platformBrowserDynamicTesting
9
+ } from '@angular/platform-browser-dynamic/testing';
10
+
11
+ declare const require: any;
12
+
13
+ // First, initialize the Angular testing environment.
14
+ getTestBed().initTestEnvironment(
15
+ BrowserDynamicTestingModule,
16
+ platformBrowserDynamicTesting()
17
+ );
18
+ // Then we find all the tests.
19
+ const context = require.context('./', true, /\.spec\.ts$/);
20
+ // And load the modules.
21
+ context.keys().map(context);
@@ -0,0 +1,32 @@
1
+ {
2
+ "extends": "../../tsconfig.build.json",
3
+ "compilerOptions": {
4
+ "outDir": "./out-tsc/lib",
5
+ "target": "es2015",
6
+ "module": "es2015",
7
+ "moduleResolution": "node",
8
+ "declaration": true,
9
+ "sourceMap": true,
10
+ "inlineSources": true,
11
+ "emitDecoratorMetadata": true,
12
+ "experimentalDecorators": true,
13
+ "importHelpers": true,
14
+ "types": [],
15
+ "lib": [
16
+ "dom",
17
+ "es2018"
18
+ ]
19
+ },
20
+ "angularCompilerOptions": {
21
+ "annotateForClosureCompiler": true,
22
+ "skipTemplateCodegen": true,
23
+ "strictMetadataEmit": true,
24
+ "fullTemplateTypeCheck": true,
25
+ "strictInjectionParameters": true,
26
+ "enableResourceInlining": true
27
+ },
28
+ "exclude": [
29
+ "src/test.ts",
30
+ "**/*.spec.ts"
31
+ ]
32
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "extends": "../../tsconfig.build.json",
3
+ "compilerOptions": {
4
+ "outDir": "./out-tsc/spec",
5
+ "types": [
6
+ "jasmine",
7
+ "node"
8
+ ]
9
+ },
10
+ "files": [
11
+ "src/test.ts"
12
+ ],
13
+ "include": [
14
+ "**/*.spec.ts",
15
+ "**/*.d.ts"
16
+ ]
17
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "extends": "../../tslint.json",
3
+ "rules": {
4
+ "directive-selector": [
5
+ true,
6
+ "attribute",
7
+ "@module.scope.string@",
8
+ "camelCase"
9
+ ],
10
+ "component-selector": [
11
+ true,
12
+ "element",
13
+ "@module.scope.string@",
14
+ "kebab-case"
15
+ ]
16
+ }
17
+ }
@@ -3,7 +3,7 @@
3
3
  "version": 1,
4
4
  "newProjectRoot": "apps",
5
5
  "projects": {
6
- "remote-element": {
6
+ "@module.full.name@": {
7
7
  "root": ".",
8
8
  "sourceRoot": "src",
9
9
  "projectType": "application",
@@ -52,11 +52,11 @@
52
52
  "serve": {
53
53
  "builder": "./node_modules/@angular-devkit/build-angular:dev-server",
54
54
  "options": {
55
- "browserTarget": "remote-element:build:serve-dist"
55
+ "browserTarget": "@module.full.name@:build:serve-dist"
56
56
  },
57
57
  "configurations": {
58
58
  "production": {
59
- "browserTarget": "remote-element:build:production"
59
+ "browserTarget": "@module.full.name@:build:production"
60
60
  }
61
61
  }
62
62
  },
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "@eui/deps-base": "^7.0.0",
3
+
3
4
  "@csdr/core": "^1.0.0",
4
5
  "@csdr/integration": "^1.0.0",
5
6
  "@csdr/zipkin-tracing": "^3.0.0"
@@ -0,0 +1,3 @@
1
+ .example {
2
+ padding: 10px;
3
+ }
@@ -0,0 +1,6 @@
1
+ // Dummy test
2
+ describe('Test', () => {
3
+ it('should work', () => {
4
+ expect(true).toBe(true);
5
+ });
6
+ });
@@ -1,50 +1,84 @@
1
- import { Component, OnInit, Inject, ViewChild } from '@angular/core';
1
+ import { Component, OnInit, Inject } from '@angular/core';
2
2
  import { Location } from '@angular/common';
3
- import { Router, RouterOutlet } from '@angular/router';
3
+ import { Router } from '@angular/router';
4
4
 
5
- import { CONFIG_TOKEN, I18nService } from '@eui/core';
5
+ import { take, retry } from 'rxjs/operators';
6
+
7
+ import { CONFIG_TOKEN, I18nService, I18nLoadStatus } from '@eui/core';
8
+ import { appConfig } from '../config/index';
9
+
10
+ enum ElementStatus {
11
+ Loading = 'loading',
12
+ Loaded = 'loaded',
13
+ Error = 'error',
14
+ }
6
15
 
7
16
  @Component({
8
17
  template: `
9
- <ng-container *ngIf="render">
18
+ <ux-block-content *ngIf="moduleStatus === ElementStatus.Loading" [isBlocked]="true">
19
+ <div style="height: 100%"></div>
20
+ </ux-block-content>
21
+ <ng-container *ngIf="moduleStatus === ElementStatus.Loaded">
10
22
  <router-outlet></router-outlet>
11
23
  </ng-container>
24
+ <ng-container *ngIf="moduleStatus === ElementStatus.Error">
25
+ <div class="error-container">
26
+ <div>
27
+ <h1>Translations for this module failed to load.</h1>
28
+ <p>Do you want to try again?</p>
29
+ <ux-button (click)="loadTranslations()">{{ 'global.RELOAD' | translate }}</ux-button>
30
+ </div>
31
+ </div>
32
+ </ng-container>
12
33
  `,
34
+ styles: [`
35
+ .error-container {
36
+ width: 50vw;
37
+ height: 50vh;
38
+ position: absolute;
39
+ top: 50%;
40
+ left: 50%;
41
+ transform: translate(-50%, -50%);
42
+ }
43
+
44
+ .error-container div {
45
+ text-align: center
46
+ }
47
+ `],
13
48
  })
14
49
  export class ModuleComponent implements OnInit {
15
-
16
- @ViewChild(RouterOutlet) outlet: RouterOutlet;
17
- render: boolean;
50
+ ElementStatus = ElementStatus;
51
+ moduleStatus: ElementStatus;
18
52
 
19
53
  constructor(private router: Router,
20
54
  private location: Location,
21
55
  @Inject(CONFIG_TOKEN) public config: any,
22
56
  private i18nService: I18nService) {
23
- const i18nFolders = ['elements/@module.full.name@/bundles/assets/i18n-compiled'];
24
- this.i18nService.addResources({ i18nFolders }, '@module.full.name@');
25
-
26
- this.i18nService.onReady('@module.full.name@')
27
- .subscribe(() => {
28
- this.render = true;
29
- });
30
57
  }
31
58
 
32
59
  public ngOnInit() {
33
60
  this.router.navigateByUrl(this.location.path(true));
61
+ this.loadTranslations();
62
+ }
63
+
64
+ private loadTranslations() {
65
+ this.setStatus(ElementStatus.Loading);
66
+ this.i18nService.lazyLoad({ i18nFolders: appConfig.global.i18nResources })
67
+ .pipe(take(1), retry(1))
68
+ .subscribe((loadStatus: I18nLoadStatus) => {
69
+ if (!loadStatus.success) {
70
+ this.setStatus(ElementStatus.Error);
71
+ console.error(`[ELEMENT: ${appConfig.global.elementName}] `, loadStatus.error);
72
+ } else {
73
+ this.setStatus(ElementStatus.Loaded);
74
+ }
75
+ }, (error) => {
76
+ this.setStatus(ElementStatus.Error);
77
+ console.error(`[ELEMENT: ${appConfig.global.elementName}] `, error);
78
+ });
79
+ }
34
80
 
35
- // This avoids this error https://github.com/angular/angular/issues/29303
36
- // when following this steps:
37
- // - Go to http://localhost:4200/mywp-remote-sample-v7/
38
- // - Click on 'Go to mywp-remote-sample-v7b root'
39
- // - Go back twice through the browser to http://localhost:4200/mywp-remote-sample-v7/main
40
- // - Click on 'Go to child'
41
- // Solution from here:
42
- // - https://stackoverflow.com/questions/55617772/angular-7-multiple-outlets-error-cannot-activate-an-already-activated-outle
43
- // HANDLE WITH CARE, IT MIGHT HAVE UNKNOWN SIDE EFFECTS!
44
- /*this.router.events.subscribe(e => {
45
- if (e instanceof ActivationStart) {
46
- this.outlet.deactivate();
47
- }
48
- });*/
81
+ private setStatus(status: ElementStatus) {
82
+ this.moduleStatus = status;
49
83
  }
50
84
  }
@@ -14,28 +14,27 @@ import { TranslateModule, TranslateService, TranslateStore } from '@ngx-translat
14
14
  // CSDR CORE - Babel defs & core reducers
15
15
  import {
16
16
  CachePreventionInterceptor,
17
+ CONFIG_TOKEN,
17
18
  CorsSecurityInterceptor,
18
19
  CsrfPreventionInterceptor,
19
20
  EuLoginSessionTimeoutHandlingInterceptor,
20
- OpenidConnectInterceptor,
21
- UxService,
22
- CONFIG_TOKEN,
23
- UxDomService,
24
- UserService,
21
+ HttpService,
25
22
  I18nService,
26
- StoreService,
23
+ LocalStorageService,
27
24
  LogService,
28
- UxBreadcrumbsService,
25
+ OpenidConnectInterceptor,
29
26
  OpenIdConnectService,
30
- UxDynamicMessageBoxService,
31
- UxDynamicComponentService,
32
- UxAppShellService,
33
- HttpService,
34
- UxDynamicModalService,
35
- LocalStorageService,
36
27
  StorageService,
28
+ StoreService,
29
+ UserService,
30
+ UxAllModule,
31
+ UxAppShellService,
32
+ UxBreadcrumbsService,
33
+ UxDomService,
34
+ UxErrorFeedbackService,
35
+ UxService,
37
36
  } from '@eui/core';
38
- import { PushNotificationsService } from '@csdr/core';
37
+ import { LanguageInterceptor, PushNotificationsService, BreadcrumbsService } from '@csdr/core';
39
38
  import { TRACE_LOCAL_SERVICE_NAME, ZipkinHttpInterceptor, ZipkinTraceManager } from '@csdr/zipkin-tracing';
40
39
 
41
40
  import { TOKEN, reducerProvider, metaReducers } from './reducers/index';
@@ -43,12 +42,12 @@ import { CustomSerializer } from './reducers/custom-route-serializer';
43
42
 
44
43
  import { environment } from '../environments/environment';
45
44
 
46
- // TODO - implies creation of sub-angular library root package - see task-manager for details
47
- // import { TaskMgrCommonModule } from '@cc/task-manager';
48
- import { ELEMENT_ROUTER_TOKEN, PushNotificationMapping } from '@csdr/integration/elements';
45
+ // import { TaskMgrCommonModule } from '@cc/task-manager'; // TODO import from package
46
+ import { ELEMENT_ROUTER_TOKEN, PushNotificationMapping, UxServiceMapping } from '@csdr/integration';
49
47
  import { RoutingModule } from './routing.module';
50
48
 
51
49
  import { ModuleComponent } from './module.component';
50
+ import { appConfig } from '../config';
52
51
 
53
52
  export function openidConnectInterceptorFactory(config) {
54
53
  return new OpenidConnectInterceptor();
@@ -62,11 +61,11 @@ export function openidConnectInterceptorFactory(config) {
62
61
  StoreRouterConnectingModule.forRoot({ stateKey: 'router', serializer: CustomSerializer }),
63
62
  StoreModule.forRoot(TOKEN, { metaReducers }),
64
63
  EffectsModule.forRoot([]),
65
- StoreDevtoolsModule.instrument({ name: 'TC remote el', maxAge: 150, logOnly: environment.production }),
64
+ StoreDevtoolsModule.instrument({ name: appConfig.global.storeName, maxAge: 150, logOnly: environment.production }),
66
65
  TranslateModule,
67
66
 
68
- // TODO - implies creation of sub-angular library root package - see task-manager for details
69
- // TaskMgrCommonModule,
67
+ UxAllModule,
68
+ // TaskMgrCommonModule, // TODO import from package
70
69
  RoutingModule,
71
70
  ],
72
71
  declarations: [
@@ -77,6 +76,12 @@ export function openidConnectInterceptorFactory(config) {
77
76
  ],
78
77
  providers: [
79
78
  reducerProvider,
79
+ {
80
+ provide: HTTP_INTERCEPTORS,
81
+ useClass: LanguageInterceptor,
82
+ deps: [CONFIG_TOKEN, StorageService],
83
+ multi: true,
84
+ },
80
85
  {
81
86
  provide: HTTP_INTERCEPTORS,
82
87
  useClass: CorsSecurityInterceptor,
@@ -110,8 +115,13 @@ export function openidConnectInterceptorFactory(config) {
110
115
  multi: true,
111
116
  },
112
117
  { provide: CONFIG_TOKEN, useFactory: () => window['PROVIDERS']['CONFIG_TOKEN'], deps: [] },
113
- { provide: UxService, useFactory: () => window['PROVIDERS']['UxService'], deps: [] },
118
+ {
119
+ provide: UxService,
120
+ useFactory: () => new UxServiceMapping(window['PROVIDERS']['ngZone'], window['PROVIDERS']['UxService']),
121
+ deps: [],
122
+ },
114
123
  { provide: UxDomService, useFactory: () => window['PROVIDERS']['UxDomService'], deps: [] },
124
+ { provide: UxErrorFeedbackService, useFactory: () => window['PROVIDERS']['UxErrorFeedbackService'], deps: [] },
115
125
  { provide: LocalStorageService, useFactory: () => window['PROVIDERS']['LocalStorageService'], deps: [] },
116
126
  { provide: StorageService, useFactory: () => window['PROVIDERS']['StorageService'], deps: [] },
117
127
  { provide: LogService, useFactory: () => window['PROVIDERS']['LogService'], deps: [] },
@@ -125,22 +135,12 @@ export function openidConnectInterceptorFactory(config) {
125
135
  { provide: OpenIdConnectService, useFactory: () => window['PROVIDERS']['OpenIdConnectService'], deps: [] },
126
136
  { provide: HttpService, useFactory: () => window['PROVIDERS']['HttpService'], deps: [] },
127
137
  { provide: UxAppShellService, useFactory: () => window['PROVIDERS']['UxAppShellService'], deps: [] },
128
- {
129
- provide: UxDynamicMessageBoxService,
130
- useFactory: () => window['PROVIDERS']['UxDynamicMessageBoxService'],
131
- deps: [],
132
- },
133
- { provide: UxDynamicModalService, useFactory: () => window['PROVIDERS']['UxDynamicModalService'], deps: [] },
134
- {
135
- provide: UxDynamicComponentService,
136
- useFactory: () => window['PROVIDERS']['UxDynamicComponentService'],
137
- deps: [],
138
- },
139
138
  {
140
139
  provide: PushNotificationsService,
141
140
  useFactory: (zone: NgZone) => new PushNotificationMapping(zone, window['PROVIDERS']['PushNotificationsService']),
142
141
  deps: [NgZone],
143
142
  },
143
+ { provide: BreadcrumbsService, useFactory: () => window['PROVIDERS']['BreadcrumbsService'], deps: [] },
144
144
  { provide: ELEMENT_ROUTER_TOKEN, useFactory: () => window['PROVIDERS']['ELEMENT_ROUTER_TOKEN'], deps: [] },
145
145
  { provide: TRACE_LOCAL_SERVICE_NAME, useFactory: () => window['PROVIDERS']['TRACE_LOCAL_SERVICE_NAME'], deps: [] },
146
146
  { provide: ZipkinTraceManager, useFactory: () => window['PROVIDERS']['ZipkinTraceManager'], deps: [] },
@@ -154,7 +154,7 @@ export class AppModule {
154
154
  ngDoBootstrap() {
155
155
  const elementSampleEui = createCustomElement(ModuleComponent, { injector: this.injector });
156
156
  try {
157
- customElements.define('@module.full.name@', elementSampleEui);
157
+ customElements.define(appConfig.global.elementName, elementSampleEui);
158
158
  } catch (e) {
159
159
  console.log(e);
160
160
  }
@@ -1,17 +1,18 @@
1
1
  import { NgModule, NgZone, Inject } from '@angular/core';
2
- import { RouterModule, Routes, Router } from '@angular/router';
2
+ import { RouterModule, Routes, Router, NavigationStart } from '@angular/router';
3
+ import { Subscription } from 'rxjs';
4
+ import { filter, distinctUntilChanged } from 'rxjs/operators';
3
5
 
4
- import { ELEMENT_ROUTER_TOKEN, IRouterService } from '@csdr/integration/elements';
6
+ import { CCRoute, ELEMENT_ROUTER_TOKEN, IRouterService } from '@csdr/integration';
5
7
 
6
- // TODO - get routes from linked root package lib
7
- // import { routes } from '@cc/task-manager';
8
- import { GLOBAL } from '../config/global';
8
+ // import { routes } from '@cc/task-manager'; // TODO import from package
9
+ import { appConfig } from '../config/index';
9
10
  import { ModuleComponent } from './module.component';
10
11
 
11
12
  const prefixedRoutes: Routes = [
12
13
  {
13
- path: GLOBAL.baseUrl,
14
- children: routes, // TODO
14
+ path: appConfig.global.baseUrl,
15
+ // children: routes, // TODO import from package
15
16
  },
16
17
  { path: '**', component: ModuleComponent },
17
18
  ];
@@ -26,15 +27,26 @@ const prefixedRoutes: Routes = [
26
27
  ],
27
28
  })
28
29
  export class RoutingModule {
30
+ private routes: CCRoute[] = prefixedRoutes.map(route => route as CCRoute);
31
+
32
+ private navigationStartSubscription: Subscription;
29
33
 
30
34
  constructor(private router: Router,
31
35
  private ngZone: NgZone,
32
36
  @Inject(ELEMENT_ROUTER_TOKEN) private routerService: IRouterService) {
33
37
 
34
- this.routerService.registerSubRouter(GLOBAL.baseUrl, (url: string) => {
38
+ this.routerService.registerSubRouter(appConfig.global.baseUrl, (url: string) => {
35
39
  this.ngZone.run(() => router.navigateByUrl(url));
36
- });
40
+ }, this.routes);
37
41
 
38
- this.router.events.pipe().subscribe(data => this.routerService.subrouterEvent(GLOBAL.baseUrl, data));
42
+ this.navigationStartSubscription = this.router
43
+ .events
44
+ .pipe(
45
+ filter(event => event instanceof NavigationStart),
46
+ distinctUntilChanged((prev, curr) => prev['url'] === curr['url']),
47
+ )
48
+ .subscribe(data => {
49
+ this.routerService.subrouterEvent(appConfig.global.baseUrl, data);
50
+ });
39
51
  }
40
52
  }
@@ -0,0 +1 @@
1
+ {"core.KEY":"english text","integration.KEY":"english text","cc.bulk.BULK_LIST":"Bulk operations","cc.bulk.FILTER":"Filter","cc.bulk.INITIATED_BY_ME":"Initiated by me","cc.bulk.ITEM_SORTING_BY_START_DATE_ASC":"Start date asc","cc.bulk.ITEM_SORTING_BY_START_DATE_DESC":"Start date desc","cc.bulk.ITEMS_FOUND":"bulk operations found","cc.bulk.LOADED_COMPLETED":"Loading completed","cc.bulk.REFRESH":"Refresh","cc.bulk.REPORT_LIST":"Report list","cc.bulk.SEARCH_RESULT":"Filter results","cc.bulk.SORT_BY":"Sort by:","cc.bulk.TEXT_SEARCH":"Search","cc.bulk.TEXT_SEARCH_PLACEHOLDER":"Search for a bulk operation","cc.bulk.STARTED_ON":"Started on","cc.bulk.BY":"by","cc.bulk.RELATED_TASKS":"Related tasks","cc.bulk.INTERACTIVE_TASKS":"Interactive tasks","cc.bulk-detail.BULK_DETAIL":"Bulk operation detail","cc.bulk-detail.BACK":"Back","cc.bulk-detail.STARTED_ON":"Started on","cc.start-bulk.BULK":"Bulk:start","cc.start-bulk.CANCEL":"Cancel","cc.start-bulk.DESCRIPTION_ERROR":"Mandatory field","cc.start-bulk.DESCRIPTION_LABEL":"Description","cc.start-bulk.DESCRIPTION_TITLE":"Type a description for this bulk process","cc.start-bulk.SAVE":"Start bulk","cc.start-bulk-reassign.BULK":"Bulk:reassign","cc.start-bulk-reassign.CANCEL":"Cancel","cc.start-bulk-reassign.CANDIDATES_ERROR":"Mandatory field","cc.start-bulk-reassign.CANDIDATES_LABEL":"Candidate","cc.start-bulk-reassign.DESCRIPTION_ERROR":"Mandatory field","cc.start-bulk-reassign.DESCRIPTION_LABEL":"Description","cc.start-bulk-reassign.NO_CANDIDATES_AVAILABLE":"No candidates available","cc.start-bulk-reassign.REASSIGN_TITLE":"Reassign","cc.start-bulk-reassign.SAVE":"Start bulk","cc.start-bulk-unclaim.BULK":"Bulk:unclaim","cc.start-bulk-unclaim.CANCEL":"Cancel","cc.start-bulk-unclaim.DESCRIPTION_ERROR":"Mandatory field","cc.start-bulk-unclaim.DESCRIPTION_LABEL":"Description","cc.start-bulk-unclaim.UNCLAIM_TITLE":"Unclaim","cc.start-bulk-unclaim.SAVE":"Start bulk","cc.clock.IS_LOADING":"Loading...","cc.clock.CLOCK_NA":"Clock Not Av.","cc.clock.RETRY":"Retry","cc.clock.HEADER":"Clock","cc.clock.ERROR":"Error","cc.clock.MARKER":"marker","cc.clock.CLOCK_DESC_LABEL":"(elapsed/stopped/remaining)","cc.clock.CLOCK_WITH_NO_DAYS_DESC_LABEL":"This clock has no end date set","cc.clock.CLOCK_WITH_DURATION_TYPE_EMPTY":"There is no duration (blue clock)","cc.clock.HISTORY":"Clock history","cc.clock.DEADLINE":"Deadline","cc.clock.FOR_DAY":"for {{days}} day","cc.clock.FOR_DAYS":"for {{days}} days","cc.clock.DAY_TO_DEADLINE":"{{days}} day to deadline","cc.clock.DAYS_TO_DEADLINE":"{{days}} days to deadline","cc.clock.DAY_OVER_DEADLINE":"{{days}} day over deadline","cc.clock.DAYS_OVER_DEADLINE":"{{days}} days over deadline","cc.clock.START_DATE":"Start date","cc.clock.END_DATE":"End date","cc.clock.MARKER_STATUS":"Status","cc.clock.MARKER_COMMENT":"Comment","cc.clock.MARKER_REASON":"Reason","cc.clock.TARGET_END_DATE":"Target End Date","cc.clock.STATUS.UNKNOWN":"Unknown status","cc.clock.STATUS.RUNNING":"Running","cc.clock.STATUS.PAUSED":"Paused","cc.clock.STATUS.ENDED":"Ended","cc.clock.STATUS.STOPPED":"Stopped","cc.clock.STATUS.SUSPENDED":"Suspended","cc.clock.STATUS.TERMINATED":"Terminated","cc.clock.MARKER_TYPE.SUSPENSION":"Suspension","cc.clock.MARKER_TYPE.END_DATE_TIMER":"End Date","cc.clock.MARKER_TYPE.MILESTONE":"Milestone","cc.clock.MARKER_TYPE.TIMER":"Timer","cc.clock.MARKER_TYPE.UNKNOWN":"Unknown","cc.shared.NO_ACTIONS_FOUND":"No Actions found","cc.shared.CLOSE":"Close","cc.shared.EMPTY":"Empty","cc.shared.MANAGE_FILTERS":"Manage","cc.shared.DELETE":"Delete","cc.shared.DISMISS_ALL":"Dismiss all","cc.shared.FILTER_NAME":"Filter name","cc.shared.FILTER_NAME_ERROR":"A filter with this name already exists","cc.shared.FILTER_NAME_PLACEHOLDER":"Provide unique name","cc.shared.NEW_FILTER":"Save current filter","cc.shared.OVERRIDE_MSG":"Overriding existing filter","cc.shared.SAVE":"Save","cc.shared.SELECT_FILTER":"Select filter","cc.shared.SELECTED_CRITERIA":"Selected criteria","cc.shared.RETRY.RETRY_LABEL":"Retry","cc.shared.SEARCH-ITEM":"Select items","cc.shared.SPINNER.LOADING_LABEL":"Loading...","cc.shared.UNKNOWN_BLOCK.HEADER":"Unknown","taskmgr.TASKS_WITHOUT_CANDIDATES":"Tasks without candidates","taskmgr.FULL_TEXT_SEARCH":"Search","taskmgr.FULL_TEXT_SEARCH_PLACEHOLDER":"Type some text","taskmgr.SEARCH_RESULT":"Filter results","taskmgr.REFRESH_LIST":"Refresh list","taskmgr.BULK_STATUS_WAITING":"The task is waiting for bulk processing","taskmgr.BULK_STATUS_PROCESSING":"The task is currently processing","taskmgr.BULK_STATUS_FAILED":"The bulk processing has failed","taskmgr.TASK_STATE_ACTIVE":"Active","taskmgr.TASK_STATE_ASSIGNED":"Assignee: {{ someone }}","taskmgr.TASK_STATE_COMPLETED":"Completed by {{ someone }} at {{ date }}","taskmgr.URGENT":"Urgent","taskmgr.ACTIONS_NOT_AVAILABLE":"Not Av.","taskmgr.ACTIONS":"Actions","taskmgr.ACTION_REASSIGN":"Reassign","taskmgr.ASSIGN":"Candidate","taskmgr.ASSIGN_TASK":"Assign to","taskmgr.OK":"Ok","taskmgr.ACTION_CLAIM":"Claim","taskmgr.ACTION_UNCLAIM":"Unclaim","taskmgr.ALL":"All","taskmgr.ASSIGNED_BY":"Assigned by","taskmgr.ASSIGNED_TO":"Assigned to","taskmgr.ASSIGNED_TO_CANDIDATES":"{{ value }} candidates...","taskmgr.ASSIGNED_TO_ME":"Me","taskmgr.ASSIGNED_TO_SOMEONE_AND_MANY_MORE":"{{ someone }} and {{ many }} more...","taskmgr.ASSIGNEE":"Assignee","taskmgr.CANDIDATE":"Candidate","taskmgr.CLEAR_SELECTION":"Clear selection","taskmgr.COUNT_TASK_SELECTED":"You have {{ count }} task(s) selected","taskmgr.COUNTERS_UPDATED":"Refresh counters","taskmgr.EMPTY":"Empty","taskmgr.FILTER":"Filter","taskmgr.IS_LOADING":"Loading...","taskmgr.LIST_OF_USERS":"List of users","taskmgr.LOADED_COMPLETED":"Loading completed","taskmgr.ME":"Me","taskmgr.NO_CANDIDATE":"No candidate","taskmgr.ON_BEHALF_OF":"{{ subject }} on behalf of {{ others }}","taskmgr.POPOVER_DEFAULT_TITLE":"Info","taskmgr.REQUIRED":"this field is required","taskmgr.RETRY":"Retry","taskmgr.SNOOZE_CANCEL_BUTTON":"Terminate snooze","taskmgr.SNOOZE_CONFIRM_BUTTON":"Snooze","taskmgr.SNOOZE_DUE_DATE":"Until: ","taskmgr.SNOOZE_DUE_DATE_NOT_IN_THE_FUTURE":"Please choose the date in the future.","taskmgr.SNOOZE_REASON":"Reason: ","taskmgr.SNOOZE_TASK":"Snooze task","taskmgr.SORT_BY":"Sort by:","taskmgr.SUPERVISED_USERS":"Me or any user supervised by me","taskmgr.TASK_CREATE_DATE":"Created on","taskmgr.TASK_DEADLINE":"Deadline","taskmgr.TASK_SORTING_BY_CREATE_DATE_ASC":"Create date asc","taskmgr.TASK_SORTING_BY_CREATE_DATE_DESC":"Create date desc","taskmgr.TASK_STATE":"State","taskmgr.TASK_CENTRE":"Task Centre","taskmgr.TASKS_FOUND":"tasks found","taskmgr.TITLE_TASK_NOT_SNOOZED":"Not snoozed","taskmgr.TITLE_TASK_SNOOZED":"Snoozed","taskmgr.widget.tile.TASKS":"My tasks","taskmgr.SELECT_ALL_LABEL":"Select all {{ count }} listed (out of {{ total }})","taskmgr.widget.taskList.ALL":"All tasks","taskmgr.widget.taskList.CLAIMED_BY_ME":"Claimed by me","taskmgr.widget.taskList.EMPTY":"Empty","taskmgr.widget.taskList.TASKS":"Tasks","taskmgr.widget.taskList.WHERE_I_AM_CANDIDATE":"Assigned to me/team","taxonomy.EMPTY_LABEL":"Empty","taxonomy.FILTER_OPTIONS_LIST_PLACEHOLDER":"Select value","taxonomy.NONE_NODE_SELECTED":"None taxonomy node selected","taxonomy.RESET":"Reset","taxonomy.SEARCH_FILTERS":"Search filters","taxonomy.UX_TREE_COLLAPSE_ALL_LABEL":"Collapse","taxonomy.UX_TREE_EXPAND_ALL_LABEL":"Expand","taxonomy.UX_TREE_FILTER_LABEL":"Select a type"}
@@ -0,0 +1 @@
1
+ {"core.KEY":"texte en français","integration.KEY":"texte en français","cc.bulk.BULK_LIST":"**fr** Bulk operations **fr**","cc.bulk.FILTER":"**fr** Filter **fr**","cc.bulk.INITIATED_BY_ME":"**fr** Initiated by me **fr**","cc.bulk.ITEM_SORTING_BY_START_DATE_ASC":"**fr** Start date asc **fr**","cc.bulk.ITEM_SORTING_BY_START_DATE_DESC":"**fr** Start date desc **fr**","cc.bulk.ITEMS_FOUND":"**fr** bulk operations found **fr**","cc.bulk.LOADED_COMPLETED":"Chargement terminé","cc.bulk.REFRESH":"Rafraîchir","cc.bulk.REPORT_LIST":"**fr** Report list **fr**","cc.bulk.SEARCH_RESULT":"**fr** Filter results **fr**","cc.bulk.SORT_BY":"Trier par : ","cc.bulk.TEXT_SEARCH":"**fr** Search **fr**","cc.bulk.TEXT_SEARCH_PLACEHOLDER":"**fr** Search for a bulk operation **fr**","cc.bulk.STARTED_ON":"**fr** Started on **fr**","cc.bulk.BY":"**fr** by **fr**","cc.bulk.RELATED_TASKS":"**fr** Related tasks **fr**","cc.bulk.INTERACTIVE_TASKS":"**fr** Interactive tasks **fr**","cc.bulk-detail.BULK_DETAIL":"**fr** Bulk operation detail **fr**","cc.bulk-detail.BACK":"**fr** Back **fr**","cc.bulk-detail.STARTED_ON":"**fr** Started on **fr**","cc.start-bulk.BULK":"Bulk:Démarrer un processus de masse","cc.start-bulk.CANCEL":"Annuler","cc.start-bulk.DESCRIPTION_ERROR":"Champ obligatoire","cc.start-bulk.DESCRIPTION_LABEL":"Description","cc.start-bulk.DESCRIPTION_TITLE":"Entrez une description pour ce processus de masse","cc.start-bulk.SAVE":"Démarrer un processus de masse","cc.start-bulk-reassign.BULK":"Bulk:Réassigner","cc.start-bulk-reassign.CANCEL":"Annuler","cc.start-bulk-reassign.CANDIDATES_ERROR":"Champ obligatoire","cc.start-bulk-reassign.CANDIDATES_LABEL":"Candidat","cc.start-bulk-reassign.DESCRIPTION_ERROR":"Champ obligatoire","cc.start-bulk-reassign.DESCRIPTION_LABEL":"Description","cc.start-bulk-reassign.NO_CANDIDATES_AVAILABLE":"Aucun candidat disponible","cc.start-bulk-reassign.REASSIGN_TITLE":"Réassigner","cc.start-bulk-reassign.SAVE":"Démarrer un processus de masse","cc.start-bulk-unclaim.BULK":"Bulk:Annuler la réclamation","cc.start-bulk-unclaim.CANCEL":"Annuler","cc.start-bulk-unclaim.DESCRIPTION_ERROR":"Champ obligatoire","cc.start-bulk-unclaim.DESCRIPTION_LABEL":"Description","cc.start-bulk-unclaim.UNCLAIM_TITLE":"Annuler la réclamation","cc.start-bulk-unclaim.SAVE":"Démarrer un processus de masse","cc.clock.CLOCK_NA":"Clock indisponible","cc.clock.IS_LOADING":"Chargement...","cc.clock.NA":"Indisponible","cc.clock.RETRY":"Réessayer","cc.clock.HEADER":"**fr** Clock **fr**","cc.clock.ERROR":"**fr** Error **fr**","cc.clock.CLOCK_DESC_LABEL":"**fr** (elapsed/stopped/remaining) **fr**","cc.clock.CLOCK_WITH_NO_DAYS_DESC_LABEL":"**fr** This clock has no end date set **fr**","cc.clock.CLOCK_WITH_DURATION_TYPE_EMPTY":"**fr** There is no duration (blue clock) **fr**","cc.clock.TARGET_END_DATE":"**fr** Target End Date **fr**","cc.clock.DAY_TO_DEADLINE":"**fr** {{days}} day to deadline **fr**","cc.clock.DAYS_TO_DEADLINE":"**fr** {{days}} days to deadline **fr**","cc.clock.DAY_OVER_DEADLINE":"**fr** {{days}} day over deadline **fr**","cc.clock.DAYS_OVER_DEADLINE":"**fr** {{days}} days over deadline **fr**","cc.shared.NO_ACTIONS_FOUND":"Aucune action trouvée","cc.shared.CLOSE":"Fermer","cc.shared.EMPTY":"Vide","cc.shared.MANAGE_FILTERS":"Gérer","cc.shared.DELETE":"Supprimer","cc.shared.DISMISS_ALL":"Annuler les filtres","cc.shared.FILTER_NAME":"Nom du filtre","cc.shared.FILTER_NAME_ERROR":"Un filtre existe déjà sous le même nom","cc.shared.FILTER_NAME_PLACEHOLDER":"Entrez un nom unique","cc.shared.NEW_FILTER":"Sauvegarder le filtre en cours","cc.shared.OVERRIDE_MSG":"Remplacer le filtre existant","cc.shared.SAVE":"Sauvegarder","cc.shared.SELECT_FILTER":"Sélectionner un filtre","cc.shared.SELECTED_CRITERIA":"Critères sélectionnés","cc.shared.RETRY.RETRY_LABEL":"Reessayez","cc.shared.SEARCH-ITEM":"Sélectionner des items","cc.shared.SPINNER.LOADING_LABEL":"Chargement...","cc.shared.UNKNOWN_BLOCK.HEADER":"Inconnu","taskmgr.TASKS_WITHOUT_CANDIDATES":"**fr** Tasks without candidates **fr**","taskmgr.FULL_TEXT_SEARCH":"Rechercher","taskmgr.FULL_TEXT_SEARCH_PLACEHOLDER":"Tapez du texte","taskmgr.SEARCH_RESULT":"Résultats du filtre","taskmgr.REFRESH_LIST":"Rafraîchir","taskmgr.BULK_STATUS_WAITING":"La tâche est en attente d'un traîtement de masse","taskmgr.BULK_STATUS_PROCESSING":"La tâche est en cours de traitement","taskmgr.BULK_STATUS_FAILED":"Erreur lors du traitement de masse","taskmgr.TASK_STATE_ACTIVE":"Active","taskmgr.TASK_STATE_ASSIGNED":"Assigné: {{ someone }}","taskmgr.TASK_STATE_COMPLETED":"Complété par {{ someone }} le {{ date }}","taskmgr.URGENT":"Urgent","taskmgr.ACTIONS_NOT_AVAILABLE":"Indisponible","taskmgr.ACTIONS":"Actions","taskmgr.ACTION_REASSIGN":"Réassigner","taskmgr.ASSIGN":"Candidat","taskmgr.ASSIGN_TASK":"Assigner à","taskmgr.OK":"Ok","taskmgr.ACTION_CLAIM":"Réclamer","taskmgr.ACTION_UNCLAIM":"Déclamer","taskmgr.ALL":"Tout","taskmgr.ASSIGNED_BY":"Assignée par","taskmgr.ASSIGNED_TO":"Assignée à","taskmgr.ASSIGNED_TO_CANDIDATES":"{{ value }} candidats...","taskmgr.ASSIGNED_TO_ME":"Moi","taskmgr.ASSIGNED_TO_SOMEONE_AND_MANY_MORE":"{{ someone }} et {{ many }} plus...","taskmgr.ASSIGNEE":"Réclamée par","taskmgr.CANDIDATE":"Candidat","taskmgr.CLEAR_SELECTION":"Effacer la sélection","taskmgr.COUNT_TASK_SELECTED":"Vous avez sélectionné {{ count }} tâche(s)","taskmgr.COUNTERS_UPDATED":"Rafraîchir les compteurs","taskmgr.EMPTY":"Vide","taskmgr.FILTER":"Filtrer","taskmgr.IS_LOADING":"Chargement...","taskmgr.LIST_OF_USERS":"Liste des utilisateurs","taskmgr.LOADED_COMPLETED":"Chargement terminé","taskmgr.ME":"Moi","taskmgr.NO_CANDIDATE":"Pas de candidat","taskmgr.ON_BEHALF_OF":"{{ subject }} au nom de {{ others }}","taskmgr.POPOVER_DEFAULT_TITLE":"Information","taskmgr.REQUIRED":"Ce champ est obligatoire","taskmgr.RETRY":"Réessayer","taskmgr.SNOOZE_CANCEL_BUTTON":"Annuler le report","taskmgr.SNOOZE_CONFIRM_BUTTON":"Reporter","taskmgr.SNOOZE_DUE_DATE":"Jusqu'à : ","taskmgr.SNOOZE_DUE_DATE_NOT_IN_THE_FUTURE":"S'il vous plait choisissez une date à venir.","taskmgr.SNOOZE_REASON":"Raison : ","taskmgr.SNOOZE_TASK":"Reporter une tâche","taskmgr.SORT_BY":"Trier par : ","taskmgr.SUPERVISED_USERS":"Moi or any user supervised by moi","taskmgr.TASK_CREATE_DATE":"Date de création","taskmgr.TASK_DEADLINE":"Date limite","taskmgr.TASK_SORTING_BY_CREATE_DATE_ASC":"Date de création asc.","taskmgr.TASK_SORTING_BY_CREATE_DATE_DESC":"Date de création desc.","taskmgr.TASK_STATE":"Etat","taskmgr.TASK_CENTRE":"Task Centre","taskmgr.TASKS_FOUND":"Tâches trouvées","taskmgr.TITLE_TASK_NOT_SNOOZED":"Non répetée","taskmgr.TITLE_TASK_SNOOZED":"Répetée","taskmgr.widget.tile.TASKS":"Mes tâches","taskmgr.SELECT_ALL_LABEL":"Sélectionnez tous les {{ count }} répertoriés (sur {{ total }})","taskmgr.widget.taskList.ALL":"Tous les tâches","taskmgr.widget.taskList.CLAIMED_BY_ME":"Mes tâches","taskmgr.widget.taskList.EMPTY":"Vide","taskmgr.widget.taskList.TASKS":"Tâches","taskmgr.widget.taskList.WHERE_I_AM_CANDIDATE":"Assignées à moi/groupe","taxonomy.EMPTY_LABEL":"Vide","taxonomy.FILTER_OPTIONS_LIST_PLACEHOLDER":"Sélectionnez une valeur","taxonomy.NONE_NODE_SELECTED":"Aucun noeud sélectionné","taxonomy.RESET":"Réinitialiser","taxonomy.SEARCH_FILTERS":"Filtres de recherche","taxonomy.UX_TREE_COLLAPSE_ALL_LABEL":"Masquer","taxonomy.UX_TREE_EXPAND_ALL_LABEL":"Afficher","taxonomy.UX_TREE_FILTER_LABEL":"Sélectionner un type"}