Compare commits

..

264 Commits

Author SHA1 Message Date
TIP Automation User
8d8b1e3945 Chg: update image tag in helm values to v2.11.0 2023-10-04 14:03:38 +00:00
TIP Automation User
c869b5c077 Chg: update image tag in helm values to v2.11.0-RC1 2023-09-01 16:08:55 +00:00
Charles Bourque
03c6471e97 Merge pull request #194 from stephb9959/main
[WIFI-12885] New Monitoring and Default Firmware pages
2023-08-25 16:56:25 +02:00
Charles
be52ed7d44 [WIFI-12885] New Monitoring and Default Firmware pages
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-08-25 16:55:31 +02:00
Charles Bourque
3afc9db5d3 Merge pull request #193 from stephb9959/main
[WIFI-12709] Added new HFCL device images
2023-07-07 09:13:39 +02:00
Charles
30d882e1c0 [WIFI-12709] Added new HFCL device images
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-07-07 09:13:00 +02:00
Charles Bourque
4836279b77 Merge pull request #192 from stephb9959/main
[WIFI-12664] Fixed firmware list dates in firmware upgrade modal
2023-06-13 01:13:00 +07:00
Charles
4a74bfebc4 [WIFI-12664] Fixed firmware list dates in firmware upgrade modal
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-06-12 20:11:34 +02:00
Charles Bourque
653cd758f4 Merge pull request #190 from stephb9959/main
[WIFI-12651] Added dev release toggle to firmware upgrade modal
2023-06-06 14:24:02 +07:00
Charles
e65f577202 [WIFI-12651] Added dev release toggle to firmware upgrade modal
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-06-06 14:21:50 +07:00
Charles Bourque
3f9478de30 Merge pull request #189 from stephb9959/main
[WIFI-12614] Dynamic VLAN support fix
2023-05-18 08:59:33 +02:00
Charles
070a03c73e [WIFI-12614] Dynamic VLAN support fix
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-05-18 08:59:11 +02:00
Charles Bourque
244692e766 Merge pull request #188 from stephb9959/main
[WIFI-12614] Dynamic VLAN support
2023-05-17 18:04:17 +02:00
Charles
a154fffcce [WIFI-12614] Dynamic VLAN support
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-05-17 18:03:42 +02:00
Charles Bourque
ae0c529fca Merge pull request #187 from stephb9959/main
[WIFI-12613] Display reboot logs on device page
2023-05-17 10:28:48 +02:00
Charles
edcca87acf [WIFI-12613] Display reboot logs on device page
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-05-17 10:28:19 +02:00
Charles Bourque
356188a350 Merge pull request #186 from stephb9959/main
[WIFI-12612] Add support for connectReason
2023-05-17 10:11:29 +02:00
Charles
cafb950aa7 [WIFI-12612] Add support for connectReason
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-05-17 10:10:32 +02:00
Charles Bourque
549627a355 Merge pull request #185 from stephb9959/main
[WIFI-12603] Fallback if country code is contained in device type
2023-05-15 19:27:27 +02:00
Charles
e6307648da [WIFI-12603] Fallback if country code is contained in device type
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-05-15 19:26:51 +02:00
Charles Bourque
fab4467bfd Merge pull request #184 from stephb9959/main
[WIFI-12585] Fix entity button on device page
2023-05-10 10:19:35 +02:00
Charles
37666c5075 [WIFI-12585] Fix entity button on device page
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-05-10 10:18:55 +02:00
Charles Bourque
871efc88b5 Merge pull request #183 from stephb9959/main
[WIFI-12585] Fix entity button on device page
2023-05-10 09:46:44 +02:00
Charles
db5611233b [WIFI-12585] Fix entity button on device page
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-05-10 09:45:53 +02:00
Charles Bourque
caa1fd4d9b Merge pull request #182 from stephb9959/main
[WIFI-12576] Cache fixes
2023-05-03 18:08:27 +02:00
Charles
be3f5548f4 [WIFI-12576] Cache fixes
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-05-03 18:07:41 +02:00
Charles Bourque
a33740c372 Merge pull request #181 from stephb9959/main
[WIFI-12574] Theme improvements
2023-05-03 09:58:34 +02:00
Charles
130d71d5a0 [WIFI-12574] Theme improvements
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-05-03 09:57:44 +02:00
Charles Bourque
bcd9c692e6 Merge pull request #180 from stephb9959/main
[WIFI-12501] Devices table column reordering
2023-05-02 11:43:39 +02:00
Charles
5947f3362d [WIFI-12501] Devices table column reordering
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-05-02 11:42:21 +02:00
Charles Bourque
4bbfbb82bc Merge pull request #179 from stephb9959/main
[WIFI-12515] Using simulated value directly instead of certificate
2023-04-19 17:14:31 +02:00
Charles
6f7876d3e7 [WIFI-12515] Using simulated value directly instead of certificate
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-04-19 17:14:06 +02:00
Charles Bourque
d4aff8067e Merge pull request #178 from stephb9959/main
[WIFI-12515] Display simulated status in device table
2023-04-18 13:54:17 +02:00
Charles
eaca70d29b [WIFI-12515] Display simulated status in device table
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-04-18 13:53:25 +02:00
Charles Bourque
a1889c88d3 Merge pull request #177 from stephb9959/main
[WIFI-12515] Display simulated status in device table
2023-04-18 11:47:51 +02:00
Charles
53b3926e29 [WIFI-12515] Display simulated status in device table
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-04-18 11:47:27 +02:00
Charles Bourque
745e76db79 Merge pull request #176 from stephb9959/main
[WIFI-12441] Added export button to device table
2023-04-18 11:21:11 +02:00
Charles
82e153c277 [WIFI-12441] Added export button to device table
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-04-18 11:20:30 +02:00
Charles
b080b73b97 [WIFI-12441] Added export button to device table
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-04-18 11:19:11 +02:00
Charles Bourque
1c05d8df28 Merge pull request #175 from stephb9959/main
[WIFI-12441] Added export button to device table
2023-04-18 11:06:02 +02:00
Charles
efc80a183b [WIFI-12441] Added export button to device table
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-04-18 10:58:26 +02:00
Charles Bourque
8a92912035 Merge pull request #174 from stephb9959/main
[WIFI-12436] Fixing crash when certain values are missing in device table
2023-04-13 13:57:59 +02:00
Charles
b870cf828a [WIFI-12436] Fixing crash when certain values are missing in device table
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-04-13 13:56:40 +02:00
Charles Bourque
4cb4fe53a5 Merge pull request #173 from stephb9959/main
[WIFI-12506] Added radius search and radius clients tile
2023-04-12 10:44:13 +02:00
Charles
f70992e9a1 [WIFI-12506] Added radius search and radius clients tile
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-04-12 10:43:35 +02:00
Charles Bourque
eb48d77636 Merge pull request #172 from stephb9959/main
[WIFI-12437] Improved commonly used device actions accessibility
2023-04-10 11:04:31 +02:00
Charles
df1686a2ae [WIFI-12437] Improved commonly used device actions accessibility
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-04-10 11:04:05 +02:00
Charles Bourque
8781c78c15 Merge pull request #171 from stephb9959/main
[WIFI-12435] [WIFI-12436] Device table added functionality and styling fixes
2023-04-10 10:52:05 +02:00
Charles
ad5b0ce2a0 [WIFI-12435] [WIFI-12436] Device table added functionality and styling fixes
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-04-10 10:51:01 +02:00
Charles Bourque
039e641046 Merge pull request #169 from stephb9959/main
[WIFI-12418] Memory chart display hidden automatically
2023-03-20 17:16:36 +01:00
Charles
f1f62efe6f [WIFI-12418] Memory chart display hidden automatically
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-03-20 17:15:16 +01:00
Charles Bourque
b3053f32b2 Merge pull request #168 from stephb9959/main
[WIFI-12413] Added toast on download trace/script result error
2023-03-17 10:24:15 +01:00
Charles
09184b0402 [WIFI-12413] Added toast on download trace/script result error
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-03-17 10:23:33 +01:00
Charles Bourque
98562fd967 Merge pull request #167 from stephb9959/main
[WIFI-12375] Download command results fix
2023-03-13 19:19:31 +01:00
Charles
65e9e64cb4 [WIFI-12375] Download command results fix
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-03-13 19:19:01 +01:00
Charles Bourque
573ecbd58d Merge pull request #166 from stephb9959/main
[WIFI-12364] Deferred scripts command history fix
2023-03-09 11:35:06 +01:00
Charles
a801fcca49 [WIFI-12364] Deferred scripts command history fix
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-03-09 11:34:36 +01:00
Charles Bourque
e9d16ee172 Merge pull request #165 from stephb9959/main
[WIFI-12360] Custom script run fix
2023-03-08 10:37:25 +01:00
Charles
db4dfc93e8 [WIFI-12360] Custom script run fix
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-03-07 20:08:40 +01:00
Charles Bourque
cf17f03ae0 Merge pull request #164 from stephb9959/main
[WIFI-12335] Display gateway tx/rx values
2023-02-25 10:10:47 +01:00
Charles
64f3ee797e [WIFI-12335] Display gateway tx/rx values
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-02-25 10:10:10 +01:00
Charles Bourque
e287705e88 Merge pull request #163 from stephb9959/main
[WIFI-12285] Add support for FMS database refreshes
2023-02-09 16:56:49 +01:00
Charles
9583b2bae0 [WIFI-12285] Add support for FMS database refreshes
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-02-09 16:55:48 +01:00
Charles Bourque
2698993a6d Merge pull request #162 from stephb9959/main
[WIFI-12270] Now displaying information related to restricted device in dev mode
2023-02-07 20:27:12 +01:00
Charles
a14b595e8c [WIFI-12270] Now displaying information related to restricted device in dev mode
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-02-07 20:26:09 +01:00
Charles Bourque
d7957b85ae Merge pull request #161 from stephb9959/main
[WIFI-12261] Added system secrets on the system page
2023-02-03 16:54:21 +01:00
Charles
227a51423d [WIFI-12261] Added system secrets on the system page
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-02-03 16:53:50 +01:00
Charles Bourque
ea0e7340cc Merge pull request #160 from stephb9959/main
[WIFI-12257] Display GPS location on device page
2023-02-01 19:52:28 +01:00
Charles
999680e94b [WIFI-12257] Display GPS location on device page
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-02-01 19:51:01 +01:00
Charles Bourque
566dbbb157 Merge pull request #159 from stephb9959/main
[WIFI-11239] Now sending signature on firmware upgrade as URL param
2023-01-30 12:53:50 +01:00
Charles
75d995d54e [WIFI-11239] Now sending signature on firmware upgrade as URL param
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-01-30 12:53:12 +01:00
Charles Bourque
908faa491b Merge pull request #158 from stephb9959/main
[WIFI-12226] Interface stats Y-axis now only 2 decimals or less
2023-01-27 10:40:29 +01:00
Charles
7a254e343e [WIFI-12226] Interface stats Y-axis now only 2 decimals or less
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-01-27 10:37:08 +01:00
Charles Bourque
016ac336b9 Merge pull request #157 from stephb9959/main
[WIFI-12223] User table state fix, with label correction and API logic update
2023-01-25 21:26:04 +01:00
Charles
1cfd3a10ad [WIFI-12223] User table state fix, with label correction and API logic update
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-01-25 21:22:17 +01:00
Charles Bourque
1838029d22 Merge pull request #156 from stephb9959/main
[WIFI-12067] Added crash logs to device details page
2023-01-06 14:55:06 -05:00
Charles
7767043a5a [WIFI-12067] Added crash logs to device details page
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-01-06 14:54:28 -05:00
Charles Bourque
b1cfa6db19 Merge pull request #155 from stephb9959/main
[WIFI-12031] Added confirmation modal to reboot process
2023-01-05 14:06:40 -05:00
Charles
623d5a5546 [WIFI-12031] Added confirmation modal to reboot process
Signed-off-by: Charles <charles.bourque96@gmail.com>
2023-01-05 14:02:00 -05:00
Charles Bourque
8c676eb965 Merge pull request #154 from stephb9959/main
[WIFI-10957] Updated statistics to use counters-aggregate if available
2022-12-14 14:36:17 -05:00
Charles
1e4ccce36c [WIFI-10957] Updated statistics to use counters-aggregate if available
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-12-14 14:35:45 -05:00
Charles Bourque
1808206e74 Merge pull request #153 from stephb9959/main
[WIFI-11936] Serial number in device table now real link
2022-12-14 09:00:51 -05:00
Charles
0fbc2b92aa [WIFI-11936] Serial number in device table now real link
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-12-14 09:00:12 -05:00
Charles Bourque
42d274e988 Merge pull request #152 from stephb9959/main
[WIFI-11959] Yuncore model images added
2022-12-12 16:49:20 -05:00
Charles
ec64680a66 [WIFI-11959] Yuncore model images added
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-12-12 16:48:27 -05:00
Charles Bourque
d006b89efd Merge pull request #151 from stephb9959/main
[WIFI-11958] Device restriction details display
2022-12-12 16:38:23 -05:00
Charles
48654c382d [WIFI-11958] Device restriction details display
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-12-12 16:37:06 -05:00
Charles Bourque
8d23168a87 Merge pull request #150 from stephb9959/main
[WIFI-11957] Added device search bar to device page top-bar
2022-12-12 15:02:15 -05:00
Charles
e27baaec9d [WIFI-11957] Added device search bar to device page top-bar
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-12-12 14:59:39 -05:00
Charles Bourque
31a37ae506 Merge pull request #149 from stephb9959/main
[WIFI-11875] Commands custom timeframes popups now not hiding the sav…
2022-12-12 12:12:27 -05:00
Charles
6360f90102 [WIFI-11875] Commands custom timeframes popups now not hiding the save button
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-12-12 12:12:01 -05:00
Charles Bourque
b829003711 Merge pull request #148 from stephb9959/main
[WIFI-10957] Device statistics now using SSID counters when displayin…
2022-12-12 12:06:31 -05:00
Charles
fae773b25a [WIFI-10957] Device statistics now using SSID counters when displaying upstream interfaces
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-12-12 12:05:57 -05:00
Charles Bourque
0e8df4441d Merge pull request #147 from stephb9959/main
[WIFI-11875] Custom timeframes for commands/deviceslogs/commands now …
2022-12-12 10:57:44 -05:00
Charles
35e7e26d67 [WIFI-11875] Custom timeframes for commands/deviceslogs/commands now work for large datasets
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-12-12 10:54:42 -05:00
Charles Bourque
14c88280f5 Merge pull request #146 from stephb9959/main
[WIFI-11936] Devices table links now using real links with href
2022-12-12 09:45:48 -05:00
Charles
aaab9d3bc5 [WIFI-11936] Devices table links now using real links with href
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-12-12 09:45:17 -05:00
Charles Bourque
02095595c6 Merge pull request #145 from stephb9959/main
[WIFI-11874] Made lastStats, capabilities and configuration modals ta…
2022-12-09 09:00:10 -05:00
Charles
9a80664ce2 [WIFI-11874] Made lastStats, capabilities and configuration modals take up whole height of the screen
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-12-09 08:59:13 -05:00
Charles Bourque
b69e7e4ddf Merge pull request #144 from stephb9959/main
[WIFI-11875] Added timestamps selection for device commands, logs and…
2022-12-05 13:04:16 -05:00
Charles
db642782b0 [WIFI-11875] Added timestamps selection for device commands, logs and healthchecks
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-12-05 13:03:45 -05:00
Charles Bourque
33dedbbfa3 Merge pull request #143 from stephb9959/main
[WIFI-11874] Telemetry results now using full page height
2022-12-05 09:24:46 -05:00
Charles
a8f53de511 [WIFI-11874] Telemetry results now using full page height
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-12-05 09:24:17 -05:00
Charles Bourque
3b7dad989f Merge pull request #142 from stephb9959/main
[WIFI-11873] Navbar menu hidden by device page bar fix
2022-12-05 09:07:25 -05:00
Charles
4d62c5298a [WIFI-11873] Navbar menu hidden by device page bar fix
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-12-05 09:04:51 -05:00
Charles Bourque
538c6b5233 Merge pull request #141 from stephb9959/main
[WIFI-11542] Script result display and download fixes
2022-12-01 19:23:38 +00:00
Charles
969a14802b [WIFI-11542] Script result display and download fixes
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-12-01 19:23:01 +00:00
Charles Bourque
5c7f683d16 Merge pull request #140 from stephb9959/main
[WIFI-11868] Fixed FMS dashboard average age
2022-12-01 18:08:40 +00:00
Charles
c7874e5e40 [WIFI-11868] Fixed FMS dashboard average age
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-12-01 18:08:04 +00:00
Charles Bourque
628e4fa873 Merge pull request #139 from stephb9959/main
[WIFI-11866] User role and user edit fixes
2022-12-01 16:35:53 +00:00
Charles
8e01abbeb6 [WIFI-11866] User role and user edit fixes
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-12-01 16:34:57 +00:00
Charles Bourque
89ee99f98d Merge pull request #138 from stephb9959/main
[WIFI-11542] AP Scripts
2022-12-01 16:13:04 +00:00
Charles
21452d091f [WIFI-11542] AP Scripts
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-12-01 16:12:30 +00:00
Charles Bourque
d21f55b476 Merge pull request #137 from stephb9959/main
[WIFI-11858] Sticky device page top bar
2022-12-01 08:52:15 +00:00
Charles
d01453ea1d [WIFI-11858] Sticky device page top bar
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-12-01 08:51:11 +00:00
Charles Bourque
09e3327e94 Merge pull request #136 from stephb9959/main
[WIFI-11760] Potential fix for duplicate error fetching device notifi…
2022-11-28 10:27:48 +00:00
Charles
00deeb9fdd [WIFI-11760] Potential fix for duplicate error fetching device notifications on device page
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-11-28 10:27:18 +00:00
Charles Bourque
0aed1ba04f Merge pull request #135 from stephb9959/main
[WIFI-11753] Fixed JSON displays to deal with wide strings
2022-11-28 09:47:40 +00:00
Charles
526947e3a1 [WIFI-11753] Fixed JSON displays to deal with wide strings
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-11-28 09:47:02 +00:00
Charles Bourque
b52308df80 Merge pull request #134 from stephb9959/main
[WIFI-11749] Limiting device search bar input text length
2022-11-28 09:26:42 +00:00
Charles
bdb9e02df0 [WIFI-11749] Limiting device search bar input text length
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-11-28 09:24:23 +00:00
Charles Bourque
6273020127 Merge pull request #133 from stephb9959/main
[WIFI-11730] & [WIFI-11742]
2022-11-28 09:10:28 +00:00
Charles
4d1a464954 [WIFI-11742] Wifi analysis now deducing 2G-5G from channel
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-11-25 16:25:10 +00:00
Charles
9711ab6c5f [WIFI-11742] Wifi analysis now displays bands when available
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-11-25 15:31:59 +00:00
Johann Hoffmann
95963eb0be Merge pull request #132 from Telecominfraproject/WIFI-11419-patch-workflows
[WIFI-11419] Patch workflows with regard to deprecated Github actions commands
2022-11-25 15:25:22 +01:00
Charles
0596edb0a1 [WIFI-11730] Removed duplicate statistics API calls
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-11-24 11:10:49 +00:00
Charles Bourque
7ac82d4ad9 Merge pull request #131 from stephb9959/main
[WIFI-11728] Added 6G associations to device table
2022-11-24 09:31:30 +00:00
Charles
74a9ad955b [WIFI-11728] Added 6G associations to device table
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-11-24 09:30:52 +00:00
Johann Hoffmann
c23cce672c Update checkout action version
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-11-22 11:55:57 +01:00
Charles Bourque
d39b4b3624 Merge pull request #130 from stephb9959/main
[WIFI-11251] Now fetching device statistics in batches of 100
2022-11-20 18:09:06 +00:00
Charles
2c3ebeec09 [WIFI-11251] Now fetching device statistics in batches of 100
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-11-20 18:08:34 +00:00
Charles Bourque
86f2ffa61f Merge pull request #129 from stephb9959/main
[WIFI-11700] Fix for non-lowercase serial numbers in device page
2022-11-20 10:16:46 +00:00
Charles
017781ff35 [WIFI-11700] Fix for non-lowercase serial numbers in device page
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-11-20 10:16:12 +00:00
Charles Bourque
7d72ad0f37 Merge pull request #128 from stephb9959/main
[WIFI-11594] Fixed hidden columns in wifi analysis
2022-11-14 16:03:19 +00:00
Charles
152033f98a [WIFI-11594] Fixed hidden columns in wifi analysis
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-11-14 16:02:50 +00:00
Charles Bourque
c21bf5b87d Merge pull request #127 from stephb9959/main
[WIFI-11584]  Reconnecting WebSocket when focusing on search bar
2022-11-13 10:13:03 +00:00
Charles
fa60d40171 [WIFI-11584] Reconnecting WebSocket when focusing on search bar
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-11-13 10:12:18 +00:00
Charles Bourque
d80d5557c8 Merge pull request #126 from stephb9959/main
[WIFI-11545] Fixed event queue API
2022-11-11 13:34:50 +00:00
Charles
6c7ac8d7f4 [WIFI-11545] Fixed event queue API
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-11-11 13:32:44 +00:00
Charles Bourque
d72867da35 Merge pull request #125 from stephb9959/main
[WIFI-11543] Added API keys to profile page
2022-11-11 12:50:07 +00:00
Charles
14347b73f2 [WIFI-11543] Added API keys to profile page
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-11-11 12:49:24 +00:00
Charles Bourque
11e2bf4cbb Merge pull request #124 from stephb9959/main
[WIFI-11566] Fixed uses of useClipboard
2022-11-10 10:21:57 +00:00
Charles
b2553d35fd [WIFI-11566] Fixed uses of useClipboard
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-11-10 10:21:18 +00:00
Charles Bourque
58f8a02557 Merge pull request #123 from stephb9959/main
[WIFI-11564] Add logs page
2022-11-09 17:36:48 +00:00
Charles
34450144ba [WIFI-11564] Add logs page
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-11-09 17:35:57 +00:00
Charles Bourque
f9e08d53af Merge pull request #122 from stephb9959/main
[WIFI-11563] Added import file button to configure modal
2022-11-09 12:45:27 +00:00
Charles
006e402d9f [WIFI-11563] Added import file button to configure modal
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-11-09 12:44:48 +00:00
Charles Bourque
8132012534 Merge pull request #121 from stephb9959/main
[WIFI-11472] Fixed crash on missing device types
2022-11-03 14:53:24 +00:00
Charles
3e8f02eea4 [WIFI-11472] Fixed crash on missing device types
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-11-03 14:52:38 +00:00
Dmitry Dunaev
7312980453 Merge pull request #120 from Telecominfraproject/feature/wifi-11464--entrypoint
[WIFI-11464] Fix: entrypoint script
2022-11-03 11:30:47 +03:00
Dmitry Dunaev
8c20d41d89 [WIFI-11464] Fix: entrypoint script
Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
2022-11-03 10:33:52 +03:00
Dmitry Dunaev
d50d53ac1f Merge pull request #119 from Telecominfraproject/feature/wifi-11451--build-fix
[WIFI-11451] Fix: Dockerfile
2022-11-02 14:56:50 +03:00
Dmitry Dunaev
b0d7ab2e81 [WIFI-11451] Fix: Dockerfile
Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
2022-11-02 14:56:18 +03:00
Charles Bourque
91223b7518 Merge pull request #118 from stephb9959/main
[WIFI-11454] Display restricted devices and certificate expiry date
2022-11-02 10:33:48 +00:00
Charles
616e4b6e0c [WIFI-11454] Display restricted devices and certificate expiry date
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-11-02 10:32:54 +00:00
Charles Bourque
5170ea81e7 Merge pull request #117 from stephb9959/main
[WIFI-11455] Fix to fetch env file for docker build
2022-11-01 16:54:27 +00:00
Charles
53a8cd8ee4 [WIFI-11455] Fix to fetch env file for docker build
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-11-01 16:53:53 +00:00
Charles Bourque
2229e8cb7d Merge pull request #116 from stephb9959/main
[WIFI-11392] Refetch all endpoints on System page
2022-10-30 12:56:05 +00:00
Charles
9ce1041b0e [WIFI-11392] Refetch all endpoints on System page
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-10-30 12:55:32 +00:00
Charles Bourque
187065098b Merge pull request #115 from stephb9959/main
[WIFI-11223] Migrating to prov-ui style/libraries
2022-10-27 12:35:04 +01:00
Charles
467bdf0045 Merge branch 'WIFI-11223-migrating-prov-ui'
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-10-27 11:42:05 +01:00
Charles
9462b5b461 Device logs label fixes
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-10-27 11:36:14 +01:00
Charles
da7f29a9e0 [WIFI-11223] System page fixes
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-10-27 11:36:14 +01:00
Charles
d06bfd91ff [WIFI-11223] Fixed firmware button labels
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-10-27 11:36:14 +01:00
Charles
b9bba10697 [WIFI-11223] Wifi Scan fixes
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-10-27 11:36:14 +01:00
Charles
4581de92ad [WIFI-11223] Axios TS fix
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-10-27 11:36:14 +01:00
Charles
72c520cca7 README update
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-10-27 11:36:13 +01:00
Charles
835ee2a046 [WIFI-11223] Latest axios TS fixes
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-10-27 11:36:13 +01:00
Charles
d03dee8fda [WIFI-11223] Updated to latest react-query
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-10-27 11:36:13 +01:00
Charles
6e89598a51 [WIFI-11223] Removed update to latest button
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-10-27 11:36:13 +01:00
Charles
0a2aa6f734 [WIFI-11223] Migrating to prov-ui style
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-10-27 11:36:13 +01:00
Charles
2e7836eec3 [WIFI-11223] Migrating to prov-ui style
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-10-27 11:36:13 +01:00
Charles
31bdda8bf8 [WIFI-10931] Fixed using ws websockets when using http GW endpoint
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-10-27 11:36:13 +01:00
Charles Bourque
2fc93fa819 Merge pull request #113 from stephb9959/main
[WIFI-10931] Fixed using ws websockets when using http GW endpoint
2022-10-10 10:02:47 +01:00
Charles
3c5a939b16 [WIFI-10931] Fixed using ws websockets when using http GW endpoint
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-10-10 10:02:13 +01:00
Dmitry Dunaev
0f40c4cd49 Fix: Helm image for main branch
Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
2022-09-30 16:44:39 +03:00
jaspreetsachdev
7ad184cb48 Merge branch 'release/v2.7.0' into main 2022-09-29 19:15:03 -04:00
Charles Bourque
41a7d5d0a8 Merge pull request #111 from stephb9959/main
[WIFI-10904] Websocket more resilient in case of disconnection
2022-09-23 12:42:28 +01:00
Charles
78c48e004c [WIFI-10904] Websocket more resilient in case of disconnection
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-09-23 12:41:00 +01:00
Charles Bourque
7106d61881 Merge pull request #110 from stephb9959/main
[WIFI-10904] Connection statistics on the sidebar
2022-09-22 19:55:28 +01:00
Charles
8ead4c4708 [WIFI-10904] Connection statistics on the sidebar
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-09-22 19:54:21 +01:00
Charles Bourque
52ca7d3503 Merge pull request #109 from stephb9959/main
[WIFI-10894] Status column added to command history
2022-09-21 13:55:11 +01:00
Charles Bourque
7d504da0a8 Merge pull request #108 from stephb9959/main
[WIFI-10894] Status column added to command history
2022-09-21 13:54:10 +01:00
Charles
c6dee2252b [WIFI-10894] Status column added to command history
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-09-21 13:53:24 +01:00
TIP Automation User
680c4a9ec4 Chg: update image tag in helm values to v2.7.0-RC1 2022-09-16 19:54:57 +00:00
Charles Bourque
3887d57fa4 Merge pull request #107 from stephb9959/main
[WIFI-10857] Fixed display when there are no entries
2022-09-15 16:33:44 +01:00
Charles
d733daed9d [WIFI-10857] Fixed display when there are no entries
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-09-15 16:33:01 +01:00
Charles Bourque
de8651ab52 Merge pull request #106 from stephb9959/main
[WIFI-10850] Error descriptions on command failures
2022-09-15 12:46:01 +01:00
Charles
0ce641d10b [WIFI-10850] Error descriptions on command failures
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-09-15 12:45:16 +01:00
Charles Bourque
316224b424 Merge pull request #105 from stephb9959/main
[WIFI-10832] Redirecting on invalid/not found serial numbers on device page
2022-09-14 08:55:35 +01:00
Charles
cf9bbce284 [WIFI-10832] Redirecting on invalid/not found serial numbers on device page
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-09-14 08:53:33 +01:00
Charles Bourque
6eae6c046e Merge pull request #104 from stephb9959/main
[WIFI-10714] System page fix for RRM and other endpoints witthout sub…
2022-09-02 18:13:23 +01:00
Charles
837a430228 [WIFI-10714] System page fix for RRM and other endpoints witthout subsystems
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-09-02 18:12:45 +01:00
Charles Bourque
71431f8fb5 Merge pull request #103 from stephb9959/main
[WIFI-10583] Reacting to more cases where a token might be expired/invalid
2022-08-18 10:48:22 +01:00
Charles
0c7cd1f299 [WIFI-10583] Reacting to more cases where a token might be expired/invalid
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-08-18 10:46:52 +01:00
Dmitry Dunaev
674682e919 Merge pull request #102 from Telecominfraproject/fix/wifi-10414-cve-image
[WIFI-10414] Fix: vulnerable NodeJS image
2022-08-17 16:34:42 +03:00
Dmitry Dunaev
a5ca8115af [WIFI-10414] Fix: vulnerable NodeJS image
Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
2022-08-15 11:33:40 +03:00
Charles Bourque
d4338fce42 Merge pull request #101 from stephb9959/main
[WIFI-10548] Network diagram now showing all associations
2022-08-11 11:21:56 +01:00
Charles
14e8135f81 [WIFI-10548] Network diagram now showing all associations
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-08-11 11:20:04 +01:00
Charles Bourque
e925f07505 Merge pull request #100 from stephb9959/main
[WIFI-10515] Crash fix when receiving corrupted statistics
2022-08-08 16:59:27 +01:00
Charles
b792b51bd0 [WIFI-10515] Crash fix when receiving corrupted statistics
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-08-08 16:58:38 +01:00
Charles Bourque
fb64813b2a Merge pull request #99 from stephb9959/main
[WIFI-10259] WifiScan now sending all IE options
2022-07-26 12:29:11 +01:00
Charles
b16e0e33ab [WIFI-10259] WifiScan now sending all IE options, removed selection options
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-07-26 12:20:11 +01:00
Charles
818921e4a2 2.7.0(0): version bump and crash fix on missing endpoints
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-07-26 11:47:34 +01:00
Charles Bourque
6c437459ca Merge pull request #98 from stephb9959/main
2.6.29
2022-06-29 20:51:47 +01:00
Charles
b276901874 Merge remote-tracking branch 'upstream/main' 2022-06-29 20:48:58 +01:00
Charles
85b92f46f5 [WIFI-9921] Telemetry now only showing selected types when receiving messages
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-06-28 15:03:51 +01:00
Charles
237b8b5ede [WIFI-9773] Wifi Scan request sometimes stalling
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-06-21 18:12:17 +01:00
Charles
438d008c34 2.6.27: wifi analysis with no records fix
Signed-off-by: Charles <charles.bourque96@gmail.com>
2022-06-21 18:12:17 +01:00
Johann Hoffmann
53a3de1ebc Supress curl output in PR cleanup workflow
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-06-17 13:52:04 +02:00
Johann Hoffmann
2d35747e75 [WIFI-9534] Add condition to avoid deleting default and release branch images
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-06-17 13:51:29 +02:00
Johann Hoffmann
71feebea6d Temporarily disable cleanup for merges into release branches
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-06-15 14:49:53 +02:00
Charles
c8c75e7a70 Merge pull request #95 from stephb9959/main
2.6.27: wifi analysis with no records fix
2022-06-10 16:40:17 +01:00
Charles
7b2263e9a5 2.6.27: wifi analysis with no records fix 2022-06-10 16:14:03 +01:00
Charles
9cd216bbba Merge pull request #93 from stephb9959/main
2.6.26
2022-06-08 19:22:35 +01:00
Charles
e032ff4485 2.6.26: upgrade ucentral-libs version 2022-06-08 19:21:59 +01:00
Charles
fbe9ca5dd9 Merge pull request #189 from Telecominfraproject/main
TIP merge into Arilia repo
2022-06-08 19:10:00 +01:00
Charles
4533bb6dd7 Merge pull request #90 from clayface/kafka_telemetry
WIFI-7947: Telemetry: Add lifetime and kafka/websocket options
2022-06-01 21:02:18 +01:00
Charles
3320c03603 Merge pull request #92 from Telecominfraproject/2.7.0
[NO-JIRA] 2.7.0
2022-06-01 16:47:11 +01:00
Charles
c3574d96d7 2.7.0 2022-06-01 16:44:07 +01:00
Dmitry Dunaev
ebd2419634 [WIFI-7555] Fix: helm path
Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
2022-05-23 15:21:59 +03:00
Johann Hoffmann
133c256543 Enable CI for pull requests in release branches
Signed-off-by: Johann Hoffmann <johann.hoffmann@mailbox.org>
2022-05-23 13:14:42 +02:00
Charles
98a2a72f33 2.6.25: device dashboard pie charts now have both absolute and percentage values, added device total explanations 2022-05-18 16:48:04 +01:00
Matthew Hagan
bc12b598ce Telemetry: add Kafka, Websocket output choice
Signed-off-by: Matthew Hagan <mathagan@fb.com>
2022-05-17 22:29:40 +01:00
Matthew Hagan
a34f679c43 Telemetry: add lifetime option
Signed-off-by: Matthew Hagan <mathagan@fb.com>
2022-05-13 15:56:56 +01:00
Charles
f008fd082e 2.6.23: websocket memory leak fix, fixes for device page refresh on websocket notification 2022-05-05 20:34:58 +01:00
Charles
d2fd895582 2.6.20: reboot/blink/trace UI fixes, now using global websocket to update UI and notify user on device connection/disconnection 2022-05-04 21:28:47 +01:00
Dmitry Dunaev
746a812ae8 Merge pull request #89 from Telecominfraproject/feature/wifi-7825--use-clusterip-for-service
[WIFI-7825] Chg: use ClusterIP for service by default
2022-05-03 12:14:18 +03:00
Dmitry Dunaev
b67c69b88b [WIFI-7825] Chg: use ClusterIP for service by default
Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
2022-05-03 12:07:49 +03:00
Charles
f6ee20730a Merge pull request #87 from stephb9959/main
Device Search fix
2022-04-28 21:23:20 +01:00
Charles
2829a96c84 Merge pull request #186 from stephb9959/dev
Device search fix
2022-04-28 21:21:56 +01:00
Charles
37e1a92a89 Device search fix 2022-04-28 21:10:01 +01:00
Charles
81c4717472 Merge pull request #86 from stephb9959/main
2.6.14
2022-04-19 18:20:10 +01:00
Charles
94aac686c9 Merge pull request #181 from stephb9959/dev
2.6.14: statistics fix for devices with more than one interface
2022-04-19 18:09:43 +01:00
Charles
b75848515b 2.6.14: statistics fix for devices with more than one interface 2022-04-19 15:51:00 +01:00
Dmitry Dunaev
a26cf9a3ff [WIFI-7555] Add: Helm packaging and GitHub release step
Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
2022-04-18 11:19:27 +03:00
Dmitry Dunaev
a7e4f728d2 [WIFI-7461] Add: trigger-deploy-to-dev step in CI
Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
2022-04-13 13:01:59 +03:00
Charles
921d234972 Merge pull request #179 from stephb9959/dev
2.6.13
2022-04-05 19:41:41 +01:00
Charles
6bec9f977f 2.6.13 2022-04-05 19:41:09 +01:00
Charles
6eaa9f8af1 Merge pull request #177 from stephb9959/dev
2.6.12: statistics fix for negative values
2022-04-05 18:28:34 +01:00
Charles
5ef189b445 2.6.12: statistics fix for negative values 2022-04-05 18:27:06 +01:00
Charles
9f8283892e Merge pull request #175 from stephb9959/dev
2.6.11: fix for negative interface deltas
2022-04-05 18:02:19 +01:00
Charles
6ba2dc9601 2.6.11: fix for negative interface deltas 2022-04-05 18:01:40 +01:00
Dmitry Dunaev
e23512c860 [WIFI-4884] Add: more clear slack message on failure
Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
2022-03-28 12:58:58 +03:00
Dmitry Dunaev
32b6fe1625 Merge pull request #85 from Telecominfraproject/feature/wifi-4884--add-slack-failure-notify
[WIFI-4884] Add: notification on CI failure in Slack
2022-03-24 14:51:08 +03:00
Dmitry Dunaev
8663b6d108 [WIFI-4884] Add: notification on CI failure in Slack
Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
2022-03-24 14:50:37 +03:00
Charles
7794aa4c99 Merge pull request #84 from stephb9959/main
2.6.10
2022-03-18 18:47:57 +00:00
Charles
ba90ea59f4 Merge pull request #171 from stephb9959/dev
2.6.9
2022-03-18 18:47:26 +00:00
Charles
aadb4c44a1 2.6.10 2022-03-18 17:00:19 +00:00
Charles
467ad39873 2.6.9: wifi analysis vendor value fix 2022-03-18 16:29:57 +00:00
Charles
0a92b2db48 Merge pull request #83 from stephb9959/main
2.6.8
2022-03-18 13:33:40 +00:00
Charles
60a8f1ea61 Merge pull request #169 from stephb9959/dev
2.6.8
2022-03-18 13:31:53 +00:00
Charles
1063061b47 2.6.8: now using station instead of bssid within the wifi analysis table 2022-03-18 13:09:43 +00:00
Charles
54186575e0 2.6.7: displaying entity/venue/subscriber wth buttons to go to provisioning directly within device details 2022-03-15 18:17:55 +00:00
Dmitry Dunaev
114005d572 Merge pull request #82 from Telecominfraproject/feature/wifi-1998--ingress-deprecation
[WIFI-1998] Add: gracefull ingress deprecationush
2022-03-01 16:22:44 +03:00
Dmitry Dunaev
cde59a5ab1 [WIFI-1998] Add: gracefull ingress deprecationush
Signed-off-by: Dmitry Dunaev <dmitry@opsfleet.com>
2022-03-01 16:17:26 +03:00
Charles
e6bb26ce12 2.6.6: added entity venue and mac to device details 2022-02-25 15:59:36 +02:00
Charles
0cde953d58 2.6.5: presentation fix for locale in device details 2022-02-24 22:35:10 +02:00
Charles
ce7a804a70 2.6.4: added more details such as locale in device details, added locale info and flag to device table 2022-02-24 22:19:35 +02:00
Charles
67716aedde 2.6.2: fixed configuration display copy to clipboard format, added copy to clipboard button to latest statistics modal 2022-02-22 21:39:58 +02:00
Charles
54a98cd6e5 Merge pull request #81 from stephb9959/main
2.6.1
2022-02-21 21:04:47 +02:00
Charles
31a901bea9 Merge pull request #161 from stephb9959/dev
2.6.1
2022-02-21 21:04:18 +02:00
Charles
f0fdc90226 2.6.1: added bandwidth option to wifi scan 2022-02-21 20:03:31 +02:00
Charles
e14f892bc6 2.6.0: configure command feedback more clear 2022-02-11 13:52:25 +00:00
576 changed files with 49455 additions and 39200 deletions

