geonetwork-ui 2.2.0-dev.5b8d393f → 2.2.0-dev.723017a4

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 (194) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/gn4/atomic-operations.mjs +27 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +49 -58
  3. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +5 -4
  4. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
  5. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.mjs +14 -0
  6. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/converter.mjs +20 -17
  7. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +52 -23
  8. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +52 -32
  9. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +10 -3
  10. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +14 -5
  11. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +33 -8
  12. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  13. package/esm2022/libs/common/domain/src/lib/model/search/aggregation.model.mjs +1 -1
  14. package/esm2022/libs/common/domain/src/lib/model/search/field.model.mjs +2 -0
  15. package/esm2022/libs/common/domain/src/lib/model/search/filter.model.mjs +1 -1
  16. package/esm2022/libs/common/domain/src/lib/model/search/index.mjs +2 -1
  17. package/esm2022/libs/common/domain/src/lib/model/search/search.model.mjs +1 -1
  18. package/esm2022/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.mjs +1 -1
  19. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  20. package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +9 -1
  21. package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +2 -2
  22. package/esm2022/libs/feature/search/src/index.mjs +3 -1
  23. package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +2 -6
  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 +3 -4
  29. package/esm2022/libs/feature/search/src/lib/state/effects.mjs +2 -2
  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/markdown-parser/markdown-parser.component.mjs +3 -3
  34. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +35 -22
  35. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +3 -4
  36. package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +9 -6
  37. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +4 -4
  38. package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +3 -3
  39. package/esm2022/libs/ui/inputs/src/lib/text-area/text-area.component.mjs +3 -3
  40. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +6 -6
  41. package/esm2022/libs/util/i18n/src/index.mjs +1 -2
  42. package/esm2022/translations/de.json +7 -5
  43. package/esm2022/translations/en.json +10 -8
  44. package/esm2022/translations/es.json +7 -5
  45. package/esm2022/translations/fr.json +9 -7
  46. package/esm2022/translations/it.json +9 -7
  47. package/esm2022/translations/nl.json +7 -5
  48. package/esm2022/translations/pt.json +7 -5
  49. package/fesm2022/geonetwork-ui.mjs +448 -396
  50. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  51. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts +2 -0
  52. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
  53. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts +0 -1
  54. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  55. package/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.d.ts.map +1 -1
  56. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +3 -5
  57. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  58. package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts +3 -0
  59. package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts.map +1 -0
  60. package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts.map +1 -1
  61. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +6 -6
  62. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  63. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +4 -3
  64. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  65. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts.map +1 -1
  66. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts +1 -1
  67. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
  68. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +9 -2
  69. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  70. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +18 -12
  71. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  72. package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts +1 -1
  73. package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts.map +1 -1
  74. package/libs/common/domain/src/lib/model/search/field.model.d.ts +2 -0
  75. package/libs/common/domain/src/lib/model/search/field.model.d.ts.map +1 -0
  76. package/libs/common/domain/src/lib/model/search/filter.model.d.ts +1 -1
  77. package/libs/common/domain/src/lib/model/search/filter.model.d.ts.map +1 -1
  78. package/libs/common/domain/src/lib/model/search/index.d.ts +1 -0
  79. package/libs/common/domain/src/lib/model/search/index.d.ts.map +1 -1
  80. package/libs/common/domain/src/lib/model/search/search.model.d.ts +1 -1
  81. package/libs/common/domain/src/lib/model/search/search.model.d.ts.map +1 -1
  82. package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts +1 -0
  83. package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts.map +1 -1
  84. package/libs/common/domain/src/lib/platform.service.interface.d.ts +1 -1
  85. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  86. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts +1 -0
  87. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +1 -1
  88. package/libs/feature/search/src/index.d.ts +2 -0
  89. package/libs/feature/search/src/index.d.ts.map +1 -1
  90. package/libs/feature/search/src/lib/feature-search.module.d.ts +0 -4
  91. package/libs/feature/search/src/lib/feature-search.module.d.ts.map +1 -1
  92. package/libs/feature/search/src/lib/filter-geometry.token.d.ts +4 -0
  93. package/libs/feature/search/src/lib/filter-geometry.token.d.ts.map +1 -0
  94. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +1 -1
  95. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
  96. package/libs/feature/search/src/lib/record-url.token.d.ts +3 -0
  97. package/libs/feature/search/src/lib/record-url.token.d.ts.map +1 -0
  98. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts +0 -1
  99. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  100. package/libs/feature/search/src/lib/state/search.facade.d.ts +1 -1
  101. package/libs/feature/search/src/lib/state/search.facade.d.ts.map +1 -1
  102. package/libs/feature/search/src/lib/utils/service/fields.d.ts +21 -8
  103. package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
  104. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
  105. package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts +1 -1
  106. package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts.map +1 -1
  107. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +10 -6
  108. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
  109. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  110. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts +3 -1
  111. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts.map +1 -1
  112. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +13 -13
  113. package/libs/ui/inputs/src/lib/button/button.component.d.ts +1 -1
  114. package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
  115. package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts +1 -1
  116. package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts.map +1 -1
  117. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +40 -40
  118. package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts +1 -1
  119. package/libs/util/i18n/src/index.d.ts +0 -1
  120. package/libs/util/i18n/src/index.d.ts.map +1 -1
  121. package/package.json +2 -2
  122. package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +61 -8
  123. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +55 -9
  124. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +225 -24
  125. package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +29 -0
  126. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +80 -73
  127. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.ts +4 -3
  128. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +3 -5
  129. package/src/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.ts +16 -0
  130. package/src/libs/api/metadata-converter/src/lib/iso19139/converter.ts +24 -21
  131. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +115 -62
  132. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +169 -95
  133. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +22 -2
  134. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +15 -4
  135. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +47 -8
  136. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +21 -14
  137. package/src/libs/common/domain/src/lib/model/search/aggregation.model.ts +1 -1
  138. package/src/libs/common/domain/src/lib/model/search/field.model.ts +1 -0
  139. package/src/libs/common/domain/src/lib/model/search/filter.model.ts +1 -1
  140. package/src/libs/common/domain/src/lib/model/search/index.ts +1 -0
  141. package/src/libs/common/domain/src/lib/model/search/search.model.ts +1 -1
  142. package/src/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.ts +1 -0
  143. package/src/libs/common/domain/src/lib/platform.service.interface.ts +1 -4
  144. package/src/libs/common/fixtures/src/lib/gn4/groups.fixtures.ts +1 -1
  145. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +25 -5
  146. package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +10 -0
  147. package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +1 -1
  148. package/src/libs/feature/search/src/index.ts +2 -0
  149. package/src/libs/feature/search/src/lib/feature-search.module.ts +1 -10
  150. package/src/libs/feature/search/src/lib/filter-geometry.token.ts +7 -0
  151. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +9 -3
  152. package/src/libs/feature/search/src/lib/record-url.token.ts +4 -0
  153. package/src/libs/feature/search/src/lib/results-list/results-list.container.component.ts +1 -1
  154. package/src/libs/feature/search/src/lib/results-table/results-table.component.html +104 -127
  155. package/src/libs/feature/search/src/lib/results-table/results-table.component.ts +0 -1
  156. package/src/libs/feature/search/src/lib/state/effects.ts +1 -1
  157. package/src/libs/feature/search/src/lib/state/search.facade.ts +2 -1
  158. package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +21 -16
  159. package/src/libs/feature/search/src/lib/utils/service/fields.ts +43 -34
  160. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.css +5 -0
  161. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.html +39 -0
  162. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.ts +58 -0
  163. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.css +2 -2
  164. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +1 -0
  165. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +50 -23
  166. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +37 -15
  167. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +2 -3
  168. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.html +5 -5
  169. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +12 -4
  170. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +1 -1
  171. package/src/libs/ui/inputs/src/lib/button/button.component.ts +1 -0
  172. package/src/libs/ui/inputs/src/lib/text-area/text-area.component.ts +1 -0
  173. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +2 -2
  174. package/src/libs/util/i18n/src/index.ts +0 -1
  175. package/translations/de.json +7 -5
  176. package/translations/en.json +10 -8
  177. package/translations/es.json +7 -5
  178. package/translations/fr.json +9 -7
  179. package/translations/it.json +9 -7
  180. package/translations/nl.json +7 -5
  181. package/translations/pt.json +7 -5
  182. package/translations/sk.json +7 -5
  183. package/esm2022/libs/util/i18n/src/lib/testing/test.translate.loader.mjs +0 -24
  184. package/esm2022/libs/util/i18n/src/lib/testing/test.translate.module.mjs +0 -109
  185. package/esm2022/libs/util/i18n/src/lib/testing/translations.model.mjs +0 -6
  186. package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts +0 -17
  187. package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts.map +0 -1
  188. package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts +0 -131
  189. package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts.map +0 -1
  190. package/libs/util/i18n/src/lib/testing/translations.model.d.ts +0 -21
  191. package/libs/util/i18n/src/lib/testing/translations.model.d.ts.map +0 -1
  192. package/src/libs/util/i18n/src/lib/testing/test.translate.loader.ts +0 -26
  193. package/src/libs/util/i18n/src/lib/testing/test.translate.module.ts +0 -235
  194. package/src/libs/util/i18n/src/lib/testing/translations.model.ts +0 -28
