geonetwork-ui 2.2.0-dev.f866474c → 2.3.0-dev.179fba83

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 (596) hide show
  1. package/esm2022/libs/api/metadata-converter/src/index.mjs +5 -5
  2. package/esm2022/libs/api/metadata-converter/src/lib/base.converter.mjs +14 -0
  3. package/esm2022/libs/api/metadata-converter/src/lib/find-converter.mjs +15 -0
  4. package/esm2022/libs/api/metadata-converter/src/lib/gn4/atomic-operations.mjs +29 -2
  5. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.converter.mjs +52 -0
  6. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +102 -61
  7. package/esm2022/libs/api/metadata-converter/src/lib/gn4/index.mjs +4 -0
  8. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
  9. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/index.mjs +2 -0
  10. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.mjs +123 -0
  11. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +116 -0
  12. package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +138 -0
  13. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/index.mjs +2 -0
  14. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.mjs +242 -0
  15. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +102 -74
  16. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/individual-name.mjs +18 -0
  17. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.mjs +14 -0
  18. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/role.mapper.mjs +48 -0
  19. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/status.mapper.mjs +18 -0
  20. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/update-frequency.mapper.mjs +64 -0
  21. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +116 -79
  22. package/esm2022/libs/api/metadata-converter/src/lib/xml-utils.mjs +76 -14
  23. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +2 -2
  24. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +4 -4
  25. package/esm2022/libs/api/repository/src/lib/gn4/index.mjs +3 -1
  26. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +10 -3
  27. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +14 -5
  28. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +33 -8
  29. package/esm2022/libs/api/repository/src/lib/gn4/selection/selection.service.mjs +13 -26
  30. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  31. package/esm2022/libs/common/domain/src/lib/model/search/aggregation.model.mjs +1 -1
  32. package/esm2022/libs/common/domain/src/lib/model/search/field.model.mjs +2 -0
  33. package/esm2022/libs/common/domain/src/lib/model/search/filter.model.mjs +1 -1
  34. package/esm2022/libs/common/domain/src/lib/model/search/index.mjs +2 -1
  35. package/esm2022/libs/common/domain/src/lib/model/search/search.model.mjs +1 -1
  36. package/esm2022/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.mjs +1 -1
  37. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  38. package/esm2022/libs/data-access/gn4/src/openapi/api/records.api.service.mjs +35 -7
  39. package/esm2022/libs/data-access/gn4/src/openapi/model/models.mjs +1 -2
  40. package/esm2022/libs/feature/catalog/src/lib/my-org/my-org.service.mjs +4 -10
  41. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +6 -5
  42. package/esm2022/libs/feature/editor/src/index.mjs +6 -1
  43. package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +8 -0
  44. package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +26 -0
  45. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +30 -0
  46. package/esm2022/libs/feature/editor/src/lib/+state/editor.models.mjs +2 -0
  47. package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +42 -0
  48. package/esm2022/libs/feature/editor/src/lib/+state/editor.selectors.mjs +13 -0
  49. package/esm2022/libs/feature/editor/src/lib/expressions.mjs +13 -0
  50. package/esm2022/libs/feature/editor/src/lib/feature-editor.module.mjs +16 -4
  51. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +34 -0
  52. package/esm2022/libs/feature/editor/src/lib/models/fields.model.mjs +2 -0
  53. package/esm2022/libs/feature/editor/src/lib/record-form/record-form.component.mjs +17 -11
  54. package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +24 -46
  55. package/esm2022/libs/feature/map/src/index.mjs +2 -1
  56. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component.mjs +7 -3
  57. package/esm2022/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.mjs +106 -0
  58. package/esm2022/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.mjs +72 -0
  59. package/esm2022/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.mjs +64 -0
  60. package/esm2022/libs/feature/map/src/lib/constant/index.mjs +2 -1
  61. package/esm2022/libs/feature/map/src/lib/constant/projections.mjs +2 -0
  62. package/esm2022/libs/feature/map/src/lib/feature-map.module.mjs +29 -5
  63. package/esm2022/libs/feature/map/src/lib/geocoding/geocoding.component.mjs +93 -0
  64. package/esm2022/libs/feature/map/src/lib/geocoding.service.mjs +40 -0
  65. package/esm2022/libs/feature/map/src/lib/layers-panel/layers-panel.component.mjs +12 -5
  66. package/esm2022/libs/feature/map/src/lib/map-context/map-context.model.mjs +2 -1
  67. package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +61 -24
  68. package/esm2022/libs/feature/map/src/lib/utils/index.mjs +1 -3
  69. package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +63 -69
  70. package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +13 -13
  71. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +34 -21
  72. package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +2 -2
  73. package/esm2022/libs/feature/router/src/lib/default/index.mjs +2 -1
  74. package/esm2022/libs/feature/router/src/lib/default/router.service.mjs +1 -1
  75. package/esm2022/libs/feature/search/src/index.mjs +4 -1
  76. package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +7 -4
  77. package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +2 -6
  78. package/esm2022/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.mjs +1 -1
  79. package/esm2022/libs/feature/search/src/lib/filter-geometry.token.mjs +4 -0
  80. package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +7 -3
  81. package/esm2022/libs/feature/search/src/lib/record-url.token.mjs +4 -0
  82. package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +3 -3
  83. package/esm2022/libs/feature/search/src/lib/results-table/results-table.component.mjs +128 -0
  84. package/esm2022/libs/feature/search/src/lib/state/effects.mjs +6 -4
  85. package/esm2022/libs/feature/search/src/lib/state/search.facade.mjs +3 -2
  86. package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +41 -26
  87. package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +11 -9
  88. package/esm2022/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.mjs +4 -4
  89. package/esm2022/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.mjs +1 -1
  90. package/esm2022/libs/ui/elements/src/index.mjs +4 -1
  91. package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +3 -3
  92. package/esm2022/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.mjs +27 -0
  93. package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +17 -0
  94. package/esm2022/libs/ui/elements/src/lib/max-lines/max-lines.component.mjs +5 -3
  95. package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +3 -3
  96. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +47 -16
  97. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +3 -4
  98. package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +9 -6
  99. package/esm2022/libs/ui/elements/src/lib/related-record-card/related-record-card.component.mjs +3 -3
  100. package/esm2022/libs/ui/elements/src/lib/thumbnail/thumbnail.component.mjs +9 -4
  101. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +20 -7
  102. package/esm2022/libs/ui/inputs/src/index.mjs +2 -1
  103. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +3 -3
  104. package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +10 -9
  105. package/esm2022/libs/ui/inputs/src/lib/checkbox/checkbox.component.mjs +3 -3
  106. package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +3 -3
  107. package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +3 -3
  108. package/esm2022/libs/ui/inputs/src/lib/editable-label/editable-label.directive.mjs +46 -0
  109. package/esm2022/libs/ui/inputs/src/lib/files-drop/files-drop.directive.mjs +59 -0
  110. package/esm2022/libs/ui/inputs/src/lib/form-field/form-field.component.mjs +4 -2
  111. package/esm2022/libs/ui/inputs/src/lib/form-field/form-field.model.mjs +1 -1
  112. package/esm2022/libs/ui/inputs/src/lib/image-input/image-input.component.mjs +183 -0
  113. package/esm2022/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.mjs +3 -3
  114. package/esm2022/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.mjs +2 -2
  115. package/esm2022/libs/ui/inputs/src/lib/text-area/text-area.component.mjs +3 -3
  116. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +19 -8
  117. package/esm2022/libs/ui/layout/src/index.mjs +3 -1
  118. package/esm2022/libs/ui/layout/src/lib/carousel/carousel.component.mjs +3 -3
  119. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.mjs +36 -0
  120. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +37 -0
  121. package/esm2022/libs/ui/search/src/index.mjs +1 -2
  122. package/esm2022/libs/ui/search/src/lib/record-preview-card/record-preview-card.component.mjs +1 -1
  123. package/esm2022/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.mjs +1 -1
  124. package/esm2022/libs/ui/search/src/lib/record-preview-list/record-preview-list.component.mjs +1 -1
  125. package/esm2022/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.mjs +1 -1
  126. package/esm2022/libs/ui/search/src/lib/record-preview-title/record-preview-title.component.mjs +1 -1
  127. package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +9 -10
  128. package/esm2022/libs/ui/widgets/src/lib/badge/badge.component.mjs +3 -3
  129. package/esm2022/libs/util/i18n/src/index.mjs +1 -2
  130. package/esm2022/libs/util/i18n/src/lib/i18n.constants.mjs +18 -1
  131. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +29 -13
  132. package/esm2022/libs/util/shared/src/lib/utils/bytes-convert.mjs +4 -0
  133. package/esm2022/libs/util/shared/src/lib/utils/image-resize.mjs +60 -0
  134. package/esm2022/libs/util/shared/src/lib/utils/index.mjs +8 -5
  135. package/esm2022/libs/util/shared/src/lib/utils/temporal-extent-union.mjs +32 -0
  136. package/esm2022/translations/de.json +143 -109
  137. package/esm2022/translations/en.json +75 -41
  138. package/esm2022/translations/es.json +53 -19
  139. package/esm2022/translations/fr.json +69 -35
  140. package/esm2022/translations/it.json +70 -36
  141. package/esm2022/translations/nl.json +54 -20
  142. package/esm2022/translations/pt.json +53 -19
  143. package/fesm2022/geonetwork-ui.mjs +5799 -3893
  144. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  145. package/libs/api/metadata-converter/src/index.d.ts +4 -4
  146. package/libs/api/metadata-converter/src/index.d.ts.map +1 -1
  147. package/libs/api/metadata-converter/src/lib/{metadata-base.mapper.d.ts → base.converter.d.ts} +3 -3
  148. package/libs/api/metadata-converter/src/lib/base.converter.d.ts.map +1 -0
  149. package/libs/api/metadata-converter/src/lib/find-converter.d.ts +3 -0
  150. package/libs/api/metadata-converter/src/lib/find-converter.d.ts.map +1 -0
  151. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts +3 -0
  152. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
  153. package/libs/api/metadata-converter/src/lib/gn4/{gn4.metadata.mapper.d.ts → gn4.converter.d.ts} +5 -5
  154. package/libs/api/metadata-converter/src/lib/gn4/gn4.converter.d.ts.map +1 -0
  155. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts +0 -1
  156. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  157. package/libs/api/metadata-converter/src/lib/gn4/index.d.ts +4 -0
  158. package/libs/api/metadata-converter/src/lib/gn4/index.d.ts.map +1 -0
  159. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +4 -5
  160. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  161. package/libs/api/metadata-converter/src/lib/iso19115-3/index.d.ts +2 -0
  162. package/libs/api/metadata-converter/src/lib/iso19115-3/index.d.ts.map +1 -0
  163. package/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.d.ts +9 -0
  164. package/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.d.ts.map +1 -0
  165. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts +20 -0
  166. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts.map +1 -0
  167. package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts +21 -0
  168. package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts.map +1 -0
  169. package/libs/api/metadata-converter/src/lib/iso19139/index.d.ts +2 -0
  170. package/libs/api/metadata-converter/src/lib/iso19139/index.d.ts.map +1 -0
  171. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts +11 -0
  172. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts.map +1 -0
  173. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +39 -10
  174. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  175. package/libs/api/metadata-converter/src/lib/iso19139/utils/individual-name.d.ts +8 -0
  176. package/libs/api/metadata-converter/src/lib/iso19139/utils/individual-name.d.ts.map +1 -0
  177. package/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.d.ts +3 -0
  178. package/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.d.ts.map +1 -0
  179. package/libs/api/metadata-converter/src/lib/iso19139/utils/role.mapper.d.ts.map +1 -0
  180. package/libs/api/metadata-converter/src/lib/iso19139/utils/status.mapper.d.ts.map +1 -0
  181. package/libs/api/metadata-converter/src/lib/iso19139/utils/update-frequency.mapper.d.ts.map +1 -0
  182. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +43 -6
  183. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  184. package/libs/api/metadata-converter/src/lib/xml-utils.d.ts +14 -1
  185. package/libs/api/metadata-converter/src/lib/xml-utils.d.ts.map +1 -1
  186. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  187. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +2 -2
  188. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  189. package/libs/api/repository/src/lib/gn4/index.d.ts +2 -0
  190. package/libs/api/repository/src/lib/gn4/index.d.ts.map +1 -1
  191. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts.map +1 -1
  192. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts +1 -1
  193. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
  194. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +9 -2
  195. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  196. package/libs/api/repository/src/lib/gn4/selection/selection.service.d.ts +4 -5
  197. package/libs/api/repository/src/lib/gn4/selection/selection.service.d.ts.map +1 -1
  198. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +36 -20
  199. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  200. package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts +1 -1
  201. package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts.map +1 -1
  202. package/libs/common/domain/src/lib/model/search/field.model.d.ts +2 -0
  203. package/libs/common/domain/src/lib/model/search/field.model.d.ts.map +1 -0
  204. package/libs/common/domain/src/lib/model/search/filter.model.d.ts +1 -1
  205. package/libs/common/domain/src/lib/model/search/filter.model.d.ts.map +1 -1
  206. package/libs/common/domain/src/lib/model/search/index.d.ts +1 -0
  207. package/libs/common/domain/src/lib/model/search/index.d.ts.map +1 -1
  208. package/libs/common/domain/src/lib/model/search/search.model.d.ts +2 -3
  209. package/libs/common/domain/src/lib/model/search/search.model.d.ts.map +1 -1
  210. package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts +1 -0
  211. package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts.map +1 -1
  212. package/libs/common/domain/src/lib/platform.service.interface.d.ts +1 -1
  213. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  214. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts +9 -5
  215. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts.map +1 -1
  216. package/libs/data-access/gn4/src/openapi/model/models.d.ts +0 -1
  217. package/libs/data-access/gn4/src/openapi/model/models.d.ts.map +1 -1
  218. package/libs/feature/catalog/src/lib/my-org/my-org.service.d.ts +0 -1
  219. package/libs/feature/catalog/src/lib/my-org/my-org.service.d.ts.map +1 -1
  220. package/libs/feature/dataviz/src/lib/service/data.service.d.ts +15 -2
  221. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  222. package/libs/feature/editor/src/index.d.ts +5 -0
  223. package/libs/feature/editor/src/index.d.ts.map +1 -1
  224. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +23 -0
  225. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -0
  226. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts +15 -0
  227. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts.map +1 -0
  228. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +19 -0
  229. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -0
  230. package/libs/feature/editor/src/lib/+state/editor.models.d.ts +2 -0
  231. package/libs/feature/editor/src/lib/+state/editor.models.d.ts.map +1 -0
  232. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts +18 -0
  233. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -0
  234. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +15 -0
  235. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -0
  236. package/libs/feature/editor/src/lib/expressions.d.ts +4 -0
  237. package/libs/feature/editor/src/lib/expressions.d.ts.map +1 -0
  238. package/libs/feature/editor/src/lib/feature-editor.module.d.ts +3 -1
  239. package/libs/feature/editor/src/lib/feature-editor.module.d.ts.map +1 -1
  240. package/libs/feature/editor/src/lib/fields.config.d.ts +3 -0
  241. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -0
  242. package/libs/feature/editor/src/lib/models/fields.model.d.ts +15 -0
  243. package/libs/feature/editor/src/lib/models/fields.model.d.ts.map +1 -0
  244. package/libs/feature/editor/src/lib/record-form/record-form.component.d.ts +10 -5
  245. package/libs/feature/editor/src/lib/record-form/record-form.component.d.ts.map +1 -1
  246. package/libs/feature/editor/src/lib/services/editor.service.d.ts +3 -13
  247. package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
  248. package/libs/feature/map/src/index.d.ts +1 -0
  249. package/libs/feature/map/src/index.d.ts.map +1 -1
  250. package/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component.d.ts.map +1 -1
  251. package/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.d.ts +22 -0
  252. package/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.d.ts.map +1 -0
  253. package/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.d.ts +23 -0
  254. package/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.d.ts.map +1 -0
  255. package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts +22 -0
  256. package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts.map +1 -0
  257. package/libs/feature/map/src/lib/constant/index.d.ts +1 -0
  258. package/libs/feature/map/src/lib/constant/index.d.ts.map +1 -1
  259. package/libs/feature/map/src/lib/constant/projections.d.ts.map +1 -0
  260. package/libs/feature/map/src/lib/feature-map.module.d.ts +16 -12
  261. package/libs/feature/map/src/lib/feature-map.module.d.ts.map +1 -1
  262. package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts +25 -0
  263. package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts.map +1 -0
  264. package/libs/feature/map/src/lib/geocoding.service.d.ts +18 -0
  265. package/libs/feature/map/src/lib/geocoding.service.d.ts.map +1 -0
  266. package/libs/feature/map/src/lib/layers-panel/layers-panel.component.d.ts +2 -0
  267. package/libs/feature/map/src/lib/layers-panel/layers-panel.component.d.ts.map +1 -1
  268. package/libs/feature/map/src/lib/map-context/map-context.model.d.ts +10 -5
  269. package/libs/feature/map/src/lib/map-context/map-context.model.d.ts.map +1 -1
  270. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts +2 -0
  271. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +1 -1
  272. package/libs/feature/map/src/lib/utils/index.d.ts +0 -2
  273. package/libs/feature/map/src/lib/utils/index.d.ts.map +1 -1
  274. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts +13 -12
  275. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts.map +1 -1
  276. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +1 -3
  277. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  278. package/libs/feature/router/src/lib/default/index.d.ts +1 -0
  279. package/libs/feature/router/src/lib/default/index.d.ts.map +1 -1
  280. package/libs/feature/router/src/lib/default/router.service.d.ts +1 -1
  281. package/libs/feature/router/src/lib/default/router.service.d.ts.map +1 -1
  282. package/libs/feature/search/src/index.d.ts +3 -0
  283. package/libs/feature/search/src/index.d.ts.map +1 -1
  284. package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts +5 -4
  285. package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts.map +1 -1
  286. package/libs/feature/search/src/lib/feature-search.module.d.ts +0 -4
  287. package/libs/feature/search/src/lib/feature-search.module.d.ts.map +1 -1
  288. package/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.d.ts +3 -2
  289. package/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.d.ts.map +1 -1
  290. package/libs/feature/search/src/lib/filter-geometry.token.d.ts +4 -0
  291. package/libs/feature/search/src/lib/filter-geometry.token.d.ts.map +1 -0
  292. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +1 -1
  293. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
  294. package/libs/feature/search/src/lib/record-url.token.d.ts +3 -0
  295. package/libs/feature/search/src/lib/record-url.token.d.ts.map +1 -0
  296. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts +33 -0
  297. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts.map +1 -0
  298. package/libs/feature/search/src/lib/state/effects.d.ts.map +1 -1
  299. package/libs/feature/search/src/lib/state/search.facade.d.ts +1 -1
  300. package/libs/feature/search/src/lib/state/search.facade.d.ts.map +1 -1
  301. package/libs/feature/search/src/lib/utils/service/fields.d.ts +21 -8
  302. package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
  303. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
  304. package/libs/ui/dataviz/src/lib/chart/chart.component.d.ts +1 -1
  305. package/libs/ui/elements/src/index.d.ts +3 -0
  306. package/libs/ui/elements/src/index.d.ts.map +1 -1
  307. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -1
  308. package/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.d.ts +10 -0
  309. package/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.d.ts.map +1 -0
  310. package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts +8 -0
  311. package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts.map +1 -0
  312. package/libs/ui/elements/src/lib/max-lines/max-lines.component.d.ts.map +1 -1
  313. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +16 -5
  314. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
  315. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  316. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts +3 -1
  317. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts.map +1 -1
  318. package/libs/ui/elements/src/lib/thumbnail/thumbnail.component.d.ts +3 -2
  319. package/libs/ui/elements/src/lib/thumbnail/thumbnail.component.d.ts.map +1 -1
  320. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +10 -8
  321. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  322. package/libs/ui/inputs/src/index.d.ts +1 -0
  323. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  324. package/libs/ui/inputs/src/lib/button/button.component.d.ts +1 -1
  325. package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
  326. package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts +13 -0
  327. package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts.map +1 -0
  328. package/libs/ui/inputs/src/lib/files-drop/files-drop.directive.d.ts +14 -0
  329. package/libs/ui/inputs/src/lib/files-drop/files-drop.directive.d.ts.map +1 -0
  330. package/libs/ui/inputs/src/lib/form-field/form-field.component.d.ts.map +1 -1
  331. package/libs/ui/inputs/src/lib/form-field/form-field.model.d.ts +0 -1
  332. package/libs/ui/inputs/src/lib/form-field/form-field.model.d.ts.map +1 -1
  333. package/libs/ui/inputs/src/lib/image-input/image-input.component.d.ts +44 -0
  334. package/libs/ui/inputs/src/lib/image-input/image-input.component.d.ts.map +1 -0
  335. package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts +1 -1
  336. package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts.map +1 -1
  337. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +41 -39
  338. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
  339. package/libs/ui/layout/src/index.d.ts +2 -0
  340. package/libs/ui/layout/src/index.d.ts.map +1 -1
  341. package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts +14 -0
  342. package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts.map +1 -0
  343. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +15 -0
  344. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -0
  345. package/libs/ui/search/src/index.d.ts +0 -1
  346. package/libs/ui/search/src/index.d.ts.map +1 -1
  347. package/libs/ui/search/src/lib/ui-search.module.d.ts +15 -15
  348. package/libs/ui/search/src/lib/ui-search.module.d.ts.map +1 -1
  349. package/libs/util/i18n/src/index.d.ts +0 -1
  350. package/libs/util/i18n/src/index.d.ts.map +1 -1
  351. package/libs/util/i18n/src/lib/i18n.constants.d.ts +17 -0
  352. package/libs/util/i18n/src/lib/i18n.constants.d.ts.map +1 -1
  353. package/libs/util/shared/src/lib/links/link-utils.d.ts +19 -7
  354. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  355. package/libs/util/shared/src/lib/utils/bytes-convert.d.ts +2 -0
  356. package/libs/util/shared/src/lib/utils/bytes-convert.d.ts.map +1 -0
  357. package/libs/util/shared/src/lib/utils/image-resize.d.ts +3 -0
  358. package/libs/util/shared/src/lib/utils/image-resize.d.ts.map +1 -0
  359. package/libs/util/shared/src/lib/utils/index.d.ts +7 -4
  360. package/libs/util/shared/src/lib/utils/index.d.ts.map +1 -1
  361. package/libs/util/shared/src/lib/utils/temporal-extent-union.d.ts +5 -0
  362. package/libs/util/shared/src/lib/utils/temporal-extent-union.d.ts.map +1 -0
  363. package/package.json +5 -2
  364. package/src/libs/api/metadata-converter/src/index.ts +4 -4
  365. package/src/libs/api/metadata-converter/src/lib/{metadata-base.mapper.ts → base.converter.ts} +2 -2
  366. package/src/libs/api/metadata-converter/src/lib/find-converter.ts +16 -0
  367. package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +94 -12
  368. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +67 -12
  369. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +260 -29
  370. package/src/libs/api/metadata-converter/src/lib/fixtures/metawal.records.ts +580 -0
  371. package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +33 -1
  372. package/src/libs/api/metadata-converter/src/lib/gn4/{gn4.metadata.mapper.ts → gn4.converter.ts} +9 -5
  373. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +148 -76
  374. package/src/libs/api/metadata-converter/src/lib/gn4/index.ts +3 -0
  375. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +4 -5
  376. package/src/libs/api/metadata-converter/src/lib/iso19115-3/index.ts +1 -0
  377. package/src/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.ts +176 -0
  378. package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +329 -0
  379. package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +513 -0
  380. package/src/libs/api/metadata-converter/src/lib/iso19139/index.ts +1 -0
  381. package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +327 -0
  382. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +230 -134
  383. package/src/libs/api/metadata-converter/src/lib/iso19139/utils/individual-name.ts +20 -0
  384. package/src/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.ts +16 -0
  385. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +338 -178
  386. package/src/libs/api/metadata-converter/src/lib/xml-utils.ts +84 -16
  387. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +1 -1
  388. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +2 -2
  389. package/src/libs/api/repository/src/lib/gn4/index.ts +2 -0
  390. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +22 -2
  391. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +15 -4
  392. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +47 -8
  393. package/src/libs/api/repository/src/lib/gn4/selection/selection.service.ts +14 -38
  394. package/src/libs/common/domain/src/lib/index.ts +2 -0
  395. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +45 -24
  396. package/src/libs/common/domain/src/lib/model/search/aggregation.model.ts +1 -1
  397. package/src/libs/common/domain/src/lib/model/search/field.model.ts +1 -0
  398. package/src/libs/common/domain/src/lib/model/search/filter.model.ts +1 -1
  399. package/src/libs/common/domain/src/lib/model/search/index.ts +1 -0
  400. package/src/libs/common/domain/src/lib/model/search/search.model.ts +2 -2
  401. package/src/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.ts +1 -0
  402. package/src/libs/common/domain/src/lib/model/user/index.ts +1 -0
  403. package/src/libs/common/domain/src/lib/platform.service.interface.ts +1 -4
  404. package/src/libs/common/fixtures/src/lib/elasticsearch/full-response.ts +1 -1
  405. package/src/libs/common/fixtures/src/lib/gn4/groups.fixtures.ts +1 -1
  406. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +52 -10
  407. package/src/libs/data-access/gn4/src/openapi/api/records.api.service.ts +43 -12
  408. package/src/libs/data-access/gn4/src/openapi/model/models.ts +0 -1
  409. package/src/libs/data-access/gn4/src/spec.yaml +1 -1
  410. package/src/libs/feature/catalog/src/lib/my-org/my-org.service.ts +4 -16
  411. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +9 -6
  412. package/src/libs/feature/editor/src/index.ts +5 -0
  413. package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +24 -0
  414. package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +49 -0
  415. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +30 -0
  416. package/src/libs/feature/editor/src/lib/+state/editor.models.ts +1 -0
  417. package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +68 -0
  418. package/src/libs/feature/editor/src/lib/+state/editor.selectors.ts +39 -0
  419. package/src/libs/feature/editor/src/lib/components/overview-upload/overview-upload.component.css +0 -0
  420. package/src/libs/feature/editor/src/lib/components/overview-upload/overview-upload.component.html +8 -0
  421. package/src/libs/feature/editor/src/lib/components/overview-upload/overview-upload.component.ts +70 -0
  422. package/src/libs/feature/editor/src/lib/expressions.ts +16 -0
  423. package/src/libs/feature/editor/src/lib/feature-editor.module.ts +11 -0
  424. package/src/libs/feature/editor/src/lib/fields.config.ts +35 -0
  425. package/src/libs/feature/editor/src/lib/models/fields.model.ts +29 -0
  426. package/src/libs/feature/editor/src/lib/record-form/record-form.component.html +9 -7
  427. package/src/libs/feature/editor/src/lib/record-form/record-form.component.ts +13 -6
  428. package/src/libs/feature/editor/src/lib/services/editor.service.ts +39 -67
  429. package/src/libs/feature/map/src/index.ts +1 -0
  430. package/src/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component.ts +5 -1
  431. package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.css +0 -0
  432. package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.html +21 -0
  433. package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.ts +107 -0
  434. package/src/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.css +0 -0
  435. package/src/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.html +36 -0
  436. package/src/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.ts +80 -0
  437. package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.css +0 -0
  438. package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.html +37 -0
  439. package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.ts +64 -0
  440. package/src/libs/feature/map/src/lib/constant/index.ts +1 -0
  441. package/src/libs/feature/map/src/lib/feature-map.module.ts +14 -0
  442. package/src/libs/feature/map/src/lib/geocoding/geocoding.component.css +0 -0
  443. package/src/libs/feature/map/src/lib/geocoding/geocoding.component.html +39 -0
  444. package/src/libs/feature/map/src/lib/geocoding/geocoding.component.ts +99 -0
  445. package/src/libs/feature/map/src/lib/geocoding.service.ts +59 -0
  446. package/src/libs/feature/map/src/lib/layers-panel/layers-panel.component.html +14 -2
  447. package/src/libs/feature/map/src/lib/layers-panel/layers-panel.component.ts +5 -0
  448. package/src/libs/feature/map/src/lib/map-context/map-context.model.ts +10 -3
  449. package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +72 -28
  450. package/src/libs/feature/map/src/lib/utils/index.ts +0 -2
  451. package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +87 -96
  452. package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +12 -12
  453. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +23 -4
  454. package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +1 -1
  455. package/src/libs/feature/router/src/lib/default/index.ts +1 -0
  456. package/src/libs/feature/router/src/lib/default/router.service.ts +1 -1
  457. package/src/libs/feature/search/src/index.ts +3 -0
  458. package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.html +13 -4
  459. package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.ts +2 -1
  460. package/src/libs/feature/search/src/lib/feature-search.module.ts +1 -10
  461. package/src/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.ts +4 -4
  462. package/src/libs/feature/search/src/lib/filter-geometry.token.ts +7 -0
  463. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +9 -3
  464. package/src/libs/feature/search/src/lib/record-url.token.ts +4 -0
  465. package/src/libs/feature/search/src/lib/results-list/results-list.container.component.ts +1 -1
  466. package/src/libs/feature/search/src/lib/results-table/results-table.component.css +0 -0
  467. package/src/libs/feature/search/src/lib/results-table/results-table.component.html +112 -0
  468. package/src/libs/feature/search/src/lib/results-table/results-table.component.ts +164 -0
  469. package/src/libs/feature/search/src/lib/state/effects.ts +5 -4
  470. package/src/libs/feature/search/src/lib/state/search.facade.ts +2 -1
  471. package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +21 -16
  472. package/src/libs/feature/search/src/lib/utils/service/fields.ts +43 -34
  473. package/src/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.html +1 -0
  474. package/src/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.ts +1 -1
  475. package/src/libs/ui/elements/src/index.ts +3 -0
  476. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.html +4 -1
  477. package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.css +0 -0
  478. package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.html +30 -0
  479. package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.ts +15 -0
  480. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.css +5 -0
  481. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.html +39 -0
  482. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.ts +58 -0
  483. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.css +264 -0
  484. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.html +1 -0
  485. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +17 -0
  486. package/src/libs/ui/elements/src/lib/max-lines/max-lines.component.html +5 -1
  487. package/src/libs/ui/elements/src/lib/max-lines/max-lines.component.ts +1 -0
  488. package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +3 -3
  489. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.css +4 -0
  490. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +212 -68
  491. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +51 -10
  492. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +2 -3
  493. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.html +5 -5
  494. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +12 -4
  495. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.html +1 -1
  496. package/src/libs/ui/elements/src/lib/thumbnail/thumbnail.component.html +2 -2
  497. package/src/libs/ui/elements/src/lib/thumbnail/thumbnail.component.ts +9 -3
  498. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +8 -1
  499. package/src/libs/ui/inputs/src/index.ts +1 -0
  500. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.html +1 -1
  501. package/src/libs/ui/inputs/src/lib/button/button.component.css +0 -5
  502. package/src/libs/ui/inputs/src/lib/button/button.component.html +0 -1
  503. package/src/libs/ui/inputs/src/lib/button/button.component.ts +8 -7
  504. package/src/libs/ui/inputs/src/lib/checkbox/checkbox.component.html +0 -1
  505. package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.html +2 -2
  506. package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.html +3 -1
  507. package/src/libs/ui/inputs/src/lib/editable-label/editable-label.directive.ts +48 -0
  508. package/src/libs/ui/inputs/src/lib/files-drop/files-drop.directive.ts +45 -0
  509. package/src/libs/ui/inputs/src/lib/form-field/form-field.component.ts +3 -1
  510. package/src/libs/ui/inputs/src/lib/form-field/form-field.model.ts +0 -1
  511. package/src/libs/ui/inputs/src/lib/image-input/image-input.component.css +0 -0
  512. package/src/libs/ui/inputs/src/lib/image-input/image-input.component.html +146 -0
  513. package/src/libs/ui/inputs/src/lib/image-input/image-input.component.ts +193 -0
  514. package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.css +3 -0
  515. package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.html +8 -3
  516. package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.css +1 -0
  517. package/src/libs/ui/inputs/src/lib/text-area/text-area.component.ts +1 -0
  518. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +8 -2
  519. package/src/libs/ui/layout/src/index.ts +2 -0
  520. package/src/libs/ui/layout/src/lib/carousel/carousel.component.css +1 -1
  521. package/src/libs/ui/layout/src/lib/carousel/carousel.component.html +1 -0
  522. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.css +0 -0
  523. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.html +1 -0
  524. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.ts +33 -0
  525. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.css +15 -0
  526. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +54 -0
  527. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +42 -0
  528. package/src/libs/ui/search/src/index.ts +0 -1
  529. package/src/libs/ui/search/src/lib/ui-search.module.ts +2 -3
  530. package/src/libs/ui/widgets/src/lib/badge/badge.component.html +3 -1
  531. package/src/libs/util/i18n/src/index.ts +0 -1
  532. package/src/libs/util/i18n/src/lib/i18n.constants.ts +18 -0
  533. package/src/libs/util/shared/src/lib/links/link-utils.ts +34 -11
  534. package/src/libs/util/shared/src/lib/utils/bytes-convert.ts +3 -0
  535. package/src/libs/util/shared/src/lib/utils/image-resize.ts +72 -0
  536. package/src/libs/util/shared/src/lib/utils/index.ts +7 -4
  537. package/src/libs/util/shared/src/lib/utils/temporal-extent-union.ts +32 -0
  538. package/tailwind.base.css +44 -15
  539. package/translations/de.json +143 -109
  540. package/translations/en.json +75 -41
  541. package/translations/es.json +53 -19
  542. package/translations/fr.json +69 -35
  543. package/translations/it.json +70 -36
  544. package/translations/nl.json +54 -20
  545. package/translations/pt.json +53 -19
  546. package/translations/sk.json +131 -97
  547. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +0 -48
  548. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/role.mapper.mjs +0 -48
  549. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/status.mapper.mjs +0 -18
  550. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/update-frequency.mapper.mjs +0 -64
  551. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/converter.mjs +0 -122
  552. package/esm2022/libs/api/metadata-converter/src/lib/metadata-base.mapper.mjs +0 -14
  553. package/esm2022/libs/data-access/gn4/src/openapi/model/inlineObject3.api.model.mjs +0 -13
  554. package/esm2022/libs/feature/map/src/lib/utils/map-utils-wms.service.mjs +0 -55
  555. package/esm2022/libs/feature/map/src/lib/utils/projections.mjs +0 -2
  556. package/esm2022/libs/ui/search/src/lib/record-table/record-table.component.mjs +0 -145
  557. package/esm2022/libs/util/i18n/src/lib/testing/test.translate.loader.mjs +0 -24
  558. package/esm2022/libs/util/i18n/src/lib/testing/test.translate.module.mjs +0 -109
  559. package/esm2022/libs/util/i18n/src/lib/testing/translations.model.mjs +0 -6
  560. package/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.d.ts.map +0 -1
  561. package/libs/api/metadata-converter/src/lib/iso19139/codelists/role.mapper.d.ts.map +0 -1
  562. package/libs/api/metadata-converter/src/lib/iso19139/codelists/status.mapper.d.ts.map +0 -1
  563. package/libs/api/metadata-converter/src/lib/iso19139/codelists/update-frequency.mapper.d.ts.map +0 -1
  564. package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts +0 -4
  565. package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts.map +0 -1
  566. package/libs/api/metadata-converter/src/lib/metadata-base.mapper.d.ts.map +0 -1
  567. package/libs/data-access/gn4/src/openapi/model/inlineObject3.api.model.d.ts +0 -18
  568. package/libs/data-access/gn4/src/openapi/model/inlineObject3.api.model.d.ts.map +0 -1
  569. package/libs/feature/map/src/lib/utils/map-utils-wms.service.d.ts +0 -17
  570. package/libs/feature/map/src/lib/utils/map-utils-wms.service.d.ts.map +0 -1
  571. package/libs/feature/map/src/lib/utils/projections.d.ts.map +0 -1
  572. package/libs/ui/search/src/lib/record-table/record-table.component.d.ts +0 -31
  573. package/libs/ui/search/src/lib/record-table/record-table.component.d.ts.map +0 -1
  574. package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts +0 -17
  575. package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts.map +0 -1
  576. package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts +0 -131
  577. package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts.map +0 -1
  578. package/libs/util/i18n/src/lib/testing/translations.model.d.ts +0 -21
  579. package/libs/util/i18n/src/lib/testing/translations.model.d.ts.map +0 -1
  580. package/src/libs/api/metadata-converter/src/lib/iso19139/converter.ts +0 -187
  581. package/src/libs/data-access/gn4/src/openapi/model/inlineObject3.api.model.ts +0 -18
  582. package/src/libs/feature/map/src/lib/utils/map-utils-wms.service.ts +0 -58
  583. package/src/libs/ui/search/src/lib/record-table/record-table.component.css +0 -7
  584. package/src/libs/ui/search/src/lib/record-table/record-table.component.html +0 -215
  585. package/src/libs/ui/search/src/lib/record-table/record-table.component.ts +0 -149
  586. package/src/libs/util/i18n/src/lib/testing/test.translate.loader.ts +0 -26
  587. package/src/libs/util/i18n/src/lib/testing/test.translate.module.ts +0 -235
  588. package/src/libs/util/i18n/src/lib/testing/translations.model.ts +0 -28
  589. /package/libs/api/metadata-converter/src/lib/iso19139/{codelists → utils}/role.mapper.d.ts +0 -0
  590. /package/libs/api/metadata-converter/src/lib/iso19139/{codelists → utils}/status.mapper.d.ts +0 -0
  591. /package/libs/api/metadata-converter/src/lib/iso19139/{codelists → utils}/update-frequency.mapper.d.ts +0 -0
  592. /package/libs/feature/map/src/lib/{utils → constant}/projections.d.ts +0 -0
  593. /package/src/libs/api/metadata-converter/src/lib/iso19139/{codelists → utils}/role.mapper.ts +0 -0
  594. /package/src/libs/api/metadata-converter/src/lib/iso19139/{codelists → utils}/status.mapper.ts +0 -0
  595. /package/src/libs/api/metadata-converter/src/lib/iso19139/{codelists → utils}/update-frequency.mapper.ts +0 -0
  596. /package/src/libs/feature/map/src/lib/{utils → constant}/projections.ts +0 -0
