foris 6.4.0 → 6.5.0-beta.2ab65be0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/bootstrap/Modal.js +10 -7
  2. package/bootstrap/NumberInput.js +32 -2
  3. package/common/ActionButtonWithModal/ActionButtonWithModal.js +135 -0
  4. package/common/ActionButtonWithModal/ActionButtonWithModal.md +39 -0
  5. package/common/RichTable/RichTable.js +86 -0
  6. package/common/RichTable/RichTable.md +135 -0
  7. package/common/RichTable/RichTableBody.js +48 -0
  8. package/common/RichTable/RichTableHeader.js +96 -0
  9. package/common/RichTable/RichTablePagination.js +128 -0
  10. package/common/WiFiSettings/WiFiForm.js +21 -21
  11. package/common/WiFiSettings/WiFiGuestForm.js +17 -1
  12. package/common/WiFiSettings/constants.js +8 -5
  13. package/foris-6.5.0.tgz +0 -0
  14. package/index.js +2 -1
  15. package/package.json +2 -1
  16. package/testUtils/customTestRender.js +1 -1
  17. package/translations/cs/LC_MESSAGES/forisjs.po +91 -35
  18. package/translations/da/LC_MESSAGES/forisjs.po +75 -16
  19. package/translations/de/LC_MESSAGES/forisjs.po +129 -81
  20. package/translations/el/LC_MESSAGES/forisjs.po +84 -27
  21. package/translations/en/LC_MESSAGES/forisjs.po +75 -16
  22. package/translations/es/LC_MESSAGES/forisjs.po +79 -21
  23. package/translations/fi/LC_MESSAGES/forisjs.po +75 -16
  24. package/translations/fo/LC_MESSAGES/forisjs.po +75 -16
  25. package/translations/forisjs.pot +61 -17
  26. package/translations/fr/LC_MESSAGES/forisjs.po +84 -27
  27. package/translations/hr/LC_MESSAGES/forisjs.po +75 -16
  28. package/translations/hu/LC_MESSAGES/forisjs.po +76 -16
  29. package/translations/it/LC_MESSAGES/forisjs.po +75 -16
  30. package/translations/ja/LC_MESSAGES/forisjs.po +76 -17
  31. package/translations/ko/LC_MESSAGES/forisjs.po +75 -16
  32. package/translations/lt/LC_MESSAGES/forisjs.po +75 -16
  33. package/translations/nb_NO/LC_MESSAGES/forisjs.po +78 -21
  34. package/translations/nl/LC_MESSAGES/forisjs.po +78 -22
  35. package/translations/pl/LC_MESSAGES/forisjs.po +79 -21
  36. package/translations/pt_BR/LC_MESSAGES/forisjs.po +77 -20
  37. package/translations/ro/LC_MESSAGES/forisjs.po +75 -16
  38. package/translations/ru/LC_MESSAGES/forisjs.po +79 -21
  39. package/translations/sk/LC_MESSAGES/forisjs.po +82 -26
  40. package/translations/sv/LC_MESSAGES/forisjs.po +78 -21
  41. package/utils/forisUrls.js +2 -0
  42. package/common/RebootButton.js +0 -80
  43. package/foris-6.4.0.tgz +0 -0
  44. /package/testUtils/{cutomizationContextMock.js → customizationContextMock.js} +0 -0
