Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
f1cf8b9
style: adjust layout of preview tables for improved responsiveness
ErwanDecoster Apr 25, 2025
2f725d1
refactor: pass className prop to preview table components for better …
ErwanDecoster Apr 25, 2025
122e547
feat: add bellecour chain configuration and injected wallet provider.
ErwanDecoster Apr 29, 2025
5ee9127
feat: add user authentication and avatar selection features
ErwanDecoster Apr 29, 2025
2ef9a14
fix: update favicon to use iexec logo and remove unused react.svg file
ErwanDecoster Apr 29, 2025
5507253
feat: integrate WagmiProvider for improved wallet management
ErwanDecoster Apr 29, 2025
ed945d8
refactor: update StatusCell type definitions and improve timestamp ha…
ErwanDecoster Apr 29, 2025
ae181c8
fix: move @trivago/prettier-plugin-sort-imports dependency devDepende…
ErwanDecoster Apr 29, 2025
8176f3d
fix: better routing, fixing some bugs
ErwanDecoster Apr 29, 2025
48fb59f
feat: add Radix UI Select component and update styles for popover
ErwanDecoster Apr 29, 2025
b55b5a8
fix: remove unused QueryClient import from main.tsx
ErwanDecoster Apr 29, 2025
2bc182e
feat: enhance TopNavBar with responsive menu, account button and prot…
ErwanDecoster Apr 29, 2025
6849c32
feat: add IexecAccount component to TopNavBar with copy functionality
ErwanDecoster May 5, 2025
482ec31
style: format Button component for better readability
ErwanDecoster May 5, 2025
3201a54
refactor: improve layout and styling of TopNavBar component
ErwanDecoster May 5, 2025
64afbff
feat: rename TopNavBar component to Navbar and better responsive
ErwanDecoster May 5, 2025
cb8beb0
fix: update responsive classes in NavBar for better future layout
ErwanDecoster May 5, 2025
58b5d49
feat: rename TopNavBar to Navbar for consistency and clarity
ErwanDecoster May 5, 2025
6d72a74
feat: add Footer component with social links and navigation
ErwanDecoster May 6, 2025
0b1f443
fix: correct start year in Footer component to 2017
ErwanDecoster May 6, 2025
605445e
fix: update label for Blockscout link in Footer component
ErwanDecoster May 6, 2025
2320a2e
refactor: remove AddressChip component as it is no longer needed
ErwanDecoster May 6, 2025
c23e952
style: format profile.module.css by adding spacing for improved reada…
ErwanDecoster May 6, 2025
e2fe117
fix: update title in index.html to 'iExec Explorer' for consistency
ErwanDecoster May 6, 2025
07b49e1
fix: adjust avatar selection logic to ensure consistent image indexing
ErwanDecoster May 6, 2025
4b0feef
fix: update dark theme comments to add a TODO for light and dark the…
ErwanDecoster May 6, 2025
de7aed3
feat: implement useSyncAccountWithUserStore hook for account synchron…
ErwanDecoster May 6, 2025
b3a23ab
feat: add UnsupportedChain component to handle unsupported blockchain…
ErwanDecoster May 6, 2025
3b2c4e5
fix: enhance UnsupportedChain component to handle unsupported chains …
ErwanDecoster May 7, 2025
c35d330
fix: adjust padding in Footer component for better responsiveness
ErwanDecoster May 12, 2025
e5c1c37
feat: replace IexecAccount component with AddressChip for address dis…
ErwanDecoster May 12, 2025
1a256b7
fix: add iExec Account link in navigation
ErwanDecoster May 12, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .env
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
VITE_POCO_SUBGRAPH_URL="https://thegraph.iex.ec/subgraphs/name/bellecour/poco-v5"
VITE_POCO_SUBGRAPH_URL="https://thegraph.iex.ec/subgraphs/name/bellecour/poco-v5"
VITE_REOWN_PROJECT_ID=b89f75687c01fa0df9e68c903283012d
4 changes: 2 additions & 2 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<link rel="icon" type="image/svg+xml" href="/iexec-logo.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Explorer</title>
<title>iExec Explorer</title>
</head>
<body>
<div id="root"></div>
Expand Down
5,049 changes: 4,563 additions & 486 deletions package-lock.json

Large diffs are not rendered by default.

