diff --git a/src/components/CellList.tsx b/src/components/CellList.tsx
index c31d4f4..ad151de 100644
--- a/src/components/CellList.tsx
+++ b/src/components/CellList.tsx
@@ -29,7 +29,9 @@ import { Cell } from '@/types/forum';
import { usePending } from '@/hooks/usePending';
// Empty State Component
-const EmptyState: React.FC<{ canCreateCell: boolean }> = ({ canCreateCell }) => {
+const EmptyState: React.FC<{ canCreateCell: boolean }> = ({
+ canCreateCell,
+}) => {
return (
{/* Visual Element */}
@@ -76,10 +78,7 @@ const CellItem: React.FC<{ cell: Cell }> = ({ cell }) => {
const pending = usePending(cell.id);
return (
-
+
{
-
- Decentralized Cells
-
+
Decentralized Cells
Discover communities built on Bitcoin Ordinals
- {/* Only show controls when cells exist */}
- {hasCells && (
-
-
+ {/* Only show controls when cells exist */}
+ {hasCells && (
+
+
- setSortOption(value)}
- >
-
-
-
-
-
-
- Relevance
-
-
-
- Activity
-
-
-
- Newest
-
-
-
- A-Z
-
-
-
+ setSortOption(value)}
+ >
+
+
+
+
+
+
+ Relevance
+
+
+
+ Activity
+
+
+
+ Newest
+
+
+
+ A-Z
+
+
+
-
-
-
-
- {canCreateCell && (
-
- )}
-
- )}
+
+
+
+
+ {canCreateCell &&
}
+
+ )}
diff --git a/src/components/Header.tsx b/src/components/Header.tsx
index f608d6a..74fa191 100644
--- a/src/components/Header.tsx
+++ b/src/components/Header.tsx
@@ -122,7 +122,6 @@ const Header = () => {
});
};
-
const getStatusIcon = () => {
if (!isConnected) return ;
@@ -191,24 +190,29 @@ const Header = () => {
{isConnected ? (
{/* Status Badge */}
-
{getStatusIcon()}
- {verificationStatus === EVerificationStatus.ENS_ORDINAL_VERIFIED && delegationInfo?.isValid
+ {verificationStatus ===
+ EVerificationStatus.ENS_ORDINAL_VERIFIED &&
+ delegationInfo?.isValid
? 'READY'
- : verificationStatus === EVerificationStatus.ENS_ORDINAL_VERIFIED
- ? 'EXPIRED'
- : 'VERIFY'
- }
+ : verificationStatus ===
+ EVerificationStatus.ENS_ORDINAL_VERIFIED
+ ? 'EXPIRED'
+ : 'VERIFY'}
@@ -224,37 +228,53 @@ const Header = () => {
-
+
-
{displayName}
-
{address?.slice(0, 8)}...{address?.slice(-4)}
+
+ {displayName}
+
+
+ {address?.slice(0, 8)}...{address?.slice(-4)}
+
-
+
-
+
Profile
-
+
-
+
Bookmarks
-
+
-
-
+
+
Setup Wizard
-
+
-
-
@@ -279,7 +299,11 @@ const Header = () => {
onClick={() => setMobileMenuOpen(!mobileMenuOpen)}
className="md:hidden text-white hover:bg-cyber-muted/30"
>
- {mobileMenuOpen ? : }
+ {mobileMenuOpen ? (
+
+ ) : (
+
+ )}
@@ -395,7 +419,7 @@ const Header = () => {
>
)}
-
+
{/* Mobile Network Status */}
diff --git a/src/components/PostList.tsx b/src/components/PostList.tsx
index 01ebbe9..a613efc 100644
--- a/src/components/PostList.tsx
+++ b/src/components/PostList.tsx
@@ -267,10 +267,7 @@ const PostList = () => {
) : (
visiblePosts.map(post => (
-
+
{
const status = getStepStatus(step);
-
+
// Check if step is actually completed based on auth state
const isActuallyComplete = (step: WizardStep): boolean => {
switch (step) {
@@ -126,10 +125,12 @@ export function WalletWizard({
className={`text-sm ${
getStepStatus(step as WizardStep) === 'current'
? 'text-blue-500 font-medium'
- : (getStepStatus(step as WizardStep) === 'complete' ||
- (step === 1 && isAuthenticated) ||
- (step === 2 && verificationStatus !== EVerificationStatus.WALLET_UNCONNECTED) ||
- (step === 3 && delegationStatus.isValid))
+ : getStepStatus(step as WizardStep) === 'complete' ||
+ (step === 1 && isAuthenticated) ||
+ (step === 2 &&
+ verificationStatus !==
+ EVerificationStatus.WALLET_UNCONNECTED) ||
+ (step === 3 && delegationStatus.isValid)
? 'text-green-500'
: 'text-gray-400'
}`}
@@ -142,7 +143,9 @@ export function WalletWizard({
className={`w-8 h-px mx-2 ${
getStepStatus(step as WizardStep) === 'complete' ||
(step === 1 && isAuthenticated) ||
- (step === 2 && verificationStatus !== EVerificationStatus.WALLET_UNCONNECTED)
+ (step === 2 &&
+ verificationStatus !==
+ EVerificationStatus.WALLET_UNCONNECTED)
? 'bg-green-500'
: 'bg-gray-600'
}`}
diff --git a/src/lib/waku/constants.ts b/src/lib/waku/constants.ts
index 72dbcf1..a96a10c 100644
--- a/src/lib/waku/constants.ts
+++ b/src/lib/waku/constants.ts
@@ -14,4 +14,4 @@ export const BOOTSTRAP_NODES = {
'/dns4/node-01.do-ams3.waku.sandbox.status.im/tcp/30303/p2p/16Uiu2HAmNaeL4p3WEYzC9mgXBmBWSgWjPHRvatZTXnp8Jgv3iKsb',
'/dns4/vps-aaa00d52.vps.ovh.ca/tcp/8000/wss/p2p/16Uiu2HAm9PftGgHZwWE3wzdMde4m3kT2eYJFXLZfGoSED3gysofk',
],
-};
\ No newline at end of file
+};
diff --git a/src/pages/BookmarksPage.tsx b/src/pages/BookmarksPage.tsx
index 6cc47d5..e86da8d 100644
--- a/src/pages/BookmarksPage.tsx
+++ b/src/pages/BookmarksPage.tsx
@@ -129,44 +129,42 @@ const BookmarksPage = () => {
-
- My Bookmarks
-
+ My Bookmarks
- {bookmarks.length > 0 && (
-
-
-
-
- Clear All
-
-
-
-
- Clear All Bookmarks
-
- Are you sure you want to remove all your bookmarks? This
- action cannot be undone.
-
-
-
- Cancel
- 0 && (
+
+
+
+
Clear All
-
-
-
-
- )}
-
+
+
+
+
+ Clear All Bookmarks
+
+ Are you sure you want to remove all your bookmarks? This
+ action cannot be undone.
+
+
+
+ Cancel
+
+ Clear All
+
+
+
+
+ )}
+
Your saved posts and comments. Bookmarks are stored locally and
@@ -174,83 +172,83 @@ const BookmarksPage = () => {
- {/* Stats */}
- {bookmarks.length > 0 && (
-
-
-
- {postBookmarks.length} Posts
-
-
-
- {commentBookmarks.length} Comments
-
-
-
- {bookmarks.length} Total
-
-
- )}
+ {/* Stats */}
+ {bookmarks.length > 0 && (
+
+
+
+ {postBookmarks.length} Posts
+
+
+
+ {commentBookmarks.length} Comments
+
+
+
+ {bookmarks.length} Total
+
+
+ )}
- {/* Tabs */}
-
- setActiveTab(value as 'all' | 'posts' | 'comments')
- }
- className="w-full"
- >
-
-
-
- All ({bookmarks.length})
-
-
-
- Posts ({postBookmarks.length})
-
-
-
- Comments ({commentBookmarks.length})
-
-
+ {/* Tabs */}
+
+ setActiveTab(value as 'all' | 'posts' | 'comments')
+ }
+ className="w-full"
+ >
+
+
+
+ All ({bookmarks.length})
+
+
+
+ Posts ({postBookmarks.length})
+
+
+
+ Comments ({commentBookmarks.length})
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
diff --git a/src/pages/FeedPage.tsx b/src/pages/FeedPage.tsx
index 3560954..14a3094 100644
--- a/src/pages/FeedPage.tsx
+++ b/src/pages/FeedPage.tsx
@@ -105,49 +105,47 @@ const FeedPage: React.FC = () => {
Popular Posts
-
- Latest posts from all cells
-
+
Latest posts from all cells
-
-
+
+
-
setSortOption(value)}
- >
-
-
-
-
-
-
-
- Relevance
-
-
-
-
-
- Newest
-
-
-
-
+
setSortOption(value)}
+ >
+
+
+
+
+
+
+
+ Relevance
+
+
+
+
+
+ Newest
+
+
+
+
-
-
- Refresh
-
-
+
+
+ Refresh
+
+
diff --git a/src/pages/ProfilePage.tsx b/src/pages/ProfilePage.tsx
index c8b70be..5939f39 100644
--- a/src/pages/ProfilePage.tsx
+++ b/src/pages/ProfilePage.tsx
@@ -58,21 +58,21 @@ export default function ProfilePage() {
const [isEditing, setIsEditing] = useState(false);
const [isSubmitting, setIsSubmitting] = useState(false);
- const [callSign, setCallSign] = useState(currentUser?.callSign || '');
- const [displayPreference, setDisplayPreference] = useState(
- currentUser?.displayPreference || EDisplayPreference.WALLET_ADDRESS
- );
+ const [callSign, setCallSign] = useState('');
+ const [displayPreference, setDisplayPreference] = useState(EDisplayPreference.WALLET_ADDRESS);
const [walletWizardOpen, setWalletWizardOpen] = useState(false);
- // Update local state when user data changes
+ // Initialize and update local state when user data changes
useEffect(() => {
if (currentUser) {
- setCallSign(currentUser.callSign || '');
- setDisplayPreference(
- currentUser.displayPreference || EDisplayPreference.WALLET_ADDRESS
- );
+ // Use the same data source as the display (userInfo) for consistency
+ const currentCallSign = userInfo.callSign || currentUser.callSign || '';
+ const currentDisplayPreference = userInfo.displayPreference || currentUser.displayPreference || EDisplayPreference.WALLET_ADDRESS;
+
+ setCallSign(currentCallSign);
+ setDisplayPreference(currentDisplayPreference);
}
- }, [currentUser]);
+ }, [currentUser, userInfo.callSign, userInfo.displayPreference]);
// Copy to clipboard function
const copyToClipboard = async (text: string, label: string) => {
@@ -100,8 +100,12 @@ export default function ProfilePage() {
-
Connect Required
-
Please connect your wallet to view your profile.
+
+ Connect Required
+
+
+ Please connect your wallet to view your profile.
+
@@ -168,8 +172,12 @@ export default function ProfilePage() {
};
const handleCancel = () => {
- setCallSign(currentUser.callSign || '');
- setDisplayPreference(currentUser.displayPreference);
+ // Reset to the same data source as display for consistency
+ const currentCallSign = userInfo.callSign || currentUser.callSign || '';
+ const currentDisplayPreference = userInfo.displayPreference || currentUser.displayPreference || EDisplayPreference.WALLET_ADDRESS;
+
+ setCallSign(currentCallSign);
+ setDisplayPreference(currentDisplayPreference);
setIsEditing(false);
};
@@ -220,7 +228,9 @@ export default function ProfilePage() {
{/* Page Header */}
Profile
-
Manage your account settings and preferences
+
+ Manage your account settings and preferences
+
{/* Two-Card Layout: User Profile + Security Status */}
@@ -283,12 +293,15 @@ export default function ProfilePage() {
- {currentUser.address.slice(0, 8)}...{currentUser.address.slice(-6)}
+ {currentUser.address.slice(0, 8)}...
+ {currentUser.address.slice(-6)}
copyToClipboard(currentUser.address, 'Address')}
+ onClick={() =>
+ copyToClipboard(currentUser.address, 'Address')
+ }
className="border-cyber-muted/30 text-cyber-neutral hover:bg-cyber-muted/30"
>
@@ -301,7 +314,10 @@ export default function ProfilePage() {
-
+
{currentUser.walletType}
@@ -316,7 +332,10 @@ export default function ProfilePage() {
-
+
Call Sign
{isEditing ? (
@@ -330,16 +349,22 @@ export default function ProfilePage() {
/>
) : (
- {userInfo.callSign || currentUser.callSign || 'Not set'}
+ {userInfo.callSign ||
+ currentUser.callSign ||
+ 'Not set'}
)}
- 3-20 characters, letters, numbers, underscores, and hyphens only
+ 3-20 characters, letters, numbers, underscores, and
+ hyphens only
-
+
Display Preference
{isEditing ? (
@@ -354,17 +379,24 @@ export default function ProfilePage() {
-
+
Call Sign (when available)
-
+
Wallet Address
) : (
- {(userInfo.displayPreference || displayPreference) ===
+ {(userInfo.displayPreference ||
+ displayPreference) ===
EDisplayPreference.CALL_SIGN
? 'Call Sign (when available)'
: 'Wallet Address'}
@@ -386,8 +418,8 @@ export default function ProfilePage() {
Cancel
-
@@ -413,7 +445,8 @@ export default function ProfilePage() {
Security
- {(delegationStatus.hasDelegation || delegationInfo?.hasDelegation) && (
+ {(delegationStatus.hasDelegation ||
+ delegationInfo?.hasDelegation) && (
- {(delegationStatus.isValid || delegationInfo?.isValid) ? 'Renew' : 'Setup'}
+ {delegationStatus.isValid || delegationInfo?.isValid
+ ? 'Renew'
+ : 'Setup'}
)}
@@ -430,41 +465,61 @@ export default function ProfilePage() {
{/* Delegation Status */}
- Delegation
+
+ Delegation
+
- {(delegationStatus.isValid || delegationInfo?.isValid) ? 'Active' : 'Inactive'}
+ {delegationStatus.isValid || delegationInfo?.isValid
+ ? 'Active'
+ : 'Inactive'}
{/* Expiry Date */}
- {(delegationStatus.expiresAt || currentUser.delegationExpiry) && (
+ {(delegationStatus.expiresAt ||
+ currentUser.delegationExpiry) && (
-
Valid until
+
+ Valid until
+
- {(delegationStatus.expiresAt || new Date(currentUser.delegationExpiry!)).toLocaleDateString()}
+ {(
+ delegationStatus.expiresAt ||
+ new Date(currentUser.delegationExpiry!)
+ ).toLocaleDateString()}
)}
{/* Signature Status */}
- Signature
+
+ Signature
+
- {(delegationStatus.isValid || currentUser.delegationSignature === 'valid') ? 'Valid' : 'Not signed'}
+ {delegationStatus.isValid ||
+ currentUser.delegationSignature === 'valid'
+ ? 'Valid'
+ : 'Not signed'}
@@ -476,15 +531,22 @@ export default function ProfilePage() {
- {(delegationStatus.publicKey || currentUser.browserPubKey)
+ {delegationStatus.publicKey || currentUser.browserPubKey
? `${(delegationStatus.publicKey || currentUser.browserPubKey!).slice(0, 12)}...${(delegationStatus.publicKey || currentUser.browserPubKey!).slice(-8)}`
: 'Not delegated'}
- {(delegationStatus.publicKey || currentUser.browserPubKey) && (
+ {(delegationStatus.publicKey ||
+ currentUser.browserPubKey) && (
copyToClipboard(delegationStatus.publicKey || currentUser.browserPubKey!, 'Public Key')}
+ onClick={() =>
+ copyToClipboard(
+ delegationStatus.publicKey ||
+ currentUser.browserPubKey!,
+ 'Public Key'
+ )
+ }
className="border-cyber-muted/30 text-cyber-neutral hover:bg-cyber-muted/30"
>
@@ -494,21 +556,24 @@ export default function ProfilePage() {
{/* Warning for expired delegation */}
- {(!delegationStatus.isValid && delegationStatus.hasDelegation) || (!delegationInfo?.isValid && delegationInfo?.hasDelegation) && (
-
-
-
-
- Delegation expired. Renew to continue using your browser key.
-
-
-
- )}
+ {(!delegationStatus.isValid &&
+ delegationStatus.hasDelegation) ||
+ (!delegationInfo?.isValid &&
+ delegationInfo?.hasDelegation && (
+
+
+
+
+ Delegation expired. Renew to continue using your
+ browser key.
+
+
+
+ ))}
-