geonetwork-ui 2.6.0-dev.b1563a5e0 → 2.6.0-dev.c49d02679
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.
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +13 -2
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
- package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.mjs +8 -4
- package/esm2022/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.mjs +5 -2
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +3 -3
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +2 -2
- package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/constant.mjs +2 -1
- package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +53 -14
- package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +7 -1
- package/esm2022/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.mjs +2 -1
- package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
- package/esm2022/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.mjs +266 -11
- package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.mjs +1 -1
- package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +49 -23
- package/esm2022/libs/feature/search/src/lib/constants.mjs +3 -2
- package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +5 -3
- package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +13 -10
- package/esm2022/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.mjs +19 -34
- package/esm2022/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.mjs +59 -0
- package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +35 -10
- package/esm2022/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.mjs +5 -1
- package/esm2022/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.mjs +50 -29
- package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +7 -3
- package/esm2022/libs/ui/layout/src/index.mjs +2 -1
- package/esm2022/libs/ui/layout/src/lib/cell-popin/cell-popin.component.mjs +110 -0
- package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +20 -10
- package/esm2022/libs/ui/layout/src/lib/truncated-text/truncated-text.component.mjs +15 -49
- package/esm2022/libs/ui/layout/src/lib/ui-layout.module.mjs +2 -2
- package/esm2022/libs/ui/search/src/index.mjs +2 -1
- package/esm2022/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.mjs +21 -12
- package/esm2022/libs/ui/search/src/lib/results-table/results-table.component.mjs +39 -18
- package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +10 -4
- package/esm2022/libs/util/i18n/src/lib/i18n.constants.mjs +42 -1
- package/esm2022/libs/util/i18n/src/lib/language-codes.mjs +24 -2
- package/esm2022/translations/de.json +42 -6
- package/esm2022/translations/en.json +42 -6
- package/esm2022/translations/es.json +41 -5
- package/esm2022/translations/fr.json +42 -6
- package/esm2022/translations/it.json +41 -5
- package/esm2022/translations/nl.json +41 -5
- package/esm2022/translations/pt.json +41 -5
- package/fesm2022/geonetwork-ui.mjs +1573 -733
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +0 -1
- package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts +1 -0
- package/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/elasticsearch/constant.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +10 -2
- package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +2 -0
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts +1 -0
- package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +20 -17
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +4 -0
- package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts +48 -3
- package/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.d.ts.map +1 -1
- package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +13 -5
- package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
- package/libs/feature/search/src/lib/constants.d.ts.map +1 -1
- package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +2 -1
- package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
- package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts +6 -5
- package/libs/feature/search/src/lib/results-table/results-table-container.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts +3 -6
- package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.d.ts +14 -0
- package/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.d.ts.map +1 -0
- package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts +3 -0
- package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts +20 -9
- package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
- package/libs/ui/layout/src/index.d.ts +1 -0
- package/libs/ui/layout/src/index.d.ts.map +1 -1
- package/libs/ui/layout/src/lib/cell-popin/cell-popin.component.d.ts +28 -0
- package/libs/ui/layout/src/lib/cell-popin/cell-popin.component.d.ts.map +1 -0
- package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +4 -2
- package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -1
- package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts +5 -10
- package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts.map +1 -1
- package/libs/ui/search/src/index.d.ts +1 -0
- package/libs/ui/search/src/index.d.ts.map +1 -1
- package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts +4 -3
- package/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.d.ts.map +1 -1
- package/libs/ui/search/src/lib/results-table/results-table.component.d.ts +10 -4
- package/libs/ui/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
- package/libs/ui/search/src/lib/ui-search.module.d.ts +2 -1
- package/libs/ui/search/src/lib/ui-search.module.d.ts.map +1 -1
- package/libs/util/i18n/src/lib/i18n.constants.d.ts +1 -0
- package/libs/util/i18n/src/lib/i18n.constants.d.ts.map +1 -1
- package/libs/util/i18n/src/lib/language-codes.d.ts +23 -1
- package/libs/util/i18n/src/lib/language-codes.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +1 -1
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +18 -1
- package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +0 -1
- package/src/libs/api/metadata-converter/src/lib/iso19115-3/read-parts.ts +13 -3
- package/src/libs/api/metadata-converter/src/lib/iso19115-3/write-parts.ts +5 -1
- package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +6 -3
- package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +4 -1
- package/src/libs/api/repository/src/lib/gn4/elasticsearch/constant.ts +1 -0
- package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +70 -13
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +11 -0
- package/src/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.ts +3 -0
- package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +20 -14
- package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +4 -0
- package/src/libs/common/fixtures/src/lib/records.fixtures.ts +63 -0
- package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.html +117 -11
- package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.ts +316 -6
- package/src/libs/feature/record/src/lib/map-view/map-view.component.html +27 -9
- package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +84 -27
- package/src/libs/feature/search/src/lib/constants.ts +2 -1
- package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.html +1 -1
- package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +1 -0
- package/src/libs/feature/search/src/lib/results-table/results-table-container.component.html +1 -0
- package/src/libs/feature/search/src/lib/results-table/results-table-container.component.ts +13 -3
- package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.html +7 -75
- package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.ts +20 -51
- package/src/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.html +69 -0
- package/src/libs/ui/elements/src/lib/internal-link-card-contact/internal-link-card-contact.component.ts +61 -0
- package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +48 -9
- package/src/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.ts +4 -0
- package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.html +96 -37
- package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.ts +60 -29
- package/src/libs/ui/elements/src/lib/ui-elements.module.ts +2 -0
- package/src/libs/ui/layout/src/index.ts +1 -0
- package/src/libs/ui/layout/src/lib/cell-popin/cell-popin.component.html +40 -0
- package/src/libs/ui/layout/src/lib/cell-popin/cell-popin.component.ts +141 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +3 -2
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +13 -6
- package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.html +25 -42
- package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.ts +10 -49
- package/src/libs/ui/layout/src/lib/ui-layout.module.ts +1 -1
- package/src/libs/ui/search/src/index.ts +1 -0
- package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.html +16 -6
- package/src/libs/ui/search/src/lib/results-table/action-menu/action-menu.component.ts +15 -11
- package/src/libs/ui/search/src/lib/results-table/results-table.component.css +4 -0
- package/src/libs/ui/search/src/lib/results-table/results-table.component.html +31 -27
- package/src/libs/ui/search/src/lib/results-table/results-table.component.ts +33 -15
- package/src/libs/ui/search/src/lib/ui-search.module.ts +3 -0
- package/src/libs/util/i18n/src/lib/i18n.constants.ts +42 -0
- package/src/libs/util/i18n/src/lib/language-codes.ts +23 -1
- package/tailwind.base.css +1 -1
- package/translations/de.json +42 -6
- package/translations/en.json +42 -6
- package/translations/es.json +41 -5
- package/translations/fr.json +42 -6
- package/translations/it.json +41 -5
- package/translations/nl.json +41 -5
- package/translations/pt.json +41 -5
- package/translations/sk.json +41 -5
|
@@ -14,8 +14,8 @@ import {
|
|
|
14
14
|
import { PublicationVersionError } from '../../../../../../libs/common/domain/src/lib/model/error'
|
|
15
15
|
import {
|
|
16
16
|
CatalogRecord,
|
|
17
|
-
DatasetFeatureType,
|
|
18
17
|
DatasetFeatureCatalog,
|
|
18
|
+
DatasetFeatureType,
|
|
19
19
|
} from '../../../../../../libs/common/domain/src/lib/model/record'
|
|
20
20
|
import {
|
|
21
21
|
Aggregations,
|
|
@@ -29,10 +29,11 @@ import {
|
|
|
29
29
|
import { PlatformServiceInterface } from '../../../../../../libs/common/domain/src/lib/platform.service.interface'
|
|
30
30
|
import { RecordsRepositoryInterface } from '../../../../../../libs/common/domain/src/lib/repository/records-repository.interface'
|
|
31
31
|
import {
|
|
32
|
+
LanguagesApiService,
|
|
32
33
|
RecordsApiService,
|
|
33
34
|
SearchApiService,
|
|
34
|
-
FeatureResponseApiModel,
|
|
35
35
|
} from '../../../../../../libs/data-access/gn4/src'
|
|
36
|
+
import { LANG_3_TO_2_MAPPER } from '../../../../../../libs/util/i18n/src'
|
|
36
37
|
import {
|
|
37
38
|
combineLatest,
|
|
38
39
|
exhaustMap,
|
|
@@ -47,6 +48,7 @@ import {
|
|
|
47
48
|
import { catchError, map, tap } from 'rxjs/operators'
|
|
48
49
|
import { lt } from 'semver'
|
|
49
50
|
import { ElasticsearchService } from './elasticsearch'
|
|
51
|
+
import { Gn4SettingsService } from './settings/gn4-settings.service'
|
|
50
52
|
|
|
51
53
|
const minPublicationApiVersion = '4.2.5'
|
|
52
54
|
|
|
@@ -65,7 +67,9 @@ export class Gn4Repository implements RecordsRepositoryInterface {
|
|
|
65
67
|
private gn4SearchHelper: ElasticsearchService,
|
|
66
68
|
private gn4Mapper: Gn4Converter,
|
|
67
69
|
private gn4RecordsApi: RecordsApiService,
|
|
68
|
-
private platformService: PlatformServiceInterface
|
|
70
|
+
private platformService: PlatformServiceInterface,
|
|
71
|
+
private gn4LanguagesApi: LanguagesApiService,
|
|
72
|
+
private settingsService: Gn4SettingsService
|
|
69
73
|
) {}
|
|
70
74
|
|
|
71
75
|
search({
|
|
@@ -171,12 +175,21 @@ export class Gn4Repository implements RecordsRepositoryInterface {
|
|
|
171
175
|
name: featureType.typeName || '',
|
|
172
176
|
definition: featureType.definition || '',
|
|
173
177
|
attributes: Array.isArray(featureType.attributeTable)
|
|
174
|
-
? featureType.attributeTable.map((attr) =>
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
178
|
+
? featureType.attributeTable.map((attr) => {
|
|
179
|
+
const values = attr.values
|
|
180
|
+
?.filter((v) => v.code || v.label)
|
|
181
|
+
.map((v) => ({
|
|
182
|
+
code: v.code,
|
|
183
|
+
label: v.label,
|
|
184
|
+
}))
|
|
185
|
+
return {
|
|
186
|
+
name: attr.name,
|
|
187
|
+
code: attr.code,
|
|
188
|
+
definition: attr.definition,
|
|
189
|
+
type: attr.type,
|
|
190
|
+
...(values?.length > 0 ? { values } : {}),
|
|
191
|
+
}
|
|
192
|
+
})
|
|
180
193
|
: [],
|
|
181
194
|
})),
|
|
182
195
|
}
|
|
@@ -294,14 +307,46 @@ export class Gn4Repository implements RecordsRepositoryInterface {
|
|
|
294
307
|
: of(true)
|
|
295
308
|
}
|
|
296
309
|
|
|
297
|
-
|
|
298
|
-
return
|
|
299
|
-
|
|
300
|
-
|
|
310
|
+
canDuplicate(record: CatalogRecord): boolean {
|
|
311
|
+
return record.kind === 'dataset'
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
canDelete(record: CatalogRecord): Observable<boolean> {
|
|
315
|
+
return this.settingsService.allowEditHarvested$.pipe(
|
|
316
|
+
map((allowEditHarvested) => {
|
|
317
|
+
return (
|
|
318
|
+
record.extras['edit'] &&
|
|
319
|
+
(!record.extras['isHarvested'] || allowEditHarvested)
|
|
320
|
+
)
|
|
301
321
|
})
|
|
302
322
|
)
|
|
303
323
|
}
|
|
304
324
|
|
|
325
|
+
private canEdit(record: CatalogRecord, allowEditHarvested: boolean): boolean {
|
|
326
|
+
return (
|
|
327
|
+
record.kind === 'dataset' &&
|
|
328
|
+
record.extras['edit'] &&
|
|
329
|
+
(!record.extras['isHarvested'] || allowEditHarvested)
|
|
330
|
+
)
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
canEditRecord(uniqueIdentifier: string): Observable<boolean> {
|
|
334
|
+
return combineLatest([
|
|
335
|
+
this.getRecord(uniqueIdentifier),
|
|
336
|
+
this.settingsService.allowEditHarvested$,
|
|
337
|
+
]).pipe(
|
|
338
|
+
map(([record, allowEditHarvested]) =>
|
|
339
|
+
record ? this.canEdit(record, allowEditHarvested) : false
|
|
340
|
+
)
|
|
341
|
+
)
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
canEditIndexedRecord(record: CatalogRecord): Observable<boolean> {
|
|
345
|
+
return this.settingsService.allowEditHarvested$.pipe(
|
|
346
|
+
map((allowEditHarvested) => this.canEdit(record, allowEditHarvested))
|
|
347
|
+
)
|
|
348
|
+
}
|
|
349
|
+
|
|
305
350
|
openRecordForEdition(
|
|
306
351
|
uniqueIdentifier: string
|
|
307
352
|
): Observable<[CatalogRecord, string, boolean] | null> {
|
|
@@ -510,6 +555,18 @@ export class Gn4Repository implements RecordsRepositoryInterface {
|
|
|
510
555
|
)
|
|
511
556
|
}
|
|
512
557
|
|
|
558
|
+
getApplicationLanguages(): Observable<string[]> {
|
|
559
|
+
return this.gn4LanguagesApi
|
|
560
|
+
.getApplicationLanguages()
|
|
561
|
+
.pipe(
|
|
562
|
+
map((languages) =>
|
|
563
|
+
languages
|
|
564
|
+
.map((lang) => LANG_3_TO_2_MAPPER[lang.id ?? ''])
|
|
565
|
+
.filter((code): code is string => !!code)
|
|
566
|
+
)
|
|
567
|
+
)
|
|
568
|
+
}
|
|
569
|
+
|
|
513
570
|
private getRecordAsXml(uniqueIdentifier: string): Observable<string | null> {
|
|
514
571
|
return this.gn4RecordsApi
|
|
515
572
|
.getRecordAs(
|
|
@@ -82,6 +82,13 @@ export class Gn4PlatformService implements PlatformServiceInterface {
|
|
|
82
82
|
shareReplay(1)
|
|
83
83
|
)
|
|
84
84
|
|
|
85
|
+
private readonly allowEditHarvestedMd$ = this.settings$.pipe(
|
|
86
|
+
map((info) => {
|
|
87
|
+
return info['system/harvester/enableEditing'] as boolean
|
|
88
|
+
}),
|
|
89
|
+
shareReplay(1)
|
|
90
|
+
)
|
|
91
|
+
|
|
85
92
|
/**
|
|
86
93
|
* A map of already loaded thesauri (groups of keywords); the key is a URI
|
|
87
94
|
* @private
|
|
@@ -123,6 +130,10 @@ export class Gn4PlatformService implements PlatformServiceInterface {
|
|
|
123
130
|
return this.apiVersion$
|
|
124
131
|
}
|
|
125
132
|
|
|
133
|
+
getAllowEditHarvestedMd(): Observable<boolean> {
|
|
134
|
+
return this.allowEditHarvestedMd$
|
|
135
|
+
}
|
|
136
|
+
|
|
126
137
|
getMe(): Observable<UserModel> {
|
|
127
138
|
return this.me$
|
|
128
139
|
}
|
|
@@ -11,6 +11,9 @@ export class Gn4SettingsService {
|
|
|
11
11
|
'system/users/identicon'
|
|
12
12
|
)
|
|
13
13
|
|
|
14
|
+
public allowEditHarvested$: Observable<boolean> =
|
|
15
|
+
this.getSettingsSetValueByKey('system/harvester/enableEditing')
|
|
16
|
+
|
|
14
17
|
constructor(private siteApiService: SiteApiService) {}
|
|
15
18
|
|
|
16
19
|
private getSettingsSetValueByKey(key: string) {
|
|
@@ -233,14 +233,6 @@ export interface DatasetRecord extends BaseRecord {
|
|
|
233
233
|
spatialRepresentation?: SpatialRepresentationType
|
|
234
234
|
}
|
|
235
235
|
|
|
236
|
-
export type DatasetFeatureCatalog = {
|
|
237
|
-
featureTypes: Array<{
|
|
238
|
-
name: string
|
|
239
|
-
definition: string
|
|
240
|
-
attributes: Array<{ name: string; title: string; code: string }>
|
|
241
|
-
}>
|
|
242
|
-
}
|
|
243
|
-
|
|
244
236
|
export interface ServiceEndpoint {
|
|
245
237
|
url: URL
|
|
246
238
|
accessServiceProtocol: ServiceProtocol
|
|
@@ -268,18 +260,32 @@ export interface ReuseRecord extends BaseRecord {
|
|
|
268
260
|
temporalExtents: Array<DatasetTemporalExtent>
|
|
269
261
|
}
|
|
270
262
|
|
|
263
|
+
export type DatasetFeatureCatalog = {
|
|
264
|
+
featureTypes: Array<{
|
|
265
|
+
name: string
|
|
266
|
+
definition: string
|
|
267
|
+
attributes: DatasetFeatureAttribute[]
|
|
268
|
+
}>
|
|
269
|
+
}
|
|
270
|
+
export interface DatasetFeatureAttributeValue {
|
|
271
|
+
code?: string
|
|
272
|
+
definition?: string
|
|
273
|
+
label?: string
|
|
274
|
+
}
|
|
275
|
+
export interface DatasetFeatureAttribute {
|
|
276
|
+
name: string
|
|
277
|
+
definition: string
|
|
278
|
+
type: string
|
|
279
|
+
code: string
|
|
280
|
+
values?: Array<DatasetFeatureAttributeValue>
|
|
281
|
+
}
|
|
271
282
|
export interface DatasetFeatureType {
|
|
272
283
|
aliases: string
|
|
273
284
|
code: string
|
|
274
285
|
isAbstract: string
|
|
275
286
|
typeName: string
|
|
276
287
|
definition: string
|
|
277
|
-
attributeTable: Array<
|
|
278
|
-
name: string
|
|
279
|
-
definition: string
|
|
280
|
-
type: string
|
|
281
|
-
code: string
|
|
282
|
-
}>
|
|
288
|
+
attributeTable: Array<DatasetFeatureAttribute>
|
|
283
289
|
}
|
|
284
290
|
|
|
285
291
|
export type ReuseType = 'application' | 'map' | 'other'
|
|
@@ -22,7 +22,10 @@ export abstract class RecordsRepositoryInterface {
|
|
|
22
22
|
abstract getSources(record: CatalogRecord): Observable<CatalogRecord[]>
|
|
23
23
|
abstract getSourceOf(record: CatalogRecord): Observable<CatalogRecord[]>
|
|
24
24
|
abstract fuzzySearch(query: string): Observable<SearchResults>
|
|
25
|
+
abstract canDuplicate(record: CatalogRecord): boolean
|
|
26
|
+
abstract canDelete(record: CatalogRecord): Observable<boolean>
|
|
25
27
|
abstract canEditRecord(uniqueIdentifier: string): Observable<boolean>
|
|
28
|
+
abstract canEditIndexedRecord(record: CatalogRecord): Observable<boolean>
|
|
26
29
|
/**
|
|
27
30
|
* This emits once:
|
|
28
31
|
* - record object; if a draft exists, this will return it
|
|
@@ -97,4 +100,5 @@ export abstract class RecordsRepositoryInterface {
|
|
|
97
100
|
localRecord: CatalogRecord
|
|
98
101
|
): Observable<{ user: string; date: Date }>
|
|
99
102
|
abstract getRecordPublicationStatus(uuid: string): Observable<boolean>
|
|
103
|
+
abstract getApplicationLanguages(): Observable<string[]>
|
|
100
104
|
}
|
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
DatasetRecord,
|
|
4
4
|
DatasetSpatialExtent,
|
|
5
5
|
Keyword,
|
|
6
|
+
ServiceRecord,
|
|
6
7
|
} from '../../../../../libs/common/domain/src/lib/model/record'
|
|
7
8
|
|
|
8
9
|
export const datasetRecordsFixture: () => CatalogRecord[] = () => [
|
|
@@ -176,6 +177,20 @@ As such, **it is not very interesting at all.**`,
|
|
|
176
177
|
link: '',
|
|
177
178
|
definition: 'Nom de la rue',
|
|
178
179
|
type: 'String (48)',
|
|
180
|
+
values: [
|
|
181
|
+
{
|
|
182
|
+
code: 'Pomme',
|
|
183
|
+
label: 'Les Pommiers',
|
|
184
|
+
description: 'Sous les pommiers',
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
code: 'Cotton',
|
|
188
|
+
label: 'Rue Cotton',
|
|
189
|
+
description: 'Rue Cotton',
|
|
190
|
+
},
|
|
191
|
+
{ code: "Passage de l'échiquier" },
|
|
192
|
+
{ description: 'Rue du Charlieu' },
|
|
193
|
+
],
|
|
179
194
|
},
|
|
180
195
|
{
|
|
181
196
|
code: 'RUE',
|
|
@@ -811,6 +826,54 @@ export const importDatasetRecordAsXmlFixture = (): string => `
|
|
|
811
826
|
</gmd:identificationInfo>
|
|
812
827
|
</gmd:MD_Metadata>`
|
|
813
828
|
|
|
829
|
+
export const simpleServiceRecordFixture = (): ServiceRecord => ({
|
|
830
|
+
kind: 'service',
|
|
831
|
+
status: null,
|
|
832
|
+
lineage: null,
|
|
833
|
+
recordUpdated: new Date('2023-03-17T07:38:08.875Z'),
|
|
834
|
+
recordPublished: null,
|
|
835
|
+
ownerOrganization: null,
|
|
836
|
+
licenses: [],
|
|
837
|
+
legalConstraints: [],
|
|
838
|
+
securityConstraints: [],
|
|
839
|
+
otherConstraints: [],
|
|
840
|
+
contacts: [],
|
|
841
|
+
contactsForResource: [],
|
|
842
|
+
keywords: [],
|
|
843
|
+
topics: [],
|
|
844
|
+
spatialExtents: [],
|
|
845
|
+
temporalExtents: [],
|
|
846
|
+
overviews: [],
|
|
847
|
+
defaultLanguage: null,
|
|
848
|
+
otherLanguages: [],
|
|
849
|
+
title: 'Sites de gestion des déchets miniers - Service de visualisation WMS',
|
|
850
|
+
onlineResources: [
|
|
851
|
+
{
|
|
852
|
+
name: 'Service de visualisation WMS',
|
|
853
|
+
description:
|
|
854
|
+
'Adresse de connexion au service de visualisation WMS de la série de couches de données "Sites de gestion des déchets miniers"',
|
|
855
|
+
type: 'service',
|
|
856
|
+
url: new URL(
|
|
857
|
+
'https://geoservices.wallonie.be/arcgis/services/SOL_SOUS_SOL/DECHETS_MINIERS/MapServer/WMSServer?request=GetCapabilities&service=WMS'
|
|
858
|
+
),
|
|
859
|
+
accessServiceProtocol: 'wms',
|
|
860
|
+
accessRestricted: false,
|
|
861
|
+
},
|
|
862
|
+
],
|
|
863
|
+
uniqueIdentifier: '00b22798-ec8e-4500-89e8-90eeeda45919',
|
|
864
|
+
landingPage: new URL(
|
|
865
|
+
'http://localhost:4200/geonetwork/srv/fre/catalog.search#/metadata/00b22798-ec8e-4500-89e8-90eeeda45919'
|
|
866
|
+
),
|
|
867
|
+
extras: {
|
|
868
|
+
isPublishedToAll: true,
|
|
869
|
+
id: '723',
|
|
870
|
+
isHarvested: true,
|
|
871
|
+
ownerInfo: 'admin|admin|admin|Administrator',
|
|
872
|
+
edit: true,
|
|
873
|
+
},
|
|
874
|
+
recordCreated: new Date('2023-03-17T07:38:08.875Z'),
|
|
875
|
+
})
|
|
876
|
+
|
|
814
877
|
export const NATIONAL_KEYWORD = {
|
|
815
878
|
key: 'http://inspire.ec.europa.eu/metadata-codelist/SpatialScope/national',
|
|
816
879
|
label: 'National',
|
|
@@ -1,14 +1,120 @@
|
|
|
1
1
|
<div
|
|
2
|
-
class="flex flex-col h-full w-[302px] bg-neutral-100 border-l border-gray-300 py-
|
|
2
|
+
class="flex flex-col h-full w-[302px] bg-neutral-100 border-l border-gray-300 py-8 px-3 gap-6 overflow-auto"
|
|
3
3
|
>
|
|
4
|
-
<
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
4
|
+
<div class="flex flex-row px-2 justify-between">
|
|
5
|
+
<span class="text-3xl font-title text-black/80" translate
|
|
6
|
+
>editor.record.form.multilingual.title</span
|
|
7
|
+
>
|
|
8
|
+
<button
|
|
9
|
+
[title]="'editor.record.form.multilingual.open' | translate"
|
|
10
|
+
(click)="toggleLanguageSelection()"
|
|
11
|
+
*ngIf="isMultilingual"
|
|
12
|
+
data-test="activateSelection"
|
|
13
|
+
>
|
|
14
|
+
<ng-icon class="mt-1" name="iconoirSettings"></ng-icon>
|
|
15
|
+
</button>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="flex flex-col gap-2" *ngIf="editTranslations || !isMultilingual">
|
|
18
|
+
<gn-ui-check-toggle
|
|
19
|
+
class="p-2"
|
|
20
|
+
[label]="'editor.record.form.multilingual.enable' | translate"
|
|
21
|
+
[color]="'primary'"
|
|
22
|
+
[(value)]="isMultilingual"
|
|
23
|
+
(toggled)="switchMultilingual($event)"
|
|
24
|
+
></gn-ui-check-toggle>
|
|
25
|
+
<div *ngIf="isMultilingual" class="flex flex-col gap-2">
|
|
26
|
+
<div class="flex flex-row justify-between border-t border-gray-300 p-3">
|
|
27
|
+
<span class="mt-2 text-sm text-gray-600" translate
|
|
28
|
+
>editor.record.form.multilingual.activate</span
|
|
29
|
+
>
|
|
30
|
+
<gn-ui-button
|
|
31
|
+
extraClass="w-16 h-8 font-bold"
|
|
32
|
+
type="gray"
|
|
33
|
+
(buttonClick)="validateTranslations()"
|
|
34
|
+
data-test="validateSelection"
|
|
35
|
+
>{{ 'editor.record.form.multilingual.validate' | translate }}
|
|
36
|
+
</gn-ui-button>
|
|
37
|
+
</div>
|
|
38
|
+
<ng-container *ngIf="supportedLanguages$ | async as languages">
|
|
39
|
+
<div
|
|
40
|
+
class="flex flex-col gap-2 w-full px-2"
|
|
41
|
+
data-test="langAvailable"
|
|
42
|
+
*ngFor="let lang of languages"
|
|
43
|
+
>
|
|
44
|
+
<gn-ui-button
|
|
45
|
+
[extraClass]="getExtraClass(lang)"
|
|
46
|
+
type="gray"
|
|
47
|
+
(buttonClick)="toggleLanguage(lang)"
|
|
48
|
+
[disabled]="lang === _record.defaultLanguage"
|
|
49
|
+
[title]="getToggleTitle(lang)"
|
|
50
|
+
>
|
|
51
|
+
<span [class]="getIconClass(lang)"></span>
|
|
52
|
+
<span class="ml-2">{{ 'language.' + lang | translate }}</span>
|
|
53
|
+
</gn-ui-button>
|
|
54
|
+
</div>
|
|
55
|
+
</ng-container>
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
<div *ngIf="!editTranslations && isMultilingual" class="flex flex-col gap-2">
|
|
59
|
+
<gn-ui-button
|
|
60
|
+
*ngFor="let recordLang of sortLanguages(recordLanguages); let i = index"
|
|
61
|
+
extraClass="flex flex-row justify-between bg-white border border-white rounded mb-1 h-[34px] w-full"
|
|
62
|
+
[ngClass]="{
|
|
63
|
+
'mt-8': isFirstUnsupported(i),
|
|
64
|
+
'': true,
|
|
65
|
+
}"
|
|
66
|
+
(buttonClick)="switchFormLang(recordLang)"
|
|
67
|
+
type="outline"
|
|
68
|
+
data-test="langSwitch"
|
|
69
|
+
>
|
|
70
|
+
<div class="flex flex-row gap-2 items-center">
|
|
71
|
+
<ng-icon
|
|
72
|
+
*ngIf="recordLang === formLanguage"
|
|
73
|
+
class="text-primary mt-1"
|
|
74
|
+
name="iconoirCheckCircle"
|
|
75
|
+
></ng-icon>
|
|
76
|
+
<ng-icon
|
|
77
|
+
*ngIf="recordLang !== formLanguage"
|
|
78
|
+
class="text-gray-800 mt-1"
|
|
79
|
+
name="iconoirCircle"
|
|
80
|
+
></ng-icon>
|
|
81
|
+
<span
|
|
82
|
+
*ngIf="recordLang.length === 2"
|
|
83
|
+
[class]="getIconClass(recordLang) + 'mt-1'"
|
|
84
|
+
></span>
|
|
85
|
+
<span [ngClass]="recordLang === formLanguage ? 'text-black' : ''">{{
|
|
86
|
+
isLangSupported(recordLang)
|
|
87
|
+
? ('language.' + recordLang | translate)
|
|
88
|
+
: recordLang.toUpperCase()
|
|
89
|
+
}}</span>
|
|
90
|
+
</div>
|
|
91
|
+
<div class="flex flex-row gap-2 items-center">
|
|
92
|
+
<span
|
|
93
|
+
*ngIf="recordLang === formLanguage"
|
|
94
|
+
class="text-xs text-base"
|
|
95
|
+
translate
|
|
96
|
+
>editor.record.form.multilingual.default</span
|
|
97
|
+
>
|
|
98
|
+
<button
|
|
99
|
+
(click)="
|
|
100
|
+
openActionMenu(recordLang, template); $event.stopPropagation()
|
|
101
|
+
"
|
|
102
|
+
cdkOverlayOrigin
|
|
103
|
+
#actionMenuButton
|
|
104
|
+
>
|
|
105
|
+
<ng-icon class="pb-5" name="matMoreHorizOutline"></ng-icon>
|
|
106
|
+
</button>
|
|
107
|
+
<ng-template #template>
|
|
108
|
+
<gn-ui-action-menu
|
|
109
|
+
[canDelete]="recordLang !== _record.defaultLanguage"
|
|
110
|
+
page="record"
|
|
111
|
+
(delete)="confirmDeleteAction(recordLang)"
|
|
112
|
+
(closeActionMenu)="closeActionMenu()"
|
|
113
|
+
(switch)="switchDefaultLang(recordLang)"
|
|
114
|
+
>
|
|
115
|
+
</gn-ui-action-menu>
|
|
116
|
+
</ng-template>
|
|
117
|
+
</div>
|
|
118
|
+
</gn-ui-button>
|
|
119
|
+
</div>
|
|
14
120
|
</div>
|