1
.env Normal file
View File

@@ -0,0 +1 @@
VITE_UCENTRALSEC_URL="https://ucentral.dpaas.arilia.com:16001"

View File

@@ -1,4 +1,10 @@
/src/assets
/build
/node_modules
/dist
/icons
helm
docker-entrypoint.d
.dockerignore
DockerFile
.github

View File

@@ -1,22 +1,80 @@
{
"extends": ["airbnb", "prettier"],
"plugins": ["prettier"],
"env": {
"browser": true,
"jest": true
"browser": true,
"es2021": true
},
"parser": "@typescript-eslint/parser",
"parserOptions": {
"ecmaFeatures": {
"jsx": true
},
"ecmaVersion": 12,
"sourceType": "module",
"allowImportExportEverywhere": false,
"codeFrame": false,
"project": "./tsconfig.json"
},
"ignorePatterns": ["build/", "dist/"],
"extends": [
"plugin:react/recommended",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
"airbnb",
"airbnb-typescript",
"prettier",
"plugin:import/errors",
"plugin:import/warnings",
"plugin:import/typescript"
],
"plugins": ["import", "react", "@typescript-eslint", "prettier"],
"rules": {
"max-len": ["error", {"code": 150}],
"prefer-promise-reject-errors": ["off"],
"react/jsx-filename-extension": ["off"],
"react/prop-types": ["warn"],
"no-return-assign": ["off"],
"react/jsx-props-no-spreading": ["off"],
"react/destructuring-assignment": ["off"],
"import/extensions": [
"error",
"ignorePackages",
{
"js": "never",
"jsx": "never",
"ts": "never",
"tsx": "never"
}
],
"@typescript-eslint/naming-convention": [
"error",
{
"selector": "function",
"format": ["PascalCase", "camelCase"],
"leadingUnderscore": "allowSingleOrDouble"
}
],
"no-restricted-syntax": ["error", "ForInStatement", "LabeledStatement", "WithStatement"],
"react/jsx-one-expression-per-line": "off",
"react/jsx-wrap-multilines": "off",
"react/jsx-curly-newline": "off"
"react/function-component-definition": [2, { "namedComponents": "arrow-function" }],
"import/order": [
"error",
{
"alphabetize": {
"order": "asc",
"caseInsensitive": true
},
"newlines-between": "never",
"groups": ["builtin", "external", "parent", "sibling", "index"],
"pathGroups": [
{
"pattern": "react",
"group": "external",
"position": "before"
}
],
"pathGroupsExcludedImportTypes": ["builtin"]
}
],
"max-len": ["error", { "code": 150 }],
"@typescript-eslint/ban-ts-comment": ["off"],
"import/prefer-default-export": ["off"],
"react/prop-types": ["warn"],
"react/require-default-props": "off",
"react/jsx-props-no-spreading": ["off"],
"react/jsx-curly-newline": "off",
"no-underscore-dangle": "off"
},
"settings": {
"import/resolver": {
@@ -24,11 +82,5 @@
"paths": ["src"]
}
}
},
"parser": "babel-eslint",
"parserOptions": {
"sourceType": "module",
"allowImportExportEverywhere": false,
"codeFrame": false
}
}
}

