Skip to content

Commit 32c3f09

Browse files
authored
Merge pull request #73 from lidofinance/fix/permissions-ux
fix: permission bugs
2 parents d621424 + b1e1e36 commit 32c3f09

17 files changed

Lines changed: 84 additions & 62 deletions

File tree

features/adjustment/mint/hooks/use-mint.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
1+
import invariant from 'tiny-invariant';
12
import { useCallback } from 'react';
23
import { useEstimateGas, useAccount } from 'wagmi';
3-
import { Address, encodeFunctionData } from 'viem';
4+
import { type Address, encodeFunctionData } from 'viem';
5+
6+
import { useSendTransaction, withSuccess } from 'modules/web3';
47

58
import { dashboardAbi } from 'abi/dashboard-abi';
6-
import { useVaultInfo } from 'modules/vaults';
7-
import invariant from 'tiny-invariant';
8-
import { useVaultPermission } from 'modules/vaults/hooks/use-vault-permissions';
9+
import { useVaultInfo, useVaultPermission } from 'modules/vaults';
10+
911
import { fallbackedAddress } from 'utils/fallbacked-address';
10-
import { useSendTransaction, withSuccess } from 'modules/web3';
12+
1113
import { useReportStatus } from 'features/report';
1214
import { GoToVault } from 'modules/vaults/components/go-to-vault';
1315

features/adjustment/repay/hooks/use-burn.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { useCallback } from 'react';
2+
import invariant from 'tiny-invariant';
23
import { useEstimateGas, useAccount } from 'wagmi';
34
import { encodeFunctionData } from 'viem';
45

56
import { dashboardAbi } from 'abi/dashboard-abi';
6-
import { useVaultInfo } from 'modules/vaults';
7-
import invariant from 'tiny-invariant';
8-
import { useVaultPermission } from 'modules/vaults/hooks/use-vault-permissions';
7+
import { useVaultInfo, useVaultPermission } from 'modules/vaults';
8+
99
import {
1010
TransactionEntry,
1111
useLidoSDK,

features/claim/claim-form/hooks/use-claim.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@ import { useEstimateGas, useAccount } from 'wagmi';
33
import { Address, encodeFunctionData } from 'viem';
44

55
import { dashboardAbi } from 'abi/dashboard-abi';
6-
import { useVaultInfo } from 'modules/vaults';
6+
import { useVaultInfo, useVaultPermission } from 'modules/vaults';
77
import invariant from 'tiny-invariant';
8-
import { useVaultPermission } from 'modules/vaults/hooks/use-vault-permissions';
98
import { fallbackedAddress } from 'utils/fallbacked-address';
109
import { useSendTransaction, withSuccess } from 'modules/web3';
1110
import { GoToVault } from 'modules/vaults/components/go-to-vault';

features/overview/components/balance/balance.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@ const sectionPayloadList: SectionPayload[] = [
77
title: 'Available to withdraw',
88
key: 'withdrawableEth',
99
actionText: 'Withdraw ETH',
10+
actionRole: 'withdrawer',
1011
actionLink: (vault) => appPaths.vaults.vault(vault).eth('withdraw'),
1112
},
1213
{
1314
title: 'Idle capital',
1415
key: 'balanceEth',
1516
actionText: 'Supply ETH',
17+
actionRole: 'supplier',
1618
actionLink: (vault) => appPaths.vaults.vault(vault).eth('supply'),
1719
},
1820
// TODO: add this after the metrics are implemented

features/overview/components/node-operator/node-operator.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const sectionPayloadList: SectionPayload[] = [
1212
key: 'accumulatedFee',
1313
actionLink: (vault) => appPaths.vaults.vault(vault).claim,
1414
actionText: 'Claim',
15+
actionRole: 'nodeOperatorFeeClaimer',
1516
},
1617
];
1718

features/overview/contexts/vault-overview.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { calculateOverview } from '@lidofinance/lsv-cli/dist/utils/calculate-ove
1313
import { formatBalance, formatPercent } from 'utils';
1414

1515
import { useVaultInfo } from 'modules/vaults/vault-context';
16-
import { VAULT_TOTAL_BASIS_POINTS } from 'modules/vaults';
16+
import { VAULT_TOTAL_BASIS_POINTS, VAULTS_ALL_ROLES } from 'modules/vaults';
1717

