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
@@ -1,7 +1,7 @@
1
1
  <span class="w-full inline-block relative">
2
2
  <input
3
3
  #input
4
- class="gn-ui-text-input px-[var(--text-padding)]"
4
+ class="gn-ui-text-input gn-ui-url-input px-[var(--text-padding)]"
5
5
  [ngClass]="extraClass"
6
6
  type="url"
7
7
  [value]="inputValue"
@@ -21,12 +21,14 @@
21
21
  <ng-icon name="iconoirLink"></ng-icon>
22
22
  </div>
23
23
  <gn-ui-button
24
- *ngIf="showUploadButton"
24
+ *ngIf="showValidateButton"
25
25
  extraClass="absolute inset-y-[var(--side-padding)] right-[var(--side-padding)]"
26
26
  type="primary"
27
27
  [disabled]="disabled || input.value === '' || !isValidUrl(input.value)"
28
28
  (buttonClick)="handleUpload(input)"
29
29
  >
30
- <ng-icon name="iconoirArrowUp"> </ng-icon>
30
+ <ng-content>
31
+ <ng-icon name="iconoirArrowUp"></ng-icon>
32
+ </ng-content>
31
33
  </gn-ui-button>
32
34
  </span>
@@ -4,7 +4,9 @@ import {
4
4
  Component,
5
5
  EventEmitter,
6
6
  Input,
7
+ OnChanges,
7
8
  Output,
9
+ SimpleChanges,
8
10
  } from '@angular/core'
9
11
  import { CommonModule } from '@angular/common'
10
12
  import { ButtonComponent } from '../button/button.component'
@@ -29,7 +31,7 @@ import { iconoirArrowUp, iconoirLink } from '@ng-icons/iconoir'
29
31
  ],
30
32
  changeDetection: ChangeDetectionStrategy.OnPush,
31
33
  })
