geonetwork-ui 2.2.0-dev.c15a456d → 2.2.0-dev.f866474c

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/esm2022/libs/feature/catalog/src/lib/organisations/organisations.component.mjs +4 -15
  2. package/esm2022/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.mjs +63 -0
  3. package/esm2022/libs/feature/map/src/lib/feature-map.module.mjs +5 -2
  4. package/esm2022/libs/feature/map/src/lib/layers-panel/layers-panel.component.mjs +4 -3
  5. package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +10 -3
  6. package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +6 -3
  7. package/esm2022/libs/util/i18n/src/index.mjs +2 -1
  8. package/esm2022/libs/util/shared/src/lib/utils/fuzzy-filter.mjs +27 -0
  9. package/esm2022/libs/util/shared/src/lib/utils/index.mjs +2 -1
  10. package/esm2022/translations/de.json +4 -0
  11. package/esm2022/translations/en.json +4 -0
  12. package/esm2022/translations/es.json +4 -0
  13. package/esm2022/translations/fr.json +4 -0
  14. package/esm2022/translations/it.json +4 -0
  15. package/esm2022/translations/nl.json +4 -0
  16. package/esm2022/translations/pt.json +4 -0
  17. package/fesm2022/geonetwork-ui.mjs +126 -21
  18. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  19. package/libs/feature/catalog/src/lib/organisations/organisations.component.d.ts +0 -1
  20. package/libs/feature/catalog/src/lib/organisations/organisations.component.d.ts.map +1 -1
  21. package/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.d.ts +22 -0
  22. package/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.d.ts.map +1 -0
  23. package/libs/feature/map/src/lib/feature-map.module.d.ts +13 -12
  24. package/libs/feature/map/src/lib/feature-map.module.d.ts.map +1 -1
  25. package/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.d.ts +1 -0
  26. package/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.d.ts.map +1 -1
  27. package/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.d.ts.map +1 -1
  28. package/libs/util/i18n/src/index.d.ts +1 -0
  29. package/libs/util/i18n/src/index.d.ts.map +1 -1
  30. package/libs/util/shared/src/lib/utils/fuzzy-filter.d.ts +9 -0
  31. package/libs/util/shared/src/lib/utils/fuzzy-filter.d.ts.map +1 -0
  32. package/libs/util/shared/src/lib/utils/index.d.ts +1 -0
  33. package/libs/util/shared/src/lib/utils/index.d.ts.map +1 -1
  34. package/package.json +1 -1
  35. package/src/libs/feature/catalog/src/lib/organisations/organisations.component.ts +3 -17
  36. package/src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.css +0 -0
  37. package/src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.html +55 -0
  38. package/src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.ts +63 -0
  39. package/src/libs/feature/map/src/lib/feature-map.module.ts +2 -0
  40. package/src/libs/feature/map/src/lib/layers-panel/layers-panel.component.html +3 -1
  41. package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +93 -27
  42. package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.ts +7 -0
  43. package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.ts +7 -4
  44. package/src/libs/util/i18n/src/index.ts +1 -0
  45. package/src/libs/util/shared/src/lib/utils/fuzzy-filter.ts +32 -0
  46. package/src/libs/util/shared/src/lib/utils/index.ts +1 -0
  47. package/translations/de.json +4 -0
  48. package/translations/en.json +4 -0
  49. package/translations/es.json +4 -0
  50. package/translations/fr.json +4 -0
  51. package/translations/it.json +4 -0
  52. package/translations/nl.json +4 -0
  53. package/translations/pt.json +4 -0
  54. package/translations/sk.json +4 -0