View File

@@ -12,6 +12,7 @@ on:
pull_request:
branches:
- main
- 'release/*'
defaults:
run:
@@ -25,7 +26,7 @@ jobs:
DOCKER_REGISTRY_USERNAME: ucentral
steps:
- name: Checkout actions repo
uses: actions/checkout@v2
uses: actions/checkout@v3
with:
repository: Telecominfraproject/.github
path: github
@@ -37,3 +38,35 @@ jobs:
registry: tip-tip-wlan-cloud-ucentral.jfrog.io
registry_user: ucentral
registry_password: ${{ secrets.DOCKER_REGISTRY_PASSWORD }}
- name: Notify on failure via Slack
if: failure() && github.ref == 'refs/heads/main'
uses: rtCamp/action-slack-notify@v2
env:
SLACK_USERNAME: GitHub Actions failure notifier
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
SLACK_COLOR: "${{ job.status }}"
SLACK_ICON: https://raw.githubusercontent.com/quintessence/slack-icons/master/images/github-logo-slack-icon.png
SLACK_TITLE: Docker build failed for OWGW-UI service
trigger-deploy-to-dev:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
needs:
- docker
steps:
- name: Checkout actions repo
uses: actions/checkout@v3
with:
repository: Telecominfraproject/.github
path: github
- name: Trigger deployment of the latest version to dev instance and wait for result
uses: ./github/composite-actions/trigger-workflow-and-wait
with:
owner: Telecominfraproject
repo: wlan-testing
workflow: ucentralgw-dev-deployment.yaml
token: ${{ secrets.WLAN_TESTING_PAT }}
ref: master
inputs: '{"force_latest": "true"}'

View File

