geonetwork-ui 2.4.2-dev.369bfa6fb → 2.4.2-dev.830487aab

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 (89) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +2 -3
  2. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +4 -1
  3. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  4. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +4 -14
  5. package/esm2022/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.mjs +3 -3
  6. package/esm2022/libs/feature/editor/src/lib/components/import-record/import-record.component.mjs +3 -4
  7. package/esm2022/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.mjs +3 -3
  8. package/esm2022/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.mjs +31 -40
  9. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.mjs +3 -3
  10. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.mjs +3 -3
  11. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.mjs +3 -3
  12. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.mjs +8 -9
  13. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.mjs +5 -25
  14. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.mjs +5 -4
  15. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.mjs +3 -3
  16. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +10 -2
  17. package/esm2022/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.mjs +3 -1
  18. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +3 -3
  19. package/esm2022/libs/util/data-fetcher/src/lib/data-fetcher.mjs +5 -1
  20. package/esm2022/libs/util/data-fetcher/src/lib/headers.mjs +3 -2
  21. package/esm2022/libs/util/data-fetcher/src/lib/model.mjs +2 -1
  22. package/esm2022/libs/util/data-fetcher/src/lib/readers/wfs.mjs +79 -0
  23. package/esm2022/translations/de.json +13 -5
  24. package/esm2022/translations/en.json +22 -14
  25. package/esm2022/translations/es.json +13 -5
  26. package/esm2022/translations/fr.json +23 -15
  27. package/esm2022/translations/it.json +32 -26
  28. package/esm2022/translations/nl.json +13 -5
  29. package/esm2022/translations/pt.json +13 -5
  30. package/fesm2022/geonetwork-ui.mjs +279 -174
  31. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  32. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  33. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  34. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  35. package/libs/feature/editor/src/lib/components/import-record/import-record.component.d.ts +0 -1
  36. package/libs/feature/editor/src/lib/components/import-record/import-record.component.d.ts.map +1 -1
  37. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts +7 -14
  38. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts.map +1 -1
  39. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.d.ts +2 -2
  40. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.d.ts.map +1 -1
  41. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.d.ts +1 -6
  42. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.d.ts.map +1 -1
  43. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.d.ts.map +1 -1
  44. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  45. package/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.d.ts.map +1 -1
  46. package/libs/util/data-fetcher/src/lib/data-fetcher.d.ts +3 -2
  47. package/libs/util/data-fetcher/src/lib/data-fetcher.d.ts.map +1 -1
  48. package/libs/util/data-fetcher/src/lib/headers.d.ts.map +1 -1
  49. package/libs/util/data-fetcher/src/lib/model.d.ts +1 -1
  50. package/libs/util/data-fetcher/src/lib/model.d.ts.map +1 -1
  51. package/libs/util/data-fetcher/src/lib/readers/wfs.d.ts +21 -0
  52. package/libs/util/data-fetcher/src/lib/readers/wfs.d.ts.map +1 -0
  53. package/package.json +1 -1
  54. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +1 -0
  55. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +1 -2
  56. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +3 -0
  57. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +1 -1
  58. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +4 -14
  59. package/src/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.html +1 -1
  60. package/src/libs/feature/editor/src/lib/components/import-record/import-record.component.html +4 -1
  61. package/src/libs/feature/editor/src/lib/components/import-record/import-record.component.ts +0 -4
  62. package/src/libs/feature/editor/src/lib/components/online-resource-card/online-resource-card.component.ts +2 -2
  63. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.html +8 -8
  64. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.ts +32 -45
  65. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.html +1 -1
  66. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.html +3 -1
  67. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.html +1 -1
  68. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.html +0 -1
  69. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.ts +6 -6
  70. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.html +24 -17
  71. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.ts +2 -27
  72. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.html +1 -1
  73. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.ts +2 -1
  74. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.html +1 -1
  75. package/src/libs/feature/editor/src/lib/fields.config.ts +9 -1
  76. package/src/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.ts +3 -0
  77. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +1 -1
  78. package/src/libs/util/data-fetcher/src/lib/data-fetcher.ts +9 -1
  79. package/src/libs/util/data-fetcher/src/lib/headers.ts +4 -3
  80. package/src/libs/util/data-fetcher/src/lib/model.ts +1 -0
  81. package/src/libs/util/data-fetcher/src/lib/readers/wfs.ts +112 -0
  82. package/translations/de.json +13 -5
  83. package/translations/en.json +22 -14
  84. package/translations/es.json +13 -5
  85. package/translations/fr.json +23 -15
  86. package/translations/it.json +32 -26
  87. package/translations/nl.json +13 -5
  88. package/translations/pt.json +13 -5
  89. package/translations/sk.json +14 -6