@@ -22,7 +22,6 @@ export declare class OrganisationsComponent {
22
22
  protected setFilterBy(value: string): void;
23
23
  protected setSortBy(value: SortByField): void;
24
24
  private filterOrganisations;
25
- private normalizeString;
26
25
  private sortOrganisations;
27
26
  trackByIndex(index: number): number;
28
27
  getOrganisationUrl(organisation: Organization): string;
@@ -1 +1 @@
1
- {"version":3,"file":"organisations.component.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/feature/catalog/src/lib/organisations/organisations.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,YAAY,EAKb,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,YAAY,EAAE,MAAM,2DAA2D,CAAA;AACxF,OAAO,EAAE,eAAe,EAAiB,UAAU,EAAE,MAAM,MAAM,CAAA;AAGjE,OAAO,EAAE,6BAA6B,EAAE,MAAM,8EAA8E,CAAA;AAC5H,OAAO,EAAE,WAAW,EAAE,MAAM,2DAA2D,CAAA;;AAEvF,qBAMa,sBAAsB;IAK/B,OAAO,CAAC,oBAAoB;IAG5B,OAAO,CAAC,WAAW;IAPZ,WAAW,SAAK;IACf,SAAS,6BAAmC;gBAG5C,oBAAoB,EAAE,6BAA6B,EAGnD,WAAW,EAAE,MAAM;IAG7B,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,0BAAyB;IACrC,mBAAmB,EAAE,MAAM,CAAA;IAC3B,OAAO,EAAE,eAAe,CAAC,WAAW,CAAC,CAAuC;IAC5E,SAAS,EAAE,eAAe,CAAC,MAAM,CAAC,CAA0B;IAC5D,mBAAmB,qBAAgD;IACnE,+BAA+B,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,CAc1D;IAED,cAAc,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,CAczC;IAED,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI5C,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1C,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAI7C,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,iBAAiB;IAwBzB,YAAY,CAAC,KAAK,EAAE,MAAM;IAI1B,kBAAkB,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM;yCA/G3C,sBAAsB;2CAAtB,sBAAsB;CAmHlC"}
1
+ {"version":3,"file":"organisations.component.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/feature/catalog/src/lib/organisations/organisations.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,YAAY,EAKb,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,YAAY,EAAE,MAAM,2DAA2D,CAAA;AACxF,OAAO,EAAE,eAAe,EAAiB,UAAU,EAAE,MAAM,MAAM,CAAA;AAGjE,OAAO,EAAE,6BAA6B,EAAE,MAAM,8EAA8E,CAAA;AAC5H,OAAO,EAAE,WAAW,EAAE,MAAM,2DAA2D,CAAA;;AAGvF,qBAMa,sBAAsB;IAK/B,OAAO,CAAC,oBAAoB;IAG5B,OAAO,CAAC,WAAW;IAPZ,WAAW,SAAK;IACf,SAAS,6BAAmC;gBAG5C,oBAAoB,EAAE,6BAA6B,EAGnD,WAAW,EAAE,MAAM;IAG7B,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,0BAAyB;IACrC,mBAAmB,EAAE,MAAM,CAAA;IAC3B,OAAO,EAAE,eAAe,CAAC,WAAW,CAAC,CAAuC;IAC5E,SAAS,EAAE,eAAe,CAAC,MAAM,CAAC,CAA0B;IAC5D,mBAAmB,qBAAgD;IACnE,+BAA+B,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,CAc1D;IAED,cAAc,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,CAczC;IAED,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI5C,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1C,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAI7C,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,iBAAiB;IAwBzB,YAAY,CAAC,KAAK,EAAE,MAAM;IAI1B,kBAAkB,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM;yCAhG3C,sBAAsB;2CAAtB,sBAAsB;CAoGlC"}
@@ -0,0 +1,22 @@
1
+ import { ChangeDetectorRef, OnInit } from '@angular/core';
2
+ import { WmsEndpoint, WmsLayerSummary } from '@camptocamp/ogc-client';
3
+ import { MapFacade } from '../+state/map.facade';
4
+ import { Subject } from 'rxjs';
5
+ import * as i0 from "@angular/core";
6
+ export declare class AddLayerFromWmsComponent implements OnInit {
7
+ private mapFacade;
8
+ private changeDetectorRef;
9
+ wmsUrl: string;
10
+ loading: boolean;
11
+ layers: WmsLayerSummary[];
12
+ wmsEndpoint: WmsEndpoint | null;
13
+ urlChange: Subject<string>;
14
+ errorMessage: string | null;
15
+ constructor(mapFacade: MapFacade, changeDetectorRef: ChangeDetectorRef);
16
+ ngOnInit(): void;
17
+ loadLayers(): Promise<void>;
18
+ addLayer(layer: WmsLayerSummary): void;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<AddLayerFromWmsComponent, never>;
20
+ static ɵcmp: i0.ɵɵComponentDeclaration<AddLayerFromWmsComponent, "gn-ui-add-layer-from-wms", never, {}, {}, never, never, false, never>;
21
+ }
22
+ //# sourceMappingURL=add-layer-from-wms.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-layer-from-wms.component.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,iBAAiB,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AACpE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAKhD,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;;AAG9B,qBAKa,wBAAyB,YAAW,MAAM;IASnD,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,iBAAiB;IAT3B,MAAM,SAAK;IACX,OAAO,UAAQ;IACf,MAAM,EAAE,eAAe,EAAE,CAAK;IAC9B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAO;IACtC,SAAS,kBAAwB;IACjC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAO;gBAGxB,SAAS,EAAE,SAAS,EACpB,iBAAiB,EAAE,iBAAiB;IAG9C,QAAQ;IAIF,UAAU;IAsBhB,QAAQ,CAAC,KAAK,EAAE,eAAe;yCAvCpB,wBAAwB;2CAAxB,wBAAwB;CA+CpC"}
@@ -5,20 +5,21 @@ import * as i3 from "./layers-panel/layers-panel.component";
5
5
  import * as i4 from "./add-layer-from-catalog/add-layer-from-catalog.component";
6
6
  import * as i5 from "./map-container/map-container.component";
7
7
  import * as i6 from "./add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component";
8
- import * as i7 from "@angular/common";
9
- import * as i8 from "../../../../ui/map/src/lib/ui-map.module";
10
- import * as i9 from "../../../../ui/layout/src/lib/ui-layout.module";
11
- import * as i10 from "@angular/material/icon";
12
- import * as i11 from "@angular/material/tabs";
13
- import * as i12 from "@ngx-translate/core";
14
- import * as i13 from "../../../search/src/lib/feature-search.module";
15
- import * as i14 from "@ngrx/store";
16
- import * as i15 from "@ngrx/effects";
17
- import * as i16 from "../../../../ui/elements/src/lib/ui-elements.module";
18
- import * as i17 from "../../../../ui/inputs/src/lib/ui-inputs.module";
8
+ import * as i7 from "./add-layer-from-wms/add-layer-from-wms.component";
9
+ import * as i8 from "@angular/common";
10
+ import * as i9 from "../../../../ui/map/src/lib/ui-map.module";
11
+ import * as i10 from "../../../../ui/layout/src/lib/ui-layout.module";
12
+ import * as i11 from "@angular/material/icon";
13
+ import * as i12 from "@angular/material/tabs";
14
+ import * as i13 from "@ngx-translate/core";
15
+ import * as i14 from "../../../search/src/lib/feature-search.module";
16
+ import * as i15 from "@ngrx/store";
17
+ import * as i16 from "@ngrx/effects";
18
+ import * as i17 from "../../../../ui/elements/src/lib/ui-elements.module";
19
+ import * as i18 from "../../../../ui/inputs/src/lib/ui-inputs.module";
19
20
  export declare class FeatureMapModule {
20
21
  static ɵfac: i0.ɵɵFactoryDeclaration<FeatureMapModule, never>;
21
- static ɵmod: i0.ɵɵNgModuleDeclaration<FeatureMapModule, [typeof i1.MapContextComponent, typeof i2.MapInstanceDirective, typeof i3.LayersPanelComponent, typeof i4.AddLayerFromCatalogComponent, typeof i5.MapContainerComponent, typeof i6.AddLayerRecordPreviewComponent], [typeof i7.CommonModule, typeof i8.UiMapModule, typeof i9.UiLayoutModule, typeof i10.MatIconModule, typeof i11.MatTabsModule, typeof i12.TranslateModule, typeof i13.FeatureSearchModule, typeof i14.StoreFeatureModule, typeof i15.EffectsFeatureModule, typeof i16.UiElementsModule, typeof i17.UiInputsModule], [typeof i1.MapContextComponent, typeof i2.MapInstanceDirective, typeof i3.LayersPanelComponent, typeof i4.AddLayerFromCatalogComponent, typeof i5.MapContainerComponent]>;
22
+ static ɵmod: i0.ɵɵNgModuleDeclaration<FeatureMapModule, [typeof i1.MapContextComponent, typeof i2.MapInstanceDirective, typeof i3.LayersPanelComponent, typeof i4.AddLayerFromCatalogComponent, typeof i5.MapContainerComponent, typeof i6.AddLayerRecordPreviewComponent, typeof i7.AddLayerFromWmsComponent], [typeof i8.CommonModule, typeof i9.UiMapModule, typeof i10.UiLayoutModule, typeof i11.MatIconModule, typeof i12.MatTabsModule, typeof i13.TranslateModule, typeof i14.FeatureSearchModule, typeof i15.StoreFeatureModule, typeof i16.EffectsFeatureModule, typeof i17.UiElementsModule, typeof i18.UiInputsModule], [typeof i1.MapContextComponent, typeof i2.MapInstanceDirective, typeof i3.LayersPanelComponent, typeof i4.AddLayerFromCatalogComponent, typeof i5.MapContainerComponent]>;
22
23
  static ɵinj: i0.ɵɵInjectorDeclaration<FeatureMapModule>;
23
24
  }
24
25
  //# sourceMappingURL=feature-map.module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature-map.module.d.ts","sourceRoot":"","sources":["../../../../../src/libs/feature/map/src/lib/feature-map.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAuBA,qBAqCa,gBAAgB;yCAAhB,gBAAgB;0CAAhB,gBAAgB;0CAAhB,gBAAgB;CAAG"}
1
+ {"version":3,"file":"feature-map.module.d.ts","sourceRoot":"","sources":["../../../../../src/libs/feature/map/src/lib/feature-map.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAwBA,qBAsCa,gBAAgB;yCAAhB,gBAAgB;0CAAhB,gBAAgB;0CAAhB,gBAAgB;CAAG"}
@@ -7,6 +7,7 @@ export declare class MetadataContactComponent {
7
7
  contactClick: EventEmitter<Individual>;
8
8
  get shownOrganization(): Organization;
9
9
  get contacts(): Individual[];
10
+ get address(): string[];
10
11
  onOrganizationClick(): void;
11
12
  static ɵfac: i0.ɵɵFactoryDeclaration<MetadataContactComponent, never>;
12
13
  static ɵcmp: i0.ɵɵComponentDeclaration<MetadataContactComponent, "gn-ui-metadata-contact", never, { "metadata": { "alias": "metadata"; "required": false; }; }, { "organizationClick": "organizationClick"; "contactClick": "contactClick"; }, never, never, false, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-contact.component.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,YAAY,EAGb,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,aAAa,EACb,UAAU,EACV,YAAY,EACb,MAAM,2DAA2D,CAAA;;AAElE,qBAMa,wBAAwB;IAC1B,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;IAC/B,iBAAiB,6BAAmC;IACpD,YAAY,2BAAiC;IAEvD,IAAI,iBAAiB,iBAEpB;IAED,IAAI,QAAQ,iBAMX;IAED,mBAAmB;yCAjBR,wBAAwB;2CAAxB,wBAAwB;CAoBpC"}
1
+ {"version":3,"file":"metadata-contact.component.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,YAAY,EAGb,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,aAAa,EACb,UAAU,EACV,YAAY,EACb,MAAM,2DAA2D,CAAA;;AAElE,qBAMa,wBAAwB;IAC1B,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;IAC/B,iBAAiB,6BAAmC;IACpD,YAAY,2BAAiC;IAEvD,IAAI,iBAAiB,iBAEpB;IAED,IAAI,QAAQ,iBAMX;IAED,IAAI,OAAO,aAKV;IAED,mBAAmB;yCAxBR,wBAAwB;2CAAxB,wBAAwB;CA2BpC"}
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown-multiselect.component.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,EACV,YAAY,EAGZ,SAAS,EAGV,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;;AAGrD,qBAMa,4BAA4B;IA8D3B,OAAO,CAAC,gBAAgB;IA7D3B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,OAAO,EAAE,CAAK;IACxB,WAAW,UAAO;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,gBAAgB,SAAK;IACpB,YAAY,0BAAgC;IAC1B,aAAa,EAAE,gBAAgB,CAAA;IAC3B,OAAO,EAAE,mBAAmB,CAAA;IAE5D,gBAAgB,EAAE,UAAU,CAAA;IAE5B,gBAAgB,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAA;IAE9C,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,CAAA;IACjC,gBAAgB,EAAE,iBAAiB,EAAE,CAepC;IACD,cAAc,0DAAqC;IACnD,WAAW,UAAQ;IACnB,YAAY,SAAS;IACrB,gBAAgB,SAAS;IACzB,EAAE,SAA8D;IAEhE,IAAI,kBAAkB,YAErB;IAED,IAAI,eAAe,aAIlB;IAED,IAAI,qBAAqB,aAIxB;IAED,IAAI,YAAY,IAAI,MAAM,GAAG,CAAC,CAAC,CAM9B;gBAEmB,gBAAgB,EAAE,qBAAqB;IAE3D,OAAO,CAAC,QAAQ;IAMhB,WAAW;IAiBX,YAAY;IAIN,oBAAoB,CAAC,KAAK,EAAE,aAAa;IAqB/C,oBAAoB,CAAC,KAAK,EAAE,aAAa;IAgBzC,cAAc;IAId,aAAa;IAIb,cAAc,CAAC,KAAK,EAAE,MAAM;IAS5B,UAAU,CAAC,MAAM,EAAE,MAAM;IAIzB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO;IAOxC,MAAM,CAAC,MAAM,EAAE,MAAM;IAIrB,cAAc,CAAC,KAAK,EAAE,KAAK;IAK3B,qBAAqB,CAAC,KAAK,EAAE,KAAK;yCArKvB,4BAA4B;2CAA5B,4BAA4B;CA0KxC"}
1
+ {"version":3,"file":"dropdown-multiselect.component.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,EACV,YAAY,EAGZ,SAAS,EAGV,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACtB,MAAM,sBAAsB,CAAA;AAE7B,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;;AAMrD,qBAMa,4BAA4B;IA8D3B,OAAO,CAAC,gBAAgB;IA7D3B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,OAAO,EAAE,CAAK;IACxB,WAAW,UAAO;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,gBAAgB,SAAK;IACpB,YAAY,0BAAgC;IAC1B,aAAa,EAAE,gBAAgB,CAAA;IAC3B,OAAO,EAAE,mBAAmB,CAAA;IAE5D,gBAAgB,EAAE,UAAU,CAAA;IAE5B,gBAAgB,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAA;IAE9C,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,CAAA;IACjC,gBAAgB,EAAE,iBAAiB,EAAE,CAepC;IACD,cAAc,0DAAqC;IACnD,WAAW,UAAQ;IACnB,YAAY,SAAS;IACrB,gBAAgB,SAAS;IACzB,EAAE,SAA8D;IAEhE,IAAI,kBAAkB,YAErB;IAED,IAAI,eAAe,aAIlB;IAED,IAAI,qBAAqB,aAIxB;IAED,IAAI,YAAY,IAAI,MAAM,GAAG,CAAC,CAAC,CAM9B;gBAEmB,gBAAgB,EAAE,qBAAqB;IAE3D,OAAO,CAAC,QAAQ;IAMhB,WAAW;IAiBX,YAAY;IAIN,oBAAoB,CAAC,KAAK,EAAE,aAAa;IAqB/C,oBAAoB,CAAC,KAAK,EAAE,aAAa;IAgBzC,cAAc;IAId,aAAa;IAIb,cAAc,CAAC,KAAK,EAAE,MAAM;IAS5B,UAAU,CAAC,MAAM,EAAE,MAAM;IAIzB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO;IAOxC,MAAM,CAAC,MAAM,EAAE,MAAM;IAIrB,cAAc,CAAC,KAAK,EAAE,KAAK;IAK3B,qBAAqB,CAAC,KAAK,EAAE,KAAK;yCArKvB,4BAA4B;2CAA5B,4BAA4B;CA0KxC"}
@@ -5,4 +5,5 @@ export * from './lib/lang.service';
5
5
  export * from './lib/file.translate.loader';
6
6
  export * from './lib/testing/test.translate.module';
7
7
  export * from './lib/embedded.translate.loader';
8
+ export * from './lib/translate.loader.utils';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/libs/util/i18n/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,qCAAqC,CAAA;AACnD,cAAc,iCAAiC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/libs/util/i18n/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,wBAAwB,CAAA;AACtC,cAAc,oBAAoB,CAAA;AAClC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,qCAAqC,CAAA;AACnD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,8BAA8B,CAAA"}
@@ -0,0 +1,9 @@
1
+ type FuzzyFilter = (input: string) => boolean;
2
+ /**
3
+ * This creates a filter function based on a pattern (typically a user-input
4
+ * search text).
5
+ * @param pattern
6
+ */
7
+ export declare function createFuzzyFilter(pattern: string): FuzzyFilter;
8
+ export {};
9
+ //# sourceMappingURL=fuzzy-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fuzzy-filter.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/util/shared/src/lib/utils/fuzzy-filter.ts"],"names":[],"mappings":"AAAA,KAAK,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAA;AAkB7C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,CAQ9D"}
@@ -5,4 +5,5 @@ export * from './geojson';
5
5
  export * from './sort-by';
6
6
  export * from './url';
7
7
  export * from './event';
8
+ export * from './fuzzy-filter';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/util/shared/src/lib/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,qBAAqB,CAAA;AACnC,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,OAAO,CAAA;AACrB,cAAc,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/libs/util/shared/src/lib/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,qBAAqB,CAAA;AACnC,cAAc,WAAW,CAAA;AACzB,cAAc,WAAW,CAAA;AACzB,cAAc,OAAO,CAAA;AACrB,cAAc,SAAS,CAAA;AACvB,cAAc,gBAAgB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "geonetwork-ui",
3
- "version": "2.2.0-dev.c15a456d",
3
+ "version": "2.2.0-dev.f866474c",
4
4
  "engines": {
5
5
  "node": ">=14.17.0"
6
6
  },
@@ -13,6 +13,7 @@ import { map, startWith, tap } from 'rxjs/operators'
13
13
  import { ORGANIZATION_URL_TOKEN } from '../feature-catalog.module'
14
14
  import { OrganizationsServiceInterface } from '../../../../../../libs/common/domain/src/lib/organizations.service.interface'
15
15
  import { SortByField } from '../../../../../../libs/common/domain/src/lib/model/search'
16
+ import { createFuzzyFilter } from '../../../../../../libs/util/shared/src'
16
17
 
17
18
  @Component({
18
19
  selector: 'gn-ui-organisations',
@@ -84,23 +85,8 @@ export class OrganisationsComponent {
84
85
 
85
86
  private filterOrganisations(organisations: Organization[], filterBy: string) {
86
87
  if (!filterBy) return organisations
87
- const filterRegex = new RegExp(
88
- this.normalizeString(filterBy) //ignore accents and case
89
- .replace(/[^a-z0-9\s]/g, ' ') //ignore special characters (also without spaces like l')
90
- .replace(/\s(?=.)/g, '.*') //replace whitespaces by "AND" separator
91
- .replace(/\s/g, ''), //remove potential whitespaces left
92
- 'i'
93
- )
94
- return [...organisations].filter((org) => {
95
- return this.normalizeString(org.name).match(filterRegex)
96
- })
97
- }
98
-
99
- private normalizeString(str: string) {
100
- return str
101
- .normalize('NFD')
102
- .replace(/[\u0300-\u036f]/g, '')
103
- .toLowerCase()
88
+ const filter = createFuzzyFilter(filterBy)
89
+ return organisations.filter((org) => filter(org.name))
104
90
  }
105
91
 
106
92
  private sortOrganisations(
@@ -0,0 +1,55 @@
1
+ <div class="flex items-center mb-5">
2
+ <gn-ui-text-input
3
+ [(value)]="wmsUrl"
4
+ (valueChange)="urlChange.next($event)"
5
+ [hint]="'map.wms.urlInput.hint' | translate"
6
+ class="w-96"
7
+ >
8
+ </gn-ui-text-input>
9
+ </div>
10
+
11
+ <div *ngIf="errorMessage" class="text-red-500 mt-2">
12
+ {{ errorMessage }}
13
+ </div>
14
+
15
+ <div *ngIf="loading">
16
+ <p class="loading-message" translate>map.loading.service</p>
17
+ </div>
18
+
19
+ <div *ngIf="!loading && layers.length > 0">
20
+ <h2 class="font-bold" translate>map.layers.available</h2>
21
+ <ng-container
22
+ *ngFor="let layer of layers"
23
+ [ngTemplateOutlet]="layerTreeItem"
24
+ [ngTemplateOutletContext]="{
25
+ layer: layer
26
+ }"
27
+ ></ng-container>
28
+ </div>
29
+
30
+ <ng-template #layerTreeItem let-layer="layer">
31
+ <div class="flex items-center justify-between layer-tree-item my-2">
32
+ <p class="max-w-xs overflow-hidden overflow-ellipsis whitespace-nowrap">
33
+ {{ layer.title }}
34
+ </p>
35
+ <gn-ui-button
36
+ *ngIf="layer.name"
37
+ class="layer-add-btn"
38
+ type="primary"
39
+ (buttonClick)="addLayer(layer)"
40
+ extraClass="text-sm !px-2 !py-1"
41
+ translate
42
+ ><span translate> map.layer.add </span></gn-ui-button
43
+ >
44
+ </div>
45
+ <div *ngIf="layer.children?.length > 0" class="ml-4">
46
+ <ng-container
47
+ *ngFor="let child of layer.children"
48
+ [ngTemplateOutlet]="layerTreeItem"
49
+ [ngTemplateOutletContext]="{
50
+ layer: child
51
+ }"
52
+ >
53
+ </ng-container>
54
+ </div>
55
+ </ng-template>
@@ -0,0 +1,63 @@
1
+ import { Component, ChangeDetectorRef, OnInit } from '@angular/core'
2
+ import { WmsEndpoint, WmsLayerSummary } from '@camptocamp/ogc-client'
3
+ import { MapFacade } from '../+state/map.facade'
4
+ import {
5
+ MapContextLayerModel,
6
+ MapContextLayerTypeEnum,
7
+ } from '../map-context/map-context.model'
8
+ import { Subject } from 'rxjs'
9
+ import { debounceTime } from 'rxjs/operators'
10
+
11
+ @Component({
12
+ selector: 'gn-ui-add-layer-from-wms',
13
+ templateUrl: './add-layer-from-wms.component.html',
14
+ styleUrls: ['./add-layer-from-wms.component.css'],
15
+ })
16
+ export class AddLayerFromWmsComponent implements OnInit {
17
+ wmsUrl = ''
18
+ loading = false
19
+ layers: WmsLayerSummary[] = []
20
+ wmsEndpoint: WmsEndpoint | null = null
21
+ urlChange = new Subject<string>()
22
+ errorMessage: string | null = null
23
+
24
+ constructor(
25
+ private mapFacade: MapFacade,
26
+ private changeDetectorRef: ChangeDetectorRef
27
+ ) {}
28
+
29
+ ngOnInit() {
30
+ this.urlChange.pipe(debounceTime(700)).subscribe(() => this.loadLayers())
31
+ }
32
+
33
+ async loadLayers() {
34
+ this.errorMessage = null
35
+ try {
36
+ this.loading = true
37
+
38
+ if (this.wmsUrl.trim() === '') {
39
+ this.layers = []
40
+ return
41
+ }
42
+
43
+ this.wmsEndpoint = await new WmsEndpoint(this.wmsUrl).isReady()
44
+ this.layers = this.wmsEndpoint.getLayers()
45
+ } catch (error) {
46
+ const err = error as Error
47
+ this.layers = []
48
+ this.errorMessage = 'Error loading layers: ' + err.message
49
+ } finally {
50
+ this.loading = false
51
+ this.changeDetectorRef.markForCheck()
52
+ }
53
+ }
54
+
55
+ addLayer(layer: WmsLayerSummary) {
56
+ const layerToAdd: MapContextLayerModel = {
57
+ name: layer.name,
58
+ url: this.wmsUrl.toString(),
59
+ type: MapContextLayerTypeEnum.WMS,
60
+ }
61
+ this.mapFacade.addLayer({ ...layerToAdd, title: layer.title })
62
+ }
63
+ }
@@ -20,6 +20,7 @@ import { MapContainerComponent } from './map-container/map-container.component'
20
20
  import { AddLayerRecordPreviewComponent } from './add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component'
21
21
  import { UiElementsModule } from '../../../../../libs/ui/elements/src'
22
22
  import { UiInputsModule } from '../../../../../libs/ui/inputs/src'
23
+ import { AddLayerFromWmsComponent } from './add-layer-from-wms/add-layer-from-wms.component'
23
24
 
24
25
  @NgModule({
25
26
  declarations: [
@@ -29,6 +30,7 @@ import { UiInputsModule } from '../../../../../libs/ui/inputs/src'
29
30
  AddLayerFromCatalogComponent,
30
31
  MapContainerComponent,
31
32
  AddLayerRecordPreviewComponent,
33
+ AddLayerFromWmsComponent,
32
34
  ],
33
35
  exports: [
34
36
  MapContextComponent,
@@ -31,7 +31,9 @@
31
31
  </div>
32
32
  </mat-tab>
33
33
  <mat-tab [label]="'map.add.layer.wms' | translate" bodyClass="h-full">
34
- <div class="p-3 h-full">Add from WMS</div>
34
+ <div class="p-3">
35
+ <gn-ui-add-layer-from-wms></gn-ui-add-layer-from-wms>
36
+ </div>
35
37
  </mat-tab>
36
38
  <mat-tab [label]="'map.add.layer.wfs' | translate" bodyClass="h-full">
37
39
  <div class="p-3 h-full">Add from WFS</div>
@@ -1,32 +1,98 @@
1
- <div *ngIf="shownOrganization" class="mb-6 sm:mb-12">
2
- <p class="text-gray-700 text-xs mb-3 uppercase" translate>
3
- record.metadata.contact
4
- </p>
5
- <div class="flex mb-1">
1
+ <div class="py-5 px-5 rounded bg-gray-100 text-black mb-6 sm:mb-12">
2
+ <div class="grid gap-3">
3
+ <div>
4
+ <p class="text-sm font-medium" translate>record.metadata.contact</p>
5
+ </div>
6
6
  <div
7
- class="text-primary font-title text-21 mr-2 cursor-pointer hover:underline"
8
- (click)="onOrganizationClick()"
7
+ *ngIf="shownOrganization?.logoUrl?.href"
8
+ class="flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden"
9
9
  >
10
- {{ shownOrganization.name }}
10
+ <gn-ui-thumbnail
11
+ class="relative h-full w-full"
12
+ [thumbnailUrl]="shownOrganization.logoUrl.href"
13
+ fit="contain"
14
+ ></gn-ui-thumbnail>
15
+ </div>
16
+ <div class="grid gap-1">
17
+ <div class="flex">
18
+ <div
19
+ class="text-primary font-title text-21 mr-2 cursor-pointer hover:underline"
20
+ (click)="onOrganizationClick()"
21
+ data-cy="organization-name"
22
+ >
23
+ {{ shownOrganization.name }}
24
+ </div>
25
+ </div>
26
+ <div *ngIf="shownOrganization?.website">
27
+ <a
28
+ [href]="shownOrganization.website"
29
+ target="_blank"
30
+ class="contact-website text-primary text-sm cursor-pointer hover:underline transition-all"
31
+ >{{ shownOrganization.website }}
32
+ <mat-icon
33
+ class="material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0"
34
+ >open_in_new</mat-icon
35
+ >
36
+ </a>
37
+ </div>
38
+ </div>
39
+ <div class="grid gap-5 py-3 overflow-hidden">
40
+ <div *ngIf="contacts[0]?.phone">
41
+ <div class="flex">
42
+ <mat-icon
43
+ class="material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0"
44
+ >call_outline</mat-icon
45
+ >
46
+ <div class="flex flex-col ml-2">
47
+ <p class="text-sm">{{ contacts[0].phone }}</p>
48
+ </div>
49
+ </div>
50
+ </div>
51
+ <div *ngIf="contacts[0]?.email">
52
+ <div class="flex">
53
+ <mat-icon
54
+ class="material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0"
55
+ >
56
+ mail_outline</mat-icon
57
+ >
58
+ <a
59
+ *ngIf="contacts.length"
60
+ [href]="'mailto:' + contacts[0].email"
61
+ class="text-sm hover:underline ml-2"
62
+ target="_blank"
63
+ data-cy="contact-email"
64
+ >{{ contacts[0].email }}</a
65
+ >
66
+ </div>
67
+ </div>
68
+ <div *ngIf="contacts[0]?.firstName || contacts[0]?.lastName">
69
+ <div class="flex">
70
+ <mat-icon
71
+ class="material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0"
72
+ >person_outline</mat-icon
73
+ >
74
+ <div class="flex flex-col ml-2">
75
+ <p class="text-sm">
76
+ {{ contacts[0]?.firstName || '' }}
77
+ {{ contacts[0]?.lastName || '' }}
78
+ </p>
79
+ </div>
80
+ </div>
81
+ </div>
82
+ <div *ngIf="contacts[0]?.address">
83
+ <div class="flex">
84
+ <mat-icon
85
+ class="material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0"
86
+ >
87
+ location_on</mat-icon
88
+ >
89
+ <div class="flex flex-col ml-2">
90
+ <p *ngFor="let addressPart of address" class="text-sm">
91
+ {{ addressPart }}
92
+ </p>
93
+ </div>
94
+ </div>
95
+ </div>
11
96
  </div>
12
- </div>
13
- <a
14
- *ngIf="contacts.length"
15
- [href]="'mailto:' + contacts[0].email"
16
- class="text-gray-700 text-sm hover:underline"
17
- target="_blank"
18
- >{{ contacts[0].email }}</a
19
- >
20
- <div *ngIf="shownOrganization.website" class="mb-2">
21
- <a
22
- [href]="shownOrganization.website"
23
- target="_blank"
24
- class="contact-website text-primary text-sm cursor-pointer hover:underline transition-all"
25
- >{{ shownOrganization.website }}
26
- <mat-icon
27
- class="material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75"
28
- >open_in_new</mat-icon
29
- >
30
- </a>
31
97
  </div>
32
98
  </div>
@@ -34,6 +34,13 @@ export class MetadataContactComponent {
34
34
  )
35
35
  }
36
36
 
37
+ get address() {
38
+ const addressParts = this.contacts[0].address
39
+ .split(',')
40
+ .map((part) => part.trim())
41
+ return addressParts
42
+ }
43
+
37
44
  onOrganizationClick() {
38
45
  this.organizationClick.emit(this.shownOrganization)
39
46
  }
@@ -17,7 +17,10 @@ import {
17
17
  } from '@angular/cdk/overlay'
18
18
  import { take } from 'rxjs/operators'
19
19
  import { Choice } from './dropdown-multiselect.model'
20
- import { propagateToDocumentOnly } from '../../../../../../libs/util/shared/src'
20
+ import {
21
+ createFuzzyFilter,
22
+ propagateToDocumentOnly,
23
+ } from '../../../../../../libs/util/shared/src'
21
24
 
22
25
  @Component({
23
26
  selector: 'gn-ui-dropdown-multiselect',
@@ -74,9 +77,9 @@ export class DropdownMultiselectComponent {
74
77
  }
75
78
 
76
79
  get filteredChoicesByText() {
77
- return this.choices.filter((choice) =>
78
- choice.label.toLowerCase().includes(this.searchInputValue?.toLowerCase())
79
- )
80
+ if (!this.searchInputValue) return this.choices
81
+ const filter = createFuzzyFilter(this.searchInputValue)
82
+ return this.choices.filter((choice) => filter(choice.label))
80
83
  }
81
84
 
82
85
  get focusedIndex(): number | -1 {
@@ -5,3 +5,4 @@ export * from './lib/lang.service'
5
5
  export * from './lib/file.translate.loader'
6
6
  export * from './lib/testing/test.translate.module'
7
7
  export * from './lib/embedded.translate.loader'
8
+ export * from './lib/translate.loader.utils'
@@ -0,0 +1,32 @@
1
+ type FuzzyFilter = (input: string) => boolean
2
+
3
+ function normalize(input: string) {
4
+ return input
5
+ .toLowerCase()
6
+ .normalize('NFD') // explode composite chars (e.g. é) into multiple chars
7
+ .replace(/[\u0300-\u036f]/g, '') // remove accents
8
+ .replace(/œ/g, 'oe') // remove accents
9
+ .replace(/[^a-z0-9\s]/g, ' ') // replace special characters with space
10
+ }
11
+
12
+ function asNormalizedParts(input: string): string[] {
13
+ return normalize(input)
14
+ .split(/\s+/)
15
+ .map((part) => part.trim())
16
+ .filter((part) => part.length > 0)
17
+ }
18
+
19
+ /**
20
+ * This creates a filter function based on a pattern (typically a user-input
21
+ * search text).
22
+ * @param pattern
23
+ */
24
+ export function createFuzzyFilter(pattern: string): FuzzyFilter {
25
+ const patternParts = asNormalizedParts(pattern)
26
+ return (input: string) => {
27
+ const inputParts = asNormalizedParts(input)
28
+ return patternParts.every((patternPart) =>
29
+ inputParts.some((part) => part.includes(patternPart))
30
+ )
31
+ }
32
+ }
@@ -5,3 +5,4 @@ export * from './geojson'
5
5
  export * from './sort-by'
6
6
  export * from './url'
7
7
  export * from './event'
8
+ export * from './fuzzy-filter'
@@ -175,10 +175,14 @@
175
175
  "map.add.layer.file": "Aus einer Datei",
176
176
  "map.add.layer.wfs": "Aus WFS",
177
177
  "map.add.layer.wms": "Aus WMS",
178
+ "map.layer.add": "",
179
+ "map.layers.available": "",
178
180
  "map.layers.list": "Ebenen",
179
181
  "map.loading.data": "Kartendaten werden geladen...",
182
+ "map.loading.service": "",
180
183
  "map.navigation.message": "Bitte verwenden Sie STRG + Maus (oder zwei Finger auf einem Mobilgerät), um die Karte zu navigieren",
181
184
  "map.select.layer": "Datenquelle",
185
+ "map.wms.urlInput.hint": "",
182
186
  "multiselect.filter.placeholder": "Suche",
183
187
  "nav.back": "Zurück",
184
188
  "next": "weiter",
@@ -175,10 +175,14 @@
175
175
  "map.add.layer.file": "From a file",
176
176
  "map.add.layer.wfs": "From WFS",
177
177
  "map.add.layer.wms": "From WMS",
178
+ "map.layer.add": "Add",
179
+ "map.layers.available": "Available Layers",
178
180
  "map.layers.list": "Layers",
179
181
  "map.loading.data": "Loading map data...",
182
+ "map.loading.service": "Loading service...",
180
183
  "map.navigation.message": "Please use CTRL + mouse (or two fingers on mobile) to navigate the map",
181
184
  "map.select.layer": "Data source",
185
+ "map.wms.urlInput.hint": "Enter WMS service URL",
182
186
  "multiselect.filter.placeholder": "Search",
183
187
  "nav.back": "Back",
184
188
  "next": "next",
@@ -175,10 +175,14 @@
175
175
  "map.add.layer.file": "",
176
176
  "map.add.layer.wfs": "",
177
177
  "map.add.layer.wms": "",
178
+ "map.layer.add": "",
179
+ "map.layers.available": "",
178
180
  "map.layers.list": "",
179
181
  "map.loading.data": "",
182
+ "map.loading.service": "",
180
183
  "map.navigation.message": "",
181
184
  "map.select.layer": "",
185
+ "map.wms.urlInput.hint": "",
182
186
  "multiselect.filter.placeholder": "",
183
187
  "nav.back": "",
184
188
  "next": "",
@@ -175,10 +175,14 @@
175
175
  "map.add.layer.file": "",
176
176
  "map.add.layer.wfs": "",
177
177
  "map.add.layer.wms": "",
178
+ "map.layer.add": "",
179
+ "map.layers.available": "",
178
180
  "map.layers.list": "",
179
181
  "map.loading.data": "Chargement des données...",
182
+ "map.loading.service": "",
180
183
  "map.navigation.message": "Veuillez utiliser CTRL + souris (ou deux doigts sur mobile) pour naviguer sur la carte",
181
184
  "map.select.layer": "Source de données",
185
+ "map.wms.urlInput.hint": "",
182
186
  "multiselect.filter.placeholder": "Rechercher",
183
187
  "nav.back": "Retour",
184
188
  "next": "suivant",