UNPKG

@suiware/kit

Version:

Opinionated React components and hooks for building Sui dApps.

1 lines 5.64 kB
{"version":3,"sources":["../src/helpers/formatNetworkType.ts","../src/hooks/useNetworkType.tsx"],"names":["wallet","ctx"],"mappings":";;;;;;AAMO,IAAM,iBAAA,GAAoB,CAAC,WAAgC,KAAA;AAChE,EAAI,IAAA,WAAA,CAAY,UAAW,CAAA,MAAM,CAAG,EAAA;AAClC,IAAO,OAAA,WAAA,CAAY,UAAU,CAAC,CAAA;AAAA;AAEhC,EAAO,OAAA,WAAA;AACT,CAAA;;;ACHA,IAAM,wBAA2B,GAAA,GAAA;AAqDjC,IAAM,iBAAiB,CAAC;AAAA,EACtB,QAAA;AAAA,EACA;AACF,CAAA,GAA2B,EAAgC,KAAA;AACzD,EAAA,MAAM,SAAS,gBAAiB,EAAA;AAChC,EAAA,MAAM,MAAM,mBAAoB,EAAA;AAChC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAEpC,MAAS,CAAA;AAIX,EAAM,MAAA,sBAAA,GAAyB,CAC7BA,OAAAA,EACAC,IACG,KAAA;AA5EP,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AA6EI,IAAI,IAAA,CAACD,QAAO,WAAa,EAAA;AACvB,MAAA,cAAA,CAAe,MAAS,CAAA;AACxB,MAAA;AAAA;AAGF,IAAA,MAAM,UAAa,GAAA,iBAAA;AAAA,MACjB,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAAA,QAAO,aAAP,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,aAAtB,IAAiC,GAAA,MAAA,GAAA,EAAA,CAAA,CAAA,CAAA,CAAG,WAApC,IAA6C,GAAA,MAAA,GAAA,EAAA,CAAA,CAAA;AAAA,KAC/C;AAGA,IAAA,cAAA,CAAe,UAAU,CAAA;AAGzB,IAAA,IAAI,cAAc,IAAM,EAAA;AACtB,MAAAC,IAAAA,CAAI,cAAc,UAAU,CAAA;AAAA;AAC9B,GACF;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,sBAAA,CAAuB,QAAQ,GAAG,CAAA;AAElC,IAAI,IAAA,QAAA,IAAY,IAAQ,IAAA,QAAA,KAAa,KAAO,EAAA;AAC1C,MAAA;AAAA;AAGF,IAAA,MAAM,QAAW,GAAA,WAAA;AAAA,MACf,MAAM;AACJ,QAAA,IAAI,CAAC,MAAA,CAAO,WAAe,IAAA,CAAC,QAAU,EAAA;AACpC,UAAA,cAAA,CAAe,MAAS,CAAA;AACxB,UAAA,aAAA,CAAc,QAAQ,CAAA;AACtB,UAAA;AAAA;AAGF,QAAA,sBAAA,CAAuB,QAAQ,GAAG,CAAA;AAAA,OACpC;AAAA,MACA,QAAA,IAAY,gBAAoB,IAAA,IAAA,GAC5B,gBACA,GAAA;AAAA,KACN;AACA,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,QAAQ,CAAA;AAAA,KACvB;AAAA,KACC,CAAC,QAAA,EAAU,gBAAkB,EAAA,MAAA,EAAQ,GAAG,CAAC,CAAA;AAE5C,EAAO,OAAA;AAAA,IACL,WAAA;AAAA,IACA,WAAa,EAAA,MAAM,sBAAuB,CAAA,MAAA,EAAQ,GAAG;AAAA,GACvD;AACF,CAAA;AAEA,IAAO,sBAAQ,GAAA","file":"chunk-XIMYSCDZ.mjs","sourcesContent":["/**\n * Format network type to a human readable format.\n *\n * @param machineName\n * @returns\n */\nexport const formatNetworkType = (machineName: string): string => {\n if (machineName.startsWith('sui:')) {\n return machineName.substring(4)\n }\n return machineName\n}\n","import {\n SuiClientProviderContext,\n useCurrentWallet,\n useSuiClientContext,\n} from '@mysten/dapp-kit'\nimport { useEffect, useState } from 'react'\nimport { formatNetworkType } from '~~/helpers/formatNetworkType'\n\nconst DEFAULT_REFETCH_INTERVAL = 3000\n\nexport interface IUseNetworkTypeParams {\n /**\n * (Optional) The flag determines whether the app network needs to be synchronized with the wallet network regularly or just once.\n */\n autoSync?: boolean\n /**\n * (Optional) Auto sync interval in milliseconds.\n */\n autoSyncInterval?: number\n}\nexport interface IUseNetworkTypeResponse {\n /**\n * Network type or undefined if wallet is not connected.\n */\n networkType?: 'mainnet' | 'testnet' | 'devnet' | 'localnet'\n /**\n * Synchronize app network with wallet network on demand.\n */\n synchronize: () => void\n}\n\n/**\n * The useNetworkType() hook lets you determine which network is currently active in the user wallet.\n *\n * It's possible to request the network type once or on a regular basis.\n * If a wallet is not connected, the network type will be undefined.\n * Please note the user wallet is the single point of truth and the only way to switch the network now is through wallet settings.\n *\n * Usage:\n * - One-time request\n * ```ts\n * const { networkType } = useNetworkType({\n * autoSync: false\n * })\n * ```\n * - On demand\n * ```ts\n * const { networkType, synchronize } = useNetworkType()\n * synchronize()\n * ```\n * - Regular update\n * ```ts\n * const { networkType } = useNetworkType({\n * autoSync: true,\n * autoSyncInterval: 3000\n * })\n * ```\n *\n * @param {IUseNetworkTypeParams} params The parameter object.\n * @returns {IUseNetworkTypeResponse} An object with the network type and synchronize function.\n */\nconst useNetworkType = ({\n autoSync,\n autoSyncInterval,\n}: IUseNetworkTypeParams = {}): IUseNetworkTypeResponse => {\n const wallet = useCurrentWallet()\n const ctx = useSuiClientContext()\n const [networkType, setNetworkType] = useState<\n 'mainnet' | 'testnet' | 'devnet' | 'localnet' | undefined\n >(undefined)\n\n // @todo Find a better type for the wallet.\n /* eslint-disable @typescript-eslint/no-explicit-any */\n const synchronizeNetworkType = (\n wallet: any,\n ctx: SuiClientProviderContext\n ) => {\n if (!wallet.isConnected) {\n setNetworkType(undefined)\n return\n }\n\n const newNetwork = formatNetworkType(\n wallet.currentWallet?.accounts?.[0].chains?.[0]\n ) as 'mainnet' | 'testnet' | 'devnet' | 'localnet' | undefined\n\n // Save currently selected wallet network.\n setNetworkType(newNetwork)\n\n // If network is defined, set the app network to it.\n if (newNetwork != null) {\n ctx.selectNetwork(newNetwork)\n }\n }\n\n useEffect(() => {\n synchronizeNetworkType(wallet, ctx)\n\n if (autoSync == null || autoSync === false) {\n return\n }\n\n const interval = setInterval(\n () => {\n if (!wallet.isConnected || !autoSync) {\n setNetworkType(undefined)\n clearInterval(interval)\n return\n }\n\n synchronizeNetworkType(wallet, ctx)\n },\n autoSync && autoSyncInterval != null\n ? autoSyncInterval\n : DEFAULT_REFETCH_INTERVAL\n )\n return () => {\n clearTimeout(interval)\n }\n }, [autoSync, autoSyncInterval, wallet, ctx])\n\n return {\n networkType,\n synchronize: () => synchronizeNetworkType(wallet, ctx),\n }\n}\n\nexport default useNetworkType\n"]}