diff --git a/apps/core/package.json b/apps/core/package.json
index 31cb3e43e8f..62f4294df24 100644
--- a/apps/core/package.json
+++ b/apps/core/package.json
@@ -32,6 +32,7 @@
"@sentry/react": "^7.59.2",
"@tanstack/react-query": "^5.50.1",
"bignumber.js": "^9.1.1",
+ "clsx": "^2.1.1",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-hook-form": "^7.45.2",
diff --git a/apps/core/src/components/IconImage/IconImage.tsx b/apps/core/src/components/IconImage/IconImage.tsx
new file mode 100644
index 00000000000..bb2861f10b1
--- /dev/null
+++ b/apps/core/src/components/IconImage/IconImage.tsx
@@ -0,0 +1,73 @@
+// Copyright (c) 2024 IOTA Stiftung
+// SPDX-License-Identifier: Apache-2.0
+
+import { useState } from 'react';
+import cn from 'clsx';
+
+export enum ImageIconSize {
+ Small = 'w-5 h-5',
+ Medium = 'w-8 h-8',
+ Large = 'w-10 h-10',
+ Full = 'w-full h-full',
+}
+
+export interface ImageIconProps {
+ src: string | null | undefined;
+ label: string;
+ fallback: string;
+ alt?: string;
+ rounded?: boolean;
+ size?: ImageIconSize;
+}
+
+function FallBackAvatar({
+ str,
+ rounded,
+ size = ImageIconSize.Large,
+}: {
+ str: string;
+ rounded?: boolean;
+ size?: ImageIconSize;
+}) {
+ function generateTextSize(size: ImageIconSize) {
+ switch (size) {
+ case ImageIconSize.Small:
+ return 'text-label-sm';
+ case ImageIconSize.Medium:
+ return 'text-label-md';
+ case ImageIconSize.Large:
+ return 'text-title-md';
+ case ImageIconSize.Full:
+ return 'text-title-lg';
+ }
+ }
+ return (
+
+ {str?.slice(0, 2)}
+
+ );
+}
+
+export function ImageIcon({ src, label, alt = label, fallback, rounded, size }: ImageIconProps) {
+ const [error, setError] = useState(false);
+ return (
+
+ {error || !src ? (
+
+ ) : (
+
setError(true)}
+ />
+ )}
+
+ );
+}
diff --git a/apps/core/src/components/index.ts b/apps/core/src/components/index.ts
index 67d6dc1fbc3..7eaa658a92a 100644
--- a/apps/core/src/components/index.ts
+++ b/apps/core/src/components/index.ts
@@ -2,3 +2,4 @@
// SPDX-License-Identifier: Apache-2.0
export * from './KioskClientProvider';
+export * from './IconImage/IconImage';
diff --git a/apps/wallet-dashboard/app/(protected)/staking/page.tsx b/apps/wallet-dashboard/app/(protected)/staking/page.tsx
index 4286e9a7cc9..5a5e3dfe4e1 100644
--- a/apps/wallet-dashboard/app/(protected)/staking/page.tsx
+++ b/apps/wallet-dashboard/app/(protected)/staking/page.tsx
@@ -3,8 +3,16 @@
'use client';
-import { AmountBox, Box, StakeCard, StakeDialog, StakeDetailsPopup, Button } from '@/components';
-import { usePopups } from '@/hooks';
+import {
+ AmountBox,
+ Box,
+ StakeCard,
+ StakeDialog,
+ // StakeDetailsPopup,
+ Button,
+ StakedDetailsDialog,
+} from '@/components';
+// import { usePopups } from '@/hooks';
import {
ExtendedDelegatedStake,
formatDelegatedStake,
@@ -21,9 +29,11 @@ import { useState } from 'react';
function StakingDashboardPage(): JSX.Element {
const account = useCurrentAccount();
+ console.log(account);
const [isDialogStakeOpen, setIsDialogStakeOpen] = useState(false);
+ const [stakedDetails, setStakedDetails] = useState(null);
- const { openPopup, closePopup } = usePopups();
+ // const { openPopup, closePopup } = usePopups();
const { data: delegatedStakeData } = useGetDelegatedStake({
address: account?.address || '',
staleTime: DELEGATED_STAKES_QUERY_STALE_TIME,
@@ -43,8 +53,13 @@ function StakingDashboardPage(): JSX.Element {
);
const viewStakeDetails = (extendedStake: ExtendedDelegatedStake) => {
- openPopup();
+ setStakedDetails(extendedStake);
+ // openPopup();
};
+ function handleCloseStakedDetails() {
+ setStakedDetails(null);
+ }
+
function handleNewStake() {
setIsDialogStakeOpen(true);
}
@@ -79,6 +94,12 @@ function StakingDashboardPage(): JSX.Element {
;
+ {!!stakedDetails && (
+
+ )}
>
);
}
diff --git a/apps/wallet-dashboard/app/layout.tsx b/apps/wallet-dashboard/app/layout.tsx
index a4c71f018d6..5d151e6847c 100644
--- a/apps/wallet-dashboard/app/layout.tsx
+++ b/apps/wallet-dashboard/app/layout.tsx
@@ -36,6 +36,7 @@ export default function RootLayout({
void;
+}
+
+export function StakedDetailsDialog({ handleClose, stakedDetails }: StakeDialogProps): JSX.Element {
+ console.log(stakedDetails);
+
+ function handleUnstake() {
+ console.log('Unstake');
+ }
+
+ function handleAddNewStake() {
+ console.log('Stake');
+ }
+
+ return (
+
+ );
+}
diff --git a/apps/wallet-dashboard/components/Dialogs/StakedDetails/index.ts b/apps/wallet-dashboard/components/Dialogs/StakedDetails/index.ts
new file mode 100644
index 00000000000..8bed21e405b
--- /dev/null
+++ b/apps/wallet-dashboard/components/Dialogs/StakedDetails/index.ts
@@ -0,0 +1,4 @@
+// Copyright (c) 2024 IOTA Stiftung
+// SPDX-License-Identifier: Apache-2.0
+
+export * from './StakedDetailsDialog';
diff --git a/apps/wallet-dashboard/components/Dialogs/index.ts b/apps/wallet-dashboard/components/Dialogs/index.ts
index 3f350d11b78..e370fa8e5d4 100644
--- a/apps/wallet-dashboard/components/Dialogs/index.ts
+++ b/apps/wallet-dashboard/components/Dialogs/index.ts
@@ -2,3 +2,4 @@
// SPDX-License-Identifier: Apache-2.0
export * from './Staking';
+export * from './StakedDetails';
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d987ac3fc3a..b6c441490a8 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -179,7 +179,7 @@ importers:
version: 5.2.1(@types/eslint@8.56.12)(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3)
jest:
specifier: ^29.5.0
- version: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2))
+ version: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2))
prettier:
specifier: ^3.3.1
version: 3.3.3
@@ -191,7 +191,7 @@ importers:
version: 6.3.4
ts-jest:
specifier: ^29.1.0
- version: 29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2)))(typescript@5.6.2)
+ version: 29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)))(typescript@5.6.2)
ts-loader:
specifier: ^9.4.4
version: 9.5.1(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.7.28))
@@ -240,6 +240,9 @@ importers:
bignumber.js:
specifier: ^9.1.1
version: 9.1.2
+ clsx:
+ specifier: ^2.1.1
+ version: 2.1.1
react:
specifier: ^18.3.1
version: 18.3.1
@@ -1051,7 +1054,7 @@ importers:
version: 14.2.3(eslint@8.57.1)(typescript@5.6.2)
jest:
specifier: ^29.5.0
- version: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2))
+ version: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2))
postcss:
specifier: ^8.4.31
version: 8.4.47
@@ -1060,7 +1063,7 @@ importers:
version: 3.4.13(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2))
ts-jest:
specifier: ^29.1.0
- version: 29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2)))(typescript@5.6.2)
+ version: 29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)))(typescript@5.6.2)
typescript:
specifier: ^5.5.3
version: 5.6.2
@@ -20546,7 +20549,7 @@ snapshots:
jest-util: 29.7.0
slash: 3.0.0
- '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2))':
+ '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2))':
dependencies:
'@jest/console': 29.7.0
'@jest/reporters': 29.7.0(node-notifier@10.0.0)
@@ -20560,7 +20563,7 @@ snapshots:
exit: 0.1.2
graceful-fs: 4.2.11
jest-changed-files: 29.7.0
- jest-config: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2))
+ jest-config: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2))
jest-haste-map: 29.7.0
jest-message-util: 29.7.0
jest-regex-util: 29.6.3
@@ -26477,13 +26480,13 @@ snapshots:
crc-32@1.2.2: {}
- create-jest@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2)):
+ create-jest@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)):
dependencies:
'@jest/types': 29.6.3
chalk: 4.1.2
exit: 0.1.2
graceful-fs: 4.2.11
- jest-config: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2))
+ jest-config: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2))
jest-util: 29.7.0
prompts: 2.4.2
transitivePeerDependencies:
@@ -29692,16 +29695,16 @@ snapshots:
- babel-plugin-macros
- supports-color
- jest-cli@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2)):
+ jest-cli@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)):
dependencies:
- '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2))
+ '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2))
'@jest/test-result': 29.7.0
'@jest/types': 29.6.3
chalk: 4.1.2
- create-jest: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2))
+ create-jest: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2))
exit: 0.1.2
import-local: 3.2.0
- jest-config: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2))
+ jest-config: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2))
jest-util: 29.7.0
jest-validate: 29.7.0
yargs: 17.7.2
@@ -29713,7 +29716,7 @@ snapshots:
- supports-color
- ts-node
- jest-config@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2)):
+ jest-config@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)):
dependencies:
'@babel/core': 7.25.2
'@jest/test-sequencer': 29.7.0
@@ -29970,12 +29973,12 @@ snapshots:
merge-stream: 2.0.0
supports-color: 8.1.1
- jest@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2)):
+ jest@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)):
dependencies:
- '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2))
+ '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2))
'@jest/types': 29.6.3
import-local: 3.2.0
- jest-cli: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2))
+ jest-cli: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2))
optionalDependencies:
node-notifier: 10.0.0
transitivePeerDependencies:
@@ -34562,12 +34565,12 @@ snapshots:
ts-interface-checker@0.1.13: {}
- ts-jest@29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2)))(typescript@5.6.2):
+ ts-jest@29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)))(typescript@5.6.2):
dependencies:
bs-logger: 0.2.6
ejs: 3.1.10
fast-json-stable-stringify: 2.1.0
- jest: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2))
+ jest: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2))
jest-util: 29.7.0
json5: 2.2.3
lodash.memoize: 4.1.2