@@ -4,6 +4,7 @@ on:
pull_request:
branches:
- main
- 'release/*'
types: [ closed ]
defaults:
@@ -16,4 +17,10 @@ jobs:
steps:
- run: |
export PR_BRANCH_TAG=$(echo ${GITHUB_HEAD_REF#refs/heads/} | tr '/' '-')
curl -uucentral:${{ secrets.DOCKER_REGISTRY_PASSWORD }} -X DELETE "https://tip.jfrog.io/artifactory/tip-wlan-cloud-ucentral/owgw-ui/$PR_BRANCH_TAG"
if [[ ! $PR_BRANCH_TAG =~ (main|master|release-*) ]]; then
echo "PR branch is $PR_BRANCH_TAG, deleting Docker image"
curl -s -uucentral:${{ secrets.DOCKER_REGISTRY_PASSWORD }} -X DELETE "https://tip.jfrog.io/artifactory/tip-wlan-cloud-ucentral/owgw-ui/$PR_BRANCH_TAG"
else
echo "PR branch is $PR_BRANCH_TAG, not deleting Docker image"
fi

View File

@@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout actions repo
uses: actions/checkout@v2
uses: actions/checkout@v3
with:
repository: Telecominfraproject/.github
path: github

46
.github/workflows/release.yml vendored Normal file
View File

@@ -0,0 +1,46 @@
name: Release chart package
on:
push:
tags:
- 'v*'
defaults:
run:
shell: bash
jobs:
helm-package:
runs-on: ubuntu-20.04
env:
HELM_REPO_URL: https://tip.jfrog.io/artifactory/tip-wlan-cloud-ucentral-helm/
HELM_REPO_USERNAME: ucentral
steps:
- name: Checkout uCentral assembly chart repo
uses: actions/checkout@v3
with:
path: wlan-cloud-ucentralgw-ui
- name: Build package
working-directory: wlan-cloud-ucentralgw-ui/helm
run: |
helm plugin install https://github.com/aslafy-z/helm-git --version 0.10.0
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
helm dependency update
mkdir dist
helm package . -d dist
- name: Generate GitHub release body
working-directory: wlan-cloud-ucentralgw-ui/helm
run: |
pip3 install yq -q
echo "Docker image - tip-tip-wlan-cloud-ucentral.jfrog.io/owgw-ui:$GITHUB_REF_NAME" > release.txt
echo "Helm charted may be attached to this release" >> release.txt
echo "Deployment artifacts may be found in https://github.com/Telecominfraproject/wlan-cloud-ucentral-deploy/tree/$GITHUB_REF_NAME" >> release.txt
- name: Create GitHub release
uses: softprops/action-gh-release@v1
with:
body_path: wlan-cloud-ucentralgw-ui/helm/release.txt
files: wlan-cloud-ucentralgw-ui/helm/dist/*

5
.gitignore vendored
View File

@@ -1,9 +1,8 @@
# dependencies
/node_modules
/.pnp
.pnp.js
/dev-dist
# testing
/coverage
@@ -19,5 +18,3 @@
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*

View File

@@ -1,4 +1,6 @@
/src/assets
build
dist
node_modules
.github
/helm

View File

@@ -1,7 +1,7 @@
{
"printWidth": 100,
"trailingComma": "all",
"tabWidth": 2,
"semi": true,
"singleQuote": true
}
{
"printWidth": 120,
"trailingComma": "all",
"tabWidth": 2,
"semi": true,
"singleQuote": true
}

View File

@@ -1,6 +1,8 @@
FROM node:14-alpine3.11 AS build
FROM node:18.7.0-alpine3.15 AS build
COPY package.json package-lock.json /
WORKDIR /app
COPY package.json package-lock.json /app/
RUN npm install
@@ -8,8 +10,8 @@ COPY . .
RUN npm run build
FROM nginx:1.20.1-alpine AS runtime
FROM nginx:1.22.0-alpine AS runtime
COPY --from=build /build/ /usr/share/nginx/html/
COPY --from=build /app/build/ /usr/share/nginx/html/
COPY --from=build docker-entrypoint.d/40-generate-config.sh /docker-entrypoint.d/40-generate-config.sh
COPY --from=build /app/docker-entrypoint.d/40-generate-config.sh /docker-entrypoint.d/40-generate-config.sh

View File

@@ -1,6 +1,7 @@
# uCentralGW UI
## What is this?
The uCentralGW Client is a user interface that lets you monitor and manage devices connected to the [uCentral gateway](https://github.com/Telecominfraproject/wlan-cloud-ucentralgw). To use the interface,
you either need to run it on your machine for [development](#development) or build it for [production](#production).
@@ -9,40 +10,34 @@ NOTE: This UI will be evolving as micro services are added to the uCentral progr
## Running the solution
### Development
You need to run these commands in the root folder of the project and also have npm installed on your machine.
```
git clone https://github.com/Telecominfraproject/wlan-cloud-ucentralgw-ui
cd wlan-cloud-ucentralgw-ui
npm install
npm start
```
Run these commands if you want to run the solution on your machine while also doing development on the [uCentral UI Library](https://github.com/Telecominfraproject/wlan-cloud-ucentral-ui-libs).
```
git clone https://github.com/Telecominfraproject/wlan-cloud-ucentralgw-ui
git clone https://github.com/Telecominfraproject/wlan-cloud-ucentral-ui-libs
cd wlan-cloud-ucentralgw-ui
npm link ../wlan-cloud-ucentral-ui-libs // Add sudo at the start of this command if it fails because of permissions
npm start
npm run dev
```
### Production
You need to run this in the root folder of the project and also have npm installed on your machine.
```
git clone https://github.com/Telecominfraproject/wlan-cloud-ucentralgw-ui
cd wlan-cloud-ucentralgw-ui
npm install
npm run build
```
Once the build is done, you can move the `build` folder on your server.
### Configuration
You must change the `config.json` file in `public` directory to point to your uCentral Security Service URL (uCentralSec). You may also limit the ability for users to change the default uCentralSec. If you do not allow a uCentralSec change, the uCentralSec URL will not appear on the login screen.
Here are the current default values:
You can control the uCentral Security Service URL (uCentralSec) by modifying the ENV variable "VITE_UCENTRALSEC_URL". There is an example .env file located at the root of this repository.
Here are the current default values:
```
{
"DEFAULT_UCENTRALSEC_URL": "https://ucentral.dpaas.arilia.com:16001",
"ALLOW_UCENTRALSEC_CHANGE": false
}
VITE_UCENTRALSEC_URL="https://ucentral.dpaas.arilia.com:16001"
```

View File

@@ -1,25 +0,0 @@
{
"presets": [
[
"@babel/preset-env",
{
"modules": false
}
],
"@babel/preset-react"
],
"env": {
"production": {
"plugins": [
"@babel/plugin-transform-react-inline-elements",
"@babel/plugin-transform-react-constant-elements",
[
"transform-react-remove-prop-types",
{
"removeImport": true
}
]
]
}
}
}

View File

@@ -1,12 +0,0 @@
const path = require('path');
module.exports = {
// Source files
src: path.resolve(__dirname, '../src'),
// Production build files
build: path.resolve(__dirname, '../build'),
// Static files that get copied to build folder
public: path.resolve(__dirname, '../public'),
};

View File

@@ -1,79 +0,0 @@
/* eslint-disable import/no-extraneous-dependencies */
/* eslint-disable prefer-template */
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const webpack = require('webpack');
const path = require('path');
const paths = require('./paths');
module.exports = {
entry: [paths.src + '/index.js'],
output: {
path: paths.build,
filename: '[name].bundle.js',
publicPath: '/',
},
resolve: {
modules: [path.resolve('./node_modules'), path.resolve('./src')],
preferRelative: true,
},
plugins: [
new webpack.DefinePlugin({
'process.env.VERSION': JSON.stringify(process.env.npm_package_version),
}),
new MiniCssExtractPlugin({
filename: 'styles/[name].[contenthash].css',
chunkFilename: '[id].[contenthash].css',
}),
new CopyWebpackPlugin({
patterns: [
{
from: paths.src + '/assets',
to: 'assets',
globOptions: {
ignore: ['*.DS_Store'],
},
},
{
from: paths.public + '/locales',
to: 'locales',
globOptions: {
ignore: ['*.DS_Store'],
},
},
{
from: paths.public + '/config.json',
to: 'config.json',
},
],
}),
new HtmlWebpackPlugin({
title: 'uCentralGW',
favicon: paths.public + '/favicon.ico',
template: paths.public + '/index.html',
filename: 'index.html',
}),
new CleanWebpackPlugin(),
],
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: ['babel-loader'],
},
{
test: /\.(css|scss)$/,
use: [MiniCssExtractPlugin.loader, 'css-loader', 'sass-loader'],
},
{
test: /\.svg$/,
use: ['@svgr/webpack'],
},
{ test: /\.(?:ico|gif|png|jpg|jpeg)$/i, type: 'asset/resource' },
],
},
};

View File

@@ -1,54 +0,0 @@
/* eslint-disable import/no-extraneous-dependencies */
/* eslint-disable prefer-template */
const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
const { merge } = require('webpack-merge');
const path = require('path');
const paths = require('./paths');
const common = require('./webpack.common');
module.exports = merge(common, {
mode: 'development',
target: 'web',
devtool: 'inline-source-map',
devServer: {
historyApiFallback: true,
contentBase: paths.build,
open: true,
compress: false,
hot: true,
port: 3000,
},
module: {
rules: [
{
test: /\.[js]sx?$/,
exclude: /node_modules/,
use: [
{
loader: require.resolve('babel-loader'),
options: {
plugins: [require.resolve('react-refresh/babel')],
},
},
],
},
],
},
resolve: {
modules: [
'node_modules',
'src',
path.resolve(__dirname, '../', 'node_modules', 'ucentral-libs', 'src'),
],
alias: {
react: path.resolve(__dirname, '../', 'node_modules', 'react'),
'react-router-dom': path.resolve('./node_modules/react-router-dom'),
'ucentral-libs': path.resolve(__dirname, '../', 'node_modules', 'ucentral-libs', 'src'),
graphlib: path.resolve(__dirname, '../', 'node_modules', 'graphlib'),
},
},
plugins: [new ReactRefreshWebpackPlugin()],
});

View File

@@ -1,86 +0,0 @@
/* eslint-disable import/no-extraneous-dependencies */
/* eslint-disable prefer-template */
const { merge } = require('webpack-merge');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
const TerserPlugin = require('terser-webpack-plugin');
const CompressionPlugin = require('compression-webpack-plugin');
const path = require('path');
const paths = require('./paths');
const common = require('./webpack.common');
module.exports = merge(common, {
mode: 'production',
devtool: false,
output: {
path: paths.build,
publicPath: '/',
filename: 'js/[name].[contenthash].bundle.js',
},
plugins: [
// new BundleAnalyzerPlugin(),
new MiniCssExtractPlugin({
filename: 'styles/[name].[contenthash].css',
chunkFilename: '[contenthash].css',
}),
new CompressionPlugin({
filename: '[path]/[name].gz[query]',
algorithm: 'gzip',
test: /\.js$|\.css$|\.html$|\.eot?.+$|\.ttf?.+$|\.woff?.+$|\.svg?.+$/,
threshold: 10240,
minRatio: 0.8,
}),
],
module: {
rules: [],
},
optimization: {
minimize: true,
minimizer: [
'...',
new TerserPlugin({
terserOptions: {
warnings: false,
compress: {
comparisons: false,
},
parse: {},
mangle: true,
output: {
ascii_only: true,
},
},
parallel: true,
}),
new CssMinimizerPlugin(),
],
nodeEnv: 'production',
sideEffects: true,
runtimeChunk: 'single',
splitChunks: {
chunks: 'all',
maxInitialRequests: 10,
minSize: 0,
cacheGroups: {
vendor: {
test: /[\\/]node_modules[\\/]/,
name(module) {
const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1];
return `npm.${packageName.replace('@', '')}`;
},
},
},
},
},
resolve: {
modules: [],
alias: {
graphlib: path.resolve(__dirname, '../', 'node_modules', 'graphlib'),
},
},
performance: {
hints: false,
maxEntrypointSize: 512000,
maxAssetSize: 512000,
},
});

View File

@@ -1,6 +1,32 @@
#!/bin/ash
# Check if variables are set
export DEFAULT_OWSEC_URL="${DEFAULT_OWSEC_URL:-https://ucentral.dpaas.arilia.com:16001}"
export ALLOW_OWSEC_CHANGE="${ALLOW_OWSEC_CHANGE:-false}"
echo '{"DEFAULT_UCENTRALSEC_URL": "'$DEFAULT_UCENTRALSEC_URL'","ALLOW_UCENTRALSEC_CHANGE": '$ALLOW_UCENTRALSEC_CHANGE'}' > /usr/share/nginx/html/config.json
ENV_CONFIG_PATH=/usr/share/nginx/html/env-config.js
# Recreate config file
rm -rf $ENV_CONFIG_PATH
touch $ENV_CONFIG_PATH
# Add assignment
echo "window._env_ = {" >> $ENV_CONFIG_PATH
# Read each line in .env file
# Each line represents key=value pairs
env | grep REACT_ | while read -r line || [[ -n "$line" ]];
do
echo $line
# Split env variables by character `=`
if printf '%s\n' "$line" | grep -q -e '='; then
varname=$(printf '%s\n' "$line" | sed -e 's/=.*//')
varvalue=$(printf '%s\n' "$line" | sed -e 's/^[^=]*=//')
fi
# Read value of current variable if exists as Environment variable
value=$(printf '%s\n' "${!varname}")
# Otherwise use value from .env file
[[ -z $value ]] && value=${varvalue}
# Append configuration property to JS file
echo " $varname: \"$value\"," >> $ENV_CONFIG_PATH
done
echo "}" >> $ENV_CONFIG_PATH

View File

