geonetwork-ui 2.8.0-dev.398701d7f → 2.8.0-dev.5186798f7

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 (239) hide show
  1. package/esm2022/index.mjs +2 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/common/distribution.mapper.mjs +5 -1
  3. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.mjs +3 -3
  4. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +26 -1
  5. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.mjs +7 -7
  6. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +3 -2
  7. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +4 -3
  8. package/esm2022/libs/api/repository/src/lib/gn4/auth/auth.service.mjs +2 -2
  9. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/constant.mjs +1 -2
  10. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +7 -3
  11. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +10 -10
  12. package/esm2022/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.mjs +3 -2
  13. package/esm2022/libs/common/domain/src/index.mjs +3 -0
  14. package/esm2022/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.mjs +1 -1
  15. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +3 -1
  16. package/esm2022/libs/common/domain/src/lib/model/search/sort-by.model.mjs +6 -1
  17. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  18. package/esm2022/libs/data-access/gn4/src/openapi/model/user.api.model.mjs +1 -1
  19. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +3 -1
  20. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +26 -8
  21. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +23 -3
  22. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +2 -2
  23. package/esm2022/libs/feature/record/src/index.mjs +2 -1
  24. package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +13 -4
  25. package/esm2022/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.mjs +23 -8
  26. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +2 -1
  27. package/esm2022/libs/feature/record/src/lib/stac-view/stac-view.component.mjs +138 -0
  28. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +14 -1
  29. package/esm2022/libs/feature/router/src/lib/default/router.service.mjs +5 -1
  30. package/esm2022/libs/feature/router/src/lib/default/state/router.effects.mjs +9 -7
  31. package/esm2022/libs/feature/search/src/lib/constants.mjs +1 -2
  32. package/esm2022/libs/feature/search/src/lib/sort-by/sort-by.component.mjs +8 -12
  33. package/esm2022/libs/ui/elements/src/index.mjs +3 -1
  34. package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +1 -1
  35. package/esm2022/libs/ui/elements/src/lib/error/error.component.mjs +3 -3
  36. package/esm2022/libs/ui/elements/src/lib/external-link-card/external-link-card.component.mjs +11 -4
  37. package/esm2022/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.mjs +37 -0
  38. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +5 -9
  39. package/esm2022/libs/ui/elements/src/lib/stac-items-result-grid/stac-items-result-grid.component.mjs +18 -0
  40. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.mjs +5 -5
  41. package/esm2022/libs/ui/inputs/src/index.mjs +2 -1
  42. package/esm2022/libs/ui/inputs/src/lib/date-picker/date-picker.component.mjs +21 -7
  43. package/esm2022/libs/ui/inputs/src/lib/date-range-inputs/date-range-inputs.component.mjs +35 -0
  44. package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +2 -3
  45. package/esm2022/libs/ui/layout/src/lib/paginable.interface.mjs +1 -1
  46. package/esm2022/libs/ui/layout/src/lib/previous-next-buttons/previous-next-buttons.component.mjs +13 -5
  47. package/esm2022/libs/util/i18n/src/lib/date-locales.mjs +33 -0
  48. package/esm2022/libs/util/shared/src/index.mjs +2 -1
  49. package/esm2022/libs/util/shared/src/lib/humanize-date.directive.mjs +33 -0
  50. package/esm2022/libs/util/shared/src/lib/links/link-classifier.service.mjs +5 -1
  51. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +12 -1
  52. package/esm2022/libs/util/shared/src/lib/services/date.service.mjs +19 -2
  53. package/esm2022/libs/util/shared/src/lib/services/proxy.service.mjs +9 -11
  54. package/esm2022/libs/util/shared/src/lib/utils/sort-by.mjs +9 -6
  55. package/esm2022/translations/de.json +18 -3
  56. package/esm2022/translations/en.json +19 -5
  57. package/esm2022/translations/es.json +17 -2
  58. package/esm2022/translations/fr.json +19 -4
  59. package/esm2022/translations/it.json +20 -5
  60. package/esm2022/translations/nl.json +17 -2
  61. package/esm2022/translations/pt.json +17 -2
  62. package/esm2022/translations/sk.json +18 -3
  63. package/fesm2022/geonetwork-ui-date-locales-MYnkDJ5h.mjs +35 -0
  64. package/fesm2022/geonetwork-ui-date-locales-MYnkDJ5h.mjs.map +1 -0
  65. package/fesm2022/geonetwork-ui.mjs +656 -205
  66. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  67. package/index.d.ts +1 -0
  68. package/index.d.ts.map +1 -1
  69. package/index.ts +1 -0
  70. package/libs/api/metadata-converter/src/lib/common/distribution.mapper.d.ts.map +1 -1
  71. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  72. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts.map +1 -1
  73. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +5 -1
  74. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  75. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  76. package/libs/api/repository/src/lib/gn4/auth/auth.service.d.ts.map +1 -1
  77. package/libs/api/repository/src/lib/gn4/elasticsearch/constant.d.ts.map +1 -1
  78. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
  79. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +7 -7
  80. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  81. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts.map +1 -1
  82. package/libs/common/domain/src/index.d.ts +3 -0
  83. package/libs/common/domain/src/index.d.ts.map +1 -0
  84. package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts +1 -1
  85. package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts.map +1 -1
  86. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +7 -2
  87. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  88. package/libs/common/domain/src/lib/model/search/sort-by.model.d.ts.map +1 -1
  89. package/libs/common/domain/src/lib/platform.service.interface.d.ts +1 -1
  90. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  91. package/libs/data-access/gn4/src/openapi/model/user.api.model.d.ts +1 -1
  92. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts.map +1 -1
  93. package/libs/feature/dataviz/src/lib/service/data.service.d.ts +2 -1
  94. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  95. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +2 -0
  96. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  97. package/libs/feature/record/src/index.d.ts +1 -0
  98. package/libs/feature/record/src/index.d.ts.map +1 -1
  99. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts +3 -2
  100. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts.map +1 -1
  101. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts +3 -2
  102. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts.map +1 -1
  103. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  104. package/libs/feature/record/src/lib/stac-view/stac-view.component.d.ts +35 -0
  105. package/libs/feature/record/src/lib/stac-view/stac-view.component.d.ts.map +1 -0
  106. package/libs/feature/record/src/lib/state/mdview.facade.d.ts +28 -24
  107. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  108. package/libs/feature/router/src/lib/default/router.service.d.ts +2 -0
  109. package/libs/feature/router/src/lib/default/router.service.d.ts.map +1 -1
  110. package/libs/feature/router/src/lib/default/state/router.effects.d.ts +3 -1
  111. package/libs/feature/router/src/lib/default/state/router.effects.d.ts.map +1 -1
  112. package/libs/feature/search/src/lib/constants.d.ts.map +1 -1
  113. package/libs/feature/search/src/lib/sort-by/sort-by.component.d.ts +4 -3
  114. package/libs/feature/search/src/lib/sort-by/sort-by.component.d.ts.map +1 -1
  115. package/libs/ui/elements/src/index.d.ts +2 -0
  116. package/libs/ui/elements/src/index.d.ts.map +1 -1
  117. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -1
  118. package/libs/ui/elements/src/lib/external-link-card/external-link-card.component.d.ts +3 -2
  119. package/libs/ui/elements/src/lib/external-link-card/external-link-card.component.d.ts.map +1 -1
  120. package/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.d.ts +8 -0
  121. package/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.d.ts.map +1 -0
  122. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +0 -2
  123. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
  124. package/libs/ui/elements/src/lib/stac-items-result-grid/stac-items-result-grid.component.d.ts +8 -0
  125. package/libs/ui/elements/src/lib/stac-items-result-grid/stac-items-result-grid.component.d.ts.map +1 -0
  126. package/libs/ui/inputs/src/index.d.ts +1 -0
  127. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  128. package/libs/ui/inputs/src/lib/date-picker/date-picker.component.d.ts +5 -0
  129. package/libs/ui/inputs/src/lib/date-picker/date-picker.component.d.ts.map +1 -1
  130. package/libs/ui/inputs/src/lib/date-range-inputs/date-range-inputs.component.d.ts +12 -0
  131. package/libs/ui/inputs/src/lib/date-range-inputs/date-range-inputs.component.d.ts.map +1 -0
  132. package/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.d.ts.map +1 -1
  133. package/libs/ui/layout/src/lib/paginable.interface.d.ts +3 -3
  134. package/libs/ui/layout/src/lib/paginable.interface.d.ts.map +1 -1
  135. package/libs/ui/layout/src/lib/previous-next-buttons/previous-next-buttons.component.d.ts +2 -1
  136. package/libs/ui/layout/src/lib/previous-next-buttons/previous-next-buttons.component.d.ts.map +1 -1
  137. package/libs/util/i18n/src/lib/date-locales.d.ts +5 -0
  138. package/libs/util/i18n/src/lib/date-locales.d.ts.map +1 -0
  139. package/libs/util/shared/src/index.d.ts +1 -0
  140. package/libs/util/shared/src/index.d.ts.map +1 -1
  141. package/libs/util/shared/src/lib/humanize-date.directive.d.ts +15 -0
  142. package/libs/util/shared/src/lib/humanize-date.directive.d.ts.map +1 -0
  143. package/libs/util/shared/src/lib/links/link-classifier.service.d.ts.map +1 -1
  144. package/libs/util/shared/src/lib/links/link-utils.d.ts +6 -0
  145. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  146. package/libs/util/shared/src/lib/services/date.service.d.ts +4 -0
  147. package/libs/util/shared/src/lib/services/date.service.d.ts.map +1 -1
  148. package/libs/util/shared/src/lib/services/proxy.service.d.ts +5 -4
  149. package/libs/util/shared/src/lib/services/proxy.service.d.ts.map +1 -1
  150. package/libs/util/shared/src/lib/utils/sort-by.d.ts.map +1 -1
  151. package/package.json +2 -2
  152. package/src/libs/api/metadata-converter/src/lib/common/distribution.mapper.ts +2 -0
  153. package/src/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.ts +2 -2
  154. package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +1 -1
  155. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.service+eaux-usees.ts +1 -1
  156. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +5 -2
  157. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +1 -1
  158. package/src/libs/api/metadata-converter/src/lib/fixtures/georhena.records.ts +1 -1
  159. package/src/libs/api/metadata-converter/src/lib/fixtures/metawal.records.ts +2 -2
  160. package/src/libs/api/metadata-converter/src/lib/fixtures/wallonie.records.reuse.ts +1 -1
  161. package/src/libs/api/metadata-converter/src/lib/fixtures/wallonie.records.service+napitswallonia.ts +1 -1
  162. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +28 -0
  163. package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +13 -6
  164. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +6 -2
  165. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +4 -2
  166. package/src/libs/api/repository/src/lib/gn4/auth/auth.service.ts +4 -1
  167. package/src/libs/api/repository/src/lib/gn4/elasticsearch/constant.ts +0 -1
  168. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +12 -4
  169. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +37 -36
  170. package/src/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.ts +3 -2
  171. package/src/libs/common/domain/src/index.ts +2 -0
  172. package/src/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.ts +1 -1
  173. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +12 -1
  174. package/src/libs/common/domain/src/lib/model/search/sort-by.model.ts +5 -0
  175. package/src/libs/common/domain/src/lib/platform.service.interface.ts +1 -1
  176. package/src/libs/common/fixtures/src/lib/elasticsearch/metadata-links.fixtures.ts +5 -0
  177. package/src/libs/common/fixtures/src/lib/link.fixtures.ts +19 -0
  178. package/src/libs/data-access/gn4/src/openapi/model/user.api.model.ts +1 -1
  179. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +1 -0
  180. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +30 -5
  181. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +3 -3
  182. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +30 -0
  183. package/src/libs/feature/editor/src/lib/fields.config.ts +1 -1
  184. package/src/libs/feature/record/src/index.ts +1 -0
  185. package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +7 -1
  186. package/src/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.ts +23 -4
  187. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +1 -0
  188. package/src/libs/feature/record/src/lib/stac-view/stac-view.component.css +3 -0
  189. package/src/libs/feature/record/src/lib/stac-view/stac-view.component.html +68 -0
  190. package/src/libs/feature/record/src/lib/stac-view/stac-view.component.ts +190 -0
  191. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +30 -1
  192. package/src/libs/feature/router/src/lib/default/router.service.ts +8 -0
  193. package/src/libs/feature/router/src/lib/default/state/router.effects.ts +6 -7
  194. package/src/libs/feature/search/src/lib/constants.ts +0 -1
  195. package/src/libs/feature/search/src/lib/sort-by/sort-by.component.ts +8 -12
  196. package/src/libs/ui/elements/src/index.ts +2 -0
  197. package/src/libs/ui/elements/src/lib/error/error.component.html +5 -1
  198. package/src/libs/ui/elements/src/lib/external-link-card/external-link-card.component.html +43 -22
  199. package/src/libs/ui/elements/src/lib/external-link-card/external-link-card.component.ts +12 -3
  200. package/src/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.css +0 -0
  201. package/src/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.html +31 -0
  202. package/src/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.ts +30 -0
  203. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +69 -23
  204. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +2 -9
  205. package/src/libs/ui/elements/src/lib/stac-items-result-grid/stac-items-result-grid.component.css +0 -0
  206. package/src/libs/ui/elements/src/lib/stac-items-result-grid/stac-items-result-grid.component.html +13 -0
  207. package/src/libs/ui/elements/src/lib/stac-items-result-grid/stac-items-result-grid.component.ts +15 -0
  208. package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.html +1 -1
  209. package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.ts +2 -2
  210. package/src/libs/ui/inputs/src/index.ts +1 -0
  211. package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.ts +17 -1
  212. package/src/libs/ui/inputs/src/lib/date-range-inputs/date-range-inputs.component.css +0 -0
  213. package/src/libs/ui/inputs/src/lib/date-range-inputs/date-range-inputs.component.html +15 -0
  214. package/src/libs/ui/inputs/src/lib/date-range-inputs/date-range-inputs.component.ts +41 -0
  215. package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.ts +4 -2
  216. package/src/libs/ui/layout/src/lib/paginable.interface.ts +3 -3
  217. package/src/libs/ui/layout/src/lib/previous-next-buttons/previous-next-buttons.component.html +12 -6
  218. package/src/libs/ui/layout/src/lib/previous-next-buttons/previous-next-buttons.component.ts +4 -1
  219. package/src/libs/util/i18n/src/lib/date-locales.ts +63 -0
  220. package/src/libs/util/shared/src/index.ts +1 -0
  221. package/src/libs/util/shared/src/lib/humanize-date.directive.ts +35 -0
  222. package/src/libs/util/shared/src/lib/links/link-classifier.service.ts +4 -0
  223. package/src/libs/util/shared/src/lib/links/link-utils.ts +11 -0
  224. package/src/libs/util/shared/src/lib/services/date.service.ts +27 -1
  225. package/src/libs/util/shared/src/lib/services/proxy.service.ts +6 -2
  226. package/src/libs/util/shared/src/lib/utils/sort-by.ts +8 -5
  227. package/translations/de.json +18 -3
  228. package/translations/en.json +19 -5
  229. package/translations/es.json +17 -2
  230. package/translations/fr.json +19 -4
  231. package/translations/it.json +20 -5
  232. package/translations/nl.json +17 -2
  233. package/translations/pt.json +17 -2
  234. package/translations/sk.json +18 -3
  235. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.mjs +0 -59
  236. package/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.d.ts +0 -11
  237. package/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.d.ts.map +0 -1
  238. package/src/libs/common/domain/src/lib/index.ts +0 -2
  239. package/src/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.ts +0 -54
