Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
67ee922
feat: add tab navigation for app details and deals in AppsRoute compo…
ErwanDecoster Oct 15, 2025
e2de601
feat: add AppAccessTable component and integrate into AppsRoute
ErwanDecoster Oct 16, 2025
ca724b5
feat: enhance AppAccessTable and AppDealsTable with loading and outda…
ErwanDecoster Oct 16, 2025
aeae164
feat: rename columns to appColumns and remove app address and price c…
ErwanDecoster Oct 16, 2025
10c2da9
feat: add tab navigation for dataset details, deals, and access in Da…
ErwanDecoster Oct 16, 2025
df51a0e
feat: integrate loading and outdated state management in DatasetDeals…
ErwanDecoster Oct 16, 2025
6970d14
feat: add DatasetAccessTable component and integrate it into Datasets…
ErwanDecoster Oct 16, 2025
691c276
feat: add tab navigation for workerpool details, deals, and access
ErwanDecoster Oct 16, 2025
9a9ac27
feat: enhance WorkerpoolDealsTable with loading and outdated state ma…
ErwanDecoster Oct 16, 2025
f26634d
feat: add WorkerpoolAccessTable component and integrate it into Worke…
ErwanDecoster Oct 16, 2025
d05f864
feat: refactor loading and outdated state management in access and de…
ErwanDecoster Oct 16, 2025
6a02688
feat: add access tables for apps, datasets, and workerpools on addres…
ErwanDecoster Oct 17, 2025
f93cdc2
fix: correct import path for WorkerpoolAccessTable component
ErwanDecoster Oct 17, 2025
f340188
refactor: remove console logs from access data fetching functions
ErwanDecoster Oct 17, 2025
d35aa68
feat: enhance pagination logic to display all pages for 7 or fewer to…
ErwanDecoster Oct 17, 2025
4efb46f
feat: update pagination logic to support mobile-first design and dyna…
ErwanDecoster Oct 17, 2025
6332132
feat: update access data fetching logic to support pagination and tot…
ErwanDecoster Oct 17, 2025
2e677ba
fix: prevent rendering of pagination controls for invalid states
ErwanDecoster Oct 17, 2025
83f837e
refactor: prettier
ErwanDecoster Oct 17, 2025
66d27df
fix: stabilize pagination rendering during lading state
ErwanDecoster Oct 17, 2025
198d0ed
fix: normalize case for order restrictions in CopyButton components
ErwanDecoster Oct 17, 2025
370ab44
Merge branch 'main' into feature/add-assets-order
ErwanDecoster Oct 17, 2025
53f512f
fix: useTabParam() name in dataset
ErwanDecoster Oct 17, 2025
985787e
fix: correct error message wording in loading alerts across multiple …
ErwanDecoster Oct 17, 2025
2f58900
Merge branch 'feature/add-assets-order' of https://github.com/iExecBl…
ErwanDecoster Oct 17, 2025
f704e37
feat: add accessibility attributes to buttons in CopyButton, Navbar, …
ErwanDecoster Oct 17, 2025
f5e75ce
feat: add accessibility attributes to ChainLink and Button components…
ErwanDecoster Oct 17, 2025
6693077
feat: add accessibility attributes to social links in Footer and Bloc…
ErwanDecoster Oct 17, 2025
e87be49
feat: enhance accessibility in SearcherBar component; add ARIA roles …
ErwanDecoster Oct 17, 2025
b4eaf7f
Merge branch 'main' into feature/better-accessibility
ErwanDecoster Dec 19, 2025
590531a
fix: fix typo
ErwanDecoster Dec 19, 2025
cc1f0b0
fix: improve accessibility roles in Navbar and Tabs components
ErwanDecoster Dec 19, 2025
0176a02
Merge branch 'feature/better-accessibility' of https://github.com/iEx…
ErwanDecoster Dec 19, 2025
f1f5e93
fix: update package-lock file
ErwanDecoster Dec 19, 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: 3 additions & 0 deletions src/components/CopyButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,9 @@ const CopyButton = ({
onMouseEnter={handleMouseEnter}
onMouseLeave={handleMouseLeave}
className="hover:before:bg-muted active:before:bg-secondary relative z-0 -mx-1 -my-1 flex items-center gap-1 px-1 py-1 transition-colors before:absolute before:inset-0 before:-z-10 before:rounded-lg before:duration-200 active:before:scale-x-[0.98] active:before:scale-y-[0.94]"
id="copy-button"
type="button"
aria-label="Copy"
>
{buttonText && <span className="mr-1 text-sm">{buttonText}</span>}
<Copy className="size-4 flex-none" />
Expand Down
38 changes: 30 additions & 8 deletions src/components/Footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,40 @@ import { Button } from './ui/button';

function SocialLinksItems({ className }: { className?: string }) {
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://twitter.com/iEx_ec',
icon: <SiX size={16} />,
ariaLabel: 'Twitter',
},
{
href: 'https://discord.gg/pbt9m98wnU',
icon: <SiDiscord size={16} />,
ariaLabel: 'Discord',
},
{
href: 'https://t.me/iexec_rlc_official',
icon: <SiTelegram size={16} />,
ariaLabel: 'Telegram',
},
{
href: 'https://www.youtube.com/channel/UCwWxZWvKVHn3CXnmDooLWtA',
icon: <SiYoutube size={16} />,
ariaLabel: 'YouTube',
},
{
href: 'https://www.linkedin.com/company/iex.ec/',
icon: <Linkedin size={16} />,
ariaLabel: 'LinkedIn',
},
{
href: 'https://medium.com/iex-ec',
icon: <SiMedium size={16} />,
ariaLabel: 'Medium',
},
{ href: 'https://medium.com/iex-ec', icon: <SiMedium size={16} /> },
];
return (
<div className={cn('flex', className)}>
{socialLinks.map(({ href, icon }, idx) => (
{socialLinks.map(({ href, icon, ariaLabel }, idx) => (
<Button
key={idx}
asChild
Expand All @@ -41,7 +59,7 @@ function SocialLinksItems({ className }: { className?: string }) {
href={href}
target="_blank"
rel="noopener noreferrer"
aria-label="Social link"
aria-label={ariaLabel}
>
{icon}
</a>
Expand Down Expand Up @@ -78,8 +96,12 @@ export function Footer({ className }: { className?: string }) {
)}
>
<div className="flex flex-col items-center justify-between gap-10 xl:flex-row">
<ChainLink to="/" className="flex items-center gap-2 font-mono">
<img src={iExecLogo} width="25" height="25" alt="iExec logo" />
<ChainLink
to="/"
aria-label="Home"
className="flex items-center gap-2 font-mono"
>
<img src={iExecLogo} width="25" height="25" alt="" />
<span>iExec Explorer</span>
</ChainLink>

Expand Down
2 changes: 1 addition & 1 deletion src/components/ModeToggle.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ export function ModeToggle() {
size="none"
role="radio"
aria-checked={selected}
aria-label={label}
aria-label={`Toggle ${label} mode`}
title={label}
className={cn(
'text-foreground hover:bg-muted p-1',
Expand Down
1 change: 1 addition & 0 deletions src/components/PaginatedNavigation.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ export const PaginatedNavigation = ({
pages.push(1, 'ellipsis', currentPage, 'ellipsis', stableTotalPages);
}
} else {
// Desktop: full pagination logic
pages.push(1);

if (currentPage <= 3) {
Expand Down
1 change: 1 addition & 0 deletions src/components/SmartLinkGroup.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ export default function SmartLinkGroup({
href={`${getBlockExplorerUrl(chainId)}/${blockExplorerPath[type]}`}
target="_blank"
rel="noopener noreferrer"
aria-label="Open in Block Explorer"
>
<ExternalLink className="text-foreground" />
</a>
Expand Down
1 change: 1 addition & 0 deletions src/components/navbar/AddressChip.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ export function AddressChip({ address }: { address: string }) {
<Button
className="dark:bg-popover bg-primary-foreground hover:bg-muted text-primary dark:text-brand duration-300"
variant="secondary"
aria-label="Copy connected wallet address"
onClick={handleCopy}
onMouseEnter={handleMouseEnter}
onMouseLeave={handleMouseLeave}
Expand Down
22 changes: 18 additions & 4 deletions src/components/navbar/NavBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,12 @@ export function Navbar() {

return (
<nav className="flex items-center justify-between py-6">
<ChainLink to="/" className="-m-2 flex items-center gap-2 p-2 font-mono">
<img src={iExecLogo} width="25" height="25" alt="iExec logo" />
<ChainLink
to="/"
aria-label="Home"
className="-m-2 flex items-center gap-2 p-2 font-mono"
>
<img src={iExecLogo} width="25" height="25" alt="" />
<span className="hidden lg:block">iExec Explorer</span>
</ChainLink>
<div className="mr-8 flex items-center gap-4 md:mr-0">
Expand Down Expand Up @@ -76,6 +80,8 @@ export function Navbar() {
<button
type="button"
className="inline-flex items-center gap-2"
id="logout-button"
aria-label="Logout"
onClick={() => logout()}
>
Logout
Expand Down Expand Up @@ -103,6 +109,7 @@ export function Navbar() {
className="absolute -inset-2 size-10 cursor-pointer appearance-none bg-transparent"
name="menu"
id="menu"
aria-label="Toggle navigation menu"
checked={isMenuOpen}
readOnly
/>
Expand All @@ -113,15 +120,22 @@ export function Navbar() {

<div className="border-secondary bg-background pointer-events-auto fixed inset-y-0 left-0 z-10 flex w-full -translate-x-full flex-col overflow-auto rounded-r-3xl border-r px-6 pt-6 duration-200 group-has-[:checked]:translate-x-0 lg:w-[255px] lg:translate-x-0">
<div className="-m-2 mr-6 flex items-center justify-between gap-2 py-2 pl-2">
<ChainLink to="/" className="font-mono" onClick={handleMenuToggle}>
<img src={iExecLogo} width="25" height="25" alt="iExec logo" />
<ChainLink
to="/"
aria-label="Home"
className="font-mono"
onClick={handleMenuToggle}
>
<img src={iExecLogo} width="25" height="25" alt="" />
</ChainLink>
{isConnected ? (
<div className="flex max-w-[1260px] items-center gap-2">
<AddressChip address={userAddress!} />

<button
type="button"
id="logout-button"
aria-label="Logout"
className="hover:drop-shadow-link-hover p-1"
onClick={() => logout()}
>
Expand Down
2 changes: 2 additions & 0 deletions src/modules/Tabs.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ export function Tabs({
left: `${indicatorStyle.left}px`,
width: `${indicatorStyle.width}px`,
}}
role="tablist"
/>

{tabLabels.map((label, index) => {
Expand All @@ -73,6 +74,7 @@ export function Tabs({
key={label}
data-tab-index={index}
variant="link"
role="tab"
size={'none'}
onClick={() => {
if (!isDisabled) onTabChange(index);
Expand Down
9 changes: 8 additions & 1 deletion src/modules/datasets/SchemaSearch.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ export function SchemaSearch({
return (
<div className="rounded-2xl border">
<button
id="schema-search-button"
aria-label="Toggle schema search filters"
className={cn('flex w-full items-center gap-2 px-10 py-6 duration-200')}
onClick={() => setIsOpen(!isOpen)}
>
Expand Down Expand Up @@ -103,7 +105,12 @@ export function SchemaSearch({
>
<span className={cn('inline-block')}>{schema.path}</span>
<span className={cn('inline-block')}>: {schema.type}</span>
<button onClick={() => onRemoveFilter(index)}>
<button
type="button"
id={`remove-filter-${index}`}
aria-label={`Remove filter ${schema.path} of type ${schema.type}`}
onClick={() => onRemoveFilter(index)}
>
<X className="ml-1" size={12} />
</button>
</span>
Expand Down
33 changes: 24 additions & 9 deletions src/modules/search/SearcherBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@
};

run();
}, [initialSearch, chainId]);

Check warning on line 128 in src/modules/search/SearcherBar.tsx

View workflow job for this annotation

GitHub Actions / build

React Hook useEffect has a missing dependency: 'mutateAsync'. Either include it or remove the dependency array

useEffect(() => {
if (errorCount > 0) {
Expand Down Expand Up @@ -154,6 +154,10 @@
onChange={(e) => setInputValue(e.target.value)}
onKeyDown={handleKeyDown}
disabled={isPending}
type="search"
role="searchbox"
aria-label="Search for addresses, deal IDs, task IDs, or transaction hashes"
aria-describedby={localError || error ? 'search-error' : undefined}
className={cn(
'bg-muted border-secondary w-full rounded-2xl py-5.5 pl-12 sm:py-6.5',
isConnected && 'sm:pr-32',
Expand All @@ -164,7 +168,12 @@
placeholder="Search address, deal id, task id, transaction hash..."
/>
{(localError || error) && (
<p className="bg-danger text-danger-foreground border-danger-border absolute -bottom-8 rounded-full border px-4">
<p
id="search-error"
role="alert"
aria-live="polite"
className="bg-danger text-danger-foreground border-danger-border absolute -bottom-8 rounded-full border px-4"
>
{localError ? localError.message : error?.message}
</p>
)}
Expand All @@ -174,14 +183,20 @@
/>
</div>

<div
className={cn(
'mt-4 flex justify-center gap-4 sm:hidden',
isError && 'mt-10'
)}
>
<div className="flex justify-center">
<Button variant="outline" onClick={handleSearch} disabled={isPending}>
<div className={cn('mt-4 flex justify-center gap-4', isError && 'mt-10')}>
<div className="flex justify-center sm:sr-only">
<Button
variant="outline"
onClick={handleSearch}
disabled={isPending}
type="button"
aria-label={
isPending
? 'Searching in progress'
: 'Search for the entered value'
}
tabIndex={0}
>
{isPending ? 'Searching...' : 'Search'}
</Button>
</div>
Expand Down
Loading