geonetwork-ui 2.5.0-dev.22c177ea1 → 2.5.0-dev.4e621e7b5

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 (159) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +11 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
  3. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +20 -17
  4. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +22 -2
  5. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  6. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  7. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +7 -4
  8. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +23 -15
  9. package/esm2022/libs/feature/dataviz/src/lib/table-view/table-view.component.mjs +7 -4
  10. package/esm2022/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.mjs +3 -3
  11. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.mjs +2 -1
  12. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.mjs +2 -2
  13. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +2 -2
  14. package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +4 -3
  15. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +3 -2
  16. package/esm2022/libs/feature/record/src/lib/state/mdview.actions.mjs +4 -1
  17. package/esm2022/libs/feature/record/src/lib/state/mdview.effects.mjs +7 -2
  18. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +9 -1
  19. package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +19 -1
  20. package/esm2022/libs/feature/record/src/lib/state/mdview.selectors.mjs +6 -1
  21. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +1 -1
  22. package/esm2022/libs/ui/elements/src/index.mjs +2 -1
  23. package/esm2022/libs/ui/elements/src/lib/application-banner/application-banner.component.mjs +78 -0
  24. package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +2 -1
  25. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +10 -4
  26. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +7 -2
  27. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +14 -4
  28. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +10 -3
  29. package/esm2022/libs/util/data-fetcher/src/lib/data-fetcher.mjs +5 -4
  30. package/esm2022/libs/util/data-fetcher/src/lib/readers/base-cache.mjs +12 -0
  31. package/esm2022/libs/util/data-fetcher/src/lib/readers/base-file.mjs +3 -3
  32. package/esm2022/libs/util/data-fetcher/src/lib/readers/base.mjs +1 -1
  33. package/esm2022/libs/util/data-fetcher/src/lib/readers/csv.mjs +2 -2
  34. package/esm2022/libs/util/data-fetcher/src/lib/readers/excel.mjs +2 -2
  35. package/esm2022/libs/util/data-fetcher/src/lib/readers/geojson.mjs +2 -2
  36. package/esm2022/libs/util/data-fetcher/src/lib/readers/gml.mjs +5 -3
  37. package/esm2022/libs/util/data-fetcher/src/lib/readers/json.mjs +2 -2
  38. package/esm2022/libs/util/data-fetcher/src/lib/readers/wfs.mjs +19 -11
  39. package/esm2022/libs/util/data-fetcher/src/lib/utils.mjs +9 -7
  40. package/esm2022/translations/de.json +3 -4
  41. package/esm2022/translations/en.json +4 -13
  42. package/esm2022/translations/es.json +3 -4
  43. package/esm2022/translations/fr.json +15 -16
  44. package/esm2022/translations/it.json +20 -20
  45. package/esm2022/translations/nl.json +3 -4
  46. package/esm2022/translations/pt.json +3 -4
  47. package/fesm2022/geonetwork-ui.mjs +407 -207
  48. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  49. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  50. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +3 -0
  51. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  52. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts +1 -0
  53. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  54. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +2 -1
  55. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  56. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +6 -0
  57. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  58. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +2 -1
  59. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  60. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts +2 -1
  61. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts.map +1 -1
  62. package/libs/feature/dataviz/src/lib/service/data.service.d.ts +2 -2
  63. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  64. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts +2 -1
  65. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts.map +1 -1
  66. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.d.ts.map +1 -1
  67. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.d.ts.map +1 -1
  68. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts +1 -0
  69. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts.map +1 -1
  70. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  71. package/libs/feature/record/src/lib/state/mdview.actions.d.ts +16 -1
  72. package/libs/feature/record/src/lib/state/mdview.actions.d.ts.map +1 -1
  73. package/libs/feature/record/src/lib/state/mdview.effects.d.ts +5 -0
  74. package/libs/feature/record/src/lib/state/mdview.effects.d.ts.map +1 -1
  75. package/libs/feature/record/src/lib/state/mdview.facade.d.ts +2 -0
  76. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  77. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts +4 -1
  78. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts.map +1 -1
  79. package/libs/feature/record/src/lib/state/mdview.selectors.d.ts +2 -0
  80. package/libs/feature/record/src/lib/state/mdview.selectors.d.ts.map +1 -1
  81. package/libs/ui/elements/src/index.d.ts +1 -0
  82. package/libs/ui/elements/src/index.d.ts.map +1 -1
  83. package/libs/ui/elements/src/lib/application-banner/application-banner.component.d.ts +16 -0
  84. package/libs/ui/elements/src/lib/application-banner/application-banner.component.d.ts.map +1 -0
  85. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts.map +1 -1
  86. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
  87. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  88. package/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.d.ts.map +1 -1
  89. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +4 -2
  90. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -1
  91. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +3 -1
  92. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  93. package/libs/util/data-fetcher/src/lib/data-fetcher.d.ts +2 -2
  94. package/libs/util/data-fetcher/src/lib/data-fetcher.d.ts.map +1 -1
  95. package/libs/util/data-fetcher/src/lib/readers/base-cache.d.ts +8 -0
  96. package/libs/util/data-fetcher/src/lib/readers/base-cache.d.ts.map +1 -0
  97. package/libs/util/data-fetcher/src/lib/readers/base-file.d.ts +2 -2
  98. package/libs/util/data-fetcher/src/lib/readers/base-file.d.ts.map +1 -1
  99. package/libs/util/data-fetcher/src/lib/readers/base.d.ts +2 -2
  100. package/libs/util/data-fetcher/src/lib/readers/base.d.ts.map +1 -1
  101. package/libs/util/data-fetcher/src/lib/readers/gml.d.ts +5 -3
  102. package/libs/util/data-fetcher/src/lib/readers/gml.d.ts.map +1 -1
  103. package/libs/util/data-fetcher/src/lib/readers/wfs.d.ts +7 -4
  104. package/libs/util/data-fetcher/src/lib/readers/wfs.d.ts.map +1 -1
  105. package/libs/util/data-fetcher/src/lib/utils.d.ts +2 -2
  106. package/libs/util/data-fetcher/src/lib/utils.d.ts.map +1 -1
  107. package/package.json +1 -1
  108. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +25 -0
  109. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +4 -0
  110. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +22 -16
  111. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +41 -2
  112. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +3 -1
  113. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +4 -1
  114. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +75 -0
  115. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +4 -1
  116. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +42 -21
  117. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.ts +2 -1
  118. package/src/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.html +1 -1
  119. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.ts +1 -0
  120. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.ts +1 -1
  121. package/src/libs/feature/editor/src/lib/fields.config.ts +1 -1
  122. package/src/libs/feature/record/src/lib/data-view/data-view.component.html +2 -0
  123. package/src/libs/feature/record/src/lib/data-view/data-view.component.ts +3 -0
  124. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +2 -1
  125. package/src/libs/feature/record/src/lib/state/mdview.actions.ts +16 -0
  126. package/src/libs/feature/record/src/lib/state/mdview.effects.ts +21 -2
  127. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +15 -0
  128. package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +30 -1
  129. package/src/libs/feature/record/src/lib/state/mdview.selectors.ts +12 -0
  130. package/src/libs/ui/elements/src/index.ts +1 -0
  131. package/src/libs/ui/elements/src/lib/application-banner/application-banner.component.css +0 -0
  132. package/src/libs/ui/elements/src/lib/application-banner/application-banner.component.html +25 -0
  133. package/src/libs/ui/elements/src/lib/application-banner/application-banner.component.ts +70 -0
  134. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +2 -0
  135. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +3 -0
  136. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.ts +6 -0
  137. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +37 -1
  138. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +8 -2
  139. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +2 -0
  140. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +6 -0
  141. package/src/libs/util/data-fetcher/src/lib/data-fetcher.ts +13 -4
  142. package/src/libs/util/data-fetcher/src/lib/readers/base-cache.ts +14 -0
  143. package/src/libs/util/data-fetcher/src/lib/readers/base-file.ts +2 -1
  144. package/src/libs/util/data-fetcher/src/lib/readers/base.ts +2 -2
  145. package/src/libs/util/data-fetcher/src/lib/readers/csv.ts +1 -1
  146. package/src/libs/util/data-fetcher/src/lib/readers/excel.ts +1 -1
  147. package/src/libs/util/data-fetcher/src/lib/readers/geojson.ts +1 -1
  148. package/src/libs/util/data-fetcher/src/lib/readers/gml.ts +7 -7
  149. package/src/libs/util/data-fetcher/src/lib/readers/json.ts +1 -1
  150. package/src/libs/util/data-fetcher/src/lib/readers/wfs.ts +34 -11
  151. package/src/libs/util/data-fetcher/src/lib/utils.ts +36 -32
  152. package/translations/de.json +3 -4
  153. package/translations/en.json +4 -13
  154. package/translations/es.json +3 -4
  155. package/translations/fr.json +15 -16
  156. package/translations/it.json +20 -20
  157. package/translations/nl.json +3 -4
  158. package/translations/pt.json +3 -4
  159. package/translations/sk.json +3 -4
@@ -27,7 +27,7 @@ import EmblaCarousel from 'embla-carousel';
27
27
  import * as i2$2 from '@ng-icons/core';
28
28
  import { provideIcons, NgIcon, NgIconComponent, provideNgIconsConfig, NgIconsModule } from '@ng-icons/core';
29
29
  import { iconoirNavArrowRight, iconoirNavArrowLeft, iconoirNavArrowDown, iconoirNavArrowUp, iconoirSearch, iconoirCalendar, iconoirLink, iconoirArrowUp, iconoirCloudUpload, iconoirFramePlusIn, iconoirMediaImage, iconoirMediaImageXmark, iconoirBin, iconoirPlus, iconoirUser, iconoirLock, iconoirImport, iconoirLightBulbOn, iconoirArrowLeft, iconoirAttachment, iconoirRefresh } from '@ng-icons/iconoir';
30
- import { matExpandMore, matExpandLess, matAdd, matRemove, matClose, matContentCopy, matSearch, matStar, matStarBorder, matChevronLeft, matChevronRight, matArrowForward, matArrowBack, matCheck, matWarningAmber, matMoreHoriz, matFace, matQuestionMark, matMoodBad, matZoomOutMap, matOpenInNew, matMailOutline, matPersonOutline, matCheckCircleOutline, matMoreVert, matCorporateFare } from '@ng-icons/material-icons/baseline';
30
+ import { matExpandMore, matExpandLess, matAdd, matRemove, matClose, matContentCopy, matSearch, matStar, matStarBorder, matChevronLeft, matChevronRight, matArrowForward, matArrowBack, matCheck, matWarningAmber, matMoreHoriz, matFace, matQuestionMark, matMoodBad, matZoomOutMap, matOpenInNew, matMailOutline, matPersonOutline, matCheckCircleOutline, matWarning, matMoreVert, matCorporateFare } from '@ng-icons/material-icons/baseline';
31
31
  import * as i1$4 from '@angular/material/tooltip';
32
32
  import { MatTooltipModule } from '@angular/material/tooltip';
