geonetwork-ui 2.4.1-dev.73bac9979 → 2.4.1-dev.89bb09dfa

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 (166) 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/repository/src/lib/gn4/gn4-repository.mjs +27 -16
  5. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  6. package/esm2022/libs/data-access/gn4/src/openapi/api/records.api.service.mjs +7 -1
  7. package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +3 -1
  8. package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +18 -14
  9. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +15 -5
  10. package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +10 -4
  11. package/esm2022/libs/feature/editor/src/lib/+state/editor.selectors.mjs +6 -5
  12. package/esm2022/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.mjs +3 -3
  13. package/esm2022/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.mjs +3 -3
  14. package/esm2022/libs/feature/editor/src/lib/components/import-record/import-record.component.mjs +2 -2
  15. package/esm2022/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.mjs +95 -12
  16. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.mjs +36 -23
  17. 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
  18. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.mjs +17 -12
  19. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.mjs +7 -13
  20. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.mjs +3 -3
  21. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +3 -3
  22. package/esm2022/libs/feature/editor/src/lib/components/record-form/record-form.component.mjs +3 -3
  23. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +11 -15
  24. package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +9 -5
  25. package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +3 -4
  26. package/esm2022/libs/ui/dataviz/src/lib/figure/figure.component.mjs +3 -3
  27. package/esm2022/libs/ui/elements/src/index.mjs +3 -2
  28. package/esm2022/libs/ui/elements/src/lib/image-input/image-input.component.mjs +213 -0
  29. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +19 -13
  30. package/esm2022/libs/ui/inputs/src/index.mjs +5 -6
  31. package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +2 -1
  32. package/esm2022/libs/ui/inputs/src/lib/file-input/file-input.component.mjs +5 -5
  33. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +19 -25
  34. package/esm2022/libs/ui/inputs/src/lib/url-input/url-input.component.mjs +6 -6
  35. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +9 -4
  36. package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +10 -10
  37. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +40 -1
  38. package/esm2022/translations/de.json +32 -6
  39. package/esm2022/translations/en.json +16 -9
  40. package/esm2022/translations/es.json +30 -4
  41. package/esm2022/translations/fr.json +16 -9
  42. package/esm2022/translations/it.json +246 -218
  43. package/esm2022/translations/nl.json +30 -4
  44. package/esm2022/translations/pt.json +30 -4
  45. package/fesm2022/geonetwork-ui.mjs +1473 -1144
  46. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  47. package/libs/api/metadata-converter/src/lib/gn4/gn4.converter.d.ts.map +1 -1
  48. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  49. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +1 -0
  50. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  51. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +4 -3
  52. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  53. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +4 -3
  54. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  55. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts +3 -0
  56. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts.map +1 -1
  57. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +10 -2
  58. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -1
  59. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts +6 -2
  60. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts.map +1 -1
  61. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +5 -2
  62. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
  63. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts +2 -1
  64. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -1
  65. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +2 -1
  66. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -1
  67. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts +24 -4
  68. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts.map +1 -1
  69. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.d.ts +4 -4
  70. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.d.ts.map +1 -1
  71. 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
  72. 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
  73. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.d.ts +6 -5
  74. 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
  75. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.d.ts +1 -4
  76. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.d.ts.map +1 -1
  77. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  78. package/libs/feature/editor/src/lib/services/editor.service.d.ts +1 -1
  79. package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
  80. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +0 -1
  81. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -1
  82. package/libs/ui/elements/src/index.d.ts +2 -1
  83. package/libs/ui/elements/src/index.d.ts.map +1 -1
  84. package/libs/ui/elements/src/lib/image-input/image-input.component.d.ts.map +1 -0
  85. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts +1 -1
  86. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
  87. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  88. package/libs/ui/inputs/src/index.d.ts +4 -5
  89. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  90. package/libs/ui/inputs/src/lib/button/button.component.d.ts +1 -1
  91. package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
  92. package/libs/ui/inputs/src/lib/file-input/file-input.component.d.ts +1 -1
  93. package/libs/ui/inputs/src/lib/file-input/file-input.component.d.ts.map +1 -1
  94. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +6 -7
  95. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
  96. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts +2 -2
  97. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts.map +1 -1
  98. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +2 -1
  99. package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -1
  100. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +3 -3
  101. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  102. package/libs/util/shared/src/lib/links/link-utils.d.ts +2 -1
  103. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  104. package/package.json +1 -1
  105. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.converter.ts +4 -3
  106. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +8 -1
  107. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +1 -0
  108. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +53 -27
  109. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +5 -4
  110. package/src/libs/common/fixtures/src/lib/elasticsearch/full-response.fixtures.ts +2 -2
  111. package/src/libs/common/fixtures/src/lib/elasticsearch/search-responses.fixtures.ts +16 -16
  112. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +163 -0
  113. package/src/libs/data-access/gn4/src/openapi/api/records.api.service.ts +24 -4
  114. package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +10 -1
  115. package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +57 -31
  116. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +15 -9
  117. package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +18 -12
  118. package/src/libs/feature/editor/src/lib/+state/editor.selectors.ts +13 -8
  119. package/src/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.html +1 -1
  120. package/src/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.html +1 -1
  121. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.html +62 -6
  122. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.ts +108 -4
  123. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.html +1 -1
  124. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.ts +31 -19
  125. 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
  126. 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
  127. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.html +12 -25
  128. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.ts +15 -10
  129. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.html +0 -9
  130. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.ts +3 -9
  131. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.html +6 -6
  132. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +3 -3
  133. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.html +3 -6
  134. package/src/libs/feature/editor/src/lib/fields.config.ts +10 -14
  135. package/src/libs/feature/editor/src/lib/services/editor.service.ts +18 -16
  136. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +0 -1
  137. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +0 -3
  138. package/src/libs/ui/dataviz/src/lib/figure/figure.component.html +1 -0
  139. package/src/libs/ui/elements/src/index.ts +2 -1
  140. package/src/libs/ui/{inputs → elements}/src/lib/image-input/image-input.component.html +4 -19
  141. package/src/libs/ui/{inputs → elements}/src/lib/image-input/image-input.component.ts +13 -9
  142. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +13 -10
  143. package/src/libs/ui/inputs/src/index.ts +4 -5
  144. package/src/libs/ui/inputs/src/lib/button/button.component.ts +2 -1
  145. package/src/libs/ui/inputs/src/lib/file-input/file-input.component.ts +1 -1
  146. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +22 -25
  147. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.html +5 -3
  148. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.ts +1 -1
  149. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +12 -1
  150. package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +4 -6
  151. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +23 -6
  152. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +6 -6
  153. package/src/libs/util/shared/src/lib/links/link-utils.ts +51 -1
  154. package/tailwind.base.config.js +2 -0
  155. package/translations/de.json +32 -6
  156. package/translations/en.json +16 -9
  157. package/translations/es.json +30 -4
  158. package/translations/fr.json +16 -9
  159. package/translations/it.json +246 -218
  160. package/translations/nl.json +30 -4
  161. package/translations/pt.json +30 -4
  162. package/translations/sk.json +30 -4
  163. package/esm2022/libs/ui/inputs/src/lib/image-input/image-input.component.mjs +0 -214
  164. package/libs/ui/inputs/src/lib/image-input/image-input.component.d.ts.map +0 -1
  165. /package/libs/ui/{inputs → elements}/src/lib/image-input/image-input.component.d.ts +0 -0
  166. /package/src/libs/ui/{inputs → elements}/src/lib/image-input/image-input.component.css +0 -0
