geonetwork-ui 2.4.0 → 2.4.1-dev.2804667fa

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 (153) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/update-frequency.mapper.mjs +6 -62
  2. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +19 -1
  3. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +24 -17
  4. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +27 -1
  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 +2 -1
  8. package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +15 -14
  9. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +10 -4
  10. package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +6 -4
  11. package/esm2022/libs/feature/editor/src/lib/+state/editor.selectors.mjs +2 -2
  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 +45 -9
  16. 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
  17. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.mjs +16 -12
  18. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.mjs +7 -13
  19. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.mjs +3 -3
  20. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.mjs +36 -60
  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/search/src/lib/results-table/results-table.component.mjs +3 -6
  36. package/esm2022/translations/de.json +47 -17
  37. package/esm2022/translations/en.json +27 -16
  38. package/esm2022/translations/es.json +45 -15
  39. package/esm2022/translations/fr.json +31 -20
  40. package/esm2022/translations/it.json +261 -231
  41. package/esm2022/translations/nl.json +45 -15
  42. package/esm2022/translations/pt.json +45 -15
  43. package/fesm2022/geonetwork-ui.mjs +1352 -1160
  44. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  45. package/libs/api/metadata-converter/src/lib/iso19139/utils/update-frequency.mapper.d.ts.map +1 -1
  46. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  47. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +3 -3
  48. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  49. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +2 -1
  50. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  51. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +3 -3
  52. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  53. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts +3 -0
  54. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts.map +1 -1
  55. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +5 -2
  56. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -1
  57. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts +3 -2
  58. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts.map +1 -1
  59. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +3 -2
  60. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
  61. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts +1 -1
  62. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -1
  63. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +1 -1
  64. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -1
  65. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts +11 -2
  66. package/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.d.ts.map +1 -1
  67. 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
  68. 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
  69. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.d.ts +5 -4
  70. 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
  71. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.d.ts +1 -4
  72. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.d.ts.map +1 -1
  73. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.d.ts +1 -1
  74. 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
  75. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  76. package/libs/feature/editor/src/lib/services/editor.service.d.ts +1 -1
  77. package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
  78. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +0 -1
  79. package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -1
  80. package/libs/ui/elements/src/index.d.ts +2 -1
  81. package/libs/ui/elements/src/index.d.ts.map +1 -1
  82. package/libs/ui/elements/src/lib/image-input/image-input.component.d.ts.map +1 -0
  83. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
  84. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  85. package/libs/ui/inputs/src/index.d.ts +4 -5
  86. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  87. package/libs/ui/inputs/src/lib/button/button.component.d.ts +1 -1
  88. package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
  89. package/libs/ui/inputs/src/lib/file-input/file-input.component.d.ts +1 -1
  90. package/libs/ui/inputs/src/lib/file-input/file-input.component.d.ts.map +1 -1
  91. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +6 -7
  92. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
  93. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts +2 -2
  94. package/libs/ui/inputs/src/lib/url-input/url-input.component.d.ts.map +1 -1
  95. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +1 -2
  96. package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  97. package/package.json +1 -1
  98. package/src/libs/api/metadata-converter/src/lib/iso19139/utils/update-frequency.mapper.ts +9 -62
  99. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +18 -0
  100. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +47 -28
  101. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +29 -7
  102. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +4 -3
  103. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +162 -0
  104. package/src/libs/data-access/gn4/src/openapi/api/records.api.service.ts +24 -4
  105. package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +5 -1
  106. package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +42 -31
  107. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +10 -9
  108. package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +12 -12
  109. package/src/libs/feature/editor/src/lib/+state/editor.selectors.ts +5 -5
  110. package/src/libs/feature/editor/src/lib/components/constraint-card/constraint-card.component.html +1 -1
  111. package/src/libs/feature/editor/src/lib/components/generic-keywords/generic-keywords.component.html +1 -1
  112. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.html +31 -6
  113. package/src/libs/feature/editor/src/lib/components/online-service-resource-input/online-service-resource-input.component.ts +47 -2
  114. 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
  115. 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
  116. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.html +3 -18
  117. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-online-resources/form-field-online-resources.component.ts +12 -8
  118. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.html +0 -9
  119. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-overviews/form-field-overviews.component.ts +3 -9
  120. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.html +6 -6
  121. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.ts +46 -74
  122. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +4 -1
  123. package/src/libs/feature/editor/src/lib/components/record-form/record-form.component.html +3 -6
  124. package/src/libs/feature/editor/src/lib/fields.config.ts +10 -14
  125. package/src/libs/feature/editor/src/lib/services/editor.service.ts +18 -16
  126. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +0 -1
  127. package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +0 -3
  128. package/src/libs/ui/dataviz/src/lib/figure/figure.component.html +1 -0
  129. package/src/libs/ui/elements/src/index.ts +2 -1
  130. package/src/libs/ui/{inputs → elements}/src/lib/image-input/image-input.component.html +4 -19
  131. package/src/libs/ui/{inputs → elements}/src/lib/image-input/image-input.component.ts +13 -9
  132. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +13 -10
  133. package/src/libs/ui/inputs/src/index.ts +4 -5
  134. package/src/libs/ui/inputs/src/lib/button/button.component.ts +2 -1
  135. package/src/libs/ui/inputs/src/lib/file-input/file-input.component.ts +1 -1
  136. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +22 -25
  137. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.html +5 -3
  138. package/src/libs/ui/inputs/src/lib/url-input/url-input.component.ts +1 -1
  139. package/src/libs/ui/search/src/lib/results-table/results-table.component.html +8 -4
  140. package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +0 -1
  141. package/translations/de.json +47 -17
  142. package/translations/en.json +27 -16
  143. package/translations/es.json +45 -15
  144. package/translations/fr.json +31 -20
  145. package/translations/it.json +261 -231
  146. package/translations/nl.json +45 -15
  147. package/translations/pt.json +45 -15
  148. package/translations/sk.json +45 -15
  149. package/esm2022/libs/ui/inputs/src/lib/image-input/image-input.component.mjs +0 -214
  150. package/libs/ui/inputs/src/lib/image-input/image-input.component.d.ts.map +0 -1
  151. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/update-frequency.mapper.ts +0 -67
  152. /package/libs/ui/{inputs → elements}/src/lib/image-input/image-input.component.d.ts +0 -0
  153. /package/src/libs/ui/{inputs → elements}/src/lib/image-input/image-input.component.css +0 -0
