Skip to content

Commit 42ae513

Browse files
committed
feat: implement the second step of the Spherre account creation process, Account Details
1 parent b752af9 commit 42ae513

File tree

5 files changed

+184
-0
lines changed

5 files changed

+184
-0
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import Header from '../components/Header';
2+
import SecondStepper from '../components/SecondStepper';
3+
import AddShereMembers from '../components/AddSphereMembers';
4+
import ConfigureThreshold from '../components/ConfigureThreshold';
5+
6+
export default function Home() {
7+
return (
8+
<div className="min-h-screen bg-black text-white">
9+
<Header />
10+
{/* Main Content */}
11+
<div className="flex flex-col items-center pt-16 sm:pt-20 md:pt-24 pb-6 sm:pb-8">
12+
{/* Stepper */}
13+
<SecondStepper />
14+
15+
{/* Heading and Description */}
16+
<div className="w-full px-4 sm:w-[456px]">
17+
<h1 className="text-2xl sm:text-3xl md:text-4xl font-bold mb-3 sm:mb-4 text-center">
18+
Add Members to a Multisig Vault
19+
</h1>
20+
<p className="text-gray-400 text-sm sm:text-base text-center mb-6 sm:mb-8 max-w-lg">
21+
Add your team members & customize security settings to fit your team needs.
22+
</p>
23+
</div>
24+
25+
{/* Sphere Review Card and Members Threshold */}
26+
<div className="w-full px-4 flex flex-col items-center space-y-4">
27+
<AddShereMembers />
28+
<ConfigureThreshold />
29+
</div>
30+
</div>
31+
</div>
32+
);
33+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
"use client";
2+
3+
import React, { useState } from 'react';
4+
import Image from 'next/image';
5+
import Delete from '../../public/Images/trash-bin.png'
6+
7+
const AddSphereMembers = () => {
8+
const [members, setMembers] = useState([
9+
'elbbababaahhajaagsahv77278191912a',
10+
'',
11+
]);
12+
13+
const addMember = () => {
14+
setMembers([...members, '']);
15+
};
16+
17+
// Remove a member by index
18+
const removeMember = (index: number) => {
19+
setMembers(members.filter((_, i) => i !== index));
20+
};
21+
22+
// Update a member's address
23+
const updateMember = (index: number, value: string) => {
24+
const updatedMembers = [...members];
25+
updatedMembers[index] = value;
26+
setMembers(updatedMembers);
27+
};
28+
29+
return (
30+
<div className='w-full max-w-md'>
31+
<h1 className="text-lg font-semibold bg-gray-800 text-white rounded-t-lg mb-[-2] p-6">Add Sphere Members</h1>
32+
<div className="w-full max-w-md bg-gray-900 rounded-b-lg p-6">
33+
{/* Member List */}
34+
{members.map((member, index) => (
35+
<div key={index} className="mb-4">
36+
<div className="flex items-center justify-between">
37+
<label className="text-sm text-white mb-1">Member {index + 1}</label>
38+
{members.length > 1 && (
39+
<button
40+
onClick={() => removeMember(index)}
41+
className="text-gray-400 hover:text-gray-200"
42+
>
43+
<Image src ={Delete} alt='' ></Image>
44+
</button>
45+
)}
46+
</div>
47+
<input
48+
type="text"
49+
value={member}
50+
onChange={(e) => updateMember(index, e.target.value)}
51+
placeholder="Enter team member’s address"
52+
className="w-full bg-gray-800 text-white text-sm rounded-lg p-2 border border-gray-700 focus:outline-none focus:border-purple-600"
53+
/>
54+
</div>
55+
))}
56+
57+
<button
58+
onClick={addMember}
59+
className="flex items-center bg-gray-800 w-full p-4 text-center items-center justify-center rounded-lg hover:text-purple-500 text-sm"
60+
>
61+
<span className="mr-1">+</span> Add Member
62+
</button>
63+
</div>
64+
</div>
65+
66+
);
67+
};
68+
69+
export default AddSphereMembers;
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
"use client";
2+
3+
import React, { useState } from 'react';
4+
5+
const ConfigureThreshold = () => {
6+
const [threshold, setThreshold] = useState(1); // Default value of 1
7+
8+
// Handle slider change
9+
const handleThresholdChange = (e: React.ChangeEvent<HTMLInputElement>) => {
10+
setThreshold(Number(e.target.value));
11+
};
12+
13+
return (
14+
<div className="w-full max-w-md bg-gray-900 rounded-lg p-6">
15+
{/* Title */}
16+
<h1 className="text-lg font-semibold text-white mb-2">Configure Threshold</h1>
17+
18+
{/* Description */}
19+
<p className="text-sm text-gray-400 mb-6">
20+
Please select the amount of approvals needed to confirm a transaction.
21+
</p>
22+
23+
{/* Slider */}
24+
<div className="mb-6">
25+
<input
26+
type="range"
27+
min="1"
28+
max="2"
29+
value={threshold}
30+
onChange={handleThresholdChange}
31+
className="w-full h-2 bg-gray-700 rounded-lg appearance-none cursor-pointer"
32+
/>
33+
<div className="flex justify-between mt-2">
34+
<span className="text-sm text-gray-400">1</span>
35+
<span className="text-sm text-gray-400">2</span>
36+
</div>
37+
</div>
38+
39+
{/* Continue Button */}
40+
<button className="w-full py-2 bg-white text-black rounded-lg hover:bg-gray-200">
41+
Continue
42+
</button>
43+
</div>
44+
);
45+
};
46+
47+
export default ConfigureThreshold;
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import React from 'react';
2+
3+
const SecondStepper = () => {
4+
return (
5+
<div className="flex items-center justify-center space-x-4 mt-16 mb-8">
6+
{/* Step 1 */}
7+
<div className="flex flex-col items-center">
8+
<div className="w-8 h-8 bg-gray-600 rounded-full flex items-center justify-center text-white">
9+
1
10+
</div>
11+
<span className="text-gray-400 text-sm mt-2">Account Details</span>
12+
</div>
13+
<div className="w-12 h-0.5 bg-gray-600"></div>
14+
15+
{/* Step 2 */}
16+
<div className="flex flex-col items-center">
17+
<div className="w-8 h-8 bg-purple-600 rounded-full flex items-center justify-center text-white">
18+
2
19+
</div>
20+
<span className="text-gray-400 text-sm mt-2">Member & Threshold</span>
21+
</div>
22+
<div className="w-12 h-0.5 bg-gray-600"></div>
23+
24+
{/* Step 3 (Active) */}
25+
<div className="flex flex-col items-center">
26+
<div className="w-8 h-8 bg-gray-600 rounded-full flex items-center justify-center text-white">
27+
3
28+
</div>
29+
<span className="text-white text-sm mt-2">Confirm & Setup</span>
30+
</div>
31+
</div>
32+
);
33+
};
34+
35+
export default SecondStepper;
498 Bytes
Loading

0 commit comments

Comments
 (0)