@@ -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
  })
@@ -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>
@@ -45,7 +45,7 @@ export class UrlInputComponent {
45
45
  @Input() extraClass = ''
46
46
  @Input() placeholder = 'https://'
47
47
  @Input() disabled: boolean
48
- @Input() showUploadButton = true
48
+ @Input() showValidateButton = true
49
49
 
50
50
  /**
51
51
  * This will emit null if the field is emptied
@@ -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,47 @@ 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 = new WfsEndpoint(url)
262
+ await endpointWfs.isReady()
263
+ return endpointWfs.getFeatureTypes()
264
+ }
265
+ case 'wms': {
266
+ const endpointWms = new WmsEndpoint(url)
267
+ await endpointWms.isReady()
268
+ return endpointWms
269
+ .getLayers()
270
+ .flatMap(wmsLayerFlatten)
271
+ .filter((l) => l.name)
272
+ }
273
+ case 'wmts': {
274
+ const endpointWmts = new WmtsEndpoint(url)
275
+ await endpointWmts.isReady()
276
+ return endpointWmts.getLayers()
277
+ }
278
+ default:
279
+ return undefined
280
+ }
281
+ }
282
+
283
+ function wmsLayerFlatten(layerFull) {
284
+ const layer = {
285
+ title: layerFull.title,
286
+ name: layerFull.name,
287
+ abstract: layerFull.abstract,
288
+ }
289
+
290
+ return 'children' in layerFull && Array.isArray(layerFull.children)
291
+ ? [layer, ...layerFull.children.flatMap(wmsLayerFlatten)]
292
+ : [layer]
293
+ }
294
+
245
295
  export function getMimeTypeForFormat(format: FileFormat): string | null {
246
296
  return format in FORMATS ? FORMATS[format.toLowerCase()].mimeTypes[0] : null
247
297
  }
@@ -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 }\"",
@@ -204,6 +205,9 @@
204
205
  "editor.record.deleteError.title": "Fehler beim Löschen des Datensatzes",
205
206
  "editor.record.deleteSuccess.body": "",
206
207
  "editor.record.deleteSuccess.title": "",
208
+ "editor.record.error.back": "",
209
+ "editor.record.error.explanation": "",
210
+ "editor.record.error.message": "",
207
211
  "editor.record.form.bottomButtons.comeBackLater": "",
208
212
  "editor.record.form.bottomButtons.next": "",
209
213
  "editor.record.form.bottomButtons.previous": "",
@@ -225,7 +229,6 @@
225
229
  "editor.record.form.field.constraintsShortcuts": "",
226
230
  "editor.record.form.field.contacts.noContact": "",
227
231
  "editor.record.form.field.contactsForResource.noContact": "",
228
- "editor.record.form.field.draft.only.disabled": "Dieses Feld wird aktiviert, sobald die Daten veröffentlicht wurden.",
229
232
  "editor.record.form.field.keywords": "Schlagwörter",
230
233
  "editor.record.form.field.legalConstraints": "Rechtliche Einschränkung",
231
234
  "editor.record.form.field.license": "Lizenz",
@@ -235,6 +238,11 @@
235
238
  "editor.record.form.field.onlineResource.dialogTitle": "",
236
239
  "editor.record.form.field.onlineResource.edit.description": "",
237
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",
238
246
  "editor.record.form.field.onlineResource.edit.title": "",
239
247
  "editor.record.form.field.onlineResource.fileSize": "",
240
248
  "editor.record.form.field.onlineResource.modify": "",
@@ -292,6 +300,7 @@
292
300
  "editor.record.loadError.body": "Der Datensatz konnte nicht geladen werden:",
293
301
  "editor.record.loadError.closeMessage": "Verstanden",
294
302
  "editor.record.loadError.title": "Fehler beim Laden des Datensatzes",
303
+ "editor.record.lock.reason": "",
295
304
  "editor.record.onlineResource.protocol.other": "",
296
305
  "editor.record.onlineResourceError.body": "",
297
306
  "editor.record.onlineResourceError.closeMessage": "",
@@ -312,9 +321,9 @@
312
321
  "editor.record.resourceError.body": "",
313
322
  "editor.record.resourceError.closeMessage": "",
314
323
  "editor.record.resourceError.title": "",
315
- "editor.record.saveStatus.asDraftOnly": "Nur als Entwurf gespeichert - noch nicht veröffentlicht",
316
- "editor.record.saveStatus.draftWithChangesPending": "Als Entwurf gespeichert - Änderungen stehen aus",
317
- "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",
318
327
  "editor.record.undo.confirmation.cancelText": "",
319
328
  "editor.record.undo.confirmation.confirmText": "",
320
329
  "editor.record.undo.confirmation.message": "",
@@ -418,14 +427,32 @@
418
427
  "record.metadata.api.form.closeButton": "Schließen",
419
428
  "record.metadata.api.form.closeForm": "Formular schließen",
420
429
  "record.metadata.api.form.create": "Ihre Anfrage erstellen",
430
+ "record.metadata.api.form.crsTitle": "",
431
+ "record.metadata.api.form.crsTooltip": "",
421
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": "",
422
440
  "record.metadata.api.form.limit": "Anzahl der Datensätze",
423
441
  "record.metadata.api.form.limit.all": "Alle",
442
+ "record.metadata.api.form.nextPage": "",
443
+ "record.metadata.api.form.nextPageTooltip": "",
424
444
  "record.metadata.api.form.offset": "Anzahl des ersten Datensatzes",
425
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": "",
426
450
  "record.metadata.api.form.reset": "Zurücksetzen",
427
- "record.metadata.api.form.title": "Benutzerdefinierte URL generieren",
451
+ "record.metadata.api.form.resetTooltip": "",
428
452
  "record.metadata.api.form.type": "Ausgabeformat",
453
+ "record.metadata.api.form.zoneTitle": "",
454
+ "record.metadata.api.form.zoneTooltip": "",
455
+ "record.metadata.api.gpfdl": "",
429
456
  "record.metadata.catalog": "Katalog",
430
457
  "record.metadata.contact": "Kontakt",
431
458
  "record.metadata.creation": "Erstellungsdatum",
@@ -490,7 +517,6 @@
490
517
  "record.tab.chart": "Diagramm",
491
518
  "record.tab.data": "Tabelle",
492
519
  "record.tab.map": "Karte",
493
- "record.was.created.time": "erstellte diesen Datensatz {time}",
494
520
  "records": "Datensätze",
495
521
  "results.layout.selectOne": "Layout auswählen",
496
522
  "results.records.hits.displayedOn": "{displayed, plural, =0{Kein Datensatz.} one{1 Datensatz} other{{displayed} Datensätze }} {hits, plural, other{angezeigt von {hits} insgesamt.}}",