@@ -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">
@@ -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
  })
@@ -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
@@ -102,9 +102,9 @@
102
102
  <ng-template #cell let-item>
103
103
  <span class="text-xs">
104
104
  {{
105
- (isUnsavedDraft(item)
106
- ? 'record.metadata.status.notPublished'
107
- : 'record.metadata.status.published'
105
+ (item.extras?.['isPublishedToAll']
106
+ ? 'record.metadata.status.published'
107
+ : 'record.metadata.status.notPublished'
108
108
  ) | translate
109
109
  }}</span
110
110
  >
@@ -123,7 +123,11 @@
123
123
  </ng-template>
124
124
  <ng-template #cell let-item>
125
125
  <div class="flex text-left w-full text-xs">
126
- {{ isUnsavedDraft(item) ? '-' : dateToString(item.recordUpdated) }}
126
+ {{
127
+ item.extras?.['isPublishedToAll']
128
+ ? dateToString(item.recordUpdated)
129
+ : '-'
130
+ }}
127
131
  </div>
128
132
  </ng-template>
129
133
  </gn-ui-interactive-table-column>
@@ -65,7 +65,6 @@ export class ResultsTableComponent {
65
65
  @Input() sortOrder: SortByField = null
66
66
  @Input() hasDraft: (record: CatalogRecord) => boolean = () => false
67
67
  @Input() canDuplicate: (record: CatalogRecord) => boolean = () => true
68
- @Input() isUnsavedDraft: (record: CatalogRecord) => boolean = () => true
69
68
  @Input() canDelete: (record: CatalogRecord) => boolean = () => true
70
69
 
71
70
  // emits the column (field) as well as the order