223 Commits
Author SHA1 Message Date
peter 4bef16aa2b Merge branch 'feature/AW6526Angular19' into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2026-01-20 16:22:54 +01:00
peter 05bc18c291 Angular v19 2026-01-20 16:22:33 +01:00
peter 35ab2f7c90 Angular v19 2026-01-20 16:03:07 +01:00
peter 2eca9b2562 Angular v19 2026-01-20 15:57:18 +01:00
jenkins e0c89f4358 [ci skip] Updated packages #2600
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2026-01-20 14:36:58 +00:00
francisco 604c1176c3 Merge branch 'develop'
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-12-10 14:20:39 +01:00
jenkins 0ff8992874 [ci skip] Updated packages #2585
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-11-13 12:46:51 +00:00
peter b5b84c2547 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2025-11-13 13:43:49 +01:00
peter c2b016b2b9 AW-7096 Fix 2025-11-13 13:43:44 +01:00
jenkins d44531274b [ci skip] Updated packages #2584
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-11-11 13:10:21 +00:00
peter c52ee36d1b AW-6498
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-11-11 14:08:15 +01:00
jenkins 9b86927e2c [ci skip] Updated packages #2583
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-10-16 09:33:10 +00:00
jenkins e224b80995 Updated packages #2582
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-10-16 09:25:48 +00:00
jenkins 88f3d9ef1a [ci skip] Updated packages #2581
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-10-09 13:09:39 +00:00
peter 6737029a61 AW-7050 Remove FeatureListFeatureObservationComponent
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-10-09 15:00:06 +02:00
jenkins d4786564bd [ci skip] Updated packages #2579
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-09-02 07:33:57 +00:00
peter 6fd69d7999 AW-6981 Support for backup and restore (current) features
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-09-02 09:32:00 +02:00
jenkins 4ec75b3d5a [ci skip] Updated packages #2578
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-08-31 08:49:24 +00:00
peter 04e3f1e71f AW-6981 Retrieve childs with ail
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-08-31 10:47:25 +02:00
peter f66187d3a2 Merge branch 'develop'
FarmMaps/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
# Conflicts:
#	package-lock.json
#	package.json
2025-08-21 10:21:42 +02:00
jenkins df77631299 [ci skip] Updated packages #2577
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-08-14 07:28:29 +00:00
peter a8d0f05c81 Aw6981 Add observation components
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-08-14 09:26:36 +02:00
jenkins df0d13e5dd [ci skip] Updated packages #69
FarmMaps/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-08-11 08:15:09 +00:00
jenkins c79637be77 [ci skip] Updated packages #2576
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-08-11 08:14:46 +00:00
Willem Dantuma b347220dd4 Fix flag check
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2025-08-11 10:12:09 +02:00
Willem Dantuma b5e11da9a8 Fix flag check
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-08-11 10:11:45 +02:00
jenkins edeadef96f [ci skip] Updated packages #68
FarmMaps/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-08-11 07:48:07 +00:00
Willem Dantuma 267a299589 Add hideShowLayerValues flag for fm-map-map
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2025-08-11 09:43:44 +02:00
jenkins 9d45c25a95 [ci skip] Updated packages #2575
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-08-11 07:42:16 +00:00
Willem Dantuma 2ffce50c47 Add hideShowLayerValues flag for fm-map-map
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-08-11 09:40:00 +02:00
jenkins f50ff878e0 [ci skip] Updated packages #2574
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-07-30 09:49:37 +00:00
peter 09c74448a8 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-07-30 11:47:01 +02:00
peter 205b73b30e AW-4935 Tools in croppingscheme weer goed zetten op mobile 2025-07-30 11:46:58 +02:00
jenkins 313cc59fe7 [ci skip] Updated packages #2573
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-07-30 09:20:14 +00:00
peter c3fb42c65f AW-4935 Tools in croppingscheme weer goed zetten op mobile
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-07-30 11:17:55 +02:00
jenkins 6b73fb0d55 [ci skip] Updated packages #2572
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-06-03 10:27:08 +00:00
peter ea641caf38 AW-6806 Allow delete
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-06-03 12:25:16 +02:00
peter ac15b2018d AW-6806 Allow delete
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2025-06-03 12:15:14 +02:00
jenkins fe73f615ad [ci skip] Updated packages #2570
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-05-13 09:34:44 +00:00
jenkins 3e1b3ee78e Updated packages #2569
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-05-13 09:28:46 +00:00
jenkins 58391b7828 [ci skip] Updated packages #2568
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-05-12 13:54:16 +00:00
jenkins b2b2a1e8be Updated packages #2567
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-05-12 13:48:35 +00:00
jenkins 0d96a1be4f [ci skip] Updated packages #2566
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-05-12 11:01:08 +00:00
peter d599430cb0 AW-6649 Layers dialog => rename Data to Overlay slide, move below Overlays
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-05-12 12:59:12 +02:00
jenkins e17911b339 [ci skip] Updated packages #2565
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-04-30 11:27:32 +00:00
jenkins 9d6cbffb3d Updated packages #2564
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-04-30 11:20:25 +00:00
jenkins a11eb81e73 [ci skip] Updated packages #2563
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-04-30 09:21:42 +00:00
jenkins 4fc3ad933c Updated packages #2562
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-04-30 09:14:15 +00:00
jenkins e6d90c9e61 [ci skip] Updated packages #2561
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-04-30 06:26:59 +00:00
peter 250b3841fe Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-04-30 08:25:09 +02:00
peter 51291cd86f AW-6801 Add switch to add full path to items result 2025-04-30 08:25:00 +02:00
jenkins e9e3b719a4 [ci skip] Updated packages #2560
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-04-29 19:35:08 +00:00
jenkins 1c0ad57b0a Updated packages #2559
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-04-29 19:28:05 +00:00
jenkins 8684ba25c8 [ci skip] Updated packages #2558
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-04-28 08:22:16 +00:00
peter 78ca3044cf Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-04-28 10:20:22 +02:00
peter 2e55b5a70e AW-3101 vnd.farmmaps.itemtype.shape.processed download as shape (zip) 2025-04-28 10:20:19 +02:00
jenkins af0a3dca2d [ci skip] Updated packages #2557
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-04-28 06:47:11 +00:00
peter f039898c26 AW-3101 vnd.farmmaps.itemtype.geotiff.processed -> Download as tiff
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-04-28 08:45:05 +02:00
jenkins ab19b1c2ce [ci skip] Updated packages #2556
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-04-24 14:18:56 +00:00
peter a2641f8ea5 AW-3101 Alleen relevante plaatje downloaden bij satelliet
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-04-24 16:15:57 +02:00
jenkins d6841c8f83 [ci skip] Updated packages #2555
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-04-23 14:39:24 +00:00
peter 187b24ab97 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-04-23 16:37:29 +02:00
peter b80ddf7854 AW-6790 Admin -> users 2025-04-23 16:37:26 +02:00
jenkins 79bc3d9082 [ci skip] Updated packages #2554
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-04-23 13:46:30 +00:00
peter 1c92ad4c28 AW-6790 Admin -> users
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-04-23 15:44:36 +02:00
jenkins 61e6de0052 [ci skip] Updated packages #2553
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-04-16 13:45:05 +00:00
peter fb25b92349 AW-6792 Update API
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-04-16 15:43:08 +02:00
jenkins e78f2893ae [ci skip] Updated packages #2552
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-04-14 12:57:56 +00:00
peter 51170b45e9 AW-6649 overlays boven luchtfoto’s
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-04-14 14:56:06 +02:00
jenkins 7365bea145 [ci skip] Updated packages #2551
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-04-14 11:36:12 +00:00
peter dc096065b4 AW-6649 Achtergrondlagen
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-04-14 13:34:18 +02:00
jenkins b9850311ea [ci skip] Updated packages #2550
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-04-14 10:31:45 +00:00
peter ee9c050db3 AW-6649 Achtergrondlagen
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-04-14 12:29:56 +02:00
jenkins 95200d9920 [ci skip] Updated packages #2549
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-04-11 21:23:04 +00:00
jenkins ee1ce21cca Updated packages #2548
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-04-11 21:16:35 +00:00
jenkins 467f7447bf [ci skip] Updated packages #2547
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-04-11 12:01:45 +00:00
jenkins 1df4496058 Updated packages #2546
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-04-11 11:55:57 +00:00
jenkins 134220d75f [ci skip] Updated packages #67
FarmMaps/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-04-05 06:32:27 +00:00
Willem Dantuma 80ef4ed6fe Merge branch 'develop'
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
2025-04-05 08:30:19 +02:00
jenkins 2137f3f07e [ci skip] Updated packages #2545
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-03-24 08:17:20 +00:00
peter a46e8040b2 AW-6756 Settingsknop Explorer dezelfde kleur als het logo van de explorer.
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-03-24 09:13:47 +01:00
jenkins 2ca9730735 [ci skip] Updated packages #2544
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-03-14 14:27:03 +00:00
peter 3d2ca8fb9f Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-03-14 15:25:09 +01:00
peter 6810da8b79 AW-6742 Add analyse functions 2025-03-14 15:25:06 +01:00
jenkins 4866a6f22d [ci skip] Updated packages #2543
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-03-13 07:46:33 +00:00
peter 84a1004977 Fix redirect URL for locale (without loosing queryparms)
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-03-13 08:44:46 +01:00
peter 39c619a837 Fix RVO redirect URL for locale (without loosing queryparms)
FarmMaps.Develop/FarmMapsLib/pipeline/head There was a failure building this commit
2025-03-13 08:38:24 +01:00
jenkins 758613aa12 [ci skip] Updated packages #2541
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-03-12 14:40:01 +00:00
peter 6914a61bc4 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-03-12 15:38:06 +01:00
peter 9f43287433 Revert "Fix RVO redirect URL for locale (without loosing queryparms)"
This reverts commit df14427d60.
2025-03-12 15:37:59 +01:00
jenkins 10df983ae3 [ci skip] Updated packages #2540
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-03-12 14:16:55 +00:00
peter 78249811ab Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-03-12 15:15:01 +01:00
peter df14427d60 Fix RVO redirect URL for locale (without loosing queryparms) 2025-03-12 15:14:58 +01:00
jenkins c7c131d437 [ci skip] Updated packages #2539
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-03-12 13:49:12 +00:00
peter b2fe8f3bd7 Fix RVO redirect URL for locale
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-03-12 14:47:17 +01:00
jenkins 3027c69fa8 [ci skip] Updated packages #2538
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-03-12 08:00:13 +00:00
peter 5995d205a4 AW-2925 Accidently removed
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-03-12 08:58:19 +01:00
jenkins fd479c92d8 [ci skip] Updated packages #2537
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-03-10 10:30:23 +00:00
peter e9880d6eb2 AW-2925 Data temporal item
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-03-10 11:28:34 +01:00
jenkins a4438d8a90 [ci skip] Updated packages #2536
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-03-04 07:54:29 +00:00
peter 89061774de AW-6716 Uploaden avatar geeft foutmelding
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
Caused by BREAKING CHANGE: by default the output will be set to blob. Using blob instead of a base64 should decrease the memory usage. If you wish to keep using base64, simply add output="base64" to the <image-cropper> tag. (https://github.com/Mawi137/ngx-image-cropper/releases/tag/7.0.0)
2025-03-04 08:52:38 +01:00
jenkins 362e6c8534 [ci skip] Updated packages #2535
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-03-03 14:34:07 +00:00
peter 64a0e58238 AW-3128 Cleanup
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-03-03 15:32:16 +01:00
jenkins a3d4dfbd59 [ci skip] Updated packages #2534
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2025-03-03 14:05:03 +00:00
peter 4c106ebff3 AW-3128 Taalinstellingen profiel gebruiken voor FarmMaps ipv browser instelling
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2025-03-03 15:02:59 +01:00
jenkins d21f304081 [ci skip] Updated packages #66
FarmMaps/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-12-10 07:49:03 +00:00
francisco 2bad3274fd 2024.12 from develop to master
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
Merge branch 'develop'

# Conflicts:
#	package-lock.json
#	package.json
2024-12-09 13:40:33 +01:00
jenkins 5c8fd64521 [ci skip] Updated packages #2533
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-12-03 12:02:22 +00:00
peter 72ba8eca81 AW-6556 The Angular Material version (18.2.4) does not match the Angular CDK version (18.2.3).
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-12-03 13:00:12 +01:00
jenkins f89f741265 [ci skip] Updated packages #2532
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-12-02 09:31:15 +00:00
peter 50af55acb2 AW-6480 Blauwe balk van upload venster is niet zichtbaar in de explorer
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-12-02 10:29:18 +01:00
jenkins cc879b85e5 [ci skip] Updated packages #2531
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-11-21 09:49:47 +00:00
peter b4a0a4584d Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-11-21 10:47:51 +01:00
peter 8ab1611f39 AW-6504 Support indexed on retrieving child items 2024-11-21 10:47:42 +01:00
jenkins 475c522039 [ci skip] Updated packages #2530
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-11-20 15:35:21 +00:00
mark 068396ac9a added TaskService
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-11-20 16:33:20 +01:00
jenkins 4a30707ec6 [ci skip] Updated packages #2529
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-11-20 08:13:33 +00:00
mark 852b1db895 added workflowcode to IItemTask
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-11-20 09:11:34 +01:00
jenkins fcbd68eca0 [ci skip] Updated packages #2528
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-11-19 12:25:40 +00:00
peter 3a42f9114e Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-11-19 13:23:36 +01:00
peter 3f664b472c Fixed VM104:1 Uncaught TypeError: Cannot read properties of null (reading 'vnd.farmmaps.itemtype.croppingscheme') at eval (eval at getExtraAttributes (main.ce80740d3a633957.js:311566:14), <anonymous>:1:15) 2024-11-19 13:23:32 +01:00
jenkins 57811f3f2e [ci skip] Updated packages #2527
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-11-15 13:08:26 +00:00
peter 5e1bc6d705 AW-6495 Exception editor croppingscheme: do not use 'item' in route
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-11-15 14:06:33 +01:00
peter d4a230f96d AW-6495 Exception editor croppingscheme: do not use 'item' in route 2024-11-15 14:06:11 +01:00
jenkins ed1e1478b2 [ci skip] Updated packages #2526
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-11-14 13:23:40 +00:00
peter afe013a59a Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-11-14 14:21:46 +01:00
peter db3734f8a3 AW-6466 Filter by (given) owner 2024-11-14 14:21:43 +01:00
jenkins 86f75c7f78 [ci skip] Updated packages #2525
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-11-12 13:41:57 +00:00
peter a7abb4072b AW-6466 Fixed double line of code
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-11-12 14:40:05 +01:00
jenkins 61d6446d75 [ci skip] Updated packages #2524
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-11-12 09:14:09 +00:00
peter 392008ae4b Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-11-12 10:12:15 +01:00
peter 093c26c7f3 AW-6466 Fix optional boolean value to overrule default. 2024-11-12 10:12:12 +01:00
jenkins a8e1ba6c02 [ci skip] Updated packages #2523
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-11-12 08:01:08 +00:00
peter e64fbfd014 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-11-12 08:56:59 +01:00
peter 8cd7b85de2 AW-6466 Overrule exact matching on data start/end date with from/until behavior 2024-11-12 08:56:50 +01:00
jenkins ddc7f97e27 [ci skip] Updated packages #2522
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-11-12 07:49:58 +00:00
peter 24e3765c28 AW-6466 Overrule exact matching on data start/end date with from/until behavior
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-11-12 08:48:02 +01:00
jenkins 86f3ddb34b [ci skip] Updated packages #2521
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-11-05 08:27:53 +00:00
peter d6c55ef82b Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-11-05 09:26:03 +01:00
peter d977ddfb7b Fix null ref exception 2024-11-05 09:26:00 +01:00
jenkins 0e8bd5343d [ci skip] Updated packages #2520
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-10-30 10:39:49 +00:00
peter ceeaa89ba3 AW-6410 Add indexed parm to getItemListCount
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-10-30 11:37:51 +01:00
jenkins c3dbf85eb6 [ci skip] Updated packages #2519
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-10-23 12:02:56 +00:00
peter ad5fe95b55 AW-6410 Add extra parms to /api/v1/items/../children/count
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-10-23 14:00:47 +02:00
jenkins 31d3e58062 [ci skip] Updated packages #65
FarmMaps/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-10-22 14:16:00 +00:00
mark 0231421cef Merge branch 'develop'
FarmMaps/FarmMapsLib/pipeline/head This commit looks good
# Conflicts:
#	package-lock.json
2024-10-22 16:12:25 +02:00
jenkins 6b95fb7f77 [ci skip] Updated packages #2518
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-10-22 12:40:18 +00:00
peter da7e193219 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-10-22 14:38:21 +02:00
peter 31f9b48bd7 AW-6410 Add beforeLocationBack event 2024-10-22 14:38:17 +02:00
jenkins 1d6b30edff [ci skip] Updated packages #2517
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-10-14 13:15:00 +00:00
peter 349a76395b AW-6410 Fix settings menu
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-10-14 15:12:41 +02:00
jenkins 32b3b98f76 [ci skip] Updated packages #2516
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-10-14 12:11:38 +00:00
peter 010ed6e010 Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-10-14 14:09:26 +02:00
peter a8675f5c49 AW-6410 Fix settings menu 2024-10-14 14:09:23 +02:00
jenkins f76ef44dee [ci skip] Updated packages #2515
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-10-14 11:10:45 +00:00
peter 2387a0e39e Merge branch 'develop' of https://git.akkerweb.nl/FarmMaps/FarmMapsLib into develop
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-10-14 13:08:44 +02:00
peter 98980fc857 AW-6410 Fix settings menu 2024-10-14 13:08:41 +02:00
jenkins 6f7d8fe248 [ci skip] Updated packages #2514
FarmMaps.Develop/FarmMapsLib/pipeline/head Something is wrong with the build of this commit
2024-10-14 10:17:45 +00:00
peter 03a1ccd597 AW-6410 Add settings menu
FarmMaps.Develop/FarmMapsLib/pipeline/head This commit looks good
2024-10-14 12:15:46 +02:00
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
221 changed files with 19838 additions and 18265 deletions
-1
View File
@@ -2,7 +2,6 @@
This is a sample FarmMaps client in Angular 7.x.
## Quick start
Use one of the two options below to get started.
+40 -3
View File
@@ -129,7 +129,7 @@
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
"browserTarget": "farmmaps-lib-app:build"
"buildTarget": "farmmaps-lib-app:build"
}
},
"test": {
@@ -209,8 +209,8 @@
"options": {
"tsConfig": "projects/common-map/tsconfig.lib.json",
"project": "projects/common-map/ng-package.json"
}
, "configurations": {
},
"configurations": {
"production": {
"tsConfig": "projects/common-map/tsconfig.lib.prod.json"
}
@@ -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": {
+9266 -17171
View File
File diff suppressed because it is too large Load Diff
+44 -34
View File
@@ -1,6 +1,6 @@
{
"name": "farmmaps-lib-app",
"version": "4.5.0",
"version": "4.20.0",
"scripts": {
"ng": "ng",
"start": "ng serve",
@@ -11,39 +11,39 @@
},
"private": true,
"dependencies": {
"@angular/animations": "^17.3.3",
"@angular/common": "^17.3.3",
"@angular/compiler": "^17.3.3",
"@angular/core": "^17.3.3",
"@angular-eslint/eslint-plugin": "^15.2.1",
"@angular/forms": "^17.3.3",
"@angular/platform-browser": "^17.3.3",
"@angular/platform-browser-dynamic": "^17.3.3",
"@angular/router": "^17.3.3",
"@angular-eslint/eslint-plugin": "^18.2.0",
"@angular/animations": "19.2.18",
"@angular/common": "19.2.18",
"@angular/compiler": "19.2.18",
"@angular/core": "19.2.18",
"@angular/forms": "19.2.18",
"@angular/platform-browser": "19.2.18",
"@angular/platform-browser-dynamic": "19.2.18",
"@angular/router": "19.2.18",
"@farmmaps/common": "file:dist/common",
"@farmmaps/common-map": "file:dist/common-map",
"@farmmaps/common-map3d": "file:dist/common-map3d",
"ng-openlayers": "17.1.3",
"@farmmaps/ng-openlayers": "file:dist/ng-openlayers",
"@microsoft/signalr": "^3.1.16",
"@ng-bootstrap/ng-bootstrap": "^16.0.0",
"@ngrx/effects": "^17",
"@ngrx/router-store": "^17",
"@ngrx/store": "^17",
"@popperjs/core": "^2.11.6",
"angular-oauth2-oidc": "^13",
"@ng-bootstrap/ng-bootstrap": "^18.0.0",
"@ngrx/effects": "19.2.1",
"@ngrx/router-store": "19.2.1",
"@ngrx/store": "19.2.1",
"@popperjs/core": "^2.11.8",
"angular-oauth2-oidc": "^17.0.2",
"assert": "^2.0.0",
"bootstrap": "^5.2.0",
"bootstrap": "^5.3.3",
"browserify-zlib": "^0.2.0",
"buffer": "^6.0.3",
"cesium": "^1.97.0",
"core-js": "^2.6.12",
"https-browserify": "^1.0.0",
"moment": "^2.29.4",
"ngrx-store-localstorage": "17.0.0",
"ngx-avatars": "1.7.0",
"ngx-clipboard": "16.0.0",
"ngx-image-cropper": "^7.2.1",
"ngx-uploadx": "^6.2.0",
"ngrx-store-localstorage": "19.0.2",
"ngx-avatars": "1.9.3",
"ngx-clipboard": "^16.0.0",
"ngx-image-cropper": "^7.0.0",
"ngx-uploadx": "7.0.1",
"ol": "^8.2.0",
"olcs": "^2.13.1",
"resumablejs": "^1.1.0",
@@ -54,23 +54,27 @@
"tslib": "^2.4.0",
"url": "^0.11.0",
"util": "^0.12.4",
"zone.js": "~0.14.4"
"zone.js": "~0.15.1"
},
"optionalDependencies": {
"@lmdb/lmdb-linux-x64": "^3.1.0",
"@rollup/rollup-linux-x64-gnu": "^4.21.2"
},
"devDependencies": {
"@angular-builders/custom-webpack": "^17",
"@angular-devkit/build-angular": "^17.3.3",
"@angular/cli": "^17.3.3",
"@angular/compiler-cli": "^17.3.3",
"@angular/language-service": "^17.3.3",
"@angular/localize": "^17.3.3",
"@angular-builders/custom-webpack": "19.0.1",
"@angular-devkit/build-angular": "19.2.19",
"@angular/cli": "19.2.19",
"@angular/compiler-cli": "19.2.18",
"@angular/language-service": "19.2.18",
"@angular/localize": "19.2.18",
"@types/arcgis-rest-api": "^10.4.5",
"@types/jasmine": "~2.8.8",
"@types/jasminewd2": "^2.0.9",
"@types/node": "^12.20.15",
"@types/node": "^22.5.4",
"@typescript-eslint/eslint-plugin": "^6.18.0",
"@typescript-eslint/eslint-plugin-tslint": "^6.18.0",
"@typescript-eslint/parser": "^6.18.0",
"codelyzer": "^0.0.28",
"codelyzer": "^6.0.2",
"eslint": "^8.35.0",
"eslint-config-prettier": "^8.6.0",
"eslint-plugin-import": "^2.27.5",
@@ -81,9 +85,15 @@
"karma-coverage-istanbul-reporter": "^3.0.3",
"karma-jasmine": "^5.1.0",
"karma-jasmine-html-reporter": "^2.0.0",
"ng-packagr": "^17.3.0",
"ng-packagr": "^19.2.2",
"protractor": "~7.0.0",
"ts-node": "^8.8.1",
"typescript": "~5.4.4"
"typescript": "~5.8.3"
},
"overrides": {
"some-library": {
"@angular/common": "$@angular/common",
"@angular/core": "$@angular/core"
}
}
}
+197 -10
View File
@@ -11,20 +11,207 @@
"tslib": "^2.0.0"
},
"peerDependencies": {
"@angular/core": "^17.3.3",
"@ngrx/effects": "^17",
"@ngrx/router-store": "^17",
"@ngrx/store": "^17",
"ng-openlayers": "17.1.3",
"ngrx-store-localstorage": "^17",
"ol": "^8.2.0",
"@angular/core": "^18.2.3",
"@ngrx/effects": "^18.0.2",
"@ngrx/router-store": "^18.0.2",
"@ngrx/store": "^18.0.2",
"ngrx-store-localstorage": "^18",
"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": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz",
"integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ=="
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
"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"
},
"peerDependencies": {
"@angular/core": "^17.3.3",
"ngrx-store-localstorage": "^17",
"@ngrx/effects": "^17",
"@ngrx/router-store": "^17",
"@ngrx/store": "^17",
"tassign": "^1.0.0",
"ng-openlayers": "17.1.3",
"ol": "^8.2.0"
"@angular/core": "19.2.18",
"ngrx-store-localstorage": "19.0.2",
"@ngrx/effects": "19.2.1",
"@ngrx/router-store": "19.2.1",
"@ngrx/store": "19.2.1",
"tassign": "^1.0.0"
}
}
@@ -59,6 +59,8 @@ export const TOGGLESHOWDATALAYERSLIDE = '[Map] ToggleShowDataLayerSlide'
export const SETVIEWSTATE = '[Map] SetViewState'
export const CLEARFEATURES = '[Map] ClearFeatures';
export const SETPANELEXTRAWIDE = '[Map] SetPanelExtraWide';
export const BACKUPFEATURES = '[Map] BackupFeatures';
export const RESTOREFEATURES = '[Map] RestoreFeatures';
export class Clear implements Action {
readonly type = CLEAR;
@@ -300,7 +302,7 @@ export class SetReplaceUrl implements Action {
export class SetFeatures implements Action {
readonly type = SETFEATURES;
constructor(public features: Array<Feature<Geometry>>) { }
constructor(public features: Array<Feature<Geometry>>, public zoomToExtent: boolean = true) { }
}
export class SetLayerValuesLocation implements Action {
@@ -347,6 +349,16 @@ export class SetPanelExtraWide implements Action {
constructor(public panelExtraWide:boolean) {}
}
export class BackupFeatures implements Action {
readonly type = BACKUPFEATURES;
constructor() {}
}
export class RestoreFeatures implements Action {
readonly type = RESTOREFEATURES;
constructor() {}
}
export type Actions = SetMapState
| Init
| Clear
@@ -395,5 +407,7 @@ export type Actions = SetMapState
| ToggleShowDataLayerSlide
| SetViewState
| ClearFeatures
| SetPanelExtraWide;
| SetPanelExtraWide
| BackupFeatures
| RestoreFeatures;
@@ -1,78 +1,79 @@
import { NgModule ,ModuleWithProviders} from '@angular/core';
import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
//external modules
import { AngularOpenlayersModule } from 'ng-openlayers';
import { StoreModule, ActionReducer, MetaReducer } from '@ngrx/store';
import { EffectsModule } from '@ngrx/effects';
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
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 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 { IItemLayer, ItemLayer, ITemporalItemLayer, TemporalItemLayer } from './models/item.layer';
import { IMapState } from './models/map.state';
import { IPeriodState } from './models/period.state';
import { ISelectedFeatures } from './models/selected.features';
// components
import { MapRoutingModule } from './common-map-routing.module';
import { FileDropTargetComponent } from './components/aol/file-drop-target/file-drop-target.component';
import { GpsLocation } from './components/aol/gps-location/gps-location.component';
import { ItemLayersComponent } from './components/aol/item-layers/item-layers.component';
import { ItemVectorSourceComponent } from './components/aol/item-vector-source/item-vector-source.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 { FeatureListObservationComponent } from './components/feature-list-observation/feature-list-observation.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 { 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 { ItemVectorSourceComponent } from './components/aol/item-vector-source/item-vector-source.component';
import { ItemLayersComponent } from './components/aol/item-layers/item-layers.component';
import { ZoomToExtentComponent } from './components/aol/zoom-to-extent/zoom-to-extent.component';
import { RotationResetComponent } from './components/aol/rotation-reset/rotation-reset.component';
import { LayerListComponent } from './components/aol/layer-list/layer-list.component';
import { MetaDataModalComponent } from './components/meta-data-modal/meta-data-modal.component';
import { SelectPeriodModalComponent } from './components/select-period-modal/select-period-modal.component';
import { MapComponent } from './components/map/map.component';
import { MapSearchComponent } from './components/map-search/map-search.component';
import { MapRoutingModule } from './common-map-routing.module';
import { LegendComponent } from './components/legend/legend.component';
import { LayerVectorImageComponent } from './components/aol/layer-vector-image/layer-vector-image.component';
import {FeatureIconService} from './services/feature-icon.service';
import { GeolocationService } from './services/geolocation.service';
import {DeviceOrientationService} from './services/device-orientation.service';
import { TemporalService} from './services/temporal.service';
import { WidgetStatusComponent } from './components/widget-status/widget-status.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 { ForSourceTask} from './components/for-item/for-sourcetask.decorator';
import { ForPackage } from './components/for-item/for-package.decorator';
import { PanToLocation} from './components/aol/pan-to-location/pan-to-location.component';
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 { ifZoomToShowDirective} from './components/if-zoom-to-show/if-zoom-to-show.directive';
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 { SelectPeriodModalComponent } from './components/select-period-modal/select-period-modal.component';
import { SelectedItemContainerComponent } from './components/selected-item-container/selected-item-container.component';
import { SelectedItemCropfieldComponent } from './components/selected-item-cropfield/selected-item-cropfield.component';
import { SelectedItemGeotiffComponent } from './components/selected-item-geotiff/selected-item-geotiff.component';
import { SelectedItemShapeComponent } from './components/selected-item-shape/selected-item-shape.component';
import { SelectedItemTemporalComponent } from './components/selected-item-temporal/selected-item-temporal.component';
import { AbstractSelectedItemComponent, SelectedItemComponent } from './components/selected-item/selected-item.component';
import { WidgetHostDirective } from './components/widget-host/widget-host.directive';
import { WidgetStatusComponent } from './components/widget-status/widget-status.component';
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';
import { DeviceOrientationService } from './services/device-orientation.service';
import { FeatureIconService } from './services/feature-icon.service';
import { GeolocationService } from './services/geolocation.service';
import { TemporalService } from './services/temporal.service';
export function LocalStorageSync(reducer: ActionReducer<any>): ActionReducer<any> {
const r = function(state, action) {
@@ -104,70 +105,13 @@ export function LocalStorageSync(reducer: ActionReducer<any>): ActionReducer<any
const metaReducers: Array<MetaReducer<any, any>> = [LocalStorageSync];
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,
AbstractFeatureListFeatureComponent,
AbstractSelectedItemComponent,
AbstractItemWidgetComponent,
AbstractItemListItemComponent,
AbstractItemListComponent,
FeatureIconService,
GeolocationService,
DeviceOrientationService,
TemporalService,
IMapState,
ISelectedFeatures,
IItemLayer,
ItemLayer,
IPeriodState,
ForChild,
ForItemType,
ForSourceTask,
ForPackage ,
ITemporalItemLayer,
TemporalItemLayer,
ifZoomToShowDirective,
ZoomToShowAlert,
IClickedFeature,
GeometryThumbnailComponent
}
AbstractFeatureListFeatureComponent, AbstractItemListComponent, AbstractItemListItemComponent, AbstractItemWidgetComponent, AbstractSelectedItemComponent, DeviceOrientationService, FeatureIconService, FeatureListComponent, FeatureListContainerComponent, FeatureListCropfieldComponent, FeatureListObservationComponent, FeatureListCroppingschemeComponent, FeatureListFeatureComponent, FeatureListFeatureContainerComponent, FeatureListFeatureCropfieldComponent, FeatureListFeatureCroppingschemeComponent, FileDropTargetComponent, ForChild,
ForItemType, ForPackage, ForSourceTask, GeolocationService, GeometryThumbnailComponent, GpsLocation, IClickedFeature, ifZoomToShowDirective, IItemLayer, IMapState, IPeriodState, ISelectedFeatures, ItemLayer, ItemLayersComponent, ItemListComponent, ItemListItemComponent,
ItemListItemContainerComponent, ITemporalItemLayer, ItemVectorSourceComponent, ItemWidgetListComponent, LayerListComponent, LayerSwitcher, LayerVectorImageComponent, LegendComponent, mapActions, MapComponent, mapEffects,
mapReducers, MapSearchComponent, MetaDataModalComponent, PanToLocation, RotationResetComponent, SelectedItemComponent, SelectedItemContainerComponent, SelectedItemCropfieldComponent,
SelectedItemGeotiffComponent, SelectedItemShapeComponent, SelectedItemTemporalComponent, SelectPeriodModalComponent, TemporalItemLayer, TemporalService, WidgetHostDirective, WidgetStatusComponent, ZoomToExtentComponent, ZoomToShowAlert
};
@NgModule({
imports: [
@@ -199,6 +143,7 @@ export {
FeatureListContainerComponent,
FeatureListCroppingschemeComponent,
FeatureListCropfieldComponent,
FeatureListObservationComponent,
FeatureListFeatureContainerComponent,
FeatureListFeatureComponent,
FeatureListFeatureCroppingschemeComponent,
@@ -258,6 +203,7 @@ export {
FeatureListContainerComponent,
FeatureListCroppingschemeComponent,
FeatureListCropfieldComponent,
FeatureListObservationComponent,
FeatureListFeatureContainerComponent,
ZoomToExtentComponent,
ifZoomToShowDirective,
@@ -271,6 +217,7 @@ export {
TemporalService,
{ provide: AbstractFeatureListComponent, useClass: FeatureListCroppingschemeComponent, multi: true },
{ provide: AbstractFeatureListComponent, useClass: FeatureListCropfieldComponent, multi: true },
{ provide: AbstractFeatureListComponent, useClass: FeatureListObservationComponent, multi: true },
{ provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureComponent, multi: true },
{ provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureCroppingschemeComponent, multi: true },
{ provide: AbstractFeatureListFeatureComponent, useClass: FeatureListFeatureCropfieldComponent, multi: true },
@@ -1,5 +1,5 @@
import { Component, Input, OnDestroy, OnInit, EventEmitter, Output, Inject } from '@angular/core';
import { MapComponent } from 'ng-openlayers';
import { MapComponent } from '@farmmaps/ng-openlayers';
import * as proj from 'ol/proj';
import {Point,Geometry} from 'ol/geom';
@@ -15,7 +15,8 @@ export interface IDroppedFile {
@Component({
selector: 'fm-map-file-drop-target',
template: ''
template: '',
standalone: false
})
export class FileDropTargetComponent implements OnInit, OnDestroy {
element: Element;
@@ -1,5 +1,5 @@
import { Component, OnInit, Input, ViewChild, ElementRef, OnChanges, SimpleChanges ,Host} from '@angular/core';
import { MapComponent } from 'ng-openlayers';
import { MapComponent } from '@farmmaps/ng-openlayers';
import Overlay from 'ol/Overlay';
import { fromLonLat, toLonLat } from 'ol/proj';
@@ -7,7 +7,8 @@ import { fromLonLat, toLonLat } from 'ol/proj';
@Component({
selector: 'fm-map-gps-location',
templateUrl: './gps-location.component.html',
styleUrls: ['./gps-location.component.scss']
styleUrls: ['./gps-location.component.scss'],
standalone: false
})
export class GpsLocation implements OnInit,OnChanges{
@@ -1,5 +1,5 @@
import { Component, Host, Input, Output, EventEmitter,OnDestroy, OnInit, OnChanges, SimpleChanges, forwardRef } from '@angular/core';
import { LayerGroupComponent, MapComponent } from 'ng-openlayers';
import { LayerGroupComponent, MapComponent } from '@farmmaps/ng-openlayers';
import { ItemService,IItem,AppConfig } from '@farmmaps/common';
import { IItemLayer, ITemporalItemLayer} from '../../../models/item.layer';
import { ILayerData} from '../../../models/layer.data';
@@ -26,7 +26,8 @@ import Feature from 'ol/Feature';
template: `<ng-content></ng-content>`,
providers: [
{ provide: LayerGroupComponent, useExisting: forwardRef(() => ItemLayersComponent) }
]
],
standalone: false
})
export class ItemLayersComponent extends LayerGroupComponent implements OnChanges, OnInit,OnDestroy {
@@ -1,5 +1,5 @@
import { Component, Host, Input, Output, EventEmitter, OnInit, OnChanges, SimpleChanges, forwardRef, Inject, InjectionToken, OnDestroy, LOCALE_ID } from '@angular/core';
import { LayerVectorComponent, SourceVectorComponent, MapComponent } from 'ng-openlayers';
import { LayerVectorComponent, SourceVectorComponent, MapComponent } from '@farmmaps/ng-openlayers';
import { ItemService, ItemTypeService, IItem, IItemType, FolderService } from '@farmmaps/common';
import { Feature } from 'ol';
@@ -26,7 +26,8 @@ import { formatNumber } from '@angular/common';
template: `<ng-content></ng-content>`,
providers: [
{ provide: SourceVectorComponent, useExisting: forwardRef(() => ItemVectorSourceComponent) }
]
],
standalone: false
})
export class ItemVectorSourceComponent extends SourceVectorComponent implements OnInit, OnDestroy, OnChanges {
instance: Vector<Feature<Geometry>>;
@@ -4,7 +4,8 @@ import { IItemLayer } from '../../../models/item.layer';
@Component({
selector: 'fm-map-layer-list',
templateUrl: './layer-list.component.html',
styleUrls: ['./layer-list.component.scss']
styleUrls: ['./layer-list.component.scss'],
standalone: false
})
export class LayerListComponent {
@@ -3,7 +3,7 @@ import { IItemLayer } from '../../../models/item.layer';
import { Store } from '@ngrx/store';
import * as mapReducers from '../../../reducers/map.reducer';
import * as mapActions from '../../../actions/map.actions';
import { MapComponent } from 'ng-openlayers';
import { MapComponent } from '@farmmaps/ng-openlayers';
import { ILayervalue } from '../../../models/layer.value';
import { Observable, interval, Subject } from 'rxjs';
import { debounce, throttle } from 'rxjs/operators';
@@ -16,7 +16,8 @@ import { Point } from 'ol/geom';
@Component({
selector: 'fm-map-layer-values',
templateUrl: './layer-values.component.html',
styleUrls: ['./layer-values.component.scss']
styleUrls: ['./layer-values.component.scss'],
standalone: false
})
export class LayerValuesComponent implements OnInit, AfterViewInit {
@@ -1,5 +1,5 @@
import { Component, OnDestroy, OnInit, Input, OnChanges, SimpleChanges } from '@angular/core';
import { LayerVectorComponent, MapComponent } from 'ng-openlayers';
import { LayerVectorComponent, MapComponent } from '@farmmaps/ng-openlayers';
import RenderType from 'ol/layer/Vector';
import { Vector as VectorSource } from 'ol/source';
import { Geometry } from 'ol/geom';
@@ -10,6 +10,7 @@ import Feature from 'ol/Feature';
template: `
<ng-content></ng-content>
`,
standalone: false
})
export class LayerVectorImageComponent extends LayerVectorComponent implements OnInit, OnDestroy, OnChanges {
//public source: Vector;
@@ -1,5 +1,5 @@
import { Component, OnInit, Input, Host, OnChanges, SimpleChanges,ChangeDetectorRef } from '@angular/core';
import { MapComponent } from 'ng-openlayers';
import { MapComponent } from '@farmmaps/ng-openlayers';
import {IMapState} from '../../../models/map.state'
import {View} from 'ol';
import { fromLonLat } from 'ol/proj';
@@ -8,7 +8,8 @@ import { fromLonLat } from 'ol/proj';
@Component({
selector: 'fm-map-pan-to-location',
templateUrl: './pan-to-location.component.html',
styleUrls: ['./pan-to-location.component.scss']
styleUrls: ['./pan-to-location.component.scss'],
standalone: false
})
export class PanToLocation implements OnInit,OnChanges{
@@ -1,5 +1,5 @@
import { Component, Host, Input, OnInit, ChangeDetectorRef } from '@angular/core';
import { ViewComponent, MapComponent } from 'ng-openlayers';
import { ViewComponent, MapComponent } from '@farmmaps/ng-openlayers';
import {View} from 'ol';
@@ -8,7 +8,8 @@ import {View} from 'ol';
@Component({
selector: 'fm-map-rotation-reset',
templateUrl: './rotation-reset.component.html',
styleUrls: ['./rotation-reset.component.scss']
styleUrls: ['./rotation-reset.component.scss'],
standalone: false
})
export class RotationResetComponent implements OnInit {
view: View;
@@ -1,11 +1,12 @@
import { Component, Host, Input, OnInit, OnChanges, SimpleChanges, forwardRef } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { ViewComponent, MapComponent } from 'ng-openlayers';
import { ViewComponent, MapComponent } from '@farmmaps/ng-openlayers';
@Component({
selector: 'fm-map-zoom-to-extent',
template: `<ng-content></ng-content>`
template: `<ng-content></ng-content>`,
standalone: false
})
export class ZoomToExtentComponent implements OnChanges {
view: ViewComponent;
@@ -13,7 +13,8 @@ import { Observable } from 'rxjs';
@Component({
selector: 'fm-map-feature-list-container',
templateUrl: './feature-list-container.component.html',
styleUrls: ['./feature-list-container.component.scss']
styleUrls: ['./feature-list-container.component.scss'],
standalone: false
})
export class FeatureListContainerComponent {
@@ -14,7 +14,8 @@ import { Observable } from 'rxjs';
@Component({
selector: 'fm-map-feature-list-cropfield',
templateUrl: './feature-list-cropfield.component.html',
styleUrls: ['./feature-list-cropfield.component.scss']
styleUrls: ['./feature-list-cropfield.component.scss'],
standalone: false
})
export class FeatureListCropfieldComponent extends AbstractFeatureListComponent implements OnInit {
@@ -16,7 +16,8 @@ import { Geometry} from 'ol/geom';
@Component({
selector: 'fm-map-feature-list-croppingscheme',
templateUrl: './feature-list-croppingscheme.component.html',
styleUrls: ['./feature-list-croppingscheme.component.scss']
styleUrls: ['./feature-list-croppingscheme.component.scss'],
standalone: false
})
export class FeatureListCroppingschemeComponent extends AbstractFeatureListComponent {
@@ -11,7 +11,8 @@ import { WidgetHostDirective } from '../widget-host/widget-host.directive';
<div>
<ng-template fm-map-widget-host></ng-template>
</div>
`
`,
standalone: false
})
export class FeatureListFeatureContainerComponent {
@@ -15,7 +15,8 @@ import {getArea} from 'ol/sphere';
@Component({
selector: 'fm-map-feature-list-feature-cropfield',
templateUrl: './feature-list-feature-cropfield.component.html',
styleUrls: ['./feature-list-feature-cropfield.component.scss']
styleUrls: ['./feature-list-feature-cropfield.component.scss'],
standalone: false
})
export class FeatureListFeatureCropfieldComponent extends AbstractFeatureListFeatureComponent {
@@ -12,7 +12,8 @@ import { ForItemType } from '../for-item/for-itemtype.decorator';
@Component({
selector: 'fm-map-feature-list-feature-croppingscheme',
templateUrl: './feature-list-feature-croppingscheme.component.html',
styleUrls: ['./feature-list-feature-croppingscheme.component.scss']
styleUrls: ['./feature-list-feature-croppingscheme.component.scss'],
standalone: false
})
export class FeatureListFeatureCroppingschemeComponent extends AbstractFeatureListFeatureComponent {
@@ -20,7 +20,8 @@ export abstract class AbstractFeatureListFeatureComponent {
@Component({
selector: 'fm-map-feature-list-feature',
templateUrl: './feature-list-feature.component.html',
styleUrls: ['./feature-list-feature.component.scss']
styleUrls: ['./feature-list-feature.component.scss'],
standalone: false
})
export class FeatureListFeatureComponent extends AbstractFeatureListFeatureComponent {
@@ -0,0 +1,14 @@
<div class="card border-0">
<div class="card-body" *ngIf="(schemeItem|async);let schemeItem">
<fm-back-button></fm-back-button>
<h4 i18n>Farm</h4>
<h3>{{schemeItem.name}}</h3>
<div *ngIf="features;let features">
<div class="cropfields">
<div class="row m-0 ps-3 pe-3" *ngFor="let feature of features" [ngClass]="{'selected':isFeatureSelected(feature)}" (click)="handleFeatureClick(feature)" (mouseenter)="handleFeatureMouseEnter(feature)" (mouseleave)="handleFeatureMouseLeave(feature)">
<fm-map-feature-list-feature-container [feature]="feature"></fm-map-feature-list-feature-container>
</div>
</div>
</div>
</div>
</div>
@@ -0,0 +1,20 @@
fm-map-feature-list-feature-container {
width:100%;
pointer-events:none;
}
.row {
border-bottom: 1px solid var(--bs-gray-500);
user-select: none;
padding-left:1.5rem;
}
.row.selected {
background-color: var(--bs-gray-100);
}
.cropfields {
border-top: 1px solid var(--bs-gray-500);
margin-left: -1.25rem;
margin-right: -1.25rem;
}
@@ -0,0 +1,31 @@
import { Component, Injectable,AfterViewInit, OnInit,SimpleChanges, ChangeDetectorRef} from '@angular/core';
import { Location } from '@angular/common';
import { AbstractFeatureListComponent } from '../feature-list/feature-list.component';
import {ForItemType } from '../for-item/for-itemtype.decorator';
import {ForChild } from '../for-item/for-child.decorator';
import { Store } from '@ngrx/store';
import * as mapReducers from '../../reducers/map.reducer';
import { commonReducers, ItemTypeService, IItem,ItemService } from '@farmmaps/common';
import { Observable } from 'rxjs';
@ForChild()
@ForItemType("vnd.farmmaps.itemtype.observation")
@Injectable()
@Component({
selector: 'fm-map-feature-list-observation',
templateUrl: './feature-list-observation.component.html',
styleUrls: ['./feature-list-observation.component.scss'],
standalone: false
})
export class FeatureListObservationComponent extends AbstractFeatureListComponent implements OnInit {
constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService, location: Location, private itemService: ItemService) {
super(store, itemTypeService,location);
}
public schemeItem: Observable<IItem>
ngOnInit() {
this.schemeItem = this.itemService.getItem(this.queryState.parentCode);
}
}
@@ -60,7 +60,8 @@ export abstract class AbstractFeatureListComponent {
@Component({
selector: 'fm-map-feature-list',
templateUrl: './feature-list.component.html',
styleUrls: ['./feature-list.component.scss']
styleUrls: ['./feature-list.component.scss'],
standalone: false
})
export class FeatureListComponent extends AbstractFeatureListComponent {
@@ -8,7 +8,8 @@ import * as style from 'ol/style';
@Component({
selector: 'fm-map-feature-thumbnail',
templateUrl: './feature-thumbnail.component.html',
styleUrls: ['./feature-thumbnail.component.scss']
styleUrls: ['./feature-thumbnail.component.scss'],
standalone: false
})
export class GeometryThumbnailComponent implements AfterViewInit {
@@ -1,10 +1,11 @@
import { Directive, ViewContainerRef,TemplateRef,OnInit,Input, OnChanges } from '@angular/core';
import { Layer } from 'ol/layer';
import { Source } from 'ol/source';
import { MapComponent } from 'ng-openlayers';
import { MapComponent } from '@farmmaps/ng-openlayers';
@Directive({
selector: '[fmMapIfZoomToShow]',
standalone: false
})
export class ifZoomToShowDirective implements OnInit {
@Input()
@@ -10,7 +10,8 @@ import { IItem, IListItem } from '@farmmaps/common';
<div style="height:100%">
<ng-template fm-map-widget-host></ng-template>
</div>
`
`,
standalone: false
})
export class ItemListItemContainerComponent {
@@ -43,7 +43,8 @@ export abstract class AbstractItemWidgetComponent {
@Component({
selector: 'fm-map-item-list-item',
templateUrl: './item-list-item.component.html',
styleUrls: ['./item-list-item.component.scss']
styleUrls: ['./item-list-item.component.scss'],
standalone: false
})
export class ItemListItemComponent extends AbstractItemListItemComponent {
@@ -30,7 +30,8 @@ export abstract class AbstractItemListComponent {
@Component({
selector: 'fm-map-item-list',
templateUrl: './item-list.component.html',
styleUrls: ['./item-list.component.scss']
styleUrls: ['./item-list.component.scss'],
standalone: false
})
export class ItemListComponent extends AbstractItemListComponent {
@@ -10,7 +10,8 @@ import { AbstractItemWidgetComponent } from '../item-list-item/item-list-item.co
@Component({
selector: 'fm-map-item-widget-list',
templateUrl: './item-widget-list.component.html',
styleUrls: ['./item-widget-list.component.scss']
styleUrls: ['./item-widget-list.component.scss'],
standalone: false
})
export class ItemWidgetListComponent implements AfterViewInit {
@@ -10,7 +10,7 @@
<li class="nav-item py-0">
<span><i class="fal fa-layer-group" aria-hidden="true"></i>&nbsp;<span i18n>Base maps</span></span>
<div class="mb-4">
<fm-map-layer-list [baseLayers]="true" [itemLayers]="baseLayers|async" [selectedLayer]="selectedBaseLayer|async" (onSelectLayer)="handleSelectBaseLayer($event)"></fm-map-layer-list>
<fm-map-layer-list [baseLayers]="true" [itemLayers]="baseMaps|async" [selectedLayer]="selectedBaseLayer|async" (onSelectLayer)="handleSelectBaseLayer($event)"></fm-map-layer-list>
</div>
</li>
<li class="nav-item py-0">
@@ -20,12 +20,17 @@
</div>
</li>
<li class="nav-item py-0" *ngIf="selectedItemLayer$ | async as selectedItemLayer">
<span><i class="fal fa-layer-group" aria-hidden="true"></i>&nbsp;<span i18n>Data</span><span class="slideButton"><a href="#" title="Compare" class="btn btn-light btn-sm" (click)="handleToggleShowDatalayerSlide($event)"><i class="fal fa-sliders-h-square"></i></a></span></span>
<span><i class="fal fa-layer-group" aria-hidden="true"></i>&nbsp;<span i18n>Overlay slider</span><span class="slideButton"><a href="#" title="Compare" class="btn btn-light btn-sm" (click)="handleToggleShowDatalayerSlide($event)"><i class="fal fa-sliders-h-square"></i></a></span></span>
<div class="mb-4">
<fm-map-layer-list [dataLayers]="true" [itemLayers]="[selectedItemLayer]" [selectedLayer]="selectedItemLayer" (onToggleVisibility)="handleOnToggleVisibility($event)" (onSetOpacity)="handleOnSetOpacity($event)" (onZoomToExtent)="handleZoomToExtent($event)" (onSelectLayer)="handleSelectOverlayLayer($event)"></fm-map-layer-list>
</div>
</li>
<li class="nav-item py-0">
<span><i class="fal fa-layer-group" aria-hidden="true"></i>&nbsp;<span i18n>Aerial photos</span></span>
<div class="mb-4">
<fm-map-layer-list [baseLayers]="true" [itemLayers]="aerialMaps|async" [selectedLayer]="selectedBaseLayer|async" (onSelectLayer)="handleSelectBaseLayer($event)"></fm-map-layer-list>
</div>
</li>
</ul>
</div>
</div>
@@ -4,12 +4,13 @@ import { Store } from '@ngrx/store';
import * as mapReducers from '../../reducers/map.reducer';
import * as mapActions from '../../actions/map.actions';
import {createEmpty,extend } from 'ol/extent';
import { Observable } from 'rxjs';
import { filter, map, Observable } from 'rxjs';
@Component({
selector: 'fm-map-layer-switcher',
templateUrl: './layer-switcher.component.html',
styleUrls: ['./layer-switcher.component.scss']
styleUrls: ['./layer-switcher.component.scss'],
standalone: false
})
export class LayerSwitcher implements OnInit,OnChanges{
@@ -17,7 +18,8 @@ export class LayerSwitcher implements OnInit,OnChanges{
public overlayLayers: Observable<Array<IItemLayer>>;
public selectedOverlayLayer: Observable<IItemLayer>;
public selectedItemLayer$: Observable<IItemLayer>;
public baseLayers: Observable<Array<IItemLayer>>;
public baseMaps: Observable<Array<IItemLayer>>;
public aerialMaps: Observable<Array<IItemLayer>>;
public selectedBaseLayer: Observable<IItemLayer>;
constructor( private store: Store<mapReducers.State>) {
@@ -26,7 +28,8 @@ export class LayerSwitcher implements OnInit,OnChanges{
ngOnInit() {
this.overlayLayers = this.store.select(mapReducers.selectGetOverlayLayers);
this.selectedOverlayLayer = this.store.select(mapReducers.selectGetSelectedOverlayLayer);
this.baseLayers = this.store.select(mapReducers.selectGetBaseLayers);
this.baseMaps = this.store.select(mapReducers.selectGetBaseMaps);
this.aerialMaps = this.store.select(mapReducers.selectGetArealMaps);
this.selectedBaseLayer = this.store.select(mapReducers.selectGetSelectedBaseLayer);
this.selectedItemLayer$ = this.store.select(mapReducers.selectGetSelectedItemLayer)
this.showLayerSwitcher = this.store.select(mapReducers.selectGetShowLayerSwitcher);
@@ -83,3 +86,4 @@ export class LayerSwitcher implements OnInit,OnChanges{
event.preventDefault();
}
}
@@ -7,7 +7,8 @@ import {IHistogram, ILayer} from '../../../models/color.map';
styles: ['.nopadding{\n' +
' padding: 0 !important;\n' +
' margin: 0 !important;\n' +
'}']
'}'],
standalone: false
})
export class HistogramDetailsComponent {
@@ -5,7 +5,8 @@ import { IColorMap, IColor, IColorEntry,ILayer, IRenderer } from '../../models/c
@Component({
selector: 'fm-map-layer-legend',
templateUrl: './legend.component.html',
styleUrls: ['./legend.component.scss']
styleUrls: ['./legend.component.scss'],
standalone: false
})
export class LegendComponent implements OnInit,AfterViewInit {
@@ -7,7 +7,8 @@ import { IStatistics } from '../../../models/color.map';
styles: ['.nopadding{\n' +
' padding: 0 !important;\n' +
' margin: 0 !important;\n' +
'}']
'}'],
standalone: false
})
export class StatisticsDetailsComponent {
@@ -14,7 +14,7 @@ div.map-search {
}
.disabled {
color:lighten(#000000,80%);
color:adjust(#000000,80%);
}
:host ::ng-deep ngb-typeahead-window.dropdown-menu {
@@ -9,7 +9,8 @@ import { tassign } from 'tassign';
@Component({
selector: 'fm-map-map-search',
templateUrl: './map-search.component.html',
styleUrls: ['./map-search.component.scss']
styleUrls: ['./map-search.component.scss'],
standalone: false
})
export class MapSearchComponent {
@@ -52,12 +52,21 @@ aol-map { position:absolute;width:100%;height:calc( 100vh );}
pointer-events: none;
}
@media screen and (max-width: 768px) {
.control-container {
margin-left: 1em;
margin-right: 1em;
pointer-events: all;
}
}
@media screen and (min-width: 768px) {
.control-container {
float: right;
margin-right: 1em;
pointer-events: all;
}
}
.fullscreen .viewport-container {
margin-bottom: 1em;
@@ -41,7 +41,8 @@ import * as style from 'ol/style';
@Component({
selector: 'fm-map-map',
templateUrl: './map.component.html',
styleUrls: ['./map.component.scss']
styleUrls: ['./map.component.scss'],
standalone: false
})
export class MapComponent implements OnInit, OnDestroy, AfterViewInit {
@@ -92,6 +93,8 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
public noContent = false;
public overrideSelectedItemLayer = false;
public overrideOverlayLayers = false;
public hideShowLayerValues = false;
public const
public dataLayerSlideValue = 50;
public dataLayerSlideEnabled = false;
private visibleAreaBottom = 0;
@@ -116,6 +119,7 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
const params = route.snapshot.data["fm-map-map"];
this.overrideSelectedItemLayer = params["overrideSelectedItemlayer"] ? params["overrideSelectedItemlayer"] : false;
this.overrideOverlayLayers = params["overrideOverlayLayers"] ? params["overrideOverlayLayers"] : false;
this.hideShowLayerValues = params["hideShowLayerValues"] ? params["hideShowLayerValues"] : false;
}
this.querySub = this.query$.pipe(skip(1), withLatestFrom(this.mapState$)).subscribe(([query, mapState]) => {
if (query && query.querystate) {
@@ -297,11 +301,13 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
normalizeMapState(mapState: IMapState): IMapState {
if (!mapState) return null;
return {zoom: this.round(mapState.zoom,0),
return {
zoom: this.round(mapState.zoom, 0),
rotation: this.round(mapState.rotation, 2),
xCenter: this.round(mapState.xCenter, 5),
yCenter: this.round(mapState.yCenter, 5),
baseLayerCode: mapState.baseLayerCode };
baseLayerCode: mapState.baseLayerCode
};
}
serializeMapState(mapState: IMapState): string {
@@ -472,11 +478,13 @@ export class MapComponent implements OnInit, OnDestroy,AfterViewInit {
}
handleShowLayerValues(event: MouseEvent) {
if (!this.hideShowLayerValues) {
event.stopPropagation();
this.zone.run(() => {
this.store.dispatch(new mapActions.ToggleLayerValuesEnabled());
});
}
}
handleOnDownload(event) {
@@ -11,7 +11,8 @@ export interface IMetaData {
@Component({
selector: 'fm-map-meta-data-modal',
templateUrl: 'meta-data-modal.component.html'
templateUrl: 'meta-data-modal.component.html',
standalone: false
})
export class MetaDataModalComponent {
@@ -18,7 +18,8 @@ const after = (one: NgbDateStruct, two: NgbDateStruct) =>
@Component({
selector: 'fm-map-select-period-modal',
templateUrl: 'select-period-modal.component.html',
styleUrls: ['select-period-modal.component.scss']
styleUrls: ['select-period-modal.component.scss'],
standalone: false
})
export class SelectPeriodModalComponent {
@@ -8,7 +8,8 @@ import { IItemLayer } from '../../models/item.layer';
@Component({
selector: 'fm-map-selected-item-container',
templateUrl: './selected-item-container.component.html',
styleUrls: ['./selected-item-container.component.scss']
styleUrls: ['./selected-item-container.component.scss'],
standalone: false
})
export class SelectedItemContainerComponent {
@@ -18,14 +18,15 @@ import { withLatestFrom,switchMap,combineLatest } from 'rxjs/operators';
@Component({
selector: 'fm-map-selected-item-cropfield',
templateUrl: './selected-item-cropfield.component.html',
styleUrls: ['./selected-item-cropfield.component.scss']
styleUrls: ['./selected-item-cropfield.component.scss'],
standalone: false
})
export class SelectedItemCropfieldComponent extends AbstractSelectedItemComponent implements OnInit{
public items: Observable<IListItem[]>;
constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService, location: Location, router: Router, private itemService$: ItemService,private folderService$: FolderService) {
super(store, itemTypeService,location,router);
super(store, itemTypeService, itemService$, location,router);
}
areaInHa(item:IItem):number {
@@ -7,7 +7,8 @@
<h2 *ngIf="parentOfItemType('vnd.farmmaps.itemtype.cropfield')">{{parentItem.name}}</h2>
<h1>{{item.name}}</h1>
</div>
<div class="legend-container" *ngIf="item?.data.layers;let layers">
<ng-container *ngIf="item?.data.layers;let layers">
<div class="legend-container">
<div class="card menu-card">
<div *ngIf="layers.length>1">
<select (change)="onLayerChanged($event.target.value)">
@@ -26,9 +27,11 @@
<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>
<li><fm-item-link class="text-primary p-0" [itemCode]="item.code" pathSuffix="data" [showText]="true"></fm-item-link></li>
<li><a href="#" (click)="download($event,item,layers,itemLayer.layerIndex)"><i class="fal fa-download" aria-hidden="true" i18n-title title="Download"></i>&nbsp;<span i18n>Download</span></a></li>
</ul>
</div>
<fm-map-zoom-to-show-alert [layer]="itemLayer?.layer"></fm-map-zoom-to-show-alert>
</ng-container>
</div>
</div>
</div>
@@ -1,12 +1,13 @@
import { Component, Injectable } from '@angular/core';
import { Location } from '@angular/common';
import { Store } from '@ngrx/store';
import * as mapReducers from '../../reducers/map.reducer';
import { commonReducers, ItemTypeService, ItemService, FolderService } from '@farmmaps/common';
import { Component, Injectable, OnDestroy } from '@angular/core';
import { Router } from '@angular/router';
import { commonReducers, FolderService, IItem, IItemLinkType, ItemService, ItemTypeService, IUrlType } from '@farmmaps/common';
import { Store } from '@ngrx/store';
import { Subscription } from 'rxjs';
import * as mapActions from '../../actions/map.actions';
import * as mapReducers from '../../reducers/map.reducer';
import { ForItemType } from '../for-item/for-itemtype.decorator';
import { AbstractSelectedItemComponent } from '../selected-item/selected-item.component';
import * as mapActions from '../../actions/map.actions';
@ForItemType("vnd.farmmaps.itemtype.geotiff.processed")
@@ -14,12 +15,18 @@ import * as mapActions from '../../actions/map.actions';
@Component({
selector: 'fm-map-selected-item-geotiff',
templateUrl: './selected-item-geotiff.component.html',
styleUrls: ['./selected-item-geotiff.component.scss']
styleUrls: ['./selected-item-geotiff.component.scss'],
standalone: false
})
export class SelectedItemGeotiffComponent extends AbstractSelectedItemComponent {
export class SelectedItemGeotiffComponent extends AbstractSelectedItemComponent implements OnDestroy {
sub: Subscription;
constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService, location: Location, router: Router, private itemService$: ItemService,private folderService$: FolderService) {
super(store, itemTypeService,location,router);
constructor(store: Store<mapReducers.State | commonReducers.State>, public itemService: ItemService, itemTypeService: ItemTypeService, location: Location, router: Router, private itemService$: ItemService,private folderService$: FolderService) {
super(store, itemTypeService,itemService,location,router);
}
ngOnDestroy(): void {
if (this.sub) this.sub.unsubscribe();
}
onLayerChanged(layerIndex: number) {
@@ -29,4 +36,13 @@ export class SelectedItemGeotiffComponent extends AbstractSelectedItemComponent
layer(layers:any,layerIndex:number) {
return layers.find(l => l.index == layerIndex);
}
download(event:MouseEvent,item:IItem,layers:any,layerIndex:number) {
event.stopPropagation();
event.preventDefault();
const itemLink : IItemLinkType = {itemcode:item.code,query:`layer=${this.layer(layers,layerIndex).name}`,pathsuffix:"download", validminutes:10}
this.sub = this.itemService.getItemLink(itemLink).subscribe((itemLinkUrl:IUrlType) => {
window.location.href = itemLinkUrl.url;
})
}
}
@@ -7,7 +7,8 @@
<h2 *ngIf="parentOfItemType('vnd.farmmaps.itemtype.cropfield')">{{parentItem.name}}</h2>
<h1>{{item.name}}</h1>
</div>
<div class="legend-container" *ngIf="item?.data.layers;let layers">
<ng-container *ngIf="item?.data.layers;let layers">
<div class="legend-container">
<div class="card menu-card">
<div *ngIf="layers.length>1">
<select (change)="onLayerChanged($event.target.value)">
@@ -24,8 +25,10 @@
<li *ngIf="!getItemLayer(item,itemLayer.layerIndex)"><a href="#" (click)="handleAddAsLayer(item,itemLayer.layerIndex)" ><i class="fas fa-layer-olus" 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>
</ng-container>
<li><a href="#" (click)="download($event,item,layers,itemLayer.layerIndex)"><i class="fal fa-download" aria-hidden="true" i18n-title title="Download"></i>&nbsp;<span i18n>Download</span></a></li>
</ul>
</div>
</ng-container>
<fm-map-zoom-to-show-alert [layer]="itemLayer?.layer"></fm-map-zoom-to-show-alert>
</div>
</div>
@@ -1,14 +1,13 @@
import { Component, Input, Injectable, OnInit } from '@angular/core';
import { Location } from '@angular/common';
import { Feature } from 'ol';
import { Component, Injectable, OnDestroy } from '@angular/core';
import { Router } from '@angular/router';
import { commonReducers, FolderService, IItem, IItemLinkType, ItemService, ItemTypeService, IUrlType } from '@farmmaps/common';
import { Store } from '@ngrx/store';
import * as mapReducers from '../../reducers/map.reducer';
import { commonReducers, ItemTypeService, IItem, Item, ItemService, FolderService, IListItem} from '@farmmaps/common';
import * as mapActions from '../../actions/map.actions';
import { Router, ActivatedRoute, ParamMap, Event } from '@angular/router';
import * as mapReducers from '../../reducers/map.reducer';
import { ForItemType } from '../for-item/for-itemtype.decorator';
import { AbstractSelectedItemComponent } from '../selected-item/selected-item.component';
import { Observable } from 'rxjs';
import { Subscription } from 'rxjs';
@ForItemType("vnd.farmmaps.itemtype.shape.processed")
@@ -16,14 +15,20 @@ import { Observable } from 'rxjs';
@Component({
selector: 'fm-map-selected-item-shape',
templateUrl: './selected-item-shape.component.html',
styleUrls: ['./selected-item-shape.component.scss']
styleUrls: ['./selected-item-shape.component.scss'],
standalone: false
})
export class SelectedItemShapeComponent extends AbstractSelectedItemComponent {
constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService, location: Location, router: Router, private itemService$: ItemService,private folderService$: FolderService) {
super(store, itemTypeService,location,router);
}
export class SelectedItemShapeComponent extends AbstractSelectedItemComponent implements OnDestroy {
public selectedLayer = 0;
sub: Subscription;
constructor(store: Store<mapReducers.State | commonReducers.State>, public itemService: ItemService, itemTypeService: ItemTypeService, location: Location, router: Router, private itemService$: ItemService,private folderService$: FolderService) {
super(store, itemTypeService,itemService,location,router);
}
ngOnDestroy(): void {
if (this.sub) this.sub.unsubscribe();
}
onLayerChanged(layerIndex: number) {
this.store.dispatch(new mapActions.SetLayerIndex(layerIndex));
@@ -32,4 +37,13 @@ export class SelectedItemShapeComponent extends AbstractSelectedItemComponent {
layer(layers:any,layerIndex:number) {
return layers.find(l => l.index == layerIndex);
}
download(event:MouseEvent,item:IItem,layers:any,layerIndex:number) {
event.stopPropagation();
event.preventDefault();
const itemLink : IItemLinkType = {itemcode:item.code,query:`layer=${this.layer(layers,layerIndex).name}`,pathsuffix:"download", validminutes:10}
this.sub = this.itemService.getItemLink(itemLink).subscribe((itemLinkUrl:IUrlType) => {
window.location.href = itemLinkUrl.url;
})
}
}
@@ -7,7 +7,8 @@
<h2 *ngIf="parentOfItemType('vnd.farmmaps.itemtype.cropfield')">{{parentItem.name}}</h2>
<h1>{{item.name}}</h1>
</div>
<div class="legend-container" *ngIf="item?.data.layers;let layers">
<ng-container *ngIf="item?.data.layers;let layers">
<div class="legend-container">
<div class="card menu-card">
<h5><span i18n>Date</span>: {{temporalService.selectedDate(itemLayer)}}</h5>
<div class="d-flex justify-content-between">
@@ -42,8 +43,10 @@
<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>
<li><a href="#" (click)="handleGoToChart(item)"><i class="fal fa-line-chart" aria-hidden="true" i18m-title title="Show chart"></i>&nbsp;<span i18n>Show chart</span></a></li>
<li><a href="#" (click)="download($event,item,layers,itemLayer.layerIndex)"><i class="fal fa-download" aria-hidden="true" i18n-title title="Download"></i>&nbsp;<span i18n>Download</span></a></li>
</ul>
</div>
</ng-container>
</div>
</div>
</div>
@@ -1,28 +1,33 @@
import { Component, Injectable } from '@angular/core';
import { Location } from '@angular/common';
import { Store } from '@ngrx/store';
import * as mapReducers from '../../reducers/map.reducer';
import { commonReducers, ItemTypeService, IItem } from '@farmmaps/common';
import { Component, Injectable, OnDestroy } from '@angular/core';
import { Router } from '@angular/router';
import { commonReducers, IItem, IItemLinkType, ItemService, ItemTypeService, IUrlType } from '@farmmaps/common';
import { Store } from '@ngrx/store';
import { Subscription } from 'rxjs';
import * as mapActions from '../../actions/map.actions';
import { IItemLayer, ITemporalItemLayer } from '../../models/item.layer';
import * as mapReducers from '../../reducers/map.reducer';
import { TemporalService } from '../../services/temporal.service';
import { ForItemType } from '../for-item/for-itemtype.decorator';
import { AbstractSelectedItemComponent } from '../selected-item/selected-item.component';
import { ITemporalItemLayer} from '../../models/item.layer';
import * as mapActions from '../../actions/map.actions';
import { IItemLayer } from '../../models/item.layer';
import {TemporalService} from '../../services/temporal.service';
@ForItemType("vnd.farmmaps.itemtype.temporal")
@Injectable()
@Component({
selector: 'fm-map-selected-item-temporal',
templateUrl: './selected-item-temporal.component.html',
styleUrls: ['./selected-item-temporal.component.scss']
styleUrls: ['./selected-item-temporal.component.scss'],
standalone: false
})
export class SelectedItemTemporalComponent extends AbstractSelectedItemComponent {
export class SelectedItemTemporalComponent extends AbstractSelectedItemComponent implements OnDestroy {
sub: Subscription;
constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService, location: Location, router: Router,public temporalService:TemporalService) {
super(store, itemTypeService,location,router);
constructor(store: Store<mapReducers.State | commonReducers.State>, public itemService: ItemService, itemTypeService: ItemTypeService, location: Location, router: Router,public temporalService:TemporalService) {
super(store, itemTypeService,itemService,location,router);
}
ngOnDestroy(): void {
if (this.sub) this.sub.unsubscribe();
}
onLayerChanged(layerIndex: number) {
@@ -33,8 +38,6 @@ export class SelectedItemTemporalComponent extends AbstractSelectedItemComponent
return (this.itemLayer as ITemporalItemLayer)?.selectedItemLayer
}
handleNextTemporal(event:MouseEvent) {
this.store.dispatch(new mapActions.NextTemporal());
event.preventDefault();
@@ -61,4 +64,13 @@ export class SelectedItemTemporalComponent extends AbstractSelectedItemComponent
this.router.navigate(['/viewer', 'temporal', 'item', item.parentCode, new Date(Date.parse(item.dataDate)).getUTCFullYear()]);
return false;
}
download(event:MouseEvent,item:IItem,layers:any,layerIndex:number) {
event.stopPropagation();
event.preventDefault();
const itemLink : IItemLinkType = {itemcode:item.code,query:`layer=${this.layer(layers,layerIndex).name}`,pathsuffix:"download", validminutes:10}
this.sub = this.itemService.getItemLink(itemLink).subscribe((itemLinkUrl:IUrlType) => {
window.location.href = itemLinkUrl.url;
})
}
}
@@ -2,7 +2,7 @@ import {Component, Injectable, Input, Directive} from '@angular/core';
import {Location} from '@angular/common';
import {Store} from '@ngrx/store';
import * as mapReducers from '../../reducers/map.reducer';
import {AppConfig, commonReducers, IItem, ItemTypeService} from '@farmmaps/common';
import {AppConfig, commonReducers, IItem, ItemService, ItemTypeService} from '@farmmaps/common';
import * as mapActions from '../../actions/map.actions';
import {Router} from '@angular/router';
import { IItemLayer } from '../../models/item.layer';
@@ -15,7 +15,7 @@ export abstract class AbstractSelectedItemComponent {
@Input() parentItem: IItem;
@Input() itemLayer: IItemLayer;
@Input() overlayLayers: Array<IItemLayer>;
constructor(public store: Store<mapReducers.State | commonReducers.State>, public itemTypeService: ItemTypeService, private location: Location, public router: Router) {
constructor(public store: Store<mapReducers.State | commonReducers.State>, public itemTypeService: ItemTypeService, public itemService: ItemService, private location: Location, public router: Router) {
}
handleOnView(item: IItem) {
@@ -37,6 +37,11 @@ export abstract class AbstractSelectedItemComponent {
return false;
}
handleOnDelete(item: IItem) {
this.itemService.deleteItem(item.code);
return false;
}
handleAddAsLayer(item: IItem,layerIndex = -1) {
this.store.dispatch(new mapActions.AddLayer(item,layerIndex));
return false;
@@ -72,12 +77,13 @@ export abstract class AbstractSelectedItemComponent {
@Component({
selector: 'fm-map-selected-item',
templateUrl: './selected-item.component.html',
styleUrls: ['./selected-item.component.scss']
styleUrls: ['./selected-item.component.scss'],
standalone: false
})
export class SelectedItemComponent extends AbstractSelectedItemComponent {
constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService, location: Location, router: Router, public config:AppConfig) {
super(store, itemTypeService,location,router);
constructor(store: Store<mapReducers.State | commonReducers.State>, itemTypeService: ItemTypeService, itemService: ItemService, location: Location, router: Router, public config:AppConfig) {
super(store, itemTypeService,itemService,location,router);
}
getThumbnailUrl(item:IItem):string {
@@ -2,6 +2,7 @@ import { Directive, ViewContainerRef } from '@angular/core';
@Directive({
selector: '[fm-map-widget-host]',
standalone: false
})
export class WidgetHostDirective {
constructor(public viewContainerRef: ViewContainerRef) { }
@@ -3,7 +3,8 @@ import { Component, OnInit, Input } from '@angular/core';
@Component({
selector: 'fm-map-widget-status',
templateUrl: './widget-status.component.html',
styleUrls: ['./widget-status.component.css']
styleUrls: ['./widget-status.component.css'],
standalone: false
})
export class WidgetStatusComponent implements OnInit {
@Input() stage: Stage;
@@ -4,7 +4,8 @@ import { Source } from 'ol/source';
@Component({
selector: 'fm-map-zoom-to-show-alert',
template: '<div *fmMapIfZoomToShow="layer$" class="alert alert-info"><i class="fas fa-search-plus" aria-hidden="true" i18n-title title="Add as layer"></i>&nbsp;<span i18n>Zoom in to show layer</span></div>'
template: '<div *fmMapIfZoomToShow="layer$" class="alert alert-info"><i class="fas fa-search-plus" aria-hidden="true" i18n-title title="Add as layer"></i>&nbsp;<span i18n>Zoom in to show layer</span></div>',
standalone: false
})
export class ZoomToShowAlert {
public layer$: Layer<Source>;
@@ -166,6 +166,7 @@ export class MapEffects {
zoomToExtent2$ = createEffect(() => this.actions$.pipe(
ofType(mapActions.SETFEATURES),
switchMap((action: mapActions.SetFeatures) => {
if (action.zoomToExtent) {
const extent = createEmpty();
if (extent) {
for (const f of action.features) {
@@ -173,6 +174,7 @@ export class MapEffects {
}
if (action.features.length > 0) return of(new mapActions.SetExtent(extent));
}
}
return EMPTY;
})));
@@ -9,6 +9,7 @@ import { ILayervalue } from '../models/layer.value';
import * as mapActions from '../actions/map.actions';
import {commonActions} from '@farmmaps/common';
import { createSelector, createFeatureSelector } from '@ngrx/store';
import * as _ from 'lodash';
import {Feature} from 'ol';
import {Geometry} from 'ol/geom';
@@ -47,6 +48,7 @@ export interface State {
query:IQuery,
parentCode: string,
features: Array<Feature<Geometry>>,
featuresBackup: Array<Feature<Geometry>>,
panelVisible: boolean,
panelCollapsed: boolean,
panelExtraWide: boolean,
@@ -93,6 +95,7 @@ export const initialState: State = {
query: null,
parentCode: null,
features: [],
featuresBackup: [],
panelVisible: false,
panelCollapsed: false,
panelExtraWide: false,
@@ -156,13 +159,15 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
const a = action as mapActions.StartSearchSuccess;
return tassign(state, {
features: a.features,
featuresBackup: [],
inSearch:false
});
}
case mapActions.SETFEATURES: {
const a = action as mapActions.SetFeatures;
return tassign(state, {
features: a.features
features: a.features,
featuresBackup: []
});
}
case mapActions.SELECTFEATURE: {
@@ -180,6 +185,7 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
selectedItemLayer: null,
showDataLayerSlide: false,
features:[],
featuresBackup: [],
inSearch:inSearch
});
}
@@ -296,6 +302,7 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
return tassign(state, {
selectedItem: null,
features:[],
featuresBackup: [],
selectedItemLayer:null,
searchCollapsed: !panelVisible,
panelVisible: panelVisible,
@@ -332,7 +339,8 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
extent: a.feature.getGeometry().getExtent(),
searchCollapsed: false,
clearEnabled:true,
features:features
features:features,
featuresBackup:[]
});
}
case mapActions.UPDATEFEATURESUCCESS: {
@@ -346,7 +354,7 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
features.push(state.features[i]);
}
}
return tassign(state, { features: features });
return tassign(state, { features: features, featuresBackup: [] });
}
case mapActions.EXPANDSEARCH: {
return tassign(state, { searchCollapsed: false });
@@ -391,7 +399,7 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
return tassign(state, {overlayLayers: [], selectedOverlayLayer: null});
}
case mapActions.CLEARFEATURES: {
return tassign(state, {features: [], selectedFeature: null});
return tassign(state, {features: [], featuresBackup: [], selectedFeature: null});
}
case mapActions.SETVISIBILITY: {
const a = action as mapActions.SetVisibility;
@@ -509,6 +517,7 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
searchCollapsed: true,
searchMinified: false,
features: [],
featuresBackup: [],
query:initialState.query,
showLayerSwitcher: false,
extent: null,
@@ -556,7 +565,8 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
selectedItem: null,
selectedItemLayer: null,
showDataLayerSlide: false,
features:[]
features:[],
featuresBackup:[]
});
}
if(state.features.length>0) {
@@ -569,7 +579,7 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
if(index>=0) {
const newFeatures = state.features.slice(0);
newFeatures.splice(index,1);
return tassign(state,{features:newFeatures});
return tassign(state,{features:newFeatures, featuresBackup:[]});
}
}
return state;
@@ -578,6 +588,17 @@ export function reducer(state = initialState, action: mapActions.Actions | commo
const a= action as mapActions.SetPanelExtraWide;
return tassign(state,{panelExtraWide:a.panelExtraWide});
}
case mapActions.BACKUPFEATURES: {
return tassign(state, {
featuresBackup: _.cloneDeep(state.features)
});
}
case mapActions.RESTOREFEATURES: {
return tassign(state, {
features: _.cloneDeep(state.featuresBackup),
featuresBackup: []
});
}
default: {
return state;
}
@@ -637,6 +658,8 @@ export const selectGetExtent = createSelector(selectMapState, getExtent);
export const selectGetViewExtent = createSelector(selectMapState, getViewExtent);
export const selectGetOverlayLayers = createSelector(selectMapState, getOverlayLayers);
export const selectGetBaseLayers = createSelector(selectMapState, getBaseLayers);
export const selectGetBaseMaps = createSelector(selectGetBaseLayers, (layers) => layers.filter(layer => layer.item.data.category === "baseMap"));
export const selectGetArealMaps = createSelector(selectGetBaseLayers, (layers) => layers.filter(layer => layer.item.data.category === "aerialPhoto").sort((a, b) => a.item.dataDate <= b.item.dataDate ? 1 : -1));
export const selectGetProjection = createSelector(selectMapState, getProjection);
export const selectGetSelectedBaseLayer = createSelector(selectMapState, getSelectedBaseLayer);
export const selectGetSelectedOverlayLayer = createSelector(selectMapState, getSelectedOverlayLayer);
+542 -4
View File
@@ -11,17 +11,555 @@
"tslib": "^2.0.0"
},
"peerDependencies": {
"@angular/common": "^17.3.3",
"@angular/core": "^17.3.3",
"cesium": ">=1.82.1",
"ng-openlayers": "17.1.3",
"@angular/common": "^18.2.3",
"@angular/core": "^18.2.3",
"cesium": "^1.97.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": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz",
"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": {
"registry": "https://repository.akkerweb.nl/repository/npm-hosted/"
},
"peerDependencies": {
"@angular/common": "^17.3.3",
"@angular/core": "^17.3.3",
"ng-openlayers": "17.1.3",
"cesium": ">=1.82.1",
"ol-cesium": ">=2.13.0"
},
"dependencies": {
"tslib": "^2.0.0"
},
"peerDependencies": {
"@angular/common": "19.2.18",
"@angular/core": "19.2.18",
"cesium": "^1.97.0",
"ol-cesium": ">=2.13.0"
}
}
@@ -1,14 +1,15 @@
import { NgModule } from '@angular/core';
import { Switch2D3DComponent } from './components/olcs/switch2d3d/switch2d3d.component';
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';
@NgModule({
declarations: [Switch2D3DComponent],
imports: [
AppCommonModule,
AppCommonMapModule
AppCommonMapModule,
AngularOpenlayersModule,
],
exports: [Switch2D3DComponent]
})
@@ -1,6 +1,6 @@
import { Component, OnInit,Input,Host } from '@angular/core';
import { Interaction} from 'ol/interaction';
import { MapComponent } from 'ng-openlayers';
import { MapComponent } from '@farmmaps/ng-openlayers';
import OLCesium from 'olcs/OLCesium';
import RasterSynchronizer from 'olcs/RasterSynchronizer';
import VectorSynchronizer from 'olcs/VectorSynchronizer';
@@ -10,7 +10,8 @@ import { Store } from '@ngrx/store';
@Component({
selector: 'fm-map3d-switch2d3d',
templateUrl: './switch2d3d.component.html',
styleUrls: ['./switch2d3d.component.scss']
styleUrls: ['./switch2d3d.component.scss'],
standalone: false
})
export class Switch2D3DComponent {
@@ -49,7 +50,11 @@ export class Switch2D3DComponent {
this.interactions=[];
this.map.instance.getInteractions().forEach((i) => {
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);
}
});
+3737 -14
View File
File diff suppressed because it is too large Load Diff
+14 -14
View File
@@ -1,25 +1,25 @@
{
"name": "@farmmaps/common",
"version": "2.0.0",
"version": "2.1.0",
"publishConfig": {
"registry": "https://repository.akkerweb.nl/repository/npm-hosted/"
},
"peerDependencies": {
"@ng-bootstrap/ng-bootstrap": "^16.0.0",
"@angular/common": "^17.3.3",
"@angular/core": "^17.3.3",
"@angular/forms": "^17.3.3",
"@ngrx/effects": "^17",
"@ngrx/router-store": "^17",
"@ngrx/store": "^17",
"@ng-bootstrap/ng-bootstrap": "^18.0.0",
"@angular/common": "19.2.18",
"@angular/core": "19.2.18",
"@angular/forms": "19.2.18",
"@ngrx/effects": "19.2.1",
"@ngrx/router-store": "19.2.1",
"@ngrx/store": "19.2.1",
"tassign": "^1.0.0",
"bootstrap": "^5.2.0",
"bootstrap": "^5.3.3",
"@microsoft/signalr": "^3.1.16",
"ngx-uploadx": "^6.2.0",
"angular-oauth2-oidc": "^13",
"ngx-uploadx": "7.0.1",
"angular-oauth2-oidc": "^17.0.2",
"moment": "^2.29.4",
"ngx-avatars": "1.7.0",
"ngx-image-cropper": "^7.2.1",
"ngx-clipboard": "16.0.0"
"ngx-avatars": "1.9.3",
"ngx-image-cropper": "^7.0.0",
"ngx-clipboard": "^16.0.0"
}
}
@@ -71,6 +71,8 @@ export const TOGGLENOTIFICATIONMENU = '[AppCommon] ToggleNotificationMenu';
export const TOGGLEHELPMENU = '[AppCommon] ToggleHelpMenu';
export const TOGGLESETTINGMENU = '[AppCommon] ToggleSettingMenu';
export const SETMENUVISIBLE = '[AppCommon] SetMenuVisible';
export const ONLINE = '[AppCommon] Online';
@@ -81,6 +83,11 @@ export const SETPAGEMODE = '[AppCommon] SetPageMode';
export const SETUNREADNOTIFICATIONS = '[AppCommon] SetUnreadNotifications';
export const SWITCHLANGUAGE = '[AppCommon] SwitchLanguage';
export const SETSETTINGMENUBACKGROUNDCOLOR = '[AppCommon] SetSettingMenuBackgroundColor';
export class InitUser implements Action {
readonly type = INITUSER;
@@ -332,6 +339,12 @@ export class ToggleHelpMenu implements Action {
constructor() { }
}
export class ToggleSettingMenu implements Action {
readonly type = TOGGLESETTINGMENU;
constructor() { }
}
export class SetMenuVisible implements Action {
readonly type = SETMENUVISIBLE;
@@ -363,6 +376,17 @@ export class SetUnreadNotifications implements Action {
}
export class SwitchLanguage implements Action {
readonly type = SWITCHLANGUAGE;
constructor(public locale:string) { }
}
export class SetSettingMenuBackgroundColor implements Action {
readonly type = SETSETTINGMENUBACKGROUNDCOLOR;
constructor(public color:string) { }
}
export type Actions = OpenModal
| InitRoot
@@ -408,7 +432,10 @@ export type Actions = OpenModal
| ToggleAppMenu
| ToggleNotificationMenu
| ToggleHelpMenu
| ToggleSettingMenu
| NotificationEvent
| SetUnreadNotifications;
| SetUnreadNotifications
| SwitchLanguage
| SetSettingMenuBackgroundColor;
@@ -1,5 +1,5 @@
// angular modules
import { NgModule, APP_INITIALIZER, ModuleWithProviders, Injector, Optional, SkipSelf } from '@angular/core';
import { NgModule, ModuleWithProviders, Injector, Optional, SkipSelf, inject, provideAppInitializer } from '@angular/core';
import { DatePipe } from '@angular/common';
import { HTTP_INTERCEPTORS } from '@angular/common/http';
@@ -13,6 +13,7 @@ import { SchemaService } from './services/schema.service';
import { FolderService } from './services/folder.service';
import { TimespanService } from './services/timespan.service';
import { ItemService } from './services/item.service';
import { TaskService } from './services/task.service';
import { AdminService } from './services/admin.service';
import { EventService } from './services/event.service';
import { TypeaheadService } from './services/typeahead.service';
@@ -44,6 +45,7 @@ export {
ItemTypeService,
TimespanService,
ItemService,
TaskService,
AdminService,
EventService,
TypeaheadService,
@@ -88,12 +90,10 @@ export class AppCommonServiceModule {
providers: [
AppConfig,
ItemTypeService,
{
provide: APP_INITIALIZER,
useFactory: appConfigFactory,
deps: [Injector, AppConfig, OAuthService, AuthConfigFactory, OAuthStorage, ItemTypeService],
multi: true
},
provideAppInitializer(() => {
const initializerFn = (appConfigFactory)(inject(Injector), inject(AppConfig), inject(OAuthService), inject(AuthConfigFactory), inject(OAuthStorage), inject(ItemTypeService));
return initializerFn();
}),
{
provide: HTTP_INTERCEPTORS,
useClass: AccessTokenInterceptor,
+75 -123
View File
@@ -1,16 +1,16 @@
// angular modules
import { NgModule, APP_INITIALIZER, ModuleWithProviders, Injector, Optional, SkipSelf,InjectionToken } from '@angular/core';
import { CommonModule, DatePipe } from '@angular/common';
import { HttpClientModule, HttpClient, HTTP_INTERCEPTORS } from '@angular/common/http';
import { CommonModule } from '@angular/common';
import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';
import { InjectionToken, NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
// 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 { 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 { UploadxModule } from 'ngx-uploadx';
// routing module
@@ -19,129 +19,71 @@ import { AppCommonRoutingModule } from './common-routing.module';
import { MODULE_NAME } from './module-name';
//components
import { SafePipe } from './shared/safe.pipe';
import { AuthConfigFactory, IAuthconfigFactory } from './shared/authconfigFactory';
import { AppComponent } from './components/app/app.component';
import { AuthCallbackComponent } from './components/auth-callback/auth-callback.component';
import { SessionClearedComponent } from './components/session-cleared/session-cleared.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 { IItemLinkType} from './models/itemlink.type';
import {IUrlType} from './models/url.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 { EditImageModalComponent } from './components/edit-image-modal/edit-image-modal.component';
import { AvatarComponent } from './components/avatar/avatar.component';
import { ItemLinkComponent } from './components/item-link/item-link.component';
import { AvatarModule } from 'ngx-avatars';
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 { AuthCallbackComponent } from './components/auth-callback/auth-callback.component';
import { AvatarComponent } from './components/avatar/avatar.component';
import { BackButtonComponent } from './components/back-button/back-button.component';
import { EditImageModalComponent } from './components/edit-image-modal/edit-image-modal.component';
import { GradientSelectComponent } from './components/gradient-select/gradient-select.component';
import { GradientComponent } from './components/gradient/gradient.component';
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 { SettingMenuComponent } from './components/setting-menu/setting-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 {
SafePipe,
AuthCallbackComponent,
AppComponent,
SessionClearedComponent,
ResumableFileUploadComponent,
NotFoundComponent,
NotImplementedComponent,
SidePanelComponent,
TimespanComponent,
TagInputComponent,
UserMenuComponent,
ThumbnailComponent,
HasPackageDirective,
PackageExistsDirective,
HasClaimDirective,
HasRoleDirective,
Alert,
IEventMessage,
IItem,
Item,
IItemType,
IItemLinkType,
IUrlType,
IItemTypes,
IItemTask,
ItemTask,
IListItem,
ITypeaheadItem,
IUser,
IQueryState,
IPackage,
IPackages,
commonActions,
commonReducers,
IAuthconfigFactory,
AuthConfigFactory,
MenuBackgroundComponent,
SecureOAuthStorage,
WeatherCurrentObservation,
IJsonline,
ISenMLItem,
IDataLayer,
IColor,
IGradientstop,
BackButtonComponent,
AvatarComponent,
ItemLinkComponent,
EditImageModalComponent,
Alert, AppComponent, AuthCallbackComponent, AuthConfigFactory, AvatarComponent, BackButtonComponent, commonActions,
commonReducers, EditImageModalComponent,
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({
imports: [
CommonModule,
HttpClientModule,
AppCommonRoutingModule,
StoreModule.forFeature(MODULE_NAME, commonReducers.reducer),
EffectsModule.forFeature([commonEffects.AppCommonEffects]),
OAuthModule.forRoot(),
NgbModule,
FormsModule,
UploadxModule,
ClipboardModule,
AvatarModule,
ImageCropperModule
],
declarations: [
@NgModule({ declarations: [
AppComponent,
AuthCallbackComponent,
SidePanelComponent,
@@ -163,6 +105,7 @@ export {
AppMenuComponent,
NotificationMenuComponent,
HelpMenuComponent,
SettingMenuComponent,
BackButtonComponent,
ThumbnailComponent,
EditImageModalComponent,
@@ -198,7 +141,16 @@ export {
AvatarComponent,
ItemLinkComponent,
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 {
}
@@ -8,7 +8,8 @@ import * as appActions from '../../actions/app-common.actions';
@Component({
selector: 'fm-app-menu',
templateUrl: './app-menu.component.html',
styleUrls: ['./app-menu.component.scss']
styleUrls: ['./app-menu.component.scss'],
standalone: false
})
export class AppMenuComponent implements OnInit {
@@ -33,6 +33,7 @@
<fm-resumable-file-upload></fm-resumable-file-upload>
</ng-container>
<div class="user-menu apponly">
<fm-setting-menu [user]="user|async" [showMenu]="settingMenuVisible|async" [backgroundColor]="settingMenuBackgroundColor|async"></fm-setting-menu>
<fm-help-menu [user]="user|async" [showMenu]="helpMenuVisible|async"></fm-help-menu>
<fm-notification-menu [user]="user|async" [unread]="unreadNotifications|async" [showMenu]="notificationMenuVisible|async"></fm-notification-menu>
<fm-app-menu [user]="user|async" [showMenu]="appMenuVisible|async"></fm-app-menu>
@@ -119,7 +119,7 @@ body { background: #f1f1f1; line-height: 18px; user-select:none;font-family: Lat
max-height:0em;
}
fm-help-menu,fm-app-menu,fm-user-menu,fm-notification-menu {
fm-help-menu,fm-app-menu,fm-user-menu,fm-notification-menu,fm-setting-menu {
display: inline-block;
margin-left: 1rem;
}
@@ -24,7 +24,8 @@ import * as appReducers from '../../reducers/app-common.reducer';
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
encapsulation: ViewEncapsulation.None,
changeDetection: ChangeDetectionStrategy.OnPush
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false
})
export class AppComponent implements OnInit, OnDestroy {
@@ -45,10 +46,12 @@ export class AppComponent implements OnInit, OnDestroy {
public accountMenuVisible: Observable<boolean> = this.store$.select(appReducers.SelectGetAccountMenuVisible);
public appMenuVisible: Observable<boolean> = this.store$.select(appReducers.SelectGetAppMenuVisible);
public notificationMenuVisible: Observable<boolean> = this.store$.select(appReducers.SelectGetNotificationMenuVisible);
public settingMenuVisible: Observable<boolean> = this.store$.select(appReducers.SelectGetSettingMenuVisible);
public helpMenuVisible: Observable<boolean> = this.store$.select(appReducers.SelectGetHelpMenuVisible);
public unreadNotifications: Observable<number> = this.store$.select(appReducers.SelectgetUnreadNotifications);
public user: Observable<IUser> = this.store$.select(appReducers.SelectGetUser);
public isPageMode: Observable<boolean> = this.store$.select(appReducers.SelectGetIsPageMode);
public settingMenuBackgroundColor: Observable<string> = this.store$.select(appReducers.SelectGetSettingMenuBackgroundColor);
@Input() showUploadProgress = true;
constructor(
@@ -5,7 +5,8 @@ import { Location} from '@angular/common';
@Component({
selector: 'fm-auth-callback',
template:'<div></div>'
template: '<div></div>',
standalone: false
})
export class AuthCallbackComponent {
@@ -5,7 +5,8 @@ import { AppConfig } from '../../shared/app.config';
@Component({
selector: 'fm-avatar',
templateUrl: './avatar.component.html',
styleUrls: ['./avatar.component.css']
styleUrls: ['./avatar.component.css'],
standalone: false
})
export class AvatarComponent implements OnInit {
@@ -1,23 +1,26 @@
import {Component, HostListener} from '@angular/core';
import { Location } from "@angular/common";
import { Component, EventEmitter, HostListener, Output } from '@angular/core';
import { DeviceService } from '../../services/device.service';
@Component({
selector: 'fm-back-button',
templateUrl: './back-button.component.html',
styleUrls: ['./back-button.component.scss']
styleUrls: ['./back-button.component.scss'],
standalone: false
})
export class BackButtonComponent {
@Output() beforeLocationBack = new EventEmitter();
@HostListener('click')
onBackClicked() {
this.beforeLocationBack.emit();
this.location.back();
}
constructor(private location: Location,private deviceService:DeviceService) { }
constructor(private location: Location,private deviceService:DeviceService) {
}
public show() {
return !this.deviceService.IsMobile();
}
}
@@ -11,7 +11,7 @@
<i class="fal fa-image"></i>
<div i18n>No image selected</div>
</div>
<image-cropper #imageCropper
<image-cropper #imageCropper output="base64"
[imageChangedEvent]="imageChangedEvent"
[maintainAspectRatio]="true"
[format]="imageType"
@@ -7,7 +7,8 @@ import {ImageService } from '../../services/image.service';
@Component({
selector: 'fm-edit-image-modal',
templateUrl: './edit-image-modal.component.html',
styleUrls: ['./edit-image-modal.component.scss']
styleUrls: ['./edit-image-modal.component.scss'],
standalone: false
})
export class EditImageModalComponent implements OnInit {
@@ -4,7 +4,8 @@ import { IItem } from '../../models/item';
@Component({
selector: 'fm-gradient-select',
templateUrl: './gradient-select.component.html',
styleUrls: ['./gradient-select.component.scss']
styleUrls: ['./gradient-select.component.scss'],
standalone: false
})
export class GradientSelectComponent implements OnChanges {
@@ -8,7 +8,8 @@ import { GradientService } from '../../common-service.module';
@Component({
selector: 'fm-gradient',
templateUrl: './gradient.component.html',
styleUrls: ['./gradient.component.scss']
styleUrls: ['./gradient.component.scss'],
standalone: false
})
export class GradientComponent implements OnInit,OnChanges {
@@ -9,6 +9,7 @@ import { IUser } from '../../models/user';
@Directive({
selector: '[fm-hasclaim]',
standalone: false
})
export class HasClaimDirective implements OnInit{
@Input('fm-hasclaim') claim:string;
@@ -6,6 +6,7 @@ import {Store} from '@ngrx/store';
@Directive({
selector: '[fmHasPackage]',
standalone: false
})
export class HasPackageDirective implements OnDestroy, AfterViewInit {
@@ -6,6 +6,7 @@ import { IUser } from '../../models/user';
@Directive({
selector: '[fmHasRole]',
standalone: false
})
export class HasRoleDirective implements OnInit, OnDestroy{
@Input('fmHasRole') role:string;
@@ -9,7 +9,8 @@ import * as appActions from '../../actions/app-common.actions';
@Component({
selector: 'fm-help-menu',
templateUrl: './help-menu.component.html',
styleUrls: ['./help-menu.component.scss']
styleUrls: ['./help-menu.component.scss'],
standalone: false
})
export class HelpMenuComponent implements OnInit {
@@ -8,7 +8,8 @@ import { ClipboardService } from 'ngx-clipboard'
@Component({
selector: 'fm-item-link',
templateUrl: './item-link.component.html'
templateUrl: './item-link.component.html',
standalone: false
})
export class ItemLinkComponent implements OnDestroy {
@@ -7,6 +7,7 @@ import * as commonActions from '../../actions/app-common.actions';
selector: 'fm-menu-background',
templateUrl: './menu-background.component.html',
styleUrls: ['./menu-background.component.scss'],
standalone: false
})
export class MenuBackgroundComponent implements OnInit {
@Input() visible = false;
@@ -4,6 +4,8 @@ import { Component, OnInit } from '@angular/core';
selector: 'fm-not-found',
templateUrl: './not-found.component.html'
// styleUrls: ['./not-found.component.css']
,
standalone: false
})
export class NotFoundComponent implements OnInit {
constructor() { }
@@ -2,7 +2,8 @@ import { Component, OnInit } from '@angular/core';
@Component({
selector: 'fm-not-implemented',
templateUrl: './not-implemented.component.html'
templateUrl: './not-implemented.component.html',
standalone: false
})
export class NotImplementedComponent implements OnInit {
constructor() { }
@@ -8,7 +8,8 @@ import * as appActions from '../../actions/app-common.actions';
@Component({
selector: 'fm-notification-menu',
templateUrl: './notification-menu.component.html',
styleUrls: ['./notification-menu.component.scss']
styleUrls: ['./notification-menu.component.scss'],
standalone: false
})
export class NotificationMenuComponent implements OnInit {
@@ -6,6 +6,7 @@ import {Store} from '@ngrx/store';
@Directive({
selector: '[fmPackageExists]',
standalone: false
})
export class PackageExistsDirective implements OnDestroy, AfterViewInit {
@@ -4,6 +4,7 @@ div.resumable-file-upload {
bottom: 0px;
width: 300px;
max-height: 250px;
z-index: 1;
/*z-index:2000 !important;*/
}
@@ -44,7 +45,7 @@ div.card-header span.fa {
.upload-file .progress-container .progress-bar {
display: block;
background-color: color("green");
background-color: green;
width: 0%;
height: 100%;
}
@@ -83,7 +84,7 @@ div.card-header span.fa {
}
.upload-file.done > div > span.fa-check {
color: color("green");
color: green;
width: 20px;
display: inline-block;
vertical-align: middle;
@@ -9,7 +9,8 @@ import * as commonActions from '../../actions/app-common.actions';
@Component({
selector: 'fm-resumable-file-upload',
templateUrl: './resumable-file-upload.component.html',
styleUrls: ['./resumable-file-upload.component.scss']
styleUrls: ['./resumable-file-upload.component.scss'],
standalone: false
})
export class ResumableFileUploadComponent implements OnInit, OnDestroy {
@@ -9,7 +9,8 @@ import * as appCommonActions from '../../actions/app-common.actions';
@Component({
selector: 'fm-session-cleared',
templateUrl: 'session-cleared.component.html',
styleUrls: ['session-cleared.component.scss']
styleUrls: ['session-cleared.component.scss'],
standalone: false
})
@@ -0,0 +1,8 @@
<div>
<div (click)="toggle($event)" class="rounded-circle menu-button hidden" [style.background-color]="backgroundColor" [ngClass]="{'hidden':!user || noContent}">
<span i18n-title title="Settings"><i class="fas fa-gear" aria-hidden="true"></i></span>
<div class="menu hidden" [ngClass]="{'hidden':!showMenu}">
<router-outlet name="setting-menu" (activate)="activateRoute()" (deactivate)="deActivateRoute()"></router-outlet>
</div>
</div>
</div>
@@ -0,0 +1,80 @@
.menu-button {
background-color: gray;
display: inline-block;
width: 2.5em;
height: 2.5em;
line-height: 2.5em;
text-align: center;
font-size: 1rem;
position: relative;
}
div.menu-button > span {
color:white;
}
.menu {
max-height: calc( 100vh - 4rem);
//transition: max-height 0.2s;
overflow: hidden;
box-shadow: 0 0 20px rgba(0,0,0,.3);
position: fixed;
top: 3.4rem;
right:0.5rem;
left:0.5rem;
background-color: #fff;
border-radius: 0.25rem;
padding: 0.5rem;
z-index: 3;
}
:host-context(.fullscreen) .menu {
top:4em;
}
.card {
padding:0.5rem;
min-width: 10rem;
}
.card-body {
text-align: left;
}
.hidden {
max-height: 0;
}
.menu.hidden {
padding: 0;
}
.menu-button.hidden {
overflow: hidden;
}
@media screen and (min-width: 44rem) {
.menu {
position: absolute;
top: 3rem;
right:0;
left: unset;
max-width: 30em;
}
:host-context(.fullscreen) .menu {
top: 3rem;
}
}
.unread {
display: block;
position: absolute;
top:-0.5em;
right: -0.5em;
}
.unread.hidden {
display: none;
}
@@ -0,0 +1,39 @@
import { Input } from '@angular/core';
import { Component, OnInit } from '@angular/core';
import { IUser } from '../../models/user';
import {Store} from '@ngrx/store';
import * as appReducers from '../../reducers/app-common.reducer';
import * as appActions from '../../actions/app-common.actions';
@Component({
selector: 'fm-setting-menu',
templateUrl: './setting-menu.component.html',
styleUrls: ['./setting-menu.component.scss'],
standalone: false
})
export class SettingMenuComponent implements OnInit {
@Input() user:IUser;
@Input() showMenu:boolean;
@Input() backgroundColor:string;
public noContent = true;
constructor(private store: Store<appReducers.State>) { }
ngOnInit(): void {
}
toggle(event:MouseEvent) {
event.stopPropagation();
this.store.dispatch(new appActions.ToggleSettingMenu());
}
activateRoute() {
this.noContent=false;
}
deActivateRoute() {
this.noContent=true;
}
}
@@ -3,7 +3,8 @@ import { Component, Input,Output,ViewChild,EventEmitter, ElementRef,OnChanges,Si
@Component({
selector: 'fm-side-panel',
templateUrl: 'side-panel.component.html',
styleUrls: ['side-panel.component.scss']
styleUrls: ['side-panel.component.scss'],
standalone: false
})
@@ -15,7 +15,8 @@ import {NgbTypeahead} from '@ng-bootstrap/ng-bootstrap';
useExisting: forwardRef(() => TagInputComponent),
multi: true
}
]
],
standalone: false
})
export class TagInputComponent implements ControlValueAccessor {
@@ -10,7 +10,8 @@ import { AppConfig } from "../../shared/app.config";
@Component({
selector: 'fm-thumbnail',
templateUrl: 'thumbnail.component.html',
styleUrls: ['thumbnail.component.scss']
styleUrls: ['thumbnail.component.scss'],
standalone: false
})
@@ -10,7 +10,8 @@ export interface TimeSpan {
@Component({
selector: 'fm-timespan',
templateUrl: './timespan.component.html',
styleUrls: ['./timespan.component.css']
styleUrls: ['./timespan.component.css'],
standalone: false
})
export class TimespanComponent implements OnInit, OnChanges {

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