@@ -69,8 +69,24 @@ Cette section contient des *caractères internationaux* (ainsi que des "caractè
69
69
  url: new URL('http://my-org.net/two.png'),
70
70
  },
71
71
  ],
72
- keywords: ['international', 'test', '_another_keyword_'],
73
- themes: ['testData', 'exampleData'],
72
+ keywords: [
73
+ {
74
+ thesaurusId: 'geonetwork.thesaurus.local',
75
+ type: 'other',
76
+ value: 'international',
77
+ },
78
+ {
79
+ thesaurusId: 'geonetwork.thesaurus.local',
80
+ type: 'other',
81
+ value: 'test',
82
+ },
83
+ {
84
+ thesaurusId: 'geonetwork.thesaurus.local',
85
+ type: 'other',
86
+ value: '_another_keyword_',
87
+ },
88
+ ],
89
+ topics: ['testData', 'exampleData'],
74
90
  spatialRepresentation: 'grid',
75
91
  distributions: [
76
92
  {
@@ -115,7 +131,7 @@ As such, **it is not very interesting at all.**`,
115
131
  url: new URL('https://data.rennesmetropole.fr/pages/licence/'),
116
132
  },
117
133
  ],
118
- accessConstraints: [
134
+ legalConstraints: [
119
135
  {
120
136
  text: "Dataset access isn't possible since it does not really exist",
121
137
  type: 'other',
@@ -125,6 +141,8 @@ As such, **it is not very interesting at all.**`,
125
141
  type: 'security',
126
142
  },
127
143
  ],
