From c213fb17aefa88125f849c28dff6fada69c35463 Mon Sep 17 00:00:00 2001 From: mpblocky <185767042+mpblocky@users.noreply.github.com> Date: Wed, 5 Mar 2025 14:03:24 +0100 Subject: [PATCH 1/7] chore: move operator sign up related code to sign up module --- .../src/modules/operator/hooks/index.ts | 3 +++ .../add-keys/edit-existing-keys-form.tsx | 11 ++++------ .../add-keys/edit-pending-keys-form.tsx | 11 ++++------ .../add-keys/existing-keys-form.tsx | 16 +++++++-------- .../components}/add-keys/existing-keys.tsx | 11 ++++------ .../operator/components/add-keys/index.ts | 2 ++ .../add-keys/pending-keys-form.tsx | 16 +++++++-------- .../components}/add-keys/sort-form.ts | 3 ++- .../components}/add-stake/buttons.tsx | 0 .../operator/components/add-stake/index.ts | 2 ++ .../components}/add-stake/stake-form.tsx | 14 ++++++------- .../modules/signup/operator/hooks/index.ts | 6 ++++++ .../hooks/use-add-stake-mutation-state.ts | 2 +- .../operator/hooks/use-add-stake.ts | 2 +- .../operator/hooks/use-edit-existing-keys.ts | 0 .../operator/hooks/use-get-stacked-amount.ts | 0 .../hooks/use-human-token-decimals.ts | 0 .../operator/hooks/use-web3-signup.ts | 0 .../src/modules/signup/operator/index.ts | 1 + .../operator/views}/add-keys.page.tsx | 20 +++++++++++-------- .../operator/views}/add-stake.page.tsx | 13 ++++++------ .../operator/views}/connect-wallet.page.tsx | 0 .../edit-existing-keys-success.page.tsx | 2 +- .../modules/signup/operator/views/index.ts | 5 +++++ .../operator/views}/set-up-operator.page.tsx | 0 .../human-app/frontend/src/router/routes.tsx | 12 ++++++----- 26 files changed, 84 insertions(+), 68 deletions(-) create mode 100644 packages/apps/human-app/frontend/src/modules/operator/hooks/index.ts rename packages/apps/human-app/frontend/src/modules/{operator/components/sign-up => signup/operator/components}/add-keys/edit-existing-keys-form.tsx (96%) rename packages/apps/human-app/frontend/src/modules/{operator/components/sign-up => signup/operator/components}/add-keys/edit-pending-keys-form.tsx (95%) rename packages/apps/human-app/frontend/src/modules/{operator/components/sign-up => signup/operator/components}/add-keys/existing-keys-form.tsx (87%) rename packages/apps/human-app/frontend/src/modules/{operator/components/sign-up => signup/operator/components}/add-keys/existing-keys.tsx (97%) create mode 100644 packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/index.ts rename packages/apps/human-app/frontend/src/modules/{operator/components/sign-up => signup/operator/components}/add-keys/pending-keys-form.tsx (87%) rename packages/apps/human-app/frontend/src/modules/{operator/components/sign-up => signup/operator/components}/add-keys/sort-form.ts (89%) rename packages/apps/human-app/frontend/src/modules/{operator/components/sign-up => signup/operator/components}/add-stake/buttons.tsx (100%) create mode 100644 packages/apps/human-app/frontend/src/modules/signup/operator/components/add-stake/index.ts rename packages/apps/human-app/frontend/src/modules/{operator/components/sign-up => signup/operator/components}/add-stake/stake-form.tsx (98%) create mode 100644 packages/apps/human-app/frontend/src/modules/signup/operator/hooks/index.ts rename packages/apps/human-app/frontend/src/modules/{ => signup}/operator/hooks/use-add-stake-mutation-state.ts (88%) rename packages/apps/human-app/frontend/src/modules/{ => signup}/operator/hooks/use-add-stake.ts (97%) rename packages/apps/human-app/frontend/src/modules/{ => signup}/operator/hooks/use-edit-existing-keys.ts (100%) rename packages/apps/human-app/frontend/src/modules/{ => signup}/operator/hooks/use-get-stacked-amount.ts (100%) rename packages/apps/human-app/frontend/src/modules/{ => signup}/operator/hooks/use-human-token-decimals.ts (100%) rename packages/apps/human-app/frontend/src/modules/{ => signup}/operator/hooks/use-web3-signup.ts (100%) create mode 100644 packages/apps/human-app/frontend/src/modules/signup/operator/index.ts rename packages/apps/human-app/frontend/src/modules/{operator/views/sign-up => signup/operator/views}/add-keys.page.tsx (82%) rename packages/apps/human-app/frontend/src/modules/{operator/views/sign-up => signup/operator/views}/add-stake.page.tsx (87%) rename packages/apps/human-app/frontend/src/modules/{operator/views/sign-up => signup/operator/views}/connect-wallet.page.tsx (100%) rename packages/apps/human-app/frontend/src/modules/{operator/views/sign-up => signup/operator/views}/edit-existing-keys-success.page.tsx (97%) create mode 100644 packages/apps/human-app/frontend/src/modules/signup/operator/views/index.ts rename packages/apps/human-app/frontend/src/modules/{operator/views/sign-up => signup/operator/views}/set-up-operator.page.tsx (100%) diff --git a/packages/apps/human-app/frontend/src/modules/operator/hooks/index.ts b/packages/apps/human-app/frontend/src/modules/operator/hooks/index.ts new file mode 100644 index 0000000000..72939ae5ae --- /dev/null +++ b/packages/apps/human-app/frontend/src/modules/operator/hooks/index.ts @@ -0,0 +1,3 @@ +export * from './use-disable-operator'; +export * from './use-get-keys'; +export * from './use-web3-signin'; diff --git a/packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-keys/edit-existing-keys-form.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/edit-existing-keys-form.tsx similarity index 96% rename from packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-keys/edit-existing-keys-form.tsx rename to packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/edit-existing-keys-form.tsx index 654bccfed8..42c45fc5f8 100644 --- a/packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-keys/edit-existing-keys-form.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/edit-existing-keys-form.tsx @@ -14,11 +14,8 @@ import { MultiSelect } from '@/shared/components/data-entry/multi-select'; import { JOB_TYPES } from '@/shared/consts'; import type { GetEthKVStoreValuesSuccessResponse } from '@/modules/operator/hooks/use-get-keys'; import { useColorMode } from '@/shared/contexts/color-mode'; -import { - order, - sortFormKeys, -} from '@/modules/operator/components/sign-up/add-keys/sort-form'; import { PercentsInputMask } from '@/shared/components/data-entry/input-masks'; +import { STORE_KEYS_ORDER, sortFormKeys } from './sort-form'; const OPTIONS = [ Role.EXCHANGE_ORACLE, @@ -82,17 +79,17 @@ const formInputsConfig: Record = { export function EditExistingKeysForm({ existingKeysInitialState, formButtonProps, -}: { +}: Readonly<{ existingKeysInitialState: GetEthKVStoreValuesSuccessResponse; formButtonProps: CustomButtonProps; -}) { +}>) { const { colorPalette } = useColorMode(); const { errors } = useFormState(); const noChangesError = errors.form?.message as string; const sortedKeys = sortFormKeys( Object.keys(existingKeysInitialState) as EthKVStoreKeyValues[], - order + STORE_KEYS_ORDER ); return ( diff --git a/packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-keys/edit-pending-keys-form.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/edit-pending-keys-form.tsx similarity index 95% rename from packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-keys/edit-pending-keys-form.tsx rename to packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/edit-pending-keys-form.tsx index a58c5560ce..fd7fc4a954 100644 --- a/packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-keys/edit-pending-keys-form.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/edit-pending-keys-form.tsx @@ -10,11 +10,8 @@ import { Select } from '@/shared/components/data-entry/select'; import { MultiSelect } from '@/shared/components/data-entry/multi-select'; import { JOB_TYPES } from '@/shared/consts'; import type { GetEthKVStoreValuesSuccessResponse } from '@/modules/operator/hooks/use-get-keys'; -import { - order, - sortFormKeys, -} from '@/modules/operator/components/sign-up/add-keys/sort-form'; import { PercentsInputMask } from '@/shared/components/data-entry/input-masks'; +import { STORE_KEYS_ORDER, sortFormKeys } from './sort-form'; const OPTIONS = [ Role.EXCHANGE_ORACLE, @@ -78,12 +75,12 @@ const formInputsConfig: Record = { export function EditPendingKeysForm({ existingKeysInitialState, -}: { +}: Readonly<{ existingKeysInitialState: GetEthKVStoreValuesSuccessResponse; -}) { +}>) { const sortedKeys = sortFormKeys( Object.keys(existingKeysInitialState) as EthKVStoreKeyValues[], - order + STORE_KEYS_ORDER ); return ( diff --git a/packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-keys/existing-keys-form.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/existing-keys-form.tsx similarity index 87% rename from packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-keys/existing-keys-form.tsx rename to packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/existing-keys-form.tsx index bb4e3a2e06..0b82d006c0 100644 --- a/packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-keys/existing-keys-form.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/existing-keys-form.tsx @@ -3,15 +3,15 @@ import { Grid } from '@mui/material'; import { zodResolver } from '@hookform/resolvers/zod'; import type { UseFormReturn } from 'react-hook-form'; import { FormProvider, useForm } from 'react-hook-form'; -import type { EditEthKVStoreValuesMutationData } from '@/modules/operator/hooks/use-edit-existing-keys'; +import type { GetEthKVStoreValuesSuccessResponse } from '@/modules/operator/hooks/use-get-keys'; +import { useResetMutationErrors } from '@/shared/hooks/use-reset-mutation-errors'; import { + type EditEthKVStoreValuesMutationData, getEditEthKVStoreValuesMutationSchema, useEditExistingKeysMutation, -} from '@/modules/operator/hooks/use-edit-existing-keys'; -import { ExistingKeys } from '@/modules/operator/components/sign-up/add-keys/existing-keys'; -import { EditExistingKeysForm } from '@/modules/operator/components/sign-up/add-keys/edit-existing-keys-form'; -import type { GetEthKVStoreValuesSuccessResponse } from '@/modules/operator/hooks/use-get-keys'; -import { useResetMutationErrors } from '@/shared/hooks/use-reset-mutation-errors'; +} from '../../hooks'; +import { EditExistingKeysForm } from './edit-existing-keys-form'; +import { ExistingKeys } from './existing-keys'; export type UseFormResult = UseFormReturn< GetEthKVStoreValuesSuccessResponse, @@ -20,9 +20,9 @@ export type UseFormResult = UseFormReturn< export function ExistingKeysForm({ keysData, -}: { +}: Readonly<{ keysData: GetEthKVStoreValuesSuccessResponse; -}) { +}>) { const [editMode, setEditMode] = useState(false); const existingKeysMutation = useEditExistingKeysMutation(); const pendingKeysMutation = useEditExistingKeysMutation(); diff --git a/packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-keys/existing-keys.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/existing-keys.tsx similarity index 97% rename from packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-keys/existing-keys.tsx rename to packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/existing-keys.tsx index d617ab6d0a..6a2a1dd2a0 100644 --- a/packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-keys/existing-keys.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/existing-keys.tsx @@ -11,11 +11,8 @@ import { EmptyPlaceholder } from '@/shared/components/ui/empty-placeholder'; import type { GetEthKVStoreValuesSuccessResponse } from '@/modules/operator/hooks/use-get-keys'; import { Chips } from '@/shared/components/ui/chips'; import { Chip } from '@/shared/components/ui/chip'; -import { - order, - sortFormKeys, -} from '@/modules/operator/components/sign-up/add-keys/sort-form'; import { useColorMode } from '@/shared/contexts/color-mode'; +import { STORE_KEYS_ORDER, sortFormKeys } from './sort-form'; const existingKeysConfig: Record< EthKVStoreKeyValues, @@ -84,17 +81,17 @@ const existingKeysConfig: Record< export function ExistingKeys({ openEditMode, existingKeysInitialState, -}: { +}: Readonly<{ openEditMode: () => void; existingKeysInitialState: GetEthKVStoreValuesSuccessResponse; -}) { +}>) { const { colorPalette } = useColorMode(); const { getValues } = useFormContext(); const formValues = getValues(); const sortedKeys = sortFormKeys( Object.keys(existingKeysInitialState) as EthKVStoreKeyValues[], - order + STORE_KEYS_ORDER ); return ( diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/index.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/index.ts new file mode 100644 index 0000000000..71b0db96f8 --- /dev/null +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/index.ts @@ -0,0 +1,2 @@ +export * from './edit-existing-keys-form'; +export * from './pending-keys-form'; diff --git a/packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-keys/pending-keys-form.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/pending-keys-form.tsx similarity index 87% rename from packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-keys/pending-keys-form.tsx rename to packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/pending-keys-form.tsx index 697fb84cb8..7f8970584f 100644 --- a/packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-keys/pending-keys-form.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/pending-keys-form.tsx @@ -1,21 +1,21 @@ import { t } from 'i18next'; import { zodResolver } from '@hookform/resolvers/zod'; import { FormProvider, useForm } from 'react-hook-form'; -import type { EditEthKVStoreValuesMutationData } from '@/modules/operator/hooks/use-edit-existing-keys'; -import { - setEthKVStoreValuesMutationSchema, - useEditExistingKeysMutation, -} from '@/modules/operator/hooks/use-edit-existing-keys'; import { Button } from '@/shared/components/ui/button'; -import { EditPendingKeysForm } from '@/modules/operator/components/sign-up/add-keys/edit-pending-keys-form'; import type { GetEthKVStoreValuesSuccessResponse } from '@/modules/operator/hooks/use-get-keys'; import { useResetMutationErrors } from '@/shared/hooks/use-reset-mutation-errors'; +import { + type EditEthKVStoreValuesMutationData, + setEthKVStoreValuesMutationSchema, + useEditExistingKeysMutation, +} from '../../hooks'; +import { EditPendingKeysForm } from './edit-pending-keys-form'; export function PendingKeysForm({ keysData, -}: { +}: Readonly<{ keysData: GetEthKVStoreValuesSuccessResponse; -}) { +}>) { const pendingKeysMutation = useEditExistingKeysMutation(); const pendingKeysMethods = useForm< diff --git a/packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-keys/sort-form.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/sort-form.ts similarity index 89% rename from packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-keys/sort-form.ts rename to packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/sort-form.ts index 1e05ad1ff1..57693c0a40 100644 --- a/packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-keys/sort-form.ts +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/sort-form.ts @@ -7,7 +7,8 @@ export const sortFormKeys = ( ): EthKVStoreKeyValues[] => { return keys.sort((a, b) => order.indexOf(a) - order.indexOf(b)); }; -export const order: EthKVStoreKeyValues[] = [ + +export const STORE_KEYS_ORDER: EthKVStoreKeyValues[] = [ EthKVStoreKeys.Fee, EthKVStoreKeys.PublicKey, EthKVStoreKeys.Url, diff --git a/packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-stake/buttons.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-stake/buttons.tsx similarity index 100% rename from packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-stake/buttons.tsx rename to packages/apps/human-app/frontend/src/modules/signup/operator/components/add-stake/buttons.tsx diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-stake/index.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-stake/index.ts new file mode 100644 index 0000000000..cf27c9d49f --- /dev/null +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-stake/index.ts @@ -0,0 +1,2 @@ +export * from './buttons'; +export * from './stake-form'; diff --git a/packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-stake/stake-form.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-stake/stake-form.tsx similarity index 98% rename from packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-stake/stake-form.tsx rename to packages/apps/human-app/frontend/src/modules/signup/operator/components/add-stake/stake-form.tsx index f4819f9475..04dede1d0c 100644 --- a/packages/apps/human-app/frontend/src/modules/operator/components/sign-up/add-stake/stake-form.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-stake/stake-form.tsx @@ -5,25 +5,25 @@ import { t } from 'i18next'; import { Link } from 'react-router-dom'; import { Typography } from '@mui/material'; import { z } from 'zod'; -import { - addStakeAmountCallArgumentsSchema, - useAddStakeMutation, - type AddStakeCallArguments, -} from '@/modules/operator/hooks/use-add-stake'; import { breakpoints } from '@/shared/styles/breakpoints'; import { Input } from '@/shared/components/data-entry/input'; import { routerPaths } from '@/router/router-paths'; import { Button } from '@/shared/components/ui/button'; import { useResetMutationErrors } from '@/shared/hooks/use-reset-mutation-errors'; import { HumanCurrencyInputMask } from '@/shared/components/data-entry/input-masks'; +import { + addStakeAmountCallArgumentsSchema, + type AddStakeCallArguments, + useAddStakeMutation, +} from '../../hooks'; export function StakeForm({ decimals, stakedAmount, -}: { +}: Readonly<{ decimals: number; stakedAmount?: bigint; -}) { +}>) { const addStakeMutation = useAddStakeMutation(); const methods = useForm({ diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/index.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/index.ts new file mode 100644 index 0000000000..f4a81ea7f7 --- /dev/null +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/index.ts @@ -0,0 +1,6 @@ +export * from './use-add-stake-mutation-state'; +export * from './use-add-stake'; +export * from './use-edit-existing-keys'; +export * from './use-get-stacked-amount'; +export * from './use-human-token-decimals'; +export * from './use-web3-signup'; diff --git a/packages/apps/human-app/frontend/src/modules/operator/hooks/use-add-stake-mutation-state.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-add-stake-mutation-state.ts similarity index 88% rename from packages/apps/human-app/frontend/src/modules/operator/hooks/use-add-stake-mutation-state.ts rename to packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-add-stake-mutation-state.ts index 0a18642b74..d8d5067f27 100644 --- a/packages/apps/human-app/frontend/src/modules/operator/hooks/use-add-stake-mutation-state.ts +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-add-stake-mutation-state.ts @@ -3,7 +3,7 @@ import { useMutationState } from '@tanstack/react-query'; import type { MutationState } from '@tanstack/react-query'; import { useConnectedWallet } from '@/shared/contexts/wallet-connect'; import type { ResponseError } from '@/shared/types/global.type'; -import { type AddStakeCallArguments } from '@/modules/operator/hooks/use-add-stake'; +import { type AddStakeCallArguments } from './use-add-stake'; export function useAddStakeMutationState() { const { address } = useConnectedWallet(); diff --git a/packages/apps/human-app/frontend/src/modules/operator/hooks/use-add-stake.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-add-stake.ts similarity index 97% rename from packages/apps/human-app/frontend/src/modules/operator/hooks/use-add-stake.ts rename to packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-add-stake.ts index 675b9b8850..664071cd23 100644 --- a/packages/apps/human-app/frontend/src/modules/operator/hooks/use-add-stake.ts +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-add-stake.ts @@ -10,7 +10,7 @@ import { hmTokenApprove } from '@/modules/smart-contracts/HMToken/hm-token-appro import type { ContractCallArguments } from '@/modules/smart-contracts/types'; import { routerPaths } from '@/router/router-paths'; import { hmTokenAllowance } from '@/modules/smart-contracts/HMToken/hm-token-allowance'; -import { useHMTokenDecimals } from '@/modules/operator/hooks/use-human-token-decimals'; +import { useHMTokenDecimals } from './use-human-token-decimals'; type AmountValidation = z.ZodEffects< z.ZodEffects, diff --git a/packages/apps/human-app/frontend/src/modules/operator/hooks/use-edit-existing-keys.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-edit-existing-keys.ts similarity index 100% rename from packages/apps/human-app/frontend/src/modules/operator/hooks/use-edit-existing-keys.ts rename to packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-edit-existing-keys.ts diff --git a/packages/apps/human-app/frontend/src/modules/operator/hooks/use-get-stacked-amount.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-get-stacked-amount.ts similarity index 100% rename from packages/apps/human-app/frontend/src/modules/operator/hooks/use-get-stacked-amount.ts rename to packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-get-stacked-amount.ts diff --git a/packages/apps/human-app/frontend/src/modules/operator/hooks/use-human-token-decimals.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-human-token-decimals.ts similarity index 100% rename from packages/apps/human-app/frontend/src/modules/operator/hooks/use-human-token-decimals.ts rename to packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-human-token-decimals.ts diff --git a/packages/apps/human-app/frontend/src/modules/operator/hooks/use-web3-signup.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-web3-signup.ts similarity index 100% rename from packages/apps/human-app/frontend/src/modules/operator/hooks/use-web3-signup.ts rename to packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-web3-signup.ts diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/index.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/index.ts new file mode 100644 index 0000000000..7929623807 --- /dev/null +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/index.ts @@ -0,0 +1 @@ +export * from './views'; diff --git a/packages/apps/human-app/frontend/src/modules/operator/views/sign-up/add-keys.page.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-keys.page.tsx similarity index 82% rename from packages/apps/human-app/frontend/src/modules/operator/views/sign-up/add-keys.page.tsx rename to packages/apps/human-app/frontend/src/modules/signup/operator/views/add-keys.page.tsx index ad3c82ef2a..884fce8c01 100644 --- a/packages/apps/human-app/frontend/src/modules/operator/views/sign-up/add-keys.page.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-keys.page.tsx @@ -8,15 +8,19 @@ import { PageCard, } from '@/shared/components/ui/page-card'; import { getErrorMessageForError, jsonRpcErrorHandler } from '@/shared/errors'; -import type { EditEthKVStoreValuesMutationData } from '@/modules/operator/hooks/use-edit-existing-keys'; -import { useEditExistingKeysMutationState } from '@/modules/operator/hooks/use-edit-existing-keys'; -import type { GetEthKVStoreValuesSuccessResponse } from '@/modules/operator/hooks/use-get-keys'; -import { useGetKeys } from '@/modules/operator/hooks/use-get-keys'; import { routerPaths } from '@/router/router-paths'; -import { ExistingKeysForm } from '@/modules/operator/components/sign-up/add-keys/existing-keys-form'; -import { PendingKeysForm } from '@/modules/operator/components/sign-up/add-keys/pending-keys-form'; import { Button } from '@/shared/components/ui/button'; import { Alert } from '@/shared/components/ui/alert'; +import { + type GetEthKVStoreValuesSuccessResponse, + useGetKeys, +} from '@/modules/operator/hooks'; +import { + type EditEthKVStoreValuesMutationData, + useEditExistingKeysMutationState, +} from '../hooks'; +import { PendingKeysForm } from '../components/add-keys'; +import { ExistingKeysForm } from '../components/add-keys/existing-keys-form'; export type UseFormResult = UseFormReturn< GetEthKVStoreValuesSuccessResponse, @@ -60,9 +64,9 @@ export function AddKeysOperatorPage() { export function Form({ keysData, -}: { +}: Readonly<{ keysData: GetEthKVStoreValuesSuccessResponse; -}) { +}>) { const hasSomeNotEmptyKeys = Object.values(keysData).filter(Boolean).length > 0; const hasSomePendingKeys = diff --git a/packages/apps/human-app/frontend/src/modules/operator/views/sign-up/add-stake.page.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-stake.page.tsx similarity index 87% rename from packages/apps/human-app/frontend/src/modules/operator/views/sign-up/add-stake.page.tsx rename to packages/apps/human-app/frontend/src/modules/signup/operator/views/add-stake.page.tsx index 76fc5e9fc7..2078f90834 100644 --- a/packages/apps/human-app/frontend/src/modules/operator/views/sign-up/add-stake.page.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-stake.page.tsx @@ -8,17 +8,16 @@ import { PageCard, } from '@/shared/components/ui/page-card'; import { getErrorMessageForError } from '@/shared/errors'; -import { Buttons } from '@/modules/operator/components/sign-up/add-stake/buttons'; -import { StakeForm } from '@/modules/operator/components/sign-up/add-stake/stake-form'; import { Alert } from '@/shared/components/ui/alert'; +import { useColorMode } from '@/shared/contexts/color-mode'; +import { onlyDarkModeColor } from '@/shared/styles/dark-color-palette'; import { stakedAmountFormatter, + useAddStakeMutationState, useGetStakedAmount, -} from '@/modules/operator/hooks/use-get-stacked-amount'; -import { useAddStakeMutationState } from '@/modules/operator/hooks/use-add-stake-mutation-state'; -import { useHMTokenDecimals } from '@/modules/operator/hooks/use-human-token-decimals'; -import { useColorMode } from '@/shared/contexts/color-mode'; -import { onlyDarkModeColor } from '@/shared/styles/dark-color-palette'; + useHMTokenDecimals, +} from '../hooks'; +import { StakeForm, Buttons } from '../components/add-stake'; export function AddStakeOperatorPage() { const { colorPalette, isDarkMode } = useColorMode(); diff --git a/packages/apps/human-app/frontend/src/modules/operator/views/sign-up/connect-wallet.page.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/views/connect-wallet.page.tsx similarity index 100% rename from packages/apps/human-app/frontend/src/modules/operator/views/sign-up/connect-wallet.page.tsx rename to packages/apps/human-app/frontend/src/modules/signup/operator/views/connect-wallet.page.tsx diff --git a/packages/apps/human-app/frontend/src/modules/operator/views/sign-up/edit-existing-keys-success.page.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/views/edit-existing-keys-success.page.tsx similarity index 97% rename from packages/apps/human-app/frontend/src/modules/operator/views/sign-up/edit-existing-keys-success.page.tsx rename to packages/apps/human-app/frontend/src/modules/signup/operator/views/edit-existing-keys-success.page.tsx index a541510587..4c8bfac94d 100644 --- a/packages/apps/human-app/frontend/src/modules/operator/views/sign-up/edit-existing-keys-success.page.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/views/edit-existing-keys-success.page.tsx @@ -7,7 +7,6 @@ import { } from '@/shared/components/ui/page-card'; import { Button } from '@/shared/components/ui/button'; import { getErrorMessageForError } from '@/shared/errors'; -import { useWeb3SignUp } from '@/modules/operator/hooks/use-web3-signup'; import type { SignatureData } from '@/api/hooks/use-prepare-signature'; import { PrepareSignatureType, @@ -15,6 +14,7 @@ import { } from '@/api/hooks/use-prepare-signature'; import { Alert } from '@/shared/components/ui/alert'; import { useConnectedWallet } from '@/shared/contexts/wallet-connect'; +import { useWeb3SignUp } from '../hooks'; export function EditExistingKeysSuccessPage() { const { address, signMessage } = useConnectedWallet(); diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/views/index.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/views/index.ts new file mode 100644 index 0000000000..0205a5c729 --- /dev/null +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/views/index.ts @@ -0,0 +1,5 @@ +export * from './add-keys.page'; +export * from './add-stake.page'; +export * from './connect-wallet.page'; +export * from './set-up-operator.page'; +export * from './edit-existing-keys-success.page'; diff --git a/packages/apps/human-app/frontend/src/modules/operator/views/sign-up/set-up-operator.page.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/views/set-up-operator.page.tsx similarity index 100% rename from packages/apps/human-app/frontend/src/modules/operator/views/sign-up/set-up-operator.page.tsx rename to packages/apps/human-app/frontend/src/modules/signup/operator/views/set-up-operator.page.tsx diff --git a/packages/apps/human-app/frontend/src/router/routes.tsx b/packages/apps/human-app/frontend/src/router/routes.tsx index 2f46ca7010..d914cdbee9 100644 --- a/packages/apps/human-app/frontend/src/router/routes.tsx +++ b/packages/apps/human-app/frontend/src/router/routes.tsx @@ -14,11 +14,6 @@ import { WorkHeaderIcon, } from '@/shared/components/ui/icons'; import type { PageHeaderProps } from '@/shared/components/layout/protected/page-header'; -import { SetUpOperatorPage } from '@/modules/operator/views/sign-up/set-up-operator.page'; -import { EditExistingKeysSuccessPage } from '@/modules/operator/views/sign-up/edit-existing-keys-success.page'; -import { AddKeysOperatorPage } from '@/modules/operator/views/sign-up/add-keys.page'; -import { AddStakeOperatorPage } from '@/modules/operator/views/sign-up/add-stake.page'; -import { ConnectWalletOperatorPage } from '@/modules/operator/views/sign-up/connect-wallet.page'; import { Playground } from '@/modules/playground/views/playground.page'; import { HcaptchaLabelingPage, @@ -35,6 +30,13 @@ import { WorkerProfilePage } from '@/modules/worker/profile'; import { SignUpWorkerPage } from '@/modules/signup/worker'; import { OperatorProfilePage } from '@/modules/operator/profile'; import { HomePage } from '@/modules/homepage'; +import { + AddKeysOperatorPage, + AddStakeOperatorPage, + ConnectWalletOperatorPage, + EditExistingKeysSuccessPage, + SetUpOperatorPage, +} from '@/modules/signup/operator'; export const unprotectedRoutes: RouteProps[] = [ { From 7f3e58e3bddd8742d76ef4dfd5b640529fc0bc8a Mon Sep 17 00:00:00 2001 From: mpblocky <185767042+mpblocky@users.noreply.github.com> Date: Thu, 6 Mar 2025 08:52:40 +0100 Subject: [PATCH 2/7] chore: fix imports, move fnc to utils --- .../components/add-keys/edit-existing-keys-form.tsx | 3 ++- .../components/add-keys/edit-pending-keys-form.tsx | 2 +- .../operator/components/add-keys/existing-keys.tsx | 2 +- .../signup/operator/components/add-stake/buttons.tsx | 4 ++-- .../modules/signup/operator/hooks/use-add-stake.ts | 1 + .../signup/operator/hooks/use-get-stacked-amount.ts | 12 ------------ .../src/modules/signup/operator/utils/index.ts | 2 ++ .../{components/add-keys => utils}/sort-form.ts | 0 .../signup/operator/utils/staked-amount-formatter.ts | 12 ++++++++++++ .../modules/signup/operator/views/add-stake.page.tsx | 2 +- 10 files changed, 22 insertions(+), 18 deletions(-) create mode 100644 packages/apps/human-app/frontend/src/modules/signup/operator/utils/index.ts rename packages/apps/human-app/frontend/src/modules/signup/operator/{components/add-keys => utils}/sort-form.ts (100%) create mode 100644 packages/apps/human-app/frontend/src/modules/signup/operator/utils/staked-amount-formatter.ts diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/edit-existing-keys-form.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/edit-existing-keys-form.tsx index 42c45fc5f8..1ce6275f3e 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/edit-existing-keys-form.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/edit-existing-keys-form.tsx @@ -15,7 +15,7 @@ import { JOB_TYPES } from '@/shared/consts'; import type { GetEthKVStoreValuesSuccessResponse } from '@/modules/operator/hooks/use-get-keys'; import { useColorMode } from '@/shared/contexts/color-mode'; import { PercentsInputMask } from '@/shared/components/data-entry/input-masks'; -import { STORE_KEYS_ORDER, sortFormKeys } from './sort-form'; +import { sortFormKeys, STORE_KEYS_ORDER } from '../../utils'; const OPTIONS = [ Role.EXCHANGE_ORACLE, @@ -76,6 +76,7 @@ const formInputsConfig: Record = { /> ), }; + export function EditExistingKeysForm({ existingKeysInitialState, formButtonProps, diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/edit-pending-keys-form.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/edit-pending-keys-form.tsx index fd7fc4a954..d837a860af 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/edit-pending-keys-form.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/edit-pending-keys-form.tsx @@ -11,7 +11,7 @@ import { MultiSelect } from '@/shared/components/data-entry/multi-select'; import { JOB_TYPES } from '@/shared/consts'; import type { GetEthKVStoreValuesSuccessResponse } from '@/modules/operator/hooks/use-get-keys'; import { PercentsInputMask } from '@/shared/components/data-entry/input-masks'; -import { STORE_KEYS_ORDER, sortFormKeys } from './sort-form'; +import { sortFormKeys, STORE_KEYS_ORDER } from '../../utils'; const OPTIONS = [ Role.EXCHANGE_ORACLE, diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/existing-keys.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/existing-keys.tsx index 6a2a1dd2a0..f6113b1f7d 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/existing-keys.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/existing-keys.tsx @@ -12,7 +12,7 @@ import type { GetEthKVStoreValuesSuccessResponse } from '@/modules/operator/hook import { Chips } from '@/shared/components/ui/chips'; import { Chip } from '@/shared/components/ui/chip'; import { useColorMode } from '@/shared/contexts/color-mode'; -import { STORE_KEYS_ORDER, sortFormKeys } from './sort-form'; +import { sortFormKeys, STORE_KEYS_ORDER } from '../../utils'; const existingKeysConfig: Record< EthKVStoreKeyValues, diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-stake/buttons.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-stake/buttons.tsx index 9849f41820..b3a4b84a83 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-stake/buttons.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-stake/buttons.tsx @@ -8,10 +8,10 @@ import { routerPaths } from '@/router/router-paths'; export function Buttons({ openForm, stakedAmount, -}: { +}: Readonly<{ openForm: () => void; stakedAmount?: bigint; -}) { +}>) { const isStaked = stakedAmount ? stakedAmount > BigInt(0) : false; return ( ; + type AmountField = z.infer; export const addStakeAmountCallArgumentsSchema = ( diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-get-stacked-amount.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-get-stacked-amount.ts index 1b927f7850..eef5582096 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-get-stacked-amount.ts +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-get-stacked-amount.ts @@ -1,20 +1,8 @@ import { useQuery } from '@tanstack/react-query'; -import { ethers } from 'ethers'; -import { t } from 'i18next'; import { stakingGetStakedTokens } from '@/modules/smart-contracts/Staking/staking-get-staked-tokens'; import { useConnectedWallet } from '@/shared/contexts/wallet-connect'; import { getContractAddress } from '@/modules/smart-contracts/get-contract-address'; -export const stakedAmountFormatter = (amount: bigint) => { - const amountAsString = ethers.formatEther(amount); - - if (amountAsString.split('.')[1] === '0') { - // decimals part should be omitted - return `${amountAsString.replace('.0', '')} ${t('inputMasks.humanCurrencySuffix')}`; - } - return `${ethers.formatEther(amount)} ${t('inputMasks.humanCurrencySuffix')}`; -}; - export function useGetStakedAmount() { const { address, diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/utils/index.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/utils/index.ts new file mode 100644 index 0000000000..8c9632fa1b --- /dev/null +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/utils/index.ts @@ -0,0 +1,2 @@ +export * from './sort-form'; +export * from './staked-amount-formatter'; diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/sort-form.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/utils/sort-form.ts similarity index 100% rename from packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/sort-form.ts rename to packages/apps/human-app/frontend/src/modules/signup/operator/utils/sort-form.ts diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/utils/staked-amount-formatter.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/utils/staked-amount-formatter.ts new file mode 100644 index 0000000000..c63e113faf --- /dev/null +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/utils/staked-amount-formatter.ts @@ -0,0 +1,12 @@ +import { ethers } from 'ethers'; +import { t } from 'i18next'; + +export const stakedAmountFormatter = (amount: bigint) => { + const amountAsString = ethers.formatEther(amount); + + if (amountAsString.split('.')[1] === '0') { + // decimals part should be omitted + return `${amountAsString.replace('.0', '')} ${t('inputMasks.humanCurrencySuffix')}`; + } + return `${ethers.formatEther(amount)} ${t('inputMasks.humanCurrencySuffix')}`; +}; diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-stake.page.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-stake.page.tsx index 2078f90834..c59d939660 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-stake.page.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-stake.page.tsx @@ -12,12 +12,12 @@ import { Alert } from '@/shared/components/ui/alert'; import { useColorMode } from '@/shared/contexts/color-mode'; import { onlyDarkModeColor } from '@/shared/styles/dark-color-palette'; import { - stakedAmountFormatter, useAddStakeMutationState, useGetStakedAmount, useHMTokenDecimals, } from '../hooks'; import { StakeForm, Buttons } from '../components/add-stake'; +import { stakedAmountFormatter } from '../utils'; export function AddStakeOperatorPage() { const { colorPalette, isDarkMode } = useColorMode(); From c2e2337c33ef33175f4e2cdf30aae841d85b4108 Mon Sep 17 00:00:00 2001 From: mpblocky <185767042+mpblocky@users.noreply.github.com> Date: Thu, 6 Mar 2025 10:07:28 +0100 Subject: [PATCH 3/7] fix: separate schema functions from hooks --- .../add-keys/existing-keys-form.tsx | 4 +- .../components/add-keys/pending-keys-form.tsx | 4 +- .../components/add-stake/stake-form.tsx | 8 +- .../hooks/use-add-stake-mutation-state.ts | 2 +- .../signup/operator/hooks/use-add-stake.ts | 36 +----- .../operator/hooks/use-edit-existing-keys.ts | 105 +----------------- .../add-stake-amount-call-arguments-schema.ts | 33 ++++++ .../eth-kv-store-values-mutation-schema.ts | 104 +++++++++++++++++ .../modules/signup/operator/utils/index.ts | 2 + .../signup/operator/views/add-keys.page.tsx | 10 +- 10 files changed, 155 insertions(+), 153 deletions(-) create mode 100644 packages/apps/human-app/frontend/src/modules/signup/operator/utils/add-stake-amount-call-arguments-schema.ts create mode 100644 packages/apps/human-app/frontend/src/modules/signup/operator/utils/eth-kv-store-values-mutation-schema.ts diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/existing-keys-form.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/existing-keys-form.tsx index 0b82d006c0..6f6ecc9875 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/existing-keys-form.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/existing-keys-form.tsx @@ -5,11 +5,11 @@ import type { UseFormReturn } from 'react-hook-form'; import { FormProvider, useForm } from 'react-hook-form'; import type { GetEthKVStoreValuesSuccessResponse } from '@/modules/operator/hooks/use-get-keys'; import { useResetMutationErrors } from '@/shared/hooks/use-reset-mutation-errors'; +import { useEditExistingKeysMutation } from '../../hooks'; import { type EditEthKVStoreValuesMutationData, getEditEthKVStoreValuesMutationSchema, - useEditExistingKeysMutation, -} from '../../hooks'; +} from '../../utils'; import { EditExistingKeysForm } from './edit-existing-keys-form'; import { ExistingKeys } from './existing-keys'; diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/pending-keys-form.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/pending-keys-form.tsx index 7f8970584f..54fd0ea793 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/pending-keys-form.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/pending-keys-form.tsx @@ -4,11 +4,11 @@ import { FormProvider, useForm } from 'react-hook-form'; import { Button } from '@/shared/components/ui/button'; import type { GetEthKVStoreValuesSuccessResponse } from '@/modules/operator/hooks/use-get-keys'; import { useResetMutationErrors } from '@/shared/hooks/use-reset-mutation-errors'; +import { useEditExistingKeysMutation } from '../../hooks'; import { type EditEthKVStoreValuesMutationData, setEthKVStoreValuesMutationSchema, - useEditExistingKeysMutation, -} from '../../hooks'; +} from '../../utils'; import { EditPendingKeysForm } from './edit-pending-keys-form'; export function PendingKeysForm({ diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-stake/stake-form.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-stake/stake-form.tsx index 04dede1d0c..027fa93e20 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-stake/stake-form.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-stake/stake-form.tsx @@ -11,11 +11,11 @@ import { routerPaths } from '@/router/router-paths'; import { Button } from '@/shared/components/ui/button'; import { useResetMutationErrors } from '@/shared/hooks/use-reset-mutation-errors'; import { HumanCurrencyInputMask } from '@/shared/components/data-entry/input-masks'; +import { useAddStake } from '../../hooks'; import { - addStakeAmountCallArgumentsSchema, type AddStakeCallArguments, - useAddStakeMutation, -} from '../../hooks'; + addStakeAmountCallArgumentsSchema, +} from '../../utils'; export function StakeForm({ decimals, @@ -24,7 +24,7 @@ export function StakeForm({ decimals: number; stakedAmount?: bigint; }>) { - const addStakeMutation = useAddStakeMutation(); + const addStakeMutation = useAddStake(); const methods = useForm({ defaultValues: { diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-add-stake-mutation-state.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-add-stake-mutation-state.ts index d8d5067f27..3cfecb66a7 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-add-stake-mutation-state.ts +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-add-stake-mutation-state.ts @@ -3,7 +3,7 @@ import { useMutationState } from '@tanstack/react-query'; import type { MutationState } from '@tanstack/react-query'; import { useConnectedWallet } from '@/shared/contexts/wallet-connect'; import type { ResponseError } from '@/shared/types/global.type'; -import { type AddStakeCallArguments } from './use-add-stake'; +import { type AddStakeCallArguments } from '../utils'; export function useAddStakeMutationState() { const { address } = useConnectedWallet(); diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-add-stake.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-add-stake.ts index f20246e1f3..352573f09d 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-add-stake.ts +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-add-stake.ts @@ -1,6 +1,4 @@ -import { z } from 'zod'; import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { t } from 'i18next'; import { useNavigate } from 'react-router-dom'; import { ethers } from 'ethers'; import { stakingStake } from '@/modules/smart-contracts/Staking/staking-stake'; @@ -10,39 +8,9 @@ import { hmTokenApprove } from '@/modules/smart-contracts/HMToken/hm-token-appro import type { ContractCallArguments } from '@/modules/smart-contracts/types'; import { routerPaths } from '@/router/router-paths'; import { hmTokenAllowance } from '@/modules/smart-contracts/HMToken/hm-token-allowance'; +import { type AddStakeCallArguments } from '../utils'; import { useHMTokenDecimals } from './use-human-token-decimals'; -type AmountValidation = z.ZodEffects< - z.ZodEffects, - string, - string ->; - -type AmountField = z.infer; - -export const addStakeAmountCallArgumentsSchema = ( - decimals: number -): AmountValidation => - z - .string() - .refine((amount) => !amount.startsWith('-')) - .refine( - (amount) => { - const decimalPart = amount.toString().split('.')[1]; - if (!decimalPart) return true; - return decimalPart.length <= decimals; - }, - { - message: t('operator.stakeForm.invalidDecimals', { - decimals, - }), - } - ); - -export interface AddStakeCallArguments { - amount: AmountField; -} - async function addStakeMutationFn( data: AddStakeCallArguments & { address: string; @@ -86,7 +54,7 @@ async function addStakeMutationFn( return data; } -export function useAddStakeMutation() { +export function useAddStake() { const { chainId, address, diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-edit-existing-keys.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-edit-existing-keys.ts index 53b789008b..6e8e01b100 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-edit-existing-keys.ts +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-edit-existing-keys.ts @@ -6,114 +6,11 @@ import { import last from 'lodash/last'; import { useNavigate } from 'react-router-dom'; import type { JsonRpcSigner } from 'ethers'; -import { z, ZodError } from 'zod'; -import { t } from 'i18next'; import { routerPaths } from '@/router/router-paths'; import { useConnectedWallet } from '@/shared/contexts/wallet-connect'; -import { - EthKVStoreKeys, - JobType, - Role, -} from '@/modules/smart-contracts/EthKVStore/config'; import { ethKvStoreSetBulk } from '@/modules/smart-contracts/EthKVStore/eth-kv-store-set-bulk'; import { getContractAddress } from '@/modules/smart-contracts/get-contract-address'; -import type { GetEthKVStoreValuesSuccessResponse } from '@/modules/operator/hooks/use-get-keys'; -import { urlDomainSchema } from '@/shared/schemas'; - -const fieldsValidations = { - [EthKVStoreKeys.PublicKey]: urlDomainSchema, - [EthKVStoreKeys.Url]: urlDomainSchema, - [EthKVStoreKeys.WebhookUrl]: urlDomainSchema, - [EthKVStoreKeys.Role]: z.nativeEnum(Role), - [EthKVStoreKeys.JobTypes]: z.array(z.nativeEnum(JobType)).min(1), - [EthKVStoreKeys.Fee]: z.coerce - // eslint-disable-next-line camelcase - .number({ invalid_type_error: t('validation.required') }) - .min(0, t('validation.feeValidationError')) - .max(100, t('validation.feeValidationError')) - .step(1, t('validation.feeValidationError')), -}; - -export const editEthKVStoreValuesMutationSchema = z.object({ - [EthKVStoreKeys.PublicKey]: - fieldsValidations[EthKVStoreKeys.PublicKey].optional(), - [EthKVStoreKeys.Url]: fieldsValidations[EthKVStoreKeys.Url].optional(), - [EthKVStoreKeys.WebhookUrl]: - fieldsValidations[EthKVStoreKeys.WebhookUrl].optional(), - [EthKVStoreKeys.Role]: fieldsValidations[EthKVStoreKeys.Role].optional(), - [EthKVStoreKeys.JobTypes]: - fieldsValidations[EthKVStoreKeys.JobTypes].optional(), - [EthKVStoreKeys.Fee]: fieldsValidations[EthKVStoreKeys.Fee].optional(), -}); - -export type EditEthKVStoreValuesMutationData = z.infer< - typeof editEthKVStoreValuesMutationSchema ->; - -export const setEthKVStoreValuesMutationSchema = ( - initialFields: GetEthKVStoreValuesSuccessResponse -) => { - return editEthKVStoreValuesMutationSchema.superRefine((newData, ctx) => { - Object.keys(initialFields).forEach((key) => { - const typedKey = key as keyof GetEthKVStoreValuesSuccessResponse; - const initialField = initialFields[typedKey]; - if (!initialField) { - try { - fieldsValidations[typedKey].parse(newData[typedKey]); - } catch (error) { - if (error instanceof ZodError) { - error.issues[0].path = [typedKey]; - ctx.addIssue(error.issues[0]); - } - } - } - }); - }); -}; - -export const getEditEthKVStoreValuesMutationSchema = ( - initialData: GetEthKVStoreValuesSuccessResponse -) => { - return editEthKVStoreValuesMutationSchema.transform((newData, ctx) => { - const fieldsThatHasChanges: EditEthKVStoreValuesMutationData = {}; - Object.values(EthKVStoreKeys).forEach((key) => { - const newFiledData = newData[key]; - const initialFiledData = initialData[key]; - - if (Array.isArray(newFiledData) && Array.isArray(initialFiledData)) { - if ( - newFiledData.sort().toString() === initialFiledData.sort().toString() - ) { - return; - } - Object.assign(fieldsThatHasChanges, { [key]: newFiledData.toString() }); - return; - } - - if ( - typeof newFiledData === 'number' && - newFiledData.toString() !== initialFiledData?.toString() - ) { - Object.assign(fieldsThatHasChanges, { [key]: newFiledData }); - return; - } - - // eslint-disable-next-line eqeqeq -- expect to do conversion for this compare - if (newFiledData != initialFiledData) { - Object.assign(fieldsThatHasChanges, { [key]: newFiledData }); - } - }); - - if (!Object.values(fieldsThatHasChanges).length) { - ctx.addIssue({ - code: z.ZodIssueCode.custom, - message: t('operator.addKeysPage.editKeysForm.error'), - path: ['form'], - }); - } - return fieldsThatHasChanges; - }); -}; +import { type EditEthKVStoreValuesMutationData } from '../utils'; function editExistingKeysMutationFn( formData: EditEthKVStoreValuesMutationData, diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/utils/add-stake-amount-call-arguments-schema.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/utils/add-stake-amount-call-arguments-schema.ts new file mode 100644 index 0000000000..b3259f2670 --- /dev/null +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/utils/add-stake-amount-call-arguments-schema.ts @@ -0,0 +1,33 @@ +import { z } from 'zod'; +import { t } from 'i18next'; + +type AmountValidation = z.ZodEffects< + z.ZodEffects, + string, + string +>; + +type AmountField = z.infer; + +export const addStakeAmountCallArgumentsSchema = ( + decimals: number +): AmountValidation => + z + .string() + .refine((amount) => !amount.startsWith('-')) + .refine( + (amount) => { + const decimalPart = amount.toString().split('.')[1]; + if (!decimalPart) return true; + return decimalPart.length <= decimals; + }, + { + message: t('operator.stakeForm.invalidDecimals', { + decimals, + }), + } + ); + +export interface AddStakeCallArguments { + amount: AmountField; +} diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/utils/eth-kv-store-values-mutation-schema.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/utils/eth-kv-store-values-mutation-schema.ts new file mode 100644 index 0000000000..836d3216e7 --- /dev/null +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/utils/eth-kv-store-values-mutation-schema.ts @@ -0,0 +1,104 @@ +import { z, ZodError } from 'zod'; +import { t } from 'i18next'; +import { + EthKVStoreKeys, + JobType, + Role, +} from '@/modules/smart-contracts/EthKVStore/config'; +import type { GetEthKVStoreValuesSuccessResponse } from '@/modules/operator/hooks/use-get-keys'; +import { urlDomainSchema } from '@/shared/schemas'; + +const fieldsValidations = { + [EthKVStoreKeys.PublicKey]: urlDomainSchema, + [EthKVStoreKeys.Url]: urlDomainSchema, + [EthKVStoreKeys.WebhookUrl]: urlDomainSchema, + [EthKVStoreKeys.Role]: z.nativeEnum(Role), + [EthKVStoreKeys.JobTypes]: z.array(z.nativeEnum(JobType)).min(1), + [EthKVStoreKeys.Fee]: z.coerce + // eslint-disable-next-line camelcase + .number({ invalid_type_error: t('validation.required') }) + .min(0, t('validation.feeValidationError')) + .max(100, t('validation.feeValidationError')) + .step(1, t('validation.feeValidationError')), +}; + +export const editEthKVStoreValuesMutationSchema = z.object({ + [EthKVStoreKeys.PublicKey]: + fieldsValidations[EthKVStoreKeys.PublicKey].optional(), + [EthKVStoreKeys.Url]: fieldsValidations[EthKVStoreKeys.Url].optional(), + [EthKVStoreKeys.WebhookUrl]: + fieldsValidations[EthKVStoreKeys.WebhookUrl].optional(), + [EthKVStoreKeys.Role]: fieldsValidations[EthKVStoreKeys.Role].optional(), + [EthKVStoreKeys.JobTypes]: + fieldsValidations[EthKVStoreKeys.JobTypes].optional(), + [EthKVStoreKeys.Fee]: fieldsValidations[EthKVStoreKeys.Fee].optional(), +}); + +export type EditEthKVStoreValuesMutationData = z.infer< + typeof editEthKVStoreValuesMutationSchema +>; + +export const setEthKVStoreValuesMutationSchema = ( + initialFields: GetEthKVStoreValuesSuccessResponse +) => { + return editEthKVStoreValuesMutationSchema.superRefine((newData, ctx) => { + Object.keys(initialFields).forEach((key) => { + const typedKey = key as keyof GetEthKVStoreValuesSuccessResponse; + const initialField = initialFields[typedKey]; + if (!initialField) { + try { + fieldsValidations[typedKey].parse(newData[typedKey]); + } catch (error) { + if (error instanceof ZodError) { + error.issues[0].path = [typedKey]; + ctx.addIssue(error.issues[0]); + } + } + } + }); + }); +}; + +export const getEditEthKVStoreValuesMutationSchema = ( + initialData: GetEthKVStoreValuesSuccessResponse +) => { + return editEthKVStoreValuesMutationSchema.transform((newData, ctx) => { + const fieldsThatHasChanges: EditEthKVStoreValuesMutationData = {}; + Object.values(EthKVStoreKeys).forEach((key) => { + const newFiledData = newData[key]; + const initialFiledData = initialData[key]; + + if (Array.isArray(newFiledData) && Array.isArray(initialFiledData)) { + if ( + newFiledData.sort().toString() === initialFiledData.sort().toString() + ) { + return; + } + Object.assign(fieldsThatHasChanges, { [key]: newFiledData.toString() }); + return; + } + + if ( + typeof newFiledData === 'number' && + newFiledData.toString() !== initialFiledData?.toString() + ) { + Object.assign(fieldsThatHasChanges, { [key]: newFiledData }); + return; + } + + // eslint-disable-next-line eqeqeq -- expect to do conversion for this compare + if (newFiledData != initialFiledData) { + Object.assign(fieldsThatHasChanges, { [key]: newFiledData }); + } + }); + + if (!Object.values(fieldsThatHasChanges).length) { + ctx.addIssue({ + code: z.ZodIssueCode.custom, + message: t('operator.addKeysPage.editKeysForm.error'), + path: ['form'], + }); + } + return fieldsThatHasChanges; + }); +}; diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/utils/index.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/utils/index.ts index 8c9632fa1b..de71a83342 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/utils/index.ts +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/utils/index.ts @@ -1,2 +1,4 @@ export * from './sort-form'; export * from './staked-amount-formatter'; +export * from './add-stake-amount-call-arguments-schema'; +export * from './eth-kv-store-values-mutation-schema'; diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-keys.page.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-keys.page.tsx index 884fce8c01..5e6c685e06 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-keys.page.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-keys.page.tsx @@ -15,12 +15,10 @@ import { type GetEthKVStoreValuesSuccessResponse, useGetKeys, } from '@/modules/operator/hooks'; -import { - type EditEthKVStoreValuesMutationData, - useEditExistingKeysMutationState, -} from '../hooks'; import { PendingKeysForm } from '../components/add-keys'; import { ExistingKeysForm } from '../components/add-keys/existing-keys-form'; +import { useEditExistingKeysMutationState } from '../hooks'; +import { type EditEthKVStoreValuesMutationData } from '../utils'; export type UseFormResult = UseFormReturn< GetEthKVStoreValuesSuccessResponse, @@ -57,12 +55,12 @@ export function AddKeysOperatorPage() { return ( -
+ ); } -export function Form({ +function AddKeysForm({ keysData, }: Readonly<{ keysData: GetEthKVStoreValuesSuccessResponse; From 63047babbbe1f94013796961565b73b70c120a77 Mon Sep 17 00:00:00 2001 From: mpblocky <185767042+mpblocky@users.noreply.github.com> Date: Thu, 6 Mar 2025 10:48:20 +0100 Subject: [PATCH 4/7] chore: move add keys form def from add keys page --- .../components/add-keys/add-keys-form.tsx | 55 +++++++++++++++++++ .../operator/components/add-keys/index.ts | 3 +- .../signup/operator/views/add-keys.page.tsx | 54 +----------------- 3 files changed, 57 insertions(+), 55 deletions(-) create mode 100644 packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/add-keys-form.tsx diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/add-keys-form.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/add-keys-form.tsx new file mode 100644 index 0000000000..10e66898fc --- /dev/null +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/add-keys-form.tsx @@ -0,0 +1,55 @@ +import { Grid } from '@mui/material'; +import { t } from 'i18next'; +import { Link } from 'react-router-dom'; +import { routerPaths } from '@/router/router-paths'; +import { Button } from '@/shared/components/ui/button'; +import { type GetEthKVStoreValuesSuccessResponse } from '@/modules/operator/hooks'; +import { ExistingKeysForm } from './existing-keys-form'; +import { PendingKeysForm } from './pending-keys-form'; + +export function AddKeysForm({ + keysData, +}: Readonly<{ + keysData: GetEthKVStoreValuesSuccessResponse; +}>) { + const hasSomeNotEmptyKeys = + Object.values(keysData).filter(Boolean).length > 0; + const hasSomePendingKeys = + Object.values(keysData).filter((value) => { + /** + * This check is necessary because TS can't infer + * "undefined" from optional object's property + */ + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (value === undefined) { + return false; + } + + return value.length === 0; + }).length > 0; + + return ( + +
+ {hasSomeNotEmptyKeys ? : null} + {hasSomePendingKeys ? : null} + {hasSomeNotEmptyKeys && !hasSomePendingKeys ? ( + + ) : null} +
+
+ ); +} diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/index.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/index.ts index 71b0db96f8..91e7474c70 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/index.ts +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/index.ts @@ -1,2 +1 @@ -export * from './edit-existing-keys-form'; -export * from './pending-keys-form'; +export * from './add-keys-form'; diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-keys.page.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-keys.page.tsx index 5e6c685e06..c0aa00b32c 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-keys.page.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-keys.page.tsx @@ -1,24 +1,19 @@ -import { Grid } from '@mui/material'; import type { UseFormReturn } from 'react-hook-form'; import { t } from 'i18next'; -import { Link } from 'react-router-dom'; import { PageCardError, PageCardLoader, PageCard, } from '@/shared/components/ui/page-card'; import { getErrorMessageForError, jsonRpcErrorHandler } from '@/shared/errors'; -import { routerPaths } from '@/router/router-paths'; -import { Button } from '@/shared/components/ui/button'; import { Alert } from '@/shared/components/ui/alert'; import { type GetEthKVStoreValuesSuccessResponse, useGetKeys, } from '@/modules/operator/hooks'; -import { PendingKeysForm } from '../components/add-keys'; -import { ExistingKeysForm } from '../components/add-keys/existing-keys-form'; import { useEditExistingKeysMutationState } from '../hooks'; import { type EditEthKVStoreValuesMutationData } from '../utils'; +import { AddKeysForm } from '../components/add-keys'; export type UseFormResult = UseFormReturn< GetEthKVStoreValuesSuccessResponse, @@ -59,50 +54,3 @@ export function AddKeysOperatorPage() { ); } - -function AddKeysForm({ - keysData, -}: Readonly<{ - keysData: GetEthKVStoreValuesSuccessResponse; -}>) { - const hasSomeNotEmptyKeys = - Object.values(keysData).filter(Boolean).length > 0; - const hasSomePendingKeys = - Object.values(keysData).filter((value) => { - /** - * This check is necessary because TS can't infer - * "undefined" from optional object's property - */ - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - if (value === undefined) { - return false; - } - - return value.length === 0; - }).length > 0; - - return ( - -
- {hasSomeNotEmptyKeys ? : null} - {hasSomePendingKeys ? : null} - {hasSomeNotEmptyKeys && !hasSomePendingKeys ? ( - - ) : null} -
-
- ); -} From e09f3397600176b20a82150a66518c4e17d21f72 Mon Sep 17 00:00:00 2001 From: mpblocky <185767042+mpblocky@users.noreply.github.com> Date: Thu, 6 Mar 2025 10:53:37 +0100 Subject: [PATCH 5/7] fix: typo --- packages/apps/human-app/frontend/src/shared/i18n/en.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/apps/human-app/frontend/src/shared/i18n/en.json b/packages/apps/human-app/frontend/src/shared/i18n/en.json index 08b9509a74..cb936198bf 100644 --- a/packages/apps/human-app/frontend/src/shared/i18n/en.json +++ b/packages/apps/human-app/frontend/src/shared/i18n/en.json @@ -342,7 +342,7 @@ }, "connectWallet": { "title": "Setup Operator", - "description": "Please use the button bellow to connect your wallet and sign up as an operator.", + "description": "Please use the button below to connect your wallet and sign up as an operator.", "connect": "Connect Wallet", "disconnect": "Disconnect", "successAlert": "Wallet successfully connected", @@ -352,7 +352,7 @@ "title": "Setup Operator", "formHeader": "Stake", "label": "Staked amount", - "description": "Please add bellow the amount to stake", + "description": "Please add the amount to stake below", "actionBtn": "Add Stake", "nextBtn": "Next", "skipBtn": "Skip" @@ -362,7 +362,7 @@ "skipBtn": "Skip", "nextBtn": "Next", "label": "Stake amount", - "description": "Please add bellow the amount to stake", + "description": "Please add the amount to stake below", "successAlert": "You have successfully staked {{amount}} HMT", "invalidDecimals": "Incorrect decimal expansion. HMT token has {{decimals}} decimals" }, From 7570509930489e989cdd0ecf65e0a0fc5851cb93 Mon Sep 17 00:00:00 2001 From: mpblocky <185767042+mpblocky@users.noreply.github.com> Date: Fri, 7 Mar 2025 10:43:54 +0100 Subject: [PATCH 6/7] fix: simplify filters, conditions, move schemas to separate folders --- .../components/add-keys/add-keys-form.tsx | 26 ++++++++-------- .../add-keys/existing-keys-form.tsx | 2 +- .../components/add-keys/pending-keys-form.tsx | 2 +- .../components/add-stake/stake-form.tsx | 2 +- .../hooks/use-add-stake-mutation-state.ts | 2 +- .../signup/operator/hooks/use-add-stake.ts | 2 +- .../operator/hooks/use-edit-existing-keys.ts | 2 +- .../add-stake-amount-call-arguments-schema.ts | 0 .../eth-kv-store-values-mutation-schema.ts | 0 .../modules/signup/operator/schema/index.ts | 2 ++ .../modules/signup/operator/utils/index.ts | 2 -- .../signup/operator/views/add-stake.page.tsx | 12 +++++--- .../operator/views/connect-wallet.page.tsx | 30 +++++++++---------- 13 files changed, 42 insertions(+), 42 deletions(-) rename packages/apps/human-app/frontend/src/modules/signup/operator/{utils => schema}/add-stake-amount-call-arguments-schema.ts (100%) rename packages/apps/human-app/frontend/src/modules/signup/operator/{utils => schema}/eth-kv-store-values-mutation-schema.ts (100%) create mode 100644 packages/apps/human-app/frontend/src/modules/signup/operator/schema/index.ts diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/add-keys-form.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/add-keys-form.tsx index 10e66898fc..ac96f9ab04 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/add-keys-form.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/add-keys-form.tsx @@ -12,21 +12,19 @@ export function AddKeysForm({ }: Readonly<{ keysData: GetEthKVStoreValuesSuccessResponse; }>) { - const hasSomeNotEmptyKeys = - Object.values(keysData).filter(Boolean).length > 0; - const hasSomePendingKeys = - Object.values(keysData).filter((value) => { - /** - * This check is necessary because TS can't infer - * "undefined" from optional object's property - */ - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - if (value === undefined) { - return false; - } + const hasSomeNotEmptyKeys = Object.values(keysData).some(Boolean); + const hasSomePendingKeys = Object.values(keysData).some((value) => { + /** + * This check is necessary because TS can't infer + * "undefined" from optional object's property + */ + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (value === undefined) { + return false; + } - return value.length === 0; - }).length > 0; + return value.length === 0; + }); return ( diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/existing-keys-form.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/existing-keys-form.tsx index 6f6ecc9875..f393a97be5 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/existing-keys-form.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/existing-keys-form.tsx @@ -9,7 +9,7 @@ import { useEditExistingKeysMutation } from '../../hooks'; import { type EditEthKVStoreValuesMutationData, getEditEthKVStoreValuesMutationSchema, -} from '../../utils'; +} from '../../schema'; import { EditExistingKeysForm } from './edit-existing-keys-form'; import { ExistingKeys } from './existing-keys'; diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/pending-keys-form.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/pending-keys-form.tsx index 54fd0ea793..75bb5e1d2a 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/pending-keys-form.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-keys/pending-keys-form.tsx @@ -8,7 +8,7 @@ import { useEditExistingKeysMutation } from '../../hooks'; import { type EditEthKVStoreValuesMutationData, setEthKVStoreValuesMutationSchema, -} from '../../utils'; +} from '../../schema'; import { EditPendingKeysForm } from './edit-pending-keys-form'; export function PendingKeysForm({ diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-stake/stake-form.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-stake/stake-form.tsx index 027fa93e20..22ba036ff1 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-stake/stake-form.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/components/add-stake/stake-form.tsx @@ -15,7 +15,7 @@ import { useAddStake } from '../../hooks'; import { type AddStakeCallArguments, addStakeAmountCallArgumentsSchema, -} from '../../utils'; +} from '../../schema'; export function StakeForm({ decimals, diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-add-stake-mutation-state.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-add-stake-mutation-state.ts index 3cfecb66a7..240b1bfaf9 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-add-stake-mutation-state.ts +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-add-stake-mutation-state.ts @@ -3,7 +3,7 @@ import { useMutationState } from '@tanstack/react-query'; import type { MutationState } from '@tanstack/react-query'; import { useConnectedWallet } from '@/shared/contexts/wallet-connect'; import type { ResponseError } from '@/shared/types/global.type'; -import { type AddStakeCallArguments } from '../utils'; +import { type AddStakeCallArguments } from '../schema'; export function useAddStakeMutationState() { const { address } = useConnectedWallet(); diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-add-stake.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-add-stake.ts index 352573f09d..f6ca7cd4fe 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-add-stake.ts +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-add-stake.ts @@ -8,7 +8,7 @@ import { hmTokenApprove } from '@/modules/smart-contracts/HMToken/hm-token-appro import type { ContractCallArguments } from '@/modules/smart-contracts/types'; import { routerPaths } from '@/router/router-paths'; import { hmTokenAllowance } from '@/modules/smart-contracts/HMToken/hm-token-allowance'; -import { type AddStakeCallArguments } from '../utils'; +import { type AddStakeCallArguments } from '../schema'; import { useHMTokenDecimals } from './use-human-token-decimals'; async function addStakeMutationFn( diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-edit-existing-keys.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-edit-existing-keys.ts index 6e8e01b100..17c989fff0 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-edit-existing-keys.ts +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/hooks/use-edit-existing-keys.ts @@ -10,7 +10,7 @@ import { routerPaths } from '@/router/router-paths'; import { useConnectedWallet } from '@/shared/contexts/wallet-connect'; import { ethKvStoreSetBulk } from '@/modules/smart-contracts/EthKVStore/eth-kv-store-set-bulk'; import { getContractAddress } from '@/modules/smart-contracts/get-contract-address'; -import { type EditEthKVStoreValuesMutationData } from '../utils'; +import { type EditEthKVStoreValuesMutationData } from '../schema'; function editExistingKeysMutationFn( formData: EditEthKVStoreValuesMutationData, diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/utils/add-stake-amount-call-arguments-schema.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/schema/add-stake-amount-call-arguments-schema.ts similarity index 100% rename from packages/apps/human-app/frontend/src/modules/signup/operator/utils/add-stake-amount-call-arguments-schema.ts rename to packages/apps/human-app/frontend/src/modules/signup/operator/schema/add-stake-amount-call-arguments-schema.ts diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/utils/eth-kv-store-values-mutation-schema.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/schema/eth-kv-store-values-mutation-schema.ts similarity index 100% rename from packages/apps/human-app/frontend/src/modules/signup/operator/utils/eth-kv-store-values-mutation-schema.ts rename to packages/apps/human-app/frontend/src/modules/signup/operator/schema/eth-kv-store-values-mutation-schema.ts diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/schema/index.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/schema/index.ts new file mode 100644 index 0000000000..0eeb42e505 --- /dev/null +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/schema/index.ts @@ -0,0 +1,2 @@ +export * from './add-stake-amount-call-arguments-schema'; +export * from './eth-kv-store-values-mutation-schema'; diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/utils/index.ts b/packages/apps/human-app/frontend/src/modules/signup/operator/utils/index.ts index de71a83342..8c9632fa1b 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/utils/index.ts +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/utils/index.ts @@ -1,4 +1,2 @@ export * from './sort-form'; export * from './staked-amount-formatter'; -export * from './add-stake-amount-call-arguments-schema'; -export * from './eth-kv-store-values-mutation-schema'; diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-stake.page.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-stake.page.tsx index c59d939660..c70abdf43b 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-stake.page.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-stake.page.tsx @@ -28,7 +28,9 @@ export function AddStakeOperatorPage() { error: getStackedAmountError, isPending: isGetStakedAmountPending, } = useGetStakedAmount(); + const addStakeMutationState = useAddStakeMutationState(); + const { data: decimalsData, error: decimalsDataError, @@ -36,14 +38,16 @@ export function AddStakeOperatorPage() { } = useHMTokenDecimals(); const getAlert = () => { - switch (true) { - case Boolean(addStakeMutationState?.error): + if (!addStakeMutationState) return undefined; + + switch (addStakeMutationState.status) { + case 'error': return ( - {getErrorMessageForError(addStakeMutationState?.error)} + {getErrorMessageForError(addStakeMutationState.error)} ); - case addStakeMutationState?.status === 'success': + case 'success': return ( {t('operator.stakeForm.successAlert', { diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/views/connect-wallet.page.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/views/connect-wallet.page.tsx index 08787c134d..a6f89751fc 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/views/connect-wallet.page.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/views/connect-wallet.page.tsx @@ -24,23 +24,21 @@ export function ConnectWalletOperatorPage() { } = useWalletConnect(); const getAlert = () => { - switch (true) { - case web3ProviderStatus === 'error': - return ( - - {getErrorMessageForError(web3ProviderError)} - - ); - case isConnected: - return ( - - {t('operator.connectWallet.successAlert')} - - ); + if (web3ProviderStatus === 'error') + return ( + + {getErrorMessageForError(web3ProviderError)} + + ); - default: - return undefined; - } + if (isConnected) + return ( + + {t('operator.connectWallet.successAlert')} + + ); + + return undefined; }; if (isConnected) { From 94075794374637490faaa7107d0d673a74f2a14d Mon Sep 17 00:00:00 2001 From: Dmitry Nechay Date: Fri, 7 Mar 2025 14:37:17 +0300 Subject: [PATCH 7/7] fix: invalid import --- .../src/modules/signup/operator/views/add-keys.page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-keys.page.tsx b/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-keys.page.tsx index c0aa00b32c..64b60237c5 100644 --- a/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-keys.page.tsx +++ b/packages/apps/human-app/frontend/src/modules/signup/operator/views/add-keys.page.tsx @@ -12,7 +12,7 @@ import { useGetKeys, } from '@/modules/operator/hooks'; import { useEditExistingKeysMutationState } from '../hooks'; -import { type EditEthKVStoreValuesMutationData } from '../utils'; +import { type EditEthKVStoreValuesMutationData } from '../schema'; import { AddKeysForm } from '../components/add-keys'; export type UseFormResult = UseFormReturn<