@@ -451,6 +451,32 @@ export class Gn4FieldMapper {
451
451
  }),
452
452
  }
453
453
  },
454
+ resourceIdentifier: (output, source) => {
455
+ const identifiers = getAsArray(selectField(source, 'resourceIdentifier'))
456
+
457
+ if (!identifiers.length) return output
458
+
459
+ const mappedIdentifiers = identifiers
460
+ .map((id) => {
461
+ const code = selectField<string>(id, 'code')
462
+ const codeSpace = selectField<string>(id, 'codeSpace')
463
+ const link = selectField<string>(id, 'link')
464
+
465
+ return {
466
+ code,
467
+ ...(codeSpace && { codeSpace }),
468
+ ...(link && { url: link }),
469
+ }
470
+ })
471
+ .filter((id) => id !== null)
472
+
473
+ if (!mappedIdentifiers.length) return output
474
+
475
+ return {
476
+ ...output,
477
+ resourceIdentifiers: mappedIdentifiers,
478
+ }
479
+ },
454
480
  }
455
481
 
456
482
  private genericField = (output) => output
@@ -512,6 +538,8 @@ export class Gn4FieldMapper {
512
538
  /^OGC:WMTS/.test(protocol) ||
513
539
  /TMS/i.test(protocol) ||
514
540
  /ogc\W*api\W*features/i.test(protocol) ||
541
+ /^DB:POSTGIS/i.test(protocol) ||
542
+ /stac\W*items/i.test(protocol) ||
515
543
  (/^WWW:DOWNLOAD-/.test(protocol) && /data.geopf.fr/.test(url)) // TO DO : change with the good protocol when decided
516
544
  ) {
517
545
  return 'service'
@@ -92,7 +92,7 @@ export class Iso19139Converter extends BaseConverter<string> {
92
92
  recordUpdated: readRecordUpdated,
93
93
  recordCreated: () => undefined, // not supported in ISO19139
94
94
  recordPublished: () => undefined, // not supported in ISO19139
95
- resourceIdentifier: readResourceIdentifier,
95
+ resourceIdentifiers: readResourceIdentifier,
96
96
  resourceUpdated: readResourceUpdated,
97
97
  resourceCreated: readResourceCreated,
98
98
  resourcePublished: readResourcePublished,
@@ -133,7 +133,7 @@ export class Iso19139Converter extends BaseConverter<string> {
133
133
  recordUpdated: writeRecordUpdated,
134
134
  recordCreated: () => undefined, // not supported in ISO19139
135
135
  recordPublished: () => undefined, // not supported in ISO19139
136
- resourceIdentifier: writeResourceIdentifier,
136
+ resourceIdentifiers: writeResourceIdentifier,
137
137
  resourceUpdated: writeResourceUpdated,
138
138
  resourceCreated: writeResourceCreated,
139
139
  resourcePublished: writeResourcePublished,
@@ -240,12 +240,19 @@ export class Iso19139Converter extends BaseConverter<string> {
240
240
  const onlineResources = this.readers['onlineResources'](rootEl, tr)
241
241
  const otherLanguages = this.readers['otherLanguages'](rootEl, tr)
242
242
  const defaultLanguage = this.readers['defaultLanguage'](rootEl, tr)
243
- const resourceIdentifier = this.readers['resourceIdentifier'](rootEl, tr)
243
+ const resourceIdentifiers = this.readers['resourceIdentifiers'](
244
+ rootEl,
245
+ tr
246
+ ) as Array<{
247
+ code: string
248
+ codeSpace?: string
249
+ url?: string
250
+ }>
244
251
  const spatialExtents = this.readers['spatialExtents'](rootEl, tr)
245
252
 
246
253
  return {
247
254
  uniqueIdentifier,
248
- ...(resourceIdentifier && { resourceIdentifier }),
255
+ ...(resourceIdentifiers?.length > 0 && { resourceIdentifiers }),
249
256
  kind,
250
257
  otherLanguages,
251
258
  defaultLanguage,
@@ -388,8 +395,8 @@ export class Iso19139Converter extends BaseConverter<string> {
388
395
  this.writers['otherConstraints'](record, rootEl)
389
396
  fieldChanged('onlineResources') &&
390
397
  this.writers['onlineResources'](record, rootEl)
391
- fieldChanged('resourceIdentifier') &&
392
- this.writers['resourceIdentifier'](record, rootEl)
398
+ fieldChanged('resourceIdentifiers') &&
399
+ this.writers['resourceIdentifiers'](record, rootEl)
393
400
 
394
401
  if (record.kind === 'dataset') {
395
402
  fieldChanged('status') && this.writers['status'](record, rootEl)
@@ -1183,8 +1183,10 @@ export function readDefaultLanguage(rootEl: XmlElement): LanguageCode {
1183
1183
  )(rootEl)
1184
1184
  }
1185
1185
 
1186
- export function readResourceIdentifier(rootEl: XmlElement): string {
1187
- return pipe(
1186
+ export function readResourceIdentifier(
1187
+ rootEl: XmlElement
1188
+ ): Array<{ code: string; codeSpace?: string; url?: string }> {
1189
+ const code = pipe(
1188
1190
  findIdentification(),
1189
1191
  findNestedElement(
1190
1192
  'gmd:citation',
@@ -1195,4 +1197,6 @@ export function readResourceIdentifier(rootEl: XmlElement): string {
1195
1197
  ),
1196
1198
  extractCharacterString()
1197
1199
  )(rootEl)
1200
+
1201
+ return code ? [{ code }] : []
1198
1202
  }
@@ -1502,14 +1502,16 @@ export function writeResourceIdentifier(
1502
1502
  record: DatasetRecord,
1503
1503
  rootEl: XmlElement
1504
1504
  ) {
1505
+ const firstIdentifier = record.resourceIdentifiers?.[0]?.code
1506
+
1505
1507
  pipe(
1506
1508
  findOrCreateIdentification(),
1507
1509
  findNestedChildOrCreate('gmd:citation', 'gmd:CI_Citation'),
1508
1510
  removeChildrenByName('gmd:identifier'),
1509
- record.resourceIdentifier
1511
+ firstIdentifier
1510
1512
  ? pipe(
1511
1513
  createNestedChild('gmd:identifier', 'gmd:MD_Identifier', 'gmd:code'),
1512
- writeCharacterString(record.resourceIdentifier)
1514
+ writeCharacterString(firstIdentifier)
1513
1515
  )
1514
1516
  : noop
1515
1517
  )(rootEl)
@@ -33,7 +33,10 @@ export class AuthService {
33
33
  return baseUrl
34
34
  .replace(
35
35
  '${current_url}',
36
- new URL(this.location.path(), window.location.href).toString()
36
+ new URL(
37
+ this.location.prepareExternalUrl(this.location.path()),
38
+ window.location.href
39
+ ).toString()
37
40
  )
38
41
  .replace('${lang2}', toLang2(this.translateService.currentLang))
39
42
  .replace('${lang3}', toLang3(this.translateService.currentLang))
@@ -7,7 +7,6 @@ export const ES_SOURCE_SUMMARY = [
7
7
  'resourceAbstractObject',
8
8
  'overview',
9
9
  'logo',
10
- 'codelist_status_text',
11
10
  'link',
12
11
  'linkProtocol',
13
12
  'contactForResource*.organisation*',
@@ -43,18 +43,26 @@ export class Gn4PlatformMapper {
43
43
  userFromApi(apiUser: UserApiModel): UserModel {
44
44
  if (!apiUser) return null
45
45
  const {
46
- enabled,
46
+ addresses,
47
47
  emailAddresses,
48
- organization,
48
+ enabled,
49
+ id,
49
50
  kind,
50
51
  lastLoginDate,
52
+ security,
53
+ primaryAddress,
54
+ authorities,
51
55
  accountNonExpired,
52
56
  accountNonLocked,
53
- id,
54
57
  credentialsNonExpired,
55
58
  ...user
56
59
  } = apiUser
57
- return { ...apiUser, id: id.toString() } as UserModel
60
+
61
+ return {
62
+ ...user,
63
+ id: id.toString(),
64
+ email: emailAddresses ? emailAddresses[0] || '' : '',
65
+ } as UserModel
58
66
  }
59
67
 
60
68
  keywordsFromApi(
@@ -1,12 +1,21 @@
1
+ import { HttpClient, HttpEventType } from '@angular/common/http'
1
2
  import { Inject, Injectable, InjectionToken, Optional } from '@angular/core'
2
3
  import {
3
- catchError,
4
- filter,
5
- map,
6
- mergeMap,
7
- shareReplay,
8
- tap,
9
- } from 'rxjs/operators'
4
+ KeywordApiResponse,
5
+ ThesaurusApiResponse,
6
+ } from '../../../../../../../libs/api/metadata-converter/src'
7
+ import {
8
+ CatalogRecord,
9
+ Keyword,
10
+ Organization,
11
+ UserFeedback,
12
+ } from '../../../../../../../libs/common/domain/src/lib/model/record'
13
+ import { KeywordType } from '../../../../../../../libs/common/domain/src/lib/model/thesaurus'
14
+ import { UserModel } from '../../../../../../../libs/common/domain/src/lib/model/user/user.model'
15
+ import {
16
+ PlatformServiceInterface,
17
+ UploadEvent,
18
+ } from '../../../../../../../libs/common/domain/src/lib/platform.service.interface'
10
19
  import {
11
20
  MeApiService,
12
21
  RecordsApiService,
@@ -15,26 +24,9 @@ import {
15
24
  UserfeedbackApiService,
16
25
  UsersApiService,
17
26
  } from '../../../../../../../libs/data-access/gn4/src'
18
- import {
19
- PlatformServiceInterface,
20
- UploadEvent,
21
- } from '../../../../../../../libs/common/domain/src/lib/platform.service.interface'
22
- import { UserModel } from '../../../../../../../libs/common/domain/src/lib/model/user/user.model'
23
- import {
24
- CatalogRecord,
25
- Keyword,
26
- Organization,
27
- UserFeedback,
28
- } from '../../../../../../../libs/common/domain/src/lib/model/record'
29
- import { Gn4PlatformMapper } from './gn4-platform.mapper'
30
- import { ltr } from 'semver'
31
- import { HttpClient, HttpEventType } from '@angular/common/http'
32
- import {
33
- KeywordApiResponse,
34
- ThesaurusApiResponse,
35
- } from '../../../../../../../libs/api/metadata-converter/src'
36
- import { KeywordType } from '../../../../../../../libs/common/domain/src/lib/model/thesaurus'
27
+ import { toLang3 } from '../../../../../../../libs/util/i18n/src'
37
28
  import { noDuplicateFileName } from '../../../../../../../libs/util/shared/src'
29
+ import { TranslateService } from '@ngx-translate/core'
38
30
  import {
39
31
  combineLatest,
40
32
  forkJoin,
@@ -43,9 +35,17 @@ import {
43
35
  switchMap,
44
36
  throwError,
45
37
  } from 'rxjs'
46
- import { TranslateService } from '@ngx-translate/core'
47
- import { toLang3 } from '../../../../../../../libs/util/i18n/src'
38
+ import {
39
+ catchError,
40
+ filter,
41
+ map,
42
+ mergeMap,
43
+ shareReplay,
44
+ tap,
45
+ } from 'rxjs/operators'
46
+ import { ltr } from 'semver'
48
47
  import { Gn4SettingsService } from '../settings/gn4-settings.service'
48
+ import { Gn4PlatformMapper } from './gn4-platform.mapper'
49
49
 
50
50
  const minApiVersion = '4.2.2'
51
51
 
@@ -56,7 +56,6 @@ export const DISABLE_AUTH = new InjectionToken<boolean>('gnDisableAuth', {
56
56
  @Injectable()
57
57
  export class Gn4PlatformService implements PlatformServiceInterface {
58
58
  private readonly type = 'GeoNetwork'
59
- private readonly me$: Observable<UserModel>
60
59
  private readonly users$: Observable<UserModel[]>
61
60
  private readonly isUserAnonymous$: Observable<boolean>
62
61
  private readonly gnParseVersion = '4.2.5'
@@ -70,6 +69,15 @@ export class Gn4PlatformService implements PlatformServiceInterface {
70
69
  }),
71
70
  shareReplay(1)
72
71
  )
72
+
73
+ private me$ = this.disableAuth
74
+ ? of(null)
75
+ : of(true).pipe(
76
+ switchMap(() => this.meApi.getMe()),
77
+ switchMap((apiUser) => this.mapper.userFromMeApi(apiUser)),
78
+ shareReplay({ bufferSize: 1, refCount: true })
79
+ )
80
+
73
81
  /**
74
82
  * A map of already loaded thesauri (groups of keywords); the key is a URI
75
83
  * @private
@@ -93,13 +101,6 @@ export class Gn4PlatformService implements PlatformServiceInterface {
93
101
  private settingsService: Gn4SettingsService,
94
102
  @Inject(DISABLE_AUTH) @Optional() private disableAuth: boolean
95
103
  ) {
96
- this.me$ = this.disableAuth
97
- ? of(null)
98
- : this.meApi.getMe().pipe(
99
- switchMap((apiUser) => this.mapper.userFromMeApi(apiUser)),
100
- shareReplay({ bufferSize: 1, refCount: true })
101
- )
102
-
103
104
  this.isUserAnonymous$ = this.me$.pipe(
104
105
  map((user) => !user || !('id' in user))
105
106
  )
@@ -1,7 +1,7 @@
1
1
  import { Injectable } from '@angular/core'
2
2
  import { SiteApiService } from '../../../../../../../libs/data-access/gn4/src'
3
+ import { Observable, of, switchMap } from 'rxjs'
3
4
  import { map, shareReplay } from 'rxjs/operators'
4
- import { Observable } from 'rxjs'
5
5
 
6
6
  @Injectable({
7
7
  providedIn: 'root',
@@ -25,7 +25,8 @@ export class Gn4SettingsService {
25
25
  constructor(private siteApiService: SiteApiService) {}
26
26
 
27
27
  private getSettingsSetValueByKey(key: string) {
28
- return this.siteApiService.getSettingsSet(null, [key]).pipe(
28
+ return of(true).pipe(
29
+ switchMap(() => this.siteApiService.getSettingsSet(null, [key])),
29
30
  map((v) => v[key]),
30
31
  shareReplay({ bufferSize: 1, refCount: true })
31
32
  )
@@ -0,0 +1,2 @@
1
+ export * from './lib/organizations.service.interface'
2
+ export * from './lib/platform.service.interface'
@@ -24,5 +24,5 @@ export interface DatavizConfigModel {
24
24
  view: string
25
25
  source: DatasetOnlineResource
26
26
  chartConfig?: DatavizChartConfigModel
27
- styleTMSIndex: number
27
+ styleTMSIndex?: number
28
28
  }
@@ -113,6 +113,12 @@ export interface INSPIRE_topic {
113
113
  label: string
114
114
  }
115
115
 
116
+ export interface ResourceIdentifier {
117
+ code: string
118
+ codeSpace?: string
119
+ url?: string
120
+ }
121
+
116
122
  export interface BaseRecord {
117
123
  uniqueIdentifier: Uuid
118
124
  ownerOrganization: Organization
@@ -135,7 +141,8 @@ export interface BaseRecord {
135
141
  updateFrequency?: UpdateFrequency
136
142
 
137
143
  // information related to the resource (dataset, service)
138
- resourceIdentifier?: string
144
+
145
+ resourceIdentifiers?: Array<ResourceIdentifier>
139
146
  contactsForResource: Array<Individual>
140
147
  resourceCreated?: Date
141
148
  resourcePublished?: Date
@@ -163,6 +170,8 @@ export type ServiceProtocol =
163
170
  | 'GPFDL'
164
171
  | 'tms'
165
172
  | 'maplibre-style'
173
+ | 'postgis'
174
+ | 'stac'
166
175
  | 'other'
167
176
 
168
177
  marker('record.metadata.api.accessServiceProtocol.wms')
@@ -174,6 +183,8 @@ marker('record.metadata.api.accessServiceProtocol.ogcFeatures')
174
183
  marker('record.metadata.api.accessServiceProtocol.GPFDL')
175
184
  marker('record.metadata.api.accessServiceProtocol.tms')
176
185
  marker('record.metadata.api.accessServiceProtocol.maplibre-style')
186
+ marker('record.metadata.api.accessServiceProtocol.postgis')
187
+ marker('record.metadata.api.accessServiceProtocol.stac')
177
188
  marker('record.metadata.api.accessServiceProtocol.other')
178
189
 
179
190
  export type OnlineResourceType = 'service' | 'download' | 'link' | 'endpoint'
@@ -6,4 +6,9 @@ export const SortByEnum: Record<string, SortByField> = {
6
6
  RELEVANCY: ['desc', '_score'],
7
7
  QUALITY_SCORE: ['desc', 'qualityScore'],
8
8
  CHANGE_DATE: ['desc', 'changeDate'],
9
+ RESOURCE_DATES: [
10
+ ['desc', 'revisionDateForResource'],
11
+ ['desc', 'publicationDateForResource'],
12
+ ['desc', 'creationDateForResource'],
13
+ ],
9
14
  }
@@ -45,6 +45,7 @@ export abstract class PlatformServiceInterface {
45
45
  thesaurusId: string
46
46
  ): Observable<Keyword[]>
47
47
 
48
+ abstract getFeedbacksAllowed(): Observable<boolean>
48
49
  abstract getUserFeedbacks(recordUuid: string): Observable<UserFeedback[]>
49
50
  abstract postUserFeedbacks(recordUuid: UserFeedback): Observable<void>
50
51
 
@@ -58,5 +59,4 @@ export abstract class PlatformServiceInterface {
58
59
  removeDuplicate?: boolean
59
60
  ): Observable<UploadEvent>
60
61
  abstract getFileContent(url: URL): Observable<any>
61
- abstract getFeedbacksAllowed(): Observable<boolean>
62
62
  }
@@ -154,4 +154,9 @@ export const elasticLinkFixture = (): Record<string, unknown> => ({
154
154
  name: 'myothertmslayer',
155
155
  url: 'https://my.tms.server/MapServer',
156
156
  },
157
+ stacItems: {
158
+ accessServiceProtocol: 'STAC:Items',
159
+ name: 'stac layer',
160
+ url: ' https://stacapi-cdos.apps.okd.crocc.meso.umontpellier.fr/collections/lidarhd/items',
161
+ },
157
162
  })
@@ -259,4 +259,23 @@ export const aSetOfLinksFixture = () => ({
259
259
  accessServiceProtocol: 'wms',
260
260
  type: 'endpoint',
261
261
  }) as ServiceEndpoint,
262
+ postgisLink: () =>
263
+ ({
264
+ name: 'France_Regions',
265
+ description:
266
+ 'Boundaries for the administrative regions of metropolitan France.',
267
+ url: new URL('http://geo.local:5432/france_demo'),
268
+ type: 'service',
269
+ accessServiceProtocol: 'postgis',
270
+ }) as DatasetServiceDistribution,
271
+ stacLink: () =>
272
+ ({
273
+ name: 'Lidar HD point cloud (COPC)',
274
+ description: 'Lidar HD classified point clouds from IGN',
275
+ url: new URL(
276
+ 'https://stacapi-cdos.apps.okd.crocc.meso.umontpellier.fr/collections/lidarhd/items'
277
+ ),
278
+ type: 'service',
279
+ accessServiceProtocol: 'stac',
280
+ }) as DatasetServiceDistribution,
262
281
  })
@@ -21,7 +21,7 @@ export interface UserApiModel {
21
21
  emailAddresses?: Set<string>
22
22
  addresses?: Set<AddressApiModel>
23
23
  primaryAddress?: AddressApiModel
24
- organization?: string
24
+ organisation?: string
25
25
  kind?: string
26
26
  lastLoginDate?: string
27
27
  authorities?: Array<GrantedAuthorityApiModel>
@@ -108,6 +108,7 @@ export class ChartViewComponent {
108
108
  chartType$ = new BehaviorSubject<InputChartType>('bar')
109
109
 
110
110
  @Input() set userChartConfig(config: DatavizChartConfigModel) {
111
+ if (!config) return
111
112
  this.aggregation$.next(config.aggregation)
112
113
  this.xProperty$.next(config.xProperty)
113
114
  this.yProperty$.next(config.yProperty)
@@ -7,6 +7,9 @@ import {
7
7
  WfsEndpoint,
8
8
  WfsVersion,
9
9
  TmsEndpoint,
10
+ StacEndpoint,
11
+ GetCollectionItemsOptions,
12
+ StacItemsDocument,
10
13
  } from '@camptocamp/ogc-client'
11
14
  import {
12
15
  BaseReader,
@@ -97,16 +100,27 @@ export class DataService {
97
100
  if (!featureType) {
98
101
  throw new Error('wfs.featuretype.notfound')
99
102
  }
103
+
104
+ const wfsVersion = endpoint.getVersion()
105
+ const addSrsName = wfsVersion === '1.1.0' || wfsVersion === '2.0.0'
106
+ const defaultCrs = featureType.defaultCrs
107
+
108
+ const shouldAddOutputCrs = addSrsName && defaultCrs
109
+
100
110
  return {
101
- all: featureType.outputFormats.reduce(
102
- (prev, curr) => ({
111
+ all: featureType.outputFormats.reduce((prev, curr) => {
112
+ const isJsonFormat = curr.toLowerCase().includes('json')
113
+ return {
103
114
  ...prev,
104
115
  [curr]: endpoint.getFeatureUrl(featureType.name, {
105
116
  outputFormat: curr,
117
+ ...(shouldAddOutputCrs &&
118
+ !isJsonFormat && {
119
+ outputCrs: defaultCrs,
120
+ }),
106
121
  }),
107
- }),
108
- {}
109
- ),
122
+ }
123
+ }, {}),
110
124
  geojson: endpoint.supportsJson(featureType.name)
111
125
  ? endpoint.getFeatureUrl(featureType.name, {
112
126
  asJson: true,
@@ -233,6 +247,17 @@ export class DataService {
233
247
  })
234
248
  }
235
249
 
250
+ async getItemsFromStacApi(
251
+ url: string,
252
+ options: GetCollectionItemsOptions
253
+ ): Promise<StacItemsDocument> {
254
+ return await StacEndpoint.getItemsFromUrl(url, options)
255
+ .then((response) => response)
256
+ .catch(() => {
257
+ throw new Error(`ogc.unreachable.unknown`)
258
+ })
259
+ }
260
+
236
261
  async getGeodataLinksFromTms(
237
262
  tmsLink: DatasetServiceDistribution,
238
263
  keepOriginalLink = false
@@ -69,11 +69,11 @@
69
69
  (valueChange)="valueChange.emit($event)"
70
70
  ></gn-ui-form-field-overviews>
71
71
  </ng-container>
72
- <ng-container *ngSwitchCase="'resourceIdentifier'">
72
+ <ng-container *ngSwitchCase="'resourceIdentifiers'">
73
73
  <gn-ui-form-field-simple
74
74
  [type]="'text'"
75
- [value]="valueAsString"
76
- (valueChange)="valueChange.emit($event)"
75
+ [value]="valueAsResourceIdentifierCode"
76
+ (valueChange)="handleResourceIdentifierChange($event)"
77
77
  ></gn-ui-form-field-simple>
78
78
  </ng-container>
79
79
  <ng-container *ngSwitchCase="'resourceCreated'">
@@ -142,4 +142,34 @@ export class FormFieldComponent {
142
142
  get valueAsOnlineResources() {
143
143
  return this.value as Array<OnlineResource>
144
144
  }
145
+ get valueAsResourceIdentifierCode() {
146
+ const identifiers = this.value as Array<{
147
+ code: string
148
+ codeSpace?: string
149
+ url?: string
150
+ }>
151
+ return identifiers?.[0]?.code || ''
152
+ }
153
+
154
+ handleResourceIdentifierChange(code: string) {
155
+ const identifiers = this.value as Array<{
156
+ code: string
157
+ codeSpace?: string
158
+ url?: string
159
+ }>
160
+
161
+ if (!code) {
162
+ this.valueChange.emit(identifiers?.slice(1) || [])
163
+ return
164
+ }
165
+
166
+ if (identifiers?.[0]) {
167
+ this.valueChange.emit([
168
+ { ...identifiers[0], code },
169
+ ...identifiers.slice(1),
170
+ ])
171
+ } else {
172
+ this.valueChange.emit([{ code }])
173
+ }
174
+ }
145
175
  }
@@ -81,7 +81,7 @@ export const RECORD_RESOURCE_CREATED_FIELD: EditorField = {
81
81
  }
82
82
 
83
83
  export const RESOURCE_IDENTIFIER_FIELD: EditorField = {
84
- model: 'resourceIdentifier',
84
+ model: 'resourceIdentifiers',
85
85
  formFieldConfig: {
86
86
  labelKey: marker('editor.record.form.field.resourceIdentifier'),
87
87
  },
@@ -8,3 +8,4 @@ export * from './lib/external-viewer-button/external-viewer-button.component'
8
8
  export * from './lib/gpf-api-dl/gpf-api-dl.component'
9
9
  export * from './lib/map-view/map-view.component'
10
10
  export * from './lib/record-meta/record-meta.component'
11
+ export * from './lib/stac-view/stac-view.component'
@@ -12,7 +12,7 @@ import { MdViewFacade } from '../state'
12
12
  import { CopyTextButtonComponent } from '../../../../../../libs/ui/inputs/src'
13
13
  import { CommonModule } from '@angular/common'
14
14
  import { TranslatePipe } from '@ngx-translate/core'
15
- import { GEONETWORK_UI_TAG_NAME } from '../../../../../../libs/util/shared/src'
15
+ import { GEONETWORK_UI_TAG_NAME, PROXY_PATH } from '../../../../../../libs/util/shared/src'
16
16
 
17
17
  export const WEB_COMPONENT_EMBEDDER_URL = new InjectionToken<string>(
18
18
  'webComponentEmbedderUrl'
@@ -60,6 +60,9 @@ export class DataViewPermalinkComponent {
60
60
  url.searchParams.append('e', `gn-dataset-view-map`)
61
61
  }
62
62
  url.searchParams.append('a', `api-url=${this.config.basePath}`)
63
+ if (this.proxyPath) {
64
+ url.searchParams.append('a', `proxy-path=${this.proxyPath}`)
65
+ }
63
66
  url.searchParams.append('a', `dataset-id=${metadata.uniqueIdentifier}`)
64
67
  url.searchParams.append('a', `primary-color=#0f4395`)
65
68
  url.searchParams.append('a', `secondary-color=#8bc832`)
@@ -72,6 +75,9 @@ export class DataViewPermalinkComponent {
72
75
  constructor(
73
76
  @Inject(Configuration) private config: Configuration,
74
77
  @Optional()
78
+ @Inject(PROXY_PATH)
79
+ private proxyPath: string,
80
+ @Optional()
75
81
  @Inject(WEB_COMPONENT_EMBEDDER_URL)
76
82
  protected wcEmbedderBaseUrl: string,
77
83
  private facade: MdViewFacade