@provoly/dashboard 1.3.7 → 1.3.9

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 (201) hide show
  1. package/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.d.ts +5 -2
  2. package/admin/components/admin-fields/admin-fields-form/admin-fields-form.component.d.ts +47 -18
  3. package/admin/components/admin-fields/admin-fields-select/admin-fields-select.component.d.ts +6 -2
  4. package/admin/components/admin-fields/admin-fields.component.d.ts +4 -1
  5. package/admin/components/admin-fields/store/admin-fields.model.d.ts +1 -1
  6. package/admin/components/admin-fields/store/fields.actions.d.ts +19 -12
  7. package/admin/components/admin-fields/store/fields.effects.d.ts +16 -3
  8. package/admin/i18n/en.translations.d.ts +33 -14
  9. package/admin/i18n/fr.translations.d.ts +33 -14
  10. package/components/checkbox/checkbox.component.d.ts +4 -2
  11. package/components/data-format/data-format.pipe.d.ts +11 -1
  12. package/components/paginator/index.d.ts +5 -0
  13. package/components/paginator/paginator.component.d.ts +19 -0
  14. package/components/paginator/paginator.module.d.ts +10 -0
  15. package/components/paginator/public-api.d.ts +3 -0
  16. package/components/paginator/style/_o-pry-paginator.scss +11 -0
  17. package/components/paginator/style/css.component.d.ts +5 -0
  18. package/dataset/components/dataset-detail/dataset-detail.component.d.ts +5 -8
  19. package/dataset/dataset.module.d.ts +1 -1
  20. package/dataset/i18n/en.translations.d.ts +0 -12
  21. package/dataset/i18n/fr.translations.d.ts +0 -12
  22. package/esm2022/admin/components/admin-abac-rules/components/attribute-condition/attribute-condition.component.mjs +4 -6
  23. package/esm2022/admin/components/admin-classes/admin-classes-customize/symbol/admin-classes-customize-symbol.component.mjs +1 -1
  24. package/esm2022/admin/components/admin-classes/admin-classes-customize/tooltip/admin-classes-customize-tooltip.component.mjs +1 -1
  25. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.mjs +10 -12
  26. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-classes-view.component.mjs +6 -5
  27. package/esm2022/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.mjs +2 -2
  28. package/esm2022/admin/components/admin-fields/admin-fields-form/admin-fields-form.component.mjs +142 -63
  29. package/esm2022/admin/components/admin-fields/admin-fields-select/admin-fields-select.component.mjs +7 -8
  30. package/esm2022/admin/components/admin-fields/admin-fields.component.mjs +15 -11
  31. package/esm2022/admin/components/admin-fields/store/admin-fields.model.mjs +1 -1
  32. package/esm2022/admin/components/admin-fields/store/fields.actions.mjs +6 -5
  33. package/esm2022/admin/components/admin-fields/store/fields.effects.mjs +12 -6
  34. package/esm2022/admin/i18n/en.translations.mjs +34 -15
  35. package/esm2022/admin/i18n/fr.translations.mjs +34 -15
  36. package/esm2022/components/checkbox/checkbox.component.mjs +15 -7
  37. package/esm2022/components/data-format/data-format.pipe.mjs +88 -7
  38. package/esm2022/components/paginator/paginator.component.mjs +51 -0
  39. package/esm2022/components/paginator/paginator.module.mjs +20 -0
  40. package/esm2022/components/paginator/provoly-dashboard-components-paginator.mjs +5 -0
  41. package/esm2022/components/paginator/public-api.mjs +4 -0
  42. package/esm2022/components/paginator/style/css.component.mjs +11 -0
  43. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +16 -26
  44. package/esm2022/dataset/dataset.module.mjs +2 -5
  45. package/esm2022/dataset/i18n/en.translations.mjs +1 -13
  46. package/esm2022/dataset/i18n/fr.translations.mjs +2 -14
  47. package/esm2022/import/components/form/import-form.component.mjs +174 -0
  48. package/esm2022/import/components/list/import-list.component.mjs +73 -0
  49. package/esm2022/import/components/version-modal/version-modal.component.mjs +26 -0
  50. package/esm2022/import/i18n/en.translations.mjs +16 -2
  51. package/esm2022/import/i18n/fr.translations.mjs +16 -2
  52. package/esm2022/import/import-routing.module.mjs +3 -3
  53. package/esm2022/import/import.module.mjs +25 -10
  54. package/esm2022/import/public-api.mjs +4 -2
  55. package/esm2022/import/style/css.component.mjs +2 -2
  56. package/esm2022/lib/core/components/select/select.component.mjs +3 -3
  57. package/esm2022/lib/core/components/share/legacy-share/share.component.mjs +8 -8
  58. package/esm2022/lib/core/components/status-modal/status-modal.component.mjs +48 -0
  59. package/esm2022/lib/core/components/{modal-status/modal-status.module.mjs → status-modal/status-modal.module.mjs} +9 -9
  60. package/esm2022/lib/core/core.module.mjs +5 -5
  61. package/esm2022/lib/core/i18n/en.translations.mjs +39 -6
  62. package/esm2022/lib/core/i18n/fr.translations.mjs +41 -6
  63. package/esm2022/lib/core/model/admin-api.model.mjs +5 -69
  64. package/esm2022/lib/core/model/widget-analytic-manifest.interface.mjs +1 -1
  65. package/esm2022/lib/core/model/widget-table-manifest.interface.mjs +1 -1
  66. package/esm2022/lib/core/public-api.mjs +3 -3
  67. package/esm2022/lib/core/store/class/class.interface.mjs +1 -1
  68. package/esm2022/lib/core/store/class/class.selectors.mjs +2 -2
  69. package/esm2022/lib/core/store/data-source/data-source.actions.mjs +3 -3
  70. package/esm2022/lib/core/store/data-source/data-source.effects.mjs +7 -4
  71. package/esm2022/lib/core/store/data-source/data-source.model.mjs +1 -1
  72. package/esm2022/lib/core/store/data-source/data-source.reducer.mjs +5 -3
  73. package/esm2022/lib/core/store/data-source/data-source.selectors.mjs +3 -11
  74. package/esm2022/lib/core/store/data-source/data-source.service.mjs +23 -5
  75. package/esm2022/lib/core/store/field/field.interface.mjs +1 -3
  76. package/esm2022/lib/core/store/field/field.service.mjs +7 -2
  77. package/esm2022/lib/dashboard/components/context-menu/object-edition/object-edition.component.mjs +3 -3
  78. package/esm2022/lib/dashboard/components/widgets/datasource-selector/datasource-card/datasource-card.component.mjs +3 -11
  79. package/esm2022/lib/dashboard/components/widgets/datasource-selector/datasource-list/datasource-list.component.mjs +2 -2
  80. package/esm2022/lib/dashboard/item-utils.mjs +5 -5
  81. package/esm2022/lib/dashboard/store/dashboard.actions.mjs +1 -4
  82. package/esm2022/lib/dashboard/store/dashboard.effects.mjs +1 -19
  83. package/esm2022/lib/dashboard/store/dashboard.reducers.mjs +1 -26
  84. package/esm2022/lib/dashboard/tooltip/components/default/default.tooltip.component.mjs +3 -3
  85. package/esm2022/lib/dashboard/tooltip/tooltip-factory.service.mjs +3 -2
  86. package/esm2022/search/search-mono-class/components/search-condition/search-condition.component.mjs +4 -4
  87. package/esm2022/search/search-mono-class/components/search-order/search-order.component.mjs +3 -3
  88. package/esm2022/search/search-mono-class/components/search-select-attribute/search-select-attribute.component.mjs +4 -5
  89. package/esm2022/search/search-mono-class/store/search-mono-class.effects.mjs +2 -2
  90. package/esm2022/search/search-mono-class/store/search-mono-class.service.mjs +5 -6
  91. package/esm2022/search/search-multi-class/store/search-multi-class.service.mjs +4 -4
  92. package/esm2022/toolbox/components/filter-settings/filter-settings.component.mjs +3 -3
  93. package/esm2022/toolbox/components/save-view/save-view.component.mjs +3 -3
  94. package/esm2022/tooltips/attribute/attribute-tooltip.component.mjs +17 -19
  95. package/esm2022/tooltips/attribute/attribute-tooltip.module.mjs +5 -4
  96. package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +54 -37
  97. package/esm2022/widgets/widget-analytic/component/widget-analytic.component.mjs +4 -16
  98. package/esm2022/widgets/widget-chart/component/widget-chart.component.mjs +9 -9
  99. package/esm2022/widgets/widget-detail/component/widget-detail.component.mjs +5 -5
  100. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +30 -32
  101. package/esm2022/widgets/widget-map/pipe/widget-map-geometry-fields-for.pipe.mjs +2 -5
  102. package/esm2022/widgets/widget-map/utils/cql-utils.class.mjs +2 -2
  103. package/esm2022/widgets/widget-map/utils/widget-map.utils.mjs +6 -10
  104. package/esm2022/widgets/widget-table/component/widget-table.component.mjs +18 -14
  105. package/esm2022/widgets/widget-table/expand-value/expand-value.component.mjs +9 -5
  106. package/esm2022/widgets/widget-table/get-value/get-value.pipe.mjs +2 -2
  107. package/esm2022/widgets/widget-table/public-api.mjs +1 -2
  108. package/esm2022/widgets/widget-table/widget-table.module.mjs +12 -7
  109. package/esm2022/widgets/widget-tile/component/widget-tile.component.mjs +10 -15
  110. package/esm2022/widgets/widget-tile/widget-tile.module.mjs +8 -4
  111. package/esm2022/widgets/widget-vega/component/widget-vega.component.mjs +2 -2
  112. package/fesm2022/provoly-dashboard-admin.mjs +249 -126
  113. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  114. package/fesm2022/provoly-dashboard-components-checkbox.mjs +14 -6
  115. package/fesm2022/provoly-dashboard-components-checkbox.mjs.map +1 -1
  116. package/fesm2022/provoly-dashboard-components-data-format.mjs +88 -7
  117. package/fesm2022/provoly-dashboard-components-data-format.mjs.map +1 -1
  118. package/fesm2022/provoly-dashboard-components-paginator.mjs +82 -0
  119. package/fesm2022/provoly-dashboard-components-paginator.mjs.map +1 -0
  120. package/fesm2022/provoly-dashboard-dataset.mjs +21 -58
  121. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  122. package/fesm2022/provoly-dashboard-import.mjs +249 -116
  123. package/fesm2022/provoly-dashboard-import.mjs.map +1 -1
  124. package/fesm2022/provoly-dashboard-search.mjs +15 -16
  125. package/fesm2022/provoly-dashboard-search.mjs.map +1 -1
  126. package/fesm2022/provoly-dashboard-toolbox.mjs +4 -4
  127. package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
  128. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs +20 -21
  129. package/fesm2022/provoly-dashboard-tooltips-attribute.mjs.map +1 -1
  130. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +53 -36
  131. package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
  132. package/fesm2022/provoly-dashboard-widgets-widget-analytic.mjs +3 -15
  133. package/fesm2022/provoly-dashboard-widgets-widget-analytic.mjs.map +1 -1
  134. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs +9 -9
  135. package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs.map +1 -1
  136. package/fesm2022/provoly-dashboard-widgets-widget-detail.mjs +4 -4
  137. package/fesm2022/provoly-dashboard-widgets-widget-detail.mjs.map +1 -1
  138. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +36 -45
  139. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  140. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs +32 -38
  141. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -1
  142. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs +16 -17
  143. package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs.map +1 -1
  144. package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs +1 -1
  145. package/fesm2022/provoly-dashboard-widgets-widget-vega.mjs.map +1 -1
  146. package/fesm2022/provoly-dashboard.mjs +286 -338
  147. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  148. package/import/components/{import.component.d.ts → form/import-form.component.d.ts} +8 -4
  149. package/import/components/list/import-list.component.d.ts +34 -0
  150. package/import/components/version-modal/version-modal.component.d.ts +13 -0
  151. package/import/i18n/en.translations.d.ts +14 -0
  152. package/import/i18n/fr.translations.d.ts +14 -0
  153. package/import/import.module.d.ts +13 -10
  154. package/import/public-api.d.ts +3 -1
  155. package/import/style/_o-import.scss +50 -6
  156. package/lib/core/components/share/legacy-share/share.component.d.ts +1 -1
  157. package/lib/core/components/{modal-status/modal-status.component.d.ts → status-modal/status-modal.component.d.ts} +10 -6
  158. package/lib/core/components/{modal-status/modal-status.module.d.ts → status-modal/status-modal.module.d.ts} +5 -5
  159. package/lib/core/core.module.d.ts +2 -2
  160. package/lib/core/i18n/en.translations.d.ts +33 -0
  161. package/lib/core/i18n/fr.translations.d.ts +35 -0
  162. package/lib/core/model/admin-api.model.d.ts +6 -8
  163. package/lib/core/model/widget-analytic-manifest.interface.d.ts +0 -3
  164. package/lib/core/model/widget-table-manifest.interface.d.ts +2 -0
  165. package/lib/core/public-api.d.ts +2 -2
  166. package/lib/core/store/class/class.interface.d.ts +2 -1
  167. package/lib/core/store/class/class.selectors.d.ts +10 -10
  168. package/lib/core/store/data-source/data-source.actions.d.ts +21 -1
  169. package/lib/core/store/data-source/data-source.effects.d.ts +11 -1
  170. package/lib/core/store/data-source/data-source.model.d.ts +3 -2
  171. package/lib/core/store/data-source/data-source.reducer.d.ts +1 -0
  172. package/lib/core/store/data-source/data-source.selectors.d.ts +3 -3
  173. package/lib/core/store/data-source/data-source.service.d.ts +11 -2
  174. package/lib/core/store/field/field.interface.d.ts +8 -4
  175. package/lib/core/store/field/field.service.d.ts +1 -0
  176. package/lib/dashboard/components/context-menu/object-edition/object-edition.component.d.ts +1 -1
  177. package/lib/dashboard/components/widgets/datasource-selector/datasource-card/datasource-card.component.d.ts +3 -7
  178. package/lib/dashboard/item-utils.d.ts +1 -1
  179. package/lib/dashboard/store/dashboard.actions.d.ts +0 -11
  180. package/lib/dashboard/store/dashboard.effects.d.ts +0 -3
  181. package/lib/dashboard/tooltip/tooltip-factory.service.d.ts +2 -1
  182. package/package.json +18 -12
  183. package/styles/base/_utils.scss +9 -1
  184. package/styles/components/_a-btn.scss +7 -0
  185. package/styles/components/_a-table.scss +2 -16
  186. package/styles/layout/_o-workspace.scss +1 -0
  187. package/tooltips/attribute/attribute-tooltip.component.d.ts +6 -6
  188. package/tooltips/attribute/attribute-tooltip.module.d.ts +2 -1
  189. package/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.d.ts +16 -3
  190. package/widgets/widget-analytic/component/widget-analytic.component.d.ts +2 -3
  191. package/widgets/widget-detail/component/widget-detail.component.d.ts +1 -4
  192. package/widgets/widget-table/component/widget-table.component.d.ts +1 -0
  193. package/widgets/widget-table/expand-value/expand-value.component.d.ts +4 -2
  194. package/widgets/widget-table/public-api.d.ts +0 -1
  195. package/widgets/widget-table/widget-table.module.d.ts +9 -8
  196. package/widgets/widget-tile/component/widget-tile.component.d.ts +1 -0
  197. package/widgets/widget-tile/widget-tile.module.d.ts +2 -1
  198. package/esm2022/import/components/import.component.mjs +0 -167
  199. package/esm2022/lib/core/components/modal-status/modal-status.component.mjs +0 -45
  200. package/esm2022/widgets/widget-table/expand-value/format-number.pipe.mjs +0 -24
  201. package/widgets/widget-table/expand-value/format-number.pipe.d.ts +0 -10
