Compare commits

...

436 Commits

Author SHA1 Message Date
Michael Auer
6bc265a358 Merge branch 'release/2.3' 2023-07-11 12:20:14 +02:00
Lorenz Hilpert
264d914044 #4124 Kulturpass- Abholfrist auf Bearbeitenseite 2023-06-15 16:28:44 +02:00
Lorenz Hilpert
12f1e7c3af #4124 Kulturpass - Zurücklegen bis und Abholfrist nicht ausgrauen 2023-06-15 14:33:41 +02:00
Lorenz Hilpert
9eb4fbab65 Merge branch 'release/2.3' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into release/2.3 2023-06-15 13:52:19 +02:00
Lorenz Hilpert
8d1a63e47f #4120 Marker Bezahlt über KulturPass in der Ergebnisliste 2023-06-15 13:51:57 +02:00
Nino Righi
e449e612c1 Merged PR 1566: #4112 Hotfix Manueller Preis Archivartikel
#4112 Hotfix Manueller Preis Archivartikel
2023-06-15 11:43:09 +00:00
Lorenz Hilpert
6ba65f031b #4119 Kaufoptionen - Nicht verfügbare Kaufoptionen werden ausgegraut 2023-06-15 11:56:05 +02:00
Lorenz Hilpert
f31ac4c2e3 #4117 Bug Fix Collect On Delivery 2023-06-15 11:01:39 +02:00
Lorenz Hilpert
f980f5aaf9 #4113 Wareneingang Navigation entfernt 2023-06-14 17:53:29 +02:00
Lorenz Hilpert
87a1e8a2c4 Kulturpass Handler Fix COLLECT_WITH_SMALLAMOUNTINVOICE 2023-06-14 16:30:19 +02:00
Lorenz Hilpert
5bb9ebd6ec #3961 Bestelldeadline anzeigen 2023-06-14 10:27:20 +02:00
Lorenz Hilpert
45ab1e9cc5 Kulturpass Drucken Fix 2023-06-13 17:51:33 +02:00
Lorenz Hilpert
8d2685a8c3 Fix Kulturpass Anzeige 2023-06-13 17:34:27 +02:00
Lorenz Hilpert
d38c41a99d Kulturpass - Fix - erneut drucken 2023-06-13 16:08:42 +02:00
Lorenz Hilpert
ff3dacde39 #4101 Kulturpass 2023-06-13 15:25:08 +02:00
Nino Righi
90b752e185 Merged PR 1558: #4092 Fix updateNotificationsGroup get orderId from first Item not from initi...
#4092 Fix updateNotificationsGroup get orderId from first Item not from initial form
2023-06-09 12:52:28 +00:00
Nino Righi
3ed9227508 Merged PR 1553: #4074 Bugfixes
#4074 Bugfixes
2023-06-06 16:12:56 +00:00
Nino Righi
9cfe8176d4 Merged PR 1548: #4083 Goods In Out Order Edit Bestellkanal orderSource from Order not from fi...
#4083 Goods In Out Order Edit Bestellkanal orderSource from Order not from first item
2023-06-06 14:53:47 +00:00
Nino Righi
3999b8f623 Merged PR 1544: #4074 Kaufoptionen Manuelle Preiseingabe
#4074 Kaufoptionen Manuelle Preiseingabe
2023-06-06 13:28:57 +00:00
Andreas Schickinger
c8f54b8be5 Merged PR 1540: #4073 Hotfix PP Filter wird zurückgesetzt, wenn nicht vollständig geladen
#4073 Hotfix PP Filter wird zurückgesetzt, wenn nicht vollständig geladen

Related work items: #4073
2023-06-02 14:34:52 +00:00
Nino Righi
413d2f5178 Merged PR 1539: #4048 Changed clientChannel to orderSource
#4048 Changed clientChannel to orderSource
2023-06-02 11:48:23 +00:00
Andreas Schickinger
35c2a6a046 Merged PR 1537: #4050 Hotfix Kaufoptionen Popup - Weiterleiten zur Kundensuche
#4050 Hotfix Kaufoptionen Popup - Weiterleiten zur Kundensuche

Related work items: #4050
2023-06-02 11:23:21 +00:00
Andreas Schickinger
1df201525c Merged PR 1536: #4068 Hotfix Warenkorb Rücklage Menge ändern
#4068 Warenkorb Rücklage Menge ändern hotfix
2023-06-01 15:42:19 +00:00
Lorenz Hilpert
ef72dcf554 #3984 - Filtereinstellungen wenn Artikel für Dig-Versand in Warenkorb sind falsch
(cherry picked from commit 6717f0ee3d)
2023-05-25 10:54:08 +02:00
Michael Auer
c228147c00 Merged PR 1529: Floating Docker Branch-Tags
Es wird zusätzlich zu den bisherigen Docker-Tags, ein Docker-Tag vergeben, das den aktuellen Branch repräsentiert. Da dieses (identische) Tag für jeden neuen Build aus einem Branch wieder vergeben wird, wandert das Tag auf das neueste Docker-Image aus diesem Branch (vgl. Tag _latest_)

Beispiele:
develop => refs_head_develop
release/2.3 => refs_head_release_2.3

(cherry picked from commit 8880ed0df6)
2023-05-24 18:37:47 +02:00
Lorenz Hilpert
4b56b973c8 #3979 SSC Nummer Anzeigen 2023-05-24 17:53:54 +02:00
Lorenz Hilpert
28a00b9f22 Merge branch 'release/2.3' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into release/2.3 2023-05-24 17:38:57 +02:00
Nino Righi
b1fe692de5 Merged PR 1527: #4009 Filter reset and Branch Selector Dropdown Bugfixes
#4009 Filter reset and Branch Selector Dropdown Bugfixes
2023-05-23 11:55:14 +00:00
Lorenz Hilpert
08b2f6cbc9 removed console log 2023-05-23 13:32:28 +02:00
Lorenz Hilpert
10e1db388f #3979 Meldenummer in UI anzeigen 2023-05-23 13:32:05 +02:00
Lorenz Hilpert
cd7f71b968 #4044 Handlungsanweisung im Status fehlt 2023-05-22 16:13:57 +02:00
Lorenz Hilpert
9361a631dd Merge branch 'release/2.3' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into release/2.3 2023-05-22 10:46:34 +02:00
Lorenz Hilpert
59c5abfd93 Deadline Pipe Fix 2023-05-22 10:46:10 +02:00
Nino Righi
633c23a6f0 Merged PR 1526: #4009 Clear Filter Release
#4009 Clear Filter Release
2023-05-18 22:27:32 +00:00
Lorenz Hilpert
779e7323e2 #3965 HSC ISA - Kundenkarten anlegen raus 2023-05-17 15:51:35 +02:00
Lorenz Hilpert
6e7fbd940b #3961 Order Deadline Popup 2023-05-17 14:56:25 +02:00
Lorenz Hilpert
6878b608fc #4035 branch slector fix 2023-05-17 13:23:43 +02:00
Lorenz Hilpert
a4fab8b64e #4035 Filiale wird bei Reservierung setzen 2023-05-16 15:32:38 +02:00
Lorenz Hilpert
21c0cc8794 #4039 - Irrläufer verschwinden nicht von der Liste 2023-05-16 13:30:51 +02:00
Lorenz Hilpert
7ea11ea0c4 #4039 Neu laden der Liste wenn man im Popup auf erledigt klickt 2023-05-12 16:19:21 +02:00
Lorenz Hilpert
778343f636 #4036 Bugfix scaling von texten 2023-05-09 13:03:02 +02:00
Lorenz Hilpert
d2fb3b6c85 #4036 - Kaufoptionen 2023-05-09 10:33:21 +02:00
Lorenz Hilpert
4c7b5eec38 #4016 Kaufoptionen - Preis bei Versandbestellungen 2023-05-03 16:22:51 +02:00
Lorenz Hilpert
35068e23cd #4021 PP - Suche nach Packstuecken oeffnet details bei einem treffer 2023-05-02 11:33:56 +02:00
Lorenz Hilpert
bc30b86cce #4020 PP - Label wird auf IPad nicht merh zwei zeilig angezeigt 2023-05-02 11:24:36 +02:00
Lorenz Hilpert
461f166e33 #4017 PP - scanId wird beim aender des status mit uebermittelt 2023-05-02 11:14:22 +02:00
Lorenz Hilpert
ad95faffa7 Merge branch 'release/2.3' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into release/2.3 2023-04-24 23:09:21 +02:00
Michael Auer
a0eb3c0459 Revert "Update Remi Api Url"
This reverts commit ea9920c4d5.
2023-04-24 16:53:01 +02:00
Lorenz Hilpert
fea435a6d2 Bugfix - Hor-Scroll removed 2023-04-24 16:41:52 +02:00
Lorenz Hilpert
ea9920c4d5 Update Remi Api Url 2023-04-24 16:19:50 +02:00
Lorenz Hilpert
259d0f1648 #3999 Kaufoptionen - Anzeigefehler in Titel/Format 2023-04-24 15:19:52 +02:00
Lorenz Hilpert
872d3ff383 #3391 - Filiale mit Klick auswählen 2023-04-24 14:57:16 +02:00
Michael Auer
d68055f8a9 ~ Version Bump: 2.3 2023-04-24 11:52:12 +02:00
Michael Auer
8d98dcf7e7 Merge tag '2.2' into develop 2023-04-24 11:16:13 +02:00
Michael Auer
c828a69f66 Merge branch 'release/2.2' 2023-04-24 11:16:04 +02:00
Lorenz Hilpert
6311ebe467 Show Navigation for Package-inspection 2023-04-21 10:33:34 +02:00
Lorenz Hilpert
f8a5ceed97 #3391 Fix - Tablet Kaufoptionen PopUp 2023-04-20 13:55:21 +02:00
Lorenz Hilpert
0420bda5da Bugfix - Default Branch in Kaufoptionen 2023-04-20 11:07:45 +02:00
Lorenz Hilpert
6dc532f40e Merge branch 'develop' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into develop 2023-04-20 08:31:50 +02:00
Lorenz Hilpert
0560d01f30 Merge branch 'release/2.2' into develop 2023-04-20 08:31:42 +02:00
Lorenz Hilpert
bc67ec3287 URL Change paragon-data -> paragon-systems.de 2023-04-20 08:28:54 +02:00
Lorenz Hilpert
bed35a2377 URL Change wws 2023-04-20 08:10:45 +02:00
Nino Righi
8d6bd80902 Merged PR 1522: #3989 Hotfix Remission List Item Loading Spinner
#3989 Hotfix Remission List Item Loading Spinner
2023-04-18 11:24:24 +00:00
Nino Righi
8aa870dddd Merged PR 1521: #3506 Fix Removed PackageCode from Payload of ReturnFinalizeReceipt
#3506 Fix Removed PackageCode from Payload of ReturnFinalizeReceipt
2023-04-18 08:44:40 +00:00
Nino Righi
26a3c76d5f Merged PR 1520: #3906 Fix Instock Bug Article Search Results
#3906 Fix Instock Bug Article Search Results
2023-04-17 12:25:29 +00:00
Lorenz Hilpert
18f738f2c3 Bereich Wareneingang aus Navigation entfernt 2023-04-17 11:07:50 +02:00
Lorenz Hilpert
bba50ccbcc Merge branch 'release/2.2' into develop 2023-04-13 14:11:53 +02:00
Lorenz Hilpert
3eea3b913d #3688 PopUp mit Irrläufern - Navigation disabled 2023-04-13 14:10:48 +02:00
Lorenz Hilpert
2dbeec831e #3976 nur ein Titel auf einmal remittieren 2023-04-13 14:00:09 +02:00
Lorenz Hilpert
88a06628e3 #3973 added missing tabindex 2023-04-12 18:24:07 +02:00
Lorenz Hilpert
37ceb30ffb #3973 Bedienung per Tastatur funktioniert fehlerhaft 2023-04-12 13:23:48 +02:00
Lorenz Hilpert
ebd0515e96 #3978 instock-Anfrage wird nicht immer ausgeführt 2023-04-11 16:41:00 +02:00
Nino Righi
ece5d0fa0d Merged PR 1519: #3957 Fix Develop Branch Selector Implementation with new purchasing options...
#3957 Fix Develop Branch Selector Implementation with new purchasing options modal
2023-04-11 14:26:23 +00:00
Lorenz Hilpert
6be214c6cd #3977 Fehlermeldung erscheint an falscher Stelle 2023-04-11 16:25:23 +02:00
Lorenz Hilpert
c470453ea4 Merge branch 'release/2.2' into develop 2023-04-05 11:58:29 +02:00
Nino Righi
bbe9326954 Merged PR 1518: #3957 Filter Current Branch if Role is Store
#3957 Filter Current Branch if Role is Store
2023-04-05 09:55:41 +00:00
Lorenz Hilpert
27961bb4e5 Checkbox Styling Kaufoptionen 2023-04-05 11:09:41 +02:00
Lorenz Hilpert
4952c090ef #3975 Anzahl der Irrläufer in der Liste auf 10 gesetzt 2023-04-05 11:06:17 +02:00
Lorenz Hilpert
74e4016625 #3928 Kaufoptionen - Filialen die IS_ORDERING_ENABLED true sind können ausgewählt werden 2023-04-03 13:14:58 +02:00
Lorenz Hilpert
c389008811 #3967 Fix - Nicht bestellbaren Artikel löschen führt zu Fehlermeldung 2023-04-03 10:21:21 +02:00
Nino Righi
e6dcf22012 Merged PR 1516: #3957 Filialdropdown Sortierung mit Store Rolle
#3957 Filialdropdown Sortierung mit Store Rolle
2023-03-31 15:14:30 +00:00
Nino Righi
d067f925b9 Merged PR 1517: #3927 #3929 #3964 Remission Wannennummer Changes
#3927 #3929 #3964 Remission Wannennummer Changes
2023-03-31 15:05:21 +00:00
Lorenz Hilpert
8b5609f765 #3672 Detailseite 'Falsche Filiale' - Erstes Item wird bei einem Irrläufer auch verblasst angezeigt 2023-03-31 14:08:52 +02:00
Lorenz Hilpert
dd04a1f2af #3963 Fix Falsche Verfügbarkeiten 2023-03-31 14:05:15 +02:00
Lorenz Hilpert
9caabb6cc0 #3960 Buttons Alle auswählen and Alle abwählen will now work correctly. 2023-03-31 13:34:00 +02:00
Nino Righi
33b28d5f41 Merged PR 1515: #3244 Remission Removed "Are you sure you want to remit" - Popup
#3244 Remission Removed "Are you sure you want to remit" - Popup
2023-03-31 11:21:28 +00:00
Lorenz Hilpert
475f9b5e34 Mark PurchaseOptionsModalComponent Fetching if Availabilities are being fetched 2023-03-31 11:29:42 +02:00
Lorenz Hilpert
60f1348ea5 Stock Request Verhindern 2023-03-31 11:10:46 +02:00
Lorenz Hilpert
533b6e1fcf Unit Test Fix 2023-03-31 10:21:38 +02:00
Lorenz Hilpert
8961730b74 #3672 Irrlauefer Details Anpassung 2023-03-30 18:26:51 +02:00
Lorenz Hilpert
5d580714c8 #3953 Minusbestände als Nullbestand anzeigt 2023-03-30 18:08:05 +02:00
Lorenz Hilpert
daf1ead75b #3962 Anrede ist nicht mehr Pflichtfeld 2023-03-30 14:24:12 +02:00
Lorenz Hilpert
aef2654a39 #3962 Anrede ist nicht mehr Pflichtfeld 2023-03-30 13:41:22 +02:00
Lorenz Hilpert
8243cd3528 #3947 PopUp wird nach unten nicht vollständig angezeigt 2023-03-30 11:41:37 +02:00
Lorenz Hilpert
447456d7a6 #3946 Anzeige lieferbare Menge nur in Popup 2023-03-30 11:22:07 +02:00
Lorenz Hilpert
241a34d7a8 Merge branch 'release/2.2' into develop 2023-03-30 11:04:04 +02:00
Lorenz Hilpert
4e67b2e8b9 #3936 - Kundenbestellung Leere Edit Seite
(cherry picked from commit 83406277ad)
2023-03-30 10:54:41 +02:00
Lorenz Hilpert
8bc2ea8373 #3385 Preiseingabe Geschenkkarte 2023-03-30 10:39:40 +02:00
Nino Righi
00a6a113c8 Merged PR 1514: #3956 Hotfix PDP Wording Change Branch Availability
#3956 Hotfix PDP Wording Change Branch Availability
2023-03-30 08:35:25 +00:00
Nino Righi
dc04619128 #3948 Hotfix HSC Kundenbestellungen Details Header Anzeige 2023-03-29 15:12:35 +02:00
Lorenz Hilpert
e066da3762 #3386 Canadd Wurde fuer Download Artikel falsch hinterlegt 2023-03-29 11:54:19 +02:00
Lorenz Hilpert
ad96278956 #3688 List Styling angepasst 2023-03-29 10:29:32 +02:00
Lorenz Hilpert
83406277ad #3936 - Kundenbestellung Leere Edit Seite 2023-03-28 14:40:49 +02:00
Lorenz Hilpert
9e89348381 #3958 Wahl Rücklage Kaufoption wirft Fehler 2023-03-28 14:10:25 +02:00
Lorenz Hilpert
0fb7419598 #3385 HFI Gutschein 2023-03-27 11:19:09 +02:00
Lorenz Hilpert
1790298cb4 #3931 Löschen von Positionen in der Kaufoption 2023-03-24 11:28:53 +01:00
Lorenz Hilpert
ffe8e39c85 #3934 - Anzeige Message Wenn Keine Verfügbarkeiten Existieren 2023-03-24 11:20:14 +01:00
Lorenz Hilpert
67e0f4bd46 #3945 Reinfolge von verfügbar als-Daten ist nicht fest 2023-03-23 19:24:22 +01:00
Lorenz Hilpert
e7b3a58da3 #3946 Fehler Lieferbare Exemplare 2023-03-23 19:20:24 +01:00
Lorenz Hilpert
598f9f3777 #3385 HFI Gutschein Anzeige Kaufoptionen 2023-03-23 18:25:51 +01:00
Lorenz Hilpert
0a7dca2e12 Packstück Kontoller aktivieren 2023-03-23 10:09:48 +01:00
Lorenz Hilpert
4b342778df #3365 Navigation angepasst 2023-03-22 15:32:20 +01:00
Lorenz Hilpert
10e8fd904a #3933 2023-03-22 14:29:57 +01:00
Lorenz Hilpert
1de342fd3b Update Add To Shopping Cart from PDP
(cherry picked from commit 4a5dd23561fdec458447c19c93faa1654ab80c7c)
2023-03-21 11:21:35 +01:00
Lorenz Hilpert
f4c1c3dd7f Merged PR 1513: Kaufoptionen
Related work items: #3365, #3366, #3385, #3386, #3391
2023-03-20 17:11:53 +00:00
Nino Righi
80bfc59356 Merged PR 1500: #3506 Remission Wanne Scanner nach Start der Remission
#3506 Remission Wanne Scanner nach Start der Remission
2023-03-17 09:25:43 +00:00
Lorenz Hilpert
3796f3ed5f Authentication Config Update 2023-03-16 15:30:01 +01:00
Lorenz Hilpert
f2e03d22d8 Merge branch 'develop' into release/2.2 2023-03-16 15:28:36 +01:00
Nino Righi
ef967b66e8 Merged PR 1512: #3887 Removed Scrollbar until Responsive Design
#3887 Removed Scrollbar until Responsive Design
2023-03-16 13:59:47 +00:00
Lorenz Hilpert
58ea70cc6c Merge branch 'develop' into release/2.2 2023-03-15 17:42:51 +01:00
Nino Righi
e4823950df Merged PR 1511: #3887 HSC Details Kundenbestellungen 360 Grad
#3887 HSC Details Kundenbestellungen 360 Grad
2023-03-15 16:41:57 +00:00
Lorenz Hilpert
8f9923ba5d #3673 ArrivalStatus Prüfung 2023-03-14 18:22:17 +01:00
Lorenz Hilpert
72bbd2c36e Checkbox Styling with Sub Options 2023-03-14 14:15:07 +01:00
Lorenz Hilpert
9bdb902a56 #3673 #3905 2023-03-14 13:55:38 +01:00
Nino Righi
bbc2e55ae3 Merged PR 1510: #3878 Updated Section Toggle if Role CallCenter is Active
#3878 Updated Section Toggle if Role CallCenter is Active
2023-03-14 09:16:44 +00:00
Nino Righi
6995bdb527 Merged PR 1508: Filter Doku Readme angelegt mit 2 konkreten Anwendungsbeispielen der Filter I...
Filter Doku Readme angelegt mit 2 konkreten Anwendungsbeispielen der Filter IST Implementierung

