diff --git a/client/package-lock.json b/client/package-lock.json index 0aec9dc0..4ee28805 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -6161,9 +6161,9 @@ "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==" }, "handlebars": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.1.tgz", - "integrity": "sha512-C29UoFzHe9yM61lOsIlCE5/mQVGrnIOrOq7maQl76L7tYPCgC1og0Ajt6uWnX4ZTxBPnjw+CUvawphwCfJgUnA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.2.tgz", + "integrity": "sha512-29Zxv/cynYB7mkT1rVWQnV7mGX6v7H/miQ6dbEpYTKq5eJBN7PsRB+ViYJlcT6JINTSu4dVB9kOqEun78h6Exg==", "requires": { "neo-async": "^2.6.0", "optimist": "^0.6.1", @@ -10728,9 +10728,9 @@ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" }, "prettier": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", - "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", "dev": true }, "prettier-eslint": { @@ -10788,9 +10788,9 @@ } }, "core-js": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.3.6.tgz", - "integrity": "sha512-u4oM8SHwmDuh5mWZdDg9UwNVq5s1uqq6ZDLLIs07VY+VJU91i3h4f3K/pgFvtUQPGdeStrZ+odKyfyt4EnKHfA==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.4.1.tgz", + "integrity": "sha512-KX/dnuY/J8FtEwbnrzmAjUYgLqtk+cxM86hfG60LGiW3MmltIc2yAmDgBgEkfm0blZhUrdr1Zd84J2Y14mLxzg==", "dev": true }, "eslint-scope": { @@ -13730,9 +13730,9 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "typescript": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.4.tgz", - "integrity": "sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.2.tgz", + "integrity": "sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ==", "dev": true }, "typescript-compare": { diff --git a/client/package.json b/client/package.json index 994b448e..18de8440 100755 --- a/client/package.json +++ b/client/package.json @@ -71,6 +71,7 @@ "eslint-plugin-jsx-a11y": "^6.2.3", "eslint-plugin-react": "^7.16.0", "eslint-plugin-react-hooks": "^1.7.0", + "prettier-eslint": "^9.0.0", "prettier-eslint-cli": "^5.0.0" } } diff --git a/client/src/components/AddUserPopup/AddUserPopup.jsx b/client/src/components/AddUserPopup/AddUserPopup.jsx index b1d91f7c..04077f29 100755 --- a/client/src/components/AddUserPopup/AddUserPopup.jsx +++ b/client/src/components/AddUserPopup/AddUserPopup.jsx @@ -5,10 +5,11 @@ import React, { import PropTypes from 'prop-types'; import { useTranslation } from 'react-i18next'; import { Button, Form, Message } from 'semantic-ui-react'; +import { usePrevious } from '../../lib/hooks'; import { withPopup } from '../../lib/popup'; import { Input, Popup } from '../../lib/custom-ui'; -import { useForm, usePrevious } from '../../hooks'; +import { useForm } from '../../hooks'; import styles from './AddUserPopup.module.css'; @@ -120,7 +121,7 @@ const AddUserPopup = React.memo( onChange={handleFieldChange} />
{t('common.password')}
-
{t('common.hours')}
-
{t('common.minutes')}
-
{t('common.seconds')}
-
{t('common.password')}
-
{t('common.currentPassword')}
-
{t('common.newPassword')}
-
{t('common.currentPassword')}
- { - const nextProps = props; +const Input = SemanticUIInput; - if (mask) { - nextProps.input = ; - } +Input.Password = InputPassword; +Input.Mask = InputMask; - // eslint-disable-next-line react/jsx-props-no-spreading - return ; -}); - -Input.propTypes = { - mask: PropTypes.string, - maskChar: PropTypes.string, -}; - -Input.defaultProps = { - mask: undefined, - maskChar: undefined, -}; - -export default React.memo(Input); +export default Input; diff --git a/client/src/lib/custom-ui/components/Input/InputMask.jsx b/client/src/lib/custom-ui/components/Input/InputMask.jsx new file mode 100644 index 00000000..39bff43f --- /dev/null +++ b/client/src/lib/custom-ui/components/Input/InputMask.jsx @@ -0,0 +1,21 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { Input } from 'semantic-ui-react'; + +import MaskedInput from './MaskedInput'; + +const InputMask = React.forwardRef(({ mask, maskChar, ...props }, ref) => ( + // eslint-disable-next-line react/jsx-props-no-spreading + } /> +)); + +InputMask.propTypes = { + mask: PropTypes.string.isRequired, + maskChar: PropTypes.string, +}; + +InputMask.defaultProps = { + maskChar: undefined, +}; + +export default React.memo(InputMask); diff --git a/client/src/lib/custom-ui/components/Input/InputPassword.jsx b/client/src/lib/custom-ui/components/Input/InputPassword.jsx new file mode 100644 index 00000000..28059071 --- /dev/null +++ b/client/src/lib/custom-ui/components/Input/InputPassword.jsx @@ -0,0 +1,22 @@ +import React, { useCallback } from 'react'; +import { Icon, Input } from 'semantic-ui-react'; +import { useToggle } from '../../../hooks'; + +const InputPassword = React.forwardRef((props, ref) => { + const [isHidden, toggleHidden] = useToggle(true); + + const handleToggleClick = useCallback(() => { + toggleHidden(); + }, [toggleHidden]); + + return ( + } + /> + ); +}); + +export default React.memo(InputPassword); diff --git a/client/src/lib/hooks/index.js b/client/src/lib/hooks/index.js new file mode 100644 index 00000000..cf2fad6c --- /dev/null +++ b/client/src/lib/hooks/index.js @@ -0,0 +1,8 @@ +import usePrevious from './use-previous'; +import useToggle from './use-toggle'; +import useForceUpdate from './use-force-update'; +import useDidUpdate from './use-did-update'; + +export { + usePrevious, useToggle, useForceUpdate, useDidUpdate, +}; diff --git a/client/src/hooks/use-did-update.js b/client/src/lib/hooks/use-did-update.js similarity index 100% rename from client/src/hooks/use-did-update.js rename to client/src/lib/hooks/use-did-update.js diff --git a/client/src/hooks/use-force-update.js b/client/src/lib/hooks/use-force-update.js similarity index 100% rename from client/src/hooks/use-force-update.js rename to client/src/lib/hooks/use-force-update.js diff --git a/client/src/hooks/use-previous.js b/client/src/lib/hooks/use-previous.js similarity index 100% rename from client/src/hooks/use-previous.js rename to client/src/lib/hooks/use-previous.js diff --git a/client/src/hooks/use-toggle.js b/client/src/lib/hooks/use-toggle.js similarity index 100% rename from client/src/hooks/use-toggle.js rename to client/src/lib/hooks/use-toggle.js diff --git a/server/package-lock.json b/server/package-lock.json index 17a8227e..e4c93301 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -5367,9 +5367,9 @@ "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" }, "prettier": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", - "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", "dev": true }, "prettier-eslint": { @@ -5394,9 +5394,9 @@ }, "dependencies": { "core-js": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.3.6.tgz", - "integrity": "sha512-u4oM8SHwmDuh5mWZdDg9UwNVq5s1uqq6ZDLLIs07VY+VJU91i3h4f3K/pgFvtUQPGdeStrZ+odKyfyt4EnKHfA==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.4.1.tgz", + "integrity": "sha512-KX/dnuY/J8FtEwbnrzmAjUYgLqtk+cxM86hfG60LGiW3MmltIc2yAmDgBgEkfm0blZhUrdr1Zd84J2Y14mLxzg==", "dev": true } } @@ -7407,9 +7407,9 @@ } }, "typescript": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.4.tgz", - "integrity": "sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.2.tgz", + "integrity": "sha512-ml7V7JfiN2Xwvcer+XAf2csGO1bPBdRbFCkYBczNZggrBZ9c7G3riSUeJmqEU5uOtXNPMhE3n+R4FA/3YOAWOQ==", "dev": true }, "uid-safe": { diff --git a/server/package.json b/server/package.json index 29e75af6..24ca1d79 100644 --- a/server/package.json +++ b/server/package.json @@ -46,6 +46,7 @@ "eslint-config-airbnb-base": "^14.0.0", "eslint-plugin-import": "^2.18.2", "nodemon": "^1.19.4", + "prettier-eslint": "^9.0.0", "prettier-eslint-cli": "^5.0.0" }, "engines": {