diff --git a/src/api/hooks.js b/src/api/hooks.js index 65a0bb1..cd50959 100644 --- a/src/api/hooks.js +++ b/src/api/hooks.js @@ -111,9 +111,7 @@ const useAPIPatch = createAPIHook("PATCH"); const useAPIPut = createAPIHook("PUT"); const useAPIDelete = createAPIHook("DELETE"); -export { useAPIGet, useAPIPost, useAPIPatch, useAPIPut, useAPIDelete }; - -export function useAPIPolling(endpoint, delay = 1000, until) { +function useAPIPolling(endpoint, until, delay = 1000) { // delay ms const [state, setState] = useState({ state: API_STATE.INIT }); const [getResponse, get] = useAPIGet(endpoint); @@ -133,3 +131,12 @@ export function useAPIPolling(endpoint, delay = 1000, until) { return [state]; } + +export { + useAPIGet, + useAPIPost, + useAPIPatch, + useAPIPut, + useAPIDelete, + useAPIPolling, +}; diff --git a/src/bootstrap/Alert.js b/src/bootstrap/Alert.js index b6a4860..7eb7721 100644 --- a/src/bootstrap/Alert.js +++ b/src/bootstrap/Alert.js @@ -6,6 +6,7 @@ */ import React from "react"; + import PropTypes from "prop-types"; export const ALERT_TYPES = Object.freeze({ diff --git a/src/bootstrap/Button.js b/src/bootstrap/Button.js index 5817f3a..f2031e7 100644 --- a/src/bootstrap/Button.js +++ b/src/bootstrap/Button.js @@ -6,6 +6,7 @@ */ import React from "react"; + import PropTypes from "prop-types"; Button.propTypes = { diff --git a/src/bootstrap/CheckBox.js b/src/bootstrap/CheckBox.js index 890e8b7..8bd3be6 100644 --- a/src/bootstrap/CheckBox.js +++ b/src/bootstrap/CheckBox.js @@ -6,6 +6,7 @@ */ import React from "react"; + import PropTypes from "prop-types"; import { useUID } from "react-uid"; diff --git a/src/bootstrap/CopyInput.js b/src/bootstrap/CopyInput.js index c87329b..072ed1a 100644 --- a/src/bootstrap/CopyInput.js +++ b/src/bootstrap/CopyInput.js @@ -6,7 +6,9 @@ */ import React, { useState, useRef } from "react"; + import PropTypes from "prop-types"; + import { Input } from "./Input"; CopyInput.propTypes = { diff --git a/src/bootstrap/DataTimeInput.js b/src/bootstrap/DataTimeInput.js index 558ec17..9b40b9e 100644 --- a/src/bootstrap/DataTimeInput.js +++ b/src/bootstrap/DataTimeInput.js @@ -6,9 +6,10 @@ */ import React from "react"; + +import moment from "moment/moment"; import PropTypes from "prop-types"; import Datetime from "react-datetime"; -import moment from "moment/moment"; import "react-datetime/css/react-datetime.css"; import "./DataTimeInput.css"; @@ -46,13 +47,13 @@ export function DataTimeInput({ children, ...props }) { - function renderInput(datetimeProps) { + const renderInput = (datetimeProps) => { return ( {children} ); - } + }; return ( ; +export function EmailInput({ ...props }) { + return ; +} EmailInput.propTypes = { /** Field label. */ diff --git a/src/bootstrap/FileInput.js b/src/bootstrap/FileInput.js index f40daed..1fe34ae 100644 --- a/src/bootstrap/FileInput.js +++ b/src/bootstrap/FileInput.js @@ -8,6 +8,7 @@ import React from "react"; import PropTypes from "prop-types"; + import { Input } from "./Input"; FileInput.propTypes = { diff --git a/src/bootstrap/Input.js b/src/bootstrap/Input.js index 32adc66..c0a52fb 100644 --- a/src/bootstrap/Input.js +++ b/src/bootstrap/Input.js @@ -6,11 +6,12 @@ */ import React, { forwardRef } from "react"; -import { useUID } from "react-uid"; + import PropTypes from "prop-types"; +import { useUID } from "react-uid"; /** Base bootstrap input component. */ -export const Input = forwardRef( +const Input = forwardRef( ( { type, @@ -73,3 +74,5 @@ Input.propTypes = { labelClassName: PropTypes.string, groupClassName: PropTypes.string, }; + +export { Input }; diff --git a/src/bootstrap/Modal.js b/src/bootstrap/Modal.js index 6ba1d7c..0c1a049 100644 --- a/src/bootstrap/Modal.js +++ b/src/bootstrap/Modal.js @@ -6,10 +6,11 @@ */ import React, { useRef, useEffect } from "react"; + import PropTypes from "prop-types"; -import { Portal } from "../utils/Portal"; import { useClickOutside } from "../utils/hooks"; +import { Portal } from "../utils/Portal"; import "./Modal.css"; Modal.propTypes = { diff --git a/src/bootstrap/NumberInput.js b/src/bootstrap/NumberInput.js index 9ba90da..69bb6d2 100644 --- a/src/bootstrap/NumberInput.js +++ b/src/bootstrap/NumberInput.js @@ -6,10 +6,11 @@ */ import React from "react"; + import PropTypes from "prop-types"; -import { useConditionalTimeout } from "../utils/hooks"; import { Input } from "./Input"; +import { useConditionalTimeout } from "../utils/hooks"; import "./NumberInput.css"; NumberInput.propTypes = { diff --git a/src/bootstrap/PasswordInput.js b/src/bootstrap/PasswordInput.js index 81525f4..a6ba557 100644 --- a/src/bootstrap/PasswordInput.js +++ b/src/bootstrap/PasswordInput.js @@ -6,6 +6,7 @@ */ import React, { useState } from "react"; + import PropTypes from "prop-types"; import { Input } from "./Input"; diff --git a/src/bootstrap/RadioSet.js b/src/bootstrap/RadioSet.js index e549ebc..0dc58d1 100644 --- a/src/bootstrap/RadioSet.js +++ b/src/bootstrap/RadioSet.js @@ -6,6 +6,7 @@ */ import React from "react"; + import PropTypes from "prop-types"; import { useUID } from "react-uid"; @@ -94,27 +95,25 @@ Radio.propTypes = { export function Radio({ label, id, helpText, inline, ...props }) { return ( - <> -
- - -
- +
+ + +
); } diff --git a/src/bootstrap/Select.js b/src/bootstrap/Select.js index b79297e..ea1cf57 100644 --- a/src/bootstrap/Select.js +++ b/src/bootstrap/Select.js @@ -6,6 +6,7 @@ */ import React from "react"; + import PropTypes from "prop-types"; import { useUID } from "react-uid"; diff --git a/src/bootstrap/Spinner.js b/src/bootstrap/Spinner.js index 0042154..dd9162d 100644 --- a/src/bootstrap/Spinner.js +++ b/src/bootstrap/Spinner.js @@ -6,6 +6,7 @@ */ import React from "react"; + import PropTypes from "prop-types"; import "./Spinner.css"; diff --git a/src/bootstrap/Switch.js b/src/bootstrap/Switch.js index de10cc8..10925ea 100644 --- a/src/bootstrap/Switch.js +++ b/src/bootstrap/Switch.js @@ -6,6 +6,7 @@ */ import React from "react"; + import PropTypes from "prop-types"; import { useUID } from "react-uid"; diff --git a/src/bootstrap/TextInput.js b/src/bootstrap/TextInput.js index be60bb6..3c79670 100644 --- a/src/bootstrap/TextInput.js +++ b/src/bootstrap/TextInput.js @@ -6,11 +6,14 @@ */ import React from "react"; + import PropTypes from "prop-types"; import { Input } from "./Input"; -export const TextInput = ({ ...props }) => ; +export function TextInput({ ...props }) { + return ; +} TextInput.propTypes = { /** Field label. */ diff --git a/src/common/RebootButton.js b/src/common/RebootButton.js index 4dceb46..d91a10f 100644 --- a/src/common/RebootButton.js +++ b/src/common/RebootButton.js @@ -6,15 +6,15 @@ */ import React, { useState, useEffect } from "react"; + import PropTypes from "prop-types"; import { useAPIPost } from "../api/hooks"; import { API_STATE } from "../api/utils"; -import { ForisURLs } from "../utils/forisUrls"; - import { Button } from "../bootstrap/Button"; import { Modal, ModalHeader, ModalBody, ModalFooter } from "../bootstrap/Modal"; import { useAlert } from "../context/alertContext/AlertContext"; +import { ForisURLs } from "../utils/forisUrls"; export function RebootButton(props) { const [triggered, setTriggered] = useState(false); diff --git a/src/common/WiFiSettings/ResetWiFiSettings.js b/src/common/WiFiSettings/ResetWiFiSettings.js index 1002922..fcff371 100644 --- a/src/common/WiFiSettings/ResetWiFiSettings.js +++ b/src/common/WiFiSettings/ResetWiFiSettings.js @@ -6,14 +6,15 @@ */ import React, { useEffect, useState } from "react"; + import PropTypes from "prop-types"; -import { Button } from "../../bootstrap/Button"; -import { useAlert } from "../../context/alertContext/AlertContext"; -import { ALERT_TYPES } from "../../bootstrap/Alert"; import { useAPIPost } from "../../api/hooks"; import { API_STATE } from "../../api/utils"; +import { ALERT_TYPES } from "../../bootstrap/Alert"; +import { Button } from "../../bootstrap/Button"; import { formFieldsSize } from "../../bootstrap/constants"; +import { useAlert } from "../../context/alertContext/AlertContext"; ResetWiFiSettings.propTypes = { ws: PropTypes.object.isRequired, diff --git a/src/common/WiFiSettings/WiFiForm.js b/src/common/WiFiSettings/WiFiForm.js index 8445c7f..035e149 100644 --- a/src/common/WiFiSettings/WiFiForm.js +++ b/src/common/WiFiSettings/WiFiForm.js @@ -6,15 +6,17 @@ */ import React from "react"; + import PropTypes from "prop-types"; -import { Switch } from "../../bootstrap/Switch"; + +import { HELP_TEXTS, HTMODES, HWMODES, ENCRYPTIONMODES } from "./constants"; +import WifiGuestForm from "./WiFiGuestForm"; +import WiFiQRCode from "./WiFiQRCode"; import { PasswordInput } from "../../bootstrap/PasswordInput"; import { RadioSet } from "../../bootstrap/RadioSet"; import { Select } from "../../bootstrap/Select"; +import { Switch } from "../../bootstrap/Switch"; import { TextInput } from "../../bootstrap/TextInput"; -import WiFiQRCode from "./WiFiQRCode"; -import WifiGuestForm from "./WiFiGuestForm"; -import { HELP_TEXTS, HTMODES, HWMODES, ENCRYPTIONMODES } from "./constants"; WiFiForm.propTypes = { formData: PropTypes.shape({ devices: PropTypes.arrayOf(PropTypes.object) }) @@ -267,8 +269,8 @@ function getChannelChoices(device) { channelChoices[availableChannel.number.toString()] = ` ${availableChannel.number} (${availableChannel.frequency} MHz ${ - availableChannel.radar ? " ,DFS" : "" - }) + availableChannel.radar ? " ,DFS" : "" + }) `; }); }); diff --git a/src/common/WiFiSettings/WiFiGuestForm.js b/src/common/WiFiSettings/WiFiGuestForm.js index 7ae88c0..9c4de8d 100644 --- a/src/common/WiFiSettings/WiFiGuestForm.js +++ b/src/common/WiFiSettings/WiFiGuestForm.js @@ -6,13 +6,14 @@ */ import React from "react"; + import PropTypes from "prop-types"; -import { TextInput } from "../../bootstrap/TextInput"; -import { Switch } from "../../bootstrap/Switch"; -import { PasswordInput } from "../../bootstrap/PasswordInput"; -import WiFiQRCode from "./WiFiQRCode"; import { HELP_TEXTS } from "./constants"; +import WiFiQRCode from "./WiFiQRCode"; +import { PasswordInput } from "../../bootstrap/PasswordInput"; +import { Switch } from "../../bootstrap/Switch"; +import { TextInput } from "../../bootstrap/TextInput"; WifiGuestForm.propTypes = { formData: PropTypes.shape({ diff --git a/src/common/WiFiSettings/WiFiQRCode.js b/src/common/WiFiSettings/WiFiQRCode.js index 24519c4..319e0ae 100644 --- a/src/common/WiFiSettings/WiFiQRCode.js +++ b/src/common/WiFiSettings/WiFiQRCode.js @@ -6,10 +6,11 @@ */ import React, { useState } from "react"; -import QRCode from "qrcode.react"; -import PropTypes from "prop-types"; -import { ForisURLs } from "../../utils/forisUrls"; +import PropTypes from "prop-types"; +import QRCode from "qrcode.react"; + +import { createAndDownloadPdf, toQRCodeContent } from "./qrCodeHelpers"; import { Button } from "../../bootstrap/Button"; import { Modal, @@ -17,7 +18,7 @@ import { ModalFooter, ModalHeader, } from "../../bootstrap/Modal"; -import { createAndDownloadPdf, toQRCodeContent } from "./qrCodeHelpers"; +import { ForisURLs } from "../../utils/forisUrls"; WiFiQRCode.propTypes = { SSID: PropTypes.string.isRequired, diff --git a/src/common/WiFiSettings/WiFiSettings.js b/src/common/WiFiSettings/WiFiSettings.js index 217e242..8a95352 100644 --- a/src/common/WiFiSettings/WiFiSettings.js +++ b/src/common/WiFiSettings/WiFiSettings.js @@ -6,11 +6,12 @@ */ import React from "react"; + import PropTypes from "prop-types"; -import { ForisForm } from "../../form/components/ForisForm"; -import WiFiForm from "./WiFiForm"; import { ResetWiFiSettings } from "./ResetWiFiSettings"; +import WiFiForm from "./WiFiForm"; +import { ForisForm } from "../../form/components/ForisForm"; WiFiSettings.propTypes = { ws: PropTypes.object.isRequired, diff --git a/src/context/alertContext/AlertContext.js b/src/context/alertContext/AlertContext.js index 82f18de..23d092a 100644 --- a/src/context/alertContext/AlertContext.js +++ b/src/context/alertContext/AlertContext.js @@ -6,6 +6,7 @@ */ import React, { useState, useContext, useCallback } from "react"; + import PropTypes from "prop-types"; import { Alert, ALERT_TYPES } from "../../bootstrap/Alert"; diff --git a/src/context/customizationContext/CustomizationContext.js b/src/context/customizationContext/CustomizationContext.js index 9b7bc12..6dffe15 100644 --- a/src/context/customizationContext/CustomizationContext.js +++ b/src/context/customizationContext/CustomizationContext.js @@ -6,12 +6,12 @@ */ import React, { useContext, useEffect } from "react"; + import PropTypes from "prop-types"; import { useAPIGet } from "../../api/hooks"; -import { ForisURLs } from "../../utils/forisUrls"; - import { Spinner } from "../../bootstrap/Spinner"; +import { ForisURLs } from "../../utils/forisUrls"; CustomizationContextProvider.propTypes = { children: PropTypes.oneOfType([ diff --git a/src/form/components/ForisForm.js b/src/form/components/ForisForm.js index 3a36961..40ae6d9 100644 --- a/src/form/components/ForisForm.js +++ b/src/form/components/ForisForm.js @@ -6,19 +6,19 @@ */ import React, { useEffect } from "react"; + import PropTypes from "prop-types"; import { Prompt } from "react-router-dom"; -import { ALERT_TYPES } from "../../bootstrap/Alert"; +import { STATES as SUBMIT_BUTTON_STATES, SubmitButton } from "./SubmitButton"; +import { useAPIPost } from "../../api/hooks"; import { API_STATE } from "../../api/utils"; +import { ALERT_TYPES } from "../../bootstrap/Alert"; import { formFieldsSize } from "../../bootstrap/constants"; import { Spinner } from "../../bootstrap/Spinner"; import { useAlert } from "../../context/alertContext/AlertContext"; -import { useAPIPost } from "../../api/hooks"; - -import { useForisModule, useForm } from "../hooks"; -import { STATES as SUBMIT_BUTTON_STATES, SubmitButton } from "./SubmitButton"; import { ErrorMessage } from "../../utils/ErrorMessage"; +import { useForisModule, useForm } from "../hooks"; ForisForm.propTypes = { /** Optional WebSocket object. See `scr/common/WebSockets.js`. diff --git a/src/form/components/SubmitButton.js b/src/form/components/SubmitButton.js index 1f4f150..7a8f168 100644 --- a/src/form/components/SubmitButton.js +++ b/src/form/components/SubmitButton.js @@ -6,6 +6,7 @@ */ import React from "react"; + import PropTypes from "prop-types"; import { Button } from "../../bootstrap/Button"; diff --git a/src/form/hooks.js b/src/form/hooks.js index 23c436a..c53c5a9 100644 --- a/src/form/hooks.js +++ b/src/form/hooks.js @@ -6,6 +6,7 @@ */ import { useCallback, useEffect, useReducer } from "react"; + import update from "immutability-helper"; import { useAPIGet } from "../api/hooks"; diff --git a/src/utils/ErrorMessage.js b/src/utils/ErrorMessage.js index acb5c97..1b394d8 100644 --- a/src/utils/ErrorMessage.js +++ b/src/utils/ErrorMessage.js @@ -6,6 +6,7 @@ */ import React from "react"; + import PropTypes from "prop-types"; ErrorMessage.propTypes = { diff --git a/src/utils/conditionalHOCs.js b/src/utils/conditionalHOCs.js index 3298f81..4ad6d83 100644 --- a/src/utils/conditionalHOCs.js +++ b/src/utils/conditionalHOCs.js @@ -7,17 +7,18 @@ import React from "react"; -import { Spinner } from "../bootstrap/Spinner"; -import { API_STATE } from "../api/utils"; import { ErrorMessage } from "./ErrorMessage"; +import { API_STATE } from "../api/utils"; +import { Spinner } from "../bootstrap/Spinner"; function withEither(conditionalFn, Either) { - return (Component) => (props) => { - if (conditionalFn(props)) { - return ; - } - return ; - }; + return (Component) => + function (props) { + if (conditionalFn(props)) { + return ; + } + return ; + }; } // Loading diff --git a/src/utils/validations.js b/src/utils/validations.js index fb358a4..cffe21d 100644 --- a/src/utils/validations.js +++ b/src/utils/validations.js @@ -23,12 +23,15 @@ export const ERROR_MESSAGES = { const REs = { IPv4: /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/, IPv6: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/, - IPv6Prefix: /^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))$/, + IPv6Prefix: + /^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))$/, domain: /^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/, - hostname: /^[a-z\d]([a-z\d-]{0,61}[a-z\d])?(\.[a-z\d]([a-z\d-]{0,61}[a-z\d])?)*$/i, + hostname: + /^[a-z\d]([a-z\d-]{0,61}[a-z\d])?(\.[a-z\d]([a-z\d-]{0,61}[a-z\d])?)*$/i, DUID: /^([0-9a-fA-F]{2}){4}([0-9a-fA-F]{2})*$/, MAC: /^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/, - MultipleEmails: /^([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+ *)( *, *[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+ *)*$/, + MultipleEmails: + /^([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+ *)( *, *[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+ *)*$/, }; const createValidator = (fieldType) => (value) => {