mirror of
https://github.com/luxfi/explore.git
synced 2026-09-24 00:28:18 +00:00
* simple profile button and auth modal layout * connect email and code screens to API * add screens to modal for wallet authentication * migrate to pin input * user profile menu * refactor otp field * fix passing set-cookie from api response * add wallet info into profile menu * add mobile menu * show connected wallet address in button * my profile page re-design * custom behaviour of connect button on dapp page * style pin input * add logout * handle case when account is disabled * handle case when wc is disabled * remove old components * refactoring * workflow to link wallet or email to account * link wallet from profile * show better OTP code errors * add email alert on watchlist and verified addresses pages * deprecate env and remove old code * remove code for unverified email page * add auth guard to address action items * move useRedirectForInvalidAuthToken hook * add mixpanel events * refetch csrf token after login and fix connect wallet from contract page * Add NEXT_PUBLIC_RE_CAPTCHA_V3_APP_SITE_KEY env * migrate to reCAPTCHA v3 * resend code and change email from profile page * better wallet sign-in message error * fix demo envs * update some screenshots * profile button design fixes * fix behaviour "connect wallet" button on contract page * fix linking email and wallet to existing account * bug fixes * restore the login page * update screenshots * tests for auth modal and user profile * add name field to profile page and write some tests * [skip ci] clean up and more tests * update texts * change text once more * fix verified email checkmark behaviour * pass api error to the toast while signing in with wallet * [skip ci] disable email field on profile page * bug fixes * update screenshot * Blockscout account V2 Fixes #2029 * fix texts and button paddings * Form fields refactoring (#2320) * text and address fields for watchlist form * checkbox field component * refactor private tags form * refactor api keys and custom abi * refactor verifiy address and token info forms (pt. 1) * refactor token info forms (pt. 2) * refactor token info forms (pt. 3) * refactor public tags form * refactor contract verification form * refactor contract audit form * refactor auth, profile and csv export forms * renaming and moving * more refactoring and test fixes --------- Co-authored-by: aagaev <[email protected]>
72 lines
2.5 KiB
TypeScript
72 lines
2.5 KiB
TypeScript
import { FormControl, useToken, useColorMode } from '@chakra-ui/react';
|
|
import type { CSSObjectWithLabel, GroupBase, SingleValue, MultiValue, AsyncProps, Props as SelectProps } from 'chakra-react-select';
|
|
import { Select, AsyncSelect } from 'chakra-react-select';
|
|
import React from 'react';
|
|
import type { FieldError, FieldErrorsImpl, Merge } from 'react-hook-form';
|
|
|
|
import type { Option } from './types';
|
|
|
|
import FormInputPlaceholder from 'ui/shared/forms/inputs/FormInputPlaceholder';
|
|
import { getChakraStyles } from 'ui/shared/forms/inputs/select/utils';
|
|
|
|
interface CommonProps {
|
|
error?: Merge<FieldError, FieldErrorsImpl<Option>> | undefined;
|
|
placeholderIcon?: React.ReactNode;
|
|
}
|
|
|
|
interface RegularSelectProps extends SelectProps<Option, boolean, GroupBase<Option>>, CommonProps {
|
|
isAsync?: false;
|
|
onChange: (newValue: SingleValue<Option> | MultiValue<Option>) => void;
|
|
}
|
|
|
|
interface AsyncSelectProps extends AsyncProps<Option, boolean, GroupBase<Option>>, CommonProps {
|
|
isAsync: true;
|
|
onChange: (newValue: SingleValue<Option> | MultiValue<Option>) => void;
|
|
}
|
|
|
|
export type Props = RegularSelectProps | AsyncSelectProps;
|
|
|
|
const FancySelect = (props: Props, ref: React.LegacyRef<HTMLDivElement>) => {
|
|
const menuZIndex = useToken('zIndices', 'dropdown');
|
|
const { colorMode } = useColorMode();
|
|
|
|
const styles = React.useMemo(() => ({
|
|
menuPortal: (provided: CSSObjectWithLabel) => ({ ...provided, zIndex: menuZIndex }),
|
|
}), [ menuZIndex ]);
|
|
|
|
const chakraStyles = React.useMemo(() => getChakraStyles(colorMode), [ colorMode ]);
|
|
|
|
const SelectComponent = props.isAsync ? AsyncSelect : Select;
|
|
|
|
return (
|
|
<FormControl
|
|
variant="floating"
|
|
size={ props.size || 'md' }
|
|
isRequired={ props.isRequired }
|
|
ref={ ref }
|
|
{ ...(props.error ? { 'aria-invalid': true } : {}) }
|
|
{ ...(props.isDisabled ? { 'aria-disabled': true } : {}) }
|
|
{ ...(props.value ? { 'data-active': true } : {}) }
|
|
>
|
|
<SelectComponent
|
|
{ ...props }
|
|
size={ props.size || 'md' }
|
|
menuPortalTarget={ window.document.body }
|
|
placeholder=""
|
|
styles={ styles }
|
|
chakraStyles={ chakraStyles }
|
|
isInvalid={ Boolean(props.error) }
|
|
useBasicStyles
|
|
/>
|
|
<FormInputPlaceholder
|
|
text={ typeof props.placeholder === 'string' ? props.placeholder : '' }
|
|
icon={ props.placeholderIcon }
|
|
error={ props.error }
|
|
isFancy
|
|
/>
|
|
</FormControl>
|
|
);
|
|
};
|
|
|
|
export default React.memo(React.forwardRef(FancySelect));
|