geonetwork-ui 2.4.0-dev.573bccd7 → 2.4.0-dev.58b3c2e5

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 (304) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/index.mjs +2 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/keywords.model.mjs +2 -0
  3. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +1 -1
  4. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.mjs +1 -1
  5. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +1 -1
  6. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +14 -5
  7. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.mjs +2 -1
  8. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +3 -1
  9. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +12 -4
  10. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +38 -14
  11. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  12. package/esm2022/libs/common/domain/src/lib/model/record/organization.model.mjs +1 -1
  13. package/esm2022/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.mjs +1 -1
  14. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  15. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  16. package/esm2022/libs/data-access/gn4/src/openapi/model/user.api.model.mjs +1 -1
  17. package/esm2022/libs/feature/catalog/src/index.mjs +2 -1
  18. package/esm2022/libs/feature/catalog/src/lib/feature-catalog.module.mjs +1 -1
  19. package/esm2022/libs/feature/catalog/src/lib/organisations/organisations.component.mjs +6 -6
  20. package/esm2022/libs/feature/catalog/src/lib/organization-url.token.mjs +4 -0
  21. package/esm2022/libs/feature/catalog/src/lib/records/records.service.mjs +4 -6
  22. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +4 -4
  23. package/esm2022/libs/feature/dataviz/src/lib/feature-dataviz.module.mjs +7 -4
  24. package/esm2022/libs/feature/dataviz/src/lib/table-view/table-view.component.mjs +1 -1
  25. package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +2 -1
  26. package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +6 -4
  27. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +2 -1
  28. package/esm2022/libs/feature/editor/src/lib/+state/editor.selectors.mjs +2 -2
  29. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.mjs +59 -0
  30. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.mjs +64 -50
  31. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +17 -35
  32. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/index.mjs +2 -1
  33. package/esm2022/libs/feature/editor/src/lib/feature-editor.module.mjs +4 -3
  34. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +12 -5
  35. package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +12 -6
  36. package/esm2022/libs/feature/record/src/lib/feature-record.module.mjs +7 -4
  37. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +3 -3
  38. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +8 -12
  39. package/esm2022/libs/feature/router/src/lib/default/constants.mjs +2 -1
  40. package/esm2022/libs/feature/router/src/lib/default/router.config.mjs +1 -1
  41. package/esm2022/libs/feature/router/src/lib/default/router.service.mjs +9 -2
  42. package/esm2022/libs/feature/router/src/lib/default/state/router.facade.mjs +8 -1
  43. package/esm2022/libs/feature/search/src/index.mjs +2 -2
  44. package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +7 -4
  45. package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +3 -3
  46. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +49 -0
  47. package/esm2022/libs/feature/search/src/lib/state/search.facade.mjs +3 -2
  48. package/esm2022/libs/feature/search/src/lib/state/selectors.mjs +4 -1
  49. package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +7 -3
  50. package/esm2022/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.mjs +5 -5
  51. package/esm2022/libs/ui/catalog/src/lib/ui-catalog.module.mjs +5 -2
  52. package/esm2022/libs/ui/dataviz/src/lib/figure/figure.component.mjs +5 -8
  53. package/esm2022/libs/ui/elements/src/index.mjs +1 -2
  54. package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +3 -3
  55. package/esm2022/libs/ui/elements/src/lib/error/error.component.mjs +5 -3
  56. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +7 -7
  57. package/esm2022/libs/ui/elements/src/lib/related-record-card/related-record-card.component.mjs +24 -5
  58. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +9 -11
  59. package/esm2022/libs/ui/inputs/src/index.mjs +2 -1
  60. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +59 -26
  61. package/esm2022/libs/ui/inputs/src/lib/badge/badge.component.mjs +28 -0
  62. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +11 -10
  63. package/esm2022/libs/ui/layout/src/index.mjs +2 -1
  64. package/esm2022/libs/ui/layout/src/lib/max-lines/max-lines.component.mjs +71 -0
  65. package/esm2022/libs/ui/layout/src/lib/ui-layout.module.mjs +1 -1
  66. package/esm2022/libs/ui/search/src/index.mjs +2 -1
  67. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +120 -0
  68. package/esm2022/libs/ui/widgets/src/index.mjs +1 -2
  69. package/esm2022/libs/ui/widgets/src/lib/popup-alert/popup-alert.component.mjs +5 -3
  70. package/esm2022/libs/ui/widgets/src/lib/ui-widgets.module.mjs +1 -6
  71. package/esm2022/translations/de.json +66 -34
  72. package/esm2022/translations/en.json +37 -5
  73. package/esm2022/translations/es.json +37 -5
  74. package/esm2022/translations/fr.json +38 -6
  75. package/esm2022/translations/it.json +37 -5
  76. package/esm2022/translations/nl.json +37 -5
  77. package/esm2022/translations/pt.json +37 -5
  78. package/fesm2022/geonetwork-ui.mjs +1092 -654
  79. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  80. package/libs/api/metadata-converter/src/lib/gn4/types/index.d.ts +1 -0
  81. package/libs/api/metadata-converter/src/lib/gn4/types/index.d.ts.map +1 -1
  82. package/libs/api/metadata-converter/src/lib/gn4/types/keywords.model.d.ts +31 -0
  83. package/libs/api/metadata-converter/src/lib/gn4/types/keywords.model.d.ts.map +1 -0
  84. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +3 -2
  85. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  86. package/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.d.ts +1 -1
  87. package/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.d.ts.map +1 -1
  88. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +3 -2
  89. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  90. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +1 -0
  91. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  92. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.d.ts.map +1 -1
  93. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts.map +1 -1
  94. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts +3 -3
  95. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
  96. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +9 -5
  97. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  98. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +4 -7
  99. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  100. package/libs/common/domain/src/lib/model/record/organization.model.d.ts +1 -0
  101. package/libs/common/domain/src/lib/model/record/organization.model.d.ts.map +1 -1
  102. package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts +12 -5
  103. package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts.map +1 -1
  104. package/libs/common/domain/src/lib/platform.service.interface.d.ts +4 -3
  105. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  106. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +3 -1
  107. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  108. package/libs/data-access/gn4/src/openapi/model/user.api.model.d.ts +1 -1
  109. package/libs/feature/catalog/src/index.d.ts +1 -0
  110. package/libs/feature/catalog/src/index.d.ts.map +1 -1
  111. package/libs/feature/catalog/src/lib/feature-catalog.module.d.ts.map +1 -1
  112. package/libs/feature/catalog/src/lib/organisations/organisations.component.d.ts.map +1 -1
  113. package/libs/feature/catalog/src/lib/organization-url.token.d.ts +3 -0
  114. package/libs/feature/catalog/src/lib/organization-url.token.d.ts.map +1 -0
  115. package/libs/feature/catalog/src/lib/records/records.service.d.ts.map +1 -1
  116. package/libs/feature/dataviz/src/lib/feature-dataviz.module.d.ts +2 -1
  117. package/libs/feature/dataviz/src/lib/feature-dataviz.module.d.ts.map +1 -1
  118. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +1 -0
  119. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -1
  120. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts +1 -1
  121. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts.map +1 -1
  122. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +1 -0
  123. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
  124. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.d.ts +25 -0
  125. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.d.ts.map +1 -0
  126. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.d.ts +6 -6
  127. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.d.ts.map +1 -1
  128. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +6 -10
  129. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  130. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts +1 -0
  131. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts.map +1 -1
  132. package/libs/feature/editor/src/lib/feature-editor.module.d.ts.map +1 -1
  133. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  134. package/libs/feature/editor/src/lib/services/editor.service.d.ts +1 -1
  135. package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
  136. package/libs/feature/record/src/lib/feature-record.module.d.ts +2 -1
  137. package/libs/feature/record/src/lib/feature-record.module.d.ts.map +1 -1
  138. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  139. package/libs/feature/router/src/lib/default/constants.d.ts +1 -0
  140. package/libs/feature/router/src/lib/default/constants.d.ts.map +1 -1
  141. package/libs/feature/router/src/lib/default/router.config.d.ts +1 -0
  142. package/libs/feature/router/src/lib/default/router.config.d.ts.map +1 -1
  143. package/libs/feature/router/src/lib/default/router.service.d.ts +1 -0
  144. package/libs/feature/router/src/lib/default/router.service.d.ts.map +1 -1
  145. package/libs/feature/router/src/lib/default/state/router.facade.d.ts +1 -0
  146. package/libs/feature/router/src/lib/default/state/router.facade.d.ts.map +1 -1
  147. package/libs/feature/search/src/index.d.ts +1 -1
  148. package/libs/feature/search/src/index.d.ts.map +1 -1
  149. package/libs/feature/search/src/lib/feature-search.module.d.ts +2 -1
  150. package/libs/feature/search/src/lib/feature-search.module.d.ts.map +1 -1
  151. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
  152. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +25 -0
  153. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -0
  154. package/libs/feature/search/src/lib/state/search.facade.d.ts +1 -0
  155. package/libs/feature/search/src/lib/state/search.facade.d.ts.map +1 -1
  156. package/libs/feature/search/src/lib/state/selectors.d.ts +1 -0
  157. package/libs/feature/search/src/lib/state/selectors.d.ts.map +1 -1
  158. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
  159. package/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.d.ts +2 -2
  160. package/libs/ui/catalog/src/lib/ui-catalog.module.d.ts +2 -1
  161. package/libs/ui/catalog/src/lib/ui-catalog.module.d.ts.map +1 -1
  162. package/libs/ui/dataviz/src/lib/figure/figure.component.d.ts +1 -2
  163. package/libs/ui/dataviz/src/lib/figure/figure.component.d.ts.map +1 -1
  164. package/libs/ui/elements/src/index.d.ts +0 -1
  165. package/libs/ui/elements/src/index.d.ts.map +1 -1
  166. package/libs/ui/elements/src/lib/error/error.component.d.ts +3 -1
  167. package/libs/ui/elements/src/lib/error/error.component.d.ts.map +1 -1
  168. package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts +5 -1
  169. package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts.map +1 -1
  170. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +19 -19
  171. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  172. package/libs/ui/inputs/src/index.d.ts +1 -0
  173. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  174. package/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.d.ts +7 -4
  175. package/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.d.ts.map +1 -1
  176. package/libs/ui/inputs/src/lib/badge/badge.component.d.ts +11 -0
  177. package/libs/ui/inputs/src/lib/badge/badge.component.d.ts.map +1 -0
  178. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +35 -35
  179. package/libs/ui/layout/src/index.d.ts +1 -0
  180. package/libs/ui/layout/src/index.d.ts.map +1 -1
  181. package/libs/ui/{elements → layout}/src/lib/max-lines/max-lines.component.d.ts +2 -2
  182. package/libs/ui/layout/src/lib/max-lines/max-lines.component.d.ts.map +1 -0
  183. package/libs/ui/layout/src/lib/ui-layout.module.d.ts.map +1 -1
  184. package/libs/ui/search/src/index.d.ts +1 -0
  185. package/libs/ui/search/src/index.d.ts.map +1 -1
  186. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +30 -0
  187. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -0
  188. package/libs/ui/widgets/src/index.d.ts +0 -1
  189. package/libs/ui/widgets/src/index.d.ts.map +1 -1
  190. package/libs/ui/widgets/src/lib/popup-alert/popup-alert.component.d.ts +1 -1
  191. package/libs/ui/widgets/src/lib/popup-alert/popup-alert.component.d.ts.map +1 -1
  192. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts +10 -11
  193. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts.map +1 -1
  194. package/package.json +1 -1
  195. package/src/libs/api/metadata-converter/src/lib/gn4/types/index.ts +1 -0
  196. package/src/libs/api/metadata-converter/src/lib/gn4/types/keywords.model.ts +31 -0
  197. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +2 -2
  198. package/src/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.ts +1 -1
  199. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +2 -2
  200. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +21 -8
  201. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.ts +1 -0
  202. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +3 -1
  203. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +25 -4
  204. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +81 -21
  205. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +4 -9
  206. package/src/libs/common/domain/src/lib/model/record/organization.model.ts +1 -0
  207. package/src/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.ts +13 -6
  208. package/src/libs/common/domain/src/lib/platform.service.interface.ts +7 -3
  209. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +4 -1
  210. package/src/libs/common/fixtures/src/lib/organisations.fixture.ts +28 -0
  211. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +8 -0
  212. package/src/libs/data-access/datafeeder/src/openapi/model/datasetMetadata.api.model.ts +4 -0
  213. package/src/libs/data-access/datafeeder/src/openapi/model/datasetUploadStatus.api.model.ts +2 -0
  214. package/src/libs/data-access/gn4/src/openapi/model/user.api.model.ts +1 -1
  215. package/src/libs/feature/catalog/src/index.ts +1 -0
  216. package/src/libs/feature/catalog/src/lib/feature-catalog.module.ts +0 -1
  217. package/src/libs/feature/catalog/src/lib/organisations/organisations.component.html +1 -1
  218. package/src/libs/feature/catalog/src/lib/organisations/organisations.component.ts +2 -2
  219. package/src/libs/feature/catalog/src/lib/organization-url.token.ts +6 -0
  220. package/src/libs/feature/catalog/src/lib/records/records.service.ts +6 -8
  221. package/src/libs/feature/dataviz/src/lib/feature-dataviz.module.ts +2 -1
  222. package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +2 -0
  223. package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +35 -29
  224. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +1 -0
  225. package/src/libs/feature/editor/src/lib/+state/editor.selectors.ts +1 -1
  226. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.html +19 -0
  227. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.ts +79 -0
  228. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.ts +95 -86
  229. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +7 -22
  230. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +16 -44
  231. package/src/libs/feature/editor/src/lib/components/record-form/form-field/index.ts +1 -1
  232. package/src/libs/feature/editor/src/lib/feature-editor.module.ts +2 -1
  233. package/src/libs/feature/editor/src/lib/fields.config.ts +11 -4
  234. package/src/libs/feature/editor/src/lib/services/editor.service.ts +20 -6
  235. package/src/libs/feature/record/src/lib/feature-record.module.ts +3 -2
  236. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +42 -31
  237. package/src/libs/feature/router/src/lib/default/constants.ts +1 -0
  238. package/src/libs/feature/router/src/lib/default/router.config.ts +1 -0
  239. package/src/libs/feature/router/src/lib/default/router.service.ts +13 -1
  240. package/src/libs/feature/router/src/lib/default/state/router.facade.ts +9 -1
  241. package/src/libs/feature/search/src/index.ts +1 -1
  242. package/src/libs/feature/search/src/lib/feature-search.module.ts +2 -1
  243. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +2 -2
  244. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +9 -0
  245. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +49 -0
  246. package/src/libs/feature/search/src/lib/state/search.facade.ts +5 -0
  247. package/src/libs/feature/search/src/lib/state/selectors.ts +7 -0
  248. package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +16 -2
  249. package/src/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.html +8 -6
  250. package/src/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.ts +2 -2
  251. package/src/libs/ui/catalog/src/lib/ui-catalog.module.ts +2 -0
  252. package/src/libs/ui/dataviz/src/lib/figure/figure.component.html +11 -3
  253. package/src/libs/ui/dataviz/src/lib/figure/figure.component.ts +3 -7
  254. package/src/libs/ui/elements/src/index.ts +0 -1
  255. package/src/libs/ui/elements/src/lib/api-card/api-card.component.html +29 -29
  256. package/src/libs/ui/elements/src/lib/error/error.component.html +30 -6
  257. package/src/libs/ui/elements/src/lib/error/error.component.ts +2 -0
  258. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.html +1 -1
  259. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.ts +22 -1
  260. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +4 -6
  261. package/src/libs/ui/inputs/src/index.ts +1 -0
  262. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.css +0 -1
  263. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.html +23 -19
  264. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.ts +79 -27
  265. package/src/libs/ui/inputs/src/lib/badge/badge.component.html +18 -0
  266. package/src/libs/ui/inputs/src/lib/badge/badge.component.ts +27 -0
  267. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.css +31 -0
  268. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.html +15 -0
  269. package/src/libs/ui/inputs/src/lib/switch-toggle/switch-toggle.component.ts +38 -0
  270. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +3 -3
  271. package/src/libs/ui/layout/src/index.ts +1 -0
  272. package/src/libs/ui/layout/src/lib/max-lines/max-lines.component.css +0 -0
  273. package/src/libs/ui/{elements → layout}/src/lib/max-lines/max-lines.component.html +1 -0
  274. package/src/libs/ui/{elements → layout}/src/lib/max-lines/max-lines.component.ts +9 -5
  275. package/src/libs/ui/layout/src/lib/ui-layout.module.ts +0 -1
  276. package/src/libs/ui/search/src/index.ts +1 -0
  277. package/src/libs/ui/search/src/lib/results-table/results-table.component.css +0 -0
  278. package/src/libs/{feature → ui}/search/src/lib/results-table/results-table.component.html +8 -8
  279. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +138 -0
  280. package/src/libs/ui/widgets/src/index.ts +0 -1
  281. package/src/libs/ui/widgets/src/lib/popup-alert/popup-alert.component.ts +4 -0
  282. package/src/libs/ui/widgets/src/lib/ui-widgets.module.ts +0 -3
  283. package/translations/de.json +66 -34
  284. package/translations/en.json +37 -5
  285. package/translations/es.json +37 -5
  286. package/translations/fr.json +38 -6
  287. package/translations/it.json +37 -5
  288. package/translations/nl.json +37 -5
  289. package/translations/pt.json +37 -5
  290. package/translations/sk.json +38 -6
  291. package/esm2022/libs/feature/search/src/lib/results-table/results-table.component.mjs +0 -136
  292. package/esm2022/libs/ui/elements/src/lib/max-lines/max-lines.component.mjs +0 -69
  293. package/esm2022/libs/ui/widgets/src/lib/badge/badge.component.mjs +0 -18
  294. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts +0 -36
  295. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts.map +0 -1
  296. package/libs/ui/elements/src/lib/max-lines/max-lines.component.d.ts.map +0 -1
  297. package/libs/ui/widgets/src/lib/badge/badge.component.d.ts +0 -7
  298. package/libs/ui/widgets/src/lib/badge/badge.component.d.ts.map +0 -1
  299. package/src/libs/feature/search/src/lib/results-table/results-table.component.ts +0 -172
  300. package/src/libs/ui/widgets/src/lib/badge/badge.component.html +0 -10
  301. package/src/libs/ui/widgets/src/lib/badge/badge.component.ts +0 -14
  302. /package/src/libs/feature/{search/src/lib/results-table/results-table.component.css → editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.css} +0 -0
  303. /package/src/libs/{ui/elements/src/lib/max-lines/max-lines.component.css → feature/search/src/lib/results-table/results-table-container.component.css} +0 -0
  304. /package/src/libs/ui/{widgets → inputs}/src/lib/badge/badge.component.css +0 -0