Co-authored-by: lorenzh <lorenzh@users.noreply.github.com>
2023-03-13 15:43:59 +00:00
Nino Righi
a7abc35316 Merged PR 1509: #3899 Fix Customer Orders loadItems request with compartmentCode
#3899 Fix Customer Orders loadItems request with compartmentCode
2023-03-10 14:28:29 +00:00
Lorenz Hilpert
772aed597b Wareneingang ausblenden 2023-03-10 08:05:37 +01:00
Lorenz Hilpert
9e18825c27 Merge branch 'develop' into release/2.2 2023-03-10 08:04:44 +01:00
Lorenz Hilpert
27b7ffcf99 #3898 Trefferliste wird in anderen Vorgang übernommen 2023-03-09 14:44:17 +01:00
Nino Righi
d804a744b6 Merged PR 1506: #3895 Purchaseing Options Modal Selected branch check if correct branchType i...
#3895 Purchaseing Options Modal Selected branch check if correct branchType is selected
2023-03-08 19:29:49 +00:00
Nino Righi
fc5cf27bd1 Merged PR 1507: #3882 Fix Hide Select Bullets if items have no actions
#3882 Fix Hide Select Bullets if items have no actions
2023-03-08 19:24:42 +00:00
Lorenz Hilpert
355bba8966 Merge branch 'ipad-bugfix' into develop 2023-03-08 20:22:02 +01:00
Lorenz Hilpert
e31c5f5a19 IPad Bugfix Scanner 2023-03-08 20:03:43 +01:00
Lorenz Hilpert
22837bbf8d IPAd Test Logging 2023-03-08 19:45:25 +01:00
Lorenz Hilpert
6324486dca ipad test 4 2023-03-08 19:21:33 +01:00
Lorenz Hilpert
653100f539 IPad test 4 2023-03-08 19:21:14 +01:00
Lorenz Hilpert
d671ba583d IPad Test 3 2023-03-08 19:20:00 +01:00
Lorenz Hilpert
fba324c6cb IPad fIx test 2 2023-03-08 18:58:02 +01:00
Lorenz Hilpert
ccbec5bcff Scanner test 2023-03-08 18:39:27 +01:00
Lorenz Hilpert
da1978bf21 Wareneingang in der Navigation Aktiviert 2023-03-08 16:01:41 +01:00
Lorenz Hilpert
1672b89775 Message Event Logs 2023-03-08 15:35:31 +01:00
Lorenz Hilpert
d9a9db6ec8 Added Debug Page for IPad 2023-03-08 15:01:17 +01:00
Lorenz Hilpert
0882bc2ca7 Merge branch 'develop' into release/2.2 2023-03-08 13:15:49 +01:00
Nino Righi
89b8d07bb4 Merged PR 1503: #3876 Fix Reorder Modal with Selected Branch now returns correct availabiliti...
#3876 Fix Reorder Modal with Selected Branch now returns correct availabilities based by selected branch
2023-03-08 12:15:07 +00:00
Nino Righi
c65c8edd2d Merged PR 1504: #3891 Fix Tooltip PDP and Articlesearch Availability by Branch
#3891 Fix Tooltip PDP and Articlesearch Availability by Branch
2023-03-08 12:09:08 +00:00
Nino Righi
5f7ce96919 Merged PR 1505: #3896 Assortment Price Update Item Added "x" to stock value
#3896 Assortment Price Update Item Added "x" to stock value
2023-03-08 12:06:13 +00:00
Lorenz Hilpert
d9a2601f75 Merge branch 'develop' into release/2.2 2023-03-08 11:37:49 +01:00
Lorenz Hilpert
37a04cadf8 Added scandit Lizenz 2023-03-08 11:03:59 +01:00
Lorenz Hilpert
ca10c01398 #3360 Bestandsanzeige einer anderen Filiale 2023-03-06 17:37:36 +01:00
Nino Righi
24f6ba117d Merged PR 1502: #3358 Disable Pick Up Option in purchasing Modal if no valid targetBranch is...
#3358 Disable Pick Up Option in purchasing Modal if no valid targetBranch is selected
2023-03-06 14:36:31 +00:00
Lorenz Hilpert
7508144e27 #3886 Informationen nur für Filiale hinterlegen sessionstorage 2023-03-06 13:36:23 +01:00
Lorenz Hilpert
9f0fec8046 Auth Service Delay Window reload 2023-03-06 13:00:27 +01:00
Nino Righi
67d70fac8e Merged PR 1501: #3771 #3876 Customer Orders Select Bullets and Reorder Modal Bugfix
#3771 #3876 Customer Orders Select Bullets and Reorder Modal Bugfix
2023-03-06 09:35:48 +00:00
Lorenz Hilpert
1775f6fd89 #3773 Filter Zielfiliale 2023-03-03 14:56:42 +01:00
Lorenz Hilpert
438c367101 Fix Erneut anmelden 2023-03-03 14:34:17 +01:00
Lorenz Hilpert
cb9d8ffa91 Silent Refresh with code flow 2023-03-03 11:51:13 +01:00
Lorenz Hilpert
2ecb0c5cf6 Update Auth Token Refresh and Configs 2023-03-02 17:43:38 +01:00
Lorenz Hilpert
b01ce5b3b6 Merge branch 'develop' into release/2.2 2023-03-02 15:52:30 +01:00
Lorenz Hilpert
8a55d52b2b AuthService SilentRefresh Catch Error 2023-03-02 11:24:30 +01:00
Lorenz Hilpert
c7e6f00ddb Merge branch 'release/2.2' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into release/2.2 2023-03-02 10:58:39 +01:00
Lorenz Hilpert
85831ffe5d Config Fix Statging - wws API 2023-03-02 10:58:26 +01:00
Lorenz Hilpert
762a5a2072 Config Fix wws Endpoint 2023-03-02 10:57:30 +01:00
Nino Righi
405e1ed023 Merged PR 1498: #3774 Meldenummer und Branch Select Filter, Unit Test Fixes
#3774 Meldenummer und Branch Select Filter, Unit Test Fixes
2023-03-01 18:11:36 +00:00
Lorenz Hilpert
41177436d4 Silent Refresh Error - Catch Error 2023-03-01 19:04:25 +01:00
Nino Righi
d1fca976a2 Merged PR 1499: #3782 Fix Resetting Filter Settings Properly After Click On Product Search on...
#3782 Fix Resetting Filter Settings Properly After Click On Product Search on Navigation
2023-03-01 17:54:01 +00:00
Lorenz Hilpert
59cf407c26 #3759 Bearbeiten deaktivieren 2023-03-01 17:56:31 +01:00
Lorenz Hilpert
e95828a514 Improvements for Authentication and Silent Refresh 2023-03-01 15:46:01 +01:00
Lorenz Hilpert
8b915c7c83 Merge branch 'develop' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into develop 2023-02-28 11:40:15 +01:00
Lorenz Hilpert
ebc6a01b7a #3880 Branch Id in Autocomplete Request - Kundenbestellung 2023-02-28 11:40:05 +01:00
Lorenz Hilpert
8cad3c4c14 Merge branch 'release/2.2' into develop 2023-02-27 18:48:14 +01:00
Lorenz Hilpert
a5537c21a1 Merge branch 'develop' into release/2.2 2023-02-27 18:47:47 +01:00
Lorenz Hilpert
edf96434b7 Merge branch 'develop' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into develop 2023-02-27 18:33:08 +01:00
Lorenz Hilpert
257df95c72 #3876 Artikel nachbestellen - In ausgewählte Filiale 2023-02-27 18:32:55 +01:00
Nino Righi
a268df503a Merged PR 1497: #3871 Gelbe Seiten Fachbodenbeschriftung
#3871 Gelbe Seiten Fachbodenbeschriftung
2023-02-27 17:27:23 +00:00
Nino Righi
a57ccbe4c2 Merged PR 1495: #3875 Display Estimated Shipping Date if orderType is not 1
#3875 Display Estimated Shipping Date if orderType is not 1
2023-02-27 17:21:16 +00:00
Lorenz Hilpert
7f37771dc7 Merge branch 'develop' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into develop 2023-02-27 17:56:00 +01:00
Lorenz Hilpert
3a753dde83 Fix unit Test For AuthService 2023-02-27 17:55:52 +01:00
Nino Righi
8e91b1363b Merged PR 1496: #3357 Fixed Branches OrderBy
#3357 Fixed Branches OrderBy
2023-02-27 16:53:05 +00:00
Lorenz Hilpert
e77929ab89 #3357 Ausgewählte Filiae wird berücksichtigt 2023-02-27 17:38:09 +01:00
Lorenz Hilpert
02031e97e3 Minor Bugfixes 2023-02-27 17:20:28 +01:00
Lorenz Hilpert
ede1c505d4 #3872 Wording Anpassung 2023-02-27 14:03:13 +01:00
Lorenz Hilpert
5cd5b685d2 #3673 Farbanpassung - Wareneingang 2023-02-27 10:46:42 +01:00
Lorenz Hilpert
d856f1d1cc Fix Unit Test 2023-02-27 10:17:11 +01:00
Lorenz Hilpert
10bb912bda Kundenbestellung Anpassung API 2023-02-27 10:08:16 +01:00
Nino Righi
3b2135a570 Merged PR 1494: #3357 Implementierung Umkreissuche + Unit Test Fix
#3357 Implementierung Umkreissuche + Unit Test Fix
2023-02-24 16:46:31 +00:00
Lorenz Hilpert
9c5d209887 #3870 Load Spinner PP 2023-02-24 17:27:54 +01:00
Lorenz Hilpert
763a770bcf Skip Unit Test 2023-02-24 14:58:29 +01:00
Lorenz Hilpert
f8f3456ba3 #3790 Filialsuche hinzugefügt 2023-02-24 14:51:05 +01:00
Lorenz Hilpert
4da7f02cf7 #3790 Kundenbestellungen 2023-02-24 13:42:58 +01:00
Nino Righi
4772e24c78 Merged PR 1493: #3865 Assortment OrderBy Implementation
#3865 Assortment OrderBy Implementation
2023-02-24 10:45:32 +00:00
Lorenz Hilpert
c3a9b82abb #3867 Preisänderungen - Scrollbalken fehlt 2023-02-23 10:03:54 +01:00
Lorenz Hilpert
4716940708 #3868 Button überdeckt letzte Kachel 2023-02-23 10:02:25 +01:00
Lorenz Hilpert
0eb09e2dbb Merge branch 'develop' into release/2.2 2023-02-22 16:38:42 +01:00
Lorenz Hilpert
111a33b12f #3805 Liste Weitere Verfügbarkeiten 2023-02-22 14:08:26 +01:00
Lorenz Hilpert
bcff2272ab #3853 Gelbe Seiten - Auf Erledigt gesetzte Posten bleiben auf die Liste 2023-02-22 13:30:58 +01:00
Lorenz Hilpert
f30ae91854 Merge branch 'release/2.2' into develop 2023-02-21 10:26:27 +01:00
Lorenz Hilpert
7eaad843a9 Merge branch 'develop' into release/2.2 2023-02-21 10:26:01 +01:00
Lorenz Hilpert
cb367d32c3 #3854 Filter in Sortiment und Wareineingang reagieren nicht einheitlich mit anderen Filtern 2023-02-20 18:15:27 +01:00
Lorenz Hilpert
b4cf88bd54 Bugfix Filter 2023-02-20 18:02:16 +01:00
Lorenz Hilpert
b8097fcd3a Filter Verhalten angepasst 2023-02-20 18:00:15 +01:00
Lorenz Hilpert
6db2238096 Item Update and Error Message for Packstück Kontrolle 2023-02-20 16:51:52 +01:00
Lorenz Hilpert
cd426d5534 #3859 Navigation Tätigkeitskalender 2023-02-20 14:41:26 +01:00
Lorenz Hilpert
c214d47aad Null Check 2023-02-20 13:58:10 +01:00
Lorenz Hilpert
c09c44ec5f Merge branch 'develop' into release/2.2 2023-02-20 13:09:44 +01:00
Lorenz Hilpert
f9f6d0d836 Merged PR 1492: Packstück Kontrolle
Related work items: #3688, #3690, #3816
2023-02-20 12:09:01 +00:00
Nino Righi
74a6c75c21 Merged PR 1490: #3848 IPAD2 Removed Grid and added Flex on Scroll Arrow inside Filter Input O...
#3848 IPAD2 Removed Grid and added Flex on Scroll Arrow inside Filter Input Options
2023-02-17 13:49:55 +00:00
Nino Righi
526ebc77bc Merged PR 1491: #3849 Improvement Sortiment Filter Display Hint
#3849 Improvement Sortiment Filter Display Hint
2023-02-17 13:49:47 +00:00
Lorenz Hilpert
addac44c0f Merge branch 'develop' into release/2.2 2023-02-17 14:05:46 +01:00
Lorenz Hilpert
303d575fde config.json - scope hinzugefuegt - isa-wws-webapi 2023-02-17 14:02:24 +01:00
Lorenz Hilpert
bf8438b229 Version Bump 2.2 2023-02-17 13:37:16 +01:00
Nino Righi
ea8bbafbfa Merged PR 1489: Small fixes
Small fixes
2023-02-17 09:28:50 +00:00
Nino Righi
14815e79d5 Merged PR 1488: #3354 #3814 Ipad styling bugfixes, check environment and native container update
#3354 #3814 Ipad styling bugfixes, check environment and native container update
2023-02-16 16:45:58 +00:00
Nino Righi
4a3de35224 Merged PR 1486: #3524 History Added Word Break normal on caption
#3524 History Added Word Break normal on caption
2023-02-16 15:55:29 +00:00
Nino Righi
974f549c31 Merged PR 1487: #3836 #3837 Gelbe Seiten IPAD Styling fixes and Filter Scrolling
#3836 #3837 Gelbe Seiten IPAD Styling fixes and Filter Scrolling
2023-02-16 15:55:20 +00:00
Lorenz Hilpert
76596939c5 #3794 Submit mit Enter und Lupen-Symbol führt zu unterschiedliche Ergebnisse 2023-02-16 11:31:24 +01:00
Nino Righi
138974bca7 Merged PR 1485: #3359 Removed resetSelectedBranch logic on navigation click
#3359 Removed resetSelectedBranch logic on navigation click
2023-02-14 14:58:47 +00:00
Nino Righi
02aee02694 Merged PR 1482: #3813 Fix IPAD2 Added web-animations-js polyfill
#3813 Fix IPAD2 Added web-animations-js polyfill
2023-02-14 11:01:29 +00:00
Nino Righi
e2ada75611 Merged PR 1483: #3806 IPAD2 Styling Branch Dropdown
#3806 IPAD2 Styling Branch Dropdown
2023-02-14 11:01:24 +00:00
Nino Righi
78b757c55b Merged PR 1484: #3828 Bugfixes Disable Print
#3828 Bugfixes Disable Print
2023-02-14 11:01:15 +00:00
Lorenz Hilpert
dfd273e7bf Build Fehler Fix 2023-02-13 17:52:32 +01:00
Nino Righi
1a72c23412 Merged PR 1481: Gelbe Seiten - Sortiment - Preisänderung Implementation + Init Unit Tests
Gelbe Seiten - Sortiment - Preisänderung Implementation + Init Unit Tests
2023-02-13 16:42:08 +00:00
Michael Auer
55a92ad029 Merge tag '3754-lieferschein-erneut-drucken' into develop 2023-02-13 17:28:42 +01:00
Michael Auer
aea6a0d131 Merge branch 'hotfix/3754-lieferschein-erneut-drucken' 2023-02-13 17:11:39 +01:00
Lorenz Hilpert
e76e031675 Merged PR 1480: #3806 Suchfeld wird nun als geschlossen erkannt und stylings greifen wieder
#3806 Suchfeld wird nun als geschlossen erkannt und stylings greifen wieder
2023-02-08 09:54:55 +00:00
Nino Righi
ed095a95f0 Merged PR 1478: Buffer changes
Buffer changes

