geonetwork-ui 2.2.0-dev.6695ae4d → 2.2.0-dev.70a9dc16
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/atomic-operations.mjs +27 -1
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +23 -11
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +4 -2
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.mjs +14 -0
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/converter.mjs +12 -9
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +33 -8
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +31 -14
- package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +2 -2
- package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +10 -3
- package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +14 -5
- package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +33 -8
- package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
- package/esm2022/libs/feature/editor/src/index.mjs +6 -1
- package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +8 -0
- package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +26 -0
- package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +30 -0
- package/esm2022/libs/feature/editor/src/lib/+state/editor.models.mjs +2 -0
- package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +42 -0
- package/esm2022/libs/feature/editor/src/lib/+state/editor.selectors.mjs +13 -0
- package/esm2022/libs/feature/editor/src/lib/expressions.mjs +13 -0
- package/esm2022/libs/feature/editor/src/lib/feature-editor.module.mjs +16 -4
- package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +34 -0
- package/esm2022/libs/feature/editor/src/lib/models/fields.model.mjs +2 -0
- package/esm2022/libs/feature/editor/src/lib/record-form/record-form.component.mjs +15 -11
- package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +22 -44
- package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +9 -1
- package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +13 -13
- package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +3 -3
- package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +41 -26
- package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +11 -9
- package/esm2022/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/max-lines/max-lines.component.mjs +5 -3
- package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +19 -7
- package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +3 -4
- package/esm2022/libs/ui/elements/src/lib/thumbnail/thumbnail.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +4 -4
- package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +9 -9
- package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/form-field/form-field.component.mjs +4 -2
- package/esm2022/libs/ui/inputs/src/lib/form-field/form-field.model.mjs +1 -1
- package/esm2022/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/text-area/text-area.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +6 -6
- package/esm2022/libs/ui/layout/src/lib/carousel/carousel.component.mjs +3 -3
- package/esm2022/libs/util/i18n/src/lib/i18n.constants.mjs +18 -1
- package/esm2022/libs/util/shared/src/lib/utils/index.mjs +2 -1
- package/esm2022/libs/util/shared/src/lib/utils/temporal-extent-union.mjs +32 -0
- package/esm2022/translations/de.json +37 -27
- package/esm2022/translations/en.json +29 -19
- package/esm2022/translations/es.json +26 -16
- package/esm2022/translations/fr.json +47 -37
- package/esm2022/translations/it.json +41 -31
- package/esm2022/translations/nl.json +27 -17
- package/esm2022/translations/pt.json +26 -16
- package/fesm2022/geonetwork-ui.mjs +835 -409
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts +2 -0
- package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.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/gn4.metadata.mapper.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +4 -5
- package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts +3 -0
- package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts.map +1 -0
- package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +3 -3
- 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 +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/elasticsearch.service.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +9 -2
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +16 -2
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts +1 -0
- package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/platform.service.interface.d.ts +1 -1
- package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
- package/libs/feature/editor/src/index.d.ts +5 -0
- package/libs/feature/editor/src/index.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +23 -0
- package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/+state/editor.effects.d.ts +15 -0
- package/libs/feature/editor/src/lib/+state/editor.effects.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +19 -0
- package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/+state/editor.models.d.ts +2 -0
- package/libs/feature/editor/src/lib/+state/editor.models.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts +18 -0
- package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +15 -0
- package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/expressions.d.ts +4 -0
- package/libs/feature/editor/src/lib/expressions.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/feature-editor.module.d.ts +3 -1
- package/libs/feature/editor/src/lib/feature-editor.module.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/fields.config.d.ts +3 -0
- package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/models/fields.model.d.ts +15 -0
- package/libs/feature/editor/src/lib/models/fields.model.d.ts.map +1 -0
- package/libs/feature/editor/src/lib/record-form/record-form.component.d.ts +10 -5
- package/libs/feature/editor/src/lib/record-form/record-form.component.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/services/editor.service.d.ts +3 -13
- package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
- package/libs/feature/map/src/lib/map-context/map-context.service.d.ts +1 -0
- package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +1 -1
- package/libs/feature/search/src/lib/utils/service/fields.d.ts +21 -8
- package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
- package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts +1 -1
- package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/max-lines/max-lines.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +9 -3
- package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts +13 -13
- package/libs/ui/inputs/src/lib/button/button.component.d.ts +1 -1
- package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/form-field/form-field.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/form-field/form-field.model.d.ts +0 -1
- package/libs/ui/inputs/src/lib/form-field/form-field.model.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts +1 -1
- package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +40 -40
- package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts +1 -1
- package/libs/util/i18n/src/lib/i18n.constants.d.ts +17 -0
- package/libs/util/i18n/src/lib/i18n.constants.d.ts.map +1 -1
- package/libs/util/shared/src/lib/utils/index.d.ts +1 -0
- package/libs/util/shared/src/lib/utils/index.d.ts.map +1 -1
- package/libs/util/shared/src/lib/utils/temporal-extent-union.d.ts +5 -0
- package/libs/util/shared/src/lib/utils/temporal-extent-union.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +57 -2
- package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +52 -6
- package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +207 -20
- package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +29 -0
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +30 -11
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.ts +3 -1
- package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +4 -5
- package/src/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.ts +16 -0
- package/src/libs/api/metadata-converter/src/lib/iso19139/converter.ts +11 -9
- package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +58 -20
- package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +86 -38
- package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +1 -1
- package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +22 -2
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +15 -4
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +47 -8
- package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +20 -3
- package/src/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.ts +1 -0
- package/src/libs/common/domain/src/lib/platform.service.interface.ts +1 -4
- package/src/libs/common/fixtures/src/lib/elasticsearch/full-response.ts +1 -1
- package/src/libs/common/fixtures/src/lib/gn4/groups.fixtures.ts +1 -1
- package/src/libs/common/fixtures/src/lib/records.fixtures.ts +52 -10
- package/src/libs/feature/editor/src/index.ts +5 -0
- package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +24 -0
- package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +49 -0
- package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +30 -0
- package/src/libs/feature/editor/src/lib/+state/editor.models.ts +1 -0
- package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +68 -0
- package/src/libs/feature/editor/src/lib/+state/editor.selectors.ts +39 -0
- package/src/libs/feature/editor/src/lib/expressions.ts +16 -0
- package/src/libs/feature/editor/src/lib/feature-editor.module.ts +11 -0
- package/src/libs/feature/editor/src/lib/fields.config.ts +35 -0
- package/src/libs/feature/editor/src/lib/models/fields.model.ts +29 -0
- package/src/libs/feature/editor/src/lib/record-form/record-form.component.html +9 -7
- package/src/libs/feature/editor/src/lib/record-form/record-form.component.ts +11 -5
- package/src/libs/feature/editor/src/lib/services/editor.service.ts +34 -73
- package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +10 -0
- package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +12 -12
- package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.html +3 -4
- package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +21 -16
- package/src/libs/feature/search/src/lib/utils/service/fields.ts +43 -34
- package/src/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.html +1 -1
- package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.css +5 -0
- package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.html +39 -0
- package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.ts +58 -0
- package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +1 -0
- package/src/libs/ui/elements/src/lib/max-lines/max-lines.component.html +5 -1
- package/src/libs/ui/elements/src/lib/max-lines/max-lines.component.ts +1 -0
- package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +1 -1
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +113 -25
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +20 -3
- package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +2 -3
- package/src/libs/ui/elements/src/lib/thumbnail/thumbnail.component.html +2 -2
- package/src/libs/ui/elements/src/lib/ui-elements.module.ts +1 -1
- package/src/libs/ui/inputs/src/lib/button/button.component.css +0 -5
- package/src/libs/ui/inputs/src/lib/button/button.component.html +0 -1
- package/src/libs/ui/inputs/src/lib/button/button.component.ts +7 -6
- package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.html +1 -1
- package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.html +3 -1
- package/src/libs/ui/inputs/src/lib/form-field/form-field.component.ts +3 -1
- package/src/libs/ui/inputs/src/lib/form-field/form-field.model.ts +0 -1
- package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.css +3 -0
- package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.html +1 -1
- package/src/libs/ui/inputs/src/lib/text-area/text-area.component.ts +1 -0
- package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +2 -2
- package/src/libs/ui/layout/src/lib/carousel/carousel.component.html +1 -0
- package/src/libs/util/i18n/src/lib/i18n.constants.ts +18 -0
- package/src/libs/util/shared/src/lib/utils/index.ts +1 -0
- package/src/libs/util/shared/src/lib/utils/temporal-extent-union.ts +32 -0
- package/tailwind.base.css +44 -15
- package/translations/de.json +37 -27
- package/translations/en.json +29 -19
- package/translations/es.json +26 -16
- package/translations/fr.json +47 -37
- package/translations/it.json +41 -31
- package/translations/nl.json +27 -17
- package/translations/pt.json +26 -16
- package/translations/sk.json +118 -108
|
@@ -5,6 +5,8 @@ import {
|
|
|
5
5
|
DatasetTemporalExtent,
|
|
6
6
|
GraphicOverview,
|
|
7
7
|
Individual,
|
|
8
|
+
Keyword,
|
|
9
|
+
KeywordThesaurus,
|
|
8
10
|
Organization,
|
|
9
11
|
RecordKind,
|
|
10
12
|
RecordStatus,
|
|
@@ -39,6 +41,7 @@ import {
|
|
|
39
41
|
} from '../function-utils'
|
|
40
42
|
import { getRoleFromRoleCode } from './codelists/role.mapper'
|
|
41
43
|
import { matchMimeType, matchProtocol } from '../common/distribution.mapper'
|
|
44
|
+
import { getKeywordTypeFromKeywordTypeCode } from './codelists/keyword.mapper'
|
|
42
45
|
|
|
43
46
|
function extractCharacterString(): ChainableFunction<XmlElement, string> {
|
|
44
47
|
return pipe(
|
|
@@ -447,7 +450,7 @@ function findIdentification() {
|
|
|
447
450
|
}
|
|
448
451
|
}
|
|
449
452
|
|
|
450
|
-
function extractCitationDate(type: 'creation' | 'revision') {
|
|
453
|
+
function extractCitationDate(type: 'creation' | 'revision' | 'publication') {
|
|
451
454
|
return pipe(
|
|
452
455
|
findIdentification(),
|
|
453
456
|
findNestedElements('gmd:citation', 'gmd:CI_Citation', 'gmd:date'),
|
|
@@ -514,6 +517,10 @@ export function readRecordUpdated(rootEl: XmlElement): Date {
|
|
|
514
517
|
return pipe(findChildElement('gmd:dateStamp'), extractDateTime())(rootEl)
|
|
515
518
|
}
|
|
516
519
|
|
|
520
|
+
export function readRecordPublished(rootEl: XmlElement): Date {
|
|
521
|
+
return pipe(findChildElement('gmd:dateStamp'), extractDateTime())(rootEl)
|
|
522
|
+
}
|
|
523
|
+
|
|
517
524
|
export function readTitle(rootEl: XmlElement): string {
|
|
518
525
|
return pipe(
|
|
519
526
|
findIdentification(),
|
|
@@ -552,29 +559,60 @@ export function readContacts(rootEl: XmlElement): Individual[] {
|
|
|
552
559
|
)(rootEl)
|
|
553
560
|
}
|
|
554
561
|
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
)
|
|
565
|
-
),
|
|
566
|
-
mapArray(findChildrenElement('gmd:keyword')),
|
|
567
|
-
flattenArray(),
|
|
568
|
-
mapArray(extractCharacterString())
|
|
562
|
+
// from gmd:thesaurusName
|
|
563
|
+
function readThesaurus(rootEl: XmlElement): KeywordThesaurus {
|
|
564
|
+
if (!rootEl) return null
|
|
565
|
+
|
|
566
|
+
const findIdentifier = findNestedElement(
|
|
567
|
+
'gmd:CI_Citation',
|
|
568
|
+
'gmd:identifier',
|
|
569
|
+
'gmd:MD_Identifier',
|
|
570
|
+
'gmd:code'
|
|
569
571
|
)
|
|
572
|
+
const id = pipe(findIdentifier, extractCharacterString())(rootEl)
|
|
573
|
+
const url = pipe(findIdentifier, extractUrl())(rootEl)
|
|
574
|
+
const name = pipe(
|
|
575
|
+
findNestedElement('gmd:CI_Citation', 'gmd:title'),
|
|
576
|
+
extractCharacterString()
|
|
577
|
+
)(rootEl)
|
|
578
|
+
return {
|
|
579
|
+
id,
|
|
580
|
+
...(name && { name }),
|
|
581
|
+
...(url && { url }),
|
|
582
|
+
}
|
|
570
583
|
}
|
|
571
584
|
|
|
572
|
-
|
|
573
|
-
|
|
585
|
+
// from gmd:MD_Keywords
|
|
586
|
+
function readKeywordGroup(rootEl: XmlElement): Keyword[] {
|
|
587
|
+
const type = pipe(
|
|
588
|
+
findChildrenElement('gmd:MD_KeywordTypeCode'),
|
|
589
|
+
mapArray(readAttribute('codeListValue')),
|
|
590
|
+
map((values) => getKeywordTypeFromKeywordTypeCode(values[0]))
|
|
591
|
+
)(rootEl)
|
|
592
|
+
const thesaurus = pipe(
|
|
593
|
+
findNestedElement('gmd:thesaurusName'),
|
|
594
|
+
readThesaurus
|
|
595
|
+
)(rootEl)
|
|
596
|
+
return pipe(
|
|
597
|
+
findChildrenElement('gmd:keyword'),
|
|
598
|
+
mapArray((el) => {
|
|
599
|
+
const label = extractCharacterString()(el)
|
|
600
|
+
return {
|
|
601
|
+
...(thesaurus ? { thesaurus } : {}),
|
|
602
|
+
label,
|
|
603
|
+
type,
|
|
604
|
+
} as Keyword
|
|
605
|
+
})
|
|
606
|
+
)(rootEl)
|
|
574
607
|
}
|
|
575
608
|
|
|
576
|
-
export function
|
|
577
|
-
return
|
|
609
|
+
export function readKeywords(rootEl: XmlElement): Keyword[] {
|
|
610
|
+
return pipe(
|
|
611
|
+
findIdentification(),
|
|
612
|
+
findNestedElements('gmd:descriptiveKeywords', 'gmd:MD_Keywords'),
|
|
613
|
+
mapArray(readKeywordGroup),
|
|
614
|
+
flattenArray()
|
|
615
|
+
)(rootEl)
|
|
578
616
|
}
|
|
579
617
|
|
|
580
618
|
export function readStatus(rootEl: XmlElement): RecordStatus {
|
|
@@ -627,7 +665,7 @@ export function readLicenses(rootEl: XmlElement): Constraint[] {
|
|
|
627
665
|
export function readIsoTopics(rootEl: XmlElement): string[] {
|
|
628
666
|
return pipe(
|
|
629
667
|
findIdentification(),
|
|
630
|
-
findChildrenElement('gmd:MD_TopicCategoryCode',
|
|
668
|
+
findChildrenElement('gmd:MD_TopicCategoryCode', true),
|
|
631
669
|
mapArray(readText())
|
|
632
670
|
)(rootEl)
|
|
633
671
|
}
|
|
@@ -5,6 +5,8 @@ import {
|
|
|
5
5
|
DatasetRecord,
|
|
6
6
|
DatasetServiceDistribution,
|
|
7
7
|
Individual,
|
|
8
|
+
Keyword,
|
|
9
|
+
KeywordThesaurus,
|
|
8
10
|
RecordStatus,
|
|
9
11
|
Role,
|
|
10
12
|
ServiceEndpoint,
|
|
@@ -25,6 +27,7 @@ import {
|
|
|
25
27
|
findNestedElement,
|
|
26
28
|
findNestedElements,
|
|
27
29
|
readAttribute,
|
|
30
|
+
readText,
|
|
28
31
|
removeAllChildren,
|
|
29
32
|
removeChildren,
|
|
30
33
|
removeChildrenByName,
|
|
@@ -288,7 +291,10 @@ function appendResponsibleParty(contact: Individual) {
|
|
|
288
291
|
)
|
|
289
292
|
}
|
|
290
293
|
|
|
291
|
-
function updateCitationDate(
|
|
294
|
+
function updateCitationDate(
|
|
295
|
+
date: Date,
|
|
296
|
+
type: 'revision' | 'creation' | 'publication'
|
|
297
|
+
) {
|
|
292
298
|
return pipe(
|
|
293
299
|
findNestedElements('gmd:date', 'gmd:CI_Date'),
|
|
294
300
|
filterArray(
|
|
@@ -305,7 +311,10 @@ function updateCitationDate(date: Date, type: 'revision' | 'creation') {
|
|
|
305
311
|
)
|
|
306
312
|
}
|
|
307
313
|
|
|
308
|
-
function appendCitationDate(
|
|
314
|
+
function appendCitationDate(
|
|
315
|
+
date,
|
|
316
|
+
type: 'revision' | 'creation' | 'publication'
|
|
317
|
+
) {
|
|
309
318
|
return appendChildren(
|
|
310
319
|
pipe(
|
|
311
320
|
createElement('gmd:date'),
|
|
@@ -326,47 +335,78 @@ function appendCitationDate(date, type: 'revision' | 'creation') {
|
|
|
326
335
|
)
|
|
327
336
|
}
|
|
328
337
|
|
|
329
|
-
function removeKeywords(
|
|
330
|
-
return removeChildren(
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
338
|
+
function removeKeywords() {
|
|
339
|
+
return removeChildren(pipe(findNestedElements('gmd:descriptiveKeywords')))
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// returns a <gmd:thesaurusName> element
|
|
343
|
+
function createThesaurus(thesaurus: KeywordThesaurus) {
|
|
344
|
+
return pipe(
|
|
345
|
+
createElement('gmd:thesaurusName'),
|
|
346
|
+
createChild('gmd:CI_Citation'),
|
|
347
|
+
appendChildren(
|
|
348
|
+
pipe(
|
|
349
|
+
createElement('gmd:title'),
|
|
350
|
+
writeCharacterString(thesaurus.name || thesaurus.id)
|
|
351
|
+
),
|
|
352
|
+
pipe(
|
|
353
|
+
createElement('gmd:identifier'),
|
|
354
|
+
createChild('gmd:MD_Identifier'),
|
|
355
|
+
appendChildren(
|
|
356
|
+
pipe(
|
|
357
|
+
createElement('gmd:code'),
|
|
358
|
+
thesaurus.url
|
|
359
|
+
? writeAnchor(thesaurus.url, thesaurus.id)
|
|
360
|
+
: writeCharacterString(thesaurus.id)
|
|
361
|
+
)
|
|
343
362
|
)
|
|
344
363
|
)
|
|
345
364
|
)
|
|
346
365
|
)
|
|
347
366
|
}
|
|
348
367
|
|
|
349
|
-
function appendKeywords(keywords:
|
|
368
|
+
function appendKeywords(keywords: Keyword[]) {
|
|
369
|
+
const keywordsByThesaurus: Keyword[][] = keywords.reduce((acc, keyword) => {
|
|
370
|
+
const thesaurusId = keyword.thesaurus?.id
|
|
371
|
+
const type = keyword.type
|
|
372
|
+
let existingGroup = acc.find((group) =>
|
|
373
|
+
group[0].thesaurus
|
|
374
|
+
? group[0].thesaurus.id === thesaurusId
|
|
375
|
+
: group[0].type === type
|
|
376
|
+
)
|
|
377
|
+
if (!existingGroup) {
|
|
378
|
+
existingGroup = []
|
|
379
|
+
acc.push(existingGroup)
|
|
380
|
+
}
|
|
381
|
+
existingGroup.push(keyword)
|
|
382
|
+
return acc
|
|
383
|
+
}, [])
|
|
350
384
|
return appendChildren(
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
385
|
+
...keywordsByThesaurus.map((keywords) =>
|
|
386
|
+
pipe(
|
|
387
|
+
createElement('gmd:descriptiveKeywords'),
|
|
388
|
+
createChild('gmd:MD_Keywords'),
|
|
389
|
+
appendChildren(
|
|
390
|
+
pipe(
|
|
391
|
+
createElement('gmd:type'),
|
|
392
|
+
createChild('gmd:MD_KeywordTypeCode'),
|
|
393
|
+
addAttribute(
|
|
394
|
+
'codeList',
|
|
395
|
+
'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_KeywordTypeCode'
|
|
396
|
+
),
|
|
397
|
+
addAttribute('codeListValue', keywords[0].type)
|
|
398
|
+
)
|
|
399
|
+
),
|
|
400
|
+
keywords[0].thesaurus
|
|
401
|
+
? appendChildren(createThesaurus(keywords[0].thesaurus))
|
|
402
|
+
: noop,
|
|
403
|
+
appendChildren(
|
|
404
|
+
...keywords.map((keyword) =>
|
|
356
405
|
pipe(
|
|
357
|
-
createElement('gmd:
|
|
358
|
-
|
|
359
|
-
addAttribute(
|
|
360
|
-
'codeList',
|
|
361
|
-
'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_KeywordTypeCode'
|
|
362
|
-
),
|
|
363
|
-
addAttribute('codeListValue', type)
|
|
406
|
+
createElement('gmd:keyword'),
|
|
407
|
+
writeCharacterString(keyword.label)
|
|
364
408
|
)
|
|
365
409
|
)
|
|
366
|
-
: noop,
|
|
367
|
-
appendChildren(
|
|
368
|
-
...keywords.map((keyword) =>
|
|
369
|
-
pipe(createElement('gmd:keyword'), writeCharacterString(keyword))
|
|
370
410
|
)
|
|
371
411
|
)
|
|
372
412
|
)
|
|
@@ -740,16 +780,24 @@ export function writeContacts(record: CatalogRecord, rootEl: XmlElement) {
|
|
|
740
780
|
export function writeKeywords(record: CatalogRecord, rootEl: XmlElement) {
|
|
741
781
|
pipe(
|
|
742
782
|
findOrCreateIdentification(),
|
|
743
|
-
removeKeywords(
|
|
744
|
-
appendKeywords(record.keywords
|
|
783
|
+
removeKeywords(),
|
|
784
|
+
appendKeywords(record.keywords)
|
|
745
785
|
)(rootEl)
|
|
746
786
|
}
|
|
747
787
|
|
|
748
|
-
export function
|
|
788
|
+
export function writeTopics(record: CatalogRecord, rootEl: XmlElement) {
|
|
749
789
|
pipe(
|
|
750
790
|
findOrCreateIdentification(),
|
|
751
|
-
|
|
752
|
-
|
|
791
|
+
removeChildrenByName('gmd:topicCategory'),
|
|
792
|
+
appendChildren(
|
|
793
|
+
...record.topics.map((topic) =>
|
|
794
|
+
pipe(
|
|
795
|
+
createElement('gmd:topicCategory'),
|
|
796
|
+
createChild('gmd:MD_TopicCategoryCode'),
|
|
797
|
+
setTextContent(topic)
|
|
798
|
+
)
|
|
799
|
+
)
|
|
800
|
+
)
|
|
753
801
|
)(rootEl)
|
|
754
802
|
}
|
|
755
803
|
|
package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts
CHANGED
|
@@ -25,7 +25,14 @@ import {
|
|
|
25
25
|
SourceWithUnknownProps,
|
|
26
26
|
} from '../../../../../../../libs/api/metadata-converter/src'
|
|
27
27
|
import { combineLatest, Observable, of, switchMap, takeLast } from 'rxjs'
|
|
28
|
-
import {
|
|
28
|
+
import {
|
|
29
|
+
filter,
|
|
30
|
+
map,
|
|
31
|
+
shareReplay,
|
|
32
|
+
startWith,
|
|
33
|
+
tap,
|
|
34
|
+
withLatestFrom,
|
|
35
|
+
} from 'rxjs/operators'
|
|
29
36
|
import { LangService } from '../../../../../../../libs/util/i18n/src'
|
|
30
37
|
import { PlatformServiceInterface } from '../../../../../../../libs/common/domain/src/lib/platform.service.interface'
|
|
31
38
|
import { coerce, satisfies, valid } from 'semver'
|
|
@@ -296,15 +303,28 @@ export class OrganizationsFromMetadataService
|
|
|
296
303
|
|
|
297
304
|
const ownerOrganization = allContactOrgs[0]
|
|
298
305
|
|
|
306
|
+
// read the owner group as well to have a fallback logo
|
|
307
|
+
const groupId = selectField(source, 'groupOwner')
|
|
308
|
+
const group$ = this.groups$.pipe(
|
|
309
|
+
map((groups) =>
|
|
310
|
+
groups.find((group) => {
|
|
311
|
+
return group.id === Number(groupId)
|
|
312
|
+
})
|
|
313
|
+
)
|
|
314
|
+
)
|
|
315
|
+
|
|
299
316
|
return this.organisations$.pipe(
|
|
300
317
|
takeLast(1),
|
|
301
|
-
|
|
318
|
+
withLatestFrom(group$),
|
|
319
|
+
map(([organisations, group]: [Organization[], GroupApiModel]) => {
|
|
302
320
|
const recordOrganisation = organisations.filter(
|
|
303
321
|
(org) => org.name === ownerOrganization.name
|
|
304
322
|
)[0]
|
|
323
|
+
const logoUrl = group?.logo && getAsUrl(`${IMAGE_URL}${group.logo}`)
|
|
305
324
|
return {
|
|
306
325
|
...record,
|
|
307
326
|
ownerOrganization: {
|
|
327
|
+
logoUrl,
|
|
308
328
|
...ownerOrganization,
|
|
309
329
|
...recordOrganisation,
|
|
310
330
|
},
|
|
@@ -45,12 +45,23 @@ export class Gn4PlatformMapper {
|
|
|
45
45
|
return { ...apiUser, id: id.toString() } as UserModel
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
thesaurusFromApi(thesaurus: any[]): ThesaurusModel {
|
|
48
|
+
thesaurusFromApi(thesaurus: any[], lang3?: string): ThesaurusModel {
|
|
49
49
|
return thesaurus.map((keyword) => {
|
|
50
|
-
|
|
50
|
+
let key = keyword.uri
|
|
51
|
+
// sometines GN can prefix an URI with an "all thesaurus" URI; only keep the last one
|
|
52
|
+
if (key.indexOf('@@@') > -1) {
|
|
53
|
+
key = key.split('@@@')[1]
|
|
54
|
+
}
|
|
55
|
+
const label =
|
|
56
|
+
lang3 && lang3 in keyword.values ? keyword.values[lang3] : keyword.value
|
|
57
|
+
const description =
|
|
58
|
+
lang3 && lang3 in keyword.definitions
|
|
59
|
+
? keyword.definitions[lang3]
|
|
60
|
+
: keyword.definition
|
|
51
61
|
return {
|
|
52
|
-
key
|
|
53
|
-
label
|
|
62
|
+
key,
|
|
63
|
+
label,
|
|
64
|
+
description,
|
|
54
65
|
}
|
|
55
66
|
})
|
|
56
67
|
}
|
|
@@ -14,8 +14,10 @@ import { Organization } from '../../../../../../../libs/common/domain/src/lib/mo
|
|
|
14
14
|
import { Gn4PlatformMapper } from './gn4-platform.mapper'
|
|
15
15
|
import { ltr } from 'semver'
|
|
16
16
|
import { ThesaurusModel } from '../../../../../../../libs/common/domain/src/lib/model/thesaurus/thesaurus.model'
|
|
17
|
+
import { LangService } from '../../../../../../../libs/util/i18n/src'
|
|
17
18
|
|
|
18
19
|
const minApiVersion = '4.2.2'
|
|
20
|
+
|
|
19
21
|
@Injectable()
|
|
20
22
|
export class Gn4PlatformService implements PlatformServiceInterface {
|
|
21
23
|
private readonly type = 'GeoNetwork'
|
|
@@ -50,13 +52,20 @@ export class Gn4PlatformService implements PlatformServiceInterface {
|
|
|
50
52
|
shareReplay(1)
|
|
51
53
|
)
|
|
52
54
|
|
|
55
|
+
/**
|
|
56
|
+
* A map of already loaded thesauri (groups of keywords); the key is a URI
|
|
57
|
+
* @private
|
|
58
|
+
*/
|
|
59
|
+
private thesauri: Record<string, Observable<ThesaurusModel>> = {}
|
|
60
|
+
|
|
53
61
|
constructor(
|
|
54
62
|
private siteApiService: SiteApiService,
|
|
55
63
|
private meApi: MeApiService,
|
|
56
64
|
private usersApi: UsersApiService,
|
|
57
65
|
private mapper: Gn4PlatformMapper,
|
|
58
66
|
private toolsApiService: ToolsApiService,
|
|
59
|
-
private registriesApiService: RegistriesApiService
|
|
67
|
+
private registriesApiService: RegistriesApiService,
|
|
68
|
+
private langService: LangService
|
|
60
69
|
) {
|
|
61
70
|
this.me$ = this.meApi.getMe().pipe(
|
|
62
71
|
switchMap((apiUser) => this.mapper.userFromMeApi(apiUser)),
|
|
@@ -98,17 +107,47 @@ export class Gn4PlatformService implements PlatformServiceInterface {
|
|
|
98
107
|
}
|
|
99
108
|
|
|
100
109
|
translateKey(key: string): Observable<string> {
|
|
110
|
+
// if the key is a URI, use the registries API to look for the translation
|
|
111
|
+
if (key.match(/^https?:\/\//)) {
|
|
112
|
+
// the thesaurus URI is inferred by removing a part of the keyword URI
|
|
113
|
+
// this is not exact science but it's OK, we'll still end up loading a bunch of keywords at once anyway
|
|
114
|
+
const thesaurusUri = key.replace(/\/([^/]+)$/, '/')
|
|
115
|
+
return this.getThesaurusByUri(thesaurusUri).pipe(
|
|
116
|
+
map((thesaurus) => {
|
|
117
|
+
for (const item of thesaurus) {
|
|
118
|
+
if (item.key === key) return item.label
|
|
119
|
+
}
|
|
120
|
+
return key
|
|
121
|
+
})
|
|
122
|
+
)
|
|
123
|
+
}
|
|
101
124
|
return this.keyTranslations$.pipe(map((translations) => translations[key]))
|
|
102
125
|
}
|
|
103
126
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
.searchKeywords(
|
|
127
|
+
getThesaurusByUri(uri: string): Observable<ThesaurusModel> {
|
|
128
|
+
if (this.thesauri[uri]) {
|
|
129
|
+
return this.thesauri[uri]
|
|
130
|
+
}
|
|
131
|
+
this.thesauri[uri] = this.registriesApiService
|
|
132
|
+
.searchKeywords(
|
|
133
|
+
null,
|
|
134
|
+
this.langService.iso3,
|
|
135
|
+
1000,
|
|
136
|
+
0,
|
|
137
|
+
null,
|
|
138
|
+
null,
|
|
139
|
+
null,
|
|
140
|
+
`${uri}*`
|
|
141
|
+
)
|
|
110
142
|
.pipe(
|
|
111
|
-
map((thesaurus) =>
|
|
143
|
+
map((thesaurus) =>
|
|
144
|
+
this.mapper.thesaurusFromApi(
|
|
145
|
+
thesaurus as any[],
|
|
146
|
+
this.langService.iso3
|
|
147
|
+
)
|
|
148
|
+
),
|
|
149
|
+
shareReplay(1)
|
|
112
150
|
)
|
|
151
|
+
return this.thesauri[uri]
|
|
113
152
|
}
|
|
114
153
|
}
|
|
@@ -60,6 +60,22 @@ export type SpatialRepresentationType =
|
|
|
60
60
|
| 'table'
|
|
61
61
|
| 'point'
|
|
62
62
|
|
|
63
|
+
export type KeywordType = 'place' | 'temporal' | 'theme' | 'other'
|
|
64
|
+
|
|
65
|
+
export type KeywordThesaurus = {
|
|
66
|
+
id: string
|
|
67
|
+
name?: string
|
|
68
|
+
url?: URL
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export interface Keyword {
|
|
72
|
+
label: string
|
|
73
|
+
type: KeywordType
|
|
74
|
+
thesaurus?: KeywordThesaurus
|
|
75
|
+
}
|
|
76
|
+
// languages should be expressed using two-letters ISO 639-1 codes
|
|
77
|
+
export type LanguageCode = string
|
|
78
|
+
|
|
63
79
|
export interface BaseRecord {
|
|
64
80
|
uniqueIdentifier: Uuid
|
|
65
81
|
ownerOrganization: Organization
|
|
@@ -68,9 +84,11 @@ export interface BaseRecord {
|
|
|
68
84
|
abstract: string
|
|
69
85
|
recordCreated?: Date
|
|
70
86
|
recordUpdated: Date
|
|
87
|
+
recordPublished?: Date
|
|
88
|
+
languages: Array<LanguageCode>
|
|
71
89
|
kind: RecordKind
|
|
72
|
-
|
|
73
|
-
keywords: Array<
|
|
90
|
+
topics: Array<string> // TODO: handle codelists
|
|
91
|
+
keywords: Array<Keyword>
|
|
74
92
|
licenses: Array<Constraint>
|
|
75
93
|
legalConstraints: Array<Constraint>
|
|
76
94
|
securityConstraints: Array<Constraint>
|
|
@@ -80,7 +98,6 @@ export interface BaseRecord {
|
|
|
80
98
|
landingPage?: URL
|
|
81
99
|
updateFrequency?: UpdateFrequency
|
|
82
100
|
|
|
83
|
-
// to add: iso19139.topicCategory
|
|
84
101
|
// to add: canonical url
|
|
85
102
|
// to add: source catalog (??)
|
|
86
103
|
// to add: is open data ?
|
|
@@ -15,8 +15,5 @@ export abstract class PlatformServiceInterface {
|
|
|
15
15
|
): Observable<UserModel[]>
|
|
16
16
|
abstract getOrganizations(): Observable<Organization[]>
|
|
17
17
|
abstract translateKey(key: string): Observable<string>
|
|
18
|
-
abstract
|
|
19
|
-
thesaurusName: string,
|
|
20
|
-
lang: string
|
|
21
|
-
): Observable<ThesaurusModel>
|
|
18
|
+
abstract getThesaurusByUri(uri: string): Observable<ThesaurusModel>
|
|
22
19
|
}
|
|
@@ -131,7 +131,7 @@ export const ES_FIXTURE_FULL_RESPONSE = deepFreeze({
|
|
|
131
131
|
creationDateForResource: ['2012-01-01T00:00:00.000Z'],
|
|
132
132
|
creationYearForResource: '2012',
|
|
133
133
|
creationMonthForResource: '2012-01',
|
|
134
|
-
publicationDateForResource:
|
|
134
|
+
publicationDateForResource: '2021-04-01T00:00:00.000Z',
|
|
135
135
|
publicationYearForResource: '2021',
|
|
136
136
|
publicationMonthForResource: '2021-04',
|
|
137
137
|
resourceDate: [
|
|
@@ -64,7 +64,7 @@ export const GROUPS_FIXTURE = deepFreeze([
|
|
|
64
64
|
defaultCategory: null,
|
|
65
65
|
allowedCategories: [],
|
|
66
66
|
enableAllowedCategories: false,
|
|
67
|
-
id:
|
|
67
|
+
id: 2,
|
|
68
68
|
email: 'ifremer.ifremer@ifremer.admin.fr',
|
|
69
69
|
referrer: null,
|
|
70
70
|
description: "Institut français de recherche pour l'exploitation de la mer",
|
|
@@ -69,8 +69,24 @@ Cette section contient des *caractères internationaux* (ainsi que des "caractè
|
|
|
69
69
|
url: new URL('http://my-org.net/two.png'),
|
|
70
70
|
},
|
|
71
71
|
],
|
|
72
|
-
keywords: [
|
|
73
|
-
|
|
72
|
+
keywords: [
|
|
73
|
+
{
|
|
74
|
+
thesaurus: { id: 'geonetwork.thesaurus.local' },
|
|
75
|
+
type: 'other',
|
|
76
|
+
label: 'international',
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
thesaurus: { id: 'geonetwork.thesaurus.local' },
|
|
80
|
+
type: 'other',
|
|
81
|
+
label: 'test',
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
thesaurus: { id: 'geonetwork.thesaurus.local' },
|
|
85
|
+
type: 'other',
|
|
86
|
+
label: '_another_keyword_',
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
topics: ['testData', 'exampleData'],
|
|
74
90
|
spatialRepresentation: 'grid',
|
|
75
91
|
distributions: [
|
|
76
92
|
{
|
|
@@ -115,7 +131,7 @@ As such, **it is not very interesting at all.**`,
|
|
|
115
131
|
url: new URL('https://data.rennesmetropole.fr/pages/licence/'),
|
|
116
132
|
},
|
|
117
133
|
],
|
|
118
|
-
|
|
134
|
+
legalConstraints: [
|
|
119
135
|
{
|
|
120
136
|
text: "Dataset access isn't possible since it does not really exist",
|
|
121
137
|
type: 'other',
|
|
@@ -125,12 +141,15 @@ As such, **it is not very interesting at all.**`,
|
|
|
125
141
|
type: 'security',
|
|
126
142
|
},
|
|
127
143
|
],
|
|
144
|
+
securityConstraints: [],
|
|
145
|
+
otherConstraints: [],
|
|
128
146
|
spatialExtents: [],
|
|
129
147
|
temporalExtents: [],
|
|
130
148
|
updateFrequency: {
|
|
131
149
|
updatedTimes: 3,
|
|
132
150
|
per: 'month',
|
|
133
151
|
},
|
|
152
|
+
languages: ['en'],
|
|
134
153
|
},
|
|
135
154
|
{
|
|
136
155
|
uniqueIdentifier: '7d002c4c-92ef-4b9f-a568-d732f740b99e',
|
|
@@ -168,13 +187,33 @@ Malgré l'attention portée à la création de ces données, il est rappelé que
|
|
|
168
187
|
},
|
|
169
188
|
],
|
|
170
189
|
keywords: [
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
190
|
+
{
|
|
191
|
+
thesaurus: { id: 'geonetwork.thesaurus.local' },
|
|
192
|
+
type: 'other',
|
|
193
|
+
label: 'planification',
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
thesaurus: { id: 'geonetwork.thesaurus.local' },
|
|
197
|
+
type: 'other',
|
|
198
|
+
label: 'PLU',
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
thesaurus: { id: 'geonetwork.thesaurus.local' },
|
|
202
|
+
type: 'other',
|
|
203
|
+
label: "Plan local d'urbanisme",
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
thesaurus: { id: 'geonetwork.thesaurus.local' },
|
|
207
|
+
type: 'other',
|
|
208
|
+
label: 'données ouvertes',
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
thesaurus: { id: 'geonetwork.thesaurus.local' },
|
|
212
|
+
type: 'other',
|
|
213
|
+
label: 'Avrigny*60036',
|
|
214
|
+
},
|
|
176
215
|
],
|
|
177
|
-
|
|
216
|
+
topics: ['Usage des sols', "document d'urbanisme"],
|
|
178
217
|
spatialRepresentation: 'vector',
|
|
179
218
|
distributions: [
|
|
180
219
|
{
|
|
@@ -189,7 +228,9 @@ Malgré l'attention portée à la création de ces données, il est rappelé que
|
|
|
189
228
|
],
|
|
190
229
|
lineage: `Document d’urbanisme numérisé conformément aux prescriptions nationales du CNIG par le Service d'Information Géographique de l'Agglomération de la Région de Compiègne.
|
|
191
230
|
Ce lot de données produit en 2019, a été numérisé à partir du PCI Vecteur de 2019 et contrôlé par le Service d'Information Géographique de l'Agglomération de la Région de Compiègne.`,
|
|
192
|
-
|
|
231
|
+
legalConstraints: [],
|
|
232
|
+
securityConstraints: [],
|
|
233
|
+
otherConstraints: [],
|
|
193
234
|
useLimitations: ["Aucune condition ne s'applique", 'Licence Ouverte 2.0'],
|
|
194
235
|
licenses: [
|
|
195
236
|
{
|
|
@@ -200,5 +241,6 @@ Ce lot de données produit en 2019, a été numérisé à partir du PCI Vecteur
|
|
|
200
241
|
temporalExtents: [],
|
|
201
242
|
status: 'completed',
|
|
202
243
|
updateFrequency: 'unknown',
|
|
244
|
+
languages: ['fr', 'de'],
|
|
203
245
|
},
|
|
204
246
|
])
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
export * from './lib/+state/editor.facade'
|
|
2
|
+
export * from './lib/+state/editor.models'
|
|
3
|
+
export * from './lib/+state/editor.selectors'
|
|
4
|
+
export * from './lib/+state/editor.reducer'
|
|
5
|
+
export * from './lib/+state/editor.actions'
|
|
1
6
|
export * from './lib/feature-editor.module'
|
|
2
7
|
export * from './lib/services/editor.service'
|
|
3
8
|
export * from './lib/record-form/record-form.component'
|