diff --git a/core/src/Container.tsx b/core/src/Container.tsx index 6b8f70e..eefe24f 100644 --- a/core/src/Container.tsx +++ b/core/src/Container.tsx @@ -1,18 +1,12 @@ -import React, { useImperativeHandle, useRef } from 'react'; +import React from 'react'; import { LoginProps } from '.'; -export interface ContainerRef { - container?: HTMLDivElement | null; -} - export interface ContainerProps extends LoginProps {} -export const Container = React.forwardRef((props, ref) => { +export const Container = React.forwardRef((props, ref) => { const { className = '', children, ...elmProps } = props; - const container = useRef(null); - useImperativeHandle(ref, () => ({ container: container.current }), [container]); const defaultClassNames = `login-page ${className}`; return ( -
+
{children}
); diff --git a/core/src/index.tsx b/core/src/index.tsx index 2473f41..a3c6f92 100644 --- a/core/src/index.tsx +++ b/core/src/index.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { Provider } from './store'; -import { Container, ContainerRef } from './Container'; +import { Container, ContainerProps } from './Container'; import { Block } from './Block'; import { Textarea } from './Textarea'; import { Select } from './Select'; @@ -18,14 +18,6 @@ export * from './store'; export interface LoginRef {} export interface LoginProps extends React.HTMLAttributes {} -const InternalLogin = (props: LoginProps, ref?: React.ForwardedRef) => { - return ( - - - - ); -}; - type LoginComponent = React.FC> & { Block: typeof Block; Button: typeof Button; @@ -34,7 +26,13 @@ type LoginComponent = React.FC> & { Select: typeof Select; }; -const Login: LoginComponent = React.forwardRef(InternalLogin) as unknown as LoginComponent; +const Login: LoginComponent = React.forwardRef((props, ref) => { + return ( + + + + ); +}) as unknown as LoginComponent; Login.Block = Block; Login.Button = Button; diff --git a/pages/base/src/index.tsx b/pages/base/src/index.tsx index e6bccda..88f4396 100644 --- a/pages/base/src/index.tsx +++ b/pages/base/src/index.tsx @@ -1,5 +1,5 @@ -import { FC, PropsWithChildren, cloneElement, isValidElement } from 'react'; -import { Render, Provider, Container, useStore } from 'react-login-page'; +import { cloneElement, forwardRef, isValidElement } from 'react'; +import { Render, Provider, Container, ContainerProps, useStore } from 'react-login-page'; import { Username } from './control/Username'; import { Password } from './control/Password'; import { Submit } from './control/Submit'; @@ -59,11 +59,8 @@ const RenderLogin = () => { ); }; -const LoginPage: FC>> = ({ - children, - className, - ...divProps -}) => { +const LoginPage = forwardRef((props, ref) => { + const { children, className, ...divProps } = props; return ( @@ -71,15 +68,15 @@ const LoginPage: FC>> = ( <Submit /> - <Container {...divProps} className={`login-page-base ${className || ''}`}> + <Container {...divProps} ref={ref} className={`login-page-base ${className || ''}`}> <RenderLogin /> {children} </Container> </Provider> ); -}; +}); -type LoginComponent = FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> & { +type LoginComponent = typeof LoginPage & { Username: typeof Username; Password: typeof Password; Submit: typeof Submit; diff --git a/pages/page1/src/index.tsx b/pages/page1/src/index.tsx index 1585758..5f50c3a 100644 --- a/pages/page1/src/index.tsx +++ b/pages/page1/src/index.tsx @@ -1,5 +1,5 @@ -import { FC, PropsWithChildren, cloneElement, isValidElement } from 'react'; -import { Render, Provider, Container, useStore } from 'react-login-page'; +import { cloneElement, forwardRef, isValidElement } from 'react'; +import { Render, Provider, Container, useStore, ContainerProps } from 'react-login-page'; import { Username } from './control/Username'; import { Password } from './control/Password'; import { Submit } from './control/Submit'; @@ -58,11 +58,8 @@ const RenderLogin = () => { ); }; -const LoginPage: FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> = ({ - children, - className, - ...divProps -}) => { +const LoginPage = forwardRef<HTMLDivElement, ContainerProps>((props, ref) => { + const { children, className, ...divProps } = props; return ( <Provider> <Username /> @@ -70,15 +67,15 @@ const LoginPage: FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> = ( <Logo /> <Title /> <Submit /> - <Container {...divProps} className={`login-page-1 ${className || ''}`}> + <Container {...divProps} ref={ref} className={`login-page-1 ${className || ''}`}> <RenderLogin /> + {children} </Container> - {children} </Provider> ); -}; +}); -type LoginComponent = FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> & { +type LoginComponent = typeof LoginPage & { Username: typeof Username; Password: typeof Password; Submit: typeof Submit; diff --git a/pages/page10/src/index.tsx b/pages/page10/src/index.tsx index 9373eb9..330d669 100644 --- a/pages/page10/src/index.tsx +++ b/pages/page10/src/index.tsx @@ -1,5 +1,5 @@ -import { FC, Fragment, PropsWithChildren, cloneElement, isValidElement, useState } from 'react'; -import { Render, Provider, Container, useStore } from 'react-login-page'; +import { FC, PropsWithChildren, cloneElement, forwardRef, isValidElement, useState } from 'react'; +import { Render, Provider, Container, useStore, ContainerProps } from 'react-login-page'; import { Email } from './control/login/Email'; import { Password } from './control/login/Password'; import { Submit } from './control/login/Submit'; @@ -139,11 +139,8 @@ const RenderLogin = () => { ); }; -const LoginPage: FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> = ({ - children, - className, - ...divProps -}) => { +const LoginPage = forwardRef<HTMLDivElement, ContainerProps>((props, ref) => { + const { children, className, ...divProps } = props; return ( <Provider> <InnerBox /> @@ -163,15 +160,15 @@ const LoginPage: FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> = ( Signup </Submit> - <Container {...divProps} className={`login-page10 ${className || ''}`}> + <Container {...divProps} ref={ref} className={`login-page10 ${className || ''}`}> <RenderLogin /> {children} </Container> </Provider> ); -}; +}); -type LoginComponent = FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> & { +type LoginComponent = typeof LoginPage & { Email: typeof Email; Password: typeof Password; Submit: typeof Submit; diff --git a/pages/page11/src/index.tsx b/pages/page11/src/index.tsx index 1119f00..b995c17 100644 --- a/pages/page11/src/index.tsx +++ b/pages/page11/src/index.tsx @@ -1,5 +1,5 @@ -import { FC, PropsWithChildren, cloneElement, isValidElement } from 'react'; -import { Render, Provider, Container, useStore } from 'react-login-page'; +import { cloneElement, forwardRef, isValidElement } from 'react'; +import { Render, Provider, Container, useStore, ContainerProps } from 'react-login-page'; import { Username } from './control/Username'; import { Password } from './control/Password'; import { Submit } from './control/Submit'; @@ -64,11 +64,8 @@ const RenderLogin = () => { ); }; -const LoginPage: FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> = ({ - children, - className, - ...divProps -}) => { +const LoginPage = forwardRef<HTMLDivElement, ContainerProps>((props, ref) => { + const { children, className, ...divProps } = props; return ( <Provider> <Username label="Username" /> @@ -77,15 +74,15 @@ const LoginPage: FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> = ( <Logo /> <Title /> <Banner /> - <Container {...divProps} className={`login-page11 ${className || ''}`}> + <Container {...divProps} ref={ref} className={`login-page11 ${className || ''}`}> <RenderLogin /> {children} </Container> </Provider> ); -}; +}); -type LoginComponent = FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> & { +type LoginComponent = typeof LoginPage & { Username: typeof Username; Password: typeof Password; Submit: typeof Submit; diff --git a/pages/page2/src/index.tsx b/pages/page2/src/index.tsx index 2186f33..7d552f3 100644 --- a/pages/page2/src/index.tsx +++ b/pages/page2/src/index.tsx @@ -1,5 +1,5 @@ -import { FC, PropsWithChildren, cloneElement, isValidElement } from 'react'; -import { Render, Provider, Container, useStore } from 'react-login-page'; +import { cloneElement, forwardRef, isValidElement } from 'react'; +import { Render, Provider, Container, useStore, ContainerProps } from 'react-login-page'; import { Email } from './control/Email'; import { Password } from './control/Password'; import { Submit } from './control/Submit'; @@ -61,11 +61,8 @@ const RenderLogin = () => { ); }; -const LoginPage: FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> = ({ - children, - className, - ...divProps -}) => { +const LoginPage = forwardRef<HTMLDivElement, ContainerProps>((props, ref) => { + const { children, className, ...divProps } = props; return ( <Provider> <Banner /> @@ -74,15 +71,15 @@ const LoginPage: FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> = ( <Logo /> <Title /> <Submit /> - <Container {...divProps} className={`login-page2 ${className || ''}`}> + <Container {...divProps} ref={ref} className={`login-page2 ${className || ''}`}> <RenderLogin /> </Container> {children} </Provider> ); -}; +}); -type LoginComponent = FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> & { +type LoginComponent = typeof LoginPage & { Email: typeof Email; Password: typeof Password; Submit: typeof Submit; diff --git a/pages/page3/src/index.tsx b/pages/page3/src/index.tsx index 474d27c..aeb2588 100644 --- a/pages/page3/src/index.tsx +++ b/pages/page3/src/index.tsx @@ -1,5 +1,5 @@ -import { FC, PropsWithChildren, cloneElement, isValidElement } from 'react'; -import { Render, Provider, Container, useStore } from 'react-login-page'; +import { cloneElement, forwardRef, isValidElement } from 'react'; +import { Render, Provider, Container, useStore, ContainerProps } from 'react-login-page'; import { Email } from './control/Email'; import { Password } from './control/Password'; import { Submit } from './control/Submit'; @@ -70,11 +70,8 @@ const RenderLogin = () => { ); }; -const LoginPage: FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> = ({ - children, - className, - ...divProps -}) => { +const LoginPage = forwardRef<HTMLDivElement, ContainerProps>((props, ref) => { + const { children, className, ...divProps } = props; return ( <Provider> <Banner /> @@ -85,15 +82,15 @@ const LoginPage: FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> = ( <Welcome /> <Submit /> <ButtonAfter /> - <Container {...divProps} className={`login-page3 ${className || ''}`}> + <Container {...divProps} ref={ref} className={`login-page3 ${className || ''}`}> <RenderLogin /> + {children} </Container> - {children} </Provider> ); -}; +}); -type LoginComponent = FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> & { +type LoginComponent = typeof LoginPage & { Email: typeof Email; Password: typeof Password; Submit: typeof Submit; diff --git a/pages/page4/src/index.tsx b/pages/page4/src/index.tsx index f41a06f..7cd837f 100644 --- a/pages/page4/src/index.tsx +++ b/pages/page4/src/index.tsx @@ -1,5 +1,5 @@ -import { FC, PropsWithChildren, cloneElement, isValidElement } from 'react'; -import { Render, Provider, Container, useStore } from 'react-login-page'; +import { cloneElement, forwardRef, isValidElement } from 'react'; +import { Render, Provider, Container, useStore, ContainerProps } from 'react-login-page'; import { Email } from './control/Email'; import { Password } from './control/Password'; import { Submit } from './control/Submit'; @@ -68,11 +68,8 @@ const RenderLogin = () => { ); }; -const LoginPage: FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> = ({ - children, - className, - ...divProps -}) => { +const LoginPage = forwardRef<HTMLDivElement, ContainerProps>((props, ref) => { + const { children, className, ...divProps } = props; return ( <Provider> <Email /> @@ -81,15 +78,15 @@ const LoginPage: FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> = ( <Title /> <Title /> <Submit /> - <Container {...divProps} className={`login-page4 ${className || ''}`}> + <Container {...divProps} ref={ref} className={`login-page4 ${className || ''}`}> <RenderLogin /> </Container> {children} </Provider> ); -}; +}); -type LoginComponent = FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> & { +type LoginComponent = typeof LoginPage & { Email: typeof Email; Password: typeof Password; Submit: typeof Submit; diff --git a/pages/page5/src/index.tsx b/pages/page5/src/index.tsx index 30ebb67..b5a970c 100644 --- a/pages/page5/src/index.tsx +++ b/pages/page5/src/index.tsx @@ -1,5 +1,5 @@ -import { FC, PropsWithChildren, cloneElement, isValidElement } from 'react'; -import { Render, Provider, Container, useStore } from 'react-login-page'; +import { cloneElement, forwardRef, isValidElement } from 'react'; +import { Render, Provider, Container, useStore, ContainerProps } from 'react-login-page'; import { Username } from './control/Username'; import { Password } from './control/Password'; import { Submit } from './control/Submit'; @@ -58,11 +58,8 @@ const RenderLogin = () => { ); }; -const LoginPage: FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> = ({ - children, - className, - ...divProps -}) => { +const LoginPage = forwardRef<HTMLDivElement, ContainerProps>((props, ref) => { + const { children, className, ...divProps } = props; return ( <Provider> <Username /> @@ -70,15 +67,15 @@ const LoginPage: FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> = ( <Logo /> <Title /> <Submit /> - <Container {...divProps} className={`login-page5 ${className || ''}`}> + <Container {...divProps} ref={ref} className={`login-page5 ${className || ''}`}> <RenderLogin /> + {children} </Container> - {children} </Provider> ); -}; +}); -type LoginComponent = FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> & { +type LoginComponent = typeof LoginPage & { Username: typeof Username; Password: typeof Password; Submit: typeof Submit; diff --git a/pages/page6/src/index.tsx b/pages/page6/src/index.tsx index 2b9b110..29ba1a1 100644 --- a/pages/page6/src/index.tsx +++ b/pages/page6/src/index.tsx @@ -1,5 +1,5 @@ -import { FC, PropsWithChildren, cloneElement, isValidElement } from 'react'; -import { Render, Provider, Container, useStore } from 'react-login-page'; +import { FC, PropsWithChildren, cloneElement, forwardRef, isValidElement } from 'react'; +import { Render, Provider, Container, useStore, ContainerProps } from 'react-login-page'; import { Username } from './control/Username'; import { Password } from './control/Password'; import { Submit } from './control/Submit'; @@ -63,11 +63,8 @@ const RenderLogin = () => { ); }; -const LoginPage: FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> = ({ - children, - className, - ...divProps -}) => { +const LoginPage = forwardRef<HTMLDivElement, ContainerProps>((props, ref) => { + const { children, className, ...divProps } = props; return ( <Provider> <Username /> @@ -75,15 +72,15 @@ const LoginPage: FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> = ( <Logo /> <Title /> <Submit /> - <Container {...divProps} className={`login-page6 ${className || ''}`}> + <Container {...divProps} ref={ref} className={`login-page6 ${className || ''}`}> <RenderLogin /> + {children} </Container> - {children} </Provider> ); -}; +}); -type LoginComponent = FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> & { +type LoginComponent = typeof LoginPage & { Username: typeof Username; Password: typeof Password; Submit: typeof Submit; diff --git a/pages/page7/src/index.tsx b/pages/page7/src/index.tsx index 3aff666..211111a 100644 --- a/pages/page7/src/index.tsx +++ b/pages/page7/src/index.tsx @@ -1,5 +1,5 @@ -import { FC, PropsWithChildren, cloneElement, isValidElement } from 'react'; -import { Render, Provider, Container, useStore } from 'react-login-page'; +import { cloneElement, forwardRef, isValidElement } from 'react'; +import { Render, Provider, Container, useStore, ContainerProps } from 'react-login-page'; import { Username } from './control/Username'; import { Password } from './control/Password'; import { Submit } from './control/Submit'; @@ -75,11 +75,8 @@ const RenderLogin = () => { ); }; -const LoginPage: FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> = ({ - children, - className, - ...divProps -}) => { +const LoginPage = forwardRef<HTMLDivElement, ContainerProps>((props, ref) => { + const { children, className, ...divProps } = props; return ( <Provider> <Username /> @@ -87,15 +84,15 @@ const LoginPage: FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> = ( <Logo /> <Title /> <Submit /> - <Container {...divProps} className={`login-page7 ${className || ''}`}> + <Container {...divProps} ref={ref} className={`login-page7 ${className || ''}`}> <RenderLogin /> {children} </Container> </Provider> ); -}; +}); -type LoginComponent = FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> & { +type LoginComponent = typeof LoginPage & { Username: typeof Username; Password: typeof Password; Submit: typeof Submit; diff --git a/pages/page8/src/index.tsx b/pages/page8/src/index.tsx index 5864640..a612f9f 100644 --- a/pages/page8/src/index.tsx +++ b/pages/page8/src/index.tsx @@ -1,5 +1,5 @@ -import { FC, PropsWithChildren, cloneElement, isValidElement, useState } from 'react'; -import { Render, Provider, Container, useStore } from 'react-login-page'; +import { FC, PropsWithChildren, cloneElement, forwardRef, isValidElement, useState } from 'react'; +import { Render, Provider, Container, useStore, ContainerProps } from 'react-login-page'; import { Username } from './control/login/Username'; import { Password } from './control/login/Password'; import { Submit } from './control/login/Submit'; @@ -114,11 +114,8 @@ const RenderLogin = () => { ); }; -const LoginPage: FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> = ({ - children, - className, - ...divProps -}) => { +const LoginPage = forwardRef<HTMLDivElement, ContainerProps>((props, ref) => { + const { children, className, ...divProps } = props; return ( <Provider> <Title /> @@ -135,16 +132,15 @@ const LoginPage: FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> = ( <Submit keyname="signup-submit" panel="signup"> Signup </Submit> - <Container {...divProps} className={`login-page8 ${className || ''}`}> <RenderLogin /> {children} </Container> </Provider> ); -}; +}); -type LoginComponent = FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> & { +type LoginComponent = typeof LoginPage & { Username: typeof Username; Password: typeof Password; Submit: typeof Submit; diff --git a/pages/page9/src/index.tsx b/pages/page9/src/index.tsx index a70755d..1ad10b2 100644 --- a/pages/page9/src/index.tsx +++ b/pages/page9/src/index.tsx @@ -1,5 +1,5 @@ -import { FC, PropsWithChildren, cloneElement, isValidElement } from 'react'; -import { Render, Provider, Container, useStore } from 'react-login-page'; +import { FC, PropsWithChildren, cloneElement, forwardRef, isValidElement } from 'react'; +import { Render, Provider, Container, useStore, ContainerProps } from 'react-login-page'; import { Username } from './control/Username'; import { Password } from './control/Password'; import { Submit } from './control/Submit'; @@ -57,11 +57,8 @@ const RenderLogin = () => { ); }; -const LoginPage: FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> = ({ - children, - className, - ...divProps -}) => { +const LoginPage = forwardRef<HTMLDivElement, ContainerProps>((props, ref) => { + const { children, className, ...divProps } = props; return ( <Provider> <Username /> @@ -69,15 +66,15 @@ const LoginPage: FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> = ( <Logo /> <Title /> <Submit /> - <Container {...divProps} className={`login-page9 ${className || ''}`}> + <Container {...divProps} ref={ref} className={`login-page9 ${className || ''}`}> <RenderLogin /> {children} </Container> </Provider> ); -}; +}); -type LoginComponent = FC<PropsWithChildren<React.HTMLAttributes<HTMLDivElement>>> & { +type LoginComponent = typeof LoginPage & { Username: typeof Username; Password: typeof Password; Submit: typeof Submit;