@@ -0,0 +1,128 @@
1
+ /*
2
+ * Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
3
+ *
4
+ * This is free software, licensed under the GNU General Public License v3.
5
+ * See /LICENSE for more information.
6
+ */
7
+
8
+ import React, { useMemo } from "react";
9
+
10
+ import {
11
+ faAngleLeft,
12
+ faAnglesLeft,
13
+ faAngleRight,
14
+ faAnglesRight,
15
+ } from "@fortawesome/free-solid-svg-icons";
16
+ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
17
+ import propTypes from "prop-types";
18
+
19
+ RichTablePagination.propTypes = {
20
+ table: propTypes.shape({
21
+ getState: propTypes.func.isRequired,
22
+ getCanPreviousPage: propTypes.func.isRequired,
23
+ getCanNextPage: propTypes.func.isRequired,
24
+ firstPage: propTypes.func.isRequired,
25
+ previousPage: propTypes.func.isRequired,
26
+ nextPage: propTypes.func.isRequired,
27
+ lastPage: propTypes.func.isRequired,
28
+ setPageSize: propTypes.func.isRequired,
29
+ getPageCount: propTypes.func.isRequired,
30
+ }).isRequired,
31
+ tablePageSize: propTypes.number,
32
+ allRows: propTypes.number,
33
+ };
34
+
35
+ function RichTablePagination({ table, tablePageSize, allRows }) {
36
+ const { pagination } = table.getState();
37
+ const prevPagBtnDisabled = !table.getCanPreviousPage();
38
+ const nextPagBtnDisabled = !table.getCanNextPage();
39
+
40
+ const pageSizes = useMemo(() => {
41
+ return [tablePageSize ?? 5, 10, 25].filter(
42
+ (value, index, self) => self.indexOf(value) === index
43
+ );
44
+ }, [tablePageSize]);
45
+
46
+ const renderPaginationButton = (icon, ariaLabel, onClick, disabled) => (
47
+ <li
48
+ className={`page-item ${disabled ? "disabled" : ""}`}
49
+ style={{ cursor: disabled ? "not-allowed" : "pointer" }}
50
+ >
51
+ <button
52
+ type="button"
53
+ className="page-link"
54
+ aria-label={ariaLabel}
55
+ onClick={onClick}
56
+ disabled={disabled}
57
+ >
58
+ <FontAwesomeIcon icon={icon} />
59
+ </button>
60
+ </li>
61
+ );
62
+
63
+ return (
64
+ <nav
65
+ aria-label={_("Pagination navigation bar")}
66
+ className="d-flex gap-2 justify-content-start align-items-center mx-2 mb-1 text-nowrap"
67
+ >
68
+ <ul className="pagination pagination-sm mb-0">
69
+ {renderPaginationButton(
70
+ faAnglesLeft,
71
+ _("First page"),
72
+ () => table.firstPage(),
73
+ prevPagBtnDisabled
74
+ )}
75
+ {renderPaginationButton(
76
+ faAngleLeft,
77
+ _("Previous page"),
78
+ () => table.previousPage(),
79
+ prevPagBtnDisabled
80
+ )}
81
+ {renderPaginationButton(
82
+ faAngleRight,
83
+ _("Next page"),
84
+ () => table.nextPage(),
85
+ nextPagBtnDisabled
86
+ )}
87
+ {renderPaginationButton(
88
+ faAnglesRight,
89
+ _("Last page"),
90
+ () => table.lastPage(),
91
+ nextPagBtnDisabled
92
+ )}
93
+ </ul>
94
+ <span>
95
+ {_("Page")}&nbsp;
96
+ <span className="fw-bold">
97
+ {pagination.pageIndex + 1}
98
+ &nbsp;{_("of")}&nbsp;
99
+ {table.getPageCount().toLocaleString()}
100
+ </span>
101
+ </span>
102
+ <div
103
+ className="vr mx-1 align-self-center"
104
+ style={{ height: "1.5rem" }}
105
+ />
106
+ <span>{_("Rows per page:")}</span>
107
+ <select
108
+ className="form-select form-select-sm w-auto"
109
+ aria-label={_("Select rows per page")}
110
+ value={pagination.pageSize}
111
+ onChange={(e) => {
112
+ table.setPageSize(Number(e.target.value));
113
+ }}
114
+ >
115
+ {pageSizes.map((pageSize) => (
116
+ <option key={pageSize} value={pageSize}>
117
+ {pageSize}
118
+ </option>
119
+ ))}
120
+ <option key={allRows} value={allRows}>
121
+ {_("All")}
122
+ </option>
123
+ </select>
124
+ </nav>
125
+ );
126
+ }
127
+
128
+ export default RichTablePagination;
@@ -9,7 +9,7 @@ import React from "react";
9
9
 