@@ -1,5 +1,5 @@
1
1
  import { Injectable } from '@angular/core'
2
- import { Observable, of, switchMap } from 'rxjs'
2
+ import { Observable, combineLatest, of, switchMap } from 'rxjs'
3
3
  import { catchError, map, shareReplay, tap } from 'rxjs/operators'
4
4
  import {
5
5
  MeApiService,
@@ -12,13 +12,19 @@ import {
12
12
  import { PlatformServiceInterface } from '../../../../../../../libs/common/domain/src/lib/platform.service.interface'
13
13
  import { UserModel } from '../../../../../../../libs/common/domain/src/lib/model/user/user.model'
14
14
  import {
15
+ Keyword,
15
16
  Organization,
16
17
  UserFeedback,
17
18
  } from '../../../../../../../libs/common/domain/src/lib/model/record'
18
19
  import { Gn4PlatformMapper } from './gn4-platform.mapper'
19
20
  import { ltr } from 'semver'
20
- import { ThesaurusModel } from '../../../../../../../libs/common/domain/src/lib/model/thesaurus/thesaurus.model'
21
21
  import { LangService } from '../../../../../../../libs/util/i18n/src'
22
+ import { HttpClient } from '@angular/common/http'
23
+ import {
24
+ KeywordApiResponse,
25
+ ThesaurusApiResponse,
26
+ } from '../../../../../../../libs/api/metadata-converter/src'
27
+ import { KeywordType } from '../../../../../../../libs/common/domain/src/lib/model/thesaurus'
22
28
 
23
29
  const minApiVersion = '4.2.2'
24
30
 
@@ -60,7 +66,7 @@ export class Gn4PlatformService implements PlatformServiceInterface {
60
66
  * A map of already loaded thesauri (groups of keywords); the key is a URI
61
67
  * @private
62
68
  */
63
- private thesauri: Record<string, Observable<ThesaurusModel>> = {}
69
+ private keywordsByThesauri: Record<string, Observable<Keyword[]>> = {}
64
70
 
65
71
  constructor(
66
72
  private siteApiService: SiteApiService,
@@ -70,7 +76,8 @@ export class Gn4PlatformService implements PlatformServiceInterface {
70
76
  private toolsApiService: ToolsApiService,
71
77
  private registriesApiService: RegistriesApiService,
72
78
  private langService: LangService,
73
- private userfeedbackApiService: UserfeedbackApiService
79
+ private userfeedbackApiService: UserfeedbackApiService,
80
+ private httpClient: HttpClient
74
81
  ) {
75
82
  this.me$ = this.meApi.getMe().pipe(
76
83
  switchMap((apiUser) => this.mapper.userFromMeApi(apiUser)),
@@ -121,7 +128,7 @@ export class Gn4PlatformService implements PlatformServiceInterface {
121
128
  // the thesaurus URI is inferred by removing a part of the keyword URI
122
129
  // this is not exact science but it's OK, we'll still end up loading a bunch of keywords at once anyway
123
130
  const thesaurusUri = key.replace(/\/([^/]+)$/, '/')
124
- return this.getThesaurusByUri(thesaurusUri).pipe(
131
+ return this.getKeywordsByUri(thesaurusUri).pipe(
125
132
  map((thesaurus) => {
126
133
  for (const item of thesaurus) {
127
134
  if (item.key === key) return item.label
@@ -133,12 +140,60 @@ export class Gn4PlatformService implements PlatformServiceInterface {
133
140
  return this.keyTranslations$.pipe(map((translations) => translations[key]))
134
141
  }
135
142
 
136
- getThesaurusByUri(uri: string): Observable<ThesaurusModel> {
137
- if (this.thesauri[uri]) {
138
- return this.thesauri[uri]
143
+ private allThesaurus$ = this.httpClient
144
+ .get(
145
+ `${this.registriesApiService.configuration.basePath}/thesaurus?_content_type=json`
146
+ )
147
+ .pipe(
148
+ map((thesaurus) => {
149
+ return thesaurus[0] as ThesaurusApiResponse[]
150
+ }),
151
+ shareReplay(1)
152
+ )
153
+
154
+ searchKeywords(
155
+ query: string,
156
+ keywordTypes: KeywordType[]
157
+ ): Observable<Keyword[]> {
158
+ const keywords$: Observable<KeywordApiResponse[]> = this.allThesaurus$.pipe(
159
+ switchMap((thesaurus) => {
160
+ const selectedThesauri = []
161
+ keywordTypes.map((keywordType) => {
162
+ selectedThesauri.push(
163
+ ...thesaurus.filter((thes) => thes.dname === keywordType)
164
+ )
165
+ })
166
+
167
+ return this.registriesApiService.searchKeywords(
168
+ query,
169
+ this.langService.iso3,
170
+ 10,
171
+ 0,
172
+ null,
173
+ selectedThesauri.map((thes) => thes.key),
174
+ null,
175
+ `*${query}*`
176
+ ) as Observable<KeywordApiResponse[]>
177
+ })
178
+ )
179
+
180
+ return combineLatest([keywords$, this.allThesaurus$]).pipe(
181
+ map(([keywords, thesaurus]) => {
182
+ return this.mapper.keywordsFromApi(
183
+ keywords,
184
+ thesaurus,
185
+ this.langService.iso3
186
+ )
187
+ })
188
+ )
189
+ }
190
+
191
+ getKeywordsByUri(uri: string): Observable<Keyword[]> {
192
+ if (this.keywordsByThesauri[uri]) {
193
+ return this.keywordsByThesauri[uri]
139
194
  }
140
- this.thesauri[uri] = this.registriesApiService
141
- .searchKeywords(
195
+ const keywords$: Observable<KeywordApiResponse[]> =
196
+ this.registriesApiService.searchKeywords(
142
197
  null,
143
198
  this.langService.iso3,
144
199
  1000,
@@ -147,18 +202,23 @@ export class Gn4PlatformService implements PlatformServiceInterface {
147
202
  null,
148
203
  null,
149
204
  `${uri}*`
150
- )
151
- .pipe(
152
- map((thesaurus) =>
153
- this.mapper.thesaurusFromApi(
154
- thesaurus as any[],
155
- this.langService.iso3
156
- )
157
- ),
158
- shareReplay(1)
159
- )
205
+ ) as Observable<KeywordApiResponse[]>
206
+
207
+ this.keywordsByThesauri[uri] = combineLatest([
208
+ keywords$,
209
+ this.allThesaurus$,
210
+ ]).pipe(
211
+ map(([keywords, thesaurus]) => {
212
+ return this.mapper.keywordsFromApi(
213
+ keywords,
214
+ thesaurus,
215
+ this.langService.iso3
216
+ )
217
+ }),
218
+ shareReplay(1)
219
+ )
160
220
 
161
- return this.thesauri[uri]
221
+ return this.keywordsByThesauri[uri]
162
222
  }
163
223
 
164
224
  getUserFeedbacks(uuid: string): Observable<UserFeedback[]> {
@@ -2,6 +2,7 @@ import { marker } from '@biesbjerg/ngx-translate-extract-marker'
2
2
  import type { Individual } from './contact.model'
3
3
  import type { Organization } from './organization.model'
4
4
  import type { Geometry } from 'geojson'
5
+ import { KeywordType, ThesaurusModel } from '../thesaurus'
5
6
 
6
7
  type Uuid = string
7
8
 
@@ -60,18 +61,12 @@ export type SpatialRepresentationType =
60
61
  | 'table'
61
62
  | 'point'
62
63
 
63
- export type KeywordType = 'place' | 'temporal' | 'theme' | 'other'
64
-
65
- export type KeywordThesaurus = {
66
- id: string
67
- name?: string
68
- url?: URL
69
- }
70
-
71
64
  export interface Keyword {
65
+ key?: string
72
66
  label: string
67
+ description?: string
73
68
  type: KeywordType
74
- thesaurus?: KeywordThesaurus
69
+ thesaurus?: ThesaurusModel
75
70
  }
76
71
  // languages should be expressed using two-letters ISO 639-1 codes
77
72
  export type LanguageCode = string
@@ -1,5 +1,6 @@
1
1
  export interface Organization {
2
2
  name: string
3
+ email?: string
3
4
  description?: string
4
5
  website?: URL
5
6
  logoUrl?: URL
@@ -1,7 +1,14 @@
1
- export interface ThesaurusItemModel {
2
- key: string
3
- label: string
4
- description?: string
5
- }
1
+ export type KeywordType = 'place' | 'temporal' | 'theme' | 'other'
6
2
 
7
- export type ThesaurusModel = ThesaurusItemModel[]
3
+ export interface ThesaurusModel {
4
+ id: string
5
+ name?: string
6
+ url?: URL
7
+ thesaurusKey?: string
8
+ definition?: string
9
+ definitions?: object
10
+ uri?: string
11
+ value?: string
12
+ values?: object
13
+ type?: KeywordType
14
+ }
@@ -1,8 +1,8 @@
1
1
  import type { Observable } from 'rxjs'
2
2
  import type { UserModel } from './model/user/user.model'
3
3
  import type { Organization } from './model/record/organization.model'
4
- import type { ThesaurusModel } from './model/thesaurus/'
5
- import { UserFeedback } from './model/record'
4
+ import { Keyword, UserFeedback } from './model/record'
5
+ import { KeywordType } from './model/thesaurus'
6
6
 
7
7
  export abstract class PlatformServiceInterface {
8
8
  abstract getType(): string
@@ -16,7 +16,11 @@ export abstract class PlatformServiceInterface {
16
16
  ): Observable<UserModel[]>
17
17
  abstract getOrganizations(): Observable<Organization[]>
18
18
  abstract translateKey(key: string): Observable<string>
19
- abstract getThesaurusByUri(uri: string): Observable<ThesaurusModel>
19
+ abstract searchKeywords(
20
+ query: string,
21
+ keywordTypes: KeywordType[]
22
+ ): Observable<Keyword[]>
23
+ abstract getKeywordsByUri(uri: string): Observable<Keyword[]>
20
24
  abstract getUserFeedbacks(recordUuid: string): Observable<UserFeedback[]>
21
25
  abstract postUserFeedbacks(recordUuid: UserFeedback): Observable<void>
22
26
  }
@@ -33,7 +33,7 @@ export abstract class RecordsRepositoryInterface {
33
33
  /**
34
34
  * @param record
35
35
  * @param referenceRecordSource
36
- * @returns Observable<string> Returns the source of the record as it was serialized when saved
36
+ * @returns Observable<string> Returns the unique identifier of the record as it was when saved
37
37
  */
38
38
  abstract saveRecord(
39
39
  record: CatalogRecord,
@@ -52,4 +52,7 @@ export abstract class RecordsRepositoryInterface {
52
52
 
53
53
  abstract clearRecordDraft(uniqueIdentifier: string): void
54
54
  abstract recordHasDraft(uniqueIdentifier: string): boolean
55
+
56
+ /** will return all pending drafts, both published and not published */
57
+ abstract getAllDrafts(): Observable<CatalogRecord[]>
55
58
  }
@@ -5,84 +5,112 @@ export const ORGANISATIONS_FIXTURE: Organization[] = deepFreeze([
5
5
  {
6
6
  name: 'I Data Org',
7
7
  description: 'one org for testing',
8
+ email: 'test@gmail.com',
9
+ website: new URL('https://my-geonetwork.org/'),
8
10
  logoUrl: new URL('https://my-geonetwork.org/logo1.png'),
9
11
  recordCount: 12,
10
12
  },
11
13
  {
12
14
  name: 'H Data Org',
13
15
  description: 'another org for testing',
16
+ email: 'test@gmail.com',
17
+ website: new URL('https://my-geonetwork.org/'),
14
18
  logoUrl: new URL('https://my-geonetwork.org/logo2.png'),
15
19
  recordCount: 15,
16
20
  },
17
21
  {
18
22
  name: 'J Data Org',
19
23
  description: 'another org for testing',
24
+ email: 'test@gmail.com',
25
+ website: new URL('https://my-geonetwork.org/'),
20
26
  logoUrl: new URL('https://my-geonetwork.org/logo3.png'),
21
27
  recordCount: 6,
22
28
  },
23
29
  {
24
30
  name: 'G Data Org',
25
31
  description: 'another org for testing',
32
+ email: 'test@gmail.com',
33
+ website: new URL('https://my-geonetwork.org/'),
26
34
  logoUrl: new URL('https://my-geonetwork.org/logo4.png'),
27
35
  recordCount: 8,
28
36
  },
29
37
  {
30
38
  name: 'B Data Org',
31
39
  description: 'another org for testing',
40
+ email: 'test@gmail.com',
41
+ website: new URL('https://my-geonetwork.org/'),
32
42
  logoUrl: new URL('https://my-geonetwork.org/logo5.png'),
33
43
  recordCount: 2,
34
44
  },
35
45
  {
36
46
  name: 'D Data Org',
37
47
  description: 'another org for testing',
48
+ email: 'test@gmail.com',
49
+ website: new URL('https://my-geonetwork.org/'),
38
50
  logoUrl: new URL('https://my-geonetwork.org/logo6.png'),
39
51
  recordCount: 17,
40
52
  },
41
53
  {
42
54
  name: 'F Data Org',
43
55
  description: 'another org for testing',
56
+ email: 'test@gmail.com',
57
+ website: new URL('https://my-geonetwork.org/'),
44
58
  logoUrl: new URL('https://my-geonetwork.org/logo7.png'),
45
59
  recordCount: 14,
46
60
  },
47
61
  {
48
62
  name: 'A Data Org',
49
63
  description: 'another org for testing',
64
+ email: 'test@gmail.com',
65
+ website: new URL('https://my-geonetwork.org/'),
50
66
  logoUrl: new URL('https://my-geonetwork.org/logo8.png'),
51
67
  recordCount: 3,
52
68
  },
53
69
  {
54
70
  name: 'C Data Org',
55
71
  description: 'another org for testing',
72
+ email: 'test@gmail.com',
73
+ website: new URL('https://my-geonetwork.org/'),
56
74
  logoUrl: new URL('https://my-geonetwork.org/logo9.png'),
57
75
  recordCount: 9,
58
76
  },
59
77
  {
60
78
  name: 'E Data Org',
61
79
  description: 'another org for testing',
80
+ email: 'test@gmail.com',
81
+ website: new URL('https://my-geonetwork.org/'),
62
82
  logoUrl: new URL('https://my-geonetwork.org/logo10.png'),
63
83
  recordCount: 1,
64
84
  },
65
85
  {
66
86
  name: 'é Data Org',
67
87
  description: 'another org for testing',
88
+ email: 'test@gmail.com',
89
+ website: new URL('https://my-geonetwork.org/'),
68
90
  logoUrl: new URL('https://my-geonetwork.org/logo10.png'),
69
91
  recordCount: 2,
70
92
  },
71
93
  {
72
94
  name: 'wizard-org',
73
95
  description: 'another org for testing',
96
+ email: 'test@gmail.com',
97
+ website: new URL('https://my-geonetwork.org/'),
74
98
  logoUrl: new URL('https://my-geonetwork.org/logo11.png'),
75
99
  recordCount: 2,
76
100
  },
77
101
  {
78
102
  name: "Université de l'Ingénierie",
79
103
  description: 'another org for testing',
104
+ email: 'test@gmail.com',
105
+ website: new URL('https://my-geonetwork.org/'),
80
106
  logoUrl: new URL('https://my-geonetwork.org/logo12.png'),
81
107
  recordCount: 2,
82
108
  },
83
109
  {
84
110
  name: 'ARS / Agence régionale de santé',
85
111
  description: 'another org for testing',
112
+ email: 'test@gmail.com',
113
+ website: new URL('https://my-geonetwork.org/'),
86
114
  logoUrl: new URL('https://my-geonetwork.org/logo12.png'),
87
115
  recordCount: 2,
88
116
  },
@@ -233,6 +233,14 @@ Malgré l'attention portée à la création de ces données, il est rappelé que
233
233
  description: 'Téléchargement du fichier',
234
234
  mimeType: 'x-gis/x-shapefile',
235
235
  },
236
+ {
237
+ type: 'service',
238
+ url: new URL('https://my-org.net/ogc'),
239
+ accessServiceProtocol: 'ogcFeatures',
240
+ name: 'ogcFeaturesSecondRecord',
241
+ description: 'This OGC service is the second part of the download',
242
+ identifierInService: 'my:featuretype',
243
+ },
236
244
  ],
237
245
  lineage: `Document d’urbanisme numérisé conformément aux prescriptions nationales du CNIG par le Service d'Information Géographique de l'Agglomération de la Région de Compiègne.
238
246
  Ce lot de données produit en 2019, a été numérisé à partir du PCI Vecteur de 2019 et contrôlé par le Service d'Information Géographique de l'Agglomération de la Région de Compiègne.`,
@@ -38,4 +38,8 @@ export interface DatasetMetadataApiModel {
38
38
  * textual description of dataset lineage
39
39
  */
40
40
  creationProcessDescription?: string
41
+ /**
42
+ * Optional, additional options for the dataset
43
+ */
44
+ options: any
41
45
  }
@@ -34,4 +34,6 @@ export interface DatasetUploadStatusApiModel {
34
34
  * detected charset
35
35
  */
36
36
  encoding?: string
37
+ format?: 'CSV' | 'SHAPEFILE'
38
+ options?: any
37
39
  }
@@ -21,7 +21,7 @@ export interface UserApiModel {
21
21
  emailAddresses?: Set<string>
22
22
  addresses?: Set<AddressApiModel>
23
23
  primaryAddress?: AddressApiModel
24
- organisation?: string
24
+ organization?: string
25
25
  kind?: string
26
26
  lastLoginDate?: string
27
27
  authorities?: Array<GrantedAuthorityApiModel>
@@ -1,4 +1,5 @@
1
1
  export * from './lib/feature-catalog.module'
2
+ export * from './lib/organization-url.token'
2
3
  export * from './lib/sources/sources.service'
3
4
  export * from './lib/sources/sources.model'
4
5
  export * from './lib/records/records.service'
@@ -4,7 +4,6 @@ import { UiCatalogModule } from '../../../../../libs/ui/catalog/src'
4
4
  import {
5
5
  GroupsApiService,
6
6
  SearchApiService,
7
- SiteApiService,
8
7
  } from '../../../../../libs/data-access/gn4/src'
9
8
  import { CommonModule } from '@angular/common'
10
9
  import { SourceLabelComponent } from './source-label/source-label.component'
@@ -19,7 +19,7 @@
19
19
  [showContent]="!!organisation.name"
20
20
  >
21
21
  <gn-ui-organisation-preview
22
- [organisation]="organisation"
22
+ [organization]="organisation"
23
23
  [organisationUrl]="getOrganisationUrl(organisation)"
24
24
  (clickedOrganisation)="orgSelect.emit($event)"
25
25
  ></gn-ui-organisation-preview>
@@ -10,10 +10,10 @@ import {
10
10
  import { Organization } from '../../../../../../libs/common/domain/src/lib/model/record'
11
11
  import { BehaviorSubject, combineLatest, Observable } from 'rxjs'
12
12
  import { map, startWith, tap } from 'rxjs/operators'
13
- import { ORGANIZATION_URL_TOKEN } from '../feature-catalog.module'
14
13
  import { OrganizationsServiceInterface } from '../../../../../../libs/common/domain/src/lib/organizations.service.interface'
15
14
  import { SortByField } from '../../../../../../libs/common/domain/src/lib/model/search'
16
15
  import { createFuzzyFilter } from '../../../../../../libs/util/shared/src'
16
+ import { ORGANIZATION_PAGE_URL_TOKEN } from '../organization-url.token'
17
17
 
18
18
  @Component({
19
19
  selector: 'gn-ui-organisations',
@@ -28,7 +28,7 @@ export class OrganisationsComponent {
28
28
  constructor(
29
29
  private organisationsService: OrganizationsServiceInterface,
30
30
  @Optional()
31
- @Inject(ORGANIZATION_URL_TOKEN)
31
+ @Inject(ORGANIZATION_PAGE_URL_TOKEN)
32
32
  private urlTemplate: string
33
33
  ) {}
34
34
 
@@ -0,0 +1,6 @@
1
+ import { InjectionToken } from '@angular/core'
2
+
3
+ // expects the replacement key ${name}
4
+ export const ORGANIZATION_PAGE_URL_TOKEN = new InjectionToken<string>(
5
+ 'organization-page-url-token'
6
+ )
@@ -1,18 +1,16 @@
1
1
  import { Injectable } from '@angular/core'
2
- import { Observable, of } from 'rxjs'
3
- import { catchError, shareReplay } from 'rxjs/operators'
2
+ import { Observable, of, switchMap } from 'rxjs'
3
+ import { shareReplay } from 'rxjs/operators'
4
4
  import { RecordsRepositoryInterface } from '../../../../../../libs/common/domain/src/lib/repository/records-repository.interface'
5
5
 
6
6
  @Injectable({
7
7
  providedIn: 'root',
8
8
  })
9
9
  export class RecordsService {
10
- recordsCount$: Observable<number> = this.recordsRepository
11
- .getMatchesCount({})
12
- .pipe(
13
- shareReplay(1),
14
- catchError(() => of(0))
15
- )
10
+ recordsCount$: Observable<number> = of(true).pipe(
11
+ switchMap(() => this.recordsRepository.getMatchesCount({})),
12
+ shareReplay(1)
13
+ )
16
14
 
17
15
  constructor(private recordsRepository: RecordsRepositoryInterface) {}
18
16
  }
@@ -12,7 +12,7 @@ import {
12
12
  import { TableViewComponent } from './table-view/table-view.component'
13
13
  import { ChartViewComponent } from './chart-view/chart-view.component'
14
14
  import { TranslateModule } from '@ngx-translate/core'
15
- import { UiWidgetsModule } from '../../../../../libs/ui/widgets/src'
15
+ import { PopupAlertComponent, UiWidgetsModule } from '../../../../../libs/ui/widgets/src'
16
16
  import { UiInputsModule } from '../../../../../libs/ui/inputs/src'
17
17
 
18
18
  @NgModule({
@@ -26,6 +26,7 @@ import { UiInputsModule } from '../../../../../libs/ui/inputs/src'
26
26
  TranslateModule,
27
27
  ChartComponent,
28
28
  UiInputsModule,
29
+ PopupAlertComponent,
29
30
  ],
30
31
  declarations: [
31
32
  GeoTableViewComponent,
@@ -26,3 +26,5 @@ export const saveRecordFailure = createAction(
26
26
  '[Editor] Save record failure',
27
27
  props<{ error: SaveRecordError }>()
28
28
  )
29
+
30
+ export const draftSaveSuccess = createAction('[Editor] Draft save success')
@@ -5,7 +5,11 @@ import { catchError, map, switchMap } from 'rxjs/operators'
5
5
  import * as EditorActions from './editor.actions'
6
6
  import { EditorService } from '../services/editor.service'
7
7
  import { Store } from '@ngrx/store'
8
- import { selectRecord, selectRecordFieldsConfig } from './editor.selectors'
8
+ import {
9
+ selectRecord,
10
+ selectRecordAlreadySavedOnce,
11
+ selectRecordFieldsConfig,
12
+ } from './editor.selectors'
9
13
  import { RecordsRepositoryInterface } from '../../../../../../libs/common/domain/src/lib/repository/records-repository.interface'
10
14
 
11
15
  @Injectable()
@@ -20,28 +24,31 @@ export class EditorEffects {
20
24
  ofType(EditorActions.saveRecord),
21
25
  withLatestFrom(
22
26
  this.store.select(selectRecord),
23
- this.store.select(selectRecordFieldsConfig)
27
+ this.store.select(selectRecordFieldsConfig),
28
+ this.store.select(selectRecordAlreadySavedOnce)
24
29
  ),
25
- switchMap(([, record, fieldsConfig]) =>
26
- this.editorService.saveRecord(record, fieldsConfig).pipe(
27
- switchMap(([record, recordSource]) =>
28
- of(
29
- EditorActions.saveRecordSuccess(),
30
- EditorActions.openRecord({
31
- record,
32
- alreadySavedOnce: true,
33
- recordSource,
34
- })
35
- )
36
- ),
37
- catchError((error) =>
38
- of(
39
- EditorActions.saveRecordFailure({
40
- error: error.message,
41
- })
30
+ switchMap(([, record, fieldsConfig, alreadySavedOnce]) =>
31
+ this.editorService
32
+ .saveRecord(record, fieldsConfig, !alreadySavedOnce)
33
+ .pipe(
34
+ switchMap(([record, recordSource]) =>
35
+ of(
36
+ EditorActions.saveRecordSuccess(),
37
+ EditorActions.openRecord({
38
+ record,
39
+ alreadySavedOnce: true,
40
+ recordSource,
41
+ })
42
+ )
43
+ ),
44
+ catchError((error) =>
45
+ of(
46
+ EditorActions.saveRecordFailure({
47
+ error: error.message,
48
+ })
49
+ )
42
50
  )
43
51
  )
44
- )
45
52
  )
46
53
  )
47
54
  )
@@ -53,15 +60,14 @@ export class EditorEffects {
53
60
  )
54
61
  )
55
62
 
56
- saveRecordDraft$ = createEffect(
57
- () =>
58
- this.actions$.pipe(
59
- ofType(EditorActions.updateRecordField),
60
- debounceTime(1000),
61
- withLatestFrom(this.store.select(selectRecord)),
62
- switchMap(([, record]) => this.editorService.saveRecordAsDraft(record))
63
- ),
64
- { dispatch: false }
63
+ saveRecordDraft$ = createEffect(() =>
64
+ this.actions$.pipe(
65
+ ofType(EditorActions.updateRecordField),
66
+ debounceTime(1000),
67
+ withLatestFrom(this.store.select(selectRecord)),
68
+ switchMap(([, record]) => this.editorService.saveRecordAsDraft(record)),
69
+ map(() => EditorActions.draftSaveSuccess())
70
+ )
65
71
  )
66
72
 
67
73
  checkHasChangesOnOpen$ = createEffect(() =>
@@ -26,6 +26,7 @@ export class EditorFacade {
26
26
  select(EditorSelectors.selectRecordChangedSinceSave)
27
27
  )
28
28
  recordFields$ = this.store.pipe(select(EditorSelectors.selectRecordFields))
29
+ draftSaveSuccess$ = this.actions$.pipe(ofType(EditorActions.draftSaveSuccess))
29
30
 
30
31
  openRecord(
31
32
  record: CatalogRecord,
@@ -44,6 +44,6 @@ export const selectRecordFields = createSelector(
44
44
  (state: EditorState) =>
45
45
  state.fieldsConfig.map((fieldConfig) => ({
46
46
  config: fieldConfig,
47
- value: state.record?.[fieldConfig.model] || null,
47
+ value: state.record?.[fieldConfig.model] ?? null,
48
48
  }))
49
49
  )
@@ -0,0 +1,19 @@
1
+ <div class="flex flex-col gap-3">
2
+ <gn-ui-autocomplete
3
+ [placeholder]="'Search for keywords in all thesaurus'"
4
+ [displayWithFn]="displayWithFn"
5
+ [action]="autoCompleteAction"
6
+ (itemSelected)="handleItemSelection($event)"
7
+ [clearOnSelection]="true"
8
+ [minCharacterCount]="0"
9
+ [allowSubmit]="false"
10
+ ></gn-ui-autocomplete>
11
+ <div class="flex gap-2 flex-wrap">
12
+ <gn-ui-badge
13
+ *ngFor="let keyword of control.value; let index = index"
14
+ [removable]="true"
15
+ (badgeRemoveClicked)="removeKeyword(index)"
16
+ >{{ keyword.label }}</gn-ui-badge
17
+ >
18
+ </div>
19
+ </div>