diff --git a/packages/extension-ui/src/Popup/CreateAccount/CreateAccount.test.tsx b/packages/extension-ui/src/Popup/CreateAccount/CreateAccount.test.tsx index ce216789..a7a53507 100644 --- a/packages/extension-ui/src/Popup/CreateAccount/CreateAccount.test.tsx +++ b/packages/extension-ui/src/Popup/CreateAccount/CreateAccount.test.tsx @@ -85,6 +85,7 @@ describe('Create Account', () => { check(wrapper.find('input[type="checkbox"]')); wrapper.find('button').simulate('click'); await act(flushAllPromises); + wrapper.update(); }); it('only account name input is visible at first', () => { diff --git a/packages/extension-ui/src/components/ValidatedInput.tsx b/packages/extension-ui/src/components/ValidatedInput.tsx index 6a0b5f7a..660e98ad 100644 --- a/packages/extension-ui/src/components/ValidatedInput.tsx +++ b/packages/extension-ui/src/components/ValidatedInput.tsx @@ -6,6 +6,7 @@ import { ThemeProps } from '../types'; import React, { useState, useEffect } from 'react'; import styled from 'styled-components'; +import useIsMounted from '../hooks/useIsMounted'; import { Result, Validator } from '../util/validators'; interface BasicProps { @@ -24,12 +25,13 @@ type Props = T & { function ValidatedInput> ({ className, component: Input, defaultValue, onValidatedChange, validator, ...props }: Props): React.ReactElement> { const [value, setValue] = useState(defaultValue || ''); - const [wasMounted, setWasMounted] = useState(false); const [validationResult, setValidationResult] = useState>(Result.ok('')); + const isMounted = useIsMounted(); useEffect(() => { - if (!wasMounted) { - setWasMounted(true); + // Do not show any error on first mount + if (!isMounted) { + return; } // eslint-disable-next-line @typescript-eslint/no-floating-promises diff --git a/packages/extension-ui/src/hooks/useIsMounted.ts b/packages/extension-ui/src/hooks/useIsMounted.ts new file mode 100644 index 00000000..12e0b93f --- /dev/null +++ b/packages/extension-ui/src/hooks/useIsMounted.ts @@ -0,0 +1,18 @@ +// Copyright 2019-2020 @polkadot/extension-ui authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import { useEffect, useRef } from 'react'; + +export default function useIsMounted (): boolean { + const isMounted = useRef(false); + + useEffect((): () => void => { + isMounted.current = true; + + return (): void => { + isMounted.current = false; + }; + }, []); + + return isMounted.current; +}