diff --git a/.changeset/chatty-ideas-post.md b/.changeset/chatty-ideas-post.md new file mode 100644 index 00000000..6b62fe86 --- /dev/null +++ b/.changeset/chatty-ideas-post.md @@ -0,0 +1,5 @@ +--- +"@stakekit/widget": patch +--- + +feat: ledger disabled accounts if on priority list diff --git a/.changeset/cute-suits-search.md b/.changeset/cute-suits-search.md new file mode 100644 index 00000000..2e31b5cb --- /dev/null +++ b/.changeset/cute-suits-search.md @@ -0,0 +1,5 @@ +--- +"@stakekit/with-vite-bundled": patch +--- + +chore: rename package to @stakekit/with-vite-bundled diff --git a/.changeset/tiny-crabs-teach.md b/.changeset/tiny-crabs-teach.md new file mode 100644 index 00000000..729dee28 --- /dev/null +++ b/.changeset/tiny-crabs-teach.md @@ -0,0 +1,5 @@ +--- +"@stakekit/widget": patch +--- + +feat(earn-page): add tracking for initial token and yield selection events diff --git a/packages/examples/with-vite-bundled/package.json b/packages/examples/with-vite-bundled/package.json index 6fcd6fbb..5e07e961 100644 --- a/packages/examples/with-vite-bundled/package.json +++ b/packages/examples/with-vite-bundled/package.json @@ -1,5 +1,5 @@ { - "name": "with-vite-bundled", + "name": "@stakekit/with-vite-bundled", "private": true, "version": "0.2.1", "type": "module", diff --git a/packages/widget/src/domain/types/chains.ts b/packages/widget/src/domain/types/chains.ts index e48cec1c..ed3af355 100644 --- a/packages/widget/src/domain/types/chains.ts +++ b/packages/widget/src/domain/types/chains.ts @@ -318,6 +318,15 @@ export const supportedLedgerFamiliesWithCurrency = { }, } as const satisfies SupportedLedgerFamiliesWithCurrency; +export const ledgerChainPriority = new Map([ + [SubstrateNetworks.Polkadot, 1], + [EvmNetworks.AvalancheC, 2], + [MiscNetworks.Tron, 3], + [EvmNetworks.Binance, 4], + [CosmosNetworks.Cronos, 5], + [EvmNetworks.Polygon, 6], +]); + export type SupportedLedgerFamiliesWithCurrency = Record< SupportedLedgerLiveFamilies, Record< diff --git a/packages/widget/src/pages/details/earn-page/state/earn-page-state-context.tsx b/packages/widget/src/pages/details/earn-page/state/earn-page-state-context.tsx index 3bc92e5d..ed5bd22b 100644 --- a/packages/widget/src/pages/details/earn-page/state/earn-page-state-context.tsx +++ b/packages/widget/src/pages/details/earn-page/state/earn-page-state-context.tsx @@ -1,5 +1,6 @@ import { isNetworkWithEnterMinBasedOnPosition } from "@sk-widget/domain/types/stake"; import { usePositionsData } from "@sk-widget/hooks/use-positions-data"; +import { useTrackStateEvents } from "@sk-widget/pages/details/earn-page/state/use-track-state-events"; import type { TokenDto, YieldDto } from "@stakekit/api-hooks"; import type { Networks } from "@stakekit/common"; import BigNumber from "bignumber.js"; @@ -309,6 +310,8 @@ export const EarnPageStateProvider = ({ children }: PropsWithChildren) => { ); }, [initToken, selectedToken]); + useTrackStateEvents({ initToken, initYield }); + const actions = useMemo( () => ({ onMaxClick: () => diff --git a/packages/widget/src/pages/details/earn-page/state/use-track-state-events.ts b/packages/widget/src/pages/details/earn-page/state/use-track-state-events.ts new file mode 100644 index 00000000..9ebbfab2 --- /dev/null +++ b/packages/widget/src/pages/details/earn-page/state/use-track-state-events.ts @@ -0,0 +1,44 @@ +import { useTrackEvent } from "@sk-widget/hooks/tracking/use-track-event"; +import type { TokenDto, YieldDto } from "@stakekit/api-hooks"; +import type { Maybe } from "purify-ts"; +import { useEffect } from "react"; + +export const useTrackStateEvents = ({ + initToken, + initYield, +}: { + initToken: Maybe; + initYield: Maybe; +}) => { + const trackEvent = useTrackEvent(); + + /** + * Track init yield selected event + */ + useEffect(() => { + initYield.ifJust((v) => + trackEvent("initYield", { + yieldId: v.id, + network: v.token.network, + tokenName: v.token.name, + tokenAddress: v.token.address, + tokenSymbol: v.token.symbol, + }) + ); + }, [initYield, trackEvent]); + + /** + * Track init token selected event + */ + useEffect(() => { + initToken.ifJust((v) => + trackEvent("initToken", { + name: v.name, + network: v.network, + address: v.address, + symbol: v.symbol, + decimals: v.decimals, + }) + ); + }, [initToken, trackEvent]); +}; diff --git a/packages/widget/src/providers/ledger/ledger-connector.ts b/packages/widget/src/providers/ledger/ledger-connector.ts index c29c17f7..b78de1dd 100644 --- a/packages/widget/src/providers/ledger/ledger-connector.ts +++ b/packages/widget/src/providers/ledger/ledger-connector.ts @@ -4,7 +4,6 @@ import { WindowMessageTransport, deserializeTransaction, } from "@ledgerhq/wallet-api-client"; -import { Networks } from "@stakekit/common"; import type { Chain, WalletDetailsParams, @@ -17,9 +16,10 @@ import type { CreateConnectorFn } from "wagmi"; import { createConnector } from "wagmi"; import { images } from "../../assets/images"; import { skNormalizeChainId } from "../../domain"; -import type { - SupportedLedgerLiveFamilies, - SupportedSKChains, +import { + type SupportedLedgerLiveFamilies, + type SupportedSKChains, + ledgerChainPriority, } from "../../domain/types/chains"; import type { InitParams } from "../../domain/types/init-params"; import { isLedgerDappBrowserProvider } from "../../utils"; @@ -118,15 +118,6 @@ const createLedgerLiveConnector = ({ ledgerAccounts = accounts; - const chainPriority = new Map([ - [Networks.Polkadot, 1], - [Networks.AvalancheC, 2], - [Networks.Tron, 3], - [Networks.Binance, 4], - [Networks.Cronos, 5], - [Networks.Polygon, 6], - ]); - const accountsWithChain = accounts .reduce( (acc, next) => { @@ -151,8 +142,10 @@ const createLedgerLiveConnector = ({ [] as { account: Account; chainItem: ChainItem }[] ) .sort((a, b) => { - const aPriority = chainPriority.get(a.chainItem.skChainName) || 999; - const bPriority = chainPriority.get(b.chainItem.skChainName) || 999; + const aPriority = + ledgerChainPriority.get(a.chainItem.skChainName) || 999; + const bPriority = + ledgerChainPriority.get(b.chainItem.skChainName) || 999; return aPriority - bPriority; }); diff --git a/packages/widget/src/providers/ledger/utils.ts b/packages/widget/src/providers/ledger/utils.ts index 90f7f92a..27a2dacf 100644 --- a/packages/widget/src/providers/ledger/utils.ts +++ b/packages/widget/src/providers/ledger/utils.ts @@ -16,7 +16,10 @@ import type { SupportedLedgerLiveFamilies, SupportedSKChains, } from "../../domain/types/chains"; -import { supportedLedgerFamiliesWithCurrency } from "../../domain/types/chains"; +import { + ledgerChainPriority, + supportedLedgerFamiliesWithCurrency, +} from "../../domain/types/chains"; import type { GetEitherAsyncRight } from "../../types"; import { typeSafeObjectEntries } from "../../utils"; @@ -75,8 +78,16 @@ export const getFilteredSupportedLedgerFamiliesWithCurrency = ({ return { ...acc, [key]: { ...item, chain, enabled: true } }; } - // biome-ignore lint/performance/noAccumulatingSpread: - return { ...acc, [key]: { ...item, chain, enabled: false } }; + if ( + ledgerChainPriority.has( + item.skChainName as unknown as SupportedSKChains + ) + ) { + // biome-ignore lint/performance/noAccumulatingSpread: + return { ...acc, [key]: { ...item, chain, enabled: false } }; + } + + return acc; }, {} as MappedSupportedLedgerFamiliesWithCurrency); // biome-ignore lint/performance/noAccumulatingSpread: diff --git a/packages/widget/src/providers/tracking/index.tsx b/packages/widget/src/providers/tracking/index.tsx index c7afd93d..eaad91da 100644 --- a/packages/widget/src/providers/tracking/index.tsx +++ b/packages/widget/src/providers/tracking/index.tsx @@ -55,6 +55,8 @@ const trackEventMap = { validatorsSubmitted: "Validators submitted", validatorImported: "Validator imported", viewTxClicked: "View transaction clicked", + initYield: "system/initYield", + initToken: "system/initToken", } as const; type TrackEventKey = keyof typeof trackEventMap;