diff --git a/packages/common/src/analytics/types.ts b/packages/common/src/analytics/types.ts index ed613a1cd3..021949f17d 100644 --- a/packages/common/src/analytics/types.ts +++ b/packages/common/src/analytics/types.ts @@ -74,6 +74,7 @@ export enum PostHogAction { StakingBrowsePoolsStakePoolDetailStakeAllOnThisPoolClick = 'staking | browse pools | stake pool detail | stake all on this pool | click', StakingBrowsePoolsStakePoolDetailAddStakingPoolClick = 'staking | browse pools | stake pool detail | add staking pool | click', StakingBrowsePoolsStakePoolDetailUnselectPoolClick = 'staking | browse pools | stake pool detail | unselect pool | click', + StakingBrowsePoolsStakePoolDetailManageDelegation = 'staking | browse pools | stake pool detail | manage delegation | click', StakingBrowsePoolsStakeClick = 'staking | browse pools | stake | click', StakingBrowsePoolsUnselectClick = 'staking | browse pools | unselect | click', StakingBrowsePoolsClearClick = 'staking | browse pools | clear | click', diff --git a/packages/staking/src/features/Drawer/StakePoolDetail.tsx b/packages/staking/src/features/Drawer/StakePoolDetail.tsx index 53ef0295c3..7582ca944c 100644 --- a/packages/staking/src/features/Drawer/StakePoolDetail.tsx +++ b/packages/staking/src/features/Drawer/StakePoolDetail.tsx @@ -209,6 +209,12 @@ const makeActionButtons = ( ): ActionButtonSpec[] => ( [ + manageDelegation && { + callback: tmpNoop, + dataTestId: 'stake-pool-details-manage-delegation-btn', + label: t('drawer.details.manageDelegation'), + ...getSpecOverride(manageDelegation), + }, stakeOnThisPool && { callback: tmpNoop, dataTestId: 'stake-pool-details-stake-btn', @@ -233,12 +239,6 @@ const makeActionButtons = ( label: t('drawer.details.unselectPool'), ...getSpecOverride(unselectPool), }, - manageDelegation && { - callback: tmpNoop, - dataTestId: 'stake-pool-details-manage-delegation-btn', - label: t('drawer.details.manageDelegation'), - ...getSpecOverride(manageDelegation), - }, ] as (ActionButtonSpec | false)[] ).filter(Boolean) as ActionButtonSpec[]; @@ -291,13 +291,19 @@ export const StakePoolDetailFooter = ({ popupView }: StakePoolDetailFooterProps) }); }, [viewedStakePool, analytics, portfolioMutators]); + const onManageDelegationClick = useCallback(() => { + if (!viewedStakePool) return; + analytics.sendEventToPostHog(PostHogAction.StakingBrowsePoolsStakePoolDetailManageDelegation); + portfolioMutators.executeCommand({ + type: 'ManageDelegationFromDetails', + }); + }, [viewedStakePool, analytics, portfolioMutators]); + const actionButtons = useMemo( () => makeActionButtons(t, { addStakingPool: ableToSelect && !selectionsEmpty && { callback: onSelectClick }, - // TODO: disabling this button for now - // eslint-disable-next-line sonarjs/no-redundant-boolean - manageDelegation: false && poolInCurrentPortfolio, + manageDelegation: poolInCurrentPortfolio && { callback: onManageDelegationClick }, selectForMultiStaking: ableToSelect && selectionsEmpty && { callback: onSelectClick }, stakeOnThisPool: selectionsEmpty && ableToStakeOnlyOnThisPool && { callback: onStakeOnThisPool }, unselectPool: poolSelected && { callback: onUnselectClick }, @@ -306,6 +312,7 @@ export const StakePoolDetailFooter = ({ popupView }: StakePoolDetailFooterProps) t, ableToSelect, selectionsEmpty, + onManageDelegationClick, onSelectClick, poolInCurrentPortfolio, ableToStakeOnlyOnThisPool, diff --git a/packages/staking/src/features/store/delegationPortfolioStore/stateMachine/commands.ts b/packages/staking/src/features/store/delegationPortfolioStore/stateMachine/commands.ts index 80bd93f600..2e26136824 100644 --- a/packages/staking/src/features/store/delegationPortfolioStore/stateMachine/commands.ts +++ b/packages/staking/src/features/store/delegationPortfolioStore/stateMachine/commands.ts @@ -100,6 +100,10 @@ export type DrawerFailure = { type: 'DrawerFailure'; }; +export type ManageDelegationFromDetails = { + type: 'ManageDelegationFromDetails'; +}; + export type ActivityCommand = GoToOverview | GoToBrowsePools; export type OverviewCommand = ShowDelegatedPoolDetails | ManagePortfolio | GoToBrowsePools | GoToActivity; @@ -115,7 +119,12 @@ export type BrowsePoolsCommand = export type CurrentPoolDetailsCommand = CancelDrawer; -export type PoolDetailsCommand = CancelDrawer | SelectPoolFromDetails | UnselectPoolFromDetails | BeginSingleStaking; +export type PoolDetailsCommand = + | CancelDrawer + | SelectPoolFromDetails + | UnselectPoolFromDetails + | BeginSingleStaking + | ManageDelegationFromDetails; export type PortfolioManagementPreferencesCommand = | CancelDrawer diff --git a/packages/staking/src/features/store/delegationPortfolioStore/stateMachine/processExpandedViewCases.ts b/packages/staking/src/features/store/delegationPortfolioStore/stateMachine/processExpandedViewCases.ts index e0d114decf..5e04d224e4 100644 --- a/packages/staking/src/features/store/delegationPortfolioStore/stateMachine/processExpandedViewCases.ts +++ b/packages/staking/src/features/store/delegationPortfolioStore/stateMachine/processExpandedViewCases.ts @@ -18,6 +18,7 @@ import { GoToActivity, GoToBrowsePools, GoToOverview, + ManageDelegationFromDetails, ManagePortfolio, NewPortfolioConfirmationCommand, NewPortfolioFailureCommand, @@ -224,6 +225,15 @@ export const processExpandedViewCases: Handler = (params) => ...atomicStateMutators.cancelDrawer({ state, targetFlow: DelegationFlow.BrowsePools }), viewedStakePool: undefined, })), + ManageDelegationFromDetails: handler( + ({ state }) => ({ + ...state, + activeDelegationFlow: DelegationFlow.PortfolioManagement, + activeDrawerStep: DrawerManagementStep.Preferences, + draftPortfolio: currentPortfolioToDraft(state.currentPortfolio), + viewedStakePool: undefined, + }) + ), SelectPoolFromDetails: handler( ({ state, command: { data } }) => ({ ...state,