Co-authored-by: lorenzh <lorenzh@users.noreply.github.com>
2023-02-06 14:55:17 +00:00
Lorenz Hilpert
3cdb3d6294 Added external library to the project 2023-02-03 16:20:45 +01:00
Nino Righi
06fe8b3742 Merged PR 1477: Branch Selector Changes
Branch Selector Changes
2023-02-03 14:31:13 +00:00
Lorenz Hilpert
6ba7c54089 filialauswahl tablet styling anpassung 2023-02-02 13:01:28 +01:00
Lorenz Hilpert
e2bc284091 #3354 Filialauswahl Tablet design anpassung 2023-02-01 17:27:33 +01:00
Nino Righi
66bf91e177 Merged PR 1476: Branch Selector Bugfixes, BranchType Filtering, Unit Test update
Branch Selector Bugfixes, BranchType Filtering, Unit Test update
2023-02-01 16:04:19 +00:00
Lorenz Hilpert
6039545f9d Fix Core Unit Test Run 2023-01-31 14:39:05 +01:00
Lorenz Hilpert
cc6f70e834 Bundle utils libs in one lib as submodules 2023-01-31 14:25:54 +01:00
Lorenz Hilpert
55d7687561 Create main core package - merged core packges into core as submodules 2023-01-31 13:59:01 +01:00
Lorenz Hilpert
90866e2bea Update test script from parallel to serial run 2023-01-31 10:45:57 +01:00
Lorenz Hilpert
2059e4eba4 Ui libs in ein ui projekt gemerged 2023-01-30 16:48:39 +01:00
Lorenz Hilpert
243a288061 Project Struktur Angepasst - page projekte in einm projekt gemerged 2023-01-30 16:31:29 +01:00
Lorenz Hilpert
623155be92 Merged PR 1475: Packstück Kontrolle 2023-01-30 14:25:47 +00:00
Nino Righi
a404469085 Merged PR 1474: Branch Selector PDP too many instock requests fix
Branch Selector PDP too many instock requests fix
2023-01-30 13:42:33 +00:00
Nino Righi
b0e12b717b Merged PR 1473: Branch Selector Update - Article Search, Search Results, PDP
Branch Selector Update - Article Search, Search Results, PDP
2023-01-30 10:24:25 +00:00
Nino Righi
fdc1dadd36 Merged PR 1472: Branch Selector Update
Branch Selector Update
2023-01-26 09:26:34 +00:00
Nino Righi
872db4085c Merged PR 1469: Feature Branch Selector
Feature Branch Selector
2023-01-24 09:18:10 +00:00
Lorenz Hilpert
8af8cbacd3 css tag hinzugefügt für e2e 2023-01-20 10:47:14 +01:00
Nino Righi
01beef4312 Merged PR 1470: #3742 Fix Task Calendar openCamera Popup on Tablet
#3742 Fix Task Calendar openCamera Popup on Tablet
2023-01-19 09:55:58 +00:00
Nino Righi
a91ffd9ad7 Merged PR 1471: #3729 Goods In List Styling Fix Ipad Mini 6
#3729 Goods In List Styling Fix Ipad Mini 6
2023-01-19 09:55:18 +00:00
Lorenz Hilpert
dc42107668 #3754 Lieferschein erneut drucken - CTA Fix 2023-01-17 16:11:53 +01:00
Nino Righi
670012676c Merged PR 1468: #3742 Fix Task-Calendar PWA Open Camera Popup
#3742 Fix Task-Calendar PWA Open Camera Popup
2023-01-16 12:49:28 +00:00
Nino Righi
8910ce47cd Merged PR 1464: #3729 Bugfixes
#3729 Bugfixes
2023-01-16 09:29:20 +00:00
Nino Righi
bc76ecba46 Merged PR 1467: #3740 Fix Cart Checkout Navigation
#3740 Fix Cart Checkout Navigation
2023-01-13 15:30:18 +00:00
Nino Righi
e50707e1dd Merged PR 1465: #3740 Fix Customer Process generation
#3740 Fix Customer Process generation
2023-01-12 15:59:31 +00:00
Nino Righi
a03c6fe0cb Merged PR 1466: #3741 Fix History Order Details correctly Display the buyerNumber as customer...
#3741 Fix History Order Details correctly Display the buyerNumber as customerNumber
2023-01-12 15:57:56 +00:00
Michael Auer
d5c17b08cc Merge tag 'post-2.1-hotfix' into develop 2023-01-12 16:46:26 +01:00
Lorenz Hilpert
656bab3d48 Build Error Fix After Merge 2023-01-12 16:42:12 +01:00
Michael Auer
cc6e01bd05 Merge tag 'post-2.1-hotfix' into develop (conflicts resolved) 2023-01-12 16:14:35 +01:00
Michael Auer
a9479db5be Merge branch 'hotfix/post-2.1-hotfix' 2023-01-12 15:54:53 +01:00
Lorenz Hilpert
d4546a2865 Update karma.conf.js 2023-01-11 15:55:40 +01:00
Lorenz Hilpert
7e0dd05f3d Shared Lib - Umstrukturierung 2023-01-11 15:49:28 +01:00
Michael Auer
3bbefd3dfc Merge branch 'hotfix/post-2.1-hotfix' 2023-01-10 22:33:02 +01:00
Nino Righi
fdca2ecfee Merged PR 1463: Node 18.x and NPM 8.x Update, Removed ngx-platform-detection
Node 18.x and NPM 8.x Update, Removed ngx-platform-detection
2023-01-10 12:33:53 +00:00
Lorenz Hilpert
ae08e46b30 Merged PR 1462: Implementierung Packstück Kontolle 2023-01-09 15:38:08 +00:00
Nino Righi
bf18b83a75 Fix Shell Navigation if ProcessId is undefined 2023-01-09 16:24:53 +01:00
Nino Righi
393172ec9f Merged PR 1461: #3632 Fix Footer Active Styling
#3632 Fix Footer Active Styling
2023-01-09 14:22:31 +00:00
Nino Righi
781e9df148 Merged PR 1460: #3729 Updated Scan Icon and Removed Option to Scan on Desktop
#3729 Updated Scan Icon and Removed Option to Scan on Desktop
2023-01-09 13:58:04 +00:00
Lorenz Hilpert
2691a217db Lizenz Scandit Update 2023-01-03 14:40:45 +01:00
Lorenz Hilpert
b421f74d1a Merge branch 'feature/scanner-ipad' into develop 2023-01-02 09:43:57 +01:00
Lorenz Hilpert
e3bd33ffc3 Scanner Styling and Login Dialog 2022-12-27 18:52:08 +01:00
Lorenz Hilpert
38c2fd07ae Ipad fix test 2022-12-20 17:05:55 +01:00
Lorenz Hilpert
77ebafd018 Added WWS API - Generated with ng-swagger-gen 2022-12-20 13:13:56 +01:00
Nino Righi
dfab7e3540 Merged PR 1457: #3524 #3599 #3598 Responsive Design History
#3524 #3599 #3598 Responsive Design History
2022-12-19 17:07:43 +00:00
Lorenz Hilpert
262e0c5e11 #3719 Benachrichtigungskanal wird nicht angezeigt 2022-12-19 16:10:53 +01:00
Lorenz Hilpert
e4410fe2c7 Added Scandit Scanner to Application 2022-12-19 14:52:17 +01:00
Lorenz Hilpert
8718dd8231 Merged PR 1459: Fix NotificationChannel Display in AHF
Fix NotificationChannel Display in AHF

Related work items: #3719
2022-12-16 14:26:32 +00:00
Lorenz Hilpert
0274b2af3b Merged PR 1458: #3718 Eingabe bei Enter bewirkt löschen und Eingabe Enter
#3718 Eingabe bei Enter bewirkt löschen und Eingabe Enter
2022-12-16 13:20:20 +00:00
Lorenz Hilpert
1dbd3fd274 Merged PR 1456: Breite für Desktop angepasst
Related work items: #3700
2022-12-16 11:08:08 +00:00
Michael Auer
abdbab807d Merge branch 'feature/docker-multi-label' into develop 2022-12-15 16:46:00 +01:00
Michael Auer
718077025d ~ helmvalues: removed debug-/prod- prefix from docker image tag 2022-12-15 16:45:59 +01:00
Michael Auer
08161c29d3 ~ back to one tag, added extra label BuildType=(Debug/Production) 2022-12-15 16:45:59 +01:00
Michael Auer
942f84dfcf ! removed single quoutes from docker tags 2022-12-15 16:45:59 +01:00
Michael Auer
41defdc291 ~ added second label (Debug/Production) to docker image 2022-12-15 16:45:59 +01:00
Andreas Schickinger
2e286b2de3 Merged PR 1455: #3691 WA Kunden mit unterschiedlichen Kundennummern und gleicher Abholfachnummer
#3691 WA Kunden mit unterschiedlichen Kundennummern und gleicher Abholfachnummer

Related work items: #3691
2022-12-07 14:31:54 +00:00
Andreas Schickinger
168847b24a Merged PR 1454: #3661 AHF Feedbackmeldung beim Nachbestellen entfernt
#3661 AHF Feedbackmeldung beim Nachbestellen entfernt

Related work items: #3661
2022-11-29 14:22:04 +00:00
Andreas Schickinger
69c23a55f7 Merged PR 1453: #3682 AHF // Reservierungsliste - RadionButton ein- und ausblenden bei Paid/Unpaid
#3682 AHF // Reservierungsliste - Radion-Button ein- und ausblenden bei Bezahlt vs Nicht Bezahlt

Related work items: #3682
2022-11-29 14:17:52 +00:00
Lorenz Hilpert
045b8e162a Merged PR 1452: Update to Angular 15 2022-11-28 15:13:44 +00:00
Andreas Schickinger
f344c2b0e8 Merged PR 1451: #3656 TK Loader Styling Anpassung
#3656 TK Loader Styling Anpassung

Related work items: #3656
2022-11-25 12:49:24 +00:00
Lorenz Hilpert
11819e59c6 #3654 Zubuchen zu Pay und Collect Artikeln verhindern 2022-11-25 13:47:30 +01:00
Lorenz Hilpert
caf7331d28 Fix Unit Test 2022-11-24 11:38:42 +01:00
Lorenz Hilpert
68e5926568 Isa Error Logging 2022-11-24 10:45:53 +01:00
Andreas Schickinger
9d46f49634 Merged PR 1450: #3656 TK Kalenderansicht Loading Feedback
#3656 TK Kalenderansicht Loading Feedback

Related work items: #3656
2022-11-22 17:18:44 +00:00
Lorenz Hilpert
daae9323e8 Merged PR 1447: #3643 API Calls in der WA und WE reduziert
#3643 API Calls in der WA und WE reduziert
2022-11-21 16:46:19 +00:00
Andreas Schickinger
80c425aa6f Merged PR 1449: #3645 TK Bugfix Initiales Loading
#3645 TK Bugfix Initiales Loading

Related work items: #3645
2022-11-21 15:37:00 +00:00
Andreas Schickinger
1cbe309778 Merged PR 1448: #3646 Hotfix TK Fehlender Abstand bei keinen Suchergebnissen
#3646 Hotfix TK Fehlender Abstand bei keinen Suchergebnissen

Related work items: #3646
2022-11-21 15:36:33 +00:00
Michael Auer
e3d7813edb Merge tag '2.1' into develop 2022-11-21 11:35:18 +01:00
Michael Auer
189dc64a0f Merge branch 'release/2.1' 2022-11-21 11:35:17 +01:00
Lorenz Hilpert
2f0ede7170 Merge branch 'develop' into release/2.1 2022-11-11 14:49:43 +01:00
Lorenz Hilpert
c7e444d446 #3617 CompartmentLabel für Kunden zwischenhspeichern 2022-11-11 10:56:18 +01:00
Lorenz Hilpert
f5ac916663 #3617 QR-Code Reservierungen 2022-11-10 15:02:27 +01:00
Lorenz Hilpert
b3b9f0223e #3629 - Scpeichern doppelclick abfangen 2022-11-10 14:08:50 +01:00
Lorenz Hilpert
70455df6d3 Merge branch 'develop' into release/2.1 2022-11-08 17:19:29 +01:00
Andreas Schickinger
b89889a3e9 Merged PR 1440: #3602 TK Kalenderansicht lädt nur noch die angezeigten Tage
#3602 TK Kalenderansicht lädt nur noch die angezeigten Tage