144
+ securityConstraints: [],
145
+ otherConstraints: [],
128
146
  spatialExtents: [],
129
147
  temporalExtents: [],
130
148
  updateFrequency: {
@@ -174,7 +192,7 @@ Malgré l'attention portée à la création de ces données, il est rappelé que
174
192
  'données ouvertes',
175
193
  'Avrigny*60036',
176
194
  ],
177
- themes: ['Usage des sols', "document d'urbanisme"],
195
+ topics: ['Usage des sols', "document d'urbanisme"],
178
196
  spatialRepresentation: 'vector',
179
197
  distributions: [
180
198
  {
@@ -189,7 +207,9 @@ Malgré l'attention portée à la création de ces données, il est rappelé que
189
207
  ],
190
208
  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.
191
209
  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.`,
192
- accessConstraints: [],
210
+ legalConstraints: [],
211
+ securityConstraints: [],
212
+ otherConstraints: [],
193
213
  useLimitations: ["Aucune condition ne s'applique", 'Licence Ouverte 2.0'],
194
214
  licenses: [
195
215
  {
@@ -58,6 +58,8 @@ export class MapContextService {
58
58
  ): Map {
59
59
  if (mapConfig) {
60
60
  mapContext = this.mergeMapConfigWithContext(mapContext, mapConfig)
61
+ } else {
62
+ mapContext.layers = this.addDefaultBaselayerContext(mapContext.layers)
61
63
  }
62
64
  if (
63
65
  !mapContext.view?.extent &&
@@ -179,6 +181,14 @@ export class MapContextService {
179
181
  return view
180
182
  }
181
183
 
184
+ addDefaultBaselayerContext(
185
+ layers: MapContextLayerModel[]
186
+ ): MapContextLayerModel[] {
187
+ return layers.includes(DEFAULT_BASELAYER_CONTEXT)
188
+ ? layers
189
+ : [DEFAULT_BASELAYER_CONTEXT, ...layers]
190
+ }
191
+
182
192
  mergeMapConfigWithContext(
183
193
  mapContext: MapContextModel,
184
194
  mapConfig: MapConfig
@@ -50,7 +50,7 @@ const mdViewReducer = createReducer(
50
50
  chartConfig,
51
51
  })),
52
52
  on(MdViewActions.close, (state) => {
53
- // eslint-disable-next-line
53
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
54
54
  const { metadata, related, ...stateWithoutMd } = state
55
55
  return stateWithoutMd
56
56
  })
@@ -1,4 +1,6 @@
1
1
  export * from './lib/feature-search.module'
2
+ export * from './lib/filter-geometry.token'
3
+ export * from './lib/record-url.token'
2
4
  export * from './lib/state/actions'
3
5
  export * from './lib/state/selectors'
4
6
  export * from './lib/state/search.facade'
@@ -15,24 +15,15 @@ import { initialState, reducer, SEARCH_FEATURE_KEY } from './state/reducer'
15
15
  import { ResultsHitsContainerComponent } from './results-hits-number/results-hits.container.component'
16
16
  import { SearchStateContainerDirective } from './state/container/search-state.container.directive'
17
17
  import { UiInputsModule } from '../../../../../libs/ui/inputs/src'
18
- import { InjectionToken, NgModule } from '@angular/core'
18
+ import { NgModule } from '@angular/core'
19
19
  import { UiElementsModule } from '../../../../../libs/ui/elements/src'
20
20
  import { FavoriteStarComponent } from './favorites/favorite-star/favorite-star.component'
21
21
  import { MatIconModule } from '@angular/material/icon'
22
22
  import { FilterDropdownComponent } from './filter-dropdown/filter-dropdown.component'
23
- import { Geometry } from 'geojson'
24
23
  import { UiWidgetsModule } from '../../../../../libs/ui/widgets/src'
25
24
  import { RecordsRepositoryInterface } from '../../../../../libs/common/domain/src/lib/repository/records-repository.interface'
26
25
  import { Gn4Repository } from '../../../../../libs/api/repository/src'
27
26
 
28
- // this geometry will be used to filter & boost results accordingly
29
- export const FILTER_GEOMETRY = new InjectionToken<Promise<Geometry>>(
30
- 'filter-geometry'
31
- )
32
-
33
- // expects the replacement key ${uuid}
34
- export const RECORD_URL_TOKEN = new InjectionToken<string>('record-url-token')
35
-
36
27
  @NgModule({
37
28
  declarations: [
38
29
  SortByComponent,
@@ -0,0 +1,7 @@
1
+ // this geometry will be used to filter & boost results accordingly
2
+ import { InjectionToken } from '@angular/core'
3
+ import { Geometry } from 'geojson'
4
+
5
+ export const FILTER_GEOMETRY = new InjectionToken<Promise<Geometry>>(
6
+ 'filter-geometry'
7
+ )
@@ -11,12 +11,13 @@ import {
11
11
  AutocompleteComponent,
12
12
  AutocompleteItem,
13
13
  } from '../../../../../../libs/ui/inputs/src'
14
- import { Observable } from 'rxjs'
14
+ import { Observable, firstValueFrom } from 'rxjs'
15
15
  import { map } from 'rxjs/operators'
16
16
  import { SearchFacade } from '../state/search.facade'
17
17
  import { SearchService } from '../utils/service/search.service'
18
18
  import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/model/record'
19
19
  import { RecordsRepositoryInterface } from '../../../../../../libs/common/domain/src/lib/repository/records-repository.interface'
20
+ import { SearchFilters } from '../../../../../../libs/api/metadata-converter/src'
20
21
 
21
22
  @Component({
22
23
  selector: 'gn-ui-fuzzy-search',
@@ -75,7 +76,12 @@ export class FuzzySearchComponent implements OnInit {
75
76
  }
76
77
  }
77
78
 
78
- handleInputCleared() {
79
- this.searchService.updateFilters({ any: '' })
79
+ async handleInputCleared() {
80
+ const currentSearchFilters: SearchFilters = await firstValueFrom(
81
+ this.searchFacade.searchFilters$
82
+ )
83
+ if (currentSearchFilters.any) {
84
+ this.searchService.updateFilters({ any: '' })
85
+ }
80
86
  }
81
87
  }
@@ -0,0 +1,4 @@
1
+ import { InjectionToken } from '@angular/core'
2
+
3
+ // expects the replacement key ${uuid}
4
+ export const RECORD_URL_TOKEN = new InjectionToken<string>('record-url-token')
@@ -17,7 +17,7 @@ import {
17
17
  ResultsLayoutConfigItem,
18
18
  ResultsLayoutConfigModel,
19
19
  } from '../../../../../../libs/ui/search/src'
20
- import { RECORD_URL_TOKEN } from '../feature-search.module'
20
+ import { RECORD_URL_TOKEN } from '../record-url.token'
21
21
  import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/model/record'
22
22
 
23
23
  export type ResultsListShowMoreStrategy = 'auto' | 'button' | 'none'
@@ -1,135 +1,112 @@
1
- <div>
2
- <div class="flex" data-cy="records-information">
3
- <div
4
- translate
5
- class="my-8 ml-4 block text-gray-800"
6
- [translateParams]="{
7
- displayed: (records$ | async).length,
8
- hits: (recordCount$ | async)
9
- }"
10
- >
11
- results.records.hits.displayedOn
12
- </div>
13
- <div
14
- *ngIf="(selectedRecords$ | async).length as selectedRecordCount"
15
- class="my-8 ml-6 block text-gray-400 selected-records"
16
- translate
17
- [translateParams]="{ amount: selectedRecordCount }"
18
- >
19
- results.records.hits.selected
20
- </div>
21
- </div>
1
+ <gn-ui-interactive-table
2
+ [items]="records$ | async"
3
+ (itemClick)="handleRecordClick($event)"
4
+ >
5
+ <!-- SELECTED COLUMN -->
6
+ <gn-ui-interactive-table-column>
7
+ <ng-template #header>
8
+ <gn-ui-checkbox
9
+ [checked]="isAllSelected() | async"
10
+ [indeterminate]="isSomeSelected() | async"
11
+ (changed)="toggleSelectAll()"
12
+ type="default"
13
+ class="-m-2 mr-3"
14
+ >
15
+ </gn-ui-checkbox>
16
+ </ng-template>
17
+ <ng-template #cell let-item>
18
+ <gn-ui-checkbox
19
+ [checked]="isChecked(item) | async"
20
+ (changed)="handleRecordSelectedChange($event, item)"
21
+ class="-m-2"
22
+ type="default"
23
+ ></gn-ui-checkbox>
24
+ </ng-template>
25
+ </gn-ui-interactive-table-column>
22
26
 
23
- <gn-ui-interactive-table
24
- [items]="records$ | async"
25
- (itemClick)="handleRecordClick($event)"
27
+ <!-- TITLE COLUMN -->
28
+ <gn-ui-interactive-table-column
29
+ [sortable]="true"
30
+ [activeSort]="isSortedBy('resourceTitleObject.default.keyword') | async"
31
+ (sortChange)="setSortBy('resourceTitleObject.default.keyword', $event)"
26
32
  >
27
- <!-- SELECTED COLUMN -->
28
- <gn-ui-interactive-table-column>
29
- <ng-template #header>
30
- <gn-ui-checkbox
31
- [checked]="isAllSelected() | async"
32
- [indeterminate]="isSomeSelected() | async"
33
- (changed)="toggleSelectAll()"
34
- type="default"
35
- class="-m-2 mr-3"
36
- >
37
- </gn-ui-checkbox>
38
- </ng-template>
39
- <ng-template #cell let-item>
40
- <gn-ui-checkbox
41
- [checked]="isChecked(item) | async"
42
- (changed)="handleRecordSelectedChange($event, item)"
43
- class="-m-2"
44
- type="default"
45
- ></gn-ui-checkbox>
46
- </ng-template>
47
- </gn-ui-interactive-table-column>
48
-
49
- <!-- TITLE COLUMN -->
50
- <gn-ui-interactive-table-column
51
- [sortable]="true"
52
- [activeSort]="isSortedBy('resourceTitleObject.default.keyword') | async"
53
- (sortChange)="setSortBy('resourceTitleObject.default.keyword', $event)"
54
- >
55
- <ng-template #header>
56
- <span translate>record.metadata.title</span>
57
- </ng-template>
58
- <ng-template #cell let-item>
59
- {{ item.title }}
60
- </ng-template>
61
- </gn-ui-interactive-table-column>
33
+ <ng-template #header>
34
+ <span translate>record.metadata.title</span>
35
+ </ng-template>
36
+ <ng-template #cell let-item>
37
+ {{ item.title }}
38
+ </ng-template>
39
+ </gn-ui-interactive-table-column>
62
40
 
63
- <!-- FORMATS COLUMN -->
64
- <gn-ui-interactive-table-column>
65
- <ng-template #header>
66
- <span translate>record.metadata.formats</span>
67
- </ng-template>
68
- <ng-template #cell let-item>
69
- <div
70
- class="flex justify-start items-center gap-2"
71
- *ngIf="getRecordFormats(item) as formats"
72
- [title]="formats.join(', ')"
41
+ <!-- FORMATS COLUMN -->
42
+ <gn-ui-interactive-table-column>
43
+ <ng-template #header>
44
+ <span translate>record.metadata.formats</span>
45
+ </ng-template>
46
+ <ng-template #cell let-item>
47
+ <div
48
+ class="flex justify-start items-center gap-2"
49
+ *ngIf="getRecordFormats(item) as formats"
50
+ [title]="formats.join(', ')"
51
+ >
52
+ <span
53
+ class="badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0"
54
+ [style.background-color]="getBadgeColor(formats[0])"
55
+ *ngIf="formats[0]"
56
+ >
57
+ {{ formats[0] }}
58
+ </span>
59
+ <span
60
+ class="badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0"
61
+ [style.background-color]="getBadgeColor(formats[1])"
62
+ *ngIf="formats[1]"
73
63
  >
74
- <span
75
- class="badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0"
76
- [style.background-color]="getBadgeColor(formats[0])"
77
- *ngIf="formats[0]"
78
- >
79
- {{ formats[0] }}
80
- </span>
81
- <span
82
- class="badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0"
83
- [style.background-color]="getBadgeColor(formats[1])"
84
- *ngIf="formats[1]"
85
- >
86
- {{ formats[1] }}
87
- </span>
88
- <div class="flex-shrink-0" *ngIf="formats.slice(2).length > 0">
89
- <span>+{{ formats.slice(2).length }}</span>
90
- </div>
64
+ {{ formats[1] }}
65
+ </span>
66
+ <div class="flex-shrink-0" *ngIf="formats.slice(2).length > 0">
67
+ <span>+{{ formats.slice(2).length }}</span>
91
68
  </div>
92
- <div *ngIf="!getRecordFormats(item)"></div>
93
- </ng-template>
94
- </gn-ui-interactive-table-column>
69
+ </div>
70
+ <div *ngIf="!getRecordFormats(item)"></div>
71
+ </ng-template>
72
+ </gn-ui-interactive-table-column>
95
73
 
96
- <!-- OWNER COLUMN -->
97
- <gn-ui-interactive-table-column
98
- [sortable]="true"
99
- [activeSort]="isSortedBy('recordOwner') | async"
100
- (sortChange)="setSortBy('recordOwner', $event)"
101
- >
102
- <ng-template #header>
103
- <span translate>record.metadata.author</span>
104
- </ng-template>
105
- <ng-template #cell let-item>
106
- <mat-icon class="material-symbols-outlined">person</mat-icon>
107
- <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>
108
- </ng-template>
109
- </gn-ui-interactive-table-column>
74
+ <!-- OWNER COLUMN -->
75
+ <gn-ui-interactive-table-column
76
+ [sortable]="true"
77
+ [activeSort]="isSortedBy('recordOwner') | async"
78
+ (sortChange)="setSortBy('recordOwner', $event)"
79
+ >
80
+ <ng-template #header>
81
+ <span translate>record.metadata.author</span>
82
+ </ng-template>
83
+ <ng-template #cell let-item>
84
+ <mat-icon class="material-symbols-outlined">person</mat-icon>
85
+ <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>
86
+ </ng-template>
87
+ </gn-ui-interactive-table-column>
110
88
 
111
- <!-- STATUS COLUMN -->
112
- <gn-ui-interactive-table-column>
113
- <ng-template #header>
114
- <span translate>record.metadata.status</span>
115
- </ng-template>
116
- <ng-template #cell let-item>
117
- {{ item.status }}
118
- </ng-template>
119
- </gn-ui-interactive-table-column>
89
+ <!-- STATUS COLUMN -->
90
+ <gn-ui-interactive-table-column>
91
+ <ng-template #header>
92
+ <span translate>record.metadata.status</span>
93
+ </ng-template>
94
+ <ng-template #cell let-item>
95
+ {{ item.status }}
96
+ </ng-template>
97
+ </gn-ui-interactive-table-column>
120
98
 
121
- <!-- UPDATE DATE COLUMN -->
122
- <gn-ui-interactive-table-column
123
- [sortable]="true"
124
- [activeSort]="isSortedBy('changeDate') | async"
125
- (sortChange)="setSortBy('changeDate', $event)"
126
- >
127
- <ng-template #header>
128
- <span translate>record.metadata.updatedOn</span>
129
- </ng-template>
130
- <ng-template #cell let-item>
131
- {{ dateToString(item.recordUpdated) }}
132
- </ng-template>
133
- </gn-ui-interactive-table-column>
134
- </gn-ui-interactive-table>
135
- </div>
99
+ <!-- UPDATE DATE COLUMN -->
100
+ <gn-ui-interactive-table-column
101
+ [sortable]="true"
102
+ [activeSort]="isSortedBy('changeDate') | async"
103
+ (sortChange)="setSortBy('changeDate', $event)"
104
+ >
105
+ <ng-template #header>
106
+ <span translate>record.metadata.updatedOn</span>
107
+ </ng-template>
108
+ <ng-template #cell let-item>
109
+ {{ dateToString(item.recordUpdated) }}
110
+ </ng-template>
111
+ </gn-ui-interactive-table-column>
112
+ </gn-ui-interactive-table>
@@ -39,7 +39,6 @@ export class ResultsTableComponent {
39
39
  @Output() recordClick = new EventEmitter<CatalogRecord>()
40
40
 
41
41
  records$ = this.searchFacade.results$
42
- recordCount$ = this.searchFacade.resultsHits$
43
42
  selectedRecords$ = this.selectionService.selectedRecordsIdentifiers$
44
43
 
45
44
  constructor(
@@ -41,7 +41,7 @@ import { getSearchStateSearch } from './selectors'
41
41
  import { HttpErrorResponse } from '@angular/common/http'
42
42
  import { switchMapWithSearchId } from '../utils/operators/search.operator'
43
43
  import { Geometry } from 'geojson'
44
- import { FILTER_GEOMETRY } from '../feature-search.module'
44
+ import { FILTER_GEOMETRY } from '../filter-geometry.token'
45
45
  import { RecordsRepositoryInterface } from '../../../../../../libs/common/domain/src/lib/repository/records-repository.interface'
46
46
  import { FavoritesService } from '../../../../../../libs/api/repository/src'
47
47
  import { PlatformServiceInterface } from '../../../../../../libs/common/domain/src/lib/platform.service.interface'
@@ -40,7 +40,7 @@ import {
40
40
  isEndOfResults,
41
41
  totalPages,
42
42
  } from './selectors'
43
- import { FILTER_GEOMETRY } from '../feature-search.module'
43
+ import { FILTER_GEOMETRY } from '../filter-geometry.token'
44
44
  import { Geometry } from 'geojson'
45
45
  import { catchError, map, shareReplay } from 'rxjs/operators'
46
46
  import {
@@ -215,5 +215,6 @@ export class SearchFacade {
215
215
  this.store.dispatch(new SetFilters({}, this.searchId))
216
216
  this.store.dispatch(new SetSortBy([], this.searchId))
217
217
  this.store.dispatch(new SetFavoritesOnly(false, this.searchId))
218
+ return this
218
219
  }
219
220
  }
@@ -4,12 +4,12 @@ import {
4
4
  FieldValue,
5
5
  FullTextSearchField,
6
6
  IsSpatialSearchField,
7
- KeySearchField,
8
7
  LicenseSearchField,
8
+ MultilingualSearchField,
9
9
  OrganizationSearchField,
10
10
  OwnerSearchField,
11
11
  SimpleSearchField,
12
- ThesaurusField,
12
+ TranslatedSearchField,
13
13
  } from './fields'
14
14
  import { forkJoin, Observable, of } from 'rxjs'
15
15
  import { map } from 'rxjs/operators'
@@ -21,6 +21,7 @@ export type FieldValues = Record<string, FieldValue[] | FieldValue>
21
21
 
22
22
  marker('search.filters.format')
23
23
  marker('search.filters.inspireKeyword')
24
+ marker('search.filters.keyword')
24
25
  marker('search.filters.isSpatial')
25
26
  marker('search.filters.license')
26
27
  marker('search.filters.publicationYear')
@@ -37,29 +38,33 @@ marker('search.filters.contact')
37
38
  export class FieldsService {
38
39
  private fields = {
39
40
  publisher: new OrganizationSearchField(this.injector),
40
- format: new SimpleSearchField('format', 'asc', this.injector),
41
- resourceType: new KeySearchField('resourceType', 'asc', this.injector),
42
- representationType: new KeySearchField(
41
+ format: new SimpleSearchField('format', this.injector, 'asc'),
42
+ resourceType: new TranslatedSearchField(
43
+ 'resourceType',
44
+ this.injector,
45
+ 'asc'
46
+ ),
47
+ representationType: new TranslatedSearchField(
43
48
  'cl_spatialRepresentationType.key',
44
- 'asc',
45
- this.injector
49
+ this.injector,
50
+ 'asc'
46
51
  ),
47
52
  publicationYear: new SimpleSearchField(
48
53
  'publicationYearForResource',
49
- 'desc',
50
- this.injector
54
+ this.injector,
55
+ 'desc'
51
56
  ),
52
- topic: new KeySearchField('cl_topic.key', 'asc', this.injector),
53
- inspireKeyword: new ThesaurusField(
57
+ topic: new TranslatedSearchField('cl_topic.key', this.injector, 'asc'),
58
+ inspireKeyword: new TranslatedSearchField(
54
59
  'th_httpinspireeceuropaeutheme-theme.link',
55
- 'external.theme.httpinspireeceuropaeutheme-theme',
56
- 'asc',
57
- this.injector
60
+ this.injector,
61
+ 'asc'
58
62
  ),
63
+ keyword: new MultilingualSearchField('tag', this.injector, 'desc', 'count'),
59
64
  documentStandard: new SimpleSearchField(
60
65
  'documentStandard',
61
- 'asc',
62
- this.injector
66
+ this.injector,
67
+ 'asc'
63
68
  ),
64
69
  isSpatial: new IsSpatialSearchField(this.injector),
65
70
  q: new FullTextSearchField(),