diff --git a/artisan b/artisan old mode 100755 new mode 100644 diff --git a/package.json b/package.json index 9f11efc37..3afebfacf 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,8 @@ "xterm-addon-search": "^0.9.0", "xterm-addon-search-bar": "^0.2.0", "xterm-addon-web-links": "^0.6.0", - "yup": "^0.29.1" + "yup": "^1.3.3", + "yup-locales": "^1.2.21" }, "devDependencies": { "@babel/core": "^7.12.1", diff --git a/public/assets/svgs/pterodactyl.svg b/public/assets/svgs/pterodactyl.svg old mode 100755 new mode 100644 diff --git a/resources/scripts/assets/images/pterodactyl.svg b/resources/scripts/assets/images/pterodactyl.svg old mode 100755 new mode 100644 diff --git a/resources/scripts/components/FlashMessageRender.tsx b/resources/scripts/components/FlashMessageRender.tsx index 2009eb1e2..bcb330f6d 100644 --- a/resources/scripts/components/FlashMessageRender.tsx +++ b/resources/scripts/components/FlashMessageRender.tsx @@ -10,7 +10,7 @@ type Props = Readonly<{ const FlashMessageRender = ({ byKey, className }: Props) => { const flashes = useStoreState((state) => - state.flashes.items.filter((flash) => (byKey ? flash.key === byKey : true)), + state.flashes.items.filter((flash) => (byKey ? flash.key === byKey : true)) ); return flashes.length ? ( diff --git a/resources/scripts/components/auth/ForgotPasswordContainer.tsx b/resources/scripts/components/auth/ForgotPasswordContainer.tsx index afd7fddc5..a6557042d 100644 --- a/resources/scripts/components/auth/ForgotPasswordContainer.tsx +++ b/resources/scripts/components/auth/ForgotPasswordContainer.tsx @@ -1,7 +1,8 @@ import tw from 'twin.macro'; import * as React from 'react'; import Reaptcha from 'reaptcha'; -import { object, string } from 'yup'; +import { object, string, setLocale } from 'yup'; +import { pt } from 'yup-locales'; import { Link } from 'react-router-dom'; import useFlash from '@/plugins/useFlash'; import { useStoreState } from 'easy-peasy'; @@ -24,6 +25,8 @@ export default () => { const { clearFlashes, addFlash } = useFlash(); const { enabled: recaptchaEnabled, siteKey } = useStoreState((state) => state.settings.data!.recaptcha); + setLocale(pt); + useEffect(() => { clearFlashes(); }, []); diff --git a/resources/scripts/components/auth/LoginContainer.tsx b/resources/scripts/components/auth/LoginContainer.tsx index 30b2900ec..1f1aaab61 100644 --- a/resources/scripts/components/auth/LoginContainer.tsx +++ b/resources/scripts/components/auth/LoginContainer.tsx @@ -1,7 +1,8 @@ import tw from 'twin.macro'; import Reaptcha from 'reaptcha'; import login from '@/api/auth/login'; -import { object, string } from 'yup'; +import { object, string, setLocale } from 'yup'; +import { pt } from 'yup-locales'; import useFlash from '@/plugins/useFlash'; import { useStoreState } from 'easy-peasy'; import { Formik, FormikHelpers } from 'formik'; @@ -26,6 +27,8 @@ const LoginContainer = ({ history }: RouteComponentProps) => { const { clearFlashes, clearAndAddHttpError } = useFlash(); const { enabled: recaptchaEnabled, siteKey } = useStoreState((state) => state.settings.data!.recaptcha); + setLocale(pt); + useEffect(() => { clearFlashes(); }, []); diff --git a/resources/scripts/components/auth/RegisterContainer.tsx b/resources/scripts/components/auth/RegisterContainer.tsx index 9599065c7..51155d211 100644 --- a/resources/scripts/components/auth/RegisterContainer.tsx +++ b/resources/scripts/components/auth/RegisterContainer.tsx @@ -1,6 +1,7 @@ import tw from 'twin.macro'; import Reaptcha from 'reaptcha'; -import { object, string } from 'yup'; +import { object, string, setLocale } from 'yup'; +import { pt } from 'yup-locales'; import useFlash from '@/plugins/useFlash'; import register from '@/api/auth/register'; import { useStoreState } from 'easy-peasy'; @@ -25,6 +26,8 @@ const RegisterContainer = ({ history }: RouteComponentProps) => { const { clearFlashes, clearAndAddHttpError, addFlash } = useFlash(); const { enabled: recaptchaEnabled, siteKey } = useStoreState((state) => state.settings.data!.recaptcha); + setLocale(pt); + useEffect(() => { clearFlashes(); }, []); diff --git a/resources/scripts/components/auth/ResetPasswordContainer.tsx b/resources/scripts/components/auth/ResetPasswordContainer.tsx index c0fdb7026..6dcb3891b 100644 --- a/resources/scripts/components/auth/ResetPasswordContainer.tsx +++ b/resources/scripts/components/auth/ResetPasswordContainer.tsx @@ -1,7 +1,8 @@ import tw from 'twin.macro'; import React, { useState } from 'react'; import { Link } from 'react-router-dom'; -import { object, ref, string } from 'yup'; +import { object, ref, string, setLocale } from 'yup'; +import { pt } from 'yup-locales'; import { ApplicationStore } from '@/state'; import { httpErrorToHuman } from '@/api/http'; import { Formik, FormikHelpers } from 'formik'; @@ -28,6 +29,8 @@ export default ({ match, location }: RouteComponentProps<{ token: string }>) => setEmail(parsed.get('email') || ''); } + setLocale(pt); + const submit = ({ password, passwordConfirmation }: Values, { setSubmitting }: FormikHelpers) => { clearFlashes(); performPasswordReset(email, { diff --git a/resources/scripts/components/dashboard/CouponContainer.tsx b/resources/scripts/components/dashboard/CouponContainer.tsx index 11e316013..811ec5a04 100644 --- a/resources/scripts/components/dashboard/CouponContainer.tsx +++ b/resources/scripts/components/dashboard/CouponContainer.tsx @@ -3,7 +3,8 @@ import React, { Fragment } from 'react'; import FlashMessageRender from '@/components/FlashMessageRender'; import ContentBox from '@/components/elements/ContentBox'; import { Form, Formik, FormikHelpers } from 'formik'; -import { object, string } from 'yup'; +import { object, string, setLocale } from 'yup'; +import { pt } from 'yup-locales'; import SpinnerOverlay from '@/components/elements/SpinnerOverlay'; import Field from '@/components/elements/Field'; import { Button } from '@/components/elements/button'; @@ -19,6 +20,7 @@ const schema = object().shape({ export default () => { const { clearFlashes, addFlash } = useStoreActions((actions: Actions) => actions.flashes); + setLocale(pt); const submit = (values: { code: string }, { resetForm, setSubmitting }: FormikHelpers<{ code: string }>) => { clearFlashes(); redeemCoupon(values.code) diff --git a/resources/scripts/components/dashboard/DashboardContainer.tsx b/resources/scripts/components/dashboard/DashboardContainer.tsx index c54296522..28d0a850a 100644 --- a/resources/scripts/components/dashboard/DashboardContainer.tsx +++ b/resources/scripts/components/dashboard/DashboardContainer.tsx @@ -14,11 +14,8 @@ import Pagination from '@/components/elements/Pagination'; import { usePersistedState } from '@/plugins/usePersistedState'; import PageContentBlock from '@/components/elements/PageContentBlock'; -import useWindowDimensions from '@/plugins/useWindowDimensions'; - export default () => { const { search } = useLocation(); - const { width } = useWindowDimensions(); const defaultPage = Number(new URLSearchParams(search).get('page') || '1'); const [page, setPage] = useState(!isNaN(defaultPage) && defaultPage > 0 ? defaultPage : 1); @@ -34,7 +31,7 @@ export default () => { getServers({ page, type: showOnlyAdmin && rootAdmin ? 'admin' : undefined, - }), + }) ); useEffect(() => { diff --git a/resources/scripts/components/dashboard/ServerRow.tsx b/resources/scripts/components/dashboard/ServerRow.tsx index 54c5854be..8a4c8a2c8 100644 --- a/resources/scripts/components/dashboard/ServerRow.tsx +++ b/resources/scripts/components/dashboard/ServerRow.tsx @@ -38,8 +38,8 @@ const StatusIndicatorBox = styled(GreyRowBox)<{ !$status || $status === 'offline' ? tw`bg-red-500` : $status === 'running' - ? tw`bg-green-500` - : tw`bg-yellow-500`}; + ? tw`bg-green-500` + : tw`bg-yellow-500`}; } &:hover .status-bar { @@ -119,10 +119,10 @@ export default ({ server, className }: { server: Server; className?: string }) = {server.isTransferring ? 'Transferindo' : server.status === 'installing' - ? 'Instalando' - : server.status === 'restoring_backup' - ? 'Restaurando Backup' - : 'Não Válido'} + ? 'Instalando' + : server.status === 'restoring_backup' + ? 'Restaurando Backup' + : 'Não Válido'} ) : ( diff --git a/resources/scripts/components/dashboard/forms/AddReferralCodeForm.tsx b/resources/scripts/components/dashboard/forms/AddReferralCodeForm.tsx index 3ac1e3243..ad0b4f952 100644 --- a/resources/scripts/components/dashboard/forms/AddReferralCodeForm.tsx +++ b/resources/scripts/components/dashboard/forms/AddReferralCodeForm.tsx @@ -1,5 +1,6 @@ import React from 'react'; import * as Yup from 'yup'; +import { pt } from 'yup-locales'; import { ApplicationStore } from '@/state'; import { httpErrorToHuman } from '@/api/http'; import { useStoreState } from '@/state/hooks'; @@ -22,6 +23,7 @@ const schema = Yup.object().shape({ export default () => { const code = useStoreState((state) => state.user.data!.referralCode); const { clearFlashes, addFlash } = useStoreActions((actions: Actions) => actions.flashes); + Yup.setLocale(pt); const submit = (values: Values, { resetForm, setSubmitting }: FormikHelpers) => { clearFlashes('account:referral'); @@ -32,7 +34,7 @@ export default () => { type: 'success', key: 'account:referral', message: 'Agora você está usando o Código de referência.', - }), + }) ) .catch((error) => addFlash({ @@ -40,7 +42,7 @@ export default () => { key: 'account:referral', title: 'Erro', message: httpErrorToHuman(error), - }), + }) ) .then(() => { resetForm(); diff --git a/resources/scripts/components/dashboard/forms/CreateApiKeyForm.tsx b/resources/scripts/components/dashboard/forms/CreateApiKeyForm.tsx index eebbc577b..43a1bfd3e 100644 --- a/resources/scripts/components/dashboard/forms/CreateApiKeyForm.tsx +++ b/resources/scripts/components/dashboard/forms/CreateApiKeyForm.tsx @@ -1,5 +1,6 @@ import tw from 'twin.macro'; -import { object, string } from 'yup'; +import { object, string, setLocale } from 'yup'; +import { pt } from 'yup-locales'; import React, { useState } from 'react'; import { ApplicationStore } from '@/state'; import styled from 'styled-components/macro'; @@ -26,6 +27,7 @@ const CustomTextarea = styled(Textarea)` export default ({ onKeyCreated }: { onKeyCreated: (key: ApiKey) => void }) => { const [apiKey, setApiKey] = useState(''); const { addError, clearFlashes } = useStoreActions((actions: Actions) => actions.flashes); + setLocale(pt); const submit = (values: Values, { setSubmitting, resetForm }: FormikHelpers) => { clearFlashes('account'); diff --git a/resources/scripts/components/dashboard/forms/CreateSSHKeyForm.tsx b/resources/scripts/components/dashboard/forms/CreateSSHKeyForm.tsx index cfbe7b006..dc3abb422 100644 --- a/resources/scripts/components/dashboard/forms/CreateSSHKeyForm.tsx +++ b/resources/scripts/components/dashboard/forms/CreateSSHKeyForm.tsx @@ -1,6 +1,7 @@ import React from 'react'; import tw from 'twin.macro'; -import { object, string } from 'yup'; +import { object, string, setLocale } from 'yup'; +import { pt } from 'yup-locales'; import styled from 'styled-components/macro'; import { useFlashKey } from '@/plugins/useFlash'; import { Button } from '@/components/elements/button/index'; @@ -22,6 +23,7 @@ const CustomTextarea = styled(Textarea)` export default () => { const { clearAndAddHttpError } = useFlashKey('account'); const { mutate } = useSSHKeys(); + setLocale(pt); const submit = (values: Values, { setSubmitting, resetForm }: FormikHelpers) => { clearAndAddHttpError(); diff --git a/resources/scripts/components/dashboard/forms/UpdateEmailAddressForm.tsx b/resources/scripts/components/dashboard/forms/UpdateEmailAddressForm.tsx index 728808748..1160cb85d 100644 --- a/resources/scripts/components/dashboard/forms/UpdateEmailAddressForm.tsx +++ b/resources/scripts/components/dashboard/forms/UpdateEmailAddressForm.tsx @@ -1,5 +1,6 @@ import React from 'react'; import * as Yup from 'yup'; +import { pt } from 'yup-locales'; import tw from 'twin.macro'; import { ApplicationStore } from '@/state'; import { httpErrorToHuman } from '@/api/http'; @@ -25,6 +26,8 @@ export default () => { const { clearFlashes, addFlash } = useStoreActions((actions: Actions) => actions.flashes); + Yup.setLocale(pt); + const submit = (values: Values, { resetForm, setSubmitting }: FormikHelpers) => { clearFlashes('account:email'); @@ -34,7 +37,7 @@ export default () => { type: 'success', key: 'account:email', message: 'O seu E-mail principal foi atualizado.', - }), + }) ) .catch((error) => addFlash({ @@ -42,7 +45,7 @@ export default () => { key: 'account:email', title: 'Erro', message: httpErrorToHuman(error), - }), + }) ) .then(() => { resetForm(); diff --git a/resources/scripts/components/dashboard/forms/UpdatePasswordForm.tsx b/resources/scripts/components/dashboard/forms/UpdatePasswordForm.tsx index 6b1b59bb6..6d81d3cfb 100644 --- a/resources/scripts/components/dashboard/forms/UpdatePasswordForm.tsx +++ b/resources/scripts/components/dashboard/forms/UpdatePasswordForm.tsx @@ -1,5 +1,6 @@ import React from 'react'; import * as Yup from 'yup'; +import { pt } from 'yup-locales'; import tw from 'twin.macro'; import { ApplicationStore } from '@/state'; import { httpErrorToHuman } from '@/api/http'; @@ -24,7 +25,7 @@ const schema = Yup.object().shape({ 'A confirmação da senha não corresponde à senha que você digitou.', function (value) { return value === this.parent.password; - }, + } ), }); @@ -36,6 +37,8 @@ export default () => { return null; } + Yup.setLocale(pt); + const submit = (values: Values, { setSubmitting }: FormikHelpers) => { clearFlashes('account:password'); updateAccountPassword({ ...values }) @@ -49,7 +52,7 @@ export default () => { type: 'danger', title: 'Error', message: httpErrorToHuman(error), - }), + }) ) .then(() => setSubmitting(false)); }; diff --git a/resources/scripts/components/dashboard/forms/UpdateUsernameForm.tsx b/resources/scripts/components/dashboard/forms/UpdateUsernameForm.tsx index 4db23bfd5..217153344 100644 --- a/resources/scripts/components/dashboard/forms/UpdateUsernameForm.tsx +++ b/resources/scripts/components/dashboard/forms/UpdateUsernameForm.tsx @@ -1,5 +1,6 @@ import React from 'react'; import * as Yup from 'yup'; +import { pt } from 'yup-locales'; import tw from 'twin.macro'; import { ApplicationStore } from '@/state'; import { httpErrorToHuman } from '@/api/http'; @@ -23,6 +24,8 @@ const schema = Yup.object().shape({ export default () => { const { clearFlashes, addFlash } = useStoreActions((actions: Actions) => actions.flashes); + Yup.setLocale(pt); + const submit = (values: Values, { resetForm, setSubmitting }: FormikHelpers) => { clearFlashes('account:email'); @@ -32,7 +35,7 @@ export default () => { type: 'success', key: 'account:username', message: 'O seu usuário foi alterado.', - }), + }) ) .catch((error) => addFlash({ @@ -40,7 +43,7 @@ export default () => { key: 'account:username', title: 'Erro', message: httpErrorToHuman(error), - }), + }) ) .then(() => { resetForm(); diff --git a/resources/scripts/components/dashboard/search/SearchModal.tsx b/resources/scripts/components/dashboard/search/SearchModal.tsx index 432cc4458..7773a39f8 100644 --- a/resources/scripts/components/dashboard/search/SearchModal.tsx +++ b/resources/scripts/components/dashboard/search/SearchModal.tsx @@ -1,6 +1,7 @@ import tw from 'twin.macro'; import debounce from 'debounce'; -import { object, string } from 'yup'; +import { object, string, setLocale } from 'yup'; +import { pt } from 'yup-locales'; import { ip } from '@/lib/formatters'; import { Link } from 'react-router-dom'; import getServers from '@/api/getServers'; @@ -50,9 +51,11 @@ export default ({ ...props }: Props) => { const isAdmin = useStoreState((state) => state.user.data!.rootAdmin); const [servers, setServers] = useState([]); const { clearAndAddHttpError, clearFlashes } = useStoreActions( - (actions: Actions) => actions.flashes, + (actions: Actions) => actions.flashes ); + setLocale(pt); + const search = debounce(({ term }: Values, { setSubmitting }: FormikHelpers) => { clearFlashes('search'); diff --git a/resources/scripts/components/elements/Checkbox.tsx b/resources/scripts/components/elements/Checkbox.tsx index 7128c4ee7..e2d3ebe2f 100644 --- a/resources/scripts/components/elements/Checkbox.tsx +++ b/resources/scripts/components/elements/Checkbox.tsx @@ -17,7 +17,7 @@ const Checkbox = ({ name, value, className, ...props }: Props & InputProps) => ( {({ field, form }: FieldProps) => { if (!Array.isArray(field.value)) { console.error( - 'Tentativa de montar uma caixa de seleção usando um valor de campo que não é uma matriz.', + 'Tentativa de montar uma caixa de seleção usando um valor de campo que não é uma matriz.' ); return null; diff --git a/resources/scripts/components/elements/Field.tsx b/resources/scripts/components/elements/Field.tsx index b1b852c28..14be16521 100644 --- a/resources/scripts/components/elements/Field.tsx +++ b/resources/scripts/components/elements/Field.tsx @@ -41,7 +41,7 @@ const Field = forwardRef( )} - ), + ) ); Field.displayName = 'Field'; diff --git a/resources/scripts/components/elements/Input.tsx b/resources/scripts/components/elements/Input.tsx index 8dcb3472a..f8251318f 100644 --- a/resources/scripts/components/elements/Input.tsx +++ b/resources/scripts/components/elements/Input.tsx @@ -21,9 +21,7 @@ const checkboxStyle = css` ${tw`bg-neutral-500 cursor-pointer appearance-none inline-block align-middle select-none flex-shrink-0 w-4 h-4 text-primary-400 border border-neutral-300 rounded-sm`}; color-adjust: exact; background-origin: border-box; - transition: - all 75ms linear, - box-shadow 25ms linear; + transition: all 75ms linear, box-shadow 25ms linear; &:checked { ${tw`border-transparent bg-no-repeat bg-center`}; diff --git a/resources/scripts/components/elements/Spinner.tsx b/resources/scripts/components/elements/Spinner.tsx index 68b2c35ca..ce6f21463 100644 --- a/resources/scripts/components/elements/Spinner.tsx +++ b/resources/scripts/components/elements/Spinner.tsx @@ -31,11 +31,11 @@ const SpinnerComponent = styled.div` props.size === 'small' ? tw`w-4 h-4 border-2` : props.size === 'large' - ? css` - ${tw`w-16 h-16`}; - border-width: 6px; - ` - : null}; + ? css` + ${tw`w-16 h-16`}; + border-width: 6px; + ` + : null}; border-color: ${(props) => (!props.isBlue ? 'rgba(255, 255, 255, 0.2)' : 'hsla(212, 92%, 43%, 0.2)')}; border-top-color: ${(props) => (!props.isBlue ? 'rgb(255, 255, 255)' : 'hsl(212, 92%, 43%)')}; diff --git a/resources/scripts/components/elements/activity/ActivityLogEntry.tsx b/resources/scripts/components/elements/activity/ActivityLogEntry.tsx index 1d5218d6c..ca61d997f 100644 --- a/resources/scripts/components/elements/activity/ActivityLogEntry.tsx +++ b/resources/scripts/components/elements/activity/ActivityLogEntry.tsx @@ -24,15 +24,12 @@ export function wrapProperties(value: unknown): any { } if (isObject(value)) { - return getObjectKeys(value).reduce( - (obj, key) => { - if (key === 'count' || (typeof key === 'string' && key.endsWith('_count'))) { - return { ...obj, [key]: value[key] }; - } - return { ...obj, [key]: wrapProperties(value[key]) }; - }, - {} as Record, - ); + return getObjectKeys(value).reduce((obj, key) => { + if (key === 'count' || (typeof key === 'string' && key.endsWith('_count'))) { + return { ...obj, [key]: value[key] }; + } + return { ...obj, [key]: wrapProperties(value[key]) }; + }, {} as Record); } if (Array.isArray(value)) { diff --git a/resources/scripts/components/elements/alert/Alert.tsx b/resources/scripts/components/elements/alert/Alert.tsx index fdc3c01f0..381566a6e 100644 --- a/resources/scripts/components/elements/alert/Alert.tsx +++ b/resources/scripts/components/elements/alert/Alert.tsx @@ -19,7 +19,7 @@ export default ({ type, className, children }: AlertProps) => { ['border-yellow-500 bg-yellow-500/25']: type === 'warning', ['border-red-500 bg-red-500/25']: type === 'danger', }, - className, + className )} > {type === 'warning' ? ( diff --git a/resources/scripts/components/elements/button/Button.tsx b/resources/scripts/components/elements/button/Button.tsx index 3777df59a..de8566c43 100644 --- a/resources/scripts/components/elements/button/Button.tsx +++ b/resources/scripts/components/elements/button/Button.tsx @@ -17,14 +17,14 @@ const Button = forwardRef( [styles.small]: size === Options.Size.Small, [styles.large]: size === Options.Size.Large, }, - className, + className )} {...rest} > {children} ); - }, + } ); const TextButton = forwardRef(({ className, ...props }, ref) => ( diff --git a/resources/scripts/components/elements/dialog/DialogFooter.tsx b/resources/scripts/components/elements/dialog/DialogFooter.tsx index 1df43759a..c79027c1b 100644 --- a/resources/scripts/components/elements/dialog/DialogFooter.tsx +++ b/resources/scripts/components/elements/dialog/DialogFooter.tsx @@ -9,7 +9,7 @@ export default ({ children }: { children: React.ReactNode }) => { setFooter(
{children} -
, + ); }, [children]); diff --git a/resources/scripts/components/elements/dialog/DialogIcon.tsx b/resources/scripts/components/elements/dialog/DialogIcon.tsx index 8335277c1..e2ed6b207 100644 --- a/resources/scripts/components/elements/dialog/DialogIcon.tsx +++ b/resources/scripts/components/elements/dialog/DialogIcon.tsx @@ -19,7 +19,7 @@ export default ({ type, position, className }: DialogIconProps) => { setIcon(
-
, + ); }, [type, className]); diff --git a/resources/scripts/components/elements/dropdown/DropdownItem.tsx b/resources/scripts/components/elements/dropdown/DropdownItem.tsx index 78120a8f9..1c012e15a 100644 --- a/resources/scripts/components/elements/dropdown/DropdownItem.tsx +++ b/resources/scripts/components/elements/dropdown/DropdownItem.tsx @@ -26,7 +26,7 @@ const DropdownItem = forwardRef( [styles.danger]: danger, [styles.disabled]: disabled, }, - className, + className )} onClick={onClick} > @@ -36,7 +36,7 @@ const DropdownItem = forwardRef( )} ); - }, + } ); export default DropdownItem; diff --git a/resources/scripts/components/elements/inputs/InputField.tsx b/resources/scripts/components/elements/inputs/InputField.tsx index 87504a8f4..c3dfc3ccd 100644 --- a/resources/scripts/components/elements/inputs/InputField.tsx +++ b/resources/scripts/components/elements/inputs/InputField.tsx @@ -19,7 +19,7 @@ const Component = forwardRef(({ className, va 'form-input', styles.text_input, { [styles.loose]: variant === Variant.Loose }, - className, + className )} {...props} /> diff --git a/resources/scripts/components/elements/tooltip/Tooltip.tsx b/resources/scripts/components/elements/tooltip/Tooltip.tsx index 1272c1d18..bcb51c7a6 100644 --- a/resources/scripts/components/elements/tooltip/Tooltip.tsx +++ b/resources/scripts/components/elements/tooltip/Tooltip.tsx @@ -109,7 +109,7 @@ export default ({ children, ...props }: Props) => { ref={arrowEl} style={{ transform: `translate(${Math.round(ax || 0)}px, ${Math.round( - ay || 0, + ay || 0 )}px) rotate(45deg)`, }} className={classNames('absolute bg-gray-900 w-3 h-3', side)} diff --git a/resources/scripts/components/elements/transitions/FadeTransition.tsx b/resources/scripts/components/elements/transitions/FadeTransition.tsx index 99de95373..e4287cc18 100644 --- a/resources/scripts/components/elements/transitions/FadeTransition.tsx +++ b/resources/scripts/components/elements/transitions/FadeTransition.tsx @@ -14,8 +14,8 @@ export default ({ children, duration, ...props }: Props) => { const [enterDuration, exitDuration] = Array.isArray(duration) ? duration : !duration - ? ['duration-200', 'duration-100'] - : [duration, duration]; + ? ['duration-200', 'duration-100'] + : [duration, duration]; return ( { const status = ServerContext.useStoreState((state) => state.server.data?.status || null); const isTransferring = ServerContext.useStoreState((state) => state.server.data?.isTransferring || false); const isNodeUnderMaintenance = ServerContext.useStoreState( - (state) => state.server.data?.isNodeUnderMaintenance || false, + (state) => state.server.data?.isNodeUnderMaintenance || false ); return status === 'installing' || status === 'install_failed' || status === 'reinstall_failed' ? ( diff --git a/resources/scripts/components/server/PluginContainer.tsx b/resources/scripts/components/server/PluginContainer.tsx index 0143140ee..8b37b2aa6 100644 --- a/resources/scripts/components/server/PluginContainer.tsx +++ b/resources/scripts/components/server/PluginContainer.tsx @@ -1,5 +1,6 @@ import useSWR from 'swr'; -import { object, string } from 'yup'; +import { object, string, setLocale } from 'yup'; +import { pt } from 'yup-locales'; import * as Icon from 'react-feather'; import useFlash from '@/plugins/useFlash'; import { ServerContext } from '@/state/server'; @@ -25,7 +26,7 @@ export default () => { const { data, error } = useSWR([uuid, query, '/plugins'], (uuid, query) => getPlugins(uuid, query)); - console.log(data); + setLocale(pt); useEffect(() => { if (!error) { @@ -49,7 +50,7 @@ export default () => { key: 'server:plugins', type: 'success', message: 'Plugin instalado com sucesso.', - }), + }) ) .catch((error) => clearAndAddHttpError(error)); }; diff --git a/resources/scripts/components/server/backups/BackupContextMenu.tsx b/resources/scripts/components/server/backups/BackupContextMenu.tsx index cc5fe1c35..fd0db3a61 100644 --- a/resources/scripts/components/server/backups/BackupContextMenu.tsx +++ b/resources/scripts/components/server/backups/BackupContextMenu.tsx @@ -54,8 +54,8 @@ export default ({ backup }: Props) => { items: data.items.filter((b) => b.uuid !== backup.uuid), backupCount: data.backupCount - 1, }), - false, - ), + false + ) ) .catch((error) => { console.error(error); @@ -73,7 +73,7 @@ export default ({ backup }: Props) => { setServerFromState((s) => ({ ...s, status: 'restoring_backup', - })), + })) ) .catch((error) => { console.error(error); @@ -99,11 +99,11 @@ export default ({ backup }: Props) => { : { ...b, isLocked: !b.isLocked, - }, + } ), }), - false, - ), + false + ) ) .catch((error) => alert(httpErrorToHuman(error))) .then(() => setModal('')); diff --git a/resources/scripts/components/server/backups/BackupRow.tsx b/resources/scripts/components/server/backups/BackupRow.tsx index cf3d5ceb0..7bb783289 100644 --- a/resources/scripts/components/server/backups/BackupRow.tsx +++ b/resources/scripts/components/server/backups/BackupRow.tsx @@ -37,10 +37,10 @@ export default ({ backup, className }: Props) => { checksum: (parsed.checksum_type || '') + ':' + (parsed.checksum || ''), bytes: parsed.file_size || 0, completedAt: new Date(), - }, + } ), }), - false, + false ); } catch (e) { console.warn(e); diff --git a/resources/scripts/components/server/backups/CreateBackupButton.tsx b/resources/scripts/components/server/backups/CreateBackupButton.tsx index ef9f28a42..ceed05744 100644 --- a/resources/scripts/components/server/backups/CreateBackupButton.tsx +++ b/resources/scripts/components/server/backups/CreateBackupButton.tsx @@ -1,7 +1,8 @@ import tw from 'twin.macro'; import useFlash from '@/plugins/useFlash'; import Can from '@/components/elements/Can'; -import { boolean, object, string } from 'yup'; +import { boolean, object, string, setLocale } from 'yup'; +import { pt } from 'yup-locales'; import { ServerContext } from '@/state/server'; import Field from '@/components/elements/Field'; import React, { useEffect, useState } from 'react'; @@ -22,6 +23,7 @@ interface Values { } const ModalContent = ({ ...props }: RequiredModalProps) => { + setLocale(pt); const { isSubmitting } = useFormikContext(); return ( @@ -87,7 +89,7 @@ export default () => { items: data.items.concat(backup), backupCount: data.backupCount + 1, }), - false, + false ); setVisible(false); }) diff --git a/resources/scripts/components/server/console/Console.tsx b/resources/scripts/components/server/console/Console.tsx index 91312985f..d80dc7878 100644 --- a/resources/scripts/components/server/console/Console.tsx +++ b/resources/scripts/components/server/console/Console.tsx @@ -90,7 +90,7 @@ export default () => { const handleDaemonErrorOutput = (line: string) => terminal.writeln( - TERMINAL_PRELUDE + '\u001b[1m\u001b[41m' + line.replace(/(?:\r\n|\r|\n)$/im, '') + '\u001b[0m', + TERMINAL_PRELUDE + '\u001b[1m\u001b[41m' + line.replace(/(?:\r\n|\r|\n)$/im, '') + '\u001b[0m' ); const handlePowerChangeEvent = (state: string) => @@ -159,7 +159,7 @@ export default () => { if (terminal.element) { fitAddon.fit(); } - }, 100), + }, 100) ); useEffect(() => { diff --git a/resources/scripts/components/server/console/PowerButtons.tsx b/resources/scripts/components/server/console/PowerButtons.tsx index 81227f7bd..554ca6277 100644 --- a/resources/scripts/components/server/console/PowerButtons.tsx +++ b/resources/scripts/components/server/console/PowerButtons.tsx @@ -17,7 +17,7 @@ export default ({ className }: PowerButtonProps) => { const killable = status === 'stopping'; const onButtonClick = ( action: PowerAction | 'kill-confirmed', - e: React.MouseEvent, + e: React.MouseEvent ): void => { e.preventDefault(); if (action === 'kill') { diff --git a/resources/scripts/components/server/console/ServerConsoleContainer.tsx b/resources/scripts/components/server/console/ServerConsoleContainer.tsx index 6ef22e61d..8c97dc4e3 100644 --- a/resources/scripts/components/server/console/ServerConsoleContainer.tsx +++ b/resources/scripts/components/server/console/ServerConsoleContainer.tsx @@ -27,8 +27,8 @@ const ServerConsoleContainer = () => { {isNodeUnderMaintenance ? 'O Node deste servidor está atualmente em manutenção e todas as ações não estão disponíveis.' : isInstalling - ? 'Atualmente, este servidor está executando seu processo de instalação e a maioria das ações não está disponível.' - : 'Atualmente, este servidor está sendo transferido para outro Node e todas as ações não estão disponíveis.'} + ? 'Atualmente, este servidor está executando seu processo de instalação e a maioria das ações não está disponível.' + : 'Atualmente, este servidor está sendo transferido para outro Node e todas as ações não estão disponíveis.'} )}
diff --git a/resources/scripts/components/server/console/ServerDetailsBlock.tsx b/resources/scripts/components/server/console/ServerDetailsBlock.tsx index e728653a4..a6e911508 100644 --- a/resources/scripts/components/server/console/ServerDetailsBlock.tsx +++ b/resources/scripts/components/server/console/ServerDetailsBlock.tsx @@ -47,7 +47,7 @@ export default ({ className }: { className?: string }) => { memory: limits?.memory ? bytesToString(mbToBytes(limits.memory)) : null, disk: limits?.disk ? bytesToString(mbToBytes(limits.disk)) : null, }), - [limits], + [limits] ); const allocation = ServerContext.useStoreState((state) => { diff --git a/resources/scripts/components/server/databases/CreateDatabaseButton.tsx b/resources/scripts/components/server/databases/CreateDatabaseButton.tsx index cb836b045..9842c6217 100644 --- a/resources/scripts/components/server/databases/CreateDatabaseButton.tsx +++ b/resources/scripts/components/server/databases/CreateDatabaseButton.tsx @@ -1,5 +1,6 @@ import tw from 'twin.macro'; -import { object, string } from 'yup'; +import { object, string, setLocale } from 'yup'; +import { pt } from 'yup-locales'; import React, { useState } from 'react'; import useFlash from '@/plugins/useFlash'; import { httpErrorToHuman } from '@/api/http'; @@ -16,25 +17,27 @@ interface Values { connectionsFrom: string; } -const schema = object().shape({ - databaseName: string() - .required('Um nome de Database deve ser fornecido.') - .min(3, 'O nome do Database deve ter pelo menos 3 caracteres.') - .max(48, 'O nome do Database não deve exceder 48 caracteres.') - .matches( - /^[\w\-.]{3,48}$/, - 'O nome do Database deve conter apenas caracteres alfanuméricos, sublinhados, traços e/ou períodos.', - ), - connectionsFrom: string().matches(/^[\w\-/.%:]+$/, 'Um endereço de host válido deve ser fornecido.'), -}); - export default () => { const uuid = ServerContext.useStoreState((state) => state.server.data!.uuid); const { addError, clearFlashes } = useFlash(); const [visible, setVisible] = useState(false); + setLocale(pt); + const appendDatabase = ServerContext.useStoreActions((actions) => actions.databases.appendDatabase); + const schema = object().shape({ + databaseName: string() + .required('Um nome de Database deve ser fornecido.') + .min(3, 'O nome do Database deve ter pelo menos 3 caracteres.') + .max(48, 'O nome do Database não deve exceder 48 caracteres.') + .matches( + /^[\w\-.]{3,48}$/, + 'O nome do Database deve conter apenas caracteres alfanuméricos, sublinhados, traços e/ou períodos.' + ), + connectionsFrom: string().matches(/^[\w\-/.%:]+$/, 'Um endereço de host válido deve ser fornecido.'), + }); + const submit = (values: Values, { setSubmitting }: FormikHelpers) => { clearFlashes('database:create'); createServerDatabase(uuid, { diff --git a/resources/scripts/components/server/databases/DatabaseRow.tsx b/resources/scripts/components/server/databases/DatabaseRow.tsx index c98f7a48c..627c640b5 100644 --- a/resources/scripts/components/server/databases/DatabaseRow.tsx +++ b/resources/scripts/components/server/databases/DatabaseRow.tsx @@ -1,5 +1,6 @@ import tw from 'twin.macro'; -import { object, string } from 'yup'; +import { object, string, setLocale } from 'yup'; +import { pt } from 'yup-locales'; import * as Icon from 'react-feather'; import React, { useState } from 'react'; import useFlash from '@/plugins/useFlash'; @@ -37,6 +38,8 @@ export default ({ database, className }: Props) => { database.password ? `:${encodeURIComponent(database.password)}` : '' }@${database.connectionString}/${database.name}`; + setLocale(pt); + const schema = object().shape({ confirm: string() .required('O nome do Database deve ser fornecido.') diff --git a/resources/scripts/components/server/files/ChmodFileModal.tsx b/resources/scripts/components/server/files/ChmodFileModal.tsx index 0adfbc971..9cf5c7200 100644 --- a/resources/scripts/components/server/files/ChmodFileModal.tsx +++ b/resources/scripts/components/server/files/ChmodFileModal.tsx @@ -40,9 +40,9 @@ const ChmodFileModal = ({ files, ...props }: OwnProps) => { mode: fileBitsToString(mode, !f.isFile), modeBits: mode, } - : f, + : f ), - false, + false ); const data = files.map((f) => ({ file: f.file, mode: mode })); diff --git a/resources/scripts/components/server/files/FileManagerBreadcrumbs.tsx b/resources/scripts/components/server/files/FileManagerBreadcrumbs.tsx index 0d9a4df19..4d75204dc 100644 --- a/resources/scripts/components/server/files/FileManagerBreadcrumbs.tsx +++ b/resources/scripts/components/server/files/FileManagerBreadcrumbs.tsx @@ -62,7 +62,7 @@ export default ({ renderLeft, withinFileEditor, isNewFile }: Props) => { {crumb.name} - ), + ) )} {file && ( diff --git a/resources/scripts/components/server/files/FileManagerStatus.tsx b/resources/scripts/components/server/files/FileManagerStatus.tsx index 094e65b8e..4c3d29c8e 100644 --- a/resources/scripts/components/server/files/FileManagerStatus.tsx +++ b/resources/scripts/components/server/files/FileManagerStatus.tsx @@ -37,7 +37,7 @@ const FileUploadList = () => { const cancelFileUpload = ServerContext.useStoreActions((actions) => actions.files.cancelFileUpload); const clearFileUploads = ServerContext.useStoreActions((actions) => actions.files.clearFileUploads); const uploads = ServerContext.useStoreState((state) => - Object.entries(state.files.uploads).sort(([a], [b]) => a.localeCompare(b)), + Object.entries(state.files.uploads).sort(([a], [b]) => a.localeCompare(b)) ); return ( diff --git a/resources/scripts/components/server/files/FileNameModal.tsx b/resources/scripts/components/server/files/FileNameModal.tsx index 51700cae3..16dbe54c6 100644 --- a/resources/scripts/components/server/files/FileNameModal.tsx +++ b/resources/scripts/components/server/files/FileNameModal.tsx @@ -1,7 +1,8 @@ import React from 'react'; import { join } from 'path'; import tw from 'twin.macro'; -import { object, string } from 'yup'; +import { object, string, setLocale } from 'yup'; +import { pt } from 'yup-locales'; import { ServerContext } from '@/state/server'; import Field from '@/components/elements/Field'; import { Form, Formik, FormikHelpers } from 'formik'; @@ -19,6 +20,8 @@ interface Values { export default ({ onFileNamed, onDismissed, ...props }: Props) => { const directory = ServerContext.useStoreState((state) => state.files.directory); + setLocale(pt); + const submit = (values: Values, { setSubmitting }: FormikHelpers) => { onFileNamed(join(directory, values.fileName)); setSubmitting(false); diff --git a/resources/scripts/components/server/files/FileObjectRow.tsx b/resources/scripts/components/server/files/FileObjectRow.tsx index eef4c6534..605cec439 100644 --- a/resources/scripts/components/server/files/FileObjectRow.tsx +++ b/resources/scripts/components/server/files/FileObjectRow.tsx @@ -42,7 +42,7 @@ const FileObjectRow = ({ file }: { file: FileObject }) => ( window.dispatchEvent( new CustomEvent(`pterodactyl:files:ctx:${file.key}`, { detail: e.clientX, - }), + }) ); }} > diff --git a/resources/scripts/components/server/files/NewDirectoryButton.tsx b/resources/scripts/components/server/files/NewDirectoryButton.tsx index 620141c68..9776c356e 100644 --- a/resources/scripts/components/server/files/NewDirectoryButton.tsx +++ b/resources/scripts/components/server/files/NewDirectoryButton.tsx @@ -3,7 +3,8 @@ import { ServerContext } from '@/state/server'; import { Form, Formik, FormikHelpers } from 'formik'; import Field from '@/components/elements/Field'; import { join } from 'path'; -import { object, string } from 'yup'; +import { object, string, setLocale } from 'yup'; +import { pt } from 'yup-locales'; import createDirectory from '@/api/server/files/createDirectory'; import tw from 'twin.macro'; import { Button } from '@/components/elements/button/index'; @@ -49,6 +50,8 @@ const NewDirectoryDialog = asDialog({ const { close } = useContext(DialogWrapperContext); const { clearAndAddHttpError } = useFlashKey('files:directory-modal'); + setLocale(pt); + useEffect(() => { return () => { clearAndAddHttpError(); diff --git a/resources/scripts/components/server/files/PullFileModal.tsx b/resources/scripts/components/server/files/PullFileModal.tsx index bd15c4fc7..49ff38717 100644 --- a/resources/scripts/components/server/files/PullFileModal.tsx +++ b/resources/scripts/components/server/files/PullFileModal.tsx @@ -1,6 +1,7 @@ import tw from 'twin.macro'; import { join } from 'path'; -import { object, string } from 'yup'; +import { object, string, setLocale } from 'yup'; +import { pt } from 'yup-locales'; import useFlash from '@/plugins/useFlash'; import Code from '@/components/elements/Code'; import { ServerContext } from '@/state/server'; @@ -36,6 +37,7 @@ const generateFileData = (name: string): FileObject => ({ }); export default ({ className }: WithClassname) => { + setLocale(pt); const [visible, setVisible] = useState(false); const uuid = ServerContext.useStoreState((state) => state.server.data!.uuid); @@ -56,7 +58,7 @@ export default ({ className }: WithClassname) => { const submit = ({ url }: Values, { setSubmitting }: FormikHelpers) => { pullFile(uuid, directory, url) .then(() => - mutate((data) => [...data!, generateFileData(new URL(url).pathname.split('/').pop() || '')], false), + mutate((data) => [...data!, generateFileData(new URL(url).pathname.split('/').pop() || '')], false) ) .then(() => setVisible(false)) .catch((error) => { @@ -104,7 +106,7 @@ export default ({ className }: WithClassname) => { {join( directory, - values.url.split('/')[values.url.split('/').length - 1], + values.url.split('/')[values.url.split('/').length - 1] ).replace(/^(\.\.\/|\/)+/, '')} diff --git a/resources/scripts/components/server/files/UploadButton.tsx b/resources/scripts/components/server/files/UploadButton.tsx index 6633e1558..b88feff66 100644 --- a/resources/scripts/components/server/files/UploadButton.tsx +++ b/resources/scripts/components/server/files/UploadButton.tsx @@ -34,7 +34,7 @@ export default ({ className }: WithClassname) => { const uuid = ServerContext.useStoreState((state) => state.server.data!.uuid); const directory = ServerContext.useStoreState((state) => state.files.directory); const { clearFileUploads, removeFileUpload, pushFileUpload, setUploadProgress } = ServerContext.useStoreActions( - (actions) => actions.files, + (actions) => actions.files ); useEventListener( @@ -46,7 +46,7 @@ export default ({ className }: WithClassname) => { visible.value = true; } }, - { capture: true }, + { capture: true } ); useEventListener('dragexit', () => (visible.value = false), { @@ -88,9 +88,9 @@ export default ({ className }: WithClassname) => { headers: { 'Content-Type': 'multipart/form-data' }, params: { directory }, onUploadProgress: (data) => onUploadProgress(data, file.name), - }, + } ) - .then(() => timeouts.value.push(setTimeout(() => removeFileUpload(file.name), 500))), + .then(() => timeouts.value.push(setTimeout(() => removeFileUpload(file.name), 500))) ); }); diff --git a/resources/scripts/components/server/schedules/ScheduleEditContainer.tsx b/resources/scripts/components/server/schedules/ScheduleEditContainer.tsx index f7f9592f1..53b05cd60 100644 --- a/resources/scripts/components/server/schedules/ScheduleEditContainer.tsx +++ b/resources/scripts/components/server/schedules/ScheduleEditContainer.tsx @@ -54,7 +54,7 @@ export default () => { const schedule = ServerContext.useStoreState( (st) => st.schedules.data.find((s) => s.id === Number(scheduleId)), - isEqual, + isEqual ); const appendSchedule = ServerContext.useStoreActions((actions) => actions.schedules.appendSchedule); @@ -145,7 +145,7 @@ export default () => { {schedule.tasks.length > 0 ? schedule.tasks .sort((a, b) => - a.sequenceId === b.sequenceId ? 0 : a.sequenceId > b.sequenceId ? 1 : -1, + a.sequenceId === b.sequenceId ? 0 : a.sequenceId > b.sequenceId ? 1 : -1 ) .map((task) => ( { appendSchedule({ ...schedule, tasks: schedule.tasks.filter((t) => t.id !== task.id), - }), + }) ) .catch((error) => { console.error(error); diff --git a/resources/scripts/components/server/schedules/TaskDetailsModal.tsx b/resources/scripts/components/server/schedules/TaskDetailsModal.tsx index 966944979..31f6b46fc 100644 --- a/resources/scripts/components/server/schedules/TaskDetailsModal.tsx +++ b/resources/scripts/components/server/schedules/TaskDetailsModal.tsx @@ -8,7 +8,8 @@ import Label from '@/components/elements/Label'; import Select from '@/components/elements/Select'; import ModalContext from '@/context/ModalContext'; import React, { useContext, useEffect } from 'react'; -import { boolean, number, object, string } from 'yup'; +import { boolean, number, object, string, setLocale } from 'yup'; +import { pt } from 'yup-locales'; import { Textarea } from '@/components/elements/Input'; import { Button } from '@/components/elements/button/index'; import FormikSwitch from '@/components/elements/FormikSwitch'; @@ -32,22 +33,8 @@ interface Values { continueOnFailure: boolean; } -const schema = object().shape({ - action: string().required().oneOf(['command', 'power', 'backup']), - payload: string().when('action', { - is: (v) => v !== 'backup', - then: string().required('Deve ser fornecida uma carga de trabalho.'), - otherwise: string(), - }), - continueOnFailure: boolean(), - timeOffset: number() - .typeError('O intervalo de tempo deve ser um número válido entre 0 e 900.') - .required('Deve ser fornecido um valor de intervalo de tempo.') - .min(0, 'O intervalo de tempo deve ser de pelo menos 0 segundos.') - .max(900, 'O intervalo de tempo deve ser inferior a 900 segundos.'), -}); - const ActionListener = () => { + setLocale(pt); const [{ value }, { initialValue: initialAction }] = useField('action'); const [, { initialValue: initialPayload }, { setValue, setTouched }] = useField('payload'); @@ -64,6 +51,21 @@ const ActionListener = () => { return null; }; +const schema = object().shape({ + action: string().required().oneOf(['command', 'power', 'backup']), + payload: string().when('action', { + is: (v: string) => v !== 'backup', + then: () => string().required('Deve ser fornecida uma carga de trabalho.'), + otherwise: () => string(), + }), + continueOnFailure: boolean(), + timeOffset: number() + .typeError('O intervalo de tempo deve ser um número válido entre 0 e 900.') + .required('Deve ser fornecido um valor de intervalo de tempo.') + .min(0, 'O intervalo de tempo deve ser de pelo menos 0 segundos.') + .max(900, 'O intervalo de tempo deve ser inferior a 900 segundos.'), +}); + const TaskDetailsModal = ({ schedule, task }: Props) => { const { dismiss } = useContext(ModalContext); const { clearFlashes, addError } = useFlash(); diff --git a/resources/scripts/components/server/settings/ChangeBackgroundBox.tsx b/resources/scripts/components/server/settings/ChangeBackgroundBox.tsx index dcfdbcfa4..2cbcb490e 100644 --- a/resources/scripts/components/server/settings/ChangeBackgroundBox.tsx +++ b/resources/scripts/components/server/settings/ChangeBackgroundBox.tsx @@ -1,6 +1,7 @@ import React from 'react'; import tw from 'twin.macro'; -import { object, string } from 'yup'; +import { object, string, setLocale } from 'yup'; +import { pt } from 'yup-locales'; import { ApplicationStore } from '@/state'; import { httpErrorToHuman } from '@/api/http'; import { ServerContext } from '@/state/server'; @@ -37,6 +38,8 @@ export default () => { const setServer = ServerContext.useStoreActions((actions) => actions.server.setServer); const { addError, clearFlashes } = useStoreActions((actions: Actions) => actions.flashes); + setLocale(pt); + const submit = ({ bg }: Values, { setSubmitting }: FormikHelpers) => { clearFlashes('settings'); changeBackground(server.uuid, bg) diff --git a/resources/scripts/components/server/settings/RenameServerBox.tsx b/resources/scripts/components/server/settings/RenameServerBox.tsx index e6e599e15..82e193e05 100644 --- a/resources/scripts/components/server/settings/RenameServerBox.tsx +++ b/resources/scripts/components/server/settings/RenameServerBox.tsx @@ -1,6 +1,7 @@ import React from 'react'; import tw from 'twin.macro'; -import { object, string } from 'yup'; +import { object, string, setLocale } from 'yup'; +import { pt } from 'yup-locales'; import { ApplicationStore } from '@/state'; import { httpErrorToHuman } from '@/api/http'; import { ServerContext } from '@/state/server'; @@ -47,6 +48,8 @@ export default () => { const setServer = ServerContext.useStoreActions((actions) => actions.server.setServer); const { addError, clearFlashes } = useStoreActions((actions: Actions) => actions.flashes); + setLocale(pt); + const submit = ({ name, description }: Values, { setSubmitting }: FormikHelpers) => { clearFlashes('settings'); renameServer(server.uuid, name, description) diff --git a/resources/scripts/components/server/startup/StartupContainer.tsx b/resources/scripts/components/server/startup/StartupContainer.tsx index 46c6f7db1..0f458b863 100644 --- a/resources/scripts/components/server/startup/StartupContainer.tsx +++ b/resources/scripts/components/server/startup/StartupContainer.tsx @@ -27,7 +27,7 @@ const StartupContainer = () => { invocation: server.data!.invocation, dockerImage: server.data!.dockerImage, }), - isEqual, + isEqual ); const { data, error, isValidating, mutate } = getServerStartup(uuid, { @@ -73,7 +73,7 @@ const StartupContainer = () => { }) .then(() => setLoading(false)); }, - [uuid], + [uuid] ); return !data ? ( diff --git a/resources/scripts/components/server/startup/VariableBox.tsx b/resources/scripts/components/server/startup/VariableBox.tsx index 4bc0bc191..1a27a03e5 100644 --- a/resources/scripts/components/server/startup/VariableBox.tsx +++ b/resources/scripts/components/server/startup/VariableBox.tsx @@ -39,11 +39,11 @@ const VariableBox = ({ variable }: Props) => { ...data, invocation, variables: (data.variables || []).map((v) => - v.envVariable === response.envVariable ? response : v, + v.envVariable === response.envVariable ? response : v ), }), - false, - ), + false + ) ) .catch((error) => { console.error(error); @@ -53,7 +53,7 @@ const VariableBox = ({ variable }: Props) => { }, 500); const useSwitch = variable.rules.some( - (v) => v === 'boolean' || v === 'in:0,1' || v === 'in:1,0' || v === 'in:true,false' || v === 'in:false,true', + (v) => v === 'boolean' || v === 'in:0,1' || v === 'in:1,0' || v === 'in:true,false' || v === 'in:false,true' ); const isStringSwitch = variable.rules.some((v) => v === 'string'); const selectValues = variable.rules.find((v) => v.startsWith('in:'))?.split(',') || []; diff --git a/resources/scripts/components/server/users/EditSubuserModal.tsx b/resources/scripts/components/server/users/EditSubuserModal.tsx index cbf17a765..d3db88b19 100644 --- a/resources/scripts/components/server/users/EditSubuserModal.tsx +++ b/resources/scripts/components/server/users/EditSubuserModal.tsx @@ -2,7 +2,8 @@ import tw from 'twin.macro'; import asModal from '@/hoc/asModal'; import { Form, Formik } from 'formik'; import { ApplicationStore } from '@/state'; -import { array, object, string } from 'yup'; +import { array, object, string, setLocale } from 'yup'; +import { pt } from 'yup-locales'; import Can from '@/components/elements/Can'; import { ServerContext } from '@/state/server'; import Field from '@/components/elements/Field'; @@ -29,11 +30,12 @@ interface Values { } const EditSubuserModal = ({ subuser }: Props) => { + setLocale(pt); const ref = useRef(null); const uuid = ServerContext.useStoreState((state) => state.server.data!.uuid); const appendSubuser = ServerContext.useStoreActions((actions) => actions.subusers.appendSubuser); const { clearFlashes, clearAndAddHttpError } = useStoreActions( - (actions: Actions) => actions.flashes, + (actions: Actions) => actions.flashes ); const { dismiss, setPropOverrides } = useContext(ModalContext); @@ -47,7 +49,7 @@ const EditSubuserModal = ({ subuser }: Props) => { // The permissions that can be modified by this user. const editablePermissions = useDeepCompareMemo(() => { const cleaned = Object.keys(permissions).map((key) => - Object.keys(permissions[key].keys).map((pkey) => `${key}.${pkey}`), + Object.keys(permissions[key].keys).map((pkey) => `${key}.${pkey}`) ); const list: string[] = ([] as string[]).concat.apply([], Object.values(cleaned)); @@ -83,7 +85,7 @@ const EditSubuserModal = ({ subuser }: Props) => { () => () => { clearFlashes('user:edit'); }, - [], + [] ); return ( diff --git a/resources/scripts/components/server/users/PermissionTitleBox.tsx b/resources/scripts/components/server/users/PermissionTitleBox.tsx index f30e91737..589d4abd4 100644 --- a/resources/scripts/components/server/users/PermissionTitleBox.tsx +++ b/resources/scripts/components/server/users/PermissionTitleBox.tsx @@ -23,7 +23,7 @@ const PermissionTitleBox: React.FC = memo(({ isEditable, title, permissio setValue(value.filter((p) => !permissions.includes(p))); } }, - [permissions, value], + [permissions, value] ); return ( diff --git a/resources/scripts/components/server/users/SelectAllPermissions.tsx b/resources/scripts/components/server/users/SelectAllPermissions.tsx index 799e12170..bae989fc3 100644 --- a/resources/scripts/components/server/users/SelectAllPermissions.tsx +++ b/resources/scripts/components/server/users/SelectAllPermissions.tsx @@ -20,7 +20,7 @@ const SelectAllPermissions: React.FC = memo(({ isEditable, permissions }) setValue(value.filter((p) => !permissions.includes(p))); } }, - [permissions, value], + [permissions, value] ); return ( diff --git a/resources/scripts/components/store/CreateContainer.tsx b/resources/scripts/components/store/CreateContainer.tsx index b372f02d7..7298b945e 100644 --- a/resources/scripts/components/store/CreateContainer.tsx +++ b/resources/scripts/components/store/CreateContainer.tsx @@ -2,7 +2,8 @@ import * as Icon from 'react-feather'; import { Form, Formik } from 'formik'; import useFlash from '@/plugins/useFlash'; import { useStoreState } from 'easy-peasy'; -import { number, object, string } from 'yup'; +import { number, object, string, setLocale } from 'yup'; +import { pt } from 'yup-locales'; import Field from '@/components/elements/Field'; import Select from '@/components/elements/Select'; import { Egg, getEggs } from '@/api/store/getEggs'; @@ -61,6 +62,7 @@ export default () => { const [nests, setNests] = useState(); const [node, setNode] = useState(0); const [nodes, setNodes] = useState(); + setLocale(pt); useEffect(() => { clearFlashes(); diff --git a/resources/scripts/components/tickets/ViewContainer.tsx b/resources/scripts/components/tickets/ViewContainer.tsx index f11ae3f48..301288755 100644 --- a/resources/scripts/components/tickets/ViewContainer.tsx +++ b/resources/scripts/components/tickets/ViewContainer.tsx @@ -64,12 +64,12 @@ export default () => { ticket.status === 'pendente' ? 'info' : ticket.status === 'em-andamento' - ? 'info' - : ticket.status === 'não-resolvido' - ? 'danger' - : ticket.status === 'resolvido' - ? 'success' - : 'warning' + ? 'info' + : ticket.status === 'não-resolvido' + ? 'danger' + : ticket.status === 'resolvido' + ? 'success' + : 'warning' } className={'my-4 w-full'} > @@ -105,7 +105,7 @@ export default () => { "'dia' d 'de' MMMM yyyy', ás' HH:mm:ss", { locale: ptBR, - }, + } )}

)} diff --git a/resources/scripts/components/tickets/forms/NewMessageDialog.tsx b/resources/scripts/components/tickets/forms/NewMessageDialog.tsx index f46f522c9..66ddc7254 100644 --- a/resources/scripts/components/tickets/forms/NewMessageDialog.tsx +++ b/resources/scripts/components/tickets/forms/NewMessageDialog.tsx @@ -1,6 +1,7 @@ import React from 'react'; import tw from 'twin.macro'; -import { object, string } from 'yup'; +import { object, string, setLocale } from 'yup'; +import { pt } from 'yup-locales'; import styled from 'styled-components'; import useFlash from '@/plugins/useFlash'; import { useRouteMatch } from 'react-router'; @@ -27,6 +28,8 @@ export default ({ open, onClose }: DialogProps) => { const { addError, clearFlashes, addFlash } = useFlash(); + setLocale(pt); + const submit = (values: Values, { setSubmitting, resetForm }: FormikHelpers) => { clearFlashes('tickets'); diff --git a/resources/scripts/components/tickets/forms/NewTicketDialog.tsx b/resources/scripts/components/tickets/forms/NewTicketDialog.tsx index 5c5a10805..64e7461e1 100644 --- a/resources/scripts/components/tickets/forms/NewTicketDialog.tsx +++ b/resources/scripts/components/tickets/forms/NewTicketDialog.tsx @@ -1,6 +1,7 @@ import React from 'react'; import tw from 'twin.macro'; -import { object, string } from 'yup'; +import { object, string, setLocale } from 'yup'; +import { pt } from 'yup-locales'; import styled from 'styled-components'; import useFlash from '@/plugins/useFlash'; import { httpErrorToHuman } from '@/api/http'; @@ -24,6 +25,8 @@ const CustomTextarea = styled(Textarea)` export default ({ open, onClose }: DialogProps) => { const { addError, clearFlashes } = useFlash(); + setLocale(pt); + const submit = (values: Values, { setSubmitting, resetForm }: FormikHelpers) => { clearFlashes('tickets'); diff --git a/resources/scripts/hoc/asDialog.tsx b/resources/scripts/hoc/asDialog.tsx index 9d4bc2f31..0be5dbe65 100644 --- a/resources/scripts/hoc/asDialog.tsx +++ b/resources/scripts/hoc/asDialog.tsx @@ -2,7 +2,7 @@ import React, { useState } from 'react'; import { Dialog, DialogProps, DialogWrapperContext, WrapperProps } from '@/components/elements/dialog'; function asDialog( - initialProps?: WrapperProps, + initialProps?: WrapperProps // eslint-disable-next-line @typescript-eslint/ban-types ):

(C: React.ComponentType

) => React.FunctionComponent

{ return function (Component) { diff --git a/resources/scripts/hoc/asModal.tsx b/resources/scripts/hoc/asModal.tsx index 0c05af683..6b9d633ae 100644 --- a/resources/scripts/hoc/asModal.tsx +++ b/resources/scripts/hoc/asModal.tsx @@ -20,7 +20,7 @@ type ExtendedComponentType = (C: React.ComponentType) => React.ComponentTy // eslint-disable-next-line @typescript-eslint/ban-types function asModal

( - modalProps?: SettableModalProps | ((props: P) => SettableModalProps), + modalProps?: SettableModalProps | ((props: P) => SettableModalProps) ): ExtendedComponentType

{ return function (Component) { return class extends React.PureComponent

{ diff --git a/storage/app/.gitignore b/storage/app/.gitignore old mode 100755 new mode 100644 diff --git a/storage/app/packs/.githold b/storage/app/packs/.githold old mode 100755 new mode 100644 diff --git a/storage/clockwork/.gitignore b/storage/clockwork/.gitignore old mode 100755 new mode 100644 diff --git a/storage/debugbar/.gitignore b/storage/debugbar/.gitignore old mode 100755 new mode 100644 diff --git a/storage/framework/.gitignore b/storage/framework/.gitignore old mode 100755 new mode 100644 diff --git a/storage/framework/cache/.gitignore b/storage/framework/cache/.gitignore old mode 100755 new mode 100644 diff --git a/storage/framework/cache/data/.gitignore b/storage/framework/cache/data/.gitignore old mode 100755 new mode 100644 diff --git a/storage/framework/sessions/.gitignore b/storage/framework/sessions/.gitignore old mode 100755 new mode 100644 diff --git a/storage/framework/views/.gitignore b/storage/framework/views/.gitignore old mode 100755 new mode 100644 diff --git a/tests/Traits/Http/IntegrationJsonRequestAssertions.php b/tests/Traits/Http/IntegrationJsonRequestAssertions.php index 4583d5312..11d46a993 100644 --- a/tests/Traits/Http/IntegrationJsonRequestAssertions.php +++ b/tests/Traits/Http/IntegrationJsonRequestAssertions.php @@ -20,7 +20,7 @@ public function assertNotFoundJson(TestResponse $response): void [ 'code' => 'NotFoundHttpException', 'status' => '404', - 'detail' => 'The requested resource could not be found on the server.', + 'detail' => 'O recurso solicitado não pôde ser encontrado no servidor.', ], ], ], true); @@ -39,7 +39,7 @@ public function assertAccessDeniedJson(TestResponse $response): void [ 'code' => 'AccessDeniedHttpException', 'status' => '403', - 'detail' => 'This action is unauthorized.', + 'detail' => 'Essa ação não está autorizada.', ], ], ], true); diff --git a/tests/Traits/Http/RequestMockHelpers.php b/tests/Traits/Http/RequestMockHelpers.php index aa3607e51..2115fded5 100644 --- a/tests/Traits/Http/RequestMockHelpers.php +++ b/tests/Traits/Http/RequestMockHelpers.php @@ -67,7 +67,7 @@ protected function buildRequestMock(): void { $this->request = m::mock($this->requestMockClass); if (!$this->request instanceof Request) { - throw new \InvalidArgumentException('Request mock class must be an instance of ' . Request::class . ' when mocked.'); + throw new \InvalidArgumentException('A classe mock da requisição precisa ser simulada utilizando o método' . Request::class .); } $this->request->attributes = new ParameterBag(); diff --git a/yarn.lock b/yarn.lock index 84aed0845..8bcfd65b9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -931,7 +931,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-transform-typescript" "^7.12.1" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2", "@babel/runtime@^7.9.6": +"@babel/runtime@^7.1.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.4.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.18.3" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.3.tgz#c7b654b57f6f63cf7f8b418ac9ca04408c4579f4" integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug== @@ -4395,11 +4395,6 @@ flush-write-stream@^1.0.0: inherits "^2.0.1" readable-stream "^2.0.4" -fn-name@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-3.0.0.tgz#0596707f635929634d791f452309ab41558e3c5c" - integrity sha512-eNMNr5exLoavuAMhIUVsOKF79SWd/zG104ef6sxBTSw+cZc6BXdQXDvYcGvp0VbxVVSp1XDUNoz7mg1xMtSznA== - follow-redirects@^1.0.0, follow-redirects@^1.14.9: version "1.15.2" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" @@ -6056,7 +6051,7 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lodash-es@^4.17.11, lodash-es@^4.17.14: +lodash-es@^4.17.14: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" @@ -7446,10 +7441,10 @@ prop-types@^15.5.0, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, object-assign "^4.1.1" react-is "^16.13.1" -property-expr@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.2.tgz#fff2a43919135553a3bc2fdd94bdb841965b2330" - integrity sha512-bc/5ggaYZxNkFKj374aLbEDqVADdYaLcFo8XBkishUWbaAdjlphaBFns9TvRA2pUseVL/wMFmui9X3IdNDU37g== +property-expr@^2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.6.tgz#f77bc00d5928a6c748414ad12882e83f24aec1e8" + integrity sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA== proxy-addr@~2.0.7: version "2.0.7" @@ -8778,11 +8773,6 @@ symbol-observable@^2.0.3: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-2.0.3.tgz#5b521d3d07a43c351055fa43b8355b62d33fd16a" integrity sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA== -synchronous-promise@^2.0.10: - version "2.0.13" - resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.13.tgz#9d8c165ddee69c5a6542862b405bc50095926702" - integrity sha512-R9N6uDkVsghHePKh1TEqbnLddO2IY25OcsksyFp/qBe7XYd0PVbKEWxhcdMhpLzE1I6skj5l4aEZ3CRxcbArlA== - tailwindcss@^2.2.7: version "2.2.19" resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-2.2.19.tgz#540e464832cd462bb9649c1484b0a38315c2653c" @@ -8973,6 +8963,11 @@ timsort@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" +tiny-case@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-case/-/tiny-case-1.0.3.tgz#d980d66bc72b5d5a9ca86fb7c9ffdb9c898ddd03" + integrity sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q== + tiny-invariant@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.4.tgz#346b5415fd93cb696b0c4e8a96697ff590f92463" @@ -9142,6 +9137,11 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== +type-fest@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== + type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -9759,15 +9759,17 @@ yocto-queue@^0.1.0: resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -yup@^0.29.1: - version "0.29.1" - resolved "https://registry.yarnpkg.com/yup/-/yup-0.29.1.tgz#35d25aab470a0c3950f66040ba0ff4b1b6efe0d9" - integrity sha512-U7mPIbgfQWI6M3hZCJdGFrr+U0laG28FxMAKIgNvgl7OtyYuUoc4uy9qCWYHZjh49b8T7Ug8NNDdiMIEytcXrQ== +yup-locales@^1.2.21: + version "1.2.21" + resolved "https://registry.yarnpkg.com/yup-locales/-/yup-locales-1.2.21.tgz#e4d77c43322b58ad83cc4ddde6ac2fdca60d0f36" + integrity sha512-yEDi4eeNKdYH9Gi2H6Xtpi7z0u4i8Mm5g2rwLMrkCTaiXBkbSOW938J71ZArGS4R7rV0tPBlk0Iner5OaVhqVg== + +yup@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/yup/-/yup-1.3.3.tgz#d2f6020ad1679754c5f8178a29243d5447dead04" + integrity sha512-v8QwZSsHH2K3/G9WSkp6mZKO+hugKT1EmnMqLNUcfu51HU9MDyhlETT/JgtzprnrnQHPWsjc6MUDMBp/l9fNnw== dependencies: - "@babel/runtime" "^7.9.6" - fn-name "~3.0.0" - lodash "^4.17.15" - lodash-es "^4.17.11" - property-expr "^2.0.2" - synchronous-promise "^2.0.10" - toposort "^2.0.2" \ No newline at end of file + property-expr "^2.0.5" + tiny-case "^1.0.3" + toposort "^2.0.2" + type-fest "^2.19.0"