diff --git a/src/components/connect-button.tsx b/src/components/connect-button.tsx index 7b2ceed8f6..1473d7e88e 100644 --- a/src/components/connect-button.tsx +++ b/src/components/connect-button.tsx @@ -1,8 +1,9 @@ -import React from 'react'; +import React, { useState } from 'react'; import { useCurrentUser } from '@site/src/hooks/use-current-user'; import { Button } from '@site/src/ui/design-system/src/lib/Components/Button'; import { useIsMobile } from '@site/src/hooks/use-is-mobile'; import Dropdown from '@site/src/ui/design-system/src/lib/Components/Dropdown'; +import ProgressModal from '@site/src/components/progress-modal'; const shortenAddress = (address: string, isMobile: boolean) => { if (!address) return ''; @@ -12,6 +13,15 @@ const shortenAddress = (address: string, isMobile: boolean) => { const ConnectButton: React.FC = () => { const { user, logIn, logOut } = useCurrentUser(); const isMobile = useIsMobile(); + const [isModalOpen, setIsModalOpen] = useState(false); + + const handleOpenProgress = () => { + setIsModalOpen(true); + }; + + const handleCloseModal = () => { + setIsModalOpen(false); + }; if (!user.loggedIn) { return ( @@ -22,13 +32,19 @@ const ConnectButton: React.FC = () => { } const dropdownItems = [ + { label: 'Progress', onClick: handleOpenProgress }, { label: 'Disconnect', onClick: logOut }, ]; const fullAddress = user.addr ?? 'Unknown'; const displayAddress = shortenAddress(fullAddress, isMobile); - return ; + return ( + <> + + + + ) }; export default ConnectButton; diff --git a/src/components/progress-checklist.tsx b/src/components/progress-checklist.tsx new file mode 100644 index 0000000000..d9dc6e06bd --- /dev/null +++ b/src/components/progress-checklist.tsx @@ -0,0 +1,37 @@ +import React from "react"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faCheckSquare, faSquare } from "@fortawesome/free-solid-svg-icons"; + +interface ChecklistItem { + label: string; + completed: boolean; +} + +interface ChecklistProps { + title: string; + items: ChecklistItem[]; +} + +const Checklist: React.FC = ({ title, items }) => { + return ( +
+

{title}

+
    + {items.map((item, index) => ( +
  • + + + + {item.label} +
  • + ))} +
+
+ ); +}; + +export default Checklist; diff --git a/src/components/progress-modal.tsx b/src/components/progress-modal.tsx new file mode 100644 index 0000000000..b9b38c6f82 --- /dev/null +++ b/src/components/progress-modal.tsx @@ -0,0 +1,58 @@ +import React from 'react'; +import Modal from '@site/src/ui/design-system/src/lib/Components/Modal'; +import Checklist from '@site/src/components/progress-checklist'; +import { Button } from '@site/src/ui/design-system/src/lib/Components/Button'; + +interface ProgressModalProps { + isOpen: boolean; + onClose: boolean; +} + +const ProgressModal: React.FC = ({ isOpen, onClose }) => { + const profileItems = [ + { label: 'Create handle', completed: true }, + { label: 'Add Github Profile', completed: true }, + { label: 'Add how you found Flow', completed: false }, + { label: 'Add contract addresses', completed: false }, + ]; + + const challengeItems = [ + { label: 'Complete first challenge', completed: true }, + ]; + + const onProfileAction = () => { + console.log('TODO: Profile action'); + }; + + const onChallengeAction = () => { + console.log('TODO: Challenge action'); + }; + + return ( + +
+ {/* Profile Section */} +
+ +
+ +
+
+ + {/* Challenges Section */} +
+ +
+ +
+
+
+
+ ); +}; + +export default ProgressModal; diff --git a/src/ui/design-system/src/lib/Components/Modal/index.tsx b/src/ui/design-system/src/lib/Components/Modal/index.tsx index 4f95d23669..5f53bf291b 100644 --- a/src/ui/design-system/src/lib/Components/Modal/index.tsx +++ b/src/ui/design-system/src/lib/Components/Modal/index.tsx @@ -47,7 +47,7 @@ const Modal: React.FC = ({ isOpen, onClose, title, children, classNa {/* Header */} {title && (
- + {title}