Some fixes
This commit is contained in:
parent
173be180ce
commit
ca6331e053
22
angular.json
22
angular.json
@ -19,12 +19,28 @@
|
|||||||
"polyfills": "src/polyfills.ts",
|
"polyfills": "src/polyfills.ts",
|
||||||
"tsConfig": "src/tsconfig.app.json",
|
"tsConfig": "src/tsconfig.app.json",
|
||||||
"assets": [
|
"assets": [
|
||||||
"src/favicon.ico",
|
{
|
||||||
"src/assets",
|
"glob": "**/*",
|
||||||
|
"input":"src/assets/images",
|
||||||
|
"output":"/images"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"glob": "silent-refresh.html",
|
||||||
|
"input":"src/assets",
|
||||||
|
"output":"/"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"glob": "favicon.ico",
|
||||||
|
"input":"src/assets",
|
||||||
|
"output":"/"
|
||||||
|
},
|
||||||
"src/configuration.json"
|
"src/configuration.json"
|
||||||
],
|
],
|
||||||
"styles": [
|
"styles": [
|
||||||
"src/styles.css"
|
"src/styles.css",
|
||||||
|
"node_modules/bootstrap/dist/css/bootstrap.min.css",
|
||||||
|
"node_modules/font-awesome/css/font-awesome.min.css",
|
||||||
|
"fonts/FMIconFont/style.css"
|
||||||
],
|
],
|
||||||
"scripts": [],
|
"scripts": [],
|
||||||
"es5BrowserSupport": true
|
"es5BrowserSupport": true
|
||||||
|
130
fonts/FMIconFont/FMIconFont.svg
Normal file
130
fonts/FMIconFont/FMIconFont.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 34 KiB |
BIN
fonts/FMIconFont/FMIconFont.ttf
Normal file
BIN
fonts/FMIconFont/FMIconFont.ttf
Normal file
Binary file not shown.
BIN
fonts/FMIconFont/FMIconFont.woff
Normal file
BIN
fonts/FMIconFont/FMIconFont.woff
Normal file
Binary file not shown.
BIN
fonts/FMIconFont/FMIconFont.woff2
Normal file
BIN
fonts/FMIconFont/FMIconFont.woff2
Normal file
Binary file not shown.
32
fonts/FMIconFont/style.css
Normal file
32
fonts/FMIconFont/style.css
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/* font converted using font-converter.net. thank you! */
|
||||||
|
|
||||||
|
.fm {
|
||||||
|
display: inline-block;
|
||||||
|
font-style: normal;
|
||||||
|
font-variant-ligatures: normal;
|
||||||
|
font-variant-caps: normal;
|
||||||
|
font-variant-numeric: normal;
|
||||||
|
font-variant-east-asian: normal;
|
||||||
|
font-weight: normal;
|
||||||
|
font-stretch: normal;
|
||||||
|
font-size: inherit;
|
||||||
|
line-height: 1;
|
||||||
|
font-family: FarmMaps;
|
||||||
|
text-rendering: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fm-farm:before {
|
||||||
|
content: "a";
|
||||||
|
}
|
||||||
|
|
||||||
|
.fm-potato:before {
|
||||||
|
content: "b";
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "FarmMaps";
|
||||||
|
src: url("./FMIconFont.woff") format("woff"), /* Modern Browsers */
|
||||||
|
url("./FMIconFont.woff2") format("woff2"); /* Modern Browsers */
|
||||||
|
font-weight: normal;
|
||||||
|
font-style: normal;
|
||||||
|
}
|
109
package-lock.json
generated
109
package-lock.json
generated
@ -679,6 +679,27 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@farmmaps/common-map": {
|
||||||
|
"version": "file:dist/common-map",
|
||||||
|
"requires": {
|
||||||
|
"@farmmaps/common": "0.0.1-prerelease.43",
|
||||||
|
"ngx-openlayers": "1.0.0-next.9",
|
||||||
|
"ol": "^5.3.3",
|
||||||
|
"tslib": "^1.9.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@farmmaps/common": {
|
||||||
|
"version": "0.0.1-prerelease.43",
|
||||||
|
"resolved": "https://repository.akkerweb.nl/repository/npm-group/@farmmaps/common/-/common-0.0.1-prerelease.43.tgz",
|
||||||
|
"integrity": "sha512-tV42SIpXAremVLolUEW0ESdYRdyllunbIZgHB3ObsqPJMrI0vgnkIr8LdtSaaYokAGXA3L8n6q3Zi78/hiBgQg==",
|
||||||
|
"requires": {
|
||||||
|
"angular-oauth2-oidc": "^5.0.2",
|
||||||
|
"ngx-uploadx": "^3.1.3",
|
||||||
|
"tslib": "^1.9.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"@ng-bootstrap/ng-bootstrap": {
|
"@ng-bootstrap/ng-bootstrap": {
|
||||||
"version": "4.2.1",
|
"version": "4.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-4.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-4.2.1.tgz",
|
||||||
@ -1108,6 +1129,15 @@
|
|||||||
"integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
|
"integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"angular-oauth2-oidc": {
|
||||||
|
"version": "5.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/angular-oauth2-oidc/-/angular-oauth2-oidc-5.0.2.tgz",
|
||||||
|
"integrity": "sha512-jtOv4IWEjSFfBHVE4seWGWT/ZfWJ95QJ1JaFhVVGJEF64ibGuPwV3ztwTOUl98QHi/Yg4PXXDAisb31JnIbxBw==",
|
||||||
|
"requires": {
|
||||||
|
"jsrsasign": "^8.0.12",
|
||||||
|
"tslib": "^1.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"ansi-align": {
|
"ansi-align": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://repository.akkerweb.nl/repository/npm-group/ansi-align/-/ansi-align-2.0.0.tgz",
|
"resolved": "https://repository.akkerweb.nl/repository/npm-group/ansi-align/-/ansi-align-2.0.0.tgz",
|
||||||
@ -3768,6 +3798,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"font-awesome": {
|
||||||
|
"version": "4.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz",
|
||||||
|
"integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM="
|
||||||
|
},
|
||||||
"for-in": {
|
"for-in": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://repository.akkerweb.nl/repository/npm-group/for-in/-/for-in-1.0.2.tgz",
|
"resolved": "https://repository.akkerweb.nl/repository/npm-group/for-in/-/for-in-1.0.2.tgz",
|
||||||
@ -4917,8 +4952,7 @@
|
|||||||
"ieee754": {
|
"ieee754": {
|
||||||
"version": "1.1.13",
|
"version": "1.1.13",
|
||||||
"resolved": "https://repository.akkerweb.nl/repository/npm-group/ieee754/-/ieee754-1.1.13.tgz",
|
"resolved": "https://repository.akkerweb.nl/repository/npm-group/ieee754/-/ieee754-1.1.13.tgz",
|
||||||
"integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==",
|
"integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"iferr": {
|
"iferr": {
|
||||||
"version": "0.1.5",
|
"version": "0.1.5",
|
||||||
@ -5911,6 +5945,11 @@
|
|||||||
"verror": "1.10.0"
|
"verror": "1.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"jsrsasign": {
|
||||||
|
"version": "8.0.12",
|
||||||
|
"resolved": "https://registry.npmjs.org/jsrsasign/-/jsrsasign-8.0.12.tgz",
|
||||||
|
"integrity": "sha1-Iqu5ZW00owuVMENnIINeicLlwxY="
|
||||||
|
},
|
||||||
"jszip": {
|
"jszip": {
|
||||||
"version": "3.2.1",
|
"version": "3.2.1",
|
||||||
"resolved": "https://repository.akkerweb.nl/repository/npm-group/jszip/-/jszip-3.2.1.tgz",
|
"resolved": "https://repository.akkerweb.nl/repository/npm-group/jszip/-/jszip-3.2.1.tgz",
|
||||||
@ -6917,6 +6956,22 @@
|
|||||||
"deepmerge": "^3.2.0"
|
"deepmerge": "^3.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"ngx-openlayers": {
|
||||||
|
"version": "1.0.0-next.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/ngx-openlayers/-/ngx-openlayers-1.0.0-next.9.tgz",
|
||||||
|
"integrity": "sha512-14UFxJX9oeOXtq+HJCJyXn0sBmYmCqj2AnFtetKk1FsDe8EUMFGIRju8UOFegCr2oEu5JsuRjALcfW7lCe+teg==",
|
||||||
|
"requires": {
|
||||||
|
"tslib": "^1.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ngx-uploadx": {
|
||||||
|
"version": "3.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/ngx-uploadx/-/ngx-uploadx-3.3.2.tgz",
|
||||||
|
"integrity": "sha512-gRdXXq2cRU9HE6dj65qay9GV8NRC7n8y5LtMzJWqsfu2k3CHMQxo2TqZwA9/l/PqJ76RoO7sTPy1OenFQ+krkQ==",
|
||||||
|
"requires": {
|
||||||
|
"tslib": "^1.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nice-try": {
|
"nice-try": {
|
||||||
"version": "1.0.5",
|
"version": "1.0.5",
|
||||||
"resolved": "https://repository.akkerweb.nl/repository/npm-group/nice-try/-/nice-try-1.0.5.tgz",
|
"resolved": "https://repository.akkerweb.nl/repository/npm-group/nice-try/-/nice-try-1.0.5.tgz",
|
||||||
@ -7277,6 +7332,16 @@
|
|||||||
"integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
|
"integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"ol": {
|
||||||
|
"version": "5.3.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/ol/-/ol-5.3.3.tgz",
|
||||||
|
"integrity": "sha512-7eU4x8YMduNcED1D5wI+AMWDRe7/1HmGfsbV+kFFROI9RNABU/6n4osj6Q3trZbxxKnK2DSRIjIRGwRHT/Z+Ww==",
|
||||||
|
"requires": {
|
||||||
|
"pbf": "3.1.0",
|
||||||
|
"pixelworks": "1.1.0",
|
||||||
|
"rbush": "2.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"on-finished": {
|
"on-finished": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.0",
|
||||||
"resolved": "https://repository.akkerweb.nl/repository/npm-group/on-finished/-/on-finished-2.3.0.tgz",
|
"resolved": "https://repository.akkerweb.nl/repository/npm-group/on-finished/-/on-finished-2.3.0.tgz",
|
||||||
@ -7749,6 +7814,15 @@
|
|||||||
"pify": "^3.0.0"
|
"pify": "^3.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"pbf": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pbf/-/pbf-3.1.0.tgz",
|
||||||
|
"integrity": "sha512-/hYJmIsTmh7fMkHAWWXJ5b8IKLWdjdlAFb3IHkRBn1XUhIYBChVGfVwmHEAV3UfXTxsP/AKfYTXTS/dCPxJd5w==",
|
||||||
|
"requires": {
|
||||||
|
"ieee754": "^1.1.6",
|
||||||
|
"resolve-protobuf-schema": "^2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"pbkdf2": {
|
"pbkdf2": {
|
||||||
"version": "3.0.17",
|
"version": "3.0.17",
|
||||||
"resolved": "https://repository.akkerweb.nl/repository/npm-group/pbkdf2/-/pbkdf2-3.0.17.tgz",
|
"resolved": "https://repository.akkerweb.nl/repository/npm-group/pbkdf2/-/pbkdf2-3.0.17.tgz",
|
||||||
@ -7788,6 +7862,11 @@
|
|||||||
"pinkie": "^2.0.0"
|
"pinkie": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"pixelworks": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/pixelworks/-/pixelworks-1.1.0.tgz",
|
||||||
|
"integrity": "sha1-Hwla1I3Ki/ihyCWOAJIDGkTyLKU="
|
||||||
|
},
|
||||||
"pkg-dir": {
|
"pkg-dir": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://repository.akkerweb.nl/repository/npm-group/pkg-dir/-/pkg-dir-2.0.0.tgz",
|
"resolved": "https://repository.akkerweb.nl/repository/npm-group/pkg-dir/-/pkg-dir-2.0.0.tgz",
|
||||||
@ -7946,6 +8025,11 @@
|
|||||||
"retry": "^0.10.0"
|
"retry": "^0.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"protocol-buffers-schema": {
|
||||||
|
"version": "3.3.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.3.2.tgz",
|
||||||
|
"integrity": "sha512-Xdayp8sB/mU+sUV4G7ws8xtYMGdQnxbeIfLjyO9TZZRJdztBGhlmbI5x1qcY4TG5hBkIKGnc28i7nXxaugu88w=="
|
||||||
|
},
|
||||||
"protoduck": {
|
"protoduck": {
|
||||||
"version": "5.0.1",
|
"version": "5.0.1",
|
||||||
"resolved": "https://repository.akkerweb.nl/repository/npm-group/protoduck/-/protoduck-5.0.1.tgz",
|
"resolved": "https://repository.akkerweb.nl/repository/npm-group/protoduck/-/protoduck-5.0.1.tgz",
|
||||||
@ -8175,6 +8259,11 @@
|
|||||||
"resolved": "https://repository.akkerweb.nl/repository/npm-group/querystringify/-/querystringify-2.1.1.tgz",
|
"resolved": "https://repository.akkerweb.nl/repository/npm-group/querystringify/-/querystringify-2.1.1.tgz",
|
||||||
"integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA=="
|
"integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA=="
|
||||||
},
|
},
|
||||||
|
"quickselect": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ=="
|
||||||
|
},
|
||||||
"randombytes": {
|
"randombytes": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://repository.akkerweb.nl/repository/npm-group/randombytes/-/randombytes-2.1.0.tgz",
|
"resolved": "https://repository.akkerweb.nl/repository/npm-group/randombytes/-/randombytes-2.1.0.tgz",
|
||||||
@ -8230,6 +8319,14 @@
|
|||||||
"schema-utils": "^1.0.0"
|
"schema-utils": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"rbush": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==",
|
||||||
|
"requires": {
|
||||||
|
"quickselect": "^1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"rc": {
|
"rc": {
|
||||||
"version": "1.2.8",
|
"version": "1.2.8",
|
||||||
"resolved": "https://repository.akkerweb.nl/repository/npm-group/rc/-/rc-1.2.8.tgz",
|
"resolved": "https://repository.akkerweb.nl/repository/npm-group/rc/-/rc-1.2.8.tgz",
|
||||||
@ -8541,6 +8638,14 @@
|
|||||||
"integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
|
"integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"resolve-protobuf-schema": {
|
||||||
|
"version": "2.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz",
|
||||||
|
"integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==",
|
||||||
|
"requires": {
|
||||||
|
"protocol-buffers-schema": "^3.3.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"resolve-url": {
|
"resolve-url": {
|
||||||
"version": "0.2.1",
|
"version": "0.2.1",
|
||||||
"resolved": "https://repository.akkerweb.nl/repository/npm-group/resolve-url/-/resolve-url-0.2.1.tgz",
|
"resolved": "https://repository.akkerweb.nl/repository/npm-group/resolve-url/-/resolve-url-0.2.1.tgz",
|
||||||
|
@ -21,11 +21,13 @@
|
|||||||
"@angular/router": "~7.2.0",
|
"@angular/router": "~7.2.0",
|
||||||
"@aspnet/signalr": "^1.1.4",
|
"@aspnet/signalr": "^1.1.4",
|
||||||
"@farmmaps/common": "file:dist/common",
|
"@farmmaps/common": "file:dist/common",
|
||||||
|
"@farmmaps/common-map": "file:dist/common-map",
|
||||||
"@ng-bootstrap/ng-bootstrap": "^4.2.1",
|
"@ng-bootstrap/ng-bootstrap": "^4.2.1",
|
||||||
"@ngrx/effects": "^7.2.0",
|
"@ngrx/effects": "^7.2.0",
|
||||||
"@ngrx/router-store": "^7.2.0",
|
"@ngrx/router-store": "^7.2.0",
|
||||||
"@ngrx/store": "^7.2.0",
|
"@ngrx/store": "^7.2.0",
|
||||||
"bootstrap": "^4.3.1",
|
"bootstrap": "^4.3.1",
|
||||||
|
"font-awesome": "^4.7.0",
|
||||||
"core-js": "^2.5.4",
|
"core-js": "^2.5.4",
|
||||||
"ngrx-store-localstorage": "^8.0.0",
|
"ngrx-store-localstorage": "^8.0.0",
|
||||||
"resumablejs": "^1.1.0",
|
"resumablejs": "^1.1.0",
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
import { Component, OnInit } from '@angular/core';
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'lib-common-map',
|
|
||||||
template: `
|
|
||||||
<p>
|
|
||||||
common-map works!
|
|
||||||
</p>
|
|
||||||
`,
|
|
||||||
styles: []
|
|
||||||
})
|
|
||||||
export class CommonMapComponent implements OnInit {
|
|
||||||
|
|
||||||
constructor() { }
|
|
||||||
|
|
||||||
ngOnInit() {
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,4 +1,4 @@
|
|||||||
import { NgModule } from '@angular/core';
|
import { NgModule ,ModuleWithProviders} from '@angular/core';
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
||||||
|
|
||||||
@ -62,6 +62,7 @@ import { WidgetStatusComponent } from './components/widget-status/widget-status.
|
|||||||
import { ItemListItemShadowComponent } from './components/item-list-item-shadow/item-list-item-shadow.component';
|
import { ItemListItemShadowComponent } from './components/item-list-item-shadow/item-list-item-shadow.component';
|
||||||
import { ItemListItemBofekComponent } from './components/item-list-item-bofek/item-list-item-bofek.component';
|
import { ItemListItemBofekComponent } from './components/item-list-item-bofek/item-list-item-bofek.component';
|
||||||
|
|
||||||
|
|
||||||
export {
|
export {
|
||||||
mapEffects,
|
mapEffects,
|
||||||
mapReducer,
|
mapReducer,
|
||||||
@ -171,48 +172,26 @@ export {
|
|||||||
// Switch2D3DComponent
|
// Switch2D3DComponent
|
||||||
],
|
],
|
||||||
entryComponents: [
|
entryComponents: [
|
||||||
// FeatureListComponent,
|
FeatureListComponent,
|
||||||
// FeatureListCroppingschemeComponent,
|
FeatureListCroppingschemeComponent,
|
||||||
// FeatureListCropfieldComponent,
|
FeatureListCropfieldComponent,
|
||||||
// FeatureListFeatureComponent,
|
FeatureListFeatureComponent,
|
||||||
// FeatureListFeatureCroppingschemeComponent,
|
FeatureListFeatureCroppingschemeComponent,
|
||||||
// FeatureListFeatureCropfieldComponent,
|
FeatureListFeatureCropfieldComponent,
|
||||||
// SelectedItemComponent,
|
SelectedItemComponent,
|
||||||
// SelectedItemCropfieldComponent,
|
SelectedItemCropfieldComponent,
|
||||||
// SelectedItemGeotiffComponent,
|
SelectedItemGeotiffComponent,
|
||||||
// SelectedItemShapeComponent,
|
SelectedItemShapeComponent,
|
||||||
// ItemListComponent,
|
ItemListComponent,
|
||||||
// ItemListItemComponent,
|
ItemListItemComponent,
|
||||||
// ItemWidgetWeatherComponent,
|
ItemWidgetWeatherComponent,
|
||||||
// ItemListItemTemporalComponent,
|
ItemListItemTemporalComponent,
|
||||||
// ItemListItemHeightComponent,
|
ItemListItemHeightComponent,
|
||||||
// ItemListItemTipstarComponent,
|
ItemListItemTipstarComponent,
|
||||||
// ItemListItemWatBalComponent,
|
ItemListItemWatBalComponent,
|
||||||
// ItemListItemShadowComponent,
|
ItemListItemShadowComponent,
|
||||||
// ItemListItemBofekComponent,
|
ItemListItemBofekComponent,
|
||||||
],
|
],
|
||||||
// providers: [
|
|
||||||
// StateSerializerService,
|
|
||||||
// GeolocationService,
|
|
||||||
// { provide: AbstractFeatureListComponent, useClass: FeatureListCroppingschemeComponent, multi: true },
|
|
||||||
// { provide: AbstractFeatureListComponent, useClass: FeatureListCropfieldComponent, multi: true },
|
|
||||||
// { provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureComponent, multi: true },
|
|
||||||
// { provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureCroppingschemeComponent, multi: true },
|
|
||||||
// { provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureCropfieldComponent, multi: true },
|
|
||||||
// { provide: AbstractSelectedItemComponent, useClass: SelectedItemComponent, multi: true },
|
|
||||||
// { provide: AbstractSelectedItemComponent, useClass: SelectedItemCropfieldComponent, multi: true },
|
|
||||||
// { provide: AbstractSelectedItemComponent, useClass: SelectedItemGeotiffComponent, multi: true },
|
|
||||||
// { provide: AbstractSelectedItemComponent, useClass: SelectedItemShapeComponent, multi: true },
|
|
||||||
// { provide: AbstractItemListItemComponent, useClass: ItemListItemComponent, multi: true },
|
|
||||||
// { provide: AbstractItemWidgetComponent, useClass: ItemWidgetWeatherComponent, multi: true },
|
|
||||||
// { provide: AbstractItemListItemComponent, useClass: ItemListItemTemporalComponent, multi: true },
|
|
||||||
// { provide: AbstractItemListItemComponent, useClass: ItemListItemHeightComponent, multi: true },
|
|
||||||
// { provide: AbstractItemListItemComponent, useClass: ItemListItemTipstarComponent, multi: true },
|
|
||||||
// { provide: AbstractItemListItemComponent, useClass: ItemListItemWatBalComponent, multi: true },
|
|
||||||
// { provide: AbstractItemListItemComponent, useClass: ItemListItemShadowComponent, multi: true },
|
|
||||||
// { provide: AbstractItemListItemComponent, useClass: ItemListItemBofekComponent, multi: true },
|
|
||||||
// { provide: AbstractItemListComponent, useClass: ItemListComponent, multi: true }
|
|
||||||
// ],
|
|
||||||
exports: [
|
exports: [
|
||||||
ItemVectorSourceComponent,
|
ItemVectorSourceComponent,
|
||||||
ItemFeaturesSourceComponent,
|
ItemFeaturesSourceComponent,
|
||||||
@ -256,4 +235,33 @@ export {
|
|||||||
ZoomToExtentComponent
|
ZoomToExtentComponent
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
export class CommonMapModule { }
|
|
||||||
|
export class AppCommonMapModule {
|
||||||
|
static forRoot(): ModuleWithProviders {
|
||||||
|
return {
|
||||||
|
ngModule: AppCommonMapModule,
|
||||||
|
providers: [
|
||||||
|
StateSerializerService,
|
||||||
|
GeolocationService,
|
||||||
|
{ provide: AbstractFeatureListComponent, useClass: FeatureListCroppingschemeComponent, multi: true },
|
||||||
|
{ provide: AbstractFeatureListComponent, useClass: FeatureListCropfieldComponent, multi: true },
|
||||||
|
{ provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureComponent, multi: true },
|
||||||
|
{ provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureCroppingschemeComponent, multi: true },
|
||||||
|
{ provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureCropfieldComponent, multi: true },
|
||||||
|
{ provide: AbstractSelectedItemComponent, useClass: SelectedItemComponent, multi: true },
|
||||||
|
{ provide: AbstractSelectedItemComponent, useClass: SelectedItemCropfieldComponent, multi: true },
|
||||||
|
{ provide: AbstractSelectedItemComponent, useClass: SelectedItemGeotiffComponent, multi: true },
|
||||||
|
{ provide: AbstractSelectedItemComponent, useClass: SelectedItemShapeComponent, multi: true },
|
||||||
|
{ provide: AbstractItemListItemComponent, useClass: ItemListItemComponent, multi: true },
|
||||||
|
{ provide: AbstractItemWidgetComponent, useClass: ItemWidgetWeatherComponent, multi: true },
|
||||||
|
{ provide: AbstractItemListItemComponent, useClass: ItemListItemTemporalComponent, multi: true },
|
||||||
|
{ provide: AbstractItemListItemComponent, useClass: ItemListItemHeightComponent, multi: true },
|
||||||
|
{ provide: AbstractItemListItemComponent, useClass: ItemListItemTipstarComponent, multi: true },
|
||||||
|
{ provide: AbstractItemListItemComponent, useClass: ItemListItemWatBalComponent, multi: true },
|
||||||
|
{ provide: AbstractItemListItemComponent, useClass: ItemListItemShadowComponent, multi: true },
|
||||||
|
{ provide: AbstractItemListItemComponent, useClass: ItemListItemBofekComponent, multi: true },
|
||||||
|
{ provide: AbstractItemListComponent, useClass: ItemListComponent, multi: true }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -30,7 +30,7 @@ export class GpsLocation implements OnInit,OnChanges{
|
|||||||
}
|
}
|
||||||
|
|
||||||
recalcLocationTolerance() {
|
recalcLocationTolerance() {
|
||||||
this.locTolerancePixels = this.locationTolerance / this.resolution;
|
this.locTolerancePixels = this.resolution >0? this.locationTolerance / this.resolution:0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
|
@ -34,7 +34,7 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
|
|||||||
|
|
||||||
constructor(private itemService: ItemService, @Host() private map: MapComponent, public appConfig: AppConfig) {
|
constructor(private itemService: ItemService, @Host() private map: MapComponent, public appConfig: AppConfig) {
|
||||||
super(map);
|
super(map);
|
||||||
this._apiEndPoint = "";//appConfig.getConfig("apiEndPoint");
|
this._apiEndPoint = appConfig.getConfig("apiEndPoint");
|
||||||
}
|
}
|
||||||
|
|
||||||
private styleCache = {}
|
private styleCache = {}
|
||||||
|
@ -2,7 +2,7 @@ import { Component, Input, Injectable} from '@angular/core';
|
|||||||
import { Feature } from 'ol';
|
import { Feature } from 'ol';
|
||||||
import { Store } from '@ngrx/store';
|
import { Store } from '@ngrx/store';
|
||||||
import * as mapReducers from '../../reducers/map.reducer';
|
import * as mapReducers from '../../reducers/map.reducer';
|
||||||
import { commonReducers,ItemTypeService } from '@farmmaps/common';
|
import { commonReducers,ItemTypeService,AppConfig } from '@farmmaps/common';
|
||||||
import { AbstractFeatureListFeatureComponent } from '../feature-list-feature/feature-list-feature.component';
|
import { AbstractFeatureListFeatureComponent } from '../feature-list-feature/feature-list-feature.component';
|
||||||
import { ForItemType } from '../for-item/for-itemtype.decorator';
|
import { ForItemType } from '../for-item/for-itemtype.decorator';
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ import { ForItemType } from '../for-item/for-itemtype.decorator';
|
|||||||
})
|
})
|
||||||
export class FeatureListFeatureCropfieldComponent extends AbstractFeatureListFeatureComponent {
|
export class FeatureListFeatureCropfieldComponent extends AbstractFeatureListFeatureComponent {
|
||||||
|
|
||||||
constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService) {
|
constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService,config:AppConfig) {
|
||||||
super(store, itemTypeService);
|
super(store, itemTypeService,config);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@ import { Component, Input, Injectable} from '@angular/core';
|
|||||||
import { Feature } from 'ol';
|
import { Feature } from 'ol';
|
||||||
import { Store } from '@ngrx/store';
|
import { Store } from '@ngrx/store';
|
||||||
import * as mapReducers from '../../reducers/map.reducer';
|
import * as mapReducers from '../../reducers/map.reducer';
|
||||||
import { commonReducers,ItemTypeService } from '@farmmaps/common';
|
import { commonReducers,ItemTypeService,AppConfig } from '@farmmaps/common';
|
||||||
import { AbstractFeatureListFeatureComponent } from '../feature-list-feature/feature-list-feature.component';
|
import { AbstractFeatureListFeatureComponent } from '../feature-list-feature/feature-list-feature.component';
|
||||||
import { ForItemType } from '../for-item/for-itemtype.decorator';
|
import { ForItemType } from '../for-item/for-itemtype.decorator';
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ import { ForItemType } from '../for-item/for-itemtype.decorator';
|
|||||||
})
|
})
|
||||||
export class FeatureListFeatureCroppingschemeComponent extends AbstractFeatureListFeatureComponent {
|
export class FeatureListFeatureCroppingschemeComponent extends AbstractFeatureListFeatureComponent {
|
||||||
|
|
||||||
constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService) {
|
constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService,config:AppConfig) {
|
||||||
super(store, itemTypeService);
|
super(store, itemTypeService,config);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<div *ngIf="feature;let feature" class="row m-0">
|
<div *ngIf="feature;let feature" class="row m-0">
|
||||||
<div class="col-3 m-0 p-2 thumbnail">
|
<div class="col-3 m-0 p-2 thumbnail">
|
||||||
<img *ngIf="feature.get('thumbnail')" [src]="'/api/v1/items/'+feature.get('code')+'/thumbnail'" />
|
<img *ngIf="feature.get('thumbnail')" [src]="config.getConfig('apiEndPoint') + '/api/v1/items/'+feature.get('code')+'/thumbnail'" />
|
||||||
<div *ngIf="!feature.get('thumbnail')" [style.background-color]="itemTypeService.getColor(feature.get('itemType'))">
|
<div *ngIf="!feature.get('thumbnail')" [style.background-color]="itemTypeService.getColor(feature.get('itemType'))">
|
||||||
<i [ngClass]="itemTypeService.getIcon(feature.get('itemType'))"></i>
|
<i [ngClass]="itemTypeService.getIcon(feature.get('itemType'))"></i>
|
||||||
</div>
|
</div>
|
||||||
|
@ -2,7 +2,7 @@ import { Component, Input, Injectable} from '@angular/core';
|
|||||||
import { Feature } from 'ol';
|
import { Feature } from 'ol';
|
||||||
import { Store } from '@ngrx/store';
|
import { Store } from '@ngrx/store';
|
||||||
import * as mapReducers from '../../reducers/map.reducer';
|
import * as mapReducers from '../../reducers/map.reducer';
|
||||||
import { commonReducers,ItemTypeService } from '@farmmaps/common';
|
import { commonReducers,ItemTypeService,AppConfig } from '@farmmaps/common';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -10,7 +10,7 @@ import { commonReducers,ItemTypeService } from '@farmmaps/common';
|
|||||||
export abstract class AbstractFeatureListFeatureComponent {
|
export abstract class AbstractFeatureListFeatureComponent {
|
||||||
@Input() feature: Feature
|
@Input() feature: Feature
|
||||||
|
|
||||||
constructor(public store: Store<mapReducers.State | commonReducers.State>, public itemTypeService: ItemTypeService) {
|
constructor(public store: Store<mapReducers.State | commonReducers.State>, public itemTypeService: ItemTypeService,public config:AppConfig) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -22,7 +22,7 @@ export abstract class AbstractFeatureListFeatureComponent {
|
|||||||
})
|
})
|
||||||
export class FeatureListFeatureComponent extends AbstractFeatureListFeatureComponent {
|
export class FeatureListFeatureComponent extends AbstractFeatureListFeatureComponent {
|
||||||
|
|
||||||
constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService) {
|
constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService, config:AppConfig) {
|
||||||
super(store, itemTypeService);
|
super(store, itemTypeService,config);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -225,7 +225,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
|
|||||||
|
|
||||||
replaceUrl(mapState: IMapState, queryState: IQueryState, replace: boolean = true) {
|
replaceUrl(mapState: IMapState, queryState: IQueryState, replace: boolean = true) {
|
||||||
//console.log(`Replace url :${mapState.baseLayerCode}`)
|
//console.log(`Replace url :${mapState.baseLayerCode}`)
|
||||||
this.router.navigate([".", mapState.xCenter.toFixed(5), mapState.yCenter.toFixed(5), mapState.zoom, mapState.rotation.toFixed(2), mapState.baseLayerCode, this.serializeService.serialize(queryState)], { replaceUrl: replace,relativeTo:this.route.parent.parent });
|
this.router.navigate([".", mapState.xCenter.toFixed(5), mapState.yCenter.toFixed(5), mapState.zoom, mapState.rotation.toFixed(2), mapState.baseLayerCode, this.serializeService.serialize(queryState)], { replaceUrl: replace,relativeTo:this.route.parent });
|
||||||
}
|
}
|
||||||
|
|
||||||
handleOnMoveEnd(event) {
|
handleOnMoveEnd(event) {
|
||||||
@ -251,8 +251,6 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
|
|||||||
this.store.dispatch(new mapActions.CollapseSearch());
|
this.store.dispatch(new mapActions.CollapseSearch());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
handleOnDownload(event) {
|
handleOnDownload(event) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
297
projects/common-map/src/lib/map.component.ts
Normal file
297
projects/common-map/src/lib/map.component.ts
Normal file
@ -0,0 +1,297 @@
|
|||||||
|
import { Component, OnInit, OnDestroy, HostListener, Inject, ViewChild, AfterViewInit } from '@angular/core';
|
||||||
|
import { Location } from '@angular/common';
|
||||||
|
import { Observable, Subject, Subscription,combineLatest, from } from 'rxjs';
|
||||||
|
import { debounce, withLatestFrom, first, combineAll } from 'rxjs/operators';
|
||||||
|
import { Router, ActivatedRoute, ParamMap, Event } from '@angular/router';
|
||||||
|
import { Store } from '@ngrx/store';
|
||||||
|
//import { proj,Map } from 'openlayers';
|
||||||
|
|
||||||
|
// Map
|
||||||
|
import * as mapReducers from './reducers/map.reducer';
|
||||||
|
import * as mapActions from './actions/map.actions';
|
||||||
|
import { IMapState,ISelectedFeatures,IItemLayer, ItemLayer,IQueryState,IPeriodState } from './models';
|
||||||
|
import { IDroppedFile } from './components/aol/file-drop-target/file-drop-target.component';
|
||||||
|
import { IMetaData } from './components/meta-data-modal/meta-data-modal.component';
|
||||||
|
import { StateSerializerService } from './services/state-serializer.service';
|
||||||
|
import { GeolocationService} from './services/geolocation.service';
|
||||||
|
|
||||||
|
// AppCommon
|
||||||
|
import { ResumableFileUploadService, ItemTypeService } from '@farmmaps/common';
|
||||||
|
import { IItemType, IItem } from '@farmmaps/common';
|
||||||
|
import {commonReducers} from '@farmmaps/common';
|
||||||
|
import {commonActions} from '@farmmaps/common';
|
||||||
|
|
||||||
|
import {Feature} from 'ol';
|
||||||
|
import {Extent,createEmpty,extend } from 'ol/extent';
|
||||||
|
import {transform} from 'ol/proj';
|
||||||
|
import { query } from '@angular/animations';
|
||||||
|
import { tassign } from 'tassign';
|
||||||
|
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'map',
|
||||||
|
templateUrl: './map.component.html',
|
||||||
|
styleUrls: ['./map.component.scss']
|
||||||
|
})
|
||||||
|
|
||||||
|
export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
|
||||||
|
title: string = 'Map';
|
||||||
|
public openedModalName: Observable<string>;
|
||||||
|
public itemTypes: Observable<{ [id: string]: IItemType }>;
|
||||||
|
public mapState: Observable<IMapState>;
|
||||||
|
public features: Observable<Array<Feature>>;
|
||||||
|
public overlayLayers: Observable<Array<IItemLayer>>;
|
||||||
|
public selectedOverlayLayer: Observable<IItemLayer>;
|
||||||
|
public selectedItemLayer: Observable<IItemLayer>;
|
||||||
|
public baseLayers: Observable<Array<IItemLayer>>;
|
||||||
|
public selectedBaseLayer: Observable<IItemLayer>;
|
||||||
|
public projection: Observable<string>;
|
||||||
|
public selectedFeatures: Subject<ISelectedFeatures> = new Subject<ISelectedFeatures>();
|
||||||
|
public droppedFile: Subject<IDroppedFile> = new Subject<IDroppedFile>();
|
||||||
|
private paramSub: Subscription;
|
||||||
|
private itemTypeSub: Subscription;
|
||||||
|
private mapStateSub: Subscription;
|
||||||
|
private queryStateSub: Subscription;
|
||||||
|
public parentCode: Observable<string>;
|
||||||
|
public panelVisible: Observable<boolean>;
|
||||||
|
public panelCollapsed: Observable<boolean>;
|
||||||
|
public selectedFeature: Observable<Feature>;
|
||||||
|
public selectedItem: Observable<IItem>;
|
||||||
|
public queryState: Observable<IQueryState>;
|
||||||
|
public period: Observable<IPeriodState>;
|
||||||
|
public clearEnabled: Observable<boolean>;
|
||||||
|
public searchCollapsed: Observable<boolean>;
|
||||||
|
public searchMinified: Observable<boolean>;
|
||||||
|
public menuVisible: Observable<boolean>;
|
||||||
|
public query: Observable<IQueryState>;
|
||||||
|
public position: Observable<Position>;
|
||||||
|
public baseLayersCollapsed:boolean = true;
|
||||||
|
public overlayLayersCollapsed: boolean = true;
|
||||||
|
public extent: Observable<Extent>;
|
||||||
|
@ViewChild('map') map;
|
||||||
|
|
||||||
|
constructor(private store: Store<mapReducers.State | commonReducers.State>, private route: ActivatedRoute, private router: Router, private uploadService: ResumableFileUploadService, private serializeService: StateSerializerService, public itemTypeService: ItemTypeService, private location: Location, private geolocationService: GeolocationService ) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@HostListener('document:keyup', ['$event'])
|
||||||
|
escapeClose(event: KeyboardEvent) {
|
||||||
|
let x = event.keyCode;
|
||||||
|
if (x === 27) {
|
||||||
|
this.handleCloseModal()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
handleOpenModal(modalName: string) {
|
||||||
|
this.store.dispatch(new commonActions.OpenModal(modalName));
|
||||||
|
}
|
||||||
|
|
||||||
|
handleCloseModal() {
|
||||||
|
this.store.dispatch(new commonActions.CloseModal());
|
||||||
|
}
|
||||||
|
|
||||||
|
handleFileDropped(droppedFile: IDroppedFile) {
|
||||||
|
this.uploadService.addFiles(droppedFile.files, droppedFile.event, { parentCode:droppedFile.parentCode, geometry:droppedFile.geometry });
|
||||||
|
}
|
||||||
|
|
||||||
|
handleFeaturesSelected(feature: Feature) {
|
||||||
|
if (feature) {
|
||||||
|
let newQuery = tassign(mapReducers.initialQueryState, { itemCode: feature.get('code') });
|
||||||
|
this.store.dispatch(new mapActions.DoQuery(newQuery));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
handleSearch(queryState: IQueryState) {
|
||||||
|
this.store.dispatch(new mapActions.DoQuery(queryState));
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
this.store.dispatch(new mapActions.Init());
|
||||||
|
this.selectedFeatures.next({x:0,y:0,features:[]});
|
||||||
|
this.mapState = this.store.select(mapReducers.selectGetMapState);
|
||||||
|
this.parentCode = this.store.select(mapReducers.selectGetParentCode);
|
||||||
|
this.features = this.store.select(mapReducers.selectGetFeatures);
|
||||||
|
this.overlayLayers = this.store.select(mapReducers.selectGetOverlayLayers);
|
||||||
|
this.selectedOverlayLayer = this.store.select(mapReducers.selectGetSelectedOverlayLayer);
|
||||||
|
this.baseLayers = this.store.select(mapReducers.selectGetBaseLayers);
|
||||||
|
this.projection = this.store.select(mapReducers.selectGetProjection);
|
||||||
|
this.selectedBaseLayer = this.store.select(mapReducers.selectGetSelectedBaseLayer);
|
||||||
|
this.panelVisible = this.store.select(mapReducers.selectGetPanelVisible);
|
||||||
|
this.panelCollapsed = this.store.select(mapReducers.selectGetPanelCollapsed);
|
||||||
|
this.selectedFeature = this.store.select(mapReducers.selectGetSelectedFeature);
|
||||||
|
this.selectedItem = this.store.select(mapReducers.selectGetSelectedItem);
|
||||||
|
this.queryState = this.store.select(mapReducers.selectGetQueryState);
|
||||||
|
this.clearEnabled = this.store.select(mapReducers.selectGetClearEnabled);
|
||||||
|
this.searchCollapsed = this.store.select(mapReducers.selectGetSearchCollapsed);
|
||||||
|
this.searchMinified = this.store.select(mapReducers.selectGetSearchMinified);
|
||||||
|
this.menuVisible = this.store.select(mapReducers.selectGetMenuVisible);
|
||||||
|
this.openedModalName = this.store.select(commonReducers.selectOpenedModalName);
|
||||||
|
this.query = this.store.select(mapReducers.selectGetQuery);
|
||||||
|
this.extent = this.store.select(mapReducers.selectGetExtent);
|
||||||
|
this.selectedFeatures.next(null);
|
||||||
|
this.selectedItemLayer = this.store.select(mapReducers.selectGetSelectedItemLayer);
|
||||||
|
this.period = this.store.select(mapReducers.selectGetPeriod);
|
||||||
|
this.position = this.geolocationService.getCurrentPosition();
|
||||||
|
|
||||||
|
this.mapState.pipe(withLatestFrom(this.queryState)).subscribe((state) => {
|
||||||
|
this.replaceUrl(state[0], state[1], true);
|
||||||
|
});
|
||||||
|
this.query.pipe(withLatestFrom(this.mapState)).subscribe((state) => {
|
||||||
|
this.replaceUrl(state[1], state[0],false);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private stateSetCount: number = 0;
|
||||||
|
private lastQueryState: string = this.serializeService.serialize(mapReducers.initialQueryState);
|
||||||
|
private lastMapState: string = "";
|
||||||
|
ngAfterViewInit() {
|
||||||
|
this.paramSub = this.route.paramMap.subscribe((params: ParamMap) => {
|
||||||
|
//console.log("Param sub");
|
||||||
|
var newMapState: IMapState = null;
|
||||||
|
var newQueryState: IQueryState = null;
|
||||||
|
var mapStateChanged = false;
|
||||||
|
var queryStateChanged = false;
|
||||||
|
if (params.has("xCenter") && params.has("yCenter")) {
|
||||||
|
let xCenter = parseFloat(params.get("xCenter"));
|
||||||
|
let yCenter = parseFloat(params.get("yCenter"));
|
||||||
|
let zoom = parseFloat(params.get("zoom"));
|
||||||
|
let rotation = parseFloat(params.get("rotation"));
|
||||||
|
let baseLayer = params.get("baseLayer");
|
||||||
|
newMapState = { xCenter: xCenter, yCenter: yCenter, zoom: zoom, rotation: rotation, baseLayerCode: baseLayer }
|
||||||
|
mapStateChanged = this.lastMapState != JSON.stringify(newMapState) && this.stateSetCount == 0;
|
||||||
|
this.lastMapState = JSON.stringify(newMapState);
|
||||||
|
//console.log(`Base layer: ${newMapState.baseLayerCode}`)
|
||||||
|
}
|
||||||
|
if (params.has("queryState")) {
|
||||||
|
let queryState = params.get("queryState");
|
||||||
|
newQueryState = tassign(mapReducers.initialQueryState);
|
||||||
|
if (queryState != "") {
|
||||||
|
newQueryState = this.serializeService.deserialize(queryState);
|
||||||
|
}
|
||||||
|
queryStateChanged = this.lastQueryState != queryState;
|
||||||
|
this.lastQueryState = queryState;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mapStateChanged && queryStateChanged) {
|
||||||
|
//console.log("Both states");
|
||||||
|
this.store.dispatch(new mapActions.SetState(newMapState, newQueryState));
|
||||||
|
} else if (mapStateChanged) {
|
||||||
|
//console.log("Map state");
|
||||||
|
this.store.dispatch(new mapActions.SetMapState(newMapState));
|
||||||
|
} else if (queryStateChanged) {
|
||||||
|
//console.log("Query state");
|
||||||
|
this.store.dispatch(new mapActions.SetQueryState(newQueryState));
|
||||||
|
}
|
||||||
|
this.stateSetCount += 1;
|
||||||
|
});
|
||||||
|
setTimeout(() => {
|
||||||
|
this.map.instance.updateSize();
|
||||||
|
}, 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
handleSearchCollapse(event) {
|
||||||
|
this.store.dispatch(new mapActions.CollapseSearch());
|
||||||
|
}
|
||||||
|
|
||||||
|
handleSearchExpand(event) {
|
||||||
|
this.store.dispatch(new mapActions.ExpandSearch());
|
||||||
|
}
|
||||||
|
|
||||||
|
handleToggleMenu(event) {
|
||||||
|
this.store.dispatch(new mapActions.ToggleMenu());
|
||||||
|
}
|
||||||
|
|
||||||
|
handleToggleBaseLayers(event:MouseEvent) {
|
||||||
|
this.baseLayersCollapsed = !this.baseLayersCollapsed;
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
handleToggleOverlayLayers(event: MouseEvent) {
|
||||||
|
this.overlayLayersCollapsed = !this.overlayLayersCollapsed;
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
handlePredefinedQuery(event: MouseEvent, query: any) {
|
||||||
|
event.preventDefault();
|
||||||
|
var queryState = tassign(mapReducers.initialQueryState, query);
|
||||||
|
this.store.dispatch(new mapActions.DoQuery(queryState));
|
||||||
|
}
|
||||||
|
|
||||||
|
handleTrijntjeClick(event: MouseEvent, query: any) {
|
||||||
|
event.preventDefault();
|
||||||
|
var queryState = tassign(mapReducers.initialQueryState, query);
|
||||||
|
var mapState = JSON.parse(this.lastMapState);
|
||||||
|
this.router.navigate(["app","trijntje" , mapState.xCenter.toFixed(5), mapState.yCenter.toFixed(5), mapState.zoom, mapState.rotation.toFixed(2), mapState.baseLayerCode, this.serializeService.serialize(queryState)], { replaceUrl: false });
|
||||||
|
}
|
||||||
|
|
||||||
|
replaceUrl(mapState: IMapState, queryState: IQueryState, replace: boolean = true) {
|
||||||
|
//console.log(`Replace url :${mapState.baseLayerCode}`)
|
||||||
|
this.router.navigate([".", mapState.xCenter.toFixed(5), mapState.yCenter.toFixed(5), mapState.zoom, mapState.rotation.toFixed(2), mapState.baseLayerCode, this.serializeService.serialize(queryState)], { replaceUrl: replace,relativeTo:this.route.parent.parent });
|
||||||
|
}
|
||||||
|
|
||||||
|
handleOnMoveEnd(event) {
|
||||||
|
var map = event.map;
|
||||||
|
var view = map.getView();
|
||||||
|
var rotation = view.getRotation();
|
||||||
|
var zoom = view.getZoom();
|
||||||
|
var center = transform(view.getCenter(), view.getProjection(), "EPSG:4326");
|
||||||
|
var extent = view.calculateExtent(this.map.instance.getSize());
|
||||||
|
let mapState: IMapState = { xCenter: center[0], yCenter: center[1], zoom: zoom, rotation: rotation, baseLayerCode: null };
|
||||||
|
let state = { mapState: mapState, extent: extent };
|
||||||
|
let source = from([state]);
|
||||||
|
source.pipe(withLatestFrom(this.selectedBaseLayer), withLatestFrom(this.queryState)).subscribe(([[state, baselayer], queryState]) => {
|
||||||
|
if (mapState && baselayer && queryState) {
|
||||||
|
let newMapState = tassign(state.mapState, { baseLayerCode: baselayer.item.code });
|
||||||
|
this.replaceUrl(newMapState, tassign(queryState, { bbox: queryState.bboxFilter ? state.extent : queryState.bbox }));
|
||||||
|
this.store.dispatch(new mapActions.SetViewExtent(state.extent));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
handleOnMouseDown(event: MouseEvent) {
|
||||||
|
this.store.dispatch(new mapActions.CollapseSearch());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
handleOnDownload(event) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
handleClearSearch(event) {
|
||||||
|
this.store.dispatch(new commonActions.Escape(true, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
handleOnDelete(itemLayer: IItemLayer) {
|
||||||
|
this.store.dispatch(new mapActions.RemoveLayer(itemLayer));
|
||||||
|
}
|
||||||
|
|
||||||
|
handleOnToggleVisibility(itemLayer: IItemLayer) {
|
||||||
|
this.store.dispatch(new mapActions.SetVisibility(itemLayer,!itemLayer.visible));
|
||||||
|
}
|
||||||
|
|
||||||
|
handleOnSetOpacity(event:{ layer: IItemLayer,opacity:number }) {
|
||||||
|
this.store.dispatch(new mapActions.SetOpacity(event.layer, event.opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
handleZoomToExtent(itemLayer: IItemLayer) {
|
||||||
|
var extent = createEmpty();
|
||||||
|
extend(extent, itemLayer.layer.getExtent());
|
||||||
|
if (extent) {
|
||||||
|
this.store.dispatch(new mapActions.SetExtent(extent));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
handleSelectBaseLayer(itemLayer: IItemLayer) {
|
||||||
|
this.store.dispatch(new mapActions.SelectBaseLayer(itemLayer));
|
||||||
|
}
|
||||||
|
|
||||||
|
handleSelectOverlayLayer(itemLayer: IItemLayer) {
|
||||||
|
this.store.dispatch(new mapActions.SelectOverlayLayer(itemLayer));
|
||||||
|
}
|
||||||
|
|
||||||
|
ngOnDestroy() {
|
||||||
|
this.paramSub.unsubscribe();
|
||||||
|
if (this.itemTypeSub) this.itemTypeSub.unsubscribe();
|
||||||
|
if (this.mapStateSub) this.mapStateSub.unsubscribe();
|
||||||
|
if (this.queryStateSub) this.queryStateSub.unsubscribe(); }
|
||||||
|
}
|
@ -15,7 +15,7 @@ export class ItemTypeService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getIcon(itemType: string) {
|
getIcon(itemType: string) {
|
||||||
var icon = "fa-file-o";
|
var icon = "fa fa-file-o";
|
||||||
if (this.itemTypes[itemType]) icon = this.itemTypes[itemType].icon;
|
if (this.itemTypes[itemType]) icon = this.itemTypes[itemType].icon;
|
||||||
return icon;
|
return icon;
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,28 @@
|
|||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
|
|
||||||
import { AuthGuard } from '@farmmaps/common';
|
import { AuthGuard,FullScreenGuard } from '@farmmaps/common';
|
||||||
|
import { MapComponent} from '@farmmaps/common-map';
|
||||||
import { AppContentComponent} from './app-content.component';
|
import { AppContentComponent} from './app-content.component';
|
||||||
import { AppSidePanelTestComponent } from './app-side-panel-test.component';
|
import { AppSidePanelTestComponent } from './app-side-panel-test.component';
|
||||||
|
|
||||||
const routes = [
|
const routes = [
|
||||||
{ path: '', canLoad: [AuthGuard], component: AppContentComponent},
|
{
|
||||||
{ path: 'sidepanel', canLoad: [AuthGuard], component: AppSidePanelTestComponent}
|
path: '',
|
||||||
|
redirectTo: 'map',
|
||||||
|
pathMatch: 'full'
|
||||||
|
},
|
||||||
|
{ path: 'sidepanel', canLoad: [AuthGuard], component: AppSidePanelTestComponent},
|
||||||
|
{ path: 'map', canActivateChild: [AuthGuard],canActivate:[FullScreenGuard], children: [
|
||||||
|
{
|
||||||
|
path: '',
|
||||||
|
component: MapComponent
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: ':xCenter/:yCenter/:zoom/:rotation/:baseLayer/:queryState',
|
||||||
|
component: MapComponent
|
||||||
|
}
|
||||||
|
]},
|
||||||
];
|
];
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
|
21
src/app/app.component.scss
Normal file
21
src/app/app.component.scss
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
@import "theme.scss";
|
||||||
|
|
||||||
|
$fa-font-path: "~font-awesome/fonts";
|
||||||
|
@import "~bootstrap/scss/bootstrap.scss";
|
||||||
|
@import "~font-awesome/scss/font-awesome.scss";
|
||||||
|
|
||||||
|
:host ::ng-deep .btn:focus {
|
||||||
|
box-shadow:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
:host ::ng-deep .input-group > .form-control:focus {
|
||||||
|
z-index: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
:host ::ng-deep .form-control:focus {
|
||||||
|
box-shadow: none;
|
||||||
|
border-color: $input-border-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -3,7 +3,7 @@ import { Component } from '@angular/core';
|
|||||||
@Component({
|
@Component({
|
||||||
selector: 'app-root',
|
selector: 'app-root',
|
||||||
templateUrl: './app.component.html',
|
templateUrl: './app.component.html',
|
||||||
styleUrls: ['./app.component.css']
|
styleUrls: ['./app.component.scss']
|
||||||
})
|
})
|
||||||
export class AppComponent {
|
export class AppComponent {
|
||||||
title = 'farmmaps-lib-app';
|
title = 'farmmaps-lib-app';
|
||||||
|
@ -10,6 +10,7 @@ import { AppComponent } from './app.component';
|
|||||||
import { AppContentComponent } from './app-content.component';
|
import { AppContentComponent } from './app-content.component';
|
||||||
import { AppSidePanelTestComponent } from './app-side-panel-test.component';
|
import { AppSidePanelTestComponent } from './app-side-panel-test.component';
|
||||||
import { AppCommonModule } from '@farmmaps/common';
|
import { AppCommonModule } from '@farmmaps/common';
|
||||||
|
import { AppCommonMapModule} from '@farmmaps/common-map';
|
||||||
|
|
||||||
import {StoreModule, Store} from '@ngrx/store';
|
import {StoreModule, Store} from '@ngrx/store';
|
||||||
import {EffectsModule, EffectSources} from '@ngrx/effects';
|
import {EffectsModule, EffectSources} from '@ngrx/effects';
|
||||||
@ -51,6 +52,7 @@ export function provideBootstrapEffects(effects: Type<any>[]) {
|
|||||||
imports: [
|
imports: [
|
||||||
AppRoutingModule,
|
AppRoutingModule,
|
||||||
AppCommonModule.forRoot() ,
|
AppCommonModule.forRoot() ,
|
||||||
|
AppCommonMapModule.forRoot(),
|
||||||
BrowserModule,
|
BrowserModule,
|
||||||
StoreModule.forRoot({}),
|
StoreModule.forRoot({}),
|
||||||
EffectsModule.forRoot([])
|
EffectsModule.forRoot([])
|
||||||
|
3
src/app/theme.scss
Normal file
3
src/app/theme.scss
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
//$theme-colors: ( "primary": #a7ce39, "secondary": #ffc800 );
|
||||||
|
//$theme-colors: ( "primary": #a7ce39);
|
||||||
|
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
BIN
src/assets/images/farmmapslogo.png
Normal file
BIN
src/assets/images/farmmapslogo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
7
src/assets/silent-refresh.html
Normal file
7
src/assets/silent-refresh.html
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
parent.postMessage(location.hash, location.origin);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"issuer": "http://accounts.awtest.nl",
|
"issuer": "http://accounts.awtest.nl",
|
||||||
"clientId": "v1t",
|
"clientId": "v1t",
|
||||||
"audience": "http://localhost:8083/,http://awtest.nl/,http://aan.awtest.nl",
|
"audience": "http://farmmaps.awtest.nl/,http://awtest.nl/,http://aan.awtest.nl",
|
||||||
"requireHttps": false,
|
"requireHttps": false,
|
||||||
"apiEndPoint": "http://localhost:8083"
|
"apiEndPoint": "http://farmmaps.awtest.nl"
|
||||||
}
|
}
|
||||||
|
|
@ -7,7 +7,6 @@
|
|||||||
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
||||||
<link href="assets/bootstrap.min.css" rel="stylesheet">
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<app-root></app-root>
|
<app-root></app-root>
|
||||||
|
Loading…
Reference in New Issue
Block a user