@@ -1,25 +1,131 @@
1
- import * as i7 from '@angular/common';
1
+ import * as i6 from '@angular/common';
2
2
  import { CommonModule, DatePipe } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
- import { Component, ViewEncapsulation, ViewChild, NgModule, Injectable } from '@angular/core';
4
+ import { Component, ViewEncapsulation, EventEmitter, ViewChild, Output, NgModule, Injectable, Inject, input } from '@angular/core';
5
5
  import * as i3 from '@angular/forms';
6
6
  import { FormGroup, FormControl, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
7
- import * as i1$2 from '@ngrx/effects';
7
+ import * as i1$3 from '@ngrx/effects';
8
8
  import { createEffect, ofType, EffectsModule } from '@ngrx/effects';
9
- import * as i2 from '@ngrx/store';
9
+ import * as i1 from '@ngrx/store';
10
10
  import { createAction, props, createReducer, on, createFeatureSelector, createSelector, StoreModule } from '@ngrx/store';
11
- import * as i2$1 from '@provoly/dashboard';
12
- import { SubscriptionnerDirective, DateUtils, PryDatasetType, DataSourceActions, DataSourceSelectors, PRY_ACCESS_GUARD, ConfigSelectors, PryCoreModule, PrySelectModule, PryI18nModule, PryIconModule } from '@provoly/dashboard';
11
+ import * as i2 from '@provoly/dashboard';
12
+ import { SubscriptionnerDirective, DateUtils, PryDatasetType, DataSourceActions, DataSourceSelectors, PRY_ACCESS_GUARD, ConfigSelectors, PRY_DIALOG_DATA, PryStatusModalComponent, PryCoreModule, PrySelectModule, PryI18nModule, PryIconModule, PryDatePickerModule, PrySinceDateModule, PrySortModule } from '@provoly/dashboard';
13
+ import * as i1$1 from '@angular/router';
14
+ import { RouterModule } from '@angular/router';
13
15
  import { map, take, mergeMap } from 'rxjs';
14
- import { withLatestFrom, mergeMap as mergeMap$1, map as map$1, catchError } from 'rxjs/operators';
15
16
  import * as i4 from '@provoly/dashboard/components/checkbox';
16
17
  import { PryCheckboxModule } from '@provoly/dashboard/components/checkbox';
17
18
  import * as i5 from '@provoly/dashboard/components/text-editor';
18
19
  import { PryTextEditorModule } from '@provoly/dashboard/components/text-editor';
19
- import * as i1 from '@angular/router';
20
- import { RouterModule } from '@angular/router';
21
- import * as i1$1 from '@angular/common/http';
20
+ import { mergeMap as mergeMap$1, map as map$1, catchError } from 'rxjs/operators';
21
+ import * as i1$2 from '@angular/common/http';
22
22
  import { HttpHeaders } from '@angular/common/http';
23
+ import { GlobalPositionStrategy } from '@angular/cdk/overlay';
24
+ import * as i4$1 from '@provoly/dashboard/components/paginator';
25
+ import { PryPaginatorModule } from '@provoly/dashboard/components/paginator';
26
+
27
+ const enTranslations = {
28
+ '@pry': {
29
+ importList: {
30
+ title: 'List of imported data',
31
+ filter: {
32
+ dsName: 'Name',
33
+ status: 'Import status',
34
+ date: 'Import date'
35
+ },
36
+ dsName: 'Name',
37
+ date: 'Date of creation',
38
+ number: 'Version number',
39
+ status: 'Version status',
40
+ actions: 'Actions'
41
+ },
42
+ import: {
43
+ title: 'Import data',
44
+ datasetImport: 'Import in :',
45
+ import: 'Import',
46
+ errorTitle: 'Import failed',
47
+ successTitle: 'Import successful',
48
+ uploadTitlezip: 'Choose a .zip file',
49
+ uploadTitlecsv: 'Choose a .csv file',
50
+ warning: 'File must be under 2GB, or must be imported via directly via APIs.',
51
+ tooLarge: 'File is too large ({{current}} > 2GB), please use APIs to import this file.',
52
+ selectFile: 'Select file',
53
+ importedLines: 'imported lines',
54
+ consultDataset1: 'The import is in progress, see the ',
55
+ consultDataset2: ' dataset page to check its condition',
56
+ errors: 'errors',
57
+ error: 'Error on import: {{msg}}',
58
+ errorCode: {
59
+ 409: 'Import already in progress, please try again later.'
60
+ },
61
+ line: 'Line {{line}}: ',
62
+ withoutLine: 'Global errors: ',
63
+ dataset: 'Dataset',
64
+ fileType: 'Select file type',
65
+ code: {
66
+ UNRECOGNIZED: 'Provided file contains a column "{{name}}", which is not present in the chosen dataset',
67
+ FILE_MANDATORY: 'No file was provided',
68
+ NO_ATTRIBUTES: 'No corresponding attribute found in uploaded file',
69
+ FORMAT: '"{{name}}": "{{receivedValue}}" could not be converted to type "{{type}}"',
70
+ STORAGE: 'Storage stack trace error: {{elasticError}}'
71
+ },
72
+ normalize: 'Standardize geographic shapes',
73
+ multiple: 'Upload multiple files'
74
+ }
75
+ }
76
+ };
77
+
78
+ const frTranslations = {
79
+ '@pry': {
80
+ importList: {
81
+ title: 'Liste des données intégrées',
82
+ filter: {
83
+ dsName: 'Nom',
84
+ status: 'Status import',
85
+ date: 'Date import'
86
+ },
87
+ dsName: 'Nom',
88
+ date: 'Date de création de la version',
89
+ number: 'N° Version',
90
+ status: 'Status de version',
91
+ actions: 'Actions'
92
+ },
93
+ import: {
94
+ title: 'Import de données',
95
+ datasetImport: 'Importer dans un jeu de données:',
96
+ import: 'Importer',
97
+ errorTitle: "L'import a échoué",
98
+ successTitle: 'Import de données réussi',
99
+ uploadTitlezip: 'Choisir un fichier .zip',
100
+ uploadTitlecsv: 'Choisir un fichier .csv',
101
+ warning: 'Attention, le fichier ne doit pas dépasser 2GB pour être intégrer via cet écran. Le cas échéant, votre fichier devra être importé via les API',
102
+ tooLarge: 'Fichier trop volumineux ({{current}} > 2GB), veuillez utiliser les API pour importer ces données',
103
+ selectFile: 'Sélectionner un fichier',
104
+ importedLines: 'lignes importée(s)',
105
+ consultDataset1: "L'import est en cours, consultez la page du jeu de données ",
106
+ consultDataset2: ' pour vérifier son état',
107
+ shapefileState: ' pour vérifier son état',
108
+ error: "Erreur lors de l'import: {{msg}}",
109
+ errors: 'erreur(s)',
110
+ errorCode: {
111
+ 409: 'Import déjà en cours, veuillez réessayer plus tard.'
112
+ },
113
+ line: 'Ligne {{line}}: ',
114
+ withoutLine: 'Erreurs globales: ',
115
+ dataset: 'Jeu de données',
116
+ fileType: 'Sélectionner un type de fichier',
117
+ code: {
118
+ UNRECOGNIZED: "Le fichier fourni contient une colonne «\u00A0{{name}}\u00A0», qui n'est pas présente dans le jeu de données choisi",
119
+ FILE_MANDATORY: 'Aucun fichier fourni',
120
+ NO_ATTRIBUTES: "Aucun attribut correspondant n'a été trouvé dans le fichier fourni",
121
+ FORMAT: "«\u00A0{{name}}\u00A0»: «\u00A0{{receivedValue}}\u00A0» n'a pas pu être convertie en type «\u00A0{{type}}\u00A0»",
122
+ STORAGE: 'Storage stack trace error: {{elasticError}}'
123
+ },
124
+ normalize: 'Normaliser les formes géographiques',
125
+ multiple: 'Import multiple'
126
+ }
127
+ }
128
+ };
23
129
 
24
130
  const ImportActions = {
25
131
  upload: createAction('[Import] import data', props()),
@@ -50,14 +156,14 @@ const ImportSelectors = {
50
156
 
51
157
  class PryImportCssComponent {
52
158
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryImportCssComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
53
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: PryImportCssComponent, selector: "pry-import-css", ngImport: i0, template: '', isInline: true, styles: [".o-import{display:flex;flex-direction:column;overflow:scroll;height:100%;padding:.9375rem 1.5625rem}.o-import .u-display-flex{gap:4.6875rem}.o-import__form{max-width:50%}.o-import .o-file-input{min-height:4.6875rem}.o-import__file{text-align:center}.o-import__actions{margin-top:3.125rem}.o-import__message{padding:.9375rem;background-color:#ecedf4;border-radius:.625rem;overflow-y:auto;height:fit-content}.o-import .a-pry-select__content{flex:1}\n"], encapsulation: i0.ViewEncapsulation.None }); }
159
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.3", type: PryImportCssComponent, selector: "pry-import-css", ngImport: i0, template: '', isInline: true, styles: [".m-version-modal__list{margin:0;padding:0}.m-version-modal__list li{list-style:none}.o-import{overflow:scroll;height:100%;padding:.9375rem 1.5625rem}.o-import__header,.o-import__form-container{width:50%}.o-import .u-display-flex{gap:4.6875rem}.o-import .o-file-input{min-height:4.6875rem}.o-import__file{text-align:center}.o-import__actions{margin-top:3.125rem}.o-import__message{padding:.9375rem;background-color:#ecedf4;border-radius:.625rem;overflow-y:auto;height:fit-content}.o-import .a-pry-select__content{flex:1}.o-import-list{height:100%}.o-import-list .a-h1{padding:0}.o-import-list .warning{color:#fc5640}.o-import-list .m-filter__input-wrapper{height:2.5rem}.o-import-list .m-filter__date-input-separator{line-height:0}.o-import-list .a-table tbody td.-cell-with-icon{margin:0;padding:1.25rem;height:100%}.o-import-list__content{overflow:auto}.m-version-modal{background-color:#fff;max-width:23.75rem;max-height:37.5rem;padding:0 1.25rem 1.25rem .625rem;box-shadow:0 4px 4px #00000040}.m-version-modal__list{overflow:auto}\n"], encapsulation: i0.ViewEncapsulation.None }); }
54
160
  }
55
161
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryImportCssComponent, decorators: [{
56
162
  type: Component,
57
- args: [{ selector: 'pry-import-css', template: '', encapsulation: ViewEncapsulation.None, styles: [".o-import{display:flex;flex-direction:column;overflow:scroll;height:100%;padding:.9375rem 1.5625rem}.o-import .u-display-flex{gap:4.6875rem}.o-import__form{max-width:50%}.o-import .o-file-input{min-height:4.6875rem}.o-import__file{text-align:center}.o-import__actions{margin-top:3.125rem}.o-import__message{padding:.9375rem;background-color:#ecedf4;border-radius:.625rem;overflow-y:auto;height:fit-content}.o-import .a-pry-select__content{flex:1}\n"] }]
163
+ args: [{ selector: 'pry-import-css', template: '', encapsulation: ViewEncapsulation.None, styles: [".m-version-modal__list{margin:0;padding:0}.m-version-modal__list li{list-style:none}.o-import{overflow:scroll;height:100%;padding:.9375rem 1.5625rem}.o-import__header,.o-import__form-container{width:50%}.o-import .u-display-flex{gap:4.6875rem}.o-import .o-file-input{min-height:4.6875rem}.o-import__file{text-align:center}.o-import__actions{margin-top:3.125rem}.o-import__message{padding:.9375rem;background-color:#ecedf4;border-radius:.625rem;overflow-y:auto;height:fit-content}.o-import .a-pry-select__content{flex:1}.o-import-list{height:100%}.o-import-list .a-h1{padding:0}.o-import-list .warning{color:#fc5640}.o-import-list .m-filter__input-wrapper{height:2.5rem}.o-import-list .m-filter__date-input-separator{line-height:0}.o-import-list .a-table tbody td.-cell-with-icon{margin:0;padding:1.25rem;height:100%}.o-import-list__content{overflow:auto}.m-version-modal{background-color:#fff;max-width:23.75rem;max-height:37.5rem;padding:0 1.25rem 1.25rem .625rem;box-shadow:0 4px 4px #00000040}.m-version-modal__list{overflow:auto}\n"] }]
58
164
  }] });
