geonetwork-ui 2.4.0 → 2.4.1-dev.1d2ade24e

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 (181) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.converter.mjs +4 -3
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +5 -2
  3. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
  4. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/update-frequency.mapper.mjs +6 -62
  5. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +19 -1
  6. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +27 -16
  7. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +27 -1
  8. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  9. package/esm2022/libs/data-access/gn4/src/openapi/api/records.api.service.mjs +7 -1
  10. package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +3 -1
  11. package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +18 -14
  12. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +15 -5
  13. package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +10 -4
  14. package/esm2022/libs/feature/editor/src/lib/+state/editor.selectors.mjs +6 -5
  15. package/esm2022/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.mjs +3 -3
  16. package/esm2022/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.mjs +3 -3
  17. package/esm2022/libs/feature/editor/src/lib/components/import-record/import-record.component.mjs +2 -2
  18. package/esm2022/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.mjs +118 -12
  19. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.mjs +36 -23
  20. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.mjs +7 -12
  21. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.mjs +17 -12
  22. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.mjs +7 -13
  23. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.mjs +3 -3
  24. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.mjs +36 -60
  25. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +3 -3
  26. package/esm2022/libs/feature/editor/src/lib/components/record-form/record-form.component.mjs +3 -3
  27. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +11 -15
  28. package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +9 -5
  29. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +3 -4
  30. package/esm2022/libs/ui/dataviz/src/lib/figure/figure.component.mjs +3 -3
  31. package/esm2022/libs/ui/elements/src/index.mjs +3 -2
  32. package/esm2022/libs/ui/elements/src/lib/image-input/image-input.component.mjs +213 -0
  33. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +19 -13
  34. package/esm2022/libs/ui/inputs/src/index.mjs +5 -6
  35. package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +2 -1
  36. package/esm2022/libs/ui/inputs/src/lib/file-input/file-input.component.mjs +5 -5
  37. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +19 -25
  38. package/esm2022/libs/ui/inputs/src/lib/url-input/url-input.component.mjs +11 -6
  39. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +9 -4
  40. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +10 -10
  41. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +37 -1
  42. package/esm2022/translations/de.json +53 -17
  43. package/esm2022/translations/en.json +33 -16
  44. package/esm2022/translations/es.json +51 -15
  45. package/esm2022/translations/fr.json +37 -20
  46. package/esm2022/translations/it.json +266 -228
  47. package/esm2022/translations/nl.json +51 -15
  48. package/esm2022/translations/pt.json +51 -15
  49. package/fesm2022/geonetwork-ui.mjs +1805 -1420
  50. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  51. package/libs/api/metadata-converter/src/lib/gn4/gn4.converter.d.ts.map +1 -1
  52. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  53. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +1 -0
  54. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  55. package/libs/api/metadata-converter/src/lib/iso19139/utils/update-frequency.mapper.d.ts.map +1 -1
  56. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  57. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +4 -3
  58. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  59. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +2 -1
  60. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  61. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +4 -3
  62. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  63. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts +3 -0
  64. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts.map +1 -1
  65. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +10 -2
  66. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -1
  67. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts +6 -2
  68. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts.map +1 -1
  69. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +5 -2
  70. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
  71. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts +2 -1
  72. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -1
  73. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +2 -1
  74. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -1
  75. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts +52 -4
  76. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts.map +1 -1
  77. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.d.ts +4 -4
  78. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.d.ts.map +1 -1
  79. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.d.ts +1 -4
  80. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.d.ts.map +1 -1
  81. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.d.ts +6 -5
  82. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.d.ts.map +1 -1
  83. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.d.ts +1 -4
  84. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.d.ts.map +1 -1
  85. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.d.ts +1 -1
  86. 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
  87. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  88. package/libs/feature/editor/src/lib/services/editor.service.d.ts +1 -1
  89. package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
  90. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +0 -1
  91. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -1
  92. package/libs/ui/elements/src/index.d.ts +2 -1
  93. package/libs/ui/elements/src/index.d.ts.map +1 -1
  94. package/libs/ui/elements/src/lib/image-input/image-input.component.d.ts.map +1 -0
  95. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts +1 -1
  96. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
  97. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  98. package/libs/ui/inputs/src/index.d.ts +4 -5
  99. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  100. package/libs/ui/inputs/src/lib/button/button.component.d.ts +1 -1
  101. package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
  102. package/libs/ui/inputs/src/lib/file-input/file-input.component.d.ts +1 -1
  103. package/libs/ui/inputs/src/lib/file-input/file-input.component.d.ts.map +1 -1
  104. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +6 -7
  105. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
  106. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts +5 -4
  107. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts.map +1 -1
  108. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +2 -1
  109. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -1
  110. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +3 -3
  111. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  112. package/libs/util/shared/src/lib/links/link-utils.d.ts +2 -1
  113. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  114. package/package.json +1 -1
  115. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.converter.ts +4 -3
  116. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +8 -1
  117. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +1 -0
  118. package/src/libs/api/metadata-converter/src/lib/iso19139/utils/update-frequency.mapper.ts +9 -62
  119. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +18 -0
  120. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +53 -27
  121. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +29 -7
  122. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +5 -4
  123. package/src/libs/common/fixtures/src/lib/elasticsearch/full-response.fixtures.ts +2 -2
  124. package/src/libs/common/fixtures/src/lib/elasticsearch/search-responses.fixtures.ts +16 -16
  125. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +163 -0
  126. package/src/libs/data-access/gn4/src/openapi/api/records.api.service.ts +24 -4
  127. package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +10 -1
  128. package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +57 -31
  129. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +15 -9
  130. package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +18 -12
  131. package/src/libs/feature/editor/src/lib/+state/editor.selectors.ts +13 -8
  132. package/src/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.html +1 -1
  133. package/src/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.html +1 -1
  134. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.html +63 -6
  135. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.ts +145 -4
  136. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.html +1 -1
  137. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.ts +31 -19
  138. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.html +1 -10
  139. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-link-resources/form-field-online-link-resources.component.ts +1 -7
  140. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.html +12 -25
  141. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.ts +15 -10
  142. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.html +0 -9
  143. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.ts +3 -9
  144. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.html +6 -6
  145. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.ts +46 -74
  146. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +6 -3
  147. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.html +3 -6
  148. package/src/libs/feature/editor/src/lib/fields.config.ts +10 -14
  149. package/src/libs/feature/editor/src/lib/services/editor.service.ts +18 -16
  150. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +0 -1
  151. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +0 -3
  152. package/src/libs/ui/dataviz/src/lib/figure/figure.component.html +1 -0
  153. package/src/libs/ui/elements/src/index.ts +2 -1
  154. package/src/libs/ui/{inputs → elements}/src/lib/image-input/image-input.component.html +4 -19
  155. package/src/libs/ui/{inputs → elements}/src/lib/image-input/image-input.component.ts +13 -9
  156. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +13 -10
  157. package/src/libs/ui/inputs/src/index.ts +4 -5
  158. package/src/libs/ui/inputs/src/lib/button/button.component.ts +2 -1
  159. package/src/libs/ui/inputs/src/lib/file-input/file-input.component.ts +1 -1
  160. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +22 -25
  161. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.html +5 -3
  162. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.ts +10 -2
  163. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +12 -1
  164. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +4 -6
  165. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +23 -6
  166. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +6 -6
  167. package/src/libs/util/shared/src/lib/links/link-utils.ts +48 -1
  168. package/tailwind.base.config.js +2 -0
  169. package/translations/de.json +53 -17
  170. package/translations/en.json +33 -16
  171. package/translations/es.json +51 -15
  172. package/translations/fr.json +37 -20
  173. package/translations/it.json +266 -228
  174. package/translations/nl.json +51 -15
  175. package/translations/pt.json +51 -15
  176. package/translations/sk.json +51 -15
  177. package/esm2022/libs/ui/inputs/src/lib/image-input/image-input.component.mjs +0 -214
  178. package/libs/ui/inputs/src/lib/image-input/image-input.component.d.ts.map +0 -1
  179. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/update-frequency.mapper.ts +0 -67
  180. /package/libs/ui/{inputs → elements}/src/lib/image-input/image-input.component.d.ts +0 -0
  181. /package/src/libs/ui/{inputs → elements}/src/lib/image-input/image-input.component.css +0 -0
