Skin onboarding app #33
@ -16,7 +16,7 @@ import Email from "./pages/Email";
|
||||
import Thanks from "./pages/Thanks";
|
||||
import Validator from "./pages/Validator";
|
||||
import ValidatorSuccess from "./pages/ValidatorSuccess";
|
||||
import { createTheme, Box, ThemeProvider } from "@mui/material";
|
||||
import { createTheme, Box, ThemeProvider, CssBaseline } from "@mui/material";
|
||||
|
||||
const darkTheme = createTheme({
|
||||
components: {
|
||||
@ -94,6 +94,7 @@ function App() {
|
||||
}}
|
||||
>
|
||||
<Header />
|
||||
<CssBaseline />
|
||||
<WalletConnectProvider>
|
||||
<Routes>
|
||||
<Route path="/" element={<LandingPage />} />
|
||||
|
@ -9,7 +9,7 @@ export const Container: React.FC<
|
||||
sx={{
|
||||
width: "100%",
|
||||
maxWidth: "752px",
|
||||
marginX: "auto",
|
||||
mx: "auto",
|
||||
backgroundColor: "background.paper",
|
||||
padding: 3,
|
||||
borderRadius: 2,
|
||||
|
@ -1,89 +1,90 @@
|
||||
import React from "react";
|
||||
import { Link, useLocation } from "react-router-dom";
|
||||
|
||||
import {
|
||||
AppBar,
|
||||
Toolbar,
|
||||
SvgIcon,
|
||||
Stack,
|
||||
Divider,
|
||||
Typography,
|
||||
} from "@mui/material";
|
||||
import { AppBar, SvgIcon, Stack, Divider, Typography } from "@mui/material";
|
||||
|
||||
const Header: React.FC = () => {
|
||||
const location = useLocation();
|
||||
|
||||
return (
|
||||
<AppBar position="static" color="inherit" sx={{ boxShadow: "none", mb: 4 }}>
|
||||
<Toolbar>
|
||||
<Stack
|
||||
direction="row"
|
||||
sx={{
|
||||
backgroundColor: "background.paper",
|
||||
pl: 4,
|
||||
<AppBar
|
||||
position="static"
|
||||
color="inherit"
|
||||
sx={{ boxShadow: "none", mb: 4, height: 48 }}
|
||||
>
|
||||
<Stack
|
||||
direction="row"
|
||||
sx={{
|
||||
backgroundColor: "background.paper",
|
||||
pl: 2,
|
||||
alignItems: "center",
|
||||
py: 1,
|
||||
}}
|
||||
spacing={1}
|
||||
>
|
||||
<Link
|
||||
to={location.pathname === "/" ? "/" : "/connect-wallet"}
|
||||
style={{
|
||||
color: "inherit",
|
||||
textDecoration: "none",
|
||||
display: "flex",
|
||||
alignItems: "center",
|
||||
py: 2,
|
||||
marginRight: 4,
|
||||
}}
|
||||
spacing={2}
|
||||
>
|
||||
<Link
|
||||
to={location.pathname === "/" ? "/" : "/connect-wallet"}
|
||||
style={{ color: "inherit", textDecoration: "none" }}
|
||||
>
|
||||
<SvgIcon sx={{ height: 20, width: 115 }}>
|
||||
<svg
|
||||
width="115"
|
||||
height="20"
|
||||
viewBox="0 0 115 20"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M3.37388 10.5194C5.70149 8.19185 7.14225 4.97748 7.1416 1.42853C7.14246 0.94681 7.11586 0.470456 7.063 0L-0.000488281 0.000643078L-0.000273922 13.5723C-0.000917354 15.2174 0.62632 16.863 1.88091 18.1175C3.1356 19.3721 4.78235 20.0001 6.42772 19.9993L6.42729 19.9997L19.9995 20L19.999 12.9355C19.5296 12.8838 19.0532 12.857 18.5704 12.8569C15.0224 12.8574 11.8079 14.298 9.48026 16.6255C7.78654 18.2768 5.07093 18.2771 3.39812 16.6043C1.72638 14.9325 1.72562 12.2161 3.37388 10.5194ZM18.5344 1.46863C16.5837 -0.481929 13.4146 -0.48268 11.4633 1.46863C9.512 3.41984 9.51276 6.58895 11.4633 8.53941C13.415 10.491 16.5831 10.4907 18.5344 8.53941C20.4857 6.5882 20.4861 3.42016 18.5344 1.46863Z"
|
||||
fill="#FBFBFB"
|
||||
/>
|
||||
<path
|
||||
d="M31.4741 18.5838H39.2552V16.3302H34.075V1.41351H31.4741V18.5838Z"
|
||||
fill="#FBFBFB"
|
||||
/>
|
||||
<path
|
||||
d="M49.8108 1.41351H45.4976L40.9893 18.5838H43.6769L44.8039 14.2913H50.3744L51.5014 18.5838H54.3191L49.8108 1.41351ZM45.3458 12.145L47.6 3.2593H47.6866L49.8541 12.145H45.3458Z"
|
||||
fill="#FBFBFB"
|
||||
/>
|
||||
<path
|
||||
d="M62.9292 8.06885H65.9636C65.9636 3.17534 64.3813 1.07196 60.6967 1.07196C56.8169 1.07196 55.1479 3.73341 55.1479 9.97909C55.1479 16.2462 56.8169 18.9291 60.6967 18.9291C64.3813 18.9291 65.9636 16.8901 65.9853 12.1468H62.9508C62.9292 15.8599 62.474 16.7828 60.6967 16.7828C58.6593 16.7828 58.1607 15.4307 58.1824 9.97909C58.1824 4.54896 58.6809 3.19678 60.6967 3.21823C62.474 3.21823 62.9292 4.18413 62.9292 8.06885Z"
|
||||
fill="#FBFBFB"
|
||||
/>
|
||||
<path
|
||||
d="M73.7781 1.07209C77.7229 1.09364 79.4135 3.77643 79.4135 10.0007C79.4135 16.2249 77.7229 18.9078 73.7781 18.9292C69.8117 18.9507 68.1211 16.2678 68.1211 10.0007C68.1211 3.73354 69.8117 1.05064 73.7781 1.07209ZM71.1555 10.0007C71.1555 15.4308 71.6757 16.783 73.7781 16.783C75.8589 16.783 76.3791 15.4308 76.3791 10.0007C76.3791 4.54909 75.8589 3.19691 73.7781 3.21847C71.6757 3.23992 71.1555 4.59209 71.1555 10.0007Z"
|
||||
fill="#FBFBFB"
|
||||
/>
|
||||
<path
|
||||
d="M85.0819 18.5624L82.481 18.5838V1.41351H87.0544L91.3243 15.4073H91.3676V1.41351H93.968V18.5838H89.677L85.1254 3.51689H85.0819V18.5624Z"
|
||||
fill="#FBFBFB"
|
||||
/>
|
||||
<path
|
||||
d="M100.468 1.41351H97.8677V18.5838H100.468V1.41351Z"
|
||||
fill="#FBFBFB"
|
||||
/>
|
||||
<path
|
||||
d="M111.139 8.06885H114.174C114.174 3.17534 112.591 1.07196 108.906 1.07196C105.028 1.07196 103.358 3.73341 103.358 9.97909C103.358 16.2462 105.028 18.9291 108.906 18.9291C112.591 18.9291 114.174 16.8901 114.195 12.1468H111.161C111.139 15.8599 110.684 16.7828 108.906 16.7828C106.869 16.7828 106.371 15.4307 106.393 9.97909C106.393 4.54896 106.891 3.19678 108.906 3.21823C110.684 3.21823 111.139 4.18413 111.139 8.06885Z"
|
||||
fill="#FBFBFB"
|
||||
/>
|
||||
</svg>
|
||||
</SvgIcon>
|
||||
</Link>
|
||||
<Divider
|
||||
flexItem
|
||||
orientation="vertical"
|
||||
color="#FBFBFB"
|
||||
sx={{ height: "1.2rem", alignSelf: "center", width: "1px" }}
|
||||
/>
|
||||
<Typography variant="h5">Testnet Onboarding</Typography>
|
||||
</Stack>
|
||||
</Toolbar>
|
||||
<SvgIcon sx={{ height: 20, width: 100 }}>
|
||||
<svg
|
||||
width="115"
|
||||
height="20"
|
||||
viewBox="0 0 115 20"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<path
|
||||
fillRule="evenodd"
|
||||
clipRule="evenodd"
|
||||
d="M3.37388 10.5194C5.70149 8.19185 7.14225 4.97748 7.1416 1.42853C7.14246 0.94681 7.11586 0.470456 7.063 0L-0.000488281 0.000643078L-0.000273922 13.5723C-0.000917354 15.2174 0.62632 16.863 1.88091 18.1175C3.1356 19.3721 4.78235 20.0001 6.42772 19.9993L6.42729 19.9997L19.9995 20L19.999 12.9355C19.5296 12.8838 19.0532 12.857 18.5704 12.8569C15.0224 12.8574 11.8079 14.298 9.48026 16.6255C7.78654 18.2768 5.07093 18.2771 3.39812 16.6043C1.72638 14.9325 1.72562 12.2161 3.37388 10.5194ZM18.5344 1.46863C16.5837 -0.481929 13.4146 -0.48268 11.4633 1.46863C9.512 3.41984 9.51276 6.58895 11.4633 8.53941C13.415 10.491 16.5831 10.4907 18.5344 8.53941C20.4857 6.5882 20.4861 3.42016 18.5344 1.46863Z"
|
||||
fill="#FBFBFB"
|
||||
/>
|
||||
<path
|
||||
d="M31.4741 18.5838H39.2552V16.3302H34.075V1.41351H31.4741V18.5838Z"
|
||||
fill="#FBFBFB"
|
||||
/>
|
||||
<path
|
||||
d="M49.8108 1.41351H45.4976L40.9893 18.5838H43.6769L44.8039 14.2913H50.3744L51.5014 18.5838H54.3191L49.8108 1.41351ZM45.3458 12.145L47.6 3.2593H47.6866L49.8541 12.145H45.3458Z"
|
||||
fill="#FBFBFB"
|
||||
/>
|
||||
<path
|
||||
d="M62.9292 8.06885H65.9636C65.9636 3.17534 64.3813 1.07196 60.6967 1.07196C56.8169 1.07196 55.1479 3.73341 55.1479 9.97909C55.1479 16.2462 56.8169 18.9291 60.6967 18.9291C64.3813 18.9291 65.9636 16.8901 65.9853 12.1468H62.9508C62.9292 15.8599 62.474 16.7828 60.6967 16.7828C58.6593 16.7828 58.1607 15.4307 58.1824 9.97909C58.1824 4.54896 58.6809 3.19678 60.6967 3.21823C62.474 3.21823 62.9292 4.18413 62.9292 8.06885Z"
|
||||
fill="#FBFBFB"
|
||||
/>
|
||||
<path
|
||||
d="M73.7781 1.07209C77.7229 1.09364 79.4135 3.77643 79.4135 10.0007C79.4135 16.2249 77.7229 18.9078 73.7781 18.9292C69.8117 18.9507 68.1211 16.2678 68.1211 10.0007C68.1211 3.73354 69.8117 1.05064 73.7781 1.07209ZM71.1555 10.0007C71.1555 15.4308 71.6757 16.783 73.7781 16.783C75.8589 16.783 76.3791 15.4308 76.3791 10.0007C76.3791 4.54909 75.8589 3.19691 73.7781 3.21847C71.6757 3.23992 71.1555 4.59209 71.1555 10.0007Z"
|
||||
fill="#FBFBFB"
|
||||
/>
|
||||
<path
|
||||
d="M85.0819 18.5624L82.481 18.5838V1.41351H87.0544L91.3243 15.4073H91.3676V1.41351H93.968V18.5838H89.677L85.1254 3.51689H85.0819V18.5624Z"
|
||||
fill="#FBFBFB"
|
||||
/>
|
||||
<path
|
||||
d="M100.468 1.41351H97.8677V18.5838H100.468V1.41351Z"
|
||||
fill="#FBFBFB"
|
||||
/>
|
||||
<path
|
||||
d="M111.139 8.06885H114.174C114.174 3.17534 112.591 1.07196 108.906 1.07196C105.028 1.07196 103.358 3.73341 103.358 9.97909C103.358 16.2462 105.028 18.9291 108.906 18.9291C112.591 18.9291 114.174 16.8901 114.195 12.1468H111.161C111.139 15.8599 110.684 16.7828 108.906 16.7828C106.869 16.7828 106.371 15.4307 106.393 9.97909C106.393 4.54896 106.891 3.19678 108.906 3.21823C110.684 3.21823 111.139 4.18413 111.139 8.06885Z"
|
||||
fill="#FBFBFB"
|
||||
/>
|
||||
</svg>
|
||||
</SvgIcon>
|
||||
</Link>
|
||||
<Divider
|
||||
flexItem
|
||||
orientation="vertical"
|
||||
color="#FBFBFB"
|
||||
sx={{ height: "1.2rem", alignSelf: "center", width: "1px" }}
|
||||
/>
|
||||
<Typography fontSize="1.25rem">Testnet Onboarding</Typography>
|
||||
</Stack>
|
||||
</AppBar>
|
||||
);
|
||||
};
|
||||
|
@ -1,28 +0,0 @@
|
||||
import { Button, Typography } from "@mui/material";
|
||||
import React, { PropsWithChildren } from "react";
|
||||
import { Container } from "./Container";
|
||||
import { ArrowBack } from "@mui/icons-material";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
|
||||
export const Layout: React.FC<
|
||||
PropsWithChildren<{ title: string; backLinkTitle?: string }>
|
||||
> = ({ children, title, backLinkTitle = "Home" }) => {
|
||||
const navigate = useNavigate();
|
||||
|
||||
return (
|
||||
<Container boxProps={{ sx: { backgroundColor: "inherit" } }}>
|
||||
<Button
|
||||
startIcon={<ArrowBack />}
|
||||
color="info"
|
||||
sx={{ mb: 4 }}
|
||||
onClick={() => navigate("/")}
|
||||
>
|
||||
{backLinkTitle}
|
||||
</Button>
|
||||
<Typography variant="h4" sx={{ mb: 4 }}>
|
||||
{title}
|
||||
</Typography>
|
||||
<Container>{children}</Container>
|
||||
</Container>
|
||||
);
|
||||
};
|
34
src/layout/Layout.tsx
Normal file
34
src/layout/Layout.tsx
Normal file
@ -0,0 +1,34 @@
|
||||
import { Button, Typography } from "@mui/material";
|
||||
import React, { PropsWithChildren } from "react";
|
||||
import { Container } from "../components/Container";
|
||||
import { ArrowBack } from "@mui/icons-material";
|
||||
import { useNavigate } from "react-router-dom";
|
||||
|
||||
export const Layout: React.FC<
|
||||
PropsWithChildren<{
|
||||
title: string;
|
||||
backLinkTitle?: string;
|
||||
noBackButton?: boolean;
|
||||
}>
|
||||
> = ({ children, title, backLinkTitle = "Home", noBackButton = false }) => {
|
||||
const navigate = useNavigate();
|
||||
|
||||
return (
|
||||
<Container boxProps={{ sx: { backgroundColor: "inherit", padding: 0 } }}>
|
||||
{noBackButton ? null : (
|
||||
<Button
|
||||
startIcon={<ArrowBack />}
|
||||
color="info"
|
||||
sx={{ mb: 4 }}
|
||||
onClick={() => navigate("/")}
|
||||
>
|
||||
{backLinkTitle}
|
||||
</Button>
|
||||
)}
|
||||
<Typography variant="h4" sx={{ mb: 4 }}>
|
||||
{title}
|
||||
</Typography>
|
||||
<Container>{children}</Container>
|
||||
</Container>
|
||||
);
|
||||
};
|
@ -1,15 +1,10 @@
|
||||
import React from "react";
|
||||
import { Outlet, useLocation, useNavigate } from "react-router-dom";
|
||||
|
||||
import {
|
||||
Toolbar,
|
||||
Avatar,
|
||||
Button,
|
||||
Typography,
|
||||
Container
|
||||
} from "@mui/material";
|
||||
import { Avatar, Button, Stack, Typography } from "@mui/material";
|
||||
|
||||
import { useWalletConnectContext } from "../context/WalletConnectContext";
|
||||
import { Container } from "../components/Container";
|
||||
|
||||
const SignPageLayout = () => {
|
||||
const { disconnect, session } = useWalletConnectContext();
|
||||
@ -25,24 +20,19 @@ const SignPageLayout = () => {
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<Toolbar variant="dense">
|
||||
|
||||
<Button
|
||||
variant="outlined"
|
||||
style={{
|
||||
marginLeft: "auto",
|
||||
}}
|
||||
color="error"
|
||||
onClick={disconnectHandler}
|
||||
>
|
||||
Disconnect
|
||||
</Button>
|
||||
</Toolbar>
|
||||
|
||||
<Container maxWidth="md">
|
||||
<Stack justifyContent="center" alignItems="center">
|
||||
<Container
|
||||
boxProps={{
|
||||
sx: {
|
||||
display: "flex",
|
||||
flexDirection: "row",
|
||||
justifyContent: "space-between",
|
||||
mb: 4,
|
||||
},
|
||||
}}
|
||||
>
|
||||
{session && (
|
||||
<div style={{ display: "flex", flexDirection: "column" }}>
|
||||
<Stack spacing={0.5}>
|
||||
<div
|
||||
style={{
|
||||
display: "flex",
|
||||
@ -51,7 +41,7 @@ const SignPageLayout = () => {
|
||||
}}
|
||||
>
|
||||
<Typography variant="body2">
|
||||
Connected to: <b> {session.peer.metadata.name}</b>{" "}
|
||||
<b>Connected to:</b> {session.peer.metadata.name}
|
||||
</Typography>
|
||||
<Avatar
|
||||
variant="square"
|
||||
@ -66,13 +56,21 @@ const SignPageLayout = () => {
|
||||
/>
|
||||
</div>
|
||||
<Typography variant="body2">
|
||||
Session ID: <b>{session.topic} </b>
|
||||
<b>Session ID:</b> {session.topic}
|
||||
</Typography>
|
||||
</div>
|
||||
</Stack>
|
||||
)}
|
||||
<Outlet />
|
||||
<Button
|
||||
variant="outlined"
|
||||
color="error"
|
||||
onClick={disconnectHandler}
|
||||
sx={{ color: "text.primary" }}
|
||||
>
|
||||
Disconnect
|
||||
</Button>
|
||||
</Container>
|
||||
</>
|
||||
<Outlet />
|
||||
</Stack>
|
||||
);
|
||||
};
|
||||
|
||||
|
@ -3,12 +3,13 @@ import { useLocation, useNavigate } from "react-router-dom";
|
||||
import { enqueueSnackbar } from "notistack";
|
||||
import canonicalStringify from "canonical-json";
|
||||
|
||||
import { Select, MenuItem, Box, Typography } from "@mui/material";
|
||||
import { Select, MenuItem, Box, Typography, Stack } from "@mui/material";
|
||||
import LoadingButton from "@mui/lab/LoadingButton";
|
||||
import { utf8ToHex } from "@walletconnect/encoding";
|
||||
|
||||
import { useWalletConnectContext } from "../context/WalletConnectContext";
|
||||
import { ENABLE_KYC, HASHED_SUBSCRIBER_ID_KEY } from "../constants";
|
||||
import { Layout } from "../layout/Layout";
|
||||
|
||||
const SignWithNitroKey = () => {
|
||||
const { session, signClient, isSessionLoading } = useWalletConnectContext();
|
||||
@ -104,17 +105,9 @@ const SignWithNitroKey = () => {
|
||||
};
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Layout title="New Session" noBackButton>
|
||||
{session ? (
|
||||
<Box
|
||||
sx={{
|
||||
display: "flex",
|
||||
flexDirection: "column",
|
||||
marginTop: 6,
|
||||
gap: 1,
|
||||
}}
|
||||
>
|
||||
<Typography variant="h5">Sign with Nitro key</Typography>
|
||||
<Stack spacing={2}>
|
||||
<Typography variant="body1">Select Laconic account:</Typography>
|
||||
<Select
|
||||
labelId="demo-simple-select-label"
|
||||
@ -151,12 +144,21 @@ const SignWithNitroKey = () => {
|
||||
{Boolean(ethAddress) && Boolean(cosmosAddress) && (
|
||||
<Box
|
||||
sx={{
|
||||
backgroundColor: "lightgray",
|
||||
backgroundColor: "#48474F",
|
||||
padding: 3,
|
||||
wordWrap: "break-word",
|
||||
mt: 1,
|
||||
borderRadius: 1,
|
||||
}}
|
||||
>
|
||||
<pre style={{ whiteSpace: "pre-wrap", margin: 0 }}>
|
||||
<pre
|
||||
style={{
|
||||
whiteSpace: "pre-wrap",
|
||||
margin: 0,
|
||||
backgroundColor: "#48474F",
|
||||
color: "#FBFBFB",
|
||||
}}
|
||||
>
|
||||
{canonicalStringify(message, null, 2)}{" "}
|
||||
</pre>
|
||||
</Box>
|
||||
@ -172,11 +174,11 @@ const SignWithNitroKey = () => {
|
||||
Sign using Nitro key
|
||||
</LoadingButton>
|
||||
</Box>
|
||||
</Box>
|
||||
</Stack>
|
||||
) : (
|
||||
<>Loading...</>
|
||||
)}
|
||||
</div>
|
||||
</Layout>
|
||||
);
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user