From ca6331e053671c166aabfe13cf44ce82ac232a89 Mon Sep 17 00:00:00 2001 From: Willem Dantuma Date: Fri, 1 Nov 2019 15:57:50 +0100 Subject: [PATCH] Some fixes --- angular.json | 22 +- fonts/FMIconFont/FMIconFont.svg | 130 ++++++++ fonts/FMIconFont/FMIconFont.ttf | Bin 0 -> 2936 bytes fonts/FMIconFont/FMIconFont.woff | Bin 0 -> 6808 bytes fonts/FMIconFont/FMIconFont.woff2 | Bin 0 -> 1656 bytes fonts/FMIconFont/style.css | 32 ++ package-lock.json | 109 ++++++- package.json | 2 + .../src/lib/common-map.component.ts | 19 -- .../common-map/src/lib/common-map.module.ts | 94 +++--- .../gps-location/gps-location.component.ts | 2 +- .../aol/item-layers/item-layers.component.ts | 2 +- ...eature-list-feature-cropfield.component.ts | 6 +- ...e-list-feature-croppingscheme.component.ts | 6 +- .../feature-list-feature.component.html | 2 +- .../feature-list-feature.component.ts | 8 +- .../src/lib/components/map/map.component.ts | 4 +- projects/common-map/src/lib/map.component.ts | 297 ++++++++++++++++++ .../src/lib/services/itemtype.service.ts | 2 +- src/app/app-routing.module.ts | 21 +- src/app/app.component.css | 0 src/app/app.component.scss | 21 ++ src/app/app.component.ts | 2 +- src/app/app.module.ts | 2 + src/app/theme.scss | 3 + src/{ => assets}/favicon.ico | Bin src/assets/images/farmmapslogo.png | Bin 0 -> 21069 bytes src/assets/silent-refresh.html | 7 + src/configuration.json | 4 +- src/index.html | 1 - 30 files changed, 707 insertions(+), 91 deletions(-) create mode 100644 fonts/FMIconFont/FMIconFont.svg create mode 100644 fonts/FMIconFont/FMIconFont.ttf create mode 100644 fonts/FMIconFont/FMIconFont.woff create mode 100644 fonts/FMIconFont/FMIconFont.woff2 create mode 100644 fonts/FMIconFont/style.css delete mode 100644 projects/common-map/src/lib/common-map.component.ts create mode 100644 projects/common-map/src/lib/map.component.ts delete mode 100644 src/app/app.component.css create mode 100644 src/app/app.component.scss create mode 100644 src/app/theme.scss rename src/{ => assets}/favicon.ico (100%) create mode 100644 src/assets/images/farmmapslogo.png create mode 100644 src/assets/silent-refresh.html diff --git a/angular.json b/angular.json index c408c6a..cdd014c 100644 --- a/angular.json +++ b/angular.json @@ -19,12 +19,28 @@ "polyfills": "src/polyfills.ts", "tsConfig": "src/tsconfig.app.json", "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" ], "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": [], "es5BrowserSupport": true diff --git a/fonts/FMIconFont/FMIconFont.svg b/fonts/FMIconFont/FMIconFont.svg new file mode 100644 index 0000000..8181e1a --- /dev/null +++ b/fonts/FMIconFont/FMIconFont.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/fonts/FMIconFont/FMIconFont.ttf b/fonts/FMIconFont/FMIconFont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..c8b8ea1d041bc6fe7c1edd8985a5e00cf272a39a GIT binary patch literal 2936 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 literal 0 HcmV?d00001 diff --git a/fonts/FMIconFont/FMIconFont.woff2 b/fonts/FMIconFont/FMIconFont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..ebf2f18b5b67add30388ff99e79d0377c76fce9d GIT binary patch literal 1656 zcmV-;28a1~Pew8T0RR9100wvf4FCWD01J2k00tuf0RR9100000000000000000000 z0000#Mn+Uk92y`7Rse!Z5eN#5NQq_(3;+Q(0we26$dyQA_*f>ZJK2NIE>va zCqz_2Y&xs_zp4D_KdzXjm6e*a2&%R0*_!}Bc_Iz00l-D+#76oTCc=>sH$0y9FDSD) zO(td#4g=gBgr++-|2xT>&aF>C@nHtl{9jY=FUq1l5_~wafnKKFZKFtw21}5=8Aai2 zT0#RH0M2Y$1KTBP6MjTPV{QKvJ^0;#5EgphZj6E=R8mM3M2b&MTFX~y-~-$p|5l@o zqN$CL9-edXw)bMwqo-=MUUif4LM026KCsILW=~W0X1TiHsjk7JUaj|ws-R|LG@?LG zmC1ltRwW`Ib=_;5Cad;(KV@DPUO_MzAY8UpTfX77J|`;0xNs z#ThOM=PZIo%@UkSxMaCxuxLo0UY7 zOxP0>Ph^DS)-mgof++*ZXQkg$40HAeDAN_391 zlo%iib#@$K13)!oT=YQ{uLDPoPNUAw>-9RZkJpU)9V9{eCPS$xKoa^wiYI@?d% zGf&!s?2a~rtKFJlviR{lsc#o22(BKI)%3Z$6QAMga6#*N#&|mW^vTS-_C)g}&^WSA z8Hg;P0BOiItx4<xUkc;C@d z-Ws@Pcf8f9)bYU%2f-Z*n;cVF2o9A>!nKbd zn}NA?Mt{FSqFC!U43yux-8$0(%>Dh!i)yB%h-yv$C7miNi5?D~{@shPj3rGM%9dpO z{|*Mrle`_PJmjX75$~jOh}9c5Vn_sNTz!=)9-UV{`?I8<88_>(vb@3C<8E$W zbyfVlHMQ$2H@D-3xj+9n*SqT8`IeX(S%Z8gmRoc9oqZqQsy7Wx*`nANoDx%!)ZmOf zy6xI*Q8@V{BX9DE)h7LXqrrlY7k%=AaWb z%8K63oaU=tVUpuzap6csq|ra|^qN)eQDH<$hOByOLw@1`8t=bEc@fI3gKK1S58K~N z{-)iVZ=UVB*c#{UOA3xAgrIGDu7_UZoW2M2*xs6YUjzey0Y00hC63HT&) z{rcl$nxY9P)C(ZQAg~GKI*BYp&CB`NNeY>SU?tk-V3Io%Y(jXe-c0U~RCXj4zzYY1 zC=Y=_Otp+4&Wj-^LAiQN%FAc=4OwQPI=!*Pa^NO7dOLa@07qt;ZKVa#0{FWSL0T-f z$O>Jt41D%XVbUc_6((O;ad=2QO|~Qzq=NKDnmphEHjM39HhX4RdU9%5eptnb)smK- zl$M&bOrIGv5S+=&Fx=b*Ayr_F5WrE&@@dJbS?4LEKWG{WXrKs&=V+BSE?zOTVle=Y COA*ol literal 0 HcmV?d00001 diff --git a/fonts/FMIconFont/style.css b/fonts/FMIconFont/style.css new file mode 100644 index 0000000..1cc9b8c --- /dev/null +++ b/fonts/FMIconFont/style.css @@ -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; +} diff --git a/package-lock.json b/package-lock.json index f0a2860..ad28535 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-4.2.1.tgz", @@ -1108,6 +1129,15 @@ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "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": { "version": "2.0.0", "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": { "version": "1.0.2", "resolved": "https://repository.akkerweb.nl/repository/npm-group/for-in/-/for-in-1.0.2.tgz", @@ -4917,8 +4952,7 @@ "ieee754": { "version": "1.1.13", "resolved": "https://repository.akkerweb.nl/repository/npm-group/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, "iferr": { "version": "0.1.5", @@ -5911,6 +5945,11 @@ "verror": "1.10.0" } }, + "jsrsasign": { + "version": "8.0.12", + "resolved": "https://registry.npmjs.org/jsrsasign/-/jsrsasign-8.0.12.tgz", + "integrity": "sha1-Iqu5ZW00owuVMENnIINeicLlwxY=" + }, "jszip": { "version": "3.2.1", "resolved": "https://repository.akkerweb.nl/repository/npm-group/jszip/-/jszip-3.2.1.tgz", @@ -6917,6 +6956,22 @@ "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": { "version": "1.0.5", "resolved": "https://repository.akkerweb.nl/repository/npm-group/nice-try/-/nice-try-1.0.5.tgz", @@ -7277,6 +7332,16 @@ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "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": { "version": "2.3.0", "resolved": "https://repository.akkerweb.nl/repository/npm-group/on-finished/-/on-finished-2.3.0.tgz", @@ -7749,6 +7814,15 @@ "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": { "version": "3.0.17", "resolved": "https://repository.akkerweb.nl/repository/npm-group/pbkdf2/-/pbkdf2-3.0.17.tgz", @@ -7788,6 +7862,11 @@ "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": { "version": "2.0.0", "resolved": "https://repository.akkerweb.nl/repository/npm-group/pkg-dir/-/pkg-dir-2.0.0.tgz", @@ -7946,6 +8025,11 @@ "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": { "version": "5.0.1", "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", "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": { "version": "2.1.0", "resolved": "https://repository.akkerweb.nl/repository/npm-group/randombytes/-/randombytes-2.1.0.tgz", @@ -8230,6 +8319,14 @@ "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": { "version": "1.2.8", "resolved": "https://repository.akkerweb.nl/repository/npm-group/rc/-/rc-1.2.8.tgz", @@ -8541,6 +8638,14 @@ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", "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": { "version": "0.2.1", "resolved": "https://repository.akkerweb.nl/repository/npm-group/resolve-url/-/resolve-url-0.2.1.tgz", diff --git a/package.json b/package.json index 7bfd2bd..9b0cc2c 100644 --- a/package.json +++ b/package.json @@ -21,11 +21,13 @@ "@angular/router": "~7.2.0", "@aspnet/signalr": "^1.1.4", "@farmmaps/common": "file:dist/common", + "@farmmaps/common-map": "file:dist/common-map", "@ng-bootstrap/ng-bootstrap": "^4.2.1", "@ngrx/effects": "^7.2.0", "@ngrx/router-store": "^7.2.0", "@ngrx/store": "^7.2.0", "bootstrap": "^4.3.1", + "font-awesome": "^4.7.0", "core-js": "^2.5.4", "ngrx-store-localstorage": "^8.0.0", "resumablejs": "^1.1.0", diff --git a/projects/common-map/src/lib/common-map.component.ts b/projects/common-map/src/lib/common-map.component.ts deleted file mode 100644 index aab1bfd..0000000 --- a/projects/common-map/src/lib/common-map.component.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Component, OnInit } from '@angular/core'; - -@Component({ - selector: 'lib-common-map', - template: ` -

