feat: connect the seed form together + style it

This commit is contained in:
Juan Di Toro 2023-09-13 01:23:06 +02:00
parent 2f2d795869
commit 3de8ff8f70
3 changed files with 34 additions and 7 deletions

View File

@ -28,6 +28,7 @@
"postcss": "8.4.28", "postcss": "8.4.28",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0", "react-dom": "18.2.0",
"react-hook-form": "^7.46.1",
"tailwind-merge": "^1.14.0", "tailwind-merge": "^1.14.0",
"tailwindcss": "3.3.3", "tailwindcss": "3.3.3",
"tailwindcss-animate": "^1.0.7", "tailwindcss-animate": "^1.0.7",

View File

@ -56,6 +56,9 @@ dependencies:
react-dom: react-dom:
specifier: 18.2.0 specifier: 18.2.0
version: 18.2.0(react@18.2.0) version: 18.2.0(react@18.2.0)
react-hook-form:
specifier: ^7.46.1
version: 7.46.1(react@18.2.0)
tailwind-merge: tailwind-merge:
specifier: ^1.14.0 specifier: ^1.14.0
version: 1.14.0 version: 1.14.0
@ -9536,6 +9539,15 @@ packages:
react-is: 18.1.0 react-is: 18.1.0
dev: true dev: true
/react-hook-form@7.46.1(react@18.2.0):
resolution: {integrity: sha512-0GfI31LRTBd5tqbXMGXT1Rdsv3rnvy0FjEk8Gn9/4tp6+s77T7DPZuGEpBRXOauL+NhyGT5iaXzdIM2R6F/E+w==}
engines: {node: '>=12.22.0'}
peerDependencies:
react: ^16.8.0 || ^17 || ^18
dependencies:
react: 18.2.0
dev: false
/react-inspector@6.0.2(react@18.2.0): /react-inspector@6.0.2(react@18.2.0):
resolution: {integrity: sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==} resolution: {integrity: sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==}
peerDependencies: peerDependencies:

View File

@ -1,6 +1,7 @@
// src/components/sign-in-with-lume.tsx // src/components/sign-in-with-lume.tsx
import React, { useCallback, useMemo } from 'react'; import React, { useCallback, useMemo } from 'react';
import { AnimatePresence, Variant, motion } from 'framer-motion'; import { AnimatePresence, Variant, motion } from 'framer-motion';
import { useForm } from "react-hook-form";
import LumeLogoBg from '@/assets/lume-logo-bg.svg'; import LumeLogoBg from '@/assets/lume-logo-bg.svg';
import { Button } from '@/components/ui/button'; import { Button } from '@/components/ui/button';
@ -68,20 +69,33 @@ const LumeIdentity: React.FC<Props> = ({ onSignIn, onSignUp }) => {
const SeedPhraseForm = useMemo(() => { const SeedPhraseForm = useMemo(() => {
return { return {
render({ phraseLength = 12 }: { phraseLength: number }) { render({ phraseLength = 12 }: { phraseLength: number }) {
return <div className="w-full h-full flex-wrap justify-center items-center gap-2.5 inline-flex"> const { register, handleSubmit, formState: { errors } } = useForm();
const onSubmit = (data: any) => {
console.log(data);
};
return <form onSubmit={handleSubmit(onSubmit)}
className="w-full h-full flex-wrap justify-center items-center gap-2.5 inline-flex">
{Array(phraseLength).fill(null).map((_, index) => { {Array(phraseLength).fill(null).map((_, index) => {
return <div className="justify-center items-center gap-2.5 flex w-[calc(33%-10px)] h-10 rounded border border-neutral-700 relative"> const fieldName = `phrase${index}`;
<input className=" text-white text-lg font-normal leading-normal w-full h-full px-2.5 bg-transparent text-center" /> {/* TODO: Add Support for the real values, this should be its own component */} return (
<span className="left-[6px] top-[-2px] absolute text-neutral-700 text-xs font-normal leading-normal">{index + 1}</span> <div className={`justify-center items-center gap-2.5 flex w-[calc(33%-10px)] h-10 rounded border border-current relative ring-current ${errors[fieldName] ? 'text-red-500' : 'text-neutral-700'}`}>
</div> <input
{...register(fieldName, { required: true })}
className=" text-white text-lg font-normal leading-normal w-full h-full px-2.5 bg-transparent text-center"
/>
<span className="left-[6px] top-0 absolute text-current text-xs font-normal leading-normal">{index + 1}</span>
</div>)
})} })}
</div> <button hidden className='hidden'></button>
</form>
}, },
index: Symbol('seed-phrase-form').toString() index: Symbol('seed-phrase-form').toString()
} }
}, []); }, []);
const [visibleComponent, setVisibleComponent] = React.useState(SubmitButton); const [visibleComponent, setVisibleComponent] = React.useState(SubmitButton as { render: (props: Record<string, any>) => React.ReactElement, index: string });
const isSubmitButtonInView = [SubmitButton.index].includes(visibleComponent.index) const isSubmitButtonInView = [SubmitButton.index].includes(visibleComponent.index)
const isCreatingAccount = [SetupAccountKey.index, SeedPhraseForm.index].includes(visibleComponent.index) const isCreatingAccount = [SetupAccountKey.index, SeedPhraseForm.index].includes(visibleComponent.index)