32
- export class UrlInputComponent {
34
+ export class UrlInputComponent implements OnChanges {
33
35
  @Input() set value(v: string) {
34
36
  // we're making sure to only update the input if the URL representation of it has changed; otherwise we keep it identical
35
37
  // to avoid glitches when starting to write a URL and having some characters added/replaced automatically
@@ -45,7 +47,7 @@ export class UrlInputComponent {
45
47
  @Input() extraClass = ''
46
48
  @Input() placeholder = 'https://'
47
49
  @Input() disabled: boolean
48
- @Input() showUploadButton = true
50
+ @Input() showValidateButton = true
49
51
 
50
52
  /**
51
53
  * This will emit null if the field is emptied
@@ -57,6 +59,12 @@ export class UrlInputComponent {
57
59
 
58
60
  constructor(private cd: ChangeDetectorRef) {}
59
61
 
62
+ ngOnChanges(changes: SimpleChanges) {
63
+ if (changes['value']) {
64
+ this.inputValue = changes['value'].currentValue
65
+ }
66
+ }
67
+
60
68
  handleInput(event: Event) {
61
69
  const value = (event.target as HTMLInputElement).value
62
70
  this.inputValue = value
@@ -31,6 +31,11 @@
31
31
  *ngFor="let item of items"
32
32
  (click)="handleRowClick(item)"
33
33
  data-cy="table-row"
34
+ [title]="
35
+ !item.extras?.edit && !isDraftPage
36
+ ? ('editor.record.lock.reason' | translate)
37
+ : ''
38
+ "
34
39
  >
35
40
  <div
36
41
  class="relative h-0"
@@ -44,7 +49,13 @@
44
49
  </div>
45
50
  <ng-container *ngFor="let column of columns">
46
51
  <div
47
- class="table-row-cell px-3 py-1.5 flex items-center bg-white transition-colors duration-75 truncate group-hover:text-main group-hover:bg-gray-50 border-b border-gray-200"
52
+ class="table-row-cell px-3 py-1.5 flex items-center bg-white transition-colors duration-75 truncate border-b border-gray-200"
53
+ [ngClass]="{
54
+ 'text-purple-light cursor-default':
55
+ !item.extras?.edit && !isDraftPage,
56
+ 'group-hover:text-main group-hover:bg-gray-50':
57
+ item.extras?.edit || isDraftPage,
58
+ }"
48
59
  >
49
60
  <ng-container
50
61
  *ngTemplateOutlet="column.cell; context: { $implicit: item }"
@@ -9,12 +9,9 @@ import {
9
9
  } from '@angular/core'
10
10
  import { InteractiveTableColumnComponent } from './interactive-table-column/interactive-table-column.component'
11
11
  import { CommonModule } from '@angular/common'
12
- import {
13
- NgIconComponent,
14
- provideIcons,
15
- provideNgIconsConfig,
16
- } from '@ng-icons/core'
12
+ import { NgIconComponent, provideIcons } from '@ng-icons/core'
17
13
  import { iconoirNavArrowDown, iconoirNavArrowUp } from '@ng-icons/iconoir'
14
+ import { TranslateModule } from '@ngx-translate/core'
18
15
 
19
16
  @Component({
20
17
  selector: 'gn-ui-interactive-table',
@@ -22,7 +19,7 @@ import { iconoirNavArrowDown, iconoirNavArrowUp } from '@ng-icons/iconoir'
22
19
  styleUrls: ['./interactive-table.component.css'],
23
20
  changeDetection: ChangeDetectionStrategy.OnPush,
24
21
  standalone: true,
25
- imports: [CommonModule, InteractiveTableColumnComponent, NgIconComponent],
22
+ imports: [CommonModule, NgIconComponent, TranslateModule],
26
23
  providers: [provideIcons({ iconoirNavArrowDown, iconoirNavArrowUp })],
27
24
  })
28
25
  export class InteractiveTableComponent {
@@ -30,6 +27,7 @@ export class InteractiveTableComponent {
30
27
  columns: QueryList<InteractiveTableColumnComponent>
31
28
 
32
29
  @Input() items: unknown[] = []
30
+ @Input() isDraftPage = false
33
31
  @Output() itemClick = new EventEmitter<unknown>()
34
32
 
35
33
  get gridStyle() {
@@ -1,11 +1,18 @@
1
1
  <gn-ui-interactive-table
2
2
  [items]="records"
3
+ [isDraftPage]="isDraftPage"
3
4
  (itemClick)="handleRecordClick($event)"
4
5
  >
5
6
  <!-- SELECTED COLUMN -->
6
7
  <gn-ui-interactive-table-column [width]="'3rem'">
7
- <ng-template #cell let-item>
8
+ <ng-template #cell let-item let-i="index">
9
+ <ng-icon
10
+ name="iconoirLock"
11
+ class="text-purple"
12
+ *ngIf="!item.extras?.edit && !isDraftPage"
13
+ ></ng-icon>
8
14
  <gn-ui-checkbox
15
+ *ngIf="item.extras?.edit || isDraftPage"
9
16
  [checked]="isChecked(item)"
10
17
  (changed)="handleRecordSelectedChange($event, item)"
11
18
  class="-m-2"
@@ -102,9 +109,9 @@
102
109
  <ng-template #cell let-item>
103
110
  <span class="text-xs">
104
111
  {{
105
- (isUnsavedDraft(item)
106
- ? 'record.metadata.status.notPublished'
107
- : 'record.metadata.status.published'
112
+ (item.extras?.['isPublishedToAll']
113
+ ? 'record.metadata.status.published'
114
+ : 'record.metadata.status.notPublished'
108
115
  ) | translate
109
116
  }}</span
110
117
  >
@@ -123,7 +130,11 @@
123
130
  </ng-template>
124
131
  <ng-template #cell let-item>
125
132
  <div class="flex text-left w-full text-xs">
126
- {{ isUnsavedDraft(item) ? '-' : dateToString(item.recordUpdated) }}
133
+ {{
134
+ item.extras?.['isPublishedToAll']
135
+ ? dateToString(item.recordUpdated)
136
+ : '-'
137
+ }}
127
138
  </div>
128
139
  </ng-template>
129
140
  </gn-ui-interactive-table-column>
@@ -138,8 +149,14 @@
138
149
  (buttonClick)="openActionMenu(item, template)"
139
150
  type="light"
140
151
  data-test="record-menu-button"
152
+ [disabled]="!item.extras?.edit && !isDraftPage"
141
153
  >
142
- <ng-icon name="matMoreVert"></ng-icon>
154
+ <ng-icon
155
+ [ngClass]="{
156
+ 'text-purple-light': !item.extras?.edit && !isDraftPage,
157
+ }"
158
+ name="matMoreVert"
159
+ ></ng-icon>
143
160
  </gn-ui-button>
144
161
  <ng-template #template>
145
162
  <gn-ui-action-menu
@@ -30,7 +30,7 @@ import {
30
30
  import { TranslateModule } from '@ngx-translate/core'
31
31
  import { ActionMenuComponent } from './action-menu/action-menu.component'
32
32
  import { NgIconComponent, provideIcons } from '@ng-icons/core'
33
- import { iconoirUser } from '@ng-icons/iconoir'
33
+ import { iconoirUser, iconoirLock } from '@ng-icons/iconoir'
34
34
  import {
35
35
  CdkConnectedOverlay,
36
36
  CdkOverlayOrigin,
@@ -55,9 +55,8 @@ import { matMoreVert } from '@ng-icons/material-icons/baseline'
55
55
  ActionMenuComponent,
56
56
  NgIconComponent,
57
57
  CdkOverlayOrigin,
58
- CdkConnectedOverlay,
59
58
  ],
60
- providers: [provideIcons({ iconoirUser, matMoreVert })],
59
+ providers: [provideIcons({ iconoirUser, iconoirLock, matMoreVert })],
61
60
  })
62
61
  export class ResultsTableComponent {
63
62
  @Input() records: CatalogRecord[] = []
@@ -65,8 +64,8 @@ export class ResultsTableComponent {
65
64
  @Input() sortOrder: SortByField = null
66
65
  @Input() hasDraft: (record: CatalogRecord) => boolean = () => false
67
66
  @Input() canDuplicate: (record: CatalogRecord) => boolean = () => true
68
- @Input() isUnsavedDraft: (record: CatalogRecord) => boolean = () => true
69
67
  @Input() canDelete: (record: CatalogRecord) => boolean = () => true
68
+ @Input() isDraftPage = false
70
69
 
71
70
  // emits the column (field) as well as the order
72
71
  @Output() sortByChange = new EventEmitter<[string, 'asc' | 'desc']>()
@@ -170,8 +169,9 @@ export class ResultsTableComponent {
170
169
  return getBadgeColor(format)
171
170
  }
172
171
 
173
- handleRecordClick(item: unknown) {
174
- this.recordClick.emit(item as CatalogRecord)
172
+ handleRecordClick(item: CatalogRecord) {
173
+ if (item?.extras?.edit || this.isDraftPage)
174
+ this.recordClick.emit(item as CatalogRecord)
175
175
  }
176
176
 
177
177
  handleDuplicate(item: unknown) {
@@ -1,5 +1,14 @@
1
1
  import { marker } from '@biesbjerg/ngx-translate-extract-marker'
2
- import { DatasetOnlineResource } from '../../../../../../libs/common/domain/src/lib/model/record'
2
+ import {
3
+ DatasetOnlineResource,
4
+ ServiceProtocol,
5
+ } from '../../../../../../libs/common/domain/src/lib/model/record'
6
+ import {
7
+ OgcApiEndpoint,
8
+ WfsEndpoint,
9
+ WmsEndpoint,
10
+ WmtsEndpoint,
11
+ } from '@camptocamp/ogc-client'
3
12
 
4
13
  marker('downloads.wfs.featuretype.not.found')
5
14
 
@@ -242,6 +251,44 @@ export function getLinkLabel(link: DatasetOnlineResource): string {
242
251
  return format ? `${label} (${format})` : label
243
252
  }
244
253
 
254
+ export async function getLayers(url: string, serviceProtocol: ServiceProtocol) {
255
+ switch (serviceProtocol) {
256
+ case 'ogcFeatures': {
257
+ const layers = await new OgcApiEndpoint(url).allCollections
258
+ return layers
259
+ }
260
+ case 'wfs': {
261
+ const endpointWfs = await new WfsEndpoint(url).isReady()
262
+ return endpointWfs.getFeatureTypes()
263
+ }
264
+ case 'wms': {
265
+ const endpointWms = await new WmsEndpoint(url).isReady()
266
+ return endpointWms
267
+ .getLayers()
268
+ .flatMap(wmsLayerFlatten)
269
+ .filter((l) => l.name)
270
+ }
271
+ case 'wmts': {
272
+ const endpointWmts = await new WmtsEndpoint(url).isReady()
273
+ return endpointWmts.getLayers()
274
+ }
275
+ default:
276
+ return undefined
277
+ }
278
+ }
279
+
280
+ function wmsLayerFlatten(layerFull) {
281
+ const layer = {
282
+ title: layerFull.title,
283
+ name: layerFull.name,
284
+ abstract: layerFull.abstract,
285
+ }
286
+
287
+ return 'children' in layerFull && Array.isArray(layerFull.children)
288
+ ? [layer, ...layerFull.children.flatMap(wmsLayerFlatten)]
289
+ : [layer]
290
+ }
291
+
245
292
  export function getMimeTypeForFormat(format: FileFormat): string | null {
246
293
  return format in FORMATS ? FORMATS[format.toLowerCase()].mimeTypes[0] : null
247
294
  }
@@ -44,6 +44,8 @@ module.exports = {
44
44
  800: '#8a2c0d',
45
45
  900: '#73230d',
46
46
  },
47
+ purple: '#9747FF',
48
+ 'purple-light': '#DDC3FF',
47
49
  },
48
50
  fontFamily: {
49
51
  sans: 'var(--font-family-main, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji")',
@@ -139,6 +139,7 @@
139
139
  "datahub.search.back": "Zurück",
140
140
  "datahub.search.filter.all": "Alle",
141
141
  "datahub.search.filter.generatedByAPI": "Generiert durch eine API",
142
+ "datahub.search.filter.generatedByWfs": "",
142
143
  "datahub.search.filter.others": "Andere",
143
144
  "dataset.error.http": "Die Daten konnten aufgrund eines HTTP-Fehlers nicht geladen werden: \"{ info }\"",
144
145
  "dataset.error.network": "Die Daten konnten aufgrund eines Netzwerkfehlers oder CORS-Beschränkungen nicht geladen werden: \"{ info }\"",
@@ -171,16 +172,25 @@
171
172
  "domain.record.status.ongoing": "Kontinuierliche Aktualisierung",
172
173
  "domain.record.status.removed": "Entfernt",
173
174
  "domain.record.status.under_development": "In Erstellung",
174
- "domain.record.updateFrequency.asNeeded": "Nach Bedarf",
175
- "domain.record.updateFrequency.continual": "Fortlaufend",
176
- "domain.record.updateFrequency.day": "{count, plural, =0{0} one{Ein} other{{count}}} mal am Tag",
177
- "domain.record.updateFrequency.irregular": "Unregelmäßig",
178
- "domain.record.updateFrequency.month": "{count, plural, =0{0} one{Ein} other{{count}}} mal im Monat",
179
- "domain.record.updateFrequency.notPlanned": "Nicht geplant",
180
- "domain.record.updateFrequency.periodic": "Regelmäßig",
181
- "domain.record.updateFrequency.unknown": "Unbekannt",
182
- "domain.record.updateFrequency.week": "{count, plural, =0{0} one{Ein} other{{count}}} mal in der Woche",
183
- "domain.record.updateFrequency.year": "{count, plural, =0{0} one{Ein} other{{count}}} mal im Jahr",
175
+ "domain.record.updateFrequency.annually": "Daten werden jedes Jahr aktualisiert",
176
+ "domain.record.updateFrequency.asNeeded": "Daten werden nach Bedarf aktualisiert",
177
+ "domain.record.updateFrequency.biannually": "Daten werden zweimal im Jahr aktualisiert",
178
+ "domain.record.updateFrequency.biennially": "Daten werden alle 2 Jahre aktualisiert",
179
+ "domain.record.updateFrequency.continual": "Daten werden wiederholt und häufig aktualisiert",
180
+ "domain.record.updateFrequency.daily": "Daten werden täglich aktualisiert",
181
+ "domain.record.updateFrequency.day": "{count, plural, =0{0 Mal} one{Einmal} other{{count} Mal}} pro Tag",
182
+ "domain.record.updateFrequency.fortnightly": "Daten werden alle zwei Wochen aktualisiert",
183
+ "domain.record.updateFrequency.irregular": "Daten werden in unregelmäßigen Abständen aktualisiert",
184
+ "domain.record.updateFrequency.month": "{count, plural, =0{0 Mal} one{Einmal} other{{count} Mal}} pro Monat",
185
+ "domain.record.updateFrequency.monthly": "Daten werden monatlich aktualisiert",
186
+ "domain.record.updateFrequency.notPlanned": "Es gibt keine Pläne, die Daten zu aktualisieren",
187
+ "domain.record.updateFrequency.periodic": "Daten werden in regelmäßigen Abständen aktualisiert",
188
+ "domain.record.updateFrequency.quarterly": "Daten werden alle drei Monate aktualisiert",
189
+ "domain.record.updateFrequency.semimonthly": "Daten werden zweimal im Monat aktualisiert",
190
+ "domain.record.updateFrequency.unknown": "Die Häufigkeit der Datenaktualisierung ist unbekannt",
191
+ "domain.record.updateFrequency.week": "{count, plural, =0{0 Mal} one{Einmal} other{{count} Mal}} pro Woche",
192
+ "domain.record.updateFrequency.weekly": "Daten werden wöchentlich aktualisiert",
193
+ "domain.record.updateFrequency.year": "{count, plural, =0{0 Mal} one{Einmal} other{{count} Mal}} pro Jahr",
184
194
  "downloads.format.unknown": "unbekannt",
185
195
  "downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden",
186
196
  "dropFile": "Datei ablegen",
@@ -195,6 +205,9 @@
195
205
  "editor.record.deleteError.title": "Fehler beim Löschen des Datensatzes",
196
206
  "editor.record.deleteSuccess.body": "",
197
207
  "editor.record.deleteSuccess.title": "",
208
+ "editor.record.error.back": "",
209
+ "editor.record.error.explanation": "",
210
+ "editor.record.error.message": "",
198
211
  "editor.record.form.bottomButtons.comeBackLater": "",
199
212
  "editor.record.form.bottomButtons.next": "",
200
213
  "editor.record.form.bottomButtons.previous": "",
@@ -216,7 +229,6 @@
216
229
  "editor.record.form.field.constraintsShortcuts": "",
217
230
  "editor.record.form.field.contacts.noContact": "",
218
231
  "editor.record.form.field.contactsForResource.noContact": "",
219
- "editor.record.form.field.draft.only.disabled": "Dieses Feld wird aktiviert, sobald die Daten veröffentlicht wurden.",
220
232
  "editor.record.form.field.keywords": "Schlagwörter",
221
233
  "editor.record.form.field.legalConstraints": "Rechtliche Einschränkung",
222
234
  "editor.record.form.field.license": "Lizenz",
@@ -226,6 +238,11 @@
226
238
  "editor.record.form.field.onlineResource.dialogTitle": "",
227
239
  "editor.record.form.field.onlineResource.edit.description": "",
228
240
  "editor.record.form.field.onlineResource.edit.protocol": "",
241
+ "editor.record.form.field.onlineResource.edit.identifier.error": "Schichten konnten nicht vom Protokoll abgerufen werden",
242
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Ebenenname",
243
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Prozessname",
244
+ "editor.record.form.field.onlineResource.edit.identifier.select.label": "Wählen Sie eine Ebene",
245
+ "editor.record.form.field.onlineResource.edit.identifier.submit": "Link zum Dienst",
229
246
  "editor.record.form.field.onlineResource.edit.title": "",
230
247
  "editor.record.form.field.onlineResource.fileSize": "",
231
248
  "editor.record.form.field.onlineResource.modify": "",
@@ -242,6 +259,7 @@
242
259
  "editor.record.form.field.spatialExtents": "",
243
260
  "editor.record.form.field.temporalExtents": "Zeitlicher Umfang",
244
261
  "editor.record.form.field.title": "Metadaten-Titel",
262
+ "editor.record.form.field.title.placeholder": "Geben Sie einen Titel ein",
245
263
  "editor.record.form.field.uniqueIdentifier": "Eindeutige Kennung (ID)",
246
264
  "editor.record.form.field.updateFrequency": "Aktualisierungshäufigkeit",
247
265
  "editor.record.form.license.cc-by": "",
@@ -274,7 +292,7 @@
274
292
  "editor.record.form.temporalExtents.addRange": "Zeitraum",
275
293
  "editor.record.form.temporalExtents.date": "Datum",
276
294
  "editor.record.form.temporalExtents.range": "Datumsbereich",
277
- "editor.record.form.updateFrequency.planned": "Die Daten sollten regelmäßig aktualisiert werden.",
295
+ "editor.record.form.updateFrequency.planned": "Dieses Dataset wird regelmäßig aktualisiert.",
278
296
  "editor.record.importFromExternalFile.failure.body": "",
279
297
  "editor.record.importFromExternalFile.failure.title": "",
280
298
  "editor.record.importFromExternalFile.success.body": "",
@@ -282,6 +300,7 @@
282
300
  "editor.record.loadError.body": "Der Datensatz konnte nicht geladen werden:",
283
301
  "editor.record.loadError.closeMessage": "Verstanden",
284
302
  "editor.record.loadError.title": "Fehler beim Laden des Datensatzes",
303
+ "editor.record.lock.reason": "",
285
304
  "editor.record.onlineResource.protocol.other": "",
286
305
  "editor.record.onlineResourceError.body": "",
287
306
  "editor.record.onlineResourceError.closeMessage": "",
@@ -302,9 +321,9 @@
302
321
  "editor.record.resourceError.body": "",
303
322
  "editor.record.resourceError.closeMessage": "",
304
323
  "editor.record.resourceError.title": "",
305
- "editor.record.saveStatus.asDraftOnly": "Nur als Entwurf gespeichert - noch nicht veröffentlicht",
306
- "editor.record.saveStatus.draftWithChangesPending": "Als Entwurf gespeichert - Änderungen stehen aus",
307
- "editor.record.saveStatus.recordUpToDate": "Datensatz ist auf dem neuesten Stand",
324
+ "editor.record.saveStatus.draftWithChangesPending": "Gespeichert - nicht publizierte Unterschiede",
325
+ "editor.record.saveStatus.recordNotPublished": "",
326
+ "editor.record.saveStatus.recordUpToDate": "Gespeichert - auf dem neuesten Stand",
308
327
  "editor.record.undo.confirmation.cancelText": "",
309
328
  "editor.record.undo.confirmation.confirmText": "",
310
329
  "editor.record.undo.confirmation.message": "",
@@ -408,14 +427,32 @@
408
427
  "record.metadata.api.form.closeButton": "Schließen",
409
428
  "record.metadata.api.form.closeForm": "Formular schließen",
410
429
  "record.metadata.api.form.create": "Ihre Anfrage erstellen",
430
+ "record.metadata.api.form.crsTitle": "",
431
+ "record.metadata.api.form.crsTooltip": "",
411
432
  "record.metadata.api.form.customUrl": "Benutzerdefinierte URL",
433
+ "record.metadata.api.form.filter": "",
434
+ "record.metadata.api.form.filterDescription": "",
435
+ "record.metadata.api.form.formatTitle": "",
436
+ "record.metadata.api.form.formatTooltip": "",
437
+ "record.metadata.api.form.items": "",
438
+ "record.metadata.api.form.itemsDescription": "",
439
+ "record.metadata.api.form.itemsTooltip": "",
412
440
  "record.metadata.api.form.limit": "Anzahl der Datensätze",
413
441
  "record.metadata.api.form.limit.all": "Alle",
442
+ "record.metadata.api.form.nextPage": "",
443
+ "record.metadata.api.form.nextPageTooltip": "",
414
444
  "record.metadata.api.form.offset": "Anzahl des ersten Datensatzes",
415
445
  "record.metadata.api.form.openForm": "Formular öffnen",
446
+ "record.metadata.api.form.paginationDescription": "",
447
+ "record.metadata.api.form.previousPage": "",
448
+ "record.metadata.api.form.previousPageTooltip": "",
449
+ "record.metadata.api.form.productTooltip": "",
416
450
  "record.metadata.api.form.reset": "Zurücksetzen",
417
- "record.metadata.api.form.title": "Benutzerdefinierte URL generieren",
451
+ "record.metadata.api.form.resetTooltip": "",
418
452
  "record.metadata.api.form.type": "Ausgabeformat",
453
+ "record.metadata.api.form.zoneTitle": "",
454
+ "record.metadata.api.form.zoneTooltip": "",
455
+ "record.metadata.api.gpfdl": "",
419
456
  "record.metadata.catalog": "Katalog",
420
457
  "record.metadata.contact": "Kontakt",
421
458
  "record.metadata.creation": "Erstellungsdatum",
@@ -480,7 +517,6 @@
480
517
  "record.tab.chart": "Diagramm",
481
518
  "record.tab.data": "Tabelle",
482
519
  "record.tab.map": "Karte",
483
- "record.was.created.time": "erstellte diesen Datensatz {time}",
484
520
  "records": "Datensätze",
485
521
  "results.layout.selectOne": "Layout auswählen",
486
522
  "results.records.hits.displayedOn": "{displayed, plural, =0{Kein Datensatz.} one{1 Datensatz} other{{displayed} Datensätze }} {hits, plural, other{angezeigt von {hits} insgesamt.}}",
@@ -139,6 +139,7 @@
139
139
  "datahub.search.back": "Back",
140
140
  "datahub.search.filter.all": "All",
141
141
  "datahub.search.filter.generatedByAPI": "Generated by an API",
142
+ "datahub.search.filter.generatedByWfs": "",
142
143
  "datahub.search.filter.others": "Others",
143
144
  "dataset.error.http": "The data could not be loaded because of an HTTP error: \"{ info }\"",
144
145
  "dataset.error.network": "The data could not be loaded because of a network error or CORS limitations: \"{ info }\"",
@@ -171,15 +172,24 @@
171
172
  "domain.record.status.ongoing": "Ongoing",
172
173
  "domain.record.status.removed": "Removed",
173
174
  "domain.record.status.under_development": "Under development",
174
- "domain.record.updateFrequency.asNeeded": "As needed",
175
- "domain.record.updateFrequency.continual": "Continual",
175
+ "domain.record.updateFrequency.annually": "Data is updated every year",
176
+ "domain.record.updateFrequency.asNeeded": "Data is updated as deemed necessary",
177
+ "domain.record.updateFrequency.biannually": "Data is updated twice each year",
178
+ "domain.record.updateFrequency.biennially": "Data is updated every 2 years",
179
+ "domain.record.updateFrequency.continual": "Data is repeatedly and frequently updated",
180
+ "domain.record.updateFrequency.daily": "Data is updated each day",
176
181
  "domain.record.updateFrequency.day": "{count, plural, =0{0 times} one{Once} other{{count} times}} per day",
177
- "domain.record.updateFrequency.irregular": "Irregular",
182
+ "domain.record.updateFrequency.fortnightly": "Data is updated every two weeks",
183
+ "domain.record.updateFrequency.irregular": "Data is updated in intervals that are uneven in duration",
178
184
  "domain.record.updateFrequency.month": "{count, plural, =0{0 times} one{Once} other{{count} times}} per month",
179
- "domain.record.updateFrequency.notPlanned": "Not planned",
180
- "domain.record.updateFrequency.periodic": "Periodic",
181
- "domain.record.updateFrequency.unknown": "Unknown",
185
+ "domain.record.updateFrequency.monthly": "Data is updated each month",
186
+ "domain.record.updateFrequency.notPlanned": "There are no plans to update the data",
187
+ "domain.record.updateFrequency.periodic": "Data is updated at regular intervals",
188
+ "domain.record.updateFrequency.quarterly": "Data is updated every three months",
189
+ "domain.record.updateFrequency.semimonthly": "Data is updated twice a month",
190
+ "domain.record.updateFrequency.unknown": "Frequency of maintenance for the data is not known",
182
191
  "domain.record.updateFrequency.week": "{count, plural, =0{0 times} one{Once} other{{count} times}} per week",
192
+ "domain.record.updateFrequency.weekly": "Data is updated on a weekly basis",
183
193
  "domain.record.updateFrequency.year": "{count, plural, =0{0 times} one{Once} other{{count} times}} per year",
184
194
  "downloads.format.unknown": "Unknown",
185
195
  "downloads.wfs.featuretype.not.found": "The layer was not found",
@@ -195,6 +205,9 @@
195
205
  "editor.record.deleteError.title": "Error deleting dataset",
196
206
  "editor.record.deleteSuccess.body": "The dataset was successfully deleted!",
197
207
  "editor.record.deleteSuccess.title": "Delete success",
208
+ "editor.record.error.back": "Go back to the catalog",
209
+ "editor.record.error.explanation": "You might not have access to this record,<br> Or this link might not be valid.",
210
+ "editor.record.error.message": "Something went wrong",
198
211
  "editor.record.form.bottomButtons.comeBackLater": "Come back later",
199
212
  "editor.record.form.bottomButtons.next": "Next",
200
213
  "editor.record.form.bottomButtons.previous": "Previous",
@@ -216,7 +229,6 @@
216
229
  "editor.record.form.field.constraintsShortcuts": "",
217
230
  "editor.record.form.field.contacts.noContact": "Please provide at least one point of contact.",
218
231
  "editor.record.form.field.contactsForResource.noContact": "Please provide at least one point of contact responsible for the data.",
219
- "editor.record.form.field.draft.only.disabled": "This field will be enabled once the dataset has been published",
220
232
  "editor.record.form.field.keywords": "Keywords",
221
233
  "editor.record.form.field.legalConstraints": "Legal constraint",
222
234
  "editor.record.form.field.license": "License",
@@ -226,6 +238,11 @@
226
238
  "editor.record.form.field.onlineResource.dialogTitle": "Modify the dataset preview",
227
239
  "editor.record.form.field.onlineResource.edit.description": "Description",
228
240
  "editor.record.form.field.onlineResource.edit.protocol": "Protocol",
241
+ "editor.record.form.field.onlineResource.edit.identifier.error": "Unable to retrieve layers from protocol",
242
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder": "Layer name",
243
+ "editor.record.form.field.onlineResource.edit.identifier.placeholder.wps": "Process name",
244
+ "editor.record.form.field.onlineResource.edit.identifier.select.label": "Select a layer",
245
+ "editor.record.form.field.onlineResource.edit.identifier.submit": "Link to the service",
229
246
  "editor.record.form.field.onlineResource.edit.title": "Title",
230
247
  "editor.record.form.field.onlineResource.fileSize": "{sizeMB}MB",
231
248
  "editor.record.form.field.onlineResource.modify": "Modify",
@@ -242,6 +259,7 @@
242
259
  "editor.record.form.field.spatialExtents": "Spatial extents",
243
260
  "editor.record.form.field.temporalExtents": "Temporal extents",
244
261
  "editor.record.form.field.title": "Metadata title",
262
+ "editor.record.form.field.title.placeholder": "Enter a title",
245
263
  "editor.record.form.field.uniqueIdentifier": "Unique identifier",
246
264
  "editor.record.form.field.updateFrequency": "Update frequency",
247
265
  "editor.record.form.license.cc-by": "Creative Commons CC-BY",
@@ -274,7 +292,7 @@
274
292
  "editor.record.form.temporalExtents.addRange": "Time period",
275
293
  "editor.record.form.temporalExtents.date": "Date",
276
294
  "editor.record.form.temporalExtents.range": "Date range",
277
- "editor.record.form.updateFrequency.planned": "The data should be updated regularly",
295
+ "editor.record.form.updateFrequency.planned": "This dataset is updated regularly.",
278
296
  "editor.record.importFromExternalFile.failure.body": "Failure",
279
297
  "editor.record.importFromExternalFile.failure.title": "The dataset import failed: ",
280
298
  "editor.record.importFromExternalFile.success.body": "Import successful",
@@ -282,6 +300,7 @@
282
300
  "editor.record.loadError.body": "The dataset could not be loaded:",
283
301
  "editor.record.loadError.closeMessage": "Understood",
284
302
  "editor.record.loadError.title": "Error loading dataset",
303
+ "editor.record.lock.reason": "You are not an editor of the allowed groups",
285
304
  "editor.record.onlineResource.protocol.other": "Other",
286
305
  "editor.record.onlineResourceError.body": "An error happened while adding the resource:",
287
306
  "editor.record.onlineResourceError.closeMessage": "Understood",
@@ -302,9 +321,9 @@
302
321
  "editor.record.resourceError.body": "There was an issue with the dataset attachments:",
303
322
  "editor.record.resourceError.closeMessage": "Understood",
304
323
  "editor.record.resourceError.title": "Error with the dataset attachments",
305
- "editor.record.saveStatus.asDraftOnly": "Saved as draft only - not published yet",
306
- "editor.record.saveStatus.draftWithChangesPending": "Saved as draft - changes are pending",
307
- "editor.record.saveStatus.recordUpToDate": "Dataset is up to date",
324
+ "editor.record.saveStatus.draftWithChangesPending": "Saved - Unpublished differences",
325
+ "editor.record.saveStatus.recordNotPublished": "Saved - not published",
326
+ "editor.record.saveStatus.recordUpToDate": "Saved - Record up to date",
308
327
  "editor.record.undo.confirmation.cancelText": "Keep the changes",
309
328
  "editor.record.undo.confirmation.confirmText": "Discard the changes",
310
329
  "editor.record.undo.confirmation.message": "Are you sure you want to cancel the pending changes on this dataset ?",
@@ -408,13 +427,13 @@
408
427
  "record.metadata.api.form.closeButton": "Close",
409
428
  "record.metadata.api.form.closeForm": "Close the form",
410
429
  "record.metadata.api.form.create": "Create your request",
430
+ "record.metadata.api.form.crsTitle": "Coordinate System",
431
+ "record.metadata.api.form.crsTooltip": "Dropdown for selecting a coordinate reference system",
411
432
  "record.metadata.api.form.customUrl": "Custom URL",
412
433
  "record.metadata.api.form.filter": "Filters",
413
434
  "record.metadata.api.form.filterDescription": "Section for refining displayed elements",
414
435
  "record.metadata.api.form.formatTitle": "Format",
415
436
  "record.metadata.api.form.formatTooltip": "Dropdown for selecting a element format",
416
- "record.metadata.api.form.crsTitle": "Coordinate System",
417
- "record.metadata.api.form.crsTooltip": "Dropdown for selecting a coordinate reference system",
418
437
  "record.metadata.api.form.items": "Available Items",
419
438
  "record.metadata.api.form.itemsDescription": "List of items",
420
439
  "record.metadata.api.form.itemsTooltip": "Scroll to view all available items",
@@ -427,10 +446,9 @@
427
446
  "record.metadata.api.form.paginationDescription": "Pagination of displayed items",
428
447
  "record.metadata.api.form.previousPage": "Previous",
429
448
  "record.metadata.api.form.previousPageTooltip": "Go to the previous page",
449
+ "record.metadata.api.form.productTooltip": "",
430
450
  "record.metadata.api.form.reset": "Reset",
431
451
  "record.metadata.api.form.resetTooltip": "Reset all filters",
432
- "record.metadata.api.form.title": "Generate a custom URL",
433
- "record.metadata.api.form.title.gpf": "Download data",
434
452
  "record.metadata.api.form.type": "Output format",
435
453
  "record.metadata.api.form.zoneTitle": "Zone",
436
454
  "record.metadata.api.form.zoneTooltip": "Dropdown for selecting a geographic zone",
@@ -499,7 +517,6 @@
499
517
  "record.tab.chart": "Chart",
500
518
  "record.tab.data": "Table",
501
519
  "record.tab.map": "Map",
502
- "record.was.created.time": "created this dataset {time}",
503
520
  "records": "datasets",
504
521
  "results.layout.selectOne": "Results layout",
505
522
  "results.records.hits.displayedOn": "{displayed, plural, =0{No dataset.} one{1 } other{{displayed} }} {hits, plural, other{displayed on {hits} total.}}",