geonetwork-ui 2.5.0-dev.b51c2cb0f → 2.5.0-dev.b87edcffd

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 (246) 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 +34 -28
  4. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +22 -2
  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/service/data.service.mjs +24 -14
  9. package/esm2022/libs/feature/dataviz/src/lib/table-view/table-view.component.mjs +7 -4
  10. package/esm2022/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.mjs +3 -3
  11. package/esm2022/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.mjs +2 -2
  12. package/esm2022/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.mjs +2 -2
  13. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-contacts/form-field-contacts.component.mjs +2 -2
  14. 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
  15. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.mjs +2 -2
  16. package/esm2022/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.mjs +7 -23
  17. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +2 -2
  18. package/esm2022/libs/feature/editor/src/lib/models/wizard-field.type.mjs +3 -4
  19. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.mjs +1 -1
  20. package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +25 -5
  21. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +10 -7
  22. package/esm2022/libs/feature/record/src/lib/state/mdview.actions.mjs +4 -1
  23. package/esm2022/libs/feature/record/src/lib/state/mdview.effects.mjs +7 -2
  24. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +9 -1
  25. package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +19 -1
  26. package/esm2022/libs/feature/record/src/lib/state/mdview.selectors.mjs +6 -1
  27. package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +6 -3
  28. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +1 -1
  29. package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +46 -1
  30. package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +3 -2
  31. package/esm2022/libs/ui/elements/src/index.mjs +2 -1
  32. package/esm2022/libs/ui/elements/src/lib/application-banner/application-banner.component.mjs +78 -0
  33. package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +3 -3
  34. package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +2 -1
  35. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +10 -4
  36. package/esm2022/libs/ui/inputs/src/index.mjs +1 -2
  37. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +43 -3
  38. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +1 -6
  39. package/esm2022/libs/ui/inputs/src/lib/url-input/url-input.component.mjs +2 -7
  40. package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +14 -4
  41. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +10 -3
  42. package/esm2022/libs/ui/widgets/src/index.mjs +1 -2
  43. package/esm2022/libs/ui/widgets/src/lib/ui-widgets.module.mjs +5 -6
  44. package/esm2022/libs/util/data-fetcher/src/lib/data-fetcher.mjs +5 -4
  45. package/esm2022/libs/util/data-fetcher/src/lib/readers/base-cache.mjs +12 -0
  46. package/esm2022/libs/util/data-fetcher/src/lib/readers/base-file.mjs +3 -3
  47. package/esm2022/libs/util/data-fetcher/src/lib/readers/base.mjs +1 -1
  48. package/esm2022/libs/util/data-fetcher/src/lib/readers/csv.mjs +2 -2
  49. package/esm2022/libs/util/data-fetcher/src/lib/readers/excel.mjs +2 -2
  50. package/esm2022/libs/util/data-fetcher/src/lib/readers/geojson.mjs +2 -2
  51. package/esm2022/libs/util/data-fetcher/src/lib/readers/gml.mjs +5 -3
  52. package/esm2022/libs/util/data-fetcher/src/lib/readers/json.mjs +2 -2
  53. package/esm2022/libs/util/data-fetcher/src/lib/readers/wfs.mjs +19 -11
  54. package/esm2022/libs/util/data-fetcher/src/lib/utils.mjs +13 -9
  55. package/esm2022/translations/de.json +4 -76
  56. package/esm2022/translations/en.json +4 -76
  57. package/esm2022/translations/es.json +3 -75
  58. package/esm2022/translations/fr.json +16 -88
  59. package/esm2022/translations/it.json +21 -92
  60. package/esm2022/translations/nl.json +3 -75
  61. package/esm2022/translations/pt.json +3 -75
  62. package/fesm2022/geonetwork-ui.mjs +558 -880
  63. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  64. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  65. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +3 -0
  66. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  67. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts +1 -0
  68. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  69. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +2 -1
  70. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  71. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +6 -0
  72. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  73. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +2 -1
  74. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  75. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts +2 -1
  76. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts.map +1 -1
  77. package/libs/feature/dataviz/src/lib/service/data.service.d.ts +2 -2
  78. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  79. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts +2 -1
  80. package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts.map +1 -1
  81. 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
  82. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.d.ts.map +1 -1
  83. package/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.d.ts +1 -3
  84. package/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.d.ts.map +1 -1
  85. package/libs/feature/editor/src/lib/models/wizard-field.type.d.ts +2 -3
  86. package/libs/feature/editor/src/lib/models/wizard-field.type.d.ts.map +1 -1
  87. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts +5 -1
  88. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts.map +1 -1
  89. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +3 -2
  90. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  91. package/libs/feature/record/src/lib/state/mdview.actions.d.ts +16 -1
  92. package/libs/feature/record/src/lib/state/mdview.actions.d.ts.map +1 -1
  93. package/libs/feature/record/src/lib/state/mdview.effects.d.ts +5 -0
  94. package/libs/feature/record/src/lib/state/mdview.effects.d.ts.map +1 -1
  95. package/libs/feature/record/src/lib/state/mdview.facade.d.ts +2 -0
  96. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  97. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts +4 -1
  98. package/libs/feature/record/src/lib/state/mdview.reducer.d.ts.map +1 -1
  99. package/libs/feature/record/src/lib/state/mdview.selectors.d.ts +2 -0
  100. package/libs/feature/record/src/lib/state/mdview.selectors.d.ts.map +1 -1
  101. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +2 -1
  102. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
  103. package/libs/feature/search/src/lib/utils/service/fields.d.ts +10 -0
  104. package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
  105. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
  106. package/libs/ui/elements/src/index.d.ts +1 -0
  107. package/libs/ui/elements/src/index.d.ts.map +1 -1
  108. package/libs/ui/elements/src/lib/application-banner/application-banner.component.d.ts +16 -0
  109. package/libs/ui/elements/src/lib/application-banner/application-banner.component.d.ts.map +1 -0
  110. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts.map +1 -1
  111. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
  112. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  113. package/libs/ui/inputs/src/index.d.ts +0 -1
  114. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  115. package/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.d.ts +16 -1
  116. package/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.d.ts.map +1 -1
  117. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +27 -28
  118. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
  119. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts +2 -3
  120. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts.map +1 -1
  121. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +4 -2
  122. package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -1
  123. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +3 -1
  124. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  125. package/libs/ui/widgets/src/index.d.ts +0 -1
  126. package/libs/ui/widgets/src/index.d.ts.map +1 -1
  127. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts +8 -9
  128. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts.map +1 -1
  129. package/libs/util/data-fetcher/src/lib/data-fetcher.d.ts +2 -2
  130. package/libs/util/data-fetcher/src/lib/data-fetcher.d.ts.map +1 -1
  131. package/libs/util/data-fetcher/src/lib/readers/base-cache.d.ts +8 -0
  132. package/libs/util/data-fetcher/src/lib/readers/base-cache.d.ts.map +1 -0
  133. package/libs/util/data-fetcher/src/lib/readers/base-file.d.ts +2 -2
  134. package/libs/util/data-fetcher/src/lib/readers/base-file.d.ts.map +1 -1
  135. package/libs/util/data-fetcher/src/lib/readers/base.d.ts +2 -2
  136. package/libs/util/data-fetcher/src/lib/readers/base.d.ts.map +1 -1
  137. package/libs/util/data-fetcher/src/lib/readers/gml.d.ts +5 -3
  138. package/libs/util/data-fetcher/src/lib/readers/gml.d.ts.map +1 -1
  139. package/libs/util/data-fetcher/src/lib/readers/wfs.d.ts +7 -4
  140. package/libs/util/data-fetcher/src/lib/readers/wfs.d.ts.map +1 -1
  141. package/libs/util/data-fetcher/src/lib/utils.d.ts +2 -2
  142. package/libs/util/data-fetcher/src/lib/utils.d.ts.map +1 -1
  143. package/package.json +1 -1
  144. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +25 -0
  145. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +4 -0
  146. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +36 -27
  147. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +41 -2
  148. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +3 -1
  149. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +4 -1
  150. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +75 -0
  151. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +4 -1
  152. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +43 -20
  153. package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.ts +2 -1
  154. package/src/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.html +1 -1
  155. 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
  156. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.ts +1 -1
  157. package/src/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.html +0 -13
  158. package/src/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.ts +0 -20
  159. package/src/libs/feature/editor/src/lib/fields.config.ts +1 -1
  160. package/src/libs/feature/editor/src/lib/models/wizard-field.type.ts +0 -1
  161. package/src/libs/feature/record/src/lib/data-view/data-view.component.html +24 -11
  162. package/src/libs/feature/record/src/lib/data-view/data-view.component.ts +26 -4
  163. package/src/libs/feature/record/src/lib/map-view/map-view.component.html +71 -60
  164. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +6 -3
  165. package/src/libs/feature/record/src/lib/state/mdview.actions.ts +16 -0
  166. package/src/libs/feature/record/src/lib/state/mdview.effects.ts +21 -2
  167. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +15 -0
  168. package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +30 -1
  169. package/src/libs/feature/record/src/lib/state/mdview.selectors.ts +12 -0
  170. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.html +1 -0
  171. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +1 -0
  172. package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +2 -0
  173. package/src/libs/feature/search/src/lib/utils/service/fields.ts +55 -0
  174. package/src/libs/ui/elements/src/index.ts +1 -0
  175. package/src/libs/ui/elements/src/lib/application-banner/application-banner.component.css +0 -0
  176. package/src/libs/ui/elements/src/lib/application-banner/application-banner.component.html +25 -0
  177. package/src/libs/ui/elements/src/lib/application-banner/application-banner.component.ts +70 -0
  178. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +2 -2
  179. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +2 -0
  180. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +3 -0
  181. package/src/libs/ui/inputs/src/index.ts +0 -1
  182. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.ts +48 -0
  183. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +0 -3
  184. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.ts +1 -7
  185. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +37 -1
  186. package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +8 -2
  187. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +2 -0
  188. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +6 -0
  189. package/src/libs/ui/widgets/src/index.ts +0 -1
  190. package/src/libs/ui/widgets/src/lib/ui-widgets.module.ts +2 -3
  191. package/src/libs/util/data-fetcher/src/lib/data-fetcher.ts +13 -4
  192. package/src/libs/util/data-fetcher/src/lib/readers/base-cache.ts +14 -0
  193. package/src/libs/util/data-fetcher/src/lib/readers/base-file.ts +2 -1
  194. package/src/libs/util/data-fetcher/src/lib/readers/base.ts +2 -2
  195. package/src/libs/util/data-fetcher/src/lib/readers/csv.ts +1 -1
  196. package/src/libs/util/data-fetcher/src/lib/readers/excel.ts +1 -1
  197. package/src/libs/util/data-fetcher/src/lib/readers/geojson.ts +1 -1
  198. package/src/libs/util/data-fetcher/src/lib/readers/gml.ts +7 -7
  199. package/src/libs/util/data-fetcher/src/lib/readers/json.ts +1 -1
  200. package/src/libs/util/data-fetcher/src/lib/readers/wfs.ts +34 -11
  201. package/src/libs/util/data-fetcher/src/lib/utils.ts +38 -32
  202. package/translations/de.json +4 -76
  203. package/translations/en.json +4 -76
  204. package/translations/es.json +3 -75
  205. package/translations/fr.json +16 -88
  206. package/translations/it.json +21 -92
  207. package/translations/nl.json +3 -75
  208. package/translations/pt.json +3 -75
  209. package/translations/sk.json +3 -75
  210. package/esm2022/libs/ui/inputs/src/lib/chips-input/chips-input.component.mjs +0 -78
  211. package/esm2022/libs/ui/widgets/src/lib/step-bar/step-bar.component.mjs +0 -55
  212. package/libs/ui/inputs/src/lib/chips-input/chips-input.component.d.ts +0 -33
  213. package/libs/ui/inputs/src/lib/chips-input/chips-input.component.d.ts.map +0 -1
  214. package/libs/ui/widgets/src/lib/step-bar/step-bar.component.d.ts +0 -21
  215. package/libs/ui/widgets/src/lib/step-bar/step-bar.component.d.ts.map +0 -1
  216. package/src/libs/data-access/datafeeder/src/index.ts +0 -1
  217. package/src/libs/data-access/datafeeder/src/openapi/api/api.ts +0 -11
  218. package/src/libs/data-access/datafeeder/src/openapi/api/config.api.service.ts +0 -168
  219. package/src/libs/data-access/datafeeder/src/openapi/api/dataPublishing.api.service.ts +0 -270
  220. package/src/libs/data-access/datafeeder/src/openapi/api/fileUpload.api.service.ts +0 -734
  221. package/src/libs/data-access/datafeeder/src/openapi/api.module.ts +0 -46
  222. package/src/libs/data-access/datafeeder/src/openapi/configuration.ts +0 -125
  223. package/src/libs/data-access/datafeeder/src/openapi/encoder.ts +0 -20
  224. package/src/libs/data-access/datafeeder/src/openapi/index.ts +0 -5
  225. package/src/libs/data-access/datafeeder/src/openapi/model/analysisStatusEnum.api.model.ts +0 -24
  226. package/src/libs/data-access/datafeeder/src/openapi/model/boundingBox.api.model.ts +0 -20
  227. package/src/libs/data-access/datafeeder/src/openapi/model/cRS.api.model.ts +0 -25
  228. package/src/libs/data-access/datafeeder/src/openapi/model/datasetMetadata.api.model.ts +0 -45
  229. package/src/libs/data-access/datafeeder/src/openapi/model/datasetPublishRequest.api.model.ts +0 -39
  230. package/src/libs/data-access/datafeeder/src/openapi/model/datasetPublishingStatus.api.model.ts +0 -50
  231. package/src/libs/data-access/datafeeder/src/openapi/model/datasetUploadStatus.api.model.ts +0 -39
  232. package/src/libs/data-access/datafeeder/src/openapi/model/models.ts +0 -13
  233. package/src/libs/data-access/datafeeder/src/openapi/model/property.api.model.ts +0 -17
  234. package/src/libs/data-access/datafeeder/src/openapi/model/publishJobStatus.api.model.ts +0 -33
  235. package/src/libs/data-access/datafeeder/src/openapi/model/publishRequest.api.model.ts +0 -16
  236. package/src/libs/data-access/datafeeder/src/openapi/model/publishStatusEnum.api.model.ts +0 -20
  237. package/src/libs/data-access/datafeeder/src/openapi/model/publishStepEnum.api.model.ts +0 -42
  238. package/src/libs/data-access/datafeeder/src/openapi/model/uploadJobStatus.api.model.ts +0 -33
  239. package/src/libs/data-access/datafeeder/src/openapi/variables.ts +0 -9
  240. package/src/libs/data-access/datafeeder/src/spec.yaml +0 -537
  241. package/src/libs/ui/inputs/src/lib/chips-input/chips-input.component.css +0 -36
  242. package/src/libs/ui/inputs/src/lib/chips-input/chips-input.component.html +0 -23
  243. package/src/libs/ui/inputs/src/lib/chips-input/chips-input.component.ts +0 -81
  244. package/src/libs/ui/widgets/src/lib/step-bar/step-bar.component.css +0 -3
  245. package/src/libs/ui/widgets/src/lib/step-bar/step-bar.component.html +0 -13
  246. package/src/libs/ui/widgets/src/lib/step-bar/step-bar.component.ts +0 -55