@@ -1,11 +1,12 @@
1
1
  import {
2
- AccessConstraint,
3
2
  CatalogRecord,
3
+ Constraint,
4
4
  DatasetDistribution,
5
5
  DatasetRecord,
6
6
  DatasetServiceDistribution,
7
7
  Individual,
8
- License,
8
+ Keyword,
9
+ KeywordThesaurus,
9
10
  RecordStatus,
10
11
  Role,
11
12
  ServiceEndpoint,
@@ -26,6 +27,7 @@ import {
26
27
  findNestedElement,
27
28
  findNestedElements,
28
29
  readAttribute,
30
+ readText,
29
31
  removeAllChildren,
30
32
  removeChildren,
31
33
  removeChildrenByName,
@@ -34,6 +36,7 @@ import {
34
36
  } from '../xml-utils'
35
37
  import {
36
38
  ChainableFunction,
39
+ combine,
37
40
  fallback,
38
41
  filterArray,
39
42
  getAtIndex,
@@ -45,8 +48,9 @@ import {
45
48
  } from '../function-utils'
46
49
  import format from 'date-fns/format'
47
50
  import { readKind } from './read-parts'
51
+ import { namePartsToFull } from './utils/individual-name'
48
52
 
49
- function writeCharacterString(
53
+ export function writeCharacterString(
50
54
  text: string
51
55
  ): ChainableFunction<XmlElement, XmlElement> {
52
56
  return tap(
@@ -54,7 +58,9 @@ function writeCharacterString(
54
58
  )
55
59
  }
56
60
 
57
- function writeLinkage(url: URL): ChainableFunction<XmlElement, XmlElement> {
61
+ export function writeLinkage(
62
+ url: URL
63
+ ): ChainableFunction<XmlElement, XmlElement> {
58
64
  return tap(
59
65
  pipe(
60
66
  findNestedChildOrCreate('gmd:linkage', 'gmd:URL'),
@@ -63,7 +69,7 @@ function writeLinkage(url: URL): ChainableFunction<XmlElement, XmlElement> {
63
69
  )
64
70
  }
65
71
 
66
- function writeAnchor(
72
+ export function writeAnchor(
67
73
  url: URL,
68
74
  text?: string
69
75
  ): ChainableFunction<XmlElement, XmlElement> {
@@ -76,7 +82,9 @@ function writeAnchor(
76
82
  )
77
83
  }
78
84
 
79
- function writeDateTime(date: Date): ChainableFunction<XmlElement, XmlElement> {
85
+ export function writeDateTime(
86
+ date: Date
87
+ ): ChainableFunction<XmlElement, XmlElement> {
80
88
  return tap(
81
89
  pipe(
82
90
  findChildOrCreate('gco:DateTime'),
@@ -85,7 +93,9 @@ function writeDateTime(date: Date): ChainableFunction<XmlElement, XmlElement> {
85
93
  )
86
94
  }
87
95
 
88
- function writeDate(date: Date): ChainableFunction<XmlElement, XmlElement> {
96
+ export function writeDate(
97
+ date: Date
98
+ ): ChainableFunction<XmlElement, XmlElement> {
89
99
  return tap(
90
100
  pipe(
91
101
  findChildOrCreate('gco:Date'),
@@ -94,7 +104,7 @@ function writeDate(date: Date): ChainableFunction<XmlElement, XmlElement> {
94
104
  )
95
105
  }
96
106
 
97
- function getProgressCode(status: RecordStatus): string {
107
+ export function getProgressCode(status: RecordStatus): string {
98
108
  switch (status) {
99
109
  case 'completed':
100
110
  return 'completed'
@@ -113,7 +123,7 @@ function getProgressCode(status: RecordStatus): string {
113
123
  }
114
124
  }
115
125
 
116
- function getRoleCode(role: Role): string {
126
+ export function getRoleCode(role: Role): string {
117
127
  switch (role) {
118
128
  case 'author':
119
129
  return 'author'
@@ -162,7 +172,7 @@ function getRoleCode(role: Role): string {
162
172
  }
163
173
  }
164
174
 
165
- function getDistributionProtocol(
175
+ export function getDistributionProtocol(
166
176
  distribution: DatasetServiceDistribution
167
177
  ): string {
168
178
  switch (distribution.accessServiceProtocol.toLowerCase()) {
@@ -177,7 +187,7 @@ function getDistributionProtocol(
177
187
  }
178
188
  }
179
189
 
180
- function getMaintenanceFrequencyCode(
190
+ export function getMaintenanceFrequencyCode(
181
191
  updateFrequency: UpdateFrequencyCode
182
192
  ): string | null {
183
193
  switch (updateFrequency) {
@@ -196,7 +206,7 @@ function getMaintenanceFrequencyCode(
196
206
  }
197
207
  }
198
208
 
199
- function getISODuration(updateFrequency: UpdateFrequencyCustom): string {
209
+ export function getISODuration(updateFrequency: UpdateFrequencyCustom): string {
200
210
  const duration = {
201
211
  years: 0,
202
212
  months: 0,
@@ -225,19 +235,61 @@ function getISODuration(updateFrequency: UpdateFrequencyCustom): string {
225
235
  return `P${duration.years}Y${duration.months}M${duration.days}D${hours}`
226
236
  }
227
237
 
228
- function appendResponsibleParty(contact: Individual) {
229
- const name =
230
- contact.lastName && contact.firstName
231
- ? `${contact.firstName} ${contact.lastName}`
232
- : contact.lastName || contact.firstName || null
238
+ export function appendResponsibleParty(contact: Individual) {
239
+ const fullName = namePartsToFull(contact.firstName, contact.lastName)
240
+
241
+ const createAddress = pipe(
242
+ createElement('gmd:address'),
243
+ createChild('gmd:CI_Address'),
244
+ appendChildren(
245
+ pipe(
246
+ createElement('gmd:electronicMailAddress'),
247
+ writeCharacterString(contact.email)
248
+ )
249
+ ),
250
+ contact.address
251
+ ? appendChildren(
252
+ pipe(
253
+ createElement('gmd:deliveryPoint'),
254
+ writeCharacterString(contact.address)
255
+ )
256
+ )
257
+ : noop
258
+ )
259
+
260
+ const createContact = pipe(
261
+ createElement('gmd:contactInfo'),
262
+ createChild('gmd:CI_Contact'),
263
+ contact.phone
264
+ ? appendChildren(
265
+ pipe(
266
+ createElement('gmd:phone'),
267
+ createChild('gmd:CI_Telephone'),
268
+ createChild('gmd:voice'),
269
+ writeCharacterString(contact.phone)
270
+ )
271
+ )
272
+ : noop,
273
+ appendChildren(createAddress),
274
+ 'website' in contact.organization
275
+ ? appendChildren(
276
+ pipe(
277
+ createElement('gmd:onlineResource'),
278
+ createChild('gmd:CI_OnlineResource'),
279
+ writeLinkage(contact.organization.website)
280
+ )
281
+ )
282
+ : noop
283
+ )
284
+
233
285
  return appendChildren(
234
286
  pipe(
235
287
  createElement('gmd:CI_ResponsibleParty'),
236
- name
288
+ fullName
237
289
  ? appendChildren(
238
290
  pipe(
239
291
  createElement('gmd:individualName'),
240
- writeCharacterString(name)
292
+ writeCharacterString(fullName)
241
293
  )
242
294
  )
243
295
  : noop,
@@ -254,27 +306,7 @@ function appendResponsibleParty(contact: Individual) {
254
306
  createElement('gmd:organisationName'),
255
307
  writeCharacterString(contact.organization.name)
256
308
  ),
257
- pipe(
258
- createElement('gmd:contactInfo'),
259
- createChild('gmd:CI_Contact'),
260
- appendChildren(
261
- pipe(
262
- createElement('gmd:address'),
263
- createChild('gmd:CI_Address'),
264
- createChild('gmd:electronicMailAddress'),
265
- writeCharacterString(contact.email)
266
- )
267
- ),
268
- 'website' in contact.organization
269
- ? appendChildren(
270
- pipe(
271
- createElement('gmd:onlineResource'),
272
- createChild('gmd:CI_OnlineResource'),
273
- writeLinkage(contact.organization.website)
274
- )
275
- )
276
- : noop
277
- ),
309
+ createContact,
278
310
  pipe(
279
311
  createElement('gmd:role'),
280
312
  createChild('gmd:CI_RoleCode'),
@@ -289,7 +321,10 @@ function appendResponsibleParty(contact: Individual) {
289
321
  )
290
322
  }
291
323
 
292
- function updateCitationDate(date: Date, type: 'revision' | 'creation') {
324
+ export function updateCitationDate(
325
+ date: Date,
326
+ type: 'revision' | 'creation' | 'publication'
327
+ ) {
293
328
  return pipe(
294
329
  findNestedElements('gmd:date', 'gmd:CI_Date'),
295
330
  filterArray(
@@ -306,7 +341,10 @@ function updateCitationDate(date: Date, type: 'revision' | 'creation') {
306
341
  )
307
342
  }
308
343
 
309
- function appendCitationDate(date, type: 'revision' | 'creation') {
344
+ export function appendCitationDate(
345
+ date: Date,
346
+ type: 'revision' | 'creation' | 'publication'
347
+ ) {
310
348
  return appendChildren(
311
349
  pipe(
312
350
  createElement('gmd:date'),
@@ -327,82 +365,90 @@ function appendCitationDate(date, type: 'revision' | 'creation') {
327
365
  )
328
366
  }
329
367
 
330
- function removeKeywords(type: string | null) {
331
- return removeChildren(
332
- pipe(
333
- findNestedElements('gmd:descriptiveKeywords'),
334
- filterArray(
335
- pipe(
336
- findNestedElement(
337
- 'gmd:MD_Keywords',
338
- 'gmd:type',
339
- 'gmd:MD_KeywordTypeCode'
340
- ),
341
- readAttribute('codeListValue'),
342
- // if a specific type is targeted, compare with it; otherwise remove keywords if they have no type defined
343
- map((typeValue) => (type !== null ? type === typeValue : true))
368
+ export function removeKeywords() {
369
+ return removeChildren(pipe(findNestedElements('gmd:descriptiveKeywords')))
370
+ }
371
+
372
+ // returns a <gmd:thesaurusName> element
373
+ export function createThesaurus(thesaurus: KeywordThesaurus) {
374
+ return pipe(
375
+ createElement('gmd:thesaurusName'),
376
+ createChild('gmd:CI_Citation'),
377
+ appendChildren(
378
+ pipe(
379
+ createElement('gmd:title'),
380
+ writeCharacterString(thesaurus.name || thesaurus.id)
381
+ ),
382
+ pipe(
383
+ createElement('gmd:identifier'),
384
+ createChild('gmd:MD_Identifier'),
385
+ appendChildren(
386
+ pipe(
387
+ createElement('gmd:code'),
388
+ thesaurus.url
389
+ ? writeAnchor(thesaurus.url, thesaurus.id)
390
+ : writeCharacterString(thesaurus.id)
391
+ )
344
392
  )
345
393
  )
346
394
  )
347
395
  )
348
396
  }
349
397
 
350
- function appendKeywords(keywords: string[], type: string | null) {
398
+ export function appendKeywords(keywords: Keyword[]) {
399
+ // keywords are grouped by thesaurus if they have one, otherwise by type
400
+ const keywordsByThesaurus: Keyword[][] = keywords.reduce((acc, keyword) => {
401
+ const thesaurusId = keyword.thesaurus?.id
402
+ const type = keyword.type
403
+ let existingGroup = acc.find((group) =>
404
+ thesaurusId
405
+ ? group[0].thesaurus?.id === thesaurusId
406
+ : group[0].type === type && !group[0].thesaurus
407
+ )
408
+ if (!existingGroup) {
409
+ existingGroup = []
410
+ acc.push(existingGroup)
411
+ }
412
+ existingGroup.push(keyword)
413
+ return acc
414
+ }, [])
351
415
  return appendChildren(
352
- pipe(
353
- createElement('gmd:descriptiveKeywords'),
354
- createChild('gmd:MD_Keywords'),
355
- type !== null
356
- ? appendChildren(
416
+ ...keywordsByThesaurus.map((keywords) =>
417
+ pipe(
418
+ createElement('gmd:descriptiveKeywords'),
419
+ createChild('gmd:MD_Keywords'),
420
+ appendChildren(
421
+ pipe(
422
+ createElement('gmd:type'),
423
+ createChild('gmd:MD_KeywordTypeCode'),
424
+ addAttribute(
425
+ 'codeList',
426
+ 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_KeywordTypeCode'
427
+ ),
428
+ addAttribute('codeListValue', keywords[0].type)
429
+ )
430
+ ),
431
+ keywords[0].thesaurus
432
+ ? appendChildren(createThesaurus(keywords[0].thesaurus))
433
+ : noop,
434
+ appendChildren(
435
+ ...keywords.map((keyword) =>
357
436
  pipe(
358
- createElement('gmd:type'),
359
- createChild('gmd:MD_KeywordTypeCode'),
360
- addAttribute(
361
- 'codeList',
362
- 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_KeywordTypeCode'
363
- ),
364
- addAttribute('codeListValue', type)
437
+ createElement('gmd:keyword'),
438
+ writeCharacterString(keyword.label)
365
439
  )
366
440
  )
367
- : noop,
368
- appendChildren(
369
- ...keywords.map((keyword) =>
370
- pipe(createElement('gmd:keyword'), writeCharacterString(keyword))
371
441
  )
372
442
  )
373
443
  )
374
444
  )
375
445
  }
376
446
 
377
- function removeAccessConstraints() {
378
- const securityConstraintsFilter = pipe(
379
- findChildrenElement('gmd:MD_SecurityConstraints'),
380
- (array) => array.length > 0
381
- )
382
-
383
- // remove legal constraints that *only* have 'otherRestrictions'
384
- const otherConstraintsFilter = pipe(
385
- findNestedElements(
386
- 'gmd:MD_LegalConstraints',
387
- 'gmd:accessConstraints',
388
- 'gmd:MD_RestrictionCode'
389
- ),
390
- mapArray(readAttribute('codeListValue')),
391
- (restrictionCodes) =>
392
- restrictionCodes.every((code) => code === 'otherRestrictions')
393
- )
394
- return removeChildren(
395
- pipe(
396
- findChildrenElement('gmd:resourceConstraints'),
397
- filterArray(
398
- (el) => securityConstraintsFilter(el) || otherConstraintsFilter(el)
399
- )
400
- )
401
- )
402
- }
403
-
404
- function createAccessConstraint(constraint: AccessConstraint) {
405
- if (constraint.type === 'security') {
447
+ export function createConstraint(
448
+ constraint: Constraint,
449
+ type: 'legal' | 'security' | 'other'
450
+ ) {
451
+ if (type === 'security') {
406
452
  return pipe(
407
453
  createElement('gmd:resourceConstraints'),
408
454
  createChild('gmd:MD_SecurityConstraints'),
@@ -422,29 +468,41 @@ function createAccessConstraint(constraint: AccessConstraint) {
422
468
  )
423
469
  )
424
470
  )
471
+ } else if (type === 'legal') {
472
+ return pipe(
473
+ createElement('gmd:resourceConstraints'),
474
+ createChild('gmd:MD_LegalConstraints'),
475
+ appendChildren(
476
+ pipe(
477
+ createElement('gmd:accessConstraints'),
478
+ createChild('gmd:MD_RestrictionCode'),
479
+ addAttribute(
480
+ 'codeList',
481
+ 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_RestrictionCode'
482
+ ),
483
+ addAttribute('codeListValue', 'otherRestrictions')
484
+ ),
485
+ pipe(
486
+ createElement('gmd:otherConstraints'),
487
+ writeCharacterString(constraint.text)
488
+ )
489
+ )
490
+ )
425
491
  }
492
+
426
493
  return pipe(
427
494
  createElement('gmd:resourceConstraints'),
428
- createChild('gmd:MD_LegalConstraints'),
495
+ createChild('gmd:MD_Constraints'),
429
496
  appendChildren(
430
497
  pipe(
431
- createElement('gmd:accessConstraints'),
432
- createChild('gmd:MD_RestrictionCode'),
433
- addAttribute(
434
- 'codeList',
435
- 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_RestrictionCode'
436
- ),
437
- addAttribute('codeListValue', 'otherRestrictions')
438
- ),
439
- pipe(
440
- createElement('gmd:otherConstraints'),
498
+ createElement('gmd:useLimitation'),
441
499
  writeCharacterString(constraint.text)
442
500
  )
443
501
  )
444
502
  )
445
503
  }
446
504
 
447
- function removeUseLimitations() {
505
+ export function removeOtherConstraints() {
448
506
  return removeChildren(
449
507
  pipe(
450
508
  findChildrenElement('gmd:resourceConstraints'),
@@ -458,16 +516,41 @@ function removeUseLimitations() {
458
516
  )
459
517
  }
460
518
 
461
- function createUseLimitation(useLimitation: string) {
462
- return pipe(
463
- createElement('gmd:resourceConstraints'),
464
- createChild('gmd:MD_Constraints'),
465
- createChild('gmd:useLimitation'),
466
- writeCharacterString(useLimitation)
519
+ export function removeSecurityConstraints() {
520
+ return removeChildren(
521
+ pipe(
522
+ findChildrenElement('gmd:resourceConstraints'),
523
+ filterArray(
524
+ pipe(
525
+ findNestedElements('gmd:MD_SecurityConstraints', 'gmd:useLimitation'),
526
+ (array) => array.length > 0
527
+ )
528
+ )
529
+ )
467
530
  )
468
531
  }
469
532
 
470
- function removeLicenses() {
533
+ export function removeLegalConstraints() {
534
+ return removeChildren(
535
+ pipe(
536
+ findChildrenElement('gmd:resourceConstraints'),
537
+ filterArray(
538
+ pipe(
539
+ findNestedElements(
540
+ 'gmd:MD_LegalConstraints',
541
+ 'gmd:accessConstraints',
542
+ 'gmd:MD_RestrictionCode'
543
+ ),
544
+ mapArray(readAttribute('codeListValue')),
545
+ (restrictionCodes) =>
546
+ restrictionCodes.every((code) => code !== 'license')
547
+ )
548
+ )
549
+ )
550
+ )
551
+ }
552
+
553
+ export function removeLicenses() {
471
554
  return removeChildren(
472
555
  pipe(
473
556
  findChildrenElement('gmd:resourceConstraints'),
@@ -487,7 +570,7 @@ function removeLicenses() {
487
570
  )
488
571
  }
489
572
 
490
- function createLicense(license: License) {
573
+ export function createLicense(license: Constraint) {
491
574
  return pipe(
492
575
  createElement('gmd:resourceConstraints'),
493
576
  createChild('gmd:MD_LegalConstraints'),
@@ -520,44 +603,52 @@ function createLicense(license: License) {
520
603
  )
521
604
  }
522
605
 
523
- function removeDistributions() {
606
+ export function removeDistributions() {
524
607
  return pipe(removeChildrenByName('gmd:distributionInfo'))
525
608
  }
526
609
 
527
- function createDistribution(distribution: DatasetDistribution) {
528
- const appendDistributionFormat =
529
- 'mimeType' in distribution
530
- ? appendChildren(
531
- pipe(
532
- createElement('gmd:distributionFormat'),
533
- createChild('gmd:MD_Format'),
534
- appendChildren(
535
- pipe(
536
- createElement('gmd:name'),
537
- writeCharacterString(distribution.mimeType)
538
- ),
539
- pipe(
540
- createElement('gmd:version'),
541
- writeCharacterString('1.0') // hardcoding this as it most likely won't be used but is mandatory
542
- )
543
- )
544
- )
610
+ function appendDistributionFormat(mimeType: string) {
611
+ return appendChildren(
612
+ pipe(
613
+ createElement('gmd:distributionFormat'),
614
+ createChild('gmd:MD_Format'),
615
+ appendChildren(
616
+ pipe(createElement('gmd:name'), writeCharacterString(mimeType)),
617
+ pipe(
618
+ createElement('gmd:version'),
619
+ writeCharacterString('1.0') // hardcoding this as it most likely won't be used but is mandatory
545
620
  )
546
- : noop
621
+ )
622
+ )
623
+ )
624
+ }
547
625
 
548
- let linkageUrl, name, functionCode, protocol
626
+ export function createDistributionInfo() {
627
+ return pipe(
628
+ createElement('gmd:distributionInfo'),
629
+ createChild('gmd:MD_Distribution')
630
+ )
631
+ }
632
+
633
+ // apply to MD_Distribution
634
+ export function appendDistribution(
635
+ distribution: DatasetDistribution,
636
+ appendFormatFn: (
637
+ mimeType: string
638
+ ) => ChainableFunction<XmlElement, XmlElement>
639
+ ) {
640
+ let name: string
641
+ let functionCode: string
642
+ let protocol: string
549
643
  if (distribution.type === 'service') {
550
- linkageUrl = distribution.url.toString()
551
644
  name = distribution.identifierInService // this is for GeoNetwork to know the layer name
552
645
  functionCode = 'download'
553
646
  protocol = getDistributionProtocol(distribution)
554
647
  } else if (distribution.type === 'download') {
555
- linkageUrl = distribution.url.toString()
556
648
  name = distribution.name
557
649
  functionCode = 'download'
558
650
  protocol = 'WWW:DOWNLOAD'
559
651
  } else {
560
- linkageUrl = distribution.url.toString()
561
652
  name = distribution.name
562
653
  functionCode = 'information'
563
654
  protocol = 'WWW:LINK'
@@ -568,7 +659,7 @@ function createDistribution(distribution: DatasetDistribution) {
568
659
  createChild('gmd:MD_DigitalTransferOptions'),
569
660
  createChild('gmd:onLine'),
570
661
  createChild('gmd:CI_OnlineResource'),
571
- writeLinkage(linkageUrl),
662
+ writeLinkage(distribution.url),
572
663
  'description' in distribution
573
664
  ? appendChildren(
574
665
  pipe(
@@ -597,9 +688,7 @@ function createDistribution(distribution: DatasetDistribution) {
597
688
  )
598
689
  )
599
690
  return pipe(
600
- createElement('gmd:distributionInfo'),
601
- createChild('gmd:MD_Distribution'),
602
- appendDistributionFormat,
691
+ 'mimeType' in distribution ? appendFormatFn(distribution.mimeType) : noop,
603
692
  appendTransferOptions
604
693
  )
605
694
  }
@@ -608,7 +697,7 @@ function createDistribution(distribution: DatasetDistribution) {
608
697
  * Looks for srv:SV_ServiceIdentification or gmd:MD_DataIdentification element
609
698
  * depending on record type, create if missing
610
699
  */
611
- function findOrCreateIdentification() {
700
+ export function findOrCreateIdentification() {
612
701
  return (rootEl: XmlElement) => {
613
702
  const kind = readKind(rootEl)
614
703
  let eltName = 'gmd:MD_DataIdentification'
@@ -617,7 +706,7 @@ function findOrCreateIdentification() {
617
706
  }
618
707
  }
619
708
 
620
- function findOrCreateDistribution() {
709
+ export function findOrCreateDistribution() {
621
710
  return (rootEl: XmlElement) => {
622
711
  return findNestedChildOrCreate(
623
712
  'gmd:distributionInfo',
@@ -711,11 +800,26 @@ export function writeStatus(record: DatasetRecord, rootEl: XmlElement) {
711
800
  }
712
801
 
713
802
  export function writeContacts(record: CatalogRecord, rootEl: XmlElement) {
803
+ pipe(
804
+ removeChildrenByName('gmd:contact'),
805
+ appendChildren(
806
+ ...record.contacts.map((contact) =>
807
+ pipe(createElement('gmd:contact'), appendResponsibleParty(contact))
808
+ )
809
+ )
810
+ )(rootEl)
811
+ }
812
+
813
+ export function writeContactsForResource(
814
+ record: CatalogRecord,
815
+ rootEl: XmlElement
816
+ ) {
714
817
  pipe(
715
818
  findOrCreateIdentification(),
716
819
  removeChildrenByName('gmd:pointOfContact'),
820
+ removeChildrenByName('gmd:contact'),
717
821
  appendChildren(
718
- ...record.contacts.map((contact) =>
822
+ ...record.contactsForResource.map((contact) =>
719
823
  pipe(
720
824
  createElement('gmd:pointOfContact'),
721
825
  appendResponsibleParty(contact)
@@ -728,43 +832,71 @@ export function writeContacts(record: CatalogRecord, rootEl: XmlElement) {
728
832
  export function writeKeywords(record: CatalogRecord, rootEl: XmlElement) {
729
833
  pipe(
730
834
  findOrCreateIdentification(),
731
- removeKeywords(null),
732
- appendKeywords(record.keywords, null)
835
+ removeKeywords(),
836
+ appendKeywords(record.keywords)
733
837
  )(rootEl)
734
838
  }
735
839
 
736
- export function writeThemes(record: CatalogRecord, rootEl: XmlElement) {
840
+ export function writeTopics(record: CatalogRecord, rootEl: XmlElement) {
737
841
  pipe(
738
842
  findOrCreateIdentification(),
739
- removeKeywords('theme'),
740
- appendKeywords(record.themes, 'theme')
843
+ removeChildrenByName('gmd:topicCategory'),
844
+ appendChildren(
845
+ ...record.topics.map((topic) =>
846
+ pipe(
847
+ createElement('gmd:topicCategory'),
848
+ createChild('gmd:MD_TopicCategoryCode'),
849
+ setTextContent(topic)
850
+ )
851
+ )
852
+ )
741
853
  )(rootEl)
742
854
  }
743
855
 
744
- export function writeAccessConstraints(
856
+ export function writeLicenses(record: CatalogRecord, rootEl: XmlElement) {
857
+ pipe(
858
+ findOrCreateIdentification(),
859
+ removeLicenses(),
860
+ appendChildren(...record.licenses.map(createLicense))
861
+ )(rootEl)
862
+ }
863
+
864
+ export function writeLegalConstraints(
745
865
  record: CatalogRecord,
746
866
  rootEl: XmlElement
747
867
  ) {
748
868
  pipe(
749
869
  findOrCreateIdentification(),
750
- removeAccessConstraints(),
751
- appendChildren(...record.accessConstraints.map(createAccessConstraint))
870
+ removeLegalConstraints(),
871
+ appendChildren(
872
+ ...record.legalConstraints.map((c) => createConstraint(c, 'legal'))
873
+ )
752
874
  )(rootEl)
753
875
  }
754
876
 
755
- export function writeLicenses(record: CatalogRecord, rootEl: XmlElement) {
877
+ export function writeSecurityConstraints(
878
+ record: CatalogRecord,
879
+ rootEl: XmlElement
880
+ ) {
756
881
  pipe(
757
882
  findOrCreateIdentification(),
758
- removeLicenses(),
759
- appendChildren(...record.licenses.map(createLicense))
883
+ removeSecurityConstraints(),
884
+ appendChildren(
885
+ ...record.securityConstraints.map((c) => createConstraint(c, 'security'))
886
+ )
760
887
  )(rootEl)
761
888
  }
762
889
 
763
- export function writeUseLimitations(record: CatalogRecord, rootEl: XmlElement) {
890
+ export function writeOtherConstraints(
891
+ record: CatalogRecord,
892
+ rootEl: XmlElement
893
+ ) {
764
894
  pipe(
765
895
  findOrCreateIdentification(),
766
- removeUseLimitations(),
767
- appendChildren(...record.useLimitations.map(createUseLimitation))
896
+ removeOtherConstraints(),
897
+ appendChildren(
898
+ ...record.otherConstraints.map((c) => createConstraint(c, 'other'))
899
+ )
768
900
  )(rootEl)
769
901
  }
770
902
 
@@ -798,26 +930,47 @@ export function writeUpdateFrequency(
798
930
  )(rootEl)
799
931
  }
800
932
 
801
- export function writeDatasetCreated(record: DatasetRecord, rootEl: XmlElement) {
802
- if (!('datasetCreated' in record)) return
933
+ export function writeResourceCreated(
934
+ record: DatasetRecord,
935
+ rootEl: XmlElement
936
+ ) {
937
+ if (!('resourceCreated' in record)) return
803
938
  pipe(
804
939
  findOrCreateIdentification(),
805
940
  findNestedChildOrCreate('gmd:citation', 'gmd:CI_Citation'),
806
941
  fallback(
807
- updateCitationDate(record.datasetCreated, 'creation'),
808
- appendCitationDate(record.datasetCreated, 'creation')
942
+ updateCitationDate(record.resourceCreated, 'creation'),
943
+ appendCitationDate(record.resourceCreated, 'creation')
809
944
  )
810
945
  )(rootEl)
811
946
  }
812
947
 
813
- export function writeDatasetUpdated(record: DatasetRecord, rootEl: XmlElement) {
814
- if (!('datasetUpdated' in record)) return
948
+ export function writeResourceUpdated(
949
+ record: DatasetRecord,
950
+ rootEl: XmlElement
951
+ ) {
952
+ if (!('resourceUpdated' in record)) return
815
953
  pipe(
816
954
  findOrCreateIdentification(),
817
955
  findNestedChildOrCreate('gmd:citation', 'gmd:CI_Citation'),
818
956
  fallback(
819
- updateCitationDate(record.datasetUpdated, 'revision'),
820
- appendCitationDate(record.datasetUpdated, 'revision')
957
+ updateCitationDate(record.resourceUpdated, 'revision'),
958
+ appendCitationDate(record.resourceUpdated, 'revision')
959
+ )
960
+ )(rootEl)
961
+ }
962
+
963
+ export function writeResourcePublished(
964
+ record: DatasetRecord,
965
+ rootEl: XmlElement
966
+ ) {
967
+ if (!('resourcePublished' in record)) return
968
+ pipe(
969
+ findOrCreateIdentification(),
970
+ findNestedChildOrCreate('gmd:citation', 'gmd:CI_Citation'),
971
+ fallback(
972
+ updateCitationDate(record.resourcePublished, 'publication'),
973
+ appendCitationDate(record.resourcePublished, 'publication')
821
974
  )
822
975
  )(rootEl)
823
976
  }
@@ -875,7 +1028,14 @@ export function writeGraphicOverviews(
875
1028
  export function writeDistributions(record: DatasetRecord, rootEl: XmlElement) {
876
1029
  pipe(
877
1030
  removeDistributions(),
878
- appendChildren(...record.distributions.map(createDistribution))
1031
+ appendChildren(
1032
+ ...record.distributions.map((d) =>
1033
+ pipe(
1034
+ createDistributionInfo(),
1035
+ appendDistribution(d, appendDistributionFormat)
1036
+ )
1037
+ )
1038
+ )
879
1039
  )(rootEl)
880
1040
  }
881
1041
 
@@ -892,7 +1052,7 @@ export function writeLineage(record: DatasetRecord, rootEl: XmlElement) {
892
1052
  )(rootEl)
893
1053
  }
894
1054
 
895
- function getServiceEndpointProtocol(endpoint: ServiceEndpoint): string {
1055
+ export function getServiceEndpointProtocol(endpoint: ServiceEndpoint): string {
896
1056
  switch (endpoint.protocol.toLowerCase()) {
897
1057
  case 'wfs':
898
1058
  return 'OGC:WFS'
@@ -905,7 +1065,7 @@ function getServiceEndpointProtocol(endpoint: ServiceEndpoint): string {
905
1065
  }
906
1066
  }
907
1067
 
908
- function createOnlineResource(onlineResource: ServiceOnlineResource) {
1068
+ export function createOnlineResource(onlineResource: ServiceOnlineResource) {
909
1069
  let linkageUrl, functionCode, protocol
910
1070
  if (onlineResource.type === 'endpoint') {
911
1071
  linkageUrl = onlineResource.endpointUrl.toString()