59
165
 
60
- class PryImportComponent extends SubscriptionnerDirective {
166
+ class PryImportFormComponent extends SubscriptionnerDirective {
61
167
  constructor(store, dsService, snackbar, i18nService) {
62
168
  super();
63
169
  this.store = store;
@@ -96,23 +202,22 @@ class PryImportComponent extends SubscriptionnerDirective {
96
202
  extension: '.zip'
97
203
  }
98
204
  };
205
+ this.multipleImports = false;
206
+ this.multipleImportsValue = new EventEmitter();
207
+ this.formSubmitted = new EventEmitter();
99
208
  this.Object = Object;
100
209
  this.PryDatasetType = PryDatasetType;
101
210
  store.dispatch(DataSourceActions.dataset.loadDataset());
102
- this.store.dispatch(DataSourceActions.dataset.listVersions());
211
+ this.store.dispatch(DataSourceActions.dataset.listVersions({}));
103
212
  this.datasets$ = store
104
213
  .select(DataSourceSelectors.datasets)
105
214
  .pipe(map((datasets) => datasets
106
215
  .filter((dataset) => dataset.type === PryDatasetType.CLOSED)
107
216
  .sort((a, b) => (a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1))));
108
217
  this.loading$ = store.select(ImportSelectors.loading);
109
- this.subscriptions.add(this.form
110
- .get('dataset')
111
- ?.valueChanges.pipe(withLatestFrom(this.store.select(DataSourceSelectors.datasetVersions)))
112
- .subscribe(([dataset, versions]) => {
218
+ this.subscriptions.add(this.form.get('dataset')?.valueChanges.subscribe((dataset) => {
113
219
  this.clearMessage();
114
- if (dataset &&
115
- versions.some((version) => version.dataset === dataset.id && (version.state === 'ACTIVE' || version.state === 'INDEXING'))) {
220
+ if (dataset && dataset.activeVersion) {
116
221
  this.getLastActiveVersion(dataset);
117
222
  }
118
223
  else {
@@ -171,6 +276,7 @@ class PryImportComponent extends SubscriptionnerDirective {
171
276
  this.showMessage = true;
172
277
  setTimeout(() => this.message.nativeElement.scrollIntoView({ behavior: 'smooth' }));
173
278
  this.form.patchValue({ file: null });
279
+ this.formSubmitted.emit();
174
280
  }
175
281
  }
176
282
  getFileSize(size) {
@@ -198,96 +304,29 @@ class PryImportComponent extends SubscriptionnerDirective {
198
304
  if (this.showMessage)
199
305
  this.showMessage = false;
200
306
  }
201
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryImportComponent, deps: [{ token: i2.Store }, { token: i2$1.DataSourceService }, { token: i2$1.PrySnackbarService }, { token: i2$1.PryI18nService }], target: i0.ɵɵFactoryTarget.Component }); }
202
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: PryImportComponent, selector: "pry-import", viewQueries: [{ propertyName: "message", first: true, predicate: ["message"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<pry-import-css></pry-import-css>\n<div class=\"o-import\">\n <h1 class=\"a-h1\">{{ '@pry.import.title' | i18n }}</h1>\n <div class=\"u-display-flex\">\n <form class=\"o-import__form\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\" for=\"datasets\">{{ '@pry.import.fileType' | i18n }}</label>\n <pry-select\n formControlName=\"fileType\"\n id=\"fileType\"\n [items]=\"Object.values(fileTypes)\"\n bindValue=\"value\"\n bindLabel=\"label\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\" for=\"upload_input\">\n {{ '@pry.import.uploadTitle' + fileType.value | i18n }}\n </label>\n <p>{{ '@pry.import.warning' | i18n }}</p>\n <div class=\"o-file-input\">\n @if (file.value?.size) {\n <div class=\"o-import__file\">\n <pry-icon iconSvg=\"download\"></pry-icon>\n <h3>{{ file.value?.name }}</h3>\n <span>{{ getFileSize(file.value?.size ?? 0) }}</span>\n </div>\n }\n <pry-upload\n id=\"upload_input\"\n [accept]=\"fileTypes[fileType.value].extension\"\n mode=\"files\"\n (uploadedFile)=\"uploadedChange($event)\"\n labelTranslate=\"@pry.import.selectFile\"\n ></pry-upload>\n </div>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\" for=\"datasets\">{{ '@pry.import.datasetImport' | i18n }}</label>\n <pry-select\n formControlName=\"dataset\"\n id=\"datasets\"\n [items]=\"datasets$ | async\"\n [placeholder]=\"'@pry.import.dataset' | i18n\"\n bindLabel=\"name\"\n [autocomplete]=\"true\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <pry-checkbox formControlName=\"normalizeGeo\">{{ '@pry.import.normalize' | i18n }}</pry-checkbox>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\">{{ '@pry.dataset.version.productionDate' | i18n }}</label>\n <input\n formControlName=\"productionDate\"\n id=\"productionDate\"\n class=\"a-form-field\"\n type=\"datetime-local\"\n [max]=\"maxDate\"\n [attr.aria-invalid]=\"productionDate.invalid\"\n />\n @if (productionDate.invalid) {\n <label id=\"productionDate-error\" for=\"productionDate\" class=\"a-label a-label--help -error\">\n @if (productionDate.errors?.['required']) {\n <span>{{ '@pry.dataset.form.obligatory' | i18n }}</span>\n } @else if (productionDate.errors?.['dateValidator']) {\n <span>{{ '@pry.dataset.form.date' | i18n }}</span>\n }\n </label>\n }\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\">{{ '@pry.dataset.version.producer' | i18n }}</label>\n <input formControlName=\"producer\" id=\"producer\" class=\"a-form-field\" type=\"text\" maxlength=\"100\" />\n @if (producer.touched && producer.invalid) {\n <label id=\"producer-error\" for=\"producer\" class=\"a-label a-label--help -error\">\n @if (producer.errors?.['required']) {\n <span>{{ '@pry.dataset.form.obligatory' | i18n }}</span>\n }\n </label>\n }\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\">{{ '@pry.dataset.version.additionalInformation' | i18n }}</label>\n <pry-text-editor formControlName=\"additionalInformation\"></pry-text-editor>\n </div>\n <div class=\"o-import__actions u-display-flex -justify-center\">\n <button class=\"a-btn a-btn--primary\" [disabled]=\"form.invalid\">\n {{ '@pry.import.import' | i18n }}\n </button>\n </div>\n </form>\n <div class=\"o-import__message\" [class.u-visually-hidden]=\"!showMessage\" #message>\n <span>\n {{ '@pry.import.consultDataset1' | i18n }}\n <strong>{{ dataset.value?.id ?? '' | translateId: { type: 'datasource', output: 'name' } | async }}</strong>\n {{ '@pry.import.consultDataset2' | i18n }}\n </span>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i2$1.PryUploadComponent, selector: "pry-upload", inputs: ["mode", "accept", "labelTranslate"], outputs: ["uploaded", "uploadedFile"] }, { kind: "component", type: i2$1.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: i2$1.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "component", type: i4.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.PryTextEditorComponent, selector: "pry-text-editor", inputs: ["tabView"] }, { kind: "component", type: PryImportCssComponent, selector: "pry-import-css" }, { kind: "pipe", type: i2$1.TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: i2$1.I18nPipe, name: "i18n" }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }] }); }
307
+ multipleImportChange() {
308
+ this.multipleImports = !this.multipleImports;
309
+ this.multipleImportsValue.emit(this.multipleImports);
310
+ }
311
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryImportFormComponent, deps: [{ token: i1.Store }, { token: i2.DataSourceService }, { token: i2.PrySnackbarService }, { token: i2.PryI18nService }], target: i0.ɵɵFactoryTarget.Component }); }
312
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: PryImportFormComponent, selector: "pry-import-form", outputs: { multipleImportsValue: "multipleImportsValue", formSubmitted: "formSubmitted" }, viewQueries: [{ propertyName: "message", first: true, predicate: ["message"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<pry-import-css></pry-import-css>\n<div class=\"o-import u-display-flex -column\">\n <div class=\"o-import__header u-display-flex -justify-space-between\">\n <h1 class=\"a-h1\">{{ '@pry.import.title' | i18n }}</h1>\n <pry-checkbox [ngModel]=\"multipleImports\" (click)=\"multipleImportChange()\">\n {{ '@pry.import.multiple' | i18n }}\n </pry-checkbox>\n </div>\n <div class=\"o-import__form-container u-display-flex\">\n <form class=\"o-import__form\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\" for=\"datasets\">{{ '@pry.import.fileType' | i18n }}</label>\n <pry-select\n formControlName=\"fileType\"\n id=\"fileType\"\n [items]=\"Object.values(fileTypes)\"\n bindValue=\"value\"\n bindLabel=\"label\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\" for=\"upload_input\">\n {{ '@pry.import.uploadTitle' + fileType.value | i18n }}\n </label>\n <p>{{ '@pry.import.warning' | i18n }}</p>\n <div class=\"o-file-input\">\n @if (file.value?.size) {\n <div class=\"o-import__file\">\n <pry-icon iconSvg=\"download\"></pry-icon>\n <h3>{{ file.value?.name }}</h3>\n <span>{{ getFileSize(file.value?.size ?? 0) }}</span>\n </div>\n }\n <pry-upload\n id=\"upload_input\"\n [accept]=\"fileTypes[fileType.value].extension\"\n mode=\"files\"\n (uploadedFile)=\"uploadedChange($event)\"\n labelTranslate=\"@pry.import.selectFile\"\n ></pry-upload>\n </div>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\" for=\"datasets\">{{ '@pry.import.datasetImport' | i18n }}</label>\n <pry-select\n formControlName=\"dataset\"\n id=\"datasets\"\n [items]=\"datasets$ | async\"\n [placeholder]=\"'@pry.import.dataset' | i18n\"\n bindLabel=\"name\"\n [autocomplete]=\"true\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <pry-checkbox formControlName=\"normalizeGeo\" inputId=\"normalizeGeo\">{{\n '@pry.import.normalize' | i18n\n }}</pry-checkbox>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\" for=\"productionDate\">{{ '@pry.dataset.version.productionDate' | i18n }}</label>\n <input\n formControlName=\"productionDate\"\n id=\"productionDate\"\n class=\"a-form-field\"\n type=\"datetime-local\"\n [max]=\"maxDate\"\n [attr.aria-invalid]=\"productionDate.invalid\"\n />\n @if (productionDate.invalid) {\n <label id=\"productionDate-error\" for=\"productionDate\" class=\"a-label a-label--help -error\">\n @if (productionDate.errors?.['required']) {\n <span>{{ '@pry.dataset.form.obligatory' | i18n }}</span>\n } @else if (productionDate.errors?.['dateValidator']) {\n <span>{{ '@pry.dataset.form.date' | i18n }}</span>\n }\n </label>\n }\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\" for=\"producer\">{{ '@pry.dataset.version.producer' | i18n }}</label>\n <input formControlName=\"producer\" id=\"producer\" class=\"a-form-field\" type=\"text\" maxlength=\"100\" />\n @if (producer.touched && producer.invalid) {\n <label id=\"producer-error\" for=\"producer\" class=\"a-label a-label--help -error\">\n @if (producer.errors?.['required']) {\n <span>{{ '@pry.dataset.form.obligatory' | i18n }}</span>\n }\n </label>\n }\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\" for=\"additionalInformation\">{{ '@pry.dataset.version.additionalInformation' | i18n }}</label>\n <pry-text-editor formControlName=\"additionalInformation\" id=\"additionalInformation\"></pry-text-editor>\n </div>\n <div class=\"o-import__actions u-display-flex -justify-center\">\n <button class=\"a-btn a-btn--primary\" [disabled]=\"form.invalid\">\n {{ '@pry.import.import' | i18n }}\n </button>\n </div>\n </form>\n <div class=\"o-import__message\" [class.u-visually-hidden]=\"!showMessage\" #message>\n <span>\n {{ '@pry.import.consultDataset1' | i18n }}\n <strong>{{ dataset.value?.id ?? '' | translateId: { type: 'datasource', output: 'name' } | async }}</strong>\n {{ '@pry.import.consultDataset2' | i18n }}\n </span>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i2.PryUploadComponent, selector: "pry-upload", inputs: ["mode", "accept", "labelTranslate"], outputs: ["uploaded", "uploadedFile"] }, { kind: "component", type: i2.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle", "name", "inputId", "inhibit"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.PryTextEditorComponent, selector: "pry-text-editor", inputs: ["tabView"] }, { kind: "component", type: PryImportCssComponent, selector: "pry-import-css" }, { kind: "pipe", type: i2.TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }] }); }
203
313
  }
204
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryImportComponent, decorators: [{
314
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryImportFormComponent, decorators: [{
205
315
  type: Component,
206
- args: [{ selector: 'pry-import', template: "<pry-import-css></pry-import-css>\n<div class=\"o-import\">\n <h1 class=\"a-h1\">{{ '@pry.import.title' | i18n }}</h1>\n <div class=\"u-display-flex\">\n <form class=\"o-import__form\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\" for=\"datasets\">{{ '@pry.import.fileType' | i18n }}</label>\n <pry-select\n formControlName=\"fileType\"\n id=\"fileType\"\n [items]=\"Object.values(fileTypes)\"\n bindValue=\"value\"\n bindLabel=\"label\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\" for=\"upload_input\">\n {{ '@pry.import.uploadTitle' + fileType.value | i18n }}\n </label>\n <p>{{ '@pry.import.warning' | i18n }}</p>\n <div class=\"o-file-input\">\n @if (file.value?.size) {\n <div class=\"o-import__file\">\n <pry-icon iconSvg=\"download\"></pry-icon>\n <h3>{{ file.value?.name }}</h3>\n <span>{{ getFileSize(file.value?.size ?? 0) }}</span>\n </div>\n }\n <pry-upload\n id=\"upload_input\"\n [accept]=\"fileTypes[fileType.value].extension\"\n mode=\"files\"\n (uploadedFile)=\"uploadedChange($event)\"\n labelTranslate=\"@pry.import.selectFile\"\n ></pry-upload>\n </div>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\" for=\"datasets\">{{ '@pry.import.datasetImport' | i18n }}</label>\n <pry-select\n formControlName=\"dataset\"\n id=\"datasets\"\n [items]=\"datasets$ | async\"\n [placeholder]=\"'@pry.import.dataset' | i18n\"\n bindLabel=\"name\"\n [autocomplete]=\"true\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <pry-checkbox formControlName=\"normalizeGeo\">{{ '@pry.import.normalize' | i18n }}</pry-checkbox>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\">{{ '@pry.dataset.version.productionDate' | i18n }}</label>\n <input\n formControlName=\"productionDate\"\n id=\"productionDate\"\n class=\"a-form-field\"\n type=\"datetime-local\"\n [max]=\"maxDate\"\n [attr.aria-invalid]=\"productionDate.invalid\"\n />\n @if (productionDate.invalid) {\n <label id=\"productionDate-error\" for=\"productionDate\" class=\"a-label a-label--help -error\">\n @if (productionDate.errors?.['required']) {\n <span>{{ '@pry.dataset.form.obligatory' | i18n }}</span>\n } @else if (productionDate.errors?.['dateValidator']) {\n <span>{{ '@pry.dataset.form.date' | i18n }}</span>\n }\n </label>\n }\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\">{{ '@pry.dataset.version.producer' | i18n }}</label>\n <input formControlName=\"producer\" id=\"producer\" class=\"a-form-field\" type=\"text\" maxlength=\"100\" />\n @if (producer.touched && producer.invalid) {\n <label id=\"producer-error\" for=\"producer\" class=\"a-label a-label--help -error\">\n @if (producer.errors?.['required']) {\n <span>{{ '@pry.dataset.form.obligatory' | i18n }}</span>\n }\n </label>\n }\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\">{{ '@pry.dataset.version.additionalInformation' | i18n }}</label>\n <pry-text-editor formControlName=\"additionalInformation\"></pry-text-editor>\n </div>\n <div class=\"o-import__actions u-display-flex -justify-center\">\n <button class=\"a-btn a-btn--primary\" [disabled]=\"form.invalid\">\n {{ '@pry.import.import' | i18n }}\n </button>\n </div>\n </form>\n <div class=\"o-import__message\" [class.u-visually-hidden]=\"!showMessage\" #message>\n <span>\n {{ '@pry.import.consultDataset1' | i18n }}\n <strong>{{ dataset.value?.id ?? '' | translateId: { type: 'datasource', output: 'name' } | async }}</strong>\n {{ '@pry.import.consultDataset2' | i18n }}\n </span>\n </div>\n </div>\n</div>\n" }]
207
- }], ctorParameters: () => [{ type: i2.Store }, { type: i2$1.DataSourceService }, { type: i2$1.PrySnackbarService }, { type: i2$1.PryI18nService }], propDecorators: { message: [{
316
+ args: [{ selector: 'pry-import-form', template: "<pry-import-css></pry-import-css>\n<div class=\"o-import u-display-flex -column\">\n <div class=\"o-import__header u-display-flex -justify-space-between\">\n <h1 class=\"a-h1\">{{ '@pry.import.title' | i18n }}</h1>\n <pry-checkbox [ngModel]=\"multipleImports\" (click)=\"multipleImportChange()\">\n {{ '@pry.import.multiple' | i18n }}\n </pry-checkbox>\n </div>\n <div class=\"o-import__form-container u-display-flex\">\n <form class=\"o-import__form\" [formGroup]=\"form\" (ngSubmit)=\"submit()\">\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\" for=\"datasets\">{{ '@pry.import.fileType' | i18n }}</label>\n <pry-select\n formControlName=\"fileType\"\n id=\"fileType\"\n [items]=\"Object.values(fileTypes)\"\n bindValue=\"value\"\n bindLabel=\"label\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\" for=\"upload_input\">\n {{ '@pry.import.uploadTitle' + fileType.value | i18n }}\n </label>\n <p>{{ '@pry.import.warning' | i18n }}</p>\n <div class=\"o-file-input\">\n @if (file.value?.size) {\n <div class=\"o-import__file\">\n <pry-icon iconSvg=\"download\"></pry-icon>\n <h3>{{ file.value?.name }}</h3>\n <span>{{ getFileSize(file.value?.size ?? 0) }}</span>\n </div>\n }\n <pry-upload\n id=\"upload_input\"\n [accept]=\"fileTypes[fileType.value].extension\"\n mode=\"files\"\n (uploadedFile)=\"uploadedChange($event)\"\n labelTranslate=\"@pry.import.selectFile\"\n ></pry-upload>\n </div>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\" for=\"datasets\">{{ '@pry.import.datasetImport' | i18n }}</label>\n <pry-select\n formControlName=\"dataset\"\n id=\"datasets\"\n [items]=\"datasets$ | async\"\n [placeholder]=\"'@pry.import.dataset' | i18n\"\n bindLabel=\"name\"\n [autocomplete]=\"true\"\n ></pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <pry-checkbox formControlName=\"normalizeGeo\" inputId=\"normalizeGeo\">{{\n '@pry.import.normalize' | i18n\n }}</pry-checkbox>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\" for=\"productionDate\">{{ '@pry.dataset.version.productionDate' | i18n }}</label>\n <input\n formControlName=\"productionDate\"\n id=\"productionDate\"\n class=\"a-form-field\"\n type=\"datetime-local\"\n [max]=\"maxDate\"\n [attr.aria-invalid]=\"productionDate.invalid\"\n />\n @if (productionDate.invalid) {\n <label id=\"productionDate-error\" for=\"productionDate\" class=\"a-label a-label--help -error\">\n @if (productionDate.errors?.['required']) {\n <span>{{ '@pry.dataset.form.obligatory' | i18n }}</span>\n } @else if (productionDate.errors?.['dateValidator']) {\n <span>{{ '@pry.dataset.form.date' | i18n }}</span>\n }\n </label>\n }\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\" for=\"producer\">{{ '@pry.dataset.version.producer' | i18n }}</label>\n <input formControlName=\"producer\" id=\"producer\" class=\"a-form-field\" type=\"text\" maxlength=\"100\" />\n @if (producer.touched && producer.invalid) {\n <label id=\"producer-error\" for=\"producer\" class=\"a-label a-label--help -error\">\n @if (producer.errors?.['required']) {\n <span>{{ '@pry.dataset.form.obligatory' | i18n }}</span>\n }\n </label>\n }\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-h3\" for=\"additionalInformation\">{{ '@pry.dataset.version.additionalInformation' | i18n }}</label>\n <pry-text-editor formControlName=\"additionalInformation\" id=\"additionalInformation\"></pry-text-editor>\n </div>\n <div class=\"o-import__actions u-display-flex -justify-center\">\n <button class=\"a-btn a-btn--primary\" [disabled]=\"form.invalid\">\n {{ '@pry.import.import' | i18n }}\n </button>\n </div>\n </form>\n <div class=\"o-import__message\" [class.u-visually-hidden]=\"!showMessage\" #message>\n <span>\n {{ '@pry.import.consultDataset1' | i18n }}\n <strong>{{ dataset.value?.id ?? '' | translateId: { type: 'datasource', output: 'name' } | async }}</strong>\n {{ '@pry.import.consultDataset2' | i18n }}\n </span>\n </div>\n </div>\n</div>\n" }]
317
+ }], ctorParameters: () => [{ type: i1.Store }, { type: i2.DataSourceService }, { type: i2.PrySnackbarService }, { type: i2.PryI18nService }], propDecorators: { message: [{
208
318
  type: ViewChild,
209
319
  args: ['message']
320
+ }], multipleImportsValue: [{
321
+ type: Output
322
+ }], formSubmitted: [{
323
+ type: Output
210
324
  }] } });
211
325
 
212
- const enTranslations = {
213
- '@pry': {
214
- import: {
215
- title: 'Import data',
216
- datasetImport: 'Import in :',
217
- import: 'Import',
218
- errorTitle: 'Import failed',
219
- successTitle: 'Import successful',
220
- uploadTitlezip: 'Choose a .zip file',
221
- uploadTitlecsv: 'Choose a .csv file',
222
- warning: 'File must be under 2GB, or must be imported via directly via APIs.',
223
- tooLarge: 'File is too large ({{current}} > 2GB), please use APIs to import this file.',
224
- selectFile: 'Select file',
225
- importedLines: 'imported lines',
226
- consultDataset1: 'The import is in progress, see the ',
227
- consultDataset2: ' dataset page to check its condition',
228
- errors: 'errors',
229
- error: 'Error on import: {{msg}}',
230
- errorCode: {
231
- 409: 'Import already in progress, please try again later.'
232
- },
233
- line: 'Line {{line}}: ',
234
- withoutLine: 'Global errors: ',
235
- dataset: 'Dataset',
236
- fileType: 'Select file type',
237
- code: {
238
- UNRECOGNIZED: 'Provided file contains a column "{{name}}", which is not present in the chosen dataset',
239
- FILE_MANDATORY: 'No file was provided',
240
- NO_ATTRIBUTES: 'No corresponding attribute found in uploaded file',
241
- FORMAT: '"{{name}}": "{{receivedValue}}" could not be converted to type "{{type}}"',
242
- STORAGE: 'Storage stack trace error: {{elasticError}}'
243
- },
244
- normalize: 'Standardize geographic shapes'
245
- }
246
- }
247
- };
248
-
249
- const frTranslations = {
250
- '@pry': {
251
- import: {
252
- title: 'Import de données',
253
- datasetImport: 'Importer dans un jeu de données:',
254
- import: 'Importer',
255
- errorTitle: "L'import a échoué",
256
- successTitle: 'Import de données réussi',
257
- uploadTitlezip: 'Choisir un fichier .zip',
258
- uploadTitlecsv: 'Choisir un fichier .csv',
259
- warning: 'Attention, le fichier ne doit pas dépasser 2GB pour être intégrer via cet écran. Le cas échéant, votre fichier devra être importé via les API',
260
- tooLarge: 'Fichier trop volumineux ({{current}} > 2GB), veuillez utiliser les API pour importer ces données',
261
- selectFile: 'Sélectionner un fichier',
262
- importedLines: 'lignes importée(s)',
263
- consultDataset1: "L'import est en cours, consultez la page du jeu de données ",
264
- consultDataset2: ' pour vérifier son état',
265
- shapefileState: ' pour vérifier son état',
266
- error: "Erreur lors de l'import: {{msg}}",
267
- errors: 'erreur(s)',
268
- errorCode: {
269
- 409: 'Import déjà en cours, veuillez réessayer plus tard.'
270
- },
271
- line: 'Ligne {{line}}: ',
272
- withoutLine: 'Erreurs globales: ',
273
- dataset: 'Jeu de données',
274
- fileType: 'Sélectionner un type de fichier',
275
- code: {
276
- UNRECOGNIZED: "Le fichier fourni contient une colonne «\u00A0{{name}}\u00A0», qui n'est pas présente dans le jeu de données choisi",
277
- FILE_MANDATORY: 'Aucun fichier fourni',
278
- NO_ATTRIBUTES: "Aucun attribut correspondant n'a été trouvé dans le fichier fourni",
279
- FORMAT: "«\u00A0{{name}}\u00A0»: «\u00A0{{receivedValue}}\u00A0» n'a pas pu être convertie en type «\u00A0{{type}}\u00A0»",
280
- STORAGE: 'Storage stack trace error: {{elasticError}}'
281
- },
282
- normalize: 'Normaliser les formes géographiques'
283
- }
284
- }
285
- };
286
-
287
326
  const routes = [
288
327
  {
289
328
  path: '',
290
- component: PryImportComponent,
329
+ component: PryImportFormComponent,
291
330
  data: {
292
331
  access: {
293
332
  module: 'dashboard',
@@ -299,7 +338,7 @@ const routes = [
299
338
  ];
300
339
  class PryImportRoutingModule {
301
340
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryImportRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
302
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.3", ngImport: i0, type: PryImportRoutingModule, imports: [i1.RouterModule], exports: [RouterModule] }); }
341
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.3", ngImport: i0, type: PryImportRoutingModule, imports: [i1$1.RouterModule], exports: [RouterModule] }); }
303
342
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryImportRoutingModule, imports: [RouterModule.forChild(routes), RouterModule] }); }
304
343
  }
305
344
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryImportRoutingModule, decorators: [{
@@ -331,7 +370,7 @@ class ImportService {
331
370
  headers: new HttpHeaders({ 'File-Content-Type': mimeType })
332
371
  })));
333
372
  }
334
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ImportService, deps: [{ token: i1$1.HttpClient }, { token: i2.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
373
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ImportService, deps: [{ token: i1$2.HttpClient }, { token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
335
374
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ImportService, providedIn: 'root' }); }
336
375
  }
337
376
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ImportService, decorators: [{
@@ -339,7 +378,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
339
378
  args: [{
340
379
  providedIn: 'root'
341
380
  }]
342
- }], ctorParameters: () => [{ type: i1$1.HttpClient }, { type: i2.Store }] });
381
+ }], ctorParameters: () => [{ type: i1$2.HttpClient }, { type: i1.Store }] });
343
382
 