1818
export interface VaultOverviewContextType {
1919
values: {
@@ -47,6 +47,7 @@ export type SectionPayload = {
4747
title: string;
4848
key: VaultOverviewContextKeys;
4949
actionText?: string;
50+
actionRole?: VAULTS_ALL_ROLES;
5051
actionLink?: (vaultAddress: Address) => string;
5152
isLoading?: boolean;
5253
};

features/overview/shared/overview-item/overview-item.tsx

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,45 @@
1-
import { FC } from 'react';
2-
3-
import { Text, Button } from '@lidofinance/lido-ui';
4-
import { ItemWrapper, Title } from './styles';
1+
import type { FC } from 'react';
2+
import type { Address } from 'viem';
53
import { useRouter } from 'next/router';
6-
import { useVaultInfo } from 'modules/vaults';
4+
import { Text, Button } from '@lidofinance/lido-ui';
5+
6+
import { useVaultInfo, useVaultPermission } from 'modules/vaults';
77

88
import { OverviewItemValue } from './overview-item-value';
9+
import { ItemWrapper, Title } from './styles';
910

10-
import type { Address } from 'viem';
11+
import type { SectionPayload } from 'features/overview/contexts';
1112

1213
export type ItemProps = {
13-
title: string;
14-
content: string | number | undefined;
15-
actionLink?: (vaultAddress: Address) => string;
16-
actionText?: string;
1714
isLoading?: boolean;
15+
content: string | Address | number;
1816
color?: string;
19-
};
17+
} & Omit<SectionPayload, 'key'>;
2018

2119
export const OverviewItem: FC<ItemProps> = ({
2220
title,
2321
content,
2422
actionLink,
23+
actionRole,
2524
actionText,
2625
isLoading,
2726
color,
2827
}) => {
2928
const { vaultAddress } = useVaultInfo();
29+
const { hasPermission } = useVaultPermission(actionRole);
30+
31+
// show action if
32+
const showAction = !!(
33+
// 1. all data is provided
34+
(
35+
actionLink &&
36+
actionText &&
37+
vaultAddress &&
38+
// 2. user has permission for it (if actionRole is provided)
39+
(!actionRole || hasPermission)
40+
)
41+
);
42+
3043
const router = useRouter();
3144

3245
return (
@@ -41,7 +54,7 @@ export const OverviewItem: FC<ItemProps> = ({
4154
isLoading={isLoading}
4255
color={color}
4356
/>
44-
{!!(actionLink && actionText && vaultAddress) && (
57+
{showAction && (
4558
<Button
4659
size="xs"
4760
variant="translucent"

features/settings/main/components/controllers/data-field.tsx

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
import { FC } from 'react';
2+
import { Text } from '@lidofinance/lido-ui';
3+
4+
import { useVaultConfirmingRoles, useVaultPermission } from 'modules/vaults';
5+
6+
import { EditProperty } from './edit-property';
27
import { ReadonlyInput } from './readonly-input';
38
import { GroupWrapper } from './styles';
49

510
import type { MainSettingsOverview } from 'features/settings/main/types';
6-
import { EditProperty } from './edit-property';
7-
import { Text } from '@lidofinance/lido-ui';
8-
import {
9-
useVaultConfirmingRoles,
10-
useVaultPermission,
11-
} from 'modules/vaults/hooks/use-vault-permissions';
1211

1312
type InputResolverProps = MainSettingsOverview;
1413

features/settings/main/components/controllers/data-manager-field.tsx

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
import { FC } from 'react';
2+
import { Text } from '@lidofinance/lido-ui';
23
import { DisplayAddress } from './display-address';
3-
import { GroupWrapper } from './styles';
44

55
import {
66
MainSettingsOverview,
77
ManagersKeys,
88
} from 'features/settings/main/types';
99
import { EditPropertyAddress } from './edit-property-address';
10-
import { Text } from '@lidofinance/lido-ui';
11-
import {
12-
useVaultConfirmingRoles,
13-
useVaultPermission,
14-
} from 'modules/vaults/hooks/use-vault-permissions';
10+
11+
import { useVaultConfirmingRoles, useVaultPermission } from 'modules/vaults';
12+
13+
import { GroupWrapper } from './styles';
1514

1615
type InputResolverProps = MainSettingsOverview;
1716

@@ -28,7 +27,7 @@ export const DataManagerField: FC<InputResolverProps> = ({
2827
isConfirmingRoles ? undefined : canEditRole,
2928
);
3029

31-
const isEditable = hasConfirmingRole || hasPermission;
30+
const isEditable = (isConfirmingRoles && hasConfirmingRole) || hasPermission;
3231
return (
3332
<GroupWrapper>
3433
<Text size="xs" strong>

features/settings/permissions/permissions.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ import {
1717
VAULT_MANAGER_PERMISSIONS_LIST,
1818
NO_MANAGER_PERMISSION_LIST,
1919
VAULT_ROOT_ROLES,
20+
useVaultPermission,
2021
} from 'modules/vaults';
21-
import { useVaultPermission } from 'modules/vaults/hooks/use-vault-permissions';
2222

2323
type PermissionSectionEntry = {
2424
permissionsTitle: string;

0 commit comments

Comments
 (0)