@@ -8,6 +8,8 @@ import {
8
8
  } from '@angular/core'
9
9
  import {
10
10
  UpdateFrequency,
11
+ UpdateFrequencyCode,
12
+ updateFrequencyCodeValues,
11
13
  UpdateFrequencyCustom,
12
14
  } from '../../../../../../../../../libs/common/domain/src/lib/model/record'
13
15
  import {
@@ -18,6 +20,10 @@ import {
18
20
  import { TranslateModule, TranslateService } from '@ngx-translate/core'
19
21
  import { firstValueFrom } from 'rxjs'
20
22
 
23
+ const initialListValues = updateFrequencyCodeValues.filter(
24
+ (code) => !['unknown', 'notPlanned', 'asNeeded', 'irregular'].includes(code)
25
+ )
26
+
21
27
  @Component({
22
28
  selector: 'gn-ui-form-field-update-frequency',
23
29
  templateUrl: './form-field-update-frequency.component.html',
@@ -33,20 +39,39 @@ export class FormFieldUpdateFrequencyComponent implements OnInit {
33
39
  protected choices: DropdownChoice[] = []
34
40
 
35
41
  get planned() {
36
- return typeof this.value !== 'string'
42
+ return this.value && this.value !== 'notPlanned' && this.value !== 'unknown'
37
43
  }
38
44
 
39
45
  constructor(private translateService: TranslateService) {}
40
46
 
41
47
  async ngOnInit() {
42
48
  this.choices = await this.getInitialChoices()
49
+ if (!this.planned) {
50
+ return
51
+ }
52
+ if (
53
+ typeof this.value === 'string' &&
54
+ !this.choices.map((choice) => choice.value).includes(this.value)
55
+ ) {
56
+ this.choices = [
57
+ {
58
+ value: this.value,
59
+ label: await firstValueFrom(
60
+ this.translateService.get(
61
+ `domain.record.updateFrequency.${this.value}`
62
+ )
63
+ ),
64
+ },
65
+ ...this.choices,
66
+ ]
67
+ }
43
68
  if (typeof this.value === 'string') {
44
69
  return
45
70
  }
46
71
  const updatedTimes = this.value.updatedTimes
47
72
  const per = this.value.per
48
73
  // the update frequency is not in the list; make it appear there
49
- if (updatedTimes && updatedTimes !== 1 && updatedTimes !== 2) {
74
+ if (updatedTimes) {
50
75
  this.choices = [
51
76
  {
52
77
  value: `${per}.${updatedTimes}`,
@@ -65,90 +90,37 @@ export class FormFieldUpdateFrequencyComponent implements OnInit {
65
90
  if (this.planned) {
66
91
  this.valueChange.emit('notPlanned')
67
92
  } else {
68
- this.valueChange.emit({ updatedTimes: 1, per: 'day' })
93
+ this.valueChange.emit(this.choices[0].value as UpdateFrequencyCode)
69
94
  }
70
95
  }
71
96
 
72
97
  get selectedFrequency(): string {
73
- if (!this.value || typeof this.value === 'string') return null
98
+ if (!this.value) return null
99
+ if (typeof this.value === 'string') return this.value
74
100
  const { updatedTimes, per } = this.value
75
101
  return `${per}.${updatedTimes}`
76
102
  }
77
103
 
78
- onSelectFrequencyValue(value: unknown) {
79
- const split = (value as string).split('.')
80
- this.valueChange.emit({
81
- updatedTimes: Number(split[1]),
82
- per: split[0] as UpdateFrequencyCustom['per'],
83
- })
104
+ onSelectFrequencyValue(value: string) {
105
+ if (!value.includes('.')) {
106
+ this.valueChange.emit(value as UpdateFrequencyCode)
107
+ } else {
108
+ const split = (value as string).split('.')
109
+ this.valueChange.emit({
110
+ updatedTimes: Number(split[1]),
111
+ per: split[0] as UpdateFrequencyCustom['per'],
112
+ })
113
+ }
84
114
  }
85
115
 
86
116
  private async getInitialChoices() {
87
- return [
88
- {
89
- value: 'day.1',
90
- label: await firstValueFrom(
91
- this.translateService.get('domain.record.updateFrequency.day', {
92
- count: 1,
93
- })
94
- ),
95
- },
96
- {
97
- value: 'day.2',
98
- label: await firstValueFrom(
99
- this.translateService.get('domain.record.updateFrequency.day', {
100
- count: 2,
101
- })
102
- ),
103
- },
104
- {
105
- value: 'week.1',
106
- label: await firstValueFrom(
107
- this.translateService.get('domain.record.updateFrequency.week', {
108
- count: 1,
109
- })
110
- ),
111
- },
112
- {
113
- value: 'week.2',
114
- label: await firstValueFrom(
115
- this.translateService.get('domain.record.updateFrequency.week', {
116
- count: 2,
117
- })
118
- ),
119
- },
120
- {
121
- value: 'month.1',
122
- label: await firstValueFrom(
123
- this.translateService.get('domain.record.updateFrequency.month', {
124
- count: 1,
125
- })
126
- ),
127
- },
128
- {
129
- value: 'month.2',
130
- label: await firstValueFrom(
131
- this.translateService.get('domain.record.updateFrequency.month', {
132
- count: 2,
133
- })
134
- ),
135
- },
136
- {
137
- value: 'year.1',
138
- label: await firstValueFrom(
139
- this.translateService.get('domain.record.updateFrequency.year', {
140
- count: 1,
141
- })
142
- ),
143
- },
144
- {
145
- value: 'year.2',
117
+ return Promise.all(
118
+ initialListValues.map(async (value) => ({
119
+ value,
146
120
  label: await firstValueFrom(
147
- this.translateService.get('domain.record.updateFrequency.year', {
148
- count: 2,
149
- })
121
+ this.translateService.get(`domain.record.updateFrequency.${value}`)
150
122
  ),
151
- },
152
- ]
123
+ }))
124
+ )
153
125
  }
154
126
  }
@@ -30,8 +30,11 @@
30
30
  #autosize="cdkTextareaAutosize"
31
31
  cdkAutosizeMinRows="1"
32
32
  data-test="recordTitleInput"
33
- class="grow font-title text-3xl font-normal overflow-hidden"
33
+ class="grow font-title text-3xl font-normal overflow-hidden text-black/80"
34
34
  (change)="valueChange.emit($event.target.value)"
35
+ [placeholder]="
36
+ 'editor.record.form.field.title.placeholder' | translate
37
+ "
35
38
  >{{ valueAsString }}</textarea
36
39
  >
37
40
  <div class="flex flex-row justify-between self-start mt-0.5">
@@ -109,8 +112,8 @@
109
112
  <ng-container *ngSwitchCase="'licenses'">
110
113
  <gn-ui-form-field-license
111
114
  [label]="config.labelKey! | translate"
112
- [recordConstraints]="valueAsConstraints"
113
- (recordConstraintsChange)="valueChange.emit($event)"
115
+ [recordLicences]="valueAsConstraints"
116
+ (recordLicencesChange)="valueChange.emit($event)"
114
117
  ></gn-ui-form-field-license>
115
118
  </ng-container>
116
119
 
@@ -6,14 +6,11 @@
6
6
  "
7
7
  >
8
8
  <ng-container *ngIf="!section.hidden">
9
- <div class="flex flex-col gap-8 border p-8 rounded-[8px] shadow">
10
- <div
11
- class="flex flex-col gap-2"
12
- [ngClass]="section.labelKey ? 'mb-4' : 'hidden'"
13
- >
9
+ <div class="flex flex-col gap-6 border p-8 rounded-[8px] shadow">
10
+ <div class="flex flex-col gap-2">
14
11
  <div
15
12
  *ngIf="section.labelKey"
16
- class="text-2xl font-title text-main"
13
+ class="text-2xl font-title text-black"
17
14
  translate
18
15
  >
19
16
  {{ section.labelKey }}
@@ -61,9 +61,7 @@ export const RECORD_LICENSE_FIELD: EditorField = {
61
61
 
62
62
  export const RECORD_KEYWORDS_FIELD: EditorField = {
63
63
  model: 'keywords',
64
- formFieldConfig: {
65
- labelKey: marker('editor.record.form.field.keywords'),
66
- },
64
+ formFieldConfig: {},
67
65
  }
68
66
 
69
67
  export const RECORD_RESOURCE_CREATED_FIELD: EditorField = {
@@ -156,25 +154,19 @@ export const RECORD_SPATIAL_TOGGLE_FIELD: EditorField = {
156
154
 
157
155
  export const RECORD_SPATIAL_EXTENTS_FIELD: EditorField = {
158
156
  model: 'spatialExtents',
159
- formFieldConfig: {
160
- labelKey: marker('editor.record.form.field.spatialExtents'),
161
- },
157
+ formFieldConfig: {},
162
158
  }
163
159
 
164
160
  export const RECORD_ONLINE_RESOURCES: EditorField = {
165
161
  model: 'onlineResources',
166
162
  modelSpecifier: 'onlineResourceType:!link',
167
- formFieldConfig: {
168
- labelKey: marker('editor.record.form.field.onlineResources'),
169
- },
163
+ formFieldConfig: {},
170
164
  }
171
165
 
172
166
  export const RECORD_ONLINE_LINK_RESOURCES: EditorField = {
173
167
  model: 'onlineResources',
174
168
  modelSpecifier: 'onlineResourceType:link',
175
- formFieldConfig: {
176
- labelKey: marker('editor.record.form.field.onlineLinkResources'),
177
- },
169
+ formFieldConfig: {},
178
170
  }
179
171
 
180
172
  /************************************************************
@@ -273,7 +265,12 @@ export const DEFAULT_CONFIGURATION: EditorConfig = {
273
265
  pages: [
274
266
  {
275
267
  labelKey: marker('editor.record.form.page.description'),
276
- sections: [TITLE_SECTION, ABOUT_SECTION, GEOGRAPHICAL_COVERAGE_SECTION],
268
+ sections: [
269
+ TITLE_SECTION,
270
+ ABOUT_SECTION,
271
+ CLASSIFICATION_SECTION,
272
+ GEOGRAPHICAL_COVERAGE_SECTION,
273
+ ],
277
274
  },
278
275
  {
279
276
  labelKey: marker('editor.record.form.page.ressources'),
@@ -282,7 +279,6 @@ export const DEFAULT_CONFIGURATION: EditorConfig = {
282
279
  {
283
280
  labelKey: marker('editor.record.form.page.accessAndContact'),
284
281
  sections: [
285
- CLASSIFICATION_SECTION,
286
282
  USE_AND_ACCESS_CONDITIONS_SECTION,
287
283
  DATA_MANAGERS_SECTION,
288
284
  METADATA_POINT_OF_CONTACT_SECTION,
@@ -1,5 +1,5 @@
1
1
  import { Injectable } from '@angular/core'
2
- import { Observable, switchMap } from 'rxjs'
2
+ import { forkJoin, Observable, of, switchMap } from 'rxjs'
3
3
  import { map, tap } from 'rxjs/operators'
4
4
  import { CatalogRecord } from '../../../../../../libs/common/domain/src/lib/model/record'
5
5
  import { EditorConfig } from '../models/'
@@ -16,8 +16,7 @@ export class EditorService {
16
16
  saveRecord(
17
17
  record: CatalogRecord,
18
18
  recordSource: string,
19
- fieldsConfig: EditorConfig,
20
- generateNewUniqueIdentifier = false
19
+ fieldsConfig: EditorConfig
21
20
  ): Observable<[CatalogRecord, string]> {
22
21
  const savedRecord = { ...record }
23
22
 
@@ -35,22 +34,25 @@ export class EditorService {
35
34
  })
36
35
  }
37
36
  }
38
-
39
- // if we want a new unique identifier, clear the existing one
40
- if (generateNewUniqueIdentifier) {
37
+ let publishToAll = true
38
+ // if the record is new, generate a new unique identifier and pass publishToAll as false
39
+ if (!record.uniqueIdentifier) {
41
40
  savedRecord.uniqueIdentifier = null
41
+ publishToAll = false
42
42
  }
43
43
 
44
- return this.recordsRepository.saveRecord(savedRecord, recordSource).pipe(
45
- switchMap((uniqueIdentifier) =>
46
- this.recordsRepository.openRecordForEdition(uniqueIdentifier)
47
- ),
48
- tap(() => {
49
- // if saving was successful, the original draft can be discarded
50
- this.recordsRepository.clearRecordDraft(record.uniqueIdentifier)
51
- }),
52
- map(([record, recordSource]) => [record, recordSource])
53
- )
44
+ return this.recordsRepository
45
+ .saveRecord(savedRecord, recordSource, publishToAll)
46
+ .pipe(
47
+ switchMap((uniqueIdentifier) =>
48
+ this.recordsRepository.openRecordForEdition(uniqueIdentifier)
49
+ ),
50
+ tap(() => {
51
+ // if saving was successful, the original draft can be discarded
52
+ this.recordsRepository.clearRecordDraft(record.uniqueIdentifier)
53
+ }),
54
+ map(([record, recordSource]) => [record, recordSource])
55
+ )
54
56
  }
55
57
 
56
58
  // emits and completes once saving is done
@@ -4,7 +4,6 @@
4
4
  [hasDraft]="hasDraft"
5
5
  [selectedRecordsIdentifiers]="selectedRecords$ | async"
6
6
  [sortOrder]="sortBy$ | async"
7
- [isUnsavedDraft]="isUnsavedDraft"
8
7
  [canDelete]="canDelete"
9
8
  [canDuplicate]="canDuplicate"
10
9
  (recordClick)="handleRecordClick($event)"
@@ -38,9 +38,6 @@ export class ResultsTableContainerComponent implements OnDestroy {
38
38
  hasDraft = (record: CatalogRecord): boolean =>
39
39
  this.recordsRepository.recordHasDraft(record.uniqueIdentifier)
40
40
 
41
- isUnsavedDraft = (record: CatalogRecord): boolean =>
42
- this.recordsRepository.isRecordNotYetSaved(record.uniqueIdentifier)
43
-
44
41
  constructor(
45
42
  protected searchFacade: SearchFacade,
46
43
  private searchService: SearchService,
@@ -10,6 +10,7 @@
10
10
  "
11
11
  >
12
12
  <div
13
+ data-test="icon-container"
13
14
  class="{{ bgClass }} {{
14
15
  textClass
15
16
  }} text-[1.875em] rounded-full mr-[0.55em] flex justify-center items-center w-[2.2em] h-[2.2em] shrink-0"
@@ -5,6 +5,7 @@ export * from './lib/content-ghost/content-ghost.component'
5
5
  export * from './lib/download-item/download-item.component'
6
6
  export * from './lib/downloads-list/downloads-list.component'
7
7
  export * from './lib/error/error.component'
8
+ export * from './lib/image-input/image-input.component'
8
9
  export * from './lib/image-overlay-preview/image-overlay-preview.component'
9
10
  export * from './lib/link-card/link-card.component'
10
11
  export * from './lib/markdown-editor/markdown-editor.component'
@@ -19,5 +20,5 @@ export * from './lib/record-api-form/record-api-form.component'
19
20
  export * from './lib/related-record-card/related-record-card.component'
20
21
  export * from './lib/thumbnail/thumbnail.component'
21
22
  export * from './lib/ui-elements.module'
22
- export * from './lib/user-preview/user-preview.component'
23
23
  export * from './lib/user-feedback-item/user-feedback-item.component'
24
+ export * from './lib/user-preview/user-preview.component'
@@ -2,31 +2,16 @@
2
2
  </ng-container>
3
3
 
4
4
  <ng-template #withImage>
5
- <div class="w-full h-full flex flex-col gap-2">
6
- <div class="flex-1 group relative">
7
- <img
8
- class="w-full object-cover border-2 border-gray-300 rounded-lg h-[172px]"
9
- [alt]="altText"
10
- loading="lazy"
11
- [src]="previewUrl"
12
- />
13
- <gn-ui-button
14
- type="outline"
15
- style="--gn-ui-button-height: 40px; --gn-ui-button-width: 40px"
16
- extraClass="absolute right-2 bottom-2 invisible group-hover:visible bg-background"
17
- (buttonClick)="handleDelete()"
18
- [disabled]="disabled"
19
- >
20
- <ng-icon name="iconoirBin"></ng-icon>
21
- </gn-ui-button>
22
- </div>
5
+ <div class="w-80 h-full flex flex-col gap-2">
6
+ <gn-ui-image-overlay-preview class="h-48" [imageUrl]="previewUrl">
7
+ </gn-ui-image-overlay-preview>
23
8
  <gn-ui-text-input
24
9
  *ngIf="showAltTextInput"
25
10
  [placeholder]="'input.image.altTextPlaceholder' | translate"
26
11
  [value]="altText ?? ''"
27
12
  (valueChange)="handleAltTextChange($event)"
28
13
  extraClass="gn-ui-editor-textarea"
29
- [disabled]="disabled"
14
+ [disabled]="true"
30
15
  ></gn-ui-text-input>
31
16
  <div class="flex flex-row gap-2 mt-2">
32
17
  <gn-ui-button type="gray" (buttonClick)="handleDelete()">
@@ -9,27 +9,30 @@ import {
9
9
  Output,
10
10
  } from '@angular/core'
11
11
  import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'
12
- import { downgradeImage, megabytesToBytes } from '../../../../../../libs/util/shared/src'
13
- import { firstValueFrom } from 'rxjs'
14
- import { ButtonComponent } from '../button/button.component'
15
- import { FilesDropDirective } from '../files-drop/files-drop.directive'
16
- import { TranslateModule } from '@ngx-translate/core'
17
12
  import { marker } from '@biesbjerg/ngx-translate-extract-marker'
18
- import { UrlInputComponent } from '../url-input/url-input.component'
19
- import { TextInputComponent } from '../text-input/text-input.component'
13
+ import {
14
+ ButtonComponent,
15
+ FilesDropDirective,
16
+ TextInputComponent,
17
+ UrlInputComponent,
18
+ } from '../../../../../../libs/ui/inputs/src'
19
+ import { downgradeImage, megabytesToBytes } from '../../../../../../libs/util/shared/src'
20
20
  import {
21
21
  NgIconComponent,
22
22
  provideIcons,
23
23
  provideNgIconsConfig,
24
24
  } from '@ng-icons/core'
25
25
  import {
26
+ iconoirBin,
26
27
  iconoirFramePlusIn,
28
+ iconoirLink,
27
29
  iconoirMediaImage,
28
30
  iconoirMediaImageXmark,
29
- iconoirBin,
30
31
  iconoirPlus,
31
- iconoirLink,
32
32
  } from '@ng-icons/iconoir'
33
+ import { TranslateModule } from '@ngx-translate/core'
34
+ import { firstValueFrom } from 'rxjs'
35
+ import { ImageOverlayPreviewComponent } from '../image-overlay-preview/image-overlay-preview.component'
33
36
 
34
37
  @Component({
35
38
  selector: 'gn-ui-image-input',
@@ -46,6 +49,7 @@ import {
46
49
  UrlInputComponent,
47
50
  TextInputComponent,
48
51
  NgIconComponent,
52
+ ImageOverlayPreviewComponent,
49
53
  ],
50
54
  providers: [
51
55
  provideIcons({
@@ -1,23 +1,24 @@
1
- import { NgModule } from '@angular/core'
2
1
  import { CommonModule, NgOptimizedImage } from '@angular/common'
3
- import { RouterModule } from '@angular/router'
2
+ import { NgModule } from '@angular/core'
3
+ import { FormsModule } from '@angular/forms'
4
4
  import { MatTooltipModule } from '@angular/material/tooltip'
5
- import { UtilSharedModule } from '../../../../../libs/util/shared/src'
6
- import { PopoverComponent, UiWidgetsModule } from '../../../../../libs/ui/widgets/src'
7
- import { MaxLinesComponent, UiLayoutModule } from '../../../../../libs/ui/layout/src'
8
- import { TranslateModule } from '@ngx-translate/core'
9
- import { ThumbnailComponent } from './thumbnail/thumbnail.component'
5
+ import { RouterModule } from '@angular/router'
10
6
  import {
11
7
  BadgeComponent,
12
8
  TextInputComponent,
13
9
  UiInputsModule,
14
10
  } from '../../../../../libs/ui/inputs/src'
15
- import { FormsModule } from '@angular/forms'
11
+ import { MaxLinesComponent, UiLayoutModule } from '../../../../../libs/ui/layout/src'
12
+ import { PopoverComponent, UiWidgetsModule } from '../../../../../libs/ui/widgets/src'
13
+ import { UtilSharedModule } from '../../../../../libs/util/shared/src'
14
+ import { provideNgIconsConfig } from '@ng-icons/core'
15
+ import { TranslateModule } from '@ngx-translate/core'
16
16
  import { AvatarComponent } from './avatar/avatar.component'
17
- import { UserPreviewComponent } from './user-preview/user-preview.component'
17
+ import { ImageInputComponent } from './image-input/image-input.component'
18
18
  import { MarkdownParserComponent } from './markdown-parser/markdown-parser.component'
19
+ import { ThumbnailComponent } from './thumbnail/thumbnail.component'
19
20
  import { TimeSincePipe } from './user-feedback-item/time-since.pipe'
20
- import { provideNgIconsConfig } from '@ng-icons/core'
21
+ import { UserPreviewComponent } from './user-preview/user-preview.component'
21
22
 
22
23
  @NgModule({
23
24
  imports: [
@@ -38,6 +39,7 @@ import { provideNgIconsConfig } from '@ng-icons/core'
38
39
  BadgeComponent,
39
40
  MaxLinesComponent,
40
41
  TextInputComponent,
42
+ ImageInputComponent,
41
43
  ],
42
44
  providers: [
43
45
  provideNgIconsConfig({
@@ -50,6 +52,7 @@ import { provideNgIconsConfig } from '@ng-icons/core'
50
52
  AvatarComponent,
51
53
  UserPreviewComponent,
52
54
  MarkdownParserComponent,
55
+ ImageInputComponent,
53
56
  ],
54
57
  })
55
58
  export class UiElementsModule {}
@@ -6,23 +6,22 @@ export * from './lib/checkbox/checkbox.component'
6
6
  export * from './lib/chips-input/chips-input.component'
7
7
  export * from './lib/copy-text-button/copy-text-button.component'
8
8
  export * from './lib/date-picker/date-picker.component'
9
- export * from './lib/date-range-picker/date-range-picker.component'
10
9
  export * from './lib/date-range-dropdown/date-range-dropdown.component'
10
+ export * from './lib/date-range-picker/date-range-picker.component'
11
11
  export * from './lib/drag-and-drop-file-input/drag-and-drop-file-input.component'
12
12
  export * from './lib/dropdown-multiselect/dropdown-multiselect.component'
13
13
  export * from './lib/dropdown-multiselect/dropdown-multiselect.model'
14
14
  export * from './lib/dropdown-selector/dropdown-selector.component'
15
15
  export * from './lib/dropdown-selector/dropdown-selector.model'
16
16
  export * from './lib/editable-label/editable-label.directive'
17
+ export * from './lib/file-input/file-input.component'
18
+ export * from './lib/files-drop/files-drop.directive'
17
19
  export * from './lib/navigation-button/navigation-button.component'
18
20
  export * from './lib/search-input/search-input.component'
19
21
  export * from './lib/star-toggle/star-toggle.component'
22
+ export * from './lib/switch-toggle/switch-toggle.component'
20
23
  export * from './lib/text-area/text-area.component'
21
24
  export * from './lib/text-input/text-input.component'
22
25
  export * from './lib/ui-inputs.module'
23
26
  export * from './lib/url-input/url-input.component'
24
27
  export * from './lib/viewport-intersector/viewport-intersector.component'
25
- export * from './lib/switch-toggle/switch-toggle.component'
26
- export * from './lib/file-input/file-input.component'
27
- export * from './lib/image-input/image-input.component'
28
- export * from './lib/url-input/url-input.component'
@@ -62,9 +62,10 @@ export class ButtonComponent {
62
62
  return `${this.btnClass} ${this.extraClass}`
63
63
  }
64
64
 
65
- handleClick(event: Event) {
65
+ handleClick(event: MouseEvent) {
66
66
  this.buttonClick.emit()
67
67
  event.preventDefault()
68
+ ;(event.currentTarget as HTMLElement).blur()
68
69
  propagateToDocumentOnly(event)
69
70
  }
70
71
  }
@@ -48,10 +48,10 @@ import { iconoirCloudUpload, iconoirFramePlusIn } from '@ng-icons/iconoir'
48
48
  export class FileInputComponent {
49
49
  @Input() maxSizeMB: number
50
50
  @Input() uploadProgress?: number
51
- @Input() disabled? = false
52
51
  @Output() fileChange: EventEmitter<File> = new EventEmitter()
53
52
  @Output() urlChange: EventEmitter<string> = new EventEmitter()
54
53
  @Output() uploadCancel: EventEmitter<void> = new EventEmitter()
54
+ @Input() disabled? = false
55
55
 
56
56
  dragFilesOver = false
57
57
 
@@ -1,32 +1,16 @@
1
+ import { OverlayModule } from '@angular/cdk/overlay'
2
+ import { CommonModule } from '@angular/common'
1
3
  import { NgModule } from '@angular/core'
2
4
  import { FormsModule, ReactiveFormsModule } from '@angular/forms'
3
- import { UtilSharedModule } from '../../../../../libs/util/shared/src'
4
- import { TranslateModule } from '@ngx-translate/core'
5
- import { TagInputModule } from 'ngx-chips'
6
- import { NgxDropzoneModule } from 'ngx-dropzone'
7
- import { ButtonComponent } from './button/button.component'
8
- import { BadgeComponent } from './badge/badge.component'
9
- import { ChipsInputComponent } from './chips-input/chips-input.component'
10
- import { DragAndDropFileInputComponent } from './drag-and-drop-file-input/drag-and-drop-file-input.component'
11
- import { DropdownSelectorComponent } from './dropdown-selector/dropdown-selector.component'
12
- import { TextAreaComponent } from './text-area/text-area.component'
13
5
  import { MatAutocompleteModule } from '@angular/material/autocomplete'
14
- import { DropdownMultiselectComponent } from './dropdown-multiselect/dropdown-multiselect.component'
15
- import { UiWidgetsModule } from '../../../../../libs/ui/widgets/src'
16
- import { OverlayModule } from '@angular/cdk/overlay'
17
6
  import { MatCheckboxModule } from '@angular/material/checkbox'
18
- import { ViewportIntersectorComponent } from './viewport-intersector/viewport-intersector.component'
19
- import { CheckToggleComponent } from './check-toggle/check-toggle.component'
20
- import { MatTooltipModule } from '@angular/material/tooltip'
21
- import { CommonModule } from '@angular/common'
22
- import { CheckboxComponent } from './checkbox/checkbox.component'
23
- import { DateRangePickerComponent } from './date-range-picker/date-range-picker.component'
7
+ import { MatNativeDateModule } from '@angular/material/core'
8
+ import { MatDatepickerModule } from '@angular/material/datepicker'
24
9
  import { MatFormFieldModule } from '@angular/material/form-field'
25
10
  import { MatInputModule } from '@angular/material/input'
26
- import { MatDatepickerModule } from '@angular/material/datepicker'
27
- import { MatNativeDateModule } from '@angular/material/core'
28
- import { EditableLabelDirective } from './editable-label/editable-label.directive'
29
- import { ImageInputComponent } from './image-input/image-input.component'
11
+ import { MatTooltipModule } from '@angular/material/tooltip'
12
+ import { UiWidgetsModule } from '../../../../../libs/ui/widgets/src'
13
+ import { UtilSharedModule } from '../../../../../libs/util/shared/src'
30
14
  import {
31
15
  NgIconComponent,
32
16
  provideIcons,
@@ -37,6 +21,21 @@ import {
37
21
  matExpandLess,
38
22
  matExpandMore,
39
23
  } from '@ng-icons/material-icons/baseline'
24
+ import { TranslateModule } from '@ngx-translate/core'
25
+ import { TagInputModule } from 'ngx-chips'
26
+ import { NgxDropzoneModule } from 'ngx-dropzone'
27
+ import { BadgeComponent } from './badge/badge.component'
28
+ import { ButtonComponent } from './button/button.component'
29
+ import { CheckToggleComponent } from './check-toggle/check-toggle.component'
30
+ import { CheckboxComponent } from './checkbox/checkbox.component'
31
+ import { ChipsInputComponent } from './chips-input/chips-input.component'
32
+ import { DateRangePickerComponent } from './date-range-picker/date-range-picker.component'
33
+ import { DragAndDropFileInputComponent } from './drag-and-drop-file-input/drag-and-drop-file-input.component'
34
+ import { DropdownMultiselectComponent } from './dropdown-multiselect/dropdown-multiselect.component'
35
+ import { DropdownSelectorComponent } from './dropdown-selector/dropdown-selector.component'
36
+ import { EditableLabelDirective } from './editable-label/editable-label.directive'
37
+ import { TextAreaComponent } from './text-area/text-area.component'
38
+ import { ViewportIntersectorComponent } from './viewport-intersector/viewport-intersector.component'
40
39
 
41
40
  @NgModule({
42
41
  declarations: [
@@ -66,7 +65,6 @@ import {
66
65
  EditableLabelDirective,
67
66
  TextAreaComponent,
68
67
  ButtonComponent,
69
- ImageInputComponent,
70
68
  DropdownSelectorComponent,
71
69
  DateRangePickerComponent,
72
70
  CheckToggleComponent,
@@ -95,7 +93,6 @@ import {
95
93
  CheckboxComponent,
96
94
  DateRangePickerComponent,
97
95
  EditableLabelDirective,
98
- ImageInputComponent,
99
96
  BadgeComponent,
100
97
  ],
101
98
  })