@@ -26,7 +26,7 @@ import { createAction, props, createReducer, on, createFeatureSelector, createSe
26
26
  import EmblaCarousel from 'embla-carousel';
27
27
  import * as i2$3 from '@ng-icons/core';
28
28
  import { provideIcons, NgIcon, NgIconComponent, provideNgIconsConfig, NgIconsModule } from '@ng-icons/core';
29
- import { iconoirNavArrowRight, iconoirNavArrowLeft, iconoirNavArrowDown, iconoirNavArrowUp, iconoirSearch, iconoirCalendar, iconoirLink, iconoirArrowUp, iconoirCloudUpload, iconoirFramePlusIn, iconoirMediaImage, iconoirMediaImageXmark, iconoirBin, iconoirPlus, iconoirUser, iconoirLock, iconoirImport, iconoirLightBulbOn, iconoirArrowLeft, iconoirAttachment } from '@ng-icons/iconoir';
29
+ import { iconoirNavArrowRight, iconoirNavArrowLeft, iconoirNavArrowDown, iconoirNavArrowUp, iconoirSearch, iconoirCalendar, iconoirLink, iconoirArrowUp, iconoirCloudUpload, iconoirFramePlusIn, iconoirMediaImage, iconoirMediaImageXmark, iconoirBin, iconoirPlus, iconoirUser, iconoirLock, iconoirImport, iconoirLightBulbOn, iconoirArrowLeft, iconoirAttachment, iconoirRefresh } from '@ng-icons/iconoir';
30
30
  import { matExpandMore, matExpandLess, matAdd, matRemove, matClose, matContentCopy, matSearch, matStar, matStarBorder, matChevronLeft, matChevronRight, matArrowForward, matArrowBack, matCheck, matWarningAmber, matMoreHoriz, matFace, matQuestionMark, matMoodBad, matZoomOutMap, matOpenInNew, matMailOutline, matPersonOutline, matCheckCircleOutline, matMoreVert, matCorporateFare } from '@ng-icons/material-icons/baseline';
31
31
  import * as i1$3 from '@angular/material/tooltip';
32
32
  import { MatTooltipModule } from '@angular/material/tooltip';
@@ -1114,12 +1114,11 @@ function extractDatasetOnlineResources(getMimeTypeFn) {
1114
1114
  ...descriptionTranslations,
1115
1115
  };
1116
1116
  if (isService) {
1117
- const hasIdentifier = protocol === 'wms' || protocol === 'wfs';
1118
1117
  return {
1119
1118
  type: 'service',
1120
1119
  url: url,
1121
1120
  accessServiceProtocol: protocol,
1122
- ...(name && hasIdentifier && { identifierInService: name }),
1121
+ ...(name && { identifierInService: name }), // should we keep the identifierInService? read-write duplicate with name
1123
1122
  ...(name && { name }),
1124
1123
  ...(description && { description }),
1125
1124
  translations,
@@ -1542,6 +1541,8 @@ function getRoleCode(role) {
1542
1541
  }
1543
1542
  function getServiceDistributionProtocol(distribution) {
1544
1543
  switch (distribution.accessServiceProtocol.toLowerCase()) {
1544
+ case 'ogcfeatures':
1545
+ return 'OGC API Features';
1545
1546
  case 'wfs':
1546
1547
  return 'OGC:WFS';
1547
1548
  case 'wms':
@@ -1718,6 +1719,7 @@ function appendOnlineResource(onlineResource, appendFormatFn, translations, defa
1718
1719
  let functionCode;
1719
1720
  let protocol;
1720
1721
  if (onlineResource.type === 'service') {
1722
+ // should we keep the identifierInService? read-write duplicate with name
1721
1723
  name = onlineResource.identifierInService; // this is for GeoNetwork to know the layer name
1722
1724
  functionCode = 'download';
1723
1725
  protocol = getServiceDistributionProtocol(onlineResource);
@@ -18624,7 +18626,8 @@ var de = {
18624
18626
  "dashboard.createRecord": "Neuer Eintrag",
18625
18627
  "dashboard.importRecord": "",
18626
18628
  "dashboard.importRecord.importExternal": "",
18627
- "dashboard.importRecord.importExternalLabel": "",
18629
+ "dashboard.importRecord.importExternal.subtitle": "",
18630
+ "dashboard.importRecord.importExternal.title": "",
18628
18631
  "dashboard.labels.catalog": "Katalog",
18629
18632
  "dashboard.labels.mySpace": "Mein Bereich",
18630
18633
  "dashboard.records.all": "Metadatenkatalog",
@@ -18793,8 +18796,7 @@ var de = {
18793
18796
  "downloads.format.unknown": "unbekannt",
18794
18797
  "downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden",
18795
18798
  dropFile: dropFile$6,
18796
- "editor.form.keywords.placeholder": "",
18797
- "editor.form.placeKeywordWithoutExtent": "",
18799
+ "editor.new.record.title": "",
18798
18800
  "editor.record.delete.confirmation.cancelText": "Stornieren",
18799
18801
  "editor.record.delete.confirmation.confirmText": "Löschen",
18800
18802
  "editor.record.delete.confirmation.message": "Sind Sie sicher, dass Sie diesen Datensatz löschen möchten?",
@@ -18827,7 +18829,9 @@ var de = {
18827
18829
  "editor.record.form.field.abstract": "Kurzbeschreibung",
18828
18830
  "editor.record.form.field.constraintsShortcuts": "",
18829
18831
  "editor.record.form.field.contacts.noContact": "",
18832
+ "editor.record.form.field.contacts.placeholder": "",
18830
18833
  "editor.record.form.field.contactsForResource.noContact": "",
18834
+ "editor.record.form.field.contactsForResource.placeholder": "",
18831
18835
  "editor.record.form.field.keywords": "Schlagwörter",
18832
18836
  "editor.record.form.field.legalConstraints": "Rechtliche Einschränkung",
18833
18837
  "editor.record.form.field.license": "Lizenz",
@@ -18836,12 +18840,12 @@ var de = {
18836
18840
  "editor.record.form.field.onlineResource.confirm": "",
18837
18841
  "editor.record.form.field.onlineResource.dialogTitle": "",
18838
18842
  "editor.record.form.field.onlineResource.edit.description": "",
18839
- "editor.record.form.field.onlineResource.edit.protocol": "",
18840
18843
  "editor.record.form.field.onlineResource.edit.identifier.error": "Schichten konnten nicht vom Protokoll abgerufen werden",
18841
18844
  "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Ebenenname",
18842
18845
  "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Prozessname",
18843
18846
  "editor.record.form.field.onlineResource.edit.identifier.select.label": "Wählen Sie eine Ebene",
18844
18847
  "editor.record.form.field.onlineResource.edit.identifier.submit": "Link zum Dienst",
18848
+ "editor.record.form.field.onlineResource.edit.protocol": "",
18845
18849
  "editor.record.form.field.onlineResource.edit.title": "",
18846
18850
  "editor.record.form.field.onlineResource.fileSize": "",
18847
18851
  "editor.record.form.field.onlineResource.modify": "",
@@ -18861,6 +18865,9 @@ var de = {
18861
18865
  "editor.record.form.field.title.placeholder": "Geben Sie einen Titel ein",
18862
18866
  "editor.record.form.field.uniqueIdentifier": "Eindeutige Kennung (ID)",
18863
18867
  "editor.record.form.field.updateFrequency": "Aktualisierungshäufigkeit",
18868
+ "editor.record.form.keywords.place.placeholder": "",
18869
+ "editor.record.form.keywords.place.withoutExtent": "",
18870
+ "editor.record.form.keywords.placeholder": "",
18864
18871
  "editor.record.form.license.cc-by": "",
18865
18872
  "editor.record.form.license.cc-by-sa": "",
18866
18873
  "editor.record.form.license.cc-zero": "",
@@ -18872,7 +18879,7 @@ var de = {
18872
18879
  "editor.record.form.license.unknown": "",
18873
18880
  "editor.record.form.page.accessAndContact": "",
18874
18881
  "editor.record.form.page.description": "",
18875
- "editor.record.form.page.ressources": "",
18882
+ "editor.record.form.page.resources": "",
18876
18883
  "editor.record.form.section.about.description": "",
18877
18884
  "editor.record.form.section.about.label": "",
18878
18885
  "editor.record.form.section.annexes.description": "",
@@ -19049,6 +19056,8 @@ var de = {
19049
19056
  "record.metadata.api.form.productTooltip": "",
19050
19057
  "record.metadata.api.form.reset": "Zurücksetzen",
19051
19058
  "record.metadata.api.form.resetTooltip": "",
19059
+ "record.metadata.api.form.title": "Benutzerdefinierte URL generieren",
19060
+ "record.metadata.api.form.title.gpf": "",
19052
19061
  "record.metadata.api.form.type": "Ausgabeformat",
19053
19062
  "record.metadata.api.form.zoneTitle": "",
19054
19063
  "record.metadata.api.form.zoneTooltip": "",
@@ -19117,6 +19126,7 @@ var de = {
19117
19126
  "record.tab.chart": "Diagramm",
19118
19127
  "record.tab.data": "Tabelle",
19119
19128
  "record.tab.map": "Karte",
19129
+ "record.was.created.time": "erstellte diesen Datensatz {time}",
19120
19130
  records: records$6,
19121
19131
  "results.layout.selectOne": "Layout auswählen",
19122
19132
  "results.records.hits.displayedOn": "{displayed, plural, =0{Kein Datensatz.} one{1 Datensatz} other{{displayed} Datensätze }} {hits, plural, other{angezeigt von {hits} insgesamt.}}",
@@ -19226,7 +19236,8 @@ var en = {
19226
19236
  "dashboard.createRecord": "New dataset",
19227
19237
  "dashboard.importRecord": "Import",
19228
19238
  "dashboard.importRecord.importExternal": "Import an external file",
19229
- "dashboard.importRecord.importExternalLabel": "External file URL",
19239
+ "dashboard.importRecord.importExternal.subtitle": "(link to an XML file)",
19240
+ "dashboard.importRecord.importExternal.title": "External file URL",
19230
19241
  "dashboard.labels.catalog": "Catalog",
19231
19242
  "dashboard.labels.mySpace": "My space",
19232
19243
  "dashboard.records.all": "Datasets",
@@ -19395,8 +19406,7 @@ var en = {
19395
19406
  "downloads.format.unknown": "Unknown",
19396
19407
  "downloads.wfs.featuretype.not.found": "The layer was not found",
19397
19408
  dropFile: dropFile$5,
19398
- "editor.form.keywords.placeholder": "Select a keyword",
19399
- "editor.form.placeKeywordWithoutExtent": "This keyword is not associated with any geographical extent",
19409
+ "editor.new.record.title": "My dataset",
19400
19410
  "editor.record.delete.confirmation.cancelText": "Cancel",
19401
19411
  "editor.record.delete.confirmation.confirmText": "Delete",
19402
19412
  "editor.record.delete.confirmation.message": "Are you sure you want to delete this dataset?",
@@ -19421,15 +19431,17 @@ var en = {
19421
19431
  "editor.record.form.constraint.header.securityConstraints": "Applicable security conditions",
19422
19432
  "editor.record.form.constraint.legalConstraints": "Legal constraints",
19423
19433
  "editor.record.form.constraint.markdown.placeholder": "Your text here",
19424
- "editor.record.form.constraint.not.applicable": "No conditions apply.",
19425
- "editor.record.form.constraint.not.known": "The conditions are unknown.",
19434
+ "editor.record.form.constraint.not.applicable": "No conditions apply",
19435
+ "editor.record.form.constraint.not.known": "The conditions are unknown",
19426
19436
  "editor.record.form.constraint.otherConstraints": "Other constraints",
19427
19437
  "editor.record.form.constraint.securityConstraints": "Security constraints",
19428
19438
  "editor.record.form.draft.updateAlert": "Since you created this draft, the dataset has been updated on { date } by { user }. Publishing your draft might erase their edits. To avoid this, you need to either cancel your changes or knowingly publish your own version.",
19429
19439
  "editor.record.form.field.abstract": "Abstract",
19430
19440
  "editor.record.form.field.constraintsShortcuts": "",
19431
19441
  "editor.record.form.field.contacts.noContact": "Please provide at least one point of contact.",
19442
+ "editor.record.form.field.contacts.placeholder": "Choose a contact",
19432
19443
  "editor.record.form.field.contactsForResource.noContact": "Please provide at least one point of contact responsible for the data.",
19444
+ "editor.record.form.field.contactsForResource.placeholder": "Choose a contact",
19433
19445
  "editor.record.form.field.keywords": "Keywords",
19434
19446
  "editor.record.form.field.legalConstraints": "Legal constraint",
19435
19447
  "editor.record.form.field.license": "License",
@@ -19438,12 +19450,12 @@ var en = {
19438
19450
  "editor.record.form.field.onlineResource.confirm": "Confirm",
19439
19451
  "editor.record.form.field.onlineResource.dialogTitle": "Modify the dataset preview",
19440
19452
  "editor.record.form.field.onlineResource.edit.description": "Description",
19441
- "editor.record.form.field.onlineResource.edit.protocol": "Protocol",
19442
19453
  "editor.record.form.field.onlineResource.edit.identifier.error": "Unable to retrieve layers from protocol",
19443
19454
  "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Layer name",
19444
19455
  "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Process name",
19445
19456
  "editor.record.form.field.onlineResource.edit.identifier.select.label": "Select a layer",
19446
19457
  "editor.record.form.field.onlineResource.edit.identifier.submit": "Link to the service",
19458
+ "editor.record.form.field.onlineResource.edit.protocol": "Protocol",
19447
19459
  "editor.record.form.field.onlineResource.edit.title": "Title",
19448
19460
  "editor.record.form.field.onlineResource.fileSize": "{sizeMB}MB",
19449
19461
  "editor.record.form.field.onlineResource.modify": "Modify",
@@ -19451,7 +19463,7 @@ var en = {
19451
19463
  "editor.record.form.field.onlineResource.toggle.service": "Link to a service",
19452
19464
  "editor.record.form.field.onlineResources": "Distribution",
19453
19465
  "editor.record.form.field.otherConstraints": "Other constraint",
19454
- "editor.record.form.field.overviews": "Overviews",
19466
+ "editor.record.form.field.overviews": "Overview",
19455
19467
  "editor.record.form.field.recordUpdated": "Record updated",
19456
19468
  "editor.record.form.field.resourceCreated": "Dataset created",
19457
19469
  "editor.record.form.field.resourceIdentifier": "Identifier",
@@ -19463,6 +19475,9 @@ var en = {
19463
19475
  "editor.record.form.field.title.placeholder": "Enter a title",
19464
19476
  "editor.record.form.field.uniqueIdentifier": "Unique identifier",
19465
19477
  "editor.record.form.field.updateFrequency": "Update frequency",
19478
+ "editor.record.form.keywords.place.placeholder": "Search for place keywords",
19479
+ "editor.record.form.keywords.place.withoutExtent": "This keyword is not associated with any geographical extent",
19480
+ "editor.record.form.keywords.placeholder": "Select a keyword",
19466
19481
  "editor.record.form.license.cc-by": "Creative Commons CC-BY",
19467
19482
  "editor.record.form.license.cc-by-sa": "Creative Commons CC-BY-SA",
19468
19483
  "editor.record.form.license.cc-zero": "Creative Commons CC-0",
@@ -19474,26 +19489,26 @@ var en = {
19474
19489
  "editor.record.form.license.unknown": "Unknown or absent",
19475
19490
  "editor.record.form.page.accessAndContact": "Information for use",
19476
19491
  "editor.record.form.page.description": "Dataset description",
19477
- "editor.record.form.page.ressources": "Resources",
19478
- "editor.record.form.section.about.description": "This section describes the dataset.",
19492
+ "editor.record.form.page.resources": "Resources",
19493
+ "editor.record.form.section.about.description": "This section describes the dataset",
19479
19494
  "editor.record.form.section.about.label": "About the dataset",
19480
19495
  "editor.record.form.section.annexes.description": "Annexes are optional resources. They are attached to the dataset, and help understand the data (manual, etc.).",
19481
19496
  "editor.record.form.section.annexes.label": "Annexes",
19482
- "editor.record.form.section.associatedResources.description": "Point out where the data can be found.",
19497
+ "editor.record.form.section.associatedResources.description": "Point out where the data can be found",
19483
19498
  "editor.record.form.section.associatedResources.label": "Associated resources",
19484
- "editor.record.form.section.classification.description": "Appropriate keywords help users find the dataset.",
19499
+ "editor.record.form.section.classification.description": "Appropriate keywords help users find the dataset",
19485
19500
  "editor.record.form.section.classification.label": "Keywords",
19486
- "editor.record.form.section.dataManagers.description": "The data managers are responsible for the data.",
19501
+ "editor.record.form.section.dataManagers.description": "The data managers are responsible for the data",
19487
19502
  "editor.record.form.section.dataManagers.label": "Data managers",
19488
19503
  "editor.record.form.section.geographicalCoverage.label": "Geographical coverage",
19489
- "editor.record.form.section.metadataPointOfContact.description": "This information concerns the metadata.",
19504
+ "editor.record.form.section.metadataPointOfContact.description": "This information concerns the metadata",
19490
19505
  "editor.record.form.section.metadataPointOfContact.label": "Metadata point of contact",
19491
19506
  "editor.record.form.section.useAndAccessConditions.label": "Use and access conditions",
19492
19507
  "editor.record.form.temporalExtents.addDate": "Time instant",
19493
19508
  "editor.record.form.temporalExtents.addRange": "Time period",
19494
19509
  "editor.record.form.temporalExtents.date": "Date",
19495
19510
  "editor.record.form.temporalExtents.range": "Date range",
19496
- "editor.record.form.updateFrequency.planned": "This dataset is updated regularly.",
19511
+ "editor.record.form.updateFrequency.planned": "This dataset is updated regularly",
19497
19512
  "editor.record.importFromExternalFile.failure.body": "Failure",
19498
19513
  "editor.record.importFromExternalFile.failure.title": "The dataset import failed: ",
19499
19514
  "editor.record.importFromExternalFile.success.body": "Import successful",
@@ -19651,6 +19666,8 @@ var en = {
19651
19666
  "record.metadata.api.form.productTooltip": "",
19652
19667
  "record.metadata.api.form.reset": "Reset",
19653
19668
  "record.metadata.api.form.resetTooltip": "Reset all filters",
19669
+ "record.metadata.api.form.title": "Generate a custom URL",
19670
+ "record.metadata.api.form.title.gpf": "Download data",
19654
19671
  "record.metadata.api.form.type": "Output format",
19655
19672
  "record.metadata.api.form.zoneTitle": "Zone",
19656
19673
  "record.metadata.api.form.zoneTooltip": "Dropdown for selecting a geographic zone",
@@ -19719,6 +19736,7 @@ var en = {
19719
19736
  "record.tab.chart": "Chart",
19720
19737
  "record.tab.data": "Table",
19721
19738
  "record.tab.map": "Map",
19739
+ "record.was.created.time": "created this dataset {time}",
19722
19740
  records: records$5,
19723
19741
  "results.layout.selectOne": "Results layout",
19724
19742
  "results.records.hits.displayedOn": "{displayed, plural, =0{No dataset.} one{1 } other{{displayed} }} {hits, plural, other{displayed on {hits} total.}}",
@@ -19828,7 +19846,8 @@ var es = {
19828
19846
  "dashboard.createRecord": "",
19829
19847
  "dashboard.importRecord": "",
19830
19848
  "dashboard.importRecord.importExternal": "",
19831
- "dashboard.importRecord.importExternalLabel": "",
19849
+ "dashboard.importRecord.importExternal.subtitle": "",
19850
+ "dashboard.importRecord.importExternal.title": "",
19832
19851
  "dashboard.labels.catalog": "Catálogo",
19833
19852
  "dashboard.labels.mySpace": "Mi espacio",
19834
19853
  "dashboard.records.all": "Catálogo",
@@ -19997,8 +20016,7 @@ var es = {
19997
20016
  "downloads.format.unknown": "",
19998
20017
  "downloads.wfs.featuretype.not.found": "",
19999
20018
  dropFile: dropFile$4,
20000
- "editor.form.keywords.placeholder": "",
20001
- "editor.form.placeKeywordWithoutExtent": "",
20019
+ "editor.new.record.title": "",
20002
20020
  "editor.record.delete.confirmation.cancelText": "",
20003
20021
  "editor.record.delete.confirmation.confirmText": "",
20004
20022
  "editor.record.delete.confirmation.message": "",
@@ -20031,7 +20049,9 @@ var es = {
20031
20049
  "editor.record.form.field.abstract": "",
20032
20050
  "editor.record.form.field.constraintsShortcuts": "",
20033
20051
  "editor.record.form.field.contacts.noContact": "",
20052
+ "editor.record.form.field.contacts.placeholder": "",
20034
20053
  "editor.record.form.field.contactsForResource.noContact": "",
20054
+ "editor.record.form.field.contactsForResource.placeholder": "",
20035
20055
  "editor.record.form.field.keywords": "",
20036
20056
  "editor.record.form.field.legalConstraints": "",
20037
20057
  "editor.record.form.field.license": "",
@@ -20040,12 +20060,12 @@ var es = {
20040
20060
  "editor.record.form.field.onlineResource.confirm": "",
20041
20061
  "editor.record.form.field.onlineResource.dialogTitle": "",
20042
20062
  "editor.record.form.field.onlineResource.edit.description": "",
20043
- "editor.record.form.field.onlineResource.edit.protocol": "",
20044
20063
  "editor.record.form.field.onlineResource.edit.identifier.error": "No se pueden recuperar las capas del protocolo",
20045
20064
  "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Nombre de la capa",
20046
20065
  "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Nombre del proceso",
20047
20066
  "editor.record.form.field.onlineResource.edit.identifier.select.label": "Selecciona una capa",
20048
20067
  "editor.record.form.field.onlineResource.edit.identifier.submit": "Enlace al servicio",
20068
+ "editor.record.form.field.onlineResource.edit.protocol": "",
20049
20069
  "editor.record.form.field.onlineResource.edit.title": "",
20050
20070
  "editor.record.form.field.onlineResource.fileSize": "",
20051
20071
  "editor.record.form.field.onlineResource.modify": "",
@@ -20065,6 +20085,9 @@ var es = {
20065
20085
  "editor.record.form.field.title.placeholder": "Introduzca un título",
20066
20086
  "editor.record.form.field.uniqueIdentifier": "",
20067
20087
  "editor.record.form.field.updateFrequency": "",
20088
+ "editor.record.form.keywords.place.placeholder": "",
20089
+ "editor.record.form.keywords.place.withoutExtent": "",
20090
+ "editor.record.form.keywords.placeholder": "",
20068
20091
  "editor.record.form.license.cc-by": "",
20069
20092
  "editor.record.form.license.cc-by-sa": "",
20070
20093
  "editor.record.form.license.cc-zero": "",
@@ -20076,7 +20099,7 @@ var es = {
20076
20099
  "editor.record.form.license.unknown": "",
20077
20100
  "editor.record.form.page.accessAndContact": "",
20078
20101
  "editor.record.form.page.description": "",
20079
- "editor.record.form.page.ressources": "",
20102
+ "editor.record.form.page.resources": "",
20080
20103
  "editor.record.form.section.about.description": "",
20081
20104
  "editor.record.form.section.about.label": "",
20082
20105
  "editor.record.form.section.annexes.description": "",
@@ -20253,6 +20276,8 @@ var es = {
20253
20276
  "record.metadata.api.form.productTooltip": "",
20254
20277
  "record.metadata.api.form.reset": "",
20255
20278
  "record.metadata.api.form.resetTooltip": "",
20279
+ "record.metadata.api.form.title": "",
20280
+ "record.metadata.api.form.title.gpf": "",
20256
20281
  "record.metadata.api.form.type": "",
20257
20282
  "record.metadata.api.form.zoneTitle": "",
20258
20283
  "record.metadata.api.form.zoneTooltip": "",
@@ -20321,6 +20346,7 @@ var es = {
20321
20346
  "record.tab.chart": "",
20322
20347
  "record.tab.data": "",
20323
20348
  "record.tab.map": "",
20349
+ "record.was.created.time": "",
20324
20350
  records: records$4,
20325
20351
  "results.layout.selectOne": "",
20326
20352
  "results.records.hits.displayedOn": "",
@@ -20430,7 +20456,8 @@ var fr = {
20430
20456
  "dashboard.createRecord": "Nouveau jeu de données",
20431
20457
  "dashboard.importRecord": "Importer",
20432
20458
  "dashboard.importRecord.importExternal": "Importer un jeu de données externe",
20433
- "dashboard.importRecord.importExternalLabel": "URL du jeu de données externe",
20459
+ "dashboard.importRecord.importExternal.subtitle": "(lien vers un fichier XML)",
20460
+ "dashboard.importRecord.importExternal.title": "URL du jeu de données externe",
20434
20461
  "dashboard.labels.catalog": "Catalogue",
20435
20462
  "dashboard.labels.mySpace": "Mon espace",
20436
20463
  "dashboard.records.all": "Jeux de données",
@@ -20599,8 +20626,7 @@ var fr = {
20599
20626
  "downloads.format.unknown": "inconnu",
20600
20627
  "downloads.wfs.featuretype.not.found": "La couche n'a pas été trouvée",
20601
20628
  dropFile: dropFile$3,
20602
- "editor.form.keywords.placeholder": "Sélectionnez un mot-clé",
20603
- "editor.form.placeKeywordWithoutExtent": "Ce mot-clé n'a pas de localisation géographique associée",
20629
+ "editor.new.record.title": "Mon jeu de données",
20604
20630
  "editor.record.delete.confirmation.cancelText": "Annuler",
20605
20631
  "editor.record.delete.confirmation.confirmText": "Supprimer",
20606
20632
  "editor.record.delete.confirmation.message": "Êtes-vous sûr de vouloir supprimer ce jeu de données ?",
@@ -20625,15 +20651,17 @@ var fr = {
20625
20651
  "editor.record.form.constraint.header.securityConstraints": "Conditions applicables de type sécurité",
20626
20652
  "editor.record.form.constraint.legalConstraints": "Contraintes légales",
20627
20653
  "editor.record.form.constraint.markdown.placeholder": "Votre texte ici",
20628
- "editor.record.form.constraint.not.applicable": "Aucune condition ne s’applique.",
20629
- "editor.record.form.constraint.not.known": "Les conditions sont inconnues.",
20654
+ "editor.record.form.constraint.not.applicable": "Aucune condition ne s’applique",
20655
+ "editor.record.form.constraint.not.known": "Les conditions sont inconnues",
20630
20656
  "editor.record.form.constraint.otherConstraints": "Autres contraintes",
20631
20657
  "editor.record.form.constraint.securityConstraints": "Contraintes de sécurité",
20632
20658
  "editor.record.form.draft.updateAlert": "Depuis la création de ce brouillon, ce jeu de données a été modifié le { date } par { user }. Publier votre version peut supprimer ses modifications. Pour éviter cela, vous pouvez annuler vos changements, ou publier votre version en connaissance de cause.",
20633
20659
  "editor.record.form.field.abstract": "Résumé",
20634
20660
  "editor.record.form.field.constraintsShortcuts": "",
20635
20661
  "editor.record.form.field.contacts.noContact": "Veuillez renseigner au moins un point de contact.",
20662
+ "editor.record.form.field.contacts.placeholder": "Choisissez un contact",
20636
20663
  "editor.record.form.field.contactsForResource.noContact": "Veuillez renseigner au moins un point de contact responsable de la donnée.",
20664
+ "editor.record.form.field.contactsForResource.placeholder": "Choisissez un contact",
20637
20665
  "editor.record.form.field.keywords": "Mots-clés",
20638
20666
  "editor.record.form.field.legalConstraints": "Contrainte légale",
20639
20667
  "editor.record.form.field.license": "Licence",
@@ -20642,12 +20670,12 @@ var fr = {
20642
20670
  "editor.record.form.field.onlineResource.confirm": "Valider",
20643
20671
  "editor.record.form.field.onlineResource.dialogTitle": "Modifier l'aperçu du jeu de données",
20644
20672
  "editor.record.form.field.onlineResource.edit.description": "Description",
20645
- "editor.record.form.field.onlineResource.edit.protocol": "Protocole",
20646
20673
  "editor.record.form.field.onlineResource.edit.identifier.error": "Impossible de récupérer les couches depuis le protocole",
20647
20674
  "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Nom de la couche",
20648
20675
  "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Nom du processus",
20649
20676
  "editor.record.form.field.onlineResource.edit.identifier.select.label": "Sélectionner une couche",
20650
20677
  "editor.record.form.field.onlineResource.edit.identifier.submit": "Lier le service",
20678
+ "editor.record.form.field.onlineResource.edit.protocol": "Protocole",
20651
20679
  "editor.record.form.field.onlineResource.edit.title": "Titre",
20652
20680
  "editor.record.form.field.onlineResource.fileSize": "{sizeMB} Mo",
20653
20681
  "editor.record.form.field.onlineResource.modify": "Modifier",
@@ -20655,7 +20683,7 @@ var fr = {
20655
20683
  "editor.record.form.field.onlineResource.toggle.service": "Lier un service",
20656
20684
  "editor.record.form.field.onlineResources": "Distribution",
20657
20685
  "editor.record.form.field.otherConstraints": "Contrainte générale",
20658
- "editor.record.form.field.overviews": "Aperçus",
20686
+ "editor.record.form.field.overviews": "Aperçu",
20659
20687
  "editor.record.form.field.recordUpdated": "Date de mise à jour",
20660
20688
  "editor.record.form.field.resourceCreated": "Date de création",
20661
20689
  "editor.record.form.field.resourceIdentifier": "Identifiant",
@@ -20667,6 +20695,9 @@ var fr = {
20667
20695
  "editor.record.form.field.title.placeholder": "Saisir un titre",
20668
20696
  "editor.record.form.field.uniqueIdentifier": "Identifiant unique",
20669
20697
  "editor.record.form.field.updateFrequency": "Fréquence de mise à jour",
20698
+ "editor.record.form.keywords.place.placeholder": "Rechercher une localisation par mot-clé",
20699
+ "editor.record.form.keywords.place.withoutExtent": "Ce mot-clé n'a pas de localisation géographique associée",
20700
+ "editor.record.form.keywords.placeholder": "Sélectionnez un mot-clé",
20670
20701
  "editor.record.form.license.cc-by": "",
20671
20702
  "editor.record.form.license.cc-by-sa": "",
20672
20703
  "editor.record.form.license.cc-zero": "",
@@ -20675,29 +20706,29 @@ var fr = {
20675
20706
  "editor.record.form.license.odbl": "",
20676
20707
  "editor.record.form.license.odc-by": "",
20677
20708
  "editor.record.form.license.pddl": "",
20678
- "editor.record.form.license.unknown": "",
20709
+ "editor.record.form.license.unknown": "Inconnue ou absente",
20679
20710
  "editor.record.form.page.accessAndContact": "Informations pour l'utilisation",
20680
20711
  "editor.record.form.page.description": "Description du jeu de données",
20681
- "editor.record.form.page.ressources": "Ressources",
20682
- "editor.record.form.section.about.description": "Ces informations concernent le jeu de données.",
20712
+ "editor.record.form.page.resources": "Ressources",
20713
+ "editor.record.form.section.about.description": "Ces informations concernent le jeu de données",
20683
20714
  "editor.record.form.section.about.label": "À propos du jeu de données",
20684
20715
  "editor.record.form.section.annexes.description": "Les annexes sont des ressources optionnelles. Elles sont attachées au jeu de données, et aident à mieux comprendre la donnée (notice, etc.).",
20685
20716
  "editor.record.form.section.annexes.label": "Annexes",
20686
- "editor.record.form.section.associatedResources.description": "Indiquez où la donnée se trouve.",
20717
+ "editor.record.form.section.associatedResources.description": "Indiquez où la donnée se trouve",
20687
20718
  "editor.record.form.section.associatedResources.label": "Ressources associées",
20688
- "editor.record.form.section.classification.description": "Des mots-clés appropriés aident à trouver le jeu de données.",
20719
+ "editor.record.form.section.classification.description": "Des mots-clés appropriés aident à trouver le jeu de données",
20689
20720
  "editor.record.form.section.classification.label": "Mots-clés",
20690
- "editor.record.form.section.dataManagers.description": "Cette information concerne la donnée.",
20721
+ "editor.record.form.section.dataManagers.description": "Cette information concerne la donnée",
20691
20722
  "editor.record.form.section.dataManagers.label": "Responsables de la donnée",
20692
20723
  "editor.record.form.section.geographicalCoverage.label": "Couverture géographique",
20693
- "editor.record.form.section.metadataPointOfContact.description": "Cette information concerne la métadonnée.",
20724
+ "editor.record.form.section.metadataPointOfContact.description": "Cette information concerne la métadonnée",
20694
20725
  "editor.record.form.section.metadataPointOfContact.label": "Point de contact de la métadonnée",
20695
20726
  "editor.record.form.section.useAndAccessConditions.label": "Conditions d'accès et d'utilisation",
20696
20727
  "editor.record.form.temporalExtents.addDate": "Date déterminée",
20697
20728
  "editor.record.form.temporalExtents.addRange": "Période de temps",
20698
20729
  "editor.record.form.temporalExtents.date": "Date concernée",
20699
20730
  "editor.record.form.temporalExtents.range": "Période concernée",
20700
- "editor.record.form.updateFrequency.planned": "Ce jeu de données est mis à jour régulièrement.",
20731
+ "editor.record.form.updateFrequency.planned": "Ce jeu de données est mis à jour régulièrement",
20701
20732
  "editor.record.importFromExternalFile.failure.body": "Une erreur est survenue pendant l'import du jeu de données : ",
20702
20733
  "editor.record.importFromExternalFile.failure.title": "Erreur",
20703
20734
  "editor.record.importFromExternalFile.success.body": "L'import du jeu de données à été realisé avec succès.",
@@ -20855,6 +20886,8 @@ var fr = {
20855
20886
  "record.metadata.api.form.productTooltip": "",
20856
20887
  "record.metadata.api.form.reset": "Réinitialiser",
20857
20888
  "record.metadata.api.form.resetTooltip": "Réinitialiser tous les filtres",
20889
+ "record.metadata.api.form.title": "Générer une URL personnalisée",
20890
+ "record.metadata.api.form.title.gpf": "Téléchargement de données",
20858
20891
  "record.metadata.api.form.type": "Format en sortie",
20859
20892
  "record.metadata.api.form.zoneTitle": "Zone",
20860
20893
  "record.metadata.api.form.zoneTooltip": "Menu déroulant pour sélectionner une zone géographique",
@@ -20923,6 +20956,7 @@ var fr = {
20923
20956
  "record.tab.chart": "Graphique",
20924
20957
  "record.tab.data": "Tableau",
20925
20958
  "record.tab.map": "Carte",
20959
+ "record.was.created.time": "a créé ce jeu de données {time}",
20926
20960
  records: records$3,
20927
20961
  "results.layout.selectOne": "Affichage des résultats",
20928
20962
  "results.records.hits.displayedOn": "{displayed, plural, =0{Aucun jeu de données} one{1 affiché} other{{displayed} affichés}} {hits, plural, other{sur {hits} au total.}}",
@@ -21032,7 +21066,8 @@ var it = {
21032
21066
  "dashboard.createRecord": "Crea un record",
21033
21067
  "dashboard.importRecord": "Importare",
21034
21068
  "dashboard.importRecord.importExternal": "Importare un dataset esterno",
21035
- "dashboard.importRecord.importExternalLabel": "URL del dataset esterno",
21069
+ "dashboard.importRecord.importExternal.subtitle": "(collegamento a un file XML)",
21070
+ "dashboard.importRecord.importExternal.title": "URL del dataset esterno",
21036
21071
  "dashboard.labels.catalog": "Catalogo",
21037
21072
  "dashboard.labels.mySpace": "Il mio spazio",
21038
21073
  "dashboard.records.all": "Catalogo",
@@ -21201,8 +21236,7 @@ var it = {
21201
21236
  "downloads.format.unknown": "sconosciuto",
21202
21237
  "downloads.wfs.featuretype.not.found": "Il layer non è stato trovato",
21203
21238
  dropFile: dropFile$2,
21204
- "editor.form.keywords.placeholder": "Seleziona una parola chiave",
21205
- "editor.form.placeKeywordWithoutExtent": "Questa parola chiave non ha una posizione geografica associata",
21239
+ "editor.new.record.title": "Il mio dataset",
21206
21240
  "editor.record.delete.confirmation.cancelText": "Annulla",
21207
21241
  "editor.record.delete.confirmation.confirmText": "Elimina",
21208
21242
  "editor.record.delete.confirmation.message": "E sicuro di voler eliminare questo dataset?",
@@ -21212,6 +21246,9 @@ var it = {
21212
21246
  "editor.record.deleteError.title": "Errore durante l'eliminazione",
21213
21247
  "editor.record.deleteSuccess.body": "Il dataset è stato eliminato correttamente",
21214
21248
  "editor.record.deleteSuccess.title": "Eliminazione riuscita",
21249
+ "editor.record.error.back": "",
21250
+ "editor.record.error.explanation": "",
21251
+ "editor.record.error.message": "",
21215
21252
  "editor.record.form.bottomButtons.comeBackLater": "Ritorna più tardi",
21216
21253
  "editor.record.form.bottomButtons.next": "Avanti",
21217
21254
  "editor.record.form.bottomButtons.previous": "Precedente",
@@ -21224,32 +21261,30 @@ var it = {
21224
21261
  "editor.record.form.constraint.header.securityConstraints": "Condizioni di tipo di sicurezza applicabili",
21225
21262
  "editor.record.form.constraint.legalConstraints": "Vincoli legali",
21226
21263
  "editor.record.form.constraint.markdown.placeholder": "Il suo testo qui",
21227
- "editor.record.form.constraint.not.applicable": "Non si applicano condizioni.",
21228
- "editor.record.form.constraint.not.known": "Le condizioni sono sconosciute.",
21264
+ "editor.record.form.constraint.not.applicable": "Non si applicano condizioni",
21265
+ "editor.record.form.constraint.not.known": "Le condizioni sono sconosciute",
21229
21266
  "editor.record.form.constraint.otherConstraints": "Altri vincoli",
21230
21267
  "editor.record.form.constraint.securityConstraints": "Vincoli di sicurezza",
21231
21268
  "editor.record.form.draft.updateAlert": "Da quando è stata creata questa bozza, questo dataset è stato modificato il { date } da { user }. La pubblicazione della sua versione potrebbe rimuovere le loro modifiche. Per evitarlo, puoi annullare le sue modifiche o pubblicare la sua versione consapevolmente.",
21232
21269
  "editor.record.form.field.abstract": "Riassunto",
21233
- "editor.record.error.back": "",
21234
- "editor.record.error.explanation": "",
21235
- "editor.record.error.message": "",
21236
21270
  "editor.record.form.field.constraintsShortcuts": "",
21237
21271
  "editor.record.form.field.contacts.noContact": "Inserisci almeno un punto di contatto.",
21272
+ "editor.record.form.field.contacts.placeholder": "Scegli un contatto",
21238
21273
  "editor.record.form.field.contactsForResource.noContact": "Inserisci almeno un punto di contatto responsabile dei dati.",
21274
+ "editor.record.form.field.contactsForResource.placeholder": "Scegli un contatto",
21239
21275
  "editor.record.form.field.keywords": "Parole chiave",
21240
21276
  "editor.record.form.field.legalConstraints": "Vincolo legale",
21241
21277
  "editor.record.form.field.license": "Licenza",
21242
- "editor.record.form.field.onlineResource.edit.identifier.error": "Impossibile recuperare i livelli dal protocollo",
21243
- "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Nome del livello",
21244
- "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Nome del processo",
21245
- "editor.record.form.field.onlineResource.edit.identifier.select.label": "Seleziona un livello",
21246
- "editor.record.form.field.onlineResource.edit.identifier.submit": "Collegare il servizio",
21247
- "editor.record.form.field.title.placeholder": "Inserisci un titolo",
21248
21278
  "editor.record.form.field.onlineLinkResources": "Risorse allegate",
21249
21279
  "editor.record.form.field.onlineResource.cancel": "Annulla",
21250
21280
  "editor.record.form.field.onlineResource.confirm": "Convalida",
21251
21281
  "editor.record.form.field.onlineResource.dialogTitle": "Modifica anteprima dataset",
21252
21282
  "editor.record.form.field.onlineResource.edit.description": "Descrizione",
21283
+ "editor.record.form.field.onlineResource.edit.identifier.error": "Impossibile recuperare i livelli dal protocollo",
21284
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Nome del livello",
21285
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Nome del processo",
21286
+ "editor.record.form.field.onlineResource.edit.identifier.select.label": "Seleziona un livello",
21287
+ "editor.record.form.field.onlineResource.edit.identifier.submit": "Collegare il servizio",
21253
21288
  "editor.record.form.field.onlineResource.edit.protocol": "Protocollo",
21254
21289
  "editor.record.form.field.onlineResource.edit.title": "Titolo",
21255
21290
  "editor.record.form.field.onlineResource.fileSize": "{sizeMB} MB",
@@ -21258,7 +21293,7 @@ var it = {
21258
21293
  "editor.record.form.field.onlineResource.toggle.service": "Collega un servizio",
21259
21294
  "editor.record.form.field.onlineResources": "Distribuzione",
21260
21295
  "editor.record.form.field.otherConstraints": "Vincolo generale",
21261
- "editor.record.form.field.overviews": "Panoramiche",
21296
+ "editor.record.form.field.overviews": "Panoramica",
21262
21297
  "editor.record.form.field.recordUpdated": "Data di aggiornamento",
21263
21298
  "editor.record.form.field.resourceCreated": "Data di creazione",
21264
21299
  "editor.record.form.field.resourceIdentifier": "Identificatore",
@@ -21267,8 +21302,12 @@ var it = {
21267
21302
  "editor.record.form.field.spatialExtents": "Estensioni spaziali",
21268
21303
  "editor.record.form.field.temporalExtents": "Estensioni temporali",
21269
21304
  "editor.record.form.field.title": "Titolo",
21305
+ "editor.record.form.field.title.placeholder": "Inserisci un titolo",
21270
21306
  "editor.record.form.field.uniqueIdentifier": "Identificatore univoco",
21271
21307
  "editor.record.form.field.updateFrequency": "Frequenza di aggiornamento",
21308
+ "editor.record.form.keywords.place.placeholder": "Cerca una posizione per parola chiave",
21309
+ "editor.record.form.keywords.place.withoutExtent": "Questa parola chiave non ha una posizione geografica associata",
21310
+ "editor.record.form.keywords.placeholder": "Seleziona una parola chiave",
21272
21311
  "editor.record.form.license.cc-by": "",
21273
21312
  "editor.record.form.license.cc-by-sa": "",
21274
21313
  "editor.record.form.license.cc-zero": "",
@@ -21277,29 +21316,29 @@ var it = {
21277
21316
  "editor.record.form.license.odbl": "",
21278
21317
  "editor.record.form.license.odc-by": "",
21279
21318
  "editor.record.form.license.pddl": "",
21280
- "editor.record.form.license.unknown": "",
21319
+ "editor.record.form.license.unknown": "Sconosciuto o assente",
21281
21320
  "editor.record.form.page.accessAndContact": "Informazioni per l'uso",
21282
21321
  "editor.record.form.page.description": "Descrizione del dataset",
21283
- "editor.record.form.page.resources": "Risorse",
21284
- "editor.record.form.section.about.description": "Queste informazioni riguardano il dataset.",
21322
+ "editor.record.form.page.resources": "",
21323
+ "editor.record.form.section.about.description": "Queste informazioni riguardano il dataset",
21285
21324
  "editor.record.form.section.about.label": "Informazioni sul dataset",
21286
21325
  "editor.record.form.section.annexes.description": "Gli allegati sono risorse facoltative. Sono allegati al dataset e aiutano a comprendere meglio i dati (avviso, ecc.).",
21287
21326
  "editor.record.form.section.annexes.label": "Allegati",
21288
- "editor.record.form.section.associatedResources.description": "Indica dove si trovano i dati.",
21327
+ "editor.record.form.section.associatedResources.description": "Indica dove si trovano i dati",
21289
21328
  "editor.record.form.section.associatedResources.label": "Risorse associate",
21290
- "editor.record.form.section.classification.description": "Parole chiave appropriate aiutano a trovare il dataset.",
21329
+ "editor.record.form.section.classification.description": "Parole chiave appropriate aiutano a trovare il dataset",
21291
21330
  "editor.record.form.section.classification.label": "Parole chiave",
21292
- "editor.record.form.section.dataManagers.description": "Queste informazioni riguardano i dati.",
21331
+ "editor.record.form.section.dataManagers.description": "Queste informazioni riguardano i dati",
21293
21332
  "editor.record.form.section.dataManagers.label": "Gestori dei dati",
21294
21333
  "editor.record.form.section.geographicalCoverage.label": "Copertura geografica",
21295
- "editor.record.form.section.metadataPointOfContact.description": "Queste informazioni riguardano i metadati.",
21334
+ "editor.record.form.section.metadataPointOfContact.description": "Queste informazioni riguardano i metadati",
21296
21335
  "editor.record.form.section.metadataPointOfContact.label": "Punto di contatto dei metadati",
21297
21336
  "editor.record.form.section.useAndAccessConditions.label": "Condizioni di accesso e utilizzo",
21298
21337
  "editor.record.form.temporalExtents.addDate": "Data specificata",
21299
21338
  "editor.record.form.temporalExtents.addRange": "Periodo di tempo",
21300
21339
  "editor.record.form.temporalExtents.date": "Data rilevante",
21301
21340
  "editor.record.form.temporalExtents.range": "Periodo interessato",
21302
- "editor.record.form.updateFrequency.planned": "Questi dati dovrebbero essere aggiornati regolarmente.",
21341
+ "editor.record.form.updateFrequency.planned": "Questi dati dovrebbero essere aggiornati regolarmente",
21303
21342
  "editor.record.importFromExternalFile.failure.body": "Ha successo un'errore durante l'importazione del dataset: ",
21304
21343
  "editor.record.importFromExternalFile.failure.title": "Errore",
21305
21344
  "editor.record.importFromExternalFile.success.body": "L'importazione del dataset è riuscita.",
@@ -21307,6 +21346,7 @@ var it = {
21307
21346
  "editor.record.loadError.body": "Impossibile caricare il dataset:",
21308
21347
  "editor.record.loadError.closeMessage": "Capito",
21309
21348
  "editor.record.loadError.title": "Errore durante il caricamento",
21349
+ "editor.record.lock.reason": "",
21310
21350
  "editor.record.onlineResource.protocol.other": "Altro",
21311
21351
  "editor.record.onlineResourceError.body": "Ha successo un'errore durante l'aggiunta della risorsa:",
21312
21352
  "editor.record.onlineResourceError.closeMessage": "Capito",
@@ -21338,9 +21378,6 @@ var it = {
21338
21378
  "editor.record.undo.tooltip.enabled": "Fare clic su questo pulsante per annullare le modifiche apportate a questo dataset",
21339
21379
  "editor.record.upToDate": "Questo dataset è aggiornato",
21340
21380
  "editor.sidebar.logout": "Esci",
21341
- "editor.record.form.page.ressources": "",
21342
- "editor.record.lock.reason": "",
21343
- "editor.record.saveStatus.asDraftOnly": "",
21344
21381
  "editor.sidebar.menu.editor": "",
21345
21382
  "editor.temporary.disabled": "Non ancora implementato",
21346
21383
  "externalviewer.dataset.unnamed": "Layer del datahub",
@@ -21459,6 +21496,8 @@ var it = {
21459
21496
  "record.metadata.api.form.productTooltip": "",
21460
21497
  "record.metadata.api.form.reset": "Reimposta",
21461
21498
  "record.metadata.api.form.resetTooltip": "Reimposta tutti i filtri",
21499
+ "record.metadata.api.form.title": "Genera un URL personalizzata",
21500
+ "record.metadata.api.form.title.gpf": "Scarica i dati",
21462
21501
  "record.metadata.api.form.type": "Formato di output",
21463
21502
  "record.metadata.api.form.zoneTitle": "Zona",
21464
21503
  "record.metadata.api.form.zoneTooltip": "Menu a discesa per selezionare una zona geografica",
@@ -21527,6 +21566,7 @@ var it = {
21527
21566
  "record.tab.chart": "Grafico",
21528
21567
  "record.tab.data": "Tabella",
21529
21568
  "record.tab.map": "Mappa",
21569
+ "record.was.created.time": "ha creato questi dati {time}",
21530
21570
  records: records$2,
21531
21571
  "results.layout.selectOne": "Mostra risultati",
21532
21572
  "results.records.hits.displayedOn": "{displayed, plural, =0{Nessun record} one{1 record visualizzato} other{{displayed} records visualizzati}} {hits, plural, other{su {hits} in totale.}}",
@@ -21636,7 +21676,8 @@ var nl = {
21636
21676
  "dashboard.createRecord": "",
21637
21677
  "dashboard.importRecord": "",
21638
21678
  "dashboard.importRecord.importExternal": "",
21639
- "dashboard.importRecord.importExternalLabel": "",
21679
+ "dashboard.importRecord.importExternal.subtitle": "",
21680
+ "dashboard.importRecord.importExternal.title": "",
21640
21681
  "dashboard.labels.catalog": "Catalogus",
21641
21682
  "dashboard.labels.mySpace": "Mijn ruimte",
21642
21683
  "dashboard.records.all": "Catalogus",
@@ -21805,8 +21846,7 @@ var nl = {
21805
21846
  "downloads.format.unknown": "",
21806
21847
  "downloads.wfs.featuretype.not.found": "",
21807
21848
  dropFile: dropFile$1,
21808
- "editor.form.keywords.placeholder": "",
21809
- "editor.form.placeKeywordWithoutExtent": "",
21849
+ "editor.new.record.title": "",
21810
21850
  "editor.record.delete.confirmation.cancelText": "",
21811
21851
  "editor.record.delete.confirmation.confirmText": "",
21812
21852
  "editor.record.delete.confirmation.message": "",
@@ -21839,7 +21879,9 @@ var nl = {
21839
21879
  "editor.record.form.field.abstract": "",
21840
21880
  "editor.record.form.field.constraintsShortcuts": "",
21841
21881
  "editor.record.form.field.contacts.noContact": "",
21882
+ "editor.record.form.field.contacts.placeholder": "",
21842
21883
  "editor.record.form.field.contactsForResource.noContact": "",
21884
+ "editor.record.form.field.contactsForResource.placeholder": "",
21843
21885
  "editor.record.form.field.keywords": "",
21844
21886
  "editor.record.form.field.legalConstraints": "",
21845
21887
  "editor.record.form.field.license": "",
@@ -21848,12 +21890,12 @@ var nl = {
21848
21890
  "editor.record.form.field.onlineResource.confirm": "",
21849
21891
  "editor.record.form.field.onlineResource.dialogTitle": "",
21850
21892
  "editor.record.form.field.onlineResource.edit.description": "",
21851
- "editor.record.form.field.onlineResource.edit.protocol": "",
21852
21893
  "editor.record.form.field.onlineResource.edit.identifier.error": "Kan lagen niet ophalen van het protocol",
21853
21894
  "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Laagnaam",
21854
21895
  "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Procesnaam",
21855
21896
  "editor.record.form.field.onlineResource.edit.identifier.select.label": "Selecteer een laag",
21856
21897
  "editor.record.form.field.onlineResource.edit.identifier.submit": "Link naar de dienst",
21898
+ "editor.record.form.field.onlineResource.edit.protocol": "",
21857
21899
  "editor.record.form.field.onlineResource.edit.title": "",
21858
21900
  "editor.record.form.field.onlineResource.fileSize": "",
21859
21901
  "editor.record.form.field.onlineResource.modify": "",
@@ -21873,6 +21915,9 @@ var nl = {
21873
21915
  "editor.record.form.field.title.placeholder": "Voer een titel in",
21874
21916
  "editor.record.form.field.uniqueIdentifier": "",
21875
21917
  "editor.record.form.field.updateFrequency": "",
21918
+ "editor.record.form.keywords.place.placeholder": "",
21919
+ "editor.record.form.keywords.place.withoutExtent": "",
21920
+ "editor.record.form.keywords.placeholder": "",
21876
21921
  "editor.record.form.license.cc-by": "",
21877
21922
  "editor.record.form.license.cc-by-sa": "",
21878
21923
  "editor.record.form.license.cc-zero": "",
@@ -21884,7 +21929,7 @@ var nl = {
21884
21929
  "editor.record.form.license.unknown": "",
21885
21930
  "editor.record.form.page.accessAndContact": "",
21886
21931
  "editor.record.form.page.description": "",
21887
- "editor.record.form.page.ressources": "",
21932
+ "editor.record.form.page.resources": "",
21888
21933
  "editor.record.form.section.about.description": "",
21889
21934
  "editor.record.form.section.about.label": "",
21890
21935
  "editor.record.form.section.annexes.description": "",
@@ -22061,6 +22106,8 @@ var nl = {
22061
22106
  "record.metadata.api.form.productTooltip": "",
22062
22107
  "record.metadata.api.form.reset": "",
22063
22108
  "record.metadata.api.form.resetTooltip": "",
22109
+ "record.metadata.api.form.title": "",
22110
+ "record.metadata.api.form.title.gpf": "",
22064
22111
  "record.metadata.api.form.type": "",
22065
22112
  "record.metadata.api.form.zoneTitle": "",
22066
22113
  "record.metadata.api.form.zoneTooltip": "",
@@ -22129,6 +22176,7 @@ var nl = {
22129
22176
  "record.tab.chart": "",
22130
22177
  "record.tab.data": "",
22131
22178
  "record.tab.map": "",
22179
+ "record.was.created.time": "",
22132
22180
  records: records$1,
22133
22181
  "results.layout.selectOne": "",
22134
22182
  "results.records.hits.displayedOn": "",
@@ -22238,7 +22286,8 @@ var pt = {
22238
22286
  "dashboard.createRecord": "",
22239
22287
  "dashboard.importRecord": "",
22240
22288
  "dashboard.importRecord.importExternal": "",
22241
- "dashboard.importRecord.importExternalLabel": "",
22289
+ "dashboard.importRecord.importExternal.subtitle": "",
22290
+ "dashboard.importRecord.importExternal.title": "",
22242
22291
  "dashboard.labels.catalog": "Catálogo",
22243
22292
  "dashboard.labels.mySpace": "Meu espaço",
22244
22293
  "dashboard.records.all": "Catálogo",
@@ -22407,8 +22456,7 @@ var pt = {
22407
22456
  "downloads.format.unknown": "",
22408
22457
  "downloads.wfs.featuretype.not.found": "",
22409
22458
  dropFile: dropFile,
22410
- "editor.form.keywords.placeholder": "",
22411
- "editor.form.placeKeywordWithoutExtent": "",
22459
+ "editor.new.record.title": "",
22412
22460
  "editor.record.delete.confirmation.cancelText": "",
22413
22461
  "editor.record.delete.confirmation.confirmText": "",
22414
22462
  "editor.record.delete.confirmation.message": "",
@@ -22441,7 +22489,9 @@ var pt = {
22441
22489
  "editor.record.form.field.abstract": "",
22442
22490
  "editor.record.form.field.constraintsShortcuts": "",
22443
22491
  "editor.record.form.field.contacts.noContact": "",
22492
+ "editor.record.form.field.contacts.placeholder": "",
22444
22493
  "editor.record.form.field.contactsForResource.noContact": "",
22494
+ "editor.record.form.field.contactsForResource.placeholder": "",
22445
22495
  "editor.record.form.field.keywords": "",
22446
22496
  "editor.record.form.field.legalConstraints": "",
22447
22497
  "editor.record.form.field.license": "",
@@ -22450,12 +22500,12 @@ var pt = {
22450
22500
  "editor.record.form.field.onlineResource.confirm": "",
22451
22501
  "editor.record.form.field.onlineResource.dialogTitle": "",
22452
22502
  "editor.record.form.field.onlineResource.edit.description": "",
22453
- "editor.record.form.field.onlineResource.edit.protocol": "",
22454
22503
  "editor.record.form.field.onlineResource.edit.identifier.error": "Não é possível recuperar camadas do protocolo",
22455
22504
  "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Nome da camada",
22456
22505
  "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Nome do processo",
22457
22506
  "editor.record.form.field.onlineResource.edit.identifier.select.label": "Selecione uma camada",
22458
22507
  "editor.record.form.field.onlineResource.edit.identifier.submit": "Link para o serviço",
22508
+ "editor.record.form.field.onlineResource.edit.protocol": "",
22459
22509
  "editor.record.form.field.onlineResource.edit.title": "",
22460
22510
  "editor.record.form.field.onlineResource.fileSize": "",
22461
22511
  "editor.record.form.field.onlineResource.modify": "",
@@ -22475,6 +22525,9 @@ var pt = {
22475
22525
  "editor.record.form.field.title.placeholder": "Insira um título",
22476
22526
  "editor.record.form.field.uniqueIdentifier": "",
22477
22527
  "editor.record.form.field.updateFrequency": "",
22528
+ "editor.record.form.keywords.place.placeholder": "",
22529
+ "editor.record.form.keywords.place.withoutExtent": "",
22530
+ "editor.record.form.keywords.placeholder": "",
22478
22531
  "editor.record.form.license.cc-by": "",
22479
22532
  "editor.record.form.license.cc-by-sa": "",
22480
22533
  "editor.record.form.license.cc-zero": "",
@@ -22486,7 +22539,7 @@ var pt = {
22486
22539
  "editor.record.form.license.unknown": "",
22487
22540
  "editor.record.form.page.accessAndContact": "",
22488
22541
  "editor.record.form.page.description": "",
22489
- "editor.record.form.page.ressources": "",
22542
+ "editor.record.form.page.resources": "",
22490
22543
  "editor.record.form.section.about.description": "",
22491
22544
  "editor.record.form.section.about.label": "",
22492
22545
  "editor.record.form.section.annexes.description": "",
@@ -22663,6 +22716,8 @@ var pt = {
22663
22716
  "record.metadata.api.form.productTooltip": "",
22664
22717
  "record.metadata.api.form.reset": "",
22665
22718
  "record.metadata.api.form.resetTooltip": "",
22719
+ "record.metadata.api.form.title": "",
22720
+ "record.metadata.api.form.title.gpf": "",
22666
22721
  "record.metadata.api.form.type": "",
22667
22722
  "record.metadata.api.form.zoneTitle": "",
22668
22723
  "record.metadata.api.form.zoneTooltip": "",
@@ -22731,6 +22786,7 @@ var pt = {
22731
22786
  "record.tab.chart": "",
22732
22787
  "record.tab.data": "",
22733
22788
  "record.tab.map": "",
22789
+ "record.was.created.time": "",
22734
22790
  records: records,
22735
22791
  "results.layout.selectOne": "",
22736
22792
  "results.records.hits.displayedOn": "",
@@ -28842,6 +28898,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
28842
28898
  type: Input
28843
28899
  }] } });
28844
28900
 
28901
+ marker('record.was.created.time');
28845
28902
  class RecordPreviewFeedComponent extends RecordPreviewComponent {
28846
28903
  constructor(elementRef, translate) {
28847
28904
  super(elementRef);
@@ -30499,7 +30556,7 @@ class ResultsTableComponent {
30499
30556
  this.recordsSelectedChange.emit([[record], selected]);
30500
30557
  }
30501
30558
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResultsTableComponent, deps: [{ token: i1$8.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
30502
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", inputs: { records: "records", selectedRecordsIdentifiers: "selectedRecordsIdentifiers", sortOrder: "sortOrder", hasDraft: "hasDraft", canDuplicate: "canDuplicate", canDelete: "canDelete", isDraftPage: "isDraftPage", isDuplicating: "isDuplicating" }, outputs: { sortByChange: "sortByChange", recordClick: "recordClick", duplicateRecord: "duplicateRecord", deleteRecord: "deleteRecord", recordsSelectedChange: "recordsSelectedChange" }, providers: [provideIcons({ iconoirUser, iconoirLock, matMoreVert })], viewQueries: [{ propertyName: "actionMenuButtons", predicate: ["actionMenuButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records\"\n [isDraftPage]=\"isDraftPage\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'3rem'\">\n <ng-template #cell let-item let-i=\"index\">\n <ng-icon\n name=\"iconoirLock\"\n class=\"text-purple\"\n *ngIf=\"!item.extras?.edit && !isDraftPage\"\n ></ng-icon>\n <gn-ui-checkbox\n *ngIf=\"item.extras?.edit || isDraftPage\"\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [grow]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full font-semibold\">\n <span data-cy=\"resultItemTitle\" class=\"overflow-hidden text-ellipsis\">{{\n item.title\n }}</span>\n <gn-ui-badge\n *ngIf=\"hasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.2em 0.6em'\"\n [style.--gn-ui-badge-text-size]=\"'12px'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'9rem'\">\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2 font-medium\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0 text-xs\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'9rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.user</span>\n </ng-template>\n <ng-template #cell let-item>\n <ng-icon name=\"iconoirUser\" size=\"16px\"></ng-icon>\n <span data-cy=\"ownerInfo\" class=\"text-xs\">{{\n formatUserInfo(item.extras?.ownerInfo)\n }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'6rem'\">\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n <span class=\"text-xs\">\n {{\n (item.extras?.['isPublishedToAll']\n ? 'record.metadata.status.published'\n : 'record.metadata.status.notPublished'\n ) | translate\n }}</span\n >\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'8rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.changeDate</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex text-left w-full text-xs\">\n {{\n item.extras?.['isPublishedToAll']\n ? dateToString(item.recordUpdated)\n : '-'\n }}\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-button\n cdkOverlayOrigin\n #actionMenuButton\n (buttonClick)=\"openActionMenu(item, template)\"\n type=\"light\"\n data-test=\"record-menu-button\"\n [disabled]=\"!item.extras?.edit && !isDraftPage\"\n >\n <ng-icon\n [ngClass]=\"{\n 'text-purple-light': !item.extras?.edit && !isDraftPage,\n }\"\n name=\"matMoreVert\"\n ></ng-icon>\n </gn-ui-button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDuplicate]=\"canDuplicate(item) && !isDuplicating\"\n [canDelete]=\"canDelete(item)\"\n (duplicate)=\"handleDuplicate(item)\"\n (delete)=\"handleDelete(item)\"\n (closeActionMenu)=\"closeActionMenu()\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: InteractiveTableComponent, selector: "gn-ui-interactive-table", inputs: ["items", "isDraftPage"], outputs: ["itemClick"] }, { kind: "component", type: InteractiveTableColumnComponent, selector: "gn-ui-interactive-table-column", inputs: ["grow", "width", "sortable", "activeSort"], outputs: ["sortChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ActionMenuComponent, selector: "gn-ui-action-menu", inputs: ["canDuplicate", "canDelete"], outputs: ["duplicate", "delete", "closeActionMenu"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }] }); }
30559
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", inputs: { records: "records", selectedRecordsIdentifiers: "selectedRecordsIdentifiers", sortOrder: "sortOrder", hasDraft: "hasDraft", canDuplicate: "canDuplicate", canDelete: "canDelete", isDraftPage: "isDraftPage", isDuplicating: "isDuplicating" }, outputs: { sortByChange: "sortByChange", recordClick: "recordClick", duplicateRecord: "duplicateRecord", deleteRecord: "deleteRecord", recordsSelectedChange: "recordsSelectedChange" }, providers: [provideIcons({ iconoirUser, iconoirLock, matMoreVert })], viewQueries: [{ propertyName: "actionMenuButtons", predicate: ["actionMenuButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records\"\n [isDraftPage]=\"isDraftPage\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'3rem'\">\n <ng-template #cell let-item let-i=\"index\">\n <ng-icon\n name=\"iconoirLock\"\n class=\"text-purple\"\n *ngIf=\"!item.extras?.edit && !isDraftPage\"\n ></ng-icon>\n <gn-ui-checkbox\n *ngIf=\"item.extras?.edit || isDraftPage\"\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [grow]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full font-semibold\">\n <span data-cy=\"resultItemTitle\" class=\"overflow-hidden text-ellipsis\">{{\n item.title\n }}</span>\n <gn-ui-badge\n *ngIf=\"hasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.2em 0.6em'\"\n [style.--gn-ui-badge-text-size]=\"'12px'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'9rem'\">\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2 font-medium\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0 text-xs\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'12rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.user</span>\n </ng-template>\n <ng-template #cell let-item>\n <ng-icon name=\"iconoirUser\" size=\"16px\"></ng-icon>\n <span data-cy=\"ownerInfo\" class=\"text-xs\">{{\n formatUserInfo(item.extras?.ownerInfo)\n }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'6rem'\">\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n <span class=\"text-xs\">\n {{\n (item.extras?.['isPublishedToAll']\n ? 'record.metadata.status.published'\n : 'record.metadata.status.notPublished'\n ) | translate\n }}</span\n >\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'8rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.changeDate</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex text-left w-full text-xs\">\n {{\n item.extras?.['isPublishedToAll']\n ? dateToString(item.recordUpdated)\n : '-'\n }}\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-button\n cdkOverlayOrigin\n #actionMenuButton\n (buttonClick)=\"openActionMenu(item, template)\"\n type=\"light\"\n data-test=\"record-menu-button\"\n [disabled]=\"!item.extras?.edit && !isDraftPage\"\n >\n <ng-icon\n [ngClass]=\"{\n 'text-purple-light': !item.extras?.edit && !isDraftPage,\n }\"\n name=\"matMoreVert\"\n ></ng-icon>\n </gn-ui-button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDuplicate]=\"canDuplicate(item) && !isDuplicating\"\n [canDelete]=\"canDelete(item)\"\n (duplicate)=\"handleDuplicate(item)\"\n (delete)=\"handleDelete(item)\"\n (closeActionMenu)=\"closeActionMenu()\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: InteractiveTableComponent, selector: "gn-ui-interactive-table", inputs: ["items", "isDraftPage"], outputs: ["itemClick"] }, { kind: "component", type: InteractiveTableColumnComponent, selector: "gn-ui-interactive-table-column", inputs: ["grow", "width", "sortable", "activeSort"], outputs: ["sortChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ActionMenuComponent, selector: "gn-ui-action-menu", inputs: ["canDuplicate", "canDelete"], outputs: ["duplicate", "delete", "closeActionMenu"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }] }); }
30503
30560
  }
30504
30561
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResultsTableComponent, decorators: [{
30505
30562
  type: Component,
@@ -30513,7 +30570,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30513
30570
  ActionMenuComponent,
30514
30571
  NgIconComponent,
30515
30572
  CdkOverlayOrigin,
30516
- ], providers: [provideIcons({ iconoirUser, iconoirLock, matMoreVert })], template: "<gn-ui-interactive-table\n [items]=\"records\"\n [isDraftPage]=\"isDraftPage\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'3rem'\">\n <ng-template #cell let-item let-i=\"index\">\n <ng-icon\n name=\"iconoirLock\"\n class=\"text-purple\"\n *ngIf=\"!item.extras?.edit && !isDraftPage\"\n ></ng-icon>\n <gn-ui-checkbox\n *ngIf=\"item.extras?.edit || isDraftPage\"\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [grow]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full font-semibold\">\n <span data-cy=\"resultItemTitle\" class=\"overflow-hidden text-ellipsis\">{{\n item.title\n }}</span>\n <gn-ui-badge\n *ngIf=\"hasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.2em 0.6em'\"\n [style.--gn-ui-badge-text-size]=\"'12px'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'9rem'\">\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2 font-medium\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0 text-xs\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'9rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.user</span>\n </ng-template>\n <ng-template #cell let-item>\n <ng-icon name=\"iconoirUser\" size=\"16px\"></ng-icon>\n <span data-cy=\"ownerInfo\" class=\"text-xs\">{{\n formatUserInfo(item.extras?.ownerInfo)\n }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'6rem'\">\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n <span class=\"text-xs\">\n {{\n (item.extras?.['isPublishedToAll']\n ? 'record.metadata.status.published'\n : 'record.metadata.status.notPublished'\n ) | translate\n }}</span\n >\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'8rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.changeDate</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex text-left w-full text-xs\">\n {{\n item.extras?.['isPublishedToAll']\n ? dateToString(item.recordUpdated)\n : '-'\n }}\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-button\n cdkOverlayOrigin\n #actionMenuButton\n (buttonClick)=\"openActionMenu(item, template)\"\n type=\"light\"\n data-test=\"record-menu-button\"\n [disabled]=\"!item.extras?.edit && !isDraftPage\"\n >\n <ng-icon\n [ngClass]=\"{\n 'text-purple-light': !item.extras?.edit && !isDraftPage,\n }\"\n name=\"matMoreVert\"\n ></ng-icon>\n </gn-ui-button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDuplicate]=\"canDuplicate(item) && !isDuplicating\"\n [canDelete]=\"canDelete(item)\"\n (duplicate)=\"handleDuplicate(item)\"\n (delete)=\"handleDelete(item)\"\n (closeActionMenu)=\"closeActionMenu()\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n" }]
30573
+ ], providers: [provideIcons({ iconoirUser, iconoirLock, matMoreVert })], template: "<gn-ui-interactive-table\n [items]=\"records\"\n [isDraftPage]=\"isDraftPage\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'3rem'\">\n <ng-template #cell let-item let-i=\"index\">\n <ng-icon\n name=\"iconoirLock\"\n class=\"text-purple\"\n *ngIf=\"!item.extras?.edit && !isDraftPage\"\n ></ng-icon>\n <gn-ui-checkbox\n *ngIf=\"item.extras?.edit || isDraftPage\"\n [checked]=\"isChecked(item)\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [grow]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword')\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex flex-row items-center gap-2 max-w-full font-semibold\">\n <span data-cy=\"resultItemTitle\" class=\"overflow-hidden text-ellipsis\">{{\n item.title\n }}</span>\n <gn-ui-badge\n *ngIf=\"hasDraft(item)\"\n [style.--gn-ui-badge-padding]=\"'0.2em 0.6em'\"\n [style.--gn-ui-badge-text-size]=\"'12px'\"\n [style.--gn-ui-badge-text-color]=\"'#3d2006'\"\n [style.--gn-ui-badge-background-color]=\"'#ffbc7b'\"\n [style.--gn-ui-badge-rounded]=\"'4px'\"\n >\n <span translate>dashboard.records.hasDraft</span>\n </gn-ui-badge>\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'9rem'\">\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2 font-medium\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-xs text-gray-900 px-2 shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"shrink-0 text-xs\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'12rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner')\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.user</span>\n </ng-template>\n <ng-template #cell let-item>\n <ng-icon name=\"iconoirUser\" size=\"16px\"></ng-icon>\n <span data-cy=\"ownerInfo\" class=\"text-xs\">{{\n formatUserInfo(item.extras?.ownerInfo)\n }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column [width]=\"'6rem'\">\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n <span class=\"text-xs\">\n {{\n (item.extras?.['isPublishedToAll']\n ? 'record.metadata.status.published'\n : 'record.metadata.status.notPublished'\n ) | translate\n }}</span\n >\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [width]=\"'8rem'\"\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate')\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>search.filters.changeDate</span>\n </ng-template>\n <ng-template #cell let-item>\n <div class=\"flex text-left w-full text-xs\">\n {{\n item.extras?.['isPublishedToAll']\n ? dateToString(item.recordUpdated)\n : '-'\n }}\n </div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- ACTION MENU COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header> </ng-template>\n <ng-template #cell let-item>\n <gn-ui-button\n cdkOverlayOrigin\n #actionMenuButton\n (buttonClick)=\"openActionMenu(item, template)\"\n type=\"light\"\n data-test=\"record-menu-button\"\n [disabled]=\"!item.extras?.edit && !isDraftPage\"\n >\n <ng-icon\n [ngClass]=\"{\n 'text-purple-light': !item.extras?.edit && !isDraftPage,\n }\"\n name=\"matMoreVert\"\n ></ng-icon>\n </gn-ui-button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDuplicate]=\"canDuplicate(item) && !isDuplicating\"\n [canDelete]=\"canDelete(item)\"\n (duplicate)=\"handleDuplicate(item)\"\n (delete)=\"handleDelete(item)\"\n (closeActionMenu)=\"closeActionMenu()\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n" }]
30517
30574
  }], ctorParameters: () => [{ type: i1$8.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }], propDecorators: { records: [{
30518
30575
  type: Input
30519
30576
  }], selectedRecordsIdentifiers: [{
@@ -35072,6 +35129,7 @@ const SupportedTypes = [
35072
35129
  'geojson',
35073
35130
  'excel',
35074
35131
  'gml',
35132
+ 'wfs',
35075
35133
  ];
35076
35134
  const AllMimeTypes = {
35077
35135
  csv: CsvMimeTypes,
@@ -35085,7 +35143,8 @@ function parseHeaders(httpHeaders) {
35085
35143
  const result = {};
35086
35144
  if (httpHeaders.has('Content-Type')) {
35087
35145
  result.mimeType = httpHeaders.get('Content-Type').split(';')[0];
35088
- const supported = SupportedTypes.filter((type) => AllMimeTypes[type].indexOf(result.mimeType) > -1)[0] || null;
35146
+ const supported = SupportedTypes.filter((type) => type !== 'wfs') // Ignore wfs type as it is not a file type
35147
+ .filter((type) => AllMimeTypes[type].indexOf(result.mimeType) > -1)[0] || null;
35089
35148
  if (supported !== null)
35090
35149
  result.supportedType = supported;
35091
35150
  }
@@ -35618,6 +35677,80 @@ class GmlReader extends BaseFileReader {
35618
35677
  }
35619
35678
  }
35620
35679
 
35680
+ class WfsReader extends BaseReader {
35681
+ constructor(url, wfsEndpoint, featureTypeName) {
35682
+ super(url);
35683
+ this.endpoint = wfsEndpoint;
35684
+ this.featureTypeName = featureTypeName;
35685
+ this.version = this.endpoint.getVersion();
35686
+ }
35687
+ get properties() {
35688
+ return this.getData().then((result) => result.properties);
35689
+ }
35690
+ get info() {
35691
+ return this.endpoint.getFeatureTypeFull(this.featureTypeName).then((result) => ({
35692
+ itemsCount: result.objectCount,
35693
+ }));
35694
+ }
35695
+ static async createReader(wfsUrlEndpoint, featureTypeName) {
35696
+ const wfsEndpoint = await new WfsEndpoint(wfsUrlEndpoint).isReady();
35697
+ const featureTypes = wfsEndpoint.getFeatureTypes();
35698
+ const featureType = wfsEndpoint.getFeatureTypeSummary(featureTypes.length === 1 && !featureTypeName
35699
+ ? featureTypes[0].name
35700
+ : featureTypeName);
35701
+ if (!featureType) {
35702
+ throw new Error('wfs.featuretype.notfound');
35703
+ }
35704
+ if (wfsEndpoint.supportsStartIndex()) {
35705
+ return new WfsReader(wfsUrlEndpoint, wfsEndpoint, featureType.name);
35706
+ }
35707
+ else if (wfsEndpoint.supportsJson(featureType.name)) {
35708
+ return new GeojsonReader(wfsEndpoint.getFeatureUrl(featureType.name, {
35709
+ asJson: true,
35710
+ outputCrs: 'EPSG:4326',
35711
+ }));
35712
+ }
35713
+ else {
35714
+ if (featureType.outputFormats.find((f) => f.toLowerCase().includes('gml')) &&
35715
+ (featureType.defaultCrs === 'EPSG:4326' ||
35716
+ featureType.otherCrs?.includes('EPSG:4326'))) {
35717
+ return new GmlReader(wfsEndpoint.getFeatureUrl(featureType.name, {
35718
+ outputFormat: featureType.outputFormats.find((f) => f.toLowerCase().includes('gml')),
35719
+ outputCrs: 'EPSG:4326',
35720
+ }), featureType.name, wfsEndpoint.getVersion());
35721
+ }
35722
+ throw new Error('wfs.geojsongml.notsupported');
35723
+ }
35724
+ }
35725
+ getData() {
35726
+ const asJson = this.endpoint.supportsJson(this.featureTypeName);
35727
+ let url = this.endpoint.getFeatureUrl(this.featureTypeName, {
35728
+ ...(this.startIndex !== null && { startIndex: this.startIndex }),
35729
+ ...(this.count !== null && { maxFeatures: this.count }),
35730
+ asJson,
35731
+ outputCrs: 'EPSG:4326',
35732
+ // sortBy: this.sort // TODO: no sort in ogc-client?
35733
+ });
35734
+ if (Array.isArray(this.sort) && this.sort.length > 0) {
35735
+ const finalUrl = new URL(url);
35736
+ const sorts = this.sort
35737
+ .map((fieldSort) => `${fieldSort[1]}+${fieldSort[0] === 'asc' ? 'A' : 'D'}`)
35738
+ .join(',');
35739
+ // Direct update on string url to prevent encoding of +A and +D
35740
+ url = `${url}${finalUrl.search ? '&' : ''}SORTBY=${sorts}`;
35741
+ }
35742
+ return fetchDataAsText(url).then((text) => asJson
35743
+ ? parseGeojson(text)
35744
+ : parseGml(text, this.featureTypeName, this.version));
35745
+ }
35746
+ load() {
35747
+ // Nothing to load for Wfs
35748
+ }
35749
+ async read() {
35750
+ return (await this.getData()).items;
35751
+ }
35752
+ }
35753
+
35621
35754
  async function openDataset(url, typeHint, options) {
35622
35755
  const fileType = await inferDatasetType(url, typeHint);
35623
35756
  let reader;
@@ -35638,6 +35771,9 @@ async function openDataset(url, typeHint, options) {
35638
35771
  case 'gml':
35639
35772
  reader = new GmlReader(url, options.namespace, options.wfsVersion);
35640
35773
  break;
35774
+ case 'wfs':
35775
+ reader = await WfsReader.createReader(url, options.wfsFeatureType);
35776
+ break;
35641
35777
  }
35642
35778
  reader.load();
35643
35779
  return reader;
@@ -35815,19 +35951,9 @@ class DataService {
35815
35951
  }
35816
35952
  getDataset(link) {
35817
35953
  if (link.type === 'service' && link.accessServiceProtocol === 'wfs') {
35818
- return this.getDownloadUrlsFromWfs(link.url.toString(), link.name).pipe(switchMap$1((urls) => {
35819
- if (urls.geojson)
35820
- return openDataset(urls.geojson, 'geojson');
35821
- if (urls.gml)
35822
- return openDataset(urls.gml.featureUrl, 'gml', {
35823
- namespace: urls.gml.namespace,
35824
- wfsVersion: urls.gml.wfsVersion,
35825
- });
35826
- return null;
35827
- }), tap$1((url) => {
35828
- if (url === null) {
35829
- throw new Error('wfs.geojsongml.notsupported');
35830
- }
35954
+ const wfsUrlEndpoint = this.proxy.getProxiedUrl(link.url.toString());
35955
+ return from(openDataset(wfsUrlEndpoint, 'wfs', {
35956
+ wfsFeatureType: link.name,
35831
35957
  }));
35832
35958
  }
35833
35959
  else if (link.type === 'download') {
@@ -37944,6 +38070,8 @@ const RECORD_KEYWORDS_FIELD = {
37944
38070
  model: 'keywords',
37945
38071
  formFieldConfig: {},
37946
38072
  };
38073
+ // keeping track of the label to not lose existing translation
38074
+ marker('editor.record.form.field.keywords');
37947
38075
  const RECORD_RESOURCE_CREATED_FIELD = {
37948
38076
  model: 'resourceCreated',
37949
38077
  formFieldConfig: {
@@ -38024,16 +38152,22 @@ const RECORD_SPATIAL_EXTENTS_FIELD = {
38024
38152
  model: 'spatialExtents',
38025
38153
  formFieldConfig: {},
38026
38154
  };
38155
+ // keeping track of the label to not lose existing translation
38156
+ marker('editor.record.form.field.spatialExtents');
38027
38157
  const RECORD_ONLINE_RESOURCES = {
38028
38158
  model: 'onlineResources',
38029
38159
  modelSpecifier: 'onlineResourceType:!link',
38030
38160
  formFieldConfig: {},
38031
38161
  };
38162
+ // keeping track of the label to not lose existing translation
38163
+ marker('editor.record.form.field.onlineResources');
38032
38164
  const RECORD_ONLINE_LINK_RESOURCES = {
38033
38165
  model: 'onlineResources',
38034
38166
  modelSpecifier: 'onlineResourceType:link',
38035
38167
  formFieldConfig: {},
38036
38168
  };
38169
+ // keeping track of the label to not lose existing translation
38170
+ marker('editor.record.form.field.onlineLinkResources');
38037
38171
  /************************************************************
38038
38172
  *************** SECTIONS *****************
38039
38173
  ************************************************************
@@ -38122,7 +38256,7 @@ const DEFAULT_CONFIGURATION = {
38122
38256
  ],
38123
38257
  },
38124
38258
  {
38125
- labelKey: marker('editor.record.form.page.ressources'),
38259
+ labelKey: marker('editor.record.form.page.resources'),
38126
38260
  sections: [ASSOCIATED_RESOURCES_SECTION, ANNEXES_SECTION],
38127
38261
  },
38128
38262
  {
@@ -38895,7 +39029,6 @@ class ImportRecordComponent {
38895
39029
  ];
38896
39030
  this.isRecordImportInProgress = false;
38897
39031
  this.sectionDisplayed = 'mainMenu';
38898
- this.externalImportBackLabel = this.translateService.instant('dashboard.importRecord.importExternalLabel');
38899
39032
  }
38900
39033
  displayMainMenu() {
38901
39034
  this.sectionDisplayed = 'mainMenu';
@@ -38942,7 +39075,7 @@ class ImportRecordComponent {
38942
39075
  provideNgIconsConfig({
38943
39076
  size: '1.5em',
38944
39077
  }),
38945
- ], ngImport: i0, template: "<ng-container [ngSwitch]=\"sectionDisplayed\">\n <ng-container *ngSwitchCase=\"'mainMenu'\">\n <div\n data-test=\"importMenuMainSection\"\n class=\"mt-2 border border-gray-100 p-2 flex items-center bg-white shadow-2xl rounded-2xl\"\n >\n <ul class=\"flex flex-col gap-2 w-full\">\n <li *ngFor=\"let menuItem of importMenuItems\">\n <gn-ui-button\n [attr.data-test]=\"menuItem.dataTest\"\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"menuItem.action()\"\n [disabled]=\"menuItem.disabled\"\n [title]=\"\n (menuItem.disabled ? 'editor.temporary.disabled' : '') | translate\n \"\n ><ng-icon [name]=\"menuItem.icon\"></ng-icon\n ><span>{{ menuItem.label }}</span></gn-ui-button\n >\n </li>\n </ul>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'importExternalFile'\">\n <div\n data-test=\"importMenuImportExternalFileSection\"\n class=\"p-6 flex flex-col gap-2 mt-2 border border-gray-100 bg-white shadow-2xl rounded-2xl\"\n >\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-button\n data-test=\"importMenuImportExternalFileSectionBackButton\"\n type=\"light\"\n (buttonClick)=\"displayMainMenu()\"\n >\n <ng-icon name=\"iconoirArrowLeft\"></ng-icon>\n </gn-ui-button>\n <span class=\"font-bold\"> {{ externalImportBackLabel }}</span>\n </div>\n <gn-ui-url-input\n (uploadClick)=\"importRecord($event)\"\n [disabled]=\"isRecordImportInProgress\"\n ></gn-ui-url-input>\n </div>\n </ng-container>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39078
+ ], ngImport: i0, template: "<ng-container [ngSwitch]=\"sectionDisplayed\">\n <ng-container *ngSwitchCase=\"'mainMenu'\">\n <div\n data-test=\"importMenuMainSection\"\n class=\"mt-2 border border-gray-100 p-2 flex items-center bg-white shadow-2xl rounded-2xl\"\n >\n <ul class=\"flex flex-col gap-2 w-full\">\n <li *ngFor=\"let menuItem of importMenuItems\">\n <gn-ui-button\n [attr.data-test]=\"menuItem.dataTest\"\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"menuItem.action()\"\n [disabled]=\"menuItem.disabled\"\n [title]=\"\n (menuItem.disabled ? 'editor.temporary.disabled' : '') | translate\n \"\n ><ng-icon [name]=\"menuItem.icon\"></ng-icon\n ><span>{{ menuItem.label }}</span></gn-ui-button\n >\n </li>\n </ul>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'importExternalFile'\">\n <div\n data-test=\"importMenuImportExternalFileSection\"\n class=\"p-6 flex flex-col gap-2 mt-2 border border-gray-100 bg-white shadow-2xl rounded-2xl\"\n >\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-button\n data-test=\"importMenuImportExternalFileSectionBackButton\"\n type=\"light\"\n (buttonClick)=\"displayMainMenu()\"\n >\n <ng-icon name=\"iconoirArrowLeft\"></ng-icon>\n </gn-ui-button>\n <span class=\"font-bold\" translate\n >dashboard.importRecord.importExternal.title</span\n >\n <span translate>dashboard.importRecord.importExternal.subtitle</span>\n </div>\n <gn-ui-url-input\n (uploadClick)=\"importRecord($event)\"\n [disabled]=\"isRecordImportInProgress\"\n ></gn-ui-url-input>\n </div>\n </ng-container>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
38946
39079
  }
38947
39080
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImportRecordComponent, decorators: [{
38948
39081
  type: Component,
@@ -38962,7 +39095,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
38962
39095
  provideNgIconsConfig({
38963
39096
  size: '1.5em',
38964
39097
  }),
38965
- ], template: "<ng-container [ngSwitch]=\"sectionDisplayed\">\n <ng-container *ngSwitchCase=\"'mainMenu'\">\n <div\n data-test=\"importMenuMainSection\"\n class=\"mt-2 border border-gray-100 p-2 flex items-center bg-white shadow-2xl rounded-2xl\"\n >\n <ul class=\"flex flex-col gap-2 w-full\">\n <li *ngFor=\"let menuItem of importMenuItems\">\n <gn-ui-button\n [attr.data-test]=\"menuItem.dataTest\"\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"menuItem.action()\"\n [disabled]=\"menuItem.disabled\"\n [title]=\"\n (menuItem.disabled ? 'editor.temporary.disabled' : '') | translate\n \"\n ><ng-icon [name]=\"menuItem.icon\"></ng-icon\n ><span>{{ menuItem.label }}</span></gn-ui-button\n >\n </li>\n </ul>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'importExternalFile'\">\n <div\n data-test=\"importMenuImportExternalFileSection\"\n class=\"p-6 flex flex-col gap-2 mt-2 border border-gray-100 bg-white shadow-2xl rounded-2xl\"\n >\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-button\n data-test=\"importMenuImportExternalFileSectionBackButton\"\n type=\"light\"\n (buttonClick)=\"displayMainMenu()\"\n >\n <ng-icon name=\"iconoirArrowLeft\"></ng-icon>\n </gn-ui-button>\n <span class=\"font-bold\"> {{ externalImportBackLabel }}</span>\n </div>\n <gn-ui-url-input\n (uploadClick)=\"importRecord($event)\"\n [disabled]=\"isRecordImportInProgress\"\n ></gn-ui-url-input>\n </div>\n </ng-container>\n</ng-container>\n" }]
39098
+ ], template: "<ng-container [ngSwitch]=\"sectionDisplayed\">\n <ng-container *ngSwitchCase=\"'mainMenu'\">\n <div\n data-test=\"importMenuMainSection\"\n class=\"mt-2 border border-gray-100 p-2 flex items-center bg-white shadow-2xl rounded-2xl\"\n >\n <ul class=\"flex flex-col gap-2 w-full\">\n <li *ngFor=\"let menuItem of importMenuItems\">\n <gn-ui-button\n [attr.data-test]=\"menuItem.dataTest\"\n type=\"light\"\n extraClass=\"flex flex-row items-center gap-2 w-full justify-start\"\n (buttonClick)=\"menuItem.action()\"\n [disabled]=\"menuItem.disabled\"\n [title]=\"\n (menuItem.disabled ? 'editor.temporary.disabled' : '') | translate\n \"\n ><ng-icon [name]=\"menuItem.icon\"></ng-icon\n ><span>{{ menuItem.label }}</span></gn-ui-button\n >\n </li>\n </ul>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'importExternalFile'\">\n <div\n data-test=\"importMenuImportExternalFileSection\"\n class=\"p-6 flex flex-col gap-2 mt-2 border border-gray-100 bg-white shadow-2xl rounded-2xl\"\n >\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-button\n data-test=\"importMenuImportExternalFileSectionBackButton\"\n type=\"light\"\n (buttonClick)=\"displayMainMenu()\"\n >\n <ng-icon name=\"iconoirArrowLeft\"></ng-icon>\n </gn-ui-button>\n <span class=\"font-bold\" translate\n >dashboard.importRecord.importExternal.title</span\n >\n <span translate>dashboard.importRecord.importExternal.subtitle</span>\n </div>\n <gn-ui-url-input\n (uploadClick)=\"importRecord($event)\"\n [disabled]=\"isRecordImportInProgress\"\n ></gn-ui-url-input>\n </div>\n </ng-container>\n</ng-container>\n" }]
38966
39099
  }], ctorParameters: () => [{ type: i1$e.Router }, { type: i2.TranslateService }, { type: i0.ChangeDetectorRef }, { type: NotificationsService }, { type: RecordsRepositoryInterface }], propDecorators: { closeImportMenu: [{
38967
39100
  type: Output
38968
39101
  }] } });
@@ -39008,7 +39141,7 @@ class GenericKeywordsComponent {
39008
39141
  provideIcons({
39009
39142
  matWarningAmberOutline,
39010
39143
  }),
39011
- ], ngImport: i0, template: "<div class=\"flex flex-col gap-4\">\n <gn-ui-autocomplete\n [placeholder]=\"placeholder\"\n [displayWithFn]=\"displayWithFn\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleItemSelection($event)\"\n [preventCompleteOnSelection]=\"false\"\n [minCharacterCount]=\"1\"\n [allowSubmit]=\"false\"\n [clearOnSelection]=\"true\"\n ></gn-ui-autocomplete>\n <div class=\"flex gap-2 flex-wrap\">\n <gn-ui-badge\n *ngFor=\"let keyword of keywords\"\n [removable]=\"true\"\n (badgeRemoveClicked)=\"removeKeyword(keyword)\"\n >{{ keyword.label }}\n\n <ng-icon\n *ngIf=\"isPlaceWithoutExtent(keyword)\"\n [title]=\"'editor.form.placeKeywordWithoutExtent' | translate\"\n class=\"badge-warning\"\n name=\"matWarningAmberOutline\"\n ></ng-icon>\n </gn-ui-badge>\n </div>\n</div>\n", styles: [".badge-warning{font-size:1.4em}\n"], dependencies: [{ kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiWidgetsModule }, { kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39144
+ ], ngImport: i0, template: "<div class=\"flex flex-col gap-4\">\n <gn-ui-autocomplete\n [placeholder]=\"placeholder\"\n [displayWithFn]=\"displayWithFn\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleItemSelection($event)\"\n [preventCompleteOnSelection]=\"false\"\n [minCharacterCount]=\"1\"\n [allowSubmit]=\"false\"\n [clearOnSelection]=\"true\"\n ></gn-ui-autocomplete>\n <div class=\"flex gap-2 flex-wrap\">\n <gn-ui-badge\n *ngFor=\"let keyword of keywords\"\n [removable]=\"true\"\n (badgeRemoveClicked)=\"removeKeyword(keyword)\"\n >{{ keyword.label }}\n\n <ng-icon\n *ngIf=\"isPlaceWithoutExtent(keyword)\"\n [title]=\"'editor.record.form.keywords.place.withoutExtent' | translate\"\n class=\"badge-warning\"\n name=\"matWarningAmberOutline\"\n ></ng-icon>\n </gn-ui-badge>\n </div>\n</div>\n", styles: [".badge-warning{font-size:1.4em}\n"], dependencies: [{ kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiWidgetsModule }, { kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39012
39145
  }
39013
39146
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GenericKeywordsComponent, decorators: [{
39014
39147
  type: Component,
@@ -39024,7 +39157,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39024
39157
  provideIcons({
39025
39158
  matWarningAmberOutline,
39026
39159
  }),
39027
- ], template: "<div class=\"flex flex-col gap-4\">\n <gn-ui-autocomplete\n [placeholder]=\"placeholder\"\n [displayWithFn]=\"displayWithFn\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleItemSelection($event)\"\n [preventCompleteOnSelection]=\"false\"\n [minCharacterCount]=\"1\"\n [allowSubmit]=\"false\"\n [clearOnSelection]=\"true\"\n ></gn-ui-autocomplete>\n <div class=\"flex gap-2 flex-wrap\">\n <gn-ui-badge\n *ngFor=\"let keyword of keywords\"\n [removable]=\"true\"\n (badgeRemoveClicked)=\"removeKeyword(keyword)\"\n >{{ keyword.label }}\n\n <ng-icon\n *ngIf=\"isPlaceWithoutExtent(keyword)\"\n [title]=\"'editor.form.placeKeywordWithoutExtent' | translate\"\n class=\"badge-warning\"\n name=\"matWarningAmberOutline\"\n ></ng-icon>\n </gn-ui-badge>\n </div>\n</div>\n", styles: [".badge-warning{font-size:1.4em}\n"] }]
39160
+ ], template: "<div class=\"flex flex-col gap-4\">\n <gn-ui-autocomplete\n [placeholder]=\"placeholder\"\n [displayWithFn]=\"displayWithFn\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleItemSelection($event)\"\n [preventCompleteOnSelection]=\"false\"\n [minCharacterCount]=\"1\"\n [allowSubmit]=\"false\"\n [clearOnSelection]=\"true\"\n ></gn-ui-autocomplete>\n <div class=\"flex gap-2 flex-wrap\">\n <gn-ui-badge\n *ngFor=\"let keyword of keywords\"\n [removable]=\"true\"\n (badgeRemoveClicked)=\"removeKeyword(keyword)\"\n >{{ keyword.label }}\n\n <ng-icon\n *ngIf=\"isPlaceWithoutExtent(keyword)\"\n [title]=\"'editor.record.form.keywords.place.withoutExtent' | translate\"\n class=\"badge-warning\"\n name=\"matWarningAmberOutline\"\n ></ng-icon>\n </gn-ui-badge>\n </div>\n</div>\n", styles: [".badge-warning{font-size:1.4em}\n"] }]
39028
39161
  }], ctorParameters: () => [{ type: PlatformServiceInterface }], propDecorators: { keywords: [{
39029
39162
  type: Input
39030
39163
  }], keywordTypes: [{
@@ -39060,7 +39193,7 @@ class FormFieldKeywordsComponent {
39060
39193
  this.valueChange.emit(allKeywords);
39061
39194
  }
39062
39195
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldKeywordsComponent, deps: [{ token: EditorFacade }], target: i0.ɵɵFactoryTarget.Component }); }
39063
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldKeywordsComponent, isStandalone: true, selector: "gn-ui-form-field-keywords", inputs: { value: "value" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-generic-keywords\n [keywords]=\"filteredKeywords\"\n [keywordTypes]=\"keywordTypes\"\n [placeholder]=\"'editor.form.keywords.placeholder' | translate\"\n (changedKeywords)=\"handleKeywordsChange($event)\"\n [allowSubmit]=\"false\"\n >\n </gn-ui-generic-keywords>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: UiInputsModule }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: UiWidgetsModule }, { kind: "component", type: GenericKeywordsComponent, selector: "gn-ui-generic-keywords", inputs: ["keywords", "keywordTypes", "placeholder", "allowSubmit"], outputs: ["changedKeywords", "addedKeyword", "deletedKeyword"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39196
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldKeywordsComponent, isStandalone: true, selector: "gn-ui-form-field-keywords", inputs: { value: "value" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-generic-keywords\n [keywords]=\"filteredKeywords\"\n [keywordTypes]=\"keywordTypes\"\n [placeholder]=\"'editor.record.form.keywords.placeholder' | translate\"\n (changedKeywords)=\"handleKeywordsChange($event)\"\n [allowSubmit]=\"false\"\n >\n </gn-ui-generic-keywords>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: UiInputsModule }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: UiWidgetsModule }, { kind: "component", type: GenericKeywordsComponent, selector: "gn-ui-generic-keywords", inputs: ["keywords", "keywordTypes", "placeholder", "allowSubmit"], outputs: ["changedKeywords", "addedKeyword", "deletedKeyword"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39064
39197
  }
39065
39198
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldKeywordsComponent, decorators: [{
39066
39199
  type: Component,
@@ -39072,7 +39205,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39072
39205
  AutocompleteComponent,
39073
39206
  GenericKeywordsComponent,
39074
39207
  TranslateModule,
39075
- ], template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-generic-keywords\n [keywords]=\"filteredKeywords\"\n [keywordTypes]=\"keywordTypes\"\n [placeholder]=\"'editor.form.keywords.placeholder' | translate\"\n (changedKeywords)=\"handleKeywordsChange($event)\"\n [allowSubmit]=\"false\"\n >\n </gn-ui-generic-keywords>\n</div>\n" }]
39208
+ ], template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-generic-keywords\n [keywords]=\"filteredKeywords\"\n [keywordTypes]=\"keywordTypes\"\n [placeholder]=\"'editor.record.form.keywords.placeholder' | translate\"\n (changedKeywords)=\"handleKeywordsChange($event)\"\n [allowSubmit]=\"false\"\n >\n </gn-ui-generic-keywords>\n</div>\n" }]
39076
39209
  }], ctorParameters: () => [{ type: EditorFacade }], propDecorators: { value: [{
39077
39210
  type: Input
39078
39211
  }], valueChange: [{
@@ -39492,7 +39625,7 @@ class FormFieldSpatialExtentComponent {
39492
39625
  this.editorFacade.updateRecordField('spatialExtents', spatialExtents);
39493
39626
  }
39494
39627
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldSpatialExtentComponent, deps: [{ token: PlatformServiceInterface }, { token: EditorFacade }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
39495
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldSpatialExtentComponent, isStandalone: true, selector: "gn-ui-form-field-spatial-extent", ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-generic-keywords\n [placeholder]=\"'Search for place keywords'\"\n [keywords]=\"shownKeywords$ | async\"\n [keywordTypes]=\"['place']\"\n (deletedKeyword)=\"handleKeywordDelete($event)\"\n (addedKeyword)=\"handleKeywordAdd($event)\"\n >\n </gn-ui-generic-keywords>\n <div class=\"w-full h-96 mt-2\">\n <gn-ui-form-field-map-container\n [spatialExtents]=\"spatialExtents$ | async\"\n ></gn-ui-form-field-map-container>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "component", type: GenericKeywordsComponent, selector: "gn-ui-generic-keywords", inputs: ["keywords", "keywordTypes", "placeholder", "allowSubmit"], outputs: ["changedKeywords", "addedKeyword", "deletedKeyword"] }, { kind: "component", type: FormFieldMapContainerComponent, selector: "gn-ui-form-field-map-container", inputs: ["spatialExtents"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39628
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldSpatialExtentComponent, isStandalone: true, selector: "gn-ui-form-field-spatial-extent", ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-generic-keywords\n [placeholder]=\"'editor.record.form.keywords.place.placeholder' | translate\"\n [keywords]=\"shownKeywords$ | async\"\n [keywordTypes]=\"['place']\"\n (deletedKeyword)=\"handleKeywordDelete($event)\"\n (addedKeyword)=\"handleKeywordAdd($event)\"\n >\n </gn-ui-generic-keywords>\n <div class=\"w-full h-96 mt-2\">\n <gn-ui-form-field-map-container\n [spatialExtents]=\"spatialExtents$ | async\"\n ></gn-ui-form-field-map-container>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "component", type: GenericKeywordsComponent, selector: "gn-ui-generic-keywords", inputs: ["keywords", "keywordTypes", "placeholder", "allowSubmit"], outputs: ["changedKeywords", "addedKeyword", "deletedKeyword"] }, { kind: "component", type: FormFieldMapContainerComponent, selector: "gn-ui-form-field-map-container", inputs: ["spatialExtents"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39496
39629
  }
39497
39630
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldSpatialExtentComponent, decorators: [{
39498
39631
  type: Component,
@@ -39500,7 +39633,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39500
39633
  CommonModule,
39501
39634
  GenericKeywordsComponent,
39502
39635
  FormFieldMapContainerComponent,
39503
- ], template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-generic-keywords\n [placeholder]=\"'Search for place keywords'\"\n [keywords]=\"shownKeywords$ | async\"\n [keywordTypes]=\"['place']\"\n (deletedKeyword)=\"handleKeywordDelete($event)\"\n (addedKeyword)=\"handleKeywordAdd($event)\"\n >\n </gn-ui-generic-keywords>\n <div class=\"w-full h-96 mt-2\">\n <gn-ui-form-field-map-container\n [spatialExtents]=\"spatialExtents$ | async\"\n ></gn-ui-form-field-map-container>\n </div>\n</div>\n" }]
39636
+ TranslateModule,
39637
+ ], template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-generic-keywords\n [placeholder]=\"'editor.record.form.keywords.place.placeholder' | translate\"\n [keywords]=\"shownKeywords$ | async\"\n [keywordTypes]=\"['place']\"\n (deletedKeyword)=\"handleKeywordDelete($event)\"\n (addedKeyword)=\"handleKeywordAdd($event)\"\n >\n </gn-ui-generic-keywords>\n <div class=\"w-full h-96 mt-2\">\n <gn-ui-form-field-map-container\n [spatialExtents]=\"spatialExtents$ | async\"\n ></gn-ui-form-field-map-container>\n </div>\n</div>\n" }]
39504
39638
  }], ctorParameters: () => [{ type: PlatformServiceInterface }, { type: EditorFacade }, { type: i2.TranslateService }] });
39505
39639
 
39506
39640
  class ContactCardComponent {
@@ -39624,7 +39758,7 @@ class FormFieldContactsForResourceComponent {
39624
39758
  provideNgIconsConfig({
39625
39759
  size: '1.5rem',
39626
39760
  }),
39627
- ], usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <div class=\"flex flex-row flex-wrap gap-2\" data-test=\"rolesToPick\">\n <ng-container *ngFor=\"let role of rolesToPick\">\n <gn-ui-button type=\"gray\" (buttonClick)=\"addRoleToDisplay(role)\">\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>\n &nbsp;\n <span translate>{{ roleToLabel(role) }}</span>\n </gn-ui-button>\n </ng-container>\n </div>\n <div\n class=\"mt-8\"\n *ngIf=\"\n roleSectionsToDisplay && roleSectionsToDisplay.length > 0;\n else noContact\n \"\n data-test=\"displayedRoles\"\n >\n <div\n *ngFor=\"\n let role of roleSectionsToDisplay;\n let index = index;\n let isLast = last\n \"\n class=\"flex flex-col gap-4\"\n >\n <div class=\"flex flex-row justify-between\">\n <span class=\"font-bold text-base\" translate>{{\n roleToLabel(role)\n }}</span>\n </div>\n\n <gn-ui-autocomplete\n [placeholder]=\"'Choose a contact'\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event, role)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n [allowSubmit]=\"false\"\n >\n </gn-ui-autocomplete>\n\n <ng-container *ngIf=\"contactsForRessourceByRole.get(role) as contacts\">\n <gn-ui-sortable-list\n [items]=\"contacts\"\n (itemsOrderChange)=\"handleContactsChanged($event, role)\"\n [elementTemplate]=\"contactTemplate\"\n ></gn-ui-sortable-list>\n <ng-template #contactTemplate let-contact>\n <gn-ui-contact-card [contact]=\"contact\"></gn-ui-contact-card>\n </ng-template>\n </ng-container>\n\n <hr class=\"border-t-[#D6D3D1] mt-4 mb-6\" *ngIf=\"!isLast\" />\n </div>\n </div>\n <ng-template #noContact>\n <div\n class=\"p-4 border border-primary bg-primary-lightest rounded-lg\"\n translate\n >\n editor.record.form.field.contactsForResource.noContact\n </div>\n </ng-template>\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"], dependencies: [{ kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiWidgetsModule }, { kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ContactCardComponent, selector: "gn-ui-contact-card", inputs: ["contact"] }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elementTemplate", "items"], outputs: ["itemsOrderChange"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39761
+ ], usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <div class=\"flex flex-row flex-wrap gap-2\" data-test=\"rolesToPick\">\n <ng-container *ngFor=\"let role of rolesToPick\">\n <gn-ui-button type=\"gray\" (buttonClick)=\"addRoleToDisplay(role)\">\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>\n &nbsp;\n <span translate>{{ roleToLabel(role) }}</span>\n </gn-ui-button>\n </ng-container>\n </div>\n <div\n class=\"mt-8\"\n *ngIf=\"\n roleSectionsToDisplay && roleSectionsToDisplay.length > 0;\n else noContact\n \"\n data-test=\"displayedRoles\"\n >\n <div\n *ngFor=\"\n let role of roleSectionsToDisplay;\n let index = index;\n let isLast = last\n \"\n class=\"flex flex-col gap-4\"\n >\n <div class=\"flex flex-row justify-between\">\n <span class=\"font-bold text-base\" translate>{{\n roleToLabel(role)\n }}</span>\n </div>\n\n <gn-ui-autocomplete\n [placeholder]=\"\n 'editor.record.form.field.contactsForResource.placeholder' | translate\n \"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event, role)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n [allowSubmit]=\"false\"\n >\n </gn-ui-autocomplete>\n\n <ng-container *ngIf=\"contactsForRessourceByRole.get(role) as contacts\">\n <gn-ui-sortable-list\n [items]=\"contacts\"\n (itemsOrderChange)=\"handleContactsChanged($event, role)\"\n [elementTemplate]=\"contactTemplate\"\n ></gn-ui-sortable-list>\n <ng-template #contactTemplate let-contact>\n <gn-ui-contact-card [contact]=\"contact\"></gn-ui-contact-card>\n </ng-template>\n </ng-container>\n\n <hr class=\"border-t-[#D6D3D1] mt-4 mb-6\" *ngIf=\"!isLast\" />\n </div>\n </div>\n <ng-template #noContact>\n <div\n class=\"p-4 border border-primary bg-primary-lightest rounded-lg\"\n translate\n >\n editor.record.form.field.contactsForResource.noContact\n </div>\n </ng-template>\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"], dependencies: [{ kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiWidgetsModule }, { kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ContactCardComponent, selector: "gn-ui-contact-card", inputs: ["contact"] }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elementTemplate", "items"], outputs: ["itemsOrderChange"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39628
39762
  }
39629
39763
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldContactsForResourceComponent, decorators: [{
39630
39764
  type: Component,
@@ -39643,7 +39777,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39643
39777
  provideNgIconsConfig({
39644
39778
  size: '1.5rem',
39645
39779
  }),
39646
- ], template: "<div class=\"flex flex-col gap-3\">\n <div class=\"flex flex-row flex-wrap gap-2\" data-test=\"rolesToPick\">\n <ng-container *ngFor=\"let role of rolesToPick\">\n <gn-ui-button type=\"gray\" (buttonClick)=\"addRoleToDisplay(role)\">\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>\n &nbsp;\n <span translate>{{ roleToLabel(role) }}</span>\n </gn-ui-button>\n </ng-container>\n </div>\n <div\n class=\"mt-8\"\n *ngIf=\"\n roleSectionsToDisplay && roleSectionsToDisplay.length > 0;\n else noContact\n \"\n data-test=\"displayedRoles\"\n >\n <div\n *ngFor=\"\n let role of roleSectionsToDisplay;\n let index = index;\n let isLast = last\n \"\n class=\"flex flex-col gap-4\"\n >\n <div class=\"flex flex-row justify-between\">\n <span class=\"font-bold text-base\" translate>{{\n roleToLabel(role)\n }}</span>\n </div>\n\n <gn-ui-autocomplete\n [placeholder]=\"'Choose a contact'\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event, role)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n [allowSubmit]=\"false\"\n >\n </gn-ui-autocomplete>\n\n <ng-container *ngIf=\"contactsForRessourceByRole.get(role) as contacts\">\n <gn-ui-sortable-list\n [items]=\"contacts\"\n (itemsOrderChange)=\"handleContactsChanged($event, role)\"\n [elementTemplate]=\"contactTemplate\"\n ></gn-ui-sortable-list>\n <ng-template #contactTemplate let-contact>\n <gn-ui-contact-card [contact]=\"contact\"></gn-ui-contact-card>\n </ng-template>\n </ng-container>\n\n <hr class=\"border-t-[#D6D3D1] mt-4 mb-6\" *ngIf=\"!isLast\" />\n </div>\n </div>\n <ng-template #noContact>\n <div\n class=\"p-4 border border-primary bg-primary-lightest rounded-lg\"\n translate\n >\n editor.record.form.field.contactsForResource.noContact\n </div>\n </ng-template>\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"] }]
39780
+ ], template: "<div class=\"flex flex-col gap-3\">\n <div class=\"flex flex-row flex-wrap gap-2\" data-test=\"rolesToPick\">\n <ng-container *ngFor=\"let role of rolesToPick\">\n <gn-ui-button type=\"gray\" (buttonClick)=\"addRoleToDisplay(role)\">\n <ng-icon name=\"iconoirPlus\" class=\"text-primary\"></ng-icon>\n &nbsp;\n <span translate>{{ roleToLabel(role) }}</span>\n </gn-ui-button>\n </ng-container>\n </div>\n <div\n class=\"mt-8\"\n *ngIf=\"\n roleSectionsToDisplay && roleSectionsToDisplay.length > 0;\n else noContact\n \"\n data-test=\"displayedRoles\"\n >\n <div\n *ngFor=\"\n let role of roleSectionsToDisplay;\n let index = index;\n let isLast = last\n \"\n class=\"flex flex-col gap-4\"\n >\n <div class=\"flex flex-row justify-between\">\n <span class=\"font-bold text-base\" translate>{{\n roleToLabel(role)\n }}</span>\n </div>\n\n <gn-ui-autocomplete\n [placeholder]=\"\n 'editor.record.form.field.contactsForResource.placeholder' | translate\n \"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event, role)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n [allowSubmit]=\"false\"\n >\n </gn-ui-autocomplete>\n\n <ng-container *ngIf=\"contactsForRessourceByRole.get(role) as contacts\">\n <gn-ui-sortable-list\n [items]=\"contacts\"\n (itemsOrderChange)=\"handleContactsChanged($event, role)\"\n [elementTemplate]=\"contactTemplate\"\n ></gn-ui-sortable-list>\n <ng-template #contactTemplate let-contact>\n <gn-ui-contact-card [contact]=\"contact\"></gn-ui-contact-card>\n </ng-template>\n </ng-container>\n\n <hr class=\"border-t-[#D6D3D1] mt-4 mb-6\" *ngIf=\"!isLast\" />\n </div>\n </div>\n <ng-template #noContact>\n <div\n class=\"p-4 border border-primary bg-primary-lightest rounded-lg\"\n translate\n >\n editor.record.form.field.contactsForResource.noContact\n </div>\n </ng-template>\n</div>\n", styles: [":host{--gn-ui-button-padding: 8px 8px;--gn-ui-button-rounded: 8px}\n"] }]
39647
39781
  }], ctorParameters: () => [{ type: PlatformServiceInterface }, { type: OrganizationsServiceInterface }], propDecorators: { value: [{
39648
39782
  type: Input
39649
39783
  }], valueChange: [{
@@ -39722,7 +39856,7 @@ class FormFieldContactsComponent {
39722
39856
  this.subscription.unsubscribe();
39723
39857
  }
39724
39858
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldContactsComponent, deps: [{ token: PlatformServiceInterface }, { token: OrganizationsServiceInterface }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
39725
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldContactsComponent, isStandalone: true, selector: "gn-ui-form-field-contacts", inputs: { value: "value" }, outputs: { valueChange: "valueChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-autocomplete\n [placeholder]=\"'Choose a contact'\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n >\n </gn-ui-autocomplete>\n\n <ng-container *ngIf=\"contacts.length > 0; else noContact\">\n <ng-container *ngIf=\"contacts.length === 1\">\n <ng-container *ngFor=\"let contact of contacts; let index = index\">\n <gn-ui-contact-card\n [contact]=\"contact\"\n ></gn-ui-contact-card> </ng-container\n ></ng-container>\n\n <ng-container *ngIf=\"contacts.length > 1\">\n <gn-ui-sortable-list\n [items]=\"contacts\"\n (itemsOrderChange)=\"handleContactsChanged($event)\"\n [elementTemplate]=\"contactTemplate\"\n ></gn-ui-sortable-list>\n <ng-template #contactTemplate let-contact>\n <gn-ui-contact-card [contact]=\"contact\"></gn-ui-contact-card>\n </ng-template>\n </ng-container>\n </ng-container>\n</div>\n\n<ng-template #noContact>\n <div\n class=\"p-4 text-sm border border-primary bg-primary-lightest rounded-lg\"\n translate\n >\n editor.record.form.field.contacts.noContact\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: UiInputsModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiWidgetsModule }, { kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ContactCardComponent, selector: "gn-ui-contact-card", inputs: ["contact"] }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elementTemplate", "items"], outputs: ["itemsOrderChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39859
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldContactsComponent, isStandalone: true, selector: "gn-ui-form-field-contacts", inputs: { value: "value" }, outputs: { valueChange: "valueChange" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-autocomplete\n [placeholder]=\"'editor.record.form.field.contacts.placeholder' | translate\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n >\n </gn-ui-autocomplete>\n\n <ng-container *ngIf=\"contacts.length > 0; else noContact\">\n <ng-container *ngIf=\"contacts.length === 1\">\n <ng-container *ngFor=\"let contact of contacts; let index = index\">\n <gn-ui-contact-card\n [contact]=\"contact\"\n ></gn-ui-contact-card> </ng-container\n ></ng-container>\n\n <ng-container *ngIf=\"contacts.length > 1\">\n <gn-ui-sortable-list\n [items]=\"contacts\"\n (itemsOrderChange)=\"handleContactsChanged($event)\"\n [elementTemplate]=\"contactTemplate\"\n ></gn-ui-sortable-list>\n <ng-template #contactTemplate let-contact>\n <gn-ui-contact-card [contact]=\"contact\"></gn-ui-contact-card>\n </ng-template>\n </ng-container>\n </ng-container>\n</div>\n\n<ng-template #noContact>\n <div\n class=\"p-4 text-sm border border-primary bg-primary-lightest rounded-lg\"\n translate\n >\n editor.record.form.field.contacts.noContact\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: UiInputsModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: UiWidgetsModule }, { kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ContactCardComponent, selector: "gn-ui-contact-card", inputs: ["contact"] }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elementTemplate", "items"], outputs: ["itemsOrderChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39726
39860
  }
39727
39861
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldContactsComponent, decorators: [{
39728
39862
  type: Component,
@@ -39735,7 +39869,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39735
39869
  TranslateModule,
39736
39870
  ContactCardComponent,
39737
39871
  SortableListComponent,
39738
- ], template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-autocomplete\n [placeholder]=\"'Choose a contact'\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n >\n </gn-ui-autocomplete>\n\n <ng-container *ngIf=\"contacts.length > 0; else noContact\">\n <ng-container *ngIf=\"contacts.length === 1\">\n <ng-container *ngFor=\"let contact of contacts; let index = index\">\n <gn-ui-contact-card\n [contact]=\"contact\"\n ></gn-ui-contact-card> </ng-container\n ></ng-container>\n\n <ng-container *ngIf=\"contacts.length > 1\">\n <gn-ui-sortable-list\n [items]=\"contacts\"\n (itemsOrderChange)=\"handleContactsChanged($event)\"\n [elementTemplate]=\"contactTemplate\"\n ></gn-ui-sortable-list>\n <ng-template #contactTemplate let-contact>\n <gn-ui-contact-card [contact]=\"contact\"></gn-ui-contact-card>\n </ng-template>\n </ng-container>\n </ng-container>\n</div>\n\n<ng-template #noContact>\n <div\n class=\"p-4 text-sm border border-primary bg-primary-lightest rounded-lg\"\n translate\n >\n editor.record.form.field.contacts.noContact\n </div>\n</ng-template>\n" }]
39872
+ ], template: "<div class=\"flex flex-col gap-3\">\n <gn-ui-autocomplete\n [placeholder]=\"'editor.record.form.field.contacts.placeholder' | translate\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"addContact($event)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"1\"\n [clearOnSelection]=\"true\"\n >\n </gn-ui-autocomplete>\n\n <ng-container *ngIf=\"contacts.length > 0; else noContact\">\n <ng-container *ngIf=\"contacts.length === 1\">\n <ng-container *ngFor=\"let contact of contacts; let index = index\">\n <gn-ui-contact-card\n [contact]=\"contact\"\n ></gn-ui-contact-card> </ng-container\n ></ng-container>\n\n <ng-container *ngIf=\"contacts.length > 1\">\n <gn-ui-sortable-list\n [items]=\"contacts\"\n (itemsOrderChange)=\"handleContactsChanged($event)\"\n [elementTemplate]=\"contactTemplate\"\n ></gn-ui-sortable-list>\n <ng-template #contactTemplate let-contact>\n <gn-ui-contact-card [contact]=\"contact\"></gn-ui-contact-card>\n </ng-template>\n </ng-container>\n </ng-container>\n</div>\n\n<ng-template #noContact>\n <div\n class=\"p-4 text-sm border border-primary bg-primary-lightest rounded-lg\"\n translate\n >\n editor.record.form.field.contacts.noContact\n </div>\n</ng-template>\n" }]
39739
39873
  }], ctorParameters: () => [{ type: PlatformServiceInterface }, { type: OrganizationsServiceInterface }, { type: i0.ChangeDetectorRef }], propDecorators: { value: [{
39740
39874
  type: Input
39741
39875
  }], valueChange: [{
@@ -39751,8 +39885,8 @@ class OnlineResourceCardComponent {
39751
39885
  case 'link':
39752
39886
  case 'service':
39753
39887
  case 'download':
39754
- return (this.onlineResource.name ??
39755
- this.onlineResource.description ??
39888
+ return (this.onlineResource.description ||
39889
+ this.onlineResource.name ||
39756
39890
  '(unknown)');
39757
39891
  case 'endpoint':
39758
39892
  return this.onlineResource.description;
@@ -39927,7 +40061,7 @@ class FormFieldOnlineLinkResourcesComponent {
39927
40061
  });
39928
40062
  }
39929
40063
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldOnlineLinkResourcesComponent, deps: [{ token: NotificationsService }, { token: i2.TranslateService }, { token: PlatformServiceInterface }, { token: i0.ChangeDetectorRef }, { token: i1$a.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
39930
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldOnlineLinkResourcesComponent, isStandalone: true, selector: "gn-ui-form-field-online-link-resources", inputs: { metadataUuid: "metadataUuid", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col\">\n <gn-ui-file-input\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n (fileChange)=\"handleFileChange($event)\"\n (uploadCancel)=\"handleUploadCancel()\"\n [uploadProgress]=\"uploadProgress\"\n (urlChange)=\"handleUrlChange($event)\"\n ></gn-ui-file-input>\n <div class=\"h-[8px]\"></div>\n <gn-ui-sortable-list\n [items]=\"linkResources\"\n (itemsOrderChange)=\"handleResourcesChange($event)\"\n [elementTemplate]=\"template\"\n >\n </gn-ui-sortable-list>\n <ng-template #template let-onlineResource let-index=\"index\">\n <gn-ui-online-resource-card\n [onlineResource]=\"onlineResource\"\n (modifyClick)=\"handleResourceModify(onlineResource, index)\"\n ></gn-ui-online-resource-card>\n </ng-template>\n\n <ng-template #dialogTemplate let-onlineResource>\n <div class=\"flex flex-col gap-[16px]\">\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.title\n </h3>\n <gn-ui-text-input [(value)]=\"onlineResource.name\"></gn-ui-text-input>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"true\"\n [value]=\"onlineResource.url\"\n [disabled]=\"disabled$ | async\"\n [showValidateButton]=\"false\"\n ></gn-ui-url-input>\n </div>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: FileInputComponent, selector: "gn-ui-file-input", inputs: ["maxSizeMB", "uploadProgress", "disabled"], outputs: ["fileChange", "urlChange", "uploadCancel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elementTemplate", "items"], outputs: ["itemsOrderChange"] }, { kind: "component", type: OnlineResourceCardComponent, selector: "gn-ui-online-resource-card", inputs: ["onlineResource"], outputs: ["modifyClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "disabled", "extraClass", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40064
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldOnlineLinkResourcesComponent, isStandalone: true, selector: "gn-ui-form-field-online-link-resources", inputs: { metadataUuid: "metadataUuid", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col\">\n <gn-ui-file-input\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n (fileChange)=\"handleFileChange($event)\"\n (uploadCancel)=\"handleUploadCancel()\"\n [uploadProgress]=\"uploadProgress\"\n (urlChange)=\"handleUrlChange($event)\"\n ></gn-ui-file-input>\n <div class=\"h-[8px]\"></div>\n <gn-ui-sortable-list\n [items]=\"linkResources\"\n (itemsOrderChange)=\"handleResourcesChange($event)\"\n [elementTemplate]=\"template\"\n >\n </gn-ui-sortable-list>\n <ng-template #template let-onlineResource let-index=\"index\">\n <gn-ui-online-resource-card\n [onlineResource]=\"onlineResource\"\n (modifyClick)=\"handleResourceModify(onlineResource, index)\"\n ></gn-ui-online-resource-card>\n </ng-template>\n\n <ng-template #dialogTemplate let-onlineResource>\n <div class=\"flex flex-col gap-[16px]\">\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.title\n </h3>\n <gn-ui-text-input [(value)]=\"onlineResource.name\"></gn-ui-text-input>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"true\"\n [value]=\"onlineResource.url\"\n [showValidateButton]=\"false\"\n ></gn-ui-url-input>\n </div>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: FileInputComponent, selector: "gn-ui-file-input", inputs: ["maxSizeMB", "uploadProgress", "disabled"], outputs: ["fileChange", "urlChange", "uploadCancel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elementTemplate", "items"], outputs: ["itemsOrderChange"] }, { kind: "component", type: OnlineResourceCardComponent, selector: "gn-ui-online-resource-card", inputs: ["onlineResource"], outputs: ["modifyClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "disabled", "extraClass", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39931
40065
  }
39932
40066
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldOnlineLinkResourcesComponent, decorators: [{
39933
40067
  type: Component,
@@ -39940,7 +40074,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39940
40074
  TextAreaComponent,
39941
40075
  UrlInputComponent,
39942
40076
  TranslateModule,
39943
- ], template: "<div class=\"flex flex-col\">\n <gn-ui-file-input\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n (fileChange)=\"handleFileChange($event)\"\n (uploadCancel)=\"handleUploadCancel()\"\n [uploadProgress]=\"uploadProgress\"\n (urlChange)=\"handleUrlChange($event)\"\n ></gn-ui-file-input>\n <div class=\"h-[8px]\"></div>\n <gn-ui-sortable-list\n [items]=\"linkResources\"\n (itemsOrderChange)=\"handleResourcesChange($event)\"\n [elementTemplate]=\"template\"\n >\n </gn-ui-sortable-list>\n <ng-template #template let-onlineResource let-index=\"index\">\n <gn-ui-online-resource-card\n [onlineResource]=\"onlineResource\"\n (modifyClick)=\"handleResourceModify(onlineResource, index)\"\n ></gn-ui-online-resource-card>\n </ng-template>\n\n <ng-template #dialogTemplate let-onlineResource>\n <div class=\"flex flex-col gap-[16px]\">\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.title\n </h3>\n <gn-ui-text-input [(value)]=\"onlineResource.name\"></gn-ui-text-input>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"true\"\n [value]=\"onlineResource.url\"\n [disabled]=\"disabled$ | async\"\n [showValidateButton]=\"false\"\n ></gn-ui-url-input>\n </div>\n </ng-template>\n</div>\n" }]
40077
+ ], template: "<div class=\"flex flex-col\">\n <gn-ui-file-input\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n (fileChange)=\"handleFileChange($event)\"\n (uploadCancel)=\"handleUploadCancel()\"\n [uploadProgress]=\"uploadProgress\"\n (urlChange)=\"handleUrlChange($event)\"\n ></gn-ui-file-input>\n <div class=\"h-[8px]\"></div>\n <gn-ui-sortable-list\n [items]=\"linkResources\"\n (itemsOrderChange)=\"handleResourcesChange($event)\"\n [elementTemplate]=\"template\"\n >\n </gn-ui-sortable-list>\n <ng-template #template let-onlineResource let-index=\"index\">\n <gn-ui-online-resource-card\n [onlineResource]=\"onlineResource\"\n (modifyClick)=\"handleResourceModify(onlineResource, index)\"\n ></gn-ui-online-resource-card>\n </ng-template>\n\n <ng-template #dialogTemplate let-onlineResource>\n <div class=\"flex flex-col gap-[16px]\">\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.title\n </h3>\n <gn-ui-text-input [(value)]=\"onlineResource.name\"></gn-ui-text-input>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"true\"\n [value]=\"onlineResource.url\"\n [showValidateButton]=\"false\"\n ></gn-ui-url-input>\n </div>\n </ng-template>\n</div>\n" }]
39944
40078
  }], ctorParameters: () => [{ type: NotificationsService }, { type: i2.TranslateService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: i1$a.MatDialog }], propDecorators: { metadataUuid: [{
39945
40079
  type: Input
39946
40080
  }], value: [{
@@ -39952,15 +40086,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39952
40086
  args: ['dialogTemplate']
39953
40087
  }] } });
39954
40088
 
40089
+ marker('editor.record.form.field.onlineResource.edit.identifier.placeholder');
40090
+ marker('editor.record.form.field.onlineResource.edit.identifier.placeholder.wps');
39955
40091
  class OnlineServiceResourceInputComponent {
40092
+ set service(service) {
40093
+ this._service = { ...service };
40094
+ }
39956
40095
  constructor(cdr) {
39957
40096
  this.cdr = cdr;
39958
40097
  this.disabled = false;
39959
40098
  this.modifyMode = false;
39960
- this.urlChange = new EventEmitter();
39961
- this.identifierSubmit = new EventEmitter();
40099
+ this.serviceChange = new EventEmitter();
39962
40100
  this.errorMessage = false;
39963
- this.url = '';
39964
40101
  this.layersSubject = new BehaviorSubject([]);
39965
40102
  this.layers$ = this.layersSubject.asObservable();
39966
40103
  this.protocolOptions = [
@@ -40004,27 +40141,15 @@ class OnlineServiceResourceInputComponent {
40004
40141
  };
40005
40142
  }
40006
40143
  get activeLayerSuggestion() {
40007
- return !['wps', 'GPFDL', 'esriRest', 'other'].includes(this.service.accessServiceProtocol);
40008
- }
40009
- ngOnChanges() {
40010
- this.selectedProtocol =
40011
- this.protocolOptions.find((option) => option.value === this.service.accessServiceProtocol)?.value ?? 'other';
40012
- }
40013
- ngOnInit() {
40014
- if (this.service.url) {
40015
- this.url = this.service.url.toString();
40016
- }
40144
+ return !['wps', 'GPFDL', 'esriRest', 'other'].includes(this._service.accessServiceProtocol);
40017
40145
  }
40018
40146
  handleUrlValueChange(url) {
40019
- this.url = url;
40020
- this.service.url = url ? new URL(url) : undefined;
40147
+ this._service.url = url ? new URL(url) : undefined;
40021
40148
  this.resetLayersSuggestion();
40022
- this.urlChange.emit(this.url);
40023
40149
  }
40024
40150
  async handleUploadClick(url) {
40025
- this.url = url;
40026
40151
  try {
40027
- const layers = await getLayers(url, this.service.accessServiceProtocol);
40152
+ const layers = await getLayers(url, this._service.accessServiceProtocol);
40028
40153
  if (layers.length === 0) {
40029
40154
  throw new Error('No layers found');
40030
40155
  }
@@ -40037,24 +40162,25 @@ class OnlineServiceResourceInputComponent {
40037
40162
  this.cdr.detectChanges();
40038
40163
  }
40039
40164
  resetAllFormFields() {
40040
- this.url = '';
40041
- this.service.url = null;
40165
+ this._service.url = null;
40042
40166
  this.resetLayersSuggestion();
40043
40167
  }
40044
40168
  resetLayersSuggestion() {
40045
40169
  this.errorMessage = false;
40046
40170
  this.layersSubject.next([]);
40047
- this.service.identifierInService = null;
40171
+ this._service.identifierInService = null;
40048
40172
  }
40049
- submitIdentifier(identifier) {
40050
- if (!identifier)
40051
- return;
40052
- this.identifierSubmit.emit({ url: this.url, identifier });
40053
- this.service.identifierInService = null;
40173
+ submit() {
40174
+ this.serviceChange.emit({
40175
+ ...this._service,
40176
+ name: this._service.identifierInService, // should we keep the identifierInService? read-write duplicate with name
40177
+ });
40178
+ this._service.accessServiceProtocol = 'ogcFeatures';
40179
+ this.resetAllFormFields();
40054
40180
  }
40055
40181
  getIdentifierPlaceholder() {
40056
40182
  const baseKey = 'editor.record.form.field.onlineResource.edit.identifier.placeholder';
40057
- return this.service.accessServiceProtocol === 'wps'
40183
+ return this._service.accessServiceProtocol === 'wps'
40058
40184
  ? `${baseKey}.wps`
40059
40185
  : baseKey;
40060
40186
  }
@@ -40070,15 +40196,16 @@ class OnlineServiceResourceInputComponent {
40070
40196
  * gn-ui-autocomplete
40071
40197
  */
40072
40198
  handleSelectValue(val) {
40073
- this.service.identifierInService = val.name;
40199
+ this._service.identifierInService = val.name; // should we keep the identifierInService? read-write duplicate with name
40200
+ this._service.description = val.title;
40074
40201
  }
40075
40202
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OnlineServiceResourceInputComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
40076
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: OnlineServiceResourceInputComponent, isStandalone: true, selector: "gn-ui-online-service-resource-input", inputs: { service: "service", protocolHint: "protocolHint", disabled: "disabled", modifyMode: "modifyMode" }, outputs: { urlChange: "urlChange", identifierSubmit: "identifierSubmit" }, providers: [
40077
- provideIcons({ iconoirCloudUpload }),
40203
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: OnlineServiceResourceInputComponent, isStandalone: true, selector: "gn-ui-online-service-resource-input", inputs: { service: "service", protocolHint: "protocolHint", disabled: "disabled", modifyMode: "modifyMode" }, outputs: { serviceChange: "serviceChange" }, providers: [
40204
+ provideIcons({ iconoirRefresh }),
40078
40205
  provideNgIconsConfig({
40079
40206
  size: '1.5em',
40080
40207
  }),
40081
- ], usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-row justify-between\">\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.protocol\n </h3>\n <span\n *ngIf=\"protocolHint\"\n class=\"material-symbols-outlined m-2 gn-ui-icon-small\"\n [matTooltip]=\"protocolHint\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n</div>\n<div class=\"flex flex-row items-center gap-4 h-[48px]\">\n <mat-radio-group\n aria-labelledby=\"example-radio-group-label\"\n class=\"flex flex-row gap-[8px]\"\n [(ngModel)]=\"service.accessServiceProtocol\"\n [disabled]=\"disabled\"\n (change)=\"resetAllFormFields()\"\n >\n <mat-radio-button\n *ngFor=\"let protocolOption of protocolOptions\"\n [value]=\"protocolOption.value\"\n >\n {{ protocolOption.label | translate }}\n </mat-radio-button>\n </mat-radio-group>\n</div>\n\n<div class=\"flex flex-col gap-4\">\n <gn-ui-url-input\n class=\"w-full\"\n (uploadClick)=\"handleUploadClick($event)\"\n (valueChange)=\"handleUrlValueChange($event)\"\n [disabled]=\"disabled\"\n [value]=\"url\"\n [showValidateButton]=\"activeLayerSuggestion\"\n >\n <ng-content *ngIf=\"activeLayerSuggestion\">\n <ng-icon name=\"iconoirCloudUpload\"></ng-icon>\n </ng-content>\n </gn-ui-url-input>\n\n <p class=\"text-sm text-red-500 pl-4\" *ngIf=\"errorMessage\" translate>\n editor.record.form.field.onlineResource.edit.identifier.error\n </p>\n\n <gn-ui-text-input\n class=\"grow border-b border-gray-300 pb-4\"\n [(value)]=\"service.identifierInService\"\n [placeholder]=\"getIdentifierPlaceholder() | translate\"\n data-cy=\"identifier-in-service\"\n [disabled]=\"disabled\"\n *ngIf=\"\n !activeLayerSuggestion ||\n (url && errorMessage) ||\n (modifyMode && (layers$ | async).length === 0)\n \"\n ></gn-ui-text-input>\n <gn-ui-autocomplete\n class=\"border-b border-gray-300 pb-4\"\n [placeholder]=\"\n 'editor.record.form.field.onlineResource.edit.identifier.select.label'\n | translate\n \"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleSelectValue($event)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"0\"\n [clearOnSelection]=\"false\"\n *ngIf=\"activeLayerSuggestion && (layers$ | async)?.length > 0\"\n >\n </gn-ui-autocomplete>\n <gn-ui-button\n (buttonClick)=\"submitIdentifier(service.identifierInService)\"\n [disabled]=\"disabled || !service.identifierInService\"\n type=\"primary\"\n *ngIf=\"\n !modifyMode &&\n ((activeLayerSuggestion && (layers$ | async)) ||\n !activeLayerSuggestion ||\n (url && errorMessage))\n \"\n >\n <span class=\"text-white font-bold\" translate>\n editor.record.form.field.onlineResource.edit.identifier.submit</span\n >\n </gn-ui-button>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1$3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i4$1.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i4$1.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40208
+ ], ngImport: i0, template: "<div class=\"flex flex-row justify-between\">\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.protocol\n </h3>\n <span\n *ngIf=\"protocolHint\"\n class=\"material-symbols-outlined m-2 gn-ui-icon-small\"\n [matTooltip]=\"protocolHint\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n</div>\n<div class=\"flex flex-row items-center gap-4 h-[48px]\">\n <mat-radio-group\n aria-labelledby=\"example-radio-group-label\"\n class=\"flex flex-row gap-[8px]\"\n [(ngModel)]=\"_service.accessServiceProtocol\"\n [disabled]=\"disabled\"\n (change)=\"resetAllFormFields()\"\n >\n <mat-radio-button\n *ngFor=\"let protocolOption of protocolOptions\"\n [value]=\"protocolOption.value\"\n >\n {{ protocolOption.label | translate }}\n </mat-radio-button>\n </mat-radio-group>\n</div>\n\n<div class=\"flex flex-col gap-4\">\n <gn-ui-url-input\n class=\"w-full\"\n (uploadClick)=\"handleUploadClick($event)\"\n (valueChange)=\"handleUrlValueChange($event)\"\n [disabled]=\"disabled\"\n [value]=\"_service.url?.toString()\"\n [showValidateButton]=\"activeLayerSuggestion\"\n >\n <ng-content *ngIf=\"activeLayerSuggestion\">\n <ng-icon name=\"iconoirRefresh\"></ng-icon>\n </ng-content>\n </gn-ui-url-input>\n\n <p class=\"text-sm text-red-500 pl-4\" *ngIf=\"errorMessage\" translate>\n editor.record.form.field.onlineResource.edit.identifier.error\n </p>\n\n <gn-ui-text-input\n class=\"grow border-b border-gray-300 pb-4\"\n [(value)]=\"_service.identifierInService\"\n [placeholder]=\"getIdentifierPlaceholder() | translate\"\n data-cy=\"identifier-in-service\"\n [disabled]=\"disabled\"\n *ngIf=\"\n !activeLayerSuggestion ||\n (_service.url && errorMessage) ||\n (modifyMode && (layers$ | async).length === 0)\n \"\n ></gn-ui-text-input>\n <gn-ui-autocomplete\n class=\"border-b border-gray-300 pb-4\"\n [placeholder]=\"\n 'editor.record.form.field.onlineResource.edit.identifier.select.label'\n | translate\n \"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleSelectValue($event)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"0\"\n [clearOnSelection]=\"false\"\n *ngIf=\"activeLayerSuggestion && (layers$ | async)?.length > 0\"\n >\n </gn-ui-autocomplete>\n <gn-ui-button\n (buttonClick)=\"submit()\"\n [disabled]=\"disabled || !_service.identifierInService\"\n type=\"primary\"\n *ngIf=\"\n !modifyMode &&\n ((activeLayerSuggestion && (layers$ | async)) ||\n !activeLayerSuggestion ||\n (_service.url && errorMessage))\n \"\n >\n <span class=\"text-white font-bold\" translate>\n editor.record.form.field.onlineResource.edit.identifier.submit</span\n >\n </gn-ui-button>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "preventCompleteOnSelection", "autoFocus", "minCharacterCount", "allowSubmit", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1$3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i4$1.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i4$1.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40082
40209
  }
40083
40210
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OnlineServiceResourceInputComponent, decorators: [{
40084
40211
  type: Component,
@@ -40094,11 +40221,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
40094
40221
  TranslateModule,
40095
40222
  UrlInputComponent,
40096
40223
  ], providers: [
40097
- provideIcons({ iconoirCloudUpload }),
40224
+ provideIcons({ iconoirRefresh }),
40098
40225
  provideNgIconsConfig({
40099
40226
  size: '1.5em',
40100
40227
  }),
40101
- ], template: "<div class=\"flex flex-row justify-between\">\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.protocol\n </h3>\n <span\n *ngIf=\"protocolHint\"\n class=\"material-symbols-outlined m-2 gn-ui-icon-small\"\n [matTooltip]=\"protocolHint\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n</div>\n<div class=\"flex flex-row items-center gap-4 h-[48px]\">\n <mat-radio-group\n aria-labelledby=\"example-radio-group-label\"\n class=\"flex flex-row gap-[8px]\"\n [(ngModel)]=\"service.accessServiceProtocol\"\n [disabled]=\"disabled\"\n (change)=\"resetAllFormFields()\"\n >\n <mat-radio-button\n *ngFor=\"let protocolOption of protocolOptions\"\n [value]=\"protocolOption.value\"\n >\n {{ protocolOption.label | translate }}\n </mat-radio-button>\n </mat-radio-group>\n</div>\n\n<div class=\"flex flex-col gap-4\">\n <gn-ui-url-input\n class=\"w-full\"\n (uploadClick)=\"handleUploadClick($event)\"\n (valueChange)=\"handleUrlValueChange($event)\"\n [disabled]=\"disabled\"\n [value]=\"url\"\n [showValidateButton]=\"activeLayerSuggestion\"\n >\n <ng-content *ngIf=\"activeLayerSuggestion\">\n <ng-icon name=\"iconoirCloudUpload\"></ng-icon>\n </ng-content>\n </gn-ui-url-input>\n\n <p class=\"text-sm text-red-500 pl-4\" *ngIf=\"errorMessage\" translate>\n editor.record.form.field.onlineResource.edit.identifier.error\n </p>\n\n <gn-ui-text-input\n class=\"grow border-b border-gray-300 pb-4\"\n [(value)]=\"service.identifierInService\"\n [placeholder]=\"getIdentifierPlaceholder() | translate\"\n data-cy=\"identifier-in-service\"\n [disabled]=\"disabled\"\n *ngIf=\"\n !activeLayerSuggestion ||\n (url && errorMessage) ||\n (modifyMode && (layers$ | async).length === 0)\n \"\n ></gn-ui-text-input>\n <gn-ui-autocomplete\n class=\"border-b border-gray-300 pb-4\"\n [placeholder]=\"\n 'editor.record.form.field.onlineResource.edit.identifier.select.label'\n | translate\n \"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleSelectValue($event)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"0\"\n [clearOnSelection]=\"false\"\n *ngIf=\"activeLayerSuggestion && (layers$ | async)?.length > 0\"\n >\n </gn-ui-autocomplete>\n <gn-ui-button\n (buttonClick)=\"submitIdentifier(service.identifierInService)\"\n [disabled]=\"disabled || !service.identifierInService\"\n type=\"primary\"\n *ngIf=\"\n !modifyMode &&\n ((activeLayerSuggestion && (layers$ | async)) ||\n !activeLayerSuggestion ||\n (url && errorMessage))\n \"\n >\n <span class=\"text-white font-bold\" translate>\n editor.record.form.field.onlineResource.edit.identifier.submit</span\n >\n </gn-ui-button>\n</div>\n" }]
40228
+ ], template: "<div class=\"flex flex-row justify-between\">\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.protocol\n </h3>\n <span\n *ngIf=\"protocolHint\"\n class=\"material-symbols-outlined m-2 gn-ui-icon-small\"\n [matTooltip]=\"protocolHint\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n</div>\n<div class=\"flex flex-row items-center gap-4 h-[48px]\">\n <mat-radio-group\n aria-labelledby=\"example-radio-group-label\"\n class=\"flex flex-row gap-[8px]\"\n [(ngModel)]=\"_service.accessServiceProtocol\"\n [disabled]=\"disabled\"\n (change)=\"resetAllFormFields()\"\n >\n <mat-radio-button\n *ngFor=\"let protocolOption of protocolOptions\"\n [value]=\"protocolOption.value\"\n >\n {{ protocolOption.label | translate }}\n </mat-radio-button>\n </mat-radio-group>\n</div>\n\n<div class=\"flex flex-col gap-4\">\n <gn-ui-url-input\n class=\"w-full\"\n (uploadClick)=\"handleUploadClick($event)\"\n (valueChange)=\"handleUrlValueChange($event)\"\n [disabled]=\"disabled\"\n [value]=\"_service.url?.toString()\"\n [showValidateButton]=\"activeLayerSuggestion\"\n >\n <ng-content *ngIf=\"activeLayerSuggestion\">\n <ng-icon name=\"iconoirRefresh\"></ng-icon>\n </ng-content>\n </gn-ui-url-input>\n\n <p class=\"text-sm text-red-500 pl-4\" *ngIf=\"errorMessage\" translate>\n editor.record.form.field.onlineResource.edit.identifier.error\n </p>\n\n <gn-ui-text-input\n class=\"grow border-b border-gray-300 pb-4\"\n [(value)]=\"_service.identifierInService\"\n [placeholder]=\"getIdentifierPlaceholder() | translate\"\n data-cy=\"identifier-in-service\"\n [disabled]=\"disabled\"\n *ngIf=\"\n !activeLayerSuggestion ||\n (_service.url && errorMessage) ||\n (modifyMode && (layers$ | async).length === 0)\n \"\n ></gn-ui-text-input>\n <gn-ui-autocomplete\n class=\"border-b border-gray-300 pb-4\"\n [placeholder]=\"\n 'editor.record.form.field.onlineResource.edit.identifier.select.label'\n | translate\n \"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleSelectValue($event)\"\n [displayWithFn]=\"displayWithFn\"\n [minCharacterCount]=\"0\"\n [clearOnSelection]=\"false\"\n *ngIf=\"activeLayerSuggestion && (layers$ | async)?.length > 0\"\n >\n </gn-ui-autocomplete>\n <gn-ui-button\n (buttonClick)=\"submit()\"\n [disabled]=\"disabled || !_service.identifierInService\"\n type=\"primary\"\n *ngIf=\"\n !modifyMode &&\n ((activeLayerSuggestion && (layers$ | async)) ||\n !activeLayerSuggestion ||\n (_service.url && errorMessage))\n \"\n >\n <span class=\"text-white font-bold\" translate>\n editor.record.form.field.onlineResource.edit.identifier.submit</span\n >\n </gn-ui-button>\n</div>\n" }]
40102
40229
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { service: [{
40103
40230
  type: Input
40104
40231
  }], protocolHint: [{
@@ -40107,9 +40234,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
40107
40234
  type: Input
40108
40235
  }], modifyMode: [{
40109
40236
  type: Input
40110
- }], urlChange: [{
40111
- type: Output
40112
- }], identifierSubmit: [{
40237
+ }], serviceChange: [{
40113
40238
  type: Output
40114
40239
  }] } });
40115
40240
 
@@ -40198,28 +40323,8 @@ class FormFieldOnlineResourcesComponent {
40198
40323
  this.handleError(e);
40199
40324
  }
40200
40325
  }
40201
- handleServiceUrlChange(url) {
40202
- this.valueChange.emit([
40203
- ...this.allResources,
40204
- {
40205
- ...this.newService,
40206
- url: new URL(url),
40207
- },
40208
- ]);
40209
- }
40210
- handleIdentifierSubmit(payload) {
40211
- this.valueChange.emit([
40212
- ...this.allResources,
40213
- {
40214
- ...this.newService,
40215
- url: new URL(payload.url),
40216
- },
40217
- ]);
40218
- }
40219
- handleServiceModify(oldService, newService) {
40220
- oldService.accessServiceProtocol = newService.accessServiceProtocol;
40221
- oldService.identifierInService = newService.identifierInService;
40222
- oldService.url = newService.url;
40326
+ handleServiceChange(service) {
40327
+ this.valueChange.emit([...this.allResources, service]);
40223
40328
  }
40224
40329
  handleResourcesChange(items) {
40225
40330
  const notLinks = items;
@@ -40269,7 +40374,7 @@ class FormFieldOnlineResourcesComponent {
40269
40374
  });
40270
40375
  }
40271
40376
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldOnlineResourcesComponent, deps: [{ token: NotificationsService }, { token: i2.TranslateService }, { token: PlatformServiceInterface }, { token: i0.ChangeDetectorRef }, { token: i1$a.MatDialog }], target: i0.ɵɵFactoryTarget.Component }); }
40272
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldOnlineResourcesComponent, isStandalone: true, selector: "gn-ui-form-field-online-resources", inputs: { metadataUuid: "metadataUuid", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col\">\n <gn-ui-switch-toggle\n [options]=\"typeOptions\"\n (selectedValue)=\"onSelectedTypeChange($event.value)\"\n extraClasses=\"grow text-sm\"\n data-cy=\"online-resources-type\"\n ></gn-ui-switch-toggle>\n <div class=\"h-[8px]\"></div>\n <gn-ui-file-input\n *ngIf=\"selectedType === 'download'\"\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n (fileChange)=\"handleFileChange($event)\"\n (uploadCancel)=\"handleUploadCancel()\"\n [uploadProgress]=\"uploadProgress\"\n (urlChange)=\"handleDownloadUrlChange($event)\"\n ></gn-ui-file-input>\n <div\n *ngIf=\"selectedType === 'service'\"\n class=\"w-full border-2 border-dashed rounded-lg p-6 flex flex-col gap-[16px]\"\n >\n <gn-ui-online-service-resource-input\n [service]=\"newService\"\n [disabled]=\"disabled$ | async\"\n (identifierSubmit)=\"handleIdentifierSubmit($event)\"\n ></gn-ui-online-service-resource-input>\n </div>\n <div class=\"h-[8px]\"></div>\n <gn-ui-sortable-list\n [items]=\"notLinkResources\"\n (itemsOrderChange)=\"handleResourcesChange($event)\"\n [elementTemplate]=\"template\"\n >\n </gn-ui-sortable-list>\n <ng-template #template let-onlineResource let-index=\"index\">\n <gn-ui-online-resource-card\n [onlineResource]=\"onlineResource\"\n (modifyClick)=\"handleResourceModify(onlineResource, index)\"\n ></gn-ui-online-resource-card>\n </ng-template>\n\n <ng-template #dialogTemplate let-onlineResource>\n <div class=\"flex flex-col gap-[16px]\">\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.title\n </h3>\n <gn-ui-text-input [(value)]=\"onlineResource.name\"></gn-ui-text-input>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n <ng-container *ngIf=\"onlineResource.type === 'service'; else urlInput\">\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-online-service-resource-input\n [service]=\"onlineResource\"\n [modifyMode]=\"true\"\n ></gn-ui-online-service-resource-input>\n </ng-container>\n <ng-template #urlInput>\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"true\"\n [value]=\"onlineResource.url\"\n [showValidateButton]=\"false\"\n ></gn-ui-url-input>\n </ng-template>\n </div>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "component", type: SwitchToggleComponent, selector: "gn-ui-switch-toggle", inputs: ["options", "ariaLabel", "extraClasses", "disabled"], outputs: ["selectedValue"] }, { kind: "component", type: FileInputComponent, selector: "gn-ui-file-input", inputs: ["maxSizeMB", "uploadProgress", "disabled"], outputs: ["fileChange", "urlChange", "uploadCancel"] }, { kind: "component", type: OnlineServiceResourceInputComponent, selector: "gn-ui-online-service-resource-input", inputs: ["service", "protocolHint", "disabled", "modifyMode"], outputs: ["urlChange", "identifierSubmit"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elementTemplate", "items"], outputs: ["itemsOrderChange"] }, { kind: "component", type: OnlineResourceCardComponent, selector: "gn-ui-online-resource-card", inputs: ["onlineResource"], outputs: ["modifyClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "disabled", "extraClass", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40377
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldOnlineResourcesComponent, isStandalone: true, selector: "gn-ui-form-field-online-resources", inputs: { metadataUuid: "metadataUuid", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-col\">\n <gn-ui-switch-toggle\n [options]=\"typeOptions\"\n (selectedValue)=\"onSelectedTypeChange($event.value)\"\n extraClasses=\"grow text-sm\"\n data-cy=\"online-resources-type\"\n ></gn-ui-switch-toggle>\n <div class=\"h-[8px]\"></div>\n <gn-ui-file-input\n *ngIf=\"selectedType === 'download'\"\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n (fileChange)=\"handleFileChange($event)\"\n (uploadCancel)=\"handleUploadCancel()\"\n [uploadProgress]=\"uploadProgress\"\n (urlChange)=\"handleDownloadUrlChange($event)\"\n ></gn-ui-file-input>\n <div\n *ngIf=\"selectedType === 'service'\"\n class=\"w-full border-2 border-dashed rounded-lg p-6 flex flex-col gap-[16px]\"\n >\n <gn-ui-online-service-resource-input\n [service]=\"newService\"\n (serviceChange)=\"handleServiceChange($event)\"\n ></gn-ui-online-service-resource-input>\n </div>\n <div class=\"h-[8px]\"></div>\n <gn-ui-sortable-list\n [items]=\"notLinkResources\"\n (itemsOrderChange)=\"handleResourcesChange($event)\"\n [elementTemplate]=\"template\"\n >\n </gn-ui-sortable-list>\n <ng-template #template let-onlineResource let-index=\"index\">\n <gn-ui-online-resource-card\n [onlineResource]=\"onlineResource\"\n (modifyClick)=\"handleResourceModify(onlineResource, index)\"\n ></gn-ui-online-resource-card>\n </ng-template>\n\n <ng-template #dialogTemplate let-onlineResource>\n <div class=\"flex flex-col gap-[16px]\">\n <ng-container *ngIf=\"onlineResource.type === 'service'; else urlInput\">\n <gn-ui-online-service-resource-input\n [service]=\"onlineResource\"\n [modifyMode]=\"true\"\n [disabled]=\"true\"\n ></gn-ui-online-service-resource-input>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n </ng-container>\n <ng-template #urlInput>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.title\n </h3>\n <gn-ui-text-input [(value)]=\"onlineResource.name\"></gn-ui-text-input>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"true\"\n [value]=\"onlineResource.url\"\n [showValidateButton]=\"false\"\n ></gn-ui-url-input>\n </ng-template>\n </div>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SwitchToggleComponent, selector: "gn-ui-switch-toggle", inputs: ["options", "ariaLabel", "extraClasses", "disabled"], outputs: ["selectedValue"] }, { kind: "component", type: FileInputComponent, selector: "gn-ui-file-input", inputs: ["maxSizeMB", "uploadProgress", "disabled"], outputs: ["fileChange", "urlChange", "uploadCancel"] }, { kind: "component", type: OnlineServiceResourceInputComponent, selector: "gn-ui-online-service-resource-input", inputs: ["service", "protocolHint", "disabled", "modifyMode"], outputs: ["serviceChange"] }, { kind: "component", type: UrlInputComponent, selector: "gn-ui-url-input", inputs: ["value", "extraClass", "placeholder", "disabled", "showValidateButton"], outputs: ["valueChange", "uploadClick"] }, { kind: "component", type: SortableListComponent, selector: "gn-ui-sortable-list", inputs: ["elementTemplate", "items"], outputs: ["itemsOrderChange"] }, { kind: "component", type: OnlineResourceCardComponent, selector: "gn-ui-online-resource-card", inputs: ["onlineResource"], outputs: ["modifyClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "extraClass", "placeholder", "required", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "disabled", "extraClass", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40273
40378
  }
40274
40379
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldOnlineResourcesComponent, decorators: [{
40275
40380
  type: Component,
@@ -40284,7 +40389,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
40284
40389
  TextInputComponent,
40285
40390
  TextAreaComponent,
40286
40391
  TranslateModule,
40287
- ], template: "<div class=\"flex flex-col\">\n <gn-ui-switch-toggle\n [options]=\"typeOptions\"\n (selectedValue)=\"onSelectedTypeChange($event.value)\"\n extraClasses=\"grow text-sm\"\n data-cy=\"online-resources-type\"\n ></gn-ui-switch-toggle>\n <div class=\"h-[8px]\"></div>\n <gn-ui-file-input\n *ngIf=\"selectedType === 'download'\"\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n (fileChange)=\"handleFileChange($event)\"\n (uploadCancel)=\"handleUploadCancel()\"\n [uploadProgress]=\"uploadProgress\"\n (urlChange)=\"handleDownloadUrlChange($event)\"\n ></gn-ui-file-input>\n <div\n *ngIf=\"selectedType === 'service'\"\n class=\"w-full border-2 border-dashed rounded-lg p-6 flex flex-col gap-[16px]\"\n >\n <gn-ui-online-service-resource-input\n [service]=\"newService\"\n [disabled]=\"disabled$ | async\"\n (identifierSubmit)=\"handleIdentifierSubmit($event)\"\n ></gn-ui-online-service-resource-input>\n </div>\n <div class=\"h-[8px]\"></div>\n <gn-ui-sortable-list\n [items]=\"notLinkResources\"\n (itemsOrderChange)=\"handleResourcesChange($event)\"\n [elementTemplate]=\"template\"\n >\n </gn-ui-sortable-list>\n <ng-template #template let-onlineResource let-index=\"index\">\n <gn-ui-online-resource-card\n [onlineResource]=\"onlineResource\"\n (modifyClick)=\"handleResourceModify(onlineResource, index)\"\n ></gn-ui-online-resource-card>\n </ng-template>\n\n <ng-template #dialogTemplate let-onlineResource>\n <div class=\"flex flex-col gap-[16px]\">\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.title\n </h3>\n <gn-ui-text-input [(value)]=\"onlineResource.name\"></gn-ui-text-input>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n <ng-container *ngIf=\"onlineResource.type === 'service'; else urlInput\">\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-online-service-resource-input\n [service]=\"onlineResource\"\n [modifyMode]=\"true\"\n ></gn-ui-online-service-resource-input>\n </ng-container>\n <ng-template #urlInput>\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"true\"\n [value]=\"onlineResource.url\"\n [showValidateButton]=\"false\"\n ></gn-ui-url-input>\n </ng-template>\n </div>\n </ng-template>\n</div>\n" }]
40392
+ ], template: "<div class=\"flex flex-col\">\n <gn-ui-switch-toggle\n [options]=\"typeOptions\"\n (selectedValue)=\"onSelectedTypeChange($event.value)\"\n extraClasses=\"grow text-sm\"\n data-cy=\"online-resources-type\"\n ></gn-ui-switch-toggle>\n <div class=\"h-[8px]\"></div>\n <gn-ui-file-input\n *ngIf=\"selectedType === 'download'\"\n [maxSizeMB]=\"MAX_UPLOAD_SIZE_MB\"\n (fileChange)=\"handleFileChange($event)\"\n (uploadCancel)=\"handleUploadCancel()\"\n [uploadProgress]=\"uploadProgress\"\n (urlChange)=\"handleDownloadUrlChange($event)\"\n ></gn-ui-file-input>\n <div\n *ngIf=\"selectedType === 'service'\"\n class=\"w-full border-2 border-dashed rounded-lg p-6 flex flex-col gap-[16px]\"\n >\n <gn-ui-online-service-resource-input\n [service]=\"newService\"\n (serviceChange)=\"handleServiceChange($event)\"\n ></gn-ui-online-service-resource-input>\n </div>\n <div class=\"h-[8px]\"></div>\n <gn-ui-sortable-list\n [items]=\"notLinkResources\"\n (itemsOrderChange)=\"handleResourcesChange($event)\"\n [elementTemplate]=\"template\"\n >\n </gn-ui-sortable-list>\n <ng-template #template let-onlineResource let-index=\"index\">\n <gn-ui-online-resource-card\n [onlineResource]=\"onlineResource\"\n (modifyClick)=\"handleResourceModify(onlineResource, index)\"\n ></gn-ui-online-resource-card>\n </ng-template>\n\n <ng-template #dialogTemplate let-onlineResource>\n <div class=\"flex flex-col gap-[16px]\">\n <ng-container *ngIf=\"onlineResource.type === 'service'; else urlInput\">\n <gn-ui-online-service-resource-input\n [service]=\"onlineResource\"\n [modifyMode]=\"true\"\n [disabled]=\"true\"\n ></gn-ui-online-service-resource-input>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n </ng-container>\n <ng-template #urlInput>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.title\n </h3>\n <gn-ui-text-input [(value)]=\"onlineResource.name\"></gn-ui-text-input>\n </div>\n <div>\n <h3 class=\"text-[16px] font-bold text-main mb-[12px]\" translate>\n editor.record.form.field.onlineResource.edit.description\n </h3>\n <gn-ui-text-area\n [(value)]=\"onlineResource.description\"\n ></gn-ui-text-area>\n </div>\n <span class=\"w-full border-b border-gray-300\"></span>\n <gn-ui-url-input\n class=\"w-full\"\n [disabled]=\"true\"\n [value]=\"onlineResource.url\"\n [showValidateButton]=\"false\"\n ></gn-ui-url-input>\n </ng-template>\n </div>\n </ng-template>\n</div>\n" }]
40288
40393
  }], ctorParameters: () => [{ type: NotificationsService }, { type: i2.TranslateService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: i1$a.MatDialog }], propDecorators: { metadataUuid: [{
40289
40394
  type: Input
40290
40395
  }], value: [{
@@ -40505,11 +40610,11 @@ class FormFieldUpdateFrequencyComponent {
40505
40610
  })));
40506
40611
  }
40507
40612
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldUpdateFrequencyComponent, deps: [{ token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
40508
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldUpdateFrequencyComponent, isStandalone: true, selector: "gn-ui-form-field-update-frequency", inputs: { value: "value" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<div class=\"flex flex-col gap-2\">\n <gn-ui-check-toggle\n [label]=\"'editor.record.form.updateFrequency.planned' | translate\"\n [value]=\"planned\"\n (toggled)=\"onPlannedToggled()\"\n ></gn-ui-check-toggle>\n <gn-ui-dropdown-selector\n title=\"updateFrequency\"\n [showTitle]=\"false\"\n [choices]=\"choices\"\n [selected]=\"selectedFrequency\"\n (selectValue)=\"onSelectFrequencyValue($event)\"\n [disabled]=\"!planned\"\n [extraBtnClass]=\"'input-as-button gn-ui-text-input'\"\n >\n </gn-ui-dropdown-selector>\n</div>\n", styles: ["gn-ui-dropdown-selector{max-width:calc(50% - 16px)}\n"], dependencies: [{ kind: "component", type: CheckToggleComponent, selector: "gn-ui-check-toggle", inputs: ["title", "label", "value", "color"], outputs: ["toggled"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40613
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldUpdateFrequencyComponent, isStandalone: true, selector: "gn-ui-form-field-update-frequency", inputs: { value: "value" }, outputs: { valueChange: "valueChange" }, ngImport: i0, template: "<div class=\"flex flex-col gap-2\">\n <gn-ui-check-toggle\n [label]=\"'editor.record.form.updateFrequency.planned' | translate\"\n [value]=\"planned\"\n (toggled)=\"onPlannedToggled()\"\n ></gn-ui-check-toggle>\n <gn-ui-dropdown-selector\n [title]=\"'editor.record.form.field.updateFrequency' | translate\"\n [showTitle]=\"false\"\n [choices]=\"choices\"\n [selected]=\"selectedFrequency\"\n (selectValue)=\"onSelectFrequencyValue($event)\"\n [disabled]=\"!planned\"\n [extraBtnClass]=\"'input-as-button gn-ui-text-input'\"\n >\n </gn-ui-dropdown-selector>\n</div>\n", styles: ["gn-ui-dropdown-selector{max-width:calc(50% - 16px)}\n"], dependencies: [{ kind: "component", type: CheckToggleComponent, selector: "gn-ui-check-toggle", inputs: ["title", "label", "value", "color"], outputs: ["toggled"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40509
40614
  }
40510
40615
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldUpdateFrequencyComponent, decorators: [{
40511
40616
  type: Component,
40512
- args: [{ selector: 'gn-ui-form-field-update-frequency', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CheckToggleComponent, DropdownSelectorComponent, TranslateModule], template: "<div class=\"flex flex-col gap-2\">\n <gn-ui-check-toggle\n [label]=\"'editor.record.form.updateFrequency.planned' | translate\"\n [value]=\"planned\"\n (toggled)=\"onPlannedToggled()\"\n ></gn-ui-check-toggle>\n <gn-ui-dropdown-selector\n title=\"updateFrequency\"\n [showTitle]=\"false\"\n [choices]=\"choices\"\n [selected]=\"selectedFrequency\"\n (selectValue)=\"onSelectFrequencyValue($event)\"\n [disabled]=\"!planned\"\n [extraBtnClass]=\"'input-as-button gn-ui-text-input'\"\n >\n </gn-ui-dropdown-selector>\n</div>\n", styles: ["gn-ui-dropdown-selector{max-width:calc(50% - 16px)}\n"] }]
40617
+ args: [{ selector: 'gn-ui-form-field-update-frequency', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CheckToggleComponent, DropdownSelectorComponent, TranslateModule], template: "<div class=\"flex flex-col gap-2\">\n <gn-ui-check-toggle\n [label]=\"'editor.record.form.updateFrequency.planned' | translate\"\n [value]=\"planned\"\n (toggled)=\"onPlannedToggled()\"\n ></gn-ui-check-toggle>\n <gn-ui-dropdown-selector\n [title]=\"'editor.record.form.field.updateFrequency' | translate\"\n [showTitle]=\"false\"\n [choices]=\"choices\"\n [selected]=\"selectedFrequency\"\n (selectValue)=\"onSelectFrequencyValue($event)\"\n [disabled]=\"!planned\"\n [extraBtnClass]=\"'input-as-button gn-ui-text-input'\"\n >\n </gn-ui-dropdown-selector>\n</div>\n", styles: ["gn-ui-dropdown-selector{max-width:calc(50% - 16px)}\n"] }]
40513
40618
  }], ctorParameters: () => [{ type: i2.TranslateService }], propDecorators: { value: [{
40514
40619
  type: Input
40515
40620
  }], valueChange: [{