geonetwork-ui 2.4.0-dev.e4dc8777 → 2.4.0-dev.e6ae55aa

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 (142) hide show
  1. package/esm2022/libs/api/metadata-converter/src/index.mjs +2 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/atomic-operations.mjs +2 -1
  3. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
  4. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +12 -1
  5. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  6. package/esm2022/libs/data-access/gn4/src/openapi/api/records.api.service.mjs +2 -6
  7. package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +2 -1
  8. package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +3 -3
  9. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +7 -2
  10. package/esm2022/libs/feature/editor/src/lib/+state/editor.models.mjs +1 -1
  11. package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +7 -3
  12. package/esm2022/libs/feature/editor/src/lib/+state/editor.selectors.mjs +16 -6
  13. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +3 -3
  14. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/index.mjs +1 -2
  15. package/esm2022/libs/feature/editor/src/lib/components/record-form/record-form.component.mjs +11 -7
  16. package/esm2022/libs/feature/editor/src/lib/expressions.mjs +1 -1
  17. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +143 -60
  18. package/esm2022/libs/feature/editor/src/lib/models/editor-config.model.mjs +2 -0
  19. package/esm2022/libs/feature/editor/src/lib/models/index.mjs +2 -1
  20. package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +4 -3
  21. package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +42 -23
  22. package/esm2022/libs/feature/record/src/lib/data-view-share/data-view-share.component.mjs +13 -5
  23. package/esm2022/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.mjs +49 -15
  24. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +9 -3
  25. package/esm2022/libs/ui/elements/src/lib/user-preview/user-preview.component.mjs +3 -3
  26. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +29 -0
  27. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +15 -7
  28. package/esm2022/translations/de.json +64 -30
  29. package/esm2022/translations/en.json +36 -2
  30. package/esm2022/translations/es.json +34 -0
  31. package/esm2022/translations/fr.json +37 -3
  32. package/esm2022/translations/it.json +34 -0
  33. package/esm2022/translations/nl.json +34 -0
  34. package/esm2022/translations/pt.json +34 -0
  35. package/fesm2022/geonetwork-ui.mjs +611 -163
  36. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  37. package/libs/api/metadata-converter/src/index.d.ts +1 -0
  38. package/libs/api/metadata-converter/src/index.d.ts.map +1 -1
  39. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
  40. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +1 -0
  41. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  42. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +1 -0
  43. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  44. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +9 -0
  45. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  46. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts.map +1 -1
  47. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +5 -0
  48. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -1
  49. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +4 -4
  50. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
  51. package/libs/feature/editor/src/lib/+state/editor.models.d.ts +8 -0
  52. package/libs/feature/editor/src/lib/+state/editor.models.d.ts.map +1 -1
  53. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts +4 -3
  54. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -1
  55. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +4 -8
  56. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -1
  57. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +1 -1
  58. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  59. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts +0 -1
  60. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts.map +1 -1
  61. package/libs/feature/editor/src/lib/components/record-form/record-form.component.d.ts +5 -7
  62. package/libs/feature/editor/src/lib/components/record-form/record-form.component.d.ts.map +1 -1
  63. package/libs/feature/editor/src/lib/expressions.d.ts +1 -1
  64. package/libs/feature/editor/src/lib/expressions.d.ts.map +1 -1
  65. package/libs/feature/editor/src/lib/fields.config.d.ts +38 -2
  66. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  67. package/libs/feature/editor/src/lib/models/editor-config.model.d.ts +36 -0
  68. package/libs/feature/editor/src/lib/models/editor-config.model.d.ts.map +1 -0
  69. package/libs/feature/editor/src/lib/models/index.d.ts +1 -0
  70. package/libs/feature/editor/src/lib/models/index.d.ts.map +1 -1
  71. package/libs/feature/editor/src/lib/services/editor.service.d.ts +2 -2
  72. package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
  73. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts +4 -1
  74. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts.map +1 -1
  75. package/libs/feature/record/src/lib/data-view-share/data-view-share.component.d.ts +4 -1
  76. package/libs/feature/record/src/lib/data-view-share/data-view-share.component.d.ts.map +1 -1
  77. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts +4 -1
  78. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts.map +1 -1
  79. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +3 -1
  80. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -1
  81. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +11 -0
  82. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -0
  83. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +4 -2
  84. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  85. package/package.json +1 -1
  86. package/src/libs/api/metadata-converter/src/index.ts +1 -0
  87. package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +1 -0
  88. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +1 -0
  89. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +20 -0
  90. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +12 -0
  91. package/src/libs/common/fixtures/src/index.ts +2 -0
  92. package/src/libs/common/fixtures/src/lib/editor/editor.fixtures.ts +156 -0
  93. package/src/libs/common/fixtures/src/lib/editor/index.ts +1 -0
  94. package/src/libs/data-access/gn4/src/openapi/api/records.api.service.ts +1 -5
  95. package/src/libs/data-access/gn4/src/spec.yaml +0 -8
  96. package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +5 -0
  97. package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +2 -2
  98. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +9 -1
  99. package/src/libs/feature/editor/src/lib/+state/editor.models.ts +11 -0
  100. package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +11 -5
  101. package/src/libs/feature/editor/src/lib/+state/editor.selectors.ts +22 -8
  102. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +9 -9
  103. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +2 -1
  104. package/src/libs/feature/editor/src/lib/components/record-form/form-field/index.ts +0 -1
  105. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.html +51 -11
  106. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.ts +15 -8
  107. package/src/libs/feature/editor/src/lib/expressions.ts +1 -1
  108. package/src/libs/feature/editor/src/lib/fields.config.ts +175 -61
  109. package/src/libs/feature/editor/src/lib/models/editor-config.model.ts +53 -0
  110. package/src/libs/feature/editor/src/lib/models/index.ts +1 -0
  111. package/src/libs/feature/editor/src/lib/services/editor.service.ts +8 -4
  112. package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +36 -19
  113. package/src/libs/feature/record/src/lib/data-view-share/data-view-share.component.html +6 -2
  114. package/src/libs/feature/record/src/lib/data-view-share/data-view-share.component.ts +11 -0
  115. package/src/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.ts +59 -12
  116. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +1 -0
  117. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +5 -0
  118. package/src/libs/ui/elements/src/lib/user-preview/user-preview.component.html +1 -1
  119. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.css +31 -0
  120. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.html +15 -0
  121. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.ts +38 -0
  122. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.css +0 -0
  123. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +17 -0
  124. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +22 -0
  125. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +9 -0
  126. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +26 -12
  127. package/translations/de.json +64 -30
  128. package/translations/en.json +36 -2
  129. package/translations/es.json +34 -0
  130. package/translations/fr.json +37 -3
  131. package/translations/it.json +34 -0
  132. package/translations/nl.json +34 -0
  133. package/translations/pt.json +34 -0
  134. package/translations/sk.json +34 -0
  135. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.mjs +0 -2
  136. package/esm2022/libs/feature/editor/src/lib/models/fields.model.mjs +0 -2
  137. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.d.ts +0 -26
  138. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.d.ts.map +0 -1
  139. package/libs/feature/editor/src/lib/models/fields.model.d.ts +0 -15
  140. package/libs/feature/editor/src/lib/models/fields.model.d.ts.map +0 -1
  141. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.ts +0 -43
  142. package/src/libs/feature/editor/src/lib/models/fields.model.ts +0 -29
@@ -48,7 +48,7 @@ import { MVT, WFS, GeoJSON as GeoJSON$1 } from 'ol/format';
48
48
  import VectorTileLayer from 'ol/layer/VectorTile';
49
49
  import OGCMapTile from 'ol/source/OGCMapTile.js';
50
50
  import ImageLayer from 'ol/layer/Image';
51
- import * as i2$5 from '@angular/material/tabs';
51
+ import * as i2$6 from '@angular/material/tabs';
52
52
  import { MatTabsModule } from '@angular/material/tabs';
53
53
  import * as i2$2 from '@angular/forms';
54
54
  import { FormsModule, ReactiveFormsModule, UntypedFormControl, FormArray, FormControl } from '@angular/forms';
@@ -81,6 +81,8 @@ import { moveItemInArray, CdkDropList, CdkDrag, CdkDragHandle } from '@angular/c
81
81
  import EmblaCarousel from 'embla-carousel';
82
82
  import { formatDistance } from 'date-fns';
83
83
  import { enUS, sk, pt as pt$1, nl as nl$1, it as it$1, es as es$1, de as de$1, fr as fr$1 } from 'date-fns/locale';
84
+ import * as i2$5 from '@angular/material/menu';
85
+ import { MatMenuTrigger, MatMenuModule } from '@angular/material/menu';
84
86
  import * as i1$8 from '@ngrx/effects';
85
87
  import { createEffect, ofType, EffectsModule, Actions } from '@ngrx/effects';
86
88
  import tippy from 'tippy.js';
@@ -91,7 +93,7 @@ import { trigger, transition, animate, keyframes, style } from '@angular/animati
91
93
  import { Chart, BarController, BarElement, CategoryScale, LinearScale, LineController, LineElement, PointElement, PieController, ArcElement, ScatterController, Tooltip, Colors, Legend } from 'chart.js';
92
94
  import * as i4 from '@angular/cdk/scrolling';
93
95
  import { ScrollingModule } from '@angular/cdk/scrolling';
94
- import * as i2$6 from '@angular/material/sort';
96
+ import * as i2$7 from '@angular/material/sort';
95
97
  import { MatSort, MatSortModule } from '@angular/material/sort';
96
98
  import * as i1$9 from '@angular/material/table';
97
99
  import { MatTableModule } from '@angular/material/table';
@@ -2176,6 +2178,7 @@ const mapKeywords = (thesauri, language) => {
2176
2178
  keywords.push({
2177
2179
  label: selectTranslatedValue(keyword, language),
2178
2180
  type: getKeywordTypeFromKeywordTypeCode(rawThesaurus.theme),
2181
+ ...(keyword.link && { key: keyword.link }),
2179
2182
  ...(thesaurus && { thesaurus }),
2180
2183
  });
2181
2184
  }
@@ -8641,11 +8644,7 @@ class RecordsApiService {
8641
8644
  headers = headers.set('Accept', httpHeaderAcceptSelected);
8642
8645
  }
8643
8646
  // to determine the Content-Type header
8644
- const consumes = [
8645
- 'application/xml',
8646
- 'application/json',
8647
- 'application/x-www-form-urlencoded',
8648
- ];
8647
+ const consumes = ['application/xml'];
8649
8648
  const httpContentTypeSelected = this.configuration.selectHeaderContentType(consumes);