344
383
  class ImportEffects {
345
384
  constructor(actions$, service, snackbar, translateService) {
@@ -369,12 +408,94 @@ class ImportEffects {
369
408
  throw error;
370
409
  })))));
371
410
  }
372
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ImportEffects, deps: [{ token: i1$2.Actions }, { token: ImportService }, { token: i2$1.PrySnackbarService }, { token: i2$1.PryI18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
411
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ImportEffects, deps: [{ token: i1$3.Actions }, { token: ImportService }, { token: i2.PrySnackbarService }, { token: i2.PryI18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
373
412
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ImportEffects }); }
374
413
  }
375
414
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: ImportEffects, decorators: [{
376
415
  type: Injectable
377
- }], ctorParameters: () => [{ type: i1$2.Actions }, { type: ImportService }, { type: i2$1.PrySnackbarService }, { type: i2$1.PryI18nService }] });
416
+ }], ctorParameters: () => [{ type: i1$3.Actions }, { type: ImportService }, { type: i2.PrySnackbarService }, { type: i2.PryI18nService }] });
417
+
418
+ class PryVersionModalComponent {
419
+ constructor(dialogRef, data) {
420
+ this.dialogRef = dialogRef;
421
+ this.data = data;
422
+ this.version = this.data.version;
423
+ }
424
+ close() {
425
+ this.dialogRef.close();
426
+ }
427
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryVersionModalComponent, deps: [{ token: i2.PryDialogRef }, { token: PRY_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
428
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: PryVersionModalComponent, selector: "pry-version-modal", ngImport: i0, template: "<pry-import-css></pry-import-css>\n<div class=\"m-version-modal o-modal\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.toolbox.about' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"close()\">\n <pry-icon iconSvg=\"close\" [height]=\"20\" [width]=\"20\"></pry-icon>\n <h4 class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</h4>\n </button>\n </div>\n </div>\n @if (version) {\n <ul class=\"m-version-modal__list u-display-flex -column -gap-20\">\n <li>\n <h4 class=\"bold\">{{ '@pry.dataset.version.name' | i18n }}</h4>\n <span>{{ version.dataset.name }}</span>\n </li>\n <li>\n <h4>{{ '@pry.dataset.version.number' | i18n }}</h4>\n <span>{{ version.version }}</span>\n </li>\n <li>\n <h4 class=\"a-h4\">{{ '@pry.dataset.version.importDate' | i18n }}</h4>\n <span>{{ version.productionDate }}</span>\n </li>\n <li>\n <h4>{{ '@pry.dataset.version.stateTitle' | i18n }}</h4>\n <span>{{\n version.id === version.dataset.activeVersion?.id\n ? '@pry.dataset.version.state.currentlyActive'\n : ('@pry.dataset.version.state.' + version.state | i18n)\n }}</span>\n </li>\n <li>\n <h4>{{ '@pry.dataset.version.fileName' | i18n }}</h4>\n <span>{{ version.fileName }}</span>\n </li>\n <li>\n <h4>{{ '@pry.dataset.version.producer' | i18n }}</h4>\n <span>{{ version.producer }}</span>\n </li>\n @if (version.additionalInformation) {\n <li>\n <h4>{{ '@pry.dataset.version.additionalInformation' | i18n }}</h4>\n <span>{{ version.additionalInformation | mdToHtml }}</span>\n </li>\n }\n </ul>\n }\n</div>\n", dependencies: [{ kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: PryImportCssComponent, selector: "pry-import-css" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }, { kind: "pipe", type: i5.MdToHtmlPipe, name: "mdToHtml" }] }); }
429
+ }
430
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryVersionModalComponent, decorators: [{
431
+ type: Component,
432
+ args: [{ selector: 'pry-version-modal', template: "<pry-import-css></pry-import-css>\n<div class=\"m-version-modal o-modal\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.toolbox.about' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"close()\">\n <pry-icon iconSvg=\"close\" [height]=\"20\" [width]=\"20\"></pry-icon>\n <h4 class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</h4>\n </button>\n </div>\n </div>\n @if (version) {\n <ul class=\"m-version-modal__list u-display-flex -column -gap-20\">\n <li>\n <h4 class=\"bold\">{{ '@pry.dataset.version.name' | i18n }}</h4>\n <span>{{ version.dataset.name }}</span>\n </li>\n <li>\n <h4>{{ '@pry.dataset.version.number' | i18n }}</h4>\n <span>{{ version.version }}</span>\n </li>\n <li>\n <h4 class=\"a-h4\">{{ '@pry.dataset.version.importDate' | i18n }}</h4>\n <span>{{ version.productionDate }}</span>\n </li>\n <li>\n <h4>{{ '@pry.dataset.version.stateTitle' | i18n }}</h4>\n <span>{{\n version.id === version.dataset.activeVersion?.id\n ? '@pry.dataset.version.state.currentlyActive'\n : ('@pry.dataset.version.state.' + version.state | i18n)\n }}</span>\n </li>\n <li>\n <h4>{{ '@pry.dataset.version.fileName' | i18n }}</h4>\n <span>{{ version.fileName }}</span>\n </li>\n <li>\n <h4>{{ '@pry.dataset.version.producer' | i18n }}</h4>\n <span>{{ version.producer }}</span>\n </li>\n @if (version.additionalInformation) {\n <li>\n <h4>{{ '@pry.dataset.version.additionalInformation' | i18n }}</h4>\n <span>{{ version.additionalInformation | mdToHtml }}</span>\n </li>\n }\n </ul>\n }\n</div>\n" }]
433
+ }], ctorParameters: () => [{ type: i2.PryDialogRef }, { type: undefined, decorators: [{
434
+ type: Inject,
435
+ args: [PRY_DIALOG_DATA]
436
+ }] }] });
437
+
438
+ class PryImportListComponent extends SubscriptionnerDirective {
439
+ constructor(store, dialog) {
440
+ super();
441
+ this.store = store;
442
+ this.dialog = dialog;
443
+ this.loadDataAction = input(DataSourceActions.dataset.listVersions({}));
444
+ this.refreshClick = input();
445
+ this.possibleStatus = ['LOADING', 'INDEXING', 'INACTIVE', 'ERROR', 'ACTIVE', 'DELETING', 'DELETE_ERROR'];
446
+ this.filters = {
447
+ dataset: undefined,
448
+ status: undefined,
449
+ dateMin: undefined,
450
+ dateMax: undefined
451
+ };
452
+ this.sort = {};
453
+ this.store.dispatch(DataSourceActions.dataset.loadDataset());
454
+ this.datasets$ = this.store.select(DataSourceSelectors.datasets);
455
+ this.datasetVersions$ = this.store.select(DataSourceSelectors.datasetVersions);
456
+ this.totalVersionCount$ = this.store.select(DataSourceSelectors.totalVersionCount);
457
+ }
458
+ ngOnInit() {
459
+ this.subscriptions.add(this.refreshClick()?.subscribe(() => this.loadData()));
460
+ }
461
+ clearFilters() {
462
+ this.filters = { dataset: undefined, status: undefined, dateMin: undefined, dateMax: undefined };
463
+ }
464
+ loadData() {
465
+ this.store.dispatch({
466
+ ...this.loadDataAction(),
467
+ limit: 10,
468
+ ...this.filters,
469
+ ...this.sort
470
+ });
471
+ }
472
+ openInfoModal(version) {
473
+ this.dialog.open(PryVersionModalComponent, {
474
+ data: { version },
475
+ overlayConfig: {
476
+ positionStrategy: new GlobalPositionStrategy().centerVertically().right('20px'),
477
+ hasBackdrop: true,
478
+ backdropClass: 'cdk-overlay-transparent-backdrop'
479
+ }
480
+ });
481
+ }
482
+ openErrorModal(version) {
483
+ this.dialog.open(PryStatusModalComponent, {
484
+ data: { version }
485
+ });
486
+ }
487
+ sortChange($event) {
488
+ this.sort.sortBy = $event.direction;
489
+ this.sort.orderBy = $event.active;
490
+ this.loadData();
491
+ }
492
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryImportListComponent, deps: [{ token: i1.Store }, { token: i2.PryDialogService }], target: i0.ɵɵFactoryTarget.Component }); }
493
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: PryImportListComponent, selector: "pry-import-list", inputs: { loadDataAction: { classPropertyName: "loadDataAction", publicName: "loadDataAction", isSignal: true, isRequired: false, transformFunction: null }, refreshClick: { classPropertyName: "refreshClick", publicName: "refreshClick", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<pry-import-css></pry-import-css>\n<div class=\"o-import-list u-display-flex -column -gap-20\">\n <h1 class=\"a-h1\">{{ '@pry.importList.title' | i18n }}</h1>\n <div class=\"o-import-list__filters u-display-flex -gap-20\">\n <div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown\" #dsRef>\n <label class=\"a-label m-filter__label\" for=\"dataset_name_filter\">\n {{ '@pry.importList.filter.dsName' | i18n }}&nbsp;:&nbsp;\n </label>\n <pry-select\n id=\"dataset_name_filter\"\n [items]=\"datasets$ | async\"\n [(ngModel)]=\"filters.dataset\"\n [clearable]=\"true\"\n [autocomplete]=\"true\"\n aria-labelledby=\"item-label\"\n bindLabel=\"name\"\n bindValue=\"id\"\n [elementRef]=\"dsRef\"\n ></pry-select>\n </div>\n <div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown\" #statusRef>\n <label class=\"a-label m-filter__label\" for=\"import_status\">\n {{ '@pry.importList.filter.status' | i18n }}&nbsp;:&nbsp;\n </label>\n <pry-select\n id=\"import_status\"\n [items]=\"possibleStatus\"\n [(ngModel)]=\"filters.status\"\n [clearable]=\"true\"\n aria-labelledby=\"item-label\"\n [elementRef]=\"statusRef\"\n i18nPrefix=\"@pry.dataset.version.stateFilter.\"\n ></pry-select>\n </div>\n <div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown\">\n <fieldset class=\"u-display-flex -align-center\">\n <legend class=\"a-label m-filter__label\">{{ '@pry.importList.filter.date' | i18n }}&nbsp;:&nbsp;</legend>\n <input class=\"m-filter__input\" type=\"date\" [(ngModel)]=\"filters.dateMin\" />\n <span class=\"m-filter__date-input-separator\">&nbsp;-&nbsp;</span>\n <input class=\"m-filter__input\" type=\"date\" [(ngModel)]=\"filters.dateMax\" />\n </fieldset>\n </div>\n <button type=\"button\" class=\"a-btn a-btn--icon-only u-self-center\" (click)=\"clearFilters()\">\n <pry-icon iconSvg=\"clear_filter\" [width]=\"30\" [height]=\"30\"></pry-icon>\n </button>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"loadData()\">\n {{ '@pry.toolbox.apply' | i18n }}\n <pry-icon iconSvg=\"refresh_filter\" [width]=\"18\" [height]=\"18\"></pry-icon>\n </button>\n </div>\n <div class=\"o-import-list__content\">\n <table class=\"a-table\" prySortTable (prySortChange)=\"sortChange($event)\">\n <caption>\n {{\n '@pry.admin.dataset.title' | i18n\n }},\n {{\n '@pry.action.sortableColumnHeader' | i18n\n }}\n </caption>\n <thead>\n <tr>\n <th id=\"import_list_header_dataset\" prySortHeader=\"DATASET_NAME\">\n {{ '@pry.importList.dsName' | i18n }}\n </th>\n <th>{{ '@pry.importList.number' | i18n }}</th>\n <th id=\"import_list_header_date\" prySortHeader=\"DATE\" (sortChange)=\"sortChange($event)\">\n {{ '@pry.importList.date' | i18n }}\n </th>\n <th>{{ '@pry.importList.status' | i18n }}</th>\n <th>{{ '@pry.importList.actions' | i18n }}</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (version of datasetVersions$ | async; track version.id) {\n <tr>\n <td>{{ version.dataset.name }}</td>\n <td>\n {{ version.version }}\n </td>\n <td>\n {{ version.productionDate | date: 'dd/MM/yyyy HH:mm' }}\n </td>\n <td class=\"u-display-flex -align-center -cell-with-icon\">\n @if (version.state === 'ACTIVE') {\n <pry-icon iconSvg=\"check\" class=\"check\" [height]=\"20\" [width]=\"20\"></pry-icon>\n } @else if (version.state === 'WARNING' || version.state === 'ERROR') {\n <pry-icon iconSvg=\"warning-triangle\" class=\"warning\" [height]=\"20\" [width]=\"20\"></pry-icon>\n }\n {{\n version.id === version.dataset.activeVersion?.id\n ? '@pry.dataset.version.state.currentlyActive'\n : ('@pry.dataset.version.state.' + version.state | i18n)\n }}\n </td>\n @if (version.state === 'ACTIVE' || version.state === 'INACTIVE') {\n <td>\n <button class=\"a-btn a-btn--secondary\" (click)=\"openInfoModal(version)\">Consulter</button>\n </td>\n } @else if (version.state === 'ERROR' || version.state === 'WARNING') {\n <td>\n <button class=\"a-btn a-btn--secondary\" (click)=\"openErrorModal(version)\">\n {{ version.state === 'ERROR' ? 'Consulter erreurs' : 'Consulter warnings' }}\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n <pry-paginator\n [action]=\"loadDataAction()\"\n [nbPerPage]=\"10\"\n [totalItemNb]=\"(totalVersionCount$ | async)!\"\n class=\"u-self-center\"\n ></pry-paginator>\n</div>\n", dependencies: [{ kind: "component", type: i2.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4$1.PryPaginatorComponent, selector: "pry-paginator", inputs: ["action", "nbPerPage", "totalItemNb", "mode"], outputs: ["pageChange"] }, { kind: "component", type: i2.PrySortHeaderComponent, selector: "th[prySortHeader]", inputs: ["prySortHeader"], outputs: ["sortChange"] }, { kind: "directive", type: i2.PrySortHeaderDirective, selector: "[prySortHeader]" }, { kind: "directive", type: i2.PrySortTableDirective, selector: "[prySortTable]", inputs: ["prySortActive", "prySortDirection"], outputs: ["prySortChange"] }, { kind: "component", type: PryImportCssComponent, selector: "pry-import-css" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.DatePipe, name: "date" }] }); }
494
+ }
495
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryImportListComponent, decorators: [{
496
+ type: Component,
497
+ args: [{ selector: 'pry-import-list', template: "<pry-import-css></pry-import-css>\n<div class=\"o-import-list u-display-flex -column -gap-20\">\n <h1 class=\"a-h1\">{{ '@pry.importList.title' | i18n }}</h1>\n <div class=\"o-import-list__filters u-display-flex -gap-20\">\n <div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown\" #dsRef>\n <label class=\"a-label m-filter__label\" for=\"dataset_name_filter\">\n {{ '@pry.importList.filter.dsName' | i18n }}&nbsp;:&nbsp;\n </label>\n <pry-select\n id=\"dataset_name_filter\"\n [items]=\"datasets$ | async\"\n [(ngModel)]=\"filters.dataset\"\n [clearable]=\"true\"\n [autocomplete]=\"true\"\n aria-labelledby=\"item-label\"\n bindLabel=\"name\"\n bindValue=\"id\"\n [elementRef]=\"dsRef\"\n ></pry-select>\n </div>\n <div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown\" #statusRef>\n <label class=\"a-label m-filter__label\" for=\"import_status\">\n {{ '@pry.importList.filter.status' | i18n }}&nbsp;:&nbsp;\n </label>\n <pry-select\n id=\"import_status\"\n [items]=\"possibleStatus\"\n [(ngModel)]=\"filters.status\"\n [clearable]=\"true\"\n aria-labelledby=\"item-label\"\n [elementRef]=\"statusRef\"\n i18nPrefix=\"@pry.dataset.version.stateFilter.\"\n ></pry-select>\n </div>\n <div class=\"m-filter__input-wrapper m-filter__input-wrapper--dropdown\">\n <fieldset class=\"u-display-flex -align-center\">\n <legend class=\"a-label m-filter__label\">{{ '@pry.importList.filter.date' | i18n }}&nbsp;:&nbsp;</legend>\n <input class=\"m-filter__input\" type=\"date\" [(ngModel)]=\"filters.dateMin\" />\n <span class=\"m-filter__date-input-separator\">&nbsp;-&nbsp;</span>\n <input class=\"m-filter__input\" type=\"date\" [(ngModel)]=\"filters.dateMax\" />\n </fieldset>\n </div>\n <button type=\"button\" class=\"a-btn a-btn--icon-only u-self-center\" (click)=\"clearFilters()\">\n <pry-icon iconSvg=\"clear_filter\" [width]=\"30\" [height]=\"30\"></pry-icon>\n </button>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"loadData()\">\n {{ '@pry.toolbox.apply' | i18n }}\n <pry-icon iconSvg=\"refresh_filter\" [width]=\"18\" [height]=\"18\"></pry-icon>\n </button>\n </div>\n <div class=\"o-import-list__content\">\n <table class=\"a-table\" prySortTable (prySortChange)=\"sortChange($event)\">\n <caption>\n {{\n '@pry.admin.dataset.title' | i18n\n }},\n {{\n '@pry.action.sortableColumnHeader' | i18n\n }}\n </caption>\n <thead>\n <tr>\n <th id=\"import_list_header_dataset\" prySortHeader=\"DATASET_NAME\">\n {{ '@pry.importList.dsName' | i18n }}\n </th>\n <th>{{ '@pry.importList.number' | i18n }}</th>\n <th id=\"import_list_header_date\" prySortHeader=\"DATE\" (sortChange)=\"sortChange($event)\">\n {{ '@pry.importList.date' | i18n }}\n </th>\n <th>{{ '@pry.importList.status' | i18n }}</th>\n <th>{{ '@pry.importList.actions' | i18n }}</th>\n <th></th>\n </tr>\n </thead>\n <tbody>\n @for (version of datasetVersions$ | async; track version.id) {\n <tr>\n <td>{{ version.dataset.name }}</td>\n <td>\n {{ version.version }}\n </td>\n <td>\n {{ version.productionDate | date: 'dd/MM/yyyy HH:mm' }}\n </td>\n <td class=\"u-display-flex -align-center -cell-with-icon\">\n @if (version.state === 'ACTIVE') {\n <pry-icon iconSvg=\"check\" class=\"check\" [height]=\"20\" [width]=\"20\"></pry-icon>\n } @else if (version.state === 'WARNING' || version.state === 'ERROR') {\n <pry-icon iconSvg=\"warning-triangle\" class=\"warning\" [height]=\"20\" [width]=\"20\"></pry-icon>\n }\n {{\n version.id === version.dataset.activeVersion?.id\n ? '@pry.dataset.version.state.currentlyActive'\n : ('@pry.dataset.version.state.' + version.state | i18n)\n }}\n </td>\n @if (version.state === 'ACTIVE' || version.state === 'INACTIVE') {\n <td>\n <button class=\"a-btn a-btn--secondary\" (click)=\"openInfoModal(version)\">Consulter</button>\n </td>\n } @else if (version.state === 'ERROR' || version.state === 'WARNING') {\n <td>\n <button class=\"a-btn a-btn--secondary\" (click)=\"openErrorModal(version)\">\n {{ version.state === 'ERROR' ? 'Consulter erreurs' : 'Consulter warnings' }}\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n </div>\n <pry-paginator\n [action]=\"loadDataAction()\"\n [nbPerPage]=\"10\"\n [totalItemNb]=\"(totalVersionCount$ | async)!\"\n class=\"u-self-center\"\n ></pry-paginator>\n</div>\n" }]
498
+ }], ctorParameters: () => [{ type: i1.Store }, { type: i2.PryDialogService }] });
378
499
 