Related work items: #3602
2022-11-08 15:50:29 +00:00
Lorenz Hilpert
7ec00925ed Merged PR 1441: #3626 Fehlerbehebung bei der Dummy Anlage Änderung
#3626 Fehlerbehebung bei der Dummy Anlage Änderung
2022-11-08 15:40:07 +00:00
Andreas Schickinger
d3e3d127b3 Merged PR 1439: #3602 TK Performance
- Kein Reload mehr bei Wechsel zwischen Trefferliste/Kalenderansicht
- Suche startet ca. 150ms früher bei Page Load
- In der Wochenansicht wird nur noch die aktuelle Woche und 7 Tage in die Vergangenheit geladen (zuvor: aktuelle Woche + 7 Tage Vergangenheit/ 7 Tage Zukunft)
- In der Monatsansicht werden nur noch die Tage des Monats geladen (zuvor: aktueller Monat + 7 Tage Vergangenheit/ 7 Tage Zukunft
- Bugfix: doppelte Suche wurde ausgelöst, wenn man sucht -> zurück zur Übersicht klickt -> nochmal das gleiche sucht

Related work items: #3602
2022-11-08 09:13:21 +00:00
Nino Righi
11c4d8fb72 Merged PR 1438: #3608 Fix typo
#3608 Fix typo
2022-11-07 16:23:23 +00:00
Andreas Schickinger
9b02a19b9c Merged PR 1437: #3609 Remission Schriftfarbe bei Auswahl weiß
#3609 Remission Schriftfarbe bei Auswahl weiß

Related work items: #3609
2022-11-07 15:44:11 +00:00
Michael Auer
57262919b8 Merge tag '2.1.10' into develop 2022-11-07 15:07:34 +01:00
Michael Auer
f787a15347 Merge branch 'release/2.1' 2022-11-07 15:06:31 +01:00
Michael Auer
bc74eac86d Merge tag '2.1.2' into develop 2022-11-07 14:58:16 +01:00
Michael Auer
0a1df250cb Merge commit '9e58e8aad9ae6a6928235dca55b30a0925c668f6' 2022-11-07 14:55:46 +01:00
Lorenz Hilpert
8a7b9de29d Merged PR 1436: #3615 Übernahme der Suchfeld eingabe in die Kundenanlage
#3615 Übernahme der Suchfeld eingabe in die Kundenanlage
2022-11-07 13:31:14 +00:00
Nino Righi
8efb87a1f7 Merged PR 1434: #3610 Fix Added Async Validator Function to p4m number form block
#3610 Fix Added Async Validator Function to p4m number form block
2022-11-03 18:21:07 +00:00
Andreas Schickinger
27ee667bfb Merged PR 1435: #3604 Kubi Checkmarks bei Kundentypanlage angepasst
#3604 Kubi Checkmarks bei Kundentypanlage angepasst

Related work items: #3604
2022-11-03 14:34:30 +00:00
Lorenz Hilpert
c64ff772e7 Merged PR 1433: Kundenanlage: Scanbutton für das scannen der Kundenkarte
Kundenanlage: Scanbutton für das scannen der Kundenkarte
2022-11-03 14:13:58 +00:00
Lorenz Hilpert
313efebb8b #3611 Dialog Anpassung handleAction 2022-11-02 16:47:58 +01:00
Lorenz Hilpert
9eee4fff6c Merged PR 1432: #3613 Wannennummer Scannen - Dialog erweitert
#3613 Wannennummer Scannen - Dialog erweitert
2022-11-02 15:15:48 +00:00
Lorenz Hilpert
b5a7c96181 Merge branch 'develop' into release/2.1 2022-11-02 15:00:54 +01:00
Lorenz Hilpert
5bea71e19e Merged PR 1431: #3611 Dummy Command angelegt
#3611 Dummy Command angelegt
2022-11-02 13:55:01 +00:00
Lorenz Hilpert
751e533dce Merge branch 'release/2.1' into develop 2022-10-28 11:20:42 +02:00
Lorenz Hilpert
9e58e8aad9 Merge branch 'develop' into release/2.1 2022-10-26 18:52:17 +02:00
Lorenz Hilpert
d62a7d704a #3587 Fix rueckgaenging gemacht, da fix im BE 2022-10-26 18:21:16 +02:00
Andreas Schickinger
f8d7d12d61 Merged PR 1430: #3586 WK Hindernis Popup Text angepasst
#3586 WK Hindernis Popup Text angepasst

Related work items: #3586
2022-10-26 16:07:07 +00:00
Lorenz Hilpert
2ad71cad78 #3587 Filter wurde nicht richtig übernommen 2022-10-26 18:04:38 +02:00
Andreas Schickinger
689d8ead24 Merged PR 1427: #3592 TK Tasks Wochenansicht reload wenn sich das DisplayedDate ändert
#3592 TK Tasks Wochenansicht reload wenn sich das DisplayedDate ändert

Related work items: #3592
2022-10-26 14:33:52 +00:00
Andreas Schickinger
b6a7df76f6 Merged PR 1428: #3593 TK Footer Menü Klick setzt den Filter zurück
#3593 TK Footer Menü Klick setzt den Filter zurück

Related work items: #3593
2022-10-26 14:30:27 +00:00
Andreas Schickinger
41e8145858 Merged PR 1429: #3594 TK Zurück zur Übersicht Button
#3594 TK Zurück zur Übersicht Button

Related work items: #3594
2022-10-26 14:29:27 +00:00
Lorenz Hilpert
3a5b80657c Merge branch 'develop' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into develop 2022-10-26 15:06:23 +02:00
Lorenz Hilpert
41c6897224 uiDateInput - datum mit momentjs parsen 2022-10-26 15:06:16 +02:00
Lorenz Hilpert
8d644cdd65 Merged PR 1426: 3581 Handlungsanweisung
Related work items: #3581
2022-10-25 12:34:39 +00:00
Lorenz Hilpert
7a68229432 Merged PR 1424: #3580 Text in der Kundensuche angepasst
#3580 Text in der Kundensuche angepasst
2022-10-25 11:57:35 +00:00
Lorenz Hilpert
4dab0ef6f6 Merged PR 1425: #3581 Textanpassung für Kundenanlage
#3581 Textanpassung für Kundenanlage
2022-10-25 11:50:22 +00:00
Andreas Schickinger
75cad811bc Merged PR 1423: #3419 TK Suche / Wochenansicht Heute
#3419 TK Suche / Wochenansicht Heute

Related work items: #3419
2022-10-25 08:43:59 +00:00
Lorenz Hilpert
0709f1dd6a Merged PR 1422: #3576 Dialog angepasst und Weiterleitung auf Kundendetails
#3576 Dialog angepasst und Weiterleitung auf Kundendetails

Related work items: #3576
2022-10-24 16:06:00 +00:00
Lorenz Hilpert
478950c446 Merged PR 1421: #3577 Fallback walls Preis undefined ist
#3577 Fallback walls Preis undefined ist
2022-10-24 15:10:13 +00:00
Andreas Schickinger
b5e5601671 Merged PR 1420: #3420 TK Routing
#3420 TK Routing

Related work items: #3420
2022-10-24 14:50:15 +00:00
Lorenz Hilpert
0ee86faa00 Merged PR 1418: Suchbutton werden nicht immer angezeigt
Related work items: #3546
2022-10-24 14:10:30 +00:00
Andreas Schickinger
fa7b204f89 Merged PR 1419: #3547 TK iPad Drucken Button
#3547 TK iPad Drucken Button

Related work items: #3547
2022-10-24 14:06:55 +00:00
Lorenz Hilpert
22f9ba80fe removed unused icons 2022-10-21 16:15:11 +02:00
Michael Auer
065878a6e9 ~ Version Bump: 2.1 2022-10-21 15:35:52 +02:00
Lorenz Hilpert
5df433d603 #3559 PDP falsche Farbe von Reiter-Hintergrund 2022-10-21 14:41:14 +02:00
Lorenz Hilpert
21375855dd #3556 HFI Gutschein Kaufoption im Nachhinein ändern 2022-10-21 14:36:48 +02:00
Lorenz Hilpert
b847ca6b3e #3554 AGB ist Akzeptiert wenn Dialog mit Ja beantwortet wird 2022-10-21 14:26:53 +02:00
Andreas Schickinger
50caf9811d Merged PR 1416: #3520 HFI Geschenkkarte Mengenänderung übergibt Preis
#3520 HFI Geschenkkarte Mengenänderung übergibt Preis

Related work items: #3520
2022-10-21 10:58:21 +00:00
Andreas Schickinger
f0df9e1157 Merged PR 1417: #3571 TK Kalender Klicks navigieren wieder zur Liste
#3571 TK Kalender Klicks navigieren wieder zur Liste

Related work items: #3571
2022-10-21 10:57:53 +00:00
Lorenz Hilpert
3e1347f17e #3573 Breadcrumb Fix 2022-10-20 16:06:10 +02:00
Lorenz Hilpert
86082bbfda #3572 Chckbox Plazierung 2022-10-20 15:21:10 +02:00
Lorenz Hilpert
6e6551ceae #3567 B2B Meldenummer auf der Artikeldetailseite 2022-10-20 14:13:11 +02:00
Lorenz Hilpert
08ef5f0853 #3568 Typo Rechnungsadresse 2022-10-20 13:53:48 +02:00
Lorenz Hilpert
92131453e8 #3422 Focus Searchbar nach Seitenwechsel TK 2022-10-20 13:33:44 +02:00
Lorenz Hilpert
888a95d2a0 #3233 CRM API Anpassung für Kundenkartencheck 2022-10-20 13:12:52 +02:00
Lorenz Hilpert
ab745cba18 #2748 Icons Kundentrefferliste und Details 2022-10-20 11:44:12 +02:00
Lorenz Hilpert
dfe6b3977f #3554 Dialog angepasst 2022-10-19 16:51:06 +02:00
Lorenz Hilpert
e7e8b71a70 Merge branch 'develop' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into develop 2022-10-19 13:45:12 +02:00
Lorenz Hilpert
c158e16bd3 #3553 Plattierung AGB akzeptieren 2022-10-19 13:45:04 +02:00
Andreas Schickinger
464fac660b Merged PR 1415: #3543 TK iPad Scrolling
#3543 TK iPad Scrolling

Related work items: #3543
2022-10-19 11:21:18 +00:00
Lorenz Hilpert
79b1920b15 #3542 WA Keine Suchanfrage wenn Daten bereits vorhanden sind 2022-10-18 11:33:52 +02:00
Andreas Schickinger
f071e7b2d5 Merged PR 1411: #3527 Kundenkarten Validator
#3527 Kundenkarten Validator

Related work items: #3527
2022-10-17 15:30:52 +00:00
Andreas Schickinger
3afb8d6ed1 Merged PR 1412: #3422 TK Suchfeld Autofocus directive und Laufende Aufgaben auch ausblenden,...
#3422 TK Suchfeld Autofocus directive und Laufende Aufgaben auch ausblenden, wenn keine vorhanden

Related work items: #3422
2022-10-17 15:03:52 +00:00
Andreas Schickinger
87a2e94dd6 Merged PR 1406: #3496 HFI Geschenkkarte max Preis fix
#3496 HFI Geschenkkarte max Preis fix

Related work items: #3496
2022-10-17 14:01:42 +00:00
Andreas Schickinger
d711d4a816 Merged PR 1409: #3419 TK Überfällige Aufgaben nur anzeigen, wenn vorhanden
#3419 TK Überfällige Aufgaben nur anzeigen, wenn vorhanden

Related work items: #3419
2022-10-17 13:55:47 +00:00
Lorenz Hilpert
a4b4aeed64 #3471 Email entfernen bei klick auf nein 2022-10-17 15:51:08 +02:00
Lorenz Hilpert
3707572bd8 Merge branch 'develop' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into develop 2022-10-17 15:48:37 +02:00
Lorenz Hilpert
aef5c06f0a #3531 CSS Kundenanlage Speichern Button Position 2022-10-17 15:48:26 +02:00
Lorenz Hilpert
a021ac0da3 Merged PR 1410: #3503 IPad Sortierung im TK falsh
#3503 IPad Sortierung im TK falsh
2022-10-17 13:40:33 +00:00
Lorenz Hilpert
1e4e6da44e Merged PR 1408: #3545 Fix Icon Positions IPad mini 2
#3545 Fix Icon Positions IPad mini 2
2022-10-17 12:46:45 +00:00
Andreas Schickinger
6b0d9774c5 Merged PR 1407: #3423 TK Kalendar klicks navigieren nicht mehr zur Listenansicht
#3423 TK Kalendar klicks navigieren nicht mehr zur Listenansicht

Related work items: #3423
2022-10-17 11:55:20 +00:00
Lorenz Hilpert
e1720e6023 Merged PR 1405: icon scss 2022-10-14 14:24:12 +00:00
Lorenz Hilpert
3078724ced #3540 Text Änderung Interessen 2022-10-14 15:20:51 +02:00
Lorenz Hilpert
f3eb0a67f6 #3539 Typo Interessen 2022-10-14 15:19:53 +02:00
Lorenz Hilpert
65d7a6f5a4 Merged PR 1404: #3471 Zusätzliche addressen werden nun gespeichert
#3471 Zusätzliche addressen werden nun gespeichert

Related work items: #3471
2022-10-14 11:36:44 +00:00
Lorenz Hilpert
b2b5456400 Merged PR 1403: #3518 Checkbox ist nicht abwählbar bei einer checkbox
#3518 Checkbox ist nicht abwählbar bei einer checkbox
2022-10-14 10:08:29 +00:00
Lorenz Hilpert
a598be069d Merge branch 'develop' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into develop 2022-10-14 10:55:59 +02:00
Andreas Schickinger
bf61f2c982 Merged PR 1402: #3507 Listenbestellung getPickUpAvailability hack
#3507 Listenbestellung getPickUpAvailability hack

Related work items: #3507
2022-10-14 08:49:41 +00:00
Lorenz Hilpert
63225491f1 FIX CUSTOMER CREATE NAVIGATION 2022-10-13 18:37:18 +02:00
Andreas Schickinger
0dbc773775 Merged PR 1400: #3496 HFI Geschenkkarte max Preis
#3496 HFI Geschenkkarte max Preis

Related work items: #3496
2022-10-13 13:10:34 +00:00
Lorenz Hilpert
47b7d42dd3 Merged PR 1399: #3227 Anpassung der Handlungsanweisung
#3227 Anpassung der Handlungsanweisung
2022-10-13 13:06:36 +00:00
Lorenz Hilpert
d713c787e6 Merged PR 1398: #3515 Added Newsletter Text to webshop and fix navigation
#3515 Added Newsletter Text to webshop and fix navigation
2022-10-13 13:05:56 +00:00
Lorenz Hilpert
68a2eab425 Merged PR 1396: #3502 Guard bei navigation auf P4M Anlage angepasst
#3502 Guard bei navigation auf P4M Anlage angepasst
2022-10-12 15:02:17 +00:00
Andreas Schickinger
886f063d1b Fix für Anzeigefehler im SectionToggle 2022-10-12 16:40:29 +02:00
Andreas Schickinger
ed6ee36509 Merged PR 1395: #3481 Remission Filter zwischenspeichern bei Wechsel zwischen Pflicht- und Ab...
#3481 Remission Filter zwischenspeichern bei Wechsel zwischen Pflicht- und Abteilungsremission

Related work items: #3481
2022-10-12 13:57:28 +00:00
Andreas Schickinger
ab345dae0d Merged PR 1393: #3514 TK Fehlermeldung fix
#3514 TK Fehlermeldung fix

Related work items: #3514
2022-10-12 13:39:29 +00:00
Lorenz Hilpert
fbb1e6c4a2 Merged PR 1394: #3511 Addressvalidierung für Onlinekonto aktiviert
#3511 Addressvalidierung für Onlinekonto aktiviert
2022-10-12 10:38:35 +00:00
Lorenz Hilpert
4ede9226b4 Merged PR 1392: #3484 Keep Userstates on Tab Changes
#3484 Keep Userstates on Tab Changes
2022-10-11 15:05:04 +00:00
Andreas Schickinger
fbfecbd8ae Merged PR 1391: TK Suche Timespan Fallback angepasst
TK Suche Timespan von 6 Monate Vergangenheit/Zukunft auf 6 Wochen Vergangenheit, 2 Wochen Zukunft geändert. Wird verwendet, wenn kein Timespan Filter gesetzt ist

Related work items: #3422
2022-10-11 14:32:30 +00:00
Lorenz Hilpert
3c4612d15c Merged PR 1389: #3307 Filter Wird Nicht Gerendert
#3307 Filter Wird Nicht Gerendert
2022-10-11 13:33:10 +00:00
Andreas Schickinger
7fa2e7862d Merged PR 1388: #3508 Bestellbestätigung "zur Warenausgabe": Prüfung auf enabled bei CustomerFeature B2B entfernt
#3508 Prüfung auf enabled bei CustomerFeature B2B entfernt

Related work items: #3508
2022-10-11 12:16:07 +00:00
Andreas Schickinger
114267362c Merged PR 1384: #3503 TK Sortierung umgedreht, #3504 Scroll Fix
#3503 TK Sortierung umgedreht, #3504 Scroll Fix

Related work items: #3503, #3504
2022-10-11 11:06:01 +00:00
Lorenz Hilpert
4050e9605d FIX Routing Kundenalage 2022-10-11 10:41:25 +02:00
Andreas Schickinger
fdd5373aaf Merged PR 1385: #3493 TK Modal Header Abstand erhöht
#3493 TK Modal Header Abstand erhöht

Related work items: #3493
2022-10-10 15:59:04 +00:00
Andreas Schickinger
2dfe7ec05b Merged PR 1386: #3492 TK Drucken in der Trefferliste fix
#3492 TK Drucken in der Trefferliste fix

Related work items: #3492
2022-10-10 15:58:42 +00:00
Lorenz Hilpert
82513b5dde Merged PR 1387: Kubi Kundenanlage und Kundenkarte
Related work items: #3230, #3233
2022-10-10 15:57:50 +00:00
Lorenz Hilpert
14d1bb6ac8 Merged PR 1383: HFI Geschnakkarte
Related work items: #3496
2022-10-07 14:20:05 +00:00
Lorenz Hilpert
d589c94681 Fix Kundendatenerfassen - added modifier add-loyality-card 2022-10-06 12:42:45 +02:00
Lorenz Hilpert
eca19bb507 Updateing Customer for P4M 2022-10-06 10:47:10 +02:00
Lorenz Hilpert
282ff30b3e #3494 Upgrade Ava API auf v6 2022-10-05 13:58:02 +02:00
Lorenz Hilpert
5d0b810674 Upgrade catsearch API auf V6 2022-10-05 13:54:12 +02:00
Lorenz Hilpert
e32482c634 Type Kundendaten erfassen speichern aufruf 2022-10-05 13:25:43 +02:00
Lorenz Hilpert
650026b0c0 Es existiert bereits ein Onlinekonto 2022-10-04 17:48:15 +02:00
Lorenz Hilpert
cd25d6da38 #3489 fonts 2022-10-04 12:10:17 +02:00
Andreas Schickinger
9dd0954967 Merged PR 1381: #3326 Tätigkeitskalender Suchfunktion und neues Design
Tätigkeitskalender Suchfunktion und neues Design

Zusätzliche Änderungen im PR:
- Anpassungen für GitHub package Zugriff
- UiModalRef um ein afterChanged$ erweitert, um nach dem schließen zu erkennen ob ein reload notwendig ist
- ui-loader funktionierte nicht bei verwendung von ui-scroll-container mit useLoadAnimation false
- ui-skeleton-loader um Template für TK Listenitem erweitert

Related work items: #3419, #3420, #3421, #3422, #3423
2022-10-04 09:42:49 +00:00
Lorenz Hilpert
fdaceb9bf8 Merged PR 1382: Kubi
Related work items: #3228, #3230, #3289, #3467, #3471, #3478
2022-09-30 13:48:19 +00:00
Lorenz Hilpert
4ab3a3b3cf #3307 Fixed With Filter 2022-09-30 11:19:17 +02:00
Lorenz Hilpert
eb8b54dc63 Fix Unit Test 2022-09-29 18:05:43 +02:00
Lorenz Hilpert
4703aee60c Interveptor Unit Test Fix 2022-09-29 16:26:43 +02:00
Lorenz Hilpert
93b0d43bd7 #3307 Anzeige des backdrops bei Filtern 2022-09-29 14:20:41 +02:00
Lorenz Hilpert
1029310e0d #3483 Neuanmeldung bei 401 Antworten 2022-09-29 14:11:59 +02:00
Michael Auer
c083684db2 Merge tag '3452-Autocomplete-Abbrechen-Bei-Suche' into develop 2022-09-28 22:19:03 +02:00
Michael Auer
d6775aad69 Merge branch 'hotfix/3452-Autocomplete-Abbrechen-Bei-Suche' 2022-09-28 22:19:02 +02:00
Lorenz Hilpert
3eff10bbb4 Merged PR 1380: Upgrade der API auf V6
Upgrade der API auf V6

Related work items: #3466
2022-09-20 16:14:50 +00:00
Lorenz Hilpert
e4cbab8365 Merged PR 1379: #3428 Aktivierung der Buttons ohne Raio button aktivieren wenn nur ein artikel
#3428 Aktivierung der Buttons ohne Raio button aktivieren wenn nur ein artikel
2022-09-15 16:05:12 +00:00
Lorenz Hilpert
18212e7a4c Merged PR 1378: Update CRM API V6
Update CRM API V6
2022-09-14 15:13:14 +00:00
Lorenz Hilpert
0cd0b1abfd Merged PR 1377: Update CRM API
Related work items: #3464
2022-09-14 13:48:25 +00:00
Lorenz Hilpert
a66137873c Merged PR 1376: #3448 Anzeige Sonderinfo
#3448 Anzeige Sonderinfo
2022-09-14 08:26:29 +00:00
Andreas Schickinger
469110eabf Merged PR 1375: #3455 AHF Frist immer für gesamten Warenkorb festlegen
#3455 AHF Frist immer für gesamten Warenkorb festlegen

Related work items: #3455
2022-09-13 13:08:59 +00:00
Lorenz Hilpert
55474fa4e3 Merged PR 1374: #3451 nach löschen des Browser-Verlauf kommt Fehler
#3451 nach löschen des Browser-Verlauf kommt Fehler
2022-09-13 12:56:17 +00:00
Lorenz Hilpert
3bdcdee031 #3452 Autocomplete wird nicht abgebrochen, wenn Suche ausgelöst wurde 2022-09-12 14:34:24 +02:00
Lorenz Hilpert
246c5a61dd Merged PR 1373: #3428 bei Teilabholung ohne ausgewählten Radio-Button wirf Fehler
#3428 bei Teilabholung ohne ausgewählten Radio-Button wirf Fehler
2022-09-08 13:20:45 +00:00
Andreas Schickinger
0c8bfba515 Merged PR 1372: #3340 Quantity Dropdown um Suffix erweitert
#3340 Quantity Dropdown um Suffix erweitert

Related work items: #3340
2022-09-01 08:23:20 +00:00
Michael Auer
3c8d9bb1e5 Merge tag '2.0' into develop 2022-08-24 10:33:19 +02:00
Michael Auer
da2c1c8316 Merge branch 'release/2.0' 2022-08-24 10:33:18 +02:00
Lorenz Hilpert
0334b2dd33 Merge branch 'release/2.0' into develop 2022-08-23 14:24:21 +02:00
Lorenz Hilpert
96356042af Remission - Anpassung HTML fuer E2E Tests 2022-08-23 14:02:50 +02:00
Lorenz Hilpert
21adff8d0c #3140 Button "Nicht-Clickbar"-Icon nur wenn disabled 2022-08-22 16:11:51 +02:00
Lorenz Hilpert
35def2a7c7 #3405 Kalender -Speichern-Button verschwindet 2022-08-19 17:07:30 +02:00
Lorenz Hilpert
e3d82794a3 Merge branch 'develop' of https://dev.azure.com/hugendubel/ISA/_git/ISA-Frontend into develop 2022-08-19 15:55:10 +02:00
Lorenz Hilpert
20cbac8f17 #3140 Ausgrauen des Auswaehlen Buttons fur
Zuruecklegen bis
2022-08-19 15:55:01 +02:00
Lorenz Hilpert
6067e02729 #3400 Uebergabe 0 Eur wenn kein Preis existiert 2022-08-18 16:57:06 +02:00
Lorenz Hilpert
eb77664ea1 #3387 - Auswertung der Kapazitaeten angepasst 2022-08-18 15:38:24 +02:00
Michael Auer
8b1baf9ebd Merge tag '2.0.531' into develop 2022-08-18 13:47:13 +02:00
Michael Auer
12fb774b73 Merge branch 'release/2.0' 2022-08-18 13:44:03 +02:00
Lorenz Hilpert
d79dbb11fe #2162 - Warnung eingebaut und Anzeigefehler behoben 2022-08-17 17:08:09 +02:00
Lorenz Hilpert
19ccb29248 #2162 - WA - Auf der Details Seite werden nur items mit dem gleichen Kunden angezeigt. 2022-08-16 15:29:33 +02:00
Lorenz Hilpert
199c4f30e7 #3139 Loder angepasst 2022-08-11 17:23:20 +02:00
Lorenz Hilpert
732c0d4e35 #3139 Load Spinner für Abholfrist 2022-08-10 16:50:29 +02:00
Lorenz Hilpert
029997d624 #3338 - Uebergabe Filter angepasst 2022-08-08 11:56:46 +02:00
Andreas Schickinger
d2546409cb Merged PR 1370: #3139 Abholfachfrist: Für alle festlegen Button in Bestellbestätigung
#3139 Abholfachfrist: Für alle festlegen Button in Bestellbestätigung

Related work items: #3139
2022-08-08 08:46:00 +00:00
Andreas Schickinger
cb2bc8d65b Merged PR 1369: #3332 AHFFrist DisplayOrderItemSubsetDTO verwendet
#3332 AHFFrist DisplayOrderItemSubsetDTO verwendet

Related work items: #3332
2022-08-04 13:38:39 +00:00
Andreas Schickinger
cc1e210799 Merged PR 1367: #3139, #3140, #3328 AHFFrist auf Bestellbestätigung- und Bestellpostenseite
Related work items: #3139, #3140, #3328
2022-08-03 13:51:25 +00:00
Lorenz Hilpert
4bee08d483 Merged PR 1366: Merge release => develop
Related work items: #3180, #3203, #3245, #3293, #3299, #3312, #3320, #3322
2022-08-02 12:30:08 +00:00
2472 changed files with 58932 additions and 40703 deletions

7
.browserslistrc Normal file
View File

@@ -0,0 +1,7 @@
last 1 Chrome version
last 1 Firefox version
last 2 Edge major versions
last 2 iOS major versions
safari > 11
Firefox ESR
not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line.

1
.gitignore vendored
View File

@@ -31,6 +31,7 @@ speed-measure-plugin.json
.history/*
# misc
/.angular/cache
/.sass-cache
/connect.lock
/coverage

4
.npmrc
View File

@@ -1,3 +1 @@
@isa:registry=https://pkgs.dev.azure.com/hugendubel/_packaging/hugendubel%40Local/npm/registry/
@cmf:registry=https://pkgs.dev.azure.com/hugendubel/_packaging/hugendubel%40Local/npm/registry/
always-auth=true
@paragondata:registry=https://npm.pkg.github.com

35
.vscode/launch.json vendored
View File

@@ -1,22 +1,15 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.11.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "Launch Chrome",
"url": "https://192.168.2.112:4200",
"webRoot": "${workspaceFolder}",
"sourceMaps": true,
"sourceMapPathOverrides": {
"/./*": "${webRoot}/*",
"/src/*": "${webRoot}/*",
"/*": "*",
"/./~/*": "${webRoot}/node_modules/*"
}
}
]
}
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "ISA-App Chrome",
"url": "https://localhost:4200",
"webRoot": "${workspaceFolder}",
}
]
}

View File

@@ -1,5 +1,5 @@
#stage 1
FROM node:14 as base
FROM node:18 as base
ARG IS_PRODUCTION=false
ARG SEMVERSION=1.0.0
ARG BuildUniqueID

View File

File diff suppressed because it is too large Load Diff

View File

@@ -1,41 +0,0 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage'),
require('@angular-devkit/build-angular/plugins/karma'),
],
client: {
jasmine: {
// you can add configuration options for Jasmine here
// the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
// for example, you can disable the random execution with `random: false`
// or set a specific seed with `seed: 4321`
},
clearContext: false, // leave Jasmine Spec Runner output visible in browser
},
jasmineHtmlReporter: {
suppressAll: true, // removes the duplicated traces
},
coverageReporter: {
dir: require('path').join(__dirname, '../../../coverage/adapter/scan'),
subdir: '.',
reporters: [{ type: 'html' }, { type: 'text-summary' }],
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true,
});
};

View File

@@ -1,22 +1,23 @@
import { Injectable } from '@angular/core';
import { Injectable, isDevMode } from '@angular/core';
import { EnvironmentService } from '@core/environment';
import { PromptModalData, UiModalService, UiPromptModalComponent } from '@ui/modal';
import { Observable } from 'rxjs';
import { ScanAdapter } from './scan-adapter';
@Injectable()
export class DevScanAdapter implements ScanAdapter {
constructor(private _modal: UiModalService) {}
readonly name = 'Dev';
getName(): string {
return 'Dev Scanner';
}
constructor(private _modal: UiModalService, private _environmentService: EnvironmentService) {}
isPrimary(): boolean {
return true;
}
async init(): Promise<boolean> {
if (this._environmentService.isTablet()) {
return new Promise((resolve, reject) => {
resolve(isDevMode());
});
}
isReady(): boolean {
return true;
return false;
}
scan(): Observable<string> {

View File

@@ -0,0 +1,5 @@
describe('Dummy', () => {
it('should work', () => {
expect(true).toBeTruthy();
});
});

View File

@@ -6,20 +6,14 @@ import { ScanAdapter } from './scan-adapter';
@Injectable()
export class NativeScanAdapter implements ScanAdapter {
readonly name = 'Native';
constructor(private readonly nativeContainerService: NativeContainerService) {}
getName(): string {
return 'Native Scanner';
}
isPrimary(): boolean {
return true;
}
isReady(): boolean {
// TODO: Fix Login Keycard Dauerschleife
return this.nativeContainerService.isUiWebview().isNative || this.nativeContainerService.isIpadMini6();
// return false;
init(): Promise<boolean> {
return new Promise((resolve, reject) => {
resolve(this.nativeContainerService.isNative);
});
}
scan(): Observable<string> {

View File

@@ -1,11 +1,18 @@
import { Observable } from 'rxjs';
export interface ScanAdapter {
getName(): string;
/**
* Name to identify the adapter
*/
readonly name: string;
isPrimary(): boolean;
isReady(): boolean;
/**
* @returns true if this adapter can be used
*/
init(): Promise<boolean>;
/**
* scan for a barcode
*/
scan(): Observable<string>;
}