8650
8649
  if (httpContentTypeSelected !== undefined) {
8651
8650
  headers = headers.set('Content-Type', httpContentTypeSelected);
@@ -17472,38 +17471,71 @@ var de = {
17472
17471
  "downloads.format.unknown": "unbekannt",
17473
17472
  "downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden",
17474
17473
  dropFile: dropFile$6,
17475
- "editor.record.form.keywords": "Schlagwörter",
17474
+ "editor.record.form.bottomButtons.comeBackLater": "",
17475
+ "editor.record.form.bottomButtons.next": "",
17476
+ "editor.record.form.bottomButtons.previous": "",
17477
+ "editor.record.form.field.abstract": "",
17478
+ "editor.record.form.field.keywords": "Schlagwörter",
17479
+ "editor.record.form.field.license": "Lizenz",
17480
+ "editor.record.form.field.recordUpdated": "",
17481
+ "editor.record.form.field.resourceUpdated": "",
17482
+ "editor.record.form.field.temporalExtents": "",
17483
+ "editor.record.form.field.title": "",
17484
+ "editor.record.form.field.uniqueIdentifier": "",
17485
+ "editor.record.form.field.updateFrequency": "",
17486
+ "editor.record.form.abstract": "Kurzbeschreibung",
17487
+ "editor.record.form.keywords": "Schlüsselwörter",
17476
17488
  "editor.record.form.license": "Lizenz",
17477
- "editor.record.form.license.cc-by": "",
17478
- "editor.record.form.license.cc-by-sa": "",
17479
- "editor.record.form.license.cc-zero": "",
17480
- "editor.record.form.license.etalab": "",
17481
- "editor.record.form.license.etalab-v2": "",
17482
- "editor.record.form.license.odbl": "",
17483
- "editor.record.form.license.odc-by": "",
17484
- "editor.record.form.license.pddl": "",
17489
+ "editor.record.form.license.cc-by": "Creative Commons CC-BY",
17490
+ "editor.record.form.license.cc-by-sa": "Creative Commons CC-BY-SA",
17491
+ "editor.record.form.license.cc-zero": "Creative Commons CC-0",
17492
+ "editor.record.form.license.etalab": "Offene Lizenz (Etalab)",
17493
+ "editor.record.form.license.etalab-v2": "Offene Lizenz v2.0 (Etalab)",
17494
+ "editor.record.form.license.odbl": "Open Data Commons ODbL",
17495
+ "editor.record.form.license.odc-by": "Open Data Commons ODC-By",
17496
+ "editor.record.form.license.pddl": "Open Data Commons PDDL",
17485
17497
  "editor.record.form.license.unknown": "Unbekannt oder nicht vorhanden",
17486
- "editor.record.form.resourceUpdated": "",
17487
- "editor.record.form.temporalExtents": "",
17488
- "editor.record.form.temporalExtents.addDate": "",
17489
- "editor.record.form.temporalExtents.addRange": "",
17490
- "editor.record.form.temporalExtents.date": "",
17491
- "editor.record.form.temporalExtents.range": "",
17492
- "editor.record.form.updateFrequency": "",
17493
- "editor.record.form.updateFrequency.planned": "",
17494
- "editor.record.loadError.body": "",
17495
- "editor.record.loadError.closeMessage": "",
17496
- "editor.record.loadError.title": "",
17497
- "editor.record.publish": "",
17498
- "editor.record.publishError.body": "",
17499
- "editor.record.publishError.closeMessage": "",
17500
- "editor.record.publishError.title": "",
17501
- "editor.record.publishSuccess.body": "",
17502
- "editor.record.publishSuccess.title": "",
17503
- "editor.record.saveStatus.asDraftOnly": "",
17504
- "editor.record.saveStatus.draftWithChangesPending": "",
17505
- "editor.record.saveStatus.recordUpToDate": "",
17506
- "editor.record.upToDate": "",
17498
+ "editor.record.form.page.accessAndContact": "",
17499
+ "editor.record.form.page.description": "",
17500
+ "editor.record.form.page.ressources": "",
17501
+ "editor.record.form.section.about.description": "",
17502
+ "editor.record.form.section.about.label": "",
17503
+ "editor.record.form.section.annexes.label": "",
17504
+ "editor.record.form.section.associatedResources.description": "",
17505
+ "editor.record.form.section.associatedResources.label": "",
17506
+ "editor.record.form.section.classification.description": "",
17507
+ "editor.record.form.section.classification.label": "",
17508
+ "editor.record.form.section.dataManagers.description": "",
17509
+ "editor.record.form.section.dataManagers.label": "",
17510
+ "editor.record.form.section.dataPointOfContact.description": "",
17511
+ "editor.record.form.section.dataPointOfContact.label": "",
17512
+ "editor.record.form.section.geographicalCoverage.label": "",
17513
+ "editor.record.form.section.useAndAccessConditions.label": "",
17514
+ "editor.record.form.metadata.title": "Metadaten-Titel",
17515
+ "editor.record.form.record.updated": "Datensatz zuletzt aktualisiert",
17516
+ "editor.record.form.resourceUpdated": "Letztes Aktualisierungsdatum",
17517
+ "editor.record.form.temporalExtents": "Zeitlicher Umfang",
17518
+ "editor.record.form.temporalExtents.addDate": "Zeitpunkt",
17519
+ "editor.record.form.temporalExtents.addRange": "Zeitraum",
17520
+ "editor.record.form.temporalExtents.date": "Datum",
17521
+ "editor.record.form.temporalExtents.range": "Datumsbereich",
17522
+ "editor.record.form.unique.identifier": "Eindeutige Kennung (ID)",
17523
+ "editor.record.form.updateFrequency": "Aktualisierungshäufigkeit",
17524
+ "editor.record.form.updateFrequency.planned": "Die Daten sollten regelmäßig aktualisiert werden.",
17525
+ "editor.record.loadError.body": "Der Datensatz konnte nicht geladen werden:",
17526
+ "editor.record.loadError.closeMessage": "Verstanden",
17527
+ "editor.record.loadError.title": "Fehler beim Laden des Datensatzes",
17528
+ "editor.record.publish": "Diesen Datensatz veröffentlichen",
17529
+ "editor.record.publishError.body": "Der Datensatz konnte nicht veröffentlicht werden:",
17530
+ "editor.record.publishError.closeMessage": "Verstanden",
17531
+ "editor.record.publishError.title": "Fehler beim Veröffentlichen des Datensatzes",
17532
+ "editor.record.publishSuccess.body": "Der Datensatz wurde erfolgreich veröffentlicht!",
17533
+ "editor.record.publishSuccess.title": "Veröffentlichung erfolgreich",
17534
+ "editor.record.saveStatus.asDraftOnly": "Nur als Entwurf gespeichert - noch nicht veröffentlicht",
17535
+ "editor.record.saveStatus.draftWithChangesPending": "Als Entwurf gespeichert - Änderungen stehen aus",
17536
+ "editor.record.saveStatus.recordUpToDate": "Datensatz ist auf dem neuesten Stand",
17537
+ "editor.record.upToDate": "Dieser Datensatz ist auf dem neuesten Stand",
17538
+ "editor.sidebar.menu.editor": "",
17507
17539
  "externalviewer.dataset.unnamed": "Datensatz aus dem Datahub",
17508
17540
  "facets.block.title.OrgForResource": "Organisation",
17509
17541
  "facets.block.title.availableInServices": "Verfügbar für",
@@ -17581,6 +17613,7 @@ var de = {
17581
17613
  "pagination.pageOf": "von",
17582
17614
  previous: previous$6,
17583
17615
  "record.action.download": "Herunterladen",
17616
+ "record.action.duplicate": "",
17584
17617
  "record.action.view": "Anzeigen",
17585
17618
  "record.externalViewer.open": "In externem Kartenviewer öffnen",
17586
17619
  "record.metadata.about": "Beschreibung",
@@ -17903,6 +17936,19 @@ var en = {
17903
17936
  "downloads.format.unknown": "unknown",
17904
17937
  "downloads.wfs.featuretype.not.found": "The layer was not found",
17905
17938
  dropFile: dropFile$5,
17939
+ "editor.record.form.bottomButtons.comeBackLater": "Come back later",
17940
+ "editor.record.form.bottomButtons.next": "Next",
17941
+ "editor.record.form.bottomButtons.previous": "Previous",
17942
+ "editor.record.form.field.abstract": "Abstract",
17943
+ "editor.record.form.field.keywords": "Keywords",
17944
+ "editor.record.form.field.license": "License",
17945
+ "editor.record.form.field.recordUpdated": "Record Updated",
17946
+ "editor.record.form.field.resourceUpdated": "Resource Updated",
17947
+ "editor.record.form.field.temporalExtents": "Temporal extents",
17948
+ "editor.record.form.field.title": "Metadata title",
17949
+ "editor.record.form.field.uniqueIdentifier": "Unique identifier",
17950
+ "editor.record.form.field.updateFrequency": "Update frequency",
17951
+ "editor.record.form.abstract": "Abstract",
17906
17952
  "editor.record.form.keywords": "Keywords",
17907
17953
  "editor.record.form.license": "License",
17908
17954
  "editor.record.form.license.cc-by": "Creative Commons CC-BY",
@@ -17914,12 +17960,31 @@ var en = {
17914
17960
  "editor.record.form.license.odc-by": "Open Data Commons ODC-By",
17915
17961
  "editor.record.form.license.pddl": "Open Data Commons PDDL",
17916
17962
  "editor.record.form.license.unknown": "Unknown or absent",
17963
+ "editor.record.form.page.accessAndContact": "Access and contact",
17964
+ "editor.record.form.page.description": "Resource description",
17965
+ "editor.record.form.page.ressources": "Resources",
17966
+ "editor.record.form.section.about.description": "This section describes the resource.",
17967
+ "editor.record.form.section.about.label": "About the resource",
17968
+ "editor.record.form.section.annexes.label": "Annexes",
17969
+ "editor.record.form.section.associatedResources.description": "Drop files here to associate them with the resource.",
17970
+ "editor.record.form.section.associatedResources.label": "Associated resources",
17971
+ "editor.record.form.section.classification.description": "The classification has an impact on the access to the data.",
17972
+ "editor.record.form.section.classification.label": "Classification",
17973
+ "editor.record.form.section.dataManagers.description": "The data managers are responsible for the data.",
17974
+ "editor.record.form.section.dataManagers.label": "Data managers",
17975
+ "editor.record.form.section.dataPointOfContact.description": "This information concerns the metadata.",
17976
+ "editor.record.form.section.dataPointOfContact.label": "Data point of contact",
17977
+ "editor.record.form.section.geographicalCoverage.label": "Geographical coverage",
17978
+ "editor.record.form.section.useAndAccessConditions.label": "Use and access conditions",
17979
+ "editor.record.form.metadata.title": "Metadata title",
17980
+ "editor.record.form.record.updated": "Record updated",
17917
17981
  "editor.record.form.resourceUpdated": "Last update date",
17918
17982
  "editor.record.form.temporalExtents": "Temporal extent",
17919
17983
  "editor.record.form.temporalExtents.addDate": "Time instant",
17920
17984
  "editor.record.form.temporalExtents.addRange": "Time period",
17921
17985
  "editor.record.form.temporalExtents.date": "Date",
17922
17986
  "editor.record.form.temporalExtents.range": "Date range",
17987
+ "editor.record.form.unique.identifier": "Unique identifier",
17923
17988
  "editor.record.form.updateFrequency": "Update frequency",
17924
17989
  "editor.record.form.updateFrequency.planned": "The data should be updated regularly.",
17925
17990
  "editor.record.loadError.body": "The record could not be loaded:",
@@ -17935,6 +18000,7 @@ var en = {
17935
18000
  "editor.record.saveStatus.draftWithChangesPending": "Saved as draft - changes are pending",
17936
18001
  "editor.record.saveStatus.recordUpToDate": "Record is up to date",
17937
18002
  "editor.record.upToDate": "This record is up to date",
18003
+ "editor.sidebar.menu.editor": "Editor",
17938
18004
  "externalviewer.dataset.unnamed": "Datahub layer",
17939
18005
  "facets.block.title.OrgForResource": "Organisation",
17940
18006
  "facets.block.title.availableInServices": "Available for",
@@ -18003,8 +18069,8 @@ var en = {
18003
18069
  "organisations.sortBy.nameDesc": "Name Z → A",
18004
18070
  "organisations.sortBy.recordCountAsc": "Publications 0 → 9",
18005
18071
  "organisations.sortBy.recordCountDesc": "Publications 9 → 0",
18006
- "organization.details.lastPublishedDatasets": "Last published datasets",
18007
- "organization.details.lastPublishedDatasets.searchAllButton": "Search all",
18072
+ "organization.details.lastPublishedDatasets": "",
18073
+ "organization.details.lastPublishedDatasets.searchAllButton": "",
18008
18074
  "organization.details.mailContact": "Contact by email",
18009
18075
  "organization.header.recordCount": "{count, plural, =0{data} one{data} other{datas}}",
18010
18076
  "pagination.nextPage": "Next page",
@@ -18012,6 +18078,7 @@ var en = {
18012
18078
  "pagination.pageOf": "of",
18013
18079
  previous: previous$5,
18014
18080
  "record.action.download": "Download",
18081
+ "record.action.duplicate": "Duplicate",
18015
18082
  "record.action.view": "View",
18016
18083
  "record.externalViewer.open": "Open in the external map viewer",
18017
18084
  "record.metadata.about": "Description",
@@ -18334,6 +18401,19 @@ var es = {
18334
18401
  "downloads.format.unknown": "",
18335
18402
  "downloads.wfs.featuretype.not.found": "",
18336
18403
  dropFile: dropFile$4,
18404
+ "editor.record.form.bottomButtons.comeBackLater": "",
18405
+ "editor.record.form.bottomButtons.next": "",
18406
+ "editor.record.form.bottomButtons.previous": "",
18407
+ "editor.record.form.field.abstract": "",
18408
+ "editor.record.form.field.keywords": "",
18409
+ "editor.record.form.field.license": "",
18410
+ "editor.record.form.field.recordUpdated": "",
18411
+ "editor.record.form.field.resourceUpdated": "",
18412
+ "editor.record.form.field.temporalExtents": "",
18413
+ "editor.record.form.field.title": "",
18414
+ "editor.record.form.field.uniqueIdentifier": "",
18415
+ "editor.record.form.field.updateFrequency": "",
18416
+ "editor.record.form.abstract": "",
18337
18417
  "editor.record.form.keywords": "",
18338
18418
  "editor.record.form.license": "",
18339
18419
  "editor.record.form.license.cc-by": "",
@@ -18345,12 +18425,31 @@ var es = {
18345
18425
  "editor.record.form.license.odc-by": "",
18346
18426
  "editor.record.form.license.pddl": "",
18347
18427
  "editor.record.form.license.unknown": "",
18428
+ "editor.record.form.page.accessAndContact": "",
18429
+ "editor.record.form.page.description": "",
18430
+ "editor.record.form.page.ressources": "",
18431
+ "editor.record.form.section.about.description": "",
18432
+ "editor.record.form.section.about.label": "",
18433
+ "editor.record.form.section.annexes.label": "",
18434
+ "editor.record.form.section.associatedResources.description": "",
18435
+ "editor.record.form.section.associatedResources.label": "",
18436
+ "editor.record.form.section.classification.description": "",
18437
+ "editor.record.form.section.classification.label": "",
18438
+ "editor.record.form.section.dataManagers.description": "",
18439
+ "editor.record.form.section.dataManagers.label": "",
18440
+ "editor.record.form.section.dataPointOfContact.description": "",
18441
+ "editor.record.form.section.dataPointOfContact.label": "",
18442
+ "editor.record.form.section.geographicalCoverage.label": "",
18443
+ "editor.record.form.section.useAndAccessConditions.label": "",
18444
+ "editor.record.form.metadata.title": "",
18445
+ "editor.record.form.record.updated": "",
18348
18446
  "editor.record.form.resourceUpdated": "",
18349
18447
  "editor.record.form.temporalExtents": "",
18350
18448
  "editor.record.form.temporalExtents.addDate": "",
18351
18449
  "editor.record.form.temporalExtents.addRange": "",
18352
18450
  "editor.record.form.temporalExtents.date": "",
18353
18451
  "editor.record.form.temporalExtents.range": "",
18452
+ "editor.record.form.unique.identifier": "",
18354
18453
  "editor.record.form.updateFrequency": "",
18355
18454
  "editor.record.form.updateFrequency.planned": "",
18356
18455
  "editor.record.loadError.body": "",
@@ -18366,6 +18465,7 @@ var es = {
18366
18465
  "editor.record.saveStatus.draftWithChangesPending": "",
18367
18466
  "editor.record.saveStatus.recordUpToDate": "",
18368
18467
  "editor.record.upToDate": "",
18468
+ "editor.sidebar.menu.editor": "",
18369
18469
  "externalviewer.dataset.unnamed": "",
18370
18470
  "facets.block.title.OrgForResource": "",
18371
18471
  "facets.block.title.availableInServices": "",
@@ -18443,6 +18543,7 @@ var es = {
18443
18543
  "pagination.pageOf": "",
18444
18544
  previous: previous$4,
18445
18545
  "record.action.download": "",
18546
+ "record.action.duplicate": "",
18446
18547
  "record.action.view": "",
18447
18548
  "record.externalViewer.open": "",
18448
18549
  "record.metadata.about": "",
@@ -18765,7 +18866,20 @@ var fr = {
18765
18866
  "downloads.format.unknown": "inconnu",
18766
18867
  "downloads.wfs.featuretype.not.found": "La couche n'a pas été retrouvée",
18767
18868
  dropFile: dropFile$3,
18768
- "editor.record.form.keywords": "Mots-clés",
18869
+ "editor.record.form.bottomButtons.comeBackLater": "Revenir plus tard",
18870
+ "editor.record.form.bottomButtons.next": "Suivant",
18871
+ "editor.record.form.bottomButtons.previous": "Précédent",
18872
+ "editor.record.form.field.abstract": "Résumé",
18873
+ "editor.record.form.field.keywords": "Mots-clés",
18874
+ "editor.record.form.field.license": "Licence",
18875
+ "editor.record.form.field.recordUpdated": "Date de dernière révision",
18876
+ "editor.record.form.field.resourceUpdated": "Date de dernière révision",
18877
+ "editor.record.form.field.temporalExtents": "Étendue temporelle",
18878
+ "editor.record.form.field.title": "Titre",
18879
+ "editor.record.form.field.uniqueIdentifier": "Identifiant unique",
18880
+ "editor.record.form.field.updateFrequency": "Fréquence de mise à jour",
18881
+ "editor.record.form.abstract": "",
18882
+ "editor.record.form.keywords": "",
18769
18883
  "editor.record.form.license": "Licence",
18770
18884
  "editor.record.form.license.cc-by": "",
18771
18885
  "editor.record.form.license.cc-by-sa": "",
@@ -18776,12 +18890,31 @@ var fr = {
18776
18890
  "editor.record.form.license.odc-by": "",
18777
18891
  "editor.record.form.license.pddl": "",
18778
18892
  "editor.record.form.license.unknown": "Non-reconnue ou absente",
18893
+ "editor.record.form.page.accessAndContact": "Acces et contact",
18894
+ "editor.record.form.page.description": "Description de la ressource",
18895
+ "editor.record.form.page.ressources": "Ressources",
18896
+ "editor.record.form.section.about.description": "Ces informations concernent la donnée.",
18897
+ "editor.record.form.section.about.label": "A propos de la ressource",
18898
+ "editor.record.form.section.annexes.label": "Annexes",
18899
+ "editor.record.form.section.associatedResources.description": "Déposez les jeux de données associées à cette fiche de métadonnée.",
18900
+ "editor.record.form.section.associatedResources.label": "Ressources associees",
18901
+ "editor.record.form.section.classification.description": "La classification a un impact sur la recherche du jeux de données.",
18902
+ "editor.record.form.section.classification.label": "Classification",
18903
+ "editor.record.form.section.dataManagers.description": "Cette information concerne la donnée.",
18904
+ "editor.record.form.section.dataManagers.label": "Responsables de la donnee",
18905
+ "editor.record.form.section.dataPointOfContact.description": "Cette information concerne la fiche de métadonnée.",
18906
+ "editor.record.form.section.dataPointOfContact.label": "Point de contact de la metadonee",
18907
+ "editor.record.form.section.geographicalCoverage.label": "Couverture geographique",
18908
+ "editor.record.form.section.useAndAccessConditions.label": "Conditions d'acces et usage",
18909
+ "editor.record.form.metadata.title": "",
18910
+ "editor.record.form.record.updated": "",
18779
18911
  "editor.record.form.resourceUpdated": "Date de dernière révision",
18780
18912
  "editor.record.form.temporalExtents": "Étendue temporelle",
18781
18913
  "editor.record.form.temporalExtents.addDate": "Date déterminée",
18782
18914
  "editor.record.form.temporalExtents.addRange": "Période de temps",
18783
18915
  "editor.record.form.temporalExtents.date": "Date concernée",
18784
18916
  "editor.record.form.temporalExtents.range": "Période concernée",
18917
+ "editor.record.form.unique.identifier": "",
18785
18918
  "editor.record.form.updateFrequency": "Fréquence de mise à jour",
18786
18919
  "editor.record.form.updateFrequency.planned": "Ces données doivent être mise à jour régulièrement.",
18787
18920
  "editor.record.loadError.body": "",
@@ -18797,6 +18930,7 @@ var fr = {
18797
18930
  "editor.record.saveStatus.draftWithChangesPending": "Brouillon enregistré - modifications en cours",
18798
18931
  "editor.record.saveStatus.recordUpToDate": "La fiche publiée est à jour",
18799
18932
  "editor.record.upToDate": "",
18933
+ "editor.sidebar.menu.editor": "",
18800
18934
  "externalviewer.dataset.unnamed": "Couche du datahub",
18801
18935
  "facets.block.title.OrgForResource": "Organisation",
18802
18936
  "facets.block.title.availableInServices": "Disponible pour",
@@ -18865,8 +18999,8 @@ var fr = {
18865
18999
  "organisations.sortBy.nameDesc": "Nom Z → A",
18866
19000
  "organisations.sortBy.recordCountAsc": "Données 0 → 9",
18867
19001
  "organisations.sortBy.recordCountDesc": "Données 9 → 0",
18868
- "organization.details.lastPublishedDatasets": "Dernières données publiées",
18869
- "organization.details.lastPublishedDatasets.searchAllButton": "Rechercher tous",
19002
+ "organization.details.lastPublishedDatasets": "",
19003
+ "organization.details.lastPublishedDatasets.searchAllButton": "",
18870
19004
  "organization.details.mailContact": "Contacter par mail",
18871
19005
  "organization.header.recordCount": "{count, plural, =0{donnée} one{donnée} other{données}}",
18872
19006
  "pagination.nextPage": "Page suivante",
@@ -18874,6 +19008,7 @@ var fr = {
18874
19008
  "pagination.pageOf": "sur",
18875
19009
  previous: previous$3,
18876
19010
  "record.action.download": "Télécharger",
19011
+ "record.action.duplicate": "Dupliquer",
18877
19012
  "record.action.view": "Voir",
18878
19013
  "record.externalViewer.open": "Ouvrir dans le visualiseur externe",
18879
19014
  "record.metadata.about": "Description",
@@ -19196,6 +19331,19 @@ var it = {
19196
19331
  "downloads.format.unknown": "sconosciuto",
19197
19332
  "downloads.wfs.featuretype.not.found": "Il layer non è stato trovato",
19198
19333
  dropFile: dropFile$2,
19334
+ "editor.record.form.bottomButtons.comeBackLater": "",
19335
+ "editor.record.form.bottomButtons.next": "",
19336
+ "editor.record.form.bottomButtons.previous": "",
19337
+ "editor.record.form.field.abstract": "",
19338
+ "editor.record.form.field.keywords": "",
19339
+ "editor.record.form.field.license": "Licenza",
19340
+ "editor.record.form.field.recordUpdated": "",
19341
+ "editor.record.form.field.resourceUpdated": "",
19342
+ "editor.record.form.field.temporalExtents": "",
19343
+ "editor.record.form.field.title": "",
19344
+ "editor.record.form.field.uniqueIdentifier": "",
19345
+ "editor.record.form.field.updateFrequency": "",
19346
+ "editor.record.form.abstract": "",
19199
19347
  "editor.record.form.keywords": "",
19200
19348
  "editor.record.form.license": "Licenza",
19201
19349
  "editor.record.form.license.cc-by": "",
@@ -19207,12 +19355,31 @@ var it = {
19207
19355
  "editor.record.form.license.odc-by": "",
19208
19356
  "editor.record.form.license.pddl": "",
19209
19357
  "editor.record.form.license.unknown": "Non riconosciuta o assente",
19358
+ "editor.record.form.page.accessAndContact": "",
19359
+ "editor.record.form.page.description": "",
19360
+ "editor.record.form.page.ressources": "",
19361
+ "editor.record.form.section.about.description": "",
19362
+ "editor.record.form.section.about.label": "",
19363
+ "editor.record.form.section.annexes.label": "",
19364
+ "editor.record.form.section.associatedResources.description": "",
19365
+ "editor.record.form.section.associatedResources.label": "",
19366
+ "editor.record.form.section.classification.description": "",
19367
+ "editor.record.form.section.classification.label": "",
19368
+ "editor.record.form.section.dataManagers.description": "",
19369
+ "editor.record.form.section.dataManagers.label": "",
19370
+ "editor.record.form.section.dataPointOfContact.description": "",
19371
+ "editor.record.form.section.dataPointOfContact.label": "",
19372
+ "editor.record.form.section.geographicalCoverage.label": "",
19373
+ "editor.record.form.section.useAndAccessConditions.label": "",
19374
+ "editor.record.form.metadata.title": "",
19375
+ "editor.record.form.record.updated": "",
19210
19376
  "editor.record.form.resourceUpdated": "",
19211
19377
  "editor.record.form.temporalExtents": "",
19212
19378
  "editor.record.form.temporalExtents.addDate": "",
19213
19379
  "editor.record.form.temporalExtents.addRange": "",
19214
19380
  "editor.record.form.temporalExtents.date": "",
19215
19381
  "editor.record.form.temporalExtents.range": "",
19382
+ "editor.record.form.unique.identifier": "",
19216
19383
  "editor.record.form.updateFrequency": "",
19217
19384
  "editor.record.form.updateFrequency.planned": "",
19218
19385
  "editor.record.loadError.body": "",
@@ -19228,6 +19395,7 @@ var it = {
19228
19395
  "editor.record.saveStatus.draftWithChangesPending": "",
19229
19396
  "editor.record.saveStatus.recordUpToDate": "",
19230
19397
  "editor.record.upToDate": "",
19398
+ "editor.sidebar.menu.editor": "",
19231
19399
  "externalviewer.dataset.unnamed": "Layer del datahub",
19232
19400
  "facets.block.title.OrgForResource": "Organizzazione",
19233
19401
  "facets.block.title.availableInServices": "Disponibile per",
@@ -19305,6 +19473,7 @@ var it = {
19305
19473
  "pagination.pageOf": "di",
19306
19474
  previous: previous$2,
19307
19475
  "record.action.download": "Scarica",
19476
+ "record.action.duplicate": "",
19308
19477
  "record.action.view": "Visualizza",
19309
19478
  "record.externalViewer.open": "Apri nell'visualizzatore esterno",
19310
19479
  "record.metadata.about": "Descrizione",
@@ -19627,6 +19796,19 @@ var nl = {
19627
19796
  "downloads.format.unknown": "",
19628
19797
  "downloads.wfs.featuretype.not.found": "",
19629
19798
  dropFile: dropFile$1,
19799
+ "editor.record.form.bottomButtons.comeBackLater": "",
19800
+ "editor.record.form.bottomButtons.next": "",
19801
+ "editor.record.form.bottomButtons.previous": "",
19802
+ "editor.record.form.field.abstract": "",
19803
+ "editor.record.form.field.keywords": "",
19804
+ "editor.record.form.field.license": "",
19805
+ "editor.record.form.field.recordUpdated": "",
19806
+ "editor.record.form.field.resourceUpdated": "",
19807
+ "editor.record.form.field.temporalExtents": "",
19808
+ "editor.record.form.field.title": "",
19809
+ "editor.record.form.field.uniqueIdentifier": "",
19810
+ "editor.record.form.field.updateFrequency": "",
19811
+ "editor.record.form.abstract": "",
19630
19812
  "editor.record.form.keywords": "",
19631
19813
  "editor.record.form.license": "",
19632
19814
  "editor.record.form.license.cc-by": "",
@@ -19638,12 +19820,31 @@ var nl = {
19638
19820
  "editor.record.form.license.odc-by": "",
19639
19821
  "editor.record.form.license.pddl": "",
19640
19822
  "editor.record.form.license.unknown": "",
19823
+ "editor.record.form.page.accessAndContact": "",
19824
+ "editor.record.form.page.description": "",
19825
+ "editor.record.form.page.ressources": "",
19826
+ "editor.record.form.section.about.description": "",
19827
+ "editor.record.form.section.about.label": "",
19828
+ "editor.record.form.section.annexes.label": "",
19829
+ "editor.record.form.section.associatedResources.description": "",
19830
+ "editor.record.form.section.associatedResources.label": "",
19831
+ "editor.record.form.section.classification.description": "",
19832
+ "editor.record.form.section.classification.label": "",
19833
+ "editor.record.form.section.dataManagers.description": "",
19834
+ "editor.record.form.section.dataManagers.label": "",
19835
+ "editor.record.form.section.dataPointOfContact.description": "",
19836
+ "editor.record.form.section.dataPointOfContact.label": "",
19837
+ "editor.record.form.section.geographicalCoverage.label": "",
19838
+ "editor.record.form.section.useAndAccessConditions.label": "",
19839
+ "editor.record.form.metadata.title": "",
19840
+ "editor.record.form.record.updated": "",
19641
19841
  "editor.record.form.resourceUpdated": "",
19642
19842
  "editor.record.form.temporalExtents": "",
19643
19843
  "editor.record.form.temporalExtents.addDate": "",
19644
19844
  "editor.record.form.temporalExtents.addRange": "",
19645
19845
  "editor.record.form.temporalExtents.date": "",
19646
19846
  "editor.record.form.temporalExtents.range": "",
19847
+ "editor.record.form.unique.identifier": "",
19647
19848
  "editor.record.form.updateFrequency": "",
19648
19849
  "editor.record.form.updateFrequency.planned": "",
19649
19850
  "editor.record.loadError.body": "",
@@ -19659,6 +19860,7 @@ var nl = {
19659
19860
  "editor.record.saveStatus.draftWithChangesPending": "",
19660
19861
  "editor.record.saveStatus.recordUpToDate": "",
19661
19862
  "editor.record.upToDate": "",
19863
+ "editor.sidebar.menu.editor": "",
19662
19864
  "externalviewer.dataset.unnamed": "",
19663
19865
  "facets.block.title.OrgForResource": "",
19664
19866
  "facets.block.title.availableInServices": "",
@@ -19736,6 +19938,7 @@ var nl = {
19736
19938
  "pagination.pageOf": "",
19737
19939
  previous: previous$1,
19738
19940
  "record.action.download": "",
19941
+ "record.action.duplicate": "",
19739
19942
  "record.action.view": "",
19740
19943
  "record.externalViewer.open": "",
19741
19944
  "record.metadata.about": "",
@@ -20058,6 +20261,19 @@ var pt = {
20058
20261
  "downloads.format.unknown": "",
20059
20262
  "downloads.wfs.featuretype.not.found": "",
20060
20263
  dropFile: dropFile,
20264
+ "editor.record.form.bottomButtons.comeBackLater": "",
20265
+ "editor.record.form.bottomButtons.next": "",
20266
+ "editor.record.form.bottomButtons.previous": "",
20267
+ "editor.record.form.field.abstract": "",
20268
+ "editor.record.form.field.keywords": "",
20269
+ "editor.record.form.field.license": "",
20270
+ "editor.record.form.field.recordUpdated": "",
20271
+ "editor.record.form.field.resourceUpdated": "",
20272
+ "editor.record.form.field.temporalExtents": "",
20273
+ "editor.record.form.field.title": "",
20274
+ "editor.record.form.field.uniqueIdentifier": "",
20275
+ "editor.record.form.field.updateFrequency": "",
20276
+ "editor.record.form.abstract": "",
20061
20277
  "editor.record.form.keywords": "",
20062
20278
  "editor.record.form.license": "",
20063
20279
  "editor.record.form.license.cc-by": "",
@@ -20069,12 +20285,31 @@ var pt = {
20069
20285
  "editor.record.form.license.odc-by": "",
20070
20286
  "editor.record.form.license.pddl": "",
20071
20287
  "editor.record.form.license.unknown": "",
20288
+ "editor.record.form.page.accessAndContact": "",
20289
+ "editor.record.form.page.description": "",
20290
+ "editor.record.form.page.ressources": "",
20291
+ "editor.record.form.section.about.description": "",
20292
+ "editor.record.form.section.about.label": "",
20293
+ "editor.record.form.section.annexes.label": "",
20294
+ "editor.record.form.section.associatedResources.description": "",
20295
+ "editor.record.form.section.associatedResources.label": "",
20296
+ "editor.record.form.section.classification.description": "",
20297
+ "editor.record.form.section.classification.label": "",
20298
+ "editor.record.form.section.dataManagers.description": "",
20299
+ "editor.record.form.section.dataManagers.label": "",
20300
+ "editor.record.form.section.dataPointOfContact.description": "",
20301
+ "editor.record.form.section.dataPointOfContact.label": "",
20302
+ "editor.record.form.section.geographicalCoverage.label": "",
20303
+ "editor.record.form.section.useAndAccessConditions.label": "",
20304
+ "editor.record.form.metadata.title": "",
20305
+ "editor.record.form.record.updated": "",
20072
20306
  "editor.record.form.resourceUpdated": "",
20073
20307
  "editor.record.form.temporalExtents": "",
20074
20308
  "editor.record.form.temporalExtents.addDate": "",
20075
20309
  "editor.record.form.temporalExtents.addRange": "",
20076
20310
  "editor.record.form.temporalExtents.date": "",
20077
20311
  "editor.record.form.temporalExtents.range": "",
20312
+ "editor.record.form.unique.identifier": "",
20078
20313
  "editor.record.form.updateFrequency": "",
20079
20314
  "editor.record.form.updateFrequency.planned": "",
20080
20315
  "editor.record.loadError.body": "",
@@ -20090,6 +20325,7 @@ var pt = {
20090
20325
  "editor.record.saveStatus.draftWithChangesPending": "",
20091
20326
  "editor.record.saveStatus.recordUpToDate": "",
20092
20327
  "editor.record.upToDate": "",
20328
+ "editor.sidebar.menu.editor": "",
20093
20329
  "externalviewer.dataset.unnamed": "",
20094
20330
  "facets.block.title.OrgForResource": "",
20095
20331
  "facets.block.title.availableInServices": "",
@@ -20167,6 +20403,7 @@ var pt = {
20167
20403
  "pagination.pageOf": "",
20168
20404
  previous: previous,
20169
20405
  "record.action.download": "",
20406
+ "record.action.duplicate": "",
20170
20407
  "record.action.view": "",
20171
20408
  "record.externalViewer.open": "",
20172
20409
  "record.metadata.about": "",
@@ -21299,6 +21536,17 @@ class Gn4Repository {
21299
21536
  .then((record) => [record, xml, isSavedAlready]);
21300
21537
  }));
21301
21538
  }
21539
+ openRecordForDuplication(uniqueIdentifier) {
21540
+ return this.loadRecordAsXml(uniqueIdentifier).pipe(switchMap(async (recordAsXml) => {
21541
+ const converter = findConverterForDocument(recordAsXml);
21542
+ const record = await converter.readRecord(recordAsXml);
21543
+ record.uniqueIdentifier = `TEMP-ID-${Date.now()}`;
21544
+ record.title = `${record.title} (Copy)`;
21545
+ const xml = await converter.writeRecord(record, recordAsXml);
21546
+ window.localStorage.setItem(this.getLocalStorageKeyForRecord(record.uniqueIdentifier), xml);
21547
+ return [record, xml, false];
21548
+ }));
21549
+ }
21302
21550
  serializeRecordToXml(record, referenceRecordSource) {
21303
21551
  // if there's a reference record, use that standard; otherwise, use iso19139
21304
21552
  const converter = referenceRecordSource
@@ -28288,11 +28536,11 @@ class UserPreviewComponent {
28288
28536
  return (this.user.name + ' ' + this.user.surname).trim();
28289
28537
  }
28290
28538
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
28291
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UserPreviewComponent, selector: "gn-ui-user-preview", inputs: { user: "user", avatarPlaceholder: "avatarPlaceholder" }, ngImport: i0, template: "<figure class=\"text-center\">\n <div\n class=\"w-12 h-12 border border-primary rounded-full capitalize\"\n [matTooltip]=\"userFullName\"\n >\n <gn-ui-avatar\n [avatarUrl]=\"user.profileIcon\"\n [avatarPlaceholder]=\"avatarPlaceholder\"\n ></gn-ui-avatar>\n </div>\n</figure>\n", dependencies: [{ kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: AvatarComponent, selector: "gn-ui-avatar", inputs: ["avatarUrl", "avatarPlaceholder"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28539
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UserPreviewComponent, selector: "gn-ui-user-preview", inputs: { user: "user", avatarPlaceholder: "avatarPlaceholder" }, ngImport: i0, template: "<figure class=\"text-center\">\n <div\n class=\"w-10 h-10 border border-primary rounded-full capitalize\"\n [matTooltip]=\"userFullName\"\n >\n <gn-ui-avatar\n [avatarUrl]=\"user.profileIcon\"\n [avatarPlaceholder]=\"avatarPlaceholder\"\n ></gn-ui-avatar>\n </div>\n</figure>\n", dependencies: [{ kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: AvatarComponent, selector: "gn-ui-avatar", inputs: ["avatarUrl", "avatarPlaceholder"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28292
28540
  }
28293
28541
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserPreviewComponent, decorators: [{
28294
28542
  type: Component,
28295
- args: [{ selector: 'gn-ui-user-preview', changeDetection: ChangeDetectionStrategy.OnPush, template: "<figure class=\"text-center\">\n <div\n class=\"w-12 h-12 border border-primary rounded-full capitalize\"\n [matTooltip]=\"userFullName\"\n >\n <gn-ui-avatar\n [avatarUrl]=\"user.profileIcon\"\n [avatarPlaceholder]=\"avatarPlaceholder\"\n ></gn-ui-avatar>\n </div>\n</figure>\n" }]
28543
+ args: [{ selector: 'gn-ui-user-preview', changeDetection: ChangeDetectionStrategy.OnPush, template: "<figure class=\"text-center\">\n <div\n class=\"w-10 h-10 border border-primary rounded-full capitalize\"\n [matTooltip]=\"userFullName\"\n >\n <gn-ui-avatar\n [avatarUrl]=\"user.profileIcon\"\n [avatarPlaceholder]=\"avatarPlaceholder\"\n ></gn-ui-avatar>\n </div>\n</figure>\n" }]
28296
28544
  }], propDecorators: { user: [{
28297
28545
  type: Input
28298
28546
  }], avatarPlaceholder: [{
@@ -28641,6 +28889,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28641
28889
  }]
28642
28890
  }] });
28643
28891
 
28892
+ class ActionMenuComponent {
28893
+ constructor() {
28894
+ this.duplicate = new EventEmitter();
28895
+ }
28896
+ openMenu() {
28897
+ this.trigger.openMenu();
28898
+ }
28899
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ActionMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
28900
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ActionMenuComponent, isStandalone: true, selector: "gn-ui-action-menu", outputs: { duplicate: "duplicate" }, viewQueries: [{ propertyName: "trigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<gn-ui-button\n type=\"outline\"\n [matMenuTriggerFor]=\"menu\"\n (buttonClick)=\"openMenu()\"\n data-test=\"record-menu-button\"\n>\n <mat-icon class=\"material-symbols-outlined\">more_vert</mat-icon>\n</gn-ui-button>\n<mat-menu #menu=\"matMenu\">\n <button\n mat-menu-item\n (click)=\"duplicate.emit()\"\n data-test=\"record-menu-duplicate-button\"\n >\n <span translate>record.action.duplicate</span>\n </button>\n</mat-menu>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i2$5.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i2$5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i2$5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }] }); }
28901
+ }
28902
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ActionMenuComponent, decorators: [{
28903
+ type: Component,
28904
+ args: [{ selector: 'gn-ui-action-menu', standalone: true, imports: [MatIconModule, ButtonComponent, MatMenuModule, TranslateModule], template: "<gn-ui-button\n type=\"outline\"\n [matMenuTriggerFor]=\"menu\"\n (buttonClick)=\"openMenu()\"\n data-test=\"record-menu-button\"\n>\n <mat-icon class=\"material-symbols-outlined\">more_vert</mat-icon>\n</gn-ui-button>\n<mat-menu #menu=\"matMenu\">\n <button\n mat-menu-item\n (click)=\"duplicate.emit()\"\n data-test=\"record-menu-duplicate-button\"\n >\n <span translate>record.action.duplicate</span>\n </button>\n</mat-menu>\n" }]
28905
+ }], propDecorators: { duplicate: [{
28906
+ type: Output
28907
+ }], trigger: [{
28908
+ type: ViewChild,
28909
+ args: [MatMenuTrigger]
28910
+ }] } });
28911
+
28644
28912
  class ResultsTableComponent {
28645
28913
  constructor() {
28646
28914
  this.records = [];
@@ -28650,6 +28918,7 @@ class ResultsTableComponent {
28650
28918
  // emits the column (field) as well as the order
28651
28919
  this.sortByChange = new EventEmitter();
28652
28920
  this.recordClick = new EventEmitter();
28921
+ this.duplicateRecord = new EventEmitter();
28653
28922
  this.recordsSelectedChange = new EventEmitter();
28654
28923
  }
28655
28924
  dateToString(date) {
@@ -28684,6 +28953,9 @@ class ResultsTableComponent {
28684
28953
  handleRecordClick(item) {
28685
28954
  this.recordClick.emit(item);
28686
28955
  }
28956
+ handleDuplicate(item) {
28957
+ this.duplicateRecord.emit(item);
28958
+ }
28687
28959
  setSortBy(col, order) {
28688
28960
  this.sortByChange.emit([col, order]);
28689
28961
  }
@@ -28719,7 +28991,7 @@ class ResultsTableComponent {
28719
28991
  return !allSelected && someSelected;
28720
28992
  }
28721
28993
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResultsTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
28722
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", inputs: { records: "records", selectedRecordsIdentifiers: "selectedRecordsIdentifiers", sortOrder: "sortOrder", recordHasDraft: "recordHasDraft" }, outputs: { sortByChange: "sortByChange", recordClick: "recordClick", recordsSelectedChange: "recordsSelectedChange" }, ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\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 [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\">\n <span class=\"overflow-hidden text-ellipsis\">{{ item.title }}</span>\n <gn-ui-badge\n *ngIf=\"recordHasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.4em 0.6em'\"\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>\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\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white 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-sm text-white 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\" *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 [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\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$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiInputsModule }, { 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"], outputs: ["itemClick"] }, { kind: "component", type: InteractiveTableColumnComponent, selector: "gn-ui-interactive-table-column", inputs: ["grow", "sortable", "activeSort"], outputs: ["sortChange"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }] }); }
28994
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", inputs: { records: "records", selectedRecordsIdentifiers: "selectedRecordsIdentifiers", sortOrder: "sortOrder", recordHasDraft: "recordHasDraft" }, outputs: { sortByChange: "sortByChange", recordClick: "recordClick", duplicateRecord: "duplicateRecord", recordsSelectedChange: "recordsSelectedChange" }, ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\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 [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\">\n <span class=\"overflow-hidden text-ellipsis\">{{ item.title }}</span>\n <gn-ui-badge\n *ngIf=\"recordHasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.4em 0.6em'\"\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>\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\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white 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-sm text-white 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\" *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 [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\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-action-menu (duplicate)=\"handleDuplicate(item)\">\n </gn-ui-action-menu>\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$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiInputsModule }, { 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"], outputs: ["itemClick"] }, { kind: "component", type: InteractiveTableColumnComponent, selector: "gn-ui-interactive-table-column", inputs: ["grow", "sortable", "activeSort"], outputs: ["sortChange"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ActionMenuComponent, selector: "gn-ui-action-menu", outputs: ["duplicate"] }] }); }
28723
28995
  }
28724
28996
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResultsTableComponent, decorators: [{
28725
28997
  type: Component,
@@ -28731,7 +29003,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28731
29003
  MatIconModule,
28732
29004
  TranslateModule,
28733
29005
  BadgeComponent,
28734
- ], template: "<gn-ui-interactive-table\n [items]=\"records\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\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 [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\">\n <span class=\"overflow-hidden text-ellipsis\">{{ item.title }}</span>\n <gn-ui-badge\n *ngIf=\"recordHasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.4em 0.6em'\"\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>\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\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white 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-sm text-white 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\" *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 [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n" }]
29006
+ ActionMenuComponent,
29007
+ ], template: "<gn-ui-interactive-table\n [items]=\"records\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\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 [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\">\n <span class=\"overflow-hidden text-ellipsis\">{{ item.title }}</span>\n <gn-ui-badge\n *ngIf=\"recordHasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.4em 0.6em'\"\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>\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\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white 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-sm text-white 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\" *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 [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\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-action-menu (duplicate)=\"handleDuplicate(item)\">\n </gn-ui-action-menu>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n" }]
28735
29008
  }], propDecorators: { records: [{
28736
29009
  type: Input
28737
29010
  }], selectedRecordsIdentifiers: [{
@@ -28744,6 +29017,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
28744
29017
  type: Output
28745
29018
  }], recordClick: [{
28746
29019
  type: Output
29020
+ }], duplicateRecord: [{
29021
+ type: Output
28747
29022
  }], recordsSelectedChange: [{
28748
29023
  type: Output
28749
29024
  }] } });
@@ -30725,6 +31000,7 @@ class ResultsTableContainerComponent {
30725
31000
  this.selectionService = selectionService;
30726
31001
  this.recordsRepository = recordsRepository;
30727
31002
  this.recordClick = new EventEmitter();
31003
+ this.duplicateRecord = new EventEmitter();
30728
31004
  this.records$ = this.searchFacade.results$;
30729
31005
  this.selectedRecords$ = this.selectionService.selectedRecordsIdentifiers$;
30730
31006
  this.sortBy$ = this.searchFacade.sortBy$;
@@ -30733,6 +31009,9 @@ class ResultsTableContainerComponent {
30733
31009
  handleRecordClick(item) {
30734
31010
  this.recordClick.emit(item);
30735
31011
  }
31012
+ handleDuplicateRecord(item) {
31013
+ this.duplicateRecord.emit(item);
31014
+ }
30736
31015
  handleSortByChange(col, order) {
30737
31016
  this.searchService.setSortBy([order, col]);
30738
31017
  }
@@ -30745,13 +31024,15 @@ class ResultsTableContainerComponent {
30745
31024
  }
30746
31025
  }
30747
31026
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResultsTableContainerComponent, deps: [{ token: SearchFacade }, { token: SearchService }, { token: SelectionService }, { token: RecordsRepositoryInterface }], target: i0.ɵɵFactoryTarget.Component }); }
30748
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ResultsTableContainerComponent, isStandalone: true, selector: "gn-ui-results-table-container", outputs: { recordClick: "recordClick" }, ngImport: i0, template: "<gn-ui-results-table\n [records]=\"records$ | async\"\n [recordHasDraft]=\"hasDraft\"\n [selectedRecordsIdentifiers]=\"selectedRecords$ | async\"\n [sortOrder]=\"sortBy$ | async\"\n (recordClick)=\"handleRecordClick($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: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "component", type: ResultsTableComponent, selector: "gn-ui-results-table", inputs: ["records", "selectedRecordsIdentifiers", "sortOrder", "recordHasDraft"], outputs: ["sortByChange", "recordClick", "recordsSelectedChange"] }] }); }
31027
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ResultsTableContainerComponent, isStandalone: true, selector: "gn-ui-results-table-container", outputs: { recordClick: "recordClick", duplicateRecord: "duplicateRecord" }, ngImport: i0, template: "<gn-ui-results-table\n [records]=\"records$ | async\"\n [recordHasDraft]=\"hasDraft\"\n [selectedRecordsIdentifiers]=\"selectedRecords$ | async\"\n [sortOrder]=\"sortBy$ | async\"\n (recordClick)=\"handleRecordClick($event)\"\n (duplicateRecord)=\"handleDuplicateRecord($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: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "component", type: ResultsTableComponent, selector: "gn-ui-results-table", inputs: ["records", "selectedRecordsIdentifiers", "sortOrder", "recordHasDraft"], outputs: ["sortByChange", "recordClick", "duplicateRecord", "recordsSelectedChange"] }] }); }
30749
31028
  }
30750
31029
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ResultsTableContainerComponent, decorators: [{
30751
31030
  type: Component,
30752
- args: [{ selector: 'gn-ui-results-table-container', standalone: true, imports: [CommonModule, ResultsTableComponent], template: "<gn-ui-results-table\n [records]=\"records$ | async\"\n [recordHasDraft]=\"hasDraft\"\n [selectedRecordsIdentifiers]=\"selectedRecords$ | async\"\n [sortOrder]=\"sortBy$ | async\"\n (recordClick)=\"handleRecordClick($event)\"\n (recordsSelectedChange)=\"handleRecordsSelectedChange($event[0], $event[1])\"\n (sortByChange)=\"handleSortByChange($event[0], $event[1])\"\n></gn-ui-results-table>\n" }]
31031
+ args: [{ selector: 'gn-ui-results-table-container', standalone: true, imports: [CommonModule, ResultsTableComponent], template: "<gn-ui-results-table\n [records]=\"records$ | async\"\n [recordHasDraft]=\"hasDraft\"\n [selectedRecordsIdentifiers]=\"selectedRecords$ | async\"\n [sortOrder]=\"sortBy$ | async\"\n (recordClick)=\"handleRecordClick($event)\"\n (duplicateRecord)=\"handleDuplicateRecord($event)\"\n (recordsSelectedChange)=\"handleRecordsSelectedChange($event[0], $event[1])\"\n (sortByChange)=\"handleSortByChange($event[0], $event[1])\"\n></gn-ui-results-table>\n" }]
30753
31032
  }], ctorParameters: function () { return [{ type: SearchFacade }, { type: SearchService }, { type: SelectionService }, { type: RecordsRepositoryInterface }]; }, propDecorators: { recordClick: [{
30754
31033
  type: Output
31034
+ }], duplicateRecord: [{
31035
+ type: Output
30755
31036
  }] } });
30756
31037
 
30757
31038
  class AddLayerRecordPreviewComponent extends RecordPreviewComponent {
@@ -31051,7 +31332,7 @@ class LayersPanelComponent {
31051
31332
  this.mapFacade.addLayer(layer);
31052
31333
  }
31053
31334
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LayersPanelComponent, deps: [{ token: MapFacade }], target: i0.ɵɵFactoryTarget.Component }); }
31054
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LayersPanelComponent, selector: "gn-ui-layers-panel", ngImport: i0, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wms></gn-ui-add-layer-from-wms>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wfs></gn-ui-add-layer-from-wfs>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.ogc.api' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-ogc-api\n [ogcUrl]=\"ogcUrl\"\n (layerAdded)=\"addLayer($event)\"\n ></gn-ui-add-layer-from-ogc-api>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.file' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-file></gn-ui-add-layer-from-file>\n </div>\n </mat-tab>\n </mat-tab-group>\n </gn-ui-expandable-panel-button>\n</div>\n\n<ng-template #addLayerTitle>\n <mat-icon class=\"material-symbols-outlined mr-4\">add_circle</mat-icon>\n <span translate>map.add.layer</span>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ExpandablePanelButtonComponent, selector: "gn-ui-expandable-panel-button", inputs: ["titleTemplate", "collapsed"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2$5.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i2$5.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: AddLayerFromOgcApiComponent, selector: "gn-ui-add-layer-from-ogc-api", inputs: ["ogcUrl"], outputs: ["layerAdded"] }, { kind: "component", type: AddLayerFromCatalogComponent, selector: "gn-ui-add-layer-from-catalog" }, { kind: "component", type: AddLayerFromWmsComponent, selector: "gn-ui-add-layer-from-wms" }, { kind: "component", type: AddLayerFromFileComponent, selector: "gn-ui-add-layer-from-file" }, { kind: "component", type: AddLayerFromWfsComponent, selector: "gn-ui-add-layer-from-wfs" }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31335
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LayersPanelComponent, selector: "gn-ui-layers-panel", ngImport: i0, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wms></gn-ui-add-layer-from-wms>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wfs></gn-ui-add-layer-from-wfs>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.ogc.api' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-ogc-api\n [ogcUrl]=\"ogcUrl\"\n (layerAdded)=\"addLayer($event)\"\n ></gn-ui-add-layer-from-ogc-api>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.file' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-file></gn-ui-add-layer-from-file>\n </div>\n </mat-tab>\n </mat-tab-group>\n </gn-ui-expandable-panel-button>\n</div>\n\n<ng-template #addLayerTitle>\n <mat-icon class=\"material-symbols-outlined mr-4\">add_circle</mat-icon>\n <span translate>map.add.layer</span>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ExpandablePanelButtonComponent, selector: "gn-ui-expandable-panel-button", inputs: ["titleTemplate", "collapsed"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2$6.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i2$6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: AddLayerFromOgcApiComponent, selector: "gn-ui-add-layer-from-ogc-api", inputs: ["ogcUrl"], outputs: ["layerAdded"] }, { kind: "component", type: AddLayerFromCatalogComponent, selector: "gn-ui-add-layer-from-catalog" }, { kind: "component", type: AddLayerFromWmsComponent, selector: "gn-ui-add-layer-from-wms" }, { kind: "component", type: AddLayerFromFileComponent, selector: "gn-ui-add-layer-from-file" }, { kind: "component", type: AddLayerFromWfsComponent, selector: "gn-ui-add-layer-from-wfs" }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31055
31336
  }
31056
31337
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LayersPanelComponent, decorators: [{
31057
31338
  type: Component,
@@ -31793,7 +32074,7 @@ class TableComponent {
31793
32074
  return rowIdPrefix + id;
31794
32075
  }
31795
32076
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
31796
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableComponent, isStandalone: true, selector: "gn-ui-table", inputs: { data: "data", activeId: "activeId" }, outputs: { selected: "selected" }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }], ngImport: i0, template: "<div class=\"border border-gray-300 rounded-lg overflow-hidden bg-white h-full\">\n <cdk-virtual-scroll-viewport\n tvsItemSize=\"48\"\n headerHeight=\"56\"\n style=\"height: calc(100% - 37px)\"\n >\n <table mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z8\" matSort>\n <ng-container *ngFor=\"let prop of properties\" [matColumnDef]=\"prop\">\n <th\n mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n class=\"text-sm text-black bg-white\"\n >\n {{ prop }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"whitespace-nowrap pr-1 truncate\"\n >\n {{ element[prop] }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"properties; sticky: true\"></tr>\n <tr\n [id]=\"getRowEltId(row.id)\"\n mat-row\n *matRowDef=\"let row; columns: properties\"\n (click)=\"selected.emit(row)\"\n [class.active]=\"row.id === activeId\"\n ></tr>\n </table>\n </cdk-virtual-scroll-viewport>\n <div class=\"text-gray-900 border-t border-gray-300 px-4 py-2 text-sm\">\n <span class=\"count font-extrabold text-primary\">{{ count }}</span\n >&nbsp;<span translate>table.object.count</span>.\n </div>\n</div>\n", styles: ["table{width:100%;background:white}th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding-right:20px}tr.mat-mdc-row,tr.mat-mdc-footer-row{height:36px}tr:hover{background:whitesmoke}tr.mat-mdc-header-row{height:48px}[mat-header-cell]{color:#0000008a;font-size:12px;font-weight:500}tr{cursor:pointer}.active .mat-mdc-cell{color:var(--color-primary)}\n"], dependencies: [{ kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1$9.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1$9.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1$9.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1$9.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i1$9.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1$9.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1$9.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1$9.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i1$9.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1$9.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i2$6.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i2$6.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: TableVirtualScrollModule }, { kind: "directive", type: i3$2.TableItemSizeDirective, selector: "cdk-virtual-scroll-viewport[tvsItemSize]", inputs: ["tvsItemSize", "headerEnabled", "headerHeight", "footerEnabled", "footerHeight", "bufferMultiplier"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "component", type: i4.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
32077
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TableComponent, isStandalone: true, selector: "gn-ui-table", inputs: { data: "data", activeId: "activeId" }, outputs: { selected: "selected" }, viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }], ngImport: i0, template: "<div class=\"border border-gray-300 rounded-lg overflow-hidden bg-white h-full\">\n <cdk-virtual-scroll-viewport\n tvsItemSize=\"48\"\n headerHeight=\"56\"\n style=\"height: calc(100% - 37px)\"\n >\n <table mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z8\" matSort>\n <ng-container *ngFor=\"let prop of properties\" [matColumnDef]=\"prop\">\n <th\n mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n class=\"text-sm text-black bg-white\"\n >\n {{ prop }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"whitespace-nowrap pr-1 truncate\"\n >\n {{ element[prop] }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"properties; sticky: true\"></tr>\n <tr\n [id]=\"getRowEltId(row.id)\"\n mat-row\n *matRowDef=\"let row; columns: properties\"\n (click)=\"selected.emit(row)\"\n [class.active]=\"row.id === activeId\"\n ></tr>\n </table>\n </cdk-virtual-scroll-viewport>\n <div class=\"text-gray-900 border-t border-gray-300 px-4 py-2 text-sm\">\n <span class=\"count font-extrabold text-primary\">{{ count }}</span\n >&nbsp;<span translate>table.object.count</span>.\n </div>\n</div>\n", styles: ["table{width:100%;background:white}th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding-right:20px}tr.mat-mdc-row,tr.mat-mdc-footer-row{height:36px}tr:hover{background:whitesmoke}tr.mat-mdc-header-row{height:48px}[mat-header-cell]{color:#0000008a;font-size:12px;font-weight:500}tr{cursor:pointer}.active .mat-mdc-cell{color:var(--color-primary)}\n"], dependencies: [{ kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1$9.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1$9.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1$9.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1$9.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i1$9.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1$9.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1$9.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1$9.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i1$9.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1$9.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i2$7.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i2$7.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: TableVirtualScrollModule }, { kind: "directive", type: i3$2.TableItemSizeDirective, selector: "cdk-virtual-scroll-viewport[tvsItemSize]", inputs: ["tvsItemSize", "headerEnabled", "headerHeight", "footerEnabled", "footerHeight", "bufferMultiplier"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "component", type: i4.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31797
32078
  }
31798
32079
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TableComponent, decorators: [{
31799
32080
  type: Component,
@@ -33939,37 +34220,54 @@ const GN_UI_VERSION = new InjectionToken('gnUiVersion');
33939
34220
 
33940
34221
  const WEB_COMPONENT_EMBEDDER_URL = new InjectionToken('webComponentEmbedderUrl');
33941
34222
  class DataViewPermalinkComponent {
34223
+ set viewType(value) {
34224
+ this.viewType$.next(value);
34225
+ }
33942
34226
  constructor(config, wcEmbedderBaseUrl, version, facade) {
33943
34227
  this.config = config;
33944
34228
  this.wcEmbedderBaseUrl = wcEmbedderBaseUrl;
33945
34229
  this.version = version;
33946
34230
  this.facade = facade;
34231
+ this.viewType$ = new BehaviorSubject('map');
33947
34232
  this.permalinkUrl$ = combineLatest([
34233
+ this.viewType$,
33948
34234
  this.facade.chartConfig$,
33949
34235
  this.facade.metadata$,
33950
- ]).pipe(map$2(([config, metadata]) => {
33951
- if (config) {
33952
- const { aggregation, xProperty, yProperty, chartType } = config;
33953
- const url = new URL(`${this.wcEmbedderBaseUrl}`, window.location.origin);
33954
- url.searchParams.set('v', `${this.version}`);
33955
- url.searchParams.append('e', `gn-dataset-view-chart`);
33956
- url.searchParams.append('a', `api-url=${this.config.basePath}`);
33957
- url.searchParams.append('a', `dataset-id=${metadata.uniqueIdentifier}`);
33958
- url.searchParams.append('a', `primary-color=#0f4395`);
33959
- url.searchParams.append('a', `secondary-color=#8bc832`);
33960
- url.searchParams.append('a', `main-color=#555`);
33961
- url.searchParams.append('a', `background-color=#fdfbff`);
33962
- url.searchParams.append('a', `aggregation=${aggregation}`);
33963
- url.searchParams.append('a', `x-property=${xProperty}`);
33964
- url.searchParams.append('a', `y-property=${yProperty}`);
33965
- url.searchParams.append('a', `chart-type=${chartType}`);
33966
- return url.toString();
34236
+ ]).pipe(map$2(([viewType, config, metadata]) => {
34237
+ const url = new URL(`${this.wcEmbedderBaseUrl}`, window.location.origin);
34238
+ url.searchParams.set('v', `${this.version}`);
34239
+ if (viewType === 'chart') {
34240
+ if (config) {
34241
+ const { aggregation, xProperty, yProperty, chartType } = config;
34242
+ url.searchParams.append('e', `gn-dataset-view-chart`);
34243
+ url.searchParams.append('a', `aggregation=${aggregation}`);
34244
+ url.searchParams.append('a', `x-property=${xProperty}`);
34245
+ url.searchParams.append('a', `y-property=${yProperty}`);
34246
+ url.searchParams.append('a', `chart-type=${chartType}`);
34247
+ }
34248
+ else {
34249
+ return '';
34250
+ }
33967
34251
  }
33968
- return '';
34252
+ else if (viewType === 'table') {
34253
+ // table
34254
+ url.searchParams.append('e', `gn-dataset-view-table`);
34255
+ }
34256
+ else {
34257
+ // map
34258
+ url.searchParams.append('e', `gn-dataset-view-map`);
34259
+ }
34260
+ url.searchParams.append('a', `api-url=${this.config.basePath}`);
34261
+ url.searchParams.append('a', `dataset-id=${metadata.uniqueIdentifier}`);
34262
+ url.searchParams.append('a', `primary-color=#0f4395`);
34263
+ url.searchParams.append('a', `secondary-color=#8bc832`);
34264
+ url.searchParams.append('a', `main-color=#555`);
34265
+ url.searchParams.append('a', `background-color=#fdfbff`);
34266
+ return url.toString();
33969
34267
  }));
33970
34268
  }
33971
34269
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewPermalinkComponent, deps: [{ token: Configuration }, { token: WEB_COMPONENT_EMBEDDER_URL, optional: true }, { token: GN_UI_VERSION }, { token: MdViewFacade }], target: i0.ɵɵFactoryTarget.Component }); }
33972
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataViewPermalinkComponent, selector: "gn-ui-data-view-permalink", ngImport: i0, template: "<gn-ui-copy-text-button\n *ngIf=\"wcEmbedderBaseUrl\"\n [text]=\"permalinkUrl$ | async\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n></gn-ui-copy-text-button>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34270
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataViewPermalinkComponent, selector: "gn-ui-data-view-permalink", inputs: { viewType: "viewType" }, ngImport: i0, template: "<gn-ui-copy-text-button\n *ngIf=\"wcEmbedderBaseUrl\"\n [text]=\"permalinkUrl$ | async\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n></gn-ui-copy-text-button>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
33973
34271
  }
33974
34272
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewPermalinkComponent, decorators: [{
33975
34273
  type: Component,
@@ -33985,37 +34283,71 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
33985
34283
  }] }, { type: undefined, decorators: [{
33986
34284
  type: Inject,
33987
34285
  args: [GN_UI_VERSION]
33988
- }] }, { type: MdViewFacade }]; } });
34286
+ }] }, { type: MdViewFacade }]; }, propDecorators: { viewType: [{
34287
+ type: Input
34288
+ }] } });
33989
34289
 
