geonetwork-ui 2.2.0-dev.e3947702 → 2.2.0-dev.ecc0ab67

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 (227) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +42 -51
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +4 -3
  3. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/converter.mjs +16 -11
  4. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +23 -16
  5. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +21 -18
  6. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +10 -3
  7. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +14 -5
  8. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +33 -8
  9. package/esm2022/libs/api/repository/src/lib/gn4/selection/selection.service.mjs +13 -26
  10. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  11. package/esm2022/libs/common/domain/src/lib/model/search/aggregation.model.mjs +1 -1
  12. package/esm2022/libs/common/domain/src/lib/model/search/field.model.mjs +2 -0
  13. package/esm2022/libs/common/domain/src/lib/model/search/filter.model.mjs +1 -1
  14. package/esm2022/libs/common/domain/src/lib/model/search/index.mjs +2 -1
  15. package/esm2022/libs/common/domain/src/lib/model/search/search.model.mjs +1 -1
  16. package/esm2022/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.mjs +1 -1
  17. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  18. package/esm2022/libs/feature/catalog/src/lib/my-org/my-org.service.mjs +4 -10
  19. package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +2 -2
  20. package/esm2022/libs/feature/search/src/index.mjs +4 -1
  21. package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +1 -1
  22. package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +2 -6
  23. package/esm2022/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.mjs +1 -1
  24. package/esm2022/libs/feature/search/src/lib/filter-geometry.token.mjs +4 -0
  25. package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +7 -3
  26. package/esm2022/libs/feature/search/src/lib/record-url.token.mjs +4 -0
  27. package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +2 -2
  28. package/esm2022/libs/feature/search/src/lib/results-table/results-table.component.mjs +128 -0
  29. package/esm2022/libs/feature/search/src/lib/state/effects.mjs +6 -4
  30. package/esm2022/libs/feature/search/src/lib/state/search.facade.mjs +3 -2
  31. package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +41 -26
  32. package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +11 -9
  33. package/esm2022/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.mjs +3 -3
  34. package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +2 -2
  35. package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +3 -3
  36. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +35 -22
  37. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +2 -3
  38. package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +9 -6
  39. package/esm2022/libs/ui/inputs/src/index.mjs +2 -1
  40. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +3 -3
  41. package/esm2022/libs/ui/inputs/src/lib/checkbox/checkbox.component.mjs +3 -3
  42. package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +3 -3
  43. package/esm2022/libs/ui/inputs/src/lib/editable-label/editable-label.directive.mjs +3 -2
  44. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +5 -5
  45. package/esm2022/libs/ui/layout/src/index.mjs +3 -1
  46. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.mjs +36 -0
  47. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +37 -0
  48. package/esm2022/libs/ui/search/src/index.mjs +1 -2
  49. package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +9 -10
  50. package/esm2022/libs/util/i18n/src/index.mjs +1 -2
  51. package/esm2022/translations/de.json +6 -4
  52. package/esm2022/translations/en.json +9 -7
  53. package/esm2022/translations/es.json +6 -4
  54. package/esm2022/translations/fr.json +9 -7
  55. package/esm2022/translations/it.json +8 -6
  56. package/esm2022/translations/nl.json +6 -4
  57. package/esm2022/translations/pt.json +6 -4
  58. package/fesm2022/geonetwork-ui.mjs +511 -525
  59. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  60. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts +0 -1
  61. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  62. package/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.d.ts.map +1 -1
  63. package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts.map +1 -1
  64. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +5 -4
  65. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  66. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +3 -2
  67. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  68. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts.map +1 -1
  69. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts +1 -1
  70. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
  71. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +9 -2
  72. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  73. package/libs/api/repository/src/lib/gn4/selection/selection.service.d.ts +4 -5
  74. package/libs/api/repository/src/lib/gn4/selection/selection.service.d.ts.map +1 -1
  75. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +5 -10
  76. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  77. package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts +1 -1
  78. package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts.map +1 -1
  79. package/libs/common/domain/src/lib/model/search/field.model.d.ts +2 -0
  80. package/libs/common/domain/src/lib/model/search/field.model.d.ts.map +1 -0
  81. package/libs/common/domain/src/lib/model/search/filter.model.d.ts +1 -1
  82. package/libs/common/domain/src/lib/model/search/filter.model.d.ts.map +1 -1
  83. package/libs/common/domain/src/lib/model/search/index.d.ts +1 -0
  84. package/libs/common/domain/src/lib/model/search/index.d.ts.map +1 -1
  85. package/libs/common/domain/src/lib/model/search/search.model.d.ts +2 -3
  86. package/libs/common/domain/src/lib/model/search/search.model.d.ts.map +1 -1
  87. package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts +1 -0
  88. package/libs/common/domain/src/lib/model/thesaurus/thesaurus.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/feature/catalog/src/lib/my-org/my-org.service.d.ts +0 -1
  92. package/libs/feature/catalog/src/lib/my-org/my-org.service.d.ts.map +1 -1
  93. package/libs/feature/search/src/index.d.ts +3 -0
  94. package/libs/feature/search/src/index.d.ts.map +1 -1
  95. package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts +3 -3
  96. package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts.map +1 -1
  97. package/libs/feature/search/src/lib/feature-search.module.d.ts +0 -4
  98. package/libs/feature/search/src/lib/feature-search.module.d.ts.map +1 -1
  99. package/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.d.ts +3 -2
  100. package/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.d.ts.map +1 -1
  101. package/libs/feature/search/src/lib/filter-geometry.token.d.ts +4 -0
  102. package/libs/feature/search/src/lib/filter-geometry.token.d.ts.map +1 -0
  103. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +1 -1
  104. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
  105. package/libs/feature/search/src/lib/record-url.token.d.ts +3 -0
  106. package/libs/feature/search/src/lib/record-url.token.d.ts.map +1 -0
  107. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts +33 -0
  108. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts.map +1 -0
  109. package/libs/feature/search/src/lib/state/effects.d.ts.map +1 -1
  110. package/libs/feature/search/src/lib/state/search.facade.d.ts +1 -1
  111. package/libs/feature/search/src/lib/state/search.facade.d.ts.map +1 -1
  112. package/libs/feature/search/src/lib/utils/service/fields.d.ts +21 -8
  113. package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
  114. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
  115. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +7 -3
  116. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
  117. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  118. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts +3 -1
  119. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts.map +1 -1
  120. package/libs/ui/inputs/src/index.d.ts +1 -0
  121. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  122. package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts +1 -1
  123. package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts.map +1 -1
  124. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +18 -18
  125. package/libs/ui/layout/src/index.d.ts +2 -0
  126. package/libs/ui/layout/src/index.d.ts.map +1 -1
  127. package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts +14 -0
  128. package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts.map +1 -0
  129. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +15 -0
  130. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -0
  131. package/libs/ui/search/src/index.d.ts +0 -1
  132. package/libs/ui/search/src/index.d.ts.map +1 -1
  133. package/libs/ui/search/src/lib/ui-search.module.d.ts +15 -15
  134. package/libs/ui/search/src/lib/ui-search.module.d.ts.map +1 -1
  135. package/libs/util/i18n/src/index.d.ts +0 -1
  136. package/libs/util/i18n/src/index.d.ts.map +1 -1
  137. package/package.json +2 -2
  138. package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +6 -6
  139. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +5 -3
  140. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +22 -4
  141. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +69 -65
  142. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.ts +3 -2
  143. package/src/libs/api/metadata-converter/src/lib/iso19139/converter.ts +19 -12
  144. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +62 -43
  145. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +91 -59
  146. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +22 -2
  147. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +15 -4
  148. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +47 -8
  149. package/src/libs/api/repository/src/lib/gn4/selection/selection.service.ts +14 -38
  150. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +5 -11
  151. package/src/libs/common/domain/src/lib/model/search/aggregation.model.ts +1 -1
  152. package/src/libs/common/domain/src/lib/model/search/field.model.ts +1 -0
  153. package/src/libs/common/domain/src/lib/model/search/filter.model.ts +1 -1
  154. package/src/libs/common/domain/src/lib/model/search/index.ts +1 -0
  155. package/src/libs/common/domain/src/lib/model/search/search.model.ts +2 -2
  156. package/src/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.ts +1 -0
  157. package/src/libs/common/domain/src/lib/model/user/index.ts +1 -0
  158. package/src/libs/common/domain/src/lib/platform.service.interface.ts +1 -4
  159. package/src/libs/common/fixtures/src/lib/gn4/groups.fixtures.ts +1 -1
  160. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +6 -2
  161. package/src/libs/feature/catalog/src/lib/my-org/my-org.service.ts +4 -16
  162. package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +1 -1
  163. package/src/libs/feature/search/src/index.ts +3 -0
  164. package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.ts +1 -1
  165. package/src/libs/feature/search/src/lib/feature-search.module.ts +1 -10
  166. package/src/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.ts +4 -4
  167. package/src/libs/feature/search/src/lib/filter-geometry.token.ts +7 -0
  168. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +9 -3
  169. package/src/libs/feature/search/src/lib/record-url.token.ts +4 -0
  170. package/src/libs/feature/search/src/lib/results-list/results-list.container.component.ts +1 -1
  171. package/src/libs/feature/search/src/lib/results-table/results-table.component.css +0 -0
  172. package/src/libs/feature/search/src/lib/results-table/results-table.component.html +112 -0
  173. package/src/libs/feature/search/src/lib/results-table/results-table.component.ts +164 -0
  174. package/src/libs/feature/search/src/lib/state/effects.ts +5 -4
  175. package/src/libs/feature/search/src/lib/state/search.facade.ts +2 -1
  176. package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +21 -16
  177. package/src/libs/feature/search/src/lib/utils/service/fields.ts +43 -34
  178. package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.html +3 -2
  179. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.css +2 -2
  180. package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +1 -1
  181. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +45 -18
  182. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +31 -12
  183. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +1 -2
  184. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.html +5 -5
  185. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +12 -4
  186. package/src/libs/ui/inputs/src/index.ts +1 -0
  187. package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.html +1 -1
  188. package/src/libs/ui/inputs/src/lib/checkbox/checkbox.component.html +0 -1
  189. package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.html +1 -1
  190. package/src/libs/ui/inputs/src/lib/editable-label/editable-label.directive.ts +1 -0
  191. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +1 -1
  192. package/src/libs/ui/layout/src/index.ts +2 -0
  193. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.css +0 -0
  194. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.html +1 -0
  195. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.ts +33 -0
  196. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.css +15 -0
  197. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +54 -0
  198. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +42 -0
  199. package/src/libs/ui/search/src/index.ts +0 -1
  200. package/src/libs/ui/search/src/lib/ui-search.module.ts +2 -3
  201. package/src/libs/util/i18n/src/index.ts +0 -1
  202. package/translations/de.json +6 -4
  203. package/translations/en.json +9 -7
  204. package/translations/es.json +6 -4
  205. package/translations/fr.json +9 -7
  206. package/translations/it.json +8 -6
  207. package/translations/nl.json +6 -4
  208. package/translations/pt.json +6 -4
  209. package/translations/sk.json +6 -4
  210. package/esm2022/libs/ui/search/src/lib/record-table/record-table.component.mjs +0 -145
  211. package/esm2022/libs/util/i18n/src/lib/testing/test.translate.loader.mjs +0 -24
  212. package/esm2022/libs/util/i18n/src/lib/testing/test.translate.module.mjs +0 -109
  213. package/esm2022/libs/util/i18n/src/lib/testing/translations.model.mjs +0 -6
  214. package/libs/ui/search/src/lib/record-table/record-table.component.d.ts +0 -31
  215. package/libs/ui/search/src/lib/record-table/record-table.component.d.ts.map +0 -1
  216. package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts +0 -17
  217. package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts.map +0 -1
  218. package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts +0 -131
  219. package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts.map +0 -1
  220. package/libs/util/i18n/src/lib/testing/translations.model.d.ts +0 -21
  221. package/libs/util/i18n/src/lib/testing/translations.model.d.ts.map +0 -1
  222. package/src/libs/ui/search/src/lib/record-table/record-table.component.css +0 -7
  223. package/src/libs/ui/search/src/lib/record-table/record-table.component.html +0 -215
  224. package/src/libs/ui/search/src/lib/record-table/record-table.component.ts +0 -149
  225. package/src/libs/util/i18n/src/lib/testing/test.translate.loader.ts +0 -26
  226. package/src/libs/util/i18n/src/lib/testing/test.translate.module.ts +0 -235
  227. package/src/libs/util/i18n/src/lib/testing/translations.model.ts +0 -28
