Commit e82057fff5ced9506e2a10105bd5d8e90c911ce3
Merge branch 'master' of gitlab.artweb.com.ua:root/maps-admin
Showing
7 changed files
with
252 additions
and
105 deletions
Show diff stats
package.json
| 1 | 1 | { |
| 2 | - "name": "covalent-quickstart", | |
| 3 | - "version": "1.0.0-beta.1", | |
| 4 | - "private": true, | |
| 5 | - "description": "Quickstart App with @covalent packages", | |
| 6 | - "keywords": [ | |
| 7 | - "angular", | |
| 8 | - "components", | |
| 9 | - "reusable" | |
| 10 | - ], | |
| 11 | - "scripts": { | |
| 12 | - "e2e": "protractor", | |
| 13 | - "e2e-test": "protractor ./protractor.conf.js", | |
| 14 | - "lint": "tslint -c ./tslint.json \"./src/**/*.ts\" -e \"./src/**/typings.d.ts\" -e \"./src/environments/**\"", | |
| 15 | - "reinstall": "rm -rf node_modules tmp deploy dist && npm i", | |
| 16 | - "postinstall": "webdriver-manager update", | |
| 17 | - "start-api": "cd mock-api && covalent-data &", | |
| 18 | - "stop-api": "pkill covalent-data", | |
| 19 | - "webdriver-update": "bash ./node_modules/.bin/webdriver-manager update", | |
| 20 | - "test": "ng test --code-coverage --single-run", | |
| 21 | - "ghpages-deploy": "ng build --base-href /covalent-quickstart/ --aot -prod && bash scripts/ghpages-deploy" | |
| 22 | - }, | |
| 23 | - "engines": { | |
| 24 | - "node": ">4.4 < 7", | |
| 25 | - "npm": ">3" | |
| 26 | - }, | |
| 27 | - "repository": { | |
| 28 | - "type": "git", | |
| 29 | - "url": "https://github.com/teradata/covalent-quickstart.git" | |
| 30 | - }, | |
| 31 | - "license": "MIT", | |
| 32 | - "author": "Teradata UX", | |
| 33 | - "contributors": [ | |
| 34 | - "Kyle Ledbetter <kyle.ledbetter@teradata.com>", | |
| 35 | - "Richa Vyas <richa.vyas@teradata.com>", | |
| 36 | - "Ed Morales <eduardo.morales@teradata.com>", | |
| 37 | - "Jason Weaver <jason.weaver@teradata.com>", | |
| 38 | - "Jeremy Smartt <jeremy.smartt@teradata.com>", | |
| 39 | - "Ilsun Park <ilsun.park@teradata.com>" | |
| 40 | - ], | |
| 41 | - "dependencies": { | |
| 42 | - "@angular/common": "2.4.5", | |
| 43 | - "@angular/compiler": "2.4.5", | |
| 44 | - "@angular/core": "2.4.5", | |
| 45 | - "@angular/forms": "2.4.5", | |
| 46 | - "@angular/http": "2.4.5", | |
| 47 | - "@angular/material": "2.0.0-beta.1", | |
| 48 | - "@angular/platform-browser": "2.4.5", | |
| 49 | - "@angular/platform-browser-dynamic": "2.4.5", | |
| 50 | - "@angular/platform-server": "2.4.5", | |
| 51 | - "@angular/router": "3.4.5", | |
| 52 | - "@covalent/core": "1.0.0-beta.1", | |
| 53 | - "@covalent/charts": "1.0.0-beta.1", | |
| 54 | - "@covalent/dynamic-forms": "1.0.0-beta.1", | |
| 55 | - "@covalent/highlight": "1.0.0-beta.1", | |
| 56 | - "@covalent/http": "1.0.0-beta.1", | |
| 57 | - "@covalent/markdown": "1.0.0-beta.1", | |
| 58 | - "@swimlane/ngx-charts": "^3.1.2", | |
| 59 | - "core-js": "^2.4.1", | |
| 60 | - "hammerjs": "^2.0.8", | |
| 61 | - "highlight.js": "9.9.0", | |
| 62 | - "rxjs": "^5.0.1", | |
| 63 | - "showdown": "1.6.0", | |
| 64 | - "zone.js": "^0.7.2", | |
| 65 | - "moment": "^2.17.1", | |
| 66 | - "d3": "^4.4.0", | |
| 67 | - "ag-grid": "7.2.x", | |
| 68 | - "ag-grid-ng2": "7.2.x" | |
| 69 | - }, | |
| 70 | - "devDependencies": { | |
| 71 | - "@angular/compiler-cli": "2.4.5", | |
| 72 | - "@types/hammerjs": "2.0.30", | |
| 73 | - "@types/jasmine": "2.2.31", | |
| 74 | - "@types/node": "6.0.34", | |
| 75 | - "@types/selenium-webdriver": "2.53.36", | |
| 76 | - "angular-cli": "1.0.0-beta.26", | |
| 77 | - "codelyzer": "2.0.0-beta.4", | |
| 78 | - "ember-cli-inject-live-reload": "1.4.0", | |
| 79 | - "jasmine-core": "2.4.1", | |
| 80 | - "jasmine-spec-reporter": "2.5.0", | |
| 81 | - "karma": "1.2.0", | |
| 82 | - "karma-chrome-launcher": "2.0.0", | |
| 83 | - "karma-cli": "1.0.1", | |
| 84 | - "karma-jasmine": "1.0.2", | |
| 85 | - "karma-remap-istanbul": "0.2.1", | |
| 86 | - "karma-firefox-launcher": "1.0.0", | |
| 87 | - "karma-phantomjs-launcher": "1.0.1", | |
| 88 | - "node-sass": "3.8.0", | |
| 89 | - "phantomjs-prebuilt": "2.1.7", | |
| 90 | - "protractor": "4.0.5", | |
| 91 | - "sass-loader": "^4.0.2", | |
| 92 | - "ts-node": "1.2.1", | |
| 93 | - "tslint": "^4.3.1", | |
| 94 | - "typescript": "2.1.5" | |
| 95 | - }, | |
| 96 | - "optionalDependencies": { | |
| 97 | - "@covalent/data": "0.4.0" | |
| 98 | - } | |
| 99 | -} | |
| 100 | 2 | \ No newline at end of file |
| 3 | + "name": "covalent-quickstart", | |
| 4 | + "version": "1.0.0-beta.1", | |
| 5 | + "private": true, | |
| 6 | + "description": "Quickstart App with @covalent packages", | |
| 7 | + "keywords": [ | |
| 8 | + "angular", | |
| 9 | + "components", | |
| 10 | + "reusable" | |
| 11 | + ], | |
| 12 | + "scripts": { | |
| 13 | + "e2e": "protractor", | |
| 14 | + "e2e-test": "protractor ./protractor.conf.js", | |
| 15 | + "lint": "tslint -c ./tslint.json \"./src/**/*.ts\" -e \"./src/**/typings.d.ts\" -e \"./src/environments/**\"", | |
| 16 | + "reinstall": "rm -rf node_modules tmp deploy dist && npm i", | |
| 17 | + "postinstall": "webdriver-manager update", | |
| 18 | + "start-api": "cd mock-api && covalent-data &", | |
| 19 | + "stop-api": "pkill covalent-data", | |
| 20 | + "webdriver-update": "bash ./node_modules/.bin/webdriver-manager update", | |
| 21 | + "test": "ng test --code-coverage --single-run", | |
| 22 | + "ghpages-deploy": "ng build --base-href /covalent-quickstart/ --aot -prod && bash scripts/ghpages-deploy" | |
| 23 | + }, | |
| 24 | + "engines": { | |
| 25 | + "node": ">4.4 < 7", | |
| 26 | + "npm": ">3" | |
| 27 | + }, | |
| 28 | + "repository": { | |
| 29 | + "type": "git", | |
| 30 | + "url": "https://github.com/teradata/covalent-quickstart.git" | |
| 31 | + }, | |
| 32 | + "license": "MIT", | |
| 33 | + "author": "Teradata UX", | |
| 34 | + "contributors": [ | |
| 35 | + "Kyle Ledbetter <kyle.ledbetter@teradata.com>", | |
| 36 | + "Richa Vyas <richa.vyas@teradata.com>", | |
| 37 | + "Ed Morales <eduardo.morales@teradata.com>", | |
| 38 | + "Jason Weaver <jason.weaver@teradata.com>", | |
| 39 | + "Jeremy Smartt <jeremy.smartt@teradata.com>", | |
| 40 | + "Ilsun Park <ilsun.park@teradata.com>" | |
| 41 | + ], | |
| 42 | + "dependencies": { | |
| 43 | + "@angular/common": "2.4.5", | |
| 44 | + "@angular/compiler": "2.4.5", | |
| 45 | + "@angular/core": "2.4.5", | |
| 46 | + "@angular/forms": "2.4.5", | |
| 47 | + "@angular/http": "2.4.5", | |
| 48 | + "@angular/material": "2.0.0-beta.1", | |
| 49 | + "@angular/platform-browser": "2.4.5", | |
| 50 | + "@angular/platform-browser-dynamic": "2.4.5", | |
| 51 | + "@angular/platform-server": "2.4.5", | |
| 52 | + "@angular/router": "3.4.5", | |
| 53 | + "@covalent/charts": "1.0.0-beta.1", | |
| 54 | + "@covalent/core": "1.0.0-beta.1", | |
| 55 | + "@covalent/dynamic-forms": "1.0.0-beta.1", | |
| 56 | + "@covalent/highlight": "1.0.0-beta.1", | |
| 57 | + "@covalent/http": "1.0.0-beta.1", | |
| 58 | + "@covalent/markdown": "1.0.0-beta.1", | |
| 59 | + "@swimlane/ngx-charts": "^3.1.2", | |
| 60 | + "@types/leaflet": "^1.0.54", | |
| 61 | + "ag-grid": "7.2.x", | |
| 62 | + "ag-grid-ng2": "7.2.x", | |
| 63 | + "core-js": "^2.4.1", | |
| 64 | + "d3": "^4.4.0", | |
| 65 | + "hammerjs": "^2.0.8", | |
| 66 | + "highlight.js": "9.9.0", | |
| 67 | + "leaflet": "^1.0.3", | |
| 68 | + "moment": "^2.17.1", | |
| 69 | + "rxjs": "^5.0.1", | |
| 70 | + "showdown": "1.6.0", | |
| 71 | + "zone.js": "^0.7.2" | |
| 72 | + }, | |
| 73 | + "devDependencies": { | |
| 74 | + "@angular/compiler-cli": "2.4.5", | |
| 75 | + "@types/hammerjs": "2.0.30", | |
| 76 | + "@types/jasmine": "2.2.31", | |
| 77 | + "@types/node": "6.0.34", | |
| 78 | + "@types/selenium-webdriver": "2.53.36", | |
| 79 | + "angular-cli": "1.0.0-beta.26", | |
| 80 | + "codelyzer": "2.0.0-beta.4", | |
| 81 | + "ember-cli-inject-live-reload": "1.4.0", | |
| 82 | + "jasmine-core": "2.4.1", | |
| 83 | + "jasmine-spec-reporter": "2.5.0", | |
| 84 | + "karma": "1.2.0", | |
| 85 | + "karma-chrome-launcher": "2.0.0", | |
| 86 | + "karma-cli": "1.0.1", | |
| 87 | + "karma-jasmine": "1.0.2", | |
| 88 | + "karma-remap-istanbul": "0.2.1", | |
| 89 | + "karma-firefox-launcher": "1.0.0", | |
| 90 | + "karma-phantomjs-launcher": "1.0.1", | |
| 91 | + "node-sass": "3.8.0", | |
| 92 | + "phantomjs-prebuilt": "2.1.7", | |
| 93 | + "protractor": "4.0.5", | |
| 94 | + "sass-loader": "^4.0.2", | |
| 95 | + "ts-node": "1.2.1", | |
| 96 | + "tslint": "^4.3.1", | |
| 97 | + "typescript": "2.1.5" | |
| 98 | + }, | |
| 99 | + "optionalDependencies": { | |
| 100 | + "@covalent/data": "0.4.0" | |
| 101 | + } | |
| 102 | +} | ... | ... |
src/app/app.module.ts
| ... | ... | @@ -15,8 +15,7 @@ import { TemplatesComponent } from './templates/templates.component'; |
| 15 | 15 | import { appRoutes, appRoutingProviders } from './app.routes'; |
| 16 | 16 | import { AgGridModule } from 'ag-grid-ng2/main'; |
| 17 | 17 | import { ChartComponent } from '../components/chart/chart.component'; |
| 18 | -import { CandTLeafletComponent } from 'angular2.leaflet.components'; | |
| 19 | -import { CandTLeafletService } from 'angular2.leaflet.components'; | |
| 18 | + | |
| 20 | 19 | |
| 21 | 20 | import { RequestInterceptor } from '../config/interceptors/request.interceptor'; |
| 22 | 21 | |
| ... | ... | @@ -30,6 +29,8 @@ import { RoadToCategoryComponent } from './data/road-to-category/road-to-categor |
| 30 | 29 | import { CrossSectionComponent } from './data/cross-section/cross-section.component'; |
| 31 | 30 | import { EditorComponent } from '../helpers/editor.component'; |
| 32 | 31 | import { RendererComponent } from '../helpers/renderer.component'; |
| 32 | +import { MapEditorComponent } from '../helpers/map-editor.component'; | |
| 33 | +import { MapRendererComponent } from '../helpers/map-renderer.component'; | |
| 33 | 34 | import { FlowIntensityComponent } from './data/flow-intensity/flow-intensity.component'; |
| 34 | 35 | import { RoadComponent } from './data/road/road.component'; |
| 35 | 36 | import { RoadServiceComponent } from './data/road-service/road-service.component'; |
| ... | ... | @@ -76,6 +77,8 @@ const httpInterceptorProviders: Type<any>[] = [ |
| 76 | 77 | RoadSurfaceComponent, |
| 77 | 78 | EditorComponent, |
| 78 | 79 | RendererComponent, |
| 80 | + MapEditorComponent, | |
| 81 | + MapRendererComponent, | |
| 79 | 82 | RoadWidthComponent, |
| 80 | 83 | RoadToCategoryComponent, |
| 81 | 84 | FlowIntensityComponent, |
| ... | ... | @@ -83,8 +86,7 @@ const httpInterceptorProviders: Type<any>[] = [ |
| 83 | 86 | CrossSectionComponent, |
| 84 | 87 | RoadServiceComponent, |
| 85 | 88 | SettlementAddressLinkComponent, |
| 86 | - MapComponent, | |
| 87 | - CandTLeafletComponent | |
| 89 | + MapComponent | |
| 88 | 90 | ], // directives, components, and pipes owned by this NgModule |
| 89 | 91 | imports: [ |
| 90 | 92 | BrowserModule, |
| ... | ... | @@ -93,6 +95,8 @@ const httpInterceptorProviders: Type<any>[] = [ |
| 93 | 95 | ServiceObjectComponent, |
| 94 | 96 | EditorComponent, |
| 95 | 97 | RendererComponent, |
| 98 | + MapEditorComponent, | |
| 99 | + MapRendererComponent, | |
| 96 | 100 | RoadSurfaceComponent, |
| 97 | 101 | RoadWidthComponent, |
| 98 | 102 | RoadToCategoryComponent, |
| ... | ... | @@ -139,8 +143,7 @@ const httpInterceptorProviders: Type<any>[] = [ |
| 139 | 143 | RoadServiceService, |
| 140 | 144 | RoadServiceCreateService, |
| 141 | 145 | SettlementAddressLinkService, |
| 142 | - SettlementAddressLinkCreateService, | |
| 143 | - CandTLeafletService, | |
| 146 | + SettlementAddressLinkCreateService | |
| 144 | 147 | ], // additional providers needed for this module |
| 145 | 148 | entryComponents: [ ], |
| 146 | 149 | bootstrap: [ AppComponent ], | ... | ... |
src/app/data/bus-stop/bus-stop.component.ts
| ... | ... | @@ -8,6 +8,8 @@ import { BusStopService } from '../../../services/bus-stop.service'; |
| 8 | 8 | import { BusStop } from '../../../models/bus-stop'; |
| 9 | 9 | import { EditorComponent } from '../../../helpers/editor.component'; |
| 10 | 10 | import { RendererComponent } from '../../../helpers/renderer.component'; |
| 11 | +import { MapEditorComponent } from '../../../helpers/map-editor.component'; | |
| 12 | +import { MapRendererComponent } from '../../../helpers/map-renderer.component'; | |
| 11 | 13 | import { BusStopCreateService } from '../../../services/bus-stop-create.service'; |
| 12 | 14 | import { BooleanSelectListService } from '../../../services/boolean-select-list.service'; |
| 13 | 15 | import { RegionSelectList } from '../../../models/region-select-list'; |
| ... | ... | @@ -116,7 +118,6 @@ export class BusStopComponent extends StatementBase { |
| 116 | 118 | labelCol: 'value', |
| 117 | 119 | }, |
| 118 | 120 | }, |
| 119 | - , | |
| 120 | 121 | { |
| 121 | 122 | headerName: 'Наявність елементів зупин. майдан', |
| 122 | 123 | field: 'areaStopAvailability', |
| ... | ... | @@ -175,6 +176,16 @@ export class BusStopComponent extends StatementBase { |
| 175 | 176 | field: 'yearRepair', |
| 176 | 177 | editable: true, |
| 177 | 178 | }, |
| 179 | + { | |
| 180 | + headerName: 'position', | |
| 181 | + field: 'position', | |
| 182 | + editable: true, | |
| 183 | + cellEditorFramework: MapEditorComponent, | |
| 184 | + cellRendererFramework: MapRendererComponent, | |
| 185 | + cellEditorParams: { | |
| 186 | + position: 'position' | |
| 187 | + }, | |
| 188 | + }, | |
| 178 | 189 | ]; |
| 179 | 190 | } |
| 180 | 191 | ... | ... |
| 1 | +import { Component, ViewContainerRef, ViewChild, AfterViewInit } from '@angular/core'; | |
| 2 | + | |
| 3 | +import { AgEditorComponent } from 'ag-grid-ng2/main'; | |
| 4 | +import * as L from 'leaflet'; | |
| 5 | + | |
| 6 | +@Component({ | |
| 7 | + selector: 'editor-cell', | |
| 8 | + template: ` | |
| 9 | + <div class="md-select-panel map-container"> | |
| 10 | + <div id="mapId"></div> | |
| 11 | + </div> | |
| 12 | + ` | |
| 13 | +}) | |
| 14 | +export class MapEditorComponent implements AgEditorComponent, AfterViewInit { | |
| 15 | + @ViewChild('container', {read: ViewContainerRef}) | |
| 16 | + public container; | |
| 17 | + public item: Object = null; | |
| 18 | + public data: Object[]; | |
| 19 | + private params: any; | |
| 20 | + public map: L.Map; | |
| 21 | + public icon: L.Icon; | |
| 22 | + public status: boolean = false; | |
| 23 | + ngAfterViewInit() { | |
| 24 | + | |
| 25 | + } | |
| 26 | + | |
| 27 | + agInit(params: any): void { | |
| 28 | + this.params = params; | |
| 29 | + this.icon = L.icon({ | |
| 30 | + iconUrl: '/assets/icons/marker-icon.png', | |
| 31 | + iconSize: [25, 41], // size of the icon | |
| 32 | + popupAnchor: [-3, -76], // point from which the popup should open relative to the iconAnchor | |
| 33 | + }); | |
| 34 | + this.map = L.map('mapId').setView([51.505, -0.09], 13); | |
| 35 | + L.tileLayer('https://a.tile.openstreetmap.org/{z}/{x}/{y}.png', { | |
| 36 | + maxZoom: 18, | |
| 37 | + }).addTo(this.map); | |
| 38 | + if(params.value != null){ | |
| 39 | + this.status = true; | |
| 40 | + let options = { | |
| 41 | + draggable:true, | |
| 42 | + icon: this.icon, | |
| 43 | + }; | |
| 44 | + let latLng = params.value.split(','); | |
| 45 | + let marker = L.marker(new L.LatLng(latLng[0],latLng[1]),options); | |
| 46 | + marker.on('dragend', this.onDraged.bind(this)); | |
| 47 | + this.map.addLayer(marker); | |
| 48 | + } | |
| 49 | + this.data = params.data || []; | |
| 50 | + this.map.on('click', this.onMapClick.bind(this)); | |
| 51 | + console.log(this); | |
| 52 | + } | |
| 53 | + | |
| 54 | + getValue(): any { | |
| 55 | + return this.item; | |
| 56 | + } | |
| 57 | + | |
| 58 | + isPopup(): boolean { | |
| 59 | + return true; | |
| 60 | + } | |
| 61 | + | |
| 62 | + setValue(item: Object): void { | |
| 63 | + this.item = item; | |
| 64 | + } | |
| 65 | + | |
| 66 | + onDraged(e){ | |
| 67 | + let marker = e.target; | |
| 68 | + let position = marker.getLatLng(); | |
| 69 | + marker.setLatLng(new L.LatLng(position.lat, position.lng),{draggable:true}); | |
| 70 | + this.item = position.lat +','+ position.lng; | |
| 71 | + } | |
| 72 | + onClick(item: Object) { | |
| 73 | + this.setValue(item); | |
| 74 | + this.params.api.stopEditing(); | |
| 75 | + } | |
| 76 | + | |
| 77 | + onKeyDown(event): boolean { | |
| 78 | + event.stopPropagation(); | |
| 79 | + return false; | |
| 80 | + } | |
| 81 | + | |
| 82 | + onMapClick(e) { | |
| 83 | + | |
| 84 | + if(!this.status){ | |
| 85 | + let options = { | |
| 86 | + draggable:true, | |
| 87 | + icon: this.icon, | |
| 88 | + }; | |
| 89 | + let marker = L.marker(e.latlng,options); | |
| 90 | + this.item = e.latlng.lat +','+ e.latlng.lng; | |
| 91 | + this.map.addLayer(marker); | |
| 92 | + marker.on('dragend', this.onDraged.bind(this)); | |
| 93 | + } | |
| 94 | + }; | |
| 95 | +} | ... | ... |
| 1 | +import { Component } from '@angular/core'; | |
| 2 | + | |
| 3 | +import { AgRendererComponent } from 'ag-grid-ng2/main'; | |
| 4 | + | |
| 5 | +import { RegionSelectList } from '../models/region-select-list'; | |
| 6 | + | |
| 7 | +@Component({ | |
| 8 | + selector: 'render-cell', | |
| 9 | + template: `<span *ngIf="this.model !== undefined">{{this.label}}</span>` | |
| 10 | +}) | |
| 11 | +export class MapRendererComponent implements AgRendererComponent { | |
| 12 | + private params: any; | |
| 13 | + private model: Object = null; | |
| 14 | + private label: string = null; | |
| 15 | + agInit(params: any): void { | |
| 16 | + this.params = params; | |
| 17 | + this.setValue(params); | |
| 18 | + } | |
| 19 | + refresh(params: any): void { | |
| 20 | + this.params = params; | |
| 21 | + this.setValue(params); | |
| 22 | + } | |
| 23 | + private setValue(params) { | |
| 24 | + this.label = params.value; | |
| 25 | + } | |
| 26 | +} | ... | ... |
src/models/bus-stop.ts
src/styles.scss