33990
34290
  class DataViewWebComponentComponent {
34291
+ set viewType(value) {
34292
+ this.viewType$.next(value);
34293
+ }
33991
34294
  constructor(config, version, facade) {
33992
34295
  this.config = config;
33993
34296
  this.version = version;
33994
34297
  this.facade = facade;
33995
- this.webComponentHtml$ = combineLatest(this.facade.chartConfig$, this.facade.metadata$).pipe(map$2(([config, metadata]) => {
33996
- if (config) {
33997
- const { aggregation, xProperty, yProperty, chartType } = config;
34298
+ this.viewType$ = new BehaviorSubject('map');
34299
+ this.webComponentHtml$ = combineLatest(this.viewType$, this.facade.chartConfig$, this.facade.metadata$).pipe(map$2(([viewType, config, metadata]) => {
34300
+ if (viewType === 'chart') {
34301
+ if (config) {
34302
+ const { aggregation, xProperty, yProperty, chartType } = config;
34303
+ return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${this.version}/gn-wc.js"></script>
34304
+ <gn-dataset-view-chart
34305
+ api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
34306
+ dataset-id="${metadata.uniqueIdentifier}"
34307
+ aggregation="${aggregation}"
34308
+ x-property="${xProperty}"
34309
+ y-property="${yProperty}"
34310
+ chart-type="${chartType}"
34311
+ primary-color="#0f4395"
34312
+ secondary-color="#8bc832"
34313
+ main-color="#555"
34314
+ background-color="#fdfbff"
34315
+ main-font="'Inter', sans-serif"
34316
+ title-font="'DM Serif Display', serif"
34317
+ ></gn-dataset-view-chart>`;
34318
+ }
34319
+ return '';
34320
+ }
34321
+ else if (viewType === 'table') {
33998
34322
  return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${this.version}/gn-wc.js"></script>
33999
- <gn-dataset-view-chart
34323
+ <gn-dataset-view-table
34324
+ api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
34325
+ dataset-id="${metadata.uniqueIdentifier}"
34326
+ primary-color="#0f4395"
34327
+ secondary-color="#8bc832"
34328
+ main-color="#555"
34329
+ background-color="#fdfbff"
34330
+ main-font="'Inter', sans-serif"
34331
+ title-font="'DM Serif Display', serif"
34332
+ ></gn-dataset-view-table>`;
34333
+ }
34334
+ else {
34335
+ return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${this.version}/gn-wc.js"></script>
34336
+ <gn-dataset-view-map
34000
34337
  api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
34001
34338
  dataset-id="${metadata.uniqueIdentifier}"
34002
- aggregation="${aggregation}"
34003
- x-property="${xProperty}"
34004
- y-property="${yProperty}"
34005
- chart-type="${chartType}"
34006
34339
  primary-color="#0f4395"
34007
34340
  secondary-color="#8bc832"
34008
34341
  main-color="#555"
34009
34342
  background-color="#fdfbff"
34010
34343
  main-font="'Inter', sans-serif"
34011
34344
  title-font="'DM Serif Display', serif"
34012
- ></gn-dataset-view-chart>`;
34345
+ ></gn-dataset-view-map>`;
34013
34346
  }
34014
- return '';
34015
34347
  }));
34016
34348
  }
34017
34349
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewWebComponentComponent, deps: [{ token: Configuration }, { token: GN_UI_VERSION }, { token: MdViewFacade }], target: i0.ɵɵFactoryTarget.Component }); }
34018
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataViewWebComponentComponent, selector: "gn-ui-data-view-web-component", ngImport: i0, template: "<gn-ui-copy-text-button\n [text]=\"webComponentHtml$ | async\"\n [rows]=\"3\"\n [tooltipText]=\"'tooltip.html.copy' | translate\"\n></gn-ui-copy-text-button>\n", styles: [""], dependencies: [{ kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34350
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataViewWebComponentComponent, selector: "gn-ui-data-view-web-component", inputs: { viewType: "viewType" }, ngImport: i0, template: "<gn-ui-copy-text-button\n [text]=\"webComponentHtml$ | async\"\n [rows]=\"3\"\n [tooltipText]=\"'tooltip.html.copy' | translate\"\n></gn-ui-copy-text-button>\n", styles: [""], dependencies: [{ kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34019
34351
  }
34020
34352
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewWebComponentComponent, decorators: [{
34021
34353
  type: Component,
@@ -34026,24 +34358,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
34026
34358
  }] }, { type: undefined, decorators: [{
34027
34359
  type: Inject,
34028
34360
  args: [GN_UI_VERSION]
34029
- }] }, { type: MdViewFacade }]; } });
34361
+ }] }, { type: MdViewFacade }]; }, propDecorators: { viewType: [{
34362
+ type: Input
34363
+ }] } });
34030
34364
 
