From 38ff5b8e59f99a511fd30df428863a76843d814b Mon Sep 17 00:00:00 2001 From: phil Date: Tue, 27 Feb 2024 11:52:00 +0530 Subject: [PATCH] Ongoing migration --- src/app/_services/geojson.service.ts | 44 +--- src/app/app.component.html | 2 +- src/app/app.component.ts | 2 +- src/app/config.service.ts | 5 +- src/app/map/base-map/base-map.component.html | 2 +- src/app/map/base-map/base-map.component.ts | 10 +- .../map/controls/map-controls.component.html | 10 +- .../map/controls/map-controls.component.ts | 5 +- .../gisaf-mapbox/gisaf-mapbox.component.ts | 15 +- .../map/gisaf-mapbox/gisaf-ruler.directive.ts | 11 +- src/app/map/map-control.service.ts | 13 +- src/app/map/map-data.service.ts | 212 +++--------------- src/app/map/models.ts | 5 +- .../map/tree-layer/tree-layer.component.html | 2 +- .../map/tree-layer/tree-layer.component.ts | 37 ++- src/app/openapi/core/OpenAPI.ts | 2 +- src/app/openapi/index.ts | 3 +- .../{BaseMap.ts => BaseMapWithStores.ts} | 4 +- src/app/openapi/models/CategoryRead.ts | 4 +- src/app/openapi/models/MapInitData.ts | 4 +- src/app/openapi/models/MaplibreStyle.ts | 10 + src/app/openapi/models/Store.ts | 2 +- src/app/openapi/services/MapService.ts | 22 ++ 23 files changed, 155 insertions(+), 271 deletions(-) rename src/app/openapi/models/{BaseMap.ts => BaseMapWithStores.ts} (71%) create mode 100644 src/app/openapi/models/MaplibreStyle.ts diff --git a/src/app/_services/geojson.service.ts b/src/app/_services/geojson.service.ts index f73f175..a89f541 100644 --- a/src/app/_services/geojson.service.ts +++ b/src/app/_services/geojson.service.ts @@ -1,36 +1,17 @@ import { Injectable } from '@angular/core' import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http' - import { Observable, forkJoin } from 'rxjs' import { map } from 'rxjs/operators' -import { Apollo, gql } from 'apollo-angular' - import { WebsocketService } from '../_services/websocket.service' -const getLayerQuery = gql` -query mapboxStyle($store: String!) { - mapboxStyle (store: $store) { - paint - layout - attribution - } -} -` - -export class MapboxStyle { - constructor( - public paint: string, - public layout: string, - public attribution: string, - ) {} -} +import { MapService, MaplibreStyle } from '../openapi' export class MapboxDataAndStyle { constructor( public data: object, - public style: MapboxStyle, + public style: MaplibreStyle, ) {} } @@ -39,7 +20,8 @@ export class MapboxDataAndStyle { export class GeoJsonService { constructor( private _http: HttpClient, - private apollo: Apollo + // private apollo: Apollo, + public mapService: MapService, ) {} getLayer(url: string, params?: object): Observable { @@ -51,20 +33,10 @@ export class GeoJsonService { }) } - getStyle(store: string): Observable { - return this.apollo.query({ - query: getLayerQuery, - variables: { - store: store - }, - errorPolicy: 'all', - }).pipe(map( - result => new MapboxStyle( - result['data']['mapboxStyle']['paint'], - result['data']['mapboxStyle']['layout'], - result['data']['mapboxStyle']['attribution'], - ) - )) + getStyle(store: string): Observable { + return this.mapService.getLayerStyleApiMapLayerStyleStoreGet( + {store: store} + ) } getAll(url: string, store: string, params?: object): Observable { diff --git a/src/app/app.component.html b/src/app/app.component.html index 503bbe8..582e14d 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -2,7 +2,7 @@ diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 52f9805..5ddce37 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -52,7 +52,7 @@ export class AppComponent implements OnInit { this.title = res.title || this.title this.titleService.setTitle(res.windowTitle || this.title) this.configService.setConf(res) - this.authenticationService.roles = res.user.roles || [] + this.authenticationService.roles = res.user?.roles || [] if (res.redirect && (window != window.top)) { // Refusing to be embedded in an iframe let loc = res.redirect + window.location.pathname diff --git a/src/app/config.service.ts b/src/app/config.service.ts index daae786..7c4cd4b 100644 --- a/src/app/config.service.ts +++ b/src/app/config.service.ts @@ -6,6 +6,7 @@ export class Config { map = {} proj = {} measures = {} + geo = {} } @Injectable({ @@ -15,7 +16,8 @@ export class ConfigService { defaultConf: Config = { 'map': {}, 'proj': {}, - 'measures': {} + 'measures': {}, + 'geo': {} } hasConf = new ReplaySubject() @@ -37,6 +39,7 @@ export class ConfigService { setConf(c: Object) { this.conf.value.map = c['map'] this.conf.value.proj = c['proj'] + this.conf.value.geo = c['geo'] this.conf.value.measures = c['measures'] this.conf.next(this.conf.value) this.hasConf.next(undefined) diff --git a/src/app/map/base-map/base-map.component.html b/src/app/map/base-map/base-map.component.html index af8a6d6..fe775be 100644 --- a/src/app/map/base-map/base-map.component.html +++ b/src/app/map/base-map/base-map.component.html @@ -7,7 +7,7 @@ {{ bm.name }} diff --git a/src/app/map/base-map/base-map.component.ts b/src/app/map/base-map/base-map.component.ts index da7260c..9dd9f95 100644 --- a/src/app/map/base-map/base-map.component.ts +++ b/src/app/map/base-map/base-map.component.ts @@ -5,8 +5,9 @@ import { combineLatest } from 'rxjs' import { MapControlService } from '../map-control.service' import { MatOptionSelectionChange } from '@angular/material/core' -import { BaseMap, MapDataService } from '../map-data.service' +import { MapDataService } from '../map-data.service' import { UntypedFormGroup, UntypedFormControl } from '@angular/forms' +import { BaseMapWithStores } from '../../openapi' @Component({ selector: 'gisaf-map-base-map', @@ -31,7 +32,6 @@ export class BaseMapComponent implements OnInit { let baseMapParams = params.get('baseMap') if (baseMapParams) { let baseMapNameList = baseMapParams ? baseMapParams.split(',') : [] - baseMapNameList.forEach( baseMapName => { let baseMap = this._getBaseMapByName(baseMapName) @@ -43,7 +43,7 @@ export class BaseMapComponent implements OnInit { ) this.mapControlService.addBaseMap$.subscribe( - (baseMap: BaseMap) => { + (baseMap: BaseMapWithStores) => { let existingIndex = this.mapDataService.mapInitData.baseMaps.findIndex(bm => bm.name == baseMap.name) if (existingIndex > -1) { this.mapDataService.mapInitData.baseMaps.splice(existingIndex, 1) @@ -60,11 +60,11 @@ export class BaseMapComponent implements OnInit { this.formGroup.addControl('baseMaps', new UntypedFormControl()) } - protected _getBaseMapByName(name: string): BaseMap { + protected _getBaseMapByName(name: string): BaseMapWithStores { return this.mapDataService.mapInitData.baseMaps.find(bm => bm.name == name) } - selChange(evt: MatOptionSelectionChange, baseMap: BaseMap) { + selChange(evt: MatOptionSelectionChange, baseMap: BaseMapWithStores) { if (evt.isUserInput) { if (evt.source.selected) { this.mapControlService.addBaseMapLayers(baseMap.stores) diff --git a/src/app/map/controls/map-controls.component.html b/src/app/map/controls/map-controls.component.html index 49ff855..19375b9 100644 --- a/src/app/map/controls/map-controls.component.html +++ b/src/app/map/controls/map-controls.component.html @@ -23,7 +23,7 @@ @@ -147,19 +147,19 @@ diff --git a/src/app/map/tree-layer/tree-layer.component.ts b/src/app/map/tree-layer/tree-layer.component.ts index 7150fc4..85f2c2f 100644 --- a/src/app/map/tree-layer/tree-layer.component.ts +++ b/src/app/map/tree-layer/tree-layer.component.ts @@ -15,6 +15,7 @@ import { Node, PrimaryGroupNode, LayerNode, TreeData } from '../models' import { MapControlService } from '../map-control.service' import { MapDataService, Store } from '../map-data.service' import { Feature, FeatureWithField } from '../../info/info-data.service' +import { CategoryGroup } from '../../openapi' @Injectable() @@ -145,23 +146,45 @@ export class TreeLayerComponent implements OnInit { // Build a mapping object for faster assignment // XXX: Typescript doesn't provide Object.fromEntries, otherwise it should be: //let pgs = Object.fromEntries(treeData.primaryGroups.map(pg=>[pg.name, pg])) - let pgs = {} + let pgs: Record = {} this.mapDataService.mapInitData.groups.forEach( - pg => pgs[pg.name] = pg + pg => pgs[pg.name] = new PrimaryGroupNode( + pg.name, + pg.long_name, + pg.long_name) ) this.mapDataService.mapInitData.stores.forEach( - node => { - let group: PrimaryGroupNode = pgs[node.group] + store => { + let group: PrimaryGroupNode = pgs[store.group] if (!group) { - console.warn('No group (' + node.group + ') for layer node ' + node.store) + console.warn('No group (' + store.group + ') for layer node ' + store.name) return } - group.children.push(node) + group.children.push(new LayerNode( + store.name, + store.long_name, + store.group, + store.symbol, //store.icon, + store.symbol, //|| gisTypeSymbolMap[layer['gisType']], + '', //store.rawSurveyStore, + '', //store.type, + store.gis_type, + {}, //JSON.parse(store.style), + store.z_index, + store.count, + store.description, + store.is_live, + store.custom, + [], //store.tagPlugins, + store.viewable_role, + store.category + )) + // console.log(this.mapDataService, group.children) } ) - this.database.setData(this.mapDataService.mapInitData.groups) + this.database.setData(Object.values(pgs)) //this.mapDataService.mapInitData.groups) this.loading = false this.mapControlService.layerTreeLoaded.complete() this.cdr.markForCheck() diff --git a/src/app/openapi/core/OpenAPI.ts b/src/app/openapi/core/OpenAPI.ts index a6dd2bf..2111f53 100644 --- a/src/app/openapi/core/OpenAPI.ts +++ b/src/app/openapi/core/OpenAPI.ts @@ -21,7 +21,7 @@ export type OpenAPIConfig = { export const OpenAPI: OpenAPIConfig = { BASE: '', - VERSION: '2023.4.dev34+g5dacc90.d20240212', + VERSION: '2023.4.dev37+gb00bf1f.d20240226', WITH_CREDENTIALS: false, CREDENTIALS: 'include', TOKEN: undefined, diff --git a/src/app/openapi/index.ts b/src/app/openapi/index.ts index 8e9b598..984ce0a 100644 --- a/src/app/openapi/index.ts +++ b/src/app/openapi/index.ts @@ -9,7 +9,7 @@ export type { OpenAPIConfig } from './core/OpenAPI'; export type { AdminBasket } from './models/AdminBasket'; export type { Attachment } from './models/Attachment'; -export type { BaseMap } from './models/BaseMap'; +export type { BaseMapWithStores } from './models/BaseMapWithStores'; export type { BaseStyle } from './models/BaseStyle'; export type { BasketDefault } from './models/BasketDefault'; export type { Body_login_for_access_token_api_token_post } from './models/Body_login_for_access_token_api_token_post'; @@ -30,6 +30,7 @@ export type { InfoCategory } from './models/InfoCategory'; export type { InfoItem } from './models/InfoItem'; export type { Map } from './models/Map'; export type { MapInitData } from './models/MapInitData'; +export type { MaplibreStyle } from './models/MaplibreStyle'; export type { Measures } from './models/Measures'; export type { PlotBaseLine } from './models/PlotBaseLine'; export type { PlotBgShape } from './models/PlotBgShape'; diff --git a/src/app/openapi/models/BaseMap.ts b/src/app/openapi/models/BaseMapWithStores.ts similarity index 71% rename from src/app/openapi/models/BaseMap.ts rename to src/app/openapi/models/BaseMapWithStores.ts index 028876a..1fa5688 100644 --- a/src/app/openapi/models/BaseMap.ts +++ b/src/app/openapi/models/BaseMapWithStores.ts @@ -2,8 +2,8 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -export type BaseMap = { - id?: (number | null); +export type BaseMapWithStores = { name: string; + stores: Array; }; diff --git a/src/app/openapi/models/CategoryRead.ts b/src/app/openapi/models/CategoryRead.ts index 8f417cb..eca36c9 100644 --- a/src/app/openapi/models/CategoryRead.ts +++ b/src/app/openapi/models/CategoryRead.ts @@ -16,8 +16,8 @@ export type CategoryRead = { style: (string | null); symbol: (string | null); mapbox_type_custom: (string | null); - mapbox_paint: (Record | null); - mapbox_layout: (Record | null); + mapbox_paint: (Record | number | string)> | null); + mapbox_layout: (Record | number | string)> | null); viewable_role: (string | null); extra: (Record | null); /** diff --git a/src/app/openapi/models/MapInitData.ts b/src/app/openapi/models/MapInitData.ts index 6c9bc92..bfbdbda 100644 --- a/src/app/openapi/models/MapInitData.ts +++ b/src/app/openapi/models/MapInitData.ts @@ -2,13 +2,13 @@ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -import type { BaseMap } from './BaseMap'; +import type { BaseMapWithStores } from './BaseMapWithStores'; import type { BaseStyle } from './BaseStyle'; import type { CategoryGroup } from './CategoryGroup'; import type { Store } from './Store'; export type MapInitData = { baseStyles?: Array; - baseMaps?: Array; + baseMaps?: Array; groups?: Array; stores?: Array; }; diff --git a/src/app/openapi/models/MaplibreStyle.ts b/src/app/openapi/models/MaplibreStyle.ts new file mode 100644 index 0000000..a49cdbe --- /dev/null +++ b/src/app/openapi/models/MaplibreStyle.ts @@ -0,0 +1,10 @@ +/* generated using openapi-typescript-codegen -- do no edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type MaplibreStyle = { + paint?: (Record | number | string)> | null); + layout?: (Record | number | string)> | null); + attribution?: (string | null); +}; + diff --git a/src/app/openapi/models/Store.ts b/src/app/openapi/models/Store.ts index 29695b5..840ad1b 100644 --- a/src/app/openapi/models/Store.ts +++ b/src/app/openapi/models/Store.ts @@ -4,6 +4,7 @@ /* eslint-disable */ export type Store = { name: string; + category?: (string | null); auto_import: boolean; count?: (number | null); custom: boolean; @@ -18,7 +19,6 @@ export type Store = { minor_group_2: (string | null); gis_type: string; status: string; - store: string; style: (string | null); symbol: (string | null); title: string; diff --git a/src/app/openapi/services/MapService.ts b/src/app/openapi/services/MapService.ts index b160d3e..418b1e4 100644 --- a/src/app/openapi/services/MapService.ts +++ b/src/app/openapi/services/MapService.ts @@ -7,6 +7,7 @@ import { HttpClient } from '@angular/common/http'; import type { Observable } from 'rxjs'; import type { BaseStyle } from '../models/BaseStyle'; import type { MapInitData } from '../models/MapInitData'; +import type { MaplibreStyle } from '../models/MaplibreStyle'; import { OpenAPI } from '../core/OpenAPI'; import { request as __request } from '../core/request'; @Injectable({ @@ -46,4 +47,25 @@ export class MapService { }, }); } + /** + * Get Layer Style + * @returns any Successful Response + * @throws ApiError + */ + public getLayerStyleApiMapLayerStyleStoreGet({ + store, + }: { + store: string, + }): Observable<(MaplibreStyle | null)> { + return __request(OpenAPI, this.http, { + method: 'GET', + url: '/api/map/layer_style/{store}', + path: { + 'store': store, + }, + errors: { + 422: `Validation Error`, + }, + }); + } }