geonetwork-ui 2.4.2 → 2.5.0-dev.0a41b52e9

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 (326) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +11 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
  3. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +50 -32
  4. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +26 -10
  5. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  6. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  7. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +7 -4
  8. package/esm2022/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.mjs +18 -16
  9. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +24 -14
  10. package/esm2022/libs/feature/dataviz/src/lib/table-view/table-view.component.mjs +16 -18
  11. package/esm2022/libs/feature/editor/src/index.mjs +2 -1
  12. package/esm2022/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.mjs +3 -3
  13. package/esm2022/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.mjs +2 -2
  14. package/esm2022/libs/feature/editor/src/lib/components/import-record/import-record.component.mjs +4 -4
  15. package/esm2022/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.mjs +2 -2
  16. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.mjs +2 -2
  17. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.mjs +3 -2
  18. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.mjs +2 -2
  19. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/index.mjs +2 -1
  20. package/esm2022/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.mjs +7 -23
  21. package/esm2022/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.mjs +11 -11
  22. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +2 -2
  23. package/esm2022/libs/feature/editor/src/lib/models/wizard-field.type.mjs +3 -4
  24. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.mjs +1 -1
  25. package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +25 -5
  26. package/esm2022/libs/feature/record/src/lib/feature-record.module.mjs +6 -7
  27. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +10 -7
  28. package/esm2022/libs/feature/record/src/lib/state/mdview.actions.mjs +4 -1
  29. package/esm2022/libs/feature/record/src/lib/state/mdview.effects.mjs +7 -2
  30. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +9 -1
  31. package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +19 -1
  32. package/esm2022/libs/feature/record/src/lib/state/mdview.selectors.mjs +6 -1
  33. package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +6 -3
  34. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +1 -1
  35. package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +46 -1
  36. package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +3 -2
  37. package/esm2022/libs/ui/dataviz/src/index.mjs +3 -3
  38. package/esm2022/libs/ui/dataviz/src/lib/data-table/custom.mat.paginator.intl.mjs +51 -0
  39. package/esm2022/libs/ui/dataviz/src/lib/data-table/data-table.component.mjs +133 -0
  40. package/esm2022/libs/ui/dataviz/src/lib/data-table/data-table.data.source.mjs +24 -0
  41. package/esm2022/libs/ui/dataviz/src/lib/data-table/data-table.fixtures.mjs +82 -0
  42. package/esm2022/libs/ui/elements/src/index.mjs +2 -1
  43. package/esm2022/libs/ui/elements/src/lib/application-banner/application-banner.component.mjs +78 -0
  44. package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +3 -3
  45. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +18 -10
  46. package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +2 -1
  47. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +10 -4
  48. package/esm2022/libs/ui/inputs/src/index.mjs +1 -2
  49. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +43 -3
  50. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +1 -6
  51. package/esm2022/libs/ui/inputs/src/lib/url-input/url-input.component.mjs +2 -7
  52. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +14 -4
  53. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +22 -13
  54. package/esm2022/libs/ui/widgets/src/index.mjs +1 -2
  55. package/esm2022/libs/ui/widgets/src/lib/ui-widgets.module.mjs +5 -6
  56. package/esm2022/libs/util/data-fetcher/src/index.mjs +3 -1
  57. package/esm2022/libs/util/data-fetcher/src/lib/data-fetcher.mjs +5 -4
  58. package/esm2022/libs/util/data-fetcher/src/lib/model.mjs +7 -3
  59. package/esm2022/libs/util/data-fetcher/src/lib/readers/base-cache.mjs +12 -0
  60. package/esm2022/libs/util/data-fetcher/src/lib/readers/base-file.mjs +3 -3
  61. package/esm2022/libs/util/data-fetcher/src/lib/readers/base.mjs +1 -1
  62. package/esm2022/libs/util/data-fetcher/src/lib/readers/csv.mjs +2 -2
  63. package/esm2022/libs/util/data-fetcher/src/lib/readers/excel.mjs +2 -2
  64. package/esm2022/libs/util/data-fetcher/src/lib/readers/geojson.mjs +2 -2
  65. package/esm2022/libs/util/data-fetcher/src/lib/readers/gml.mjs +5 -3
  66. package/esm2022/libs/util/data-fetcher/src/lib/readers/json.mjs +2 -2
  67. package/esm2022/libs/util/data-fetcher/src/lib/readers/wfs.mjs +35 -9
  68. package/esm2022/libs/util/data-fetcher/src/lib/utils.mjs +14 -10
  69. package/esm2022/libs/util/shared/src/lib/services/date.service.mjs +41 -0
  70. package/esm2022/libs/util/shared/src/lib/services/index.mjs +2 -1
  71. package/esm2022/libs/util/shared/src/lib/utils/temporal-extent-union.mjs +4 -4
  72. package/esm2022/translations/de.json +10 -75
  73. package/esm2022/translations/en.json +10 -75
  74. package/esm2022/translations/es.json +9 -74
  75. package/esm2022/translations/fr.json +22 -87
  76. package/esm2022/translations/it.json +27 -91
  77. package/esm2022/translations/nl.json +9 -74
  78. package/esm2022/translations/pt.json +9 -74
  79. package/fesm2022/geonetwork-ui.mjs +1194 -1223
  80. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  81. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  82. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +3 -0
  83. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  84. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts +3 -1
  85. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  86. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +2 -1
  87. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  88. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +6 -0
  89. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  90. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +2 -1
  91. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  92. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts +2 -1
  93. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts.map +1 -1
  94. package/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.d.ts +7 -9
  95. package/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.d.ts.map +1 -1
  96. package/libs/feature/dataviz/src/lib/service/data.service.d.ts +2 -2
  97. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  98. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts +5 -7
  99. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts.map +1 -1
  100. package/libs/feature/editor/src/index.d.ts +1 -0
  101. package/libs/feature/editor/src/index.d.ts.map +1 -1
  102. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.d.ts.map +1 -1
  103. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.d.ts.map +1 -1
  104. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts +1 -0
  105. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts.map +1 -1
  106. package/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.d.ts +1 -3
  107. package/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.d.ts.map +1 -1
  108. package/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.d.ts +3 -3
  109. package/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.d.ts.map +1 -1
  110. package/libs/feature/editor/src/lib/models/wizard-field.type.d.ts +2 -3
  111. package/libs/feature/editor/src/lib/models/wizard-field.type.d.ts.map +1 -1
  112. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts +5 -1
  113. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts.map +1 -1
  114. package/libs/feature/record/src/lib/feature-record.module.d.ts +2 -2
  115. package/libs/feature/record/src/lib/feature-record.module.d.ts.map +1 -1
  116. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +3 -2
  117. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  118. package/libs/feature/record/src/lib/state/mdview.actions.d.ts +16 -1
  119. package/libs/feature/record/src/lib/state/mdview.actions.d.ts.map +1 -1
  120. package/libs/feature/record/src/lib/state/mdview.effects.d.ts +5 -0
  121. package/libs/feature/record/src/lib/state/mdview.effects.d.ts.map +1 -1
  122. package/libs/feature/record/src/lib/state/mdview.facade.d.ts +2 -0
  123. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  124. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts +4 -1
  125. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts.map +1 -1
  126. package/libs/feature/record/src/lib/state/mdview.selectors.d.ts +2 -0
  127. package/libs/feature/record/src/lib/state/mdview.selectors.d.ts.map +1 -1
  128. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +2 -1
  129. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
  130. package/libs/feature/search/src/lib/utils/service/fields.d.ts +10 -0
  131. package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
  132. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
  133. package/libs/ui/dataviz/src/index.d.ts +2 -2
  134. package/libs/ui/dataviz/src/index.d.ts.map +1 -1
  135. package/libs/ui/dataviz/src/lib/data-table/custom.mat.paginator.intl.d.ts +14 -0
  136. package/libs/ui/dataviz/src/lib/data-table/custom.mat.paginator.intl.d.ts.map +1 -0
  137. package/libs/ui/dataviz/src/lib/data-table/data-table.component.d.ts +45 -0
  138. package/libs/ui/dataviz/src/lib/data-table/data-table.component.d.ts.map +1 -0
  139. package/libs/ui/dataviz/src/lib/data-table/data-table.data.source.d.ts +12 -0
  140. package/libs/ui/dataviz/src/lib/data-table/data-table.data.source.d.ts.map +1 -0
  141. package/libs/ui/dataviz/src/lib/data-table/data-table.fixtures.d.ts +10 -0
  142. package/libs/ui/dataviz/src/lib/data-table/data-table.fixtures.d.ts.map +1 -0
  143. package/libs/ui/elements/src/index.d.ts +1 -0
  144. package/libs/ui/elements/src/index.d.ts.map +1 -1
  145. package/libs/ui/elements/src/lib/application-banner/application-banner.component.d.ts +16 -0
  146. package/libs/ui/elements/src/lib/application-banner/application-banner.component.d.ts.map +1 -0
  147. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +5 -0
  148. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
  149. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts.map +1 -1
  150. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
  151. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  152. package/libs/ui/inputs/src/index.d.ts +0 -1
  153. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  154. package/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.d.ts +16 -1
  155. package/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.d.ts.map +1 -1
  156. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +27 -28
  157. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
  158. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts +2 -3
  159. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts.map +1 -1
  160. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +4 -2
  161. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -1
  162. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +6 -3
  163. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  164. package/libs/ui/widgets/src/index.d.ts +0 -1
  165. package/libs/ui/widgets/src/index.d.ts.map +1 -1
  166. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts +8 -9
  167. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts.map +1 -1
  168. package/libs/util/data-fetcher/src/index.d.ts +3 -1
  169. package/libs/util/data-fetcher/src/index.d.ts.map +1 -1
  170. package/libs/util/data-fetcher/src/lib/data-fetcher.d.ts +2 -2
  171. package/libs/util/data-fetcher/src/lib/data-fetcher.d.ts.map +1 -1
  172. package/libs/util/data-fetcher/src/lib/model.d.ts +1 -1
  173. package/libs/util/data-fetcher/src/lib/model.d.ts.map +1 -1
  174. package/libs/util/data-fetcher/src/lib/readers/base-cache.d.ts +8 -0
  175. package/libs/util/data-fetcher/src/lib/readers/base-cache.d.ts.map +1 -0
  176. package/libs/util/data-fetcher/src/lib/readers/base-file.d.ts +2 -2
  177. package/libs/util/data-fetcher/src/lib/readers/base-file.d.ts.map +1 -1
  178. package/libs/util/data-fetcher/src/lib/readers/base.d.ts +2 -2
  179. package/libs/util/data-fetcher/src/lib/readers/base.d.ts.map +1 -1
  180. package/libs/util/data-fetcher/src/lib/readers/gml.d.ts +5 -3
  181. package/libs/util/data-fetcher/src/lib/readers/gml.d.ts.map +1 -1
  182. package/libs/util/data-fetcher/src/lib/readers/wfs.d.ts +7 -4
  183. package/libs/util/data-fetcher/src/lib/readers/wfs.d.ts.map +1 -1
  184. package/libs/util/data-fetcher/src/lib/utils.d.ts +2 -2
  185. package/libs/util/data-fetcher/src/lib/utils.d.ts.map +1 -1
  186. package/libs/util/shared/src/lib/services/date.service.d.ts +13 -0
  187. package/libs/util/shared/src/lib/services/date.service.d.ts.map +1 -0
  188. package/libs/util/shared/src/lib/services/index.d.ts +1 -0
  189. package/libs/util/shared/src/lib/services/index.d.ts.map +1 -1
  190. package/libs/util/shared/src/lib/utils/temporal-extent-union.d.ts +2 -1
  191. package/libs/util/shared/src/lib/utils/temporal-extent-union.d.ts.map +1 -1
  192. package/package.json +1 -1
  193. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +25 -0
  194. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +4 -0
  195. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +55 -32
  196. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +45 -18
  197. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +3 -1
  198. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +4 -1
  199. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +165 -0
  200. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +4 -1
  201. package/src/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.html +3 -3
  202. package/src/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.ts +17 -15
  203. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +43 -20
  204. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.html +4 -3
  205. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.ts +10 -18
  206. package/src/libs/feature/editor/src/index.ts +1 -0
  207. package/src/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.html +1 -1
  208. package/src/libs/feature/editor/src/lib/components/import-record/import-record.component.ts +3 -3
  209. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts-for-resource/form-field-contacts-for-resource.component.ts +1 -0
  210. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.ts +1 -1
  211. package/src/libs/feature/editor/src/lib/components/record-form/form-field/index.ts +1 -0
  212. package/src/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.html +0 -13
  213. package/src/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.ts +0 -20
  214. package/src/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.ts +3 -4
  215. package/src/libs/feature/editor/src/lib/fields.config.ts +1 -1
  216. package/src/libs/feature/editor/src/lib/models/wizard-field.type.ts +0 -1
  217. package/src/libs/feature/record/src/lib/data-view/data-view.component.html +24 -11
  218. package/src/libs/feature/record/src/lib/data-view/data-view.component.ts +26 -4
  219. package/src/libs/feature/record/src/lib/feature-record.module.ts +6 -4
  220. package/src/libs/feature/record/src/lib/map-view/map-view.component.html +71 -60
  221. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +6 -3
  222. package/src/libs/feature/record/src/lib/state/mdview.actions.ts +16 -0
  223. package/src/libs/feature/record/src/lib/state/mdview.effects.ts +21 -2
  224. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +15 -0
  225. package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +30 -1
  226. package/src/libs/feature/record/src/lib/state/mdview.selectors.ts +12 -0
  227. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.html +1 -0
  228. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +1 -0
  229. package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +2 -0
  230. package/src/libs/feature/search/src/lib/utils/service/fields.ts +55 -0
  231. package/src/libs/ui/dataviz/src/index.ts +2 -2
  232. package/src/libs/ui/dataviz/src/lib/data-table/custom.mat.paginator.intl.ts +52 -0
  233. package/src/libs/ui/dataviz/src/lib/{table/table.component.css → data-table/data-table.component.css} +4 -0
  234. package/src/libs/ui/dataviz/src/lib/data-table/data-table.component.html +67 -0
  235. package/src/libs/ui/dataviz/src/lib/data-table/data-table.component.ts +173 -0
  236. package/src/libs/ui/dataviz/src/lib/data-table/data-table.data.source.ts +33 -0
  237. package/src/libs/ui/dataviz/src/lib/data-table/data-table.fixtures.ts +84 -0
  238. package/src/libs/ui/elements/src/index.ts +1 -0
  239. package/src/libs/ui/elements/src/lib/application-banner/application-banner.component.css +0 -0
  240. package/src/libs/ui/elements/src/lib/application-banner/application-banner.component.html +25 -0
  241. package/src/libs/ui/elements/src/lib/application-banner/application-banner.component.ts +70 -0
  242. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +2 -2
  243. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +3 -3
  244. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +12 -2
  245. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +2 -0
  246. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +3 -0
  247. package/src/libs/ui/inputs/src/index.ts +0 -1
  248. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.ts +48 -0
  249. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +0 -3
  250. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.ts +1 -7
  251. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +37 -1
  252. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +8 -2
  253. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +2 -0
  254. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +10 -2
  255. package/src/libs/ui/widgets/src/index.ts +0 -1
  256. package/src/libs/ui/widgets/src/lib/ui-widgets.module.ts +2 -3
  257. package/src/libs/util/data-fetcher/src/index.ts +3 -0
  258. package/src/libs/util/data-fetcher/src/lib/data-fetcher.ts +13 -4
  259. package/src/libs/util/data-fetcher/src/lib/model.ts +6 -2
  260. package/src/libs/util/data-fetcher/src/lib/readers/base-cache.ts +14 -0
  261. package/src/libs/util/data-fetcher/src/lib/readers/base-file.ts +2 -1
  262. package/src/libs/util/data-fetcher/src/lib/readers/base.ts +2 -2
  263. package/src/libs/util/data-fetcher/src/lib/readers/csv.ts +1 -1
  264. package/src/libs/util/data-fetcher/src/lib/readers/excel.ts +1 -1
  265. package/src/libs/util/data-fetcher/src/lib/readers/geojson.ts +1 -1
  266. package/src/libs/util/data-fetcher/src/lib/readers/gml.ts +7 -7
  267. package/src/libs/util/data-fetcher/src/lib/readers/json.ts +1 -1
  268. package/src/libs/util/data-fetcher/src/lib/readers/wfs.ts +53 -8
  269. package/src/libs/util/data-fetcher/src/lib/utils.ts +38 -32
  270. package/src/libs/util/shared/src/lib/services/date.service.ts +45 -0
  271. package/src/libs/util/shared/src/lib/services/index.ts +1 -0
  272. package/src/libs/util/shared/src/lib/utils/temporal-extent-union.ts +6 -3
  273. package/translations/de.json +10 -75
  274. package/translations/en.json +10 -75
  275. package/translations/es.json +9 -74
  276. package/translations/fr.json +22 -87
  277. package/translations/it.json +27 -91
  278. package/translations/nl.json +9 -74
  279. package/translations/pt.json +9 -74
  280. package/translations/sk.json +9 -74
  281. package/esm2022/libs/ui/dataviz/src/lib/table/table.component.mjs +0 -61
  282. package/esm2022/libs/ui/dataviz/src/lib/table/table.fixtures.mjs +0 -40
  283. package/esm2022/libs/ui/inputs/src/lib/chips-input/chips-input.component.mjs +0 -78
  284. package/esm2022/libs/ui/widgets/src/lib/step-bar/step-bar.component.mjs +0 -55
  285. package/libs/ui/dataviz/src/lib/table/table.component.d.ts +0 -29
  286. package/libs/ui/dataviz/src/lib/table/table.component.d.ts.map +0 -1
  287. package/libs/ui/dataviz/src/lib/table/table.fixtures.d.ts +0 -11
  288. package/libs/ui/dataviz/src/lib/table/table.fixtures.d.ts.map +0 -1
  289. package/libs/ui/inputs/src/lib/chips-input/chips-input.component.d.ts +0 -33
  290. package/libs/ui/inputs/src/lib/chips-input/chips-input.component.d.ts.map +0 -1
  291. package/libs/ui/widgets/src/lib/step-bar/step-bar.component.d.ts +0 -21
  292. package/libs/ui/widgets/src/lib/step-bar/step-bar.component.d.ts.map +0 -1
  293. package/src/libs/data-access/datafeeder/src/index.ts +0 -1
  294. package/src/libs/data-access/datafeeder/src/openapi/api/api.ts +0 -11
  295. package/src/libs/data-access/datafeeder/src/openapi/api/config.api.service.ts +0 -168
  296. package/src/libs/data-access/datafeeder/src/openapi/api/dataPublishing.api.service.ts +0 -270
  297. package/src/libs/data-access/datafeeder/src/openapi/api/fileUpload.api.service.ts +0 -734
  298. package/src/libs/data-access/datafeeder/src/openapi/api.module.ts +0 -46
  299. package/src/libs/data-access/datafeeder/src/openapi/configuration.ts +0 -125
  300. package/src/libs/data-access/datafeeder/src/openapi/encoder.ts +0 -20
  301. package/src/libs/data-access/datafeeder/src/openapi/index.ts +0 -5
  302. package/src/libs/data-access/datafeeder/src/openapi/model/analysisStatusEnum.api.model.ts +0 -24
  303. package/src/libs/data-access/datafeeder/src/openapi/model/boundingBox.api.model.ts +0 -20
  304. package/src/libs/data-access/datafeeder/src/openapi/model/cRS.api.model.ts +0 -25
  305. package/src/libs/data-access/datafeeder/src/openapi/model/datasetMetadata.api.model.ts +0 -45
  306. package/src/libs/data-access/datafeeder/src/openapi/model/datasetPublishRequest.api.model.ts +0 -39
  307. package/src/libs/data-access/datafeeder/src/openapi/model/datasetPublishingStatus.api.model.ts +0 -50
  308. package/src/libs/data-access/datafeeder/src/openapi/model/datasetUploadStatus.api.model.ts +0 -39
  309. package/src/libs/data-access/datafeeder/src/openapi/model/models.ts +0 -13
  310. package/src/libs/data-access/datafeeder/src/openapi/model/property.api.model.ts +0 -17
  311. package/src/libs/data-access/datafeeder/src/openapi/model/publishJobStatus.api.model.ts +0 -33
  312. package/src/libs/data-access/datafeeder/src/openapi/model/publishRequest.api.model.ts +0 -16
  313. package/src/libs/data-access/datafeeder/src/openapi/model/publishStatusEnum.api.model.ts +0 -20
  314. package/src/libs/data-access/datafeeder/src/openapi/model/publishStepEnum.api.model.ts +0 -42
  315. package/src/libs/data-access/datafeeder/src/openapi/model/uploadJobStatus.api.model.ts +0 -33
  316. package/src/libs/data-access/datafeeder/src/openapi/variables.ts +0 -9
  317. package/src/libs/data-access/datafeeder/src/spec.yaml +0 -537
  318. package/src/libs/ui/dataviz/src/lib/table/table.component.html +0 -40
  319. package/src/libs/ui/dataviz/src/lib/table/table.component.ts +0 -80
  320. package/src/libs/ui/dataviz/src/lib/table/table.fixtures.ts +0 -40
  321. package/src/libs/ui/inputs/src/lib/chips-input/chips-input.component.css +0 -36
  322. package/src/libs/ui/inputs/src/lib/chips-input/chips-input.component.html +0 -23
  323. package/src/libs/ui/inputs/src/lib/chips-input/chips-input.component.ts +0 -81
  324. package/src/libs/ui/widgets/src/lib/step-bar/step-bar.component.css +0 -3
  325. package/src/libs/ui/widgets/src/lib/step-bar/step-bar.component.html +0 -13
  326. package/src/libs/ui/widgets/src/lib/step-bar/step-bar.component.ts +0 -55
