Compare commits
103 Commits
9111ad147c
...
0.18.4
| Author | SHA1 | Date | |
|---|---|---|---|
|
269d7a7def
|
|||
|
e95f2333b0
|
|||
|
950217e0a3
|
|||
|
5e65fb3301
|
|||
|
2a294cde04
|
|||
|
e95420d79c
|
|||
|
cffbd17dc7
|
|||
|
00de8c3d75
|
|||
|
1f4711d07a
|
|||
|
30e3396897
|
|||
|
5291e049a1
|
|||
|
08fbb504c9
|
|||
|
e9ca1d3e5d
|
|||
|
eb80406fdb
|
|||
|
9fe53b0b9c
|
|||
|
9ae5e62e5d
|
|||
|
1613ae7de6
|
|||
| ed1caa7be7 | |||
| d88f3a5a27 | |||
|
c98eb49ae3
|
|||
|
6d9d8a4724
|
|||
|
7d8c68a455
|
|||
|
8f33640bec
|
|||
|
f89023e24a
|
|||
|
f5d14f2e18
|
|||
|
9811ede3b2
|
|||
|
b2e51fea48
|
|||
|
2a915620c9
|
|||
|
526688935f
|
|||
|
c7dcf7c66d
|
|||
|
06411dc147
|
|||
|
195d182cc9
|
|||
|
17217dae76
|
|||
|
f105cc0a41
|
|||
|
2f62c7ae89
|
|||
|
f6c1fea17c
|
|||
|
178dc93319
|
|||
|
8ffe8eff06
|
|||
|
bd4952ee57
|
|||
|
4b171fd04f
|
|||
|
2c198cfde8
|
|||
|
7c6d39b5fa
|
|||
|
9c13b2f9e9
|
|||
|
1ec9556aa6
|
|||
|
adec38b50b
|
|||
|
a35af6f020
|
|||
|
e74ff5e885
|
|||
|
c87561f63b
|
|||
|
c681570134
|
|||
|
53b945c72f
|
|||
|
f6985daec7
|
|||
|
5662c3b6da
|
|||
|
9def0b27c9
|
|||
|
52a02c82d2
|
|||
|
c241961d0a
|
|||
|
8f50555a06
|
|||
|
b35375c929
|
|||
|
bf1e715261
|
|||
|
0240e1dca2
|
|||
|
7cec2a00c5
|
|||
|
239f79fecb
|
|||
|
0265a59b82
|
|||
|
57dce34fc5
|
|||
|
d8110580e9
|
|||
|
03b7ada5ef
|
|||
|
1df505ea00
|
|||
|
3e8dac3203
|
|||
|
95707a71a9
|
|||
|
fc2c2907c4
|
|||
|
ebdd1c2c0c
|
|||
|
13254b24dd
|
|||
|
e17eb64031
|
|||
|
a0727a0291
|
|||
|
f7f7926829
|
|||
|
9b7dca341b
|
|||
|
da3300562a
|
|||
|
e2ddb5a14c
|
|||
|
fb9645aed6
|
|||
|
a4ebc7e126
|
|||
|
fd5db7d68a
|
|||
|
e7eddb4f08
|
|||
|
94155845f0
|
|||
|
3abf608b15
|
|||
|
d31fe2363b
|
|||
|
11a56f87e8
|
|||
|
19793cdcd4
|
|||
|
9363773fa1
|
|||
|
c7990882cf
|
|||
|
d4ab76ea1b
|
|||
|
2c992a0e63
|
|||
|
88f96acc3c
|
|||
|
245db06173
|
|||
|
49c2cd5c4b
|
|||
|
64db553185
|
|||
|
a06a19ce9c
|
|||
|
592ddc1541
|
|||
|
cb5f2b73d0
|
|||
|
2304b12c1c
|
|||
|
38d3e1912c
|
|||
|
fbc14fd7b4
|
|||
|
0283df22c8
|
|||
|
845737ee8e
|
|||
|
6993511c67
|
144
CHANGELOG.md
144
CHANGELOG.md
@@ -2,9 +2,153 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
|
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
|
||||||
|
|
||||||
|
#### [0.18.4](https://git.odit.services/lfk/frontend/compare/0.18.3...0.18.4)
|
||||||
|
|
||||||
|
- Hide address2 in orgs by default [`e95f233`](https://git.odit.services/lfk/frontend/commit/e95f2333b0b958ed00c0e097b43aac2e70ad0d38)
|
||||||
|
|
||||||
|
#### [0.18.3](https://git.odit.services/lfk/frontend/compare/0.18.2...0.18.3)
|
||||||
|
|
||||||
|
> 15 April 2023
|
||||||
|
|
||||||
|
- 🚀RELEASE v0.18.3 [`950217e`](https://git.odit.services/lfk/frontend/commit/950217e0a350f9999b879475edf41f2f11c48179)
|
||||||
|
- Dont show adress 2 in runner overview [`5e65fb3`](https://git.odit.services/lfk/frontend/commit/5e65fb33013c3dad38e7ad6740b017ae206f278f)
|
||||||
|
|
||||||
|
#### [0.18.2](https://git.odit.services/lfk/frontend/compare/0.18.1...0.18.2)
|
||||||
|
|
||||||
|
> 15 April 2023
|
||||||
|
|
||||||
|
- 🚀RELEASE v0.18.2 [`2a294cd`](https://git.odit.services/lfk/frontend/commit/2a294cde040044bbebfb9c8b34b6c91b27772741)
|
||||||
|
- Added timestamps to scanoverview [`cffbd17`](https://git.odit.services/lfk/frontend/commit/cffbd17dc77054048cc9b14891f960f9a3fd18cb)
|
||||||
|
- Push in releaseit [`e95420d`](https://git.odit.services/lfk/frontend/commit/e95420d79c3227c0ca0cf0c0b599970c2b7d690e)
|
||||||
|
|
||||||
|
#### [0.18.1](https://git.odit.services/lfk/frontend/compare/0.18.0...0.18.1)
|
||||||
|
|
||||||
|
> 15 April 2023
|
||||||
|
|
||||||
|
- 🚀RELEASE v0.18.1 [`00de8c3`](https://git.odit.services/lfk/frontend/commit/00de8c3d75e90cd4614f42111f5f45bedde64130)
|
||||||
|
- Missing scanstation translations [`30e3396`](https://git.odit.services/lfk/frontend/commit/30e33968978bf33cedb31bcbf63fac273e1664f5)
|
||||||
|
- fix: button onclick a11y [`9fe53b0`](https://git.odit.services/lfk/frontend/commit/9fe53b0b9c71e8a6b4aa3f317327ffe729df0834)
|
||||||
|
- fix(ConfirmStatsClientDeletion): ScanStationService -> StatsClientService [`5291e04`](https://git.odit.services/lfk/frontend/commit/5291e049a1d2e880fbe277095da91b70d4812c3f)
|
||||||
|
- fix(ConfirmScanStationDeletion): donorControllerRemove -> scanStationControllerRemove [`08fbb50`](https://git.odit.services/lfk/frontend/commit/08fbb504c958415ce75e1e426296f870f0f1358d)
|
||||||
|
|
||||||
|
#### [0.18.0](https://git.odit.services/lfk/frontend/compare/0.17.3...0.18.0)
|
||||||
|
|
||||||
|
> 12 April 2023
|
||||||
|
|
||||||
|
- Moved filter function to typed version [`#171`](https://git.odit.services/lfk/frontend/issues/171)
|
||||||
|
- ScansOverview: migrate to datatable [`#168`](https://git.odit.services/lfk/frontend/issues/168)
|
||||||
|
- 🚀RELEASE v0.18.0 [`eb80406`](https://git.odit.services/lfk/frontend/commit/eb80406fdb8abf3f76bca742095e8f1f03480a56)
|
||||||
|
- wip: ScansOverview -> new datatable [`c87561f`](https://git.odit.services/lfk/frontend/commit/c87561f63b90ab951daf91d9b8b54ba96a94cc7f)
|
||||||
|
- Basic card table replace [`5662c3b`](https://git.odit.services/lfk/frontend/commit/5662c3b6da67c00c94254bf39f8820e531fc93ef)
|
||||||
|
- RunnersOverview: table responsiveness [`bf1e715`](https://git.odit.services/lfk/frontend/commit/bf1e715261c0076fd8543dd1187c516209a73b16)
|
||||||
|
- Basic card delete modal [`8ffe8ef`](https://git.odit.services/lfk/frontend/commit/8ffe8eff0623767809cdc49ea15cf2d30b609285)
|
||||||
|
- wip: delete scans [`f105cc0`](https://git.odit.services/lfk/frontend/commit/f105cc0a41972261610d03015ecd5ee492dab8e2)
|
||||||
|
- Added delete runner modal [`fd5db7d`](https://git.odit.services/lfk/frontend/commit/fd5db7d68ab4b32f7bb14bd0275a447b749e1fd8)
|
||||||
|
- Extracted table bottom [`8f50555`](https://git.odit.services/lfk/frontend/commit/8f50555a06a35d0b11ac1d9201851d00d915c4b8)
|
||||||
|
- fix: formatting [`9def0b2`](https://git.odit.services/lfk/frontend/commit/9def0b27c9958c5c75466f56c17b6dc4d44d2b50)
|
||||||
|
- fix(CardsOverview): table scroll + checkbox posititioning [`9c13b2f`](https://git.odit.services/lfk/frontend/commit/9c13b2f9e938ad36cb74c66a8f91a5b872c8c2d1)
|
||||||
|
- Extracted table header [`c241961`](https://git.odit.services/lfk/frontend/commit/c241961d0ab0d6b8c3bf0453c1a21d84027ed62f)
|
||||||
|
- drop legacy dependencies [`c98eb49`](https://git.odit.services/lfk/frontend/commit/c98eb49ae31d1d28de79c7a9c945ade50828f07f)
|
||||||
|
- scan delete working [`c7dcf7c`](https://git.odit.services/lfk/frontend/commit/c7dcf7c66d7141117e08462ad05f6f441565d012)
|
||||||
|
- Add Card appends current cards [`195d182`](https://git.odit.services/lfk/frontend/commit/195d182cc977b4ac9f342f09a9ea69d461892a95)
|
||||||
|
- Moved data loading to onmount [`a35af6f`](https://git.odit.services/lfk/frontend/commit/a35af6f02055115d60d040baaf22dabbeda38498)
|
||||||
|
- Add runners reactivity [`06411dc`](https://git.odit.services/lfk/frontend/commit/06411dc14747fc9803da009a29688789c31dfc42)
|
||||||
|
- quick cleanup [`ebdd1c2`](https://git.odit.services/lfk/frontend/commit/ebdd1c2c0c2191c60dfacd0c4be989748628ca63)
|
||||||
|
- Extracted deletion into function of overview [`a0727a0`](https://git.odit.services/lfk/frontend/commit/a0727a02913708de06be8bf1b9f8cbae5489f080)
|
||||||
|
- Moved update card logic to overview [`53b945c`](https://git.odit.services/lfk/frontend/commit/53b945c72fa5b30f03eff8bb83f8f25d85d79b07)
|
||||||
|
- wip:ScanValid badge [`bd4952e`](https://git.odit.services/lfk/frontend/commit/bd4952ee575b4cd8caea3608b14d8c51b37a55eb)
|
||||||
|
- yeeted extra table styling [`52a02c8`](https://git.odit.services/lfk/frontend/commit/52a02c82d2bdabdf3e632910aa415c1ffb97fd7f)
|
||||||
|
- Added custom runner filter [`7c6d39b`](https://git.odit.services/lfk/frontend/commit/7c6d39b5fa60d1b834c9fb74dd26dfc2225161d6)
|
||||||
|
- Scan reactive add [`f5d14f2`](https://git.odit.services/lfk/frontend/commit/f5d14f2e1810462cba99b2482320746f0750d4a1)
|
||||||
|
- Moved code around [`239f79f`](https://git.odit.services/lfk/frontend/commit/239f79fecba732c807f4296cf524be15c1ccff1e)
|
||||||
|
- Scan deletion [`7d8c68a`](https://git.odit.services/lfk/frontend/commit/7d8c68a4550407e8c871545e7a0c5f622a1e3b9c)
|
||||||
|
- Added status filter function [`f6c1fea`](https://git.odit.services/lfk/frontend/commit/f6c1fea17ce64d890ac810d9dff058dd589c2989)
|
||||||
|
- Added delete toast [`e2ddb5a`](https://git.odit.services/lfk/frontend/commit/e2ddb5a14cc8b450c00129709bf5b933a47866dd)
|
||||||
|
- Fixed killing of the dom [`2f62c7a`](https://git.odit.services/lfk/frontend/commit/2f62c7ae89b7dda3bc0efd4d56e677898a3f197f)
|
||||||
|
- Cards details modal [`f6985da`](https://git.odit.services/lfk/frontend/commit/f6985daec71e4d922acd8a9b2673fd41317b075f)
|
||||||
|
- Reload table data on delete [`3e8dac3`](https://git.odit.services/lfk/frontend/commit/3e8dac3203f56723a3dad4a35887d60fc03d4ae3)
|
||||||
|
- Added middle-name [`d811058`](https://git.odit.services/lfk/frontend/commit/d8110580e9a33cfb0c6e9cbdce630262d5b5d4c1)
|
||||||
|
- Fixed id sorting [`7cec2a0`](https://git.odit.services/lfk/frontend/commit/7cec2a00c513678cae8643ef3905d566a538bde0)
|
||||||
|
- Import add to datatable [`2a91562`](https://git.odit.services/lfk/frontend/commit/2a915620c9adcb481be53e3c919bd5f14a5108ee)
|
||||||
|
- Scans deletion [`6d9d8a4`](https://git.odit.services/lfk/frontend/commit/6d9d8a4724135df98ed1bec74b0cc20a8bdbda53)
|
||||||
|
- fix(DeleteRunnerModal): ESC key [`1df505e`](https://git.odit.services/lfk/frontend/commit/1df505ea00968f65e7aff85baa80f8935fd2eb7b)
|
||||||
|
- Versionbuilder [`1613ae7`](https://git.odit.services/lfk/frontend/commit/1613ae7de6e84aa5f9df6774a8e820fcf515b14a)
|
||||||
|
- Fixed edit dispatch [`c681570`](https://git.odit.services/lfk/frontend/commit/c68157013431eeb1150e37fea87da02d5f7b032e)
|
||||||
|
- ScansOverview: use CardRunner link [`4b171fd`](https://git.odit.services/lfk/frontend/commit/4b171fd04f4fc895f9919294858e546686504c65)
|
||||||
|
- Added custom filter to scan overview [`2c198cf`](https://git.odit.services/lfk/frontend/commit/2c198cfde89363142c1c958e6961b7823196e04e)
|
||||||
|
- Disable sort for actions [`fc2c290`](https://git.odit.services/lfk/frontend/commit/fc2c2907c43e5b1fa192b571cf93b2f2e492158f)
|
||||||
|
- Delete modal logic [`da33005`](https://git.odit.services/lfk/frontend/commit/da3300562a25cf39945a94f873ec27f0d5fb9dc0)
|
||||||
|
- Module [`9ae5e62`](https://git.odit.services/lfk/frontend/commit/9ae5e62e5d84097082bc29fe20b329f6e614f6ed)
|
||||||
|
- new license file version [CI SKIP] [`ed1caa7`](https://git.odit.services/lfk/frontend/commit/ed1caa7be7673ef08f9c0074101f3cfb52963ab7)
|
||||||
|
- Merge pull request 'experiment/tanstack' (#172) from experiment/tanstack into dev [`d88f3a5`](https://git.odit.services/lfk/frontend/commit/d88f3a5a2737921536c5eb109734abafd7609e51)
|
||||||
|
- Removed pnpm store [`eb13f03`](https://git.odit.services/lfk/frontend/commit/eb13f038a1990ed2966552ab1d36df4a76e5a99a)
|
||||||
|
- dependency update, drop focusTrap, first tanstack experiment in RunnersOverview [`9bec95e`](https://git.odit.services/lfk/frontend/commit/9bec95ede80908e45ad0f18a66dbb45784f7e33e)
|
||||||
|
- Added translations [`dcabed4`](https://git.odit.services/lfk/frontend/commit/dcabed4e93134a1f04305c47536f1cc93b0cfb31)
|
||||||
|
- new license file version [CI SKIP] [`d0fe6a2`](https://git.odit.services/lfk/frontend/commit/d0fe6a2e8513638c4d8e2b3dafd48b91490eab3b)
|
||||||
|
- Bumped pnpm to 8 [`ee91748`](https://git.odit.services/lfk/frontend/commit/ee91748b3c7c2fb4f196d76121713ac42465b9dd)
|
||||||
|
- drop old datatables [`cb5f2b7`](https://git.odit.services/lfk/frontend/commit/cb5f2b73d0a5f71875f48d381382919f9bee364e)
|
||||||
|
- wip: pagination [`a59dbbe`](https://git.odit.services/lfk/frontend/commit/a59dbbe50ede47e0dada906d10887cc6b1ae3264)
|
||||||
|
- Added sort [`842248e`](https://git.odit.services/lfk/frontend/commit/842248e4c43bb94a0e73981d2d848e0723687932)
|
||||||
|
- cleanup headers [`5ecf838`](https://git.odit.services/lfk/frontend/commit/5ecf838dd231269c3c4f0d1e3376ff157457b04a)
|
||||||
|
- Moved filter function to shared [`2304b12`](https://git.odit.services/lfk/frontend/commit/2304b12c1cca6a64573223906ab0561ba9050ec5)
|
||||||
|
- Group filters [`0283df2`](https://git.odit.services/lfk/frontend/commit/0283df22c84740dd978e09120985215b65d7a12a)
|
||||||
|
- feat(RunnersOverview): row selection [`6993511`](https://git.odit.services/lfk/frontend/commit/6993511c67cc81303a1eece7fc2a4218dc818afc)
|
||||||
|
- Basic details and delete buttons [`9363773`](https://git.odit.services/lfk/frontend/commit/9363773fa1910975d48746572fe166363986c6ab)
|
||||||
|
- Added delete cards button [`70307a9`](https://git.odit.services/lfk/frontend/commit/70307a9e8272f22801c6765c947f8576cc1d1102)
|
||||||
|
- ScansOverview: add ThFilterTrack [`008835c`](https://git.odit.services/lfk/frontend/commit/008835c24f833aebbecc53921b0901a76f25bf06)
|
||||||
|
- Yeeted old datatable references [`8925261`](https://git.odit.services/lfk/frontend/commit/89252619b1f6d478c287178bfffc573cf574a8fa)
|
||||||
|
- Added filter [`a9cdac4`](https://git.odit.services/lfk/frontend/commit/a9cdac4f74a80afe3d0ce677ed5256201b75b29b)
|
||||||
|
- Moved sort onclick to header only [`3de7b63`](https://git.odit.services/lfk/frontend/commit/3de7b632e058e9ca9ab951de9e86cc2a40eceb68)
|
||||||
|
- Switched drone to pnpm cache [`d79608e`](https://git.odit.services/lfk/frontend/commit/d79608edbb7ca68b0a26f6c021a141373308081f)
|
||||||
|
- pagination size [`45a7a90`](https://git.odit.services/lfk/frontend/commit/45a7a90cb8ee933d064c5891b3532cb1ece38d38)
|
||||||
|
- RunnersOverview: add filter keyboard support [`9415584`](https://git.odit.services/lfk/frontend/commit/94155845f020679e8765d198b5ab4735e1d1142c)
|
||||||
|
- RunnersOverview: pass selectedRunners to actions [`d4ab76e`](https://git.odit.services/lfk/frontend/commit/d4ab76ea1be1789aaa53ca57d33b2356c6804ffd)
|
||||||
|
- fix pagination next prev [`cac851f`](https://git.odit.services/lfk/frontend/commit/cac851f2b19dafa01b08d1da612e34cbe3eb4133)
|
||||||
|
- Moved docker to pnpm with cache [`4cbd265`](https://git.odit.services/lfk/frontend/commit/4cbd26580e51b854fdfd369056f24a30b04100a1)
|
||||||
|
- fix: TracksOverview [`c799088`](https://git.odit.services/lfk/frontend/commit/c7990882cfa4ac6c3a2ffa696dcbf3b62790c1fe)
|
||||||
|
- Table header i18n [`070a20a`](https://git.odit.services/lfk/frontend/commit/070a20a2e599e9f00b1bd0e944f9d68d08dc1cba)
|
||||||
|
- default to 50 rows pagination [`dc866dd`](https://git.odit.services/lfk/frontend/commit/dc866dd5403ae681193c5e325b1f6d4068f80b61)
|
||||||
|
- improved tablefilters/groupFilter [`3abf608`](https://git.odit.services/lfk/frontend/commit/3abf608b15fcfc2cf65b705d28d394917e7ac333)
|
||||||
|
- Updated group name conversion [`9111ad1`](https://git.odit.services/lfk/frontend/commit/9111ad147c7537036de834f80db6e557d8d6f0d9)
|
||||||
|
- show certificate, runnercard, sponsoring contract section [`49c2cd5`](https://git.odit.services/lfk/frontend/commit/49c2cd5c4b32e1b75fe0dae48c1b470608936704)
|
||||||
|
- add basic table styling [`c5e8409`](https://git.odit.services/lfk/frontend/commit/c5e84090795636c7a80d6cabe46168e436d40f50)
|
||||||
|
- Cards deleted migrations [`ef077b4`](https://git.odit.services/lfk/frontend/commit/ef077b4e6ad722e6d1c9efd5060165f649fd94c9)
|
||||||
|
- ignore pnpm store from now on [`fe62ad5`](https://git.odit.services/lfk/frontend/commit/fe62ad5539bc94b242c30c2952bf4c115cc9abfd)
|
||||||
|
- ammendme [`d31fe23`](https://git.odit.services/lfk/frontend/commit/d31fe2363b0f167b937f7d67908e75c709b324d8)
|
||||||
|
- updated default table row count [`245db06`](https://git.odit.services/lfk/frontend/commit/245db0617306bab23993caf00dc5ba0405e95625)
|
||||||
|
- fix: checkbox styling [`64db553`](https://git.odit.services/lfk/frontend/commit/64db5531858b2275d27c53a347da6c0416a278e8)
|
||||||
|
- Added distance conversion [`333214a`](https://git.odit.services/lfk/frontend/commit/333214aa8f945975ee2dcbd1cfa285e5e75c9d02)
|
||||||
|
- Added filterfunctions [`a9a965d`](https://git.odit.services/lfk/frontend/commit/a9a965d6981b07b02e3f752e65e1e5c4e9df7147)
|
||||||
|
- card/ThFilterRunner: text align left [`7083b3d`](https://git.odit.services/lfk/frontend/commit/7083b3d8d2c81fa4ab14f21d379befbb2dab5b6c)
|
||||||
|
- import [`0240e1d`](https://git.odit.services/lfk/frontend/commit/0240e1dca2e162b8c79f294f5c651b4a38455235)
|
||||||
|
- fix: table sort button + search style [`57dce34`](https://git.odit.services/lfk/frontend/commit/57dce34fc5b04c297c5341db24ec47c2f1d39595)
|
||||||
|
- No longer switching pnpm store path [`e5241d6`](https://git.odit.services/lfk/frontend/commit/e5241d619beda90d271485b6c09142b1e7b9b5f1)
|
||||||
|
- Reactivated generate cards modal [`8f33640`](https://git.odit.services/lfk/frontend/commit/8f33640bec8f79987b1319fb0765535fe493d496)
|
||||||
|
- Always load bulk created cards [`f89023e`](https://git.odit.services/lfk/frontend/commit/f89023e24ab30c90a8cacf2e9590d1dfa1a743d5)
|
||||||
|
- ScansOverview: fallback for manual scans [`1ec9556`](https://git.odit.services/lfk/frontend/commit/1ec9556aa64b996d0bdd9cd3ee50a767a154f5f6)
|
||||||
|
- fix min-w th [`b35375c`](https://git.odit.services/lfk/frontend/commit/b35375c929ad8d525b2761c321ecef0399917828)
|
||||||
|
- Close modal on delete and import toastify [`03b7ada`](https://git.odit.services/lfk/frontend/commit/03b7ada5ef3cbf64f178d3d0d88c448d76a42885)
|
||||||
|
- Fixed styling [`13254b2`](https://git.odit.services/lfk/frontend/commit/13254b24dd75ca3eb47fd53d5368f047545e8420)
|
||||||
|
- Implemented table buttons [`11a56f8`](https://git.odit.services/lfk/frontend/commit/11a56f87e89866bd9b2f7029ef683fd139d60aa4)
|
||||||
|
- RunnersOverview: disable debug log [`2c992a0`](https://git.odit.services/lfk/frontend/commit/2c992a0e63fa72055d28785fe7f5c21fd26f1fea)
|
||||||
|
- RunnersOverview: TopActionSection: add margin top [`88f96ac`](https://git.odit.services/lfk/frontend/commit/88f96acc3c31c748d3da29b4564dd681a89208b9)
|
||||||
|
- Unused filter function value [`38d3e19`](https://git.odit.services/lfk/frontend/commit/38d3e1912cd6d5362db236c34e0c602b52060b73)
|
||||||
|
- Make the linter happy [`fbc14fd`](https://git.odit.services/lfk/frontend/commit/fbc14fd7b47009bf64a8824e7b60373eea031e3f)
|
||||||
|
- Dsable column filter for distance [`67eff0e`](https://git.odit.services/lfk/frontend/commit/67eff0eda9b7d49d1abe784247afdbfbd7a76b00)
|
||||||
|
- getPaginationRowModel [`238082b`](https://git.odit.services/lfk/frontend/commit/238082b657998f513111e832556926decbe84e21)
|
||||||
|
- -> onkeyup [`aecbabe`](https://git.odit.services/lfk/frontend/commit/aecbabe52221c0ab8d94a42dc8ac42f4f397fde8)
|
||||||
|
- removed unused import [`9811ede`](https://git.odit.services/lfk/frontend/commit/9811ede3b23a488a49962a43dae5abad60f93341)
|
||||||
|
- drop redundant button role [`e7eddb4`](https://git.odit.services/lfk/frontend/commit/e7eddb4f08632cc803b8752e3561319fab538843)
|
||||||
|
- Filter id as equals [`2699b06`](https://git.odit.services/lfk/frontend/commit/2699b06d7c42608b1b3ce2037908a78143038441)
|
||||||
|
- debug table [`fd0d45f`](https://git.odit.services/lfk/frontend/commit/fd0d45f721396787ad35fca2a7fd0f26d98b23e9)
|
||||||
|
- add TODO for ScansOverview status filter [`9505c2b`](https://git.odit.services/lfk/frontend/commit/9505c2b03005f4e667082cb4527fea863dbbf7fc)
|
||||||
|
|
||||||
#### [0.17.3](https://git.odit.services/lfk/frontend/compare/0.17.2...0.17.3)
|
#### [0.17.3](https://git.odit.services/lfk/frontend/compare/0.17.2...0.17.3)
|
||||||
|
|
||||||
|
> 15 March 2023
|
||||||
|
|
||||||
- dependency fixes [`3ea7a01`](https://git.odit.services/lfk/frontend/commit/3ea7a015a9beba3c2e4d3eb966f24ff6d4ac786e)
|
- dependency fixes [`3ea7a01`](https://git.odit.services/lfk/frontend/commit/3ea7a015a9beba3c2e4d3eb966f24ff6d4ac786e)
|
||||||
|
- 🚀RELEASE v0.17.3 [`85705b6`](https://git.odit.services/lfk/frontend/commit/85705b6e684d0c41d3dc770cef7bffb199101576)
|
||||||
- set pnpm to @7 [`4432941`](https://git.odit.services/lfk/frontend/commit/44329413ed2ca23f74e86db041b2c25b2b1c2a2b)
|
- set pnpm to @7 [`4432941`](https://git.odit.services/lfk/frontend/commit/44329413ed2ca23f74e86db041b2c25b2b1c2a2b)
|
||||||
|
|
||||||
#### [0.17.2](https://git.odit.services/lfk/frontend/compare/0.17.1...0.17.2)
|
#### [0.17.2](https://git.odit.services/lfk/frontend/compare/0.17.1...0.17.2)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<span style="display: none;visibility: hidden;" id="buildinfo">RELEASE_INFO-0.17.3-RELEASE_INFO</span>
|
<span style="display: none;visibility: hidden;" id="buildinfo">RELEASE_INFO-0.18.4-RELEASE_INFO</span>
|
||||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||||
<script src="/env.js"></script>
|
<script src="/env.js"></script>
|
||||||
<script type="module" src="/src/main.js"></script>
|
<script type="module" src="/src/main.js"></script>
|
||||||
|
|||||||
2
order.js
2
order.js
@@ -1,4 +1,4 @@
|
|||||||
const fs = require('fs');
|
import fs from 'fs'
|
||||||
// get all language files
|
// get all language files
|
||||||
const files = fs.readdirSync('./src/locales/');
|
const files = fs.readdirSync('./src/locales/');
|
||||||
files.forEach((f) => {
|
files.forEach((f) => {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@odit/lfk-frontend",
|
"name": "@odit/lfk-frontend",
|
||||||
"version": "0.17.3",
|
"version": "0.18.4",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"i18n-order": "node order.js",
|
"i18n-order": "node order.js",
|
||||||
@@ -13,10 +13,8 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@odit/license-exporter": "0.0.12",
|
"@odit/license-exporter": "0.0.12",
|
||||||
"@sveltejs/vite-plugin-svelte": "2.0.4",
|
"@sveltejs/vite-plugin-svelte": "2.0.4",
|
||||||
"@types/html-minifier": "4.0.2",
|
|
||||||
"auto-changelog": "2.4.0",
|
"auto-changelog": "2.4.0",
|
||||||
"autoprefixer": "10.4.14",
|
"autoprefixer": "10.4.14",
|
||||||
"html-minifier": "4.0.0",
|
|
||||||
"postcss": "8.4.21",
|
"postcss": "8.4.21",
|
||||||
"release-it": "15.10.1",
|
"release-it": "15.10.1",
|
||||||
"svelte-select": "3.17.0",
|
"svelte-select": "3.17.0",
|
||||||
@@ -28,7 +26,7 @@
|
|||||||
"commit": true,
|
"commit": true,
|
||||||
"requireCleanWorkingDir": false,
|
"requireCleanWorkingDir": false,
|
||||||
"commitMessage": "🚀RELEASE v${version}",
|
"commitMessage": "🚀RELEASE v${version}",
|
||||||
"push": false,
|
"push": true,
|
||||||
"tag": true,
|
"tag": true,
|
||||||
"tagName": null,
|
"tagName": null,
|
||||||
"tagAnnotation": "v${version}"
|
"tagAnnotation": "v${version}"
|
||||||
@@ -44,8 +42,6 @@
|
|||||||
"@odit/lfk-client-js": "0.14.3",
|
"@odit/lfk-client-js": "0.14.3",
|
||||||
"@paralleldrive/cuid2": "^2.2.0",
|
"@paralleldrive/cuid2": "^2.2.0",
|
||||||
"@tanstack/svelte-table": "^8.8.5",
|
"@tanstack/svelte-table": "^8.8.5",
|
||||||
"@tanstack/table-core": "^8.8.5",
|
|
||||||
"@vincjo/datatables": "^1.5.2",
|
|
||||||
"check-password-strength": "2.0.7",
|
"check-password-strength": "2.0.7",
|
||||||
"csvtojson": "2.0.10",
|
"csvtojson": "2.0.10",
|
||||||
"gridjs": "3.4.0",
|
"gridjs": "3.4.0",
|
||||||
|
|||||||
109
pnpm-lock.yaml
generated
109
pnpm-lock.yaml
generated
@@ -10,12 +10,6 @@ dependencies:
|
|||||||
'@tanstack/svelte-table':
|
'@tanstack/svelte-table':
|
||||||
specifier: ^8.8.5
|
specifier: ^8.8.5
|
||||||
version: 8.8.5(svelte@3.58.0)
|
version: 8.8.5(svelte@3.58.0)
|
||||||
'@tanstack/table-core':
|
|
||||||
specifier: ^8.8.5
|
|
||||||
version: 8.8.5
|
|
||||||
'@vincjo/datatables':
|
|
||||||
specifier: ^1.5.2
|
|
||||||
version: 1.5.2
|
|
||||||
check-password-strength:
|
check-password-strength:
|
||||||
specifier: 2.0.7
|
specifier: 2.0.7
|
||||||
version: 2.0.7
|
version: 2.0.7
|
||||||
@@ -57,18 +51,12 @@ devDependencies:
|
|||||||
'@sveltejs/vite-plugin-svelte':
|
'@sveltejs/vite-plugin-svelte':
|
||||||
specifier: 2.0.4
|
specifier: 2.0.4
|
||||||
version: 2.0.4(svelte@3.58.0)(vite@4.2.1)
|
version: 2.0.4(svelte@3.58.0)(vite@4.2.1)
|
||||||
'@types/html-minifier':
|
|
||||||
specifier: 4.0.2
|
|
||||||
version: 4.0.2
|
|
||||||
auto-changelog:
|
auto-changelog:
|
||||||
specifier: 2.4.0
|
specifier: 2.4.0
|
||||||
version: 2.4.0
|
version: 2.4.0
|
||||||
autoprefixer:
|
autoprefixer:
|
||||||
specifier: 10.4.14
|
specifier: 10.4.14
|
||||||
version: 10.4.14(postcss@8.4.21)
|
version: 10.4.14(postcss@8.4.21)
|
||||||
html-minifier:
|
|
||||||
specifier: 4.0.0
|
|
||||||
version: 4.0.0
|
|
||||||
postcss:
|
postcss:
|
||||||
specifier: 8.4.21
|
specifier: 8.4.21
|
||||||
version: 8.4.21
|
version: 8.4.21
|
||||||
@@ -608,43 +596,10 @@ packages:
|
|||||||
engines: {node: '>= 6'}
|
engines: {node: '>= 6'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/clean-css@4.2.6:
|
|
||||||
resolution: {integrity: sha512-Ze1tf+LnGPmG6hBFMi0B4TEB0mhF7EiMM5oyjLDNPE9hxrPU0W+5+bHvO+eFPA+bt0iC1zkQMoU/iGdRVjcRbw==}
|
|
||||||
dependencies:
|
|
||||||
'@types/node': 18.15.11
|
|
||||||
source-map: 0.6.1
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@types/html-minifier@4.0.2:
|
|
||||||
resolution: {integrity: sha512-4IkmkXJP/25R2fZsCHDX2abztXuQRzUAZq39PfCMz2loLFj8vS9y7aF6vDl58koXSTpsF+eL4Lc5Y4Aww/GCTQ==}
|
|
||||||
dependencies:
|
|
||||||
'@types/clean-css': 4.2.6
|
|
||||||
'@types/relateurl': 0.2.29
|
|
||||||
'@types/uglify-js': 3.17.1
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@types/http-cache-semantics@4.0.1:
|
/@types/http-cache-semantics@4.0.1:
|
||||||
resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==}
|
resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@types/node@18.15.11:
|
|
||||||
resolution: {integrity: sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==}
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@types/relateurl@0.2.29:
|
|
||||||
resolution: {integrity: sha512-QSvevZ+IRww2ldtfv1QskYsqVVVwCKQf1XbwtcyyoRvLIQzfyPhj/C+3+PKzSDRdiyejaiLgnq//XTkleorpLg==}
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@types/uglify-js@3.17.1:
|
|
||||||
resolution: {integrity: sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==}
|
|
||||||
dependencies:
|
|
||||||
source-map: 0.6.1
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@vincjo/datatables@1.5.2:
|
|
||||||
resolution: {integrity: sha512-pdpwJ0y/CobZdfIxeujXB1jIARVlaKRf0aGhr6cINdUTuW0Ab0kgpZNy/MdAXnKeE6lBFzBXjI8FcJzkdmN/wg==}
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/acorn-walk@8.2.0:
|
/acorn-walk@8.2.0:
|
||||||
resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
|
resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
|
||||||
engines: {node: '>=0.4.0'}
|
engines: {node: '>=0.4.0'}
|
||||||
@@ -927,13 +882,6 @@ packages:
|
|||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/camel-case@3.0.0:
|
|
||||||
resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==}
|
|
||||||
dependencies:
|
|
||||||
no-case: 2.3.2
|
|
||||||
upper-case: 1.1.3
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/camelcase-css@2.0.1:
|
/camelcase-css@2.0.1:
|
||||||
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
|
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
|
||||||
engines: {node: '>= 6'}
|
engines: {node: '>= 6'}
|
||||||
@@ -998,13 +946,6 @@ packages:
|
|||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/clean-css@4.2.4:
|
|
||||||
resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==}
|
|
||||||
engines: {node: '>= 4.0'}
|
|
||||||
dependencies:
|
|
||||||
source-map: 0.6.1
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/cli-boxes@3.0.0:
|
/cli-boxes@3.0.0:
|
||||||
resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==}
|
resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
@@ -1078,10 +1019,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
|
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/commander@2.20.3:
|
|
||||||
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/commander@4.1.1:
|
/commander@4.1.1:
|
||||||
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
|
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
|
||||||
engines: {node: '>= 6'}
|
engines: {node: '>= 6'}
|
||||||
@@ -1905,25 +1842,6 @@ packages:
|
|||||||
function-bind: 1.1.1
|
function-bind: 1.1.1
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/he@1.2.0:
|
|
||||||
resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
|
|
||||||
hasBin: true
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/html-minifier@4.0.0:
|
|
||||||
resolution: {integrity: sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==}
|
|
||||||
engines: {node: '>=6'}
|
|
||||||
hasBin: true
|
|
||||||
dependencies:
|
|
||||||
camel-case: 3.0.0
|
|
||||||
clean-css: 4.2.4
|
|
||||||
commander: 2.20.3
|
|
||||||
he: 1.2.0
|
|
||||||
param-case: 2.1.1
|
|
||||||
relateurl: 0.2.7
|
|
||||||
uglify-js: 3.17.4
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/http-cache-semantics@4.1.1:
|
/http-cache-semantics@4.1.1:
|
||||||
resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
|
resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
|
||||||
dev: true
|
dev: true
|
||||||
@@ -2481,10 +2399,6 @@ packages:
|
|||||||
is-unicode-supported: 1.3.0
|
is-unicode-supported: 1.3.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/lower-case@1.1.4:
|
|
||||||
resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==}
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/lowercase-keys@3.0.0:
|
/lowercase-keys@3.0.0:
|
||||||
resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==}
|
resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==}
|
||||||
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||||
@@ -2647,12 +2561,6 @@ packages:
|
|||||||
resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==}
|
resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/no-case@2.3.2:
|
|
||||||
resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==}
|
|
||||||
dependencies:
|
|
||||||
lower-case: 1.1.4
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/node-domexception@1.0.0:
|
/node-domexception@1.0.0:
|
||||||
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
|
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
|
||||||
engines: {node: '>=10.5.0'}
|
engines: {node: '>=10.5.0'}
|
||||||
@@ -2852,12 +2760,6 @@ packages:
|
|||||||
semver: 7.3.8
|
semver: 7.3.8
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/param-case@2.1.1:
|
|
||||||
resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==}
|
|
||||||
dependencies:
|
|
||||||
no-case: 2.3.2
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/parent-module@1.0.1:
|
/parent-module@1.0.1:
|
||||||
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
|
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
|
||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
@@ -3152,11 +3054,6 @@ packages:
|
|||||||
rc: 1.2.8
|
rc: 1.2.8
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/relateurl@0.2.7:
|
|
||||||
resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==}
|
|
||||||
engines: {node: '>= 0.10'}
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/release-it@15.10.1:
|
/release-it@15.10.1:
|
||||||
resolution: {integrity: sha512-Wkk4aFHSo27vQwHIlcEy77lJwnQlh4UDQckc53gh5tKo7F22mAUEAe8SYQZJcFh7icdkf0OV70onhB1dDmeClA==}
|
resolution: {integrity: sha512-Wkk4aFHSo27vQwHIlcEy77lJwnQlh4UDQckc53gh5tKo7F22mAUEAe8SYQZJcFh7icdkf0OV70onhB1dDmeClA==}
|
||||||
engines: {node: '>=14.9'}
|
engines: {node: '>=14.9'}
|
||||||
@@ -3728,7 +3625,9 @@ packages:
|
|||||||
resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==}
|
resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==}
|
||||||
engines: {node: '>=0.8.0'}
|
engines: {node: '>=0.8.0'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
requiresBuild: true
|
||||||
dev: true
|
dev: true
|
||||||
|
optional: true
|
||||||
|
|
||||||
/unbox-primitive@1.0.2:
|
/unbox-primitive@1.0.2:
|
||||||
resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
|
resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
|
||||||
@@ -3796,10 +3695,6 @@ packages:
|
|||||||
xdg-basedir: 5.1.0
|
xdg-basedir: 5.1.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/upper-case@1.1.3:
|
|
||||||
resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==}
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/url-join@5.0.0:
|
/url-join@5.0.0:
|
||||||
resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==}
|
resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==}
|
||||||
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -4,11 +4,13 @@
|
|||||||
|
|
||||||
import { RunnerCardService } from "@odit/lfk-client-js";
|
import { RunnerCardService } from "@odit/lfk-client-js";
|
||||||
import Toastify from "toastify-js";
|
import Toastify from "toastify-js";
|
||||||
|
import { createEventDispatcher } from "svelte";
|
||||||
export let bulk_modal_open;
|
export let bulk_modal_open;
|
||||||
export let current_cards;
|
|
||||||
function focus(el) {
|
function focus(el) {
|
||||||
el.focus();
|
el.focus();
|
||||||
}
|
}
|
||||||
|
const dispatch = createEventDispatcher();
|
||||||
|
|
||||||
$: card_count = 0;
|
$: card_count = 0;
|
||||||
$: is_card_count_valid = card_count > 0;
|
$: is_card_count_valid = card_count > 0;
|
||||||
$: processed_last_submit = true;
|
$: processed_last_submit = true;
|
||||||
@@ -34,7 +36,7 @@
|
|||||||
text: $_("creating-blanco-cards"),
|
text: $_("creating-blanco-cards"),
|
||||||
duration: -1,
|
duration: -1,
|
||||||
}).showToast();
|
}).showToast();
|
||||||
RunnerCardService.runnerCardControllerPostBlancoBulk(card_count, false)
|
RunnerCardService.runnerCardControllerPostBlancoBulk(card_count, true)
|
||||||
.then((result) => {
|
.then((result) => {
|
||||||
bulk_modal_open = false;
|
bulk_modal_open = false;
|
||||||
//
|
//
|
||||||
@@ -43,6 +45,7 @@
|
|||||||
duration: 500,
|
duration: 500,
|
||||||
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
||||||
}).showToast();
|
}).showToast();
|
||||||
|
dispatch("created", {cards: result})
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
//
|
//
|
||||||
@@ -71,11 +74,11 @@
|
|||||||
duration: 500,
|
duration: 500,
|
||||||
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
||||||
}).showToast();
|
}).showToast();
|
||||||
current_cards = current_cards.concat(result);
|
|
||||||
const toast = Toastify({
|
const toast = Toastify({
|
||||||
text: $_("generating-pdf"),
|
text: $_("generating-pdf"),
|
||||||
duration: -1,
|
duration: -1,
|
||||||
}).showToast();
|
}).showToast();
|
||||||
|
dispatch("created", {cards: result})
|
||||||
fetch(
|
fetch(
|
||||||
`${config.baseurl_documentserver}/cards?&download=true&key=${config.documentserver_key}`,
|
`${config.baseurl_documentserver}/cards?&download=true&key=${config.documentserver_key}`,
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import { _ } from "svelte-i18n";
|
import { _ } from "svelte-i18n";
|
||||||
import { clickOutside } from "../base/outsideclick";
|
import { clickOutside } from "../base/outsideclick";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
RunnerCardService,
|
RunnerCardService,
|
||||||
RunnerService,
|
RunnerService,
|
||||||
@@ -9,9 +9,10 @@
|
|||||||
} from "@odit/lfk-client-js";
|
} from "@odit/lfk-client-js";
|
||||||
import Select from "svelte-select";
|
import Select from "svelte-select";
|
||||||
import Toastify from "toastify-js";
|
import Toastify from "toastify-js";
|
||||||
|
import { createEventDispatcher } from "svelte";
|
||||||
export let modal_open;
|
export let modal_open;
|
||||||
export let current_cards;
|
|
||||||
|
|
||||||
|
const dispatch = createEventDispatcher();
|
||||||
const getRunnerLabel = (option) => {
|
const getRunnerLabel = (option) => {
|
||||||
if (option.middlename) {
|
if (option.middlename) {
|
||||||
return option.firstname + " " + option.middlename + " " + option.lastname;
|
return option.firstname + " " + option.middlename + " " + option.lastname;
|
||||||
@@ -21,7 +22,7 @@
|
|||||||
|
|
||||||
const filterRunners = (label, filterText, option) => {
|
const filterRunners = (label, filterText, option) => {
|
||||||
if (filterText.startsWith("#")) {
|
if (filterText.startsWith("#")) {
|
||||||
return option.value.id == parseInt(filterText.replace("#",""))
|
return option.value.id == parseInt(filterText.replace("#", ""));
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
label.toLowerCase().includes(filterText.toLowerCase()) ||
|
label.toLowerCase().includes(filterText.toLowerCase()) ||
|
||||||
@@ -79,8 +80,7 @@
|
|||||||
duration: 500,
|
duration: 500,
|
||||||
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
||||||
}).showToast();
|
}).showToast();
|
||||||
current_cards.push(result);
|
dispatch("created", { cards: [result] });
|
||||||
current_cards = current_cards;
|
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
//
|
//
|
||||||
@@ -97,7 +97,6 @@
|
|||||||
{#if modal_open}
|
{#if modal_open}
|
||||||
<div
|
<div
|
||||||
class="fixed z-10 inset-0 overflow-y-auto"
|
class="fixed z-10 inset-0 overflow-y-auto"
|
||||||
|
|
||||||
use:clickOutside
|
use:clickOutside
|
||||||
on:click_outside={() => {
|
on:click_outside={() => {
|
||||||
modal_open = false;
|
modal_open = false;
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
import Toastify from "toastify-js";
|
import Toastify from "toastify-js";
|
||||||
import { createEventDispatcher } from "svelte";
|
import { createEventDispatcher } from "svelte";
|
||||||
export let edit_modal_open;
|
export let edit_modal_open;
|
||||||
export let current_cards;
|
|
||||||
export let runner = {};
|
export let runner = {};
|
||||||
export let editable = {};
|
export let editable = {};
|
||||||
export let original_data = {};
|
export let original_data = {};
|
||||||
@@ -30,9 +29,6 @@
|
|||||||
$: enabled = true;
|
$: enabled = true;
|
||||||
$: processed_last_submit = true;
|
$: processed_last_submit = true;
|
||||||
const dispatch = createEventDispatcher();
|
const dispatch = createEventDispatcher();
|
||||||
function dataUpdated() {
|
|
||||||
dispatch('dataUpdated',);
|
|
||||||
}
|
|
||||||
RunnerService.runnerControllerGetAll().then((val) => {
|
RunnerService.runnerControllerGetAll().then((val) => {
|
||||||
runners = val.map((r) => {
|
runners = val.map((r) => {
|
||||||
return { label: getRunnerLabel(r), value: r };
|
return { label: getRunnerLabel(r), value: r };
|
||||||
@@ -75,9 +71,7 @@
|
|||||||
duration: 500,
|
duration: 500,
|
||||||
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
||||||
}).showToast();
|
}).showToast();
|
||||||
current_cards[current_cards.findIndex((c) => c.id === id)] = result;
|
dispatch('dataUpdated', {card: result});
|
||||||
current_cards = current_cards;
|
|
||||||
dataUpdated();
|
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
//
|
//
|
||||||
|
|||||||
16
src/components/cards/CardRunner.svelte
Normal file
16
src/components/cards/CardRunner.svelte
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<script>
|
||||||
|
import { _ } from "svelte-i18n";
|
||||||
|
export let runner;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if !runner}
|
||||||
|
{$_("non-blanko")}
|
||||||
|
{:else}
|
||||||
|
<a href={`/runners/${runner.id}`}>
|
||||||
|
{#if runner.middlename}
|
||||||
|
{runner.firstname} {runner.middlename} {runner.lastname}
|
||||||
|
{:else}
|
||||||
|
{runner.firstname} {runner.lastname}
|
||||||
|
{/if}
|
||||||
|
</a>
|
||||||
|
{/if}
|
||||||
16
src/components/cards/CardStatus.svelte
Normal file
16
src/components/cards/CardStatus.svelte
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<script>
|
||||||
|
import { _ } from "svelte-i18n";
|
||||||
|
export let enabled = false;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if enabled}
|
||||||
|
<span
|
||||||
|
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800"
|
||||||
|
>{$_("enabled")}</span
|
||||||
|
>
|
||||||
|
{:else}
|
||||||
|
<span
|
||||||
|
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-red-100 text-red-800"
|
||||||
|
>{$_("disabled")}</span
|
||||||
|
>
|
||||||
|
{/if}
|
||||||
@@ -7,34 +7,48 @@
|
|||||||
$: current_cards = [];
|
$: current_cards = [];
|
||||||
export let modal_open = false;
|
export let modal_open = false;
|
||||||
export let bulk_modal_open = false;
|
export let bulk_modal_open = false;
|
||||||
|
let addCards;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<section class="container p-5">
|
<section class="container p-5">
|
||||||
<span class="mb-1 text-3xl font-extrabold leading-tight">
|
<span class="mb-1 text-3xl font-extrabold leading-tight">
|
||||||
{$_('cards')}
|
{$_("cards")}
|
||||||
{#if store.state.jwtinfo.userdetails.permissions.includes('CARD:CREATE')}
|
{#if store.state.jwtinfo.userdetails.permissions.includes("CARD:CREATE")}
|
||||||
<button
|
<button
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
modal_open = true;
|
modal_open = true;
|
||||||
}}
|
}}
|
||||||
type="button"
|
type="button"
|
||||||
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm">
|
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm"
|
||||||
{$_('add-card')}
|
>
|
||||||
|
{$_("add-card")}
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
bulk_modal_open = true;
|
bulk_modal_open = true;
|
||||||
}}
|
}}
|
||||||
type="button"
|
type="button"
|
||||||
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm">
|
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm"
|
||||||
{$_('create-bulk-cards')}
|
>
|
||||||
|
{$_("create-bulk-cards")}
|
||||||
</button>
|
</button>
|
||||||
{/if}
|
{/if}
|
||||||
</span>
|
</span>
|
||||||
<CardsOverview bind:current_cards />
|
<CardsOverview bind:current_cards bind:addCards />
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{#if store.state.jwtinfo.userdetails.permissions.includes('CARD:CREATE')}
|
{#if store.state.jwtinfo.userdetails.permissions.includes("CARD:CREATE")}
|
||||||
<AddCardModal bind:current_cards bind:modal_open />
|
<AddCardModal
|
||||||
<AddCardBulkModal bind:current_cards bind:bulk_modal_open />
|
bind:modal_open
|
||||||
|
on:created={(event) => {
|
||||||
|
console.log(event)
|
||||||
|
addCards(event.detail.cards);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<AddCardBulkModal
|
||||||
|
bind:bulk_modal_open
|
||||||
|
on:created={(event) => {
|
||||||
|
addCards(event.detail.cards);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -3,35 +3,129 @@
|
|||||||
import { RunnerCardService } from "@odit/lfk-client-js";
|
import { RunnerCardService } from "@odit/lfk-client-js";
|
||||||
import store from "../../store";
|
import store from "../../store";
|
||||||
import Toastify from "toastify-js";
|
import Toastify from "toastify-js";
|
||||||
import { DataHandler, Datatable, Th, ThFilter } from "@vincjo/datatables";
|
|
||||||
import CardsEmptyState from "./CardsEmptyState.svelte";
|
import CardsEmptyState from "./CardsEmptyState.svelte";
|
||||||
import CardDetailModal from "./CardDetailModal.svelte";
|
import CardDetailModal from "./CardDetailModal.svelte";
|
||||||
import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte";
|
import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte";
|
||||||
import ThFilterStatus from "./ThFilterStatus.svelte";
|
import InputElement from "../shared/InputElement.svelte";
|
||||||
import ThFilterRunner from "./ThFilterRunner.svelte";
|
import {
|
||||||
|
createSvelteTable,
|
||||||
|
flexRender,
|
||||||
|
getCoreRowModel,
|
||||||
|
getFilteredRowModel,
|
||||||
|
getPaginationRowModel,
|
||||||
|
getSortedRowModel,
|
||||||
|
renderComponent,
|
||||||
|
} from "@tanstack/svelte-table";
|
||||||
|
import { writable } from "svelte/store";
|
||||||
|
import TableBottom from "../shared/TableBottom.svelte";
|
||||||
|
import TableActions from "../shared/TableActions.svelte";
|
||||||
|
import TableHeader from "../shared/TableHeader.svelte";
|
||||||
|
import CardStatus from "./CardStatus.svelte";
|
||||||
|
import CardRunner from "./CardRunner.svelte";
|
||||||
|
import { onMount } from "svelte";
|
||||||
|
import { runnerFilter, statusFilter } from "../shared/tablefilters";
|
||||||
|
import DeleteCardModal from "./DeleteCardModal.svelte";
|
||||||
|
|
||||||
export let edit_modal_open = false;
|
export let edit_modal_open = false;
|
||||||
export let runner = {};
|
export let runner = {};
|
||||||
export let editable = {};
|
export let editable = {};
|
||||||
export let original_data = {};
|
export let original_data = {};
|
||||||
export let current_cards = [];
|
export let current_cards = [];
|
||||||
const handler = new DataHandler(current_cards, { rowsPerPage: 50 });
|
export const addCards = (cards) => {
|
||||||
const rows = handler.getRows();
|
console.log(cards)
|
||||||
$: active_deletes = [];
|
current_cards = current_cards.concat(...cards);
|
||||||
|
options.update((options) => ({
|
||||||
|
...options,
|
||||||
|
data: current_cards,
|
||||||
|
}));
|
||||||
|
};
|
||||||
|
|
||||||
|
$: dataLoaded = false;
|
||||||
|
$: selected =
|
||||||
|
$table?.getSelectedRowModel().rows.map((row) => row.index) || [];
|
||||||
|
$: selectedCards =
|
||||||
|
$table?.getSelectedRowModel().rows.map((row) => row.original) || [];
|
||||||
|
$: active_delete = undefined;
|
||||||
$: cards_show = generate_cards.length > 0;
|
$: cards_show = generate_cards.length > 0;
|
||||||
$: generate_cards = [];
|
$: generate_cards = [];
|
||||||
const cards_promise = RunnerCardService.runnerCardControllerGetAll().then(
|
|
||||||
(val) => {
|
const columns = [
|
||||||
current_cards = val;
|
{
|
||||||
handler.setRows(val);
|
accessorKey: "code",
|
||||||
}
|
header: () => $_("code"),
|
||||||
);
|
filterFn: `includesString`,
|
||||||
const getRunnerLabel = (option) =>
|
},
|
||||||
option?.firstname +
|
{
|
||||||
" " +
|
accessorKey: "runner",
|
||||||
(option?.middlename || "") +
|
header: () => $_("runner"),
|
||||||
" " +
|
cell: (info) => {
|
||||||
(option?.lastname || "{$_('non-blanko')}");
|
return renderComponent(CardRunner, { runner: info.getValue() });
|
||||||
|
},
|
||||||
|
filterFn: `runner`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: "enabled",
|
||||||
|
cell: (info) => {
|
||||||
|
return renderComponent(CardStatus, { enabled: info.getValue() });
|
||||||
|
},
|
||||||
|
header: () => $_("status"),
|
||||||
|
filterFn: `status`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: "actions",
|
||||||
|
header: () => $_("action"),
|
||||||
|
cell: (info) => {
|
||||||
|
return renderComponent(TableActions, {
|
||||||
|
detailsAction: () => {
|
||||||
|
open_edit_modal(
|
||||||
|
current_cards[
|
||||||
|
current_cards.findIndex((r) => r.id == info.row.original.id)
|
||||||
|
]
|
||||||
|
);
|
||||||
|
},
|
||||||
|
deleteAction: () => {
|
||||||
|
active_delete =
|
||||||
|
current_cards[
|
||||||
|
current_cards.findIndex((r) => r.id == info.row.original.id)
|
||||||
|
];
|
||||||
|
},
|
||||||
|
deleteEnabled:
|
||||||
|
store.state.jwtinfo.userdetails.permissions.includes("CARD:DELETE"),
|
||||||
|
});
|
||||||
|
},
|
||||||
|
enableColumnFilter: false,
|
||||||
|
enableSorting: false,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const options = writable({
|
||||||
|
data: [],
|
||||||
|
columns: columns,
|
||||||
|
initialState: {
|
||||||
|
pagination: {
|
||||||
|
pageSize: 50,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filterFns: {
|
||||||
|
runner: runnerFilter,
|
||||||
|
status: statusFilter,
|
||||||
|
},
|
||||||
|
enableRowSelection: true,
|
||||||
|
getCoreRowModel: getCoreRowModel(),
|
||||||
|
getFilteredRowModel: getFilteredRowModel(),
|
||||||
|
getPaginationRowModel: getPaginationRowModel(),
|
||||||
|
getSortedRowModel: getSortedRowModel(),
|
||||||
|
});
|
||||||
|
|
||||||
|
const table = createSvelteTable(options);
|
||||||
|
|
||||||
function open_edit_modal(card) {
|
function open_edit_modal(card) {
|
||||||
|
const getRunnerLabel = (option) =>
|
||||||
|
option.firstname +
|
||||||
|
" " +
|
||||||
|
(option.middlename || "") +
|
||||||
|
" " +
|
||||||
|
option.lastname;
|
||||||
if (card.runner?.id) {
|
if (card.runner?.id) {
|
||||||
runner = Object.assign(
|
runner = Object.assign(
|
||||||
{ runner },
|
{ runner },
|
||||||
@@ -46,21 +140,61 @@
|
|||||||
original_data = Object.assign(original_data, card);
|
original_data = Object.assign(original_data, card);
|
||||||
edit_modal_open = true;
|
edit_modal_open = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function deleteCard(delete_card_id) {
|
||||||
|
await RunnerCardService.runnerCardControllerRemove(delete_card_id, true);
|
||||||
|
current_cards = current_cards.filter((r) => r.id !== delete_card_id);
|
||||||
|
options.update((options) => ({
|
||||||
|
...options,
|
||||||
|
data: current_cards,
|
||||||
|
}));
|
||||||
|
Toastify({
|
||||||
|
text: $_("card-deleted"),
|
||||||
|
duration: 3500,
|
||||||
|
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
||||||
|
}).showToast();
|
||||||
|
}
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
RunnerCardService.runnerCardControllerGetAll().then((val) => {
|
||||||
|
current_cards = val;
|
||||||
|
options.update((options) => ({
|
||||||
|
...options,
|
||||||
|
data: current_cards,
|
||||||
|
}));
|
||||||
|
dataLoaded = true;
|
||||||
|
});
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if store.state.jwtinfo.userdetails.permissions.includes("CARD:UPDATE")}
|
{#if store.state.jwtinfo.userdetails.permissions.includes("CARD:UPDATE")}
|
||||||
<CardDetailModal
|
<CardDetailModal
|
||||||
bind:current_cards
|
|
||||||
bind:edit_modal_open
|
bind:edit_modal_open
|
||||||
bind:runner
|
bind:runner
|
||||||
bind:editable
|
bind:editable
|
||||||
bind:original_data
|
bind:original_data
|
||||||
on:dataUpdated={handler.setRows(current_cards)}
|
on:dataUpdated={(event) => {
|
||||||
|
current_cards[
|
||||||
|
current_cards.findIndex((c) => c.id === event.detail.card.id)
|
||||||
|
] = event.detail.card;
|
||||||
|
current_cards = current_cards;
|
||||||
|
options.update((options) => ({
|
||||||
|
...options,
|
||||||
|
data: current_cards,
|
||||||
|
}));
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if store.state.jwtinfo.userdetails.permissions.includes("CARD:GET")}
|
{#if store.state.jwtinfo.userdetails.permissions.includes("CARD:GET")}
|
||||||
{#await cards_promise}
|
<DeleteCardModal
|
||||||
|
delete_card={active_delete}
|
||||||
|
modal_open={active_delete != undefined}
|
||||||
|
on:delete={(event) => {
|
||||||
|
deleteCard(event.detail.id);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
{#if !dataLoaded}
|
||||||
<div
|
<div
|
||||||
class="bg-teal-lightest border-t-4 border-teal rounded-b text-teal-darkest px-4 py-3 shadow-md my-2"
|
class="bg-teal-lightest border-t-4 border-teal rounded-b text-teal-darkest px-4 py-3 shadow-md my-2"
|
||||||
role="alert"
|
role="alert"
|
||||||
@@ -68,205 +202,99 @@
|
|||||||
<p class="font-bold">{$_("loading-cards")}</p>
|
<p class="font-bold">{$_("loading-cards")}</p>
|
||||||
<p class="text-sm">{$_("this-might-take-a-moment")}</p>
|
<p class="text-sm">{$_("this-might-take-a-moment")}</p>
|
||||||
</div>
|
</div>
|
||||||
{:then}
|
{:else if current_cards.length === 0}
|
||||||
{#if current_cards.length === 0}
|
<CardsEmptyState />
|
||||||
<CardsEmptyState />
|
{:else}
|
||||||
{:else}
|
<div class="h-12 mt-1">
|
||||||
<div class="h-12 mt-1">
|
{#if selected.length > 0}
|
||||||
{#if cards_show}
|
<button
|
||||||
<button
|
type="button"
|
||||||
type="button"
|
class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm inline-flex"
|
||||||
class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm inline-flex"
|
id="options-menu"
|
||||||
id="options-menu"
|
on:click={async () => {
|
||||||
on:click={async () => {
|
const prom = [];
|
||||||
const prom = [];
|
for (const card of selectedCards) {
|
||||||
for (const card of generate_cards) {
|
prom.push(
|
||||||
prom.push(
|
await RunnerCardService.runnerCardControllerRemove(
|
||||||
RunnerCardService.runnerCardControllerRemove(card.id, true)
|
card.id,
|
||||||
);
|
true
|
||||||
}
|
)
|
||||||
await Promise.all(prom);
|
);
|
||||||
Toastify({
|
}
|
||||||
text: $_("cards-deleted"),
|
await Promise.all(prom);
|
||||||
duration: 3500,
|
for (const card of selectedCards) {
|
||||||
backgroundColor:
|
current_cards = current_cards.filter((r) => r.id !== card.id);
|
||||||
"linear-gradient(to right, #00b09b, #96c93d)",
|
}
|
||||||
}).showToast();
|
options.update((options) => ({
|
||||||
//TODO: Delete cards from table
|
...options,
|
||||||
}}
|
data: current_cards,
|
||||||
|
}));
|
||||||
|
$table.resetRowSelection()
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{$_("delete-cards")}
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
stroke-width="1.5"
|
||||||
|
stroke="currentColor"
|
||||||
|
class="w-5 h-5"
|
||||||
>
|
>
|
||||||
{$_("delete-cards")}
|
<path
|
||||||
<svg
|
stroke-linecap="round"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
stroke-linejoin="round"
|
||||||
fill="none"
|
d="M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0"
|
||||||
viewBox="0 0 24 24"
|
/>
|
||||||
stroke-width="1.5"
|
</svg>
|
||||||
stroke="currentColor"
|
</button>
|
||||||
class="w-5 h-5"
|
{/if}
|
||||||
>
|
<GenerateRunnerCards cards_show={selected.length>0} bind:generate_cards={selectedCards} />
|
||||||
<path
|
</div>
|
||||||
stroke-linecap="round"
|
<div class="overflow-x-auto">
|
||||||
stroke-linejoin="round"
|
<table class="w-full">
|
||||||
d="M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0"
|
<thead>
|
||||||
/>
|
{#each $table.getHeaderGroups() as headerGroup}
|
||||||
</svg>
|
<tr class="select-none">
|
||||||
</button>
|
<th class="inset-y-0 left-0 px-4 py-2 text-left w-px">
|
||||||
{/if}
|
<InputElement
|
||||||
<GenerateRunnerCards bind:cards_show bind:generate_cards />
|
|
||||||
</div>
|
|
||||||
<Datatable {handler}>
|
|
||||||
<table>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th style="border-bottom: 1px solid #ddd;">
|
|
||||||
<input
|
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded"
|
checked={$table.getIsAllRowsSelected()}
|
||||||
checked={generate_cards.length == current_cards.length}
|
indeterminate={$table.getIsSomeRowsSelected()}
|
||||||
on:click={() => {
|
on:change={() => $table.toggleAllRowsSelected()}
|
||||||
if (generate_cards.length != current_cards.length) {
|
|
||||||
generate_cards = current_cards;
|
|
||||||
} else {
|
|
||||||
generate_cards = [];
|
|
||||||
}
|
|
||||||
}}
|
|
||||||
/>
|
/>
|
||||||
</th>
|
</th>
|
||||||
<Th {handler} orderBy="code">{$_("code")}</Th>
|
{#each headerGroup.headers as header}
|
||||||
<Th {handler} orderBy="runner">{$_("runner")}</Th>
|
<TableHeader {header} />
|
||||||
<Th {handler} orderBy="status">{$_("status")}</Th>
|
{/each}
|
||||||
<th style="border-bottom: 1px solid #ddd;">{$_("action")}</th>
|
|
||||||
</tr>
|
</tr>
|
||||||
|
{/each}
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{#each $table.getRowModel().rows as row}
|
||||||
<tr>
|
<tr>
|
||||||
<th style="border-bottom: 1px solid #ddd;" />
|
<td class="inset-y-0 left-0 px-4 py-2 text-center w-px">
|
||||||
<ThFilter {handler} filterBy="code" />
|
<InputElement
|
||||||
<ThFilterRunner {handler} />
|
type="checkbox"
|
||||||
<ThFilterStatus {handler} />
|
checked={row.getIsSelected()}
|
||||||
<th style="border-bottom: 1px solid #ddd;" />
|
on:change={() => row.toggleSelected()}
|
||||||
</tr>
|
/>
|
||||||
</thead>
|
</td>
|
||||||
<tbody>
|
{#each row.getVisibleCells() as cell}
|
||||||
{#each $rows as row}
|
|
||||||
<tr>
|
|
||||||
<td>
|
<td>
|
||||||
<input
|
<svelte:component
|
||||||
type="checkbox"
|
this={flexRender(
|
||||||
class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded"
|
cell.column.columnDef.cell,
|
||||||
checked={generate_cards.filter((i) => i.id == row.id)
|
cell.getContext()
|
||||||
.length > 0}
|
)}
|
||||||
on:click={() => {
|
|
||||||
if (
|
|
||||||
generate_cards.findIndex((i) => i.id == row.id) == -1
|
|
||||||
) {
|
|
||||||
generate_cards.push(row);
|
|
||||||
generate_cards = generate_cards;
|
|
||||||
} else {
|
|
||||||
generate_cards = generate_cards.filter(
|
|
||||||
(r) => r.id != row.id
|
|
||||||
);
|
|
||||||
}
|
|
||||||
console.log(generate_cards);
|
|
||||||
}}
|
|
||||||
/>
|
/>
|
||||||
</td>
|
</td>
|
||||||
<td>{row.code}</td>
|
{/each}
|
||||||
<td>
|
</tr>
|
||||||
{#if row.runner}
|
{/each}
|
||||||
<a
|
</tbody>
|
||||||
href="../runners/{row.runner.id}"
|
</table>
|
||||||
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-gray-100 text-gray-800"
|
|
||||||
>{row.runner.firstname}
|
|
||||||
{row.runner.middlename || ""}
|
|
||||||
{row.runner.lastname}</a
|
|
||||||
>
|
|
||||||
{:else}{$_("non-blanko")}{/if}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{#if row.enabled}
|
|
||||||
<span
|
|
||||||
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800"
|
|
||||||
>{$_("enabled")}</span
|
|
||||||
>
|
|
||||||
{:else}
|
|
||||||
<span
|
|
||||||
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-red-100 text-red-800"
|
|
||||||
>{$_("disabled")}</span
|
|
||||||
>
|
|
||||||
{/if}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{#if active_deletes[row.id] === true}
|
|
||||||
<button
|
|
||||||
on:click={() => {
|
|
||||||
active_deletes[row.id] = false;
|
|
||||||
}}
|
|
||||||
tabindex="0"
|
|
||||||
class="ml-4 text-indigo-600 hover:text-indigo-900 cursor-pointer"
|
|
||||||
>{$_("cancel-delete")}</button
|
|
||||||
>
|
|
||||||
<button
|
|
||||||
on:click={() => {
|
|
||||||
RunnerCardService.runnerCardControllerRemove(
|
|
||||||
row.id,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
.then((resp) => {
|
|
||||||
current_cards = current_cards.filter(
|
|
||||||
(obj) => obj.id !== row.id
|
|
||||||
);
|
|
||||||
})
|
|
||||||
.catch((err) => {});
|
|
||||||
}}
|
|
||||||
tabindex="0"
|
|
||||||
class="ml-4 text-red-600 hover:text-red-900 cursor-pointer"
|
|
||||||
>{$_("confirm-delete")}</button
|
|
||||||
>
|
|
||||||
{:else}
|
|
||||||
<button
|
|
||||||
on:click={() => {
|
|
||||||
open_edit_modal(row);
|
|
||||||
}}
|
|
||||||
class="text-indigo-600 hover:text-indigo-900"
|
|
||||||
>{$_("details")}</button
|
|
||||||
>
|
|
||||||
{#if store.state.jwtinfo.userdetails.permissions.includes("CARD:DELETE")}
|
|
||||||
<button
|
|
||||||
on:click={() => {
|
|
||||||
active_deletes[row.id] = true;
|
|
||||||
}}
|
|
||||||
tabindex="0"
|
|
||||||
class="ml-4 text-red-600 hover:text-red-900 cursor-pointer"
|
|
||||||
>{$_("delete")}</button
|
|
||||||
>
|
|
||||||
{/if}
|
|
||||||
{/if}
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{/each}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</Datatable>
|
|
||||||
{/if}
|
|
||||||
{:catch error}
|
|
||||||
<div class="text-white px-6 py-4 border-0 rounded relative mb-4 bg-red-500">
|
|
||||||
<span class="inline-block align-middle mr-8">
|
|
||||||
<b class="capitalize">{$_("general_promise_error")}</b>
|
|
||||||
{error}
|
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
{/await}
|
<TableBottom {table} {selected} />
|
||||||
|
{/if}
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<style>
|
|
||||||
table tbody {
|
|
||||||
display: block;
|
|
||||||
overflow-y: scroll;
|
|
||||||
}
|
|
||||||
|
|
||||||
table thead,
|
|
||||||
table tbody tr {
|
|
||||||
display: table;
|
|
||||||
width: 100%;
|
|
||||||
table-layout: fixed;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|||||||
128
src/components/cards/DeleteCardModal.svelte
Normal file
128
src/components/cards/DeleteCardModal.svelte
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
<script>
|
||||||
|
import { _ } from "svelte-i18n";
|
||||||
|
import { clickOutside } from "../base/outsideclick";
|
||||||
|
import { createEventDispatcher, onMount } from "svelte";
|
||||||
|
export let modal_open;
|
||||||
|
export let delete_card = {
|
||||||
|
id: 0,
|
||||||
|
code: "",
|
||||||
|
runner: {
|
||||||
|
firstname: "",
|
||||||
|
lastname: "",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const dispatch = createEventDispatcher();
|
||||||
|
onMount(() => {
|
||||||
|
document.onkeydown = (e) => {
|
||||||
|
e = e || window.event;
|
||||||
|
if (e.key === "Escape") {
|
||||||
|
modal_open = false;
|
||||||
|
}
|
||||||
|
if (e.keyCode === 13) {
|
||||||
|
if (createbtnenabled === true) {
|
||||||
|
createbtnenabled = false;
|
||||||
|
submit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
async function submit() {
|
||||||
|
dispatch("delete", { id: delete_card.id });
|
||||||
|
modal_open = false;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if modal_open}
|
||||||
|
<div
|
||||||
|
class="fixed z-10 inset-0 overflow-y-auto"
|
||||||
|
use:clickOutside
|
||||||
|
on:click_outside={() => {
|
||||||
|
modal_open = false;
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0"
|
||||||
|
>
|
||||||
|
<div class="fixed inset-0 transition-opacity" aria-hidden="true">
|
||||||
|
<div
|
||||||
|
class="absolute inset-0 bg-gray-500 opacity-75"
|
||||||
|
data-id="modal_backdrop"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<span
|
||||||
|
class="hidden sm:inline-block sm:align-middle sm:h-screen"
|
||||||
|
aria-hidden="true">​</span
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="inline-block align-bottom bg-white rounded-lg text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full"
|
||||||
|
role="dialog"
|
||||||
|
aria-modal="true"
|
||||||
|
aria-labelledby="modal-headline"
|
||||||
|
>
|
||||||
|
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
|
||||||
|
<div class="sm:flex sm:items-start">
|
||||||
|
<div
|
||||||
|
class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10"
|
||||||
|
>
|
||||||
|
<svg
|
||||||
|
class="h-6 w-6 text-blue-600"
|
||||||
|
fill="currentColor"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
><path fill="none" d="M0 0h24v24H0z" />
|
||||||
|
<path
|
||||||
|
fill="currentColor"
|
||||||
|
d="M22 10v10a1 1 0 01-1 1H3a1 1 0 01-1-1V10h20zm0-2H2V4a1 1 0 011-1h18a1 1 0 011 1v4zm-7 8v2h4v-2h-4z"
|
||||||
|
/></svg
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
|
||||||
|
<h3 class="text-lg leading-6 font-medium text-gray-900">
|
||||||
|
{$_("confirm-delete")}
|
||||||
|
</h3>
|
||||||
|
<div class="mt-2 mb-6">
|
||||||
|
<p class="text-sm text-gray-500">
|
||||||
|
{$_("please-confirm-the-deletion-of-card")}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="w-full">
|
||||||
|
{$_("card")} #{delete_card.code}<br />
|
||||||
|
<span class="inline-block">
|
||||||
|
{$_("runner")}:
|
||||||
|
{#if delete_card.runner}
|
||||||
|
<span class="inline-block"
|
||||||
|
>{delete_card.runner.firstname}
|
||||||
|
{delete_card.runner.lastname}</span
|
||||||
|
>
|
||||||
|
{:else}
|
||||||
|
{$_("non-blanko")}
|
||||||
|
{/if}</span
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse">
|
||||||
|
<button
|
||||||
|
on:click={submit}
|
||||||
|
type="button"
|
||||||
|
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm"
|
||||||
|
>
|
||||||
|
{$_("delete")}
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
on:click={() => {
|
||||||
|
modal_open = false;
|
||||||
|
}}
|
||||||
|
type="button"
|
||||||
|
class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm"
|
||||||
|
>
|
||||||
|
{$_("cancel")}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
bind:value={searchvalue}
|
bind:value={searchvalue}
|
||||||
placeholder={$_('datatable.search')}
|
placeholder={$_('datatable.search')}
|
||||||
aria-label={$_('datatable.search')}
|
aria-label={$_('datatable.search')}
|
||||||
class="gridjs-input gridjs-search-input mb-4" />
|
class="mb-4" />
|
||||||
<div
|
<div
|
||||||
class="shadow border-b border-gray-200 sm:rounded-lg overflow-x-scroll">
|
class="shadow border-b border-gray-200 sm:rounded-lg overflow-x-scroll">
|
||||||
<table class="divide-y divide-gray-200 w-full">
|
<table class="divide-y divide-gray-200 w-full">
|
||||||
|
|||||||
@@ -49,7 +49,7 @@
|
|||||||
bind:value={searchvalue}
|
bind:value={searchvalue}
|
||||||
placeholder={$_('datatable.search')}
|
placeholder={$_('datatable.search')}
|
||||||
aria-label={$_('datatable.search')}
|
aria-label={$_('datatable.search')}
|
||||||
class="gridjs-input gridjs-search-input mb-4" />
|
class="mb-4" />
|
||||||
<div
|
<div
|
||||||
class="shadow border-b border-gray-200 sm:rounded-lg overflow-x-scroll">
|
class="shadow border-b border-gray-200 sm:rounded-lg overflow-x-scroll">
|
||||||
<table class="divide-y divide-gray-200 w-full">
|
<table class="divide-y divide-gray-200 w-full">
|
||||||
|
|||||||
@@ -51,7 +51,7 @@
|
|||||||
bind:value={searchvalue}
|
bind:value={searchvalue}
|
||||||
placeholder={$_('datatable.search')}
|
placeholder={$_('datatable.search')}
|
||||||
aria-label={$_('datatable.search')}
|
aria-label={$_('datatable.search')}
|
||||||
class="gridjs-input gridjs-search-input mb-4" />
|
class="mb-4" />
|
||||||
<div
|
<div
|
||||||
class="shadow border-b border-gray-200 sm:rounded-lg overflow-x-scroll">
|
class="shadow border-b border-gray-200 sm:rounded-lg overflow-x-scroll">
|
||||||
<table class="divide-y divide-gray-200 w-full">
|
<table class="divide-y divide-gray-200 w-full">
|
||||||
@@ -119,7 +119,7 @@
|
|||||||
{/if}
|
{/if}
|
||||||
{#if donor.address.address1 !== null}
|
{#if donor.address.address1 !== null}
|
||||||
{donor.address.address1}<br />
|
{donor.address.address1}<br />
|
||||||
{donor.address.address2 || ''}<br />
|
<!-- {donor.address.address2 || ''}<br /> -->
|
||||||
{donor.address.postalcode}
|
{donor.address.postalcode}
|
||||||
{donor.address.city}
|
{donor.address.city}
|
||||||
{donor.address.country}
|
{donor.address.country}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
bind:value={searchvalue}
|
bind:value={searchvalue}
|
||||||
placeholder={$_('datatable.search')}
|
placeholder={$_('datatable.search')}
|
||||||
aria-label={$_('datatable.search')}
|
aria-label={$_('datatable.search')}
|
||||||
class="gridjs-input gridjs-search-input mb-4" />
|
class="mb-4" />
|
||||||
<div
|
<div
|
||||||
class="shadow border-b border-gray-200 sm:rounded-lg overflow-x-scroll">
|
class="shadow border-b border-gray-200 sm:rounded-lg overflow-x-scroll">
|
||||||
<table class="divide-y divide-gray-200 w-full">
|
<table class="divide-y divide-gray-200 w-full">
|
||||||
|
|||||||
@@ -119,9 +119,9 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
async function copy() {
|
async function copy() {
|
||||||
if(!editable.registrationKey){
|
if (!editable.registrationKey) {
|
||||||
Toastify({
|
Toastify({
|
||||||
text: $_('you-have-to-save-your-changes-to-generate-a-link'),
|
text: $_("you-have-to-save-your-changes-to-generate-a-link"),
|
||||||
duration: 500,
|
duration: 500,
|
||||||
backgroundColor:
|
backgroundColor:
|
||||||
"linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
|
"linear-gradient(90deg, hsla(281, 37%, 45%, 1) 0%, hsla(1, 62%, 48%, 1) 100%)",
|
||||||
@@ -167,7 +167,8 @@
|
|||||||
passed_orgs={[]}
|
passed_orgs={[]}
|
||||||
passed_org={editable}
|
passed_org={editable}
|
||||||
opened_from="OrgDetail"
|
opened_from="OrgDetail"
|
||||||
bind:import_modal_open />
|
bind:import_modal_open
|
||||||
|
/>
|
||||||
<ConfirmOrgDeletion bind:modal_open bind:delete_org />
|
<ConfirmOrgDeletion bind:modal_open bind:delete_org />
|
||||||
{#if data_loaded}
|
{#if data_loaded}
|
||||||
<section class="container p-5">
|
<section class="container p-5">
|
||||||
@@ -176,29 +177,35 @@
|
|||||||
<span data-id="org_actions_${editable.id}">
|
<span data-id="org_actions_${editable.id}">
|
||||||
<GenerateSponsoringContracts
|
<GenerateSponsoringContracts
|
||||||
bind:sponsoring_contracts_show
|
bind:sponsoring_contracts_show
|
||||||
bind:generate_orgs />
|
bind:generate_orgs
|
||||||
|
/>
|
||||||
<GenerateRunnerCards bind:cards_show bind:generate_orgs />
|
<GenerateRunnerCards bind:cards_show bind:generate_orgs />
|
||||||
<GenerateRunnerCertificates bind:certificates_show bind:generate_orgs />
|
<GenerateRunnerCertificates bind:certificates_show bind:generate_orgs />
|
||||||
{#if store.state.jwtinfo.userdetails.permissions.includes('RUNNER:IMPORT')}
|
{#if store.state.jwtinfo.userdetails.permissions.includes("RUNNER:IMPORT")}
|
||||||
<button
|
<button
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
import_modal_open = true;
|
import_modal_open = true;
|
||||||
}}
|
}}
|
||||||
type="button"
|
type="button"
|
||||||
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm">
|
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm"
|
||||||
{$_('import-runners')}
|
>
|
||||||
|
{$_("import-runners")}
|
||||||
</button>
|
</button>
|
||||||
{/if}
|
{/if}
|
||||||
{#if store.state.jwtinfo.userdetails.permissions.includes('RUNNER:DELETE')}
|
{#if store.state.jwtinfo.userdetails.permissions.includes("RUNNER:DELETE")}
|
||||||
{#if delete_triggered}
|
{#if delete_triggered}
|
||||||
<button
|
<button
|
||||||
on:click={deleteOrganization}
|
on:click={deleteOrganization}
|
||||||
class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm">{$_('confirm-delete')}</button>
|
class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm"
|
||||||
|
>{$_("confirm-delete")}</button
|
||||||
|
>
|
||||||
<button
|
<button
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
delete_triggered = !delete_triggered;
|
delete_triggered = !delete_triggered;
|
||||||
}}
|
}}
|
||||||
class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-400 text-base font-medium text-white sm:w-auto sm:text-sm">{$_('cancel')}</button>
|
class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-400 text-base font-medium text-white sm:w-auto sm:text-sm"
|
||||||
|
>{$_("cancel")}</button
|
||||||
|
>
|
||||||
{/if}
|
{/if}
|
||||||
{#if !delete_triggered}
|
{#if !delete_triggered}
|
||||||
<button
|
<button
|
||||||
@@ -206,7 +213,9 @@
|
|||||||
delete_triggered = true;
|
delete_triggered = true;
|
||||||
}}
|
}}
|
||||||
type="button"
|
type="button"
|
||||||
class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm">{$_('delete-organization')}</button>
|
class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm"
|
||||||
|
>{$_("delete-organization")}</button
|
||||||
|
>
|
||||||
{/if}
|
{/if}
|
||||||
{/if}
|
{/if}
|
||||||
{#if !delete_triggered}
|
{#if !delete_triggered}
|
||||||
@@ -215,7 +224,9 @@
|
|||||||
disabled={!save_enabled}
|
disabled={!save_enabled}
|
||||||
class:opacity-50={!save_enabled}
|
class:opacity-50={!save_enabled}
|
||||||
type="button"
|
type="button"
|
||||||
class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm">{$_('save-changes')}</button>
|
class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm"
|
||||||
|
>{$_("save-changes")}</button
|
||||||
|
>
|
||||||
{/if}
|
{/if}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
@@ -234,12 +245,13 @@
|
|||||||
class="h-3 w-3 stroke-current"
|
class="h-3 w-3 stroke-current"
|
||||||
height="1em"
|
height="1em"
|
||||||
width="1em"
|
width="1em"
|
||||||
xmlns="http://www.w3.org/2000/svg"><path
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" />
|
><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" />
|
||||||
<polyline points="9 22 9 12 15 12 15 22" /></svg>
|
<polyline points="9 22 9 12 15 12 15 22" /></svg
|
||||||
|
>
|
||||||
</li>
|
</li>
|
||||||
<li class="flex items-center">
|
<li class="flex items-center">
|
||||||
<a class="mr-2" href="/">{$_('home')}</a><svg
|
<a class="mr-2" href="/">{$_("home")}</a><svg
|
||||||
stroke="currentColor"
|
stroke="currentColor"
|
||||||
fill="none"
|
fill="none"
|
||||||
stroke-width="2"
|
stroke-width="2"
|
||||||
@@ -249,24 +261,25 @@
|
|||||||
class="h-3 w-3 mr-2 stroke-current"
|
class="h-3 w-3 mr-2 stroke-current"
|
||||||
height="1em"
|
height="1em"
|
||||||
width="1em"
|
width="1em"
|
||||||
xmlns="http://www.w3.org/2000/svg"><line
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
x1="5"
|
><line x1="5" y1="12" x2="19" y2="12" />
|
||||||
y1="12"
|
<polyline points="12 5 19 12 12 19" /></svg
|
||||||
x2="19"
|
>
|
||||||
y2="12" />
|
|
||||||
<polyline points="12 5 19 12 12 19" /></svg>
|
|
||||||
</li>
|
</li>
|
||||||
<li class="mr-2 flex items-center">
|
<li class="mr-2 flex items-center">
|
||||||
<svg
|
<svg
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
width="24"
|
width="24"
|
||||||
height="24"><path fill="none" d="M0 0h24v24H0z" />
|
height="24"
|
||||||
|
><path fill="none" d="M0 0h24v24H0z" />
|
||||||
<path
|
<path
|
||||||
d="M21 20h2v2H1v-2h2V3a1 1 0 0 1 1-1h16a1 1 0 0 1 1 1v17zm-2 0V4H5v16h14zM8 11h3v2H8v-2zm0-4h3v2H8V7zm0 8h3v2H8v-2zm5 0h3v2h-3v-2zm0-4h3v2h-3v-2zm0-4h3v2h-3V7z" /></svg>
|
d="M21 20h2v2H1v-2h2V3a1 1 0 0 1 1-1h16a1 1 0 0 1 1 1v17zm-2 0V4H5v16h14zM8 11h3v2H8v-2zm0-4h3v2H8V7zm0 8h3v2H8v-2zm5 0h3v2h-3v-2zm0-4h3v2h-3v-2zm0-4h3v2h-3V7z"
|
||||||
|
/></svg
|
||||||
|
>
|
||||||
</li>
|
</li>
|
||||||
<li class="flex items-center">
|
<li class="flex items-center">
|
||||||
<a class="mr-2" href="./">{$_('organizations')}</a><svg
|
<a class="mr-2" href="./">{$_("organizations")}</a><svg
|
||||||
stroke="currentColor"
|
stroke="currentColor"
|
||||||
fill="none"
|
fill="none"
|
||||||
stroke-width="2"
|
stroke-width="2"
|
||||||
@@ -276,12 +289,10 @@
|
|||||||
class="h-3 w-3 mr-2 stroke-current"
|
class="h-3 w-3 mr-2 stroke-current"
|
||||||
height="1em"
|
height="1em"
|
||||||
width="1em"
|
width="1em"
|
||||||
xmlns="http://www.w3.org/2000/svg"><line
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
x1="5"
|
><line x1="5" y1="12" x2="19" y2="12" />
|
||||||
y1="12"
|
<polyline points="12 5 19 12 12 19" /></svg
|
||||||
x2="19"
|
>
|
||||||
y2="12" />
|
|
||||||
<polyline points="12 5 19 12 12 19" /></svg>
|
|
||||||
</li>
|
</li>
|
||||||
<li class="flex items-center">
|
<li class="flex items-center">
|
||||||
<span class="mr-2">Org-Details #{params.orgid}</span>
|
<span class="mr-2">Org-Details #{params.orgid}</span>
|
||||||
@@ -291,35 +302,34 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-sm w-full">
|
<div class="text-sm w-full">
|
||||||
<label for="name" class="font-medium text-gray-700">{$_('name')}</label>
|
<label for="name" class="font-medium text-gray-700">{$_("name")}</label>
|
||||||
<input
|
<input
|
||||||
autocomplete="off"
|
autocomplete="off"
|
||||||
placeholder={$_('name')}
|
placeholder={$_("name")}
|
||||||
type="text"
|
type="text"
|
||||||
bind:value={editable.name}
|
bind:value={editable.name}
|
||||||
name="name"
|
name="name"
|
||||||
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
|
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-sm w-full">
|
<div class="text-sm w-full">
|
||||||
<label
|
<label for="contact" class="font-medium text-gray-700"
|
||||||
for="contact"
|
>{$_("contact")}</label
|
||||||
class="font-medium text-gray-700">{$_('contact')}</label>
|
>
|
||||||
<Select
|
<Select
|
||||||
containerClasses="rounded-l-md mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2"
|
containerClasses="rounded-l-md mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2"
|
||||||
itemFilter={(label, filterText, option) => label
|
itemFilter={(label, filterText, option) =>
|
||||||
.toLowerCase()
|
label.toLowerCase().includes(filterText.toLowerCase()) ||
|
||||||
.includes(
|
option.value.id.toString().startsWith(filterText.toLowerCase())}
|
||||||
filterText.toLowerCase()
|
|
||||||
) || option.value.id
|
|
||||||
.toString()
|
|
||||||
.startsWith(filterText.toLowerCase())}
|
|
||||||
items={contacts}
|
items={contacts}
|
||||||
showChevron={true}
|
showChevron={true}
|
||||||
placeholder={$_('no-contact-selected')}
|
placeholder={$_("no-contact-selected")}
|
||||||
noOptionsMessage={$_('no-contact-found')}
|
noOptionsMessage={$_("no-contact-found")}
|
||||||
bind:selectedValue={contact}
|
bind:selectedValue={contact}
|
||||||
on:select={(selectedValue) => (editable.contact = selectedValue.detail.value)}
|
on:select={(selectedValue) =>
|
||||||
on:clear={() => (editable.contact = null)} />
|
(editable.contact = selectedValue.detail.value)}
|
||||||
|
on:clear={() => (editable.contact = null)}
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<div class="flex items-start mt-2">
|
<div class="flex items-start mt-2">
|
||||||
@@ -329,43 +339,51 @@
|
|||||||
id="toggle_selfservice_feature"
|
id="toggle_selfservice_feature"
|
||||||
name="toggle_selfservice_feature"
|
name="toggle_selfservice_feature"
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" />
|
class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-3 text-sm">
|
<div class="ml-3 text-sm">
|
||||||
<label
|
<label
|
||||||
for="toggle_selfservice_feature"
|
for="toggle_selfservice_feature"
|
||||||
class="font-medium text-gray-700">{$_('selfservice-registration')}</label>
|
class="font-medium text-gray-700"
|
||||||
|
>{$_("selfservice-registration")}</label
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
{#if editable.registrationEnabled}
|
{#if editable.registrationEnabled}
|
||||||
<div class="text-sm w-full">
|
<div class="text-sm w-full">
|
||||||
<div on:click={copy} class="inline-flex w-full">
|
<button on:click={copy} class="inline-flex w-full">
|
||||||
<p
|
<p
|
||||||
name="token"
|
name="token"
|
||||||
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 p-2">
|
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 p-2"
|
||||||
|
>
|
||||||
{#if editable.registrationKey}
|
{#if editable.registrationKey}
|
||||||
{registrationLink}
|
{registrationLink}
|
||||||
{:else}
|
{:else}
|
||||||
{$_('you-have-to-save-your-changes-to-generate-a-link')}
|
{$_("you-have-to-save-your-changes-to-generate-a-link")}
|
||||||
{/if}
|
{/if}
|
||||||
</p>
|
</p>
|
||||||
<div
|
<div
|
||||||
class="bg-gray-200 border-gray-300 border-t border-b border-r text-black rounded-r-md sm:text-sm p-2 mt-1 cursor-pointer">
|
class="bg-gray-200 border-gray-300 border-t border-b border-r text-black rounded-r-md sm:text-sm p-2 mt-1 cursor-pointer"
|
||||||
|
>
|
||||||
<svg
|
<svg
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
width="24"
|
width="24"
|
||||||
height="24"><path fill="none" d="M0 0h24v24H0z" />
|
height="24"
|
||||||
|
><path fill="none" d="M0 0h24v24H0z" />
|
||||||
<path
|
<path
|
||||||
fill="currentColor"
|
fill="currentColor"
|
||||||
d="M7 4V2h10v2h3l1 1v16a1 1 0 01-1 1H4a1 1 0 01-1-1V5l1-1h3zm0 2H5v14h14V6h-2v2H7V6zm2-2v2h6V4H9z" /></svg>
|
d="M7 4V2h10v2h3l1 1v16a1 1 0 01-1 1H4a1 1 0 01-1-1V5l1-1h3zm0 2H5v14h14V6h-2v2H7V6zm2-2v2h6V4H9z"
|
||||||
|
/></svg
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</button>
|
||||||
{#if editable.registrationKey}
|
{#if editable.registrationKey}
|
||||||
<p class="text-gray-500 text-xs">
|
<p class="text-gray-500 text-xs">
|
||||||
{$_('click-to-copy-the-link-into-your-clipboard')}
|
{$_("click-to-copy-the-link-into-your-clipboard")}
|
||||||
</p>
|
</p>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
@@ -378,12 +396,14 @@
|
|||||||
id="toggle_address_checkbox"
|
id="toggle_address_checkbox"
|
||||||
name="toggle_address_checkbox"
|
name="toggle_address_checkbox"
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" />
|
class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="ml-3 text-sm">
|
<div class="ml-3 text-sm">
|
||||||
<label
|
<label
|
||||||
for="toggle_address_checkbox"
|
for="toggle_address_checkbox"
|
||||||
class="font-medium text-gray-700">{$_('address')}</label>
|
class="font-medium text-gray-700">{$_("address")}</label
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -391,7 +411,9 @@
|
|||||||
<div class="col-span-6">
|
<div class="col-span-6">
|
||||||
<label
|
<label
|
||||||
for="address1"
|
for="address1"
|
||||||
class="block text-sm font-medium text-gray-700">{$_('address')}</label>
|
class="block text-sm font-medium text-gray-700"
|
||||||
|
>{$_("address")}</label
|
||||||
|
>
|
||||||
<input
|
<input
|
||||||
autocomplete="off"
|
autocomplete="off"
|
||||||
placeholder="Address"
|
placeholder="Address"
|
||||||
@@ -401,65 +423,74 @@
|
|||||||
bind:value={editable.address.address1}
|
bind:value={editable.address.address1}
|
||||||
type="text"
|
type="text"
|
||||||
name="address1"
|
name="address1"
|
||||||
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
|
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2"
|
||||||
|
/>
|
||||||
{#if !isAddress1Valid}
|
{#if !isAddress1Valid}
|
||||||
<span
|
<span
|
||||||
class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1">
|
class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1"
|
||||||
{$_('address-is-required')}
|
>
|
||||||
|
{$_("address-is-required")}
|
||||||
</span>
|
</span>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-span-6">
|
<div class="col-span-6">
|
||||||
<label
|
<label
|
||||||
for="address2"
|
for="address2"
|
||||||
class="block text-sm font-medium text-gray-700">{$_('apartment-suite-etc')}</label>
|
class="block text-sm font-medium text-gray-700"
|
||||||
|
>{$_("apartment-suite-etc")}</label
|
||||||
|
>
|
||||||
<input
|
<input
|
||||||
autocomplete="off"
|
autocomplete="off"
|
||||||
placeholder={$_('apartment-suite-etc')}
|
placeholder={$_("apartment-suite-etc")}
|
||||||
bind:value={editable.address.address2}
|
bind:value={editable.address.address2}
|
||||||
type="text"
|
type="text"
|
||||||
name="address2"
|
name="address2"
|
||||||
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
|
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-span-6">
|
<div class="col-span-6">
|
||||||
<label
|
<label for="zipcode" class="block text-sm font-medium text-gray-700"
|
||||||
for="zipcode"
|
>{$_("zip-postal-code")}</label
|
||||||
class="block text-sm font-medium text-gray-700">{$_('zip-postal-code')}</label>
|
>
|
||||||
<input
|
<input
|
||||||
autocomplete="off"
|
autocomplete="off"
|
||||||
placeholder={$_('zip-postal-code')}
|
placeholder={$_("zip-postal-code")}
|
||||||
class:border-red-500={!iszipcodevalid}
|
class:border-red-500={!iszipcodevalid}
|
||||||
class:focus:border-red-500={!iszipcodevalid}
|
class:focus:border-red-500={!iszipcodevalid}
|
||||||
class:focus:ring-red-500={!iszipcodevalid}
|
class:focus:ring-red-500={!iszipcodevalid}
|
||||||
bind:value={editable.address.postalcode}
|
bind:value={editable.address.postalcode}
|
||||||
type="text"
|
type="text"
|
||||||
name="zipcode"
|
name="zipcode"
|
||||||
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
|
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2"
|
||||||
|
/>
|
||||||
{#if !iszipcodevalid}
|
{#if !iszipcodevalid}
|
||||||
<span
|
<span
|
||||||
class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1">
|
class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1"
|
||||||
{$_('valid-zipcode-postal-code-is-required')}
|
>
|
||||||
|
{$_("valid-zipcode-postal-code-is-required")}
|
||||||
</span>
|
</span>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
<div class="col-span-6">
|
<div class="col-span-6">
|
||||||
<label
|
<label for="city" class="block text-sm font-medium text-gray-700"
|
||||||
for="city"
|
>{$_("city")}</label
|
||||||
class="block text-sm font-medium text-gray-700">{$_('city')}</label>
|
>
|
||||||
<input
|
<input
|
||||||
autocomplete="off"
|
autocomplete="off"
|
||||||
placeholder={$_('city')}
|
placeholder={$_("city")}
|
||||||
class:border-red-500={!iscityvalid}
|
class:border-red-500={!iscityvalid}
|
||||||
class:focus:border-red-500={!iscityvalid}
|
class:focus:border-red-500={!iscityvalid}
|
||||||
class:focus:ring-red-500={!iscityvalid}
|
class:focus:ring-red-500={!iscityvalid}
|
||||||
bind:value={editable.address.city}
|
bind:value={editable.address.city}
|
||||||
type="text"
|
type="text"
|
||||||
name="city"
|
name="city"
|
||||||
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2" />
|
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 rounded-md p-2"
|
||||||
|
/>
|
||||||
{#if !iscityvalid}
|
{#if !iscityvalid}
|
||||||
<span
|
<span
|
||||||
class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1">
|
class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1"
|
||||||
{$_('valid-city-is-required')}
|
>
|
||||||
|
{$_("valid-city-is-required")}
|
||||||
</span>
|
</span>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
@@ -469,7 +500,7 @@
|
|||||||
</section>
|
</section>
|
||||||
{:else}
|
{:else}
|
||||||
{#await promise}
|
{#await promise}
|
||||||
{$_('organization-detail-is-being-loaded')}
|
{$_("organization-detail-is-being-loaded")}
|
||||||
{:catch error}
|
{:catch error}
|
||||||
<PromiseError />
|
<PromiseError />
|
||||||
{/await}
|
{/await}
|
||||||
|
|||||||
@@ -51,7 +51,7 @@
|
|||||||
bind:value={searchvalue}
|
bind:value={searchvalue}
|
||||||
placeholder={$_('datatable.search')}
|
placeholder={$_('datatable.search')}
|
||||||
aria-label={$_('datatable.search')}
|
aria-label={$_('datatable.search')}
|
||||||
class="gridjs-input gridjs-search-input mb-4" />
|
class="mb-4" />
|
||||||
<div class="h-12">
|
<div class="h-12">
|
||||||
<GenerateSponsoringContracts
|
<GenerateSponsoringContracts
|
||||||
bind:sponsoring_contracts_show
|
bind:sponsoring_contracts_show
|
||||||
@@ -132,7 +132,7 @@
|
|||||||
<div class="text-sm font-medium text-gray-900">
|
<div class="text-sm font-medium text-gray-900">
|
||||||
{#if o.address.address1 !== null}
|
{#if o.address.address1 !== null}
|
||||||
{o.address.address1}<br />
|
{o.address.address1}<br />
|
||||||
{o.address.address2 || ''}<br />
|
<!-- {o.address.address2 || ''}<br /> -->
|
||||||
{o.address.postalcode}
|
{o.address.postalcode}
|
||||||
{o.address.city}
|
{o.address.city}
|
||||||
{o.address.country}
|
{o.address.country}
|
||||||
|
|||||||
@@ -1,30 +0,0 @@
|
|||||||
<script>
|
|
||||||
import { _, json } from "svelte-i18n";
|
|
||||||
import { getlang } from "./datatable_i18n";
|
|
||||||
import { Grid } from "gridjs";
|
|
||||||
//
|
|
||||||
let table;
|
|
||||||
const datatable = new Grid({
|
|
||||||
columns: ["Name", "Email", "Phone Number"],
|
|
||||||
language: getlang($json("datatable")),
|
|
||||||
sort: true,
|
|
||||||
search: { enabled: true },
|
|
||||||
data: [
|
|
||||||
["John", "john@example.com", "(353) 01 222 3333"],
|
|
||||||
["Mark", "mark@gmail.com", "(01) 22 888 4444"],
|
|
||||||
["Eoin", "eoin@gmail.com", "0097 22 654 00033"],
|
|
||||||
["Sarah", "sarahcdd@gmail.com", "+322 876 1233"],
|
|
||||||
["Afshin", "afshin@mail.com", "(353) 22 87 8356"],
|
|
||||||
],
|
|
||||||
pagination: {
|
|
||||||
enabled: true,
|
|
||||||
limit: 2,
|
|
||||||
summary: false,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
setTimeout(() => {
|
|
||||||
datatable.render(table);
|
|
||||||
}, 0);
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div bind:this={table} />
|
|
||||||
@@ -11,8 +11,10 @@
|
|||||||
import isMobilePhone from "validator/es/lib/isMobilePhone";
|
import isMobilePhone from "validator/es/lib/isMobilePhone";
|
||||||
import Toastify from "toastify-js";
|
import Toastify from "toastify-js";
|
||||||
import Select from "svelte-select";
|
import Select from "svelte-select";
|
||||||
|
import { createEventDispatcher } from "svelte";
|
||||||
|
const dispatch = createEventDispatcher();
|
||||||
|
|
||||||
export let modal_open;
|
export let modal_open;
|
||||||
export let current_runners;
|
|
||||||
$: selected_team = undefined;
|
$: selected_team = undefined;
|
||||||
let firstname_input;
|
let firstname_input;
|
||||||
let lastname_input;
|
let lastname_input;
|
||||||
@@ -107,8 +109,7 @@
|
|||||||
duration: 500,
|
duration: 500,
|
||||||
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
||||||
}).showToast();
|
}).showToast();
|
||||||
current_runners.push(result);
|
dispatch("created", { runners: [result] });
|
||||||
current_runners = current_runners;
|
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
//
|
//
|
||||||
|
|||||||
115
src/components/runners/DeleteRunnerModal.svelte
Normal file
115
src/components/runners/DeleteRunnerModal.svelte
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
<script>
|
||||||
|
import { _ } from "svelte-i18n";
|
||||||
|
import { clickOutside } from "../base/outsideclick";
|
||||||
|
import { createEventDispatcher, onMount } from "svelte";
|
||||||
|
export let modal_open;
|
||||||
|
export let delete_runner = {
|
||||||
|
id: 0,
|
||||||
|
firstname: "",
|
||||||
|
lastname: "",
|
||||||
|
};
|
||||||
|
const dispatch = createEventDispatcher();
|
||||||
|
onMount(() => {
|
||||||
|
document.onkeydown = (e) => {
|
||||||
|
e = e || window.event;
|
||||||
|
if (e.key === "Escape") {
|
||||||
|
modal_open = false;
|
||||||
|
}
|
||||||
|
if (e.keyCode === 13) {
|
||||||
|
if (createbtnenabled === true) {
|
||||||
|
createbtnenabled = false;
|
||||||
|
submit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
async function submit() {
|
||||||
|
dispatch("delete", { id: delete_runner.id });
|
||||||
|
modal_open=false;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if modal_open}
|
||||||
|
<div
|
||||||
|
class="fixed z-10 inset-0 overflow-y-auto"
|
||||||
|
use:clickOutside
|
||||||
|
on:click_outside={() => {
|
||||||
|
modal_open = false;
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0"
|
||||||
|
>
|
||||||
|
<div class="fixed inset-0 transition-opacity" aria-hidden="true">
|
||||||
|
<div
|
||||||
|
class="absolute inset-0 bg-gray-500 opacity-75"
|
||||||
|
data-id="modal_backdrop"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<span
|
||||||
|
class="hidden sm:inline-block sm:align-middle sm:h-screen"
|
||||||
|
aria-hidden="true">​</span
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="inline-block align-bottom bg-white rounded-lg text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full"
|
||||||
|
role="dialog"
|
||||||
|
aria-modal="true"
|
||||||
|
aria-labelledby="modal-headline"
|
||||||
|
>
|
||||||
|
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
|
||||||
|
<div class="sm:flex sm:items-start">
|
||||||
|
<div
|
||||||
|
class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10"
|
||||||
|
>
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
class="h-6 w-6 text-blue-600"
|
||||||
|
fill="currentColor"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
><path fill="none" d="M0 0h24v24H0z" />
|
||||||
|
<path
|
||||||
|
d="M9.83 8.79L8 9.456V13H6V8.05h.015l5.268-1.918c.244-.093.51-.14.782-.131a2.616 2.616 0 0 1 2.427 1.82c.186.583.356.977.51 1.182A4.992 4.992 0 0 0 19 11v2a6.986 6.986 0 0 1-5.402-2.547l-.581 3.297L15 15.67V23h-2v-5.986l-2.05-1.987-.947 4.298-6.894-1.215.348-1.97 4.924.868L9.83 8.79zM13.5 5.5a2 2 0 1 1 0-4 2 2 0 0 1 0 4z"
|
||||||
|
/></svg
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
|
||||||
|
<h3 class="text-lg leading-6 font-medium text-gray-900">
|
||||||
|
{$_("confirm-delete")}
|
||||||
|
</h3>
|
||||||
|
<div class="mt-2 mb-6">
|
||||||
|
<p class="text-sm text-gray-500">
|
||||||
|
{$_("please-confirm-the-deletion-of-runner")}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div class="w-full">
|
||||||
|
<span class="inline-block"
|
||||||
|
>{delete_runner.firstname} {delete_runner.lastname}</span
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse">
|
||||||
|
<button
|
||||||
|
on:click={submit}
|
||||||
|
type="button"
|
||||||
|
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm"
|
||||||
|
>
|
||||||
|
{$_("delete")}
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
on:click={() => {
|
||||||
|
modal_open = false;
|
||||||
|
}}
|
||||||
|
type="button"
|
||||||
|
class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm"
|
||||||
|
>
|
||||||
|
{$_("cancel")}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
@@ -16,7 +16,6 @@
|
|||||||
export let passed_org;
|
export let passed_org;
|
||||||
export let passed_orgs;
|
export let passed_orgs;
|
||||||
export let passed_team;
|
export let passed_team;
|
||||||
export let current_runners;
|
|
||||||
export let import_modal_open;
|
export let import_modal_open;
|
||||||
$: searchvalue = "";
|
$: searchvalue = "";
|
||||||
$: importButtonEnabled =
|
$: importButtonEnabled =
|
||||||
@@ -169,7 +168,7 @@
|
|||||||
mapped
|
mapped
|
||||||
)
|
)
|
||||||
.then((resp) => {
|
.then((resp) => {
|
||||||
current_runners = current_runners.concat(resp);
|
dispatch("created", { runners: resp });
|
||||||
toast.hideToast();
|
toast.hideToast();
|
||||||
recent_processed = true;
|
recent_processed = true;
|
||||||
Toastify({
|
Toastify({
|
||||||
@@ -198,7 +197,7 @@
|
|||||||
mapped
|
mapped
|
||||||
)
|
)
|
||||||
.then((resp) => {
|
.then((resp) => {
|
||||||
current_runners = current_runners.concat(resp);
|
dispatch("created", { runners: resp });
|
||||||
toast.hideToast();
|
toast.hideToast();
|
||||||
recent_processed = true;
|
recent_processed = true;
|
||||||
Toastify({
|
Toastify({
|
||||||
|
|||||||
@@ -7,35 +7,43 @@
|
|||||||
$: current_runners = [];
|
$: current_runners = [];
|
||||||
export let modal_open = false;
|
export let modal_open = false;
|
||||||
export let import_modal_open = false;
|
export let import_modal_open = false;
|
||||||
|
let addRunners;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<section class="container p-5">
|
<section class="container p-5">
|
||||||
<span class="mb-1 text-3xl font-extrabold leading-tight">
|
<span class="mb-1 text-3xl font-extrabold leading-tight">
|
||||||
{$_('runners')}
|
{$_("runners")}
|
||||||
{#if store.state.jwtinfo.userdetails.permissions.includes('RUNNER:CREATE')}
|
{#if store.state.jwtinfo.userdetails.permissions.includes("RUNNER:CREATE")}
|
||||||
<button
|
<button
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
modal_open = true;
|
modal_open = true;
|
||||||
}}
|
}}
|
||||||
type="button"
|
type="button"
|
||||||
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm">
|
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm"
|
||||||
{$_('laeufer-hinzufuegen')}
|
>
|
||||||
|
{$_("laeufer-hinzufuegen")}
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
import_modal_open = true;
|
import_modal_open = true;
|
||||||
}}
|
}}
|
||||||
type="button"
|
type="button"
|
||||||
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm">
|
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm"
|
||||||
{$_('import-runners')}
|
>
|
||||||
|
{$_("import-runners")}
|
||||||
</button>
|
</button>
|
||||||
{/if}
|
{/if}
|
||||||
</span>
|
</span>
|
||||||
<RunnersOverview bind:current_runners />
|
<RunnersOverview bind:current_runners bind:addRunners />
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{#if store.state.jwtinfo.userdetails.permissions.includes('RUNNER:CREATE')}
|
{#if store.state.jwtinfo.userdetails.permissions.includes("RUNNER:CREATE")}
|
||||||
<AddRunnerModal bind:current_runners bind:modal_open />
|
<AddRunnerModal
|
||||||
|
bind:modal_open
|
||||||
|
on:created={(event) => {
|
||||||
|
addRunners(event.detail.runners);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
<ImportRunnerModal
|
<ImportRunnerModal
|
||||||
on:cancelDelete={(event) => {
|
on:cancelDelete={(event) => {
|
||||||
import_modal_open = false;
|
import_modal_open = false;
|
||||||
@@ -43,7 +51,10 @@
|
|||||||
passed_team={{}}
|
passed_team={{}}
|
||||||
passed_orgs={[]}
|
passed_orgs={[]}
|
||||||
passed_org={{}}
|
passed_org={{}}
|
||||||
bind:current_runners
|
|
||||||
opened_from="RunnerOverview"
|
opened_from="RunnerOverview"
|
||||||
bind:import_modal_open />
|
bind:import_modal_open
|
||||||
|
on:created={(event) => {
|
||||||
|
addRunners(event.detail.runners);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
<script>
|
<script>
|
||||||
import { _ } from "svelte-i18n";
|
import {
|
||||||
let tablePageCount = [50, 100, 250, 500];
|
RunnerOrganizationService,
|
||||||
import { writable } from "svelte/store";
|
RunnerService,
|
||||||
|
RunnerTeamService,
|
||||||
|
} from "@odit/lfk-client-js";
|
||||||
import {
|
import {
|
||||||
createSvelteTable,
|
createSvelteTable,
|
||||||
flexRender,
|
flexRender,
|
||||||
@@ -9,8 +11,47 @@
|
|||||||
getFilteredRowModel,
|
getFilteredRowModel,
|
||||||
getPaginationRowModel,
|
getPaginationRowModel,
|
||||||
getSortedRowModel,
|
getSortedRowModel,
|
||||||
|
renderComponent,
|
||||||
} from "@tanstack/svelte-table";
|
} from "@tanstack/svelte-table";
|
||||||
|
import { onMount } from "svelte";
|
||||||
|
import { _ } from "svelte-i18n";
|
||||||
|
import { writable } from "svelte/store";
|
||||||
|
import store from "../../store";
|
||||||
|
import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte";
|
||||||
|
import GenerateRunnerCertificates from "../pdf_generation/GenerateRunnerCertificates.svelte";
|
||||||
|
import GenerateSponsoringContracts from "../pdf_generation/GenerateSponsoringContracts.svelte";
|
||||||
|
import InputElement from "../shared/InputElement.svelte";
|
||||||
|
import TableActions from "../shared/TableActions.svelte";
|
||||||
|
import { groupFilter } from "../shared/tablefilters";
|
||||||
|
import DeleteRunnerModal from "./DeleteRunnerModal.svelte";
|
||||||
|
import Toastify from "toastify-js";
|
||||||
|
import TableBottom from "../shared/TableBottom.svelte";
|
||||||
|
import TableHeader from "../shared/TableHeader.svelte";
|
||||||
|
|
||||||
|
$: selectedRunners =
|
||||||
|
$table?.getSelectedRowModel().rows.map((row) => row.original) || [];
|
||||||
|
$: selected =
|
||||||
|
$table?.getSelectedRowModel().rows.map((row) => row.index) || [];
|
||||||
|
|
||||||
|
$: active_delete = undefined;
|
||||||
|
let dataLoaded = false;
|
||||||
|
export let current_runners = [];
|
||||||
|
$: sponsoring_contracts_show = selected.length > 0;
|
||||||
|
$: cards_show = selected.length > 0;
|
||||||
|
$: certificates_show = selected.length > 0;
|
||||||
|
$: teams = [];
|
||||||
|
$: orgs = [];
|
||||||
|
|
||||||
|
export const addRunners = (runners) => {
|
||||||
|
current_runners = current_runners.concat(...runners);
|
||||||
|
options.update((options) => ({
|
||||||
|
...options,
|
||||||
|
data: current_runners,
|
||||||
|
}));
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//Section table
|
||||||
const columns = [
|
const columns = [
|
||||||
{
|
{
|
||||||
accessorKey: "id",
|
accessorKey: "id",
|
||||||
@@ -19,78 +60,103 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
accessorKey: "firstname",
|
accessorKey: "firstname",
|
||||||
header: () => $_('first-name'),
|
header: () => $_("first-name"),
|
||||||
|
filterFn: `includesString`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: "middlename",
|
||||||
|
header: () => $_("middle-name"),
|
||||||
|
cell: (info) => {
|
||||||
|
if (!info || !info.getValue()) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return info.getValue();
|
||||||
|
},
|
||||||
filterFn: `includesString`,
|
filterFn: `includesString`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
accessorKey: "lastname",
|
accessorKey: "lastname",
|
||||||
header: () => $_('last-name'),
|
header: () => $_("last-name"),
|
||||||
filterFn: `includesString`,
|
filterFn: `includesString`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
accessorKey: "group",
|
accessorKey: "group",
|
||||||
header: () => $_('group'),
|
header: () => $_("group"),
|
||||||
cell: (info) => {
|
cell: (info) => {
|
||||||
const group = info.getValue();
|
const group = info.getValue();
|
||||||
if(group.responseType === "RUNNERORGANIZATION"){return group.name}
|
if (group.responseType === "RUNNERORGANIZATION") {
|
||||||
return `${group.parentGroup.name} > ${group.name}`
|
return group.name;
|
||||||
|
}
|
||||||
|
return `${group.parentGroup.name} > ${group.name}`;
|
||||||
},
|
},
|
||||||
filterFn: `includesString`,
|
filterFn: `group`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
accessorKey: "distance",
|
accessorKey: "distance",
|
||||||
header: () => $_('distance'),
|
header: () => $_("distance"),
|
||||||
cell: (info) => {
|
cell: (info) => {
|
||||||
if(info.getValue() < 1000){return `${info.getValue()} m`}
|
if (info.getValue() < 1000) {
|
||||||
return `${(info.getValue() / 1000).toFixed(1)} km`
|
return `${info.getValue()} m`;
|
||||||
|
}
|
||||||
|
return `${(info.getValue() / 1000).toFixed(1)} km`;
|
||||||
},
|
},
|
||||||
enableColumnFilter: false,
|
enableColumnFilter: false,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
accessorKey: "actions",
|
||||||
|
header: () => $_("action"),
|
||||||
|
cell: (info) => {
|
||||||
|
return renderComponent(TableActions, {
|
||||||
|
detailsLink: `./${info.row.original.id}`,
|
||||||
|
deleteAction: () => {
|
||||||
|
active_delete =
|
||||||
|
current_runners[
|
||||||
|
current_runners.findIndex((r) => r.id == info.row.original.id)
|
||||||
|
];
|
||||||
|
},
|
||||||
|
deleteEnabled:
|
||||||
|
store.state.jwtinfo.userdetails.permissions.includes(
|
||||||
|
"RUNNER:DELETE"
|
||||||
|
),
|
||||||
|
});
|
||||||
|
},
|
||||||
|
enableColumnFilter: false,
|
||||||
|
enableSorting: false,
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
//
|
|
||||||
|
|
||||||
import {
|
|
||||||
RunnerService,
|
|
||||||
RunnerTeamService,
|
|
||||||
RunnerOrganizationService,
|
|
||||||
} from "@odit/lfk-client-js";
|
|
||||||
import store from "../../store";
|
|
||||||
import GenerateSponsoringContracts from "../pdf_generation/GenerateSponsoringContracts.svelte";
|
|
||||||
import GenerateRunnerCards from "../pdf_generation/GenerateRunnerCards.svelte";
|
|
||||||
import GenerateRunnerCertificates from "../pdf_generation/GenerateRunnerCertificates.svelte";
|
|
||||||
import { onMount } from "svelte";
|
|
||||||
$: active_deletes = [];
|
|
||||||
let dataLoaded = false;
|
|
||||||
export let current_runners = [];
|
|
||||||
$: sponsoring_contracts_show = generate_runners.length > 0;
|
|
||||||
$: cards_show = generate_runners.length > 0;
|
|
||||||
$: certificates_show = generate_runners.length > 0;
|
|
||||||
$: generate_runners = []; //current_runners.filter((r) => r.selected === true);
|
|
||||||
$: teams = [];
|
|
||||||
$: orgs = [];
|
|
||||||
$: mappedteams = teams.map(function (g) {
|
|
||||||
return { value: g.id, label: g.parentGroup.name + " > " + g.name };
|
|
||||||
});
|
|
||||||
$: selectgroups = orgs
|
|
||||||
.map(function (g) {
|
|
||||||
return { value: g.id, label: g.name };
|
|
||||||
})
|
|
||||||
.concat(mappedteams);
|
|
||||||
const options = writable({
|
const options = writable({
|
||||||
data: [],
|
data: [],
|
||||||
columns: columns,
|
columns: columns,
|
||||||
|
filterFns: {
|
||||||
|
group: groupFilter,
|
||||||
|
},
|
||||||
initialState: {
|
initialState: {
|
||||||
pagination: {
|
pagination: {
|
||||||
pageSize: tablePageCount[0],
|
pageSize: 50,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
enableRowSelection: true,
|
||||||
getCoreRowModel: getCoreRowModel(),
|
getCoreRowModel: getCoreRowModel(),
|
||||||
getFilteredRowModel: getFilteredRowModel(),
|
getFilteredRowModel: getFilteredRowModel(),
|
||||||
getPaginationRowModel: getPaginationRowModel(),
|
getPaginationRowModel: getPaginationRowModel(),
|
||||||
getSortedRowModel: getSortedRowModel(),
|
getSortedRowModel: getSortedRowModel(),
|
||||||
});
|
});
|
||||||
const table = createSvelteTable(options);
|
const table = createSvelteTable(options);
|
||||||
|
|
||||||
|
async function deleteRunner(delete_runner_id) {
|
||||||
|
await RunnerService.runnerControllerRemove(delete_runner_id, true);
|
||||||
|
current_runners = current_runners.filter((r) => r.id !== delete_runner_id);
|
||||||
|
options.update((options) => ({
|
||||||
|
...options,
|
||||||
|
data: current_runners,
|
||||||
|
}));
|
||||||
|
Toastify({
|
||||||
|
text: $_("runner-deleted"),
|
||||||
|
duration: 3500,
|
||||||
|
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
||||||
|
}).showToast();
|
||||||
|
}
|
||||||
|
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
RunnerService.runnerControllerGetAll().then((val) => {
|
RunnerService.runnerControllerGetAll().then((val) => {
|
||||||
current_runners = val;
|
current_runners = val;
|
||||||
@@ -112,6 +178,13 @@
|
|||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<DeleteRunnerModal
|
||||||
|
delete_runner={active_delete}
|
||||||
|
modal_open={active_delete != undefined}
|
||||||
|
on:delete={(event) => {
|
||||||
|
deleteRunner(event.detail.id);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
{#if store.state.jwtinfo.userdetails.permissions.includes("RUNNER:GET")}
|
{#if store.state.jwtinfo.userdetails.permissions.includes("RUNNER:GET")}
|
||||||
{#if !dataLoaded}
|
{#if !dataLoaded}
|
||||||
<div
|
<div
|
||||||
@@ -122,174 +195,65 @@
|
|||||||
<p class="text-sm">{$_("this-might-take-a-moment")}</p>
|
<p class="text-sm">{$_("this-might-take-a-moment")}</p>
|
||||||
</div>
|
</div>
|
||||||
{:else}
|
{:else}
|
||||||
<div class="h-12">
|
<div class="h-12 mt-2">
|
||||||
<GenerateSponsoringContracts
|
<GenerateSponsoringContracts
|
||||||
bind:sponsoring_contracts_show
|
bind:sponsoring_contracts_show
|
||||||
bind:generate_runners
|
bind:generate_runners={selectedRunners}
|
||||||
|
/>
|
||||||
|
<GenerateRunnerCards
|
||||||
|
bind:cards_show
|
||||||
|
bind:generate_runners={selectedRunners}
|
||||||
/>
|
/>
|
||||||
<GenerateRunnerCards bind:cards_show bind:generate_runners />
|
|
||||||
<GenerateRunnerCertificates
|
<GenerateRunnerCertificates
|
||||||
bind:certificates_show
|
bind:certificates_show
|
||||||
bind:generate_runners
|
bind:generate_runners={selectedRunners}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<table class="w-full">
|
<div class="overflow-x-auto">
|
||||||
<thead>
|
<table class="w-full">
|
||||||
{#each $table.getHeaderGroups() as headerGroup}
|
<thead>
|
||||||
<tr class="select-none">
|
{#each $table.getHeaderGroups() as headerGroup}
|
||||||
{#each headerGroup.headers as header}
|
<tr class="select-none">
|
||||||
<th class="cursor-pointer">
|
<th class="inset-y-0 left-0 px-4 py-2 text-left w-px">
|
||||||
{#if !header.isPlaceholder}
|
<InputElement
|
||||||
<div on:click={header.column.getToggleSortingHandler()}>
|
type="checkbox"
|
||||||
<svelte:component
|
checked={$table.getIsAllRowsSelected()}
|
||||||
this={flexRender(
|
indeterminate={$table.getIsSomeRowsSelected()}
|
||||||
header.column.columnDef.header,
|
on:change={() => $table.toggleAllRowsSelected()}
|
||||||
header.getContext()
|
/>
|
||||||
)}
|
|
||||||
/>
|
|
||||||
{#if header.column.getIsSorted().toString() == "asc"}
|
|
||||||
🔼
|
|
||||||
{:else if header.column.getIsSorted().toString() == "desc"}
|
|
||||||
🔽
|
|
||||||
{/if}
|
|
||||||
</div>
|
|
||||||
{/if}
|
|
||||||
{#if header.column.getCanFilter()}
|
|
||||||
<div class="relative max-w-xs">
|
|
||||||
<input
|
|
||||||
title="name-search"
|
|
||||||
value={header.column.getFilterValue() || ""}
|
|
||||||
on:keyup={(e) => {
|
|
||||||
header.column.setFilterValue(e.target.value);
|
|
||||||
}}
|
|
||||||
type="text"
|
|
||||||
class="block rounded-md border-gray-200 py-2 pl-8 text-xs focus:border-blue-500 focus:ring-blue-500"
|
|
||||||
placeholder=""
|
|
||||||
/>
|
|
||||||
<div
|
|
||||||
class="pointer-events-none absolute inset-y-0 left-0 flex items-center pl-2"
|
|
||||||
>
|
|
||||||
<svg
|
|
||||||
class="h-3.5 w-3.5 text-gray-400"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width={16}
|
|
||||||
height={16}
|
|
||||||
fill="currentColor"
|
|
||||||
viewBox="0 0 16 16"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{/if}
|
|
||||||
</th>
|
</th>
|
||||||
{/each}
|
{#each headerGroup.headers as header}
|
||||||
</tr>
|
<TableHeader {header} />
|
||||||
{/each}
|
{/each}
|
||||||
</thead>
|
</tr>
|
||||||
<tbody>
|
{/each}
|
||||||
{#each $table.getRowModel().rows as row}
|
</thead>
|
||||||
<tr>
|
<tbody>
|
||||||
{#each row.getVisibleCells() as cell}
|
{#each $table.getRowModel().rows as row}
|
||||||
<td>
|
<tr>
|
||||||
<svelte:component
|
<td class="inset-y-0 left-0 px-4 py-2 text-center w-px">
|
||||||
this={flexRender(
|
<InputElement
|
||||||
cell.column.columnDef.cell,
|
type="checkbox"
|
||||||
cell.getContext()
|
checked={row.getIsSelected()}
|
||||||
)}
|
on:change={() => row.toggleSelected()}
|
||||||
/>
|
/>
|
||||||
</td>
|
</td>
|
||||||
{/each}
|
{#each row.getVisibleCells() as cell}
|
||||||
</tr>
|
<td>
|
||||||
{/each}
|
<svelte:component
|
||||||
</tbody>
|
this={flexRender(
|
||||||
</table>
|
cell.column.columnDef.cell,
|
||||||
<div class="h-2" />
|
cell.getContext()
|
||||||
<div class="flex items-center gap-2">
|
)}
|
||||||
<button
|
/>
|
||||||
class="border rounded p-1"
|
</td>
|
||||||
on:click={() => $table.setPageIndex(0)}
|
{/each}
|
||||||
disabled={!$table.getCanPreviousPage()}
|
</tr>
|
||||||
>
|
{/each}
|
||||||
{"<<"}
|
</tbody>
|
||||||
</button>
|
</table>
|
||||||
<button
|
|
||||||
class="border rounded p-1"
|
|
||||||
on:click={() => $table.previousPage()}
|
|
||||||
disabled={!$table.getCanPreviousPage()}
|
|
||||||
>
|
|
||||||
{"<"}
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
class="border rounded p-1"
|
|
||||||
on:click={() => $table.nextPage()}
|
|
||||||
disabled={!$table.getCanNextPage()}
|
|
||||||
>
|
|
||||||
{">"}
|
|
||||||
</button>
|
|
||||||
<button
|
|
||||||
class="border rounded p-1"
|
|
||||||
on:click={() => $table.setPageIndex($table.getPageCount() - 1)}
|
|
||||||
disabled={!$table.getCanNextPage()}
|
|
||||||
>
|
|
||||||
{">>"}
|
|
||||||
</button>
|
|
||||||
<span class="flex items-center gap-1">
|
|
||||||
<div>Page</div>
|
|
||||||
<strong>
|
|
||||||
{$table.getState().pagination.pageIndex + 1} of{" "}
|
|
||||||
{$table.getPageCount()}
|
|
||||||
</strong>
|
|
||||||
</span>
|
|
||||||
<span class="flex items-center gap-1">
|
|
||||||
| Go to page:
|
|
||||||
<input
|
|
||||||
type="number"
|
|
||||||
defaultValue={$table.getState().pagination.pageIndex + 1}
|
|
||||||
on:change={(e) => {
|
|
||||||
const page = e.target.value ? Number(e.target.value) - 1 : 0;
|
|
||||||
$table.setPageIndex(page);
|
|
||||||
}}
|
|
||||||
class="border p-1 rounded w-16"
|
|
||||||
/>
|
|
||||||
</span>
|
|
||||||
<select
|
|
||||||
value={$table.getState().pagination.pageSize}
|
|
||||||
on:change={(e) => {
|
|
||||||
const ps = Number(e.target.value);
|
|
||||||
console.log({ ps });
|
|
||||||
$table.setPageSize(Number(e.target.value));
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
{#each tablePageCount as pageSize}
|
|
||||||
<option value={pageSize}>{pageSize}</option>
|
|
||||||
{/each}
|
|
||||||
</select>
|
|
||||||
</div>
|
</div>
|
||||||
<pre>{JSON.stringify($table.getState(), null, 2)}</pre>
|
<div class="h-2" />
|
||||||
{/if}
|
{/if}
|
||||||
{/if}
|
{/if}
|
||||||
|
<TableBottom {table} {selected} />
|
||||||
<style>
|
|
||||||
thead {
|
|
||||||
background: #fff;
|
|
||||||
}
|
|
||||||
thead {
|
|
||||||
position: sticky;
|
|
||||||
inset-block-start: 0;
|
|
||||||
}
|
|
||||||
tbody td {
|
|
||||||
padding: 4px;
|
|
||||||
}
|
|
||||||
tbody tr:nth-child(even) {
|
|
||||||
background: #fafafa;
|
|
||||||
}
|
|
||||||
tbody tr {
|
|
||||||
transition: all, 0.2s;
|
|
||||||
}
|
|
||||||
tbody tr:hover {
|
|
||||||
background: #f5f5f5;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@
|
|||||||
} from "@odit/lfk-client-js";
|
} from "@odit/lfk-client-js";
|
||||||
import Select from "svelte-select";
|
import Select from "svelte-select";
|
||||||
import Toastify from "toastify-js";
|
import Toastify from "toastify-js";
|
||||||
|
import { createEventDispatcher } from "svelte";
|
||||||
export let modal_open;
|
export let modal_open;
|
||||||
export let current_scans;
|
|
||||||
const getRunnerLabel = (option) =>
|
const getRunnerLabel = (option) =>
|
||||||
option.firstname + " " + (option.middlename || "") + " " + option.lastname;
|
option.firstname + " " + (option.middlename || "") + " " + option.lastname;
|
||||||
const filterRunners = (label, filterText, option) =>
|
const filterRunners = (label, filterText, option) =>
|
||||||
@@ -18,6 +18,7 @@
|
|||||||
function focus(el) {
|
function focus(el) {
|
||||||
el.focus();
|
el.focus();
|
||||||
}
|
}
|
||||||
|
const dispatch = createEventDispatcher();
|
||||||
$: runner = 0;
|
$: runner = 0;
|
||||||
$: runners = [];
|
$: runners = [];
|
||||||
RunnerService.runnerControllerGetAll().then((val) => {
|
RunnerService.runnerControllerGetAll().then((val) => {
|
||||||
@@ -63,8 +64,7 @@
|
|||||||
duration: 500,
|
duration: 500,
|
||||||
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
||||||
}).showToast();
|
}).showToast();
|
||||||
current_scans.push(result);
|
dispatch("created", { scans: [result] });
|
||||||
current_scans = current_scans;
|
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
//
|
//
|
||||||
|
|||||||
110
src/components/scans/DeleteScanModal.svelte
Normal file
110
src/components/scans/DeleteScanModal.svelte
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
<script>
|
||||||
|
import { _ } from "svelte-i18n";
|
||||||
|
import { clickOutside } from "../base/outsideclick";
|
||||||
|
import { createEventDispatcher, onMount } from "svelte";
|
||||||
|
export let modal_open;
|
||||||
|
export let delete_scan = {
|
||||||
|
id: 0,
|
||||||
|
runner: {
|
||||||
|
firstname: "",
|
||||||
|
lastname: "",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const dispatch = createEventDispatcher();
|
||||||
|
onMount(() => {
|
||||||
|
document.onkeydown = (e) => {
|
||||||
|
e = e || window.event;
|
||||||
|
if (e.key === "Escape") {
|
||||||
|
modal_open = false;
|
||||||
|
}
|
||||||
|
if (e.keyCode === 13) {
|
||||||
|
if (createbtnenabled === true) {
|
||||||
|
createbtnenabled = false;
|
||||||
|
submit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
async function submit() {
|
||||||
|
dispatch("delete", { id: delete_scan.id });
|
||||||
|
modal_open = false;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if modal_open}
|
||||||
|
<div
|
||||||
|
class="fixed z-10 inset-0 overflow-y-auto"
|
||||||
|
use:clickOutside
|
||||||
|
on:click_outside={() => {
|
||||||
|
modal_open = false;
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0"
|
||||||
|
>
|
||||||
|
<div class="fixed inset-0 transition-opacity" aria-hidden="true">
|
||||||
|
<div
|
||||||
|
class="absolute inset-0 bg-gray-500 opacity-75"
|
||||||
|
data-id="modal_backdrop"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<span
|
||||||
|
class="hidden sm:inline-block sm:align-middle sm:h-screen"
|
||||||
|
aria-hidden="true">​</span
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="inline-block align-bottom bg-white rounded-lg text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full"
|
||||||
|
role="dialog"
|
||||||
|
aria-modal="true"
|
||||||
|
aria-labelledby="modal-headline"
|
||||||
|
>
|
||||||
|
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
|
||||||
|
<div class="sm:flex sm:items-start">
|
||||||
|
<div
|
||||||
|
class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10"
|
||||||
|
>
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
class="h-6 w-6 text-blue-600"
|
||||||
|
fill="currentColor"
|
||||||
|
width="24"
|
||||||
|
height="24"
|
||||||
|
><path fill="none" d="M0 0h24v24H0z" />
|
||||||
|
<path
|
||||||
|
d="M9.83 8.79L8 9.456V13H6V8.05h.015l5.268-1.918c.244-.093.51-.14.782-.131a2.616 2.616 0 0 1 2.427 1.82c.186.583.356.977.51 1.182A4.992 4.992 0 0 0 19 11v2a6.986 6.986 0 0 1-5.402-2.547l-.581 3.297L15 15.67V23h-2v-5.986l-2.05-1.987-.947 4.298-6.894-1.215.348-1.97 4.924.868L9.83 8.79zM13.5 5.5a2 2 0 1 1 0-4 2 2 0 0 1 0 4z"
|
||||||
|
/></svg
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
|
||||||
|
<h3 class="text-lg leading-6 font-medium text-gray-900">
|
||||||
|
{$_("confirm-delete")}
|
||||||
|
</h3>
|
||||||
|
<div class="mt-2 mb-6">
|
||||||
|
{$_("please-confirm-the-deletion-of-scan")} #{delete_scan.id}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse">
|
||||||
|
<button
|
||||||
|
on:click={submit}
|
||||||
|
type="button"
|
||||||
|
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm"
|
||||||
|
>
|
||||||
|
{$_("delete")}
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
on:click={() => {
|
||||||
|
modal_open = false;
|
||||||
|
}}
|
||||||
|
type="button"
|
||||||
|
class="mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm"
|
||||||
|
>
|
||||||
|
{$_("cancel")}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
16
src/components/scans/ScanValid.svelte
Normal file
16
src/components/scans/ScanValid.svelte
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
<script>
|
||||||
|
import { _ } from "svelte-i18n";
|
||||||
|
export let valid = false;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if valid}
|
||||||
|
<span
|
||||||
|
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800"
|
||||||
|
>{$_("valid")}</span
|
||||||
|
>
|
||||||
|
{:else}
|
||||||
|
<span
|
||||||
|
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-red-100 text-red-800"
|
||||||
|
>{$_("invalid")}</span
|
||||||
|
>
|
||||||
|
{/if}
|
||||||
@@ -5,6 +5,7 @@
|
|||||||
import ScansOverview from "./ScansOverview.svelte";
|
import ScansOverview from "./ScansOverview.svelte";
|
||||||
$: current_scans = [];
|
$: current_scans = [];
|
||||||
export let modal_open = false;
|
export let modal_open = false;
|
||||||
|
let addScans;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<section class="container p-5">
|
<section class="container p-5">
|
||||||
@@ -21,9 +22,11 @@
|
|||||||
</button>
|
</button>
|
||||||
{/if}
|
{/if}
|
||||||
</span>
|
</span>
|
||||||
<ScansOverview bind:current_scans />
|
<ScansOverview bind:current_scans bind:addScans />
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{#if store.state.jwtinfo.userdetails.permissions.includes('SCAN:CREATE')}
|
{#if store.state.jwtinfo.userdetails.permissions.includes('SCAN:CREATE')}
|
||||||
<AddScanModal bind:current_scans bind:modal_open />
|
<AddScanModal bind:modal_open on:created={(event)=>{
|
||||||
|
addScans(event.detail.scans)
|
||||||
|
}} />
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -1,21 +1,54 @@
|
|||||||
<script>
|
<script>
|
||||||
import { _ } from "svelte-i18n";
|
import { _ } from "svelte-i18n";
|
||||||
import { DataHandler, Datatable, Th, ThFilter } from "@vincjo/datatables";
|
|
||||||
import { ScanService, TrackService } from "@odit/lfk-client-js";
|
import { ScanService, TrackService } from "@odit/lfk-client-js";
|
||||||
import store from "../../store";
|
import store from "../../store";
|
||||||
|
import {
|
||||||
|
createSvelteTable,
|
||||||
|
flexRender,
|
||||||
|
getCoreRowModel,
|
||||||
|
getFilteredRowModel,
|
||||||
|
getPaginationRowModel,
|
||||||
|
getSortedRowModel,
|
||||||
|
renderComponent,
|
||||||
|
} from "@tanstack/svelte-table";
|
||||||
|
import { onMount } from "svelte";
|
||||||
|
import { writable } from "svelte/store";
|
||||||
import Toastify from "toastify-js";
|
import Toastify from "toastify-js";
|
||||||
|
import TableBottom from "../shared/TableBottom.svelte";
|
||||||
|
import TableHeader from "../shared/TableHeader.svelte";
|
||||||
import ScansEmptyState from "./ScansEmptyState.svelte";
|
import ScansEmptyState from "./ScansEmptyState.svelte";
|
||||||
import ThFilterRunner from "./ThFilterRunner.svelte";
|
import InputElement from "../shared/InputElement.svelte";
|
||||||
import ThFilterTrack from "./ThFilterTrack.svelte";
|
import TableActions from "../shared/TableActions.svelte";
|
||||||
$: active_deletes = [];
|
import { runnerFilter, statusFilter } from "../shared/tablefilters";
|
||||||
|
import CardRunner from "../cards/CardRunner.svelte";
|
||||||
|
import ScanValid from "./ScanValid.svelte";
|
||||||
|
import DeleteScanModal from "./DeleteScanModal.svelte";
|
||||||
|
|
||||||
|
$: selectedScans =
|
||||||
|
$table?.getSelectedRowModel().rows.map((row) => row.original) || [];
|
||||||
|
$: selected =
|
||||||
|
$table?.getSelectedRowModel().rows.map((row) => row.index) || [];
|
||||||
|
|
||||||
|
$: active_delete = undefined;
|
||||||
export let current_scans = [];
|
export let current_scans = [];
|
||||||
const handler = new DataHandler(current_scans, { rowsPerPage: 20 });
|
export const addScans = (scans) => {
|
||||||
const rows = handler.getRows();
|
current_scans = current_scans.concat(...scans);
|
||||||
|
options.update((options) => ({
|
||||||
|
...options,
|
||||||
|
data: current_scans,
|
||||||
|
}));
|
||||||
|
};
|
||||||
|
|
||||||
const scans_promise = ScanService.scanControllerGetAll().then((val) => {
|
const scans_promise = ScanService.scanControllerGetAll().then((val) => {
|
||||||
current_scans = val;
|
current_scans = val;
|
||||||
handler.setRows(val);
|
// handler.setRows(val);
|
||||||
|
current_scans = val;
|
||||||
|
options.update((options) => ({
|
||||||
|
...options,
|
||||||
|
data: current_scans,
|
||||||
|
}));
|
||||||
});
|
});
|
||||||
$: allTracks = [];
|
let allTracks = [];
|
||||||
TrackService.trackControllerGetAll().then((val) => {
|
TrackService.trackControllerGetAll().then((val) => {
|
||||||
allTracks = val;
|
allTracks = val;
|
||||||
});
|
});
|
||||||
@@ -39,8 +72,126 @@
|
|||||||
Math.floor(laptime / 60) * 60
|
Math.floor(laptime / 60) * 60
|
||||||
}`;
|
}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const columns = [
|
||||||
|
{
|
||||||
|
accessorKey: "id",
|
||||||
|
header: () => "id",
|
||||||
|
filterFn: `equalsString`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: "runner",
|
||||||
|
header: () => $_("runner"),
|
||||||
|
cell: (info) => {
|
||||||
|
return renderComponent(CardRunner, { runner: info.getValue() });
|
||||||
|
},
|
||||||
|
filterFn: `runner`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: "lapTime",
|
||||||
|
header: () => $_("laptime"),
|
||||||
|
cell: (info) => {
|
||||||
|
return format_laptime(info.getValue());
|
||||||
|
},
|
||||||
|
enableColumnFilter: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: "timestamp",
|
||||||
|
header: () => $_("timestamp"),
|
||||||
|
cell: (info) => {
|
||||||
|
return (new Date(parseInt(info.getValue())*1000)).toLocaleString()
|
||||||
|
},
|
||||||
|
enableColumnFilter: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: "distance",
|
||||||
|
header: () => $_("distance"),
|
||||||
|
cell: (info) => {
|
||||||
|
if (info.getValue() < 1000) {
|
||||||
|
return `${info.getValue()}m`;
|
||||||
|
}
|
||||||
|
return `${(info.getValue() / 1000).toFixed(1)}km`;
|
||||||
|
},
|
||||||
|
enableColumnFilter: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: "track",
|
||||||
|
header: () => $_("track"),
|
||||||
|
cell: (info) => {
|
||||||
|
const track = info.getValue();
|
||||||
|
return track?.name || "?";
|
||||||
|
},
|
||||||
|
enableColumnFilter: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: "valid",
|
||||||
|
cell: (info) => {
|
||||||
|
return renderComponent(ScanValid, { valid: info.getValue() });
|
||||||
|
},
|
||||||
|
header: () => $_("status"),
|
||||||
|
filterFn: `status`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
accessorKey: "actions",
|
||||||
|
header: () => $_("action"),
|
||||||
|
cell: (info) => {
|
||||||
|
return renderComponent(TableActions, {
|
||||||
|
detailsLink: `./${info.row.original.id}`,
|
||||||
|
deleteAction: () => {
|
||||||
|
active_delete =
|
||||||
|
current_scans[
|
||||||
|
current_scans.findIndex((r) => r.id == info.row.original.id)
|
||||||
|
];
|
||||||
|
},
|
||||||
|
deleteEnabled:
|
||||||
|
store.state.jwtinfo.userdetails.permissions.includes("SCAN:DELETE"),
|
||||||
|
});
|
||||||
|
},
|
||||||
|
enableColumnFilter: false,
|
||||||
|
enableSorting: false,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
const options = writable({
|
||||||
|
data: [],
|
||||||
|
columns: columns,
|
||||||
|
initialState: {
|
||||||
|
pagination: {
|
||||||
|
pageSize: 50,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filterFns: {
|
||||||
|
runner: runnerFilter,
|
||||||
|
status: statusFilter,
|
||||||
|
},
|
||||||
|
enableRowSelection: true,
|
||||||
|
getCoreRowModel: getCoreRowModel(),
|
||||||
|
getFilteredRowModel: getFilteredRowModel(),
|
||||||
|
getPaginationRowModel: getPaginationRowModel(),
|
||||||
|
getSortedRowModel: getSortedRowModel(),
|
||||||
|
});
|
||||||
|
const table = createSvelteTable(options);
|
||||||
|
async function deleteScan(scan_id) {
|
||||||
|
await ScanService.scanControllerRemove(scan_id, true);
|
||||||
|
current_scans = current_scans.filter((r) => r.id !== scan_id);
|
||||||
|
options.update((options) => ({
|
||||||
|
...options,
|
||||||
|
data: current_scans,
|
||||||
|
}));
|
||||||
|
Toastify({
|
||||||
|
text: $_("scan-deleted"),
|
||||||
|
duration: 3500,
|
||||||
|
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
||||||
|
}).showToast();
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<DeleteScanModal
|
||||||
|
delete_scan={active_delete}
|
||||||
|
modal_open={active_delete != undefined}
|
||||||
|
on:delete={(event) => {
|
||||||
|
deleteScan(event.detail.id);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
{#if store.state.jwtinfo.userdetails.permissions.includes("SCAN:GET")}
|
{#if store.state.jwtinfo.userdetails.permissions.includes("SCAN:GET")}
|
||||||
{#await scans_promise}
|
{#await scans_promise}
|
||||||
<div
|
<div
|
||||||
@@ -54,173 +205,94 @@
|
|||||||
{#if current_scans.length === 0}
|
{#if current_scans.length === 0}
|
||||||
<ScansEmptyState />
|
<ScansEmptyState />
|
||||||
{:else}
|
{:else}
|
||||||
<div
|
{#if selected.length > 0}
|
||||||
class="shadow border-b border-gray-200 sm:rounded-lg overflow-x-scroll"
|
<button
|
||||||
>
|
type="button"
|
||||||
<Datatable {handler}>
|
class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm inline-flex"
|
||||||
<table class="divide-y divide-gray-200 w-full">
|
id="options-menu"
|
||||||
<thead class="bg-gray-50">
|
on:click={async () => {
|
||||||
<tr>
|
const prom = [];
|
||||||
<Th {handler} orderBy="id">ID</Th>
|
for (const scan of selectedScans) {
|
||||||
<Th {handler}>
|
prom.push(ScanService.scanControllerRemove(scan.id, true));
|
||||||
{$_("runner")}
|
}
|
||||||
</Th>
|
await Promise.all(prom);
|
||||||
<Th {handler}>
|
for (const scan of selectedScans) {
|
||||||
{$_("distance")}
|
current_scans = current_scans.filter((r) => r.id !== scan.id);
|
||||||
</Th>
|
}
|
||||||
<Th {handler}>
|
options.update((options) => ({
|
||||||
{$_("track")}
|
...options,
|
||||||
</Th>
|
data: current_scans,
|
||||||
<Th {handler}>
|
}));
|
||||||
{$_("laptime")}
|
$table.resetRowSelection();
|
||||||
</Th>
|
Toastify({
|
||||||
<Th {handler}>
|
text: $_("scan-deleted"),
|
||||||
{$_("status")}
|
duration: 3500,
|
||||||
</Th>
|
backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
|
||||||
<th
|
}).showToast();
|
||||||
scope="col"
|
}}
|
||||||
class="relative px-6 py-3"
|
>
|
||||||
style="border-bottom: 1px solid #ddd;"
|
{$_("delete-scans")}
|
||||||
>
|
<svg
|
||||||
{$_("action")}
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
stroke-width="1.5"
|
||||||
|
stroke="currentColor"
|
||||||
|
class="w-5 h-5"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
d="M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
{/if}
|
||||||
|
<div class="overflow-x-auto">
|
||||||
|
<table class="w-full">
|
||||||
|
<thead>
|
||||||
|
{#each $table.getHeaderGroups() as headerGroup}
|
||||||
|
<tr class="select-none">
|
||||||
|
<th class="inset-y-0 left-0 px-4 py-2 text-left w-px">
|
||||||
|
<InputElement
|
||||||
|
type="checkbox"
|
||||||
|
checked={$table.getIsAllRowsSelected()}
|
||||||
|
indeterminate={$table.getIsSomeRowsSelected()}
|
||||||
|
on:change={() => $table.toggleAllRowsSelected()}
|
||||||
|
/>
|
||||||
</th>
|
</th>
|
||||||
|
{#each headerGroup.headers as header}
|
||||||
|
<TableHeader {header} />
|
||||||
|
{/each}
|
||||||
</tr>
|
</tr>
|
||||||
|
{/each}
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{#each $table.getRowModel().rows as row}
|
||||||
<tr>
|
<tr>
|
||||||
<ThFilter {handler} filterBy="id" />
|
<td class="inset-y-0 left-0 px-4 py-2 text-center w-px">
|
||||||
<ThFilterRunner {handler} />
|
<InputElement
|
||||||
<th style="border-bottom: 1px solid #ddd;" />
|
type="checkbox"
|
||||||
<ThFilterTrack tracks={allTracks} {handler} />
|
checked={row.getIsSelected()}
|
||||||
<!-- <th style="border-bottom: 1px solid #ddd;" /> -->
|
on:change={() => row.toggleSelected()}
|
||||||
<th style="border-bottom: 1px solid #ddd;" />
|
/>
|
||||||
<th style="border-bottom: 1px solid #ddd;" />
|
</td>
|
||||||
<!-- TODO: filter status -->
|
{#each row.getVisibleCells() as cell}
|
||||||
<th style="border-bottom: 1px solid #ddd;" />
|
<td>
|
||||||
|
<svelte:component
|
||||||
|
this={flexRender(
|
||||||
|
cell.column.columnDef.cell,
|
||||||
|
cell.getContext()
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
</td>
|
||||||
|
{/each}
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
{/each}
|
||||||
<tbody class="divide-y divide-gray-200">
|
</tbody>
|
||||||
{#each $rows as scan}
|
</table>
|
||||||
<tr data-rowid="scan_{scan.id}">
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-left">
|
|
||||||
<div class="text-sm font-medium text-gray-900">
|
|
||||||
{scan.id}
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap">
|
|
||||||
<div class="flex items-center">
|
|
||||||
<a
|
|
||||||
href="../runners/{scan.runner.id}"
|
|
||||||
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-gray-100 text-gray-800"
|
|
||||||
>{scan.runner.firstname}
|
|
||||||
{scan.runner.middlename || ""}
|
|
||||||
{scan.runner.lastname}</a
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-left">
|
|
||||||
<div class="text-sm font-medium text-gray-900">
|
|
||||||
{#if scan.distance < 1000}
|
|
||||||
{scan.distance}m
|
|
||||||
{:else}{scan.distance / 1000}km{/if}
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-left">
|
|
||||||
<div class="text-sm font-medium text-gray-900">
|
|
||||||
{#if scan.track}
|
|
||||||
<a
|
|
||||||
href="../tracks"
|
|
||||||
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-gray-100 text-gray-800"
|
|
||||||
>{scan.track.name}
|
|
||||||
</a>
|
|
||||||
{/if}
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap text-left">
|
|
||||||
{#if scan.responseType === "TRACKSCAN"}
|
|
||||||
<div class="text-sm font-medium text-gray-900">
|
|
||||||
{format_laptime(scan.lapTime)}
|
|
||||||
</div>
|
|
||||||
{:else}
|
|
||||||
<div class="text-sm font-medium text-gray-900">
|
|
||||||
{$_("scan-with-fixed-distance")}
|
|
||||||
</div>
|
|
||||||
{/if}
|
|
||||||
</td>
|
|
||||||
<td class="px-6 py-4 whitespace-nowrap">
|
|
||||||
<div class="flex items-center">
|
|
||||||
{#if scan.valid}
|
|
||||||
<span
|
|
||||||
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800"
|
|
||||||
>{$_("valid")}</span
|
|
||||||
>
|
|
||||||
{:else}
|
|
||||||
<span
|
|
||||||
class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-red-100 text-red-800"
|
|
||||||
>{$_("invalid")}</span
|
|
||||||
>
|
|
||||||
{/if}
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
|
|
||||||
{#if active_deletes[scan.id] === true}
|
|
||||||
<td
|
|
||||||
class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium"
|
|
||||||
>
|
|
||||||
<button
|
|
||||||
on:click={() => {
|
|
||||||
active_deletes[scan.id] = false;
|
|
||||||
}}
|
|
||||||
tabindex="0"
|
|
||||||
class="ml-4 text-indigo-600 hover:text-indigo-900 cursor-pointer"
|
|
||||||
>{$_("cancel-delete")}</button
|
|
||||||
>
|
|
||||||
<button
|
|
||||||
on:click={() => {
|
|
||||||
ScanService.scanControllerRemove(scan.id, false).then(
|
|
||||||
(resp) => {
|
|
||||||
current_scans = current_scans.filter(
|
|
||||||
(obj) => obj.id !== scan.id
|
|
||||||
);
|
|
||||||
Toastify({
|
|
||||||
text: "Scan deleted",
|
|
||||||
duration: 500,
|
|
||||||
backgroundColor:
|
|
||||||
"linear-gradient(to right, #00b09b, #96c93d)",
|
|
||||||
}).showToast();
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}}
|
|
||||||
tabindex="0"
|
|
||||||
class="ml-4 text-red-600 hover:text-red-900 cursor-pointer"
|
|
||||||
>{$_("confirm-delete")}</button
|
|
||||||
>
|
|
||||||
</td>
|
|
||||||
{:else}
|
|
||||||
<td
|
|
||||||
class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium"
|
|
||||||
>
|
|
||||||
<a
|
|
||||||
href="./{scan.id}"
|
|
||||||
class="text-indigo-600 hover:text-indigo-900"
|
|
||||||
>{$_("details")}</a
|
|
||||||
>
|
|
||||||
{#if store.state.jwtinfo.userdetails.permissions.includes("SCAN:DELETE")}
|
|
||||||
<button
|
|
||||||
on:click={() => {
|
|
||||||
active_deletes[scan.id] = true;
|
|
||||||
}}
|
|
||||||
tabindex="0"
|
|
||||||
class="ml-4 text-red-600 hover:text-red-900 cursor-pointer"
|
|
||||||
>{$_("delete")}</button
|
|
||||||
>
|
|
||||||
{/if}
|
|
||||||
</td>
|
|
||||||
{/if}
|
|
||||||
</tr>
|
|
||||||
{/each}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</Datatable>
|
|
||||||
</div>
|
</div>
|
||||||
|
<TableBottom {table} {selected} />
|
||||||
{/if}
|
{/if}
|
||||||
{:catch error}
|
{:catch error}
|
||||||
<div class="text-white px-6 py-4 border-0 rounded relative mb-4 bg-red-500">
|
<div class="text-white px-6 py-4 border-0 rounded relative mb-4 bg-red-500">
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
dispatch("cancelDelete", { id: delete_station.id });
|
dispatch("cancelDelete", { id: delete_station.id });
|
||||||
}
|
}
|
||||||
function deleteStation() {
|
function deleteStation() {
|
||||||
ScanStationService.donorControllerRemove(
|
ScanStationService.scanStationControllerRemove(
|
||||||
delete_station.id,
|
delete_station.id,
|
||||||
true
|
true
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<script>
|
<script>
|
||||||
import { _ } from "svelte-i18n";
|
import { _ } from "svelte-i18n";
|
||||||
|
|
||||||
import Toastify from "toastify-js";
|
import Toastify from "toastify-js";
|
||||||
import { tick, createEventDispatcher } from "svelte";
|
import { tick, createEventDispatcher } from "svelte";
|
||||||
export let copy_modal_open;
|
export let copy_modal_open;
|
||||||
@@ -46,70 +46,87 @@
|
|||||||
{#if valueCopy != null}
|
{#if valueCopy != null}
|
||||||
<textarea bind:this={areaDom}>{valueCopy}</textarea>
|
<textarea bind:this={areaDom}>{valueCopy}</textarea>
|
||||||
{/if}
|
{/if}
|
||||||
<div class="fixed z-10 inset-0 overflow-y-auto" >
|
<div class="fixed z-10 inset-0 overflow-y-auto">
|
||||||
<div
|
<div
|
||||||
class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
|
class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0"
|
||||||
|
>
|
||||||
<div class="fixed inset-0 transition-opacity" aria-hidden="true">
|
<div class="fixed inset-0 transition-opacity" aria-hidden="true">
|
||||||
<div
|
<div
|
||||||
class="absolute inset-0 bg-gray-500 opacity-75"
|
class="absolute inset-0 bg-gray-500 opacity-75"
|
||||||
data-id="modal_backdrop" />
|
data-id="modal_backdrop"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<span
|
<span
|
||||||
class="hidden sm:inline-block sm:align-middle sm:h-screen"
|
class="hidden sm:inline-block sm:align-middle sm:h-screen"
|
||||||
aria-hidden="true">​</span>
|
aria-hidden="true">​</span
|
||||||
|
>
|
||||||
<div
|
<div
|
||||||
class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full"
|
class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full"
|
||||||
role="dialog"
|
role="dialog"
|
||||||
aria-modal="true"
|
aria-modal="true"
|
||||||
aria-labelledby="modal-headline">
|
aria-labelledby="modal-headline"
|
||||||
|
>
|
||||||
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
|
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
|
||||||
<div class="sm:flex sm:items-start">
|
<div class="sm:flex sm:items-start">
|
||||||
<div
|
<div
|
||||||
class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10">
|
class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10"
|
||||||
|
>
|
||||||
<svg
|
<svg
|
||||||
class="h-6 w-6 text-blue-600"
|
class="h-6 w-6 text-blue-600"
|
||||||
fill="currentColor"
|
fill="currentColor"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z" />
|
viewBox="0 0 24 24"
|
||||||
|
><path fill="none" d="M0 0h24v24H0z" />
|
||||||
<path
|
<path
|
||||||
d="M4 5v11h16V5H4zM2 4a1 1 0 011-1h18a1 1 0 011 1v14H2V4zM1 19h22v2H1v-2z" /></svg>
|
d="M4 5v11h16V5H4zM2 4a1 1 0 011-1h18a1 1 0 011 1v14H2V4zM1 19h22v2H1v-2z"
|
||||||
|
/></svg
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
|
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
|
||||||
<h3 class="text-lg leading-6 font-medium text-gray-900">
|
<h3 class="text-lg leading-6 font-medium text-gray-900">
|
||||||
{$_('token')}
|
{$_("token")}
|
||||||
</h3>
|
</h3>
|
||||||
<div class="mt-2 mb-6">
|
<div class="mt-2 mb-6">
|
||||||
<p class="text-sm text-gray-500">
|
<p class="text-sm text-gray-500">
|
||||||
{$_('the-scanstations-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again')}
|
{$_(
|
||||||
|
"the-scanstations-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again"
|
||||||
|
)}
|
||||||
<br />
|
<br />
|
||||||
{$_('please-copy-the-token-and-store-it-somewhere-save')}
|
{$_("please-copy-the-token-and-store-it-somewhere-save")}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-2 mb-6">
|
<div class="mt-2 mb-6">
|
||||||
<label
|
<label
|
||||||
for="token"
|
for="token"
|
||||||
class="block text-sm font-medium text-gray-700">{$_('token')}</label>
|
class="block text-sm font-medium text-gray-700"
|
||||||
<div on:click={copy} class="inline-flex">
|
>{$_("token")}</label
|
||||||
|
>
|
||||||
|
<button on:click={copy} class="inline-flex">
|
||||||
<p
|
<p
|
||||||
name="token"
|
name="token"
|
||||||
class:bg-green-200={copied}
|
class:bg-green-200={copied}
|
||||||
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 p-2">
|
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 p-2"
|
||||||
|
>
|
||||||
{new_station.key}
|
{new_station.key}
|
||||||
</p>
|
</p>
|
||||||
<div
|
<div
|
||||||
class="bg-gray-200 border-gray-300 border-t border-b border-r text-black rounded-r-md sm:text-sm p-2 mt-1 cursor-pointer">
|
class="bg-gray-200 border-gray-300 border-t border-b border-r text-black rounded-r-md sm:text-sm p-2 mt-1 cursor-pointer"
|
||||||
|
>
|
||||||
<svg
|
<svg
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
width="24"
|
width="24"
|
||||||
height="24"><path fill="none" d="M0 0h24v24H0z" />
|
height="24"
|
||||||
|
><path fill="none" d="M0 0h24v24H0z" />
|
||||||
<path
|
<path
|
||||||
fill="currentColor"
|
fill="currentColor"
|
||||||
d="M7 4V2h10v2h3l1 1v16a1 1 0 01-1 1H4a1 1 0 01-1-1V5l1-1h3zm0 2H5v14h14V6h-2v2H7V6zm2-2v2h6V4H9z" /></svg>
|
d="M7 4V2h10v2h3l1 1v16a1 1 0 01-1 1H4a1 1 0 01-1-1V5l1-1h3zm0 2H5v14h14V6h-2v2H7V6zm2-2v2h6V4H9z"
|
||||||
|
/></svg
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</button>
|
||||||
<p class="text-gray-500 text-xs">
|
<p class="text-gray-500 text-xs">
|
||||||
{$_('click-to-copy-token-to-clipboard')}
|
{$_("click-to-copy-token-to-clipboard")}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -119,8 +136,9 @@
|
|||||||
<button
|
<button
|
||||||
on:click={close}
|
on:click={close}
|
||||||
type="button"
|
type="button"
|
||||||
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-green-500 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm">
|
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-green-500 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm"
|
||||||
{$_('yes-i-copied-the-token')}
|
>
|
||||||
|
{$_("yes-i-copied-the-token")}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -41,7 +41,7 @@
|
|||||||
bind:value={searchvalue}
|
bind:value={searchvalue}
|
||||||
placeholder={$_('datatable.search')}
|
placeholder={$_('datatable.search')}
|
||||||
aria-label={$_('datatable.search')}
|
aria-label={$_('datatable.search')}
|
||||||
class="gridjs-input gridjs-search-input mb-4" />
|
class="mb-4" />
|
||||||
<div
|
<div
|
||||||
class="shadow border-b border-gray-200 sm:rounded-lg overflow-x-scroll">
|
class="shadow border-b border-gray-200 sm:rounded-lg overflow-x-scroll">
|
||||||
<table class="divide-y divide-gray-200 w-full">
|
<table class="divide-y divide-gray-200 w-full">
|
||||||
|
|||||||
20
src/components/shared/InputElement.svelte
Normal file
20
src/components/shared/InputElement.svelte
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
<script>
|
||||||
|
let className = "";
|
||||||
|
export { className as class };
|
||||||
|
|
||||||
|
export let type;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<input
|
||||||
|
class={`border-1 border-stone-300 border rounded-md shadow ${className} ${
|
||||||
|
type === "checkbox" && "w-5 h-5 text-orange-400"
|
||||||
|
}`}
|
||||||
|
{type}
|
||||||
|
{...$$restProps}
|
||||||
|
on:click
|
||||||
|
on:change
|
||||||
|
on:keydown
|
||||||
|
on:keyup
|
||||||
|
on:mouseenter
|
||||||
|
on:mouseleave
|
||||||
|
/>
|
||||||
26
src/components/shared/TableActions.svelte
Normal file
26
src/components/shared/TableActions.svelte
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<script>
|
||||||
|
import { _ } from "svelte-i18n";
|
||||||
|
|
||||||
|
export let detailsLink;
|
||||||
|
export let detailsAction;
|
||||||
|
export let deleteEnabled;
|
||||||
|
export let deleteAction;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#if detailsLink}
|
||||||
|
<a href={detailsLink} class="text-indigo-600 hover:text-indigo-900"
|
||||||
|
>{$_("details")}</a
|
||||||
|
>
|
||||||
|
{:else if detailsAction}
|
||||||
|
<button on:click={detailsAction} class="text-indigo-600 hover:text-indigo-900"
|
||||||
|
>{$_("details")}</button
|
||||||
|
>
|
||||||
|
{/if}
|
||||||
|
{#if deleteEnabled}
|
||||||
|
<button
|
||||||
|
tabindex="0"
|
||||||
|
on:click={deleteAction}
|
||||||
|
class="ml-4 text-red-600 hover:text-red-900 cursor-pointer"
|
||||||
|
>{$_("delete")}</button
|
||||||
|
>
|
||||||
|
{/if}
|
||||||
71
src/components/shared/TableBottom.svelte
Normal file
71
src/components/shared/TableBottom.svelte
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
<script>
|
||||||
|
export let table;
|
||||||
|
export let selected;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="flex items-center gap-2">
|
||||||
|
<button
|
||||||
|
class="border rounded p-1"
|
||||||
|
on:click={() => $table.setPageIndex(0)}
|
||||||
|
disabled={!$table.getCanPreviousPage()}
|
||||||
|
>
|
||||||
|
{"<<"}
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
class="border rounded p-1"
|
||||||
|
on:click={() => $table.previousPage()}
|
||||||
|
disabled={!$table.getCanPreviousPage()}
|
||||||
|
>
|
||||||
|
{"<"}
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
class="border rounded p-1"
|
||||||
|
on:click={() => $table.nextPage()}
|
||||||
|
disabled={!$table.getCanNextPage()}
|
||||||
|
>
|
||||||
|
{">"}
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
class="border rounded p-1"
|
||||||
|
on:click={() => $table.setPageIndex($table.getPageCount() - 1)}
|
||||||
|
disabled={!$table.getCanNextPage()}
|
||||||
|
>
|
||||||
|
{">>"}
|
||||||
|
</button>
|
||||||
|
<span class="flex items-center gap-1">
|
||||||
|
<div>Page</div>
|
||||||
|
<strong>
|
||||||
|
{$table.getState().pagination.pageIndex + 1} of{" "}
|
||||||
|
{$table.getPageCount()}
|
||||||
|
</strong>
|
||||||
|
</span>
|
||||||
|
<span class="flex items-center gap-1">
|
||||||
|
| Go to page:
|
||||||
|
<input
|
||||||
|
type="number"
|
||||||
|
defaultValue={$table.getState().pagination.pageIndex + 1}
|
||||||
|
on:change={(e) => {
|
||||||
|
const page = e.target.value ? Number(e.target.value) - 1 : 0;
|
||||||
|
$table.setPageIndex(page);
|
||||||
|
}}
|
||||||
|
class="border p-1 rounded w-16"
|
||||||
|
/>
|
||||||
|
</span>
|
||||||
|
<select
|
||||||
|
value={$table.getState().pagination.pageSize}
|
||||||
|
on:input={(e) => {
|
||||||
|
const ps = Number(e.target.value);
|
||||||
|
console.log({ ps });
|
||||||
|
$table.setPageSize(Number(e.target.value));
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{#each [25, 50, 100, 250, 500] as pageSize}
|
||||||
|
<option value={pageSize}>{pageSize}</option>
|
||||||
|
{/each}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<!-- <pre>{JSON.stringify($table.getState(), null, 2)}</pre> -->
|
||||||
|
<div>
|
||||||
|
{Object.keys(selected).length} of{" "}
|
||||||
|
{$table.getPreFilteredRowModel().rows.length} Total Rows Selected
|
||||||
|
</div>
|
||||||
57
src/components/shared/TableHeader.svelte
Normal file
57
src/components/shared/TableHeader.svelte
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
<script>
|
||||||
|
import { flexRender } from "@tanstack/svelte-table";
|
||||||
|
export let header;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<th class="cursor-pointer min-w-[5rem]">
|
||||||
|
{#if !header.isPlaceholder}
|
||||||
|
<button
|
||||||
|
class="w-full"
|
||||||
|
tabindex="0"
|
||||||
|
on:click={header.column.getToggleSortingHandler()}
|
||||||
|
>
|
||||||
|
<svelte:component
|
||||||
|
this={flexRender(header.column.columnDef.header, header.getContext())}
|
||||||
|
/>
|
||||||
|
{#if header.column
|
||||||
|
.getIsSorted()
|
||||||
|
.toString() == "asc" && header.column.getCanSort()}
|
||||||
|
🔼
|
||||||
|
{:else if header.column
|
||||||
|
.getIsSorted()
|
||||||
|
.toString() == "desc" && header.column.getCanSort()}
|
||||||
|
🔽
|
||||||
|
{/if}
|
||||||
|
</button>
|
||||||
|
{/if}
|
||||||
|
{#if header.column.getCanFilter()}
|
||||||
|
<div class="relative max-w-xs">
|
||||||
|
<input
|
||||||
|
title="name-search"
|
||||||
|
value={header.column.getFilterValue() || ""}
|
||||||
|
on:keyup={(e) => {
|
||||||
|
header.column.setFilterValue(e.target.value);
|
||||||
|
}}
|
||||||
|
type="text"
|
||||||
|
class="block w-full rounded-md border-gray-200 py-2 pl-8 text-xs focus:border-blue-500 focus:ring-blue-500"
|
||||||
|
placeholder=""
|
||||||
|
/>
|
||||||
|
<div
|
||||||
|
class="pointer-events-none absolute inset-y-0 left-0 flex items-center pl-2"
|
||||||
|
>
|
||||||
|
<svg
|
||||||
|
class="h-3.5 w-3.5 text-gray-400"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width={16}
|
||||||
|
height={16}
|
||||||
|
fill="currentColor"
|
||||||
|
viewBox="0 0 16 16"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001c.03.04.062.078.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1.007 1.007 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
</th>
|
||||||
34
src/components/shared/tablefilters.js
Normal file
34
src/components/shared/tablefilters.js
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
export const groupFilter = (row, columnId, value) => {
|
||||||
|
const group = row.getValue(columnId);
|
||||||
|
if (group.responseType === "RUNNERORGANIZATION") {
|
||||||
|
return group.name.toLowerCase().includes(value.toLowerCase());
|
||||||
|
} else if (value.includes(">")) {
|
||||||
|
return (
|
||||||
|
`${group.parentGroup.name} > ${group.name}`.toLowerCase().includes(value.toLowerCase())
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return (
|
||||||
|
group.name.toLowerCase().includes(value.toLowerCase()) ||
|
||||||
|
group.parentGroup.name.toLowerCase().includes(value.toLowerCase())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
export const runnerFilter = (row, columnId, value) => {
|
||||||
|
const runner = row.getValue(columnId);
|
||||||
|
if(!runner && value == "blanko"){return true}
|
||||||
|
if(!runner){return false}
|
||||||
|
|
||||||
|
if(value.startsWith("#")){
|
||||||
|
return runner.id == value.replace("#","")
|
||||||
|
}
|
||||||
|
|
||||||
|
if(runner.middlename){
|
||||||
|
return `${runner.firstname} ${runner.middlename} ${runner.lastname}`.toLowerCase().includes(value.toLowerCase())
|
||||||
|
}
|
||||||
|
return `${runner.firstname} ${runner.lastname}`.toLowerCase().includes(value.toLowerCase())
|
||||||
|
};
|
||||||
|
|
||||||
|
export const statusFilter = (row, columnId, value) => {
|
||||||
|
const status = row.getValue(columnId);
|
||||||
|
return status.toString().includes(value);
|
||||||
|
};
|
||||||
@@ -1,8 +1,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import { _ } from "svelte-i18n";
|
import { _ } from "svelte-i18n";
|
||||||
import { clickOutside } from "../base/outsideclick";
|
import { clickOutside } from "../base/outsideclick";
|
||||||
|
import { StatsClientService } from "@odit/lfk-client-js";
|
||||||
import { ScanStationService } from "@odit/lfk-client-js";
|
|
||||||
import Toastify from "toastify-js";
|
import Toastify from "toastify-js";
|
||||||
import { createEventDispatcher } from "svelte";
|
import { createEventDispatcher } from "svelte";
|
||||||
export let modal_open;
|
export let modal_open;
|
||||||
@@ -13,10 +12,7 @@
|
|||||||
dispatch("cancelDelete", { id: delete_station.id });
|
dispatch("cancelDelete", { id: delete_station.id });
|
||||||
}
|
}
|
||||||
function deleteClient() {
|
function deleteClient() {
|
||||||
ScanStationService.donorControllerRemove(
|
StatsClientService.statsClientControllerRemove(delete_station.id, true)
|
||||||
delete_station.id,
|
|
||||||
true
|
|
||||||
)
|
|
||||||
.then((resp) => {
|
.then((resp) => {
|
||||||
Toastify({
|
Toastify({
|
||||||
text: $_('statsclient-deleted'),
|
text: $_('statsclient-deleted'),
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<script>
|
<script>
|
||||||
import { _ } from "svelte-i18n";
|
import { _ } from "svelte-i18n";
|
||||||
|
|
||||||
import Toastify from "toastify-js";
|
import Toastify from "toastify-js";
|
||||||
import { tick, createEventDispatcher } from "svelte";
|
import { tick, createEventDispatcher } from "svelte";
|
||||||
export let copy_modal_open;
|
export let copy_modal_open;
|
||||||
@@ -46,70 +46,87 @@
|
|||||||
{#if valueCopy != null}
|
{#if valueCopy != null}
|
||||||
<textarea bind:this={areaDom}>{valueCopy}</textarea>
|
<textarea bind:this={areaDom}>{valueCopy}</textarea>
|
||||||
{/if}
|
{/if}
|
||||||
<div class="fixed z-10 inset-0 overflow-y-auto" >
|
<div class="fixed z-10 inset-0 overflow-y-auto">
|
||||||
<div
|
<div
|
||||||
class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0">
|
class="flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0"
|
||||||
|
>
|
||||||
<div class="fixed inset-0 transition-opacity" aria-hidden="true">
|
<div class="fixed inset-0 transition-opacity" aria-hidden="true">
|
||||||
<div
|
<div
|
||||||
class="absolute inset-0 bg-gray-500 opacity-75"
|
class="absolute inset-0 bg-gray-500 opacity-75"
|
||||||
data-id="modal_backdrop" />
|
data-id="modal_backdrop"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
<span
|
<span
|
||||||
class="hidden sm:inline-block sm:align-middle sm:h-screen"
|
class="hidden sm:inline-block sm:align-middle sm:h-screen"
|
||||||
aria-hidden="true">​</span>
|
aria-hidden="true">​</span
|
||||||
|
>
|
||||||
<div
|
<div
|
||||||
class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full"
|
class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full"
|
||||||
role="dialog"
|
role="dialog"
|
||||||
aria-modal="true"
|
aria-modal="true"
|
||||||
aria-labelledby="modal-headline">
|
aria-labelledby="modal-headline"
|
||||||
|
>
|
||||||
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
|
<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4">
|
||||||
<div class="sm:flex sm:items-start">
|
<div class="sm:flex sm:items-start">
|
||||||
<div
|
<div
|
||||||
class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10">
|
class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10"
|
||||||
|
>
|
||||||
<svg
|
<svg
|
||||||
class="h-6 w-6 text-blue-600"
|
class="h-6 w-6 text-blue-600"
|
||||||
fill="currentColor"
|
fill="currentColor"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z" />
|
viewBox="0 0 24 24"
|
||||||
|
><path fill="none" d="M0 0h24v24H0z" />
|
||||||
<path
|
<path
|
||||||
d="M4 5v11h16V5H4zM2 4a1 1 0 011-1h18a1 1 0 011 1v14H2V4zM1 19h22v2H1v-2z" /></svg>
|
d="M4 5v11h16V5H4zM2 4a1 1 0 011-1h18a1 1 0 011 1v14H2V4zM1 19h22v2H1v-2z"
|
||||||
|
/></svg
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
|
<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left">
|
||||||
<h3 class="text-lg leading-6 font-medium text-gray-900">
|
<h3 class="text-lg leading-6 font-medium text-gray-900">
|
||||||
{$_('token')}
|
{$_("token")}
|
||||||
</h3>
|
</h3>
|
||||||
<div class="mt-2 mb-6">
|
<div class="mt-2 mb-6">
|
||||||
<p class="text-sm text-gray-500">
|
<p class="text-sm text-gray-500">
|
||||||
{$_('the-statsclient-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again')}
|
{$_(
|
||||||
|
"the-statsclient-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again"
|
||||||
|
)}
|
||||||
<br />
|
<br />
|
||||||
{$_('please-copy-the-token-and-store-it-somewhere-save')}
|
{$_("please-copy-the-token-and-store-it-somewhere-save")}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-2 mb-6">
|
<div class="mt-2 mb-6">
|
||||||
<label
|
<label
|
||||||
for="token"
|
for="token"
|
||||||
class="block text-sm font-medium text-gray-700">{$_('token')}</label>
|
class="block text-sm font-medium text-gray-700"
|
||||||
<div on:click={copy} class="inline-flex">
|
>{$_("token")}</label
|
||||||
|
>
|
||||||
|
<button on:click={copy} class="inline-flex">
|
||||||
<p
|
<p
|
||||||
name="token"
|
name="token"
|
||||||
class:bg-green-200={copied}
|
class:bg-green-200={copied}
|
||||||
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 p-2">
|
class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-gray-500 p-2"
|
||||||
|
>
|
||||||
{new_client.key}
|
{new_client.key}
|
||||||
</p>
|
</p>
|
||||||
<div
|
<div
|
||||||
class="bg-gray-200 border-gray-300 border-t border-b border-r text-black rounded-r-md sm:text-sm p-2 mt-1 cursor-pointer">
|
class="bg-gray-200 border-gray-300 border-t border-b border-r text-black rounded-r-md sm:text-sm p-2 mt-1 cursor-pointer"
|
||||||
|
>
|
||||||
<svg
|
<svg
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
width="24"
|
width="24"
|
||||||
height="24"><path fill="none" d="M0 0h24v24H0z" />
|
height="24"
|
||||||
|
><path fill="none" d="M0 0h24v24H0z" />
|
||||||
<path
|
<path
|
||||||
fill="currentColor"
|
fill="currentColor"
|
||||||
d="M7 4V2h10v2h3l1 1v16a1 1 0 01-1 1H4a1 1 0 01-1-1V5l1-1h3zm0 2H5v14h14V6h-2v2H7V6zm2-2v2h6V4H9z" /></svg>
|
d="M7 4V2h10v2h3l1 1v16a1 1 0 01-1 1H4a1 1 0 01-1-1V5l1-1h3zm0 2H5v14h14V6h-2v2H7V6zm2-2v2h6V4H9z"
|
||||||
|
/></svg
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</button>
|
||||||
<p class="text-gray-500 text-xs">
|
<p class="text-gray-500 text-xs">
|
||||||
{$_('click-to-copy-token-to-clipboard')}
|
{$_("click-to-copy-token-to-clipboard")}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -119,8 +136,9 @@
|
|||||||
<button
|
<button
|
||||||
on:click={close}
|
on:click={close}
|
||||||
type="button"
|
type="button"
|
||||||
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-green-500 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm">
|
class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-green-500 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm"
|
||||||
{$_('yes-i-copied-the-token')}
|
>
|
||||||
|
{$_("yes-i-copied-the-token")}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -41,7 +41,7 @@
|
|||||||
bind:value={searchvalue}
|
bind:value={searchvalue}
|
||||||
placeholder={$_('datatable.search')}
|
placeholder={$_('datatable.search')}
|
||||||
aria-label={$_('datatable.search')}
|
aria-label={$_('datatable.search')}
|
||||||
class="gridjs-input gridjs-search-input mb-4" />
|
class="mb-4" />
|
||||||
<div
|
<div
|
||||||
class="shadow border-b border-gray-200 sm:rounded-lg overflow-x-scroll">
|
class="shadow border-b border-gray-200 sm:rounded-lg overflow-x-scroll">
|
||||||
<table class="divide-y divide-gray-200 w-full">
|
<table class="divide-y divide-gray-200 w-full">
|
||||||
|
|||||||
@@ -57,7 +57,7 @@
|
|||||||
bind:value={searchvalue}
|
bind:value={searchvalue}
|
||||||
placeholder={$_('datatable.search')}
|
placeholder={$_('datatable.search')}
|
||||||
aria-label={$_('datatable.search')}
|
aria-label={$_('datatable.search')}
|
||||||
class="gridjs-input gridjs-search-input mb-4" />
|
class="mb-4" />
|
||||||
<div class="h-12">
|
<div class="h-12">
|
||||||
<GenerateSponsoringContracts
|
<GenerateSponsoringContracts
|
||||||
bind:sponsoring_contracts_show
|
bind:sponsoring_contracts_show
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
bind:value={searchvalue}
|
bind:value={searchvalue}
|
||||||
placeholder={$_('datatable.search')}
|
placeholder={$_('datatable.search')}
|
||||||
aria-label={$_('datatable.search')}
|
aria-label={$_('datatable.search')}
|
||||||
class="gridjs-input gridjs-search-input mb-4" />
|
class="mb-4" />
|
||||||
<!-- {/if} -->
|
<!-- {/if} -->
|
||||||
<!-- <button
|
<!-- <button
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
|
|||||||
@@ -1,479 +1,491 @@
|
|||||||
{
|
{
|
||||||
"404message": "Die gesuchte Seite wurde leider nicht gefunden.",
|
"404message": "Die gesuchte Seite wurde leider nicht gefunden.",
|
||||||
"404title": "Fehler 404",
|
"404title": "Fehler 404",
|
||||||
"about": "Über",
|
"about": "Über",
|
||||||
"action": "Aktionen",
|
"action": "Aktionen",
|
||||||
"active": "Aktiv",
|
"active": "Aktiv",
|
||||||
"add-card": "Karte erstellen",
|
"add-card": "Karte erstellen",
|
||||||
"add-donation": "Sponsoring erstellen",
|
"add-donation": "Sponsoring erstellen",
|
||||||
"add-donor": "Sponsor:in erstellen",
|
"add-donor": "Sponsor:in erstellen",
|
||||||
"add-or-update-a-payment": "Zahlung hinzufügen oder bearbeiten",
|
"add-or-update-a-payment": "Zahlung hinzufügen oder bearbeiten",
|
||||||
"add-scan": "Scan erstellen",
|
"add-scan": "Scan erstellen",
|
||||||
"add-the-first-scanstation": "Erstelle deine erste Scannerstation.",
|
"add-the-first-scanstation": "Erstelle deine erste Scannerstation.",
|
||||||
"add-the-first-statsclient": "Erstelle deinen ersten Statsclient.",
|
"add-the-first-statsclient": "Erstelle deinen ersten Statsclient.",
|
||||||
"add-user-group": "Neue Gruppe erstellen",
|
"add-user-group": "Neue Gruppe erstellen",
|
||||||
"add-your-first-card": "Erstelle deine erste Läuferkarte",
|
"add-your-first-card": "Erstelle deine erste Läuferkarte",
|
||||||
"add-your-first-contact": "Erstelle den ersten Kontakt",
|
"add-your-first-contact": "Erstelle den ersten Kontakt",
|
||||||
"add-your-first-donor": "Erstelle die erste Sponsor:in",
|
"add-your-first-donor": "Erstelle die erste Sponsor:in",
|
||||||
"add-your-first-group": "Erstelle die erste Gruppe",
|
"add-your-first-group": "Erstelle die erste Gruppe",
|
||||||
"add-your-first-organization": "Erstelle die erste Organisation",
|
"add-your-first-organization": "Erstelle die erste Organisation",
|
||||||
"add-your-first-runner": "Erstelle die erste Läufer:in",
|
"add-your-first-runner": "Erstelle die erste Läufer:in",
|
||||||
"add-your-first-team": "Erstelle das erste Team",
|
"add-your-first-team": "Erstelle das erste Team",
|
||||||
"add-your-first-track": "Erstelle den ersten Track (Laufstrecke).",
|
"add-your-first-track": "Erstelle den ersten Track (Laufstrecke).",
|
||||||
"add-your-first-user": "Erstelle die erste Benutzer:in",
|
"add-your-first-user": "Erstelle die erste Benutzer:in",
|
||||||
"add-your-fist-donation": "Erstelle dein erstes Sponsoring",
|
"add-your-fist-donation": "Erstelle dein erstes Sponsoring",
|
||||||
"add-your-fist-scan": "Füge deinen ersten Scan hinzu",
|
"add-your-fist-scan": "Füge deinen ersten Scan hinzu",
|
||||||
"adding-card": "Karte wird erstellt",
|
"adding-card": "Karte wird erstellt",
|
||||||
"adding-donation": "Sponsoring wird erstellt...",
|
"adding-donation": "Sponsoring wird erstellt...",
|
||||||
"adding-scan": "Scan wird hinzugefügt",
|
"adding-scan": "Scan wird hinzugefügt",
|
||||||
"address": "Adresse",
|
"address": "Adresse",
|
||||||
"address-is-required": "Du musst eine Adresse angeben",
|
"address-is-required": "Du musst eine Adresse angeben",
|
||||||
"after-deletion-we-cant-restore-your-old-profile": "Nach der Löschung können auch die Admins dein Profil nicht wiederherstellen!",
|
"after-deletion-we-cant-restore-your-old-profile": "Nach der Löschung können auch die Admins dein Profil nicht wiederherstellen!",
|
||||||
"after-the-update-youll-get-logged-out-please-login-with-your-new-password-after-that": "Nach der Änderung wirst du abgemeldet - bitte melde dich dann mit deinem neuen Passwort an.",
|
"after-the-update-youll-get-logged-out-please-login-with-your-new-password-after-that": "Nach der Änderung wirst du abgemeldet - bitte melde dich dann mit deinem neuen Passwort an.",
|
||||||
"all": "Alle",
|
"all": "Alle",
|
||||||
"all-associated-donations-will-get-deleted-as-well": "Alle Sponsorings dieser Sponsor:in werden ebenfalls gelöscht",
|
"all-associated-donations-will-get-deleted-as-well": "Alle Sponsorings dieser Sponsor:in werden ebenfalls gelöscht",
|
||||||
"all-associated-runners-will-be-deleted-too": "Alle zugehörigen Läufer:innen werden auch gelöscht!",
|
"all-associated-runners-will-be-deleted-too": "Alle zugehörigen Läufer:innen werden auch gelöscht!",
|
||||||
"all-associated-teams-and-runners-will-be-deleted-too": "Alle assoziierten Teams und Läufer:innen werden auch gelöscht!",
|
"all-associated-scans-will-get-deleted-as-well": "Alle Scans dieser Station werden ebenfalls gelöscht",
|
||||||
"already-paid": "Bereits bezahlt",
|
"all-associated-teams-and-runners-will-be-deleted-too": "Alle assoziierten Teams und Läufer:innen werden auch gelöscht!",
|
||||||
"amount": "Anzahl",
|
"already-paid": "Bereits bezahlt",
|
||||||
"amount-per-kilometer": "Betrag pro Kilometer",
|
"amount": "Anzahl",
|
||||||
"apartment-suite-etc": "Apartment, Wohnung, etc.",
|
"amount-per-kilometer": "Betrag pro Kilometer",
|
||||||
"application_name": "Lauf für Kaya! - Admin",
|
"apartment-suite-etc": "Apartment, Wohnung, etc.",
|
||||||
"applying-changes": "Änderungen anwenden",
|
"application_name": "Lauf für Kaya! - Admin",
|
||||||
"attention": "Achtung!",
|
"applying-changes": "Änderungen anwenden",
|
||||||
"author": "Autor:in",
|
"attention": "Achtung!",
|
||||||
"bitte-bestaetige-diese-laeufer-fuer-den-import": "Bitte die Läufer:innen für den Import bestätigen.",
|
"author": "Autor:in",
|
||||||
"by": "von",
|
"bitte-bestaetige-diese-laeufer-fuer-den-import": "Bitte die Läufer:innen für den Import bestätigen.",
|
||||||
"cancel": "Abbrechen",
|
"by": "von",
|
||||||
"cancel-delete": "Löschen abbrechen",
|
"cancel": "Abbrechen",
|
||||||
"cancel-keep-donor": "Abbrechen, Sponsor:in behalten",
|
"cancel-delete": "Löschen abbrechen",
|
||||||
"cancel-keep-my-profile": "Abbrechen, mein Profil behalten",
|
"cancel-keep-donor": "Abbrechen, Sponsor:in behalten",
|
||||||
"cancel-keep-organization": "Abbrechen und Organisation bearbeiten",
|
"cancel-keep-my-profile": "Abbrechen, mein Profil behalten",
|
||||||
"cancel-keep-statsclient": "Abbrechen und Statsclient behalten",
|
"cancel-keep-organization": "Abbrechen und Organisation bearbeiten",
|
||||||
"cancel-keep-team": "Abbrechen, Team behalten",
|
"cancel-keep-station": "Abbrechen und Station behalten",
|
||||||
"cannot-reset-your-password-directly": "Schade. \nWir können das Passwort leider nicht direkt zurücksetzen.\nBitte sende uns eine Mail in der du deine Identität bestätigst.",
|
"cancel-keep-statsclient": "Abbrechen und Statsclient behalten",
|
||||||
"card-added": "Karte wurde hinzugefügt",
|
"cancel-keep-team": "Abbrechen, Team behalten",
|
||||||
"card-deleted": "Karte gelöscht",
|
"cannot-reset-your-password-directly": "Schade. \nWir können das Passwort leider nicht direkt zurücksetzen.\nBitte sende uns eine Mail in der du deine Identität bestätigst.",
|
||||||
"card-updated": "Karte aktualisiert",
|
"card": "Läuferkarte",
|
||||||
"cards": "Läuferkarten",
|
"card-added": "Karte wurde hinzugefügt",
|
||||||
"certificates": "Urkunden",
|
"card-deleted": "Karte gelöscht",
|
||||||
"change-your-password-here": "Hier kannst du dein Passwort ändern",
|
"card-updated": "Karte aktualisiert",
|
||||||
"changing-your-password": "Passwort wird geändert",
|
"cards": "Läuferkarten",
|
||||||
"city": "Stadt",
|
"cards-deleted": "Karten gelöscht",
|
||||||
"click-to-copy-the-link-into-your-clipboard": "Klicke auf den Link, um ihn in deine Zwischenablage zu kopieren",
|
"certificates": "Urkunden",
|
||||||
"click-to-copy-token-to-clipboard": "Klicke auf den Token, um ihn in deine Zwischenablage zu kopieren",
|
"change-your-password-here": "Hier kannst du dein Passwort ändern",
|
||||||
"close": "Schließen",
|
"changing-your-password": "Passwort wird geändert",
|
||||||
"code": "Code",
|
"city": "Stadt",
|
||||||
"configure-the-tracks-and-minimum-lap-times": "Bearbeite die Tracks und ihre minimale Rundenzeit",
|
"click-to-copy-the-link-into-your-clipboard": "Klicke auf den Link, um ihn in deine Zwischenablage zu kopieren",
|
||||||
"confirm": "Bestätigen",
|
"click-to-copy-token-to-clipboard": "Klicke auf den Token, um ihn in deine Zwischenablage zu kopieren",
|
||||||
"confirm-delete": "Löschung Bestätigen",
|
"close": "Schließen",
|
||||||
"confirm-delete-donor-with-all-donations": "Bestätigen, Sponsor:in mit allen Sponsorings löschen",
|
"code": "Code",
|
||||||
"confirm-delete-my-user-profile": "Bestätigung, mein Benutzerprofil löschen",
|
"configure-the-tracks-and-minimum-lap-times": "Bearbeite die Tracks und ihre minimale Rundenzeit",
|
||||||
"confirm-delete-organization-and-associated-teams-runners": "Bestätugung, lösche die Organisation und alle zugehörigen Teams und Läufer:innen.",
|
"confirm": "Bestätigen",
|
||||||
"confirm-delete-statsclient": "Bestätigung, Statsclient löschen",
|
"confirm-delete": "Löschung Bestätigen",
|
||||||
"confirm-delete-team-and-associated-runners": "Bestätigung, lösche das Team mitsamt seinen Läufer:innen.",
|
"confirm-delete-donor-with-all-donations": "Bestätigen, Sponsor:in mit allen Sponsorings löschen",
|
||||||
"confirm-deletion": "Löschung Bestätigen",
|
"confirm-delete-my-user-profile": "Bestätigung, mein Benutzerprofil löschen",
|
||||||
"confirm-the-new-password": "Neues Passwort bestätigen",
|
"confirm-delete-organization-and-associated-teams-runners": "Bestätugung, lösche die Organisation und alle zugehörigen Teams und Läufer:innen.",
|
||||||
"contact": "Kontakt",
|
"confirm-delete-station-with-all-scans": "Löschen der Scannerstation mit allen Scans bestätigen",
|
||||||
"contact-added": "Kontakt wurde hinzugefügt",
|
"confirm-delete-statsclient": "Bestätigung, Statsclient löschen",
|
||||||
"contact-deleted": "Kontakt gelöscht",
|
"confirm-delete-team-and-associated-runners": "Bestätigung, lösche das Team mitsamt seinen Läufer:innen.",
|
||||||
"contact-information": "Kontaktinformation",
|
"confirm-deletion": "Löschung Bestätigen",
|
||||||
"contact-is-being-added": "Kontakt wird erstellt...",
|
"confirm-the-new-password": "Neues Passwort bestätigen",
|
||||||
"contact-is-being-updated": "Kontakt wird aktualisiert ...",
|
"contact": "Kontakt",
|
||||||
"contact-is-not-a-member-in-any-group": "Kontakt gehört zu keiner Gruppe",
|
"contact-added": "Kontakt wurde hinzugefügt",
|
||||||
"contacts": "Kontakte",
|
"contact-deleted": "Kontakt gelöscht",
|
||||||
"contacts-are-being-loaded": "Kontakte werden geladen ...",
|
"contact-information": "Kontaktinformation",
|
||||||
"copied-link-to-clipboard": "Link wurde in die Zwischenablage kopiert",
|
"contact-is-being-added": "Kontakt wird erstellt...",
|
||||||
"copied-token-to-clipboard": "Token wurde in die Zwischenablage kopiert",
|
"contact-is-being-updated": "Kontakt wird aktualisiert ...",
|
||||||
"count_organizations": "Organisationen (Anzahl)",
|
"contact-is-not-a-member-in-any-group": "Kontakt gehört zu keiner Gruppe",
|
||||||
"count_teams": "Teams (Anzahl)",
|
"contacts": "Kontakte",
|
||||||
"create": "Erstellen",
|
"contacts-are-being-loaded": "Kontakte werden geladen ...",
|
||||||
"create-a-new": "Erstelle eine neue",
|
"copied-link-to-clipboard": "Link wurde in die Zwischenablage kopiert",
|
||||||
"create-a-new-card": "Neue Läuferkarte erstellen",
|
"copied-token-to-clipboard": "Token wurde in die Zwischenablage kopiert",
|
||||||
"create-a-new-contact": "Kontakt erstellen",
|
"count_organizations": "Organisationen (Anzahl)",
|
||||||
"create-a-new-distance-donation": "Erstelle ein neues Sponsoring",
|
"count_teams": "Teams (Anzahl)",
|
||||||
"create-a-new-donor": "Neue Sponsor:in erstellen",
|
"create": "Erstellen",
|
||||||
"create-a-new-fixed-donation": "Erstelle eine neue Festbetragsspende",
|
"create-a-new": "Erstelle eine neue",
|
||||||
"create-a-new-organization": "Neue Organisation anlegen",
|
"create-a-new-card": "Neue Läuferkarte erstellen",
|
||||||
"create-a-new-runner": "Neue Läufer:in erstellen",
|
"create-a-new-contact": "Kontakt erstellen",
|
||||||
"create-a-new-scan-fixed-only": "Neuen Scan erstellen (nur mit Festdistanz)",
|
"create-a-new-distance-donation": "Erstelle ein neues Sponsoring",
|
||||||
"create-a-new-scanstation": "Neue Station erstellen",
|
"create-a-new-donor": "Neue Sponsor:in erstellen",
|
||||||
"create-a-new-statsclient": "Neuen Statsclient erstellen",
|
"create-a-new-fixed-donation": "Erstelle eine neue Festbetragsspende",
|
||||||
"create-a-new-team": "Erstelle ein neues Team",
|
"create-a-new-organization": "Neue Organisation anlegen",
|
||||||
"create-a-new-track": "Neuen Track erstellen",
|
"create-a-new-runner": "Neue Läufer:in erstellen",
|
||||||
"create-a-new-user": "Neue Benutzer:in anlegen",
|
"create-a-new-scan-fixed-only": "Neuen Scan erstellen (nur mit Festdistanz)",
|
||||||
"create-a-new-user-group": "Erstelle eine neue Gruppe",
|
"create-a-new-scanstation": "Neue Station erstellen",
|
||||||
"create-and-generate-pdf": "Erstellen und PDF herunterladen",
|
"create-a-new-statsclient": "Neuen Statsclient erstellen",
|
||||||
"create-bulk-blanco-cards": "Blankokarten erstellen",
|
"create-a-new-team": "Erstelle ein neues Team",
|
||||||
"create-bulk-cards": "Blankokarten erstellen",
|
"create-a-new-track": "Neuen Track erstellen",
|
||||||
"create-organization": "Organisation erstellen",
|
"create-a-new-user": "Neue Benutzer:in anlegen",
|
||||||
"create-team": "Team erstellen",
|
"create-a-new-user-group": "Erstelle eine neue Gruppe",
|
||||||
"create-track": "Track erstellen",
|
"create-and-generate-pdf": "Erstellen und PDF herunterladen",
|
||||||
"create-user": "Benutzer anlegen",
|
"create-bulk-blanco-cards": "Blankokarten erstellen",
|
||||||
"create-without-pdf": "Ohne PDF erstellen",
|
"create-bulk-cards": "Blankokarten erstellen",
|
||||||
"created-blanco-cards": "Blankokarten wurden erstellt",
|
"create-organization": "Organisation erstellen",
|
||||||
"creating-blanco-cards": "Erstelle Blankokarten",
|
"create-team": "Team erstellen",
|
||||||
"credits": "Credits",
|
"create-track": "Track erstellen",
|
||||||
"csv_import__class": "Klasse",
|
"create-user": "Benutzer anlegen",
|
||||||
"csv_import__firstname": "Vorname",
|
"create-without-pdf": "Ohne PDF erstellen",
|
||||||
"csv_import__lastname": "Nachname",
|
"created-blanco-cards": "Blankokarten wurden erstellt",
|
||||||
"csv_import__middlename": "Mittelname",
|
"creating-blanco-cards": "Erstelle Blankokarten",
|
||||||
"csv_import__team": "Team",
|
"credits": "Credits",
|
||||||
"danger-zone": "Gefahrenzone",
|
"csv_import__class": "Klasse",
|
||||||
"dashboard-greeting": "Hallo",
|
"csv_import__firstname": "Vorname",
|
||||||
"dashboard-title": "Dashboard",
|
"csv_import__lastname": "Nachname",
|
||||||
"datatable": {
|
"csv_import__middlename": "Mittelname",
|
||||||
"search": "🔍 Suche ...",
|
"csv_import__team": "Team",
|
||||||
"an_error_happened_while_fetching_the_data": "Beim Abrufen der Daten ist ein Fehler aufgetreten",
|
"danger-zone": "Gefahrenzone",
|
||||||
"loading": "Wird geladen...",
|
"dashboard-greeting": "Hallo",
|
||||||
"next": "Nächste",
|
"dashboard-title": "Dashboard",
|
||||||
"of": "von",
|
"datatable": {
|
||||||
"previous": "Vorherige",
|
"search": "🔍 Suche ...",
|
||||||
"to": "bis",
|
"an_error_happened_while_fetching_the_data": "Beim Abrufen der Daten ist ein Fehler aufgetreten",
|
||||||
"showing": "Zeige",
|
"loading": "Wird geladen...",
|
||||||
"no_matching_records_found": "Keine passenden Einträge gefunden",
|
"next": "Nächste",
|
||||||
"page": "Seite",
|
"of": "von",
|
||||||
"records": "Einträge",
|
"previous": "Vorherige",
|
||||||
"sort_column_ascending": "Spalte aufsteigend sortieren",
|
"to": "bis",
|
||||||
"sort_column_descending": "Spalte absteigend sortieren"
|
"showing": "Zeige",
|
||||||
},
|
"no_matching_records_found": "Keine passenden Einträge gefunden",
|
||||||
"delete": "Löschen",
|
"page": "Seite",
|
||||||
"delete-contact": "Kontakt löschen",
|
"records": "Einträge",
|
||||||
"delete-donation": "Sponsoring löschen",
|
"sort_column_ascending": "Spalte aufsteigend sortieren",
|
||||||
"delete-donor": "Sponsor:in löschen",
|
"sort_column_descending": "Spalte absteigend sortieren"
|
||||||
"delete-group": "Gruppe löschen",
|
},
|
||||||
"delete-organization": "Organisation löschen",
|
"delete": "Löschen",
|
||||||
"delete-profile": "Profil löschen",
|
"delete-cards": "Karten löschen",
|
||||||
"delete-runner": "Läufer:in löschen",
|
"delete-contact": "Kontakt löschen",
|
||||||
"delete-scan": "Scan löschen",
|
"delete-donation": "Sponsoring löschen",
|
||||||
"delete-station": "Station löschen",
|
"delete-donor": "Sponsor:in löschen",
|
||||||
"delete-statsclient": "Statsclient löschen",
|
"delete-group": "Gruppe löschen",
|
||||||
"delete-team": "Team Löschen",
|
"delete-organization": "Organisation löschen",
|
||||||
"delete-user": "Benutzer:in löschen",
|
"delete-profile": "Profil löschen",
|
||||||
"deleted-scan": "Scan wurde gelöscht",
|
"delete-runner": "Läufer:in löschen",
|
||||||
"dependency_name": "Name",
|
"delete-scan": "Scan löschen",
|
||||||
"description": "Beschreibung",
|
"delete-scans": "Scans löschen",
|
||||||
"description-optional": "Beschreibung (optional)",
|
"delete-station": "Station löschen",
|
||||||
"deselect-all": "Alle abwählen",
|
"delete-statsclient": "Statsclient löschen",
|
||||||
"details": "Details",
|
"delete-team": "Team Löschen",
|
||||||
"disabled": "deaktiviert",
|
"delete-user": "Benutzer:in löschen",
|
||||||
"distance": "Distanz",
|
"deleted-scan": "Scan wurde gelöscht",
|
||||||
"distance-donation": "Sponsoring",
|
"dependency_name": "Name",
|
||||||
"distance-in-km": "Distanz (in KM)",
|
"description": "Beschreibung",
|
||||||
"distance-track": "Distanz (+Track)",
|
"description-optional": "Beschreibung (optional)",
|
||||||
"do-you-really-want-to-delete-your-profile": "Möchtest du dein Profil wirklich löschen?",
|
"deselect-all": "Alle abwählen",
|
||||||
"do-you-want-to-delete-the-organization-delete_org-name": "Möchtest du die Organisation {orgname} löschen?",
|
"details": "Details",
|
||||||
"do-you-want-to-delete-the-team-delete_team-name": "Möchtest du das Team {teamname} löschen?",
|
"disabled": "deaktiviert",
|
||||||
"do-you-want-to-delete-this-donor-with-all-related-donations": "Möchtest du diese Sponsor:in mit all ihren Sponsorings löschen?",
|
"distance": "Distanz",
|
||||||
"documentation": "Dokumentation",
|
"distance-donation": "Sponsoring",
|
||||||
"donation-amount": "Sponsoringbetrag",
|
"distance-in-km": "Distanz (in KM)",
|
||||||
"donation-amount-must-be-greater-that-0-00eur": "Der Sponsoringbetrag muss größer als 0.00€ sein.",
|
"distance-track": "Distanz (+Track)",
|
||||||
"donation-deleted": "Sponsoring gelöscht",
|
"do-you-really-want-to-delete-your-profile": "Möchtest du dein Profil wirklich löschen?",
|
||||||
"donation-updated": "Sponsoring wurde aktualisiert",
|
"do-you-want-to-delete-the-organization-delete_org-name": "Möchtest du die Organisation {orgname} löschen?",
|
||||||
"donation_added": "Sponsoring hinzugefügt",
|
"do-you-want-to-delete-the-team-delete_team-name": "Möchtest du das Team {teamname} löschen?",
|
||||||
"donations": "Sponsorings",
|
"do-you-want-to-delete-this-donor-with-all-related-donations": "Möchtest du diese Sponsor:in mit all ihren Sponsorings löschen?",
|
||||||
"donor": "Sponsor:in",
|
"documentation": "Dokumentation",
|
||||||
"donor-added": "Sponsor:in hinzugefügt",
|
"donation-amount": "Sponsoringbetrag",
|
||||||
"donor-deleted": "Sponsor:in gelöscht",
|
"donation-amount-must-be-greater-that-0-00eur": "Der Sponsoringbetrag muss größer als 0.00€ sein.",
|
||||||
"donor-has-no-associated-donations": "Zur Sponsor:in gibt es noch keine Sponsorings",
|
"donation-deleted": "Sponsoring gelöscht",
|
||||||
"donor-is-being-added": "Sponsor:in wird hinzugefügt...",
|
"donation-updated": "Sponsoring wurde aktualisiert",
|
||||||
"donor-is-being-updated": "Sponsor:in wird aktualisiert",
|
"donation_added": "Sponsoring hinzugefügt",
|
||||||
"donors": "Sponsor:innen",
|
"donations": "Sponsorings",
|
||||||
"donors-are-being-loaded": "Sponsor:innen werden geladen",
|
"donor": "Sponsor:in",
|
||||||
"dont-have-your-email-connected": "Deine E-Mail ist nicht verknüpft?",
|
"donor-added": "Sponsor:in hinzugefügt",
|
||||||
"dont-panic-were-resetting-it": "Keine Panik, wir setzen es zurück ✌",
|
"donor-deleted": "Sponsor:in gelöscht",
|
||||||
"e-mail-adress": "E-Mail-Adresse",
|
"donor-has-no-associated-donations": "Zur Sponsor:in gibt es noch keine Sponsorings",
|
||||||
"edit": "Bearbeiten",
|
"donor-is-being-added": "Sponsor:in wird hinzugefügt...",
|
||||||
"edit-a-card": "Läuferkarte bearbeiten",
|
"donor-is-being-updated": "Sponsor:in wird aktualisiert",
|
||||||
"edit-permissions": "Berechtigungen bearbeiten",
|
"donors": "Sponsor:innen",
|
||||||
"email_address_or_username": "E-Mail-Adresse/ Benutzername",
|
"donors-are-being-loaded": "Sponsor:innen werden geladen",
|
||||||
"enabled": "aktiviert",
|
"dont-have-your-email-connected": "Deine E-Mail ist nicht verknüpft?",
|
||||||
"enabled_large": "Aktiviert",
|
"dont-panic-were-resetting-it": "Keine Panik, wir setzen es zurück ✌",
|
||||||
"english": "Englisch",
|
"e-mail-adress": "E-Mail-Adresse",
|
||||||
"enter-payment": "Zahlung eingeben",
|
"edit": "Bearbeiten",
|
||||||
"error-during-import": "Fehler beim Importieren",
|
"edit-a-card": "Läuferkarte bearbeiten",
|
||||||
"error-whyile-copying-to-clipboard": "Fehler beim Kopieren in die Zwischenablage",
|
"edit-permissions": "Berechtigungen bearbeiten",
|
||||||
"error_on_login": "😢Fehler beim Login",
|
"email_address_or_username": "E-Mail-Adresse/ Benutzername",
|
||||||
"erteilte": "Direkt erteilte",
|
"enabled": "aktiviert",
|
||||||
"everything-concerning-your-profile": "Alles zu deinem Profil",
|
"enabled_large": "Aktiviert",
|
||||||
"everything-is-more-fun-together": "Im Team macht's mehr Spaß 🏃♂️🏃♀️🏃♂️",
|
"english": "Englisch",
|
||||||
"faq": "FAQ",
|
"enter-payment": "Zahlung eingeben",
|
||||||
"filename_sponsoringquittungsliste": "SponsoringQuittungsListe",
|
"error-during-import": "Fehler beim Importieren",
|
||||||
"filter-by-organization-team": "Filtern nach Organisation / Team",
|
"error-whyile-copying-to-clipboard": "Fehler beim Kopieren in die Zwischenablage",
|
||||||
"first-name": "Vorname",
|
"error_on_login": "😢Fehler beim Login",
|
||||||
"first-name-is-required": "Vorname muss angegeben werden",
|
"erteilte": "Direkt erteilte",
|
||||||
"first-scan-of-the-day": "Erster Scan des Tages",
|
"everything-concerning-your-profile": "Alles zu deinem Profil",
|
||||||
"fixed-donation": "Festbetragsspende",
|
"everything-is-more-fun-together": "Im Team macht's mehr Spaß 🏃♂️🏃♀️🏃♂️",
|
||||||
"forgot_password": "Passwort vergessen?",
|
"faq": "FAQ",
|
||||||
"geerbte": "geerbte",
|
"filename_sponsoringquittungsliste": "SponsoringQuittungsListe",
|
||||||
"general-stats": "Allgemeine Statistiken",
|
"filter-by-organization-team": "Filtern nach Organisation / Team",
|
||||||
"general_promise_error": "😢 Ein unbekannter Fehler ist aufgetreten",
|
"first-name": "Vorname",
|
||||||
"generate-runner-certificate": "Urkunde generieren",
|
"first-name-is-required": "Vorname muss angegeben werden",
|
||||||
"generate-runner-certificates": "Urkunden generieren",
|
"first-scan-of-the-day": "Erster Scan des Tages",
|
||||||
"generate-runnercards": "Läuferkarten generieren",
|
"fixed-donation": "Festbetragsspende",
|
||||||
"generate-sponsoring-contract": "Sponsoringvertrag generieren",
|
"forgot_password": "Passwort vergessen?",
|
||||||
"generate-sponsoring-contracts": "Sponsoringverträge generieren",
|
"geerbte": "geerbte",
|
||||||
"generating-pdf": "PDF wird generiert...",
|
"general-stats": "Allgemeine Statistiken",
|
||||||
"generating-pdfs": "PDFs werden generiert...",
|
"general_promise_error": "😢 Ein unbekannter Fehler ist aufgetreten",
|
||||||
"generic-ui-logic-error": "Etwas ist in der Benutzeroberfläche schiefgelaufen.",
|
"generate-runner-certificate": "Urkunde generieren",
|
||||||
"german": "Deutsch",
|
"generate-runner-certificates": "Urkunden generieren",
|
||||||
"go-to-login": "Zum Login",
|
"generate-runnercards": "Läuferkarten generieren",
|
||||||
"goback": "Zur Startseite",
|
"generate-sponsoring-contract": "Sponsoringvertrag generieren",
|
||||||
"granted": "Gewährt",
|
"generate-sponsoring-contracts": "Sponsoringverträge generieren",
|
||||||
"group": "Gruppe",
|
"generating-pdf": "PDF wird generiert...",
|
||||||
"group-added": "Gruppe hinzugefügt",
|
"generating-pdfs": "PDFs werden generiert...",
|
||||||
"group-is-being-added": "Gruppe wird erstellt",
|
"generic-ui-logic-error": "Etwas ist in der Benutzeroberfläche schiefgelaufen.",
|
||||||
"group-name-is-required": "Der Gruppenname muss angegeben werden.",
|
"german": "Deutsch",
|
||||||
"group-updated": "Gruppe aktualisiert",
|
"go-to-login": "Zum Login",
|
||||||
"groups": "Gruppen",
|
"goback": "Zur Startseite",
|
||||||
"groups-are-being-loaded": "Gruppen werden geladen",
|
"granted": "Gewährt",
|
||||||
"home": "Start",
|
"group": "Gruppe",
|
||||||
"icon-image-credits": "Wir möchten uns außerdem für die verwendeten Icons und Bilder bedanken bei:",
|
"group-added": "Gruppe hinzugefügt",
|
||||||
"if-you-want-to-create-multiple-blanco-cards-try-the-add-bulk-button": "Wenn du mehrere Blankokarten erstellen willst, nutze doch den \"Blankokarten erstellen\" Knopf.",
|
"group-is-being-added": "Gruppe wird erstellt",
|
||||||
"import-finished": "Import abgeschlossen",
|
"group-name-is-required": "Der Gruppenname muss angegeben werden.",
|
||||||
"import-runners": "Läufer:innen importieren",
|
"group-updated": "Gruppe aktualisiert",
|
||||||
"import__target-organization": "Ziel Organisation",
|
"groups": "Gruppen",
|
||||||
"imprint": "Impressum ",
|
"groups-are-being-loaded": "Gruppen werden geladen",
|
||||||
"imprint-loading": "Impressum lädt...",
|
"home": "Start",
|
||||||
"inactive": "Inaktiv",
|
"icon-image-credits": "Wir möchten uns außerdem für die verwendeten Icons und Bilder bedanken bei:",
|
||||||
"installed-version": "Installierte Version",
|
"if-you-want-to-create-multiple-blanco-cards-try-the-add-bulk-button": "Wenn du mehrere Blankokarten erstellen willst, nutze doch den \"Blankokarten erstellen\" Knopf.",
|
||||||
"internal-error": "Interner Fehler",
|
"import-finished": "Import abgeschlossen",
|
||||||
"invalid": "Ungültig",
|
"import-runners": "Läufer:innen importieren",
|
||||||
"invalid-mail-reset": "Das ist keine gültige E-Mail",
|
"import__target-organization": "Ziel Organisation",
|
||||||
"just-enter-how-many-you-want-and-the-system-will-create-them": "Gebe einfach ein, wie viele Blankokarten das System erstellen soll.",
|
"imprint": "Impressum ",
|
||||||
"key": "Schlüssel",
|
"imprint-loading": "Impressum lädt...",
|
||||||
"laeufer-hinzufuegen": "Läufer:in hinzufügen",
|
"inactive": "Inaktiv",
|
||||||
"laeufer-importieren": "Läufer:innen importieren",
|
"installed-version": "Installierte Version",
|
||||||
"laptime": "Rundenzeit",
|
"internal-error": "Interner Fehler",
|
||||||
"last-name": "Nachname",
|
"invalid": "Ungültig",
|
||||||
"last-name-is-required": "Nachname muss angegeben werden",
|
"invalid-mail-reset": "Das ist keine gültige E-Mail",
|
||||||
"lfk-is-os": "Das \"Lauf für Kaya!\" Frontend ist (wie alle anderen Projekte für den \"LfK!\" auch) ein OpenSource Projekt.",
|
"just-enter-how-many-you-want-and-the-system-will-create-them": "Gebe einfach ein, wie viele Blankokarten das System erstellen soll.",
|
||||||
"license": "Lizenz",
|
"key": "Schlüssel",
|
||||||
"licenses-are-being-loaded": "Lizenzen werden geladen...",
|
"laeufer-hinzufuegen": "Läufer:in hinzufügen",
|
||||||
"loading-cards": "Läuferkarten werden geladen",
|
"laeufer-importieren": "Läufer:innen importieren",
|
||||||
"loading-contact-details": "Kontaktdaten werden geladen ...",
|
"laptime": "Rundenzeit",
|
||||||
"loading-donation-details": "Lade Sponsoringdetails",
|
"last-name": "Nachname",
|
||||||
"loading-donor-details": "Lade Details",
|
"last-name-is-required": "Nachname muss angegeben werden",
|
||||||
"loading-group-detail": "Lade Gruppendetails...",
|
"lfk-is-os": "Das \"Lauf für Kaya!\" Frontend ist (wie alle anderen Projekte für den \"LfK!\" auch) ein OpenSource Projekt.",
|
||||||
"loading-profile-data": "Lade Profildaten",
|
"license": "Lizenz",
|
||||||
"loading-runners": "Läufer:innen werden geladen...",
|
"licenses-are-being-loaded": "Lizenzen werden geladen...",
|
||||||
"loading-station-details": "Lade Scanstation-Details ...",
|
"loading-cards": "Läuferkarten werden geladen",
|
||||||
"log_in": "Anmelden",
|
"loading-contact-details": "Kontaktdaten werden geladen ...",
|
||||||
"log_in_to_your_account": "Bitte melde dich an",
|
"loading-donation-details": "Lade Sponsoringdetails",
|
||||||
"login_is_checked": "Login wird überprüft",
|
"loading-donor-details": "Lade Details",
|
||||||
"logout": "Abmelden",
|
"loading-group-detail": "Lade Gruppendetails...",
|
||||||
"mail-validation-in-progress": "E-Mail Verifizierung läuft... ",
|
"loading-profile-data": "Lade Profildaten",
|
||||||
"manage-admin-users": "Nutzer verwalten",
|
"loading-runners": "Läufer:innen werden geladen...",
|
||||||
"middle-name": "Mittelname",
|
"loading-station-details": "Lade Scanstation-Details ...",
|
||||||
"minimum-lap-time-in-s": "Minimale Rundenzeit (in Sekunden)",
|
"log_in": "Anmelden",
|
||||||
"minimum-lap-time-must-be-a-positive-number-or-0": "Die minimale Rundenzeit muss eine positive Zahl oder 0 sein",
|
"log_in_to_your_account": "Bitte melde dich an",
|
||||||
"must-be-at-least-10-characters-long": "Passwort muss mindestens 10 Zeichen lang sein!",
|
"login_is_checked": "Login wird überprüft",
|
||||||
"must-contain-a-lowercase-letter": "Passwort muss einen Großbuchstaben enthalten!",
|
"logout": "Abmelden",
|
||||||
"must-contain-a-number": "Passwort muss eine Zahl enthalten!",
|
"mail-validation-in-progress": "E-Mail Verifizierung läuft... ",
|
||||||
"must-contain-a-uppercase-letter": "Passwort muss einen Kleinbuchstaben enthalten!",
|
"manage-admin-users": "Nutzer verwalten",
|
||||||
"name": "Name",
|
"middle-name": "Mittelname",
|
||||||
"name-is-required": "Der Gruppenname muss angegeben werden",
|
"minimum-lap-time-in-s": "Minimale Rundenzeit (in Sekunden)",
|
||||||
"new-password": "Neues Passwort",
|
"minimum-lap-time-must-be-a-positive-number-or-0": "Die minimale Rundenzeit muss eine positive Zahl oder 0 sein",
|
||||||
"no-contact-found": "Keine Kontakte gefunden",
|
"must-be-at-least-10-characters-long": "Passwort muss mindestens 10 Zeichen lang sein!",
|
||||||
"no-contact-selected": "Kein Kontakt ausgewählt",
|
"must-contain-a-lowercase-letter": "Passwort muss einen Großbuchstaben enthalten!",
|
||||||
"no-contact-specified": "Kein Kontakt angegeben",
|
"must-contain-a-number": "Passwort muss eine Zahl enthalten!",
|
||||||
"no-donors-found": "Keine Spender:innen gefunden",
|
"must-contain-a-uppercase-letter": "Passwort muss einen Kleinbuchstaben enthalten!",
|
||||||
"no-license-text-could-be-found": "Kein Lizenz-Text gefunden 😢",
|
"name": "Name",
|
||||||
"no-organization-or-team-found": "Keine Organisationen oder Teams gefunden",
|
"name-is-required": "Der Gruppenname muss angegeben werden",
|
||||||
"no-organization-specified": "Keine Organisation angegeben",
|
"new-password": "Neues Passwort",
|
||||||
"no-organizations-found": "Keine Organisationen gefunden",
|
"no-contact-found": "Keine Kontakte gefunden",
|
||||||
"no-runners-found": "Keine Läufer:innen gefunden",
|
"no-contact-selected": "Kein Kontakt ausgewählt",
|
||||||
"no-tracks-added-yet": "Es wurden noch keine Tracks erstellt.",
|
"no-contact-specified": "Kein Kontakt angegeben",
|
||||||
"non-blanko": "Keine/Blankokarte",
|
"no-donors-found": "Keine Spender:innen gefunden",
|
||||||
"open": "OFFEN",
|
"no-license-text-could-be-found": "Kein Lizenz-Text gefunden 😢",
|
||||||
"organization": "Organisation",
|
"no-organization-or-team-found": "Keine Organisationen oder Teams gefunden",
|
||||||
"organization-added": "Organisation hinzugefügt",
|
"no-organization-specified": "Keine Organisation angegeben",
|
||||||
"organization-deleted": "Organisation gelöscht",
|
"no-organizations-found": "Keine Organisationen gefunden",
|
||||||
"organization-detail-is-being-loaded": "Organisationsdetails werden geladen ...",
|
"no-runners-found": "Keine Läufer:innen gefunden",
|
||||||
"organization-is-being-added": "Organisation wird hinzugefügt ...",
|
"no-tracks-added-yet": "Es wurden noch keine Tracks erstellt.",
|
||||||
"organization-name-is-required": "Der Name muss angegeben werden",
|
"non-blanko": "Keine/Blankokarte",
|
||||||
"organizations": "Organisationen",
|
"open": "OFFEN",
|
||||||
"organizations-are-being-loaded": "Organisationen werden geladen ...",
|
"organization": "Organisation",
|
||||||
"orgs": "Organisationen",
|
"organization-added": "Organisation hinzugefügt",
|
||||||
"oss_credit_description": "Wir verwenden eine Menge Open Source-Software bei diesen Projekten und möchten uns bei den folgenden Projekten und Mitwirkenden bedanken, die dazu beitragen, Open Source großartig zu machen!",
|
"organization-deleted": "Organisation gelöscht",
|
||||||
"paid": "BEZAHLT",
|
"organization-detail-is-being-loaded": "Organisationsdetails werden geladen ...",
|
||||||
"paid-amount": "Gezahlter Betrag",
|
"organization-is-being-added": "Organisation wird hinzugefügt ...",
|
||||||
"password": "Passwort",
|
"organization-name-is-required": "Der Name muss angegeben werden",
|
||||||
"password-changed": "Passwort wurde aktualisiert!",
|
"organizations": "Organisationen",
|
||||||
"password-is-required": "Passwort muss angegeben werden",
|
"organizations-are-being-loaded": "Organisationen werden geladen ...",
|
||||||
"password-reset-failed": "Passwort zurücksetzen ist fehlgeschlagen!",
|
"orgs": "Organisationen",
|
||||||
"password-reset-in-progress": "Passwort wird zurückgesetzt...",
|
"oss_credit_description": "Wir verwenden eine Menge Open Source-Software bei diesen Projekten und möchten uns bei den folgenden Projekten und Mitwirkenden bedanken, die dazu beitragen, Open Source großartig zu machen!",
|
||||||
"password-reset-mail-sent": "Passwort-Reset Mail wurde an \"{usersEmail}\" geschickt.",
|
"paid": "BEZAHLT",
|
||||||
"password-reset-successful": "Passwort erfolgreich zurückgesetzt!",
|
"paid-amount": "Gezahlter Betrag",
|
||||||
"passwords-dont-match": "Die Passwörter stimmen nicht überein!",
|
"password": "Passwort",
|
||||||
"payment-amount-must-be-greater-than-0-00eur": "Der Zahlungsbetrag muss größer als 0.00€ sein!",
|
"password-changed": "Passwort wurde aktualisiert!",
|
||||||
"pdf-generation-failed": "PDF Generierung fehlgeschlagen!",
|
"password-is-required": "Passwort muss angegeben werden",
|
||||||
"pdf-successfully-generated": "PDF wurde erfolgreich generiert!",
|
"password-reset-failed": "Passwort zurücksetzen ist fehlgeschlagen!",
|
||||||
"pdfs-successfully-generated": "Alle PDFs wurden generiert!",
|
"password-reset-in-progress": "Passwort wird zurückgesetzt...",
|
||||||
"per-kilometer": "pro Kilometer",
|
"password-reset-mail-sent": "Passwort-Reset Mail wurde an \"{usersEmail}\" geschickt.",
|
||||||
"permissions": "Berechtigungen",
|
"password-reset-successful": "Passwort erfolgreich zurückgesetzt!",
|
||||||
"permissions-updated": "Berechtigungen aktualisiert!",
|
"passwords-dont-match": "Die Passwörter stimmen nicht überein!",
|
||||||
"phone": "Telefon",
|
"payment-amount-must-be-greater-than-0-00eur": "Der Zahlungsbetrag muss größer als 0.00€ sein!",
|
||||||
"please-copy-the-token-and-store-it-somewhere-save": "Bitte kopiere dir den Token und bewahre ihn gut auf.",
|
"pdf-generation-failed": "PDF Generierung fehlgeschlagen!",
|
||||||
"please-provide-a-password": "Bitte gebe ein Passwort an...",
|
"pdf-successfully-generated": "PDF wurde erfolgreich generiert!",
|
||||||
"please-provide-the-nessecary-information-to-add-a-new-donor": "Bitte mach die Notwendigen Angaben, um eine neue Sponsor:in zu erstellen",
|
"pdfs-successfully-generated": "Alle PDFs wurden generiert!",
|
||||||
"please-provide-the-nessecary-information-to-create-a-new-donation": "Bitte gebe alle für das Sponsoring notwendigen Daten an.",
|
"per-kilometer": "pro Kilometer",
|
||||||
"please-provide-the-nessecary-information-to-create-a-new-scan": "Bitte gebe alle notwendigen Informationen an, um einen neuen Scan zu erstellen.",
|
"permissions": "Berechtigungen",
|
||||||
"please-provide-the-required-csv-xlsx-file": "Bitte eine CSV oder XLSX Datei hochladen.",
|
"permissions-updated": "Berechtigungen aktualisiert!",
|
||||||
"please-provide-the-required-information-for-creating-a-new-user-group": "Bitte gebe alle für eine neue Gruppe notwendigen Informationen an.",
|
"phone": "Telefon",
|
||||||
"please-provide-the-required-information-to-add-a-new-contact": "Bitte gebe alle nötigen Informationen an, im den neuen Kontakt zu erstellen.",
|
"please-confirm-the-deletion-of-card": "Bitte bestätige die Löschung der Karte",
|
||||||
"please-provide-the-required-information-to-add-a-new-organization": "Bitte gebe alle nötigen Informationen an, im die neue Organisation zu erstellen.",
|
"please-confirm-the-deletion-of-runner": "Bitte bestätige die Löschung der Läufer:in",
|
||||||
"please-provide-the-required-information-to-add-a-new-runner": "Bitte die benötigten Informationen angeben.",
|
"please-confirm-the-deletion-of-scan": "Bitte bestätige die Löschung des Scans",
|
||||||
"please-provide-the-required-information-to-add-a-new-team": "Bitte gebe alle nötigen Informationen an, im das neue Team zu erstellen.",
|
"please-copy-the-token-and-store-it-somewhere-save": "Bitte kopiere dir den Token und bewahre ihn gut auf.",
|
||||||
"please-provide-the-required-information-to-add-a-new-track": "Bitte die benötigten Informationen angeben.",
|
"please-provide-a-password": "Bitte gebe ein Passwort an...",
|
||||||
"please-provide-the-required-information-to-add-a-new-user": "Bitte gebe alle nötigen Informationen an, im die neue Benutzer:in zu erstellen.",
|
"please-provide-the-nessecary-information-to-add-a-new-donor": "Bitte mach die Notwendigen Angaben, um eine neue Sponsor:in zu erstellen",
|
||||||
"please-provide-the-required-information-to-create-a-new-scanstation": "Bitte gebe alle für eine Scannerstation notwendigen Informationen an",
|
"please-provide-the-nessecary-information-to-create-a-new-donation": "Bitte gebe alle für das Sponsoring notwendigen Daten an.",
|
||||||
"please-provide-the-required-information-to-create-a-new-statsclient": "Bitte gebe alle für einen Statsclient notwendigen Informationen an",
|
"please-provide-the-nessecary-information-to-create-a-new-scan": "Bitte gebe alle notwendigen Informationen an, um einen neuen Scan zu erstellen.",
|
||||||
"please-request-a-new-reset-mail": "Bitte eine neue Passwortreset-Mail anfordern...",
|
"please-provide-the-required-csv-xlsx-file": "Bitte eine CSV oder XLSX Datei hochladen.",
|
||||||
"please-wait-a-moment-your-login-is-still-being-processed": "Bitte warte einen Moment, deine Anmeldung wird verarbeitet",
|
"please-provide-the-required-information-for-creating-a-new-user-group": "Bitte gebe alle für eine neue Gruppe notwendigen Informationen an.",
|
||||||
"prefix": "Prefix",
|
"please-provide-the-required-information-to-add-a-new-contact": "Bitte gebe alle nötigen Informationen an, im den neuen Kontakt zu erstellen.",
|
||||||
"privacy": "Datenschutz",
|
"please-provide-the-required-information-to-add-a-new-organization": "Bitte gebe alle nötigen Informationen an, im die neue Organisation zu erstellen.",
|
||||||
"privacy-loading": "Datenschutzerklärung lädt...",
|
"please-provide-the-required-information-to-add-a-new-runner": "Bitte die benötigten Informationen angeben.",
|
||||||
"profile": "Profil",
|
"please-provide-the-required-information-to-add-a-new-team": "Bitte gebe alle nötigen Informationen an, im das neue Team zu erstellen.",
|
||||||
"profile-deleted": "Profil gelöscht!",
|
"please-provide-the-required-information-to-add-a-new-track": "Bitte die benötigten Informationen angeben.",
|
||||||
"profile-picture": "Profilbild",
|
"please-provide-the-required-information-to-add-a-new-user": "Bitte gebe alle nötigen Informationen an, im die neue Benutzer:in zu erstellen.",
|
||||||
"profile-updated": "Profil wurde aktualisiert!",
|
"please-provide-the-required-information-to-create-a-new-scanstation": "Bitte gebe alle für eine Scannerstation notwendigen Informationen an",
|
||||||
"read-license": "Lizenz-Text lesen",
|
"please-provide-the-required-information-to-create-a-new-statsclient": "Bitte gebe alle für einen Statsclient notwendigen Informationen an",
|
||||||
"receipt-needed": "Spendenquittung benötigt",
|
"please-request-a-new-reset-mail": "Bitte eine neue Passwortreset-Mail anfordern...",
|
||||||
"repo_link": "Link",
|
"please-wait-a-moment-your-login-is-still-being-processed": "Bitte warte einen Moment, deine Anmeldung wird verarbeitet",
|
||||||
"request-a-new-reset-mail": "Neue Reset-Mail anfordern",
|
"prefix": "Prefix",
|
||||||
"reset-my-password": "Passwort zurücksetzen",
|
"privacy": "Datenschutz",
|
||||||
"reset-password": "Passwort zurücksetzen",
|
"privacy-loading": "Datenschutzerklärung lädt...",
|
||||||
"runner": "Läufer:in",
|
"profile": "Profil",
|
||||||
"runner-added": "Läufer:in hinzugefügt",
|
"profile-deleted": "Profil gelöscht!",
|
||||||
"runner-import": "Läufer:innen Import",
|
"profile-picture": "Profilbild",
|
||||||
"runner-is-being-added": "Läufer:in wird hinzugefügt...",
|
"profile-updated": "Profil wurde aktualisiert!",
|
||||||
"runner-updated": "Läufer:in aktualisiert!",
|
"read-license": "Lizenz-Text lesen",
|
||||||
"runnercards": "Laeuferkarten",
|
"receipt-needed": "Spendenquittung benötigt",
|
||||||
"runnerimport_verify_runners_org": "Bitte die Läufer:innen für den Import in die Organisation \"{org_name}\" bestätigen",
|
"repo_link": "Link",
|
||||||
"runners": "Läufer",
|
"request-a-new-reset-mail": "Neue Reset-Mail anfordern",
|
||||||
"runners-are-being-imported": "Läufer:innen werden importiert ...",
|
"reset-my-password": "Passwort zurücksetzen",
|
||||||
"runners-are-being-loaded": "Läufer:innen werden geladen ...",
|
"reset-password": "Passwort zurücksetzen",
|
||||||
"save": "Speichern",
|
"runner": "Läufer:in",
|
||||||
"save-changes": "Änderungen speichern",
|
"runner-added": "Läufer:in hinzugefügt",
|
||||||
"scan-added": "Scan hinzugefügt",
|
"runner-deleted": "Läufer:in gelöscht",
|
||||||
"scan-is-being-updated": "Scan wird aktualisiert",
|
"runner-import": "Läufer:innen Import",
|
||||||
"scan-with-fixed-distance": "Scan mit Festdistanz",
|
"runner-is-being-added": "Läufer:in wird hinzugefügt...",
|
||||||
"scans": "Scans",
|
"runner-updated": "Läufer:in aktualisiert!",
|
||||||
"scans-are-being-loaded": "Scans werden geladen",
|
"runnercards": "Laeuferkarten",
|
||||||
"scanstation": "Scanner Station",
|
"runnerimport_verify_runners_org": "Bitte die Läufer:innen für den Import in die Organisation \"{org_name}\" bestätigen",
|
||||||
"scanstation-added": "Station wurde erstellt",
|
"runners": "Läufer",
|
||||||
"scanstation-is-being-added": "Scannerstation wird angelegt...",
|
"runners-are-being-imported": "Läufer:innen werden importiert ...",
|
||||||
"scanstations": "Scanner Stationen",
|
"runners-are-being-loaded": "Läufer:innen werden geladen ...",
|
||||||
"scanstations-are-being-loaded": "Scannerstationen werden geladen...",
|
"save": "Speichern",
|
||||||
"search-for-an-organization-by-name-or-id": "Suche eine Organisation (via Name oder Id)",
|
"save-changes": "Änderungen speichern",
|
||||||
"search-for-an-organization-or-team-by-name-or-id": "Suche eine Organisation oder ein Team (via Name oder Id)",
|
"scan-added": "Scan hinzugefügt",
|
||||||
"search-for-donor-name-or-id": "Suche eine Spender:in (via Name oder Id)",
|
"scan-deleted": "Scan gelöscht",
|
||||||
"search-for-permission": "Berechtigungen durchsuchen",
|
"scan-is-being-updated": "Scan wird aktualisiert",
|
||||||
"search-for-runner-by-name-or-id": "Suche eine Läufer:in (via Name oder Id)",
|
"scan-with-fixed-distance": "Scan mit Festdistanz",
|
||||||
"select-all": "Alle auswählen",
|
"scans": "Scans",
|
||||||
"select-language": "Sprache auswählen",
|
"scans-are-being-loaded": "Scans werden geladen",
|
||||||
"selfservice-registration": "Selfservice Registrierung",
|
"scanstation": "Scanner Station",
|
||||||
"send-a-mail-to-lfk-odit-services": "Sende eine Mail an lfk@odit.services",
|
"scanstation-added": "Station wurde erstellt",
|
||||||
"set-the-user-active-inactive": "Den Benutzer auf (in)aktiv setzen",
|
"scanstation-is-being-added": "Scannerstation wird angelegt...",
|
||||||
"settings": "Einstellungen",
|
"scanstations": "Scanner Stationen",
|
||||||
"settings-for-your-profile": "Die Einstellungen deines Accounts",
|
"scanstations-are-being-loaded": "Scannerstationen werden geladen...",
|
||||||
"something-about-the-group": "Infos zur Gruppe",
|
"search-for-an-organization-by-name-or-id": "Suche eine Organisation (via Name oder Id)",
|
||||||
"sponsoring-quittungs-liste_herunterladen": "Sponsoring-Quittungs-Liste herunterladen",
|
"search-for-an-organization-or-team-by-name-or-id": "Suche eine Organisation oder ein Team (via Name oder Id)",
|
||||||
"sponsorings": "Sponsoringerklaerungen",
|
"search-for-donor-name-or-id": "Suche eine Spender:in (via Name oder Id)",
|
||||||
"stats-are-being-loaded": "Die Statistiken werden geladen...",
|
"search-for-permission": "Berechtigungen durchsuchen",
|
||||||
"statsclient-deleted": "Statsclient wurde gelöscht",
|
"search-for-runner-by-name-or-id": "Suche eine Läufer:in (via Name oder Id)",
|
||||||
"statsclient-is-being-added": "Statsclient wird angelegt...",
|
"select-all": "Alle auswählen",
|
||||||
"statsclients": "Statsclient (aka Beamershow)",
|
"select-language": "Sprache auswählen",
|
||||||
"statsclients-are-being-loaded": "Statsclients werden geladen",
|
"selfservice-registration": "Selfservice Registrierung",
|
||||||
"status": "Status",
|
"send-a-mail-to-lfk-odit-services": "Sende eine Mail an lfk@odit.services",
|
||||||
"stuff-that-could-harm-your-profile": "Einstellungen, die deinem Profil nachhaltig schaden können",
|
"set-the-user-active-inactive": "Den Benutzer auf (in)aktiv setzen",
|
||||||
"successful-password-reset": "Passwort erfolgreich zurückgesetzt!",
|
"settings": "Einstellungen",
|
||||||
"team": "Team",
|
"settings-for-your-profile": "Die Einstellungen deines Accounts",
|
||||||
"team-added": "Team wurde hinzugefügt",
|
"something-about-the-group": "Infos zur Gruppe",
|
||||||
"team-deleted": "Team gelöscht",
|
"sponsoring-quittungs-liste_herunterladen": "Sponsoring-Quittungs-Liste herunterladen",
|
||||||
"team-detail-is-being-loaded": "Team wird geladen...",
|
"sponsorings": "Sponsoringerklaerungen",
|
||||||
"team-is-being-added": "Team wird erstellt...",
|
"station-deleted": "Scannerstation gelöscht",
|
||||||
"team-name": "Teamname",
|
"stats-are-being-loaded": "Die Statistiken werden geladen...",
|
||||||
"team-name-is-required": "Teamname ist erforderlich",
|
"statsclient-deleted": "Statsclient wurde gelöscht",
|
||||||
"teams": "Teams",
|
"statsclient-is-being-added": "Statsclient wird angelegt...",
|
||||||
"teams-are-being-loaded": "Teams werden geladen ...",
|
"statsclients": "Statsclient (aka Beamershow)",
|
||||||
"the-provided-phone-number-is-invalid-less-than-br-greater-than-please-enter-a-valid-international-number": "Die angegebene Telefonnummer ist nicht korrekt. <br /> Bitte gebe eine Telefonnummer im internationalen Format an...",
|
"statsclients-are-being-loaded": "Statsclients werden geladen",
|
||||||
"the-scans-distance-must-be-greater-than-0m": "Die Distanz muss größer als 0m sein.",
|
"status": "Status",
|
||||||
"the-scanstations-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again": "Der Scannerstation Token wird nur einmal angezeigt - du kannst ihn nicht ändern oder ihn dir nochmal anzeigen lassen!",
|
"stuff-that-could-harm-your-profile": "Einstellungen, die deinem Profil nachhaltig schaden können",
|
||||||
"the-statsclient-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again": "Der Statsclient Token wird nur einmal angezeigt - du kannst ihn nicht ändern oder ihn dir nochmal anzeigen lassen!",
|
"successful-password-reset": "Passwort erfolgreich zurückgesetzt!",
|
||||||
"there-are-no-cards-yet": "Es gibt noch keine Läuferkarten.",
|
"team": "Team",
|
||||||
"there-are-no-contacts-added-yet": "Es wurden noch keine Kontakte hinzugefügt.",
|
"team-added": "Team wurde hinzugefügt",
|
||||||
"there-are-no-donations-yet": "Es gibt noch keine Sponsorings",
|
"team-deleted": "Team gelöscht",
|
||||||
"there-are-no-donors-yet": "Es gibt noch keine Sponsor:innen",
|
"team-detail-is-being-loaded": "Team wird geladen...",
|
||||||
"there-are-no-groups-yet": "Es gibt noch keine Gruppen",
|
"team-is-being-added": "Team wird erstellt...",
|
||||||
"there-are-no-organizations-added-yet": "Es wurden noch keine Organisationen hinzugefügt.",
|
"team-name": "Teamname",
|
||||||
"there-are-no-runners-added-yet": "Es wurden noch keine Läufer:innen hinzugefügt.",
|
"team-name-is-required": "Teamname ist erforderlich",
|
||||||
"there-are-no-scans-yet": "Es gibt noch keine Scans",
|
"teams": "Teams",
|
||||||
"there-are-no-teams-added-yet": "Es wurden noch keine Teams hinzugefügt.",
|
"teams-are-being-loaded": "Teams werden geladen ...",
|
||||||
"there-are-no-users-added-yet": "Es wurden noch keine Benutzer hinzugefügt.",
|
"the-provided-phone-number-is-invalid-less-than-br-greater-than-please-enter-a-valid-international-number": "Die angegebene Telefonnummer ist nicht korrekt. <br /> Bitte gebe eine Telefonnummer im internationalen Format an...",
|
||||||
"this-card-is": "Diese Karte ist",
|
"the-scans-distance-must-be-greater-than-0m": "Die Distanz muss größer als 0m sein.",
|
||||||
"this-might-take-a-moment": "Das könnte einen kleinen Moment dauern",
|
"the-scanstations-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again": "Der Scannerstation Token wird nur einmal angezeigt - du kannst ihn nicht ändern oder ihn dir nochmal anzeigen lassen!",
|
||||||
"this-scanstation-is": "Diese Station ist",
|
"the-statsclient-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again": "Der Statsclient Token wird nur einmal angezeigt - du kannst ihn nicht ändern oder ihn dir nochmal anzeigen lassen!",
|
||||||
"token": "Token",
|
"there-are-no-cards-yet": "Es gibt noch keine Läuferkarten.",
|
||||||
"total-distance": "gelaufene Strecke",
|
"there-are-no-contacts-added-yet": "Es wurden noch keine Kontakte hinzugefügt.",
|
||||||
"total-donation-amount": "Gesamtbetrag",
|
"there-are-no-donations-yet": "Es gibt noch keine Sponsorings",
|
||||||
"total-donations": "Spendensumme",
|
"there-are-no-donors-yet": "Es gibt noch keine Sponsor:innen",
|
||||||
"total-paid-amount": "Gezahlter Gesamtbetrag",
|
"there-are-no-groups-yet": "Es gibt noch keine Gruppen",
|
||||||
"total-scans": "gesamte Scans",
|
"there-are-no-organizations-added-yet": "Es wurden noch keine Organisationen hinzugefügt.",
|
||||||
"total_donation_amount_in_eur": "Gesamtbetrag in €",
|
"there-are-no-runners-added-yet": "Es wurden noch keine Läufer:innen hinzugefügt.",
|
||||||
"track": "Track",
|
"there-are-no-scans-yet": "Es gibt noch keine Scans",
|
||||||
"track-added": "Track hinzugefügt",
|
"there-are-no-teams-added-yet": "Es wurden noch keine Teams hinzugefügt.",
|
||||||
"track-data-is-being-loaded": "Trackdaten werden geladen",
|
"there-are-no-users-added-yet": "Es wurden noch keine Benutzer hinzugefügt.",
|
||||||
"track-is-being-added": "Track wird hinzugefügt...",
|
"this-card-is": "Diese Karte ist",
|
||||||
"track-is-being-updated": "Track wird aktualisiert...",
|
"this-might-take-a-moment": "Das könnte einen kleinen Moment dauern",
|
||||||
"track-length-in-m": "Tracklänge (in Metern)",
|
"this-scanstation-is": "Diese Station ist",
|
||||||
"track-length-must-be-greater-than-0": "Die Länge muss größer als 0 (Meter) sein",
|
"timestamp": "Timestamp",
|
||||||
"track-name": "Trackname",
|
"token": "Token",
|
||||||
"track-name-must-not-be-empty": "Der Name muss angegeben werden",
|
"total-distance": "gelaufene Strecke",
|
||||||
"track-was-updated": "Track wurde aktualisiert",
|
"total-donation-amount": "Gesamtbetrag",
|
||||||
"tracks": "Tracks",
|
"total-donations": "Spendensumme",
|
||||||
"unpaid": "Offen",
|
"total-paid-amount": "Gezahlter Gesamtbetrag",
|
||||||
"update-card": "Karte aktualisieren",
|
"total-scans": "gesamte Scans",
|
||||||
"update-password": "Passwort ändern",
|
"total_donation_amount_in_eur": "Gesamtbetrag in €",
|
||||||
"updated-contact": "Kontakt aktualisiert!",
|
"track": "Track",
|
||||||
"updated-donor": "Sponsor:in wurde aktualisiert",
|
"track-added": "Track hinzugefügt",
|
||||||
"updated-organization": "Organisation wurde aktualisiert",
|
"track-data-is-being-loaded": "Trackdaten werden geladen",
|
||||||
"updated-scan": "Scan wurde aktualisiert",
|
"track-is-being-added": "Track wird hinzugefügt...",
|
||||||
"updated-team": "Team wurde aktualisiert",
|
"track-is-being-updated": "Track wird aktualisiert...",
|
||||||
"updateing-group": "Gruppe wird aktualisiert...",
|
"track-length-in-m": "Tracklänge (in Metern)",
|
||||||
"updating-card": "Karte wird aktualisiert",
|
"track-length-must-be-greater-than-0": "Die Länge muss größer als 0 (Meter) sein",
|
||||||
"updating-donation": "Sponsoring wird aktualisiert",
|
"track-name": "Trackname",
|
||||||
"updating-organization": "Organisation wird aktualisiert",
|
"track-name-must-not-be-empty": "Der Name muss angegeben werden",
|
||||||
"updating-permissions": "Berechtigungen werden aktualisiert...",
|
"track-was-updated": "Track wurde aktualisiert",
|
||||||
"updating-runner": "Läufer:in wird aktualisiert.",
|
"tracks": "Tracks",
|
||||||
"updating-team": "Team wird aktualisiert",
|
"unpaid": "Offen",
|
||||||
"updating-user": "Benutzer:in wird aktualisiert...",
|
"update-card": "Karte aktualisieren",
|
||||||
"updating-your-profile": "Profil wird aktualisiert...",
|
"update-password": "Passwort ändern",
|
||||||
"user-added": "Benutzer hinzugefügt",
|
"updated-contact": "Kontakt aktualisiert!",
|
||||||
"user-groups": "Benutzergruppen",
|
"updated-donor": "Sponsor:in wurde aktualisiert",
|
||||||
"user-is-being-added": "Benutzer wird hinzugefügt ...",
|
"updated-organization": "Organisation wurde aktualisiert",
|
||||||
"user-updated": "Benutzer:in wurde aktualisiert",
|
"updated-scan": "Scan wurde aktualisiert",
|
||||||
"username": "Benutzername",
|
"updated-team": "Team wurde aktualisiert",
|
||||||
"users": "Benutzer",
|
"updateing-group": "Gruppe wird aktualisiert...",
|
||||||
"valid": "Gültig",
|
"updating-card": "Karte wird aktualisiert",
|
||||||
"valid-city-is-required": "Du musst eine Stadt angeben",
|
"updating-donation": "Sponsoring wird aktualisiert",
|
||||||
"valid-email-is-required": "Es wird eine valide E-Mail Adresse benötigt",
|
"updating-organization": "Organisation wird aktualisiert",
|
||||||
"valid-international-phone-number-is-required": "Du musst eine Telefonnummer im internationalen Format angeben...",
|
"updating-permissions": "Berechtigungen werden aktualisiert...",
|
||||||
"valid-zipcode-postal-code-is-required": "Du musst eine valide Postleitzahl angeben",
|
"updating-runner": "Läufer:in wird aktualisiert.",
|
||||||
"verfuegbare": "Verfügbar",
|
"updating-team": "Team wird aktualisiert",
|
||||||
"welcome_wavinghand": "Willkommen 👋",
|
"updating-user": "Benutzer:in wird aktualisiert...",
|
||||||
"yes-i-copied-the-token": "Ja, ich habe den Token kopiert",
|
"updating-your-profile": "Profil wird aktualisiert...",
|
||||||
"you-are-going-to-loose-all-permissions-and-access-to-the-runner-system": "Du wirst all deine Berechtigungen und den Zugriff aufs Läufersystem verlieren!",
|
"user-added": "Benutzer hinzugefügt",
|
||||||
"you-can-enter-the-donations-paid-amount-manually-or-use-the-max-button-to-use-the-donations-exact-amount": "Du kannst den Betrag der Zahlung entweder manuell eingeben oder über den MAX Button auf den Spendenbetrag setzen",
|
"user-groups": "Benutzergruppen",
|
||||||
"you-can-now-use-your-new-password-to-log-in-to-your-account": "Du kannst dich jetzt mit deinem neuen Passwort anmelden! 🎉",
|
"user-is-being-added": "Benutzer wird hinzugefügt ...",
|
||||||
"you-can-provide-a-runner-but-you-dont-have-to": "Du kannst eine Läufer:in angeben, musst aber nicht.",
|
"user-updated": "Benutzer:in wurde aktualisiert",
|
||||||
"you-dont-have-any-scanclients-yet": "Es gibt noch keine Statsclients",
|
"username": "Benutzername",
|
||||||
"you-dont-have-any-scanstations-yet": "Es gibt noch keine Scannerstationen",
|
"users": "Benutzer",
|
||||||
"you-have-to-provide-an-organization": "Du musst eine Organisation angeben",
|
"valid": "Gültig",
|
||||||
"you-have-to-save-your-changes-to-generate-a-link": "Du musst deine Änderungen speichern, um einen Link zu generieren.",
|
"valid-city-is-required": "Du musst eine Stadt angeben",
|
||||||
"you-must-create-at-least-one-card-or-cancel": "Du musst mindestens eine Blankokarte erstellen (oder abbrechen).",
|
"valid-email-is-required": "Es wird eine valide E-Mail Adresse benötigt",
|
||||||
"zip-postal-code": "Postleitzahl",
|
"valid-international-phone-number-is-required": "Du musst eine Telefonnummer im internationalen Format angeben...",
|
||||||
"delete-cards": "Karten löschen",
|
"valid-zipcode-postal-code-is-required": "Du musst eine valide Postleitzahl angeben",
|
||||||
"cards-deleted": "Karten gelöscht"
|
"verfuegbare": "Verfügbar",
|
||||||
}
|
"welcome_wavinghand": "Willkommen 👋",
|
||||||
|
"yes-i-copied-the-token": "Ja, ich habe den Token kopiert",
|
||||||
|
"you-are-going-to-loose-all-permissions-and-access-to-the-runner-system": "Du wirst all deine Berechtigungen und den Zugriff aufs Läufersystem verlieren!",
|
||||||
|
"you-can-enter-the-donations-paid-amount-manually-or-use-the-max-button-to-use-the-donations-exact-amount": "Du kannst den Betrag der Zahlung entweder manuell eingeben oder über den MAX Button auf den Spendenbetrag setzen",
|
||||||
|
"you-can-now-use-your-new-password-to-log-in-to-your-account": "Du kannst dich jetzt mit deinem neuen Passwort anmelden! 🎉",
|
||||||
|
"you-can-provide-a-runner-but-you-dont-have-to": "Du kannst eine Läufer:in angeben, musst aber nicht.",
|
||||||
|
"you-dont-have-any-scanclients-yet": "Es gibt noch keine Statsclients",
|
||||||
|
"you-dont-have-any-scanstations-yet": "Es gibt noch keine Scannerstationen",
|
||||||
|
"you-have-to-provide-an-organization": "Du musst eine Organisation angeben",
|
||||||
|
"you-have-to-save-your-changes-to-generate-a-link": "Du musst deine Änderungen speichern, um einen Link zu generieren.",
|
||||||
|
"you-must-create-at-least-one-card-or-cancel": "Du musst mindestens eine Blankokarte erstellen (oder abbrechen).",
|
||||||
|
"zip-postal-code": "Postleitzahl"
|
||||||
|
}
|
||||||
@@ -1,479 +1,491 @@
|
|||||||
{
|
{
|
||||||
"404message": "Sorry, the page you are looking for could not be found.",
|
"404message": "Sorry, the page you are looking for could not be found.",
|
||||||
"404title": "Error 404",
|
"404title": "Error 404",
|
||||||
"about": "About",
|
"about": "About",
|
||||||
"action": "Action",
|
"action": "Action",
|
||||||
"active": "Active",
|
"active": "Active",
|
||||||
"add-card": "Add Card",
|
"add-card": "Add Card",
|
||||||
"add-donation": "Add donation",
|
"add-donation": "Add donation",
|
||||||
"add-donor": "Add donor",
|
"add-donor": "Add donor",
|
||||||
"add-or-update-a-payment": "Add or update a payment",
|
"add-or-update-a-payment": "Add or update a payment",
|
||||||
"add-scan": "Add scan",
|
"add-scan": "Add scan",
|
||||||
"add-the-first-scanstation": "Add your first scanstation.",
|
"add-the-first-scanstation": "Add your first scanstation.",
|
||||||
"add-the-first-statsclient": "Add your first statsclient.",
|
"add-the-first-statsclient": "Add your first statsclient.",
|
||||||
"add-user-group": "Add User Group",
|
"add-user-group": "Add User Group",
|
||||||
"add-your-first-card": "Add your first card",
|
"add-your-first-card": "Add your first card",
|
||||||
"add-your-first-contact": "Add your first contact",
|
"add-your-first-contact": "Add your first contact",
|
||||||
"add-your-first-donor": "add your first donor",
|
"add-your-first-donor": "add your first donor",
|
||||||
"add-your-first-group": "Add your first group",
|
"add-your-first-group": "Add your first group",
|
||||||
"add-your-first-organization": "Add your first organization",
|
"add-your-first-organization": "Add your first organization",
|
||||||
"add-your-first-runner": "Add your first runner",
|
"add-your-first-runner": "Add your first runner",
|
||||||
"add-your-first-team": "Add your first team",
|
"add-your-first-team": "Add your first team",
|
||||||
"add-your-first-track": "Add your first track.",
|
"add-your-first-track": "Add your first track.",
|
||||||
"add-your-first-user": "Add your first user",
|
"add-your-first-user": "Add your first user",
|
||||||
"add-your-fist-donation": "Add your fist donation",
|
"add-your-fist-donation": "Add your fist donation",
|
||||||
"add-your-fist-scan": "Add your fist scan",
|
"add-your-fist-scan": "Add your fist scan",
|
||||||
"adding-card": "Adding Card",
|
"adding-card": "Adding Card",
|
||||||
"adding-donation": "Adding donation...",
|
"adding-donation": "Adding donation...",
|
||||||
"adding-scan": "Adding Scan",
|
"adding-scan": "Adding Scan",
|
||||||
"address": "Address",
|
"address": "Address",
|
||||||
"address-is-required": "Address is required",
|
"address-is-required": "Address is required",
|
||||||
"after-deletion-we-cant-restore-your-old-profile": "After deletion we can't restore your old profile!",
|
"after-deletion-we-cant-restore-your-old-profile": "After deletion we can't restore your old profile!",
|
||||||
"after-the-update-youll-get-logged-out-please-login-with-your-new-password-after-that": "After the update you'll get logged out - Please login with your new password after that.",
|
"after-the-update-youll-get-logged-out-please-login-with-your-new-password-after-that": "After the update you'll get logged out - Please login with your new password after that.",
|
||||||
"all": "all",
|
"all": "all",
|
||||||
"all-associated-donations-will-get-deleted-as-well": "All associated donations will get deleted as well",
|
"all-associated-donations-will-get-deleted-as-well": "All associated donations will get deleted as well",
|
||||||
"all-associated-runners-will-be-deleted-too": "All associated runners will be deleted too!",
|
"all-associated-runners-will-be-deleted-too": "All associated runners will be deleted too!",
|
||||||
"all-associated-teams-and-runners-will-be-deleted-too": "All associated teams and runners will be deleted too!",
|
"all-associated-scans-will-get-deleted-as-well": "All associated scans will get deleted as well",
|
||||||
"already-paid": "Already paid",
|
"all-associated-teams-and-runners-will-be-deleted-too": "All associated teams and runners will be deleted too!",
|
||||||
"amount": "Amount",
|
"already-paid": "Already paid",
|
||||||
"amount-per-kilometer": "Amount per kilometer",
|
"amount": "Amount",
|
||||||
"apartment-suite-etc": "Apartment, suite, etc.",
|
"amount-per-kilometer": "Amount per kilometer",
|
||||||
"application_name": "Lauf für Kaya! - Admin",
|
"apartment-suite-etc": "Apartment, suite, etc.",
|
||||||
"applying-changes": "Applying Changes",
|
"application_name": "Lauf für Kaya! - Admin",
|
||||||
"attention": "Attention!",
|
"applying-changes": "Applying Changes",
|
||||||
"author": "Author",
|
"attention": "Attention!",
|
||||||
"bitte-bestaetige-diese-laeufer-fuer-den-import": "Please confirm these runners for import.",
|
"author": "Author",
|
||||||
"by": "by",
|
"bitte-bestaetige-diese-laeufer-fuer-den-import": "Please confirm these runners for import.",
|
||||||
"cancel": "Cancel",
|
"by": "by",
|
||||||
"cancel-delete": "Cancel Delete",
|
"cancel": "Cancel",
|
||||||
"cancel-keep-donor": "Cancel, keep donor",
|
"cancel-delete": "Cancel Delete",
|
||||||
"cancel-keep-my-profile": "Cancel, keep my profile",
|
"cancel-keep-donor": "Cancel, keep donor",
|
||||||
"cancel-keep-organization": "Cancel, keep organization",
|
"cancel-keep-my-profile": "Cancel, keep my profile",
|
||||||
"cancel-keep-statsclient": "Cancel and keep statsclient",
|
"cancel-keep-organization": "Cancel, keep organization",
|
||||||
"cancel-keep-team": "Cancel, keep team",
|
"cancel-keep-station": "Cancel, keep station",
|
||||||
"cannot-reset-your-password-directly": "Bummer. We unfortunately cannot reset your password directly. Please send us a mail and confirm your identity",
|
"cancel-keep-statsclient": "Cancel and keep statsclient",
|
||||||
"card-added": "Card added",
|
"cancel-keep-team": "Cancel, keep team",
|
||||||
"card-deleted": "Card deleted",
|
"cannot-reset-your-password-directly": "Bummer. We unfortunately cannot reset your password directly. Please send us a mail and confirm your identity",
|
||||||
"card-updated": "Card updated",
|
"card": "card",
|
||||||
"cards": "Cards",
|
"card-added": "Card added",
|
||||||
"certificates": "Certificates",
|
"card-deleted": "Card deleted",
|
||||||
"change-your-password-here": "Change your password here",
|
"card-updated": "Card updated",
|
||||||
"changing-your-password": "Changing your password",
|
"cards": "Cards",
|
||||||
"city": "City",
|
"cards-deleted": "Cards deleted",
|
||||||
"click-to-copy-the-link-into-your-clipboard": "Click to copy the link into your clipboard",
|
"certificates": "Certificates",
|
||||||
"click-to-copy-token-to-clipboard": "Click to copy the token to your clipboard",
|
"change-your-password-here": "Change your password here",
|
||||||
"close": "Close",
|
"changing-your-password": "Changing your password",
|
||||||
"code": "Code",
|
"city": "City",
|
||||||
"configure-the-tracks-and-minimum-lap-times": "configure the tracks & minimum lap times",
|
"click-to-copy-the-link-into-your-clipboard": "Click to copy the link into your clipboard",
|
||||||
"confirm": "Confirm",
|
"click-to-copy-token-to-clipboard": "Click to copy the token to your clipboard",
|
||||||
"confirm-delete": "Confirm Delete",
|
"close": "Close",
|
||||||
"confirm-delete-donor-with-all-donations": "Confirm, delete donor with all donations",
|
"code": "Code",
|
||||||
"confirm-delete-my-user-profile": "Confirm, delete my user profile",
|
"configure-the-tracks-and-minimum-lap-times": "configure the tracks & minimum lap times",
|
||||||
"confirm-delete-organization-and-associated-teams-runners": "Confirm, delete organization and associated teams+runners.",
|
"confirm": "Confirm",
|
||||||
"confirm-delete-statsclient": "Confirm, delete statsclient",
|
"confirm-delete": "Confirm Delete",
|
||||||
"confirm-delete-team-and-associated-runners": "Confirm, delete team and associated runners.",
|
"confirm-delete-donor-with-all-donations": "Confirm, delete donor with all donations",
|
||||||
"confirm-deletion": "Confirm Deletion",
|
"confirm-delete-my-user-profile": "Confirm, delete my user profile",
|
||||||
"confirm-the-new-password": "Confirm the new password",
|
"confirm-delete-organization-and-associated-teams-runners": "Confirm, delete organization and associated teams+runners.",
|
||||||
"contact": "Contact",
|
"confirm-delete-station-with-all-scans": "Confirm deletion of station with all scans",
|
||||||
"contact-added": "Contact added",
|
"confirm-delete-statsclient": "Confirm, delete statsclient",
|
||||||
"contact-deleted": "Contact deleted",
|
"confirm-delete-team-and-associated-runners": "Confirm, delete team and associated runners.",
|
||||||
"contact-information": "Contact Information",
|
"confirm-deletion": "Confirm Deletion",
|
||||||
"contact-is-being-added": "Contact is being added...",
|
"confirm-the-new-password": "Confirm the new password",
|
||||||
"contact-is-being-updated": "Contact is being updated...",
|
"contact": "Contact",
|
||||||
"contact-is-not-a-member-in-any-group": "Contact is not a member in any group",
|
"contact-added": "Contact added",
|
||||||
"contacts": "Contacts",
|
"contact-deleted": "Contact deleted",
|
||||||
"contacts-are-being-loaded": "contacts are being loaded...",
|
"contact-information": "Contact Information",
|
||||||
"copied-link-to-clipboard": "Copied link to clipboard",
|
"contact-is-being-added": "Contact is being added...",
|
||||||
"copied-token-to-clipboard": "Copied token to clipboard",
|
"contact-is-being-updated": "Contact is being updated...",
|
||||||
"count_organizations": "# Organizations",
|
"contact-is-not-a-member-in-any-group": "Contact is not a member in any group",
|
||||||
"count_teams": "# Teams",
|
"contacts": "Contacts",
|
||||||
"create": "Create",
|
"contacts-are-being-loaded": "contacts are being loaded...",
|
||||||
"create-a-new": "Create a new",
|
"copied-link-to-clipboard": "Copied link to clipboard",
|
||||||
"create-a-new-card": "Create a new card",
|
"copied-token-to-clipboard": "Copied token to clipboard",
|
||||||
"create-a-new-contact": "Create a new contact",
|
"count_organizations": "# Organizations",
|
||||||
"create-a-new-distance-donation": "Create a new distance donation",
|
"count_teams": "# Teams",
|
||||||
"create-a-new-donor": "Create a new donor",
|
"create": "Create",
|
||||||
"create-a-new-fixed-donation": "Create a new fixed donation",
|
"create-a-new": "Create a new",
|
||||||
"create-a-new-organization": "Create a new Organization",
|
"create-a-new-card": "Create a new card",
|
||||||
"create-a-new-runner": "Create a new Runner",
|
"create-a-new-contact": "Create a new contact",
|
||||||
"create-a-new-scan-fixed-only": "Create a new scan (fixed only)",
|
"create-a-new-distance-donation": "Create a new distance donation",
|
||||||
"create-a-new-scanstation": "Create a new station",
|
"create-a-new-donor": "Create a new donor",
|
||||||
"create-a-new-statsclient": "Create a new statsclient",
|
"create-a-new-fixed-donation": "Create a new fixed donation",
|
||||||
"create-a-new-team": "Create a new team",
|
"create-a-new-organization": "Create a new Organization",
|
||||||
"create-a-new-track": "Create a new Track",
|
"create-a-new-runner": "Create a new Runner",
|
||||||
"create-a-new-user": "Create a new User",
|
"create-a-new-scan-fixed-only": "Create a new scan (fixed only)",
|
||||||
"create-a-new-user-group": "Create a new user group",
|
"create-a-new-scanstation": "Create a new station",
|
||||||
"create-and-generate-pdf": "Create and generate PDF",
|
"create-a-new-statsclient": "Create a new statsclient",
|
||||||
"create-bulk-blanco-cards": "Create bulk blanco cards",
|
"create-a-new-team": "Create a new team",
|
||||||
"create-bulk-cards": "Add blanco cards",
|
"create-a-new-track": "Create a new Track",
|
||||||
"create-organization": "Create Organization",
|
"create-a-new-user": "Create a new User",
|
||||||
"create-team": "Create Team",
|
"create-a-new-user-group": "Create a new user group",
|
||||||
"create-track": "Create Track",
|
"create-and-generate-pdf": "Create and generate PDF",
|
||||||
"create-user": "Create User",
|
"create-bulk-blanco-cards": "Create bulk blanco cards",
|
||||||
"create-without-pdf": "Create without PDF",
|
"create-bulk-cards": "Add blanco cards",
|
||||||
"created-blanco-cards": "Created blanco cards",
|
"create-organization": "Create Organization",
|
||||||
"creating-blanco-cards": "Creating blanco cards",
|
"create-team": "Create Team",
|
||||||
"credits": "Credits",
|
"create-track": "Create Track",
|
||||||
"csv_import__class": "Class",
|
"create-user": "Create User",
|
||||||
"csv_import__firstname": "Firstname",
|
"create-without-pdf": "Create without PDF",
|
||||||
"csv_import__lastname": "Lastname",
|
"created-blanco-cards": "Created blanco cards",
|
||||||
"csv_import__middlename": "Middlename",
|
"creating-blanco-cards": "Creating blanco cards",
|
||||||
"csv_import__team": "Team",
|
"credits": "Credits",
|
||||||
"danger-zone": "Danger zone",
|
"csv_import__class": "Class",
|
||||||
"dashboard-greeting": "Hello",
|
"csv_import__firstname": "Firstname",
|
||||||
"dashboard-title": "Dashboard",
|
"csv_import__lastname": "Lastname",
|
||||||
"datatable": {
|
"csv_import__middlename": "Middlename",
|
||||||
"search": "🔍 Search...",
|
"csv_import__team": "Team",
|
||||||
"sort_column_ascending": "Sort column ascending",
|
"danger-zone": "Danger zone",
|
||||||
"sort_column_descending": "Sort column descending",
|
"dashboard-greeting": "Hello",
|
||||||
"previous": "Previous",
|
"dashboard-title": "Dashboard",
|
||||||
"next": "Next",
|
"datatable": {
|
||||||
"page": "Page",
|
"search": "🔍 Search...",
|
||||||
"showing": "Showing",
|
"sort_column_ascending": "Sort column ascending",
|
||||||
"records": "Records",
|
"sort_column_descending": "Sort column descending",
|
||||||
"of": "of",
|
"previous": "Previous",
|
||||||
"to": "to",
|
"next": "Next",
|
||||||
"loading": "Loading...",
|
"page": "Page",
|
||||||
"no_matching_records_found": "No matching records found",
|
"showing": "Showing",
|
||||||
"an_error_happened_while_fetching_the_data": "An error happened while fetching the data"
|
"records": "Records",
|
||||||
},
|
"of": "of",
|
||||||
"delete": "Delete",
|
"to": "to",
|
||||||
"delete-contact": "Delete Contact",
|
"loading": "Loading...",
|
||||||
"delete-donation": "Delete Donation",
|
"no_matching_records_found": "No matching records found",
|
||||||
"delete-donor": "Delete donor",
|
"an_error_happened_while_fetching_the_data": "An error happened while fetching the data"
|
||||||
"delete-group": "Delete Group",
|
},
|
||||||
"delete-organization": "Delete Organization",
|
"delete": "Delete",
|
||||||
"delete-profile": "Delete Profile",
|
"delete-cards": "Delete cards",
|
||||||
"delete-runner": "Delete Runner",
|
"delete-contact": "Delete Contact",
|
||||||
"delete-scan": "Delete scan",
|
"delete-donation": "Delete Donation",
|
||||||
"delete-station": "Delete station",
|
"delete-donor": "Delete donor",
|
||||||
"delete-statsclient": "Delete statsclient",
|
"delete-group": "Delete Group",
|
||||||
"delete-team": "Delete Team",
|
"delete-organization": "Delete Organization",
|
||||||
"delete-user": "Delete User",
|
"delete-profile": "Delete Profile",
|
||||||
"deleted-scan": "Deleted scan",
|
"delete-runner": "Delete Runner",
|
||||||
"dependency_name": "Name",
|
"delete-scan": "Delete scan",
|
||||||
"description": "description",
|
"delete-scans": "Delete scans",
|
||||||
"description-optional": "Description (optional)",
|
"delete-station": "Delete station",
|
||||||
"deselect-all": "deselect all",
|
"delete-statsclient": "Delete statsclient",
|
||||||
"details": "Details",
|
"delete-team": "Delete Team",
|
||||||
"disabled": "disabled",
|
"delete-user": "Delete User",
|
||||||
"distance": "Distance",
|
"deleted-scan": "Deleted scan",
|
||||||
"distance-donation": "distance donation",
|
"dependency_name": "Name",
|
||||||
"distance-in-km": "Distance in km",
|
"description": "description",
|
||||||
"distance-track": "Distance (+Track)",
|
"description-optional": "Description (optional)",
|
||||||
"do-you-really-want-to-delete-your-profile": "Do you really want to delete your profile?",
|
"deselect-all": "deselect all",
|
||||||
"do-you-want-to-delete-the-organization-delete_org-name": "Do you want to delete the organization {orgname}?",
|
"details": "Details",
|
||||||
"do-you-want-to-delete-the-team-delete_team-name": "Do you want to delete the team {teamname}?",
|
"disabled": "disabled",
|
||||||
"do-you-want-to-delete-this-donor-with-all-related-donations": "Do you want to delete this donor with all related donations",
|
"distance": "Distance",
|
||||||
"documentation": "Documentation",
|
"distance-donation": "distance donation",
|
||||||
"donation-amount": "Donation amount",
|
"distance-in-km": "Distance in km",
|
||||||
"donation-amount-must-be-greater-that-0-00eur": "Donation amount must be greater that 0.00€",
|
"distance-track": "Distance (+Track)",
|
||||||
"donation-deleted": "Donation deleted",
|
"do-you-really-want-to-delete-your-profile": "Do you really want to delete your profile?",
|
||||||
"donation-updated": "Donation updated",
|
"do-you-want-to-delete-the-organization-delete_org-name": "Do you want to delete the organization {orgname}?",
|
||||||
"donation_added": "Donation_added",
|
"do-you-want-to-delete-the-team-delete_team-name": "Do you want to delete the team {teamname}?",
|
||||||
"donations": "Donations",
|
"do-you-want-to-delete-this-donor-with-all-related-donations": "Do you want to delete this donor with all related donations",
|
||||||
"donor": "Donor",
|
"documentation": "Documentation",
|
||||||
"donor-added": "Donor added",
|
"donation-amount": "Donation amount",
|
||||||
"donor-deleted": "donor deleted",
|
"donation-amount-must-be-greater-that-0-00eur": "Donation amount must be greater that 0.00€",
|
||||||
"donor-has-no-associated-donations": "Donor has no associated donations.",
|
"donation-deleted": "Donation deleted",
|
||||||
"donor-is-being-added": "Donor is being added...",
|
"donation-updated": "Donation updated",
|
||||||
"donor-is-being-updated": "Donor is being updated",
|
"donation_added": "Donation_added",
|
||||||
"donors": "Donors",
|
"donations": "Donations",
|
||||||
"donors-are-being-loaded": "donors are being loaded",
|
"donor": "Donor",
|
||||||
"dont-have-your-email-connected": "Don't have your email connected?",
|
"donor-added": "Donor added",
|
||||||
"dont-panic-were-resetting-it": "Don't panic, we're resetting it ✌",
|
"donor-deleted": "donor deleted",
|
||||||
"e-mail-adress": "E-Mail Adress",
|
"donor-has-no-associated-donations": "Donor has no associated donations.",
|
||||||
"edit": "Edit",
|
"donor-is-being-added": "Donor is being added...",
|
||||||
"edit-a-card": "Edit a card",
|
"donor-is-being-updated": "Donor is being updated",
|
||||||
"edit-permissions": "edit permissions",
|
"donors": "Donors",
|
||||||
"email_address_or_username": "Email / username",
|
"donors-are-being-loaded": "donors are being loaded",
|
||||||
"enabled": "enabled",
|
"dont-have-your-email-connected": "Don't have your email connected?",
|
||||||
"enabled_large": "Enabled",
|
"dont-panic-were-resetting-it": "Don't panic, we're resetting it ✌",
|
||||||
"english": "English",
|
"e-mail-adress": "E-Mail Adress",
|
||||||
"enter-payment": "Enter payment",
|
"edit": "Edit",
|
||||||
"error-during-import": "Error during import",
|
"edit-a-card": "Edit a card",
|
||||||
"error-whyile-copying-to-clipboard": "Error while copying to clipboard",
|
"edit-permissions": "edit permissions",
|
||||||
"error_on_login": "Error on login",
|
"email_address_or_username": "Email / username",
|
||||||
"erteilte": "Directly granted",
|
"enabled": "enabled",
|
||||||
"everything-concerning-your-profile": "Everything concerning your profile",
|
"enabled_large": "Enabled",
|
||||||
"everything-is-more-fun-together": "everything is more fun together 🏃♂️🏃♀️🏃♂️",
|
"english": "English",
|
||||||
"faq": "FAQ",
|
"enter-payment": "Enter payment",
|
||||||
"filename_sponsoringquittungsliste": "DonorReceiptList",
|
"error-during-import": "Error during import",
|
||||||
"filter-by-organization-team": "Filter by Organization/ Team",
|
"error-whyile-copying-to-clipboard": "Error while copying to clipboard",
|
||||||
"first-name": "First name",
|
"error_on_login": "Error on login",
|
||||||
"first-name-is-required": "First Name is required",
|
"erteilte": "Directly granted",
|
||||||
"first-scan-of-the-day": "First scan of the day.",
|
"everything-concerning-your-profile": "Everything concerning your profile",
|
||||||
"fixed-donation": "fixed donation",
|
"everything-is-more-fun-together": "everything is more fun together 🏃♂️🏃♀️🏃♂️",
|
||||||
"forgot_password": "Forgot your password?",
|
"faq": "FAQ",
|
||||||
"geerbte": "inherited",
|
"filename_sponsoringquittungsliste": "DonorReceiptList",
|
||||||
"general-stats": "General Stats",
|
"filter-by-organization-team": "Filter by Organization/ Team",
|
||||||
"general_promise_error": "😢 Error",
|
"first-name": "First name",
|
||||||
"generate-runner-certificate": "Generate runner certificate",
|
"first-name-is-required": "First Name is required",
|
||||||
"generate-runner-certificates": "Generate runner certificates",
|
"first-scan-of-the-day": "First scan of the day.",
|
||||||
"generate-runnercards": "Generate Runnercards",
|
"fixed-donation": "fixed donation",
|
||||||
"generate-sponsoring-contract": "generate sponsoring contract",
|
"forgot_password": "Forgot your password?",
|
||||||
"generate-sponsoring-contracts": "generate sponsoring contracts",
|
"geerbte": "inherited",
|
||||||
"generating-pdf": "generating PDF...",
|
"general-stats": "General Stats",
|
||||||
"generating-pdfs": "generating PDFs...",
|
"general_promise_error": "😢 Error",
|
||||||
"generic-ui-logic-error": "Something went wrong in the UI logic",
|
"generate-runner-certificate": "Generate runner certificate",
|
||||||
"german": "German",
|
"generate-runner-certificates": "Generate runner certificates",
|
||||||
"go-to-login": "Go To Login",
|
"generate-runnercards": "Generate Runnercards",
|
||||||
"goback": "Go Home",
|
"generate-sponsoring-contract": "generate sponsoring contract",
|
||||||
"granted": "granted",
|
"generate-sponsoring-contracts": "generate sponsoring contracts",
|
||||||
"group": "Group",
|
"generating-pdf": "generating PDF...",
|
||||||
"group-added": "Group added",
|
"generating-pdfs": "generating PDFs...",
|
||||||
"group-is-being-added": "Group is being added...",
|
"generic-ui-logic-error": "Something went wrong in the UI logic",
|
||||||
"group-name-is-required": "Group name is required",
|
"german": "German",
|
||||||
"group-updated": "group updated",
|
"go-to-login": "Go To Login",
|
||||||
"groups": "Groups",
|
"goback": "Go Home",
|
||||||
"groups-are-being-loaded": "Groups are being loaded",
|
"granted": "granted",
|
||||||
"home": "Home",
|
"group": "Group",
|
||||||
"icon-image-credits": "We also want to thank these projects for illustrations and icons:",
|
"group-added": "Group added",
|
||||||
"if-you-want-to-create-multiple-blanco-cards-try-the-add-bulk-button": "If you want to create multiple blanco cards: Try the 'Add blanco cards' button.",
|
"group-is-being-added": "Group is being added...",
|
||||||
"import-finished": "Import finished",
|
"group-name-is-required": "Group name is required",
|
||||||
"import-runners": "Import runners",
|
"group-updated": "group updated",
|
||||||
"import__target-organization": "Target Organization",
|
"groups": "Groups",
|
||||||
"imprint": "Imprint",
|
"groups-are-being-loaded": "Groups are being loaded",
|
||||||
"imprint-loading": "Imprint loading...",
|
"home": "Home",
|
||||||
"inactive": "Inactive",
|
"icon-image-credits": "We also want to thank these projects for illustrations and icons:",
|
||||||
"installed-version": "Installed version",
|
"if-you-want-to-create-multiple-blanco-cards-try-the-add-bulk-button": "If you want to create multiple blanco cards: Try the 'Add blanco cards' button.",
|
||||||
"internal-error": "Internal Error",
|
"import-finished": "Import finished",
|
||||||
"invalid": "Invalid",
|
"import-runners": "Import runners",
|
||||||
"invalid-mail-reset": "the provided email is invalid",
|
"import__target-organization": "Target Organization",
|
||||||
"just-enter-how-many-you-want-and-the-system-will-create-them": "Just enter how many you want and the system will create them",
|
"imprint": "Imprint",
|
||||||
"key": "Key",
|
"imprint-loading": "Imprint loading...",
|
||||||
"laeufer-hinzufuegen": "Add runner",
|
"inactive": "Inactive",
|
||||||
"laeufer-importieren": "Läufer importieren",
|
"installed-version": "Installed version",
|
||||||
"laptime": "Laptime",
|
"internal-error": "Internal Error",
|
||||||
"last-name": "Last name",
|
"invalid": "Invalid",
|
||||||
"last-name-is-required": "Last Name is required",
|
"invalid-mail-reset": "the provided email is invalid",
|
||||||
"lfk-is-os": "The \"Lauf für Kaya!\" Frontend is (like all other projects for the \"LfK!\" Also) an open source project.",
|
"just-enter-how-many-you-want-and-the-system-will-create-them": "Just enter how many you want and the system will create them",
|
||||||
"license": "License",
|
"key": "Key",
|
||||||
"licenses-are-being-loaded": "Licenses are being loaded...",
|
"laeufer-hinzufuegen": "Add runner",
|
||||||
"loading-cards": "Loading cards",
|
"laeufer-importieren": "Läufer importieren",
|
||||||
"loading-contact-details": "Loading contact details...",
|
"laptime": "Laptime",
|
||||||
"loading-donation-details": "Loading donation details",
|
"last-name": "Last name",
|
||||||
"loading-donor-details": "Loading donor details",
|
"last-name-is-required": "Last Name is required",
|
||||||
"loading-group-detail": "Loading group detail...",
|
"lfk-is-os": "The \"Lauf für Kaya!\" Frontend is (like all other projects for the \"LfK!\" Also) an open source project.",
|
||||||
"loading-profile-data": "Loading profile data",
|
"license": "License",
|
||||||
"loading-runners": "loading runners...",
|
"licenses-are-being-loaded": "Licenses are being loaded...",
|
||||||
"loading-station-details": "Loading station details",
|
"loading-cards": "Loading cards",
|
||||||
"log_in": "Log in",
|
"loading-contact-details": "Loading contact details...",
|
||||||
"log_in_to_your_account": "Log in to your account",
|
"loading-donation-details": "Loading donation details",
|
||||||
"login_is_checked": "Login is being checked...",
|
"loading-donor-details": "Loading donor details",
|
||||||
"logout": "Logout",
|
"loading-group-detail": "Loading group detail...",
|
||||||
"mail-validation-in-progress": "mail validation in progress...",
|
"loading-profile-data": "Loading profile data",
|
||||||
"manage-admin-users": "manage admin users",
|
"loading-runners": "loading runners...",
|
||||||
"middle-name": "Middle name",
|
"loading-station-details": "Loading station details",
|
||||||
"minimum-lap-time-in-s": "minimum lap time in s",
|
"log_in": "Log in",
|
||||||
"minimum-lap-time-must-be-a-positive-number-or-0": "minimum lap time must be a positive number or 0",
|
"log_in_to_your_account": "Log in to your account",
|
||||||
"must-be-at-least-10-characters-long": "Must be at least 10 characters long!",
|
"login_is_checked": "Login is being checked...",
|
||||||
"must-contain-a-lowercase-letter": "Must contain a lowercase letter!",
|
"logout": "Logout",
|
||||||
"must-contain-a-number": "Must contain a number!",
|
"mail-validation-in-progress": "mail validation in progress...",
|
||||||
"must-contain-a-uppercase-letter": "Must contain a uppercase letter!",
|
"manage-admin-users": "manage admin users",
|
||||||
"name": "Name",
|
"middle-name": "Middle name",
|
||||||
"name-is-required": "Name is required",
|
"minimum-lap-time-in-s": "minimum lap time in s",
|
||||||
"new-password": "New password",
|
"minimum-lap-time-must-be-a-positive-number-or-0": "minimum lap time must be a positive number or 0",
|
||||||
"no-contact-found": "No contacts found",
|
"must-be-at-least-10-characters-long": "Must be at least 10 characters long!",
|
||||||
"no-contact-selected": "No contact selected",
|
"must-contain-a-lowercase-letter": "Must contain a lowercase letter!",
|
||||||
"no-contact-specified": "no contact specified",
|
"must-contain-a-number": "Must contain a number!",
|
||||||
"no-donors-found": "No donors found",
|
"must-contain-a-uppercase-letter": "Must contain a uppercase letter!",
|
||||||
"no-license-text-could-be-found": "No license text could be found 😢",
|
"name": "Name",
|
||||||
"no-organization-or-team-found": "No organization or team found",
|
"name-is-required": "Name is required",
|
||||||
"no-organization-specified": "no organization specified",
|
"new-password": "New password",
|
||||||
"no-organizations-found": "No organizations found",
|
"no-contact-found": "No contacts found",
|
||||||
"no-runners-found": "No runners found",
|
"no-contact-selected": "No contact selected",
|
||||||
"no-tracks-added-yet": "there are no tracks added yet.",
|
"no-contact-specified": "no contact specified",
|
||||||
"non-blanko": "Non/Blanko",
|
"no-donors-found": "No donors found",
|
||||||
"open": "OPEN",
|
"no-license-text-could-be-found": "No license text could be found 😢",
|
||||||
"organization": "Organization",
|
"no-organization-or-team-found": "No organization or team found",
|
||||||
"organization-added": "Organization added",
|
"no-organization-specified": "no organization specified",
|
||||||
"organization-deleted": "Organization deleted",
|
"no-organizations-found": "No organizations found",
|
||||||
"organization-detail-is-being-loaded": "organization detail is being loaded...",
|
"no-runners-found": "No runners found",
|
||||||
"organization-is-being-added": "Organization is being added...",
|
"no-tracks-added-yet": "there are no tracks added yet.",
|
||||||
"organization-name-is-required": "Organization name is required",
|
"non-blanko": "Non/Blanko",
|
||||||
"organizations": "Organizations",
|
"open": "OPEN",
|
||||||
"organizations-are-being-loaded": "organizations are being loaded...",
|
"organization": "Organization",
|
||||||
"orgs": "Organizations",
|
"organization-added": "Organization added",
|
||||||
"oss_credit_description": "We use a lot of open source software on these projects, and would like to thank the following projects and contributors who help make open source great!",
|
"organization-deleted": "Organization deleted",
|
||||||
"paid": "PAID",
|
"organization-detail-is-being-loaded": "organization detail is being loaded...",
|
||||||
"paid-amount": "Paid amount",
|
"organization-is-being-added": "Organization is being added...",
|
||||||
"password": "Password",
|
"organization-name-is-required": "Organization name is required",
|
||||||
"password-changed": "Password changed!",
|
"organizations": "Organizations",
|
||||||
"password-is-required": "Password is required",
|
"organizations-are-being-loaded": "organizations are being loaded...",
|
||||||
"password-reset-failed": "Password reset failed!",
|
"orgs": "Organizations",
|
||||||
"password-reset-in-progress": "Password Reset in Progress...",
|
"oss_credit_description": "We use a lot of open source software on these projects, and would like to thank the following projects and contributors who help make open source great!",
|
||||||
"password-reset-mail-sent": "Password reset mail was sent to \"{usersEmail}\".",
|
"paid": "PAID",
|
||||||
"password-reset-successful": "Password Reset successful!",
|
"paid-amount": "Paid amount",
|
||||||
"passwords-dont-match": "Passwords don't match!",
|
"password": "Password",
|
||||||
"payment-amount-must-be-greater-than-0-00eur": "Payment amount must be greater than 0.00€!",
|
"password-changed": "Password changed!",
|
||||||
"pdf-generation-failed": "PDF generation failed!",
|
"password-is-required": "Password is required",
|
||||||
"pdf-successfully-generated": "PDF successfully generated!",
|
"password-reset-failed": "Password reset failed!",
|
||||||
"pdfs-successfully-generated": "PDFs successfully generated!",
|
"password-reset-in-progress": "Password Reset in Progress...",
|
||||||
"per-kilometer": "per Kilometer",
|
"password-reset-mail-sent": "Password reset mail was sent to \"{usersEmail}\".",
|
||||||
"permissions": "Permissions",
|
"password-reset-successful": "Password Reset successful!",
|
||||||
"permissions-updated": "Permissions updated!",
|
"passwords-dont-match": "Passwords don't match!",
|
||||||
"phone": "Phone",
|
"payment-amount-must-be-greater-than-0-00eur": "Payment amount must be greater than 0.00€!",
|
||||||
"please-copy-the-token-and-store-it-somewhere-save": "Please copy the token and store it somewhere safe.",
|
"pdf-generation-failed": "PDF generation failed!",
|
||||||
"please-provide-a-password": "Please provide a password...",
|
"pdf-successfully-generated": "PDF successfully generated!",
|
||||||
"please-provide-the-nessecary-information-to-add-a-new-donor": "Please provide the nessecary information to add a new donor",
|
"pdfs-successfully-generated": "PDFs successfully generated!",
|
||||||
"please-provide-the-nessecary-information-to-create-a-new-donation": "Please provide the nessecary information to create a new donation",
|
"per-kilometer": "per Kilometer",
|
||||||
"please-provide-the-nessecary-information-to-create-a-new-scan": "Please provide the nessecary information to create a new scan.",
|
"permissions": "Permissions",
|
||||||
"please-provide-the-required-csv-xlsx-file": "Please provide the required csv/ xlsx file",
|
"permissions-updated": "Permissions updated!",
|
||||||
"please-provide-the-required-information-for-creating-a-new-user-group": "Please provide the required information for creating a new user group.",
|
"phone": "Phone",
|
||||||
"please-provide-the-required-information-to-add-a-new-contact": "Please provide the required information to add a new contact.",
|
"please-confirm-the-deletion-of-card": "Please confirm the deletion of this card",
|
||||||
"please-provide-the-required-information-to-add-a-new-organization": "Please provide the required information to add a new organization.",
|
"please-confirm-the-deletion-of-runner": "Please confirm the deletion of this runner",
|
||||||
"please-provide-the-required-information-to-add-a-new-runner": "Please provide the required information to add a new runner.",
|
"please-confirm-the-deletion-of-scan": "Please confirm the deletion of scan",
|
||||||
"please-provide-the-required-information-to-add-a-new-team": "Please provide the required information to add a new team.",
|
"please-copy-the-token-and-store-it-somewhere-save": "Please copy the token and store it somewhere safe.",
|
||||||
"please-provide-the-required-information-to-add-a-new-track": "Please provide the required information to add a new track.",
|
"please-provide-a-password": "Please provide a password...",
|
||||||
"please-provide-the-required-information-to-add-a-new-user": "Please provide the required information to add a new user.",
|
"please-provide-the-nessecary-information-to-add-a-new-donor": "Please provide the nessecary information to add a new donor",
|
||||||
"please-provide-the-required-information-to-create-a-new-scanstation": "Please provide the required information to create a new scanstation",
|
"please-provide-the-nessecary-information-to-create-a-new-donation": "Please provide the nessecary information to create a new donation",
|
||||||
"please-provide-the-required-information-to-create-a-new-statsclient": "Please provide the required information to create a new statsclient",
|
"please-provide-the-nessecary-information-to-create-a-new-scan": "Please provide the nessecary information to create a new scan.",
|
||||||
"please-request-a-new-reset-mail": "Please request a new reset mail...",
|
"please-provide-the-required-csv-xlsx-file": "Please provide the required csv/ xlsx file",
|
||||||
"please-wait-a-moment-your-login-is-still-being-processed": "Please wait a moment, your login is still being processed",
|
"please-provide-the-required-information-for-creating-a-new-user-group": "Please provide the required information for creating a new user group.",
|
||||||
"prefix": "Prefix",
|
"please-provide-the-required-information-to-add-a-new-contact": "Please provide the required information to add a new contact.",
|
||||||
"privacy": "Privacy",
|
"please-provide-the-required-information-to-add-a-new-organization": "Please provide the required information to add a new organization.",
|
||||||
"privacy-loading": "Privacy loading...",
|
"please-provide-the-required-information-to-add-a-new-runner": "Please provide the required information to add a new runner.",
|
||||||
"profile": "Profile",
|
"please-provide-the-required-information-to-add-a-new-team": "Please provide the required information to add a new team.",
|
||||||
"profile-deleted": "Profile deleted!",
|
"please-provide-the-required-information-to-add-a-new-track": "Please provide the required information to add a new track.",
|
||||||
"profile-picture": "Profile Picture",
|
"please-provide-the-required-information-to-add-a-new-user": "Please provide the required information to add a new user.",
|
||||||
"profile-updated": "Profile updated!",
|
"please-provide-the-required-information-to-create-a-new-scanstation": "Please provide the required information to create a new scanstation",
|
||||||
"read-license": "Read License",
|
"please-provide-the-required-information-to-create-a-new-statsclient": "Please provide the required information to create a new statsclient",
|
||||||
"receipt-needed": "Receipt needed",
|
"please-request-a-new-reset-mail": "Please request a new reset mail...",
|
||||||
"repo_link": "Link",
|
"please-wait-a-moment-your-login-is-still-being-processed": "Please wait a moment, your login is still being processed",
|
||||||
"request-a-new-reset-mail": "Request a new reset mail",
|
"prefix": "Prefix",
|
||||||
"reset-my-password": "Reset my password",
|
"privacy": "Privacy",
|
||||||
"reset-password": "Reset your password",
|
"privacy-loading": "Privacy loading...",
|
||||||
"runner": "Runner",
|
"profile": "Profile",
|
||||||
"runner-added": "Runner added",
|
"profile-deleted": "Profile deleted!",
|
||||||
"runner-import": "Runner Import",
|
"profile-picture": "Profile Picture",
|
||||||
"runner-is-being-added": "Runner is being added...",
|
"profile-updated": "Profile updated!",
|
||||||
"runner-updated": "Runner updated!",
|
"read-license": "Read License",
|
||||||
"runnercards": "Runnercards",
|
"receipt-needed": "Receipt needed",
|
||||||
"runnerimport_verify_runners_org": "Please confirm these runners for import into the organization \"{org_name}\"",
|
"repo_link": "Link",
|
||||||
"runners": "Runners",
|
"request-a-new-reset-mail": "Request a new reset mail",
|
||||||
"runners-are-being-imported": "Runners are being imported...",
|
"reset-my-password": "Reset my password",
|
||||||
"runners-are-being-loaded": "runners are being loaded...",
|
"reset-password": "Reset your password",
|
||||||
"save": "Save",
|
"runner": "Runner",
|
||||||
"save-changes": "Save Changes",
|
"runner-added": "Runner added",
|
||||||
"scan-added": "Scan added",
|
"runner-deleted": "runner deleted",
|
||||||
"scan-is-being-updated": "Scan is being updated",
|
"runner-import": "Runner Import",
|
||||||
"scan-with-fixed-distance": "Scan with fixed distance",
|
"runner-is-being-added": "Runner is being added...",
|
||||||
"scans": "Scans",
|
"runner-updated": "Runner updated!",
|
||||||
"scans-are-being-loaded": "Scans are being loaded",
|
"runnercards": "Runnercards",
|
||||||
"scanstation": "Scanstation",
|
"runnerimport_verify_runners_org": "Please confirm these runners for import into the organization \"{org_name}\"",
|
||||||
"scanstation-added": "Scanstation added",
|
"runners": "Runners",
|
||||||
"scanstation-is-being-added": "Adding scanstation...",
|
"runners-are-being-imported": "Runners are being imported...",
|
||||||
"scanstations": "Scanstations",
|
"runners-are-being-loaded": "runners are being loaded...",
|
||||||
"scanstations-are-being-loaded": "Loading scanstations...",
|
"save": "Save",
|
||||||
"search-for-an-organization-by-name-or-id": "Search for an organization (by name or id)",
|
"save-changes": "Save Changes",
|
||||||
"search-for-an-organization-or-team-by-name-or-id": "Search for an organization or team (by name or id)",
|
"scan-added": "Scan added",
|
||||||
"search-for-donor-name-or-id": "Search for donor (by name or id)",
|
"scan-deleted": "scan deleted",
|
||||||
"search-for-permission": "Search for permission",
|
"scan-is-being-updated": "Scan is being updated",
|
||||||
"search-for-runner-by-name-or-id": "Search for runner (by name or id)",
|
"scan-with-fixed-distance": "Scan with fixed distance",
|
||||||
"select-all": "select all",
|
"scans": "Scans",
|
||||||
"select-language": "Select language",
|
"scans-are-being-loaded": "Scans are being loaded",
|
||||||
"selfservice-registration": "Selfservice registration",
|
"scanstation": "Scanstation",
|
||||||
"send-a-mail-to-lfk-odit-services": "send a mail to lfk@odit.services",
|
"scanstation-added": "Scanstation added",
|
||||||
"set-the-user-active-inactive": "set the user active/ inactive",
|
"scanstation-is-being-added": "Adding scanstation...",
|
||||||
"settings": "Settings",
|
"scanstations": "Scanstations",
|
||||||
"settings-for-your-profile": "Settings for your profile",
|
"scanstations-are-being-loaded": "Loading scanstations...",
|
||||||
"something-about-the-group": "Something about the group...",
|
"search-for-an-organization-by-name-or-id": "Search for an organization (by name or id)",
|
||||||
"sponsoring-quittungs-liste_herunterladen": "Download donor receipt list",
|
"search-for-an-organization-or-team-by-name-or-id": "Search for an organization or team (by name or id)",
|
||||||
"sponsorings": "Sponsorings",
|
"search-for-donor-name-or-id": "Search for donor (by name or id)",
|
||||||
"stats-are-being-loaded": "stats are being loaded...",
|
"search-for-permission": "Search for permission",
|
||||||
"statsclient-deleted": "Deleted statsclient",
|
"search-for-runner-by-name-or-id": "Search for runner (by name or id)",
|
||||||
"statsclient-is-being-added": "Statsclient is being added...",
|
"select-all": "select all",
|
||||||
"statsclients": "Statsclients (aka Beamershow)",
|
"select-language": "Select language",
|
||||||
"statsclients-are-being-loaded": "Loading statsclients",
|
"selfservice-registration": "Selfservice registration",
|
||||||
"status": "Status",
|
"send-a-mail-to-lfk-odit-services": "send a mail to lfk@odit.services",
|
||||||
"stuff-that-could-harm-your-profile": "Stuff that could harm your profile",
|
"set-the-user-active-inactive": "set the user active/ inactive",
|
||||||
"successful-password-reset": "Successful password reset!",
|
"settings": "Settings",
|
||||||
"team": "Team",
|
"settings-for-your-profile": "Settings for your profile",
|
||||||
"team-added": "Team added",
|
"something-about-the-group": "Something about the group...",
|
||||||
"team-deleted": "Team deleted",
|
"sponsoring-quittungs-liste_herunterladen": "Download donor receipt list",
|
||||||
"team-detail-is-being-loaded": "team detail is being loaded...",
|
"sponsorings": "Sponsorings",
|
||||||
"team-is-being-added": "Team is being added...",
|
"station-deleted": "station deleted",
|
||||||
"team-name": "Team name",
|
"stats-are-being-loaded": "stats are being loaded...",
|
||||||
"team-name-is-required": "team name is required",
|
"statsclient-deleted": "Deleted statsclient",
|
||||||
"teams": "Teams",
|
"statsclient-is-being-added": "Statsclient is being added...",
|
||||||
"teams-are-being-loaded": "teams are being loaded...",
|
"statsclients": "Statsclients (aka Beamershow)",
|
||||||
"the-provided-phone-number-is-invalid-less-than-br-greater-than-please-enter-a-valid-international-number": "the provided phone number is invalid.<br />please enter a valid international number...",
|
"statsclients-are-being-loaded": "Loading statsclients",
|
||||||
"the-scans-distance-must-be-greater-than-0m": "The scan's distance must be greater than 0m",
|
"status": "Status",
|
||||||
"the-scanstations-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again": "The scanstation api token will only get displayed once - you won't be able to change or view it again!",
|
"stuff-that-could-harm-your-profile": "Stuff that could harm your profile",
|
||||||
"the-statsclient-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again": "The statsclient api token will only get displayed once - you won't be able to change or view it again!",
|
"successful-password-reset": "Successful password reset!",
|
||||||
"there-are-no-cards-yet": "There are no cards yet.",
|
"team": "Team",
|
||||||
"there-are-no-contacts-added-yet": "There are no contacts added yet.",
|
"team-added": "Team added",
|
||||||
"there-are-no-donations-yet": "There are no donations yet",
|
"team-deleted": "Team deleted",
|
||||||
"there-are-no-donors-yet": "There are no donors yet",
|
"team-detail-is-being-loaded": "team detail is being loaded...",
|
||||||
"there-are-no-groups-yet": "There are no groups yet",
|
"team-is-being-added": "Team is being added...",
|
||||||
"there-are-no-organizations-added-yet": "There are no organizations added yet.",
|
"team-name": "Team name",
|
||||||
"there-are-no-runners-added-yet": "There are no runners added yet.",
|
"team-name-is-required": "team name is required",
|
||||||
"there-are-no-scans-yet": "There are no scans yet",
|
"teams": "Teams",
|
||||||
"there-are-no-teams-added-yet": "There are no teams added yet.",
|
"teams-are-being-loaded": "teams are being loaded...",
|
||||||
"there-are-no-users-added-yet": "There are no users added yet.",
|
"the-provided-phone-number-is-invalid-less-than-br-greater-than-please-enter-a-valid-international-number": "the provided phone number is invalid.<br />please enter a valid international number...",
|
||||||
"this-card-is": "This card is",
|
"the-scans-distance-must-be-greater-than-0m": "The scan's distance must be greater than 0m",
|
||||||
"this-might-take-a-moment": "This might take a moment 👀",
|
"the-scanstations-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again": "The scanstation api token will only get displayed once - you won't be able to change or view it again!",
|
||||||
"this-scanstation-is": "This scanstation is",
|
"the-statsclient-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again": "The statsclient api token will only get displayed once - you won't be able to change or view it again!",
|
||||||
"token": "Token",
|
"there-are-no-cards-yet": "There are no cards yet.",
|
||||||
"total-distance": "total distance",
|
"there-are-no-contacts-added-yet": "There are no contacts added yet.",
|
||||||
"total-donation-amount": "total donation amount",
|
"there-are-no-donations-yet": "There are no donations yet",
|
||||||
"total-donations": "total donations",
|
"there-are-no-donors-yet": "There are no donors yet",
|
||||||
"total-paid-amount": "Total paid amount",
|
"there-are-no-groups-yet": "There are no groups yet",
|
||||||
"total-scans": "total scans",
|
"there-are-no-organizations-added-yet": "There are no organizations added yet.",
|
||||||
"total_donation_amount_in_eur": "Total donation amount in €",
|
"there-are-no-runners-added-yet": "There are no runners added yet.",
|
||||||
"track": "Track",
|
"there-are-no-scans-yet": "There are no scans yet",
|
||||||
"track-added": "Track added",
|
"there-are-no-teams-added-yet": "There are no teams added yet.",
|
||||||
"track-data-is-being-loaded": "Track data is being loaded",
|
"there-are-no-users-added-yet": "There are no users added yet.",
|
||||||
"track-is-being-added": "Track is being added...",
|
"this-card-is": "This card is",
|
||||||
"track-is-being-updated": "Track is being updated...",
|
"this-might-take-a-moment": "This might take a moment 👀",
|
||||||
"track-length-in-m": "Track Length in m",
|
"this-scanstation-is": "This scanstation is",
|
||||||
"track-length-must-be-greater-than-0": "Track length must be greater than 0",
|
"timestamp": "timestamp",
|
||||||
"track-name": "Track name",
|
"token": "Token",
|
||||||
"track-name-must-not-be-empty": "Track name must not be empty",
|
"total-distance": "total distance",
|
||||||
"track-was-updated": "Track was updated!",
|
"total-donation-amount": "total donation amount",
|
||||||
"tracks": "Tracks",
|
"total-donations": "total donations",
|
||||||
"unpaid": "Unpaid",
|
"total-paid-amount": "Total paid amount",
|
||||||
"update-card": "Update Card",
|
"total-scans": "total scans",
|
||||||
"update-password": "Update password",
|
"total_donation_amount_in_eur": "Total donation amount in €",
|
||||||
"updated-contact": "Updated contact!",
|
"track": "Track",
|
||||||
"updated-donor": "updated donor",
|
"track-added": "Track added",
|
||||||
"updated-organization": "updated organization",
|
"track-data-is-being-loaded": "Track data is being loaded",
|
||||||
"updated-scan": "updated scan",
|
"track-is-being-added": "Track is being added...",
|
||||||
"updated-team": "Updated team",
|
"track-is-being-updated": "Track is being updated...",
|
||||||
"updateing-group": "updateing group...",
|
"track-length-in-m": "Track Length in m",
|
||||||
"updating-card": "Updating card",
|
"track-length-must-be-greater-than-0": "Track length must be greater than 0",
|
||||||
"updating-donation": "Updating donation",
|
"track-name": "Track name",
|
||||||
"updating-organization": "updating organization",
|
"track-name-must-not-be-empty": "Track name must not be empty",
|
||||||
"updating-permissions": "updating permissions...",
|
"track-was-updated": "Track was updated!",
|
||||||
"updating-runner": "Updating runner...",
|
"tracks": "Tracks",
|
||||||
"updating-team": "Updating team",
|
"unpaid": "Unpaid",
|
||||||
"updating-user": "updating user...",
|
"update-card": "Update Card",
|
||||||
"updating-your-profile": "Updating your profile...",
|
"update-password": "Update password",
|
||||||
"user-added": "User added",
|
"updated-contact": "Updated contact!",
|
||||||
"user-groups": "User Groups",
|
"updated-donor": "updated donor",
|
||||||
"user-is-being-added": "User is being added...",
|
"updated-organization": "updated organization",
|
||||||
"user-updated": "User updated",
|
"updated-scan": "updated scan",
|
||||||
"username": "Username",
|
"updated-team": "Updated team",
|
||||||
"users": "Users",
|
"updateing-group": "updateing group...",
|
||||||
"valid": "Valid",
|
"updating-card": "Updating card",
|
||||||
"valid-city-is-required": "Valid city is required",
|
"updating-donation": "Updating donation",
|
||||||
"valid-email-is-required": "valid email is required",
|
"updating-organization": "updating organization",
|
||||||
"valid-international-phone-number-is-required": "valid international phone number is required...",
|
"updating-permissions": "updating permissions...",
|
||||||
"valid-zipcode-postal-code-is-required": "Valid zipcode/ postal code is required",
|
"updating-runner": "Updating runner...",
|
||||||
"verfuegbare": "availdable",
|
"updating-team": "Updating team",
|
||||||
"welcome_wavinghand": "Welcome 👋",
|
"updating-user": "updating user...",
|
||||||
"yes-i-copied-the-token": "Yes, I copied the token",
|
"updating-your-profile": "Updating your profile...",
|
||||||
"you-are-going-to-loose-all-permissions-and-access-to-the-runner-system": "You are going to loose all permissions and access to the runner system!",
|
"user-added": "User added",
|
||||||
"you-can-enter-the-donations-paid-amount-manually-or-use-the-max-button-to-use-the-donations-exact-amount": "You can enter the donation's paid amount manually or use the MAX button to use the donation's exact amount.",
|
"user-groups": "User Groups",
|
||||||
"you-can-now-use-your-new-password-to-log-in-to-your-account": "You can now use your new password to log in to your account! 🎉",
|
"user-is-being-added": "User is being added...",
|
||||||
"you-can-provide-a-runner-but-you-dont-have-to": "You can provide a runner, but you don't have to.",
|
"user-updated": "User updated",
|
||||||
"you-dont-have-any-scanclients-yet": "You don't have any statsclients yet",
|
"username": "Username",
|
||||||
"you-dont-have-any-scanstations-yet": "You don't have any scanstations yet",
|
"users": "Users",
|
||||||
"you-have-to-provide-an-organization": "You have to provide an organization",
|
"valid": "Valid",
|
||||||
"you-have-to-save-your-changes-to-generate-a-link": "You have to save your changes to generate a link.",
|
"valid-city-is-required": "Valid city is required",
|
||||||
"you-must-create-at-least-one-card-or-cancel": "You must create at least one card (or cancel).",
|
"valid-email-is-required": "valid email is required",
|
||||||
"zip-postal-code": "ZIP/ postal code",
|
"valid-international-phone-number-is-required": "valid international phone number is required...",
|
||||||
"delete-cards": "Delete cards",
|
"valid-zipcode-postal-code-is-required": "Valid zipcode/ postal code is required",
|
||||||
"cards-deleted": "Cards deleted"
|
"verfuegbare": "availdable",
|
||||||
}
|
"welcome_wavinghand": "Welcome 👋",
|
||||||
|
"yes-i-copied-the-token": "Yes, I copied the token",
|
||||||
|
"you-are-going-to-loose-all-permissions-and-access-to-the-runner-system": "You are going to loose all permissions and access to the runner system!",
|
||||||
|
"you-can-enter-the-donations-paid-amount-manually-or-use-the-max-button-to-use-the-donations-exact-amount": "You can enter the donation's paid amount manually or use the MAX button to use the donation's exact amount.",
|
||||||
|
"you-can-now-use-your-new-password-to-log-in-to-your-account": "You can now use your new password to log in to your account! 🎉",
|
||||||
|
"you-can-provide-a-runner-but-you-dont-have-to": "You can provide a runner, but you don't have to.",
|
||||||
|
"you-dont-have-any-scanclients-yet": "You don't have any statsclients yet",
|
||||||
|
"you-dont-have-any-scanstations-yet": "You don't have any scanstations yet",
|
||||||
|
"you-have-to-provide-an-organization": "You have to provide an organization",
|
||||||
|
"you-have-to-save-your-changes-to-generate-a-link": "You have to save your changes to generate a link.",
|
||||||
|
"you-must-create-at-least-one-card-or-cancel": "You must create at least one card (or cancel).",
|
||||||
|
"zip-postal-code": "ZIP/ postal code"
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
const fs = require('fs');
|
import fs from 'fs';
|
||||||
const package = JSON.parse(fs.readFileSync(`./package.json`, { encoding: 'utf-8' }));
|
const packagejson = JSON.parse(fs.readFileSync(`./package.json`, { encoding: 'utf-8' }));
|
||||||
const original = fs.readFileSync(`./index.html`, { encoding: 'utf-8' });
|
const original = fs.readFileSync(`./index.html`, { encoding: 'utf-8' });
|
||||||
let out = original.replace(/RELEASE_INFO-(\S)+-RELEASE_INFO/gi, 'RELEASE_INFO-' + package.version + '-RELEASE_INFO');
|
let out = original.replace(/RELEASE_INFO-(\S)+-RELEASE_INFO/gi, 'RELEASE_INFO-' + packagejson.version + '-RELEASE_INFO');
|
||||||
fs.writeFileSync(`./index.html`, out);
|
fs.writeFileSync(`./index.html`, out);
|
||||||
|
|||||||
Reference in New Issue
Block a user