geonetwork-ui 2.2.0 → 2.3.0-dev.139106e0

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 (387) hide show
  1. package/esm2022/index.mjs +2 -1
  2. package/esm2022/libs/api/metadata-converter/src/index.mjs +5 -5
  3. package/esm2022/libs/api/metadata-converter/src/lib/base.converter.mjs +14 -0
  4. package/esm2022/libs/api/metadata-converter/src/lib/find-converter.mjs +15 -0
  5. package/esm2022/libs/api/metadata-converter/src/lib/gn4/atomic-operations.mjs +3 -3
  6. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.converter.mjs +52 -0
  7. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +8 -4
  8. package/esm2022/libs/api/metadata-converter/src/lib/gn4/index.mjs +4 -0
  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 +58 -62
  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 +75 -58
  22. package/esm2022/libs/api/metadata-converter/src/lib/xml-utils.mjs +76 -14
  23. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +4 -4
  24. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  25. package/esm2022/libs/data-access/gn4/src/openapi/api/records.api.service.mjs +35 -7
  26. package/esm2022/libs/data-access/gn4/src/openapi/model/models.mjs +1 -2
  27. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +2 -2
  28. package/esm2022/libs/feature/editor/src/index.mjs +2 -2
  29. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +6 -2
  30. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-array/form-field-array.component.mjs +11 -0
  31. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-file/form-field-file.component.mjs +28 -0
  32. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-object/form-field-object.component.mjs +11 -0
  33. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.mjs +45 -0
  34. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-simple/form-field-simple.component.mjs +50 -0
  35. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.mjs +11 -0
  36. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extent/form-field-temporal-extent.component.mjs +11 -0
  37. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +107 -0
  38. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.mjs +2 -0
  39. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/index.mjs +10 -0
  40. package/esm2022/libs/feature/editor/src/lib/components/record-form/record-form.component.mjs +29 -0
  41. package/esm2022/libs/feature/editor/src/lib/feature-editor.module.mjs +10 -10
  42. package/esm2022/libs/feature/editor/src/lib/models/fields.model.mjs +1 -1
  43. package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +8 -8
  44. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component.mjs +6 -2
  45. package/esm2022/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.mjs +3 -3
  46. package/esm2022/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.mjs +72 -0
  47. package/esm2022/libs/feature/map/src/lib/feature-map.module.mjs +7 -3
  48. package/esm2022/libs/feature/map/src/lib/layers-panel/layers-panel.component.mjs +12 -7
  49. package/esm2022/libs/feature/map/src/lib/map-context/map-context.model.mjs +2 -1
  50. package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +52 -25
  51. package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +12 -49
  52. package/esm2022/libs/feature/notifications/src/index.mjs +4 -0
  53. package/esm2022/libs/feature/notifications/src/lib/feature-notifications.module.mjs +18 -0
  54. package/esm2022/libs/feature/notifications/src/lib/notification.model.mjs +2 -0
  55. package/esm2022/libs/feature/notifications/src/lib/notifications-container/notifications-container.component.mjs +49 -0
  56. package/esm2022/libs/feature/notifications/src/lib/notifications.service.mjs +29 -0
  57. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +6 -2
  58. package/esm2022/libs/feature/search/src/lib/results-table/results-table.component.mjs +3 -3
  59. package/esm2022/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.mjs +3 -3
  60. package/esm2022/libs/ui/elements/src/index.mjs +15 -15
  61. package/esm2022/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.mjs +5 -5
  62. package/esm2022/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.mjs +45 -0
  63. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +3 -3
  64. package/esm2022/libs/ui/elements/src/lib/notification/notification.component.mjs +34 -0
  65. package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +3 -3
  66. package/esm2022/libs/ui/elements/src/lib/thumbnail/thumbnail.component.mjs +4 -3
  67. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +6 -5
  68. package/esm2022/libs/ui/inputs/src/index.mjs +1 -2
  69. package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +2 -1
  70. package/esm2022/libs/ui/inputs/src/lib/files-drop/files-drop.directive.mjs +59 -0
  71. package/esm2022/libs/ui/inputs/src/lib/image-input/image-input.component.mjs +183 -0
  72. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +10 -23
  73. package/esm2022/libs/ui/layout/src/index.mjs +6 -5
  74. package/esm2022/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.mjs +18 -0
  75. package/esm2022/libs/util/shared/src/lib/utils/bytes-convert.mjs +4 -0
  76. package/esm2022/libs/util/shared/src/lib/utils/image-resize.mjs +60 -0
  77. package/esm2022/libs/util/shared/src/lib/utils/index.mjs +8 -6
  78. package/esm2022/translations/de.json +20 -0
  79. package/esm2022/translations/en.json +20 -0
  80. package/esm2022/translations/es.json +20 -0
  81. package/esm2022/translations/fr.json +20 -0
  82. package/esm2022/translations/it.json +20 -0
  83. package/esm2022/translations/nl.json +20 -0
  84. package/esm2022/translations/pt.json +20 -0
  85. package/fesm2022/geonetwork-ui.mjs +4464 -3180
  86. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  87. package/index.d.ts +1 -0
  88. package/index.d.ts.map +1 -1
  89. package/index.ts +1 -0
  90. package/libs/api/metadata-converter/src/index.d.ts +4 -4
  91. package/libs/api/metadata-converter/src/index.d.ts.map +1 -1
  92. package/libs/api/metadata-converter/src/lib/{metadata-base.mapper.d.ts → base.converter.d.ts} +3 -3
  93. package/libs/api/metadata-converter/src/lib/base.converter.d.ts.map +1 -0
  94. package/libs/api/metadata-converter/src/lib/find-converter.d.ts +3 -0
  95. package/libs/api/metadata-converter/src/lib/find-converter.d.ts.map +1 -0
  96. package/libs/api/metadata-converter/src/lib/gn4/{gn4.metadata.mapper.d.ts → gn4.converter.d.ts} +5 -5
  97. package/libs/api/metadata-converter/src/lib/gn4/gn4.converter.d.ts.map +1 -0
  98. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  99. package/libs/api/metadata-converter/src/lib/gn4/index.d.ts +4 -0
  100. package/libs/api/metadata-converter/src/lib/gn4/index.d.ts.map +1 -0
  101. package/libs/api/metadata-converter/src/lib/iso19115-3/index.d.ts +2 -0
  102. package/libs/api/metadata-converter/src/lib/iso19115-3/index.d.ts.map +1 -0
  103. package/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.d.ts +9 -0
  104. package/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.d.ts.map +1 -0
  105. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts +20 -0
  106. package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts.map +1 -0
  107. package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts +21 -0
  108. package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts.map +1 -0
  109. package/libs/api/metadata-converter/src/lib/iso19139/index.d.ts +2 -0
  110. package/libs/api/metadata-converter/src/lib/iso19139/index.d.ts.map +1 -0
  111. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts +11 -0
  112. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts.map +1 -0
  113. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +34 -6
  114. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  115. package/libs/api/metadata-converter/src/lib/iso19139/utils/individual-name.d.ts +8 -0
  116. package/libs/api/metadata-converter/src/lib/iso19139/utils/individual-name.d.ts.map +1 -0
  117. package/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.d.ts.map +1 -0
  118. package/libs/api/metadata-converter/src/lib/iso19139/utils/role.mapper.d.ts.map +1 -0
  119. package/libs/api/metadata-converter/src/lib/iso19139/utils/status.mapper.d.ts.map +1 -0
  120. package/libs/api/metadata-converter/src/lib/iso19139/utils/update-frequency.mapper.d.ts.map +1 -0
  121. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +39 -3
  122. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  123. package/libs/api/metadata-converter/src/lib/xml-utils.d.ts +14 -1
  124. package/libs/api/metadata-converter/src/lib/xml-utils.d.ts.map +1 -1
  125. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +2 -2
  126. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  127. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +6 -4
  128. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  129. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts +9 -5
  130. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts.map +1 -1
  131. package/libs/data-access/gn4/src/openapi/model/models.d.ts +0 -1
  132. package/libs/data-access/gn4/src/openapi/model/models.d.ts.map +1 -1
  133. package/libs/feature/editor/src/index.d.ts +1 -1
  134. package/libs/feature/editor/src/index.d.ts.map +1 -1
  135. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +8 -5
  136. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
  137. package/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-array/form-field-array.component.d.ts +1 -1
  138. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-array/form-field-array.component.d.ts.map +1 -0
  139. package/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-file/form-field-file.component.d.ts +1 -1
  140. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-file/form-field-file.component.d.ts.map +1 -0
  141. package/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-object/form-field-object.component.d.ts +1 -1
  142. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-object/form-field-object.component.d.ts.map +1 -0
  143. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.d.ts +16 -0
  144. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.d.ts.map +1 -0
  145. package/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-simple/form-field-simple.component.d.ts +2 -2
  146. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-simple/form-field-simple.component.d.ts.map +1 -0
  147. package/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-spatial-extent/form-field-spatial-extent.component.d.ts +1 -1
  148. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.d.ts.map +1 -0
  149. package/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-temporal-extent/form-field-temporal-extent.component.d.ts +1 -1
  150. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extent/form-field-temporal-extent.component.d.ts.map +1 -0
  151. package/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field.component.d.ts +8 -3
  152. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -0
  153. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.model.d.ts.map +1 -0
  154. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts.map +1 -0
  155. package/libs/feature/editor/src/lib/{record-form → components/record-form}/record-form.component.d.ts +3 -3
  156. package/libs/feature/editor/src/lib/components/record-form/record-form.component.d.ts.map +1 -0
  157. package/libs/feature/editor/src/lib/feature-editor.module.d.ts +1 -1
  158. package/libs/feature/editor/src/lib/feature-editor.module.d.ts.map +1 -1
  159. package/libs/feature/editor/src/lib/models/fields.model.d.ts +1 -1
  160. package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
  161. package/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component.d.ts.map +1 -1
  162. package/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.d.ts +23 -0
  163. package/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.d.ts.map +1 -0
  164. package/libs/feature/map/src/lib/feature-map.module.d.ts +2 -1
  165. package/libs/feature/map/src/lib/feature-map.module.d.ts.map +1 -1
  166. package/libs/feature/map/src/lib/layers-panel/layers-panel.component.d.ts +2 -0
  167. package/libs/feature/map/src/lib/layers-panel/layers-panel.component.d.ts.map +1 -1
  168. package/libs/feature/map/src/lib/map-context/map-context.model.d.ts +10 -5
  169. package/libs/feature/map/src/lib/map-context/map-context.model.d.ts.map +1 -1
  170. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +1 -1
  171. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts +2 -3
  172. package/libs/feature/map/src/lib/utils/map-utils.service.d.ts.map +1 -1
  173. package/libs/feature/notifications/src/index.d.ts +4 -0
  174. package/libs/feature/notifications/src/index.d.ts.map +1 -0
  175. package/libs/feature/notifications/src/lib/feature-notifications.module.d.ts +7 -0
  176. package/libs/feature/notifications/src/lib/feature-notifications.module.d.ts.map +1 -0
  177. package/libs/feature/notifications/src/lib/notification.model.d.ts +7 -0
  178. package/libs/feature/notifications/src/lib/notification.model.d.ts.map +1 -0
  179. package/libs/feature/notifications/src/lib/notifications-container/notifications-container.component.d.ts +12 -0
  180. package/libs/feature/notifications/src/lib/notifications-container/notifications-container.component.d.ts.map +1 -0
  181. package/libs/feature/notifications/src/lib/notifications.service.d.ts +15 -0
  182. package/libs/feature/notifications/src/lib/notifications.service.d.ts.map +1 -0
  183. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  184. package/libs/ui/elements/src/index.d.ts +14 -14
  185. package/libs/ui/elements/src/index.d.ts.map +1 -1
  186. package/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.d.ts +13 -0
  187. package/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.d.ts.map +1 -0
  188. package/libs/ui/elements/src/lib/notification/notification.component.d.ts +13 -0
  189. package/libs/ui/elements/src/lib/notification/notification.component.d.ts.map +1 -0
  190. package/libs/ui/elements/src/lib/thumbnail/thumbnail.component.d.ts +1 -1
  191. package/libs/ui/elements/src/lib/thumbnail/thumbnail.component.d.ts.map +1 -1
  192. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +20 -20
  193. package/libs/ui/inputs/src/index.d.ts +0 -1
  194. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  195. package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
  196. package/libs/ui/inputs/src/lib/files-drop/files-drop.directive.d.ts +14 -0
  197. package/libs/ui/inputs/src/lib/files-drop/files-drop.directive.d.ts.map +1 -0
  198. package/libs/ui/inputs/src/lib/image-input/image-input.component.d.ts +44 -0
  199. package/libs/ui/inputs/src/lib/image-input/image-input.component.d.ts.map +1 -0
  200. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +26 -33
  201. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
  202. package/libs/ui/layout/src/index.d.ts +5 -4
  203. package/libs/ui/layout/src/index.d.ts.map +1 -1
  204. package/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.d.ts +8 -0
  205. package/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.d.ts.map +1 -0
  206. package/libs/util/shared/src/lib/utils/bytes-convert.d.ts +2 -0
  207. package/libs/util/shared/src/lib/utils/bytes-convert.d.ts.map +1 -0
  208. package/libs/util/shared/src/lib/utils/image-resize.d.ts +3 -0
  209. package/libs/util/shared/src/lib/utils/image-resize.d.ts.map +1 -0
  210. package/libs/util/shared/src/lib/utils/index.d.ts +7 -5
  211. package/libs/util/shared/src/lib/utils/index.d.ts.map +1 -1
  212. package/package.json +2 -2
  213. package/src/libs/api/metadata-converter/src/index.ts +4 -4
  214. package/src/libs/api/metadata-converter/src/lib/{metadata-base.mapper.ts → base.converter.ts} +2 -2
  215. package/src/libs/api/metadata-converter/src/lib/find-converter.ts +16 -0
  216. package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +32 -5
  217. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +11 -4
  218. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +33 -7
  219. package/src/libs/api/metadata-converter/src/lib/fixtures/metawal.records.ts +580 -0
  220. package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +2 -2
  221. package/src/libs/api/metadata-converter/src/lib/gn4/{gn4.metadata.mapper.ts → gn4.converter.ts} +2 -2
  222. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +9 -3
  223. package/src/libs/api/metadata-converter/src/lib/gn4/index.ts +3 -0
  224. package/src/libs/api/metadata-converter/src/lib/iso19115-3/index.ts +1 -0
  225. package/src/libs/api/metadata-converter/src/lib/iso19115-3/iso19115-3.converter.ts +176 -0
  226. package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +329 -0
  227. package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +513 -0
  228. package/src/libs/api/metadata-converter/src/lib/iso19139/index.ts +1 -0
  229. package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +327 -0
  230. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +121 -82
  231. package/src/libs/api/metadata-converter/src/lib/iso19139/utils/individual-name.ts +20 -0
  232. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +175 -95
  233. package/src/libs/api/metadata-converter/src/lib/xml-utils.ts +84 -16
  234. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +2 -2
  235. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +9 -4
  236. package/src/libs/data-access/gn4/src/openapi/api/records.api.service.ts +43 -12
  237. package/src/libs/data-access/gn4/src/openapi/model/models.ts +0 -1
  238. package/src/libs/data-access/gn4/src/spec.yaml +1 -1
  239. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +1 -1
  240. package/src/libs/feature/editor/src/index.ts +1 -1
  241. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +8 -1
  242. package/src/libs/feature/editor/src/lib/components/overview-upload/overview-upload.component.html +8 -0
  243. package/src/libs/feature/editor/src/lib/components/overview-upload/overview-upload.component.ts +70 -0
  244. package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-array/form-field-array.component.ts +1 -0
  245. package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-file/form-field-file.component.ts +4 -1
  246. package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-object/form-field-object.component.ts +1 -0
  247. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.html +20 -0
  248. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.ts +44 -0
  249. package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-simple/form-field-simple.component.ts +4 -1
  250. package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-spatial-extent/form-field-spatial-extent.component.ts +1 -0
  251. package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-temporal-extent/form-field-temporal-extent.component.ts +1 -0
  252. package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field.component.html +28 -4
  253. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +121 -0
  254. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.css +0 -0
  255. package/src/libs/feature/editor/src/lib/{record-form → components/record-form}/record-form.component.html +1 -0
  256. package/src/libs/feature/editor/src/lib/{record-form → components/record-form}/record-form.component.ts +4 -4
  257. package/src/libs/feature/editor/src/lib/feature-editor.module.ts +9 -9
  258. package/src/libs/feature/editor/src/lib/models/fields.model.ts +1 -1
  259. package/src/libs/feature/editor/src/lib/services/editor.service.ts +27 -16
  260. package/src/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component.ts +5 -1
  261. package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.html +1 -1
  262. package/src/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.css +0 -0
  263. package/src/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.html +36 -0
  264. package/src/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.ts +80 -0
  265. package/src/libs/feature/map/src/lib/feature-map.module.ts +2 -0
  266. package/src/libs/feature/map/src/lib/layers-panel/layers-panel.component.html +8 -0
  267. package/src/libs/feature/map/src/lib/layers-panel/layers-panel.component.ts +5 -0
  268. package/src/libs/feature/map/src/lib/map-context/map-context.model.ts +10 -3
  269. package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +60 -32
  270. package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +17 -61
  271. package/src/libs/feature/notifications/src/index.ts +3 -0
  272. package/src/libs/feature/notifications/src/lib/feature-notifications.module.ts +10 -0
  273. package/src/libs/feature/notifications/src/lib/notification.model.ts +6 -0
  274. package/src/libs/feature/notifications/src/lib/notifications-container/notifications-container.component.css +0 -0
  275. package/src/libs/feature/notifications/src/lib/notifications-container/notifications-container.component.html +17 -0
  276. package/src/libs/feature/notifications/src/lib/notifications-container/notifications-container.component.ts +44 -0
  277. package/src/libs/feature/notifications/src/lib/notifications.service.ts +27 -0
  278. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +5 -1
  279. package/src/libs/feature/search/src/lib/results-table/results-table.component.html +3 -3
  280. package/src/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.html +5 -5
  281. package/src/libs/ui/elements/src/index.ts +14 -14
  282. package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.html +1 -1
  283. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.css +0 -5
  284. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.html +0 -21
  285. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.ts +1 -14
  286. package/src/libs/ui/elements/src/lib/notification/notification.component.css +0 -0
  287. package/src/libs/ui/elements/src/lib/notification/notification.component.html +52 -0
  288. package/src/libs/ui/elements/src/lib/notification/notification.component.ts +31 -0
  289. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.html +1 -1
  290. package/src/libs/ui/elements/src/lib/thumbnail/thumbnail.component.ts +5 -3
  291. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +1 -1
  292. package/src/libs/ui/inputs/src/index.ts +0 -1
  293. package/src/libs/ui/inputs/src/lib/button/button.component.ts +1 -1
  294. package/src/libs/ui/inputs/src/lib/files-drop/files-drop.directive.ts +45 -0
  295. package/src/libs/ui/inputs/src/lib/image-input/image-input.component.css +0 -0
  296. package/src/libs/ui/inputs/src/lib/image-input/image-input.component.html +146 -0
  297. package/src/libs/ui/inputs/src/lib/image-input/image-input.component.ts +193 -0
  298. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +3 -19
  299. package/src/libs/ui/layout/src/index.ts +5 -4
  300. package/src/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.css +0 -0
  301. package/src/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.html +18 -0
  302. package/src/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.ts +16 -0
  303. package/src/libs/util/shared/src/lib/utils/bytes-convert.ts +3 -0
  304. package/src/libs/util/shared/src/lib/utils/image-resize.ts +72 -0
  305. package/src/libs/util/shared/src/lib/utils/index.ts +7 -5
  306. package/tailwind.base.css +36 -0
  307. package/translations/de.json +20 -0
  308. package/translations/en.json +20 -0
  309. package/translations/es.json +20 -0
  310. package/translations/fr.json +20 -0
  311. package/translations/it.json +20 -0
  312. package/translations/nl.json +20 -0
  313. package/translations/pt.json +20 -0
  314. package/translations/sk.json +20 -0
  315. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +0 -52
  316. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.mjs +0 -14
  317. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/role.mapper.mjs +0 -48
  318. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/status.mapper.mjs +0 -18
  319. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/update-frequency.mapper.mjs +0 -64
  320. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/converter.mjs +0 -130
  321. package/esm2022/libs/api/metadata-converter/src/lib/metadata-base.mapper.mjs +0 -14
  322. package/esm2022/libs/data-access/gn4/src/openapi/model/inlineObject3.api.model.mjs +0 -13
  323. package/esm2022/libs/feature/editor/src/lib/record-form/record-form.component.mjs +0 -30
  324. package/esm2022/libs/ui/inputs/src/lib/form-field/form-field-array/form-field-array.component.mjs +0 -11
  325. package/esm2022/libs/ui/inputs/src/lib/form-field/form-field-file/form-field-file.component.mjs +0 -27
  326. package/esm2022/libs/ui/inputs/src/lib/form-field/form-field-object/form-field-object.component.mjs +0 -11
  327. package/esm2022/libs/ui/inputs/src/lib/form-field/form-field-rich/form-field-rich.component.mjs +0 -27
  328. package/esm2022/libs/ui/inputs/src/lib/form-field/form-field-simple/form-field-simple.component.mjs +0 -49
  329. package/esm2022/libs/ui/inputs/src/lib/form-field/form-field-spatial-extent/form-field-spatial-extent.component.mjs +0 -11
  330. package/esm2022/libs/ui/inputs/src/lib/form-field/form-field-temporal-extent/form-field-temporal-extent.component.mjs +0 -11
  331. package/esm2022/libs/ui/inputs/src/lib/form-field/form-field.component.mjs +0 -76
  332. package/esm2022/libs/ui/inputs/src/lib/form-field/form-field.model.mjs +0 -2
  333. package/esm2022/libs/ui/inputs/src/lib/form-field/index.mjs +0 -10
  334. package/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.d.ts.map +0 -1
  335. package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts.map +0 -1
  336. package/libs/api/metadata-converter/src/lib/iso19139/codelists/role.mapper.d.ts.map +0 -1
  337. package/libs/api/metadata-converter/src/lib/iso19139/codelists/status.mapper.d.ts.map +0 -1
  338. package/libs/api/metadata-converter/src/lib/iso19139/codelists/update-frequency.mapper.d.ts.map +0 -1
  339. package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts +0 -4
  340. package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts.map +0 -1
  341. package/libs/api/metadata-converter/src/lib/metadata-base.mapper.d.ts.map +0 -1
  342. package/libs/data-access/gn4/src/openapi/model/inlineObject3.api.model.d.ts +0 -18
  343. package/libs/data-access/gn4/src/openapi/model/inlineObject3.api.model.d.ts.map +0 -1
  344. package/libs/feature/editor/src/lib/record-form/record-form.component.d.ts.map +0 -1
  345. package/libs/ui/inputs/src/lib/form-field/form-field-array/form-field-array.component.d.ts.map +0 -1
  346. package/libs/ui/inputs/src/lib/form-field/form-field-file/form-field-file.component.d.ts.map +0 -1
  347. package/libs/ui/inputs/src/lib/form-field/form-field-object/form-field-object.component.d.ts.map +0 -1
  348. package/libs/ui/inputs/src/lib/form-field/form-field-rich/form-field-rich.component.d.ts +0 -11
  349. package/libs/ui/inputs/src/lib/form-field/form-field-rich/form-field-rich.component.d.ts.map +0 -1
  350. package/libs/ui/inputs/src/lib/form-field/form-field-simple/form-field-simple.component.d.ts.map +0 -1
  351. package/libs/ui/inputs/src/lib/form-field/form-field-spatial-extent/form-field-spatial-extent.component.d.ts.map +0 -1
  352. package/libs/ui/inputs/src/lib/form-field/form-field-temporal-extent/form-field-temporal-extent.component.d.ts.map +0 -1
  353. package/libs/ui/inputs/src/lib/form-field/form-field.component.d.ts.map +0 -1
  354. package/libs/ui/inputs/src/lib/form-field/form-field.model.d.ts.map +0 -1
  355. package/libs/ui/inputs/src/lib/form-field/index.d.ts.map +0 -1
  356. package/src/libs/api/metadata-converter/src/lib/iso19139/converter.ts +0 -196
  357. package/src/libs/data-access/gn4/src/openapi/model/inlineObject3.api.model.ts +0 -18
  358. package/src/libs/ui/inputs/src/lib/form-field/form-field-rich/form-field-rich.component.html +0 -11
  359. package/src/libs/ui/inputs/src/lib/form-field/form-field-rich/form-field-rich.component.ts +0 -15
  360. package/src/libs/ui/inputs/src/lib/form-field/form-field.component.ts +0 -80
  361. /package/libs/api/metadata-converter/src/lib/iso19139/{codelists → utils}/keyword.mapper.d.ts +0 -0
  362. /package/libs/api/metadata-converter/src/lib/iso19139/{codelists → utils}/role.mapper.d.ts +0 -0
  363. /package/libs/api/metadata-converter/src/lib/iso19139/{codelists → utils}/status.mapper.d.ts +0 -0
  364. /package/libs/api/metadata-converter/src/lib/iso19139/{codelists → utils}/update-frequency.mapper.d.ts +0 -0
  365. /package/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field.model.d.ts +0 -0
  366. /package/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/index.d.ts +0 -0
  367. /package/src/libs/api/metadata-converter/src/lib/iso19139/{codelists → utils}/keyword.mapper.ts +0 -0
  368. /package/src/libs/api/metadata-converter/src/lib/iso19139/{codelists → utils}/role.mapper.ts +0 -0
  369. /package/src/libs/api/metadata-converter/src/lib/iso19139/{codelists → utils}/status.mapper.ts +0 -0
  370. /package/src/libs/api/metadata-converter/src/lib/iso19139/{codelists → utils}/update-frequency.mapper.ts +0 -0
  371. /package/src/libs/feature/editor/src/lib/{record-form/record-form.component.css → components/overview-upload/overview-upload.component.css} +0 -0
  372. /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-array/form-field-array.component.css +0 -0
  373. /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-array/form-field-array.component.html +0 -0
  374. /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-file/form-field-file.component.css +0 -0
  375. /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-file/form-field-file.component.html +0 -0
  376. /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-object/form-field-object.component.css +0 -0
  377. /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-object/form-field-object.component.html +0 -0
  378. /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-rich/form-field-rich.component.css +0 -0
  379. /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-simple/form-field-simple.component.css +0 -0
  380. /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-simple/form-field-simple.component.html +0 -0
  381. /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-spatial-extent/form-field-spatial-extent.component.css +0 -0
  382. /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-spatial-extent/form-field-spatial-extent.component.html +0 -0
  383. /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-temporal-extent/form-field-temporal-extent.component.css +0 -0
  384. /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field-temporal-extent/form-field-temporal-extent.component.html +0 -0
  385. /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field.component.css +0 -0
  386. /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/form-field.model.ts +0 -0
  387. /package/src/libs/{ui/inputs/src/lib → feature/editor/src/lib/components/record-form}/form-field/index.ts +0 -0