33
33
  import { moveItemInArray, CdkDropList, CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';
@@ -18621,8 +18621,6 @@ var de = {
18621
18621
  "chart.type.lineSmooth": "Geglättes Liniendiagramm",
18622
18622
  "chart.type.pie": "Kreisdiagramm",
18623
18623
  "dashboard.catalog.allRecords": "Metadatenkatalog",
18624
- "dashboard.catalog.contacts": "Kontakte",
18625
- "dashboard.catalog.thesaurus": "Thesaurus",
18626
18624
  "dashboard.createRecord": "Neuer Eintrag",
18627
18625
  "dashboard.importRecord": "",
18628
18626
  "dashboard.importRecord.importExternal": "",
@@ -18635,7 +18633,6 @@ var de = {
18635
18633
  "dashboard.records.myDraft": "Meine Entwürfe",
18636
18634
  "dashboard.records.myRecords": "Meine Datensätze",
18637
18635
  "dashboard.records.search": "Suche nach \"{searchText}\"",
18638
- "dashboard.records.templates": "Vorlagen",
18639
18636
  "dashboard.records.userDetail": "Name",
18640
18637
  "dashboard.records.userEmail": "E-Mail",
18641
18638
  "dashboard.records.username": "Benutzername",
@@ -19026,6 +19023,7 @@ var de = {
19026
19023
  "record.action.download": "Herunterladen",
19027
19024
  "record.action.duplicate": "",
19028
19025
  "record.action.duplicating": "",
19026
+ "record.action.rollback": "",
19029
19027
  "record.action.view": "Anzeigen",
19030
19028
  "record.externalViewer.open": "In externem Kartenviewer öffnen",
19031
19029
  "record.feature.limit": "Die Ressource enthält mehr als {count} Features und kann hier nicht angezeigt werden.",
@@ -19148,6 +19146,8 @@ var de = {
19148
19146
  "search.error.recordNotFound": "Der Datensatz mit der Kennung \"{ id }\" konnte nicht gefunden werden.",
19149
19147
  "search.field.any.placeholder": "Suche Datensätze ...",
19150
19148
  "search.field.sortBy": "Sortieren nach:",
19149
+ "search.filters.availableServices.download": "",
19150
+ "search.filters.availableServices.view": "",
19151
19151
  "search.filters.changeDate": "Letzte Aktualisierung",
19152
19152
  "search.filters.clear": "Zurücksetzen",
19153
19153
  "search.filters.contact": "Kontakte",
@@ -19203,7 +19203,6 @@ var de = {
19203
19203
  "tooltip.url.open": "URL öffnen",
19204
19204
  "ui.readLess": "Weniger lesen",
19205
19205
  "ui.readMore": "Weiterlesen",
19206
- "wfs.aggregations.notsupported": "",
19207
19206
  "wfs.feature.limit": "Zu viele Features, um den WFS-Layer anzuzeigen!",
19208
19207
  "wfs.featuretype.notfound": "Kein passender Feature-Typ wurde im Dienst gefunden",
19209
19208
  "wfs.geojsongml.notsupported": "Dieser Dienst unterstützt das GeoJSON- oder GML-Format nicht",
@@ -19238,8 +19237,6 @@ var en = {
19238
19237
  "chart.type.lineSmooth": "smooth line chart",
19239
19238
  "chart.type.pie": "pie chart",
19240
19239
  "dashboard.catalog.allRecords": "Datasets",
19241
- "dashboard.catalog.contacts": "Contacts",
19242
- "dashboard.catalog.thesaurus": "Thesaurus",
19243
19240
  "dashboard.createRecord": "New dataset",
19244
19241
  "dashboard.importRecord": "Import",
19245
19242
  "dashboard.importRecord.importExternal": "Import an external file",
@@ -19252,21 +19249,12 @@ var en = {
19252
19249
  "dashboard.records.myDraft": "My drafts",
19253
19250
  "dashboard.records.myRecords": "My datasets",
19254
19251
  "dashboard.records.search": "Search for \"{searchText}\"",
19255
- "dashboard.records.templates": "Templates",
19256
19252
  "dashboard.records.userDetail": "Name",
19257
19253
  "dashboard.records.userEmail": "Email",
19258
19254
  "dashboard.records.username": "Username",
19259
19255
  "dashboard.records.users": "{count, plural, =1{user} other{users}}",
19260
19256
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "File format \n detection",
19261
- "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Gathering dataset \n information",
19262
- "datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n data",
19263
- "datafeeder.analysisProgressBar.subtitle": "The analysis may take several minutes, please wait.",
19264
- "datafeeder.analysisProgressBar.title": "Analysis in progress",
19265
- "datafeeder.datasetValidation.datasetInformation": "The provided dataset contains {number} entities",
19266
- "datafeeder.datasetValidation.submitButton": "OK, my data is correct",
19267
- "datafeeder.datasetValidation.title": "Make sure your data is correct",
19268
- "datafeeder.datasetValidation.unknown": " - ",
19269
- "datafeeder.datasetValidationCsv.explicitLineNumbers": "*The table must display the first 5 lines (excluding the header)<br>If this is not the case, check that the file is correctly formatted",
19257
+ "datafeeder.anaeditor.record.saveStatus.recordNotPublishedasetValidationCsv.explicitLineNumbers": "*The table must display the first 5 lines (excluding the header)<br>If this is not the case, check that the file is correctly formatted",
19270
19258
  "datafeeder.datasetValidationCsv.lineNumbers": "Sample of the first 5 lines* of the dataset:",
19271
19259
  "datafeeder.form.abstract": "How would you describe your dataset?",
19272
19260
  "datafeeder.form.datepicker": "Do you know when the dataset was created?",
@@ -19643,6 +19631,7 @@ var en = {
19643
19631
  "record.action.download": "Download",
19644
19632
  "record.action.duplicate": "Duplicate",
19645
19633
  "record.action.duplicating": "Duplicating...",
19634
+ "record.action.rollback": "Rollback",
19646
19635
  "record.action.view": "View",
19647
19636
  "record.externalViewer.open": "Open in the external map viewer",
19648
19637
  "record.feature.limit": "The resource contains more than {count} features and cannot be displayed here.",
@@ -19765,6 +19754,8 @@ var en = {
19765
19754
  "search.error.recordNotFound": "The dataset with identifier \"{ id }\" could not be found.",
19766
19755
  "search.field.any.placeholder": "Search datasets ...",
19767
19756
  "search.field.sortBy": "Sort by:",
19757
+ "search.filters.availableServices.download": "",
19758
+ "search.filters.availableServices.view": "",
19768
19759
  "search.filters.changeDate": "Updated",
19769
19760
  "search.filters.clear": "Reset",
19770
19761
  "search.filters.contact": "Contacts",
@@ -19820,7 +19811,6 @@ var en = {
19820
19811
  "tooltip.url.open": "Open URL",
19821
19812
  "ui.readLess": "Read less",
19822
19813
  "ui.readMore": "Read more",
19823
- "wfs.aggregations.notsupported": "Aggregations are currently not supported for WFS services",
19824
19814
  "wfs.feature.limit": "Too many features to display the WFS layer!",
19825
19815
  "wfs.featuretype.notfound": "No matching feature type was found in the service",
19826
19816
  "wfs.geojsongml.notsupported": "This service does not support the GeoJSON or GML format",
@@ -19855,8 +19845,6 @@ var es = {
19855
19845
  "chart.type.lineSmooth": "gráfico de líneas suave",
19856
19846
  "chart.type.pie": "gráfico circular",
19857
19847
  "dashboard.catalog.allRecords": "",
19858
- "dashboard.catalog.contacts": "",
19859
- "dashboard.catalog.thesaurus": "",
19860
19848
  "dashboard.createRecord": "",
19861
19849
  "dashboard.importRecord": "",
19862
19850
  "dashboard.importRecord.importExternal": "",
@@ -19869,7 +19857,6 @@ var es = {
19869
19857
  "dashboard.records.myDraft": "Mis borradores",
19870
19858
  "dashboard.records.myRecords": "Mis Registros",
19871
19859
  "dashboard.records.search": "Buscar \"{searchText}\"",
19872
- "dashboard.records.templates": "",
19873
19860
  "dashboard.records.userDetail": "",
19874
19861
  "dashboard.records.userEmail": "",
19875
19862
  "dashboard.records.username": "",
@@ -20260,6 +20247,7 @@ var es = {
20260
20247
  "record.action.download": "",
20261
20248
  "record.action.duplicate": "",
20262
20249
  "record.action.duplicating": "",
20250
+ "record.action.rollback": "",
20263
20251
  "record.action.view": "",
20264
20252
  "record.externalViewer.open": "",
20265
20253
  "record.feature.limit": "",
@@ -20382,6 +20370,8 @@ var es = {
20382
20370
  "search.error.recordNotFound": "",
20383
20371
  "search.field.any.placeholder": "",
20384
20372
  "search.field.sortBy": "",
20373
+ "search.filters.availableServices.download": "",
20374
+ "search.filters.availableServices.view": "",
20385
20375
  "search.filters.changeDate": "Última actualización",
20386
20376
  "search.filters.clear": "",
20387
20377
  "search.filters.contact": "",
@@ -20437,7 +20427,6 @@ var es = {
20437
20427
  "tooltip.url.open": "",
20438
20428
  "ui.readLess": "",
20439
20429
  "ui.readMore": "",
20440
- "wfs.aggregations.notsupported": "",
20441
20430
  "wfs.feature.limit": "",
20442
20431
  "wfs.featuretype.notfound": "",
20443
20432
  "wfs.geojsongml.notsupported": "",
@@ -20472,8 +20461,6 @@ var fr = {
20472
20461
  "chart.type.lineSmooth": "ligne lisse",
20473
20462
  "chart.type.pie": "camembert",
20474
20463
  "dashboard.catalog.allRecords": "Jeux de données",
20475
- "dashboard.catalog.contacts": "Annuaire",
20476
- "dashboard.catalog.thesaurus": "Thésaurus",
20477
20464
  "dashboard.createRecord": "Nouveau jeu de données",
20478
20465
  "dashboard.importRecord": "Importer",
20479
20466
  "dashboard.importRecord.importExternal": "Importer un jeu de données externe",
@@ -20486,7 +20473,6 @@ var fr = {
20486
20473
  "dashboard.records.myDraft": "Mes brouillons",
20487
20474
  "dashboard.records.myRecords": "Mes jeux de données",
20488
20475
  "dashboard.records.search": "Résultats pour \"{searchText}\"",
20489
- "dashboard.records.templates": "Modèles pré-remplis",
20490
20476
  "dashboard.records.userDetail": "Nom",
20491
20477
  "dashboard.records.userEmail": "Email",
20492
20478
  "dashboard.records.username": "Nom d'utilisateur",
@@ -20613,7 +20599,7 @@ var fr = {
20613
20599
  "domain.contact.role.point_of_contact": "Point de contact",
20614
20600
  "domain.contact.role.principal_investigator": "Chercheur principal",
20615
20601
  "domain.contact.role.processor": "Processeur",
20616
- "domain.contact.role.publisher": "Éditeur",
20602
+ "domain.contact.role.publisher": "Producteur",
20617
20603
  "domain.contact.role.resource_provider": "Fournisseur",
20618
20604
  "domain.contact.role.rights_holder": "Détenteur des droits",
20619
20605
  "domain.contact.role.sponsor": "Sponsor",
@@ -20677,7 +20663,7 @@ var fr = {
20677
20663
  "editor.record.form.constraint.otherConstraints": "Autres contraintes",
20678
20664
  "editor.record.form.constraint.securityConstraints": "Contraintes de sécurité",
20679
20665
  "editor.record.form.draft.updateAlert": "Depuis la création de ce brouillon, ce jeu de données a été modifié le { date } par { user }. Publier votre version peut supprimer ses modifications. Pour éviter cela, vous pouvez annuler vos changements, ou publier votre version en connaissance de cause.",
20680
- "editor.record.form.field.abstract": "Résumé",
20666
+ "editor.record.form.field.abstract": "Description",
20681
20667
  "editor.record.form.field.constraintsShortcuts": "",
20682
20668
  "editor.record.form.field.contacts.noContact": "Veuillez renseigner au moins un point de contact.",
20683
20669
  "editor.record.form.field.contacts.placeholder": "Choisissez un contact",
@@ -20719,14 +20705,14 @@ var fr = {
20719
20705
  "editor.record.form.keywords.place.placeholder": "Rechercher une localisation par mot-clé",
20720
20706
  "editor.record.form.keywords.place.withoutExtent": "Ce mot-clé n'a pas de localisation géographique associée",
20721
20707
  "editor.record.form.keywords.placeholder": "Sélectionnez un mot-clé",
20722
- "editor.record.form.license.cc-by": "",
20723
- "editor.record.form.license.cc-by-sa": "",
20724
- "editor.record.form.license.cc-zero": "",
20708
+ "editor.record.form.license.cc-by": "Creative Commons CC-BY",
20709
+ "editor.record.form.license.cc-by-sa": "Creative Commons CC-BY-SA",
20710
+ "editor.record.form.license.cc-zero": "Creative Commons CC-0",
20725
20711
  "editor.record.form.license.etalab": "Licence Ouverte (Etalab)",
20726
20712
  "editor.record.form.license.etalab-v2": "Licence Ouverte v2.0 (Etalab)",
20727
- "editor.record.form.license.odbl": "",
20728
- "editor.record.form.license.odc-by": "",
20729
- "editor.record.form.license.pddl": "",
20713
+ "editor.record.form.license.odbl": "Open Data Commons ODbL",
20714
+ "editor.record.form.license.odc-by": "Open Data Commons ODC-By",
20715
+ "editor.record.form.license.pddl": "Open Data Commons PDDL",
20730
20716
  "editor.record.form.license.unknown": "Inconnue ou absente",
20731
20717
  "editor.record.form.page.accessAndContact": "Informations pour l'utilisation",
20732
20718
  "editor.record.form.page.description": "Description du jeu de données",
@@ -20779,7 +20765,7 @@ var fr = {
20779
20765
  "editor.record.resourceError.closeMessage": "Compris",
20780
20766
  "editor.record.resourceError.title": "Erreur avec les pièces jointes",
20781
20767
  "editor.record.saveStatus.draftWithChangesPending": "Sauvegardé - Modifications non publiées",
20782
- "editor.record.saveStatus.recordNotPublished": "",
20768
+ "editor.record.saveStatus.recordNotPublished": "Sauvegardé - non publié",
20783
20769
  "editor.record.saveStatus.recordUpToDate": "Sauvegardé - Jeu de données à jour",
20784
20770
  "editor.record.undo.confirmation.cancelText": "Garder les modifications",
20785
20771
  "editor.record.undo.confirmation.confirmText": "Retirer les modifications",
@@ -20789,7 +20775,7 @@ var fr = {
20789
20775
  "editor.record.undo.tooltip.enabled": "Cliquer sur ce bouton pour annuler les modifications apportées à ce jeu de données",
20790
20776
  "editor.record.upToDate": "Ce jeu de données est à jour",
20791
20777
  "editor.sidebar.logout": "Se déconnecter",
20792
- "editor.sidebar.menu.editor": "",
20778
+ "editor.sidebar.menu.editor": "Editeur",
20793
20779
  "editor.temporary.disabled": "Pas encore implémenté",
20794
20780
  "externalviewer.dataset.unnamed": "Couche du datahub",
20795
20781
  "facets.block.title.OrgForResource": "Organisation",
@@ -20837,7 +20823,7 @@ var fr = {
20837
20823
  "map.add.layer": "Ajouter une couche",
20838
20824
  "map.add.layer.catalog": "Du catalogue",
20839
20825
  "map.add.layer.file": "À partir d'un fichier",
20840
- "map.add.layer.ogc.api": "",
20826
+ "map.add.layer.ogc.api": "Depuis un service OGC API",
20841
20827
  "map.add.layer.wfs": "Depuis un service WFS",
20842
20828
  "map.add.layer.wms": "Depuis un service WMS",
20843
20829
  "map.addFromFile.placeholder": "Cliquez ou déposez un fichier ici",
@@ -20850,7 +20836,7 @@ var fr = {
20850
20836
  "map.loading.data": "Chargement des données...",
20851
20837
  "map.loading.service": "Chargement du service...",
20852
20838
  "map.navigation.message": "Veuillez utiliser CTRL + souris (ou deux doigts sur mobile) pour naviguer sur la carte",
20853
- "map.ogc.urlInput.hint": "",
20839
+ "map.ogc.urlInput.hint": "Entrez l'URL du service OGC API",
20854
20840
  "map.select.layer": "Source de données",
20855
20841
  "map.wfs.urlInput.hint": "Entrez l'URL du service WFS",
20856
20842
  "map.wms.urlInput.hint": "Entrez l'URL du service WMS",
@@ -20877,6 +20863,7 @@ var fr = {
20877
20863
  "record.action.download": "Télécharger",
20878
20864
  "record.action.duplicate": "Dupliquer",
20879
20865
  "record.action.duplicating": "Duplication...",
20866
+ "record.action.rollback": "Restaurer",
20880
20867
  "record.action.view": "Voir",
20881
20868
  "record.externalViewer.open": "Ouvrir dans le visualiseur externe",
20882
20869
  "record.feature.limit": "La ressource contient plus de {count} entités et ne peut pas être affichée ici.",
@@ -20999,6 +20986,8 @@ var fr = {
20999
20986
  "search.error.recordNotFound": "Cette donnée n'a pu être trouvée.",
21000
20987
  "search.field.any.placeholder": "Rechercher un jeu de données...",
21001
20988
  "search.field.sortBy": "Trier par :",
20989
+ "search.filters.availableServices.download": "",
20990
+ "search.filters.availableServices.view": "",
21002
20991
  "search.filters.changeDate": "Mise à jour",
21003
20992
  "search.filters.clear": "Réinitialiser",
21004
20993
  "search.filters.contact": "Contacts",
@@ -21054,7 +21043,6 @@ var fr = {
21054
21043
  "tooltip.url.open": "Ouvrir l'URL",
21055
21044
  "ui.readLess": "Réduire",
21056
21045
  "ui.readMore": "Lire la suite",
21057
- "wfs.aggregations.notsupported": "Agrégations non supportées pour les services WFS",
21058
21046
  "wfs.feature.limit": "Trop d'objets pour afficher la couche WFS !",
21059
21047
  "wfs.featuretype.notfound": "La classe d'objets n'a pas été trouvée dans le service",
21060
21048
  "wfs.geojsongml.notsupported": "Le service ne supporte pas le format GeoJSON ou GML",
@@ -21089,8 +21077,6 @@ var it = {
21089
21077
  "chart.type.lineSmooth": "grafico a linea liscia",
21090
21078
  "chart.type.pie": "grafico a torta",
21091
21079
  "dashboard.catalog.allRecords": "Datasets",
21092
- "dashboard.catalog.contacts": "Contatti",
21093
- "dashboard.catalog.thesaurus": "Thesauri",
21094
21080
  "dashboard.createRecord": "Crea un record",
21095
21081
  "dashboard.importRecord": "Importare",
21096
21082
  "dashboard.importRecord.importExternal": "Importare un dataset esterno",
@@ -21103,7 +21089,6 @@ var it = {
21103
21089
  "dashboard.records.myDraft": "Le mie bozze",
21104
21090
  "dashboard.records.myRecords": "I miei dati",
21105
21091
  "dashboard.records.search": "Risultati per \"{searchText}\"",
21106
- "dashboard.records.templates": "Modelli precompilati",
21107
21092
  "dashboard.records.userDetail": "Nome",
21108
21093
  "dashboard.records.userEmail": "Email",
21109
21094
  "dashboard.records.username": "Nome utente",
@@ -21274,9 +21259,9 @@ var it = {
21274
21259
  "editor.record.deleteError.title": "Errore durante l'eliminazione",
21275
21260
  "editor.record.deleteSuccess.body": "Il dataset è stato eliminato correttamente",
21276
21261
  "editor.record.deleteSuccess.title": "Eliminazione riuscita",
21277
- "editor.record.error.back": "",
21278
- "editor.record.error.explanation": "",
21279
- "editor.record.error.message": "",
21262
+ "editor.record.error.back": "Ritorna al catalogo",
21263
+ "editor.record.error.explanation": "Forse non ha accesso a questa pagina oppure questo collegamento potrebbe non essere valido.",
21264
+ "editor.record.error.message": "Qualcosa è andato storto",
21280
21265
  "editor.record.form.bottomButtons.comeBackLater": "Ritorna più tardi",
21281
21266
  "editor.record.form.bottomButtons.next": "Avanti",
21282
21267
  "editor.record.form.bottomButtons.previous": "Precedente",
@@ -21336,18 +21321,18 @@ var it = {
21336
21321
  "editor.record.form.keywords.place.placeholder": "Cerca una posizione per parola chiave",
21337
21322
  "editor.record.form.keywords.place.withoutExtent": "Questa parola chiave non ha una posizione geografica associata",
21338
21323
  "editor.record.form.keywords.placeholder": "Seleziona una parola chiave",
21339
- "editor.record.form.license.cc-by": "",
21340
- "editor.record.form.license.cc-by-sa": "",
21341
- "editor.record.form.license.cc-zero": "",
21324
+ "editor.record.form.license.cc-by": "Creative Commons CC-BY",
21325
+ "editor.record.form.license.cc-by-sa": "Creative Commons CC-BY-SA",
21326
+ "editor.record.form.license.cc-zero": "Creative Commons CC-0",
21342
21327
  "editor.record.form.license.etalab": "Licenza aperta (Etalab)",
21343
21328
  "editor.record.form.license.etalab-v2": "Licenza aperta v2.0 (Etalab)",
21344
- "editor.record.form.license.odbl": "",
21345
- "editor.record.form.license.odc-by": "",
21346
- "editor.record.form.license.pddl": "",
21329
+ "editor.record.form.license.odbl": "Open Data Commons ODbL",
21330
+ "editor.record.form.license.odc-by": "Open Data Commons ODC-By",
21331
+ "editor.record.form.license.pddl": "Open Data Commons PDDL",
21347
21332
  "editor.record.form.license.unknown": "Sconosciuto o assente",
21348
21333
  "editor.record.form.page.accessAndContact": "Informazioni per l'uso",
21349
21334
  "editor.record.form.page.description": "Descrizione del dataset",
21350
- "editor.record.form.page.resources": "",
21335
+ "editor.record.form.page.resources": "Risorse",
21351
21336
  "editor.record.form.section.about.description": "Queste informazioni riguardano il dataset",
21352
21337
  "editor.record.form.section.about.label": "Informazioni sul dataset",
21353
21338
  "editor.record.form.section.annexes.description": "Gli allegati sono risorse facoltative. Sono allegati al dataset e aiutano a comprendere meglio i dati (avviso, ecc.).",
@@ -21374,7 +21359,7 @@ var it = {
21374
21359
  "editor.record.loadError.body": "Impossibile caricare il dataset:",
21375
21360
  "editor.record.loadError.closeMessage": "Capito",
21376
21361
  "editor.record.loadError.title": "Errore durante il caricamento",
21377
- "editor.record.lock.reason": "",
21362
+ "editor.record.lock.reason": "Non è un editore di uno dei gruppi autorizzati",
21378
21363
  "editor.record.onlineResource.protocol.other": "Altro",
21379
21364
  "editor.record.onlineResourceError.body": "Ha successo un'errore durante l'aggiunta della risorsa:",
21380
21365
  "editor.record.onlineResourceError.closeMessage": "Capito",
@@ -21396,7 +21381,7 @@ var it = {
21396
21381
  "editor.record.resourceError.closeMessage": "Capito",
21397
21382
  "editor.record.resourceError.title": "Errore con gli allegati",
21398
21383
  "editor.record.saveStatus.draftWithChangesPending": "Salvato - Modifiche non pubblicate",
21399
- "editor.record.saveStatus.recordNotPublished": "",
21384
+ "editor.record.saveStatus.recordNotPublished": "Salvato - non pubblicato",
21400
21385
  "editor.record.saveStatus.recordUpToDate": "Salvato - Dataset aggiornato",
21401
21386
  "editor.record.undo.confirmation.cancelText": "Mantieni le modifiche",
21402
21387
  "editor.record.undo.confirmation.confirmText": "Annulla le modifiche",
@@ -21406,7 +21391,7 @@ var it = {
21406
21391
  "editor.record.undo.tooltip.enabled": "Fare clic su questo pulsante per annullare le modifiche apportate a questo dataset",
21407
21392
  "editor.record.upToDate": "Questo dataset è aggiornato",
21408
21393
  "editor.sidebar.logout": "Esci",
21409
- "editor.sidebar.menu.editor": "",
21394
+ "editor.sidebar.menu.editor": "Editore",
21410
21395
  "editor.temporary.disabled": "Non ancora implementato",
21411
21396
  "externalviewer.dataset.unnamed": "Layer del datahub",
21412
21397
  "facets.block.title.OrgForResource": "Organizzazione",
@@ -21454,7 +21439,7 @@ var it = {
21454
21439
  "map.add.layer": "Aggiungere un layer",
21455
21440
  "map.add.layer.catalog": "Dal catalogo",
21456
21441
  "map.add.layer.file": "Da un file",
21457
- "map.add.layer.ogc.api": "",
21442
+ "map.add.layer.ogc.api": "Da OGC API",
21458
21443
  "map.add.layer.wfs": "Da un WFS",
21459
21444
  "map.add.layer.wms": "Da un WMS",
21460
21445
  "map.addFromFile.placeholder": "Clicca o trascina un file qui",
@@ -21467,7 +21452,7 @@ var it = {
21467
21452
  "map.loading.data": "Caricamento dati...",
21468
21453
  "map.loading.service": "Caricamento del servizio...",
21469
21454
  "map.navigation.message": "Si prega di utilizzare CTRL + mouse (o due dita su mobile) per navigare sulla mappa",
21470
- "map.ogc.urlInput.hint": "",
21455
+ "map.ogc.urlInput.hint": "Inserisci URL del servizio OGC API",
21471
21456
  "map.select.layer": "Sorgente dati",
21472
21457
  "map.wfs.urlInput.hint": "Inserisci URL del servizio WFS",
21473
21458
  "map.wms.urlInput.hint": "Inserisci URL del servizio WMS",
@@ -21493,7 +21478,8 @@ var it = {
21493
21478
  "record.action.delete": "Elimina",
21494
21479
  "record.action.download": "Scarica",
21495
21480
  "record.action.duplicate": "Duplicato",
21496
- "record.action.duplicating": "",
21481
+ "record.action.duplicating": "Duplicazione",
21482
+ "record.action.rollback": "Annulla",
21497
21483
  "record.action.view": "Visualizza",
21498
21484
  "record.externalViewer.open": "Aprire nel visualizzatore esterno",
21499
21485
  "record.feature.limit": "La risorsa contiene più di {count} funzionalità e non può essere visualizzata qui.",
@@ -21616,6 +21602,8 @@ var it = {
21616
21602
  "search.error.recordNotFound": "Impossibile trovare questi dati.",
21617
21603
  "search.field.any.placeholder": "Cerca un dataset...",
21618
21604
  "search.field.sortBy": "Ordina per:",
21605
+ "search.filters.availableServices.download": "",
21606
+ "search.filters.availableServices.view": "",
21619
21607
  "search.filters.changeDate": "Aggiornato",
21620
21608
  "search.filters.clear": "Ripristina",
21621
21609
  "search.filters.contact": "Contatti",
@@ -21671,7 +21659,7 @@ var it = {
21671
21659
  "tooltip.url.open": "Aprire l'URL",
21672
21660
  "ui.readLess": "Ridurre",
21673
21661
  "ui.readMore": "Leggere di più",
21674
- "wfs.aggregations.notsupported": "",
21662
+ "wfs.aggregations.notsupported": "Aggregazioni non supportate per i servizi WFS",
21675
21663
  "wfs.feature.limit": "Troppi oggetti per visualizzare il WFS layer!",
21676
21664
  "wfs.featuretype.notfound": "La classe di oggetto non è stata trovata nel servizio",
21677
21665
  "wfs.geojsongml.notsupported": "Il servizio non supporta il formato GeoJSON o GML",
@@ -21706,8 +21694,6 @@ var nl = {
21706
21694
  "chart.type.lineSmooth": "glad lijndiagram",
21707
21695
  "chart.type.pie": "cirkeldiagram",
21708
21696
  "dashboard.catalog.allRecords": "",
21709
- "dashboard.catalog.contacts": "",
21710
- "dashboard.catalog.thesaurus": "",
21711
21697
  "dashboard.createRecord": "",
21712
21698
  "dashboard.importRecord": "",
21713
21699
  "dashboard.importRecord.importExternal": "",
@@ -21720,7 +21706,6 @@ var nl = {
21720
21706
  "dashboard.records.myDraft": "Mijn concepten",
21721
21707
  "dashboard.records.myRecords": "Mijn Records",
21722
21708
  "dashboard.records.search": "Zoeken naar \"{searchText}\"",
21723
- "dashboard.records.templates": "",
21724
21709
  "dashboard.records.userDetail": "",
21725
21710
  "dashboard.records.userEmail": "",
21726
21711
  "dashboard.records.username": "",
@@ -22111,6 +22096,7 @@ var nl = {
22111
22096
  "record.action.download": "",
22112
22097
  "record.action.duplicate": "",
22113
22098
  "record.action.duplicating": "",
22099
+ "record.action.rollback": "",
22114
22100
  "record.action.view": "",
22115
22101
  "record.externalViewer.open": "",
22116
22102
  "record.feature.limit": "",
@@ -22233,6 +22219,8 @@ var nl = {
22233
22219
  "search.error.recordNotFound": "",
22234
22220
  "search.field.any.placeholder": "",
22235
22221
  "search.field.sortBy": "",
22222
+ "search.filters.availableServices.download": "",
22223
+ "search.filters.availableServices.view": "",
22236
22224
  "search.filters.changeDate": "",
22237
22225
  "search.filters.clear": "",
22238
22226
  "search.filters.contact": "",
@@ -22288,7 +22276,6 @@ var nl = {
22288
22276
  "tooltip.url.open": "",
22289
22277
  "ui.readLess": "",
22290
22278
  "ui.readMore": "",
22291
- "wfs.aggregations.notsupported": "",
22292
22279
  "wfs.feature.limit": "",
22293
22280
  "wfs.featuretype.notfound": "",
22294
22281
  "wfs.geojsongml.notsupported": "",
@@ -22323,8 +22310,6 @@ var pt = {
22323
22310
  "chart.type.lineSmooth": "gráfico de linha suave",
22324
22311
  "chart.type.pie": "gráfico de pizza",
22325
22312
  "dashboard.catalog.allRecords": "",
22326
- "dashboard.catalog.contacts": "",
22327
- "dashboard.catalog.thesaurus": "",
22328
22313
  "dashboard.createRecord": "",
22329
22314
  "dashboard.importRecord": "",
22330
22315
  "dashboard.importRecord.importExternal": "",
@@ -22337,7 +22322,6 @@ var pt = {
22337
22322
  "dashboard.records.myDraft": "Meus rascunhos",
22338
22323
  "dashboard.records.myRecords": "Meus Registros",
22339
22324
  "dashboard.records.search": "Buscar por \"{searchText}\"",
22340
- "dashboard.records.templates": "",
22341
22325
  "dashboard.records.userDetail": "",
22342
22326
  "dashboard.records.userEmail": "",
22343
22327
  "dashboard.records.username": "",
@@ -22728,6 +22712,7 @@ var pt = {
22728
22712
  "record.action.download": "",
22729
22713
  "record.action.duplicate": "",
22730
22714
  "record.action.duplicating": "",
22715
+ "record.action.rollback": "",
22731
22716
  "record.action.view": "",
22732
22717
  "record.externalViewer.open": "",
22733
22718
  "record.feature.limit": "",
@@ -22850,6 +22835,8 @@ var pt = {
22850
22835
  "search.error.recordNotFound": "",
22851
22836
  "search.field.any.placeholder": "",
22852
22837
  "search.field.sortBy": "",
22838
+ "search.filters.availableServices.download": "",
22839
+ "search.filters.availableServices.view": "",
22853
22840
  "search.filters.changeDate": "",
22854
22841
  "search.filters.clear": "",
22855
22842
  "search.filters.contact": "",
@@ -22905,7 +22892,6 @@ var pt = {
22905
22892
  "tooltip.url.open": "",
22906
22893
  "ui.readLess": "",
22907
22894
  "ui.readMore": "",
22908
- "wfs.aggregations.notsupported": "",
22909
22895
  "wfs.feature.limit": "",
22910
22896
  "wfs.featuretype.notfound": "",
22911
22897
  "wfs.geojsongml.notsupported": "",
@@ -23092,6 +23078,16 @@ class Gn4FieldMapper {
23092
23078
  isOpenData: (output, source) => this.addExtra({
23093
23079
  isOpenData: selectField(source, 'isOpenData') !== 'false',
23094
23080
  }, output),
23081
+ featureTypes: (output, source) => this.addExtra({
23082
+ featureTypes: selectField(source, 'featureTypes'),
23083
+ }, output),
23084
+ related: (output, source) => {
23085
+ const fcatSource = selectField(getFirstValue(selectField(selectField(source, 'related'), 'fcats')), '_source');
23086
+ const featureCatalogIdentifier = selectField(fcatSource, 'uuid');
23087
+ return featureCatalogIdentifier
23088
+ ? this.addExtra({ featureCatalogIdentifier }, output)
23089
+ : output;
23090
+ },
23095
23091
  isPublishedToAll: (output, source) => this.addExtra({
23096
23092
  isPublishedToAll: selectField(source, 'isPublishedToAll'),
23097
23093
  }, output),
@@ -23617,16 +23613,26 @@ class ElasticsearchService {
23617
23613
  ].filter(Boolean);
23618
23614
  return queryParts.length > 0 ? queryParts : undefined;
23619
23615
  }
23616
+ mustNotFilters() {
23617
+ return [
23618
+ {
23619
+ ...this.queryFilterOnValues('resourceType', [
23620
+ 'service',
23621
+ 'map',
23622
+ 'map/static',
23623
+ 'mapDigital',
23624
+ ]),
23625
+ },
23626
+ {
23627
+ query_string: {
23628
+ query: 'resourceType:featureCatalog AND !resourceType:dataset AND !cl_level.key:dataset',
23629
+ },
23630
+ },
23631
+ ];
23632
+ }
23620
23633
  buildPayloadQuery({ any, ...fieldSearchFilters }, configFilters, uuids, geometry) {
23621
23634
  const must = [];
23622
- const must_not = {
23623
- ...this.queryFilterOnValues('resourceType', [
23624
- 'service',
23625
- 'map',
23626
- 'map/static',
23627
- 'mapDigital',
23628
- ]),
23629
- };
23635
+ const must_not = this.mustNotFilters();
23630
23636
  const should = [];
23631
23637
  const filter = [this.queryFilterOnValues('isTemplate', 'n')];
23632
23638
  if (any) {
@@ -23712,14 +23718,7 @@ class ElasticsearchService {
23712
23718
  },
23713
23719
  },
23714
23720
  ],
23715
- must_not: {
23716
- ...this.queryFilterOnValues('resourceType', [
23717
- 'service',
23718
- 'map',
23719
- 'map/static',
23720
- 'mapDigital',
23721
- ]),
23722
- },
23721
+ must_not: this.mustNotFilters(),
23723
23722
  },
23724
23723
  },
23725
23724
  _source: ['resourceTitleObject', 'uuid'],
@@ -23936,9 +23935,29 @@ class Gn4Repository {
23936
23935
  }
23937
23936
  getRecord(uniqueIdentifier) {
23938
23937
  return this.gn4SearchApi
23939
- .search('bucket', null, JSON.stringify(this.gn4SearchHelper.getMetadataByIdPayload(uniqueIdentifier)))
23938
+ .search('bucket', ['fcats'], JSON.stringify(this.gn4SearchHelper.getMetadataByIdPayload(uniqueIdentifier)))
23940
23939
  .pipe(map$1((results) => results.hits.hits[0]), switchMap((record) => record ? this.gn4Mapper.readRecord(record) : of(null)));
23941
23940
  }
23941
+ getFeatureCatalog(record, visited = new Set() // prevent looping
23942
+ ) {
23943
+ if (record.extras &&
23944
+ record.extras['featureTypes'] &&
23945
+ record.extras['featureTypes'][0]?.attributeTable &&
23946
+ Array.isArray(record.extras['featureTypes'][0].attributeTable)) {
23947
+ return of({
23948
+ attributes: record.extras['featureTypes'][0]?.attributeTable?.map((attr) => ({
23949
+ name: attr.name,
23950
+ title: attr.definition,
23951
+ })),
23952
+ });
23953
+ }
23954
+ const featureCatalogIdentifier = record.extras['featureCatalogIdentifier'];
23955
+ if (featureCatalogIdentifier && !visited.has(featureCatalogIdentifier)) {
23956
+ visited.add(featureCatalogIdentifier);
23957
+ return this.getRecord(featureCatalogIdentifier).pipe(switchMap((record) => record ? this.getFeatureCatalog(record, visited) : of(null)));
23958
+ }
23959
+ return of(null);
23960
+ }
23942
23961
  getSimilarRecords(similarTo) {
23943
23962
  return this.gn4SearchApi
23944
23963
  .search('bucket', null, JSON.stringify(this.gn4SearchHelper.getRelatedRecordPayload(similarTo, 3)))
@@ -26684,7 +26703,12 @@ class AutocompleteComponent {
26684
26703
  const suggestionsFromAction = merge(newValue$.pipe(filter((value) => value.length >= this.minCharacterCount)), externalValueChange$).pipe(tap$1(() => {
26685
26704
  this.searching = true;
26686
26705
  this.error = null;
26687
- }), switchMap$1((value) => this.action(value)), catchError((error) => {
26706
+ }), switchMap$1((value) => this.action(value)), tap$1((suggestions) => {
26707
+ // forcing the panel to open if there are suggestions
26708
+ if (suggestions.length > 0) {
26709
+ this.triggerRef?.openPanel();
26710
+ }
26711
+ }), catchError((error) => {
26688
26712
  this.error = error.message;
26689
26713
  return of([]);
26690
26714
  }), finalize(() => (this.searching = false)));
@@ -30094,6 +30118,7 @@ class RecordApiFormComponent {
30094
30118
  maxFeatures: limit !== '-1' ? Number(limit) : undefined,
30095
30119
  limit: limit !== '-1' ? Number(limit) : -1,
30096
30120
  offset: offset !== '' ? Number(offset) : undefined,
30121
+ outputCrs: format === ('application/json' || 'geojson') ? 'EPSG:4326' : undefined,
30097
30122
  };
30098
30123
  if (this.endpoint instanceof WfsEndpoint) {
30099
30124
  delete options.limit;
@@ -30225,6 +30250,77 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30225
30250
  type: Input
30226
30251
  }] } });
30227
30252
 
30253
+ class ApplicationBannerComponent {
30254
+ constructor() {
30255
+ this.closeEnabled = false;
30256
+ this.extraClass = '';
30257
+ this.icon = '';
30258
+ this.msgClass = '';
30259
+ this.bannerOpen = true;
30260
+ }
30261
+ set type(value) {
30262
+ switch (value) {
30263
+ case 'primary':
30264
+ this.msgClass = 'bg-primary-darkest border-primary text-white';
30265
+ this.icon = 'matWarning';
30266
+ break;
30267
+ case 'light':
30268
+ this.msgClass =
30269
+ 'bg-primary-opacity-10 border-primary-lightest text-black';
30270
+ this.icon = 'matInfoOutline';
30271
+ break;
30272
+ case 'secondary':
30273
+ default:
30274
+ this.msgClass = 'bg-primary-opacity-50 border-primary-darker text-black';
30275
+ this.icon = 'matWarningAmberOutline';
30276
+ break;
30277
+ }
30278
+ }
30279
+ get classList() {
30280
+ if (this.message.length > 200) {
30281
+ return `${this.msgClass} ${this.extraClass} overflow-y-scroll items-start`;
30282
+ }
30283
+ return `${this.msgClass} ${this.extraClass} items-center`;
30284
+ }
30285
+ closeMessage() {
30286
+ this.bannerOpen = false;
30287
+ }
30288
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApplicationBannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
30289
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ApplicationBannerComponent, isStandalone: true, selector: "gn-ui-application-banner", inputs: { message: "message", title: "title", closeEnabled: "closeEnabled", extraClass: "extraClass", icon: "icon", type: "type" }, providers: [
30290
+ provideIcons({
30291
+ matWarningAmberOutline,
30292
+ matInfoOutline,
30293
+ matCloseOutline,
30294
+ matWarning,
30295
+ }),
30296
+ provideNgIconsConfig({ size: '1.5em' }),
30297
+ ], ngImport: i0, template: "<div\n *ngIf=\"message && bannerOpen\"\n class=\"absolute left-0 right-0 text-wrap bg-white mt-4 max-h-24\"\n>\n <div\n class=\"flex flex-row py-2.5 px-5 gap-5 justify-start border max-h-20\"\n [ngClass]=\"classList\"\n >\n <div [ngClass]=\"message.length > 200 ? 'pt-5' : 'pt-1'\">\n <ng-icon [name]=\"icon\"></ng-icon>\n </div>\n <div class=\"flex flex-col justify-start gap-2.5\">\n <span *ngIf=\"title\" class=\"font-bold\">{{ title }}</span>\n <span class=\"font-medium max-w-2xl\" [innerHTML]=\"message\"></span>\n </div>\n <button\n *ngIf=\"closeEnabled\"\n class=\"self-start\"\n type=\"button\"\n (click)=\"closeMessage()\"\n >\n <ng-icon name=\"matCloseOutline\"> </ng-icon>\n </button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
30298
+ }
30299
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApplicationBannerComponent, decorators: [{
30300
+ type: Component,
30301
+ args: [{ selector: 'gn-ui-application-banner', standalone: true, imports: [CommonModule, NgIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
30302
+ provideIcons({
30303
+ matWarningAmberOutline,
30304
+ matInfoOutline,
30305
+ matCloseOutline,
30306
+ matWarning,
30307
+ }),
30308
+ provideNgIconsConfig({ size: '1.5em' }),
30309
+ ], template: "<div\n *ngIf=\"message && bannerOpen\"\n class=\"absolute left-0 right-0 text-wrap bg-white mt-4 max-h-24\"\n>\n <div\n class=\"flex flex-row py-2.5 px-5 gap-5 justify-start border max-h-20\"\n [ngClass]=\"classList\"\n >\n <div [ngClass]=\"message.length > 200 ? 'pt-5' : 'pt-1'\">\n <ng-icon [name]=\"icon\"></ng-icon>\n </div>\n <div class=\"flex flex-col justify-start gap-2.5\">\n <span *ngIf=\"title\" class=\"font-bold\">{{ title }}</span>\n <span class=\"font-medium max-w-2xl\" [innerHTML]=\"message\"></span>\n </div>\n <button\n *ngIf=\"closeEnabled\"\n class=\"self-start\"\n type=\"button\"\n (click)=\"closeMessage()\"\n >\n <ng-icon name=\"matCloseOutline\"> </ng-icon>\n </button>\n </div>\n</div>\n" }]
30310
+ }], propDecorators: { message: [{
30311
+ type: Input
30312
+ }], title: [{
30313
+ type: Input
30314
+ }], closeEnabled: [{
30315
+ type: Input
30316
+ }], extraClass: [{
30317
+ type: Input
30318
+ }], icon: [{
30319
+ type: Input
30320
+ }], type: [{
30321
+ type: Input
30322
+ }] } });
30323
+
30228
30324
  class UiElementsModule {
30229
30325
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
30230
30326
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, declarations: [AvatarComponent, UserPreviewComponent], imports: [CommonModule,
@@ -30242,11 +30338,13 @@ class UiElementsModule {
30242
30338
  BadgeComponent,
30243
30339
  MaxLinesComponent,
30244
30340
  TextInputComponent,
30245
- ImageInputComponent], exports: [ThumbnailComponent,
30341
+ ImageInputComponent,
30342
+ ApplicationBannerComponent], exports: [ThumbnailComponent,
30246
30343
  AvatarComponent,
30247
30344
  UserPreviewComponent,
30248
30345
  MarkdownParserComponent,
30249
- ImageInputComponent] }); }
30346
+ ImageInputComponent,
30347
+ ApplicationBannerComponent] }); }
30250
30348
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, providers: [
30251
30349
  provideNgIconsConfig({
30252
30350
  size: '1.5em',
@@ -30265,7 +30363,8 @@ class UiElementsModule {
30265
30363
  BadgeComponent,
30266
30364
  MaxLinesComponent,
30267
30365
  TextInputComponent,
30268
- ImageInputComponent] }); }
30366
+ ImageInputComponent,
30367
+ ApplicationBannerComponent] }); }
30269
30368
  }
30270
30369
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UiElementsModule, decorators: [{
30271
30370
  type: NgModule,
@@ -30289,6 +30388,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30289
30388
  MaxLinesComponent,
30290
30389
  TextInputComponent,
30291
30390
  ImageInputComponent,
30391
+ ApplicationBannerComponent,
30292
30392
  ],
30293
30393
  providers: [
30294
30394
  provideNgIconsConfig({
@@ -30302,6 +30402,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30302
30402
  UserPreviewComponent,
30303
30403
  MarkdownParserComponent,
30304
30404
  ImageInputComponent,
30405
+ ApplicationBannerComponent,
30305
30406
  ],
30306
30407
  }]
30307
30408
  }] });
@@ -30503,6 +30604,7 @@ class ActionMenuComponent {
30503
30604
  this.duplicate = new EventEmitter();
30504
30605
  this.delete = new EventEmitter();
30505
30606
  this.closeActionMenu = new EventEmitter();
30607
+ this.rollback = new EventEmitter();
30506
30608
  this.sectionDisplayed = 'mainMenu';
30507
30609
  }
30508
30610
  openMenu() {
@@ -30513,11 +30615,16 @@ class ActionMenuComponent {
30513
30615
  this.cdr.markForCheck();
30514
30616
  }
30515
30617
  displayDeleteMenu() {
30516
- this.sectionDisplayed = 'deleteMenu';
30618
+ if (this.isDraftPage) {
30619
+ this.sectionDisplayed = 'rollbackMenu';
30620
+ }
30621
+ else {
30622
+ this.sectionDisplayed = 'deleteMenu';
30623
+ }
30517
30624
  this.cdr.markForCheck();
30518
30625
  }
30519
30626
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ActionMenuComponent, deps: [{ token: i1$b.MatDialog }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
30520
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ActionMenuComponent, isStandalone: true, selector: "gn-ui-action-menu", inputs: { canDuplicate: "canDuplicate", canDelete: "canDelete" }, outputs: { duplicate: "duplicate", delete: "delete", closeActionMenu: "closeActionMenu" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<ng-container [ngSwitch]=\"sectionDisplayed\">\n <ng-container *ngSwitchCase=\"'mainMenu'\">\n <div\n data-test=\"mainMenuSection\"\n class=\"mt-2 border border-gray-100 p-2 flex items-center bg-white shadow-2xl rounded-2xl\"\n >\n <ul class=\"flex flex-col gap-2 w-full\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"duplicate.emit()\"\n [disabled]=\"!canDuplicate\"\n data-test=\"record-menu-duplicate-button\"\n >\n <span *ngIf=\"canDuplicate\" translate>record.action.duplicate</span>\n <span *ngIf=\"!canDuplicate\" translate\n >record.action.duplicating</span\n ></gn-ui-button\n >\n <gn-ui-button\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"displayDeleteMenu()\"\n [disabled]=\"!canDelete\"\n data-test=\"record-menu-delete-button\"\n ><span translate>record.action.delete</span></gn-ui-button\n >\n </ul>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'deleteMenu'\">\n <div\n data-test=\"deleteMenuSection\"\n class=\"w-72 p-6 flex flex-col gap-3 mt-2 border border-gray-100 bg-white shadow-2xl rounded-2xl\"\n >\n <span class=\"text-lg font-bold text-center\">{{\n 'editor.record.delete.confirmation.title' | translate\n }}</span>\n <span class=\"text-center\">{{\n 'editor.record.delete.confirmation.message' | translate\n }}</span>\n <div class=\"flex flex-row gap-8 justify-center\">\n <gn-ui-button\n (buttonClick)=\"delete.emit()\"\n cdkFocusInitial\n type=\"primary\"\n data-cy=\"confirm-button\"\n [style.--gn-ui-button-width]=\"'100px'\"\n >{{\n 'editor.record.delete.confirmation.confirmText' | translate\n }}</gn-ui-button\n >\n <gn-ui-button\n [style.--gn-ui-button-width]=\"'100px'\"\n (buttonClick)=\"closeActionMenu.emit()\"\n >{{\n 'editor.record.delete.confirmation.cancelText' | translate\n }}</gn-ui-button\n >\n </div>\n </div>\n </ng-container>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }] }); }
30627
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ActionMenuComponent, isStandalone: true, selector: "gn-ui-action-menu", inputs: { canDuplicate: "canDuplicate", canDelete: "canDelete", isDraftPage: "isDraftPage" }, outputs: { duplicate: "duplicate", delete: "delete", closeActionMenu: "closeActionMenu", rollback: "rollback" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<ng-container [ngSwitch]=\"sectionDisplayed\">\n <ng-container *ngSwitchCase=\"'mainMenu'\">\n <div\n data-test=\"mainMenuSection\"\n class=\"mt-2 border border-gray-100 p-2 flex items-center bg-white shadow-2xl rounded-2xl\"\n >\n <ul class=\"flex flex-col gap-2 w-full\">\n <gn-ui-button\n *ngIf=\"!isDraftPage\"\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"duplicate.emit()\"\n [disabled]=\"!canDuplicate\"\n data-test=\"record-menu-duplicate-button\"\n >\n <span *ngIf=\"canDuplicate\" translate>record.action.duplicate</span>\n <span *ngIf=\"!canDuplicate\" translate\n >record.action.duplicating</span\n ></gn-ui-button\n >\n <gn-ui-button\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"displayDeleteMenu()\"\n [disabled]=\"!canDelete\"\n data-test=\"record-menu-delete-button\"\n ><span *ngIf=\"!isDraftPage\" translate>record.action.delete</span>\n <span *ngIf=\"isDraftPage\" translate\n >record.action.rollback</span\n ></gn-ui-button\n >\n </ul>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'deleteMenu'\">\n <div\n data-test=\"deleteMenuSection\"\n class=\"w-72 p-6 flex flex-col gap-3 mt-2 border border-gray-100 bg-white shadow-2xl rounded-2xl\"\n >\n <span class=\"text-lg font-bold text-center\">{{\n 'editor.record.delete.confirmation.title' | translate\n }}</span>\n <span class=\"text-center\">{{\n 'editor.record.delete.confirmation.message' | translate\n }}</span>\n <div class=\"flex flex-row gap-8 justify-center\">\n <gn-ui-button\n (buttonClick)=\"delete.emit()\"\n cdkFocusInitial\n type=\"primary\"\n data-cy=\"confirm-button\"\n [style.--gn-ui-button-width]=\"'100px'\"\n >{{\n 'editor.record.delete.confirmation.confirmText' | translate\n }}</gn-ui-button\n >\n <gn-ui-button\n [style.--gn-ui-button-width]=\"'100px'\"\n (buttonClick)=\"closeActionMenu.emit()\"\n >{{\n 'editor.record.delete.confirmation.cancelText' | translate\n }}</gn-ui-button\n >\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'rollbackMenu'\">\n <div\n data-test=\"rollbackMenuSection\"\n class=\"w-80 p-6 flex flex-col gap-3 mt-2 border border-gray-100 bg-white shadow-2xl rounded-2xl\"\n >\n <span class=\"text-lg font-bold text-center\">{{\n 'editor.record.undo.confirmation.title' | translate\n }}</span>\n <span class=\"text-center\">{{\n 'editor.record.undo.confirmation.message' | translate\n }}</span>\n <div class=\"flex flex-row gap-8 justify-center\">\n <gn-ui-button\n (buttonClick)=\"rollback.emit()\"\n cdkFocusInitial\n type=\"primary\"\n data-cy=\"confirm-button\"\n [style.--gn-ui-button-width]=\"'120px'\"\n >{{\n 'editor.record.undo.confirmation.confirmText' | translate\n }}</gn-ui-button\n >\n <gn-ui-button\n [style.--gn-ui-button-width]=\"'120px'\"\n (buttonClick)=\"closeActionMenu.emit()\"\n >{{\n 'editor.record.undo.confirmation.cancelText' | translate\n }}</gn-ui-button\n >\n </div>\n </div>\n </ng-container>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }] }); }
30521
30628
  }
30522
30629
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ActionMenuComponent, decorators: [{
30523
30630
  type: Component,
@@ -30528,17 +30635,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30528
30635
  MatDialogModule,
30529
30636
  ConfirmationDialogComponent,
30530
30637
  TranslateModule,
30531
- ], template: "<ng-container [ngSwitch]=\"sectionDisplayed\">\n <ng-container *ngSwitchCase=\"'mainMenu'\">\n <div\n data-test=\"mainMenuSection\"\n class=\"mt-2 border border-gray-100 p-2 flex items-center bg-white shadow-2xl rounded-2xl\"\n >\n <ul class=\"flex flex-col gap-2 w-full\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"duplicate.emit()\"\n [disabled]=\"!canDuplicate\"\n data-test=\"record-menu-duplicate-button\"\n >\n <span *ngIf=\"canDuplicate\" translate>record.action.duplicate</span>\n <span *ngIf=\"!canDuplicate\" translate\n >record.action.duplicating</span\n ></gn-ui-button\n >\n <gn-ui-button\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"displayDeleteMenu()\"\n [disabled]=\"!canDelete\"\n data-test=\"record-menu-delete-button\"\n ><span translate>record.action.delete</span></gn-ui-button\n >\n </ul>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'deleteMenu'\">\n <div\n data-test=\"deleteMenuSection\"\n class=\"w-72 p-6 flex flex-col gap-3 mt-2 border border-gray-100 bg-white shadow-2xl rounded-2xl\"\n >\n <span class=\"text-lg font-bold text-center\">{{\n 'editor.record.delete.confirmation.title' | translate\n }}</span>\n <span class=\"text-center\">{{\n 'editor.record.delete.confirmation.message' | translate\n }}</span>\n <div class=\"flex flex-row gap-8 justify-center\">\n <gn-ui-button\n (buttonClick)=\"delete.emit()\"\n cdkFocusInitial\n type=\"primary\"\n data-cy=\"confirm-button\"\n [style.--gn-ui-button-width]=\"'100px'\"\n >{{\n 'editor.record.delete.confirmation.confirmText' | translate\n }}</gn-ui-button\n >\n <gn-ui-button\n [style.--gn-ui-button-width]=\"'100px'\"\n (buttonClick)=\"closeActionMenu.emit()\"\n >{{\n 'editor.record.delete.confirmation.cancelText' | translate\n }}</gn-ui-button\n >\n </div>\n </div>\n </ng-container>\n</ng-container>\n" }]
30638
+ ], template: "<ng-container [ngSwitch]=\"sectionDisplayed\">\n <ng-container *ngSwitchCase=\"'mainMenu'\">\n <div\n data-test=\"mainMenuSection\"\n class=\"mt-2 border border-gray-100 p-2 flex items-center bg-white shadow-2xl rounded-2xl\"\n >\n <ul class=\"flex flex-col gap-2 w-full\">\n <gn-ui-button\n *ngIf=\"!isDraftPage\"\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"duplicate.emit()\"\n [disabled]=\"!canDuplicate\"\n data-test=\"record-menu-duplicate-button\"\n >\n <span *ngIf=\"canDuplicate\" translate>record.action.duplicate</span>\n <span *ngIf=\"!canDuplicate\" translate\n >record.action.duplicating</span\n ></gn-ui-button\n >\n <gn-ui-button\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"displayDeleteMenu()\"\n [disabled]=\"!canDelete\"\n data-test=\"record-menu-delete-button\"\n ><span *ngIf=\"!isDraftPage\" translate>record.action.delete</span>\n <span *ngIf=\"isDraftPage\" translate\n >record.action.rollback</span\n ></gn-ui-button\n >\n </ul>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'deleteMenu'\">\n <div\n data-test=\"deleteMenuSection\"\n class=\"w-72 p-6 flex flex-col gap-3 mt-2 border border-gray-100 bg-white shadow-2xl rounded-2xl\"\n >\n <span class=\"text-lg font-bold text-center\">{{\n 'editor.record.delete.confirmation.title' | translate\n }}</span>\n <span class=\"text-center\">{{\n 'editor.record.delete.confirmation.message' | translate\n }}</span>\n <div class=\"flex flex-row gap-8 justify-center\">\n <gn-ui-button\n (buttonClick)=\"delete.emit()\"\n cdkFocusInitial\n type=\"primary\"\n data-cy=\"confirm-button\"\n [style.--gn-ui-button-width]=\"'100px'\"\n >{{\n 'editor.record.delete.confirmation.confirmText' | translate\n }}</gn-ui-button\n >\n <gn-ui-button\n [style.--gn-ui-button-width]=\"'100px'\"\n (buttonClick)=\"closeActionMenu.emit()\"\n >{{\n 'editor.record.delete.confirmation.cancelText' | translate\n }}</gn-ui-button\n >\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'rollbackMenu'\">\n <div\n data-test=\"rollbackMenuSection\"\n class=\"w-80 p-6 flex flex-col gap-3 mt-2 border border-gray-100 bg-white shadow-2xl rounded-2xl\"\n >\n <span class=\"text-lg font-bold text-center\">{{\n 'editor.record.undo.confirmation.title' | translate\n }}</span>\n <span class=\"text-center\">{{\n 'editor.record.undo.confirmation.message' | translate\n }}</span>\n <div class=\"flex flex-row gap-8 justify-center\">\n <gn-ui-button\n (buttonClick)=\"rollback.emit()\"\n cdkFocusInitial\n type=\"primary\"\n data-cy=\"confirm-button\"\n [style.--gn-ui-button-width]=\"'120px'\"\n >{{\n 'editor.record.undo.confirmation.confirmText' | translate\n }}</gn-ui-button\n >\n <gn-ui-button\n [style.--gn-ui-button-width]=\"'120px'\"\n (buttonClick)=\"closeActionMenu.emit()\"\n >{{\n 'editor.record.undo.confirmation.cancelText' | translate\n }}</gn-ui-button\n >\n </div>\n </div>\n </ng-container>\n</ng-container>\n" }]
30532
30639
  }], ctorParameters: () => [{ type: i1$b.MatDialog }, { type: i0.ChangeDetectorRef }], propDecorators: { canDuplicate: [{
30533
30640
  type: Input
30534
30641
  }], canDelete: [{
30535
30642
  type: Input
30643
+ }], isDraftPage: [{
30644
+ type: Input
30536
30645
  }], duplicate: [{
30537
30646
  type: Output
30538
30647
  }], delete: [{
30539
30648
  type: Output
30540
30649
  }], closeActionMenu: [{
30541
30650
  type: Output
30651
+ }], rollback: [{
30652
+ type: Output
30542
30653
  }], trigger: [{
30543
30654
  type: ViewChild,
30544
30655
  args: [MatMenuTrigger]
@@ -30563,6 +30674,7 @@ class ResultsTableComponent {
30563
30674
  this.recordClick = new EventEmitter();
30564
30675
  this.duplicateRecord = new EventEmitter();
30565
30676
  this.deleteRecord = new EventEmitter();
30677
+ this.rollbackDraft = new EventEmitter();
30566
30678
  this.recordsSelectedChange = new EventEmitter();
30567
30679
  this.isActionMenuOpen = false;
30568
30680
  }
@@ -30641,6 +30753,10 @@ class ResultsTableComponent {
30641
30753
  this.deleteRecord.emit(item);
30642
30754
  this.closeActionMenu();
30643
30755
  }
30756
+ handleRollback(item) {
30757
+ this.rollbackDraft.emit(item);
30758
+ this.closeActionMenu();
30759
+ }
30644
30760
  setSortBy(col, order) {
30645
30761
  this.sortByChange.emit([col, order]);
30646
30762
  }
@@ -30665,7 +30781,7 @@ class ResultsTableComponent {
30665
30781
  this.recordsSelectedChange.emit([[record], selected]);
30666
30782
  }
30667
30783
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResultsTableComponent, deps: [{ token: i1$9.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }, { token: DateService }], target: i0.ɵɵFactoryTarget.Component }); }
30668
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", inputs: { records: "records", selectedRecordsIdentifiers: "selectedRecordsIdentifiers", sortOrder: "sortOrder", hasDraft: "hasDraft", canDuplicate: "canDuplicate", canDelete: "canDelete", isDraftPage: "isDraftPage", isDuplicating: "isDuplicating" }, outputs: { sortByChange: "sortByChange", recordClick: "recordClick", duplicateRecord: "duplicateRecord", deleteRecord: "deleteRecord", recordsSelectedChange: "recordsSelectedChange" }, providers: [provideIcons({ iconoirUser, iconoirLock, matMoreVert })], viewQueries: [{ propertyName: "actionMenuButtons", predicate: ["actionMenuButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records\"\n [isDraftPage]=\"isDraftPage\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'3rem'\">\n <ng-template #cell let-item let-i=\"index\">\n <ng-icon\n name=\"iconoirLock\"\n class=\"text-purple\"\n *ngIf=\"!item.extras?.edit && !isDraftPage\"\n ></ng-icon>\n <gn-ui-checkbox\n *ngIf=\"item.extras?.edit || isDraftPage\"\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [grow]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full font-semibold\">\n <span data-cy=\"resultItemTitle\" class=\"overflow-hidden text-ellipsis\">{{\n item.title\n }}</span>\n <gn-ui-badge\n *ngIf=\"hasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.2em 0.6em'\"\n [style.--gn-ui-badge-text-size]=\"'12px'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'9rem'\">\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2 font-medium\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0 text-xs\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'12rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.user</span>\n </ng-template>\n <ng-template #cell let-item>\n <ng-icon name=\"iconoirUser\" size=\"16px\"></ng-icon>\n <span data-cy=\"ownerInfo\" class=\"text-xs\">{{\n formatUserInfo(item.extras?.ownerInfo)\n }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'6rem'\">\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n <span class=\"text-xs\">\n {{\n (item.extras?.['isPublishedToAll']\n ? 'record.metadata.status.published'\n : 'record.metadata.status.notPublished'\n ) | translate\n }}</span\n >\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'8rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.changeDate</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex text-left w-full text-xs\">\n {{\n item.extras?.['isPublishedToAll']\n ? dateToString(item.recordUpdated)\n : '-'\n }}\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-button\n cdkOverlayOrigin\n #actionMenuButton\n (buttonClick)=\"openActionMenu(item, template)\"\n type=\"light\"\n data-test=\"record-menu-button\"\n [disabled]=\"!item.extras?.edit && !isDraftPage\"\n >\n <ng-icon\n [ngClass]=\"{\n 'text-purple-light': !item.extras?.edit && !isDraftPage,\n }\"\n name=\"matMoreVert\"\n ></ng-icon>\n </gn-ui-button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDuplicate]=\"canDuplicate(item) && !isDuplicating\"\n [canDelete]=\"canDelete(item)\"\n (duplicate)=\"handleDuplicate(item)\"\n (delete)=\"handleDelete(item)\"\n (closeActionMenu)=\"closeActionMenu()\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: InteractiveTableComponent, selector: "gn-ui-interactive-table", inputs: ["items", "isDraftPage"], outputs: ["itemClick"] }, { kind: "component", type: InteractiveTableColumnComponent, selector: "gn-ui-interactive-table-column", inputs: ["grow", "width", "sortable", "activeSort"], outputs: ["sortChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ActionMenuComponent, selector: "gn-ui-action-menu", inputs: ["canDuplicate", "canDelete"], outputs: ["duplicate", "delete", "closeActionMenu"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }] }); }
30784
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", inputs: { records: "records", selectedRecordsIdentifiers: "selectedRecordsIdentifiers", sortOrder: "sortOrder", hasDraft: "hasDraft", canDuplicate: "canDuplicate", canDelete: "canDelete", isDraftPage: "isDraftPage", isDuplicating: "isDuplicating" }, outputs: { sortByChange: "sortByChange", recordClick: "recordClick", duplicateRecord: "duplicateRecord", deleteRecord: "deleteRecord", rollbackDraft: "rollbackDraft", recordsSelectedChange: "recordsSelectedChange" }, providers: [provideIcons({ iconoirUser, iconoirLock, matMoreVert })], viewQueries: [{ propertyName: "actionMenuButtons", predicate: ["actionMenuButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records\"\n [isDraftPage]=\"isDraftPage\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'3rem'\">\n <ng-template #cell let-item let-i=\"index\">\n <ng-icon\n name=\"iconoirLock\"\n class=\"text-purple\"\n *ngIf=\"!item.extras?.edit && !isDraftPage\"\n ></ng-icon>\n <gn-ui-checkbox\n *ngIf=\"item.extras?.edit || isDraftPage\"\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [grow]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full font-semibold\">\n <span data-cy=\"resultItemTitle\" class=\"overflow-hidden text-ellipsis\">{{\n item.title\n }}</span>\n <gn-ui-badge\n *ngIf=\"hasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.2em 0.6em'\"\n [style.--gn-ui-badge-text-size]=\"'12px'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'9rem'\">\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2 font-medium\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0 text-xs\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'12rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.user</span>\n </ng-template>\n <ng-template #cell let-item>\n <ng-icon name=\"iconoirUser\" size=\"16px\"></ng-icon>\n <span data-cy=\"ownerInfo\" class=\"text-xs\">{{\n formatUserInfo(item.extras?.ownerInfo)\n }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'6rem'\">\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n <span class=\"text-xs\">\n {{\n (item.extras?.['isPublishedToAll']\n ? 'record.metadata.status.published'\n : 'record.metadata.status.notPublished'\n ) | translate\n }}</span\n >\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'8rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.changeDate</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex text-left w-full text-xs\">\n {{\n item.extras?.['isPublishedToAll']\n ? dateToString(item.recordUpdated)\n : '-'\n }}\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-button\n cdkOverlayOrigin\n #actionMenuButton\n (buttonClick)=\"openActionMenu(item, template)\"\n type=\"light\"\n data-test=\"record-menu-button\"\n [disabled]=\"!item.extras?.edit && !isDraftPage\"\n >\n <ng-icon\n [ngClass]=\"{\n 'text-purple-light': !item.extras?.edit && !isDraftPage,\n }\"\n name=\"matMoreVert\"\n ></ng-icon>\n </gn-ui-button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDuplicate]=\"canDuplicate(item) && !isDuplicating\"\n [canDelete]=\"canDelete(item)\"\n [isDraftPage]=\"isDraftPage\"\n (duplicate)=\"handleDuplicate(item)\"\n (delete)=\"handleDelete(item)\"\n (closeActionMenu)=\"closeActionMenu()\"\n (rollback)=\"handleRollback(item)\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: InteractiveTableComponent, selector: "gn-ui-interactive-table", inputs: ["items", "isDraftPage"], outputs: ["itemClick"] }, { kind: "component", type: InteractiveTableColumnComponent, selector: "gn-ui-interactive-table-column", inputs: ["grow", "width", "sortable", "activeSort"], outputs: ["sortChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ActionMenuComponent, selector: "gn-ui-action-menu", inputs: ["canDuplicate", "canDelete", "isDraftPage"], outputs: ["duplicate", "delete", "closeActionMenu", "rollback"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }] }); }
30669
30785
  }
30670
30786
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResultsTableComponent, decorators: [{
30671
30787
  type: Component,
@@ -30679,7 +30795,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30679
30795
  ActionMenuComponent,
30680
30796
  NgIconComponent,
30681
30797
  CdkOverlayOrigin,
30682
- ], providers: [provideIcons({ iconoirUser, iconoirLock, matMoreVert })], template: "<gn-ui-interactive-table\n [items]=\"records\"\n [isDraftPage]=\"isDraftPage\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'3rem'\">\n <ng-template #cell let-item let-i=\"index\">\n <ng-icon\n name=\"iconoirLock\"\n class=\"text-purple\"\n *ngIf=\"!item.extras?.edit && !isDraftPage\"\n ></ng-icon>\n <gn-ui-checkbox\n *ngIf=\"item.extras?.edit || isDraftPage\"\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [grow]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full font-semibold\">\n <span data-cy=\"resultItemTitle\" class=\"overflow-hidden text-ellipsis\">{{\n item.title\n }}</span>\n <gn-ui-badge\n *ngIf=\"hasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.2em 0.6em'\"\n [style.--gn-ui-badge-text-size]=\"'12px'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'9rem'\">\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2 font-medium\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0 text-xs\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'12rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.user</span>\n </ng-template>\n <ng-template #cell let-item>\n <ng-icon name=\"iconoirUser\" size=\"16px\"></ng-icon>\n <span data-cy=\"ownerInfo\" class=\"text-xs\">{{\n formatUserInfo(item.extras?.ownerInfo)\n }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'6rem'\">\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n <span class=\"text-xs\">\n {{\n (item.extras?.['isPublishedToAll']\n ? 'record.metadata.status.published'\n : 'record.metadata.status.notPublished'\n ) | translate\n }}</span\n >\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'8rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.changeDate</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex text-left w-full text-xs\">\n {{\n item.extras?.['isPublishedToAll']\n ? dateToString(item.recordUpdated)\n : '-'\n }}\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-button\n cdkOverlayOrigin\n #actionMenuButton\n (buttonClick)=\"openActionMenu(item, template)\"\n type=\"light\"\n data-test=\"record-menu-button\"\n [disabled]=\"!item.extras?.edit && !isDraftPage\"\n >\n <ng-icon\n [ngClass]=\"{\n 'text-purple-light': !item.extras?.edit && !isDraftPage,\n }\"\n name=\"matMoreVert\"\n ></ng-icon>\n </gn-ui-button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDuplicate]=\"canDuplicate(item) && !isDuplicating\"\n [canDelete]=\"canDelete(item)\"\n (duplicate)=\"handleDuplicate(item)\"\n (delete)=\"handleDelete(item)\"\n (closeActionMenu)=\"closeActionMenu()\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n" }]
30798
+ ], providers: [provideIcons({ iconoirUser, iconoirLock, matMoreVert })], template: "<gn-ui-interactive-table\n [items]=\"records\"\n [isDraftPage]=\"isDraftPage\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'3rem'\">\n <ng-template #cell let-item let-i=\"index\">\n <ng-icon\n name=\"iconoirLock\"\n class=\"text-purple\"\n *ngIf=\"!item.extras?.edit && !isDraftPage\"\n ></ng-icon>\n <gn-ui-checkbox\n *ngIf=\"item.extras?.edit || isDraftPage\"\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [grow]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full font-semibold\">\n <span data-cy=\"resultItemTitle\" class=\"overflow-hidden text-ellipsis\">{{\n item.title\n }}</span>\n <gn-ui-badge\n *ngIf=\"hasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.2em 0.6em'\"\n [style.--gn-ui-badge-text-size]=\"'12px'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'9rem'\">\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2 font-medium\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0 text-xs\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'12rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.user</span>\n </ng-template>\n <ng-template #cell let-item>\n <ng-icon name=\"iconoirUser\" size=\"16px\"></ng-icon>\n <span data-cy=\"ownerInfo\" class=\"text-xs\">{{\n formatUserInfo(item.extras?.ownerInfo)\n }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'6rem'\">\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n <span class=\"text-xs\">\n {{\n (item.extras?.['isPublishedToAll']\n ? 'record.metadata.status.published'\n : 'record.metadata.status.notPublished'\n ) | translate\n }}</span\n >\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'8rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.changeDate</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex text-left w-full text-xs\">\n {{\n item.extras?.['isPublishedToAll']\n ? dateToString(item.recordUpdated)\n : '-'\n }}\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-button\n cdkOverlayOrigin\n #actionMenuButton\n (buttonClick)=\"openActionMenu(item, template)\"\n type=\"light\"\n data-test=\"record-menu-button\"\n [disabled]=\"!item.extras?.edit && !isDraftPage\"\n >\n <ng-icon\n [ngClass]=\"{\n 'text-purple-light': !item.extras?.edit && !isDraftPage,\n }\"\n name=\"matMoreVert\"\n ></ng-icon>\n </gn-ui-button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDuplicate]=\"canDuplicate(item) && !isDuplicating\"\n [canDelete]=\"canDelete(item)\"\n [isDraftPage]=\"isDraftPage\"\n (duplicate)=\"handleDuplicate(item)\"\n (delete)=\"handleDelete(item)\"\n (closeActionMenu)=\"closeActionMenu()\"\n (rollback)=\"handleRollback(item)\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n" }]
30683
30799
  }], ctorParameters: () => [{ type: i1$9.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }, { type: DateService }], propDecorators: { records: [{
30684
30800
  type: Input
30685
30801
  }], selectedRecordsIdentifiers: [{
@@ -30704,6 +30820,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30704
30820
  type: Output
30705
30821
  }], deleteRecord: [{
30706
30822
  type: Output
30823
+ }], rollbackDraft: [{
30824
+ type: Output
30707
30825
  }], recordsSelectedChange: [{
30708
30826
  type: Output
30709
30827
  }], actionMenuButtons: [{
@@ -32960,7 +33078,7 @@ class ResultsTableContainerComponent {
32960
33078
  this.subscription.unsubscribe();
32961
33079
  }
32962
33080
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResultsTableContainerComponent, deps: [{ token: SearchFacade }, { token: SearchService }, { token: SelectionService }, { token: RecordsRepositoryInterface }, { token: NotificationsService }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
32963
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ResultsTableContainerComponent, isStandalone: true, selector: "gn-ui-results-table-container", inputs: { canDuplicate: "canDuplicate", canDelete: "canDelete", isDuplicating: "isDuplicating" }, outputs: { recordClick: "recordClick", duplicateRecord: "duplicateRecord" }, ngImport: i0, template: "<gn-ui-results-table\n *ngIf=\"searchFacade.results$ | async as records\"\n [records]=\"records\"\n [hasDraft]=\"hasDraft\"\n [selectedRecordsIdentifiers]=\"selectedRecords$ | async\"\n [sortOrder]=\"sortBy$ | async\"\n [canDelete]=\"canDelete\"\n [canDuplicate]=\"canDuplicate\"\n [isDuplicating]=\"isDuplicating\"\n (recordClick)=\"handleRecordClick($event)\"\n (duplicateRecord)=\"handleDuplicateRecord($event)\"\n (deleteRecord)=\"handleDeleteRecord($event)\"\n (recordsSelectedChange)=\"handleRecordsSelectedChange($event[0], $event[1])\"\n (sortByChange)=\"handleSortByChange($event[0], $event[1])\"\n></gn-ui-results-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: ResultsTableComponent, selector: "gn-ui-results-table", inputs: ["records", "selectedRecordsIdentifiers", "sortOrder", "hasDraft", "canDuplicate", "canDelete", "isDraftPage", "isDuplicating"], outputs: ["sortByChange", "recordClick", "duplicateRecord", "deleteRecord", "recordsSelectedChange"] }] }); }
33081
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ResultsTableContainerComponent, isStandalone: true, selector: "gn-ui-results-table-container", inputs: { canDuplicate: "canDuplicate", canDelete: "canDelete", isDuplicating: "isDuplicating" }, outputs: { recordClick: "recordClick", duplicateRecord: "duplicateRecord" }, ngImport: i0, template: "<gn-ui-results-table\n *ngIf=\"searchFacade.results$ | async as records\"\n [records]=\"records\"\n [hasDraft]=\"hasDraft\"\n [selectedRecordsIdentifiers]=\"selectedRecords$ | async\"\n [sortOrder]=\"sortBy$ | async\"\n [canDelete]=\"canDelete\"\n [canDuplicate]=\"canDuplicate\"\n [isDuplicating]=\"isDuplicating\"\n (recordClick)=\"handleRecordClick($event)\"\n (duplicateRecord)=\"handleDuplicateRecord($event)\"\n (deleteRecord)=\"handleDeleteRecord($event)\"\n (recordsSelectedChange)=\"handleRecordsSelectedChange($event[0], $event[1])\"\n (sortByChange)=\"handleSortByChange($event[0], $event[1])\"\n></gn-ui-results-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: ResultsTableComponent, selector: "gn-ui-results-table", inputs: ["records", "selectedRecordsIdentifiers", "sortOrder", "hasDraft", "canDuplicate", "canDelete", "isDraftPage", "isDuplicating"], outputs: ["sortByChange", "recordClick", "duplicateRecord", "deleteRecord", "rollbackDraft", "recordsSelectedChange"] }] }); }
32964
33082
  }
32965
33083
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResultsTableContainerComponent, decorators: [{
32966
33084
  type: Component,
@@ -35109,6 +35227,9 @@ const loadFullMetadata = createAction('[Metadata view] Load full metadata', prop
35109
35227
  const setIncompleteMetadata = createAction('[Metadata view] Set incomplete metadata', props());
35110
35228
  const loadFullMetadataSuccess = createAction('[Metadata view] Load full metadata success', props());
35111
35229
  const loadFullMetadataFailure = createAction('[Metadata view] Load full metadata failure', props());
35230
+ const loadFeatureCatalog = createAction("[Metadata view] Load metadata's feature catalog", props());
35231
+ const loadFeatureCatalogSuccess = createAction('[Metadata view] Load metadata feature catalog success', props());
35232
+ const loadFeatureCatalogFailure = createAction('[Metadata view] Load metadata feature catalog failure', props());
35112
35233
  const closeMetadata = createAction('[Metadata view] close');
35113
35234
  /*
35114
35235
  Related actions
@@ -35134,6 +35255,9 @@ var mdview_actions = /*#__PURE__*/Object.freeze({
35134
35255
  addUserFeedbackFailure: addUserFeedbackFailure,
35135
35256
  addUserFeedbackSuccess: addUserFeedbackSuccess,
35136
35257
  closeMetadata: closeMetadata,
35258
+ loadFeatureCatalog: loadFeatureCatalog,
35259
+ loadFeatureCatalogFailure: loadFeatureCatalogFailure,
35260
+ loadFeatureCatalogSuccess: loadFeatureCatalogSuccess,
35137
35261
  loadFullMetadata: loadFullMetadata,
35138
35262
  loadFullMetadataFailure: loadFullMetadataFailure,
35139
35263
  loadFullMetadataSuccess: loadFullMetadataSuccess,
@@ -35151,6 +35275,8 @@ const initialMetadataViewState = {
35151
35275
  loadingFull: false,
35152
35276
  allUserFeedbacksLoading: false,
35153
35277
  addUserFeedbackLoading: false,
35278
+ featureCatalogLoading: false,
35279
+ featureCatalogError: null,
35154
35280
  };
35155
35281
  const metadataViewReducer = createReducer(initialMetadataViewState,
35156
35282
  /*
@@ -35210,6 +35336,22 @@ on(loadUserFeedbacks, (state) => ({
35210
35336
  error: { otherError, notFound },
35211
35337
  addUserFeedbackLoading: false,
35212
35338
  allUserFeedbacksLoading: false,
35339
+ })),
35340
+ /**
35341
+ * FeatureCatalog reducers
35342
+ */
35343
+ on(loadFeatureCatalog, (state) => ({
35344
+ ...state,
35345
+ featureCatalogError: null,
35346
+ featureCatalogLoading: true,
35347
+ })), on(loadFeatureCatalogSuccess, (state, { datasetCatalog }) => ({
35348
+ ...state,
35349
+ featureCatalog: datasetCatalog,
35350
+ featureCatalogLoading: false,
35351
+ })), on(loadFeatureCatalogFailure, (state, { error }) => ({
35352
+ ...state,
35353
+ featureCatalogError: error,
35354
+ featureCatalogLoading: false,
35213
35355
  })));
35214
35356
  function reducer$1(metadataViewState, action) {
35215
35357
  return metadataViewReducer(metadataViewState, action);
@@ -35238,6 +35380,11 @@ const getChartConfig = createSelector(getMdViewState, (state) => state.chartConf
35238
35380
  const getUserFeedbacks = createSelector(getMdViewState, (state) => state.userFeedbacks);
35239
35381
  const getAllUserFeedbacksLoading = createSelector(getMdViewState, (state) => state.allUserFeedbacksLoading);
35240
35382
  const getAddUserFeedbacksLoading = createSelector(getMdViewState, (state) => state.addUserFeedbackLoading);
35383
+ /*
35384
+ Feature Catalog Selectors
35385
+ */
35386
+ const getFeatureCatalog = createSelector(getMdViewState, (state) => state.featureCatalog);
35387
+ const getFeatureCatalogIsLoading = createSelector(getMdViewState, (state) => state.featureCatalogLoading);
35241
35388
 
35242
35389
  class FetchError {
35243
35390
  constructor(type, info, httpStatus = 0) {
@@ -35353,8 +35500,8 @@ function fetchHeaders(url) {
35353
35500
  return parseHeaders(response.headers);
35354
35501
  });
35355
35502
  }
35356
- function fetchDataAsText(url) {
35357
- return useCache(() => sharedFetch(url)
35503
+ function fetchDataAsText(url, cacheActive) {
35504
+ const fetchFactory = () => sharedFetch(url)
35358
35505
  .catch((error) => {
35359
35506
  throw FetchError.corsOrNetwork(error.message);
35360
35507
  })
@@ -35363,10 +35510,11 @@ function fetchDataAsText(url) {
35363
35510
  throw FetchError.http(response.status, await response.text());
35364
35511
  }
35365
35512
  return response.text();
35366
- }), url, 'asText');
35513
+ });
35514
+ return cacheActive ? useCache(fetchFactory, url, 'asText') : fetchFactory();
35367
35515
  }
35368
- function fetchDataAsArrayBuffer(url) {
35369
- return useCache(() => sharedFetch(url)
35516
+ function fetchDataAsArrayBuffer(url, cacheActive) {
35517
+ const fetchFactory = () => sharedFetch(url)
35370
35518
  .catch((error) => {
35371
35519
  throw FetchError.corsOrNetwork(error.message);
35372
35520
  })
@@ -35376,7 +35524,8 @@ function fetchDataAsArrayBuffer(url) {
35376
35524
  }
35377
35525
  // convert to a numeric array so that we can store the response in cache
35378
35526
  return Array.from(new Uint8Array(await response.arrayBuffer()));
35379
- }), url, 'asArrayBuffer').then((array) => {
35527
+ });
35528
+ return (cacheActive ? useCache(fetchFactory, url, 'asArrayBuffer') : fetchFactory()).then((array) => {
35380
35529
  return new Uint8Array(array).buffer;
35381
35530
  });
35382
35531
  }
@@ -35522,68 +35671,6 @@ function getJsonDataItemsProxy(items) {
35522
35671
  });
35523
35672
  }
35524
35673
 
35525
- class BaseReader {
35526
- constructor(url) {
35527
- this.url = url;
35528
- this.selected = null;
35529
- this.groupedBy = null;
35530
- this.aggregations = null;
35531
- this.filter = null;
35532
- this.sort = null;
35533
- this.startIndex = null;
35534
- this.count = null;
35535
- }
35536
- load() {
35537
- throw new Error('not implemented');
35538
- }
35539
- get properties() {
35540
- throw new Error('not implemented');
35541
- }
35542
- get info() {
35543
- throw new Error('not implemented');
35544
- }
35545
- read() {
35546
- throw new Error('not implemented');
35547
- }
35548
- selectAll() {
35549
- this.groupedBy = null;
35550
- this.aggregations = null;
35551
- this.selected = null;
35552
- this.filter = null;
35553
- this.startIndex = null;
35554
- this.count = null;
35555
- return this;
35556
- }
35557
- select(...selectedFields) {
35558
- this.selected = selectedFields;
35559
- this.aggregations = null; // clear aggregations & groups when selecting fields
35560
- this.groupedBy = null;
35561
- return this;
35562
- }
35563
- groupBy(...groupBy) {
35564
- this.groupedBy = groupBy;
35565
- this.selected = null; // clear normal field selection when aggregating
35566
- return this;
35567
- }
35568
- aggregate(...aggregations) {
35569
- this.aggregations = aggregations;
35570
- return this;
35571
- }
35572
- where(filter) {
35573
- this.filter = filter;
35574
- return this;
35575
- }
35576
- orderBy(...fieldSorts) {
35577
- this.sort = fieldSorts;
35578
- return this;
35579
- }
35580
- limit(startIndex, count) {
35581
- this.startIndex = startIndex;
35582
- this.count = count;
35583
- return this;
35584
- }
35585
- }
35586
-
35587
35674
  function filterToSql(filter) {
35588
35675
  const operator = filter[0];
35589
35676
  const args = filter.slice(1);
@@ -35677,7 +35764,80 @@ function generateSqlQuery(selected = null, filter = null, sort = null, startInde
35677
35764
  return sqlSelect + sqlFrom + sqlGroupBy + sqlOrderBy + sqlWhere + sqlLimit;
35678
35765
  }
35679
35766
 
35680
- class BaseFileReader extends BaseReader {
35767
+ class BaseReader {
35768
+ constructor(url) {
35769
+ this.url = url;
35770
+ this.selected = null;
35771
+ this.groupedBy = null;
35772
+ this.aggregations = null;
35773
+ this.filter = null;
35774
+ this.sort = null;
35775
+ this.startIndex = null;
35776
+ this.count = null;
35777
+ }
35778
+ load() {
35779
+ throw new Error('not implemented');
35780
+ }
35781
+ get properties() {
35782
+ throw new Error('not implemented');
35783
+ }
35784
+ get info() {
35785
+ throw new Error('not implemented');
35786
+ }
35787
+ read() {
35788
+ throw new Error('not implemented');
35789
+ }
35790
+ selectAll() {
35791
+ this.groupedBy = null;
35792
+ this.aggregations = null;
35793
+ this.selected = null;
35794
+ this.filter = null;
35795
+ this.startIndex = null;
35796
+ this.count = null;
35797
+ return this;
35798
+ }
35799
+ select(...selectedFields) {
35800
+ this.selected = selectedFields;
35801
+ this.aggregations = null; // clear aggregations & groups when selecting fields
35802
+ this.groupedBy = null;
35803
+ return this;
35804
+ }
35805
+ groupBy(...groupBy) {
35806
+ this.groupedBy = groupBy;
35807
+ this.selected = null; // clear normal field selection when aggregating
35808
+ return this;
35809
+ }
35810
+ aggregate(...aggregations) {
35811
+ this.aggregations = aggregations;
35812
+ return this;
35813
+ }
35814
+ where(filter) {
35815
+ this.filter = filter;
35816
+ return this;
35817
+ }
35818
+ orderBy(...fieldSorts) {
35819
+ this.sort = fieldSorts;
35820
+ return this;
35821
+ }
35822
+ limit(startIndex, count) {
35823
+ this.startIndex = startIndex;
35824
+ this.count = count;
35825
+ return this;
35826
+ }
35827
+ }
35828
+
35829
+ class BaseCacheReader extends BaseReader {
35830
+ constructor(url, cacheActive = true) {
35831
+ super(url);
35832
+ this.url = url;
35833
+ this.cacheActive = cacheActive;
35834
+ }
35835
+ setCacheActive(value) {
35836
+ this.cacheActive = value;
35837
+ }
35838
+ }
35839
+
35840
+ class BaseFileReader extends BaseCacheReader {
35681
35841
  getData() {
35682
35842
  throw new Error('not implemented');
35683
35843
  }
@@ -35741,7 +35901,7 @@ function parseCsv(text) {
35741
35901
  }
35742
35902
  class CsvReader extends BaseFileReader {
35743
35903
  getData() {
35744
- return fetchDataAsText(this.url).then(parseCsv);
35904
+ return fetchDataAsText(this.url, this.cacheActive).then(parseCsv);
35745
35905
  }
35746
35906
  }
35747
35907
 
@@ -35758,7 +35918,7 @@ function parseJson(text) {
35758
35918
  }
35759
35919
  class JsonReader extends BaseFileReader {
35760
35920
  getData() {
35761
- return fetchDataAsText(this.url).then(parseJson);
35921
+ return fetchDataAsText(this.url, this.cacheActive).then(parseJson);
35762
35922
  }
35763
35923
  }
35764
35924
 
@@ -35777,7 +35937,7 @@ function parseGeojson(text) {
35777
35937
  }
35778
35938
  class GeojsonReader extends BaseFileReader {
35779
35939
  getData() {
35780
- return fetchDataAsText(this.url).then(parseGeojson);
35940
+ return fetchDataAsText(this.url, this.cacheActive).then(parseGeojson);
35781
35941
  }
35782
35942
  }
35783
35943
 
@@ -35799,7 +35959,7 @@ function parseExcel(buffer) {
35799
35959
  }
35800
35960
  class ExcelReader extends BaseFileReader {
35801
35961
  getData() {
35802
- return fetchDataAsArrayBuffer(this.url).then(parseExcel);
35962
+ return fetchDataAsArrayBuffer(this.url, this.cacheActive).then(parseExcel);
35803
35963
  }
35804
35964
  }
35805
35965
 
@@ -35826,19 +35986,21 @@ function parseGml(text, namespace, version) {
35826
35986
  throw Error("Couldn't retrieve namespace url");
35827
35987
  }
35828
35988
  class GmlReader extends BaseFileReader {
35829
- constructor(url, namespace, version) {
35989
+ constructor(url, namespace, version, cacheActive = true) {
35830
35990
  super(url);
35991
+ this.url = url;
35831
35992
  this.namespace = namespace;
35832
35993
  this.version = version;
35994
+ this.cacheActive = cacheActive;
35833
35995
  }
35834
35996
  getData() {
35835
- return fetchDataAsText(this.url).then((text) => parseGml(text, this.namespace, this.version));
35997
+ return fetchDataAsText(this.url, this.cacheActive).then((text) => parseGml(text, this.namespace, this.version));
35836
35998
  }
35837
35999
  }
35838
36000
 
35839
- class WfsReader extends BaseReader {
35840
- constructor(url, wfsEndpoint, featureTypeName) {
35841
- super(url);
36001
+ class WfsReader extends BaseCacheReader {
36002
+ constructor(url, wfsEndpoint, featureTypeName, cacheActive) {
36003
+ super(url, cacheActive);
35842
36004
  this.endpoint = wfsEndpoint;
35843
36005
  this.featureTypeName = featureTypeName;
35844
36006
  this.version = this.endpoint.getVersion();
@@ -35893,9 +36055,9 @@ class WfsReader extends BaseReader {
35893
36055
  throw new Error('wfs.geojsongml.notsupported');
35894
36056
  }
35895
36057
  }
35896
- getData() {
35897
- if (this.aggregations || this.groupedBy) {
35898
- throw new Error(marker('wfs.aggregations.notsupported'));
36058
+ async getData(aggregation, groupedBy) {
36059
+ if (aggregation || groupedBy) {
36060
+ return { items: await this.getQueryData() };
35899
36061
  }
35900
36062
  const asJson = this.endpoint.supportsJson(this.featureTypeName);
35901
36063
  const attributes = this.selected ?? undefined;
@@ -35915,19 +36077,26 @@ class WfsReader extends BaseReader {
35915
36077
  // Direct update on string url to prevent encoding of +A and +D
35916
36078
  url = `${url}${finalUrl.search ? '&' : ''}SORTBY=${sorts}`;
35917
36079
  }
35918
- return fetchDataAsText(url).then((text) => asJson
36080
+ return fetchDataAsText(url, this.cacheActive).then((text) => asJson
35919
36081
  ? parseGeojson(text)
35920
36082
  : parseGml(text, this.featureTypeName, this.version));
35921
36083
  }
36084
+ async getQueryData() {
36085
+ const items = (await this.getData()).items;
36086
+ const jsonItems = getJsonDataItemsProxy(items);
36087
+ const query = generateSqlQuery(this.selected, this.filter, this.sort, this.startIndex, this.count, this.groupedBy, this.aggregations);
36088
+ const result = await import('alasql').then((module) => module.default(query, [jsonItems]));
36089
+ return result.map(jsonToGeojsonFeature);
36090
+ }
35922
36091
  load() {
35923
36092
  // Nothing to load for Wfs
35924
36093
  }
35925
36094
  async read() {
35926
- return (await this.getData()).items;
36095
+ return (await this.getData(this.aggregations, this.groupedBy)).items;
35927
36096
  }
35928
36097
  }
35929
36098
 
35930
- async function openDataset(url, typeHint, options) {
36099
+ async function openDataset(url, typeHint, options, cacheActive) {
35931
36100
  const fileType = await inferDatasetType(url, typeHint);
35932
36101
  let reader;
35933
36102
  try {
@@ -35951,6 +36120,7 @@ async function openDataset(url, typeHint, options) {
35951
36120
  reader = await WfsReader.createReader(url, options.wfsFeatureType);
35952
36121
  break;
35953
36122
  }
36123
+ reader.setCacheActive(cacheActive);
35954
36124
  reader.load();
35955
36125
  return reader;
35956
36126
  }
@@ -35967,8 +36137,8 @@ async function openDataset(url, typeHint, options) {
35967
36137
  * 2. otherwise, look for a Content-Type header in the response with a supported mime type
35968
36138
  * 3. if no valid mime type was found, look for an explicit file extension in the url (.csv, .geojson etc.)
35969
36139
  */
35970
- async function readDataset(url, typeHint, options) {
35971
- const reader = await openDataset(url, typeHint, options);
36140
+ async function readDataset(url, typeHint, options, cacheActive = true) {
36141
+ const reader = await openDataset(url, typeHint, options, cacheActive);
35972
36142
  try {
35973
36143
  return await reader.read();
35974
36144
  }
@@ -36072,13 +36242,21 @@ class DataService {
36072
36242
  }
36073
36243
  getDownloadLinksFromWfs(wfsLink) {
36074
36244
  // Pour DL toutes les données
36075
- return this.getDownloadUrlsFromWfs(wfsLink.url.toString(), wfsLink.name).pipe(map$1((urls) => urls.all), map$1((urls) => Object.keys(urls).map((format) => ({
36076
- ...wfsLink,
36077
- name: wfsLink.name,
36078
- type: 'download',
36079
- url: new URL(urls[format]),
36080
- mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
36081
- }))));
36245
+ return this.getDownloadUrlsFromWfs(wfsLink.url.toString(), wfsLink.name).pipe(map$1((urls) => {
36246
+ if (urls.geojson) {
36247
+ urls.all['application/json'] = urls.geojson;
36248
+ }
36249
+ return urls;
36250
+ }), map$1((urls) => {
36251
+ const resources = Object.keys(urls.all).map((format) => ({
36252
+ ...wfsLink,
36253
+ name: wfsLink.name,
36254
+ type: 'download',
36255
+ url: new URL(urls.all[format]),
36256
+ mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
36257
+ }));
36258
+ return resources;
36259
+ }));
36082
36260
  }
36083
36261
  async getDownloadLinksFromOgcApiFeatures(ogcApiLink) {
36084
36262
  const collectionInfo = await this.getDownloadUrlsFromOgcApi(ogcApiLink.url.href);
@@ -36121,18 +36299,18 @@ class DataService {
36121
36299
  mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
36122
36300
  }));
36123
36301
  }
36124
- readAsGeoJson(link) {
36125
- return this.getDataset(link).pipe(switchMap$1((dataset) => dataset.selectAll().read()), map$1((features) => ({
36302
+ readAsGeoJson(link, cacheActive) {
36303
+ return this.getDataset(link, cacheActive).pipe(switchMap$1((dataset) => dataset.selectAll().read()), map$1((features) => ({
36126
36304
  type: 'FeatureCollection',
36127
36305
  features,
36128
36306
  })));
36129
36307
  }
36130
- getDataset(link) {
36308
+ getDataset(link, cacheActive) {
36131
36309
  if (link.type === 'service' && link.accessServiceProtocol === 'wfs') {
36132
36310
  const wfsUrlEndpoint = this.proxy.getProxiedUrl(link.url.toString());
36133
36311
  return from(openDataset(wfsUrlEndpoint, 'wfs', {
36134
36312
  wfsFeatureType: link.name,
36135
- }));
36313
+ }, cacheActive));
36136
36314
  }
36137
36315
  else if (link.type === 'download') {
36138
36316
  const linkProxifiedUrl = this.proxy.getProxiedUrl(link.url.toString());
@@ -36140,18 +36318,18 @@ class DataService {
36140
36318
  const supportedType = SupportedTypes.indexOf(format) > -1
36141
36319
  ? format
36142
36320
  : undefined;
36143
- return from(openDataset(linkProxifiedUrl, supportedType)).pipe();
36321
+ return from(openDataset(linkProxifiedUrl, supportedType, undefined, cacheActive)).pipe();
36144
36322
  }
36145
36323
  else if (link.type === 'service' &&
36146
36324
  link.accessServiceProtocol === 'esriRest') {
36147
36325
  const url = this.getDownloadUrlFromEsriRest(link.url.toString(), 'geojson');
36148
- return from(openDataset(url, 'geojson')).pipe();
36326
+ return from(openDataset(url, 'geojson', undefined, cacheActive)).pipe();
36149
36327
  }
36150
36328
  else if (link.type === 'service' &&
36151
36329
  link.accessServiceProtocol === 'ogcFeatures') {
36152
36330
  return from(this.getDownloadUrlsFromOgcApi(link.url.href)).pipe(switchMap$1((collectionInfo) => {
36153
36331
  const geojsonUrl = collectionInfo.jsonDownloadLink;
36154
- return openDataset(geojsonUrl, 'geojson');
36332
+ return openDataset(geojsonUrl, 'geojson', undefined, cacheActive);
36155
36333
  }), tap$1((url) => {
36156
36334
  if (url === null) {
36157
36335
  throw new Error('wfs.geojsongml.notsupported');
@@ -36716,6 +36894,7 @@ class ChartViewComponent {
36716
36894
  this.dataService = dataService;
36717
36895
  this.changeDetector = changeDetector;
36718
36896
  this.translateService = translateService;
36897
+ this.cacheActive = true;
36719
36898
  this.currentLink$ = new BehaviorSubject(null);
36720
36899
  this.aggregation$ = new BehaviorSubject('sum');
36721
36900
  this.xProperty$ = new BehaviorSubject(undefined);
@@ -36745,7 +36924,7 @@ class ChartViewComponent {
36745
36924
  this.dataset$ = this.currentLink$.pipe(filter((link) => !!link), switchMap$1((link) => {
36746
36925
  this.error = null;
36747
36926
  this.loading = true;
36748
- return this.dataService.getDataset(link).pipe(catchError((error) => {
36927
+ return this.dataService.getDataset(link, this.cacheActive).pipe(catchError((error) => {
36749
36928
  this.handleError(error);
36750
36929
  return EMPTY;
36751
36930
  }));
@@ -36814,7 +36993,7 @@ class ChartViewComponent {
36814
36993
  this.changeDetector.detectChanges();
36815
36994
  }
36816
36995
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChartViewComponent, deps: [{ token: DataService }, { token: i0.ChangeDetectorRef }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
36817
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChartViewComponent, isStandalone: true, selector: "gn-ui-chart-view", inputs: { link: "link", aggregation: "aggregation", xProperty: "xProperty", yProperty: "yProperty", chartType: "chartType" }, outputs: { chartConfig$: "chartConfig$" }, ngImport: i0, template: "<div class=\"w-full h-full flex flex-col\">\n <div\n class=\"flex flex-col space-y-2 sm:flex-row sm:space-y-0 sm:space-x-2 justify-between text-[13px]\"\n >\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"typeChoices\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n (selectValue)=\"chartType$.next($event)\"\n [selected]=\"chartType$.value\"\n [title]=\"'chart.dropdown.type' | translate\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"xChoices$ | async\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n (selectValue)=\"xProperty$.next($event)\"\n [selected]=\"xProperty$.value\"\n [title]=\"'chart.dropdown.xProperty' | translate\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n *ngIf=\"!isCountAggregation\"\n [choices]=\"yChoices$ | async\"\n (selectValue)=\"yProperty$.next($event)\"\n [selected]=\"yProperty$.value\"\n [title]=\"'chart.dropdown.yProperty' | translate\"\n class=\"select-y-prop\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"aggregationChoices\"\n class=\"aggregation-choices\"\n (selectValue)=\"aggregation$.next($event)\"\n [selected]=\"aggregation$.value\"\n [title]=\"'chart.dropdown.aggregation' | translate\"\n ></gn-ui-dropdown-selector>\n </div>\n <div\n class=\"relative h-full mt-2 bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-chart\n [data]=\"chartData$ | async\"\n [type]=\"chartType$.value\"\n [labelProperty]=\"labelProperty\"\n [valueProperty]=\"valueProperty\"\n ></gn-ui-chart>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'chart.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "component", type: ChartComponent, selector: "gn-ui-chart", inputs: ["data", "labelProperty", "valueProperty", "secondaryValueProperty", "type"] }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36996
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChartViewComponent, isStandalone: true, selector: "gn-ui-chart-view", inputs: { cacheActive: "cacheActive", link: "link", aggregation: "aggregation", xProperty: "xProperty", yProperty: "yProperty", chartType: "chartType" }, outputs: { chartConfig$: "chartConfig$" }, ngImport: i0, template: "<div class=\"w-full h-full flex flex-col\">\n <div\n class=\"flex flex-col space-y-2 sm:flex-row sm:space-y-0 sm:space-x-2 justify-between text-[13px]\"\n >\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"typeChoices\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n (selectValue)=\"chartType$.next($event)\"\n [selected]=\"chartType$.value\"\n [title]=\"'chart.dropdown.type' | translate\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"xChoices$ | async\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n (selectValue)=\"xProperty$.next($event)\"\n [selected]=\"xProperty$.value\"\n [title]=\"'chart.dropdown.xProperty' | translate\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n *ngIf=\"!isCountAggregation\"\n [choices]=\"yChoices$ | async\"\n (selectValue)=\"yProperty$.next($event)\"\n [selected]=\"yProperty$.value\"\n [title]=\"'chart.dropdown.yProperty' | translate\"\n class=\"select-y-prop\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"aggregationChoices\"\n class=\"aggregation-choices\"\n (selectValue)=\"aggregation$.next($event)\"\n [selected]=\"aggregation$.value\"\n [title]=\"'chart.dropdown.aggregation' | translate\"\n ></gn-ui-dropdown-selector>\n </div>\n <div\n class=\"relative h-full mt-2 bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-chart\n [data]=\"chartData$ | async\"\n [type]=\"chartType$.value\"\n [labelProperty]=\"labelProperty\"\n [valueProperty]=\"valueProperty\"\n ></gn-ui-chart>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'chart.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "component", type: ChartComponent, selector: "gn-ui-chart", inputs: ["data", "labelProperty", "valueProperty", "secondaryValueProperty", "type"] }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36818
36997
  }
36819
36998
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChartViewComponent, decorators: [{
36820
36999
  type: Component,
@@ -36826,7 +37005,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
36826
37005
  LoadingMaskComponent,
36827
37006
  PopupAlertComponent,
36828
37007
  ], standalone: true, template: "<div class=\"w-full h-full flex flex-col\">\n <div\n class=\"flex flex-col space-y-2 sm:flex-row sm:space-y-0 sm:space-x-2 justify-between text-[13px]\"\n >\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"typeChoices\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n (selectValue)=\"chartType$.next($event)\"\n [selected]=\"chartType$.value\"\n [title]=\"'chart.dropdown.type' | translate\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"xChoices$ | async\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n (selectValue)=\"xProperty$.next($event)\"\n [selected]=\"xProperty$.value\"\n [title]=\"'chart.dropdown.xProperty' | translate\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n *ngIf=\"!isCountAggregation\"\n [choices]=\"yChoices$ | async\"\n (selectValue)=\"yProperty$.next($event)\"\n [selected]=\"yProperty$.value\"\n [title]=\"'chart.dropdown.yProperty' | translate\"\n class=\"select-y-prop\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"aggregationChoices\"\n class=\"aggregation-choices\"\n (selectValue)=\"aggregation$.next($event)\"\n [selected]=\"aggregation$.value\"\n [title]=\"'chart.dropdown.aggregation' | translate\"\n ></gn-ui-dropdown-selector>\n </div>\n <div\n class=\"relative h-full mt-2 bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-chart\n [data]=\"chartData$ | async\"\n [type]=\"chartType$.value\"\n [labelProperty]=\"labelProperty\"\n [valueProperty]=\"valueProperty\"\n ></gn-ui-chart>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'chart.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n" }]
36829
- }], ctorParameters: () => [{ type: DataService }, { type: i0.ChangeDetectorRef }, { type: i1$1.TranslateService }], propDecorators: { link: [{
37008
+ }], ctorParameters: () => [{ type: DataService }, { type: i0.ChangeDetectorRef }, { type: i1$1.TranslateService }], propDecorators: { cacheActive: [{
37009
+ type: Input
37010
+ }], link: [{
36830
37011
  type: Input
36831
37012
  }], aggregation: [{
36832
37013
  type: Input
@@ -36999,6 +37180,7 @@ class TableViewComponent {
36999
37180
  constructor(dataService, translateService) {
37000
37181
  this.dataService = dataService;
37001
37182
  this.translateService = translateService;
37183
+ this.cacheActive = true;
37002
37184
  this.currentLink$ = new BehaviorSubject(null);
37003
37185
  this.loading = false;
37004
37186
  this.error = null;
@@ -37016,7 +37198,7 @@ class TableViewComponent {
37016
37198
  }), startWith(undefined), shareReplay(1));
37017
37199
  }
37018
37200
  getDatasetReader(link) {
37019
- return this.dataService.getDataset(link);
37201
+ return this.dataService.getDataset(link, this.cacheActive);
37020
37202
  }
37021
37203
  onTableSelect(event) {
37022
37204
  console.log(event);
@@ -37039,7 +37221,7 @@ class TableViewComponent {
37039
37221
  this.loading = false;
37040
37222
  }
37041
37223
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableViewComponent, deps: [{ token: DataService }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
37042
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TableViewComponent, isStandalone: true, selector: "gn-ui-table-view", inputs: { link: "link" }, ngImport: i0, template: "<div class=\"w-full h-full flex flex-col\">\n <div class=\"relative h-full\">\n <gn-ui-data-table\n *ngIf=\"tableData$ | async as dataset\"\n class=\"overflow-auto grow\"\n [dataset]=\"dataset\"\n (selected)=\"onTableSelect($event)\"\n ></gn-ui-data-table>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'table.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: DataTableComponent, selector: "gn-ui-data-table", inputs: ["dataset", "activeId"], outputs: ["selected"] }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
37224
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TableViewComponent, isStandalone: true, selector: "gn-ui-table-view", inputs: { cacheActive: "cacheActive", link: "link" }, ngImport: i0, template: "<div class=\"w-full h-full flex flex-col\">\n <div class=\"relative h-full\">\n <gn-ui-data-table\n *ngIf=\"tableData$ | async as dataset\"\n class=\"overflow-auto grow\"\n [dataset]=\"dataset\"\n (selected)=\"onTableSelect($event)\"\n ></gn-ui-data-table>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'table.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: DataTableComponent, selector: "gn-ui-data-table", inputs: ["dataset", "activeId"], outputs: ["selected"] }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
37043
37225
  }
37044
37226
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableViewComponent, decorators: [{
37045
37227
  type: Component,
@@ -37050,7 +37232,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
37050
37232
  PopupAlertComponent,
37051
37233
  TranslateModule,
37052
37234
  ], standalone: true, template: "<div class=\"w-full h-full flex flex-col\">\n <div class=\"relative h-full\">\n <gn-ui-data-table\n *ngIf=\"tableData$ | async as dataset\"\n class=\"overflow-auto grow\"\n [dataset]=\"dataset\"\n (selected)=\"onTableSelect($event)\"\n ></gn-ui-data-table>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'table.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n" }]
37053
- }], ctorParameters: () => [{ type: DataService }, { type: i1$1.TranslateService }], propDecorators: { link: [{
37235
+ }], ctorParameters: () => [{ type: DataService }, { type: i1$1.TranslateService }], propDecorators: { cacheActive: [{
37236
+ type: Input
37237
+ }], link: [{
37054
37238
  type: Input
37055
37239
  }] } });
37056
37240
 
@@ -37069,7 +37253,15 @@ class MdViewFacade {
37069
37253
  this.isPresent$ = this.store.pipe(select(getMetadataUuid), map$1((uuid) => !!uuid));
37070
37254
  this.isMetadataLoading$ = this.store.pipe(select(getMetadataIsLoading));
37071
37255
  this.metadata$ = this.store.pipe(select(getMetadata), filter((md) => !!md));
37256
+ this.featureCatalog$ = this.store.pipe(select(getFeatureCatalog));
37072
37257
  this.isIncomplete$ = this.store.pipe(select(getMetadataIsIncomplete), filter((incomplete) => incomplete !== null));
37258
+ this.isHighUpdateFrequency$ = this.metadata$.pipe(map$1((record) => {
37259
+ if (record.updateFrequency instanceof Object) {
37260
+ return (record.updateFrequency.per === 'day' &&
37261
+ record.updateFrequency.updatedTimes > 1);
37262
+ }
37263
+ return record.updateFrequency === 'continual';
37264
+ }));
37073
37265
  this.error$ = this.store.pipe(select(getMetadataError));
37074
37266
  this.related$ = this.store.pipe(select(getRelated));
37075
37267
  this.chartConfig$ = this.store.pipe(select(getChartConfig));
@@ -37165,6 +37357,11 @@ class MdViewEffects {
37165
37357
  }
37166
37358
  return loadFullMetadataSuccess({ full: record });
37167
37359
  }), catchError((error) => of(loadFullMetadataFailure({ otherError: error.message })))));
37360
+ this.loadFeatureCatalog$ = createEffect(() => this.actions$.pipe(ofType(loadFullMetadataSuccess), filter(({ full }) => full !== undefined), switchMap$1(({ full }) => this.recordsRepository.getFeatureCatalog(full)), map$1((featureCatalog) => loadFeatureCatalogSuccess({
37361
+ datasetCatalog: featureCatalog,
37362
+ })), catchError((error) => of(loadFeatureCatalogFailure({
37363
+ error: error.message,
37364
+ })))));
37168
37365
  /*
37169
37366
  Related effects
37170
37367
  */
@@ -37754,6 +37951,7 @@ class DataViewComponent {
37754
37951
  this.mdViewFacade = mdViewFacade;
37755
37952
  this.displaySource = true;
37756
37953
  this.chartConfig$ = new BehaviorSubject(null);
37954
+ this.cacheActive$ = this.mdViewFacade.isHighUpdateFrequency$.pipe(map$1((highF) => !highF));
37757
37955
  this.compatibleDataLinks$ = combineLatest([
37758
37956
  this.mdViewFacade.dataLinks$,
37759
37957
  this.mdViewFacade.geoDataLinks$,
@@ -37781,7 +37979,7 @@ class DataViewComponent {
37781
37979
  this.selectedLink$.next(link);
37782
37980
  }
37783
37981
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewComponent, deps: [{ token: MdViewFacade }], target: i0.ɵɵFactoryTarget.Component }); }
37784
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DataViewComponent, isStandalone: true, selector: "gn-ui-data-view", inputs: { mode: "mode", displaySource: "displaySource" }, outputs: { chartConfig$: "chartConfig$" }, ngImport: i0, template: "<div class=\"w-full h-full flex flex-col p-1\">\n <gn-ui-dropdown-selector\n *ngIf=\"dropdownChoices$ | async as choices\"\n [ngClass]=\"{ hidden: !displaySource }\"\n [title]=\"'table.select.data' | translate\"\n class=\"truncate p-1 -mx-1 self-end mb-1\"\n extraBtnClass=\"!text-primary font-sans font-medium\"\n [choices]=\"choices\"\n (selectValue)=\"selectLink($event)\"\n ></gn-ui-dropdown-selector>\n <div class=\"relative h-[460px]\">\n <gn-ui-table-view\n *ngIf=\"mode === 'table'\"\n [link]=\"selectedLink$ | async\"\n ></gn-ui-table-view>\n <gn-ui-chart-view\n *ngIf=\"mode === 'chart'\"\n (chartConfig$)=\"setChartConfig($event)\"\n [link]=\"selectedLink$ | async\"\n ></gn-ui-chart-view>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "component", type: TableViewComponent, selector: "gn-ui-table-view", inputs: ["link"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "component", type: ChartViewComponent, selector: "gn-ui-chart-view", inputs: ["link", "aggregation", "xProperty", "yProperty", "chartType"], outputs: ["chartConfig$"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
37982
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DataViewComponent, isStandalone: true, selector: "gn-ui-data-view", inputs: { mode: "mode", displaySource: "displaySource" }, outputs: { chartConfig$: "chartConfig$" }, ngImport: i0, template: "<div class=\"w-full h-full flex flex-col p-1\">\n <gn-ui-dropdown-selector\n *ngIf=\"dropdownChoices$ | async as choices\"\n [ngClass]=\"{ hidden: !displaySource }\"\n [title]=\"'table.select.data' | translate\"\n class=\"truncate p-1 -mx-1 self-end mb-1\"\n extraBtnClass=\"!text-primary font-sans font-medium\"\n [choices]=\"choices\"\n (selectValue)=\"selectLink($event)\"\n ></gn-ui-dropdown-selector>\n <div class=\"relative h-[460px]\">\n <gn-ui-table-view\n *ngIf=\"mode === 'table'\"\n [cacheActive]=\"cacheActive$ | async\"\n [link]=\"selectedLink$ | async\"\n ></gn-ui-table-view>\n <gn-ui-chart-view\n *ngIf=\"mode === 'chart'\"\n (chartConfig$)=\"setChartConfig($event)\"\n [cacheActive]=\"cacheActive$ | async\"\n [link]=\"selectedLink$ | async\"\n ></gn-ui-chart-view>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "component", type: TableViewComponent, selector: "gn-ui-table-view", inputs: ["cacheActive", "link"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "component", type: ChartViewComponent, selector: "gn-ui-chart-view", inputs: ["cacheActive", "link", "aggregation", "xProperty", "yProperty", "chartType"], outputs: ["chartConfig$"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
37785
37983
  }
37786
37984
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewComponent, decorators: [{
37787
37985
  type: Component,
@@ -37791,7 +37989,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
37791
37989
  TableViewComponent,
37792
37990
  TranslateModule,
37793
37991
  ChartViewComponent,
37794
- ], template: "<div class=\"w-full h-full flex flex-col p-1\">\n <gn-ui-dropdown-selector\n *ngIf=\"dropdownChoices$ | async as choices\"\n [ngClass]=\"{ hidden: !displaySource }\"\n [title]=\"'table.select.data' | translate\"\n class=\"truncate p-1 -mx-1 self-end mb-1\"\n extraBtnClass=\"!text-primary font-sans font-medium\"\n [choices]=\"choices\"\n (selectValue)=\"selectLink($event)\"\n ></gn-ui-dropdown-selector>\n <div class=\"relative h-[460px]\">\n <gn-ui-table-view\n *ngIf=\"mode === 'table'\"\n [link]=\"selectedLink$ | async\"\n ></gn-ui-table-view>\n <gn-ui-chart-view\n *ngIf=\"mode === 'chart'\"\n (chartConfig$)=\"setChartConfig($event)\"\n [link]=\"selectedLink$ | async\"\n ></gn-ui-chart-view>\n </div>\n</div>\n" }]
37992
+ ], template: "<div class=\"w-full h-full flex flex-col p-1\">\n <gn-ui-dropdown-selector\n *ngIf=\"dropdownChoices$ | async as choices\"\n [ngClass]=\"{ hidden: !displaySource }\"\n [title]=\"'table.select.data' | translate\"\n class=\"truncate p-1 -mx-1 self-end mb-1\"\n extraBtnClass=\"!text-primary font-sans font-medium\"\n [choices]=\"choices\"\n (selectValue)=\"selectLink($event)\"\n ></gn-ui-dropdown-selector>\n <div class=\"relative h-[460px]\">\n <gn-ui-table-view\n *ngIf=\"mode === 'table'\"\n [cacheActive]=\"cacheActive$ | async\"\n [link]=\"selectedLink$ | async\"\n ></gn-ui-table-view>\n <gn-ui-chart-view\n *ngIf=\"mode === 'chart'\"\n (chartConfig$)=\"setChartConfig($event)\"\n [cacheActive]=\"cacheActive$ | async\"\n [link]=\"selectedLink$ | async\"\n ></gn-ui-chart-view>\n </div>\n</div>\n" }]
37795
37993
  }], ctorParameters: () => [{ type: MdViewFacade }], propDecorators: { mode: [{
37796
37994
  type: Input
37797
37995
  }], displaySource: [{
@@ -38084,7 +38282,8 @@ class MapViewComponent {
38084
38282
  link.accessServiceProtocol === 'esriRest' ||
38085
38283
  link.accessServiceProtocol === 'ogcFeatures')) ||
38086
38284
  link.type === 'download') {
38087
- return this.dataService.readAsGeoJson(link).pipe(map$1((data) => ({
38285
+ const cacheActive = true; // TODO implement whether should be true or false
38286
+ return this.dataService.readAsGeoJson(link, cacheActive).pipe(map$1((data) => ({
38088
38287
  type: 'geojson',
38089
38288
  data,
38090
38289
  })));
@@ -38599,8 +38798,8 @@ const DEFAULT_CONFIGURATION = {
38599
38798
  labelKey: marker('editor.record.form.page.description'),
38600
38799
  sections: [
38601
38800
  TITLE_SECTION,
38602
- ABOUT_SECTION,
38603
38801
  CLASSIFICATION_SECTION,
38802
+ ABOUT_SECTION,
38604
38803
  GEOGRAPHICAL_COVERAGE_SECTION,
38605
38804
  ],
38606
38805
  },
@@ -39759,7 +39958,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39759
39958
 
39760
39959
  class FormFieldRichComponent {
39761
39960
  constructor() {
39762
- this.placeholder = 'Votre texte ici'; //TODO: translate
39961
+ this.placeholder = '';
39763
39962
  this.valueChange = new EventEmitter();
39764
39963
  this.preview = false;
39765
39964
  }
@@ -40008,6 +40207,7 @@ class FormFieldContactsForResourceComponent {
40008
40207
  'owner',
40009
40208
  'point_of_contact',
40010
40209
  'author',
40210
+ 'publisher',
40011
40211
  ];
40012
40212
  this.roleSectionsToDisplay = [];
40013
40213
  this.allOrganizations = new Map();
@@ -41148,7 +41348,7 @@ class ConstraintCardComponent {
41148
41348
  provideNgIconsConfig({
41149
41349
  size: '1.5rem',
41150
41350
  }),
41151
- ], ngImport: i0, template: "<div class=\"flex flex-col gap-1 border rounded-lg p-4\">\n <gn-ui-form-field-rich\n class=\"mt-[-8px]\"\n [label]=\"label\"\n [hint]=\"hint | translate\"\n [value]=\"constraint_.text ?? ''\"\n (valueChange)=\"handleConstraintTextChange($event)\"\n ></gn-ui-form-field-rich>\n\n <div *ngIf=\"!showUrl\" class=\"flex-none mt-1\">\n <gn-ui-button\n (buttonClick)=\"showUrl = true\"\n type=\"gray\"\n data-cy=\"add-url-btn\"\n >\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>&nbsp;\n <span translate>input.image.displayUrlInput</span>\n </gn-ui-button>\n </div>\n <gn-ui-url-input\n *ngIf=\"showUrl\"\n class=\"mt-3.5\"\n [value]=\"constraint_.url?.toString()\"\n (valueChange)=\"handleURLChange($event)\"\n [showValidateButton]=\"false\"\n >\n </gn-ui-url-input>\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: ["label", "hint", "placeholder", "value"], outputs: ["valueChange"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
41351
+ ], ngImport: i0, template: "<div class=\"flex flex-col gap-1 border rounded-lg p-4\">\n <gn-ui-form-field-rich\n class=\"mt-[-8px]\"\n [label]=\"label\"\n [placeholder]=\"hint | translate\"\n [value]=\"constraint_.text ?? ''\"\n (valueChange)=\"handleConstraintTextChange($event)\"\n ></gn-ui-form-field-rich>\n\n <div *ngIf=\"!showUrl\" class=\"flex-none mt-1\">\n <gn-ui-button\n (buttonClick)=\"showUrl = true\"\n type=\"gray\"\n data-cy=\"add-url-btn\"\n >\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>&nbsp;\n <span translate>input.image.displayUrlInput</span>\n </gn-ui-button>\n </div>\n <gn-ui-url-input\n *ngIf=\"showUrl\"\n class=\"mt-3.5\"\n [value]=\"constraint_.url?.toString()\"\n (valueChange)=\"handleURLChange($event)\"\n [showValidateButton]=\"false\"\n >\n </gn-ui-url-input>\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: ["label", "hint", "placeholder", "value"], outputs: ["valueChange"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
41152
41352
  }
41153
41353
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConstraintCardComponent, decorators: [{
41154
41354
  type: Component,
@@ -41166,7 +41366,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
41166
41366
  provideNgIconsConfig({
41167
41367
  size: '1.5rem',
41168
41368
  }),
41169
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-1 border rounded-lg p-4\">\n <gn-ui-form-field-rich\n class=\"mt-[-8px]\"\n [label]=\"label\"\n [hint]=\"hint | translate\"\n [value]=\"constraint_.text ?? ''\"\n (valueChange)=\"handleConstraintTextChange($event)\"\n ></gn-ui-form-field-rich>\n\n <div *ngIf=\"!showUrl\" class=\"flex-none mt-1\">\n <gn-ui-button\n (buttonClick)=\"showUrl = true\"\n type=\"gray\"\n data-cy=\"add-url-btn\"\n >\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>&nbsp;\n <span translate>input.image.displayUrlInput</span>\n </gn-ui-button>\n </div>\n <gn-ui-url-input\n *ngIf=\"showUrl\"\n class=\"mt-3.5\"\n [value]=\"constraint_.url?.toString()\"\n (valueChange)=\"handleURLChange($event)\"\n [showValidateButton]=\"false\"\n >\n </gn-ui-url-input>\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"] }]
41369
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-1 border rounded-lg p-4\">\n <gn-ui-form-field-rich\n class=\"mt-[-8px]\"\n [label]=\"label\"\n [placeholder]=\"hint | translate\"\n [value]=\"constraint_.text ?? ''\"\n (valueChange)=\"handleConstraintTextChange($event)\"\n ></gn-ui-form-field-rich>\n\n <div *ngIf=\"!showUrl\" class=\"flex-none mt-1\">\n <gn-ui-button\n (buttonClick)=\"showUrl = true\"\n type=\"gray\"\n data-cy=\"add-url-btn\"\n >\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>&nbsp;\n <span translate>input.image.displayUrlInput</span>\n </gn-ui-button>\n </div>\n <gn-ui-url-input\n *ngIf=\"showUrl\"\n class=\"mt-3.5\"\n [value]=\"constraint_.url?.toString()\"\n (valueChange)=\"handleURLChange($event)\"\n [showValidateButton]=\"false\"\n >\n </gn-ui-url-input>\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"] }]
41170
41370
  }], propDecorators: { label: [{
41171
41371
  type: Input
41172
41372
  }], constraint: [{
@@ -41825,5 +42025,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
41825
42025
  * Generated bundle index. Do not edit.
41826
42026
  */
41827
42027
 
41828
- export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AbstractSearchField, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvailableServicesField, AvatarComponent, AvatarServiceInterface, BASEMAP_LAYERS, BadgeComponent, BaseConverter, BaseFileReader, BaseReader, BlockListComponent, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ConfirmationDialogComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_GN4_LOGIN_URL, DEFAULT_GN4_LOGOUT_URL, DEFAULT_GN4_SETTINGS_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DO_NOT_USE_DEFAULT_BASEMAP, DataService, DataTableComponent, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangeDropdownComponent, DateRangePickerComponent, DateRangeSearchField, DateService, DcatApConverter, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EDITOR_FEATURE_KEY, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EXTERNAL_VIEWER_OPEN_NEW_TAB, EXTERNAL_VIEWER_URL_TEMPLATE, EditableLabelDirective, EditorFacade, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorComponent, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FILTER_SUMMARY_IGNORE_LIST, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDetailComponent, FeatureEditorModule, FeatureMapModule, FeatureNotificationsModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileInputComponent, FileTranslateLoader, FilesDropDirective, FilterDropdownComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, GeojsonReader, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GpfApiDlComponent, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageInputComponent, ImageOverlayPreviewComponent, ImportRecordComponent, InteractiveTableColumnComponent, InteractiveTableComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LOGOUT_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LicenseSearchField, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_FEATURE_KEY, MAP_VIEW_CONSTRAINTS, METADATA_LANGUAGE, MY_FORMATS, MapContainerComponent, MapFacade, MapLegendComponent, MapStateContainerComponent, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataMapperContext, MetadataQualityComponent, MetadataQualityItemComponent, ModalDialogComponent, MultilingualSearchField, MyOrgService, NAMESPACES, NavigationButtonComponent, NotificationComponent, NotificationsContainerComponent, NotificationsService, ORGANIZATIONS_STRATEGY, ORGANIZATION_PAGE_URL_TOKEN, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OwnerSearchField, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PaginationDotsComponent, PatchResultsAggregations, PopoverComponent, PopupAlertComponent, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_ORGANIZATION, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetaComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, ResultsTableContainerComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SETTINGS_URL, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchFiltersSummaryComponent, SearchFiltersSummaryItemComponent, SearchInputComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SimpleSearchField, SiteTitleComponent, SortByComponent, SortableListComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, SwitchToggleComponent, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, TranslatedSearchField, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UrlInputComponent, UserFeedbackItemComponent, UserPreviewComponent, UserSearchField, UtilI18nModule, UtilSharedModule, VECTOR_STYLE_DEFAULT, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, XmlParseError, _reset, allChildrenElement, appConfigWithTranslationFixture, appendChildTree, appendChildren, assertValidXml, blockModelFixture, bytesToMegabytes, canEditRecord, checkFileFormat, clearSelectedFeatures, createChild, createDocument, createElement, createFuzzyFilter, createNestedChild, createNestedElement, currentPage, defaultMapStyleFixture, defaultMapStyleHlFixture, downgradeImage, downsizeImage, draftSaveSuccess, dragPanCondition, dropEmptyTranslations, editorReducer, emptyBlockModelFixture, findChildElement, findChildOrCreate, findChildrenElement, findConverterForDocument, findNestedChildOrCreate, findNestedElement, findNestedElements, findParent, firstChildElement, formatDate, formatUserInfo, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLayers, getLinkLabel, getLinkPriority, getMapContext, getMapContextLayerFromConfig, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getNamespace, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getRootElement, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSelectedFeatures, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, hasRecordChangedSinceDraft, hasRecordChangedSinceDraftSuccess, initSearch, initialEditorState, initialMapState, initialState, isConfigLoaded, isDateRange, isFormatInQueryParam, isPublished, itemModelFixture, loadAppConfig, malformedConfigFixture, mapConfigFixture, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, megabytesToBytes, mimeTypeToFormat, minimalAppConfigFixture, missingMandatoryConfigFixture, mouseWheelZoomCondition, noDuplicateFileName, okAppConfigFixture, openDataset, openRecord, parse, parseXmlString, placeholder, prioritizePageScroll, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readAttribute, readDataset, readDatasetHeaders, readText, reducer$2 as reducer, reducerSearch, removeAllChildren, removeChildren, removeChildrenByName, removeSearchParams, removeWhitespace, renameElements, saveRecord, saveRecordFailure, saveRecordSuccess, selectCanEditRecord, selectCurrentPage, selectEditorConfig, selectEditorState, selectFallback, selectFallbackFields, selectField, selectHasRecordChanged, selectIsPublished, selectRecord, selectRecordChangedSinceSave, selectRecordSaveError, selectRecordSaving, selectRecordSections, selectRecordSource, selectTranslatedField, selectTranslatedValue, setContext, setCurrentPage, setFieldVisibility, setSelectedFeatures, setTextContent, someHabTableItemFixture, sortByFromString, sortByToString, sortByToStrings, stripHtml, stripNamespace, tableItemsFixture, toDate, totalPages, undoRecordDraft, unrecognizedKeysConfigFixture, updateRecordField, writeAttribute, wrongLanguageCodeConfigFixture, xmlToString };
42028
+ export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AbstractSearchField, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, ApplicationBannerComponent, AuthService, AutocompleteComponent, AvailableServicesField, AvatarComponent, AvatarServiceInterface, BASEMAP_LAYERS, BadgeComponent, BaseConverter, BaseFileReader, BaseReader, BlockListComponent, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ConfirmationDialogComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_GN4_LOGIN_URL, DEFAULT_GN4_LOGOUT_URL, DEFAULT_GN4_SETTINGS_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DO_NOT_USE_DEFAULT_BASEMAP, DataService, DataTableComponent, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangeDropdownComponent, DateRangePickerComponent, DateRangeSearchField, DateService, DcatApConverter, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EDITOR_FEATURE_KEY, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EXTERNAL_VIEWER_OPEN_NEW_TAB, EXTERNAL_VIEWER_URL_TEMPLATE, EditableLabelDirective, EditorFacade, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorComponent, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FILTER_SUMMARY_IGNORE_LIST, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDetailComponent, FeatureEditorModule, FeatureMapModule, FeatureNotificationsModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileInputComponent, FileTranslateLoader, FilesDropDirective, FilterDropdownComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, GeojsonReader, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GpfApiDlComponent, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageInputComponent, ImageOverlayPreviewComponent, ImportRecordComponent, InteractiveTableColumnComponent, InteractiveTableComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LOGOUT_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LicenseSearchField, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_FEATURE_KEY, MAP_VIEW_CONSTRAINTS, METADATA_LANGUAGE, MY_FORMATS, MapContainerComponent, MapFacade, MapLegendComponent, MapStateContainerComponent, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataMapperContext, MetadataQualityComponent, MetadataQualityItemComponent, ModalDialogComponent, MultilingualSearchField, MyOrgService, NAMESPACES, NavigationButtonComponent, NotificationComponent, NotificationsContainerComponent, NotificationsService, ORGANIZATIONS_STRATEGY, ORGANIZATION_PAGE_URL_TOKEN, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OwnerSearchField, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PaginationDotsComponent, PatchResultsAggregations, PopoverComponent, PopupAlertComponent, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_ORGANIZATION, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetaComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, ResultsTableContainerComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SETTINGS_URL, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchFiltersSummaryComponent, SearchFiltersSummaryItemComponent, SearchInputComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SimpleSearchField, SiteTitleComponent, SortByComponent, SortableListComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, SwitchToggleComponent, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, TranslatedSearchField, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UrlInputComponent, UserFeedbackItemComponent, UserPreviewComponent, UserSearchField, UtilI18nModule, UtilSharedModule, VECTOR_STYLE_DEFAULT, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, XmlParseError, _reset, allChildrenElement, appConfigWithTranslationFixture, appendChildTree, appendChildren, assertValidXml, blockModelFixture, bytesToMegabytes, canEditRecord, checkFileFormat, clearSelectedFeatures, createChild, createDocument, createElement, createFuzzyFilter, createNestedChild, createNestedElement, currentPage, defaultMapStyleFixture, defaultMapStyleHlFixture, downgradeImage, downsizeImage, draftSaveSuccess, dragPanCondition, dropEmptyTranslations, editorReducer, emptyBlockModelFixture, findChildElement, findChildOrCreate, findChildrenElement, findConverterForDocument, findNestedChildOrCreate, findNestedElement, findNestedElements, findParent, firstChildElement, formatDate, formatUserInfo, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLayers, getLinkLabel, getLinkPriority, getMapContext, getMapContextLayerFromConfig, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getNamespace, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getRootElement, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSelectedFeatures, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, hasRecordChangedSinceDraft, hasRecordChangedSinceDraftSuccess, initSearch, initialEditorState, initialMapState, initialState, isConfigLoaded, isDateRange, isFormatInQueryParam, isPublished, itemModelFixture, loadAppConfig, malformedConfigFixture, mapConfigFixture, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, megabytesToBytes, mimeTypeToFormat, minimalAppConfigFixture, missingMandatoryConfigFixture, mouseWheelZoomCondition, noDuplicateFileName, okAppConfigFixture, openDataset, openRecord, parse, parseXmlString, placeholder, prioritizePageScroll, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readAttribute, readDataset, readDatasetHeaders, readText, reducer$2 as reducer, reducerSearch, removeAllChildren, removeChildren, removeChildrenByName, removeSearchParams, removeWhitespace, renameElements, saveRecord, saveRecordFailure, saveRecordSuccess, selectCanEditRecord, selectCurrentPage, selectEditorConfig, selectEditorState, selectFallback, selectFallbackFields, selectField, selectHasRecordChanged, selectIsPublished, selectRecord, selectRecordChangedSinceSave, selectRecordSaveError, selectRecordSaving, selectRecordSections, selectRecordSource, selectTranslatedField, selectTranslatedValue, setContext, setCurrentPage, setFieldVisibility, setSelectedFeatures, setTextContent, someHabTableItemFixture, sortByFromString, sortByToString, sortByToStrings, stripHtml, stripNamespace, tableItemsFixture, toDate, totalPages, undoRecordDraft, unrecognizedKeysConfigFixture, updateRecordField, writeAttribute, wrongLanguageCodeConfigFixture, xmlToString };
41829
42029
  //# sourceMappingURL=geonetwork-ui.mjs.map