geonetwork-ui 2.2.0-dev.42331d67 → 2.2.0-dev.463b60bf
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 +28 -1
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +83 -58
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +5 -4
- 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 +20 -17
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +52 -23
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +52 -32
- package/esm2022/libs/api/repository/src/lib/gn4/index.mjs +3 -1
- 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/api/repository/src/lib/gn4/selection/selection.service.mjs +13 -26
- package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/model/search/aggregation.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/model/search/field.model.mjs +2 -0
- package/esm2022/libs/common/domain/src/lib/model/search/filter.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/model/search/index.mjs +2 -1
- package/esm2022/libs/common/domain/src/lib/model/search/search.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/catalog/src/lib/my-org/my-org.service.mjs +4 -10
- package/esm2022/libs/feature/editor/src/lib/record-form/record-form.component.mjs +5 -3
- package/esm2022/libs/feature/map/src/index.mjs +2 -1
- package/esm2022/libs/feature/map/src/lib/constant/index.mjs +2 -1
- package/esm2022/libs/feature/map/src/lib/constant/projections.mjs +2 -0
- package/esm2022/libs/feature/map/src/lib/feature-map.module.mjs +10 -1
- package/esm2022/libs/feature/map/src/lib/geocoding/geocoding.component.mjs +32 -15
- package/esm2022/libs/feature/map/src/lib/geocoding.service.mjs +40 -0
- package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +9 -1
- package/esm2022/libs/feature/map/src/lib/utils/index.mjs +1 -3
- package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +60 -29
- package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +29 -20
- package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +2 -2
- package/esm2022/libs/feature/search/src/index.mjs +4 -1
- package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +1 -1
- package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +2 -6
- package/esm2022/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.mjs +1 -1
- package/esm2022/libs/feature/search/src/lib/filter-geometry.token.mjs +4 -0
- package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +7 -3
- package/esm2022/libs/feature/search/src/lib/record-url.token.mjs +4 -0
- package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +2 -2
- package/esm2022/libs/feature/search/src/lib/results-table/results-table.component.mjs +128 -0
- package/esm2022/libs/feature/search/src/lib/state/effects.mjs +6 -4
- package/esm2022/libs/feature/search/src/lib/state/search.facade.mjs +3 -2
- 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/index.mjs +2 -1
- package/esm2022/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.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/metadata-contact/metadata-contact.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +35 -22
- package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +3 -4
- package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +9 -6
- package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +6 -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/button/button.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/checkbox/checkbox.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/editable-label/editable-label.directive.mjs +46 -0
- 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 +12 -7
- package/esm2022/libs/ui/layout/src/index.mjs +3 -1
- package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.mjs +36 -0
- package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +37 -0
- package/esm2022/libs/ui/search/src/index.mjs +1 -2
- package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +9 -10
- package/esm2022/libs/util/i18n/src/index.mjs +1 -2
- package/esm2022/translations/de.json +7 -5
- package/esm2022/translations/en.json +10 -8
- package/esm2022/translations/es.json +7 -5
- package/esm2022/translations/fr.json +10 -8
- package/esm2022/translations/it.json +9 -7
- package/esm2022/translations/nl.json +7 -5
- package/esm2022/translations/pt.json +7 -5
- package/fesm2022/geonetwork-ui.mjs +883 -678
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts +3 -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 +0 -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 +3 -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 +6 -6
- 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 +4 -3
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/index.d.ts +2 -0
- package/libs/api/repository/src/lib/gn4/index.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/api/repository/src/lib/gn4/selection/selection.service.d.ts +4 -5
- package/libs/api/repository/src/lib/gn4/selection/selection.service.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +27 -17
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts +1 -1
- package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/search/field.model.d.ts +2 -0
- package/libs/common/domain/src/lib/model/search/field.model.d.ts.map +1 -0
- package/libs/common/domain/src/lib/model/search/filter.model.d.ts +1 -1
- package/libs/common/domain/src/lib/model/search/filter.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/search/index.d.ts +1 -0
- package/libs/common/domain/src/lib/model/search/index.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/search/search.model.d.ts +2 -3
- package/libs/common/domain/src/lib/model/search/search.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/catalog/src/lib/my-org/my-org.service.d.ts +0 -1
- package/libs/feature/catalog/src/lib/my-org/my-org.service.d.ts.map +1 -1
- package/libs/feature/editor/src/lib/record-form/record-form.component.d.ts.map +1 -1
- package/libs/feature/map/src/index.d.ts +1 -0
- package/libs/feature/map/src/index.d.ts.map +1 -1
- package/libs/feature/map/src/lib/constant/index.d.ts +1 -0
- package/libs/feature/map/src/lib/constant/index.d.ts.map +1 -1
- package/libs/feature/map/src/lib/constant/projections.d.ts.map +1 -0
- package/libs/feature/map/src/lib/feature-map.module.d.ts.map +1 -1
- package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts +6 -1
- package/libs/feature/map/src/lib/geocoding/geocoding.component.d.ts.map +1 -1
- package/libs/feature/map/src/lib/geocoding.service.d.ts +18 -0
- package/libs/feature/map/src/lib/geocoding.service.d.ts.map +1 -0
- 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/map/src/lib/utils/index.d.ts +0 -2
- package/libs/feature/map/src/lib/utils/index.d.ts.map +1 -1
- package/libs/feature/map/src/lib/utils/map-utils.service.d.ts +13 -11
- package/libs/feature/map/src/lib/utils/map-utils.service.d.ts.map +1 -1
- package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +1 -3
- package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
- package/libs/feature/search/src/index.d.ts +3 -0
- package/libs/feature/search/src/index.d.ts.map +1 -1
- package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts +3 -3
- package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts.map +1 -1
- package/libs/feature/search/src/lib/feature-search.module.d.ts +0 -4
- package/libs/feature/search/src/lib/feature-search.module.d.ts.map +1 -1
- package/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.d.ts +3 -2
- package/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.d.ts.map +1 -1
- package/libs/feature/search/src/lib/filter-geometry.token.d.ts +4 -0
- package/libs/feature/search/src/lib/filter-geometry.token.d.ts.map +1 -0
- package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +1 -1
- package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
- package/libs/feature/search/src/lib/record-url.token.d.ts +3 -0
- package/libs/feature/search/src/lib/record-url.token.d.ts.map +1 -0
- package/libs/feature/search/src/lib/results-table/results-table.component.d.ts +33 -0
- package/libs/feature/search/src/lib/results-table/results-table.component.d.ts.map +1 -0
- package/libs/feature/search/src/lib/state/effects.d.ts.map +1 -1
- package/libs/feature/search/src/lib/state/search.facade.d.ts +1 -1
- package/libs/feature/search/src/lib/state/search.facade.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/dataviz/src/lib/chart/chart.component.d.ts +1 -1
- package/libs/ui/elements/src/index.d.ts +1 -0
- package/libs/ui/elements/src/index.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/metadata-info/metadata-info.component.d.ts +10 -6
- 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/record-api-form/record-api-form.component.d.ts +3 -1
- package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts +13 -13
- 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/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/editable-label/editable-label.directive.d.ts +13 -0
- package/libs/ui/inputs/src/lib/editable-label/editable-label.directive.d.ts.map +1 -0
- 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 -39
- package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
- package/libs/ui/layout/src/index.d.ts +2 -0
- package/libs/ui/layout/src/index.d.ts.map +1 -1
- package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts +14 -0
- package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts.map +1 -0
- package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts +15 -0
- package/libs/ui/layout/src/lib/interactive-table/interactive-table.component.d.ts.map +1 -0
- package/libs/ui/search/src/index.d.ts +0 -1
- package/libs/ui/search/src/index.d.ts.map +1 -1
- package/libs/ui/search/src/lib/ui-search.module.d.ts +15 -15
- package/libs/ui/search/src/lib/ui-search.module.d.ts.map +1 -1
- package/libs/util/i18n/src/index.d.ts +0 -1
- package/libs/util/i18n/src/index.d.ts.map +1 -1
- package/package.json +4 -1
- package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +61 -8
- package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +55 -9
- package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +225 -24
- package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +32 -0
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +123 -73
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.ts +4 -3
- package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +3 -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 +24 -21
- package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +115 -62
- package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +169 -95
- package/src/libs/api/repository/src/lib/gn4/index.ts +2 -0
- 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/api/repository/src/lib/gn4/selection/selection.service.ts +14 -38
- package/src/libs/common/domain/src/lib/index.ts +2 -0
- package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +32 -21
- package/src/libs/common/domain/src/lib/model/search/aggregation.model.ts +1 -1
- package/src/libs/common/domain/src/lib/model/search/field.model.ts +1 -0
- package/src/libs/common/domain/src/lib/model/search/filter.model.ts +1 -1
- package/src/libs/common/domain/src/lib/model/search/index.ts +1 -0
- package/src/libs/common/domain/src/lib/model/search/search.model.ts +2 -2
- package/src/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.ts +1 -0
- package/src/libs/common/domain/src/lib/model/user/index.ts +1 -0
- package/src/libs/common/domain/src/lib/platform.service.interface.ts +1 -4
- package/src/libs/common/fixtures/src/lib/gn4/groups.fixtures.ts +1 -1
- package/src/libs/common/fixtures/src/lib/records.fixtures.ts +50 -10
- package/src/libs/feature/catalog/src/lib/my-org/my-org.service.ts +4 -16
- package/src/libs/feature/editor/src/lib/record-form/record-form.component.ts +2 -1
- package/src/libs/feature/map/src/index.ts +1 -0
- package/src/libs/feature/map/src/lib/constant/index.ts +1 -0
- package/src/libs/feature/map/src/lib/feature-map.module.ts +5 -0
- package/src/libs/feature/map/src/lib/geocoding/geocoding.component.ts +27 -11
- package/src/libs/feature/map/src/lib/geocoding.service.ts +59 -0
- package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +10 -0
- package/src/libs/feature/map/src/lib/utils/index.ts +0 -2
- package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +85 -50
- package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +18 -3
- package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +1 -1
- package/src/libs/feature/search/src/index.ts +3 -0
- package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.ts +1 -1
- package/src/libs/feature/search/src/lib/feature-search.module.ts +1 -10
- package/src/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.ts +4 -4
- package/src/libs/feature/search/src/lib/filter-geometry.token.ts +7 -0
- package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +9 -3
- package/src/libs/feature/search/src/lib/record-url.token.ts +4 -0
- package/src/libs/feature/search/src/lib/results-list/results-list.container.component.ts +1 -1
- package/src/libs/feature/search/src/lib/results-table/results-table.component.css +0 -0
- package/src/libs/feature/search/src/lib/results-table/results-table.component.html +112 -0
- package/src/libs/feature/search/src/lib/results-table/results-table.component.ts +164 -0
- package/src/libs/feature/search/src/lib/state/effects.ts +5 -4
- package/src/libs/feature/search/src/lib/state/search.facade.ts +2 -1
- 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/index.ts +1 -0
- package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.html +3 -2
- 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.css +2 -2
- package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.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 +50 -23
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +37 -15
- package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +2 -3
- package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.html +5 -5
- package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +12 -4
- package/src/libs/ui/elements/src/lib/ui-elements.module.ts +2 -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/button/button.component.ts +1 -0
- package/src/libs/ui/inputs/src/lib/checkbox/checkbox.component.html +0 -1
- package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.html +1 -1
- package/src/libs/ui/inputs/src/lib/editable-label/editable-label.directive.ts +48 -0
- 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 +5 -2
- package/src/libs/ui/layout/src/index.ts +2 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.css +0 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.html +1 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.ts +33 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.css +15 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.html +54 -0
- package/src/libs/ui/layout/src/lib/interactive-table/interactive-table.component.ts +42 -0
- package/src/libs/ui/search/src/index.ts +0 -1
- package/src/libs/ui/search/src/lib/ui-search.module.ts +2 -3
- package/src/libs/util/i18n/src/index.ts +0 -1
- package/tailwind.base.css +2 -2
- package/translations/de.json +7 -5
- package/translations/en.json +10 -8
- package/translations/es.json +7 -5
- package/translations/fr.json +10 -8
- package/translations/it.json +9 -7
- package/translations/nl.json +7 -5
- package/translations/pt.json +7 -5
- package/translations/sk.json +7 -5
- package/esm2022/libs/feature/map/src/lib/utils/map-utils-wms.service.mjs +0 -55
- package/esm2022/libs/feature/map/src/lib/utils/projections.mjs +0 -2
- package/esm2022/libs/ui/search/src/lib/record-table/record-table.component.mjs +0 -145
- package/esm2022/libs/util/i18n/src/lib/testing/test.translate.loader.mjs +0 -24
- package/esm2022/libs/util/i18n/src/lib/testing/test.translate.module.mjs +0 -109
- package/esm2022/libs/util/i18n/src/lib/testing/translations.model.mjs +0 -6
- package/libs/feature/map/src/lib/utils/map-utils-wms.service.d.ts +0 -17
- package/libs/feature/map/src/lib/utils/map-utils-wms.service.d.ts.map +0 -1
- package/libs/feature/map/src/lib/utils/projections.d.ts.map +0 -1
- package/libs/ui/search/src/lib/record-table/record-table.component.d.ts +0 -31
- package/libs/ui/search/src/lib/record-table/record-table.component.d.ts.map +0 -1
- package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts +0 -17
- package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts.map +0 -1
- package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts +0 -131
- package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts.map +0 -1
- package/libs/util/i18n/src/lib/testing/translations.model.d.ts +0 -21
- package/libs/util/i18n/src/lib/testing/translations.model.d.ts.map +0 -1
- package/src/libs/feature/map/src/lib/utils/map-utils-wms.service.ts +0 -58
- package/src/libs/ui/search/src/lib/record-table/record-table.component.css +0 -7
- package/src/libs/ui/search/src/lib/record-table/record-table.component.html +0 -215
- package/src/libs/ui/search/src/lib/record-table/record-table.component.ts +0 -149
- package/src/libs/util/i18n/src/lib/testing/test.translate.loader.ts +0 -26
- package/src/libs/util/i18n/src/lib/testing/test.translate.module.ts +0 -235
- package/src/libs/util/i18n/src/lib/testing/translations.model.ts +0 -28
- /package/libs/feature/map/src/lib/{utils → constant}/projections.d.ts +0 -0
- /package/src/libs/feature/map/src/lib/{utils → constant}/projections.ts +0 -0
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { parseXml, XmlDocument, XmlElement, XmlText } from '@rgrove/parse-xml';
|
|
2
2
|
import format from 'date-fns/format';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, HostListener, EventEmitter, Output, ViewContainerRef, TemplateRef, Host, ContentChild, HostBinding, ElementRef, ViewChildren } from '@angular/core';
|
|
4
|
+
import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, HostListener, EventEmitter, Output, ViewContainerRef, TemplateRef, Host, ContentChild, HostBinding, ContentChildren, ElementRef, ViewChildren } from '@angular/core';
|
|
5
5
|
import * as i1 from '@angular/common/http';
|
|
6
6
|
import { HttpHeaders, HttpParams, HttpClient, HttpClientModule, HTTP_INTERCEPTORS, HttpClientXsrfModule } from '@angular/common/http';
|
|
7
7
|
import * as i1$1 from '@ngx-translate/core';
|
|
8
|
-
import { TranslateCompiler, TranslateLoader, TranslateModule, TranslateService
|
|
8
|
+
import { TranslateCompiler, TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
|
|
9
9
|
import { TranslateMessageFormatCompiler } from 'ngx-translate-messageformat-compiler';
|
|
10
10
|
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
|
|
11
|
-
import { map as map$1, shareReplay, filter, tap as tap$1, startWith, switchMap as switchMap$1, catchError, take,
|
|
11
|
+
import { map as map$1, shareReplay, filter, tap as tap$1, startWith, withLatestFrom, switchMap as switchMap$1, catchError, take, delay, debounceTime, throttleTime, distinctUntilChanged, finalize, first, share, pairwise, mergeMap } from 'rxjs/operators';
|
|
12
12
|
import { marker } from '@biesbjerg/ngx-translate-extract-marker';
|
|
13
13
|
import * as i1$3 from '@angular/common';
|
|
14
14
|
import { CommonModule, NgOptimizedImage, NgForOf } from '@angular/common';
|
|
15
|
-
import { of, map as map$2, lastValueFrom, switchMap, combineLatest, takeLast, forkJoin, Subject, merge, throwError, BehaviorSubject,
|
|
15
|
+
import { of, map as map$2, lastValueFrom, switchMap, combineLatest, takeLast, forkJoin, Subject, merge, throwError, BehaviorSubject, firstValueFrom, fromEvent, timer, from, Subscription, animationFrameScheduler, ReplaySubject, distinctUntilChanged as distinctUntilChanged$1, tap as tap$2, Observable, buffer, debounceTime as debounceTime$1, combineLatestWith, catchError as catchError$1, takeUntil, EMPTY, withLatestFrom as withLatestFrom$1, startWith as startWith$1, pairwise as pairwise$1 } from 'rxjs';
|
|
16
16
|
import { valid, coerce, satisfies, ltr } from 'semver';
|
|
17
17
|
import * as i1$2 from '@ngrx/store';
|
|
18
18
|
import { createAction, props, createReducer, on, createFeatureSelector, createSelector, select, StoreModule } from '@ngrx/store';
|
|
@@ -32,8 +32,8 @@ import WMTS, { optionsFromCapabilities } from 'ol/source/WMTS';
|
|
|
32
32
|
import { defaults, DragPan, MouseWheelZoom } from 'ol/interaction';
|
|
33
33
|
import { mouseOnly, noModifierKeys, primaryAction, platformModifierKeyOnly } from 'ol/events/condition';
|
|
34
34
|
import WMTSCapabilities from 'ol/format/WMTSCapabilities';
|
|
35
|
-
import { WmsEndpoint, WfsEndpoint, sharedFetch, useCache } from '@camptocamp/ogc-client';
|
|
36
35
|
import chroma from 'chroma-js';
|
|
36
|
+
import { WmsEndpoint, WfsEndpoint, sharedFetch, useCache } from '@camptocamp/ogc-client';
|
|
37
37
|
import { register, fromEPSGCode } from 'ol/proj/proj4';
|
|
38
38
|
import proj4 from 'proj4/dist/proj4';
|
|
39
39
|
import * as TOML from '@ltd/j-toml';
|
|
@@ -78,8 +78,8 @@ import * as i1$8 from '@ngrx/effects';
|
|
|
78
78
|
import { createEffect, ofType, EffectsModule } from '@ngrx/effects';
|
|
79
79
|
import tippy from 'tippy.js';
|
|
80
80
|
import { valid as valid$1 } from 'geojson-validation';
|
|
81
|
-
import { queryGeoadmin } from '@geospatial-sdk/geocoding';
|
|
82
81
|
import { Polygon } from 'ol/geom';
|
|
82
|
+
import { queryDataGouvFr, queryGeonames, queryGeoadmin } from '@geospatial-sdk/geocoding';
|
|
83
83
|
import { Chart, BarController, BarElement, CategoryScale, LinearScale, LineController, LineElement, PointElement, PieController, ArcElement, ScatterController, Tooltip, Colors, Legend } from 'chart.js';
|
|
84
84
|
import * as i4$1 from '@angular/cdk/scrolling';
|
|
85
85
|
import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
@@ -587,6 +587,20 @@ function matchMimeType(format) {
|
|
|
587
587
|
return format || null;
|
|
588
588
|
}
|
|
589
589
|
|
|
590
|
+
function getKeywordTypeFromKeywordTypeCode(typeCode) {
|
|
591
|
+
if (!typeCode)
|
|
592
|
+
return 'other';
|
|
593
|
+
switch (typeCode) {
|
|
594
|
+
case 'theme':
|
|
595
|
+
case 'place':
|
|
596
|
+
case 'temporal':
|
|
597
|
+
case 'other':
|
|
598
|
+
return typeCode;
|
|
599
|
+
default:
|
|
600
|
+
return 'other';
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
|
|
590
604
|
function extractCharacterString() {
|
|
591
605
|
return pipe(fallback(findChildElement('gco:CharacterString', false), findChildElement('gmx:Anchor', false)), readText());
|
|
592
606
|
}
|
|
@@ -649,28 +663,32 @@ function extractStatus() {
|
|
|
649
663
|
return pipe(findChildElement('gmd:MD_ProgressCode'), readAttribute('codeListValue'), map(getStatusFromStatusCode));
|
|
650
664
|
}
|
|
651
665
|
// from gmd:resourceConstraints
|
|
652
|
-
function
|
|
653
|
-
|
|
654
|
-
|
|
666
|
+
function extractLegalConstraints() {
|
|
667
|
+
return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') === -1))), mapArray(combine(findChildrenElement('gmd:otherConstraints'), findChildrenElement('gmd:useLimitation'))), flattenArray(), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
668
|
+
...(url && { url }),
|
|
655
669
|
text,
|
|
656
|
-
type: 'other',
|
|
657
670
|
})));
|
|
658
|
-
|
|
671
|
+
}
|
|
672
|
+
// from gmd:resourceConstraints
|
|
673
|
+
function extractSecurityConstraints() {
|
|
674
|
+
return pipe(findNestedElements('gmd:MD_SecurityConstraints', 'gmd:useLimitation'), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
675
|
+
...(url && { url }),
|
|
659
676
|
text,
|
|
660
|
-
type: 'security',
|
|
661
677
|
})));
|
|
662
|
-
return pipe(combine(getOtherConstraints, getSecurityConstraints), flattenArray());
|
|
663
678
|
}
|
|
664
679
|
// from gmd:resourceConstraints
|
|
665
|
-
function
|
|
666
|
-
return pipe(
|
|
680
|
+
function extractOtherConstraints() {
|
|
681
|
+
return pipe(findNestedElements('gmd:MD_Constraints', 'gmd:useLimitation'), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
682
|
+
...(url && { url }),
|
|
683
|
+
text,
|
|
684
|
+
})));
|
|
667
685
|
}
|
|
668
686
|
// from gmd:resourceConstraints
|
|
669
687
|
function extractLicenses() {
|
|
670
|
-
return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') > -1))), mapArray(
|
|
688
|
+
return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') > -1))), mapArray(combine(findChildrenElement('gmd:otherConstraints'), findChildrenElement('gmd:useLimitation'))), flattenArray(), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
|
|
671
689
|
...(url && { url }),
|
|
672
690
|
text,
|
|
673
|
-
})))
|
|
691
|
+
})));
|
|
674
692
|
}
|
|
675
693
|
// from gmd:MD_Distribution
|
|
676
694
|
function extractDatasetDistributions() {
|
|
@@ -829,31 +847,55 @@ function readDatasetUpdated(rootEl) {
|
|
|
829
847
|
function readContacts(rootEl) {
|
|
830
848
|
return pipe(findIdentification(), combine(findChildrenElement('gmd:contact'), findChildrenElement('gmd:pointOfContact')), flattenArray(), mapArray(findChildElement('gmd:CI_ResponsibleParty', false)), mapArray(extractIndividuals()), flattenArray())(rootEl);
|
|
831
849
|
}
|
|
832
|
-
|
|
833
|
-
|
|
850
|
+
// from gmd:thesaurusName
|
|
851
|
+
function readThesaurus(rootEl) {
|
|
852
|
+
if (!rootEl)
|
|
853
|
+
return null;
|
|
854
|
+
const findIdentifier = findNestedElement('gmd:CI_Citation', 'gmd:identifier', 'gmd:MD_Identifier', 'gmd:code');
|
|
855
|
+
const id = pipe(findIdentifier, extractCharacterString())(rootEl);
|
|
856
|
+
const url = pipe(findIdentifier, extractUrl())(rootEl);
|
|
857
|
+
const name = pipe(findNestedElement('gmd:CI_Citation', 'gmd:title'), extractCharacterString())(rootEl);
|
|
858
|
+
return {
|
|
859
|
+
id,
|
|
860
|
+
...(name && { name }),
|
|
861
|
+
...(url && { url }),
|
|
862
|
+
};
|
|
834
863
|
}
|
|
835
|
-
|
|
836
|
-
|
|
864
|
+
// from gmd:MD_Keywords
|
|
865
|
+
function readKeywordGroup(rootEl) {
|
|
866
|
+
const type = pipe(findChildrenElement('gmd:MD_KeywordTypeCode'), mapArray(readAttribute('codeListValue')), map((values) => getKeywordTypeFromKeywordTypeCode(values[0])))(rootEl);
|
|
867
|
+
const thesaurus = pipe(findNestedElement('gmd:thesaurusName'), readThesaurus)(rootEl);
|
|
868
|
+
return pipe(findChildrenElement('gmd:keyword'), mapArray((el) => {
|
|
869
|
+
const label = extractCharacterString()(el);
|
|
870
|
+
return {
|
|
871
|
+
...(thesaurus ? { thesaurus } : {}),
|
|
872
|
+
label,
|
|
873
|
+
type,
|
|
874
|
+
};
|
|
875
|
+
}))(rootEl);
|
|
837
876
|
}
|
|
838
|
-
function
|
|
839
|
-
return
|
|
877
|
+
function readKeywords(rootEl) {
|
|
878
|
+
return pipe(findIdentification(), findNestedElements('gmd:descriptiveKeywords', 'gmd:MD_Keywords'), mapArray(readKeywordGroup), flattenArray())(rootEl);
|
|
840
879
|
}
|
|
841
880
|
function readStatus(rootEl) {
|
|
842
881
|
return pipe(findIdentification(), findChildElement('gmd:status', false), extractStatus())(rootEl);
|
|
843
882
|
}
|
|
844
883
|
const getConstraints = pipe(findIdentification(), findChildrenElement('gmd:resourceConstraints', false));
|
|
845
|
-
function
|
|
846
|
-
return pipe(getConstraints, mapArray(
|
|
884
|
+
function readLegalConstraints(rootEl) {
|
|
885
|
+
return pipe(getConstraints, mapArray(extractLegalConstraints()), flattenArray(), flattenArray())(rootEl);
|
|
847
886
|
}
|
|
848
|
-
function
|
|
849
|
-
return pipe(getConstraints, mapArray(
|
|
887
|
+
function readSecurityConstraints(rootEl) {
|
|
888
|
+
return pipe(getConstraints, mapArray(extractSecurityConstraints()), flattenArray())(rootEl);
|
|
889
|
+
}
|
|
890
|
+
function readOtherConstraints(rootEl) {
|
|
891
|
+
return pipe(getConstraints, mapArray(extractOtherConstraints()), flattenArray())(rootEl);
|
|
850
892
|
}
|
|
851
893
|
function readLicenses(rootEl) {
|
|
852
894
|
return pipe(getConstraints, mapArray(extractLicenses()), flattenArray())(rootEl);
|
|
853
895
|
}
|
|
854
896
|
// not used yet
|
|
855
897
|
function readIsoTopics(rootEl) {
|
|
856
|
-
return pipe(findIdentification(), findChildrenElement('gmd:MD_TopicCategoryCode',
|
|
898
|
+
return pipe(findIdentification(), findChildrenElement('gmd:MD_TopicCategoryCode', true), mapArray(readText()))(rootEl);
|
|
857
899
|
}
|
|
858
900
|
function readSpatialRepresentation(rootEl) {
|
|
859
901
|
return pipe(findIdentification(), findNestedElement('gmd:spatialRepresentationType', 'gmd:MD_SpatialRepresentationTypeCode'), readAttribute('codeListValue'), map(getSpatialRepresentationFromCode))(rootEl);
|
|
@@ -1069,33 +1111,50 @@ function updateCitationDate(date, type) {
|
|
|
1069
1111
|
function appendCitationDate(date, type) {
|
|
1070
1112
|
return appendChildren(pipe(createElement('gmd:date'), createChild('gmd:CI_Date'), appendChildren(pipe(createElement('gmd:date'), writeDateTime(date)), pipe(createElement('gmd:dateType'), createChild('gmd:CI_DateTypeCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#CI_DateTypeCode'), addAttribute('codeListValue', type)))));
|
|
1071
1113
|
}
|
|
1072
|
-
function removeKeywords(
|
|
1073
|
-
return removeChildren(pipe(findNestedElements('gmd:descriptiveKeywords')
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1114
|
+
function removeKeywords() {
|
|
1115
|
+
return removeChildren(pipe(findNestedElements('gmd:descriptiveKeywords')));
|
|
1116
|
+
}
|
|
1117
|
+
// returns a <gmd:thesaurusName> element
|
|
1118
|
+
function createThesaurus(thesaurus) {
|
|
1119
|
+
return pipe(createElement('gmd:thesaurusName'), createChild('gmd:CI_Citation'), appendChildren(pipe(createElement('gmd:title'), writeCharacterString(thesaurus.name || thesaurus.id)), pipe(createElement('gmd:identifier'), createChild('gmd:MD_Identifier'), appendChildren(pipe(createElement('gmd:code'), thesaurus.url
|
|
1120
|
+
? writeAnchor(thesaurus.url, thesaurus.id)
|
|
1121
|
+
: writeCharacterString(thesaurus.id))))));
|
|
1122
|
+
}
|
|
1123
|
+
function appendKeywords(keywords) {
|
|
1124
|
+
const keywordsByThesaurus = keywords.reduce((acc, keyword) => {
|
|
1125
|
+
const thesaurusId = keyword.thesaurus?.id;
|
|
1126
|
+
const type = keyword.type;
|
|
1127
|
+
let existingGroup = acc.find((group) => group[0].thesaurus
|
|
1128
|
+
? group[0].thesaurus.id === thesaurusId
|
|
1129
|
+
: group[0].type === type);
|
|
1130
|
+
if (!existingGroup) {
|
|
1131
|
+
existingGroup = [];
|
|
1132
|
+
acc.push(existingGroup);
|
|
1133
|
+
}
|
|
1134
|
+
existingGroup.push(keyword);
|
|
1135
|
+
return acc;
|
|
1136
|
+
}, []);
|
|
1137
|
+
return appendChildren(...keywordsByThesaurus.map((keywords) => pipe(createElement('gmd:descriptiveKeywords'), createChild('gmd:MD_Keywords'), appendChildren(pipe(createElement('gmd:type'), createChild('gmd:MD_KeywordTypeCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_KeywordTypeCode'), addAttribute('codeListValue', keywords[0].type))), keywords[0].thesaurus
|
|
1138
|
+
? appendChildren(createThesaurus(keywords[0].thesaurus))
|
|
1139
|
+
: noop, appendChildren(...keywords.map((keyword) => pipe(createElement('gmd:keyword'), writeCharacterString(keyword.label)))))));
|
|
1140
|
+
}
|
|
1141
|
+
function createConstraint(constraint, type) {
|
|
1142
|
+
if (type === 'security') {
|
|
1090
1143
|
return pipe(createElement('gmd:resourceConstraints'), createChild('gmd:MD_SecurityConstraints'), appendChildren(pipe(createElement('gmd:classification'), createChild('gmd:MD_ClassificationCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_ClassificationCode'), addAttribute('codeListValue', 'restricted')), pipe(createElement('gmd:useLimitation'), writeCharacterString(constraint.text))));
|
|
1091
1144
|
}
|
|
1092
|
-
|
|
1145
|
+
else if (type === 'legal') {
|
|
1146
|
+
return pipe(createElement('gmd:resourceConstraints'), createChild('gmd:MD_LegalConstraints'), appendChildren(pipe(createElement('gmd:accessConstraints'), createChild('gmd:MD_RestrictionCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_RestrictionCode'), addAttribute('codeListValue', 'otherRestrictions')), pipe(createElement('gmd:otherConstraints'), writeCharacterString(constraint.text))));
|
|
1147
|
+
}
|
|
1148
|
+
return pipe(createElement('gmd:resourceConstraints'), createChild('gmd:MD_Constraints'), appendChildren(pipe(createElement('gmd:useLimitation'), writeCharacterString(constraint.text))));
|
|
1093
1149
|
}
|
|
1094
|
-
function
|
|
1150
|
+
function removeOtherConstraints() {
|
|
1095
1151
|
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_Constraints', 'gmd:useLimitation'), (array) => array.length > 0))));
|
|
1096
1152
|
}
|
|
1097
|
-
function
|
|
1098
|
-
return pipe(
|
|
1153
|
+
function removeSecurityConstraints() {
|
|
1154
|
+
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_SecurityConstraints', 'gmd:useLimitation'), (array) => array.length > 0))));
|
|
1155
|
+
}
|
|
1156
|
+
function removeLegalConstraints() {
|
|
1157
|
+
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_LegalConstraints', 'gmd:accessConstraints', 'gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), (restrictionCodes) => restrictionCodes.every((code) => code !== 'license')))));
|
|
1099
1158
|
}
|
|
1100
1159
|
function removeLicenses() {
|
|
1101
1160
|
return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_LegalConstraints', 'gmd:accessConstraints', 'gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), (restrictionCodes) => restrictionCodes.some((code) => code === 'license')))));
|
|
@@ -1194,19 +1253,22 @@ function writeContacts(record, rootEl) {
|
|
|
1194
1253
|
pipe(findOrCreateIdentification(), removeChildrenByName('gmd:pointOfContact'), appendChildren(...record.contacts.map((contact) => pipe(createElement('gmd:pointOfContact'), appendResponsibleParty(contact)))))(rootEl);
|
|
1195
1254
|
}
|
|
1196
1255
|
function writeKeywords(record, rootEl) {
|
|
1197
|
-
pipe(findOrCreateIdentification(), removeKeywords(
|
|
1256
|
+
pipe(findOrCreateIdentification(), removeKeywords(), appendKeywords(record.keywords))(rootEl);
|
|
1198
1257
|
}
|
|
1199
|
-
function
|
|
1200
|
-
pipe(findOrCreateIdentification(),
|
|
1201
|
-
}
|
|
1202
|
-
function writeAccessConstraints(record, rootEl) {
|
|
1203
|
-
pipe(findOrCreateIdentification(), removeAccessConstraints(), appendChildren(...record.accessConstraints.map(createAccessConstraint)))(rootEl);
|
|
1258
|
+
function writeTopics(record, rootEl) {
|
|
1259
|
+
pipe(findOrCreateIdentification(), removeChildrenByName('gmd:topicCategory'), appendChildren(...record.topics.map((topic) => pipe(createElement('gmd:topicCategory'), createChild('gmd:MD_TopicCategoryCode'), setTextContent(topic)))))(rootEl);
|
|
1204
1260
|
}
|
|
1205
1261
|
function writeLicenses(record, rootEl) {
|
|
1206
1262
|
pipe(findOrCreateIdentification(), removeLicenses(), appendChildren(...record.licenses.map(createLicense)))(rootEl);
|
|
1207
1263
|
}
|
|
1208
|
-
function
|
|
1209
|
-
pipe(findOrCreateIdentification(),
|
|
1264
|
+
function writeLegalConstraints(record, rootEl) {
|
|
1265
|
+
pipe(findOrCreateIdentification(), removeLegalConstraints(), appendChildren(...record.legalConstraints.map((c) => createConstraint(c, 'legal'))))(rootEl);
|
|
1266
|
+
}
|
|
1267
|
+
function writeSecurityConstraints(record, rootEl) {
|
|
1268
|
+
pipe(findOrCreateIdentification(), removeSecurityConstraints(), appendChildren(...record.securityConstraints.map((c) => createConstraint(c, 'security'))))(rootEl);
|
|
1269
|
+
}
|
|
1270
|
+
function writeOtherConstraints(record, rootEl) {
|
|
1271
|
+
pipe(findOrCreateIdentification(), removeOtherConstraints(), appendChildren(...record.otherConstraints.map((c) => createConstraint(c, 'other'))))(rootEl);
|
|
1210
1272
|
}
|
|
1211
1273
|
function writeUpdateFrequency(record, rootEl) {
|
|
1212
1274
|
pipe(findOrCreateIdentification(), findChildOrCreate('gmd:resourceMaintenance'), removeAllChildren(), findChildOrCreate('gmd:MD_MaintenanceInformation'), typeof record.updateFrequency === 'object'
|
|
@@ -1303,13 +1365,12 @@ function toModel(xml) {
|
|
|
1303
1365
|
const recordUpdated = readRecordUpdated(rootEl);
|
|
1304
1366
|
const recordCreated = recordUpdated;
|
|
1305
1367
|
const keywords = readKeywords(rootEl);
|
|
1306
|
-
const
|
|
1307
|
-
const
|
|
1308
|
-
const
|
|
1368
|
+
const topics = readIsoTopics(rootEl);
|
|
1369
|
+
const legalConstraints = readLegalConstraints(rootEl);
|
|
1370
|
+
const otherConstraints = readOtherConstraints(rootEl);
|
|
1371
|
+
const securityConstraints = readSecurityConstraints(rootEl);
|
|
1309
1372
|
const licenses = readLicenses(rootEl);
|
|
1310
1373
|
const overviews = readOverviews(rootEl);
|
|
1311
|
-
// not used yet
|
|
1312
|
-
const isoTopics = readIsoTopics(rootEl);
|
|
1313
1374
|
if (kind === 'dataset') {
|
|
1314
1375
|
const status = readStatus(rootEl);
|
|
1315
1376
|
const datasetCreated = readDatasetCreated(rootEl);
|
|
@@ -1332,10 +1393,11 @@ function toModel(xml) {
|
|
|
1332
1393
|
contacts,
|
|
1333
1394
|
contactsForResource: [],
|
|
1334
1395
|
keywords,
|
|
1335
|
-
|
|
1336
|
-
accessConstraints,
|
|
1337
|
-
useLimitations,
|
|
1396
|
+
topics,
|
|
1338
1397
|
licenses,
|
|
1398
|
+
legalConstraints,
|
|
1399
|
+
securityConstraints,
|
|
1400
|
+
otherConstraints,
|
|
1339
1401
|
...(datasetCreated && { datasetCreated }),
|
|
1340
1402
|
...(datasetUpdated && { datasetUpdated }),
|
|
1341
1403
|
lineage,
|
|
@@ -1359,10 +1421,11 @@ function toModel(xml) {
|
|
|
1359
1421
|
ownerOrganization,
|
|
1360
1422
|
contacts,
|
|
1361
1423
|
keywords,
|
|
1362
|
-
|
|
1363
|
-
accessConstraints,
|
|
1364
|
-
useLimitations,
|
|
1424
|
+
topics,
|
|
1365
1425
|
licenses,
|
|
1426
|
+
legalConstraints,
|
|
1427
|
+
securityConstraints,
|
|
1428
|
+
otherConstraints,
|
|
1366
1429
|
overviews,
|
|
1367
1430
|
onlineResources,
|
|
1368
1431
|
};
|
|
@@ -1387,10 +1450,12 @@ function toXml(record, originalXml) {
|
|
|
1387
1450
|
writeAbstract(record, rootEl);
|
|
1388
1451
|
fieldChanged('contacts') && writeContacts(record, rootEl);
|
|
1389
1452
|
fieldChanged('keywords') && writeKeywords(record, rootEl);
|
|
1390
|
-
fieldChanged('
|
|
1391
|
-
fieldChanged('
|
|
1453
|
+
fieldChanged('topics') && writeTopics(record, rootEl);
|
|
1454
|
+
fieldChanged('legalConstraints') && writeLegalConstraints(record, rootEl);
|
|
1455
|
+
fieldChanged('securityConstraints') &&
|
|
1456
|
+
writeSecurityConstraints(record, rootEl);
|
|
1392
1457
|
fieldChanged('licenses') && writeLicenses(record, rootEl);
|
|
1393
|
-
fieldChanged('
|
|
1458
|
+
fieldChanged('otherConstraints') && writeOtherConstraints(record, rootEl);
|
|
1394
1459
|
if (record.kind === 'dataset') {
|
|
1395
1460
|
writeStatus(record, rootEl);
|
|
1396
1461
|
fieldChanged('updateFrequency') && writeUpdateFrequency(record, rootEl);
|
|
@@ -1416,6 +1481,7 @@ const selectTranslatedValue = (source, lang3) => selectFallback(selectField(sour
|
|
|
1416
1481
|
const selectTranslatedField = (source, fieldName, lang3) => selectTranslatedValue(selectField(source, fieldName), lang3);
|
|
1417
1482
|
const toDate = (field) => new Date(field);
|
|
1418
1483
|
const getFirstValue = (field) => Array.isArray(field) ? field[0] : field;
|
|
1484
|
+
const getArrayItem = (field, index) => Array.isArray(field) && field[index] !== undefined ? field[index] : null;
|
|
1419
1485
|
const getAsArray = (field) => Array.isArray(field) ? field : field !== null ? [field] : [];
|
|
1420
1486
|
const getAsUrl = (field, location = window.location.toString()) => {
|
|
1421
1487
|
// an empty string is not a valid url, even though it could be considered an empty path to the root
|
|
@@ -1456,6 +1522,31 @@ const mapContact = (sourceContact, lang3) => {
|
|
|
1456
1522
|
...(phone && { phone }),
|
|
1457
1523
|
};
|
|
1458
1524
|
};
|
|
1525
|
+
const mapKeywords = (thesauri, language) => {
|
|
1526
|
+
const keywords = [];
|
|
1527
|
+
for (const thesaurusId in thesauri) {
|
|
1528
|
+
const rawThesaurus = thesauri[thesaurusId];
|
|
1529
|
+
let thesaurus = null;
|
|
1530
|
+
if (rawThesaurus.id) {
|
|
1531
|
+
const thesaurusSource = { ...rawThesaurus };
|
|
1532
|
+
const url = getAsUrl(selectField(thesaurusSource, 'link'));
|
|
1533
|
+
const name = selectField(thesaurusSource, 'title');
|
|
1534
|
+
thesaurus = {
|
|
1535
|
+
id: rawThesaurus.id,
|
|
1536
|
+
...(name && { name }),
|
|
1537
|
+
...(url && { url }),
|
|
1538
|
+
};
|
|
1539
|
+
}
|
|
1540
|
+
for (const keyword of rawThesaurus.keywords) {
|
|
1541
|
+
keywords.push({
|
|
1542
|
+
label: selectTranslatedValue(keyword, language),
|
|
1543
|
+
type: getKeywordTypeFromKeywordTypeCode(rawThesaurus.theme),
|
|
1544
|
+
...(thesaurus && { thesaurus }),
|
|
1545
|
+
});
|
|
1546
|
+
}
|
|
1547
|
+
}
|
|
1548
|
+
return keywords;
|
|
1549
|
+
};
|
|
1459
1550
|
|
|
1460
1551
|
/**
|
|
1461
1552
|
* Custom HttpParameterCodec
|
|
@@ -16542,133 +16633,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
16542
16633
|
}]
|
|
16543
16634
|
}], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; } });
|
|
16544
16635
|
|
|
16545
|
-
// IMPORTANT:
|
|
16546
|
-
// This was copy-pasted from https://github.com/mwootendev/ngx-translate-plugins/blob/7c6c73c7d16c9519a7bafff939d29fd8ea5e574a/projects/testing/src/lib/test-translate-loader.service.ts
|
|
16547
|
-
// because the original package was expecting rxjs 7+ as a peer dep and that was conflicting with many other dependencies
|
|
16548
|
-
// FIXME: when rxjs 7 can be used in the project, remove this and do `npm install ngx-translate-testing --save-dev`
|
|
16549
|
-
class TestTranslateLoader extends TranslateLoader {
|
|
16550
|
-
constructor(_translations = {}) {
|
|
16551
|
-
super();
|
|
16552
|
-
this._translations = _translations;
|
|
16553
|
-
}
|
|
16554
|
-
/**
|
|
16555
|
-
* Returns an {Observable} of translations for the specified language. If the
|
|
16556
|
-
* language is not recognized, an empty translations object will be returned.
|
|
16557
|
-
*
|
|
16558
|
-
* @param language the language for which the translations should be retrieved.
|
|
16559
|
-
* @returns the translations for the specified
|
|
16560
|
-
* language or an empty set of translations if the language is not recognized.
|
|
16561
|
-
*/
|
|
16562
|
-
getTranslation(language) {
|
|
16563
|
-
return of(this._translations[language] || {});
|
|
16564
|
-
}
|
|
16565
|
-
}
|
|
16566
|
-
|
|
16567
|
-
// IMPORTANT:
|
|
16568
|
-
// This was copy-pasted from https://github.com/mwootendev/ngx-translate-plugins/blob/7c6c73c7d16c9519a7bafff939d29fd8ea5e574a/projects/testing/src/lib/testing.module.ts
|
|
16569
|
-
// because the original package was expecting rxjs 7+ as a peer dep and that was conflicting with many other dependencies
|
|
16570
|
-
// FIXME: when rxjs 7 can be used in the project, remove this and do `npm install ngx-translate-testing --save-dev`
|
|
16571
|
-
/**
|
|
16572
|
-
* The TranslateTestingModule provides the {TranslateModule} as well as a
|
|
16573
|
-
* {TranslateService} configured to return translations specific for the
|
|
16574
|
-
* test environment.
|
|
16575
|
-
*
|
|
16576
|
-
* @export
|
|
16577
|
-
*/
|
|
16578
|
-
class TranslateTestingModule {
|
|
16579
|
-
constructor() {
|
|
16580
|
-
this._translations = {};
|
|
16581
|
-
}
|
|
16582
|
-
static withTranslations(languageOrTranslations, translations) {
|
|
16583
|
-
const translateTestingModule = new TranslateTestingModule();
|
|
16584
|
-
if (typeof languageOrTranslations === 'string') {
|
|
16585
|
-
return translateTestingModule.withTranslations(languageOrTranslations, translations);
|
|
16586
|
-
}
|
|
16587
|
-
return translateTestingModule.withTranslations(languageOrTranslations);
|
|
16588
|
-
}
|
|
16589
|
-
get ngModule() {
|
|
16590
|
-
return TranslateTestingModule;
|
|
16591
|
-
}
|
|
16592
|
-
get providers() {
|
|
16593
|
-
const translateService = new TranslateService(null, new TestTranslateLoader(this._translations), this._compiler || new TranslateFakeCompiler(), new TranslateDefaultParser(), new FakeMissingTranslationHandler(), true, true, false, this._defaultLanguage);
|
|
16594
|
-
return [
|
|
16595
|
-
{
|
|
16596
|
-
provide: TranslateService,
|
|
16597
|
-
useValue: translateService,
|
|
16598
|
-
},
|
|
16599
|
-
];
|
|
16600
|
-
}
|
|
16601
|
-
withTranslations(languageOrTranslations, translations) {
|
|
16602
|
-
if (typeof languageOrTranslations === 'string' && translations) {
|
|
16603
|
-
this.addTranslations(languageOrTranslations, translations);
|
|
16604
|
-
this._defaultLanguage = languageOrTranslations;
|
|
16605
|
-
}
|
|
16606
|
-
else if (languageOrTranslations) {
|
|
16607
|
-
Object.keys(languageOrTranslations).forEach((language) => this.addTranslations(language, languageOrTranslations[language]));
|
|
16608
|
-
}
|
|
16609
|
-
return this;
|
|
16610
|
-
}
|
|
16611
|
-
/**
|
|
16612
|
-
* Updates the {TranslationTestingModule} to provide a {TranslateService} that will
|
|
16613
|
-
* use the provided {TranslateCompiler} to translate the test translations.
|
|
16614
|
-
*
|
|
16615
|
-
* @example
|
|
16616
|
-
*
|
|
16617
|
-
* TranslateTestingModule.withTranslations('en', {people: '{gender, select, male{He is} female{She is} other{They are}} {how})'})
|
|
16618
|
-
* .withCompiler(new TranslateMessageFormatCompiler());
|
|
16619
|
-
*
|
|
16620
|
-
* @param compiler the compiler to use to compile the test translations.
|
|
16621
|
-
* @returns the instance that can be used to chain additional configuration.
|
|
16622
|
-
* @memberof TranslateTestingModule
|
|
16623
|
-
*/
|
|
16624
|
-
withCompiler(compiler) {
|
|
16625
|
-
this._compiler = compiler;
|
|
16626
|
-
return this;
|
|
16627
|
-
}
|
|
16628
|
-
/**
|
|
16629
|
-
* Updates the {TranslateTestingModule} to use the provided language as the default language.
|
|
16630
|
-
* By default, the default language will be set to the first language provided.
|
|
16631
|
-
*
|
|
16632
|
-
* @example
|
|
16633
|
-
*
|
|
16634
|
-
* TranslateTestingModule.withTranslations('es', SPANISH_TRANSLATIONS)
|
|
16635
|
-
* .withTranslations('en', ENGLISH_TRANSLATIONS)
|
|
16636
|
-
* .withDefaultLanguage('en');
|
|
16637
|
-
*
|
|
16638
|
-
* @param language the new default language for translations.
|
|
16639
|
-
* @returns the instance that can be used to chain additional configuration.
|
|
16640
|
-
* @memberof TranslateTestingModule
|
|
16641
|
-
*/
|
|
16642
|
-
withDefaultLanguage(language) {
|
|
16643
|
-
this._defaultLanguage = language || this._defaultLanguage;
|
|
16644
|
-
return this;
|
|
16645
|
-
}
|
|
16646
|
-
addTranslations(language, translations) {
|
|
16647
|
-
if (!this._defaultLanguage) {
|
|
16648
|
-
this._defaultLanguage = language;
|
|
16649
|
-
}
|
|
16650
|
-
if (this._translations[language]) {
|
|
16651
|
-
this._translations[language] = {
|
|
16652
|
-
...this._translations[language],
|
|
16653
|
-
...translations,
|
|
16654
|
-
};
|
|
16655
|
-
}
|
|
16656
|
-
else {
|
|
16657
|
-
this._translations[language] = translations;
|
|
16658
|
-
}
|
|
16659
|
-
}
|
|
16660
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
16661
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, imports: [TranslateModule], exports: [TranslateModule] }); }
|
|
16662
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, imports: [TranslateModule, TranslateModule] }); }
|
|
16663
|
-
}
|
|
16664
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, decorators: [{
|
|
16665
|
-
type: NgModule,
|
|
16666
|
-
args: [{
|
|
16667
|
-
imports: [TranslateModule],
|
|
16668
|
-
exports: [TranslateModule],
|
|
16669
|
-
}]
|
|
16670
|
-
}] });
|
|
16671
|
-
|
|
16672
16636
|
var dropFile$6 = "Datei ablegen";
|
|
16673
16637
|
var next$6 = "weiter";
|
|
16674
16638
|
var previous$6 = "zurück";
|
|
@@ -16691,20 +16655,21 @@ var de = {
|
|
|
16691
16655
|
"chart.type.line": "Liniendiagramm",
|
|
16692
16656
|
"chart.type.lineSmooth": "Geglättes Liniendiagramm",
|
|
16693
16657
|
"chart.type.pie": "Kreisdiagramm",
|
|
16658
|
+
"dashboard.createRecord": "",
|
|
16694
16659
|
"dashboard.labels.mySpace": "Mein Bereich",
|
|
16695
16660
|
"dashboard.records.all": "Katalog",
|
|
16696
16661
|
"dashboard.records.myDraft": "Meine Entwürfe",
|
|
16697
16662
|
"dashboard.records.myLibrary": "Meine Bibliothek",
|
|
16698
16663
|
"dashboard.records.myOrg": "Meine Organisation",
|
|
16699
16664
|
"dashboard.records.myRecords": "Meine Datensätze",
|
|
16700
|
-
"dashboard.records.noRecord": "Kein Datensatz für diese Organisation",
|
|
16701
|
-
"dashboard.records.noUser": "Keine Benutzer für diese Organisation",
|
|
16702
16665
|
"dashboard.records.publishedRecords": "{count, plural, =1{veröffentlichter Datensatz} other{veröffentlichte Datensätze}}",
|
|
16703
16666
|
"dashboard.records.search": "Suche nach \"{searchText}\"",
|
|
16704
16667
|
"dashboard.records.userDetail": "Name",
|
|
16705
16668
|
"dashboard.records.userEmail": "E-Mail",
|
|
16706
16669
|
"dashboard.records.username": "Benutzername",
|
|
16707
16670
|
"dashboard.records.users": "{count, plural, =1{Benutzer} other{Benutzer}}",
|
|
16671
|
+
"dashboard.results.listMetadata": "",
|
|
16672
|
+
"dashboard.results.listResources": "",
|
|
16708
16673
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Dateiformat-Erkennung",
|
|
16709
16674
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Sammeln von Datensatzinformationen",
|
|
16710
16675
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Datenauswahl",
|
|
@@ -16896,16 +16861,15 @@ var de = {
|
|
|
16896
16861
|
"record.metadata.author": "Autor",
|
|
16897
16862
|
"record.metadata.catalog": "Katalog",
|
|
16898
16863
|
"record.metadata.contact": "Kontakt",
|
|
16899
|
-
"record.metadata.createdOn": "Erstellt am",
|
|
16900
16864
|
"record.metadata.details": "Technische Informationen",
|
|
16901
16865
|
"record.metadata.download": "Downloads",
|
|
16902
16866
|
"record.metadata.formats": "Formate",
|
|
16903
|
-
"record.metadata.isOpenData": "Open Data",
|
|
16904
16867
|
"record.metadata.keywords": "Stichworte",
|
|
16905
16868
|
"record.metadata.lastUpdate": "Zuletzt aktualisiert am",
|
|
16906
16869
|
"record.metadata.links": "Links",
|
|
16907
16870
|
"record.metadata.noUsage": "Für diesen Datensatz sind keine Nutzungsbedingungen angegeben.",
|
|
16908
16871
|
"record.metadata.origin": "Über die Daten",
|
|
16872
|
+
"record.metadata.otherConstraints": "",
|
|
16909
16873
|
"record.metadata.owner": "",
|
|
16910
16874
|
"record.metadata.preview": "Vorschau",
|
|
16911
16875
|
"record.metadata.publications": "Veröffentlichungen",
|
|
@@ -16929,8 +16893,9 @@ var de = {
|
|
|
16929
16893
|
"record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
|
|
16930
16894
|
"record.metadata.related": "Ähnliche Datensätze",
|
|
16931
16895
|
"record.metadata.sheet": "Weitere Informationen verfügbar unter:",
|
|
16932
|
-
"record.metadata.
|
|
16896
|
+
"record.metadata.status": "",
|
|
16933
16897
|
"record.metadata.title": "Titel",
|
|
16898
|
+
"record.metadata.topics": "Kategorien",
|
|
16934
16899
|
"record.metadata.type": "Geographischer Datensatz",
|
|
16935
16900
|
"record.metadata.uniqueId": "Eindeutige Kennung",
|
|
16936
16901
|
"record.metadata.updateFrequency": "Aktualisierungsfrequenz der Daten",
|
|
@@ -16966,6 +16931,7 @@ var de = {
|
|
|
16966
16931
|
"search.filters.isSpatial": "Ist räumliche Daten",
|
|
16967
16932
|
"search.filters.isSpatial.no": "nicht räumlich",
|
|
16968
16933
|
"search.filters.isSpatial.yes": "räumlich",
|
|
16934
|
+
"search.filters.keyword": "Schlüsselwort",
|
|
16969
16935
|
"search.filters.license": "Lizenz",
|
|
16970
16936
|
"search.filters.license.cc-by": "Creative Commons CC-BY",
|
|
16971
16937
|
"search.filters.license.cc-by-sa": "Creative Commons CC-BY-SA",
|
|
@@ -17030,20 +16996,21 @@ var en = {
|
|
|
17030
16996
|
"chart.type.line": "line chart",
|
|
17031
16997
|
"chart.type.lineSmooth": "smooth line chart",
|
|
17032
16998
|
"chart.type.pie": "pie chart",
|
|
16999
|
+
"dashboard.createRecord": "New record",
|
|
17033
17000
|
"dashboard.labels.mySpace": "My space",
|
|
17034
|
-
"dashboard.records.all": "
|
|
17001
|
+
"dashboard.records.all": "Metadata records",
|
|
17035
17002
|
"dashboard.records.myDraft": "My drafts",
|
|
17036
17003
|
"dashboard.records.myLibrary": "My library",
|
|
17037
17004
|
"dashboard.records.myOrg": "Organization",
|
|
17038
17005
|
"dashboard.records.myRecords": "My Records",
|
|
17039
|
-
"dashboard.records.noRecord": "No record for this organization",
|
|
17040
|
-
"dashboard.records.noUser": "No users for this organization",
|
|
17041
17006
|
"dashboard.records.publishedRecords": "{count, plural, =1{published record} other{published records}}",
|
|
17042
17007
|
"dashboard.records.search": "Search for \"{searchText}\"",
|
|
17043
17008
|
"dashboard.records.userDetail": "Name",
|
|
17044
17009
|
"dashboard.records.userEmail": "Email",
|
|
17045
17010
|
"dashboard.records.username": "Username",
|
|
17046
17011
|
"dashboard.records.users": "{count, plural, =1{user} other{users}}",
|
|
17012
|
+
"dashboard.results.listMetadata": "Show metadata",
|
|
17013
|
+
"dashboard.results.listResources": "Show resources",
|
|
17047
17014
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "File format \n detection",
|
|
17048
17015
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Gathering dataset \n information",
|
|
17049
17016
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n data",
|
|
@@ -17235,16 +17202,15 @@ var en = {
|
|
|
17235
17202
|
"record.metadata.author": "Author",
|
|
17236
17203
|
"record.metadata.catalog": "Catalog",
|
|
17237
17204
|
"record.metadata.contact": "Contact",
|
|
17238
|
-
"record.metadata.createdOn": "Created on",
|
|
17239
17205
|
"record.metadata.details": "Technical information",
|
|
17240
17206
|
"record.metadata.download": "Downloads",
|
|
17241
17207
|
"record.metadata.formats": "Formats",
|
|
17242
|
-
"record.metadata.isOpenData": "Open Data",
|
|
17243
17208
|
"record.metadata.keywords": "Keywords",
|
|
17244
17209
|
"record.metadata.lastUpdate": "Last updated on",
|
|
17245
17210
|
"record.metadata.links": "Links",
|
|
17246
17211
|
"record.metadata.noUsage": "No usage conditions specified for this record.",
|
|
17247
17212
|
"record.metadata.origin": "About the data",
|
|
17213
|
+
"record.metadata.otherConstraints": "Additional Conditions",
|
|
17248
17214
|
"record.metadata.owner": "Catalog of origin",
|
|
17249
17215
|
"record.metadata.preview": "Preview",
|
|
17250
17216
|
"record.metadata.publications": "publications",
|
|
@@ -17268,14 +17234,15 @@ var en = {
|
|
|
17268
17234
|
"record.metadata.quality.updateFrequency.success": "Update frequency is specified",
|
|
17269
17235
|
"record.metadata.related": "Related records",
|
|
17270
17236
|
"record.metadata.sheet": "Original metadata",
|
|
17271
|
-
"record.metadata.
|
|
17237
|
+
"record.metadata.status": "Status",
|
|
17272
17238
|
"record.metadata.title": "Title",
|
|
17239
|
+
"record.metadata.topics": "Categories",
|
|
17273
17240
|
"record.metadata.type": "Geographical dataset",
|
|
17274
17241
|
"record.metadata.uniqueId": "Unique Identifier",
|
|
17275
17242
|
"record.metadata.updateFrequency": "Data Update Frequency",
|
|
17276
17243
|
"record.metadata.updateStatus": "Data Update Status",
|
|
17277
|
-
"record.metadata.updatedOn": "
|
|
17278
|
-
"record.metadata.usage": "
|
|
17244
|
+
"record.metadata.updatedOn": "Last Data Information Update",
|
|
17245
|
+
"record.metadata.usage": "License and Conditions",
|
|
17279
17246
|
"record.more.details": "Read more",
|
|
17280
17247
|
"record.tab.chart": "Chart",
|
|
17281
17248
|
"record.tab.data": "Table",
|
|
@@ -17305,6 +17272,7 @@ var en = {
|
|
|
17305
17272
|
"search.filters.isSpatial": "Is spatial data",
|
|
17306
17273
|
"search.filters.isSpatial.no": "non spatial",
|
|
17307
17274
|
"search.filters.isSpatial.yes": "spatial",
|
|
17275
|
+
"search.filters.keyword": "Keyword",
|
|
17308
17276
|
"search.filters.license": "License",
|
|
17309
17277
|
"search.filters.license.cc-by": "Creative Commons CC-BY",
|
|
17310
17278
|
"search.filters.license.cc-by-sa": "Creative Commons CC-BY-SA",
|
|
@@ -17369,20 +17337,21 @@ var es = {
|
|
|
17369
17337
|
"chart.type.line": "gráfico de líneas",
|
|
17370
17338
|
"chart.type.lineSmooth": "gráfico de líneas suave",
|
|
17371
17339
|
"chart.type.pie": "gráfico circular",
|
|
17340
|
+
"dashboard.createRecord": "",
|
|
17372
17341
|
"dashboard.labels.mySpace": "Mi espacio",
|
|
17373
17342
|
"dashboard.records.all": "Catálogo",
|
|
17374
17343
|
"dashboard.records.myDraft": "Mis borradores",
|
|
17375
17344
|
"dashboard.records.myLibrary": "Mi biblioteca",
|
|
17376
17345
|
"dashboard.records.myOrg": "Organización",
|
|
17377
17346
|
"dashboard.records.myRecords": "Mis Registros",
|
|
17378
|
-
"dashboard.records.noRecord": "",
|
|
17379
|
-
"dashboard.records.noUser": "",
|
|
17380
17347
|
"dashboard.records.publishedRecords": "",
|
|
17381
17348
|
"dashboard.records.search": "Buscar \"{searchText}\"",
|
|
17382
17349
|
"dashboard.records.userDetail": "",
|
|
17383
17350
|
"dashboard.records.userEmail": "",
|
|
17384
17351
|
"dashboard.records.username": "",
|
|
17385
17352
|
"dashboard.records.users": "",
|
|
17353
|
+
"dashboard.results.listMetadata": "",
|
|
17354
|
+
"dashboard.results.listResources": "",
|
|
17386
17355
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
|
|
17387
17356
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
|
|
17388
17357
|
"datafeeder.analysisProgressBar.illustration.samplingData": "",
|
|
@@ -17574,16 +17543,15 @@ var es = {
|
|
|
17574
17543
|
"record.metadata.author": "",
|
|
17575
17544
|
"record.metadata.catalog": "",
|
|
17576
17545
|
"record.metadata.contact": "",
|
|
17577
|
-
"record.metadata.createdOn": "",
|
|
17578
17546
|
"record.metadata.details": "",
|
|
17579
17547
|
"record.metadata.download": "",
|
|
17580
17548
|
"record.metadata.formats": "",
|
|
17581
|
-
"record.metadata.isOpenData": "",
|
|
17582
17549
|
"record.metadata.keywords": "",
|
|
17583
17550
|
"record.metadata.lastUpdate": "",
|
|
17584
17551
|
"record.metadata.links": "",
|
|
17585
17552
|
"record.metadata.noUsage": "",
|
|
17586
17553
|
"record.metadata.origin": "",
|
|
17554
|
+
"record.metadata.otherConstraints": "",
|
|
17587
17555
|
"record.metadata.owner": "",
|
|
17588
17556
|
"record.metadata.preview": "",
|
|
17589
17557
|
"record.metadata.publications": "",
|
|
@@ -17607,8 +17575,9 @@ var es = {
|
|
|
17607
17575
|
"record.metadata.quality.updateFrequency.success": "",
|
|
17608
17576
|
"record.metadata.related": "",
|
|
17609
17577
|
"record.metadata.sheet": "",
|
|
17610
|
-
"record.metadata.
|
|
17578
|
+
"record.metadata.status": "",
|
|
17611
17579
|
"record.metadata.title": "",
|
|
17580
|
+
"record.metadata.topics": "",
|
|
17612
17581
|
"record.metadata.type": "",
|
|
17613
17582
|
"record.metadata.uniqueId": "",
|
|
17614
17583
|
"record.metadata.updateFrequency": "",
|
|
@@ -17644,6 +17613,7 @@ var es = {
|
|
|
17644
17613
|
"search.filters.isSpatial": "",
|
|
17645
17614
|
"search.filters.isSpatial.no": "",
|
|
17646
17615
|
"search.filters.isSpatial.yes": "",
|
|
17616
|
+
"search.filters.keyword": "",
|
|
17647
17617
|
"search.filters.license": "",
|
|
17648
17618
|
"search.filters.license.cc-by": "",
|
|
17649
17619
|
"search.filters.license.cc-by-sa": "",
|
|
@@ -17708,20 +17678,21 @@ var fr = {
|
|
|
17708
17678
|
"chart.type.line": "ligne",
|
|
17709
17679
|
"chart.type.lineSmooth": "ligne lisse",
|
|
17710
17680
|
"chart.type.pie": "camembert",
|
|
17681
|
+
"dashboard.createRecord": "",
|
|
17711
17682
|
"dashboard.labels.mySpace": "Mon espace",
|
|
17712
17683
|
"dashboard.records.all": "Catalogue",
|
|
17713
17684
|
"dashboard.records.myDraft": "Mes brouillons",
|
|
17714
17685
|
"dashboard.records.myLibrary": "Ma bibliothèque",
|
|
17715
17686
|
"dashboard.records.myOrg": "Mon organisation",
|
|
17716
17687
|
"dashboard.records.myRecords": "Mes fiches publiées",
|
|
17717
|
-
"dashboard.records.noRecord": "Aucun jeu de données pour cette organisation",
|
|
17718
|
-
"dashboard.records.noUser": "Aucun utilisateur pour cette organisation",
|
|
17719
17688
|
"dashboard.records.publishedRecords": "{count, plural, =1{donnée publiée} other{données publiées}}",
|
|
17720
17689
|
"dashboard.records.search": "Résultats pour \"{searchText}\"",
|
|
17721
17690
|
"dashboard.records.userDetail": "Nom",
|
|
17722
17691
|
"dashboard.records.userEmail": "Email",
|
|
17723
17692
|
"dashboard.records.username": "Nom d'utilisateur",
|
|
17724
17693
|
"dashboard.records.users": "{count, plural, =1{utilisateur} other{utilisateurs}}",
|
|
17694
|
+
"dashboard.results.listMetadata": "",
|
|
17695
|
+
"dashboard.results.listResources": "",
|
|
17725
17696
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Détection du \n format de fichier",
|
|
17726
17697
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Récupération des informations \n sur le jeu de données",
|
|
17727
17698
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n des données",
|
|
@@ -17803,7 +17774,7 @@ var fr = {
|
|
|
17803
17774
|
"datahub.header.popularRecords": "Les plus appréciées",
|
|
17804
17775
|
"datahub.header.title.html": "<div class=\"text-white\">Toutes les données<br>publiques de mon organisation</div>",
|
|
17805
17776
|
"datahub.news.contact.contactus": "Contactez-nous",
|
|
17806
|
-
"datahub.news.contact.html": "<p>Vous avez besoin de données qui ne sont pas présentes sur la plateforme actuellement ? </p><p> Nos équipes sont
|
|
17777
|
+
"datahub.news.contact.html": "<p>Vous avez besoin de données qui ne sont pas présentes sur la plateforme actuellement ? </p><p> Nos équipes sont là pour vous répondre.</p>",
|
|
17807
17778
|
"datahub.news.contact.title": "Un besoin spécifique ?",
|
|
17808
17779
|
"datahub.news.feed": "Fil d'activité",
|
|
17809
17780
|
"datahub.news.figures": "Quelques chiffres",
|
|
@@ -17913,16 +17884,15 @@ var fr = {
|
|
|
17913
17884
|
"record.metadata.author": "Auteur",
|
|
17914
17885
|
"record.metadata.catalog": "Catalogue",
|
|
17915
17886
|
"record.metadata.contact": "Contact",
|
|
17916
|
-
"record.metadata.createdOn": "Créé le",
|
|
17917
17887
|
"record.metadata.details": "Informations techniques",
|
|
17918
17888
|
"record.metadata.download": "Téléchargements",
|
|
17919
17889
|
"record.metadata.formats": "Formats",
|
|
17920
|
-
"record.metadata.isOpenData": "Donnée Ouverte",
|
|
17921
17890
|
"record.metadata.keywords": "Mots clés",
|
|
17922
17891
|
"record.metadata.lastUpdate": "Mis à jour le",
|
|
17923
17892
|
"record.metadata.links": "Liens",
|
|
17924
17893
|
"record.metadata.noUsage": "Aucune condition d'utilisation spécifiée pour ces données",
|
|
17925
17894
|
"record.metadata.origin": "À propos des données",
|
|
17895
|
+
"record.metadata.otherConstraints": "Limitations d'usage",
|
|
17926
17896
|
"record.metadata.owner": "Catalogue d'origine",
|
|
17927
17897
|
"record.metadata.preview": "Aperçu",
|
|
17928
17898
|
"record.metadata.publications": "données",
|
|
@@ -17946,14 +17916,15 @@ var fr = {
|
|
|
17946
17916
|
"record.metadata.quality.updateFrequency.success": "Fréquence de mise à jour est renseignée",
|
|
17947
17917
|
"record.metadata.related": "Voir aussi",
|
|
17948
17918
|
"record.metadata.sheet": "Fiche de métadonnées d'origine",
|
|
17949
|
-
"record.metadata.
|
|
17919
|
+
"record.metadata.status": "",
|
|
17950
17920
|
"record.metadata.title": "Titre",
|
|
17921
|
+
"record.metadata.topics": "Catégories",
|
|
17951
17922
|
"record.metadata.type": "Donnée géographique",
|
|
17952
17923
|
"record.metadata.uniqueId": "Identificateur de ressource unique",
|
|
17953
17924
|
"record.metadata.updateFrequency": "Fréquence de mise à jour des données",
|
|
17954
17925
|
"record.metadata.updateStatus": "Statut de mise à jour des données",
|
|
17955
|
-
"record.metadata.updatedOn": "
|
|
17956
|
-
"record.metadata.usage": "
|
|
17926
|
+
"record.metadata.updatedOn": "Dernière mise à jour des informations sur les données",
|
|
17927
|
+
"record.metadata.usage": "Licences et conditions d'utilisation",
|
|
17957
17928
|
"record.more.details": "Détails",
|
|
17958
17929
|
"record.tab.chart": "Graphique",
|
|
17959
17930
|
"record.tab.data": "Tableau",
|
|
@@ -17983,6 +17954,7 @@ var fr = {
|
|
|
17983
17954
|
"search.filters.isSpatial": "Données spatiales",
|
|
17984
17955
|
"search.filters.isSpatial.no": "non-géolocalisées",
|
|
17985
17956
|
"search.filters.isSpatial.yes": "géolocalisées",
|
|
17957
|
+
"search.filters.keyword": "Mot-clé",
|
|
17986
17958
|
"search.filters.license": "Licence",
|
|
17987
17959
|
"search.filters.license.cc-by": "cc-by",
|
|
17988
17960
|
"search.filters.license.cc-by-sa": "cc-by-sa",
|
|
@@ -18047,20 +18019,21 @@ var it = {
|
|
|
18047
18019
|
"chart.type.line": "grafico a linee",
|
|
18048
18020
|
"chart.type.lineSmooth": "grafico a linea liscia",
|
|
18049
18021
|
"chart.type.pie": "grafico a torta",
|
|
18022
|
+
"dashboard.createRecord": "",
|
|
18050
18023
|
"dashboard.labels.mySpace": "Il mio spazio",
|
|
18051
18024
|
"dashboard.records.all": "Catalogo",
|
|
18052
18025
|
"dashboard.records.myDraft": "Le mie bozze",
|
|
18053
18026
|
"dashboard.records.myLibrary": "La mia biblioteca",
|
|
18054
18027
|
"dashboard.records.myOrg": "La mia organizzazione",
|
|
18055
18028
|
"dashboard.records.myRecords": "I miei dati",
|
|
18056
|
-
"dashboard.records.noRecord": "Nessun dati per questa organizzazione",
|
|
18057
|
-
"dashboard.records.noUser": "Nessun utente per questa organizzazione",
|
|
18058
18029
|
"dashboard.records.publishedRecords": "dati pubblicati",
|
|
18059
18030
|
"dashboard.records.search": "Risultati per \"{searchText}\"",
|
|
18060
18031
|
"dashboard.records.userDetail": "Nome",
|
|
18061
18032
|
"dashboard.records.userEmail": "Email",
|
|
18062
18033
|
"dashboard.records.username": "Nome utente",
|
|
18063
18034
|
"dashboard.records.users": "utenti",
|
|
18035
|
+
"dashboard.results.listMetadata": "",
|
|
18036
|
+
"dashboard.results.listResources": "",
|
|
18064
18037
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Rilevamento del formato dei file",
|
|
18065
18038
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Recupero delle informazioni dal dataset",
|
|
18066
18039
|
"datafeeder.analysisProgressBar.illustration.samplingData": "Campionatura dei dati",
|
|
@@ -18252,16 +18225,15 @@ var it = {
|
|
|
18252
18225
|
"record.metadata.author": "Autore",
|
|
18253
18226
|
"record.metadata.catalog": "Catalogo",
|
|
18254
18227
|
"record.metadata.contact": "Contatto",
|
|
18255
|
-
"record.metadata.createdOn": "Creato il",
|
|
18256
18228
|
"record.metadata.details": "Informazioni tecniche",
|
|
18257
18229
|
"record.metadata.download": "Download",
|
|
18258
18230
|
"record.metadata.formats": "Formati",
|
|
18259
|
-
"record.metadata.isOpenData": "Data aperta",
|
|
18260
18231
|
"record.metadata.keywords": "Parole chiave",
|
|
18261
18232
|
"record.metadata.lastUpdate": "Ultimo aggiornamento",
|
|
18262
18233
|
"record.metadata.links": "Collegamenti",
|
|
18263
18234
|
"record.metadata.noUsage": "Nessuna condizione d'uso specificata per questi dati",
|
|
18264
18235
|
"record.metadata.origin": "Informazioni sui dati",
|
|
18236
|
+
"record.metadata.otherConstraints": "Limitazioni di uso",
|
|
18265
18237
|
"record.metadata.owner": "Catalogo originale",
|
|
18266
18238
|
"record.metadata.preview": "Anteprima",
|
|
18267
18239
|
"record.metadata.publications": "pubblicazioni",
|
|
@@ -18285,14 +18257,15 @@ var it = {
|
|
|
18285
18257
|
"record.metadata.quality.updateFrequency.success": "La frequenza di aggiornamento è specificata",
|
|
18286
18258
|
"record.metadata.related": "Vedi anche",
|
|
18287
18259
|
"record.metadata.sheet": "Origine del metadata",
|
|
18288
|
-
"record.metadata.
|
|
18260
|
+
"record.metadata.status": "",
|
|
18289
18261
|
"record.metadata.title": "Titolo",
|
|
18262
|
+
"record.metadata.topics": "Categorie",
|
|
18290
18263
|
"record.metadata.type": "Dati geografici",
|
|
18291
18264
|
"record.metadata.uniqueId": "Identificatore unico di risorsa",
|
|
18292
18265
|
"record.metadata.updateFrequency": "Frequenza di aggiornamento dei dati",
|
|
18293
18266
|
"record.metadata.updateStatus": "Stato di aggiornamento dei dati",
|
|
18294
|
-
"record.metadata.updatedOn": "Ultimo aggiornamento
|
|
18295
|
-
"record.metadata.usage": "
|
|
18267
|
+
"record.metadata.updatedOn": "Ultimo aggiornamento delle informazioni sui dati",
|
|
18268
|
+
"record.metadata.usage": "Licenze e limiti di utilizzo",
|
|
18296
18269
|
"record.more.details": "Dettagli",
|
|
18297
18270
|
"record.tab.chart": "Grafico",
|
|
18298
18271
|
"record.tab.data": "Tabella",
|
|
@@ -18322,6 +18295,7 @@ var it = {
|
|
|
18322
18295
|
"search.filters.isSpatial": "Dati spaziali",
|
|
18323
18296
|
"search.filters.isSpatial.no": "Non geolocalizzati",
|
|
18324
18297
|
"search.filters.isSpatial.yes": "Geolocalizzati",
|
|
18298
|
+
"search.filters.keyword": "Parola chiave",
|
|
18325
18299
|
"search.filters.license": "Licenza",
|
|
18326
18300
|
"search.filters.license.cc-by": "cc-by",
|
|
18327
18301
|
"search.filters.license.cc-by-sa": "cc-by-sa",
|
|
@@ -18386,20 +18360,21 @@ var nl = {
|
|
|
18386
18360
|
"chart.type.line": "lijndiagram",
|
|
18387
18361
|
"chart.type.lineSmooth": "glad lijndiagram",
|
|
18388
18362
|
"chart.type.pie": "cirkeldiagram",
|
|
18363
|
+
"dashboard.createRecord": "",
|
|
18389
18364
|
"dashboard.labels.mySpace": "Mijn ruimte",
|
|
18390
18365
|
"dashboard.records.all": "Catalogus",
|
|
18391
18366
|
"dashboard.records.myDraft": "Mijn concepten",
|
|
18392
18367
|
"dashboard.records.myLibrary": "Mijn bibliotheek",
|
|
18393
18368
|
"dashboard.records.myOrg": "Organisatie",
|
|
18394
18369
|
"dashboard.records.myRecords": "Mijn Records",
|
|
18395
|
-
"dashboard.records.noRecord": "",
|
|
18396
|
-
"dashboard.records.noUser": "",
|
|
18397
18370
|
"dashboard.records.publishedRecords": "",
|
|
18398
18371
|
"dashboard.records.search": "Zoeken naar \"{searchText}\"",
|
|
18399
18372
|
"dashboard.records.userDetail": "",
|
|
18400
18373
|
"dashboard.records.userEmail": "",
|
|
18401
18374
|
"dashboard.records.username": "",
|
|
18402
18375
|
"dashboard.records.users": "",
|
|
18376
|
+
"dashboard.results.listMetadata": "",
|
|
18377
|
+
"dashboard.results.listResources": "",
|
|
18403
18378
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
|
|
18404
18379
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
|
|
18405
18380
|
"datafeeder.analysisProgressBar.illustration.samplingData": "",
|
|
@@ -18591,16 +18566,15 @@ var nl = {
|
|
|
18591
18566
|
"record.metadata.author": "",
|
|
18592
18567
|
"record.metadata.catalog": "",
|
|
18593
18568
|
"record.metadata.contact": "",
|
|
18594
|
-
"record.metadata.createdOn": "",
|
|
18595
18569
|
"record.metadata.details": "",
|
|
18596
18570
|
"record.metadata.download": "",
|
|
18597
18571
|
"record.metadata.formats": "",
|
|
18598
|
-
"record.metadata.isOpenData": "",
|
|
18599
18572
|
"record.metadata.keywords": "",
|
|
18600
18573
|
"record.metadata.lastUpdate": "",
|
|
18601
18574
|
"record.metadata.links": "",
|
|
18602
18575
|
"record.metadata.noUsage": "",
|
|
18603
18576
|
"record.metadata.origin": "",
|
|
18577
|
+
"record.metadata.otherConstraints": "",
|
|
18604
18578
|
"record.metadata.owner": "",
|
|
18605
18579
|
"record.metadata.preview": "",
|
|
18606
18580
|
"record.metadata.publications": "",
|
|
@@ -18624,8 +18598,9 @@ var nl = {
|
|
|
18624
18598
|
"record.metadata.quality.updateFrequency.success": "",
|
|
18625
18599
|
"record.metadata.related": "",
|
|
18626
18600
|
"record.metadata.sheet": "",
|
|
18627
|
-
"record.metadata.
|
|
18601
|
+
"record.metadata.status": "",
|
|
18628
18602
|
"record.metadata.title": "",
|
|
18603
|
+
"record.metadata.topics": "",
|
|
18629
18604
|
"record.metadata.type": "",
|
|
18630
18605
|
"record.metadata.uniqueId": "",
|
|
18631
18606
|
"record.metadata.updateFrequency": "",
|
|
@@ -18661,6 +18636,7 @@ var nl = {
|
|
|
18661
18636
|
"search.filters.isSpatial": "",
|
|
18662
18637
|
"search.filters.isSpatial.no": "",
|
|
18663
18638
|
"search.filters.isSpatial.yes": "",
|
|
18639
|
+
"search.filters.keyword": "",
|
|
18664
18640
|
"search.filters.license": "",
|
|
18665
18641
|
"search.filters.license.cc-by": "",
|
|
18666
18642
|
"search.filters.license.cc-by-sa": "",
|
|
@@ -18725,20 +18701,21 @@ var pt = {
|
|
|
18725
18701
|
"chart.type.line": "gráfico de linha",
|
|
18726
18702
|
"chart.type.lineSmooth": "gráfico de linha suave",
|
|
18727
18703
|
"chart.type.pie": "gráfico de pizza",
|
|
18704
|
+
"dashboard.createRecord": "",
|
|
18728
18705
|
"dashboard.labels.mySpace": "Meu espaço",
|
|
18729
18706
|
"dashboard.records.all": "Catálogo",
|
|
18730
18707
|
"dashboard.records.myDraft": "Meus rascunhos",
|
|
18731
18708
|
"dashboard.records.myLibrary": "Minha biblioteca",
|
|
18732
18709
|
"dashboard.records.myOrg": "Organização",
|
|
18733
18710
|
"dashboard.records.myRecords": "Meus Registros",
|
|
18734
|
-
"dashboard.records.noRecord": "",
|
|
18735
|
-
"dashboard.records.noUser": "",
|
|
18736
18711
|
"dashboard.records.publishedRecords": "",
|
|
18737
18712
|
"dashboard.records.search": "Buscar por \"{searchText}\"",
|
|
18738
18713
|
"dashboard.records.userDetail": "",
|
|
18739
18714
|
"dashboard.records.userEmail": "",
|
|
18740
18715
|
"dashboard.records.username": "",
|
|
18741
18716
|
"dashboard.records.users": "",
|
|
18717
|
+
"dashboard.results.listMetadata": "",
|
|
18718
|
+
"dashboard.results.listResources": "",
|
|
18742
18719
|
"datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
|
|
18743
18720
|
"datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
|
|
18744
18721
|
"datafeeder.analysisProgressBar.illustration.samplingData": "",
|
|
@@ -18930,16 +18907,15 @@ var pt = {
|
|
|
18930
18907
|
"record.metadata.author": "",
|
|
18931
18908
|
"record.metadata.catalog": "",
|
|
18932
18909
|
"record.metadata.contact": "",
|
|
18933
|
-
"record.metadata.createdOn": "",
|
|
18934
18910
|
"record.metadata.details": "",
|
|
18935
18911
|
"record.metadata.download": "",
|
|
18936
18912
|
"record.metadata.formats": "",
|
|
18937
|
-
"record.metadata.isOpenData": "",
|
|
18938
18913
|
"record.metadata.keywords": "",
|
|
18939
18914
|
"record.metadata.lastUpdate": "",
|
|
18940
18915
|
"record.metadata.links": "",
|
|
18941
18916
|
"record.metadata.noUsage": "",
|
|
18942
18917
|
"record.metadata.origin": "",
|
|
18918
|
+
"record.metadata.otherConstraints": "",
|
|
18943
18919
|
"record.metadata.owner": "",
|
|
18944
18920
|
"record.metadata.preview": "",
|
|
18945
18921
|
"record.metadata.publications": "",
|
|
@@ -18963,8 +18939,9 @@ var pt = {
|
|
|
18963
18939
|
"record.metadata.quality.updateFrequency.success": "",
|
|
18964
18940
|
"record.metadata.related": "",
|
|
18965
18941
|
"record.metadata.sheet": "",
|
|
18966
|
-
"record.metadata.
|
|
18942
|
+
"record.metadata.status": "",
|
|
18967
18943
|
"record.metadata.title": "",
|
|
18944
|
+
"record.metadata.topics": "",
|
|
18968
18945
|
"record.metadata.type": "",
|
|
18969
18946
|
"record.metadata.uniqueId": "",
|
|
18970
18947
|
"record.metadata.updateFrequency": "",
|
|
@@ -19000,6 +18977,7 @@ var pt = {
|
|
|
19000
18977
|
"search.filters.isSpatial": "",
|
|
19001
18978
|
"search.filters.isSpatial.no": "",
|
|
19002
18979
|
"search.filters.isSpatial.yes": "",
|
|
18980
|
+
"search.filters.keyword": "",
|
|
19003
18981
|
"search.filters.license": "",
|
|
19004
18982
|
"search.filters.license.cc-by": "",
|
|
19005
18983
|
"search.filters.license.cc-by-sa": "",
|
|
@@ -19108,8 +19086,8 @@ class Gn4FieldMapper {
|
|
|
19108
19086
|
},
|
|
19109
19087
|
cl_topic: (output, source) => ({
|
|
19110
19088
|
...output,
|
|
19111
|
-
|
|
19112
|
-
...(output.
|
|
19089
|
+
topics: [
|
|
19090
|
+
...(output.topics || []),
|
|
19113
19091
|
...getAsArray(selectField(source, 'cl_topic')).map((topic) => selectTranslatedValue(topic, this.lang3)),
|
|
19114
19092
|
],
|
|
19115
19093
|
}),
|
|
@@ -19164,31 +19142,22 @@ class Gn4FieldMapper {
|
|
|
19164
19142
|
catalogUuid: selectFallback(selectField(source, 'sourceCatalogue'), 'no title'),
|
|
19165
19143
|
}, output);
|
|
19166
19144
|
},
|
|
19167
|
-
|
|
19145
|
+
allKeywords: (output, source) => ({
|
|
19168
19146
|
...output,
|
|
19169
|
-
keywords:
|
|
19147
|
+
keywords: mapKeywords(selectField(source, 'allKeywords'), this.lang3),
|
|
19170
19148
|
}),
|
|
19171
19149
|
inspireTheme: (output, source) => ({
|
|
19172
19150
|
...output,
|
|
19173
|
-
|
|
19174
|
-
...(output.
|
|
19151
|
+
topics: [
|
|
19152
|
+
...(output.topics || []),
|
|
19175
19153
|
...getAsArray(selectField(source, 'inspireTheme_syn')),
|
|
19176
19154
|
],
|
|
19177
19155
|
}),
|
|
19178
|
-
MD_ConstraintsUseLimitationObject: (output, source) => this.constraintField('
|
|
19179
|
-
MD_LegalConstraintsUseLimitationObject: (output, source) => this.constraintField('
|
|
19180
|
-
MD_LegalConstraintsOtherConstraintsObject: (output, source) => this.constraintField('
|
|
19181
|
-
MD_SecurityConstraintsUseLimitationObject: (output, source) => this.constraintField('
|
|
19182
|
-
licenseObject: (output, source) => (
|
|
19183
|
-
...output,
|
|
19184
|
-
licenses: getAsArray(selectField(source, 'licenseObject')).map((license) => {
|
|
19185
|
-
const link = getAsUrl(selectField(license, 'link'));
|
|
19186
|
-
return {
|
|
19187
|
-
text: selectTranslatedValue(license, this.lang3),
|
|
19188
|
-
...(link ? { link } : {}),
|
|
19189
|
-
};
|
|
19190
|
-
}),
|
|
19191
|
-
}),
|
|
19156
|
+
MD_ConstraintsUseLimitationObject: (output, source) => this.constraintField('other', output, getAsArray(selectField(source, 'MD_ConstraintsUseLimitationObject'))),
|
|
19157
|
+
MD_LegalConstraintsUseLimitationObject: (output, source) => this.constraintField('legal', output, getAsArray(selectField(source, 'MD_LegalConstraintsUseLimitationObject'))),
|
|
19158
|
+
MD_LegalConstraintsOtherConstraintsObject: (output, source) => this.constraintField('legal', output, getAsArray(selectField(source, 'MD_LegalConstraintsOtherConstraintsObject'))),
|
|
19159
|
+
MD_SecurityConstraintsUseLimitationObject: (output, source) => this.constraintField('security', output, getAsArray(selectField(source, 'MD_SecurityConstraintsUseLimitationObject'))),
|
|
19160
|
+
licenseObject: (output, source) => this.constraintField('license', output, getAsArray(selectField(source, 'licenseObject'))),
|
|
19192
19161
|
lineageObject: (output, source) => ({
|
|
19193
19162
|
...output,
|
|
19194
19163
|
lineage: selectTranslatedField(source, 'lineageObject', this.lang3),
|
|
@@ -19214,33 +19183,78 @@ class Gn4FieldMapper {
|
|
|
19214
19183
|
kind,
|
|
19215
19184
|
};
|
|
19216
19185
|
},
|
|
19186
|
+
geom: (output, source) => {
|
|
19187
|
+
const geoms = getAsArray(selectField(source, 'geom'));
|
|
19188
|
+
const shapes = getAsArray(selectField(source, 'shape'));
|
|
19189
|
+
const extentDescriptions = getAsArray(selectField(source, 'extentDescriptionObject'));
|
|
19190
|
+
const spatialExtents = getAsArray(selectField(source, 'spatialExtents'));
|
|
19191
|
+
return {
|
|
19192
|
+
...output,
|
|
19193
|
+
spatialExtents: [
|
|
19194
|
+
...spatialExtents,
|
|
19195
|
+
...geoms.map((geom, index) => {
|
|
19196
|
+
const description = selectTranslatedValue(getArrayItem(extentDescriptions, index), this.lang3);
|
|
19197
|
+
const geometry = shapes[index] ?? geom;
|
|
19198
|
+
return {
|
|
19199
|
+
...(description !== null ? { description } : null),
|
|
19200
|
+
geometry,
|
|
19201
|
+
};
|
|
19202
|
+
}),
|
|
19203
|
+
],
|
|
19204
|
+
};
|
|
19205
|
+
},
|
|
19206
|
+
resourceTemporalDateRange: (output, source) => {
|
|
19207
|
+
const ranges = getAsArray(selectField(source, 'resourceTemporalDateRange'));
|
|
19208
|
+
return {
|
|
19209
|
+
...output,
|
|
19210
|
+
temporalExtents: ranges.map((range) => {
|
|
19211
|
+
const start = selectField(range, 'gte');
|
|
19212
|
+
const end = selectField(range, 'lte');
|
|
19213
|
+
return {
|
|
19214
|
+
...(start !== null ? { start: toDate(start) } : null),
|
|
19215
|
+
...(end !== null ? { end: toDate(end) } : null),
|
|
19216
|
+
};
|
|
19217
|
+
}),
|
|
19218
|
+
};
|
|
19219
|
+
},
|
|
19217
19220
|
};
|
|
19218
19221
|
this.genericField = (output) => output;
|
|
19219
|
-
this.constraintField = (
|
|
19220
|
-
|
|
19221
|
-
|
|
19222
|
-
|
|
19223
|
-
|
|
19224
|
-
|
|
19225
|
-
|
|
19226
|
-
|
|
19227
|
-
|
|
19228
|
-
|
|
19229
|
-
|
|
19230
|
-
|
|
19231
|
-
|
|
19232
|
-
|
|
19233
|
-
|
|
19234
|
-
|
|
19235
|
-
|
|
19236
|
-
|
|
19237
|
-
|
|
19238
|
-
|
|
19239
|
-
|
|
19240
|
-
|
|
19241
|
-
|
|
19242
|
-
}
|
|
19243
|
-
|
|
19222
|
+
this.constraintField = (type, output, constraintArray) => {
|
|
19223
|
+
let outputField;
|
|
19224
|
+
switch (type) {
|
|
19225
|
+
case 'license':
|
|
19226
|
+
outputField = 'licenses';
|
|
19227
|
+
break;
|
|
19228
|
+
case 'legal':
|
|
19229
|
+
outputField = 'legalConstraints';
|
|
19230
|
+
break;
|
|
19231
|
+
case 'security':
|
|
19232
|
+
outputField = 'securityConstraints';
|
|
19233
|
+
break;
|
|
19234
|
+
case 'other':
|
|
19235
|
+
outputField = 'otherConstraints';
|
|
19236
|
+
break;
|
|
19237
|
+
}
|
|
19238
|
+
const outputArray = outputField in output ? output[outputField] : [];
|
|
19239
|
+
outputArray.push(...constraintArray.map((item) => {
|
|
19240
|
+
const text = selectTranslatedValue(item, this.lang3);
|
|
19241
|
+
const url = getAsUrl(selectField(item, 'link'));
|
|
19242
|
+
return {
|
|
19243
|
+
text,
|
|
19244
|
+
...(url ? { url } : {}),
|
|
19245
|
+
};
|
|
19246
|
+
}));
|
|
19247
|
+
const result = {
|
|
19248
|
+
...output,
|
|
19249
|
+
[outputField]: outputArray,
|
|
19250
|
+
};
|
|
19251
|
+
// avoid legal constraints being duplicates of licenses
|
|
19252
|
+
if ('legalConstraints' in result &&
|
|
19253
|
+
(type === 'legal' || type === 'license')) {
|
|
19254
|
+
result.legalConstraints = result.legalConstraints.filter((constraint) => !output.licenses?.some((license) => license.text === constraint.text));
|
|
19255
|
+
}
|
|
19256
|
+
return result;
|
|
19257
|
+
};
|
|
19244
19258
|
this.mapLink = (sourceLink) => {
|
|
19245
19259
|
const url = getAsUrl(selectFallback(selectTranslatedField(sourceLink, 'urlObject', this.lang3), selectField(sourceLink, 'url')));
|
|
19246
19260
|
const name = selectFallback(selectTranslatedField(sourceLink, 'nameObject', this.lang3), selectField(sourceLink, 'name'));
|
|
@@ -19288,17 +19302,6 @@ class Gn4FieldMapper {
|
|
|
19288
19302
|
extras: { ...(output.extras || {}), ...value },
|
|
19289
19303
|
});
|
|
19290
19304
|
}
|
|
19291
|
-
getConstraintsType(indexField) {
|
|
19292
|
-
switch (indexField) {
|
|
19293
|
-
case 'MD_LegalConstraintsUseLimitationObject':
|
|
19294
|
-
return 'legal';
|
|
19295
|
-
case 'MD_SecurityConstraintsUseLimitationObject':
|
|
19296
|
-
return 'security';
|
|
19297
|
-
case 'MD_ConstraintsUseLimitationObject':
|
|
19298
|
-
default:
|
|
19299
|
-
return 'other';
|
|
19300
|
-
}
|
|
19301
|
-
}
|
|
19302
19305
|
getMappingFn(fieldName) {
|
|
19303
19306
|
return fieldName in this.fields ? this.fields[fieldName] : this.genericField;
|
|
19304
19307
|
}
|
|
@@ -19360,12 +19363,13 @@ class Gn4MetadataMapper extends MetadataBaseMapper {
|
|
|
19360
19363
|
recordUpdated: null,
|
|
19361
19364
|
ownerOrganization: null,
|
|
19362
19365
|
licenses: [],
|
|
19366
|
+
legalConstraints: [],
|
|
19367
|
+
securityConstraints: [],
|
|
19368
|
+
otherConstraints: [],
|
|
19363
19369
|
contacts: [],
|
|
19364
19370
|
contactsForResource: [],
|
|
19365
|
-
accessConstraints: [],
|
|
19366
19371
|
keywords: [],
|
|
19367
|
-
|
|
19368
|
-
useLimitations: [],
|
|
19372
|
+
topics: [],
|
|
19369
19373
|
spatialExtents: [],
|
|
19370
19374
|
temporalExtents: [],
|
|
19371
19375
|
overviews: [],
|
|
@@ -20133,11 +20137,18 @@ class OrganizationsFromMetadataService {
|
|
|
20133
20137
|
if (!allContactOrgs.length)
|
|
20134
20138
|
return of(record);
|
|
20135
20139
|
const ownerOrganization = allContactOrgs[0];
|
|
20136
|
-
|
|
20140
|
+
// read the owner group as well to have a fallback logo
|
|
20141
|
+
const groupId = selectField(source, 'groupOwner');
|
|
20142
|
+
const group$ = this.groups$.pipe(map$1((groups) => groups.find((group) => {
|
|
20143
|
+
return group.id === Number(groupId);
|
|
20144
|
+
})));
|
|
20145
|
+
return this.organisations$.pipe(takeLast(1), withLatestFrom(group$), map$1(([organisations, group]) => {
|
|
20137
20146
|
const recordOrganisation = organisations.filter((org) => org.name === ownerOrganization.name)[0];
|
|
20147
|
+
const logoUrl = group?.logo && getAsUrl(`${IMAGE_URL$1}${group.logo}`);
|
|
20138
20148
|
return {
|
|
20139
20149
|
...record,
|
|
20140
20150
|
ownerOrganization: {
|
|
20151
|
+
logoUrl,
|
|
20141
20152
|
...ownerOrganization,
|
|
20142
20153
|
...recordOrganisation,
|
|
20143
20154
|
},
|
|
@@ -20402,36 +20413,23 @@ class SelectionService {
|
|
|
20402
20413
|
this.selectedRecordsIdentifiers$.next(filtered);
|
|
20403
20414
|
}
|
|
20404
20415
|
selectRecords(records) {
|
|
20405
|
-
const newIds =
|
|
20406
|
-
|
|
20407
|
-
newIds.push(record.uniqueIdentifier);
|
|
20408
|
-
});
|
|
20409
|
-
const apiResponse = this.selectionsApi.add(BUCKET_ID, newIds);
|
|
20410
|
-
return apiResponse.pipe(tap$2(() => {
|
|
20416
|
+
const newIds = records.map((record) => record.uniqueIdentifier);
|
|
20417
|
+
this.selectionsApi.add(BUCKET_ID, newIds).subscribe(() => {
|
|
20411
20418
|
this.addIdsToSelected(newIds);
|
|
20412
|
-
})
|
|
20419
|
+
});
|
|
20413
20420
|
}
|
|
20414
20421
|
deselectRecords(records) {
|
|
20415
|
-
const idsToBeRemoved =
|
|
20416
|
-
|
|
20417
|
-
idsToBeRemoved.push(record.uniqueIdentifier);
|
|
20418
|
-
});
|
|
20419
|
-
const apiResponse = this.selectionsApi.clear(BUCKET_ID, idsToBeRemoved);
|
|
20420
|
-
return apiResponse.pipe(tap$2(() => {
|
|
20422
|
+
const idsToBeRemoved = records.map((record) => record.uniqueIdentifier);
|
|
20423
|
+
this.selectionsApi.clear(BUCKET_ID, idsToBeRemoved).subscribe(() => {
|
|
20421
20424
|
this.removeIdsFromSelected(idsToBeRemoved);
|
|
20422
|
-
}), map$2(() => undefined));
|
|
20423
|
-
}
|
|
20424
|
-
clearSelection() {
|
|
20425
|
-
const currentSelectedResponse = this.selectionsApi.get(BUCKET_ID);
|
|
20426
|
-
let currentSelection;
|
|
20427
|
-
this.subscription = currentSelectedResponse.subscribe((value) => {
|
|
20428
|
-
currentSelection = [...value];
|
|
20429
20425
|
});
|
|
20430
|
-
|
|
20431
|
-
|
|
20432
|
-
|
|
20426
|
+
}
|
|
20427
|
+
async clearSelection() {
|
|
20428
|
+
const response = await firstValueFrom(this.selectionsApi.get(BUCKET_ID));
|
|
20429
|
+
const currentSelection = Array.from(response);
|
|
20430
|
+
this.selectionsApi.clear(BUCKET_ID, currentSelection).subscribe(() => {
|
|
20433
20431
|
this.removeIdsFromSelected(currentSelection);
|
|
20434
|
-
})
|
|
20432
|
+
});
|
|
20435
20433
|
}
|
|
20436
20434
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SelectionService, deps: [{ token: SelectionsApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
20437
20435
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SelectionService, providedIn: 'root' }); }
|
|
@@ -20461,12 +20459,21 @@ class Gn4PlatformMapper {
|
|
|
20461
20459
|
const { enabled, emailAddresses, organisation, kind, lastLoginDate, accountNonExpired, accountNonLocked, id, credentialsNonExpired, ...user } = apiUser;
|
|
20462
20460
|
return { ...apiUser, id: id.toString() };
|
|
20463
20461
|
}
|
|
20464
|
-
thesaurusFromApi(thesaurus) {
|
|
20462
|
+
thesaurusFromApi(thesaurus, lang3) {
|
|
20465
20463
|
return thesaurus.map((keyword) => {
|
|
20466
|
-
|
|
20464
|
+
let key = keyword.uri;
|
|
20465
|
+
// sometines GN can prefix an URI with an "all thesaurus" URI; only keep the last one
|
|
20466
|
+
if (key.indexOf('@@@') > -1) {
|
|
20467
|
+
key = key.split('@@@')[1];
|
|
20468
|
+
}
|
|
20469
|
+
const label = lang3 && lang3 in keyword.values ? keyword.values[lang3] : keyword.value;
|
|
20470
|
+
const description = lang3 && lang3 in keyword.definitions
|
|
20471
|
+
? keyword.definitions[lang3]
|
|
20472
|
+
: keyword.definition;
|
|
20467
20473
|
return {
|
|
20468
|
-
key
|
|
20469
|
-
label
|
|
20474
|
+
key,
|
|
20475
|
+
label,
|
|
20476
|
+
description,
|
|
20470
20477
|
};
|
|
20471
20478
|
});
|
|
20472
20479
|
}
|
|
@@ -20479,13 +20486,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
20479
20486
|
|
|
20480
20487
|
const minApiVersion = '4.2.2';
|
|
20481
20488
|
class Gn4PlatformService {
|
|
20482
|
-
constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService) {
|
|
20489
|
+
constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService, langService) {
|
|
20483
20490
|
this.siteApiService = siteApiService;
|
|
20484
20491
|
this.meApi = meApi;
|
|
20485
20492
|
this.usersApi = usersApi;
|
|
20486
20493
|
this.mapper = mapper;
|
|
20487
20494
|
this.toolsApiService = toolsApiService;
|
|
20488
20495
|
this.registriesApiService = registriesApiService;
|
|
20496
|
+
this.langService = langService;
|
|
20489
20497
|
this.type = 'GeoNetwork';
|
|
20490
20498
|
this.keyTranslations$ = this.toolsApiService
|
|
20491
20499
|
.getTranslationsPackage1('gnui')
|
|
@@ -20499,6 +20507,11 @@ class Gn4PlatformService {
|
|
|
20499
20507
|
throw new Error(`Gn4 API version is not compatible.\nMinimum: ${minApiVersion}\nYour version: ${version}`);
|
|
20500
20508
|
}
|
|
20501
20509
|
}), shareReplay(1));
|
|
20510
|
+
/**
|
|
20511
|
+
* A map of already loaded thesauri (groups of keywords); the key is a URI
|
|
20512
|
+
* @private
|
|
20513
|
+
*/
|
|
20514
|
+
this.thesauri = {};
|
|
20502
20515
|
this.me$ = this.meApi.getMe().pipe(switchMap((apiUser) => this.mapper.userFromMeApi(apiUser)), shareReplay({ bufferSize: 1, refCount: true }));
|
|
20503
20516
|
this.isAnonymous$ = this.me$.pipe(map$1((user) => !user || !('id' in user)));
|
|
20504
20517
|
this.users$ = this.usersApi.getUsers().pipe(map$1((users) => users.map((user) => this.mapper.userFromApi(user))), shareReplay());
|
|
@@ -20525,19 +20538,36 @@ class Gn4PlatformService {
|
|
|
20525
20538
|
return this.users$;
|
|
20526
20539
|
}
|
|
20527
20540
|
translateKey(key) {
|
|
20541
|
+
// if the key is a URI, use the registries API to look for the translation
|
|
20542
|
+
if (key.match(/^https?:\/\//)) {
|
|
20543
|
+
// the thesaurus URI is inferred by removing a part of the keyword URI
|
|
20544
|
+
// this is not exact science but it's OK, we'll still end up loading a bunch of keywords at once anyway
|
|
20545
|
+
const thesaurusUri = key.replace(/\/([^/]+)$/, '/');
|
|
20546
|
+
return this.getThesaurusByUri(thesaurusUri).pipe(map$1((thesaurus) => {
|
|
20547
|
+
for (const item of thesaurus) {
|
|
20548
|
+
if (item.key === key)
|
|
20549
|
+
return item.label;
|
|
20550
|
+
}
|
|
20551
|
+
return key;
|
|
20552
|
+
}));
|
|
20553
|
+
}
|
|
20528
20554
|
return this.keyTranslations$.pipe(map$1((translations) => translations[key]));
|
|
20529
20555
|
}
|
|
20530
|
-
|
|
20531
|
-
|
|
20532
|
-
.
|
|
20533
|
-
|
|
20556
|
+
getThesaurusByUri(uri) {
|
|
20557
|
+
if (this.thesauri[uri]) {
|
|
20558
|
+
return this.thesauri[uri];
|
|
20559
|
+
}
|
|
20560
|
+
this.thesauri[uri] = this.registriesApiService
|
|
20561
|
+
.searchKeywords(null, this.langService.iso3, 1000, 0, null, null, null, `${uri}*`)
|
|
20562
|
+
.pipe(map$1((thesaurus) => this.mapper.thesaurusFromApi(thesaurus, this.langService.iso3)), shareReplay(1));
|
|
20563
|
+
return this.thesauri[uri];
|
|
20534
20564
|
}
|
|
20535
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, deps: [{ token: SiteApiService }, { token: MeApiService }, { token: UsersApiService }, { token: Gn4PlatformMapper }, { token: ToolsApiService }, { token: RegistriesApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
20565
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, deps: [{ token: SiteApiService }, { token: MeApiService }, { token: UsersApiService }, { token: Gn4PlatformMapper }, { token: ToolsApiService }, { token: RegistriesApiService }, { token: LangService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
20536
20566
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService }); }
|
|
20537
20567
|
}
|
|
20538
20568
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, decorators: [{
|
|
20539
20569
|
type: Injectable
|
|
20540
|
-
}], ctorParameters: function () { return [{ type: SiteApiService }, { type: MeApiService }, { type: UsersApiService }, { type: Gn4PlatformMapper }, { type: ToolsApiService }, { type: RegistriesApiService }]; } });
|
|
20570
|
+
}], ctorParameters: function () { return [{ type: SiteApiService }, { type: MeApiService }, { type: UsersApiService }, { type: Gn4PlatformMapper }, { type: ToolsApiService }, { type: RegistriesApiService }, { type: LangService }]; } });
|
|
20541
20571
|
|
|
20542
20572
|
function provideGn4() {
|
|
20543
20573
|
return [
|
|
@@ -20749,6 +20779,8 @@ const defaultMapOptions = {
|
|
|
20749
20779
|
};
|
|
20750
20780
|
const FEATURE_MAP_OPTIONS = new InjectionToken('mapOptions');
|
|
20751
20781
|
|
|
20782
|
+
const LONLAT_CRS_CODES = ['EPSG:4326', 'CRS:84'];
|
|
20783
|
+
|
|
20752
20784
|
var MapContextLayerTypeEnum;
|
|
20753
20785
|
(function (MapContextLayerTypeEnum) {
|
|
20754
20786
|
MapContextLayerTypeEnum["XYZ"] = "xyz";
|
|
@@ -21343,72 +21375,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
21343
21375
|
}]
|
|
21344
21376
|
}] });
|
|
21345
21377
|
|
|
21346
|
-
const LONLAT_CRS_CODES = ['EPSG:4326', 'CRS:84'];
|
|
21347
|
-
|
|
21348
|
-
class MapUtilsWMSService {
|
|
21349
|
-
constructor(proxy) {
|
|
21350
|
-
this.proxy = proxy;
|
|
21351
|
-
}
|
|
21352
|
-
getCapabilities(layer) {
|
|
21353
|
-
return from(new WmsEndpoint(this.proxy.getProxiedUrl(layer.url)).isReady());
|
|
21354
|
-
}
|
|
21355
|
-
getLayerFull(layer) {
|
|
21356
|
-
return this.getCapabilities(layer).pipe(map$1((endpoint) => endpoint.getLayerByName(layer.name)));
|
|
21357
|
-
}
|
|
21358
|
-
getLayerLonLatBBox(layer) {
|
|
21359
|
-
return this.getLayerFull(layer).pipe(switchMap$1((wmsLayerFull) => from(this.getLonLatBBox(wmsLayerFull))));
|
|
21360
|
-
}
|
|
21361
|
-
async getLonLatBBox(wmsLayerFull) {
|
|
21362
|
-
const { boundingBoxes } = wmsLayerFull;
|
|
21363
|
-
const lonLatCRS = Object.keys(boundingBoxes)?.find((crs) => LONLAT_CRS_CODES.includes(crs));
|
|
21364
|
-
if (lonLatCRS) {
|
|
21365
|
-
return boundingBoxes[lonLatCRS];
|
|
21366
|
-
}
|
|
21367
|
-
else {
|
|
21368
|
-
const availableEPSGCode = Object.keys(boundingBoxes)[0];
|
|
21369
|
-
register(proj4);
|
|
21370
|
-
const proj = await fromEPSGCode(availableEPSGCode);
|
|
21371
|
-
proj4.defs(availableEPSGCode, proj);
|
|
21372
|
-
const bboxWithFiniteNumbers = [
|
|
21373
|
-
parseFloat(boundingBoxes[availableEPSGCode][0]),
|
|
21374
|
-
parseFloat(boundingBoxes[availableEPSGCode][1]),
|
|
21375
|
-
parseFloat(boundingBoxes[availableEPSGCode][2]),
|
|
21376
|
-
parseFloat(boundingBoxes[availableEPSGCode][3]),
|
|
21377
|
-
];
|
|
21378
|
-
const extent = transformExtent(bboxWithFiniteNumbers, proj, 'EPSG:4326');
|
|
21379
|
-
return extent;
|
|
21380
|
-
}
|
|
21381
|
-
}
|
|
21382
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsWMSService, deps: [{ token: ProxyService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
21383
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsWMSService, providedIn: 'root' }); }
|
|
21384
|
-
}
|
|
21385
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsWMSService, decorators: [{
|
|
21386
|
-
type: Injectable,
|
|
21387
|
-
args: [{
|
|
21388
|
-
providedIn: 'root',
|
|
21389
|
-
}]
|
|
21390
|
-
}], ctorParameters: function () { return [{ type: ProxyService }]; } });
|
|
21391
|
-
|
|
21392
21378
|
const FEATURE_PROJECTION = 'EPSG:3857';
|
|
21393
21379
|
const DATA_PROJECTION = 'EPSG:4326';
|
|
21380
|
+
const GEOJSON = new GeoJSON();
|
|
21394
21381
|
class MapUtilsService {
|
|
21395
|
-
constructor(http,
|
|
21382
|
+
constructor(http, proxy) {
|
|
21396
21383
|
this.http = http;
|
|
21397
|
-
this.
|
|
21384
|
+
this.proxy = proxy;
|
|
21398
21385
|
this.readFeatureCollection = (featureCollection, featureProjection = FEATURE_PROJECTION, dataProjection = DATA_PROJECTION) => {
|
|
21399
|
-
|
|
21386
|
+
return GEOJSON.readFeatures(featureCollection, {
|
|
21400
21387
|
featureProjection,
|
|
21401
21388
|
dataProjection,
|
|
21402
21389
|
});
|
|
21403
|
-
return olFeatures;
|
|
21404
21390
|
};
|
|
21405
21391
|
}
|
|
21406
21392
|
createEmptyMap() {
|
|
21407
|
-
|
|
21393
|
+
return new Map$1({
|
|
21408
21394
|
controls: [],
|
|
21409
21395
|
pixelRatio: 1,
|
|
21410
21396
|
});
|
|
21411
|
-
return map;
|
|
21412
21397
|
}
|
|
21413
21398
|
isWMSLayer(layer) {
|
|
21414
21399
|
return (layer.getSource() instanceof TileWMS ||
|
|
@@ -21423,8 +21408,7 @@ class MapUtilsService {
|
|
|
21423
21408
|
...source.getParams(),
|
|
21424
21409
|
INFO_FORMAT: 'application/json',
|
|
21425
21410
|
};
|
|
21426
|
-
|
|
21427
|
-
return url;
|
|
21411
|
+
return source.getFeatureInfoUrl(coordinate, resolution, projection, params);
|
|
21428
21412
|
}
|
|
21429
21413
|
getVectorFeaturesFromClick(olMap, event) {
|
|
21430
21414
|
const features = [];
|
|
@@ -21452,38 +21436,56 @@ class MapUtilsService {
|
|
|
21452
21436
|
/**
|
|
21453
21437
|
* Will emit `null` if no extent could be computed
|
|
21454
21438
|
*/
|
|
21455
|
-
getLayerExtent(layer) {
|
|
21456
|
-
let
|
|
21439
|
+
async getLayerExtent(layer) {
|
|
21440
|
+
let latLonExtent;
|
|
21457
21441
|
if (layer &&
|
|
21458
21442
|
layer.type === 'geojson' &&
|
|
21459
21443
|
'data' in layer &&
|
|
21460
21444
|
typeof layer.data === 'object' &&
|
|
21461
21445
|
layer.data.features[0] &&
|
|
21462
21446
|
layer.data.features[0].geometry) {
|
|
21463
|
-
|
|
21464
|
-
.readFeatures(
|
|
21447
|
+
latLonExtent = new GeoJSON()
|
|
21448
|
+
.readFeatures(layer.data)
|
|
21465
21449
|
.map((feature) => feature.getGeometry())
|
|
21466
21450
|
.filter((geom) => !!geom)
|
|
21467
|
-
.reduce((prev, curr) => prev ? extend(prev, curr.getExtent()) : curr.getExtent(), null)
|
|
21451
|
+
.reduce((prev, curr) => prev ? extend(prev, curr.getExtent()) : curr.getExtent(), null);
|
|
21468
21452
|
}
|
|
21469
21453
|
else if (layer && layer.type === 'wms') {
|
|
21470
|
-
|
|
21454
|
+
latLonExtent = await this.getWmsLayerExtent(layer);
|
|
21471
21455
|
}
|
|
21472
21456
|
else if (layer && layer.type === 'wmts') {
|
|
21473
21457
|
if (layer.extent) {
|
|
21474
|
-
|
|
21458
|
+
latLonExtent = layer.extent;
|
|
21475
21459
|
}
|
|
21476
21460
|
else {
|
|
21477
|
-
return
|
|
21461
|
+
return layer.options.tileGrid.getExtent();
|
|
21478
21462
|
}
|
|
21479
21463
|
}
|
|
21480
21464
|
else {
|
|
21481
|
-
return
|
|
21465
|
+
return null;
|
|
21466
|
+
}
|
|
21467
|
+
if (!latLonExtent || isEmpty(latLonExtent)) {
|
|
21468
|
+
return null;
|
|
21469
|
+
}
|
|
21470
|
+
return transformExtent(latLonExtent, 'EPSG:4326', 'EPSG:3857');
|
|
21471
|
+
}
|
|
21472
|
+
async getWmsLayerExtent(layer) {
|
|
21473
|
+
const endpoint = await new WmsEndpoint(this.proxy.getProxiedUrl(layer.url)).isReady();
|
|
21474
|
+
const { boundingBoxes } = endpoint.getLayerByName(layer.name);
|
|
21475
|
+
if (!Object.keys(boundingBoxes).length) {
|
|
21476
|
+
return null;
|
|
21477
|
+
}
|
|
21478
|
+
const lonLatCRS = Object.keys(boundingBoxes)?.find((crs) => LONLAT_CRS_CODES.includes(crs));
|
|
21479
|
+
if (lonLatCRS) {
|
|
21480
|
+
return boundingBoxes[lonLatCRS].map(parseFloat);
|
|
21481
|
+
}
|
|
21482
|
+
else {
|
|
21483
|
+
const availableEPSGCode = Object.keys(boundingBoxes)[0];
|
|
21484
|
+
register(proj4);
|
|
21485
|
+
const proj = await fromEPSGCode(availableEPSGCode);
|
|
21486
|
+
const bboxWithFiniteNumbers = boundingBoxes[availableEPSGCode].map(parseFloat);
|
|
21487
|
+
return transformExtent(bboxWithFiniteNumbers, proj, 'EPSG:4326');
|
|
21482
21488
|
}
|
|
21483
|
-
return geographicExtent.pipe(map$1((extent) => [
|
|
21484
|
-
...fromLonLat([extent[0], extent[1]], 'EPSG:3857'),
|
|
21485
|
-
...fromLonLat([extent[2], extent[3]], 'EPSG:3857'),
|
|
21486
|
-
]), map$1((extent) => (isEmpty(extent) ? null : extent)));
|
|
21487
21489
|
}
|
|
21488
21490
|
getWmtsLayerFromCapabilities(link) {
|
|
21489
21491
|
const getCapabilitiesUrl = new URL(link.url, window.location.toString());
|
|
@@ -21539,7 +21541,18 @@ ${e.stack || e.message || e}`);
|
|
|
21539
21541
|
])
|
|
21540
21542
|
.getArray());
|
|
21541
21543
|
}
|
|
21542
|
-
|
|
21544
|
+
getRecordExtent(record) {
|
|
21545
|
+
if (!('spatialExtents' in record)) {
|
|
21546
|
+
return null;
|
|
21547
|
+
}
|
|
21548
|
+
// transform an array of geojson geometries into a bbox
|
|
21549
|
+
const totalExtent = record.spatialExtents.reduce((prev, curr) => {
|
|
21550
|
+
const geom = GEOJSON.readGeometry(curr.geometry);
|
|
21551
|
+
return extend(prev, geom.getExtent());
|
|
21552
|
+
}, [Infinity, Infinity, -Infinity, -Infinity]);
|
|
21553
|
+
return transformExtent(totalExtent, 'EPSG:4326', 'EPSG:3857');
|
|
21554
|
+
}
|
|
21555
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsService, deps: [{ token: i1.HttpClient }, { token: ProxyService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
21543
21556
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsService, providedIn: 'root' }); }
|
|
21544
21557
|
}
|
|
21545
21558
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapUtilsService, decorators: [{
|
|
@@ -21547,7 +21560,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
21547
21560
|
args: [{
|
|
21548
21561
|
providedIn: 'root',
|
|
21549
21562
|
}]
|
|
21550
|
-
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type:
|
|
21563
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: ProxyService }]; } });
|
|
21551
21564
|
function dragPanCondition(event) {
|
|
21552
21565
|
const dragPanCondition = this.getPointerCount() === 2 || mouseOnly(event);
|
|
21553
21566
|
if (!dragPanCondition) {
|
|
@@ -22632,6 +22645,9 @@ class MapContextService {
|
|
|
22632
22645
|
if (mapConfig) {
|
|
22633
22646
|
mapContext = this.mergeMapConfigWithContext(mapContext, mapConfig);
|
|
22634
22647
|
}
|
|
22648
|
+
else {
|
|
22649
|
+
mapContext.layers = this.addDefaultBaselayerContext(mapContext.layers);
|
|
22650
|
+
}
|
|
22635
22651
|
if (!mapContext.view?.extent &&
|
|
22636
22652
|
(!mapContext.view?.center || !mapContext.view?.zoom)) {
|
|
22637
22653
|
mapContext.view = this.getFallbackView(mapConfig);
|
|
@@ -22742,6 +22758,11 @@ class MapContextService {
|
|
|
22742
22758
|
}
|
|
22743
22759
|
return view;
|
|
22744
22760
|
}
|
|
22761
|
+
addDefaultBaselayerContext(layers) {
|
|
22762
|
+
return layers.includes(DEFAULT_BASELAYER_CONTEXT)
|
|
22763
|
+
? layers
|
|
22764
|
+
: [DEFAULT_BASELAYER_CONTEXT, ...layers];
|
|
22765
|
+
}
|
|
22745
22766
|
mergeMapConfigWithContext(mapContext, mapConfig) {
|
|
22746
22767
|
return {
|
|
22747
22768
|
...mapContext,
|
|
@@ -23420,8 +23441,7 @@ class MetadataQualityComponent {
|
|
|
23420
23441
|
: this.calculatedQualityScore;
|
|
23421
23442
|
}
|
|
23422
23443
|
get calculatedQualityScore() {
|
|
23423
|
-
return Math.round((this.items.filter(({ value }) => value
|
|
23424
|
-
this.items.length);
|
|
23444
|
+
return Math.round((this.items.filter(({ value }) => value).length * 100) / this.items.length);
|
|
23425
23445
|
}
|
|
23426
23446
|
showMenu() {
|
|
23427
23447
|
this.isMenuShown = true;
|
|
@@ -23439,7 +23459,7 @@ class MetadataQualityComponent {
|
|
|
23439
23459
|
this.items = [];
|
|
23440
23460
|
this.add('title', !!this.metadata?.title);
|
|
23441
23461
|
this.add('description', !!this.metadata?.abstract);
|
|
23442
|
-
this.add('topic', this.metadata?.
|
|
23462
|
+
this.add('topic', this.metadata?.topics?.length > 0);
|
|
23443
23463
|
this.add('keywords', this.metadata?.keywords?.length > 0);
|
|
23444
23464
|
this.add('legalConstraints', this.metadata?.legalConstraints?.length > 0);
|
|
23445
23465
|
this.add('organisation', !!contact?.organization);
|
|
@@ -23887,6 +23907,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
23887
23907
|
type: Input
|
|
23888
23908
|
}] } });
|
|
23889
23909
|
|
|
23910
|
+
class MarkdownParserComponent {
|
|
23911
|
+
get parsedMarkdown() {
|
|
23912
|
+
return marked.parse(this.textContent);
|
|
23913
|
+
}
|
|
23914
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23915
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MarkdownParserComponent, isStandalone: true, selector: "gn-ui-markdown-parser", inputs: { textContent: "textContent" }, ngImport: i0, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important;@apply underline;}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
23916
|
+
}
|
|
23917
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, decorators: [{
|
|
23918
|
+
type: Component,
|
|
23919
|
+
args: [{ selector: 'gn-ui-markdown-parser', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important;@apply underline;}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"] }]
|
|
23920
|
+
}], propDecorators: { textContent: [{
|
|
23921
|
+
type: Input
|
|
23922
|
+
}] } });
|
|
23923
|
+
|
|
23890
23924
|
class ContentGhostComponent {
|
|
23891
23925
|
constructor() {
|
|
23892
23926
|
this.ghostClass = '';
|
|
@@ -24041,36 +24075,38 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24041
24075
|
args: ['container']
|
|
24042
24076
|
}] } });
|
|
24043
24077
|
|
|
24044
|
-
class MarkdownParserComponent {
|
|
24045
|
-
get parsedMarkdown() {
|
|
24046
|
-
return marked.parse(this.textContent);
|
|
24047
|
-
}
|
|
24048
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24049
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: { textContent: "textContent" }, ngImport: i0, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none!important;@apply font-bold;}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24050
|
-
}
|
|
24051
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, decorators: [{
|
|
24052
|
-
type: Component,
|
|
24053
|
-
args: [{ selector: 'gn-ui-markdown-parser', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none!important;@apply font-bold;}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"] }]
|
|
24054
|
-
}], propDecorators: { textContent: [{
|
|
24055
|
-
type: Input
|
|
24056
|
-
}] } });
|
|
24057
|
-
|
|
24058
24078
|
class MetadataInfoComponent {
|
|
24059
24079
|
constructor() {
|
|
24060
24080
|
this.keyword = new EventEmitter();
|
|
24061
24081
|
}
|
|
24062
24082
|
get hasUsage() {
|
|
24063
24083
|
return (this.metadata.extras?.isOpenData === true ||
|
|
24064
|
-
this.metadata.
|
|
24065
|
-
|
|
24084
|
+
(this.metadata.legalConstraints?.length > 0 &&
|
|
24085
|
+
this.legalConstraints.length > 0) ||
|
|
24086
|
+
(this.metadata.otherConstraints?.length > 0 &&
|
|
24087
|
+
this.otherConstraints.length > 0) ||
|
|
24088
|
+
(this.metadata.licenses?.length > 0 && this.licenses.length > 0));
|
|
24066
24089
|
}
|
|
24067
|
-
get
|
|
24090
|
+
get legalConstraints() {
|
|
24068
24091
|
let array = [];
|
|
24069
|
-
if (this.metadata.
|
|
24070
|
-
array = array.concat(this.metadata.
|
|
24092
|
+
if (this.metadata.legalConstraints?.length) {
|
|
24093
|
+
array = array.concat(this.metadata.legalConstraints.filter((c) => c.text).map((c) => c.text));
|
|
24071
24094
|
}
|
|
24072
|
-
|
|
24073
|
-
|
|
24095
|
+
return array;
|
|
24096
|
+
}
|
|
24097
|
+
get otherConstraints() {
|
|
24098
|
+
let array = [];
|
|
24099
|
+
if (this.metadata.otherConstraints?.length) {
|
|
24100
|
+
array = array.concat(this.metadata.otherConstraints.filter((c) => c.text).map((c) => c.text));
|
|
24101
|
+
}
|
|
24102
|
+
return array;
|
|
24103
|
+
}
|
|
24104
|
+
get licenses() {
|
|
24105
|
+
let array = [];
|
|
24106
|
+
if (this.metadata.licenses?.length) {
|
|
24107
|
+
array = array.concat(this.metadata.licenses
|
|
24108
|
+
.filter((c) => c.text)
|
|
24109
|
+
.map((c) => ({ text: c.text, url: c.url })));
|
|
24074
24110
|
}
|
|
24075
24111
|
return array;
|
|
24076
24112
|
}
|
|
@@ -24092,16 +24128,12 @@ class MetadataInfoComponent {
|
|
|
24092
24128
|
onKeywordClick(keyword) {
|
|
24093
24129
|
this.keyword.emit(keyword);
|
|
24094
24130
|
}
|
|
24095
|
-
copyText() {
|
|
24096
|
-
navigator.clipboard.writeText(this.metadata.uniqueIdentifier);
|
|
24097
|
-
event.target.blur();
|
|
24098
|
-
}
|
|
24099
24131
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24100
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataInfoComponent, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel
|
|
24132
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataInfoComponent, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words text-gray-900\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "collapsed"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24101
24133
|
}
|
|
24102
24134
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, decorators: [{
|
|
24103
24135
|
type: Component,
|
|
24104
|
-
args: [{ selector: 'gn-ui-metadata-info', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel
|
|
24136
|
+
args: [{ selector: 'gn-ui-metadata-info', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words text-gray-900\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"] }]
|
|
24105
24137
|
}], propDecorators: { metadata: [{
|
|
24106
24138
|
type: Input
|
|
24107
24139
|
}], incomplete: [{
|
|
@@ -24170,11 +24202,11 @@ class ButtonComponent {
|
|
|
24170
24202
|
propagateToDocumentOnly(event);
|
|
24171
24203
|
}
|
|
24172
24204
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24173
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ButtonComponent, selector: "gn-ui-button", inputs: { type: "type", disabled: "disabled", extraClass: "extraClass" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host ::ng-deep mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24205
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ButtonComponent, isStandalone: true, selector: "gn-ui-button", inputs: { type: "type", disabled: "disabled", extraClass: "extraClass" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host ::ng-deep mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24174
24206
|
}
|
|
24175
24207
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, decorators: [{
|
|
24176
24208
|
type: Component,
|
|
24177
|
-
args: [{ selector: 'gn-ui-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host ::ng-deep mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"] }]
|
|
24209
|
+
args: [{ selector: 'gn-ui-button', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host ::ng-deep mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"] }]
|
|
24178
24210
|
}], propDecorators: { type: [{
|
|
24179
24211
|
type: Input
|
|
24180
24212
|
}], disabled: [{
|
|
@@ -24502,6 +24534,69 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
24502
24534
|
}]
|
|
24503
24535
|
}] });
|
|
24504
24536
|
|
|
24537
|
+
class InteractiveTableColumnComponent {
|
|
24538
|
+
constructor() {
|
|
24539
|
+
this.grow = false;
|
|
24540
|
+
this.sortable = false;
|
|
24541
|
+
this.activeSort = null;
|
|
24542
|
+
this.sortChange = new EventEmitter();
|
|
24543
|
+
}
|
|
24544
|
+
handleSortChange() {
|
|
24545
|
+
this.activeSort = this.activeSort === 'asc' ? 'desc' : 'asc';
|
|
24546
|
+
this.sortChange.emit(this.activeSort);
|
|
24547
|
+
}
|
|
24548
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24549
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: InteractiveTableColumnComponent, isStandalone: true, selector: "gn-ui-interactive-table-column", inputs: { grow: "grow", sortable: "sortable", activeSort: "activeSort" }, outputs: { sortChange: "sortChange" }, queries: [{ propertyName: "header", first: true, predicate: ["header"], descendants: true }, { propertyName: "cell", first: true, predicate: ["cell"], descendants: true }], ngImport: i0, template: "<span>empty</span>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24550
|
+
}
|
|
24551
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableColumnComponent, decorators: [{
|
|
24552
|
+
type: Component,
|
|
24553
|
+
args: [{ selector: 'gn-ui-interactive-table-column', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<span>empty</span>\n" }]
|
|
24554
|
+
}], propDecorators: { header: [{
|
|
24555
|
+
type: ContentChild,
|
|
24556
|
+
args: ['header']
|
|
24557
|
+
}], cell: [{
|
|
24558
|
+
type: ContentChild,
|
|
24559
|
+
args: ['cell']
|
|
24560
|
+
}], grow: [{
|
|
24561
|
+
type: Input
|
|
24562
|
+
}], sortable: [{
|
|
24563
|
+
type: Input
|
|
24564
|
+
}], activeSort: [{
|
|
24565
|
+
type: Input
|
|
24566
|
+
}], sortChange: [{
|
|
24567
|
+
type: Output
|
|
24568
|
+
}] } });
|
|
24569
|
+
|
|
24570
|
+
class InteractiveTableComponent {
|
|
24571
|
+
constructor() {
|
|
24572
|
+
this.items = [];
|
|
24573
|
+
this.itemClick = new EventEmitter();
|
|
24574
|
+
}
|
|
24575
|
+
get gridStyle() {
|
|
24576
|
+
return {
|
|
24577
|
+
'grid-template-columns': this.columns
|
|
24578
|
+
.map((column) => column.grow ? `minmax(0px,1fr)` : `minmax(0px,max-content)`)
|
|
24579
|
+
.join(' '),
|
|
24580
|
+
};
|
|
24581
|
+
}
|
|
24582
|
+
handleRowClick(item) {
|
|
24583
|
+
this.itemClick.emit(item);
|
|
24584
|
+
}
|
|
24585
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24586
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: InteractiveTableComponent, isStandalone: true, selector: "gn-ui-interactive-table", inputs: { items: "items" }, outputs: { itemClick: "itemClick" }, queries: [{ propertyName: "columns", predicate: InteractiveTableColumnComponent }], ngImport: i0, template: "<div class=\"grid w-full\" [ngStyle]=\"gridStyle\">\n <div class=\"contents\">\n <ng-container *ngFor=\"let column of columns\">\n <button\n *ngIf=\"column.sortable\"\n type=\"button\"\n class=\"table-header-cell\"\n (click)=\"column.sortable && column.handleSortChange()\"\n >\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n <div class=\"sort-button flex flex-col\" *ngIf=\"column.sortable\">\n <mat-icon\n class=\"material-symbols-outlined text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'asc' }\"\n >expand_less</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'desc' }\"\n >expand_more</mat-icon\n >\n </div>\n </button>\n <div *ngIf=\"!column.sortable\" class=\"table-header-cell\">\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n </div>\n </ng-container>\n </div>\n <div\n class=\"contents text-gray-900 cursor-pointer group\"\n *ngFor=\"let item of items\"\n (click)=\"handleRowClick(item)\"\n >\n <div\n class=\"relative h-0\"\n [ngStyle]=\"{ 'grid-column': 'span ' + this.columns.length }\"\n >\n <!-- this element is only used in keyboard navigation -->\n <button\n type=\"button\"\n class=\"absolute inset-x-0 h-[50px] bg-transparent pointer-events-none\"\n ></button>\n </div>\n <ng-container *ngFor=\"let column of columns\">\n <div\n class=\"table-row-cell px-4 py-3 flex items-center bg-white transition-colors duration-75 truncate group-hover:text-main group-hover:bg-gray-50 border-b border-gray-200\"\n >\n <ng-container\n *ngTemplateOutlet=\"column.cell; context: { $implicit: item }\"\n ></ng-container>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: [".sort-button mat-icon{padding:0;margin:0;height:8px;line-height:8px;font-size:18px}.table-header-cell{@apply text-gray-700 px-4 py-5 flex items-center truncate bg-white;}button.table-header-cell{@apply transition-colors duration-75 hover:text-main hover:bg-gray-50 focus:text-main focus:bg-gray-50;}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24587
|
+
}
|
|
24588
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: InteractiveTableComponent, decorators: [{
|
|
24589
|
+
type: Component,
|
|
24590
|
+
args: [{ selector: 'gn-ui-interactive-table', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, InteractiveTableColumnComponent, MatIconModule], template: "<div class=\"grid w-full\" [ngStyle]=\"gridStyle\">\n <div class=\"contents\">\n <ng-container *ngFor=\"let column of columns\">\n <button\n *ngIf=\"column.sortable\"\n type=\"button\"\n class=\"table-header-cell\"\n (click)=\"column.sortable && column.handleSortChange()\"\n >\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n <div class=\"sort-button flex flex-col\" *ngIf=\"column.sortable\">\n <mat-icon\n class=\"material-symbols-outlined text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'asc' }\"\n >expand_less</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined text-gray-600\"\n [ngClass]=\"{ 'text-main': column.activeSort === 'desc' }\"\n >expand_more</mat-icon\n >\n </div>\n </button>\n <div *ngIf=\"!column.sortable\" class=\"table-header-cell\">\n <ng-container *ngTemplateOutlet=\"column.header\"></ng-container>\n </div>\n </ng-container>\n </div>\n <div\n class=\"contents text-gray-900 cursor-pointer group\"\n *ngFor=\"let item of items\"\n (click)=\"handleRowClick(item)\"\n >\n <div\n class=\"relative h-0\"\n [ngStyle]=\"{ 'grid-column': 'span ' + this.columns.length }\"\n >\n <!-- this element is only used in keyboard navigation -->\n <button\n type=\"button\"\n class=\"absolute inset-x-0 h-[50px] bg-transparent pointer-events-none\"\n ></button>\n </div>\n <ng-container *ngFor=\"let column of columns\">\n <div\n class=\"table-row-cell px-4 py-3 flex items-center bg-white transition-colors duration-75 truncate group-hover:text-main group-hover:bg-gray-50 border-b border-gray-200\"\n >\n <ng-container\n *ngTemplateOutlet=\"column.cell; context: { $implicit: item }\"\n ></ng-container>\n </div>\n </ng-container>\n </div>\n</div>\n", styles: [".sort-button mat-icon{padding:0;margin:0;height:8px;line-height:8px;font-size:18px}.table-header-cell{@apply text-gray-700 px-4 py-5 flex items-center truncate bg-white;}button.table-header-cell{@apply transition-colors duration-75 hover:text-main hover:bg-gray-50 focus:text-main focus:bg-gray-50;}\n"] }]
|
|
24591
|
+
}], propDecorators: { columns: [{
|
|
24592
|
+
type: ContentChildren,
|
|
24593
|
+
args: [InteractiveTableColumnComponent]
|
|
24594
|
+
}], items: [{
|
|
24595
|
+
type: Input
|
|
24596
|
+
}], itemClick: [{
|
|
24597
|
+
type: Output
|
|
24598
|
+
}] } });
|
|
24599
|
+
|
|
24505
24600
|
class LinkCardComponent {
|
|
24506
24601
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LinkCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24507
24602
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LinkCardComponent, selector: "gn-ui-link-card", inputs: { link: "link" }, ngImport: i0, template: "<a\n [href]=\"link.url\"\n target=\"_blank\"\n class=\"flex flex-col justify-between group h-40 grow py-5 px-5 bg-white rounded border-gray-300 filter card-shadow overflow-hidden lg:w-80\"\n>\n <div class=\"max-h-24 overflow-hidden text-ellipsis\">\n <p\n class=\"font-title font-medium text-21 text-black break-words mb-1 line-clamp-2\"\n >\n {{ link.name }}\n </p>\n <p class=\"font-medium text-sm break-words\">\n {{ link.description }}\n </p>\n <p\n *ngIf=\"!link.name && !link.description\"\n class=\"font-medium text-sm break-words truncate\"\n >\n {{ link.url }}\n </p>\n </div>\n <div>\n <mat-icon class=\"material-symbols-outlined card-icon\">open_in_new</mat-icon>\n </div>\n</a>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
@@ -24547,11 +24642,11 @@ class MetadataContactComponent {
|
|
|
24547
24642
|
this.organizationClick.emit(this.shownOrganization);
|
|
24548
24643
|
}
|
|
24549
24644
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24550
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataContactComponent, selector: "gn-ui-metadata-contact", inputs: { metadata: "metadata" }, outputs: { organizationClick: "organizationClick", contactClick: "contactClick" }, ngImport: i0, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6
|
|
24645
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataContactComponent, selector: "gn-ui-metadata-contact", inputs: { metadata: "metadata" }, outputs: { organizationClick: "organizationClick", contactClick: "contactClick" }, ngImport: i0, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6\">\n <div class=\"grid gap-3\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24551
24646
|
}
|
|
24552
24647
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, decorators: [{
|
|
24553
24648
|
type: Component,
|
|
24554
|
-
args: [{ selector: 'gn-ui-metadata-contact', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6
|
|
24649
|
+
args: [{ selector: 'gn-ui-metadata-contact', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6\">\n <div class=\"grid gap-3\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
24555
24650
|
}], propDecorators: { metadata: [{
|
|
24556
24651
|
type: Input
|
|
24557
24652
|
}], organizationClick: [{
|
|
@@ -24955,11 +25050,11 @@ class DropdownMultiselectComponent {
|
|
|
24955
25050
|
this.setFocus();
|
|
24956
25051
|
}
|
|
24957
25052
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, deps: [{ token: i1$6.ScrollStrategyOptions }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
24958
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownMultiselectComponent, selector: "gn-ui-dropdown-multiselect", inputs: { title: "title", choices: "choices", selected: "selected", allowSearch: "allowSearch", maxRows: "maxRows", searchInputValue: "searchInputValue" }, outputs: { selectValues: "selectValues" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "overlayContainer", first: true, predicate: ["overlayContainer"], descendants: true, read: ElementRef }, { propertyName: "searchFieldInput", first: true, predicate: ["searchFieldInput"], descendants: true }, { propertyName: "checkboxes", predicate: ["checkBox"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice,
|
|
25053
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownMultiselectComponent, selector: "gn-ui-dropdown-multiselect", inputs: { title: "title", choices: "choices", selected: "selected", allowSearch: "allowSearch", maxRows: "maxRows", searchInputValue: "searchInputValue" }, outputs: { selectValues: "selectValues" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "overlayContainer", first: true, predicate: ["overlayContainer"], descendants: true, read: ElementRef }, { propertyName: "searchFieldInput", first: true, predicate: ["searchFieldInput"], descendants: true }, { propertyName: "checkboxes", predicate: ["checkBox"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
24959
25054
|
}
|
|
24960
25055
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, decorators: [{
|
|
24961
25056
|
type: Component,
|
|
24962
|
-
args: [{ selector: 'gn-ui-dropdown-multiselect', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice,
|
|
25057
|
+
args: [{ selector: 'gn-ui-dropdown-multiselect', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n" }]
|
|
24963
25058
|
}], ctorParameters: function () { return [{ type: i1$6.ScrollStrategyOptions }]; }, propDecorators: { title: [{
|
|
24964
25059
|
type: Input
|
|
24965
25060
|
}], choices: [{
|
|
@@ -25113,11 +25208,11 @@ class TextAreaComponent {
|
|
|
25113
25208
|
this.rawChange.next(value);
|
|
25114
25209
|
}
|
|
25115
25210
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25116
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: { value: "value", placeholder: "placeholder", required: "required" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n class=\"w-full pt-2 pl-2 resize-none border border-gray-800 rounded italic leading-tight focus:outline-none focus:bg-background focus:border-primary\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }); }
|
|
25211
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: TextAreaComponent, isStandalone: true, selector: "gn-ui-text-area", inputs: { value: "value", placeholder: "placeholder", required: "required" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n class=\"w-full pt-2 pl-2 resize-none border border-gray-800 rounded italic leading-tight focus:outline-none focus:bg-background focus:border-primary\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }); }
|
|
25117
25212
|
}
|
|
25118
25213
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextAreaComponent, decorators: [{
|
|
25119
25214
|
type: Component,
|
|
25120
|
-
args: [{ selector: 'gn-ui-text-area', template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n class=\"w-full pt-2 pl-2 resize-none border border-gray-800 rounded italic leading-tight focus:outline-none focus:bg-background focus:border-primary\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }]
|
|
25215
|
+
args: [{ selector: 'gn-ui-text-area', standalone: true, template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n class=\"w-full pt-2 pl-2 resize-none border border-gray-800 rounded italic leading-tight focus:outline-none focus:bg-background focus:border-primary\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }]
|
|
25121
25216
|
}], propDecorators: { value: [{
|
|
25122
25217
|
type: Input
|
|
25123
25218
|
}], placeholder: [{
|
|
@@ -25218,11 +25313,11 @@ class AutocompleteComponent {
|
|
|
25218
25313
|
}
|
|
25219
25314
|
}
|
|
25220
25315
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AutocompleteComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25221
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: { placeholder: "placeholder", action: "action", value: "value", clearOnSelection: "clearOnSelection", autoFocus: "autoFocus", displayWithFn: "displayWithFn" }, outputs: { itemSelected: "itemSelected", inputSubmitted: "inputSubmitted", inputCleared: "inputCleared" }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "autocomplete", first: true, predicate: MatAutocomplete, descendants: true }, { propertyName: "inputRef", first: true, predicate: ["searchInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(
|
|
25316
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: { placeholder: "placeholder", action: "action", value: "value", clearOnSelection: "clearOnSelection", autoFocus: "autoFocus", displayWithFn: "displayWithFn" }, outputs: { itemSelected: "itemSelected", inputSubmitted: "inputSubmitted", inputCleared: "inputCleared" }, viewQueries: [{ propertyName: "triggerRef", first: true, predicate: MatAutocompleteTrigger, descendants: true }, { propertyName: "autocomplete", first: true, predicate: MatAutocomplete, descendants: true }, { propertyName: "inputRef", first: true, predicate: ["searchInput"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(searchInput.value)\"\n />\n <button\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary hover:bg-gray-50 absolute transition-all duration-100 clear-btn inset-y-0\"\n *ngIf=\"searchInput.value\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <mat-icon class=\"material-symbols-outlined\">close</mat-icon>\n </button>\n <button\n type=\"button\"\n class=\"text-primary bg-white hover:text-primary-darkest hover:bg-gray-100 border-gray-300 hover:border-gray-500 absolute transition-all duration-100 search-btn rounded-r inset-y-0 right-0\"\n aria-label=\"Trigger search\"\n (click)=\"handleClickSearch()\"\n >\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n </button>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n class=\"absolute mt-2 w-full top-[100%] left-0\"\n icon=\"error_outline\"\n position=\"top\"\n type=\"warning\"\n >\n <span translate>search.autocomplete.error</span>\n {{ error }}\n </gn-ui-popup-alert>\n</div>\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"handleSelection($event)\"\n [displayWith]=\"displayWithFn\"\n>\n <mat-option\n *ngFor=\"let suggestion of suggestions$ | async\"\n [value]=\"suggestion\"\n class=\"p-2 suggestion\"\n >\n {{ displayWithFn(suggestion) }}\n </mat-option>\n</mat-autocomplete>\n", styles: [":host{--input-height: 3.5em}.clear-btn{width:var(--input-height);right:var(--input-height);height:100%}.search-btn{width:var(--input-height);height:100%;border-left-width:.1em}mat-icon{width:100%;height:100%;padding:.65em;font-size:1.5em}input{height:var(--input-height);padding:1.05em;padding-right:calc(2 * var(--input-height))}input:placeholder-shown{text-overflow:ellipsis}.mat-mdc-option.suggestion.mat-mdc-option-active{background-color:var(--color-primary-lightest)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25222
25317
|
}
|
|
25223
25318
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AutocompleteComponent, decorators: [{
|
|
25224
25319
|
type: Component,
|
|
25225
|
-
args: [{ selector: 'gn-ui-autocomplete', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(
|
|
25320
|
+
args: [{ selector: 'gn-ui-autocomplete', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"relative\">\n <input\n #searchInput\n type=\"text\"\n class=\"appearance-none focus:outline-white focus:outline-2 focus:outline-dotted focus:outline-offset-2 leading-tight rounded w-full text-black shadow-xl focus:shadow-[0_0_24px_0_rgba(21,40,184,0.09)]\"\n [placeholder]=\"placeholder\"\n [formControl]=\"control\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"handleEnter(searchInput.value)\"\n />\n <button\n type=\"button\"\n class=\"text-primary-lightest hover:text-primary hover:bg-gray-50 absolute transition-all duration-100 clear-btn inset-y-0\"\n *ngIf=\"searchInput.value\"\n aria-label=\"Clear\"\n (click)=\"clear()\"\n >\n <mat-icon class=\"material-symbols-outlined\">close</mat-icon>\n </button>\n <button\n type=\"button\"\n class=\"text-primary bg-white hover:text-primary-darkest hover:bg-gray-100 border-gray-300 hover:border-gray-500 absolute transition-all duration-100 search-btn rounded-r inset-y-0 right-0\"\n aria-label=\"Trigger search\"\n (click)=\"handleClickSearch()\"\n >\n <mat-icon class=\"material-symbols-outlined\">search</mat-icon>\n </button>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n class=\"absolute mt-2 w-full top-[100%] left-0\"\n icon=\"error_outline\"\n position=\"top\"\n type=\"warning\"\n >\n <span translate>search.autocomplete.error</span>\n {{ error }}\n </gn-ui-popup-alert>\n</div>\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"handleSelection($event)\"\n [displayWith]=\"displayWithFn\"\n>\n <mat-option\n *ngFor=\"let suggestion of suggestions$ | async\"\n [value]=\"suggestion\"\n class=\"p-2 suggestion\"\n >\n {{ displayWithFn(suggestion) }}\n </mat-option>\n</mat-autocomplete>\n", styles: [":host{--input-height: 3.5em}.clear-btn{width:var(--input-height);right:var(--input-height);height:100%}.search-btn{width:var(--input-height);height:100%;border-left-width:.1em}mat-icon{width:100%;height:100%;padding:.65em;font-size:1.5em}input{height:var(--input-height);padding:1.05em;padding-right:calc(2 * var(--input-height))}input:placeholder-shown{text-overflow:ellipsis}.mat-mdc-option.suggestion.mat-mdc-option-active{background-color:var(--color-primary-lightest)}\n"] }]
|
|
25226
25321
|
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { placeholder: [{
|
|
25227
25322
|
type: Input
|
|
25228
25323
|
}], action: [{
|
|
@@ -25387,11 +25482,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25387
25482
|
|
|
25388
25483
|
class NavigationButtonComponent {
|
|
25389
25484
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25390
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NavigationButtonComponent, selector: "gn-ui-navigation-button", inputs: { label: "label", icon: "icon" }, ngImport: i0, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30
|
|
25485
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NavigationButtonComponent, selector: "gn-ui-navigation-button", inputs: { label: "label", icon: "icon" }, ngImport: i0, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 rounded content-center\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle w-[18px]\">{{\n icon\n }}</mat-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n", styles: ["button{color:var(--navigation-button-color, --color-background)}\n"], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25391
25486
|
}
|
|
25392
25487
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, decorators: [{
|
|
25393
25488
|
type: Component,
|
|
25394
|
-
args: [{ selector: 'gn-ui-navigation-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30
|
|
25489
|
+
args: [{ selector: 'gn-ui-navigation-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 rounded content-center\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle w-[18px]\">{{\n icon\n }}</mat-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n", styles: ["button{color:var(--navigation-button-color, --color-background)}\n"] }]
|
|
25395
25490
|
}], propDecorators: { label: [{
|
|
25396
25491
|
type: Input
|
|
25397
25492
|
}], icon: [{
|
|
@@ -25598,11 +25693,11 @@ class CheckboxComponent {
|
|
|
25598
25693
|
this.changed.emit(this.checked);
|
|
25599
25694
|
}
|
|
25600
25695
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25601
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: { type: "type", checked: "checked", indeterminate: "indeterminate" }, outputs: { changed: "changed" }, ngImport: i0, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n
|
|
25696
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: { type: "type", checked: "checked", indeterminate: "indeterminate" }, outputs: { changed: "changed" }, ngImport: i0, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n [checked]=\"checked\"\n [indeterminate]=\"indeterminate\"\n (click)=\"handleClick($event)\"\n></mat-checkbox>\n", styles: [".default{--gn-ui-checkbox-color: var(--color-main)}.secondary{--gn-ui-checkbox-color: var(--color-secondary)}.primary{--gn-ui-checkbox-color: var(--color-primary)}mat-checkbox{--mdc-checkbox-selected-focus-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-focus-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-state-layer-color: var( --gn-ui-checkbox-color )}\n"], dependencies: [{ kind: "component", type: i1$7.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25602
25697
|
}
|
|
25603
25698
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CheckboxComponent, decorators: [{
|
|
25604
25699
|
type: Component,
|
|
25605
|
-
args: [{ selector: 'gn-ui-checkbox', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n
|
|
25700
|
+
args: [{ selector: 'gn-ui-checkbox', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-checkbox\n class=\"cursor-pointer\"\n [class]=\"classList\"\n [checked]=\"checked\"\n [indeterminate]=\"indeterminate\"\n (click)=\"handleClick($event)\"\n></mat-checkbox>\n", styles: [".default{--gn-ui-checkbox-color: var(--color-main)}.secondary{--gn-ui-checkbox-color: var(--color-secondary)}.primary{--gn-ui-checkbox-color: var(--color-primary)}mat-checkbox{--mdc-checkbox-selected-focus-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-icon-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-focus-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-hover-state-layer-color: var(--gn-ui-checkbox-color);--mdc-checkbox-selected-pressed-state-layer-color: var( --gn-ui-checkbox-color )}\n"] }]
|
|
25606
25701
|
}], propDecorators: { type: [{
|
|
25607
25702
|
type: Input
|
|
25608
25703
|
}], checked: [{
|
|
@@ -25657,14 +25752,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25657
25752
|
args: [{ selector: 'gn-ui-date-range-picker', template: "<div\n class=\"flex items-center justify-center w-64 h-11 rounded-lg border border-gray-300 bg-white\"\n>\n <div class=\"w-48 flex justify-between\">\n <mat-date-range-input [rangePicker]=\"picker\" class=\"w-full\">\n <input\n class=\"w-24 text-black font-basierCircle text-base font-medium text-center\"\n matStartDate\n placeholder=\"Start date\"\n (dateInput)=\"startDateSelected($event)\"\n />\n <input\n class=\"w-24 text-black font-basierCircle text-base font-medium text-center\"\n matEndDate\n placeholder=\"End date\"\n (dateInput)=\"endDateSelected($event)\"\n />\n </mat-date-range-input>\n </div>\n <mat-datepicker-toggle matSuffix [for]=\"picker\">\n <mat-icon>calendar_today</mat-icon>\n </mat-datepicker-toggle>\n <mat-date-range-picker #picker></mat-date-range-picker>\n</div>\n", styles: ["mat-datepicker-toggle{@apply text-primary;}\n"] }]
|
|
25658
25753
|
}] });
|
|
25659
25754
|
|
|
25755
|
+
class EditableLabelDirective {
|
|
25756
|
+
constructor(el, renderer) {
|
|
25757
|
+
this.el = el;
|
|
25758
|
+
this.renderer = renderer;
|
|
25759
|
+
this.editableLabelChanged = new EventEmitter();
|
|
25760
|
+
}
|
|
25761
|
+
ngAfterViewInit() {
|
|
25762
|
+
if (this.gnUiEditableLabel !== false) {
|
|
25763
|
+
const appendedInput = this.renderer.createElement('input');
|
|
25764
|
+
this.renderer.setStyle(appendedInput, 'background', 'inherit');
|
|
25765
|
+
this.renderer.setStyle(appendedInput, 'color', 'inherit');
|
|
25766
|
+
this.renderer.setStyle(appendedInput, 'font', 'inherit');
|
|
25767
|
+
this.renderer.setStyle(appendedInput, 'border', 'inherit');
|
|
25768
|
+
this.renderer.setStyle(appendedInput, 'width', '100%');
|
|
25769
|
+
this.renderer.setStyle(appendedInput, 'padding', 'inherit');
|
|
25770
|
+
this.renderer.setStyle(appendedInput, 'margin', '0');
|
|
25771
|
+
this.renderer.setStyle(appendedInput, 'height', 'inherit');
|
|
25772
|
+
this.renderer.setStyle(appendedInput, 'line-height', 'inherit');
|
|
25773
|
+
this.renderer.setStyle(appendedInput, 'text-decoration', 'inherit');
|
|
25774
|
+
const hostContent = this.el.nativeElement.textContent || '';
|
|
25775
|
+
const formattedContent = hostContent.replace(/\s+/g, ' ').trim();
|
|
25776
|
+
this.renderer.setProperty(appendedInput, 'value', formattedContent);
|
|
25777
|
+
this.renderer.setProperty(this.el.nativeElement, 'innerHTML', '');
|
|
25778
|
+
this.renderer.listen(appendedInput, 'input', (event) => {
|
|
25779
|
+
this.editableLabelChanged.emit(event.target.value);
|
|
25780
|
+
});
|
|
25781
|
+
this.renderer.appendChild(this.el.nativeElement, appendedInput);
|
|
25782
|
+
}
|
|
25783
|
+
}
|
|
25784
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditableLabelDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
25785
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.7", type: EditableLabelDirective, isStandalone: true, selector: "[gnUiEditableLabel]", inputs: { gnUiEditableLabel: "gnUiEditableLabel" }, outputs: { editableLabelChanged: "editableLabelChanged" }, ngImport: i0 }); }
|
|
25786
|
+
}
|
|
25787
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditableLabelDirective, decorators: [{
|
|
25788
|
+
type: Directive,
|
|
25789
|
+
args: [{
|
|
25790
|
+
selector: '[gnUiEditableLabel]',
|
|
25791
|
+
standalone: true,
|
|
25792
|
+
}]
|
|
25793
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }]; }, propDecorators: { editableLabelChanged: [{
|
|
25794
|
+
type: Output
|
|
25795
|
+
}], gnUiEditableLabel: [{
|
|
25796
|
+
type: Input
|
|
25797
|
+
}] } });
|
|
25798
|
+
|
|
25660
25799
|
class UiInputsModule {
|
|
25661
25800
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
25662
25801
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, declarations: [DropdownSelectorComponent,
|
|
25663
25802
|
AutocompleteComponent,
|
|
25664
|
-
ButtonComponent,
|
|
25665
25803
|
TextInputComponent,
|
|
25666
25804
|
DragAndDropFileInputComponent,
|
|
25667
|
-
TextAreaComponent,
|
|
25668
25805
|
ChipsInputComponent,
|
|
25669
25806
|
NavigationButtonComponent,
|
|
25670
25807
|
StarToggleComponent,
|
|
@@ -25696,7 +25833,10 @@ class UiInputsModule {
|
|
|
25696
25833
|
MatFormFieldModule,
|
|
25697
25834
|
MatInputModule,
|
|
25698
25835
|
MatDatepickerModule,
|
|
25699
|
-
MatNativeDateModule
|
|
25836
|
+
MatNativeDateModule,
|
|
25837
|
+
EditableLabelDirective,
|
|
25838
|
+
TextAreaComponent,
|
|
25839
|
+
ButtonComponent], exports: [DropdownSelectorComponent,
|
|
25700
25840
|
AutocompleteComponent,
|
|
25701
25841
|
ButtonComponent,
|
|
25702
25842
|
TextInputComponent,
|
|
@@ -25712,7 +25852,8 @@ class UiInputsModule {
|
|
|
25712
25852
|
CopyTextButtonComponent,
|
|
25713
25853
|
CheckboxComponent,
|
|
25714
25854
|
SearchInputComponent,
|
|
25715
|
-
DateRangePickerComponent
|
|
25855
|
+
DateRangePickerComponent,
|
|
25856
|
+
EditableLabelDirective] }); }
|
|
25716
25857
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, imports: [CommonModule,
|
|
25717
25858
|
TranslateModule.forChild(),
|
|
25718
25859
|
NgxDropzoneModule,
|
|
@@ -25737,10 +25878,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25737
25878
|
declarations: [
|
|
25738
25879
|
DropdownSelectorComponent,
|
|
25739
25880
|
AutocompleteComponent,
|
|
25740
|
-
ButtonComponent,
|
|
25741
25881
|
TextInputComponent,
|
|
25742
25882
|
DragAndDropFileInputComponent,
|
|
25743
|
-
TextAreaComponent,
|
|
25744
25883
|
ChipsInputComponent,
|
|
25745
25884
|
NavigationButtonComponent,
|
|
25746
25885
|
StarToggleComponent,
|
|
@@ -25778,6 +25917,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25778
25917
|
MatInputModule,
|
|
25779
25918
|
MatDatepickerModule,
|
|
25780
25919
|
MatNativeDateModule,
|
|
25920
|
+
EditableLabelDirective,
|
|
25921
|
+
TextAreaComponent,
|
|
25922
|
+
ButtonComponent,
|
|
25781
25923
|
],
|
|
25782
25924
|
exports: [
|
|
25783
25925
|
DropdownSelectorComponent,
|
|
@@ -25797,6 +25939,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25797
25939
|
CheckboxComponent,
|
|
25798
25940
|
SearchInputComponent,
|
|
25799
25941
|
DateRangePickerComponent,
|
|
25942
|
+
EditableLabelDirective,
|
|
25800
25943
|
],
|
|
25801
25944
|
}]
|
|
25802
25945
|
}] });
|
|
@@ -25896,7 +26039,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
25896
26039
|
|
|
25897
26040
|
const DEFAULT_PARAMS = {
|
|
25898
26041
|
OFFSET: '',
|
|
25899
|
-
LIMIT: '',
|
|
26042
|
+
LIMIT: '-1',
|
|
25900
26043
|
FORMAT: 'json',
|
|
25901
26044
|
};
|
|
25902
26045
|
class RecordApiFormComponent {
|
|
@@ -25925,6 +26068,8 @@ class RecordApiFormComponent {
|
|
|
25925
26068
|
}
|
|
25926
26069
|
return outputUrl;
|
|
25927
26070
|
}));
|
|
26071
|
+
this.noLimitChecked$ = this.limit$.pipe(map$2((limit) => limit === '-1' || limit === ''));
|
|
26072
|
+
this.displayLimit$ = this.limit$.pipe(map$2((limit) => (limit !== '-1' ? limit : '')));
|
|
25928
26073
|
}
|
|
25929
26074
|
set apiLink(value) {
|
|
25930
26075
|
this.apiBaseUrl = value ? value.url.href : undefined;
|
|
@@ -25934,10 +26079,11 @@ class RecordApiFormComponent {
|
|
|
25934
26079
|
this.offset$.next(value);
|
|
25935
26080
|
}
|
|
25936
26081
|
setLimit(value) {
|
|
25937
|
-
|
|
26082
|
+
const newLimit = value === '' ? '-1' : value;
|
|
26083
|
+
this.limit$.next(newLimit);
|
|
25938
26084
|
}
|
|
25939
26085
|
setFormat(value) {
|
|
25940
|
-
this.format$.next(value);
|
|
26086
|
+
this.format$.next(String(value));
|
|
25941
26087
|
}
|
|
25942
26088
|
resetUrl() {
|
|
25943
26089
|
this.offset$.next(DEFAULT_PARAMS.OFFSET);
|
|
@@ -25945,11 +26091,11 @@ class RecordApiFormComponent {
|
|
|
25945
26091
|
this.format$.next(DEFAULT_PARAMS.FORMAT);
|
|
25946
26092
|
}
|
|
25947
26093
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25948
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordApiFormComponent, selector: "gn-ui-record-api-form", inputs: { apiLink: "apiLink" }, ngImport: i0, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (
|
|
26094
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordApiFormComponent, selector: "gn-ui-record-api-form", inputs: { apiLink: "apiLink" }, ngImport: i0, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (valueChange)=\"setLimit($event)\"\n [value]=\"displayLimit$ | async\"\n hint=\"\"\n >\n </gn-ui-text-input>\n <div class=\"flex items-center\">\n <input\n class=\"mr-2 cursor-pointer\"\n type=\"checkbox\"\n [checked]=\"noLimitChecked$ | async\"\n (change)=\"setLimit('-1')\"\n />\n <span class=\"text-sm\" translate\n >record.metadata.api.form.limit.all</span\n >\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.offset</p>\n <gn-ui-text-input\n class=\"w-20\"\n [value]=\"offset$ | async\"\n (valueChange)=\"setOffset($event)\"\n hint=\"\"\n >\n </gn-ui-text-input>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.type</p>\n <gn-ui-dropdown-selector\n #dropdown\n [title]=\"''\"\n extraBtnClass=\"secondary min-w-full !w-40 !text-black\"\n [showTitle]=\"false\"\n class=\"text-black\"\n [choices]=\"formatsList\"\n (selectValue)=\"setFormat($event)\"\n [selected]=\"format$ | async\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 mb-3\">\n <div class=\"text-sm text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.customUrl\n </div>\n <div class=\"bg-white rounded-lg\">\n <gn-ui-copy-text-button\n [text]=\"apiQueryUrl$ | async\"\n ></gn-ui-copy-text-button>\n </div>\n </div>\n</div>\n", styles: [":host ::ng-deep input{color:#000;opacity:1}:host ::ng-deep gn-ui-copy-text-button input[type=text]{color:#000;background-color:#fff}:host ::ng-deep gn-ui-copy-text-button button,host ::ng-deep gn-ui-copy-text-button button:hover{background-color:var(--color-secondary)!important}:host ::ng-deep gn-ui-copy-text-button button mat-icon{color:#fff!important;opacity:1!important}:host ::ng-deep gn-ui-copy-text-button button:hover mat-icon{color:#d3d3d3!important}\n"], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "hint", "required"], outputs: ["valueChange"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25949
26095
|
}
|
|
25950
26096
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, decorators: [{
|
|
25951
26097
|
type: Component,
|
|
25952
|
-
args: [{ selector: 'gn-ui-record-api-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (
|
|
26098
|
+
args: [{ selector: 'gn-ui-record-api-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (valueChange)=\"setLimit($event)\"\n [value]=\"displayLimit$ | async\"\n hint=\"\"\n >\n </gn-ui-text-input>\n <div class=\"flex items-center\">\n <input\n class=\"mr-2 cursor-pointer\"\n type=\"checkbox\"\n [checked]=\"noLimitChecked$ | async\"\n (change)=\"setLimit('-1')\"\n />\n <span class=\"text-sm\" translate\n >record.metadata.api.form.limit.all</span\n >\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.offset</p>\n <gn-ui-text-input\n class=\"w-20\"\n [value]=\"offset$ | async\"\n (valueChange)=\"setOffset($event)\"\n hint=\"\"\n >\n </gn-ui-text-input>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.type</p>\n <gn-ui-dropdown-selector\n #dropdown\n [title]=\"''\"\n extraBtnClass=\"secondary min-w-full !w-40 !text-black\"\n [showTitle]=\"false\"\n class=\"text-black\"\n [choices]=\"formatsList\"\n (selectValue)=\"setFormat($event)\"\n [selected]=\"format$ | async\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 mb-3\">\n <div class=\"text-sm text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.customUrl\n </div>\n <div class=\"bg-white rounded-lg\">\n <gn-ui-copy-text-button\n [text]=\"apiQueryUrl$ | async\"\n ></gn-ui-copy-text-button>\n </div>\n </div>\n</div>\n", styles: [":host ::ng-deep input{color:#000;opacity:1}:host ::ng-deep gn-ui-copy-text-button input[type=text]{color:#000;background-color:#fff}:host ::ng-deep gn-ui-copy-text-button button,host ::ng-deep gn-ui-copy-text-button button:hover{background-color:var(--color-secondary)!important}:host ::ng-deep gn-ui-copy-text-button button mat-icon{color:#fff!important;opacity:1!important}:host ::ng-deep gn-ui-copy-text-button button:hover mat-icon{color:#d3d3d3!important}\n"] }]
|
|
25953
26099
|
}], propDecorators: { apiLink: [{
|
|
25954
26100
|
type: Input
|
|
25955
26101
|
}] } });
|
|
@@ -25962,11 +26108,11 @@ class ImageOverlayPreviewComponent {
|
|
|
25962
26108
|
basicLightbox.create(`<img src="${src}"/>`).show();
|
|
25963
26109
|
}
|
|
25964
26110
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageOverlayPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25965
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ImageOverlayPreviewComponent, selector: "gn-ui-image-overlay-preview", inputs: { imageUrl: "imageUrl" }, outputs: { isPlaceholderShown: "isPlaceholderShown" }, ngImport: i0, template: "<gn-ui-content-ghost\n [showContent]=\"imageUrl !== undefined\"\n ghostClass=\"h-
|
|
26111
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ImageOverlayPreviewComponent, selector: "gn-ui-image-overlay-preview", inputs: { imageUrl: "imageUrl" }, outputs: { isPlaceholderShown: "isPlaceholderShown" }, ngImport: i0, template: "<gn-ui-content-ghost\n [showContent]=\"imageUrl !== undefined\"\n ghostClass=\"h-48 mb-3\"\n>\n <div\n *ngIf=\"imageUrl\"\n [showContent]=\"imageUrl !== undefined\"\n data-cy=\"record-thumbnail\"\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 group-hover:shadow-xl group-hover:border-0 h-48 mb-3\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"imageUrl\"\n fit=\"cover\"\n (placeholderShown)=\"isPlaceholderShown.emit($event)\"\n ></gn-ui-thumbnail>\n <div class=\"relative\">\n <gn-ui-button\n class=\"absolute bottom-0 right-0 z-10 mr-2 mb-2\"\n [type]=\"'outline'\"\n [extraClass]=\"'!py-2 !px-0'\"\n (buttonClick)=\"openLightbox(imageUrl)\"\n >\n <mat-icon class=\"material-symbols-outlined font-extralight\"\n >zoom_out_map</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n</gn-ui-content-ghost>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }] }); }
|
|
25966
26112
|
}
|
|
25967
26113
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageOverlayPreviewComponent, decorators: [{
|
|
25968
26114
|
type: Component,
|
|
25969
|
-
args: [{ selector: 'gn-ui-image-overlay-preview', template: "<gn-ui-content-ghost\n [showContent]=\"imageUrl !== undefined\"\n ghostClass=\"h-
|
|
26115
|
+
args: [{ selector: 'gn-ui-image-overlay-preview', template: "<gn-ui-content-ghost\n [showContent]=\"imageUrl !== undefined\"\n ghostClass=\"h-48 mb-3\"\n>\n <div\n *ngIf=\"imageUrl\"\n [showContent]=\"imageUrl !== undefined\"\n data-cy=\"record-thumbnail\"\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 group-hover:shadow-xl group-hover:border-0 h-48 mb-3\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"imageUrl\"\n fit=\"cover\"\n (placeholderShown)=\"isPlaceholderShown.emit($event)\"\n ></gn-ui-thumbnail>\n <div class=\"relative\">\n <gn-ui-button\n class=\"absolute bottom-0 right-0 z-10 mr-2 mb-2\"\n [type]=\"'outline'\"\n [extraClass]=\"'!py-2 !px-0'\"\n (buttonClick)=\"openLightbox(imageUrl)\"\n >\n <mat-icon class=\"material-symbols-outlined font-extralight\"\n >zoom_out_map</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n</gn-ui-content-ghost>\n" }]
|
|
25970
26116
|
}], propDecorators: { imageUrl: [{
|
|
25971
26117
|
type: Input
|
|
25972
26118
|
}], isPlaceholderShown: [{
|
|
@@ -25995,7 +26141,6 @@ class UiElementsModule {
|
|
|
25995
26141
|
PaginationButtonsComponent,
|
|
25996
26142
|
MaxLinesComponent,
|
|
25997
26143
|
RecordApiFormComponent,
|
|
25998
|
-
MarkdownParserComponent,
|
|
25999
26144
|
ImageOverlayPreviewComponent], imports: [CommonModule,
|
|
26000
26145
|
MatIconModule,
|
|
26001
26146
|
MatTooltipModule,
|
|
@@ -26004,7 +26149,8 @@ class UiElementsModule {
|
|
|
26004
26149
|
RouterModule,
|
|
26005
26150
|
UiInputsModule,
|
|
26006
26151
|
FormsModule,
|
|
26007
|
-
NgOptimizedImage
|
|
26152
|
+
NgOptimizedImage,
|
|
26153
|
+
MarkdownParserComponent], exports: [MetadataInfoComponent,
|
|
26008
26154
|
ContentGhostComponent,
|
|
26009
26155
|
DownloadItemComponent,
|
|
26010
26156
|
DownloadsListComponent,
|
|
@@ -26021,6 +26167,7 @@ class UiElementsModule {
|
|
|
26021
26167
|
AvatarComponent,
|
|
26022
26168
|
UserPreviewComponent,
|
|
26023
26169
|
PaginationButtonsComponent,
|
|
26170
|
+
MaxLinesComponent,
|
|
26024
26171
|
RecordApiFormComponent,
|
|
26025
26172
|
MarkdownParserComponent,
|
|
26026
26173
|
ImageOverlayPreviewComponent] }); }
|
|
@@ -26050,6 +26197,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26050
26197
|
UiInputsModule,
|
|
26051
26198
|
FormsModule,
|
|
26052
26199
|
NgOptimizedImage,
|
|
26200
|
+
MarkdownParserComponent,
|
|
26053
26201
|
],
|
|
26054
26202
|
declarations: [
|
|
26055
26203
|
MetadataInfoComponent,
|
|
@@ -26072,7 +26220,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26072
26220
|
PaginationButtonsComponent,
|
|
26073
26221
|
MaxLinesComponent,
|
|
26074
26222
|
RecordApiFormComponent,
|
|
26075
|
-
MarkdownParserComponent,
|
|
26076
26223
|
ImageOverlayPreviewComponent,
|
|
26077
26224
|
],
|
|
26078
26225
|
exports: [
|
|
@@ -26093,6 +26240,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26093
26240
|
AvatarComponent,
|
|
26094
26241
|
UserPreviewComponent,
|
|
26095
26242
|
PaginationButtonsComponent,
|
|
26243
|
+
MaxLinesComponent,
|
|
26096
26244
|
RecordApiFormComponent,
|
|
26097
26245
|
MarkdownParserComponent,
|
|
26098
26246
|
ImageOverlayPreviewComponent,
|
|
@@ -26100,143 +26248,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26100
26248
|
}]
|
|
26101
26249
|
}] });
|
|
26102
26250
|
|
|
26103
|
-
class RecordTableComponent {
|
|
26104
|
-
constructor() {
|
|
26105
|
-
this.selectedRecords = [];
|
|
26106
|
-
this.records = [];
|
|
26107
|
-
this.recordClick = new EventEmitter();
|
|
26108
|
-
this.recordsSelect = new EventEmitter();
|
|
26109
|
-
this.recordsDeselect = new EventEmitter();
|
|
26110
|
-
this.sortByChange = new EventEmitter();
|
|
26111
|
-
}
|
|
26112
|
-
dateToString(date) {
|
|
26113
|
-
return date?.toLocaleDateString(undefined, {
|
|
26114
|
-
year: 'numeric',
|
|
26115
|
-
month: 'long',
|
|
26116
|
-
day: 'numeric',
|
|
26117
|
-
timeZone: 'UTC',
|
|
26118
|
-
});
|
|
26119
|
-
}
|
|
26120
|
-
getStatus(isPublishedToAll) {
|
|
26121
|
-
return isPublishedToAll ? 'published' : 'not published';
|
|
26122
|
-
}
|
|
26123
|
-
formatUserInfo(userInfo) {
|
|
26124
|
-
const infos = (typeof userInfo === 'string' ? userInfo : '').split('|');
|
|
26125
|
-
if (infos && infos.length === 4) {
|
|
26126
|
-
return `${infos[2]} ${infos[1]}`;
|
|
26127
|
-
}
|
|
26128
|
-
return undefined;
|
|
26129
|
-
}
|
|
26130
|
-
getRecordFormats(record) {
|
|
26131
|
-
if (record.kind === 'service' || !('distributions' in record)) {
|
|
26132
|
-
return [];
|
|
26133
|
-
}
|
|
26134
|
-
const formats = Array.from(new Set(record.distributions.map((distribution) => getFileFormat(distribution)))).filter((format) => !!format);
|
|
26135
|
-
formats.sort((a, b) => getFormatPriority(b) - getFormatPriority(a));
|
|
26136
|
-
return formats;
|
|
26137
|
-
}
|
|
26138
|
-
getBadgeColor(format) {
|
|
26139
|
-
return getBadgeColor(format);
|
|
26140
|
-
}
|
|
26141
|
-
getOrderForColumn(col) {
|
|
26142
|
-
if (!this.sortBy) {
|
|
26143
|
-
return null;
|
|
26144
|
-
}
|
|
26145
|
-
let order = null;
|
|
26146
|
-
const sortedArray = Array.isArray(this.sortBy[0])
|
|
26147
|
-
? this.sortBy
|
|
26148
|
-
: [this.sortBy];
|
|
26149
|
-
sortedArray.forEach((sortedCol) => {
|
|
26150
|
-
if (sortedCol[1] === col) {
|
|
26151
|
-
order = sortedCol[0];
|
|
26152
|
-
}
|
|
26153
|
-
});
|
|
26154
|
-
return order;
|
|
26155
|
-
}
|
|
26156
|
-
setSortBy(col) {
|
|
26157
|
-
const sortOrder = this.getOrderForColumn(col);
|
|
26158
|
-
let newOrder;
|
|
26159
|
-
if (sortOrder) {
|
|
26160
|
-
newOrder = sortOrder === 'asc' ? 'desc' : 'asc';
|
|
26161
|
-
}
|
|
26162
|
-
else {
|
|
26163
|
-
newOrder = 'asc';
|
|
26164
|
-
}
|
|
26165
|
-
this.sortByChange.emit([newOrder, col]);
|
|
26166
|
-
this.sortBy = [newOrder, col];
|
|
26167
|
-
}
|
|
26168
|
-
isSortedBy(col, order) {
|
|
26169
|
-
const sortOrder = this.getOrderForColumn(col);
|
|
26170
|
-
return sortOrder === order;
|
|
26171
|
-
}
|
|
26172
|
-
isChecked(record) {
|
|
26173
|
-
if (this.selectedRecords.includes(record.uniqueIdentifier)) {
|
|
26174
|
-
return true;
|
|
26175
|
-
}
|
|
26176
|
-
return false;
|
|
26177
|
-
}
|
|
26178
|
-
handleRecordSelectedChange(selected, record) {
|
|
26179
|
-
if (!selected) {
|
|
26180
|
-
this.recordsDeselect.emit([record]);
|
|
26181
|
-
this.selectedRecords = this.selectedRecords.filter((val) => val !== record.uniqueIdentifier);
|
|
26182
|
-
}
|
|
26183
|
-
else {
|
|
26184
|
-
this.recordsSelect.emit([record]);
|
|
26185
|
-
this.selectedRecords.push(record.uniqueIdentifier);
|
|
26186
|
-
}
|
|
26187
|
-
}
|
|
26188
|
-
selectAll() {
|
|
26189
|
-
if (this.isAllSelected()) {
|
|
26190
|
-
this.recordsDeselect.emit(this.records);
|
|
26191
|
-
this.selectedRecords = [];
|
|
26192
|
-
}
|
|
26193
|
-
else {
|
|
26194
|
-
this.recordsSelect.emit(this.records);
|
|
26195
|
-
this.selectedRecords = this.records.map((record) => {
|
|
26196
|
-
return record.uniqueIdentifier;
|
|
26197
|
-
});
|
|
26198
|
-
}
|
|
26199
|
-
}
|
|
26200
|
-
isAllSelected() {
|
|
26201
|
-
if (this.selectedRecords.length === this.records.length) {
|
|
26202
|
-
const allRecords = this.records.filter((record) => this.selectedRecords.includes(record.uniqueIdentifier));
|
|
26203
|
-
if (allRecords.length === this.records.length) {
|
|
26204
|
-
return true;
|
|
26205
|
-
}
|
|
26206
|
-
}
|
|
26207
|
-
return false;
|
|
26208
|
-
}
|
|
26209
|
-
isSomeSelected() {
|
|
26210
|
-
if (this.selectedRecords.length > 0 &&
|
|
26211
|
-
this.selectedRecords.length < this.records.length) {
|
|
26212
|
-
return true;
|
|
26213
|
-
}
|
|
26214
|
-
return false;
|
|
26215
|
-
}
|
|
26216
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
26217
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordTableComponent, selector: "gn-ui-record-table", inputs: { selectedRecords: "selectedRecords", records: "records", totalHits: "totalHits", sortBy: "sortBy" }, outputs: { recordClick: "recordClick", recordsSelect: "recordsSelect", recordsDeselect: "recordsDeselect", sortByChange: "sortByChange" }, ngImport: i0, template: "<div>\n <div *ngIf=\"totalHits\" class=\"\">\n <div class=\"flex records-information\">\n <div\n translate\n class=\"my-8 ml-4 block text-gray-800\"\n [translateParams]=\"{\n displayed: records.length,\n hits: totalHits\n }\"\n >\n results.records.hits.displayedOn\n </div>\n <div\n *ngIf=\"selectedRecords.length > 0\"\n class=\"my-8 ml-6 block text-gray-400 selected-records\"\n translate\n [translateParams]=\"{ amount: selectedRecords.length }\"\n >\n results.records.hits.selected\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(3,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userDetail</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.username</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userEmail</span>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordSelect.emit(record)\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col text-16\">\n {{ record.name }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.username }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.emailAddresses[0] }}\n </div>\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(6,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"!records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"flex justify-center items-center\">\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"selectAll()\"\n type=\"default\"\n >\n </gn-ui-checkbox>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1 text-left\"\n (buttonClick)=\"setSortBy('resourceTitleObject.default.keyword')\"\n >\n <span translate>record.metadata.title</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div translate=\"\" class=\"record-table-header text-gray-400 flex gap-1\">\n record.metadata.formats\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('recordOwner')\"\n >\n <span translate>record.metadata.author</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('changeDate')\"\n >\n <span translate>record.metadata.updatedOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('createDate')\"\n >\n <span translate>record.metadata.createdOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordSelect.emit(record)\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col\">\n <gn-ui-checkbox\n [checked]=\"isChecked(record)\"\n (changed)=\"handleRecordSelectedChange($event, record)\"\n type=\"default\"\n ></gn-ui-checkbox>\n </div>\n <div\n [title]=\"record.title\"\n class=\"record-table-col text-16 self-center\"\n >\n {{ record.title }}\n </div>\n <div\n class=\"record-table-col flex justify-start items-center gap-2 text-16\"\n [title]=\"formats.join(', ')\"\n *ngIf=\"getRecordFormats(record) as formats\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div\n class=\"flex-shrink-0\"\n *ngIf=\"!record.name && formats.slice(2).length > 0\"\n >\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div class=\"record-table-col flex items-center gap-2 text-16\">\n <mat-icon class=\"material-symbols-outlined\"> person </mat-icon>\n <span class=\"\">{{ formatUserInfo(record.extras?.ownerInfo) }}</span>\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordUpdated) }}\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordCreated) }}\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".record-table-col{@apply px-5 py-3 items-center truncate;}.record-table-header{@apply record-table-col capitalize;}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
|
|
26218
|
-
}
|
|
26219
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordTableComponent, decorators: [{
|
|
26220
|
-
type: Component,
|
|
26221
|
-
args: [{ selector: 'gn-ui-record-table', template: "<div>\n <div *ngIf=\"totalHits\" class=\"\">\n <div class=\"flex records-information\">\n <div\n translate\n class=\"my-8 ml-4 block text-gray-800\"\n [translateParams]=\"{\n displayed: records.length,\n hits: totalHits\n }\"\n >\n results.records.hits.displayedOn\n </div>\n <div\n *ngIf=\"selectedRecords.length > 0\"\n class=\"my-8 ml-6 block text-gray-400 selected-records\"\n translate\n [translateParams]=\"{ amount: selectedRecords.length }\"\n >\n results.records.hits.selected\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(3,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userDetail</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.username</span>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <span translate>dashboard.records.userEmail</span>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordSelect.emit(record)\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col text-16\">\n {{ record.name }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.username }}\n </div>\n <div class=\"record-table-col text-16\">\n {{ record.emailAddresses[0] }}\n </div>\n </div>\n </div>\n\n <div\n class=\"grid grid-cols-[repeat(6,minmax(0,max-content))] gap-x-4 gap-y-1\"\n *ngIf=\"!records[0].name\"\n >\n <div class=\"contents text-sm\">\n <div class=\"flex justify-center items-center\">\n <gn-ui-checkbox\n [checked]=\"isAllSelected()\"\n [indeterminate]=\"isSomeSelected()\"\n (changed)=\"selectAll()\"\n type=\"default\"\n >\n </gn-ui-checkbox>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1 text-left\"\n (buttonClick)=\"setSortBy('resourceTitleObject.default.keyword')\"\n >\n <span translate>record.metadata.title</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('resourceTitleObject.default.keyword', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div translate=\"\" class=\"record-table-header text-gray-400 flex gap-1\">\n record.metadata.formats\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('recordOwner')\"\n >\n <span translate>record.metadata.author</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('recordOwner', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('changeDate')\"\n >\n <span translate>record.metadata.updatedOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('changeDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n <div class=\"record-table-header text-gray-400 flex gap-1\">\n <gn-ui-button\n type=\"light\"\n extraClass=\"px-3 pl-0 space-x-1\"\n (buttonClick)=\"setSortBy('createDate')\"\n >\n <span translate>record.metadata.createdOn</span>\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'desc')\"\n >\n expand_more</mat-icon\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n *ngIf=\"isSortedBy('createDate', 'asc')\"\n >\n expand_less</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n <div\n class=\"contents hover:text-gray-900 text-gray-800 cursor-pointer\"\n (click)=\"recordSelect.emit(record)\"\n *ngFor=\"let record of records\"\n >\n <div class=\"record-table-col\">\n <gn-ui-checkbox\n [checked]=\"isChecked(record)\"\n (changed)=\"handleRecordSelectedChange($event, record)\"\n type=\"default\"\n ></gn-ui-checkbox>\n </div>\n <div\n [title]=\"record.title\"\n class=\"record-table-col text-16 self-center\"\n >\n {{ record.title }}\n </div>\n <div\n class=\"record-table-col flex justify-start items-center gap-2 text-16\"\n [title]=\"formats.join(', ')\"\n *ngIf=\"getRecordFormats(record) as formats\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div\n class=\"flex-shrink-0\"\n *ngIf=\"!record.name && formats.slice(2).length > 0\"\n >\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div class=\"record-table-col flex items-center gap-2 text-16\">\n <mat-icon class=\"material-symbols-outlined\"> person </mat-icon>\n <span class=\"\">{{ formatUserInfo(record.extras?.ownerInfo) }}</span>\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordUpdated) }}\n </div>\n <div class=\"record-table-col text-16 self-center\">\n {{ dateToString(record.recordCreated) }}\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [".record-table-col{@apply px-5 py-3 items-center truncate;}.record-table-header{@apply record-table-col capitalize;}\n"] }]
|
|
26222
|
-
}], propDecorators: { selectedRecords: [{
|
|
26223
|
-
type: Input
|
|
26224
|
-
}], records: [{
|
|
26225
|
-
type: Input
|
|
26226
|
-
}], totalHits: [{
|
|
26227
|
-
type: Input
|
|
26228
|
-
}], sortBy: [{
|
|
26229
|
-
type: Input
|
|
26230
|
-
}], recordClick: [{
|
|
26231
|
-
type: Output
|
|
26232
|
-
}], recordsSelect: [{
|
|
26233
|
-
type: Output
|
|
26234
|
-
}], recordsDeselect: [{
|
|
26235
|
-
type: Output
|
|
26236
|
-
}], sortByChange: [{
|
|
26237
|
-
type: Output
|
|
26238
|
-
}] } });
|
|
26239
|
-
|
|
26240
26251
|
class UiSearchModule {
|
|
26241
26252
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
26242
26253
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, declarations: [RecordPreviewComponent,
|
|
@@ -26249,8 +26260,7 @@ class UiSearchModule {
|
|
|
26249
26260
|
ResultsHitsNumberComponent,
|
|
26250
26261
|
ResultsListItemComponent,
|
|
26251
26262
|
RecordPreviewFeedComponent,
|
|
26252
|
-
RecordPreviewRowComponent,
|
|
26253
|
-
RecordTableComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
|
|
26263
|
+
RecordPreviewRowComponent], imports: [CommonModule, i1$1.TranslateModule, NgxDropzoneModule,
|
|
26254
26264
|
FacetsModule$1,
|
|
26255
26265
|
FormsModule,
|
|
26256
26266
|
ReactiveFormsModule,
|
|
@@ -26261,7 +26271,8 @@ class UiSearchModule {
|
|
|
26261
26271
|
UiElementsModule,
|
|
26262
26272
|
MatIconModule,
|
|
26263
26273
|
MatCheckboxModule,
|
|
26264
|
-
RouterLink
|
|
26274
|
+
RouterLink,
|
|
26275
|
+
InteractiveTableComponent], exports: [RecordPreviewListComponent,
|
|
26265
26276
|
RecordPreviewCardComponent,
|
|
26266
26277
|
RecordPreviewTextComponent,
|
|
26267
26278
|
RecordPreviewTitleComponent,
|
|
@@ -26271,8 +26282,7 @@ class UiSearchModule {
|
|
|
26271
26282
|
RecordPreviewComponent,
|
|
26272
26283
|
ResultsHitsNumberComponent,
|
|
26273
26284
|
RecordPreviewFeedComponent,
|
|
26274
|
-
RecordPreviewRowComponent
|
|
26275
|
-
RecordTableComponent] }); }
|
|
26285
|
+
RecordPreviewRowComponent] }); }
|
|
26276
26286
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, providers: [
|
|
26277
26287
|
{ provide: RESULTS_LAYOUT_CONFIG, useValue: DEFAULT_RESULTS_LAYOUT_CONFIG },
|
|
26278
26288
|
], imports: [CommonModule,
|
|
@@ -26287,7 +26297,8 @@ class UiSearchModule {
|
|
|
26287
26297
|
UiInputsModule,
|
|
26288
26298
|
UiElementsModule,
|
|
26289
26299
|
MatIconModule,
|
|
26290
|
-
MatCheckboxModule,
|
|
26300
|
+
MatCheckboxModule,
|
|
26301
|
+
InteractiveTableComponent, FacetsModule$1] }); }
|
|
26291
26302
|
}
|
|
26292
26303
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiSearchModule, decorators: [{
|
|
26293
26304
|
type: NgModule,
|
|
@@ -26304,7 +26315,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26304
26315
|
ResultsListItemComponent,
|
|
26305
26316
|
RecordPreviewFeedComponent,
|
|
26306
26317
|
RecordPreviewRowComponent,
|
|
26307
|
-
RecordTableComponent,
|
|
26308
26318
|
],
|
|
26309
26319
|
imports: [
|
|
26310
26320
|
CommonModule,
|
|
@@ -26321,6 +26331,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26321
26331
|
MatIconModule,
|
|
26322
26332
|
MatCheckboxModule,
|
|
26323
26333
|
RouterLink,
|
|
26334
|
+
InteractiveTableComponent,
|
|
26324
26335
|
],
|
|
26325
26336
|
exports: [
|
|
26326
26337
|
RecordPreviewListComponent,
|
|
@@ -26334,7 +26345,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
26334
26345
|
ResultsHitsNumberComponent,
|
|
26335
26346
|
RecordPreviewFeedComponent,
|
|
26336
26347
|
RecordPreviewRowComponent,
|
|
26337
|
-
RecordTableComponent,
|
|
26338
26348
|
],
|
|
26339
26349
|
providers: [
|
|
26340
26350
|
{ provide: RESULTS_LAYOUT_CONFIG, useValue: DEFAULT_RESULTS_LAYOUT_CONFIG },
|
|
@@ -26893,6 +26903,9 @@ const getFavoritesOnly = createSelector(getSearchStateSearch, (state) => state.p
|
|
|
26893
26903
|
const getError = createSelector(getSearchStateSearch, (state) => state.error);
|
|
26894
26904
|
const getSpatialFilterEnabled = createSelector(getSearchStateSearch, (state) => state.params.useSpatialFilter);
|
|
26895
26905
|
|
|
26906
|
+
// this geometry will be used to filter & boost results accordingly
|
|
26907
|
+
const FILTER_GEOMETRY = new InjectionToken('filter-geometry');
|
|
26908
|
+
|
|
26896
26909
|
class SearchFacade {
|
|
26897
26910
|
constructor(store, filterGeometry) {
|
|
26898
26911
|
this.store = store;
|
|
@@ -26997,6 +27010,7 @@ class SearchFacade {
|
|
|
26997
27010
|
this.store.dispatch(new SetFilters({}, this.searchId));
|
|
26998
27011
|
this.store.dispatch(new SetSortBy([], this.searchId));
|
|
26999
27012
|
this.store.dispatch(new SetFavoritesOnly(false, this.searchId));
|
|
27013
|
+
return this;
|
|
27000
27014
|
}
|
|
27001
27015
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchFacade, deps: [{ token: i1$2.Store }, { token: FILTER_GEOMETRY, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
27002
27016
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchFacade }); }
|
|
@@ -27381,8 +27395,11 @@ class FuzzySearchComponent {
|
|
|
27381
27395
|
this.searchService.updateFilters({ any });
|
|
27382
27396
|
}
|
|
27383
27397
|
}
|
|
27384
|
-
handleInputCleared() {
|
|
27385
|
-
this.
|
|
27398
|
+
async handleInputCleared() {
|
|
27399
|
+
const currentSearchFilters = await firstValueFrom(this.searchFacade.searchFilters$);
|
|
27400
|
+
if (currentSearchFilters.any) {
|
|
27401
|
+
this.searchService.updateFilters({ any: '' });
|
|
27402
|
+
}
|
|
27386
27403
|
}
|
|
27387
27404
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FuzzySearchComponent, deps: [{ token: SearchFacade }, { token: SearchService }, { token: RecordsRepositoryInterface }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
27388
27405
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FuzzySearchComponent, selector: "gn-ui-fuzzy-search", inputs: { autoFocus: "autoFocus" }, outputs: { itemSelected: "itemSelected", inputSubmitted: "inputSubmitted" }, viewQueries: [{ propertyName: "autocomplete", first: true, predicate: AutocompleteComponent, descendants: true }], ngImport: i0, template: "<gn-ui-autocomplete\n [placeholder]=\"'search.field.any.placeholder' | translate\"\n [displayWithFn]=\"displayWithFn\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleItemSelection($event)\"\n (inputSubmitted)=\"handleInputSubmission($event)\"\n (inputCleared)=\"handleInputCleared()\"\n [value]=\"searchInputValue$ | async\"\n [clearOnSelection]=\"true\"\n [autoFocus]=\"autoFocus\"\n></gn-ui-autocomplete>\n", styles: [""], dependencies: [{ kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "autoFocus", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
@@ -27462,6 +27479,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27462
27479
|
args: [RESULTS_LAYOUT_CONFIG]
|
|
27463
27480
|
}] }]; } });
|
|
27464
27481
|
|
|
27482
|
+
// expects the replacement key ${uuid}
|
|
27483
|
+
const RECORD_URL_TOKEN = new InjectionToken('record-url-token');
|
|
27484
|
+
|
|
27465
27485
|
class FavoriteStarComponent {
|
|
27466
27486
|
set record(value) {
|
|
27467
27487
|
this.record_ = value;
|
|
@@ -27723,9 +27743,11 @@ class SearchEffects {
|
|
|
27723
27743
|
// I could not get this to work (maybe a bug in rxjs?)
|
|
27724
27744
|
switchMap$1(([, state]) => this.favoritesService.myFavoritesUuid$.pipe(take(1), map$1((favorites) => [state, favorites]))), switchMap$1(([state, favorites]) => {
|
|
27725
27745
|
if (!state.params.useSpatialFilter || !this.filterGeometry$) {
|
|
27726
|
-
return of([state, favorites,
|
|
27746
|
+
return of([state, favorites, undefined]);
|
|
27727
27747
|
}
|
|
27728
27748
|
return this.filterGeometry$.pipe(tap$2((geom) => {
|
|
27749
|
+
if (!geom)
|
|
27750
|
+
return;
|
|
27729
27751
|
try {
|
|
27730
27752
|
const trace = valid$1(geom, true);
|
|
27731
27753
|
if (trace?.length > 0) {
|
|
@@ -27737,7 +27759,7 @@ class SearchEffects {
|
|
|
27737
27759
|
throw new Error();
|
|
27738
27760
|
}
|
|
27739
27761
|
}), map$1((geom) => [state, favorites, geom]), catchError((e) => {
|
|
27740
|
-
return of([state, favorites,
|
|
27762
|
+
return of([state, favorites, undefined]);
|
|
27741
27763
|
}));
|
|
27742
27764
|
}), switchMap$1(([state, favorites, geometry]) => {
|
|
27743
27765
|
const { currentPage, pageSize, sort } = state.params;
|
|
@@ -27836,10 +27858,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
27836
27858
|
class AbstractSearchField {
|
|
27837
27859
|
}
|
|
27838
27860
|
class SimpleSearchField {
|
|
27839
|
-
constructor(esFieldName, order = 'asc',
|
|
27861
|
+
constructor(esFieldName, injector, order = 'asc', orderType = 'key') {
|
|
27840
27862
|
this.esFieldName = esFieldName;
|
|
27841
|
-
this.order = order;
|
|
27842
27863
|
this.injector = injector;
|
|
27864
|
+
this.order = order;
|
|
27865
|
+
this.orderType = orderType;
|
|
27843
27866
|
this.repository = this.injector.get(RecordsRepositoryInterface);
|
|
27844
27867
|
// FIXME: this is required to register runtime fields; abstract this as well
|
|
27845
27868
|
this.esService = this.injector.get(ElasticsearchService);
|
|
@@ -27850,12 +27873,12 @@ class SimpleSearchField {
|
|
|
27850
27873
|
type: 'terms',
|
|
27851
27874
|
field: this.esFieldName,
|
|
27852
27875
|
limit: 1000,
|
|
27853
|
-
sort: [this.order,
|
|
27876
|
+
sort: [this.order, this.orderType],
|
|
27854
27877
|
},
|
|
27855
27878
|
};
|
|
27856
27879
|
}
|
|
27857
27880
|
async getBucketLabel(bucket) {
|
|
27858
|
-
return bucket.term;
|
|
27881
|
+
return bucket.term.toString();
|
|
27859
27882
|
}
|
|
27860
27883
|
getAvailableValues() {
|
|
27861
27884
|
return this.repository.aggregate(this.getAggregations()).pipe(map$1((response) => response[this.esFieldName].buckets || []), switchMap((buckets) => {
|
|
@@ -27883,9 +27906,13 @@ class SimpleSearchField {
|
|
|
27883
27906
|
return of(values);
|
|
27884
27907
|
}
|
|
27885
27908
|
}
|
|
27886
|
-
class
|
|
27887
|
-
constructor() {
|
|
27888
|
-
super(
|
|
27909
|
+
class TranslatedSearchField extends SimpleSearchField {
|
|
27910
|
+
constructor(esFieldName, injector, order = 'asc', orderType = 'key') {
|
|
27911
|
+
super(esFieldName, injector, order, orderType);
|
|
27912
|
+
this.esFieldName = esFieldName;
|
|
27913
|
+
this.injector = injector;
|
|
27914
|
+
this.order = order;
|
|
27915
|
+
this.orderType = orderType;
|
|
27889
27916
|
this.platformService = this.injector.get(PlatformServiceInterface);
|
|
27890
27917
|
}
|
|
27891
27918
|
async getTranslation(key) {
|
|
@@ -27895,26 +27922,36 @@ class KeySearchField extends SimpleSearchField {
|
|
|
27895
27922
|
return (await this.getTranslation(bucket.term)) || bucket.term;
|
|
27896
27923
|
}
|
|
27897
27924
|
getAvailableValues() {
|
|
27925
|
+
if (this.orderType === 'count')
|
|
27926
|
+
return super.getAvailableValues();
|
|
27898
27927
|
// sort values by alphabetical order
|
|
27899
27928
|
return super
|
|
27900
27929
|
.getAvailableValues()
|
|
27901
27930
|
.pipe(map$1((values) => values.sort((a, b) => new Intl.Collator().compare(a.label, b.label))));
|
|
27902
27931
|
}
|
|
27903
27932
|
}
|
|
27904
|
-
|
|
27905
|
-
|
|
27906
|
-
|
|
27907
|
-
|
|
27933
|
+
/**
|
|
27934
|
+
* This search field will either target the `.default` field, or a specific `.langxyz` field according
|
|
27935
|
+
* to the defined METADATA_LANGUAGE token
|
|
27936
|
+
* The provided ES field name should not include any prefix such as `.langeng`
|
|
27937
|
+
*/
|
|
27938
|
+
class MultilingualSearchField extends SimpleSearchField {
|
|
27939
|
+
constructor(esFieldName, injector, order = 'asc', orderType = 'key') {
|
|
27940
|
+
super(esFieldName, injector, order, orderType);
|
|
27941
|
+
this.esFieldName = esFieldName;
|
|
27942
|
+
this.injector = injector;
|
|
27943
|
+
this.order = order;
|
|
27944
|
+
this.orderType = orderType;
|
|
27908
27945
|
this.langService = this.injector.get(LangService);
|
|
27909
|
-
this.
|
|
27910
|
-
|
|
27911
|
-
|
|
27912
|
-
|
|
27913
|
-
|
|
27914
|
-
}
|
|
27915
|
-
|
|
27916
|
-
|
|
27917
|
-
|
|
27946
|
+
this.searchLanguage = this.injector.get(METADATA_LANGUAGE, null);
|
|
27947
|
+
// note: we're excluding the metadata language "current" value because that would produce
|
|
27948
|
+
// permalinks that might not work for different users
|
|
27949
|
+
if (this.searchLanguage && this.searchLanguage !== 'current') {
|
|
27950
|
+
this.esFieldName += `.lang${this.searchLanguage}`;
|
|
27951
|
+
}
|
|
27952
|
+
else {
|
|
27953
|
+
this.esFieldName += '.default';
|
|
27954
|
+
}
|
|
27918
27955
|
}
|
|
27919
27956
|
}
|
|
27920
27957
|
class FullTextSearchField {
|
|
@@ -27934,7 +27971,7 @@ marker('search.filters.isSpatial.yes');
|
|
|
27934
27971
|
marker('search.filters.isSpatial.no');
|
|
27935
27972
|
class IsSpatialSearchField extends SimpleSearchField {
|
|
27936
27973
|
constructor(injector) {
|
|
27937
|
-
super('isSpatial', 'asc'
|
|
27974
|
+
super('isSpatial', injector, 'asc');
|
|
27938
27975
|
this.translateService = this.injector.get(TranslateService);
|
|
27939
27976
|
this.esService.registerRuntimeField('isSpatial', `String result = 'no';
|
|
27940
27977
|
String formats = doc.format.join('|').toLowerCase();
|
|
@@ -27984,7 +28021,7 @@ marker('search.filters.license.unknown');
|
|
|
27984
28021
|
// Note: values are inspired from https://doc.data.gouv.fr/moissonnage/licences/
|
|
27985
28022
|
class LicenseSearchField extends SimpleSearchField {
|
|
27986
28023
|
constructor(injector) {
|
|
27987
|
-
super('license', 'asc'
|
|
28024
|
+
super('license', injector, 'asc');
|
|
27988
28025
|
this.translateService = this.injector.get(TranslateService);
|
|
27989
28026
|
this.esService.registerRuntimeField('license', `String raw = '';
|
|
27990
28027
|
if (doc.containsKey('licenseObject.default.keyword') && doc['licenseObject.default.keyword'].length > 0)
|
|
@@ -28068,7 +28105,7 @@ class OrganizationSearchField {
|
|
|
28068
28105
|
}
|
|
28069
28106
|
class OwnerSearchField extends SimpleSearchField {
|
|
28070
28107
|
constructor(injector) {
|
|
28071
|
-
super('owner', 'asc'
|
|
28108
|
+
super('owner', injector, 'asc');
|
|
28072
28109
|
}
|
|
28073
28110
|
getAvailableValues() {
|
|
28074
28111
|
return of([]);
|
|
@@ -28077,6 +28114,7 @@ class OwnerSearchField extends SimpleSearchField {
|
|
|
28077
28114
|
|
|
28078
28115
|
marker('search.filters.format');
|
|
28079
28116
|
marker('search.filters.inspireKeyword');
|
|
28117
|
+
marker('search.filters.keyword');
|
|
28080
28118
|
marker('search.filters.isSpatial');
|
|
28081
28119
|
marker('search.filters.license');
|
|
28082
28120
|
marker('search.filters.publicationYear');
|
|
@@ -28094,13 +28132,14 @@ class FieldsService {
|
|
|
28094
28132
|
this.injector = injector;
|
|
28095
28133
|
this.fields = {
|
|
28096
28134
|
publisher: new OrganizationSearchField(this.injector),
|
|
28097
|
-
format: new SimpleSearchField('format', 'asc'
|
|
28098
|
-
resourceType: new
|
|
28099
|
-
representationType: new
|
|
28100
|
-
publicationYear: new SimpleSearchField('publicationYearForResource', 'desc'
|
|
28101
|
-
topic: new
|
|
28102
|
-
inspireKeyword: new
|
|
28103
|
-
|
|
28135
|
+
format: new SimpleSearchField('format', this.injector, 'asc'),
|
|
28136
|
+
resourceType: new TranslatedSearchField('resourceType', this.injector, 'asc'),
|
|
28137
|
+
representationType: new TranslatedSearchField('cl_spatialRepresentationType.key', this.injector, 'asc'),
|
|
28138
|
+
publicationYear: new SimpleSearchField('publicationYearForResource', this.injector, 'desc'),
|
|
28139
|
+
topic: new TranslatedSearchField('cl_topic.key', this.injector, 'asc'),
|
|
28140
|
+
inspireKeyword: new TranslatedSearchField('th_httpinspireeceuropaeutheme-theme.link', this.injector, 'asc'),
|
|
28141
|
+
keyword: new MultilingualSearchField('tag', this.injector, 'desc', 'count'),
|
|
28142
|
+
documentStandard: new SimpleSearchField('documentStandard', this.injector, 'asc'),
|
|
28104
28143
|
isSpatial: new IsSpatialSearchField(this.injector),
|
|
28105
28144
|
q: new FullTextSearchField(),
|
|
28106
28145
|
license: new LicenseSearchField(this.injector),
|
|
@@ -28174,10 +28213,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28174
28213
|
type: Input
|
|
28175
28214
|
}] } });
|
|
28176
28215
|
|
|
28177
|
-
// this geometry will be used to filter & boost results accordingly
|
|
28178
|
-
const FILTER_GEOMETRY = new InjectionToken('filter-geometry');
|
|
28179
|
-
// expects the replacement key ${uuid}
|
|
28180
|
-
const RECORD_URL_TOKEN = new InjectionToken('record-url-token');
|
|
28181
28216
|
class FeatureSearchModule {
|
|
28182
28217
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
28183
28218
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: FeatureSearchModule, declarations: [SortByComponent,
|
|
@@ -28276,6 +28311,114 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28276
28311
|
}]
|
|
28277
28312
|
}] });
|
|
28278
28313
|
|
|
28314
|
+
class ResultsTableComponent {
|
|
28315
|
+
constructor(searchFacade, searchService, selectionService) {
|
|
28316
|
+
this.searchFacade = searchFacade;
|
|
28317
|
+
this.searchService = searchService;
|
|
28318
|
+
this.selectionService = selectionService;
|
|
28319
|
+
this.recordClick = new EventEmitter();
|
|
28320
|
+
this.records$ = this.searchFacade.results$;
|
|
28321
|
+
this.selectedRecords$ = this.selectionService.selectedRecordsIdentifiers$;
|
|
28322
|
+
}
|
|
28323
|
+
dateToString(date) {
|
|
28324
|
+
return date?.toLocaleDateString(undefined, {
|
|
28325
|
+
year: 'numeric',
|
|
28326
|
+
month: 'long',
|
|
28327
|
+
day: 'numeric',
|
|
28328
|
+
timeZone: 'UTC',
|
|
28329
|
+
});
|
|
28330
|
+
}
|
|
28331
|
+
getStatus(isPublishedToAll) {
|
|
28332
|
+
return isPublishedToAll ? 'published' : 'not published';
|
|
28333
|
+
}
|
|
28334
|
+
getRecordFormats(record) {
|
|
28335
|
+
if (record.kind === 'service' || !('distributions' in record)) {
|
|
28336
|
+
return [];
|
|
28337
|
+
}
|
|
28338
|
+
const formats = Array.from(new Set(record.distributions.map((distribution) => getFileFormat(distribution)))).filter((format) => !!format);
|
|
28339
|
+
formats.sort((a, b) => getFormatPriority(b) - getFormatPriority(a));
|
|
28340
|
+
return formats;
|
|
28341
|
+
}
|
|
28342
|
+
formatUserInfo(userInfo) {
|
|
28343
|
+
const infos = (typeof userInfo === 'string' ? userInfo : '').split('|');
|
|
28344
|
+
if (infos && infos.length === 4) {
|
|
28345
|
+
return `${infos[2]} ${infos[1]}`;
|
|
28346
|
+
}
|
|
28347
|
+
return undefined;
|
|
28348
|
+
}
|
|
28349
|
+
getBadgeColor(format) {
|
|
28350
|
+
return getBadgeColor(format);
|
|
28351
|
+
}
|
|
28352
|
+
handleRecordClick(item) {
|
|
28353
|
+
this.recordClick.emit(item);
|
|
28354
|
+
}
|
|
28355
|
+
setSortBy(col, order) {
|
|
28356
|
+
this.searchService.setSortBy([order, col]);
|
|
28357
|
+
}
|
|
28358
|
+
isSortedBy(col) {
|
|
28359
|
+
return this.searchFacade.sortBy$.pipe(take(1), map$1((sortOrder) => {
|
|
28360
|
+
const sortArray = Array.isArray(sortOrder[0])
|
|
28361
|
+
? sortOrder
|
|
28362
|
+
: [sortOrder];
|
|
28363
|
+
for (const sort of sortArray) {
|
|
28364
|
+
if (sort[1] === col) {
|
|
28365
|
+
return sort[0];
|
|
28366
|
+
}
|
|
28367
|
+
}
|
|
28368
|
+
return null;
|
|
28369
|
+
}));
|
|
28370
|
+
}
|
|
28371
|
+
isChecked(record) {
|
|
28372
|
+
return this.selectedRecords$.pipe(take(1), map$1((selectedRecords) => {
|
|
28373
|
+
return selectedRecords.includes(record.uniqueIdentifier);
|
|
28374
|
+
}));
|
|
28375
|
+
}
|
|
28376
|
+
handleRecordSelectedChange(selected, record) {
|
|
28377
|
+
if (!selected) {
|
|
28378
|
+
this.selectionService.deselectRecords([record]);
|
|
28379
|
+
}
|
|
28380
|
+
else {
|
|
28381
|
+
this.selectionService.selectRecords([record]);
|
|
28382
|
+
}
|
|
28383
|
+
}
|
|
28384
|
+
async toggleSelectAll() {
|
|
28385
|
+
const records = await firstValueFrom(this.records$);
|
|
28386
|
+
if (await firstValueFrom(this.isAllSelected())) {
|
|
28387
|
+
this.selectionService.deselectRecords(records);
|
|
28388
|
+
}
|
|
28389
|
+
else {
|
|
28390
|
+
this.selectionService.selectRecords(records);
|
|
28391
|
+
}
|
|
28392
|
+
}
|
|
28393
|
+
isAllSelected() {
|
|
28394
|
+
return combineLatest([this.records$, this.selectedRecords$]).pipe(take(1), map$1(([records, selectedRecords]) => {
|
|
28395
|
+
return records.every((record) => selectedRecords.includes(record.uniqueIdentifier));
|
|
28396
|
+
}));
|
|
28397
|
+
}
|
|
28398
|
+
isSomeSelected() {
|
|
28399
|
+
return combineLatest([this.records$, this.selectedRecords$]).pipe(take(1), map$1(([records, selectedRecords]) => {
|
|
28400
|
+
const allSelected = records.every((record) => selectedRecords.includes(record.uniqueIdentifier));
|
|
28401
|
+
const someSelected = records.some((record) => selectedRecords.includes(record.uniqueIdentifier));
|
|
28402
|
+
return !allSelected && someSelected;
|
|
28403
|
+
}));
|
|
28404
|
+
}
|
|
28405
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsTableComponent, deps: [{ token: SearchFacade }, { token: SearchService }, { token: SelectionService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28406
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", outputs: { recordClick: "recordClick" }, ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records$ | async\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected() | async\"\n [indeterminate]=\"isSomeSelected() | async\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item) | async\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword') | async\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.title }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"flex-shrink-0\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner') | async\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate') | async\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: InteractiveTableComponent, selector: "gn-ui-interactive-table", inputs: ["items"], outputs: ["itemClick"] }, { kind: "component", type: InteractiveTableColumnComponent, selector: "gn-ui-interactive-table-column", inputs: ["grow", "sortable", "activeSort"], outputs: ["sortChange"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }] }); }
|
|
28407
|
+
}
|
|
28408
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsTableComponent, decorators: [{
|
|
28409
|
+
type: Component,
|
|
28410
|
+
args: [{ selector: 'gn-ui-results-table', standalone: true, imports: [
|
|
28411
|
+
CommonModule,
|
|
28412
|
+
UiInputsModule,
|
|
28413
|
+
InteractiveTableComponent,
|
|
28414
|
+
InteractiveTableColumnComponent,
|
|
28415
|
+
MatIconModule,
|
|
28416
|
+
TranslateModule,
|
|
28417
|
+
], template: "<gn-ui-interactive-table\n [items]=\"records$ | async\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected() | async\"\n [indeterminate]=\"isSomeSelected() | async\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item) | async\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword') | async\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.title }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"flex-shrink-0\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner') | async\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate') | async\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n" }]
|
|
28418
|
+
}], ctorParameters: function () { return [{ type: SearchFacade }, { type: SearchService }, { type: SelectionService }]; }, propDecorators: { recordClick: [{
|
|
28419
|
+
type: Output
|
|
28420
|
+
}] } });
|
|
28421
|
+
|
|
28279
28422
|
class AddLayerRecordPreviewComponent extends RecordPreviewComponent {
|
|
28280
28423
|
get mapLinks() {
|
|
28281
28424
|
return this.record.distributions.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.MAP_API));
|
|
@@ -28602,20 +28745,55 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28602
28745
|
args: [{ selector: 'gn-ui-map-container', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-map-context [context]=\"context$ | async\"></gn-ui-map-context>\n" }]
|
|
28603
28746
|
}], ctorParameters: function () { return [{ type: MapFacade }]; } });
|
|
28604
28747
|
|
|
28748
|
+
const GEOCODING_PROVIDER = new InjectionToken('geocoding-provider');
|
|
28749
|
+
class GeocodingService {
|
|
28750
|
+
constructor(provider) {
|
|
28751
|
+
this.provider = provider;
|
|
28752
|
+
}
|
|
28753
|
+
query(text) {
|
|
28754
|
+
let queryObservable;
|
|
28755
|
+
switch (this.provider[0]) {
|
|
28756
|
+
case 'geoadmin':
|
|
28757
|
+
queryObservable = from(queryGeoadmin(text, this.provider[1]));
|
|
28758
|
+
break;
|
|
28759
|
+
case 'geonames':
|
|
28760
|
+
queryObservable = from(queryGeonames(text, this.provider[1]));
|
|
28761
|
+
break;
|
|
28762
|
+
case 'data-gouv-fr':
|
|
28763
|
+
queryObservable = from(queryDataGouvFr(text, this.provider[1]));
|
|
28764
|
+
break;
|
|
28765
|
+
default:
|
|
28766
|
+
return throwError(() => new Error(`Unsupported geocoding provider: ${this.provider[0]}`));
|
|
28767
|
+
}
|
|
28768
|
+
return queryObservable.pipe(catchError((error) => throwError(error)));
|
|
28769
|
+
}
|
|
28770
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingService, deps: [{ token: GEOCODING_PROVIDER }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
28771
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingService, providedIn: 'root' }); }
|
|
28772
|
+
}
|
|
28773
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingService, decorators: [{
|
|
28774
|
+
type: Injectable,
|
|
28775
|
+
args: [{
|
|
28776
|
+
providedIn: 'root',
|
|
28777
|
+
}]
|
|
28778
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
28779
|
+
type: Inject,
|
|
28780
|
+
args: [GEOCODING_PROVIDER]
|
|
28781
|
+
}] }]; } });
|
|
28782
|
+
|
|
28605
28783
|
class GeocodingComponent {
|
|
28606
|
-
constructor(mapManager) {
|
|
28784
|
+
constructor(mapManager, geocodingService) {
|
|
28607
28785
|
this.mapManager = mapManager;
|
|
28786
|
+
this.geocodingService = geocodingService;
|
|
28608
28787
|
this.searchText = '';
|
|
28609
28788
|
this.results = [];
|
|
28610
28789
|
this.searchTextChanged = new Subject();
|
|
28611
28790
|
this.destroy$ = new Subject();
|
|
28791
|
+
this.errorMessage = null;
|
|
28612
28792
|
this.searchTextChanged
|
|
28613
28793
|
.pipe(debounceTime(300), switchMap$1((searchText) => {
|
|
28614
|
-
|
|
28615
|
-
|
|
28616
|
-
|
|
28617
|
-
};
|
|
28618
|
-
return from(queryGeoadmin(searchText, options)).pipe(catchError$1((error) => {
|
|
28794
|
+
return from(this.geocodingService.query(searchText)).pipe(catchError$1((error) => {
|
|
28795
|
+
this.errorMessage =
|
|
28796
|
+
'An error occurred while searching. Please try again.';
|
|
28619
28797
|
console.error(error);
|
|
28620
28798
|
return [];
|
|
28621
28799
|
}));
|
|
@@ -28640,12 +28818,28 @@ class GeocodingComponent {
|
|
|
28640
28818
|
clearSearch() {
|
|
28641
28819
|
this.searchText = '';
|
|
28642
28820
|
this.results = [];
|
|
28821
|
+
this.errorMessage = null;
|
|
28643
28822
|
}
|
|
28644
28823
|
zoomToLocation(result) {
|
|
28645
28824
|
const map = this.mapManager.map;
|
|
28646
28825
|
const view = map.getView();
|
|
28647
28826
|
const geometry = result.geom;
|
|
28648
|
-
|
|
28827
|
+
if (geometry.type === 'Point') {
|
|
28828
|
+
this.zoomToPoint(geometry.coordinates, view);
|
|
28829
|
+
}
|
|
28830
|
+
else if (geometry.type === 'Polygon') {
|
|
28831
|
+
this.zoomToPolygon(geometry.coordinates, view);
|
|
28832
|
+
}
|
|
28833
|
+
else {
|
|
28834
|
+
console.error(`Unsupported geometry type: ${geometry.type}`);
|
|
28835
|
+
}
|
|
28836
|
+
}
|
|
28837
|
+
zoomToPoint(pointCoords, view) {
|
|
28838
|
+
const transformedCoords = fromLonLat(pointCoords);
|
|
28839
|
+
view.setCenter(transformedCoords);
|
|
28840
|
+
view.setZoom(12);
|
|
28841
|
+
}
|
|
28842
|
+
zoomToPolygon(polygonCoords, view) {
|
|
28649
28843
|
const transformedCoords = polygonCoords[0].map((coord) => fromLonLat(coord));
|
|
28650
28844
|
const polygon = new Polygon([transformedCoords]);
|
|
28651
28845
|
view.fit(polygon, {
|
|
@@ -28658,13 +28852,13 @@ class GeocodingComponent {
|
|
|
28658
28852
|
this.zoomToLocation(this.results[0]);
|
|
28659
28853
|
}
|
|
28660
28854
|
}
|
|
28661
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingComponent, deps: [{ token: MapManagerService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28855
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingComponent, deps: [{ token: MapManagerService }, { token: GeocodingService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
28662
28856
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: GeocodingComponent, selector: "gn-ui-geocoding", ngImport: i0, template: "<gn-ui-search-input\n [(value)]=\"searchText\"\n (valueChange)=\"onSearchChange($event)\"\n (keyup.enter)=\"onEnterPress()\"\n [placeholder]=\"'map.geocoding.placeholder' | translate\"\n>\n</gn-ui-search-input>\n<ul\n class=\"bg-gray-50 border border-gray-200 w-full mt-2 shadow-sm rounded-lg\"\n *ngIf=\"results && results.length\"\n>\n <li\n *ngFor=\"let result of results\"\n (click)=\"zoomToLocation(result)\"\n class=\"flex items-center pl-8 pr-4 py-2 border-b border-gray-200 relative cursor-pointer hover:bg-blue-100 hover:text-gray-800 transition duration-300 ease-in-out\"\n >\n <svg\n class=\"stroke-current text-blue-500 absolute w-5 h-5 left-3 top-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z\"\n />\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M15 11a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </svg>\n <span class=\"font-sans font-semibold ml-4\">{{ result.label }}</span>\n </li>\n</ul>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SearchInputComponent, selector: "gn-ui-search-input", inputs: ["value", "placeholder"], outputs: ["valueChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
|
|
28663
28857
|
}
|
|
28664
28858
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GeocodingComponent, decorators: [{
|
|
28665
28859
|
type: Component,
|
|
28666
28860
|
args: [{ selector: 'gn-ui-geocoding', template: "<gn-ui-search-input\n [(value)]=\"searchText\"\n (valueChange)=\"onSearchChange($event)\"\n (keyup.enter)=\"onEnterPress()\"\n [placeholder]=\"'map.geocoding.placeholder' | translate\"\n>\n</gn-ui-search-input>\n<ul\n class=\"bg-gray-50 border border-gray-200 w-full mt-2 shadow-sm rounded-lg\"\n *ngIf=\"results && results.length\"\n>\n <li\n *ngFor=\"let result of results\"\n (click)=\"zoomToLocation(result)\"\n class=\"flex items-center pl-8 pr-4 py-2 border-b border-gray-200 relative cursor-pointer hover:bg-blue-100 hover:text-gray-800 transition duration-300 ease-in-out\"\n >\n <svg\n class=\"stroke-current text-blue-500 absolute w-5 h-5 left-3 top-3\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z\"\n />\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"2\"\n d=\"M15 11a3 3 0 11-6 0 3 3 0 016 0z\"\n />\n </svg>\n <span class=\"font-sans font-semibold ml-4\">{{ result.label }}</span>\n </li>\n</ul>\n" }]
|
|
28667
|
-
}], ctorParameters: function () { return [{ type: MapManagerService }]; } });
|
|
28861
|
+
}], ctorParameters: function () { return [{ type: MapManagerService }, { type: GeocodingService }]; } });
|
|
28668
28862
|
|
|
28669
28863
|
class FeatureMapModule {
|
|
28670
28864
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureMapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
@@ -28696,6 +28890,10 @@ class FeatureMapModule {
|
|
|
28696
28890
|
useValue: defaultMapOptions,
|
|
28697
28891
|
},
|
|
28698
28892
|
MapFacade,
|
|
28893
|
+
{
|
|
28894
|
+
provide: GEOCODING_PROVIDER,
|
|
28895
|
+
useValue: ['geonames', { maxRows: 5 }],
|
|
28896
|
+
},
|
|
28699
28897
|
], imports: [CommonModule,
|
|
28700
28898
|
UiMapModule,
|
|
28701
28899
|
UiLayoutModule,
|
|
@@ -28750,6 +28948,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
28750
28948
|
useValue: defaultMapOptions,
|
|
28751
28949
|
},
|
|
28752
28950
|
MapFacade,
|
|
28951
|
+
{
|
|
28952
|
+
provide: GEOCODING_PROVIDER,
|
|
28953
|
+
useValue: ['geonames', { maxRows: 5 }],
|
|
28954
|
+
},
|
|
28753
28955
|
],
|
|
28754
28956
|
}]
|
|
28755
28957
|
}] });
|
|
@@ -28844,7 +29046,7 @@ const mdViewReducer = createReducer(initialMdviewState, on(loadFullMetadata, (st
|
|
|
28844
29046
|
...state,
|
|
28845
29047
|
chartConfig,
|
|
28846
29048
|
})), on(close, (state) => {
|
|
28847
|
-
// eslint-disable-next-line
|
|
29049
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
28848
29050
|
const { metadata, related, ...stateWithoutMd } = state;
|
|
28849
29051
|
return stateWithoutMd;
|
|
28850
29052
|
}));
|
|
@@ -30514,12 +30716,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
30514
30716
|
}] } });
|
|
30515
30717
|
|
|
30516
30718
|
class MapViewComponent {
|
|
30517
|
-
constructor(mdViewFacade, mapManager, mapUtils, dataService,
|
|
30719
|
+
constructor(mdViewFacade, mapManager, mapUtils, dataService, featureInfo, changeRef, styleService) {
|
|
30518
30720
|
this.mdViewFacade = mdViewFacade;
|
|
30519
30721
|
this.mapManager = mapManager;
|
|
30520
30722
|
this.mapUtils = mapUtils;
|
|
30521
30723
|
this.dataService = dataService;
|
|
30522
|
-
this.proxy = proxy;
|
|
30523
30724
|
this.featureInfo = featureInfo;
|
|
30524
30725
|
this.changeRef = changeRef;
|
|
30525
30726
|
this.styleService = styleService;
|
|
@@ -30554,7 +30755,7 @@ class MapViewComponent {
|
|
|
30554
30755
|
return of([]);
|
|
30555
30756
|
}), finalize(() => (this.loading = false)));
|
|
30556
30757
|
}));
|
|
30557
|
-
this.mapContext$ = this.currentLayers$.pipe(switchMap$1((layers) => this.mapUtils.getLayerExtent(layers[0]).pipe(catchError((error) => {
|
|
30758
|
+
this.mapContext$ = this.currentLayers$.pipe(switchMap$1((layers) => from(this.mapUtils.getLayerExtent(layers[0])).pipe(catchError((error) => {
|
|
30558
30759
|
console.warn(error); // FIXME: report this to the user somehow
|
|
30559
30760
|
return of(undefined);
|
|
30560
30761
|
}), map$1((extent) => ({
|
|
@@ -30562,7 +30763,18 @@ class MapViewComponent {
|
|
|
30562
30763
|
view: {
|
|
30563
30764
|
extent,
|
|
30564
30765
|
},
|
|
30565
|
-
})), tap$1(() => this.resetSelection()))))
|
|
30766
|
+
})), tap$1(() => this.resetSelection()))), withLatestFrom$1(this.mdViewFacade.metadata$), map$1(([context, metadata]) => {
|
|
30767
|
+
if (context.view.extent)
|
|
30768
|
+
return context;
|
|
30769
|
+
const extent = this.mapUtils.getRecordExtent(metadata);
|
|
30770
|
+
return {
|
|
30771
|
+
...context,
|
|
30772
|
+
view: {
|
|
30773
|
+
...context.view,
|
|
30774
|
+
extent,
|
|
30775
|
+
},
|
|
30776
|
+
};
|
|
30777
|
+
}));
|
|
30566
30778
|
}
|
|
30567
30779
|
ngOnDestroy() {
|
|
30568
30780
|
this.subscription.unsubscribe();
|
|
@@ -30615,13 +30827,13 @@ class MapViewComponent {
|
|
|
30615
30827
|
selectLinkToDisplay(link) {
|
|
30616
30828
|
this.selectedLinkIndex$.next(link);
|
|
30617
30829
|
}
|
|
30618
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapViewComponent, deps: [{ token: MdViewFacade }, { token: MapManagerService }, { token: MapUtilsService }, { token: DataService }, { token:
|
|
30830
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapViewComponent, deps: [{ token: MdViewFacade }, { token: MapManagerService }, { token: MapUtilsService }, { token: DataService }, { token: FeatureInfoService }, { token: i0.ChangeDetectorRef }, { token: MapStyleService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30619
30831
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MapViewComponent, selector: "gn-ui-map-view", ngImport: i0, template: "<div class=\"w-full h-full flex flex-col p-1\">\n <div class=\"w-full flex justify-end mb-7 mt-1\">\n <gn-ui-dropdown-selector\n class=\"truncate p-1 -mx-1\"\n extraBtnClass=\"!text-primary font-sans font-medium\"\n [title]=\"'map.select.layer' | translate\"\n [choices]=\"dropdownChoices$ | async\"\n (selectValue)=\"selectLinkToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n <gn-ui-external-viewer-button\n class=\"shrink-0 py-1 place-self-end\"\n [link]=\"selectedLink$ | async\"\n [mapConfig]=\"mapConfig\"\n >\n </gn-ui-external-viewer-button>\n </div>\n <div\n class=\"relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-map-context\n [context]=\"mapContext$ | async\"\n [mapConfig]=\"mapConfig\"\n ></gn-ui-map-context>\n <div\n class=\"top-[1em] right-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [class.hidden]=\"!selection\"\n >\n <button\n (click)=\"resetSelection()\"\n class=\"rounded bg-primary-opacity-25 text-white absolute right-[0.5em]\"\n >\n <mat-icon\n class=\"material-symbols-outlined align-middle text-sm\"\n style=\"height: 21px\"\n >close</mat-icon\n >\n </button>\n <gn-ui-feature-detail [feature]=\"selection\"></gn-ui-feature-detail>\n </div>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'map.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"error_outline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MapContextComponent, selector: "gn-ui-map-context", inputs: ["context", "mapConfig"], outputs: ["featureClicked"] }, { kind: "component", type: FeatureDetailComponent, selector: "gn-ui-feature-detail", inputs: ["feature"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ExternalViewerButtonComponent, selector: "gn-ui-external-viewer-button", inputs: ["link", "mapConfig"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
30620
30832
|
}
|
|
30621
30833
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MapViewComponent, decorators: [{
|
|
30622
30834
|
type: Component,
|
|
30623
30835
|
args: [{ selector: 'gn-ui-map-view', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"w-full h-full flex flex-col p-1\">\n <div class=\"w-full flex justify-end mb-7 mt-1\">\n <gn-ui-dropdown-selector\n class=\"truncate p-1 -mx-1\"\n extraBtnClass=\"!text-primary font-sans font-medium\"\n [title]=\"'map.select.layer' | translate\"\n [choices]=\"dropdownChoices$ | async\"\n (selectValue)=\"selectLinkToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n <gn-ui-external-viewer-button\n class=\"shrink-0 py-1 place-self-end\"\n [link]=\"selectedLink$ | async\"\n [mapConfig]=\"mapConfig\"\n >\n </gn-ui-external-viewer-button>\n </div>\n <div\n class=\"relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-map-context\n [context]=\"mapContext$ | async\"\n [mapConfig]=\"mapConfig\"\n ></gn-ui-map-context>\n <div\n class=\"top-[1em] right-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [class.hidden]=\"!selection\"\n >\n <button\n (click)=\"resetSelection()\"\n class=\"rounded bg-primary-opacity-25 text-white absolute right-[0.5em]\"\n >\n <mat-icon\n class=\"material-symbols-outlined align-middle text-sm\"\n style=\"height: 21px\"\n >close</mat-icon\n >\n </button>\n <gn-ui-feature-detail [feature]=\"selection\"></gn-ui-feature-detail>\n </div>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'map.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"error_outline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n" }]
|
|
30624
|
-
}], ctorParameters: function () { return [{ type: MdViewFacade }, { type: MapManagerService }, { type: MapUtilsService }, { type: DataService }, { type:
|
|
30836
|
+
}], ctorParameters: function () { return [{ type: MdViewFacade }, { type: MapManagerService }, { type: MapUtilsService }, { type: DataService }, { type: FeatureInfoService }, { type: i0.ChangeDetectorRef }, { type: MapStyleService }]; } });
|
|
30625
30837
|
|
|
30626
30838
|
class DataViewComponent {
|
|
30627
30839
|
constructor(mdViewFacade) {
|
|
@@ -30788,11 +31000,11 @@ class LanguageSwitcherComponent {
|
|
|
30788
31000
|
this.translate.use(value);
|
|
30789
31001
|
}
|
|
30790
31002
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LanguageSwitcherComponent, deps: [{ token: LANGUAGES_LIST, optional: true }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
30791
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LanguageSwitcherComponent, selector: "gn-ui-language-switcher", ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n [extraBtnClass]=\"'flex justify-items-center
|
|
31003
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LanguageSwitcherComponent, selector: "gn-ui-language-switcher", ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n [extraBtnClass]=\"'flex justify-items-center !pl-2 !py-1'\"\n>\n</gn-ui-dropdown-selector>\n", styles: [""], dependencies: [{ kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }] }); }
|
|
30792
31004
|
}
|
|
30793
31005
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LanguageSwitcherComponent, decorators: [{
|
|
30794
31006
|
type: Component,
|
|
30795
|
-
args: [{ selector: 'gn-ui-language-switcher', template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n [extraBtnClass]=\"'flex justify-items-center
|
|
31007
|
+
args: [{ selector: 'gn-ui-language-switcher', template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n [extraBtnClass]=\"'flex justify-items-center !pl-2 !py-1'\"\n>\n</gn-ui-dropdown-selector>\n" }]
|
|
30796
31008
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
30797
31009
|
type: Optional
|
|
30798
31010
|
}, {
|
|
@@ -31073,13 +31285,6 @@ class MyOrgService {
|
|
|
31073
31285
|
constructor(platformService, orgService) {
|
|
31074
31286
|
this.platformService = platformService;
|
|
31075
31287
|
this.orgService = orgService;
|
|
31076
|
-
this.myOrgDataSubject = new BehaviorSubject({
|
|
31077
|
-
orgName: '',
|
|
31078
|
-
logoUrl: '',
|
|
31079
|
-
recordCount: 0,
|
|
31080
|
-
userCount: 0,
|
|
31081
|
-
userList: [],
|
|
31082
|
-
});
|
|
31083
31288
|
this.myOrgData$ = combineLatest([
|
|
31084
31289
|
this.platformService.getMe(),
|
|
31085
31290
|
this.platformService.getUsers(),
|
|
@@ -31098,7 +31303,7 @@ class MyOrgService {
|
|
|
31098
31303
|
userList,
|
|
31099
31304
|
userCount,
|
|
31100
31305
|
};
|
|
31101
|
-
}));
|
|
31306
|
+
}), shareReplay(1));
|
|
31102
31307
|
}
|
|
31103
31308
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MyOrgService, deps: [{ token: PlatformServiceInterface }, { token: OrganizationsServiceInterface }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
31104
31309
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MyOrgService, providedIn: 'root' }); }
|
|
@@ -31791,11 +31996,11 @@ class RecordFormComponent {
|
|
|
31791
31996
|
return field.config.model;
|
|
31792
31997
|
}
|
|
31793
31998
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, deps: [{ token: EditorService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
31794
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
31999
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: FormFieldComponent, selector: "gn-ui-form-field", inputs: ["config", "value"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
31795
32000
|
}
|
|
31796
32001
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, decorators: [{
|
|
31797
32002
|
type: Component,
|
|
31798
|
-
args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule], template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n" }]
|
|
32003
|
+
args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, UiInputsModule], template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n" }]
|
|
31799
32004
|
}], ctorParameters: function () { return [{ type: EditorService }]; } });
|
|
31800
32005
|
|
|
31801
32006
|
const ROUTER_STATE_KEY = 'router';
|
|
@@ -32163,5 +32368,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
|
|
|
32163
32368
|
* Generated bundle index. Do not edit.
|
|
32164
32369
|
*/
|
|
32165
32370
|
|
|
32166
|
-
export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldFileComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, Gn4MetadataMapper, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, LANGUAGES_LIST, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService,
|
|
32371
|
+
export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditableLabelDirective, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldFileComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4MetadataMapper, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, LANGUAGES_LIST, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService, MapViewComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataQualityComponent, MetadataQualityItemComponent, MyOrgService, NavigationButtonComponent, ORGANIZATIONS_STRATEGY, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationsFromGroupsService, OrganizationsFromMetadataService, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PatchResultsAggregations, PopupAlertComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchInputComponent, SearchResultsErrorComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SiteTitleComponent, SortByComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, TABLE_ITEM_FIXTURE, TABLE_ITEM_FIXTURE_HAB, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiCatalogModule, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiMapModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UserPreviewComponent, UtilI18nModule, UtilSharedModule, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WFS_MAX_FEATURES, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, _reset, addLayer, changeLayerOrder, checkFileFormat, clearLayerError, createFuzzyFilter, currentPage, defaultMapOptions, dragPanCondition, dropEmptyTranslations, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLinkLabel, getLinkPriority, getMapLayers, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSpatialFilterEnabled, getThemeConfig, initSearch, initialMapState, initialState, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$1 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, selectFallback, selectFallbackFields, selectField, selectTranslatedField, selectTranslatedValue, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, toModel, toXml, totalPages, updateLayer };
|
|
32167
32372
|
//# sourceMappingURL=geonetwork-ui.mjs.map
|