diff --git a/src/features/ui/components/modal-root.tsx b/src/features/ui/components/modal-root.tsx index 6a3f91fb9..7fec9c25c 100644 --- a/src/features/ui/components/modal-root.tsx +++ b/src/features/ui/components/modal-root.tsx @@ -30,6 +30,7 @@ import { MentionsModal, MissingDescriptionModal, MuteModal, + NostrSigninModal, ReactionsModal, ReblogsModal, ReplyMentionsModal, @@ -70,6 +71,7 @@ const MODAL_COMPONENTS: Record> = { 'MENTIONS': MentionsModal, 'MISSING_DESCRIPTION': MissingDescriptionModal, 'MUTE': MuteModal, + 'NOSTR_SIGNIN': NostrSigninModal, 'REACTIONS': ReactionsModal, 'REBLOGS': ReblogsModal, 'REPLY_MENTIONS': ReplyMentionsModal, diff --git a/src/features/ui/components/modals/nostr-signin-modal/nostr-signin-modal.tsx b/src/features/ui/components/modals/nostr-signin-modal/nostr-signin-modal.tsx new file mode 100644 index 000000000..0d3497f51 --- /dev/null +++ b/src/features/ui/components/modals/nostr-signin-modal/nostr-signin-modal.tsx @@ -0,0 +1,52 @@ +import React, { useState } from 'react'; +import { FormattedMessage } from 'react-intl'; + +import { Modal, Stack } from 'soapbox/components/ui'; + +import ExtensionStep from './steps/extension-step'; +import IdentityStep from './steps/identity-step'; + +interface INostrSigninModal { + onClose: (type?: string) => void; +} + +const NostrSigninModal: React.FC = ({ onClose }) => { + const [step, setStep] = useState(0); + + const handleClose = () => { + onClose('NOSTR_SIGNIN'); + }; + + const renderStep = () => { + switch (step) { + case 0: + return ; + case 1: + return ; + } + }; + + const renderModalTitle = () => { + switch (step) { + case 0: + return ; + case 1: + return ; + default: + return null; + } + }; + + return ( + + + {renderStep()} + + + ); +}; + +export default NostrSigninModal; diff --git a/src/features/ui/components/modals/nostr-signin-modal/steps/extension-step.tsx b/src/features/ui/components/modals/nostr-signin-modal/steps/extension-step.tsx new file mode 100644 index 000000000..28fc8621f --- /dev/null +++ b/src/features/ui/components/modals/nostr-signin-modal/steps/extension-step.tsx @@ -0,0 +1,17 @@ +import React from 'react'; + +import { Stack } from 'soapbox/components/ui'; + +interface IExtensionStep { + setStep: (step: number) => void; +} + +const ExtensionStep: React.FC = () => { + return ( + + extension step + + ); +}; + +export default ExtensionStep; diff --git a/src/features/ui/components/modals/nostr-signin-modal/steps/identity-step.tsx b/src/features/ui/components/modals/nostr-signin-modal/steps/identity-step.tsx new file mode 100644 index 000000000..f343e4ce3 --- /dev/null +++ b/src/features/ui/components/modals/nostr-signin-modal/steps/identity-step.tsx @@ -0,0 +1,17 @@ +import React from 'react'; + +import { Stack } from 'soapbox/components/ui'; + +interface IIdentityStep { + setStep: (step: number) => void; +} + +const IdentityStep: React.FC = () => { + return ( + + identity step + + ); +}; + +export default IdentityStep; diff --git a/src/features/ui/components/panels/sign-up-panel.tsx b/src/features/ui/components/panels/sign-up-panel.tsx index e12ae02c4..059fa9d19 100644 --- a/src/features/ui/components/panels/sign-up-panel.tsx +++ b/src/features/ui/components/panels/sign-up-panel.tsx @@ -1,13 +1,15 @@ import React from 'react'; import { FormattedMessage } from 'react-intl'; +import { openModal } from 'soapbox/actions/modals'; import { Button, Stack, Text } from 'soapbox/components/ui'; -import { useAppSelector, useInstance, useRegistrationStatus } from 'soapbox/hooks'; +import { useAppDispatch, useAppSelector, useInstance, useRegistrationStatus } from 'soapbox/hooks'; const SignUpPanel = () => { const instance = useInstance(); const { isOpen } = useRegistrationStatus(); const me = useAppSelector((state) => state.me); + const dispatch = useAppDispatch(); if (me || !isOpen) return null; @@ -23,7 +25,7 @@ const SignUpPanel = () => { - diff --git a/src/features/ui/util/async-components.ts b/src/features/ui/util/async-components.ts index 952f3c639..d1313e0af 100644 --- a/src/features/ui/util/async-components.ts +++ b/src/features/ui/util/async-components.ts @@ -162,3 +162,4 @@ export const EditAnnouncementModal = lazy(() => import('soapbox/features/ui/comp export const FollowedTags = lazy(() => import('soapbox/features/followed-tags')); export const AccountNotePanel = lazy(() => import('soapbox/features/ui/components/panels/account-note-panel')); export const ComposeEditor = lazy(() => import('soapbox/features/compose/editor')); +export const NostrSigninModal = lazy(() => import('soapbox/features/ui/components/modals/nostr-signin-modal/nostr-signin-modal'));