@@ -14,7 +14,7 @@ import {
14
14
  } from '../../../../../../libs/common/domain/src/lib/model/search'
15
15
  import { map } from 'rxjs/operators'
16
16
  import {
17
- Gn4MetadataMapper,
17
+ Gn4Converter,
18
18
  Gn4SearchResults,
19
19
  } from '../../../../../../libs/api/metadata-converter/src'
20
20
  import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/model/record'
@@ -24,7 +24,7 @@ export class Gn4Repository implements RecordsRepositoryInterface {
24
24
  constructor(
25
25
  private gn4SearchApi: SearchApiService,
26
26
  private gn4SearchHelper: ElasticsearchService,
27
- private gn4Mapper: Gn4MetadataMapper
27
+ private gn4Mapper: Gn4Converter
28
28
  ) {}
29
29
 
30
30
  search({
@@ -83,8 +83,8 @@ export interface BaseRecord {
83
83
  title: string
84
84
  abstract: string
85
85
  recordCreated?: Date
86
- recordUpdated: Date
87
86
  recordPublished?: Date
87
+ recordUpdated: Date
88
88
  languages: Array<LanguageCode>
89
89
  kind: RecordKind
90
90
  topics: Array<string> // TODO: handle codelists
@@ -98,6 +98,12 @@ export interface BaseRecord {
98
98
  landingPage?: URL
99
99
  updateFrequency?: UpdateFrequency
100
100
 
101
+ // information related to the resource (dataset, service)
102
+ contactsForResource: Array<Individual>
103
+ resourceCreated?: Date
104
+ resourcePublished?: Date
105
+ resourceUpdated?: Date
106
+
101
107
  // to add: canonical url
102
108
  // to add: source catalog (??)
103
109
  // to add: is open data ?
@@ -173,10 +179,7 @@ export interface DatasetTemporalExtent {
173
179
 
174
180
  export interface DatasetRecord extends BaseRecord {
175
181
  kind: 'dataset'
176
- contactsForResource: Array<Individual>
177
182
  status: RecordStatus
178
- datasetCreated?: Date
179
- datasetUpdated?: Date
180
183
  lineage: string // Explanation of the origin of this record (e.g: how, why)"
181
184
  distributions: Array<DatasetDistribution>
182
185
  spatialExtents: Array<DatasetSpatialExtent>
@@ -203,3 +206,5 @@ export interface ServiceRecord extends BaseRecord {
203
206
  }
204
207
 
205
208
  export type CatalogRecord = ServiceRecord | DatasetRecord
209
+
210
+ export type CatalogRecordKeys = keyof ServiceRecord | keyof DatasetRecord
@@ -30,7 +30,6 @@ import {
30
30
  import { ExtentDtoApiModel } from '../model/models'
31
31
  import { FeatureResponseApiModel } from '../model/models'
32
32
  import { IProcessingReportApiModel } from '../model/models'
33
- import { InlineObject3ApiModel } from '../model/models'
34
33
  import { MetadataBatchApproveParameterApiModel } from '../model/models'
35
34
  import { MetadataBatchSubmitParameterApiModel } from '../model/models'
36
35
  import { MetadataCategoryApiModel } from '../model/models'
@@ -75,6 +74,20 @@ export class RecordsApiService {
75
74
  this.encoder = this.configuration.encoder || new CustomHttpParameterCodec()
76
75
  }
77
76
 
77
+ /**
78
+ * @param consumes string[] mime-types
79
+ * @return true: consumes contains 'multipart/form-data', false: otherwise
80
+ */
81
+ private canConsumeForm(consumes: string[]): boolean {
82
+ const form = 'multipart/form-data'
83
+ for (const consume of consumes) {
84
+ if (form === consume) {
85
+ return true
86
+ }
87
+ }
88
+ return false
89
+ }
90
+
78
91
  private addToHttpParams(
79
92
  httpParams: HttpParams,
80
93
  value: any,
@@ -8290,44 +8303,44 @@ export class RecordsApiService {
8290
8303
  /**
8291
8304
  * Create a new resource for a given metadata
8292
8305
  * @param metadataUuid The metadata UUID
8306
+ * @param file The file to upload
8293
8307
  * @param visibility The sharing policy
8294
8308
  * @param approved Use approved version or not
8295
- * @param inlineObject3ApiModel
8296
8309
  * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
8297
8310
  * @param reportProgress flag to report request and response progress.
8298
8311
  */
8299
8312
  public putResource(
8300
8313
  metadataUuid: string,
8314
+ file: Blob,
8301
8315
  visibility?: 'public' | 'private',
8302
8316
  approved?: boolean,
8303
- inlineObject3ApiModel?: InlineObject3ApiModel,
8304
8317
  observe?: 'body',
8305
8318
  reportProgress?: boolean,
8306
8319
  options?: { httpHeaderAccept?: 'application/json' }
8307
8320
  ): Observable<MetadataResourceApiModel>
8308
8321
  public putResource(
8309
8322
  metadataUuid: string,
8323
+ file: Blob,
8310
8324
  visibility?: 'public' | 'private',
8311
8325
  approved?: boolean,
8312
- inlineObject3ApiModel?: InlineObject3ApiModel,
8313
8326
  observe?: 'response',
8314
8327
  reportProgress?: boolean,
8315
8328
  options?: { httpHeaderAccept?: 'application/json' }
8316
8329
  ): Observable<HttpResponse<MetadataResourceApiModel>>
8317
8330
  public putResource(
8318
8331
  metadataUuid: string,
8332
+ file: Blob,
8319
8333
  visibility?: 'public' | 'private',
8320
8334
  approved?: boolean,
8321
- inlineObject3ApiModel?: InlineObject3ApiModel,
8322
8335
  observe?: 'events',
8323
8336
  reportProgress?: boolean,
8324
8337
  options?: { httpHeaderAccept?: 'application/json' }
8325
8338
  ): Observable<HttpEvent<MetadataResourceApiModel>>
8326
8339
  public putResource(
8327
8340
  metadataUuid: string,
8341
+ file: Blob,
8328
8342
  visibility?: 'public' | 'private',
8329
8343
  approved?: boolean,
8330
- inlineObject3ApiModel?: InlineObject3ApiModel,
8331
8344
  observe: any = 'body',
8332
8345
  reportProgress: boolean = false,
8333
8346
  options?: { httpHeaderAccept?: 'application/json' }
@@ -8337,6 +8350,11 @@ export class RecordsApiService {
8337
8350
  'Required parameter metadataUuid was null or undefined when calling putResource.'
8338
8351
  )
8339
8352
  }
8353
+ if (file === null || file === undefined) {
8354
+ throw new Error(
8355
+ 'Required parameter file was null or undefined when calling putResource.'
8356
+ )
8357
+ }
8340
8358
 
8341
8359
  let queryParameters = new HttpParams({ encoder: this.encoder })
8342
8360
  if (visibility !== undefined && visibility !== null) {
@@ -8369,11 +8387,24 @@ export class RecordsApiService {
8369
8387
  }
8370
8388
 
8371
8389
  // to determine the Content-Type header
8372
- const consumes: string[] = ['application/json']
8373
- const httpContentTypeSelected: string | undefined =
8374
- this.configuration.selectHeaderContentType(consumes)
8375
- if (httpContentTypeSelected !== undefined) {
8376
- headers = headers.set('Content-Type', httpContentTypeSelected)
8390
+ const consumes: string[] = ['multipart/form-data']
8391
+
8392
+ const canConsumeForm = this.canConsumeForm(consumes)
8393
+
8394
+ let formParams: { append(param: string, value: any): any }
8395
+ let useForm = false
8396
+ let convertFormParamsToString = false
8397
+ // use FormData to transmit files using content-type "multipart/form-data"
8398
+ // see https://stackoverflow.com/questions/4007969/application-x-www-form-urlencoded-or-multipart-form-data
8399
+ useForm = canConsumeForm
8400
+ if (useForm) {
8401
+ formParams = new FormData()
8402
+ } else {
8403
+ formParams = new HttpParams({ encoder: this.encoder })
8404
+ }
8405
+
8406
+ if (file !== undefined) {
8407
+ formParams = (formParams.append('file', <any>file) as any) || formParams
8377
8408
  }
8378
8409
 
8379
8410
  let responseType_: 'text' | 'json' = 'json'
@@ -8388,7 +8419,7 @@ export class RecordsApiService {
8388
8419
  `${this.configuration.basePath}/records/${encodeURIComponent(
8389
8420
  String(metadataUuid)
8390
8421
  )}/attachments`,
8391
- inlineObject3ApiModel,
8422
+ convertFormParamsToString ? formParams.toString() : formParams,
8392
8423
  {
8393
8424
  params: queryParameters,
8394
8425
  responseType: <any>responseType_,
@@ -33,7 +33,6 @@ export * from './iProcessingReport.api.model'
33
33
  export * from './iSODate.api.model'
34
34
  export * from './infoReport.api.model'
35
35
  export * from './inlineObject1.api.model'
36
- export * from './inlineObject3.api.model'
37
36
  export * from './inlineObject4.api.model'
38
37
  export * from './isoLanguage.api.model'
39
38
  export * from './jSONObject.api.model'
@@ -7390,7 +7390,7 @@ paths:
7390
7390
  example: true
7391
7391
  requestBody:
7392
7392
  content:
7393
- application/json:
7393
+ multipart/form-data:
7394
7394
  schema:
7395
7395
  required:
7396
7396
  - file
@@ -94,7 +94,7 @@ export class DataService {
94
94
  ),
95
95
  geojson: endpoint.supportsJson(featureType.name)
96
96
  ? endpoint.getFeatureUrl(featureType.name, {
97
- outputFormat: 'application/json',
97
+ asJson: true,
98
98
  outputCrs: 'EPSG:4326',
99
99
  })
100
100
  : null,
@@ -5,7 +5,7 @@ export * from './lib/+state/editor.reducer'
5
5
  export * from './lib/+state/editor.actions'
6
6
  export * from './lib/feature-editor.module'
7
7
  export * from './lib/services/editor.service'
8
- export * from './lib/record-form/record-form.component'
8
+ export * from './lib/components/record-form/record-form.component'
9
9
  export * from './lib/components/wizard/wizard.component'
10
10
  export * from './lib/components/wizard-field/wizard-field.component'
11
11
  export * from './lib/components/wizard-summarize/wizard-summarize.component'
@@ -3,14 +3,21 @@ import { select, Store } from '@ngrx/store'
3
3
  import * as EditorActions from './editor.actions'
4
4
  import * as EditorSelectors from './editor.selectors'
5
5
  import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/model/record'
6
+ import { filter, Observable } from 'rxjs'
7
+ import { Actions, ofType } from '@ngrx/effects'
6
8
 
7
9
  @Injectable()
8
10
  export class EditorFacade {
9
11
  private readonly store = inject(Store)
12
+ private actions$ = inject(Actions)
10
13
 
11
14
  record$ = this.store.pipe(select(EditorSelectors.selectRecord))
12
15
  saving$ = this.store.pipe(select(EditorSelectors.selectRecordSaving))
13
- saveError$ = this.store.pipe(select(EditorSelectors.selectRecordSaveError))
16
+ saveError$ = this.store.pipe(
17
+ select(EditorSelectors.selectRecordSaveError),
18
+ filter((error) => !!error)
19
+ )
20
+ saveSuccess$ = this.actions$.pipe(ofType(EditorActions.saveRecordSuccess))
14
21
  changedSinceSave$ = this.store.pipe(
15
22
  select(EditorSelectors.selectRecordChangedSinceSave)
16
23
  )
@@ -0,0 +1,8 @@
1
+ <gn-ui-image-input
2
+ [maxSizeMB]="5"
3
+ [previewUrl]="resourceUrl"
4
+ [altText]="resourceFileName"
5
+ (fileChange)="handleFileChange($event)"
6
+ (urlChange)="handleUrlChange($event)"
7
+ (delete)="handleDelete()"
8
+ ></gn-ui-image-input>
@@ -0,0 +1,70 @@
1
+ import {
2
+ ChangeDetectionStrategy,
3
+ ChangeDetectorRef,
4
+ Component,
5
+ Input,
6
+ OnInit,
7
+ } from '@angular/core'
8
+ import { CommonModule } from '@angular/common'
9
+ import { RecordsApiService } from '../../../../../../../libs/data-access/gn4/src'
10
+ import { UiInputsModule } from '../../../../../../../libs/ui/inputs/src'
11
+
12
+ @Component({
13
+ selector: 'gn-ui-overview-upload',
14
+ standalone: true,
15
+ imports: [CommonModule, UiInputsModule],
16
+ templateUrl: './overview-upload.component.html',
17
+ styleUrls: ['./overview-upload.component.css'],
18
+ changeDetection: ChangeDetectionStrategy.OnPush,
19
+ })
20
+ export class OverviewUploadComponent implements OnInit {
21
+ @Input() metadataUuid: string
22
+
23
+ resourceFileName: string
24
+ resourceUrl: string
25
+
26
+ constructor(
27
+ private recordsApiService: RecordsApiService,
28
+ private cd: ChangeDetectorRef
29
+ ) {}
30
+
31
+ ngOnInit(): void {
32
+ this.recordsApiService
33
+ .getAllResources(this.metadataUuid)
34
+ .subscribe((resources) => {
35
+ this.resourceFileName = resources[0]?.filename
36
+ this.resourceUrl = resources[0]?.url
37
+ this.cd.markForCheck()
38
+ })
39
+ }
40
+
41
+ handleFileChange(file: File) {
42
+ this.recordsApiService
43
+ .putResource(this.metadataUuid, file, 'public')
44
+ .subscribe((resource) => {
45
+ this.resourceFileName = resource.filename
46
+ this.resourceUrl = resource.url
47
+ this.cd.markForCheck()
48
+ })
49
+ }
50
+
51
+ handleUrlChange(url: string) {
52
+ this.recordsApiService
53
+ .putResourceFromURL(this.metadataUuid, url, 'public')
54
+ .subscribe((resource) => {
55
+ this.resourceFileName = resource.filename
56
+ this.resourceUrl = resource.url
57
+ this.cd.markForCheck()
58
+ })
59
+ }
60
+
61
+ handleDelete() {
62
+ this.recordsApiService
63
+ .delResource(this.metadataUuid, this.resourceFileName)
64
+ .subscribe(() => {
65
+ this.resourceFileName = null
66
+ this.resourceUrl = null
67
+ this.cd.markForCheck()
68
+ })
69
+ }
70
+ }
@@ -5,5 +5,6 @@ import { ChangeDetectionStrategy, Component } from '@angular/core'
5
5
  templateUrl: './form-field-array.component.html',
6
6
  styleUrls: ['./form-field-array.component.css'],
7
7
  changeDetection: ChangeDetectionStrategy.OnPush,
8
+ standalone: true,
8
9
  })
9
10
  export class FormFieldArrayComponent {}
@@ -1,11 +1,14 @@
1
+ import { CommonModule } from '@angular/common'
1
2
  import { ChangeDetectionStrategy, Component, Input } from '@angular/core'
2
- import { FormControl } from '@angular/forms'
3
+ import { FormControl, ReactiveFormsModule } from '@angular/forms'
3
4
 
4
5
  @Component({
5
6
  selector: 'gn-ui-form-field-file',
6
7
  templateUrl: './form-field-file.component.html',
7
8
  styleUrls: ['./form-field-file.component.css'],
8
9
  changeDetection: ChangeDetectionStrategy.OnPush,
10
+ standalone: true,
11
+ imports: [CommonModule, ReactiveFormsModule],
9
12
  })
10
13
  export class FormFieldFileComponent {
11
14
  @Input() control!: FormControl
@@ -5,5 +5,6 @@ import { ChangeDetectionStrategy, Component } from '@angular/core'
5
5
  templateUrl: './form-field-object.component.html',
6
6
  styleUrls: ['./form-field-object.component.css'],
7
7
  changeDetection: ChangeDetectionStrategy.OnPush,
8
+ standalone: true,
8
9
  })
9
10
  export class FormFieldObjectComponent {}
@@ -0,0 +1,20 @@
1
+ <gn-ui-form-field-wrapper [label]="label" [hint]="hint">
2
+ <gn-ui-button
3
+ form-field-interaction
4
+ [extraClass]="getButtonExtraClass()"
5
+ (buttonClick)="togglePreview()"
6
+ >
7
+ <span class="material-symbols-outlined mr-1 gn-ui-icon-small">{{
8
+ preview ? 'visibility' : 'visibility_off'
9
+ }}</span>
10
+ {{ preview ? 'WYSIWYG' : 'Markdown' }}
11
+ </gn-ui-button>
12
+ <gn-ui-markdown-editor
13
+ class="h-full"
14
+ [preview]="preview"
15
+ [helperText]="helperText"
16
+ [placeholder]="placeholder"
17
+ [textContent]="control.value"
18
+ (textContentChanged)="handleTextContentChanged($event)"
19
+ ></gn-ui-markdown-editor>
20
+ </gn-ui-form-field-wrapper>
@@ -0,0 +1,44 @@
1
+ import { CommonModule } from '@angular/common'
2
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core'
3
+ import { FormControl, ReactiveFormsModule } from '@angular/forms'
4
+ import { MarkdownEditorComponent } from '../../../../../../../../../libs/ui/elements/src'
5
+ import { ButtonComponent } from '../../../../../../../../../libs/ui/inputs/src'
6
+ import { FormFieldWrapperComponent } from '../../../../../../../../../libs/ui/layout/src'
7
+
8
+ @Component({
9
+ selector: 'gn-ui-form-field-rich',
10
+ templateUrl: './form-field-rich.component.html',
11
+ styleUrls: ['./form-field-rich.component.css'],
12
+ changeDetection: ChangeDetectionStrategy.OnPush,
13
+ standalone: true,
14
+ imports: [
15
+ CommonModule,
16
+ ReactiveFormsModule,
17
+ MarkdownEditorComponent,
18
+ FormFieldWrapperComponent,
19
+ ButtonComponent,
20
+ ],
21
+ })
22
+ export class FormFieldRichComponent {
23
+ @Input() control!: FormControl
24
+ @Input() label: string
25
+ @Input() hint: string
26
+ @Input() helperText: string
27
+ @Input() placeholder = 'Votre texte ici' //TODO: translate
28
+
29
+ preview = false
30
+
31
+ getButtonExtraClass() {
32
+ return `${
33
+ this.preview ? 'text-gray-200 bg-gray-900' : 'text-gray-900 bg-gray-200'
34
+ } rounded-[1.25rem] p-[0.375rem] text-xs font-medium w-24`
35
+ }
36
+
37
+ togglePreview() {
38
+ this.preview = !this.preview
39
+ }
40
+
41
+ handleTextContentChanged(textContent: string) {
42
+ this.control.setValue(textContent)
43
+ }
44
+ }
@@ -1,11 +1,14 @@
1
+ import { CommonModule } from '@angular/common'
1
2
  import { ChangeDetectionStrategy, Component, Input } from '@angular/core'
2
- import { FormControl } from '@angular/forms'
3
+ import { FormControl, ReactiveFormsModule } from '@angular/forms'
3
4
 
4
5
  @Component({
5
6
  selector: 'gn-ui-form-field-simple',
6
7
  templateUrl: './form-field-simple.component.html',
7
8
  styleUrls: ['./form-field-simple.component.css'],
8
9
  changeDetection: ChangeDetectionStrategy.OnPush,
10
+ standalone: true,
11
+ imports: [CommonModule, ReactiveFormsModule],
9
12
  })
10
13
  export class FormFieldSimpleComponent {
11
14
  @Input() type: 'date' | 'url' | 'text' | 'number' | 'list' | 'toggle'
@@ -5,5 +5,6 @@ import { ChangeDetectionStrategy, Component } from '@angular/core'
5
5
  templateUrl: './form-field-spatial-extent.component.html',
6
6
  styleUrls: ['./form-field-spatial-extent.component.css'],
7
7
  changeDetection: ChangeDetectionStrategy.OnPush,
8
+ standalone: true,
8
9
  })
9
10
  export class FormFieldSpatialExtentComponent {}
@@ -5,5 +5,6 @@ import { ChangeDetectionStrategy, Component } from '@angular/core'
5
5
  templateUrl: './form-field-temporal-extent.component.html',
6
6
  styleUrls: ['./form-field-temporal-extent.component.css'],
7
7
  changeDetection: ChangeDetectionStrategy.OnPush,
8
+ standalone: true,
8
9
  })
9
10
  export class FormFieldTemporalExtentComponent {}
@@ -24,6 +24,30 @@
24
24
  >cancel</mat-icon
25
25
  >
26
26
  </div>
27
+ <ng-container *ngIf="isTitle">
28
+ <div class="flex justify-between items-center gap-3">
29
+ <h2
30
+ #titleInput
31
+ class="grow text-3xl font-normal"
32
+ [gnUiEditableLabel]="true"
33
+ (editableLabelChanged)="formControl.setValue($event)"
34
+ >
35
+ {{ formControl.value }}
36
+ </h2>
37
+ <span
38
+ class="material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer"
39
+ (click)="focusTitleInput()"
40
+ >edit</span
41
+ >
42
+ <span
43
+ class="material-symbols-outlined gn-ui-icon-small m-2"
44
+ [matTooltip]="config.hintKey | translate"
45
+ matTooltipPosition="above"
46
+ >
47
+ help
48
+ </span>
49
+ </div>
50
+ </ng-container>
27
51
  <ng-container *ngIf="isSimpleField">
28
52
  <gn-ui-form-field-simple
29
53
  [type]="simpleType"
@@ -39,12 +63,12 @@
39
63
  [invalid]="isFieldInvalid"
40
64
  ></gn-ui-form-field-file>
41
65
  </ng-container>
42
- <ng-container *ngIf="isRichField">
66
+ <ng-container *ngIf="isAbstract">
43
67
  <gn-ui-form-field-rich
44
- class="grow"
68
+ class="h-[8rem]"
45
69
  [control]="formControl"
46
- [readonly]="isFieldLocked"
47
- [invalid]="isFieldInvalid"
70
+ [label]="config.labelKey | translate"
71
+ [hint]="config.hintKey | translate"
48
72
  ></gn-ui-form-field-rich>
49
73
  </ng-container>
50
74
  <ng-container *ngIf="isArrayField">
@@ -0,0 +1,121 @@
1
+ import { CommonModule } from '@angular/common'
2
+ import {
3
+ ChangeDetectionStrategy,
4
+ Component,
5
+ ElementRef,
6
+ Input,
7
+ Output,
8
+ ViewChild,
9
+ } from '@angular/core'
10
+ import { FormControl, ReactiveFormsModule } from '@angular/forms'
11
+ import { MatIconModule } from '@angular/material/icon'
12
+ import { MatTooltipModule } from '@angular/material/tooltip'
13
+ import { EditableLabelDirective } from '../../../../../../../../libs/ui/inputs/src'
14
+ import { TranslateModule } from '@ngx-translate/core'
15
+ import { Observable } from 'rxjs'
16
+ import { FormFieldArrayComponent } from './form-field-array/form-field-array.component'
17
+ import { FormFieldFileComponent } from './form-field-file/form-field-file.component'
18
+ import { FormFieldObjectComponent } from './form-field-object/form-field-object.component'
19
+ import { FormFieldRichComponent } from './form-field-rich/form-field-rich.component'
20
+ import { FormFieldSimpleComponent } from './form-field-simple/form-field-simple.component'
21
+ import { FormFieldSpatialExtentComponent } from './form-field-spatial-extent/form-field-spatial-extent.component'
22
+ import { FormFieldTemporalExtentComponent } from './form-field-temporal-extent/form-field-temporal-extent.component'
23
+ import { FormFieldConfig } from './form-field.model'
24
+
25
+ @Component({
26
+ selector: 'gn-ui-form-field',
27
+ templateUrl: './form-field.component.html',
28
+ styleUrls: ['./form-field.component.css'],
29
+ changeDetection: ChangeDetectionStrategy.OnPush,
30
+ standalone: true,
31
+ imports: [
32
+ CommonModule,
33
+ ReactiveFormsModule,
34
+ EditableLabelDirective,
35
+ MatIconModule,
36
+ MatTooltipModule,
37
+ FormFieldSimpleComponent,
38
+ FormFieldRichComponent,
39
+ FormFieldObjectComponent,
40
+ FormFieldSpatialExtentComponent,
41
+ FormFieldTemporalExtentComponent,
42
+ FormFieldFileComponent,
43
+ FormFieldArrayComponent,
44
+ TranslateModule,
45
+ ],
46
+ })
47
+ export class FormFieldComponent {
48
+ @Input() model: string
49
+ @Input() config: FormFieldConfig
50
+ @Input() set value(v: unknown) {
51
+ this.formControl.setValue(v, {
52
+ emitEvent: false,
53
+ })
54
+ }
55
+ @Output() valueChange: Observable<unknown>
56
+
57
+ @ViewChild('titleInput') titleInput: ElementRef
58
+
59
+ formControl = new FormControl()
60
+
61
+ constructor() {
62
+ this.valueChange = this.formControl.valueChanges
63
+ }
64
+
65
+ focusTitleInput() {
66
+ this.titleInput.nativeElement.children[0].focus()
67
+ }
68
+
69
+ get simpleType() {
70
+ return this.config.type as
71
+ | 'date'
72
+ | 'url'
73
+ | 'text'
74
+ | 'number'
75
+ | 'list'
76
+ | 'toggle'
77
+ }
78
+
79
+ get isSimpleField() {
80
+ return (
81
+ this.config.type === 'text' ||
82
+ this.config.type === 'number' ||
83
+ this.config.type === 'date' ||
84
+ this.config.type === 'list' ||
85
+ this.config.type === 'url' ||
86
+ this.config.type === 'toggle'
87
+ )
88
+ }
89
+ get isFileField() {
90
+ return this.config.type === 'file'
91
+ }
92
+ get isSpatialExtentField() {
93
+ return this.config.type === 'spatial_extent'
94
+ }
95
+ get isTemporalExtentField() {
96
+ return this.config.type === 'temporal_extent'
97
+ }
98
+ get isArrayField() {
99
+ return this.config.type === 'array'
100
+ }
101
+ get isObjectField() {
102
+ return this.config.type === 'object'
103
+ }
104
+
105
+ get isFieldOk() {
106
+ return !this.config.locked && !this.config.invalid
107
+ }
108
+ get isFieldLocked() {
109
+ return this.config.locked
110
+ }
111
+ get isFieldInvalid() {
112
+ return !this.config.locked && this.config.invalid
113
+ }
114
+
115
+ get isTitle() {
116
+ return this.model === 'title'
117
+ }
118
+ get isAbstract() {
119
+ return this.model === 'abstract'
120
+ }
121
+ }
@@ -2,6 +2,7 @@
2
2
  <ng-container *ngFor="let field of fields$ | async; trackBy: fieldTracker">
3
3
  <gn-ui-form-field
4
4
  *ngIf="field.config.formFieldConfig && !field.config.hidden"
5
+ [model]="field.config.model"
5
6
  [config]="field.config.formFieldConfig"
6
7
  [value]="field.value"
7
8
  (valueChange)="handleFieldValueChange(field, $event)"
@@ -1,8 +1,8 @@
1
1
  import { CommonModule } from '@angular/common'
2
2
  import { ChangeDetectionStrategy, Component } from '@angular/core'
3
- import { UiInputsModule } from '../../../../../../libs/ui/inputs/src'
4
- import { EditorFacade } from '../+state/editor.facade'
5
- import { EditorFieldState, EditorFieldValue } from '../models/fields.model'
3
+ import { EditorFacade } from '../../+state/editor.facade'
4
+ import { EditorFieldState, EditorFieldValue } from '../../models/fields.model'
5
+ import { FormFieldComponent } from './form-field'
6
6
 
7
7
  @Component({
8
8
  selector: 'gn-ui-record-form',
@@ -10,7 +10,7 @@ import { EditorFieldState, EditorFieldValue } from '../models/fields.model'
10
10
  styleUrls: ['./record-form.component.css'],
11
11
  changeDetection: ChangeDetectionStrategy.OnPush,
12
12
  standalone: true,
13
- imports: [CommonModule, UiInputsModule],
13
+ imports: [CommonModule, FormFieldComponent],
14
14
  })
15
15
  export class RecordFormComponent {
16
16
  fields$ = this.facade.recordFields$