{selectedWalletAccount ? (
) : (
@@ -215,10 +209,7 @@ export function ConnectWalletMenu() {
onDisconnect={wallet => {
if (
selectedWalletAccount &&
- uiWalletAccountBelongsToUiWallet(
- selectedWalletAccount,
- wallet
- )
+ uiWalletAccountBelongsToUiWallet(selectedWalletAccount, wallet)
) {
setSelectedWalletAccount(undefined);
}
diff --git a/web/src/context/selected-wallet-account-context-provider.tsx b/web/src/context/selected-wallet-account-context-provider.tsx
index 0bcca5b..e8eeae7 100644
--- a/web/src/context/selected-wallet-account-context-provider.tsx
+++ b/web/src/context/selected-wallet-account-context-provider.tsx
@@ -1,4 +1,4 @@
-import { useEffect, useMemo, useState } from 'react';
+import { useEffect, useMemo, useRef, useState } from 'react';
import {
getUiWalletAccountStorageKey,
@@ -14,11 +14,11 @@ import {
type SelectedWalletAccountState,
} from '@/context/selected-wallet-account-context';
-const STORAGE_KEY = 'cayed:selected-wallet';
+const STORAGE_KEY = 'samizdat:selected-wallet';
-let wasSetterInvoked = false;
function getSavedWalletAccount(
- wallets: readonly UiWallet[]
+ wallets: readonly UiWallet[],
+ wasSetterInvoked: boolean
): UiWalletAccount | undefined {
if (wasSetterInvoked) {
// After the user makes an explicit choice of wallet, stop trying to auto-select the
@@ -55,13 +55,16 @@ export function SelectedWalletAccountContextProvider({
children: React.ReactNode;
}) {
const wallets = useWallets();
+ const wasSetterInvokedRef = useRef(false);
const [selectedWalletAccount, setSelectedWalletAccountInternal] =
- useState
(() => getSavedWalletAccount(wallets));
+ useState(() =>
+ getSavedWalletAccount(wallets, wasSetterInvokedRef.current)
+ );
const setSelectedWalletAccount: React.Dispatch<
React.SetStateAction
> = setStateAction => {
setSelectedWalletAccountInternal(prevSelectedWalletAccount => {
- wasSetterInvoked = true;
+ wasSetterInvokedRef.current = true;
const nextWalletAccount =
typeof setStateAction === 'function'
? setStateAction(prevSelectedWalletAccount)
@@ -78,7 +81,10 @@ export function SelectedWalletAccountContextProvider({
});
};
useEffect(() => {
- const savedWalletAccount = getSavedWalletAccount(wallets);
+ const savedWalletAccount = getSavedWalletAccount(
+ wallets,
+ wasSetterInvokedRef.current
+ );
if (savedWalletAccount) {
setSelectedWalletAccountInternal(savedWalletAccount);
}
diff --git a/web/src/main.tsx b/web/src/main.tsx
index a8d4c77..ae34e6c 100644
--- a/web/src/main.tsx
+++ b/web/src/main.tsx
@@ -3,23 +3,44 @@ import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
import { BrowserRouter, Route, Routes } from 'react-router';
-import { HomeScreen } from '@/pages/home-screen';
+import { AppLayout } from '@/components/application/app-layout';
+import { ChainContextProvider } from '@/context/chain-context-provider';
+import { ConnectionContextProvider } from '@/context/connection-context-provider';
+import { SelectedWalletAccountContextProvider } from '@/context/selected-wallet-account-context-provider';
+import { LandingPage } from '@/pages/landing';
+import { NodeDashboardPage } from '@/pages/node';
import { NotFound } from '@/pages/not-found';
+import { PublisherDashboardPage } from '@/pages/publisher';
+import { DigitalTwinPage } from '@/pages/twin';
import { RouteProvider } from '@/providers/router-provider';
+import { SamizdatServiceProviderConnected } from '@/providers/samizdat-service-provider';
import { ThemeProvider } from '@/providers/theme-provider';
import '@/styles/globals.css';
createRoot(document.getElementById('root')!).render(
-
-
-
-
- } />
- } />
-
-
-
+
+
+
+
+
+
+
+
+ }>
+ } />
+ } />
+ } />
+ } />
+
+ } />
+
+
+
+
+
+
+
);
diff --git a/web/src/pages/landing.tsx b/web/src/pages/landing.tsx
index 3388428..a9fea6c 100644
--- a/web/src/pages/landing.tsx
+++ b/web/src/pages/landing.tsx
@@ -65,7 +65,10 @@ function ProtocolFlowDiagram() {
];
return (
-
+
{steps.map((step, i) => (
-
- {step.label}
-
+
{step.label}
{step.sublabel}
@@ -139,19 +140,16 @@ export function LandingPage() {
{/* Oversized typographic header */}
-
-
+
+
Live on Solana Devnet
-
+
-
+
I'm a Publisher
-