379
500
  class PryImportModule {
380
501
  constructor(pryTranslateService) {
@@ -382,16 +503,20 @@ class PryImportModule {
382
503
  this.pryTranslateService.addLangObject('fr', 'import', frTranslations);
383
504
  this.pryTranslateService.addLangObject('en', 'import', enTranslations);
384
505
  }
385
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryImportModule, deps: [{ token: i2$1.PryI18nService }], target: i0.ɵɵFactoryTarget.NgModule }); }
386
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.3", ngImport: i0, type: PryImportModule, declarations: [PryImportComponent, PryImportCssComponent], imports: [PryCoreModule,
506
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryImportModule, deps: [{ token: i2.PryI18nService }], target: i0.ɵɵFactoryTarget.NgModule }); }
507
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.1.3", ngImport: i0, type: PryImportModule, declarations: [PryImportFormComponent, PryImportCssComponent, PryImportListComponent, PryVersionModalComponent], imports: [PryCoreModule,
387
508
  PrySelectModule,
388
509
  PryI18nModule,
389
510
  CommonModule,
390
511
  PryIconModule,
391
512
  FormsModule,
392
- PryImportRoutingModule, i2.StoreFeatureModule, i1$2.EffectsFeatureModule, PryCheckboxModule,
513
+ PryImportRoutingModule, i1.StoreFeatureModule, i1$3.EffectsFeatureModule, PryCheckboxModule,
393
514
  ReactiveFormsModule,