@@ -51,7 +51,7 @@ export class ElasticsearchService {
51
51
  size = 0,
52
52
  from = 0,
53
53
  sortBy: SortByField = null,
54
- requestFields: RequestFields = [],
54
+ requestFields: RequestFields = null,
55
55
  searchFilters: SearchFilters = {},
56
56
  configFilters: SearchFilters = {},
57
57
  uuids?: string[],
@@ -69,7 +69,7 @@ export class ElasticsearchService {
69
69
  geometry
70
70
  ),
71
71
  ...(size > 0 ? { track_total_hits: true } : {}),
72
- _source: requestFields,
72
+ ...(requestFields && { _source: requestFields }),
73
73
  }
74
74
  this.processRuntimeFields(payload)
75
75
  return payload
@@ -234,6 +234,7 @@ export class ElasticsearchService {
234
234
  private filtersToQuery(
235
235
  filters: FieldFilters | FiltersAggregationParams | string
236
236
  ): FilterQuery {
237
+ const addQuote = (key: string) => (/^\/.+\/$/.test(key) ? key : `"${key}"`)
237
238
  const makeQuery = (filter: FieldFilter): string => {
238
239
  if (typeof filter === 'string') {
239
240
  return filter
@@ -241,9 +242,9 @@ export class ElasticsearchService {
241
242
  return Object.keys(filter)
242
243
  .map((key) => {
243
244
  if (filter[key] === true) {
244
- return `"${key}"`
245
+ return addQuote(key)
245
246
  }
246
- return `-"${key}"`
247
+ return `-${addQuote(key)}`
247
248
  })
248
249
  .join(' OR ')
249
250
  }
@@ -296,6 +297,25 @@ export class ElasticsearchService {
296
297
  return queryParts.length > 0 ? (queryParts as FilterQuery) : undefined
297
298
  }
298
299
 
300
+ private mustNotFilters(): Record<string, unknown>[] {
301
+ return [
302
+ {
303
+ ...this.queryFilterOnValues('resourceType', [
304
+ 'service',
305
+ 'map',
306
+ 'map/static',
307
+ 'mapDigital',
308
+ ]),
309
+ },
310
+ {
311
+ query_string: {
312
+ query:
313
+ 'resourceType:featureCatalog AND !resourceType:dataset AND !cl_level.key:dataset',
314
+ },
315
+ },
316
+ ]
317
+ }
318
+
299
319
  private buildPayloadQuery(
300
320
  { any, ...fieldSearchFilters }: SearchFilters,
301
321
  configFilters: SearchFilters,
@@ -303,14 +323,7 @@ export class ElasticsearchService {
303
323
  geometry?: Geometry
304
324
  ) {
305
325
  const must = [] as Record<string, unknown>[]
306
- const must_not = {
307
- ...this.queryFilterOnValues('resourceType', [
308
- 'service',
309
- 'map',
310
- 'map/static',
311
- 'mapDigital',
312
- ]),
313
- }
326
+ const must_not = this.mustNotFilters()
314
327
  const should = [] as Record<string, unknown>[]
315
328
  const filter = [this.queryFilterOnValues('isTemplate', 'n')] as Record<
316
329
  string,
@@ -412,14 +425,8 @@ export class ElasticsearchService {
412
425
  },
413
426
  },
414
427
  ],
415
- must_not: {
416
- ...this.queryFilterOnValues('resourceType', [
417
- 'service',
418
- 'map',
419
- 'map/static',
420
- 'mapDigital',
421
- ]),
422
- },
428
+
429
+ must_not: this.mustNotFilters(),
423
430
  },
424
431
  },
425
432
  _source: ['resourceTitleObject', 'uuid'],
@@ -532,13 +539,15 @@ export class ElasticsearchService {
532
539
  switch (aggregation.type) {
533
540
  case 'filters':
534
541
  return {
535
- filters: Object.keys(aggregation.filters).reduce((prev, curr) => {
536
- const filter = aggregation.filters[curr]
537
- return {
538
- ...prev,
539
- [curr]: this.filtersToQuery(filter)[0],
540
- }
541
- }, {}),
542
+ filters: {
543
+ filters: Object.keys(aggregation.filters).reduce((prev, curr) => {
544
+ const filter = aggregation.filters[curr]
545
+ return {
546
+ ...prev,
547
+ [curr]: this.filtersToQuery(filter)[0],
548
+ }
549
+ }, {}),
550
+ },
542
551
  }
543
552
  case 'terms':
544
553
  return {
@@ -12,7 +12,10 @@ import {
12
12
  Iso19139Converter,
13
13
  } from '../../../../../../libs/api/metadata-converter/src'
14
14
  import { PublicationVersionError } from '../../../../../../libs/common/domain/src/lib/model/error'
15
- import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/model/record'
15
+ import {
16
+ CatalogRecord,
17
+ DatasetFeatureCatalog,
18
+ } from '../../../../../../libs/common/domain/src/lib/model/record'
16
19
  import {
17
20
  Aggregations,
18
21
  AggregationsParams,
@@ -27,6 +30,7 @@ import { RecordsRepositoryInterface } from '../../../../../../libs/common/domain
27
30
  import {
28
31
  RecordsApiService,
29
32
  SearchApiService,
33
+ FeatureResponseApiModel,
30
34
  } from '../../../../../../libs/data-access/gn4/src'
31
35
  import {
32
36
  combineLatest,
@@ -124,7 +128,7 @@ export class Gn4Repository implements RecordsRepositoryInterface {
124
128
  return this.gn4SearchApi
125
129
  .search(
126
130
  'bucket',
127
- null,
131
+ ['fcats'],
128
132
  JSON.stringify(
129
133
  this.gn4SearchHelper.getMetadataByIdPayload(uniqueIdentifier)
130
134
  )
@@ -137,6 +141,41 @@ export class Gn4Repository implements RecordsRepositoryInterface {
137
141
  )
138
142
  }
139
143
 
144
+ getFeatureCatalog(
145
+ record: CatalogRecord,
146
+ visited: Set<string> = new Set() // prevent looping
147
+ ): Observable<DatasetFeatureCatalog | null> {
148
+ if (
149
+ record.extras &&
150
+ record.extras['featureTypes'] &&
151
+ record.extras['featureTypes'][0]?.attributeTable &&
152
+ Array.isArray(record.extras['featureTypes'][0].attributeTable)
153
+ ) {
154
+ return of({
155
+ attributes: record.extras['featureTypes'][0]?.attributeTable?.map(
156
+ (attr) => ({
157
+ name: attr.name,
158
+ title: attr.definition,
159
+ })
160
+ ),
161
+ } as DatasetFeatureCatalog)
162
+ }
163
+
164
+ const featureCatalogIdentifier = record.extras[
165
+ 'featureCatalogIdentifier'
166
+ ] as string
167
+ if (featureCatalogIdentifier && !visited.has(featureCatalogIdentifier)) {
168
+ visited.add(featureCatalogIdentifier)
169
+ return this.getRecord(featureCatalogIdentifier).pipe(
170
+ switchMap((record) =>
171
+ record ? this.getFeatureCatalog(record, visited) : of(null)
172
+ )
173
+ )
174
+ }
175
+
176
+ return of(null)
177
+ }
178
+
140
179
  getSimilarRecords(similarTo: CatalogRecord): Observable<CatalogRecord[]> {
141
180
  return this.gn4SearchApi
142
181
  .search(
@@ -226,7 +226,9 @@ export interface DatasetRecord extends BaseRecord {
226
226
  temporalExtents: Array<DatasetTemporalExtent>
227
227
  spatialRepresentation?: SpatialRepresentationType
228
228
  }
229
-
229
+ export type DatasetFeatureCatalog = {
230
+ attributes: Array<{ name: string; title: string }>
231
+ }
230
232
  export interface ServiceEndpoint {
231
233
  endpointUrl: URL
232
234
  protocol: string
@@ -6,12 +6,15 @@ import {
6
6
  SearchParams,
7
7
  SearchResults,
8
8
  } from '../model/search'
9
- import { CatalogRecord } from '../model/record'
9
+ import { CatalogRecord, DatasetFeatureCatalog } from '../model/record'
10
10
 
11
11
  export abstract class RecordsRepositoryInterface {
12
12
  abstract search(params: SearchParams): Observable<SearchResults>
13
13
  abstract getMatchesCount(filters: FieldFilters): Observable<number>
14
14
  abstract getRecord(uniqueIdentifier: string): Observable<CatalogRecord | null>
15
+ abstract getFeatureCatalog(
16
+ record: CatalogRecord
17
+ ): Observable<DatasetFeatureCatalog | null>
15
18
  abstract aggregate(params: AggregationsParams): Observable<Aggregations>
16
19
  abstract getSimilarRecords(
17
20
  similarTo: CatalogRecord
@@ -160,6 +160,38 @@ As such, **it is not very interesting at all.**`,
160
160
  extras: {
161
161
  isPublishedToAll: true,
162
162
  edit: true,
163
+ featureTypes: [
164
+ {
165
+ attributeTable: [
166
+ {
167
+ code: 'OBJECTID',
168
+ name: 'OBJECTID',
169
+ link: '',
170
+ definition: 'Object identifier',
171
+ type: 'OID',
172
+ },
173
+ {
174
+ code: 'NOM',
175
+ name: 'Nom',
176
+ link: '',
177
+ definition: 'Nom de la rue',
178
+ type: 'String (48)',
179
+ },
180
+ {
181
+ code: 'RUE',
182
+ name: 'Rue',
183
+ link: '',
184
+ definition: '',
185
+ type: 'String (50)',
186
+ },
187
+ ],
188
+ code: '',
189
+ aliases: '',
190
+ typeName: "Catalogue d'attributs",
191
+ definition: '',
192
+ isAbstract: 'false',
193
+ },
194
+ ],
163
195
  },
164
196
  },
165
197
  {
@@ -312,6 +344,49 @@ export const simpleDatasetRecordFixture = (): DatasetRecord => ({
312
344
  translations: {},
313
345
  })
314
346
 
347
+ export const simpleDatasetRecordWithFcatsFixture = (): DatasetRecord => ({
348
+ uniqueIdentifier: 'my-dataset-with-fcats',
349
+ extras: {
350
+ featureCatalogIdentifier: 'feature-catalog-identifier',
351
+ },
352
+ kind: 'dataset',
353
+ otherLanguages: [],
354
+ defaultLanguage: 'en',
355
+ recordUpdated: new Date('2022-02-01T14:12:00.000Z'),
356
+ resourceCreated: new Date('2022-09-01T12:18:19.000Z'),
357
+ resourceUpdated: new Date('2022-12-04T14:12:00.000Z'),
358
+ status: 'ongoing',
359
+ title: 'A very interesting dataset with a related feature catalog',
360
+ abstract: `This dataset has been established for testing purposes.`,
361
+ ownerOrganization: { name: 'MyOrganization', translations: {} },
362
+ contacts: [
363
+ {
364
+ email: 'bob@org.net',
365
+ position: 'developer',
366
+ organization: { name: 'MyOrganization', translations: {} },
367
+ role: 'point_of_contact',
368
+ firstName: 'Bob',
369
+ lastName: 'TheGreat',
370
+ },
371
+ ],
372
+ contactsForResource: [],
373
+ keywords: [],
374
+ topics: ['testData'],
375
+ licenses: [],
376
+ legalConstraints: [],
377
+ securityConstraints: [],
378
+ otherConstraints: [],
379
+ lineage:
380
+ 'This record was edited manually to test the feature catalog parsing',
381
+ spatialRepresentation: 'grid',
382
+ overviews: [],
383
+ spatialExtents: [],
384
+ temporalExtents: [],
385
+ onlineResources: [],
386
+ updateFrequency: { per: 'month', updatedTimes: 3 },
387
+ translations: {},
388
+ })
389
+
315
390
  export const simpleDatasetRecordAsXmlFixture =
316
391
  (): string => `<?xml version="1.0" encoding="UTF-8"?>
317
392
  <mdb:MD_Metadata xmlns:mdb="http://standards.iso.org/iso/19115/-3/mdb/2.0" xmlns:mcc="http://standards.iso.org/iso/19115/-3/mcc/1.0" xmlns:gco="http://standards.iso.org/iso/19115/-3/gco/1.0" xmlns:cit="http://standards.iso.org/iso/19115/-3/cit/2.0" xmlns:mri="http://standards.iso.org/iso/19115/-3/mri/1.0" xmlns:mco="http://standards.iso.org/iso/19115/-3/mco/1.0" xmlns:gcx="http://standards.iso.org/iso/19115/-3/gcx/1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mmi="http://standards.iso.org/iso/19115/-3/mmi/1.0" xmlns:mrd="http://standards.iso.org/iso/19115/-3/mrd/1.0" xmlns:mrl="http://standards.iso.org/iso/19115/-3/mrl/2.0">
@@ -2,7 +2,9 @@ import {
2
2
  ChangeDetectionStrategy,
3
3
  ChangeDetectorRef,
4
4
  Component,
5
+ Inject,
5
6
  Input,
7
+ Optional,
6
8
  Output,
7
9
  } from '@angular/core'
8
10
  import { marker } from '@biesbjerg/ngx-translate-extract-marker'
@@ -65,6 +67,7 @@ marker('chart.aggregation.count')
65
67
  standalone: true,
66
68
  })
67
69
  export class ChartViewComponent {
70
+ @Input() cacheActive = true
68
71
  @Input() set link(value: DatasetOnlineResource) {
69
72
  this.currentLink$.next(value)
70
73
  }
@@ -134,7 +137,7 @@ export class ChartViewComponent {
134
137
  switchMap((link) => {
135
138
  this.error = null
136
139
  this.loading = true
137
- return this.dataService.getDataset(link).pipe(
140
+ return this.dataService.getDataset(link, this.cacheActive).pipe(
138
141
  catchError((error) => {
139
142
  this.handleError(error)
140
143
  return EMPTY
@@ -164,17 +164,26 @@ export class DataService {
164
164
  wfsLink.url.toString(),
165
165
  wfsLink.name
166
166
  ).pipe(
167
- map((urls) => urls.all),
168
- map((urls) =>
169
- Object.keys(urls).map((format) => ({
170
- ...wfsLink,
171
- type: 'download',
172
- url: new URL(urls[format]),
173
- mimeType: getMimeTypeForFormat(
174
- getFileFormatFromServiceOutput(format)
175
- ),
176
- }))
177
- )
167
+ map((urls) => {
168
+ if (urls.geojson) {
169
+ urls.all['application/json'] = urls.geojson
170
+ }
171
+ return urls
172
+ }),
173
+ map((urls) => {
174
+ const resources: DatasetOnlineResource[] = Object.keys(urls.all).map(
175
+ (format) => ({
176
+ ...wfsLink,
177
+ name: wfsLink.name,
178
+ type: 'download' as const,
179
+ url: new URL(urls.all[format]),
180
+ mimeType: getMimeTypeForFormat(
181
+ getFileFormatFromServiceOutput(format)
182
+ ),
183
+ })
184
+ )
185
+ return resources
186
+ })
178
187
  )
179
188
  }
180
189
 
@@ -187,6 +196,7 @@ export class DataService {
187
196
  return Object.keys(collectionInfo.bulkDownloadLinks).map((downloadLink) => {
188
197
  return {
189
198
  ...ogcApiLink,
199
+ name: collectionInfo.id,
190
200
  type: 'download',
191
201
  url: new URL(collectionInfo.bulkDownloadLinks[downloadLink]),
192
202
  mimeType: getMimeTypeForFormat(
@@ -232,8 +242,11 @@ export class DataService {
232
242
  }))
233
243
  }
234
244
 
235
- readAsGeoJson(link: DatasetOnlineResource): Observable<FeatureCollection> {
236
- return this.getDataset(link).pipe(
245
+ readAsGeoJson(
246
+ link: DatasetOnlineResource,
247
+ cacheActive: boolean
248
+ ): Observable<FeatureCollection> {
249
+ return this.getDataset(link, cacheActive).pipe(
237
250
  switchMap((dataset) => dataset.selectAll().read()),
238
251
  map((features) => ({
239
252
  type: 'FeatureCollection',
@@ -242,13 +255,21 @@ export class DataService {
242
255
  )
243
256
  }
244
257
 
245
- getDataset(link: DatasetOnlineResource): Observable<BaseReader> {
258
+ getDataset(
259
+ link: DatasetOnlineResource,
260
+ cacheActive: boolean
261
+ ): Observable<BaseReader> {
246
262
  if (link.type === 'service' && link.accessServiceProtocol === 'wfs') {
247
263
  const wfsUrlEndpoint = this.proxy.getProxiedUrl(link.url.toString())
248
264
  return from(
249
- openDataset(wfsUrlEndpoint, 'wfs', {
250
- wfsFeatureType: link.name,
251
- })
265
+ openDataset(
266
+ wfsUrlEndpoint,
267
+ 'wfs',
268
+ {
269
+ wfsFeatureType: link.name,
270
+ },
271
+ cacheActive
272
+ )
252
273
  )
253
274
  } else if (link.type === 'download') {
254
275
  const linkProxifiedUrl = this.proxy.getProxiedUrl(link.url.toString())
@@ -257,7 +278,9 @@ export class DataService {
257
278
  SupportedTypes.indexOf(format as any) > -1
258
279
  ? (format as SupportedType)
259
280
  : undefined
260
- return from(openDataset(linkProxifiedUrl, supportedType)).pipe()
281
+ return from(
282
+ openDataset(linkProxifiedUrl, supportedType, undefined, cacheActive)
283
+ ).pipe()
261
284
  } else if (
262
285
  link.type === 'service' &&
263
286
  link.accessServiceProtocol === 'esriRest'
@@ -266,7 +289,7 @@ export class DataService {
266
289
  link.url.toString(),
267
290
  'geojson'
268
291
  )
269
- return from(openDataset(url, 'geojson')).pipe()
292
+ return from(openDataset(url, 'geojson', undefined, cacheActive)).pipe()
270
293
  } else if (
271
294
  link.type === 'service' &&
272
295
  link.accessServiceProtocol === 'ogcFeatures'
@@ -274,7 +297,7 @@ export class DataService {
274
297
  return from(this.getDownloadUrlsFromOgcApi(link.url.href)).pipe(
275
298
  switchMap((collectionInfo) => {
276
299
  const geojsonUrl = collectionInfo.jsonDownloadLink
277
- return openDataset(geojsonUrl, 'geojson')
300
+ return openDataset(geojsonUrl, 'geojson', undefined, cacheActive)
278
301
  }),
279
302
  tap((url) => {
280
303
  if (url === null) {
@@ -33,6 +33,7 @@ import { CommonModule } from '@angular/common'
33
33
  standalone: true,
34
34
  })
35
35
  export class TableViewComponent {
36
+ @Input() cacheActive = true
36
37
  @Input() set link(value: DatasetOnlineResource) {
37
38
  this.currentLink$.next(value)
38
39
  }
@@ -66,7 +67,7 @@ export class TableViewComponent {
66
67
  ) {}
67
68
 
68
69
  getDatasetReader(link: DatasetOnlineResource): Observable<BaseReader> {
69
- return this.dataService.getDataset(link)
70
+ return this.dataService.getDataset(link, this.cacheActive)
70
71
  }
71
72
 
72
73
  onTableSelect(event) {
@@ -2,7 +2,7 @@
2
2
  <gn-ui-form-field-rich
3
3
  class="mt-[-8px]"
4
4
  [label]="label"
5
- [hint]="hint | translate"
5
+ [placeholder]="hint | translate"
6
6
  [value]="constraint_.text ?? ''"
7
7
  (valueChange)="handleConstraintTextChange($event)"
8
8
  ></gn-ui-form-field-rich>
@@ -79,6 +79,7 @@ export class FormFieldContactsForResourceComponent
79
79
  'owner',
80
80
  'point_of_contact',
81
81
  'author',
82
+ 'publisher',
82
83
  ]
83
84
 
84
85
  roleSectionsToDisplay: Role[] = []
@@ -28,7 +28,7 @@ import { FormFieldWrapperComponent } from '../../../../../../../../../libs/ui/la
28
28
  export class FormFieldRichComponent {
29
29
  @Input() label: string
30
30
  @Input() hint: string
31
- @Input() placeholder = 'Votre texte ici' //TODO: translate
31
+ @Input() placeholder = ''
32
32
  @Input() value: string
33
33
 
34
34
  @Output() valueChange: EventEmitter<string> = new EventEmitter()
@@ -16,19 +16,6 @@
16
16
  placeholder=""
17
17
  ></gn-ui-text-input>
18
18
  </div>
19
- <div
20
- class="flex-1 w-11/12"
21
- *ngIf="wizardFieldType.CHIPS === wizardFieldConfig.type"
22
- >
23
- <gn-ui-chips-input
24
- #chips
25
- [selectedItems]="wizardFieldData"
26
- placeholder=""
27
- [id]="wizardFieldConfig.id"
28
- [url]="wizardFieldConfig.options.url"
29
- [loadOnce]="wizardFieldConfig.options.loadOnce"
30
- ></gn-ui-chips-input>
31
- </div>
32
19
  <div
33
20
  class="h-32 w-11/12"
34
21
  *ngIf="wizardFieldType.TEXT_AREA === wizardFieldConfig.type"
@@ -23,7 +23,6 @@ import { WizardFieldModel } from '../../models/wizard-field.model'
23
23
  import { WizardFieldType } from '../../models/wizard-field.type'
24
24
  import { WizardService } from '../../services/wizard.service'
25
25
  import {
26
- ChipsInputComponent,
27
26
  DropdownSelectorComponent,
28
27
  TextAreaComponent,
29
28
  TextInputComponent,
@@ -74,7 +73,6 @@ export class WizardFieldComponent implements AfterViewInit, OnDestroy {
74
73
  @Input() wizardFieldConfig: WizardFieldModel
75
74
 
76
75
  @ViewChild('searchText') searchText: TextInputComponent
77
- @ViewChild('chips') chips: ChipsInputComponent
78
76
  @ViewChild('textArea') textArea: TextAreaComponent
79
77
  @ViewChild('dropdown') dropdown: DropdownSelectorComponent
80
78
 
@@ -96,9 +94,6 @@ export class WizardFieldComponent implements AfterViewInit, OnDestroy {
96
94
  case WizardFieldType.TEXT: {
97
95
  return data || ''
98
96
  }
99
- case WizardFieldType.CHIPS: {
100
- return data ? JSON.parse(data) : []
101
- }
102
97
  case WizardFieldType.TEXT_AREA: {
103
98
  return data || ''
104
99
  }
@@ -131,10 +126,6 @@ export class WizardFieldComponent implements AfterViewInit, OnDestroy {
131
126
  this.initializeTextInputListener()
132
127
  break
133
128
  }
134
- case WizardFieldType.CHIPS: {
135
- this.initializeChipsListener()
136
- break
137
- }
138
129
  case WizardFieldType.TEXT_AREA: {
139
130
  this.initializeTextAreaListener()
140
131
  return
@@ -161,17 +152,6 @@ export class WizardFieldComponent implements AfterViewInit, OnDestroy {
161
152
  )
162
153
  }
163
154
 
164
- private initializeChipsListener() {
165
- this.subs.add(
166
- this.chips.itemsChange.subscribe((items) => {
167
- this.wizardService.onWizardWizardFieldDataChanged(
168
- this.wizardFieldConfig.id,
169
- JSON.stringify(items)
170
- )
171
- })
172
- )
173
- }
174
-
175
155
  private initializeTextAreaListener() {
176
156
  this.subs.add(
177
157
  this.textArea.valueChange.subscribe((value) => {
@@ -275,8 +275,8 @@ export const DEFAULT_CONFIGURATION: EditorConfig = {
275
275
  labelKey: marker('editor.record.form.page.description'),
276
276
  sections: [
277
277
  TITLE_SECTION,
278
- ABOUT_SECTION,
279
278
  CLASSIFICATION_SECTION,
279
+ ABOUT_SECTION,
280
280
  GEOGRAPHICAL_COVERAGE_SECTION,
281
281
  ],
282
282
  },
@@ -1,7 +1,6 @@
1
1
  export enum WizardFieldType {
2
2
  TEXT,
3
3
  TEXT_AREA,
4
- CHIPS,
5
4
  DATA_PICKER,
6
5
  DROPDOWN,
7
6
  }
@@ -8,15 +8,28 @@
8
8
  [choices]="choices"
9
9
  (selectValue)="selectLink($event)"
10
10
  ></gn-ui-dropdown-selector>
11
- <div class="relative h-[460px]">
12
- <gn-ui-table-view
13
- *ngIf="mode === 'table'"
14
- [link]="selectedLink$ | async"
15
- ></gn-ui-table-view>
16
- <gn-ui-chart-view
17
- *ngIf="mode === 'chart'"
18
- (chartConfig$)="setChartConfig($event)"
19
- [link]="selectedLink$ | async"
20
- ></gn-ui-chart-view>
21
- </div>
11
+ <ng-container *ngIf="hidePreview; else dataView">
12
+ <gn-ui-popup-alert
13
+ type="warning"
14
+ icon="matErrorOutlineOutline"
15
+ class="block h-12 p-1"
16
+ >
17
+ <span translate>record.feature.limit</span>
18
+ </gn-ui-popup-alert>
19
+ </ng-container>
20
+ <ng-template #dataView>
21
+ <div class="relative h-[460px]">
22
+ <gn-ui-table-view
23
+ *ngIf="mode === 'table'"
24
+ [cacheActive]="cacheActive$ | async"
25
+ [link]="selectedLink$ | async"
26
+ ></gn-ui-table-view>
27
+ <gn-ui-chart-view
28
+ *ngIf="mode === 'chart'"
29
+ (chartConfig$)="setChartConfig($event)"
30
+ [cacheActive]="cacheActive$ | async"
31
+ [link]="selectedLink$ | async"
32
+ ></gn-ui-chart-view>
33
+ </div>
34
+ </ng-template>
22
35
  </div>