View File

@@ -5,10 +5,13 @@ import { SCAN_ADAPTER } from './tokens';
@NgModule({})
export class ScanAdapterModule {
static forRoot(dev?: boolean) {
static forRoot() {
return {
ngModule: ScanAdapterModule,
providers: [{ provide: SCAN_ADAPTER, useClass: NativeScanAdapter, multi: true }],
providers: [
{ provide: SCAN_ADAPTER, useClass: NativeScanAdapter, multi: true },
{ provide: SCAN_ADAPTER, useClass: DevScanAdapter, multi: true },
],
// Use for testing:
// providers: [{ provide: SCAN_ADAPTER, useClass: dev ? DevScanAdapter : NativeScanAdapter, multi: true }],
};

View File

@@ -1,4 +1,5 @@
import { Inject, Injectable } from '@angular/core';
import { Observable, throwError } from 'rxjs';
import { ScanAdapter } from './scan-adapter';
import { SCAN_ADAPTER } from './tokens';
@@ -6,25 +7,59 @@ import { SCAN_ADAPTER } from './tokens';
providedIn: 'root',
})
export class ScanAdapterService {
private _readyAdapters: Record<string, boolean> = {};
constructor(@Inject(SCAN_ADAPTER) private readonly scanAdapters: ScanAdapter[]) {}
scanners() {
return this.scanAdapters.filter((adapter) => adapter.isReady());
}
scanner() {
return this.scanners().find((scanner) => scanner.isPrimary()) || this.scanners().find(() => true);
}
isReady() {
return this.scanAdapters.some((adapter) => adapter.isReady());
}
scan() {
const primaryScanner = this.scanner();
if (primaryScanner) {
return primaryScanner.scan();
async init(): Promise<void> {
for (const adapter of this.scanAdapters) {
const isReady = await adapter.init();
console.log('ScanAdapterService.init', adapter.name, isReady);
this._readyAdapters[adapter.name] = isReady;
}
return null;
}
adapters(): ScanAdapter[] {
return [...this.scanAdapters];
}
getAdapter(name: string): ScanAdapter | undefined {
return this.scanAdapters.find((adapter) => adapter.name === name);
}
// return true if at least one adapter is ready
isReady(): boolean {
return Object.values(this._readyAdapters).some((ready) => ready);
}
scan(ops: { use?: string; include?: string[]; exclude?: string[] } = { exclude: ['Dev'] }): Observable<string> {
let adapter: ScanAdapter;
if (ops.use == undefined) {
// get the first adapter that is ready to use
adapter = this.scanAdapters
.filter((adapter) => {
if (ops.include?.length) {
return ops.include.includes(adapter.name);
} else if (ops.exclude?.length) {
return !ops.exclude.includes(adapter.name);
} else {
return true;
}
})
.find((adapter) => this._readyAdapters[adapter.name]);
} else {
adapter = this.getAdapter(ops.use);
}
if (!adapter) {
return throwError('No adapter found');
}
if (this._readyAdapters[adapter.name] == false) {
return throwError('Adapter is not ready');
}
return adapter.scan();
}
}

View File

@@ -0,0 +1,3 @@
export * from './scandit-overlay.component';
export * from './scandit-scan-adapter.module';
export * from './scandit.scan-adapter';

View File

@@ -0,0 +1,20 @@
:host {
@apply block relative;
}
.scanner-container {
width: 100vw;
max-width: 95vw;
max-height: calc(95vh - 120px);
}
.close-scanner {
@apply block px-6 py-4 bg-white text-brand border-2 border-solid border-brand rounded-full text-lg font-bold mx-auto mt-4;
}
@screen desktop {
.scanner-container {
max-width: 900px;
max-height: 900px;
}
}

View File

@@ -0,0 +1,4 @@
<div class="scanner-container" #scanContainer></div>
<button class="close-scanner" type="button" (click)="close()">
Scan abbrechen
</button>

View File

@@ -0,0 +1,100 @@
import { Component, ChangeDetectionStrategy, ElementRef, ViewChild, NgZone, AfterViewInit, OnDestroy } from '@angular/core';
import { UiMessageModalComponent, UiModalService } from '@ui/modal';
import { Barcode, BarcodePicker, ScanResult, ScanSettings } from 'scandit-sdk';
@Component({
selector: 'app-scandit-overlay',
templateUrl: 'scandit-overlay.component.html',
styleUrls: ['scandit-overlay.component.css'],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class ScanditOverlayComponent implements AfterViewInit, OnDestroy {
private _barcodePicker: BarcodePicker;
private _onScan?: (code: string) => void;
private _onClose?: () => void;
@ViewChild('scanContainer', { read: ElementRef, static: true }) scanContainer: ElementRef;
constructor(private _zone: NgZone, private _modal: UiModalService) {}
ngAfterViewInit(): void {
this.createBarcodePicker()
.then(() => {
this._barcodePicker.on('scan', (scanResult) => {
this._zone.run(() => this.handleScanrResult(scanResult));
});
})
.catch((err: Error) => {
this._modal
.open({
content: UiMessageModalComponent,
title: 'Zugriff auf Kamera verweigert',
data: { message: 'Falls Sie den Zugriff erlauben möchten, können Sie das über die Webseiteinstellung Ihres Browsers.' },
})
.afterClosed$.subscribe(() => {
this._onClose?.();
});
});
}
async createBarcodePicker() {
this._barcodePicker = await BarcodePicker.create(this.scanContainer.nativeElement, {
playSoundOnScan: true,
vibrateOnScan: true,
});
this._barcodePicker.applyScanSettings(this.getScanSettings());
}
getScanSettings(): ScanSettings {
return new ScanSettings({
blurryRecognition: false,
enabledSymbologies: [
Barcode.Symbology.EAN8,
Barcode.Symbology.EAN13,
Barcode.Symbology.UPCA,
Barcode.Symbology.UPCE,
Barcode.Symbology.CODE128,
Barcode.Symbology.CODE39,
Barcode.Symbology.CODE93,
Barcode.Symbology.INTERLEAVED_2_OF_5,
Barcode.Symbology.QR,
],
codeDuplicateFilter: 1000,
});
}
onScan(fn: (code: string) => void) {
this._onScan = fn;
}
onClose(fn: () => void) {
this._onClose = fn;
}
handleScanrResult(scanRestul: ScanResult) {
let result: string | undefined;
if (scanRestul.barcodes.length) {
result = scanRestul.barcodes[0].data;
} else if (scanRestul.texts.length) {
result = scanRestul.texts[0].value;
}
if (result) {
this._onScan?.(result);
}
}
close() {
this._onClose?.();
}
ngOnDestroy(): void {
this._zone.runOutsideAngular(() => {
this._barcodePicker?.destroy(true);
});
}
}

View File

@@ -0,0 +1,20 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ScanditOverlayComponent } from './scandit-overlay.component';
import { ScanditScanAdapter } from './scandit.scan-adapter';
import { SCAN_ADAPTER } from '../tokens';
@NgModule({
imports: [CommonModule],
exports: [ScanditOverlayComponent],
declarations: [ScanditOverlayComponent],
})
export class ScanditScanAdapterModule {
static forRoot() {
return {
ngModule: ScanditScanAdapterModule,
providers: [{ provide: SCAN_ADAPTER, useClass: ScanditScanAdapter, multi: true }],
};
}
}

View File

@@ -0,0 +1,82 @@
import { Injectable } from '@angular/core';
import { Observable, Subscriber } from 'rxjs';
import { ScanAdapter } from '../scan-adapter';
import { Overlay } from '@angular/cdk/overlay';
import { configure } from 'scandit-sdk';
// import { ScanditModalComponent } from './scandit-modal';
import { Config } from '@core/config';
import { ComponentPortal } from '@angular/cdk/portal';
import { ScanditOverlayComponent } from './scandit-overlay.component';
import { EnvironmentService } from '@core/environment';
@Injectable()
export class ScanditScanAdapter implements ScanAdapter {
readonly name = 'Scandit';
constructor(private readonly _config: Config, private _overlay: Overlay, private _environmentService: EnvironmentService) {}
async init(): Promise<boolean> {
if (this._environmentService.isTablet()) {
await configure(this._config.get('licence.scandit'), {
engineLocation: '/scandit/',
});
return true;
}
return false;
}
scan(): Observable<string> {
return new Observable((observer) => {
const overlay = this.createOverlay();
const portal = this.createPortal();
const ref = overlay.attach(portal);
const sub = new Subscriber();
const complete = () => {
overlay.detach();
ref.destroy();
sub.unsubscribe();
sub.complete();
observer.complete();
};
sub.add(
overlay.backdropClick().subscribe(() => {
complete();
})
);
ref.instance.onScan((code) => {
observer.next(code);
complete();
});
ref.instance.onClose(() => {
complete();
});
return complete;
});
}
createOverlay() {
const overlay = this._overlay.create({
positionStrategy: this._overlay.position().global().centerHorizontally().centerVertically(),
hasBackdrop: true,
});
return overlay;
}
createPortal() {
const portal = new ComponentPortal(ScanditOverlayComponent);
return portal;
}
}

View File

@@ -2,5 +2,10 @@
* Public API Surface of scan
*/
export * from './lib/scan.service';
export * from './lib/scandit';
export * from './lib/dev.scan-adapter';
export * from './lib/native.scan-adapter';
export * from './lib/scan-adapter';
export * from './lib/scan.module';
export * from './lib/scan.service';
export * from './lib/tokens';

View File

@@ -1,25 +0,0 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js';
import 'zone.js/testing';
import { getTestBed } from '@angular/core/testing';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
declare const require: {
context(
path: string,
deep?: boolean,
filter?: RegExp
): {
keys(): string[];
<T>(id: string): T;
};
};
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), { teardown: { destroyAfterEach: true } });
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

View File

@@ -3,7 +3,6 @@
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/lib",
"target": "es2015",
"declaration": true,
"declarationMap": true,
"inlineSources": true,

View File

@@ -7,11 +7,8 @@
"jasmine"
]
},
"files": [
"src/test.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}
}

View File

@@ -1,32 +0,0 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma'),
],
client: {
clearContext: false, // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../../../coverage/cdn/product-image'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true,
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true,
});
};

View File

@@ -1,16 +1,20 @@
import { TestBed } from '@angular/core/testing';
import { Config } from '@core/config';
import { createServiceFactory, SpectatorService } from '@ngneat/spectator';
import { ProductImageService } from './product-image.service';
describe('ProductImageService', () => {
let service: ProductImageService;
let spectator: SpectatorService<ProductImageService>;
const createService = createServiceFactory({
service: ProductImageService,
mocks: [Config],
});
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(ProductImageService);
spectator = createService();
});
it('should be created', () => {
expect(service).toBeTruthy();
expect(spectator.service).toBeTruthy();
});
});

View File

@@ -1,24 +0,0 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js';
import 'zone.js/testing';
import { getTestBed } from '@angular/core/testing';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
declare const require: {
context(
path: string,
deep?: boolean,
filter?: RegExp
): {
keys(): string[];
<T>(id: string): T;
};
};
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

