434 Commits
Author SHA1 Message Date
Willem Dantuma f2c133e9bd Merge branch 'develop'
FarmMaps/FarmMapsLib/pipeline/head There was a failure building this commit
2024-09-24 20:10:52 +02:00
jenkins 9c866e500f [ci skip] Updated packages #2513
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-09-16 13:37:17 +00:00
peter 3b692359c6 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-09-16 15:35:27 +02:00
peter 3d4042e8c6 AW6241 Add item owner 2024-09-16 15:35:24 +02:00
jenkins 3db760dd96 [ci skip] Updated packages #2512
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-09-16 12:13:40 +00:00
peter b5828cd0fa Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-09-16 14:11:56 +02:00
peter af4e6f45d1 AW6241 Support source in item count 2024-09-16 14:11:39 +02:00
jenkins 79def90bc7 [ci skip] Updated packages #2511
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-09-16 12:01:16 +00:00
peter 53c60427f1 AW6241 Support src in item count
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-09-16 13:58:54 +02:00
jenkins 7d7e5bcd37 [ci skip] Updated packages #2510
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-09-06 11:47:40 +00:00
peter 72a172ccb2 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-09-06 13:46:04 +02:00
peter 2728a91ab4 Fix ngrx-store-localstorage dep 2024-09-06 13:45:56 +02:00
jenkins 28d2b5d4a3 [ci skip] Updated packages #2509
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-09-06 11:40:26 +00:00
peter b70e385097 Fix import @farmmaps/ng-openlayers
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-09-06 13:38:48 +02:00
peter 7392c6170c Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2024-09-06 13:33:01 +02:00
peter 367348088a Move ng-openlayers to @farmmaps 2024-09-06 13:32:58 +02:00
jenkins 5efd5b78c9 [ci skip] Updated packages #2507
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-09-06 11:14:07 +00:00
peter 0498d64c36 Move linux deps to optional
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-09-06 13:10:45 +02:00
jenkins e17ac435b5 [ci skip] Updated packages #2506
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-09-06 10:43:59 +00:00
Willem Dantuma 3e11c7cefd Revert
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-09-06 12:40:43 +02:00
Willem Dantuma b3dcd1e58b Move lmdb to overrides
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2024-09-06 12:36:56 +02:00
jenkins 681fc819a6 [ci skip] Updated packages #2504
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-09-06 10:30:45 +00:00
peter 2a62d2df48 Trigger build
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-09-06 10:27:23 +00:00
jenkins 004bcea0b6 [ci skip] Updated packages #2503
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-09-06 10:17:57 +00:00
peter 8efa46fa66 AW6241 Fix build
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-09-06 09:30:03 +02:00
peter cefa788295 Revert "AW6241 Fix build"
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
This reverts commit 749be159f1.
2024-09-06 09:17:25 +02:00
peter 2da783d6be Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2024-09-06 09:14:06 +02:00
peter 749be159f1 AW6241 Fix build 2024-09-06 09:14:03 +02:00
jenkins 4e24527950 [ci skip] Updated packages #2496
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-09-06 06:55:54 +00:00
peter 45263a59f4 AW6241 Fix peer deps
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-09-06 08:52:56 +02:00
jenkins 5cdef30c71 [ci skip] Updated packages #2495
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-09-05 13:07:16 +00:00
peter cdba2af921 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-09-05 15:01:14 +02:00
peter 658c2c84cd AW6241 publish config 2024-09-05 15:01:05 +02:00
peter 3f9b4dcdaa Update README.md
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2024-09-05 12:53:30 +00:00
jenkins a63159367f [ci skip] Updated packages #2492
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-09-05 12:51:03 +00:00
peter b9d1c8f61f Update README.md
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-09-05 12:47:31 +00:00
jenkins eb34de193c [ci skip] Updated packages #2491
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-09-05 12:31:43 +00:00
peter 5612bb3d66 Merge branch 'feature/AW6241Angular18' into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-09-05 13:44:56 +02:00
peter 0e42efac75 AW6241 Fix deps 2024-09-05 13:44:33 +02:00
peter 3247880b7c AW6241 Migrate deps 2024-09-05 12:50:16 +02:00
peter a250ecdcc1 AW6241 Migrate libs to latest bootstrap 2024-09-05 11:45:31 +02:00
peter 93e497ec3f AW6241 Migrate libs to ng-18 2024-09-05 11:02:15 +02:00
peter 10a1f07622 AW6241 Migrate main to ng-18 2024-09-05 09:08:43 +02:00
peter 07d6c1bc10 AW6241 ng-18 adopt ng-openlayers 2024-09-05 08:50:27 +02:00
jenkins 1bddc28767 [ci skip] Updated packages #2485
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-09-02 12:29:11 +00:00
peter a999c05631 Aw-6020 Add getItemListCount for paging
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-09-02 14:27:47 +02:00
jenkins f3252a378d [ci skip] Updated packages #2484
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-08-29 07:38:28 +00:00
peter 4ab1e43d40 Aw-6020 Fix getChildItemListCount
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-08-29 09:37:03 +02:00
jenkins 2719f2fcf4 [ci skip] Updated packages #2483
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-08-20 08:54:40 +00:00
peter 55914bf7d2 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-08-20 10:51:30 +02:00
peter 26ca9be4e7 Aw6020 Itemtype = optional 2024-08-20 10:51:21 +02:00
peter 0ed342404e Aw6020 Itemtype = optional 2024-08-20 10:47:33 +02:00
jenkins 26ae1c7f06 [ci skip] Updated packages #2482
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-08-20 08:45:26 +00:00
peter f71d0fe256 Aw6020 Add my_root
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-08-20 10:43:57 +02:00
jenkins 7544203202 [ci skip] Updated packages #2481
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-08-20 08:04:03 +00:00
peter 41a30e0b64 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-08-20 10:02:37 +02:00
peter f14fc1a4fc Aw6020 Allow retrieving list items with date filter 2024-08-20 10:02:33 +02:00
jenkins 21ebda4753 [ci skip] Updated packages #2480
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-06-12 13:30:48 +00:00
peter 3a80a6f7f3 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-06-12 15:29:24 +02:00
peter 71a2ef44e6 AW-6226 Add admin function to post task on behalve of other user 2024-06-12 15:29:15 +02:00
jenkins 1610391d56 [ci skip] Updated packages #2479
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-06-12 10:15:19 +00:00
peter b778e5726c error TS2307: Cannot find module 'dist/common' or its corresponding type declarations.
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-06-12 12:14:05 +02:00
peter fc4abf9a5b AW-6226 Add admin function to retrieve all users
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2024-06-12 12:11:36 +02:00
jenkins 1274d96f1d [ci skip] Updated packages #63
FarmMaps/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-04-24 00:09:30 +00:00
mark 35ccb4f4c5 Merge branch 'develop'
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2024-04-23 11:54:04 +02:00
jenkins d6587bd63b [ci skip] Updated packages #2477
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-04-15 14:29:22 +00:00
jenkins ede75f63f5 [ci skip] Updated packages #2463
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-04-10 12:19:34 +00:00
peter 274f33e709 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
# Conflicts:
#	package-lock.json
2024-04-10 14:07:19 +02:00
peter 4384b12944 AW-6046 ng-openlayers 2024-04-10 14:06:44 +02:00
jenkins 10ebdf276a [ci skip] Updated packages #2460
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-04-10 11:45:06 +00:00
peter 9c270bfe75 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-04-10 13:41:54 +02:00
peter 9031d3e171 Update ngx-clipboard 2024-04-10 13:41:46 +02:00
jenkins c3158c1064 [ci skip] Updated packages #2459
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-04-10 11:29:13 +00:00
peter 315b64a561 Fixes
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-04-10 13:27:25 +02:00
jenkins 030dbcec5d [ci skip] Updated packages #2458
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-04-10 06:25:47 +00:00
peter 876020828e AW-6046 Angular 17
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-04-10 08:24:07 +02:00
peter 393b881e3b Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop 2024-04-10 08:18:36 +02:00
peter 8594a94d62 AW-6046 Angular 17 2024-04-10 08:18:25 +02:00
jenkins c543ac7c94 [ci skip] Updated packages #2457
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-04-09 13:51:44 +00:00
peter 97d6d569a0 AW-6046 Fix open layers 8 issues
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-04-09 15:50:03 +02:00
peter 023048a5bb error TS2307: Cannot find module 'ol/source/WMSServerType' or its corresponding type declarations.
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2024-04-09 15:05:26 +02:00
peter 4a685d675d AW-6046 Open layers 8
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2024-04-09 12:36:39 +02:00
jenkins 1125f4586e [ci skip] Updated packages #2454
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-04-09 10:13:34 +00:00
peter 3bdba527ec npm ERR! code ENEEDAUTH
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-04-09 12:10:38 +02:00
peter fb03cfce44 npm ERR! code ENEEDAUTH
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2024-04-09 12:06:14 +02:00
peter 6f93cf254c AW-6046 Angular 17
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2024-04-09 11:23:39 +02:00
peter b5a3a62cee AW-6046 Fix jenkins
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2024-04-09 11:04:37 +02:00
peter d306d5c4c1 AW-6046 Angular 17
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2024-04-09 10:58:42 +02:00
peter e79ae2f623 AW-6046 Angular 17 2024-04-09 10:16:21 +02:00
peter bdf4e03b49 AW-6046 Angular 17 2024-04-09 09:50:06 +02:00
peter 7d5c10d902 AW-6046 Angular 17 2024-04-09 09:46:52 +02:00
peter fb192c6e4d AW-6046 Angular 17 2024-04-09 09:45:29 +02:00
jenkins 6356f149a6 [ci skip] Updated packages #2447
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-04-04 12:57:13 +00:00
peter 5c5914327c AW-6033 /api/v1/items/undefined/children?... 401 (Unauthorized)
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-04-04 14:55:39 +02:00
jenkins e306bf601f [ci skip] Updated packages #2446
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-04-04 11:20:05 +00:00
peter f8459aaca4 AW-6033 main.js:555726 ERROR TypeError: Cannot read properties of null (reading 'code')
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-04-04 13:18:28 +02:00
jenkins 47fbc5eab9 [ci skip] Updated packages #62
FarmMaps/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-03-20 12:00:40 +00:00
peter 564d08b5b9 Fixed build
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2024-03-20 11:59:14 +00:00
peter 7e17a49dc6 Merge branch 'develop'
FarmMaps/FarmMapsLib/pipeline/head There was a failure building this commit
# Conflicts:
#	package-lock.json
#	package.json
2024-03-19 16:04:26 +01:00
jenkins ce52cbdbed [ci skip] Updated packages #2445
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-03-05 14:41:30 +00:00
mark 752e1e2c42 added hit tolerance to ngx select interaction
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-03-05 15:39:52 +01:00
jenkins 6b617ed4ad [ci skip] Updated packages #2444
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-03-04 12:22:37 +00:00
peter 9b19950945 Fix upload json formatting
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
Fix extraAttributes null exception
2024-03-04 13:20:23 +01:00
jenkins 3f286ee042 [ci skip] Updated packages #58
FarmMaps/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-02-29 13:56:31 +00:00
peter 747499d009 Merge branch 'develop'
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
# Conflicts:
#	package-lock.json
#	package.json
2024-02-29 14:54:59 +01:00
jenkins c74163976a [ci skip] Changed by Jenkins: 2443
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-02-08 18:37:07 +00:00
Willem Dantuma c9f43b5b53 Fix span
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-02-08 19:35:39 +01:00
jenkins 6a240abc0c [ci skip] Changed by Jenkins: 2442
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-02-08 18:10:48 +00:00
Willem Dantuma 7d8b18a27d Add space
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-02-08 19:09:19 +01:00
jenkins 4a328054dd [ci skip] Changed by Jenkins: 2441
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-02-08 17:36:18 +00:00
Willem Dantuma 3e482470b6 Add provider info
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-02-08 18:33:35 +01:00
jenkins 3bacb8a5d9 [ci skip] Changed by Jenkins: 2440
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-02-08 17:19:12 +00:00
Willem Dantuma 47afa20a01 Add firstname and lastname
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-02-08 18:17:42 +01:00
jenkins f0646a8f6a [ci skip] Changed by Jenkins: 2439
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-02-01 15:38:22 +00:00
peter 36ebc03189 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-02-01 16:35:36 +01:00
peter c0d40d2d5e Aw5812Add wide supp 2024-02-01 16:34:24 +01:00
jenkins 14e504cc79 [ci skip] Changed by Jenkins: 2438
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-02-01 15:22:56 +00:00
peter b060fd34bb Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-02-01 16:21:20 +01:00
peter 0694d4e467 Aw5812Fix null exc 2024-02-01 16:20:57 +01:00
jenkins 7c5867a332 [ci skip] Changed by Jenkins: 2437
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-02-01 15:02:54 +00:00
peter 8f958e33f1 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-02-01 16:01:24 +01:00
peter aa2f305b27 Aw5812wip 2024-02-01 16:01:11 +01:00
jenkins d02da8f334 [ci skip] Changed by Jenkins: 2436
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-02-01 14:23:30 +00:00
peter 253553c534 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
# Conflicts:
#	package-lock.json
2024-02-01 15:21:58 +01:00
peter 4641e351fd Aw5812 2024-02-01 15:21:04 +01:00
jenkins 84cf6a3f6e [ci skip] Changed by Jenkins: 2435
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-02-01 12:36:14 +00:00
peter 92b29135b5 Aw5812wip
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-02-01 13:34:38 +01:00
jenkins f6aebb2f80 [ci skip] Changed by Jenkins: 2434
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-01-30 10:19:44 +00:00
peter daf78f32b7 Fix error TS500: RangeError: Maximum call stack size exceeded
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-01-30 11:18:11 +01:00
peter 42245612d2 ERROR: Trying to publish a package that has been compiled by Ivy in full compilation mode
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2024-01-30 11:00:16 +01:00
peter a05c1fa874 Fix build
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2024-01-30 10:52:02 +01:00
peter 4bda94c360 Fix path
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2024-01-30 10:23:14 +01:00
peter feaad02c33 Fix path
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2024-01-30 10:06:26 +01:00
peter af9acebaff Only page not found when no routing is matched on production environment
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2024-01-30 09:54:00 +01:00
jenkins 7ba35052ec [ci skip] Changed by Jenkins: 2427
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-01-29 15:27:29 +00:00
peter 2e40d023b1 Aw5812 Update item file
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-01-29 16:25:56 +01:00
jenkins c4f4a4f61e [ci skip] Changed by Jenkins: 57
FarmMaps/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-01-24 17:19:55 +00:00
peter 6b095b7f49 Trigger build
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2024-01-24 17:18:09 +00:00
peter b2791eb80b Merge branch 'develop'
FarmMaps/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
# Conflicts:
#	README.md
#	package-lock.json
#	package.json
2024-01-24 18:13:28 +01:00
jenkins 4d5ed915ad [ci skip] Changed by Jenkins: 2426
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-01-12 12:07:12 +00:00
peter 2fb5967c26 Aw-5739 Use ngrx-store-localstorage angular 16 compatible version
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-01-12 13:05:37 +01:00
jenkins 820543913f [ci skip] Changed by Jenkins: 2425
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-01-11 12:39:00 +00:00
peter ce2f06091b Aw-5739 Add data download service
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-01-11 13:37:25 +01:00
jenkins 5714cdce72 [ci skip] Changed by Jenkins: 2424
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-01-09 08:27:18 +00:00
peter 10e43e1ea5 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
# Conflicts:
#	package-lock.json
2024-01-09 09:25:44 +01:00
peter 8fa84c6ea8 Aw5739 Update to Angular v16. 2024-01-09 09:24:52 +01:00
jenkins 9f872d0af0 [ci skip] Changed by Jenkins: 2423
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-01-08 13:54:36 +00:00
peter f6bed668f6 Merge branch 'feature/AW5739AngularV15ToV16' into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
# Conflicts:
#	package-lock.json
2024-01-08 14:52:46 +01:00
peter f70e30204d Aw5739 Update to Angular v16. 2024-01-08 14:51:37 +01:00
peter 7339b91328 Aw5739 Prepare migration to v16: Use suported version of ngx-avatars 2024-01-08 14:43:28 +01:00
peter 88667b3986 Aw5739 Prepare migration to v16 Update package.lock 2024-01-08 14:41:05 +01:00
peter a996caa73b Aw5739 Prepare migration to v16 Update ngrx 2024-01-08 14:38:06 +01:00
peter ed6f8f4231 Aw5739 Prepare migration to v16 Update ngrx 2024-01-08 14:33:32 +01:00
peter 94ef2e269b Aw5739 Prepare migration to v16 Update eslint 2024-01-08 14:31:09 +01:00
peter da624f0535 Aw5739 Prepare migration to v16 2024-01-08 14:25:46 +01:00
peter 3da646dc4d Aw5739 Prepare migration to v16: Use supported version of TypeScript 2024-01-08 14:19:52 +01:00
peter 778e40a26d Aw5739 Prepare migration to v16: Use supported version of TypeScript 2024-01-08 13:25:30 +01:00
jenkins 94ff567567 [ci skip] Changed by Jenkins: 2422
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-01-08 11:38:33 +00:00
peter b20ab34859 Merge branch 'feature/AW5739AngularV14ToV15' into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-01-08 12:36:27 +01:00
peter 1988b3f74d Aw5739 Update to Angular v15. 2024-01-08 12:33:38 +01:00
peter b0587bc4c3 Aw5739 Prepare migration to v15: Use suported version of ngx-clipboard 2024-01-08 12:17:32 +01:00
peter 681d372ef3 Aw5739 Prepare migration to v15: Use suported version of ngx-avatar 2024-01-08 12:05:38 +01:00
peter b1922cdb10 Aw5739 Prepare migration to v15: Use supported version of TypeScript. Use suported version of ngx-avatar 2024-01-08 11:19:56 +01:00
jenkins 5774bff8df [ci skip] Changed by Jenkins: 2421
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2023-12-29 13:53:17 +00:00
peter 6254a3be98 Trigger build
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-12-29 13:50:43 +00:00
jenkins 7943cefddf [ci skip] Changed by Jenkins: 2414
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2023-12-29 10:17:00 +00:00
peter a2a287961c Fix error TS2307: Cannot find module 'ngx-openlayers' or its corresponding type declarations.
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-12-29 11:07:41 +01:00
peter 8e8f18ad7c Aw5739 Add ngx openlayers
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2023-12-29 11:01:36 +01:00
jenkins 5cbb6f32f9 [ci skip] Changed by Jenkins: 2398
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-12-21 11:57:05 +00:00
peter b2469f731e trigger build
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-12-21 11:54:47 +00:00
jenkins beb439469f [ci skip] Changed by Jenkins: 2397
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2023-12-19 13:26:17 +00:00
wilco ef49f62ca2 AW-5727 - Farms blijft leeg bij harde reload
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-12-19 14:14:57 +01:00
jenkins 67abc67d9a [ci skip] Changed by Jenkins: 2396
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2023-12-15 13:11:48 +00:00
jenkins 1f7f410916 [ci skip] Changed by Jenkins: 2395
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2023-12-15 13:06:21 +00:00
peter 2f176be8c6 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-12-15 14:01:02 +01:00
peter 1118c5ca60 Aw3998 Add click 2023-12-15 14:00:48 +01:00
jenkins c7831d1d87 [ci skip] Changed by Jenkins: 2394
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2023-12-15 12:51:48 +00:00
peter 31c5e0cb52 Aw3998 Add click
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-12-15 13:49:13 +01:00
jenkins c6a632894d [ci skip] Changed by Jenkins: 2393
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2023-12-15 10:10:59 +00:00
peter e652c7bb5b Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-12-15 11:05:40 +01:00
peter 818e04d1f3 Aw3998 Cleanup 2023-12-15 11:05:27 +01:00
jenkins ebbac409a0 [ci skip] Changed by Jenkins: 2392
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2023-12-15 10:01:59 +00:00
peter 5cc976ddd3 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-12-15 10:59:18 +01:00
peter 38eae3263e Aw-3998 Add ability to clear features 2023-12-15 10:59:10 +01:00
jenkins a3eb2d9617 [ci skip] Changed by Jenkins: 2391
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2023-11-25 14:55:18 +00:00
mark 03e3c7ad95 fix build...
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-11-25 15:52:47 +01:00
mark 8fd8675260 AW-5366 fix scaling of histogram
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2023-11-25 15:46:31 +01:00
mark 187811e4e2 upped version
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2023-11-25 15:41:39 +01:00
mark 8e304fc6eb also use scale for histogram
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2023-11-23 21:13:44 +01:00
jenkins 4c93a9f766 [ci skip] Changed by Jenkins: 56
FarmMaps/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2023-11-16 17:02:44 +00:00
peter 93554bc7c4 Update README.md
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2023-11-16 16:40:14 +00:00
peter d074cd81cf Merge branch 'develop'
FarmMaps/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2023-11-16 17:37:13 +01:00
jenkins 127dc44917 [ci skip] Changed by Jenkins: 2387
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2023-10-21 08:59:13 +00:00
jenkins aa5a8f0843 [ci skip] Changed by Jenkins: 2385
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 08:47:16 +00:00
jenkins a10aca92f1 [ci skip] Changed by Jenkins: 2383 2023-10-21 08:18:23 +00:00
jenkins e42e94fcf7 [ci skip] Changed by Jenkins: 2382
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 08:16:00 +00:00
jenkins 2b83ccad1f [ci skip] Changed by Jenkins: 2381
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 08:13:37 +00:00
jenkins e31d428c4b [ci skip] Changed by Jenkins: 2380
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 07:44:52 +00:00
jenkins 429e54ef8d [ci skip] Changed by Jenkins: 2379
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 07:39:40 +00:00
jenkins 02e13337bf [ci skip] Changed by Jenkins: 2378
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 07:34:27 +00:00
jenkins b4eb7aaeac [ci skip] Changed by Jenkins: 2377
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 07:30:58 +00:00
jenkins 7e21c725d8 [ci skip] Changed by Jenkins: 2376
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 07:25:39 +00:00
jenkins dd889ea7cc [ci skip] Changed by Jenkins: 2375
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 07:20:42 +00:00
jenkins 4dab5a00b1 [ci skip] Changed by Jenkins: 2374
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 07:16:29 +00:00
jenkins 5cc58e8988 [ci skip] Changed by Jenkins: 2373
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 07:11:47 +00:00
jenkins 0944e595d3 [ci skip] Changed by Jenkins: 2372
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 07:07:16 +00:00
jenkins 32bebec0df [ci skip] Changed by Jenkins: 2371
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 07:02:43 +00:00
jenkins c0cf210600 [ci skip] Changed by Jenkins: 2370
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 06:58:06 +00:00
jenkins f85a27a8e5 [ci skip] Changed by Jenkins: 2369
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 06:54:05 +00:00
jenkins 88ae8b829f [ci skip] Changed by Jenkins: 2368
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 06:49:06 +00:00
jenkins fcb60ed8bc [ci skip] Changed by Jenkins: 2367
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 06:44:19 +00:00
jenkins 3d535507fb [ci skip] Changed by Jenkins: 2366
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 06:40:43 +00:00
jenkins e89bdac47d [ci skip] Changed by Jenkins: 2365
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 06:35:36 +00:00
jenkins 4038702841 [ci skip] Changed by Jenkins: 2364
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 06:30:50 +00:00
jenkins 7ced2d2a7b [ci skip] Changed by Jenkins: 2363
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 06:27:26 +00:00
jenkins c53981f4a6 [ci skip] Changed by Jenkins: 2362
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 06:21:55 +00:00
jenkins 076dec27d5 [ci skip] Changed by Jenkins: 2361
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 06:16:30 +00:00
jenkins 5354aa8d0a [ci skip] Changed by Jenkins: 2360
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 06:12:54 +00:00
jenkins 12143c8e69 [ci skip] Changed by Jenkins: 2359
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 06:07:52 +00:00
jenkins 50519e9236 [ci skip] Changed by Jenkins: 2358
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 06:03:08 +00:00
jenkins 7f6d007c04 [ci skip] Changed by Jenkins: 2357
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 05:58:43 +00:00
jenkins 98be4f05cc [ci skip] Changed by Jenkins: 2356
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 05:54:03 +00:00
jenkins 79558e2168 [ci skip] Changed by Jenkins: 2355
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 05:49:44 +00:00
jenkins b966241997 [ci skip] Changed by Jenkins: 2354
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 05:44:51 +00:00
jenkins 60a7384f88 [ci skip] Changed by Jenkins: 2353
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 05:39:58 +00:00
jenkins 76f225b996 [ci skip] Changed by Jenkins: 2352
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 05:36:10 +00:00
jenkins 37a25c6b29 [ci skip] Changed by Jenkins: 2351
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 05:30:37 +00:00
jenkins 6c45842387 [ci skip] Changed by Jenkins: 2350
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 05:25:39 +00:00
jenkins d37b0866d5 [ci skip] Changed by Jenkins: 2349
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 05:22:22 +00:00
jenkins 270f244128 [ci skip] Changed by Jenkins: 2348
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 05:16:55 +00:00
jenkins ebddf688c6 [ci skip] Changed by Jenkins: 2347
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 05:11:46 +00:00
jenkins f1c572ecc9 [ci skip] Changed by Jenkins: 2346
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 05:08:27 +00:00
jenkins af5361b6c3 [ci skip] Changed by Jenkins: 2345
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 05:03:06 +00:00
jenkins 6daf0eab4a [ci skip] Changed by Jenkins: 2344
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 04:58:02 +00:00
jenkins 66fe0e9534 [ci skip] Changed by Jenkins: 2343
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 04:53:55 +00:00
jenkins 75ccc6dda4 [ci skip] Changed by Jenkins: 2342
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 04:49:13 +00:00
jenkins e45ec785d7 [ci skip] Changed by Jenkins: 2341
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 04:44:43 +00:00
jenkins b067b50937 [ci skip] Changed by Jenkins: 2340
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 04:39:41 +00:00
jenkins 0c2e6364ac [ci skip] Changed by Jenkins: 2339
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 04:34:53 +00:00
jenkins b232fb2c8e [ci skip] Changed by Jenkins: 2338
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 04:31:22 +00:00
jenkins 4a19694c1a [ci skip] Changed by Jenkins: 2337
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 04:26:15 +00:00
jenkins af766abe54 [ci skip] Changed by Jenkins: 2336
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 04:21:18 +00:00
jenkins 6333d78eab [ci skip] Changed by Jenkins: 2335
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 04:17:52 +00:00
jenkins c06fe315d8 [ci skip] Changed by Jenkins: 2334
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 04:12:49 +00:00
jenkins bc1f44f0b7 [ci skip] Changed by Jenkins: 2333
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 04:07:54 +00:00
jenkins 95bb8da8b7 [ci skip] Changed by Jenkins: 2332
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 04:04:15 +00:00
jenkins 68f8ff9cdd [ci skip] Changed by Jenkins: 2331
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 03:59:23 +00:00
jenkins 9e122fefd3 [ci skip] Changed by Jenkins: 2330
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 03:54:27 +00:00
jenkins b47ead21be [ci skip] Changed by Jenkins: 2329
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 03:49:59 +00:00
jenkins ebe43c3b27 [ci skip] Changed by Jenkins: 2328
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 03:45:21 +00:00
jenkins 686084f5cf [ci skip] Changed by Jenkins: 2327
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 03:40:56 +00:00
jenkins 0abaf15101 [ci skip] Changed by Jenkins: 2326
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 03:36:07 +00:00
jenkins 9dd2b5cdb5 [ci skip] Changed by Jenkins: 2325
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 03:31:28 +00:00
jenkins 2246a98bbb [ci skip] Changed by Jenkins: 2324
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 03:27:46 +00:00
jenkins 6265b66baf [ci skip] Changed by Jenkins: 2323
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 03:22:24 +00:00
jenkins 5488206588 [ci skip] Changed by Jenkins: 2322
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 03:17:37 +00:00
jenkins b4f2042aa0 [ci skip] Changed by Jenkins: 2321
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 03:14:13 +00:00
jenkins 21dca2163b [ci skip] Changed by Jenkins: 2320
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 03:08:56 +00:00
jenkins 2bc02323ae [ci skip] Changed by Jenkins: 2319
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 03:03:55 +00:00
jenkins 8b073fb855 [ci skip] Changed by Jenkins: 2318
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 02:59:42 +00:00
jenkins 5d28b547a1 [ci skip] Changed by Jenkins: 2317
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 02:54:59 +00:00
jenkins f2407dc12a [ci skip] Changed by Jenkins: 2316
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 02:50:27 +00:00
jenkins f02b317cf4 [ci skip] Changed by Jenkins: 2315
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 02:45:35 +00:00
jenkins 270b774c33 [ci skip] Changed by Jenkins: 2314
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 02:40:55 +00:00
jenkins 864b72c82c [ci skip] Changed by Jenkins: 2313
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 02:37:12 +00:00
jenkins c5716b0102 [ci skip] Changed by Jenkins: 2312
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 02:32:04 +00:00
jenkins ad097121da [ci skip] Changed by Jenkins: 2311
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 02:27:18 +00:00
jenkins 79b33cff50 [ci skip] Changed by Jenkins: 2310
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 02:23:53 +00:00
jenkins e01417f3b3 [ci skip] Changed by Jenkins: 2309
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 02:18:28 +00:00
jenkins 68ffc6f7d9 [ci skip] Changed by Jenkins: 2308
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 02:13:18 +00:00
jenkins ef7cf410b9 [ci skip] Changed by Jenkins: 2307
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 02:08:49 +00:00
jenkins 151ba2563e [ci skip] Changed by Jenkins: 2306
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 02:04:04 +00:00
jenkins 78f4dca9a1 [ci skip] Changed by Jenkins: 2305
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 01:59:33 +00:00
jenkins 52bf963afd [ci skip] Changed by Jenkins: 2304
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 01:55:02 +00:00
jenkins e6cfb85b8e [ci skip] Changed by Jenkins: 2303
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 01:50:24 +00:00
jenkins 6576e7cb6d [ci skip] Changed by Jenkins: 2302
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 01:46:19 +00:00
jenkins 7d7528ab4c [ci skip] Changed by Jenkins: 2301
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 01:41:07 +00:00
jenkins 34a79ec833 [ci skip] Changed by Jenkins: 2300
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 01:36:14 +00:00
jenkins 6cd5b0e5d7 [ci skip] Changed by Jenkins: 2299
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 01:32:38 +00:00
jenkins 412ddc01d1 [ci skip] Changed by Jenkins: 2298
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 01:27:32 +00:00
jenkins 10edf0728b [ci skip] Changed by Jenkins: 2297
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 01:22:40 +00:00
jenkins 57189ce4df [ci skip] Changed by Jenkins: 2296
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 01:18:05 +00:00
jenkins e72f933014 [ci skip] Changed by Jenkins: 2295
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 01:13:27 +00:00
jenkins 782e7adb00 [ci skip] Changed by Jenkins: 2294
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 01:08:52 +00:00
jenkins 17b78476ee [ci skip] Changed by Jenkins: 2293
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 01:04:01 +00:00
jenkins 93630d5a09 [ci skip] Changed by Jenkins: 2292
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 00:59:21 +00:00
jenkins 79f09d0e0e [ci skip] Changed by Jenkins: 2291
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 00:55:15 +00:00
jenkins 02016eb404 [ci skip] Changed by Jenkins: 2290
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 00:50:40 +00:00
jenkins 59760ad201 [ci skip] Changed by Jenkins: 2289
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 00:45:44 +00:00
jenkins 6eca90abb6 [ci skip] Changed by Jenkins: 2288
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 00:41:31 +00:00
jenkins b853b4d3f7 [ci skip] Changed by Jenkins: 2287
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 00:36:19 +00:00
jenkins 6e815e3442 [ci skip] Changed by Jenkins: 2286
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 00:31:19 +00:00
jenkins befa82d0f6 [ci skip] Changed by Jenkins: 2285
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 00:27:12 +00:00
jenkins 5df0e6e423 [ci skip] Changed by Jenkins: 2284
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 00:22:27 +00:00
jenkins 669f93a327 [ci skip] Changed by Jenkins: 2283
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 00:17:41 +00:00
jenkins 73ff1fd47f [ci skip] Changed by Jenkins: 2282
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 00:13:28 +00:00
jenkins e07c3aeb3d [ci skip] Changed by Jenkins: 2281
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 00:08:48 +00:00
jenkins 700b29c3d1 [ci skip] Changed by Jenkins: 2280
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-21 00:04:17 +00:00
jenkins 0ffdbfd3ca [ci skip] Changed by Jenkins: 2279
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 23:58:42 +00:00
jenkins 756db80b77 [ci skip] Changed by Jenkins: 2278
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 23:53:53 +00:00
jenkins b2559be980 [ci skip] Changed by Jenkins: 2277
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 23:50:26 +00:00
jenkins a9754a8eff [ci skip] Changed by Jenkins: 2276
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 23:44:53 +00:00
jenkins d5961d4c96 [ci skip] Changed by Jenkins: 2275
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 23:40:03 +00:00
jenkins 56e35345fc [ci skip] Changed by Jenkins: 2274
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 23:36:15 +00:00
jenkins 9755f5a635 [ci skip] Changed by Jenkins: 2273
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 23:31:22 +00:00
jenkins 2ff1aff9f3 [ci skip] Changed by Jenkins: 2272
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 23:26:18 +00:00
jenkins 164ac7e3ad [ci skip] Changed by Jenkins: 2271
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 23:22:05 +00:00
jenkins 85a7e890bd [ci skip] Changed by Jenkins: 2270
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 23:17:20 +00:00
jenkins 8766293966 [ci skip] Changed by Jenkins: 2269
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 23:12:47 +00:00
jenkins d2cad491b9 [ci skip] Changed by Jenkins: 2268
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 23:08:14 +00:00
jenkins 16d2c6abae [ci skip] Changed by Jenkins: 2267
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 23:03:36 +00:00
jenkins a212b59d73 [ci skip] Changed by Jenkins: 2266
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 22:59:21 +00:00
jenkins 3574e34659 [ci skip] Changed by Jenkins: 2265
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 22:54:18 +00:00
jenkins 13704c6845 [ci skip] Changed by Jenkins: 2264
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 22:49:39 +00:00
jenkins bbe337d115 [ci skip] Changed by Jenkins: 2263
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 22:45:43 +00:00
jenkins e1b6e59b6a [ci skip] Changed by Jenkins: 2262
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 22:40:29 +00:00
jenkins 3685644888 [ci skip] Changed by Jenkins: 2261
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 22:35:31 +00:00
jenkins 050adcbc0f [ci skip] Changed by Jenkins: 2260
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 22:32:05 +00:00
jenkins 0a12005d5d [ci skip] Changed by Jenkins: 2259
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 22:26:59 +00:00
jenkins 8a4644049b [ci skip] Changed by Jenkins: 2258
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 22:21:55 +00:00
jenkins ca7e5e03be [ci skip] Changed by Jenkins: 2257
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 22:17:41 +00:00
jenkins a1ceabec47 [ci skip] Changed by Jenkins: 2256
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 22:13:00 +00:00
jenkins 917b875732 [ci skip] Changed by Jenkins: 2255
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 22:08:15 +00:00
jenkins 7df2004671 [ci skip] Changed by Jenkins: 2254
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 22:03:04 +00:00
jenkins c50a79d723 [ci skip] Changed by Jenkins: 2253
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 21:58:10 +00:00
jenkins 519d789281 [ci skip] Changed by Jenkins: 2252
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 21:54:40 +00:00
jenkins b5038e9661 [ci skip] Changed by Jenkins: 2251
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 21:49:31 +00:00
jenkins bab69698c6 [ci skip] Changed by Jenkins: 2250
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 21:44:35 +00:00
jenkins 5c6ea6a391 [ci skip] Changed by Jenkins: 2249
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 21:40:39 +00:00
jenkins 328edc396b [ci skip] Changed by Jenkins: 2248
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 21:35:40 +00:00
jenkins 9cd8b81149 [ci skip] Changed by Jenkins: 2247
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 21:30:57 +00:00
jenkins 80e1f8042e [ci skip] Changed by Jenkins: 2246
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 21:26:44 +00:00
jenkins 1a1bdb314e [ci skip] Changed by Jenkins: 2245
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 21:22:06 +00:00
jenkins 51ec1bd3b4 [ci skip] Changed by Jenkins: 2244
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 21:17:45 +00:00
jenkins c8440ca536 [ci skip] Changed by Jenkins: 2243
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 21:12:51 +00:00
jenkins 889d1b4f9e [ci skip] Changed by Jenkins: 2242
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 21:08:16 +00:00
jenkins 97b458e812 [ci skip] Changed by Jenkins: 2241
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 21:04:14 +00:00
jenkins 0378565b88 [ci skip] Changed by Jenkins: 2240
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 20:59:03 +00:00
jenkins 8ca8874707 [ci skip] Changed by Jenkins: 2239
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 20:53:57 +00:00
jenkins dc2772aabf [ci skip] Changed by Jenkins: 2238
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 20:50:45 +00:00
jenkins ce0e561a3f [ci skip] Changed by Jenkins: 2237
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 20:45:22 +00:00
jenkins ba9aab03a9 [ci skip] Changed by Jenkins: 2236
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 20:40:28 +00:00
jenkins f10686423d [ci skip] Changed by Jenkins: 2235
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 20:36:10 +00:00
jenkins c1688f68c2 [ci skip] Changed by Jenkins: 2234
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 20:31:07 +00:00
jenkins c916b2f155 [ci skip] Changed by Jenkins: 2233
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 20:26:38 +00:00
jenkins 5df9ac295d [ci skip] Changed by Jenkins: 2232
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 20:21:27 +00:00
jenkins 065a45dc98 [ci skip] Changed by Jenkins: 2231
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 20:16:45 +00:00
jenkins 6b66777699 [ci skip] Changed by Jenkins: 2230
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 20:13:16 +00:00
jenkins 9927ba0929 [ci skip] Changed by Jenkins: 2229
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 20:08:06 +00:00
jenkins a05a29703c [ci skip] Changed by Jenkins: 2228
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 20:03:14 +00:00
jenkins 76952cac67 [ci skip] Changed by Jenkins: 2227
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 20:00:11 +00:00
jenkins 9b27a997f3 [ci skip] Changed by Jenkins: 2226
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 19:55:10 +00:00
jenkins 014e3143fd [ci skip] Changed by Jenkins: 2225
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 19:49:25 +00:00
jenkins 7eaf1686e1 [ci skip] Changed by Jenkins: 2224
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 19:45:29 +00:00
jenkins d4bf2a6667 [ci skip] Changed by Jenkins: 2223
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 19:40:20 +00:00
jenkins 9d7cf637ee [ci skip] Changed by Jenkins: 2222
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 19:35:28 +00:00
jenkins 979f80ce89 [ci skip] Changed by Jenkins: 2221
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 19:31:06 +00:00
jenkins c677a9b639 [ci skip] Changed by Jenkins: 2220
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 19:26:28 +00:00
jenkins 9440b91d90 [ci skip] Changed by Jenkins: 2219
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 19:22:00 +00:00
jenkins 2b18167761 [ci skip] Changed by Jenkins: 2218
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 19:17:12 +00:00
jenkins da8b2f1d3a [ci skip] Changed by Jenkins: 2217
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 19:12:23 +00:00
jenkins 10e4e6abc6 [ci skip] Changed by Jenkins: 2216
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 19:08:42 +00:00
jenkins 6acfe7c32f [ci skip] Changed by Jenkins: 2215
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 19:03:43 +00:00
jenkins d08c1b2008 [ci skip] Changed by Jenkins: 2214
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 18:59:00 +00:00
jenkins a47e1d9a63 [ci skip] Changed by Jenkins: 2213
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 18:55:36 +00:00
jenkins 4187522739 [ci skip] Changed by Jenkins: 2212
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 18:50:18 +00:00
jenkins c0d0088f6e [ci skip] Changed by Jenkins: 2211
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 18:45:22 +00:00
jenkins d43dff3085 [ci skip] Changed by Jenkins: 2210
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 18:41:54 +00:00
jenkins 9a04e1f848 [ci skip] Changed by Jenkins: 2209
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 18:36:47 +00:00
jenkins 621773a6f1 [ci skip] Changed by Jenkins: 2208
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 18:32:05 +00:00
jenkins a9672c44bf [ci skip] Changed by Jenkins: 2207
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 18:28:14 +00:00
jenkins 155c212f89 [ci skip] Changed by Jenkins: 2206
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 18:22:58 +00:00
jenkins ee35c3f1b8 [ci skip] Changed by Jenkins: 2205
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 18:18:04 +00:00
jenkins 0a405f5515 [ci skip] Changed by Jenkins: 2204
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 18:13:42 +00:00
jenkins b618b7c40f [ci skip] Changed by Jenkins: 2203
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 18:09:03 +00:00
jenkins f10e68c4ad [ci skip] Changed by Jenkins: 2202
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 18:04:31 +00:00
jenkins 870c3c2c77 [ci skip] Changed by Jenkins: 2201
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 17:59:26 +00:00
jenkins 1559f15c7f [ci skip] Changed by Jenkins: 2200
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 17:54:47 +00:00
jenkins 96345e54fb [ci skip] Changed by Jenkins: 2199
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 17:51:16 +00:00
jenkins f61590c677 [ci skip] Changed by Jenkins: 2198
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 17:45:57 +00:00
jenkins 6f1ec4a17a [ci skip] Changed by Jenkins: 2197
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 17:41:02 +00:00
jenkins 786e9392b1 [ci skip] Changed by Jenkins: 2196
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 17:37:24 +00:00
jenkins f229c25b8f [ci skip] Changed by Jenkins: 2195
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 17:32:15 +00:00
jenkins 9bdd1ff35f [ci skip] Changed by Jenkins: 2194
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 17:27:09 +00:00
jenkins 4dd7a15b30 [ci skip] Changed by Jenkins: 2193
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 17:22:59 +00:00
jenkins a4aa7dbb7d [ci skip] Changed by Jenkins: 2192
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 17:17:51 +00:00
jenkins 681d2fe273 [ci skip] Changed by Jenkins: 2191
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 17:12:35 +00:00
peter 87547aafcc Update Jenkinsfile
FarmMaps/FarmMapsLib/pipeline/head There was a failure building this commit
2023-10-20 12:20:24 +00:00
peter 6ab5ba8a56 Update Jenkinsfile.develop 2023-10-20 12:20:13 +00:00
peter 78b7ef44d9 Update Jenkinsfile.develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-10-20 12:20:03 +00:00
peter e19ca94653 Update Jenkinsfile 2023-10-20 12:19:52 +00:00
Willem Dantuma a85378374b kick version
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2023-10-18 19:35:01 +02:00
wilco 9e3f6010c3 Merge branch 'master' into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
# Conflicts:
#	package-lock.json
#	package.json
2023-10-05 16:27:20 +02:00
wilco e6a637b866 AW-5467 - Refresh geeft leeg scherm
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2023-10-05 11:23:18 +02:00
Willem Dantuma ccf77805a0 AW-5495
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-09-11 21:59:34 +02:00
peter 2b2e1bfafa Layout
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-08-25 11:07:21 +02:00
peter 3fd4ac2f94 error TS1068: Unexpected token. A constructor, method, accessor, or property was expected.
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-08-25 09:53:36 +02:00
peter 9849eaf1e7 AW1873 Labels -> show below zoom, overflow + format centroid
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2023-08-25 09:50:38 +02:00
peter b516cc07e2 AW1873Bouwplanlabels
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-08-24 09:05:42 +02:00
peter c9c9a2ddbf AW1873Bouwplanlabels
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-08-23 16:34:18 +02:00
peter 1d0f3b958d AW1873Bouwplanlabels generalize
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-08-23 15:17:38 +02:00
peter 45537cb2e9 ------------------------------------------------------------------------------
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
Building entry point '@farmmaps/common-map'
------------------------------------------------------------------------------
- Compiling with Angular sources in Ivy partial compilation mode.
Processing legacy "View Engine" libraries:
- ngx-openlayers [es2015/esm2015] ()
Encourage the library authors to publish an Ivy distribution.
Browserslist: caniuse-lite is outdated. Please run:
  npx update-browserslist-db@latest
  Why you should do it regularly: https://github.com/browserslist/update-db#readme