34031
34365
  class DataViewShareComponent {
34366
+ set viewType(value) {
34367
+ this._viewType = value;
34368
+ }
34369
+ get viewType() {
34370
+ return this._viewType;
34371
+ }
34032
34372
  constructor(wcEmbedderBaseUrl) {
34033
34373
  this.wcEmbedderBaseUrl = wcEmbedderBaseUrl;
34034
34374
  }
34035
34375
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewShareComponent, deps: [{ token: WEB_COMPONENT_EMBEDDER_URL, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
34036
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataViewShareComponent, selector: "gn-ui-data-view-share", ngImport: i0, template: "<div class=\"container-lg px-5 my-1 lg:mx-auto\">\n <mat-tab-group\n [selectedIndex]=\"0\"\n animationDuration=\"0ms\"\n mat-stretch-tabs=\"false\"\n mat-align-tabs=\"start\"\n [disableRipple]=\"!wcEmbedderBaseUrl\"\n >\n <mat-tab *ngIf=\"wcEmbedderBaseUrl\">\n <ng-template mat-tab-label>\n <span class=\"tab-header-label-gray\" translate>share.tab.permalink</span>\n </ng-template>\n <gn-ui-data-view-permalink></gn-ui-data-view-permalink>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <span\n [class]=\"\n wcEmbedderBaseUrl\n ? 'tab-header-label-gray'\n : 'single-tab-header-label-gray'\n \"\n translate\n >share.tab.webComponent</span\n >\n </ng-template>\n <gn-ui-data-view-web-component></gn-ui-data-view-web-component>\n </mat-tab>\n </mat-tab-group>\n</div>\n", styles: ["::ng-deep .mat-mdc-tab.mdc-tab.mdc-tab--active .tab-header-label-gray{opacity:100%;font-weight:700}.tab-header-label-gray{@apply text-sm text-gray-700 opacity-75 hover:text-gray-900;}.single-tab-header-label-gray{@apply text-sm text-gray-900;}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$5.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i2$5.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i2$5.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: DataViewPermalinkComponent, selector: "gn-ui-data-view-permalink" }, { kind: "component", type: DataViewWebComponentComponent, selector: "gn-ui-data-view-web-component" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34376
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DataViewShareComponent, selector: "gn-ui-data-view-share", inputs: { viewType: "viewType" }, ngImport: i0, template: "<div class=\"container-lg px-5 my-1 lg:mx-auto\">\n <mat-tab-group\n [selectedIndex]=\"0\"\n animationDuration=\"0ms\"\n mat-stretch-tabs=\"false\"\n mat-align-tabs=\"start\"\n [disableRipple]=\"!wcEmbedderBaseUrl\"\n >\n <mat-tab *ngIf=\"wcEmbedderBaseUrl\">\n <ng-template mat-tab-label>\n <span class=\"tab-header-label-gray\" translate>share.tab.permalink</span>\n </ng-template>\n <gn-ui-data-view-permalink\n [viewType]=\"viewType\"\n ></gn-ui-data-view-permalink>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <span\n [class]=\"\n wcEmbedderBaseUrl\n ? 'tab-header-label-gray'\n : 'single-tab-header-label-gray'\n \"\n translate\n >share.tab.webComponent</span\n >\n </ng-template>\n <gn-ui-data-view-web-component\n [viewType]=\"viewType\"\n ></gn-ui-data-view-web-component>\n </mat-tab>\n </mat-tab-group>\n</div>\n", styles: ["::ng-deep .mat-mdc-tab.mdc-tab.mdc-tab--active .tab-header-label-gray{opacity:100%;font-weight:700}.tab-header-label-gray{@apply text-sm text-gray-700 opacity-75 hover:text-gray-900;}.single-tab-header-label-gray{@apply text-sm text-gray-900;}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$6.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i2$6.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i2$6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: DataViewPermalinkComponent, selector: "gn-ui-data-view-permalink", inputs: ["viewType"] }, { kind: "component", type: DataViewWebComponentComponent, selector: "gn-ui-data-view-web-component", inputs: ["viewType"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34037
34377
  }
34038
34378
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DataViewShareComponent, decorators: [{
34039
34379
  type: Component,
34040
- args: [{ selector: 'gn-ui-data-view-share', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container-lg px-5 my-1 lg:mx-auto\">\n <mat-tab-group\n [selectedIndex]=\"0\"\n animationDuration=\"0ms\"\n mat-stretch-tabs=\"false\"\n mat-align-tabs=\"start\"\n [disableRipple]=\"!wcEmbedderBaseUrl\"\n >\n <mat-tab *ngIf=\"wcEmbedderBaseUrl\">\n <ng-template mat-tab-label>\n <span class=\"tab-header-label-gray\" translate>share.tab.permalink</span>\n </ng-template>\n <gn-ui-data-view-permalink></gn-ui-data-view-permalink>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <span\n [class]=\"\n wcEmbedderBaseUrl\n ? 'tab-header-label-gray'\n : 'single-tab-header-label-gray'\n \"\n translate\n >share.tab.webComponent</span\n >\n </ng-template>\n <gn-ui-data-view-web-component></gn-ui-data-view-web-component>\n </mat-tab>\n </mat-tab-group>\n</div>\n", styles: ["::ng-deep .mat-mdc-tab.mdc-tab.mdc-tab--active .tab-header-label-gray{opacity:100%;font-weight:700}.tab-header-label-gray{@apply text-sm text-gray-700 opacity-75 hover:text-gray-900;}.single-tab-header-label-gray{@apply text-sm text-gray-900;}\n"] }]
34380
+ args: [{ selector: 'gn-ui-data-view-share', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container-lg px-5 my-1 lg:mx-auto\">\n <mat-tab-group\n [selectedIndex]=\"0\"\n animationDuration=\"0ms\"\n mat-stretch-tabs=\"false\"\n mat-align-tabs=\"start\"\n [disableRipple]=\"!wcEmbedderBaseUrl\"\n >\n <mat-tab *ngIf=\"wcEmbedderBaseUrl\">\n <ng-template mat-tab-label>\n <span class=\"tab-header-label-gray\" translate>share.tab.permalink</span>\n </ng-template>\n <gn-ui-data-view-permalink\n [viewType]=\"viewType\"\n ></gn-ui-data-view-permalink>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n <span\n [class]=\"\n wcEmbedderBaseUrl\n ? 'tab-header-label-gray'\n : 'single-tab-header-label-gray'\n \"\n translate\n >share.tab.webComponent</span\n >\n </ng-template>\n <gn-ui-data-view-web-component\n [viewType]=\"viewType\"\n ></gn-ui-data-view-web-component>\n </mat-tab>\n </mat-tab-group>\n</div>\n", styles: ["::ng-deep .mat-mdc-tab.mdc-tab.mdc-tab--active .tab-header-label-gray{opacity:100%;font-weight:700}.tab-header-label-gray{@apply text-sm text-gray-700 opacity-75 hover:text-gray-900;}.single-tab-header-label-gray{@apply text-sm text-gray-900;}\n"] }]
34041
34381
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
34042
34382
  type: Optional
34043
34383
  }, {
34044
34384
  type: Inject,
34045
34385
  args: [WEB_COMPONENT_EMBEDDER_URL]
34046
- }] }]; } });
34386
+ }] }]; }, propDecorators: { viewType: [{
34387
+ type: Input
34388
+ }] } });
34047
34389
 