10
10
  import PropTypes from "prop-types";
11
11
 
12
- import { HELP_TEXTS, HTMODES, HWMODES, ENCRYPTIONMODES } from "./constants";
12
+ import { HELP_TEXTS, HTMODES, BANDS, ENCRYPTIONMODES } from "./constants";
13
13
  import WifiGuestForm from "./WiFiGuestForm";
14
14
  import WiFiQRCode from "./WiFiQRCode";
15
15
  import PasswordInput from "../../bootstrap/PasswordInput";
@@ -60,7 +60,7 @@ DeviceForm.propTypes = {
60
60
  SSID: PropTypes.string.isRequired,
61
61
  password: PropTypes.string.isRequired,
62
62
  hidden: PropTypes.bool.isRequired,
63
- hwmode: PropTypes.string.isRequired,
63
+ band: PropTypes.string.isRequired,
64
64
  htmode: PropTypes.string.isRequired,
65
65
  channel: PropTypes.string.isRequired,
66
66
  guest_wifi: PropTypes.object.isRequired,
@@ -155,26 +155,26 @@ function DeviceForm({
155
155
  />
156
156
 
157
157
  <RadioSet
158
- name={`hwmode-${deviceID}`}
159
- label="GHz"
160
- choices={getHwmodeChoices(formData)}
161
- value={formData.hwmode}
162
- helpText={HELP_TEXTS.hwmode}
158
+ name={`band-${deviceID}`}
159
+ label={_("Band")}
160
+ choices={getBandChoices(formData)}
161
+ value={formData.band}
162
+ helpText={HELP_TEXTS.band}
163
163
  inline
164
164
  onChange={setFormValue((value) => {
165
- // Get the last item in an array of available HT modes
166
- const [best2] = bnds[0].available_htmodes.slice(-1);
167
- const [best5] = bnds[1].available_htmodes.slice(-1);
165
+ // Find the selected band
166
+ const selectedBand = bnds.find(
167
+ (band) => band.band === value
168
+ );
169
+ // Get the last item in the available HT modes for the selected band
170
+ const bestHtmode =
171
+ selectedBand.available_htmodes.slice(-1)[0];
168
172
  return {
169
173
  devices: {
170
174
  [deviceIndex]: {
171
- hwmode: { $set: value },
175
+ band: { $set: value },
172
176
  channel: { $set: "0" },
173
- htmode: {
174
- $set:
175
- // Set HT mode depending on checked frequency
176
- value === "11a" ? best5 : best2,
177
- },
177
+ htmode: { $set: bestHtmode },
178
178
  },
179
179
  },
180
180
  };
@@ -263,7 +263,7 @@ function getChannelChoices(device) {
263
263
  };
264
264
 
265
265
  device.available_bands.forEach((availableBand) => {
266
- if (availableBand.hwmode !== device.hwmode) return;
266
+ if (availableBand.band !== device.band) return;
267
267
 
268
268
  availableBand.available_channels.forEach((availableChannel) => {
269
269
  channelChoices[availableChannel.number.toString()] = `
@@ -282,7 +282,7 @@ function getHtmodeChoices(device) {
282
282
  const htmodeChoices = {};
283
283
 
284
284
  device.available_bands.forEach((availableBand) => {
285
- if (availableBand.hwmode !== device.hwmode) return;
285
+ if (availableBand.band !== device.band) return;
286
286
 
287
287
  availableBand.available_htmodes.forEach((availableHtmod) => {
288
288
  htmodeChoices[availableHtmod] = HTMODES[availableHtmod];
@@ -291,10 +291,10 @@ function getHtmodeChoices(device) {
291
291
  return htmodeChoices;
292
292
  }
293
293
 
294
- function getHwmodeChoices(device) {
294
+ function getBandChoices(device) {
295
295
  return device.available_bands.map((availableBand) => ({
296
- label: HWMODES[availableBand.hwmode],
297
- value: availableBand.hwmode,
296
+ label: `${BANDS[availableBand.band]} GHz`,
297
+ value: availableBand.band,
298
298
  }));
299
299
  }
300
300
 
@@ -9,9 +9,10 @@ import React from "react";
9
9
 
10
10
  import PropTypes from "prop-types";
11
11
 
12
- import { HELP_TEXTS } from "./constants";
12
+ import { HELP_TEXTS, ENCRYPTIONMODES } from "./constants";
13
13
  import WiFiQRCode from "./WiFiQRCode";
14
14
  import PasswordInput from "../../bootstrap/PasswordInput";
15
+ import Select from "../../bootstrap/Select";
15
16
  import Switch from "../../bootstrap/Switch";
16
17
  import TextInput from "../../bootstrap/TextInput";
17
18
 
@@ -21,6 +22,7 @@ WifiGuestForm.propTypes = {
21
22
  SSID: PropTypes.string.isRequired,
22
23
  password: PropTypes.string.isRequired,
23
24
  enabled: PropTypes.bool.isRequired,
25
+ encryption: PropTypes.string.isRequired,
24
26
  }),
25
27
  formErrors: PropTypes.shape({
26
28
  SSID: PropTypes.string,
@@ -89,6 +91,20 @@ export default function WifiGuestForm({
89
91
  }))}
90
92
  {...props}
91
93
  />
94
+ <Select
95
+ label={_("Encryption")}
96
+ choices={ENCRYPTIONMODES}
97
+ helpText={HELP_TEXTS.wpa3}
98
+ value={formData.encryption}
99
+ onChange={setFormValue((value) => ({
100
+ devices: {
101
+ [formData.id]: {
102
+ guest_wifi: { encryption: { $set: value } },
103
+ },
104
+ },
105
+ }))}
106
+ {...props}
107
+ />
92
108
  </>
93
109
  ) : null}
94
110
  </>
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (C) 2019-2022 CZ.NIC z.s.p.o. (https://www.nic.cz/)
2
+ * Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
3
3
  *
4
4
  * This is free software, licensed under the GNU General Public License v3.
5
5
  * See /LICENSE for more information.
@@ -12,15 +12,18 @@ export const HTMODES = {
12
12
  VHT20: _("802.11ac - 20 MHz wide channel"),
13
13
  VHT40: _("802.11ac - 40 MHz wide channel"),
14
14
  VHT80: _("802.11ac - 80 MHz wide channel"),
15
+ VHT80_80: _("802.11ac - 80+80 MHz wide channel"),
15
16
  VHT160: _("802.11ac - 160 MHz wide channel"),
16
17
  HE20: _("802.11ax - 20 MHz wide channel"),
17
18
  HE40: _("802.11ax - 40 MHz wide channel"),
18
19
  HE80: _("802.11ax - 80 MHz wide channel"),
20
+ HE80_80: _("802.11ax - 80+80 MHz wide channel"),
19
21
  HE160: _("802.11ax - 160 MHz wide channel"),
20
22
  };
21
- export const HWMODES = {
22
- "11g": "2.4",
23
- "11a": "5",
23
+ export const BANDS = {
24
+ "2g": "2.4",
25
+ "5g": "5",
26
+ "6g": "6",
24
27
  };
25
28
  export const ENCRYPTIONMODES = {
26
29
  WPA3: _("WPA3 only"),
@@ -37,7 +40,7 @@ export const HELP_TEXTS = {
37
40
  hidden: _(
38
41
  "If set, network is not visible when scanning for available networks."
39
42
  ),
40
- hwmode: _(
43
+ band: _(
41
44
  "The 2.4 GHz band is more widely supported by clients, but tends to have more interference. The 5 GHz band is a newer standard and may not be supported by all your devices. It usually has less interference, but the signal does not carry so well indoors."
42
45
  ),
43
46
  htmode: _(
Binary file
package/index.js CHANGED
@@ -40,9 +40,10 @@ export { Spinner, SpinnerElement } from "./bootstrap/Spinner";
40
40
  export { Modal, ModalBody, ModalFooter, ModalHeader } from "./bootstrap/Modal";
41
41
 
42
42
  // Common
43
- export { default as RebootButton } from "./common/RebootButton";
43
+ export { default as ActionButtonWithModal } from "./common/ActionButtonWithModal/ActionButtonWithModal";
44
44
  export { default as WiFiSettings } from "./common/WiFiSettings/WiFiSettings";
45
45
  export { default as ResetWiFiSettings } from "./common/WiFiSettings/ResetWiFiSettings";
46
+ export { default as RichTable } from "./common/RichTable/RichTable";
46
47
  // Form
47
48
  export { default as ForisForm } from "./form/components/ForisForm";
48
49
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "foris",
3
- "version": "6.4.0",
3
+ "version": "6.5.0-beta.2ab65be0",
4
4
  "description": "Foris JS library is a set of components and utils for reForis application and plugins.",
5
5
  "author": "CZ.NIC, z.s.p.o.",
6
6
  "repository": {
@@ -18,6 +18,7 @@
18
18
  "@fortawesome/free-regular-svg-icons": "^6.6.0",
19
19
  "@fortawesome/free-solid-svg-icons": "^6.6.0",
20
20
  "@fortawesome/react-fontawesome": "^0.2.2",
21
+ "@tanstack/react-table": "^8.20.5",
21
22
  "axios": "^1.7.2",
22
23
  "immutability-helper": "^3.1.1",
23
24
  "moment": "^2.30.1",
@@ -14,7 +14,7 @@ import { render } from "@testing-library/react";
14
14
  import PropTypes from "prop-types";
15
15
 
16
16
  import { AlertContextMock } from "./alertContextMock";
17
- import { CustomizationContextMock } from "./cutomizationContextMock";
17
+ import { CustomizationContextMock } from "./customizationContextMock";
18
18
 
19
19
  Wrapper.propTypes = {
20
20
  children: PropTypes.oneOfType([
@@ -7,16 +7,17 @@ msgid ""
7
7
  msgstr ""
8
8
  "Project-Id-Version: PROJECT VERSION\n"
9
9
  "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
10
- "POT-Creation-Date: 2024-09-25 16:10+0200\n"
11
- "PO-Revision-Date: 2024-09-25 10:15+0000\n"
12
- "Last-Translator: Lukas Jelinek <lukas.jelinek@nic.cz>\n"
10
+ "POT-Creation-Date: 2024-11-13 14:06+0100\n"
11
+ "PO-Revision-Date: 2024-11-15 06:01+0000\n"
12
+ "Last-Translator: Pavel Borecki <pavel.borecki@gmail.com>\n"
13
+ "Language-Team: Czech <https://hosted.weblate.org/projects/turris/foris-js/cs/"
14
+ ">\n"
13
15
  "Language: cs\n"
14
- "Language-Team: Czech <https://hosted.weblate.org/projects/turris/foris-"
15
- "js/cs/>\n"
16
- "Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
17
16
  "MIME-Version: 1.0\n"
18
17
  "Content-Type: text/plain; charset=utf-8\n"
19
18
  "Content-Transfer-Encoding: 8bit\n"
19
+ "Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
20
+ "X-Generator: Weblate 5.9-dev\n"
20
21
  "Generated-By: Babel 2.16.0\n"
21
22
 
22
23
  #: src/api/utils.js:61
@@ -35,42 +36,86 @@ msgstr "Neobdržena žádná odezva."
35
36
  msgid "An unknown API error occurred."
36
37
  msgstr "Došlo k neznámé chybě v aplikačním programovém rozhraní."
37
38
 
38
- #: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
39
+ #: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
39
40
  #: src/common/WiFiSettings/WiFiQRCode.js:89
40
41
  msgid "Close"
41
42
  msgstr "Zavřít"
42
43
 
43
- #: src/bootstrap/CopyInput.js:57
44
+ #: src/bootstrap/CopyInput.js:56
44
45
  msgid "Copied!"
45
46
  msgstr "Zkopírováno!"
46
47
 
47
- #: src/bootstrap/CopyInput.js:57
48
+ #: src/bootstrap/CopyInput.js:56
48
49
  msgid "Copy"
49
50
  msgstr "Kopírovat"
50
51
 
51
- #: src/common/RebootButton.js:27
52
- msgid "Reboot request failed."
53
- msgstr "Vyžadován restart."
54
-
55
- #: src/common/RebootButton.js:51
56
- msgid "Reboot"
57
- msgstr "Restartovat"
52
+ #: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
53
+ msgid "Action successful."
54
+ msgstr "Akce úspěšná."
58
55
 
59
- #: src/common/RebootButton.js:66
60
- msgid "Warning!"
61
- msgstr "Varování!"
56
+ #: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
57
+ msgid "Action failed."
58
+ msgstr "Akce se nezdařila."
62
59
 
63
- #: src/common/RebootButton.js:68
64
- msgid "Are you sure you want to restart the router?"
65
- msgstr "Opravdu chcete router restartovat?"
66
-
67
- #: src/common/RebootButton.js:71
60
+ #: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
68
61
  msgid "Cancel"
69
62
  msgstr "Zrušit"
70
63
 
71
- #: src/common/RebootButton.js:73
72
- msgid "Confirm reboot"
73
- msgstr "Potvrdit restart"
64
+ #: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
65
+ msgid "Confirm"
66
+ msgstr "Potvrdit"
67
+
68
+ #: src/common/RichTable/RichTableHeader.js:29
69
+ msgid "Sort ascending"
70
+ msgstr "Seřadit vzestupně"
71
+
72
+ #: src/common/RichTable/RichTableHeader.js:30
73
+ msgid "Sort descending"
74
+ msgstr "Seřadit sestupně"
75
+
76
+ #: src/common/RichTable/RichTableHeader.js:31
77
+ msgid "Clear sort"
78
+ msgstr "Vyčistit řazení"
79
+
80
+ #: src/common/RichTable/RichTablePagination.js:65
81
+ msgid "Pagination navigation bar"
82
+ msgstr "Navigační pruh stránkování"
83
+
84
+ #: src/common/RichTable/RichTablePagination.js:71
85
+ msgid "First page"
86
+ msgstr "První stránka"
87
+
88
+ #: src/common/RichTable/RichTablePagination.js:77
89
+ msgid "Previous page"
90
+ msgstr "Předchozí stránka"
91
+
92
+ #: src/common/RichTable/RichTablePagination.js:83
93
+ msgid "Next page"
94
+ msgstr "Následující stránka"
95
+
96
+ #: src/common/RichTable/RichTablePagination.js:89
97
+ msgid "Last page"
98
+ msgstr "Poslední stránka"
99
+
100
+ #: src/common/RichTable/RichTablePagination.js:95
101
+ msgid "Page"
102
+ msgstr "Stránka"
103
+
104
+ #: src/common/RichTable/RichTablePagination.js:98
105
+ msgid "of"
106
+ msgstr "z"
107
+
108
+ #: src/common/RichTable/RichTablePagination.js:106
109
+ msgid "Rows per page:"
110
+ msgstr "Řádků na stránku:"
111
+
112
+ #: src/common/RichTable/RichTablePagination.js:109
113
+ msgid "Select rows per page"
114
+ msgstr "Vyberte řádky na stránku"
115
+
116
+ #: src/common/RichTable/RichTablePagination.js:121
117
+ msgid "All"
118
+ msgstr "Vše"
74
119
 
75
120
  #: src/common/WiFiSettings/ResetWiFiSettings.js:39
76
121
  msgid "An error occurred during resetting Wi-Fi settings."
@@ -91,9 +136,9 @@ msgid ""
91
136
  "Fi settings. Note that this will remove the current Wi-Fi configuration "
92
137
  "and restore the default values."
93
138
  msgstr ""
94
- "Pokud se počet bezdrátových karet neshoduje, můžete zkusit obnovit "
95
- "nastavení Wi-Fi. Je třeba upozornit, že se tím odstraní aktuální "
96
- "konfigurace Wi-Fi a obnoví se výchozí hodnoty."
139
+ "Pokud se počet bezdrátových karet neshoduje, můžete zkusit obnovit nastavení "
140
+ "Wi-Fi. Je třeba upozornit, že se tím odstraní stávající nastavení Wi-Fi a "
141
+ "obnoví se výchozí hodnoty."
97
142
 
98
143
  #: src/common/WiFiSettings/WiFiForm.js:97
99
144
  msgid "Wi-Fi ${deviceID + 1}"
@@ -129,7 +174,7 @@ msgid ""
129
174
  "In case you have trouble connecting to WiFi Access Point, try disabling "
130
175
  "Management Frame Protection."
131
176
  msgstr ""
132
- "Máte-li problémy při připojování k přístupovému bodu Wi-Fi, zkuste "
177
+ "Pokud máte problémy při připojování k přístupovému bodu Wi-Fi, zkuste "
133
178
  "vypnout Management Frame Protection."
134
179
 
135
180
  #: src/common/WiFiSettings/WiFiForm.js:262
@@ -180,7 +225,7 @@ msgstr "Je třeba, aby heslo obsahovalo alespoň 8 znaků"
180
225
  #: src/common/WiFiSettings/WiFiSettings.js:91
181
226
  #: src/common/WiFiSettings/WiFiSettings.js:110
182
227
  msgid "Password must not contain more than 63 symbols"
183
- msgstr "Heslo nesmí obsahovat více než 63 znaků"
228
+ msgstr "Heslo nemůže obsahovat více než 63 znaků"
184
229
 
185
230
  #: src/common/WiFiSettings/constants.js:9
186
231
  msgid "Disabled"
@@ -317,11 +362,11 @@ msgstr ""
317
362
 
318
363
  #: src/form/components/SubmitButton.js:32
319
364
  msgid "Updating"
320
- msgstr "Aktualizuji"
365
+ msgstr "Aktualizuje se"
321
366
 
322
367
  #: src/form/components/SubmitButton.js:35
323
368
  msgid "Load settings"
324
- msgstr "Načítám nastavení"
369
+ msgstr "Načíst nastavení"
325
370
 
326
371
  #: src/form/components/SubmitButton.js:38
327
372
  msgid "Save"
@@ -353,7 +398,7 @@ msgstr "Toto není platné doménové jméno."
353
398
 
354
399
  #: src/utils/validations.js:18
355
400
  msgid "This is not a valid DUID."
356
- msgstr "Tohle není platné DUID."
401
+ msgstr "Toto není platné DUID."
357
402
 
358
403
  #: src/utils/validations.js:19
359
404
  msgid "This is not a valid MAC address."
@@ -389,3 +434,14 @@ msgstr "Neobsahuje seznam e-mailů oddělených čárkou."
389
434
  #~ "se tím odstraní aktuální konfigurace a vrátí se výchozí hodnoty.\n"
390
435
  #~ " "
391
436
 
437
+ #~ msgid "Reboot request failed."
438
+ #~ msgstr "Vyžadován restart."
439
+
440
+ #~ msgid "Reboot"
441
+ #~ msgstr "Restartovat"
442
+
443
+ #~ msgid "Warning!"
444
+ #~ msgstr "Varování!"
445
+
446
+ #~ msgid "Are you sure you want to restart the router?"
447
+ #~ msgstr "Opravdu chcete router restartovat?"
@@ -7,7 +7,7 @@ msgid ""
7
7
  msgstr ""
8
8
  "Project-Id-Version: PROJECT VERSION\n"
9
9
  "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
10
- "POT-Creation-Date: 2024-09-25 16:10+0200\n"
10
+ "POT-Creation-Date: 2024-11-13 14:06+0100\n"
11
11
  "PO-Revision-Date: 2019-02-19 13:34+0100\n"
12
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
13
  "Language: da\n"
@@ -34,41 +34,85 @@ msgstr ""
34
34
  msgid "An unknown API error occurred."
35
35
  msgstr ""
36
36
 
37
- #: src/bootstrap/Alert.js:57 src/bootstrap/Modal.js:101
37
+ #: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
38
38
  #: src/common/WiFiSettings/WiFiQRCode.js:89
39
39
  msgid "Close"
40
40
  msgstr ""
41
41
 
42
- #: src/bootstrap/CopyInput.js:57
42
+ #: src/bootstrap/CopyInput.js:56
43
43
  msgid "Copied!"
44
44
  msgstr ""
45
45
 
46
- #: src/bootstrap/CopyInput.js:57
46
+ #: src/bootstrap/CopyInput.js:56
47
47
  msgid "Copy"
48
48
  msgstr ""
49
49
 
50
- #: src/common/RebootButton.js:27
51
- msgid "Reboot request failed."
50
+ #: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
51
+ msgid "Action successful."
52
52
  msgstr ""
53
53
 
54
- #: src/common/RebootButton.js:51
55
- msgid "Reboot"
54
+ #: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
55
+ msgid "Action failed."
56
56
  msgstr ""
57
57
 
58
- #: src/common/RebootButton.js:66
59
- msgid "Warning!"
58
+ #: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
59
+ msgid "Cancel"
60
60
  msgstr ""
61
61
 
62
- #: src/common/RebootButton.js:68
63
- msgid "Are you sure you want to restart the router?"
62
+ #: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
63
+ msgid "Confirm"
64
64
  msgstr ""
65
65
 
66
- #: src/common/RebootButton.js:71
67
- msgid "Cancel"
66
+ #: src/common/RichTable/RichTableHeader.js:29
67
+ msgid "Sort ascending"
68
+ msgstr ""
69
+
70
+ #: src/common/RichTable/RichTableHeader.js:30
71
+ msgid "Sort descending"
72
+ msgstr ""
73
+
74
+ #: src/common/RichTable/RichTableHeader.js:31
75
+ msgid "Clear sort"
76
+ msgstr ""
77
+
78
+ #: src/common/RichTable/RichTablePagination.js:65
79
+ msgid "Pagination navigation bar"
80
+ msgstr ""
81
+
82
+ #: src/common/RichTable/RichTablePagination.js:71
83
+ msgid "First page"
84
+ msgstr ""
85
+
86
+ #: src/common/RichTable/RichTablePagination.js:77
87
+ msgid "Previous page"
88
+ msgstr ""
89
+
90
+ #: src/common/RichTable/RichTablePagination.js:83
91
+ msgid "Next page"
92
+ msgstr ""
93
+
94
+ #: src/common/RichTable/RichTablePagination.js:89
95
+ msgid "Last page"
96
+ msgstr ""
97
+
98
+ #: src/common/RichTable/RichTablePagination.js:95
99
+ msgid "Page"
100
+ msgstr ""
101
+
102
+ #: src/common/RichTable/RichTablePagination.js:98
103
+ msgid "of"
104
+ msgstr ""
105
+
106
+ #: src/common/RichTable/RichTablePagination.js:106
107
+ msgid "Rows per page:"
68
108
  msgstr ""
69
109
 
70
- #: src/common/RebootButton.js:73
71
- msgid "Confirm reboot"
110
+ #: src/common/RichTable/RichTablePagination.js:109
111
+ msgid "Select rows per page"
112
+ msgstr ""
113
+
114
+ #: src/common/RichTable/RichTablePagination.js:121
115
+ msgid "All"
72
116
  msgstr ""
73
117
 
74
118
  #: src/common/WiFiSettings/ResetWiFiSettings.js:39
@@ -425,3 +469,18 @@ msgstr ""
425
469
  #~ "channel."
426
470
  #~ msgstr ""
427
471
 
472
+ #~ msgid "Reboot request failed."
473
+ #~ msgstr ""
474
+
475
+ #~ msgid "Reboot"
476
+ #~ msgstr ""
477
+
478
+ #~ msgid "Warning!"
479
+ #~ msgstr ""
480
+
481
+ #~ msgid "Are you sure you want to restart the router?"
482
+ #~ msgstr ""
483
+
484
+ #~ msgid "Confirm reboot"
485
+ #~ msgstr ""
486
+