- common-map works! -

- `, - styles: [] -}) -export class CommonMapComponent implements OnInit { - - constructor() { } - - ngOnInit() { - } - -} diff --git a/projects/common-map/src/lib/common-map.module.ts b/projects/common-map/src/lib/common-map.module.ts index 0b6f77d..f6d4bab 100644 --- a/projects/common-map/src/lib/common-map.module.ts +++ b/projects/common-map/src/lib/common-map.module.ts @@ -1,4 +1,4 @@ -import { NgModule } from '@angular/core'; +import { NgModule ,ModuleWithProviders} from '@angular/core'; import { CommonModule } from '@angular/common'; 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 { ItemListItemBofekComponent } from './components/item-list-item-bofek/item-list-item-bofek.component'; + export { mapEffects, mapReducer, @@ -171,48 +172,26 @@ export { // Switch2D3DComponent ], entryComponents: [ - // FeatureListComponent, - // FeatureListCroppingschemeComponent, - // FeatureListCropfieldComponent, - // FeatureListFeatureComponent, - // FeatureListFeatureCroppingschemeComponent, - // FeatureListFeatureCropfieldComponent, - // SelectedItemComponent, - // SelectedItemCropfieldComponent, - // SelectedItemGeotiffComponent, - // SelectedItemShapeComponent, - // ItemListComponent, - // ItemListItemComponent, - // ItemWidgetWeatherComponent, - // ItemListItemTemporalComponent, - // ItemListItemHeightComponent, - // ItemListItemTipstarComponent, - // ItemListItemWatBalComponent, - // ItemListItemShadowComponent, - // ItemListItemBofekComponent, + FeatureListComponent, + FeatureListCroppingschemeComponent, + FeatureListCropfieldComponent, + FeatureListFeatureComponent, + FeatureListFeatureCroppingschemeComponent, + FeatureListFeatureCropfieldComponent, + SelectedItemComponent, + SelectedItemCropfieldComponent, + SelectedItemGeotiffComponent, + SelectedItemShapeComponent, + ItemListComponent, + ItemListItemComponent, + ItemWidgetWeatherComponent, + ItemListItemTemporalComponent, + ItemListItemHeightComponent, + ItemListItemTipstarComponent, + ItemListItemWatBalComponent, + ItemListItemShadowComponent, + 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: [ ItemVectorSourceComponent, ItemFeaturesSourceComponent, @@ -256,4 +235,33 @@ export { 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 } + ] + }; + } +} diff --git a/projects/common-map/src/lib/components/aol/gps-location/gps-location.component.ts b/projects/common-map/src/lib/components/aol/gps-location/gps-location.component.ts index 71f97df..9b09203 100644 --- a/projects/common-map/src/lib/components/aol/gps-location/gps-location.component.ts +++ b/projects/common-map/src/lib/components/aol/gps-location/gps-location.component.ts @@ -30,7 +30,7 @@ export class GpsLocation implements OnInit,OnChanges{ } recalcLocationTolerance() { - this.locTolerancePixels = this.locationTolerance / this.resolution; + this.locTolerancePixels = this.resolution >0? this.locationTolerance / this.resolution:0; } ngOnInit() { diff --git a/projects/common-map/src/lib/components/aol/item-layers/item-layers.component.ts b/projects/common-map/src/lib/components/aol/item-layers/item-layers.component.ts index ee23c41..bbcde72 100644 --- a/projects/common-map/src/lib/components/aol/item-layers/item-layers.component.ts +++ b/projects/common-map/src/lib/components/aol/item-layers/item-layers.component.ts @@ -34,7 +34,7 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange constructor(private itemService: ItemService, @Host() private map: MapComponent, public appConfig: AppConfig) { super(map); - this._apiEndPoint = "";//appConfig.getConfig("apiEndPoint"); + this._apiEndPoint = appConfig.getConfig("apiEndPoint"); } private styleCache = {} diff --git a/projects/common-map/src/lib/components/feature-list-feature-cropfield/feature-list-feature-cropfield.component.ts b/projects/common-map/src/lib/components/feature-list-feature-cropfield/feature-list-feature-cropfield.component.ts index 8572b60..b8290eb 100644 --- a/projects/common-map/src/lib/components/feature-list-feature-cropfield/feature-list-feature-cropfield.component.ts +++ b/projects/common-map/src/lib/components/feature-list-feature-cropfield/feature-list-feature-cropfield.component.ts @@ -2,7 +2,7 @@ import { Component, Input, Injectable} from '@angular/core'; import { Feature } from 'ol'; import { Store } from '@ngrx/store'; 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 { ForItemType } from '../for-item/for-itemtype.decorator'; @@ -16,7 +16,7 @@ import { ForItemType } from '../for-item/for-itemtype.decorator'; }) export class FeatureListFeatureCropfieldComponent extends AbstractFeatureListFeatureComponent { - constructor(store: Store, itemTypeService: ItemTypeService) { - super(store, itemTypeService); + constructor(store: Store, itemTypeService: ItemTypeService,config:AppConfig) { + super(store, itemTypeService,config); } } diff --git a/projects/common-map/src/lib/components/feature-list-feature-croppingscheme/feature-list-feature-croppingscheme.component.ts b/projects/common-map/src/lib/components/feature-list-feature-croppingscheme/feature-list-feature-croppingscheme.component.ts index 74c5038..cfc40d9 100644 --- a/projects/common-map/src/lib/components/feature-list-feature-croppingscheme/feature-list-feature-croppingscheme.component.ts +++ b/projects/common-map/src/lib/components/feature-list-feature-croppingscheme/feature-list-feature-croppingscheme.component.ts @@ -2,7 +2,7 @@ import { Component, Input, Injectable} from '@angular/core'; import { Feature } from 'ol'; import { Store } from '@ngrx/store'; 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 { ForItemType } from '../for-item/for-itemtype.decorator'; @@ -16,7 +16,7 @@ import { ForItemType } from '../for-item/for-itemtype.decorator'; }) export class FeatureListFeatureCroppingschemeComponent extends AbstractFeatureListFeatureComponent { - constructor(store: Store, itemTypeService: ItemTypeService) { - super(store, itemTypeService); + constructor(store: Store, itemTypeService: ItemTypeService,config:AppConfig) { + super(store, itemTypeService,config); } } diff --git a/projects/common-map/src/lib/components/feature-list-feature/feature-list-feature.component.html b/projects/common-map/src/lib/components/feature-list-feature/feature-list-feature.component.html index c5d7fc1..5eca85c 100644 --- a/projects/common-map/src/lib/components/feature-list-feature/feature-list-feature.component.html +++ b/projects/common-map/src/lib/components/feature-list-feature/feature-list-feature.component.html @@ -1,6 +1,6 @@
- +
diff --git a/projects/common-map/src/lib/components/feature-list-feature/feature-list-feature.component.ts b/projects/common-map/src/lib/components/feature-list-feature/feature-list-feature.component.ts index a1e8c4f..d8576ff 100644 --- a/projects/common-map/src/lib/components/feature-list-feature/feature-list-feature.component.ts +++ b/projects/common-map/src/lib/components/feature-list-feature/feature-list-feature.component.ts @@ -2,7 +2,7 @@ import { Component, Input, Injectable} from '@angular/core'; import { Feature } from 'ol'; import { Store } from '@ngrx/store'; 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 { @Input() feature: Feature - constructor(public store: Store, public itemTypeService: ItemTypeService) { + constructor(public store: Store, public itemTypeService: ItemTypeService,public config:AppConfig) { } } @@ -22,7 +22,7 @@ export abstract class AbstractFeatureListFeatureComponent { }) export class FeatureListFeatureComponent extends AbstractFeatureListFeatureComponent { - constructor(store: Store, itemTypeService: ItemTypeService) { - super(store, itemTypeService); + constructor(store: Store, itemTypeService: ItemTypeService, config:AppConfig) { + super(store, itemTypeService,config); } } diff --git a/projects/common-map/src/lib/components/map/map.component.ts b/projects/common-map/src/lib/components/map/map.component.ts index dcea912..5df667f 100644 --- a/projects/common-map/src/lib/components/map/map.component.ts +++ b/projects/common-map/src/lib/components/map/map.component.ts @@ -225,7 +225,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit { 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 }); + 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) { @@ -251,8 +251,6 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit { this.store.dispatch(new mapActions.CollapseSearch()); } - - handleOnDownload(event) { } diff --git a/projects/common-map/src/lib/map.component.ts b/projects/common-map/src/lib/map.component.ts new file mode 100644 index 0000000..7b9ba15 --- /dev/null +++ b/projects/common-map/src/lib/map.component.ts @@ -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; + public itemTypes: Observable<{ [id: string]: IItemType }>; + public mapState: Observable; + public features: Observable>; + public overlayLayers: Observable>; + public selectedOverlayLayer: Observable; + public selectedItemLayer: Observable; + public baseLayers: Observable>; + public selectedBaseLayer: Observable; + public projection: Observable; + public selectedFeatures: Subject = new Subject(); + public droppedFile: Subject = new Subject(); + private paramSub: Subscription; + private itemTypeSub: Subscription; + private mapStateSub: Subscription; + private queryStateSub: Subscription; + public parentCode: Observable; + public panelVisible: Observable; + public panelCollapsed: Observable; + public selectedFeature: Observable; + public selectedItem: Observable; + public queryState: Observable; + public period: Observable; + public clearEnabled: Observable; + public searchCollapsed: Observable; + public searchMinified: Observable; + public menuVisible: Observable; + public query: Observable; + public position: Observable; + public baseLayersCollapsed:boolean = true; + public overlayLayersCollapsed: boolean = true; + public extent: Observable; + @ViewChild('map') map; + + constructor(private store: Store, 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(); } +} diff --git a/projects/common/src/lib/services/itemtype.service.ts b/projects/common/src/lib/services/itemtype.service.ts index 5304bb1..62fed20 100644 --- a/projects/common/src/lib/services/itemtype.service.ts +++ b/projects/common/src/lib/services/itemtype.service.ts @@ -15,7 +15,7 @@ export class ItemTypeService { } getIcon(itemType: string) { - var icon = "fa-file-o"; + var icon = "fa fa-file-o"; if (this.itemTypes[itemType]) icon = this.itemTypes[itemType].icon; return icon; } diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 86dee29..ad26c34 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -1,13 +1,28 @@ import { NgModule } from '@angular/core'; 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 { AppSidePanelTestComponent } from './app-side-panel-test.component'; 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({ diff --git a/src/app/app.component.css b/src/app/app.component.css deleted file mode 100644 index e69de29..0000000 diff --git a/src/app/app.component.scss b/src/app/app.component.scss new file mode 100644 index 0000000..4394fdc --- /dev/null +++ b/src/app/app.component.scss @@ -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; +} + + + diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 3a9178e..eedc897 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -3,7 +3,7 @@ import { Component } from '@angular/core'; @Component({ selector: 'app-root', templateUrl: './app.component.html', - styleUrls: ['./app.component.css'] + styleUrls: ['./app.component.scss'] }) export class AppComponent { title = 'farmmaps-lib-app'; diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 73502dd..7712c5a 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -10,6 +10,7 @@ import { AppComponent } from './app.component'; import { AppContentComponent } from './app-content.component'; import { AppSidePanelTestComponent } from './app-side-panel-test.component'; import { AppCommonModule } from '@farmmaps/common'; +import { AppCommonMapModule} from '@farmmaps/common-map'; import {StoreModule, Store} from '@ngrx/store'; import {EffectsModule, EffectSources} from '@ngrx/effects'; @@ -51,6 +52,7 @@ export function provideBootstrapEffects(effects: Type[]) { imports: [ AppRoutingModule, AppCommonModule.forRoot() , + AppCommonMapModule.forRoot(), BrowserModule, StoreModule.forRoot({}), EffectsModule.forRoot([]) diff --git a/src/app/theme.scss b/src/app/theme.scss new file mode 100644 index 0000000..b44a9a8 --- /dev/null +++ b/src/app/theme.scss @@ -0,0 +1,3 @@ +//$theme-colors: ( "primary": #a7ce39, "secondary": #ffc800 ); +//$theme-colors: ( "primary": #a7ce39); + diff --git a/src/favicon.ico b/src/assets/favicon.ico similarity index 100% rename from src/favicon.ico rename to src/assets/favicon.ico diff --git a/src/assets/images/farmmapslogo.png b/src/assets/images/farmmapslogo.png new file mode 100644 index 0000000000000000000000000000000000000000..428742d0a717d75434afc1b0944bd5c17d65d530 GIT binary patch literal 21069 zcmYg&1yqz>(Erl0ba!_nEhQx&AhLkuk^)LdN!NnX-3>}FxkySbtsEdl~>){~c?&XxfufPBTv4OPJRgC-#c9;G9nP%pP*H&wnxIWm%!7J~IL1w7t!LIn`yEg@X+2o{_Dwxb1eHkgeYa)(4PWpXMl0S^ysY)3)?z0bkDV@! z+d4dtBZ{`nM|qc1^RY~tYmJOb`JfP(A8a1kja2S-q>&YdsQ>$v5f$xVa&X4+5QZ)Ea#OR9DL zTb_%E5F%0Evf4iJr$~lA86&f(#AJ2oYVZDmC~Ks7&a*h>*E|aQxVXlLTde6DHtt;K zk;7*$meUqAX$@s&| zG?_R!dnWgPBvT0B!0D;2V$93LjGz9PuyInTfI$EG_8(ysf}0&6g4L5hN2LSA1{ht1 z-lN&8SBG!i-;n2M<5HftlD&cRGUxxW6XRIs_}~k>Gu|!HpT@A` zrFhyw`TBPB#53%GeGJ?YSy#qGjfUJ8;z|7fjd)Kurlt2`_D^i77Yn<)5Os!3+|bg@ zy=P0vi;*nZzqnEGBX^G>{0drnmka-I(0ZO@S%s;~&7eU~b}!h2>6x>mbJjl?GmH(D z3)5dXl>O+k9vUt6KRZNhn34ziMDUk8M*~&WX^zPMohl(>n(EO%8z7}aK~qA*uS-q- z@54(4pxaCB@5^Q>U&&guY^(p9Z}72-b6m4z!YWQXt?8JLu%cm3p5v{qFV}>Tjn7=m z$%FrU^O1`4qcUD~DHh%Ht4r%AIe8+tM83oJ0$ct?!dw&KE6-V8LI0aI=9%@l4+dl* z;SYfxdRg;+zc476Zft$2FuC@q8>8MO)doUSf+?A1|6VzL8A|(~EI8&X>EQ&~t+`c& z0b(I$YP~ng$Gz4eyB#!JR*$ld{VItsO6I;u&PD!@EPVO3^bpO_RT_kb>B2wQom2ab z{$n^cBkPQJIw2}nK0Ta_+BG-qpmoUaMQ+&dXI$zy&q4c#7N{v7_W#yR(<6jXK7Tkc zSg80r_aEHw=tuqklBJ->ffG!zt23{6WFaoaI!qSR_z4Y{M{Q!vpV@8`oq7Bp-|>NE zJX%?5)0qLuBJRJga87l72HYL+g7-Ot*qt@ON0%isad?*h$MIV>DRyUGbzw-(wrUiB z{~z{fP(!Zf-!~pl+lCp&*RU~!DIpcN0TUiZP+84?Pua#`=YygE?6* zK>n0DhV9)?FD~vK5`AT{TmE-uRYC}J{)*VkN~RSfXGb1qr@UN-Xa?fHkc)e!$!gRfS+G;5K6lM9tn)DR@XF&=q9C#9+I&_G0l<^PqTQMn1LIaZ$F=H;M7g7aD3UeH3 z$@oo3Q+4~{(EXqN{lta?C*f1yo8^pO$O=ROqB=+G~JvuI~NU~EaDnQB-r^MYAx*N^6^SI_tUns4AXnvpZ|kRE$6K0|5E)5iaNs zGZg#8%TkBC9w&HC;~!yYy=rb&=8<6J-Oo8cHZ+J~$jG`hK^FHt^Pl7k-a$rgOKih{sM}GkMlc^*|L=H7PAObM1HqD9xC11{y!GMlB{*O^#)+{jQufJw zqzMf){#w_2`YO(YR3%RVz7o6ljdINMlnaHaOP-dcDzse*$F7oFa@8oH18q#^B8|50 z&*A(_+zD0LLoIe^{9vUTu@SFKzllE5U+Y#wcZBJuKot~y0Huw~js9{gj$ODb95 z zk0D6Sd&eflRhPKodl;h6?#v{lTWA??>l{ty!#vmWY>7=_|7nf@MXV1D%aWFyLU@Pv zFI3>{gb=l_?CQ_~A7QBhr}ICn(z5-d8b^>6bN0w8g0wX;V|Hgd)13Q-sr6uT?GHB} zhj|Ra;fv7!0DAPfKR*}MBKa7_vf4`;S*7jm-cz?fS}GTox})0vmP{&DiDRN?<+)>r zh&orf2*zVy$+LWv*Y!N|jNAXyLK=Z87lnKXS+Iiez|`KYEYHoN|xRY z)^!EnhPsv#Y4;dK0V^A704oPbV^}45c7)gIM8mjQA>y?Li5%0A<-b@Ib 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 XF&5;ua@T;-j{-K9=MaCM_PPCkU6Y;l literal 0 HcmV?d00001 diff --git a/src/assets/silent-refresh.html b/src/assets/silent-refresh.html new file mode 100644 index 0000000..e65ce39 --- /dev/null +++ b/src/assets/silent-refresh.html @@ -0,0 +1,7 @@ + + + + + diff --git a/src/configuration.json b/src/configuration.json index 875949d..341b778 100644 --- a/src/configuration.json +++ b/src/configuration.json @@ -1,8 +1,8 @@ { "issuer": "http://accounts.awtest.nl", "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, - "apiEndPoint": "http://localhost:8083" + "apiEndPoint": "http://farmmaps.awtest.nl" } \ No newline at end of file diff --git a/src/index.html b/src/index.html index 3d6ee2f..083a46c 100644 --- a/src/index.html +++ b/src/index.html @@ -7,7 +7,6 @@ -