✖ Compiling with Angular sources in Ivy partial compilation mode.
projects/common-map/src/fm-map/components/map/map.component.ts:371:83 - error TS2339: Property 'replaceUrl' does not exist on type '{ mapState: IMapState; queryState: IQueryState; }'.

371           this.replaceUrl(newUrlState.mapState,newUrlState.queryState,newUrlState.replaceUrl);
2023-08-22 18:55:16 +02:00
peter 652ddc0cdc AW1873Bouwplanlabels
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2023-08-22 18:45:46 +02:00
peter fd3b331cc0 AW-5419 RxJs => versie 7.x
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2023-08-22 13:37:16 +02:00
peter 9facbe76c8 AW1873Bouwplanlabels
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-08-22 13:16:37 +02:00
peter 20dff38cf7 AW1873 labels -> undefined/null fixes
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-08-21 16:59:54 +02:00
peter e374bb8a73 AW1873 labels
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-08-21 16:28:32 +02:00
peter 294b9c6dd3 kick version
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-08-09 10:17:50 +02:00
peter d92bf54c8d Revert "AW-2924 Cache codelists"
This reverts commit 914e272fc2.
2023-08-09 10:17:32 +02:00
peter 914e272fc2 AW-2924 Cache codelists
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2023-08-07 14:49:04 +02:00
Willem Dantuma b182b7fda6 Change select color
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-08-01 09:18:11 +02:00
Willem Dantuma 22040b43b3 fix selector naam
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-07-31 20:25:29 +02:00
Willem Dantuma 50170cf599 Fix selector name
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-07-31 20:19:47 +02:00
Willem Dantuma 2deff46a7e AW-5365 add selectViewGetExtent
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-07-31 20:07:22 +02:00
Willem Dantuma e939a787ba AW-5365 add tags parameter
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-07-31 19:36:57 +02:00
Willem Dantuma 4ae9562ce1 Kick version
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-07-31 19:22:14 +02:00
Willem Dantuma 288e507e6c AW-5365 add crs parameter
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-07-31 19:14:13 +02:00
peter d9848a8ba3 AW-5371 Release 2023.08 libraries
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
FarmMaps/FarmMapsLib/pipeline/head There was a failure building this commit
2023-07-30 10:53:08 +02:00
peter a9d42484cc jenkins
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2023-07-26 17:52:01 +02:00
peter a276593c7f Merge branch 'develop' 2023-07-26 17:45:32 +02:00
peter ff50650c28 fix jenkins
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-06-27 16:30:49 +02:00
peter d7efeb8d59 fix build
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-06-27 16:27:18 +02:00
peter fd71d1f38e no message
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-06-27 16:02:52 +02:00
peter bc8c9f8bf9 no message
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2023-06-27 15:56:17 +02:00
mark 0865ca1a93 upped version
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-05-30 21:16:53 +02:00
mark 1bc3983f55 AW-5071 refactor some parts 2023-05-30 21:16:20 +02:00
peter 945d88839f AW-5036 404../api/v1/items/xxx:USER_SETTINGS (new environ)
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-05-08 09:12:37 +02:00
peter 7c06343909 Aw4951 Non-fatal error if no viewer defined for itemtype
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-04-21 09:08:38 +02:00
peter b8f8f27794 Comment logging
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-04-11 11:33:11 +02:00
peter 2a31771ac6 v3.1.0
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-03-28 13:38:35 +02:00
peter 3f17341b2e Revert "++version"
FarmMaps/FarmMapsLib/pipeline/head There was a failure building this commit
This reverts commit 6165f523cc.
2023-03-28 13:37:50 +02:00
peter 6165f523cc ++version
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2023-03-28 13:30:16 +02:00
peter 19dce51a28 Removed logging
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-03-28 13:26:37 +02:00
peter b29cd8e4c9 AW-4929 Add agrirouter font
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2023-03-28 12:20:27 +02:00
214 changed files with 22011 additions and 11267 deletions
+1
View File
@@ -51,4 +51,5 @@ projects/common-map/node_modules/
.angular/* .angular/*
projects/common-map3d/node_modules/ projects/common-map3d/node_modules/
projects/common-map/node_modules/ projects/common-map/node_modules/
projects/ng-openlayers/node_modules/
projects/common/node_modules/ projects/common/node_modules/
Vendored
+12 -42
View File
@@ -1,54 +1,24 @@
@Library('farmmaps-shared-library') _
pipeline { pipeline {
agent any agent any;
environment { options {
PACKAGE_VERSION_PREFIX=sh(script: 'jq .version package.json |sed "s/\\"//g"', returnStdout: true).trim() copyArtifactPermission projectNames: env.allProjectsArtifactPermission;
PACKAGE_VERSION="${PACKAGE_VERSION_PREFIX}" disableConcurrentBuilds();
} }
stages { stages {
stage('npm install'){ stage('FarmmapsLibBuildAll') {
steps { steps {
sh '''rm -rf node_modules/ stepFarmmapsLibBuildAll();
npm install --legacy-peer-deps
cd projects/common
npm install --legacy-peer-deps
cd ../common-map
npm install --legacy-peer-deps
cd ../common-map3d
npm install --legacy-peer-deps
'''
} }
} }
stage('build'){
steps {
sh '''ng build common --configuration production
ng build common-map --configuration production
ng build common-map3d --configuration production'''
}
}
stage('npm publish'){
steps {
sh '''cd dist/common
npm version ${PACKAGE_VERSION} --allow-same-version
npm publish
cd ../common-map
npm version ${PACKAGE_VERSION} --allow-same-version
npm publish
cd ../common-map3d
npm version ${PACKAGE_VERSION} --allow-same-version
npm publish'''
}
}
} }
post { post {
success {
postSuccess();
}
always { always {
emailext ( postAlways();
body: '${DEFAULT_CONTENT}',
mimeType: 'text/html',
replyTo: '${DEFAULT_REPLYTO}',
subject: '${DEFAULT_SUBJECT}',
to: emailextrecipients([[$class: 'CulpritsRecipientProvider'], [$class: 'RequesterRecipientProvider']])
)
} }
} }
} }
+12 -42
View File
@@ -1,54 +1,24 @@
@Library('farmmaps-shared-library') _
pipeline { pipeline {
agent any agent any;
environment { options {
PACKAGE_VERSION_PREFIX=sh(script: 'jq .version package.json |sed "s/\\"//g"', returnStdout: true).trim() copyArtifactPermission projectNames: env.allProjectsArtifactPermission;
PACKAGE_VERSION="${PACKAGE_VERSION_PREFIX + '-prerelease.' + env.BUILD_NUMBER}" disableConcurrentBuilds();
} }
stages { stages {
stage('npm install'){ stage('FarmmapsLibBuildAll') {
steps { steps {
sh '''rm -rf node_modules/ stepFarmmapsLibBuildAll();
npm install --legacy-peer-deps
cd projects/common
npm install --legacy-peer-deps
cd ../common-map
npm install --legacy-peer-deps
cd ../common-map3d
npm install --legacy-peer-deps
'''
} }
} }
stage('build'){
steps {
sh '''ng build common --configuration production
ng build common-map --configuration production
ng build common-map3d --configuration production'''
}
}
stage('npm publish'){
steps {
sh '''cd dist/common
npm version ${PACKAGE_VERSION}
npm publish
cd ../common-map
npm version ${PACKAGE_VERSION}
npm publish
cd ../common-map3d
npm version ${PACKAGE_VERSION}
npm publish'''
}
}
} }
post { post {
success {
postSuccess();
}
always { always {
emailext ( postAlways();
body: '${DEFAULT_CONTENT}',
mimeType: 'text/html',
replyTo: '${DEFAULT_REPLYTO}',
subject: '${DEFAULT_SUBJECT}',
to: emailextrecipients([[$class: 'CulpritsRecipientProvider'], [$class: 'RequesterRecipientProvider']])
)
} }
} }
} }
+1 -2
View File
@@ -2,7 +2,6 @@
This is a sample FarmMaps client in Angular 7.x. This is a sample FarmMaps client in Angular 7.x.
## Quick start ## Quick start
Use one of the two options below to get started. Use one of the two options below to get started.
@@ -51,7 +50,7 @@ npm install -g @angular/cli
npm install npm install
ng serve ng serve
``` ```
*Go* *Go*`
Point your browser to http://localhost:4200 Point your browser to http://localhost:4200
+40 -3
View File
@@ -209,13 +209,13 @@
"options": { "options": {
"tsConfig": "projects/common-map/tsconfig.lib.json", "tsConfig": "projects/common-map/tsconfig.lib.json",
"project": "projects/common-map/ng-package.json" "project": "projects/common-map/ng-package.json"
} },
, "configurations": { "configurations": {
"production": { "production": {
"tsConfig": "projects/common-map/tsconfig.lib.prod.json" "tsConfig": "projects/common-map/tsconfig.lib.prod.json"
} }
} }
}, },
"test": { "test": {
"builder": "@angular-devkit/build-angular:karma", "builder": "@angular-devkit/build-angular:karma",
"options": { "options": {
@@ -253,6 +253,43 @@
} }
} }
} }
},
"ng-openlayers": {
"projectType": "library",
"root": "projects/ng-openlayers",
"sourceRoot": "projects/ng-openlayers/src",
"prefix": "ng-openlayers",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:ng-packagr",
"options": {
"tsConfig": "projects/ng-openlayers/tsconfig.lib.json",
"project": "projects/ng-openlayers/ng-package.json"
},
"configurations": {
"production": {
"tsConfig": "projects/ng-openlayers/tsconfig.lib.prod.json"
}
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "projects/ng-openlayers/src/test.ts",
"tsConfig": "projects/ng-openlayers/tsconfig.spec.json",
"karmaConfig": "projects/ng-openlayers/karma.conf.js"
}
},
"lint": {
"builder": "@angular-eslint/builder:lint",
"options": {
"lintFilePatterns": [
"projects/ng-openlayers/**/*.ts",
"projects/ng-openlayers/**/*.html"
]
}
}
}
} }
}, },
"cli": { "cli": {
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
+11 -1
View File
@@ -51,7 +51,17 @@
content: "i"; content: "i";
} }
hallo .fm-carbon:before {
content: "j";
}
.fm-bo-akkerbouw:before {
content: "k";
}
.fm-grass:before {
content: "l";
}
@font-face { @font-face {
font-family: "FarmMaps"; font-family: "FarmMaps";
+11883 -10280
View File
File diff suppressed because it is too large Load Diff
+43 -39
View File
@@ -1,6 +1,6 @@
{ {
"name": "farmmaps-lib-app", "name": "farmmaps-lib-app",
"version": "3.0.2", "version": "4.10.0",
"scripts": { "scripts": {
"ng": "ng", "ng": "ng",
"start": "ng serve", "start": "ng serve",
@@ -11,66 +11,70 @@
}, },
"private": true, "private": true,
"dependencies": { "dependencies": {
"@angular/animations": "^14.1.3", "@angular-eslint/eslint-plugin": "^18.2.0",
"@angular/common": "^14.1.3", "@angular/animations": "^18.2.3",
"@angular/compiler": "^14.1.3", "@angular/common": "^18.2.3",
"@angular/core": "^14.1.3", "@angular/compiler": "^18.2.3",
"@angular-eslint/eslint-plugin": "^15.2.1", "@angular/core": "^18.2.3",
"@angular/forms": "^14.1.3", "@angular/forms": "^18.2.3",
"@angular/platform-browser": "^14.1.3", "@angular/platform-browser": "^18.2.3",
"@angular/platform-browser-dynamic": "^14.1.3", "@angular/platform-browser-dynamic": "^18.2.3",
"@angular/router": "^14.1.3", "@angular/router": "^18.2.3",
"@farmmaps/common": "file:dist/common", "@farmmaps/common": "file:dist/common",
"@farmmaps/common-map": "file:dist/common-map", "@farmmaps/common-map": "file:dist/common-map",
"@farmmaps/common-map3d": "file:dist/common-map3d", "@farmmaps/common-map3d": "file:dist/common-map3d",
"@farmmaps/ng-openlayers": "file:dist/ng-openlayers",
"@microsoft/signalr": "^3.1.16", "@microsoft/signalr": "^3.1.16",
"@ng-bootstrap/ng-bootstrap": "^13.0.0", "@ng-bootstrap/ng-bootstrap": "^17.0.1",
"@ngrx/effects": "^14", "@ngrx/effects": "^18.0.2",
"@ngrx/router-store": "^14", "@ngrx/router-store": "^18.0.2",
"@ngrx/store": "^14", "@ngrx/store": "^18.0.2",
"@popperjs/core": "^2.11.6", "@popperjs/core": "^2.11.8",
"angular-oauth2-oidc": "^13", "angular-oauth2-oidc": "^17.0.2",
"assert": "^2.0.0", "assert": "^2.0.0",
"bootstrap": "^5.2.0", "bootstrap": "^5.3.3",
"browserify-zlib": "^0.2.0", "browserify-zlib": "^0.2.0",
"buffer": "^6.0.3", "buffer": "^6.0.3",
"cesium": "^1.97.0", "cesium": "^1.97.0",
"core-js": "^2.6.12", "core-js": "^2.6.12",
"https-browserify": "^1.0.0", "https-browserify": "^1.0.0",
"moment": "^2.29.4", "moment": "^2.29.4",
"ngrx-store-localstorage": "^14", "ngrx-store-localstorage": "^18.0.0",
"ngx-avatar": "^4.1.0", "ngx-avatars": "^1.8.0",
"ngx-clipboard": "^14.0.1", "ngx-clipboard": "^16.0.0",
"ngx-image-cropper": "^3.3.5", "ngx-image-cropper": "^7.0.0",
"ngx-openlayers": "1.0.0-next.19", "ngx-uploadx": "^6.2.0",
"ngx-uploadx": "^5.2.0", "ol": "^8.2.0",
"ol": "6.14.1",
"olcs": "^2.13.1", "olcs": "^2.13.1",
"resumablejs": "^1.1.0", "resumablejs": "^1.1.0",
"rxjs": "^6.6.7", "rxjs": "^7.8.1",
"stream": "^0.0.2", "stream": "^0.0.2",
"stream-http": "^3.2.0", "stream-http": "^3.2.0",
"tassign": "^1.0.0", "tassign": "^1.0.0",
"tslib": "^2.4.0", "tslib": "^2.4.0",
"url": "^0.11.0", "url": "^0.11.0",
"util": "^0.12.4", "util": "^0.12.4",
"zone.js": "~0.11.4" "zone.js": "~0.14.10"
},
"optionalDependencies": {
"@lmdb/lmdb-linux-x64": "^3.1.0",
"@rollup/rollup-linux-x64-gnu": "^4.21.2"
}, },
"devDependencies": { "devDependencies": {
"@angular-builders/custom-webpack": "^14", "@angular-builders/custom-webpack": "^18.0.0",
"@angular-devkit/build-angular": "^14.1.3", "@angular-devkit/build-angular": "^18.2.3",
"@angular/cli": "^14.1.3", "@angular/cli": "^18.2.3",
"@angular/compiler-cli": "^14.1.3", "@angular/compiler-cli": "^18.2.3",
"@angular/language-service": "^14.1.3", "@angular/language-service": "^18.2.3",
"@angular/localize": "^14.1.3", "@angular/localize": "^18.2.3",
"@types/arcgis-rest-api": "^10.4.5", "@types/arcgis-rest-api": "^10.4.5",
"@types/jasmine": "~2.8.8", "@types/jasmine": "~2.8.8",
"@types/jasminewd2": "^2.0.9", "@types/jasminewd2": "^2.0.9",
"@types/node": "^12.20.15", "@types/node": "^22.5.4",
"@typescript-eslint/eslint-plugin": "^5.54.0", "@typescript-eslint/eslint-plugin": "^6.18.0",
"@typescript-eslint/eslint-plugin-tslint": "^5.54.0", "@typescript-eslint/eslint-plugin-tslint": "^6.18.0",
"@typescript-eslint/parser": "^5.54.0", "@typescript-eslint/parser": "^6.18.0",
"codelyzer": "^0.0.28", "codelyzer": "^6.0.2",
"eslint": "^8.35.0", "eslint": "^8.35.0",
"eslint-config-prettier": "^8.6.0", "eslint-config-prettier": "^8.6.0",
"eslint-plugin-import": "^2.27.5", "eslint-plugin-import": "^2.27.5",
@@ -81,9 +85,9 @@
"karma-coverage-istanbul-reporter": "^3.0.3", "karma-coverage-istanbul-reporter": "^3.0.3",
"karma-jasmine": "^5.1.0", "karma-jasmine": "^5.1.0",
"karma-jasmine-html-reporter": "^2.0.0", "karma-jasmine-html-reporter": "^2.0.0",
"ng-packagr": "^14.1.0", "ng-packagr": "^18.2.1",
"protractor": "~7.0.0", "protractor": "~7.0.0",
"ts-node": "^8.8.1", "ts-node": "^8.8.1",
"typescript": "~4.6.4" "typescript": "~5.4.4"
} }
} }
+198 -11
View File
@@ -11,20 +11,207 @@
"tslib": "^2.0.0" "tslib": "^2.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/core": ">=14.0.0", "@angular/core": "^18.2.3",
"@ngrx/effects": ">=14.0.0", "@ngrx/effects": "^18.0.2",
"@ngrx/router-store": ">=14.0.0", "@ngrx/router-store": "^18.0.2",
"@ngrx/store": ">=14.0.0", "@ngrx/store": "^18.0.2",
"ngrx-store-localstorage": ">=14.0.0", "ngrx-store-localstorage": "^18",
"ngx-openlayers": ">=1.0.0-next.19", "tassign": "^1.0.0"
"ol": ">=6.8.1",
"tassign": ">=1.0.0"
} }
}, },
"../../dist/libs/ng-openlayers": {
"version": "18.0.0",
"extraneous": true,
"license": "MPL-2.0",
"dependencies": {
"tslib": "^2.3.0"
},
"peerDependencies": {
"@angular/common": "^18.2.3",
"@angular/core": "^18.2.3",
"ol": "^8.2.0"
}
},
"dist/ng-openlayers": {
"extraneous": true
},
"node_modules/@angular/common": {
"version": "18.2.3",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.3.tgz",
"integrity": "sha512-NFL4yXXImSCH7i1xnHykUjHa9vl9827fGiwSV2mnf7LjSUsyDzFD8/54dNuYN9OY8AUD+PnK0YdNro6cczVyIA==",
"peer": true,
"dependencies": {
"tslib": "^2.3.0"
},
"engines": {
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"@angular/core": "18.2.3",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/core": {
"version": "18.2.3",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.3.tgz",
"integrity": "sha512-VGhMJxj7d0rYpqVfQrcGRB7EE/BCziotft/I/YPl6bOMPSAvMukG7DXQuJdYpNrr62ks78mlzHlZX/cdmB9Prw==",
"peer": true,
"dependencies": {
"tslib": "^2.3.0"
},
"engines": {
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"rxjs": "^6.5.3 || ^7.4.0",
"zone.js": "~0.14.10"
}
},
"node_modules/@angular/platform-browser": {
"version": "18.2.3",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.3.tgz",
"integrity": "sha512-M2ob4zN7tAcL2mx7U6KnZNqNFPFl9MlPBE0FrjQjIzAjU0wSYPIJXmaPu9aMUp9niyo+He5iX98I+URi2Yc99g==",
"peer": true,
"dependencies": {
"tslib": "^2.3.0"
},
"engines": {
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"@angular/animations": "18.2.3",
"@angular/common": "18.2.3",
"@angular/core": "18.2.3"
},
"peerDependenciesMeta": {
"@angular/animations": {
"optional": true
}
}
},
"node_modules/@angular/router": {
"version": "18.2.3",
"resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.3.tgz",
"integrity": "sha512-fvD9eSDIiIbeYoUokoWkXzu7/ZaxlzKPUHFqX1JuKuH5ciQDeT/d7lp4mj31Bxammhohzi3+z12THJYsCkj/iQ==",
"peer": true,
"dependencies": {
"tslib": "^2.3.0"
},
"engines": {
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"@angular/common": "18.2.3",
"@angular/core": "18.2.3",
"@angular/platform-browser": "18.2.3",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@ngrx/effects": {
"version": "18.0.2",
"resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-18.0.2.tgz",
"integrity": "sha512-YojXcOD9Lsq4kl2HCjENccyUM/mOlgBdtddsg9j/ojzSUgu3ZuBVKLN3atrL2TJYkbMX1MN0RzafSkL3TPGFIA==",
"peer": true,
"dependencies": {
"@ngrx/operators": "18.0.1",
"tslib": "^2.0.0"
},
"peerDependencies": {
"@angular/core": "^18.0.0",
"@ngrx/store": "18.0.2",
"rxjs": "^6.5.3 || ^7.5.0"
}
},
"node_modules/@ngrx/operators": {
"version": "18.0.1",
"resolved": "https://registry.npmjs.org/@ngrx/operators/-/operators-18.0.1.tgz",
"integrity": "sha512-M+QMrHNKgcuiLaRGZxJ4aQi5/OCRfKC4+T/63dsHyLFZ53/FFpF6a/ytSO1Q+tzOplZ5o99S+i8FVaZqNQ3LmQ==",
"peer": true,
"dependencies": {
"tslib": "^2.3.0"
},
"peerDependencies": {
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@ngrx/router-store": {
"version": "18.0.2",
"resolved": "https://registry.npmjs.org/@ngrx/router-store/-/router-store-18.0.2.tgz",
"integrity": "sha512-jUrQ/uJJ53x8O1XbN2YxH2GpRREZlwS5gRxlCoc4fWL4Us/uS1/K6+QfRmKBPtpTKBIixqsOb+dIUV5iwBrivA==",
"peer": true,
"dependencies": {
"tslib": "^2.0.0"
},
"peerDependencies": {
"@angular/common": "^18.0.0",
"@angular/core": "^18.0.0",
"@angular/router": "^18.0.0",
"@ngrx/store": "18.0.2",
"rxjs": "^6.5.3 || ^7.5.0"
}
},
"node_modules/@ngrx/store": {
"version": "18.0.2",
"resolved": "https://registry.npmjs.org/@ngrx/store/-/store-18.0.2.tgz",
"integrity": "sha512-ajwv0+njsO4vzArp9esnFvs1wyUb1U1W8E8LSCKrcW2hWWo9o1Pezj+JRsdQwatxHfrrPFuTDyajsl6GQM/JSA==",
"peer": true,
"dependencies": {
"tslib": "^2.0.0"
},
"peerDependencies": {
"@angular/core": "^18.0.0",
"rxjs": "^6.5.3 || ^7.5.0"
}
},
"node_modules/deepmerge": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
"integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
"peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/ngrx-store-localstorage": {
"version": "18.0.0",
"resolved": "https://registry.npmjs.org/ngrx-store-localstorage/-/ngrx-store-localstorage-18.0.0.tgz",
"integrity": "sha512-WoDePvMWiWF9LQHe+dTqbpm8lxoKCPoIvA0/1enIPTmdLQsOpdDKhMSD5YgwuqDusNfEik3QslProTFGyXZwtw==",
"peer": true,
"dependencies": {
"deepmerge": "^4.2.2",
"tslib": "^2.3.0"
},
"peerDependencies": {
"@angular/common": "^18.0.1",
"@angular/core": "^18.0.1",
"@ngrx/store": "^18.0.0"
}
},
"node_modules/rxjs": {
"version": "7.8.1",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
"integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
"peer": true,
"dependencies": {
"tslib": "^2.1.0"
}
},
"node_modules/tassign": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/tassign/-/tassign-1.0.0.tgz",
"integrity": "sha512-k0Ti9f+A1R0BRdArEbiUHldd+A40kZ5qsiNSNk4czx61wkAoSZYjqkaQs0jC63AfgPdCXVPstDq2ZW5ZLRTCgw==",
"peer": true
},
"node_modules/tslib": { "node_modules/tslib": {
"version": "2.0.1", "version": "2.7.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
"integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==" "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA=="
},
"node_modules/zone.js": {
"version": "0.14.10",
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.10.tgz",
"integrity": "sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ==",
"peer": true
} }
} }
} }
+6 -8
View File
@@ -8,13 +8,11 @@
"tslib": "^2.0.0" "tslib": "^2.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/core": ">=14.0.0", "@angular/core": "^18.2.3",
"ngrx-store-localstorage": ">=14.0.0", "ngrx-store-localstorage": "^18.0.0",
"@ngrx/effects": ">=14.0.0", "@ngrx/effects": "^18.0.2",
"@ngrx/router-store":">=14.0.0", "@ngrx/router-store": "^18.0.2",
"@ngrx/store":">=14.0.0", "@ngrx/store": "^18.0.2",
"tassign": ">=1.0.0", "tassign": "^1.0.0"
"ngx-openlayers": ">=1.0.0-next.19",
"ol": ">=6.8.1"
} }
} }
@@ -18,6 +18,7 @@ export const SETPARENT = '[Map] SetParent';
export const SETPERIOD = '[Map] SetPeriod'; export const SETPERIOD = '[Map] SetPeriod';
export const STARTSEARCH = '[Map] StartSearch'; export const STARTSEARCH = '[Map] StartSearch';
export const STARTSEARCHSUCCESS = '[Map] StartSearchSuccess'; export const STARTSEARCHSUCCESS = '[Map] StartSearchSuccess';
export const CLICKFEATURE = '[Map] ClickFeature';
export const SELECTFEATURE = '[Map] SelectFeature'; export const SELECTFEATURE = '[Map] SelectFeature';
export const SELECTITEM = '[Map] SelectItem'; export const SELECTITEM = '[Map] SelectItem';
export const SELECTITEMSUCCESS = '[Map] SelectItemSuccess'; export const SELECTITEMSUCCESS = '[Map] SelectItemSuccess';
@@ -56,7 +57,8 @@ export const GETLAYERVALUE = '[Map] GetLayerValue'
export const GETLAYERVALUESUCCESS = '[Map] GetLayerValueSuccess' export const GETLAYERVALUESUCCESS = '[Map] GetLayerValueSuccess'
export const TOGGLESHOWDATALAYERSLIDE = '[Map] ToggleShowDataLayerSlide' export const TOGGLESHOWDATALAYERSLIDE = '[Map] ToggleShowDataLayerSlide'
export const SETVIEWSTATE = '[Map] SetViewState' export const SETVIEWSTATE = '[Map] SetViewState'
export const CLEARFEATURES = '[Map] ClearFeatures';
export const SETPANELEXTRAWIDE = '[Map] SetPanelExtraWide';
export class Clear implements Action { export class Clear implements Action {
readonly type = CLEAR; readonly type = CLEAR;
@@ -111,6 +113,12 @@ export class StartSearchSuccess implements Action {
constructor(public features: Array<Feature<Geometry>>, public query:IQueryState) { } constructor(public features: Array<Feature<Geometry>>, public query:IQueryState) { }
} }
export class ClickFeature implements Action {
readonly type = CLICKFEATURE;
constructor(public feature:Feature<Geometry>) { }
}
export class SelectFeature implements Action { export class SelectFeature implements Action {
readonly type = SELECTFEATURE; readonly type = SELECTFEATURE;
@@ -329,12 +337,23 @@ export class SetViewState implements Action {
constructor(public enabled:boolean) {} constructor(public enabled:boolean) {}
} }
export class ClearFeatures implements Action {
readonly type = CLEARFEATURES;
constructor() {}
}
export class SetPanelExtraWide implements Action {
readonly type = SETPANELEXTRAWIDE;
constructor(public panelExtraWide:boolean) {}
}
export type Actions = SetMapState export type Actions = SetMapState
| Init | Init
| Clear | Clear
| SetParent | SetParent
| StartSearch | StartSearch
| StartSearchSuccess | StartSearchSuccess
| ClickFeature
| SelectFeature | SelectFeature
| SelectItem | SelectItem
| SelectItemSuccess | SelectItemSuccess
@@ -374,5 +393,7 @@ export type Actions = SetMapState
| GetLayerValue | GetLayerValue
| SetPeriod | SetPeriod
| ToggleShowDataLayerSlide | ToggleShowDataLayerSlide
| SetViewState; | SetViewState
| ClearFeatures
| SetPanelExtraWide;
@@ -1,78 +1,78 @@
import { NgModule ,ModuleWithProviders} from '@angular/core';
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { FormsModule, ReactiveFormsModule } from '@angular/forms';
//external modules //external modules
import { AngularOpenlayersModule } from 'ngx-openlayers';
import { StoreModule, ActionReducer, MetaReducer } from '@ngrx/store';
import { EffectsModule } from '@ngrx/effects';
import { NgbModule } from "@ng-bootstrap/ng-bootstrap"; import { NgbModule } from "@ng-bootstrap/ng-bootstrap";
import { EffectsModule } from '@ngrx/effects';
import { ActionReducer, MetaReducer, StoreModule } from '@ngrx/store';
import { AngularOpenlayersModule } from '@farmmaps/ng-openlayers';
//common modules //common modules
import { AppCommonModule } from '@farmmaps/common'; import { AppCommonModule } from '@farmmaps/common';
import { MODULE_NAME } from './module-name';
import * as mapReducers from './reducers/map.reducer';
import * as mapActions from './actions/map.actions'; import * as mapActions from './actions/map.actions';
import * as mapEffects from './effects/map.effects'; import * as mapEffects from './effects/map.effects';
import { MODULE_NAME } from './module-name';
import * as mapReducers from './reducers/map.reducer';
import { IMapState} from './models/map.state';
import { ISelectedFeatures } from './models/selected.features';
import { IItemLayer,ItemLayer,ITemporalItemLayer,TemporalItemLayer } from './models/item.layer';
import { IClickedFeature } from './models/clicked.feature'; import { IClickedFeature } from './models/clicked.feature';
import { IItemLayer, ItemLayer, ITemporalItemLayer, TemporalItemLayer } from './models/item.layer';
import { IMapState } from './models/map.state';
import { IPeriodState } from './models/period.state'; import { IPeriodState } from './models/period.state';
import { ISelectedFeatures } from './models/selected.features';
// components // components
import { GpsLocation} from './components/aol/gps-location/gps-location.component'; import { MapRoutingModule } from './common-map-routing.module';
import {FeatureListFeatureCropfieldComponent } from './components/feature-list-feature-cropfield/feature-list-feature-cropfield.component';
import { FeatureListFeatureCroppingschemeComponent} from './components/feature-list-feature-croppingscheme/feature-list-feature-croppingscheme.component';
import { ItemWidgetListComponent} from './components/item-widget-list/item-widget-list.component';
import { AbstractItemListItemComponent, ItemListItemComponent, AbstractItemWidgetComponent } from './components/item-list-item/item-list-item.component';
import { ItemListItemContainerComponent } from './components/item-list-item-container/item-list-item-container.component';
import { AbstractItemListComponent,ItemListComponent} from './components/item-list/item-list.component';
import { AbstractSelectedItemComponent, SelectedItemComponent } from './components/selected-item/selected-item.component';
import { SelectedItemCropfieldComponent } from './components/selected-item-cropfield/selected-item-cropfield.component';
import { SelectedItemGeotiffComponent } from './components/selected-item-geotiff/selected-item-geotiff.component';
import { SelectedItemTemporalComponent} from './components/selected-item-temporal/selected-item-temporal.component';
import {SelectedItemShapeComponent } from './components/selected-item-shape/selected-item-shape.component';
import { SelectedItemContainerComponent } from './components/selected-item-container/selected-item-container.component';
import { AbstractFeatureListFeatureComponent, FeatureListFeatureComponent } from './components/feature-list-feature/feature-list-feature.component';
import {FeatureListFeatureContainerComponent } from './components/feature-list-feature-container/feature-list-feature-container.component';
import { FeatureListCroppingschemeComponent } from './components/feature-list-croppingscheme/feature-list-croppingscheme.component';
import {FeatureListCropfieldComponent } from './components/feature-list-cropfield/feature-list-cropfield.component';
import {FeatureListContainerComponent } from './components/feature-list-container/feature-list-container.component';
import { WidgetHostDirective} from './components/widget-host/widget-host.directive';
import { FeatureListComponent,AbstractFeatureListComponent} from './components/feature-list/feature-list.component';
import { FileDropTargetComponent } from './components/aol/file-drop-target/file-drop-target.component'; import { FileDropTargetComponent } from './components/aol/file-drop-target/file-drop-target.component';
import { ItemVectorSourceComponent } from './components/aol/item-vector-source/item-vector-source.component'; import { GpsLocation } from './components/aol/gps-location/gps-location.component';
import { ItemLayersComponent } from './components/aol/item-layers/item-layers.component'; import { ItemLayersComponent } from './components/aol/item-layers/item-layers.component';
import { ZoomToExtentComponent } from './components/aol/zoom-to-extent/zoom-to-extent.component'; import { ItemVectorSourceComponent } from './components/aol/item-vector-source/item-vector-source.component';
import { RotationResetComponent } from './components/aol/rotation-reset/rotation-reset.component';
import { LayerListComponent } from './components/aol/layer-list/layer-list.component'; import { LayerListComponent } from './components/aol/layer-list/layer-list.component';
import { LayerValuesComponent } from './components/aol/layer-values/layer-values.component';
import { LayerVectorImageComponent } from './components/aol/layer-vector-image/layer-vector-image.component';
import { PanToLocation } from './components/aol/pan-to-location/pan-to-location.component';
import { RotationResetComponent } from './components/aol/rotation-reset/rotation-reset.component';
import { ZoomToExtentComponent } from './components/aol/zoom-to-extent/zoom-to-extent.component';
import { FeatureListContainerComponent } from './components/feature-list-container/feature-list-container.component';
import { FeatureListCropfieldComponent } from './components/feature-list-cropfield/feature-list-cropfield.component';
import { FeatureListCroppingschemeComponent } from './components/feature-list-croppingscheme/feature-list-croppingscheme.component';
import { FeatureListFeatureContainerComponent } from './components/feature-list-feature-container/feature-list-feature-container.component';
import { FeatureListFeatureCropfieldComponent } from './components/feature-list-feature-cropfield/feature-list-feature-cropfield.component';
import { FeatureListFeatureCroppingschemeComponent } from './components/feature-list-feature-croppingscheme/feature-list-feature-croppingscheme.component';
import { AbstractFeatureListFeatureComponent, FeatureListFeatureComponent } from './components/feature-list-feature/feature-list-feature.component';
import { AbstractFeatureListComponent, FeatureListComponent } from './components/feature-list/feature-list.component';
import { GeometryThumbnailComponent } from './components/feature-thumbnail/feature-thumbnail.component';
import { ForChild } from './components/for-item/for-child.decorator';
import { ForItemType } from './components/for-item/for-itemtype.decorator';
import { ForPackage } from './components/for-item/for-package.decorator';
import { ForSourceTask } from './components/for-item/for-sourcetask.decorator';
import { ifZoomToShowDirective } from './components/if-zoom-to-show/if-zoom-to-show.directive';
import { ItemListItemContainerComponent } from './components/item-list-item-container/item-list-item-container.component';
import { AbstractItemListItemComponent, AbstractItemWidgetComponent, ItemListItemComponent } from './components/item-list-item/item-list-item.component';
import { AbstractItemListComponent, ItemListComponent } from './components/item-list/item-list.component';
import { ItemWidgetListComponent } from './components/item-widget-list/item-widget-list.component';
import { LayerSwitcher } from './components/layer-switcher/layer-switcher.component';
import { HistogramDetailsComponent } from './components/legend/histogram-details/histogram-details.component';
import { LegendComponent } from './components/legend/legend.component';
import { StatisticsDetailsComponent } from './components/legend/statistics-details/statistics-details.component';
import { MapSearchComponent } from './components/map-search/map-search.component';
import { MapComponent } from './components/map/map.component';
import { MetaDataModalComponent } from './components/meta-data-modal/meta-data-modal.component'; import { MetaDataModalComponent } from './components/meta-data-modal/meta-data-modal.component';
import { SelectPeriodModalComponent } from './components/select-period-modal/select-period-modal.component'; import { SelectPeriodModalComponent } from './components/select-period-modal/select-period-modal.component';
import { MapComponent } from './components/map/map.component'; import { SelectedItemContainerComponent } from './components/selected-item-container/selected-item-container.component';
import { MapSearchComponent } from './components/map-search/map-search.component'; import { SelectedItemCropfieldComponent } from './components/selected-item-cropfield/selected-item-cropfield.component';
import { MapRoutingModule } from './common-map-routing.module'; import { SelectedItemGeotiffComponent } from './components/selected-item-geotiff/selected-item-geotiff.component';
import { LegendComponent } from './components/legend/legend.component'; import { SelectedItemShapeComponent } from './components/selected-item-shape/selected-item-shape.component';
import { LayerVectorImageComponent } from './components/aol/layer-vector-image/layer-vector-image.component'; import { SelectedItemTemporalComponent } from './components/selected-item-temporal/selected-item-temporal.component';
import {FeatureIconService} from './services/feature-icon.service'; import { AbstractSelectedItemComponent, SelectedItemComponent } from './components/selected-item/selected-item.component';
import { GeolocationService } from './services/geolocation.service'; import { WidgetHostDirective } from './components/widget-host/widget-host.directive';
import {DeviceOrientationService} from './services/device-orientation.service';
import { TemporalService} from './services/temporal.service';
import { WidgetStatusComponent } from './components/widget-status/widget-status.component'; import { WidgetStatusComponent } from './components/widget-status/widget-status.component';
import { ForChild} from './components/for-item/for-child.decorator'; import { ZoomToShowAlert } from './components/zoom-to-show-alert/zoom-to-show-alert.component';
import {ForItemType } from './components/for-item/for-itemtype.decorator'; import { DeviceOrientationService } from './services/device-orientation.service';
import { ForSourceTask} from './components/for-item/for-sourcetask.decorator'; import { FeatureIconService } from './services/feature-icon.service';
import { ForPackage } from './components/for-item/for-package.decorator'; import { GeolocationService } from './services/geolocation.service';
import { PanToLocation} from './components/aol/pan-to-location/pan-to-location.component'; import { TemporalService } from './services/temporal.service';
import {LayerSwitcher} from './components/layer-switcher/layer-switcher.component';
import {HistogramDetailsComponent} from './components/legend/histogram-details/histogram-details.component';
import {StatisticsDetailsComponent} from './components/legend/statistics-details/statistics-details.component';
import { ifZoomToShowDirective} from './components/if-zoom-to-show/if-zoom-to-show.directive';
import { ZoomToShowAlert} from './components/zoom-to-show-alert/zoom-to-show-alert.component';
import { LayerValuesComponent } from './components/aol/layer-values/layer-values.component';
import { GeometryThumbnailComponent } from './components/feature-thumbnail/feature-thumbnail.component';
export function LocalStorageSync(reducer: ActionReducer<any>): ActionReducer<any> { export function LocalStorageSync(reducer: ActionReducer<any>): ActionReducer<any> {
const r = function(state, action) { const r = function(state, action) {
@@ -104,70 +104,13 @@ export function LocalStorageSync(reducer: ActionReducer<any>): ActionReducer<any
const metaReducers: Array<MetaReducer<any, any>> = [LocalStorageSync]; const metaReducers: Array<MetaReducer<any, any>> = [LocalStorageSync];
export { export {
mapEffects,
mapReducers,
mapActions,
ZoomToExtentComponent,
ItemVectorSourceComponent,
ItemLayersComponent,
FileDropTargetComponent,
MapComponent,
MetaDataModalComponent,
RotationResetComponent,
MapSearchComponent,
SelectPeriodModalComponent,
LayerListComponent,
LegendComponent,
LayerVectorImageComponent,
FeatureListComponent,
WidgetHostDirective,
FeatureListContainerComponent,
FeatureListCroppingschemeComponent,
FeatureListCropfieldComponent,
FeatureListFeatureContainerComponent,
FeatureListFeatureComponent,
FeatureListFeatureCroppingschemeComponent,
FeatureListFeatureCropfieldComponent,
SelectedItemContainerComponent,
SelectedItemComponent,
SelectedItemCropfieldComponent,
SelectedItemGeotiffComponent,
SelectedItemTemporalComponent,
SelectedItemShapeComponent,
ItemListItemComponent,
ItemListItemContainerComponent,
ItemListComponent,
ItemWidgetListComponent,
WidgetStatusComponent,
GpsLocation,
PanToLocation,
LayerSwitcher,
AbstractFeatureListComponent, AbstractFeatureListComponent,
AbstractFeatureListFeatureComponent, AbstractFeatureListFeatureComponent, AbstractItemListComponent, AbstractItemListItemComponent, AbstractItemWidgetComponent, AbstractSelectedItemComponent, DeviceOrientationService, FeatureIconService, FeatureListComponent, FeatureListContainerComponent, FeatureListCropfieldComponent, FeatureListCroppingschemeComponent, FeatureListFeatureComponent, FeatureListFeatureContainerComponent, FeatureListFeatureCropfieldComponent, FeatureListFeatureCroppingschemeComponent, FileDropTargetComponent, ForChild,
AbstractSelectedItemComponent, ForItemType, ForPackage, ForSourceTask, GeolocationService, GeometryThumbnailComponent, GpsLocation, IClickedFeature, ifZoomToShowDirective, IItemLayer, IMapState, IPeriodState, ISelectedFeatures, ItemLayer, ItemLayersComponent, ItemListComponent, ItemListItemComponent,
AbstractItemWidgetComponent, ItemListItemContainerComponent, ITemporalItemLayer, ItemVectorSourceComponent, ItemWidgetListComponent, LayerListComponent, LayerSwitcher, LayerVectorImageComponent, LegendComponent, mapActions, MapComponent, mapEffects,
AbstractItemListItemComponent, mapReducers, MapSearchComponent, MetaDataModalComponent, PanToLocation, RotationResetComponent, SelectedItemComponent, SelectedItemContainerComponent, SelectedItemCropfieldComponent,
AbstractItemListComponent, SelectedItemGeotiffComponent, SelectedItemShapeComponent, SelectedItemTemporalComponent, SelectPeriodModalComponent, TemporalItemLayer, TemporalService, WidgetHostDirective, WidgetStatusComponent, ZoomToExtentComponent, ZoomToShowAlert
FeatureIconService, };
GeolocationService,
DeviceOrientationService,
TemporalService,
IMapState,
ISelectedFeatures,
IItemLayer,
ItemLayer,
IPeriodState,
ForChild,
ForItemType,
ForSourceTask,
ForPackage ,
ITemporalItemLayer,
TemporalItemLayer,
ifZoomToShowDirective,
ZoomToShowAlert,
IClickedFeature,
GeometryThumbnailComponent
}
@NgModule({ @NgModule({
imports: [ imports: [
@@ -1,5 +1,5 @@
import { Component, Input, OnDestroy, OnInit, EventEmitter, Output, Inject } from '@angular/core'; import { Component, Input, OnDestroy, OnInit, EventEmitter, Output, Inject } from '@angular/core';
import { MapComponent } from 'ngx-openlayers'; import { MapComponent } from '@farmmaps/ng-openlayers';
import * as proj from 'ol/proj'; import * as proj from 'ol/proj';
import {Point,Geometry} from 'ol/geom'; import {Point,Geometry} from 'ol/geom';
@@ -1,6 +1,3 @@
@import "~bootstrap/scss/bootstrap.scss";
.gps-location { .gps-location {
display:none; display:none;
} }
@@ -14,7 +11,7 @@
} }
.tolerance { .tolerance {
fill: $primary; fill: var(--bs-primary);
fill-opacity:0.4; fill-opacity:0.4;
} }
@@ -23,20 +20,20 @@
} }
.border { .border {
fill: $white; fill: var(--bs-white);
} }
.center { .center {
fill: $primary; fill: var(--bs-primary);
} }
.stop1 { .stop1 {
stop-color: $primary; stop-color: var(--bs-primary);
stop-opacity:1; stop-opacity:1;
} }
.stop2 { .stop2 {
stop-color:$primary; stop-color:var(--bs-primary);
stop-opacity: 0; stop-opacity: 0;
} }
@@ -1,5 +1,5 @@
import { Component, OnInit, Input, ViewChild, ElementRef, OnChanges, SimpleChanges ,Host} from '@angular/core'; import { Component, OnInit, Input, ViewChild, ElementRef, OnChanges, SimpleChanges ,Host} from '@angular/core';
import { MapComponent } from 'ngx-openlayers'; import { MapComponent } from '@farmmaps/ng-openlayers';
import Overlay from 'ol/Overlay'; import Overlay from 'ol/Overlay';
import { fromLonLat, toLonLat } from 'ol/proj'; import { fromLonLat, toLonLat } from 'ol/proj';
@@ -1,5 +1,5 @@
import { Component, Host, Input, Output, EventEmitter,OnDestroy, OnInit, OnChanges, SimpleChanges, forwardRef } from '@angular/core'; import { Component, Host, Input, Output, EventEmitter,OnDestroy, OnInit, OnChanges, SimpleChanges, forwardRef } from '@angular/core';
import { LayerGroupComponent, MapComponent } from 'ngx-openlayers'; import { LayerGroupComponent, MapComponent } from '@farmmaps/ng-openlayers';
import { ItemService,IItem,AppConfig } from '@farmmaps/common'; import { ItemService,IItem,AppConfig } from '@farmmaps/common';
import { IItemLayer, ITemporalItemLayer} from '../../../models/item.layer'; import { IItemLayer, ITemporalItemLayer} from '../../../models/item.layer';
import { ILayerData} from '../../../models/layer.data'; import { ILayerData} from '../../../models/layer.data';
@@ -19,6 +19,7 @@ import VectorTileLayer from 'ol/layer/VectorTile';
import {GeoJSON,MVT} from 'ol/format'; import {GeoJSON,MVT} from 'ol/format';
import { Geometry } from 'ol/geom'; import { Geometry } from 'ol/geom';
import BaseLayer from 'ol/layer/Base'; import BaseLayer from 'ol/layer/Base';
import Feature from 'ol/Feature';
@Component({ @Component({
selector: 'fm-map-item-layers', selector: 'fm-map-item-layers',
@@ -180,9 +181,9 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
const source = new VectorSource({ const source = new VectorSource({
strategy: loadingstrategy.bbox, strategy: loadingstrategy.bbox,
loader: function (extent: Extent, resolution: number, projection: Projection) { loader: function (extent: Extent, resolution: number, projection: Projection) {
const source = this as VectorSource<Geometry>; const source = this as VectorSource<Feature<Geometry>>;
__this.itemService.getItemFeatures(item.code, extent, projection.getCode(), layerIndex).subscribe(function (data) { __this.itemService.getItemFeatures(item.code, extent, projection.getCode(), layerIndex).subscribe(function (data) {
const features = format.readFeatures(data); const features = format.readFeatures(data).filter(feature => feature instanceof Feature) as Feature[];
for (const f of features) { for (const f of features) {
if (f.get("code")) { if (f.get("code")) {
f.setId(f.get("code")); f.setId(f.get("code"));
@@ -250,8 +251,8 @@ export class ItemLayersComponent extends LayerGroupComponent implements OnChange
return new style.Style( return new style.Style(
{ {
stroke: new style.Stroke({ stroke: new style.Stroke({
color: 'red', color: '#0d6efd',
width: 2 width: 3
}) })
} }
); );
@@ -1,6 +1,6 @@
import { Component, Host, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, forwardRef, Inject, InjectionToken } from '@angular/core'; import { Component, Host, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, forwardRef, Inject, InjectionToken, OnDestroy, LOCALE_ID } from '@angular/core';
import { LayerVectorComponent, SourceVectorComponent, MapComponent } from 'ngx-openlayers'; import { LayerVectorComponent, SourceVectorComponent, MapComponent } from '@farmmaps/ng-openlayers';
import { ItemService, ItemTypeService, IItem, IItemType } from '@farmmaps/common'; import { ItemService, ItemTypeService, IItem, IItemType, FolderService } from '@farmmaps/common';
import { Feature } from 'ol'; import { Feature } from 'ol';
import { Point, Geometry } from 'ol/geom'; import { Point, Geometry } from 'ol/geom';
@@ -17,6 +17,9 @@ import { GeoJSON } from 'ol/format';
import { Select } from 'ol/interaction'; import { Select } from 'ol/interaction';
import { IStyles } from '../../../models/style.cache'; import { IStyles } from '../../../models/style.cache';
import { FeatureIconService } from '../../../services/feature-icon.service'; import { FeatureIconService } from '../../../services/feature-icon.service';
import { Subscription } from 'rxjs';
import { getCenter } from 'ol/extent';
import { formatNumber } from '@angular/common';
@Component({ @Component({
selector: 'fm-map-item-source-vector', selector: 'fm-map-item-source-vector',
@@ -25,8 +28,8 @@ import { FeatureIconService } from '../../../services/feature-icon.service';
{ provide: SourceVectorComponent, useExisting: forwardRef(() => ItemVectorSourceComponent) } { provide: SourceVectorComponent, useExisting: forwardRef(() => ItemVectorSourceComponent) }
] ]
}) })
export class ItemVectorSourceComponent extends SourceVectorComponent implements OnInit, OnChanges { export class ItemVectorSourceComponent extends SourceVectorComponent implements OnInit, OnDestroy, OnChanges {
instance: Vector<Geometry>; instance: Vector<Feature<Geometry>>;
private _format: GeoJSON; private _format: GeoJSON;
private _select: Select; private _select: Select;
private _hoverSelect: Select; private _hoverSelect: Select;
@@ -38,8 +41,10 @@ export class ItemVectorSourceComponent extends SourceVectorComponent implements
@Output() onFeatureSelected: EventEmitter<Feature<Geometry>> = new EventEmitter<Feature<Geometry>>(); @Output() onFeatureSelected: EventEmitter<Feature<Geometry>> = new EventEmitter<Feature<Geometry>>();
@Output() onFeatureHover: EventEmitter<Feature<Geometry>> = new EventEmitter<Feature<Geometry>>(); @Output() onFeatureHover: EventEmitter<Feature<Geometry>> = new EventEmitter<Feature<Geometry>>();
private stylesCache: IStyles = {}; private stylesCache: IStyles = {};
private sub: Subscription;
private displayMapFeatureSettings: { [code: string]: string[] } = defaultDisplayMapFeatureSettings();
constructor(@Host() private layer: LayerVectorComponent, private itemService: ItemService, private map: MapComponent, private itemTypeService: ItemTypeService, private featureIconService$: FeatureIconService) { constructor(@Host() private layer: LayerVectorComponent, private itemService: ItemService, private map: MapComponent, private itemTypeService: ItemTypeService, private featureIconService$: FeatureIconService, private folderService: FolderService, @Inject(LOCALE_ID) private locale: string) {
super(layer); super(layer);
this._format = new GeoJSON(); this._format = new GeoJSON();
} }
@@ -76,6 +81,18 @@ export class ItemVectorSourceComponent extends SourceVectorComponent implements
} }
ngOnInit() { ngOnInit() {
this.sub = this.folderService.getFolder('my_settings').subscribe(
userSettingsRoot => {
if (userSettingsRoot == undefined) return;
this.itemService.getChildItemList(userSettingsRoot.code, 'vnd.farmmaps.itemtype.settings.general').subscribe(
items => {
if (items && items.length > 0 && items[0].data?.displayMapFeatureSettings) {
this.displayMapFeatureSettings = items[0].data?.displayMapFeatureSettings;
}
}
)
}
);
this.strategy = loadingstrategy.bbox; this.strategy = loadingstrategy.bbox;
this.format = new GeoJSON(); this.format = new GeoJSON();
this._select = new Select({ this._select = new Select({
@@ -133,7 +150,8 @@ export class ItemVectorSourceComponent extends SourceVectorComponent implements
fill: new style.Fill({ fill: new style.Fill({
color: fillColor color: fillColor
}), }),
geometry: (feature: Feature<Geometry>) => this.geometry(feature) geometry: (feature: Feature<Geometry>) => this.geometry(feature),
text: this.getDisplayTextForFeature(feature, this.map.instance.getView().getZoom())
}); });
} else { } else {
key = 'file'; key = 'file';
@@ -153,6 +171,10 @@ export class ItemVectorSourceComponent extends SourceVectorComponent implements
}); });
} }
ngOnDestroy(): void {
if (this.sub) this.sub.unsubscribe();
}
ngOnChanges(changes: SimpleChanges) { ngOnChanges(changes: SimpleChanges) {
if (changes["features"] && this.instance) { if (changes["features"] && this.instance) {
this.instance.clear(true); this.instance.clear(true);
@@ -188,4 +210,51 @@ export class ItemVectorSourceComponent extends SourceVectorComponent implements
} }
} }
} }
getDisplayTextForFeature(feature: Feature<Geometry>, zoom: number, overrule?: style.Text) {
if (!feature) return null;
const propertiesToShow: string[] = this.displayMapFeatureSettings[feature.get('itemType')];
if (!propertiesToShow) return null;
if (propertiesToShow.length <= 0) return null;
if (zoom < 14) return null;
let displayText = '';
for (let i = 0; i < propertiesToShow.length; i++) {
let value = feature.get(propertiesToShow[i]);
switch (propertiesToShow[i]) {
case "area": value = formatNumber(value, this.locale, '0.1-2') + ' ha'; break;
case "centroid": {
if (feature.getGeometry()) {
const centroid = getCenter(feature.getGeometry().getExtent());
value = Math.round(centroid[0]) + ',' + Math.round(centroid[1]);
}
}
if (value) {
displayText += value + (i < propertiesToShow.length ? '\n' : '');
}
}
const styleText = new style.Text({
font: '13px Calibri,sans-serif',
fill: new style.Fill({ color: '#ffffff' }),
stroke: new style.Stroke({ color: '#000000', width: 2 }),
text: displayText
});
if (overrule) {
if (overrule.getFont()) styleText.setFont(overrule.getFont());
if (overrule.getFill()) styleText.setFill(overrule.getFill());
if (overrule.getStroke()) styleText.setStroke(overrule.getStroke());
}
return styleText;
}
}
}
function defaultDisplayMapFeatureSettings() {
return {
'vnd.farmmaps.itemtype.cropfield': ['name', 'cropTypeName', 'area']
};
} }
@@ -3,7 +3,7 @@ import { IItemLayer } from '../../../models/item.layer';
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 * as mapActions from '../../../actions/map.actions'; import * as mapActions from '../../../actions/map.actions';
import { MapComponent } from 'ngx-openlayers'; import { MapComponent } from '@farmmaps/ng-openlayers';
import { ILayervalue } from '../../../models/layer.value'; import { ILayervalue } from '../../../models/layer.value';
import { Observable, interval, Subject } from 'rxjs'; import { Observable, interval, Subject } from 'rxjs';
import { debounce, throttle } from 'rxjs/operators'; import { debounce, throttle } from 'rxjs/operators';
@@ -1,8 +1,9 @@
import { Component, OnDestroy, OnInit, Input, OnChanges, SimpleChanges } from '@angular/core'; import { Component, OnDestroy, OnInit, Input, OnChanges, SimpleChanges } from '@angular/core';
import { LayerVectorComponent, MapComponent } from 'ngx-openlayers'; import { LayerVectorComponent, MapComponent } from '@farmmaps/ng-openlayers';
import RenderType from 'ol/layer/Vector'; import RenderType from 'ol/layer/Vector';
import { Vector as VectorSource } from 'ol/source'; import { Vector as VectorSource } from 'ol/source';
import { Geometry } from 'ol/geom'; import { Geometry } from 'ol/geom';
import Feature from 'ol/Feature';
@Component({ @Component({
selector: 'fm-map-aol-layer-vector-image', selector: 'fm-map-aol-layer-vector-image',
@@ -14,7 +15,7 @@ export class LayerVectorImageComponent extends LayerVectorComponent implements O
//public source: Vector; //public source: Vector;
@Input() @Input()
renderMode: RenderType<VectorSource<Geometry>> | string = "image"; renderMode: RenderType<VectorSource<Feature<Geometry>>> | string = "image";
constructor(map: MapComponent) { constructor(map: MapComponent) {
super(map); super(map);
@@ -1,11 +1,8 @@
@import "~bootstrap/scss/bootstrap.scss";
.gps-location { .gps-location {
display:block; display:block;
width:2.5em; width:2.5em;
height:2.5em; height:2.5em;
background-color: $body-bg; background-color: var(--bs-body-bg);
background-size: contain; background-size: contain;
margin-top:0.5em; margin-top:0.5em;
border-radius: 1.75em; border-radius: 1.75em;
@@ -17,15 +14,15 @@
} }
.pan-to { .pan-to {
fill: $secondary; fill: var(--bs-secondary);
} }
div.gps-location:hover .pan-to { div.gps-location:hover .pan-to {
fill: $white; fill: var(--bs-white);
} }
.pan-to-centered { .pan-to-centered {
fill: $primary; fill: var(--bs-primary);
} }
div.gps-location:hover .pan-to-centered { div.gps-location:hover .pan-to-centered {
@@ -33,5 +30,5 @@ div.gps-location:hover .pan-to-centered {
} }
.pan-to.pan-to-disabled { .pan-to.pan-to-disabled {
fill: $gray-300; fill: var(--bs-gray-300);
} }
@@ -1,5 +1,5 @@
import { Component, OnInit, Input, Host, OnChanges, SimpleChanges,ChangeDetectorRef } from '@angular/core'; import { Component, OnInit, Input, Host, OnChanges, SimpleChanges,ChangeDetectorRef } from '@angular/core';
import { MapComponent } from 'ngx-openlayers'; import { MapComponent } from '@farmmaps/ng-openlayers';
import {IMapState} from '../../../models/map.state' import {IMapState} from '../../../models/map.state'
import {View} from 'ol'; import {View} from 'ol';
import { fromLonLat } from 'ol/proj'; import { fromLonLat } from 'ol/proj';
@@ -1,5 +1,3 @@
@import "~bootstrap/scss/bootstrap.scss";
.compass { .compass {
width:2.5em; width:2.5em;
height:2.5em; height:2.5em;
@@ -13,7 +11,7 @@
#north { #north {
display: none; display: none;
fill:$black; fill:var(--bs-black);
} }
#top-l { #top-l {
@@ -33,23 +31,23 @@
} }
div.compass:hover #top-l { div.compass:hover #top-l {
fill:$white; fill:var(--bs-white);
} }
div.compass:hover #top-r { div.compass:hover #top-r {
fill:$gray-300; fill:var(--bs-gray-300);
} }
div.compass:hover #bottom-l { div.compass:hover #bottom-l {
fill:$gray-300; fill:var(--bs-gray-300);
} }
div.compass:hover #bottom-r { div.compass:hover #bottom-r {
fill:$white; fill:var(--bs-white);
} }
div.compass:hover #north { div.compass:hover #north {
fill:$white; fill:var(--bs-white);
} }
.compass-n { .compass-n {
@@ -1,5 +1,5 @@
import { Component, Host, Input, OnInit, ChangeDetectorRef } from '@angular/core'; import { Component, Host, Input, OnInit, ChangeDetectorRef } from '@angular/core';
import { ViewComponent, MapComponent } from 'ngx-openlayers'; import { ViewComponent, MapComponent } from '@farmmaps/ng-openlayers';
import {View} from 'ol'; import {View} from 'ol';
@@ -1,6 +1,6 @@
import { Component, Host, Input, OnInit, OnChanges, SimpleChanges, forwardRef } from '@angular/core'; import { Component, Host, Input, OnInit, OnChanges, SimpleChanges, forwardRef } from '@angular/core';
import { ActivatedRoute } from '@angular/router'; import { ActivatedRoute } from '@angular/router';
import { ViewComponent, MapComponent } from 'ngx-openlayers'; import { ViewComponent, MapComponent } from '@farmmaps/ng-openlayers';
@Component({ @Component({
@@ -1,14 +1,10 @@
@import "~bootstrap/scss/bootstrap.scss";
.row { .row {
border-bottom: 1px solid $gray-500; border-bottom: 1px solid var(--bs-gray-500);
user-select: none; user-select: none;
} }
.row.selected { .row.selected {
background-color: $gray-100; background-color: var(--bs-gray-100);
} }
@media screen and (min-width: 44rem) { @media screen and (min-width: 44rem) {
@@ -64,9 +64,9 @@ export class FeatureListContainerComponent {
viewContainerRef.clear(); viewContainerRef.clear();
if(showItem) { if(showItem) {
this.componentRef = viewContainerRef.createComponent(componentFactory); this.componentRef = viewContainerRef.createComponent(componentFactory);
(<AbstractFeatureListComponent>this.componentRef.instance).features = null; (<AbstractFeatureListComponent>this.componentRef.instance).features = this.features;
(<AbstractFeatureListComponent>this.componentRef.instance).queryState = queryState; (<AbstractFeatureListComponent>this.componentRef.instance).queryState = this.queryState;
(<AbstractFeatureListComponent>this.componentRef.instance).selectedFeature = null; (<AbstractFeatureListComponent>this.componentRef.instance).selectedFeature = this.selectedFeature;
} }
} }
@@ -1,22 +1,20 @@
@import "~bootstrap/scss/bootstrap.scss";
fm-map-feature-list-feature-container { fm-map-feature-list-feature-container {
width:100%; width:100%;
pointer-events:none; pointer-events:none;
} }
.row { .row {
border-bottom: 1px solid $gray-500; border-bottom: 1px solid var(--bs-gray-500);
user-select: none; user-select: none;
padding-left:1.5rem; padding-left:1.5rem;
} }
.row.selected { .row.selected {
background-color: $gray-100; background-color: var(--bs-gray-100);
} }
.cropfields { .cropfields {
border-top: 1px solid $gray-500; border-top: 1px solid var(--bs-gray-500);
margin-left: -1.25rem; margin-left: -1.25rem;
margin-right: -1.25rem; margin-right: -1.25rem;
} }
@@ -1,22 +1,20 @@
@import "~bootstrap/scss/bootstrap.scss";
fm-map-feature-list-feature-container { fm-map-feature-list-feature-container {
width:100%; width:100%;
pointer-events:none; pointer-events:none;
} }
.row { .row {
border-bottom: 1px solid $gray-500; border-bottom: 1px solid var(--bs-gray-500);
user-select: none; user-select: none;
padding-left:1.5rem; padding-left:1.5rem;
} }
.row.selected { .row.selected {
background-color: $gray-100; background-color: var(--bs-gray-100);
} }
.farms { .farms {
border-top: 1px solid $gray-500; border-top: 1px solid var(--bs-gray-500);
margin-left: -1.25rem; margin-left: -1.25rem;
margin-right: -1.25rem; margin-right: -1.25rem;
} }
@@ -1,7 +1,3 @@
@import "~bootstrap/scss/bootstrap.scss";
.card-title { .card-title {
font-size: 1rem; font-size: 1rem;
white-space: nowrap; white-space: nowrap;
@@ -1,7 +1,3 @@
@import "~bootstrap/scss/bootstrap.scss";
.card-title { .card-title {
font-size: 1rem; font-size: 1rem;
white-space: nowrap; white-space: nowrap;
@@ -1,7 +1,3 @@
@import "~bootstrap/scss/bootstrap.scss";
.card-title { .card-title {
font-size: 1rem; font-size: 1rem;
white-space: nowrap; white-space: nowrap;
@@ -1,15 +1,13 @@
@import "~bootstrap/scss/bootstrap.scss";
fm-map-feature-list-feature-container { fm-map-feature-list-feature-container {
width: 100%; width: 100%;
pointer-events: none; pointer-events: none;
} }
.row { .row {
border-bottom: 1px solid $gray-500; border-bottom: 1px solid var(--bs-gray-500);
user-select: none; user-select: none;
} }
.row.selected { .row.selected {
background-color: $gray-100; background-color: var(--bs-gray-100);
} }
@@ -23,6 +23,7 @@ export abstract class AbstractFeatureListComponent {
handleFeatureClick(feature:Feature<Geometry>) { handleFeatureClick(feature:Feature<Geometry>) {
if(feature) { if(feature) {
this.store.dispatch(new mapActions.ClickFeature(feature));
const action = this.getAction(feature); const action = this.getAction(feature);
this.store.dispatch(action); this.store.dispatch(action);
} }
@@ -1,7 +1,7 @@
import { Directive, ViewContainerRef,TemplateRef,OnInit,Input, OnChanges } from '@angular/core'; import { Directive, ViewContainerRef,TemplateRef,OnInit,Input, OnChanges } from '@angular/core';
import { Layer } from 'ol/layer'; import { Layer } from 'ol/layer';
import { Source } from 'ol/source'; import { Source } from 'ol/source';
import { MapComponent } from 'ngx-openlayers'; import { MapComponent } from '@farmmaps/ng-openlayers';
@Directive({ @Directive({
selector: '[fmMapIfZoomToShow]', selector: '[fmMapIfZoomToShow]',
@@ -1,5 +1,3 @@
@import "~bootstrap/scss/bootstrap.scss";
.widget { .widget {
padding:0.8rem; padding:0.8rem;
height:100%; height:100%;
@@ -1,5 +1,3 @@
@import "~bootstrap/scss/bootstrap.scss";
.widget-container { .widget-container {
overflow:auto; overflow:auto;
margin-bottom:1rem; margin-bottom:1rem;
@@ -7,7 +5,7 @@
.widget { .widget {
position:relative; position:relative;
border: 1px solid $gray-500; border: 1px solid var(--bs-gray-500);
user-select: none; user-select: none;
display:inline-block; display:inline-block;
width:50%; width:50%;
@@ -28,7 +26,7 @@
} }
.widget:hover { .widget:hover {
background-color: $gray-100; background-color: var(--bs-gray-100);
} }
.widget-container { .widget-container {
@@ -1,5 +1,3 @@
@import "~bootstrap/scss/bootstrap.scss";
.widget-container { .widget-container {
overflow:auto; overflow:auto;
margin-bottom:1rem; margin-bottom:1rem;
@@ -7,7 +5,7 @@
.widget { .widget {
position:relative; position:relative;
border: 1px solid $gray-500; border: 1px solid var(--bs-gray-500);
user-select: none; user-select: none;
display:inline-block; display:inline-block;
width:50%; width:50%;
@@ -28,7 +26,7 @@
} }
.widget:hover { .widget:hover {
background-color: $gray-100; background-color: var(--bs-gray-100);
} }
.widget-container { .widget-container {
@@ -1,18 +1,15 @@
@import "~bootstrap/scss/bootstrap.scss";
.layer-switcher { .layer-switcher {
display:block; display:block;
width:2.5em; width:2.5em;
height:2.5em; height:2.5em;
background-color: $body-bg; background-color: var(--bs-body-bg);
background-size: contain; background-size: contain;
margin-top:0.5em; margin-top:0.5em;
text-align: center; text-align: center;
line-height: 2.5em; line-height: 2.5em;
border-radius: 1.75em; border-radius: 1.75em;
padding: 0; padding: 0;
color: $secondary; color: var(--bs-secondary);
} }
.layer-switcher i { .layer-switcher i {
@@ -24,7 +21,7 @@
} }
.layers { .layers {
color:$secondary; color:var(--bs-secondary);
position: absolute; position: absolute;
overflow: hidden; overflow: hidden;
bottom: -1em; bottom: -1em;
@@ -1,15 +1,15 @@
<div class="row ps-3"> <div class="row ps-3">
<div class="col-8 nopadding"><span i18n>Average</span>:</div> <div class="col-8 nopadding"><span i18n>Average</span>:</div>
<div class="col-4 pull-left nopadding">{{histogram.mean| number:'1.0-2'}}</div> <div class="col-4 pull-left nopadding">{{ getScaledValue(histogram.mean)| number:'1.0-2'}}</div>
<div class="col-8 nopadding"><span i18n>Standard deviation</span>:</div> <div class="col-8 nopadding"><span i18n>Standard deviation</span>:</div>
<div class="col-4 pull-left nopadding">{{histogram.stddev| number:'1.0-2'}}</div> <div class="col-4 pull-left nopadding">{{ getScaledValue(histogram.stddev)| number:'1.0-2'}}</div>
<div class="col-8 nopadding"><span i18n>Min</span>:</div> <div class="col-8 nopadding"><span i18n>Min</span>:</div>
<div class="col-4 pull-left nopadding">{{histogram.min| number:'1.0-2'}}</div> <div class="col-4 pull-left nopadding">{{ getScaledValue(histogram.min)| number:'1.0-2'}}</div>
<div class="col-8 nopadding" ><span i18n>Max</span>:</div> <div class="col-8 nopadding" ><span i18n>Max</span>:</div>
<div class="col-4 pull-left nopadding">{{histogram.max| number:'1.0-2'}}</div> <div class="col-4 pull-left nopadding">{{ getScaledValue(histogram.max)| number:'1.0-2'}}</div>
<ng-container *ngIf="showConfidenceInterval()"> <ng-container *ngIf="showConfidenceInterval()">
<div class="col-8 nopadding"><span i18n>Confidence interval</span>:</div> <div class="col-8 nopadding"><span i18n>Confidence interval</span>:</div>
<div class="col-4 pull-left nopadding">{{histogram.confidence * 100| number:'1.0-0'}}%</div> <div class="col-4 pull-left nopadding">{{ getScaledValue(histogram.confidence * 100)| number:'1.0-0'}}%</div>
</ng-container> </ng-container>
</div> </div>
@@ -14,6 +14,17 @@ export class HistogramDetailsComponent {
@Input() @Input()
histogram: IHistogram; histogram: IHistogram;
@Input()
scale: number | null;
public getScaledValue(value: number): number {
let v = value;
if (this.scale && this.scale != 0) {
v = this.scale * value;
}
return v;
}
showConfidenceInterval(): boolean { showConfidenceInterval(): boolean {
return this.histogram.confidence != null && this.histogram.confidence !== 1; return this.histogram.confidence != null && this.histogram.confidence !== 1;
} }
@@ -35,7 +35,7 @@
</ng-container> </ng-container>
<ng-template #histogram> <ng-template #histogram>
<fm-map-histogram-details [histogram]="layer.renderer.band.histogram"></fm-map-histogram-details> <fm-map-histogram-details [histogram]="layer.renderer.band.histogram" [scale]="layer.scale"></fm-map-histogram-details>
</ng-template> </ng-template>
</div> </div>
</td> </td>
@@ -1,5 +1,3 @@
@import "~bootstrap/scss/bootstrap.scss";
div.map-search { div.map-search {
position: absolute; position: absolute;
top: 0.5rem; top: 0.5rem;
@@ -106,7 +104,7 @@ div.map-search.searchcollapsed button[type="submit"] {
} }
.form-control, .form-control:focus { .form-control, .form-control:focus {
border-color: $secondary; border-color: var(--bs-secondary);
} }
@@ -10,6 +10,7 @@
panelVisible:panelVisible$|async, panelVisible:panelVisible$|async,
openedModalName:openedModalName$|async, openedModalName:openedModalName$|async,
panelCollapsed:panelCollapsed$|async, panelCollapsed:panelCollapsed$|async,
panelExtraWide:panelExtraWide$|async,
searchMinified:searchMinified$|async, searchMinified:searchMinified$|async,
selectedItem:selectedItem$|async, selectedItem:selectedItem$|async,
parentItem:parentItem$|async, parentItem:parentItem$|async,
@@ -64,7 +65,7 @@
</div> </div>
<div class="side-panel-container"> <div class="side-panel-container">
<fm-side-panel [resizeable]="true" (onResize)="handlePanelResize($event)" [visible]="state.panelVisible && noContent" [collapsed]="state.panelCollapsed" [collapsable]="false"> <fm-side-panel [resizeable]="true" (onResize)="handlePanelResize($event)" [visible]="state.panelVisible && noContent" [collapsed]="state.panelCollapsed" [collapsable]="false" [extrawide]="state.panelExtraWide">
<div class="panel-wrapper" *ngIf="noContent"> <div class="panel-wrapper" *ngIf="noContent">
<div class="panel-top bg-secondary" *ngIf="!(state.searchMinified)"> <div class="panel-top bg-secondary" *ngIf="!(state.searchMinified)">
</div> </div>
@@ -84,7 +85,7 @@
</div> </div>
</div> </div>
</fm-side-panel> </fm-side-panel>
<fm-side-panel [resizeable]="true" [visible]="!noContent"> <fm-side-panel [resizeable]="true" [visible]="!noContent" [extrawide]="state.panelExtraWide">
<router-outlet (activate)="handleSidepaneloutletActivate($event)" (deactivate)="handleSidepaneloutletDeactivate($event)"></router-outlet> <router-outlet (activate)="handleSidepaneloutletActivate($event)" (deactivate)="handleSidepaneloutletDeactivate($event)"></router-outlet>
</fm-side-panel> </fm-side-panel>
</div> </div>
@@ -1,5 +1,3 @@
@import "~bootstrap/scss/bootstrap.scss";
aol-map { position:absolute;width:100%;height:calc( 100vh );} aol-map { position:absolute;width:100%;height:calc( 100vh );}
.arrow { .arrow {
@@ -195,7 +193,7 @@ timespan.menuVisible {
width: 4rem; width: 4rem;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
color: $primary; color: var(--bs-primary);
} }
.shortcut-icon > .farm-icon { .shortcut-icon > .farm-icon {
@@ -66,6 +66,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
public parentCode$: Observable<string> =this.store.select(mapReducers.selectGetParentCode); public parentCode$: Observable<string> =this.store.select(mapReducers.selectGetParentCode);
public panelVisible$: Observable<boolean> = this.store.select(mapReducers.selectGetPanelVisible); public panelVisible$: Observable<boolean> = this.store.select(mapReducers.selectGetPanelVisible);
public panelCollapsed$: Observable<boolean> = this.store.select(mapReducers.selectGetPanelCollapsed); public panelCollapsed$: Observable<boolean> = this.store.select(mapReducers.selectGetPanelCollapsed);
public panelExtraWide$: Observable<boolean> = this.store.select(mapReducers.selectGetPanelExtraWide);
public selectedFeature$: Observable<Feature<Geometry>> = this.store.select(mapReducers.selectGetSelectedFeature); public selectedFeature$: Observable<Feature<Geometry>> = this.store.select(mapReducers.selectGetSelectedFeature);
public clickedFeature: Subject<Feature<Geometry>> = new Subject<Feature<Geometry>>(); public clickedFeature: Subject<Feature<Geometry>> = new Subject<Feature<Geometry>>();
public selectedItem$: Observable<IItem> = this.store.select(mapReducers.selectGetSelectedItem); public selectedItem$: Observable<IItem> = this.store.select(mapReducers.selectGetSelectedItem);
@@ -119,7 +120,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
this.querySub = this.query$.pipe(skip(1), withLatestFrom(this.mapState$)).subscribe(([query,mapState]) =>{ this.querySub = this.query$.pipe(skip(1), withLatestFrom(this.mapState$)).subscribe(([query,mapState]) =>{
if(query && query.querystate) { if(query && query.querystate) {
let newQueryState = tassign(mapReducers.initialQueryState); let newQueryState = tassign(mapReducers.initialQueryState);
console.debug(`Do Query`); //console.debug(`Do Query`);
const urlparts=[]; const urlparts=[];
if (query.querystate.itemCode && query.querystate.itemCode != "") { if (query.querystate.itemCode && query.querystate.itemCode != "") {
if(query.querystate.itemType && query.querystate.itemType!= "") { if(query.querystate.itemType && query.querystate.itemType!= "") {
@@ -192,6 +193,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
} }
handleFeatureClick(feature: Feature<Geometry>) { handleFeatureClick(feature: Feature<Geometry>) {
this.store.dispatch(new mapActions.ClickFeature(feature));
this.clickedFeature.next(feature); this.clickedFeature.next(feature);
} }
@@ -207,12 +209,18 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
if(component && component.hasOwnProperty('clickedFeature')) { if(component && component.hasOwnProperty('clickedFeature')) {
(component as IClickedFeature).clickedFeature = this.clickedFeature; (component as IClickedFeature).clickedFeature = this.clickedFeature;
} }
if(component && component.hasOwnProperty('extrawide')) {
this.store.dispatch(new mapActions.SetPanelExtraWide(true));
}
} }
handleSidepaneloutletDeactivate(component:any) { handleSidepaneloutletDeactivate(component:any) {
if(component && component.hasOwnProperty('clickedFeature')) { if(component && component.hasOwnProperty('clickedFeature')) {
(component as IClickedFeature).clickedFeature = null; (component as IClickedFeature).clickedFeature = null;
} }
if(component && component.hasOwnProperty('extrawide')) {
this.store.dispatch(new mapActions.SetPanelExtraWide(false));
}
} }
handlePrerender(event:any) { handlePrerender(event:any) {
@@ -242,7 +250,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
ngOnInit() { ngOnInit() {
this.initialized = false; this.initialized = false;
console.debug("Init"); //console.debug("Init");
this.store.dispatch(new mapActions.Clear()); this.store.dispatch(new mapActions.Clear());
this.selectedFeatures$.next({x:0,y:0,features:[]}); this.selectedFeatures$.next({x:0,y:0,features:[]});
this.selectedFeatures$.next(null); this.selectedFeatures$.next(null);
@@ -314,7 +322,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
} }
ngAfterViewInit() { ngAfterViewInit() {
console.debug("View init"); //console.debug("View init");
this.noContent=true; this.noContent=true;
this.route.children.forEach((entry) => { this.route.children.forEach((entry) => {
if(entry.outlet=="primary") { if(entry.outlet=="primary") {
@@ -348,7 +356,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
})).subscribe((action) => { })).subscribe((action) => {
if(action) { if(action) {
this.zone.run(() => { this.zone.run(() => {
console.debug("Url to state"); //console.debug("Url to state");
this.store.dispatch(action); this.store.dispatch(action);
}); });
} }
@@ -365,9 +373,9 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
else { else {
return of(null); return of(null);
} }
})).subscribe((newUrlState) =>{ })).subscribe((newUrlState: any) => {
if(newUrlState) { if(newUrlState) {
console.debug(`State to url`); //console.debug(`State to url`);
this.replaceUrl(newUrlState.mapState,newUrlState.queryState,newUrlState.replaceUrl); this.replaceUrl(newUrlState.mapState,newUrlState.queryState,newUrlState.replaceUrl);
} }
}); });
@@ -425,7 +433,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
parts.push(mapState.baseLayerCode); parts.push(mapState.baseLayerCode);
parts.push( this.serializeService.serialize(queryState)); parts.push( this.serializeService.serialize(queryState));
console.debug("Replace url",parts); //console.debug("Replace url",parts);
this.router.navigate(parts, { replaceUrl: replace,relativeTo:this.route.parent }); this.router.navigate(parts, { replaceUrl: replace,relativeTo:this.route.parent });
} }
} }
@@ -434,7 +442,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
handleOnMoveEnd(event) { handleOnMoveEnd(event) {
if(this.initialized && this.viewEnabled) { if(this.initialized && this.viewEnabled) {
this.zone.run(() =>{ this.zone.run(() =>{
console.debug("Move end"); //console.debug("Move end");
const map = event.map; const map = event.map;
const view = map.getView(); const view = map.getView();
const rotation = view.getRotation(); const rotation = view.getRotation();
@@ -443,7 +451,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
const viewExtent = view.calculateExtent(this.map.instance.getSize()); const viewExtent = view.calculateExtent(this.map.instance.getSize());
const mapState: IMapState = { xCenter: center[0], yCenter: center[1], zoom: zoom, rotation: rotation, baseLayerCode: null }; const mapState: IMapState = { xCenter: center[0], yCenter: center[1], zoom: zoom, rotation: rotation, baseLayerCode: null };
const state = { mapState: mapState, viewExtent: viewExtent }; const state = { mapState: mapState, viewExtent: viewExtent };
console.debug("Center: ",center[0],center[1] ); //console.debug("Center: ",center[0],center[1] );
const source = from([state]); const source = from([state]);
source.pipe(withLatestFrom(this.selectedBaseLayer$)).subscribe(([state, baselayer]) => { source.pipe(withLatestFrom(this.selectedBaseLayer$)).subscribe(([state, baselayer]) => {
if (mapState && baselayer) { // do not react on first move if (mapState && baselayer) { // do not react on first move
@@ -1,13 +1,9 @@
@import "~bootstrap/scss/bootstrap.scss";
.row { .row {
border-bottom: 1px solid $gray-500; border-bottom: 1px solid var(--bs-gray-500);
user-select: none; user-select: none;
} }
.row:hover { .row:hover {
background-color: $gray-100; background-color: var(--bs-gray-100);
} }
@@ -1,5 +1,3 @@
@import "~bootstrap/scss/bootstrap.scss";
.big-icon { .big-icon {
width: 100%; width: 100%;
color: white; color: white;
@@ -25,6 +25,7 @@
<li *ngIf="!getItemLayer(item,itemLayer.layerIndex)"><a href="#" (click)="handleAddAsLayer(item,itemLayer.layerIndex)"><i class="fas fa-layer-plus" aria-hidden="true" i18n-title title="Add as layer"></i>&nbsp;<span i18n>Add as overlay</span></a></li> <li *ngIf="!getItemLayer(item,itemLayer.layerIndex)"><a href="#" (click)="handleAddAsLayer(item,itemLayer.layerIndex)"><i class="fas fa-layer-plus" aria-hidden="true" i18n-title title="Add as layer"></i>&nbsp;<span i18n>Add as overlay</span></a></li>
<li *ngIf="getItemLayer(item,itemLayer.layerIndex)"><a href="#" (click)="handleRemoveLayer(item,itemLayer.layerIndex)"><i class="fas fa-layer-minus" aria-hidden="true" i18n-title title="Remove overlay"></i>&nbsp;<span i18n>Remove overlay</span></a></li> <li *ngIf="getItemLayer(item,itemLayer.layerIndex)"><a href="#" (click)="handleRemoveLayer(item,itemLayer.layerIndex)"><i class="fas fa-layer-minus" aria-hidden="true" i18n-title title="Remove overlay"></i>&nbsp;<span i18n>Remove overlay</span></a></li>
</ng-container> </ng-container>
<li><fm-item-link class="text-primary p-0" [itemCode]="item.code" pathSuffix="data" [showText]="true"></fm-item-link></li>
</ul> </ul>
</div> </div>
<fm-map-zoom-to-show-alert [layer]="itemLayer?.layer"></fm-map-zoom-to-show-alert> <fm-map-zoom-to-show-alert [layer]="itemLayer?.layer"></fm-map-zoom-to-show-alert>
@@ -1,5 +1,3 @@
@import "~bootstrap/scss/bootstrap.scss";
.big-icon { .big-icon {
width: 100%; width: 100%;
color: white; color: white;
@@ -1,5 +1,3 @@
@import "~bootstrap/scss/bootstrap.scss";
.big-icon { .big-icon {
width: 100%; width: 100%;
color: white; color: white;
@@ -1,5 +1,3 @@
@import "~bootstrap/scss/bootstrap.scss";
.big-icon { .big-icon {
width: 100%; width: 100%;
color: white; color: white;
@@ -1,5 +1,3 @@
@import "~bootstrap/scss/bootstrap.scss";
.big-icon { .big-icon {
width: 100%; width: 100%;
color: white; color: white;
@@ -41,7 +41,7 @@ export const {
selectRouteParam, // factory function to select a route param selectRouteParam, // factory function to select a route param
selectRouteData, // select the current route data selectRouteData, // select the current route data
selectUrl, // select the current url selectUrl, // select the current url
} = fromRouter.getSelectors(getRouterState); } = fromRouter.getRouterSelectors(getRouterState);
@Injectable() @Injectable()
@@ -133,7 +133,7 @@ export class MapEffects {
f.id = f.properties["code"]; f.id = f.properties["code"];
} }
} }
return of(new mapActions.StartSearchSuccess(this._geojsonFormat.readFeatures(features), a.queryState)); return of(new mapActions.StartSearchSuccess(this._geojsonFormat.readFeatures(features).filter(feature => feature instanceof Feature) as Feature[], a.queryState));
} }
), ),
catchError(error => of(new commonActions.Fail(error)))); catchError(error => of(new commonActions.Fail(error))));
@@ -218,7 +218,7 @@ export class MapEffects {
if (!this.overrideSelectedItemLayer) { if (!this.overrideSelectedItemLayer) {
return this.itemService$.getFeature(action.item.code, "EPSG:3857").pipe( return this.itemService$.getFeature(action.item.code, "EPSG:3857").pipe(
map((feature: any) => { map((feature: any) => {
const f = this._geojsonFormat.readFeature(feature); const f = this._geojsonFormat.readFeature(feature) as Feature;
f.setId(action.item.code); f.setId(action.item.code);
return new mapActions.AddFeatureSuccess(f); return new mapActions.AddFeatureSuccess(f);
}), }),
@@ -49,6 +49,7 @@ export interface State {
features: Array<Feature<Geometry>>, features: Array<Feature<Geometry>>,
panelVisible: boolean, panelVisible: boolean,
panelCollapsed: boolean, panelCollapsed: boolean,
panelExtraWide: boolean,
selectedFeature: Feature<Geometry>, selectedFeature: Feature<Geometry>,
selectedItem:IItem, selectedItem:IItem,
parentItem:IItem, parentItem:IItem,
@@ -94,6 +95,7 @@ export const initialState: State = {
features: [], features: [],
panelVisible: false, panelVisible: false,
panelCollapsed: false, panelCollapsed: false,
panelExtraWide: false,
selectedFeature: null, selectedFeature: null,
selectedItem: null, selectedItem: null,
parentItem: null, parentItem: null,
@@ -388,6 +390,9 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
case mapActions.CLEARLAYERS: { case mapActions.CLEARLAYERS: {
return tassign(state, {overlayLayers: [], selectedOverlayLayer: null}); return tassign(state, {overlayLayers: [], selectedOverlayLayer: null});
} }
case mapActions.CLEARFEATURES: {
return tassign(state, {features: [], selectedFeature: null});
}
case mapActions.SETVISIBILITY: { case mapActions.SETVISIBILITY: {
const a = action as mapActions.SetVisibility; const a = action as mapActions.SetVisibility;
if(state.selectedItemLayer == a.itemLayer) { if(state.selectedItemLayer == a.itemLayer) {
@@ -569,6 +574,10 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
} }
return state; return state;
} }
case mapActions.SETPANELEXTRAWIDE:{
const a= action as mapActions.SetPanelExtraWide;
return tassign(state,{panelExtraWide:a.panelExtraWide});
}
default: { default: {
return state; return state;
} }
@@ -580,6 +589,7 @@ export const getParentCode = (state: State) => state.parentCode;
export const getFeatures = (state: State) => state.features; export const getFeatures = (state: State) => state.features;
export const getPanelVisible = (state: State) => state.panelVisible; export const getPanelVisible = (state: State) => state.panelVisible;
export const getPanelCollapsed = (state: State) => state.panelCollapsed; export const getPanelCollapsed = (state: State) => state.panelCollapsed;
export const getPanelExtraWide = (state: State) => state.panelExtraWide;
export const getSelectedFeature = (state: State) => state.selectedFeature; export const getSelectedFeature = (state: State) => state.selectedFeature;
export const getSelectedItem = (state: State) => state.selectedItem; export const getSelectedItem = (state: State) => state.selectedItem;
export const getParentItem = (state: State) => state.parentItem; export const getParentItem = (state: State) => state.parentItem;
@@ -588,6 +598,7 @@ export const getClearEnabled = (state: State) => state.clearEnabled;
export const getSearchCollapsed = (state: State) => state.searchCollapsed; export const getSearchCollapsed = (state: State) => state.searchCollapsed;
export const getSearchMinified = (state: State) => state.searchMinified; export const getSearchMinified = (state: State) => state.searchMinified;
export const getExtent = (state: State) => state.extent; export const getExtent = (state: State) => state.extent;
export const getViewExtent = (state: State) => state.viewExtent;
export const getOverlayLayers = (state: State) => state.overlayLayers; export const getOverlayLayers = (state: State) => state.overlayLayers;
export const getBaseLayers = (state: State) => state.baseLayers; export const getBaseLayers = (state: State) => state.baseLayers;
export const getProjection = (state: State) => state.projection; export const getProjection = (state: State) => state.projection;
@@ -614,6 +625,7 @@ export const selectGetParentCode = createSelector(selectMapState, getParentCode)
export const selectGetFeatures = createSelector(selectMapState, getFeatures); export const selectGetFeatures = createSelector(selectMapState, getFeatures);
export const selectGetPanelVisible = createSelector(selectMapState, getPanelVisible); export const selectGetPanelVisible = createSelector(selectMapState, getPanelVisible);
export const selectGetPanelCollapsed = createSelector(selectMapState, getPanelCollapsed); export const selectGetPanelCollapsed = createSelector(selectMapState, getPanelCollapsed);
export const selectGetPanelExtraWide = createSelector(selectMapState, getPanelExtraWide);
export const selectGetSelectedFeature = createSelector(selectMapState, getSelectedFeature); export const selectGetSelectedFeature = createSelector(selectMapState, getSelectedFeature);
export const selectGetSelectedItem = createSelector(selectMapState, getSelectedItem); export const selectGetSelectedItem = createSelector(selectMapState, getSelectedItem);
export const selectGetParentItem = createSelector(selectMapState, getParentItem); export const selectGetParentItem = createSelector(selectMapState, getParentItem);
@@ -622,6 +634,7 @@ export const selectGetClearEnabled = createSelector(selectMapState, getClearEnab
export const selectGetSearchCollapsed = createSelector(selectMapState, getSearchCollapsed); export const selectGetSearchCollapsed = createSelector(selectMapState, getSearchCollapsed);
export const selectGetSearchMinified = createSelector(selectMapState, getSearchMinified); export const selectGetSearchMinified = createSelector(selectMapState, getSearchMinified);
export const selectGetExtent = createSelector(selectMapState, getExtent); export const selectGetExtent = createSelector(selectMapState, getExtent);
export const selectGetViewExtent = createSelector(selectMapState, getViewExtent);
export const selectGetOverlayLayers = createSelector(selectMapState, getOverlayLayers); export const selectGetOverlayLayers = createSelector(selectMapState, getOverlayLayers);
export const selectGetBaseLayers = createSelector(selectMapState, getBaseLayers); export const selectGetBaseLayers = createSelector(selectMapState, getBaseLayers);
export const selectGetProjection = createSelector(selectMapState, getProjection); export const selectGetProjection = createSelector(selectMapState, getProjection);
-6
View File
@@ -9,8 +9,6 @@ import {
platformBrowserDynamicTesting platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing'; } from '@angular/platform-browser-dynamic/testing';
declare const require: any;
// First, initialize the Angular testing environment. // First, initialize the Angular testing environment.
getTestBed().initTestEnvironment( getTestBed().initTestEnvironment(
BrowserDynamicTestingModule, BrowserDynamicTestingModule,
@@ -18,7 +16,3 @@ getTestBed().initTestEnvironment(
teardown: { destroyAfterEach: false } teardown: { destroyAfterEach: false }
} }
); );
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);
+10 -2
View File
@@ -2,7 +2,6 @@
"extends": "../../tsconfig.json", "extends": "../../tsconfig.json",
"compilerOptions": { "compilerOptions": {
"outDir": "../../out-tsc/lib", "outDir": "../../out-tsc/lib",
"target": "es2020",
"module": "es2015", "module": "es2015",
"moduleResolution": "node", "moduleResolution": "node",
"declaration": true, "declaration": true,
@@ -11,18 +10,27 @@
"emitDecoratorMetadata": true, "emitDecoratorMetadata": true,
"experimentalDecorators": true, "experimentalDecorators": true,
"importHelpers": true, "importHelpers": true,
"esModuleInterop": true,
"types": [], "types": [],
"lib": [ "lib": [
"dom", "dom",
"es2018" "es2018"
],
"paths": {
"@angular/*": [
"node_modules/@angular/*"
] ]
}
}, },
"angularCompilerOptions": { "angularCompilerOptions": {
"skipTemplateCodegen": true, "skipTemplateCodegen": true,
"strictMetadataEmit": true, "strictMetadataEmit": true,
"fullTemplateTypeCheck": true, "fullTemplateTypeCheck": true,
"strictInjectionParameters": true, "strictInjectionParameters": true,
"enableResourceInlining": true "enableResourceInlining": true,
"compilationMode": "partial"
}, },
"exclude": [ "exclude": [
"src/test.ts", "src/test.ts",
@@ -2,7 +2,6 @@
"extends": "../../tsconfig.json", "extends": "../../tsconfig.json",
"compilerOptions": { "compilerOptions": {
"outDir": "../../out-tsc/lib", "outDir": "../../out-tsc/lib",
"target": "es2020",
"module": "es2015", "module": "es2015",
"moduleResolution": "node", "moduleResolution": "node",
"declaration": true, "declaration": true,
+542 -4
View File
@@ -11,17 +11,555 @@
"tslib": "^2.0.0" "tslib": "^2.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@angular/common": ">=14.0.0", "@angular/common": "^18.2.3",
"@angular/core": ">=14.0.0", "@angular/core": "^18.2.3",
"cesium": ">=1.82.1", "cesium": "^1.97.0",
"ngx-openlayers": "1.0.0-next.19",
"ol-cesium": ">=2.13.0" "ol-cesium": ">=2.13.0"
} }
}, },
"../../dist/libs/ng-openlayers": {
"version": "18.0.0",
"extraneous": true,
"license": "MPL-2.0",
"dependencies": {
"tslib": "^2.3.0"
},
"peerDependencies": {
"@angular/common": "^18.2.3",
"@angular/core": "^18.2.3",
"ol": "^8.2.0"
}
},
"dist/ng-openlayers": {
"extraneous": true
},
"node_modules/@angular/common": {
"version": "18.2.3",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.3.tgz",
"integrity": "sha512-NFL4yXXImSCH7i1xnHykUjHa9vl9827fGiwSV2mnf7LjSUsyDzFD8/54dNuYN9OY8AUD+PnK0YdNro6cczVyIA==",
"peer": true,
"dependencies": {
"tslib": "^2.3.0"
},
"engines": {
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"@angular/core": "18.2.3",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/core": {
"version": "18.2.3",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.3.tgz",
"integrity": "sha512-VGhMJxj7d0rYpqVfQrcGRB7EE/BCziotft/I/YPl6bOMPSAvMukG7DXQuJdYpNrr62ks78mlzHlZX/cdmB9Prw==",
"peer": true,
"dependencies": {
"tslib": "^2.3.0"
},
"engines": {
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"rxjs": "^6.5.3 || ^7.4.0",
"zone.js": "~0.14.10"
}
},
"node_modules/@cesium/engine": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/@cesium/engine/-/engine-11.0.0.tgz",
"integrity": "sha512-0z3mJNNly407h3/bAvGoGnjA0ygprkVz32z9x1VNmPXf9AuybKu7Q4wRrChUhC/qsNj3L45kP6KqyDuHSe2bhw==",
"peer": true,
"dependencies": {
"@tweenjs/tween.js": "^25.0.0",
"@zip.js/zip.js": "^2.7.34",
"autolinker": "^4.0.0",
"bitmap-sdf": "^1.0.3",
"dompurify": "^3.0.2",
"draco3d": "^1.5.1",
"earcut": "^3.0.0",
"grapheme-splitter": "^1.0.4",
"jsep": "^1.3.8",
"kdbush": "^4.0.1",
"ktx-parse": "^0.7.0",
"lerc": "^2.0.0",
"mersenne-twister": "^1.1.0",
"meshoptimizer": "^0.21.0",
"pako": "^2.0.4",
"protobufjs": "^7.1.0",
"rbush": "^4.0.0",
"topojson-client": "^3.1.0",
"urijs": "^1.19.7"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@cesium/widgets": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/@cesium/widgets/-/widgets-8.0.0.tgz",
"integrity": "sha512-Rnid5BbLBZjwFdbr3lgOwK3fhql/BeEbf5l9ZZE+Zc7V8Fb6wgKM8QmrL+bbJ+BtuiELp+SkNxcF97Ktifxb4g==",
"peer": true,
"dependencies": {
"@cesium/engine": "^11.0.0",
"nosleep.js": "^0.12.0"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@petamoriken/float16": {
"version": "3.8.7",
"resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.8.7.tgz",
"integrity": "sha512-/Ri4xDDpe12NT6Ex/DRgHzLlobiQXEW/hmG08w1wj/YU7hLemk97c+zHQFp0iZQ9r7YqgLEXZR2sls4HxBf9NA==",
"peer": true
},
"node_modules/@protobufjs/aspromise": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
"integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==",
"peer": true
},
"node_modules/@protobufjs/base64": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
"integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==",
"peer": true
},
"node_modules/@protobufjs/codegen": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
"integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==",
"peer": true
},
"node_modules/@protobufjs/eventemitter": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
"integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==",
"peer": true
},
"node_modules/@protobufjs/fetch": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
"integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
"peer": true,
"dependencies": {
"@protobufjs/aspromise": "^1.1.1",
"@protobufjs/inquire": "^1.1.0"
}
},
"node_modules/@protobufjs/float": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
"integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==",
"peer": true
},
"node_modules/@protobufjs/inquire": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
"integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==",
"peer": true
},
"node_modules/@protobufjs/path": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
"integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==",
"peer": true
},
"node_modules/@protobufjs/pool": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
"integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==",
"peer": true
},
"node_modules/@protobufjs/utf8": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
"integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==",
"peer": true
},
"node_modules/@tweenjs/tween.js": {
"version": "25.0.0",
"resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-25.0.0.tgz",
"integrity": "sha512-XKLA6syeBUaPzx4j3qwMqzzq+V4uo72BnlbOjmuljLrRqdsd3qnzvZZoxvMHZ23ndsRS4aufU6JOZYpCbU6T1A==",
"peer": true
},
"node_modules/@types/node": {
"version": "22.5.4",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz",
"integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==",
"peer": true,
"dependencies": {
"undici-types": "~6.19.2"
}
},
"node_modules/@types/rbush": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/@types/rbush/-/rbush-3.0.4.tgz",
"integrity": "sha512-knSt9cCW8jj1ZSFcFeBZaX++OucmfPxxHiRwTahZfJlnQsek7O0bazTJHWD2RVj9LEoejUYF2de3/stf+QXcXw==",
"peer": true
},
"node_modules/@zip.js/zip.js": {
"version": "2.7.52",
"resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.52.tgz",
"integrity": "sha512-+5g7FQswvrCHwYKNMd/KFxZSObctLSsQOgqBSi0LzwHo3li9Eh1w5cF5ndjQw9Zbr3ajVnd2+XyiX85gAetx1Q==",
"peer": true,
"engines": {
"bun": ">=0.7.0",
"deno": ">=1.0.0",
"node": ">=16.5.0"
}
},
"node_modules/autolinker": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/autolinker/-/autolinker-4.0.0.tgz",
"integrity": "sha512-fl5Kh6BmEEZx+IWBfEirnRUU5+cOiV0OK7PEt0RBKvJMJ8GaRseIOeDU3FKf4j3CE5HVefcjHmhYPOcaVt0bZw==",
"peer": true,
"dependencies": {
"tslib": "^2.3.0"
}
},
"node_modules/bitmap-sdf": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/bitmap-sdf/-/bitmap-sdf-1.0.4.tgz",
"integrity": "sha512-1G3U4n5JE6RAiALMxu0p1XmeZkTeCwGKykzsLTCqVzfSDaN6S7fKnkIkfejogz+iwqBWc0UYAIKnKHNN7pSfDg==",
"peer": true
},
"node_modules/cesium": {
"version": "1.121.1",
"resolved": "https://registry.npmjs.org/cesium/-/cesium-1.121.1.tgz",
"integrity": "sha512-WpdaGFd8qCOHiE9khV0sWWjCMXAX1U9Aou8MzMC/F0Akp6YqcOk4HLk4LLhZKeOjO/Bh27iTIW2mxEZ5+dtCxg==",
"peer": true,
"dependencies": {
"@cesium/engine": "^11.0.0",
"@cesium/widgets": "^8.0.0"
},
"engines": {
"node": ">=18.18.0"
}
},
"node_modules/color-name": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-2.0.0.tgz",
"integrity": "sha512-SbtvAMWvASO5TE2QP07jHBMXKafgdZz8Vrsrn96fiL+O92/FN/PLARzUW5sKt013fjAprK2d2iCn2hk2Xb5oow==",
"peer": true,
"engines": {
"node": ">=12.20"
}
},
"node_modules/color-parse": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/color-parse/-/color-parse-2.0.2.tgz",
"integrity": "sha512-eCtOz5w5ttWIUcaKLiktF+DxZO1R9KLNY/xhbV6CkhM7sR3GhVghmt6X6yOnzeaM24po+Z9/S1apbXMwA3Iepw==",
"peer": true,
"dependencies": {
"color-name": "^2.0.0"
}
},
"node_modules/color-rgba": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/color-rgba/-/color-rgba-3.0.0.tgz",
"integrity": "sha512-PPwZYkEY3M2THEHHV6Y95sGUie77S7X8v+h1r6LSAPF3/LL2xJ8duUXSrkic31Nzc4odPwHgUbiX/XuTYzQHQg==",
"peer": true,
"dependencies": {
"color-parse": "^2.0.0",
"color-space": "^2.0.0"
}
},
"node_modules/color-space": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-space/-/color-space-2.0.1.tgz",
"integrity": "sha512-nKqUYlo0vZATVOFHY810BSYjmCARrG7e5R3UE3CQlyjJTvv5kSSmPG1kzm/oDyyqjehM+lW1RnEt9It9GNa5JA==",
"peer": true
},
"node_modules/commander": {
"version": "2.20.3",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
"peer": true
},
"node_modules/dompurify": {
"version": "3.1.6",
"resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz",
"integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==",
"peer": true
},
"node_modules/draco3d": {
"version": "1.5.7",
"resolved": "https://registry.npmjs.org/draco3d/-/draco3d-1.5.7.tgz",
"integrity": "sha512-m6WCKt/erDXcw+70IJXnG7M3awwQPAsZvJGX5zY7beBqpELw6RDGkYVU0W43AFxye4pDZ5i2Lbyc/NNGqwjUVQ==",
"peer": true
},
"node_modules/earcut": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/earcut/-/earcut-3.0.0.tgz",
"integrity": "sha512-41Fs7Q/PLq1SDbqjsgcY7GA42T0jvaCNGXgGtsNdvg+Yv8eIu06bxv4/PoREkZ9nMDNwnUSG9OFB9+yv8eKhDg==",
"peer": true
},
"node_modules/geotiff": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/geotiff/-/geotiff-2.1.3.tgz",
"integrity": "sha512-PT6uoF5a1+kbC3tHmZSUsLHBp2QJlHasxxxxPW47QIY1VBKpFB+FcDvX+MxER6UzgLQZ0xDzJ9s48B9JbOCTqA==",
"peer": true,
"dependencies": {
"@petamoriken/float16": "^3.4.7",
"lerc": "^3.0.0",
"pako": "^2.0.4",
"parse-headers": "^2.0.2",
"quick-lru": "^6.1.1",
"web-worker": "^1.2.0",
"xml-utils": "^1.0.2",
"zstddec": "^0.1.0"
},
"engines": {
"node": ">=10.19"
}
},
"node_modules/geotiff/node_modules/lerc": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/lerc/-/lerc-3.0.0.tgz",
"integrity": "sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww==",
"peer": true
},
"node_modules/grapheme-splitter": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
"integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
"peer": true
},
"node_modules/jsep": {
"version": "1.3.9",
"resolved": "https://registry.npmjs.org/jsep/-/jsep-1.3.9.tgz",
"integrity": "sha512-i1rBX5N7VPl0eYb6+mHNp52sEuaS2Wi8CDYx1X5sn9naevL78+265XJqy1qENEk7mRKwS06NHpUqiBwR7qeodw==",
"peer": true,
"engines": {
"node": ">= 10.16.0"
}
},
"node_modules/kdbush": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz",
"integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==",
"peer": true
},
"node_modules/ktx-parse": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/ktx-parse/-/ktx-parse-0.7.1.tgz",
"integrity": "sha512-FeA3g56ksdFNwjXJJsc1CCc7co+AJYDp6ipIp878zZ2bU8kWROatLYf39TQEd4/XRSUvBXovQ8gaVKWPXsCLEQ==",
"peer": true
},
"node_modules/lerc": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/lerc/-/lerc-2.0.0.tgz",
"integrity": "sha512-7qo1Mq8ZNmaR4USHHm615nEW2lPeeWJ3bTyoqFbd35DLx0LUH7C6ptt5FDCTAlbIzs3+WKrk5SkJvw8AFDE2hg==",
"peer": true
},
"node_modules/long": {
"version": "5.2.3",
"resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
"integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==",
"peer": true
},
"node_modules/mersenne-twister": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/mersenne-twister/-/mersenne-twister-1.1.0.tgz",
"integrity": "sha512-mUYWsMKNrm4lfygPkL3OfGzOPTR2DBlTkBNHM//F6hGp8cLThY897crAlk3/Jo17LEOOjQUrNAx6DvgO77QJkA==",
"peer": true
},
"node_modules/meshoptimizer": {
"version": "0.21.0",
"resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.21.0.tgz",
"integrity": "sha512-WabtlpnK/GgD0GMwYd1fBTfYHf4MIcQPEg6dt7y4GuDcY51RzLSkSNE8ZogD7U3Vs2/fIf4z89TOLpA80EOnhg==",
"peer": true
},
"node_modules/nosleep.js": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/nosleep.js/-/nosleep.js-0.12.0.tgz",
"integrity": "sha512-9d1HbpKLh3sdWlhXMhU6MMH+wQzKkrgfRkYV0EBdvt99YJfj0ilCJrWRDYG2130Tm4GXbEoTCx5b34JSaP+HhA==",
"peer": true
},
"node_modules/ol": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/ol/-/ol-10.1.0.tgz",
"integrity": "sha512-/efepydpzhFoeczA9KAN5t7G0WpFhP46ZXEfSl6JbZ7ipQZ2axpkYB2qt0qcOUlPFYMt7/XQFApH652KB08tTg==",
"peer": true,
"dependencies": {
"@types/rbush": "^3.0.3",
"color-rgba": "^3.0.0",
"color-space": "^2.0.1",
"earcut": "^3.0.0",
"geotiff": "^2.0.7",
"pbf": "4.0.1",
"rbush": "^4.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/openlayers"
}
},
"node_modules/ol-cesium": {
"version": "2.17.0",
"resolved": "https://registry.npmjs.org/ol-cesium/-/ol-cesium-2.17.0.tgz",
"integrity": "sha512-XaMXjQYuq2eMPAgAx2e1wjN4I4QwfmPC+9YgU4xoMCj/MBj8oDQusyloQ4TaovypqbZg+0jJDDSZc7BhXckBwA==",
"peer": true,
"peerDependencies": {
"cesium": ">= 1.62.0",
"ol": ">= 6.0.1 || 7 || 8"
}
},
"node_modules/pako": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz",
"integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==",
"peer": true
},
"node_modules/parse-headers": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz",
"integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==",
"peer": true
},
"node_modules/pbf": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/pbf/-/pbf-4.0.1.tgz",
"integrity": "sha512-SuLdBvS42z33m8ejRbInMapQe8n0D3vN/Xd5fmWM3tufNgRQFBpaW2YVJxQZV4iPNqb0vEFvssMEo5w9c6BTIA==",
"peer": true,
"dependencies": {
"resolve-protobuf-schema": "^2.1.0"
},
"bin": {
"pbf": "bin/pbf"
}
},
"node_modules/protobufjs": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz",
"integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==",
"hasInstallScript": true,
"peer": true,
"dependencies": {
"@protobufjs/aspromise": "^1.1.2",
"@protobufjs/base64": "^1.1.2",
"@protobufjs/codegen": "^2.0.4",
"@protobufjs/eventemitter": "^1.1.0",
"@protobufjs/fetch": "^1.1.0",
"@protobufjs/float": "^1.0.2",
"@protobufjs/inquire": "^1.1.0",
"@protobufjs/path": "^1.1.2",
"@protobufjs/pool": "^1.1.0",
"@protobufjs/utf8": "^1.1.0",
"@types/node": ">=13.7.0",
"long": "^5.0.0"
},
"engines": {
"node": ">=12.0.0"
}
},
"node_modules/protocol-buffers-schema": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz",
"integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==",
"peer": true
},
"node_modules/quick-lru": {
"version": "6.1.2",
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.2.tgz",
"integrity": "sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==",
"peer": true,
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/quickselect": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/quickselect/-/quickselect-3.0.0.tgz",
"integrity": "sha512-XdjUArbK4Bm5fLLvlm5KpTFOiOThgfWWI4axAZDWg4E/0mKdZyI9tNEfds27qCi1ze/vwTR16kvmmGhRra3c2g==",
"peer": true
},
"node_modules/rbush": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/rbush/-/rbush-4.0.1.tgz",
"integrity": "sha512-IP0UpfeWQujYC8Jg162rMNc01Rf0gWMMAb2Uxus/Q0qOFw4lCcq6ZnQEZwUoJqWyUGJ9th7JjwI4yIWo+uvoAQ==",
"peer": true,
"dependencies": {
"quickselect": "^3.0.0"
}
},
"node_modules/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==",
"peer": true,
"dependencies": {
"protocol-buffers-schema": "^3.3.1"
}
},
"node_modules/rxjs": {
"version": "7.8.1",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
"integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
"peer": true,
"dependencies": {
"tslib": "^2.1.0"
}
},
"node_modules/topojson-client": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz",
"integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==",
"peer": true,
"dependencies": {
"commander": "2"
},
"bin": {
"topo2geo": "bin/topo2geo",
"topomerge": "bin/topomerge",
"topoquantize": "bin/topoquantize"
}
},
"node_modules/tslib": { "node_modules/tslib": {
"version": "2.5.0", "version": "2.5.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz",
"integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg=="
},
"node_modules/undici-types": {
"version": "6.19.8",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz",
"integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==",
"peer": true
},
"node_modules/urijs": {
"version": "1.19.11",
"resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz",
"integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==",
"peer": true
},
"node_modules/web-worker": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.3.0.tgz",
"integrity": "sha512-BSR9wyRsy/KOValMgd5kMyr3JzpdeoR9KVId8u5GVlTTAtNChlsE4yTxeY7zMdNSyOmoKBv8NH2qeRY9Tg+IaA==",
"peer": true
},
"node_modules/xml-utils": {
"version": "1.10.1",
"resolved": "https://registry.npmjs.org/xml-utils/-/xml-utils-1.10.1.tgz",
"integrity": "sha512-Dn6vJ1Z9v1tepSjvnCpwk5QqwIPcEFKdgnjqfYOABv1ngSofuAhtlugcUC3ehS1OHdgDWSG6C5mvj+Qm15udTQ==",
"peer": true
},
"node_modules/zone.js": {
"version": "0.14.10",
"resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.10.tgz",
"integrity": "sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ==",
"peer": true
},
"node_modules/zstddec": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/zstddec/-/zstddec-0.1.0.tgz",
"integrity": "sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg==",
"peer": true
} }
} }
} }
+6 -7
View File
@@ -4,14 +4,13 @@
"publishConfig": { "publishConfig": {
"registry": "https://repository.akkerweb.nl/repository/npm-hosted/" "registry": "https://repository.akkerweb.nl/repository/npm-hosted/"
}, },
"peerDependencies": {
"@angular/common": ">=14.0.0",
"@angular/core": ">=14.0.0",
"ngx-openlayers": "1.0.0-next.19",
"cesium": ">=1.82.1",
"ol-cesium": ">=2.13.0"
},
"dependencies": { "dependencies": {
"tslib": "^2.0.0" "tslib": "^2.0.0"
},
"peerDependencies": {
"@angular/common": "^18.2.3",
"@angular/core": "^18.2.3",
"cesium": "^1.97.0",
"ol-cesium": ">=2.13.0"
} }
} }
@@ -1,14 +1,15 @@
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { AppCommonModule } from '@farmmaps/common';
import { AppCommonMapModule } from '@farmmaps/common-map';
import { AngularOpenlayersModule } from '@farmmaps/ng-openlayers';
import { Switch2D3DComponent } from './components/olcs/switch2d3d/switch2d3d.component'; import { Switch2D3DComponent } from './components/olcs/switch2d3d/switch2d3d.component';
import { AppCommonModule} from '@farmmaps/common';
import { AppCommonMapModule} from '@farmmaps/common-map';
@NgModule({ @NgModule({
declarations: [Switch2D3DComponent], declarations: [Switch2D3DComponent],
imports: [ imports: [
AppCommonModule, AppCommonModule,
AppCommonMapModule AppCommonMapModule,
AngularOpenlayersModule,
], ],
exports: [Switch2D3DComponent] exports: [Switch2D3DComponent]
}) })
@@ -1,17 +1,15 @@
@import "~bootstrap/scss/bootstrap.scss";
.twotreed { .twotreed {
display:block; display:block;
width:2.5em; width:2.5em;
height:2.5em; height:2.5em;
background-color: $body-bg; background-color: var(--bs-body-bg);
background-size: contain; background-size: contain;
margin-top:0.5em; margin-top:0.5em;
text-align: center; text-align: center;
line-height: 2.5em; line-height: 2.5em;
border-radius: 1.75em; border-radius: 1.75em;
padding: 0; padding: 0;
color: $secondary; color: var(--bs-secondary);
} }
.fa-spinner { .fa-spinner {
@@ -1,6 +1,6 @@
import { Component, OnInit,Input,Host } from '@angular/core'; import { Component, OnInit,Input,Host } from '@angular/core';
import { Interaction} from 'ol/interaction'; import { Interaction} from 'ol/interaction';
import { MapComponent } from 'ngx-openlayers'; import { MapComponent } from '@farmmaps/ng-openlayers';
import OLCesium from 'olcs/OLCesium'; import OLCesium from 'olcs/OLCesium';
import RasterSynchronizer from 'olcs/RasterSynchronizer'; import RasterSynchronizer from 'olcs/RasterSynchronizer';
import VectorSynchronizer from 'olcs/VectorSynchronizer'; import VectorSynchronizer from 'olcs/VectorSynchronizer';
@@ -49,7 +49,11 @@ export class Switch2D3DComponent {
this.interactions=[]; this.interactions=[];
this.map.instance.getInteractions().forEach((i) => { this.map.instance.getInteractions().forEach((i) => {
if(i.getActive()) { if(i.getActive()) {
this.interactions.push(i); // AW-6241 TODO How to fix?
// error TS2345: Argument of type 'import("C:/Project/Farmmaps/FarmMapsLib/node_modules/ol/interaction/Interaction").default'
// is not assignable to parameter of type 'import("C:/Project/Farmmaps/FarmMapsLib/projects/common-map3d/node_modules/ol/interaction/Interaction").default'.
// Line below commented out
// this.interactions.push(i);
i.setActive(false); i.setActive(false);
} }
}); });
-11
View File
@@ -8,13 +8,6 @@ import {
platformBrowserDynamicTesting platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing'; } from '@angular/platform-browser-dynamic/testing';
declare const require: {
context(path: string, deep?: boolean, filter?: RegExp): {
keys(): string[];
<T>(id: string): T;
};
};
// First, initialize the Angular testing environment. // First, initialize the Angular testing environment.
getTestBed().initTestEnvironment( getTestBed().initTestEnvironment(
BrowserDynamicTestingModule, BrowserDynamicTestingModule,
@@ -22,7 +15,3 @@ getTestBed().initTestEnvironment(
teardown: { destroyAfterEach: false } teardown: { destroyAfterEach: false }
} }
); );
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);
+10 -1
View File
@@ -11,18 +11,27 @@
"emitDecoratorMetadata": true, "emitDecoratorMetadata": true,
"experimentalDecorators": true, "experimentalDecorators": true,
"importHelpers": true, "importHelpers": true,
"esModuleInterop": true,
"types": [], "types": [],
"lib": [ "lib": [
"dom", "dom",
"es2018" "es2018"
],
"paths": {
"@angular/*": [
"node_modules/@angular/*"
] ]
}
}, },
"angularCompilerOptions": { "angularCompilerOptions": {
"skipTemplateCodegen": true, "skipTemplateCodegen": true,
"strictMetadataEmit": true, "strictMetadataEmit": true,
"fullTemplateTypeCheck": true, "fullTemplateTypeCheck": true,
"strictInjectionParameters": true, "strictInjectionParameters": true,
"enableResourceInlining": true "enableResourceInlining": true,
"compilationMode": "partial"
}, },
"exclude": [ "exclude": [
"src/test.ts", "src/test.ts",
+3739 -16
View File
File diff suppressed because it is too large Load Diff
+17 -17
View File
@@ -1,25 +1,25 @@
{ {
"name": "@farmmaps/common", "name": "@farmmaps/common",
"version": "2.0.0", "version": "2.1.0",
"publishConfig": { "publishConfig": {
"registry": "https://repository.akkerweb.nl/repository/npm-hosted/" "registry": "https://repository.akkerweb.nl/repository/npm-hosted/"
}, },
"peerDependencies": { "peerDependencies": {
"@ng-bootstrap/ng-bootstrap": ">=10.0.0", "@ng-bootstrap/ng-bootstrap": "^17.0.1",
"@angular/common": ">=14.0.0", "@angular/common": "^18.2.3",
"@angular/core": ">=14.0.0", "@angular/core": "^18.2.3",
"@angular/forms": ">=14.0.0", "@angular/forms": "^18.2.3",
"@ngrx/effects": ">=14.0.0", "@ngrx/effects": "^18.0.2",
"@ngrx/router-store": ">=14.0.0", "@ngrx/router-store": "^18.0.2",
"@ngrx/store": ">=14.0.0", "@ngrx/store": "^18.0.2",
"tassign": ">=1.0.0", "tassign": "^1.0.0",
"bootstrap": ">=4.4.1", "bootstrap": "^5.3.3",
"@microsoft/signalr": ">=3.1.3", "@microsoft/signalr": "^3.1.16",
"ngx-uploadx": ">=5.1.0", "ngx-uploadx": "^6.2.0",
"angular-oauth2-oidc": ">=13.0.0", "angular-oauth2-oidc": "^17.0.2",
"moment": ">=2.27.0", "moment": "^2.29.4",
"ngx-avatar": ">=4.1.0", "ngx-avatars": "^1.8.0",
"ngx-image-cropper": ">=3.3.5", "ngx-image-cropper": "^7.0.0",
"ngx-clipboard": ">=14.0.1" "ngx-clipboard": "^16.0.0"
} }
} }
@@ -126,7 +126,7 @@ export class InitUserSettingsRoot implements Action {
export class InitUserSettingsRootSuccess implements Action { export class InitUserSettingsRootSuccess implements Action {
readonly type = INITUSERSETTINGSROOTSUCCESS; readonly type = INITUSERSETTINGSROOTSUCCESS;
constructor(public item: IItem ) { } constructor(public item: IListItem ) { }
} }
export class InitRoot implements Action { export class InitRoot implements Action {
@@ -7,6 +7,7 @@ import {NavBarGuard} from './services/nav-bar-guard.service';
import {FullScreenGuard} from './services/full-screen-guard.service'; import {FullScreenGuard} from './services/full-screen-guard.service';
import {SessionClearedComponent} from './components/session-cleared/session-cleared.component'; import {SessionClearedComponent} from './components/session-cleared/session-cleared.component';
import {NotFoundComponent} from './components/not-found/not-found.component'; import {NotFoundComponent} from './components/not-found/not-found.component';
import { ProductionGuard } from './services/production-guard.service';
const routes = [ const routes = [
@@ -21,7 +22,7 @@ const routes = [
}, },
{ {
path: '**', component: NotFoundComponent, path: '**', component: NotFoundComponent,
canActivate: [NavBarGuard] canActivate: [NavBarGuard, ProductionGuard]
} }
]; ];
@@ -18,6 +18,7 @@ import { EventService } from './services/event.service';
import { TypeaheadService } from './services/typeahead.service'; import { TypeaheadService } from './services/typeahead.service';
import { UserService } from './services/user.service'; import { UserService } from './services/user.service';
import { ImageService } from './services/image.service'; import { ImageService } from './services/image.service';
import { DownloadService } from './services/download.service';
import { GeolocatorService } from './services/geolocator.service'; import { GeolocatorService } from './services/geolocator.service';
import { WeatherService} from './services/weather.service'; import { WeatherService} from './services/weather.service';
import { AppConfig } from './shared/app.config'; import { AppConfig } from './shared/app.config';
@@ -48,6 +49,7 @@ export {
TypeaheadService, TypeaheadService,
UserService, UserService,
ImageService, ImageService,
DownloadService,
GeolocatorService, GeolocatorService,
WeatherService, WeatherService,
AppConfig, AppConfig,
+74 -116
View File
@@ -1,16 +1,16 @@
// angular modules // angular modules
import { NgModule, APP_INITIALIZER, ModuleWithProviders, Injector, Optional, SkipSelf,InjectionToken } from '@angular/core'; import { CommonModule } from '@angular/common';
import { CommonModule, DatePipe } from '@angular/common'; import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
import { HttpClientModule, HttpClient, HTTP_INTERCEPTORS } from '@angular/common/http'; import { InjectionToken, NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms'; import { FormsModule } from '@angular/forms';
// external modules // external modules
import { OAuthModule, AuthConfig, OAuthService, OAuthStorage } from 'angular-oauth2-oidc';
import { StoreModule, Store } from '@ngrx/store';
import { EffectsModule } from '@ngrx/effects';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
import { UploadxModule } from 'ngx-uploadx'; import { EffectsModule } from '@ngrx/effects';
import { StoreModule } from '@ngrx/store';
import { OAuthModule } from 'angular-oauth2-oidc';
import { ClipboardModule } from 'ngx-clipboard'; import { ClipboardModule } from 'ngx-clipboard';
import { UploadxModule } from 'ngx-uploadx';
// routing module // routing module
@@ -19,123 +19,70 @@ import { AppCommonRoutingModule } from './common-routing.module';
import { MODULE_NAME } from './module-name'; import { MODULE_NAME } from './module-name';
//components //components
import { SafePipe } from './shared/safe.pipe'; import { AvatarModule } from 'ngx-avatars';
import { AuthConfigFactory, IAuthconfigFactory } from './shared/authconfigFactory'; import { ImageCropperModule } from 'ngx-image-cropper';
import * as commonActions from './actions/app-common.actions';
import { AppMenuComponent } from './components/app-menu/app-menu.component';
import { AppComponent } from './components/app/app.component'; import { AppComponent } from './components/app/app.component';
import { AuthCallbackComponent } from './components/auth-callback/auth-callback.component'; import { AuthCallbackComponent } from './components/auth-callback/auth-callback.component';
import { SessionClearedComponent } from './components/session-cleared/session-cleared.component'; import { AvatarComponent } from './components/avatar/avatar.component';
import { ResumableFileUploadComponent } from './components/resumable-file-upload/resumable-file-upload.component';
import { NotFoundComponent } from './components/not-found/not-found.component';
import { NotImplementedComponent } from './components/not-implemented/not-implemented.component';
import { SidePanelComponent } from './components/side-panel/side-panel.component';
import { TimespanComponent } from './components/timespan/timespan.component';
import { TagInputComponent } from './components/tag-input/tag-input.component';
import { MenuBackgroundComponent } from './components/menu-background/menu-background.component';
import { HasPackageDirective} from './components/has-package/has-package.directive';
import { PackageExistsDirective} from './components/package-exists/package-exists.directive';
import { HasClaimDirective } from './components/has-claim/has-claim.directive';
import { HasRoleDirective } from './components/has-role/has-role.directive';
import { UserMenuComponent} from './components/user-menu/user-menu.component';
import { ThumbnailComponent } from './components/thumbnail/thumbnail.component';
import { Alert } from './enumerations/alert.enum';
import { IEventMessage } from './models/event.message';
import { IItem, Item } from './models/item';
import { WeatherCurrentObservation } from './models/weatherCurrentObservation';
import { IItemType } from './models/item.type';
import { IItemTypes } from './models/item.types';
import { IItemTask, ItemTask } from './models/itemTask';
import { IListItem } from './models/list.item';
import { ITypeaheadItem } from './models/typeahead.item'
import { IJsonline } from './models/json-line';
import { ISenMLItem } from './models/senml-item';
import { IPackage,IPackages } from './models/package';
import { IUser } from './models/user';
import { IQueryState } from './models/query.state';
import { IDataLayer } from './models/data.layer';
import { IColor,IGradientstop} from './models/gradient';
import * as commonActions from './actions/app-common.actions';
import * as commonReducers from './reducers/app-common.reducer';
import * as commonEffects from './effects/app-common.effects';
import { SecureOAuthStorage} from './shared/secureOAuthStorage';
import { GradientComponent } from './components/gradient/gradient.component';
import { GradientSelectComponent } from './components/gradient-select/gradient-select.component';
import { AppMenuComponent } from './components/app-menu/app-menu.component';
import { NotificationMenuComponent} from './components/notification-menu/notification-menu.component';
import { HelpMenuComponent} from './components/help-menu/help-menu.component';
import { BackButtonComponent } from './components/back-button/back-button.component'; import { BackButtonComponent } from './components/back-button/back-button.component';
import { EditImageModalComponent } from './components/edit-image-modal/edit-image-modal.component'; import { EditImageModalComponent } from './components/edit-image-modal/edit-image-modal.component';
import { AvatarComponent } from './components/avatar/avatar.component'; import { GradientSelectComponent } from './components/gradient-select/gradient-select.component';
import { AvatarModule } from 'ngx-avatar'; import { GradientComponent } from './components/gradient/gradient.component';
import { ImageCropperModule } from 'ngx-image-cropper'; import { HasClaimDirective } from './components/has-claim/has-claim.directive';
import { HasPackageDirective } from './components/has-package/has-package.directive';
import { HasRoleDirective } from './components/has-role/has-role.directive';
import { HelpMenuComponent } from './components/help-menu/help-menu.component';
import { ItemLinkComponent } from './components/item-link/item-link.component';
import { MenuBackgroundComponent } from './components/menu-background/menu-background.component';
import { NotFoundComponent } from './components/not-found/not-found.component';
import { NotImplementedComponent } from './components/not-implemented/not-implemented.component';
import { NotificationMenuComponent } from './components/notification-menu/notification-menu.component';
import { PackageExistsDirective } from './components/package-exists/package-exists.directive';
import { ResumableFileUploadComponent } from './components/resumable-file-upload/resumable-file-upload.component';
import { SessionClearedComponent } from './components/session-cleared/session-cleared.component';
import { SidePanelComponent } from './components/side-panel/side-panel.component';
import { TagInputComponent } from './components/tag-input/tag-input.component';
import { ThumbnailComponent } from './components/thumbnail/thumbnail.component';
import { TimespanComponent } from './components/timespan/timespan.component';
import { UserMenuComponent } from './components/user-menu/user-menu.component';
import * as commonEffects from './effects/app-common.effects';
import { Alert } from './enumerations/alert.enum';
import { IDataLayer } from './models/data.layer';
import { IEventMessage } from './models/event.message';
import { IColor, IGradientstop } from './models/gradient';
import { IItem, Item } from './models/item';
import { IItemType } from './models/item.type';
import { IItemTypes } from './models/item.types';
import { IItemLinkType } from './models/itemlink.type';
import { IItemTask, ItemTask } from './models/itemTask';
import { IJsonline } from './models/json-line';
import { IListItem } from './models/list.item';
import { IPackage, IPackages } from './models/package';
import { IQueryState } from './models/query.state';
import { ISenMLItem } from './models/senml-item';
import { ITypeaheadItem } from './models/typeahead.item';
import { IUrlType } from './models/url.type';
import { IUser } from './models/user';
import { WeatherCurrentObservation } from './models/weatherCurrentObservation';
import * as commonReducers from './reducers/app-common.reducer';
import { AuthConfigFactory, IAuthconfigFactory } from './shared/authconfigFactory';
import { SafePipe } from './shared/safe.pipe';
import { SecureOAuthStorage } from './shared/secureOAuthStorage';
export const FM_COMMON_STARTPAGE = new InjectionToken<string>('fm-common-startpage'); export const FM_COMMON_STARTPAGE = new InjectionToken<string>('fm-common-startpage');
export { export {
SafePipe, Alert, AppComponent, AuthCallbackComponent, AuthConfigFactory, AvatarComponent, BackButtonComponent, commonActions,
AuthCallbackComponent, commonReducers, EditImageModalComponent,
AppComponent,
SessionClearedComponent,
ResumableFileUploadComponent,
NotFoundComponent,
NotImplementedComponent,
SidePanelComponent,
TimespanComponent,
TagInputComponent,
UserMenuComponent,
ThumbnailComponent,
HasPackageDirective,
PackageExistsDirective,
HasClaimDirective,
HasRoleDirective,
Alert,
IEventMessage,
IItem,
Item,
IItemType,
IItemTypes,
IItemTask,
ItemTask,
IListItem,
ITypeaheadItem,
IUser,
IQueryState,
IPackage,
IPackages,
commonActions,
commonReducers,
IAuthconfigFactory,
AuthConfigFactory,
MenuBackgroundComponent,
SecureOAuthStorage,
WeatherCurrentObservation,
IJsonline,
ISenMLItem,
IDataLayer,
IColor,
IGradientstop,
BackButtonComponent,
AvatarComponent,
EditImageModalComponent,
GradientComponent, GradientComponent,
GradientSelectComponent GradientSelectComponent, HasClaimDirective, HasPackageDirective, HasRoleDirective, IAuthconfigFactory, IColor, IDataLayer, IEventMessage, IGradientstop, IItem, IItemLinkType, IItemTask, IItemType, IItemTypes, IJsonline, IListItem, IPackage,
IPackages, IQueryState, ISenMLItem, Item, ItemLinkComponent, ItemTask, ITypeaheadItem, IUrlType, IUser, MenuBackgroundComponent, NotFoundComponent,
NotImplementedComponent, PackageExistsDirective, ResumableFileUploadComponent, SafePipe, SecureOAuthStorage, SessionClearedComponent, SidePanelComponent, TagInputComponent, ThumbnailComponent, TimespanComponent, UserMenuComponent, WeatherCurrentObservation
}; };
@NgModule({ @NgModule({ declarations: [
imports: [
CommonModule,
HttpClientModule,
AppCommonRoutingModule,
StoreModule.forFeature(MODULE_NAME, commonReducers.reducer),
EffectsModule.forFeature([commonEffects.AppCommonEffects]),
OAuthModule.forRoot(),
NgbModule,
FormsModule,
UploadxModule,
ClipboardModule,
AvatarModule,
ImageCropperModule
],
declarations: [
AppComponent, AppComponent,
AuthCallbackComponent, AuthCallbackComponent,
SidePanelComponent, SidePanelComponent,
@@ -160,7 +107,8 @@ export {
BackButtonComponent, BackButtonComponent,
ThumbnailComponent, ThumbnailComponent,
EditImageModalComponent, EditImageModalComponent,
AvatarComponent AvatarComponent,
ItemLinkComponent
], ],
exports: [ exports: [
NgbModule, NgbModule,
@@ -189,8 +137,18 @@ export {
BackButtonComponent, BackButtonComponent,
ThumbnailComponent, ThumbnailComponent,
AvatarComponent, AvatarComponent,
ItemLinkComponent,
EditImageModalComponent EditImageModalComponent
] ], imports: [CommonModule,
}) AppCommonRoutingModule,
StoreModule.forFeature(MODULE_NAME, commonReducers.reducer),
EffectsModule.forFeature([commonEffects.AppCommonEffects]),
OAuthModule.forRoot(),
NgbModule,
FormsModule,
UploadxModule,
ClipboardModule,
AvatarModule,
ImageCropperModule], providers: [provideHttpClient(withInterceptorsFromDi())] })
export class AppCommonModule { export class AppCommonModule {
} }
@@ -1,9 +1,3 @@
/* Import Bootstrap & Fonts */
@import "~bootstrap/scss/bootstrap.scss";
// custom styles // custom styles
.btn:focus { .btn:focus {
@@ -16,7 +10,7 @@
.form-control:focus { .form-control:focus {
box-shadow: none; box-shadow: none;
border-color: $input-border-color; border-color: var(--bs-input-border-color);
} }
@@ -69,7 +69,7 @@ export class AppComponent implements OnInit, OnDestroy {
getActionFromEvent(event: IEventMessage): Action { getActionFromEvent(event: IEventMessage): Action {
let action: Action = null; let action: Action = null;
console.debug(`${event.eventType} Event received`); //console.debug(`${event.eventType} Event received`);
switch (event.eventType) { switch (event.eventType) {
case "ItemChanged": { case "ItemChanged": {
action = new commonActions.ItemChangedEvent(event.itemCode, event.attributes); action = new commonActions.ItemChangedEvent(event.itemCode, event.attributes);
@@ -115,18 +115,11 @@ export class AppComponent implements OnInit, OnDestroy {
return action; return action;
} }
async loadItemTypes() {
await this.itemTypeService$.load(this.appConfig$)
}
ngOnInit() { ngOnInit() {
this.InstallRouteEventHandler(); this.InstallRouteEventHandler();
this.InstallEventServiceEventHandler(); this.InstallEventServiceEventHandler();
this.InstallAuthenticationEventHandler(); this.InstallAuthenticationEventHandler();
this.InstallHealthCheck(); this.InstallHealthCheck();
//load item types
this.loadItemTypes();
} }
@HostListener('document:keyup', ['$event']) @HostListener('document:keyup', ['$event'])
@@ -146,12 +139,12 @@ export class AppComponent implements OnInit, OnDestroy {
private InstallAuthenticationEventHandler() { private InstallAuthenticationEventHandler() {
// auth event handler // auth event handler
this.oauthService$.events.subscribe((event) => { this.oauthService$.events.subscribe((event) => {
console.debug(event.type); //console.debug(event.type);
if (event.type == 'token_error' || event.type == 'silent_refresh_timeout' || event.type == 'logout') { if (event.type == 'token_error' || event.type == 'silent_refresh_timeout' || event.type == 'logout') {
const e = event as OAuthErrorEvent; const e = event as OAuthErrorEvent;
const p = e.params as any; const p = e.params as any;
if (event.type == 'silent_refresh_timeout' || event.type == 'logout' || (p.error && p.error == 'login_required')) { if (event.type == 'silent_refresh_timeout' || event.type == 'logout' || (p.error && p.error == 'login_required')) {
console.debug("Session expired"); //console.debug("Session expired");
this.router.navigate(['loggedout'], { queryParams: { redirectTo: this.router.url } }); this.router.navigate(['loggedout'], { queryParams: { redirectTo: this.router.url } });
} }
} }
@@ -1,4 +1,4 @@
import { Router, CanActivate } from '@angular/router'; import { Router } from '@angular/router';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { OAuthService } from 'angular-oauth2-oidc'; import { OAuthService } from 'angular-oauth2-oidc';
import { } from '@angular/router'; import { } from '@angular/router';
@@ -6,7 +6,7 @@ import { } from '@angular/router';
@Injectable({ @Injectable({
providedIn: 'root', providedIn: 'root',
}) })
export class AuthCallbackGuard implements CanActivate { export class AuthCallbackGuard {
constructor(private router$: Router,private oauthService$:OAuthService) {} constructor(private router$: Router,private oauthService$:OAuthService) {}
@@ -1,10 +1,10 @@
<span class="avatar-container" [title]="name"> <span class="avatar-container" [title]="name">
<ngx-avatar <ngx-avatars
class="farmmaps-avatar" class="farmmaps-avatar"
[src]="src" [src]="src"
[name]="name" [name]="name"
[size]="size" [size]="size"
[round]='true' [round]='true'
> >
</ngx-avatar> </ngx-avatars>
</span> </span>
@@ -1,12 +1,10 @@
@import "~bootstrap/scss/bootstrap.scss";
.back-button { .back-button {
cursor: default; cursor: default;
color: $primary; color: var(--bs-primary);
display: block; display: block;
} }
.back-button:hover { .back-button:hover {
cursor: pointer; cursor: pointer;
color: $secondary; color: var(--bs-secondary);
} }
@@ -1,5 +1,5 @@
import { Component, OnInit,ViewChild,ElementRef,EventEmitter, Output } from '@angular/core'; import { Component, OnInit,ViewChild,ElementRef,EventEmitter, Output } from '@angular/core';
import { HttpClient, HttpParams,HttpHeaders } from "@angular/common/http"; import { HttpClient, HttpParams, HttpHeaders } from "@angular/common/http";
import {NgbModal} from "@ng-bootstrap/ng-bootstrap" import {NgbModal} from "@ng-bootstrap/ng-bootstrap"
import { ImageCroppedEvent,LoadedImage } from 'ngx-image-cropper'; import { ImageCroppedEvent,LoadedImage } from 'ngx-image-cropper';
import {ImageService } from '../../services/image.service'; import {ImageService } from '../../services/image.service';
@@ -0,0 +1 @@
<span class="item-link" (click)="copylink(copiedtt)" triggers="manual" ngbTooltip="Link copied" #copiedtt="ngbTooltip" ><i ngbTooltip='Copy link' class="fa-solid fa-link"></i> <span *ngIf="showText" i18n>Copy link</span></span>
@@ -0,0 +1,44 @@
import { Component, Input, OnDestroy} from '@angular/core';
import { IItemLinkType} from '../../models/itemlink.type'
import { IUrlType } from '../../models/url.type';
import { ItemService } from '../../common-service.module';
import { Subscription } from 'rxjs';
import { ClipboardService } from 'ngx-clipboard'
@Component({
selector: 'fm-item-link',
templateUrl: './item-link.component.html'
})
export class ItemLinkComponent implements OnDestroy {
@Input() itemCode:string;
@Input() pathSuffix:string;
@Input() query:string;
@Input() validMinutes:number;
@Input() showText:boolean;
private sub : Subscription = null;
constructor(private itemService:ItemService,private clipboardService$: ClipboardService) { }
copylink(tooltip) {
if(this.sub) {
this.sub.unsubscribe();
}
let link: IItemLinkType = {itemcode:this.itemCode,pathsuffix:this.pathSuffix,query:this.query,validminutes:this.validMinutes}
this.sub = this.itemService.getItemLink(link).subscribe((url:IUrlType) => {
this.clipboardService$.copy(url.url);
tooltip.open();
setTimeout(() => {
tooltip.close();
}, 2000);
})
}
ngOnDestroy(): void {
if(this.sub) {
this.sub.unsubscribe();
}
}
}
@@ -1,7 +1,3 @@
/* Import Bootstrap & Fonts */
@import "~bootstrap/scss/bootstrap.scss";
div.resumable-file-upload { div.resumable-file-upload {
position: fixed; position: fixed;
right: 0px; right: 0px;
@@ -76,7 +72,7 @@ div.card-header span.fa {
} }
.upload-file.busy > div > span.fa-times { .upload-file.busy > div > span.fa-times {
color: $danger; color: var(--bs-danger);
width: 20px; width: 20px;
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
@@ -94,7 +90,7 @@ div.card-header span.fa {
} }
.upload-file > div.errormessage { .upload-file > div.errormessage {
color: $danger; color: var(--bs-danger);
display: none; display: none;
} }
@@ -1,4 +1,4 @@
<div class="side-panel hidden" [ngClass]="{'hidden':!visible,'collapsed':collapsed,'resizeable':(resizeable && mobile),'resizing':resizing,'left':left}" [ngStyle]="{'top':top}"> <div class="side-panel hidden" [ngClass]="{'hidden':!visible,'collapsed':collapsed,'resizeable':(resizeable && mobile),'resizing':resizing,'left':left,'extrawide':extrawide}" [ngStyle]="{'top':top}">
<div *ngIf="collapsable" class="arrow rounded-end p-2" (click)="handleToggleClick($event)"> <div *ngIf="collapsable" class="arrow rounded-end p-2" (click)="handleToggleClick($event)">
<i class="fal fa-chevron-left" aria-hidden="true"></i> <i class="fal fa-chevron-left" aria-hidden="true"></i>
</div> </div>
@@ -15,7 +15,7 @@
} }
.side-panel.collapsed { .side-panel.collapsed {
left:-22rem; left:-44rem;
} }
.arrow { .arrow {
@@ -76,7 +76,6 @@ div.resizegrip > span {
.resizeable .resizegrip { .resizeable .resizegrip {
display:block; display:block;
} }
.resizeable .content { .resizeable .content {
@@ -94,10 +93,17 @@ div.resizegrip > span {
.side-panel.hidden { .side-panel.hidden {
width: 22rem; width: 22rem;
left:-24rem; left:-22rem;
height:100%; height:100%;
top: 0px; top: 0px;
} }
.side-panel.extrawide {
top:0px;
width: 44rem;
height:100%;
left:0px;
}
} }
@@ -1,4 +1,4 @@
import { Component, Input,Output,ViewChild,EventEmitter, ElementRef,OnChanges,SimpleChanges,HostListener,ChangeDetectorRef } from '@angular/core'; import { Component, Input,Output,ViewChild,EventEmitter, ElementRef,OnChanges,SimpleChanges,HostListener,ChangeDetectorRef, ViewEncapsulation } from '@angular/core';
@Component({ @Component({
selector: 'fm-side-panel', selector: 'fm-side-panel',
@@ -13,6 +13,7 @@ export class SidePanelComponent implements OnChanges {
@Input() public collapsable: boolean; @Input() public collapsable: boolean;
@Input() public resizeable = false; @Input() public resizeable = false;
@Input() public left = false; @Input() public left = false;
@Input() public extrawide: boolean;
@Output() onResize: EventEmitter<number> = new EventEmitter<number>(); @Output() onResize: EventEmitter<number> = new EventEmitter<number>();
@ViewChild("resizeGrip") elementView: ElementRef; @ViewChild("resizeGrip") elementView: ElementRef;
public mobile = true; public mobile = true;
@@ -41,7 +42,7 @@ export class SidePanelComponent implements OnChanges {
} }
ngAfterViewInit() { ngAfterViewInit() {
this.parentHeight = this.element.nativeElement.offsetParent.clientHeight; this.parentHeight = this.element.nativeElement.offsetParent?.clientHeight;
this.setTop(); this.setTop();
} }
@@ -5,6 +5,9 @@
<div class="card" *ngIf="user"> <div class="card" *ngIf="user">
<div class="card-body"> <div class="card-body">
<div class="username">{{user.name}}</div> <div class="username">{{user.name}}</div>
<div *ngIf="getProvider(); let provider">
<small><span i18n>Provider</span><span> {{provider}}</span></small>
</div>
<div><a href="#" (click)="logout($event)" i18n>logout</a></div> <div><a href="#" (click)="logout($event)" i18n>logout</a></div>
</div> </div>
</div> </div>
@@ -20,11 +20,14 @@ export class UserMenuComponent implements OnInit {
ngOnInit(): void { ngOnInit(): void {
} }
getLetter():string { getProvider():string | null {
if (this.user && this.user.firstName && this.user.lastName) const ownedClaims = this.oauthService.getIdentityClaims();
return this.user.firstName.substr(0,1).toUpperCase() + if(ownedClaims) {
this.user.lastName.substr(0,1).toUpperCase(); if (ownedClaims["idp"] != "local") {
return this.user && this.user.name ? this.user.name.substr(0,1).toUpperCase():""; return ownedClaims["idp"];
}
}
return null;
} }
logout(event:MouseEvent) { logout(event:MouseEvent) {
@@ -85,9 +85,8 @@ export class AppCommonEffects {
initUserSettingsRoot$ = createEffect(() => this.actions$.pipe( initUserSettingsRoot$ = createEffect(() => this.actions$.pipe(
ofType(appCommonActions.INITUSERSETTINGSROOT), ofType(appCommonActions.INITUSERSETTINGSROOT),
withLatestFrom(this.store$.select(appCommonReducers.SelectGetUser)), switchMap(_ => {
switchMap(([, user]) => { return this.folderService$.getFolder('my_settings').pipe(
return this.itemService$.getItem(user.code + ':USER_SETTINGS').pipe(
switchMap((item) => of(new appCommonActions.InitUserSettingsRootSuccess(item))), switchMap((item) => of(new appCommonActions.InitUserSettingsRootSuccess(item))),
catchError(error => of(new appCommonActions.Fail(error))) catchError(error => of(new appCommonActions.Fail(error)))
) )
@@ -149,7 +148,7 @@ export class AppCommonEffects {
ofType(appCommonActions.VIEWITEM), ofType(appCommonActions.VIEWITEM),
withLatestFrom(this.store$.select(appCommonReducers.selectGetItemTypes)), withLatestFrom(this.store$.select(appCommonReducers.selectGetItemTypes)),
switchMap(([action, itemtypes]) => { switchMap(([action, itemtypes]) => {
const a = action as appCommonActions.EditItem; const a = action as appCommonActions.ViewItem;
const itemType = itemtypes[a.item.itemType]; const itemType = itemtypes[a.item.itemType];
const viewer = itemType.viewer; const viewer = itemType.viewer;
const editor = itemType.editor; const editor = itemType.editor;
@@ -170,7 +169,7 @@ export class AppCommonEffects {
this.router$.navigate(['/map', query ]) this.router$.navigate(['/map', query ])
}else if(viewer == 'edit_in_editor') { }else if(viewer == 'edit_in_editor') {
this.router$.navigate(['/editor', editor, 'item', a.item.code]) this.router$.navigate(['/editor', editor, 'item', a.item.code])
} else { } else if(viewer) {
this.router$.navigate(['/viewer', viewer, 'item', a.item.code]) this.router$.navigate(['/viewer', viewer, 'item', a.item.code])
} }
return []; return [];
@@ -182,18 +181,18 @@ export class AppCommonEffects {
ofType(appCommonActions.FAIL), ofType(appCommonActions.FAIL),
map((action) => { map((action) => {
const failAction = action as appCommonActions.Fail; const failAction = action as appCommonActions.Fail;
console.debug(failAction.payload) //console.debug(failAction.payload)
return null; return null;
})),{dispatch:false}); })),{dispatch:false});
online$ = createEffect(() => this.actions$.pipe( online$ = createEffect(() => this.actions$.pipe(
ofType(appCommonActions.ONLINE), ofType(appCommonActions.ONLINE),
switchMap((action) => { switchMap((action) => {
console.debug("Online: Check token"); //console.debug("Online: Check token");
if(!this.oauthService$.hasValidAccessToken()) { if(!this.oauthService$.hasValidAccessToken()) {
console.debug("No valid token, try to refresh"); //console.debug("No valid token, try to refresh");
if(this.oauthService$.getRefreshToken() != null ) { if(this.oauthService$.getRefreshToken() != null ) {
console.debug("We have a refresh token"); //console.debug("We have a refresh token");
this.oauthService$.refreshToken(); this.oauthService$.refreshToken();
} }
} }
+1
View File
@@ -25,6 +25,7 @@ export class Item implements IItem {
public state?: number; public state?: number;
public data?:any; public data?:any;
public isEditable?:boolean; public isEditable?:boolean;
public owner?: string;
constructor() { constructor() {
} }
@@ -0,0 +1,6 @@
export interface IItemLinkType {
itemcode: string;
pathsuffix?: string;
query?: string;
validminutes?: number;
}
@@ -11,4 +11,5 @@ export interface IListItem {
size?: number; size?: number;
state?: number; state?: number;
thumbnail?: boolean; thumbnail?: boolean;
owner?: string;
} }
@@ -0,0 +1,3 @@
export interface IUrlType {
url: string;
}
@@ -64,6 +64,8 @@ export function reducer(state = initialState, action: appCommonActions.Actions )
code:a.user.code, code:a.user.code,
email:claims["email"]!== undefined ? claims["email"] : a.user.name, email:claims["email"]!== undefined ? claims["email"] : a.user.name,
name:claims["name"]!== undefined?claims["name"] : a.user.email, name:claims["name"]!== undefined?claims["name"] : a.user.email,
lastName:a.user.lastName,
firstName:a.user.firstName,
claims:claims, claims:claims,
searchable: false searchable: false
}; };
@@ -1,9 +1,11 @@
import { HttpClient, HttpParams } from "@angular/common/http";
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { IItem } from '../models/item'; import { IItem } from '../models/item';
import { HttpClient, HttpParams } from "@angular/common/http"; import { IItemTask } from '../models/itemTask';
import { IUser } from '../models/user';
import { AppConfig } from "../shared/app.config"; import { AppConfig } from "../shared/app.config";
import {ItemTypeService} from './itemtype.service'; import { ItemTypeService } from './itemtype.service';
@Injectable({ @Injectable({
providedIn: 'root', providedIn: 'root',
@@ -42,4 +44,12 @@ export class AdminService {
deleteItem(code: string): Observable<any> { deleteItem(code: string): Observable<any> {
return this.httpClient.delete<any>(`${this.ApiEndpoint()}/api/v1/admin/${code}`); return this.httpClient.delete<any>(`${this.ApiEndpoint()}/api/v1/admin/${code}`);
} }
getAllUsers(): Observable<IUser[]> {
return this.httpClient.get<IUser[]>(`${this.ApiEndpoint()}/api/v1/admin/users`);
}
postItemTask(item: IItem, task: IItemTask): Observable<IItemTask> {
return this.httpClient.post<IItemTask>(`${this.ApiEndpoint()}/api/v1/admin/${item.code}/tasks`, task);
}
} }
@@ -1,11 +1,5 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { import { Router, Route, ActivatedRouteSnapshot, RouterStateSnapshot, UrlSegment, UrlTree } from '@angular/router';
CanActivate, Router, CanLoad, Route, CanActivateChild ,
ActivatedRouteSnapshot,
RouterStateSnapshot,
UrlSegment,
UrlTree
} from '@angular/router';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
@@ -19,49 +13,58 @@ import * as appCommonReducer from '../reducers/app-common.reducer';
@Injectable({ @Injectable({
providedIn: 'root', providedIn: 'root',
}) })
export class AuthGuard implements CanActivate, CanLoad, CanActivateChild { export class AuthGuard {
constructor(private oauthService: OAuthService, private router: Router, private store: Store<appCommonReducer.State>) { } constructor(private oauthService: OAuthService, private router: Router, private store: Store<appCommonReducer.State>) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | UrlTree | Observable<boolean | UrlTree> | Promise<boolean | UrlTree> { canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | UrlTree | Observable<boolean | UrlTree> | Promise<boolean | UrlTree> {
console.debug("AuthGuard->canActivate", route, state); //console.debug("AuthGuard->canActivate", route, state);
const url: string = state.url; const url: string = state.url;
return this.checkLogin(url, route); return this.checkLogin(url, route);
} }
canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | UrlTree | Observable<boolean | UrlTree> | Promise<boolean | UrlTree> { canActivateChild(childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | UrlTree | Observable<boolean | UrlTree> | Promise<boolean | UrlTree> {
console.debug("AuthGuard->canActivateChild", childRoute, state); //console.debug("AuthGuard->canActivateChild", childRoute, state);
const url: string = state.url; const url: string = state.url;
return this.checkLogin(url, childRoute); return this.checkLogin(url, childRoute);
} }
canLoad(route: Route, segments: UrlSegment[]): boolean | UrlTree | Observable<boolean | UrlTree> | Promise<boolean | UrlTree> { canLoad(route: Route, segments: UrlSegment[]): boolean | UrlTree | Observable<boolean | UrlTree> | Promise<boolean | UrlTree> {
console.debug("AuthGuard->canLoad", route, segments); //console.debug("AuthGuard->canLoad", route, segments);
return this.checkLogin(route.path, null); return this.checkLogin(route.path, null);
} }
checkLogin(url: string, route: ActivatedRouteSnapshot): boolean { checkLogin(url: string, route: ActivatedRouteSnapshot): boolean {
console.debug("AuthGuard->checkLogin", url, route); //console.debug("AuthGuard->checkLogin", url, route);
if (!this.oauthService.hasValidAccessToken()) { if (!this.oauthService.hasValidAccessToken()) {
console.debug("No valid token"); //console.debug("No valid token");
this.oauthService.initCodeFlow(url); this.oauthService.initCodeFlow(url);
return false; return false;
} else { } else {
const requiredRoleClaim = route.data.role; const requiredRoleClaim = route.data.role;
if (!requiredRoleClaim) { return true; } if (!requiredRoleClaim) { return true; }
const ownedClaims = this.oauthService.getIdentityClaims(); const ownedClaims = this.oauthService.getIdentityClaims();
if (!ownedClaims) { console.debug("No owned claims"); return false; } if (!ownedClaims) {
//console.debug("No owned claims");
return false;
}
const ownedRoleClaims: string[] = ownedClaims['role']; const ownedRoleClaims: string[] = ownedClaims['role'];
if (!ownedRoleClaims) { console.debug("No owned role claims"); return false; } if (!ownedRoleClaims) {
// console.debug("No owned role claims");
return false;
}
if (Array.isArray(ownedRoleClaims)) { if (Array.isArray(ownedRoleClaims)) {
if (ownedRoleClaims.findIndex(r => r === requiredRoleClaim) <= -1) { console.debug("No required role claim", ownedRoleClaims, requiredRoleClaim); return false; } if (ownedRoleClaims.findIndex(r => r === requiredRoleClaim) <= -1) {
//console.debug("No required role claim", ownedRoleClaims, requiredRoleClaim);
return false;
}
} }
else { else {
if (ownedRoleClaims !== requiredRoleClaim) { console.debug("No required role claim", ownedRoleClaims, requiredRoleClaim); return false; } if (ownedRoleClaims !== requiredRoleClaim) { console.debug("No required role claim", ownedRoleClaims, requiredRoleClaim); return false; }
} }
console.debug("Has required role claim", requiredRoleClaim); //console.debug("Has required role claim", requiredRoleClaim);
return true; return true;
} }
} }
@@ -0,0 +1,29 @@
import { Injectable } from '@angular/core';
import { Observable, of } from 'rxjs';
import { IItem } from '../models/item';
import { HttpClient } from "@angular/common/http";
import { AppConfig } from "../shared/app.config";
import {ItemTypeService} from './itemtype.service';
@Injectable({
providedIn: 'root',
})
export class DownloadService {
constructor(public httpClient: HttpClient, public appConfig: AppConfig,private itemTypeService:ItemTypeService) {
}
ApiEndpoint() {
return this.appConfig.getConfig("apiEndPoint");
}
getData(itemCode: string): Observable<any> {
return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/items/${itemCode}/data`);
}
getData2(item: IItem): Observable<any> {
if (item.size > 0) {
return this.httpClient.get<any>(`${this.ApiEndpoint()}/api/v1/items/${item.code}/data`)
}
return of({});
}
}
@@ -1,17 +1,17 @@
import { Injectable } from '@angular/core'; import {Injectable} from '@angular/core';
import { Observable , Observer } from 'rxjs'; import {Observable} from 'rxjs';
import {map} from 'rxjs/operators'; import {IListItem} from '../models/list.item';
import { IListItem } from '../models/list.item'; import {IItem} from '../models/item';
import { IItem } from '../models/item'; import { HttpClient } from '@angular/common/http';
import { HttpClient } from "@angular/common/http"; import {AppConfig} from '../shared/app.config';
import { AppConfig } from "../shared/app.config"; import {ItemService} from './item.service';
@Injectable({ @Injectable({
providedIn: 'root', providedIn: 'root',
}) })
export class FolderService { export class FolderService {
constructor(public httpClient: HttpClient, public appConfig: AppConfig) { constructor(public httpClient: HttpClient, public appConfig: AppConfig, public itemService: ItemService) {
} }
ApiEndpoint() { ApiEndpoint() {
@@ -22,20 +22,25 @@ export class FolderService {
return this.httpClient.get<IListItem>(`${this.ApiEndpoint()}/api/v1/folders/${code}`); return this.httpClient.get<IListItem>(`${this.ApiEndpoint()}/api/v1/folders/${code}`);
} }
getMyRoot(): Observable<IListItem> {
return this.httpClient.get<IListItem>(`${this.ApiEndpoint()}/api/v1/folders/my_root`);
}
getMyRoots(): Observable<IListItem[]> { getMyRoots(): Observable<IListItem[]> {
return this.httpClient.get<IListItem[]>(`${this.ApiEndpoint()}/api/v1/folders/my_roots`); return this.httpClient.get<IListItem[]>(`${this.ApiEndpoint()}/api/v1/folders/my_roots`);
} }
getFolderParents(code: string): Observable<IListItem[]> { getFolderParents(code: string): Observable<IListItem[]> {
return this.httpClient.get<IListItem[]>(`${this.ApiEndpoint()}/api/v1/folders/${code}/parents`); return this.itemService.getBreadcrumbs(code);
} }
getChildFolders(code: string): Observable<IListItem[]> { getChildFolders(code: string): Observable<IListItem[]> {
return this.httpClient.get<IListItem[]>(`${this.ApiEndpoint()}/api/v1/folders/${code}/listfolders`); const folderItemTypes = "FOLDER,FTP_FOLDER";
return this.itemService.getChildItemList(code, folderItemTypes);
} }
getItems(code: string,skip:number, take:number): Observable<IListItem[]> { getItems(code: string,skip:number, take:number): Observable<IListItem[]> {
return this.httpClient.get<IListItem[]>(`${this.ApiEndpoint()}/api/v1/folders/${code}/list?skip=${skip}&take=${take}`); return this.itemService.getChildItemList(code, null, null, 1, true, null, null, skip, take);
} }
moveItem(itemCode: string, newParentCode: string): Observable<IListItem> { moveItem(itemCode: string, newParentCode: string): Observable<IListItem> {
@@ -1,5 +1,5 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { CanActivate, CanActivateChild, ActivatedRouteSnapshot, RouterStateSnapshot} from '@angular/router'; import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';
import { Store } from '@ngrx/store'; import { Store } from '@ngrx/store';
@@ -10,7 +10,7 @@ import * as appCommonActions from '../actions/app-common.actions';
@Injectable({ @Injectable({
providedIn: 'root', providedIn: 'root',
}) })
export class FullScreenGuard implements CanActivate,CanActivateChild { export class FullScreenGuard {
private loginDispatched = false; private loginDispatched = false;
constructor(private store: Store<appCommonReducer.State> ) { } constructor(private store: Store<appCommonReducer.State> ) { }
@@ -1,7 +1,7 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { IUser } from '../models/user'; import { IUser } from '../models/user';
import { HttpClient,HttpHeaders } from "@angular/common/http"; import { HttpClient, HttpHeaders } from "@angular/common/http";
import { AppConfig } from "../shared/app.config"; import { AppConfig } from "../shared/app.config";
@Injectable({ @Injectable({

Some files were not shown because too many files have changed in this diff Show More