View File

@@ -3,7 +3,6 @@
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/lib",
"target": "es2015",
"declaration": true,
"declarationMap": true,
"inlineSources": true,

View File

@@ -5,6 +5,6 @@
"declarationMap": false
},
"angularCompilerOptions": {
"enableIvy": false
"compilationMode": "partial"
}
}

View File

@@ -7,11 +7,8 @@
"jasmine"
]
},
"files": [
"src/test.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}
}

View File

@@ -1,24 +1,24 @@
# Auth
# Core
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.2.0.
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 15.0.0.
## Code scaffolding
Run `ng generate component component-name --project auth` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project auth`.
Run `ng generate component component-name --project core` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project core`.
> Note: Don't forget to add `--project auth` or else it will be added to the default project in your `angular.json` file.
> Note: Don't forget to add `--project core` or else it will be added to the default project in your `angular.json` file.
## Build
Run `ng build auth` to build the project. The build artifacts will be stored in the `dist/` directory.
Run `ng build core` to build the project. The build artifacts will be stored in the `dist/` directory.
## Publishing
After building your library with `ng build auth`, go to the dist folder `cd dist/auth` and run `npm publish`.
After building your library with `ng build core`, go to the dist folder `cd dist/core` and run `npm publish`.
## Running unit tests
Run `ng test auth` to execute the unit tests via [Karma](https://karma-runner.github.io).
Run `ng test core` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Further help

View File

@@ -1,25 +0,0 @@
# Application
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.1.2.
## Code scaffolding
Run `ng generate component component-name --project application` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project application`.
> Note: Don't forget to add `--project application` or else it will be added to the default project in your `angular.json` file.
## Build
Run `ng build application` to build the project. The build artifacts will be stored in the `dist/` directory.
## Publishing
After building your library with `ng build application`, go to the dist folder `cd dist/application` and run `npm publish`.
## Running unit tests
Run `ng test application` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).

View File

@@ -1,43 +0,0 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
const customLaunchers = require('../../../karma/custom-launchers');
const junitReporter = require('../../../karma/junit-reporter')('core-application');
const coverageReporter = require('../../../karma/coverage-reporter')('core-application');
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage'),
require('karma-junit-reporter'),
require('@angular-devkit/build-angular/plugins/karma'),
],
client: {
jasmine: {
// you can add configuration options for Jasmine here
// the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
// for example, you can disable the random execution with `random: false`
// or set a specific seed with `seed: 4321`
},
clearContext: false, // leave Jasmine Spec Runner output visible in browser
},
jasmineHtmlReporter: {
suppressAll: true, // removes the duplicated traces
},
coverageReporter,
junitReporter,
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
customLaunchers,
singleRun: false,
restartOnFileChange: true,
});
};

View File

@@ -1,11 +0,0 @@
{
"name": "@core/application",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^10.1.2",
"@angular/core": "^10.1.2"
},
"dependencies": {
"tslib": "^2.0.0"
}
}

View File

@@ -1,233 +1,233 @@
import { createServiceFactory, SpectatorService, SpyObject } from '@ngneat/spectator';
import { Store } from '@ngrx/store';
import { Observable, of } from 'rxjs';
import { first } from 'rxjs/operators';
import { ApplicationProcess } from './defs';
// import { createServiceFactory, SpectatorService, SpyObject } from '@ngneat/spectator';
// import { Store } from '@ngrx/store';
// import { Observable, of } from 'rxjs';
// import { first } from 'rxjs/operators';
// import { ApplicationProcess } from './defs';
import { ApplicationService } from './application.service';
import * as actions from './store/application.actions';
// import { ApplicationService } from './application.service';
// import * as actions from './store/application.actions';
describe('ApplicationService', () => {
let spectator: SpectatorService<ApplicationService>;
let store: SpyObject<Store>;
const createService = createServiceFactory({
service: ApplicationService,
mocks: [Store],
});
// describe('ApplicationService', () => {
// let spectator: SpectatorService<ApplicationService>;
// let store: SpyObject<Store>;
// const createService = createServiceFactory({
// service: ApplicationService,
// mocks: [Store],
// });
beforeEach(() => {
spectator = createService({});
store = spectator.inject(Store);
});
// beforeEach(() => {
// spectator = createService({});
// store = spectator.inject(Store);
// });
it('should be created', () => {
expect(spectator.service).toBeTruthy();
});
// it('should be created', () => {
// expect(spectator.service).toBeTruthy();
// });
describe('activatedProcessId$', () => {
it('should return an observable', () => {
expect(spectator.service.activatedProcessId$).toBeInstanceOf(Observable);
});
});
// describe('activatedProcessId$', () => {
// it('should return an observable', () => {
// expect(spectator.service.activatedProcessId$).toBeInstanceOf(Observable);
// });
// });
describe('activatedProcessId', () => {
it('should return the process id as a number', () => {
spyOnProperty(spectator.service['activatedProcessIdSubject'] as any, 'value').and.returnValue(2);
expect(spectator.service.activatedProcessId).toBe(2);
});
});
// describe('activatedProcessId', () => {
// it('should return the process id as a number', () => {
// spyOnProperty(spectator.service['activatedProcessIdSubject'] as any, 'value').and.returnValue(2);
// expect(spectator.service.activatedProcessId).toBe(2);
// });
// });
describe('getProcesses$()', () => {
it('should call select on store and return all selected processes', async () => {
const processes: ApplicationProcess[] = [
{ id: 1, name: 'Vorgang', type: 'cart', section: 'customer', data: { count: 1 } },
{ id: 2, name: 'Vorgang', type: 'task-calendar', section: 'branch' },
];
store.select.and.returnValue(of(processes));
const result = await spectator.service.getProcesses$().pipe(first()).toPromise();
expect(result).toEqual(processes);
expect(store.select).toHaveBeenCalled();
});
// describe('getProcesses$()', () => {
// it('should call select on store and return all selected processes', async () => {
// const processes: ApplicationProcess[] = [
// { id: 1, name: 'Vorgang', type: 'cart', section: 'customer', data: { count: 1 } },
// { id: 2, name: 'Vorgang', type: 'task-calendar', section: 'branch' },
// ];
// store.select.and.returnValue(of(processes));
// const result = await spectator.service.getProcesses$().pipe(first()).toPromise();
// expect(result).toEqual(processes);
// expect(store.select).toHaveBeenCalled();
// });
it('should call select on store and return all section customer processes', async () => {
const processes: ApplicationProcess[] = [
{ id: 1, name: 'Vorgang', type: 'cart', section: 'customer', data: { count: 1 } },
{ id: 2, name: 'Vorgang', type: 'task-calendar', section: 'branch' },
];
store.select.and.returnValue(of(processes));
const result = await spectator.service.getProcesses$('customer').pipe(first()).toPromise();
expect(result).toEqual([processes[0]]);
expect(store.select).toHaveBeenCalled();
});
// it('should call select on store and return all section customer processes', async () => {
// const processes: ApplicationProcess[] = [
// { id: 1, name: 'Vorgang', type: 'cart', section: 'customer', data: { count: 1 } },
// { id: 2, name: 'Vorgang', type: 'task-calendar', section: 'branch' },
// ];
// store.select.and.returnValue(of(processes));
// const result = await spectator.service.getProcesses$('customer').pipe(first()).toPromise();
// expect(result).toEqual([processes[0]]);
// expect(store.select).toHaveBeenCalled();
// });
it('should call select on store and return all section branch processes', async () => {
const processes: ApplicationProcess[] = [
{ id: 1, name: 'Vorgang', type: 'cart', section: 'customer', data: { count: 1 } },
{ id: 2, name: 'Vorgang', type: 'task-calendar', section: 'branch' },
];
store.select.and.returnValue(of(processes));
const result = await spectator.service.getProcesses$('branch').pipe(first()).toPromise();
expect(result).toEqual([processes[1]]);
expect(store.select).toHaveBeenCalled();
});
});
// it('should call select on store and return all section branch processes', async () => {
// const processes: ApplicationProcess[] = [
// { id: 1, name: 'Vorgang', type: 'cart', section: 'customer', data: { count: 1 } },
// { id: 2, name: 'Vorgang', type: 'task-calendar', section: 'branch' },
// ];
// store.select.and.returnValue(of(processes));
// const result = await spectator.service.getProcesses$('branch').pipe(first()).toPromise();
// expect(result).toEqual([processes[1]]);
// expect(store.select).toHaveBeenCalled();
// });
// });
describe('getProcessById$()', () => {
it('should return the process by id', async () => {
const processes: ApplicationProcess[] = [
{ id: 1, name: 'Vorgang 1', section: 'customer' },
{ id: 2, name: 'Vorgang 2', section: 'customer' },
];
spyOn(spectator.service, 'getProcesses$').and.returnValue(of(processes));
// describe('getProcessById$()', () => {
// it('should return the process by id', async () => {
// const processes: ApplicationProcess[] = [
// { id: 1, name: 'Vorgang 1', section: 'customer' },
// { id: 2, name: 'Vorgang 2', section: 'customer' },
// ];
// spyOn(spectator.service, 'getProcesses$').and.returnValue(of(processes));
const process = await spectator.service.getProcessById$(1).toPromise();
expect(process.id).toBe(1);
});
});
// const process = await spectator.service.getProcessById$(1).toPromise();
// expect(process.id).toBe(1);
// });
// });
describe('getSection$()', () => {
it('should return the selected section branch', async () => {
const section = 'branch';
store.select.and.returnValue(of(section));
const result = await spectator.service.getSection$().pipe(first()).toPromise();
expect(result).toEqual(section);
expect(store.select).toHaveBeenCalled();
});
});
// describe('getSection$()', () => {
// it('should return the selected section branch', async () => {
// const section = 'branch';
// store.select.and.returnValue(of(section));
// const result = await spectator.service.getSection$().pipe(first()).toPromise();
// expect(result).toEqual(section);
// expect(store.select).toHaveBeenCalled();
// });
// });
describe('getActivatedProcessId$', () => {
it('should return the current selected activated process id', async () => {
const activatedProcessId = 2;
store.select.and.returnValue(of({ id: activatedProcessId }));
const result = await spectator.service.getActivatedProcessId$().pipe(first()).toPromise();
expect(result).toEqual(activatedProcessId);
expect(store.select).toHaveBeenCalled();
});
});
// describe('getActivatedProcessId$', () => {
// it('should return the current selected activated process id', async () => {
// const activatedProcessId = 2;
// store.select.and.returnValue(of({ id: activatedProcessId }));
// const result = await spectator.service.getActivatedProcessId$().pipe(first()).toPromise();
// expect(result).toEqual(activatedProcessId);
// expect(store.select).toHaveBeenCalled();
// });
// });
describe('activateProcess()', () => {
it('should dispatch action setActivatedProcess with argument activatedProcessId and action type', () => {
const activatedProcessId = 2;
spectator.service.activateProcess(activatedProcessId);
expect(store.dispatch).toHaveBeenCalledWith({ activatedProcessId, type: actions.setActivatedProcess.type });
});
});
// describe('activateProcess()', () => {
// it('should dispatch action setActivatedProcess with argument activatedProcessId and action type', () => {
// const activatedProcessId = 2;
// spectator.service.activateProcess(activatedProcessId);
// expect(store.dispatch).toHaveBeenCalledWith({ activatedProcessId, type: actions.setActivatedProcess.type });
// });
// });
describe('removeProcess()', () => {
it('should dispatch action removeProcess with argument processId and action type', () => {
const processId = 2;
spectator.service.removeProcess(processId);
expect(store.dispatch).toHaveBeenCalledWith({ processId, type: actions.removeProcess.type });
});
});
// describe('removeProcess()', () => {
// it('should dispatch action removeProcess with argument processId and action type', () => {
// const processId = 2;
// spectator.service.removeProcess(processId);
// expect(store.dispatch).toHaveBeenCalledWith({ processId, type: actions.removeProcess.type });
// });
// });
describe('createProcess()', () => {
it('should dispatch action addProcess with process', async () => {
const process: ApplicationProcess = {
id: 1,
name: 'Vorgang 1',
section: 'customer',
type: 'cart',
};
// describe('createProcess()', () => {
// it('should dispatch action addProcess with process', async () => {
// const process: ApplicationProcess = {
// id: 1,
// name: 'Vorgang 1',
// section: 'customer',
// type: 'cart',
// };
const timestamp = 100;
spyOn(spectator.service as any, '_createTimestamp').and.returnValue(timestamp);
spyOn(spectator.service, 'getProcessById$').and.returnValue(of(undefined));
await spectator.service.createProcess(process);
// const timestamp = 100;
// spyOn(spectator.service as any, '_createTimestamp').and.returnValue(timestamp);
// spyOn(spectator.service, 'getProcessById$').and.returnValue(of(undefined));
// await spectator.service.createProcess(process);
expect(store.dispatch).toHaveBeenCalledWith({
type: actions.addProcess.type,
process: {
...process,
activated: 0,
created: timestamp,
},
});
});
// expect(store.dispatch).toHaveBeenCalledWith({
// type: actions.addProcess.type,
// process: {
// ...process,
// activated: 0,
// created: timestamp,
// },
// });
// });
it('should throw an error if the process id is already existing', async () => {
const process: ApplicationProcess = {
id: 1,
name: 'Vorgang 1',
section: 'customer',
type: 'cart',
};
spyOn(spectator.service, 'getProcessById$').and.returnValue(of(process));
await expectAsync(spectator.service.createProcess(process)).toBeRejectedWithError('Process Id existiert bereits');
});
// it('should throw an error if the process id is already existing', async () => {
// const process: ApplicationProcess = {
// id: 1,
// name: 'Vorgang 1',
// section: 'customer',
// type: 'cart',
// };
// spyOn(spectator.service, 'getProcessById$').and.returnValue(of(process));
// await expectAsync(spectator.service.createProcess(process)).toBeRejectedWithError('Process Id existiert bereits');
// });
it('should throw an error if the process id is not a number', async () => {
const process: ApplicationProcess = {
id: undefined,
name: 'Vorgang 1',
section: 'customer',
type: 'cart',
};
spyOn(spectator.service, 'getProcessById$').and.returnValue(of({ id: 5, name: 'Vorgang 2', section: 'customer' }));
await expectAsync(spectator.service.createProcess(process)).toBeRejectedWithError('Process Id nicht gesetzt');
});
});
// it('should throw an error if the process id is not a number', async () => {
// const process: ApplicationProcess = {
// id: undefined,
// name: 'Vorgang 1',
// section: 'customer',
// type: 'cart',
// };
// spyOn(spectator.service, 'getProcessById$').and.returnValue(of({ id: 5, name: 'Vorgang 2', section: 'customer' }));
// await expectAsync(spectator.service.createProcess(process)).toBeRejectedWithError('Process Id nicht gesetzt');
// });
// });
describe('patchProcess', () => {
it('should dispatch action patchProcess with changes', async () => {
const process: ApplicationProcess = {
id: 1,
name: 'Vorgang 1',
section: 'customer',
type: 'cart',
};
// describe('patchProcess', () => {
// it('should dispatch action patchProcess with changes', async () => {
// const process: ApplicationProcess = {
// id: 1,
// name: 'Vorgang 1',
// section: 'customer',
// type: 'cart',
// };
await spectator.service.patchProcess(process.id, process);
// await spectator.service.patchProcess(process.id, process);
expect(store.dispatch).toHaveBeenCalledWith({
type: actions.patchProcess.type,
processId: process.id,
changes: {
...process,
},
});
});
});
// expect(store.dispatch).toHaveBeenCalledWith({
// type: actions.patchProcess.type,
// processId: process.id,
// changes: {
// ...process,
// },
// });
// });
// });
describe('setSection()', () => {
it('should dispatch action setSection with argument section and action type', () => {
const section = 'customer';
spectator.service.setSection(section);
expect(store.dispatch).toHaveBeenCalledWith({ section, type: actions.setSection.type });
});
});
// describe('setSection()', () => {
// it('should dispatch action setSection with argument section and action type', () => {
// const section = 'customer';
// spectator.service.setSection(section);
// expect(store.dispatch).toHaveBeenCalledWith({ section, type: actions.setSection.type });
// });
// });
describe('getLastActivatedProcessWithSectionAndType()', () => {
it('should return the last activated process by section and type', async () => {
const processes: ApplicationProcess[] = [
{ id: 1, name: 'Vorgang 1', section: 'customer', type: 'cart', activated: 100 },
{ id: 2, name: 'Vorgang 2', section: 'customer', type: 'cart', activated: 200 },
{ id: 3, name: 'Vorgang 3', section: 'customer', type: 'goodsOut', activated: 300 },
];
spyOn(spectator.service, 'getProcesses$').and.returnValue(of(processes));
// describe('getLastActivatedProcessWithSectionAndType()', () => {
// it('should return the last activated process by section and type', async () => {
// const processes: ApplicationProcess[] = [
// { id: 1, name: 'Vorgang 1', section: 'customer', type: 'cart', activated: 100 },
// { id: 2, name: 'Vorgang 2', section: 'customer', type: 'cart', activated: 200 },
// { id: 3, name: 'Vorgang 3', section: 'customer', type: 'goodsOut', activated: 300 },
// ];
// spyOn(spectator.service, 'getProcesses$').and.returnValue(of(processes));
expect(await spectator.service.getLastActivatedProcessWithSectionAndType$('customer', 'cart').pipe(first()).toPromise()).toBe(
processes[1]
);
});
});
// expect(await spectator.service.getLastActivatedProcessWithSectionAndType$('customer', 'cart').pipe(first()).toPromise()).toBe(
// processes[1]
// );
// });
// });
describe('getLastActivatedProcessWithSection()', () => {
it('should return the last activated process by section', async () => {
const processes: ApplicationProcess[] = [
{ id: 1, name: 'Vorgang 1', section: 'customer', activated: 100 },
{ id: 2, name: 'Vorgang 2', section: 'customer', activated: 200 },
{ id: 3, name: 'Vorgang 3', section: 'customer', activated: 300 },
];
spyOn(spectator.service, 'getProcesses$').and.returnValue(of(processes));
// describe('getLastActivatedProcessWithSection()', () => {
// it('should return the last activated process by section', async () => {
// const processes: ApplicationProcess[] = [
// { id: 1, name: 'Vorgang 1', section: 'customer', activated: 100 },
// { id: 2, name: 'Vorgang 2', section: 'customer', activated: 200 },
// { id: 3, name: 'Vorgang 3', section: 'customer', activated: 300 },
// ];
// spyOn(spectator.service, 'getProcesses$').and.returnValue(of(processes));
expect(await spectator.service.getLastActivatedProcessWithSection$('customer').pipe(first()).toPromise()).toBe(processes[2]);
});
});
// expect(await spectator.service.getLastActivatedProcessWithSection$('customer').pipe(first()).toPromise()).toBe(processes[2]);
// });
// });
describe('_createTimestamp', () => {
it('should return the current timestamp in ms', () => {
expect(spectator.service['_createTimestamp']()).toBeCloseTo(Date.now());
});
});
});
// describe('_createTimestamp', () => {
// it('should return the current timestamp in ms', () => {
// expect(spectator.service['_createTimestamp']()).toBeCloseTo(Date.now());
// });
// });
// });

View File

@@ -1,5 +1,7 @@
import { Injectable } from '@angular/core';
import { DomainAvailabilityService } from '@domain/availability';
import { Store } from '@ngrx/store';
import { BranchDTO } from '@swagger/checkout';
import { isBoolean, isNumber } from '@utils/common';
import { BehaviorSubject, Observable } from 'rxjs';
import { first, map, switchMap } from 'rxjs/operators';
@@ -68,6 +70,16 @@ export class ApplicationService {
this.store.dispatch(patchProcessData({ processId, data }));
}
getSelectedBranch$(processId?: number): Observable<BranchDTO> {
if (!processId) {
return this.activatedProcessId$.pipe(
switchMap((processId) => this.getProcessById$(processId).pipe(map((process) => process?.data?.selectedBranch)))
);
}
return this.getProcessById$(processId).pipe(map((process) => process?.data?.selectedBranch));
}
async createProcess(process: ApplicationProcess) {
const existingProcess = await this.getProcessById$(process?.id).pipe(first()).toPromise();
if (existingProcess?.id === process?.id) {

View File

@@ -5,14 +5,16 @@ import * as selectors from './application.selectors';
describe('applicationSelectors', () => {
it('should select the processes', () => {
const processes: ApplicationProcess[] = [{ id: 1, name: 'Vorgang 1', section: 'customer' }];
const state: Partial<ApplicationState> = {
const state: ApplicationState = {
processes,
section: 'customer',
};
expect(selectors.selectProcesses.projector(state)).toEqual(processes);
});
it('should select the section', () => {
const state: Partial<ApplicationState> = {
const state: ApplicationState = {
processes: [],
section: 'customer',
};
expect(selectors.selectSection.projector(state)).toEqual('customer');
@@ -24,8 +26,9 @@ describe('applicationSelectors', () => {
{ id: 2, name: 'Vorgang 2', section: 'customer', activated: 300 },
{ id: 3, name: 'Vorgang 3', section: 'customer', activated: 200 },
];
const state: Partial<ApplicationState> = {
const state: ApplicationState = {
processes,
section: 'customer',
};
expect(selectors.selectActivatedProcess.projector(state)).toEqual(processes[1]);
});

View File

@@ -1,24 +0,0 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js';
import 'zone.js/testing';
import { getTestBed } from '@angular/core/testing';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
declare const require: {
context(
path: string,
deep?: boolean,
filter?: RegExp
): {
keys(): string[];
<T>(id: string): T;
};
};
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

View File

@@ -1,25 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/lib",
"target": "es2015",
"declaration": true,
"declarationMap": true,
"inlineSources": true,
"types": [],
"lib": [
"dom",
"es2018"
]
},
"angularCompilerOptions": {
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"enableResourceInlining": true
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

View File

@@ -1,17 +0,0 @@
{
"extends": "../../../tslint.json",
"rules": {
"directive-selector": [
true,
"attribute",
"lib",
"camelCase"
],
"component-selector": [
true,
"element",
"lib",
"kebab-case"
]
}
}

View File

@@ -1,43 +0,0 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
const customLaunchers = require('../../../karma/custom-launchers');
const junitReporter = require('../../../karma/junit-reporter')('core-auth');
const coverageReporter = require('../../../karma/coverage-reporter')('core-auth');
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage'),
require('karma-junit-reporter'),
require('@angular-devkit/build-angular/plugins/karma'),
],
client: {
jasmine: {
// you can add configuration options for Jasmine here
// the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
// for example, you can disable the random execution with `random: false`
// or set a specific seed with `seed: 4321`
},
clearContext: false, // leave Jasmine Spec Runner output visible in browser
},
jasmineHtmlReporter: {
suppressAll: true, // removes the duplicated traces
},
coverageReporter,
junitReporter,
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
customLaunchers,
singleRun: false,
restartOnFileChange: true,
});
};

View File

@@ -1,7 +1,11 @@
import { ModuleWithProviders, NgModule } from '@angular/core';
import { AuthService } from './auth.service';
import { OAuthModule } from 'angular-oauth2-oidc';
@NgModule({})
import { IfRoleDirective } from './if-role.directive';
@NgModule({
declarations: [IfRoleDirective],
exports: [IfRoleDirective],
})
export class AuthModule {
static forRoot(): ModuleWithProviders<AuthModule> {
return {

View File

@@ -1,9 +1,10 @@
import { coerceArray, coerceStringArray } from '@angular/cdk/coercion';
import { Injectable } from '@angular/core';
import { Config } from '@core/config';
import { isNullOrUndefined } from '@utils/common';
import { AuthConfig, OAuthService } from 'angular-oauth2-oidc';
import { JwksValidationHandler } from 'angular-oauth2-oidc-jwks';
import { BehaviorSubject } from 'rxjs';
import { asapScheduler, BehaviorSubject } from 'rxjs';
@Injectable({
providedIn: 'root',
@@ -14,24 +15,37 @@ export class AuthService {
return this._initialized.asObservable();
}
constructor(private _config: Config, private readonly _oAuthService: OAuthService) {}
private _authConfig: AuthConfig;
constructor(private _config: Config, private readonly _oAuthService: OAuthService) {
this._oAuthService.events?.subscribe((event) => {
if (event.type === 'token_received') {
console.log('SSO Token Expiration:', new Date(this._oAuthService.getAccessTokenExpiration()));
}
});
}
async init() {
if (this._initialized.getValue()) {
throw new Error('AuthService is already initialized');
}
const authConfig: AuthConfig = this._config.get('@core/auth');
this._authConfig = this._config.get('@core/auth');
authConfig.redirectUri = window.location.origin;
authConfig.silentRefreshRedirectUri = window.location.origin + '/silent-refresh.html';
authConfig.useSilentRefresh = true;
this._authConfig.redirectUri = window.location.origin;
this._oAuthService.configure(authConfig);
this._authConfig.silentRefreshRedirectUri = window.location.origin + '/silent-refresh.html';
this._authConfig.useSilentRefresh = true;
this._oAuthService.configure(this._authConfig);
this._oAuthService.tokenValidationHandler = new JwksValidationHandler();
this._oAuthService.setupAutomaticSilentRefresh();
await this._oAuthService.loadDiscoveryDocumentAndTryLogin();
try {
await this._oAuthService.loadDiscoveryDocumentAndTryLogin();
} catch (error) {
this.login();
}
this._initialized.next(true);
}
@@ -80,5 +94,32 @@ export class AuthService {
async logout() {
await this._oAuthService.revokeTokenAndLogout();
// asapScheduler.schedule(() => {
// window.location.reload();
// }, 250);
}
hasRole(role: string | string[]) {
const roles = coerceArray(role);
const userRoles = this.getClaimByKey('role');
if (isNullOrUndefined(userRoles)) {
return false;
}
return roles.every((r) => userRoles.includes(r));
}
async refresh() {
try {
if (this._authConfig.responseType.includes('code') && this._authConfig.scope.includes('offline_access')) {
await this._oAuthService.refreshToken();
} else {
await this._oAuthService.silentRefresh();
}
} catch (error) {
console.error(error);
}
}
}

View File

@@ -0,0 +1,65 @@
// import { SpectatorDirective, createDirectiveFactory } from '@ngneat/spectator';
// import { IfRoleDirective } from './if-role.directive';
// import { AuthService } from './auth.service';
// import { TemplateRef, ViewContainerRef } from '@angular/core';
// describe('IfRoleDirective', () => {
// let spectator: SpectatorDirective<IfRoleDirective>;
// const createDirective = createDirectiveFactory({
// directive: IfRoleDirective,
// mocks: [AuthService],
// });
// it('should create an instance', () => {
// spectator = createDirective(`<div *ifRole="'admin'"></div>`);
// expect(spectator.directive).toBeTruthy();
// });
// it('should render template when user has the role', () => {
// spectator = createDirective(`<div *ifRole="'admin'"></div>`);
// const authService = spectator.inject(AuthService);
// const viewContainerRef = spectator.inject(ViewContainerRef);
// const templateRef = spectator.inject(TemplateRef);
// authService.hasRole.and.returnValue(true);
// spectator.directive.ngOnChanges();
// expect(viewContainerRef.createEmbeddedView).toHaveBeenCalledWith(templateRef, spectator.directive.getContext());
// });
// it('should render else template when user does not have the role', () => {
// authService.hasRole.and.returnValue(false);
// const elseTemplateRef = {} as TemplateRef<any>;
// spectator = createDirective(`<ng-template #elseTemplateRef></ng-template><div *ifRole="'admin'; else elseTemplateRef"></div>`, {
// hostProps: {
// elseTemplateRef,
// },
// });
// spectator.directive.ngOnChanges();
// expect(viewContainerRef.createEmbeddedView).toHaveBeenCalledWith(elseTemplateRef, spectator.directive.getContext());
// });
// it('should render else template when user does not have the role using ifNotRole input', () => {
// authService.hasRole.and.returnValue(false);
// const elseTemplateRef = {} as TemplateRef<any>;
// spectator = createDirective(`<ng-template #elseTemplateRef></ng-template><div *ifNotRole="'admin'; else elseTemplateRef"></div>`, {
// hostProps: {
// elseTemplateRef,
// },
// });
// spectator.directive.ngOnChanges();
// expect(viewContainerRef.createEmbeddedView).toHaveBeenCalledWith(elseTemplateRef, spectator.directive.getContext());
// });
// it('should clear view when user does not have the role and elseTemplateRef is not defined', () => {
// authService.hasRole.and.returnValue(false);
// spectator = createDirective(`<div *ifRole="'admin'"></div>`);
// spectator.directive.ngOnChanges();
// expect(viewContainerRef.clear).toHaveBeenCalled();
// });
// it('should set $implicit to ifRole or ifNotRole input', () => {
// spectator = createDirective(`<div *ifRole="'admin'"></div>`);
// expect(spectator.directive.getContext().$implicit).toEqual('admin');
// spectator.setInput('ifNotRole', 'user');
// expect(spectator.directive.getContext().$implicit).toEqual('user');
// });
// });

View File

@@ -0,0 +1,59 @@
import { Directive, Input, OnChanges, TemplateRef, ViewContainerRef } from '@angular/core';
import { AuthService } from './auth.service';
@Directive({
selector: '[ifRole],[ifRoleElse],[ifNotRole],[ifNotRoleElse]',
})
export class IfRoleDirective implements OnChanges {
@Input()
ifRole: string | string[];
@Input()
ifRoleElse: TemplateRef<any>;
@Input()
ifNotRole: string | string[];
@Input()
ifNotRoleElse: TemplateRef<any>;
get renderTemplateRef() {
if (this.ifRole) {
return this._authService.hasRole(this.ifRole);
}
if (this.ifNotRole) {
return !this._authService.hasRole(this.ifNotRole);
}
return false;
}
get elseTemplateRef() {
return this.ifRoleElse || this.ifNotRoleElse;
}
constructor(private _templateRef: TemplateRef<any>, private _viewContainer: ViewContainerRef, private _authService: AuthService) {}
ngOnChanges() {
this.render();
}
render() {
if (this.renderTemplateRef) {
this._viewContainer.createEmbeddedView(this._templateRef, this.getContext());
return;
}
if (this.elseTemplateRef) {
this._viewContainer.createEmbeddedView(this.elseTemplateRef, this.getContext());
return;
}
this._viewContainer.clear();
}
getContext(): { $implicit: string | string[] } {
return {
$implicit: this.ifRole || this.ifNotRole,
};
}
}

View File

@@ -1,25 +0,0 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js';
import 'zone.js/testing';
import { getTestBed } from '@angular/core/testing';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
declare const require: {
context(
path: string,
deep?: boolean,
filter?: RegExp
): {
keys(): string[];
<T>(id: string): T;
};
};
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), { teardown: { destroyAfterEach: true } });
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