@@ -30,3 +30,13 @@ Create chart name and version as used by the chart label.
{{- define "owgwui.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- define "owgwui.ingress.apiVersion" -}}
{{- if .Capabilities.APIVersions.Has "networking.k8s.io/v1" -}}
{{- print "networking.k8s.io/v1" -}}
{{- else if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" -}}
{{- print "networking.k8s.io/v1beta1" -}}
{{- else -}}
{{- print "extensions/v1beta1" -}}
{{- end -}}
{{- end -}}

View File

@@ -2,7 +2,7 @@
{{- range $ingress, $ingressValue := .Values.ingresses }}
{{- if $ingressValue.enabled }}
---
apiVersion: extensions/v1beta1
apiVersion: {{ include "owgwui.ingress.apiVersion" $root }}
kind: Ingress
metadata:
name: {{ include "owgwui.fullname" $root }}-{{ $ingress }}
@@ -36,9 +36,23 @@ spec:
paths:
{{- range $ingressValue.paths }}
- path: {{ .path }}
{{- if $root.Capabilities.APIVersions.Has "networking.k8s.io/v1" }}
pathType: {{ .pathType | default "ImplementationSpecific" }}
{{- end }}
backend:
{{- if $root.Capabilities.APIVersions.Has "networking.k8s.io/v1" }}
service:
name: {{ include "owgwui.fullname" $root }}-{{ .serviceName }}
port:
{{- if kindIs "string" .servicePort }}
name: {{ .servicePort }}
{{- else }}
number: {{ .servicePort }}
{{- end }}
{{- else }}
serviceName: {{ include "owgwui.fullname" $root }}-{{ .serviceName }}
servicePort: {{ .servicePort }}
{{- end }}
{{- end }}
{{- end }}

View File

@@ -8,12 +8,12 @@ fullnameOverride: ""
images:
owgwui:
repository: tip-tip-wlan-cloud-ucentral.jfrog.io/owgw-ui
tag: v2.5.1
tag: v2.11.0
pullPolicy: Always
services:
owgwui:
type: NodePort
type: ClusterIP
ports:
http:
servicePort: 80
@@ -49,6 +49,7 @@ ingresses:
- chart-example.local
paths:
- path: /
pathType: ImplementationSpecific
serviceName: owgwui
servicePort: http
@@ -74,5 +75,4 @@ podAnnotations: {}
# Application
public_env_variables:
DEFAULT_UCENTRALSEC_URL: https://ucentral.dpaas.arilia.com:16001
ALLOW_UCENTRALSEC_CHANGE: false
REACT_APP_UCENTRALSEC_URL: https://ucentral.dpaas.arilia.com:16001

21
index.html Normal file
View File

@@ -0,0 +1,21 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Controller</title>
<meta name="description" content="OpenWiFi Controller App" />
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png" />
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5" />
<meta name="msapplication-TileColor" content="#da532c" />
<script src="/env-config.js"></script>
<meta name="theme-color" content="#000000" />
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
<script type="module" src="./src/index.tsx"></script>
</body>
</html>

View File

@@ -1,9 +0,0 @@
{
"compilerOptions": {
"baseUrl": "src",
"paths": {
"*": ["*"]
}
},
"include": ["src"]
}

29172
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,99 +1,100 @@
{
"name": "ucentral-client",
"version": "2.5.44",
"dependencies": {
"@coreui/coreui": "^3.4.0",
"@coreui/icons": "^2.0.1",
"@coreui/icons-react": "^1.1.0",
"@coreui/react": "^3.4.6",
"@coreui/react-chartjs": "^1.1.0",
"apexcharts": "^3.27.1",
"axios": "^0.21.1",
"axios-retry": "^3.1.9",
"dagre": "^0.8.5",
"i18next": "^20.3.1",
"i18next-browser-languagedetector": "^6.1.2",
"i18next-http-backend": "^1.2.6",
"prop-types": "^15.7.2",
"react": "^17.0.2",
"react-apexcharts": "^1.3.9",
"react-csv": "^2.2.2",
"react-dom": "^17.0.2",
"react-flow-renderer": "^9.6.6",
"react-i18next": "^11.11.0",
"react-paginate": "^7.1.3",
"react-router-dom": "^5.2.0",
"react-select": "^4.3.1",
"react-tooltip": "^4.2.21",
"react-widgets": "^5.1.1",
"sass": "^1.35.1",
"ucentral-libs": "^1.0.60",
"uuid": "^8.3.2"
},
"main": "index.js",
"version": "2.11.0(7)",
"description": "",
"private": true,
"main": "index.tsx",
"scripts": {
"start": "webpack serve --config config/webpack.dev.js",
"build": "webpack --config config/webpack.prod.js",
"format": "prettier --write 'src/**/*.js'",
"eslint-fix": "eslint --fix 'src/**/*.js'"
"dev": "vite",
"build": "vite build",
"format": "prettier --write \"src/**/*x.{ts,tsx,js,jsx}\"",
"analyze": "source-map-explorer 'build/static/js/*.js'",
"lint": "TIMING=1 eslint \"src/**/*.{ts,tsx,js,jsx}\" --fix",
"clean": "rm -rf node_modules && rm -rf build"
},
"eslintConfig": {
"extends": "react-app"
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"*.{js,jsx}": [
"eslint",
"prettier --write"
]
"author": "",
"license": "ISC",
"dependencies": {
"@chakra-ui/anatomy": "^2.1.1",
"@chakra-ui/icons": "^2.0.18",
"@chakra-ui/react": "^2.3.6",
"@chakra-ui/styled-system": "^2.9.0",
"@chakra-ui/theme-tools": "^2.0.12",
"@chakra-ui/utils": "^2.0.14",
"@emotion/react": "^11.10.6",
"@emotion/styled": "^11.10.6",
"@fontsource/inter": "^4.5.15",
"@googlemaps/react-wrapper": "^1.1.35",
"@googlemaps/typescript-guards": "^2.0.3",
"@hello-pangea/dnd": "^16.2.0",
"@phosphor-icons/react": "^2.0.8",
"@react-spring/web": "^9.7.2",
"@tanstack/react-query": "^4.29.3",
"@tanstack/react-table": "^8.8.5",
"@textea/json-viewer": "^2.16.2",
"axios": "^1.3.5",
"buffer": "^6.0.3",
"chakra-react-select": "^4.6.0",
"chart.js": "^3.9.1",
"dagre": "^0.8.5",
"fast-equals": "^5.0.1",
"formik": "^2.2.9",
"framer-motion": "^10.12.2",
"i18next": "^22.4.14",
"i18next-browser-languagedetector": "^7.0.1",
"i18next-http-backend": "^2.2.0",
"libphonenumber-js": "^1.10.26",
"prop-types": "^15.8.1",
"react": "^18.2.0",
"react-app-polyfill": "^3.0.0",
"react-chartjs-2": "^4.3.1",
"react-country-flag": "^3.1.0",
"react-csv": "^2.2.2",
"react-datepicker": "^4.11.0",
"react-dom": "^18.2.0",
"react-fast-compare": "^3.2.1",
"react-i18next": "^12.2.0",
"react-masonry-css": "^1.0.16",
"react-router-dom": "^6.10.0",
"react-table": "^7.8.0",
"react-virtualized-auto-sizer": "^1.0.15",
"react-window": "^1.8.9",
"source-map-explorer": "^2.5.3",
"typescript": "^5.0.4",
"uuid": "^9.0.0",
"vite": "^4.2.1",
"yup": "^0.32.11",
"zustand": "^4.3.7"
},
"devDependencies": {
"@babel/core": "^7.14.6",
"@babel/plugin-proposal-class-properties": "^7.14.5",
"@babel/plugin-transform-runtime": "^7.14.5",
"@babel/polyfill": "^7.12.1",
"@babel/preset-env": "^7.14.7",
"@babel/preset-react": "^7.14.5",
"@pmmmwh/react-refresh-webpack-plugin": "^0.4.3",
"@svgr/webpack": "^5.5.0",
"autoprefixer": "^10.2.6",
"babel-eslint": "^10.1.0",
"babel-loader": "^8.2.2",
"clean-webpack-plugin": "^3.0.0",
"compression-webpack-plugin": "^8.0.1",
"copy-webpack-plugin": "^7.0.0",
"css-loader": "^5.2.6",
"css-minimizer-webpack-plugin": "^2.0.0",
"dotenv-webpack": "^6.0.4",
"eslint": "^7.29.0",
"eslint-config-airbnb": "^18.2.1",
"eslint-config-prettier": "^7.2.0",
"@types/google.maps": "^3.52.5",
"@types/node": "^18.15.11",
"@types/react": "^18.0.37",
"@types/react-csv": "^1.1.3",
"@types/react-datepicker": "4.10.0",
"@types/react-dom": "^18.0.11",
"@types/react-table": "^7.7.14",
"@types/react-virtualized-auto-sizer": "^1.0.1",
"@types/react-window": "^1.8.5",
"@types/uuid": "^9.0.1",
"@vitejs/plugin-react": "^3.1.0",
"eslint": "8.38.0",
"eslint-config-airbnb": "^19.0.4",
"eslint-config-airbnb-typescript": "^17.0.0",
"eslint-config-airbnb-typescript-prettier": "^5.0.0",
"eslint-config-prettier": "^8.8.0",
"eslint-import-resolver-alias": "^1.1.2",
"eslint-loader": "^4.0.2",
"eslint-plugin-babel": "^5.3.1",
"eslint-plugin-import": "^2.23.4",
"eslint-plugin-prettier": "^3.4.0",
"eslint-plugin-react": "^7.24.0",
"eslint-plugin-react-hooks": "^4.2.0",
"html-webpack-plugin": "^5.3.2",
"husky": "^4.3.8",
"lint-staged": "^11.0.0",
"mini-css-extract-plugin": "^1.6.1",
"path": "^0.12.7",
"prettier": "^2.3.2",
"react-refresh": "^0.9.0",
"sass-loader": "^11.1.1",
"style-loader": "^2.0.0",
"terser-webpack-plugin": "^5.1.4",
"webpack": "^5.40.0",
"webpack-bundle-analyzer": "^4.4.2",
"webpack-cli": "^4.9.1",
"webpack-dev-server": "^3.11.2",
"webpack-merge": "^5.8.0"
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-jsx-a11y": "^6.7.1",
"eslint-plugin-no-inline-styles": "^1.0.5",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-react": "^7.32.2",
"eslint-plugin-react-hooks": "^4.6.0",
"lint-staged": "^13.2.1",
"prettier": "^2.8.7",
"vite-plugin-pwa": "^0.14.7",
"vite-tsconfig-paths": "^4.2.0"
},
"browserslist": {
"production": [

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

BIN
public/apple-touch-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

9
public/browserconfig.xml Normal file
View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<browserconfig>
<msapplication>
<tile>
<square150x150logo src="/mstile-150x150.png"/>
<TileColor>#414141</TileColor>
</tile>
</msapplication>
</browserconfig>

View File

@@ -1,4 +0,0 @@
{
"DEFAULT_UCENTRALSEC_URL": "https://ucentral.dpaas.arilia.com:16001",
"ALLOW_UCENTRALSEC_CHANGE": false
}

View File

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 104 KiB

View File

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 KiB

View File

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 KiB

View File

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 75 KiB

View File

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

Before

Width:  |  Height:  |  Size: 218 KiB

After

Width:  |  Height:  |  Size: 218 KiB

View File

Before

Width:  |  Height:  |  Size: 158 KiB

After

Width:  |  Height:  |  Size: 158 KiB

View File

Before

Width:  |  Height:  |  Size: 140 KiB

After

Width:  |  Height:  |  Size: 140 KiB

View File

Before

Width:  |  Height:  |  Size: 121 KiB

After

Width:  |  Height:  |  Size: 121 KiB

View File

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 44 KiB

View File

Before

Width:  |  Height:  |  Size: 192 KiB

After

Width:  |  Height:  |  Size: 192 KiB

View File

Before

Width:  |  Height:  |  Size: 197 KiB

After

Width:  |  Height:  |  Size: 197 KiB

View File

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View File

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 59 KiB

View File

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 59 KiB

View File

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 72 KiB

View File

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 421 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 817 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 879 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 664 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

View File

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 34 KiB

View File

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 98 KiB

View File

Before

Width:  |  Height:  |  Size: 89 KiB

After

Width:  |  Height:  |  Size: 89 KiB

View File

Before

Width:  |  Height:  |  Size: 89 KiB

After

Width:  |  Height:  |  Size: 89 KiB

View File

Before

Width:  |  Height:  |  Size: 204 KiB

After

Width:  |  Height:  |  Size: 204 KiB

View File

Before

Width:  |  Height:  |  Size: 159 KiB

After

Width:  |  Height:  |  Size: 159 KiB

View File

Before

Width:  |  Height:  |  Size: 159 KiB

After

Width:  |  Height:  |  Size: 159 KiB

View File

Before

Width:  |  Height:  |  Size: 103 KiB

After

Width:  |  Height:  |  Size: 103 KiB

View File

Before

Width:  |  Height:  |  Size: 103 KiB

After

Width:  |  Height:  |  Size: 103 KiB

View File

Before

Width:  |  Height:  |  Size: 103 KiB

After

Width:  |  Height:  |  Size: 103 KiB

View File

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 59 KiB

View File

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 KiB

View File

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
public/favicon-16x16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1021 B

BIN
public/favicon-32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

@@ -1,165 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 141.5 185.6" style="enable-background:new 0 0 141.5 185.6;" xml:space="preserve">
<style type="text/css">
.st0{fill:#414141;}
.st1{fill:#FFFFFF;}
.st2{fill:#FED206;}
.st3{fill:#EB6F53;}
.st4{fill:#3BA9B6;}
</style>
<g>
<g>
<path class="st0" d="M120.7,183.9H21.5c-10.8,0-19.5-8.7-19.5-19.5V20.5c0-10.8,8.7-19.5,19.5-19.5h99.2
c10.8,0,19.5,8.7,19.5,19.5v143.9C140.2,175.2,131.5,183.9,120.7,183.9z"/>
<g>
<g>
<g>
<path class="st1" d="M46.3,166.2v-3.4h-1.2v-0.6h3.1v0.6H47v3.4H46.3z"/>
</g>
<g>
<path class="st1" d="M49,166.2v-4h2.7v0.6h-2v1h2v0.6h-2v1.1h2v0.6H49z"/>
</g>
<g>
<path class="st1" d="M52.6,166.2v-4h0.7v3.4h1.8v0.6H52.6z"/>
</g>
<g>
<path class="st1" d="M55.7,166.2v-4h2.7v0.6h-2v1h2v0.6h-2v1.1h2v0.6H55.7z"/>
</g>
<g>
<path class="st1" d="M59.1,164.2c0-1.2,0.9-2.1,2.1-2.1c0.8,0,1.3,0.4,1.6,0.9l-0.6,0.3c-0.2-0.3-0.6-0.6-1-0.6
c-0.8,0-1.4,0.6-1.4,1.4c0,0.8,0.6,1.4,1.4,1.4c0.4,0,0.8-0.3,1-0.6l0.6,0.3c-0.3,0.5-0.8,0.9-1.6,0.9
C60,166.3,59.1,165.5,59.1,164.2z"/>
</g>
<g>
<path class="st1" d="M63.2,164.2c0-1.2,0.8-2.1,2-2.1c1.2,0,2,0.9,2,2.1c0,1.2-0.8,2.1-2,2.1C64,166.3,63.2,165.4,63.2,164.2z
M66.5,164.2c0-0.8-0.5-1.4-1.3-1.4c-0.8,0-1.3,0.6-1.3,1.4c0,0.8,0.5,1.4,1.3,1.4C66,165.7,66.5,165,66.5,164.2z"/>
</g>
<g>
<path class="st1" d="M71.3,166.2v-3.1l-1.2,3.1h-0.3l-1.2-3.1v3.1h-0.7v-4h1l1.1,2.7l1.1-2.7h1v4H71.3z"/>
</g>
<g>
<path class="st1" d="M75.7,166.2v-4h0.7v4H75.7z"/>
</g>
<g>
<path class="st1" d="M80.4,166.2l-2.1-2.8v2.8h-0.7v-4h0.7l2,2.8v-2.8h0.7v4H80.4z"/>
</g>
<g>
<path class="st1" d="M82.3,166.2v-4H85v0.6h-2v1h2v0.6h-2v1.7H82.3z"/>
</g>
<g>
<path class="st1" d="M87.9,166.2l-0.9-1.5h-0.7v1.5h-0.7v-4h1.7c0.8,0,1.3,0.5,1.3,1.2c0,0.7-0.5,1.1-0.9,1.2l1,1.6H87.9z
M88,163.5c0-0.4-0.3-0.6-0.7-0.6h-1v1.3h1C87.7,164.1,88,163.9,88,163.5z"/>
</g>
<g>
<path class="st1" d="M92.4,166.2l-0.3-0.8h-1.8l-0.3,0.8h-0.8l1.6-4h0.9l1.6,4H92.4z M91.2,162.9l-0.7,1.9h1.4L91.2,162.9z"/>
</g>
<g>
<path class="st1" d="M95.8,166.2v-4h1.5c0.8,0,1.2,0.5,1.2,1.2c0,0.6-0.4,1.2-1.2,1.2h-1.2v1.7H95.8z M98.2,163.4
c0-0.5-0.3-0.9-0.9-0.9h-1.1v1.7h1.1C97.8,164.3,98.2,163.9,98.2,163.4z"/>
</g>
<g>
<path class="st1" d="M101.5,166.2l-1.1-1.6h-0.9v1.6h-0.3v-4h1.5c0.7,0,1.2,0.4,1.2,1.2c0,0.7-0.5,1.1-1.1,1.1l1.2,1.7H101.5z
M101.6,163.4c0-0.5-0.4-0.9-0.9-0.9h-1.1v1.7h1.1C101.2,164.3,101.6,163.9,101.6,163.4z"/>
</g>
<g>
<path class="st1" d="M102.8,164.2c0-1.2,0.8-2.1,1.9-2.1c1.2,0,1.9,0.9,1.9,2.1c0,1.2-0.8,2.1-1.9,2.1
C103.6,166.3,102.8,165.4,102.8,164.2z M106.3,164.2c0-1-0.6-1.7-1.6-1.7c-1,0-1.6,0.7-1.6,1.7c0,1,0.6,1.7,1.6,1.7
C105.7,166,106.3,165.2,106.3,164.2z"/>
</g>
<g>
<path class="st1" d="M106.9,165.8l0.2-0.3c0.2,0.2,0.4,0.4,0.8,0.4c0.5,0,0.9-0.4,0.9-0.9v-2.8h0.3v2.8c0,0.8-0.5,1.2-1.2,1.2
C107.5,166.3,107.2,166.1,106.9,165.8z"/>
</g>
<g>
<path class="st1" d="M110.4,166.2v-4h2.5v0.3h-2.2v1.5h2.1v0.3h-2.1v1.6h2.2v0.3H110.4z"/>
</g>
<g>
<path class="st1" d="M113.5,164.2c0-1.2,0.9-2.1,2-2.1c0.6,0,1.1,0.3,1.5,0.7l-0.3,0.2c-0.3-0.3-0.7-0.6-1.2-0.6
c-0.9,0-1.7,0.7-1.7,1.7c0,1,0.7,1.7,1.7,1.7c0.5,0,0.9-0.2,1.2-0.6l0.3,0.2c-0.4,0.4-0.8,0.7-1.5,0.7
C114.4,166.3,113.5,165.5,113.5,164.2z"/>
</g>
<g>
<path class="st1" d="M118.7,166.2v-3.7h-1.3v-0.3h2.9v0.3H119v3.7H118.7z"/>
</g>
</g>
<g>
<polygon class="st1" points="26.3,163.8 31.6,158.5 36.9,163.8 37.7,163.8 31.6,157.6 25.5,163.8 "/>
<polygon class="st1" points="36.9,164.7 31.6,170 26.3,164.7 25.5,164.7 31.6,170.8 37.7,164.7 "/>
<polygon class="st1" points="31,163.8 36.3,158.5 41.6,163.8 42.5,163.8 36.3,157.6 30.2,163.8 "/>
<polygon class="st1" points="41.6,164.7 36.3,170 31,164.7 30.2,164.7 36.3,170.8 42.5,164.7 "/>
</g>
</g>
<g>
<path class="st1" d="M33.2,100.7c-4.6,0-8.3,3.7-8.3,8.3s3.7,8.3,8.3,8.3s8.3-3.7,8.3-8.3S37.8,100.7,33.2,100.7z"/>
</g>
<g>
<g>
<g>
<path class="st2" d="M33.2,35.2c40.7,0,73.8,33.1,73.8,73.8c0,0.7,0,1.4,0,2.1c0,1.7,0.6,3.3,1.7,4.6c1.2,1.2,2.8,1.9,4.5,2
l0.2,0c3.5,0,6.3-2.7,6.4-6.2c0-0.8,0-1.7,0-2.5c0-47.7-38.8-86.6-86.6-86.6c-0.8,0-1.7,0-2.5,0c-1.7,0-3.3,0.8-4.5,2
c-1.2,1.2-1.8,2.9-1.7,4.6c0.1,3.5,3,6.3,6.6,6.2C31.8,35.2,32.5,35.2,33.2,35.2z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path class="st3" d="M33.2,60.5c26.7,0,48.5,21.7,48.5,48.5c0,0.6,0,1.3,0,2c-0.1,1.7,0.5,3.3,1.7,4.6c1.2,1.3,2.7,2,4.4,2.1
c1.7,0.1,3.3-0.5,4.6-1.7c1.2-1.2,2-2.7,2-4.4c0-0.9,0.1-1.8,0.1-2.6c0-33.8-27.5-61.2-61.2-61.2c-0.8,0-1.6,0-2.6,0.1
c-1.7,0.1-3.3,0.8-4.4,2.1c-1.2,1.3-1.8,2.9-1.7,4.6s0.8,3.3,2.1,4.4c1.3,1.2,2.9,1.8,4.6,1.7C31.9,60.5,32.6,60.5,33.2,60.5z"
/>
</g>
</g>
</g>
<g>
<g>
<g>
<path class="st4" d="M33.2,86.7c12.3,0,22.3,10,22.3,22.3c0,0.5,0,1.1-0.1,1.8c-0.3,3.5,2.3,6.6,5.8,6.9
c3.5,0.3,6.6-2.3,6.9-5.8c0.1-1,0.1-1.9,0.1-2.8c0-19.3-15.7-35.1-35.1-35.1c-0.9,0-1.8,0-2.8,0.1c-1.7,0.1-3.2,0.9-4.3,2.2
c-1.1,1.3-1.6,2.9-1.5,4.6c0.1,1.7,0.9,3.2,2.2,4.3c1.3,1.1,2.9,1.6,4.6,1.5C32.1,86.7,32.7,86.7,33.2,86.7z"/>
</g>
</g>
</g>
</g>
<g>
<path class="st1" d="M35.8,130.4c1.1,0.6,2.1,1.5,2.7,2.6c0.7,1.1,1,2.3,1,3.7s-0.3,2.6-1,3.7c-0.7,1.1-1.6,2-2.7,2.6
c-1.1,0.6-2.4,1-3.8,1s-2.7-0.3-3.8-1c-1.1-0.6-2.1-1.5-2.7-2.6c-0.7-1.1-1-2.3-1-3.7c0-1.3,0.3-2.6,1-3.7c0.7-1.1,1.6-2,2.7-2.6
c1.1-0.6,2.4-0.9,3.8-0.9C33.4,129.5,34.7,129.8,35.8,130.4z M29.9,132.9c-0.7,0.4-1.2,0.9-1.6,1.6s-0.6,1.4-0.6,2.2
c0,0.8,0.2,1.6,0.6,2.3c0.4,0.7,0.9,1.2,1.6,1.6c0.7,0.4,1.4,0.6,2.1,0.6c0.8,0,1.5-0.2,2.1-0.6c0.6-0.4,1.2-0.9,1.5-1.6
c0.4-0.7,0.6-1.4,0.6-2.3c0-0.8-0.2-1.6-0.6-2.2s-0.9-1.2-1.5-1.6c-0.6-0.4-1.4-0.6-2.1-0.6C31.3,132.3,30.6,132.5,29.9,132.9z"/>
<path class="st1" d="M50.6,133.6c0.8,0.5,1.4,1.1,1.8,2c0.4,0.8,0.6,1.8,0.6,2.9c0,1.1-0.2,2-0.6,2.8c-0.4,0.8-1,1.5-1.8,1.9
c-0.8,0.5-1.6,0.7-2.6,0.7c-0.7,0-1.4-0.1-2-0.4s-1.1-0.7-1.5-1.2v5.4h-3.1V133h3.1v1.6c0.4-0.5,0.9-1,1.4-1.2s1.2-0.4,2-0.4
C48.9,132.9,49.8,133.1,50.6,133.6z M49.1,140.5c0.5-0.6,0.7-1.3,0.7-2.2c0-0.9-0.2-1.6-0.7-2.1c-0.5-0.6-1.1-0.8-1.9-0.8
s-1.4,0.3-1.9,0.8c-0.5,0.6-0.8,1.3-0.8,2.1c0,0.9,0.2,1.6,0.8,2.2s1.1,0.8,1.9,0.8S48.6,141,49.1,140.5z"/>
<path class="st1" d="M63.4,134.4c0.9,1,1.4,2.4,1.4,4.2c0,0.3,0,0.6,0,0.7H57c0.2,0.7,0.5,1.2,1,1.6c0.5,0.4,1.1,0.6,1.8,0.6
c0.5,0,1-0.1,1.5-0.3s0.9-0.5,1.3-0.9l1.6,1.6c-0.5,0.6-1.2,1.1-2,1.4c-0.8,0.3-1.6,0.5-2.6,0.5c-1.1,0-2.1-0.2-3-0.7
s-1.5-1.1-2-1.9c-0.5-0.8-0.7-1.8-0.7-2.9c0-1.1,0.2-2.1,0.7-2.9s1.1-1.5,2-1.9c0.8-0.5,1.8-0.7,2.9-0.7
C61.2,132.9,62.5,133.4,63.4,134.4z M61.8,137.5c0-0.7-0.3-1.3-0.7-1.7s-1-0.6-1.7-0.6c-0.7,0-1.2,0.2-1.7,0.6
c-0.4,0.4-0.7,1-0.9,1.7H61.8z"/>
<path class="st1" d="M76.2,134c0.7,0.7,1.1,1.7,1.1,3v6.8h-3.1v-5.9c0-0.7-0.2-1.2-0.6-1.6s-0.9-0.6-1.5-0.6
c-0.8,0-1.4,0.3-1.8,0.8c-0.4,0.5-0.7,1.2-0.7,2v5.3h-3.1V133h3.1v1.9c0.7-1.3,2-2,3.7-2C74.6,132.8,75.5,133.2,76.2,134z"/>
<path class="st1" d="M96,129.7h3.3l-4.7,14h-3.3l-2.9-10.1l-3,10.1h-3.2l-4.7-14h3.4l3,10.7l3-10.7H90l3.1,10.7L96,129.7z"/>
<path class="st1" d="M103.3,128.7c0.3,0.3,0.5,0.7,0.5,1.2s-0.2,0.9-0.5,1.2c-0.3,0.3-0.7,0.5-1.2,0.5c-0.5,0-0.9-0.2-1.2-0.5
c-0.3-0.3-0.5-0.7-0.5-1.2c0-0.5,0.2-0.9,0.5-1.2c0.3-0.3,0.7-0.5,1.2-0.5C102.6,128.2,103,128.3,103.3,128.7z M100.6,133h3.1
v10.8h-3.1V133z"/>
<path class="st1" d="M106.5,129.7h10.1l0,2.6h-6.9v3.4h6.3v2.6h-6.3v5.3h-3.2V129.7z"/>
<path class="st1" d="M120.9,128.7c0.3,0.3,0.5,0.7,0.5,1.2s-0.2,0.9-0.5,1.2c-0.3,0.3-0.7,0.5-1.2,0.5c-0.5,0-0.9-0.2-1.2-0.5
c-0.3-0.3-0.5-0.7-0.5-1.2c0-0.5,0.2-0.9,0.5-1.2c0.3-0.3,0.7-0.5,1.2-0.5C120.1,128.2,120.5,128.3,120.9,128.7z M118.1,133h3.1
v10.8h-3.1V133z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 8.0 KiB

View File

@@ -1,14 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<title>Gateway</title>
</head>
<body>
<noscript>You need to enable JavaScript to run this app.</noscript>
<div id="root"></div>
</body>
</html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

BIN
public/mstile-150x150.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

View File

@@ -0,0 +1,38 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="744.000000pt" height="744.000000pt" viewBox="0 0 744.000000 744.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.14, written by Peter Selinger 2001-2017
</metadata>
<g transform="translate(0.000000,744.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M1827 7404 c-2 -2 -50 -6 -108 -8 -57 -3 -120 -10 -139 -15 -19 -6
-56 -16 -82 -22 -27 -7 -48 -16 -48 -20 0 -4 -14 -10 -30 -14 -17 -4 -36 -12
-43 -18 -7 -7 -28 -21 -46 -31 -115 -64 -247 -224 -304 -366 -59 -150 -55 65
-56 -3180 0 -3270 -5 -3017 60 -3178 92 -232 303 -410 546 -463 32 -7 65 -14
73 -16 22 -5 4127 -3 4180 2 77 7 279 77 300 104 3 3 25 19 50 35 56 37 135
116 180 181 19 28 38 52 43 53 4 2 5 7 2 12 -3 4 2 13 10 20 8 7 15 21 15 31
0 10 4 20 9 23 8 6 39 91 47 131 2 11 7 31 11 45 4 14 8 1364 9 3000 2 3142 3
3032 -42 3165 -43 130 -131 255 -245 350 -33 28 -123 90 -127 87 -1 -1 -16 5
-34 14 -35 18 -128 50 -173 59 -30 6 -187 18 -215 16 -57 -3 -122 -1 -129 4
-5 3 -11 1 -13 -4 -1 -5 -23 -6 -48 -2 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
-23 3 -44 2 -45 -2 -2 -4 -23 -4 -48 0 -25 4 -58 4 -75 1 -16 -3 -49 -3 -72 1
-23 3 -44 2 -45 -2 -2 -4 -24 -4 -50 0 -27 5 -49 6 -51 5z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

24
src/@tanstack.react-table.d.ts vendored Normal file
View File

@@ -0,0 +1,24 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
import { BoxProps } from '@chakra-ui/react';
import '@tanstack/react-table';
declare module '@tanstack/table-core' {
interface ColumnMeta<TData extends RowData, TValue> {
stopPropagation?: boolean;
alwaysShow?: boolean;
anchored?: boolean;
hasPopover?: boolean;
customMaxWidth?: string;
customMinWidth?: string;
customWidth?: string;
isMonospace?: boolean;
isCentered?: boolean;
columnSelectorOptions?: {
label?: string;
};
headerOptions?: {
tooltip?: string;
};
headerStyleProps?: BoxProps;
}
}

View File

@@ -1,39 +0,0 @@
import React from 'react';
import { HashRouter, Switch } from 'react-router-dom';
import 'scss/style.scss';
import Router from 'router';
import { AuthProvider } from 'ucentral-libs';
import { checkIfJson } from 'utils/helper';
import axiosInstance from 'utils/axiosInstance';
import { getItem } from 'utils/localStorageHelper';
const loading = (
<div className="pt-3 text-center">
<div className="sk-spinner sk-spinner-pulse" />
</div>
);
const App = () => {
const storageToken = getItem('access_token');
const apiEndpoints = checkIfJson(getItem('gateway_endpoints'))
? JSON.parse(getItem('gateway_endpoints'))
: {};
return (
<AuthProvider
axiosInstance={axiosInstance}
token={storageToken ?? ''}
apiEndpoints={apiEndpoints}
>
<HashRouter>
<React.Suspense fallback={loading}>
<Switch>
<Router />
</Switch>
</React.Suspense>
</HashRouter>
</AuthProvider>
);
};
export default App;

45
src/App.tsx Normal file
View File

@@ -0,0 +1,45 @@
import React, { Suspense } from 'react';
import { Spinner } from '@chakra-ui/react';
import { QueryClientProvider, QueryClient } from '@tanstack/react-query';
import { HashRouter } from 'react-router-dom';
import { AuthProvider } from 'contexts/AuthProvider';
import { ControllerSocketProvider } from 'contexts/ControllerSocketProvider';
import { FirmwareSocketProvider } from 'contexts/FirmwareSocketProvider';
import { ProvisioningSocketProvider } from 'contexts/ProvisioningSocketProvider';
import { SecuritySocketProvider } from 'contexts/SecuritySocketProvider';
import Router from 'router';
const queryClient = new QueryClient({
defaultOptions: {
queries: {
retry: 0,
refetchOnWindowFocus: false,
},
},
});
const App = () => {
const storageToken = localStorage.getItem('access_token') ?? sessionStorage.getItem('access_token');
return (
<QueryClientProvider client={queryClient}>
<HashRouter>
<Suspense fallback={<Spinner />}>
<AuthProvider token={storageToken !== null ? storageToken : undefined}>
<SecuritySocketProvider>
<FirmwareSocketProvider>
<ProvisioningSocketProvider>
<ControllerSocketProvider>
<Router />
</ControllerSocketProvider>
</ProvisioningSocketProvider>
</FirmwareSocketProvider>
</SecuritySocketProvider>
</AuthProvider>
</Suspense>
</HashRouter>
</QueryClientProvider>
);
};
export default App;

View File

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

View File

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -1,165 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.2.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 141.5 185.6" style="enable-background:new 0 0 141.5 185.6;" xml:space="preserve">
<style type="text/css">
.st0{fill:#414141;}
.st1{fill:#FFFFFF;}
.st2{fill:#FED206;}
.st3{fill:#EB6F53;}
.st4{fill:#3BA9B6;}
</style>
<g>
<g>
<path class="st0" d="M120.7,183.9H21.5c-10.8,0-19.5-8.7-19.5-19.5V20.5c0-10.8,8.7-19.5,19.5-19.5h99.2
c10.8,0,19.5,8.7,19.5,19.5v143.9C140.2,175.2,131.5,183.9,120.7,183.9z"/>
<g>
<g>
<g>
<path class="st1" d="M46.3,166.2v-3.4h-1.2v-0.6h3.1v0.6H47v3.4H46.3z"/>
</g>
<g>
<path class="st1" d="M49,166.2v-4h2.7v0.6h-2v1h2v0.6h-2v1.1h2v0.6H49z"/>
</g>
<g>
<path class="st1" d="M52.6,166.2v-4h0.7v3.4h1.8v0.6H52.6z"/>
</g>
<g>
<path class="st1" d="M55.7,166.2v-4h2.7v0.6h-2v1h2v0.6h-2v1.1h2v0.6H55.7z"/>
</g>
<g>
<path class="st1" d="M59.1,164.2c0-1.2,0.9-2.1,2.1-2.1c0.8,0,1.3,0.4,1.6,0.9l-0.6,0.3c-0.2-0.3-0.6-0.6-1-0.6
c-0.8,0-1.4,0.6-1.4,1.4c0,0.8,0.6,1.4,1.4,1.4c0.4,0,0.8-0.3,1-0.6l0.6,0.3c-0.3,0.5-0.8,0.9-1.6,0.9
C60,166.3,59.1,165.5,59.1,164.2z"/>
</g>
<g>
<path class="st1" d="M63.2,164.2c0-1.2,0.8-2.1,2-2.1c1.2,0,2,0.9,2,2.1c0,1.2-0.8,2.1-2,2.1C64,166.3,63.2,165.4,63.2,164.2z
M66.5,164.2c0-0.8-0.5-1.4-1.3-1.4c-0.8,0-1.3,0.6-1.3,1.4c0,0.8,0.5,1.4,1.3,1.4C66,165.7,66.5,165,66.5,164.2z"/>
</g>
<g>
<path class="st1" d="M71.3,166.2v-3.1l-1.2,3.1h-0.3l-1.2-3.1v3.1h-0.7v-4h1l1.1,2.7l1.1-2.7h1v4H71.3z"/>
</g>
<g>
<path class="st1" d="M75.7,166.2v-4h0.7v4H75.7z"/>
</g>
<g>
<path class="st1" d="M80.4,166.2l-2.1-2.8v2.8h-0.7v-4h0.7l2,2.8v-2.8h0.7v4H80.4z"/>
</g>
<g>
<path class="st1" d="M82.3,166.2v-4H85v0.6h-2v1h2v0.6h-2v1.7H82.3z"/>
</g>
<g>
<path class="st1" d="M87.9,166.2l-0.9-1.5h-0.7v1.5h-0.7v-4h1.7c0.8,0,1.3,0.5,1.3,1.2c0,0.7-0.5,1.1-0.9,1.2l1,1.6H87.9z
M88,163.5c0-0.4-0.3-0.6-0.7-0.6h-1v1.3h1C87.7,164.1,88,163.9,88,163.5z"/>
</g>
<g>
<path class="st1" d="M92.4,166.2l-0.3-0.8h-1.8l-0.3,0.8h-0.8l1.6-4h0.9l1.6,4H92.4z M91.2,162.9l-0.7,1.9h1.4L91.2,162.9z"/>
</g>
<g>
<path class="st1" d="M95.8,166.2v-4h1.5c0.8,0,1.2,0.5,1.2,1.2c0,0.6-0.4,1.2-1.2,1.2h-1.2v1.7H95.8z M98.2,163.4
c0-0.5-0.3-0.9-0.9-0.9h-1.1v1.7h1.1C97.8,164.3,98.2,163.9,98.2,163.4z"/>
</g>
<g>
<path class="st1" d="M101.5,166.2l-1.1-1.6h-0.9v1.6h-0.3v-4h1.5c0.7,0,1.2,0.4,1.2,1.2c0,0.7-0.5,1.1-1.1,1.1l1.2,1.7H101.5z
M101.6,163.4c0-0.5-0.4-0.9-0.9-0.9h-1.1v1.7h1.1C101.2,164.3,101.6,163.9,101.6,163.4z"/>
</g>
<g>
<path class="st1" d="M102.8,164.2c0-1.2,0.8-2.1,1.9-2.1c1.2,0,1.9,0.9,1.9,2.1c0,1.2-0.8,2.1-1.9,2.1
C103.6,166.3,102.8,165.4,102.8,164.2z M106.3,164.2c0-1-0.6-1.7-1.6-1.7c-1,0-1.6,0.7-1.6,1.7c0,1,0.6,1.7,1.6,1.7
C105.7,166,106.3,165.2,106.3,164.2z"/>
</g>
<g>
<path class="st1" d="M106.9,165.8l0.2-0.3c0.2,0.2,0.4,0.4,0.8,0.4c0.5,0,0.9-0.4,0.9-0.9v-2.8h0.3v2.8c0,0.8-0.5,1.2-1.2,1.2
C107.5,166.3,107.2,166.1,106.9,165.8z"/>
</g>
<g>
<path class="st1" d="M110.4,166.2v-4h2.5v0.3h-2.2v1.5h2.1v0.3h-2.1v1.6h2.2v0.3H110.4z"/>
</g>
<g>
<path class="st1" d="M113.5,164.2c0-1.2,0.9-2.1,2-2.1c0.6,0,1.1,0.3,1.5,0.7l-0.3,0.2c-0.3-0.3-0.7-0.6-1.2-0.6
c-0.9,0-1.7,0.7-1.7,1.7c0,1,0.7,1.7,1.7,1.7c0.5,0,0.9-0.2,1.2-0.6l0.3,0.2c-0.4,0.4-0.8,0.7-1.5,0.7
C114.4,166.3,113.5,165.5,113.5,164.2z"/>
</g>
<g>
<path class="st1" d="M118.7,166.2v-3.7h-1.3v-0.3h2.9v0.3H119v3.7H118.7z"/>
</g>
</g>
<g>
<polygon class="st1" points="26.3,163.8 31.6,158.5 36.9,163.8 37.7,163.8 31.6,157.6 25.5,163.8 "/>
<polygon class="st1" points="36.9,164.7 31.6,170 26.3,164.7 25.5,164.7 31.6,170.8 37.7,164.7 "/>
<polygon class="st1" points="31,163.8 36.3,158.5 41.6,163.8 42.5,163.8 36.3,157.6 30.2,163.8 "/>
<polygon class="st1" points="41.6,164.7 36.3,170 31,164.7 30.2,164.7 36.3,170.8 42.5,164.7 "/>
</g>
</g>
<g>
<path class="st1" d="M33.2,100.7c-4.6,0-8.3,3.7-8.3,8.3s3.7,8.3,8.3,8.3s8.3-3.7,8.3-8.3S37.8,100.7,33.2,100.7z"/>
</g>
<g>
<g>
<g>
<path class="st2" d="M33.2,35.2c40.7,0,73.8,33.1,73.8,73.8c0,0.7,0,1.4,0,2.1c0,1.7,0.6,3.3,1.7,4.6c1.2,1.2,2.8,1.9,4.5,2
l0.2,0c3.5,0,6.3-2.7,6.4-6.2c0-0.8,0-1.7,0-2.5c0-47.7-38.8-86.6-86.6-86.6c-0.8,0-1.7,0-2.5,0c-1.7,0-3.3,0.8-4.5,2
c-1.2,1.2-1.8,2.9-1.7,4.6c0.1,3.5,3,6.3,6.6,6.2C31.8,35.2,32.5,35.2,33.2,35.2z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path class="st3" d="M33.2,60.5c26.7,0,48.5,21.7,48.5,48.5c0,0.6,0,1.3,0,2c-0.1,1.7,0.5,3.3,1.7,4.6c1.2,1.3,2.7,2,4.4,2.1
c1.7,0.1,3.3-0.5,4.6-1.7c1.2-1.2,2-2.7,2-4.4c0-0.9,0.1-1.8,0.1-2.6c0-33.8-27.5-61.2-61.2-61.2c-0.8,0-1.6,0-2.6,0.1
c-1.7,0.1-3.3,0.8-4.4,2.1c-1.2,1.3-1.8,2.9-1.7,4.6s0.8,3.3,2.1,4.4c1.3,1.2,2.9,1.8,4.6,1.7C31.9,60.5,32.6,60.5,33.2,60.5z"
/>
</g>
</g>
</g>
<g>
<g>
<g>
<path class="st4" d="M33.2,86.7c12.3,0,22.3,10,22.3,22.3c0,0.5,0,1.1-0.1,1.8c-0.3,3.5,2.3,6.6,5.8,6.9
c3.5,0.3,6.6-2.3,6.9-5.8c0.1-1,0.1-1.9,0.1-2.8c0-19.3-15.7-35.1-35.1-35.1c-0.9,0-1.8,0-2.8,0.1c-1.7,0.1-3.2,0.9-4.3,2.2
c-1.1,1.3-1.6,2.9-1.5,4.6c0.1,1.7,0.9,3.2,2.2,4.3c1.3,1.1,2.9,1.6,4.6,1.5C32.1,86.7,32.7,86.7,33.2,86.7z"/>
</g>
</g>
</g>
</g>
<g>
<path class="st1" d="M35.8,130.4c1.1,0.6,2.1,1.5,2.7,2.6c0.7,1.1,1,2.3,1,3.7s-0.3,2.6-1,3.7c-0.7,1.1-1.6,2-2.7,2.6
c-1.1,0.6-2.4,1-3.8,1s-2.7-0.3-3.8-1c-1.1-0.6-2.1-1.5-2.7-2.6c-0.7-1.1-1-2.3-1-3.7c0-1.3,0.3-2.6,1-3.7c0.7-1.1,1.6-2,2.7-2.6
c1.1-0.6,2.4-0.9,3.8-0.9C33.4,129.5,34.7,129.8,35.8,130.4z M29.9,132.9c-0.7,0.4-1.2,0.9-1.6,1.6s-0.6,1.4-0.6,2.2
c0,0.8,0.2,1.6,0.6,2.3c0.4,0.7,0.9,1.2,1.6,1.6c0.7,0.4,1.4,0.6,2.1,0.6c0.8,0,1.5-0.2,2.1-0.6c0.6-0.4,1.2-0.9,1.5-1.6
c0.4-0.7,0.6-1.4,0.6-2.3c0-0.8-0.2-1.6-0.6-2.2s-0.9-1.2-1.5-1.6c-0.6-0.4-1.4-0.6-2.1-0.6C31.3,132.3,30.6,132.5,29.9,132.9z"/>
<path class="st1" d="M50.6,133.6c0.8,0.5,1.4,1.1,1.8,2c0.4,0.8,0.6,1.8,0.6,2.9c0,1.1-0.2,2-0.6,2.8c-0.4,0.8-1,1.5-1.8,1.9
c-0.8,0.5-1.6,0.7-2.6,0.7c-0.7,0-1.4-0.1-2-0.4s-1.1-0.7-1.5-1.2v5.4h-3.1V133h3.1v1.6c0.4-0.5,0.9-1,1.4-1.2s1.2-0.4,2-0.4
C48.9,132.9,49.8,133.1,50.6,133.6z M49.1,140.5c0.5-0.6,0.7-1.3,0.7-2.2c0-0.9-0.2-1.6-0.7-2.1c-0.5-0.6-1.1-0.8-1.9-0.8
s-1.4,0.3-1.9,0.8c-0.5,0.6-0.8,1.3-0.8,2.1c0,0.9,0.2,1.6,0.8,2.2s1.1,0.8,1.9,0.8S48.6,141,49.1,140.5z"/>
<path class="st1" d="M63.4,134.4c0.9,1,1.4,2.4,1.4,4.2c0,0.3,0,0.6,0,0.7H57c0.2,0.7,0.5,1.2,1,1.6c0.5,0.4,1.1,0.6,1.8,0.6
c0.5,0,1-0.1,1.5-0.3s0.9-0.5,1.3-0.9l1.6,1.6c-0.5,0.6-1.2,1.1-2,1.4c-0.8,0.3-1.6,0.5-2.6,0.5c-1.1,0-2.1-0.2-3-0.7
s-1.5-1.1-2-1.9c-0.5-0.8-0.7-1.8-0.7-2.9c0-1.1,0.2-2.1,0.7-2.9s1.1-1.5,2-1.9c0.8-0.5,1.8-0.7,2.9-0.7
C61.2,132.9,62.5,133.4,63.4,134.4z M61.8,137.5c0-0.7-0.3-1.3-0.7-1.7s-1-0.6-1.7-0.6c-0.7,0-1.2,0.2-1.7,0.6
c-0.4,0.4-0.7,1-0.9,1.7H61.8z"/>
<path class="st1" d="M76.2,134c0.7,0.7,1.1,1.7,1.1,3v6.8h-3.1v-5.9c0-0.7-0.2-1.2-0.6-1.6s-0.9-0.6-1.5-0.6
c-0.8,0-1.4,0.3-1.8,0.8c-0.4,0.5-0.7,1.2-0.7,2v5.3h-3.1V133h3.1v1.9c0.7-1.3,2-2,3.7-2C74.6,132.8,75.5,133.2,76.2,134z"/>
<path class="st1" d="M96,129.7h3.3l-4.7,14h-3.3l-2.9-10.1l-3,10.1h-3.2l-4.7-14h3.4l3,10.7l3-10.7H90l3.1,10.7L96,129.7z"/>
<path class="st1" d="M103.3,128.7c0.3,0.3,0.5,0.7,0.5,1.2s-0.2,0.9-0.5,1.2c-0.3,0.3-0.7,0.5-1.2,0.5c-0.5,0-0.9-0.2-1.2-0.5
c-0.3-0.3-0.5-0.7-0.5-1.2c0-0.5,0.2-0.9,0.5-1.2c0.3-0.3,0.7-0.5,1.2-0.5C102.6,128.2,103,128.3,103.3,128.7z M100.6,133h3.1
v10.8h-3.1V133z"/>
<path class="st1" d="M106.5,129.7h10.1l0,2.6h-6.9v3.4h6.3v2.6h-6.3v5.3h-3.2V129.7z"/>
<path class="st1" d="M120.9,128.7c0.3,0.3,0.5,0.7,0.5,1.2s-0.2,0.9-0.5,1.2c-0.3,0.3-0.7,0.5-1.2,0.5c-0.5,0-0.9-0.2-1.2-0.5
c-0.3-0.3-0.5-0.7-0.5-1.2c0-0.5,0.2-0.9,0.5-1.2c0.3-0.3,0.7-0.5,1.2-0.5C120.1,128.2,120.5,128.3,120.9,128.7z M118.1,133h3.1
v10.8h-3.1V133z"/>
</g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 8.0 KiB

View File

@@ -1,203 +0,0 @@
import {
cifUs,
cifBr,
cifIn,
cifFr,
cifEs,
cifPl,
cilAlignCenter,
cilAlignLeft,
cilAlignRight,
cilApplicationsSettings,
cilArrowRight,
cilArrowTop,
cilAsterisk,
cilBan,
cilBarcode,
cilBasket,
cilBell,
cilBold,
cilBookmark,
cilCalculator,
cilCalendar,
cilCloudDownload,
cilChartPie,
cilCheck,
cilChevronBottom,
cilChevronLeft,
cilChevronRight,
cilChevronTop,
cilCircle,
cilCheckCircle,
cilCode,
cilCommentSquare,
cilCreditCard,
cilCursor,
cilCursorMove,
cilDrop,
cilDollar,
cilEnvelopeClosed,
cilEnvelopeLetter,
cilEnvelopeOpen,
cilEuro,
cilGlobeAlt,
cilGrid,
cilFile,
cilFullscreen,
cilFullscreenExit,
cilGraph,
cilHome,
cilInbox,
cilIndentDecrease,
cilIndentIncrease,
cilInputPower,
cilItalic,
cilJustifyCenter,
cilJustifyLeft,
cilLaptop,
cilLayers,
cilLightbulb,
cilList,
cilListNumbered,
cilListRich,
cilLocationPin,
cilLockLocked,
cilMagnifyingGlass,
cilMap,
cilMoon,
cilNotes,
cilOptions,
cilPaperclip,
cilPaperPlane,
cilPencil,
cilPeople,
cilPhone,
cilPrint,
cilPuzzle,
cilRouter,
cilSave,
cilScrubber,
cilSettings,
cilShare,
cilShareAll,
cilShareBoxed,
cilShieldAlt,
cilSpeech,
cilSpeedometer,
cilSpreadsheet,
cilStar,
cilSun,
cilTags,
cilTask,
cilTrash,
cilUnderline,
cilUser,
cilUserFemale,
cilUserFollow,
cilUserUnfollow,
cilX,
cilXCircle,
cilWarning,
} from '@coreui/icons';
export const icons = {
cilAlignCenter,
cilAlignLeft,
cilAlignRight,
cilApplicationsSettings,
cilArrowRight,
cilArrowTop,
cilAsterisk,
cilBan,
cilBarcode,
cilBasket,
cilBell,
cilBold,
cilBookmark,
cilCalculator,
cilCalendar,
cilCloudDownload,
cilChartPie,
cilCheck,
cilChevronBottom,
cilChevronLeft,
cilChevronRight,
cilChevronTop,
cilCircle,
cilCheckCircle,
cilCode,
cilCommentSquare,
cilCreditCard,
cilCursor,
cilCursorMove,
cilDrop,
cilDollar,
cilEnvelopeClosed,
cilEnvelopeLetter,
cilEnvelopeOpen,
cilEuro,
cilGlobeAlt,
cilGrid,
cilFile,
cilFullscreen,
cilFullscreenExit,
cilGraph,
cilHome,
cilInbox,
cilIndentDecrease,
cilIndentIncrease,
cilInputPower,
cilItalic,
cilJustifyCenter,
cilJustifyLeft,
cilLaptop,
cilLayers,
cilLightbulb,
cilList,
cilListNumbered,
cilListRich,
cilLocationPin,
cilLockLocked,
cilMagnifyingGlass,
cilMap,
cilMoon,
cilNotes,
cilOptions,
cilPaperclip,
cilPaperPlane,
cilPencil,
cilPeople,
cilPhone,
cilPrint,
cilPuzzle,
cilRouter,
cilSave,
cilScrubber,
cilSettings,
cilShare,
cilShareAll,
cilShareBoxed,
cilShieldAlt,
cilSpeech,
cilSpeedometer,
cilSpreadsheet,
cilStar,
cilSun,
cilTags,
cilTask,
cilTrash,
cilUnderline,
cilUser,
cilUserFemale,
cilUserFollow,
cilUserUnfollow,
cilX,
cilXCircle,
cilWarning,
cifUs,
cifBr,
cifIn,
cifFr,
cifEs,
cifPl,
};

View File

@@ -1,163 +0,0 @@
import React, { useState, useEffect } from 'react';
import PropTypes from 'prop-types';
import Select from 'react-select';
import {
CForm,
CInput,
CLabel,
CCol,
CFormGroup,
CInvalidFeedback,
CFormText,
CRow,
CTextarea,
} from '@coreui/react';
import { CopyToClipboardButton } from 'ucentral-libs';
const AddDefaultConfigurationForm = ({
t,
disable,
fields,
updateField,
updateFieldWithKey,
deviceTypes,
}) => {
const [typeOptions, setTypeOptions] = useState([]);
const [chosenTypes, setChosenTypes] = useState([]);
const parseOptions = () => {
const options = [{ value: '*', label: 'All' }];
const newOptions = deviceTypes.map((option) => ({
value: option,
label: option,
}));
options.push(...newOptions);
setTypeOptions(options);
setChosenTypes([]);
};
const typeOnChange = (chosenArray) => {
const allIndex = chosenArray.findIndex((el) => el.value === '*');
// If the All option was chosen before, we take it out of the array
if (allIndex === 0 && chosenTypes.length > 0) {
const newResults = chosenArray.slice(1);
setChosenTypes(newResults);
updateFieldWithKey('deviceTypes', {
value: newResults.map((el) => el.value),
error: false,
notEmpty: true,
});
} else if (allIndex > 0) {
setChosenTypes([{ value: '*', label: 'All' }]);
updateFieldWithKey('deviceTypes', { value: ['*'], error: false, notEmpty: true });
} else if (chosenArray.length > 0) {
setChosenTypes(chosenArray);
updateFieldWithKey('deviceTypes', {
value: chosenArray.map((el) => el.value),
error: false,
notEmpty: true,
});
} else {
setChosenTypes([]);
updateFieldWithKey('deviceTypes', { value: [], error: false, notEmpty: true });
}
};
useEffect(() => {
parseOptions();
}, [deviceTypes]);
return (
<CForm>
<CFormGroup row className="pb-3">
<CLabel col htmlFor="name">
{t('user.name')}
</CLabel>
<CCol sm="7">
<CInput
id="name"
type="text"
required
value={fields.name.value}
onChange={updateField}
invalid={fields.name.error}
disabled={disable}
maxLength="50"
/>
<CInvalidFeedback>{t('common.required')}</CInvalidFeedback>
</CCol>
</CFormGroup>
<CFormGroup row className="pb-3">
<CLabel col htmlFor="description">
{t('user.description')}
</CLabel>
<CCol sm="7">
<CInput
id="description"
type="text"
required
value={fields.description.value}
onChange={updateField}
invalid={fields.description.error}
disabled={disable}
maxLength="50"
/>
<CInvalidFeedback>{t('common.required')}</CInvalidFeedback>
</CCol>
</CFormGroup>
<CRow className="pb-3">
<CLabel col htmlFor="deviceTypes">
<div>{t('configuration.supported_device_types')}:</div>
</CLabel>
<CCol sm="7">
<Select
isMulti
closeMenuOnSelect={false}
id="deviceTypes"
options={typeOptions}
onChange={typeOnChange}
value={chosenTypes}
className={`basic-multi-select ${fields.deviceTypes.error ? 'border-danger' : ''}`}
classNamePrefix="select"
/>
<CFormText hidden={!fields.deviceTypes.error} color="danger">
{t('configuration.need_device_type')}
</CFormText>
</CCol>
</CRow>
<div className="pb-3">
{t('configure.enter_new')}
<CopyToClipboardButton t={t} size="sm" content={fields.configuration.value} />
</div>
<CRow className="pb-3">
<CCol>
<CTextarea
style={{ overflowY: 'scroll', height: '500px' }}
id="configuration"
type="text"
required
value={fields.configuration.value}
onChange={updateField}
invalid={fields.configuration.error}
disabled={disable}
/>
<CFormText hidden={!fields.configuration.error} color="danger">
{t('configure.valid_json')}
</CFormText>
</CCol>
</CRow>
</CForm>
);
};
AddDefaultConfigurationForm.propTypes = {
t: PropTypes.func.isRequired,
disable: PropTypes.bool.isRequired,
fields: PropTypes.instanceOf(Object).isRequired,
updateField: PropTypes.func.isRequired,
updateFieldWithKey: PropTypes.func.isRequired,
deviceTypes: PropTypes.instanceOf(Array).isRequired,
};
export default AddDefaultConfigurationForm;

View File

@@ -1,183 +0,0 @@
import React, { useState, useEffect } from 'react';
import PropTypes from 'prop-types';
import { CModal, CModalHeader, CModalTitle, CModalBody, CButton, CPopover } from '@coreui/react';
import CIcon from '@coreui/icons-react';
import { cilX, cilSave } from '@coreui/icons';
import { useToast, useFormFields, useAuth } from 'ucentral-libs';
import axiosInstance from 'utils/axiosInstance';
import { useTranslation } from 'react-i18next';
import { checkIfJson } from 'utils/helper';
import Form from './Form';
const initialForm = {
name: {
value: '',
error: false,
required: true,
},
description: {
value: '',
error: false,
},
deviceTypes: {
value: [],
error: false,
notEmpty: true,
},
configuration: {
value: '',
error: false,
required: true,
},
};
const AddConfigurationModal = ({ show, toggle, refresh }) => {
const { t } = useTranslation();
const { addToast } = useToast();
const { currentToken, endpoints } = useAuth();
const [fields, updateFieldWithId, updateField, setFormFields] = useFormFields(initialForm);
const [loading, setLoading] = useState(false);
const [deviceTypes, setDeviceTypes] = useState([]);
const getDeviceTypes = () => {
setLoading(true);
const headers = {
Accept: 'application/json',
Authorization: `Bearer ${currentToken}`,
};
axiosInstance
.get(`${endpoints.owfms}/api/v1/firmwares?deviceSet=true`, {
headers,
})
.then((response) => {
setDeviceTypes([...response.data.deviceTypes]);
})
.catch(() => {})
.finally(() => {
setLoading(false);
});
};
const validation = () => {
let success = true;
for (const [key, field] of Object.entries(fields)) {
if (field.required && field.value === '') {
updateField(key, { error: true });
success = false;
break;
}
if (field.notEmpty && field.value.length === 0) {
updateField(key, { error: true, notEmpty: true });
success = false;
break;
}
}
if (!checkIfJson(fields.configuration.value)) {
updateField('configuration', { error: true });
success = false;
}
return success;
};
const addConfiguration = () => {
if (validation()) {
setLoading(true);
const options = {
headers: {
Accept: 'application/json',
Authorization: `Bearer ${currentToken}`,
},
};
const parameters = {
name: fields.name.value,
description: fields.description.value,
modelIds: fields.deviceTypes.value,
configuration: fields.configuration.value,
};
axiosInstance
.post(
`${endpoints.owgw}/api/v1/default_configuration/${fields.name.value}`,
parameters,
options,
)
.then(() => {
if (refresh !== null) refresh();
toggle();
addToast({
title: t('common.success'),
body: t('configuration.creation_success'),
color: 'success',
autohide: true,
});
})
.catch((e) => {
addToast({
title: t('common.error'),
body: t('entity.add_failure', { error: e.response?.data?.ErrorDescription }),
color: 'danger',
autohide: true,
});
})
.finally(() => {
setLoading(false);
});
}
};
useEffect(() => {
if (show) {
getDeviceTypes();
setFormFields(initialForm);
}
}, [show]);
return (
<CModal className="text-dark" size="lg" show={show} onClose={toggle}>
<CModalHeader className="p-1">
<CModalTitle className="pl-1 pt-1">{t('configuration.create')}</CModalTitle>
<div className="text-right">
<CPopover content={t('common.add')}>
<CButton color="primary" variant="outline" className="ml-2" onClick={addConfiguration}>
<CIcon content={cilSave} />
</CButton>
</CPopover>
<CPopover content={t('common.close')}>
<CButton color="primary" variant="outline" className="ml-2" onClick={toggle}>
<CIcon content={cilX} />
</CButton>
</CPopover>
</div>
</CModalHeader>
<CModalBody className="px-5">
<Form
t={t}
disable={loading}
fields={fields}
updateField={updateFieldWithId}
updateFieldWithKey={updateField}
deviceTypes={deviceTypes}
show={show}
/>
</CModalBody>
</CModal>
);
};
AddConfigurationModal.propTypes = {
show: PropTypes.bool.isRequired,
toggle: PropTypes.func.isRequired,
refresh: PropTypes.func,
};
AddConfigurationModal.defaultProps = {
refresh: null,
};
export default AddConfigurationModal;

View File

@@ -1,158 +0,0 @@
import React, { useEffect, useState } from 'react';
import PropTypes from 'prop-types';
import { useTranslation } from 'react-i18next';
import {
CButton,
CModal,
CModalHeader,
CModalTitle,
CModalBody,
CPopover,
CRow,
CCol,
CLabel,
CTextarea,
CInput,
CInvalidFeedback,
} from '@coreui/react';
import CIcon from '@coreui/icons-react';
import { useAuth, useToast } from 'ucentral-libs';
import { cilPlus, cilX } from '@coreui/icons';
import axiosInstance from 'utils/axiosInstance';
const AddToBlacklistModal = ({ show, toggle, serialNumber, refresh }) => {
const { t } = useTranslation();
const [loading, setLoading] = useState(false);
const { addToast } = useToast();
const { endpoints, currentToken } = useAuth();
const [chosenSerialNumber, setChosenSerialNumber] = useState('');
const [reason, setReason] = useState('');
const addToBlacklist = () => {
setLoading(true);
const parameters = {
serialNumber: chosenSerialNumber,
reason,
};
const headers = {
Accept: 'application/json',
Authorization: `Bearer ${currentToken}`,
};
axiosInstance
.post(`${endpoints.owgw}/api/v1/blacklist/${chosenSerialNumber}`, parameters, { headers })
.then(() => {
addToast({
title: t('common.success'),
body: t('device.success_added_blacklist'),
color: 'success',
autohide: true,
});
toggle();
if (refresh) refresh();
})
.catch((e) => {
addToast({
title: t('common.error'),
body: t('device.error_adding_blacklist', { error: e.response?.data?.ErrorDescription }),
color: 'danger',
autohide: true,
});
})
.finally(() => {
setLoading(false);
});
};
useEffect(() => {
if (show) {
if (serialNumber) setChosenSerialNumber(serialNumber);
else setChosenSerialNumber('');
}
}, [show, serialNumber]);
return (
<CModal className="text-dark" size="lg" show={show} onClose={toggle}>
<CModalHeader className="p-1">
<CModalTitle className="pl-1 pt-1">{t('device.add_to_blacklist')}</CModalTitle>
<div className="text-right">
<CPopover content={t('common.add')}>
<CButton
color="primary"
variant="outline"
className="ml-2"
onClick={addToBlacklist}
disabled={
chosenSerialNumber.length !== 12 ||
!chosenSerialNumber.match('^[a-fA-F0-9]+$') ||
reason === '' ||
loading
}
>
<CIcon content={cilPlus} />
</CButton>
</CPopover>
<CPopover content={t('common.close')}>
<CButton color="primary" variant="outline" className="ml-2" onClick={toggle}>
<CIcon content={cilX} />
</CButton>
</CPopover>
</div>
</CModalHeader>
<CModalBody>
<CRow>
<CLabel col sm="3">
{t('common.serial_number')}
</CLabel>
<CCol sm="9" className="pt-1">
<CInput
id="description"
type="text"
required
value={chosenSerialNumber}
onChange={(e) => setChosenSerialNumber(e.target.value)}
invalid={
chosenSerialNumber.length !== 12 && chosenSerialNumber.match('^[a-fA-F0-9]+$')
}
disabled={loading}
maxLength="50"
/>
<CInvalidFeedback>{t('entity.valid_serial')}</CInvalidFeedback>
</CCol>
</CRow>
<CRow>
<CLabel col sm="3">
{t('common.reason')}
</CLabel>
<CCol sm="9" className="pt-2">
<CTextarea
name="reason"
id="reason"
rows="3"
type="text"
required
value={reason}
onChange={(e) => setReason(e.target.value)}
/>
</CCol>
</CRow>
</CModalBody>
</CModal>
);
};
AddToBlacklistModal.propTypes = {
show: PropTypes.bool.isRequired,
toggle: PropTypes.func.isRequired,
serialNumber: PropTypes.string,
refresh: PropTypes.func,
};
AddToBlacklistModal.defaultProps = {
serialNumber: '',
refresh: null,
};
export default AddToBlacklistModal;

View File

@@ -1,210 +0,0 @@
import React, { useEffect } from 'react';
import PropTypes from 'prop-types';
import ReactPaginate from 'react-paginate';
import {
CCardBody,
CDataTable,
CButton,
CLink,
CCard,
CCardHeader,
CPopover,
CSelect,
CButtonToolbar,
} from '@coreui/react';
import { cilSearch, cilPencil, cilPlus, cilTrash } from '@coreui/icons';
import CIcon from '@coreui/icons-react';
import ReactTooltip from 'react-tooltip';
import { FormattedDate } from 'ucentral-libs';
const BlacklistTable = ({
currentPage,
devices,
toggleAddBlacklist,
toggleEditModal,
devicesPerPage,
loading,
removeFromBlacklist,
updateDevicesPerPage,
pageCount,
updatePage,
t,
}) => {
const columns = [
{ key: 'serialNumber', label: t('common.serial_number'), _style: { width: '6%' } },
{ key: 'created', label: t('device.blacklisted_on'), _style: { width: '1%' } },
{ key: 'author', label: t('common.by'), filter: false, _style: { width: '15%' } },
{ key: 'reason', label: t('common.reason'), filter: false },
{ key: 'actions', label: t('actions.actions'), _style: { width: '1%' } },
];
const hideTooltips = () => ReactTooltip.hide();
const escFunction = (event) => {
if (event.keyCode === 27) {
hideTooltips();
}
};
useEffect(() => {
document.addEventListener('keydown', escFunction, false);
return () => {
document.removeEventListener('keydown', escFunction, false);
};
}, []);
return (
<>
<CCard className="m-0 p-0">
<CCardHeader className="p-0 text-right">
<CPopover content={t('device.add_to_blacklist')}>
<CButton size="sm" color="primary" onClick={toggleAddBlacklist}>
<CIcon content={cilPlus} />
</CButton>
</CPopover>
</CCardHeader>
<CCardBody className="p-0">
<CDataTable
addTableClasses="ignore-overflow table-sm"
items={devices ?? []}
fields={columns}
hover
border
loading={loading}
scopedSlots={{
serialNumber: (item) => (
<td className="text-center align-middle">
<CLink
className="c-subheader-nav-link"
aria-current="page"
to={() => `/devices/${item.serialNumber}`}
>
{item.serialNumber}
</CLink>
</td>
),
created: (item) => (
<td className="text-left align-middle">
<div style={{ width: '130px' }}>
<FormattedDate date={item.created} />
</div>
</td>
),
author: (item) => <td className="align-middle">{item.author}</td>,
reason: (item) => <td className="align-middle">{item.reason}</td>,
actions: (item) => (
<td className="text-center align-middle">
<CButtonToolbar
role="group"
className="justify-content-center"
style={{ width: '130px' }}
>
<CPopover content={t('configuration.details')}>
<CLink
className="c-subheader-nav-link"
aria-current="page"
to={() => `/devices/${item.serialNumber}`}
>
<CButton
color="primary"
variant="outline"
shape="square"
size="sm"
className="mx-1"
style={{ width: '33px', height: '30px' }}
>
<CIcon name="cil-search" content={cilSearch} size="sm" />
</CButton>
</CLink>
</CPopover>
<CPopover content={t('device.remove_from_blacklist')}>
<CButton
onClick={() => removeFromBlacklist(item.serialNumber)}
color="primary"
variant="outline"
shape="square"
size="sm"
className="mx-1"
style={{ width: '33px', height: '30px' }}
>
<CIcon content={cilTrash} size="sm" />
</CButton>
</CPopover>
<CPopover content={t('common.edit')}>
<CButton
onClick={() => toggleEditModal(item.serialNumber)}
color="primary"
variant="outline"
shape="square"
size="sm"
className="mx-1"
style={{ width: '33px', height: '30px' }}
>
<CIcon content={cilPencil} size="sm" />
</CButton>
</CPopover>
</CButtonToolbar>
</td>
),
}}
/>
<div className="d-flex flex-row pl-3">
<div className="pr-3">
<ReactPaginate
previousLabel="← Previous"
nextLabel="Next →"
pageCount={pageCount}
onPageChange={updatePage}
forcePage={Number(currentPage)}
breakClassName="page-item"
breakLinkClassName="page-link"
containerClassName="pagination"
pageClassName="page-item"
pageLinkClassName="page-link"
previousClassName="page-item"
previousLinkClassName="page-link"
nextClassName="page-item"
nextLinkClassName="page-link"
activeClassName="active"
/>
</div>
<p className="pr-2 mt-1">{t('common.items_per_page')}</p>
<div style={{ width: '100px' }} className="px-2">
<CSelect
custom
defaultValue={devicesPerPage}
onChange={(e) => updateDevicesPerPage(e.target.value)}
disabled={loading}
>
<option value="10">10</option>
<option value="25">25</option>
<option value="50">50</option>
</CSelect>
</div>
</div>
</CCardBody>
</CCard>
</>
);
};
BlacklistTable.propTypes = {
currentPage: PropTypes.string,
devices: PropTypes.instanceOf(Array).isRequired,
toggleAddBlacklist: PropTypes.func.isRequired,
toggleEditModal: PropTypes.func.isRequired,
updateDevicesPerPage: PropTypes.func.isRequired,
pageCount: PropTypes.number.isRequired,
updatePage: PropTypes.func.isRequired,
devicesPerPage: PropTypes.string.isRequired,
removeFromBlacklist: PropTypes.func.isRequired,
t: PropTypes.func.isRequired,
loading: PropTypes.bool.isRequired,
};
BlacklistTable.defaultProps = {
currentPage: '0',
};
export default React.memo(BlacklistTable);

View File

@@ -1,30 +0,0 @@
.firmwareTooltip {
opacity: 1 !important;
padding: 0px 0px 0px 0px !important;
border-radius: 1rem !important;
background-color: #fff !important;
border-color: #321fdb !important;
font-size: 0.875rem !important;
font-weight: 400 !important;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.2) !important;
width: 400px;
}
.deleteTooltip {
opacity: 1 !important;
padding: 0px 0px 0px 0px !important;
border-radius: 1rem !important;
background-color: #fff !important;
border-color: #321fdb !important;
font-size: 0.875rem !important;
font-weight: 400 !important;
box-shadow: 0 3px 10px rgba(0, 0, 0, 0.2) !important;
width: 200px;
}
.tooltipHeader {
padding-left: 5px;
padding-right: 10px;
border-top-left-radius: 1rem !important;
border-top-right-radius: 1rem !important;
}

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