@@ -64,3 +64,15 @@ export const getAddUserFeedbacksLoading = createSelector(
64
64
  getMdViewState,
65
65
  (state: MetadataViewState) => state.addUserFeedbackLoading
66
66
  )
67
+
68
+ /*
69
+ Feature Catalog Selectors
70
+ */
71
+ export const getFeatureCatalog = createSelector(
72
+ getMdViewState,
73
+ (state: MetadataViewState) => state.featureCatalog
74
+ )
75
+ export const getFeatureCatalogIsLoading = createSelector(
76
+ getMdViewState,
77
+ (state: MetadataViewState) => state.featureCatalogLoading
78
+ )
@@ -9,4 +9,5 @@
9
9
  [preventCompleteOnSelection]="true"
10
10
  [autoFocus]="autoFocus"
11
11
  [allowSubmit]="true"
12
+ [forceTrackPosition]="forceTrackPosition"
12
13
  ></gn-ui-autocomplete>
@@ -28,6 +28,7 @@ import { SearchFilters } from '../../../../../../libs/api/metadata-converter/src
28
28
  export class FuzzySearchComponent implements OnInit {
29
29
  @ViewChild(AutocompleteComponent) autocomplete: AutocompleteComponent
30
30
  @Input() autoFocus = false
31
+ @Input() forceTrackPosition = false
31
32
  @Output() itemSelected = new EventEmitter<CatalogRecord>()
32
33
  @Output() inputSubmitted = new EventEmitter<string>()
33
34
  searchInputValue$: Observable<{ title: string }>
@@ -1,6 +1,7 @@
1
1
  import { Injectable, Injector } from '@angular/core'
2
2
  import {
3
3
  AbstractSearchField,
4
+ AvailableServicesField,
4
5
  DateRangeSearchField,
5
6
  FieldValue,
6
7
  FullTextSearchField,
@@ -91,6 +92,7 @@ export class FieldsService {
91
92
  ),
92
93
  user: new UserSearchField(this.injector),
93
94
  changeDate: new DateRangeSearchField('changeDate', this.injector, 'desc'),
95
+ availableServices: new AvailableServicesField(this.injector),
94
96
  } as Record<string, AbstractSearchField>
95
97
 
96
98
  get supportedFields() {
@@ -9,6 +9,7 @@ import { PlatformServiceInterface } from '../../../../../../../libs/common/domai
9
9
  import {
10
10
  AggregationBuckets,
11
11
  AggregationsParams,
12
+ FieldFilter,
12
13
  FieldFilterByExpression,
13
14
  FieldFilters,
14
15
  TermBucket,
@@ -425,3 +426,57 @@ export class DateRangeSearchField extends SimpleSearchField {
425
426
  return 'dateRange'
426
427
  }
427
428
  }
429
+
430
+ marker('search.filters.availableServices.view')
431
+ marker('search.filters.availableServices.download')
432
+
433
+ export class AvailableServicesField extends SimpleSearchField {
434
+ private translateService = this.injector.get(TranslateService)
435
+
436
+ constructor(injector: Injector) {
437
+ super('availableServices', injector, 'asc')
438
+ }
439
+
440
+ linkProtocolViewFilter = '/OGC:WMT?S.*/'
441
+ linkProtocolDownloadFilter = '/OGC:WFS.*/'
442
+
443
+ protected async getBucketLabel(bucket: TermBucket) {
444
+ return firstValueFrom(
445
+ this.translateService.get(
446
+ `search.filters.availableServices.${bucket.term}`
447
+ )
448
+ )
449
+ }
450
+
451
+ protected getAggregations(): AggregationsParams {
452
+ return {
453
+ availableServices: {
454
+ type: 'filters',
455
+ filters: {
456
+ view: `+linkProtocol:${this.linkProtocolViewFilter}`,
457
+ download: `+linkProtocol:${this.linkProtocolDownloadFilter}`,
458
+ },
459
+ },
460
+ }
461
+ }
462
+
463
+ getFiltersForValues(values: FieldValue[]): Observable<FieldFilters> {
464
+ const filters: FieldFilter = {}
465
+ if (values.includes('view')) filters[this.linkProtocolViewFilter] = true
466
+ if (values.includes('download'))
467
+ filters[this.linkProtocolDownloadFilter] = true
468
+
469
+ return of({
470
+ linkProtocol: filters,
471
+ })
472
+ }
473
+
474
+ getValuesForFilter(filters: FieldFilters): Observable<FieldValue[]> {
475
+ const linkFilter = filters.linkProtocol
476
+ if (!linkFilter) return of([])
477
+ const values = []
478
+ if (linkFilter[this.linkProtocolViewFilter]) values.push('view')
479
+ if (linkFilter[this.linkProtocolDownloadFilter]) values.push('download')
480
+ return of(values)
481
+ }
482
+ }
@@ -1,5 +1,5 @@
1
1
  export * from './lib/ui-dataviz.module'
2
2
  export * from './lib/chart/chart.component'
3
- export * from './lib/table/table.component'
4
- export * from './lib/table/table.fixtures'
3
+ export * from './lib/data-table/data-table.component'
4
+ export * from './lib/data-table/data-table.fixtures'
5
5
  export * from './lib/figure/figure.component'
@@ -0,0 +1,52 @@
1
+ import { Injectable } from '@angular/core'
2
+ import { MatPaginatorIntl } from '@angular/material/paginator'
3
+ import { TranslateService } from '@ngx-translate/core'
4
+ import { Subject } from 'rxjs'
5
+
6
+ @Injectable()
7
+ export class CustomMatPaginatorIntl extends MatPaginatorIntl {
8
+ override changes = new Subject<void>()
9
+
10
+ constructor(private translate: TranslateService) {
11
+ super()
12
+ this.setLabels()
13
+ this.translate.onLangChange.subscribe(() => {
14
+ this.setLabels()
15
+ this.changes.next()
16
+ })
17
+ }
18
+
19
+ setLabels() {
20
+ this.itemsPerPageLabel = this.translate.instant(
21
+ 'table.paginator.itemsPerPage'
22
+ )
23
+ this.nextPageLabel = this.translate.instant('table.paginator.nextPage')
24
+ this.previousPageLabel = this.translate.instant(
25
+ 'table.paginator.previousPage'
26
+ )
27
+ this.firstPageLabel = this.translate.instant('table.paginator.firstPage')
28
+ this.lastPageLabel = this.translate.instant('table.paginator.lastPage')
29
+ this.getRangeLabel = this.getRangeLabelIntl
30
+ this.changes.next()
31
+ }
32
+
33
+ getRangeLabelIntl(page: number, pageSize: number, length: number): string {
34
+ if (length === 0 || pageSize === 0) {
35
+ return this.translate.instant('table.paginator.rangeLabel', {
36
+ startIndex: 0,
37
+ endIndex: 0,
38
+ length,
39
+ })
40
+ }
41
+ const startIndex = page * pageSize
42
+ const endIndex =
43
+ startIndex < length
44
+ ? Math.min(startIndex + pageSize, length)
45
+ : startIndex + pageSize
46
+ return this.translate.instant('table.paginator.rangeLabel', {
47
+ startIndex: startIndex + 1,
48
+ endIndex,
49
+ length,
50
+ })
51
+ }
52
+ }
@@ -30,3 +30,7 @@ tr {
30
30
  .active .mat-mdc-cell {
31
31
  color: var(--color-primary);
32
32
  }
33
+
34
+ .mat-mdc-paginator {
35
+ background: none;
36
+ }
@@ -0,0 +1,67 @@
1
+ <div class="flex flex-col border border-gray-300 rounded-lg bg-white h-full">
2
+ <div class="flex-1 overflow-y-hidden overflow-x-auto rounded-lg relative">
3
+ <table
4
+ mat-table
5
+ [dataSource]="dataSource"
6
+ matSort
7
+ (matSortChange)="setSort($event)"
8
+ [matSortDisableClear]="true"
9
+ *ngrxLet="properties$ as properties"
10
+ >
11
+ <ng-container *ngFor="let prop of properties" [matColumnDef]="prop">
12
+ <th
13
+ mat-header-cell
14
+ *matHeaderCellDef
15
+ mat-sort-header
16
+ class="text-sm text-black bg-white"
17
+ >
18
+ {{ prop }}
19
+ </th>
20
+ <td
21
+ mat-cell
22
+ *matCellDef="let element"
23
+ class="whitespace-nowrap pr-1 truncate"
24
+ >
25
+ {{ element[prop] }}
26
+ </td>
27
+ </ng-container>
28
+
29
+ <tr mat-header-row *matHeaderRowDef="properties; sticky: true"></tr>
30
+ <tr
31
+ [id]="getRowEltId(row.id)"
32
+ mat-row
33
+ *matRowDef="let row; columns: properties"
34
+ (click)="selected.emit(row)"
35
+ [class.active]="row.id === activeId"
36
+ ></tr>
37
+ </table>
38
+ <gn-ui-loading-mask
39
+ *ngIf="loading$ | async"
40
+ class="sticky inset-0"
41
+ [message]="'table.loading.data' | translate"
42
+ ></gn-ui-loading-mask>
43
+ <gn-ui-popup-alert
44
+ *ngIf="error"
45
+ type="warning"
46
+ icon="matErrorOutlineOutline"
47
+ class="absolute m-2 inset-0 z-[100]"
48
+ >
49
+ <span translate>{{ error }}</span>
50
+ </gn-ui-popup-alert>
51
+ </div>
52
+ <div class="flex justify-between items-center overflow-hidden">
53
+ <div class="text-gray-900 px-4 py-2 text-sm">
54
+ <span class="count font-extrabold text-primary">{{ count }}</span
55
+ >&nbsp;<span translate>table.object.count</span>.
56
+ </div>
57
+
58
+ <mat-paginator
59
+ class="my-[-16px]"
60
+ (page)="setPagination()"
61
+ [length]="count"
62
+ [pageSize]="10"
63
+ [showFirstLastButtons]="true"
64
+ [hidePageSize]="true"
65
+ ></mat-paginator>
66
+ </div>
67
+ </div>
@@ -0,0 +1,173 @@
1
+ import { ScrollingModule } from '@angular/cdk/scrolling'
2
+ import {
3
+ AfterViewInit,
4
+ ChangeDetectionStrategy,
5
+ ChangeDetectorRef,
6
+ Component,
7
+ ElementRef,
8
+ EventEmitter,
9
+ Input,
10
+ OnChanges,
11
+ OnInit,
12
+ Output,
13
+ ViewChild,
14
+ } from '@angular/core'
15
+ import { MatSort, MatSortModule } from '@angular/material/sort'
16
+ import { MatTableModule } from '@angular/material/table'
17
+ import { TranslateModule, TranslateService } from '@ngx-translate/core'
18
+ import { DataTableDataSource } from './data-table.data.source'
19
+ import { BaseReader, FetchError } from '../../../../../../libs/util/data-fetcher/src'
20
+ import {
21
+ MatPaginator,
22
+ MatPaginatorIntl,
23
+ MatPaginatorModule,
24
+ } from '@angular/material/paginator'
25
+ import { CustomMatPaginatorIntl } from './custom.mat.paginator.intl'
26
+ import { CommonModule } from '@angular/common'
27
+ import { BehaviorSubject, filter, firstValueFrom } from 'rxjs'
28
+ import {
29
+ LoadingMaskComponent,
30
+ PopupAlertComponent,
31
+ } from '../../../../../../libs/ui/widgets/src'
32
+ import { LetDirective } from '@ngrx/component'
33
+
34
+ const rowIdPrefix = 'table-item-'
35
+
36
+ export type TableItemId = string | number
37
+ type TableItemType = string | number | Date
38
+
39
+ export interface TableItemModel {
40
+ id: TableItemId
41
+ [key: string]: TableItemType
42
+ }
43
+
44
+ @Component({
45
+ standalone: true,
46
+ imports: [
47
+ MatTableModule,
48
+ MatSortModule,
49
+ MatPaginatorModule,
50
+ ScrollingModule,
51
+ TranslateModule,
52
+ CommonModule,
53
+ LoadingMaskComponent,
54
+ PopupAlertComponent,
55
+ LetDirective,
56
+ ],
57
+ providers: [{ provide: MatPaginatorIntl, useClass: CustomMatPaginatorIntl }],
58
+ selector: 'gn-ui-data-table',
59
+ templateUrl: './data-table.component.html',
60
+ styleUrls: ['./data-table.component.css'],
61
+ changeDetection: ChangeDetectionStrategy.OnPush,
62
+ })
63
+ export class DataTableComponent implements OnInit, AfterViewInit, OnChanges {
64
+ @Input() set dataset(value: BaseReader) {
65
+ this.properties$.next(null)
66
+ this.dataset_ = value
67
+ this.dataset_.load()
68
+ this.dataset_.properties.then((properties) =>
69
+ this.properties$.next(properties.map((p) => p.name))
70
+ )
71
+ this.dataset_.info.then((info) => (this.count = info.itemsCount))
72
+ }
73
+ @Input() activeId: TableItemId
74
+ @Output() selected = new EventEmitter<any>()
75
+
76
+ @ViewChild(MatSort) sort: MatSort
77
+ @ViewChild(MatPaginator) paginator: MatPaginator
78
+
79
+ dataset_: BaseReader
80
+ properties$ = new BehaviorSubject<string[]>(null)
81
+ dataSource: DataTableDataSource
82
+ headerHeight: number
83
+ count: number
84
+ loading$ = new BehaviorSubject<boolean>(false)
85
+ error = null
86
+
87
+ constructor(
88
+ private eltRef: ElementRef,
89
+ private cdr: ChangeDetectorRef,
90
+ private translateService: TranslateService
91
+ ) {}
92
+
93
+ ngOnInit() {
94
+ this.dataSource = new DataTableDataSource()
95
+ }
96
+
97
+ ngAfterViewInit() {
98
+ this.headerHeight =
99
+ this.eltRef.nativeElement.querySelector('thead').offsetHeight
100
+ this.setPagination()
101
+ this.cdr.detectChanges()
102
+ }
103
+
104
+ ngOnChanges() {
105
+ this.setPagination()
106
+ }
107
+
108
+ setSort(sort: MatSort) {
109
+ if (!this.dataset_) return
110
+ if (!sort.active) {
111
+ this.dataset_.orderBy()
112
+ } else {
113
+ this.dataset_.orderBy([sort.direction || 'asc', sort.active])
114
+ }
115
+ this.readData()
116
+ }
117
+
118
+ setPagination() {
119
+ if (!this.paginator) return
120
+ if (!this.dataset_) return
121
+ this.dataset_.limit(
122
+ this.paginator.pageIndex * this.paginator.pageSize,
123
+ this.paginator.pageSize
124
+ )
125
+ this.readData()
126
+ }
127
+
128
+ async readData() {
129
+ this.loading$.next(true)
130
+ // wait for properties to be read
131
+ const properties = await firstValueFrom(
132
+ this.properties$.pipe(filter((p) => !!p))
133
+ )
134
+ const propsWithoutGeom = properties.filter(
135
+ (p) => !p.toLowerCase().startsWith('geom')
136
+ )
137
+ this.dataset_.select(...propsWithoutGeom)
138
+ try {
139
+ await this.dataSource.showData(this.dataset_.read())
140
+ this.error = null
141
+ } catch (error) {
142
+ this.handleError(error as FetchError | Error)
143
+ }
144
+ this.loading$.next(false)
145
+ }
146
+
147
+ scrollToItem(itemId: TableItemId): void {
148
+ const row = this.eltRef.nativeElement.querySelector(
149
+ `#${this.getRowEltId(itemId)}`
150
+ )
151
+ this.eltRef.nativeElement.scrollTop = row.offsetTop - this.headerHeight
152
+ }
153
+
154
+ public getRowEltId(id: TableItemId): string {
155
+ return rowIdPrefix + id
156
+ }
157
+
158
+ handleError(error: FetchError | Error) {
159
+ this.dataSource.clearData()
160
+ if (error instanceof FetchError) {
161
+ this.error = this.translateService.instant(
162
+ `dataset.error.${error.type}`,
163
+ {
164
+ info: error.info,
165
+ }
166
+ )
167
+ console.warn(error.message)
168
+ } else {
169
+ this.error = this.translateService.instant(error.message)
170
+ console.warn(error.stack || error)
171
+ }
172
+ }
173
+ }
@@ -0,0 +1,33 @@
1
+ import { DataSource } from '@angular/cdk/collections'
2
+ import { BehaviorSubject, Observable } from 'rxjs'
3
+ import { DataItem } from '../../../../../../libs/util/data-fetcher/src'
4
+ import { map } from 'rxjs/operators'
5
+ import { TableItemModel } from './data-table.component'
6
+
7
+ export class DataTableDataSource implements DataSource<TableItemModel> {
8
+ private dataItems$ = new BehaviorSubject<DataItem[]>([])
9
+
10
+ connect(): Observable<TableItemModel[]> {
11
+ return this.dataItems$.asObservable().pipe(
12
+ map((items) =>
13
+ items.map((item) => ({
14
+ id: item.id,
15
+ ...item.properties,
16
+ }))
17
+ )
18
+ )
19
+ }
20
+
21
+ disconnect(): void {
22
+ this.dataItems$.complete()
23
+ }
24
+
25
+ async showData(itemsPromise: Promise<DataItem[]>) {
26
+ const items = await itemsPromise
27
+ this.dataItems$.next(items)
28
+ }
29
+
30
+ clearData() {
31
+ this.dataItems$.next([])
32
+ }
33
+ }
@@ -0,0 +1,84 @@
1
+ import { DataItem, PropertyInfo } from '../../../../../../libs/util/data-fetcher/src'
2
+
3
+ export const tableItemsFixture = {
4
+ items: [
5
+ {
6
+ type: 'Feature',
7
+ geometry: null,
8
+ properties: {
9
+ id: '0001',
10
+ firstName: 'John',
11
+ lastName: 'Lennon',
12
+ },
13
+ },
14
+ {
15
+ type: 'Feature',
16
+ geometry: null,
17
+ properties: {
18
+ id: '0002',
19
+ firstName: 'Ozzy',
20
+ lastName: 'Osbourne',
21
+ },
22
+ },
23
+ {
24
+ type: 'Feature',
25
+ geometry: null,
26
+ properties: {
27
+ id: '0003',
28
+ firstName: 'Claude',
29
+ lastName: 'François',
30
+ },
31
+ },
32
+ ] as DataItem[],
33
+ properties: [
34
+ { name: 'id', label: 'id', type: 'string' },
35
+ { name: 'firstName', label: 'Firstname', type: 'string' },
36
+ { name: 'lastName', label: 'Lastname', type: 'string' },
37
+ ] as PropertyInfo[],
38
+ }
39
+
40
+ export const someHabTableItemFixture = {
41
+ items: [
42
+ {
43
+ type: 'Feature',
44
+ geometry: null,
45
+ properties: {
46
+ id: '1',
47
+ name: 'France',
48
+ pop: 50500000,
49
+ },
50
+ },
51
+ {
52
+ type: 'Feature',
53
+ geometry: null,
54
+ properties: {
55
+ id: '2',
56
+ name: 'Italy',
57
+ pop: 155878789655,
58
+ },
59
+ },
60
+ {
61
+ type: 'Feature',
62
+ geometry: null,
63
+ properties: {
64
+ id: '3',
65
+ name: 'UK',
66
+ pop: 31522456,
67
+ },
68
+ },
69
+ {
70
+ type: 'Feature',
71
+ geometry: null,
72
+ properties: {
73
+ id: '4',
74
+ name: 'US',
75
+ pop: 3215448888,
76
+ },
77
+ },
78
+ ] as DataItem[],
79
+ properties: [
80
+ { name: 'id', label: 'ID', type: 'string' },
81
+ { name: 'name', label: 'Name', type: 'string' },
82
+ { name: 'pop', label: 'Population', type: 'number' },
83
+ ] as PropertyInfo[],
84
+ }
@@ -22,3 +22,4 @@ export * from './lib/thumbnail/thumbnail.component'
22
22
  export * from './lib/ui-elements.module'
23
23
  export * from './lib/user-feedback-item/user-feedback-item.component'
24
24
  export * from './lib/user-preview/user-preview.component'
25
+ export * from './lib/application-banner/application-banner.component'
@@ -0,0 +1,25 @@
1
+ <div
2
+ *ngIf="message && bannerOpen"
3
+ class="absolute left-0 right-0 text-wrap bg-white mt-4 max-h-24"
4
+ >
5
+ <div
6
+ class="flex flex-row py-2.5 px-5 gap-5 justify-start border max-h-20"
7
+ [ngClass]="classList"
8
+ >
9
+ <div [ngClass]="message.length > 200 ? 'pt-5' : 'pt-1'">
10
+ <ng-icon [name]="icon"></ng-icon>
11
+ </div>
12
+ <div class="flex flex-col justify-start gap-2.5">
13
+ <span *ngIf="title" class="font-bold">{{ title }}</span>
14
+ <span class="font-medium max-w-2xl" [innerHTML]="message"></span>
15
+ </div>
16
+ <button
17
+ *ngIf="closeEnabled"
18
+ class="self-start"
19
+ type="button"
20
+ (click)="closeMessage()"
21
+ >
22
+ <ng-icon name="matCloseOutline"> </ng-icon>
23
+ </button>
24
+ </div>
25
+ </div>
@@ -0,0 +1,70 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core'
2
+ import { CommonModule } from '@angular/common'
3
+ import {
4
+ NgIconComponent,
5
+ provideIcons,
6
+ provideNgIconsConfig,
7
+ } from '@ng-icons/core'
8
+ import {
9
+ matCloseOutline,
10
+ matInfoOutline,
11
+ matWarningAmberOutline,
12
+ } from '@ng-icons/material-icons/outline'
13
+ import { matWarning } from '@ng-icons/material-icons/baseline'
14
+
15
+ @Component({
16
+ selector: 'gn-ui-application-banner',
17
+ standalone: true,
18
+ imports: [CommonModule, NgIconComponent],
19
+ changeDetection: ChangeDetectionStrategy.OnPush,
20
+ templateUrl: './application-banner.component.html',
21
+ styleUrl: './application-banner.component.css',
22
+ providers: [
23
+ provideIcons({
24
+ matWarningAmberOutline,
25
+ matInfoOutline,
26
+ matCloseOutline,
27
+ matWarning,
28
+ }),
29
+ provideNgIconsConfig({ size: '1.5em' }),
30
+ ],
31
+ })
32
+ export class ApplicationBannerComponent {
33
+ @Input() message: string
34
+ @Input() title: string
35
+ @Input() closeEnabled = false
36
+ @Input() extraClass = ''
37
+ @Input() icon = ''
38
+ msgClass = ''
39
+ bannerOpen = true
40
+
41
+ @Input() set type(value: 'primary' | 'secondary' | 'light') {
42
+ switch (value) {
43
+ case 'primary':
44
+ this.msgClass = 'bg-primary-darkest border-primary text-white'
45
+ this.icon = 'matWarning'
46
+ break
47
+ case 'light':
48
+ this.msgClass =
49
+ 'bg-primary-opacity-10 border-primary-lightest text-black'
50
+ this.icon = 'matInfoOutline'
51
+ break
52
+ case 'secondary':
53
+ default:
54
+ this.msgClass = 'bg-primary-opacity-50 border-primary-darker text-black'
55
+ this.icon = 'matWarningAmberOutline'
56
+ break
57
+ }
58
+ }
59
+
60
+ get classList() {
61
+ if (this.message.length > 200) {
62
+ return `${this.msgClass} ${this.extraClass} overflow-y-scroll items-start`
63
+ }
64
+ return `${this.msgClass} ${this.extraClass} items-center`
65
+ }
66
+
67
+ closeMessage() {
68
+ this.bannerOpen = false
69
+ }
70
+ }
@@ -1,4 +1,4 @@
1
- import { Component, Input, ChangeDetectionStrategy } from '@angular/core'
1
+ import { ChangeDetectionStrategy, Component, Input } from '@angular/core'
2
2
  import { marked } from 'marked'
3
3
 
4
4
  @Component({
@@ -13,6 +13,6 @@ export class MarkdownParserComponent {
13
13
  @Input() whitoutStyles?: boolean
14
14
 
15
15
  get parsedMarkdown() {
16
- return marked.parse(this.textContent)
16
+ return marked.parse(this.textContent ?? '')
17
17
  }
18
18
  }
@@ -163,13 +163,13 @@
163
163
  <div *ngIf="metadata.resourceCreated">
164
164
  <p class="text-sm" translate>record.metadata.creation</p>
165
165
  <p class="text-primary font-medium mt-1">
166
- {{ metadata.resourceCreated.toLocaleDateString() }}
166
+ {{ formatDate(metadata.resourceCreated) }}
167
167
  </p>
168
168
  </div>
169
169
  <div *ngIf="metadata.resourcePublished">
170
170
  <p class="text-sm" translate>record.metadata.publication</p>
171
171
  <p class="text-primary font-medium mt-1">
172
- {{ metadata.resourcePublished.toLocaleDateString() }}
172
+ {{ formatDate(metadata.resourcePublished) }}
173
173
  </p>
174
174
  </div>
175
175
  <div *ngIf="updateFrequency">
@@ -233,7 +233,7 @@
233
233
  <div *ngIf="metadata.recordUpdated">
234
234
  <p class="text-sm" translate>record.metadata.updatedOn</p>
235
235
  <p class="text-primary font-medium">
236
- {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}
236
+ {{ metadata.recordUpdated && formatDateTime(metadata.recordUpdated) }}
237
237
  </p>
238
238
  </div>
239
239
  <div *ngIf="metadata.landingPage">