From ccb7f5424f05a3290856d2ec5c4ed7c276ce1ff1 Mon Sep 17 00:00:00 2001
From: Alexandre Caron
Date: Wed, 22 May 2024 14:12:40 -0400
Subject: [PATCH] WIP
---
.gitignore | 6 -
src/app/app.component.html | 9 -
src/app/app.component.ts | 2 +-
src/app/{app.routing.ts => app.routes.ts} | 15 +-
.../basic-screen/basic-screen.component.html | 10 -
.../basic-screen.component.spec.ts | 23 --
.../basic-screen/basic-screen.component.ts | 28 --
.../map-screen-panel.component.html | 22 --
.../map-screen-panel.component.scss | 0
.../map-screen-panel.component.spec.ts | 23 --
.../map-screen-panel.component.ts | 45 ---
.../map-screen/map-screen.component.html | 106 ------
.../map-screen/map-screen.component.scss | 80 -----
.../screen/map-screen/map-screen.component.ts | 310 ------------------
.../map-screen/shared/map-screen.interface.ts | 1 -
.../search-results-panel.component.html | 29 --
.../search-results-panel.component.scss | 3 -
.../search-results-panel.component.ts | 95 ------
.../search-results-panel.utils.ts | 77 -----
.../sidenav-toggle.component.html | 11 -
.../sidenav-toggle.component.scss | 7 -
.../sidenav-toggle.component.spec.ts | 23 --
.../sidenav-toggle.component.ts | 47 ---
.../about-sub-page.component.html | 7 +-
.../about-sub-page.component.ts | 12 +-
src/app/pages/about/about.component.html | 6 +-
src/app/pages/about/about.component.ts | 3 +-
.../{about.routing.ts => about.routes.ts} | 4 +-
.../contact-us/contact-us.component.html | 12 +
.../contact-us/contact-us.component.scss} | 0
.../contact-us/contact-us.component.spec.ts} | 12 +-
.../pages/contact-us/contact-us.component.ts | 20 ++
src/app/pages/home/home.component.html | 6 +-
src/app/pages/home/home.component.ts | 10 +-
src/app/pages/map/map.component.html | 2 +-
src/app/pages/map/map.component.ts | 12 +-
src/environments/environment.ts | 12 +-
src/environments/environnement.interface.ts | 3 +-
src/main.ts | 4 +-
src/polyfills.ts | 5 -
tsconfig.json | 6 +-
41 files changed, 109 insertions(+), 999 deletions(-)
rename src/app/{app.routing.ts => app.routes.ts} (53%)
delete mode 100644 src/app/components/screen/basic-screen/basic-screen.component.html
delete mode 100644 src/app/components/screen/basic-screen/basic-screen.component.spec.ts
delete mode 100644 src/app/components/screen/basic-screen/basic-screen.component.ts
delete mode 100644 src/app/components/screen/map-screen/map-screen-panel/map-screen-panel.component.html
delete mode 100644 src/app/components/screen/map-screen/map-screen-panel/map-screen-panel.component.scss
delete mode 100644 src/app/components/screen/map-screen/map-screen-panel/map-screen-panel.component.spec.ts
delete mode 100644 src/app/components/screen/map-screen/map-screen-panel/map-screen-panel.component.ts
delete mode 100644 src/app/components/screen/map-screen/map-screen.component.html
delete mode 100644 src/app/components/screen/map-screen/map-screen.component.scss
delete mode 100644 src/app/components/screen/map-screen/map-screen.component.ts
delete mode 100644 src/app/components/screen/map-screen/shared/map-screen.interface.ts
delete mode 100644 src/app/components/search-results/search-results-panel.component.html
delete mode 100644 src/app/components/search-results/search-results-panel.component.scss
delete mode 100644 src/app/components/search-results/search-results-panel.component.ts
delete mode 100644 src/app/components/search-results/search-results-panel.utils.ts
delete mode 100644 src/app/components/sidenav/sidenav-toggle/sidenav-toggle.component.html
delete mode 100644 src/app/components/sidenav/sidenav-toggle/sidenav-toggle.component.scss
delete mode 100644 src/app/components/sidenav/sidenav-toggle/sidenav-toggle.component.spec.ts
delete mode 100644 src/app/components/sidenav/sidenav-toggle/sidenav-toggle.component.ts
rename src/app/pages/about/{about.routing.ts => about.routes.ts} (81%)
create mode 100644 src/app/pages/contact-us/contact-us.component.html
rename src/app/{components/screen/basic-screen/basic-screen.component.scss => pages/contact-us/contact-us.component.scss} (100%)
rename src/app/{components/screen/map-screen/map-screen.component.spec.ts => pages/contact-us/contact-us.component.spec.ts} (53%)
create mode 100644 src/app/pages/contact-us/contact-us.component.ts
diff --git a/.gitignore b/.gitignore
index 69d4c900..411e4249 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,5 @@
# See https://help.github.com/ignore-files/ for more about ignoring files.
-# bundled locale for the demo
-/src/locale/libs_locale
-
# compiled output
/dist
/tmp
@@ -39,6 +36,3 @@ testem.log
#System Files
.DS_Store
Thumbs.db
-
-#Compodoc
-/documentation
diff --git a/src/app/app.component.html b/src/app/app.component.html
index fdbb46bf..cead4573 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -12,14 +12,5 @@
[isHandset]="isHandset()"
[options]="config.navigation?.options"
>
-
-
- add
-
-
- delete
-
- Déconnexion
-
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index ae2ce2ab..7ccb5ca7 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -20,7 +20,7 @@ import { DomUtils } from '@igo2/utils';
import { delay, first } from 'rxjs';
import { EnvironmentOptions } from '../environments/environnement.interface';
-import { routes } from './app.routing';
+import { routes } from './app.routes';
import { AppService } from './app.service';
@Component({
diff --git a/src/app/app.routing.ts b/src/app/app.routes.ts
similarity index 53%
rename from src/app/app.routing.ts
rename to src/app/app.routes.ts
index ec11314e..7f15b6a6 100644
--- a/src/app/app.routing.ts
+++ b/src/app/app.routes.ts
@@ -1,6 +1,6 @@
-import { Routes } from '@angular/router';
+import { INavigationRoutes } from '@igo2/sdg';
-export const routes: Routes = [
+export const routes: INavigationRoutes = [
{ path: '', redirectTo: '', pathMatch: 'full' },
{
path: '',
@@ -18,6 +18,15 @@ export const routes: Routes = [
path: 'en-savoir-plus',
title: 'En savoir plus',
loadChildren: () =>
- import('./pages/about/about.routing').then((m) => m.routes)
+ import('./pages/about/about.routes').then((m) => m.routes)
+ },
+ {
+ path: 'contact-us',
+ title: 'header.contactUs',
+ hidden: true,
+ loadComponent: () =>
+ import('./pages/contact-us/contact-us.component').then(
+ (m) => m.ContactUsComponent
+ )
}
];
diff --git a/src/app/components/screen/basic-screen/basic-screen.component.html b/src/app/components/screen/basic-screen/basic-screen.component.html
deleted file mode 100644
index 5e4950fb..00000000
--- a/src/app/components/screen/basic-screen/basic-screen.component.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
diff --git a/src/app/components/screen/basic-screen/basic-screen.component.spec.ts b/src/app/components/screen/basic-screen/basic-screen.component.spec.ts
deleted file mode 100644
index e59e2bb8..00000000
--- a/src/app/components/screen/basic-screen/basic-screen.component.spec.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { BasicScreenComponent } from './basic-screen.component';
-
-describe('BasicScreenComponent', () => {
- let component: BasicScreenComponent;
- let fixture: ComponentFixture;
-
- beforeEach(async () => {
- await TestBed.configureTestingModule({
- imports: [BasicScreenComponent]
- })
- .compileComponents();
-
- fixture = TestBed.createComponent(BasicScreenComponent);
- component = fixture.componentInstance;
- fixture.detectChanges();
- });
-
- it('should create', () => {
- expect(component).toBeTruthy();
- });
-});
diff --git a/src/app/components/screen/basic-screen/basic-screen.component.ts b/src/app/components/screen/basic-screen/basic-screen.component.ts
deleted file mode 100644
index bc7bc642..00000000
--- a/src/app/components/screen/basic-screen/basic-screen.component.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-import {
- ChangeDetectionStrategy,
- Component,
- Signal,
- input
-} from '@angular/core';
-
-import { BreadcrumbsComponent } from '@igo2/sdg';
-
-import { AppService } from '../../../app.service';
-
-@Component({
- selector: 'app-basic-screen',
- standalone: true,
- imports: [BreadcrumbsComponent],
- changeDetection: ChangeDetectionStrategy.OnPush,
- templateUrl: './basic-screen.component.html',
- styleUrl: './basic-screen.component.scss'
-})
-export class BasicScreenComponent {
- title = input.required();
-
- get isHandset(): Signal {
- return this.appService.isHandset;
- }
-
- constructor(private appService: AppService) {}
-}
diff --git a/src/app/components/screen/map-screen/map-screen-panel/map-screen-panel.component.html b/src/app/components/screen/map-screen/map-screen-panel/map-screen-panel.component.html
deleted file mode 100644
index 2b9efe49..00000000
--- a/src/app/components/screen/map-screen/map-screen-panel/map-screen-panel.component.html
+++ /dev/null
@@ -1,22 +0,0 @@
-@switch (type()) {
- @case ('filter') {
-
- }
- @case ('legend') {
-
- }
- @case ('query') {
-
- }
- @case ('search') {
-
- }
-}
diff --git a/src/app/components/screen/map-screen/map-screen-panel/map-screen-panel.component.scss b/src/app/components/screen/map-screen/map-screen-panel/map-screen-panel.component.scss
deleted file mode 100644
index e69de29b..00000000
diff --git a/src/app/components/screen/map-screen/map-screen-panel/map-screen-panel.component.spec.ts b/src/app/components/screen/map-screen/map-screen-panel/map-screen-panel.component.spec.ts
deleted file mode 100644
index fc7a1672..00000000
--- a/src/app/components/screen/map-screen/map-screen-panel/map-screen-panel.component.spec.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { MapScreenPanelComponent } from './map-screen-panel.component';
-
-describe('MapScreenPanelComponent', () => {
- let component: MapScreenPanelComponent;
- let fixture: ComponentFixture;
-
- beforeEach(async () => {
- await TestBed.configureTestingModule({
- imports: [MapScreenPanelComponent]
- })
- .compileComponents();
-
- fixture = TestBed.createComponent(MapScreenPanelComponent);
- component = fixture.componentInstance;
- fixture.detectChanges();
- });
-
- it('should create', () => {
- expect(component).toBeTruthy();
- });
-});
diff --git a/src/app/components/screen/map-screen/map-screen-panel/map-screen-panel.component.ts b/src/app/components/screen/map-screen/map-screen-panel/map-screen-panel.component.ts
deleted file mode 100644
index 14174382..00000000
--- a/src/app/components/screen/map-screen/map-screen-panel/map-screen-panel.component.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import { NgSwitchCase } from '@angular/common';
-import {
- ChangeDetectionStrategy,
- Component,
- input,
- output
-} from '@angular/core';
-
-import { IgoMap } from '@igo2/geo';
-import { QueryState, SearchState } from '@igo2/integration';
-import {
- FilterPanelComponent,
- LegendPanelComponent,
- MapQueryResultsPanelComponent
-} from '@igo2/sdg';
-
-import { SearchResultPanelComponent } from '../../../search-results/search-results-panel.component';
-import { PanelType } from '../shared/map-screen.interface';
-
-@Component({
- selector: 'app-map-screen-panel',
- standalone: true,
- imports: [
- NgSwitchCase,
- SearchResultPanelComponent,
- LegendPanelComponent,
- MapQueryResultsPanelComponent,
- FilterPanelComponent
- ],
- changeDetection: ChangeDetectionStrategy.OnPush,
- templateUrl: './map-screen-panel.component.html',
- styleUrl: './map-screen-panel.component.scss'
-})
-export class MapScreenPanelComponent {
- type = input.required();
- map = input.required();
- queryState = input.required();
- searchState = input.required();
-
- closed = output();
-
- onClose(): void {
- this.closed.emit(true);
- }
-}
diff --git a/src/app/components/screen/map-screen/map-screen.component.html b/src/app/components/screen/map-screen/map-screen.component.html
deleted file mode 100644
index cc02cff4..00000000
--- a/src/app/components/screen/map-screen/map-screen.component.html
+++ /dev/null
@@ -1,106 +0,0 @@
-@if (isHandset()) {
-
-
-
-
-
-
-
-
-
-
-
-
-
-} @else {
-
-}
-
-
-
-
-
-
-
-
- @if (showSearchBar) {
-
-
- }
-
-
-
-
- @if (
- map() && (map().layers$ | async | filterableDataSource: 'ogc').length > 0
- ) {
-
- }
- @if (config.hasLegendButton) {
-
- }
-
-
diff --git a/src/app/components/screen/map-screen/map-screen.component.scss b/src/app/components/screen/map-screen/map-screen.component.scss
deleted file mode 100644
index c8f948f5..00000000
--- a/src/app/components/screen/map-screen/map-screen.component.scss
+++ /dev/null
@@ -1,80 +0,0 @@
-@use '@angular/material' as mat;
-
-$panel-padding: 16px;
-$sidenav-width: 400px;
-$top-spacer: $panel-padding + 40px; // 40 for the search-bar height
-
-:host {
- display: flex;
- position: relative;
- width: 100%;
- height: 100%;
-}
-
-mat-icon.disabled {
- color: rgba(0, 0, 0, 0.38);
-}
-
-mat-sidenav-container {
- height: 100%;
- width: 100%;
- background-color: #efefef;
-}
-
-mat-sidenav {
- width: $sidenav-width;
-
- app-map-screen-panel {
- display: block;
- padding: $panel-padding;
-
- margin-top: $top-spacer;
- height: calc(100% - #{$top-spacer});
- overflow: auto;
- }
-}
-
-.portal-desktop-container {
- position: relative;
- height: 100%;
- width: 100%;
-
- igo-search-bar {
- position: absolute;
- top: $panel-padding;
- left: $panel-padding;
- z-index: 2;
- width: calc($sidenav-width - $panel-padding * 2);
- }
-}
-
-mat-expansion-panel {
- max-height: 60%;
-
- ::ng-deep {
- .mat-expansion-panel-content {
- overflow-y: scroll !important;
- overflow-x: clip;
- height: calc(100% - var(--mat-expansion-header-expanded-state-height));
- transition-delay: 225ms;
- transition-property: height;
- }
-
- igo-search-bar {
- width: 100%;
- }
- }
-}
-
-igo-spinner {
- position: absolute;
- top: 50%;
- right: 50%;
- z-index: 100;
-}
-
-.search-bar-elevation {
- box-shadow:
- 0 2px 4px rgba(0, 0, 0, 0.2),
- 0 -1px 0px rgba(0, 0, 0, 0.02);
-}
diff --git a/src/app/components/screen/map-screen/map-screen.component.ts b/src/app/components/screen/map-screen/map-screen.component.ts
deleted file mode 100644
index 37824c65..00000000
--- a/src/app/components/screen/map-screen/map-screen.component.ts
+++ /dev/null
@@ -1,310 +0,0 @@
-import { CommonModule } from '@angular/common';
-import { Component, OnInit, Signal, ViewChild, signal } from '@angular/core';
-import { MatButtonModule } from '@angular/material/button';
-import { MatDialogModule } from '@angular/material/dialog';
-import { MatExpansionModule } from '@angular/material/expansion';
-import { MatIconModule } from '@angular/material/icon';
-import { MatSidenavModule } from '@angular/material/sidenav';
-import { MatTooltipModule } from '@angular/material/tooltip';
-import { ActivatedRoute, Params } from '@angular/router';
-
-import { ActionbarComponent } from '@igo2/common/action';
-import { type EntityRecord } from '@igo2/common/entity';
-import {
- SpinnerActivityDirective,
- SpinnerComponent
-} from '@igo2/common/spinner';
-import { ConfigService } from '@igo2/core/config';
-import { IgoLanguageModule, LanguageService } from '@igo2/core/language';
-import {
- FEATURE,
- FilterableDataSourcePipe,
- IgoMap,
- IgoSearchModule,
- QueryService,
- Research,
- SearchBarComponent,
- SearchResult,
- SearchSourceService,
- computeOlFeaturesExtent,
- provideOptionsApi,
- provideSearch,
- sourceCanReverseSearch,
- sourceCanSearch,
- withCadastreSource,
- withCoordinatesReverseSource,
- withIChercheReverseSource,
- withIChercheSource,
- withNominatimSource,
- withStoredQueriesSource
-} from '@igo2/geo';
-import { QueryState, SearchState } from '@igo2/integration';
-import {
- FilterButtonComponent,
- IMapConfig,
- LegendButtonComponent,
- MapComponent
-} from '@igo2/sdg';
-
-import olFormatGeoJSON from 'ol/format/GeoJSON';
-
-import { debounceTime, skipWhile, take } from 'rxjs/operators';
-
-import { AppService } from '../../../app.service';
-import { SidenavToggleComponent } from '../../sidenav/sidenav-toggle/sidenav-toggle.component';
-import { MapScreenPanelComponent } from './map-screen-panel/map-screen-panel.component';
-import { PanelType } from './shared/map-screen.interface';
-
-const DEFAULT_PANEL_TYPE: PanelType = 'search';
-
-@Component({
- selector: 'app-map-screen',
- standalone: true,
- imports: [
- CommonModule,
- MatTooltipModule,
- MatButtonModule,
- MatIconModule,
- MatSidenavModule,
- MatDialogModule,
- MatExpansionModule,
- IgoSearchModule,
- FilterableDataSourcePipe,
- MapComponent,
- FilterButtonComponent,
- LegendButtonComponent,
- ActionbarComponent,
- IgoLanguageModule,
- SidenavToggleComponent,
- SpinnerComponent,
- SpinnerActivityDirective,
- MapScreenPanelComponent
- ],
- providers: [
- provideSearch(
- [
- withNominatimSource(),
- withIChercheSource(),
- withIChercheReverseSource(),
- withCoordinatesReverseSource(),
- withStoredQueriesSource(),
- withCadastreSource()
- ],
- { analytics: true }
- ),
- provideOptionsApi(),
- SearchState
- ],
- templateUrl: './map-screen.component.html',
- styleUrl: './map-screen.component.scss'
-})
-export class MapScreenComponent implements OnInit {
- public config: IMapConfig;
- public hasFooter: boolean;
- public showSearchBar: boolean;
-
- private termDefinedInUrl = false;
- private termDefinedInUrlTriggered = false;
-
- panelOpened = signal(false);
- panelType = signal(DEFAULT_PANEL_TYPE);
- map = signal(undefined);
- hasOgcDatasource = signal(false);
-
- get isHandset(): Signal {
- return this.appService.isHandset;
- }
-
- @ViewChild('searchbar') searchBar: SearchBarComponent;
-
- constructor(
- private route: ActivatedRoute,
- public searchState: SearchState,
- public queryState: QueryState,
- private searchSourceService: SearchSourceService,
- private configService: ConfigService,
- private languageService: LanguageService,
- private queryService: QueryService,
- private appService: AppService
- ) {
- this.handleAppConfigs();
- }
-
- ngOnInit() {
- this.queryService.defaultFeatureCount = 1;
-
- this.route.queryParams.subscribe((params) => {
- this.readLanguageParam(params);
- this.readSearchParams(params);
- this.readFocusFirst(params);
- });
- }
-
- handleMap(map: IgoMap): void {
- this.map.set(map);
- }
-
- private handleAppConfigs() {
- const config = this.configService.getConfigs();
- this.config = config;
- this.showSearchBar = config.searchBar.showSearchBar ?? true;
- this.hasFooter = config.hasFooter ?? true;
- }
-
- openPanel(type: PanelType = DEFAULT_PANEL_TYPE): void {
- if (this.panelType() !== type) {
- this.panelType.set(type);
- }
- this.panelOpened.set(true);
- }
-
- closePanel(): void {
- this.panelOpened.set(false);
- }
-
- togglePanel(type: PanelType) {
- const opened = this.panelOpened();
- const typeChanged = type !== this.panelType();
-
- // Si le type de change, on conserve le panneau ouvert
- if (typeChanged && opened) {
- this.panelType.set(type);
- } else {
- this.panelType.set(type);
- this.panelOpened.update((value) => !value);
- }
- }
-
- handleFeaturesQuery(results: SearchResult[]): void {
- if (!results.length) {
- return;
- }
- this.openPanel('query');
- }
-
- onSearchTermChange(term?: string) {
- // if (params?.search && term !== params.search) {
- // this.searchState.deactivateCustomFilterTermStrategy();
- // }
- this.searchState.setSearchTerm(term);
- // const termWithoutHashtag = term.replace(/(#[^\s]*)/g, '').trim();
- // if (termWithoutHashtag.length < 2) {
- // this.onClearSearch();
- // return;
- // }
- }
-
- onSearch(event: { research: Research; results: SearchResult[] }) {
- this.openPanel('search');
-
- const results = event.results;
-
- const isReverseSearch = !sourceCanSearch(event.research.source);
-
- let enabledSources;
- if (isReverseSearch) {
- enabledSources = this.searchSourceService
- .getEnabledSources()
- .filter(sourceCanReverseSearch);
- } else {
- enabledSources = this.searchSourceService
- .getEnabledSources()
- .filter(sourceCanSearch);
- }
-
- const newResults = this.searchState.store.entities$.value
- .filter(
- (result: SearchResult) =>
- result.source !== event.research.source &&
- enabledSources.includes(result.source)
- )
- .concat(results);
- this.searchState.store.updateMany(newResults);
- }
-
- clearSearch() {
- this.map()?.searchResultsOverlay.clear();
- this.searchState.store.clear();
- this.searchState.setSelectedResult(undefined);
- this.searchState.deactivateCustomFilterTermStrategy();
- this.searchState.setSearchTerm('');
- }
-
- private readLanguageParam(params: Params) {
- if (params.lang) {
- this.languageService.setLanguage(params.lang);
- }
- }
-
- private computeFocusFirst() {
- setTimeout(() => {
- const resultItem: HTMLElement = document
- .getElementsByTagName('igo-search-results-item')
- .item(0) as HTMLElement;
- if (resultItem) {
- resultItem.click();
- }
- }, 1);
- }
-
- private readFocusFirst(params: Params) {
- if (params['sf'] === '1' && this.termDefinedInUrl) {
- const entities$$ = this.searchState.store.stateView
- .all$()
- .pipe(
- skipWhile((entities) => entities.length === 0),
- debounceTime(1000),
- take(1)
- )
- .subscribe((entities) => {
- entities$$.unsubscribe();
- if (entities.length && !this.termDefinedInUrlTriggered) {
- this.computeFocusFirst();
- this.termDefinedInUrlTriggered = true;
- }
- });
- }
- }
-
- private readSearchParams(params: Params) {
- const map = this.map();
- const searchParam = params['search'];
- if (searchParam) {
- this.termDefinedInUrl = true;
- if (params['exactMatch'] === '1') {
- this.searchState.activateCustomFilterTermStrategy();
- }
- if (searchParam && !params['zoom'] && params['sf'] !== '1') {
- const entities$$ = this.searchState.store.stateView
- .all$()
- .pipe(
- skipWhile((entities) => entities.length === 0),
- debounceTime(500),
- take(1)
- )
- .subscribe((entities) => {
- entities$$.unsubscribe();
- const searchResultsOlFeatures = entities
- .filter((e) => e.entity.meta.dataType === FEATURE)
- .map((entity: EntityRecord) =>
- new olFormatGeoJSON().readFeature(entity.entity.data, {
- dataProjection: entity.entity.data.projection,
- featureProjection: map?.projectionCode
- })
- );
- if (map) {
- const totalExtent = computeOlFeaturesExtent(
- searchResultsOlFeatures,
- map.viewProjection
- );
- map.viewController.zoomToExtent(totalExtent);
- }
- });
- }
- this.searchState.searchTerm$.next(searchParam);
- }
- if (params['searchGeom'] === '1') {
- this.searchState.searchResultsGeometryEnabled$.next(true);
- }
- }
-}
diff --git a/src/app/components/screen/map-screen/shared/map-screen.interface.ts b/src/app/components/screen/map-screen/shared/map-screen.interface.ts
deleted file mode 100644
index 54e7c531..00000000
--- a/src/app/components/screen/map-screen/shared/map-screen.interface.ts
+++ /dev/null
@@ -1 +0,0 @@
-export type PanelType = 'query' | 'search' | 'legend' | 'filter';
diff --git a/src/app/components/search-results/search-results-panel.component.html b/src/app/components/search-results/search-results-panel.component.html
deleted file mode 100644
index 31fddace..00000000
--- a/src/app/components/search-results/search-results-panel.component.html
+++ /dev/null
@@ -1,29 +0,0 @@
-@if (searchState().store.empty$ | async) {
-
-
-
- {{ 'igo.integration.searchResultsTool.noResults' | translate }}
-
-
- {{ 'igo.integration.searchResultsTool.doSearch' | translate }}
-
-
-
-
-} @else {
-
-
-}
diff --git a/src/app/components/search-results/search-results-panel.component.scss b/src/app/components/search-results/search-results-panel.component.scss
deleted file mode 100644
index 5d4e87f3..00000000
--- a/src/app/components/search-results/search-results-panel.component.scss
+++ /dev/null
@@ -1,3 +0,0 @@
-:host {
- display: block;
-}
diff --git a/src/app/components/search-results/search-results-panel.component.ts b/src/app/components/search-results/search-results-panel.component.ts
deleted file mode 100644
index d370e523..00000000
--- a/src/app/components/search-results/search-results-panel.component.ts
+++ /dev/null
@@ -1,95 +0,0 @@
-import { AsyncPipe } from '@angular/common';
-import {
- ChangeDetectionStrategy,
- Component,
- input,
- output
-} from '@angular/core';
-import { MatIconButton } from '@angular/material/button';
-import { MatIcon } from '@angular/material/icon';
-import { MatTooltip } from '@angular/material/tooltip';
-
-import { IgoLanguageModule } from '@igo2/core/language';
-import {
- FeatureMotion,
- IgoMap,
- Research,
- SearchResult,
- SearchResultsComponent
-} from '@igo2/geo';
-import { SearchState } from '@igo2/integration';
-
-import {
- onResultFocus,
- onResultSelect,
- onResultUnfocus
-} from './search-results-panel.utils';
-
-enum SearchResultAction {
- Focus = 'focus',
- Select = 'select',
- Unfocus = 'unfocus'
-}
-
-@Component({
- selector: 'app-search-results-panel',
- templateUrl: './search-results-panel.component.html',
- styleUrls: ['./search-results-panel.component.scss'],
- changeDetection: ChangeDetectionStrategy.OnPush,
- standalone: true,
- imports: [
- MatTooltip,
- MatIconButton,
- MatIcon,
- IgoLanguageModule,
- SearchResultsComponent,
- AsyncPipe
- ]
-})
-export class SearchResultPanelComponent {
- map = input.required();
- searchState = input.required();
-
- closed = output();
-
- public searchResultActionEnum = SearchResultAction;
-
- constructor() {}
-
- onResult(searchResultAction: SearchResultAction, searchResult: SearchResult) {
- const searchState = this.searchState();
- const map = this.map();
- switch (searchResultAction) {
- case SearchResultAction.Focus:
- onResultFocus(searchResult, map, searchState, {
- featureMotion: FeatureMotion.None
- });
- break;
- case SearchResultAction.Select:
- map.searchResultsOverlay.clear();
- onResultSelect(searchResult, map, searchState);
- this.close();
- break;
- case SearchResultAction.Unfocus:
- onResultUnfocus(searchResult, map);
- break;
- }
- }
-
- onMoreResults(event: { research: Research; results: SearchResult[] }) {
- const searchState = this.searchState();
- const results = event.results;
- searchState.store.state.updateAll({
- focused: false,
- selected: false
- });
- const newResults = searchState.store.entities$.value
- .filter((result: SearchResult) => result.source !== event.research.source)
- .concat(results);
- searchState.store.updateMany(newResults);
- }
-
- private close(): void {
- this.closed.emit(true);
- }
-}
diff --git a/src/app/components/search-results/search-results-panel.utils.ts b/src/app/components/search-results/search-results-panel.utils.ts
deleted file mode 100644
index f8c9629d..00000000
--- a/src/app/components/search-results/search-results-panel.utils.ts
+++ /dev/null
@@ -1,77 +0,0 @@
-import {
- CommonVectorStyleOptions,
- FEATURE,
- Feature,
- FeatureMotion,
- IgoMap,
- SearchResult,
- getCommonVectorSelectedStyle
-} from '@igo2/geo';
-import { SearchState } from '@igo2/integration';
-
-export function onResultFocus(
- result: SearchResult,
- map: IgoMap,
- searchState: SearchState,
- options?: { featureMotion?: FeatureMotion }
-) {
- onResultSelectOrFocus(result, map, searchState, 'focus', options);
-}
-
-export function onResultSelect(
- result: SearchResult,
- map: IgoMap,
- searchState: SearchState,
- options?: { featureMotion?: FeatureMotion }
-) {
- onResultSelectOrFocus(result, map, searchState, 'select', options);
-}
-
-function onResultSelectOrFocus(
- result: SearchResult,
- map: IgoMap,
- searchState: SearchState,
- type: 'select' | 'focus',
- options?: { featureMotion?: FeatureMotion }
-) {
- if (result.meta.dataType !== FEATURE) {
- return undefined;
- }
- const feature = (result as SearchResult).data;
-
- // Somethimes features have no geometry. It happens with some GetFeatureInfo
- if (!feature.geometry) {
- return;
- }
-
- let searchOverlayStyle: CommonVectorStyleOptions =
- searchState.searchOverlayStyle;
- let resultStyle: CommonVectorStyleOptions = result.style?.base
- ? result.style.base
- : {};
- switch (type) {
- case 'focus':
- searchOverlayStyle = searchState.searchOverlayStyleFocus;
- resultStyle = result.style?.focus ? result.style.focus : {};
- break;
- case 'select':
- searchOverlayStyle = searchState.searchOverlayStyleSelection;
- resultStyle = result.style?.selection ? result.style.selection : {};
- break;
- }
-
- feature.meta.style = getCommonVectorSelectedStyle(
- Object.assign({}, { feature }, searchOverlayStyle, resultStyle)
- );
-
- map.searchResultsOverlay.addFeature(feature, options?.featureMotion);
-}
-
-export function onResultUnfocus(result: SearchResult, map: IgoMap) {
- const feature = map.searchResultsOverlay.dataSource.ol.getFeatureById(
- result.meta.id
- );
- if (feature) {
- map.searchResultsOverlay.removeFeature(result.data as Feature);
- }
-}
diff --git a/src/app/components/sidenav/sidenav-toggle/sidenav-toggle.component.html b/src/app/components/sidenav/sidenav-toggle/sidenav-toggle.component.html
deleted file mode 100644
index cf0150fd..00000000
--- a/src/app/components/sidenav/sidenav-toggle/sidenav-toggle.component.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- {{ opened() ? 'chevron_left' : 'chevron_right' }}
-
-
diff --git a/src/app/components/sidenav/sidenav-toggle/sidenav-toggle.component.scss b/src/app/components/sidenav/sidenav-toggle/sidenav-toggle.component.scss
deleted file mode 100644
index dcb85fec..00000000
--- a/src/app/components/sidenav/sidenav-toggle/sidenav-toggle.component.scss
+++ /dev/null
@@ -1,7 +0,0 @@
-:host {
- position: absolute;
- top: 50%;
- left: 0;
- z-index: 1;
- transition: left 300ms;
-}
diff --git a/src/app/components/sidenav/sidenav-toggle/sidenav-toggle.component.spec.ts b/src/app/components/sidenav/sidenav-toggle/sidenav-toggle.component.spec.ts
deleted file mode 100644
index 94fa52d0..00000000
--- a/src/app/components/sidenav/sidenav-toggle/sidenav-toggle.component.spec.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { ComponentFixture, TestBed } from '@angular/core/testing';
-
-import { SidenavToggleComponent } from './sidenav-toggle.component';
-
-describe('SidenavToggleComponent', () => {
- let component: SidenavToggleComponent;
- let fixture: ComponentFixture;
-
- beforeEach(async () => {
- await TestBed.configureTestingModule({
- imports: [SidenavToggleComponent]
- })
- .compileComponents();
-
- fixture = TestBed.createComponent(SidenavToggleComponent);
- component = fixture.componentInstance;
- fixture.detectChanges();
- });
-
- it('should create', () => {
- expect(component).toBeTruthy();
- });
-});
diff --git a/src/app/components/sidenav/sidenav-toggle/sidenav-toggle.component.ts b/src/app/components/sidenav/sidenav-toggle/sidenav-toggle.component.ts
deleted file mode 100644
index af7a8aa6..00000000
--- a/src/app/components/sidenav/sidenav-toggle/sidenav-toggle.component.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import {
- ChangeDetectionStrategy,
- Component,
- HostBinding,
- effect,
- input,
- model
-} from '@angular/core';
-import { MatButtonModule } from '@angular/material/button';
-import { MatIconModule } from '@angular/material/icon';
-import { MatTooltipModule } from '@angular/material/tooltip';
-import { DomSanitizer, SafeStyle } from '@angular/platform-browser';
-
-import { IgoLanguageModule } from '@igo2/core/language';
-
-@Component({
- selector: 'app-sidenav-toggle',
- standalone: true,
- imports: [
- MatButtonModule,
- MatIconModule,
- MatTooltipModule,
- IgoLanguageModule
- ],
- changeDetection: ChangeDetectionStrategy.OnPush,
- templateUrl: './sidenav-toggle.component.html',
- styleUrl: './sidenav-toggle.component.scss'
-})
-export class SidenavToggleComponent {
- opened = model.required();
- sidenavWidth = input.required();
-
- @HostBinding('style') _style: SafeStyle;
- set style(width: number) {
- this._style = this.sanitizer.bypassSecurityTrustStyle(`left: ${width}px`);
- }
-
- constructor(private sanitizer: DomSanitizer) {
- effect(() => {
- this.style = this.opened() ? 400 : 0;
- });
- }
-
- toggle(): void {
- this.opened.update((value) => !value);
- }
-}
diff --git a/src/app/pages/about/about-sub-page/about-sub-page.component.html b/src/app/pages/about/about-sub-page/about-sub-page.component.html
index 945b5a3a..dadcaa1f 100644
--- a/src/app/pages/about/about-sub-page/about-sub-page.component.html
+++ b/src/app/pages/about/about-sub-page/about-sub-page.component.html
@@ -1,4 +1,7 @@
-
+
Exemple de navigation secondaire
Fil d'ariane dynamique
@@ -83,4 +86,4 @@ Fil d'ariane dynamique
Confecta res esset.
Cupiditates non Epicuri divisione finiebat, sed sua satietate.
-
+
diff --git a/src/app/pages/about/about-sub-page/about-sub-page.component.ts b/src/app/pages/about/about-sub-page/about-sub-page.component.ts
index a7111319..7385d1e0 100644
--- a/src/app/pages/about/about-sub-page/about-sub-page.component.ts
+++ b/src/app/pages/about/about-sub-page/about-sub-page.component.ts
@@ -1,6 +1,8 @@
import { Component } from '@angular/core';
-import { BasicScreenComponent } from '../../../components/screen/basic-screen/basic-screen.component';
+import { BasicScreenComponent } from '@igo2/sdg';
+
+import { AppService } from '../../../app.service';
@Component({
selector: 'app-about-sub-page',
@@ -9,4 +11,10 @@ import { BasicScreenComponent } from '../../../components/screen/basic-screen/ba
templateUrl: './about-sub-page.component.html',
styleUrl: './about-sub-page.component.scss'
})
-export class AboutSubPageComponent {}
+export class AboutSubPageComponent {
+ get isHandset() {
+ return this.appService.isHandset;
+ }
+
+ constructor(private appService: AppService) {}
+}
diff --git a/src/app/pages/about/about.component.html b/src/app/pages/about/about.component.html
index 9878cf24..357ea11d 100644
--- a/src/app/pages/about/about.component.html
+++ b/src/app/pages/about/about.component.html
@@ -1,4 +1,4 @@
-
+
Notre Mission
Mission 1
@@ -87,4 +87,6 @@ Mission 1
Naviguer à une sous page
-
+
+
+
diff --git a/src/app/pages/about/about.component.ts b/src/app/pages/about/about.component.ts
index 18b42282..198acef2 100644
--- a/src/app/pages/about/about.component.ts
+++ b/src/app/pages/about/about.component.ts
@@ -2,8 +2,9 @@ import { Component, Signal } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
import { RouterLink } from '@angular/router';
+import { BasicScreenComponent } from '@igo2/sdg';
+
import { AppService } from '../../../app/app.service';
-import { BasicScreenComponent } from '../../components/screen/basic-screen/basic-screen.component';
@Component({
selector: 'app-about-page',
diff --git a/src/app/pages/about/about.routing.ts b/src/app/pages/about/about.routes.ts
similarity index 81%
rename from src/app/pages/about/about.routing.ts
rename to src/app/pages/about/about.routes.ts
index cfaf8d98..24fd2956 100644
--- a/src/app/pages/about/about.routing.ts
+++ b/src/app/pages/about/about.routes.ts
@@ -1,6 +1,6 @@
-import { Routes } from '@angular/router';
+import { INavigationRoutes } from '@igo2/sdg';
-export const routes: Routes = [
+export const routes: INavigationRoutes = [
{ path: '', redirectTo: '', pathMatch: 'full' },
{
path: '',
diff --git a/src/app/pages/contact-us/contact-us.component.html b/src/app/pages/contact-us/contact-us.component.html
new file mode 100644
index 00000000..8e4cec9c
--- /dev/null
+++ b/src/app/pages/contact-us/contact-us.component.html
@@ -0,0 +1,12 @@
+
+
+ Paragraphe : Lorem ipsum dolor sit amet, consectetur adipiscing elit. Tu
+ enim ista lenius, hic Stoicorum more nos vexat. Quo studio Aristophanem
+ putamus aetatem in litteris duxisse? Honesta oratio, Socratica, Platonis
+ etiam. Vitiosum est enim in dividendo partem in genere numerare.
+ Non est igitur voluptas bonum. Duo Reges: constructio interrete. Non
+ autem hoc: igitur ne illud quidem. Magna laus.
+ Quis istum dolorem timet? Quod autem satis est, eo quicquid accessit,
+ nimium est; Sed ille, ut dixi, vitiose.
+
+
diff --git a/src/app/components/screen/basic-screen/basic-screen.component.scss b/src/app/pages/contact-us/contact-us.component.scss
similarity index 100%
rename from src/app/components/screen/basic-screen/basic-screen.component.scss
rename to src/app/pages/contact-us/contact-us.component.scss
diff --git a/src/app/components/screen/map-screen/map-screen.component.spec.ts b/src/app/pages/contact-us/contact-us.component.spec.ts
similarity index 53%
rename from src/app/components/screen/map-screen/map-screen.component.spec.ts
rename to src/app/pages/contact-us/contact-us.component.spec.ts
index 9382533b..4f2b7f9b 100644
--- a/src/app/components/screen/map-screen/map-screen.component.spec.ts
+++ b/src/app/pages/contact-us/contact-us.component.spec.ts
@@ -1,18 +1,18 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
-import { MapScreenComponent } from './map-screen.component';
+import { ContactUsComponent } from './contact-us.component';
-describe('MapScreenComponent', () => {
- let component: MapScreenComponent;
- let fixture: ComponentFixture;
+describe('ContactUsComponent', () => {
+ let component: ContactUsComponent;
+ let fixture: ComponentFixture;
beforeEach(async () => {
await TestBed.configureTestingModule({
- imports: [MapScreenComponent]
+ imports: [ContactUsComponent]
})
.compileComponents();
- fixture = TestBed.createComponent(MapScreenComponent);
+ fixture = TestBed.createComponent(ContactUsComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
diff --git a/src/app/pages/contact-us/contact-us.component.ts b/src/app/pages/contact-us/contact-us.component.ts
new file mode 100644
index 00000000..28849fba
--- /dev/null
+++ b/src/app/pages/contact-us/contact-us.component.ts
@@ -0,0 +1,20 @@
+import { Component } from '@angular/core';
+
+import { BasicScreenComponent } from '@igo2/sdg';
+
+import { AppService } from '../../app.service';
+
+@Component({
+ selector: 'app-contact-us',
+ standalone: true,
+ imports: [BasicScreenComponent],
+ templateUrl: './contact-us.component.html',
+ styleUrl: './contact-us.component.scss'
+})
+export class ContactUsComponent {
+ get isHandset() {
+ return this.appService.isHandset;
+ }
+
+ constructor(private appService: AppService) {}
+}
diff --git a/src/app/pages/home/home.component.html b/src/app/pages/home/home.component.html
index 1770f278..f8782310 100644
--- a/src/app/pages/home/home.component.html
+++ b/src/app/pages/home/home.component.html
@@ -1,11 +1,9 @@
-
+
Infrastructure géomatique ouverte 2.0 (IGO2) / Open GIS Infrastructure 2.0
Qu'est-ce qu'IGO?
- Test
-
IGO2 est une solution Web gratuite en géomatique basée sur Angular -
Material, OpenLayers et IGO2lib. IGO2 permet de tirer profit d’une multitude
@@ -27,4 +25,4 @@
Qu'est-ce qu'IGO?
>https://github.com/infra-geo-ouverte/igo2
-
+
diff --git a/src/app/pages/home/home.component.ts b/src/app/pages/home/home.component.ts
index 5415e1d2..ce32c195 100644
--- a/src/app/pages/home/home.component.ts
+++ b/src/app/pages/home/home.component.ts
@@ -1,7 +1,9 @@
import { Component } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
-import { BasicScreenComponent } from '../../components/screen/basic-screen/basic-screen.component';
+import { BasicScreenComponent } from '@igo2/sdg';
+
+import { AppService } from '../../app.service';
@Component({
selector: 'app-home-page',
@@ -10,5 +12,9 @@ import { BasicScreenComponent } from '../../components/screen/basic-screen/basic
imports: [BasicScreenComponent, MatButtonModule]
})
export class HomeComponent {
- constructor() {}
+ get isHandset() {
+ return this.appService.isHandset;
+ }
+
+ constructor(private appService: AppService) {}
}
diff --git a/src/app/pages/map/map.component.html b/src/app/pages/map/map.component.html
index 06680319..942a1969 100644
--- a/src/app/pages/map/map.component.html
+++ b/src/app/pages/map/map.component.html
@@ -1 +1 @@
-
+
diff --git a/src/app/pages/map/map.component.ts b/src/app/pages/map/map.component.ts
index c9561a19..59036ff1 100644
--- a/src/app/pages/map/map.component.ts
+++ b/src/app/pages/map/map.component.ts
@@ -1,6 +1,8 @@
import { Component } from '@angular/core';
-import { MapScreenComponent } from '../../components/screen/map-screen/map-screen.component';
+import { MapScreenComponent } from '@igo2/sdg/geo';
+
+import { AppService } from '../../app.service';
@Component({
selector: 'app-map-page',
@@ -9,4 +11,10 @@ import { MapScreenComponent } from '../../components/screen/map-screen/map-scree
standalone: true,
imports: [MapScreenComponent]
})
-export class MapComponent {}
+export class MapComponent {
+ get isHandset() {
+ return this.appService.isHandset;
+ }
+
+ constructor(private appService: AppService) {}
+}
diff --git a/src/environments/environment.ts b/src/environments/environment.ts
index a563d41e..271e9b44 100644
--- a/src/environments/environment.ts
+++ b/src/environments/environment.ts
@@ -34,11 +34,9 @@ export const environment: EnvironmentOptions = {
},
navigation: {
options: {
- htmlDocument: {
- title: {
- suffix: 'IGO',
- separator: '·'
- }
+ title: {
+ suffix: 'IGO',
+ separator: '·'
}
}
},
@@ -87,10 +85,8 @@ export const environment: EnvironmentOptions = {
order: 2,
params: {
limit: '5'
- },
- settings: []
+ }
},
- coordinatesreverse: {},
icherchereverse: {
searchUrl: '/apis/terrapi',
order: 3,
diff --git a/src/environments/environnement.interface.ts b/src/environments/environnement.interface.ts
index 510e30df..125062a4 100644
--- a/src/environments/environnement.interface.ts
+++ b/src/environments/environnement.interface.ts
@@ -1,5 +1,6 @@
import { AllEnvironmentOptions } from '@igo2/integration';
-import { IHeaderConfig, INavigationConfig, MapOverlay } from '@igo2/sdg';
+import type { IHeaderConfig, INavigationConfig } from '@igo2/sdg';
+import type { MapOverlay } from '@igo2/sdg/geo';
export interface EnvironmentOptions extends AllEnvironmentOptions {
production: boolean;
diff --git a/src/main.ts b/src/main.ts
index 45aeab03..af53ecb6 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -13,9 +13,10 @@ import { provideIcon } from '@igo2/common/icon';
import { IgoCoreModule } from '@igo2/core';
import { provideConfig } from '@igo2/core/config';
import { provideTranslation } from '@igo2/core/language';
+import { provideNavigationTitle } from '@igo2/sdg';
import { AppComponent } from './app/app.component';
-import { routes } from './app/app.routing';
+import { routes } from './app/app.routes';
import { environment } from './environments/environment';
if (environment.production) {
@@ -40,6 +41,7 @@ bootstrapApplication(AppComponent, {
path: './config/config.json'
}),
provideTranslation(),
+ provideNavigationTitle(),
provideIcon()
]
}).catch((err) => console.log(err));
diff --git a/src/polyfills.ts b/src/polyfills.ts
index 955c454a..84991457 100644
--- a/src/polyfills.ts
+++ b/src/polyfills.ts
@@ -2,16 +2,11 @@
* BROWSER POLYFILLS
*
-/** Evergreen browsers require these. **/
-import 'core-js/es/reflect';
-
/***************************************************************************************************
* Zone JS is required by Angular itself.
*/
import 'zone.js';
-// Included with Angular CLI.
-
/***************************************************************************************************
* APPLICATION IMPORTS
*/
diff --git a/tsconfig.json b/tsconfig.json
index bbb1ae34..d69f8808 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -16,7 +16,11 @@
"paths": {
"@igo2/sdg": [
"node_modules/@igo2/sdg",
- "../../packages/sdg/src/public-api"
+ "../../packages/sdg/src/public-api",
+ ],
+ "@igo2/sdg/*": [
+ "node_modules/@igo2/sdg",
+ "../../packages/sdg/geo/src/public-api",
]
}
},