@@ -22,18 +22,42 @@ export class MetadataInfoComponent {
22
22
  get hasUsage() {
23
23
  return (
24
24
  this.metadata.extras?.isOpenData === true ||
25
- this.metadata.useLimitations?.length ||
26
- this.metadata.accessConstraints?.length
25
+ (this.metadata.legalConstraints?.length > 0 &&
26
+ this.legalConstraints.length > 0) ||
27
+ (this.metadata.otherConstraints?.length > 0 &&
28
+ this.otherConstraints.length > 0) ||
29
+ (this.metadata.licenses?.length > 0 && this.licenses.length > 0)
27
30
  )
28
31
  }
29
32
 
30
- get usages(): string[] {
33
+ get legalConstraints() {
31
34
  let array = []
32
- if (this.metadata.useLimitations?.length) {
33
- array = array.concat(this.metadata.useLimitations)
35
+ if (this.metadata.legalConstraints?.length) {
36
+ array = array.concat(
37
+ this.metadata.legalConstraints.filter((c) => c.text).map((c) => c.text)
38
+ )
34
39
  }
35
- if (this.metadata.accessConstraints?.length) {
36
- array = array.concat(this.metadata.accessConstraints.map((c) => c.text))
40
+ return array
41
+ }
42
+
43
+ get otherConstraints() {
44
+ let array = []
45
+ if (this.metadata.otherConstraints?.length) {
46
+ array = array.concat(
47
+ this.metadata.otherConstraints.filter((c) => c.text).map((c) => c.text)
48
+ )
49
+ }
50
+ return array
51
+ }
52
+
53
+ get licenses(): { text: string; url: string }[] {
54
+ let array = []
55
+ if (this.metadata.licenses?.length) {
56
+ array = array.concat(
57
+ this.metadata.licenses
58
+ .filter((c) => c.text)
59
+ .map((c) => ({ text: c.text, url: c.url }))
60
+ )
37
61
  }
38
62
  return array
39
63
  }
@@ -56,9 +80,4 @@ export class MetadataInfoComponent {
56
80
  onKeywordClick(keyword: string) {
57
81
  this.keyword.emit(keyword)
58
82
  }
59
-
60
- copyText() {
61
- navigator.clipboard.writeText(this.metadata.uniqueIdentifier)
62
- ;(event.target as HTMLElement).blur()
63
- }
64
83
  }
@@ -32,8 +32,7 @@ export class MetadataQualityComponent implements OnChanges {
32
32
 
33
33
  get calculatedQualityScore(): number {
34
34
  return Math.round(
35
- (this.items.filter(({ value }) => value === true).length * 100) /
36
- this.items.length
35
+ (this.items.filter(({ value }) => value).length * 100) / this.items.length
37
36
  )
38
37
  }
39
38
 
@@ -19,8 +19,8 @@
19
19
  <div class="flex flex-row items-center gap-2">
20
20
  <gn-ui-text-input
21
21
  class="mr-2 w-20"
22
- (input)="setLimit($event.target.value)"
23
- [value]="limit$ | async"
22
+ (valueChange)="setLimit($event)"
23
+ [value]="displayLimit$ | async"
24
24
  hint=""
25
25
  >
26
26
  </gn-ui-text-input>
@@ -28,8 +28,8 @@
28
28
  <input
29
29
  class="mr-2 cursor-pointer"
30
30
  type="checkbox"
31
- [checked]="(limit$ | async) === ''"
32
- (change)="setLimit('')"
31
+ [checked]="noLimitChecked$ | async"
32
+ (change)="setLimit('-1')"
33
33
  />
34
34
  <span class="text-sm" translate
35
35
  >record.metadata.api.form.limit.all</span
@@ -42,7 +42,7 @@
42
42
  <gn-ui-text-input
43
43
  class="w-20"
44
44
  [value]="offset$ | async"
45
- (input)="setOffset($event.target.value)"
45
+ (valueChange)="setOffset($event)"
46
46
  hint=""
47
47
  >
48
48
  </gn-ui-text-input>
@@ -4,7 +4,7 @@ import { BehaviorSubject, combineLatest, map } from 'rxjs'
4
4
 
5
5
  const DEFAULT_PARAMS = {
6
6
  OFFSET: '',
7
- LIMIT: '',
7
+ LIMIT: '-1',
8
8
  FORMAT: 'json',
9
9
  }
10
10
  @Component({
@@ -44,17 +44,25 @@ export class RecordApiFormComponent {
44
44
  return outputUrl
45
45
  })
46
46
  )
47
+ noLimitChecked$ = this.limit$.pipe(
48
+ map((limit) => limit === '-1' || limit === '')
49
+ )
50
+
51
+ displayLimit$ = this.limit$.pipe(
52
+ map((limit) => (limit !== '-1' ? limit : ''))
53
+ )
47
54
 
48
55
  setOffset(value: string) {
49
56
  this.offset$.next(value)
50
57
  }
51
58
 
52
59
  setLimit(value: string) {
53
- this.limit$.next(value)
60
+ const newLimit = value === '' ? '-1' : value
61
+ this.limit$.next(newLimit)
54
62
  }
55
63
 
56
- setFormat(value: string) {
57
- this.format$.next(value)
64
+ setFormat(value: string | unknown) {
65
+ this.format$.next(String(value))
58
66
  }
59
67
 
60
68
  resetUrl() {
@@ -19,3 +19,4 @@ export * from './lib/viewport-intersector/viewport-intersector.component'
19
19
  export * from './lib/checkbox/checkbox.component'
20
20
  export * from './lib/search-input/search-input.component'
21
21
  export * from './lib/date-range-picker/date-range-picker.component'
22
+ export * from './lib/editable-label/editable-label.directive'
@@ -6,7 +6,7 @@
6
6
  [placeholder]="placeholder"
7
7
  [formControl]="control"
8
8
  [matAutocomplete]="auto"
9
- (keyup.enter)="handleEnter($event.target.value)"
9
+ (keyup.enter)="handleEnter(searchInput.value)"
10
10
  />
11
11
  <button
12
12
  type="button"
@@ -1,7 +1,6 @@
1
1
  <mat-checkbox
2
2
  class="cursor-pointer"
3
3
  [class]="classList"
4
- type="checkbox"
5
4
  [checked]="checked"
6
5
  [indeterminate]="indeterminate"
7
6
  (click)="handleClick($event)"
@@ -113,7 +113,7 @@
113
113
  type="checkbox"
114
114
  #checkBox
115
115
  [checked]="isSelected(choice)"
116
- (change)="select(choice, $event.target.checked)"
116
+ (change)="select(choice, checkBox.checked)"
117
117
  />
118
118
  <span class="ml-[8px] text-[14px] truncate">
119
119
  {{ choice.label }}
@@ -10,6 +10,7 @@ import {
10
10
 
11
11
  @Directive({
12
12
  selector: '[gnUiEditableLabel]',
13
+ standalone: true,
13
14
  })
14
15
  export class EditableLabelDirective implements AfterViewInit {
15
16
  @Output() editableLabelChanged = new EventEmitter<string>()
@@ -69,7 +69,6 @@ import { EditableLabelDirective } from './editable-label/editable-label.directiv
69
69
  CheckboxComponent,
70
70
  SearchInputComponent,
71
71
  DateRangePickerComponent,
72
- EditableLabelDirective,
73
72
  ],
74
73
  imports: [
75
74
  CommonModule,
@@ -89,6 +88,7 @@ import { EditableLabelDirective } from './editable-label/editable-label.directiv
89
88
  MatInputModule,
90
89
  MatDatepickerModule,
91
90
  MatNativeDateModule,
91
+ EditableLabelDirective,
92
92
  ],
93
93
  exports: [
94
94
  DropdownSelectorComponent,
@@ -4,3 +4,5 @@ export * from './lib/carousel/carousel.component'
4
4
  export * from './lib/expandable-panel/expandable-panel.component'
5
5
  export * from './lib/sticky-header/sticky-header.component'
6
6
  export * from './lib/expandable-panel-button/expandable-panel-button.component'
7
+ export * from './lib/interactive-table/interactive-table.component'
8
+ export * from './lib/interactive-table/interactive-table-column/interactive-table-column.component'
@@ -0,0 +1,33 @@
1
+ import {
2
+ ChangeDetectionStrategy,
3
+ Component,
4
+ ContentChild,
5
+ EventEmitter,
6
+ Input,
7
+ Output,
8
+ TemplateRef,
9
+ } from '@angular/core'
10
+ import { CommonModule } from '@angular/common'
11
+
12
+ @Component({
13
+ selector: 'gn-ui-interactive-table-column',
14
+ standalone: true,
15
+ imports: [CommonModule],
16
+ templateUrl: './interactive-table-column.component.html',
17
+ styleUrls: ['./interactive-table-column.component.css'],
18
+ changeDetection: ChangeDetectionStrategy.OnPush,
19
+ })
20
+ export class InteractiveTableColumnComponent {
21
+ @ContentChild('header') header: TemplateRef<unknown>
22
+ @ContentChild('cell') cell: TemplateRef<unknown>
23
+
24
+ @Input() grow = false
25
+ @Input() sortable = false
26
+ @Input() activeSort: 'asc' | 'desc' | null = null
27
+ @Output() sortChange = new EventEmitter<'asc' | 'desc'>()
28
+
29
+ handleSortChange() {
30
+ this.activeSort = this.activeSort === 'asc' ? 'desc' : 'asc'
31
+ this.sortChange.emit(this.activeSort)
32
+ }
33
+ }
@@ -0,0 +1,15 @@
1
+ .sort-button mat-icon {
2
+ padding: 0;
3
+ margin: 0;
4
+ height: 8px;
5
+ line-height: 8px;
6
+ font-size: 18px;
7
+ }
8
+
9
+ .table-header-cell {
10
+ @apply text-gray-700 px-4 py-5 flex items-center truncate bg-white;
11
+ }
12
+
13
+ button.table-header-cell {
14
+ @apply transition-colors duration-75 hover:text-main hover:bg-gray-50 focus:text-main focus:bg-gray-50;
15
+ }
@@ -0,0 +1,54 @@
1
+ <div class="grid w-full" [ngStyle]="gridStyle">
2
+ <div class="contents">
3
+ <ng-container *ngFor="let column of columns">
4
+ <button
5
+ *ngIf="column.sortable"
6
+ type="button"
7
+ class="table-header-cell"
8
+ (click)="column.sortable && column.handleSortChange()"
9
+ >
10
+ <ng-container *ngTemplateOutlet="column.header"></ng-container>
11
+ <div class="sort-button flex flex-col" *ngIf="column.sortable">
12
+ <mat-icon
13
+ class="material-symbols-outlined text-gray-600"
14
+ [ngClass]="{ 'text-main': column.activeSort === 'asc' }"
15
+ >expand_less</mat-icon
16
+ >
17
+ <mat-icon
18
+ class="material-symbols-outlined text-gray-600"
19
+ [ngClass]="{ 'text-main': column.activeSort === 'desc' }"
20
+ >expand_more</mat-icon
21
+ >
22
+ </div>
23
+ </button>
24
+ <div *ngIf="!column.sortable" class="table-header-cell">
25
+ <ng-container *ngTemplateOutlet="column.header"></ng-container>
26
+ </div>
27
+ </ng-container>
28
+ </div>
29
+ <div
30
+ class="contents text-gray-900 cursor-pointer group"
31
+ *ngFor="let item of items"
32
+ (click)="handleRowClick(item)"
33
+ >
34
+ <div
35
+ class="relative h-0"
36
+ [ngStyle]="{ 'grid-column': 'span ' + this.columns.length }"
37
+ >
38
+ <!-- this element is only used in keyboard navigation -->
39
+ <button
40
+ type="button"
41
+ class="absolute inset-x-0 h-[50px] bg-transparent pointer-events-none"
42
+ ></button>
43
+ </div>
44
+ <ng-container *ngFor="let column of columns">
45
+ <div
46
+ class="table-row-cell px-4 py-3 flex items-center bg-white transition-colors duration-75 truncate group-hover:text-main group-hover:bg-gray-50 border-b border-gray-200"
47
+ >
48
+ <ng-container
49
+ *ngTemplateOutlet="column.cell; context: { $implicit: item }"
50
+ ></ng-container>
51
+ </div>
52
+ </ng-container>
53
+ </div>
54
+ </div>
@@ -0,0 +1,42 @@
1
+ import {
2
+ ChangeDetectionStrategy,
3
+ Component,
4
+ ContentChildren,
5
+ EventEmitter,
6
+ Input,
7
+ Output,
8
+ QueryList,
9
+ } from '@angular/core'
10
+ import { InteractiveTableColumnComponent } from './interactive-table-column/interactive-table-column.component'
11
+ import { CommonModule } from '@angular/common'
12
+ import { MatIconModule } from '@angular/material/icon'
13
+
14
+ @Component({
15
+ selector: 'gn-ui-interactive-table',
16
+ templateUrl: './interactive-table.component.html',
17
+ styleUrls: ['./interactive-table.component.css'],
18
+ changeDetection: ChangeDetectionStrategy.OnPush,
19
+ standalone: true,
20
+ imports: [CommonModule, InteractiveTableColumnComponent, MatIconModule],
21
+ })
22
+ export class InteractiveTableComponent {
23
+ @ContentChildren(InteractiveTableColumnComponent)
24
+ columns: QueryList<InteractiveTableColumnComponent>
25
+
26
+ @Input() items: unknown[] = []
27
+ @Output() itemClick = new EventEmitter<unknown>()
28
+
29
+ get gridStyle() {
30
+ return {
31
+ 'grid-template-columns': this.columns
32
+ .map((column) =>
33
+ column.grow ? `minmax(0px,1fr)` : `minmax(0px,max-content)`
34
+ )
35
+ .join(' '),
36
+ }
37
+ }
38
+
39
+ handleRowClick(item: unknown) {
40
+ this.itemClick.emit(item)
41
+ }
42
+ }
@@ -14,7 +14,6 @@ export * from './lib/record-preview-card/record-preview-card.component'
14
14
  export * from './lib/record-preview-list/record-preview-list.component'
15
15
  export * from './lib/record-preview-text/record-preview-text.component'
16
16
  export * from './lib/record-preview-title/record-preview-title.component'
17
- export * from './lib/record-table/record-table.component'
18
17
  export * from './lib/record-metric/record-metric.component'
19
18
  export * from './lib/results-list-item/results-list-item.component'
20
19
  export * from './lib/results-hits-number/results-hits-number.component'
@@ -24,10 +24,10 @@ import { ResultsListItemComponent } from './results-list-item/results-list-item.
24
24
  import { UiWidgetsModule } from '../../../../../libs/ui/widgets/src'
25
25
  import { UiElementsModule } from '../../../../../libs/ui/elements/src'
26
26
  import { RecordPreviewFeedComponent } from './record-preview-feed/record-preview-feed.component'
27
- import { RecordTableComponent } from './record-table/record-table.component'
28
27
  import { CommonModule } from '@angular/common'
29
28
  import { UiInputsModule } from '../../../../../libs/ui/inputs/src'
30
29
  import { MatCheckboxModule } from '@angular/material/checkbox'
30
+ import { InteractiveTableComponent } from '../../../../../libs/ui/layout/src'
31
31
 
32
32
  @NgModule({
33
33
  declarations: [
@@ -42,7 +42,6 @@ import { MatCheckboxModule } from '@angular/material/checkbox'
42
42
  ResultsListItemComponent,
43
43
  RecordPreviewFeedComponent,
44
44
  RecordPreviewRowComponent,
45
- RecordTableComponent,
46
45
  ],
47
46
  imports: [
48
47
  CommonModule,
@@ -59,6 +58,7 @@ import { MatCheckboxModule } from '@angular/material/checkbox'
59
58
  MatIconModule,
60
59
  MatCheckboxModule,
61
60
  RouterLink,
61
+ InteractiveTableComponent,
62
62
  ],
63
63
  exports: [
64
64
  RecordPreviewListComponent,
@@ -72,7 +72,6 @@ import { MatCheckboxModule } from '@angular/material/checkbox'
72
72
  ResultsHitsNumberComponent,
73
73
  RecordPreviewFeedComponent,
74
74
  RecordPreviewRowComponent,
75
- RecordTableComponent,
76
75
  ],
77
76
  providers: [
78
77
  { provide: RESULTS_LAYOUT_CONFIG, useValue: DEFAULT_RESULTS_LAYOUT_CONFIG },
@@ -3,6 +3,5 @@ export * from './lib/i18n.constants'
3
3
  export * from './lib/i18n.interceptor'
4
4
  export * from './lib/lang.service'
5
5
  export * from './lib/file.translate.loader'
6
- export * from './lib/testing/test.translate.module'
7
6
  export * from './lib/embedded.translate.loader'
8
7
  export * from './lib/translate.loader.utils'
@@ -16,20 +16,21 @@
16
16
  "chart.type.line": "Liniendiagramm",
17
17
  "chart.type.lineSmooth": "Geglättes Liniendiagramm",
18
18
  "chart.type.pie": "Kreisdiagramm",
19
+ "dashboard.createRecord": "",
19
20
  "dashboard.labels.mySpace": "Mein Bereich",
20
21
  "dashboard.records.all": "Katalog",
21
22
  "dashboard.records.myDraft": "Meine Entwürfe",
22
23
  "dashboard.records.myLibrary": "Meine Bibliothek",
23
24
  "dashboard.records.myOrg": "Meine Organisation",
24
25
  "dashboard.records.myRecords": "Meine Datensätze",
25
- "dashboard.records.noRecord": "Kein Datensatz für diese Organisation",
26
- "dashboard.records.noUser": "Keine Benutzer für diese Organisation",
27
26
  "dashboard.records.publishedRecords": "{count, plural, =1{veröffentlichter Datensatz} other{veröffentlichte Datensätze}}",
28
27
  "dashboard.records.search": "Suche nach \"{searchText}\"",
29
28
  "dashboard.records.userDetail": "Name",
30
29
  "dashboard.records.userEmail": "E-Mail",
31
30
  "dashboard.records.username": "Benutzername",
32
31
  "dashboard.records.users": "{count, plural, =1{Benutzer} other{Benutzer}}",
32
+ "dashboard.results.listMetadata": "",
33
+ "dashboard.results.listResources": "",
33
34
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Dateiformat-Erkennung",
34
35
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Sammeln von Datensatzinformationen",
35
36
  "datafeeder.analysisProgressBar.illustration.samplingData": "Datenauswahl",
@@ -221,16 +222,15 @@
221
222
  "record.metadata.author": "Autor",
222
223
  "record.metadata.catalog": "Katalog",
223
224
  "record.metadata.contact": "Kontakt",
224
- "record.metadata.createdOn": "Erstellt am",
225
225
  "record.metadata.details": "Technische Informationen",
226
226
  "record.metadata.download": "Downloads",
227
227
  "record.metadata.formats": "Formate",
228
- "record.metadata.isOpenData": "Open Data",
229
228
  "record.metadata.keywords": "Stichworte",
230
229
  "record.metadata.lastUpdate": "Zuletzt aktualisiert am",
231
230
  "record.metadata.links": "Links",
232
231
  "record.metadata.noUsage": "Für diesen Datensatz sind keine Nutzungsbedingungen angegeben.",
233
232
  "record.metadata.origin": "Über die Daten",
233
+ "record.metadata.otherConstraints": "",
234
234
  "record.metadata.owner": "",
235
235
  "record.metadata.preview": "Vorschau",
236
236
  "record.metadata.publications": "Veröffentlichungen",
@@ -254,6 +254,7 @@
254
254
  "record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
255
255
  "record.metadata.related": "Ähnliche Datensätze",
256
256
  "record.metadata.sheet": "Weitere Informationen verfügbar unter:",
257
+ "record.metadata.status": "",
257
258
  "record.metadata.themes": "Kategorien",
258
259
  "record.metadata.title": "Titel",
259
260
  "record.metadata.type": "Geographischer Datensatz",
@@ -291,6 +292,7 @@
291
292
  "search.filters.isSpatial": "Ist räumliche Daten",
292
293
  "search.filters.isSpatial.no": "nicht räumlich",
293
294
  "search.filters.isSpatial.yes": "räumlich",
295
+ "search.filters.keyword": "Schlüsselwort",
294
296
  "search.filters.license": "Lizenz",
295
297
  "search.filters.license.cc-by": "Creative Commons CC-BY",
296
298
  "search.filters.license.cc-by-sa": "Creative Commons CC-BY-SA",
@@ -16,20 +16,21 @@
16
16
  "chart.type.line": "line chart",
17
17
  "chart.type.lineSmooth": "smooth line chart",
18
18
  "chart.type.pie": "pie chart",
19
+ "dashboard.createRecord": "New record",
19
20
  "dashboard.labels.mySpace": "My space",
20
- "dashboard.records.all": "Catalog",
21
+ "dashboard.records.all": "Metadata records",
21
22
  "dashboard.records.myDraft": "My drafts",
22
23
  "dashboard.records.myLibrary": "My library",
23
24
  "dashboard.records.myOrg": "Organization",
24
25
  "dashboard.records.myRecords": "My Records",
25
- "dashboard.records.noRecord": "No record for this organization",
26
- "dashboard.records.noUser": "No users for this organization",
27
26
  "dashboard.records.publishedRecords": "{count, plural, =1{published record} other{published records}}",
28
27
  "dashboard.records.search": "Search for \"{searchText}\"",
29
28
  "dashboard.records.userDetail": "Name",
30
29
  "dashboard.records.userEmail": "Email",
31
30
  "dashboard.records.username": "Username",
32
31
  "dashboard.records.users": "{count, plural, =1{user} other{users}}",
32
+ "dashboard.results.listMetadata": "Show metadata",
33
+ "dashboard.results.listResources": "Show resources",
33
34
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "File format \n detection",
34
35
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Gathering dataset \n information",
35
36
  "datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n data",
@@ -221,16 +222,15 @@
221
222
  "record.metadata.author": "Author",
222
223
  "record.metadata.catalog": "Catalog",
223
224
  "record.metadata.contact": "Contact",
224
- "record.metadata.createdOn": "Created on",
225
225
  "record.metadata.details": "Technical information",
226
226
  "record.metadata.download": "Downloads",
227
227
  "record.metadata.formats": "Formats",
228
- "record.metadata.isOpenData": "Open Data",
229
228
  "record.metadata.keywords": "Keywords",
230
229
  "record.metadata.lastUpdate": "Last updated on",
231
230
  "record.metadata.links": "Links",
232
231
  "record.metadata.noUsage": "No usage conditions specified for this record.",
233
232
  "record.metadata.origin": "About the data",
233
+ "record.metadata.otherConstraints": "Additional Conditions",
234
234
  "record.metadata.owner": "Catalog of origin",
235
235
  "record.metadata.preview": "Preview",
236
236
  "record.metadata.publications": "publications",
@@ -254,14 +254,15 @@
254
254
  "record.metadata.quality.updateFrequency.success": "Update frequency is specified",
255
255
  "record.metadata.related": "Related records",
256
256
  "record.metadata.sheet": "Original metadata",
257
+ "record.metadata.status": "Status",
257
258
  "record.metadata.themes": "Categories",
258
259
  "record.metadata.title": "Title",
259
260
  "record.metadata.type": "Geographical dataset",
260
261
  "record.metadata.uniqueId": "Unique Identifier",
261
262
  "record.metadata.updateFrequency": "Data Update Frequency",
262
263
  "record.metadata.updateStatus": "Data Update Status",
263
- "record.metadata.updatedOn": "Metadata's last update",
264
- "record.metadata.usage": "Usage & constraints",
264
+ "record.metadata.updatedOn": "Last Data Information Update",
265
+ "record.metadata.usage": "License and Conditions",
265
266
  "record.more.details": "Read more",
266
267
  "record.tab.chart": "Chart",
267
268
  "record.tab.data": "Table",
@@ -291,6 +292,7 @@
291
292
  "search.filters.isSpatial": "Is spatial data",
292
293
  "search.filters.isSpatial.no": "non spatial",
293
294
  "search.filters.isSpatial.yes": "spatial",
295
+ "search.filters.keyword": "Keyword",
294
296
  "search.filters.license": "License",
295
297
  "search.filters.license.cc-by": "Creative Commons CC-BY",
296
298
  "search.filters.license.cc-by-sa": "Creative Commons CC-BY-SA",
@@ -16,20 +16,21 @@
16
16
  "chart.type.line": "gráfico de líneas",
17
17
  "chart.type.lineSmooth": "gráfico de líneas suave",
18
18
  "chart.type.pie": "gráfico circular",
19
+ "dashboard.createRecord": "",
19
20
  "dashboard.labels.mySpace": "Mi espacio",
20
21
  "dashboard.records.all": "Catálogo",
21
22
  "dashboard.records.myDraft": "Mis borradores",
22
23
  "dashboard.records.myLibrary": "Mi biblioteca",
23
24
  "dashboard.records.myOrg": "Organización",
24
25
  "dashboard.records.myRecords": "Mis Registros",
25
- "dashboard.records.noRecord": "",
26
- "dashboard.records.noUser": "",
27
26
  "dashboard.records.publishedRecords": "",
28
27
  "dashboard.records.search": "Buscar \"{searchText}\"",
29
28
  "dashboard.records.userDetail": "",
30
29
  "dashboard.records.userEmail": "",
31
30
  "dashboard.records.username": "",
32
31
  "dashboard.records.users": "",
32
+ "dashboard.results.listMetadata": "",
33
+ "dashboard.results.listResources": "",
33
34
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
34
35
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
35
36
  "datafeeder.analysisProgressBar.illustration.samplingData": "",
@@ -221,16 +222,15 @@
221
222
  "record.metadata.author": "",
222
223
  "record.metadata.catalog": "",
223
224
  "record.metadata.contact": "",
224
- "record.metadata.createdOn": "",
225
225
  "record.metadata.details": "",
226
226
  "record.metadata.download": "",
227
227
  "record.metadata.formats": "",
228
- "record.metadata.isOpenData": "",
229
228
  "record.metadata.keywords": "",
230
229
  "record.metadata.lastUpdate": "",
231
230
  "record.metadata.links": "",
232
231
  "record.metadata.noUsage": "",
233
232
  "record.metadata.origin": "",
233
+ "record.metadata.otherConstraints": "",
234
234
  "record.metadata.owner": "",
235
235
  "record.metadata.preview": "",
236
236
  "record.metadata.publications": "",
@@ -254,6 +254,7 @@
254
254
  "record.metadata.quality.updateFrequency.success": "",
255
255
  "record.metadata.related": "",
256
256
  "record.metadata.sheet": "",
257
+ "record.metadata.status": "",
257
258
  "record.metadata.themes": "",
258
259
  "record.metadata.title": "",
259
260
  "record.metadata.type": "",
@@ -291,6 +292,7 @@
291
292
  "search.filters.isSpatial": "",
292
293
  "search.filters.isSpatial.no": "",
293
294
  "search.filters.isSpatial.yes": "",
295
+ "search.filters.keyword": "",
294
296
  "search.filters.license": "",
295
297
  "search.filters.license.cc-by": "",
296
298
  "search.filters.license.cc-by-sa": "",