View File

@@ -1,25 +0,0 @@
# Breadcrumb
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.1.2.
## Code scaffolding
Run `ng generate component component-name --project breadcrumb` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project breadcrumb`.
> Note: Don't forget to add `--project breadcrumb` or else it will be added to the default project in your `angular.json` file.
## Build
Run `ng build breadcrumb` to build the project. The build artifacts will be stored in the `dist/` directory.
## Publishing
After building your library with `ng build breadcrumb`, go to the dist folder `cd dist/breadcrumb` and run `npm publish`.
## Running unit tests
Run `ng test breadcrumb` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).

View File

@@ -1,32 +0,0 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma'),
],
client: {
clearContext: false, // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../../../coverage/core/breadcrumb'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true,
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true,
});
};

View File

@@ -1,11 +0,0 @@
{
"name": "@core/breadcrumb",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^10.1.2",
"@angular/core": "^10.1.2"
},
"dependencies": {
"tslib": "^2.0.0"
}
}

View File

@@ -22,17 +22,9 @@ describe('Breadcrumb Service', () => {
service = TestBed.inject(BreadcrumbService);
});
describe('getByKey$', () => {
it('should call store.select with the selectBreadcrumbsByKey selector', () => {
store.select.and.returnValue(of([]));
service.getByKey$('unit-test');
expect(store.select).toHaveBeenCalledWith(selectors.selectBreadcrumbsByKey, 'unit-test');
});
});
describe('addBreadcrumb', () => {
it('should call store.dispatch with the addBreadecrumb action and retuns a breadcrumb with an id', () => {
let breadcrumb: Breadcrumb = { name: 'unit-test', key: 'hello-key', path: 'Run The Test' };
let breadcrumb: Breadcrumb = { name: 'unit-test', key: 'hello-key', path: 'Run The Test', section: 'customer' };
breadcrumb = service.addBreadcrumb(breadcrumb);
expect(store.dispatch).toHaveBeenCalledWith(actions.addBreadcrumb({ breadcrumb }));
expect(isNumber(breadcrumb.id)).toBeTruthy();

View File

@@ -17,6 +17,7 @@ describe('Breadcrumb Reducer', () => {
key: 'unit-test',
name: 'Test Name',
path: 'Test Patch',
section: 'customer',
};
const fixture = breadcrumbReducer(INIT, action.addBreadcrumb({ breadcrumb }));
@@ -32,6 +33,7 @@ describe('Breadcrumb Reducer', () => {
key: 'unit-test',
name: 'Test Name',
path: 'Test Patch',
section: 'customer',
};
const expected = {
@@ -54,6 +56,7 @@ describe('Breadcrumb Reducer', () => {
key: 'unit-test',
name: 'Test Name',
path: 'Test Patch',
section: 'customer',
};
const state = breadcrumbReducer(INIT, action.addBreadcrumb({ breadcrumb }));
@@ -71,6 +74,7 @@ describe('Breadcrumb Reducer', () => {
key: 'unit-test',
name: 'Test Name',
path: 'Test Patch',
section: 'customer',
};
const breadcrumb2 = { ...breadcrumb1, id: 2 };
const breadcrumb3 = { ...breadcrumb1, id: 3 };

View File

@@ -8,16 +8,29 @@ describe('Breadcrumb Selectors', () => {
let state: BreadcrumbState;
beforeEach(() => {
state = breadcrumbReducer(INIT, action.addBreadcrumb({ breadcrumb: { id: 1, key: 'unit-test-1', path: '', name: 'Unit Test 1' } }));
state = breadcrumbReducer(
state,
action.addBreadcrumb({ breadcrumb: { id: 2, key: 'unit-test-1', path: '', name: 'Unit Test 1', tags: ['details'] } })
INIT,
action.addBreadcrumb({ breadcrumb: { id: 1, key: 'unit-test-1', path: '', name: 'Unit Test 1', section: 'customer' } })
);
state = breadcrumbReducer(state, action.addBreadcrumb({ breadcrumb: { id: 3, key: 'unit-test-2', path: '', name: 'Unit Test 1' } }));
state = breadcrumbReducer(state, action.addBreadcrumb({ breadcrumb: { id: 4, key: 'unit-test-3', path: '', name: 'Unit Test 1' } }));
state = breadcrumbReducer(
state,
action.addBreadcrumb({ breadcrumb: { id: 5, key: 'unit-test-3', path: '', name: 'Unit Test 1', tags: ['details'] } })
action.addBreadcrumb({
breadcrumb: { id: 2, key: 'unit-test-1', path: '', name: 'Unit Test 1', tags: ['details'], section: 'customer' },
})
);
state = breadcrumbReducer(
state,
action.addBreadcrumb({ breadcrumb: { id: 3, key: 'unit-test-2', path: '', name: 'Unit Test 1', section: 'customer' } })
);
state = breadcrumbReducer(
state,
action.addBreadcrumb({ breadcrumb: { id: 4, key: 'unit-test-3', path: '', name: 'Unit Test 1', section: 'customer' } })
);
state = breadcrumbReducer(
state,
action.addBreadcrumb({
breadcrumb: { id: 5, key: 'unit-test-3', path: '', name: 'Unit Test 1', tags: ['details'], section: 'customer' },
})
);
});

View File

@@ -20,7 +20,7 @@ export const selectBreadcrumbById = createSelector(selectEntities, (entities, id
/**
* Gibt alle Breadcrumb Entities als Array zurück die den key enthalten
*/
export const selectBreadcrumbsByKey = createSelector(selectAll, (entities, key: string) => entities.filter((crumb) => crumb.key === key));
export const selectBreadcrumbsByKey = createSelector(selectAll, (entities, key: string) => entities.filter((crumb) => crumb.key == key));
/**
* Gibt alle Breadcrumb Entities als Array zurück die den key und tag enthalten
@@ -28,7 +28,7 @@ export const selectBreadcrumbsByKey = createSelector(selectAll, (entities, key:
export const selectBreadcrumbsByKeyAndTag = createSelector(
selectAll,
(entities: Breadcrumb[], { key, tag }: { key: string; tag: string }) =>
entities.filter((crumb) => crumb.key === key && isArray(crumb.tags) && crumb.tags.includes(tag))
entities.filter((crumb) => crumb.key == key && isArray(crumb.tags) && crumb.tags.includes(tag))
);
/**
@@ -37,7 +37,7 @@ export const selectBreadcrumbsByKeyAndTag = createSelector(
export const selectBreadcrumbsByKeyAndTags = createSelector(
selectAll,
(entities: Breadcrumb[], { key, tags }: { key: string; tags: string[] }) =>
entities.filter((crumb) => crumb.key === key && isArray(crumb.tags) && tags.every((tag) => crumb.tags.includes(tag)))
entities.filter((crumb) => crumb.key == key && isArray(crumb.tags) && tags.every((tag) => crumb.tags.includes(tag)))
);
/**

View File

@@ -1,24 +0,0 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js';
import 'zone.js/testing';
import { getTestBed } from '@angular/core/testing';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
declare const require: {
context(
path: string,
deep?: boolean,
filter?: RegExp
): {
keys(): string[];
<T>(id: string): T;
};
};
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

View File

@@ -1,25 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/lib",
"target": "es2015",
"declaration": true,
"declarationMap": true,
"inlineSources": true,
"types": [],
"lib": [
"dom",
"es2018"
]
},
"angularCompilerOptions": {
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"enableResourceInlining": true
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

View File

@@ -1,17 +0,0 @@
{
"extends": "../../../tslint.json",
"rules": {
"directive-selector": [
true,
"attribute",
"lib",
"camelCase"
],
"component-selector": [
true,
"element",
"lib",
"kebab-case"
]
}
}

View File

@@ -1,25 +0,0 @@
# Cache
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.1.2.
## Code scaffolding
Run `ng generate component component-name --project cache` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project cache`.
> Note: Don't forget to add `--project cache` or else it will be added to the default project in your `angular.json` file.
## Build
Run `ng build cache` to build the project. The build artifacts will be stored in the `dist/` directory.
## Publishing
After building your library with `ng build cache`, go to the dist folder `cd dist/cache` and run `npm publish`.
## Running unit tests
Run `ng test cache` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).

