diff --git a/package-lock.json b/package-lock.json index b7ae0016a..9084c5c24 100644 --- a/package-lock.json +++ b/package-lock.json @@ -855,6 +855,14 @@ "tslib": "^1.9.0" } }, + "@mat-datetimepicker/core": { + "version": "3.0.0-beta.0", + "resolved": "https://registry.npmjs.org/@mat-datetimepicker/core/-/core-3.0.0-beta.0.tgz", + "integrity": "sha512-bsEziG0qmzVmg5PoBYqdaoUm58M1m6Qf0JIS0xHMFkvuRtLKJsA4G1LJ9Up5ZruKMW1rmtE3wuBeZmyln4vsQQ==", + "requires": { + "tslib": "^1.9.0" + } + }, "@ngtools/json-schema": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.1.0.tgz", @@ -1972,9 +1980,9 @@ } }, "base64-arraybuffer": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz", - "integrity": "sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ==" + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" }, "base64-js": { "version": "1.3.1", @@ -3914,11 +3922,11 @@ "dev": true }, "css-line-break": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-1.1.1.tgz", - "integrity": "sha512-1feNVaM4Fyzdj4mKPIQNL2n70MmuYzAXZ1aytlROFX1JsOo070OsugwGjj7nl6jnDJWHDM8zRZswkmeYVWZJQA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-1.0.1.tgz", + "integrity": "sha1-GfIGOjPpX7KDG4ZEbAuAwYivRQo=", "requires": { - "base64-arraybuffer": "^0.2.0" + "base64-arraybuffer": "^0.1.5" } }, "css-parse": { @@ -5384,8 +5392,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -5406,14 +5413,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5428,20 +5433,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -5558,8 +5560,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -5571,7 +5572,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -5586,7 +5586,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -5594,14 +5593,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -5620,7 +5617,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -5701,8 +5697,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -5714,7 +5709,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -5800,8 +5794,7 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -5837,7 +5830,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -5857,7 +5849,6 @@ "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -5901,14 +5892,12 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, @@ -7037,11 +7026,11 @@ "dev": true }, "html2canvas": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.0.0-rc.3.tgz", - "integrity": "sha512-nWRk34IO3QopcDYpiPAbRW6VoI10H7uxEhcSFjox0JB6wZOMd6Mak+NqHPLljSFFEOvBjPafyRgcHnuWcFpWvg==", + "version": "1.0.0-alpha.12", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.0.0-alpha.12.tgz", + "integrity": "sha1-OxmS48mz9WBjw1/WIElPN+uohRM=", "requires": { - "css-line-break": "1.1.1" + "css-line-break": "1.0.1" } }, "http-auth": { @@ -8378,7 +8367,7 @@ "integrity": "sha512-J9X76xnncMw+wIqb15HeWfPMqPwYxSpPY8yWPJ7rAZN/ZDzFkjCSZObryCyUe8zbrVRNiuCnIeQteCzMn7GnWw==", "requires": { "canvg": "1.5.3", - "file-saver": "github:eligrey/FileSaver.js#1.3.8", + "file-saver": "github:eligrey/FileSaver.js#e865e37af9f9947ddcced76b549e27dc45c1cb2e", "html2canvas": "1.0.0-alpha.12", "omggif": "1.0.7", "promise-polyfill": "8.1.0", diff --git a/package.json b/package.json index 81ac9e9d7..6ca72e069 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ "@igo2/geo": "^1.0.0-alpha.6", "@igo2/integration": "^1.0.0-alpha.6", "@igo2/utils": "^1.0.0-alpha.6", + "@mat-datetimepicker/core": "^3.0.0-beta.0", "classlist.js": "^1.1.20150312", "core-js": "^2.6.5", "file-saver": "^1.3.8", diff --git a/src/app/pages/portal/portal.component.html b/src/app/pages/portal/portal.component.html index 6b66f0016..fa6ec3c09 100644 --- a/src/app/pages/portal/portal.component.html +++ b/src/app/pages/portal/portal.component.html @@ -19,16 +19,19 @@ + (searchTermChange)="onSearchTermChange($event)" + (search)="onSearch($event)" + (clearFeature)="onClearSearch()"> + [(opened)]="sidenavOpened" + (toolChange)="toolChanged($event)"> ) { - const feature = result.data; + const feature = result ? result.data : undefined; // Somethimes features have no geometry. It happens with some GetFeatureInfo - if (feature.geometry === undefined) { + if (!feature || feature.geometry === undefined) { + this.map.overlay.clear(); return; } this.map.overlay.setFeatures([feature], FeatureMotion.Default); } - private onClearSearch() { + public onClearSearch() { this.searchStore.clear(); this.map.overlay.clear(); // this.closeToastPanel(); diff --git a/src/app/pages/portal/sidenav/sidenav.component.ts b/src/app/pages/portal/sidenav/sidenav.component.ts index 79d25068b..fc66a5f2c 100644 --- a/src/app/pages/portal/sidenav/sidenav.component.ts +++ b/src/app/pages/portal/sidenav/sidenav.component.ts @@ -9,10 +9,9 @@ import { } from '@angular/core'; import { BehaviorSubject, Subscription } from 'rxjs'; -import olFormatGeoJSON from 'ol/format/GeoJSON'; -import { Tool, Toolbox, getEntityTitle, FlexibleState } from '@igo2/common'; -import { SearchResult, IgoMap, moveToOlFeatures } from '@igo2/geo'; +import { Tool, Toolbox } from '@igo2/common'; +import { IgoMap } from '@igo2/geo'; import { ToolState } from '@igo2/integration'; @Component({ @@ -23,10 +22,8 @@ import { ToolState } from '@igo2/integration'; }) export class SidenavComponent implements OnInit, OnDestroy { title$: BehaviorSubject = new BehaviorSubject(undefined); - topPanelState: FlexibleState = 'initial'; private activeTool$$: Subscription; - private format = new olFormatGeoJSON(); @Input() get map(): IgoMap { @@ -37,20 +34,6 @@ export class SidenavComponent implements OnInit, OnDestroy { } private _map: IgoMap; - @Input() - get searchResult(): SearchResult { - return this._searchResult; - } - set searchResult(value: SearchResult) { - this._searchResult = value; - if (!value) { - this.topPanelState = 'initial'; - } else if (this.topPanelState === 'initial') { - this.topPanelState = 'collapsed'; - } - } - private _searchResult: SearchResult; - @Input() get opened(): boolean { return this._opened; @@ -66,24 +49,18 @@ export class SidenavComponent implements OnInit, OnDestroy { private _opened: boolean; @Output() openedChange = new EventEmitter(); + @Output() toolChange = new EventEmitter(); get toolbox(): Toolbox { return this.toolState.toolbox; } - get panelTitle(): string { - let title; - if (this.searchResult !== undefined) { - title = getEntityTitle(this.searchResult); - } - return title; - } - constructor(private toolState: ToolState) {} ngOnInit() { this.activeTool$$ = this.toolbox.activeTool$.subscribe((tool: Tool) => { this.title$.next(tool ? tool.title : 'IGO'); + this.toolChange.emit(tool); }); } @@ -98,22 +75,4 @@ export class SidenavComponent implements OnInit, OnDestroy { onUnselectButtonClick() { this.toolbox.deactivateTool(); } - - zoomToFeatureExtent() { - if (this.searchResult.data.geometry) { - const olFeature = this.format.readFeature(this.searchResult.data, { - dataProjection: this.searchResult.data.geometry.projection, - featureProjection: this.map.projection - }); - moveToOlFeatures(this.map, olFeature); - } - } - - toggleTopPanel() { - if (this.topPanelState === 'collapsed') { - this.topPanelState = 'expanded'; - } else { - this.topPanelState = 'collapsed'; - } - } } diff --git a/src/app/pages/portal/toast-panel/toast-panel.component.html b/src/app/pages/portal/toast-panel/toast-panel.component.html index f8ca96726..a020cd7a3 100644 --- a/src/app/pages/portal/toast-panel/toast-panel.component.html +++ b/src/app/pages/portal/toast-panel/toast-panel.component.html @@ -1,6 +1,6 @@ diff --git a/src/app/pages/portal/toast-panel/toast-panel.component.ts b/src/app/pages/portal/toast-panel/toast-panel.component.ts index 1a62a89ce..863ac8ed9 100644 --- a/src/app/pages/portal/toast-panel/toast-panel.component.ts +++ b/src/app/pages/portal/toast-panel/toast-panel.component.ts @@ -85,6 +85,7 @@ export class ToastPanelComponent { unselectResult() { this.resultSelected$.next(undefined); + this.resultSelect.emit(undefined); this.store.state.clear(); } diff --git a/src/app/pages/portal/toast-panel/toast-panel.module.ts b/src/app/pages/portal/toast-panel/toast-panel.module.ts index 95a12fbba..a1749fc45 100644 --- a/src/app/pages/portal/toast-panel/toast-panel.module.ts +++ b/src/app/pages/portal/toast-panel/toast-panel.module.ts @@ -1,6 +1,10 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; -import { MatIconModule, MatButtonModule } from '@angular/material'; +import { + MatIconModule, + MatButtonModule, + MatTooltipModule +} from '@angular/material'; import { IgoPanelModule, IgoStopPropagationModule } from '@igo2/common'; import { IgoLanguageModule } from '@igo2/core'; @@ -13,6 +17,7 @@ import { ToastPanelComponent } from './toast-panel.component'; CommonModule, MatIconModule, MatButtonModule, + MatTooltipModule, IgoLanguageModule, IgoPanelModule, IgoStopPropagationModule, diff --git a/src/environments/environment.ts b/src/environments/environment.ts index 3595b763b..f8c983ef4 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -28,8 +28,8 @@ export const environment: Environment = { allowAnonymous: true }, context: { - url: "/apis/igo2", - defaultContextUri: "5" + url: '/apis/igo2', + defaultContextUri: '5' }, searchSources: { nominatim: { diff --git a/src/locale/en.json b/src/locale/en.json index c69365ba6..7f3acba4e 100644 --- a/src/locale/en.json +++ b/src/locale/en.json @@ -4,6 +4,10 @@ "close": "Close Menu", "open": "Open Menu" }, + "toastPanel": { + "title": "Entities found on the map", + "listButton": "Return to the list of entities" + }, "IGO": "IGO", "noEntityStore": "No tables available for this dataset", "coordinates": "Show coordinates,", diff --git a/src/locale/fr.json b/src/locale/fr.json index 075cd24b7..d2e8b49bd 100644 --- a/src/locale/fr.json +++ b/src/locale/fr.json @@ -4,6 +4,10 @@ "close": "Fermer le menu", "open": "Menu" }, + "toastPanel": { + "title": "Entités trouvées sur la carte", + "listButton": "Retourner à la liste des entités" + }, "IGO": "IGO", "noEntityStore": "Aucune table disponible pour ce jeu de données", "coordinates": "Afficher les coordonnées",