geonetwork-ui 2.6.0-dev.5b83cdcc5 → 2.6.0-dev.609dd7257
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/common/distribution.mapper.mjs +3 -1
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +40 -4
- 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 +4 -4
- 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 +5 -2
- package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +4 -4
- package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +79 -16
- 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/dataviz/src/lib/chart-view/chart-view.component.mjs +45 -9
- package/esm2022/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.mjs +2 -2
- package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +32 -2
- package/esm2022/libs/feature/dataviz/src/lib/table-view/table-view.component.mjs +25 -6
- 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/index.mjs +2 -3
- package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +3 -3
- package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +68 -16
- package/esm2022/libs/feature/record/src/lib/state/mdview.actions.mjs +3 -1
- package/esm2022/libs/feature/record/src/lib/state/mdview.effects.mjs +7 -1
- package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +13 -13
- package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +7 -1
- package/esm2022/libs/feature/record/src/lib/state/mdview.selectors.mjs +3 -1
- package/esm2022/libs/feature/search/src/lib/constants.mjs +4 -2
- package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +5 -3
- package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +6 -2
- package/esm2022/libs/feature/search/src/lib/results-table/results-table-container.component.mjs +13 -10
- package/esm2022/libs/ui/dataviz/src/lib/chart/chart.component.mjs +5 -3
- package/esm2022/libs/ui/dataviz/src/lib/data-table/data-table.component.mjs +11 -6
- package/esm2022/libs/ui/elements/src/index.mjs +3 -2
- package/esm2022/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.mjs +55 -0
- package/esm2022/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.mjs +42 -83
- 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/kind-badge/kind-badge.component.mjs +22 -5
- 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 +3 -3
- package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +37 -12
- 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 +72 -0
- package/esm2022/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.mjs +12 -4
- package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +14 -4
- package/esm2022/libs/ui/inputs/src/index.mjs +2 -1
- package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.mjs +68 -0
- package/esm2022/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.mjs +3 -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/expandable-panel/expandable-panel.component.mjs +34 -13
- 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 +38 -21
- package/esm2022/libs/ui/layout/src/lib/ui-layout.module.mjs +2 -2
- package/esm2022/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.mjs +29 -4
- package/esm2022/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.mjs +2 -1
- package/esm2022/libs/ui/search/src/index.mjs +2 -1
- package/esm2022/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.mjs +4 -8
- package/esm2022/libs/ui/search/src/lib/results-hits-search-kind/results-hits-search-kind.component.mjs +3 -3
- package/esm2022/libs/ui/search/src/lib/results-list/results-layout.config.mjs +2 -2
- package/esm2022/libs/ui/search/src/lib/results-list/results-list.component.mjs +3 -3
- 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/libs/util/shared/src/lib/links/link-classifier.service.mjs +4 -1
- package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +4 -1
- package/esm2022/translations/de.json +47 -7
- package/esm2022/translations/en.json +47 -9
- package/esm2022/translations/es.json +46 -6
- package/esm2022/translations/fr.json +47 -9
- package/esm2022/translations/it.json +76 -36
- package/esm2022/translations/nl.json +46 -6
- package/esm2022/translations/pt.json +46 -6
- package/fesm2022/geonetwork-ui.mjs +2475 -1201
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/metadata-converter/src/lib/common/distribution.mapper.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/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/elasticsearch/elasticsearch.service.d.ts +1 -1
- package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +13 -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 +21 -15
- 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 +6 -0
- package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
- package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts +12 -8
- package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts.map +1 -1
- package/libs/feature/dataviz/src/lib/service/data.service.d.ts +1 -0
- package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
- package/libs/feature/dataviz/src/lib/table-view/table-view.component.d.ts +5 -2
- package/libs/feature/dataviz/src/lib/table-view/table-view.component.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/index.d.ts +1 -2
- package/libs/feature/record/src/index.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/record/src/lib/state/mdview.actions.d.ts +10 -0
- package/libs/feature/record/src/lib/state/mdview.actions.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.effects.d.ts +6 -0
- package/libs/feature/record/src/lib/state/mdview.effects.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.facade.d.ts +28 -21
- package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.reducer.d.ts +2 -0
- package/libs/feature/record/src/lib/state/mdview.reducer.d.ts.map +1 -1
- package/libs/feature/record/src/lib/state/mdview.selectors.d.ts +2 -0
- package/libs/feature/record/src/lib/state/mdview.selectors.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-list/results-list.container.component.d.ts +1 -1
- package/libs/feature/search/src/lib/results-list/results-list.container.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/dataviz/src/lib/chart/chart.component.d.ts +2 -1
- package/libs/ui/dataviz/src/lib/chart/chart.component.d.ts.map +1 -1
- package/libs/ui/dataviz/src/lib/data-table/data-table.component.d.ts +6 -1
- package/libs/ui/dataviz/src/lib/data-table/data-table.component.d.ts.map +1 -1
- package/libs/ui/elements/src/index.d.ts +2 -1
- package/libs/ui/elements/src/index.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts +15 -0
- package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts.map +1 -0
- package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts +6 -13
- 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/kind-badge/kind-badge.component.d.ts +3 -1
- package/libs/ui/elements/src/lib/kind-badge/kind-badge.component.d.ts.map +1 -1
- 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 +27 -0
- package/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.d.ts.map +1 -0
- package/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.d.ts +1 -0
- package/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts +3 -1
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
- package/libs/ui/inputs/src/index.d.ts +1 -0
- package/libs/ui/inputs/src/index.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts +17 -0
- package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts.map +1 -0
- 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/expandable-panel/expandable-panel.component.d.ts +15 -8
- package/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.d.ts.map +1 -1
- 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 +13 -9
- package/libs/ui/layout/src/lib/truncated-text/truncated-text.component.d.ts.map +1 -1
- package/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.d.ts +6 -2
- package/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.d.ts.map +1 -1
- package/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.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-list/results-list.component.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/libs/util/shared/src/lib/links/link-classifier.service.d.ts.map +1 -1
- package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/libs/api/metadata-converter/src/lib/common/distribution.mapper.ts +1 -0
- 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 +62 -4
- 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 +8 -4
- 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 +4 -1
- package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +3 -3
- package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +118 -16
- 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 +22 -9
- package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +6 -0
- package/src/libs/common/fixtures/src/lib/elasticsearch/metadata-links.fixtures.ts +10 -0
- package/src/libs/common/fixtures/src/lib/link.fixtures.ts +14 -0
- package/src/libs/common/fixtures/src/lib/records.fixtures.ts +62 -1
- package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.html +12 -9
- package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +54 -10
- package/src/libs/feature/dataviz/src/lib/service/data.service.ts +37 -0
- package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.html +1 -0
- package/src/libs/feature/dataviz/src/lib/table-view/table-view.component.ts +27 -1
- 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/index.ts +1 -2
- package/src/libs/feature/record/src/lib/data-view/data-view.component.html +2 -0
- package/src/libs/feature/record/src/lib/map-view/map-view.component.html +31 -10
- package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +106 -18
- package/src/libs/feature/record/src/lib/state/mdview.actions.ts +10 -0
- package/src/libs/feature/record/src/lib/state/mdview.effects.ts +22 -0
- package/src/libs/feature/record/src/lib/state/mdview.facade.ts +22 -15
- package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +12 -0
- package/src/libs/feature/record/src/lib/state/mdview.selectors.ts +9 -0
- package/src/libs/feature/search/src/lib/constants.ts +3 -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-list/results-list.container.component.ts +2 -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/dataviz/src/lib/chart/chart.component.ts +2 -1
- package/src/libs/ui/dataviz/src/lib/data-table/data-table.component.html +6 -3
- package/src/libs/ui/dataviz/src/lib/data-table/data-table.component.ts +5 -4
- package/src/libs/ui/elements/src/index.ts +2 -1
- package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.css +4 -0
- package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.html +13 -0
- package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.ts +54 -0
- package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.html +68 -141
- package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.ts +38 -97
- 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/kind-badge/kind-badge.component.html +7 -5
- package/src/libs/ui/elements/src/lib/kind-badge/kind-badge.component.ts +21 -2
- package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +6 -3
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +4 -0
- package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.html +1 -1
- 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 +107 -0
- package/src/libs/ui/elements/src/lib/record-feature-catalog/feature-catalog-list/feature-catalog-list.component.ts +83 -0
- package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.html +15 -1
- package/src/libs/ui/elements/src/lib/service-capabilities/service-capabilities.component.ts +9 -1
- package/src/libs/ui/elements/src/lib/ui-elements.module.ts +5 -1
- package/src/libs/ui/inputs/src/index.ts +1 -0
- package/src/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.html +1 -1
- package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.html +43 -0
- package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.ts +77 -0
- package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.html +1 -2
- 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/expandable-panel/expandable-panel.component.html +24 -8
- package/src/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.ts +36 -10
- 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 -44
- package/src/libs/ui/layout/src/lib/truncated-text/truncated-text.component.ts +46 -17
- package/src/libs/ui/layout/src/lib/ui-layout.module.ts +1 -1
- package/src/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.html +3 -3
- package/src/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.ts +27 -3
- package/src/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.ts +1 -0
- package/src/libs/ui/search/src/index.ts +1 -0
- package/src/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.html +9 -81
- package/src/libs/ui/search/src/lib/results-hits-search-kind/results-hits-search-kind.component.html +1 -0
- package/src/libs/ui/search/src/lib/results-list/results-layout.config.ts +2 -2
- package/src/libs/ui/search/src/lib/results-list/results-list.component.html +1 -0
- package/src/libs/ui/search/src/lib/results-list/results-list.component.ts +0 -1
- 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/src/libs/util/shared/src/lib/links/link-classifier.service.ts +3 -0
- package/src/libs/util/shared/src/lib/links/link-utils.ts +3 -0
- package/tailwind.base.css +1 -1
- package/translations/de.json +47 -7
- package/translations/en.json +47 -9
- package/translations/es.json +46 -6
- package/translations/fr.json +47 -9
- package/translations/it.json +76 -36
- package/translations/nl.json +46 -6
- package/translations/pt.json +46 -6
- package/translations/sk.json +46 -6
- package/esm2022/libs/ui/elements/src/lib/related-record-card/related-record-card.component.mjs +0 -46
- package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts +0 -12
- package/libs/ui/elements/src/lib/related-record-card/related-record-card.component.d.ts.map +0 -1
- package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.html +0 -30
- package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.ts +0 -48
- /package/src/libs/ui/{elements/src/lib/related-record-card/related-record-card.component.css → inputs/src/lib/search-feature-catalog/search-feature-catalog.component.css} +0 -0
|
@@ -152,12 +152,22 @@ export class Gn4FieldMapper {
|
|
|
152
152
|
)
|
|
153
153
|
const languages = langList.map((lang) => LANG_3_TO_2_MAPPER[lang])
|
|
154
154
|
const defaultLanguage = output.defaultLanguage ?? languages[0] ?? null // set the first language as main one as fallback
|
|
155
|
+
|
|
156
|
+
return {
|
|
157
|
+
...output,
|
|
158
|
+
defaultLanguage,
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
otherLanguage: (output, source) => {
|
|
162
|
+
const langList = getAsArray(selectField<string>(source, 'otherLanguage'))
|
|
163
|
+
const languages = langList.map((lang) => LANG_3_TO_2_MAPPER[lang])
|
|
164
|
+
const defaultLanguage = output.defaultLanguage ?? languages[0] ?? null
|
|
155
165
|
const otherLanguages = languages.filter(
|
|
156
166
|
(lang) => lang !== defaultLanguage
|
|
157
167
|
)
|
|
168
|
+
|
|
158
169
|
return {
|
|
159
170
|
...output,
|
|
160
|
-
defaultLanguage,
|
|
161
171
|
otherLanguages,
|
|
162
172
|
}
|
|
163
173
|
},
|
|
@@ -294,12 +304,52 @@ export class Gn4FieldMapper {
|
|
|
294
304
|
) ?? {},
|
|
295
305
|
'_source'
|
|
296
306
|
)
|
|
297
|
-
const featureCatalogIdentifier = selectField(
|
|
307
|
+
const featureCatalogIdentifier: string = selectField(
|
|
298
308
|
<SourceWithUnknownProps>fcatSource,
|
|
299
309
|
'uuid'
|
|
300
310
|
)
|
|
301
|
-
|
|
302
|
-
|
|
311
|
+
const sourceOfLinks = getAsArray(
|
|
312
|
+
selectField(
|
|
313
|
+
<SourceWithUnknownProps>selectField(source, 'related'),
|
|
314
|
+
'hassources'
|
|
315
|
+
)
|
|
316
|
+
)
|
|
317
|
+
const sourceOfIdentifiers: string[] = sourceOfLinks
|
|
318
|
+
.filter((link) => link['origin'] === 'catalog')
|
|
319
|
+
.map((link) => {
|
|
320
|
+
return selectField(
|
|
321
|
+
selectField(<SourceWithUnknownProps>link, '_source'),
|
|
322
|
+
'uuid'
|
|
323
|
+
)
|
|
324
|
+
})
|
|
325
|
+
const extraValues: Record<string, string | string[]> = {}
|
|
326
|
+
if (featureCatalogIdentifier) {
|
|
327
|
+
extraValues.featureCatalogIdentifier = featureCatalogIdentifier
|
|
328
|
+
}
|
|
329
|
+
if (sourceOfIdentifiers && sourceOfIdentifiers.length > 0) {
|
|
330
|
+
extraValues.sourceOfIdentifiers = sourceOfIdentifiers
|
|
331
|
+
}
|
|
332
|
+
return Object.keys(extraValues).length > 0
|
|
333
|
+
? this.addExtra(extraValues, output)
|
|
334
|
+
: output
|
|
335
|
+
},
|
|
336
|
+
recordLink: (output, source) => {
|
|
337
|
+
const recordLinks = getAsArray(
|
|
338
|
+
selectField<SourceWithUnknownProps[]>(source, 'recordLink')
|
|
339
|
+
)
|
|
340
|
+
const sourcesIdentifiers: string[] = recordLinks
|
|
341
|
+
.filter(
|
|
342
|
+
(link) => link['origin'] === 'catalog' && link['type'] === 'sources'
|
|
343
|
+
)
|
|
344
|
+
.map((link) => selectField(<SourceWithUnknownProps>link, 'to'))
|
|
345
|
+
|
|
346
|
+
return sourcesIdentifiers && sourcesIdentifiers.length > 0
|
|
347
|
+
? this.addExtra(
|
|
348
|
+
{
|
|
349
|
+
sourcesIdentifiers,
|
|
350
|
+
},
|
|
351
|
+
output
|
|
352
|
+
)
|
|
303
353
|
: output
|
|
304
354
|
},
|
|
305
355
|
isPublishedToAll: (output, source) =>
|
|
@@ -309,6 +359,13 @@ export class Gn4FieldMapper {
|
|
|
309
359
|
},
|
|
310
360
|
output
|
|
311
361
|
),
|
|
362
|
+
isHarvested: (output, source) =>
|
|
363
|
+
this.addExtra(
|
|
364
|
+
{
|
|
365
|
+
isHarvested: selectField(source, 'isHarvested') !== 'false',
|
|
366
|
+
},
|
|
367
|
+
output
|
|
368
|
+
),
|
|
312
369
|
edit: (output, source) =>
|
|
313
370
|
this.addExtra(
|
|
314
371
|
{
|
|
@@ -430,6 +487,7 @@ export class Gn4FieldMapper {
|
|
|
430
487
|
/^OGC:WMS/.test(protocol) ||
|
|
431
488
|
/^OGC:WFS/.test(protocol) ||
|
|
432
489
|
/^OGC:WMTS/.test(protocol) ||
|
|
490
|
+
/TMS/i.test(protocol) ||
|
|
433
491
|
/ogc\W*api\W*features/i.test(protocol) ||
|
|
434
492
|
(/^WWW:DOWNLOAD-/.test(protocol) && /data.geopf.fr/.test(url)) // TO DO : change with the good protocol when decided
|
|
435
493
|
) {
|
|
@@ -164,7 +164,6 @@ export type MetadataObject = Partial<{
|
|
|
164
164
|
resourceDate: ResourceDate[]
|
|
165
165
|
resourceEdition: string
|
|
166
166
|
resourceIdentifier: ResourceIdentifier[]
|
|
167
|
-
resourceLanguage: string[]
|
|
168
167
|
resourceTemporalDateRange: ResourceTemporalDateRange[]
|
|
169
168
|
resourceTemporalExtentDateRange: ResourceTemporalDateRange[]
|
|
170
169
|
resourceTitleObject: MultilingualField
|
|
@@ -363,11 +363,18 @@ export function readOnlineResources(rootEl: XmlElement): OnlineResource[] {
|
|
|
363
363
|
)(rootEl)
|
|
364
364
|
}
|
|
365
365
|
|
|
366
|
-
function readLocaleElement(): ChainableFunction<
|
|
366
|
+
export function readLocaleElement(): ChainableFunction<
|
|
367
|
+
XmlElement,
|
|
368
|
+
LanguageCode
|
|
369
|
+
> {
|
|
367
370
|
return pipe(
|
|
368
371
|
findChildElement('lan:LanguageCode'),
|
|
369
372
|
readAttribute('codeListValue'),
|
|
370
|
-
map((lang) =>
|
|
373
|
+
map((lang) => {
|
|
374
|
+
const normalized = lang?.toLowerCase()
|
|
375
|
+
const iso2Lang = LANG_3_TO_2_MAPPER[normalized]
|
|
376
|
+
return iso2Lang ?? lang
|
|
377
|
+
})
|
|
371
378
|
)
|
|
372
379
|
}
|
|
373
380
|
|
|
@@ -381,6 +388,9 @@ export function readDefaultLanguage(rootEl: XmlElement): LanguageCode {
|
|
|
381
388
|
export function readOtherLanguages(rootEl: XmlElement): LanguageCode[] {
|
|
382
389
|
return pipe(
|
|
383
390
|
findChildrenElement('mdb:otherLocale', false),
|
|
384
|
-
mapArray(readLocaleElement())
|
|
391
|
+
mapArray(readLocaleElement()),
|
|
392
|
+
map((languages) =>
|
|
393
|
+
languages.filter((lang): lang is LanguageCode => lang !== null)
|
|
394
|
+
)
|
|
385
395
|
)(rootEl)
|
|
386
396
|
}
|
|
@@ -529,7 +529,11 @@ export function writeOnlineResources(
|
|
|
529
529
|
}
|
|
530
530
|
|
|
531
531
|
function writeLocaleElement(language: LanguageCode) {
|
|
532
|
-
const
|
|
532
|
+
const normalizedLang = language.toLowerCase()
|
|
533
|
+
const lang3 =
|
|
534
|
+
normalizedLang.length === 2
|
|
535
|
+
? LANG_2_TO_3_MAPPER[normalizedLang]
|
|
536
|
+
: normalizedLang
|
|
533
537
|
return pipe(
|
|
534
538
|
findChildOrCreate('lan:PT_Locale'),
|
|
535
539
|
writeAttribute('id', language.toUpperCase()),
|
|
@@ -65,7 +65,8 @@ export function extractCharacterString(): ChainableFunction<
|
|
|
65
65
|
return pipe(
|
|
66
66
|
fallback(
|
|
67
67
|
findChildElement('gco:CharacterString', false),
|
|
68
|
-
findChildElement('gmx:Anchor', false)
|
|
68
|
+
findChildElement('gmx:Anchor', false),
|
|
69
|
+
findChildElement('gmx:MimeFileType', false)
|
|
69
70
|
),
|
|
70
71
|
readText()
|
|
71
72
|
)
|
|
@@ -1161,11 +1162,14 @@ export function readOtherLanguages(rootEl: XmlElement): LanguageCode[] {
|
|
|
1161
1162
|
findChildrenElement('gmd:locale', false),
|
|
1162
1163
|
mapArray(
|
|
1163
1164
|
pipe(
|
|
1164
|
-
findChildElement('
|
|
1165
|
+
findChildElement('lan:LanguageCode'),
|
|
1165
1166
|
readAttribute('codeListValue'),
|
|
1166
|
-
map((lang) => LANG_3_TO_2_MAPPER[lang.toLowerCase()])
|
|
1167
|
+
map((lang) => LANG_3_TO_2_MAPPER[lang.toLowerCase()] ?? lang)
|
|
1167
1168
|
)
|
|
1168
1169
|
),
|
|
1170
|
+
map((languages) =>
|
|
1171
|
+
languages.filter((lang): lang is LanguageCode => lang !== null)
|
|
1172
|
+
),
|
|
1169
1173
|
map((languages) => (languages.length ? languages : [defaultLanguage]))
|
|
1170
1174
|
)(rootEl)
|
|
1171
1175
|
}
|
|
@@ -1173,7 +1177,7 @@ export function readOtherLanguages(rootEl: XmlElement): LanguageCode[] {
|
|
|
1173
1177
|
export function readDefaultLanguage(rootEl: XmlElement): LanguageCode {
|
|
1174
1178
|
return pipe(
|
|
1175
1179
|
findChildElement('gmd:language', false),
|
|
1176
|
-
findChildElement('
|
|
1180
|
+
findChildElement('lan:LanguageCode'),
|
|
1177
1181
|
readAttribute('codeListValue'),
|
|
1178
1182
|
map((lang) => (lang ? LANG_3_TO_2_MAPPER[lang.toLowerCase()] : null))
|
|
1179
1183
|
)(rootEl)
|
|
@@ -1471,7 +1471,10 @@ export function writeLanguages(record: DatasetRecord, rootEl: XmlElement) {
|
|
|
1471
1471
|
writeAttribute('id', lang.toUpperCase()),
|
|
1472
1472
|
createNestedChild('gmd:languageCode', 'gmd:LanguageCode'),
|
|
1473
1473
|
writeAttribute('codeList', 'http://www.loc.gov/standards/iso639-2/'),
|
|
1474
|
-
writeAttribute(
|
|
1474
|
+
writeAttribute(
|
|
1475
|
+
'codeListValue',
|
|
1476
|
+
lang.length === 2 ? LANG_2_TO_3_MAPPER[lang] : lang
|
|
1477
|
+
)
|
|
1475
1478
|
)
|
|
1476
1479
|
|
|
1477
1480
|
// add new languages (only if other than default one)
|
|
@@ -8,6 +8,7 @@ export const ES_SOURCE_SUMMARY = [
|
|
|
8
8
|
'overview',
|
|
9
9
|
'logo',
|
|
10
10
|
'codelist_status_text',
|
|
11
|
+
'link',
|
|
11
12
|
'linkProtocol',
|
|
12
13
|
'contactForResource.organisation',
|
|
13
14
|
'contact.organisation',
|
|
@@ -17,8 +18,10 @@ export const ES_SOURCE_SUMMARY = [
|
|
|
17
18
|
'cl_topic',
|
|
18
19
|
'cl_maintenanceAndUpdateFrequency',
|
|
19
20
|
'tag',
|
|
20
|
-
'
|
|
21
|
+
'MD_LegalConstraints*Object',
|
|
21
22
|
'qualityScore',
|
|
23
|
+
'allKeywords',
|
|
24
|
+
'recordLink',
|
|
22
25
|
]
|
|
23
26
|
|
|
24
27
|
export type EsQueryFieldsPriorityType = Record<string, number>
|
|
@@ -124,11 +124,11 @@ export class ElasticsearchService {
|
|
|
124
124
|
this.runtimeFields[fieldName] = expression
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
|
|
127
|
+
getMetadataByIdsPayload(uuids: string[]): EsSearchParams {
|
|
128
128
|
return {
|
|
129
129
|
query: {
|
|
130
130
|
ids: {
|
|
131
|
-
values:
|
|
131
|
+
values: uuids,
|
|
132
132
|
},
|
|
133
133
|
},
|
|
134
134
|
}
|
|
@@ -137,7 +137,7 @@ export class ElasticsearchService {
|
|
|
137
137
|
getRelatedRecordPayload(
|
|
138
138
|
record: CatalogRecord,
|
|
139
139
|
size = 6,
|
|
140
|
-
_source = [...ES_SOURCE_SUMMARY, '
|
|
140
|
+
_source = [...ES_SOURCE_SUMMARY, 'createDate']
|
|
141
141
|
): EsSearchParams {
|
|
142
142
|
return {
|
|
143
143
|
query: {
|
|
@@ -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({
|
|
@@ -129,9 +133,9 @@ export class Gn4Repository implements RecordsRepositoryInterface {
|
|
|
129
133
|
return this.gn4SearchApi
|
|
130
134
|
.search(
|
|
131
135
|
'bucket',
|
|
132
|
-
['fcats'],
|
|
136
|
+
['fcats', 'hassources'],
|
|
133
137
|
JSON.stringify(
|
|
134
|
-
this.gn4SearchHelper.
|
|
138
|
+
this.gn4SearchHelper.getMetadataByIdsPayload([uniqueIdentifier])
|
|
135
139
|
)
|
|
136
140
|
)
|
|
137
141
|
.pipe(
|
|
@@ -142,6 +146,27 @@ export class Gn4Repository implements RecordsRepositoryInterface {
|
|
|
142
146
|
)
|
|
143
147
|
}
|
|
144
148
|
|
|
149
|
+
getMultipleRecords(
|
|
150
|
+
uniqueIdentifiers: string[]
|
|
151
|
+
): Observable<CatalogRecord[] | null> {
|
|
152
|
+
return this.gn4SearchApi
|
|
153
|
+
.search(
|
|
154
|
+
'bucket',
|
|
155
|
+
undefined,
|
|
156
|
+
JSON.stringify(
|
|
157
|
+
this.gn4SearchHelper.getMetadataByIdsPayload(uniqueIdentifiers)
|
|
158
|
+
)
|
|
159
|
+
)
|
|
160
|
+
.pipe(
|
|
161
|
+
map((results: Gn4SearchResults) => results.hits.hits),
|
|
162
|
+
switchMap((records) =>
|
|
163
|
+
records && records.length > 0
|
|
164
|
+
? this.gn4Mapper.readRecords(records)
|
|
165
|
+
: of(null)
|
|
166
|
+
)
|
|
167
|
+
)
|
|
168
|
+
}
|
|
169
|
+
|
|
145
170
|
private mapEmbeddedFeatureCatalog(
|
|
146
171
|
featureTypes: Array<DatasetFeatureType>
|
|
147
172
|
): DatasetFeatureCatalog {
|
|
@@ -150,10 +175,21 @@ export class Gn4Repository implements RecordsRepositoryInterface {
|
|
|
150
175
|
name: featureType.typeName || '',
|
|
151
176
|
definition: featureType.definition || '',
|
|
152
177
|
attributes: Array.isArray(featureType.attributeTable)
|
|
153
|
-
? featureType.attributeTable.map((attr) =>
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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
|
+
})
|
|
157
193
|
: [],
|
|
158
194
|
})),
|
|
159
195
|
}
|
|
@@ -164,7 +200,8 @@ export class Gn4Repository implements RecordsRepositoryInterface {
|
|
|
164
200
|
): Observable<DatasetFeatureCatalog | null> {
|
|
165
201
|
if (
|
|
166
202
|
record.extras?.['featureTypes'] &&
|
|
167
|
-
Array.isArray(record.extras['featureTypes'])
|
|
203
|
+
Array.isArray(record.extras['featureTypes']) &&
|
|
204
|
+
record.extras['featureTypes'].length > 0
|
|
168
205
|
) {
|
|
169
206
|
return of(this.mapEmbeddedFeatureCatalog(record.extras['featureTypes']))
|
|
170
207
|
}
|
|
@@ -200,6 +237,24 @@ export class Gn4Repository implements RecordsRepositoryInterface {
|
|
|
200
237
|
)
|
|
201
238
|
}
|
|
202
239
|
|
|
240
|
+
getSources(record: CatalogRecord): Observable<CatalogRecord[]> {
|
|
241
|
+
const sourcesIdentifiers = record.extras?.['sourcesIdentifiers'] as string[]
|
|
242
|
+
if (sourcesIdentifiers && sourcesIdentifiers.length > 0) {
|
|
243
|
+
return this.getMultipleRecords(sourcesIdentifiers)
|
|
244
|
+
}
|
|
245
|
+
return of(null)
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
getSourceOf(record: CatalogRecord): Observable<CatalogRecord[]> {
|
|
249
|
+
const sourceOfIdentifiers = record.extras?.[
|
|
250
|
+
'sourceOfIdentifiers'
|
|
251
|
+
] as string[]
|
|
252
|
+
if (sourceOfIdentifiers && sourceOfIdentifiers.length > 0) {
|
|
253
|
+
return this.getMultipleRecords(sourceOfIdentifiers)
|
|
254
|
+
}
|
|
255
|
+
return of(null)
|
|
256
|
+
}
|
|
257
|
+
|
|
203
258
|
aggregate(params: AggregationsParams): Observable<Aggregations> {
|
|
204
259
|
// if aggregations are empty, return an empty object right away
|
|
205
260
|
if (Object.keys(params).length === 0) return of({})
|
|
@@ -252,14 +307,46 @@ export class Gn4Repository implements RecordsRepositoryInterface {
|
|
|
252
307
|
: of(true)
|
|
253
308
|
}
|
|
254
309
|
|
|
255
|
-
|
|
256
|
-
return
|
|
257
|
-
|
|
258
|
-
|
|
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
|
+
)
|
|
259
321
|
})
|
|
260
322
|
)
|
|
261
323
|
}
|
|
262
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
|
+
|
|
263
350
|
openRecordForEdition(
|
|
264
351
|
uniqueIdentifier: string
|
|
265
352
|
): Observable<[CatalogRecord, string, boolean] | null> {
|
|
@@ -362,9 +449,12 @@ export class Gn4Repository implements RecordsRepositoryInterface {
|
|
|
362
449
|
const record = await converter.readRecord(fetchedRecordAsXml)
|
|
363
450
|
|
|
364
451
|
record.title = `${record.title} (Copy)`
|
|
365
|
-
await converter.writeRecord(
|
|
452
|
+
const recordAsXml = await converter.writeRecord(
|
|
453
|
+
record,
|
|
454
|
+
fetchedRecordAsXml
|
|
455
|
+
)
|
|
366
456
|
|
|
367
|
-
return this.saveRecord(record,
|
|
457
|
+
return this.saveRecord(record, recordAsXml, false)
|
|
368
458
|
}),
|
|
369
459
|
exhaustMap((uuidObservable: Observable<string>) => uuidObservable),
|
|
370
460
|
catchError((error: HttpErrorResponse) => {
|
|
@@ -465,6 +555,18 @@ export class Gn4Repository implements RecordsRepositoryInterface {
|
|
|
465
555
|
)
|
|
466
556
|
}
|
|
467
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
|
+
|
|
468
570
|
private getRecordAsXml(uniqueIdentifier: string): Observable<string | null> {
|
|
469
571
|
return this.gn4RecordsApi
|
|
470
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) {
|
|
@@ -152,6 +152,8 @@ export type ServiceProtocol =
|
|
|
152
152
|
| 'esriRest'
|
|
153
153
|
| 'ogcFeatures'
|
|
154
154
|
| 'GPFDL'
|
|
155
|
+
| 'tms'
|
|
156
|
+
| 'maplibre-style'
|
|
155
157
|
| 'other'
|
|
156
158
|
|
|
157
159
|
export type OnlineResourceType = 'service' | 'download' | 'link' | 'endpoint'
|
|
@@ -231,14 +233,6 @@ export interface DatasetRecord extends BaseRecord {
|
|
|
231
233
|
spatialRepresentation?: SpatialRepresentationType
|
|
232
234
|
}
|
|
233
235
|
|
|
234
|
-
export type DatasetFeatureCatalog = {
|
|
235
|
-
featureTypes: Array<{
|
|
236
|
-
name: string
|
|
237
|
-
definition: string
|
|
238
|
-
attributes: Array<{ name: string; title: string }>
|
|
239
|
-
}>
|
|
240
|
-
}
|
|
241
|
-
|
|
242
236
|
export interface ServiceEndpoint {
|
|
243
237
|
url: URL
|
|
244
238
|
accessServiceProtocol: ServiceProtocol
|
|
@@ -266,13 +260,32 @@ export interface ReuseRecord extends BaseRecord {
|
|
|
266
260
|
temporalExtents: Array<DatasetTemporalExtent>
|
|
267
261
|
}
|
|
268
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
|
+
}
|
|
269
282
|
export interface DatasetFeatureType {
|
|
270
283
|
aliases: string
|
|
271
284
|
code: string
|
|
272
285
|
isAbstract: string
|
|
273
286
|
typeName: string
|
|
274
287
|
definition: string
|
|
275
|
-
attributeTable: Array<
|
|
288
|
+
attributeTable: Array<DatasetFeatureAttribute>
|
|
276
289
|
}
|
|
277
290
|
|
|
278
291
|
export type ReuseType = 'application' | 'map' | 'other'
|
|
@@ -19,8 +19,13 @@ export abstract class RecordsRepositoryInterface {
|
|
|
19
19
|
abstract getSimilarRecords(
|
|
20
20
|
similarTo: CatalogRecord
|
|
21
21
|
): Observable<CatalogRecord[]>
|
|
22
|
+
abstract getSources(record: CatalogRecord): Observable<CatalogRecord[]>
|
|
23
|
+
abstract getSourceOf(record: CatalogRecord): Observable<CatalogRecord[]>
|
|
22
24
|
abstract fuzzySearch(query: string): Observable<SearchResults>
|
|
25
|
+
abstract canDuplicate(record: CatalogRecord): boolean
|
|
26
|
+
abstract canDelete(record: CatalogRecord): Observable<boolean>
|
|
23
27
|
abstract canEditRecord(uniqueIdentifier: string): Observable<boolean>
|
|
28
|
+
abstract canEditIndexedRecord(record: CatalogRecord): Observable<boolean>
|
|
24
29
|
/**
|
|
25
30
|
* This emits once:
|
|
26
31
|
* - record object; if a draft exists, this will return it
|
|
@@ -95,4 +100,5 @@ export abstract class RecordsRepositoryInterface {
|
|
|
95
100
|
localRecord: CatalogRecord
|
|
96
101
|
): Observable<{ user: string; date: Date }>
|
|
97
102
|
abstract getRecordPublicationStatus(uuid: string): Observable<boolean>
|
|
103
|
+
abstract getApplicationLanguages(): Observable<string[]>
|
|
98
104
|
}
|
|
@@ -144,4 +144,14 @@ export const elasticLinkFixture = (): Record<string, unknown> => ({
|
|
|
144
144
|
name: 'ogcapi features layer',
|
|
145
145
|
url: 'https://mel.integration.apps.gs-fr-prod.camptocamp.com/data/ogcapi/collections/comptages_velo/items?',
|
|
146
146
|
},
|
|
147
|
+
maplayerTms: {
|
|
148
|
+
accessServiceProtocol: 'TMS',
|
|
149
|
+
name: 'mytmslayer',
|
|
150
|
+
url: 'https://my.tms.server/MapServer',
|
|
151
|
+
},
|
|
152
|
+
maplayerTms2: {
|
|
153
|
+
accessServiceProtocol: 'OSGeo:TMS',
|
|
154
|
+
name: 'myothertmslayer',
|
|
155
|
+
url: 'https://my.tms.server/MapServer',
|
|
156
|
+
},
|
|
147
157
|
})
|
|
@@ -185,6 +185,20 @@ export const aSetOfLinksFixture = () => ({
|
|
|
185
185
|
url: new URL('https://my.ogc.server/wms'),
|
|
186
186
|
accessServiceProtocol: 'wms',
|
|
187
187
|
}) as DatasetServiceDistribution,
|
|
188
|
+
geodataTms: () =>
|
|
189
|
+
({
|
|
190
|
+
name: 'mytmslayer',
|
|
191
|
+
type: 'service',
|
|
192
|
+
url: new URL('https://my.ogc.server/tms'),
|
|
193
|
+
accessServiceProtocol: 'tms',
|
|
194
|
+
}) as DatasetServiceDistribution,
|
|
195
|
+
geodataAsMaplibreStyle: () =>
|
|
196
|
+
({
|
|
197
|
+
name: 'mytmslayerAsMaplibreJson',
|
|
198
|
+
type: 'service',
|
|
199
|
+
url: new URL('https://my.ogc.server/tms/layer/style.json'),
|
|
200
|
+
accessServiceProtocol: 'maplibre-style',
|
|
201
|
+
}) as DatasetServiceDistribution,
|
|
188
202
|
geodataWfs2: () =>
|
|
189
203
|
({
|
|
190
204
|
name: 'myotherlayer',
|