12 changes: 9 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,20 @@
"@fontsource-variable/mulish": "^5.2.5",
"@fontsource/space-mono": "^5.2.5",
"@hookform/resolvers": "^5.0.1",
"@icons-pack/react-simple-icons": "^12.7.0",
"@radix-ui/react-dialog": "^1.1.7",
"@radix-ui/react-label": "^2.1.3",
"@radix-ui/react-select": "^2.2.2",
"@radix-ui/react-slot": "^1.2.0",
"@radix-ui/react-tabs": "^1.1.4",
"@radix-ui/react-tooltip": "^1.2.0",
"@reown/appkit": "^1.6.9",
"@reown/appkit-adapter-wagmi": "^1.6.9",
"@rollbar/react": "^0.12.1",
"@tailwindcss/vite": "^4.1.3",
"@tanstack/react-query": "^5.74.4",
"@tanstack/react-router": "^1.116.0",
"@tanstack/react-router-devtools": "^1.116.0",
"@trivago/prettier-plugin-sort-imports": "^5.2.2",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"graphql": "^16.10.0",
Expand All @@ -43,15 +46,18 @@
"tailwind-merge": "^3.2.0",
"tailwindcss": "^4.1.3",
"tw-animate-css": "^1.2.5",
"zod": "^3.24.2"
"viem": "^2.28.0",
"wagmi": "^2.15.0",
"zustand": "^5.0.3"
},
"devDependencies": {
"@0no-co/graphqlsp": "^1.12.16",
"@eslint/js": "^9.21.0",
"@graphql-codegen/cli": "^5.0.5",
"@graphql-codegen/schema-ast": "^4.1.0",
"@parcel/watcher": "^2.5.1",
"@tanstack/router-plugin": "^1.116.1",
"@tanstack/router-plugin": "^1.117.2",
"@trivago/prettier-plugin-sort-imports": "^5.2.2",
"@types/node": "^22.14.1",
"@types/react": "^19.0.10",
"@types/react-dom": "^19.0.4",
Expand Down
33 changes: 33 additions & 0 deletions src/assets/iexec-logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/profiles-avatars/Avatar1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/profiles-avatars/Avatar10.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/profiles-avatars/Avatar11.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/profiles-avatars/Avatar12.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/profiles-avatars/Avatar13.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/profiles-avatars/Avatar2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/profiles-avatars/Avatar3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/profiles-avatars/Avatar4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/profiles-avatars/Avatar5.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/profiles-avatars/Avatar6.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/profiles-avatars/Avatar7.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/profiles-avatars/Avatar8.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added src/assets/profiles-avatars/Avatar9.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 0 additions & 1 deletion src/assets/react.svg

This file was deleted.

102 changes: 102 additions & 0 deletions src/components/Footer.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
import { cn } from '@/lib/utils';
import {
SiDiscord,
SiMedium,
SiTelegram,
SiX,
SiYoutube,
} from '@icons-pack/react-simple-icons';
import { Link } from '@tanstack/react-router';
import { Linkedin } from 'lucide-react';
import iExecLogo from '../assets/iexec-logo.svg';
import { Button } from './ui/button';

export function Footer({ className }: { className?: string }) {
const navLinks = [
{ href: 'https://www.iex.ec/', label: 'iExec Website' },
{ href: 'https://blockscout-bellecour.iex.ec/', label: 'Block explorer' }, // TODO import it from protocol data list
{ href: 'https://www.iex.ec/contact', label: 'Contact Us' },
];

const socialLinks = [
{ href: 'https://twitter.com/iEx_ec', icon: <SiX size={16} /> },
{ href: 'https://discord.gg/pbt9m98wnU', icon: <SiDiscord size={16} /> },
{ href: 'https://t.me/iexec_rlc_official', icon: <SiTelegram size={16} /> },
{
href: 'https://www.youtube.com/channel/UCwWxZWvKVHn3CXnmDooLWtA',
icon: <SiYoutube size={16} />,
},
{
href: 'https://www.linkedin.com/company/iex.ec/',
icon: <Linkedin size={16} />,
},
{ href: 'https://medium.com/iex-ec', icon: <SiMedium size={16} /> },
];

const startYear = 2017;
const currentYear = new Date().getFullYear();
const displayYear =
currentYear > startYear
? `${startYear} - ${currentYear}`
: `${currentYear}`;

return (
<footer
className={cn(
'bg-grey-800 border-muted text-grey-200 rounded-3xl border px-6 py-10 sm:px-10 lg:px-20',
className
)}
>
<div className="grid place-items-center justify-center gap-10 xl:grid-cols-3 xl:place-items-stretch">
<Link to="/" className="flex items-center gap-2 font-mono">
<img src={iExecLogo} width="25" height="25" alt="iExec logo" />
<span className="hidden sm:block">iExec Explorer</span>
</Link>

<nav className="flex flex-col items-start gap-4 sm:flex-row sm:items-center sm:gap-4">
{navLinks.map(({ href, label }, idx) => (
<div key={idx} className="flex items-center gap-2">
<Button
asChild
variant="link"
className="text-grey-200 p-2 font-mono"
>
<a href={href} target="_blank" rel="noopener noreferrer">
{label}
</a>
</Button>
{idx < navLinks.length - 1 && (
<span className="bg-grey-200 hidden size-1.5 rounded-full sm:block" />
)}
</div>
))}
</nav>

<div className="flex items-center xl:justify-end">
{socialLinks.map(({ href, icon }, idx) => (
<Button
key={idx}
asChild
variant="link"
className="text-grey-200 p-2"
>
<a
href={href}
target="_blank"
rel="noopener noreferrer"
aria-label="Social link"
>
{icon}
</a>
</Button>
))}
</div>
</div>

<hr className="border-grey-500 mt-10 mb-4" />
<p className="w-full text-center text-sm">
© All Rights Reserved {displayYear}
</p>
</footer>
);
}
27 changes: 27 additions & 0 deletions src/components/UnsupportedChain.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { SUPPORTED_CHAINS } from '@/config';
import { Terminal } from 'lucide-react';
import useUserStore from '@/stores/useUser.store';
import { Alert, AlertDescription, AlertTitle } from './ui/alert';

const SUPPORTED_CHAIN_IDS = SUPPORTED_CHAINS.map((chain) => chain.id);

export function UnsupportedChain() {
const { isConnected, chainId } = useUserStore();

const isChainSupported =
chainId !== undefined && SUPPORTED_CHAIN_IDS.includes(chainId);

if (isChainSupported || !isConnected) {
return null;
}

return (
<Alert variant="destructive" className="mx-auto mt-8 text-left">
<Terminal className="h-4 w-4" />
<AlertTitle>Error</AlertTitle>
<AlertDescription>
It seems that you are using a chain that is not supported.
</AlertDescription>
</Alert>
);
}
64 changes: 64 additions & 0 deletions src/components/navbar/AddressChip.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import clsx from 'clsx';
import { useState } from 'react';
import { getAvatarVisualNumber } from '@/utils/getAvatarVisualNumber';
import { truncateAddress } from '@/utils/truncateAddress';
import { Button } from '../ui/button';
import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from '../ui/tooltip';
import avatarStyles from './profile.module.css';

export function AddressChip({ address }: { address: string }) {
const avatarVisualBg = getAvatarVisualNumber({
address,
});

const [showTooltip, setShowTooltip] = useState(false);
const [tooltipMessage, setTooltipMessage] = useState('Copy address');

const handleCopy = () => {
navigator.clipboard.writeText(address).then(() => {
setTooltipMessage('Address copied!');
setShowTooltip(true);
setTimeout(() => setShowTooltip(false), 2000);
});
};

const handleMouseEnter = () => {
setTooltipMessage('Copy address');
setShowTooltip(true);
};

const handleMouseLeave = () => {
setShowTooltip(false);
};
return (
<TooltipProvider delayDuration={0}>
<Tooltip open={showTooltip}>
<TooltipTrigger asChild>
<Button
className="bg-grey-800 hover:bg-muted text-primary"
variant="secondary"
onClick={handleCopy}
onMouseEnter={handleMouseEnter}
onMouseLeave={handleMouseLeave}
>
<span className="text-sm">{truncateAddress(address)}</span>
<div
className={clsx(
avatarStyles[avatarVisualBg],
'relative z-10 size-4 rounded-full bg-black bg-cover'
)}
/>
</Button>
</TooltipTrigger>
<TooltipContent side="top" className="max-w-sm">
{tooltipMessage}
</TooltipContent>
</Tooltip>
</TooltipProvider>
);
}
Loading