Skip to content

Commit ed0986f

Browse files
committed
Merge branch 'main' into feature/add-bulk
2 parents de4929f + f0667b0 commit ed0986f

38 files changed

+2465
-177
lines changed

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{".":"1.26.0"}
1+
{".":"1.27.0"}

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11
# Changelog
22

3+
## [1.27.0](https://github.com/iExecBlockchainComputing/explorer-v2/compare/iexec-explorer-v1.26.0...iexec-explorer-v1.27.0) (2025-11-19)
4+
5+
6+
### 🚀 Features
7+
8+
* add (datasets, apps, workerpools) access table and enhance pagination ([#88](https://github.com/iExecBlockchainComputing/explorer-v2/issues/88)) ([e6e7e01](https://github.com/iExecBlockchainComputing/explorer-v2/commit/e6e7e01aa494009b9fad2d8756d9014eaa1aba92))
9+
* upgrade access feature ([#91](https://github.com/iExecBlockchainComputing/explorer-v2/issues/91)) ([5e08ad5](https://github.com/iExecBlockchainComputing/explorer-v2/commit/5e08ad5d11d2c53422c5036e3bdffbd84274dc7c))
10+
11+
12+
### 🐞 Bug Fixes
13+
14+
* better address page error handling ([#90](https://github.com/iExecBlockchainComputing/explorer-v2/issues/90)) ([e48fb62](https://github.com/iExecBlockchainComputing/explorer-v2/commit/e48fb6220a93a8ace297d2c412765c11dfa53ae7))
15+
* update execution count display in deal details ([#93](https://github.com/iExecBlockchainComputing/explorer-v2/issues/93)) ([94f3195](https://github.com/iExecBlockchainComputing/explorer-v2/commit/94f31952bda8c5bc895dfabe591fad34def794d1))
16+
317
## [1.26.0](https://github.com/iExecBlockchainComputing/explorer-v2/compare/iexec-explorer-v1.25.0...iexec-explorer-v1.26.0) (2025-10-15)
418

519

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "iexec-explorer",
33
"private": true,
4-
"version": "1.26.0",
4+
"version": "1.27.0",
55
"type": "module",
66
"scripts": {
77
"dev": "vite",

src/components/CopyButton.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,18 @@ const CopyButton = ({
1212
displayText,
1313
buttonText,
1414
tooltipWithText = false,
15+
tooltipText = 'Copy',
1516
className,
1617
}: {
1718
textToCopy: string;
1819
displayText?: string;
1920
buttonText?: string;
2021
tooltipWithText?: boolean;
22+
tooltipText?: string;
2123
className?: string;
2224
}) => {
2325
const [showTooltip, setShowTooltip] = useState(false);
24-
const [tooltipMessage, setTooltipMessage] = useState('Copy');
26+
const [tooltipMessage, setTooltipMessage] = useState(tooltipText);
2527

2628
const handleCopy = () => {
2729
navigator.clipboard.writeText(textToCopy).then(() => {
@@ -35,7 +37,7 @@ const CopyButton = ({
3537
if (tooltipWithText && displayText) {
3638
setTooltipMessage(`Copy "${displayText}"`);
3739
} else {
38-
setTooltipMessage('Copy');
40+
setTooltipMessage(tooltipText);
3941
}
4042
setShowTooltip(true);
4143
};

src/components/SmartLinkGroup.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,23 @@ type LinkType =
2222
| 'workerpool'
2323
| 'app'
2424
| 'address'
25-
| 'transaction';
25+
| 'transaction'
26+
| 'order';
2627

2728
interface SmartLinkGroupProps {
2829
type: LinkType;
2930
addressOrId: string;
3031
label?: string;
3132
isCurrentPage?: boolean;
33+
showAddressOrIdAndLabel?: boolean;
3234
}
3335

3436
export default function SmartLinkGroup({
3537
type,
3638
addressOrId,
3739
label,
3840
isCurrentPage = false,
41+
showAddressOrIdAndLabel = false,
3942
}: SmartLinkGroupProps) {
4043
const { chainId, isConnected } = useUserStore();
4144
const basePath = {
@@ -46,6 +49,7 @@ export default function SmartLinkGroup({
4649
app: 'app',
4750
address: 'address',
4851
transaction: 'tx',
52+
order: 'order',
4953
};
5054

5155
const { data: ens } = useQuery({
@@ -78,12 +82,15 @@ export default function SmartLinkGroup({
7882
<Link
7983
to={`/${getChainFromId(chainId)?.slug}/${basePath[type]}/${addressOrId}`}
8084
>
81-
<span className="hidden md:inline">{label ?? addressOrId}</span>
85+
<span className="hidden md:inline">
86+
{label && !showAddressOrIdAndLabel ? label : addressOrId}
87+
</span>
8288
<span className="inline md:hidden">
8389
{(label
8490
? truncateAddress(label)
8591
: truncateAddress(addressOrId)) ?? addressOrId}
8692
</span>
93+
{showAddressOrIdAndLabel && label ? `(${label})` : ''}
8794
{ens ? `(${ens})` : ''}
8895
</Link>
8996
</Button>
@@ -98,7 +105,7 @@ export default function SmartLinkGroup({
98105
</div>
99106
)}
100107

101-
{type !== 'task' && (
108+
{type !== 'task' && type !== 'order' && (
102109
<TooltipProvider delayDuration={0}>
103110
<Tooltip>
104111
<TooltipTrigger asChild>
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
const DatasetIcon = ({ size = 20, className = '' }) => (
2+
<svg
3+
width={size}
4+
height={size}
5+
viewBox="0 0 24 25"
6+
fill="none"
7+
xmlns="http://www.w3.org/2000/svg"
8+
className={className}
9+
>
10+
<path
11+
d="M12 9.16691C16.1421 9.16691 19.5 8.04764 19.5 6.66695C19.5 5.28626 16.1421 4.16699 12 4.16699C7.85786 4.16699 4.5 5.28626 4.5 6.66695C4.5 8.04764 7.85786 9.16691 12 9.16691Z"
12+
stroke="currentColor"
13+
strokeWidth="2.4"
14+
strokeLinecap="round"
15+
strokeLinejoin="round"
16+
/>
17+
<path
18+
d="M19.5 12.5C19.5 13.8834 16.1666 15 12 15C7.83336 15 4.5 13.8832 4.5 12.5"
19+
stroke="currentColor"
20+
strokeWidth="2.4"
21+
strokeLinecap="round"
22+
strokeLinejoin="round"
23+
/>
24+
<path
25+
d="M4.5 6.66602V18.3327C4.5 19.716 7.83336 20.8326 12 20.8326C16.1666 20.8326 19.5 19.7159 19.5 18.3327V6.66602"
26+
stroke="currentColor"
27+
strokeWidth="2.4"
28+
strokeLinecap="round"
29+
strokeLinejoin="round"
30+
/>
31+
</svg>
32+
);
33+
34+
export default DatasetIcon;

src/modules/Tabs.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ export function Tabs({
7878
if (!isDisabled) onTabChange(index);
7979
}}
8080
className={cn(
81-
'text-foreground relative z-10 border border-transparent px-8 py-2 transition-colors duration-300 hover:no-underline',
81+
'text-foreground relative z-10 border border-transparent px-4 py-2 transition-colors duration-300 hover:no-underline',
8282
isDisabled && 'cursor-not-allowed opacity-50',
8383
currentTab === index && 'text-primary'
8484
)}

src/modules/Tags.tsx

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { decodeTag } from 'iexec/utils';
2+
import CopyButton from '@/components/CopyButton';
3+
import { truncateAddress } from '@/utils/truncateAddress';
4+
5+
const Tags = (props: { children: string }) => {
6+
const { children: raw } = props;
7+
8+
let tags: string[] | null = null;
9+
try {
10+
tags = decodeTag(raw);
11+
} catch {
12+
// If decoding fails, fall back to displaying raw encoded tag
13+
}
14+
return (
15+
<div className="flex items-center gap-1">
16+
{tags ? (
17+
tags.length > 0 ? (
18+
tags.map((t) => (
19+
<span
20+
className="inline-flex w-fit rounded-full border px-4 py-2 text-xs uppercase"
21+
key={t}
22+
>
23+
{t}
24+
</span>
25+
))
26+
) : (
27+
<span className="text-muted-foreground">None</span>
28+
)
29+
) : (
30+
<>
31+
<span className="hidden md:inline">{raw}</span>
32+
<span className="inline md:hidden">{truncateAddress(raw)}</span>
33+
</>
34+
)}{' '}
35+
<CopyButton
36+
className="ml-2"
37+
textToCopy={raw}
38+
tooltipText="Copy raw tag"
39+
/>
40+
</div>
41+
);
42+
};
43+
44+
export default Tags;
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { ChainLink } from '@/components/ChainLink';
2+
import {
3+
Breadcrumb,
4+
BreadcrumbItem,
5+
BreadcrumbLink,
6+
BreadcrumbList,
7+
BreadcrumbPage,
8+
BreadcrumbSeparator,
9+
} from '@/components/ui/breadcrumb';
10+
import { truncateAddress } from '@/utils/truncateAddress';
11+
12+
type AccessBreadcrumbsProps = {
13+
accessHash: string;
14+
};
15+
16+
export function AccessBreadcrumbs({ accessHash }: AccessBreadcrumbsProps) {
17+
return (
18+
<Breadcrumb>
19+
<BreadcrumbList>
20+
<BreadcrumbItem>
21+
<BreadcrumbLink asChild>
22+
<ChainLink to="/">Homepage</ChainLink>
23+
</BreadcrumbLink>
24+
</BreadcrumbItem>
25+
<BreadcrumbSeparator />
26+
<BreadcrumbItem>
27+
<BreadcrumbPage>
28+
Access{' '}
29+
<span className="font-normal">{truncateAddress(accessHash)}</span>
30+
</BreadcrumbPage>
31+
</BreadcrumbItem>
32+
</BreadcrumbList>
33+
</Breadcrumb>
34+
);
35+
}

0 commit comments

Comments
 (0)