394
- PryTextEditorModule], exports: [PryImportComponent] }); }
515
+ PryTextEditorModule,
516
+ PryDatePickerModule,
517
+ PrySinceDateModule,
518
+ PryPaginatorModule,
519
+ PrySortModule], exports: [PryImportFormComponent, PryImportListComponent, PryVersionModalComponent] }); }
395
520
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryImportModule, providers: [DatePipe], imports: [PryCoreModule,
396
521
  PrySelectModule,
397
522
  PryI18nModule,
@@ -403,13 +528,17 @@ class PryImportModule {
403
528
  EffectsModule.forFeature([ImportEffects]),
404
529
  PryCheckboxModule,
405
530
  ReactiveFormsModule,
406
- PryTextEditorModule] }); }
531
+ PryTextEditorModule,
532
+ PryDatePickerModule,
533
+ PrySinceDateModule,
534
+ PryPaginatorModule,
535
+ PrySortModule] }); }
407
536
  }
408
537
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryImportModule, decorators: [{
409
538
  type: NgModule,
410
539
  args: [{
411
540
  providers: [DatePipe],
412
- declarations: [PryImportComponent, PryImportCssComponent],
541
+ declarations: [PryImportFormComponent, PryImportCssComponent, PryImportListComponent, PryVersionModalComponent],
413
542
  imports: [
414
543
  PryCoreModule,
415
544
  PrySelectModule,
@@ -422,15 +551,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
422
551
  EffectsModule.forFeature([ImportEffects]),
423
552
  PryCheckboxModule,
424
553
  ReactiveFormsModule,
425
- PryTextEditorModule
554
+ PryTextEditorModule,
555
+ PryDatePickerModule,
556
+ PrySinceDateModule,
557
+ PryPaginatorModule,
558
+ PrySortModule
426
559
  ],
427
- exports: [PryImportComponent]
560
+ exports: [PryImportFormComponent, PryImportListComponent, PryVersionModalComponent]
428
561
  }]
429
- }], ctorParameters: () => [{ type: i2$1.PryI18nService }] });
562
+ }], ctorParameters: () => [{ type: i2.PryI18nService }] });
430
563
 
431
564
  /**
432
565
  * Generated bundle index. Do not edit.
433
566
  */
434
567
 
435
- export { PryImportComponent, PryImportModule };
568
+ export { PryImportFormComponent, PryImportListComponent, PryImportModule, PryVersionModalComponent };
436
569
  //# sourceMappingURL=provoly-dashboard-import.mjs.map