34048
34390
  class FeatureRecordModule {
34049
34391
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FeatureRecordModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
@@ -34133,75 +34475,159 @@ const saveRecord = createAction('[Editor] Save record');
34133
34475
  const saveRecordSuccess = createAction('[Editor] Save record success');
34134
34476
  const saveRecordFailure = createAction('[Editor] Save record failure', props());
34135
34477
  const draftSaveSuccess = createAction('[Editor] Draft save success');
34478
+ const setCurrentPage = createAction('[Editor] Set current page', props());
34136
34479
 
34137
- const DEFAULT_FIELDS = [
34138
- {
34139
- model: 'title',
34140
- formFieldConfig: {
34141
- labelKey: 'Metadata title',
34142
- type: 'text',
34143
- },
34480
+ /**
34481
+ * This file contains the configuration of the fields that will be displayed in the editor.
34482
+ * To add a new field, you need to create a new EditorField object in the fields part of this file.
34483
+ * Then add it to the corresponding section in the sections part of this file.
34484
+ * Finally, add the section to the corresponding page in the pages part of this file.
34485
+ */
34486
+ /************************************************************
34487
+ *************** FIELDS *****************
34488
+ ************************************************************
34489
+ */
34490
+ const RECORD_LICENSE_FIELD = {
34491
+ model: 'licenses',
34492
+ formFieldConfig: {
34493
+ labelKey: marker('editor.record.form.field.license'),
34144
34494
  },
34145
- {
34146
- model: 'abstract',
34147
- formFieldConfig: {
34148
- labelKey: 'Abstract',
34149
- type: 'rich',
34150
- },
34495
+ };
34496
+ const RECORD_KEYWORDS_FIELD = {
34497
+ model: 'keywords',
34498
+ formFieldConfig: {
34499
+ labelKey: marker('editor.record.form.field.keywords'),
34151
34500
  },
34152
- {
34153
- model: 'uniqueIdentifier',
34154
- formFieldConfig: {
34155
- labelKey: 'Unique identifier',
34156
- type: 'text',
34157
- locked: true,
34158
- },
34501
+ };
34502
+ const RECORD_UNIQUE_IDENTIFIER_FIELD = {
34503
+ model: 'uniqueIdentifier',
34504
+ formFieldConfig: {
34505
+ labelKey: marker('editor.record.form.field.uniqueIdentifier'),
34506
+ locked: true,
34159
34507
  },
34160
- {
34161
- model: 'recordUpdated',
34162
- formFieldConfig: {
34163
- labelKey: 'Record Updated',
34164
- type: 'text',
34165
- locked: true,
34166
- },
34167
- onSaveProcess: '${dateNow()}',
34508
+ };
34509
+ const RECORD_RESOURCE_UPDATED_FIELD = {
34510
+ model: 'resourceUpdated',
34511
+ formFieldConfig: {
34512
+ labelKey: marker('editor.record.form.field.resourceUpdated'),
34168
34513
  },
34169
- {
34170
- model: 'licenses',
34171
- formFieldConfig: {
34172
- labelKey: marker('editor.record.form.license'),
34173
- type: 'list',
34174
- },
34514
+ };
34515
+ const RECORD_UPDATED_FIELD = {
34516
+ model: 'recordUpdated',
34517
+ formFieldConfig: {
34518
+ labelKey: marker('editor.record.form.field.recordUpdated'),
34519
+ locked: true,
34175
34520
  },
34176
- {
34177
- model: 'resourceUpdated',
34178
- formFieldConfig: {
34179
- labelKey: marker('editor.record.form.resourceUpdated'),
34180
- type: 'date',
34181
- },
34521
+ onSaveProcess: '${dateNow()}',
34522
+ };
34523
+ const RECORD_UPDATE_FREQUENCY_FIELD = {
34524
+ model: 'updateFrequency',
34525
+ formFieldConfig: {
34526
+ labelKey: marker('editor.record.form.field.updateFrequency'),
34182
34527
  },
34183
- {
34184
- model: 'updateFrequency',
34185
- formFieldConfig: {
34186
- labelKey: marker('editor.record.form.updateFrequency'),
34187
- type: 'text',
34188
- },
34528
+ };
34529
+ const RECORD_TEMPORAL_EXTENTS_FIELD = {
34530
+ model: 'temporalExtents',
34531
+ formFieldConfig: {
34532
+ labelKey: marker('editor.record.form.field.temporalExtents'),
34189
34533
  },
34190
- {
34191
- model: 'temporalExtents',
34192
- formFieldConfig: {
34193
- labelKey: marker('editor.record.form.temporalExtents'),
34194
- type: 'list',
34195
- },
34534
+ };
34535
+ const RECORD_TITLE_FIELD = {
34536
+ model: 'title',
34537
+ formFieldConfig: {
34538
+ labelKey: marker('editor.record.form.field.title'),
34196
34539
  },
34197
- {
34198
- model: 'keywords',
34199
- formFieldConfig: {
34200
- labelKey: marker('editor.record.form.keywords'),
34201
- type: 'list',
34202
- },
34540
+ };
34541
+ const RECORD_ABSTRACT_FIELD = {
34542
+ model: 'abstract',
34543
+ formFieldConfig: {
34544
+ labelKey: marker('editor.record.form.field.abstract'),
34203
34545
  },
34204
- ];
34546
+ };
34547
+ /************************************************************
34548
+ *************** SECTIONS *****************
34549
+ ************************************************************
34550
+ */
34551
+ const TITLE_SECTION = {
34552
+ hidden: false,
34553
+ fields: [RECORD_TITLE_FIELD, RECORD_ABSTRACT_FIELD],
34554
+ };
34555
+ const ABOUT_SECTION = {
34556
+ labelKey: marker('editor.record.form.section.about.label'),
34557
+ descriptionKey: marker('editor.record.form.section.about.description'),
34558
+ hidden: false,
34559
+ fields: [
34560
+ RECORD_UNIQUE_IDENTIFIER_FIELD,
34561
+ RECORD_RESOURCE_UPDATED_FIELD,
34562
+ RECORD_UPDATED_FIELD,
34563
+ RECORD_UPDATE_FREQUENCY_FIELD,
34564
+ RECORD_TEMPORAL_EXTENTS_FIELD,
34565
+ ],
34566
+ };
34567
+ const GEOGRAPHICAL_COVERAGE_SECTION = {
34568
+ labelKey: marker('editor.record.form.section.geographicalCoverage.label'),
34569
+ hidden: false,
34570
+ fields: [],
34571
+ };
34572
+ const ASSOCIATED_RESOURCES_SECTION = {
34573
+ labelKey: marker('editor.record.form.section.associatedResources.label'),
34574
+ descriptionKey: marker('editor.record.form.section.associatedResources.description'),
34575
+ hidden: false,
34576
+ fields: [],
34577
+ };
34578
+ const ANNEXES_SECTION = {
34579
+ labelKey: marker('editor.record.form.section.annexes.label'),
34580
+ hidden: false,
34581
+ fields: [],
34582
+ };
34583
+ const CLASSIFICATION_SECTION = {
34584
+ labelKey: marker('editor.record.form.section.classification.label'),
34585
+ descriptionKey: marker('editor.record.form.section.classification.description'),
34586
+ hidden: false,
34587
+ fields: [RECORD_KEYWORDS_FIELD],
34588
+ };
34589
+ const USE_AND_ACCESS_CONDITIONS_SECTION = {
34590
+ labelKey: marker('editor.record.form.section.useAndAccessConditions.label'),
34591
+ hidden: false,
34592
+ fields: [RECORD_LICENSE_FIELD],
34593
+ };
34594
+ const DATA_MANAGERS_SECTION = {
34595
+ labelKey: marker('editor.record.form.section.dataManagers.label'),
34596
+ descriptionKey: marker('editor.record.form.section.dataManagers.description'),
34597
+ hidden: false,
34598
+ fields: [],
34599
+ };
34600
+ const DATA_POINT_OF_CONTACT_SECTION = {
34601
+ labelKey: marker('editor.record.form.section.dataPointOfContact.label'),
34602
+ descriptionKey: marker('editor.record.form.section.dataPointOfContact.description'),
34603
+ hidden: false,
34604
+ fields: [],
34605
+ };
34606
+ /************************************************************
34607
+ *************** PAGES *****************
34608
+ ************************************************************
34609
+ */
34610
+ const DEFAULT_CONFIGURATION = {
34611
+ pages: [
34612
+ {
34613
+ labelKey: marker('editor.record.form.page.description'),
34614
+ sections: [TITLE_SECTION, ABOUT_SECTION, GEOGRAPHICAL_COVERAGE_SECTION],
34615
+ },
34616
+ {
34617
+ labelKey: marker('editor.record.form.page.ressources'),
34618
+ sections: [ASSOCIATED_RESOURCES_SECTION, ANNEXES_SECTION],
34619
+ },
34620
+ {
34621
+ labelKey: marker('editor.record.form.page.accessAndContact'),
34622
+ sections: [
34623
+ CLASSIFICATION_SECTION,
34624
+ USE_AND_ACCESS_CONDITIONS_SECTION,
34625
+ DATA_MANAGERS_SECTION,
34626
+ DATA_POINT_OF_CONTACT_SECTION,
34627
+ ],
34628
+ },
34629
+ ],
34630
+ };
34205
34631
 
34206
34632
  const EDITOR_FEATURE_KEY = 'editor';
34207
34633
  const initialEditorState = {
@@ -34211,7 +34637,8 @@ const initialEditorState = {
34211
34637
  saving: false,
34212
34638
  saveError: null,
34213
34639
  changedSinceSave: false,
34214
- fieldsConfig: DEFAULT_FIELDS,
34640
+ editorConfig: DEFAULT_CONFIGURATION,
34641
+ currentPage: 0,
34215
34642
  };
34216
34643
  const reducer = createReducer(initialEditorState, on(openRecord, (state, { record, recordSource, alreadySavedOnce }) => ({
34217
34644
  ...state,
@@ -34241,6 +34668,9 @@ const reducer = createReducer(initialEditorState, on(openRecord, (state, { recor
34241
34668
  })), on(markRecordAsChanged, (state) => ({
34242
34669
  ...state,
34243
34670
  changedSinceSave: true,
34671
+ })), on(setCurrentPage, (state, { page }) => ({
34672
+ ...state,
34673
+ currentPage: page,
34244
34674
  })));
34245
34675
  function editorReducer(state, action) {
34246
34676
  return reducer(state, action);
@@ -34253,11 +34683,21 @@ const selectRecordSaving = createSelector(selectEditorState, (state) => state.sa
34253
34683
  const selectRecordSaveError = createSelector(selectEditorState, (state) => state.saveError);
34254
34684
  const selectRecordChangedSinceSave = createSelector(selectEditorState, (state) => state.changedSinceSave);
34255
34685
  const selectRecordAlreadySavedOnce = createSelector(selectEditorState, (state) => state.alreadySavedOnce);
34256
- const selectRecordFieldsConfig = createSelector(selectEditorState, (state) => state.fieldsConfig);
34257
- const selectRecordFields = createSelector(selectEditorState, (state) => state.fieldsConfig.map((fieldConfig) => ({
34258
- config: fieldConfig,
34259
- value: state.record?.[fieldConfig.model] ?? null,
34260
- })));
34686
+ const selectEditorConfig = createSelector(selectEditorState, (state) => state.editorConfig);
34687
+ const selectCurrentPage = createSelector(selectEditorState, (state) => state.currentPage);
34688
+ const selectRecordSections = createSelector(selectEditorState, (state) => {
34689
+ const currentPage = state.editorConfig.pages[state.currentPage];
34690
+ if (!currentPage) {
34691
+ return [];
34692
+ }
34693
+ return currentPage.sections.map((section) => ({
34694
+ ...section,
34695
+ fieldsWithValues: section.fields.map((fieldConfig) => ({
34696
+ config: fieldConfig,
34697
+ value: state.record?.[fieldConfig.model] ?? null,
34698
+ })),
34699
+ }));
34700
+ });
34261
34701
 
34262
34702
  class EditorFacade {
34263
34703
  constructor() {
@@ -34270,8 +34710,10 @@ class EditorFacade {
34270
34710
  this.saveError$ = this.store.pipe(select(selectRecordSaveError), filter$1((error) => !!error));
34271
34711
  this.saveSuccess$ = this.actions$.pipe(ofType(saveRecordSuccess));
34272
34712
  this.changedSinceSave$ = this.store.pipe(select(selectRecordChangedSinceSave));
34273
- this.recordFields$ = this.store.pipe(select(selectRecordFields));
34713
+ this.currentSections$ = this.store.pipe(select(selectRecordSections));
34274
34714
  this.draftSaveSuccess$ = this.actions$.pipe(ofType(draftSaveSuccess));
34715
+ this.currentPage$ = this.store.pipe(select(selectCurrentPage));
34716
+ this.editorConfig$ = this.store.pipe(select(selectEditorConfig));
34275
34717
  }
34276
34718
  openRecord(record, recordSource, alreadySavedOnce) {
34277
34719
  this.store.dispatch(openRecord({ record, recordSource, alreadySavedOnce }));
@@ -34282,6 +34724,9 @@ class EditorFacade {
34282
34724
  updateRecordField(field, value) {
34283
34725
  this.store.dispatch(updateRecordField({ field, value }));
34284
34726
  }
34727
+ setCurrentPage(page) {
34728
+ this.store.dispatch(setCurrentPage({ page }));
34729
+ }
34285
34730
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
34286
34731
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EditorFacade }); }
34287
34732
  }
@@ -34309,12 +34754,13 @@ class EditorService {
34309
34754
  // returns the record as it was when saved, alongside its source
34310
34755
  saveRecord(record, fieldsConfig, generateNewUniqueIdentifier = false) {
34311
34756
  const savedRecord = { ...record };
34757
+ const fields = fieldsConfig.pages.flatMap((page) => page.sections.flatMap((section) => section.fields));
34312
34758
  // run onSave processes
34313
- for (const field of fieldsConfig) {
34759
+ for (const field of fields) {
34314
34760
  if (field.onSaveProcess && field.model) {
34315
34761
  const evaluator = evaluate(field.onSaveProcess);
34316
34762
  savedRecord[field.model] = evaluator({
34317
- config: field,
34763
+ model: field.model,
34318
34764
  value: record[field.model],
34319
34765
  });
34320
34766
  }
@@ -34351,7 +34797,7 @@ class EditorEffects {
34351
34797
  this.editorService = inject(EditorService);
34352
34798
  this.recordsRepository = inject(RecordsRepositoryInterface);
34353
34799
  this.store = inject(Store);
34354
- this.saveRecord$ = createEffect(() => this.actions$.pipe(ofType(saveRecord), withLatestFrom$1(this.store.select(selectRecord), this.store.select(selectRecordFieldsConfig), this.store.select(selectRecordAlreadySavedOnce)), switchMap$1(([, record, fieldsConfig, alreadySavedOnce]) => this.editorService
34800
+ this.saveRecord$ = createEffect(() => this.actions$.pipe(ofType(saveRecord), withLatestFrom$1(this.store.select(selectRecord), this.store.select(selectEditorConfig), this.store.select(selectRecordAlreadySavedOnce)), switchMap$1(([, record, fieldsConfig, alreadySavedOnce]) => this.editorService
34355
34801
  .saveRecord(record, fieldsConfig, !alreadySavedOnce)
34356
34802
  .pipe(switchMap$1(([record, recordSource]) => of(saveRecordSuccess(), openRecord({
34357
34803
  record,
@@ -35304,7 +35750,7 @@ class FormFieldComponent {
35304
35750
  return this.model === 'title' || this.model === 'abstract';
35305
35751
  }
35306
35752
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
35307
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormFieldComponent, isStandalone: true, selector: "gn-ui-form-field", inputs: { model: "model", config: "config", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "titleInput", first: true, predicate: ["titleInput"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey | translate\"\n [hint]=\"config.hintKey | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container *ngIf=\"isTitle\">\n <div class=\"flex justify-between items-center gap-3\">\n <h2\n #titleInput\n class=\"grow text-3xl font-normal\"\n [gnUiEditableLabel]=\"true\"\n (editableLabelChanged)=\"formControl.setValue($event)\"\n >\n {{ formControl.value }}\n </h2>\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isAbstract\">\n <gn-ui-form-field-rich\n class=\"h-[8rem]\"\n [control]=\"formControl\"\n [label]=\"config.labelKey | translate\"\n [hint]=\"config.hintKey | translate\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngIf=\"isLicenses\">\n <gn-ui-form-field-license\n [control]=\"formControl\"\n [label]=\"config.labelKey | translate\"\n ></gn-ui-form-field-license>\n </ng-container>\n <ng-container *ngIf=\"isResourceUpdated\">\n <gn-ui-form-field-resource-updated\n [control]=\"formControl\"\n ></gn-ui-form-field-resource-updated>\n </ng-container>\n <ng-container *ngIf=\"isUpdateFrequency\">\n <gn-ui-form-field-update-frequency\n [control]=\"formControl\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngIf=\"isTemporalExtents\">\n <gn-ui-form-field-temporal-extents\n [control]=\"formControl\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngIf=\"isSimpleField\">\n <gn-ui-form-field-simple\n type=\"text\"\n [control]=\"formControl\"\n [readonly]=\"isReadOnly\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngIf=\"isSpatialExtentField\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngIf=\"isKeywords\">\n <gn-ui-form-field-keywords\n [control]=\"formControl\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: EditableLabelDirective, selector: "[gnUiEditableLabel]", inputs: ["gnUiEditableLabel"], outputs: ["editableLabelChanged"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: FormFieldWrapperComponent, selector: "gn-ui-form-field-wrapper", inputs: ["label", "hint"] }, { kind: "component", type: FormFieldLicenseComponent, selector: "gn-ui-form-field-license", inputs: ["control", "label"] }, { kind: "component", type: FormFieldResourceUpdatedComponent, selector: "gn-ui-form-field-resource-updated", inputs: ["control"] }, { kind: "component", type: FormFieldUpdateFrequencyComponent, selector: "gn-ui-form-field-update-frequency", inputs: ["control"] }, { kind: "component", type: FormFieldTemporalExtentsComponent, selector: "gn-ui-form-field-temporal-extents", inputs: ["control"] }, { kind: "component", type: FormFieldSimpleComponent, selector: "gn-ui-form-field-simple", inputs: ["type", "control", "readonly", "invalid", "placeholder", "options"] }, { kind: "component", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: ["control", "label", "hint", "helperText", "placeholder"] }, { kind: "component", type: FormFieldSpatialExtentComponent, selector: "gn-ui-form-field-spatial-extent" }, { kind: "component", type: FormFieldKeywordsComponent, selector: "gn-ui-form-field-keywords", inputs: ["control"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
35753
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FormFieldComponent, isStandalone: true, selector: "gn-ui-form-field", inputs: { model: "model", config: "config", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "titleInput", first: true, predicate: ["titleInput"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container *ngIf=\"isTitle\">\n <div class=\"flex justify-between items-center gap-3\">\n <span\n #titleInput\n class=\"grow font-title text-3xl font-normal\"\n [gnUiEditableLabel]=\"true\"\n (editableLabelChanged)=\"formControl.setValue($event)\"\n >\n {{ formControl.value }}\n </span>\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey! | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isAbstract\">\n <gn-ui-form-field-rich\n class=\"h-[8rem]\"\n [control]=\"formControl\"\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngIf=\"isLicenses\">\n <gn-ui-form-field-license\n [control]=\"formControl\"\n [label]=\"config.labelKey! | translate\"\n ></gn-ui-form-field-license>\n </ng-container>\n <ng-container *ngIf=\"isResourceUpdated\">\n <gn-ui-form-field-resource-updated\n [control]=\"formControl\"\n ></gn-ui-form-field-resource-updated>\n </ng-container>\n <ng-container *ngIf=\"isUpdateFrequency\">\n <gn-ui-form-field-update-frequency\n [control]=\"formControl\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngIf=\"isTemporalExtents\">\n <gn-ui-form-field-temporal-extents\n [control]=\"formControl\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngIf=\"isSimpleField\">\n <gn-ui-form-field-simple\n type=\"text\"\n [control]=\"formControl\"\n [readonly]=\"isReadOnly\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngIf=\"isSpatialExtentField\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngIf=\"isKeywords\">\n <gn-ui-form-field-keywords\n [control]=\"formControl\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: EditableLabelDirective, selector: "[gnUiEditableLabel]", inputs: ["gnUiEditableLabel"], outputs: ["editableLabelChanged"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: FormFieldWrapperComponent, selector: "gn-ui-form-field-wrapper", inputs: ["label", "hint"] }, { kind: "component", type: FormFieldLicenseComponent, selector: "gn-ui-form-field-license", inputs: ["control", "label"] }, { kind: "component", type: FormFieldResourceUpdatedComponent, selector: "gn-ui-form-field-resource-updated", inputs: ["control"] }, { kind: "component", type: FormFieldUpdateFrequencyComponent, selector: "gn-ui-form-field-update-frequency", inputs: ["control"] }, { kind: "component", type: FormFieldTemporalExtentsComponent, selector: "gn-ui-form-field-temporal-extents", inputs: ["control"] }, { kind: "component", type: FormFieldSimpleComponent, selector: "gn-ui-form-field-simple", inputs: ["type", "control", "readonly", "invalid", "placeholder", "options"] }, { kind: "component", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: ["control", "label", "hint", "helperText", "placeholder"] }, { kind: "component", type: FormFieldSpatialExtentComponent, selector: "gn-ui-form-field-spatial-extent" }, { kind: "component", type: FormFieldKeywordsComponent, selector: "gn-ui-form-field-keywords", inputs: ["control"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
35308
35754
  }
35309
35755
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FormFieldComponent, decorators: [{
35310
35756
  type: Component,
@@ -35327,7 +35773,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35327
35773
  FormFieldArrayComponent,
35328
35774
  FormFieldKeywordsComponent,
35329
35775
  TranslateModule,
35330
- ], template: "<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey | translate\"\n [hint]=\"config.hintKey | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container *ngIf=\"isTitle\">\n <div class=\"flex justify-between items-center gap-3\">\n <h2\n #titleInput\n class=\"grow text-3xl font-normal\"\n [gnUiEditableLabel]=\"true\"\n (editableLabelChanged)=\"formControl.setValue($event)\"\n >\n {{ formControl.value }}\n </h2>\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isAbstract\">\n <gn-ui-form-field-rich\n class=\"h-[8rem]\"\n [control]=\"formControl\"\n [label]=\"config.labelKey | translate\"\n [hint]=\"config.hintKey | translate\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngIf=\"isLicenses\">\n <gn-ui-form-field-license\n [control]=\"formControl\"\n [label]=\"config.labelKey | translate\"\n ></gn-ui-form-field-license>\n </ng-container>\n <ng-container *ngIf=\"isResourceUpdated\">\n <gn-ui-form-field-resource-updated\n [control]=\"formControl\"\n ></gn-ui-form-field-resource-updated>\n </ng-container>\n <ng-container *ngIf=\"isUpdateFrequency\">\n <gn-ui-form-field-update-frequency\n [control]=\"formControl\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngIf=\"isTemporalExtents\">\n <gn-ui-form-field-temporal-extents\n [control]=\"formControl\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngIf=\"isSimpleField\">\n <gn-ui-form-field-simple\n type=\"text\"\n [control]=\"formControl\"\n [readonly]=\"isReadOnly\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngIf=\"isSpatialExtentField\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngIf=\"isKeywords\">\n <gn-ui-form-field-keywords\n [control]=\"formControl\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n</ng-template>\n" }]
35776
+ ], template: "<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container *ngIf=\"isTitle\">\n <div class=\"flex justify-between items-center gap-3\">\n <span\n #titleInput\n class=\"grow font-title text-3xl font-normal\"\n [gnUiEditableLabel]=\"true\"\n (editableLabelChanged)=\"formControl.setValue($event)\"\n >\n {{ formControl.value }}\n </span>\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey! | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </ng-container>\n <ng-container *ngIf=\"isAbstract\">\n <gn-ui-form-field-rich\n class=\"h-[8rem]\"\n [control]=\"formControl\"\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngIf=\"isLicenses\">\n <gn-ui-form-field-license\n [control]=\"formControl\"\n [label]=\"config.labelKey! | translate\"\n ></gn-ui-form-field-license>\n </ng-container>\n <ng-container *ngIf=\"isResourceUpdated\">\n <gn-ui-form-field-resource-updated\n [control]=\"formControl\"\n ></gn-ui-form-field-resource-updated>\n </ng-container>\n <ng-container *ngIf=\"isUpdateFrequency\">\n <gn-ui-form-field-update-frequency\n [control]=\"formControl\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngIf=\"isTemporalExtents\">\n <gn-ui-form-field-temporal-extents\n [control]=\"formControl\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngIf=\"isSimpleField\">\n <gn-ui-form-field-simple\n type=\"text\"\n [control]=\"formControl\"\n [readonly]=\"isReadOnly\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngIf=\"isSpatialExtentField\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngIf=\"isKeywords\">\n <gn-ui-form-field-keywords\n [control]=\"formControl\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n</ng-template>\n" }]
35331
35777
  }], ctorParameters: function () { return []; }, propDecorators: { model: [{
35332
35778
  type: Input
35333
35779
  }], config: [{
@@ -35344,23 +35790,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35344
35790
  class RecordFormComponent {
35345
35791
  constructor(facade) {
35346
35792
  this.facade = facade;
35347
- this.fields$ = this.facade.recordFields$;
35348
35793
  }
35349
- handleFieldValueChange(field, newValue) {
35350
- if (!field.config.model) {
35794
+ handleFieldValueChange(model, newValue) {
35795
+ if (!model) {
35351
35796
  return;
35352
35797
  }
35353
- this.facade.updateRecordField(field.config.model, newValue);
35798
+ this.facade.updateRecordField(model, newValue);
35354
35799
  }
35355
35800
  fieldTracker(index, field) {
35356
35801
  return field.config.model;
35357
35802
  }
35803
+ sectionTracker(index, section) {
35804
+ return section.labelKey;
35805
+ }
35358
35806
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RecordFormComponent, deps: [{ token: EditorFacade }], target: i0.ɵɵFactoryTarget.Component }); }
35359
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<div class=\"flex flex-col gap-6 p-6\">\n <ng-container *ngFor=\"let field of fields$ | async; trackBy: fieldTracker\">\n <gn-ui-form-field\n *ngIf=\"field.config.formFieldConfig && !field.config.hidden\"\n [model]=\"field.config.model\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field, $event)\"\n ></gn-ui-form-field>\n </ng-container>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "component", type: FormFieldComponent, selector: "gn-ui-form-field", inputs: ["model", "config", "value"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
35807
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<ng-container>\n <div class=\"flex flex-col gap-6 p-8\">\n <ng-container\n *ngFor=\"\n let section of facade.currentSections$ | async;\n trackBy: sectionTracker\n \"\n >\n <ng-container *ngIf=\"!section.hidden\">\n <div class=\"flex flex-col gap-8 border p-8 rounded-[8px] shadow\">\n <div\n class=\"flex flex-col gap-2\"\n [ngClass]=\"section.labelKey ? 'mb-4' : 'hidden'\"\n >\n <div\n *ngIf=\"section.labelKey\"\n class=\"text-2xl font-petrona text-secondary\"\n translate\n >\n {{ section.labelKey }}\n </div>\n <div\n *ngIf=\"section.descriptionKey\"\n class=\"text-secondary-lightest\"\n translate\n >\n {{ section.descriptionKey }}\n </div>\n </div>\n <ng-container\n *ngFor=\"\n let field of section.fieldsWithValues;\n trackBy: fieldTracker\n \"\n >\n <ng-container *ngIf=\"!field.config.hidden\">\n <gn-ui-form-field\n [model]=\"field.config.model!\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n (valueChange)=\"\n handleFieldValueChange(field.config.model!, $event)\n \"\n ></gn-ui-form-field>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </div>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "component", type: FormFieldComponent, selector: "gn-ui-form-field", inputs: ["model", "config", "value"], outputs: ["valueChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
35360
35808
  }
35361
35809
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RecordFormComponent, decorators: [{
35362
35810
  type: Component,
35363
- args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, FormFieldComponent], template: "<div class=\"flex flex-col gap-6 p-6\">\n <ng-container *ngFor=\"let field of fields$ | async; trackBy: fieldTracker\">\n <gn-ui-form-field\n *ngIf=\"field.config.formFieldConfig && !field.config.hidden\"\n [model]=\"field.config.model\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field, $event)\"\n ></gn-ui-form-field>\n </ng-container>\n</div>\n" }]
35811
+ args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, FormFieldComponent, TranslateModule], template: "<ng-container>\n <div class=\"flex flex-col gap-6 p-8\">\n <ng-container\n *ngFor=\"\n let section of facade.currentSections$ | async;\n trackBy: sectionTracker\n \"\n >\n <ng-container *ngIf=\"!section.hidden\">\n <div class=\"flex flex-col gap-8 border p-8 rounded-[8px] shadow\">\n <div\n class=\"flex flex-col gap-2\"\n [ngClass]=\"section.labelKey ? 'mb-4' : 'hidden'\"\n >\n <div\n *ngIf=\"section.labelKey\"\n class=\"text-2xl font-petrona text-secondary\"\n translate\n >\n {{ section.labelKey }}\n </div>\n <div\n *ngIf=\"section.descriptionKey\"\n class=\"text-secondary-lightest\"\n translate\n >\n {{ section.descriptionKey }}\n </div>\n </div>\n <ng-container\n *ngFor=\"\n let field of section.fieldsWithValues;\n trackBy: fieldTracker\n \"\n >\n <ng-container *ngIf=\"!field.config.hidden\">\n <gn-ui-form-field\n [model]=\"field.config.model!\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n (valueChange)=\"\n handleFieldValueChange(field.config.model!, $event)\n \"\n ></gn-ui-form-field>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n </div>\n</ng-container>\n" }]
35364
35812
  }], ctorParameters: function () { return [{ type: EditorFacade }]; } });
35365
35813
 
35366
35814
  const ROUTER_STATE_KEY = 'router';
@@ -35743,5 +36191,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
35743
36191
  * Generated bundle index. Do not edit.
35744
36192
  */
35745
36193
 
35746
- export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AbstractSearchField, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, BlockListComponent, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EDITOR_FEATURE_KEY, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditableLabelDirective, EditorFacade, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorComponent, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureNotificationsModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LicenseSearchField, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataQualityComponent, MetadataQualityItemComponent, MultilingualSearchField, MyOrgService, 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, PatchResultsAggregations, 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, 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, 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, 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, TABLE_ITEM_FIXTURE, TABLE_ITEM_FIXTURE_HAB, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, TranslatedSearchField, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiCatalogModule, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiMapModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UserPreviewComponent, UtilI18nModule, UtilSharedModule, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WFS_MAX_FEATURES, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, _reset, addLayer, changeLayerOrder, checkFileFormat, clearLayerError, createFuzzyFilter, currentPage, defaultMapOptions, downgradeImage, downsizeImage, draftSaveSuccess, dragPanCondition, dropEmptyTranslations, editorReducer, findConverterForDocument, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLinkLabel, getLinkPriority, getMapLayers, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, initSearch, initialEditorState, initialMapState, initialState, isBeginningOfResults, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, megabytesToBytes, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, openRecord, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$2 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, saveRecord, saveRecordFailure, saveRecordSuccess, selectEditorState, selectFallback, selectFallbackFields, selectField, selectRecord, selectRecordAlreadySavedOnce, selectRecordChangedSinceSave, selectRecordFields, selectRecordFieldsConfig, selectRecordSaveError, selectRecordSaving, selectRecordSource, selectTranslatedField, selectTranslatedValue, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, totalPages, updateLayer, updateRecordField };
36194
+ export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AbstractSearchField, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseConverter, BaseReader, BlockListComponent, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EDITOR_FEATURE_KEY, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditableLabelDirective, EditorFacade, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorComponent, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureNotificationsModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LicenseSearchField, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataMapperContext, MetadataQualityComponent, MetadataQualityItemComponent, MultilingualSearchField, MyOrgService, 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, PatchResultsAggregations, 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, 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, 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, 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, TABLE_ITEM_FIXTURE, TABLE_ITEM_FIXTURE_HAB, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, TranslatedSearchField, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiCatalogModule, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiMapModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UserPreviewComponent, UtilI18nModule, UtilSharedModule, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WFS_MAX_FEATURES, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, _reset, addLayer, changeLayerOrder, checkFileFormat, clearLayerError, createFuzzyFilter, currentPage, defaultMapOptions, downgradeImage, downsizeImage, draftSaveSuccess, dragPanCondition, dropEmptyTranslations, editorReducer, findConverterForDocument, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLinkLabel, getLinkPriority, getMapLayers, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, initSearch, initialEditorState, initialMapState, initialState, isBeginningOfResults, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, megabytesToBytes, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, openRecord, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$2 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, saveRecord, saveRecordFailure, saveRecordSuccess, selectCurrentPage, selectEditorConfig, selectEditorState, selectFallback, selectFallbackFields, selectField, selectRecord, selectRecordAlreadySavedOnce, selectRecordChangedSinceSave, selectRecordSaveError, selectRecordSaving, selectRecordSections, selectRecordSource, selectTranslatedField, selectTranslatedValue, setCurrentPage, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, totalPages, updateLayer, updateRecordField };
35747
36195
  //# sourceMappingURL=geonetwork-ui.mjs.map