Add boilerplate NostrSignin modal

environments/review-ditto-auth-csh1vn/deployments/4454
Alex Gleason 2024-02-11 16:20:19 -06:00
rodzic dceefef404
commit 6e0cb369dc
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 7211D1F99744FBB7
6 zmienionych plików z 93 dodań i 2 usunięć

Wyświetl plik

@ -30,6 +30,7 @@ import {
MentionsModal,
MissingDescriptionModal,
MuteModal,
NostrSigninModal,
ReactionsModal,
ReblogsModal,
ReplyMentionsModal,
@ -70,6 +71,7 @@ const MODAL_COMPONENTS: Record<string, React.LazyExoticComponent<any>> = {
'MENTIONS': MentionsModal,
'MISSING_DESCRIPTION': MissingDescriptionModal,
'MUTE': MuteModal,
'NOSTR_SIGNIN': NostrSigninModal,
'REACTIONS': ReactionsModal,
'REBLOGS': ReblogsModal,
'REPLY_MENTIONS': ReplyMentionsModal,

Wyświetl plik

@ -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<INostrSigninModal> = ({ onClose }) => {
const [step, setStep] = useState(0);
const handleClose = () => {
onClose('NOSTR_SIGNIN');
};
const renderStep = () => {
switch (step) {
case 0:
return <ExtensionStep setStep={setStep} />;
case 1:
return <IdentityStep setStep={setStep} />;
}
};
const renderModalTitle = () => {
switch (step) {
case 0:
return <FormattedMessage id='nostr_signin.siwe.title' defaultMessage='Sign in with extension' />;
case 1:
return <FormattedMessage id='nostr_signin.identity.title' defaultMessage='Who are you?' />;
default:
return null;
}
};
return (
<Modal
title={renderModalTitle()}
onClose={handleClose}
>
<Stack space={2}>
{renderStep()}
</Stack>
</Modal>
);
};
export default NostrSigninModal;

Wyświetl plik

@ -0,0 +1,17 @@
import React from 'react';
import { Stack } from 'soapbox/components/ui';
interface IExtensionStep {
setStep: (step: number) => void;
}
const ExtensionStep: React.FC<IExtensionStep> = () => {
return (
<Stack>
extension step
</Stack>
);
};
export default ExtensionStep;

Wyświetl plik

@ -0,0 +1,17 @@
import React from 'react';
import { Stack } from 'soapbox/components/ui';
interface IIdentityStep {
setStep: (step: number) => void;
}
const IdentityStep: React.FC<IIdentityStep> = () => {
return (
<Stack>
identity step
</Stack>
);
};
export default IdentityStep;

Wyświetl plik

@ -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 = () => {
</Text>
</Stack>
<Button theme='primary' block to='/signup'>
<Button theme='primary' block onClick={() => dispatch(openModal('NOSTR_SIGNIN'))}>
<FormattedMessage id='account.register' defaultMessage='Sign up' />
</Button>
</Stack>

Wyświetl plik

@ -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'));