View File

@@ -1,32 +0,0 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma'),
],
client: {
clearContext: false, // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../../../coverage/core/cache'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true,
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true,
});
};

View File

@@ -1,11 +0,0 @@
{
"name": "@core/cache",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^10.1.2",
"@angular/core": "^10.1.2"
},
"dependencies": {
"tslib": "^2.0.0"
}
}

View File

@@ -1,24 +0,0 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js';
import 'zone.js/testing';
import { getTestBed } from '@angular/core/testing';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
declare const require: {
context(
path: string,
deep?: boolean,
filter?: RegExp
): {
keys(): string[];
<T>(id: string): T;
};
};
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

View File

@@ -1,25 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/lib",
"target": "es2015",
"declaration": true,
"declarationMap": true,
"inlineSources": true,
"types": [],
"lib": [
"dom",
"es2018"
]
},
"angularCompilerOptions": {
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"enableResourceInlining": true
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

View File

@@ -1,17 +0,0 @@
{
"extends": "../../../tslint.json",
"rules": {
"directive-selector": [
true,
"attribute",
"lib",
"camelCase"
],
"component-selector": [
true,
"element",
"lib",
"kebab-case"
]
}
}

View File

@@ -1,25 +0,0 @@
# Command
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.1.2.
## Code scaffolding
Run `ng generate component component-name --project command` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project command`.
> Note: Don't forget to add `--project command` or else it will be added to the default project in your `angular.json` file.
## Build
Run `ng build command` to build the project. The build artifacts will be stored in the `dist/` directory.
## Publishing
After building your library with `ng build command`, go to the dist folder `cd dist/command` and run `npm publish`.
## Running unit tests
Run `ng test command` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).

View File

@@ -1,32 +0,0 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma'),
],
client: {
clearContext: false, // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../../../coverage/core/command'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true,
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true,
});
};

View File

@@ -1,11 +0,0 @@
{
"name": "@core/command",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^10.1.2",
"@angular/core": "^10.1.2"
},
"dependencies": {
"tslib": "^2.0.0"
}
}

View File

@@ -1,16 +1,16 @@
import { TestBed } from '@angular/core/testing';
// import { TestBed } from '@angular/core/testing';
import { CommandService } from './command.service';
// import { CommandService } from './command.service';
describe('CommandService', () => {
let service: CommandService;
// describe('CommandService', () => {
// let service: CommandService;
beforeEach(() => {
TestBed.configureTestingModule({});
service = TestBed.inject(CommandService);
});
// beforeEach(() => {
// TestBed.configureTestingModule({});
// service = TestBed.inject(CommandService);
// });
it('should be created', () => {
expect(service).toBeTruthy();
});
});
// it('should be created', () => {
// expect(service).toBeTruthy();
// });
// });

View File

@@ -1,10 +1,10 @@
import { Injectable, Injector } from '@angular/core';
import { Injectable, Injector, Optional, SkipSelf } from '@angular/core';
import { ActionHandler } from './action-handler.interface';
import { FEATURE_ACTION_HANDLERS, ROOT_ACTION_HANDLERS } from './tokens';
@Injectable()
export class CommandService {
constructor(private injector: Injector) {}
constructor(private injector: Injector, @Optional() @SkipSelf() private _parent: CommandService) {}
async handleCommand<T>(command: string, data?: T): Promise<T> {
const actions = this.getActions(command);
@@ -15,7 +15,7 @@ export class CommandService {
console.error('CommandService.handleCommand', 'Action Handler does not exist', { action });
throw new Error('Action Handler does not exist');
}
console.log('handle command', handler, data);
data = await handler.handler(data);
}
return data;
@@ -25,10 +25,16 @@ export class CommandService {
return command?.split('|') || [];
}
getActionHandler(action: string): ActionHandler {
getActionHandler(action: string): ActionHandler | undefined {
const featureActionHandlers: ActionHandler[] = this.injector.get(FEATURE_ACTION_HANDLERS, []);
const rootActionHandlers: ActionHandler[] = this.injector.get(ROOT_ACTION_HANDLERS, []);
return [...featureActionHandlers, ...rootActionHandlers].find((handler) => handler.action === action);
let handler = [...featureActionHandlers, ...rootActionHandlers].find((handler) => handler.action === action);
if (this._parent && !handler) {
handler = this._parent.getActionHandler(action);
}
return handler;
}
}

View File

@@ -1,24 +0,0 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js';
import 'zone.js/testing';
import { getTestBed } from '@angular/core/testing';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
declare const require: {
context(
path: string,
deep?: boolean,
filter?: RegExp
): {
keys(): string[];
<T>(id: string): T;
};
};
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

View File

@@ -1,25 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/lib",
"target": "es2015",
"declaration": true,
"declarationMap": true,
"inlineSources": true,
"types": [],
"lib": [
"dom",
"es2018"
]
},
"angularCompilerOptions": {
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"enableResourceInlining": true
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

View File

@@ -1,10 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "./tsconfig.lib.json",
"compilerOptions": {
"declarationMap": false
},
"angularCompilerOptions": {
"enableIvy": false
}
}

View File

@@ -1,17 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/spec",
"types": [
"jasmine"
]
},
"files": [
"src/test.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

View File

@@ -1,17 +0,0 @@
{
"extends": "../../../tslint.json",
"rules": {
"directive-selector": [
true,
"attribute",
"lib",
"camelCase"
],
"component-selector": [
true,
"element",
"lib",
"kebab-case"
]
}
}

View File

@@ -1,25 +0,0 @@
# Config
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.2.0.
## Code scaffolding
Run `ng generate component component-name --project config` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project config`.
> Note: Don't forget to add `--project config` or else it will be added to the default project in your `angular.json` file.
## Build
Run `ng build config` to build the project. The build artifacts will be stored in the `dist/` directory.
## Publishing
After building your library with `ng build config`, go to the dist folder `cd dist/config` and run `npm publish`.
## Running unit tests
Run `ng test config` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.

View File

@@ -1,43 +0,0 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
const customLaunchers = require('../../../karma/custom-launchers');
const junitReporter = require('../../../karma/junit-reporter')('core-config');
const coverageReporter = require('../../../karma/coverage-reporter')('core-config');
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage'),
require('karma-junit-reporter'),
require('@angular-devkit/build-angular/plugins/karma'),
],
client: {
jasmine: {
// you can add configuration options for Jasmine here
// the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
// for example, you can disable the random execution with `random: false`
// or set a specific seed with `seed: 4321`
},
clearContext: false, // leave Jasmine Spec Runner output visible in browser
},
jasmineHtmlReporter: {
suppressAll: true, // removes the duplicated traces
},
coverageReporter,
junitReporter,
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
customLaunchers,
singleRun: false,
restartOnFileChange: true,
});
};

View File

@@ -1,25 +0,0 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js';
import 'zone.js/testing';
import { getTestBed } from '@angular/core/testing';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
declare const require: {
context(
path: string,
deep?: boolean,
filter?: RegExp
): {
keys(): string[];
<T>(id: string): T;
};
};
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), { teardown: { destroyAfterEach: true } });
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

View File

@@ -1,17 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/spec",
"types": [
"jasmine"
]
},
"files": [
"src/test.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

View File

@@ -1,25 +0,0 @@
# Environment
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.1.2.
## Code scaffolding
Run `ng generate component component-name --project environment` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project environment`.
> Note: Don't forget to add `--project environment` or else it will be added to the default project in your `angular.json` file.
## Build
Run `ng build environment` to build the project. The build artifacts will be stored in the `dist/` directory.
## Publishing
After building your library with `ng build environment`, go to the dist folder `cd dist/environment` and run `npm publish`.
## Running unit tests
Run `ng test environment` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).

View File

@@ -1,32 +0,0 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma'),
],
client: {
clearContext: false, // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../../../coverage/core/environment'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true,
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true,
});
};

View File

@@ -1,11 +0,0 @@
{
"name": "@core/environment",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^10.1.2",
"@angular/core": "^10.1.2"
},
"dependencies": {
"tslib": "^2.0.0"
}
}

View File

@@ -1,32 +1,26 @@
import { Injectable } from '@angular/core';
import { fromEvent } from 'rxjs';
import { map, take, tap } from 'rxjs/operators';
import { Platform } from '@angular/cdk/platform';
import { NativeContainerService } from 'native-container';
@Injectable({
providedIn: 'root',
})
export class EnvironmentService {
constructor() {}
constructor(private _platform: Platform, private _nativeContainer: NativeContainerService) {}
// /** Returns whether app is used within native container*/
// isNative(): Promise<boolean> {
// return fromEvent(window, 'message')
// .pipe(
// map((evt: MessageEvent) => evt.data),
// tap(console.log.bind(window)),
// map((data) => data.status === 'INIT'),
// take(1)
// )
// .toPromise();
// }
/** Returns whether current device is mobile phone or tablet */
async isMobile(): Promise<boolean> {
return 'orientation' in window;
isDesktop(): boolean {
return !this.isTablet();
}
/** Returns whether current device is desktop */
async isDesktop(): Promise<boolean> {
return !(await this.isMobile());
isTablet(): boolean {
return this.isNative() || this.isSafari();
}
isNative(): boolean {
return this._nativeContainer.isNative;
}
isSafari(): boolean {
return (this._platform.ANDROID || this._platform.IOS) && this._platform.SAFARI;
}
}

View File

@@ -1,24 +0,0 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js';
import 'zone.js/testing';
import { getTestBed } from '@angular/core/testing';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
declare const require: {
context(
path: string,
deep?: boolean,
filter?: RegExp
): {
keys(): string[];
<T>(id: string): T;
};
};
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

View File

@@ -1,25 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/lib",
"target": "es2015",
"declaration": true,
"declarationMap": true,
"inlineSources": true,
"types": [],
"lib": [
"dom",
"es2018"
]
},
"angularCompilerOptions": {
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"enableResourceInlining": true
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

View File

@@ -1,10 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "./tsconfig.lib.json",
"compilerOptions": {
"declarationMap": false
},
"angularCompilerOptions": {
"enableIvy": false
}
}

View File

@@ -1,17 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/spec",
"types": [
"jasmine"
]
},
"files": [
"src/test.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

View File

@@ -1,17 +0,0 @@
{
"extends": "../../../tslint.json",
"rules": {
"directive-selector": [
true,
"attribute",
"lib",
"camelCase"
],
"component-selector": [
true,
"element",
"lib",
"kebab-case"
]
}
}

View File

@@ -1,43 +0,0 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
const customLaunchers = require('../../../karma/custom-launchers');
const junitReporter = require('../../../karma/junit-reporter')('core-logger');
const coverageReporter = require('../../../karma/coverage-reporter')('core-logger');
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage'),
require('karma-junit-reporter'),
require('@angular-devkit/build-angular/plugins/karma'),
],
client: {
jasmine: {
// you can add configuration options for Jasmine here
// the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
// for example, you can disable the random execution with `random: false`
// or set a specific seed with `seed: 4321`
},
clearContext: false, // leave Jasmine Spec Runner output visible in browser
},
jasmineHtmlReporter: {
suppressAll: true, // removes the duplicated traces
},
junitReporter,
coverageReporter,
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
customLaunchers,
singleRun: false,
restartOnFileChange: true,
});
};

View File

@@ -1,25 +0,0 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js';
import 'zone.js/testing';
import { getTestBed } from '@angular/core/testing';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
declare const require: {
context(
path: string,
deep?: boolean,
filter?: RegExp
): {
keys(): string[];
<T>(id: string): T;
};
};
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), { teardown: { destroyAfterEach: true } });
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

View File

@@ -1,17 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/spec",
"types": [
"jasmine"
]
},
"files": [
"src/test.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

View File

@@ -0,0 +1,7 @@
{
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../dist/core",
"lib": {
"entryFile": "src/public-api.ts"
}
}

View File

@@ -1,9 +1,9 @@
{
"name": "@core/auth",
"name": "core",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^12.2.0",
"@angular/core": "^12.2.0"
"@angular/common": "^15.0.0",
"@angular/core": "^15.0.0"
},
"dependencies": {
"tslib": "^2.3.0"

View File

@@ -1,25 +0,0 @@
# Signalr
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.2.4.
## Code scaffolding
Run `ng generate component component-name --project signalr` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project signalr`.
> Note: Don't forget to add `--project signalr` or else it will be added to the default project in your `angular.json` file.
## Build
Run `ng build signalr` to build the project. The build artifacts will be stored in the `dist/` directory.
## Publishing
After building your library with `ng build signalr`, go to the dist folder `cd dist/signalr` and run `npm publish`.
## Running unit tests
Run `ng test signalr` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.

View File

@@ -1,32 +0,0 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage-istanbul-reporter'),
require('@angular-devkit/build-angular/plugins/karma'),
],
client: {
clearContext: false, // leave Jasmine Spec Runner output visible in browser
},
coverageIstanbulReporter: {
dir: require('path').join(__dirname, '../../../coverage/core/signalr'),
reports: ['html', 'lcovonly', 'text-summary'],
fixWebpackSourcePaths: true,
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true,
});
};

View File

@@ -1,11 +0,0 @@
{
"name": "@core/signalr",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^10.2.4",
"@angular/core": "^10.2.4"
},
"dependencies": {
"tslib": "^2.0.0"
}
}

View File

@@ -1,24 +0,0 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js';
import 'zone.js/testing';
import { getTestBed } from '@angular/core/testing';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
declare const require: {
context(
path: string,
deep?: boolean,
filter?: RegExp
): {
keys(): string[];
<T>(id: string): T;
};
};
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting());
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

View File

@@ -1,25 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/lib",
"target": "es2015",
"declaration": true,
"declarationMap": true,
"inlineSources": true,
"types": [],
"lib": [
"dom",
"es2018"
]
},
"angularCompilerOptions": {
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"enableResourceInlining": true
},
"exclude": [
"src/test.ts",
"**/*.spec.ts"
]
}

View File

@@ -1,10 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "./tsconfig.lib.json",
"compilerOptions": {
"declarationMap": false
},
"angularCompilerOptions": {
"enableIvy": false
}
}

View File

@@ -1,17 +0,0 @@
/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
"extends": "../../../tsconfig.json",
"compilerOptions": {
"outDir": "../../../out-tsc/spec",
"types": [
"jasmine"
]
},
"files": [
"src/test.ts"
],
"include": [
"**/*.spec.ts",
"**/*.d.ts"
]
}

View File

@@ -1,17 +0,0 @@
{
"extends": "../../../tslint.json",
"rules": {
"directive-selector": [
true,
"attribute",
"lib",
"camelCase"
],
"component-selector": [
true,
"element",
"lib",
"kebab-case"
]
}
}

View File

@@ -1,19 +1,17 @@
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { ToastComponent } from './toast.component';
import { CoreComponent } from './core.component';
describe('ToastComponent', () => {
let component: ToastComponent;
let fixture: ComponentFixture<ToastComponent>;
describe('CoreComponent', () => {
let component: CoreComponent;
let fixture: ComponentFixture<CoreComponent>;
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [ToastComponent],
declarations: [CoreComponent],
}).compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(ToastComponent);
fixture = TestBed.createComponent(CoreComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});

View File

@@ -0,0 +1,12 @@
import { Component } from '@angular/core';
@Component({
selector: 'lib-core',
template: `
<p>
core works!
</p>
`,
styles: [],
})
export class CoreComponent {}

View File

@@ -0,0 +1,9 @@
import { NgModule } from '@angular/core';
import { CoreComponent } from './core.component';
@NgModule({
declarations: [CoreComponent],
imports: [],
exports: [CoreComponent],
})
export class CoreModule {}

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