From 343667dc6d674dee81b0e4574ac4ec7354fa54b6 Mon Sep 17 00:00:00 2001 From: mtguerson Date: Wed, 15 May 2024 17:38:27 -0400 Subject: [PATCH] wip: NaN errr --- frontend/package.json | 8 +- frontend/src/Router/index.tsx | 2 +- frontend/src/app/entities/BankAccount.ts | 8 ++ .../services/bankAccountsService/create.ts | 6 +- .../services/bankAccountsService/getAll.ts | 10 +- .../app/services/bankAccountsService/index.ts | 2 + .../services/bankAccountsService/update.ts | 14 +++ frontend/src/app/services/httpClient.ts | 2 +- .../src/app/utils/currencyStringToNumber.ts | 6 +- frontend/src/view/components/Button.tsx | 10 +- .../src/view/components/InputCurrency.tsx | 53 ++++++--- .../components/Accounts/AccountCard.tsx | 16 +-- .../Dashboard/components/Accounts/index.tsx | 10 +- .../Accounts/useAccountsController.ts | 9 +- .../components/DashboardContext/index.tsx | 91 +++++++++------ frontend/src/view/pages/Dashboard/index.tsx | 42 ++++--- .../modals/EditAccountModal/index.tsx | 104 ++++++++++++++++++ .../useEditAccountModalController.ts | 75 +++++++++++++ .../modals/NewAccountModal/index.tsx | 57 +++++----- .../useNewAccountModalController.ts | 69 ++++++------ frontend/src/view/pages/Login/index.tsx | 4 +- .../view/pages/Login/useLoginController.ts | 4 +- frontend/src/view/pages/Register/index.tsx | 4 +- .../pages/Register/useRegisterController.ts | 6 +- frontend/yarn.lock | 54 ++++----- 25 files changed, 460 insertions(+), 206 deletions(-) create mode 100644 frontend/src/app/entities/BankAccount.ts create mode 100644 frontend/src/app/services/bankAccountsService/update.ts create mode 100644 frontend/src/view/pages/Dashboard/modals/EditAccountModal/index.tsx create mode 100644 frontend/src/view/pages/Dashboard/modals/EditAccountModal/useEditAccountModalController.ts diff --git a/frontend/package.json b/frontend/package.json index 774fb48..08e4a5e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -17,21 +17,21 @@ "@radix-ui/react-icons": "^1.3.0", "@radix-ui/react-popover": "^1.0.7", "@radix-ui/react-select": "^2.0.0", - "@tanstack/react-query": "^5.29.0", + "@tanstack/react-query": "4.32.1", "@tanstack/react-query-devtools": "^5.29.2", "axios": "^1.6.8", "clsx": "^2.1.0", "date-fns": "^3.6.0", "react": "^18.2.0", + "react-currency-input-field": "3.6.11", "react-day-picker": "^8.10.1", "react-dom": "^18.2.0", - "react-hook-form": "^7.51.2", + "react-hook-form": "7.45.2", "react-hot-toast": "^2.4.1", - "react-number-format": "^5.3.4", "react-router-dom": "^6.22.3", "swiper": "^11.1.1", "tailwind-merge": "^2.2.2", - "zod": "^3.22.4" + "zod": "3.21.4" }, "devDependencies": { "@types/react": "^18.2.66", diff --git a/frontend/src/Router/index.tsx b/frontend/src/Router/index.tsx index bac10d8..4cefb89 100644 --- a/frontend/src/Router/index.tsx +++ b/frontend/src/Router/index.tsx @@ -22,4 +22,4 @@ export function Router() { ); -} \ No newline at end of file +} diff --git a/frontend/src/app/entities/BankAccount.ts b/frontend/src/app/entities/BankAccount.ts new file mode 100644 index 0000000..8fb4b31 --- /dev/null +++ b/frontend/src/app/entities/BankAccount.ts @@ -0,0 +1,8 @@ +export interface BankAccount { + id: string; + name: string; + initialBalance: number; + type: 'CHECKING' | 'INVESTMENT' | 'CASH'; + color: string; + currentBalance: number; +} diff --git a/frontend/src/app/services/bankAccountsService/create.ts b/frontend/src/app/services/bankAccountsService/create.ts index f34d49b..f79c509 100644 --- a/frontend/src/app/services/bankAccountsService/create.ts +++ b/frontend/src/app/services/bankAccountsService/create.ts @@ -1,13 +1,13 @@ -import { httpClient } from "../httpClient"; +import { httpClient } from '../httpClient' -export interface BankAccountParams { +export interface CreateBankAccountParams { name: string; initialBalance: number; color: string; type: 'CHECKING' | 'INVESTMENT' | 'CASH'; } -export async function create(params: BankAccountParams) { +export async function create(params: CreateBankAccountParams) { const { data } = await httpClient.post('/bank-accounts', params); return data; diff --git a/frontend/src/app/services/bankAccountsService/getAll.ts b/frontend/src/app/services/bankAccountsService/getAll.ts index 5a1beb4..501c423 100644 --- a/frontend/src/app/services/bankAccountsService/getAll.ts +++ b/frontend/src/app/services/bankAccountsService/getAll.ts @@ -1,13 +1,7 @@ +import { BankAccount } from "../../entities/BankAccount"; import { httpClient } from "../httpClient"; -type BankAccountsResponse = Array<{ - id: string; - name: string; - initialBalance: number; - type: 'CHECKING' | 'INVESTMENT' | 'CASH'; - color: string; - currentBalance: number; -}>; +type BankAccountsResponse = Array; export async function getAll() { const { data } = await httpClient.get('/bank-accounts'); diff --git a/frontend/src/app/services/bankAccountsService/index.ts b/frontend/src/app/services/bankAccountsService/index.ts index e499556..fe5987c 100644 --- a/frontend/src/app/services/bankAccountsService/index.ts +++ b/frontend/src/app/services/bankAccountsService/index.ts @@ -1,7 +1,9 @@ import { create } from "./create"; import { getAll } from "./getAll"; +import { update } from "./update"; export const bankAccountsService = { create, getAll, + update, }; diff --git a/frontend/src/app/services/bankAccountsService/update.ts b/frontend/src/app/services/bankAccountsService/update.ts new file mode 100644 index 0000000..b330640 --- /dev/null +++ b/frontend/src/app/services/bankAccountsService/update.ts @@ -0,0 +1,14 @@ +import { httpClient } from '../httpClient' + +export interface UpdateBankAccountParams { + name: string; + initialBalance: number; + color: string; + type: 'CHECKING' | 'INVESTMENT' | 'CASH'; +} + +export async function update(params: UpdateBankAccountParams) { + const { data } = await httpClient.put('/bank-accounts', params) + + return data +} diff --git a/frontend/src/app/services/httpClient.ts b/frontend/src/app/services/httpClient.ts index d009e4c..0cd4a02 100644 --- a/frontend/src/app/services/httpClient.ts +++ b/frontend/src/app/services/httpClient.ts @@ -6,7 +6,7 @@ export const httpClient = axios.create({ baseURL: import.meta.env.VITE_API_URL, }); -httpClient.interceptors.request.use(config => { +httpClient.interceptors.request.use(async config => { const accessToken = localStorage.getItem(localStorageKeys.ACCESS_TOKEN); if (accessToken) { diff --git a/frontend/src/app/utils/currencyStringToNumber.ts b/frontend/src/app/utils/currencyStringToNumber.ts index 0e547ef..caba20c 100644 --- a/frontend/src/app/utils/currencyStringToNumber.ts +++ b/frontend/src/app/utils/currencyStringToNumber.ts @@ -1,4 +1,8 @@ -export function currencyStringToNumber(value: string) { +export function currencyStringToNumber(value: string | number) { + if (typeof value === 'number') { + return value; + } + const sanitizedString = value.replace(/\./g, '').replace(',', '.'); return Number(sanitizedString); diff --git a/frontend/src/view/components/Button.tsx b/frontend/src/view/components/Button.tsx index caac580..0e1192c 100644 --- a/frontend/src/view/components/Button.tsx +++ b/frontend/src/view/components/Button.tsx @@ -3,21 +3,21 @@ import { cn } from "../../app/utils/cn"; import Spinner from "./Spinner"; interface ButtonProps extends ComponentProps<'button'> { - isPending?: boolean; + isLoading?: boolean; } -export function Button({ className, isPending, disabled, children, ...props }: ButtonProps) { +export function Button({ className, isLoading: isLoading, disabled, children, ...props }: ButtonProps) { return ( ); } diff --git a/frontend/src/view/components/InputCurrency.tsx b/frontend/src/view/components/InputCurrency.tsx index 61daf62..1f6139f 100644 --- a/frontend/src/view/components/InputCurrency.tsx +++ b/frontend/src/view/components/InputCurrency.tsx @@ -1,33 +1,56 @@ -import { CrossCircledIcon } from "@radix-ui/react-icons"; -import { NumericFormat } from "react-number-format"; -import { cn } from "../../app/utils/cn"; +import { CrossCircledIcon } from '@radix-ui/react-icons' +import { cn } from '../../app/utils/cn' +import CurrencyInput from 'react-currency-input-field' interface InputCurrencyProps { - error?: string; - value?: string | number; - onChange?(value: string): void; + error?: string + value?: string | number + defaultValue: string | number + className?: string + onChange(value?: string): void } -export function InputCurrency({ error, value, onChange }: InputCurrencyProps) { +export function InputCurrency({ + error, value, onChange, className, defaultValue +}: InputCurrencyProps) { + + function handleTransform(value: string) { + return value.length === 0 ? '0' : value + } + return ( -
- + onChange?.(event.target.value)} + defaultValue={defaultValue} + onValueChange={(value) => onChange(value)} + transformRawValue={handleTransform} className={cn( - "text-gray-800 text-[32px] font-bold tracking-[-1px] outline-none w-full", - error && "text-red-900" + 'w-full text-gray-800 text-[32px] font-bold tracking-[-1px] outline-none', + error && 'text-red-900', + className )} /> {error && ( -
+
{error}
)}
- ); + ) +} + +InputCurrency.defaultProps = { + value: null, + defaultValue: null, + error: '', + className: '', + onChange: null, } diff --git a/frontend/src/view/pages/Dashboard/components/Accounts/AccountCard.tsx b/frontend/src/view/pages/Dashboard/components/Accounts/AccountCard.tsx index 228ebc4..e282a2b 100644 --- a/frontend/src/view/pages/Dashboard/components/Accounts/AccountCard.tsx +++ b/frontend/src/view/pages/Dashboard/components/Accounts/AccountCard.tsx @@ -1,21 +1,23 @@ +import { BankAccount } from "../../../../../app/entities/BankAccount"; import { cn } from "../../../../../app/utils/cn"; import { formatCurrency } from "../../../../../app/utils/formatCurrency"; import { BankAccountTypeIcon } from "../../../../components/icons/BankAccountTypeIcon"; import { useDashboard } from "../DashboardContext/useDashboard"; interface AccountCardProps { - color: string; - name: string; - balance: number; - type: 'CASH' | 'CHECKING' | 'INVESTMENT' + data: BankAccount; } -export function AccountCard({ color, name, balance, type }: AccountCardProps) { - const { areValuesVisible } = useDashboard(); +export function AccountCard({ data }: AccountCardProps) { + const { name, color, currentBalance, type } = data; + + const { areValuesVisible, openEditAccountModal } = useDashboard(); return (
openEditAccountModal(data)} >
@@ -30,7 +32,7 @@ export function AccountCard({ color, name, balance, type }: AccountCardProps) { "text-gray-800 font-medium tracking-[-0.5px] block", !areValuesVisible && "blur-sm" )}> - {formatCurrency(balance)} + {formatCurrency(currentBalance)} Saldo atual diff --git a/frontend/src/view/pages/Dashboard/components/Accounts/index.tsx b/frontend/src/view/pages/Dashboard/components/Accounts/index.tsx index e9e9a1d..f1e7075 100644 --- a/frontend/src/view/pages/Dashboard/components/Accounts/index.tsx +++ b/frontend/src/view/pages/Dashboard/components/Accounts/index.tsx @@ -20,6 +20,7 @@ export function Accounts() { isLoading, accounts, openNewAccountModal, + currentBalance } = UseAccountsController(); return ( @@ -39,7 +40,7 @@ export function Accounts() { "text-2xl tracking-[-1px] text-white", !areValuesVisible && "blur-md" )}> - {formatCurrency(1000.23)} + {formatCurrency(currentBalance)} + +
- ); + ) } diff --git a/frontend/src/view/pages/Dashboard/modals/NewAccountModal/useNewAccountModalController.ts b/frontend/src/view/pages/Dashboard/modals/NewAccountModal/useNewAccountModalController.ts index d9d8dea..6c862f8 100644 --- a/frontend/src/view/pages/Dashboard/modals/NewAccountModal/useNewAccountModalController.ts +++ b/frontend/src/view/pages/Dashboard/modals/NewAccountModal/useNewAccountModalController.ts @@ -1,69 +1,66 @@ -import { z } from "zod"; -import { useDashboard } from "../../components/DashboardContext/useDashboard"; -import { useForm } from "react-hook-form"; -import { zodResolver } from "@hookform/resolvers/zod"; -import { useMutation, useQueryClient } from "@tanstack/react-query"; -import { bankAccountsService } from "../../../../../app/services/bankAccountsService"; -import { BankAccountParams } from "../../../../../app/services/bankAccountsService/create"; -import { currencyStringToNumber } from "../../../../../app/utils/currencyStringToNumber"; -import toast from "react-hot-toast"; +import { z } from 'zod' +import { useDashboard } from '../../components/DashboardContext/useDashboard' +import { useForm } from 'react-hook-form' +import { zodResolver } from '@hookform/resolvers/zod' +import { useMutation, useQueryClient } from '@tanstack/react-query' +import { bankAccountsService } from '../../../../../app/services/bankAccountsService' +import toast from 'react-hot-toast' +import { currencyStringToNumber } from '../../../../../app/utils/currencyStringToNumber' const schema = z.object({ - initialBalance: z.string().min(1, "Saldo inicial é obrigatório"), - name: z.string().min(1, "Nome da conta é obrigatório"), + initialBalance: z.string().nonempty('Saldo inicial é obrigatório'), + name: z.string().nonempty('Nome é obrigatório'), type: z.enum(['CHECKING', 'INVESTMENT', 'CASH']), - color: z.string().min(1, "Cor é obrigatória"), -}); + color: z.string().nonempty('Cor é obrigatória') +}) -type FormData = z.infer; +type FormData = z.infer export function useNewAccountModalController() { const { isNewAccountModalOpen, - closeNewAccountModal, - } = useDashboard(); + closeNewAccountModal + } = useDashboard() const { register, handleSubmit: hookFormSubmit, formState: { errors }, control, - reset, + reset } = useForm({ resolver: zodResolver(schema), - }); - - const queryClient = useQueryClient(); + defaultValues: { + initialBalance: '0' + } + }) - const { mutateAsync, isPending } = useMutation({ - mutationFn: async (data: BankAccountParams) => { - return bankAccountsService.create(data); - }, - }); + const queryClient = useQueryClient() + const { isLoading, mutateAsync } = useMutation(bankAccountsService.create) const handleSubmit = hookFormSubmit(async (data) => { try { await mutateAsync({ ...data, - initialBalance: currencyStringToNumber(data.initialBalance), - }); + initialBalance: currencyStringToNumber(data.initialBalance) + }) - queryClient.invalidateQueries({ queryKey: ['bankAccounts'] }); - toast.success('Conta cadastrada com sucesso!'); - closeNewAccountModal(); - reset(); + queryClient.invalidateQueries({ queryKey: ['bankAccounts'] }) + toast.success('Conta cadastrada com sucesso!') + closeNewAccountModal() + reset() } catch { - toast.error('Erro ao cadastrar a conta!'); + toast.error('Erro ao cadastrar a conta!') } - }); + }) return { isNewAccountModalOpen, closeNewAccountModal, register, + control, errors, handleSubmit, - control, - isPending, - }; + isLoading + } } diff --git a/frontend/src/view/pages/Login/index.tsx b/frontend/src/view/pages/Login/index.tsx index 673bd26..2c76951 100644 --- a/frontend/src/view/pages/Login/index.tsx +++ b/frontend/src/view/pages/Login/index.tsx @@ -4,7 +4,7 @@ import { Button } from "../../components/Button"; import { useLoginController } from "./useLoginController"; export function Login() { - const { handleSubmit, register, errors, isPending } = useLoginController(); + const { handleSubmit, register, errors, isLoading } = useLoginController(); return ( <> @@ -41,7 +41,7 @@ export function Login() { {...register("password")} /> - diff --git a/frontend/src/view/pages/Login/useLoginController.ts b/frontend/src/view/pages/Login/useLoginController.ts index 7c83d38..5dfe52a 100644 --- a/frontend/src/view/pages/Login/useLoginController.ts +++ b/frontend/src/view/pages/Login/useLoginController.ts @@ -23,7 +23,7 @@ export function useLoginController() { resolver: zodResolver(schema), }); - const { mutateAsync, isPending } = useMutation({ + const { mutateAsync, isLoading } = useMutation({ mutationFn: async (data: SigninParams) => { return authService.signin(data); }, @@ -41,5 +41,5 @@ export function useLoginController() { } }); - return { handleSubmit, register, errors, isPending }; + return { handleSubmit, register, errors, isLoading }; } diff --git a/frontend/src/view/pages/Register/index.tsx b/frontend/src/view/pages/Register/index.tsx index 62468db..8a9d2f9 100644 --- a/frontend/src/view/pages/Register/index.tsx +++ b/frontend/src/view/pages/Register/index.tsx @@ -4,7 +4,7 @@ import { Button } from "../../components/Button"; import { useRegisterController } from "./useRegisterController"; export function Register() { - const { errors, handleSubmit, register, isPending } = useRegisterController(); + const { errors, handleSubmit, register, isLoading } = useRegisterController(); return ( <>
@@ -48,7 +48,7 @@ export function Register() { {...register("password")} /> - diff --git a/frontend/src/view/pages/Register/useRegisterController.ts b/frontend/src/view/pages/Register/useRegisterController.ts index 01f1b19..bf8b9a7 100644 --- a/frontend/src/view/pages/Register/useRegisterController.ts +++ b/frontend/src/view/pages/Register/useRegisterController.ts @@ -25,7 +25,7 @@ export function useRegisterController() { resolver: zodResolver(schema), }); - const { mutateAsync, isPending } = useMutation({ + const { mutateAsync, isLoading } = useMutation({ mutationFn: async (data: SignupParams) => { return authService.signup(data); }, @@ -43,7 +43,7 @@ export function useRegisterController() { } }); - console.log({ isPending }); + console.log({ isLoading }); - return { register, errors, handleSubmit, isPending }; + return { register, errors, handleSubmit, isLoading }; } diff --git a/frontend/yarn.lock b/frontend/yarn.lock index af6ca7a..06fb515 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -796,10 +796,10 @@ dependencies: "@swc/counter" "^0.1.3" -"@tanstack/query-core@5.29.0": - version "5.29.0" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.29.0.tgz#d0b3d12c07d5a47f42ab0c1ed4f317106f3d4b20" - integrity sha512-WgPTRs58hm9CMzEr5jpISe8HXa3qKQ8CxewdYZeVnA54JrPY9B1CZiwsCoLpLkf0dGRZq+LcX5OiJb0bEsOFww== +"@tanstack/query-core@4.32.1": + version "4.32.1" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-4.32.1.tgz#6e364c33433b61f4dcef003725d4208e42b23860" + integrity sha512-VEAGHboOFWN/bvf/7cCoeLQfld0AA8n0V/kfc77W+FvxnnSwJufEh6gfjqpX5bRE/DEYfYDYdNtuL3KM+lIs8Q== "@tanstack/query-devtools@5.28.10": version "5.28.10" @@ -813,12 +813,13 @@ dependencies: "@tanstack/query-devtools" "5.28.10" -"@tanstack/react-query@^5.29.0": - version "5.29.0" - resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-5.29.0.tgz#42b3a2de4ed1d63666f0af04392a34b5e70d49c0" - integrity sha512-yxlhHB73jaBla6h5B6zPaGmQjokkzAhMHN4veotkPNiQ3Ac/mCxgABRZPsJJrgCTvhpcncBZcDBFxaR2B37vug== +"@tanstack/react-query@4.32.1": + version "4.32.1" + resolved "https://registry.yarnpkg.com/@tanstack/react-query/-/react-query-4.32.1.tgz#8ba6ab4e0ee4513a0fe06f4452f1b400eb4f91fb" + integrity sha512-lPTfOq6bR6DorPaS018gTMd3zs8r06tlERiVY6BRP9SnDkkl4ckqeANava/jPLWrSZP+EA15loQUTmvZs6k2GA== dependencies: - "@tanstack/query-core" "5.29.0" + "@tanstack/query-core" "4.32.1" + use-sync-external-store "^1.2.0" "@tanstack/react-virtual@^3.0.0-beta.60": version "3.3.0" @@ -2660,7 +2661,7 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -2684,6 +2685,11 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +react-currency-input-field@3.6.11: + version "3.6.11" + resolved "https://registry.yarnpkg.com/react-currency-input-field/-/react-currency-input-field-3.6.11.tgz#5e0c94b85c78c51ddfa33e4b60608accfa123366" + integrity sha512-M9vOx1eaioSaYWirm7W2WSBi4bpLg+LK4Gf7C1kNhy6MvoSoOzd0mYZPxA78OC9UBIQ2nM080Wu9D1CwTY6n3w== + react-day-picker@^8.10.1: version "8.10.1" resolved "https://registry.yarnpkg.com/react-day-picker/-/react-day-picker-8.10.1.tgz#4762ec298865919b93ec09ba69621580835b8e80" @@ -2697,10 +2703,10 @@ react-dom@^18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" -react-hook-form@^7.51.2: - version "7.51.2" - resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.51.2.tgz#79f7f72ee217c5114ff831012d1a7ec344096e7f" - integrity sha512-y++lwaWjtzDt/XNnyGDQy6goHskFualmDlf+jzEZvjvz6KWDf7EboL7pUvRCzPTJd0EOPpdekYaQLEvvG6m6HA== +react-hook-form@7.45.2: + version "7.45.2" + resolved "https://registry.yarnpkg.com/react-hook-form/-/react-hook-form-7.45.2.tgz#c757f3d5e633ccb186443d57c10fc511df35721a" + integrity sha512-9s45OdTaKN+4NSTbXVqeDITd/nwIg++nxJGL8+OD5uf1DxvhsXQ641kaYHk5K28cpIOTYm71O/fYk7rFaygb3A== react-hot-toast@^2.4.1: version "2.4.1" @@ -2714,13 +2720,6 @@ react-is@^16.13.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-number-format@^5.3.4: - version "5.3.4" - resolved "https://registry.yarnpkg.com/react-number-format/-/react-number-format-5.3.4.tgz#4780522ba1fdaff20aaa0732716490c6758b8557" - integrity sha512-2hHN5mbLuCDUx19bv0Q8wet67QqYK6xmtLQeY5xx+h7UXiMmRtaCwqko4mMPoKXLc6xAzwRrutg8XbTRlsfjRg== - dependencies: - prop-types "^15.7.2" - react-remove-scroll-bar@^2.3.3: version "2.3.6" resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz#3e585e9d163be84a010180b18721e851ac81a29c" @@ -3282,6 +3281,11 @@ use-sidecar@^1.1.2: detect-node-es "^1.1.0" tslib "^2.0.0" +use-sync-external-store@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz#c3b6390f3a30eba13200d2302dcdf1e7b57b2ef9" + integrity sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw== + util-deprecate@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -3393,7 +3397,7 @@ 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== -zod@^3.22.4: - version "3.22.4" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" - integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== +zod@3.21.4: + version "3.21.4" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.21.4.tgz#10882231d992519f0a10b5dd58a38c9dabbb64db" + integrity sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==